Next: Functions
Up: The Stokes Problem
Previous: The Stokes Problem
Contents
Index
Solution Method
If we assume that
is independent from the velocity and pressure equations 6.1 and 6.2
can be written in the block form
![$\displaystyle \left[ \begin{array}{cc} A & B^{*} \\ B & 0 \\ \end{array} \right...
...p \\ \end{array} \right] =\left[ \begin{array}{c} G \\ 0 \\ \end{array} \right]$](img877.png) |
(105) |
where
is coercive, self-adjoint linear operator in a suitable Hilbert space,
is the
divergence operator and
is it adjoint operator (=gradient operator).
For more details on the mathematics see references [11,12].
If
and
are given initial guesses for
velocity and pressure we calculate a correction
for the velocity by solving the first
equation of equation 6.5
 |
(106) |
We then insert the new approximation
to calculate a correction
for the pressure and an additional correction
for the velocity by solving
 |
(107) |
The new velocity and pressure are then given by
and
which will fulfill the block system 6.5.
This solution strategy is called the Uzawa scheme .
There is a problem with this scheme: In practice we will use an iterative scheme
to solve any problem for operator
. So we will be unable to calculate the operator
required for
explicitly. In fact, we need to use another
iterative scheme to solve the first equation in 6.7 where in each iteration step
an iterative solver for
is applied. Another issue is the fact that the
viscosity
may depend on velocity or pressure and so we need to iterate over the
three equations 6.6 and 6.7.
In the following we will use the two norms
and  |
(108) |
for velocity
and pressure
. The iteration is terminated if the stopping criteria
 |
(109) |
for a given given tolerance
is meet. Notice that because of the first equation of 6.7 we have that
equals the
norm of
and consequently provides a norm for the pressure correction.
We want to optimize the tolerance choice for solving 6.6
and 6.7. To do this we write the iteration scheme as a fixed point problem. Here
we consider the errors produced by the iterative solvers being used.
From Equation 6.6 we have
 |
(110) |
where
is the error when solving 6.6.
We will use a sparse matrix solver so we have not full control on the norm
used in the stopping criteria for this equation. In fact we will have a stopping criteria of the form
 |
(111) |
where
is the tolerance which we need to choose. This translates into the condition
 |
(112) |
The constant
represents some uncertainty combining a variety of unknown factors such as the
norm being used and the condition number of the stiffness matrix.
From the first equation of 6.7 we have
 |
(113) |
where
represents the error when solving 6.7.
We use an iterative preconditioned conjugate gradient method (PCG) with iteration
operator
using the
norm. As suitable preconditioner for the iteration
operator we use
[16], ie
the evaluation of the preconditioner
for a given pressure increment
is the solution of
 |
(114) |
Note that in each evaluation of the iteration operator
one needs to solve
the problem
 |
(115) |
with sufficient accuracy to return
. We assume that the desired tolerance is
sufficiently small, for instance one can take
where
is the tolerance for 6.7.
In an implementation we use the fact that the residual
is given as
 |
(116) |
In particular we have
So the residual
is represented by the updated velocity
. In practice, if
one uses the velocity to represent the residual
there is no need
to recover
in 6.7 after
has been calculated.
In PCG the iteration is terminated if
 |
(117) |
where
is the given tolerance. This translates into
 |
(118) |
where
is taking care of the fact that
is dropped.
As we assume that there is no significant error from solving with the operator
we have
 |
(119) |
Combining the equations 6.10, 6.13 and 6.19 and
setting the errors to zero we can write the solution process as a fix point problem
and  |
(120) |
with suitable functions
and
representing the iteration operator without
errors. In fact for a linear problem,
and
are constant. With this notation we can write
the update step in the form
and
where
the total error
and
are given as
 |
(121) |
Notice that
. Our task is now to choose the tolerances
and
such that the global errors
and
do not stop the convergence of the iteration process.
To measure convergence we use
 |
(122) |
In practice using the fact that
and assuming that
gives a better approximation to the true
than
we will use the estimate
 |
(123) |
to estimate the progress of the iteration step after the step is completed.
Note that the estimate of
used in the stopping criteria 6.9. If
is the convergence rate assuming
exact calculations, i.e.
and
, we are expecting
to maintain
. For the
pressure increment we get:
 |
(124) |
So we choose the value for
from
 |
(125) |
in order to make the perturbation for the termination of the pressure iteration a second order effect. We use a
similar argument for the velocity:
 |
(126) |
So we choose the value for
from
 |
(127) |
Assuming we have estimates for
and
(if none is available, we use the value
.)
we can use 6.27 and 6.25 to get appropriate values for the tolerances. After
the step has been completed we can calculate a new convergence rate
.
For partial reasons we restrict
to be less or equal a given maximum value
.
If we see
our choices for the tolerances was suitable. Otherwise, we need to adjust the values for
and
. From the estimates 6.24 and 6.26 we establish
 |
(128) |
If we assume that this inequality would be an equation if we would have chosen the right values
and
then we get
 |
(129) |
From this equation we set for
than our choice for
was not good enough. In this case we can calculate a new value
 |
(130) |
In practice we will use
 |
(131) |
where the second term is used to reduce a potential overestimate of
.
The same identity is used for to update
. The updated
and
are then use in the next iteration step to control the tolerances.
In some cases one can observe that there is a significant change
in the velocity but the new velocity
has still a
small divergence, i.e. we have
.
In this case we will get a small pressure increment and consequently only very small changes to
the velocity as a result of the second update step which therefore can be skipped and
we can directly repeat the first update step until the increment in velocity becomes
significant relative to its divergence. In practice we will ignore the second half of the iteration step
as long as
 |
(132) |
where
is a given factor. In this case we will also check the stopping criteria
with
but we will not correct
in this case.
Starting from an initial guess
and
for velocity and pressure
the solution procedure is implemented as follows.
- calculate viscosity
and assemble operator
from
.
- calculate the tolerance
from 6.27.
- Solve 6.6 for
with tolerance
.
- update
- if
is large (see 6.32):
- calculate the tolerance
from 6.25.
- Solve 6.7 for
and
with tolerance
.
- update
- else:
- update
and
- calculate convergence measure
and convergence rate
- if stopping criteria 6.9 holds:
- return
and
- else:
- update
and
- goto step 1 with
and
.
Next: Functions
Up: The Stokes Problem
Previous: The Stokes Problem
Contents
Index
esys@esscc.uq.edu.au