Mmg
Simplicial remeshers (mesh adaptation, isovalue discretization, lagrangian movement)
Macros | Functions | Variables
hash_3d.c File Reference

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

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

Go to the source code of this file.

Macros

#define MMG5_KC   13
 

Functions

int MMG5_paktet (MMG5_pMesh mesh)
 
MMG5_int MMG5_hashGetFace (MMG5_Hash *hash, MMG5_int ia, MMG5_int ib, MMG5_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, MMG5_int a, MMG5_int b)
 
int MMG5_hTag (MMG5_HGeom *hash, MMG5_int a, MMG5_int b, MMG5_int ref, int16_t tag)
 
int MMG5_hPop (MMG5_HGeom *hash, MMG5_int a, MMG5_int b, MMG5_int *ref, int16_t *tag)
 
int MMG5_hGet (MMG5_HGeom *hash, MMG5_int a, MMG5_int b, MMG5_int *ref, int16_t *tag)
 
int MMG5_hEdge (MMG5_pMesh mesh, MMG5_HGeom *hash, MMG5_int a, MMG5_int b, MMG5_int ref, int16_t tag)
 
int MMG5_hNew (MMG5_pMesh mesh, MMG5_HGeom *hash, MMG5_int hsiz, MMG5_int hmax)
 
int MMG5_hGeom (MMG5_pMesh mesh)
 
static int MMG5_bdryTria (MMG5_pMesh mesh, MMG5_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

Definition in file hash_3d.c.

Macro Definition Documentation

◆ MMG5_KC

#define MMG5_KC   13

Definition at line 38 of file hash_3d.c.

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

Definition at line 238 of file hash_3d.c.

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.

Definition at line 122 of file hash_3d.c.

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.

Definition at line 749 of file hash_3d.c.

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.

Definition at line 2135 of file hash_3d.c.

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.

Definition at line 1744 of file hash_3d.c.

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,
MMG5_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.

Definition at line 1177 of file hash_3d.c.

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

◆ MMG5_bdryUpdate()

int MMG5_bdryUpdate ( MMG5_pMesh  mesh)
Parameters
mesh
Returns
1 if successful, 0 if not.

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

Remarks
While remeshing:
  • A tetra with a boundary face has a xtetra:
    • a boundary edge has consistent tags as soon as it has a non 0 tag; #warning check this case
    • some boundary edges may have a 0 tag
  • a tetra with a boundary edge but no bdy faces may or may not have a xtetra and boundary edges may have or may not have tags so we can't guess nothing with such xtetra.

Definition at line 2044 of file hash_3d.c.

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

Definition at line 1439 of file hash_3d.c.

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

◆ MMG5_hashGetFace()

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

return index of triangle ia ib ic

Definition at line 84 of file hash_3d.c.

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

◆ MMG5_hashPop()

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

remove edge from hash table

Definition at line 761 of file hash_3d.c.

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,
MMG5_int  a,
MMG5_int  b,
MMG5_int  ref,
int16_t  tag 
)

store edge on geometry

Definition at line 951 of file hash_3d.c.

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.

Definition at line 1022 of file hash_3d.c.

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

◆ MMG5_hGet()

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

get ref and tag to edge on geometry

Definition at line 918 of file hash_3d.c.

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,
MMG5_int  hsiz,
MMG5_int  hmax 
)

to store edge on geometry

Definition at line 994 of file hash_3d.c.

Here is the caller graph for this function:

◆ MMG5_hPop()

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

remove edge from hash table

Definition at line 858 of file hash_3d.c.

Here is the call graph for this function:

◆ MMG5_hTag()

int MMG5_hTag ( MMG5_HGeom hash,
MMG5_int  a,
MMG5_int  b,
MMG5_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

Definition at line 825 of file hash_3d.c.

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.

Definition at line 50 of file hash_3d.c.

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.

Definition at line 456 of file hash_3d.c.

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.

Definition at line 727 of file hash_3d.c.

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.

Definition at line 624 of file hash_3d.c.

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

Variable Documentation

◆ ddb

int8_t ddb
extern

Definition at line 42 of file mmg3d1_delone.c.