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

Modified CMakeFiles and disabled features to fix compilation after r19760

parent 68f652a3
No related branches found
No related tags found
No related merge requests found
...@@ -37,8 +37,8 @@ set(SRC ...@@ -37,8 +37,8 @@ set(SRC
decasteljau.cpp decasteljau.cpp
mathEvaluator.cpp mathEvaluator.cpp
Iso.cpp Iso.cpp
approximationError.cpp # approximationError.cpp
ConjugateGradients.cpp # ConjugateGradients.cpp
) )
file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h) file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h)
......
...@@ -36,7 +36,7 @@ static int NEVAL = 0; ...@@ -36,7 +36,7 @@ static int NEVAL = 0;
#include "OptHomRun.h" #include "OptHomRun.h"
#include "GmshMessage.h" #include "GmshMessage.h"
#include "GmshConfig.h" #include "GmshConfig.h"
#include "ConjugateGradients.h" //#include "ConjugateGradients.h"
#include "MLine.h" #include "MLine.h"
#include "MTriangle.h" #include "MTriangle.h"
#include "GModel.h" #include "GModel.h"
...@@ -142,21 +142,21 @@ bool OptHOM::addJacObjGrad(double &Obj, std::vector<double> &gradObj) ...@@ -142,21 +142,21 @@ bool OptHOM::addJacObjGrad(double &Obj, std::vector<double> &gradObj)
} }
bool OptHOM::addApproximationErrorObjGrad(double factor, double &Obj, alglib::real_1d_array &gradObj, simpleFunction<double>& fct) //bool OptHOM::addApproximationErrorObjGrad(double factor, double &Obj, alglib::real_1d_array &gradObj, simpleFunction<double>& fct)
{ //{
std::vector<double> gradF; // std::vector<double> gradF;
for (int iEl = 0; iEl < mesh.nEl(); iEl++) { // for (int iEl = 0; iEl < mesh.nEl(); iEl++) {
double f; // double f;
mesh.approximationErrorAndGradients(iEl, f, gradF, 1.e-6, fct); // mesh.approximationErrorAndGradients(iEl, f, gradF, 1.e-6, fct);
Obj += f * factor; // Obj += f * factor;
for (size_t i = 0; i < mesh.nPCEl(iEl); ++i){ // for (size_t i = 0; i < mesh.nPCEl(iEl); ++i){
gradObj[mesh.indPCEl(iEl, i)] += gradF[i] * factor; // gradObj[mesh.indPCEl(iEl, i)] += gradF[i] * factor;
} // }
} // }
// printf("DIST = %12.5E\n",DISTANCE); // // printf("DIST = %12.5E\n",DISTANCE);
return true; // return true;
//
} //}
static void computeGradSFAtNodes (MElement *e, std::vector<std::vector<SVector3> > &gsf) static void computeGradSFAtNodes (MElement *e, std::vector<std::vector<SVector3> > &gsf)
{ {
...@@ -804,12 +804,12 @@ void OptHOM::calcScale(alglib::real_1d_array &scale) ...@@ -804,12 +804,12 @@ void OptHOM::calcScale(alglib::real_1d_array &scale)
} }
} }
void OptHOM::OptimPass(std::vector<double> &x, int itMax) //void OptHOM::OptimPass(std::vector<double> &x, int itMax)
{ //{
Msg::Info("--- In-house Optimization pass with initial jac. range (%g, %g), jacBar = %g", // Msg::Info("--- In-house Optimization pass with initial jac. range (%g, %g), jacBar = %g",
minJac, maxJac, jacBar); // minJac, maxJac, jacBar);
GradientDescent (evalObjGradFunc, x, this); // GradientDescent (evalObjGradFunc, x, this);
} //}
void OptHOM::OptimPass(alglib::real_1d_array &x, int itMax) void OptHOM::OptimPass(alglib::real_1d_array &x, int itMax)
...@@ -880,7 +880,7 @@ void OptHOM::OptimPass(alglib::real_1d_array &x, int itMax) ...@@ -880,7 +880,7 @@ void OptHOM::OptimPass(alglib::real_1d_array &x, int itMax)
} }
int OptHOM::optimize_inhouse(double weightFixed, double weightFree, double weightCAD, double b_min, int OptHOM::optimize(double weightFixed, double weightFree, double weightCAD, double b_min,
double b_max, bool optimizeMetricMin, int pInt, double b_max, bool optimizeMetricMin, int pInt,
int itMax, int optPassMax, int optCAD, double distanceMax, double tolerance) int itMax, int optPassMax, int optCAD, double distanceMax, double tolerance)
{ {
...@@ -981,100 +981,100 @@ int OptHOM::optimize_inhouse(double weightFixed, double weightFree, double weigh ...@@ -981,100 +981,100 @@ int OptHOM::optimize_inhouse(double weightFixed, double weightFree, double weigh
} }
int OptHOM::optimize(double weightFixed, double weightFree, double weightCAD, double b_min, //int OptHOM::optimize_inhouse(double weightFixed, double weightFree, double weightCAD, double b_min,
double b_max, bool optimizeMetricMin, int pInt, // double b_max, bool optimizeMetricMin, int pInt,
int itMax, int optPassMax, int optCAD, double distanceMax, double tolerance) // int itMax, int optPassMax, int optCAD, double distanceMax, double tolerance)
{ //{
barrier_min = b_min; // barrier_min = b_min;
barrier_max = b_max; // barrier_max = b_max;
distance_max = distanceMax; // distance_max = distanceMax;
progressInterv = pInt; // progressInterv = pInt;
// powM = 4; //// powM = 4;
// powP = 3; //// powP = 3;
//
_optimizeMetricMin = optimizeMetricMin; // _optimizeMetricMin = optimizeMetricMin;
_optimizeCAD = optCAD; // _optimizeCAD = optCAD;
// Set weights & length scale for non-dimensionalization // // Set weights & length scale for non-dimensionalization
lambda = weightFixed; // lambda = weightFixed;
lambda2 = weightFree; // lambda2 = weightFree;
lambda3 = weightCAD; // lambda3 = weightCAD;
geomTol = tolerance; // geomTol = tolerance;
std::vector<double> dSq(mesh.nEl()); // std::vector<double> dSq(mesh.nEl());
mesh.distSqToStraight(dSq); // mesh.distSqToStraight(dSq);
const double maxDSq = *max_element(dSq.begin(),dSq.end()); // const double maxDSq = *max_element(dSq.begin(),dSq.end());
if (maxDSq < 1.e-10) { // Length scale for non-dim. distance // if (maxDSq < 1.e-10) { // Length scale for non-dim. distance
std::vector<double> sSq(mesh.nEl()); // std::vector<double> sSq(mesh.nEl());
mesh.elSizeSq(sSq); // mesh.elSizeSq(sSq);
const double maxSSq = *max_element(sSq.begin(),sSq.end()); // const double maxSSq = *max_element(sSq.begin(),sSq.end());
invLengthScaleSq = 1./maxSSq; // invLengthScaleSq = 1./maxSSq;
} // }
else invLengthScaleSq = 1./maxDSq; // else invLengthScaleSq = 1./maxDSq;
//
// Set initial guess // // Set initial guess
std::vector<double> x(mesh.nPC()); // std::vector<double> x(mesh.nPC());
mesh.getUvw(x.data()); // mesh.getUvw(x.data());
//
// Calculate initial performance // // Calculate initial performance
recalcJacDist(); // recalcJacDist();
initMaxDist = maxDist; // initMaxDist = maxDist;
initAvgDist = avgDist; // initAvgDist = avgDist;
//
const double jacBarStart = (minJac > 0.) ? 0.9*minJac : 1.1*minJac; // const double jacBarStart = (minJac > 0.) ? 0.9*minJac : 1.1*minJac;
jacBar = jacBarStart; // jacBar = jacBarStart;
//
_optimizeBarrierMax = false; // _optimizeBarrierMax = false;
// Calculate initial objective function value and gradient // // Calculate initial objective function value and gradient
initObj = 0.; // initObj = 0.;
std::vector<double>gradObj(mesh.nPC()); // std::vector<double>gradObj(mesh.nPC());
for (int i = 0; i < mesh.nPC(); i++) gradObj[i] = 0.; // for (int i = 0; i < mesh.nPC(); i++) gradObj[i] = 0.;
evalObjGrad(x, initObj, true, gradObj); // evalObjGrad(x, initObj, true, gradObj);
//
Msg::Info("Start optimizing %d elements (%d vertices, %d free vertices, %d variables) " // Msg::Info("Start optimizing %d elements (%d vertices, %d free vertices, %d variables) "
"with min barrier %g and max. barrier %g", mesh.nEl(), mesh.nVert(), // "with min barrier %g and max. barrier %g", mesh.nEl(), mesh.nVert(),
mesh.nFV(), mesh.nPC(), barrier_min, barrier_max); // mesh.nFV(), mesh.nPC(), barrier_min, barrier_max);
//
int ITER = 0; // int ITER = 0;
bool minJacOK = true; // bool minJacOK = true;
//
while (minJac < barrier_min || (maxDistCAD > distance_max && _optimizeCAD)) { // while (minJac < barrier_min || (maxDistCAD > distance_max && _optimizeCAD)) {
const double startMinJac = minJac; // const double startMinJac = minJac;
OptimPass(x, itMax); // OptimPass(x, itMax);
recalcJacDist(); // recalcJacDist();
jacBar = (minJac > 0.) ? 0.9*minJac : 1.1*minJac; // jacBar = (minJac > 0.) ? 0.9*minJac : 1.1*minJac;
if (_optimizeCAD) jacBar = std::min(jacBar,barrier_min); // if (_optimizeCAD) jacBar = std::min(jacBar,barrier_min);
if (ITER ++ > optPassMax) { // if (ITER ++ > optPassMax) {
minJacOK = (minJac > barrier_min && (maxDistCAD < distance_max || !_optimizeCAD)); // minJacOK = (minJac > barrier_min && (maxDistCAD < distance_max || !_optimizeCAD));
break; // break;
} // }
if (fabs((minJac-startMinJac)/startMinJac) < 0.01) { // if (fabs((minJac-startMinJac)/startMinJac) < 0.01) {
Msg::Info("Stagnation in minJac detected, stopping optimization"); // Msg::Info("Stagnation in minJac detected, stopping optimization");
minJacOK = false; // minJacOK = false;
break; // break;
} // }
} // }
//
ITER = 0; // ITER = 0;
if (minJacOK && (!_optimizeMetricMin)) { // if (minJacOK && (!_optimizeMetricMin)) {
_optimizeBarrierMax = true; // _optimizeBarrierMax = true;
jacBar = 1.1 * maxJac; // jacBar = 1.1 * maxJac;
while (maxJac > barrier_max ) { // while (maxJac > barrier_max ) {
const double startMaxJac = maxJac; // const double startMaxJac = maxJac;
OptimPass(x, itMax); // OptimPass(x, itMax);
recalcJacDist(); // recalcJacDist();
jacBar = 1.1 * maxJac; // jacBar = 1.1 * maxJac;
if (ITER ++ > optPassMax) break; // if (ITER ++ > optPassMax) break;
if (fabs((maxJac-startMaxJac)/startMaxJac) < 0.01) { // if (fabs((maxJac-startMaxJac)/startMaxJac) < 0.01) {
Msg::Info("Stagnation in maxJac detected, stopping optimization"); // Msg::Info("Stagnation in maxJac detected, stopping optimization");
break; // break;
} // }
} // }
} // }
//
Msg::Info("Optimization done Range (%g,%g)", minJac, maxJac); // Msg::Info("Optimization done Range (%g,%g)", minJac, maxJac);
//
if (minJac > barrier_min && maxJac < barrier_max) return 1; // if (minJac > barrier_min && maxJac < barrier_max) return 1;
if (minJac > 0.0) return 0; // if (minJac > 0.0) return 0;
return -1; // return -1;
} //}
#endif #endif
...@@ -53,9 +53,9 @@ public: ...@@ -53,9 +53,9 @@ public:
// mesh is invalid : some jacobians cannot be made positive // mesh is invalid : some jacobians cannot be made positive
int optimize(double lambda, double lambda2, double lambda3, double barrier_min, double barrier_max, 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); 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, // int optimize_inhouse(double weightFixed, double weightFree, double weightCAD, double b_min,
double b_max, bool optimizeMetricMin, int pInt, // double b_max, bool optimizeMetricMin, int pInt,
int itMax, int optPassMax, int optCAD, double distanceMax, double tolerance); // int itMax, int optPassMax, int optCAD, double distanceMax, double tolerance);
void recalcJacDist(); void recalcJacDist();
inline void getJacDist(double &minJ, double &maxJ, double &maxD, double &avgD); inline void getJacDist(double &minJ, double &maxJ, double &maxD, double &avgD);
void updateMesh(const alglib::real_1d_array &x); void updateMesh(const alglib::real_1d_array &x);
...@@ -77,7 +77,7 @@ public: ...@@ -77,7 +77,7 @@ public:
// true : fixed barrier min + moving barrier max // true : fixed barrier min + moving barrier max
bool _optimizeCAD; // false : do not minimize the distance between mesh and CAD bool _optimizeCAD; // false : do not minimize the distance between mesh and CAD
// true : minimize the distance between mesh and CAD // true : minimize the distance between mesh and CAD
bool addApproximationErrorObjGrad(double Fact, double &Obj, alglib::real_1d_array &gradObj, simpleFunction<double>& fct); // bool addApproximationErrorObjGrad(double Fact, double &Obj, alglib::real_1d_array &gradObj, simpleFunction<double>& fct);
bool addJacObjGrad(double &Obj, alglib::real_1d_array &gradObj); bool addJacObjGrad(double &Obj, alglib::real_1d_array &gradObj);
bool addJacObjGrad(double &Obj, std::vector<double> &); bool addJacObjGrad(double &Obj, std::vector<double> &);
bool addBndObjGrad (double Fact, double &Obj, alglib::real_1d_array &gradObj); bool addBndObjGrad (double Fact, double &Obj, alglib::real_1d_array &gradObj);
...@@ -90,7 +90,7 @@ public: ...@@ -90,7 +90,7 @@ public:
alglib::real_1d_array &gradObj); alglib::real_1d_array &gradObj);
void calcScale(alglib::real_1d_array &scale); void calcScale(alglib::real_1d_array &scale);
void OptimPass(alglib::real_1d_array &x, int itMax); void OptimPass(alglib::real_1d_array &x, int itMax);
void OptimPass(std::vector<double> &x, int itMax); // void OptimPass(std::vector<double> &x, int itMax);
}; };
void OptHOM::getJacDist(double &minJ, double &maxJ, double &maxD, double &avgD) void OptHOM::getJacDist(double &minJ, double &maxJ, double &maxD, double &avgD)
......
...@@ -335,68 +335,68 @@ void Mesh::metricMinAndGradients(int iEl, std::vector<double> &lambda, ...@@ -335,68 +335,68 @@ void Mesh::metricMinAndGradients(int iEl, std::vector<double> &lambda,
} }
} }
void Mesh::approximationErrorAndGradients(int iEl, double &f, std::vector<double> &gradF, double eps, //void Mesh::approximationErrorAndGradients(int iEl, double &f, std::vector<double> &gradF, double eps,
simpleFunction<double> &fct) // simpleFunction<double> &fct)
{ //{
std::vector<SPoint3> _xyz_temp; // std::vector<SPoint3> _xyz_temp;
for (int iV = 0; iV < nVert(); iV++){ // for (int iV = 0; iV < nVert(); iV++){
_xyz_temp.push_back(SPoint3( _vert[iV]->x(), _vert[iV]->y(), _vert[iV]->z())); // _xyz_temp.push_back(SPoint3( _vert[iV]->x(), _vert[iV]->y(), _vert[iV]->z()));
_vert[iV]->setXYZ(_xyz[iV].x(),_xyz[iV].y(),_xyz[iV].z()); // _vert[iV]->setXYZ(_xyz[iV].x(),_xyz[iV].y(),_xyz[iV].z());
} // }
//
MElement *element = _el[iEl]; // MElement *element = _el[iEl];
//
f = approximationError (fct, element); // f = approximationError (fct, element);
// FIME // // FIME
// if (iEl < 1)printf("approx error elem %d = %g\n",iEl,f); // // if (iEl < 1)printf("approx error elem %d = %g\n",iEl,f);
int currentId = 0; // int currentId = 0;
// compute the size of the gradient // // compute the size of the gradient
// depends on how many dofs exist per vertex (0,1,2 or 3) // // depends on how many dofs exist per vertex (0,1,2 or 3)
for (size_t i = 0; i < element->getNumVertices(); ++i) { // for (size_t i = 0; i < element->getNumVertices(); ++i) {
if (_el2FV[iEl][i] >= 0) {// some free coordinates // if (_el2FV[iEl][i] >= 0) {// some free coordinates
currentId += _nPCFV[_el2FV[iEl][i]]; // currentId += _nPCFV[_el2FV[iEl][i]];
} // }
} // }
gradF.clear(); // gradF.clear();
gradF.resize(currentId, 0.); // gradF.resize(currentId, 0.);
currentId = 0; // currentId = 0;
for (size_t i = 0; i < element->getNumVertices(); ++i) { // for (size_t i = 0; i < element->getNumVertices(); ++i) {
if (_el2FV[iEl][i] >= 0) {// some free coordinates // if (_el2FV[iEl][i] >= 0) {// some free coordinates
MVertex *v = element->getVertex(i); // MVertex *v = element->getVertex(i);
// vertex classified on a model edge // // vertex classified on a model edge
if (_nPCFV[_el2FV[iEl][i]] == 1){ // if (_nPCFV[_el2FV[iEl][i]] == 1){
double t = _uvw[_el2FV[iEl][i]].x(); // double t = _uvw[_el2FV[iEl][i]].x();
GEdge *ge = (GEdge*)v->onWhat(); // GEdge *ge = (GEdge*)v->onWhat();
SPoint3 p (v->x(),v->y(),v->z()); // SPoint3 p (v->x(),v->y(),v->z());
GPoint d = ge->point(t+eps); // GPoint d = ge->point(t+eps);
v->setXYZ(d.x(),d.y(),d.z()); // v->setXYZ(d.x(),d.y(),d.z());
double f_d = approximationError (fct, element); // double f_d = approximationError (fct, element);
gradF[currentId++] = (f_d-f)/eps; // gradF[currentId++] = (f_d-f)/eps;
if (iEl < 1)printf("df = %g\n",(f_d-f)/eps); // if (iEl < 1)printf("df = %g\n",(f_d-f)/eps);
v->setXYZ(p.x(),p.y(),p.z()); // v->setXYZ(p.x(),p.y(),p.z());
} // }
else if (_nPCFV[_el2FV[iEl][i]] == 2){ // else if (_nPCFV[_el2FV[iEl][i]] == 2){
double uu = _uvw[_el2FV[iEl][i]].x(); // double uu = _uvw[_el2FV[iEl][i]].x();
double vv = _uvw[_el2FV[iEl][i]].y(); // double vv = _uvw[_el2FV[iEl][i]].y();
GFace *gf = (GFace*)v->onWhat(); // GFace *gf = (GFace*)v->onWhat();
SPoint3 p (v->x(),v->y(),v->z()); // SPoint3 p (v->x(),v->y(),v->z());
GPoint d = gf->point(uu+eps,vv); // GPoint d = gf->point(uu+eps,vv);
v->setXYZ(d.x(),d.y(),d.z()); // v->setXYZ(d.x(),d.y(),d.z());
double f_u = approximationError (fct, element); // double f_u = approximationError (fct, element);
gradF[currentId++] = (f_u-f)/eps; // gradF[currentId++] = (f_u-f)/eps;
d = gf->point(uu,vv+eps); // d = gf->point(uu,vv+eps);
v->setXYZ(d.x(),d.y(),d.z()); // v->setXYZ(d.x(),d.y(),d.z());
double f_v = approximationError (fct, element); // double f_v = approximationError (fct, element);
gradF[currentId++] = (f_v-f)/eps; // gradF[currentId++] = (f_v-f)/eps;
v->setXYZ(p.x(),p.y(),p.z()); // v->setXYZ(p.x(),p.y(),p.z());
// if (iEl < 1)printf("df = %g %g\n",(f_u-f)/eps,(f_v-f)/eps); // // if (iEl < 1)printf("df = %g %g\n",(f_u-f)/eps,(f_v-f)/eps);
} // }
} // }
} // }
for (int iV = 0; iV < nVert(); iV++) // for (int iV = 0; iV < nVert(); iV++)
_vert[iV]->setXYZ(_xyz_temp[iV].x(),_xyz_temp[iV].y(),_xyz_temp[iV].z()); // _vert[iV]->setXYZ(_xyz_temp[iV].x(),_xyz_temp[iV].y(),_xyz_temp[iV].z());
//
} //}
bool Mesh::bndDistAndGradients(int iEl, double &f , std::vector<double> &gradF, double eps) bool Mesh::bndDistAndGradients(int iEl, double &f , std::vector<double> &gradF, double eps)
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
#include "ParamCoord.h" #include "ParamCoord.h"
#include "polynomialBasis.h" #include "polynomialBasis.h"
#include "simpleFunction.h" #include "simpleFunction.h"
#include "approximationError.h" //#include "approximationError.h"
class Mesh class Mesh
{ {
...@@ -58,7 +58,7 @@ public: ...@@ -58,7 +58,7 @@ public:
inline const int &nBezEl(int iEl) { return _nBezEl[iEl]; } inline const int &nBezEl(int iEl) { return _nBezEl[iEl]; }
int getFreeVertexStartIndex(MVertex* vert); int getFreeVertexStartIndex(MVertex* vert);
void approximationErrorAndGradients(int iEl, double &f, std::vector<double> &gradF, double eps, simpleFunction<double> &fct); // void approximationErrorAndGradients(int iEl, double &f, std::vector<double> &gradF, double eps, simpleFunction<double> &fct);
void metricMinAndGradients(int iEl, std::vector<double> &sJ, std::vector<double> &gSJ); void metricMinAndGradients(int iEl, std::vector<double> &sJ, std::vector<double> &gSJ);
void scaledJacAndGradients(int iEl, std::vector<double> &sJ, std::vector<double> &gSJ); void scaledJacAndGradients(int iEl, std::vector<double> &sJ, std::vector<double> &gSJ);
bool bndDistAndGradients(int iEl, double &f , std::vector<double> &gradF, double eps); bool bndDistAndGradients(int iEl, double &f , std::vector<double> &gradF, double eps);
...@@ -142,10 +142,10 @@ private: ...@@ -142,10 +142,10 @@ private:
return indJB3DBase(_nNodEl[iEl],l,i,j,m); return indJB3DBase(_nNodEl[iEl],l,i,j,m);
} }
public: public:
double approximationErr(int iEl, simpleFunction<double> &f) // double approximationErr(int iEl, simpleFunction<double> &f)
{ // {
return approximationError (f, _el[iEl]); // return approximationError (f, _el[iEl]);
} // }
}; };
......
...@@ -453,11 +453,11 @@ static void optimizeConnectedBlobs(const vertElVecMap &vertex2elements, ...@@ -453,11 +453,11 @@ static void optimizeConnectedBlobs(const vertElVecMap &vertex2elements,
if (temp.mesh.nPC() == 0) if (temp.mesh.nPC() == 0)
Msg::Info("Blob %i has no degree of freedom, skipping", i+1); Msg::Info("Blob %i has no degree of freedom, skipping", i+1);
else else
success = temp.optimize_inhouse(p.weightFixed, p.weightFree, p.optCADWeight, p.BARRIER_MIN, 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); p.BARRIER_MAX, false, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax, p.discrTolerance);
if (success >= 0 && p.BARRIER_MIN_METRIC > 0) { if (success >= 0 && p.BARRIER_MIN_METRIC > 0) {
Msg::Info("Jacobian optimization succeed, starting svd optimization"); Msg::Info("Jacobian optimization succeed, starting svd optimization");
success = temp.optimize_inhouse(p.weightFixed, p.weightFree, p.optCADWeight, p.BARRIER_MIN_METRIC, p.BARRIER_MAX, 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); true, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax,p.discrTolerance);
} }
double minJac, maxJac, distMaxBND, distAvgBND; double minJac, maxJac, distMaxBND, distAvgBND;
...@@ -539,11 +539,11 @@ static void optimizeOneByOne ...@@ -539,11 +539,11 @@ static void optimizeOneByOne
std::ostringstream ossI1; std::ostringstream ossI1;
ossI1 << "initial_blob-" << iBadEl << ".msh"; ossI1 << "initial_blob-" << iBadEl << ".msh";
opt->mesh.writeMSH(ossI1.str().c_str()); opt->mesh.writeMSH(ossI1.str().c_str());
success = opt->optimize_inhouse(p.weightFixed, p.weightFree, p.optCADWeight, p.BARRIER_MIN, 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); p.BARRIER_MAX, false, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax,p.discrTolerance);
if (success >= 0 && p.BARRIER_MIN_METRIC > 0) { if (success >= 0 && p.BARRIER_MIN_METRIC > 0) {
Msg::Info("Jacobian optimization succeed, starting svd optimization"); Msg::Info("Jacobian optimization succeed, starting svd optimization");
success = opt->optimize_inhouse(p.weightFixed, p.weightFree, p.optCADWeight, p.BARRIER_MIN_METRIC, 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); p.BARRIER_MAX, true, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax,p.discrTolerance);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment