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