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