Download esys-Escript User's Guide: Solving Partial Differential Equations with

Transcript
Assuming we have estimates for M and K 1 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 χmax ≤ 1. If we see χ ≤ χ− (1 + χ− ) our choices for the tolerances
were suitable. Otherwise, we need to adjust the values for K and M . From the estimates 6.24 and 6.26 we establish
χ ≤ (1 + max(M
τ2 kBv1 k0
, Kτ1 )) · χ−
χ− −
(6.28)
If we assume that this inequality would be an equation if we would have chosen the right values M + and K + then
we get
χ−
χ−
χ = (1 + max(M +
, K+
)) · χ−
(6.29)
M
K
From this equation we see if our choice for K was not good enough. In this case we can calculate a new value
K+ =
χ − χ−
K
(χ− )2
(6.30)
In practice we will use
χ − χ−
1
K, K, 1)
(6.31)
(χ− )2
2
where the second term is used to reduce a potential overestimate of K. The same identity is used for to update M .
The updated M + and K + 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 v1 has still
a small divergence, i.e. we have kBv1 k0 kv1 − v0 k1 . 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
K + = max(
kBv1 k0 ≤ θ · kv1 − v0 k
(6.32)
where 0 < θ < 1 is a given factor. In this case we will also check the stopping criterion with v1 → v2 but we will
not correct M in this case.
Starting from an initial guess v0 and p0 for velocity and pressure the solution procedure is implemented as
follows:
1. calculate viscosity η(v0 , p)0 and assemble operator A from η
2. calculate the tolerance τ1 from Equation (6.27)
3. solve Equation (6.6) for dv1 with tolerance τ1
4. update v1 = v0 + dv1
5. if Bv1 is large (see 6.32):
(a) calculate the tolerance τ2 from 6.25
(b) solve 6.7 for dp2 and v2 with tolerance τ2
(c) update p2 ← p0 + dp2
6. else:
• update p2 ← p and v2 ← v1
7. calculate convergence measure and convergence rate χ
8. if stopping criterion 6.9 holds:
• return v2 and p2
9. else:
(a) update M and K
(b) goto step 1 with v0 ← v2 and p0 ← p2 .
1 if
106
no estimates are available, we use the value 1
6.1. The Stokes Problem