70void c_h3d_create_solid8n_(
int *ITAB,
int *NUMNOD,
int *IXS,
int *NIXS,
int *NUMELS,
int *IPARTS,
int *IPART,
int *LIPART1,
int *H3D_PART,
71 int *NUMELS10,
int *IXS10,
int *IPARTS10,
int *NUMELS16,
int *IXS16,
int *IPARTS16,
int *NUMELS20,
int *IXS20,
74 unsigned int * nbelems =
new unsigned int [*NUMELS];
79 unsigned int conn4[4] ;
80 unsigned int conn5[5] ;
81 unsigned int conn6[6] ;
82 unsigned int conn8[8] ;
83 unsigned int conn10[10] ;
84 unsigned int conn16[16] ;
85 unsigned int conn20[20] ;
89 int i,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10;
90 int cpt_elem,nbelemwrite;
92 int elem_nodes_m1 = 0;
95 int NUMELS8 = *NUMELS - *NUMELS10 - *NUMELS20 - *NUMELS16 ;
100 char SOLID4NPOOL[] =
"TETRA4";
104 char SOLID10NPOOL[] =
"TETRA10";
108 char SOLID5NPOOL[] =
"PENTA5";
112 char SOLID6NPOOL[] =
"PENTA6";
116 char SOLID8NPOOL[] =
"BRICK";
120 char SOLID16NPOOL[] =
"BRICK16";
124 char SOLID20NPOOL[] =
"BRICK20";
128 char SOLIDPOOL[] =
"Solid";
132 unsigned int elem_count = 1;
141 for(i=0;i<NUMELS8;i++) nbelems[i] = 0;
143 for(i=0;i<NUMELS8;i++)
145 if(H3D_PART[IPARTS[i] - 1] == 1)
147 n1 = IXS[*NIXS * i + 1];
148 n2 = IXS[*NIXS * i + 2];
149 n3 = IXS[*NIXS * i + 3];
150 n4 = IXS[*NIXS * i + 4];
151 n5 = IXS[*NIXS * i + 5];
152 n6 = IXS[*NIXS * i + 6];
153 n7 = IXS[*NIXS * i + 7];
154 n8 = IXS[*NIXS * i + 8];
167 for(
int l=k+1;l<8;l++)
169 if(node[k] == node[l]) node[l] = 0;
176 if(node[k] != 0) elem_nodes = elem_nodes + 1;
179 if(elem_nodes_m1 != 4 && elem_nodes == 4)
181 if(IPART[*LIPART1 * (IPARTS[i] - 1) + 3] !=
comp_id)
183 comp_id = IPART[*LIPART1 * (IPARTS[i] - 1) + 3];
188 else if(elem_nodes_m1 != 6 && elem_nodes == 6)
190 if(IPART[*LIPART1 * (IPARTS[i] - 1) + 3] !=
comp_id)
192 comp_id = IPART[*LIPART1 * (IPARTS[i] - 1) + 3];
197 else if(elem_nodes_m1 != 5 && elem_nodes == 5 )
199 if(IPART[*LIPART1 * (IPARTS[i] - 1) + 3] !=
comp_id)
201 comp_id = IPART[*LIPART1 * (IPARTS[i] - 1) + 3];
206 else if(elem_nodes_m1 != 8 && elem_nodes == 8 )
208 if(IPART[*LIPART1 * (IPARTS[i] - 1) + 3] !=
comp_id)
210 comp_id = IPART[*LIPART1 * (IPARTS[i] - 1) + 3];
217 comp_id = IPART[*LIPART1 * (IPARTS[i] - 1) + 3];
218 elem_nodes_m1 = elem_nodes;
223 if(IPART[*LIPART1 * (IPARTS[i] - 1) + 3] !=
comp_id)
225 comp_id = IPART[*LIPART1 * (IPARTS[i] - 1) + 3];
231 nbelems[j] = nbelems[j] + 1;
242 for(i=0;i<NUMELS8;i++)
244 if(H3D_PART[IPARTS[i] - 1] == 1)
246 elem_id = IXS[*NIXS * i + *NIXS - 1];
247 comp_id = IPART[*LIPART1 * (IPARTS[i] - 1) + 3];
249 n1 = IXS[*NIXS * i + 1];
250 n2 = IXS[*NIXS * i + 2];
251 n3 = IXS[*NIXS * i + 3];
252 n4 = IXS[*NIXS * i + 4];
253 n5 = IXS[*NIXS * i + 5];
254 n6 = IXS[*NIXS * i + 6];
255 n7 = IXS[*NIXS * i + 7];
256 n8 = IXS[*NIXS * i + 8];
269 for(
int l=k+1;l<8;l++)
271 if(node[k] == node[l]) node[l] = 0;
275 for(k=0;k<8;k++) node_ok[k] = 0;
281 node_ok[elem_nodes] = node[k];
282 elem_nodes = elem_nodes + 1;
288 conn4[0] = node_ok[0];
289 conn4[1] = node_ok[1];
290 conn4[2] = node_ok[2];
291 conn4[3] = node_ok[3];
295 nbelemwrite = nbelems[i];
296 comp_id = IPART[*LIPART1 * (IPARTS[i] - 1) + 3];
299 H3D_ELEM_CONFIG_TETRA4,
comp_id,
309 if (cpt_elem == nbelemwrite)
315 else if(elem_nodes == 5)
317 conn5[0] = node_ok[0];
318 conn5[1] = node_ok[1];
319 conn5[2] = node_ok[2];
320 conn5[3] = node_ok[3];
321 conn5[4] = node_ok[4];
325 nbelemwrite = nbelems[i];
326 comp_id = IPART[*LIPART1 * (IPARTS[i] - 1) + 3];
329 H3D_ELEM_CONFIG_PENTA5,
comp_id,
341 if (cpt_elem == nbelemwrite)
348 else if(elem_nodes == 6)
350 if(n1 == n2 && n3 == n4 && n1 != n3)
359 else if(n5 == n6 && n7 == n8 && n5 != n7)
368 else if(n4 == n3 && n7 == n8 && n3 != n8)
377 else if(n1 == n2 && n5 == n6 && n1 != n5)
386 else if(n7 == n6 && n8 == n5 && n7 != n8)
395 else if(n4 == n1 && n8 == n5 && n4 != n8)
404 else if(n1 == n4 && n2 == n3 && n1 != n2)
413 else if(n2 == n3 && n6 == n7 && n2 != n6)
424 conn6[0] = node_ok[0];
425 conn6[1] = node_ok[1];
426 conn6[2] = node_ok[2];
427 conn6[3] = node_ok[3];
428 conn6[4] = node_ok[4];
429 conn6[5] = node_ok[5];
434 nbelemwrite = nbelems[i];
435 comp_id = IPART[*LIPART1 * (IPARTS[i] - 1) + 3];
438 H3D_ELEM_CONFIG_PENTA6,
comp_id,
450 if (cpt_elem == nbelemwrite)
470 nbelemwrite = nbelems[i];
471 comp_id = IPART[*LIPART1 * (IPARTS[i] - 1) + 3];
485 if (cpt_elem == nbelemwrite)
497 for(i=0;i<*NUMELS10;i++) nbelems[i] = 0;
501 for(i=0;i<*NUMELS10;i++)
503 if(H3D_PART[IPARTS10[i] - 1] == 1)
507 if(IPART[*LIPART1 * (IPARTS10[i] - 1) + 3] !=
comp_id)
509 comp_id = IPART[*LIPART1 * (IPARTS10[i] - 1) + 3];
512 nbelems[j] = nbelems[j] + 1;
520 for(i=0;i<*NUMELS10;i++)
522 if(H3D_PART[IPARTS10[i] - 1] == 1)
524 elem_id = IXS10[NIXS10 * i + NIXS10 - 1];
525 comp_id = IPART[*LIPART1 * (IPARTS10[i] - 1) + 3];
527 conn10[0] = IXS10[NIXS10 * i ];
528 conn10[1] = IXS10[NIXS10 * i + 1];
529 conn10[2] = IXS10[NIXS10 * i + 2];
530 conn10[3] = IXS10[NIXS10 * i + 3];
531 conn10[4] = IXS10[NIXS10 * i + 4];
532 conn10[5] = IXS10[NIXS10 * i + 5];
533 conn10[6] = IXS10[NIXS10 * i + 6];
534 conn10[7] = IXS10[NIXS10 * i + 7];
535 conn10[8] = IXS10[NIXS10 * i + 8];
536 conn10[9] = IXS10[NIXS10 * i + 9];
543 nbelemwrite = nbelems[i];
544 comp_id = IPART[*LIPART1 * (IPARTS10[i] - 1) + 3];
547 H3D_ELEM_CONFIG_TETRA10,
comp_id,
558 if (cpt_elem == nbelemwrite)
570 for(i=0;i<*NUMELS16;i++) nbelems[i] = 0;
574 for(i=0;i<*NUMELS16;i++)
576 if(H3D_PART[IPARTS16[i] - 1] == 1)
580 if(IPART[*LIPART1 * (IPARTS16[i] - 1) + 3] !=
comp_id)
582 comp_id = IPART[*LIPART1 * (IPARTS16[i] - 1) + 3];
585 nbelems[j] = nbelems[j] + 1;
593 for(i=0;i<*NUMELS16;i++)
595 if(H3D_PART[IPARTS16[i] - 1] == 1)
597 elem_id = IXS16[NIXS16 * i + NIXS16 - 1];
598 comp_id = IPART[*LIPART1 * (IPARTS16[i] - 1) + 3];
600 conn8[0] = IXS16[NIXS16 * i ];
601 conn8[1] = IXS16[NIXS16 * i + 1];
602 conn8[2] = IXS16[NIXS16 * i + 2];
603 conn8[3] = IXS16[NIXS16 * i + 3];
604 conn8[4] = IXS16[NIXS16 * i + 4];
605 conn8[5] = IXS16[NIXS16 * i + 5];
606 conn8[6] = IXS16[NIXS16 * i + 6];
607 conn8[7] = IXS16[NIXS16 * i + 7];
617 nbelemwrite = nbelems[i];
618 comp_id = IPART[*LIPART1 * (IPARTS16[i] - 1) + 3];
633 if (cpt_elem == nbelemwrite)
645 for(i=0;i<*NUMELS20;i++) nbelems[i] = 0;
649 for(i=0;i<*NUMELS20;i++)
651 if(H3D_PART[IPARTS20[i] - 1] == 1)
655 if(IPART[*LIPART1 * (IPARTS20[i] - 1) + 3] !=
comp_id)
657 comp_id = IPART[*LIPART1 * (IPARTS20[i] - 1) + 3];
660 nbelems[j] = nbelems[j] + 1;
668 for(i=0;i<*NUMELS20;i++)
670 if(H3D_PART[IPARTS20[i] - 1] == 1)
672 elem_id = IXS20[NIXS20 * i + NIXS20 - 1];
673 comp_id = IPART[*LIPART1 * (IPARTS20[i] - 1) + 3];
675 conn20[0] = IXS20[NIXS20 * i ];
676 conn20[1] = IXS20[NIXS20 * i + 1];
677 conn20[2] = IXS20[NIXS20 * i + 2];
678 conn20[3] = IXS20[NIXS20 * i + 3];
679 conn20[4] = IXS20[NIXS20 * i + 4];
680 conn20[5] = IXS20[NIXS20 * i + 5];
681 conn20[6] = IXS20[NIXS20 * i + 6];
682 conn20[7] = IXS20[NIXS20 * i + 7];
683 conn20[8] = IXS20[NIXS20 * i + 8];
684 conn20[9] = IXS20[NIXS20 * i + 9];
685 conn20[10] = IXS20[NIXS20 * i + 10];
686 conn20[11] = IXS20[NIXS20 * i + 11];
687 conn20[12] = IXS20[NIXS20 * i + 12];
688 conn20[13] = IXS20[NIXS20 * i + 13];
689 conn20[14] = IXS20[NIXS20 * i + 14];
690 conn20[15] = IXS20[NIXS20 * i + 15];
691 conn20[16] = IXS20[NIXS20 * i + 16];
692 conn20[17] = IXS20[NIXS20 * i + 17];
693 conn20[18] = IXS20[NIXS20 * i + 18];
694 conn20[19] = IXS20[NIXS20 * i + 19];
700 nbelemwrite = nbelems[i];
701 comp_id = IPART[*LIPART1 * (IPARTS20[i] - 1) + 3];
704 H3D_ELEM_CONFIG_HEX20,
comp_id,
716 if (cpt_elem == nbelemwrite)