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++) {
793 jel = MMG5_abs(newtet[k]);
804 if ( (list[1] / 6) == (nei2 / 4) ) {
805 if (
MG_SMSGN(newtet[0],newtet[1]) ) {
807 adjan[tau[2]] = 4*MMG5_abs(newtet[1])+(nei2 %4);
810 adja[tau[2]] = 4*MMG5_abs(newtet[1])+(nei2 %4);
811 adjan[tau[2]] = nei2;
820 assert((list[ilist-1] / 6) == (nei3 / 4));
821 if (
MG_SMSGN(newtet[0],newtet[ilist-1]) ) {
823 adjan[tau[3]] = 4*MMG5_abs(newtet[ilist-1])+(nei3 %4);
826 adja[tau[3]] = 4*MMG5_abs(newtet[ilist-1])+(nei3 %4);
827 adjan[tau[3]] = nei3;
833 assert((list[1] / 6) == (nei3 / 4));
834 if (
MG_SMSGN(newtet[0],newtet[1]) ) {
836 adjan[tau[3]] = 4*MMG5_abs(newtet[1])+(nei3 %4);
839 adja[tau[3]] = 4*MMG5_abs(newtet[1])+(nei3 %4);
840 adjan[tau[3]] = nei3;
849 assert((list[ilist-1]) / 6 == (nei2 / 4));
850 if (
MG_SMSGN(newtet[0],newtet[ilist-1]) ) {
852 adjan[tau[2]] = 4*MMG5_abs(newtet[ilist-1])+(nei2 %4);
855 adja[tau[2]] = 4*MMG5_abs(newtet[ilist-1])+(nei2 %4);
856 adjan[tau[2]] = nei2;
862 else if ( k==ilist-1 ) {
863 if ( (list[ilist-2] / 6) == (nei2 / 4) ) {
864 if (
MG_SMSGN(newtet[ilist-1],newtet[ilist-2]) ) {
866 adjan[tau[2]] = 4*MMG5_abs(newtet[ilist-2])+(nei2 %4);
869 adja[tau[2]] = 4*MMG5_abs(newtet[ilist-2])+(nei2 %4);
870 adjan[tau[2]] = nei2;
879 assert((list[0]) / 6 == (nei3 / 4));
880 if (
MG_SMSGN(newtet[ilist-1],newtet[0]) ) {
882 adjan[tau[3]] = 4*MMG5_abs(newtet[0])+(nei3 %4);
885 adja[tau[3]] = 4*MMG5_abs(newtet[0])+(nei3 %4);
886 adjan[tau[3]] = nei3;
892 assert((list[ilist-2] / 6) == (nei3 / 4));
893 if (
MG_SMSGN(newtet[ilist-1],newtet[ilist-2]) ) {
895 adjan[tau[3]] = 4*MMG5_abs(newtet[ilist-2])+(nei3 %4);
898 adja[tau[3]] = 4*MMG5_abs(newtet[ilist-2])+(nei3 %4);
899 adjan[tau[3]] = nei3;
908 assert((list[0]) / 6 == (nei2 / 4));
909 if (
MG_SMSGN(newtet[ilist-1],newtet[0]) ) {
911 adjan[tau[2]] = 4*MMG5_abs(newtet[0])+(nei2 %4);
914 adja[tau[2]] = 4*MMG5_abs(newtet[0])+(nei2 %4);
915 adjan[tau[2]] = nei2;
922 if ( (list[k-1] / 6) == (nei2 / 4) ) {
923 if (
MG_SMSGN(newtet[k],newtet[k-1]) ) {
925 adjan[tau[2]] = 4*MMG5_abs(newtet[k-1])+(nei2 %4);
928 adja[tau[2]] = 4*MMG5_abs(newtet[k-1])+(nei2 %4);
929 adjan[tau[2]] = nei2;
932 assert((list[k+1]) / 6 == (nei3 / 4));
933 if (
MG_SMSGN(newtet[k],newtet[k+1]) ) {
935 adjan[tau[3]] = 4*MMG5_abs(newtet[k+1])+(nei3 %4);
938 adja[tau[3]] = 4*MMG5_abs(newtet[k+1])+(nei3 %4);
939 adjan[tau[3]] = nei3;
944 assert((list[k-1] / 6) == (nei3 / 4));
945 if (
MG_SMSGN(newtet[k],newtet[k-1]) ) {
947 adjan[tau[3]] = 4*MMG5_abs(newtet[k-1])+(nei3 %4);
950 adja[tau[3]] = 4*MMG5_abs(newtet[k-1])+(nei3 %4);
951 adjan[tau[3]] = nei3;
954 assert((list[k+1]) / 6 == (nei2 / 4));
955 if (
MG_SMSGN(newtet[k],newtet[k+1]) ) {
957 adjan[tau[2]] = 4*MMG5_abs(newtet[k+1])+(nei2 %4);
960 adja[tau[2]] = 4*MMG5_abs(newtet[k+1])+(nei2 %4);
961 adjan[tau[2]] = nei2;
967 mel = adja[tau[0]] / 4;
968 voy = adja[tau[0]] % 4;
969 adja[tau[0]] = 4*jel + tau[1];
970 adjan[tau[0]] = 4*mel + voy;
971 adjan[tau[1]] = 4*iel + tau[0];
975 adjan[voy] = 4*jel + tau[0];
978 if ( (!metRidTyp) && met->
m && met->
size>1 ) {
1009 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
1013 tau[0] = 0 ; tau[1] = 2 ; tau[2] = 3 ; tau[3] = 1;
1017 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
1021 tau[0] = 1 ; tau[1] = 3 ; tau[2] = 2 ; tau[3] = 0;
1025 tau[0] = 1 ; tau[1] = 0 ; tau[2] = 3 ; tau[3] = 2;
1029 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
1033 tau[0] = 2 ; tau[1] = 0 ; tau[2] = 1 ; tau[3] = 3;
1037 tau[0] = 2 ; tau[1] = 1 ; tau[2] = 3 ; tau[3] = 0;
1041 tau[0] = 2 ; tau[1] = 3 ; tau[2] = 0 ; tau[3] = 1;
1045 tau[0] = 3 ; tau[1] = 0 ; tau[2] = 2 ; tau[3] = 1;
1049 tau[0] = 3 ; tau[1] = 2 ; tau[2] = 1 ; tau[3] = 0;
1053 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
1058 imin = (pt->
v[tau[1]] < pt->
v[tau[2]]) ? tau[1] : tau[2] ;
1078 uint8_t tau[4],imin;
1079 const uint8_t *taued;
1092 pt0->
v[tau[1]] = vx[taued[4]];
1093 pt0->
v[tau[2]] = vx[taued[5]];
1097 if ( imin == tau[1] ) {
1099 pt0->
v[tau[2]] = vx[taued[5]];
1100 pt0->
v[tau[3]] = vx[taued[4]];
1105 pt0->
v[tau[3]] = vx[taued[5]];
1111 pt0->
v[tau[3]] = vx[taued[4]];
1116 pt0->
v[tau[1]] = vx[taued[4]];
1117 pt0->
v[tau[3]] = vx[taued[5]];
1144 for ( i=1; i<ne; ++i ) {
1148 fprintf(stderr,
"\n ## Error: %s: unable to allocate"
1149 " a new element.\n",__func__);
1151 fprintf(stderr,
" Exit program.\n");
1154 for ( j=0; j<i; ++j ) {
1166 for ( i=0; i<ne; ++i ) {
1192 MMG5_int *newtet,
MMG5_pTetra *pt,int8_t metRidTyp) {
1195 if ( (!metRidTyp) && met->
m && met->
size>1 ) {
1196 for (i=0; i<ne; i++) {
1200 else if ( (!met) || (!met->
m) ) {
1202 for (i=0; i<ne; i++) {
1208 for (i=0; i<ne; i++) {
1234 int8_t imin,firstxt,isxt[3];
1236 const uint8_t *taued;
1252 pt[0]->
v[tau[1]] = vx[taued[4]] ; pt[0]->
v[tau[2]] = vx[taued[5]];
1253 xt[0].
tag[taued[0]] = 0; xt[0].
tag[taued[1]] = 0;
1254 xt[0].
tag[taued[3]] = 0; xt[0].
edg[taued[0]] = 0;
1255 xt[0].
edg[taued[1]] = 0; xt[0].
edg[taued[3]] = 0;
1256 xt[0].
ref[ tau[3]] = 0; xt[0].
ftag[ tau[3]] = 0;
MG_SET(xt[0].ori, tau[3]);
1258 if ( imin == tau[1] ) {
1259 pt[1]->
v[tau[2]] = vx[taued[5]]; pt[1]->
v[tau[3]] = vx[taued[4]];
1260 pt[2]->
v[tau[3]] = vx[taued[5]];
1262 xt[1].
tag[taued[1]] = 0; xt[1].
tag[taued[2]] = 0;
1263 xt[1].
tag[taued[3]] = 0; xt[1].
tag[taued[5]] = 0;
1264 xt[1].
edg[taued[1]] = 0; xt[1].
edg[taued[2]] = 0;
1265 xt[1].
edg[taued[3]] = 0; xt[1].
edg[taued[5]] = 0;
1266 xt[1].
ref [ tau[1]] = 0; xt[1].
ref [ tau[3]] = 0;
1267 xt[1].
ftag[ tau[1]] = 0; xt[1].
ftag[ tau[3]] = 0;
1270 xt[2].
tag[taued[2]] = 0; xt[2].
tag[taued[4]] = 0;
1271 xt[2].
edg[taued[2]] = 0; xt[2].
edg[taued[4]] = 0;
1272 xt[2].
ref[ tau[2]] = 0; xt[2].
ftag[ tau[2]] = 0;
MG_SET(xt[2].ori, tau[2]);
1275 pt[1]->
v[tau[3]] = vx[taued[4]];
1276 pt[2]->
v[tau[1]] = vx[taued[4]]; pt[2]->
v[tau[3]] = vx[taued[5]];
1278 xt[1].
tag[taued[2]] = 0; xt[1].
tag[taued[5]] = 0;
1279 xt[1].
edg[taued[2]] = 0; xt[1].
edg[taued[5]] = 0;
1280 xt[1].
ref[ tau[1]] = 0; xt[1].
ftag[ tau[1]] = 0;
MG_SET(xt[1].ori, tau[1]);
1282 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[2]] = 0;
1283 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[4]] = 0;
1284 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[2]] = 0;
1285 xt[2].
edg[taued[3]] = 0; xt[2].
edg[taued[4]] = 0;
1286 xt[2].
ref [ tau[2]] = 0; xt[2].
ref [ tau[3]] = 0;
1287 xt[2].
ftag[ tau[2]] = 0; xt[2].
ftag[ tau[3]] = 0;
1292 isxt[0] = isxt[1] = isxt[2] = 0;
1293 for (i=0; i<4; i++) {
1294 if ( xt[0].ref[i] || xt[0].ftag[i] ) isxt[0] = 1;
1295 if ( xt[1].ref[i] || xt[1].ftag[i] ) isxt[1] = 1;
1296 if ( xt[2].ref[i] || xt[2].ftag[i] ) isxt[2] = 1;
1302 pt[1]->
xt = pt[2]->
xt = 0;
1303 for (i=1; i<3; i++) {
1309 "larger xtetra table",
1311 fprintf(stderr,
" Exit program.\n");
1322 pt[1]->
xt = pt[2]->
xt = 0;
1323 for (i=1; i<3; i++) {
1327 pt[i]->
xt = pt[0]->
xt;
1336 "larger xtetra table",
1338 fprintf(stderr,
" Exit program.\n");
1372 const uint8_t *taued;
1381 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
1385 tau[0] = 3; tau[1] = 1; tau[2] = 0; tau[3] = 2;
1389 tau[0] = 0; tau[1] = 3; tau[2] = 1; tau[3] = 2;
1396 pt0->
v[tau[1]] = vx[taued[0]]; pt0->
v[tau[2]] = vx[taued[5]];
1401 pt0->
v[tau[1]] = vx[taued[0]]; pt0->
v[tau[3]] = vx[taued[5]];
1406 pt0->
v[tau[0]] = vx[taued[0]]; pt0->
v[tau[2]] = vx[taued[5]];
1411 pt0->
v[tau[0]] = vx[taued[0]]; pt0->
v[tau[3]] = vx[taued[5]];
1436 int8_t flg,firstxt,isxt[4];
1438 const uint8_t *taued;
1452 tau[0] = 0; tau[1] = 1; tau[2] = 2; tau[3] = 3;
1456 tau[0] = 3; tau[1] = 1; tau[2] = 0; tau[3] = 2;
1460 tau[0] = 0; tau[1] = 3; tau[2] = 1; tau[3] = 2;
1466 pt[0]->
v[tau[1]] = vx[taued[0]]; pt[0]->
v[tau[2]] = vx[taued[5]];
1467 pt[1]->
v[tau[1]] = vx[taued[0]]; pt[1]->
v[tau[3]] = vx[taued[5]];
1468 pt[2]->
v[tau[0]] = vx[taued[0]]; pt[2]->
v[tau[2]] = vx[taued[5]];
1469 pt[3]->
v[tau[0]] = vx[taued[0]]; pt[3]->
v[tau[3]] = vx[taued[5]];
1471 xt[0].
tag[taued[1]] = 0; xt[0].
tag[taued[3]] = 0;
1472 xt[0].
tag[taued[4]] = 0; xt[0].
edg[taued[1]] = 0;
1473 xt[0].
edg[taued[3]] = 0; xt[0].
edg[taued[4]] = 0;
1474 xt[0].
ref [ tau[0]] = 0; xt[0].
ref [ tau[3]] = 0;
1475 xt[0].
ftag[ tau[0]] = 0; xt[0].
ftag[ tau[3]] = 0;
1478 xt[1].
tag[taued[2]] = 0; xt[1].
tag[taued[3]] = 0;
1479 xt[1].
tag[taued[4]] = 0; xt[1].
edg[taued[2]] = 0;
1480 xt[1].
edg[taued[3]] = 0; xt[1].
edg[taued[4]] = 0;
1481 xt[1].
ref [ tau[0]] = 0; xt[1].
ref [ tau[2]] = 0;
1482 xt[1].
ftag[ tau[0]] = 0; xt[1].
ftag[ tau[2]] = 0;
1485 xt[2].
tag[taued[1]] = 0; xt[2].
tag[taued[2]] = 0;
1486 xt[2].
tag[taued[3]] = 0; xt[2].
edg[taued[1]] = 0;
1487 xt[2].
edg[taued[2]] = 0; xt[2].
edg[taued[3]] = 0;
1488 xt[2].
ref [ tau[1]] = 0; xt[2].
ref [ tau[3]] = 0;
1489 xt[2].
ftag[ tau[1]] = 0; xt[2].
ftag[ tau[3]] = 0;
1492 xt[3].
tag[taued[1]] = 0; xt[3].
tag[taued[2]] = 0;
1493 xt[3].
tag[taued[4]] = 0; xt[3].
edg[taued[1]] = 0;
1494 xt[3].
edg[taued[2]] = 0; xt[3].
edg[taued[4]] = 0;
1495 xt[3].
ref [ tau[1]] = 0; xt[3].
ref [ tau[2]] = 0;
1496 xt[3].
ftag[ tau[1]] = 0; xt[3].
ftag[ tau[2]] = 0;
1500 memset(isxt,0,4*
sizeof(int8_t));
1501 for (i=0; i<4; i++) {
1503 for (j=0; j<ne; j++) {
1504 if ( xt[j].ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
1511 for (i=1; i<4; i++) {
1517 "larger xtetra table",
1519 fprintf(stderr,
" Exit program.\n");
1533 for (i=1; i<4; i++) {
1537 pt[i]->
xt = pt[0]->
xt;
1546 "larger xtetra table",
1548 fprintf(stderr,
" Exit program.\n");
1575 const uint8_t *taued;
1584 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
1588 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
1592 tau[0] = 3 ; tau[1] = 0 ; tau[2] = 2 ; tau[3] = 1;
1596 tau[0] = 1 ; tau[1] = 3 ; tau[2] = 2 ; tau[3] = 0;
1603 pt0->
v[tau[1]] = vx[taued[0]];
1604 pt0->
v[tau[2]] = vx[taued[1]];
1609 pt0->
v[tau[0]] = vx[taued[0]];
1610 pt0->
v[tau[2]] = vx[taued[3]];
1615 pt0->
v[tau[0]] = vx[taued[1]];
1616 pt0->
v[tau[1]] = vx[taued[3]];
1621 pt0->
v[tau[0]] = vx[taued[0]];
1622 pt0->
v[tau[1]] = vx[taued[3]];
1623 pt0->
v[tau[2]] = vx[taued[1]];
1648 int8_t flg,firstxt,isxt[4];
1650 const uint8_t *taued;
1664 tau[0] = 0; tau[1] = 1; tau[2] = 2; tau[3] = 3;
1668 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
1672 tau[0] = 3 ; tau[1] = 0 ; tau[2] = 2 ; tau[3] = 1;
1676 tau[0] = 1 ; tau[1] = 3 ; tau[2] = 2 ; tau[3] = 0;
1682 pt[0]->
v[tau[1]] = vx[taued[0]]; pt[0]->
v[tau[2]] = vx[taued[1]];
1683 pt[1]->
v[tau[0]] = vx[taued[0]]; pt[1]->
v[tau[2]] = vx[taued[3]];
1684 pt[2]->
v[tau[0]] = vx[taued[1]]; pt[2]->
v[tau[1]] = vx[taued[3]];
1685 pt[3]->
v[tau[0]] = vx[taued[0]]; pt[3]->
v[tau[1]] = vx[taued[3]]; pt[3]->
v[tau[2]] = vx[taued[1]];
1687 xt[0].
tag[taued[3]] = 0; xt[0].
tag[taued[4]] = 0;
1688 xt[0].
tag[taued[5]] = 0; xt[0].
edg[taued[3]] = 0;
1689 xt[0].
edg[taued[4]] = 0; xt[0].
edg[taued[5]] = 0;
1690 xt[0].
ref[ tau[0]] = 0; xt[0].
ftag[ tau[0]] = 0;
MG_SET(xt[0].ori, tau[0]);
1692 xt[1].
tag[taued[1]] = 0; xt[1].
tag[taued[2]] = 0;
1693 xt[1].
tag[taued[5]] = 0; xt[1].
edg[taued[1]] = 0;
1694 xt[1].
edg[taued[2]] = 0; xt[1].
edg[taued[5]] = 0;
1695 xt[1].
ref[ tau[1]] = 0; xt[1].
ftag[ tau[1]] = 0;
MG_SET(xt[1].ori, tau[1]);
1697 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[2]] = 0;
1698 xt[2].
tag[taued[4]] = 0; xt[2].
edg[taued[0]] = 0;
1699 xt[2].
edg[taued[2]] = 0; xt[2].
edg[taued[4]] = 0;
1700 xt[2].
ref[ tau[2]] = 0; xt[2].
ftag[ tau[2]] = 0;
MG_SET(xt[2].ori, tau[2]);
1702 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[1]] = 0;
1703 xt[3].
tag[taued[2]] = 0; xt[3].
tag[taued[3]] = 0;
1704 xt[3].
tag[taued[4]] = 0; xt[3].
tag[taued[5]] = 0;
1705 xt[3].
edg[taued[0]] = 0; xt[3].
edg[taued[1]] = 0;
1706 xt[3].
edg[taued[2]] = 0; xt[3].
edg[taued[3]] = 0;
1707 xt[3].
edg[taued[4]] = 0; xt[3].
edg[taued[5]] = 0;
1708 xt[3].
ref [ tau[0]] = 0; xt[3].
ref [ tau[1]] = 0; xt[3].
ref [tau[2]] = 0;
1709 xt[3].
ftag[ tau[0]] = 0; xt[3].
ftag[ tau[1]] = 0; xt[3].
ftag[tau[2]] = 0;
1713 memset(isxt,0,4*
sizeof(int8_t));
1714 for (i=0; i<4; i++) {
1716 for (j=0; j<ne; j++) {
1717 if ( xt[j].ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
1724 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = 0;
1725 for (i=1; i<4; i++) {
1731 "larger xtetra table",
1733 fprintf(stderr,
" Exit program.\n");
1744 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = 0;
1745 for (i=1; i<4; i++) {
1749 pt[i]->
xt = pt[0]->
xt;
1758 "larger xtetra table",
1760 fprintf(stderr,
" Exit program.\n");
1793 uint8_t tau[4],ia,ib;
1794 const uint8_t *taued;
1803 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
1808 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
1813 tau[0] = 2 ; tau[1] = 0 ; tau[2] = 1 ; tau[3] = 3;
1818 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
1825 if ( pt->
v[tau[1]] < pt->
v[tau[2]] ) {
1834 if ( pt->
v[tau[3]] < pt->
v[ia] ) {
1839 if ( pt->
v[tau[3]] < pt->
v[ib] ) {
1848 pt0->
v[tau[1]] = vx[taued[0]];
1849 pt0->
v[tau[2]] = vx[taued[1]];
1850 pt0->
v[tau[3]] = vx[taued[2]];
1855 if ( ia == tau[3] ) {
1856 pt0->
v[tau[0]] = vx[taued[2]];
1857 pt0->
v[tau[1]] = vx[taued[0]];
1858 pt0->
v[tau[2]] = vx[taued[1]];
1863 if ( ib == tau[1] ) {
1864 pt0->
v[tau[0]] = vx[taued[0]];
1865 pt0->
v[tau[2]] = vx[taued[1]];
1870 pt0->
v[tau[0]] = vx[taued[1]] ;
1875 assert(ib == tau[2]);
1876 pt0->
v[tau[0]] = vx[taued[1]];
1877 pt0->
v[tau[1]] = vx[taued[0]];
1882 pt0->
v[tau[0]] = vx[taued[0]] ;
1887 else if (ia == tau[2] ) {
1888 pt0->
v[tau[0]] = vx[taued[1]];
1889 pt0->
v[tau[1]] = vx[taued[0]];
1890 pt0->
v[tau[3]] = vx[taued[2]];
1895 if ( ib == tau[3] ) {
1896 pt0->
v[tau[0]] = vx[taued[2]];
1897 pt0->
v[tau[1]] = vx[taued[0]];
1902 pt0->
v[tau[0]] = vx[taued[0]];
1907 assert(ib == tau[1]);
1908 pt0->
v[tau[0]] = vx[taued[0]];
1909 pt0->
v[tau[3]] = vx[taued[2]];
1914 pt0->
v[tau[0]] = vx[taued[2]];
1920 assert(ia == tau[1]);
1922 pt0->
v[tau[0]] = vx[taued[0]];
1923 pt0->
v[tau[2]] = vx[taued[1]];
1924 pt0->
v[tau[3]] = vx[taued[2]];
1929 if ( ib == tau[2] ) {
1930 pt0->
v[tau[0]] = vx[taued[1]];
1931 pt0->
v[tau[3]] = vx[taued[2]] ;
1936 pt0->
v[tau[0]] = vx[taued[2]] ;
1942 assert(ib == tau[3]);
1944 pt0->
v[tau[0]] = vx[taued[2]];
1945 pt0->
v[tau[2]] = vx[taued[1]];
1950 pt0->
v[tau[0]] = vx[taued[1]];
1977 int8_t flg,firstxt,isxt[4],ia,ib;
1979 const uint8_t *taued;
1993 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
1998 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
2003 tau[0] = 2 ; tau[1] = 0 ; tau[2] = 1 ; tau[3] = 3;
2008 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
2015 if ( (pt[0])->v[tau[1]] < (pt[0])->v[tau[2]] ) {
2024 if ( (pt[0])->v[tau[3]] < (pt[0])->v[ia] ) {
2029 if ( (pt[0])->v[tau[3]] < (pt[0])->v[ib] ) {
2036 pt[0]->
v[tau[1]] = vx[taued[0]] ; pt[0]->
v[tau[2]] = vx[taued[1]] ; pt[0]->
v[tau[3]] = vx[taued[2]];
2037 xt[0].
tag[taued[3]] = 0; xt[0].
tag[taued[4]] = 0;
2038 xt[0].
tag[taued[5]] = 0; xt[0].
edg[taued[3]] = 0;
2039 xt[0].
edg[taued[4]] = 0; xt[0].
edg[taued[5]] = 0;
2040 xt[0].
ref [ tau[0]] = 0;
2041 xt[0].
ftag[ tau[0]] = 0;
2042 MG_SET(xt[0].ori, tau[0]);
2044 if ( ia == tau[3] ) {
2045 pt[1]->
v[tau[0]] = vx[taued[2]] ; pt[1]->
v[tau[1]] = vx[taued[0]] ; pt[1]->
v[tau[2]] = vx[taued[1]];
2046 xt[1].
tag[taued[0]] = 0; xt[1].
tag[taued[1]] = 0;
2047 xt[1].
tag[taued[3]] = 0; xt[1].
tag[taued[4]] = 0;
2048 xt[1].
tag[taued[5]] = 0; xt[1].
edg[taued[0]] = 0;
2049 xt[1].
edg[taued[1]] = 0; xt[1].
edg[taued[3]] = 0;
2050 xt[1].
edg[taued[4]] = 0; xt[1].
edg[taued[5]] = 0;
2051 xt[1].
ref [ tau[0]] = 0; xt[1].
ref [ tau[3]] = 0;
2052 xt[1].
ftag[ tau[0]] = 0; xt[1].
ftag[ tau[3]] = 0;
2055 if ( ib == tau[1] ) {
2056 pt[2]->
v[tau[0]] = vx[taued[0]] ; pt[2]->
v[tau[2]] = vx[taued[1]] ;
2057 xt[2].
tag[taued[1]] = 0; xt[2].
tag[taued[2]] = 0;
2058 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[5]] = 0;
2059 xt[2].
edg[taued[1]] = 0; xt[2].
edg[taued[2]] = 0;
2060 xt[2].
edg[taued[3]] = 0; xt[2].
edg[taued[5]] = 0;
2061 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[1]] = 0;
2062 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[1]] = 0;
2065 pt[3]->
v[tau[0]] = vx[taued[1]] ;
2066 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[2]] = 0;
2067 xt[3].
edg[taued[0]] = 0; xt[3].
edg[taued[2]] = 0;
2068 xt[3].
ref [ tau[2]] = 0;
2069 xt[3].
ftag[ tau[2]] = 0;
2070 MG_SET(xt[3].ori, tau[2]);
2073 assert(ib == tau[2]);
2075 pt[2]->
v[tau[0]] = vx[taued[1]] ; pt[2]->
v[tau[1]] = vx[taued[0]] ;
2076 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[2]] = 0;
2077 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[4]] = 0;
2078 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[2]] = 0;
2079 xt[2].
edg[taued[3]] = 0; xt[2].
edg[taued[4]] = 0;
2080 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[2]] = 0;
2081 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[2]] = 0;
2084 pt[3]->
v[tau[0]] = vx[taued[0]] ;
2085 xt[3].
tag[taued[1]] = 0; xt[3].
tag[taued[2]] = 0;
2086 xt[3].
edg[taued[1]] = 0; xt[3].
edg[taued[2]] = 0;
2087 xt[3].
ref [ tau[1]] = 0;
2088 xt[3].
ftag[ tau[1]] = 0;
2089 MG_SET(xt[3].ori, tau[1]);
2093 else if (ia == tau[2] ) {
2094 pt[1]->
v[tau[0]] = vx[taued[1]] ; pt[1]->
v[tau[1]] = vx[taued[0]] ; pt[1]->
v[tau[3]] = vx[taued[2]];
2095 xt[1].
tag[taued[0]] = 0; xt[1].
tag[taued[2]] = 0;
2096 xt[1].
tag[taued[3]] = 0; xt[1].
tag[taued[4]] = 0;
2097 xt[1].
tag[taued[5]] = 0; xt[1].
edg[taued[0]] = 0;
2098 xt[1].
edg[taued[2]] = 0; xt[1].
edg[taued[3]] = 0;
2099 xt[1].
edg[taued[4]] = 0; xt[1].
edg[taued[5]] = 0;
2100 xt[1].
ref [ tau[0]] = 0; xt[1].
ref [ tau[2]] = 0;
2101 xt[1].
ftag[ tau[0]] = 0; xt[1].
ftag[ tau[2]] = 0;
2104 if ( ib == tau[3] ) {
2105 pt[2]->
v[tau[0]] = vx[taued[2]] ; pt[2]->
v[tau[1]] = vx[taued[0]] ;
2106 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[1]] = 0;
2107 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[4]] = 0;
2108 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[1]] = 0;
2109 xt[2].
edg[taued[3]] = 0; xt[2].
edg[taued[4]] = 0;
2110 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[3]] = 0;
2111 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[3]] = 0;
2114 pt[3]->
v[tau[0]] = vx[taued[0]] ;
2115 xt[3].
tag[taued[1]] = 0; xt[3].
tag[taued[2]] = 0;
2116 xt[3].
edg[taued[1]] = 0; xt[3].
edg[taued[2]] = 0;
2117 xt[3].
ref [ tau[1]] = 0;
2118 xt[3].
ftag[ tau[1]] = 0;
2119 MG_SET(xt[3].ori, tau[1]);
2122 assert(ib == tau[1]);
2124 pt[2]->
v[tau[0]] = vx[taued[0]] ; pt[2]->
v[tau[3]] = vx[taued[2]] ;
2125 xt[2].
tag[taued[1]] = 0; xt[2].
tag[taued[2]] = 0;
2126 xt[2].
tag[taued[4]] = 0; xt[2].
tag[taued[5]] = 0;
2127 xt[2].
edg[taued[1]] = 0; xt[2].
edg[taued[2]] = 0;
2128 xt[2].
edg[taued[4]] = 0; xt[2].
edg[taued[5]] = 0;
2129 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[1]] = 0;
2130 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[1]] = 0;
2133 pt[3]->
v[tau[0]] = vx[taued[2]] ;
2134 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[1]] = 0;
2135 xt[3].
edg[taued[0]] = 0; xt[3].
edg[taued[1]] = 0;
2136 xt[3].
ref [ tau[3]] = 0;
2137 xt[3].
ftag[ tau[3]] = 0;
2138 MG_SET(xt[3].ori, tau[3]);
2142 assert(ia == tau[1]);
2144 pt[1]->
v[tau[0]] = vx[taued[0]] ; pt[1]->
v[tau[2]] = vx[taued[1]] ; pt[1]->
v[tau[3]] = vx[taued[2]];
2145 xt[1].
tag[taued[1]] = 0; xt[1].
tag[taued[2]] = 0;
2146 xt[1].
tag[taued[3]] = 0; xt[1].
tag[taued[4]] = 0;
2147 xt[1].
tag[taued[5]] = 0; xt[1].
edg[taued[1]] = 0;
2148 xt[1].
edg[taued[2]] = 0; xt[1].
edg[taued[3]] = 0;
2149 xt[1].
edg[taued[4]] = 0; xt[1].
edg[taued[5]] = 0;
2150 xt[1].
ref [ tau[0]] = 0; xt[1].
ref [ tau[1]] = 0;
2151 xt[1].
ftag[ tau[0]] = 0; xt[1].
ftag[ tau[1]] = 0;
2154 if ( ib == tau[2] ) {
2155 pt[2]->
v[tau[0]] = vx[taued[1]] ; pt[2]->
v[tau[3]] = vx[taued[2]] ;
2156 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[2]] = 0;
2157 xt[2].
tag[taued[4]] = 0; xt[2].
tag[taued[5]] = 0;
2158 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[2]] = 0;
2159 xt[2].
edg[taued[4]] = 0; xt[2].
edg[taued[5]] = 0;
2160 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[2]] = 0;
2161 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[2]] = 0;
2164 pt[3]->
v[tau[0]] = vx[taued[2]] ;
2165 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[1]] = 0;
2166 xt[3].
edg[taued[0]] = 0; xt[3].
edg[taued[1]] = 0;
2167 xt[3].
ref [ tau[3]] = 0;
2168 xt[3].
ftag[ tau[3]] = 0;
2169 MG_SET(xt[3].ori, tau[3]);
2172 assert(ib == tau[3]);
2174 pt[2]->
v[tau[0]] = vx[taued[2]] ; pt[2]->
v[tau[2]] = vx[taued[1]] ;
2175 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[1]] = 0;
2176 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[5]] = 0;
2177 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[1]] = 0;
2178 xt[2].
edg[taued[3]] = 0; xt[2].
edg[taued[5]] = 0;
2179 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[3]] = 0;
2180 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[3]] = 0;
2183 pt[3]->
v[tau[0]] = vx[taued[1]] ;
2184 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[2]] = 0;
2185 xt[3].
edg[taued[0]] = 0; xt[3].
edg[taued[2]] = 0;
2186 xt[3].
ref [ tau[2]] = 0;
2187 xt[3].
ftag[ tau[2]] = 0;
2188 MG_SET(xt[3].ori, tau[2]);
2193 isxt[0] = isxt[1] = isxt[2] = isxt[3] = 0;
2195 for (i=0; i<4; i++) {
2197 for (j=0; j<ne; j++) {
2198 if ( xt[j].ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
2202 if ( (pt[0])->xt ) {
2205 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = 0;
2206 for (i=1; i<4; i++) {
2212 "larger xtetra table",
2214 fprintf(stderr,
" Exit program.\n");
2225 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = 0;
2226 for ( i=1; i<4; i++) {
2230 pt[i]->
xt = pt[0]->
xt;
2239 "larger xtetra table",
2241 fprintf(stderr,
" Exit program.\n");
2287 const uint8_t **taued,
2288 uint8_t sym[4],uint8_t symed[6],
2289 uint8_t *ip0,uint8_t *ip1,
2290 uint8_t *ip2,uint8_t *ip3,
2291 uint8_t *ie0,uint8_t *ie1,
2292 uint8_t *ie2,uint8_t *ie3,
2293 uint8_t *ie4,uint8_t *ie5,
2294 uint8_t *imin03,uint8_t *imin12) {
2297 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
2300 sym[0] = 0; sym[1] = 1 ; sym[2] = 2 ; sym[3] = 3;
2301 symed[0] = 0 ; symed[1] = 1 ; symed[2] = 2;
2302 symed[3] = 3 ; symed[4] = 4 ; symed[5] = 5;
2306 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
2309 sym[0] = 0; sym[1] = 2 ; sym[2] = 1 ; sym[3] = 3;
2310 symed[0] = 1 ; symed[1] = 0 ; symed[2] = 2;
2311 symed[3] = 3 ; symed[4] = 5 ; symed[5] = 4;
2315 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
2318 sym[0] = 0; sym[1] = 1 ; sym[2] = 2 ; sym[3] = 3;
2319 symed[0] = 0 ; symed[1] = 1 ; symed[2] = 2;
2320 symed[3] = 3 ; symed[4] = 4 ; symed[5] = 5;
2324 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
2327 sym[0] = 0; sym[1] = 2 ; sym[2] = 1 ; sym[3] = 3;
2328 symed[0] = 1 ; symed[1] = 0 ; symed[2] = 2;
2329 symed[3] = 3 ; symed[4] = 5 ; symed[5] = 4;
2333 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
2336 sym[0] = 0; sym[1] = 1 ; sym[2] = 2 ; sym[3] = 3;
2337 symed[0] = 0 ; symed[1] = 1 ; symed[2] = 2;
2338 symed[3] = 3 ; symed[4] = 4 ; symed[5] = 5;
2342 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
2345 sym[0] = 0; sym[1] = 2 ; sym[2] = 1 ; sym[3] = 3;
2346 symed[0] = 1 ; symed[1] = 0 ; symed[2] = 2;
2347 symed[3] = 3 ; symed[4] = 5 ; symed[5] = 4;
2351 tau[0] = 2 ; tau[1] = 0 ; tau[2] = 1 ; tau[3] = 3;
2354 sym[0] = 0; sym[1] = 1 ; sym[2] = 2 ; sym[3] = 3;
2355 symed[0] = 0 ; symed[1] = 1 ; symed[2] = 2;
2356 symed[3] = 3 ; symed[4] = 4 ; symed[5] = 5;
2360 tau[0] = 0 ; tau[1] = 2 ; tau[2] = 3 ; tau[3] = 1;
2363 sym[0] = 0; sym[1] = 2 ; sym[2] = 1 ; sym[3] = 3;
2364 symed[0] = 1 ; symed[1] = 0 ; symed[2] = 2;
2365 symed[3] = 3 ; symed[4] = 5 ; symed[5] = 4;
2369 tau[0] = 3 ; tau[1] = 2 ; tau[2] = 1 ; tau[3] = 0;
2372 sym[0] = 0; sym[1] = 1 ; sym[2] = 2 ; sym[3] = 3;
2373 symed[0] = 0 ; symed[1] = 1 ; symed[2] = 2;
2374 symed[3] = 3 ; symed[4] = 4 ; symed[5] = 5;
2378 tau[0] = 3 ; tau[1] = 2 ; tau[2] = 1 ; tau[3] = 0;
2381 sym[0] = 0; sym[1] = 2 ; sym[2] = 1 ; sym[3] = 3;
2382 symed[0] = 1 ; symed[1] = 0 ; symed[2] = 2;
2383 symed[3] = 3 ; symed[4] = 5 ; symed[5] = 4;
2387 tau[0] = 3 ; tau[1] = 0 ; tau[2] = 2 ; tau[3] = 1;
2390 sym[0] = 0; sym[1] = 1 ; sym[2] = 2 ; sym[3] = 3;
2391 symed[0] = 0 ; symed[1] = 1 ; symed[2] = 2;
2392 symed[3] = 3 ; symed[4] = 4 ; symed[5] = 5;
2396 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
2399 sym[0] = 0; sym[1] = 2 ; sym[2] = 1 ; sym[3] = 3;
2400 symed[0] = 1 ; symed[1] = 0 ; symed[2] = 2;
2401 symed[3] = 3 ; symed[4] = 5 ; symed[5] = 4;
2405 (*ip0) = tau[sym[0]];
2406 (*ip1) = tau[sym[1]];
2407 (*ip2) = tau[sym[2]];
2408 (*ip3) = tau[sym[3]];
2410 (*ie0) = (*taued)[symed[0]];
2411 (*ie1) = (*taued)[symed[1]];
2412 (*ie2) = (*taued)[symed[2]];
2413 (*ie3) = (*taued)[symed[3]];
2414 (*ie4) = (*taued)[symed[4]];
2415 (*ie5) = (*taued)[symed[5]];
2418 assert(vx[(*ie0)] > 0);
2419 assert(vx[(*ie1)] > 0);
2420 assert(vx[(*ie5)] > 0);
2421 assert(vx[(*ie2)] <= 0);
2422 assert(vx[(*ie3)] <= 0);
2423 assert(vx[(*ie4)] <= 0);
2425 (*imin03) = (pt->
v[(*ip0)] < pt->
v[(*ip3)]) ? (*ip0) : (*ip3);
2426 (*imin12) = (pt->
v[(*ip1)] < pt->
v[(*ip2)]) ? (*ip1) : (*ip2);
2445 uint8_t tau[4],sym[4],symed[6],ip0,ip1,ip2,ip3,ie0,ie1,ie2,ie3;
2446 uint8_t ie4,ie5,imin03,imin12;
2447 const uint8_t *taued=NULL;
2456 MMG3D_configSplit3op(pt,vx,tau,&taued,sym,symed,&ip0,&ip1,&ip2,&ip3,
2457 &ie0,&ie1,&ie2,&ie3,&ie4,&ie5,&imin03,&imin12);
2460 if ( (imin12 == ip2) && (imin03 == ip0) ) {
2461 pt0->
v[ip0] = vx[ie1] ; pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip3] = vx[ie5] ;
2466 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip3] = vx[ie5] ;
2471 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip2] = vx[ie5] ;
2476 pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie1] ; pt0->
v[ip3] = vx[ie5] ;
2481 pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie5];
2486 else if ( (imin12 == ip1) && (imin03 == ip0) ) {
2487 pt0->
v[ip0] = vx[ie1] ; pt0->
v[ip3] = vx[ie5] ;
2492 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip2] = vx[ie1] ; pt0->
v[ip3] = vx[ie5];
2497 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip2] = vx[ie5] ;
2502 pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie5];
2507 pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie1]; pt0->
v[ip3] = vx[ie5];
2511 else if ( (imin12 == ip2) && (imin03 == ip3) ) {
2512 pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie1] ;
2517 pt0->
v[ip0] = vx[ie1] ; pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie5];
2522 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip2] = vx[ie5] ;
2527 pt0->
v[ip0] = vx[ie1] ; pt0->
v[ip1] = vx[ie0]; pt0->
v[ip3] = vx[ie5];
2532 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip3] = vx[ie5];
2537 assert((imin12 == ip1) && (imin03 == ip3)) ;
2539 pt0->
v[ip1] = vx[ie0] ; pt0->
v[ip2] = vx[ie1] ;
2544 pt0->
v[ip0] = vx[ie1] ; pt0->
v[ip3] = vx[ie5] ;
2549 pt0->
v[ip0] = vx[ie0] ; pt0->
v[ip2] = vx[ie1] ;
2554 pt0->
v[ip0] = vx[ie1] ; pt0->
v[ip2] = vx[ie5] ;
2580 uint8_t imin12,imin03,tau[4],sym[4],symed[6],ip0,ip1,ip2,ip3,ie0,ie1;
2581 uint8_t ie2,ie3,ie4,ie5,isxt[5],firstxt,i;
2582 const uint8_t *taued=NULL;
2589 MMG3D_configSplit3op(pt[0],vx,tau,&taued,sym,symed,&ip0,&ip1,&ip2,&ip3,
2590 &ie0,&ie1,&ie2,&ie3,&ie4,&ie5,&imin03,&imin12);
2599 if ( !((imin12 == ip1) && (imin03 == ip3)) ) {
2603 fprintf(stderr,
"\n ## Error: %s: unable to allocate"
2604 " a new element.\n",__func__);
2606 fprintf(stderr,
" Exit program.\n");
2614 pt[4] = memcpy(pt[4],pt[0],
sizeof(
MMG5_Tetra));
2627 if ( (imin12 == ip2) && (imin03 == ip0) ) {
2628 pt[0]->
v[ip0] = vx[ie1] ; pt[0]->
v[ip1] = vx[ie0] ; pt[0]->
v[ip3] = vx[ie5] ;
2629 xt[0].
tag[ie0] = 0; xt[0].
tag[ie2] = 0;
2630 xt[0].
tag[ie3] = 0; xt[0].
tag[ie4] = 0;
2631 xt[0].
edg[ie0] = 0; xt[0].
edg[ie2] = 0;
2632 xt[0].
edg[ie3] = 0; xt[0].
edg[ie4] = 0;
2633 xt[0].
ref [ip0] = 0 ; xt[0].
ref [ip2] = 0 ;
2634 xt[0].
ftag[ip0] = 0 ; xt[0].
ftag[ip2] = 0 ;
2637 pt[1]->
v[ip0] = vx[ie0] ; pt[1]->
v[ip3] = vx[ie5] ;
2638 xt[1].
tag[ie1] = 0; xt[1].
tag[ie2] = 0;
2639 xt[1].
tag[ie4] = 0; xt[1].
edg[ie1] = 0;
2640 xt[1].
edg[ie2] = 0; xt[1].
edg[ie4] = 0;
2641 xt[1].
ref [ip1] = 0 ; xt[1] .
ref[ip2] = 0 ;
2642 xt[1].
ftag[ip1] = 0 ; xt[1].
ftag[ip2] = 0 ;
2645 pt[2]->
v[ip0] = vx[ie0] ; pt[2]->
v[ip2] = vx[ie5] ;
2646 xt[2].
tag[ie1] = 0; xt[2].
tag[ie2] = 0;
2647 xt[2].
tag[ie3] = 0; xt[2].
edg[ie2] = 0;
2649 xt[2].
ref [ip1] = 0 ; xt[2].
ref [ip3] = 0 ;
2650 xt[2].
ftag[ip1] = 0 ; xt[2].
ftag[ip3] = 0 ;
2653 pt[3]->
v[ip1] = vx[ie0] ; pt[3]->
v[ip2] = vx[ie1] ; pt[3]->
v[ip3] = vx[ie5] ;
2654 xt[3].
tag[ie2] = 0; xt[3].
tag[ie3] = 0;
2655 xt[3].
tag[ie4] = 0; xt[3].
tag[ie5] = 0;
2656 xt[3].
edg[ie2] = 0; xt[3].
edg[ie3] = 0;
2657 xt[3].
edg[ie4] = 0; xt[3].
edg[ie5] = 0;
2658 xt[3].
ref [ip0] = 0 ; xt[3].
ref [ip2] = 0 ;
2659 xt[3].
ftag[ip0] = 0 ; xt[3].
ftag[ip2] = 0 ;
2662 pt[4]->
v[ip1] = vx[ie0] ; pt[4]->
v[ip2] = vx[ie5];
2663 xt[4].
tag[ie1] = 0; xt[4].
tag[ie3] = 0;
2664 xt[4].
tag[ie4] = 0; xt[4].
edg[ie1] = 0;
2665 xt[4].
edg[ie3] = 0; xt[4].
edg[ie4] = 0;
2666 xt[4].
ref [ip0] = 0 ; xt[4].
ref [ip3] = 0 ;
2667 xt[4].
ftag[ip0] = 0 ; xt[4].
ftag[ip3] = 0 ;
2671 else if ( (imin12 == ip1) && (imin03 == ip0) ) {
2672 pt[0]->
v[ip0] = vx[ie1] ; pt[0]->
v[ip3] = vx[ie5] ;
2673 xt[0].
tag[ie0] = 0; xt[0].
tag[ie2] = 0;
2674 xt[0].
tag[ie4] = 0; xt[0].
edg[ie0] = 0;
2675 xt[0].
edg[ie2] = 0; xt[0].
edg[ie4] = 0;
2676 xt[0].
ref[ip2] = 0 ;
2677 xt[0].
ftag[ip2] = 0 ;
2680 pt[1]->
v[ip0] = vx[ie0] ; pt[1]->
v[ip2] = vx[ie1] ; pt[1]->
v[ip3] = vx[ie5];
2681 xt[1].
tag[ie1] = 0; xt[1].
tag[ie2] = 0;
2682 xt[1].
tag[ie3] = 0; xt[1].
tag[ie4] = 0;
2683 xt[1].
tag[ie5] = 0; xt[1].
edg[ie1] = 0;
2684 xt[1].
edg[ie2] = 0; xt[1].
edg[ie3] = 0;
2685 xt[1].
edg[ie4] = 0; xt[1].
edg[ie5] = 0;
2686 xt[1].
ref [ip0] = 0 ; xt[1].
ref [ip1] = 0 ; xt[1].
ref [ip2] = 0 ;
2687 xt[1].
ftag[ip0] = 0 ; xt[1].
ftag[ip1] = 0 ; xt[1].
ftag[ip2] = 0 ;
2690 pt[2]->
v[ip0] = vx[ie0] ; pt[2]->
v[ip2] = vx[ie5] ;
2691 xt[2].
tag[ie1] = 0; xt[2].
tag[ie2] = 0;
2692 xt[2].
tag[ie3] = 0; xt[2].
edg[ie1] = 0;
2693 xt[2].
edg[ie2] = 0; xt[2].
edg[ie3] = 0;
2694 xt[2].
ref [ip1] = 0 ; xt[2].
ref [ip3] = 0 ;
2695 xt[2].
ftag[ip1] = 0 ; xt[2].
ftag[ip3] = 0 ;
2698 pt[3]->
v[ip1] = vx[ie0] ; pt[3]->
v[ip2] = vx[ie5];
2699 xt[3].
tag[ie1] = 0; xt[3].
tag[ie3] = 0;
2700 xt[3].
tag[ie4] = 0; xt[3].
edg[ie1] = 0;
2701 xt[3].
edg[ie3] = 0; xt[3].
edg[ie4] = 0;
2702 xt[3].
ref [ip0] = 0 ; xt[3].
ref [ip3] = 0 ;
2703 xt[3].
ftag[ip0] = 0 ; xt[3].
ftag[ip3] = 0 ;
2706 pt[4]->
v[ip1] = vx[ie0] ; pt[4]->
v[ip2] = vx[ie1]; pt[4]->
v[ip3] = vx[ie5];
2707 xt[4].
tag[ie2] = 0; xt[4].
tag[ie3] = 0;
2708 xt[4].
tag[ie4] = 0; xt[4].
tag[ie5] = 0;
2709 xt[4].
edg[ie2] = 0; xt[4].
edg[ie3] = 0;
2710 xt[4].
edg[ie4] = 0; xt[4].
edg[ie5] = 0;
2711 xt[4].
ref [ip0] = 0 ; xt[4].
ref [ip2] = 0 ;
2712 xt[4].
ftag[ip0] = 0 ; xt[4].
ftag[ip2] = 0 ;
2716 else if ( (imin12 == ip2) && (imin03 == ip3) ) {
2717 pt[0]->
v[ip1] = vx[ie0] ; pt[0]->
v[ip2] = vx[ie1] ;
2718 xt[0].
tag[ie3] = 0; xt[0].
tag[ie4] = 0;
2719 xt[0].
tag[ie5] = 0; xt[0].
edg[ie3] = 0;
2720 xt[0].
edg[ie4] = 0; xt[0].
edg[ie5] = 0;
2721 xt[0].
ref[ip0] = 0 ;
2722 xt[0].
ftag[ip0] = 0 ;
2725 pt[1]->
v[ip0] = vx[ie1] ; pt[1]->
v[ip1] = vx[ie0] ; pt[1]->
v[ip2] = vx[ie5];
2726 xt[1].
tag[ie0] = 0; xt[1].
tag[ie1] = 0;
2727 xt[1].
tag[ie2] = 0; xt[1].
tag[ie3] = 0;
2728 xt[1].
tag[ie4] = 0; xt[1].
edg[ie0] = 0;
2729 xt[1].
edg[ie1] = 0; xt[1].
edg[ie2] = 0;
2730 xt[1].
edg[ie3] = 0; xt[1].
edg[ie4] = 0;
2731 xt[1].
ref [ip0] = 0 ; xt[1].
ref [ip2] = 0 ; xt[1].
ref [ip3] = 0 ;
2732 xt[1].
ftag[ip0] = 0 ; xt[1].
ftag[ip2] = 0 ; xt[1].
ftag[ip3] = 0 ;
2735 pt[2]->
v[ip0] = vx[ie0] ; pt[2]->
v[ip2] = vx[ie5] ;
2736 xt[2].
tag[ie1] = 0; xt[2].
tag[ie2] = 0;
2737 xt[2].
tag[ie3] = 0; xt[2].
edg[ie1] = 0;
2738 xt[2].
edg[ie2] = 0; xt[2].
edg[ie3] = 0;
2739 xt[2].
ref [ip1] = 0 ; xt[2].
ref [ip3] = 0 ;
2740 xt[2].
ftag[ip1] = 0 ; xt[2].
ftag[ip3] = 0 ;
2743 pt[3]->
v[ip0] = vx[ie1] ; pt[3]->
v[ip1] = vx[ie0]; pt[3]->
v[ip3] = vx[ie5];
2744 xt[3].
tag[ie0] = 0; xt[3].
tag[ie2] = 0;
2745 xt[3].
tag[ie3] = 0; xt[3].
tag[ie4] = 0;
2746 xt[3].
edg[ie0] = 0; xt[3].
edg[ie2] = 0;
2747 xt[3].
edg[ie3] = 0; xt[3].
edg[ie4] = 0;
2748 xt[3].
ref [ip0] = 0 ; xt[3].
ref [ip2] = 0 ;
2749 xt[3].
ftag[ip0] = 0 ; xt[3].
ftag[ip2] = 0 ;
2752 pt[4]->
v[ip0] = vx[ie0] ; pt[4]->
v[ip3] = vx[ie5];
2753 xt[4].
tag[ie1] = 0; xt[4].
tag[ie2] = 0;
2754 xt[4].
tag[ie4] = 0; xt[4].
edg[ie1] = 0;
2755 xt[4].
edg[ie2] = 0; xt[4].
edg[ie4] = 0;
2756 xt[4].
ref [ip1] = 0 ; xt[4].
ref [ip2] = 0 ;
2757 xt[4].
ftag[ip1] = 0 ; xt[4].
ftag[ip2] = 0 ;
2761 assert((imin12 == ip1) && (imin03 == ip3)) ;
2763 pt[0]->
v[ip1] = vx[ie0] ; pt[0]->
v[ip2] = vx[ie1] ;
2764 xt[0].
tag[ie3] = 0; xt[0].
tag[ie4] = 0;
2765 xt[0].
tag[ie5] = 0; xt[0].
edg[ie3] = 0;
2766 xt[0].
edg[ie4] = 0; xt[0].
edg[ie5] = 0;
2767 xt[0].
ref [ip0] = 0 ;
2768 xt[0].
ftag[ip0] = 0 ;
2771 pt[1]->
v[ip0] = vx[ie1] ; pt[1]->
v[ip3] = vx[ie5] ;
2772 xt[1].
tag[ie0] = 0; xt[1].
tag[ie2] = 0;
2773 xt[1].
tag[ie4] = 0; xt[1].
edg[ie0] = 0;
2774 xt[1].
edg[ie2] = 0; xt[1].
edg[ie4] = 0;
2775 xt[1].
ref [ip2] = 0 ;
2776 xt[1].
ftag[ip2] = 0 ;
2779 pt[2]->
v[ip0] = vx[ie0] ; pt[2]->
v[ip2] = vx[ie1] ;
2780 xt[2].
tag[ie1] = 0; xt[2].
tag[ie2] = 0;
2781 xt[2].
tag[ie3] = 0; xt[2].
tag[ie5] = 0;
2782 xt[2].
edg[ie1] = 0; xt[2].
edg[ie2] = 0;
2783 xt[2].
edg[ie3] = 0; xt[2].
edg[ie5] = 0;
2784 xt[2].
ref [ip0] = 0 ; xt[2].
ref [ip1] = 0 ;
2785 xt[2].
ftag[ip0] = 0 ; xt[2].
ftag[ip1] = 0 ;
2788 pt[3]->
v[ip0] = vx[ie1] ; pt[3]->
v[ip2] = vx[ie5] ;
2789 xt[3].
tag[ie0] = 0; xt[3].
tag[ie1] = 0;
2790 xt[3].
tag[ie2] = 0; xt[3].
tag[ie3] = 0;
2791 xt[3].
edg[ie0] = 0; xt[3].
edg[ie1] = 0;
2792 xt[3].
edg[ie2] = 0; xt[3].
edg[ie3] = 0;
2793 xt[3].
ref [ip2] = 0 ; xt[3].
ref [ip3] = 0 ;
2794 xt[3].
ftag[ip2] = 0 ; xt[3].
ftag[ip3] = 0 ;
2799 if ( (imin12 == ip1) && (imin03 == ip3) ) {
2800 isxt[0] = isxt[1] = isxt[2] = isxt[3] = 0;
2802 for (i=0; i<4; i++) {
2804 for (j=0; j<ne; j++) {
2805 if ( xt[j].ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
2812 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = 0;
2814 for (i=1; i<4; i++) {
2820 "larger xtetra table",
2822 fprintf(stderr,
" Exit program.\n");
2833 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = 0;
2835 for (i=1; i<4; i++) {
2839 pt[i]->
xt = pt[0]->
xt;
2848 "larger xtetra table",
2850 fprintf(stderr,
" Exit program.\n");
2865 isxt[0] = isxt[1] = isxt[2] = isxt[3] = isxt[4] = 0;
2867 for (i=0; i<4; i++) {
2869 for (j=0; j<=ne; j++) {
2870 if ( xt[j].ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
2877 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = 0;
2879 for(i=1; i<5; i++) {
2885 "larger xtetra table",
2887 fprintf(stderr,
" Exit program.\n");
2898 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = 0;
2900 for (i=1; i<5; i++) {
2904 pt[i]->
xt = pt[0]->
xt;
2913 "larger xtetra table",
2915 fprintf(stderr,
" Exit program.\n");
2930 if ( (!metRidTyp) && met->
m && met->
size>1 ) {
2935 if ( !((imin12 == ip1) && (imin03 == ip3)) ) {
2944 if ( !((imin12 == ip1) && (imin03 == ip3)) ) {
2970 MMG5_int ib,iadr,*adja,adj1,adj2,adj3,newtet[4],src;
2972 uint8_t isxt[4],firstxt;
2979 o[0] = o[1] = o[2] = 0.0;
2980 for (i=0; i<4; i++) {
2991 cb[0] = 0.25; cb[1] = 0.25; cb[2] = 0.25; cb[3] = 0.25;
3000 fprintf(stderr,
"\n ## Error: %s: unable to allocate"
3001 " a new point\n",__func__);
3007 if ( !metRidTyp && met->
size > 1 )
3010 MMG5_interp4bar(
mesh,met,k,ib,cb);
3020 iadr = 4*(newtet[0]-1)+1;
3029 adja[1] = 4*newtet[1];
3030 adja[2] = 4*newtet[2];
3031 adja[3] = 4*newtet[3];
3033 iadr = 4*(newtet[1]-1)+1;
3035 adja[0] = 4*newtet[0] + 1;
3037 adja[2] = 4*newtet[2] + 1;
3038 adja[3] = 4*newtet[3] + 1;
3040 mesh->
adja[4*(adj1/4-1) + 1+adj1%4] = 4*newtet[1]+1;
3042 iadr = 4*(newtet[2]-1)+1;
3044 adja[0] = 4*newtet[0] + 2;
3045 adja[1] = 4*newtet[1] + 2;
3047 adja[3] = 4*newtet[3] + 2;
3049 mesh->
adja[4*(adj2/4-1) + 1+adj2%4] = 4*newtet[2]+2;
3051 iadr = 4*(newtet[3]-1)+1;
3053 adja[0] = 4*newtet[0] + 3;
3054 adja[1] = 4*newtet[1] + 3;
3055 adja[2] = 4*newtet[2] + 3;
3058 mesh->
adja[4*(adj3/4-1) + 1+adj3%4] = 4*newtet[3]+3;
3062 pt[0]->
v[0] = pt[1]->
v[1] = pt[2]->
v[2] = pt[3]->
v[3] = ib;
3064 xt[0].
tag[0] = 0; xt[0].
edg[0] = 0;
3065 xt[0].
tag[1] = 0; xt[0].
edg[1] = 0;
3066 xt[0].
tag[2] = 0; xt[0].
edg[2] = 0;
3067 xt[0].
ref [1] = 0; xt[0].
ref [2] = 0; xt[0].
ref [3] = 0;
3068 xt[0].
ftag[1] = 0; xt[0].
ftag[2] = 0; xt[0].
ftag[3] = 0;
3071 xt[1].
tag[0] = 0; xt[1].
edg[0] = 0;
3072 xt[1].
tag[3] = 0; xt[1].
edg[3] = 0;
3073 xt[1].
tag[4] = 0; xt[1].
edg[4] = 0;
3074 xt[1].
ref [0] = 0; xt[1].
ref [2] = 0; xt[1].
ref [3] = 0;
3075 xt[1].
ftag[0] = 0; xt[1].
ftag[2] = 0; xt[1].
ftag[3] = 0;
3078 xt[2].
tag[1] = 0; xt[2].
edg[1] = 0;
3079 xt[2].
tag[3] = 0; xt[2].
edg[3] = 0;
3080 xt[2].
tag[5] = 0; xt[2].
edg[5] = 0;
3081 xt[2].
ref [0] = 0; xt[2].
ref [1] = 0; xt[2].
ref [3] = 0;
3082 xt[2].
ftag[0] = 0; xt[2].
ftag[1] = 0; xt[2].
ftag[3] = 0;
3085 xt[3].
tag[2] = 0; xt[3].
edg[2] = 0;
3086 xt[3].
tag[4] = 0; xt[3].
edg[4] = 0;
3087 xt[3].
tag[5] = 0; xt[3].
edg[5] = 0;
3088 xt[3].
ref [0] = 0; xt[3].
ref [1] = 0; xt[3].
ref [2] = 0;
3089 xt[3].
ftag[0] = 0; xt[3].
ftag[1] = 0; xt[3].
ftag[2] = 0;
3093 memset(isxt,0,ne*
sizeof(int8_t));
3094 for (i=0; i<ne; i++) {
3096 for (j=0; j<ne; j++) {
3097 if ( xt[j].ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
3104 for (i=1; i<4; i++) {
3110 "larger xtetra table",
3125 for (i=1; i<4; i++) {
3129 pt[i]->
xt = pt[0]->
xt;
3138 "larger xtetra table",
3175 const uint8_t **taued, uint8_t *imin23,uint8_t *imin12) {
3177 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
3181 tau[0] = 1 ; tau[1] = 3 ; tau[2] = 2 ; tau[3] = 0;
3186 tau[0] = 3 ; tau[1] = 0 ; tau[2] = 2 ; tau[3] = 1;
3191 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
3196 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
3201 tau[0] = 2 ; tau[1] = 3 ; tau[2] = 0 ; tau[3] = 1;
3206 tau[0] = 1 ; tau[1] = 0 ; tau[2] = 3 ; tau[3] = 2;
3211 tau[0] = 0 ; tau[1] = 2 ; tau[2] = 3 ; tau[3] = 1;
3216 tau[0] = 2 ; tau[1] = 1 ; tau[2] = 3 ; tau[3] = 0;
3221 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
3226 tau[0] = 3 ; tau[1] = 2 ; tau[2] = 1 ; tau[3] = 0;
3231 tau[0] = 2 ; tau[1] = 0 ; tau[2] = 1 ; tau[3] = 3;
3236 (*imin23) = (pt->
v[tau[2]] < pt->
v[tau[3]]) ? tau[2] : tau[3];
3237 (*imin12) = (pt->
v[tau[1]] < pt->
v[tau[2]]) ? tau[1] : tau[2];
3255 uint8_t imin23,imin12;
3256 const uint8_t *taued = NULL;
3269 pt0->
v[tau[1]] = vx[taued[0]];
3270 pt0->
v[tau[2]] = vx[taued[1]];
3271 pt0->
v[tau[3]] = vx[taued[2]];
3276 pt0->
v[tau[0]] = vx[taued[2]];
3277 pt0->
v[tau[1]] = vx[taued[0]];
3278 pt0->
v[tau[2]] = vx[taued[1]];
3279 pt0->
v[tau[3]] = vx[taued[4]] ;
3284 if ( imin12 == tau[1] ) {
3285 pt0->
v[tau[0]] = vx[taued[0]];
3286 pt0->
v[tau[2]] = vx[taued[1]];
3287 pt0->
v[tau[3]] = vx[taued[4]];
3292 pt0->
v[tau[0]] = vx[taued[1]];
3293 pt0->
v[tau[3]] = vx[taued[4]];
3298 pt0->
v[tau[0]] = vx[taued[1]];
3299 pt0->
v[tau[1]] = vx[taued[0]];
3300 pt0->
v[tau[3]] = vx[taued[4]] ;
3305 pt0->
v[tau[0]] = vx[taued[0]];
3306 pt0->
v[tau[3]] = vx[taued[4]] ;
3312 if ( imin23 == tau[2] ) {
3313 pt0->
v[tau[0]] = vx[taued[1]];
3314 pt0->
v[tau[1]] = vx[taued[4]];
3315 pt0->
v[tau[3]] = vx[taued[2]];
3320 pt0->
v[tau[0]] = vx[taued[2]];
3321 pt0->
v[tau[1]] = vx[taued[4]];
3326 pt0->
v[tau[0]] = vx[taued[2]];
3327 pt0->
v[tau[1]] = vx[taued[4]];
3328 pt0->
v[tau[2]] = vx[taued[1]];
3333 pt0->
v[tau[0]] = vx[taued[1]];
3334 pt0->
v[tau[1]] = vx[taued[4]];
3359 int8_t firstxt,isxt[6],j,i;
3360 uint8_t tau[4],imin23,imin12;
3361 const uint8_t *taued = NULL;
3377 pt[0]->
v[tau[1]] = vx[taued[0]] ; pt[0]->
v[tau[2]] = vx[taued[1]] ; pt[0]->
v[tau[3]] = vx[taued[2]];
3378 xt[0].
tag[taued[3]] = 0; xt[0].
tag[taued[4]] = 0;
3379 xt[0].
tag[taued[5]] = 0; xt[0].
edg[taued[3]] = 0;
3380 xt[0].
edg[taued[4]] = 0; xt[0].
edg[taued[5]] = 0;
3381 xt[0].
ref [ tau[0]] = 0 ;
3382 xt[0].
ftag[ tau[0]] = 0 ;
3383 MG_SET(xt[0].ori, tau[0]);
3385 pt[1]->
v[tau[0]] = vx[taued[2]] ; pt[1]->
v[tau[1]] = vx[taued[0]] ;
3386 pt[1]->
v[tau[2]] = vx[taued[1]] ; pt[1]->
v[tau[3]] = vx[taued[4]] ;
3387 xt[1].
tag[taued[0]] = 0; xt[1].
tag[taued[1]] = 0;
3388 xt[1].
tag[taued[2]] = 0; xt[1].
tag[taued[3]] = 0;
3389 xt[1].
tag[taued[4]] = 0; xt[1].
tag[taued[5]] = 0;
3390 xt[1].
edg[taued[0]] = 0; xt[1].
edg[taued[1]] = 0;
3391 xt[1].
edg[taued[2]] = 0; xt[1].
edg[taued[3]] = 0;
3392 xt[1].
edg[taued[4]] = 0; xt[1].
edg[taued[5]] = 0;
3393 xt[1].
ref [ tau[0]] = 0 ; xt[1].
ref [ tau[1]] = 0 ; xt[1].
ref [tau[3]] = 0 ;
3394 xt[1].
ftag[ tau[0]] = 0 ; xt[1].
ftag[ tau[1]] = 0 ; xt[1].
ftag[tau[3]] = 0 ;
3397 if ( imin12 == tau[1] ) {
3398 pt[2]->
v[tau[0]] = vx[taued[0]] ; pt[2]->
v[tau[2]] = vx[taued[1]] ; pt[2]->
v[tau[3]] = vx[taued[4]] ;
3399 xt[2].
tag[taued[1]] = 0; xt[2].
tag[taued[2]] = 0;
3400 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[5]] = 0;
3401 xt[2].
edg[taued[1]] = 0; xt[2].
edg[taued[2]] = 0;
3402 xt[2].
edg[taued[3]] = 0; xt[2].
edg[taued[5]] = 0;
3403 xt[2].
ref [ tau[0]] = 0 ; xt[2].
ref [ tau[1]] = 0 ;
3404 xt[2].
ftag[ tau[0]] = 0 ; xt[2].
ftag[ tau[1]] = 0 ;
3407 pt[3]->
v[tau[0]] = vx[taued[1]] ; pt[3]->
v[tau[3]] = vx[taued[4]] ;
3408 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[2]] = 0;
3409 xt[3].
tag[taued[5]] = 0; xt[3].
edg[taued[0]] = 0;
3410 xt[3].
edg[taued[2]] = 0; xt[3].
edg[taued[5]] = 0;
3411 xt[3].
ref [ tau[1]] = 0 ; xt[3].
ref [ tau[2]] = 0 ;
3412 xt[3].
ftag[ tau[1]] = 0 ; xt[3].
ftag[ tau[2]] = 0 ;
3416 pt[2]->
v[tau[0]] = vx[taued[1]] ; pt[2]->
v[tau[1]] = vx[taued[0]] ; pt[2]->
v[tau[3]] = vx[taued[4]] ;
3417 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[2]] = 0;
3418 xt[2].
tag[taued[3]] = 0; xt[2].
tag[taued[4]] = 0;
3419 xt[2].
tag[taued[5]] = 0; xt[2].
edg[taued[0]] = 0;
3420 xt[2].
edg[taued[2]] = 0; xt[2].
edg[taued[3]] = 0;
3421 xt[2].
edg[taued[4]] = 0; xt[2].
edg[taued[5]] = 0;
3422 xt[2].
ref [ tau[0]] = 0 ; xt[2].
ref [ tau[1]] = 0 ; xt[2].
ref [tau[2]] = 0 ;
3423 xt[2].
ftag[ tau[0]] = 0 ; xt[2].
ftag[ tau[1]] = 0 ; xt[2].
ftag[tau[2]] = 0 ;
3426 pt[3]->
v[tau[0]] = vx[taued[0]] ; pt[3]->
v[tau[3]] = vx[taued[4]] ;
3427 xt[3].
tag[taued[1]] = 0; xt[3].
tag[taued[2]] = 0;
3428 xt[3].
tag[taued[5]] = 0; xt[3].
edg[taued[1]] = 0;
3429 xt[3].
edg[taued[2]] = 0; xt[3].
edg[taued[5]] = 0;
3430 xt[3].
ref [ tau[1]] = 0 ;
3431 xt[3].
ftag[ tau[1]] = 0 ;
3432 MG_SET(xt[3].ori, tau[1]);
3435 if ( imin23 == tau[2] ) {
3436 pt[4]->
v[tau[0]] = vx[taued[1]] ; pt[4]->
v[tau[1]] = vx[taued[4]] ; pt[4]->
v[tau[3]] = vx[taued[2]] ;
3437 xt[4].
tag[taued[0]] = 0; xt[4].
tag[taued[2]] = 0;
3438 xt[4].
tag[taued[3]] = 0; xt[4].
tag[taued[4]] = 0;
3439 xt[4].
tag[taued[5]] = 0;
3440 xt[4].
edg[taued[0]] = 0; xt[4].
edg[taued[2]] = 0;
3441 xt[4].
edg[taued[3]] = 0; xt[4].
edg[taued[4]] = 0;
3442 xt[4].
edg[taued[5]] = 0;
3443 xt[4].
ref [ tau[0]] = 0; xt[4].
ref [ tau[2]] = 0 ;
3444 xt[4].
ref [ tau[3]] = 0 ;
3445 xt[4].
ftag[ tau[0]] = 0; xt[4].
ftag[ tau[2]] = 0 ;
3446 xt[4].
ftag[ tau[3]] = 0 ;
3449 pt[5]->
v[tau[0]] = vx[taued[2]] ; pt[5]->
v[tau[1]] = vx[taued[4]] ;
3450 xt[5].
tag[taued[0]] = 0; xt[5].
tag[taued[1]] = 0;
3451 xt[5].
tag[taued[3]] = 0; xt[5].
edg[taued[0]] = 0;
3452 xt[5].
edg[taued[1]] = 0; xt[5].
edg[taued[3]] = 0;
3453 xt[5].
ref [ tau[3]] = 0 ;
3454 xt[5].
ftag[ tau[3]] = 0 ;
3455 MG_SET(xt[5].ori, tau[3]);
3458 pt[4]->
v[tau[0]] = vx[taued[2]] ; pt[4]->
v[tau[1]] = vx[taued[4]] ; pt[4]->
v[tau[2]] = vx[taued[1]] ;
3459 xt[4].
tag[taued[0]] = 0; xt[4].
tag[taued[1]] = 0;
3460 xt[4].
tag[taued[3]] = 0; xt[4].
tag[taued[5]] = 0;
3461 xt[4].
edg[taued[0]] = 0; xt[4].
edg[taued[1]] = 0;
3462 xt[4].
edg[taued[3]] = 0; xt[4].
edg[taued[5]] = 0;
3463 xt[4].
ref [ tau[0]] = 0; xt[4].
ref [ tau[3]] = 0 ;
3464 xt[4].
ftag[ tau[0]] = 0; xt[4].
ftag[ tau[3]] = 0 ;
3467 pt[5]->
v[tau[0]] = vx[taued[1]] ; pt[5]->
v[tau[1]] = vx[taued[4]] ;
3468 xt[5].
tag[taued[0]] = 0; xt[5].
tag[taued[2]] = 0;
3469 xt[5].
tag[taued[3]] = 0; xt[5].
edg[taued[0]] = 0;
3470 xt[5].
edg[taued[2]] = 0; xt[5].
edg[taued[3]] = 0;
3471 xt[5].
ref [ tau[2]] = 0; xt[5].
ref [ tau[3]] = 0 ;
3472 xt[5].
ftag[ tau[2]] = 0; xt[5].
ftag[ tau[3]] = 0 ;
3477 memset(isxt,0,ne*
sizeof(int8_t));
3478 for (i=0; i<4; i++) {
3479 for (j=0; j<ne; j++) {
3480 if ( (xt[j]).ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
3487 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = pt[5]->
xt = 0;
3489 for (i=1; i<6; i++) {
3495 "larger xtetra table",
3497 fprintf(stderr,
" Exit program.\n");
3508 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = pt[5]->
xt = 0;
3510 for (i=1; i<6; i++) {
3514 pt[i]->
xt = pt[0]->
xt;
3523 "larger xtetra table",
3525 fprintf(stderr,
" Exit program.\n");
3559 uint8_t imin01,imin23;
3560 const uint8_t *taued;
3569 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
3574 tau[0] = 1 ; tau[1] = 3 ; tau[2] = 2 ; tau[3] = 0;
3579 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
3584 imin01 = (pt->
v[tau[0]] < pt->
v[tau[1]]) ? tau[0] : tau[1];
3585 imin23 = (pt->
v[tau[2]] < pt->
v[tau[3]]) ? tau[2] : tau[3];
3590 if ( imin01 == tau[0] ) {
3591 pt0->
v[tau[2]] = vx[taued[3]]; pt0->
v[tau[3]] = vx[taued[4]];
3596 pt0->
v[tau[1]] = vx[taued[4]]; pt0->
v[tau[2]] = vx[taued[3]];
3597 pt0->
v[tau[3]] = vx[taued[2]];
3602 pt0->
v[tau[1]] = vx[taued[3]]; pt0->
v[tau[2]] = vx[taued[1]];
3603 pt0->
v[tau[3]] = vx[taued[2]];
3608 pt0->
v[tau[2]] = vx[taued[1]]; pt0->
v[tau[3]] = vx[taued[2]];
3613 pt0->
v[tau[0]] = vx[taued[1]]; pt0->
v[tau[2]] = vx[taued[3]];
3614 pt0->
v[tau[3]] = vx[taued[2]];
3619 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[2]] = vx[taued[3]];
3620 pt0->
v[tau[3]] = vx[taued[4]];
3626 if ( imin23 == tau[2] ) {
3627 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[4]];
3632 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[3]];
3633 pt0->
v[tau[3]] = vx[taued[4]];
3638 pt0->
v[tau[0]] = vx[taued[1]]; pt0->
v[tau[1]] = vx[taued[3]];
3639 pt0->
v[tau[3]] = vx[taued[2]];
3644 pt0->
v[tau[0]] = vx[taued[1]]; pt0->
v[tau[1]] = vx[taued[3]];
3649 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[3]];
3650 pt0->
v[tau[2]] = vx[taued[1]];
3655 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[4]];
3656 pt0->
v[tau[2]] = vx[taued[3]];
3681 int8_t flg,firstxt,isxt[6],i,j,imin01,imin23;
3683 const uint8_t *taued;
3692 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
3697 tau[0] = 1 ; tau[1] = 3 ; tau[2] = 2 ; tau[3] = 0;
3702 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
3707 imin01 = ((pt[0])->v[tau[0]] < (pt[0])->v[tau[1]]) ? tau[0] : tau[1];
3708 imin23 = ((pt[0])->v[tau[2]] < (pt[0])->v[tau[3]]) ? tau[2] : tau[3];
3716 if ( imin01 == tau[0] ) {
3717 pt[0]->
v[tau[2]] = vx[taued[3]] ; pt[0]->
v[tau[3]] = vx[taued[4]];
3718 xt[0].
tag[taued[1]] = 0; xt[0].
tag[taued[5]] = 0;
3719 xt[0].
tag[taued[2]] = 0; xt[0].
edg[taued[1]] = 0;
3720 xt[0].
edg[taued[5]] = 0; xt[0].
edg[taued[2]] = 0;
3721 xt[0].
ref [ tau[1]] = 0;
3722 xt[0].
ftag[ tau[1]] = 0;
3723 MG_SET(xt[0].ori, tau[1]);
3725 pt[1]->
v[tau[1]] = vx[taued[4]] ; pt[1]->
v[tau[2]] = vx[taued[3]] ; pt[1]->
v[tau[3]] = vx[taued[2]];
3726 xt[1].
tag[taued[0]] = 0; xt[1].
tag[taued[1]] = 0;
3727 xt[1].
tag[taued[3]] = 0; xt[1].
tag[taued[4]] = 0;
3728 xt[1].
tag[taued[5]] = 0; xt[1].
edg[taued[0]] = 0;
3729 xt[1].
edg[taued[1]] = 0; xt[1].
edg[taued[3]] = 0;
3730 xt[1].
edg[taued[4]] = 0; xt[1].
edg[taued[5]] = 0;
3731 xt[1].
ref [ tau[0]] = 0; xt[1].
ref [ tau[1]] = 0; xt[1].
ref [tau[3]] = 0;
3732 xt[1].
ftag[ tau[0]] = 0; xt[1].
ftag[ tau[1]] = 0; xt[1].
ftag[tau[3]] = 0;
3735 pt[2]->
v[tau[1]] = vx[taued[3]] ; pt[2]->
v[tau[2]] = vx[taued[1]] ; pt[2]->
v[tau[3]] = vx[taued[2]];
3736 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[3]] = 0;
3737 xt[2].
tag[taued[4]] = 0; xt[2].
tag[taued[5]] = 0;
3738 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[3]] = 0;
3739 xt[2].
edg[taued[4]] = 0; xt[2].
edg[taued[5]] = 0;
3740 xt[2].
ref [ tau[0]] = 0; xt[2].
ref [ tau[2]] = 0;
3741 xt[2].
ftag[ tau[0]] = 0; xt[2].
ftag[ tau[2]] = 0;
3745 pt[0]->
v[tau[2]] = vx[taued[1]] ; pt[0]->
v[tau[3]] = vx[taued[2]];
3746 xt[0].
tag[taued[3]] = 0; xt[0].
tag[taued[4]] = 0;
3747 xt[0].
tag[taued[5]] = 0; xt[0].
edg[taued[3]] = 0;
3748 xt[0].
edg[taued[4]] = 0; xt[0].
edg[taued[5]] = 0;
3749 xt[0].
ref [ tau[0]] = 0;
3750 xt[0].
ftag[ tau[0]] = 0;
3751 MG_SET(xt[0].ori, tau[0]);
3753 pt[1]->
v[tau[0]] = vx[taued[1]] ; pt[1]->
v[tau[2]] = vx[taued[3]] ; pt[1]->
v[tau[3]] = vx[taued[2]];
3754 xt[1].
tag[taued[0]] = 0; xt[1].
tag[taued[1]] = 0;
3755 xt[1].
tag[taued[2]] = 0; xt[1].
tag[taued[4]] = 0;
3756 xt[1].
tag[taued[5]] = 0; xt[1].
edg[taued[0]] = 0;
3757 xt[1].
edg[taued[1]] = 0; xt[1].
edg[taued[2]] = 0;
3758 xt[1].
edg[taued[4]] = 0; xt[1].
edg[taued[5]] = 0;
3759 xt[1].
ref [ tau[0]] = 0; xt[1].
ref [ tau[1]] = 0; xt[1].
ref [tau[2]] = 0;
3760 xt[1].
ftag[ tau[0]] = 0; xt[1].
ftag[ tau[1]] = 0; xt[1].
ftag[tau[2]] = 0;
3763 pt[2]->
v[tau[0]] = vx[taued[2]] ; pt[2]->
v[tau[2]] = vx[taued[3]] ; pt[2]->
v[tau[3]] = vx[taued[4]];
3764 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[1]] = 0;
3765 xt[2].
tag[taued[2]] = 0; xt[2].
tag[taued[5]] = 0;
3766 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[1]] = 0;
3767 xt[2].
edg[taued[2]] = 0; xt[2].
edg[taued[5]] = 0;
3768 xt[2].
ref [ tau[1]] = 0; xt[2].
ref [ tau[3]] = 0;
3769 xt[2].
ftag[ tau[1]] = 0; xt[2].
ftag[ tau[3]] = 0;
3773 if ( imin23 == tau[2] ) {
3774 pt[3]->
v[tau[0]] = vx[taued[2]] ; pt[3]->
v[tau[1]] = vx[taued[4]];
3775 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[1]] = 0;
3776 xt[3].
tag[taued[3]] = 0; xt[3].
edg[taued[0]] = 0;
3777 xt[3].
edg[taued[1]] = 0; xt[3].
edg[taued[3]] = 0;
3778 xt[3].
ref [ tau[3]] = 0;
3779 xt[3].
ftag[ tau[3]] = 0;
3780 MG_SET(xt[3].ori, tau[3]);
3782 pt[4]->
v[tau[0]] = vx[taued[2]] ; pt[4]->
v[tau[1]] = vx[taued[3]] ; pt[4]->
v[tau[3]] = vx[taued[4]];
3783 xt[4].
tag[taued[0]] = 0; xt[4].
tag[taued[1]] = 0;
3784 xt[4].
tag[taued[2]] = 0; xt[4].
tag[taued[4]] = 0;
3785 xt[4].
tag[taued[5]] = 0; xt[4].
edg[taued[0]] = 0;
3786 xt[4].
edg[taued[1]] = 0; xt[4].
edg[taued[2]] = 0;
3787 xt[4].
edg[taued[4]] = 0; xt[4].
edg[taued[5]] = 0;
3788 xt[4].
ref [ tau[1]] = 0; xt[4].
ref [ tau[2]] = 0; xt[4].
ref [tau[3]] = 0;
3789 xt[4].
ftag[ tau[1]] = 0; xt[4].
ftag[ tau[2]] = 0; xt[4].
ftag[tau[3]] = 0;
3792 pt[5]->
v[tau[0]] = vx[taued[1]] ; pt[5]->
v[tau[1]] = vx[taued[3]] ; pt[5]->
v[tau[3]] = vx[taued[2]];
3793 xt[5].
tag[taued[0]] = 0; xt[5].
tag[taued[2]] = 0;
3794 xt[5].
tag[taued[4]] = 0; xt[5].
tag[taued[5]] = 0;
3795 xt[5].
edg[taued[0]] = 0; xt[5].
edg[taued[2]] = 0;
3796 xt[5].
edg[taued[4]] = 0; xt[5].
edg[taued[5]] = 0;
3797 xt[5].
ref [ tau[0]] = 0; xt[5].
ref [ tau[2]] = 0;
3798 xt[5].
ftag[ tau[0]] = 0; xt[5].
ftag[ tau[2]] = 0;
3802 pt[3]->
v[tau[0]] = vx[taued[1]] ; pt[3]->
v[tau[1]] = vx[taued[3]];
3803 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[2]] = 0;
3804 xt[3].
tag[taued[4]] = 0; xt[3].
edg[taued[0]] = 0;
3805 xt[3].
edg[taued[2]] = 0; xt[3].
edg[taued[4]] = 0;
3806 xt[3].
ref [ tau[2]] = 0;
3807 xt[3].
ftag[ tau[2]] = 0;
3808 MG_SET(xt[3].ori, tau[2]);
3810 pt[4]->
v[tau[0]] = vx[taued[2]] ; pt[4]->
v[tau[1]] = vx[taued[3]] ; pt[4]->
v[tau[2]] = vx[taued[1]];
3811 xt[4].
tag[taued[0]] = 0; xt[4].
tag[taued[1]] = 0;
3812 xt[4].
tag[taued[3]] = 0; xt[4].
tag[taued[4]] = 0;
3813 xt[4].
tag[taued[5]] = 0; xt[4].
edg[taued[0]] = 0;
3814 xt[4].
edg[taued[1]] = 0; xt[4].
edg[taued[3]] = 0;
3815 xt[4].
edg[taued[4]] = 0; xt[4].
edg[taued[5]] = 0;
3816 xt[4].
ref [ tau[0]] = 0; xt[4].
ref [ tau[2]] = 0; xt[4].
ref [tau[3]] = 0;
3817 xt[4].
ftag[ tau[0]] = 0; xt[4].
ftag[ tau[2]] = 0; xt[4].
ftag[tau[3]] = 0;
3820 pt[5]->
v[tau[0]] = vx[taued[2]] ; pt[5]->
v[tau[1]] = vx[taued[4]] ; pt[5]->
v[tau[2]] = vx[taued[3]];
3821 xt[5].
tag[taued[0]] = 0; xt[5].
tag[taued[1]] = 0;
3822 xt[5].
tag[taued[3]] = 0; xt[5].
tag[taued[5]] = 0;
3823 xt[5].
edg[taued[0]] = 0; xt[5].
edg[taued[1]] = 0;
3824 xt[5].
edg[taued[3]] = 0; xt[5].
edg[taued[5]] = 0;
3825 xt[5].
ref [ tau[1]] = 0; xt[5].
ref [ tau[3]] = 0;
3826 xt[5].
ftag[ tau[1]] = 0; xt[5].
ftag[ tau[3]] = 0;
3831 memset(isxt,0,ne*
sizeof(int8_t));
3833 for (i=0; i<4; i++) {
3834 for(j=0;j<ne;j++ ) {
3835 if ( (xt[j]).ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
3843 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = pt[5]->
xt = 0;
3845 for (i=1; i<6; i++) {
3851 "larger xtetra table",
3853 fprintf(stderr,
" Exit program.\n");
3864 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = pt[5]->
xt = 0;
3866 for (i=1; i<6; i++) {
3870 pt[i]->
xt = pt[0]->
xt;
3879 "larger xtetra table",
3881 fprintf(stderr,
" Exit program.\n");
3914 const uint8_t **taued,uint8_t *imin) {
3917 tau[0] = 0 ; tau[1] = 1 ; tau[2] = 2 ; tau[3] = 3;
3922 tau[0] = 2 ; tau[1] = 0 ; tau[2] = 1 ; tau[3] = 3;
3927 tau[0] = 0 ; tau[1] = 3 ; tau[2] = 1 ; tau[3] = 2;
3932 tau[0] = 1 ; tau[1] = 2 ; tau[2] = 0 ; tau[3] = 3;
3937 tau[0] = 3 ; tau[1] = 1 ; tau[2] = 0 ; tau[3] = 2;
3942 tau[0] = 3 ; tau[1] = 2 ; tau[2] = 1 ; tau[3] = 0;
3948 (*imin) = (pt->
v[tau[0]] < pt->
v[tau[1]]) ? tau[0] : tau[1];
3967 const uint8_t *taued=NULL;
3980 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[4]];
3981 pt0->
v[tau[2]] = vx[taued[5]];
3986 pt0->
v[tau[0]] = vx[taued[1]]; pt0->
v[tau[1]] = vx[taued[3]];
3987 pt0->
v[tau[3]] = vx[taued[5]];
3992 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[4]];
3997 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[1]] = vx[taued[3]];
3998 pt0->
v[tau[2]] = vx[taued[1]]; pt0->
v[tau[3]] = vx[taued[5]];
4003 if ( imin == tau[0] ) {
4004 pt0->
v[tau[2]] = vx[taued[3]]; pt0->
v[tau[3]] = vx[taued[4]];
4009 pt0->
v[tau[1]] = vx[taued[4]]; pt0->
v[tau[2]] = vx[taued[3]];
4010 pt0->
v[tau[3]] = vx[taued[2]];
4015 pt0->
v[tau[1]] = vx[taued[3]]; pt0->
v[tau[2]] = vx[taued[1]];
4016 pt0->
v[tau[3]] = vx[taued[2]];
4021 pt0->
v[tau[2]] = vx[taued[1]]; pt0->
v[tau[3]] = vx[taued[2]];
4026 pt0->
v[tau[0]] = vx[taued[2]]; pt0->
v[tau[2]] = vx[taued[3]];
4027 pt0->
v[tau[3]] = vx[taued[4]];
4032 pt0->
v[tau[0]] = vx[taued[1]]; pt0->
v[tau[2]] = vx[taued[3]];
4033 pt0->
v[tau[3]] = vx[taued[2]];
4059 int8_t firstxt,isxt[7];
4060 uint8_t tau[4],imin;
4061 const uint8_t *taued=NULL;
4077 pt[0]->
v[tau[0]] = vx[taued[2]] ; pt[0]->
v[tau[1]] = vx[taued[4]] ; pt[0]->
v[tau[2]] = vx[taued[5]];
4078 xt[0].
tag[taued[0]] = 0; xt[0].
tag[taued[1]] = 0;
4079 xt[0].
tag[taued[3]] = 0; xt[0].
edg[taued[0]] = 0;
4080 xt[0].
edg[taued[1]] = 0; xt[0].
edg[taued[3]] = 0;
4081 xt[0].
ref [ tau[3]] = 0;
4082 xt[0].
ftag[ tau[3]] = 0;
4083 MG_SET(xt[0].ori, tau[3]);
4085 pt[1]->
v[tau[0]] = vx[taued[1]] ; pt[1]->
v[tau[1]] = vx[taued[3]] ; pt[1]->
v[tau[3]] = vx[taued[5]];
4086 xt[1].
tag[taued[0]] = 0; xt[1].
tag[taued[2]] = 0;
4087 xt[1].
tag[taued[4]] = 0; xt[1].
edg[taued[0]] = 0;
4088 xt[1].
edg[taued[2]] = 0; xt[1].
edg[taued[4]] = 0;
4089 xt[1].
ref [ tau[2]] = 0;
4090 xt[1].
ftag[ tau[2]] = 0;
4091 MG_SET(xt[1].ori, tau[2]);
4093 pt[2]->
v[tau[0]] = vx[taued[2]] ; pt[2]->
v[tau[1]] = vx[taued[4]];
4094 pt[2]->
v[tau[2]] = vx[taued[3]] ; pt[2]->
v[tau[3]] = vx[taued[5]];
4095 xt[2].
tag[taued[0]] = 0; xt[2].
tag[taued[1]] = 0;
4096 xt[2].
tag[taued[2]] = 0; xt[2].
tag[taued[3]] = 0;
4097 xt[2].
tag[taued[4]] = 0; xt[2].
tag[taued[5]] = 0;
4098 xt[2].
edg[taued[0]] = 0; xt[2].
edg[taued[1]] = 0;
4099 xt[2].
edg[taued[2]] = 0; xt[2].
edg[taued[3]] = 0;
4100 xt[2].
edg[taued[4]] = 0; xt[2].
edg[taued[5]] = 0;
4101 xt[2].
ref [tau[1]] = 0 ; xt[2].
ref [ tau[2]] = 0; xt[2].
ref [tau[3]] = 0 ;
4102 xt[2].
ftag[tau[1]] = 0 ; xt[2].
ftag[ tau[2]] = 0; xt[2].
ftag[tau[3]] = 0 ;
4105 pt[3]->
v[tau[0]] = vx[taued[2]] ; pt[3]->
v[tau[1]] = vx[taued[3]];
4106 pt[3]->
v[tau[2]] = vx[taued[1]] ; pt[3]->
v[tau[3]] = vx[taued[5]];
4107 xt[3].
tag[taued[0]] = 0; xt[3].
tag[taued[1]] = 0;
4108 xt[3].
tag[taued[2]] = 0; xt[3].
tag[taued[3]] = 0;
4109 xt[3].
tag[taued[4]] = 0; xt[3].
tag[taued[5]] = 0;
4110 xt[3].
edg[taued[0]] = 0; xt[3].
edg[taued[1]] = 0;
4111 xt[3].
edg[taued[2]] = 0; xt[3].
edg[taued[3]] = 0;
4112 xt[3].
edg[taued[4]] = 0; xt[3].
edg[taued[5]] = 0;
4113 xt[3].
ref [ tau[0]] = 0; xt[3].
ref [ tau[2]] = 0; xt[3].
ref [tau[3]] = 0 ;
4114 xt[3].
ftag[ tau[0]] = 0; xt[3].
ftag[ tau[2]] = 0; xt[3].
ftag[tau[3]] = 0 ;
4117 if ( imin == tau[0] ) {
4118 pt[4]->
v[tau[2]] = vx[taued[3]] ; pt[4]->
v[tau[3]] = vx[taued[4]];
4119 xt[4].
tag[taued[1]] = 0; xt[4].
tag[taued[2]] = 0;
4120 xt[4].
tag[taued[5]] = 0; xt[4].
edg[taued[1]] = 0;
4121 xt[4].
edg[taued[2]] = 0; xt[4].
edg[taued[5]] = 0;
4122 xt[4].
ref [ tau[1]] = 0;
4123 xt[4].
ftag[ tau[1]] = 0;
4124 MG_SET(xt[4].ori, tau[1]);
4126 pt[5]->
v[tau[1]] = vx[taued[4]] ; pt[5]->
v[tau[2]] = vx[taued[3]]; pt[5]->
v[tau[3]] = vx[taued[2]];
4127 xt[5].
tag[taued[0]] = 0;
4128 xt[5].
tag[taued[1]] = 0; xt[5].
tag[taued[3]] = 0;
4129 xt[5].
tag[taued[4]] = 0; xt[5].
tag[taued[5]] = 0;
4130 xt[5].
edg[taued[0]] = 0;
4131 xt[5].
edg[taued[1]] = 0; xt[5].
edg[taued[3]] = 0;
4132 xt[5].
edg[taued[4]] = 0; xt[5].
edg[taued[5]] = 0;
4133 xt[5].
ref [ tau[0]] = 0; xt[5].
ref [ tau[1]] = 0; xt[5].
ref [tau[3]] = 0 ;
4134 xt[5].
ftag[ tau[0]] = 0; xt[5].
ftag[ tau[1]] = 0; xt[5].
ftag[tau[3]] = 0 ;
4137 pt[6]->
v[tau[1]] = vx[taued[3]] ; pt[6]->
v[tau[2]] = vx[taued[1]]; pt[6]->
v[tau[3]] = vx[taued[2]];
4138 xt[6].
tag[taued[0]] = 0;
4139 xt[6].
tag[taued[3]] = 0; xt[6].
tag[taued[4]] = 0;
4140 xt[6].
tag[taued[5]] = 0; xt[6].
edg[taued[0]] = 0;
4141 xt[6].
edg[taued[3]] = 0;
4142 xt[6].
edg[taued[4]] = 0; xt[6].
edg[taued[5]] = 0;
4143 xt[6].
ref [ tau[0]] = 0; xt[6].
ref [ tau[2]] = 0;
4144 xt[6].
ftag[ tau[0]] = 0; xt[6].
ftag[ tau[2]] = 0;
4149 pt[4]->
v[tau[2]] = vx[taued[1]] ; pt[4]->
v[tau[3]] = vx[taued[2]];
4150 xt[4].
tag[taued[3]] = 0; xt[4].
tag[taued[4]] = 0;
4151 xt[4].
tag[taued[5]] = 0; xt[4].
edg[taued[3]] = 0;
4152 xt[4].
edg[taued[4]] = 0; xt[4].
edg[taued[5]] = 0;
4153 xt[4].
ref [ tau[0]] = 0;
4154 xt[4].
ftag[ tau[0]] = 0;
4155 MG_SET(xt[4].ori, tau[0]);
4157 pt[5]->
v[tau[0]] = vx[taued[2]] ; pt[5]->
v[tau[2]] = vx[taued[3]]; pt[5]->
v[tau[3]] = vx[taued[4]];
4158 xt[5].
tag[taued[0]] = 0; xt[5].
tag[taued[1]] = 0;
4159 xt[5].
tag[taued[2]] = 0; xt[5].
tag[taued[5]] = 0;
4160 xt[5].
edg[taued[0]] = 0; xt[5].
edg[taued[1]] = 0;
4161 xt[5].
edg[taued[2]] = 0; xt[5].
edg[taued[5]] = 0;
4162 xt[5].
ref [ tau[1]] = 0; xt[5].
ref [ tau[3]] = 0;
4163 xt[5].
ftag[ tau[1]] = 0; xt[5].
ftag[ tau[3]] = 0;
4166 pt[6]->
v[tau[0]] = vx[taued[1]] ; pt[6]->
v[tau[2]] = vx[taued[3]]; pt[6]->
v[tau[3]] = vx[taued[2]];
4167 xt[6].
tag[taued[0]] = 0; xt[6].
tag[taued[1]] = 0;
4168 xt[6].
tag[taued[2]] = 0; xt[6].
tag[taued[4]] = 0;
4169 xt[6].
tag[taued[5]] = 0; xt[6].
edg[taued[0]] = 0;
4170 xt[6].
edg[taued[1]] = 0; xt[6].
edg[taued[2]] = 0;
4171 xt[6].
edg[taued[4]] = 0; xt[6].
edg[taued[5]] = 0;
4172 xt[6].
ref [ tau[0]] = 0; xt[6].
ref [ tau[1]] = 0; xt[6].
ref [tau[2]] = 0 ;
4173 xt[6].
ftag[ tau[0]] = 0; xt[6].
ftag[ tau[1]] = 0; xt[6].
ftag[tau[2]] = 0 ;
4178 memset(isxt,0,ne*
sizeof(int8_t));
4180 for (i=0; i<4; i++) {
4181 for (j=0; j<ne; j++) {
4182 if ( (xt[j]).ref[i] || xt[j].ftag[i] ) isxt[j] = 1;
4189 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = pt[5]->
xt = pt[6]->
xt = 0;
4191 for (i=1; i<7; i++) {
4197 "larger xtetra table",
4199 fprintf(stderr,
" Exit program.\n");
4210 pt[1]->
xt = pt[2]->
xt = pt[3]->
xt = pt[4]->
xt = pt[5]->
xt = pt[6]->
xt = 0;
4212 for (i=1; i<7; i++) {
4216 pt[i]->
xt = pt[0]->
xt;
4225 "larger xtetra table",
4227 fprintf(stderr,
" Exit program.\n");
4269 pt0->
v[1] = vx[0]; pt0->
v[2] = vx[1]; pt0->
v[3] = vx[2];
4274 pt0->
v[0] = vx[0]; pt0->
v[2] = vx[3]; pt0->
v[3] = vx[4];
4279 pt0->
v[0] = vx[1]; pt0->
v[1] = vx[3]; pt0->
v[3] = vx[5];
4284 pt0->
v[0] = vx[2]; pt0->
v[1] = vx[4]; pt0->
v[2] = vx[5];
4289 pt0->
v[0] = vx[0]; pt0->
v[1] = vx[3]; pt0->
v[2] = vx[1];
4295 pt0->
v[0] = vx[2]; pt0->
v[1] = vx[0]; pt0->
v[2] = vx[3];
4301 pt0->
v[0] = vx[2]; pt0->
v[1] = vx[3]; pt0->
v[2] = vx[1];
4307 pt0->
v[0] = vx[2]; pt0->
v[1] = vx[3]; pt0->
v[2] = vx[5];
4332 MMG5_int iel,newtet[8],nxt0;
4345 for (i=1; i<ne; i++) {
4349 fprintf(stderr,
"\n ## Error: %s: unable to allocate"
4350 " a new element.\n",__func__);
4352 fprintf(stderr,
" Exit program.\n");
4354 for ( j=0; j<i; j++ )
4358 pt[i] = memcpy(pt[i],pt[0],
sizeof(
MMG5_Tetra));
4363 pt[0]->
v[1] = vx[0] ; pt[0]->
v[2] = vx[1]; pt[0]->
v[3] = vx[2];
4366 xt.
tag[3] = 0; xt.
tag[4] = 0;
4367 xt.
tag[5] = 0; xt.
edg[3] = 0;
4368 xt.
edg[4] = 0; xt.
edg[5] = 0;
4372 if ( (xt.
ref[i]) || xt.
ftag[i] ) isxt0 = 1;
4384 pt[1]->
v[0] = vx[0] ; pt[1]->
v[2] = vx[3]; pt[1]->
v[3] = vx[4];
4388 xt.
tag[1] = 0; xt.
tag[2] = 0;
4389 xt.
tag[5] = 0; xt.
edg[1] = 0;
4390 xt.
edg[2] = 0; xt.
edg[5] = 0;
4395 for (i=0; i<4; i++) {
4396 if ( (xt.
ref[i]) || xt.
ftag[i]) isxt = 1;
4412 "larger xtetra table",
4414 fprintf(stderr,
" Exit program.\n");
4425 pt[2]->
v[0] = vx[1] ; pt[2]->
v[1] = vx[3]; pt[2]->
v[3] = vx[5];
4429 xt.
tag[0] = 0; xt.
tag[2] = 0;
4430 xt.
tag[4] = 0; xt.
edg[0] = 0;
4431 xt.
edg[2] = 0; xt.
edg[4] = 0;
4435 for (i=0; i<4;i++) {
4436 if ( (xt.
ref[i]) || xt.
ftag[i]) isxt = 1;
4452 "larger xtetra table",
4454 fprintf(stderr,
" Exit program.\n");
4465 pt[3]->
v[0] = vx[2] ; pt[3]->
v[1] = vx[4]; pt[3]->
v[2] = vx[5];
4469 xt.
tag[0] = 0; xt.
tag[1] = 0;
4470 xt.
tag[3] = 0; xt.
edg[0] = 0;
4471 xt.
edg[1] = 0; xt.
edg[3] = 0;
4476 for (i=0; i<4; i++) {
4477 if ( (xt.
ref[i]) || xt.
ftag[i]) isxt = 1;
4493 "larger xtetra table",
4495 fprintf(stderr,
" Exit program.\n");
4506 pt[4]->
v[0] = vx[0] ; pt[4]->
v[1] = vx[3]; pt[4]->
v[2] = vx[1] ; pt[4]->
v[3] = vx[2];
4510 xt.
tag[0] = 0; xt.
tag[1] = 0;
4511 xt.
tag[2] = 0; xt.
tag[3] = 0;
4512 xt.
edg[0] = 0; xt.
edg[1] = 0;
4513 xt.
edg[2] = 0; xt.
edg[3] = 0;
4514 xt.
tag[4] = 0; xt.
edg[4] = 0;
4515 xt.
tag[5] = 0; xt.
edg[5] = 0;
4516 xt.
ref [0] = 0 ; xt.
ref [1] = 0 ; xt.
ref [2] = 0;
4522 if ( (xt.
ref[3]) || xt.
ftag[3]) isxt = 1;
4537 "larger xtetra table",
4539 fprintf(stderr,
" Exit program.\n");
4550 pt[5]->
v[0] = vx[2] ; pt[5]->
v[1] = vx[0]; pt[5]->
v[2] = vx[3] ; pt[5]->
v[3] = vx[4];
4554 xt.
tag[0] = 0; xt.
tag[1] = 0;
4555 xt.
tag[2] = 0; xt.
tag[3] = 0;
4556 xt.
tag[4] = 0; xt.
tag[5] = 0;
4557 xt.
edg[0] = 0; xt.
edg[1] = 0;
4558 xt.
edg[2] = 0; xt.
edg[3] = 0;
4559 xt.
edg[4] = 0; xt.
edg[5] = 0;
4560 xt.
ref [0] = 0 ; xt.
ref [1] = 0 ; xt.
ref [3] = 0;
4566 if ( (xt.
ref[2]) || xt.
ftag[2]) isxt = 1;
4581 "larger xtetra table",
4583 fprintf(stderr,
" Exit program.\n");
4594 pt[6]->
v[0] = vx[2] ; pt[6]->
v[1] = vx[3]; pt[6]->
v[2] = vx[1] ; pt[6]->
v[3] = vx[5];
4598 xt.
tag[0] = 0; xt.
edg[0] = 0;
4599 xt.
tag[1] = 0; xt.
tag[2] = 0;
4600 xt.
tag[3] = 0; xt.
tag[4] = 0;
4601 xt.
edg[1] = 0; xt.
edg[2] = 0;
4602 xt.
edg[3] = 0; xt.
edg[4] = 0;
4603 xt.
tag[5] = 0; xt.
edg[5] = 0;
4604 xt.
ref [0] = 0 ; xt.
ref [2] = 0 ; xt.
ref [3] = 0;
4610 if ( (xt.
ref[1]) || xt.
ftag[1]) isxt = 1;
4625 "larger xtetra table",
4627 fprintf(stderr,
" Exit program.\n");
4638 pt[7]->
v[0] = vx[2] ; pt[7]->
v[1] = vx[3]; pt[7]->
v[2] = vx[5] ; pt[7]->
v[3] = vx[4];
4642 xt.
tag[0] = 0; xt.
tag[1] = 0;
4643 xt.
tag[2] = 0; xt.
tag[3] = 0;
4644 xt.
tag[4] = 0; xt.
tag[5] = 0;
4645 xt.
edg[0] = 0; xt.
edg[1] = 0;
4646 xt.
edg[2] = 0; xt.
edg[3] = 0;
4647 xt.
edg[4] = 0; xt.
edg[5] = 0;
4648 xt.
ref [1] = 0 ; xt.
ref [2] = 0 ; xt.
ref [3] = 0;
4654 if ( (xt.
ref[0]) || xt.
ftag[0]) isxt = 1;
4668 "larger xtetra table",
4670 fprintf(stderr,
" Exit program.\n");
4701 int64_t* list,
int ret,
double crit) {
4709 for (l=0; l<lon; l++) {
4712 if(pt1->
qual < critloc) critloc = pt1->
qual;
4717 for (l=0; l<lon; l++) {
4722 memcpy(pt0->
v,pt1->
v,4*
sizeof(MMG5_int));
4725 cal = MMG5_caltet(
mesh,met,pt0);
4726 if ( cal < critloc ) {
4731 memcpy(pt0->
v,pt1->
v,4*
sizeof(MMG5_int));
4734 cal = MMG5_caltet(
mesh,met,pt0);
4735 if ( cal < critloc ) {
4760 MMG5_int src,i0,i1,ip;
4768 if ( (!lon || lon<0) )
4784 tag = pxt->
tag[iar];
4799 o[0] = 0.5*(p0->
c[0] + p1->
c[0]);
4800 o[1] = 0.5*(p0->
c[1] + p1->
c[1]);
4801 o[2] = 0.5*(p0->
c[2] + p1->
c[2]);
4820 fprintf(stderr,
"\n ## Warning: %s:",__func__);
4821 fprintf(stderr,
" unable to allocate a new point in last call"
4822 " of MMG5_adpspl.\n");
4826 ier = MMG5_intmet(
mesh,met,iel,iar,ip,0.5);
4831 else if (
ier < 0 ) {
4838 if (
ier <= 0 ||
ier == 2 )
return 0;
4844 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.