mmg3d
libmmgtypes.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 
27 #include <stdint.h>
28 #include <stdarg.h>
29 #include <stddef.h>
30 
31 #include "mmgcmakedefines.h"
32 #include "mmgversion.h"
33 
34 #ifndef _LIBMMGTYPES_H
35 #define _LIBMMGTYPES_H
36 
43 #define MMG5_SUCCESS 0
51 #define MMG5_LOWFAILURE 1
59 #define MMG5_STRONGFAILURE 2
60 
65 #define MG_ISO 10
66 
71 #define MG_PLUS 2
76 #define MG_MINUS 3
77 
87 #define MMG5_ARG_start 1
96 #define MMG5_ARG_ppMesh 2
106 #define MMG5_ARG_ppLs 3
116 #define MMG5_ARG_ppMet 4
126 #define MMG5_ARG_ppDisp 5
136 #define MMG5_ARG_ppSols 6
145 #define MMG5_ARG_pMesh 7
154 #define MMG5_ARG_pMet 8
163 #define MMG5_ARG_pDisp 9
173 #define MMG5_ARG_end 10
174 
181 #define MMG5_NSOLS_MAX 100
182 
189 #define MMG5_FILENAME_LEN_MAX 255
190 
197 #define MMG5_MMAT_NoSplit 0
198 
205 #define MMG5_MMAT_Split 1
206 
211 enum MMG5_type {
215  MMG5_Tensor
216 };
217 
228 };
229 
239 typedef struct {
240  double hmin;
241  double hmax;
242  double hausd;
243  int ref;
244  int8_t elt;
246 
252 typedef struct {
253  double c[3];
254  double n[3];
255 #ifdef USE_POINTMAP
256  int src;
257 #endif
258  int ref;
259  int xp;
260  int tmp;
262  int flag;
263  int s;
264  int16_t tag;
266  int8_t tagdel;
267 } MMG5_Point;
269 
274 typedef struct {
275  double n1[3],n2[3];
277  int8_t nnor; /* By default 0; 1 if no normal available (internal NOM point) */
278 } MMG5_xPoint;
280 
285 typedef struct {
286  int a,b;
287  int ref;
288  int base;
290  int16_t tag;
291 } MMG5_Edge;
293 
312 typedef struct {
313  double qual; /*Quality of the triangle*/
314  int v[3];
315  int ref;
316  int base;
317  int cc;
319  int edg[3];
321  int flag;
322  int16_t tag[3];
324  } MMG5_Tria;
326 
327 
346 typedef struct {
347  int v[4];
348  int ref;
349  int base;
350  int edg[4];
352  int16_t tag[4];
354 } MMG5_Quad;
356 
357 
381 typedef struct {
382  double qual;
383  int v[4];
384  int ref;
385  int base;
386  int mark;
387  int xt;
389  int flag;
390  int16_t tag;
391 } MMG5_Tetra;
393 
398 typedef struct {
399  int ref[4];
401  int edg[6];
403  int16_t ftag[4];
405  int16_t tag[6];
407  int8_t ori;
410 } MMG5_xTetra;
412 
442 typedef struct {
443  int v[6];
444  int ref;
445  int base;
446  int flag;
447  int xpr;
449  int8_t tag;
450 } MMG5_Prism;
452 
457 typedef struct {
458  int ref[5];
460  int edg[9];
464  int16_t ftag[5];
466  int16_t tag[9];
468 } MMG5_xPrism;
470 
475 typedef struct {
476  int8_t dospl;
477  int ref,rin,rex;
478 } MMG5_Mat;
479 typedef MMG5_Mat * MMG5_pMat;
480 
485 typedef struct {
486  int offset;
487  int size;
488  int *lookup;
489 } MMG5_InvMat;
491 
496 typedef struct {
498  double dhd,hmin,hmax,hsiz,hgrad,hgradreq,hausd;
499  double min[3],max[3],delta,ls,rmc;
500  int mem,npar,npari;
501  int nbr,*br;
502  int opnbdy;
503  int renum;
504  int PROctree;
505  int nmati,nmat;
506  int imprim;
507  int nsd;
508  int8_t nreg;
509  int8_t ddebug;
510  int8_t badkal;
511  int8_t iso;
512  int8_t setfem;
515  int8_t fem;
516  int8_t lag;
517  int8_t parTyp;
520  int8_t sethmin;
521  int8_t sethmax;
522  uint8_t optim, optimLES, noinsert, noswap, nomove, nosurf, nosizreq;
523  uint8_t metRidTyp;
526 } MMG5_Info;
527 
532 typedef struct {
533  int a;
534  int b;
535  int ref;
536  int nxt;
537  int16_t tag;
538 } MMG5_hgeom;
539 
544 typedef struct {
546  int siz,max,nxt;
547 } MMG5_HGeom;
548 
549 
554 typedef struct {
555  int a,b,nxt;
556  int k;
557  int s;
558 } MMG5_hedge;
559 
565 typedef struct {
566  int siz,max,nxt;
568 } MMG5_Hash;
569 
575 typedef struct {
576  size_t memMax;
577  size_t memCur;
578  double gap;
579  int ver;
580  int dim;
581  int type;
582  int npi,nti,nai,nei,np,na,nt,ne,npmax,namax,ntmax,nemax,xpmax,xtmax;
583  int nquad,nprism; /* number of quadrangles and prisms */
584  int nsols; /* number of solutions (metric excluded) in the solution file */
585  int nc1;
586 
587  int base;
589  int mark;
591  int xp,xt,xpr;
592  int npnil;
593  int nenil;
594  int nanil;
595  int *adja;
599  int *adjt;
603  int *adjapr;
607  int *adjq;
611  int *ipar;
623  char *namein;
624  char *nameout;
626 } MMG5_Mesh;
628 
633 typedef struct {
634  int ver; /* Version of the solution file */
635  int dim; /* Dimension of the solution file*/
636  int np; /* Number of points of the solution */
637  int npmax; /* Maximum number of points */
638  int npi; /* Temporary number of points (internal use only) */
639  int size; /* Number of solutions per entity */
640  int type; /* Type of the solution (scalar, vectorial of tensorial) */
641  int entities; /* Type of the solution (scalar, vectorial of tensorial) */
642  double *m;
643  double umin,umax;
644  char *namein;
645  char *nameout;
646 } MMG5_Sol;
647 typedef MMG5_Sol * MMG5_pSol;
648 
649 #endif
MMG5_Par * MMG5_pPar
Definition: libmmgtypes.h:245
MMG5_Tria * MMG5_pTria
Definition: libmmgtypes.h:325
MMG5_Edge * MMG5_pEdge
Definition: libmmgtypes.h:292
MMG5_Quad * MMG5_pQuad
Definition: libmmgtypes.h:355
MMG5_type
Type of solutions.
Definition: libmmgtypes.h:211
@ MMG5_Vector
Definition: libmmgtypes.h:214
@ MMG5_Tensor
Definition: libmmgtypes.h:215
@ MMG5_Scalar
Definition: libmmgtypes.h:213
@ MMG5_Notype
Definition: libmmgtypes.h:212
MMG5_xPrism * MMG5_pxPrism
Definition: libmmgtypes.h:469
MMG5_Sol * MMG5_pSol
Definition: libmmgtypes.h:647
MMG5_InvMat * MMG5_pInvMat
Definition: libmmgtypes.h:490
MMG5_Point * MMG5_pPoint
Definition: libmmgtypes.h:268
MMG5_Mat * MMG5_pMat
Definition: libmmgtypes.h:479
MMG5_Mesh * MMG5_pMesh
Definition: libmmgtypes.h:627
MMG5_xTetra * MMG5_pxTetra
Definition: libmmgtypes.h:411
MMG5_Tetra * MMG5_pTetra
Definition: libmmgtypes.h:392
MMG5_entities
Type of mesh entities.
Definition: libmmgtypes.h:222
@ MMG5_Noentity
Definition: libmmgtypes.h:223
@ MMG5_Vertex
Definition: libmmgtypes.h:224
@ MMG5_Tetrahedron
Definition: libmmgtypes.h:227
@ MMG5_Edg
Definition: libmmgtypes.h:225
@ MMG5_Triangle
Definition: libmmgtypes.h:226
MMG5_Prism * MMG5_pPrism
Definition: libmmgtypes.h:451
MMG5_xPoint * MMG5_pxPoint
Definition: libmmgtypes.h:279
Structure to store edges of a MMG mesh.
Definition: libmmgtypes.h:285
int a
Definition: libmmgtypes.h:286
int ref
Definition: libmmgtypes.h:287
int16_t tag
Definition: libmmgtypes.h:290
int base
Definition: libmmgtypes.h:288
Hash table to store geometric edges.
Definition: libmmgtypes.h:544
int max
Definition: libmmgtypes.h:546
MMG5_hgeom * geom
Definition: libmmgtypes.h:545
Identic as MMG5_HGeom but use MMG5_hedge to store edges instead of MMG5_hgeom (memory economy).
Definition: libmmgtypes.h:565
MMG5_hedge * item
Definition: libmmgtypes.h:567
int max
Definition: libmmgtypes.h:566
Store input parameters of the run.
Definition: libmmgtypes.h:496
int8_t iso
Definition: libmmgtypes.h:511
int8_t parTyp
Definition: libmmgtypes.h:517
int8_t ddebug
Definition: libmmgtypes.h:509
int renum
Definition: libmmgtypes.h:503
double delta
Definition: libmmgtypes.h:499
int8_t sethmin
Definition: libmmgtypes.h:520
int8_t setfem
Definition: libmmgtypes.h:512
MMG5_pMat mat
Definition: libmmgtypes.h:524
int opnbdy
Definition: libmmgtypes.h:502
uint8_t noinsert
Definition: libmmgtypes.h:522
int8_t badkal
Definition: libmmgtypes.h:510
uint8_t metRidTyp
Definition: libmmgtypes.h:523
int PROctree
Definition: libmmgtypes.h:504
int8_t lag
Definition: libmmgtypes.h:516
MMG5_InvMat invmat
Definition: libmmgtypes.h:525
int nmat
Definition: libmmgtypes.h:505
int8_t sethmax
Definition: libmmgtypes.h:521
MMG5_pPar par
Definition: libmmgtypes.h:497
int mem
Definition: libmmgtypes.h:500
double dhd
Definition: libmmgtypes.h:498
int * br
Definition: libmmgtypes.h:501
int imprim
Definition: libmmgtypes.h:506
int8_t nreg
Definition: libmmgtypes.h:508
int8_t fem
Definition: libmmgtypes.h:515
int nsd
Definition: libmmgtypes.h:507
To store lookup table for references in the mesh (useful in LS mode)
Definition: libmmgtypes.h:485
int offset
Definition: libmmgtypes.h:486
int size
Definition: libmmgtypes.h:487
int * lookup
Definition: libmmgtypes.h:488
To store user-defined references in the mesh (useful in LS mode)
Definition: libmmgtypes.h:475
int8_t dospl
Definition: libmmgtypes.h:476
int ref
Definition: libmmgtypes.h:477
MMG mesh structure.
Definition: libmmgtypes.h:575
int mark
Definition: libmmgtypes.h:589
int nenil
Definition: libmmgtypes.h:593
size_t memCur
Definition: libmmgtypes.h:577
int * adjapr
Definition: libmmgtypes.h:603
MMG5_pQuad quadra
Definition: libmmgtypes.h:619
int nsols
Definition: libmmgtypes.h:584
int nprism
Definition: libmmgtypes.h:583
MMG5_Info info
Definition: libmmgtypes.h:622
int nc1
Definition: libmmgtypes.h:585
MMG5_pPoint point
Definition: libmmgtypes.h:612
char * nameout
Definition: libmmgtypes.h:624
int * ipar
Definition: libmmgtypes.h:611
int * adjt
Definition: libmmgtypes.h:599
int ver
Definition: libmmgtypes.h:579
MMG5_pPrism prism
Definition: libmmgtypes.h:616
int npnil
Definition: libmmgtypes.h:592
size_t memMax
Definition: libmmgtypes.h:576
MMG5_pxPoint xpoint
Definition: libmmgtypes.h:613
MMG5_HGeom htab
Definition: libmmgtypes.h:621
double gap
Definition: libmmgtypes.h:578
int base
Definition: libmmgtypes.h:587
MMG5_pTetra tetra
Definition: libmmgtypes.h:614
MMG5_pxPrism xprism
Definition: libmmgtypes.h:617
int * adjq
Definition: libmmgtypes.h:607
int nanil
Definition: libmmgtypes.h:594
MMG5_pTria tria
Definition: libmmgtypes.h:618
MMG5_pEdge edge
Definition: libmmgtypes.h:620
int type
Definition: libmmgtypes.h:581
int dim
Definition: libmmgtypes.h:580
int xp
Definition: libmmgtypes.h:591
MMG5_pxTetra xtetra
Definition: libmmgtypes.h:615
int na
Definition: libmmgtypes.h:582
int * adja
Definition: libmmgtypes.h:595
char * namein
Definition: libmmgtypes.h:623
Definition: libmmgtypes.h:239
double hmin
Definition: libmmgtypes.h:240
double hmax
Definition: libmmgtypes.h:241
int ref
Definition: libmmgtypes.h:243
double hausd
Definition: libmmgtypes.h:242
int8_t elt
Definition: libmmgtypes.h:244
Structure to store points of a MMG mesh.
Definition: libmmgtypes.h:252
int16_t tag
Definition: libmmgtypes.h:264
int ref
Definition: libmmgtypes.h:258
int8_t tagdel
Definition: libmmgtypes.h:266
int tmp
Definition: libmmgtypes.h:260
int xp
Definition: libmmgtypes.h:259
int s
Definition: libmmgtypes.h:263
int flag
Definition: libmmgtypes.h:262
Definition: libmmgtypes.h:442
int8_t tag
Definition: libmmgtypes.h:449
int base
Definition: libmmgtypes.h:445
int ref
Definition: libmmgtypes.h:444
int xpr
Definition: libmmgtypes.h:447
int flag
Definition: libmmgtypes.h:446
Definition: libmmgtypes.h:346
int ref
Definition: libmmgtypes.h:348
int base
Definition: libmmgtypes.h:349
Definition: libmmgtypes.h:633
int size
Definition: libmmgtypes.h:639
int entities
Definition: libmmgtypes.h:641
int ver
Definition: libmmgtypes.h:634
char * nameout
Definition: libmmgtypes.h:645
int np
Definition: libmmgtypes.h:636
char * namein
Definition: libmmgtypes.h:644
int type
Definition: libmmgtypes.h:640
double * m
Definition: libmmgtypes.h:642
int npi
Definition: libmmgtypes.h:638
double umax
Definition: libmmgtypes.h:643
int dim
Definition: libmmgtypes.h:635
int npmax
Definition: libmmgtypes.h:637
Definition: libmmgtypes.h:381
int base
Definition: libmmgtypes.h:385
int flag
Definition: libmmgtypes.h:389
int mark
Definition: libmmgtypes.h:386
int xt
Definition: libmmgtypes.h:387
int ref
Definition: libmmgtypes.h:384
double qual
Definition: libmmgtypes.h:382
int16_t tag
Definition: libmmgtypes.h:390
Definition: libmmgtypes.h:312
int ref
Definition: libmmgtypes.h:315
int base
Definition: libmmgtypes.h:316
int cc
Definition: libmmgtypes.h:317
double qual
Definition: libmmgtypes.h:313
int flag
Definition: libmmgtypes.h:321
Used to hash edges (memory economy compared to MMG5_hgeom).
Definition: libmmgtypes.h:554
int k
Definition: libmmgtypes.h:556
int a
Definition: libmmgtypes.h:555
int s
Definition: libmmgtypes.h:557
Cell of the hash table of geom edges.
Definition: libmmgtypes.h:532
int nxt
Definition: libmmgtypes.h:536
int ref
Definition: libmmgtypes.h:535
int b
Definition: libmmgtypes.h:534
int16_t tag
Definition: libmmgtypes.h:537
int a
Definition: libmmgtypes.h:533
Structure to store surface points of a MMG mesh.
Definition: libmmgtypes.h:274
int8_t nnor
Definition: libmmgtypes.h:277
Structure to store the surface prism of a MMG mesh.
Definition: libmmgtypes.h:457
Structure to store the surface tetrahedra of a MMG mesh.
Definition: libmmgtypes.h:398
int8_t ori
Definition: libmmgtypes.h:407