diff --git a/dune/solvers/iterationsteps/multigridstep.cc b/dune/solvers/iterationsteps/multigridstep.cc index 5e390f31327e4d926e5720329c3af811854c7261..a9bf3f63bf7bdae48435925f0fe831fb2b351d05 100644 --- a/dune/solvers/iterationsteps/multigridstep.cc +++ b/dune/solvers/iterationsteps/multigridstep.cc @@ -58,9 +58,7 @@ void MultigridStep<MatrixType, VectorType, BitVectorType>::preprocess() std::cout << "Warning: Preprocess has already been called without calling iterate afterwards!" << std::endl; preprocessCalled = true; - numLevels_ = mgTransfer_.size() + 1; - - this->level_ = this->numLevels_-1; + this->level_ = numLevels()-1; // ////////////////////////////////////////////////////////// // Check that transfer operators have been supplied @@ -72,17 +70,17 @@ void MultigridStep<MatrixType, VectorType, BitVectorType>::preprocess() // ////////////////////////////////////////////////////////// - // Resize hierarchy containers to current numLevels_ + // Resize hierarchy containers to current number of levels // and set fine level data where needed. // ////////////////////////////////////////////////////////// for (int i=0; i<int(ignoreNodesHierarchy_.size())-1; i++) if (ignoreNodesHierarchy_[i]) delete(ignoreNodesHierarchy_[i]); - xHierarchy_.resize(numLevels_); - rhsHierarchy_.resize(numLevels_); - matrixHierarchy_.resize(numLevels_); - ignoreNodesHierarchy_.resize(numLevels_); + xHierarchy_.resize(numLevels()); + rhsHierarchy_.resize(numLevels()); + matrixHierarchy_.resize(numLevels()); + ignoreNodesHierarchy_.resize(numLevels()); for (int i=0; i<int(matrixHierarchy_.size())-1; i++) { @@ -95,11 +93,11 @@ void MultigridStep<MatrixType, VectorType, BitVectorType>::preprocess() xHierarchy_.back() = Dune::stackobject_to_shared_ptr(*(this->x_)); rhsHierarchy_.back() = *(this->rhs_); - presmoother_.resize(numLevels_); - postsmoother_.resize(numLevels_); + presmoother_.resize(numLevels()); + postsmoother_.resize(numLevels()); typename SmootherCache::iterator end=levelWiseSmoothers_.end(); - for (size_t i=0; i<numLevels_; ++i) + for (size_t i=0; i<numLevels(); ++i) { typename SmootherCache::iterator levelSmoother = levelWiseSmoothers_.find(i); if (levelSmoother != end) @@ -114,7 +112,7 @@ void MultigridStep<MatrixType, VectorType, BitVectorType>::preprocess() // ///////////////////////////////////////////////////// // Assemble the complete hierarchy of matrices // ///////////////////////////////////////////////////// - for (int i=this->numLevels_-2; i>=0; i--) + for (int i=this->numLevels()-2; i>=0; i--) { this->matrixHierarchy_[i] = Dune::shared_ptr<MatrixType>(new MatrixType); this->xHierarchy_[i] = Dune::shared_ptr<VectorType>(new VectorType); @@ -135,8 +133,8 @@ void MultigridStep<MatrixType, VectorType, BitVectorType>::preprocess() // ///////////////////////////////////////////////////// if (this->ignoreNodes_!=0) { - ignoreNodesHierarchy_[this->numLevels_-1] = const_cast<BitVectorType*>(this->ignoreNodes_); - for (int i=this->numLevels_-2; i>=0; --i) + ignoreNodesHierarchy_[numLevels()-1] = const_cast<BitVectorType*>(this->ignoreNodes_); + for (int i=numLevels()-2; i>=0; --i) { ignoreNodesHierarchy_[i] = new BitVectorType(); this->mgTransfer_[i]->restrictToFathers(*ignoreNodesHierarchy_[i+1], *ignoreNodesHierarchy_[i]); @@ -186,7 +184,7 @@ else { template<class MatrixType, class VectorType, class BitVectorType> void MultigridStep<MatrixType, VectorType, BitVectorType>::nestedIteration() { - for (level_ = 0; level_<numLevels_; level_++) + for (level_ = 0; level_<numLevels(); level_++) { iterate(); diff --git a/dune/solvers/iterationsteps/multigridstep.hh b/dune/solvers/iterationsteps/multigridstep.hh index 6605cf1d3e46433ce6c06da9d77db15a2c07f54b..a8b91086afe91ca39e49001aca43bf101a693a1e 100644 --- a/dune/solvers/iterationsteps/multigridstep.hh +++ b/dune/solvers/iterationsteps/multigridstep.hh @@ -26,7 +26,6 @@ presmoother_(0), postsmoother_(0), basesolver_(0), - numLevels_(0), ignoreNodesHierarchy_(0), preprocessCalled(false) {} @@ -48,7 +47,6 @@ rhsHierarchy_(numLevels), preprocessCalled(false) { - numLevels_ = numLevels; level_ = numLevels-1; mu_ = mu; @@ -98,7 +96,6 @@ rhsHierarchy_(numLevels), preprocessCalled(false) { - numLevels_ = numLevels; level_ = numLevels-1; } @@ -136,7 +133,7 @@ VectorType& x, const VectorType& rhs) { - level_ = numLevels_-1; + level_ = numLevels()-1; LinearIterationStep<MatrixType, VectorType, BitVectorType>::setProblem(mat,x,rhs); // Preprocess must be called again, to create the new matrix hierarchy @@ -145,7 +142,7 @@ void setRhs(const VectorType& rhs) { - level_ = numLevels_-1; + level_ = numLevels()-1; this->rhs_ = &rhs; rhsHierarchy_.back() = rhs; } @@ -248,9 +245,6 @@ //! Variable used to store the current level int level_; - //! The total number of levels of the underlying grid - int numLevels_; - //! The linear operators on each level std::vector<Dune::shared_ptr<const MatrixType> > matrixHierarchy_;