diff --git a/dune/gfe/mixedriemanniantrsolver.cc b/dune/gfe/mixedriemanniantrsolver.cc index 3a0931c37194a474f1f137a202973a641a99fa79..4673e4bd53f4ef8112ec211ed476a2d348687480 100644 --- a/dune/gfe/mixedriemanniantrsolver.cc +++ b/dune/gfe/mixedriemanniantrsolver.cc @@ -414,8 +414,10 @@ void MixedRiemannianTrustRegionSolver<GridType,Basis,Basis0,TargetSpace0,Basis1, double oldEnergy = 0; Dune::Timer solutionTimer; int ii = 0; + CorrectionType diff{corr_global}; try { for (; ii<innerIterations_; ii++) { + diff=corr_global; residual[_0] = rhs_global[_0]; stiffnessMatrix[_0][_1].mmv(corr_global[_1], residual[_0]); mmgStep0->setRhs(residual[_0]); @@ -436,7 +438,8 @@ void MixedRiemannianTrustRegionSolver<GridType,Basis,Basis0,TargetSpace0,Basis1, std::cout << "Warning: energy increase!" << std::endl; oldEnergy = energy; - if (corr_global.infinity_norm() < innerTolerance_) + diff -= corr_global; + if (diff.infinity_norm() < innerTolerance_) break; } } catch (Dune::Exception &e) {