From 4d1fe2b3f5fed9f339fe67ed7e5d58ea74a8ac43 Mon Sep 17 00:00:00 2001
From: XavierAdriaens <xavier.adriaens@doct.uliege.be>
Date: Mon, 28 Nov 2022 14:22:46 +0100
Subject: [PATCH] Decreasing additive penalization

---
 .../model/regularization/regularization.cpp   |  27 +++-
 common/model/regularization/regularization.h  |   5 +-
 common/statefunctional.cpp                    |  13 ++
 common/statefunctional.h                      |   1 +
 specific/model/regularization/flooding.cpp    |  16 +--
 specific/model/regularization/flooding.h      |   1 -
 specific/model/regularization/tikhonov.cpp    |  18 +--
 specific/model/regularization/tikhonov.h      |   2 -
 .../model/regularization/totalvariation.cpp   |  13 +-
 .../model/regularization/totalvariation.h     |   1 -
 .../newGlobalMinimumSearch.h                  |   4 +-
 .../{sequentialscale.cpp => sequential.cpp}   | 117 ++++++++++--------
 .../{sequentialscale.h => sequential.h}       |  24 ++--
 13 files changed, 122 insertions(+), 120 deletions(-)
 rename specific/optimization/globalminimumsearch/{sequentialscale.cpp => sequential.cpp} (64%)
 rename specific/optimization/globalminimumsearch/{sequentialscale.h => sequential.h} (73%)

diff --git a/common/model/regularization/regularization.cpp b/common/model/regularization/regularization.cpp
index 127f910..aa07be1 100644
--- a/common/model/regularization/regularization.cpp
+++ b/common/model/regularization/regularization.cpp
@@ -11,7 +11,7 @@ using namespace gmshfem::equation;
 /*
 * RegularizationInterface
 */
-RegularizationInterface::RegularizationInterface(const ConfigurationInterface* const config, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : _config(config)
+RegularizationInterface::RegularizationInterface(const ConfigurationInterface* const config, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : _config(config), _m_size(_config->model_size()), _lambda(_m_size,0.)
 {
     if(!gmshFem.userDefinedParameter(_integrationType, "integration_type"))
     {
@@ -33,6 +33,21 @@ RegularizationInterface::RegularizationInterface(const ConfigurationInterface* c
     {
       throw Exception("Regularization integration degree (boundary) could not be found.");
     }
+    for (unsigned int c = 0; c < _m_size; c++)
+    {
+        std::string suffix1 = "c"+std::to_string(c);
+        std::string root = "regularization_lambda";
+        if(!(
+            gmshFem.userDefinedParameter(_lambda[c], root) ||
+            gmshFem.userDefinedParameter(_lambda[c], root+suffix)
+            ||
+            gmshFem.userDefinedParameter(_lambda[c], root+suffix1) ||
+            gmshFem.userDefinedParameter(_lambda[c], root+suffix1+suffix)
+        ))
+        {
+            throw Exception("Regularization strength could not be found.");
+        }
+    }
 };
 
 std::complex<double> RegularizationInterface::directional(const Sensitivity& sensitivity, const ModelFunction& dm2, Support support) const
@@ -53,11 +68,19 @@ std::complex<double> RegularizationInterface::directional(const Sensitivity& sen
     return sum;
 }
 
+void RegularizationInterface::lambda(double lambda,unsigned int c)
+{
+    if(c<_m_size) {_lambda[c]=lambda;}
+    else
+    {
+        throw Exception("Component c"+std::to_string(c)+" does not exsit.");
+    }
+}
 
 /*
 * DifferentialRegularizationInterface
 */
-DifferentialRegularizationInterface::DifferentialRegularizationInterface(const ConfigurationInterface* const config, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : RegularizationInterface(config, gmshFem, suffix), _m_size(_config->model_size()), _systemAreUpToDate(false), _systemAreFactorized(false)
+DifferentialRegularizationInterface::DifferentialRegularizationInterface(const ConfigurationInterface* const config, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : RegularizationInterface(config, gmshFem, suffix),_systemAreUpToDate(false), _systemAreFactorized(false)
 {
     for (unsigned int c = 0; c < _m_size; c++)
     {
diff --git a/common/model/regularization/regularization.h b/common/model/regularization/regularization.h
index 75e8853..fa31a9c 100644
--- a/common/model/regularization/regularization.h
+++ b/common/model/regularization/regularization.h
@@ -15,6 +15,8 @@ class RegularizationInterface
 {
 protected:
     const ConfigurationInterface* const _config;
+    const unsigned int _m_size;
+    std::vector<double> _lambda;
     std::string _integrationType;
     unsigned int _integrationDegreeBlk;
     unsigned int _integrationDegreeBnd;
@@ -31,6 +33,8 @@ public:
 
     virtual void modelIsObsolete() {};
     virtual void modelPerturbationIsObsolete() {};
+
+    void lambda(double lambda,unsigned int c=0);
 };
 
 /*
@@ -39,7 +43,6 @@ public:
 class DifferentialRegularizationInterface: public RegularizationInterface
 {
 protected:
-    const unsigned int _m_size;
     ModelField _k;
     std::array<std::array<ModelField,2>,3> _j;
 
diff --git a/common/statefunctional.cpp b/common/statefunctional.cpp
index d9f6a35..16fdf15 100644
--- a/common/statefunctional.cpp
+++ b/common/statefunctional.cpp
@@ -122,6 +122,19 @@ void StateFunctional<T_Physic>::objectiveIsObsolete()
     _mu.isObsolete(modelNoMoreUpToDate);
 }
 
+template<Physic T_Physic>
+void StateFunctional<T_Physic>::regularizationIsObsolete()
+{
+    if(_regularization != nullptr)
+    {
+        std::array<bool,3> sensitivityNoMoreUpToDate = {true, true, true};
+        _suv[_nf]->isObsolete(sensitivityNoMoreUpToDate);
+        _su.isObsolete(sensitivityNoMoreUpToDate);
+        std::array<bool,4> modelNoMoreUpToDate = {false, false, true, true};
+        _mu.isObsolete(modelNoMoreUpToDate);
+    }
+}
+
 template<Physic T_Physic>
 void StateFunctional<T_Physic>::modelIsObsolete()
 {
diff --git a/common/statefunctional.h b/common/statefunctional.h
index 6f9eb15..28031e7 100644
--- a/common/statefunctional.h
+++ b/common/statefunctional.h
@@ -38,6 +38,7 @@ public:
 
     void innerproductIsObsolete();
     void objectiveIsObsolete();
+    void regularizationIsObsolete();
 
     void write_model(Type type, std::string name);
     void write_data(Type type, std::string name, std::string fmt = "csv");
diff --git a/specific/model/regularization/flooding.cpp b/specific/model/regularization/flooding.cpp
index a47afd8..3bc81f9 100644
--- a/specific/model/regularization/flooding.cpp
+++ b/specific/model/regularization/flooding.cpp
@@ -15,22 +15,8 @@ using namespace gmshfem::post;
 */
 namespace flooding
 {
-    Regularization::Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : DifferentialRegularizationInterface(config,m,gmshFem,suffix), _lambda(_m_size,0.)
+    Regularization::Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : DifferentialRegularizationInterface(config,m,gmshFem,suffix)
     {
-        for (unsigned int c = 0; c < _m_size; c++)
-        {
-            std::string suffix1 = "c"+std::to_string(c);
-            if(!(
-                gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda") ||
-                gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix)
-                ||
-                gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix1) ||
-                gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix1+suffix)
-            ))
-            {
-                throw Exception("Regularization scale could not be found.");
-            }
-        }
         if(!(
             gmshFem.userDefinedParameter(_p, "regularization_p") ||
             gmshFem.userDefinedParameter(_p, "regularization_p"+suffix)
diff --git a/specific/model/regularization/flooding.h b/specific/model/regularization/flooding.h
index fb9fd5d..d4a43d0 100644
--- a/specific/model/regularization/flooding.h
+++ b/specific/model/regularization/flooding.h
@@ -16,7 +16,6 @@ namespace flooding
     {
     private:
         double _p;
-        std::vector<double> _lambda;
     public:
         Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix="");
 
diff --git a/specific/model/regularization/tikhonov.cpp b/specific/model/regularization/tikhonov.cpp
index 1ff88fd..0afdc23 100644
--- a/specific/model/regularization/tikhonov.cpp
+++ b/specific/model/regularization/tikhonov.cpp
@@ -14,23 +14,7 @@ using namespace gmshfem::post;
 */
 namespace tikhonov
 {
-    Regularization::Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : DifferentialRegularizationInterface(config,m,gmshFem,suffix), _lambda(_m_size,0.)
-    {
-        for (unsigned int c = 0; c < _m_size; c++)
-        {
-            std::string suffix1 = "c"+std::to_string(c);
-            if(!(
-                gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda") ||
-                gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix)
-                ||
-                gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix1) ||
-                gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix1+suffix)
-            ))
-            {
-                throw Exception("Regularization scale could not be found.");
-            }
-        }
-    };
+    Regularization::Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : DifferentialRegularizationInterface(config,m,gmshFem,suffix) {};
 
     double Regularization::performance(const ModelField& m)
     {
diff --git a/specific/model/regularization/tikhonov.h b/specific/model/regularization/tikhonov.h
index 2268bfe..14ee7cf 100644
--- a/specific/model/regularization/tikhonov.h
+++ b/specific/model/regularization/tikhonov.h
@@ -14,8 +14,6 @@ namespace tikhonov
 {
     class Regularization final: public DifferentialRegularizationInterface
     {
-    private:
-        std::vector<double> _lambda;
     public:
         Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix="");
 
diff --git a/specific/model/regularization/totalvariation.cpp b/specific/model/regularization/totalvariation.cpp
index 37f9d3c..9ea6872 100644
--- a/specific/model/regularization/totalvariation.cpp
+++ b/specific/model/regularization/totalvariation.cpp
@@ -15,22 +15,11 @@ using namespace gmshfem::post;
 */
 namespace totalvariation
 {
-    Regularization::Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : DifferentialRegularizationInterface(config,m,gmshFem,suffix), _lambda(_m_size,0.), _beta(_m_size,0.)
+    Regularization::Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : DifferentialRegularizationInterface(config,m,gmshFem,suffix), _beta(_m_size,0.)
     {
         for (unsigned int c = 0; c < _m_size; c++)
         {
             std::string suffix1 = "c"+std::to_string(c);
-            if(!(
-                gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda") ||
-                gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix)
-                ||
-                gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix1) ||
-                gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix1+suffix)
-            ))
-            {
-                throw Exception("Regularization scale could not be found.");
-            }
-
             if(!(
                 gmshFem.userDefinedParameter(_beta[c], "regularization_beta") ||
                 gmshFem.userDefinedParameter(_beta[c], "regularization_beta"+suffix)
diff --git a/specific/model/regularization/totalvariation.h b/specific/model/regularization/totalvariation.h
index 5494160..9ccd5f6 100644
--- a/specific/model/regularization/totalvariation.h
+++ b/specific/model/regularization/totalvariation.h
@@ -15,7 +15,6 @@ namespace totalvariation
     class Regularization final: public DifferentialRegularizationInterface
     {
     private:
-        std::vector<double> _lambda;
         std::vector<double> _beta;
     public:
         Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix="");
diff --git a/specific/optimization/globalminimumsearch/newGlobalMinimumSearch.h b/specific/optimization/globalminimumsearch/newGlobalMinimumSearch.h
index c2c6880..7243d71 100644
--- a/specific/optimization/globalminimumsearch/newGlobalMinimumSearch.h
+++ b/specific/optimization/globalminimumsearch/newGlobalMinimumSearch.h
@@ -9,7 +9,7 @@
 #include "Exception.h"
 
 //FWI Library
-#include "sequentialscale.h"
+#include "sequential.h"
 
 template<Physic T_Physic>
 GlobalMinimumSearchInterface<T_Physic>* newGlobalMinimumSearch(const std::string& name, const ConfigurationInterface* const config, const gmshfem::common::GmshFem& gmshFem, const std::string& suffix = "")
@@ -19,7 +19,7 @@ GlobalMinimumSearchInterface<T_Physic>* newGlobalMinimumSearch(const std::string
     {
       throw gmshfem::common::Exception("Global minimum search type could not be found.");
     }
-    if(minimumsearch=="sequentialscale"){return new sequentialscale::GlobalMinimumSearch<T_Physic>(name, config, gmshFem, suffix);}
+    if(minimumsearch=="sequential" || minimumsearch=="mono"){return new sequential::GlobalMinimumSearch<T_Physic>(name, config, gmshFem, suffix);}
     else
     {
         throw gmshfem::common::Exception("Global minimum search " + minimumsearch + " is not valid.");
diff --git a/specific/optimization/globalminimumsearch/sequentialscale.cpp b/specific/optimization/globalminimumsearch/sequential.cpp
similarity index 64%
rename from specific/optimization/globalminimumsearch/sequentialscale.cpp
rename to specific/optimization/globalminimumsearch/sequential.cpp
index 6c00c58..8dfc864 100644
--- a/specific/optimization/globalminimumsearch/sequentialscale.cpp
+++ b/specific/optimization/globalminimumsearch/sequential.cpp
@@ -1,8 +1,9 @@
 //GmshFEM Library
 #include "Exception.h"
+#include "Message.h"
 
 //GmshFWI Library
-#include "sequentialscale.h"
+#include "sequential.h"
 #include "../../data/objective/newObjective.h"
 #include "../../model/innerproduct/newInnerProduct.h"
 #include "../../model/regularization/newRegularization.h"
@@ -14,7 +15,7 @@
 using namespace gmshfem;
 using namespace gmshfem::common;
 
-namespace sequentialscale
+namespace sequential
 {
     /*
     * class GlobalMinimumSearchHistoryLine2
@@ -23,11 +24,11 @@ namespace sequentialscale
     {
         if(write_header)
         {
-            file << "Performance" << "Relative decrease" << "Scale" << "Objective" << "Regularization" << csv::endl;
+            file << "Performance" << "Relative decrease" << "Sequential parameter" << "Objective" << "Regularization" << csv::endl;
         }
         else
         {
-            file << performance << relDecrease << scale << perf_obj << perf_reg << csv::endl;
+            file << performance << relDecrease << sequential_parameter << perf_obj << perf_reg << csv::endl;
         }
     }
 
@@ -38,12 +39,12 @@ namespace sequentialscale
     {
         if(write_header)
         {
-            file << "Success" << "Scale number" << csv::endl;
+            file << "Success" << "Scale number" << "Parameter type" << csv::endl;
             file << "History" << csv::endl;
         }
         else
         {
-            file << success << nscale << csv::endl;
+            file << success << nseq << type << csv::endl;
             if(!history.empty())
             {
                 history.begin()->write(file,true);
@@ -82,45 +83,47 @@ namespace sequentialscale
     template<Physic T_Physic>
     GlobalMinimumSearch<T_Physic>::GlobalMinimumSearch(const std::string& name, const ConfigurationInterface* const config, const GmshFem& gmshFem, const std::string& suffix) : GlobalMinimumSearchInterface<T_Physic>::GlobalMinimumSearchInterface(name,config), _history( new GlobalMinimumSearchHistory() ), _gmshFem(gmshFem), _suffix(suffix)
     {
-        if(!(
-            gmshFem.userDefinedParameter(_n_scale, "globalminimum_n_scale") ||
-            gmshFem.userDefinedParameter(_n_scale, "globalminimum_n_scale"+suffix)
-            )
-        )
+        std::string minimumsearch;
+        gmshFem.userDefinedParameter(minimumsearch, "globalminimumsearch");
+        if(minimumsearch=="mono")
         {
-            throw Exception("Number of scale for group "+suffix+" could not be found.");
+            _type = "none";
+            _n_seq = 1;
+            _seq_parameters.resize(_n_seq);
+            _seq_parameters[0]=0.;
         }
-        if(!(
-            gmshFem.userDefinedParameter(_minNscale, "globalminimum_minNscale") ||
-            gmshFem.userDefinedParameter(_minNscale, "globalminimum_minNscale"+suffix)
-            )
-        )
+        else
         {
-            msg::warning << "Minimum number of scales (globalminimum_minNscale) could not be found." << msg::endl;
-            _minNscale = 0;
-        }
-        if(!(
-            gmshFem.userDefinedParameter(_relDecreaseThreshold, "globalminimum_relDecreaseThreshold") ||
-            gmshFem.userDefinedParameter(_relDecreaseThreshold, "globalminimum_relDecreaseThreshold"+suffix)
+            _type = "innerproduct_strength";
+            if(!(
+                gmshFem.userDefinedParameter(_type, "globalminimum_type") ||
+                gmshFem.userDefinedParameter(_type, "globalminimum_type"+suffix)
             )
-        )
-        {
-            msg::warning << "Global minimum relative decrease threshold (relDecreaseThreshold) could not be found." << msg::endl;
-            _relDecreaseThreshold = 0.0;
-        }
-        _scale.resize(_n_scale);
-        for (unsigned int sc = 0; sc < _n_scale; sc++)
-        {
-            std::string suffix1 = std::to_string(sc);
+            )
+            {
+                msg::warning << "Sequential globalminimum parameter type could not be found. Default is used (innerproduct_strength)." << msg::endl;
+            }
             if(!(
-                _gmshFem.userDefinedParameter(_scale[sc], "scale")
-                ||
-                _gmshFem.userDefinedParameter(_scale[sc], "scale"+suffix)
-                ||
-                _gmshFem.userDefinedParameter(_scale[sc], "scale"+suffix+suffix1)
-            ))
+                gmshFem.userDefinedParameter(_n_seq, "globalminimum_n_seq") ||
+                gmshFem.userDefinedParameter(_n_seq, "globalminimum_n_scale"+suffix)
+            )
+            )
+            {
+                throw Exception("Number of sequence for group "+suffix+" could not be found.");
+            }
+            _seq_parameters.resize(_n_seq);
+            for (unsigned int sq = 0; sq < _n_seq; sq++)
             {
-                throw Exception("Scale "+suffix1+" could not be found.");
+                std::string suffix1 = "s"+std::to_string(sq);
+                std::string root = "globalminimum_sequential_parameter";
+                if(!(
+                    _gmshFem.userDefinedParameter(_seq_parameters[sq],root+suffix1)
+                    ||
+                    _gmshFem.userDefinedParameter(_seq_parameters[sq],root+suffix+suffix1)
+                ))
+                {
+                    throw Exception("Sequential parameter "+suffix1+" could not be found.");
+                }
             }
         }
     }
@@ -128,7 +131,7 @@ namespace sequentialscale
     template<Physic T_Physic>
     void GlobalMinimumSearch<T_Physic>::operator()(ModelField* const m, const Data<T_Physic>& d0, const std::vector<EquationInterface<T_Physic>*>& equation) const
     {
-        msg::print << "Search global minimum (sequential scale)" << msg::endl;
+        msg::print << "Search global minimum (sequential)" << msg::endl;
         msg::indent();
 
         unsigned int n_freq = d0.nf();
@@ -155,16 +158,24 @@ namespace sequentialscale
         historyline.emplace_back(js,0.,0.,statefunctional->performance_objective(),statefunctional->performance_regularization());
         double rel_djs = 0.;
         bool success = false;
-        unsigned int sc = 0;
-        for (sc = 0; sc < _n_scale; sc++)
+        unsigned int sq = 0;
+        for (sq = 0; sq < _n_seq; sq++)
         {
-            std::string suffix1 = std::to_string(sc);
-            msg::print << "--- Scale #" << suffix1 << " = " << _scale[sc] << " --- " << msg::endl;
+            std::string suffix1 = std::to_string(sq);
+            msg::print << "--- Sequence #" << suffix1 << ": " << _seq_parameters[sq] << " --- " << msg::endl;
             msg::indent();
-            innerproduct->scale(_scale[sc]);
-            objective->scale(_scale[sc]);
-            statefunctional->innerproductIsObsolete();
-            statefunctional->objectiveIsObsolete();
+
+            if (_type == "none"){}
+            else if(_type=="innerproduct_strength")
+            {
+                innerproduct->scale(_seq_parameters[sq]);
+                statefunctional->innerproductIsObsolete();
+            }
+            else if(_type=="regularization_strength")
+            {
+                regularization->lambda(_seq_parameters[sq]);
+                statefunctional->regularizationIsObsolete();
+            }
             minimumsearch->name(_name+"g"+_suffix+"s"+suffix1);
             js_1=js;
             (*minimumsearch)(m, functional, descentsearch, linesearch);
@@ -173,15 +184,11 @@ namespace sequentialscale
             //statefunctional->write_data(Type::FS,_name+"_dg"+_suffix+"s"+suffix1,"pos");
             rel_djs = 2. * (js_1-js) / (js_1+js);
             msg::print << "relative decrease = " <<  rel_djs  << msg::endl;
-            historyline.emplace_back(js,rel_djs,_scale[sc],statefunctional->performance_objective(),statefunctional->performance_regularization());
+            historyline.emplace_back(js,rel_djs,_seq_parameters[sq],statefunctional->performance_objective(),statefunctional->performance_regularization());
             msg::unindent();
-            if(rel_djs < _relDecreaseThreshold && (sc+1) >= _minNscale)
-            {
-                success=true;
-                break;
-            }
         }
-        _history->emplace_back(success,sc,historyline);
+        success=true;
+        _history->emplace_back(success,sq,historyline);
 
         minimumsearch->history()->write(_name+"_localminimum_historyg" + _suffix);
         descentsearch->history()->write(_name+"_descent_historyg" + _suffix);
diff --git a/specific/optimization/globalminimumsearch/sequentialscale.h b/specific/optimization/globalminimumsearch/sequential.h
similarity index 73%
rename from specific/optimization/globalminimumsearch/sequentialscale.h
rename to specific/optimization/globalminimumsearch/sequential.h
index 0b56a21..184c3cc 100644
--- a/specific/optimization/globalminimumsearch/sequentialscale.h
+++ b/specific/optimization/globalminimumsearch/sequential.h
@@ -1,5 +1,5 @@
-#ifndef H_SPECIFIC_OPTIMIZATION_GLOBALMINIMUMSEARCH_SEQUENTIALSCALE
-#define H_SPECIFIC_OPTIMIZATION_GLOBALMINIMUMSEARCH_SEQUENTIALSCALE
+#ifndef H_SPECIFIC_OPTIMIZATION_GLOBALMINIMUMSEARCH_SEQUENTIAL
+#define H_SPECIFIC_OPTIMIZATION_GLOBALMINIMUMSEARCH_SEQUENTIAL
 
 //GmshFEM Library
 #include "GmshFem.h"
@@ -8,7 +8,7 @@
 //GmshFWI Library
 #include "../../../common/optimization/globalminimumsearch.h"
 
-namespace sequentialscale
+namespace sequential
 {
     /*
     * class GlobalMinimumSearchHistoryLine2
@@ -18,11 +18,11 @@ namespace sequentialscale
     public:
         const double performance;
         const double relDecrease;
-        const double scale;
+        const double sequential_parameter;
         const double perf_obj;
         const double perf_reg;
 
-        GlobalMinimumSearchHistoryLine2(double performance_init, double relDecrease_init, double scale_init, double perf_obj_init, double perf_reg_init) : performance(performance_init), relDecrease(relDecrease_init), scale(scale_init), perf_obj(perf_obj_init), perf_reg(perf_reg_init) {};
+        GlobalMinimumSearchHistoryLine2(double performance_init, double relDecrease_init, double sequential_parameter_init, double perf_obj_init, double perf_reg_init) : performance(performance_init), relDecrease(relDecrease_init), sequential_parameter(sequential_parameter_init), perf_obj(perf_obj_init), perf_reg(perf_reg_init) {};
 
         void write(gmshfem::common::CSVio& file, bool write_header=false) const;
     };
@@ -34,10 +34,11 @@ namespace sequentialscale
     {
     public:
         const bool success;
-        const unsigned int nscale;
+        const std::string type;
+        const unsigned int nseq;
         const std::vector<GlobalMinimumSearchHistoryLine2> history;
 
-        GlobalMinimumSearchHistoryLine(bool success_init, unsigned int nscale_init, const std::vector<GlobalMinimumSearchHistoryLine2>& history_init) : success(success_init), nscale(nscale_init), history(history_init) {};
+        GlobalMinimumSearchHistoryLine(bool success_init, unsigned int nseq_init, const std::vector<GlobalMinimumSearchHistoryLine2>& history_init) : success(success_init), nseq(nseq_init), history(history_init) {};
 
         void write(gmshfem::common::CSVio& file, bool write_header=false) const;
     };
@@ -61,13 +62,12 @@ namespace sequentialscale
         using GlobalMinimumSearchInterface<T_Physic>::_name;
         using GlobalMinimumSearchInterface<T_Physic>::_config;
 
-        unsigned int _n_scale;
-        std::vector<double> _scale;
-        unsigned int _minNscale;
-        double _relDecreaseThreshold;
+        unsigned int _n_seq;
+        std::vector<double> _seq_parameters;
         GlobalMinimumSearchHistory* const _history;
 
         const gmshfem::common::GmshFem& _gmshFem;
+        std::string _type;
         std::string _suffix;
     public:
         GlobalMinimumSearch(const std::string& name, const ConfigurationInterface* const config, const gmshfem::common::GmshFem& gmshFem, const std::string& suffix);
@@ -79,4 +79,4 @@ namespace sequentialscale
     };
 };
 
-#endif // H_SPECIFIC_OPTIMIZATION_GLOBALMINIMUMSEARCH_SEQUENTIALSCALE
+#endif // H_SPECIFIC_OPTIMIZATION_GLOBALMINIMUMSEARCH_SEQUENTIAL
-- 
GitLab