From fccf41b91db320463fbf7e7694b1cda610ebc4bd Mon Sep 17 00:00:00 2001 From: Oliver Sander <oliver.sander@tu-dresden.de> Date: Fri, 11 Sep 2020 10:25:11 +0200 Subject: [PATCH] Fixes towards allowing stateful bases in TrustRegionSolver Currently the TrustRegionSolver class default-constructs a few bases objects of its own. That only works if the actual bases used for the simulation does not contain state, because the state doesn't make it into the new bases. Fix this by avoid the default constructor. There are remaining issues for the HAVE_DUNE_PARMG case, which I indent to ignore for now. --- dune/elasticity/common/trustregionsolver.cc | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/dune/elasticity/common/trustregionsolver.cc b/dune/elasticity/common/trustregionsolver.cc index 0f88e6d..f68e64c 100644 --- a/dune/elasticity/common/trustregionsolver.cc +++ b/dune/elasticity/common/trustregionsolver.cc @@ -90,7 +90,7 @@ setup(const typename BasisType::GridView::Grid& grid, std::conditional_t< // do we have a dune-functions basis? Dune::models<Dune::Functions::Concept::GlobalBasis<GridView>, BasisType>(), BasisType, - DuneFunctionsBasis<BasisType> > basis(grid.leafGridView()); + DuneFunctionsBasis<BasisType> > basis(assembler_->basis_); // //////////////////////////////// // Create a multigrid solver // //////////////////////////////// @@ -361,14 +361,11 @@ void TrustRegionSolver<BasisType,VectorType>::solve() mgStep = dynamic_cast<MonotoneMGStep<MatrixType,CorrectionType>*>(&iterationStep); } - - BasisType basis(grid_->leafGridView()); #else - BasisType basis(grid_->levelGridView(grid_->maxLevel())); BasisType coarseBasis(grid_->levelGridView(0)); std::vector<BoxConstraint<typename VectorType::field_type, blocksize>> coarseTrustRegionObstacles(coarseBasis.size()); #endif - MaxNormTrustRegion<blocksize> trustRegion(basis.size(), initialTrustRegionRadius_); + MaxNormTrustRegion<blocksize> trustRegion(assembler_->basis_.size(), initialTrustRegionRadius_); std::vector<BoxConstraint<field_type,blocksize> > trustRegionObstacles; -- GitLab