56 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
60 tau[0] = 2 ; tau[1] = 0 ; tau[2] = 1 ; tau[3] = 3;
64 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
68 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
72 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
76 tau[0] = 3 ; tau[1] = 2 ; tau[2] = 1 ; tau[3] = 0;
112 pt0->
v[tau[1]] = vx[taued[0]];
117 pt0->
v[tau[0]] = vx[taued[0]];
143 const uint8_t *taued;
150 fprintf(stderr,
"\n ## Error: %s: unable to allocate"
151 " a new element.\n",__func__);
153 fprintf(stderr,
" Exit program.\n");
174 pt->
v[tau[1]] = pt1->
v[tau[0]] = vx[taued[0]];
178 xt.
tag [taued[3]] = 0; xt.
tag [taued[4]] = 0;
179 xt1.
tag[taued[1]] = 0; xt1.
tag[taued[2]] = 0;
180 xt.
edg [taued[3]] = 0; xt.
edg [taued[4]] = 0;
181 xt1.
edg[taued[1]] = 0; xt1.
edg[taued[2]] = 0;
189 for (i=0; i<4; i++) {
190 if ( xt.
ref[i] || xt.
ftag[i] ) isxt = 1;
191 if ( xt1.
ref[i] || xt1.
ftag[i] ) isxt1 = 1;
192 if ( isxt && isxt1 )
goto nextstep1;
197 if ( isxt && !isxt1 ) {
201 else if ( !isxt && isxt1 ) {
207 else if ( isxt && isxt1 ) {
212 "larger xtetra table",
214 fprintf(stderr,
" Exit program.\n");
232 if ( (!metRidTyp) && met->
m && met->
size>1 ) {
236 else if ( (!met) || (!met->
m) ) {
268 MMG5_int idx , MMG5_int ip ,
double n0[3])
276 assert(iface >=0 && iface < 4 &&
"local face idx");
302 if (
ier<0 )
return -1;
303 else if ( !
ier )
return 0;
328 double calold,calnew,caltmp;
330 int j,k,ilist,idx,iface,
ier;
331 MMG5_int iel,sum1,sum2,mins1,mins2,maxs1,maxs2;
332 MMG5_int is0,is1,is2;
333 int8_t ie,ia,ib,complete,wrongOri;
338 memcpy(ppt0->
c ,&
mesh->
point[ip].
c , 3*
sizeof(
double));
341 memcpy(&met->
m[0],&met->
m[met->
size*ip], met->
size*
sizeof(
double));
343 calold = calnew = DBL_MAX;
344 for (k=0; k<ilist; k++) {
356 calnew =
MG_MIN(calnew,caltmp);
362 calnew =
MG_MIN(calnew,caltmp);
372 wrongOri = complete = idx = 0;
373 maxs1 = mins1 = sum1 = 0;
374 for (k=0; k<ilist; k++) {
379 if(!pt->
xt)
continue;
383 for ( j=0; j<2; ++j ) {
393 if (
ier < 0 )
return -1;
394 else if (
ier == 0 )
return 2;
397 if (
ier < 0 )
return -1;
398 else if (
ier == 0 )
return 2;
406 sum1 = is0 + is1 + is2;
419 sum2 = is0 + is1 + is2;
423 if ( (sum2 == sum1 && mins2 == mins1 && maxs2 == maxs1) ) {
430 else if ( wrongOri ) {
481 if ( it1/4 != start || it1%4 != iface ) {
483 if ( it2/4!=start || it2%4!=iface )
return 0;
490 assert ( it/4>0 && 0<=it%4 && it%4<4 &&
"unexpected idx for tetra or local face idx" );
519 int8_t ie,isxt,isxt1,i;
520 const uint8_t *taued;
525 jel = MMG5_abs(newtet[k]);
544 pt->
v[tau[1]] = pt1->
v[tau[0]] = ip;
547 xt.
tag [taued[3]] = 0; xt.
tag [taued[4]] = 0;
548 xt1.
tag[taued[1]] = 0; xt1.
tag[taued[2]] = 0;
549 xt.
edg [taued[3]] = 0; xt.
edg [taued[4]] = 0;
550 xt1.
edg[taued[1]] = 0; xt1.
edg[taued[2]] = 0;
560 for (i=0; i<4; i++) {
561 if ( xt.
ref[i] || xt.
ftag[i] ) isxt = 1;
562 if ( xt1.
ref[i] || xt1.
ftag[i] ) isxt1 = 1;
566 if ( (isxt)&&(!isxt1) ) {
571 else if ((!isxt)&&(isxt1) ) {
577 else if (isxt && isxt1 ) {
582 "larger xtetra table",
618 int cas,int8_t metRidTyp,int8_t chkRidTet){
620 double lmin,lmax,len;
622 MMG5_int iel,jel,newtet[
MMG3D_LMAX+2],nump,*adja;
623 MMG5_int *adjan,nei2,nei3,mel;
626 const uint8_t *taued;
632 if ( cas && met->
m ) {
635 for (j=0; j<ilist; j++) {
636 for (i=0; i<6; i++) {
638 if ( (!metRidTyp) && met->
m && met->
size>1 )
641 len = MMG5_lenedg(
mesh,met,i,pt);
645 else if ( len > lmax) {
657 for (j=0; j<ilist; j++) {
674 if ( (!metRidTyp) && met->
m && met->
size>1 )
677 len = MMG5_lenedgspl(
mesh,met,taued[5],pt0);
678 if ( len < lmin )
break;
688 if ( (!metRidTyp) && met->
m && met->
size>1 )
691 len = MMG5_lenedgspl(
mesh,met,taued[5],pt0);
692 if ( len < lmin )
break;
694 if ( j < ilist )
return 0;
705 for (k=0; k<ilist; k++) {
717 fprintf(stderr,
"\n ## Error: %s: unable to allocate"
718 " a new element.\n",__func__);
721 for ( ; k>=0 ; --k ) {
730 if ( pt->
v[tau[0]] == nump )
747 jel = MMG5_abs(newtet[0]);
758 mel = adja[tau[0]] / 4;
759 voy = adja[tau[0]] % 4;
760 adja[tau[0]] = 4*jel + tau[1];
761 adjan[tau[0]] = 4*mel + voy;
762 adjan[tau[1]] = 4*iel + tau[0];
766 adjan[voy] = 4*jel + tau[0];
769 if ( (!metRidTyp) && met->
m && met->
size>1 ) {
784 for (k=0; k<ilist; k++) {
792 jel = MMG5_abs(newtet[k]);
803 if ( (list[1] / 6) == (nei2 / 4) ) {
804 if (
MG_SMSGN(newtet[0],newtet[1]) ) {
806 adjan[tau[2]] = 4*MMG5_abs(newtet[1])+(nei2 %4);
809 adja[tau[2]] = 4*MMG5_abs(newtet[1])+(nei2 %4);
810 adjan[tau[2]] = nei2;
819 assert((list[ilist-1] / 6) == (nei3 / 4));
820 if (
MG_SMSGN(newtet[0],newtet[ilist-1]) ) {
822 adjan[tau[3]] = 4*MMG5_abs(newtet[ilist-1])+(nei3 %4);
825 adja[tau[3]] = 4*MMG5_abs(newtet[ilist-1])+(nei3 %4);
826 adjan[tau[3]] = nei3;
832 assert((list[1] / 6) == (nei3 / 4));
833 if (
MG_SMSGN(newtet[0],newtet[1]) ) {
835 adjan[tau[3]] = 4*MMG5_abs(newtet[1])+(nei3 %4);
838 adja[tau[3]] = 4*MMG5_abs(newtet[1])+(nei3 %4);
839 adjan[tau[3]] = nei3;
848 assert((list[ilist-1]) / 6 == (nei2 / 4));
849 if (
MG_SMSGN(newtet[0],newtet[ilist-1]) ) {
851 adjan[tau[2]] = 4*MMG5_abs(newtet[ilist-1])+(nei2 %4);
854 adja[tau[2]] = 4*MMG5_abs(newtet[ilist-1])+(nei2 %4);
855 adjan[tau[2]] = nei2;
861 else if ( k==ilist-1 ) {
862 if ( (list[ilist-2] / 6) == (nei2 / 4) ) {
863 if (
MG_SMSGN(newtet[ilist-1],newtet[ilist-2]) ) {
865 adjan[tau[2]] = 4*MMG5_abs(newtet[ilist-2])+(nei2 %4);
868 adja[tau[2]] = 4*MMG5_abs(newtet[ilist-2])+(nei2 %4);
869 adjan[tau[2]] = nei2;
878 assert((list[0]) / 6 == (nei3 / 4));
879 if (
MG_SMSGN(newtet[ilist-1],newtet[0]) ) {
881 adjan[tau[3]] = 4*MMG5_abs(newtet[0])+(nei3 %4);
884 adja[tau[3]] = 4*MMG5_abs(newtet[0])+(nei3 %4);
885 adjan[tau[3]] = nei3;
891 assert((list[ilist-2] / 6) == (nei3 / 4));
892 if (
MG_SMSGN(newtet[ilist-1],newtet[ilist-2]) ) {
894 adjan[tau[3]] = 4*MMG5_abs(newtet[ilist-2])+(nei3 %4);
897 adja[tau[3]] = 4*MMG5_abs(newtet[ilist-2])+(nei3 %4);
898 adjan[tau[3]] = nei3;
907 assert((list[0]) / 6 == (nei2 / 4));
908 if (
MG_SMSGN(newtet[ilist-1],newtet[0]) ) {
910 adjan[tau[2]] = 4*MMG5_abs(newtet[0])+(nei2 %4);
913 adja[tau[2]] = 4*MMG5_abs(newtet[0])+(nei2 %4);
914 adjan[tau[2]] = nei2;
921 if ( (list[k-1] / 6) == (nei2 / 4) ) {
922 if (
MG_SMSGN(newtet[k],newtet[k-1]) ) {
924 adjan[tau[2]] = 4*MMG5_abs(newtet[k-1])+(nei2 %4);
927 adja[tau[2]] = 4*MMG5_abs(newtet[k-1])+(nei2 %4);
928 adjan[tau[2]] = nei2;
931 assert((list[k+1]) / 6 == (nei3 / 4));
932 if (
MG_SMSGN(newtet[k],newtet[k+1]) ) {
934 adjan[tau[3]] = 4*MMG5_abs(newtet[k+1])+(nei3 %4);
937 adja[tau[3]] = 4*MMG5_abs(newtet[k+1])+(nei3 %4);
938 adjan[tau[3]] = nei3;
943 assert((list[k-1] / 6) == (nei3 / 4));
944 if (
MG_SMSGN(newtet[k],newtet[k-1]) ) {
946 adjan[tau[3]] = 4*MMG5_abs(newtet[k-1])+(nei3 %4);
949 adja[tau[3]] = 4*MMG5_abs(newtet[k-1])+(nei3 %4);
950 adjan[tau[3]] = nei3;
953 assert((list[k+1]) / 6 == (nei2 / 4));
954 if (
MG_SMSGN(newtet[k],newtet[k+1]) ) {
956 adjan[tau[2]] = 4*MMG5_abs(newtet[k+1])+(nei2 %4);
959 adja[tau[2]] = 4*MMG5_abs(newtet[k+1])+(nei2 %4);
960 adjan[tau[2]] = nei2;
966 mel = adja[tau[0]] / 4;
967 voy = adja[tau[0]] % 4;
968 adja[tau[0]] = 4*jel + tau[1];
969 adjan[tau[0]] = 4*mel + voy;
970 adjan[tau[1]] = 4*iel + tau[0];
974 adjan[voy] = 4*jel + tau[0];
977 if ( (!metRidTyp) && met->
m && met->
size>1 ) {
1008 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
1012 tau[0] = 0 ; tau[1] = 2 ; tau[2] = 3 ; tau[3] = 1;
1016 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
1020 tau[0] = 1 ; tau[1] = 3 ; tau[2] = 2 ; tau[3] = 0;
1024 tau[0] = 1 ; tau[1] = 0 ; tau[2] = 3 ; tau[3] = 2;
1028 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
1032 tau[0] = 2 ; tau[1] = 0 ; tau[2] = 1 ; tau[3] = 3;
1036 tau[0] = 2 ; tau[1] = 1 ; tau[2] = 3 ; tau[3] = 0;
1040 tau[0] = 2 ; tau[1] = 3 ; tau[2] = 0 ; tau[3] = 1;
1044 tau[0] = 3 ; tau[1] = 0 ; tau[2] = 2 ; tau[3] = 1;
1048 tau[0] = 3 ; tau[1] = 2 ; tau[2] = 1 ; tau[3] = 0;
1052 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
1057 imin = (pt->
v[tau[1]] < pt->
v[tau[2]]) ? tau[1] : tau[2] ;
1077 uint8_t tau[4],imin;
1078 const uint8_t *taued;
1091 pt0->
v[tau[1]] = vx[taued[4]];
1092 pt0->
v[tau[2]] = vx[taued[5]];
1096 if ( imin == tau[1] ) {
1098 pt0->
v[tau[2]] = vx[taued[5]];
1099 pt0->
v[tau[3]] = vx[taued[4]];
1104 pt0->
v[tau[3]] = vx[taued[5]];
1110 pt0->
v[tau[3]] = vx[taued[4]];
1115 pt0->
v[tau[1]] = vx[taued[4]];
1116 pt0->
v[tau[3]] = vx[taued[5]];
1143 for ( i=1; i<ne; ++i ) {
1147 fprintf(stderr,
"\n ## Error: %s: unable to allocate"
1148 " a new element.\n",__func__);
1150 fprintf(stderr,
" Exit program.\n");
1153 for ( j=0; j<i; ++j ) {
1165 for ( i=0; i<ne; ++i ) {
1191 MMG5_int *newtet,
MMG5_pTetra *pt,int8_t metRidTyp) {
1194 if ( (!metRidTyp) && met->
m && met->
size>1 ) {
1195 for (i=0; i<ne; i++) {
1199 else if ( (!met) || (!met->
m) ) {
1201 for (i=0; i<ne; i++) {
1207 for (i=0; i<ne; i++) {
1233 int8_t imin,firstxt,isxt[3];
1235 const uint8_t *taued;
1251 pt[0]->
v[tau[1]] = vx[taued[4]] ; pt[0]->
v[tau[2]] = vx[taued[5]];
1252 xt[0].
tag[taued[0]] = 0; xt[0].
tag[taued[1]] = 0;
1253 xt[0].
tag[taued[3]] = 0; xt[0].
edg[taued[0]] = 0;
1254 xt[0].
edg[taued[1]] = 0; xt[0].
edg[taued[3]] = 0;
1255 xt[0].
ref[ tau[3]] = 0; xt[0].
ftag[ tau[3]] = 0;
MG_SET(xt[0].ori, tau[3]);
1257 if ( imin == tau[1] ) {
1258 pt[1]->
v[tau[2]] = vx[taued[5]]; pt[1]->
v[tau[3]] = vx[taued[4]];
1259 pt[2]->
v[tau[3]] = vx[taued[5]];
1261 xt[1].
tag[taued[1]] = 0; xt[1].
tag[taued[2]] = 0;
1262 xt[1].
tag[taued[3]] = 0; xt[1].
tag[taued[5]] = 0;
1263 xt[1].
edg[taued[1]] = 0; xt[1].
edg[taued[2]] = 0;
1264 xt[1].
edg[taued[3]] = 0; xt[1].
edg[taued[5]] = 0;
1265 xt[1].
ref [ tau[1]] = 0; xt[1].
ref [ tau[3]] = 0;
1266 xt[1].
ftag[ tau[1]] = 0; xt[1].
ftag[ tau[3]] = 0;
1269 xt[2].
tag[taued[2]] = 0; xt[2].
tag[taued[4]] = 0;
1270 xt[2].
edg[taued[2]] = 0; xt[2].
edg[taued[4]] = 0;
1271 xt[2].
ref[ tau[2]] = 0; xt[2].
ftag[ tau[2]] = 0;
MG_SET(xt[2].ori, tau[2]);
1274 pt[1]->
v[tau[3]] = vx[taued[4]];
1275 pt[2]->
v[tau[1]] = vx[taued[4]]; pt[2]->
v[tau[3]] = vx[taued[5]];
1277 xt[1].
tag[taued[2]] = 0; xt[1].
tag[taued[5]] = 0;
1278 xt[1].
edg[taued[2]] = 0; xt[1].
edg[taued[5]] = 0;
1279 xt[1].
ref[ tau[1]] = 0; xt[1].
ftag[ tau[1]] = 0;
MG_SET(xt[1].ori, tau[1]);
1281 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[2]] = 0;
1282 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[4]] = 0;
1283 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[2]] = 0;
1284 xt[2].
edg[taued[3]] = 0; xt[2].
edg[taued[4]] = 0;
1285 xt[2].
ref [ tau[2]] = 0; xt[2].
ref [ tau[3]] = 0;
1286 xt[2].
ftag[ tau[2]] = 0; xt[2].
ftag[ tau[3]] = 0;
1291 isxt[0] = isxt[1] = isxt[2] = 0;
1292 for (i=0; i<4; i++) {
1293 if ( xt[0].ref[i] || xt[0].ftag[i] ) isxt[0] = 1;
1294 if ( xt[1].ref[i] || xt[1].ftag[i] ) isxt[1] = 1;
1295 if ( xt[2].ref[i] || xt[2].ftag[i] ) isxt[2] = 1;
1301 pt[1]->
xt = pt[2]->
xt = 0;
1302 for (i=1; i<3; i++) {
1308 "larger xtetra table",
1310 fprintf(stderr,
" Exit program.\n");
1321 pt[1]->
xt = pt[2]->
xt = 0;
1322 for (i=1; i<3; i++) {
1326 pt[i]->
xt = pt[0]->
xt;
1335 "larger xtetra table",
1337 fprintf(stderr,
" Exit program.\n");
1371 const uint8_t *taued;
1380 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
1384 tau[0] = 3; tau[1] = 1; tau[2] = 0; tau[3] = 2;
1388 tau[0] = 0; tau[1] = 3; tau[2] = 1; tau[3] = 2;
1395 pt0->
v[tau[1]] = vx[taued[0]]; pt0->
v[tau[2]] = vx[taued[5]];
1400 pt0->
v[tau[1]] = vx[taued[0]]; pt0->
v[tau[3]] = vx[taued[5]];
1405 pt0->
v[tau[0]] = vx[taued[0]]; pt0->
v[tau[2]] = vx[taued[5]];
1410 pt0->
v[tau[0]] = vx[taued[0]]; pt0->
v[tau[3]] = vx[taued[5]];
1435 int8_t flg,firstxt,isxt[4];
1437 const uint8_t *taued;
1451 tau[0] = 0; tau[1] = 1; tau[2] = 2; tau[3] = 3;
1455 tau[0] = 3; tau[1] = 1; tau[2] = 0; tau[3] = 2;
1459 tau[0] = 0; tau[1] = 3; tau[2] = 1; tau[3] = 2;
1465 pt[0]->
v[tau[1]] = vx[taued[0]]; pt[0]->
v[tau[2]] = vx[taued[5]];
1466 pt[1]->
v[tau[1]] = vx[taued[0]]; pt[1]->
v[tau[3]] = vx[taued[5]];
1467 pt[2]->
v[tau[0]] = vx[taued[0]]; pt[2]->
v[tau[2]] = vx[taued[5]];
1468 pt[3]->
v[tau[0]] = vx[taued[0]]; pt[3]->
v[tau[3]] = vx[taued[5]];
1470 xt[0].
tag[taued[1]] = 0; xt[0].
tag[taued[3]] = 0;
1471 xt[0].
tag[taued[4]] = 0; xt[0].
edg[taued[1]] = 0;
1472 xt[0].
edg[taued[3]] = 0; xt[0].
edg[taued[4]] = 0;
1473 xt[0].
ref [ tau[0]] = 0; xt[0].
ref [ tau[3]] = 0;
1474 xt[0].
ftag[ tau[0]] = 0; xt[0].
ftag[ tau[3]] = 0;
1477 xt[1].
tag[taued[2]] = 0; xt[1].
tag[taued[3]] = 0;
1478 xt[1].
tag[taued[4]] = 0; xt[1].
edg[taued[2]] = 0;
1479 xt[1].
edg[taued[3]] = 0; xt[1].
edg[taued[4]] = 0;
1480 xt[1].
ref [ tau[0]] = 0; xt[1].
ref [ tau[2]] = 0;
1481 xt[1].
ftag[ tau[0]] = 0; xt[1].
ftag[ tau[2]] = 0;
1484 xt[2].
tag[taued[1]] = 0; xt[2].
tag[taued[2]] = 0;
1485 xt[2].
tag[taued[3]] = 0; xt[2].
edg[taued[1]] = 0;
1486 xt[2].
edg[taued[2]] = 0; xt[2].
edg[taued[3]] = 0;
1487 xt[2].
ref [ tau[1]] = 0; xt[2].
ref [ tau[3]] = 0;
1488 xt[2].
ftag[ tau[1]] = 0; xt[2].
ftag[ tau[3]] = 0;
1491 xt[3].
tag[taued[1]] = 0; xt[3].
tag[taued[2]] = 0;
1492 xt[3].
tag[taued[4]] = 0; xt[3].
edg[taued[1]] = 0;
1493 xt[3].
edg[taued[2]] = 0; xt[3].
edg[taued[4]] = 0;
1494 xt[3].
ref [ tau[1]] = 0; xt[3].
ref [ tau[2]] = 0;
1495 xt[3].
ftag[ tau[1]] = 0; xt[3].
ftag[ tau[2]] = 0;
1499 memset(isxt,0,4*
sizeof(int8_t));
1500 for (i=0; i<4; i++) {
1502 for (j=0; j<ne; j++) {
1503 if ( xt[j].ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
1510 for (i=1; i<4; i++) {
1516 "larger xtetra table",
1518 fprintf(stderr,
" Exit program.\n");
1532 for (i=1; i<4; i++) {
1536 pt[i]->
xt = pt[0]->
xt;
1545 "larger xtetra table",
1547 fprintf(stderr,
" Exit program.\n");
1574 const uint8_t *taued;
1583 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
1587 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
1591 tau[0] = 3 ; tau[1] = 0 ; tau[2] = 2 ; tau[3] = 1;
1595 tau[0] = 1 ; tau[1] = 3 ; tau[2] = 2 ; tau[3] = 0;
1602 pt0->
v[tau[1]] = vx[taued[0]];
1603 pt0->
v[tau[2]] = vx[taued[1]];
1608 pt0->
v[tau[0]] = vx[taued[0]];
1609 pt0->
v[tau[2]] = vx[taued[3]];
1614 pt0->
v[tau[0]] = vx[taued[1]];
1615 pt0->
v[tau[1]] = vx[taued[3]];
1620 pt0->
v[tau[0]] = vx[taued[0]];
1621 pt0->
v[tau[1]] = vx[taued[3]];
1622 pt0->
v[tau[2]] = vx[taued[1]];
1647 int8_t flg,firstxt,isxt[4];
1649 const uint8_t *taued;
1663 tau[0] = 0; tau[1] = 1; tau[2] = 2; tau[3] = 3;
1667 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
1671 tau[0] = 3 ; tau[1] = 0 ; tau[2] = 2 ; tau[3] = 1;
1675 tau[0] = 1 ; tau[1] = 3 ; tau[2] = 2 ; tau[3] = 0;
1681 pt[0]->
v[tau[1]] = vx[taued[0]]; pt[0]->
v[tau[2]] = vx[taued[1]];
1682 pt[1]->
v[tau[0]] = vx[taued[0]]; pt[1]->
v[tau[2]] = vx[taued[3]];
1683 pt[2]->
v[tau[0]] = vx[taued[1]]; pt[2]->
v[tau[1]] = vx[taued[3]];
1684 pt[3]->
v[tau[0]] = vx[taued[0]]; pt[3]->
v[tau[1]] = vx[taued[3]]; pt[3]->
v[tau[2]] = vx[taued[1]];
1686 xt[0].
tag[taued[3]] = 0; xt[0].
tag[taued[4]] = 0;
1687 xt[0].
tag[taued[5]] = 0; xt[0].
edg[taued[3]] = 0;
1688 xt[0].
edg[taued[4]] = 0; xt[0].
edg[taued[5]] = 0;
1689 xt[0].
ref[ tau[0]] = 0; xt[0].
ftag[ tau[0]] = 0;
MG_SET(xt[0].ori, tau[0]);
1691 xt[1].
tag[taued[1]] = 0; xt[1].
tag[taued[2]] = 0;
1692 xt[1].
tag[taued[5]] = 0; xt[1].
edg[taued[1]] = 0;
1693 xt[1].
edg[taued[2]] = 0; xt[1].
edg[taued[5]] = 0;
1694 xt[1].
ref[ tau[1]] = 0; xt[1].
ftag[ tau[1]] = 0;
MG_SET(xt[1].ori, tau[1]);
1696 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[2]] = 0;
1697 xt[2].
tag[taued[4]] = 0; xt[2].
edg[taued[0]] = 0;
1698 xt[2].
edg[taued[2]] = 0; xt[2].
edg[taued[4]] = 0;
1699 xt[2].
ref[ tau[2]] = 0; xt[2].
ftag[ tau[2]] = 0;
MG_SET(xt[2].ori, tau[2]);
1701 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[1]] = 0;
1702 xt[3].
tag[taued[2]] = 0; xt[3].
tag[taued[3]] = 0;
1703 xt[3].
tag[taued[4]] = 0; xt[3].
tag[taued[5]] = 0;
1704 xt[3].
edg[taued[0]] = 0; xt[3].
edg[taued[1]] = 0;
1705 xt[3].
edg[taued[2]] = 0; xt[3].
edg[taued[3]] = 0;
1706 xt[3].
edg[taued[4]] = 0; xt[3].
edg[taued[5]] = 0;
1707 xt[3].
ref [ tau[0]] = 0; xt[3].
ref [ tau[1]] = 0; xt[3].
ref [tau[2]] = 0;
1708 xt[3].
ftag[ tau[0]] = 0; xt[3].
ftag[ tau[1]] = 0; xt[3].
ftag[tau[2]] = 0;
1712 memset(isxt,0,4*
sizeof(int8_t));
1713 for (i=0; i<4; i++) {
1715 for (j=0; j<ne; j++) {
1716 if ( xt[j].ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
1723 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = 0;
1724 for (i=1; i<4; i++) {
1730 "larger xtetra table",
1732 fprintf(stderr,
" Exit program.\n");
1743 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = 0;
1744 for (i=1; i<4; i++) {
1748 pt[i]->
xt = pt[0]->
xt;
1757 "larger xtetra table",
1759 fprintf(stderr,
" Exit program.\n");
1792 uint8_t tau[4],ia,ib;
1793 const uint8_t *taued;
1802 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
1807 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
1812 tau[0] = 2 ; tau[1] = 0 ; tau[2] = 1 ; tau[3] = 3;
1817 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
1824 if ( pt->
v[tau[1]] < pt->
v[tau[2]] ) {
1833 if ( pt->
v[tau[3]] < pt->
v[ia] ) {
1838 if ( pt->
v[tau[3]] < pt->
v[ib] ) {
1847 pt0->
v[tau[1]] = vx[taued[0]];
1848 pt0->
v[tau[2]] = vx[taued[1]];
1849 pt0->
v[tau[3]] = vx[taued[2]];
1854 if ( ia == tau[3] ) {
1855 pt0->
v[tau[0]] = vx[taued[2]];
1856 pt0->
v[tau[1]] = vx[taued[0]];
1857 pt0->
v[tau[2]] = vx[taued[1]];
1862 if ( ib == tau[1] ) {
1863 pt0->
v[tau[0]] = vx[taued[0]];
1864 pt0->
v[tau[2]] = vx[taued[1]];
1869 pt0->
v[tau[0]] = vx[taued[1]] ;
1874 assert(ib == tau[2]);
1875 pt0->
v[tau[0]] = vx[taued[1]];
1876 pt0->
v[tau[1]] = vx[taued[0]];
1881 pt0->
v[tau[0]] = vx[taued[0]] ;
1886 else if (ia == tau[2] ) {
1887 pt0->
v[tau[0]] = vx[taued[1]];
1888 pt0->
v[tau[1]] = vx[taued[0]];
1889 pt0->
v[tau[3]] = vx[taued[2]];
1894 if ( ib == tau[3] ) {
1895 pt0->
v[tau[0]] = vx[taued[2]];
1896 pt0->
v[tau[1]] = vx[taued[0]];
1901 pt0->
v[tau[0]] = vx[taued[0]];
1906 assert(ib == tau[1]);
1907 pt0->
v[tau[0]] = vx[taued[0]];
1908 pt0->
v[tau[3]] = vx[taued[2]];
1913 pt0->
v[tau[0]] = vx[taued[2]];
1919 assert(ia == tau[1]);
1921 pt0->
v[tau[0]] = vx[taued[0]];
1922 pt0->
v[tau[2]] = vx[taued[1]];
1923 pt0->
v[tau[3]] = vx[taued[2]];
1928 if ( ib == tau[2] ) {
1929 pt0->
v[tau[0]] = vx[taued[1]];
1930 pt0->
v[tau[3]] = vx[taued[2]] ;
1935 pt0->
v[tau[0]] = vx[taued[2]] ;
1941 assert(ib == tau[3]);
1943 pt0->
v[tau[0]] = vx[taued[2]];
1944 pt0->
v[tau[2]] = vx[taued[1]];
1949 pt0->
v[tau[0]] = vx[taued[1]];
1976 int8_t flg,firstxt,isxt[4],ia,ib;
1978 const uint8_t *taued;
1992 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
1997 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
2002 tau[0] = 2 ; tau[1] = 0 ; tau[2] = 1 ; tau[3] = 3;
2007 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
2014 if ( (pt[0])->v[tau[1]] < (pt[0])->v[tau[2]] ) {
2023 if ( (pt[0])->v[tau[3]] < (pt[0])->v[ia] ) {
2028 if ( (pt[0])->v[tau[3]] < (pt[0])->v[ib] ) {
2035 pt[0]->
v[tau[1]] = vx[taued[0]] ; pt[0]->
v[tau[2]] = vx[taued[1]] ; pt[0]->
v[tau[3]] = vx[taued[2]];
2036 xt[0].
tag[taued[3]] = 0; xt[0].
tag[taued[4]] = 0;
2037 xt[0].
tag[taued[5]] = 0; xt[0].
edg[taued[3]] = 0;
2038 xt[0].
edg[taued[4]] = 0; xt[0].
edg[taued[5]] = 0;
2039 xt[0].
ref [ tau[0]] = 0;
2040 xt[0].
ftag[ tau[0]] = 0;
2041 MG_SET(xt[0].ori, tau[0]);
2043 if ( ia == tau[3] ) {
2044 pt[1]->
v[tau[0]] = vx[taued[2]] ; pt[1]->
v[tau[1]] = vx[taued[0]] ; pt[1]->
v[tau[2]] = vx[taued[1]];
2045 xt[1].
tag[taued[0]] = 0; xt[1].
tag[taued[1]] = 0;
2046 xt[1].
tag[taued[3]] = 0; xt[1].
tag[taued[4]] = 0;
2047 xt[1].
tag[taued[5]] = 0; xt[1].
edg[taued[0]] = 0;
2048 xt[1].
edg[taued[1]] = 0; xt[1].
edg[taued[3]] = 0;
2049 xt[1].
edg[taued[4]] = 0; xt[1].
edg[taued[5]] = 0;
2050 xt[1].
ref [ tau[0]] = 0; xt[1].
ref [ tau[3]] = 0;
2051 xt[1].
ftag[ tau[0]] = 0; xt[1].
ftag[ tau[3]] = 0;
2054 if ( ib == tau[1] ) {
2055 pt[2]->
v[tau[0]] = vx[taued[0]] ; pt[2]->
v[tau[2]] = vx[taued[1]] ;
2056 xt[2].
tag[taued[1]] = 0; xt[2].
tag[taued[2]] = 0;
2057 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[5]] = 0;
2058 xt[2].
edg[taued[1]] = 0; xt[2].
edg[taued[2]] = 0;
2059 xt[2].
edg[taued[3]] = 0; xt[2].
edg[taued[5]] = 0;
2060 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[1]] = 0;
2061 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[1]] = 0;
2064 pt[3]->
v[tau[0]] = vx[taued[1]] ;
2065 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[2]] = 0;
2066 xt[3].
edg[taued[0]] = 0; xt[3].
edg[taued[2]] = 0;
2067 xt[3].
ref [ tau[2]] = 0;
2068 xt[3].
ftag[ tau[2]] = 0;
2069 MG_SET(xt[3].ori, tau[2]);
2072 assert(ib == tau[2]);
2074 pt[2]->
v[tau[0]] = vx[taued[1]] ; pt[2]->
v[tau[1]] = vx[taued[0]] ;
2075 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[2]] = 0;
2076 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[4]] = 0;
2077 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[2]] = 0;
2078 xt[2].
edg[taued[3]] = 0; xt[2].
edg[taued[4]] = 0;
2079 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[2]] = 0;
2080 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[2]] = 0;
2083 pt[3]->
v[tau[0]] = vx[taued[0]] ;
2084 xt[3].
tag[taued[1]] = 0; xt[3].
tag[taued[2]] = 0;
2085 xt[3].
edg[taued[1]] = 0; xt[3].
edg[taued[2]] = 0;
2086 xt[3].
ref [ tau[1]] = 0;
2087 xt[3].
ftag[ tau[1]] = 0;
2088 MG_SET(xt[3].ori, tau[1]);
2092 else if (ia == tau[2] ) {
2093 pt[1]->
v[tau[0]] = vx[taued[1]] ; pt[1]->
v[tau[1]] = vx[taued[0]] ; pt[1]->
v[tau[3]] = vx[taued[2]];
2094 xt[1].
tag[taued[0]] = 0; xt[1].
tag[taued[2]] = 0;
2095 xt[1].
tag[taued[3]] = 0; xt[1].
tag[taued[4]] = 0;
2096 xt[1].
tag[taued[5]] = 0; xt[1].
edg[taued[0]] = 0;
2097 xt[1].
edg[taued[2]] = 0; xt[1].
edg[taued[3]] = 0;
2098 xt[1].
edg[taued[4]] = 0; xt[1].
edg[taued[5]] = 0;
2099 xt[1].
ref [ tau[0]] = 0; xt[1].
ref [ tau[2]] = 0;
2100 xt[1].
ftag[ tau[0]] = 0; xt[1].
ftag[ tau[2]] = 0;
2103 if ( ib == tau[3] ) {
2104 pt[2]->
v[tau[0]] = vx[taued[2]] ; pt[2]->
v[tau[1]] = vx[taued[0]] ;
2105 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[1]] = 0;
2106 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[4]] = 0;
2107 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[1]] = 0;
2108 xt[2].
edg[taued[3]] = 0; xt[2].
edg[taued[4]] = 0;
2109 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[3]] = 0;
2110 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[3]] = 0;
2113 pt[3]->
v[tau[0]] = vx[taued[0]] ;
2114 xt[3].
tag[taued[1]] = 0; xt[3].
tag[taued[2]] = 0;
2115 xt[3].
edg[taued[1]] = 0; xt[3].
edg[taued[2]] = 0;
2116 xt[3].
ref [ tau[1]] = 0;
2117 xt[3].
ftag[ tau[1]] = 0;
2118 MG_SET(xt[3].ori, tau[1]);
2121 assert(ib == tau[1]);
2123 pt[2]->
v[tau[0]] = vx[taued[0]] ; pt[2]->
v[tau[3]] = vx[taued[2]] ;
2124 xt[2].
tag[taued[1]] = 0; xt[2].
tag[taued[2]] = 0;
2125 xt[2].
tag[taued[4]] = 0; xt[2].
tag[taued[5]] = 0;
2126 xt[2].
edg[taued[1]] = 0; xt[2].
edg[taued[2]] = 0;
2127 xt[2].
edg[taued[4]] = 0; xt[2].
edg[taued[5]] = 0;
2128 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[1]] = 0;
2129 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[1]] = 0;
2132 pt[3]->
v[tau[0]] = vx[taued[2]] ;
2133 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[1]] = 0;
2134 xt[3].
edg[taued[0]] = 0; xt[3].
edg[taued[1]] = 0;
2135 xt[3].
ref [ tau[3]] = 0;
2136 xt[3].
ftag[ tau[3]] = 0;
2137 MG_SET(xt[3].ori, tau[3]);
2141 assert(ia == tau[1]);
2143 pt[1]->
v[tau[0]] = vx[taued[0]] ; pt[1]->
v[tau[2]] = vx[taued[1]] ; pt[1]->
v[tau[3]] = vx[taued[2]];
2144 xt[1].
tag[taued[1]] = 0; xt[1].
tag[taued[2]] = 0;
2145 xt[1].
tag[taued[3]] = 0; xt[1].
tag[taued[4]] = 0;
2146 xt[1].
tag[taued[5]] = 0; xt[1].
edg[taued[1]] = 0;
2147 xt[1].
edg[taued[2]] = 0; xt[1].
edg[taued[3]] = 0;
2148 xt[1].
edg[taued[4]] = 0; xt[1].
edg[taued[5]] = 0;
2149 xt[1].
ref [ tau[0]] = 0; xt[1].
ref [ tau[1]] = 0;
2150 xt[1].
ftag[ tau[0]] = 0; xt[1].
ftag[ tau[1]] = 0;
2153 if ( ib == tau[2] ) {
2154 pt[2]->
v[tau[0]] = vx[taued[1]] ; pt[2]->
v[tau[3]] = vx[taued[2]] ;
2155 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[2]] = 0;
2156 xt[2].
tag[taued[4]] = 0; xt[2].
tag[taued[5]] = 0;
2157 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[2]] = 0;
2158 xt[2].
edg[taued[4]] = 0; xt[2].
edg[taued[5]] = 0;
2159 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[2]] = 0;
2160 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[2]] = 0;
2163 pt[3]->
v[tau[0]] = vx[taued[2]] ;
2164 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[1]] = 0;
2165 xt[3].
edg[taued[0]] = 0; xt[3].
edg[taued[1]] = 0;
2166 xt[3].
ref [ tau[3]] = 0;
2167 xt[3].
ftag[ tau[3]] = 0;
2168 MG_SET(xt[3].ori, tau[3]);
2171 assert(ib == tau[3]);
2173 pt[2]->
v[tau[0]] = vx[taued[2]] ; pt[2]->
v[tau[2]] = vx[taued[1]] ;
2174 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[1]] = 0;
2175 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[5]] = 0;
2176 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[1]] = 0;
2177 xt[2].
edg[taued[3]] = 0; xt[2].
edg[taued[5]] = 0;
2178 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[3]] = 0;
2179 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[3]] = 0;
2182 pt[3]->
v[tau[0]] = vx[taued[1]] ;
2183 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[2]] = 0;
2184 xt[3].
edg[taued[0]] = 0; xt[3].
edg[taued[2]] = 0;
2185 xt[3].
ref [ tau[2]] = 0;
2186 xt[3].
ftag[ tau[2]] = 0;
2187 MG_SET(xt[3].ori, tau[2]);
2192 isxt[0] = isxt[1] = isxt[2] = isxt[3] = 0;
2194 for (i=0; i<4; i++) {
2196 for (j=0; j<ne; j++) {
2197 if ( xt[j].ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
2201 if ( (pt[0])->xt ) {
2204 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = 0;
2205 for (i=1; i<4; i++) {
2211 "larger xtetra table",
2213 fprintf(stderr,
" Exit program.\n");
2224 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = 0;
2225 for ( i=1; i<4; i++) {
2229 pt[i]->
xt = pt[0]->
xt;
2238 "larger xtetra table",
2240 fprintf(stderr,
" Exit program.\n");
2286 const uint8_t **taued,
2287 uint8_t sym[4],uint8_t symed[6],
2288 uint8_t *ip0,uint8_t *ip1,
2289 uint8_t *ip2,uint8_t *ip3,
2290 uint8_t *ie0,uint8_t *ie1,
2291 uint8_t *ie2,uint8_t *ie3,
2292 uint8_t *ie4,uint8_t *ie5,
2293 uint8_t *imin03,uint8_t *imin12) {
2296 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
2299 sym[0] = 0; sym[1] = 1 ; sym[2] = 2 ; sym[3] = 3;
2300 symed[0] = 0 ; symed[1] = 1 ; symed[2] = 2;
2301 symed[3] = 3 ; symed[4] = 4 ; symed[5] = 5;
2305 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
2308 sym[0] = 0; sym[1] = 2 ; sym[2] = 1 ; sym[3] = 3;
2309 symed[0] = 1 ; symed[1] = 0 ; symed[2] = 2;
2310 symed[3] = 3 ; symed[4] = 5 ; symed[5] = 4;
2314 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
2317 sym[0] = 0; sym[1] = 1 ; sym[2] = 2 ; sym[3] = 3;
2318 symed[0] = 0 ; symed[1] = 1 ; symed[2] = 2;
2319 symed[3] = 3 ; symed[4] = 4 ; symed[5] = 5;
2323 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
2326 sym[0] = 0; sym[1] = 2 ; sym[2] = 1 ; sym[3] = 3;
2327 symed[0] = 1 ; symed[1] = 0 ; symed[2] = 2;
2328 symed[3] = 3 ; symed[4] = 5 ; symed[5] = 4;
2332 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
2335 sym[0] = 0; sym[1] = 1 ; sym[2] = 2 ; sym[3] = 3;
2336 symed[0] = 0 ; symed[1] = 1 ; symed[2] = 2;
2337 symed[3] = 3 ; symed[4] = 4 ; symed[5] = 5;
2341 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
2344 sym[0] = 0; sym[1] = 2 ; sym[2] = 1 ; sym[3] = 3;
2345 symed[0] = 1 ; symed[1] = 0 ; symed[2] = 2;
2346 symed[3] = 3 ; symed[4] = 5 ; symed[5] = 4;
2350 tau[0] = 2 ; tau[1] = 0 ; tau[2] = 1 ; tau[3] = 3;
2353 sym[0] = 0; sym[1] = 1 ; sym[2] = 2 ; sym[3] = 3;
2354 symed[0] = 0 ; symed[1] = 1 ; symed[2] = 2;
2355 symed[3] = 3 ; symed[4] = 4 ; symed[5] = 5;
2359 tau[0] = 0 ; tau[1] = 2 ; tau[2] = 3 ; tau[3] = 1;
2362 sym[0] = 0; sym[1] = 2 ; sym[2] = 1 ; sym[3] = 3;
2363 symed[0] = 1 ; symed[1] = 0 ; symed[2] = 2;
2364 symed[3] = 3 ; symed[4] = 5 ; symed[5] = 4;
2368 tau[0] = 3 ; tau[1] = 2 ; tau[2] = 1 ; tau[3] = 0;
2371 sym[0] = 0; sym[1] = 1 ; sym[2] = 2 ; sym[3] = 3;
2372 symed[0] = 0 ; symed[1] = 1 ; symed[2] = 2;
2373 symed[3] = 3 ; symed[4] = 4 ; symed[5] = 5;
2377 tau[0] = 3 ; tau[1] = 2 ; tau[2] = 1 ; tau[3] = 0;
2380 sym[0] = 0; sym[1] = 2 ; sym[2] = 1 ; sym[3] = 3;
2381 symed[0] = 1 ; symed[1] = 0 ; symed[2] = 2;
2382 symed[3] = 3 ; symed[4] = 5 ; symed[5] = 4;
2386 tau[0] = 3 ; tau[1] = 0 ; tau[2] = 2 ; tau[3] = 1;
2389 sym[0] = 0; sym[1] = 1 ; sym[2] = 2 ; sym[3] = 3;
2390 symed[0] = 0 ; symed[1] = 1 ; symed[2] = 2;
2391 symed[3] = 3 ; symed[4] = 4 ; symed[5] = 5;
2395 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
2398 sym[0] = 0; sym[1] = 2 ; sym[2] = 1 ; sym[3] = 3;
2399 symed[0] = 1 ; symed[1] = 0 ; symed[2] = 2;
2400 symed[3] = 3 ; symed[4] = 5 ; symed[5] = 4;
2404 (*ip0) = tau[sym[0]];
2405 (*ip1) = tau[sym[1]];
2406 (*ip2) = tau[sym[2]];
2407 (*ip3) = tau[sym[3]];
2409 (*ie0) = (*taued)[symed[0]];
2410 (*ie1) = (*taued)[symed[1]];
2411 (*ie2) = (*taued)[symed[2]];
2412 (*ie3) = (*taued)[symed[3]];
2413 (*ie4) = (*taued)[symed[4]];
2414 (*ie5) = (*taued)[symed[5]];
2417 assert(vx[(*ie0)] > 0);
2418 assert(vx[(*ie1)] > 0);
2419 assert(vx[(*ie5)] > 0);
2420 assert(vx[(*ie2)] <= 0);
2421 assert(vx[(*ie3)] <= 0);
2422 assert(vx[(*ie4)] <= 0);
2424 (*imin03) = (pt->
v[(*ip0)] < pt->
v[(*ip3)]) ? (*ip0) : (*ip3);
2425 (*imin12) = (pt->
v[(*ip1)] < pt->
v[(*ip2)]) ? (*ip1) : (*ip2);
2444 uint8_t tau[4],sym[4],symed[6],ip0,ip1,ip2,ip3,ie0,ie1,ie2,ie3;
2445 uint8_t ie4,ie5,imin03,imin12;
2446 const uint8_t *taued=NULL;
2455 MMG3D_configSplit3op(pt,vx,tau,&taued,sym,symed,&ip0,&ip1,&ip2,&ip3,
2456 &ie0,&ie1,&ie2,&ie3,&ie4,&ie5,&imin03,&imin12);
2459 if ( (imin12 == ip2) && (imin03 == ip0) ) {
2460 pt0->
v[ip0] = vx[ie1] ; pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip3] = vx[ie5] ;
2465 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip3] = vx[ie5] ;
2470 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip2] = vx[ie5] ;
2475 pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie1] ; pt0->
v[ip3] = vx[ie5] ;
2480 pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie5];
2485 else if ( (imin12 == ip1) && (imin03 == ip0) ) {
2486 pt0->
v[ip0] = vx[ie1] ; pt0->
v[ip3] = vx[ie5] ;
2491 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip2] = vx[ie1] ; pt0->
v[ip3] = vx[ie5];
2496 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip2] = vx[ie5] ;
2501 pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie5];
2506 pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie1]; pt0->
v[ip3] = vx[ie5];
2510 else if ( (imin12 == ip2) && (imin03 == ip3) ) {
2511 pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie1] ;
2516 pt0->
v[ip0] = vx[ie1] ; pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie5];
2521 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip2] = vx[ie5] ;
2526 pt0->
v[ip0] = vx[ie1] ; pt0->
v[ip1] = vx[ie0]; pt0->
v[ip3] = vx[ie5];
2531 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip3] = vx[ie5];
2536 assert((imin12 == ip1) && (imin03 == ip3)) ;
2538 pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie1] ;
2543 pt0->
v[ip0] = vx[ie1] ; pt0->
v[ip3] = vx[ie5] ;
2548 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip2] = vx[ie1] ;
2553 pt0->
v[ip0] = vx[ie1] ; pt0->
v[ip2] = vx[ie5] ;
2579 uint8_t imin12,imin03,tau[4],sym[4],symed[6],ip0,ip1,ip2,ip3,ie0,ie1;
2580 uint8_t ie2,ie3,ie4,ie5,isxt[5],firstxt,i;
2581 const uint8_t *taued=NULL;
2588 MMG3D_configSplit3op(pt[0],vx,tau,&taued,sym,symed,&ip0,&ip1,&ip2,&ip3,
2589 &ie0,&ie1,&ie2,&ie3,&ie4,&ie5,&imin03,&imin12);
2598 if ( !((imin12 == ip1) && (imin03 == ip3)) ) {
2602 fprintf(stderr,
"\n ## Error: %s: unable to allocate"
2603 " a new element.\n",__func__);
2605 fprintf(stderr,
" Exit program.\n");
2613 pt[4] = memcpy(pt[4],pt[0],
sizeof(
MMG5_Tetra));
2626 if ( (imin12 == ip2) && (imin03 == ip0) ) {
2627 pt[0]->
v[ip0] = vx[ie1] ; pt[0]->
v[ip1] = vx[ie0] ; pt[0]->
v[ip3] = vx[ie5] ;
2628 xt[0].
tag[ie0] = 0; xt[0].
tag[ie2] = 0;
2629 xt[0].
tag[ie3] = 0; xt[0].
tag[ie4] = 0;
2630 xt[0].
edg[ie0] = 0; xt[0].
edg[ie2] = 0;
2631 xt[0].
edg[ie3] = 0; xt[0].
edg[ie4] = 0;
2632 xt[0].
ref [ip0] = 0 ; xt[0].
ref [ip2] = 0 ;
2633 xt[0].
ftag[ip0] = 0 ; xt[0].
ftag[ip2] = 0 ;
2636 pt[1]->
v[ip0] = vx[ie0] ; pt[1]->
v[ip3] = vx[ie5] ;
2637 xt[1].
tag[ie1] = 0; xt[1].
tag[ie2] = 0;
2638 xt[1].
tag[ie4] = 0; xt[1].
edg[ie1] = 0;
2639 xt[1].
edg[ie2] = 0; xt[1].
edg[ie4] = 0;
2640 xt[1].
ref [ip1] = 0 ; xt[1] .
ref[ip2] = 0 ;
2641 xt[1].
ftag[ip1] = 0 ; xt[1].
ftag[ip2] = 0 ;
2644 pt[2]->
v[ip0] = vx[ie0] ; pt[2]->
v[ip2] = vx[ie5] ;
2645 xt[2].
tag[ie1] = 0; xt[2].
tag[ie2] = 0;
2646 xt[2].
tag[ie3] = 0; xt[2].
edg[ie2] = 0;
2648 xt[2].
ref [ip1] = 0 ; xt[2].
ref [ip3] = 0 ;
2649 xt[2].
ftag[ip1] = 0 ; xt[2].
ftag[ip3] = 0 ;
2652 pt[3]->
v[ip1] = vx[ie0] ; pt[3]->
v[ip2] = vx[ie1] ; pt[3]->
v[ip3] = vx[ie5] ;
2653 xt[3].
tag[ie2] = 0; xt[3].
tag[ie3] = 0;
2654 xt[3].
tag[ie4] = 0; xt[3].
tag[ie5] = 0;
2655 xt[3].
edg[ie2] = 0; xt[3].
edg[ie3] = 0;
2656 xt[3].
edg[ie4] = 0; xt[3].
edg[ie5] = 0;
2657 xt[3].
ref [ip0] = 0 ; xt[3].
ref [ip2] = 0 ;
2658 xt[3].
ftag[ip0] = 0 ; xt[3].
ftag[ip2] = 0 ;
2661 pt[4]->
v[ip1] = vx[ie0] ; pt[4]->
v[ip2] = vx[ie5];
2662 xt[4].
tag[ie1] = 0; xt[4].
tag[ie3] = 0;
2663 xt[4].
tag[ie4] = 0; xt[4].
edg[ie1] = 0;
2664 xt[4].
edg[ie3] = 0; xt[4].
edg[ie4] = 0;
2665 xt[4].
ref [ip0] = 0 ; xt[4].
ref [ip3] = 0 ;
2666 xt[4].
ftag[ip0] = 0 ; xt[4].
ftag[ip3] = 0 ;
2670 else if ( (imin12 == ip1) && (imin03 == ip0) ) {
2671 pt[0]->
v[ip0] = vx[ie1] ; pt[0]->
v[ip3] = vx[ie5] ;
2672 xt[0].
tag[ie0] = 0; xt[0].
tag[ie2] = 0;
2673 xt[0].
tag[ie4] = 0; xt[0].
edg[ie0] = 0;
2674 xt[0].
edg[ie2] = 0; xt[0].
edg[ie4] = 0;
2675 xt[0].
ref[ip2] = 0 ;
2676 xt[0].
ftag[ip2] = 0 ;
2679 pt[1]->
v[ip0] = vx[ie0] ; pt[1]->
v[ip2] = vx[ie1] ; pt[1]->
v[ip3] = vx[ie5];
2680 xt[1].
tag[ie1] = 0; xt[1].
tag[ie2] = 0;
2681 xt[1].
tag[ie3] = 0; xt[1].
tag[ie4] = 0;
2682 xt[1].
tag[ie5] = 0; xt[1].
edg[ie1] = 0;
2683 xt[1].
edg[ie2] = 0; xt[1].
edg[ie3] = 0;
2684 xt[1].
edg[ie4] = 0; xt[1].
edg[ie5] = 0;
2685 xt[1].
ref [ip0] = 0 ; xt[1].
ref [ip1] = 0 ; xt[1].
ref [ip2] = 0 ;
2686 xt[1].
ftag[ip0] = 0 ; xt[1].
ftag[ip1] = 0 ; xt[1].
ftag[ip2] = 0 ;
2689 pt[2]->
v[ip0] = vx[ie0] ; pt[2]->
v[ip2] = vx[ie5] ;
2690 xt[2].
tag[ie1] = 0; xt[2].
tag[ie2] = 0;
2691 xt[2].
tag[ie3] = 0; xt[2].
edg[ie1] = 0;
2692 xt[2].
edg[ie2] = 0; xt[2].
edg[ie3] = 0;
2693 xt[2].
ref [ip1] = 0 ; xt[2].
ref [ip3] = 0 ;
2694 xt[2].
ftag[ip1] = 0 ; xt[2].
ftag[ip3] = 0 ;
2697 pt[3]->
v[ip1] = vx[ie0] ; pt[3]->
v[ip2] = vx[ie5];
2698 xt[3].
tag[ie1] = 0; xt[3].
tag[ie3] = 0;
2699 xt[3].
tag[ie4] = 0; xt[3].
edg[ie1] = 0;
2700 xt[3].
edg[ie3] = 0; xt[3].
edg[ie4] = 0;
2701 xt[3].
ref [ip0] = 0 ; xt[3].
ref [ip3] = 0 ;
2702 xt[3].
ftag[ip0] = 0 ; xt[3].
ftag[ip3] = 0 ;
2705 pt[4]->
v[ip1] = vx[ie0] ; pt[4]->
v[ip2] = vx[ie1]; pt[4]->
v[ip3] = vx[ie5];
2706 xt[4].
tag[ie2] = 0; xt[4].
tag[ie3] = 0;
2707 xt[4].
tag[ie4] = 0; xt[4].
tag[ie5] = 0;
2708 xt[4].
edg[ie2] = 0; xt[4].
edg[ie3] = 0;
2709 xt[4].
edg[ie4] = 0; xt[4].
edg[ie5] = 0;
2710 xt[4].
ref [ip0] = 0 ; xt[4].
ref [ip2] = 0 ;
2711 xt[4].
ftag[ip0] = 0 ; xt[4].
ftag[ip2] = 0 ;
2715 else if ( (imin12 == ip2) && (imin03 == ip3) ) {
2716 pt[0]->
v[ip1] = vx[ie0] ; pt[0]->
v[ip2] = vx[ie1] ;
2717 xt[0].
tag[ie3] = 0; xt[0].
tag[ie4] = 0;
2718 xt[0].
tag[ie5] = 0; xt[0].
edg[ie3] = 0;
2719 xt[0].
edg[ie4] = 0; xt[0].
edg[ie5] = 0;
2720 xt[0].
ref[ip0] = 0 ;
2721 xt[0].
ftag[ip0] = 0 ;
2724 pt[1]->
v[ip0] = vx[ie1] ; pt[1]->
v[ip1] = vx[ie0] ; pt[1]->
v[ip2] = vx[ie5];
2725 xt[1].
tag[ie0] = 0; xt[1].
tag[ie1] = 0;
2726 xt[1].
tag[ie2] = 0; xt[1].
tag[ie3] = 0;
2727 xt[1].
tag[ie4] = 0; xt[1].
edg[ie0] = 0;
2728 xt[1].
edg[ie1] = 0; xt[1].
edg[ie2] = 0;
2729 xt[1].
edg[ie3] = 0; xt[1].
edg[ie4] = 0;
2730 xt[1].
ref [ip0] = 0 ; xt[1].
ref [ip2] = 0 ; xt[1].
ref [ip3] = 0 ;
2731 xt[1].
ftag[ip0] = 0 ; xt[1].
ftag[ip2] = 0 ; xt[1].
ftag[ip3] = 0 ;
2734 pt[2]->
v[ip0] = vx[ie0] ; pt[2]->
v[ip2] = vx[ie5] ;
2735 xt[2].
tag[ie1] = 0; xt[2].
tag[ie2] = 0;
2736 xt[2].
tag[ie3] = 0; xt[2].
edg[ie1] = 0;
2737 xt[2].
edg[ie2] = 0; xt[2].
edg[ie3] = 0;
2738 xt[2].
ref [ip1] = 0 ; xt[2].
ref [ip3] = 0 ;
2739 xt[2].
ftag[ip1] = 0 ; xt[2].
ftag[ip3] = 0 ;
2742 pt[3]->
v[ip0] = vx[ie1] ; pt[3]->
v[ip1] = vx[ie0]; pt[3]->
v[ip3] = vx[ie5];
2743 xt[3].
tag[ie0] = 0; xt[3].
tag[ie2] = 0;
2744 xt[3].
tag[ie3] = 0; xt[3].
tag[ie4] = 0;
2745 xt[3].
edg[ie0] = 0; xt[3].
edg[ie2] = 0;
2746 xt[3].
edg[ie3] = 0; xt[3].
edg[ie4] = 0;
2747 xt[3].
ref [ip0] = 0 ; xt[3].
ref [ip2] = 0 ;
2748 xt[3].
ftag[ip0] = 0 ; xt[3].
ftag[ip2] = 0 ;
2751 pt[4]->
v[ip0] = vx[ie0] ; pt[4]->
v[ip3] = vx[ie5];
2752 xt[4].
tag[ie1] = 0; xt[4].
tag[ie2] = 0;
2753 xt[4].
tag[ie4] = 0; xt[4].
edg[ie1] = 0;
2754 xt[4].
edg[ie2] = 0; xt[4].
edg[ie4] = 0;
2755 xt[4].
ref [ip1] = 0 ; xt[4].
ref [ip2] = 0 ;
2756 xt[4].
ftag[ip1] = 0 ; xt[4].
ftag[ip2] = 0 ;
2760 assert((imin12 == ip1) && (imin03 == ip3)) ;
2762 pt[0]->
v[ip1] = vx[ie0] ; pt[0]->
v[ip2] = vx[ie1] ;
2763 xt[0].
tag[ie3] = 0; xt[0].
tag[ie4] = 0;
2764 xt[0].
tag[ie5] = 0; xt[0].
edg[ie3] = 0;
2765 xt[0].
edg[ie4] = 0; xt[0].
edg[ie5] = 0;
2766 xt[0].
ref [ip0] = 0 ;
2767 xt[0].
ftag[ip0] = 0 ;
2770 pt[1]->
v[ip0] = vx[ie1] ; pt[1]->
v[ip3] = vx[ie5] ;
2771 xt[1].
tag[ie0] = 0; xt[1].
tag[ie2] = 0;
2772 xt[1].
tag[ie4] = 0; xt[1].
edg[ie0] = 0;
2773 xt[1].
edg[ie2] = 0; xt[1].
edg[ie4] = 0;
2774 xt[1].
ref [ip2] = 0 ;
2775 xt[1].
ftag[ip2] = 0 ;
2778 pt[2]->
v[ip0] = vx[ie0] ; pt[2]->
v[ip2] = vx[ie1] ;
2779 xt[2].
tag[ie1] = 0; xt[2].
tag[ie2] = 0;
2780 xt[2].
tag[ie3] = 0; xt[2].
tag[ie5] = 0;
2781 xt[2].
edg[ie1] = 0; xt[2].
edg[ie2] = 0;
2782 xt[2].
edg[ie3] = 0; xt[2].
edg[ie5] = 0;
2783 xt[2].
ref [ip0] = 0 ; xt[2].
ref [ip1] = 0 ;
2784 xt[2].
ftag[ip0] = 0 ; xt[2].
ftag[ip1] = 0 ;
2787 pt[3]->
v[ip0] = vx[ie1] ; pt[3]->
v[ip2] = vx[ie5] ;
2788 xt[3].
tag[ie0] = 0; xt[3].
tag[ie1] = 0;
2789 xt[3].
tag[ie2] = 0; xt[3].
tag[ie3] = 0;
2790 xt[3].
edg[ie0] = 0; xt[3].
edg[ie1] = 0;
2791 xt[3].
edg[ie2] = 0; xt[3].
edg[ie3] = 0;
2792 xt[3].
ref [ip2] = 0 ; xt[3].
ref [ip3] = 0 ;
2793 xt[3].
ftag[ip2] = 0 ; xt[3].
ftag[ip3] = 0 ;
2798 if ( (imin12 == ip1) && (imin03 == ip3) ) {
2799 isxt[0] = isxt[1] = isxt[2] = isxt[3] = 0;
2801 for (i=0; i<4; i++) {
2803 for (j=0; j<ne; j++) {
2804 if ( xt[j].ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
2811 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = 0;
2813 for (i=1; i<4; i++) {
2819 "larger xtetra table",
2821 fprintf(stderr,
" Exit program.\n");
2832 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = 0;
2834 for (i=1; i<4; i++) {
2838 pt[i]->
xt = pt[0]->
xt;
2847 "larger xtetra table",
2849 fprintf(stderr,
" Exit program.\n");
2864 isxt[0] = isxt[1] = isxt[2] = isxt[3] = isxt[4] = 0;
2866 for (i=0; i<4; i++) {
2868 for (j=0; j<=ne; j++) {
2869 if ( xt[j].ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
2876 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = 0;
2878 for(i=1; i<5; i++) {
2884 "larger xtetra table",
2886 fprintf(stderr,
" Exit program.\n");
2897 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = 0;
2899 for (i=1; i<5; i++) {
2903 pt[i]->
xt = pt[0]->
xt;
2912 "larger xtetra table",
2914 fprintf(stderr,
" Exit program.\n");
2929 if ( (!metRidTyp) && met->
m && met->
size>1 ) {
2934 if ( !((imin12 == ip1) && (imin03 == ip3)) ) {
2943 if ( !((imin12 == ip1) && (imin03 == ip3)) ) {
2969 MMG5_int ib,iadr,*adja,adj1,adj2,adj3,newtet[4],src;
2971 uint8_t isxt[4],firstxt;
2978 o[0] = o[1] = o[2] = 0.0;
2979 for (i=0; i<4; i++) {
2990 cb[0] = 0.25; cb[1] = 0.25; cb[2] = 0.25; cb[3] = 0.25;
2999 fprintf(stderr,
"\n ## Error: %s: unable to allocate"
3000 " a new point\n",__func__);
3006 if ( !metRidTyp && met->
size > 1 )
3009 MMG5_interp4bar(
mesh,met,k,ib,cb);
3019 iadr = 4*(newtet[0]-1)+1;
3028 adja[1] = 4*newtet[1];
3029 adja[2] = 4*newtet[2];
3030 adja[3] = 4*newtet[3];
3032 iadr = 4*(newtet[1]-1)+1;
3034 adja[0] = 4*newtet[0] + 1;
3036 adja[2] = 4*newtet[2] + 1;
3037 adja[3] = 4*newtet[3] + 1;
3039 mesh->
adja[4*(adj1/4-1) + 1+adj1%4] = 4*newtet[1]+1;
3041 iadr = 4*(newtet[2]-1)+1;
3043 adja[0] = 4*newtet[0] + 2;
3044 adja[1] = 4*newtet[1] + 2;
3046 adja[3] = 4*newtet[3] + 2;
3048 mesh->
adja[4*(adj2/4-1) + 1+adj2%4] = 4*newtet[2]+2;
3050 iadr = 4*(newtet[3]-1)+1;
3052 adja[0] = 4*newtet[0] + 3;
3053 adja[1] = 4*newtet[1] + 3;
3054 adja[2] = 4*newtet[2] + 3;
3057 mesh->
adja[4*(adj3/4-1) + 1+adj3%4] = 4*newtet[3]+3;
3061 pt[0]->
v[0] = pt[1]->
v[1] = pt[2]->
v[2] = pt[3]->
v[3] = ib;
3063 xt[0].
tag[0] = 0; xt[0].
edg[0] = 0;
3064 xt[0].
tag[1] = 0; xt[0].
edg[1] = 0;
3065 xt[0].
tag[2] = 0; xt[0].
edg[2] = 0;
3066 xt[0].
ref [1] = 0; xt[0].
ref [2] = 0; xt[0].
ref [3] = 0;
3067 xt[0].
ftag[1] = 0; xt[0].
ftag[2] = 0; xt[0].
ftag[3] = 0;
3070 xt[1].
tag[0] = 0; xt[1].
edg[0] = 0;
3071 xt[1].
tag[3] = 0; xt[1].
edg[3] = 0;
3072 xt[1].
tag[4] = 0; xt[1].
edg[4] = 0;
3073 xt[1].
ref [0] = 0; xt[1].
ref [2] = 0; xt[1].
ref [3] = 0;
3074 xt[1].
ftag[0] = 0; xt[1].
ftag[2] = 0; xt[1].
ftag[3] = 0;
3077 xt[2].
tag[1] = 0; xt[2].
edg[1] = 0;
3078 xt[2].
tag[3] = 0; xt[2].
edg[3] = 0;
3079 xt[2].
tag[5] = 0; xt[2].
edg[5] = 0;
3080 xt[2].
ref [0] = 0; xt[2].
ref [1] = 0; xt[2].
ref [3] = 0;
3081 xt[2].
ftag[0] = 0; xt[2].
ftag[1] = 0; xt[2].
ftag[3] = 0;
3084 xt[3].
tag[2] = 0; xt[3].
edg[2] = 0;
3085 xt[3].
tag[4] = 0; xt[3].
edg[4] = 0;
3086 xt[3].
tag[5] = 0; xt[3].
edg[5] = 0;
3087 xt[3].
ref [0] = 0; xt[3].
ref [1] = 0; xt[3].
ref [2] = 0;
3088 xt[3].
ftag[0] = 0; xt[3].
ftag[1] = 0; xt[3].
ftag[2] = 0;
3092 memset(isxt,0,ne*
sizeof(int8_t));
3093 for (i=0; i<ne; i++) {
3095 for (j=0; j<ne; j++) {
3096 if ( xt[j].ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
3103 for (i=1; i<4; i++) {
3109 "larger xtetra table",
3124 for (i=1; i<4; i++) {
3128 pt[i]->
xt = pt[0]->
xt;
3137 "larger xtetra table",
3174 const uint8_t **taued, uint8_t *imin23,uint8_t *imin12) {
3176 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
3180 tau[0] = 1 ; tau[1] = 3 ; tau[2] = 2 ; tau[3] = 0;
3185 tau[0] = 3 ; tau[1] = 0 ; tau[2] = 2 ; tau[3] = 1;
3190 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
3195 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
3200 tau[0] = 2 ; tau[1] = 3 ; tau[2] = 0 ; tau[3] = 1;
3205 tau[0] = 1 ; tau[1] = 0 ; tau[2] = 3 ; tau[3] = 2;
3210 tau[0] = 0 ; tau[1] = 2 ; tau[2] = 3 ; tau[3] = 1;
3215 tau[0] = 2 ; tau[1] = 1 ; tau[2] = 3 ; tau[3] = 0;
3220 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
3225 tau[0] = 3 ; tau[1] = 2 ; tau[2] = 1 ; tau[3] = 0;
3230 tau[0] = 2 ; tau[1] = 0 ; tau[2] = 1 ; tau[3] = 3;
3235 (*imin23) = (pt->
v[tau[2]] < pt->
v[tau[3]]) ? tau[2] : tau[3];
3236 (*imin12) = (pt->
v[tau[1]] < pt->
v[tau[2]]) ? tau[1] : tau[2];
3254 uint8_t imin23,imin12;
3255 const uint8_t *taued = NULL;
3268 pt0->
v[tau[1]] = vx[taued[0]];
3269 pt0->
v[tau[2]] = vx[taued[1]];
3270 pt0->
v[tau[3]] = vx[taued[2]];
3275 pt0->
v[tau[0]] = vx[taued[2]];
3276 pt0->
v[tau[1]] = vx[taued[0]];
3277 pt0->
v[tau[2]] = vx[taued[1]];
3278 pt0->
v[tau[3]] = vx[taued[4]] ;
3283 if ( imin12 == tau[1] ) {
3284 pt0->
v[tau[0]] = vx[taued[0]];
3285 pt0->
v[tau[2]] = vx[taued[1]];
3286 pt0->
v[tau[3]] = vx[taued[4]];
3291 pt0->
v[tau[0]] = vx[taued[1]];
3292 pt0->
v[tau[3]] = vx[taued[4]];
3297 pt0->
v[tau[0]] = vx[taued[1]];
3298 pt0->
v[tau[1]] = vx[taued[0]];
3299 pt0->
v[tau[3]] = vx[taued[4]] ;
3304 pt0->
v[tau[0]] = vx[taued[0]];
3305 pt0->
v[tau[3]] = vx[taued[4]] ;
3311 if ( imin23 == tau[2] ) {
3312 pt0->
v[tau[0]] = vx[taued[1]];
3313 pt0->
v[tau[1]] = vx[taued[4]];
3314 pt0->
v[tau[3]] = vx[taued[2]];
3319 pt0->
v[tau[0]] = vx[taued[2]];
3320 pt0->
v[tau[1]] = vx[taued[4]];
3325 pt0->
v[tau[0]] = vx[taued[2]];
3326 pt0->
v[tau[1]] = vx[taued[4]];
3327 pt0->
v[tau[2]] = vx[taued[1]];
3332 pt0->
v[tau[0]] = vx[taued[1]];
3333 pt0->
v[tau[1]] = vx[taued[4]];
3358 int8_t firstxt,isxt[6],j,i;
3359 uint8_t tau[4],imin23,imin12;
3360 const uint8_t *taued = NULL;
3376 pt[0]->
v[tau[1]] = vx[taued[0]] ; pt[0]->
v[tau[2]] = vx[taued[1]] ; pt[0]->
v[tau[3]] = vx[taued[2]];
3377 xt[0].
tag[taued[3]] = 0; xt[0].
tag[taued[4]] = 0;
3378 xt[0].
tag[taued[5]] = 0; xt[0].
edg[taued[3]] = 0;
3379 xt[0].
edg[taued[4]] = 0; xt[0].
edg[taued[5]] = 0;
3380 xt[0].
ref [ tau[0]] = 0 ;
3381 xt[0].
ftag[ tau[0]] = 0 ;
3382 MG_SET(xt[0].ori, tau[0]);
3384 pt[1]->
v[tau[0]] = vx[taued[2]] ; pt[1]->
v[tau[1]] = vx[taued[0]] ;
3385 pt[1]->
v[tau[2]] = vx[taued[1]] ; pt[1]->
v[tau[3]] = vx[taued[4]] ;
3386 xt[1].
tag[taued[0]] = 0; xt[1].
tag[taued[1]] = 0;
3387 xt[1].
tag[taued[2]] = 0; xt[1].
tag[taued[3]] = 0;
3388 xt[1].
tag[taued[4]] = 0; xt[1].
tag[taued[5]] = 0;
3389 xt[1].
edg[taued[0]] = 0; xt[1].
edg[taued[1]] = 0;
3390 xt[1].
edg[taued[2]] = 0; xt[1].
edg[taued[3]] = 0;
3391 xt[1].
edg[taued[4]] = 0; xt[1].
edg[taued[5]] = 0;
3392 xt[1].
ref [ tau[0]] = 0 ; xt[1].
ref [ tau[1]] = 0 ; xt[1].
ref [tau[3]] = 0 ;
3393 xt[1].
ftag[ tau[0]] = 0 ; xt[1].
ftag[ tau[1]] = 0 ; xt[1].
ftag[tau[3]] = 0 ;
3396 if ( imin12 == tau[1] ) {
3397 pt[2]->
v[tau[0]] = vx[taued[0]] ; pt[2]->
v[tau[2]] = vx[taued[1]] ; pt[2]->
v[tau[3]] = vx[taued[4]] ;
3398 xt[2].
tag[taued[1]] = 0; xt[2].
tag[taued[2]] = 0;
3399 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[5]] = 0;
3400 xt[2].
edg[taued[1]] = 0; xt[2].
edg[taued[2]] = 0;
3401 xt[2].
edg[taued[3]] = 0; xt[2].
edg[taued[5]] = 0;
3402 xt[2].
ref [ tau[0]] = 0 ; xt[2].
ref [ tau[1]] = 0 ;
3403 xt[2].
ftag[ tau[0]] = 0 ; xt[2].
ftag[ tau[1]] = 0 ;
3406 pt[3]->
v[tau[0]] = vx[taued[1]] ; pt[3]->
v[tau[3]] = vx[taued[4]] ;
3407 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[2]] = 0;
3408 xt[3].
tag[taued[5]] = 0; xt[3].
edg[taued[0]] = 0;
3409 xt[3].
edg[taued[2]] = 0; xt[3].
edg[taued[5]] = 0;
3410 xt[3].
ref [ tau[1]] = 0 ; xt[3].
ref [ tau[2]] = 0 ;
3411 xt[3].
ftag[ tau[1]] = 0 ; xt[3].
ftag[ tau[2]] = 0 ;
3415 pt[2]->
v[tau[0]] = vx[taued[1]] ; pt[2]->
v[tau[1]] = vx[taued[0]] ; pt[2]->
v[tau[3]] = vx[taued[4]] ;
3416 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[2]] = 0;
3417 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[4]] = 0;
3418 xt[2].
tag[taued[5]] = 0; xt[2].
edg[taued[0]] = 0;
3419 xt[2].
edg[taued[2]] = 0; xt[2].
edg[taued[3]] = 0;
3420 xt[2].
edg[taued[4]] = 0; xt[2].
edg[taued[5]] = 0;
3421 xt[2].
ref [ tau[0]] = 0 ; xt[2].
ref [ tau[1]] = 0 ; xt[2].
ref [tau[2]] = 0 ;
3422 xt[2].
ftag[ tau[0]] = 0 ; xt[2].
ftag[ tau[1]] = 0 ; xt[2].
ftag[tau[2]] = 0 ;
3425 pt[3]->
v[tau[0]] = vx[taued[0]] ; pt[3]->
v[tau[3]] = vx[taued[4]] ;
3426 xt[3].
tag[taued[1]] = 0; xt[3].
tag[taued[2]] = 0;
3427 xt[3].
tag[taued[5]] = 0; xt[3].
edg[taued[1]] = 0;
3428 xt[3].
edg[taued[2]] = 0; xt[3].
edg[taued[5]] = 0;
3429 xt[3].
ref [ tau[1]] = 0 ;
3430 xt[3].
ftag[ tau[1]] = 0 ;
3431 MG_SET(xt[3].ori, tau[1]);
3434 if ( imin23 == tau[2] ) {
3435 pt[4]->
v[tau[0]] = vx[taued[1]] ; pt[4]->
v[tau[1]] = vx[taued[4]] ; pt[4]->
v[tau[3]] = vx[taued[2]] ;
3436 xt[4].
tag[taued[0]] = 0; xt[4].
tag[taued[2]] = 0;
3437 xt[4].
tag[taued[3]] = 0; xt[4].
tag[taued[4]] = 0;
3438 xt[4].
tag[taued[5]] = 0;
3439 xt[4].
edg[taued[0]] = 0; xt[4].
edg[taued[2]] = 0;
3440 xt[4].
edg[taued[3]] = 0; xt[4].
edg[taued[4]] = 0;
3441 xt[4].
edg[taued[5]] = 0;
3442 xt[4].
ref [ tau[0]] = 0; xt[4].
ref [ tau[2]] = 0 ;
3443 xt[4].
ref [ tau[3]] = 0 ;
3444 xt[4].
ftag[ tau[0]] = 0; xt[4].
ftag[ tau[2]] = 0 ;
3445 xt[4].
ftag[ tau[3]] = 0 ;
3448 pt[5]->
v[tau[0]] = vx[taued[2]] ; pt[5]->
v[tau[1]] = vx[taued[4]] ;
3449 xt[5].
tag[taued[0]] = 0; xt[5].
tag[taued[1]] = 0;
3450 xt[5].
tag[taued[3]] = 0; xt[5].
edg[taued[0]] = 0;
3451 xt[5].
edg[taued[1]] = 0; xt[5].
edg[taued[3]] = 0;
3452 xt[5].
ref [ tau[3]] = 0 ;
3453 xt[5].
ftag[ tau[3]] = 0 ;
3454 MG_SET(xt[5].ori, tau[3]);
3457 pt[4]->
v[tau[0]] = vx[taued[2]] ; pt[4]->
v[tau[1]] = vx[taued[4]] ; pt[4]->
v[tau[2]] = vx[taued[1]] ;
3458 xt[4].
tag[taued[0]] = 0; xt[4].
tag[taued[1]] = 0;
3459 xt[4].
tag[taued[3]] = 0; xt[4].
tag[taued[5]] = 0;
3460 xt[4].
edg[taued[0]] = 0; xt[4].
edg[taued[1]] = 0;
3461 xt[4].
edg[taued[3]] = 0; xt[4].
edg[taued[5]] = 0;
3462 xt[4].
ref [ tau[0]] = 0; xt[4].
ref [ tau[3]] = 0 ;
3463 xt[4].
ftag[ tau[0]] = 0; xt[4].
ftag[ tau[3]] = 0 ;
3466 pt[5]->
v[tau[0]] = vx[taued[1]] ; pt[5]->
v[tau[1]] = vx[taued[4]] ;
3467 xt[5].
tag[taued[0]] = 0; xt[5].
tag[taued[2]] = 0;
3468 xt[5].
tag[taued[3]] = 0; xt[5].
edg[taued[0]] = 0;
3469 xt[5].
edg[taued[2]] = 0; xt[5].
edg[taued[3]] = 0;
3470 xt[5].
ref [ tau[2]] = 0; xt[5].
ref [ tau[3]] = 0 ;
3471 xt[5].
ftag[ tau[2]] = 0; xt[5].
ftag[ tau[3]] = 0 ;
3476 memset(isxt,0,ne*
sizeof(int8_t));
3477 for (i=0; i<4; i++) {
3478 for (j=0; j<ne; j++) {
3479 if ( (xt[j]).ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
3486 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = pt[5]->
xt = 0;
3488 for (i=1; i<6; i++) {
3494 "larger xtetra table",
3496 fprintf(stderr,
" Exit program.\n");
3507 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = pt[5]->
xt = 0;
3509 for (i=1; i<6; i++) {
3513 pt[i]->
xt = pt[0]->
xt;
3522 "larger xtetra table",
3524 fprintf(stderr,
" Exit program.\n");
3558 uint8_t imin01,imin23;
3559 const uint8_t *taued;
3568 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
3573 tau[0] = 1 ; tau[1] = 3 ; tau[2] = 2 ; tau[3] = 0;
3578 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
3583 imin01 = (pt->
v[tau[0]] < pt->
v[tau[1]]) ? tau[0] : tau[1];
3584 imin23 = (pt->
v[tau[2]] < pt->
v[tau[3]]) ? tau[2] : tau[3];
3589 if ( imin01 == tau[0] ) {
3590 pt0->
v[tau[2]] = vx[taued[3]]; pt0->
v[tau[3]] = vx[taued[4]];
3595 pt0->
v[tau[1]] = vx[taued[4]]; pt0->
v[tau[2]] = vx[taued[3]];
3596 pt0->
v[tau[3]] = vx[taued[2]];
3601 pt0->
v[tau[1]] = vx[taued[3]]; pt0->
v[tau[2]] = vx[taued[1]];
3602 pt0->
v[tau[3]] = vx[taued[2]];
3607 pt0->
v[tau[2]] = vx[taued[1]]; pt0->
v[tau[3]] = vx[taued[2]];
3612 pt0->
v[tau[0]] = vx[taued[1]]; pt0->
v[tau[2]] = vx[taued[3]];
3613 pt0->
v[tau[3]] = vx[taued[2]];
3618 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[2]] = vx[taued[3]];
3619 pt0->
v[tau[3]] = vx[taued[4]];
3625 if ( imin23 == tau[2] ) {
3626 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[4]];
3631 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[3]];
3632 pt0->
v[tau[3]] = vx[taued[4]];
3637 pt0->
v[tau[0]] = vx[taued[1]]; pt0->
v[tau[1]] = vx[taued[3]];
3638 pt0->
v[tau[3]] = vx[taued[2]];
3643 pt0->
v[tau[0]] = vx[taued[1]]; pt0->
v[tau[1]] = vx[taued[3]];
3648 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[3]];
3649 pt0->
v[tau[2]] = vx[taued[1]];
3654 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[4]];
3655 pt0->
v[tau[2]] = vx[taued[3]];
3680 int8_t flg,firstxt,isxt[6],i,j,imin01,imin23;
3682 const uint8_t *taued;
3691 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
3696 tau[0] = 1 ; tau[1] = 3 ; tau[2] = 2 ; tau[3] = 0;
3701 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
3706 imin01 = ((pt[0])->v[tau[0]] < (pt[0])->v[tau[1]]) ? tau[0] : tau[1];
3707 imin23 = ((pt[0])->v[tau[2]] < (pt[0])->v[tau[3]]) ? tau[2] : tau[3];
3715 if ( imin01 == tau[0] ) {
3716 pt[0]->
v[tau[2]] = vx[taued[3]] ; pt[0]->
v[tau[3]] = vx[taued[4]];
3717 xt[0].
tag[taued[1]] = 0; xt[0].
tag[taued[5]] = 0;
3718 xt[0].
tag[taued[2]] = 0; xt[0].
edg[taued[1]] = 0;
3719 xt[0].
edg[taued[5]] = 0; xt[0].
edg[taued[2]] = 0;
3720 xt[0].
ref [ tau[1]] = 0;
3721 xt[0].
ftag[ tau[1]] = 0;
3722 MG_SET(xt[0].ori, tau[1]);
3724 pt[1]->
v[tau[1]] = vx[taued[4]] ; pt[1]->
v[tau[2]] = vx[taued[3]] ; pt[1]->
v[tau[3]] = vx[taued[2]];
3725 xt[1].
tag[taued[0]] = 0; xt[1].
tag[taued[1]] = 0;
3726 xt[1].
tag[taued[3]] = 0; xt[1].
tag[taued[4]] = 0;
3727 xt[1].
tag[taued[5]] = 0; xt[1].
edg[taued[0]] = 0;
3728 xt[1].
edg[taued[1]] = 0; xt[1].
edg[taued[3]] = 0;
3729 xt[1].
edg[taued[4]] = 0; xt[1].
edg[taued[5]] = 0;
3730 xt[1].
ref [ tau[0]] = 0; xt[1].
ref [ tau[1]] = 0; xt[1].
ref [tau[3]] = 0;
3731 xt[1].
ftag[ tau[0]] = 0; xt[1].
ftag[ tau[1]] = 0; xt[1].
ftag[tau[3]] = 0;
3734 pt[2]->
v[tau[1]] = vx[taued[3]] ; pt[2]->
v[tau[2]] = vx[taued[1]] ; pt[2]->
v[tau[3]] = vx[taued[2]];
3735 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[3]] = 0;
3736 xt[2].
tag[taued[4]] = 0; xt[2].
tag[taued[5]] = 0;
3737 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[3]] = 0;
3738 xt[2].
edg[taued[4]] = 0; xt[2].
edg[taued[5]] = 0;
3739 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[2]] = 0;
3740 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[2]] = 0;
3744 pt[0]->
v[tau[2]] = vx[taued[1]] ; pt[0]->
v[tau[3]] = vx[taued[2]];
3745 xt[0].
tag[taued[3]] = 0; xt[0].
tag[taued[4]] = 0;
3746 xt[0].
tag[taued[5]] = 0; xt[0].
edg[taued[3]] = 0;
3747 xt[0].
edg[taued[4]] = 0; xt[0].
edg[taued[5]] = 0;
3748 xt[0].
ref [ tau[0]] = 0;
3749 xt[0].
ftag[ tau[0]] = 0;
3750 MG_SET(xt[0].ori, tau[0]);
3752 pt[1]->
v[tau[0]] = vx[taued[1]] ; pt[1]->
v[tau[2]] = vx[taued[3]] ; pt[1]->
v[tau[3]] = vx[taued[2]];
3753 xt[1].
tag[taued[0]] = 0; xt[1].
tag[taued[1]] = 0;
3754 xt[1].
tag[taued[2]] = 0; xt[1].
tag[taued[4]] = 0;
3755 xt[1].
tag[taued[5]] = 0; xt[1].
edg[taued[0]] = 0;
3756 xt[1].
edg[taued[1]] = 0; xt[1].
edg[taued[2]] = 0;
3757 xt[1].
edg[taued[4]] = 0; xt[1].
edg[taued[5]] = 0;
3758 xt[1].
ref [ tau[0]] = 0; xt[1].
ref [ tau[1]] = 0; xt[1].
ref [tau[2]] = 0;
3759 xt[1].
ftag[ tau[0]] = 0; xt[1].
ftag[ tau[1]] = 0; xt[1].
ftag[tau[2]] = 0;
3762 pt[2]->
v[tau[0]] = vx[taued[2]] ; pt[2]->
v[tau[2]] = vx[taued[3]] ; pt[2]->
v[tau[3]] = vx[taued[4]];
3763 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[1]] = 0;
3764 xt[2].
tag[taued[2]] = 0; xt[2].
tag[taued[5]] = 0;
3765 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[1]] = 0;
3766 xt[2].
edg[taued[2]] = 0; xt[2].
edg[taued[5]] = 0;
3767 xt[2].
ref [ tau[1]] = 0; xt[2].
ref [ tau[3]] = 0;
3768 xt[2].
ftag[ tau[1]] = 0; xt[2].
ftag[ tau[3]] = 0;
3772 if ( imin23 == tau[2] ) {
3773 pt[3]->
v[tau[0]] = vx[taued[2]] ; pt[3]->
v[tau[1]] = vx[taued[4]];
3774 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[1]] = 0;
3775 xt[3].
tag[taued[3]] = 0; xt[3].
edg[taued[0]] = 0;
3776 xt[3].
edg[taued[1]] = 0; xt[3].
edg[taued[3]] = 0;
3777 xt[3].
ref [ tau[3]] = 0;
3778 xt[3].
ftag[ tau[3]] = 0;
3779 MG_SET(xt[3].ori, tau[3]);
3781 pt[4]->
v[tau[0]] = vx[taued[2]] ; pt[4]->
v[tau[1]] = vx[taued[3]] ; pt[4]->
v[tau[3]] = vx[taued[4]];
3782 xt[4].
tag[taued[0]] = 0; xt[4].
tag[taued[1]] = 0;
3783 xt[4].
tag[taued[2]] = 0; xt[4].
tag[taued[4]] = 0;
3784 xt[4].
tag[taued[5]] = 0; xt[4].
edg[taued[0]] = 0;
3785 xt[4].
edg[taued[1]] = 0; xt[4].
edg[taued[2]] = 0;
3786 xt[4].
edg[taued[4]] = 0; xt[4].
edg[taued[5]] = 0;
3787 xt[4].
ref [ tau[1]] = 0; xt[4].
ref [ tau[2]] = 0; xt[4].
ref [tau[3]] = 0;
3788 xt[4].
ftag[ tau[1]] = 0; xt[4].
ftag[ tau[2]] = 0; xt[4].
ftag[tau[3]] = 0;
3791 pt[5]->
v[tau[0]] = vx[taued[1]] ; pt[5]->
v[tau[1]] = vx[taued[3]] ; pt[5]->
v[tau[3]] = vx[taued[2]];
3792 xt[5].
tag[taued[0]] = 0; xt[5].
tag[taued[2]] = 0;
3793 xt[5].
tag[taued[4]] = 0; xt[5].
tag[taued[5]] = 0;
3794 xt[5].
edg[taued[0]] = 0; xt[5].
edg[taued[2]] = 0;
3795 xt[5].
edg[taued[4]] = 0; xt[5].
edg[taued[5]] = 0;
3796 xt[5].
ref [ tau[0]] = 0; xt[5].
ref [ tau[2]] = 0;
3797 xt[5].
ftag[ tau[0]] = 0; xt[5].
ftag[ tau[2]] = 0;
3801 pt[3]->
v[tau[0]] = vx[taued[1]] ; pt[3]->
v[tau[1]] = vx[taued[3]];
3802 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[2]] = 0;
3803 xt[3].
tag[taued[4]] = 0; xt[3].
edg[taued[0]] = 0;
3804 xt[3].
edg[taued[2]] = 0; xt[3].
edg[taued[4]] = 0;
3805 xt[3].
ref [ tau[2]] = 0;
3806 xt[3].
ftag[ tau[2]] = 0;
3807 MG_SET(xt[3].ori, tau[2]);
3809 pt[4]->
v[tau[0]] = vx[taued[2]] ; pt[4]->
v[tau[1]] = vx[taued[3]] ; pt[4]->
v[tau[2]] = vx[taued[1]];
3810 xt[4].
tag[taued[0]] = 0; xt[4].
tag[taued[1]] = 0;
3811 xt[4].
tag[taued[3]] = 0; xt[4].
tag[taued[4]] = 0;
3812 xt[4].
tag[taued[5]] = 0; xt[4].
edg[taued[0]] = 0;
3813 xt[4].
edg[taued[1]] = 0; xt[4].
edg[taued[3]] = 0;
3814 xt[4].
edg[taued[4]] = 0; xt[4].
edg[taued[5]] = 0;
3815 xt[4].
ref [ tau[0]] = 0; xt[4].
ref [ tau[2]] = 0; xt[4].
ref [tau[3]] = 0;
3816 xt[4].
ftag[ tau[0]] = 0; xt[4].
ftag[ tau[2]] = 0; xt[4].
ftag[tau[3]] = 0;
3819 pt[5]->
v[tau[0]] = vx[taued[2]] ; pt[5]->
v[tau[1]] = vx[taued[4]] ; pt[5]->
v[tau[2]] = vx[taued[3]];
3820 xt[5].
tag[taued[0]] = 0; xt[5].
tag[taued[1]] = 0;
3821 xt[5].
tag[taued[3]] = 0; xt[5].
tag[taued[5]] = 0;
3822 xt[5].
edg[taued[0]] = 0; xt[5].
edg[taued[1]] = 0;
3823 xt[5].
edg[taued[3]] = 0; xt[5].
edg[taued[5]] = 0;
3824 xt[5].
ref [ tau[1]] = 0; xt[5].
ref [ tau[3]] = 0;
3825 xt[5].
ftag[ tau[1]] = 0; xt[5].
ftag[ tau[3]] = 0;
3830 memset(isxt,0,ne*
sizeof(int8_t));
3832 for (i=0; i<4; i++) {
3833 for(j=0;j<ne;j++ ) {
3834 if ( (xt[j]).ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
3842 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = pt[5]->
xt = 0;
3844 for (i=1; i<6; i++) {
3850 "larger xtetra table",
3852 fprintf(stderr,
" Exit program.\n");
3863 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = pt[5]->
xt = 0;
3865 for (i=1; i<6; i++) {
3869 pt[i]->
xt = pt[0]->
xt;
3878 "larger xtetra table",
3880 fprintf(stderr,
" Exit program.\n");
3913 const uint8_t **taued,uint8_t *imin) {
3916 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
3921 tau[0] = 2 ; tau[1] = 0 ; tau[2] = 1 ; tau[3] = 3;
3926 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
3931 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
3936 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
3941 tau[0] = 3 ; tau[1] = 2 ; tau[2] = 1 ; tau[3] = 0;
3947 (*imin) = (pt->
v[tau[0]] < pt->
v[tau[1]]) ? tau[0] : tau[1];
3966 const uint8_t *taued=NULL;
3979 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[4]];
3980 pt0->
v[tau[2]] = vx[taued[5]];
3985 pt0->
v[tau[0]] = vx[taued[1]]; pt0->
v[tau[1]] = vx[taued[3]];
3986 pt0->
v[tau[3]] = vx[taued[5]];
3991 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[4]];
3996 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[3]];
3997 pt0->
v[tau[2]] = vx[taued[1]]; pt0->
v[tau[3]] = vx[taued[5]];
4002 if ( imin == tau[0] ) {
4003 pt0->
v[tau[2]] = vx[taued[3]]; pt0->
v[tau[3]] = vx[taued[4]];
4008 pt0->
v[tau[1]] = vx[taued[4]]; pt0->
v[tau[2]] = vx[taued[3]];
4009 pt0->
v[tau[3]] = vx[taued[2]];
4014 pt0->
v[tau[1]] = vx[taued[3]]; pt0->
v[tau[2]] = vx[taued[1]];
4015 pt0->
v[tau[3]] = vx[taued[2]];
4020 pt0->
v[tau[2]] = vx[taued[1]]; pt0->
v[tau[3]] = vx[taued[2]];
4025 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[2]] = vx[taued[3]];
4026 pt0->
v[tau[3]] = vx[taued[4]];
4031 pt0->
v[tau[0]] = vx[taued[1]]; pt0->
v[tau[2]] = vx[taued[3]];
4032 pt0->
v[tau[3]] = vx[taued[2]];
4058 int8_t firstxt,isxt[7];
4059 uint8_t tau[4],imin;
4060 const uint8_t *taued=NULL;
4076 pt[0]->
v[tau[0]] = vx[taued[2]] ; pt[0]->
v[tau[1]] = vx[taued[4]] ; pt[0]->
v[tau[2]] = vx[taued[5]];
4077 xt[0].
tag[taued[0]] = 0; xt[0].
tag[taued[1]] = 0;
4078 xt[0].
tag[taued[3]] = 0; xt[0].
edg[taued[0]] = 0;
4079 xt[0].
edg[taued[1]] = 0; xt[0].
edg[taued[3]] = 0;
4080 xt[0].
ref [ tau[3]] = 0;
4081 xt[0].
ftag[ tau[3]] = 0;
4082 MG_SET(xt[0].ori, tau[3]);
4084 pt[1]->
v[tau[0]] = vx[taued[1]] ; pt[1]->
v[tau[1]] = vx[taued[3]] ; pt[1]->
v[tau[3]] = vx[taued[5]];
4085 xt[1].
tag[taued[0]] = 0; xt[1].
tag[taued[2]] = 0;
4086 xt[1].
tag[taued[4]] = 0; xt[1].
edg[taued[0]] = 0;
4087 xt[1].
edg[taued[2]] = 0; xt[1].
edg[taued[4]] = 0;
4088 xt[1].
ref [ tau[2]] = 0;
4089 xt[1].
ftag[ tau[2]] = 0;
4090 MG_SET(xt[1].ori, tau[2]);
4092 pt[2]->
v[tau[0]] = vx[taued[2]] ; pt[2]->
v[tau[1]] = vx[taued[4]];
4093 pt[2]->
v[tau[2]] = vx[taued[3]] ; pt[2]->
v[tau[3]] = vx[taued[5]];
4094 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[1]] = 0;
4095 xt[2].
tag[taued[2]] = 0; xt[2].
tag[taued[3]] = 0;
4096 xt[2].
tag[taued[4]] = 0; xt[2].
tag[taued[5]] = 0;
4097 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[1]] = 0;
4098 xt[2].
edg[taued[2]] = 0; xt[2].
edg[taued[3]] = 0;
4099 xt[2].
edg[taued[4]] = 0; xt[2].
edg[taued[5]] = 0;
4100 xt[2].
ref [tau[1]] = 0 ; xt[2].
ref [ tau[2]] = 0; xt[2].
ref [tau[3]] = 0 ;
4101 xt[2].
ftag[tau[1]] = 0 ; xt[2].
ftag[ tau[2]] = 0; xt[2].
ftag[tau[3]] = 0 ;
4104 pt[3]->
v[tau[0]] = vx[taued[2]] ; pt[3]->
v[tau[1]] = vx[taued[3]];
4105 pt[3]->
v[tau[2]] = vx[taued[1]] ; pt[3]->
v[tau[3]] = vx[taued[5]];
4106 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[1]] = 0;
4107 xt[3].
tag[taued[2]] = 0; xt[3].
tag[taued[3]] = 0;
4108 xt[3].
tag[taued[4]] = 0; xt[3].
tag[taued[5]] = 0;
4109 xt[3].
edg[taued[0]] = 0; xt[3].
edg[taued[1]] = 0;
4110 xt[3].
edg[taued[2]] = 0; xt[3].
edg[taued[3]] = 0;
4111 xt[3].
edg[taued[4]] = 0; xt[3].
edg[taued[5]] = 0;
4112 xt[3].
ref [ tau[0]] = 0; xt[3].
ref [ tau[2]] = 0; xt[3].
ref [tau[3]] = 0 ;
4113 xt[3].
ftag[ tau[0]] = 0; xt[3].
ftag[ tau[2]] = 0; xt[3].
ftag[tau[3]] = 0 ;
4116 if ( imin == tau[0] ) {
4117 pt[4]->
v[tau[2]] = vx[taued[3]] ; pt[4]->
v[tau[3]] = vx[taued[4]];
4118 xt[4].
tag[taued[1]] = 0; xt[4].
tag[taued[2]] = 0;
4119 xt[4].
tag[taued[5]] = 0; xt[4].
edg[taued[1]] = 0;
4120 xt[4].
edg[taued[2]] = 0; xt[4].
edg[taued[5]] = 0;
4121 xt[4].
ref [ tau[1]] = 0;
4122 xt[4].
ftag[ tau[1]] = 0;
4123 MG_SET(xt[4].ori, tau[1]);
4125 pt[5]->
v[tau[1]] = vx[taued[4]] ; pt[5]->
v[tau[2]] = vx[taued[3]]; pt[5]->
v[tau[3]] = vx[taued[2]];
4126 xt[5].
tag[taued[0]] = 0;
4127 xt[5].
tag[taued[1]] = 0; xt[5].
tag[taued[3]] = 0;
4128 xt[5].
tag[taued[4]] = 0; xt[5].
tag[taued[5]] = 0;
4129 xt[5].
edg[taued[0]] = 0;
4130 xt[5].
edg[taued[1]] = 0; xt[5].
edg[taued[3]] = 0;
4131 xt[5].
edg[taued[4]] = 0; xt[5].
edg[taued[5]] = 0;
4132 xt[5].
ref [ tau[0]] = 0; xt[5].
ref [ tau[1]] = 0; xt[5].
ref [tau[3]] = 0 ;
4133 xt[5].
ftag[ tau[0]] = 0; xt[5].
ftag[ tau[1]] = 0; xt[5].
ftag[tau[3]] = 0 ;
4136 pt[6]->
v[tau[1]] = vx[taued[3]] ; pt[6]->
v[tau[2]] = vx[taued[1]]; pt[6]->
v[tau[3]] = vx[taued[2]];
4137 xt[6].
tag[taued[0]] = 0;
4138 xt[6].
tag[taued[3]] = 0; xt[6].
tag[taued[4]] = 0;
4139 xt[6].
tag[taued[5]] = 0; xt[6].
edg[taued[0]] = 0;
4140 xt[6].
edg[taued[3]] = 0;
4141 xt[6].
edg[taued[4]] = 0; xt[6].
edg[taued[5]] = 0;
4142 xt[6].
ref [ tau[0]] = 0; xt[6].
ref [ tau[2]] = 0;
4143 xt[6].
ftag[ tau[0]] = 0; xt[6].
ftag[ tau[2]] = 0;
4148 pt[4]->
v[tau[2]] = vx[taued[1]] ; pt[4]->
v[tau[3]] = vx[taued[2]];
4149 xt[4].
tag[taued[3]] = 0; xt[4].
tag[taued[4]] = 0;
4150 xt[4].
tag[taued[5]] = 0; xt[4].
edg[taued[3]] = 0;
4151 xt[4].
edg[taued[4]] = 0; xt[4].
edg[taued[5]] = 0;
4152 xt[4].
ref [ tau[0]] = 0;
4153 xt[4].
ftag[ tau[0]] = 0;
4154 MG_SET(xt[4].ori, tau[0]);
4156 pt[5]->
v[tau[0]] = vx[taued[2]] ; pt[5]->
v[tau[2]] = vx[taued[3]]; pt[5]->
v[tau[3]] = vx[taued[4]];
4157 xt[5].
tag[taued[0]] = 0; xt[5].
tag[taued[1]] = 0;
4158 xt[5].
tag[taued[2]] = 0; xt[5].
tag[taued[5]] = 0;
4159 xt[5].
edg[taued[0]] = 0; xt[5].
edg[taued[1]] = 0;
4160 xt[5].
edg[taued[2]] = 0; xt[5].
edg[taued[5]] = 0;
4161 xt[5].
ref [ tau[1]] = 0; xt[5].
ref [ tau[3]] = 0;
4162 xt[5].
ftag[ tau[1]] = 0; xt[5].
ftag[ tau[3]] = 0;
4165 pt[6]->
v[tau[0]] = vx[taued[1]] ; pt[6]->
v[tau[2]] = vx[taued[3]]; pt[6]->
v[tau[3]] = vx[taued[2]];
4166 xt[6].
tag[taued[0]] = 0; xt[6].
tag[taued[1]] = 0;
4167 xt[6].
tag[taued[2]] = 0; xt[6].
tag[taued[4]] = 0;
4168 xt[6].
tag[taued[5]] = 0; xt[6].
edg[taued[0]] = 0;
4169 xt[6].
edg[taued[1]] = 0; xt[6].
edg[taued[2]] = 0;
4170 xt[6].
edg[taued[4]] = 0; xt[6].
edg[taued[5]] = 0;
4171 xt[6].
ref [ tau[0]] = 0; xt[6].
ref [ tau[1]] = 0; xt[6].
ref [tau[2]] = 0 ;
4172 xt[6].
ftag[ tau[0]] = 0; xt[6].
ftag[ tau[1]] = 0; xt[6].
ftag[tau[2]] = 0 ;
4177 memset(isxt,0,ne*
sizeof(int8_t));
4179 for (i=0; i<4; i++) {
4180 for (j=0; j<ne; j++) {
4181 if ( (xt[j]).ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
4188 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = pt[5]->
xt = pt[6]->
xt = 0;
4190 for (i=1; i<7; i++) {
4196 "larger xtetra table",
4198 fprintf(stderr,
" Exit program.\n");
4209 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = pt[5]->
xt = pt[6]->
xt = 0;
4211 for (i=1; i<7; i++) {
4215 pt[i]->
xt = pt[0]->
xt;
4224 "larger xtetra table",
4226 fprintf(stderr,
" Exit program.\n");
4268 pt0->
v[1] = vx[0]; pt0->
v[2] = vx[1]; pt0->
v[3] = vx[2];
4273 pt0->
v[0] = vx[0]; pt0->
v[2] = vx[3]; pt0->
v[3] = vx[4];
4278 pt0->
v[0] = vx[1]; pt0->
v[1] = vx[3]; pt0->
v[3] = vx[5];
4283 pt0->
v[0] = vx[2]; pt0->
v[1] = vx[4]; pt0->
v[2] = vx[5];
4288 pt0->
v[0] = vx[0]; pt0->
v[1] = vx[3]; pt0->
v[2] = vx[1];
4294 pt0->
v[0] = vx[2]; pt0->
v[1] = vx[0]; pt0->
v[2] = vx[3];
4300 pt0->
v[0] = vx[2]; pt0->
v[1] = vx[3]; pt0->
v[2] = vx[1];
4306 pt0->
v[0] = vx[2]; pt0->
v[1] = vx[3]; pt0->
v[2] = vx[5];
4331 MMG5_int iel,newtet[8],nxt0;
4344 for (i=1; i<ne; i++) {
4348 fprintf(stderr,
"\n ## Error: %s: unable to allocate"
4349 " a new element.\n",__func__);
4351 fprintf(stderr,
" Exit program.\n");
4353 for ( j=0; j<i; j++ )
4357 pt[i] = memcpy(pt[i],pt[0],
sizeof(
MMG5_Tetra));
4362 pt[0]->
v[1] = vx[0] ; pt[0]->
v[2] = vx[1]; pt[0]->
v[3] = vx[2];
4365 xt.
tag[3] = 0; xt.
tag[4] = 0;
4366 xt.
tag[5] = 0; xt.
edg[3] = 0;
4367 xt.
edg[4] = 0; xt.
edg[5] = 0;
4371 if ( (xt.
ref[i]) || xt.
ftag[i] ) isxt0 = 1;
4383 pt[1]->
v[0] = vx[0] ; pt[1]->
v[2] = vx[3]; pt[1]->
v[3] = vx[4];
4387 xt.
tag[1] = 0; xt.
tag[2] = 0;
4388 xt.
tag[5] = 0; xt.
edg[1] = 0;
4389 xt.
edg[2] = 0; xt.
edg[5] = 0;
4394 for (i=0; i<4; i++) {
4395 if ( (xt.
ref[i]) || xt.
ftag[i]) isxt = 1;
4411 "larger xtetra table",
4413 fprintf(stderr,
" Exit program.\n");
4424 pt[2]->
v[0] = vx[1] ; pt[2]->
v[1] = vx[3]; pt[2]->
v[3] = vx[5];
4428 xt.
tag[0] = 0; xt.
tag[2] = 0;
4429 xt.
tag[4] = 0; xt.
edg[0] = 0;
4430 xt.
edg[2] = 0; xt.
edg[4] = 0;
4434 for (i=0; i<4;i++) {
4435 if ( (xt.
ref[i]) || xt.
ftag[i]) isxt = 1;
4451 "larger xtetra table",
4453 fprintf(stderr,
" Exit program.\n");
4464 pt[3]->
v[0] = vx[2] ; pt[3]->
v[1] = vx[4]; pt[3]->
v[2] = vx[5];
4468 xt.
tag[0] = 0; xt.
tag[1] = 0;
4469 xt.
tag[3] = 0; xt.
edg[0] = 0;
4470 xt.
edg[1] = 0; xt.
edg[3] = 0;
4475 for (i=0; i<4; i++) {
4476 if ( (xt.
ref[i]) || xt.
ftag[i]) isxt = 1;
4492 "larger xtetra table",
4494 fprintf(stderr,
" Exit program.\n");
4505 pt[4]->
v[0] = vx[0] ; pt[4]->
v[1] = vx[3]; pt[4]->
v[2] = vx[1] ; pt[4]->
v[3] = vx[2];
4509 xt.
tag[0] = 0; xt.
tag[1] = 0;
4510 xt.
tag[2] = 0; xt.
tag[3] = 0;
4511 xt.
edg[0] = 0; xt.
edg[1] = 0;
4512 xt.
edg[2] = 0; xt.
edg[3] = 0;
4513 xt.
tag[4] = 0; xt.
edg[4] = 0;
4514 xt.
tag[5] = 0; xt.
edg[5] = 0;
4515 xt.
ref [0] = 0 ; xt.
ref [1] = 0 ; xt.
ref [2] = 0;
4521 if ( (xt.
ref[3]) || xt.
ftag[3]) isxt = 1;
4536 "larger xtetra table",
4538 fprintf(stderr,
" Exit program.\n");
4549 pt[5]->
v[0] = vx[2] ; pt[5]->
v[1] = vx[0]; pt[5]->
v[2] = vx[3] ; pt[5]->
v[3] = vx[4];
4553 xt.
tag[0] = 0; xt.
tag[1] = 0;
4554 xt.
tag[2] = 0; xt.
tag[3] = 0;
4555 xt.
tag[4] = 0; xt.
tag[5] = 0;
4556 xt.
edg[0] = 0; xt.
edg[1] = 0;
4557 xt.
edg[2] = 0; xt.
edg[3] = 0;
4558 xt.
edg[4] = 0; xt.
edg[5] = 0;
4559 xt.
ref [0] = 0 ; xt.
ref [1] = 0 ; xt.
ref [3] = 0;
4565 if ( (xt.
ref[2]) || xt.
ftag[2]) isxt = 1;
4580 "larger xtetra table",
4582 fprintf(stderr,
" Exit program.\n");
4593 pt[6]->
v[0] = vx[2] ; pt[6]->
v[1] = vx[3]; pt[6]->
v[2] = vx[1] ; pt[6]->
v[3] = vx[5];
4597 xt.
tag[0] = 0; xt.
edg[0] = 0;
4598 xt.
tag[1] = 0; xt.
tag[2] = 0;
4599 xt.
tag[3] = 0; xt.
tag[4] = 0;
4600 xt.
edg[1] = 0; xt.
edg[2] = 0;
4601 xt.
edg[3] = 0; xt.
edg[4] = 0;
4602 xt.
tag[5] = 0; xt.
edg[5] = 0;
4603 xt.
ref [0] = 0 ; xt.
ref [2] = 0 ; xt.
ref [3] = 0;
4609 if ( (xt.
ref[1]) || xt.
ftag[1]) isxt = 1;
4624 "larger xtetra table",
4626 fprintf(stderr,
" Exit program.\n");
4637 pt[7]->
v[0] = vx[2] ; pt[7]->
v[1] = vx[3]; pt[7]->
v[2] = vx[5] ; pt[7]->
v[3] = vx[4];
4641 xt.
tag[0] = 0; xt.
tag[1] = 0;
4642 xt.
tag[2] = 0; xt.
tag[3] = 0;
4643 xt.
tag[4] = 0; xt.
tag[5] = 0;
4644 xt.
edg[0] = 0; xt.
edg[1] = 0;
4645 xt.
edg[2] = 0; xt.
edg[3] = 0;
4646 xt.
edg[4] = 0; xt.
edg[5] = 0;
4647 xt.
ref [1] = 0 ; xt.
ref [2] = 0 ; xt.
ref [3] = 0;
4653 if ( (xt.
ref[0]) || xt.
ftag[0]) isxt = 1;
4667 "larger xtetra table",
4669 fprintf(stderr,
" Exit program.\n");
4700 int64_t* list,
int ret,
double crit) {
4708 for (l=0; l<lon; l++) {
4711 if(pt1->
qual < critloc) critloc = pt1->
qual;
4716 for (l=0; l<lon; l++) {
4721 memcpy(pt0->
v,pt1->
v,4*
sizeof(MMG5_int));
4724 cal = MMG5_caltet(
mesh,met,pt0);
4725 if ( cal < critloc ) {
4730 memcpy(pt0->
v,pt1->
v,4*
sizeof(MMG5_int));
4733 cal = MMG5_caltet(
mesh,met,pt0);
4734 if ( cal < critloc ) {
4759 MMG5_int src,i0,i1,ip;
4767 if ( (!lon || lon<0) )
4783 tag = pxt->
tag[iar];
4798 o[0] = 0.5*(p0->
c[0] + p1->
c[0]);
4799 o[1] = 0.5*(p0->
c[1] + p1->
c[1]);
4800 o[2] = 0.5*(p0->
c[2] + p1->
c[2]);
4819 fprintf(stderr,
"\n ## Warning: %s:",__func__);
4820 fprintf(stderr,
" unable to allocate a new point in last call"
4821 " of MMG5_adpspl.\n");
4825 ier = MMG5_intmet(
mesh,met,iel,iar,ip,0.5);
4830 else if (
ier < 0 ) {
4837 if (
ier <= 0 ||
ier == 2 )
return 0;
4843 fprintf(stderr,
"\n ## Error: %s: unable to split.\n",__func__);
int MMG3D_chk4ridVertices(MMG5_pMesh mesh, MMG5_pTetra pt)
int MMG5_coquilface(MMG5_pMesh mesh, MMG5_int start, int8_t iface, int ia, int64_t *list, MMG5_int *it1, MMG5_int *it2, int silent)
int MMG5_coquil(MMG5_pMesh mesh, MMG5_int start, int ia, int64_t *list, int8_t *isbdy)
static double MMG5_caltet_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTetra pt)
static double MMG5_lenedg33_ani(MMG5_pMesh mesh, MMG5_pSol met, int ia, MMG5_pTetra pt)
static double MMG5_lenedgspl33_ani(MMG5_pMesh mesh, MMG5_pSol met, int ia, MMG5_pTetra pt)
static double MMG5_orcal(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int iel)
int MMG5_interp4bar33_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int ip, double cb[4])
API headers for the mmg3d library.
MMG5_int MMG3D_newPt(MMG5_pMesh mesh, double c[3], int16_t tag, MMG5_int src)
MMG5_int MMG3D_newElt(MMG5_pMesh mesh)
static const uint8_t MMG5_isar[6][2]
isar[i][]: vertices of extremities of the edge opposite to the ith edge
void MMG3D_delPt(MMG5_pMesh mesh, MMG5_int ip)
static const uint8_t MMG5_permedge[12][6]
static const int8_t MMG5_iarfinv[4][6]
num of the j^th edge in the i^th face
int MMG3D_delElt(MMG5_pMesh mesh, MMG5_int iel)
static const int8_t MMG5_iarf[4][3]
iarf[i]: edges of face opposite to vertex i
double MMG5_caltet33_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTetra pt)
static const uint8_t MMG5_iare[6][2]
vertices of extremities of the edges of the tetra
static const uint8_t MMG5_ifar[6][2]
ifar[i][]: faces sharing the ith edge of the tetra
#define MMG3D_POINT_REALLOC(mesh, sol, ip, wantedGap, law, o, tag, src)
void MMG5_tet2tri(MMG5_pMesh mesh, MMG5_int k, int8_t ie, MMG5_Tria *ptt)
#define MMG3D_TETRA_REALLOC(mesh, jel, wantedGap, law)
static const uint8_t MMG5_idir[4][3]
idir[i]: vertices of face opposite to vertex i
#define MMG5_INCREASE_MEM_MESSAGE()
static const uint8_t MMG5_iprv2[3]
#define MMG5_TAB_RECALLOC(mesh, ptr, initSize, wantedGap, type, message, law)
#define MG_GEO_OR_NOM(tag)
static const uint8_t MMG5_inxt2[6]
int MMG5_devangle(double *n1, double *n2, double crit)
int MMG5_nortri(MMG5_pMesh mesh, MMG5_pTria pt, double *n)
double MMG5_orvol(MMG5_pPoint point, MMG5_int *v)
#define MG_SET(flag, bit)
static uint8_t MMG3D_split2sf_cfg(MMG5_int flag, uint8_t *tau, const uint8_t **taued, MMG5_pTetra pt)
static int MMG3D_crea_newTetra(MMG5_pMesh mesh, const int ne, MMG5_int *newtet, MMG5_pTetra *pt, MMG5_xTetra *xt, MMG5_pxTetra *pxt0)
static void MMG3D_configSplit5(MMG5_pTetra pt, MMG5_int vx[6], uint8_t tau[4], const uint8_t **taued, uint8_t *imin)
int MMG3D_split6_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
MMG5_int MMG5_splitedg(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int iel, int iar, double crit)
int MMG3D_split3_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
int MMG3D_split3cone_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
int MMG5_split6(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t metRidTyp)
int MMG5_split4op(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t metRidTyp)
int MMG3D_simbulgept(MMG5_pMesh mesh, MMG5_pSol met, int64_t *list, int ret, MMG5_int ip)
static void MMG3D_configSplit3op(MMG5_pTetra pt, MMG5_int vx[6], uint8_t tau[4], const uint8_t **taued, uint8_t sym[4], uint8_t symed[6], uint8_t *ip0, uint8_t *ip1, uint8_t *ip2, uint8_t *ip3, uint8_t *ie0, uint8_t *ie1, uint8_t *ie2, uint8_t *ie3, uint8_t *ie4, uint8_t *ie5, uint8_t *imin03, uint8_t *imin12)
static int MMG3D_chksplit(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int ip, int64_t *list, int ret, double crit)
int MMG5_split1(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t metRidTyp)
static int MMG3D_normalDeviation(MMG5_pMesh mesh, MMG5_int start, int8_t iface, int8_t ia, MMG5_int idx, MMG5_int ip, double n0[3])
int MMG3D_normalAdjaTri(MMG5_pMesh mesh, MMG5_int start, int8_t iface, int ia, double n[3])
int MMG3D_split2sf_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
int MMG3D_split4op_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
int MMG5_split2(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t metRidTyp)
MMG5_int MMG5_split4bar(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int8_t metRidTyp)
int MMG3D_split1_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
int MMG5_split1b(MMG5_pMesh mesh, MMG5_pSol met, int64_t *list, int ret, MMG5_int ip, int cas, int8_t metRidTyp, int8_t chkRidTet)
int MMG5_split2sf(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t metRidTyp)
int MMG3D_split4sf_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
static void MMG3D_update_qual(MMG5_pMesh mesh, MMG5_pSol met, const int ne, MMG5_int *newtet, MMG5_pTetra *pt, int8_t metRidTyp)
static void MMG3D_split1_cfg(MMG5_int flag, uint8_t *tau, const uint8_t **taued)
int MMG3D_split5_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
static void MMG3D_configSplit4sf(MMG5_pTetra pt, MMG5_int vx[6], uint8_t tau[4], const uint8_t **taued, uint8_t *imin23, uint8_t *imin12)
int MMG5_split5(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t metRidTyp)
int MMG5_split3op(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t metRidTyp)
static int MMG5_split1b_eltspl(MMG5_pMesh mesh, MMG5_int ip, MMG5_int k, int64_t *list, MMG5_int *newtet, uint8_t tau[4])
int MMG3D_split3op_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
int MMG5_split3cone(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t metRidTyp)
int MMG5_split3(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t metRidTyp)
int MMG3D_split2_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
int MMG5_split4sf(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t metRidTyp)
Structure to store points of a MMG mesh.
Structure to store the surface tetrahedra of a MMG mesh.