diff --git a/Numeric/CMakeLists.txt b/Numeric/CMakeLists.txt index e4449b7522e9d0458c1fcc04bdd4eee30d9873e0..97a3c6fec00afe0e01d5242fcbc40086a0829563 100644 --- a/Numeric/CMakeLists.txt +++ b/Numeric/CMakeLists.txt @@ -37,8 +37,8 @@ set(SRC decasteljau.cpp mathEvaluator.cpp Iso.cpp - approximationError.cpp - ConjugateGradients.cpp +# approximationError.cpp +# ConjugateGradients.cpp ) file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h) diff --git a/contrib/HighOrderMeshOptimizer/OptHOM.cpp b/contrib/HighOrderMeshOptimizer/OptHOM.cpp index 6efe7eb31a3d6729922b50a19d3a1e4e3b50c8ff..0684d5fca1e4f7ac3686e79a2e8179f57a6fa735 100644 --- a/contrib/HighOrderMeshOptimizer/OptHOM.cpp +++ b/contrib/HighOrderMeshOptimizer/OptHOM.cpp @@ -36,7 +36,7 @@ static int NEVAL = 0; #include "OptHomRun.h" #include "GmshMessage.h" #include "GmshConfig.h" -#include "ConjugateGradients.h" +//#include "ConjugateGradients.h" #include "MLine.h" #include "MTriangle.h" #include "GModel.h" @@ -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) -{ - std::vector<double> gradF; - for (int iEl = 0; iEl < mesh.nEl(); iEl++) { - double f; - mesh.approximationErrorAndGradients(iEl, f, gradF, 1.e-6, fct); - Obj += f * factor; - for (size_t i = 0; i < mesh.nPCEl(iEl); ++i){ - gradObj[mesh.indPCEl(iEl, i)] += gradF[i] * factor; - } - } - // printf("DIST = %12.5E\n",DISTANCE); - return true; - -} +//bool OptHOM::addApproximationErrorObjGrad(double factor, double &Obj, alglib::real_1d_array &gradObj, simpleFunction<double>& fct) +//{ +// std::vector<double> gradF; +// for (int iEl = 0; iEl < mesh.nEl(); iEl++) { +// double f; +// mesh.approximationErrorAndGradients(iEl, f, gradF, 1.e-6, fct); +// Obj += f * factor; +// for (size_t i = 0; i < mesh.nPCEl(iEl); ++i){ +// gradObj[mesh.indPCEl(iEl, i)] += gradF[i] * factor; +// } +// } +// // printf("DIST = %12.5E\n",DISTANCE); +// return true; +// +//} static void computeGradSFAtNodes (MElement *e, std::vector<std::vector<SVector3> > &gsf) { @@ -804,12 +804,12 @@ void OptHOM::calcScale(alglib::real_1d_array &scale) } } -void OptHOM::OptimPass(std::vector<double> &x, int itMax) -{ - Msg::Info("--- In-house Optimization pass with initial jac. range (%g, %g), jacBar = %g", - minJac, maxJac, jacBar); - GradientDescent (evalObjGradFunc, x, this); -} +//void OptHOM::OptimPass(std::vector<double> &x, int itMax) +//{ +// Msg::Info("--- In-house Optimization pass with initial jac. range (%g, %g), jacBar = %g", +// minJac, maxJac, jacBar); +// GradientDescent (evalObjGradFunc, x, this); +//} 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, int itMax, int optPassMax, int optCAD, double distanceMax, double tolerance) { @@ -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, - double b_max, bool optimizeMetricMin, int pInt, - int itMax, int optPassMax, int optCAD, double distanceMax, double tolerance) -{ - barrier_min = b_min; - barrier_max = b_max; - distance_max = distanceMax; - progressInterv = pInt; -// powM = 4; -// powP = 3; - - _optimizeMetricMin = optimizeMetricMin; - _optimizeCAD = optCAD; - // Set weights & length scale for non-dimensionalization - lambda = weightFixed; - lambda2 = weightFree; - lambda3 = weightCAD; - geomTol = tolerance; - std::vector<double> dSq(mesh.nEl()); - mesh.distSqToStraight(dSq); - const double maxDSq = *max_element(dSq.begin(),dSq.end()); - if (maxDSq < 1.e-10) { // Length scale for non-dim. distance - std::vector<double> sSq(mesh.nEl()); - mesh.elSizeSq(sSq); - const double maxSSq = *max_element(sSq.begin(),sSq.end()); - invLengthScaleSq = 1./maxSSq; - } - else invLengthScaleSq = 1./maxDSq; - - // Set initial guess - std::vector<double> x(mesh.nPC()); - mesh.getUvw(x.data()); - - // Calculate initial performance - recalcJacDist(); - initMaxDist = maxDist; - initAvgDist = avgDist; - - const double jacBarStart = (minJac > 0.) ? 0.9*minJac : 1.1*minJac; - jacBar = jacBarStart; - - _optimizeBarrierMax = false; - // Calculate initial objective function value and gradient - initObj = 0.; - std::vector<double>gradObj(mesh.nPC()); - for (int i = 0; i < mesh.nPC(); i++) gradObj[i] = 0.; - evalObjGrad(x, initObj, true, gradObj); - - 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(), - mesh.nFV(), mesh.nPC(), barrier_min, barrier_max); - - int ITER = 0; - bool minJacOK = true; - - while (minJac < barrier_min || (maxDistCAD > distance_max && _optimizeCAD)) { - const double startMinJac = minJac; - OptimPass(x, itMax); - recalcJacDist(); - jacBar = (minJac > 0.) ? 0.9*minJac : 1.1*minJac; - if (_optimizeCAD) jacBar = std::min(jacBar,barrier_min); - if (ITER ++ > optPassMax) { - minJacOK = (minJac > barrier_min && (maxDistCAD < distance_max || !_optimizeCAD)); - break; - } - if (fabs((minJac-startMinJac)/startMinJac) < 0.01) { - Msg::Info("Stagnation in minJac detected, stopping optimization"); - minJacOK = false; - break; - } - } - - ITER = 0; - if (minJacOK && (!_optimizeMetricMin)) { - _optimizeBarrierMax = true; - jacBar = 1.1 * maxJac; - while (maxJac > barrier_max ) { - const double startMaxJac = maxJac; - OptimPass(x, itMax); - recalcJacDist(); - jacBar = 1.1 * maxJac; - if (ITER ++ > optPassMax) break; - if (fabs((maxJac-startMaxJac)/startMaxJac) < 0.01) { - Msg::Info("Stagnation in maxJac detected, stopping optimization"); - break; - } - } - } - - Msg::Info("Optimization done Range (%g,%g)", minJac, maxJac); - - if (minJac > barrier_min && maxJac < barrier_max) return 1; - if (minJac > 0.0) return 0; - return -1; -} +//int OptHOM::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) +//{ +// barrier_min = b_min; +// barrier_max = b_max; +// distance_max = distanceMax; +// progressInterv = pInt; +//// powM = 4; +//// powP = 3; +// +// _optimizeMetricMin = optimizeMetricMin; +// _optimizeCAD = optCAD; +// // Set weights & length scale for non-dimensionalization +// lambda = weightFixed; +// lambda2 = weightFree; +// lambda3 = weightCAD; +// geomTol = tolerance; +// std::vector<double> dSq(mesh.nEl()); +// mesh.distSqToStraight(dSq); +// const double maxDSq = *max_element(dSq.begin(),dSq.end()); +// if (maxDSq < 1.e-10) { // Length scale for non-dim. distance +// std::vector<double> sSq(mesh.nEl()); +// mesh.elSizeSq(sSq); +// const double maxSSq = *max_element(sSq.begin(),sSq.end()); +// invLengthScaleSq = 1./maxSSq; +// } +// else invLengthScaleSq = 1./maxDSq; +// +// // Set initial guess +// std::vector<double> x(mesh.nPC()); +// mesh.getUvw(x.data()); +// +// // Calculate initial performance +// recalcJacDist(); +// initMaxDist = maxDist; +// initAvgDist = avgDist; +// +// const double jacBarStart = (minJac > 0.) ? 0.9*minJac : 1.1*minJac; +// jacBar = jacBarStart; +// +// _optimizeBarrierMax = false; +// // Calculate initial objective function value and gradient +// initObj = 0.; +// std::vector<double>gradObj(mesh.nPC()); +// for (int i = 0; i < mesh.nPC(); i++) gradObj[i] = 0.; +// evalObjGrad(x, initObj, true, gradObj); +// +// 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(), +// mesh.nFV(), mesh.nPC(), barrier_min, barrier_max); +// +// int ITER = 0; +// bool minJacOK = true; +// +// while (minJac < barrier_min || (maxDistCAD > distance_max && _optimizeCAD)) { +// const double startMinJac = minJac; +// OptimPass(x, itMax); +// recalcJacDist(); +// jacBar = (minJac > 0.) ? 0.9*minJac : 1.1*minJac; +// if (_optimizeCAD) jacBar = std::min(jacBar,barrier_min); +// if (ITER ++ > optPassMax) { +// minJacOK = (minJac > barrier_min && (maxDistCAD < distance_max || !_optimizeCAD)); +// break; +// } +// if (fabs((minJac-startMinJac)/startMinJac) < 0.01) { +// Msg::Info("Stagnation in minJac detected, stopping optimization"); +// minJacOK = false; +// break; +// } +// } +// +// ITER = 0; +// if (minJacOK && (!_optimizeMetricMin)) { +// _optimizeBarrierMax = true; +// jacBar = 1.1 * maxJac; +// while (maxJac > barrier_max ) { +// const double startMaxJac = maxJac; +// OptimPass(x, itMax); +// recalcJacDist(); +// jacBar = 1.1 * maxJac; +// if (ITER ++ > optPassMax) break; +// if (fabs((maxJac-startMaxJac)/startMaxJac) < 0.01) { +// Msg::Info("Stagnation in maxJac detected, stopping optimization"); +// break; +// } +// } +// } +// +// Msg::Info("Optimization done Range (%g,%g)", minJac, maxJac); +// +// if (minJac > barrier_min && maxJac < barrier_max) return 1; +// if (minJac > 0.0) return 0; +// return -1; +//} #endif diff --git a/contrib/HighOrderMeshOptimizer/OptHOM.h b/contrib/HighOrderMeshOptimizer/OptHOM.h index 3eaf09d89c35f325f15b60934dc4c530dcd282a5..4cb3fc7bf91489a858cdd601e37361a03df551c0 100644 --- a/contrib/HighOrderMeshOptimizer/OptHOM.h +++ b/contrib/HighOrderMeshOptimizer/OptHOM.h @@ -53,9 +53,9 @@ public: // 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_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); void recalcJacDist(); inline void getJacDist(double &minJ, double &maxJ, double &maxD, double &avgD); void updateMesh(const alglib::real_1d_array &x); @@ -77,7 +77,7 @@ public: // true : fixed barrier min + moving barrier max bool _optimizeCAD; // false : do not 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, std::vector<double> &); bool addBndObjGrad (double Fact, double &Obj, alglib::real_1d_array &gradObj); @@ -90,7 +90,7 @@ public: 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); +// void OptimPass(std::vector<double> &x, int itMax); }; void OptHOM::getJacDist(double &minJ, double &maxJ, double &maxD, double &avgD) diff --git a/contrib/HighOrderMeshOptimizer/OptHomMesh.cpp b/contrib/HighOrderMeshOptimizer/OptHomMesh.cpp index 21fcc23c4d62ac02558aec224f67f898ac06dae7..ef905a18a55e48e6d20c46136b2d6d2747f68e6f 100644 --- a/contrib/HighOrderMeshOptimizer/OptHomMesh.cpp +++ b/contrib/HighOrderMeshOptimizer/OptHomMesh.cpp @@ -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, - simpleFunction<double> &fct) -{ - std::vector<SPoint3> _xyz_temp; - for (int iV = 0; iV < nVert(); iV++){ - _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()); - } - - MElement *element = _el[iEl]; - - f = approximationError (fct, element); - // FIME - // if (iEl < 1)printf("approx error elem %d = %g\n",iEl,f); - int currentId = 0; - // compute the size of the gradient - // depends on how many dofs exist per vertex (0,1,2 or 3) - for (size_t i = 0; i < element->getNumVertices(); ++i) { - if (_el2FV[iEl][i] >= 0) {// some free coordinates - currentId += _nPCFV[_el2FV[iEl][i]]; - } - } - gradF.clear(); - gradF.resize(currentId, 0.); - currentId = 0; - for (size_t i = 0; i < element->getNumVertices(); ++i) { - if (_el2FV[iEl][i] >= 0) {// some free coordinates - MVertex *v = element->getVertex(i); - // vertex classified on a model edge - if (_nPCFV[_el2FV[iEl][i]] == 1){ - double t = _uvw[_el2FV[iEl][i]].x(); - GEdge *ge = (GEdge*)v->onWhat(); - SPoint3 p (v->x(),v->y(),v->z()); - GPoint d = ge->point(t+eps); - v->setXYZ(d.x(),d.y(),d.z()); - double f_d = approximationError (fct, element); - gradF[currentId++] = (f_d-f)/eps; - if (iEl < 1)printf("df = %g\n",(f_d-f)/eps); - v->setXYZ(p.x(),p.y(),p.z()); - } - else if (_nPCFV[_el2FV[iEl][i]] == 2){ - double uu = _uvw[_el2FV[iEl][i]].x(); - double vv = _uvw[_el2FV[iEl][i]].y(); - GFace *gf = (GFace*)v->onWhat(); - SPoint3 p (v->x(),v->y(),v->z()); - GPoint d = gf->point(uu+eps,vv); - v->setXYZ(d.x(),d.y(),d.z()); - double f_u = approximationError (fct, element); - gradF[currentId++] = (f_u-f)/eps; - d = gf->point(uu,vv+eps); - v->setXYZ(d.x(),d.y(),d.z()); - double f_v = approximationError (fct, element); - gradF[currentId++] = (f_v-f)/eps; - v->setXYZ(p.x(),p.y(),p.z()); - // if (iEl < 1)printf("df = %g %g\n",(f_u-f)/eps,(f_v-f)/eps); - } - } - } - for (int iV = 0; iV < nVert(); iV++) - _vert[iV]->setXYZ(_xyz_temp[iV].x(),_xyz_temp[iV].y(),_xyz_temp[iV].z()); - -} +//void Mesh::approximationErrorAndGradients(int iEl, double &f, std::vector<double> &gradF, double eps, +// simpleFunction<double> &fct) +//{ +// std::vector<SPoint3> _xyz_temp; +// for (int iV = 0; iV < nVert(); iV++){ +// _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()); +// } +// +// MElement *element = _el[iEl]; +// +// f = approximationError (fct, element); +// // FIME +// // if (iEl < 1)printf("approx error elem %d = %g\n",iEl,f); +// int currentId = 0; +// // compute the size of the gradient +// // depends on how many dofs exist per vertex (0,1,2 or 3) +// for (size_t i = 0; i < element->getNumVertices(); ++i) { +// if (_el2FV[iEl][i] >= 0) {// some free coordinates +// currentId += _nPCFV[_el2FV[iEl][i]]; +// } +// } +// gradF.clear(); +// gradF.resize(currentId, 0.); +// currentId = 0; +// for (size_t i = 0; i < element->getNumVertices(); ++i) { +// if (_el2FV[iEl][i] >= 0) {// some free coordinates +// MVertex *v = element->getVertex(i); +// // vertex classified on a model edge +// if (_nPCFV[_el2FV[iEl][i]] == 1){ +// double t = _uvw[_el2FV[iEl][i]].x(); +// GEdge *ge = (GEdge*)v->onWhat(); +// SPoint3 p (v->x(),v->y(),v->z()); +// GPoint d = ge->point(t+eps); +// v->setXYZ(d.x(),d.y(),d.z()); +// double f_d = approximationError (fct, element); +// gradF[currentId++] = (f_d-f)/eps; +// if (iEl < 1)printf("df = %g\n",(f_d-f)/eps); +// v->setXYZ(p.x(),p.y(),p.z()); +// } +// else if (_nPCFV[_el2FV[iEl][i]] == 2){ +// double uu = _uvw[_el2FV[iEl][i]].x(); +// double vv = _uvw[_el2FV[iEl][i]].y(); +// GFace *gf = (GFace*)v->onWhat(); +// SPoint3 p (v->x(),v->y(),v->z()); +// GPoint d = gf->point(uu+eps,vv); +// v->setXYZ(d.x(),d.y(),d.z()); +// double f_u = approximationError (fct, element); +// gradF[currentId++] = (f_u-f)/eps; +// d = gf->point(uu,vv+eps); +// v->setXYZ(d.x(),d.y(),d.z()); +// double f_v = approximationError (fct, element); +// gradF[currentId++] = (f_v-f)/eps; +// v->setXYZ(p.x(),p.y(),p.z()); +// // if (iEl < 1)printf("df = %g %g\n",(f_u-f)/eps,(f_v-f)/eps); +// } +// } +// } +// for (int iV = 0; iV < nVert(); iV++) +// _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) diff --git a/contrib/HighOrderMeshOptimizer/OptHomMesh.h b/contrib/HighOrderMeshOptimizer/OptHomMesh.h index 696a19b0c286562d3db711d8cf5d0bf9f473b292..894cde318160544e2ede08e1cb3ecd4674d0bc42 100644 --- a/contrib/HighOrderMeshOptimizer/OptHomMesh.h +++ b/contrib/HighOrderMeshOptimizer/OptHomMesh.h @@ -38,7 +38,7 @@ #include "ParamCoord.h" #include "polynomialBasis.h" #include "simpleFunction.h" -#include "approximationError.h" +//#include "approximationError.h" class Mesh { @@ -58,7 +58,7 @@ public: inline const int &nBezEl(int iEl) { return _nBezEl[iEl]; } 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 scaledJacAndGradients(int iEl, std::vector<double> &sJ, std::vector<double> &gSJ); bool bndDistAndGradients(int iEl, double &f , std::vector<double> &gradF, double eps); @@ -142,10 +142,10 @@ private: return indJB3DBase(_nNodEl[iEl],l,i,j,m); } public: - double approximationErr(int iEl, simpleFunction<double> &f) - { - return approximationError (f, _el[iEl]); - } +// double approximationErr(int iEl, simpleFunction<double> &f) +// { +// return approximationError (f, _el[iEl]); +// } }; diff --git a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp index 0df9010057c80588a02aae2b8db3e9b49de84f73..cab609a165e0b8c150a8e9ad79cac67ed561df63 100644 --- a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp +++ b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp @@ -453,11 +453,11 @@ 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_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); if (success >= 0 && p.BARRIER_MIN_METRIC > 0) { 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); } double minJac, maxJac, distMaxBND, distAvgBND; @@ -539,11 +539,11 @@ static void optimizeOneByOne std::ostringstream ossI1; ossI1 << "initial_blob-" << iBadEl << ".msh"; 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); if (success >= 0 && p.BARRIER_MIN_METRIC > 0) { 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); }