Mmg
Simplicial remeshers (mesh adaptation, isovalue discretization, lagrangian movement)
libmmg3d_private.h
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
24#ifndef LIBMMG3D_PRIVATE_H
25#define LIBMMG3D_PRIVATE_H
26
28#include "PRoctree_3d_private.h"
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
35#define MMG5_RETURN_AND_FREE(mesh,met,ls,disp,val)do \
36 { \
37 if ( !MMG3D_Free_all(MMG5_ARG_start, \
38 MMG5_ARG_ppMesh,&mesh,MMG5_ARG_ppMet,&met, \
39 MMG5_ARG_ppLs,&ls,MMG5_ARG_ppDisp,&disp, \
40 MMG5_ARG_end) ) { \
41 return MMG5_LOWFAILURE; \
42 } \
43 return val; \
44 }while(0)
45
48#define MMG3D_POINT_REALLOC(mesh,sol,ip,wantedGap,law,o,tag,src ) do \
49 { \
50 MMG5_int klink,oldnpmax; \
51 assert ( mesh && mesh->point ); \
52 \
53 oldnpmax = mesh->npmax; \
54 MMG5_TAB_RECALLOC(mesh,mesh->point,mesh->npmax,wantedGap,MMG5_Point, \
55 "larger point table",law); \
56 \
57 mesh->npnil = mesh->np+1; \
58 for (klink=mesh->npnil; klink<mesh->npmax-1; klink++) \
59 mesh->point[klink].tmp = klink+1; \
60 \
61 /* solution */ \
62 if ( sol ) { \
63 if ( sol->m ) { \
64 MMG5_ADD_MEM(mesh,(sol->size*(mesh->npmax-sol->npmax))*sizeof(double), \
65 "larger solution", \
66 MMG5_SAFE_RECALLOC(mesh->point,mesh->npmax+1,oldnpmax+1,MMG5_Point,,); \
67 mesh->memCur -= (mesh->npmax - oldnpmax)*sizeof(MMG5_Point); \
68 mesh->npmax = oldnpmax; \
69 mesh->np = mesh->npmax-1; \
70 mesh->npnil = 0; \
71 law); \
72 MMG5_SAFE_REALLOC(sol->m,sol->size*(sol->npmax+1), \
73 sol->size*(mesh->npmax+1), \
74 double,"larger solution", \
75 MMG5_SAFE_RECALLOC(mesh->point,mesh->npmax+1,oldnpmax+1,MMG5_Point,,); \
76 mesh->memCur -= (mesh->npmax - oldnpmax)*sizeof(MMG5_Point); \
77 mesh->npmax = oldnpmax; \
78 mesh->np = mesh->npmax-1; \
79 mesh->npnil = 0; \
80 law); \
81 } \
82 sol->npmax = mesh->npmax; \
83 } \
84 \
85 /* We try again to add the point */ \
86 ip = MMG3D_newPt(mesh,o,tag,src); \
87 if ( !ip ) { law; } \
88 }while(0)
89
90
93#define MMG3D_TETRA_REALLOC(mesh,jel,wantedGap,law ) do \
94 { \
95 MMG5_int klink,oldSiz; \
96 \
97 oldSiz = mesh->nemax; \
98 \
99 int max_factor; \
100 if ( mesh->nprism ) { \
101 /* If mesh contains prisms, we need to compute 5*tet_ids to hash faces in
102 * chkBdryTria so we can't create a mesh larger than INT32_MAX/5 */ \
103 max_factor = 5; \
104 } \
105 else { \
106 /* With only tetra, maximal number of tetra is INT32_MAX/4 */ \
107 max_factor = 4; \
108 } \
109 MMG5_CHK_INT32_OVERFLOW(wantedGap,oldSiz,max_factor,max_factor+1,law);\
110 \
111 MMG5_TAB_RECALLOC(mesh,mesh->tetra,mesh->nemax,wantedGap,MMG5_Tetra, \
112 "larger tetra table",law); \
113 \
114 mesh->nenil = mesh->ne+1; \
115 for (klink=mesh->nenil; klink<mesh->nemax-1; klink++) \
116 mesh->tetra[klink].v[3] = klink+1; \
117 \
118 if ( mesh->adja ) { \
119 /* adja table */ \
120 MMG5_ADD_MEM(mesh,4*(mesh->nemax-oldSiz)*sizeof(MMG5_int), \
121 "larger adja table",law); \
122 MMG5_SAFE_RECALLOC(mesh->adja,4*oldSiz+5,4*mesh->nemax+5,MMG5_int \
123 ,"larger adja table",law); \
124 } \
125 \
126 /* We try again to add the point */ \
127 jel = MMG3D_newElt(mesh); \
128 if ( !jel ) {law;} \
129 }while(0)
130
131/* numerical accuracy */
132#define MMG3D_ALPHAD 20.7846096908265 /* 12*sqrt(3) */
133#define MMG3D_LLONG 2.5
134#define MMG3D_LSHRT 0.3
135#define MMG3D_LOPTL 1.3
136#define MMG3D_LOPTS 0.6
138#define MMG3D_SWAP06 0.0288675 /* 0.6/MMG3D_ALPHAD */
139#define MMG3D_SSWAPIMPROVE 1.053
140#define MMG3D_LSWAPIMPROVE 1.1
141#define MMG3D_DET2VOL 0.1666666666666667 /* 1/6 */
143#define MMG3D_BADKAL 0.2
144#define MMG3D_MAXKAL 1.
145
147#define MMG3D_NPMAX 1000000 //200000
148#define MMG3D_NAMAX 200000 //40000
149#define MMG3D_NTMAX 2000000 //400000
150#define MMG3D_NEMAX 6000000 //1200000
152#define MMG3D_SHORTMAX 0x7fff
154#define MMG3D_VOLFRAC 1.e-5
155#define MMG3D_MOVSTEP 0.1
156
158static const uint8_t MMG5_inxt3[7] = { 1,2,3,0,1,2,3 };
160static const uint8_t MMG5_iprv3[7] = { 3,0,1,2,3,0,1 };
162static const uint8_t MMG5_idir[4][3] = { {1,2,3}, {0,3,2}, {0,1,3}, {0,2,1} };
163/* \var idirinv[i][j]: num of the jth point in the ith face */
164static const int8_t MMG5_idirinv[4][4] = {{-1,0,1,2},{0,-1,2,1},{0,1,-1,2},{0,2,1,-1}};
166static const int8_t MMG5_iarf[4][3] = { {5,4,3}, {5,1,2}, {4,2,0}, {3,0,1} };
168static const int8_t MMG5_iarfinv[4][6] = { {-1,-1,-1,2,1,0}, {-1,1,2,-1,-1,0},{2,-1,1,-1,0,-1},{1,2,-1,0,-1,-1}};
170static const uint8_t MMG5_iare[6][2] = { {0,1}, {0,2}, {0,3}, {1,2}, {1,3}, {2,3} };
172static const uint8_t MMG5_ifar[6][2] = { {2,3}, {1,3}, {1,2}, {0,3}, {0,2}, {0,1} };
174static const uint8_t MMG5_isar[6][2] = { {2,3}, {3,1}, {1,2}, {0,3}, {2,0}, {0,1} };
176static const uint8_t MMG5_arpt[4][3] = { {0,1,2}, {0,4,3}, {1,3,5}, {2,5,4} };
177
179static const uint8_t MMG5_idir_pr[5][4] = { {0,1,2,0},{3,5,4,3},{1,4,5,2},{0,2,5,3},{0,3,4,1} };
181static const uint8_t MMG5_iarf_pr[5][5] = { {0,1,3,0}, {6,8,7,6}, {3,5,8,4}, {5,1,2,7},{0,4,6,2} };
182
199static const uint8_t MMG5_permedge[12][6] = {
200 {0,1,2,3,4,5}, {1,2,0,5,3,4}, {2,0,1,4,5,3}, {0,4,3,2,1,5},
201 {3,0,4,1,5,2}, {4,3,0,5,2,1}, {1,3,5,0,2,4}, {3,5,1,4,0,2},
202 {5,1,3,2,4,0}, {2,5,4,1,0,3}, {4,2,5,0,3,1}, {5,4,2,3,1,0} };
203
204/* prototypes */
205int MMG3D_tetraQual(MMG5_pMesh mesh, MMG5_pSol met,int8_t metRidTyp);
206extern int MMG5_directsurfball(MMG5_pMesh mesh, MMG5_int ip, MMG5_int *list, int ilist, double n[3]);
207
208int MMG3D_Init_mesh_var( va_list argptr );
209int MMG3D_Free_all_var( va_list argptr );
210int MMG3D_Free_structures_var( va_list argptr );
211int MMG3D_Free_names_var( va_list argptr );
213MMG5_int MMG3D_newPt(MMG5_pMesh mesh,double c[3],int16_t tag,MMG5_int src);
215int MMG3D_delElt(MMG5_pMesh mesh,MMG5_int iel);
216void MMG3D_delPt(MMG5_pMesh mesh,MMG5_int ip);
223extern int MMG5_BezierTgt(double c1[3],double c2[3],double n1[3],double n2[3],double t1[3],double t2[3]);
224extern double MMG5_BezierGeod(double c1[3], double c2[3], double t1[3], double t2[3]);
225int MMG3D_bezierInt(MMG5_pBezier pb,double uv[2],double o[3],double no[3],double to[3]);
226extern int MMG5_BezierReg(MMG5_pMesh mesh,MMG5_int ip0, MMG5_int ip1, double s, double v[3], double *o, double *no);
227extern int MMG5_BezierRef(MMG5_pMesh mesh,MMG5_int ip0, MMG5_int ip1, double s, double *o, double *no, double *to);
228extern int MMG5_BezierEdge(MMG5_pMesh mesh,MMG5_int ip0, MMG5_int ip1, double b0[3], double b1[3],int8_t isrid, double v[3]);
229extern int MMG5_BezierRidge(MMG5_pMesh mesh,MMG5_int ip0, MMG5_int ip1, double s, double *o, double *no1, double *no2, double *to);
230extern int MMG5_BezierNom(MMG5_pMesh mesh,MMG5_int ip0,MMG5_int ip1,double s,double *o,double *no,double *to);
231int MMG5_norface(MMG5_pMesh mesh ,MMG5_int k, int iface, double v[3]);
232int MMG3D_findEdge(MMG5_pMesh,MMG5_pTetra,MMG5_int,MMG5_int,MMG5_int,int,int8_t*,int8_t* );
233int MMG5_boulernm (MMG5_pMesh mesh,MMG5_Hash *hash, MMG5_int start, int ip, MMG5_int *ng, MMG5_int *nr,MMG5_int *nm);
234int MMG5_boulenm(MMG5_pMesh mesh, MMG5_int start, int ip, int iface, double n[3],double t[3]);
235int MMG5_boulenmInt(MMG5_pMesh mesh, MMG5_int start, int ip, double t[3]);
236int MMG5_boulevolp(MMG5_pMesh mesh, MMG5_int start, int ip, int64_t * list);
237int MMG5_boulesurfvolpNom(MMG5_pMesh mesh,MMG5_int start,int ip,int iface,int64_t *listv,
238 int *ilistv,MMG5_int *lists,int*ilists,MMG5_int*refmin,MMG5_int*refplus,int isnm);
239int MMG5_boulesurfvolp(MMG5_pMesh mesh,MMG5_int start,int ip,int iface,int64_t *listv,
240 int *ilistv,MMG5_int *lists,int*ilists, int isnm);
241int MMG5_bouletrid(MMG5_pMesh,MMG5_int,int,int,int *,MMG5_int *,int *,MMG5_int *,MMG5_int *,MMG5_int *);
242int MMG5_startedgsurfball(MMG5_pMesh mesh,MMG5_int nump,MMG5_int numq,MMG5_int *list,int ilist);
243int MMG5_srcbdy(MMG5_pMesh mesh,MMG5_int start,int ia);
244int MMG5_coquil(MMG5_pMesh mesh, MMG5_int start, int ia, int64_t * list,int8_t*);
245int MMG5_coquilface(MMG5_pMesh mesh, MMG5_int start,int8_t iface,int,int64_t*,MMG5_int*,MMG5_int*,int);
246int MMG3D_coquilFaceFirstLoop(MMG5_pMesh mesh,MMG5_int start,MMG5_int na,MMG5_int nb,int8_t iface,
247 int8_t ia,int64_t *list,int *ilist,MMG5_int *it1,MMG5_int *it2,
248 MMG5_int *piv,MMG5_int *adj,int8_t *hasadja,int *nbdy,int silent);
249void MMG3D_coquilFaceSecondLoopInit(MMG5_pMesh mesh,MMG5_int piv,int8_t *iface,int8_t *i,
250 int64_t *list,int *ilist,MMG5_int *it1,MMG5_int *pradj,
251 MMG5_int *adj);
252void MMG5_coquilFaceErrorMessage(MMG5_pMesh mesh, MMG5_int k1, MMG5_int k2);
253int16_t MMG5_coquilTravel(MMG5_pMesh,MMG5_int,MMG5_int,MMG5_int*,MMG5_int*,int8_t*,int8_t*);
254int16_t MMG5_openCoquilTravel(MMG5_pMesh,MMG5_int,MMG5_int,MMG5_int*,MMG5_int*,int8_t*,int8_t*);
255int MMG5_settag(MMG5_pMesh,MMG5_int,int,int16_t,int);
256int MMG5_deltag(MMG5_pMesh,MMG5_int,int,int16_t);
258int MMG5_chkcol_int(MMG5_pMesh,MMG5_pSol,MMG5_int,int8_t,int8_t,int64_t*,int,int8_t);
259int MMG5_chkcol_bdy(MMG5_pMesh,MMG5_pSol,MMG5_int,int8_t,int8_t,int64_t*,int,MMG5_int*,int,MMG5_int,MMG5_int,int8_t,int,int8_t);
260int MMG3D_chkmanicoll(MMG5_pMesh,MMG5_int,int,int,MMG5_int,MMG5_int,MMG5_int,MMG5_int,int8_t,int8_t);
262MMG5_int MMG5_colver(MMG5_pMesh,MMG5_pSol,int64_t *,int,int8_t,int8_t);
273MMG5_int MMG5_hashGetFace(MMG5_Hash*,MMG5_int,MMG5_int,MMG5_int);
276int MMG5_hashPop(MMG5_Hash *hash,MMG5_int a,MMG5_int b);
277int MMG5_hPop(MMG5_HGeom *hash,MMG5_int a,MMG5_int b,MMG5_int *ref,int16_t *tag);
278int MMG5_hTag(MMG5_HGeom *hash,MMG5_int a,MMG5_int b,MMG5_int ref,int16_t tag);
279int MMG5_hGet(MMG5_HGeom *hash,MMG5_int a,MMG5_int b,MMG5_int *ref,int16_t *tag);
280int MMG5_hEdge(MMG5_pMesh mesh,MMG5_HGeom *hash,MMG5_int a,MMG5_int b,MMG5_int ref,int16_t tag);
281int MMG5_hNew(MMG5_pMesh mesh,MMG5_HGeom *hash,MMG5_int hsiz,MMG5_int hmax);
288int MMG5_cntbdypt(MMG5_pMesh mesh, MMG5_int nump);
289size_t MMG5_memSize(void);
305int MMG5_mmg3dChkmsh(MMG5_pMesh,int,MMG5_int);
306int MMG3D_setMeshSize_initData(MMG5_pMesh,MMG5_int,MMG5_int,MMG5_int,MMG5_int,MMG5_int,MMG5_int);
308int MMG3D_split1_sim(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6]);
309int MMG5_split1(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6],int8_t metRidTyp);
310int MMG5_split1b(MMG5_pMesh,MMG5_pSol,int64_t*,int,MMG5_int,int,int8_t,int8_t);
311MMG5_int MMG5_splitedg(MMG5_pMesh mesh, MMG5_pSol met,MMG5_int iel, int iar, double crit);
312int MMG3D_split2sf_sim(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6]);
313int MMG5_split2sf(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6],int8_t);
314int MMG3D_split2_sim(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6]);
315int MMG5_split2(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6],int8_t);
316int MMG3D_split3_sim(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6]);
317int MMG5_split3(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6],int8_t);
318int MMG3D_split3cone_sim(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6]);
319int MMG5_split3cone(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6],int8_t);
320int MMG3D_split3op_sim(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6]);
321int MMG5_split3op(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6],int8_t);
322int MMG3D_split4sf_sim(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6]);
323int MMG5_split4sf(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6],int8_t);
324int MMG3D_split4op_sim(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6]);
325int MMG5_split4op(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6],int8_t);
326int MMG3D_split5_sim(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6]);
327int MMG5_split5(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6],int8_t);
328int MMG3D_split6_sim(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6]);
329int MMG5_split6(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int vx[6],int8_t);
330MMG5_int MMG5_split4bar(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,int8_t);
331int MMG3D_simbulgept(MMG5_pMesh mesh,MMG5_pSol met, int64_t *list, int ilist,MMG5_int);
333int MMG5_movintpt_iso(MMG5_pMesh ,MMG5_pSol,MMG3D_pPROctree,int64_t *, int , int);
334int MMG3D_movnormal_iso(MMG5_pMesh ,MMG5_pSol ,MMG5_int ,int );
337int MMG3D_rotate_surfacicBall(MMG5_pMesh,MMG5_int*,int,MMG5_int,double r[3][3],double*);
338int MMG3D_movbdyregpt_geom(MMG5_pMesh,MMG5_int *,const MMG5_int,const MMG5_int,double[3],double[3],double[3],double[3]);
340 int64_t*, int, MMG5_int*, int, int ,int);
342 int64_t*, int, MMG5_int*, int, int ,int);
343int MMG3D_curveEndingPts(MMG5_pMesh,MMG5_int*,int,const int16_t,MMG5_int,MMG5_int*,MMG5_int*);
345 MMG3D_pPROctree PROctree, int64_t *listv,
346 int ilistv,int improve,MMG5_pPoint p0,
347 MMG5_int ip0,uint8_t isrid,double o[3],
348 double no[3],double no2[3],double to[3]);
349int MMG3D_movbdycurvept_newPosForSimu(MMG5_pMesh,MMG5_pPoint,MMG5_int,MMG5_int,MMG5_int,
350 double,double,uint8_t,const double,
351 double[3],double[3],
352 double[3],double[3],const int16_t);
354 MMG5_int*, int ,int);
356 MMG5_int*, int ,int);
358 MMG5_int*, int ,int);
361 MMG5_int*, int ,int);
363 MMG5_int*, int ,int);
365 MMG5_int*, int ,int);
366int MMG3D_movv_ani(MMG5_pMesh ,MMG5_pSol ,MMG5_int ,int );
367int MMG3D_movv_iso(MMG5_pMesh ,MMG5_pSol ,MMG5_int ,int );
368int MMG3D_normalAdjaTri(MMG5_pMesh,MMG5_int,int8_t,int,double n[3]);
370 double[3],double[3], double[3] );
371int MMG5_chkswpbdy(MMG5_pMesh, MMG5_pSol,int64_t*, int, MMG5_int, MMG5_int,int8_t);
372int MMG5_swpbdy(MMG5_pMesh,MMG5_pSol,int64_t*,int,MMG5_int,MMG3D_pPROctree,int8_t);
373int MMG5_swpgen(MMG5_pMesh,MMG5_pSol,MMG5_int, int, int64_t*,MMG3D_pPROctree,int8_t);
374MMG5_int MMG5_chkswpgen(MMG5_pMesh,MMG5_pSol,MMG5_int,int,int*,int64_t*,double,int8_t);
375int MMG3D_swap23(MMG5_pMesh,MMG5_pSol,MMG5_int,int8_t,int,int,MMG5_int,int);
376int MMG5_srcface(MMG5_pMesh mesh,int n0,int n1,int n2);
378double MMG5_orcal_poi(double a[3],double b[3],double c[3],double d[3]);
379int MMG5_countelt(MMG5_pMesh mesh,MMG5_pSol sol, double *weightelt, long *npcible);
380/*function for agressive optimization*/
381 MMG5_int MMG3D_opttyp(MMG5_pMesh , MMG5_pSol ,MMG3D_pPROctree ,MMG5_int);
382int MMG3D_swpItem(MMG5_pMesh , MMG5_pSol ,MMG3D_pPROctree ,MMG5_int ,int );
383int MMG3D_splitItem(MMG5_pMesh , MMG5_pSol ,MMG3D_pPROctree ,MMG5_int ,int ,double );
387int MMG5_trydisp(MMG5_pMesh,double *,short);
392int MMG3D_displayQualHisto(MMG5_int,double,double,double,MMG5_int,MMG5_int,MMG5_int,
393 MMG5_int his[5],MMG5_int,int,int);
394int MMG3D_displayQualHisto_internal(MMG5_int,double,double,double,MMG5_int,MMG5_int,MMG5_int,
395 MMG5_int his[5],MMG5_int,int,int);
396void MMG3D_computeInqua(MMG5_pMesh,MMG5_pSol,MMG5_int*,double*,double*,double*,MMG5_int*,MMG5_int*,
397 MMG5_int*,MMG5_int his[5],int);
399void MMG3D_computeOutqua(MMG5_pMesh,MMG5_pSol,MMG5_int*,double*,double*,double*,MMG5_int*,MMG5_int*,
400 MMG5_int*,MMG5_int his[5],MMG5_int*,int);
402void MMG3D_computeLESqua(MMG5_pMesh,MMG5_pSol,MMG5_int*,double*,double*,double*,MMG5_int*,MMG5_int*,
403 MMG5_int*,MMG5_int his[5],int);
404int MMG3D_computePrilen(MMG5_pMesh,MMG5_pSol,double*,double*,double*,MMG5_int*,MMG5_int*,MMG5_int*,
405 MMG5_int*,MMG5_int*,MMG5_int*,int8_t,double**, MMG5_int [9] );
407int MMG5_intridmet(MMG5_pMesh,MMG5_pSol,MMG5_int,MMG5_int,double,double*,double*);
408int MMG5_intregmet(MMG5_pMesh,MMG5_pSol,MMG5_int,int8_t,double, double*);
409int MMG5_intvolmet(MMG5_pMesh,MMG5_pSol,MMG5_int,int8_t,double, double*);
410int MMG3D_localParamReg(MMG5_pMesh,MMG5_int,int64_t*,int,MMG5_int*,int,double*,double*,double*);
411int MMG3D_localParamNm(MMG5_pMesh,MMG5_int,int,int,double*,double*,double*);
412int MMG3D_mark_packedPoints(MMG5_pMesh mesh,MMG5_int *np,MMG5_int *nc);
423int MMG3D_printErrorMat(int8_t symmat,double *m,double *mr);
424int MMG3D_printEigenv(double dm[3],double vp[3][3]);
425
426/* rmc option */
427double MMG3D_vfrac(MMG5_pMesh ,MMG5_pSol ,MMG5_int ,int );
429int MMG5_isbr(MMG5_pMesh ,MMG5_int );
430
431
432/* tools_3d.c */
434
435/* useful functions to debug */
436MMG5_int MMG3D_indElt(MMG5_pMesh mesh,MMG5_int kel);
437MMG5_int MMG3D_indPt(MMG5_pMesh mesh,MMG5_int kp);
438void MMG5_printTetra(MMG5_pMesh mesh,char* fileName);
441int MMG3D_chk_shellEdgeTag(MMG5_pMesh mesh,MMG5_int start, int8_t ia,int16_t tag,MMG5_int ref);
442
443#ifdef USE_SCOTCH
445#endif
447int MMG5_meancur(MMG5_pMesh mesh,MMG5_int np,double c[3],int ilist,MMG5_int *list,double h[3]);
448double MMG5_surftri(MMG5_pMesh,int,int);
451double MMG5_volint(MMG5_pMesh);
452
453/* Lagrangian mode functions */
455int MMG5_stiffelt(MMG5_pMesh,int,double*,double*);
456int MMG5_mmg3d3(MMG5_pMesh ,MMG5_pSol, MMG5_pSol,MMG5_int** );
458
459/* Delaunay functions*/
460int MMG5_delone(MMG5_pMesh mesh,MMG5_pSol sol,MMG5_int ip,int64_t *list,int ilist);
461int MMG5_cavity_iso(MMG5_pMesh mesh,MMG5_pSol sol,MMG5_int iel,int ip,int64_t *list,int lon,double volmin);
462int MMG5_cavity_ani(MMG5_pMesh mesh,MMG5_pSol sol,MMG5_int iel,int ip,int64_t *list,int lon,double volmin);
463int MMG5_cenrad_iso(MMG5_pMesh mesh,double *ct,double *c,double *rad);
464int MMG5_cenrad_ani(MMG5_pMesh mesh,double *ct,double *m,double *c,double *rad);
465
466/* mmg3d1.c */
467void MMG3D_set_geom(MMG5_pMesh,MMG5_pPoint,int16_t,MMG5_int,MMG5_int,double[3],double[3],double[3]);
468void MMG5_tet2tri(MMG5_pMesh mesh,MMG5_int k,int8_t ie,MMG5_Tria *ptt);
469int MMG3D_dichoto(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int *vx);
470int MMG3D_dichoto1b(MMG5_pMesh mesh,MMG5_pSol met,int64_t *list,int ret,MMG5_int);
471int8_t MMG5_chkedg(MMG5_pMesh mesh,MMG5_Tria *pt,int8_t ori,double,double,int);
472void MMG3D_find_bdyface_from_edge(MMG5_pMesh,MMG5_pTetra,int8_t,int8_t*,int8_t*,
473 int8_t*,int8_t*,MMG5_int*,MMG5_int*,MMG5_pPoint*,MMG5_pPoint*);
474int8_t MMG3D_build_bezierEdge(MMG5_pMesh,MMG5_int,int8_t,int8_t,int8_t,MMG5_pxTetra,
475 MMG5_int,MMG5_int,MMG5_pPoint,MMG5_pPoint,
476 MMG5_int*,int16_t*,double[3],double[3],double[3],
477 double[3],int64_t*,int*);
478int MMG3D_adpcoledg(MMG5_pMesh,MMG5_pSol,MMG3D_pPROctree*,MMG5_int,int8_t,double,MMG5_int*);
480 int8_t,int8_t,int* );
481int MMG5_anatet(MMG5_pMesh mesh,MMG5_pSol met, int8_t typchk, int patternMode) ;
483 double clickSurf,double clickVol,int moveVol,int improveSurf,int improveVolSurf,
484 int improveVol,int maxit,MMG5_int testmark);
485MMG5_int MMG5_swpmsh(MMG5_pMesh mesh,MMG5_pSol met,MMG3D_pPROctree PROctree, int);
486MMG5_int MMG5_swptet(MMG5_pMesh mesh,MMG5_pSol met,double,double,MMG3D_pPROctree, int,MMG5_int);
487
488/* pointers */
489/* init structures */
491/* iso/aniso computations */
493extern double MMG5_lenedgCoor_iso(double*, double*, double*, double*);
496int MMG5_intmet_iso(MMG5_pMesh,MMG5_pSol,MMG5_int,int8_t,MMG5_int, double);
497int MMG5_intmet_ani(MMG5_pMesh,MMG5_pSol,MMG5_int,int8_t,MMG5_int, double);
498int MMG3D_intmet33_ani(MMG5_pMesh,MMG5_pSol,MMG5_int,int8_t,MMG5_int, double);
499int MMG5_interp4bar_ani(MMG5_pMesh,MMG5_pSol,MMG5_int,MMG5_int,double *);
500int MMG5_interp4bar33_ani(MMG5_pMesh,MMG5_pSol,MMG5_int,MMG5_int,double *);
501int MMG5_interp4bar_iso(MMG5_pMesh,MMG5_pSol,MMG5_int,MMG5_int,double *);
508double MMG5_meansizreg_iso(MMG5_pMesh,MMG5_pSol,MMG5_int,MMG5_int*,int,double,double);
510extern int MMG5_moymet(MMG5_pMesh ,MMG5_pSol ,MMG5_pTetra ,double *);
513
514/* input */
515int MMG3D_openMesh(int imprim,const char *filename,FILE **inm,int *bin,char*,char*);
516int MMG3D_loadMesh_opened(MMG5_pMesh mesh,FILE *inm,int bin);
517
524static inline
526 if ( mesh->xt ) {
527 if ( mesh->xt != mesh->ne ) {
528 fprintf(stderr,"\n ## Warning: %s: %" MMG5_PRId " tetra on %" MMG5_PRId " reoriented.\n",
529 __func__,mesh->xt,mesh->ne);
530 fprintf(stderr," Your mesh may be non-conform.\n");
531 }
532 else {
533 fprintf(stderr,"\n ## Warning: %s: all tetra reoriented.\n",__func__);
534 }
535 }
536 mesh->xt = 0;
537}
538
539#ifdef __cplusplus
540}
541#endif
542
543#endif
MMG5_pMesh MMG5_pSol * sol
MMG5_pMesh * mesh
const int va_list argptr
MMG5_pMesh char * filename
int MMG3D_findEdge(MMG5_pMesh, MMG5_pTetra, MMG5_int, MMG5_int, MMG5_int, int, int8_t *, int8_t *)
Definition: boulep_3d.c:113
int MMG5_paktet(MMG5_pMesh mesh)
Definition: hash_3d.c:50
int MMG3D_cuttet_lssurf(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_pSol met)
Definition: mmg3d2s.c:160
int MMG3D_curveEndingPts(MMG5_pMesh, MMG5_int *, int, const int16_t, MMG5_int, MMG5_int *, MMG5_int *)
Definition: movpt_3d.c:936
int MMG5_lapantilap(MMG5_pMesh, double *)
void MMG3D_set_geom(MMG5_pMesh, MMG5_pPoint, int16_t, MMG5_int, MMG5_int, double[3], double[3], double[3])
Definition: mmg3d1.c:59
int MMG5_intvolmet(MMG5_pMesh, MMG5_pSol, MMG5_int, int8_t, double, double *)
int MMG5_dichodisp(MMG5_pMesh, double *)
int MMG3D_chk4ridVertices(MMG5_pMesh mesh, MMG5_pTetra pt)
Definition: anisosiz_3d.c:113
MMG5_int MMG3D_newPt(MMG5_pMesh mesh, double c[3], int16_t tag, MMG5_int src)
Definition: zaldy_3d.c:39
int MMG5_chkcol_bdy(MMG5_pMesh, MMG5_pSol, MMG5_int, int8_t, int8_t, int64_t *, int, MMG5_int *, int, MMG5_int, MMG5_int, int8_t, int, int8_t)
Definition: colver_3d.c:515
int MMG3D_bezierInt(MMG5_pBezier pb, double uv[2], double o[3], double no[3], double to[3])
Definition: bezier_3d.c:608
int MMG5_split4op(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t)
Definition: split_3d.c:3676
int MMG5_srcface(MMG5_pMesh mesh, int n0, int n1, int n2)
int MMG5_mmg3dRenumbering(int, MMG5_pMesh, MMG5_pSol, MMG5_pSol, MMG5_int *)
Definition: librnbg_3d.c:114
int MMG5_intridmet(MMG5_pMesh, MMG5_pSol, MMG5_int, MMG5_int, double, double *, double *)
int MMG5_mmg3d3(MMG5_pMesh, MMG5_pSol, MMG5_pSol, MMG5_int **)
Definition: mmg3d3.c:583
int MMG5_split3op(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t)
Definition: split_3d.c:2574
double MMG5_lenedgCoor_iso(double *, double *, double *, double *)
Compute edge length from edge's coordinates.
Definition: isosiz_3d.c:61
int MMG5_moymet(MMG5_pMesh, MMG5_pSol, MMG5_pTetra, double *)
Definition: anisosiz_3d.c:144
int MMG3D_gradsizreq_iso(MMG5_pMesh, MMG5_pSol)
Definition: isosiz_3d.c:1168
int MMG3D_movv_ani(MMG5_pMesh, MMG5_pSol, MMG5_int, int)
Definition: movpt_3d.c:1626
int MMG5_split1b(MMG5_pMesh, MMG5_pSol, int64_t *, int, MMG5_int, int, int8_t, int8_t)
Definition: split_3d.c:617
int MMG5_ppgdisp(MMG5_pMesh, double *)
void MMG3D_set_reqBoundaries(MMG5_pMesh mesh)
Definition: analys_3d.c:46
int MMG3D_movetetrapoints(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, MMG5_int)
Definition: optbdry_3d.c:47
MMG5_int MMG5_swpmsh(MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int)
Definition: mmg3d1.c:598
size_t MMG5_memSize(void)
Definition: tools.c:852
int MMG5_intregmet(MMG5_pMesh, MMG5_pSol, MMG5_int, int8_t, double, double *)
int MMG3D_pack_sol(MMG5_pMesh mesh, MMG5_pSol sol)
Definition: libmmg3d.c:713
int MMG3D_split6_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
Definition: split_3d.c:4258
MMG5_int MMG3D_newElt(MMG5_pMesh mesh)
Definition: zaldy_3d.c:99
static const int8_t MMG5_idirinv[4][4]
int MMG5_intmet_ani(MMG5_pMesh, MMG5_pSol, MMG5_int, int8_t, MMG5_int, double)
Definition: intmet_3d.c:51
int MMG3D_gradsizreq_ani(MMG5_pMesh, MMG5_pSol)
Definition: anisosiz_3d.c:2210
MMG5_int MMG5_chkswpgen(MMG5_pMesh, MMG5_pSol, MMG5_int, int, int *, int64_t *, double, int8_t)
Definition: swapgen_3d.c:57
MMG5_int MMG5_splitedg(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int iel, int iar, double crit)
Definition: split_3d.c:4753
int MMG5_settag(MMG5_pMesh, MMG5_int, int, int16_t, int)
Definition: boulep_3d.c:1228
int MMG3D_splitItem(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, MMG5_int, int, double)
Definition: opttyp_3d.c:394
int MMG5_hGeom(MMG5_pMesh mesh)
Definition: hash_3d.c:1022
int MMG3D_movbdycurvept_chckAndUpdate(MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int64_t *listv, int ilistv, int improve, MMG5_pPoint p0, MMG5_int ip0, uint8_t isrid, double o[3], double no[3], double no2[3], double to[3])
Definition: movpt_3d.c:1048
int MMG3D_hashTria(MMG5_pMesh mesh, MMG5_Hash *)
Definition: hash_3d.c:749
int MMG3D_printErrorMat(int8_t symmat, double *m, double *mr)
Definition: anisosiz_3d.c:90
int MMG3D_defsiz_iso(MMG5_pMesh, MMG5_pSol)
Definition: isosiz_3d.c:662
int MMG5_swpbdy(MMG5_pMesh, MMG5_pSol, int64_t *, int, MMG5_int, MMG3D_pPROctree, int8_t)
Definition: swap_3d.c:467
void MMG3D_keep_only1Subdomain(MMG5_pMesh mesh, int nsd)
Definition: tools_3d.c:1391
int MMG5_velextLS(MMG5_pMesh, MMG5_pSol)
Definition: velextls_3d.c:400
int MMG3D_split3_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
Definition: split_3d.c:1571
MMG5_int MMG5_swptet(MMG5_pMesh mesh, MMG5_pSol met, double, double, MMG3D_pPROctree, int, MMG5_int)
Definition: mmg3d1.c:668
int MMG3D_set_metricAtPointsOnReqEdges(MMG5_pMesh, MMG5_pSol, int8_t)
Definition: isosiz_3d.c:564
int MMG3D_mark_packedPoints(MMG5_pMesh mesh, MMG5_int *np, MMG5_int *nc)
Definition: libmmg3d.c:541
int MMG3D_update_xtetra(MMG5_pMesh mesh)
Definition: mmg3d2.c:1309
MMG5_int MMG5_movtet(MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, double clickSurf, double clickVol, int moveVol, int improveSurf, int improveVolSurf, int improveVol, int maxit, MMG5_int testmark)
Definition: mmg3d1.c:732
int MMG3D_snpval_lssurf(MMG5_pMesh mesh, MMG5_pSol sol)
Definition: mmg3d2s.c:107
int MMG5_cavity_ani(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int iel, int ip, int64_t *list, int lon, double volmin)
Definition: delaunay_3d.c:581
int MMG5_BezierReg(MMG5_pMesh mesh, MMG5_int ip0, MMG5_int ip1, double s, double v[3], double *o, double *no)
Definition: tools_3d.c:694
int MMG5_boulevolp(MMG5_pMesh mesh, MMG5_int start, int ip, int64_t *list)
Definition: boulep_3d.c:54
static const uint8_t MMG5_isar[6][2]
isar[i][]: vertices of extremities of the edge opposite to the ith edge
int MMG3D_rmc(MMG5_pMesh, MMG5_pSol)
Definition: mmg3d2.c:777
void MMG3D_Free_topoTables(MMG5_pMesh mesh)
Definition: libmmg3d.c:67
int MMG3D_printEigenv(double dm[3], double vp[3][3])
Definition: anisosiz_3d.c:48
int MMG5_BezierTgt(double c1[3], double c2[3], double n1[3], double n2[3], double t1[3], double t2[3])
Definition: bezier_3d.c:53
void MMG3D_computeOutqua(MMG5_pMesh, MMG5_pSol, MMG5_int *, double *, double *, double *, MMG5_int *, MMG5_int *, MMG5_int *, MMG5_int his[5], MMG5_int *, int)
Definition: quality_3d.c:680
MMG5_int MMG5_split4bar(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int8_t)
Definition: split_3d.c:2964
int MMG3D_movbdycurvept_newPosForSimu(MMG5_pMesh, MMG5_pPoint, MMG5_int, MMG5_int, MMG5_int, double, double, uint8_t, const double, double[3], double[3], double[3], double[3], const int16_t)
Definition: movpt_3d.c:1142
int MMG5_boulesurfvolp(MMG5_pMesh mesh, MMG5_int start, int ip, int iface, int64_t *listv, int *ilistv, MMG5_int *lists, int *ilists, int isnm)
Definition: boulep_3d.c:607
int MMG5_split5(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t)
Definition: split_3d.c:4053
int MMG5_movbdyregpt_iso(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, MMG5_int *, int, int, int)
Definition: movpt_3d.c:625
int MMG5_cavity_iso(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int iel, int ip, int64_t *list, int lon, double volmin)
Definition: delaunay_3d.c:741
int MMG5_deltag(MMG5_pMesh, MMG5_int, int, int16_t)
Definition: boulep_3d.c:1344
int MMG5_hNew(MMG5_pMesh mesh, MMG5_HGeom *hash, MMG5_int hsiz, MMG5_int hmax)
Definition: hash_3d.c:994
int MMG5_interp4bar_iso(MMG5_pMesh, MMG5_pSol, MMG5_int, MMG5_int, double *)
int MMG3D_split3cone_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
Definition: split_3d.c:1790
int MMG3D_rotate_surfacicBall(MMG5_pMesh, MMG5_int *, int, MMG5_int, double r[3][3], double *)
Definition: movpt_3d.c:350
void MMG3D_find_bdyface_from_edge(MMG5_pMesh, MMG5_pTetra, int8_t, int8_t *, int8_t *, int8_t *, int8_t *, MMG5_int *, MMG5_int *, MMG5_pPoint *, MMG5_pPoint *)
Definition: mmg3d1.c:1868
int MMG3D_chk_shellEdgeTag(MMG5_pMesh mesh, MMG5_int start, int8_t ia, int16_t tag, MMG5_int ref)
Definition: chkmsh_3d.c:142
int MMG3D_movv_iso(MMG5_pMesh, MMG5_pSol, MMG5_int, int)
Definition: movpt_3d.c:1875
int MMG3D_normalAdjaTri(MMG5_pMesh, MMG5_int, int8_t, int, double n[3])
Definition: split_3d.c:466
int MMG3D_movnormal_iso(MMG5_pMesh, MMG5_pSol, MMG5_int, int)
Definition: movpt_3d.c:1746
int MMG5_anatet(MMG5_pMesh mesh, MMG5_pSol met, int8_t typchk, int patternMode)
Definition: mmg3d1.c:3116
int MMG3D_analys(MMG5_pMesh mesh)
Definition: analys_3d.c:1324
int MMG3D_hashPrism(MMG5_pMesh mesh)
Definition: hash_3d.c:238
void MMG5_freeXPrisms(MMG5_pMesh mesh)
Definition: zaldy_3d.c:378
int MMG3D_pack_tetra(MMG5_pMesh mesh)
Definition: libmmg3d.c:627
int MMG3D_localParamReg(MMG5_pMesh, MMG5_int, int64_t *, int, MMG5_int *, int, double *, double *, double *)
Definition: tools_3d.c:1023
int MMG3D_simbulgept(MMG5_pMesh mesh, MMG5_pSol met, int64_t *list, int ilist, MMG5_int)
Definition: split_3d.c:324
int MMG3D_Free_all_var(va_list argptr)
Definition: variadic_3d.c:261
int MMG3D_optbdry(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, MMG5_int)
Definition: optbdry_3d.c:259
void MMG3D_delPt(MMG5_pMesh mesh, MMG5_int ip)
Definition: zaldy_3d.c:80
int MMG3D_setref_ls(MMG5_pMesh mesh, MMG5_pSol sol)
Definition: mmg3d2.c:1256
void MMG5_freeXTets(MMG5_pMesh mesh)
Definition: zaldy_3d.c:359
int MMG5_startedgsurfball(MMG5_pMesh mesh, MMG5_int nump, MMG5_int numq, MMG5_int *list, int ilist)
Definition: tools_3d.c:91
int MMG3D_Free_structures_var(va_list argptr)
Definition: variadic_3d.c:449
int MMG5_split1(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t metRidTyp)
Definition: split_3d.c:136
static const uint8_t MMG5_permedge[12][6]
int MMG3D_coquilFaceFirstLoop(MMG5_pMesh mesh, MMG5_int start, MMG5_int na, MMG5_int nb, int8_t iface, int8_t ia, int64_t *list, int *ilist, MMG5_int *it1, MMG5_int *it2, MMG5_int *piv, MMG5_int *adj, int8_t *hasadja, int *nbdy, int silent)
Definition: boulep_3d.c:1686
MMG5_int MMG3D_indPt(MMG5_pMesh mesh, MMG5_int kp)
Definition: tools_3d.c:916
int MMG3D_chkmani(MMG5_pMesh mesh)
Definition: mmg3d2.c:1527
int MMG5_interp4bar_ani(MMG5_pMesh, MMG5_pSol, MMG5_int, MMG5_int, double *)
void MMG5_Init_parameters(MMG5_pMesh mesh)
Definition: API_functions.c:51
int MMG5_bdyMCF(MMG5_pMesh)
int MMG3D_gradsiz_ani(MMG5_pMesh, MMG5_pSol)
Definition: anisosiz_3d.c:2073
int MMG3D_memOption_memRepartition(MMG5_pMesh mesh)
Definition: zaldy_3d.c:173
int MMG3D_gradsiz_iso(MMG5_pMesh, MMG5_pSol)
Definition: isosiz_3d.c:1083
int MMG5_setdhd(MMG5_pMesh mesh)
Definition: analys_3d.c:310
int MMG5_norver(MMG5_pMesh mesh)
Definition: analys_3d.c:638
int MMG3D_normalAndTangent_at_sinRidge(MMG5_pMesh, MMG5_int, int, int, double[3], double[3], double[3])
Definition: mmg3d1.c:1654
void MMG3D_computeLESqua(MMG5_pMesh, MMG5_pSol, MMG5_int *, double *, double *, double *, MMG5_int *, MMG5_int *, MMG5_int *, MMG5_int his[5], int)
Definition: quality_3d.c:376
void MMG5_coquilFaceErrorMessage(MMG5_pMesh mesh, MMG5_int k1, MMG5_int k2)
Definition: boulep_3d.c:1613
int16_t MMG5_openCoquilTravel(MMG5_pMesh, MMG5_int, MMG5_int, MMG5_int *, MMG5_int *, int8_t *, int8_t *)
Definition: boulep_3d.c:2011
int MMG5_split4sf(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t)
Definition: split_3d.c:3354
int MMG5_isbr(MMG5_pMesh, MMG5_int)
Definition: tools_3d.c:42
double MMG5_volint(MMG5_pMesh)
static const int8_t MMG5_iarfinv[4][6]
num of the j^th edge in the i^th face
int MMG3D_mmg3d2(MMG5_pMesh, MMG5_pSol, MMG5_pSol)
Definition: mmg3d2.c:2208
void MMG3D_mark_pointsOnReqEdge_fromTetra(MMG5_pMesh mesh)
Definition: isosiz_3d.c:1048
int MMG3D_chkmanicoll(MMG5_pMesh, MMG5_int, int, int, MMG5_int, MMG5_int, MMG5_int, MMG5_int, int8_t, int8_t)
Definition: mmg3d2.c:1672
double MMG5_timestepMCF(MMG5_pMesh, double)
static const uint8_t MMG5_arpt[4][3]
arpt[i]: edges passing through vertex i
int MMG5_chkswpbdy(MMG5_pMesh, MMG5_pSol, int64_t *, int, MMG5_int, MMG5_int, int8_t)
Definition: swap_3d.c:57
void MMG3D_Free_arrays(MMG5_pMesh *, MMG5_pSol *, MMG5_pSol *, MMG5_pSol *, MMG5_pSol *)
Definition: variadic_3d.c:359
int MMG3D_optlap(MMG5_pMesh, MMG5_pSol)
Definition: optlap_3d.c:46
int MMG5_boulenm(MMG5_pMesh mesh, MMG5_int start, int ip, int iface, double n[3], double t[3])
Definition: boulep_3d.c:196
int MMG5_chkfemtopo(MMG5_pMesh mesh)
Definition: chkmsh_3d.c:767
int MMG3D_localParamNm(MMG5_pMesh, MMG5_int, int, int, double *, double *, double *)
Definition: tools_3d.c:1143
int MMG3D_computePrilen(MMG5_pMesh, MMG5_pSol, double *, double *, double *, MMG5_int *, MMG5_int *, MMG5_int *, MMG5_int *, MMG5_int *, MMG5_int *, int8_t, double **, MMG5_int[9])
Definition: quality_3d.c:221
MMG5_int MMG5_hashGetFace(MMG5_Hash *, MMG5_int, MMG5_int, MMG5_int)
Definition: hash_3d.c:84
int MMG5_hGet(MMG5_HGeom *hash, MMG5_int a, MMG5_int b, MMG5_int *ref, int16_t *tag)
Definition: hash_3d.c:918
int MMG5_chkBdryTria(MMG5_pMesh mesh)
Definition: hash_3d.c:1439
int MMG3D_swap23(MMG5_pMesh, MMG5_pSol, MMG5_int, int8_t, int, int, MMG5_int, int)
Definition: swap_3d.c:603
int MMG3D_delElt(MMG5_pMesh mesh, MMG5_int iel)
Definition: zaldy_3d.c:122
int MMG5_movintpt_ani(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, int)
Definition: anisomovpt_3d.c:58
int MMG3D_dichoto(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int *vx)
Definition: mmg3d1.c:140
int MMG5_boulesurfvolpNom(MMG5_pMesh mesh, MMG5_int start, int ip, int iface, int64_t *listv, int *ilistv, MMG5_int *lists, int *ilists, MMG5_int *refmin, MMG5_int *refplus, int isnm)
Definition: boulep_3d.c:771
int MMG5_split6(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t)
Definition: split_3d.c:4327
int MMG3D_packMesh(MMG5_pMesh, MMG5_pSol, MMG5_pSol)
Definition: libmmg3d.c:905
int MMG3D_defsiz_ani(MMG5_pMesh, MMG5_pSol)
Definition: anisosiz_3d.c:1310
int MMG3D_split2sf_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
Definition: split_3d.c:1075
int MMG5_bdryIso(MMG5_pMesh)
int MMG3D_splsurfedge(MMG5_pMesh, MMG5_pSol, MMG5_int, MMG5_pTetra, MMG5_pxTetra, int8_t, int8_t, int8_t, int *)
Definition: mmg3d1.c:1927
int MMG5_trydisp(MMG5_pMesh, double *, short)
int MMG5_BezierRidge(MMG5_pMesh mesh, MMG5_int ip0, MMG5_int ip1, double s, double *o, double *no1, double *no2, double *to)
Definition: tools_3d.c:145
int MMG3D_split4op_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
Definition: split_3d.c:3555
int MMG5_countelt(MMG5_pMesh mesh, MMG5_pSol sol, double *weightelt, long *npcible)
Definition: quality_3d.c:808
int MMG5_chkcol_int(MMG5_pMesh, MMG5_pSol, MMG5_int, int8_t, int8_t, int64_t *, int, int8_t)
Definition: colver_3d.c:43
int MMG5_srcbdy(MMG5_pMesh mesh, MMG5_int start, int ia)
Definition: boulep_3d.c:1554
int MMG3D_tetraQual(MMG5_pMesh mesh, MMG5_pSol met, int8_t metRidTyp)
Definition: quality_3d.c:50
int MMG3D_memOption_memSet(MMG5_pMesh mesh)
Definition: zaldy_3d.c:158
int MMG5_movbdyridpt_ani(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, MMG5_int *, int, int)
int MMG5_chkptonbdy(MMG5_pMesh, MMG5_int)
Definition: chkmsh_3d.c:656
double MMG5_surftri(MMG5_pMesh, int, int)
int MMG3D_update_eltsVertices(MMG5_pMesh mesh)
Definition: libmmg3d.c:807
int MMG5_cenrad_iso(MMG5_pMesh mesh, double *ct, double *c, double *rad)
Definition: cenrad_3d.c:45
int MMG5_movbdyrefpt_ani(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, MMG5_int *, int, int)
MMG5_int MMG3D_pack_points(MMG5_pMesh mesh)
Definition: libmmg3d.c:853
void MMG3D_chkmeshedgestags(MMG5_pMesh mesh)
Definition: chkmsh_3d.c:201
int8_t MMG5_chkedg(MMG5_pMesh mesh, MMG5_Tria *pt, int8_t ori, double, double, int)
Definition: mmg3d1.c:363
static const int8_t MMG5_iarf[4][3]
iarf[i]: edges of face opposite to vertex i
double MMG5_caltet33_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTetra pt)
Definition: quality_3d.c:109
int MMG3D_Free_names_var(va_list argptr)
Definition: variadic_3d.c:547
int MMG3D_openMesh(int imprim, const char *filename, FILE **inm, int *bin, char *, char *)
Definition: inout_3d.c:53
int MMG5_swpgen(MMG5_pMesh, MMG5_pSol, MMG5_int, int, int64_t *, MMG3D_pPROctree, int8_t)
Definition: swapgen_3d.c:271
static const uint8_t MMG5_iare[6][2]
vertices of extremities of the edges of the tetra
int MMG5_boulernm(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int start, int ip, MMG5_int *ng, MMG5_int *nr, MMG5_int *nm)
Definition: boulep_3d.c:455
int8_t MMG3D_build_bezierEdge(MMG5_pMesh, MMG5_int, int8_t, int8_t, int8_t, MMG5_pxTetra, MMG5_int, MMG5_int, MMG5_pPoint, MMG5_pPoint, MMG5_int *, int16_t *, double[3], double[3], double[3], double[3], int64_t *, int *)
Definition: mmg3d1.c:1750
int MMG5_movbdyrefpt_iso(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, MMG5_int *, int, int)
Definition: movpt_3d.c:1438
int MMG5_coquilface(MMG5_pMesh mesh, MMG5_int start, int8_t iface, int, int64_t *, MMG5_int *, MMG5_int *, int)
Definition: boulep_3d.c:1843
int MMG3D_displayQualHisto_internal(MMG5_int, double, double, double, MMG5_int, MMG5_int, MMG5_int, MMG5_int his[5], MMG5_int, int, int)
Definition: quality_3d.c:494
int MMG3D_split1_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
Definition: split_3d.c:94
int MMG3D_cuttet_ls(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_pSol met)
Definition: mmg3d2.c:1025
int MMG3D_setMeshSize_initData(MMG5_pMesh, MMG5_int, MMG5_int, MMG5_int, MMG5_int, MMG5_int, MMG5_int)
int MMG5_mmg3d1_pattern(MMG5_pMesh, MMG5_pSol, MMG5_int *)
int MMG3D_setref_lssurf(MMG5_pMesh mesh, MMG5_pSol sol)
Definition: mmg3d2s.c:419
int MMG5_denoisbdy(MMG5_pMesh)
int MMG3D_regver(MMG5_pMesh mesh)
Definition: analys_3d.c:956
int MMG5_split2(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t)
Definition: split_3d.c:1430
int MMG3D_outqua(MMG5_pMesh mesh, MMG5_pSol met)
Definition: quality_3d.c:764
double MMG5_BezierGeod(double c1[3], double c2[3], double t1[3], double t2[3])
Definition: bezier_3d.c:111
int MMG5_cntbdypt(MMG5_pMesh mesh, MMG5_int nump)
Definition: chkmsh_3d.c:718
void MMG5_printTetra(MMG5_pMesh mesh, char *fileName)
Definition: tools_3d.c:973
static const uint8_t MMG5_ifar[6][2]
ifar[i][]: faces sharing the ith edge of the tetra
int MMG5_mmg3dChkmsh(MMG5_pMesh, int, MMG5_int)
Definition: chkmsh_3d.c:454
int MMG5_setadj(MMG5_pMesh mesh)
Definition: analys_3d.c:108
int MMG5_movbdynompt_ani(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, MMG5_int *, int, int)
void MMG3D_coquilFaceSecondLoopInit(MMG5_pMesh mesh, MMG5_int piv, int8_t *iface, int8_t *i, int64_t *list, int *ilist, MMG5_int *it1, MMG5_int *pradj, MMG5_int *adj)
Definition: boulep_3d.c:1787
int MMG3D_dichoto1b(MMG5_pMesh mesh, MMG5_pSol met, int64_t *list, int ret, MMG5_int)
Definition: mmg3d1.c:293
static const uint8_t MMG5_iprv3[7]
previous vertex of tetra: {3,0,1,2,3,0,1}
int MMG5_bdryUpdate(MMG5_pMesh)
Definition: hash_3d.c:2044
MMG5_int MMG3D_bdryBuild(MMG5_pMesh)
Definition: libmmg3d.c:99
int MMG5_BezierRef(MMG5_pMesh mesh, MMG5_int ip0, MMG5_int ip1, double s, double *o, double *no, double *to)
Definition: tools_3d.c:352
static const uint8_t MMG5_iarf_pr[5][5]
iarf[i]: edges of face i for a prism
int MMG3D_zaldy(MMG5_pMesh mesh)
Definition: zaldy_3d.c:346
int MMG3D_split4sf_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
Definition: split_3d.c:3251
int MMG5_setNmTag(MMG5_pMesh mesh, MMG5_Hash *hash)
Definition: hash_3d.c:727
int MMG5_split2sf(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t)
Definition: split_3d.c:1228
int MMG5_chkVertexConnectedDomains(MMG5_pMesh mesh)
Definition: analys_3d.c:471
int MMG5_movbdyregpt_ani(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, MMG5_int *, int, int, int)
int MMG5_split3cone(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t)
Definition: split_3d.c:1971
void MMG5_tet2tri(MMG5_pMesh mesh, MMG5_int k, int8_t ie, MMG5_Tria *ptt)
Definition: mmg3d1.c:102
int MMG5_movintpt_iso(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, int)
Definition: movpt_3d.c:58
static const uint8_t MMG5_idir_pr[5][4]
idir[i]: vertices of face i for a prism
int MMG3D_adpcoledg(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree *, MMG5_int, int8_t, double, MMG5_int *)
Definition: mmg3d1.c:1180
int16_t MMG5_coquilTravel(MMG5_pMesh, MMG5_int, MMG5_int, MMG5_int *, MMG5_int *, int8_t *, int8_t *)
Definition: boulep_3d.c:1959
int MMG5_meancur(MMG5_pMesh mesh, MMG5_int np, double c[3], int ilist, MMG5_int *list, double h[3])
int MMG5_delone(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int ip, int64_t *list, int ilist)
Definition: delaunay_3d.c:140
int MMG5_movbdynomintpt_iso(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, int)
Definition: movpt_3d.c:1482
int MMG5_interp4bar33_ani(MMG5_pMesh, MMG5_pSol, MMG5_int, MMG5_int, double *)
int MMG3D_snpval_ls(MMG5_pMesh mesh, MMG5_pSol sol)
Definition: mmg3d2.c:669
int MMG3D_split5_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
Definition: split_3d.c:3962
int MMG5_bdryPerm(MMG5_pMesh)
Definition: hash_3d.c:2135
int MMG3D_Init_mesh_var(va_list argptr)
Definition: variadic_3d.c:177
int MMG5_mmg3d1_delone(MMG5_pMesh, MMG5_pSol, MMG5_int *)
int MMG3D_doSol_ani(MMG5_pMesh, MMG5_pSol)
double MMG5_orcal_poi(double a[3], double b[3], double c[3], double d[3])
static const uint8_t MMG5_inxt3[7]
next vertex of tetra: {1,2,3,0,1,2,3}
int MMG5_movbdyridpt_iso(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, MMG5_int *, int, int)
Definition: movpt_3d.c:1606
double MMG5_estavglen(MMG5_pMesh)
Definition: mmg3d3.c:46
int MMG5_norface(MMG5_pMesh mesh, MMG5_int k, int iface, double v[3])
Definition: tools_3d.c:52
int MMG3D_movbdyregpt_geom(MMG5_pMesh, MMG5_int *, const MMG5_int, const MMG5_int, double[3], double[3], double[3], double[3])
Definition: movpt_3d.c:482
int MMG3D_resetRef_lssurf(MMG5_pMesh mesh)
Definition: mmg3d2s.c:51
double MMG3D_vfrac(MMG5_pMesh, MMG5_pSol, MMG5_int, int)
Definition: mmg3d2.c:107
int MMG3D_loadMesh_opened(MMG5_pMesh mesh, FILE *inm, int bin)
Definition: inout_3d.c:113
int MMG3D_pack_tetraAndAdja(MMG5_pMesh mesh)
Definition: libmmg3d.c:572
int MMG5_split3(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6], int8_t)
Definition: split_3d.c:1642
int MMG5_hashPop(MMG5_Hash *hash, MMG5_int a, MMG5_int b)
Definition: hash_3d.c:761
int MMG3D_resetRef_ls(MMG5_pMesh mesh)
Definition: mmg3d2.c:313
int MMG5_singul(MMG5_pMesh mesh)
Definition: analys_3d.c:544
int MMG3D_nmgeom(MMG5_pMesh mesh)
Definition: analys_3d.c:1198
int MMG3D_intmet33_ani(MMG5_pMesh, MMG5_pSol, MMG5_int, int8_t, MMG5_int, double)
Definition: intmet_3d.c:101
int MMG3D_inqua(MMG5_pMesh mesh, MMG5_pSol met)
Definition: quality_3d.c:631
int MMG3D_doSol_iso(MMG5_pMesh, MMG5_pSol)
int MMG5_mmg3dBezierCP(MMG5_pMesh mesh, MMG5_Tria *pt, MMG5_pBezier pb, int8_t ori)
Definition: bezier_3d.c:326
int MMG5_stiffelt(MMG5_pMesh, int, double *, double *)
int MMG5_directsurfball(MMG5_pMesh mesh, MMG5_int ip, MMG5_int *list, int ilist, double n[3])
Definition: tools_3d.c:66
int MMG5_cenrad_ani(MMG5_pMesh mesh, double *ct, double *m, double *c, double *rad)
Definition: cenrad_3d.c:142
int MMG5_hTag(MMG5_HGeom *hash, MMG5_int a, MMG5_int b, MMG5_int ref, int16_t tag)
Definition: hash_3d.c:825
int MMG5_hPop(MMG5_HGeom *hash, MMG5_int a, MMG5_int b, MMG5_int *ref, int16_t *tag)
Definition: hash_3d.c:858
MMG5_int MMG3D_opttyp(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, MMG5_int)
Definition: opttyp_3d.c:472
int MMG5_boulenmInt(MMG5_pMesh mesh, MMG5_int start, int ip, double t[3])
Definition: boulep_3d.c:342
int MMG5_BezierNom(MMG5_pMesh mesh, MMG5_int ip0, MMG5_int ip1, double s, double *o, double *no, double *to)
Definition: tools_3d.c:527
int MMG5_BezierEdge(MMG5_pMesh mesh, MMG5_int ip0, MMG5_int ip1, double b0[3], double b1[3], int8_t isrid, double v[3])
Definition: bezier_3d.c:152
int MMG3D_memOption(MMG5_pMesh mesh)
Definition: zaldy_3d.c:271
int MMG3D_setMeshSize_alloc(MMG5_pMesh)
Definition: zaldy_3d.c:288
int MMG3D_prilen(MMG5_pMesh mesh, MMG5_pSol met, int8_t)
Definition: quality_3d.c:341
int MMG3D_split3op_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
Definition: split_3d.c:2442
double MMG5_meansizreg_iso(MMG5_pMesh, MMG5_pSol, MMG5_int, MMG5_int *, int, double, double)
Definition: isosiz_3d.c:482
int MMG5_bouletrid(MMG5_pMesh, MMG5_int, int, int, int *, MMG5_int *, int *, MMG5_int *, MMG5_int *, MMG5_int *)
Definition: boulep_3d.c:952
static const uint8_t MMG5_idir[4][3]
idir[i]: vertices of face opposite to vertex i
int MMG5_hEdge(MMG5_pMesh mesh, MMG5_HGeom *hash, MMG5_int a, MMG5_int b, MMG5_int ref, int16_t tag)
Definition: hash_3d.c:951
int MMG3D_pack_prismsAndQuads(MMG5_pMesh mesh)
Definition: libmmg3d.c:667
int MMG5_coquil(MMG5_pMesh mesh, MMG5_int start, int ia, int64_t *list, int8_t *)
Definition: boulep_3d.c:1403
int MMG5_movbdynompt_iso(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, int64_t *, int, MMG5_int *, int, int)
Definition: movpt_3d.c:1462
int MMG3D_pack_pointArray(MMG5_pMesh mesh)
Definition: libmmg3d.c:749
static void MMG5_warnOrientation(MMG5_pMesh mesh)
MMG5_int MMG5_colver(MMG5_pMesh, MMG5_pSol, int64_t *, int, int8_t, int8_t)
Definition: colver_3d.c:1144
int MMG3D_swpItem(MMG5_pMesh, MMG5_pSol, MMG3D_pPROctree, MMG5_int, int)
Definition: opttyp_3d.c:328
MMG5_int MMG3D_indElt(MMG5_pMesh mesh, MMG5_int kel)
Definition: tools_3d.c:860
void MMG3D_computeInqua(MMG5_pMesh, MMG5_pSol, MMG5_int *, double *, double *, double *, MMG5_int *, MMG5_int *, MMG5_int *, MMG5_int his[5], int)
Definition: quality_3d.c:559
int MMG5_intmet_iso(MMG5_pMesh, MMG5_pSol, MMG5_int, int8_t, MMG5_int, double)
Definition: intmet_3d.c:131
int MMG3D_split2_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int vx[6])
Definition: split_3d.c:1368
int MMG5_bdrySet(MMG5_pMesh)
Definition: hash_3d.c:1744
int MMG3D_displayQualHisto(MMG5_int, double, double, double, MMG5_int, MMG5_int, MMG5_int, MMG5_int his[5], MMG5_int, int, int)
Definition: quality_3d.c:460
void MMG3D_chkpointtag(MMG5_pMesh mesh)
Definition: chkmsh_3d.c:329
int MMG5_movintptLES_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree, MMG5_int *, int, int)
Definition: movpt_3d.c:185
void MMG3D_unset_reqBoundaries(MMG5_pMesh mesh)
Definition: libmmg3d.c:875
Hash table to store geometric edges.
Definition: libmmgtypes.h:574
Identic as MMG5_HGeom but use MMG5_hedge to store edges instead of MMG5_hgeom (memory economy).
Definition: libmmgtypes.h:595
MMG mesh structure.
Definition: libmmgtypes.h:605
MMG5_int xt
Definition: libmmgtypes.h:620
MMG5_int ne
Definition: libmmgtypes.h:612
Structure to store points of a MMG mesh.
Definition: libmmgtypes.h:270
Structure to store the surface tetrahedra of a MMG mesh.
Definition: libmmgtypes.h:418