diff --git a/dune/solvers/iterationsteps/cgstep.cc b/dune/solvers/iterationsteps/cgstep.cc index 94f86e9d6cb254095e8237283c5097e9958ef9a6..aa2264c1c6bae650457a6cb5ca9e02e625f68a2c 100644 --- a/dune/solvers/iterationsteps/cgstep.cc +++ b/dune/solvers/iterationsteps/cgstep.cc @@ -35,6 +35,10 @@ void CGStep<MatrixType, VectorType>::preprocess() template <class MatrixType, class VectorType> void CGStep<MatrixType, VectorType>::iterate() { + // Avoid divide-by-zero. If r_squared was zero, we're done anyway. + if (r_squared_old_ <= 0) + return; + VectorType q(*x_); matrix_->mv(p_, q); // q_0 = Ap_0