From f4e45f73d241a42148acdd2e8933983557d67f4d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Thu, 22 Apr 2021 15:27:06 +0200
Subject: [PATCH] Remove the constructors based on FunctionSymbolId

These constructors existence was the result of a bad design and just
treated very special cases
---
 src/scheme/AcousticSolver.cpp                   |  1 +
 src/scheme/DiscreteFunctionInterpoler.cpp       | 11 +++++++++--
 src/scheme/DiscreteFunctionP0.hpp               | 11 -----------
 src/scheme/DiscreteFunctionP0Vector.hpp         | 12 ------------
 src/scheme/DiscreteFunctionVectorInterpoler.cpp | 10 +++++++++-
 5 files changed, 19 insertions(+), 26 deletions(-)

diff --git a/src/scheme/AcousticSolver.cpp b/src/scheme/AcousticSolver.cpp
index 3336fd716..6bac5a6b3 100644
--- a/src/scheme/AcousticSolver.cpp
+++ b/src/scheme/AcousticSolver.cpp
@@ -1,5 +1,6 @@
 #include <scheme/AcousticSolver.hpp>
 
+#include <language/utils/InterpolateItemValue.hpp>
 #include <mesh/ItemValueUtils.hpp>
 #include <mesh/MeshNodeBoundary.hpp>
 #include <scheme/DirichletBoundaryConditionDescriptor.hpp>
diff --git a/src/scheme/DiscreteFunctionInterpoler.cpp b/src/scheme/DiscreteFunctionInterpoler.cpp
index fda64fdcb..c8eeaf94c 100644
--- a/src/scheme/DiscreteFunctionInterpoler.cpp
+++ b/src/scheme/DiscreteFunctionInterpoler.cpp
@@ -1,5 +1,6 @@
 #include <scheme/DiscreteFunctionInterpoler.hpp>
 
+#include <language/utils/InterpolateItemValue.hpp>
 #include <scheme/DiscreteFunctionP0.hpp>
 #include <utils/Exceptions.hpp>
 
@@ -7,8 +8,14 @@ template <size_t Dimension, typename DataType>
 std::shared_ptr<IDiscreteFunction>
 DiscreteFunctionInterpoler::_interpolate() const
 {
-  std::shared_ptr mesh = std::dynamic_pointer_cast<const Mesh<Connectivity<Dimension>>>(m_mesh);
-  return std::make_shared<DiscreteFunctionP0<Dimension, DataType>>(mesh, m_function_id);
+  std::shared_ptr mesh    = std::dynamic_pointer_cast<const Mesh<Connectivity<Dimension>>>(m_mesh);
+  using MeshDataType      = MeshData<Dimension>;
+  MeshDataType& mesh_data = MeshDataManager::instance().getMeshData(*mesh);
+
+  return std::make_shared<
+    DiscreteFunctionP0<Dimension, DataType>>(mesh,
+                                             InterpolateItemValue<DataType(TinyVector<Dimension>)>::
+                                               template interpolate<ItemType::cell>(m_function_id, mesh_data.xj()));
 }
 
 template <size_t Dimension>
diff --git a/src/scheme/DiscreteFunctionP0.hpp b/src/scheme/DiscreteFunctionP0.hpp
index df64472fe..c2ee7f44d 100644
--- a/src/scheme/DiscreteFunctionP0.hpp
+++ b/src/scheme/DiscreteFunctionP0.hpp
@@ -3,7 +3,6 @@
 
 #include <scheme/IDiscreteFunction.hpp>
 
-#include <language/utils/InterpolateItemValue.hpp>
 #include <mesh/Connectivity.hpp>
 #include <mesh/Mesh.hpp>
 #include <mesh/MeshData.hpp>
@@ -246,16 +245,6 @@ class DiscreteFunctionP0 : public IDiscreteFunction
     return ratio;
   }
 
-  DiscreteFunctionP0(const std::shared_ptr<const MeshType>& mesh, const FunctionSymbolId& function_id) : m_mesh(mesh)
-  {
-    using MeshDataType      = MeshData<Dimension>;
-    MeshDataType& mesh_data = MeshDataManager::instance().getMeshData(*mesh);
-
-    m_cell_values =
-      InterpolateItemValue<DataType(TinyVector<Dimension>)>::template interpolate<ItemType::cell>(function_id,
-                                                                                                  mesh_data.xj());
-  }
-
   DiscreteFunctionP0(const std::shared_ptr<const MeshType>& mesh) : m_mesh{mesh}, m_cell_values{mesh->connectivity()} {}
 
   DiscreteFunctionP0(const std::shared_ptr<const MeshType>& mesh, const CellValue<DataType>& cell_value)
diff --git a/src/scheme/DiscreteFunctionP0Vector.hpp b/src/scheme/DiscreteFunctionP0Vector.hpp
index d689258f8..103718b12 100644
--- a/src/scheme/DiscreteFunctionP0Vector.hpp
+++ b/src/scheme/DiscreteFunctionP0Vector.hpp
@@ -3,7 +3,6 @@
 
 #include <scheme/IDiscreteFunction.hpp>
 
-#include <language/utils/InterpolateItemArray.hpp>
 #include <mesh/Connectivity.hpp>
 #include <mesh/ItemArray.hpp>
 #include <mesh/Mesh.hpp>
@@ -195,17 +194,6 @@ class DiscreteFunctionP0Vector : public IDiscreteFunction
     return product;
   }
 
-  DiscreteFunctionP0Vector(const std::shared_ptr<const MeshType>& mesh,
-                           const std::vector<FunctionSymbolId>& function_symbol_id_list)
-    : m_mesh(mesh)
-  {
-    using MeshDataType      = MeshData<Dimension>;
-    MeshDataType& mesh_data = MeshDataManager::instance().getMeshData(*mesh);
-
-    m_cell_arrays = InterpolateItemArray<DataType(
-      TinyVector<Dimension>)>::template interpolate<ItemType::cell>(function_symbol_id_list, mesh_data.xj());
-  }
-
   DiscreteFunctionP0Vector(const std::shared_ptr<const MeshType>& mesh, size_t size)
     : m_mesh{mesh}, m_cell_arrays{mesh->connectivity(), size}
   {}
diff --git a/src/scheme/DiscreteFunctionVectorInterpoler.cpp b/src/scheme/DiscreteFunctionVectorInterpoler.cpp
index 1a5077377..8b2d50b12 100644
--- a/src/scheme/DiscreteFunctionVectorInterpoler.cpp
+++ b/src/scheme/DiscreteFunctionVectorInterpoler.cpp
@@ -1,5 +1,6 @@
 #include <scheme/DiscreteFunctionVectorInterpoler.hpp>
 
+#include <language/utils/InterpolateItemArray.hpp>
 #include <scheme/DiscreteFunctionP0Vector.hpp>
 #include <utils/Exceptions.hpp>
 
@@ -8,7 +9,14 @@ std::shared_ptr<IDiscreteFunction>
 DiscreteFunctionVectorInterpoler::_interpolate() const
 {
   std::shared_ptr mesh = std::dynamic_pointer_cast<const Mesh<Connectivity<Dimension>>>(m_mesh);
-  return std::make_shared<DiscreteFunctionP0Vector<Dimension, DataType>>(mesh, m_function_id_list);
+
+  using MeshDataType      = MeshData<Dimension>;
+  MeshDataType& mesh_data = MeshDataManager::instance().getMeshData(*mesh);
+
+  return std::make_shared<
+    DiscreteFunctionP0Vector<Dimension, DataType>>(mesh, InterpolateItemArray<DataType(TinyVector<Dimension>)>::
+                                                           template interpolate<ItemType::cell>(m_function_id_list,
+                                                                                                mesh_data.xj()));
 }
 
 template <size_t Dimension>
-- 
GitLab