Newer
Older
CTX::instance()->lock = 1;
Msg::ResetErrorCounter();
// Initialize pseudo random mesh generator with the same seed
srand(1);
std::for_each(m->firstRegion(), m->lastRegion(), deMeshGRegion());
std::for_each(m->firstFace(), m->lastFace(), deMeshGFace());
}
std::for_each(m->firstRegion(), m->lastRegion(), deMeshGRegion());
}
}
// Orient the line and surface meshes so that they match the orientation of
// the geometrical entities and/or the user orientation constraints
if(m->getMeshStatus() >= 1)
std::for_each(m->firstEdge(), m->lastEdge(), orientMeshGEdge());
if(m->getMeshStatus() >= 2)
std::for_each(m->firstFace(), m->lastFace(), orientMeshGFace());
// Optimize quality of 3D tet mesh
if(m->getMeshStatus() == 3){
for(int i = 0; i < std::max(CTX::instance()->mesh.optimize,

Christophe Geuzaine
committed
CTX::instance()->mesh.optimizeNetgen); i++){
if(CTX::instance()->mesh.optimize > i) OptimizeMesh(m);
if(CTX::instance()->mesh.optimizeNetgen > i) OptimizeMeshNetgen(m);
// Subdivide into quads or hexas
if(m->getMeshStatus() == 2 && CTX::instance()->mesh.algoSubdivide == 1)
RefineMesh(m, CTX::instance()->mesh.secondOrderLinear, true);
else if(m->getMeshStatus() == 3 && CTX::instance()->mesh.algoSubdivide == 2)
RefineMesh(m, CTX::instance()->mesh.secondOrderLinear, false, true);
// Compute homology if necessary
if(!Msg::GetErrorCount()) m->computeHomology();
if(m->getMeshStatus() && CTX::instance()->mesh.order > 1)
SetOrderN(m, CTX::instance()->mesh.order, CTX::instance()->mesh.secondOrderLinear,

Christophe Geuzaine
committed
CTX::instance()->mesh.secondOrderIncomplete);
// Optimize high order elements
if(CTX::instance()->mesh.hoOptimize){
#if defined(HAVE_OPTHOM)
if(CTX::instance()->mesh.hoOptimize < 0){
Thomas Toulorge
committed
ElasticAnalogy(GModel::current(), false);
OptHomParameters p;
p.nbLayers = CTX::instance()->mesh.hoNLayers;
p.BARRIER_MIN = CTX::instance()->mesh.hoThresholdMin;
p.BARRIER_MAX = CTX::instance()->mesh.hoThresholdMax;
p.dim = GModel::current()->getDim();
p.optPrimSurfMesh = CTX::instance()->mesh.hoOptPrimSurfMesh;
HighOrderMeshOptimizer(GModel::current(), p);
}
#else
Msg::Error("High-order mesh optimization requires the OPTHOM module");
#endif
}
Msg::Info("%d vertices %d elements",

Christophe Geuzaine
committed
m->getNumMeshVertices(), m->getNumMeshElements());
Msg::PrintErrorCounter("Mesh generation error summary");
CTX::instance()->lock = 0;
CTX::instance()->mesh.changed = ENT_ALL;