diff --git a/contrib/MeshQualityOptimizer/MeshQualityOptimizer.cpp b/contrib/MeshQualityOptimizer/MeshQualityOptimizer.cpp index deaf84865a43ccc5570c7fdce56c6366fa621b50..45e768233fc3d59e983af88d79851b00ae188c31 100644 --- a/contrib/MeshQualityOptimizer/MeshQualityOptimizer.cpp +++ b/contrib/MeshQualityOptimizer/MeshQualityOptimizer.cpp @@ -106,24 +106,31 @@ void MeshQualityOptimizer(GModel *gm, MeshQualOptParameters &p) minInvCondNumBarFunc.setTarget(p.minTargetInvCondNum, 1.); MeshOptPass minJacPass; - minJacPass.barrierIterMax = p.optPassMax; - minJacPass.optIterMax = p.itMax; - minJacPass.contrib.push_back(&nodeDistFunc); - minJacPass.contrib.push_back(&minIdealJacBarFunc); - par.pass.push_back(minJacPass); - MeshOptPass minInvCondNumPass; - minInvCondNumPass.barrierIterMax = p.optPassMax; - minInvCondNumPass.optIterMax = p.itMax; - minInvCondNumPass.contrib.push_back(&nodeDistFunc); - minInvCondNumPass.contrib.push_back(&minInvCondNumBarFunc); - par.pass.push_back(minInvCondNumPass); + if (p.onlyValidity) { + minJacPass.barrierIterMax = p.optPassMax; + minJacPass.optIterMax = p.itMax; + minJacPass.contrib.push_back(&nodeDistFunc); + minJacPass.contrib.push_back(&minIdealJacBarFunc); + par.pass.push_back(minJacPass); + } + else { + minInvCondNumPass.barrierIterMax = p.optPassMax; + minInvCondNumPass.optIterMax = p.itMax; + minInvCondNumPass.contrib.push_back(&nodeDistFunc); + minInvCondNumPass.contrib.push_back(&minInvCondNumBarFunc); + par.pass.push_back(minInvCondNumPass); + } meshOptimizer(gm, par); p.CPU = par.CPU; -// p.minIdealJac = minIdealJacBarFunc.getMin(); -// p.maxIdealJac = minIdealJacBarFunc.getMax(); - p.minInvCondNum = minInvCondNumBarFunc.getMin(); - p.maxInvCondNum = minInvCondNumBarFunc.getMax(); + if (p.onlyValidity) { + p.minIdealJac = minIdealJacBarFunc.getMin(); + p.maxIdealJac = minIdealJacBarFunc.getMax(); + } + else { + p.minInvCondNum = minInvCondNumBarFunc.getMin(); + p.maxInvCondNum = minInvCondNumBarFunc.getMax(); + } } diff --git a/contrib/MeshQualityOptimizer/MeshQualityOptimizer.h b/contrib/MeshQualityOptimizer/MeshQualityOptimizer.h index 97ec9a596ef9b8c7bba19f31ba3a4c5722d93178..8353638e4782aba17eb133d6289c39d7a317cc70 100644 --- a/contrib/MeshQualityOptimizer/MeshQualityOptimizer.h +++ b/contrib/MeshQualityOptimizer/MeshQualityOptimizer.h @@ -33,38 +33,38 @@ class GModel; struct MeshQualOptParameters { + bool onlyValidity; bool excludeQuad, excludeHex, excludePrism; double minTargetIdealJac; double minTargetInvCondNum; - double weightFixed; // weight of the energy for fixed nodes - double weightFree; // weight of the energy for free nodes - int nbLayers; // number of layers taken around a bad element - int dim; // which dimension to optimize - int itMax; // max number of iterations in the optimization process - int optPassMax; // max number of optimization passes - bool onlyVisible; // apply optimization to visible entities ONLY - double distanceFactor; // filter elements such that no elements further away - // than DistanceFactor times the max distance to - // straight sided version of an element are optimized - bool fixBndNodes; // how jacobians are computed and if points can move on boundaries - int strategy; // 0 = connected blobs, 1 = adaptive one-by-one - int maxAdaptBlob; // Max. nb. of blob adaptation interations - int adaptBlobLayerFact; // Growth factor in number of layers for blob adaptation - double adaptBlobDistFact; // Growth factor in distance factor for blob adaptation + double weightFixed; // weight of the energy for fixed nodes + double weightFree; // weight of the energy for free nodes + int nbLayers; // number of layers taken around a bad element + int dim; // which dimension to optimize + int itMax; // max number of iterations in the optimization process + int optPassMax; // max number of optimization passes + bool onlyVisible; // apply optimization to visible entities ONLY + double distanceFactor; // Distance criterion for patch creation + bool fixBndNodes; // If points can move on boundaries + int strategy; // 0 = connected blobs, 1 = adaptive one-by-one + int maxAdaptBlob; // Max. nb. of blob adaptation interations (if adaptive) + int adaptBlobLayerFact; // Growth factor in number of layers for blob adaptation (if adaptive) + double adaptBlobDistFact; // Growth factor in distance factor for blob adaptation (if adaptive) int SUCCESS ; // 0 --> success , 1 --> Not converged -// double minIdealJac, maxIdealJac; // after optimization, range of jacobians + double minIdealJac, maxIdealJac; // after optimization, range of jacobians double minInvCondNum, maxInvCondNum; // after optimization, range of jacobians double CPU; // Time for optimization MeshQualOptParameters () - : excludeQuad(false), excludeHex(false), excludePrism(false), + : onlyValidity(false), excludeQuad(false), + excludeHex(false), excludePrism(false), minTargetIdealJac(0.1), minTargetInvCondNum(0.1), weightFixed(1000.), weightFree (1.), nbLayers (6) , dim(3) , itMax(300), optPassMax(50), onlyVisible(true), distanceFactor(12), fixBndNodes(false), strategy(0), maxAdaptBlob(3), adaptBlobLayerFact(2.), adaptBlobDistFact(2.), CPU(0.), -// minIdealJac(0.), maxIdealJac(0.), SUCCESS(-1) - minInvCondNum(0.), maxInvCondNum(0.), SUCCESS(-1) + minIdealJac(0.), maxIdealJac(0.), minInvCondNum(0.), maxInvCondNum(0.), + SUCCESS(-1) { } };