Skip to content
Snippets Groups Projects
Commit 826a17df authored by Thomas Toulorge's avatar Thomas Toulorge
Browse files

Changed criterion for stagnation and fixed optimization w.r.t. CAD distacne in...

Changed criterion for stagnation and fixed optimization w.r.t. CAD distacne in general mesh optimizer
parent 2b3c90df
No related branches found
No related tags found
No related merge requests found
...@@ -30,7 +30,7 @@ protected: ...@@ -30,7 +30,7 @@ protected:
template<class FuncType> template<class FuncType>
ObjContribCADDist<FuncType>::ObjContribCADDist(double weight, double geomTol) : ObjContribCADDist<FuncType>::ObjContribCADDist(double weight, double geomTol) :
ObjContrib("MetricMin", FuncType::getNamePrefix()+"CADDist"), ObjContrib("CADDist", FuncType::getNamePrefix()+"CADDist"),
_mesh(0), _weight(weight), _geomTol(geomTol) _mesh(0), _weight(weight), _geomTol(geomTol)
{ {
} }
......
...@@ -825,7 +825,7 @@ void HighOrderMeshOptimizerNew(GModel *gm, OptHomParameters &p) ...@@ -825,7 +825,7 @@ void HighOrderMeshOptimizerNew(GModel *gm, OptHomParameters &p)
minJacBarFunc.setTarget(p.BARRIER_MIN, 1.); minJacBarFunc.setTarget(p.BARRIER_MIN, 1.);
ObjContribScaledJac<ObjContribFuncBarrierFixMinMovMax> minMaxJacBarFunc(1.); ObjContribScaledJac<ObjContribFuncBarrierFixMinMovMax> minMaxJacBarFunc(1.);
minMaxJacBarFunc.setTarget(p.BARRIER_MAX, 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); CADDistFunc.setTarget(p.optCADDistMax);
MeshOptParameters::PassParameters minJacPass; MeshOptParameters::PassParameters minJacPass;
...@@ -842,7 +842,7 @@ void HighOrderMeshOptimizerNew(GModel *gm, OptHomParameters &p) ...@@ -842,7 +842,7 @@ void HighOrderMeshOptimizerNew(GModel *gm, OptHomParameters &p)
minMaxJacPass.optIterMax = p.itMax; minMaxJacPass.optIterMax = p.itMax;
minMaxJacPass.contrib.push_back(&nodeDistFunc); minMaxJacPass.contrib.push_back(&nodeDistFunc);
minMaxJacPass.contrib.push_back(&minMaxJacBarFunc); 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); par.pass.push_back(minMaxJacPass);
} }
......
...@@ -68,7 +68,7 @@ MeshOpt::MeshOpt(const std::map<MElement*,GEntity*> &element2entity, ...@@ -68,7 +68,7 @@ MeshOpt::MeshOpt(const std::map<MElement*,GEntity*> &element2entity,
const std::set<MElement*> &els, std::set<MVertex*> &toFix, const std::set<MElement*> &els, std::set<MVertex*> &toFix,
const MeshOptParameters &par) : const MeshOptParameters &par) :
patch(element2entity, els, toFix, par.fixBndNodes), _verbose(0), 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()); _allObjFunc.resize(par.pass.size());
for (int iPass=0; iPass<par.pass.size(); iPass++) { for (int iPass=0; iPass<par.pass.size(); iPass++) {
...@@ -76,6 +76,7 @@ MeshOpt::MeshOpt(const std::map<MElement*,GEntity*> &element2entity, ...@@ -76,6 +76,7 @@ MeshOpt::MeshOpt(const std::map<MElement*,GEntity*> &element2entity,
for (int iC=0; iC<par.pass[iPass].contrib.size(); iC++) for (int iC=0; iC<par.pass[iPass].contrib.size(); iC++)
_allObjFunc[iPass][iC] = par.pass[iPass].contrib[iC]->copy(); _allObjFunc[iPass][iC] = par.pass[iPass].contrib[iC]->copy();
} }
_objFunc = &_allObjFunc[0];
} }
......
...@@ -4,30 +4,30 @@ ...@@ -4,30 +4,30 @@
#include "MeshOptObjContribFunc.h" #include "MeshOptObjContribFunc.h"
const double ObjContribFuncSimpleTargetMin::STAGTHRESHOLD = 0.01; const double ObjContribFuncSimpleTargetMax::STAGTHRESHOLD = 0.01;
ObjContribFuncSimpleTargetMin::ObjContribFuncSimpleTargetMin() : ObjContribFuncSimpleTargetMax::ObjContribFuncSimpleTargetMax() :
_target(0.), _init(0.) _target(0.), _init(0.)
{ {
} }
void ObjContribFuncSimpleTargetMin::setTarget(double target) void ObjContribFuncSimpleTargetMax::setTarget(double target)
{ {
_target = 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);
} }
......
...@@ -19,17 +19,17 @@ protected: ...@@ -19,17 +19,17 @@ protected:
}; };
class ObjContribFuncSimpleTargetMin : public ObjContribFuncSimple class ObjContribFuncSimpleTargetMax : public ObjContribFuncSimple
{ {
public: public:
ObjContribFuncSimpleTargetMin(); ObjContribFuncSimpleTargetMax();
void setTarget(double target); void setTarget(double target);
protected: protected:
static const double STAGTHRESHOLD; // Threshold to consider that measures stagnates static const double STAGTHRESHOLD; // Threshold to consider that measures stagnates
double _target, _init; double _target, _init;
void updateParameters(double vMin, double vMax); 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); bool stagnated(double vMin, double vMax);
}; };
......
...@@ -57,9 +57,9 @@ void ObjectiveFunction::updateResults() ...@@ -57,9 +57,9 @@ void ObjectiveFunction::updateResults()
bool ObjectiveFunction::stagnated() bool ObjectiveFunction::stagnated()
{ {
bool stagnated = false; bool stagnated = true;
for (std::vector<ObjContrib*>::iterator it=begin(); it!=end(); it++) for (std::vector<ObjContrib*>::iterator it=begin(); it!=end(); it++)
stagnated |= (*it)->stagnated(); stagnated &= (*it)->stagnated();
return stagnated; return stagnated;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment