mmg3d
hash_3d.c File Reference

Functions for hash tables management and tetrahedra packing. More...

#include "mmg3d.h"
Include dependency graph for hash_3d.c:

Macros

#define MMG5_KC   13
 

Functions

int MMG5_paktet (MMG5_pMesh mesh)
 
int MMG5_hashFace (MMG5_pMesh mesh, MMG5_Hash *hash, int ia, int ib, int ic, int k)
 
int MMG5_hashGetFace (MMG5_Hash *hash, int ia, int ib, int ic)
 
int MMG3D_hashTetra (MMG5_pMesh mesh, int pack)
 
int MMG3D_hashPrism (MMG5_pMesh mesh)
 
static int MMG5_setEdgeNmTag (MMG5_pMesh mesh, MMG5_Hash *hash)
 
static int MMG5_setVertexNmTag (MMG5_pMesh mesh)
 
int MMG5_setNmTag (MMG5_pMesh mesh, MMG5_Hash *hash)
 
int MMG3D_hashTria (MMG5_pMesh mesh, MMG5_Hash *hash)
 
int MMG5_hashPop (MMG5_Hash *hash, int a, int b)
 
int MMG5_hTag (MMG5_HGeom *hash, int a, int b, int ref, int16_t tag)
 
int MMG5_hPop (MMG5_HGeom *hash, int a, int b, int *ref, int16_t *tag)
 
int MMG5_hGet (MMG5_HGeom *hash, int a, int b, int *ref, int16_t *tag)
 
int MMG5_hEdge (MMG5_pMesh mesh, MMG5_HGeom *hash, int a, int b, int ref, int16_t tag)
 
int MMG5_hNew (MMG5_pMesh mesh, MMG5_HGeom *hash, int hsiz, int hmax)
 
int MMG5_hGeom (MMG5_pMesh mesh)
 
static int MMG5_bdryTria (MMG5_pMesh mesh, int ntmesh)
 
int MMG5_chkBdryTria (MMG5_pMesh mesh)
 
int MMG5_bdrySet (MMG5_pMesh mesh)
 
int MMG5_bdryUpdate (MMG5_pMesh mesh)
 
int MMG5_bdryPerm (MMG5_pMesh mesh)
 

Variables

int8_t ddb
 

Detailed Description

Functions for hash tables management and tetrahedra packing.

Author
Charles Dapogny (UPMC)
Cécile Dobrzynski (Bx INP/Inria/UBordeaux)
Pascal Frey (UPMC)
Algiane Froehly (Inria/UBordeaux)
Version
5

Macro Definition Documentation

◆ MMG5_KC

#define MMG5_KC   13

Function Documentation

◆ MMG3D_hashPrism()

int MMG3D_hashPrism ( MMG5_pMesh  mesh)
Parameters
meshpointer toward the mesh structure.
Returns
0 if failed, 1 otherwise.

Create partial table of adjacency for prisms (prism $ <-> $ prism).

Remarks
Adjacencies between prisms and tetra are not filled here.
Warning
check the hashtable efficiency
Here is the caller graph for this function:

◆ MMG3D_hashTetra()

int MMG3D_hashTetra ( MMG5_pMesh  mesh,
int  pack 
)
Parameters
meshpointer toward the mesh structure.
packwe pack the mesh at function begining if $pack=1$.
Returns
0 if failed, 1 otherwise.

Create table of adjacency. Set pack variable to 0 for a compact mesh and to 1 for a mesh that need to be packed.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG3D_hashTria()

int MMG3D_hashTria ( MMG5_pMesh  mesh,
MMG5_Hash hash 
)
Parameters
meshpointer toward the mesh structure.
hashEdges hash table.
Returns
1 if success, 0 if failed.

Create surface adjacency table. Allocate the edge hash table hash but don't free it.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_bdryPerm()

int MMG5_bdryPerm ( MMG5_pMesh  mesh)
Parameters
meshpointer toward the mesh structure.
Returns
0 if failed, 1 otherwise.

Make orientation of triangles compatible with tetra faces for external tria and with domain of max ref for interface tria.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_bdrySet()

int MMG5_bdrySet ( MMG5_pMesh  mesh)
Parameters
meshpointer toward the mesh structure.
Returns
0 if failed, 1 if success.

Set the triangles references to the tetrahedra faces and edges.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_bdryTria()

static int MMG5_bdryTria ( MMG5_pMesh  mesh,
int  ntmesh 
)
inlinestatic
Parameters
meshpointer to the mesh structure.
ntmeshnumber of boundary tria found in the mesh.
Returns
0 if failed, 1 otherwise.

Fill tria array with missing triangles:

  • if called from the first time, xtetra is not allocated so missing triangles may be founded at domains interface or external boundary.
  • Otherwise, the tria array is reconstructed from the xtetra infos.
Remarks
mesh->xtetra is not allocated when MMG5_bdryTria is called by MMG3D_analys in mesh adp mode but it is allocated when called by packMesh or by analys in ls discretization mode.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_bdryUpdate()

int MMG5_bdryUpdate ( MMG5_pMesh  mesh)

Update tag and refs of tetra edges. If tetra is required, set the faces/edges to required

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_chkBdryTria()

int MMG5_chkBdryTria ( MMG5_pMesh  mesh)
Parameters
meshpointer toward the mesh structure.
Returns
1 if success, 0 otherwise.
  • Remove double triangles from tria array.
  • Remove triangles that do not belong to a boundary (non opnbdy mode) from tria array.
  • Check the matching between actual and given number of faces in the mesh: Count the number of faces in mesh and compare this number to the number of given triangles.
  • If the founded number exceed the given one, add the missing boundary triangles (call to MMG5_bdryTria). Do nothing otherwise.
  • Fill the adjacency relationship between prisms and tetra (fill adjapr with a negative value to mark this special faces).
  • Set to required the triangles at interface betwen prisms and tet.

Step 1: scan the mesh and count the boundaries

Step 2: detect the extra boundaries (that will be ignored) provided by the user

Step 3: add the missing boundary triangles or, if the mesh contains prisms, set to required the triangles at interface betwen prisms and tet

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_hashFace()

int MMG5_hashFace ( MMG5_pMesh  mesh,
MMG5_Hash hash,
int  ia,
int  ib,
int  ic,
int  k 
)
Parameters
meshpointer toward the mesh.
hashpointer toward the hash table to fill.
iafirst vertex of face to hash.
ibsecond vertex of face to hash.
icthird vertex of face to hash.
kindex of face to hash.
Returns
0 if fail, -1 if the face is newly hashed, index of the first face hashed if another face with same vertices exist.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_hashGetFace()

int MMG5_hashGetFace ( MMG5_Hash hash,
int  ia,
int  ib,
int  ic 
)

return index of triangle ia ib ic

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_hashPop()

int MMG5_hashPop ( MMG5_Hash hash,
int  a,
int  b 
)

remove edge from hash table

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_hEdge()

int MMG5_hEdge ( MMG5_pMesh  mesh,
MMG5_HGeom hash,
int  a,
int  b,
int  ref,
int16_t  tag 
)

store edge on geometry

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_hGeom()

int MMG5_hGeom ( MMG5_pMesh  mesh)
Parameters
meshpointer toward he mesh structure.
Returns
0 if failed, 1 otherwise

Build hashtable for initial mesh edges.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_hGet()

int MMG5_hGet ( MMG5_HGeom hash,
int  a,
int  b,
int *  ref,
int16_t *  tag 
)

get ref and tag to edge on geometry

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_hNew()

int MMG5_hNew ( MMG5_pMesh  mesh,
MMG5_HGeom hash,
int  hsiz,
int  hmax 
)

to store edge on geometry

Here is the caller graph for this function:

◆ MMG5_hPop()

int MMG5_hPop ( MMG5_HGeom hash,
int  a,
int  b,
int *  ref,
int16_t *  tag 
)

remove edge from hash table

Here is the call graph for this function:

◆ MMG5_hTag()

int MMG5_hTag ( MMG5_HGeom hash,
int  a,
int  b,
int  ref,
int16_t  tag 
)
Parameters
hashpointer toward the hash table in which edges are stored
afirst edge extremity
bsecond edge extremity
refreference to assign to the edge
tagtag to assign
Returns
0 if the edge is not in the hash table, 1 otherwise

set tag to edge on geometry

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_paktet()

int MMG5_paktet ( MMG5_pMesh  mesh)
Parameters
meshpointer toward the mesh structure.
Returns
1 if success, 0 if fail

tetra packing.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_setEdgeNmTag()

static int MMG5_setEdgeNmTag ( MMG5_pMesh  mesh,
MMG5_Hash hash 
)
inlinestatic
Parameters
meshpointer towar the mesh structure.
hashedges hash table.
Returns
1 if success, 0 if failed.

Set non-manifold tag at extremities of a non-manifold edge. Check if a non-manifold edge is at the interface of several distinct domains (thus we can't travel from a domain through another one by adjacency) and in this case, mark the edge and its extremities as required. Free the edge hash table hash if success.

Warning
if fail, the edge hash table hash is not freed.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_setNmTag()

int MMG5_setNmTag ( MMG5_pMesh  mesh,
MMG5_Hash hash 
)
Parameters
meshpointer towar the mesh structure.
hashedges hash table.
Returns
1 if success, 0 if failed.

Set tags to non-manifold edges and vertices. Not done before because we need the MMG5_xTetra table.

Warning
if fail, the edge hash table hash is not freed.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_setVertexNmTag()

static int MMG5_setVertexNmTag ( MMG5_pMesh  mesh)
inlinestatic
Parameters
meshpointer toward the mesh structure.
Returns
1 if success, 0 if fail. Seek the non-required non-manifold points and try to analyse whether they are corner or required.
Remarks
We don't know how to travel through the shell of a non-manifold point by triangle adjacency. Thus the work done here can't be performed in the MMG5_singul function.
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ ddb

int8_t ddb
extern