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:
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)
{
}
......
......@@ -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);
}
......
......@@ -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];
}
......
......@@ -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);
}
......
......@@ -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);
};
......
......@@ -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;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment