diff --git a/dune/solvers/iterationsteps/projectedblockgsstep.cc b/dune/solvers/iterationsteps/projectedblockgsstep.cc index 51b3694a242ef32d0abc7076b89f450cbb520255..f7a7ccd038245072c590751f2601d1df0356b2f0 100644 --- a/dune/solvers/iterationsteps/projectedblockgsstep.cc +++ b/dune/solvers/iterationsteps/projectedblockgsstep.cc @@ -40,7 +40,7 @@ void ProjectedBlockGSStep<OperatorType, DiscFuncType>::iterate() VectorBlock& x = (*this->x_)[i]; - if ((*hasObstacle_)[i] == false) { + if ((*hasObstacle_)[i].none()) { // No obstacle --> solve linear problem mat[i][i].solve(v, r); @@ -68,10 +68,12 @@ void ProjectedBlockGSStep<OperatorType, DiscFuncType>::iterate() v[k] += sr / mat[i][i][k][k]; // Project - if (v[k] < defectObstacle.lower(k)) - v[k] = defectObstacle.lower(k); - else if (v[k] > defectObstacle.upper(k)) - v[k] = defectObstacle.upper(k); + if (hasObstacle_[i][j]==true) { + if (v[k] < defectObstacle.lower(k)) + v[k] = defectObstacle.lower(k); + else if (v[k] > defectObstacle.upper(k)) + v[k] = defectObstacle.upper(k); + } } diff --git a/dune/solvers/iterationsteps/projectedblockgsstep.hh b/dune/solvers/iterationsteps/projectedblockgsstep.hh index e5b25414f308ae680279af907fd0f454cd74efd3..ec356f38f3abc1e5cbb63c4eb800e75048658a63 100644 --- a/dune/solvers/iterationsteps/projectedblockgsstep.hh +++ b/dune/solvers/iterationsteps/projectedblockgsstep.hh @@ -31,7 +31,7 @@ public: virtual DiscFuncType getSol(); - Dune::BitSetVector<1>* hasObstacle_; + const Dune::BitSetVector<BlockSize>* hasObstacle_; const std::vector<BoxConstraint<field_type,BlockSize> >* obstacles_; };