83{
84 try {
85
86
87 float DX0[6] = { 0., 0., 0., 0., 0., 0.};
88 float DY0[6] = { 1.,-1., 0., 0., 0., 0.};
89 float DZ0[6] = { 0., 0.,-1., 1., 1.,-1.};
90 float DX1[6] = { 1., 1., 1., 1., 0., 0.};
91 float DY1[6] = { 0., 0., 0., 0., 1., 1.};
92 float DZ1[6] = { 0., 0., 0., 0., 0., 0.};
93 float X0[6] = {-3.,-3.,-3.,-3.,-3., 3.};
94 float Y0[6] = {-3., 3.,-3., 3.,-3.,-3.};
95 float Z0[6] = {-3., 3., 3.,-3.,-3., 3.};
96
97 float node[3],
r,xx,yy,zz,xx0,yy0,zz0,d,
alpha,s,c;
98 H3D_ID node_id;
99
100
101 H3D_ID elem_id ;
102 H3D_ID RigidElem ;
103 int i,j,nsn,nbelemwrite,n2,n3,n4,ityp;
104
105 char RWALLPOOL[] = "Rwall";
108
109 char RIGIDPOOL[] = "Rigid";
112
113 unsigned int elem_count = 1;
114
115 int id_node = *MAX_NOD_ID;
116
117 elem_id = 0;
118
119 for(i=0;i<*NRWALL;i++)
120 {
121
122 n2 = i + *NRWALL;
123 n3 = n2 + *NRWALL;
124 n4 = n3 + *NRWALL;
125
126 ityp = NPRW[n4];
127 RigidElem = NOM_OPT[*I16D + i * *LNOPT1 - 1];
128
129 if( ityp == 1)
130 {
131
132 int id_node_0 = id_node + 1 ;
133
136
137 node[0] = XWL[i] + V1[i];
138 node[1] = YWL[i] + V2[i];
139 node[2] = ZWL[i] + V3[i];
140 id_node ++ ;
141 node_id= id_node;
142
145
146 node[0] = XWL[i] + VV1[i];
147 node[1] = YWL[i] + VV2[i];
148 node[2] = ZWL[i] + VV3[i];
149 id_node ++ ;
150 node_id= id_node;
151
154
155 node[0] = XWL[i] - V1[i];
156 node[1] = YWL[i] - V2[i];
157 node[2] = ZWL[i] - V3[i];
158 id_node ++ ;
159 node_id= id_node;
160
163
164 node[0] = XWL[i] - VV1[i];
165 node[1] = YWL[i] - VV2[i];
166 node[2] = ZWL[i] - VV3[i];
167 id_node ++ ;
168 node_id= id_node;
169
172
175
176 unsigned int conn[4];
177 conn[0] = id_node - 3 ;
178 conn[1] = id_node - 2 ;
179 conn[2] = id_node - 1 ;
180 conn[3] = id_node ;
181
182 nbelemwrite = 1;
183
185 H3D_ELEM_CONFIG_QUAD4, RigidElem,
188
189 elem_id++;
192
195 }
196
197
198
199 else if(ityp == 2)
200 {
201 int cpt = 0;
202 int id_node_0 = id_node + 1 ;
206
207 for(int ii=0;ii<24;ii++)
208 {
209
212
213 node[0] = XWL[i] + VV1[i] * s + V1[i] * c - XN[i] * XL[i];
214 node[1] = YWL[i] + VV2[i] * s + V2[i] * c - YN[i] * XL[i];
215 node[2] = ZWL[i] + VV3[i] * s + V3[i] * c - ZN[i] * XL[i];
216
217 id_node ++ ;
218 node_id = id_node;
221
222 node[0] = XWL[i] + VV1[i] * s + V1[i] * c + XN[i] * XL[i];
223 node[1] = YWL[i] + VV2[i] * s + V2[i] * c + YN[i] * XL[i];
224 node[2] = ZWL[i] + VV3[i] * s + V3[i] * c + ZN[i] * XL[i];
225
226 id_node ++ ;
227 node_id = id_node;
230
232 }
233
234
237
238
239 unsigned int conn[4];
240 id_node = id_node_0;
241
242 for(int ii=0;ii<23;ii++)
243 {
244 conn[0] = id_node ;
245 conn[1] = id_node + 2 ;
246 conn[2] = id_node + 3 ;
247 conn[3] = id_node + 1 ;
248 nbelemwrite = 1;
249
251 H3D_ELEM_CONFIG_QUAD4, RigidElem,
254
255 elem_id++;
258
261
262 id_node = id_node + 2;
263 }
264 conn[0] = id_node ;
265 conn[1] = id_node_0 ;
266 conn[2] = id_node_0 + 1 ;
267 conn[3] = id_node + 1 ;
268 nbelemwrite = 1;
269
271 H3D_ELEM_CONFIG_QUAD4, RigidElem,
274
275 elem_id++;
278
281
282 id_node = id_node + 1;
283
284
285 }
286
287
288 else if(ityp == 3)
289 {
290 int cpt = 0;
291 int id_node_0 = id_node + 1 ;
295
296 for(int ii=0;ii<6;ii++)
297 {
298 xx0 = X0[ii] ;
299 yy0 = Y0[ii] ;
300 zz0 = Z0[ii] ;
301 for(int jj=0;jj<7;jj++)
302 {
303 xx = xx0;
304 yy = yy0;
305 zz = zz0;
306 for(int ll=0;ll<7;ll++)
307 {
308 d =
r/sqrt(xx*xx+yy*yy+zz*zz);
309
310 node[0] = d*xx + XWL[i];
311 node[1] = d*yy + YWL[i];
312 node[2] = d*zz + ZWL[i];
313 id_node ++ ;
314 node_id = id_node;
317
318
319 xx = xx + DX0[ii];
320 yy = yy + DY0[ii];
321 zz = zz + DZ0[ii];
322
323 }
324 xx0 = xx0 + DX1[ii];
325 yy0 = yy0 + DY1[ii];
326 zz0 = zz0 + DZ1[ii];
327 }
328 }
329
332
333
334 unsigned int conn[4];
335 id_node = id_node_0;
336
337 for(int ii=0;ii<6;ii++)
338 {
339 for(int jj=0;jj<6;jj++)
340 {
341 for(int ll=0;ll<6;ll++)
342 {
343 conn[0] = id_node ;
344 conn[1] = id_node + 1 ;
345 conn[2] = id_node + 8 ;
346 conn[3] = id_node + 7 ;
347 nbelemwrite = 1;
348
350 H3D_ELEM_CONFIG_QUAD4, RigidElem,
353
354 elem_id++;
357
360
361 id_node = id_node + 1;
362 }
363 id_node = id_node + 1;
364 }
365 id_node = id_node + 7;
366 }
367
368 id_node = id_node_0 + 293 ;
369
370 }
371 else if(ityp == 4 )
372 {
373
374 int id_node_0 = id_node + 1 ;
375
378
379 node[0] = XWL[i];
380 node[1] = YWL[i];
381 node[2] = ZWL[i];
382 id_node ++ ;
383 node_id= id_node;
384
387
388 node[0] = XWL[i] + V1[i];
389 node[1] = YWL[i] + V2[i];
390 node[2] = ZWL[i] + V3[i];
391 id_node ++ ;
392 node_id= id_node;
393
396
397 node[0] = XWL[i] + V1[i] + VV1[i];
398 node[1] = YWL[i] + V2[i] + VV2[i];
399 node[2] = ZWL[i] + V3[i] + VV3[i];
400 id_node ++ ;
401 node_id= id_node;
402
405
406 node[0] = XWL[i] + VV1[i];
407 node[1] = YWL[i] + VV2[i];
408 node[2] = ZWL[i] + VV3[i];
409 id_node ++ ;
410 node_id= id_node;
411
414
417
418 unsigned int conn[4];
419 conn[0] = id_node - 3 ;
420 conn[1] = id_node - 2 ;
421 conn[2] = id_node - 1 ;
422 conn[3] = id_node ;
423
424 nbelemwrite = 1;
425
427 H3D_ELEM_CONFIG_QUAD4, RigidElem,
430
431 elem_id++;
434
437 }
438
439
440
441
442 }
443
444 *NUM_ADDED_NODES = id_node - *MAX_NOD_ID;
445
446 }
447
448 catch(...) {
450 }
451
452}
bool Hyper3DAddString(H3DFileInfo *h3d_file, const char *const string, H3D_ID *const str_id)
bool Hyper3DPositionBegin(H3DFileInfo *h3d_file, unsigned int count, H3D_ID poolname_id)
bool Hyper3DExportClearError(H3DFileInfo *h3d_file)
bool Hyper3DPositionEnd(H3DFileInfo *h3d_file)
bool Hyper3DElementWrite(H3DFileInfo *h3d_file, H3D_ID id, H3D_ID *connectivity)
bool Hyper3DPositionWrite(H3DFileInfo *h3d_file, H3D_ID id, float *coords, H3D_ID refsys_id, H3D_ID analysis_id)
bool Hyper3DElementEnd(H3DFileInfo *h3d_file)
bool Hyper3DElementBegin(H3DFileInfo *h3d_file, unsigned int count, H3D_ID poolname_id, H3D_ElementConfig config, H3D_ID parent_id, H3D_ID parent_poolname_id, H3D_ID node_poolname_id)