1 
jgs 
102 
% $Id$ 
2 
gross 
625 
% 
3 


% Copyright © 2006 by ACcESS MNRF 
4 


% \url{http://www.access.edu.au 
5 


% Primary Business: Queensland, Australia. 
6 


% Licensed under the Open Software License version 3.0 
7 


% http://www.opensource.org/licenses/osl3.0.php 
8 


% 
9 
jgs 
102 

10 
gross 
625 

11 
gross 
599 
\chapter{The module \linearPDEs} 
12 
jgs 
102 

13 


\declaremodule{extension}{linearPDEs} \modulesynopsis{Linear partial pifferential equation handler} 
14 
gross 
660 
The module \linearPDEs provides an interface to define and solve linear partial 
15 


differential equations within \escript. \linearPDEs does not provide any 
16 


solver capabilities in itself but hands the PDE over to 
17 
jgs 
102 
the PDE solver library defined through the \Domain of the PDE. 
18 


The general interface is provided through the \LinearPDE class. The 
19 


\AdvectivePDE which is derived from the \LinearPDE class 
20 


provides an interface to PDE dominated by its advective terms. The \Poisson 
21 


class which is also derived form the \LinearPDE class should be used 
22 
gross 
660 
to define the Poisson equation \index{Poisson}. 
23 
jgs 
102 

24 


\section{\LinearPDE Class} 
25 


\label{SEC LinearPDE} 
26 



27 


The \LinearPDE class is used to define a general linear, steady, second order PDE 
28 


for an unknown function $u$ on a given $\Omega$ defined through a \Domain object. 
29 


In the following $\Gamma$ denotes the boundary of the domain $\Omega$. $n$ denotes 
30 
gross 
660 
the outer normal field on $\Gamma$. 
31 
jgs 
102 

32 
gross 
660 
For a single PDE with a solution with a single component the linear PDE is defined in the 
33 
jgs 
102 
following form: 
34 


\begin{equation}\label{LINEARPDE.SINGLE.1} 
35 
gross 
660 
(A\hackscore{jl} u\hackscore{,l})\hackscore{,j}(B\hackscore{j} u)\hackscore{,j}+C\hackscore{l} u\hackscore{,l}+D u =X\hackscore{j,j}+Y \; . 
36 
jgs 
102 
\end{equation} 
37 
gross 
660 
$u_{,j}$ denotes the derivative of $u$ with respect to the $j$th spatial direction. Einstein's summation convention, ie. summation over indexes appearing twice in a term of a sum is performed, is used. 
38 


The coefficients $A$, $B$, $C$, $D$, $X$ and $Y$ have to be specified through \Data objects in the 
39 


\Function on the PDE or objects that can be converted into such \Data objects. 
40 


$A$ is a \RankTwo, $B$, $C$ and $X$ are \RankOne and $D$ and $Y$ are scalar. 
41 
jgs 
102 
The following natural 
42 


boundary conditions are considered \index{boundary condition!natural} on $\Gamma$: 
43 


\begin{equation}\label{LINEARPDE.SINGLE.2} 
44 


n\hackscore{j}(A\hackscore{jl} u\hackscore{,l}+B\hackscore{j} u)+d u=n\hackscore{j}X\hackscore{j} + y \;. 
45 


\end{equation} 
46 
gross 
660 
Notice that the coefficients $A$, $B$ and $X$ are defined in the PDE. The coefficients $d$ and $y$ are 
47 


each a \Scalar in the \FunctionOnBoundary. Constraints \index{constraint} for the solution prescribing the value of the 
48 
jgs 
102 
solution at certain locations in the domain. They have the form 
49 


\begin{equation}\label{LINEARPDE.SINGLE.3} 
50 


u=r \mbox{ where } q>0 
51 


\end{equation} 
52 


$r$ and $q$ are each \Scalar where $q$ is the characteristic function 
53 


\index{characteristic function} defining where the constraint is applied. 
54 


The constraints defined by \eqn{LINEARPDE.SINGLE.3} override any other condition set by \eqn{LINEARPDE.SINGLE.1} 
55 
gross 
660 
or \eqn{LINEARPDE.SINGLE.2}. 
56 
gross 
625 

57 
jgs 
102 
For a system of PDEs and a solution with several components the PDE has the form 
58 


\begin{equation}\label{LINEARPDE.SYSTEM.1} 
59 
gross 
660 
(A\hackscore{ijkl} u\hackscore{k,l})\hackscore{,j}(B\hackscore{ijk} u\hackscore{k})\hackscore{,j}+C\hackscore{ikl} u\hackscore{k,l}+D\hackscore{ik} u\hackscore{k} =X\hackscore{ij,j}+Y\hackscore{i} \; . 
60 
jgs 
102 
\end{equation} 
61 
gross 
660 
$A$ is a \RankFour, $B$ and $C$ are each a \RankThree, $D$ and $X$ are each a \RankTwo and $Y$ is a \RankOne. 
62 
jgs 
102 
The natural boundary conditions \index{boundary condition!natural} take the form: 
63 


\begin{equation}\label{LINEARPDE.SYSTEM.2} 
64 
gross 
625 
n\hackscore{j}(A\hackscore{ijkl} u\hackscore{k,l}+B\hackscore{ijk} u\hackscore{k})+d\hackscore{ik} u\hackscore{k}=n\hackscore{j}X\hackscore{ij}+y\hackscore{i} \;. 
65 
jgs 
102 
\end{equation} 
66 
gross 
660 
The coefficient $d$ is a \RankTwo and $y$ is a 
67 
jgs 
102 
\RankOne both in the \FunctionOnBoundary. Constraints \index{constraint} take the form 
68 


\begin{equation}\label{LINEARPDE.SYSTEM.3} 
69 


u\hackscore{i}=r\hackscore{i} \mbox{ where } q\hackscore{i}>0 
70 


\end{equation} 
71 
gross 
660 
$r$ and $q$ are each \RankOne. Notice that not necessarily all components must 
72 
gross 
625 
have a constraint at all locations. 
73 



74 
jgs 
102 
\LinearPDE also supports solution discontinuities \index{discontinuity} over contact region $\Gamma^{contact}$ 
75 


in the domain $\Omega$. To specify the conditions across the discontinuity we are using the 
76 


generalised flux $J$ which is in the case of a systems of PDEs and several components of the solution 
77 
gross 
660 
defined as 
78 
jgs 
102 
\begin{equation}\label{LINEARPDE.SYSTEM.5} 
79 


J\hackscore{ij}=A\hackscore{ijkl}u\hackscore{k,l}+B\hackscore{ijk}u\hackscore{k}X\hackscore{ij} 
80 


\end{equation} 
81 


For the case of single solution component and single PDE $J$ is defined 
82 


\begin{equation}\label{LINEARPDE.SINGLE.5} 
83 


J\hackscore{j}=A\hackscore{jl}u\hackscore{,l}+B\hackscore{j}u\hackscore{k}X\hackscore{j} 
84 


\end{equation} 
85 
gross 
660 
In the context of discontinuities \index{discontinuity} $n$ denotes the normal on the 
86 
jgs 
102 
discontinuity pointing from side 0 towards side 1. For a system of PDEs 
87 


the contact condition takes the form 
88 


\begin{equation}\label{LINEARPDE.SYSTEM.6} 
89 


n\hackscore{j} J^{0}\hackscore{ij}=n\hackscore{j} J^{1}\hackscore{ij}=y^{contact}\hackscore{i}  d^{contact}\hackscore{ik} [u]\hackscore{k} \; . 
90 


\end{equation} 
91 


where $J^{0}$ and $J^{1}$ are the fluxes on side $0$ and side $1$ of the 
92 


discontinuity $\Gamma^{contact}$, respectively. $[u]$, which is the difference 
93 


of the solution at side 1 and at side 0, denotes the jump of $u$ across $\Gamma^{contact}$. 
94 
gross 
660 
The coefficient $d^{contact}$ is a \RankTwo and $y^{contact}$ is a 
95 
jgs 
102 
\RankOne both in the \FunctionOnContactZero or \FunctionOnContactOne. 
96 


In case of a single PDE and a single component solution the contact condition takes the form 
97 


\begin{equation}\label{LINEARPDE.SINGLE.6} 
98 


n\hackscore{j} J^{0}\hackscore{j}=n\hackscore{j} J^{1}\hackscore{j}=y^{contact}  d^{contact}[u] 
99 


\end{equation} 
100 


In this case the the coefficient $d^{contact}$ and $y^{contact}$ are eaach \Scalar 
101 


both in the \FunctionOnContactZero or \FunctionOnContactOne. 
102 
gross 
625 

103 


The PDE is symmetrical \index{symmetrical} if 
104 


\begin{equation}\label{LINEARPDE.SINGLE.4} 
105 


A\hackscore{jl}=A\hackscore{lj} \mbox{ and } B\hackscore{j}=C\hackscore{j} 
106 


\end{equation} 
107 


The system of PDEs is symmetrical \index{symmetrical} if 
108 


\begin{eqnarray} 
109 


\label{LINEARPDE.SYSTEM.4} 
110 


A\hackscore{ijkl}=A\hackscore{klij} \\ 
111 


B\hackscore{ijk}=C\hackscore{kij} \\ 
112 


D\hackscore{ik}=D\hackscore{ki} \\ 
113 


d\hackscore{ik}=d\hackscore{ki} \\ 
114 
gross 
660 
d^{contact}\hackscore{ik}=d^{contact}\hackscore{ki} 
115 
gross 
625 
\end{eqnarray} 
116 


Note that different from the scalar case~\eqn{LINEARPDE.SINGLE.4} now the coefficients $D$, $d$ abd $d^{contact}$ 
117 


have to be inspected. 
118 



119 


\section{\LinearPDE class} 
120 
gross 
660 
This is the general class to define a linear PDE in \escript. We list a selction of the most 
121 
gross 
625 
important methods of the class only and refer to reference guide \ReferenceGuide for a complete list. 
122 



123 
jgs 
102 
\begin{classdesc}{LinearPDE}{domain,numEquations=0,numSolutions=0} 
124 


opens a linear, steady, second order PDE on the \Domain \var{domain}. \var{numEquations} 
125 


and \var{numSolutions} gives the number of equations and the number of solutiopn components. 
126 
gross 
660 
If \var{numEquations} and \var{numSolutions} is nonpositive, the number of equations 
127 
jgs 
102 
and the number solutions, respctively, stay undefined until a coefficient is 
128 
gross 
660 
defined. 
129 
jgs 
102 
\end{classdesc} 
130 



131 
gross 
625 
\begin{methoddesc}[LinearPDE]{setValue}{ 
132 
gross 
660 
\optional{A}\optional{, B}, 
133 


\optional{, C}\optional{, D} 
134 


\optional{, X}\optional{, Y} 
135 


\optional{, d}\optional{, y} 
136 


\optional{, d_contact}\optional{, y_contact} 
137 


\optional{, q}\optional{, r}} 
138 


assigns new values to coefficients. By dafault all values are assumed to be zero\footnote{ 
139 


In fact it is assumed they are not present by assigning the value \code{escript.Data()}. The 
140 


can by used by the solver library to reduce computational costs. 
141 


} 
142 
gross 
625 
If the new coefficient value is not a \Data object, it is converted into a \Data object in the 
143 
jgs 
102 
appropriate \FunctionSpace. 
144 


\end{methoddesc} 
145 



146 


\begin{methoddesc}[LinearPDE]{getCoefficient}{name} 
147 
gross 
660 
return the value assigned to coefficient \var{name}. If \var{name} is not a valid name 
148 


an exception is raised. 
149 
jgs 
102 
\end{methoddesc} 
150 



151 


\begin{methoddesc}[LinearPDE]{getShapeOfCoefficient}{name} 
152 


returns the shape of coefficient \var{name} even if no value has been assigned to it. 
153 


\end{methoddesc} 
154 



155 
gross 
625 
\begin{methoddesc}[LinearPDE]{getFunctionSpaceForCoefficient}{name} 
156 
jgs 
102 
returns the \FunctionSpace of coefficient \var{name} even if no value has been assigned to it. 
157 


\end{methoddesc} 
158 



159 


\begin{methoddesc}[LinearPDE]{setDebugOn}{} 
160 


switches the debug mode to on. 
161 


\end{methoddesc} 
162 



163 


\begin{methoddesc}[LinearPDE]{setDebugOff}{} 
164 


switches the debug mode to on. 
165 


\end{methoddesc} 
166 



167 
gross 
625 
\begin{methoddesc}[LinearPDE]{isUsingLumping}{} 
168 
gross 
653 
returns \True if \LUMPING is set as the solver for the system of lienar equations. 
169 


Otherwise \False is returned. 
170 
jgs 
102 
\end{methoddesc} 
171 



172 
gross 
653 
\begin{methoddesc}[LinearPDE]{setSolverMethod}{\optional{solver=LinearPDE.DEFAULT}\optional{, preconditioner=LinearPDE.DEFAULT}} 
173 
gross 
625 
sets the solver method and preconditioner to be used. It is pointed out that a PDE solver library 
174 
gross 
660 
may not know the specified solver method but may choose a similar method and preconditioner. 
175 
jgs 
102 
\end{methoddesc} 
176 



177 
gross 
653 
\begin{methoddesc}[LinearPDE]{getSolverMethodName}{} 
178 


returns the name of the solver method and preconditioner which is currently been used. 
179 


\end{methoddesc} 
180 



181 


\begin{methoddesc}[LinearPDE]{getSolverMethod}{} 
182 


returns the solver method and preconditioner which is currently been used. 
183 


\end{methoddesc} 
184 



185 


\begin{methoddesc}[LinearPDE]{setSolverPackage}{\optional{package=LinearPDE.DEFAULT}} 
186 
gross 
660 
Set the solver package to be used by PDE library to solve the linear systems of equations. The 
187 
gross 
653 
specified package may not be supported by the PDE solver library. In this case, dependng on 
188 


the PDE solver, the default solver is used or an exeption is thrown. 
189 
gross 
660 
If \var{package} is not specified, the default package of the PDE solver library is used. 
190 
gross 
653 
\end{methoddesc} 
191 



192 


\begin{methoddesc}[LinearPDE]{getSolverPackage}{} 
193 


returns the linear solver package currently by the PDE solver library 
194 


\end{methoddesc} 
195 



196 



197 
gross 
625 
\begin{methoddesc}[LinearPDE]{setTolerance}{\optional{tol=1.e8}}: 
198 


resets the tolerance for solution. The actually meaning of tolerance is 
199 
gross 
660 
depending on the underlying PDE library. In most cases, the tolerance 
200 
gross 
625 
will only consider the error from solving the discerete problem but will 
201 


not consider any discretization error. 
202 


\end{methoddesc} 
203 
jgs 
102 

204 
gross 
625 
\begin{methoddesc}[LinearPDE]{getTolerance}{} 
205 


returns the current tolerance of the solution 
206 
jgs 
102 
\end{methoddesc} 
207 



208 
gross 
625 
\begin{methoddesc}[LinearPDE]{getDomain}{} 
209 


returns the \Domain of the PDE. 
210 
jgs 
102 
\end{methoddesc} 
211 



212 
gross 
625 
\begin{methoddesc}[LinearPDE]{getDim}{} 
213 


returns the spatial dimension of the PDE. 
214 
jgs 
102 
\end{methoddesc} 
215 



216 
gross 
625 
\begin{methoddesc}[LinearPDE]{getNumEquations}{} 
217 


returns the number of equations. 
218 


\end{methoddesc} 
219 
jgs 
102 

220 
gross 
625 
\begin{methoddesc}[LinearPDE]{getNumSolutions}{} 
221 


returns the number of components of the solution. 
222 
jgs 
102 
\end{methoddesc} 
223 



224 
gross 
625 
\begin{methoddesc}[LinearPDE]{checkSymmetry}{verbose=\False} 
225 
gross 
660 
returns \True if the PDE is symmetric and \False otherwise. 
226 


The method is very computational expensive and should only be 
227 
gross 
625 
called for testing purposes. The symmetry flag is not altered. 
228 


If \var{verbose}=\True information about where symmetry is violated 
229 


are printed. 
230 
jgs 
102 
\end{methoddesc} 
231 



232 
gross 
625 
\begin{methoddesc}[LinearPDE]{getFlux}{u} 
233 


returns the flux $J\hackscore{ij}$ \index{flux} for given solution \var{u} 
234 


defined by \eqn{LINEARPDE.SYSTEM.5} and \eqn{LINEARPDE.SINGLE.5}, respectively. 
235 
jgs 
102 
\end{methoddesc} 
236 



237 
gross 
625 

238 
jgs 
102 
\begin{methoddesc}[LinearPDE]{isSymmetric}{} 
239 


returns \True if the PDE has been indicated to be symmetric. 
240 


Otherwise \False is returned. 
241 


\end{methoddesc} 
242 



243 


\begin{methoddesc}[LinearPDE]{setSymmetryOn}{} 
244 


indicates that the PDE is symmetric. 
245 


\end{methoddesc} 
246 



247 


\begin{methoddesc}[LinearPDE]{setSymmetryOff}{} 
248 


indicates that the PDE is not symmetric. 
249 


\end{methoddesc} 
250 



251 


\begin{methoddesc}[LinearPDE]{setReducedOrderOn}{} 
252 
gross 
660 
switches on the reduction of polynomial order for the solution and equation evaluation even if 
253 


a quadratic or higher interpolation order is defined in the \Domain. This feature may not 
254 
gross 
625 
be supported by all PDE libraries. 
255 
jgs 
102 
\end{methoddesc} 
256 



257 


\begin{methoddesc}[LinearPDE]{setReducedOrderOff}{} 
258 
gross 
660 
switches off the reduction of polynomial order for the solution and 
259 
jgs 
102 
equation evaluation. 
260 


\end{methoddesc} 
261 



262 


\begin{methoddesc}[LinearPDE]{getOperator}{} 
263 


returns the \Operator of the PDE. 
264 


\end{methoddesc} 
265 



266 
gross 
625 
\begin{methoddesc}[LinearPDE]{getRightHandSide}{} 
267 
jgs 
102 
returns the right hand side of the PDE as a \Data object. If 
268 


\var{ignoreConstraint}=\True the constraints are not considered 
269 


when building up the right hand side. 
270 


\end{methoddesc} 
271 



272 


\begin{methoddesc}[LinearPDE]{getSystem}{} 
273 


returns the \Operator and right hand side of the PDE. 
274 


\end{methoddesc} 
275 



276 
gross 
625 
\begin{methoddesc}[LinearPDE]{getSolution}{ 
277 


\optional{verbose=False} 
278 


\optional{, reordering=LinearPDE.NO_REORDERING} 
279 


\optional{, iter_max=1000} 
280 


\optional{, drop_tolerance=0.01} 
281 


\optional{, drop_storage=1.20} 
282 


\optional{, truncation=1} 
283 


\optional{, restart=1} 
284 


} 
285 
gross 
653 
returns (an approximation of) the solution of the PDE. If \code{verbose=\True} some information during the solution process printed. 
286 
gross 
660 
\var{reordering} selects a reordering methods that is applied before or during the solution process 
287 
gross 
653 
(=\NOREORDERING ,\MINIMUMFILLIN ,\NESTEDDESCTION). 
288 
gross 
660 
\var{iter_max} specifies the maximum number of iteration steps that are allowed to reach the specified tolerance. 
289 
gross 
625 
\var{drop_tolerance} specifies a relative tolerance for small elements to be dropped when building a preconditioner 
290 
gross 
653 
(eg. in \ILUT). \var{drop_storage} limits the extra storage allowed when building a preconditioner 
291 
gross 
660 
(eg. in \ILUT). The extra storage is given relative to the size of the stiffness matrix, eg. 
292 


\var{drop_storage=1.2} will allow the preconditioner to use the $1.2$ fold storage space than used 
293 


for the stiffness matrix. \var{truncation} defines the truncation. 
294 
jgs 
102 
\end{methoddesc} 
295 



296 
gross 
625 
\begin{memberdesc}[LinearPDE]{DEFAULT} 
297 
gross 
660 
default method, preconditioner or package to be used to solve the PDE. An appropriate method should be 
298 
gross 
625 
chosen by the used PDE solver library. 
299 


\end{memberdesc} 
300 
jgs 
102 

301 
gross 
625 
\begin{memberdesc}[LinearPDE]{SCSL} 
302 
gross 
660 
the SCSL library by SGI,~\Ref{SCSL}\footnote{The SCSL library will only be available on SGI systems} 
303 
gross 
625 
\end{memberdesc} 
304 
jgs 
102 

305 
gross 
625 
\begin{memberdesc}[LinearPDE]{MKL} 
306 
gross 
653 
the MKL library by Intel,~\Ref{MKL}\footnote{The MKL library will only be available when the intel compilation environment is used.}. 
307 
gross 
625 
\end{memberdesc} 
308 
jgs 
102 

309 
gross 
625 
\begin{memberdesc}[LinearPDE]{UMFPACK} 
310 
gross 
653 
the UMFPACK,~\Ref{UMFPACK}. Remark: UMFPACK is not parallelized. 
311 
gross 
625 
\end{memberdesc} 
312 
jgs 
102 

313 
gross 
625 
\begin{memberdesc}[LinearPDE]{PASO} 
314 
gross 
653 
the solver library of \finley, see \Sec{CHAPTER ON FINLEY}. 
315 
gross 
625 
\end{memberdesc} 
316 
jgs 
102 

317 
gross 
625 
\begin{memberdesc}[LinearPDE]{ITERATIVE} 
318 
gross 
653 
the default iterative method and preconditioner. The actually used method depends on the 
319 
gross 
660 
PDE solver library and the solver package been choosen. Typically, \PCG is used for symmetric PDEs 
320 


and \BiCGStab otherwise, both with \JACOBI preconditioner. 
321 
gross 
625 
\end{memberdesc} 
322 
jgs 
102 

323 
gross 
625 
\begin{memberdesc}[LinearPDE]{DIRECT} 
324 
gross 
660 
the default direct linear solver. 
325 
gross 
625 
\end{memberdesc} 
326 
jgs 
102 

327 
gross 
625 
\begin{memberdesc}[LinearPDE]{CHOLEVSKY} 
328 
gross 
660 
direct solver based on Cholevsky factorization (or similar), see~\Ref{Saad}. The solver will require a symmetric PDE. 
329 
gross 
625 
\end{memberdesc} 
330 
jgs 
110 

331 
gross 
625 
\begin{memberdesc}[LinearPDE]{PCG} 
332 
gross 
653 
preconditioned conjugate gradient method, see~\Ref{WEISS}\index{linear solver!PCG}\index{PCG}. The solver will require a symmetric PDE. 
333 
gross 
625 
\end{memberdesc} 
334 
jgs 
110 

335 
gross 
625 
\begin{memberdesc}[LinearPDE]{GMRES} 
336 
gross 
653 
the GMRES method, see~\Ref{WEISS}\index{linear solver!GMRES}\index{GMRES}. Truncation and restart are controlled by the parameters 
337 
gross 
625 
\var{truncation} and \var{restart} of \method{getSolution}. 
338 


\end{memberdesc} 
339 
jgs 
102 

340 
gross 
625 
\begin{memberdesc}[LinearPDE]{LUMPING} 
341 
gross 
660 
uses lumping to solve the system of linear equations~\index{linear solver!lumping}\index{lumping}. This solver technique 
342 


condenses the stiffness matrix to a diagonal matrix so the solution of the linear systems becomes very cheap. It can be used when 
343 
gross 
653 
only \var{D} is present but in any case has to applied with care. The difference in the solutions with and without lumping can be significant 
344 
gross 
660 
but is expect to converge to zero when the mesh gets finer. 
345 


Lumping does not use the linear system solver library. 
346 
gross 
625 
\end{memberdesc} 
347 
jgs 
107 

348 
gross 
625 
\begin{memberdesc}[LinearPDE]{PRES20} 
349 
gross 
653 
the GMRES method with truncation after five residuals and 
350 
gross 
625 
restart after 20 steps, see~\Ref{WEISS}. 
351 
gross 
653 
\end{memberdesc}[LinearPDE]{CR} 
352 
gross 
625 

353 


\begin{memberdesc}[LinearPDE]{CGS} 
354 


conjugate gradient squared method, see~\Ref{WEISS}. 
355 
jgs 
107 
\end{memberdesc} 
356 



357 
gross 
625 
\begin{memberdesc}[LinearPDE]{BICGSTAB} 
358 
gross 
660 
stabilized biconjugate gradients methods, see~\Ref{WEISS}. 
359 
jgs 
107 
\end{memberdesc} 
360 



361 
gross 
625 
\begin{memberdesc}[LinearPDE]{SSOR} 
362 
gross 
653 
symmetric successive overrelaxation method, see~\Ref{WEISS}. Typically used as preconditioner but some linear solver libraries support 
363 
gross 
660 
this as a solver. 
364 
gross 
625 
\end{memberdesc} 
365 


\begin{memberdesc}[LinearPDE]{ILU0} 
366 
gross 
660 
the incomplete LU factorization preconditioner with no fillin, see~\Ref{Saad}. 
367 
gross 
653 
\end{memberdesc} 
368 



369 
gross 
625 
\begin{memberdesc}[LinearPDE]{ILUT} 
370 
gross 
653 
the incomplete LU factorization preconditioner with fillin, see~\Ref{Saad}. During the LUfactorization element with 
371 


relative size less then \var{drop_tolerance} are dropped. Moreover, the size of the LUfactorization is restricted to the 
372 
gross 
660 
\var{drop_storage}fold of the stiffness matrix. \var{drop_tolerance} and \var{drop_storage} are both set in the 
373 


\method{getSolution} call. 
374 
gross 
653 
\end{memberdesc} 
375 



376 
gross 
625 
\begin{memberdesc}[LinearPDE]{JACOBI} 
377 
gross 
653 
the Jacobi preconditioner, see~\Ref{Saad}. 
378 


\end{memberdesc} 
379 



380 
gross 
625 
\begin{memberdesc}[LinearPDE]{AMG} 
381 
gross 
660 
the algebraicmulti grid method, see~\Ref{AMG}. This method can be used as linear solver method but is more robust when used 
382 
gross 
653 
in a preconditioner. 
383 


\end{memberdesc} 
384 



385 
gross 
625 
\begin{memberdesc}[LinearPDE]{RILU} 
386 
gross 
653 
recursive incomplete LU factorization preconditioner, see~\Ref{RILU}. This method is similar to \ILUT but uses smoothing 
387 


between levels. During the LUfactorization element with 
388 


relative size less then \var{drop_tolerance} are dropped. Moreover, the size of the LUfactorization is restricted to the 
389 
gross 
660 
\var{drop_storage}fold of the stiffness matrix. \var{drop_tolerance} and \var{drop_storage} are both set in the 
390 


\method{getSolution} call. 
391 
gross 
653 
\end{memberdesc} 
392 
jgs 
107 

393 
gross 
653 
\begin{memberdesc}[LinearPDE]{NO_REORDERING} 
394 


no ordering is used during factorization. 
395 


\end{memberdesc} 
396 
gross 
625 

397 
gross 
653 
\begin{memberdesc}[LinearPDE]{MINIMUM_FILL_IN} 
398 


applies reordering before factorization using a fillin minimization strategy. You have to check with the particular solver library or 
399 


linear solver package if this is supported. In any case, it is advisable to apply reordering on the mesh to minimize fillin. 
400 


\end{memberdesc} 
401 
gross 
625 

402 


\begin{memberdesc}[LinearPDE]{NESTED_DISSECTION} 
403 
gross 
653 
applies reordering before factorization using a nested dissection strategy. You have to check with the particular solver library or 
404 


linear solver package if this is supported. In any case, it is advisable to apply reordering on the mesh to minimize fillin. 
405 


\end{memberdesc} 
406 
gross 
625 

407 
jgs 
102 
\section{The \Poisson Class} 
408 


The \Poisson class provides an easy way to define and solve the Poisson 
409 


equation 
410 


\begin{equation}\label{POISSON.1} 
411 


u\hackscore{,ii}=f\; . 
412 


\end{equation} 
413 


with homogeneous boundary conditions 
414 


\begin{equation}\label{POISSON.2} 
415 


n\hackscore{i}u\hackscore{,i}=0 
416 


\end{equation} 
417 


and homogeneous constraints 
418 


\begin{equation}\label{POISSON.3} 
419 


u=0 \mbox{ where } q>0 
420 


\end{equation} 
421 


$f$ has to be a \Scalar in the \Function and $q$ must be 
422 
gross 
660 
a \Scalar in the \SolutionFS. 
423 
jgs 
102 

424 


\begin{classdesc}{Poisson}{domain} 
425 


opens a Poisson equation on the \Domain domain. \Poisson is derived from \LinearPDE. 
426 


\end{classdesc} 
427 


\begin{methoddesc}[Poisson]{setValue}{f=escript.Data(),q=escript.Data()} 
428 


assigns new values to \var{f} and \var{q}. 
429 


\end{methoddesc} 
430 
gross 
625 

431 


\section{The \Helmholtz Class} 
432 
gross 
660 
The \Helmholtz class defines the Helmholtz problem 
433 


\begin{equation}\label{HZ.1} 
434 


\omega \; u  (k\; u\hackscore{,j})\hackscore{,j} = f 
435 


\end{equation} 
436 


with natural boundary conditons 
437 


\begin{equation}\label{HZ.2} 
438 


k\; u\hackscore{,j} n\hackscore{,j} = g \alpha \; u 
439 


\end{equation} 
440 


and constraints: 
441 


\begin{equation}\label{HZ.3} 
442 


u=r \mbox{ where } q>0 
443 


\end{equation} 
444 


$\omega$, $k$, $f$ have to be a \Scalar in the \Function, 
445 


$g$ and $\alpha$ must be a \Scalar in the \FunctionOnBoundary, 
446 


and $q$ and $r$ must be a \Scalar in the \SolutionFS or must be mapped or interpolated into the particular \FunctionSpace. 
447 
gross 
625 

448 
gross 
660 
\begin{classdesc}{Helmholtz}{domain} 
449 


opens a Helmholtz equation on the \Domain domain. \Helmholtz is derived from \LinearPDE. 
450 


\end{classdesc} 
451 


\begin{methoddesc}[Helmholtz]{setValue}{ \optional{omega} \optional{, k} \optional{, f} \optional{, alpha} \optional{, g} \optional{, r} \optional{, q}} 
452 


assigns new values to \var{omega}, \var{k}, \var{f}, \var{alpha}, \var{g}, \var{r}, \var{q}. By default all values are set to be zero. 
453 


\end{methoddesc} 
454 



455 
gross 
625 
\section{The \Lame Class} 
456 
gross 
660 
The \Lame class defines a Lame equation problem: 
457 


\begin{equation}\label{LE.1} 
458 


\mu (u\hackscore{i,j}+u\hackscore{j,i})+\lambda u\hackscore{k,k})\hackscore{j} = F\hackscore{i}\sigma\hackscore{ij,j} 
459 


\end{equation} 
460 


with natural boundary conditons: 
461 


\begin{equation}\label{LE.2} 
462 


n\hackscore{j}(\mu \; (u\hackscore{i,j}+u\hackscore{j,i})+\lambda*u\hackscore{k,k}) = f\hackscore{i}+n\hackscore{j}\sigma\hackscore{ij} 
463 


\end{equation} 
464 


and constraint 
465 


\begin{equation}\label{LE.3} 
466 


u\hackscore{i}=r\hackscore{i} \mbox{ where } q\hackscore{i}>0 
467 


\end{equation} 
468 


$\mu$, $\lambda$ have to be a \Scalar in the \Function, 
469 


$F$ has to be a \Vector in the \Function, 
470 


$\sigma$ has to be a \Tensor in the \Function, 
471 


$f$ must be a \Vector in the \FunctionOnBoundary, 
472 


and $q$ and $r$ must be a \Vector in the \SolutionFS or must be mapped or interpolated into the particular \FunctionSpace. 
473 
gross 
625 

474 
gross 
660 
\begin{classdesc}{Lame}{domain} 
475 


opens a Lame equation on the \Domain domain. \Lame is derived from \LinearPDE. 
476 


\end{classdesc} 
477 


\begin{methoddesc}[Lame]{setValue}{ \optional{lame_lambda} \optional{, lame_mu} \optional{, F} \optional{, sigma} \optional{, f} \optional{, r} \optional{, q}} 
478 


assigns new values to 
479 


\var{lame_lambda}, 
480 


\var{lame_mu}, 
481 


\var{F}, 
482 


\var{sigma}, 
483 


\var{f}, 
484 


\var{r} and 
485 


\var{q} 
486 


By default all values are set to be zero. 
487 


\end{methoddesc} 
488 


