From 74b3245444c68d8ca436242e8f369b59f8864681 Mon Sep 17 00:00:00 2001 From: kronbichler Date: Tue, 23 Aug 2011 09:41:55 +0000 Subject: [PATCH] Fix computation of eigenvalues when only a few iterations are done. git-svn-id: https://svn.dealii.org/trunk@24170 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/include/deal.II/lac/precondition.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/deal.II/include/deal.II/lac/precondition.h b/deal.II/include/deal.II/lac/precondition.h index 0d96f8f45b..224044fe5e 100644 --- a/deal.II/include/deal.II/lac/precondition.h +++ b/deal.II/include/deal.II/lac/precondition.h @@ -1592,6 +1592,8 @@ PreconditionChebyshev::initialize (const MATRIX &matrix, const AdditionalData &additional_data) { Assert (matrix.m() == matrix.n(), ExcMessage("Matrix not quadratic.")); + Assert (additional_data.eig_cg_n_iterations > 2, + ExcMessage ("Need to set at least two iterations to find eigenvalues.")); matrix_ptr = &matrix; data = additional_data; if (data.matrix_diagonal_inverse.size() != matrix.m()) @@ -1644,7 +1646,10 @@ PreconditionChebyshev::initialize (const MATRIX &matrix, g.add (alpha, update1); res = g.l2_norm(); - if (it > data.eig_cg_n_iterations || res < data.eig_cg_residual) + // need at least two iterations to have + // maximum and minimum eigenvalue + if (it > data.eig_cg_n_iterations || (it > 2 && + res < data.eig_cg_residual)) break; beta = gh; -- 2.39.5