36#include "mmgversion.h"
147 fprintf(stdout,
"-octree val specify the max number of points per octree cell \n");
150 fprintf(stdout,
"-rn [n] turn on or off the renumbering using SCOTCH [1/0] \n");
152 fprintf(stdout,
"\n");
154 fprintf(stdout,
"-nofem do not force Mmg to create a finite element mesh \n");
155 fprintf(stdout,
"-nosurf no surface modifications\n");
157 fprintf(stdout,
"\n");
162 fprintf(stdout,
"-optimLES enable skewness improvement (for LES computations)\n");
167 fprintf(stdout,
"\n\n");
177 fprintf(stdout,
"Max number of point per octree cell (-octree) : %d\n",
181 fprintf(stdout,
"SCOTCH renumbering : enabled\n");
183 fprintf(stdout,
"SCOTCH renumbering : disabled\n");
185 fprintf(stdout,
"\n\n");
198 for ( i=1; i< argc; ++i ) {
199 if ( !strcmp(argv[i],
"-val") ) {
208 if ( *argv[i] ==
'-' ) {
215 if ( !strcmp(argv[i],
"-ar") && ++i < argc )
225 if ( !strcmp(argv[i],
"-default") ) {
236 if ( !strcmp(argv[i],
"-hmin") && ++i < argc ) {
241 else if ( !strcmp(argv[i],
"-hmax") && ++i < argc ) {
246 else if ( !strcmp(argv[i],
"-hsiz") && ++i < argc ) {
252 else if ( !strcmp(argv[i],
"-hausd") && ++i <= argc ) {
257 else if ( !strcmp(argv[i],
"-hgradreq") && ++i <= argc ) {
262 else if ( !strcmp(argv[i],
"-hgrad") && ++i <= argc ) {
273 if ( !strcmp(argv[i],
"-in") ) {
274 if ( ++i < argc && isascii(argv[i][0]) && argv[i][0]!=
'-') {
279 fprintf(stderr,
"Missing filname for %c%c\n",argv[i-1][1],argv[i-1][2]);
284 else if ( !strcmp(argv[i],
"-isoref") && ++i <= argc ) {
295 if ( !strcmp(argv[i],
"-lag") ) {
296 if ( ++i < argc && isdigit(argv[i][0]) ) {
300 else if ( i == argc ) {
301 fprintf(stderr,
"Missing argument option %s\n",argv[i-1]);
306 fprintf(stderr,
"Missing argument option %s\n",argv[i-1]);
312 else if ( !strcmp(argv[i],
"-ls") ) {
315 if ( ++i < argc && (isdigit(argv[i][0]) ||
316 (argv[i][0]==
'-' && isdigit(argv[i][1])) ) ) {
322 else if ( !strcmp(argv[i],
"-lssurf") ) {
325 if ( ++i < argc && (isdigit(argv[i][0]) ||
326 (argv[i][0]==
'-' && isdigit(argv[i][1])) ) ) {
334 if ( !strcmp(argv[i],
"-met") ) {
336 fprintf(stderr,
"No metric structure allocated for %c%c%c option\n",
337 argv[i-1][1],argv[i-1][2],argv[i-1][3]);
340 if ( ++i < argc && isascii(argv[i][0]) && argv[i][0]!=
'-' ) {
345 fprintf(stderr,
"Missing filname for %c%c%c\n",argv[i-1][1],argv[i-1][2],argv[i-1][3]);
350 else if ( !strcmp(argv[i],
"-m") ) {
352 if ( ++i < argc && isdigit(argv[i][0]) ) {
357 fprintf(stderr,
"Missing argument option %c\n",argv[i-1][1]);
364 if ( !strcmp(argv[i],
"-nofem") ) {
368 else if ( !strcmp(argv[i],
"-nreg") ) {
372 else if ( !strcmp(argv[i],
"-nr") ) {
376 else if ( !strcmp(argv[i],
"-nsd") ) {
377 if ( ++i < argc && isdigit(argv[i][0]) ) {
382 fprintf(stderr,
"Missing argument option %c\n",argv[i-1][1]);
387 else if ( !strcmp(argv[i],
"-noswap") ) {
391 else if( !strcmp(argv[i],
"-noinsert") ) {
395 else if( !strcmp(argv[i],
"-nomove") ) {
399 else if( !strcmp(argv[i],
"-nosurf") ) {
403 else if( !strcmp(argv[i],
"-nosizreq") ) {
410 if ( (!strcmp(argv[i],
"-out")) || (!strcmp(argv[i],
"-o")) ) {
411 if ( ++i < argc && isascii(argv[i][0]) && argv[i][0]!=
'-') {
415 fprintf(stderr,
"Missing filname for %c%c%c\n",
416 argv[i-1][1],argv[i-1][2],argv[i-1][3]);
421 else if ( !strcmp(argv[i],
"-opnbdy") ) {
426 else if ( !strcmp(argv[i],
"-octree") && ++i < argc ) {
432 else if( !strcmp(argv[i],
"-optimLES") ) {
436 else if( !strcmp(argv[i],
"-optim") ) {
442 if ( !strcmp(argv[i],
"-rmc") ) {
445 if ( ++i < argc && (isdigit(argv[i][0]) ) ) {
452 else if ( !strcmp(argv[i],
"-rn") ) {
454 if ( isdigit(argv[i][0]) ) {
459 fprintf(stderr,
"Missing argument option %s\n",argv[i-1]);
465 fprintf(stderr,
"Missing argument option %s\n",argv[i-1]);
472 fprintf(stderr,
"Unrecognized option %s\n",argv[i]);
478 if ( !strcmp(argv[i],
"-sol") ) {
482 if ( ++i < argc && isascii(argv[i][0]) && argv[i][0]!=
'-' ) {
487 fprintf(stderr,
"Missing filname for %c%c%c\n",argv[i-1][1],argv[i-1][2],argv[i-1][3]);
495 if ( isdigit(argv[i][0]) ||
496 (argv[i][0]==
'-' && isdigit(argv[i][1])) ) {
502 fprintf(stderr,
"Missing argument option %s\n",argv[i]);
506 fprintf(stderr,
"Missing argument option %s\n",argv[i-1]);
512 if ( !strcmp(argv[i],
"-xreg") ) {
518 fprintf(stderr,
"Unrecognized option %s\n",argv[i]);
537 fprintf(stdout,
"Argument %s ignored\n",argv[i]);
547 fprintf(stdout,
"\n -- PRINT (0 10(advised) -10) ?\n");
555 fprintf(stdout,
" -- INPUT MESH NAME ?\n");
578 if (
tmp->namein == NULL ) {
591 int i,j,ret,npar,nbr,split;
592 MMG5_int ref,rin,rex,br;
593 char *ptr,buf[256],data[256];
599 ptr = strstr(data,
".mesh");
600 if ( ptr ) *ptr =
'\0';
601 strcat(data,
".mmg3d");
602 in = fopen(data,
"rb");
604 strcat(data,
".mmg3d5");
605 in = fopen(data,
"rb");
607 sprintf(data,
"%s",
"DEFAULT.mmg3d");
608 in = fopen(data,
"rb");
610 sprintf(data,
"%s",
"DEFAULT.mmg3d5");
611 in = fopen(data,
"rb");
619 fprintf(stdout,
"\n %%%% %s OPENED\n",data);
622 while ( !feof(in) ) {
624 ret = fscanf(in,
"%255s",data);
625 if ( !ret || feof(in) )
break;
626 for (i=0; i<strlen(data); i++) data[i] = tolower(data[i]);
629 if ( !strcmp(data,
"lsreferences") ) {
630 ret = fscanf(in,
"%d",&npar);
632 fprintf(stderr,
" %%%% Wrong format for lsreferences: %d\n",npar);
641 fgetpos(in,&position);
645 if ( strcmp(data,
"nosplit") ) {
646 fsetpos(in,&position);
657 else if ( !strcmp(data,
"parameters") ) {
658 ret = fscanf(in,
"%d",&npar);
661 fprintf(stderr,
" %%%% Wrong format for parameters: %d\n",npar);
670 ret = fscanf(in,
"%" MMG5_PRId
" %255s ",&ref,buf);
672 ret = fscanf(in,
"%f %f %f",&fp1,&fp2,&hausd);
675 fprintf(stderr,
" %%%% Wrong format: %s\n",buf);
679 for (j=0; j<strlen(buf); j++) buf[j] = tolower(buf[j]);
681 if ( (!strcmp(buf,
"triangles") || !strcmp(buf,
"triangle")) ) {
686 else if ( !strcmp(buf,
"tetrahedra") || !strcmp(buf,
"tetrahedron") ) {
692 fprintf(stderr,
" %%%% Wrong format: %s\n",buf);
697 else if ( !strcmp(data,
"lsbasereferences") ) {
728 MMG5_int ref,*adja,j,k,iel;
743 fprintf(stderr,
"\n ## Error: %s: unable to create "
744 "adjacency table.\n",__func__);
752 fprintf(stderr,
"\n ## Error: %s: Prism hashing problem.\n",__func__);
762 fprintf(stderr,
"\n ## Error: %s: Boundary orientation problem.\n",__func__);
767 fprintf(stderr,
"\n ## Error: %s: Boundary problem.\n",__func__);
776 fprintf(stderr,
"\n ## Error: %s: Hashing problem.\n",__func__);
782 fprintf(stderr,
"\n ## Error: %s: Topology problem.\n",__func__);
790 fprintf(stderr,
"\n ## Error: %s: Boundary problem.\n",__func__);
797 for ( k=1; k<=
mesh->
ne; k++ ) {
799 if ( !
MG_EOK(pt) )
continue;
803 for ( i=0; i<4; i++ ) {
809 if ( (!iel) || (pt->
ref != pt1->
ref) ||
823 if ( !
MG_EOK(pp) )
continue;
827 for ( i=0; i<2; i++ ) {
836 if ( (!iel) || (pp->
ref != ref) ||
856 printf(
" Exit program.\n");
860 MMG5_Tria,
"non bdy tria arrray",
return 0);
864 printf(
" Exit program.\n");
868 MMG5_Tria,
"non bdy tria arrray",
return 0);
872 for ( k=1; k<=
mesh->
ne; k++ ) {
874 if ( !
MG_EOK(pt) )
continue;
878 for ( i=0; i<4; i++ ) {
884 if ( (!iel) || (pt->
ref != pt1->
ref) ||
904 if ( !
MG_EOK(pp) )
continue;
908 for ( i=0; i<2; i++ ) {
916 if ( (!iel) || (pp->
ref != ref) ||
938 MMG5_int* ref,MMG5_int idx) {
944 fprintf(stderr,
"\n ## Error: %s: triangle array is not allocated.\n"
945 " Please, call the MMG3D_Get_numberOfNonBdyTriangles function"
946 " before the %s one.\n",
951 ptr_c = ptr_c-
sizeof(size_t);
952 nt_tot = *((
size_t*)ptr_c);
954 if (
mesh->
nt==(MMG5_int)nt_tot ) {
955 fprintf(stderr,
"\n ## Error: %s: no internal triangle.\n"
956 " Please, call the MMG3D_Get_numberOfNonBdyTriangles function"
957 " before the %s one and check that the number of internal"
958 " triangles is non null.\n",
963 if (
mesh->
nt+idx > (MMG5_int)nt_tot ) {
964 fprintf(stderr,
"\n ## Error: %s: Can't get the internal triangle of index %" MMG5_PRId
"."
965 " Index must be between 1 and %zu.\n",
966 __func__,idx,nt_tot-(
size_t)
mesh->
nt);
1003 double lmax, MMG5_int *eltab,int8_t metRidTyp) {
1027 fprintf(stderr,
"\n ## Error: lagrangian mode unavailable (MMG3D_IPARAM_lag):\n"
1028 " You must call the MMG3D_mmg3dmov function to move a rigidbody.\n");
1032 fprintf(stderr,
"\n ## Error: level-set discretisation unavailable"
1033 " (MMG3D_IPARAM_iso):\n"
1034 " You must call the MMG3D_mmg3dmov function to use this option.\n");
1042 if (
mesh->
info.
imprim > 0 ) fprintf(stdout,
"\n -- MMG3DLIB: INPUT DATA\n");
1049 fprintf(stdout,
" ## WARNING: WRONG SOLUTION NUMBER. IGNORED\n");
1053 else if ( met->
size!=1 && met->
size!=6 ) {
1054 fprintf(stderr,
"\n ## ERROR: WRONG DATA TYPE.\n");
1060 fprintf(stdout,
" ## WARNING: WRONG SOLUTION NUMBER. IGNORED\n");
1064 else if (
sol->size!=1 &&
sol->size!=6 ) {
1065 fprintf(stderr,
"\n ## ERROR: WRONG DATA TYPE.\n");
1073 fprintf(stdout,
" -- INPUT DATA COMPLETED. %s\n",stim);
1080 fprintf(stdout,
"\n %s\n MODULE MMG3D: IMB-LJLL : %s (%s)\n %s\n",
1082 fprintf(stdout,
"\n -- PHASE 1 : ANALYSIS\n");
1105 for (k=1; k<=
mesh->
ne; k++) {
1111 if ( (!metRidTyp) && met->
m && met->
size>1 ) {
1118 if ( rap == 0.0 || rap < critmin ) {
1131 fprintf(stderr,
" ## Error: %s: the main fonction of the Mmg library must be"
1132 " called before this function.\n",__func__);
1149 MMG5_int ia0,ib0,ic0,ia1,ib1,ic1;
1152 ktet[0] = ktet[1] = 0;
1153 iface[0] = iface[1] = 0;
1157 if ( !
ier )
return 0;
1164 itet =
mesh->
adja[4*(*ktet-1) + *iface + 1 ];
1179 assert ( ( (ia0 == ia1) && ((ib0 == ic1) && (ic0 == ib1 )) ) ||
1180 ( (ia0 == ib1) && ((ib0 == ia1) && (ic0 == ic1 )) ) ||
1181 ( (ia0 == ic1) && ((ib0 == ib1) && (ic0 == ia1 )) ) );
1190 double lmax, MMG5_int *eltab,int8_t metRidTyp) {
1195 int8_t ia,i0,i1,
ier;
1200 for(k=1; k<=
mesh->
ne; k++) {
1202 if ( !
MG_EOK(pt) )
continue;
1204 for(ia=0; ia<6; ia++) {
1211 fprintf(stderr,
"\n ## Error: %s: function MMG5_hashEdge return 0\n",
1219 for(k=1; k<=
mesh->
ne; k++) {
1221 if ( !
MG_EOK(pt) )
continue;
1223 for(ia=0; ia<6; ia++) {
1232 if ( (!metRidTyp) && met->
m && met->
size>1 ) {
1233 len = MMG5_lenedg(
mesh,met,ia,pt);
1239 if( (len < lmin) || (len > lmax) ) {
1273 for (k=1; k<=
mesh->
np; k++) {
1279 for (k=1; k<=
mesh->
ne; k++) {
1281 if ( !
MG_EOK(pt) )
continue;
1283 for (i=0; i<4; i++) {
1322 if ( met->
size!=1 ) {
1323 fprintf(stderr,
"\n ## Error: %s: unexpected size of metric: %d.\n",
1324 __func__,met->
size);
1334 for (k=1; k<=
mesh->
ne; k++) {
1336 if ( !
MG_EOK(pt) )
continue;
1338 for (i=0; i<6; i++) {
1346 ux = p1->
c[0] - p2->
c[0];
1347 uy = p1->
c[1] - p2->
c[1];
1348 uz = p1->
c[2] - p2->
c[2];
1349 dd = sqrt(ux*ux + uy*uy + uz*uz);
1359 for (k=1; k<=
mesh->
np; k++) {
1364 met->
m[k] = met->
m[k] / (double)mark[k];
1388 double u[3],dd,tensordot[6];
1389 MMG5_int k,iadr,ipa,ipb;
1397 if ( met->
size!=6 ) {
1398 fprintf(stderr,
"\n ## Error: %s: unexpected size of metric: %d.\n",
1399 __func__,met->
size);
1409 for (k=1; k<=
mesh->
ne; k++) {
1411 if ( !
MG_EOK(pt) )
continue;
1413 for (i=0; i<6; i++) {
1419 u[0] = p1->
c[0] - p2->
c[0];
1420 u[1] = p1->
c[1] - p2->
c[1];
1421 u[2] = p1->
c[2] - p2->
c[2];
1423 tensordot[0] = u[0]*u[0];
1424 tensordot[1] = u[0]*u[1];
1425 tensordot[2] = u[0]*u[2];
1426 tensordot[3] = u[1]*u[1];
1427 tensordot[4] = u[1]*u[2];
1428 tensordot[5] = u[2]*u[2];
1431 for ( j=0; j<6; ++j ) {
1432 met->
m[iadr+j] += tensordot[j];
1437 for ( j=0; j<6; ++j ) {
1438 met->
m[iadr+j] += tensordot[j];
1444 for (k=1; k<=
mesh->
np; k++) {
1456 fprintf(stdout,
" ## Warning: %s: %d: non invertible matrix."
1457 " Impose hmax size at point\n",__func__,__LINE__);
1458 met->
m[iadr+0] = FLT_MIN;
1461 met->
m[iadr+3] = FLT_MIN;
1463 met->
m[iadr+5] = FLT_MIN;
1467 dd = (double)mark[k]/3.;
1469 for ( j=0; j<6; ++j ) {
1470 met->
m[iadr+j] = dd*tensordot[j];
1475 double lambda[3],vp[3][3];
1477 fprintf(stdout,
" ## Warning: %s: %d: non diagonalizable metric.",
1481 assert ( lambda[0] > 0. && lambda[1] > 0. && lambda[2] > 0.
1482 &&
"Negative eigenvalue" );
1483 assert ( isfinite(lambda[0]) && isfinite(lambda[1]) && isfinite(lambda[2])
1484 &&
"Infinite eigenvalue" );
1527 if ( met->
size!=6 ) {
return 1; }
1529 for ( k=1; k<=met->
np; ++k ) {
1531 tmp = met->
m[6*k+2];
1533 met->
m[6*k+2] = met->
m[6*k+3];
1534 met->
m[6*k+3] =
tmp;
1601 if ( ptt != ptt1 ) {
1609 if ( ptt->
ref < 0 ) {
1614 while ( ++k < mesh->nt );
1628 fprintf(stdout,
" Deleted iso triangles: %" MMG5_PRId
"\n",nt-
mesh->
nt);
1634 else if (
mesh->
nt < nt ) {
1636 fprintf(stderr,
" Exit program.\n");
1639 "triangles",
return 0);
int MMG5_Compute_constantSize(MMG5_pMesh mesh, MMG5_pSol met, double *hsiz)
void MMG5_Set_constantSize(MMG5_pMesh mesh, MMG5_pSol met, double hsiz)
int MMG3D_Set_multiMat(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int ref, int split, MMG5_int rin, MMG5_int rout)
int MMG3D_Set_inputMeshName(MMG5_pMesh mesh, const char *meshin)
int MMG3D_Set_dparameter(MMG5_pMesh mesh, MMG5_pSol sol, int dparam, double val)
int MMG3D_Set_localParameter(MMG5_pMesh mesh, MMG5_pSol sol, int typ, MMG5_int ref, double hmin, double hmax, double hausd)
int MMG3D_Set_lsBaseReference(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int br)
int MMG3D_Set_inputSolName(MMG5_pMesh mesh, MMG5_pSol sol, const char *solin)
int MMG3D_Set_outputSolName(MMG5_pMesh mesh, MMG5_pSol sol, const char *solout)
int MMG3D_Set_outputMeshName(MMG5_pMesh mesh, const char *meshout)
int MMG3D_Set_iparameter(MMG5_pMesh mesh, MMG5_pSol sol, int iparam, MMG5_int val)
int MMG3D_Set_solSize(MMG5_pMesh mesh, MMG5_pSol sol, int typEntity, MMG5_int np, int typSol)
MMG5_pMesh MMG5_pSol * sol
if(!ier) exit(EXIT_FAILURE)
int MMG3D_PROctreein_iso(MMG5_pMesh mesh, MMG5_pSol sol, MMG3D_pPROctree PROctree, MMG5_int ip, double lmax)
int MMG3D_PROctreein_ani(MMG5_pMesh mesh, MMG5_pSol sol, MMG3D_pPROctree PROctree, MMG5_int ip, double lmax)
int MMG5_setadj(MMG5_pMesh mesh)
int MMG5_movbdynompt_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int64_t *listv, int ilistv, MMG5_int *lists, int ilists, int improve)
int MMG5_movbdyregpt_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int64_t *listv, int ilistv, MMG5_int *lists, int ilists, int improveSurf, int improveVol)
int MMG5_movbdyrefpt_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int64_t *listv, int ilistv, MMG5_int *lists, int ilists, int improve)
int MMG5_movintpt_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int64_t *list, int ilist, int improve)
int MMG5_movbdyridpt_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int64_t *listv, int ilistv, MMG5_int *lists, int ilists, int improve)
int MMG5_compute_meanMetricAtMarkedPoints_ani(MMG5_pMesh mesh, MMG5_pSol met)
int MMG3D_gradsiz_ani(MMG5_pMesh mesh, MMG5_pSol met)
int MMG3D_defsiz_ani(MMG5_pMesh mesh, MMG5_pSol met)
int MMG3D_gradsizreq_ani(MMG5_pMesh mesh, MMG5_pSol met)
void tminit(mytime *t, int maxtim)
Initialize mytime object.
void printim(double elps, char *stim)
Print real time.
void chrono(int cmode, mytime *ptt)
Function to measure time.
int MMG5_cavity_iso(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int iel, int ip, int64_t *list, int lon, double volmin)
int MMG5_cavity_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int iel, int ip, int64_t *list, int lon, double volmin)
int MMG5_eigenv3d(int symmat, double *mat, double lambda[3], double v[3][3])
Find eigenvalues and vectors of a 3x3 matrix.
int MMG5_hashNew(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int hsiz, MMG5_int hmax)
int MMG5_hashEdge(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int a, MMG5_int b, MMG5_int k)
int MMG3D_hashTetra(MMG5_pMesh mesh, int pack)
int MMG3D_hashPrism(MMG5_pMesh mesh)
int MMG5_chkBdryTria(MMG5_pMesh mesh)
int MMG5_bdrySet(MMG5_pMesh mesh)
int MMG3D_hashTria(MMG5_pMesh mesh, MMG5_Hash *hash)
int MMG5_hashPop(MMG5_Hash *hash, MMG5_int a, MMG5_int b)
int MMG5_bdryPerm(MMG5_pMesh mesh)
static double MMG5_caltet_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTetra pt)
static double MMG5_caltet_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTetra pt)
static double MMG5_lenedg_iso(MMG5_pMesh mesh, MMG5_pSol met, int ia, MMG5_pTetra pt)
static double MMG5_lenedg33_ani(MMG5_pMesh mesh, MMG5_pSol met, int ia, MMG5_pTetra pt)
static double MMG3D_caltetLES_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTetra pt)
static double MMG5_lenedg_ani(MMG5_pMesh mesh, MMG5_pSol met, int ia, MMG5_pTetra pt)
static double MMG5_lenedgCoor_ani(double *ca, double *cb, double *sa, double *sb)
inlined Functions
static double MMG5_lenSurfEdg_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int ip1, MMG5_int ip2, int8_t isedg)
static double MMG5_lenSurfEdg_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int np0, MMG5_int np1, int8_t isedg)
int MMG5_interp4bar_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int ip, double cb[4])
int MMG5_interp4bar_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int ip, double cb[4])
int MMG5_intmet_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int8_t i, MMG5_int ip, double s)
int MMG5_intmet_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int8_t i, MMG5_int ip, double s)
int MMG5_compute_meanMetricAtMarkedPoints_iso(MMG5_pMesh mesh, MMG5_pSol met)
double MMG5_lenedgCoor_iso(double *ca, double *cb, double *ma, double *mb)
Compute edge length from edge's coordinates.
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)
void MMG3D_Free_topoTables(MMG5_pMesh mesh)
void MMG3D_Set_commonFunc(void)
API headers for the mmg3d library.
LIBMMG3D_EXPORT double(* MMG3D_lenedgCoor)(double *ca, double *cb, double *sa, double *sb)
LIBMMG3D_EXPORT int(* MMG3D_doSol)(MMG5_pMesh mesh, MMG5_pSol met)
@ MMG3D_IPARAM_numberOfLocalParam
@ MMG3D_DPARAM_angleDetection
@ MMG3D_IPARAM_numsubdomain
@ MMG3D_IPARAM_numberOfMat
@ MMG3D_IPARAM_numberOfLSBaseReferences
int MMG5_movbdyregpt_iso(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, MMG5_int *, int, int, int)
void MMG5_freeXPrisms(MMG5_pMesh mesh)
void MMG5_freeXTets(MMG5_pMesh mesh)
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
int MMG5_movbdyrefpt_iso(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, MMG5_int *, int, int)
int MMG5_movintpt_iso(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, int)
static const uint8_t MMG5_idir_pr[5][4]
idir[i]: vertices of face i for a prism
int MMG5_movbdyridpt_iso(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, MMG5_int *, int, int)
int MMG3D_memOption(MMG5_pMesh mesh)
static const uint8_t MMG5_idir[4][3]
idir[i]: vertices of face opposite to vertex i
int MMG5_movbdynompt_iso(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, MMG5_int *, int, int)
static void MMG5_warnOrientation(MMG5_pMesh mesh)
LIBMMG_CORE_EXPORT int MMG5_Clean_isoEdges(MMG5_pMesh mesh)
LIBMMG_CORE_EXPORT int MMG5_scaleMesh(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pSol ls)
#define MMG5_STRONGFAILURE
#define MMG5_MMAT_NoSplit
#define MMG5_SAFE_CALLOC(ptr, size, type, law)
int MMG5_3dSolTruncature_ani(MMG5_pMesh mesh, MMG5_pSol met)
#define _LIBMMG5_RETURN(mesh, sol, met, val)
double MMG5_caltri_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria ptt)
static void MMG5_excfun(int sigid)
#define MMG5_ADD_MEM(mesh, size, message, law)
static void MMG5_warnScotch(MMG5_pMesh mesh)
int MMG5_solTruncature_iso(MMG5_pMesh mesh, MMG5_pSol met)
#define MMG5_FILESTR_LGTH
double MMG5_caltri_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria ptt)
#define MMG5_SAFE_FREE(ptr)
#define MMG_FSCANF(stream, format,...)
#define MMG5_DEL_MEM(mesh, ptr)
int MMG5_invmat(double *m, double *mi)
#define MMG5_SAFE_RECALLOC(ptr, prevSize, newSize, type, message, law)
Identic as MMG5_HGeom but use MMG5_hedge to store edges instead of MMG5_hgeom (memory economy).
Store input parameters of the run.
Structure to store points of a MMG mesh.