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