techniques discussed here are original.
-<h3>Advection-dominated two-phase flow mathematical model.</h3>
+<h3>Advection-dominated two-phase flow mathematical model</h3>
We consider the flow of a two-phase immiscible, incompressible
fluid. Capillary and gravity effects are neglected, and viscous
saturation variable on the inflow boundary $\mathbf{\Gamma}_{in}$.
-<h3>Adaptive operator splitting and time stepping.</h3>
+<h3>Adaptive operator splitting and time stepping</h3>
As seen in step-21, solving the flow equations for velocity and pressure are
the parts of the program that take far longer than the (explicit) updating
The result is a scheme where neither micro nor macro time
steps are of uniform length, and both are chosen adaptively.
-<h3>Time discretization.</h3>
+
+<h3>Time discretization</h3>
+
Using this time discretization, we obtain the following set of equations for
each time step from the IMPES approach (see step-21):
@f{align*}
&\epsilon \left( \frac{S^{(n)}-S^{(n-1)}}{\Delta t^{(n)}_c} \right) + \mathbf{u}^{(n)}_t \cdot \nabla F\left(S^{(n-1)}\right) + F\left(S^{(n-1)}\right)q=0.
@f}
-<h3>Weak form, space discretization for the pressure-velocity part.</h3>
+
+<h3>Weak form, space discretization for the pressure-velocity part</h3>
By multiplying the equations defining the total velocity $\mathbf u_t^{(n)}$ and
the equation that expresses its divergence in terms of source terms, with test
the space dimension, and $Q_s$ denotes the space of tensor product Lagrange
polynomials of degree $s$ in each variable.
-<h3>Stabilization, weak form and space discretization for the saturation transport equation.</h3>
+
+<h3>Stabilization, weak form and space discretization for the saturation transport equation</h3>
+
The chosen $Q_1$ elements for the saturation equation do not lead to a stable
discretization without upwinding or other kinds of stabilization, and spurious
oscillations will appear in the numerical solution. Adding an artificial
neighboring boundary $\partial\Omega_{(-)}$.
-<h3>Adaptive mesh refinement.</h3>
+<h3>Adaptive mesh refinement</h3>
Choosing meshes adaptively to resolve sharp
saturation fronts is an essential ingredient to achieve efficiency in our
everywhere. We only show it here for illustrative purposes.
-<h3>Linear system and its preconditioning.</h3>
+<h3>The linear system and its preconditioning</h3>
Following the discretization of the governing equations
discussed above, we
method, using an incomplete Cholesky decomposition as preconditioner once
more.
-<h3>The test cases.</h3>
+
+<h3>The test cases</h3>
@note
The implementation discussed here uses and extends
</table>
+
+<h3>A note on the implementation</h3>
+
+We have mentioned many areas above in which this program improves over the step-20
+and step-21 programs upon which it is based. It also uses the Trilinos interfaces
+for its vectors and matrices; this specifically has the advantage that we can use
+an excellent implementation of the Incomplete Cholesky method we use as preconditioners
+for both the top left and bottom right blocks of the $2\times 2$ matrix that describes
+the flow portion of the coupled problem.
+
+We note that while we use the TrilinosWrappers::MPI::BlockVector class to store
+vectors, the program does not actually use MPI (or any other way to run in
+parallel): There is no non-MPI vector class in the TrilinosWrappers namespace,
+but we can use the MPI version to also run a sequential code as we do here.
+
+
+
<h3>List of references</h3>