unknowns, respectively.
<h4>Better preconditioner for the inner CG solver</h4>
-The first way to improve the situation would be to choose a preconditioner that
-makes CG for the (0,0) matrix $A$ converge in a mesh-independent number of
-iterations, say 10 to 30. We have seen such a canditate in
-@ref step_16 "step-16": multigrid.
+Another idea to improve the situation even more would be to choose a
+preconditioner that makes CG for the (0,0) matrix $A$ converge in a
+mesh-independent number of iterations, say 10 to 30. We have seen such a
+canditate in @ref step_16 "step-16": multigrid.
<h4>Block Schur complement preconditioner</h4>
But even with a good preconditioner for $A$ at hand, there would still
// Note that in the above
// computation of the local
// matrix contribution we added
- // the term <code> phi_i_p *
- // phi_j_p </code>, yielding a
+ // the term <code> phi_p[i] *
+ // phi_p[j] </code>, yielding a
// pressure mass matrix in the
// $(1,1)$ block of the matrix
// as discussed in the
// only ends up in the $(1,1)$
// block stems from the fact
// that both of the factors in
- // <code>phi_i_p *
- // phi_j_p</code> are only
+ // <code>phi_p[i] *
+ // phi_p[j]</code> are only
// non-zero when all the other
// terms vanish (and the other
// way around).
// The final step is, as usual, the
// transfer of the local contributions
// to the global system matrix. This
- // works also in the case of block
- // vectors and matrices, and also the
+ // works in the case of block
+ // vectors and matrices just the way
+ // we are used it to be, and also the
// terms constituting the pressure mass
// matrix are written into the correct
// position without any further
// about one thing, though. We have
// only build up half of the local
// matrix because of symmetry, but
- // we have to save the full system
+ // we're going to save the full system
// matrix in order to use the standard
- // functions for the solution. Hence,
- // we use the element below the
- // diagonal if we happen to look
- // above it.
+ // functions for solution. This is
+ // done by flipping the indices in
+ // case we are pointing into the
+ // empty part of the local matrix.
cell->get_dof_indices (local_dof_indices);
for (unsigned int i=0; i<dofs_per_cell; ++i)