@@ -83,8 +83,7 @@ FEMesh* FECylinder::BuildMesh()
83
83
}
84
84
85
85
// -----------------------------------------------------------------------------
86
- // Build a butterfly mesh
87
- FEMesh* FECylinder::BuildButterfly ()
86
+ bool FECylinder::BuildMultiBlock ()
88
87
{
89
88
assert (m_pobj);
90
89
@@ -122,122 +121,124 @@ FEMesh* FECylinder::BuildButterfly()
122
121
double a = m_r * b;
123
122
double c = R1;
124
123
124
+ ClearMB ();
125
+
125
126
// create the MB nodes
126
127
m_MBNode.resize (34 );
127
- m_MBNode[ 0 ].m_r = vec3d ( -a, -a, 0 );
128
- m_MBNode[ 1 ].m_r = vec3d ( 0 , -a, 0 );
129
- m_MBNode[ 2 ].m_r = vec3d ( a, -a, 0 );
130
- m_MBNode[ 3 ].m_r = vec3d ( -a, 0 , 0 );
131
- m_MBNode[ 4 ].m_r = vec3d ( 0 , 0 , 0 );
132
- m_MBNode[ 5 ].m_r = vec3d ( a, 0 , 0 );
133
- m_MBNode[ 6 ].m_r = vec3d ( -a, a, 0 );
134
- m_MBNode[ 7 ].m_r = vec3d ( 0 , a, 0 );
135
- m_MBNode[ 8 ].m_r = vec3d ( a, a, 0 );
136
-
137
- m_MBNode[ 9 ].m_r = vec3d (-a, -a, h);
138
- m_MBNode[10 ].m_r = vec3d ( 0 , -a, h);
139
- m_MBNode[11 ].m_r = vec3d ( a, -a, h);
140
- m_MBNode[12 ].m_r = vec3d (-a, 0 , h);
141
- m_MBNode[13 ].m_r = vec3d ( 0 , 0 , h);
142
- m_MBNode[14 ].m_r = vec3d ( a, 0 , h);
143
- m_MBNode[15 ].m_r = vec3d (-a, a, h);
144
- m_MBNode[16 ].m_r = vec3d ( 0 , a, h);
145
- m_MBNode[17 ].m_r = vec3d ( a, a, h);
128
+ m_MBNode[0 ].m_r = vec3d (-a, -a, 0 );
129
+ m_MBNode[1 ].m_r = vec3d (0 , -a, 0 );
130
+ m_MBNode[2 ].m_r = vec3d (a, -a, 0 );
131
+ m_MBNode[3 ].m_r = vec3d (-a, 0 , 0 );
132
+ m_MBNode[4 ].m_r = vec3d (0 , 0 , 0 );
133
+ m_MBNode[5 ].m_r = vec3d (a, 0 , 0 );
134
+ m_MBNode[6 ].m_r = vec3d (-a, a, 0 );
135
+ m_MBNode[7 ].m_r = vec3d (0 , a, 0 );
136
+ m_MBNode[8 ].m_r = vec3d (a, a, 0 );
137
+
138
+ m_MBNode[9 ].m_r = vec3d (-a, -a, h);
139
+ m_MBNode[10 ].m_r = vec3d (0 , -a, h);
140
+ m_MBNode[11 ].m_r = vec3d (a, -a, h);
141
+ m_MBNode[12 ].m_r = vec3d (-a, 0 , h);
142
+ m_MBNode[13 ].m_r = vec3d (0 , 0 , h);
143
+ m_MBNode[14 ].m_r = vec3d (a, 0 , h);
144
+ m_MBNode[15 ].m_r = vec3d (-a, a, h);
145
+ m_MBNode[16 ].m_r = vec3d (0 , a, h);
146
+ m_MBNode[17 ].m_r = vec3d (a, a, h);
146
147
147
148
m_MBNode[18 ].m_r = vec3d (-b, -b, 0 );
148
- m_MBNode[19 ].m_r = vec3d ( 0 , -c, 0 );
149
- m_MBNode[20 ].m_r = vec3d ( b, -b, 0 );
150
- m_MBNode[21 ].m_r = vec3d ( c, 0 , 0 );
151
- m_MBNode[22 ].m_r = vec3d ( b, b, 0 );
152
- m_MBNode[23 ].m_r = vec3d ( 0 , c, 0 );
153
- m_MBNode[24 ].m_r = vec3d (-b, b, 0 );
154
- m_MBNode[25 ].m_r = vec3d (-c, 0 , 0 );
149
+ m_MBNode[19 ].m_r = vec3d (0 , -c, 0 );
150
+ m_MBNode[20 ].m_r = vec3d (b, -b, 0 );
151
+ m_MBNode[21 ].m_r = vec3d (c, 0 , 0 );
152
+ m_MBNode[22 ].m_r = vec3d (b, b, 0 );
153
+ m_MBNode[23 ].m_r = vec3d (0 , c, 0 );
154
+ m_MBNode[24 ].m_r = vec3d (-b, b, 0 );
155
+ m_MBNode[25 ].m_r = vec3d (-c, 0 , 0 );
155
156
156
157
m_MBNode[26 ].m_r = vec3d (-b, -b, h);
157
- m_MBNode[27 ].m_r = vec3d ( 0 , -c, h);
158
- m_MBNode[28 ].m_r = vec3d ( b, -b, h);
159
- m_MBNode[29 ].m_r = vec3d ( c, 0 , h);
160
- m_MBNode[30 ].m_r = vec3d ( b, b, h);
161
- m_MBNode[31 ].m_r = vec3d ( 0 , c, h);
162
- m_MBNode[32 ].m_r = vec3d (-b, b, h);
163
- m_MBNode[33 ].m_r = vec3d (-c, 0 , h);
158
+ m_MBNode[27 ].m_r = vec3d (0 , -c, h);
159
+ m_MBNode[28 ].m_r = vec3d (b, -b, h);
160
+ m_MBNode[29 ].m_r = vec3d (c, 0 , h);
161
+ m_MBNode[30 ].m_r = vec3d (b, b, h);
162
+ m_MBNode[31 ].m_r = vec3d (0 , c, h);
163
+ m_MBNode[32 ].m_r = vec3d (-b, b, h);
164
+ m_MBNode[33 ].m_r = vec3d (-c, 0 , h);
164
165
165
166
// create the MB blocks
166
167
m_MBlock.resize (12 );
167
168
MBBlock& b1 = m_MBlock[0 ];
168
169
b1.SetID (0 );
169
- b1.SetNodes (0 ,1 , 4 , 3 , 9 , 10 ,13 ,12 );
170
- b1.SetSizes (nd,nd,nz);
171
- b1.SetZoning (1 ,1 , fz, false , false , m_bz);
170
+ b1.SetNodes (0 , 1 , 4 , 3 , 9 , 10 , 13 , 12 );
171
+ b1.SetSizes (nd, nd, nz);
172
+ b1.SetZoning (1 , 1 , fz, false , false , m_bz);
172
173
173
174
MBBlock& b2 = m_MBlock[1 ];
174
175
b2.SetID (0 );
175
- b2.SetNodes (1 ,2 , 5 , 4 , 10 ,11 ,14 ,13 );
176
- b2.SetSizes (nd,nd,nz);
177
- b2.SetZoning (1 ,1 , fz, false , false , m_bz);
176
+ b2.SetNodes (1 , 2 , 5 , 4 , 10 , 11 , 14 , 13 );
177
+ b2.SetSizes (nd, nd, nz);
178
+ b2.SetZoning (1 , 1 , fz, false , false , m_bz);
178
179
179
180
MBBlock& b3 = m_MBlock[2 ];
180
181
b3.SetID (0 );
181
- b3.SetNodes (3 ,4 , 7 , 6 , 12 ,13 ,16 ,15 );
182
- b3.SetSizes (nd,nd,nz);
183
- b3.SetZoning (1 ,1 , fz, false , false , m_bz);
182
+ b3.SetNodes (3 , 4 , 7 , 6 , 12 , 13 , 16 , 15 );
183
+ b3.SetSizes (nd, nd, nz);
184
+ b3.SetZoning (1 , 1 , fz, false , false , m_bz);
184
185
185
186
MBBlock& b4 = m_MBlock[3 ];
186
187
b4.SetID (0 );
187
- b4.SetNodes (4 ,5 , 8 , 7 , 13 ,14 ,17 ,16 );
188
- b4.SetSizes (nd,nd,nz);
189
- b4.SetZoning (1 ,1 , fz, false , false , m_bz);
188
+ b4.SetNodes (4 , 5 , 8 , 7 , 13 , 14 , 17 , 16 );
189
+ b4.SetSizes (nd, nd, nz);
190
+ b4.SetZoning (1 , 1 , fz, false , false , m_bz);
190
191
191
192
MBBlock& b5 = m_MBlock[4 ];
192
193
b5.SetID (0 );
193
- b5.SetNodes (0 ,18 ,19 ,1 , 9 , 26 ,27 ,10 );
194
- b5.SetSizes (ns,nd,nz);
195
- b5.SetZoning (fr,1 , fz, false , false , m_bz);
194
+ b5.SetNodes (0 , 18 , 19 , 1 , 9 , 26 , 27 , 10 );
195
+ b5.SetSizes (ns, nd, nz);
196
+ b5.SetZoning (fr, 1 , fz, false , false , m_bz);
196
197
197
198
MBBlock& b6 = m_MBlock[5 ];
198
199
b6.SetID (0 );
199
- b6.SetNodes (1 ,19 ,20 ,2 , 10 ,27 ,28 ,11 );
200
- b6.SetSizes (ns,nd,nz);
201
- b6.SetZoning (fr,1 , fz, false , false , m_bz);
200
+ b6.SetNodes (1 , 19 , 20 , 2 , 10 , 27 , 28 , 11 );
201
+ b6.SetSizes (ns, nd, nz);
202
+ b6.SetZoning (fr, 1 , fz, false , false , m_bz);
202
203
203
204
MBBlock& b7 = m_MBlock[6 ];
204
205
b7.SetID (0 );
205
- b7.SetNodes (2 ,20 ,21 ,5 , 11 ,28 ,29 ,14 );
206
- b7.SetSizes (ns,nd,nz);
207
- b7.SetZoning (fr,1 , fz, false , false , m_bz);
206
+ b7.SetNodes (2 , 20 , 21 , 5 , 11 , 28 , 29 , 14 );
207
+ b7.SetSizes (ns, nd, nz);
208
+ b7.SetZoning (fr, 1 , fz, false , false , m_bz);
208
209
209
210
MBBlock& b8 = m_MBlock[7 ];
210
211
b8.SetID (0 );
211
- b8.SetNodes (5 ,21 ,22 ,8 , 14 ,29 ,30 ,17 );
212
- b8.SetSizes (ns,nd,nz);
213
- b8.SetZoning (fr,1 , fz, false , false , m_bz);
212
+ b8.SetNodes (5 , 21 , 22 , 8 , 14 , 29 , 30 , 17 );
213
+ b8.SetSizes (ns, nd, nz);
214
+ b8.SetZoning (fr, 1 , fz, false , false , m_bz);
214
215
215
216
MBBlock& b9 = m_MBlock[8 ];
216
217
b9.SetID (0 );
217
- b9.SetNodes (8 ,22 ,23 ,7 , 17 ,30 ,31 ,16 );
218
- b9.SetSizes (ns,nd,nz);
219
- b9.SetZoning (fr,1 , fz, false , false , m_bz);
218
+ b9.SetNodes (8 , 22 , 23 , 7 , 17 , 30 , 31 , 16 );
219
+ b9.SetSizes (ns, nd, nz);
220
+ b9.SetZoning (fr, 1 , fz, false , false , m_bz);
220
221
221
222
MBBlock& b10 = m_MBlock[9 ];
222
223
b10.SetID (0 );
223
- b10.SetNodes (7 ,23 ,24 ,6 , 16 ,31 ,32 ,15 );
224
- b10.SetSizes (ns,nd,nz);
225
- b10.SetZoning (fr,1 , fz, false , false , m_bz);
224
+ b10.SetNodes (7 , 23 , 24 , 6 , 16 , 31 , 32 , 15 );
225
+ b10.SetSizes (ns, nd, nz);
226
+ b10.SetZoning (fr, 1 , fz, false , false , m_bz);
226
227
227
228
MBBlock& b11 = m_MBlock[10 ];
228
229
b11.SetID (0 );
229
- b11.SetNodes (6 ,24 ,25 ,3 , 15 ,32 ,33 ,12 );
230
- b11.SetSizes (ns,nd,nz);
231
- b11.SetZoning (fr,1 , fz, false , false , m_bz);
230
+ b11.SetNodes (6 , 24 , 25 , 3 , 15 , 32 , 33 , 12 );
231
+ b11.SetSizes (ns, nd, nz);
232
+ b11.SetZoning (fr, 1 , fz, false , false , m_bz);
232
233
233
234
MBBlock& b12 = m_MBlock[11 ];
234
235
b12.SetID (0 );
235
- b12.SetNodes (3 ,25 ,18 ,0 , 12 ,33 ,26 ,9 );
236
- b12.SetSizes (ns,nd,nz);
237
- b12.SetZoning (fr,1 , fz, false , false , m_bz);
236
+ b12.SetNodes (3 , 25 , 18 , 0 , 12 , 33 , 26 , 9 );
237
+ b12.SetSizes (ns, nd, nz);
238
+ b12.SetZoning (fr, 1 , fz, false , false , m_bz);
238
239
239
240
// update the MB data
240
- UpdateMB ();
241
+ BuildMB ();
241
242
242
243
// assign face ID's
243
244
/*
@@ -259,23 +260,23 @@ FEMesh* FECylinder::BuildButterfly()
259
260
SetBlockFaceID (b2, -1 , -1 , -1 , -1 , 0 , 5 );
260
261
SetBlockFaceID (b3, -1 , -1 , -1 , -1 , 0 , 5 );
261
262
SetBlockFaceID (b4, -1 , -1 , -1 , -1 , 0 , 5 );
262
- SetBlockFaceID (b5, -1 , 3 , -1 , -1 , 0 , 5 );
263
- SetBlockFaceID (b6, -1 , 4 , -1 , -1 , 0 , 5 );
264
- SetBlockFaceID (b7, -1 , 4 , -1 , -1 , 0 , 5 );
265
- SetBlockFaceID (b8, -1 , 1 , -1 , -1 , 0 , 5 );
266
- SetBlockFaceID (b9, -1 , 1 , -1 , -1 , 0 , 5 );
267
- SetBlockFaceID (b10, -1 , 2 , -1 , -1 , 0 , 5 );
268
- SetBlockFaceID (b11, -1 , 2 , -1 , -1 , 0 , 5 );
269
- SetBlockFaceID (b12, -1 , 3 , -1 , -1 , 0 , 5 );
270
-
271
- MBFace& F1 = GetBlockFace ( 7 , 1 ); SetFaceEdgeID (F1, 0 , -1 , 4 , 8 );
272
- MBFace& F2 = GetBlockFace ( 8 , 1 ); SetFaceEdgeID (F2, 0 , 9 , 4 , -1 );
273
- MBFace& F3 = GetBlockFace ( 9 , 1 ); SetFaceEdgeID (F3, 1 , -1 , 5 , 9 );
263
+ SetBlockFaceID (b5, -1 , 3 , -1 , -1 , 0 , 5 );
264
+ SetBlockFaceID (b6, -1 , 4 , -1 , -1 , 0 , 5 );
265
+ SetBlockFaceID (b7, -1 , 4 , -1 , -1 , 0 , 5 );
266
+ SetBlockFaceID (b8, -1 , 1 , -1 , -1 , 0 , 5 );
267
+ SetBlockFaceID (b9, -1 , 1 , -1 , -1 , 0 , 5 );
268
+ SetBlockFaceID (b10, -1 , 2 , -1 , -1 , 0 , 5 );
269
+ SetBlockFaceID (b11, -1 , 2 , -1 , -1 , 0 , 5 );
270
+ SetBlockFaceID (b12, -1 , 3 , -1 , -1 , 0 , 5 );
271
+
272
+ MBFace& F1 = GetBlockFace (7 , 1 ); SetFaceEdgeID (F1, 0 , -1 , 4 , 8 );
273
+ MBFace& F2 = GetBlockFace (8 , 1 ); SetFaceEdgeID (F2, 0 , 9 , 4 , -1 );
274
+ MBFace& F3 = GetBlockFace (9 , 1 ); SetFaceEdgeID (F3, 1 , -1 , 5 , 9 );
274
275
MBFace& F4 = GetBlockFace (10 , 1 ); SetFaceEdgeID (F4, 1 , 10 , 5 , -1 );
275
276
MBFace& F5 = GetBlockFace (11 , 1 ); SetFaceEdgeID (F5, 2 , -1 , 6 , 10 );
276
- MBFace& F6 = GetBlockFace ( 4 , 1 ); SetFaceEdgeID (F6, 2 , 11 , 6 , -1 );
277
- MBFace& F7 = GetBlockFace ( 5 , 1 ); SetFaceEdgeID (F7, 3 , -1 , 7 , 11 );
278
- MBFace& F8 = GetBlockFace ( 6 , 1 ); SetFaceEdgeID (F8, 3 , 8 , 7 , -1 );
277
+ MBFace& F6 = GetBlockFace (4 , 1 ); SetFaceEdgeID (F6, 2 , 11 , 6 , -1 );
278
+ MBFace& F7 = GetBlockFace (5 , 1 ); SetFaceEdgeID (F7, 3 , -1 , 7 , 11 );
279
+ MBFace& F8 = GetBlockFace (6 , 1 ); SetFaceEdgeID (F8, 3 , 8 , 7 , -1 );
279
280
280
281
GetFaceEdge (F1, 0 ).edge .m_ntype = EDGE_ZARC;
281
282
GetFaceEdge (F1, 2 ).edge .m_ntype = EDGE_ZARC; GetFaceEdge (F1, 2 ).m_winding = -1 ;
@@ -303,11 +304,23 @@ FEMesh* FECylinder::BuildButterfly()
303
304
m_MBNode[33 ].SetID (6 );
304
305
m_MBNode[27 ].SetID (7 );
305
306
307
+ UpdateMB ();
308
+
309
+ return true ;
310
+ }
311
+
312
+ // -----------------------------------------------------------------------------
313
+ // Build a butterfly mesh
314
+ FEMesh* FECylinder::BuildButterfly ()
315
+ {
316
+ // create the multiblock data
317
+ BuildMultiBlock ();
318
+
306
319
// set element type
307
320
int nelem = GetIntValue (ELEM_TYPE);
308
321
switch (nelem)
309
322
{
310
- case 0 : SetElementType (FE_HEX8 ); break ;
323
+ case 0 : SetElementType (FE_HEX8); break ;
311
324
case 1 : SetElementType (FE_HEX20); break ;
312
325
case 2 : SetElementType (FE_HEX27); break ;
313
326
}
@@ -821,7 +834,7 @@ FEMesh* FECylinder2::BuildButterfly()
821
834
b12.SetZoning (fr,1 ,fz, false , false , m_bz);
822
835
823
836
// update the MB data
824
- UpdateMB ();
837
+ BuildMB ();
825
838
826
839
// assign face ID's
827
840
SetBlockFaceID (b1, -1 , -1 , -1 , -1 , 0 , 5 );
0 commit comments