66 l = (cb[0]-ca[0])*(cb[0]-ca[0]) + (cb[1]-ca[1])*(cb[1]-ca[1]) \
67 + (cb[2]-ca[2])*(cb[2]-ca[2]);
70 len = fabs(r) <
MMG5_EPS ? l / h1 : l / (h2-h1) * log1p(r);
93 int ilists,
double hmin,
double hmax,
double hausd) {
99 double ux,uy,uz,det2d,h,isqhmin,isqhmax,ll,lmin,lmax,hnm,s;
100 double *n,*t,r[3][3],lispoi[3*
MMG3D_LMAX+1],intm[3],b0[3],b1[3],c[3],tAA[6],tAb[3],d[3];
101 double kappa[2],vp[2][2];
102 MMG5_int k,na,nb,ntempa,ntempb,iel,ip0;
104 static int8_t mmgWarn0=0,mmgWarn1=0,mmgWarn2=0,mmgWarn3=0;
111 fprintf(stderr,
"\n ## Error: %s: at least 1 wrong point"
112 " qualification : xp ? %" MMG5_PRId
".\n",__func__,p0->
xp);
119 assert ( (!(
MG_CRN & p0->
tag)) &&
"We should not pass here with corner points" );
121 isqhmin = 1.0 / (hmin*hmin);
122 isqhmax = 1.0 / (hmax*hmax);
131 fprintf(stderr,
"\n ## Warning: %s: function MMG5_rotmatrix return 0.\n",
140 iface = lists[0] % 4;
146 for (i=0; i<3; i++) {
155 for (k=1; k<ilists; k++) {
157 iface = lists[k] % 4;
160 for (i=0; i<3; i++) {
170 else if ( ntempa == nb )
172 else if ( ntempb == na )
175 assert(ntempb == nb);
178 ux = p1->
c[0] - p0->
c[0];
179 uy = p1->
c[1] - p0->
c[1];
180 uz = p1->
c[2] - p0->
c[2];
182 lispoi[3*k+1] = r[0][0]*ux + r[0][1]*uy + r[0][2]*uz;
183 lispoi[3*k+2] = r[1][0]*ux + r[1][1]*uy + r[1][2]*uz;
184 lispoi[3*k+3] = r[2][0]*ux + r[2][1]*uy + r[2][2]*uz;
186 ll = lispoi[3*k+1]*lispoi[3*k+1] + lispoi[3*k+2]*lispoi[3*k+2] + lispoi[3*k+3]*lispoi[3*k+3];
196 iface = lists[0] % 4;
199 for (i=0; i<3; i++) {
209 else if ( ntempa == nb )
211 else if ( ntempb == na )
214 assert(ntempb == nb);
218 ux = p1->
c[0] - p0->
c[0];
219 uy = p1->
c[1] - p0->
c[1];
220 uz = p1->
c[2] - p0->
c[2];
222 lispoi[1] = r[0][0]*ux + r[0][1]*uy + r[0][2]*uz;
223 lispoi[2] = r[1][0]*ux + r[1][1]*uy + r[1][2]*uz;
224 lispoi[3] = r[2][0]*ux + r[2][1]*uy + r[2][2]*uz;
226 ll = lispoi[1]*lispoi[1] + lispoi[2]*lispoi[2] + lispoi[3]*lispoi[3];
231 lispoi[3*ilists+1] = lispoi[1];
232 lispoi[3*ilists+2] = lispoi[2];
233 lispoi[3*ilists+3] = lispoi[3];
237 if ( lmax/lmin > 4.0*hmax*hmax/(hmin*hmin) )
return hmax;
240 for (k=0; k<ilists-1; k++) {
241 det2d = lispoi[3*k+1]*lispoi[3*(k+1)+2] - lispoi[3*k+2]*lispoi[3*(k+1)+1];
242 if ( det2d < 0.0 )
return hmax;
244 det2d = lispoi[3*(ilists-1)+1]*lispoi[3*0+2] - lispoi[3*(ilists-1)+2]*lispoi[3*0+1];
245 if ( det2d < 0.0 )
return hmax;
249 memset(intm,0x00,3*
sizeof(
double));
250 memset(tAA,0x00,6*
sizeof(
double));
251 memset(tAb,0x00,3*
sizeof(
double));
253 for (k=0; k<ilists; k++) {
255 iface = lists[k] % 4;
257 assert( 0<=iface && iface<4 &&
"unexpected local face idx");
264 fprintf(stderr,
"\n ## Warning: %s: function MMG5_bezierCP return 0.\n",
270 for (i0=0; i0<3; i0++) {
271 if ( tt.
v[i0] == nump )
break;
275 for (j=0; j<10; j++) {
276 c[0] = b.
b[j][0] - p0->
c[0];
277 c[1] = b.
b[j][1] - p0->
c[1];
278 c[2] = b.
b[j][2] - p0->
c[2];
280 b.
b[j][0] = r[0][0]*c[0] + r[0][1]*c[1] + r[0][2]*c[2];
281 b.
b[j][1] = r[1][0]*c[0] + r[1][1]*c[1] + r[1][2]*c[2];
282 b.
b[j][2] = r[2][0]*c[0] + r[2][1]*c[1] + r[2][2]*c[2];
287 memcpy(b0,&(b.
b[7][0]),3*
sizeof(
double));
288 memcpy(b1,&(b.
b[8][0]),3*
sizeof(
double));
290 else if ( i0 == 1 ) {
291 memcpy(b0,&(b.
b[3][0]),3*
sizeof(
double));
292 memcpy(b1,&(b.
b[4][0]),3*
sizeof(
double));
295 memcpy(b0,&(b.
b[5][0]),3*
sizeof(
double));
296 memcpy(b1,&(b.
b[6][0]),3*
sizeof(
double));
301 c[0] = 3.0*s*(1.0-s)*(1.0-s)*b0[0] + 3.0*s*s*(1.0-s)*b1[0] + s*s*s*lispoi[3*k+1];
302 c[1] = 3.0*s*(1.0-s)*(1.0-s)*b0[1] + 3.0*s*s*(1.0-s)*b1[1] + s*s*s*lispoi[3*k+2];
303 c[2] = 3.0*s*(1.0-s)*(1.0-s)*b0[2] + 3.0*s*s*(1.0-s)*b1[2] + s*s*s*lispoi[3*k+3];
306 tAA[0] += c[0]*c[0]*c[0]*c[0];
307 tAA[1] += c[0]*c[0]*c[1]*c[1];
308 tAA[2] += c[0]*c[0]*c[0]*c[1];
309 tAA[3] += c[1]*c[1]*c[1]*c[1];
310 tAA[4] += c[0]*c[1]*c[1]*c[1];
311 tAA[5] += c[0]*c[0]*c[1]*c[1];
313 tAb[0] += c[0]*c[0]*c[2];
314 tAb[1] += c[1]*c[1]*c[2];
315 tAb[2] += c[0]*c[1]*c[2];
319 c[0] = 3.0*s*(1.0-s)*(1.0-s)*b0[0] + 3.0*s*s*(1.0-s)*b1[0] + s*s*s*lispoi[3*k+1];
320 c[1] = 3.0*s*(1.0-s)*(1.0-s)*b0[1] + 3.0*s*s*(1.0-s)*b1[1] + s*s*s*lispoi[3*k+2];
321 c[2] = 3.0*s*(1.0-s)*(1.0-s)*b0[2] + 3.0*s*s*(1.0-s)*b1[2] + s*s*s*lispoi[3*k+3];
324 tAA[0] += c[0]*c[0]*c[0]*c[0];
325 tAA[1] += c[0]*c[0]*c[1]*c[1];
326 tAA[2] += c[0]*c[0]*c[0]*c[1];
327 tAA[3] += c[1]*c[1]*c[1]*c[1];
328 tAA[4] += c[0]*c[1]*c[1]*c[1];
329 tAA[5] += c[0]*c[0]*c[1]*c[1];
331 tAb[0] += c[0]*c[0]*c[2];
332 tAb[1] += c[1]*c[1]*c[2];
333 tAb[2] += c[0]*c[1]*c[2];
337 c[0] =
A64TH*(b.
b[1][0] + b.
b[2][0] + 3.0*(b.
b[3][0] + b.
b[4][0])) \
338 + 3.0*
A16TH*(b.
b[6][0] + b.
b[7][0] + b.
b[9][0]) +
A32TH*(b.
b[5][0] + b.
b[8][0]);
339 c[1] =
A64TH*(b.
b[1][1] + b.
b[2][1] + 3.0*(b.
b[3][1] + b.
b[4][1])) \
340 + 3.0*
A16TH*(b.
b[6][1] + b.
b[7][1] + b.
b[9][1]) +
A32TH*(b.
b[5][1] + b.
b[8][1]);
341 c[2] =
A64TH*(b.
b[1][2] + b.
b[2][2] + 3.0*(b.
b[3][2] + b.
b[4][2])) \
342 + 3.0*
A16TH*(b.
b[6][2] + b.
b[7][2] + b.
b[9][2]) +
A32TH*(b.
b[5][2] + b.
b[8][2]);
344 d[0] = 0.125*b.
b[1][0] + 0.375*(b.
b[3][0] + b.
b[4][0]) + 0.125*b.
b[2][0];
345 d[1] = 0.125*b.
b[1][1] + 0.375*(b.
b[3][1] + b.
b[4][1]) + 0.125*b.
b[2][1];
346 d[2] = 0.125*b.
b[1][2] + 0.375*(b.
b[3][2] + b.
b[4][2]) + 0.125*b.
b[2][2];
349 c[0] =
A64TH*(b.
b[0][0] + b.
b[2][0] + 3.0*(b.
b[5][0] + b.
b[6][0])) \
350 + 3.0*
A16TH*(b.
b[3][0] + b.
b[8][0] + b.
b[9][0]) +
A32TH*(b.
b[4][0] + b.
b[7][0]);
351 c[1] =
A64TH*(b.
b[0][1] + b.
b[2][1] + 3.0*(b.
b[5][1] + b.
b[6][1])) \
352 + 3.0*
A16TH*(b.
b[3][1] + b.
b[8][1] + b.
b[9][1]) +
A32TH*(b.
b[4][1] + b.
b[7][1]);
353 c[2] =
A64TH*(b.
b[0][2] + b.
b[2][2] + 3.0*(b.
b[5][2] + b.
b[6][2])) \
354 + 3.0*
A16TH*(b.
b[3][2] + b.
b[8][2] + b.
b[9][2]) +
A32TH*(b.
b[4][2] + b.
b[7][2]);
356 d[0] = 0.125*b.
b[2][0] + 0.375*(b.
b[5][0] + b.
b[6][0]) + 0.125*b.
b[0][0];
357 d[1] = 0.125*b.
b[2][1] + 0.375*(b.
b[5][1] + b.
b[6][1]) + 0.125*b.
b[0][1];
358 d[2] = 0.125*b.
b[2][2] + 0.375*(b.
b[5][2] + b.
b[6][2]) + 0.125*b.
b[0][2];
361 c[0] =
A64TH*(b.
b[0][0] + b.
b[1][0] + 3.0*(b.
b[7][0] + b.
b[8][0])) \
362 + 3.0*
A16TH*(b.
b[4][0] + b.
b[5][0] + b.
b[9][0]) +
A32TH*(b.
b[3][0] + b.
b[6][0]);
363 c[1] =
A64TH*(b.
b[0][1] + b.
b[1][1] + 3.0*(b.
b[7][1] + b.
b[8][1])) \
364 + 3.0*
A16TH*(b.
b[4][1] + b.
b[5][1] + b.
b[9][1]) +
A32TH*(b.
b[3][1] + b.
b[6][1]);
365 c[2] =
A64TH*(b.
b[0][2] + b.
b[1][2] + 3.0*(b.
b[7][2] + b.
b[8][2])) \
366 + 3.0*
A16TH*(b.
b[4][2] + b.
b[5][2] + b.
b[9][2]) +
A32TH*(b.
b[3][2] + b.
b[6][2]);
368 d[0] = 0.125*b.
b[0][0] + 0.375*(b.
b[7][0] + b.
b[8][0]) + 0.125*b.
b[1][0];
369 d[1] = 0.125*b.
b[0][1] + 0.375*(b.
b[7][1] + b.
b[8][1]) + 0.125*b.
b[1][1];
370 d[2] = 0.125*b.
b[0][2] + 0.375*(b.
b[7][2] + b.
b[8][2]) + 0.125*b.
b[1][2];
374 tAA[0] += c[0]*c[0]*c[0]*c[0];
375 tAA[1] += c[0]*c[0]*c[1]*c[1];
376 tAA[2] += c[0]*c[0]*c[0]*c[1];
377 tAA[3] += c[1]*c[1]*c[1]*c[1];
378 tAA[4] += c[0]*c[1]*c[1]*c[1];
379 tAA[5] += c[0]*c[0]*c[1]*c[1];
381 tAb[0] += c[0]*c[0]*c[2];
382 tAb[1] += c[1]*c[1]*c[2];
383 tAb[2] += c[0]*c[1]*c[2];
385 tAA[0] += d[0]*d[0]*d[0]*d[0];
386 tAA[1] += d[0]*d[0]*d[1]*d[1];
387 tAA[2] += d[0]*d[0]*d[0]*d[1];
388 tAA[3] += d[1]*d[1]*d[1]*d[1];
389 tAA[4] += d[0]*d[1]*d[1]*d[1];
390 tAA[5] += d[0]*d[0]*d[1]*d[1];
392 tAb[0] += d[0]*d[0]*d[2];
393 tAb[1] += d[1]*d[1]*d[2];
394 tAb[2] += d[0]*d[1]*d[2];
409 fprintf(stderr,
"\n # Warning: %s: function MMG5_eigensym return 0.\n",
416 kappa[0] = 2.0/9.0 * fabs(kappa[0]) / hausd;
417 kappa[0] =
MG_MIN(kappa[0],isqhmin);
418 kappa[0] =
MG_MAX(kappa[0],isqhmax);
420 kappa[1] = 2.0/9.0 * fabs(kappa[1]) / hausd;
421 kappa[1] =
MG_MIN(kappa[1],isqhmin);
422 kappa[1] =
MG_MAX(kappa[1],isqhmax);
424 kappa[0] = 1.0 / sqrt(kappa[0]);
425 kappa[1] = 1.0 / sqrt(kappa[1]);
427 h =
MG_MIN(kappa[0],kappa[1]);
431 for (k=0; k<ilists; k++) {
432 iface = lists[k] % 4;
434 for (j=0; j<3; j++) {
451 memcpy(c,t,3*
sizeof(
double));
453 d[0] = r[0][0]*c[0] + r[0][1]*c[1] + r[0][2]*c[2];
454 d[1] = r[1][0]*c[0] + r[1][1]*c[1] + r[1][2]*c[2];
456 hnm = intm[0]*d[0]*d[0] + 2.0*intm[1]*d[0]*d[1] + intm[2]*d[1]*d[1];
457 hnm = 2.0/9.0 * fabs(hnm) / hausd;
458 hnm =
MG_MIN(hnm,isqhmin);
459 hnm =
MG_MAX(hnm,isqhmax);
460 hnm = 1.0 / sqrt(hnm);
461 met->
m[ip0] =
MG_MIN(met->
m[ip0],hnm);
483 int ilists,
double hmin,
double hmax) {
493 for (k=0; k<ilists; k++) {
495 iface = lists[k] % 4;
498 for (i=0; i<3; i++) {
508 ux = p1->
c[0] - p0->
c[0];
509 uy = p1->
c[1] - p0->
c[1];
510 uz = p1->
c[2] - p0->
c[2];
511 len += sqrt(ux*ux + uy*uy + uz*uz);
568 MMG5_int k,j,ip0,ip1,iad0,iad1;
573 for ( k=1; k<=
mesh->
ne; k++ ) {
575 if ( !
MG_EOK(pt) )
continue;
578 for ( i=0; i<6; i++ ) {
581 iad0 = met->
size*ip0;
582 iad1 = met->
size*ip1;
583 for ( j=0; j<met->
size; ++j ) {
590 if ( !pt->
xt )
continue;
593 for ( i=0; i<6; i++ ) {
598 iad0 = met->
size*ip0;
599 iad1 = met->
size*ip1;
600 for ( j=0; j<met->
size; ++j ) {
614 for ( k=1; k<=
mesh->
ne; k++ ) {
616 if ( !
MG_EOK(pt) )
continue;
619 for ( i=0; i<6; i++ ) {
627 if ( !pt->
xt )
continue;
630 for ( i=0; i<6; i++ ) {
645 if ( !MMG5_compute_meanMetricAtMarkedPoints (
mesh,met ) ) {
667 double hp,v[3],b0[3],b1[3],b0p0[3],b1b0[3],p1b1[3],hausd,hmin,hmax;
668 double secder0[3],secder1[3],kappa,tau[3],gammasec[3],ntau2,intau,ps,lm;
674 int8_t i,j,ia,ised,i0,i1;
681 for (k=1; k<=
mesh->
np; k++) {
717 for (k=1; k<=
mesh->
ne; k++) {
719 if ( !
MG_EOK(pt) )
continue;
721 for (i=0; i<4; i++) {
725 if ( p0->
flag )
continue;
755 for ( kk=0; kk<ilistv; ++kk ) {
757 if ( par->
ref == ptloc->
ref ) {
769 for ( kk=0; kk<ilistv; ++kk ) {
771 if ( par->
ref == ptloc->
ref ) {
787 if ( !
MG_EOK(pp) )
continue;
789 for (i=0; i<6; i++) {
793 if ( p0->
flag )
continue;
803 for (k=1; k<=
mesh->
ne; k++) {
805 if ( !
MG_EOK(pt) )
continue;
807 for (i=0; i<4; i++) {
811 if ( p0->
flag )
continue;
842 for ( kk=0; kk<ilistv; ++kk ) {
844 if ( par->
ref == ptloc->
ref ) {
857 for ( kk=0; kk<ilistv; ++kk ) {
859 if ( par->
ref == ptloc->
ref ) {
876 if ( !
MG_EOK(pp) )
continue;
878 for (i=0; i<6; i++) {
882 if ( p0->
flag )
continue;
891 for (k=1; k<=
mesh->
ne; k++) {
895 else if ( !pt->
xt )
continue;
898 for (i=0; i<4; i++) {
902 for (j=0; j<3; j++) {
907 if ( p0->
flag>1 )
continue;
917 &hausd,&hmin,&hmax) ) {
929 met->
m[ip0] =
MG_MIN(met->
m[ip0],hp);
939 for (k=1; k<=
mesh->
ne; k++) {
943 else if ( !pt->
xt )
continue;
946 for (i=0; i<4; i++) {
950 for (j=0; j<3; j++) {
960 if ( p0->
flag == 3 && p1->
flag == 3 )
continue;
977 b0p0[0] = b0[0] - p0->
c[0];
978 b0p0[1] = b0[1] - p0->
c[1];
979 b0p0[2] = b0[2] - p0->
c[2];
981 b1b0[0] = b1[0] - b0[0];
982 b1b0[1] = b1[1] - b0[1];
983 b1b0[2] = b1[2] - b0[2];
985 p1b1[0] = p1->
c[0] - b1[0];
986 p1b1[1] = p1->
c[1] - b1[1];
987 p1b1[2] = p1->
c[2] - b1[2];
989 secder0[0] = p0->
c[0] + b1[0] - 2.0*b0[0];
990 secder0[1] = p0->
c[1] + b1[1] - 2.0*b0[1];
991 secder0[2] = p0->
c[2] + b1[2] - 2.0*b0[2];
993 secder1[0] = p1->
c[0] + b0[0] - 2.0*b1[0];
994 secder1[1] = p1->
c[1] + b0[1] - 2.0*b1[1];
995 secder1[2] = p1->
c[2] + b0[2] - 2.0*b1[2];
998 for (l=0; l<4; l++) {
1010 ntau2 = tau[0]*tau[0] + tau[1]*tau[1] + tau[2]*tau[2];
1012 intau = 1.0/sqrt(ntau2);
1018 ps = gammasec[0]*tau[0] + gammasec[1]*tau[1] + gammasec[2]*tau[2];
1019 gammasec[0] = gammasec[0]*ntau2 - ps*ntau2*tau[0];
1020 gammasec[1] = gammasec[1]*ntau2 - ps*ntau2*tau[1];
1021 gammasec[2] = gammasec[2]*ntau2 - ps*ntau2*tau[2];
1022 kappa =
MG_MAX(kappa,gammasec[0]*gammasec[0] + gammasec[1]*gammasec[1] + gammasec[2]*gammasec[2] );
1024 kappa = sqrt(kappa);
1028 lm = sqrt(8.0*hausd / kappa);
1055 for ( k=1; k<=
mesh->
np; k++ ) {
1061 for ( k=1; k<=
mesh->
ne; k++ ) {
1063 if ( (!
MG_EOK(pt)) || !pt->
xt ) {
continue; }
1066 for (i=0; i<6; i++) {
1086 double l,hn,ux,uy,uz;
1088 MMG5_int ip0,ip1,k,nu,nup;
1089 int8_t i,j,ia,i0,i1;
1092 fprintf(stdout,
" ** Grading mesh\n");
1096 for (k=1; k<=
mesh->
np; k++) {
1105 for (k=1; k<=
mesh->
ne; k++) {
1109 for (i=0; i<4; i++) {
1110 for (j=0; j<3; j++) {
1121 if ( p0->
s || p1->
s )
continue;
1123 ux = p1->
c[0]-p0->
c[0];
1124 uy = p1->
c[1]-p0->
c[1];
1125 uz = p1->
c[2]-p0->
c[2];
1127 l = ux*ux + uy*uy + uz*uz;
1130 if ( met->
m[ip0] < met->
m[ip1] ) {
1133 if ( met->
m[ip1] > hn ) {
1142 if ( met->
m[ip0] > hn ) {
1153 while( ++it < maxit && nu > 0 );
1156 fprintf(stdout,
" gradation: %7" MMG5_PRId
" updated, %d iter.\n",nup,it);
1171 double hgrad,ll,h0,h1,hn,ux,uy,uz;
1173 MMG5_int ip0,ip1,ipslave,ipmaster,k,nu,nup;
1174 int8_t i,j,ia,i0,i1;
1177 fprintf(stdout,
" ** Grading required points.\n");
1192 for (k=1; k<=
mesh->
ne; k++) {
1198 for (i=0; i<4; i++) {
1199 for (j=0; j<3; j++) {
1208 if ( MMG5_abs ( p0->
s - p1->
s ) < 2 ) {
1212 else if ( p0->
s > p1->
s ) {
1217 assert ( p1->
s > p0->
s );
1222 ux = p1->
c[0]-p0->
c[0];
1223 uy = p1->
c[1]-p0->
c[1];
1224 uz = p1->
c[2]-p0->
c[2];
1226 ll = ux*ux + uy*uy + uz*uz;
1229 h0 = met->
m[ipmaster];
1230 h1 = met->
m[ipslave];
1246 met->
m[ipslave] = hn;
1254 while ( ++it < maxit && nu > 0 );
1257 fprintf(stdout,
" gradation (required): %7" MMG5_PRId
" updated, %d iter.\n",nup,it);
int MMG3D_Set_solSize(MMG5_pMesh mesh, MMG5_pSol sol, int typEntity, MMG5_int np, int typSol)
Initialize a solution field.
int MMG5_BezierEdge(MMG5_pMesh mesh, MMG5_int ip0, MMG5_int ip1, double b0[3], double b1[3], int8_t ised, double v[3])
int MMG5_boulevolp(MMG5_pMesh mesh, MMG5_int start, int ip, int64_t *list)
Given a vertex and a tetrahedron, find all tetrahedra in the ball of this vertex.
int MMG5_boulesurfvolp(MMG5_pMesh mesh, MMG5_int start, int ip, int iface, int64_t *listv, int *ilistv, MMG5_int *lists, int *ilists, int isnm)
int MMG5_eigensym(double m[3], double lambda[2], double vp[2][2])
int MMG5_hashNew(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int hsiz, MMG5_int hmax)
MMG5_int MMG5_hashGet(MMG5_Hash *hash, MMG5_int a, MMG5_int b)
int MMG5_hashEdge(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int a, MMG5_int b, MMG5_int k)
int MMG5_sum_reqEdgeLengthsAtPoint(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int ip0, MMG5_int ip1)
int MMG5_defsiz_startingMessage(MMG5_pMesh mesh, MMG5_pSol met, const char *funcname)
double MMG5_lenedgCoor_iso(double *ca, double *cb, double *ma, double *mb)
Compute edge length from edge's coordinates.
double MMG5_meansizreg_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int nump, MMG5_int *lists, int ilists, double hmin, double hmax)
int MMG3D_set_metricAtPointsOnReqEdges(MMG5_pMesh mesh, MMG5_pSol met, int8_t ismet)
void MMG3D_mark_pointsOnReqEdge_fromTetra(MMG5_pMesh mesh)
static int MMG3D_sum_reqEdgeLengthsAtPoint(MMG5_pMesh mesh, MMG5_pSol met, MMG5_Hash *hash, MMG5_pTetra pt, int8_t i)
int MMG3D_gradsizreq_iso(MMG5_pMesh mesh, MMG5_pSol met)
int MMG3D_gradsiz_iso(MMG5_pMesh mesh, MMG5_pSol met)
int MMG3D_defsiz_iso(MMG5_pMesh mesh, MMG5_pSol met)
static double MMG5_defsizreg(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int nump, MMG5_int *lists, int ilists, double hmin, double hmax, double hausd)
API headers and documentation for the mmg3d library, for volumetric meshes in 3D.
int MMG3D_localParamReg(MMG5_pMesh, MMG5_int, int64_t *, int, MMG5_int *, int, double *, double *, double *)
int MMG3D_localParamNm(MMG5_pMesh, MMG5_int, int, int, double *, double *, double *)
static const int8_t MMG5_iarf[4][3]
iarf[i]: edges of face opposite to vertex i
static const uint8_t MMG5_iare[6][2]
vertices of extremities of the edges of the tetra
void MMG5_tet2tri(MMG5_pMesh mesh, MMG5_int k, int8_t ie, MMG5_Tria *ptt)
int MMG5_norface(MMG5_pMesh mesh, MMG5_int k, int iface, double v[3])
static const uint8_t MMG5_idir[4][3]
idir[i]: vertices of face opposite to vertex i
#define MG_EDG_OR_NOM(tag)
#define MG_GET(flag, bit)
static const uint8_t MMG5_inxt2[6]
int MMG5_rotmatrix(double n[3], double r[3][3])
int MMG5_sys33sym(double a[6], double b[3], double r[3])
#define MG_SIN_OR_NOM(tag)
#define MMG5_DEL_MEM(mesh, ptr)
Identic as MMG5_HGeom but use MMG5_hedge to store edges instead of MMG5_hgeom (memory economy).
Local parameters for a specific entity and reference.
Structure to store vertices of an MMG mesh.
Structure to store prsim of a MMG mesh.
Structure to store tetrahedra of an MMG mesh.
Structure to store triangles of a MMG mesh.
Structure to store additional information for the surface tetrahedra of an MMG mesh.