From 1e1a0e994c93a764d1cbeb2f8c255e29fd8af0f4 Mon Sep 17 00:00:00 2001 From: XavierAdriaens <xavier.adriaens@doct.uliege.be> Date: Wed, 30 Nov 2022 14:57:55 +0100 Subject: [PATCH] up sequential,flooding and surface acuqi --- specific/configuration/surface_acquisition.cpp | 2 +- specific/model/regularization/flooding.cpp | 17 +++++++++++++++-- .../globalminimumsearch/sequential.cpp | 9 ++++++--- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/specific/configuration/surface_acquisition.cpp b/specific/configuration/surface_acquisition.cpp index 493d6dd..40cb28b 100644 --- a/specific/configuration/surface_acquisition.cpp +++ b/specific/configuration/surface_acquisition.cpp @@ -207,7 +207,7 @@ namespace surface_acquisition } gmsh::merge(path+suffix+".pos"); - ScalarFunction<std::complex<double>> mpos = probeScalarView<std::complex<double>>(0); + ScalarFunction<std::complex<double>> mpos = probeScalarView<std::complex<double>>(c); m0.addFunction(mpos,_subsurface[Support::BLK] | _subsurface[Support::BND] ); } diff --git a/specific/model/regularization/flooding.cpp b/specific/model/regularization/flooding.cpp index 3bc81f9..f72b868 100644 --- a/specific/model/regularization/flooding.cpp +++ b/specific/model/regularization/flooding.cpp @@ -24,6 +24,11 @@ namespace flooding { throw Exception("Regularization order could not be found."); } + if(_p<0.5) + { + throw Exception("Flooding regularization parameter p could not be smaller than 0.5."); + } + }; double Regularization::performance(const ModelField& m) @@ -33,7 +38,7 @@ namespace flooding { ScalarFunction<std::complex<double>> mz = yComp(grad(m[c])); ScalarFunction<std::complex<double>> f = (abs(mz) - mz) / 2.; - out += _lambda[c] * integrate( pow(f,2*_p) / 2. / _p, _config->model_unknown(Support::BLK), integrationType(_integrationDegreeBlk) ); + out += _lambda[c] * integrate( pow(f,2.*_p) / 2. / _p, _config->model_unknown(Support::BLK), integrationType(_integrationDegreeBlk) ); } return std::real(out); } @@ -46,7 +51,15 @@ namespace flooding ScalarFunction<std::complex<double>> f = (abs(mz) - mz) / 2.; ScalarFunction<std::complex<double>> partition = heaviside< std::complex< double > >( -mz ); - VectorFunction< std::complex< double > > integrand = vector< std::complex< double > >(0.,-partition * pow(f,2*_p-1),0.); + VectorFunction< std::complex< double > > integrand; + if(_p==0.5) + { + integrand = vector< std::complex< double > >(0.,-partition,0.); + } + else + { + integrand = vector< std::complex< double > >(0.,-partition * pow(f,2.*_p-1.),0.); + } switch (support) { diff --git a/specific/optimization/globalminimumsearch/sequential.cpp b/specific/optimization/globalminimumsearch/sequential.cpp index 8dfc864..d93ba5d 100644 --- a/specific/optimization/globalminimumsearch/sequential.cpp +++ b/specific/optimization/globalminimumsearch/sequential.cpp @@ -162,8 +162,11 @@ namespace sequential for (sq = 0; sq < _n_seq; sq++) { std::string suffix1 = std::to_string(sq); - msg::print << "--- Sequence #" << suffix1 << ": " << _seq_parameters[sq] << " --- " << msg::endl; - msg::indent(); + if (_type != "none") + { + msg::print << "--- Sequence #" << suffix1 << ": " << _seq_parameters[sq] << " --- " << msg::endl; + msg::indent(); + } if (_type == "none"){} else if(_type=="innerproduct_strength") @@ -185,7 +188,7 @@ namespace sequential rel_djs = 2. * (js_1-js) / (js_1+js); msg::print << "relative decrease = " << rel_djs << msg::endl; historyline.emplace_back(js,rel_djs,_seq_parameters[sq],statefunctional->performance_objective(),statefunctional->performance_regularization()); - msg::unindent(); + if (_type != "none"){msg::unindent();} } success=true; _history->emplace_back(success,sq,historyline); -- GitLab