diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc index 0d65e6d5f4a5547f1334934c8ac8d1865300fc6a..22b8353202a10953251a02f55663d3f106f49178 100644 --- a/dune/gfe/riemanniantrsolver.cc +++ b/dune/gfe/riemanniantrsolver.cc @@ -106,7 +106,6 @@ setup(const GridType& grid, mmgStep->basesolver_ = baseSolver; mmgStep->setSmoother(presmoother, postsmoother); mmgStep->obstacleRestrictor_= new MandelObstacleRestrictor<CorrectionType>(); - mmgStep->hasObstacle_ = &hasObstacle_; mmgStep->verbosity_ = Solver::QUIET; // ////////////////////////////////////////////////////////////////////////////////////// @@ -226,13 +225,10 @@ setup(const GridType& grid, if (rank==0) { - hasObstacle_.resize(numLevels); - hasObstacle_.back().resize(guIndex_->nGlobalEntity(), true); - - // If there is more than one level use the transfer operators to determine the correct coarse level system sizes - for (int i=0; i<hasObstacle_.size()-1; i++) - hasObstacle_[i].resize(dynamic_cast<TruncatedCompressedMGTransfer<CorrectionType>* >(mmgStep->mgTransfer_[i])->getMatrix().M(),true); + hasObstacle_.resize(guIndex_->nGlobalEntity(), true); + mmgStep->hasObstacle_ = &hasObstacle_; } + } @@ -336,7 +332,7 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() mgStep->setProblem(stiffnessMatrix, corr_global, rhs_global); trustRegionObstacles.back() = trustRegion.obstacles(); - mgStep->obstacles_ = &trustRegionObstacles; + mgStep->obstacles_ = &trustRegionObstacles.back(); innerSolver_->preprocess(); diff --git a/dune/gfe/riemanniantrsolver.hh b/dune/gfe/riemanniantrsolver.hh index b87c29c77e26f4c26c15030959fbd8f24d76b7c2..7454702c7766514f1aa624156254563bee4ffeb9 100644 --- a/dune/gfe/riemanniantrsolver.hh +++ b/dune/gfe/riemanniantrsolver.hh @@ -127,9 +127,8 @@ protected: /** \brief The solver for the quadratic inner problems */ std::shared_ptr<Solver> innerSolver_; - /** \brief Dummy fields containing 'true' everywhere. The multigrid step - expects them :-( */ - std::vector<Dune::BitSetVector<1> > hasObstacle_; + /** \brief Contains 'true' everywhere -- the trust-region is bounded */ + Dune::BitSetVector<1> hasObstacle_; /** \brief The Dirichlet nodes */ const Dune::BitSetVector<blocksize>* ignoreNodes_;