we use a constant coefficient: in that case, the number of iterations
remains constant at 9 after the first three or four refinement steps.
-Let us compare the iteration steps needed to obtain convergence for the two methods:
+We can also compare what this program produces with how
+@ref step_5 "step-5" performed. To solve the same problem as in
+step-5, the only change that is necessary is to replace the body of
+the function <code>LaplaceProblem::refine_grid</code> by a call to
+<code>triangulation.refine_global(1)</code> — the rest of the
+program remains unchanged. In that case, here is how the solvers used
+in step-5 and the multigrid solver used in the current program compare:
<table align="center">
<tr><th>cells</th><th>step-5</th><th>step-16</th></tr>
<tr><td>20</td> <td>13</td> <td>6</td> </tr>
<h3> Possible extensions </h3>
A close inspection of this program's performance shows that it is mostly
-dominated by matrix-vector operations. @ref step_37 "Step-37" shows one way
+dominated by matrix-vector operations. @ref step_37 "step-37" shows one way
how this can be avoided by working with matrix-free methods.
+
+Another avenue would be to use algebraic multigrid methods. The
+geometric multigrid method used here can at times be a bit awkward to
+implement because it needs all those additional data structures, and
+it becomes even more difficult if the program is to run in parallel on
+machines coupled through MPI, for example. In that case, it would be
+simpler if one could use a black-box preconditioner that uses some
+sort of multigrid hierarchy for good performance but can figure out
+level matrices and similar things out by itself. Algebraic multigrid
+methods do exactly this, and we will use them in
+@ref step_31 "step-31" for the solution of a Stokes problem.