mmg3d
movpt_3d.c File Reference

Functions to move a point in the mesh. More...

Include dependency graph for movpt_3d.c:

Functions

int MMG5_movintpt_iso (MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int *list, int ilist, int improve)
 
int MMG5_movintptLES_iso (MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int *list, int ilist, int improve)
 
int MMG3D_rotate_surfacicBall (MMG5_pMesh mesh, int *lists, int ilists, int ip0, double r[3][3], double *lispoi)
 
int MMG3D_movbdyregpt_geom (MMG5_pMesh mesh, int *lists, const int kel, const int ip0, double n[3], double lambda[3], double o[3], double no[3])
 
int MMG5_movbdyregpt_iso (MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int *listv, int ilistv, int *lists, int ilists, int improveSurf, int improveVol)
 
static int MMG3D_movbdycurvept_iso (MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int *listv, int ilistv, int *lists, int ilists, int improve, const int16_t edgTag)
 
int MMG5_movbdyrefpt_iso (MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int *listv, int ilistv, int *lists, int ilists, int improve)
 
int MMG5_movbdynompt_iso (MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int *listv, int ilistv, int *lists, int ilists, int improve)
 
int MMG5_movbdynomintpt_iso (MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int *listv, int ilistv, int improve)
 
int MMG5_movbdyridpt_iso (MMG5_pMesh mesh, MMG5_pSol met, MMG3D_pPROctree PROctree, int *listv, int ilistv, int *lists, int ilists, int improve)
 
int MMG3D_movv_ani (MMG5_pMesh mesh, MMG5_pSol sol, int k, int ib)
 
int MMG3D_movnormal_iso (MMG5_pMesh mesh, MMG5_pSol sol, int k, int ib)
 
int MMG3D_movv_iso (MMG5_pMesh mesh, MMG5_pSol sol, int k, int ib)
 

Detailed Description

Functions to move a point in the mesh.

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

Function Documentation

◆ MMG3D_movbdycurvept_iso()

static int MMG3D_movbdycurvept_iso ( MMG5_pMesh  mesh,
MMG5_pSol  met,
MMG3D_pPROctree  PROctree,
int *  listv,
int  ilistv,
int *  lists,
int  ilists,
int  improve,
const int16_t  edgTag 
)
inlinestatic
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
PROctreepointer toward the PROctree structure.
listvpointer toward the volumic ball of the point.
ilistvsize of the volumic ball.
listspointer toward the surfacic ball of the point.
ilistssize of the surfacic ball.
improveforce the new minimum element quality to be greater or equal than 1.02 of the old minimum element quality.
edgTagType of edge on which we move (MG_REF, MG_NOM or MG_GEO).
Returns
0 if fail, 1 if success.

Move boundary reference, ridge or non-manifold point, whose volumic and surfacic balls are passed.

Remarks
the metric is not interpolated at the new position.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG3D_movbdyregpt_geom()

int MMG3D_movbdyregpt_geom ( MMG5_pMesh  mesh,
int *  lists,
const int  kel,
const int  ip0,
double  n[3],
double  lambda[3],
double  o[3],
double  no[3] 
)
Parameters
meshpointer toward the mesh
listspointer toward the surface ball of ip0
kelindex of the current element in the ball
ip0global index of the point to move
nnormal at ip0
lambdabarycentric coor of the new point in triangle
ocoordinates of the new point (to compute)
nonormal at new point (to compute)
Returns
-1 if fail, 0 if we can't move the point, nxp the index of the new xpoint at ip0 if success.

Compute the Bezier patch at element lists[kel], compute the new point coordinates, normal and tangent and check the geometric approximation.

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

◆ MMG3D_movnormal_iso()

int MMG3D_movnormal_iso ( MMG5_pMesh  mesh,
MMG5_pSol  sol,
int  k,
int  ib 
)
Parameters
meshpointer toward the mesh structure.
solpointer toward the metric structure.
ktetra index.
iblocal index of the point inside the tetra k.
Returns
0 if fail, 1 if success.

Move internal point according to the normal at the opposite face Try to increase the volume of the tetra.

Remarks
the metric is not interpolated at the new position.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG3D_movv_ani()

int MMG3D_movv_ani ( MMG5_pMesh  mesh,
MMG5_pSol  sol,
int  k,
int  ib 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG3D_movv_iso()

int MMG3D_movv_iso ( MMG5_pMesh  mesh,
MMG5_pSol  sol,
int  k,
int  ib 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG3D_rotate_surfacicBall()

int MMG3D_rotate_surfacicBall ( MMG5_pMesh  mesh,
int *  lists,
int  ilists,
int  ip0,
double  r[3][3],
double *  lispoi 
)
Parameters
meshpointer toward the mesh structure.
listspointer toward the surfacic ball of the point.
ilistssize of the surfacic ball.
ip0global index of the point that we move
rrotation matrix that sends the normal at ip0 to z-axis
lispoirotated surfacic ball (lispoi[k] is the common edge between faces lists[k-1] and lists[k])
Returns
1 if success, 0 if the projection along the tangent plane are invalid.

Rotation of the oriented surfacic ball of ip0.

At this point, lispoi contains the oriented surface ball of point p0, that has been rotated through r, with the convention that triangle l has edges lispoi[l]; lispoi[l+1]

Here is the caller graph for this function:

◆ MMG5_movbdynomintpt_iso()

int MMG5_movbdynomintpt_iso ( MMG5_pMesh  mesh,
MMG5_pSol  met,
MMG3D_pPROctree  PROctree,
int *  listv,
int  ilistv,
int  improve 
)
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
PROctreepointer toward the PROctree structure.
listvpointer toward the volumic ball of the point.
ilistvsize of the volumic ball.
improveforce the new minimum element quality to be greater or equal than 1.02 of the old minimum element quality.
Returns
0 if fail, 1 if success.

Move internal non manifold point, whose volumic ball is passed

Remarks
the metric is not interpolated at the new position.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_movbdynompt_iso()

int MMG5_movbdynompt_iso ( MMG5_pMesh  mesh,
MMG5_pSol  met,
MMG3D_pPROctree  PROctree,
int *  listv,
int  ilistv,
int *  lists,
int  ilists,
int  improve 
)
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
PROctreepointer toward the PROctree structure.
listvpointer toward the volumic ball of the point.
ilistvsize of the volumic ball.
listspointer toward the surfacic ball of the point.
ilistssize of the surfacic ball.
improveforce the new minimum element quality to be greater or equal than 1.02 of the old minimum element quality.
Returns
0 if fail, 1 if success.

Move boundary non-manifold point, whose volumic and surfacic balls are passed.

Remarks
the metric is not interpolated at the new position.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_movbdyrefpt_iso()

int MMG5_movbdyrefpt_iso ( MMG5_pMesh  mesh,
MMG5_pSol  met,
MMG3D_pPROctree  PROctree,
int *  listv,
int  ilistv,
int *  lists,
int  ilists,
int  improve 
)
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
PROctreepointer toward the PROctree structure.
listvpointer toward the volumic ball of the point.
ilistvsize of the volumic ball.
listspointer toward the surfacic ball of the point.
ilistssize of the surfacic ball.
improveforce the new minimum element quality to be greater or equal than 1.02 of the old minimum element quality.
Returns
0 if fail, 1 if success.

Move boundary reference point, whose volumic and surfacic balls are passed.

Remarks
the metric is not interpolated at the new position.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_movbdyregpt_iso()

int MMG5_movbdyregpt_iso ( MMG5_pMesh  mesh,
MMG5_pSol  met,
MMG3D_pPROctree  PROctree,
int *  listv,
int  ilistv,
int *  lists,
int  ilists,
int  improveSurf,
int  improveVol 
)
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
PROctreepointer toward the PROctree structure.
listvpointer toward the volumic ball of the point.
ilistvsize of the volumic ball.
listspointer toward the surfacic ball of the point.
ilistssize of the surfacic ball.
improveforce the new minimum element quality to be greater or equal than 1.02 of the old minimum element quality.
Returns
0 if we can not move, 1 if success, -1 if fail.

Move boundary regular point, whose volumic and surfacic balls are passed.

Remarks
the metric is not interpolated at the new position.

Step 1 : rotation matrix that sends normal n to the third coordinate vector of R^3

Step 2 : rotation of the oriented surfacic ball with r : lispoi[k] is the common edge between faces lists[k-1] and lists[k]

Step 3 : Compute optimal position to make current triangle equilateral, and average of these positions

Step 4 : locate new point in the ball, and compute its barycentric coordinates

Step 5 : come back to original problem, and compute patch in triangle iel

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

◆ MMG5_movbdyridpt_iso()

int MMG5_movbdyridpt_iso ( MMG5_pMesh  mesh,
MMG5_pSol  met,
MMG3D_pPROctree  PROctree,
int *  listv,
int  ilistv,
int *  lists,
int  ilists,
int  improve 
)
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
PROctreepointer toward the PROctree structure.
listvpointer toward the volumic ball of the point.
ilistvsize of the volumic ball.
listspointer toward the surfacic ball of the point.
ilistssize of the surfacic ball.
improveforce the new minimum element quality to be greater or equal than 1.02 of the old minimum element quality.
Returns
0 if fail, 1 if success.

Move boundary ridge point, whose volumic and surfacic balls are passed.

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

◆ MMG5_movintpt_iso()

int MMG5_movintpt_iso ( MMG5_pMesh  mesh,
MMG5_pSol  met,
MMG3D_pPROctree  PROctree,
int *  list,
int  ilist,
int  improve 
)
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
PROctreepointer toward the PROctree structure.
listpointer toward the volumic ball of the point.
ilistsize of the volumic ball.
improveforce the new minimum element quality to be greater or equal than 0.9 of the old minimum element quality.
Returns
0 if we can't move the point, 1 if we can.

Move internal point whose volumic is passed.

Remarks
the metric is not interpolated at the new position.
we don't check if we break the hausdorff criterion.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_movintptLES_iso()

int MMG5_movintptLES_iso ( MMG5_pMesh  mesh,
MMG5_pSol  met,
MMG3D_pPROctree  PROctree,
int *  list,
int  ilist,
int  improve 
)
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
PROctreepointer toward the PROctree structure.
listpointer toward the volumic ball of the point.
ilistsize of the volumic ball.
improveforce the new minimum element quality to be greater or equal than 0.9 of the old minimum element quality.
Returns
0 if we can't move the point, 1 if we can.

Move internal point whose volumic ball is passed (for LES optimization). The optimal point position is computed as the barycenter of the optimal point position for each tetra. The optimal point position for a tetra is the point located over the normal of the face at the face barycenter and at the distance 1 of the face.

Remarks
the metric is not interpolated at the new position.
we don't check if we break the hausdorff criterion.
not used.
Here is the call graph for this function: