! /* This file is automatically generated by the"genheader.c" code
! ** and the "genfort.pl" script (scripts directory).
! ** Do not modified it by hand, it will be discarded.
! **
! ** This scripts recopy the macros of the libmmg*.h file
! ** and convert enumerations into macros.
! **
! ** Note: "genfort.pl" is automatically called by the "genheader.c"
! ** executable code.
! **
! ** See the "libmmg*.h" file for a correct displaying of the documentation.
! */
#define MMG5_DATA_PTR_T INTEGER(kind=8)
! /* =============================================================================
! ** This file is part of the mmg software package for the tetrahedral
! ** mesh modification.
! ** Copyright (c) Bx INP/Inria/UBordeaux/UPMC, 2004- .
! **
! ** mmg is free software: you can redistribute it and/or modify it
! ** under the terms of the GNU Lesser General Public License as published
! ** by the Free Software Foundation, either version 3 of the License, or
! ** (at your option) any later version.
! **
! ** mmg is distributed in the hope that it will be useful, but WITHOUT
! ** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
! ** FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
! ** License for more details.
! **
! ** You should have received a copy of the GNU Lesser General Public
! ** License and of the GNU General Public License along with mmg (in
! ** files COPYING.LESSER and COPYING). If not, see
! ** . Please read their terms carefully and
! ** use this copy of the mmg distribution only if you accept them.
! ** =============================================================================
! */
! /**
! * Types
! */
! #include
! #include
#ifndef _LIBMMGTYPES_H
#define _LIBMMGTYPES_H
! /**
! * \def MMG5_SUCCESS
! *
! * Return value for success.
! *
! */
#define MMG5_SUCCESS 0
! /**
! * \def MMG5_LOWFAILURE
! *
! * Return value if the remesh process failed but we can save a conform
! * mesh.
! *
! */
#define MMG5_LOWFAILURE 1
! /**
! * \def MMG5_STRONGFAILURE
! *
! * Return value if the remesh process failed and the mesh is
! * non-conform.
! *
! */
#define MMG5_STRONGFAILURE 2
! /**
! * Implicite domain ref in iso mode
! *
! */
#define MG_ISO 10
! /**
! * \def MMG5_ARG_start
! *
! * To begin a list of variadic arguments (mandatory first arg for all our
! * variadic functions)
! *
! * \remark we cannot use an enum because used in
! * variadic functions).
! */
#define MMG5_ARG_start %val(1)
! /**
! * \def MMG5_ARG_ppMesh
! *
! * Pointer toward a MMG5_pMesh structure (for structure allocations purposes)
! *
! * \remark we cannot use an enum because used in
! * variadic functions).
! */
#define MMG5_ARG_ppMesh %val(2)
! /**
! * \def MMG5_ARG_ppLs
! *
! * Pointer toward a MMG5_pSol structure storing a level-set (for structure
! * allocations purposes)
! *
! * \remark we cannot use an enum because used in
! * variadic functions).
! */
#define MMG5_ARG_ppLs %val(3)
! /**
! * \def MMG5_ARG_ppMet
! *
! * Pointer toward a MMG5_pSol structure storing a metric (for structure
! * allocations purposes)
! *
! * \remark we cannot use an enum because used in
! * variadic functions).
! */
#define MMG5_ARG_ppMet %val(4)
! /**
! * \def MMG5_ARG_ppDisp
! *
! * Pointer toward a MMG5_pSol structure storing a displacement (for structure
! * allocations purposes)
! *
! * \remark we cannot use an enum because used in
! * variadic functions).
! */
#define MMG5_ARG_ppDisp %val(5)
! /**
! * \def MMG5_ARG_ppSols
! *
! * Pointer toward an array of MMG5_Sol structures storing a list of solutions
! * allocations purposes)
! *
! * \remark we cannot use an enum because used in
! * variadic functions).
! */
#define MMG5_ARG_ppSols %val(6)
! /**
! * \def MMG5_ARG_pMesh
! *
! * MMG5_pMesh structure
! *
! * \remark we cannot use an enum because used in
! * variadic functions).
! */
#define MMG5_ARG_pMesh %val(7)
! /**
! * \def MMG5_ARG_pMet
! *
! * MMG5_pSol structure storing a metric field
! *
! * \remark we cannot use an enum because used in
! * variadic functions).
! */
#define MMG5_ARG_pMet %val(8)
! /**
! * \def MMG5_ARG_pDisp
! *
! * MMG5_pSol structure storing a displacement field
! *
! * \remark we cannot use an enum because used in
! * variadic functions).
! */
#define MMG5_ARG_pDisp %val(9)
! /**
! * \def MMG5_ARG_end
! *
! * To end a list of variadic argument (mandatory last argument for all our
! * variadic functions)
! *
! * \remark we cannot use an enum because used in
! * variadic functions).
! */
#define MMG5_ARG_end %val(10)
! /**
! * \enum MMG5_type
! * \brief Type of solutions.
! */
! /*!< Undefined type (unusable) */
#define MMG5_Notype 0
! /*!< Scalar solution */
#define MMG5_Scalar 1
! /*!< Vectorial solution */
#define MMG5_Vector 2
! /*!< Tensorial solution */
#define MMG5_Tensor 3
! /**
! * \enum MMG5_entities
! * \brief Type of mesh entities.
! */
! /*!< Undefined type (unusable) */
#define MMG5_Noentity 0
! /*!< Vertex entity */
#define MMG5_Vertex 1
! /*!< Triangle entity */
#define MMG5_Triangle 2
! /*!< Tetra entity */
#define MMG5_Tetrahedron 3
! /**
! * \struct MMG5_Par
! * number) associated to a specific reference.
! *
! * Store the local values (minimal and maximal sizes and Hausdorff number)
! * associated to the given reference of an element of type \a elt (point,
! * edge... ).
! *
! */
! typedef struct {
! double hmin; /*!< minimal size for edges */
! double hmax; /*!< maximal size for edges */
! double hausd; /*!< Hausdorff value */
! int ref; /*!< Reference value */
! char elt; /*!< Element type */
! } MMG5_Par; typedef MMG5_Par * MMG5_pPar;
! /**
! * \struct MMG5_Point
! * \brief Structure to store points of a MMG mesh.
! * \todo What to do with n[3], try to remove s.
! */
! typedef struct {
! double c[3]; /*!< Coordinates of point */
! double n[3]; /*!< Normal or Tangent for mmgs and Tangent (if needed) for mmg3d */
! int ref; /*!< Reference of point */
! int xp; /*!< Surface point number */
! int tmp; /*!< Index of point in the saved mesh (we don't count
! the unused points)*/
! int flag; /*!< Flag to know if we have already treated the point */
! int s;
! int16_t tag; /*!< Contains binary flags : if \f$tag=23=16+4+2+1\f$, then
! the point is \a MG_REF, \a MG_GEO, \a MG_REQ and \a MG_BDY */
! char tagdel; /*!< Tag for delaunay */
! } MMG5_Point;
! typedef MMG5_Point * MMG5_pPoint;
! /**
! * \struct MMG5_xPoint
! * \brief Structure to store surface points of a MMG mesh.
! */
! typedef struct {
! double n1[3],n2[3]; /*!< Normals at boundary vertex;
! n1!=n2 if the vertex belong to a ridge */
! } MMG5_xPoint;
! typedef MMG5_xPoint * MMG5_pxPoint;
! /**
! * \struct MMG5_Edge
! * \brief Structure to store edges of a MMG mesh.
! */
! typedef struct {
! int a,b; /*!< Extremities of the edge */
! int ref; /*!< Reference of the edge */
! int base; /*!< 2Donly: used to store the tria+ tria edge indices
! that allow to access to the edge */
! int16_t tag; /*!< Binary flags */
! } MMG5_Edge;
! typedef MMG5_Edge * MMG5_pEdge;
! /**
! * \struct MMG5_Tria
! *
! * Structure to store triangles of a MMG mesh.
! *
! * \remark Numbering convention
! * \verbatim
! * Vertices Edges *
! * 2 . *
! * |`\ |`\ *
! * | `\ | `\ *
! * | `\ 1 `0 *
! * | `\ | `\ *
! * | `\ | `\ *
! * 0----------1 .--- 2 ----.
! * \endverbatim
! *
! */
! typedef struct {
! double qual; /*Quality of the triangle*/
! int v[3]; /*!< Vertices of the triangle */
! int ref; /*!< Reference of the triangle */
! int base;
! int cc; /*!< used to store the tetra + tetra face indices
! that allow to access to the tria */
! int edg[3]; /*!< edg[i] contains the ref of the \f$i^{th}\f$ edge
! of triangle */
! int flag;
! int16_t tag[3]; /*!< tag[i] contains the tag associated to the
! \f$i^{th}\f$ edge of triangle */
! } MMG5_Tria;
! typedef MMG5_Tria * MMG5_pTria;
! /**
! * \struct MMG5_Quad
! *
! * Structure to store quadrangles of a MMG mesh.
! *
! * \remark Numbering convention
! * \verbatim
! * Vertices Edges *
! * . *
! * 3----------2 +-----3----+ *
! * | | | | *
! * | | 1 2 *
! * | | | | *
! * | | | | *
! * 0----------1 +----0-----+ *
! * \endverbatim
! *
! */
! typedef struct {
! int v[4]; /*!< Vertices of the quadrangle */
! int ref; /*!< Reference of the quadrangle */
! int base;
! int edg[4]; /*!< edg[i] contains the ref of the \f$i^{th}\f$ edge
! of quadrangle */
! int16_t tag[4]; /*!< tag[i] contains the tag associated to the
! \f$i^{th}\f$ edge of quadrangle */
! } MMG5_Quad;
! typedef MMG5_Quad * MMG5_pQuad;
! /**
! * \struct MMG5_Tetra
! *
! * Structure to store tetrahedra of a MMG mesh.
! *
! * \remark Numbering convention
! * \verbatim
! * Vertices Edges Faces *
! * 3 . . *
! * ,/|`\ ,/|`\ ,/|`\ *
! * ,/ | `\ ,/ | `\ ,/ | `\ *
! * ,/ '. `\ ,2 '. `5 ,/ '. `\ *
! * ,/ | `\ ,/ 4 `\ ,/ 1 `\ *
! * ,/ | `\ ,/ | `\ ,/ | 0 `\ *
! * 0-----------'.--------2 .--------1--'.--------. .------2---'.--------. *
! * `\. | ,/ `\. | ,/ `\. | ,/ *
! * `\. | ,/ `\. | ,3 `\. 3| ,/ *
! * `\. '. ,/ `0. '. ,/ `\. '. ,/ *
! * `\. |/ `\. |/ `\. |/ *
! * `1 `. `. *
! * \endverbatim
! *
! */
! typedef struct {
! double qual; /*!< Quality of the element */
! int v[4]; /*!< Vertices of the tetrahedron */
! int ref; /*!< Reference of the tetrahedron */
! int base;
! int mark; /*!< Used for delaunay */
! int xt; /*!< Index of the surface \ref MMG5_xTetra associated to
! the tetrahedron*/
! int flag;
! int16_t tag;
! } MMG5_Tetra;
! typedef MMG5_Tetra * MMG5_pTetra;
! /**
! * \struct MMG5_xTetra
! * \brief Structure to store the surface tetrahedra of a MMG mesh.
! */
! typedef struct {
! int ref[4]; /*!< ref[i] is the reference of the opposite triangle to the
! \f$i^{th}\f$ vertex of the tetrahedron;*/
! int edg[6]; /*!< edg[i] contains the reference of the
! \f$i^{th}\f$ edge of the tetrahedron */
! int16_t ftag[4]; /*!< ftag[i] contains the tag associated to the
! \f$i^{th}\f$ face of the tetrahedron */
! int16_t tag[6]; /*!< tag[i] contains the tag associated to the
! \f$i^{th}\f$ edge of the tetrahedron */
! char ori; /*!< Orientation of the triangles of the tetrahedron:
! the $\f$i^{th}\f$ bit of ori is set to 0 when the
! \f$i^{th}\f$ face is bad orientated */
! } MMG5_xTetra;
! typedef MMG5_xTetra * MMG5_pxTetra;
! /**
! * \struct MMG5_Prism
! *
! * Structure to store prsim of a MMG mesh.
! *
! * \warning prisms are not modified
! *
! * \remark Numbering convention
! * \verbatim
! * Vertices Edges Faces *
! * 3 . . *
! * ,/|`\ ,/|`\ ,/|`\ *
! * ,/ | `\ 6 | 7 ,/ | `\ *
! * ,/ | `\ ,/ | `\ ,/ 1 `\ *
! * 4------+------5 .------8------. .------+------. *
! * | | | | | | | | | *
! * | | | | 2 | | | | *
! * | | | | | | | | | *
! * | | | | | | | 4 | 3 | *
! * | | | 4 | 5 | 2 | *
! * | 0 | | . | | . | *
! * | ,/ `\ | | ,/ `\ | | ,/ `\ | *
! * | ,/ `\ | | ,0 `1 | | ,/ `\ | *
! * |,/ `\| |,/ `\| |,/ 0 `\| *
! * 1-------------2 .------3------. .-------------. *
! *
! * \endverbatim
! *
! */
! typedef struct {
! int v[6]; /*!< Vertices of the prism */
! int ref; /*!< Reference of the prism */
! int base;
! int flag;
! int xpr; /*!< Index of the surface \ref MMG5_xPrism associated to
! the prism*/
! char tag;
! } MMG5_Prism;
! typedef MMG5_Prism * MMG5_pPrism;
! /**
! * \struct MMG5_xPrism
! * \brief Structure to store the surface prism of a MMG mesh.
! */
! typedef struct {
! int ref[5]; /*!< face references: ref[0]={0,1,2}, ref[1]={3,4,5},
! * ref[2]={0,3,4,1}, ref[3]={0,2,5,1} */
! int edg[9]; /*!< edges references:
! * edg[0]={0,1},edg[1]={0,2},edg[2]={0,3},edg[3]={1,2},
! * edg[4]={1,4},edg[5]={2,5},edg[6]={3,4},edg[7]={3,5},
! * edg[8]={4,5}*/
! int16_t ftag[5]; /*!< ftag[i] contains the tag associated to the
! \f$i^{th}\f$ face of the prism */
! int16_t tag[9]; /*!< tag[i] contains the tag associated to the
! \f$i^{th}\f$ edge of the prism */
! } MMG5_xPrism;
! typedef MMG5_xPrism * MMG5_pxPrism;
! /**
! * \struc MMG5_Mat
! * \brief To store user-defined references in the mesh (useful in LS mode)
! */
! typedef struct {
! char dospl;
! int ref,rin,rex;
! } MMG5_Mat;
! typedef MMG5_Mat * MMG5_pMat;
! /**
! * \struct MMG5_Info
! * \brief Store input parameters of the run.
! */
! typedef struct {
! MMG5_pPar par;
! double dhd,hmin,hmax,hsiz,hgrad,hausd,min[3],max[3],delta,ls;
! int mem,npar,npari;
! int opnbdy;
! int renum;
! int octree;
! int nmat;
! char nreg;
! char imprim,ddebug,badkal,iso,fem,lag;
! char parTyp; /*!< Contains binary flags to say which kind of local
! param are setted: if \f$tag = 1+2+4\f$ then the point
! is \a MG_Vert, MG_Tria and MG_Tetra */
! unsigned char optim, optimLES, noinsert, noswap, nomove, nosurf;
! MMG5_pMat mat;
! } MMG5_Info;
! /**
! * \struct MMG5_hgeom
! * \brief To store geometric edges.
! */
! typedef struct {
! int a; /*!< First extremity of edge */
! int b; /*!< Second extremity of edge */
! int ref; /*!< Reference of edge */
! int nxt; /*!< Next element of hash table */
! int16_t tag; /*!< tag of edge */
! } MMG5_hgeom;
! typedef struct {
! MMG5_hgeom *geom;
! int siz,max,nxt;
! } MMG5_HGeom;
! /**
! * \struct MMG5_Mesh
! * \brief MMG mesh structure.
! * \todo try to remove nc1;
! */
! typedef struct {
! long long memMax; /*!< Maximum memory available */
! long long memCur; /*!< Current memory used */
! double gap; /*!< Gap for table reallocation */
! int ver; /*!< Version of the mesh file */
! int dim; /*!< Dimension of the mesh */
! int type; /*!< Type of the mesh */
! int npi,nti,nai,nei,np,na,nt,ne,npmax,namax,ntmax,nemax,xpmax,xtmax;
! int nquad,nprism; /* number of quadrangles and prisms */
! int nsols; /* number of solutions in the solution file (mshmet/int) */
! int nc1;
! int base; /*!< Used with \a flag to know if an entity has been
! treated */
! int mark; /*!< Flag for delaunay (to know if an entity has
! been treated) */
! int xp,xt,xpr; /*!< Number of surfaces points, triangles/tetrahedra and prisms */
! int npnil; /*!< Index of first unused point */
! int nenil; /*!< Index of first unused element */
! int nanil; /*!< Index of first unused edge (2d only)*/
! int *adja; /*!< Table of tetrahedron adjacency: if
! \f$adja[4*(i-1)+1+j]=4*k+l\f$ then the \f$i^{th}\f$ and
! \f$k^th\f$ tetrahedra are adjacent and share their
! faces \a j and \a l (resp.) */
! int *adjt; /*!< Table of triangles adjacency: if
! \f$adjt[3*(i-1)+1+j]=3*k+l\f$ then the \f$i^{th}\f$ and
! \f$k^th\f$ triangles are adjacent and share their
! edges \a j and \a l (resp.) */
! int *adjapr; /*!< Table of prisms adjacency: if
! \f$adjapr[5*(i-1)+1+j]=5*k+l\f$ then the \f$i^{th}\f$ and
! \f$k^th\f$ prism are adjacent and share their
! faces \a j and \a l (resp.) */
! MMG5_pPoint point; /*!< Pointer toward the \ref MMG5_Point structure */
! MMG5_pxPoint xpoint; /*!< Pointer toward the \ref MMG5_xPoint structure */
! MMG5_pTetra tetra; /*!< Pointer toward the \ref MMG5_Tetra structure */
! MMG5_pxTetra xtetra; /*!< Pointer toward the \ref MMG5_xTetra structure */
! MMG5_pPrism prism; /*!< Pointer toward the \ref MMG5_Prism structure */
! MMG5_pxPrism xprism; /*!< Pointer toward the \ref MMG5_pxPrism structure */
! MMG5_pTria tria; /*!< Pointer toward the \ref MMG5_Tria structure */
! MMG5_pQuad quadra; /*!< Pointer toward the \ref MMG5_Quad structure */
! MMG5_pEdge edge; /*!< Pointer toward the \ref MMG5_Edge structure */
! MMG5_HGeom htab; /*!< \ref MMG5_HGeom structure */
! MMG5_Info info; /*!< \ref MMG5_Info structure */
! char *namein; /*!< Input mesh name */
! char *nameout; /*!< Output mesh name */
! } MMG5_Mesh;
! typedef MMG5_Mesh * MMG5_pMesh;
! /**
! * \struct MMG5_sol
! * \brief MMG Solution structure (for solution or metric).
! */
! typedef struct {
! int ver; /* Version of the solution file */
! int dim; /* Dimension of the solution file*/
! int np; /* Number of points of the solution */
! int npmax; /* Maximum number of points */
! int npi; /* Temporary number of points (internal use only) */
! int size; /* Number of solutions per entity */
! int type; /* Type of the solution (scalar, vectorial of tensorial) */
! double *m; /*!< Solution values */
! double umin,umax; /*!