Mmg
Simplicial remeshers (mesh adaptation, isovalue discretization, lagrangian movement)
main_optim.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/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
34
35#include <assert.h>
36#include <stdio.h>
37#include <stdlib.h>
38#include <signal.h>
39#include <string.h>
40#include <ctype.h>
41#include <math.h>
42#include <float.h>
43
45// if the header file is in the "include" directory
46// #include "libmmgs.h"
47// if the header file is in "include/mmg/mmgs"
48#include "mmg/mmgs/libmmgs.h"
49
50int main(int argc,char *argv[]) {
51 MMG5_pMesh mmgMesh;
52 MMG5_pSol mmgLs,mmgMet;
53 int ier;
54 char *inname,*lsname,*outname;
55
56 fprintf(stdout," -- TEST MMGSLS \n");
57
58 if ( argc != 4 ) {
59 printf(" Usage: %s meshfile lsfile meshout\n",argv[0]);
60 return(1);
61 }
62
63 /* Name and path of the mesh files */
64 inname = (char *) calloc(strlen(argv[1]) + 1, sizeof(char));
65 if ( inname == NULL ) {
66 perror(" ## Memory problem: calloc");
67 exit(EXIT_FAILURE);
68 }
69 strcpy(inname,argv[1]);
70
71 lsname = (char *) calloc(strlen(argv[2]) + 1, sizeof(char));
72 if ( lsname == NULL ) {
73 perror(" ## Memory problem: calloc");
74 exit(EXIT_FAILURE);
75 }
76 strcpy(lsname,argv[2]);
77
78
79 outname = (char *) calloc(strlen(argv[3]) + 1, sizeof(char));
80 if ( outname == NULL ) {
81 perror(" ## Memory problem: calloc");
82 exit(EXIT_FAILURE);
83 }
84 strcpy(outname,argv[3]);
85
87 /* args of InitMesh:
88 * MMG5_ARG_start: we start to give the args of a variadic func
89 * MMG5_ARG_ppMesh: next arg will be a pointer over a MMG5_pMesh
90 * &mmgMesh: pointer toward your MMG5_pMesh (that store your mesh)
91 * MMG5_ARG_ppLs: next arg will be a pointer over a MMG5_pSol storing a level-set
92 * &mmgLs: pointer toward your MMG5_pSol (that store your level-set)
93 */
94 mmgMesh = NULL;
95 mmgLs = NULL;
96 mmgMet = NULL;
98 MMG5_ARG_ppMesh,&mmgMesh,MMG5_ARG_ppLs,&mmgLs,
99 MMG5_ARG_ppMet,&mmgMet,
101
103 /* Ask for level set discretization: note that it is important to do this step
104 * here because in iso mode, some filters are applied at mesh loading */
105 if ( MMGS_Set_iparameter(mmgMesh,NULL,MMGS_IPARAM_iso, 1) != 1 )
106 exit(EXIT_FAILURE);
107
108 /* Ask for optim mode: compute the mean of input edge lengths */
109 if ( MMGS_Set_iparameter(mmgMesh,NULL,MMGS_IPARAM_optim, 1) != 1 )
110 exit(EXIT_FAILURE);
111
112 /* Ask to do this with anisotropic metric (unit tensor metric is computed) */
113 if ( MMGS_Set_iparameter(mmgMesh,NULL,MMGS_IPARAM_anisosize, 1) != 1 )
114 exit(EXIT_FAILURE);
115
119
121 if ( MMGS_loadMesh(mmgMesh,inname) != 1 ) exit(EXIT_FAILURE);
122
127 if ( MMGS_loadSol(mmgMesh,mmgLs,lsname) != 1 )
128 exit(EXIT_FAILURE);
129
131 if ( MMGS_Chk_meshData(mmgMesh,mmgLs) != 1 ) exit(EXIT_FAILURE);
132
136
137
139
142 ier = MMGS_mmgsls(mmgMesh,mmgLs,mmgMet);
143
144 if ( ier == MMG5_STRONGFAILURE ) {
145 fprintf(stdout,"BAD ENDING OF MMGSLS: UNABLE TO SAVE MESH\n");
146 return(ier);
147 } else if ( ier == MMG5_LOWFAILURE )
148 fprintf(stdout,"BAD ENDING OF MMGSLS\n");
149
150 /* (Not mandatory) Automatically save the mesh */
151 if ( MMGS_saveMesh(mmgMesh,outname) != 1 )
152 exit(EXIT_FAILURE);
153
154 /* (Not mandatory) Automatically save the output metric */
155 if ( MMGS_saveSol(mmgMesh,mmgMet,outname) != 1 )
156 exit(EXIT_FAILURE);
157
158 /* 9) free the MMGS5 structures */
160 MMG5_ARG_ppMesh,&mmgMesh,MMG5_ARG_ppLs,&mmgLs,
161 MMG5_ARG_ppMet,&mmgMet,
163
164 free(inname);
165 inname = NULL;
166
167 free(outname);
168 outname = NULL;
169
170 free(lsname);
171 outname = NULL;
172
173 return(ier);
174}
int MMGS_Set_iparameter(MMG5_pMesh mesh, MMG5_pSol sol, int iparam, MMG5_int val)
set an integer parameter of the remesher
int MMGS_Init_mesh(const int starter,...)
Initialize a mesh structure and optionally the associated solution and metric structures.
int MMGS_Free_all(const int starter,...)
Deallocations before return.
int MMGS_Chk_meshData(MMG5_pMesh mesh, MMG5_pSol met)
Check if the numbers of given entities match with mesh and solution size and check mesh data.
int ier
program main
Example for using mmglib (basic use)
Definition main.F90:6
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_saveMesh(MMG5_pMesh mesh, const char *filename)
Save a mesh in .mesh or .meshb format.
Definition inout_s.c:842
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_mmgsls(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_pSol umet)
Main "program" for level-set discretization.
Definition libmmgs.c:298
@ MMGS_IPARAM_optim
Definition libmmgs.h:118
@ MMGS_IPARAM_anisosize
Definition libmmgs.h:129
@ MMGS_IPARAM_iso
Definition libmmgs.h:114
#define MMG5_ARG_ppMesh
#define MMG5_ARG_end
#define MMG5_ARG_ppLs
#define MMG5_STRONGFAILURE
Definition libmmgtypes.h:65
#define MMG5_LOWFAILURE
Definition libmmgtypes.h:57
MMG5_Sol * MMG5_pSol
MMG5_Mesh * MMG5_pMesh
#define MMG5_ARG_start
Definition libmmgtypes.h:93
#define MMG5_ARG_ppMet