From: bangerth Date: Tue, 12 Aug 2008 20:03:10 +0000 (+0000) Subject: Document our failed experiment with block diagonal preconditioners. X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7bd6157cc4c1e59194ef4f618ce927984812721d;p=dealii-svn.git Document our failed experiment with block diagonal preconditioners. git-svn-id: https://svn.dealii.org/trunk@16524 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/examples/step-31/doc/intro.dox b/deal.II/examples/step-31/doc/intro.dox index c6c839c2bc..c8e6976844 100644 --- a/deal.II/examples/step-31/doc/intro.dox +++ b/deal.II/examples/step-31/doc/intro.dox @@ -651,13 +651,14 @@ $(\nabla {\mathbf v}_i, \eta \nabla {\mathbf v}_j) (\partial_k ({\mathbf v}_i)_l, \eta \partial_k ({\mathbf v}_j)_l) $. The latter, however, has the advantage that the dim vector components -of the test functions are not mixed, i.e. the resulting matrix is -block-diagonal: one block for each vector component, and each of these -blocks is equal to the Laplace matrix for this vector component. So assuming -we order degrees of freedom in such a way that first all $x$-components of the -velocity are numbered, then the $y$-components, and then the $z$-components, -then the matrix $\hat A$ that is associated with this slightly different -bilinear form has the form +of the test functions are not coupled (well, almost, see below), +i.e. the resulting matrix is block-diagonal: one block for each vector +component, and each of these blocks is equal to the Laplace matrix for +this vector component. So assuming we order degrees of freedom in such +a way that first all $x$-components of the velocity are numbered, then +the $y$-components, and then the $z$-components, then the matrix $\hat +A$ that is associated with this slightly different bilinear form has +the form @f{eqnarray*} \hat A = \left(\begin{array}{ccc} @@ -666,7 +667,8 @@ bilinear form has the form @f} where $A_s$ is a Laplace matrix of size equal to the number of shape functions associated with each component of the vector-valued velocity. With this -matrix, we can now define our preconditioner for the velocity matrix $A$: +matrix, one could be tempted to define our preconditioner for the +velocity matrix $A$ as follows: @f{eqnarray*} \tilde A^{-1} = \left(\begin{array}{ccc} @@ -678,6 +680,34 @@ matrix, we can now define our preconditioner for the velocity matrix $A$: where $\tilde A_s^{-1}$ is a preconditioner for the Laplace matrix — something where we know very well how to build good preconditioner! +In reality, the story is not quite as simple: To make the matrix +$\tilde A$ definite, we need to make the individual blocks $\tilde +A_s$ definite by applying boundary conditions. One can try to do so by +applying Dirichlet boundary conditions all around the boundary, and +then the so-defined preconditioner $\tilde A^{-1}$ turns out to be a +good preconditioner for $A$ if the latter matrix results from a Stokes +problem where we also have Dirichlet boundary conditions on the +velocity components all around the domain, i.e. if we enforce $\mathbf +u=0$. + +Unfortunately, this "if" is an "if and only if": in the program below +we will want to use no-flux boundary conditions of the form $\mathbf u +\cdot \mathbf n = 0$ (i.e. flow parallel to the boundary is allowed, +but no flux through the boundary). In this case, it turns out that the +block diagonal matrix defined above is not a good preconditioner +because it neglects the coupling of components at the boundary. A +better way to do things is therefore if we build the matrix $\hat A$ +as the vector Laplace matrix $\hat A_{ij} = (\nabla {\mathbf v}_i, +\eta \nabla {\mathbf v}_j)$ and then apply the same boundary condition +as we applied to $A$. If this is Dirichlet boundary conditions all +around the domain, the $\hat A$ will decouple to three diagonal blocks +as above, and if the boundary conditions are of the form $\mathbf u +\cdot \mathbf n = 0$ then this will introduce a coupling of degrees of +freedom at the boundary but only there. This, in fact, turns out to be +a much better preconditioner than the one introduced above, and has +almost all the benefits of what we hoped to get. + + To sum this whole story up, we can observe: