diff --git a/Fltk/highOrderToolsWindow.cpp b/Fltk/highOrderToolsWindow.cpp index f2cc517103cc9f46536491bb6d81d0f0d67a0354..9beebec87cae34eabdb74ee0aa6548ef314273d3 100644 --- a/Fltk/highOrderToolsWindow.cpp +++ b/Fltk/highOrderToolsWindow.cpp @@ -151,8 +151,7 @@ static void highordertools_runopti_cb(Fl_Widget *w, void *data) p.dim = dim; p.itMax = (int) o->value[3]->value(); p.optPassMax = (int) o->value[4]->value(); - p.weightFixed = o->value[5]->value(); - p.weightFree = o->value[6]->value(); + p.weight = o->value[5]->value(); p.distanceFactor = o->value[7]->value(); p.fixBndNodes = (!o->CAD) || (o->choice[0]->value() == 0); p.strategy = o->choice[3]->value(); @@ -336,13 +335,9 @@ highOrderToolsWindow::highOrderToolsWindow(int deltaFontSize) y += BH; value[5] = new Fl_Value_Input - (x, y, IW/2, BH); + (x, y, IW, BH, "Weight on node displacement"); value[5]->align(FL_ALIGN_RIGHT); - value[5]->value(1000.); - value[6] = new Fl_Value_Input - (x+IW/2,y, IW/2, BH, "W fixed / W free"); - value[6]->align(FL_ALIGN_RIGHT); - value[6]->value(1.); + value[5]->value(1.); y += BH; value[3] = new Fl_Value_Input diff --git a/contrib/HighOrderMeshOptimizer/OptHOM.cpp b/contrib/HighOrderMeshOptimizer/OptHOM.cpp index 17b633b604cd787339dde86b672b5722d286e9fd..b255bcc8a6346e71451d565ec9be09590931b7dd 100644 --- a/contrib/HighOrderMeshOptimizer/OptHOM.cpp +++ b/contrib/HighOrderMeshOptimizer/OptHOM.cpp @@ -615,7 +615,7 @@ bool OptHOM::addMetricMinObjGrad(double &Obj, alglib::real_1d_array &gradObj) // Contribution of the vertex distance to the objective function value and // gradients -bool OptHOM::addDistObjGrad(double Fact, double Fact2, double &Obj, +bool OptHOM::addDistObjGrad(double Fact, double &Obj, alglib::real_1d_array &gradObj) { maxDist = 0; @@ -623,13 +623,12 @@ bool OptHOM::addDistObjGrad(double Fact, double Fact2, double &Obj, int nbBnd = 0; for (int iFV = 0; iFV < mesh.nFV(); iFV++) { - const double Factor = invLengthScaleSq*(mesh.forced(iFV) ? Fact : Fact2); const double dSq = mesh.distSq(iFV), dist = sqrt(dSq); - Obj += Factor * dSq; + Obj += Fact * dSq; std::vector<double> gDSq(mesh.nPCFV(iFV)); mesh.gradDistSq(iFV,gDSq); for (int iPC = 0; iPC < mesh.nPCFV(iFV); iPC++) - gradObj[mesh.indPCFV(iFV,iPC)] += Factor*gDSq[iPC]; + gradObj[mesh.indPCFV(iFV,iPC)] += Fact*gDSq[iPC]; maxDist = std::max(maxDist, dist); avgDist += dist; nbBnd++; @@ -641,7 +640,7 @@ bool OptHOM::addDistObjGrad(double Fact, double Fact2, double &Obj, return true; } -bool OptHOM::addDistObjGrad(double Fact, double Fact2, double &Obj, +bool OptHOM::addDistObjGrad(double Fact, double &Obj, std::vector<double> &gradObj) { maxDist = 0; @@ -649,13 +648,12 @@ bool OptHOM::addDistObjGrad(double Fact, double Fact2, double &Obj, int nbBnd = 0; for (int iFV = 0; iFV < mesh.nFV(); iFV++) { - const double Factor = invLengthScaleSq*(mesh.forced(iFV) ? Fact : Fact2); const double dSq = mesh.distSq(iFV), dist = sqrt(dSq); - Obj += Factor * dSq; + Obj += Fact * dSq; std::vector<double> gDSq(mesh.nPCFV(iFV)); mesh.gradDistSq(iFV,gDSq); for (int iPC = 0; iPC < mesh.nPCFV(iFV); iPC++) - gradObj[mesh.indPCFV(iFV,iPC)] += Factor*gDSq[iPC]; + gradObj[mesh.indPCFV(iFV,iPC)] += Fact*gDSq[iPC]; maxDist = std::max(maxDist, dist); avgDist += dist; nbBnd++; @@ -693,7 +691,7 @@ void OptHOM::evalObjGrad(std::vector<double> &x, /// control Jacobians addJacObjGrad(Obj, gradObj); /// Control distance to the straight sided mesh - addDistObjGrad(lambda, lambda2, Obj, gradObj); + addDistObjGrad(lambda, Obj, gradObj); if(_optimizeCAD) addBndObjGrad(lambda3, Obj, gradObj); @@ -713,7 +711,7 @@ void OptHOM::evalObjGrad(const alglib::real_1d_array &x, double &Obj, /// control Jacobians addJacObjGrad(Obj, gradObj); /// Control distance to the straight sided mesh - addDistObjGrad(lambda, lambda2, Obj, gradObj); + addDistObjGrad(lambda, Obj, gradObj); if(_optimizeMetricMin) addMetricMinObjGrad(Obj, gradObj); @@ -881,7 +879,7 @@ void OptHOM::OptimPass(alglib::real_1d_array &x, int itMax) } -int OptHOM::optimize(double weightFixed, double weightFree, double weightCAD, double b_min, +int OptHOM::optimize(double weight, double weightCAD, double b_min, double b_max, bool optimizeMetricMin, int pInt, int itMax, int optPassMax, int optCAD, double distanceMax, double tolerance) { @@ -895,8 +893,7 @@ int OptHOM::optimize(double weightFixed, double weightFree, double weightCAD, do _optimizeMetricMin = optimizeMetricMin; _optimizeCAD = optCAD; // Set weights & length scale for non-dimensionalization - lambda = weightFixed; - lambda2 = weightFree; + lambda = weight; lambda3 = weightCAD; geomTol = tolerance; std::vector<double> dSq(mesh.nEl()); @@ -982,7 +979,7 @@ int OptHOM::optimize(double weightFixed, double weightFree, double weightCAD, do } -int OptHOM::optimize_inhouse(double weightFixed, double weightFree, double weightCAD, double b_min, +int OptHOM::optimize_inhouse(double weight, double weightCAD, double b_min, double b_max, bool optimizeMetricMin, int pInt, int itMax, int optPassMax, int optCAD, double distanceMax, double tolerance) { @@ -996,8 +993,7 @@ int OptHOM::optimize_inhouse(double weightFixed, double weightFree, double weigh _optimizeMetricMin = optimizeMetricMin; _optimizeCAD = optCAD; // Set weights & length scale for non-dimensionalization - lambda = weightFixed; - lambda2 = weightFree; + lambda = weight; lambda3 = weightCAD; geomTol = tolerance; std::vector<double> dSq(mesh.nEl()); diff --git a/contrib/HighOrderMeshOptimizer/OptHOM.h b/contrib/HighOrderMeshOptimizer/OptHOM.h index 3eaf09d89c35f325f15b60934dc4c530dcd282a5..a4927fd7a6596fd01ac085f47e7b9ba0557b3262 100644 --- a/contrib/HighOrderMeshOptimizer/OptHOM.h +++ b/contrib/HighOrderMeshOptimizer/OptHOM.h @@ -51,15 +51,16 @@ public: // are in the range; returns 0 if the mesh is valid (all jacobians positive, // JMIN > 0) but JMIN < barrier_min || JMAX > barrier_max; returns -1 if the // mesh is invalid : some jacobians cannot be made positive - int optimize(double lambda, double lambda2, double lambda3, double barrier_min, double barrier_max, - bool optimizeMetricMin, int pInt, int itMax, int optPassMax, int optimizeCAD, double optCADDistMax, double tolerance); - int optimize_inhouse(double weightFixed, double weightFree, double weightCAD, double b_min, - double b_max, bool optimizeMetricMin, int pInt, - int itMax, int optPassMax, int optCAD, double distanceMax, double tolerance); + int optimize(double lambda, double lambda3, double barrier_min, double barrier_max, + bool optimizeMetricMin, int pInt, int itMax, int optPassMax, + int optimizeCAD, double optCADDistMax, double tolerance); + int optimize_inhouse(double weight, double weightCAD, double b_min, double b_max, + bool optimizeMetricMin, int pInt, int itMax, int optPassMax, + int optCAD, double distanceMax, double tolerance); void recalcJacDist(); inline void getJacDist(double &minJ, double &maxJ, double &maxD, double &avgD); void updateMesh(const alglib::real_1d_array &x); - void evalObjGrad(std::vector<double> &x, double &Obj, bool gradsNeeded, + void evalObjGrad(std::vector<double> &x, double &Obj, bool gradsNeeded, std::vector<double> &gradObj); void evalObjGrad(const alglib::real_1d_array &x, double &Obj, @@ -68,7 +69,7 @@ public: double barrier_min, barrier_max, distance_max, geomTol; private: - double lambda, lambda2, lambda3, jacBar, invLengthScaleSq; + double lambda, lambda3, jacBar, invLengthScaleSq; int iter, progressInterv; // Current iteration, interval of iterations for reporting bool _optimizeMetricMin; double initObj, initMaxDist, initAvgDist; // Values for reporting @@ -84,10 +85,8 @@ public: bool addBndObjGrad2(double Fact, double &Obj, alglib::real_1d_array &gradObj); bool addBndObjGrad(double Fact, double &Obj, std::vector<double> &gradObj); bool addMetricMinObjGrad(double &Obj, alglib::real_1d_array &gradObj); - bool addDistObjGrad(double Fact, double Fact2, double &Obj, - std::vector<double> &gradObj); - bool addDistObjGrad(double Fact, double Fact2, double &Obj, - alglib::real_1d_array &gradObj); + bool addDistObjGrad(double Fact, double &Obj, std::vector<double> &gradObj); + bool addDistObjGrad(double Fact, double &Obj, alglib::real_1d_array &gradObj); void calcScale(alglib::real_1d_array &scale); void OptimPass(alglib::real_1d_array &x, int itMax); void OptimPass(std::vector<double> &x, int itMax); diff --git a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp index 196202a3e7330ee525a95fc50031cf1509133a42..340620daf0dd480f2bc4ccf60eab4162afe5bba4 100644 --- a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp +++ b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp @@ -451,12 +451,14 @@ static void optimizeConnectedBlobs(const vertElVecMap &vertex2elements, if (temp.mesh.nPC() == 0) Msg::Info("Blob %i has no degree of freedom, skipping", i+1); else - success = temp.optimize(p.weightFixed, p.weightFree, p.optCADWeight, p.BARRIER_MIN, - p.BARRIER_MAX, false, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax, p.discrTolerance); + success = temp.optimize(p.weight, p.optCADWeight, p.BARRIER_MIN, p.BARRIER_MAX, + false, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax, + p.discrTolerance); if (success >= 0 && p.BARRIER_MIN_METRIC > 0) { Msg::Info("Jacobian optimization succeed, starting svd optimization"); - success = temp.optimize(p.weightFixed, p.weightFree, p.optCADWeight, p.BARRIER_MIN_METRIC, p.BARRIER_MAX, - true, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax,p.discrTolerance); + success = temp.optimize(p.weight, p.optCADWeight, p.BARRIER_MIN_METRIC, p.BARRIER_MAX, + true, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax, + p.discrTolerance); } double minJac, maxJac, distMaxBND, distAvgBND; temp.recalcJacDist(); @@ -537,12 +539,14 @@ static void optimizeOneByOne std::ostringstream ossI1; ossI1 << "initial_blob-" << iBadEl << ".msh"; opt->mesh.writeMSH(ossI1.str().c_str()); - success = opt->optimize(p.weightFixed, p.weightFree, p.optCADWeight, p.BARRIER_MIN, - p.BARRIER_MAX, false, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax,p.discrTolerance); + success = opt->optimize(p.weight, p.optCADWeight, p.BARRIER_MIN, p.BARRIER_MAX, + false, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax, + p.discrTolerance); if (success >= 0 && p.BARRIER_MIN_METRIC > 0) { Msg::Info("Jacobian optimization succeed, starting svd optimization"); - success = opt->optimize(p.weightFixed, p.weightFree, p.optCADWeight, p.BARRIER_MIN_METRIC, - p.BARRIER_MAX, true, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax,p.discrTolerance); + success = opt->optimize(p.weight, p.optCADWeight, p.BARRIER_MIN_METRIC, p.BARRIER_MAX, + true, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax, + p.discrTolerance); } // Measure min and max Jac., update mesh @@ -779,7 +783,7 @@ void HighOrderMeshOptimizerNew(GModel *gm, OptHomParameters &p) par.optDisplay = 30; par.verbose = 4; - ObjContribScaledNodeDispSq<ObjContribFuncSimple> nodeDistFunc(p.weightFixed, p.weightFree, + ObjContribScaledNodeDispSq<ObjContribFuncSimple> nodeDistFunc(p.weight, Patch::LS_MAXNODEDIST); ObjContribScaledJac<ObjContribFuncBarrierMovMin> minJacBarFunc(1.); minJacBarFunc.setTarget(p.BARRIER_MIN, 1.); diff --git a/contrib/HighOrderMeshOptimizer/OptHomRun.h b/contrib/HighOrderMeshOptimizer/OptHomRun.h index 2f2e1d9f816bbf42f7e07fd0d84a9d7fc5453780..56befba458bd5793e29dba930aa6df0bf8ddb661 100644 --- a/contrib/HighOrderMeshOptimizer/OptHomRun.h +++ b/contrib/HighOrderMeshOptimizer/OptHomRun.h @@ -37,8 +37,7 @@ struct OptHomParameters { double BARRIER_MIN_METRIC ; // minimum scaled jcaobian double BARRIER_MIN ; // minimum scaled jcaobian double BARRIER_MAX ; // maximum scaled jcaobian - double weightFixed ; // weight of the energy for fixed nodes - double weightFree ; // weight of the energy for free nodes + double weight ; // weight of the energy for 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 @@ -65,8 +64,8 @@ struct OptHomParameters { double CPU; // Time for optimization OptHomParameters () - : BARRIER_MIN_METRIC(-1.), BARRIER_MIN(0.1), BARRIER_MAX(2.0), weightFixed(1000.), - weightFree (1.), nbLayers (6) , dim(3) , itMax(300), onlyVisible(true), + : BARRIER_MIN_METRIC(-1.), BARRIER_MIN(0.1), BARRIER_MAX(2.0), weight(1.), + nbLayers (6) , dim(3) , itMax(300), onlyVisible(true), distanceFactor(12), fixBndNodes(false), strategy(0), maxAdaptBlob(3), adaptBlobLayerFact(2.), adaptBlobDistFact(2.), optPrimSurfMesh(false), optCAD(false), optCADWeight(1000.), optCADDistMax(1.e22), discrTolerance(1.e-4) diff --git a/contrib/MeshOptimizer/MeshOptObjContribScaledNodeDispSq.h b/contrib/MeshOptimizer/MeshOptObjContribScaledNodeDispSq.h index 6aa3c7ec05f6caacf82e4975732f073dcd2ea2f3..ae42119fef4c081645a2c4a4706a705ee4ff8446 100644 --- a/contrib/MeshOptimizer/MeshOptObjContribScaledNodeDispSq.h +++ b/contrib/MeshOptimizer/MeshOptObjContribScaledNodeDispSq.h @@ -11,8 +11,7 @@ template<class FuncType> class ObjContribScaledNodeDispSq : public ObjContrib, public FuncType { public: - ObjContribScaledNodeDispSq(double weightFixed, double weightFree, - Patch::LengthScaling scaling); + ObjContribScaledNodeDispSq(double weight, Patch::LengthScaling scaling); virtual ~ObjContribScaledNodeDispSq() {} virtual ObjContrib *copy() const; virtual void initialize(Patch *mesh); @@ -25,17 +24,16 @@ public: protected: Patch *_mesh; - double _weightFixed, _weightFree; + double _weight; Patch::LengthScaling _scaling; }; template<class FuncType> -ObjContribScaledNodeDispSq<FuncType>::ObjContribScaledNodeDispSq(double weightFixed, - double weightFree, +ObjContribScaledNodeDispSq<FuncType>::ObjContribScaledNodeDispSq(double weight, Patch::LengthScaling scaling) : ObjContrib("ScaledNodeDispSq", FuncType::getNamePrefix()+"ScaledNodeDispSq"), - _mesh(0), _weightFixed(weightFixed), _weightFree(weightFree), _scaling(scaling) + _mesh(0), _weight(weight), _scaling(scaling) { } @@ -65,12 +63,11 @@ bool ObjContribScaledNodeDispSq<FuncType>::addContrib(double &Obj, _max = -BIGVAL; for (int iFV = 0; iFV < _mesh->nFV(); iFV++) { - const double Factor = _mesh->forced(iFV) ? _weightFixed : _weightFree; const double dSq = _mesh->scaledNodeDispSq(iFV); - Obj += Factor * FuncType::compute(dSq); + Obj += _weight * FuncType::compute(dSq); std::vector<double> gDSq(_mesh->nPCFV(iFV)); _mesh->gradScaledNodeDispSq(iFV, gDSq); - const double dfact = Factor * FuncType::computeDiff(dSq); + const double dfact = _weight * FuncType::computeDiff(dSq); for (int iPC = 0; iPC < _mesh->nPCFV(iFV); iPC++) gradObj[_mesh->indPCFV(iFV, iPC)] += dfact * gDSq[iPC]; _min = std::min(_min, dSq); diff --git a/contrib/MeshOptimizer/MeshOptPatch.cpp b/contrib/MeshOptimizer/MeshOptPatch.cpp index ce0aa46d77da05e3777efc2602f953f4f7a3c96a..b6d457cd91b1fd49dbf6c91f240b0febd2f45495 100644 --- a/contrib/MeshOptimizer/MeshOptPatch.cpp +++ b/contrib/MeshOptimizer/MeshOptPatch.cpp @@ -133,7 +133,6 @@ int Patch::addFreeVert(MVertex* vert, const int iV, const int nPCV, _startPCFV.push_back(iStart); _nPCFV.push_back(nPCV); _nPC += nPCV; - _forced.push_back(forcedV); return _freeVert.size()-1; } else return std::distance(_freeVert.begin(),itVert); diff --git a/contrib/MeshOptimizer/MeshOptPatch.h b/contrib/MeshOptimizer/MeshOptPatch.h index 6dea34f62de5bda5af56c0c04d65ae19d327f315..6b1c0d16b0aead1816d8468306dfda0086e1cbb0 100644 --- a/contrib/MeshOptimizer/MeshOptPatch.h +++ b/contrib/MeshOptimizer/MeshOptPatch.h @@ -54,7 +54,6 @@ public: inline const int &nPC() { return _nPC; } inline int nVert() { return _vert.size(); } inline int nFV() { return _freeVert.size(); } - inline const bool forced(int iV) { return _forced[iV]; } inline int nEl() { return _el.size(); } inline const int &nPCFV(int iFV) { return _nPCFV[iFV]; } inline int indPCFV(int iFV, int iPC) { return _startPCFV[iFV]+iPC; } @@ -111,7 +110,6 @@ private: std::vector<GEntity*> _gEnt; // Geometric entity corresponding to each element std::vector<MVertex*> _vert, _freeVert; // List of vert., free vert. std::vector<int> _fv2V; // Index of free vert. -> index of vert. - std::vector<bool> _forced; // Is vertex forced? std::vector<SPoint3> _xyz, _ixyz; // Physical coord. of ALL vertices (current, straight, init.) std::vector<SPoint3> _uvw, _iuvw; // Parametric coord. of FREE vertices (current, straight, init.) std::vector<int> _startPCFV; // Start index of parametric coordinates for a free vertex diff --git a/contrib/MeshOptimizer/doc/mesh_optimization.tex b/contrib/MeshOptimizer/doc/mesh_optimization.tex index 729a80486158fbfc39bdfa8cbfc6c4abadbcc382..472a277ac256358cde7802da18c4675118e24cc5 100644 --- a/contrib/MeshOptimizer/doc/mesh_optimization.tex +++ b/contrib/MeshOptimizer/doc/mesh_optimization.tex @@ -689,9 +689,9 @@ in a straight-sided version of the bad element. \item \texttt{Boundary nodes} determines whether the boundary nodes are fixed or are allowed to move along the corresponding boundary in case a CAD model is available. -\item \texttt{W fixed} and \texttt{W free} are the relative weights -of the node displacement contribution for fixed and free vertices -respectively, compared to the Jacobian contributions. +\item \texttt{Weight on node displacement} is the relative weight +of the node displacement contribution compared to the Jacobian +contributions. \item \texttt{Maximum number of iterations} is the maximum number of iterations in the Conjugate Gradient algorithm (see \texttt{optIterMax} in Section~\ref{sec:input-param}). @@ -732,8 +732,7 @@ struct MeshQualOptParameters { bool excludeQuad, excludeHex, excludePrism, excludeBL; double minTargetIdealJac; double minTargetInvCondNum; - double weightFixed; - double weightFree; + double weight; int nbLayers; int dim; int optIterMax; @@ -754,9 +753,8 @@ struct MeshQualOptParameters { : onlyValidity(false), excludeQuad(false), excludeHex(false), excludePrism(false), excludeBL(false), minTargetIdealJac(0.1), minTargetInvCondNum(0.1), - weightFixed(1000.), weightFree (1.), nbLayers (6), - dim(3), optIterMax(300), barrierIterMax(50), - onlyVisible(true), distanceFactor(12), + weight(1.), nbLayers(6), dim(3), optIterMax(300), + barrierIterMax(50), onlyVisible(true), distanceFactor(12), fixBndNodes(false), strategy(0), maxAdaptBlob(3), adaptBlobLayerFact(2.), adaptBlobDistFact(2.), CPU(0.), minIdealJac(0.), maxIdealJac(0.), minInvCondNum(0.), @@ -786,10 +784,9 @@ for the minimum ideal Jacobian (if \texttt{onlyValidity} is \item The field \texttt{minTargetInvCondNum} sets the target value for the inverse condition number (if \texttt{onlyValidity} is \texttt{false}). -\item The fields \texttt{weightFixed} and \texttt{weightFree} are -the relative weights of the node displacement contribution for -fixed and free vertices respectively, compared to the inverse -condition number or Jacobian contribution. +\item The field \texttt{weight} is the relative weight of the node +displacement contribution compared to the inverse condition number +or Jacobian contribution. \item The field \texttt{strategy} determines the strategy in the manner of the patch selection options in Section~\ref{sec:patch-selec}: $0$ corresponds to diff --git a/contrib/MeshQualityOptimizer/MeshQualityOptimizer.cpp b/contrib/MeshQualityOptimizer/MeshQualityOptimizer.cpp index bd1c86fa94a9c1533774d34a756a856c84b4ab90..0f4171fbf4e615efbf5c7bbce1cd21efe97ec639 100644 --- a/contrib/MeshQualityOptimizer/MeshQualityOptimizer.cpp +++ b/contrib/MeshQualityOptimizer/MeshQualityOptimizer.cpp @@ -131,7 +131,7 @@ void MeshQualityOptimizer(GModel *gm, MeshQualOptParameters &p) par.optDisplay = 20; par.verbose = 4; - ObjContribScaledNodeDispSq<ObjContribFuncSimple> nodeDistFunc(p.weightFixed, p.weightFree, + ObjContribScaledNodeDispSq<ObjContribFuncSimple> nodeDistFunc(p.weight, Patch::LS_MINEDGELENGTH); ObjContribIdealJac<ObjContribFuncBarrierMovMin> minIdealJacBarFunc(1.); minIdealJacBarFunc.setTarget(p.minTargetIdealJac, 1.); diff --git a/contrib/MeshQualityOptimizer/MeshQualityOptimizer.h b/contrib/MeshQualityOptimizer/MeshQualityOptimizer.h index 01af71cc6d48acb304a6a21324d16075a510a595..a83a23f1aec2f6302e034a03e78d62ed30514d59 100644 --- a/contrib/MeshQualityOptimizer/MeshQualityOptimizer.h +++ b/contrib/MeshQualityOptimizer/MeshQualityOptimizer.h @@ -37,13 +37,12 @@ struct MeshQualOptParameters { bool excludeQuad, excludeHex, excludePrism, excludeBL; 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 + double weight; // Weight of the node displacement contribution + int nbLayers; // Number of layers taken around a bad element + int dim; // Which dimension to optimize int optIterMax; // Max number of iterations in the optimization process int barrierIterMax; // Max number of barrier moves ("runs") - bool onlyVisible; // apply optimization to visible entities ONLY + bool onlyVisible; // If optimization applied 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 @@ -59,8 +58,8 @@ struct MeshQualOptParameters { MeshQualOptParameters () : onlyValidity(false), excludeQuad(false), excludeHex(false), excludePrism(false), excludeBL(false), - minTargetIdealJac(0.1), minTargetInvCondNum(0.1), weightFixed(1000.), - weightFree (1.), nbLayers (6) , dim(3) , optIterMax(300), barrierIterMax(50), + minTargetIdealJac(0.1), minTargetInvCondNum(0.1), weight(1.), + nbLayers (6) , dim(3) , optIterMax(300), barrierIterMax(50), onlyVisible(true), distanceFactor(12), fixBndNodes(false), strategy(0), maxAdaptBlob(3), adaptBlobLayerFact(2.), adaptBlobDistFact(2.), CPU(0.), minIdealJac(0.), maxIdealJac(0.), minInvCondNum(0.), maxInvCondNum(0.),