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;
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;
97 MMG5_ARG_ppMesh,&mmgMesh,MMG5_ARG_ppLs,&mmgLs,
99
101 /* Ask for level set discretization: note that it is important to do this step
102 * here because in iso mode, some filters are applied at mesh loading */
103 if ( MMGS_Set_iparameter(mmgMesh,NULL,MMGS_IPARAM_iso, 1) != 1 )
104 exit(EXIT_FAILURE);
105
106 /* Ask for optim mode: compute the mean of input edge lengths */
107 if ( MMGS_Set_iparameter(mmgMesh,NULL,MMGS_IPARAM_optim, 1) != 1 )
108 exit(EXIT_FAILURE);
109
110 /* Ask to do this with anisotropic metric */
111 if ( MMGS_Set_iparameter(mmgMesh,NULL,MMGS_IPARAM_anisosize, 1) != 1 )
112 exit(EXIT_FAILURE);
113
117
119 if ( MMGS_loadMesh(mmgMesh,inname) != 1 ) exit(EXIT_FAILURE);
120
125 if ( MMGS_loadSol(mmgMesh,mmgLs,lsname) != 1 )
126 exit(EXIT_FAILURE);
127
129 if ( MMGS_Chk_meshData(mmgMesh,mmgLs) != 1 ) exit(EXIT_FAILURE);
130
134
135
137
140 ier = MMGS_mmgsls(mmgMesh,mmgLs,NULL);
141
142 if ( ier == MMG5_STRONGFAILURE ) {
143 fprintf(stdout,"BAD ENDING OF MMGSLS: UNABLE TO SAVE MESH\n");
144 return(ier);
145 } else if ( ier == MMG5_LOWFAILURE )
146 fprintf(stdout,"BAD ENDING OF MMGSLS\n");
147
148 /* (Not mandatory) Automatically save the mesh */
149 if ( MMGS_saveMesh(mmgMesh,outname) != 1 )
150 exit(EXIT_FAILURE);
151
152 /* 9) free the MMGS5 structures */
154 MMG5_ARG_ppMesh,&mmgMesh,MMG5_ARG_ppLs,&mmgLs,
156
157 free(inname);
158 inname = NULL;
159
160 free(outname);
161 outname = NULL;
162
163 free(lsname);
164 outname = NULL;
165
166 return(ier);
167}
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_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