From f4a4195bbcc415413822fa61f26d6b65893f5670 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Carsten=20Gr=C3=A4ser?= <graeser@dune-project.org>
Date: Wed, 4 Jan 2023 09:41:24 +0100
Subject: [PATCH] [test]Reenable test of SubgridL2FunctionalAssembler

* Avoid nasty double assignment `a=b=0`
* Provide `QuadratureRuleKey` with appropriate order to L2-assemblers
* Provide appropriate order to H1-assemblers
* Reenable test of `SubgridL2FunctionalAssembler`
* Reenable test of `SubgridH1FunctionalAssembler` for `UGGrid`
* Avoid short circuit evaluation of test results. This implicitly
  disabled checks if a previous one was failing.

The checks for `ALUGrid<3,3, Dune::simplex, Dune::nonconforming>` are still
disabled, because the failure mentioned in
https://git.imp.fu-berlin.de/agnumpde/dune-fufem/-/issues/14
persists.
---
 .../test/subgridxyfunctionalassemblertest.cc  | 31 ++++++++++---------
 1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/dune/fufem/test/subgridxyfunctionalassemblertest.cc b/dune/fufem/test/subgridxyfunctionalassemblertest.cc
index 6c3775ef..246457cd 100644
--- a/dune/fufem/test/subgridxyfunctionalassemblertest.cc
+++ b/dune/fufem/test/subgridxyfunctionalassemblertest.cc
@@ -226,8 +226,10 @@ struct SubgridL2FunctionalAssemblerTestSuite
         FunctionalAssembler<Basis> assembler(basis);
         FunctionalAssembler<HostBasis> hostassembler(hostbasis);
 
-        SubgridL2FunctionalAssembler<GridType, typename Basis::LocalFiniteElement, Dune::FieldVector<double,block_size> > subgridl2functionalassembler(function,grid);
-        L2FunctionalAssembler<HostGridType, typename HostBasis::LocalFiniteElement, Dune::FieldVector<double,block_size> > l2functionalassembler(function);
+        auto quadKey = QuadratureRuleKey(HostGridType::dimension,2);
+
+        SubgridL2FunctionalAssembler<GridType, typename Basis::LocalFiniteElement, Dune::FieldVector<double,block_size> > subgridl2functionalassembler(function,grid, quadKey);
+        L2FunctionalAssembler<HostGridType, typename HostBasis::LocalFiniteElement, Dune::FieldVector<double,block_size> > l2functionalassembler(function, quadKey);
 
         /* assemble l2 functionals */
         assembler.assemble(subgridl2functionalassembler, g);
@@ -332,15 +334,16 @@ struct SubgridH1FunctionalAssemblerTestSuite
                                                                  gsubcoeffs(basis.size()),
                                                                  ghost(hostbasis.size());
 
-        g = gsubcoeffs = 0.0;
+        g = 0.0;
+        gsubcoeffs = 0.0;
         ghost = 0.0;
 
         /* create assemblers */
         FunctionalAssembler<Basis> assembler(basis);
         FunctionalAssembler<HostBasis> hostassembler(hostbasis);
 
-        SubgridH1FunctionalAssembler<GridType, typename Basis::LocalFiniteElement, Dune::FieldVector<double,block_size> > subgridh1functionalassembler(function,grid);
-        H1FunctionalAssembler<HostGridType, typename HostBasis::LocalFiniteElement, Dune::FieldVector<double,block_size> > h1functionalassembler(function);
+        SubgridH1FunctionalAssembler<GridType, typename Basis::LocalFiniteElement, Dune::FieldVector<double,block_size> > subgridh1functionalassembler(function,grid,4);
+        H1FunctionalAssembler<HostGridType, typename HostBasis::LocalFiniteElement, Dune::FieldVector<double,block_size> > h1functionalassembler(function,4);
 
         /* assemble h1 functionals */
         assembler.assemble(subgridh1functionalassembler, g);
@@ -372,28 +375,28 @@ int main(int argc, char** argv)
 
     std::cout << "This is the SubgridXYFunctionalAssemblerTest" << std::endl;
 
-//    SubgridL2FunctionalAssemblerTestSuite l2tests;
+    SubgridL2FunctionalAssemblerTestSuite l2tests;
     SubgridH1FunctionalAssemblerTestSuite h1tests;
 
     bool passed = true;
 
     std::cout << "Testing SubgridL2FunctionalAssembler" << std::endl;
 #if HAVE_DUNE_UGGRID
-//    passed = passed and checkWithAdaptiveGrid<Dune::UGGrid<2> >(l2tests, 3, 3);
-//    passed = passed and checkWithAdaptiveGrid<Dune::UGGrid<3> >(l2tests, 1, 2);
+    passed &= checkWithAdaptiveGrid<Dune::UGGrid<2> >(l2tests, 3, 3);
+    passed &= checkWithAdaptiveGrid<Dune::UGGrid<3> >(l2tests, 1, 2);
 #endif
 #if HAVE_DUNE_ALUGRID
-//    passed = passed and checkWithAdaptiveGrid<Dune::ALUGrid<2,2, Dune::simplex, Dune::nonconforming> >(l2tests, 3, 3);
-//    passed = passed and checkWithAdaptiveGrid<Dune::ALUGrid<3,3, Dune::simplex, Dune::nonconforming> >(l2tests, 1, 2);
+    passed &= checkWithAdaptiveGrid<Dune::ALUGrid<2,2, Dune::simplex, Dune::nonconforming> >(l2tests, 3, 3);
+//    passed &= checkWithAdaptiveGrid<Dune::ALUGrid<3,3, Dune::simplex, Dune::nonconforming> >(l2tests, 1, 2);
 #endif
     std::cout << "Testing SubgridH1FunctionalAssembler" << std::endl;
 #if HAVE_DUNE_UGGRID
-    passed = passed and checkWithAdaptiveGrid<Dune::UGGrid<2> >(h1tests, 3, 3);
-    passed = passed and checkWithAdaptiveGrid<Dune::UGGrid<3> >(h1tests, 1, 2);
+    passed &= checkWithAdaptiveGrid<Dune::UGGrid<2> >(h1tests, 3, 3);
+    passed &= checkWithAdaptiveGrid<Dune::UGGrid<3> >(h1tests, 1, 2);
 #endif
 #if HAVE_DUNE_ALUGRID
-    passed = passed and checkWithAdaptiveGrid<Dune::ALUGrid<2,2, Dune::simplex, Dune::nonconforming> >(h1tests, 3, 3);
-//    passed = passed and checkWithAdaptiveGrid<Dune::ALUGrid<3,3, Dune::simplex, Dune::nonconforming> >(h1tests, 1, 2);
+    passed &= checkWithAdaptiveGrid<Dune::ALUGrid<2,2, Dune::simplex, Dune::nonconforming> >(h1tests, 3, 3);
+//    passed &= checkWithAdaptiveGrid<Dune::ALUGrid<3,3, Dune::simplex, Dune::nonconforming> >(h1tests, 1, 2);
 #endif
 
     return passed ? 0 : 1;
-- 
GitLab