From ffeb019bbe19cdb47eb0d2faf9cfa83ee4905917 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Sun, 2 Feb 2020 19:37:04 -0700 Subject: [PATCH] Clarify something about the matrix in step-20. --- examples/step-20/doc/intro.dox | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/examples/step-20/doc/intro.dox b/examples/step-20/doc/intro.dox index 22b5ea333e..86e0b8656c 100644 --- a/examples/step-20/doc/intro.dox +++ b/examples/step-20/doc/intro.dox @@ -358,17 +358,25 @@ program. We will therefore not comment much on it below.

Linear solvers and preconditioners

After assembling the linear system we are faced with the task of solving -it. The problem here is: the matrix has a zero block at the bottom right -(there is no term in the bilinear form that couples the pressure $p$ with the -pressure test function $q$), and it is indefinite. At least it is -symmetric. In other words: the Conjugate Gradient method is not going to -work since it is only applicable to problems in which the matrix is -symmetric and positive definite. +it. The problem here is that the matrix possesses two undesirable properties: +- It is indefinite, + i.e., it has both positive and negative eigenvalues. + We don't want to prove this property here, but note that this is true + for all matrices of the form + $\left(\begin{array}{cc} M & B \\ B^T & 0 \end{array}\right)$ + such as the one here where $M$ is positive definite. +- The matrix has a zero block at the bottom right (there is no term in + the bilinear form that couples the pressure $p$ with the + pressure test function $q$). + +At least it is symmetric, but the first issue above still means that +the Conjugate Gradient method is not going to work since it is only +applicable to problems in which the matrix is symmetric and positive definite. We would have to resort to other iterative solvers instead, such as MinRes, SymmLQ, or GMRES, that can deal with indefinite systems. However, then -the next problem immediately surfaces: due to the zero block, there are zeros -on the diagonal and none of the usual, "simple" preconditioners (Jacobi, SSOR) will work -as they require division by diagonal elements. +the next problem immediately surfaces: Due to the zero block, there are zeros +on the diagonal and none of the usual, "simple" preconditioners (Jacobi, SSOR) +will work as they require division by diagonal elements. For the matrix sizes we expect to run with this program, the by far simplest approach would be to just use a direct solver (in particular, the -- 2.39.5