From 01a77a08cba3eb94d394884289ec750e33aa460c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Thu, 11 Feb 2021 16:19:00 +0100
Subject: [PATCH] Allow IDiscreteFunction to return its underlying data type

This allows for instance to retrieve completely the kind of P0
function that is in use. For instance a P0 function build of R^d
elements.
---
 src/scheme/DiscreteFunctionP0.hpp | 7 +++++++
 src/scheme/IDiscreteFunction.hpp  | 6 ++++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/scheme/DiscreteFunctionP0.hpp b/src/scheme/DiscreteFunctionP0.hpp
index 4fb0fcc98..bf97079b7 100644
--- a/src/scheme/DiscreteFunctionP0.hpp
+++ b/src/scheme/DiscreteFunctionP0.hpp
@@ -22,6 +22,12 @@ class DiscreteFunctionP0 : public IDiscreteFunction
   DiscreteFunctionDescriptorP0 m_discrete_function_descriptor;
 
  public:
+  ASTNodeDataType
+  dataType() const final
+  {
+    return ast_node_data_type_from<DataType>;
+  }
+
   CellValue<DataType>
   cellValues() const
   {
@@ -51,6 +57,7 @@ class DiscreteFunctionP0 : public IDiscreteFunction
   {
     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());
diff --git a/src/scheme/IDiscreteFunction.hpp b/src/scheme/IDiscreteFunction.hpp
index 7a7deb087..a8bf77f43 100644
--- a/src/scheme/IDiscreteFunction.hpp
+++ b/src/scheme/IDiscreteFunction.hpp
@@ -1,16 +1,18 @@
 #ifndef I_DISCRETE_FUNCTION_HPP
 #define I_DISCRETE_FUNCTION_HPP
 
-#include <memory>
-
 class IMesh;
 class IDiscreteFunctionDescriptor;
 
+#include <language/utils/ASTNodeDataTypeTraits.hpp>
+#include <memory>
+
 class IDiscreteFunction
 {
  public:
   virtual std::shared_ptr<const IMesh> mesh() const             = 0;
   virtual const IDiscreteFunctionDescriptor& descriptor() const = 0;
+  virtual ASTNodeDataType dataType() const                      = 0;
 
   IDiscreteFunction() = default;
 
-- 
GitLab