From 826a17dfcbb77d00257329f44bb89003fad793b7 Mon Sep 17 00:00:00 2001 From: Thomas Toulorge <thomas.toulorge@mines-paristech.fr> Date: Tue, 23 Sep 2014 09:34:02 +0000 Subject: [PATCH] Changed criterion for stagnation and fixed optimization w.r.t. CAD distacne in general mesh optimizer --- .../OptHomObjContribCADDist.h | 2 +- contrib/HighOrderMeshOptimizer/OptHomRun.cpp | 4 ++-- contrib/MeshOptimizer/MeshOpt.cpp | 3 ++- contrib/MeshOptimizer/MeshOptObjContribFunc.cpp | 14 +++++++------- contrib/MeshOptimizer/MeshOptObjContribFunc.h | 6 +++--- contrib/MeshOptimizer/MeshOptObjectiveFunction.cpp | 4 ++-- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/contrib/HighOrderMeshOptimizer/OptHomObjContribCADDist.h b/contrib/HighOrderMeshOptimizer/OptHomObjContribCADDist.h index 75e225fa95..aee3baed41 100644 --- a/contrib/HighOrderMeshOptimizer/OptHomObjContribCADDist.h +++ b/contrib/HighOrderMeshOptimizer/OptHomObjContribCADDist.h @@ -30,7 +30,7 @@ protected: template<class FuncType> ObjContribCADDist<FuncType>::ObjContribCADDist(double weight, double geomTol) : - ObjContrib("MetricMin", FuncType::getNamePrefix()+"CADDist"), + ObjContrib("CADDist", FuncType::getNamePrefix()+"CADDist"), _mesh(0), _weight(weight), _geomTol(geomTol) { } diff --git a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp index 478b085c81..8cc3573451 100644 --- a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp +++ b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp @@ -825,7 +825,7 @@ void HighOrderMeshOptimizerNew(GModel *gm, OptHomParameters &p) minJacBarFunc.setTarget(p.BARRIER_MIN, 1.); ObjContribScaledJac<ObjContribFuncBarrierFixMinMovMax> minMaxJacBarFunc(1.); minMaxJacBarFunc.setTarget(p.BARRIER_MAX, 1.); - ObjContribCADDist<ObjContribFuncSimpleTargetMin> CADDistFunc(p.optCADWeight, p.discrTolerance); + ObjContribCADDist<ObjContribFuncSimpleTargetMax> CADDistFunc(p.optCADWeight, p.discrTolerance); CADDistFunc.setTarget(p.optCADDistMax); MeshOptParameters::PassParameters minJacPass; @@ -842,7 +842,7 @@ void HighOrderMeshOptimizerNew(GModel *gm, OptHomParameters &p) minMaxJacPass.optIterMax = p.itMax; minMaxJacPass.contrib.push_back(&nodeDistFunc); minMaxJacPass.contrib.push_back(&minMaxJacBarFunc); - if (p.optCAD) minJacPass.contrib.push_back(&CADDistFunc); + if (p.optCAD) minMaxJacPass.contrib.push_back(&CADDistFunc); par.pass.push_back(minMaxJacPass); } diff --git a/contrib/MeshOptimizer/MeshOpt.cpp b/contrib/MeshOptimizer/MeshOpt.cpp index 6f29b5ab85..6163d8f8f1 100644 --- a/contrib/MeshOptimizer/MeshOpt.cpp +++ b/contrib/MeshOptimizer/MeshOpt.cpp @@ -68,7 +68,7 @@ MeshOpt::MeshOpt(const std::map<MElement*,GEntity*> &element2entity, const std::set<MElement*> &els, std::set<MVertex*> &toFix, const MeshOptParameters &par) : patch(element2entity, els, toFix, par.fixBndNodes), _verbose(0), - _iPass(0), _objFunc(), _iter(0), _intervDisplay(0), _initObj(0) + _iPass(0), _iter(0), _intervDisplay(0), _initObj(0) { _allObjFunc.resize(par.pass.size()); for (int iPass=0; iPass<par.pass.size(); iPass++) { @@ -76,6 +76,7 @@ MeshOpt::MeshOpt(const std::map<MElement*,GEntity*> &element2entity, for (int iC=0; iC<par.pass[iPass].contrib.size(); iC++) _allObjFunc[iPass][iC] = par.pass[iPass].contrib[iC]->copy(); } + _objFunc = &_allObjFunc[0]; } diff --git a/contrib/MeshOptimizer/MeshOptObjContribFunc.cpp b/contrib/MeshOptimizer/MeshOptObjContribFunc.cpp index 034eb2a1cf..8be99a8567 100644 --- a/contrib/MeshOptimizer/MeshOptObjContribFunc.cpp +++ b/contrib/MeshOptimizer/MeshOptObjContribFunc.cpp @@ -4,30 +4,30 @@ #include "MeshOptObjContribFunc.h" -const double ObjContribFuncSimpleTargetMin::STAGTHRESHOLD = 0.01; +const double ObjContribFuncSimpleTargetMax::STAGTHRESHOLD = 0.01; -ObjContribFuncSimpleTargetMin::ObjContribFuncSimpleTargetMin() : +ObjContribFuncSimpleTargetMax::ObjContribFuncSimpleTargetMax() : _target(0.), _init(0.) { } -void ObjContribFuncSimpleTargetMin::setTarget(double target) +void ObjContribFuncSimpleTargetMax::setTarget(double target) { _target = target; } -void ObjContribFuncSimpleTargetMin::updateParameters(double vMin, double vMax) +void ObjContribFuncSimpleTargetMax::updateParameters(double vMin, double vMax) { - _init = vMin; + _init = vMax; } -bool ObjContribFuncSimpleTargetMin::stagnated(double vMin, double vMax) +bool ObjContribFuncSimpleTargetMax::stagnated(double vMin, double vMax) { - return (fabs((vMin-_init)/_init) < STAGTHRESHOLD); + return (fabs((vMax-_init)/_init) < STAGTHRESHOLD); } diff --git a/contrib/MeshOptimizer/MeshOptObjContribFunc.h b/contrib/MeshOptimizer/MeshOptObjContribFunc.h index 118b997703..04c7aef64f 100644 --- a/contrib/MeshOptimizer/MeshOptObjContribFunc.h +++ b/contrib/MeshOptimizer/MeshOptObjContribFunc.h @@ -19,17 +19,17 @@ protected: }; -class ObjContribFuncSimpleTargetMin : public ObjContribFuncSimple +class ObjContribFuncSimpleTargetMax : public ObjContribFuncSimple { public: - ObjContribFuncSimpleTargetMin(); + ObjContribFuncSimpleTargetMax(); void setTarget(double target); protected: static const double STAGTHRESHOLD; // Threshold to consider that measures stagnates double _target, _init; void updateParameters(double vMin, double vMax); - bool targetReached(double vMin, double vMax) { return (vMin >= _target); } + bool targetReached(double vMin, double vMax) { return (vMax <= _target); } bool stagnated(double vMin, double vMax); }; diff --git a/contrib/MeshOptimizer/MeshOptObjectiveFunction.cpp b/contrib/MeshOptimizer/MeshOptObjectiveFunction.cpp index 6e0a05039a..45e339924f 100644 --- a/contrib/MeshOptimizer/MeshOptObjectiveFunction.cpp +++ b/contrib/MeshOptimizer/MeshOptObjectiveFunction.cpp @@ -57,9 +57,9 @@ void ObjectiveFunction::updateResults() bool ObjectiveFunction::stagnated() { - bool stagnated = false; + bool stagnated = true; for (std::vector<ObjContrib*>::iterator it=begin(); it!=end(); it++) - stagnated |= (*it)->stagnated(); + stagnated &= (*it)->stagnated(); return stagnated; } -- GitLab