From ee1a9a158d84cc13d91b1e0f31b6b61945472df5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Thu, 2 Dec 2021 00:03:29 +0100
Subject: [PATCH] Fix Quadrature formula for diamonds

now decompose into 2 pyramids or 2 tetrahedra in the case of "direct" formulae
---
 src/language/utils/IntegrateOnCells.hpp | 14 +++++---------
 src/scheme/CellIntegrator.hpp           | 14 +++++---------
 2 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/src/language/utils/IntegrateOnCells.hpp b/src/language/utils/IntegrateOnCells.hpp
index 0290b3692..8b6008d73 100644
--- a/src/language/utils/IntegrateOnCells.hpp
+++ b/src/language/utils/IntegrateOnCells.hpp
@@ -488,12 +488,10 @@ class IntegrateOnCells<OutputType(InputType)> : public PugsFunctionAdapter<Outpu
               }
             }
           } else if (cell_to_node.size() == 6) {
-            const auto qf = QuadratureManager::instance().getCubeFormula(quadrature_descriptor);
+            const auto qf = QuadratureManager::instance().getPyramidFormula(quadrature_descriptor);
             {   // top pyramid
-              const CubeTransformation T0(xr[cell_to_node[1]], xr[cell_to_node[2]], xr[cell_to_node[3]],
-                                          xr[cell_to_node[4]],   //
-                                          xr[cell_to_node[5]], xr[cell_to_node[5]], xr[cell_to_node[5]],
-                                          xr[cell_to_node[5]]);
+              const PyramidTransformation T0(xr[cell_to_node[1]], xr[cell_to_node[2]], xr[cell_to_node[3]],
+                                             xr[cell_to_node[4]], xr[cell_to_node[5]]);
 
               for (size_t i_point = 0; i_point < qf.numberOfPoints(); ++i_point) {
                 const auto xi = qf.point(i_point);
@@ -503,10 +501,8 @@ class IntegrateOnCells<OutputType(InputType)> : public PugsFunctionAdapter<Outpu
               }
             }
             {   // bottom pyramid
-              const CubeTransformation T1(xr[cell_to_node[4]], xr[cell_to_node[3]], xr[cell_to_node[2]],
-                                          xr[cell_to_node[1]],   //
-                                          xr[cell_to_node[0]], xr[cell_to_node[0]], xr[cell_to_node[0]],
-                                          xr[cell_to_node[0]]);
+              const PyramidTransformation T1(xr[cell_to_node[4]], xr[cell_to_node[3]], xr[cell_to_node[2]],
+                                             xr[cell_to_node[1]], xr[cell_to_node[0]]);
 
               for (size_t i_point = 0; i_point < qf.numberOfPoints(); ++i_point) {
                 const auto xi = qf.point(i_point);
diff --git a/src/scheme/CellIntegrator.hpp b/src/scheme/CellIntegrator.hpp
index 51758560a..e3a73a89c 100644
--- a/src/scheme/CellIntegrator.hpp
+++ b/src/scheme/CellIntegrator.hpp
@@ -425,12 +425,10 @@ class CellIntegrator
               }
             }
           } else if (cell_to_node.size() == 6) {
-            const auto qf = QuadratureManager::instance().getCubeFormula(quadrature_descriptor);
+            const auto qf = QuadratureManager::instance().getPyramidFormula(quadrature_descriptor);
             {   // top pyramid
-              const CubeTransformation T0(xr[cell_to_node[1]], xr[cell_to_node[2]], xr[cell_to_node[3]],
-                                          xr[cell_to_node[4]],   //
-                                          xr[cell_to_node[5]], xr[cell_to_node[5]], xr[cell_to_node[5]],
-                                          xr[cell_to_node[5]]);
+              const PyramidTransformation T0(xr[cell_to_node[1]], xr[cell_to_node[2]], xr[cell_to_node[3]],
+                                             xr[cell_to_node[4]], xr[cell_to_node[5]]);
 
               for (size_t i_point = 0; i_point < qf.numberOfPoints(); ++i_point) {
                 const auto xi = qf.point(i_point);
@@ -438,10 +436,8 @@ class CellIntegrator
               }
             }
             {   // bottom pyramid
-              const CubeTransformation T1(xr[cell_to_node[4]], xr[cell_to_node[3]], xr[cell_to_node[2]],
-                                          xr[cell_to_node[1]],   //
-                                          xr[cell_to_node[0]], xr[cell_to_node[0]], xr[cell_to_node[0]],
-                                          xr[cell_to_node[0]]);
+              const PyramidTransformation T1(xr[cell_to_node[4]], xr[cell_to_node[3]], xr[cell_to_node[2]],
+                                             xr[cell_to_node[1]], xr[cell_to_node[0]]);
 
               for (size_t i_point = 0; i_point < qf.numberOfPoints(); ++i_point) {
                 const auto xi = qf.point(i_point);
-- 
GitLab