expose mesh optimization parameters, e.g. to allow only smoothing or swapping

This commit is contained in:
Bryn Lloyd 2019-03-01 10:05:24 +01:00
parent 227d297f78
commit 292f8556a4
2 changed files with 24 additions and 43 deletions

View File

@ -1067,9 +1067,9 @@ namespace nglib
closeedgeenable = 0;
closeedgefact = 2.0;
minedgelenenable = 0;
minedgelen = 1e-4;
minedgelenenable = 0;
minedgelen = 1e-4;
second_order = 0;
quad_dominated = 0;
@ -1081,6 +1081,9 @@ namespace nglib
optsteps_2d = 3;
optsteps_3d = 3;
optimize3d = "cmdmustm";
optimize2d = "smsmsmSmSmSm";
invert_tets = 0;
invert_trigs = 0;
@ -1095,39 +1098,7 @@ namespace nglib
// Reset the local meshing parameters to the default values
DLL_HEADER void Ng_Meshing_Parameters :: Reset_Parameters()
{
uselocalh = 1;
maxh = 1000;
minh = 0;
fineness = 0.5;
grading = 0.3;
elementsperedge = 2.0;
elementspercurve = 2.0;
closeedgeenable = 0;
closeedgefact = 2.0;
minedgelenenable = 0;
minedgelen = 1e-4;
second_order = 0;
quad_dominated = 0;
meshsize_filename = 0;
optsurfmeshenable = 1;
optvolmeshenable = 1;
optsteps_2d = 3;
optsteps_3d = 3;
invert_tets = 0;
invert_trigs = 0;
check_overlap = 1;
check_overlapping_boundary = 1;
(*this) = Ng_Meshing_Parameters();
}
@ -1154,6 +1125,9 @@ namespace nglib
mparam.meshsizefilename = "";
mparam.optsteps2d = optsteps_2d;
mparam.optsteps3d = optsteps_3d;
if (strlen(optimize2d) > 0) mparam.optimize2d = optimize2d;
if (strlen(optimize3d) > 0) mparam.optimize3d = optimize3d;
mparam.inverttets = invert_tets;
mparam.inverttrigs = invert_trigs;
@ -1216,14 +1190,18 @@ namespace nglib
// ------------------ Begin - Uniform Mesh Refinement functions ---------------------
DLL_HEADER void Ng_Uniform_Refinement (Ng_Mesh * mesh)
DLL_HEADER void Ng_Uniform_Refinement (Ng_Mesh * ng_mesh)
{
Refinement ref;
ref.Refine ( * (Mesh*) mesh );
Mesh * mesh = (Mesh*) ng_mesh;
if (auto geom = mesh->GetGeometry())
geom->GetRefinement().Refine (*mesh);
else
Refinement().Refine (*mesh);
}
void Ng_SetRefinementFlag (Ng_Mesh * ng_mesh, int ei, int flag)
DLL_HEADER void Ng_SetRefinementFlag (Ng_Mesh * ng_mesh, int ei, int flag)
{
Mesh * mesh = (Mesh*) ng_mesh;
@ -1240,7 +1218,7 @@ namespace nglib
}
void Ng_SetSurfaceRefinementFlag (Ng_Mesh * ng_mesh, int ei, int flag)
DLL_HEADER void Ng_SetSurfaceRefinementFlag (Ng_Mesh * ng_mesh, int ei, int flag)
{
Mesh * mesh = (Mesh*) ng_mesh;
@ -1252,7 +1230,7 @@ namespace nglib
}
void Ng_Refine (Ng_Mesh * ng_mesh)
DLL_HEADER void Ng_Refine (Ng_Mesh * ng_mesh)
{
Mesh * mesh = (Mesh*) ng_mesh;
BisectionOptions biopt;
@ -1265,7 +1243,7 @@ namespace nglib
else
Refinement().Bisect (*mesh, biopt);
// not sure if this is needed?
// \todo not sure if this is needed?
//mesh -> UpdateTopology();
//mesh -> GetCurvedElements().SetIsHighOrder (false);
}

View File

@ -120,6 +120,9 @@ public:
int optsteps_3d; //!< Number of optimize steps to use for 3-D mesh optimization
int optsteps_2d; //!< Number of optimize steps to use for 2-D mesh optimization
const char* optimize3d; //!< Optimization strategy (s=swap shape, c=collapse, d=divide, m=move, M=cheap move)
const char* optimize2d; //!< Optimization strategy (s=swap tolopgical, S=swap shape, c=collapse, m=move)
// Philippose - 13/09/2010
// Added a couple more parameters into the meshing parameters list
// from Netgen into Nglib