Mmg
Simplicial remeshers (mesh adaptation, isovalue discretization, lagrangian movement)
mmgs.c
Go to the documentation of this file.
1/* =============================================================================
2** This file is part of the mmg software package for the tetrahedral
3** mesh modification.
4** Copyright (c) Bx INP/CNRS/Inria/UBordeaux/UPMC, 2004-
5**
6** mmg is free software: you can redistribute it and/or modify it
7** under the terms of the GNU Lesser General Public License as published
8** by the Free Software Foundation, either version 3 of the License, or
9** (at your option) any later version.
10**
11** mmg is distributed in the hope that it will be useful, but WITHOUT
12** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13** FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14** License for more details.
15**
16** You should have received a copy of the GNU Lesser General Public
17** License and of the GNU General Public License along with mmg (in
18** files COPYING.LESSER and COPYING). If not, see
19** <http://www.gnu.org/licenses/>. Please read their terms carefully and
20** use this copy of the mmg distribution only if you accept them.
21** =============================================================================
22*/
23
35#include "libmmgs.h"
36#include "libmmgs_private.h"
37#include <math.h>
38
40
41
45static void MMG5_endcod(void) {
46 char stim[32];
47
48 chrono(OFF,&MMG5_ctim[0]);
49 printim(MMG5_ctim[0].gdif,stim);
50 fprintf(stdout,"\n ELAPSED TIME %s\n",stim);
51}
52
53
65 float fp1,fp2,hausd;
66 int i,j,ret,npar,nbr,split;
67 MMG5_int ref,rin,rex,br;
68 char *ptr,buf[256],data[256];
69 FILE *in;
70 fpos_t position;
71
72 /* check for parameter file */
73 if (mesh->info.fparam) {
74 strcpy(data,mesh->info.fparam);
75 }
76 else {
77 strcpy(data,mesh->namein);
78 }
79
80 ptr = MMG5_Get_filenameExt(data);
81
82 if ( ptr ) *ptr = '\0';
83 strcat(data,".mmgs");
84
85 in = fopen(data,"rb");
86 if ( !in ) {
87 if ( !mesh->info.fparam ) {
88 sprintf(data,"%s","DEFAULT.mmgs");
89 in = fopen(data,"rb");
90 if ( !in )
91 return 1;
92 }
93 else if (mesh->info.fparam ) {
94 fprintf(stderr," ** In %s: %s file NOT FOUND. \n",__func__,data);
95 fprintf(stdout," ## ERROR: UNABLE TO LOAD PARAMETER FILE.\n");
96 return 0;
97 }
98 }
99 if ( mesh->info.imprim >= 0 ) {
100 fprintf(stdout,"\n %%%% %s OPENED\n",data);
101 }
102
103 /* read parameters */
104 mesh->info.npar = 0;
105 while ( !feof(in) ) {
106 /* scan line */
107 ret = fscanf(in,"%255s",data);
108 if ( !ret || feof(in) ) break;
109 for (i=0; (size_t)i<strlen(data); i++) data[i] = tolower(data[i]);
110
111 /* Read user-defined references for the LS mode */
112 if ( !strcmp(data,"lsreferences") ) {
113 ret = fscanf(in,"%d",&npar);
114 if ( !ret ) {
115 fprintf(stderr," %%%% Wrong format for lsreferences: %d\n",npar);
116 return 0;
117 }
118
120 return 0;
121 }
122 for (i=0; i<mesh->info.nmat; i++) {
123 MMG_FSCANF(in,"%" MMG5_PRId "",&ref);
124 fgetpos(in,&position);
125 MMG_FSCANF(in,"%255s",data);
126 split = MMG5_MMAT_NoSplit;
127 rin = rex = ref;
128 if ( strcmp(data,"nosplit") ) {
129 fsetpos(in,&position);
130 split = MMG5_MMAT_Split;
131 MMG_FSCANF(in,"%" MMG5_PRId "",&rin);
132 MMG_FSCANF(in,"%" MMG5_PRId "",&rex);
133 }
134 if ( !MMGS_Set_multiMat(mesh,met,ref,split,rin,rex) ) {
135 return 0;
136 }
137 }
138 }
139 /* Read user-defined local parameters and store them in the structure info->par */
140 else if ( !strcmp(data,"parameters") ) {
141 MMG_FSCANF(in,"%d",&npar);
142
143 if ( !ret ) {
144 fprintf(stderr," %%%% Wrong format for parameters: %d\n",npar);
145 return 0;
146 }
147 else if ( npar > MMG5_LPARMAX ) {
148 fprintf(stderr," %%%% Too many local parameters %d. Abort\n",npar);
149 return 0;
150 }
151
152 /* Allocate memory and fill the info->par table (adding one, corresponding to the command line data) */
153 if ( npar ) {
155 return 0;
156
157 for (i=0; i<mesh->info.npar; i++) {
158 MMG_FSCANF(in,"%" MMG5_PRId " %255s ",&ref,buf);
159 ret = fscanf(in,"%f %f %f",&fp1,&fp2,&hausd);
160
161 if ( !ret ) {
162 fprintf(stderr," %%%% Wrong format: %s\n",buf);
163 return 0;
164 }
165
166 for (j=0; (size_t)j<strlen(buf); j++) buf[j] = tolower(buf[j]);
167
168 if ( !strcmp(buf,"triangles") || !strcmp(buf,"triangle") ) {
169 if ( !MMGS_Set_localParameter(mesh,met,MMG5_Triangle,ref,fp1,fp2,hausd) ) {
170 return 0;
171 }
172 }
173 else {
174 fprintf(stdout," %%%% Wrong format: %s\n",buf);
175 return 0;
176 }
177 }
178 }
179 }
180 /* Read user-defined references where connected components should stay attached in ls mode */
181 else if ( !strcmp(data,"lsbasereferences") ) {
182 MMG_FSCANF(in,"%d",&nbr);
184 return 0;
185
186 for (i=0; i<mesh->info.nbr; i++) {
187 MMG_FSCANF(in,"%" MMG5_PRId "",&br);
188 if ( !MMGS_Set_lsBaseReference(mesh,met,br) ) {
189 return 0;
190 }
191 }
192 }
193 else {
194 fprintf(stderr," %%%% Wrong format: %s\n",data);
195 return 0;
196 }
197 }
198
199 fclose(in);
200 return 1;
201}
202
211static inline
213 MMG5_iNode *triRefs;
214 int npar;
215 char *ptr,data[MMG5_FILESTR_LGTH];
216 FILE *out;
217
218 strcpy(data,mesh->namein);
219
220 ptr = MMG5_Get_filenameExt(data);
221
222 if ( ptr ) *ptr = '\0';
223
224 strcat(data,".mmgs");
225
227 if ( !(out = fopen(data,"wb")) ) {
228 fprintf(stderr,"\n ** UNABLE TO OPEN %s.\n",data);
229 return 0;
230 }
231
232 fprintf(stdout,"\n %%%% %s OPENED\n",data);
233
234
235 npar = MMG5_countLocalParamAtTri( mesh, &triRefs);
236
237 if ( !npar ) {
238 fclose(out);
239 return 0;
240 }
241
242 fprintf(out,"parameters\n %d\n",npar);
243
244 if ( !MMG5_writeLocalParamAtTri(mesh, triRefs, out) ) {
245 fclose(out);
246 return 0;
247 }
248
249 fclose(out);
250 fprintf(stdout," -- WRITING COMPLETED\n");
251
252 return 1;
253}
254
269static inline
271 mytime ctim[TIMEMAX];
272 double hsiz;
273 char stim[32];
274
276
277 signal(SIGABRT,MMG5_excfun);
278 signal(SIGFPE,MMG5_excfun);
279 signal(SIGILL,MMG5_excfun);
280 signal(SIGSEGV,MMG5_excfun);
281 signal(SIGTERM,MMG5_excfun);
282 signal(SIGINT,MMG5_excfun);
283
284 tminit(ctim,TIMEMAX);
285 chrono(ON,&(ctim[0]));
286
287 if ( mesh->info.npar ) {
288 fprintf(stderr,"\n ## Error: %s: "
289 "unable to save of a local parameter file with"
290 " the default parameters values because local parameters"
291 " are provided.\n",__func__);
293 }
294
295
296 if ( mesh->info.imprim > 0 ) fprintf(stdout,"\n -- INPUT DATA\n");
297 /* load data */
298 chrono(ON,&(ctim[1]));
299
300 if ( met && met->np && (met->np != mesh->np) ) {
301 fprintf(stderr,"\n ## WARNING: WRONG SOLUTION NUMBER. IGNORED\n");
302 MMG5_DEL_MEM(mesh,met->m);
303 met->np = 0;
304 }
305
306 if ( sol && sol->np && (sol->np != mesh->np) ) {
307 fprintf(stderr,"\n ## WARNING: WRONG SOLUTION NUMBER. IGNORED\n");
309 sol->np = 0;
310 }
311
312 chrono(OFF,&(ctim[1]));
313 printim(ctim[1].gdif,stim);
314 if ( mesh->info.imprim > 0 )
315 fprintf(stdout," -- INPUT DATA COMPLETED. %s\n",stim);
316
317 /* analysis */
318 chrono(ON,&(ctim[2]));
319 MMGS_setfunc(mesh,met);
320
321 if ( mesh->info.imprim > 0 ) {
322 fprintf(stdout,"\n -- DEFAULT PARAMETERS COMPUTATION\n");
323 }
324
325 /* scaling mesh and hmin/hmax computation*/
327
328 /* Specific meshing + hmin/hmax update */
329 if ( mesh->info.optim ) {
330 if ( !MMGS_doSol(mesh,met) ) {
333 }
334 }
335
336 if ( mesh->info.hsiz > 0. ) {
337 if ( !MMG5_Compute_constantSize(mesh,met,&hsiz) ) {
340 }
341 }
342
343 /* unscaling mesh */
345
346 /* Save the local parameters file */
347 mesh->mark = 0;
348 if ( !MMGS_writeLocalParam(mesh) ) {
349 fprintf(stderr,"\n ## Error: %s: unable to save the local parameters file.\n"
350 " Exit program.\n",__func__);
352 }
353
355}
356
357
358int main(int argc,char *argv[]) {
360 MMG5_pSol sol,met,ls;
361 int ier,ierSave,fmtin,fmtout;
362 char stim[32],*ptr;
363
364 /* Select line buffering even if the output is not a terminal and force stderr
365 * and stdout to print in the same order as the events */
366 setvbuf(stdout, NULL, _IOLBF, 1024);
367 setvbuf(stderr, NULL, _IOLBF, 1024);
368
369 /* Version info */
370#ifndef MMG_COMPARABLE_OUTPUT
371 fprintf(stdout," -- MMGS, Release %s (%s) \n",MMG_VERSION_RELEASE,MMG_RELEASE_DATE);
372 fprintf(stdout," %s\n",MMG_COPYRIGHT);
373 fprintf(stdout," %s %s\n",__DATE__,__TIME__);
374#endif
375
377
378 /* Print timer at exit */
379 atexit(MMG5_endcod);
380
382 chrono(ON,&MMG5_ctim[0]);
383
384 /* assign default values */
385 mesh = NULL;
386 met = NULL;
387 ls = NULL;
388
391 MMG5_ARG_ppLs,&ls,
393
394 /* reset default values for file names */
397 MMG5_ARG_ppLs,&ls,
399
400 /* command line */
401 if ( !MMGS_parsar(argc,argv,mesh,met,ls) ) return MMG5_STRONGFAILURE;
402
403 /* load data */
404 if ( mesh->info.imprim >= 0 )
405 fprintf(stdout,"\n -- INPUT DATA\n");
406 chrono(ON,&MMG5_ctim[1]);
407
408 /* For each mode: pointer over the solution structure to load */
409 if ( mesh->info.iso ) {
410 sol = ls;
411 }
412 else {
413 sol = met;
414 }
415
416 /* read mesh file */
419
420 switch ( fmtin ) {
421
422 case ( MMG5_FMT_GmshASCII ): case ( MMG5_FMT_GmshBinary ):
424 break;
425
426 case ( MMG5_FMT_VtkVtp ):
428 break;
429
430 case ( MMG5_FMT_VtkVtu ):
432 break;
433
434 case ( MMG5_FMT_VtkVtk ):
436 break;
437
438 case ( MMG5_FMT_MeditASCII ): case ( MMG5_FMT_MeditBinary ):
440 if ( ier < 1 ) { break; }
441
442 /* read level-set in iso mode */
443 if ( mesh->info.iso || mesh->info.isosurf ) {
444 if ( MMGS_loadSol(mesh,ls,ls->namein) < 1 ) {
445 fprintf(stderr,"\n ## ERROR: UNABLE TO LOAD LEVEL-SET.\n");
447 }
448 if ( met->namein ) {
449 if ( MMGS_loadSol(mesh,met,met->namein) < 1 ) {
450 fprintf(stdout," ## ERROR: UNABLE TO LOAD METRIC.\n");
452 }
453 }
454 else {
455 /* Give a name to the metric if not provided */
456 if ( !MMGS_Set_inputSolName(mesh,met,"") )
457 fprintf(stdout," ## ERROR: UNABLE TO GIVE A NAME TO THE METRIC.\n");
458 }
459 }
460 else {
461 /* read metric if any */
462 if ( MMGS_loadSol(mesh,met,met->namein) == -1 ) {
463 fprintf(stderr,"\n ## ERROR: WRONG DATA TYPE OR WRONG SOLUTION NUMBER.\n");
465 }
466 }
467 break;
468
469 default:
470 fprintf(stderr," ** I/O AT FORMAT %s NOT IMPLEMENTD.\n",MMG5_Get_formatName(fmtin) );
472 }
473
474 if ( ier<1 ) {
475 if ( ier==0 ) {
476 fprintf(stderr," ** %s NOT FOUND.\n",mesh->namein);
477 fprintf(stderr," ** UNABLE TO OPEN INPUT FILE.\n");
478 }
480 }
481
482 /* Check input data */
483 if ( mesh->info.iso || mesh->info.isosurf ) {
484 if ( ls->m==NULL ) {
485 fprintf(stderr,"\n ## ERROR: NO ISOVALUE DATA.\n");
487 }
488 }
489
490 /* Read parameter file */
491 if ( !MMGS_parsop(mesh,met) )
493
494 chrono(OFF,&MMG5_ctim[1]);
495
496 if ( mesh->info.imprim >= 0 ) {
497 printim(MMG5_ctim[1].gdif,stim);
498 fprintf(stdout," -- DATA READING COMPLETED. %s\n",stim);
499 }
500
501 if ( mesh->mark ) {
502 /* Save a local parameters file containing the default parameters */
503 ier = MMGS_defaultOption(mesh,met,ls);
505 }
506 else if ( mesh->info.iso || mesh->info.isosurf ) {
507 ier = MMGS_mmgsls(mesh,ls,met);
508 }
509 else {
510 if ( met && ls && met->namein && ls->namein ) {
511 fprintf(stdout,"\n ## ERROR: IMPOSSIBLE TO PROVIDE BOTH A METRIC"
512 " AND A SOLUTION IN ADAPTATION MODE.\n");
514 }
515
516 ier = MMGS_mmgslib(mesh,met);
517 }
518
519 if ( ier != MMG5_STRONGFAILURE ) {
520 chrono(ON,&MMG5_ctim[1]);
521 if ( mesh->info.imprim > 0 )
522 fprintf(stdout,"\n -- WRITING DATA FILE %s\n",mesh->nameout);
523
525 fmtout = MMG5_Get_format(ptr,fmtin);
526
527 switch ( fmtout ) {
528 case ( MMG5_FMT_GmshASCII ): case ( MMG5_FMT_GmshBinary ):
529 ierSave = MMGS_saveMshMesh(mesh,met,mesh->nameout);
530 break;
531 case ( MMG5_FMT_VtkVtp ):
532 ierSave = MMGS_saveVtpMesh(mesh,met,mesh->nameout);
533 break;
534 case ( MMG5_FMT_VtkVtu ):
535 ierSave = MMGS_saveVtuMesh(mesh,met,mesh->nameout);
536 break;
537 case ( MMG5_FMT_VtkVtk ):
538 ierSave = MMGS_saveVtkMesh(mesh,met,mesh->nameout);
539 break;
540 default:
541 ierSave = MMGS_saveMesh(mesh,mesh->nameout);
542 if ( !ierSave ) {
544 }
545 if ( met && met->np ) {
546 ierSave = MMGS_saveSol(mesh,met,met->nameout);
547 }
548 break;
549 }
550
551 if ( !ierSave )
553
554 chrono(OFF,&MMG5_ctim[1]);
555 if ( mesh->info.imprim > 0 ) fprintf(stdout," -- WRITING COMPLETED\n");
556 }
557
558 /* release memory */
559 /* free mem */
561
562 return 0;
563}
int MMG5_Compute_constantSize(MMG5_pMesh mesh, MMG5_pSol met, double *hsiz)
const char * MMG5_Get_formatName(enum MMG5_Format fmt)
int MMG5_Get_format(char *ptr, int fmt)
char * MMG5_Get_filenameExt(char *filename)
int MMGS_Set_iparameter(MMG5_pMesh mesh, MMG5_pSol sol, int iparam, MMG5_int val)
set an integer parameter of the remesher
int MMGS_Set_localParameter(MMG5_pMesh mesh, MMG5_pSol sol, int typ, MMG5_int ref, double hmin, double hmax, double hausd)
set a local parameter
int MMGS_Init_mesh(const int starter,...)
Initialize a mesh structure and optionally the associated solution and metric structures.
int MMGS_Set_inputSolName(MMG5_pMesh mesh, MMG5_pSol sol, const char *solin)
Set the name of the input solution file.
int MMGS_Set_lsBaseReference(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int br)
Set a new level-set base reference.
int MMGS_Set_multiMat(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int ref, int split, MMG5_int rin, MMG5_int rout)
Set the reference mapping for the elements of reference ref in level-set discretization mode.
int MMGS_Free_names(const int starter,...)
Structure deallocations before return.
int ier
MMG5_pMesh MMG5_pSol * sol
MMG5_pMesh * mesh
program main
Example for using mmglib (basic use)
Definition: main.F90:6
int MMG5_countLocalParamAtTri(MMG5_pMesh mesh, MMG5_iNode **bdryRefs)
Definition: apptools.c:142
int MMG5_writeLocalParamAtTri(MMG5_pMesh mesh, MMG5_iNode *bdryRefs, FILE *out)
Definition: apptools.c:186
void tminit(mytime *t, int maxtim)
Initialize mytime object.
Definition: chrono.c:120
void printim(double elps, char *stim)
Print real time.
Definition: chrono.c:160
void chrono(int cmode, mytime *ptt)
Function to measure time.
Definition: chrono.c:49
#define TIMEMAX
int MMGS_loadSol(MMG5_pMesh mesh, MMG5_pSol met, const char *filename)
Load a metric field (or other solution) in medit's .sol format.
Definition: inout_s.c:1312
int MMGS_loadMshMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
Load a mesh and possibly a solution in .msh format from file.
Definition: inout_s.c:645
int MMGS_saveMesh(MMG5_pMesh mesh, const char *filename)
Save a mesh in .mesh or .meshb format.
Definition: inout_s.c:842
int MMGS_saveMshMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
Write mesh and optionally one data field in MSH file format (.msh extension).
Definition: inout_s.c:1302
int MMGS_saveSol(MMG5_pMesh mesh, MMG5_pSol met, const char *filename)
Write an isotropic or anisotropic metric in medit file format.
Definition: inout_s.c:1483
int MMGS_loadMesh(MMG5_pMesh mesh, const char *filename)
Load a mesh (in .mesh/.mesb format) from file.
Definition: inout_s.c:41
int MMGS_loadVtuMesh(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pSol sol, const char *filename)
Load a mesh and possibly data in VTU (VTK) format from file.
Definition: inoutcpp_s.cpp:235
int MMGS_saveVtuMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
Write mesh and optionally one data field vtu Vtk file format (.vtu extension).
Definition: inoutcpp_s.cpp:315
int MMGS_loadVtpMesh(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pSol sol, const char *filename)
Load a mesh and optionally a solution in VTP (VTK) format from file.
Definition: inoutcpp_s.cpp:75
int MMGS_saveVtkMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
Write mesh and optionally one data field in Vtk file format (.vtk extension).
Definition: inoutcpp_s.cpp:350
int MMGS_loadVtkMesh(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pSol sol, const char *filename)
Load a mesh and possibly data in VTK format from file.
Definition: inoutcpp_s.cpp:155
int MMGS_saveVtpMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
Save a mesh and optionally one data field in VTP format.
Definition: inoutcpp_s.cpp:385
LIBMMG_CORE_EXPORT int MMG5_unscaleMesh(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pSol ls)
Definition: scalem.c:689
LIBMMG_CORE_EXPORT int MMG5_scaleMesh(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pSol ls)
Definition: scalem.c:649
int MMGS_mmgsls(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_pSol umet)
Main "program" for level-set discretization.
Definition: libmmgs.c:298
int MMGS_mmgslib(MMG5_pMesh mesh, MMG5_pSol met)
Main "program" for mesh adaptation.
Definition: libmmgs.c:545
void MMGS_Set_commonFunc(void)
Set common function pointers between mmgs and mmg3d to the matching mmgs functions.
Definition: libmmgs.c:732
API headers and documentation for the mmgs library.
LIBMMGS_EXPORT int MMGS_parsar(int argc, char *argv[], MMG5_pMesh mesh, MMG5_pSol met, MMG5_pSol sol)
Store command line arguments.
LIBMMGS_EXPORT int(* MMGS_doSol)(MMG5_pMesh mesh, MMG5_pSol met)
Compute an isotropic size map according to the mean of the length of the edges passing through a vert...
Definition: mmgsexterns.c:9
LIBMMGS_EXPORT void MMGS_setfunc(MMG5_pMesh mesh, MMG5_pSol met)
Set function pointers for caltet, lenedg, defsiz and gradsiz.
Definition: libmmgs_tools.c:43
@ MMGS_IPARAM_numberOfLocalParam
Definition: libmmgs.h:124
@ MMGS_IPARAM_numberOfLSBaseReferences
Definition: libmmgs.h:125
@ MMGS_IPARAM_numberOfMat
Definition: libmmgs.h:126
#define MMGS_RETURN_AND_FREE(mesh, met, ls, val)
#define MMG5_ARG_ppMesh
Definition: libmmgtypes.h:102
#define MMG5_ARG_end
Definition: libmmgtypes.h:179
#define MMG5_ARG_ppLs
Definition: libmmgtypes.h:112
#define MMG5_MMAT_Split
Definition: libmmgtypes.h:211
#define MMG5_STRONGFAILURE
Definition: libmmgtypes.h:65
#define MMG5_LOWFAILURE
Definition: libmmgtypes.h:57
#define MMG5_SUCCESS
Definition: libmmgtypes.h:49
@ MMG5_FMT_MeditBinary
Definition: libmmgtypes.h:242
@ MMG5_FMT_VtkVtk
Definition: libmmgtypes.h:249
@ MMG5_FMT_GmshBinary
Definition: libmmgtypes.h:244
@ MMG5_FMT_GmshASCII
Definition: libmmgtypes.h:243
@ MMG5_FMT_MeditASCII
Definition: libmmgtypes.h:241
@ MMG5_FMT_VtkVtp
Definition: libmmgtypes.h:248
@ MMG5_FMT_VtkVtu
Definition: libmmgtypes.h:247
#define MMG5_ARG_start
Definition: libmmgtypes.h:93
#define MMG5_MMAT_NoSplit
Definition: libmmgtypes.h:203
@ MMG5_Triangle
Definition: libmmgtypes.h:232
#define MMG5_ARG_ppMet
Definition: libmmgtypes.h:122
#define _LIBMMG5_RETURN(mesh, sol, met, val)
static void MMG5_excfun(int sigid)
#define MMG5_LPARMAX
#define MMG5_FILESTR_LGTH
#define MMG_FSCANF(stream, format,...)
#define MMG5_DEL_MEM(mesh, ptr)
static int MMGS_defaultOption(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pSol sol)
Definition: mmgs.c:270
static int MMGS_parsop(MMG5_pMesh mesh, MMG5_pSol met)
Definition: mmgs.c:64
static int MMGS_writeLocalParam(MMG5_pMesh mesh)
Definition: mmgs.c:212
mytime MMG5_ctim[TIMEMAX]
Definition: mmgs.c:39
static void MMG5_endcod(void)
Definition: mmgs.c:45
int8_t iso
Definition: libmmgtypes.h:541
double hsiz
Definition: libmmgtypes.h:525
int8_t isosurf
Definition: libmmgtypes.h:542
char * fparam
Definition: libmmgtypes.h:555
uint8_t optim
Definition: libmmgtypes.h:553
MMG mesh structure.
Definition: libmmgtypes.h:613
MMG5_Info info
Definition: libmmgtypes.h:659
char * nameout
Definition: libmmgtypes.h:661
MMG5_int mark
Definition: libmmgtypes.h:626
MMG5_int np
Definition: libmmgtypes.h:620
char * namein
Definition: libmmgtypes.h:660
char * nameout
Definition: libmmgtypes.h:683
char * namein
Definition: libmmgtypes.h:682
double * m
Definition: libmmgtypes.h:680
MMG5_int np
Definition: libmmgtypes.h:674
Cell for linked list of integer value.
Chrono object.