int main(int argc,char *argv[]) { MMG5_pMesh mmgMesh; MMG5_pSol mmgSol,mmgDisp; int k,ier; char *pwd,*inname,*outname; fprintf(stdout," -- TEST MMG3DLIB \n"); /* Name and path of the mesh files */ pwd = getenv("PWD"); inname = (char *) calloc(strlen(pwd) + 40, sizeof(char)); if ( inname == NULL ) { perror(" ## Memory problem: calloc"); exit(EXIT_FAILURE); } outname = (char *) calloc(strlen(pwd) + 49, sizeof(char)); if ( outname == NULL ) { perror(" ## Memory problem: calloc"); exit(EXIT_FAILURE); } sprintf(inname, "%s%s%s", pwd, "/../libexamples/mmg3d/example4/", "tinyBoxt"); /** 1) Initialisation of mesh and sol structures */ /* args of InitMesh: mesh=&mmgMesh, sol=&mmgSol */ mmgMesh = NULL; mmgSol = NULL; mmgDisp = NULL; //Useless here: just needed forthe lagrangian motion option MMG5_Init_mesh(&mmgMesh,&mmgSol,&mmgDisp); /** 2) Build mesh in MMG5 format */ /** Two solutions: just use the MMG5_loadMesh function that will read a .mesh(b) file formatted or manually set your mesh using the MMG5_Set* functions */ /** with MMG5_loadMesh function */ /** a) (not mandatory): give the mesh name (by default, the "mesh.mesh" file is oppened)*/ if ( !MMG5_Set_inputMeshName(mmgMesh,inname) ) exit(EXIT_FAILURE); /** b) function calling */ if ( !MMG5_loadMesh(mmgMesh) ) exit(EXIT_FAILURE); /** 3) Build displacement in MMG5 format */ /** Two solutions: just use the MMG5_loadMet function that will read a .sol(b) file formatted or manually set your sol using the MMG5_Set* functions */ /**------------------- Lagrangian motion option ----------------------------*/ /* Ask for lagrangian motion (mode 1) */ if ( !MMG5_Set_iparameter(mmgMesh,mmgDisp,MMG5_IPARAM_lag, 1) ) exit(EXIT_FAILURE); /** With MMG5_loadMet function */ /** a) (not mandatory): give the sol name (by default, the "mesh.sol" file is oppened)*/ if ( !MMG5_Set_inputSolName(mmgMesh,mmgDisp,inname) ) exit(EXIT_FAILURE); /** b) function calling */ if ( !MMG5_loadMet(mmgMesh,mmgDisp) ) exit(EXIT_FAILURE); /** 4) (not mandatory): check if the number of given entities match with mesh size */ if ( !MMG5_Chk_meshData(mmgMesh,mmgDisp) ) exit(EXIT_FAILURE); /** 5) (not mandatory): set your global parameters using the MMG5_Set_iparameter and MMG5_Set_dparameter function (resp. for integer parameters and double param)*/ /**------------------- Lagrangian motion computation ---------------------*/ /* debug mode ON (default value = OFF) */ if ( !MMG5_Set_iparameter(mmgMesh,mmgDisp,MMG5_IPARAM_debug, 1) ) exit(EXIT_FAILURE); /** library call */ ier = MMG5_mmg3dmov(mmgMesh,mmgSol,mmgDisp); if ( ier == MMG5_STRONGFAILURE ) { fprintf(stdout,"BAD ENDING OF MMG3DLIB: UNABLE TO SAVE MESH\n"); return(ier); } else if ( ier == MMG5_LOWFAILURE ) fprintf(stdout,"BAD ENDING OF MMG3DLIB\n"); /* (Not mandatory) Automatically save the mesh */ sprintf(outname, "%s%s%s", pwd, "/../libexamples/mmg3d/example4/", "tinyBoxt.o.mesh"); if ( !MMG5_Set_outputMeshName(mmgMesh,outname) ) exit(EXIT_FAILURE); MMG5_saveMesh(mmgMesh); /* (Not mandatory) Automatically save the solution */ if ( !MMG5_Set_outputSolName(mmgMesh,mmgSol,outname) ) exit(EXIT_FAILURE); MMG5_saveMet(mmgMesh,mmgSol); /* 9) free the MMG3D5 structures */ MMG5_Free_all(mmgMesh,mmgSol,mmgDisp); free(inname); inname = NULL; free(outname); outname = NULL; return(ier); }
int main(int argc,char *argv[]) { MMG5_pMesh mesh; MMG5_pSol met; int ier; char stim[32]; atexit(endcod); tminit(ctim,TIMEMAX); chrono(ON,&ctim[0]); /* assign default values */ mesh = NULL; met = NULL; MMG5_Init_mesh(&mesh,&met); /* reset default values for file names */ MMG5_Free_names(mesh,met); /* command line */ if ( !MMG5_parsar(argc,argv,mesh,met) ) return(1); /* load data */ fprintf(stdout,"\n -- INPUT DATA\n"); chrono(ON,&ctim[1]); /* read mesh file */ if ( !MMG5_loadMesh(mesh) ) { MMG5_Free_all(mesh,met ); return(MMG5_STRONGFAILURE); } if ( !MMG5_Set_solSize(mesh,met,MMG5_Vertex,0,MMG5_Scalar) ) { MMG5_Free_all(mesh,met); return(MMG5_STRONGFAILURE); } /* read metric if any */ ier = MMG5_loadMet(mesh,met); if ( !ier ) { MMG5_Free_all(mesh,met); return(MMG5_STRONGFAILURE); } if ( !MMG5_parsop(mesh,met) ) RETURN_AND_FREE(mesh,met,MMG5_LOWFAILURE); chrono(OFF,&ctim[1]); printim(ctim[1].gdif,stim); fprintf(stdout," -- DATA READING COMPLETED. %s\n",stim); ier = MMG5_mmg3dlib(mesh,met ); if ( ier != MMG5_STRONGFAILURE ) { chrono(ON,&ctim[1]); if ( mesh->info.imprim ) fprintf(stdout,"\n -- WRITING DATA FILE %s\n",mesh->nameout); if ( !MMG5_saveMesh(mesh) ) { MMG5_Free_all(mesh,met ); return(EXIT_FAILURE); } if ( !MMG5_saveMet(mesh,met) ) { MMG5_Free_all(mesh,met); return(EXIT_FAILURE); } chrono(OFF,&ctim[1]); if ( mesh->info.imprim ) fprintf(stdout," -- WRITING COMPLETED\n"); } /* free mem */ chrono(OFF,&ctim[0]); printim(ctim[0].gdif,stim); fprintf(stdout,"\n MMG3D: ELAPSED TIME %s\n",stim); MMG5_Free_all(mesh,met); return(ier); }
int main(int argc,char *argv[]) { MMG5_pMesh mmgMesh; MMG5_pSol mmgSol; int ier,k; fprintf(stdout," -- TEST MMG3DLIB \n"); /** ------------------------------ STEP I -------------------------- */ /** 1) Initialisation of mesh and sol structures */ /* args of InitMesh: mesh=&mmgMesh, sol=&mmgSol */ mmgMesh = NULL; mmgSol = NULL; MMG5_Init_mesh(&mmgMesh,&mmgSol,NULL); /** 2) Build mesh in MMG5 format */ /** Two solutions: just use the MMG5_loadMesh function that will read a .mesh(b) file formatted or manually set your mesh using the MMG5_Set* functions */ /** Manually set of the mesh */ /** a) give the size of the mesh: 12 vertices, 12 tetra, 20 triangles, 0 edges */ if ( !MMG5_Set_meshSize(mmgMesh,12,12,20,0) ) exit(EXIT_FAILURE); /** b) give the vertices: for each vertex, give the coordinates, the reference and the position in mesh of the vertex */ mmgMesh->point[1].c[0] = 0.; mmgMesh->point[1].c[1] = 0.; mmgMesh->point[1].c[2] = 0.; mmgMesh->point[1].ref = 0; /* or with the api function : if ( !MMG5_Set_vertex(mmgMesh,0 ,0 ,0 ,0, 1) ) exit(EXIT_FAILURE); */ mmgMesh->point[2].c[0] = 0.5; mmgMesh->point[2].c[1] = 0; mmgMesh->point[2].c[2] = 0; mmgMesh->point[2].ref = 0; mmgMesh->point[3].c[0] = 0.5; mmgMesh->point[3].c[1] = 0; mmgMesh->point[3].c[2] = 1; mmgMesh->point[3].ref = 0; mmgMesh->point[4].c[0] = 0; mmgMesh->point[4].c[1] = 0; mmgMesh->point[4].c[2] = 1; mmgMesh->point[4].ref = 0; mmgMesh->point[5].c[0] = 0; mmgMesh->point[5].c[1] = 1; mmgMesh->point[5].c[2] = 0; mmgMesh->point[5].ref = 0; mmgMesh->point[6].c[0] = 0.5; mmgMesh->point[6].c[1] = 1; mmgMesh->point[6].c[2] = 0; mmgMesh->point[6].ref = 0; mmgMesh->point[7].c[0] = 0.5; mmgMesh->point[7].c[1] = 1; mmgMesh->point[7].c[2] = 1; mmgMesh->point[7].ref = 0; mmgMesh->point[8].c[0] = 0; mmgMesh->point[8].c[1] = 1; mmgMesh->point[8].c[2] = 1; mmgMesh->point[8].ref = 0; mmgMesh->point[9].c[0] = 1; mmgMesh->point[9].c[1] = 0; mmgMesh->point[9].c[2] = 0; mmgMesh->point[9].ref = 0; mmgMesh->point[10].c[0] = 1; mmgMesh->point[10].c[1] = 1; mmgMesh->point[10].c[2] = 0; mmgMesh->point[10].ref = 0; mmgMesh->point[11].c[0] = 1; mmgMesh->point[11].c[1] = 0; mmgMesh->point[11].c[2] = 1; mmgMesh->point[11].ref = 0; mmgMesh->point[12].c[0] = 1; mmgMesh->point[12].c[1] = 1; mmgMesh->point[12].c[2] = 1; mmgMesh->point[12].ref = 0; /*tetra*/ mmgMesh->tetra[1].v[0] = 1; mmgMesh->tetra[1].v[1] = 2; mmgMesh->tetra[1].v[2] = 4; mmgMesh->tetra[1].v[3] = 8; mmgMesh->tetra[1].ref = 1; /* or with the api function : if ( !MMG5_Set_tetrahedra(mmgMesh,1 ,2 ,4 ,8, 1) ) exit(EXIT_FAILURE); */ mmgMesh->tetra[2].v[0] = 8; mmgMesh->tetra[2].v[1] = 3; mmgMesh->tetra[2].v[2] = 2; mmgMesh->tetra[2].v[3] = 7; mmgMesh->tetra[2].ref = 1; mmgMesh->tetra[3].v[0] = 2; mmgMesh->tetra[3].v[1] = 5; mmgMesh->tetra[3].v[2] = 6; mmgMesh->tetra[3].v[3] = 8; mmgMesh->tetra[3].ref = 1; mmgMesh->tetra[4].v[0] = 8; mmgMesh->tetra[4].v[1] = 5; mmgMesh->tetra[4].v[2] = 1; mmgMesh->tetra[4].v[3] = 2; mmgMesh->tetra[4].ref = 1; mmgMesh->tetra[5].v[0] = 2; mmgMesh->tetra[5].v[1] = 7; mmgMesh->tetra[5].v[2] = 8; mmgMesh->tetra[5].v[3] = 6; mmgMesh->tetra[5].ref = 1; mmgMesh->tetra[6].v[0] = 2; mmgMesh->tetra[6].v[1] = 4; mmgMesh->tetra[6].v[2] = 3; mmgMesh->tetra[6].v[3] = 8; mmgMesh->tetra[6].ref = 1; mmgMesh->tetra[7].v[0] = 2; mmgMesh->tetra[7].v[1] = 9; mmgMesh->tetra[7].v[2] = 3; mmgMesh->tetra[7].v[3] = 7; mmgMesh->tetra[7].ref = 2; mmgMesh->tetra[8].v[0] = 7; mmgMesh->tetra[8].v[1] = 11; mmgMesh->tetra[8].v[2] = 9; mmgMesh->tetra[8].v[3] = 12; mmgMesh->tetra[8].ref = 2; mmgMesh->tetra[9].v[0] = 9; mmgMesh->tetra[9].v[1] = 6; mmgMesh->tetra[9].v[2] = 10; mmgMesh->tetra[9].v[3] = 7; mmgMesh->tetra[9].ref = 2; mmgMesh->tetra[10].v[0] = 7; mmgMesh->tetra[10].v[1] = 6; mmgMesh->tetra[10].v[2] = 2; mmgMesh->tetra[10].v[3] = 9; mmgMesh->tetra[10].ref = 2; mmgMesh->tetra[11].v[0] = 9; mmgMesh->tetra[11].v[1] = 12; mmgMesh->tetra[11].v[2] = 7; mmgMesh->tetra[11].v[3] = 10; mmgMesh->tetra[11].ref = 2; mmgMesh->tetra[12].v[0] = 9; mmgMesh->tetra[12].v[1] = 3; mmgMesh->tetra[12].v[2] = 11; mmgMesh->tetra[12].v[3] = 7; mmgMesh->tetra[12].ref = 2; /** 3) Build sol in MMG5 format */ /** Two solutions: just use the MMG5_loadMet function that will read a .sol(b) file formatted or manually set your sol using the MMG5_Set* functions */ /** Manually set of the sol */ /** a) give info for the sol structure: sol applied on vertex entities, number of vertices=12, the sol is scalar*/ if ( !MMG5_Set_solSize(mmgMesh,mmgSol,MMG5_Vertex,12,MMG5_Scalar) ) exit(EXIT_FAILURE); /** b) give solutions values and positions */ for(k=1 ; k<=12 ; k++) { mmgSol->m[k] = 0.5; /* or with the api function : if ( !MMG5_Set_scalarSol(mmgSol,0.5,k) ) exit(EXIT_FAILURE); */ } /** 4) If you don't use the API functions, you MUST call the MMG5_Set_handGivenMesh() function. Don't call it if you use the API functions */ MMG5_Set_handGivenMesh(mmgMesh); /** 5) (not mandatory): check if the number of given entities match with mesh size */ if ( !MMG5_Chk_meshData(mmgMesh,mmgSol) ) exit(EXIT_FAILURE); /** ------------------------------ STEP II -------------------------- */ /** library call */ ier = MMG5_mmg3dlib(mmgMesh,mmgSol); if ( ier == MMG5_STRONGFAILURE ) { fprintf(stdout,"BAD ENDING OF MMG3DLIB: UNABLE TO SAVE MESH\n"); return(ier); } else if ( ier == MMG5_LOWFAILURE ) fprintf(stdout,"BAD ENDING OF MMG3DLIB\n"); /** ------------------------------ STEP III -------------------------- */ /** get results */ /** Two solutions: just use the MMG5_saveMesh/MMG5_saveMet functions that will write .mesh(b)/.sol formatted files or manually get your mesh/sol using the MMG5_getMesh/MMG5_getSol functions */ /** 1) Automatically save the mesh */ /** a) (not mandatory): give the ouptut mesh name using MMG5_Set_outputMeshName (by default, the mesh is saved in the "mesh.o.mesh" file */ MMG5_Set_outputMeshName(mmgMesh,"result0.mesh"); /** b) function calling */ MMG5_saveMesh(mmgMesh); /** 2) Automatically save the solution */ /** a) (not mandatory): give the ouptut sol name using MMG5_Set_outputSolName (by default, the mesh is saved in the "mesh.o.sol" file */ MMG5_Set_outputSolName(mmgMesh,mmgSol,"result0.sol"); /** b) function calling */ MMG5_saveMet(mmgMesh,mmgSol); /** 3) Free the MMG3D5 structures */ MMG5_Free_all(mmgMesh,mmgSol,NULL); return(ier); }
/** * \param argc number of command line arguments. * \param argv command line arguments. * \return \ref MMG5_SUCCESS if success. * \return \ref MMG5_LOWFAILURE if failed but a conform mesh is saved. * \return \ref MMG5_STRONGFAILURE if failed and we can't save the mesh. * * Main program for MMG3D executable: perform mesh adaptation. * */ int main(int argc,char *argv[]) { MMG5_Mesh mesh; MMG5_Sol met; int ier; char stim[32]; fprintf(stdout," -- MMG3d, Release %s (%s) \n",MG_VER,MG_REL); fprintf(stdout," %s\n",MG_CPY); fprintf(stdout," %s %s\n",__DATE__,__TIME__); signal(SIGABRT,_MMG5_excfun); signal(SIGFPE,_MMG5_excfun); signal(SIGILL,_MMG5_excfun); signal(SIGSEGV,_MMG5_excfun); signal(SIGTERM,_MMG5_excfun); signal(SIGINT,_MMG5_excfun); atexit(_MMG5_endcod); tminit(MMG5_ctim,TIMEMAX); chrono(ON,&MMG5_ctim[0]); /* assign default values */ memset(&mesh,0,sizeof(MMG5_Mesh)); memset(&met,0,sizeof(MMG5_Sol)); MMG5_Init_parameters(&mesh); met.size = 1; /* command line */ if ( !MMG5_parsar(argc,argv,&mesh,&met) ) return(MMG5_STRONGFAILURE); #ifdef USE_SCOTCH _MMG5_warnScotch(&mesh); #endif /* load data */ fprintf(stdout,"\n -- INPUT DATA\n"); chrono(ON,&MMG5_ctim[1]); _MMG5_warnOrientation(&mesh); /* read mesh file */ if ( !MMG5_loadMesh(&mesh) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); /* read metric if any */ ier = MMG5_loadMet(&mesh,&met); if ( !ier ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); else if ( ier > 0 && met.np != mesh.np ) { fprintf(stdout," ## WARNING: WRONG SOLUTION NUMBER. IGNORED\n"); _MMG5_DEL_MEM(&mesh,met.m,(met.size*met.npmax+1)*sizeof(double)); met.np = 0; } else if ( met.size!=1 ) { fprintf(stdout," ## ERROR: ANISOTROPIC METRIC NOT IMPLEMENTED.\n"); _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); } if ( !MMG5_parsop(&mesh,&met) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_LOWFAILURE); chrono(OFF,&MMG5_ctim[1]); printim(MMG5_ctim[1].gdif,stim); fprintf(stdout," -- DATA READING COMPLETED. %s\n",stim); /* analysis */ chrono(ON,&MMG5_ctim[2]); _MMG5_setfunc(&mesh,&met); MMG5_Set_saveFunc(&mesh); if ( abs(mesh.info.imprim) > 0 ) _MMG5_outqua(&mesh,&met); fprintf(stdout,"\n %s\n MODULE MMG3D: IMB-LJLL : %s (%s)\n %s\n", MG_STR,MG_VER,MG_REL,MG_STR); if ( mesh.info.imprim ) fprintf(stdout,"\n -- PHASE 1 : ANALYSIS\n"); if ( !_MMG5_scaleMesh(&mesh,&met) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); if ( mesh.info.iso ) { if ( !met.np ) { fprintf(stdout,"\n ## ERROR: A VALID SOLUTION FILE IS NEEDED \n"); _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); } if ( !_MMG5_mmg3d2(&mesh,&met) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); } if ( !mesh.info.iso && !met.np && !_MMG5_DoSol(&mesh,&met) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_LOWFAILURE); if ( !_MMG5_analys(&mesh) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_LOWFAILURE); if ( mesh.info.imprim > 3 && !mesh.info.iso && met.m ) _MMG5_prilen(&mesh,&met); chrono(OFF,&MMG5_ctim[2]); printim(MMG5_ctim[2].gdif,stim); if ( mesh.info.imprim ) fprintf(stdout," -- PHASE 1 COMPLETED. %s\n",stim); /* mesh adaptation */ chrono(ON,&MMG5_ctim[3]); if ( mesh.info.imprim ) fprintf(stdout,"\n -- PHASE 2 : %s MESHING\n",met.size < 6 ? "ISOTROPIC" : "ANISOTROPIC"); /* renumerotation if available */ if ( !_MMG5_scotchCall(&mesh,&met) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); #ifdef PATTERN if ( !_MMG5_mmg3d1_pattern(&mesh,&met) ) { if ( !(mesh.adja) && !_MMG5_hashTetra(&mesh,1) ) { fprintf(stdout," ## Hashing problem. Unable to save mesh.\n"); _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); } if ( !_MMG5_unscaleMesh(&mesh,&met) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); if ( !MMG5_saveMesh(&mesh) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); if ( met.m && !MMG5_saveMet(&mesh,&met) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_LOWFAILURE); } #else /* Pattern in iso mode, delauney otherwise */ if ( !mesh.info.iso ) { if( !_MMG5_mmg3d1_delone(&mesh,&met) ) { if ( !(mesh.adja) && !_MMG5_hashTetra(&mesh,1) ) { fprintf(stdout," ## Hashing problem. Unable to save mesh.\n"); _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); } if ( !_MMG5_unscaleMesh(&mesh,&met) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); if ( !MMG5_saveMesh(&mesh) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); if ( met.m && !MMG5_saveMet(&mesh,&met) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_LOWFAILURE); } } else { if( !_MMG5_mmg3d1_pattern(&mesh,&met) ) { if ( !(mesh.adja) && !_MMG5_hashTetra(&mesh,1) ) { fprintf(stdout," ## Hashing problem. Unable to save mesh.\n"); _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); } if ( !_MMG5_unscaleMesh(&mesh,&met) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); if ( !MMG5_saveMesh(&mesh) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); if ( met.m && !MMG5_saveMet(&mesh,&met) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_LOWFAILURE); } } #endif chrono(OFF,&MMG5_ctim[3]); printim(MMG5_ctim[3].gdif,stim); if ( mesh.info.imprim ) fprintf(stdout," -- PHASE 2 COMPLETED. %s\n",stim); fprintf(stdout,"\n %s\n END OF MODULE MMG3d: IMB-LJLL \n %s\n",MG_STR,MG_STR); /* save file */ _MMG5_outqua(&mesh,&met); if ( mesh.info.imprim > 3 && !mesh.info.iso ) _MMG5_prilen(&mesh,&met); chrono(ON,&MMG5_ctim[1]); if ( mesh.info.imprim ) fprintf(stdout,"\n -- WRITING DATA FILE %s\n",mesh.nameout); if ( !_MMG5_unscaleMesh(&mesh,&met) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); if ( !MMG5_saveMesh(&mesh) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); if ( !MMG5_saveMet(&mesh,&met) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE); chrono(OFF,&MMG5_ctim[1]); if ( mesh.info.imprim ) fprintf(stdout," -- WRITING COMPLETED\n"); /* free mem */ _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_SUCCESS); }