From 4c3da41723d8c8644516393d8e266dcbbeb4f08b Mon Sep 17 00:00:00 2001
From: Boris Martin <boris.martin.be@gmail.com>
Date: Mon, 20 Feb 2023 09:19:23 +0000
Subject: [PATCH] Refactoring of Configuration::mesh() where a default
 implementation is usually good enough.

---
 common/configuration.cpp                      | 25 +++++++++++++++++++
 common/configuration.h                        |  2 +-
 .../configuration/circular_acquisition.cpp    | 19 --------------
 .../layeredvolume_acquisition.cpp             | 20 ---------------
 .../configuration/surface_acquisition.cpp     | 19 +-------------
 specific/configuration/volume_acquisition.cpp | 20 ---------------
 6 files changed, 27 insertions(+), 78 deletions(-)

diff --git a/common/configuration.cpp b/common/configuration.cpp
index 7a930cc..e0f21fe 100644
--- a/common/configuration.cpp
+++ b/common/configuration.cpp
@@ -3,11 +3,36 @@
 //GmshFWI Library
 
 #include "configuration.h"
+#include <gmsh.h>
+
+namespace gmodel = gmsh::model;
+namespace factory = gmsh::model::geo;
 
 using namespace gmshfem;
 using namespace gmshfem::common;
 using namespace gmshfem::domain;
 
+void ConfigurationInterface::mesh() const
+{
+  msg::print << "Generate meshes" << msg::endl;
+  gmsh::option::setNumber("General.Terminal", 1);
+
+  gmodel::add(_name);
+  if (!_remesh)
+  {
+    gmsh::open(_name + ".msh");
+    return;
+  }
+
+  wave_mesh();
+  data_mesh();
+
+  factory::synchronize();
+  gmodel::mesh::generate();
+
+  gmsh::write(_name + ".msh");
+}
+
 bool ConfigurationInterface::recIsValid(unsigned int shot,unsigned int rec) const
 {
   if( !(shot<_ns) && !(rec<nr(shot)) )
diff --git a/common/configuration.h b/common/configuration.h
index 881b0d8..8818d6b 100644
--- a/common/configuration.h
+++ b/common/configuration.h
@@ -51,7 +51,7 @@ public:
     };
     virtual ~ConfigurationInterface() {delete _parametrization;};
 
-    virtual void mesh() const = 0;
+    virtual void mesh() const;
     virtual double area() const = 0;
     virtual double data_area() const {return gmshfem::post::integrate(1._d_sf,_data_omega,"Gauss0");};
     virtual double datapoint_area() const = 0;
diff --git a/specific/configuration/circular_acquisition.cpp b/specific/configuration/circular_acquisition.cpp
index beb2b8a..727e6fb 100644
--- a/specific/configuration/circular_acquisition.cpp
+++ b/specific/configuration/circular_acquisition.cpp
@@ -264,26 +264,7 @@ namespace circular_acquisition
         }
     }
 
-    void Configuration::mesh() const
-    {
-        msg::print << "Generate meshes" << msg::endl;
-        gmsh::option::setNumber("General.Terminal", 1);
-
-        gmodel::add(_name);
-        if(!_remesh)
-        {
-          gmsh::open(_name+".msh");
-          return;
-        }
 
-        wave_mesh();
-        data_mesh();
-
-        factory::synchronize();
-        gmodel::mesh::generate();
-
-        gmsh::write(_name+".msh");
-    }
     void Configuration::wave_mesh() const
     {
         int p0 = factory::addPoint(0., 0., 0., _h);
diff --git a/specific/configuration/layeredvolume_acquisition.cpp b/specific/configuration/layeredvolume_acquisition.cpp
index bbcf3c8..0acdab1 100644
--- a/specific/configuration/layeredvolume_acquisition.cpp
+++ b/specific/configuration/layeredvolume_acquisition.cpp
@@ -477,26 +477,6 @@ namespace layeredvolume_acquisition
         }
     }
 
-    void Configuration::mesh() const
-    {
-        msg::print << "Generate meshes" << msg::endl;
-        gmsh::option::setNumber("General.Terminal", 1);
-
-        gmodel::add(_name);
-        if(!_remesh)
-        {
-          gmsh::open(_name+".msh");
-          return;
-        }
-
-        wave_mesh();
-        data_mesh();
-
-        factory::synchronize();
-        gmodel::mesh::generate();
-
-        gmsh::write(_name+".msh");
-    }
     void Configuration::wave_mesh() const
     {
         std::vector<int> pl1(_layercoord1.size());
diff --git a/specific/configuration/surface_acquisition.cpp b/specific/configuration/surface_acquisition.cpp
index 40cb28b..0a81f15 100644
--- a/specific/configuration/surface_acquisition.cpp
+++ b/specific/configuration/surface_acquisition.cpp
@@ -265,24 +265,7 @@ namespace surface_acquisition
         }
     }
 
-    void Configuration::mesh() const
-    {
-        msg::print << "Generate meshes" << msg::endl;
-        gmsh::option::setNumber("General.Terminal", 1);
-        gmodel::add(_name);
-        if(!_remesh)
-        {
-          gmsh::open(_name+".msh");
-          return;
-        }
-        wave_mesh();
-        data_mesh();
-
-        factory::synchronize();
-        gmodel::mesh::generate();
-
-        gmsh::write(_name+".msh");
-    }
+    
     void Configuration::wave_mesh() const
     {
         double Le0 = (_L - _Ler)/2.;
diff --git a/specific/configuration/volume_acquisition.cpp b/specific/configuration/volume_acquisition.cpp
index e4b2a78..2ed4e1e 100644
--- a/specific/configuration/volume_acquisition.cpp
+++ b/specific/configuration/volume_acquisition.cpp
@@ -341,26 +341,6 @@ namespace volume_acquisition
         }
     }
 
-    void Configuration::mesh() const
-    {
-        msg::print << "Generate meshes" << msg::endl;
-        gmsh::option::setNumber("General.Terminal", 1);
-
-        gmodel::add(_name);
-        if(!_remesh)
-        {
-          gmsh::open(_name+".msh");
-          return;
-        }
-
-        wave_mesh();
-        data_mesh();
-
-        factory::synchronize();
-        gmodel::mesh::generate();
-
-        gmsh::write(_name+".msh");
-    }
     void Configuration::wave_mesh() const
     {
         int pb1 = factory::addPoint(0., 0., 0., _h);
-- 
GitLab