From 336d8620791864bdb25bf6c2e873b9b3db1440a7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20He=C3=9F?= <rene.hess@iwr.uni-heidelberg.de>
Date: Fri, 18 Jan 2019 10:53:48 +0100
Subject: [PATCH] [skip ci] Fix bug in invertgeometry

There was a minus sign error...
---
 dune/codegen/sumfact/invertgeometry.hh        |  2 +-
 .../grid_transformed_06.msh                   | 23 +++++++++++++++++++
 ..._dg_gmsh_3d_facedir_facemod_variation.mini |  5 ++--
 ...msh_3d_facedir_facemod_variation_driver.cc |  4 ++--
 ..._dg_3d_facedir_facemod_variation_driver.cc |  8 ++++---
 5 files changed, 33 insertions(+), 9 deletions(-)
 create mode 100644 test/sumfact/poisson/facedir-facemod-variation/grid_transformed_06.msh

diff --git a/dune/codegen/sumfact/invertgeometry.hh b/dune/codegen/sumfact/invertgeometry.hh
index 2a0b364c..5ca89b2f 100644
--- a/dune/codegen/sumfact/invertgeometry.hh
+++ b/dune/codegen/sumfact/invertgeometry.hh
@@ -63,7 +63,7 @@ inline T invert_and_return_determinant(const T a00, const T a10, const T a20,
   inverse[7] *= t17;
 
   inverse[2] = a10 * a21;
-  inverse[2] += a11 * a20;
+  inverse[2] -= a11 * a20;
   inverse[2] *= t17;
 
   inverse[5] = t12;
diff --git a/test/sumfact/poisson/facedir-facemod-variation/grid_transformed_06.msh b/test/sumfact/poisson/facedir-facemod-variation/grid_transformed_06.msh
new file mode 100644
index 00000000..2628dafb
--- /dev/null
+++ b/test/sumfact/poisson/facedir-facemod-variation/grid_transformed_06.msh
@@ -0,0 +1,23 @@
+$MeshFormat
+2.0 0 8
+$EndMeshFormat
+$Nodes
+12
+1 0.5 0 0
+2 1 1 1
+3 1.5 2 2
+4 0 1 0
+5 0.5 2 1
+6 1 3 2
+7 0 -1 1
+8 0.5 0 2
+9 1 1 3
+10 -0.5 0 1
+11 0 1 2
+12 0.5 2 3
+$EndNodes
+$Elements
+2
+1 5 0 1 2 5 4 7 8 11 10
+2 5 0 2 3 6 5 8 9 12 11
+$EndElements
diff --git a/test/sumfact/poisson/facedir-facemod-variation/poisson_dg_gmsh_3d_facedir_facemod_variation.mini b/test/sumfact/poisson/facedir-facemod-variation/poisson_dg_gmsh_3d_facedir_facemod_variation.mini
index a68781aa..3c854bef 100644
--- a/test/sumfact/poisson/facedir-facemod-variation/poisson_dg_gmsh_3d_facedir_facemod_variation.mini
+++ b/test/sumfact/poisson/facedir-facemod-variation/poisson_dg_gmsh_3d_facedir_facemod_variation.mini
@@ -17,7 +17,7 @@ deg_suffix = deg{formcompiler.ufl_variants.degree}
 # cells = 2 1 1
 # extension = 2. 1. 1.
 ## Gmsh
-gmshFile = grid_06.msh
+gmshFile = grid_transformed_06.msh
 ## Unstructured
 # lowerleft = 0.0 0.0 0.0
 # upperright = 2.0 1.0 1.0
@@ -33,8 +33,7 @@ grid_unstructured = 1
 
 [formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
-sumfact = 1
-sumfact_regular_jacobians = 1
+sumfact = 0
 vectorization_quadloop = 1, 0 | expand quad
 vectorization_strategy = model, none | expand grad
 
diff --git a/test/sumfact/poisson/facedir-facemod-variation/poisson_dg_gmsh_3d_facedir_facemod_variation_driver.cc b/test/sumfact/poisson/facedir-facemod-variation/poisson_dg_gmsh_3d_facedir_facemod_variation_driver.cc
index 136dbd20..fc0d97de 100644
--- a/test/sumfact/poisson/facedir-facemod-variation/poisson_dg_gmsh_3d_facedir_facemod_variation_driver.cc
+++ b/test/sumfact/poisson/facedir-facemod-variation/poisson_dg_gmsh_3d_facedir_facemod_variation_driver.cc
@@ -145,7 +145,7 @@ int main(int argc, char** argv){
       V_R x_s(x_r);
       // Interpolate input
       auto interpolate_lambda = [] (const auto& x){
-        return std::exp(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]);
+        return std::exp((x[0]*x[0]+x[1]*x[1]+x[2]*x[2])/10);
       };
       auto interpolate = Dune::PDELab::makeGridFunctionFromCallable(gv, interpolate_lambda);
       Dune::PDELab::interpolate(interpolate,dg1_gfs_,x_s);
@@ -154,7 +154,7 @@ int main(int argc, char** argv){
       V_R x_n(x_r);
       // Interpolate input
       auto interpolate_lambda_n = [] (const auto& x){
-        return std::exp(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]+x[0]/3);
+        return std::exp((x[0]*x[0]+x[1]*x[1]+x[2]*x[2]+x[0]/3)/10);
       };
       auto interpolate_n = Dune::PDELab::makeGridFunctionFromCallable(gv, interpolate_lambda_n);
       Dune::PDELab::interpolate(interpolate_n,dg1_gfs_,x_n);
diff --git a/test/sumfact/poisson/facedir-facemod-variation/sumfact_poisson_dg_3d_facedir_facemod_variation_driver.cc b/test/sumfact/poisson/facedir-facemod-variation/sumfact_poisson_dg_3d_facedir_facemod_variation_driver.cc
index 319a9ef3..17766808 100644
--- a/test/sumfact/poisson/facedir-facemod-variation/sumfact_poisson_dg_3d_facedir_facemod_variation_driver.cc
+++ b/test/sumfact/poisson/facedir-facemod-variation/sumfact_poisson_dg_3d_facedir_facemod_variation_driver.cc
@@ -221,7 +221,7 @@ int main(int argc, char** argv){
       V_R x_s(x_r);
       // Interpolate input
       auto interpolate_lambda = [] (const auto& x){
-        return std::exp(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]);
+        return std::exp((x[0]*x[0]+x[1]*x[1]+x[2]*x[2])/10);
       };
       auto interpolate = Dune::PDELab::makeGridFunctionFromCallable(gv, interpolate_lambda);
       Dune::PDELab::interpolate(interpolate,dg1_gfs_,x_s);
@@ -229,7 +229,7 @@ int main(int argc, char** argv){
       V_R x_n(x_r);
       // Interpolate input
       auto interpolate_lambda_n = [] (const auto& x){
-        return std::exp(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]+x[0]/3);
+        return std::exp((x[0]*x[0]+x[1]*x[1]+x[2]*x[2]+x[0]/3)/10);
       };
       auto interpolate_n = Dune::PDELab::makeGridFunctionFromCallable(gv, interpolate_lambda_n);
       Dune::PDELab::interpolate(interpolate_n,dg1_gfs_,x_n);
@@ -247,7 +247,9 @@ int main(int argc, char** argv){
       // std::vector<RangeType> solution {0, -16.572386758650715, 0, -22.607641128117848, 0, -22.607641128117848, 0, -30.840786232011556, 16.572386758650715, 0, 22.607641128117848, 0, 22.607641128117848, 0, 30.840786232011556, 0};
 
       // Solution for transformed gmsh file
-      std::vector<RangeType> solution {-1.5766672833937405, -50059.975281639621, -2.4083888194744993, -94691.716144054299, -0.78833364169687059, -41141.391638713889, -1.2041944097372501, -75362.893655600026, 50061.609799448859, 1.5766672833937405, 94680.783162005027, 2.4083888194744993, 41147.727233110381, 0.78833364169687059, 75365.856525443567, 1.2041944097372501};
+      // std::vector<RangeType> solution {-1.5766672833937405, -50059.975281639621, -2.4083888194744993, -94691.716144054299, -0.78833364169687059, -41141.391638713889, -1.2041944097372501, -75362.893655600026, 50061.609799448859, 1.5766672833937405, 94680.783162005027, 2.4083888194744993, 41147.727233110381, 0.78833364169687059, 75365.856525443567, 1.2041944097372501};
+      // std::vector<RangeType> solution {-0.0037474264040753213, -0.24512369823711844, -0.0032054511665800434, -0.29239154898583231, -0.0018737132020376626, -0.25941816489230152, -0.0016027255832900215, -0.29607683995777412, 0.24565020672181651, 0.0037474264040753213, 0.2756416595029384, 0.0032054511665800434, 0.27279741154891424, 0.0018737132020376626, 0.29892097429935732, 0.0016027255832900215};
+      std::vector<RangeType> solution {-0.003747426404075297, -0.21864656102913654, -0.0032054511665800555, -0.28437017759171157, -0.0018737132020376381, -0.2429341647618537, -0.0016027255832900197, -0.29660333834120023, 0.22916620659136877, 0.0037474264040752831, 0.27616815788636451, 0.0032054511665800512, 0.24632027434093215, 0.0018737132020376344, 0.2908996029052367, 0.0016027255832900187};
       std::cout.precision(17);
       std::vector<RangeType> residual(16);
       for (std::size_t i=0; i<16; ++i){
-- 
GitLab