From 036d7618fcb53bc636377b429a935823a9f546d4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?M=C3=BCller=2C=20Felix?=
 <felix.mueller2@mailbox.tu-dresden.de>
Date: Sun, 24 Feb 2019 21:20:15 +0100
Subject: [PATCH] Move calls to basis.update inbetween adapt and postAdapt
 calls

---
 src/amdis/GridTransferManager.hpp |  6 ++++--
 src/amdis/ProblemStat.inc.hpp     | 10 ++++------
 test/DOFVectorTest.cpp            |  2 +-
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/amdis/GridTransferManager.hpp b/src/amdis/GridTransferManager.hpp
index 55c95550..554d9e77 100644
--- a/src/amdis/GridTransferManager.hpp
+++ b/src/amdis/GridTransferManager.hpp
@@ -36,12 +36,14 @@ namespace AMDiS
      * Takes a grid as argument. Marking of the grid needs to be performed prior to calling this.
      * Returns true if the grid changed during adaptation.
      **/
-    template <class Grid>
-    static bool adapt(Grid& grid)
+    template <class Grid, class ...Bases>
+    static bool adapt(Grid& grid, Bases&... bases)
     {
       auto gridTransfer = GridTransferManager::gridTransfer(grid);
       bool adapted = gridTransfer.preAdapt();
       adapted |= gridTransfer.adapt();
+      // call basis.update(basis.gridView()) on all bases
+      (void)std::initializer_list<int>({0, (bases.update(bases.gridView()),0)...});
       gridTransfer.postAdapt();
       return adapted;
     }
diff --git a/src/amdis/ProblemStat.inc.hpp b/src/amdis/ProblemStat.inc.hpp
index b53c4102..50058ccf 100644
--- a/src/amdis/ProblemStat.inc.hpp
+++ b/src/amdis/ProblemStat.inc.hpp
@@ -365,8 +365,7 @@ globalCoarsen(int n)
     for (const auto& element : elements(grid_->leafGridView()))
       grid_->mark(-1, element);
 
-    adapted |= GridTransferManager::adapt(*grid_);
-    globalBasis_->update(gridView());
+    adapted |= GridTransferManager::adapt(*grid_, *globalBasis_);
   }
 
   msg("globalCoarsen needed {} seconds", t.elapsed());
@@ -386,6 +385,7 @@ globalRefine(int refCount)
   bool adapted = false;
   Dune::Hybrid::ifElse(Dune::Std::is_detected<HasGlobalRefineADHI, Grid>{},
   /*then*/ [&](auto id) {
+    // TODO(FM): Add a way to pass a GridTransfer as ADH with *globalBasis_ argument
     id(grid_)->globalRefine(refCount, GridTransferManager::gridTransfer(*grid_));
     globalBasis_->update(this->gridView());
   },
@@ -395,8 +395,7 @@ globalRefine(int refCount)
       for (const auto& element : elements(grid_->leafGridView()))
         grid_->mark(1, element);
 
-      adapted |= GridTransferManager::adapt(*id(grid_));
-      globalBasis_->update(this->gridView());
+      adapted |= GridTransferManager::adapt(*id(grid_), *id(globalBasis_));
     }
   });
 
@@ -411,8 +410,7 @@ adaptGrid(AdaptInfo& adaptInfo)
 {
   Dune::Timer t;
 
-  bool adapted = GridTransferManager::adapt(*grid_);
-  globalBasis_->update(gridView());
+  bool adapted = GridTransferManager::adapt(*grid_, *globalBasis_);
 
   msg("adaptGrid needed {} seconds", t.elapsed());
   return adapted ? MESH_ADAPTED : Flag(0);
diff --git a/test/DOFVectorTest.cpp b/test/DOFVectorTest.cpp
index 288981fc..2f883436 100644
--- a/test/DOFVectorTest.cpp
+++ b/test/DOFVectorTest.cpp
@@ -74,7 +74,7 @@ int main(int argc, char** argv)
     test_dofvector(basis, vec1);
     for (auto const& e : elements(gridView))
       grid.mark(1, e);
-    GridTransferManager::adapt(grid);
+    GridTransferManager::adapt(grid, basis);
     AMDIS_TEST_EQ(vec1.size(), basis.dimension());
   }
 
-- 
GitLab