mmg3d
|
Create implicit surface in mesh. More...
#include "mmg3d.h"
Functions | |
static double | MMG3D_vfrac_1vertex (MMG5_pPoint ppt[4], int8_t i0, double v[4], int8_t part_opp) |
double | MMG3D_vfrac (MMG5_pMesh mesh, MMG5_pSol sol, int k, int pm) |
int | MMG3D_resetRef (MMG5_pMesh mesh) |
static int | MMG5_invsl (double A[3][3], double b[3], double r[3]) |
static int | MMG5_ismaniball (MMG5_pMesh mesh, MMG5_pSol sol, int k, int indp) |
static int | MMG3D_snpval_ls (MMG5_pMesh mesh, MMG5_pSol sol) |
int | MMG3D_rmc (MMG5_pMesh mesh, MMG5_pSol sol) |
static int | MMG3D_cuttet_ls (MMG5_pMesh mesh, MMG5_pSol sol, MMG5_pSol met) |
static int | MMG3D_setref_ls (MMG5_pMesh mesh, MMG5_pSol sol) |
int | MMG3D_update_xtetra (MMG5_pMesh mesh) |
int | MMG5_chkmaniball (MMG5_pMesh mesh, int start, int8_t ip) |
int | MMG5_chkmani (MMG5_pMesh mesh) |
int | MMG5_chkmani2 (MMG5_pMesh mesh, MMG5_pSol sol) |
int | MMG5_chkmanicoll (MMG5_pMesh mesh, int k, int iface, int iedg, int ndepmin, int ndepplus, int refmin, int refplus, int8_t isminp, int8_t isplp) |
int | MMG3D_mmg3d2 (MMG5_pMesh mesh, MMG5_pSol sol, MMG5_pSol met) |
Variables | |
int8_t | ddb |
Create implicit surface in mesh.
|
static |
mesh | pointer toward the mesh structure. |
sol | pointer toward the level-set values. |
met | pointer toward a metric (non-mandatory). |
Proceed to discretization of the implicit function carried by sol into mesh, once values of sol have been snapped/checked
int MMG3D_mmg3d2 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_pSol | met | ||
) |
mesh | pointer toward the mesh structure. |
sol | pointer toward the level-set. |
met | pointer toward a metric (optionnal). |
Create implicit surface in mesh.
int MMG3D_resetRef | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward the mesh. |
Reset MG_ISO vertex and tetra references to 0.
int MMG3D_rmc | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
mesh | pointer toward the mesh |
sol | pointer toward the level-set |
Removal of small parasitic components (bubbles of material, etc) with volume less than mesh->info.rmc (default VOLFRAC) * volume of the mesh.
|
static |
mesh | pointer toward the mesh structure. |
sol | pointer toward the level-set values. |
Set references to tets according to the sign of the level set function.
|
static |
mesh | pointer toward the mesh structure. |
sol | pointer toward the level-set function. |
Snap values of the level set function very close to 0 to exactly 0, and prevent nonmanifold patterns from being generated.
int MMG3D_update_xtetra | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward the mesh structure. |
Update the xtetra array to store the new bdy faces created by the isosurface discretization.
double MMG3D_vfrac | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
int | k, | ||
int | pm | ||
) |
mesh | pointer toward the mesh structure |
sol | pointer toward the ls function |
k | index of the triangle |
Calculate the area of the positive (if pm == 1) or negative (if pm == -1) subdomain inside tetra k defined by the ls function in sol
Checks for debug mode
|
inlinestatic |
ppt | array of points containing the tetra vertices |
i0 | local index of the vertex that has a sign different to the other vertices. |
part_opp | 0 if we want to compute the area containing the vertex i0, 1 if we want the area that do not contains i0. |
Compute the area (x6) defined by the level-set inside the tetra with vertices ppt. This tetra must be splitted by the level-set such has it has exactly 1 vertex (the vertex i0) with sign opposite to the other vertices. If part_opp == 0, we compte the area that contains i0, otherwise we compute the complementary area.
int MMG5_chkmani | ( | MMG5_pMesh | mesh | ) |
Check whether implicit surface enclosed in volume is orientable
First test : check whether a tetra has 4 boundary faces
Second test : Check whether configuration is manifold in each ball
int MMG5_chkmani2 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
mesh | pointer toward the mesh structure |
sol | pointer toward the metric |
Check whether implicit surface enclosed in volume is orientable (perform an additionnal test w.r.t. MMG5_chkmani)
First test : assure no tetra has its 4 vertices on implicit boundary
Second test : check whether configuration is manifold in each ball
int MMG5_chkmaniball | ( | MMG5_pMesh | mesh, |
int | start, | ||
int8_t | ip | ||
) |
mesh | pointer toward the mesh |
start | index of the starting tetra |
ip | point index |
Check whether implicit surface is orientable in ball of point ip in tet iel ; Beware : may return 0 when implicit boundary is tangent to outer boundary
int MMG5_chkmanicoll | ( | MMG5_pMesh | mesh, |
int | k, | ||
int | iface, | ||
int | iedg, | ||
int | ndepmin, | ||
int | ndepplus, | ||
int | refmin, | ||
int | refplus, | ||
int8_t | isminp, | ||
int8_t | isplp | ||
) |
mesh | pointer toward the mesh structure. |
k | index of element in which we collapse. |
iface | face through wich we perform the collapse |
iedg | edge to collapse |
ndepmin | index of an elt with ref refmin and outside the shell of edge. |
ndepplus | ndex of an elt with ref refplus and outside the shell of edge. |
refmin | reference of one of the two subdomains in presence |
refplus | reference of the other subdomain in presence |
isminp | 1 if we have found a tetra with ref refmin |
isplp | 1 if we have found a tetra with ref refplus |
Check whether collapse of point np to nq does not create a non manifold situation at nq ndepmin, ndepplus = tetra of ref minus, plus in ball of np, not in shell of (np,nq).
First step : pile up tetras of future ball of nq, crossing through the shell of (np,nq), as long as they have same ref as ndepmin list[l] <= 0 if element of ball of np, >= 0, if element of ball of nq
Second step : same process, starting with a tetra of different reference, in the ball of np
|
inlinestatic |
solve 3*3 non symmetric system Ar = b
|
static |
mesh | pointer toward the mesh structure. |
sol | pointer toward the level-set values. |
k | index of the starting tetra. |
indp | local index (inside the tria k) of the vertex that we check. |
Check whether snapping the value of vertex indp to 0 exactly leads to a non manifold situation.
|
extern |