From 048c9123d5b9cddcda30d169288b6d968730b374 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Tue, 19 Nov 2024 15:27:38 +0100
Subject: [PATCH] Allow TinyVector and TinyMatrix in DiscreteFunctionDPkVector

---
 src/scheme/DiscreteFunctionDPkVariant.hpp | 30 +++++++++++++++++++++--
 src/scheme/PolynomialReconstruction.cpp   | 22 ++++++++++++++++-
 2 files changed, 49 insertions(+), 3 deletions(-)

diff --git a/src/scheme/DiscreteFunctionDPkVariant.hpp b/src/scheme/DiscreteFunctionDPkVariant.hpp
index 0d683c178..2942f141f 100644
--- a/src/scheme/DiscreteFunctionDPkVariant.hpp
+++ b/src/scheme/DiscreteFunctionDPkVariant.hpp
@@ -35,8 +35,28 @@ class DiscreteFunctionDPkVariant
                                DiscreteFunctionDPk<3, const TinyMatrix<3>>,
 
                                DiscreteFunctionDPkVector<1, const double>,
+                               DiscreteFunctionDPkVector<1, const TinyVector<1>>,
+                               DiscreteFunctionDPkVector<1, const TinyVector<2>>,
+                               DiscreteFunctionDPkVector<1, const TinyVector<3>>,
+                               DiscreteFunctionDPkVector<1, const TinyMatrix<1>>,
+                               DiscreteFunctionDPkVector<1, const TinyMatrix<2>>,
+                               DiscreteFunctionDPkVector<1, const TinyMatrix<3>>,
+
                                DiscreteFunctionDPkVector<2, const double>,
-                               DiscreteFunctionDPkVector<3, const double>>;
+                               DiscreteFunctionDPkVector<2, const TinyVector<1>>,
+                               DiscreteFunctionDPkVector<2, const TinyVector<2>>,
+                               DiscreteFunctionDPkVector<2, const TinyVector<3>>,
+                               DiscreteFunctionDPkVector<2, const TinyMatrix<1>>,
+                               DiscreteFunctionDPkVector<2, const TinyMatrix<2>>,
+                               DiscreteFunctionDPkVector<2, const TinyMatrix<3>>,
+
+                               DiscreteFunctionDPkVector<3, const double>,
+                               DiscreteFunctionDPkVector<3, const TinyVector<1>>,
+                               DiscreteFunctionDPkVector<3, const TinyVector<2>>,
+                               DiscreteFunctionDPkVector<3, const TinyVector<3>>,
+                               DiscreteFunctionDPkVector<3, const TinyMatrix<1>>,
+                               DiscreteFunctionDPkVector<3, const TinyMatrix<2>>,
+                               DiscreteFunctionDPkVector<3, const TinyMatrix<3>>>;
 
  private:
   Variant m_discrete_function_dpk;
@@ -91,7 +111,13 @@ class DiscreteFunctionDPkVariant
   DiscreteFunctionDPkVariant(const DiscreteFunctionDPkVector<Dimension, DataType>& discrete_function_dpk)
     : m_discrete_function_dpk{DiscreteFunctionDPkVector<Dimension, const DataType>{discrete_function_dpk}}
   {
-    static_assert(std::is_same_v<std::remove_const_t<DataType>, double>,
+    static_assert(std::is_same_v<std::remove_const_t<DataType>, double> or                       //
+                    std::is_same_v<std::remove_const_t<DataType>, TinyVector<1, double>> or      //
+                    std::is_same_v<std::remove_const_t<DataType>, TinyVector<2, double>> or      //
+                    std::is_same_v<std::remove_const_t<DataType>, TinyVector<3, double>> or      //
+                    std::is_same_v<std::remove_const_t<DataType>, TinyMatrix<1, 1, double>> or   //
+                    std::is_same_v<std::remove_const_t<DataType>, TinyMatrix<2, 2, double>> or   //
+                    std::is_same_v<std::remove_const_t<DataType>, TinyMatrix<3, 3, double>>,
                   "DiscreteFunctionDPkVector with this DataType is not allowed in variant");
   }
 
diff --git a/src/scheme/PolynomialReconstruction.cpp b/src/scheme/PolynomialReconstruction.cpp
index 7d2c58ac5..d23644a72 100644
--- a/src/scheme/PolynomialReconstruction.cpp
+++ b/src/scheme/PolynomialReconstruction.cpp
@@ -69,8 +69,28 @@ class PolynomialReconstruction::MutableDiscreteFunctionDPkVariant
                                DiscreteFunctionDPk<3, TinyMatrix<3>>,
 
                                DiscreteFunctionDPkVector<1, double>,
+                               DiscreteFunctionDPkVector<1, TinyVector<1>>,
+                               DiscreteFunctionDPkVector<1, TinyVector<2>>,
+                               DiscreteFunctionDPkVector<1, TinyVector<3>>,
+                               DiscreteFunctionDPkVector<1, TinyMatrix<1>>,
+                               DiscreteFunctionDPkVector<1, TinyMatrix<2>>,
+                               DiscreteFunctionDPkVector<1, TinyMatrix<3>>,
+
                                DiscreteFunctionDPkVector<2, double>,
-                               DiscreteFunctionDPkVector<3, double>>;
+                               DiscreteFunctionDPkVector<2, TinyVector<1>>,
+                               DiscreteFunctionDPkVector<2, TinyVector<2>>,
+                               DiscreteFunctionDPkVector<2, TinyVector<3>>,
+                               DiscreteFunctionDPkVector<2, TinyMatrix<1>>,
+                               DiscreteFunctionDPkVector<2, TinyMatrix<2>>,
+                               DiscreteFunctionDPkVector<2, TinyMatrix<3>>,
+
+                               DiscreteFunctionDPkVector<3, double>,
+                               DiscreteFunctionDPkVector<3, TinyVector<1>>,
+                               DiscreteFunctionDPkVector<3, TinyVector<2>>,
+                               DiscreteFunctionDPkVector<3, TinyVector<3>>,
+                               DiscreteFunctionDPkVector<3, TinyMatrix<1>>,
+                               DiscreteFunctionDPkVector<3, TinyMatrix<2>>,
+                               DiscreteFunctionDPkVector<3, TinyMatrix<3>>>;
 
  private:
   Variant m_mutable_discrete_function_dpk;
-- 
GitLab