/[escript]/trunk/doc/user/stokessolver.tex
ViewVC logotype

Annotation of /trunk/doc/user/stokessolver.tex

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2851 - (hide annotations)
Fri Jan 15 07:37:47 2010 UTC (9 years, 9 months ago) by gross
File MIME type: application/x-tex
File size: 21133 byte(s)
typos fixed.

1 gross 2719 \section{The Stokes Problem}
2     \label{STOKES PROBLEM}
3     In this section we discuss how to solve the Stokes problem which is defined as follows:
4    
5     We want to calculate the velocity \index{velocity} field $v$ and pressure $p$ of an incompressible fluid \index{incompressible fluid}. They are given as the solution of the Stokes problem\index{Stokes problem}
6     \begin{equation}\label{Stokes 1}
7 gross 2843 -\left(\eta(v\hackscore{i,j}+ v\hackscore{j,i})\right)\hackscore{,j}+p\hackscore{,i}=f\hackscore{i}-\sigma\hackscore{ij,j}
8 gross 2719 \end{equation}
9 gross 2851 where $f\hackscore{i}$ defines an internal force \index{force, internal} and $\sigma\hackscore{ij}$ is an initial stress \index{stress, initial}. The viscosity $\eta$ may weakly depend on pressure and velocity. If relevant we will use the notation $\eta(v,p)$ to express this dependency.
10 gross 2719
11     We assume an incompressible media:
12     \begin{equation}\label{Stokes 2}
13     -v\hackscore{i,i}=0
14     \end{equation}
15     Natural boundary conditions are taken in the form
16     \begin{equation}\label{Stokes Boundary}
17 gross 2843 \left(\eta(v\hackscore{i,j}+ v\hackscore{j,i})\right)n\hackscore{j}-n\hackscore{i}p=s\hackscore{i} - \alpha \cdot n\hackscore{i} n\hackscore{j} v\hackscore{j}+\sigma\hackscore{ij} n\hackscore{j}
18 gross 2719 \end{equation}
19     which can be overwritten by constraints of the form
20     \begin{equation}\label{Stokes Boundary0}
21     v\hackscore{i}(x)=v^D\hackscore{i}(x)
22     \end{equation}
23     at some locations $x$ at the boundary of the domain. $s\hackscore{i}$ defines a normal stress and
24     $\alpha\ge 0$ the spring constant for restoring normal force.
25     The index $i$ may depend on the location $x$ on the boundary.
26     $v^D$ is a given function on the domain.
27    
28     \subsection{Solution Method \label{STOKES SOLVE}}
29 gross 2793 If we assume that $\eta$ is independent from the velocity and pressure equations~\ref{Stokes 1} and~\ref{Stokes 2}
30     can be written in the block form
31 gross 2719 \begin{equation}
32     \left[ \begin{array}{cc}
33     A & B^{*} \\
34     B & 0 \\
35     \end{array} \right]
36     \left[ \begin{array}{c}
37     v \\
38     p \\
39     \end{array} \right]
40     =\left[ \begin{array}{c}
41     G \\
42     0 \\
43     \end{array} \right]
44 gross 2843 \label{STOKES}
45 gross 2719 \end{equation}
46 gross 2793 where $A$ is coercive, self-adjoint linear operator in a suitable Hilbert space, $B$ is the $(-1) \cdot$ divergence operator and $B^{*}$ is it adjoint operator (=gradient operator).
47 gross 2748 For more details on the mathematics see references \cite{AAMIRBERKYAN2008,MBENZI2005}.
48 gross 2793
49     If $v\hackscore{0}$ and $p\hackscore{0}$ are given initial guesses for
50     velocity and pressure we calculate a correction $dv$ for the velocity by solving the first
51 gross 2843 equation of equation~\ref{STOKES}
52     \begin{equation}\label{STOKES ITER STEP 1}
53 gross 2793 A dv\hackscore{1} = G - A v\hackscore{0} - B^{*} p\hackscore{0}
54     \end{equation}
55     We then insert the new approximation $v\hackscore{1}=v\hackscore{0}+dv\hackscore{1}$ to calculate a correction $dp\hackscore{2}$
56     for the pressure and an additional correction $dv\hackscore{2}$ for the velocity by solving
57     \begin{equation}
58     \begin{array}{rcl}
59     B A^{-1} B^{*} dp\hackscore{2} & = & Bv\hackscore{1} \\
60     A dv\hackscore{2} & = & B^{*} dp\hackscore{2}
61     \end{array}
62 gross 2843 \label{STOKES ITER STEP 2}
63 gross 2793 \end{equation}
64 gross 2843 The new velocity and pressure are then given by $v\hackscore{2}=v\hackscore{1}-dv\hackscore{2}$ and
65 gross 2851 $p\hackscore{2}=p\hackscore{0}+dp\hackscore{2}$ which will fulfill the block system~\ref{STOKES}.
66 gross 2843 This solution strategy is called the Uzawa scheme \index{Uzawa scheme}.
67    
68     There is a problem with this scheme: In practice we will use an iterative scheme
69     to solve any problem for operator $A$. So we will be unable to calculate the operator
70     $ B A^{-1} B^{*}$ required for $dp\hackscore{2}$ explicitly. In fact, we need to use another
71     iterative scheme to solve the first equation in~\ref{STOKES ITER STEP 2} where in each iteration step
72     an iterative solver for $A$ is applied. Another issue is the fact that the
73     viscosity $\eta$ may depend on velocity or pressure and so we need to iterate over the
74     three equations~\ref{STOKES ITER STEP 1} and~\ref{STOKES ITER STEP 2}.
75    
76     In the following we will use the two norms
77 gross 2793 \begin{equation}
78     \|v\|\hackscore{1}^2 = \int\hackscore{\Omega} v\hackscore{j,k}v\hackscore{j,k} \; dx
79     \mbox{ and }
80     \|p\|\hackscore{0}^2= \int\hackscore{\Omega} p^2 \; dx.
81     \label{STOKES STOP}
82     \end{equation}
83 gross 2851 for velocity $v$ and pressure $p$. The iteration is terminated if the stopping criteria
84 gross 2843 \begin{equation} \label{STOKES STOPPING CRITERIA}
85     \max(\|Bv\hackscore{1}\|\hackscore{0},\|v\hackscore{2}-v\hackscore{0}\|\hackscore{1}) \le \tau \cdot \|v\hackscore{2}\|\hackscore{1}
86 gross 2793 \end{equation}
87 gross 2843 for a given given tolerance $0<\tau<1$ is meet. Notice that because of the first equation of~\ref{STOKES ITER STEP 2} we have that
88     $\|Bv\hackscore{1}\|\hackscore{0}$ equals the
89     norm of $B A^{-1} B^{*} dp\hackscore{2}$ and consequently provides a norm for the pressure correction.
90 gross 2793
91 gross 2843 We want to optimize the tolerance choice for solving~\ref{STOKES ITER STEP 1}
92     and~\ref{STOKES ITER STEP 2}. To do this we write the iteration scheme as a fixed point problem. Here
93 gross 2851 we consider the errors produced by the iterative solvers being used.
94 gross 2843 From Equation~\ref{STOKES ITER STEP 1} we have
95     \begin{equation} \label{STOKES total V1}
96     v\hackscore{1} = e\hackscore{1} + v\hackscore{0} + A^{-1} ( G - Av\hackscore{0} - B^{*} p\hackscore{0} )
97 gross 2793 \end{equation}
98 gross 2843 where $ e\hackscore{1}$ is the error when solving~\ref{STOKES ITER STEP 1}.
99     We will use a sparse matrix solver so we have not full control on the norm $\|.\|\hackscore{s}$ used in the stopping criteria for this equation. In fact we will have a stopping criteria of the form
100 gross 2793 \begin{equation}
101 gross 2843 \| A e\hackscore{1} \|\hackscore{s} = \| G - A v\hackscore{1} - B^{*} p\hackscore{0} \|\hackscore{s} \le \tau\hackscore{1} \| G - A v\hackscore{0} - B^{*} p\hackscore{0} \|\hackscore{s}
102 gross 2793 \end{equation}
103 gross 2843 where $\tau\hackscore{1}$ is the tolerance which we need to choose. This translates into the condition
104 gross 2793 \begin{equation}
105     \| e\hackscore{1} \|\hackscore{1} \le K \tau\hackscore{1} \| dv\hackscore{1} - e\hackscore{1} \|\hackscore{1}
106     \end{equation}
107     The constant $K$ represents some uncertainty combining a variety of unknown factors such as the
108 gross 2843 norm being used and the condition number of the stiffness matrix.
109     From the first equation of~\ref{STOKES ITER STEP 2} we have
110     \begin{equation}\label{STOKES total P2}
111     p\hackscore{2} = p\hackscore{0} + (B A^{-1} B^{*})^{-1} (e\hackscore{2} + Bv\hackscore{1} )
112 gross 2793 \end{equation}
113 gross 2843 where $e\hackscore{2}$ represents the error when solving~\ref{STOKES ITER STEP 2}.
114     We use an iterative preconditioned conjugate gradient method (PCG) \index{linear solver!PCG}\index{PCG} with iteration
115     operator $B A^{-1} B^{*}$ using the $\|.\|\hackscore{0}$ norm. As suitable preconditioner \index{preconditioner} for the iteration
116     operator we use $\frac{1}{\eta}$ \cite{ELMAN}, ie
117 gross 2719 the evaluation of the preconditioner $P$ for a given pressure increment $q$ is the solution of
118 gross 2843 \begin{equation} \label{STOKES P PREC}
119     \frac{1}{\eta} (Pq) = q \; .
120 gross 2719 \end{equation}
121     Note that in each evaluation of the iteration operator $q=B A^{-1} B^{*} s$ one needs to solve
122     the problem
123 gross 2843 \begin{equation} \label{STOKES P OPERATOR}
124 gross 2719 A w = B^{*} s
125     \end{equation}
126 gross 2851 with sufficient accuracy to return $q=Bw$. We assume that the desired tolerance is
127     sufficiently small, for instance one can take $\tau\hackscore{2}^2$
128 gross 2843 where $\tau\hackscore{2}$ is the tolerance for~\ref{STOKES ITER STEP 2}.
129    
130     In an implementation we use the fact that the residual $r$ is given as
131 gross 2719 \begin{equation} \label{STOKES RES }
132 gross 2748 r= B (v\hackscore{1} - A^{-1} B^{*} dp) = B (v\hackscore{1} - A^{-1} B^{*} dp) = B (v\hackscore{1}-dv\hackscore{2}) = B v\hackscore{2}
133 gross 2719 \end{equation}
134 gross 2843 In particular we have $e\hackscore{2} = B v\hackscore{2}$
135     So the residual $r$ is represented by the updated velocity $v\hackscore{2}=v\hackscore{1}-dv\hackscore{2}$. In practice, if
136     one uses the velocity to represent the residual $r$ there is no need
137     to recover $dv\hackscore{2}$ in~\ref{STOKES ITER STEP 2} after $dp\hackscore{2}$ has been calculated.
138     In PCG the iteration is terminated if
139     \begin{equation} \label{STOKES P OPERATOR ERROR}
140 gross 2719 \| P^{\frac{1}{2}}B v\hackscore{2} \|\hackscore{0} \le \tau\hackscore{2} \| P^{\frac{1}{2}}B v\hackscore{1} \|\hackscore{0}
141     \end{equation}
142 gross 2843 where $\tau\hackscore{2}$ is the given tolerance. This translates into
143     \begin{equation} \label{STOKES P OPERATOR ERROR 2}
144     \|e\hackscore{2}\|\hackscore{0} = \| B v\hackscore{2} \|\hackscore{0} \le M \tau\hackscore{2} \| B v\hackscore{1} \|\hackscore{0}
145 gross 2719 \end{equation}
146 gross 2843 where $M$ is taking care of the fact that $P^{\frac{1}{2}}$ is dropped.
147 gross 2719
148 gross 2843 As we assume that there is no significant error from solving with the operator $A$ we have
149     \begin{equation} \label{STOKES total V2}
150 gross 2719 v\hackscore{2} = v\hackscore{1} - dv\hackscore{2}
151     = v\hackscore{1} - A^{-1} B^{*}dp
152     \end{equation}
153 gross 2843 Combining the equations~\ref{STOKES total V1},~\ref{STOKES total P2} and~\ref{STOKES total V2} and
154     setting the errors to zero we can write the solution process as a fix point problem
155 gross 2719 \begin{equation}
156     v = \Phi(v,p) \mbox{ and } p = \Psi(u,p)
157     \end{equation}
158 gross 2851 with suitable functions $\Phi(v,p)$ and $ \Psi(v,p)$ representing the iteration operator without
159 gross 2843 errors. In fact for a linear problem, $\Phi$ and $\Psi$ are constant. With this notation we can write
160     the update step in the form $p\hackscore{2}= \delta p + \Psi(v\hackscore{0},p\hackscore{0})$ and
161     $v\hackscore{2}= \delta v + \Phi(v\hackscore{0},p\hackscore{0})$ where
162     the total error $\delta p$ and $\delta v$ are given as
163 gross 2719 \begin{equation}
164     \begin{array}{rcl}
165     \delta p & = & (B A^{-1} B^{*})^{-1} ( e\hackscore{2} + B e\hackscore{1} ) \\
166 gross 2843 \delta v & = & e\hackscore{1} - A^{-1} B^{*}\delta p \;.
167 gross 2719 \end{array}\label{STOKES ERRORS}
168     \end{equation}
169 gross 2843 Notice that $B\delta v = - e\hackscore{2}=-Bv\hackscore{2}$. Our task is now to choose the tolerances
170     $\tau\hackscore{1}$ and $\tau\hackscore{2}$ such that the global errors $\delta p$ and $\delta v$
171     do not stop the convergence of the iteration process.
172 gross 2793
173 gross 2843 To measure convergence we use
174 gross 2719 \begin{equation}
175 gross 2843 \epsilon = \max(\|v\hackscore{2}-v\|\hackscore{1}, \|B A^{-1} B^{*} (p\hackscore{2}-p)\|\hackscore{0})
176 gross 2719 \end{equation}
177 gross 2843 In practice using the fact that $B A^{-1} B^{*} (p\hackscore{2}-p\hackscore{0}) = B v\hackscore{1}$
178     and assuming that $v\hackscore{2}$ gives a better approximation to the true $v$ than
179     $v\hackscore{0}$ we will use the estimate
180 gross 2719 \begin{equation}
181 gross 2843 \epsilon = \max(\|v\hackscore{2}-v\hackscore{0}\|\hackscore{1}, \|B v\hackscore{1}\|\hackscore{0})
182 gross 2719 \end{equation}
183 gross 2843 to estimate the progress of the iteration step after the step is completed.
184     Note that the estimate of $\epsilon$
185     used in the stopping criteria~\ref{STOKES STOPPING CRITERIA}. If $\chi^{-}$ is the convergence rate assuming
186     exact calculations, i.e. $e\hackscore{1}=0$ and $e\hackscore{2}=0$, we are expecting
187     to maintain $\epsilon \le \chi^{-} \cdot \epsilon^{-}$. For the
188     pressure increment we get:
189     \begin{equation} \label{STOKES EST 1}
190     \begin{array}{rcl}
191     \|B A^{-1} B^{*} (p\hackscore{2}-p)\|\hackscore{0}
192     & \le & \|B A^{-1} B^{*} (p\hackscore{2}-\delta p-p)\|\hackscore{0} +
193     \|B A^{-1} B^{*} \delta p\|\hackscore{0} \\
194     & = & \chi^{-} \cdot \epsilon^{-} + \|e\hackscore{2} + B e\hackscore{1}\|\hackscore{0} \\
195     & \approx & \chi^{-} \cdot \epsilon^{-} + \|e\hackscore{2}\|\hackscore{0} \\
196     & \le & \chi^{-} \cdot \epsilon^{-} + M \tau\hackscore{2} \|B v\hackscore{1}\|\hackscore{0} \\
197     \end{array}
198 gross 2719 \end{equation}
199 gross 2843 So we choose the value for $\tau\hackscore{2}$ from
200     \begin{equation} \label{STOKES TOL2}
201     M \tau\hackscore{2} \|B v\hackscore{1}\|\hackscore{0} \le (\chi^{-})^2 \epsilon^{-}
202 gross 2719 \end{equation}
203 gross 2843 in order to make the perturbation for the termination of the pressure iteration a second order effect. We use a
204 gross 2851 similar argument for the velocity:
205 gross 2843 \begin{equation}\label{STOKES EST 2}
206     \begin{array}{rcl}
207     \|v\hackscore{2}-v\|\hackscore{1} & \le & \|v\hackscore{2}-\delta v-v\|\hackscore{1} + \| \delta v\|\hackscore{1} \\
208     & \le & \chi^{-} \cdot \epsilon^{-} + \| e\hackscore{1} - A^{-1} B^{*}\delta p \|\hackscore{1} \\
209     & \approx & \chi^{-} \cdot \epsilon^{-} + \| e\hackscore{1} \|\hackscore{1} \\
210     & \le & \chi^{-} \cdot \epsilon^{-} + K \tau\hackscore{1} \| dv\hackscore{1} - e\hackscore{1} \|\hackscore{1}
211     \\
212     & \le & ( 1 + K \tau\hackscore{1}) \chi^{-} \cdot \epsilon^{-}
213     \end{array}
214 gross 2719 \end{equation}
215 gross 2843 So we choose the value for $\tau\hackscore{1}$ from
216     \begin{equation} \label{STOKES TOL1}
217     K \tau\hackscore{1} \le \chi^{-}
218 gross 2719 \end{equation}
219 gross 2851 Assuming we have estimates for $M$ and $K$ (if none is available, we use the value $1$.)
220 gross 2843 we can use~\ref{STOKES TOL1} and~\ref{STOKES TOL2} to get appropriate values for the tolerances. After
221     the step has been completed we can calculate a new convergence rate $\chi =\frac{\epsilon}{\epsilon^{-}}$.
222 gross 2851 For partial reasons we restrict $\chi$ to be less or equal a given maximum value $\chi\hackscore{max}\le 1$.
223 gross 2843 If we see $\chi \le \chi^{-} (1+\chi^{-})$ our choices for the tolerances was suitable. Otherwise, we need to adjust the values for $K$ and $M$. From the estimates~\ref{STOKES EST 1} and~\ref{STOKES EST 2} we establish
224     \begin{equation}\label{STOKES EST 3}
225     \chi \le ( 1 + \max(M \frac{\tau\hackscore{2} \|B v\hackscore{1}\|\hackscore{0}}{\chi^{-} \epsilon^{-}},K \tau\hackscore{1} ) ) \cdot \chi^{-}
226 gross 2719 \end{equation}
227 gross 2843 If we assume that this inequality would be an equation if we would have chosen the right values
228     $M^{+}$ and $K^{+}$ then we get
229     \begin{equation}\label{STOKES EST 3b}
230     \chi = ( 1 + \max(M^{+} \frac{\chi^{-}}{M},K^{+} \frac{\chi^{-}}{K}) ) \cdot \chi^{-}
231 gross 2719 \end{equation}
232 gross 2843 From this equation we set for
233 gross 2851 than our choice for $K$ was not good enough. In this case we can calculate a new value
234 gross 2843 \begin{equation}
235     K^{+} = \frac{\chi-\chi^{-}}{(\chi^{-})^2} K
236 gross 2719 \end{equation}
237 gross 2843 In practice we will use
238     \begin{equation}
239     K^{+} = \max(\frac{\chi-\chi^{-}}{(\chi^{-})^2} K,\frac{1}{2}K,1)
240 gross 2719 \end{equation}
241 gross 2843 where the second term is used to reduce a potential overestimate of $K$.
242     The same identity is used for to update $M$. The updated $M^{+}$ and $K^{+}$
243     are then use in the next iteration step to control the tolerances.
244 gross 2719
245 gross 2843 In some cases one can observe that there is a significant change
246     in the velocity but the new velocity $v\hackscore{1}$ has still a
247     small divergence, i.e. we have
248     $\|Bv\hackscore{1}\|\hackscore{0} \ll \|v\hackscore{1}-v\hackscore{0}\|\hackscore{1}$.
249     In this case we will get a small pressure increment and consequently only very small changes to
250     the velocity as a result of the second update step which therefore can be skipped and
251     we can directly repeat the first update step until the increment in velocity becomes
252     significant relative to its divergence. In practice we will ignore the second half of the iteration step
253     as long as
254     \begin{equation}\label{STOKES LARGE BV1}
255     \|Bv\hackscore{1}\|\hackscore{0} \le \theta \cdot \|v\hackscore{1}-v\hackscore{0}\|
256 gross 2719 \end{equation}
257 gross 2843 where $0<\theta<1$ is a given factor. In this case we will also check the stopping criteria
258     with $v\hackscore{1}\rightarrow v\hackscore{2}$ but we will not correct $M$ in this case.
259 gross 2719
260 gross 2843 Starting from an initial guess $v\hackscore{0}$ and $p\hackscore{0}$ for velocity and pressure
261     the solution procedure is implemented as follows.
262     \begin{enumerate}
263     \item calculate viscosity $\eta(v\hackscore{0},p)\hackscore{0}$ and assemble operator $A$ from $\eta$.
264     \item calculate the tolerance $\tau\hackscore{1}$ from~\ref{STOKES TOL1}.
265     \item Solve~\ref{STOKES ITER STEP 1} for $dv\hackscore{1}$ with tolerance $\tau\hackscore{1}$.
266     \item update $v\hackscore{1}= v\hackscore{0}+ dv\hackscore{1}$
267     \item if $Bv\hackscore{1}$ is large (see~\ref{STOKES LARGE BV1}):
268     \begin{enumerate}
269     \item calculate the tolerance $\tau\hackscore{2}$ from~\ref{STOKES TOL2}.
270     \item Solve~\ref{STOKES ITER STEP 2} for $dp\hackscore{2}$ and $v\hackscore{2}$ with tolerance $\tau\hackscore{2}$.
271     \item update $p\hackscore{2}\leftarrow p\hackscore{0}+ dp\hackscore{2}$
272     \end{enumerate}
273     \item else:
274     \begin{enumerate}
275     \item update $p\hackscore{2}\leftarrow p$ and $v\hackscore{2}\leftarrow v\hackscore{1}$
276     \end{enumerate}
277 gross 2851 \item calculate convergence measure $\epsilon$ and convergence rate $\chi$
278     \item if stopping criteria~\ref{STOKES STOPPING CRITERIA} holds:
279 gross 2843 \begin{enumerate}
280     \item return $v\hackscore{2}$ and $p\hackscore{2}$
281     \end{enumerate}
282     \item else:
283     \begin{enumerate}
284 gross 2719
285 gross 2843 \item update $M$ and $K$
286     \item goto step 1 with $v\hackscore{0}\leftarrow v\hackscore{2}$ and $p\hackscore{0}\leftarrow p\hackscore{2}$.
287     \end{enumerate}
288     \end{enumerate}
289 gross 2719
290     \subsection{Functions}
291    
292     \begin{classdesc}{StokesProblemCartesian}{domain}
293 gross 2793 opens the Stokes problem\index{Stokes problem} on the \Domain domain. The domain
294 gross 2851 needs to support LBB compliant elements for the Stokes problem, see~\cite{LBB} for details~\index{LBB condition}.
295 gross 2793 For instance one can use second order polynomials for velocity and
296 gross 2851 first order polynomials for the pressure on the same element. Alternatively, one can use
297     macro elements\index{macro elements} using linear polynomial for both pressure and velocity with a subdivided
298 gross 2793 element for the velocity. Typically, the macro element is more cost effective. The fact that pressure and velocity are represented in different way is expressed by
299     \begin{python}
300     velocity=Vector(0.0, Solution(mesh))
301     pressure=Scalar(0.0, ReducedSolution(mesh))
302     \end{python}
303 gross 2719 \end{classdesc}
304    
305     \begin{methoddesc}[StokesProblemCartesian]{initialize}{\optional{f=Data(), \optional{fixed_u_mask=Data(), \optional{eta=1, \optional{surface_stress=Data(), \optional{stress=Data()}, \optional{
306     restoration_factor=0}}}}}}
307     assigns values to the model parameters. In any call all values must be set.
308     \var{f} defines the external force $f$, \var{eta} the viscosity $\eta$,
309     \var{surface_stress} the surface stress $s$ and \var{stress} the initial stress $\sigma$.
310 gross 2851 The locations and components where the velocity is fixed are set by
311 gross 2719 the values of \var{fixed_u_mask}. \var{restoration_factor} defines the restoring force factor $\alpha$.
312     The method will try to cast the given values to appropriate
313     \Data class objects.
314     \end{methoddesc}
315    
316     \begin{methoddesc}[StokesProblemCartesian]{solve}{v,p
317     \optional{, max_iter=100 \optional{, verbose=False \optional{, usePCG=True }}}}
318     solves the problem and return approximations for velocity and pressure.
319 gross 2793 The arguments \var{v} and \var{p} define initial guess.
320     \var{v} must have function space \var{Solution(domain)} and
321     \var{p} must have function space \var{ReducedSolution(domain)}.
322     The values of \var{v} marked
323 gross 2719 by \var{fixed_u_mask} remain unchanged.
324     If \var{usePCG} is set to \True
325     reconditioned conjugate gradient method (PCG) \index{preconditioned conjugate gradient method!PCG} scheme is used. Otherwise the problem is solved generalized minimal residual method (GMRES) \index{generalized minimal residual method!GMRES}. In most cases
326     the PCG scheme is more efficient.
327     \var{max_iter} defines the maximum number of iteration steps.
328    
329     If \var{verbose} is set to \True informations on the progress of of the solver are printed.
330     \end{methoddesc}
331    
332    
333     \begin{methoddesc}[StokesProblemCartesian]{setTolerance}{\optional{tolerance=1.e-4}}
334     sets the tolerance in an appropriate norm relative to the right hand side. The tolerance must be non-negative and less than 1.
335     \end{methoddesc}
336     \begin{methoddesc}[StokesProblemCartesian]{getTolerance}{}
337     returns the current relative tolerance.
338     \end{methoddesc}
339     \begin{methoddesc}[StokesProblemCartesian]{setAbsoluteTolerance}{\optional{tolerance=0.}}
340     sets the absolute tolerance for the error in the relevant norm. The tolerance must be non-negative. Typically the
341 gross 2851 absolute tolerance is set to 0.
342 gross 2719 \end{methoddesc}
343    
344     \begin{methoddesc}[StokesProblemCartesian]{getAbsoluteTolerance}{}
345 gross 2851 returns the current absolute tolerance.
346 gross 2719 \end{methoddesc}
347    
348     \begin{methoddesc}[StokesProblemCartesian]{getSolverOptionsVelocity}{}
349 gross 2843 returns the solver options used solve the equations~(\ref{STOKES ITER STEP 1}) and~(\ref{STOKES P OPERATOR}) for velocity.
350 gross 2719 \end{methoddesc}
351    
352     \begin{methoddesc}[StokesProblemCartesian]{getSolverOptionsPressure}{}
353 gross 2843 returns the solver options used solve the preconditioner equation~(\ref{STOKES P PREC}) for pressure.
354 gross 2719 \end{methoddesc}
355    
356     \begin{methoddesc}[StokesProblemCartesian]{getSolverOptionsDiv}{}
357     set the solver options for solving the equation to project the divergence of the velocity onto the function space of pressure.
358     \end{methoddesc}
359    
360    
361     \subsection{Example: Lit Driven Cavity}
362     The following script \file{lit\hackscore driven\hackscore cavity.py}
363     \index{scripts!\file{helmholtz.py}} which is available in the \ExampleDirectory
364     illustrates the usage of the \class{StokesProblemCartesian} class to solve
365     the lit driven cavity problem:
366     \begin{python}
367     from esys.escript import *
368     from esys.finley import Rectangle
369     from esys.escript.models import StokesProblemCartesian
370     NE=25
371     dom = Rectangle(NE,NE,order=2)
372     x = dom.getX()
373     sc=StokesProblemCartesian(dom)
374     mask= (whereZero(x[0])*[1.,0]+whereZero(x[0]-1))*[1.,0] + \
375     (whereZero(x[1])*[0.,1.]+whereZero(x[1]-1))*[1.,1]
376     sc.initialize(eta=.1, fixed_u_mask= mask)
377     v=Vector(0.,Solution(dom))
378     v[0]+=whereZero(x[1]-1.)
379     p=Scalar(0.,ReducedSolution(dom))
380     v,p=sc.solve(v,p, verbose=True)
381     saveVTK("u.xml",velocity=v,pressure=p)
382     \end{python}

  ViewVC Help
Powered by ViewVC 1.1.26