1 
ksteube 
1316 
% 
2 
jgs 
102 
% $Id$ 
3 
gross 
625 
% 
4 
ksteube 
1316 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
5 
gross 
625 
% 
6 
ksteube 
1316 
% Copyright 20032007 by ACceSS MNRF 
7 


% Copyright 2007 by University of Queensland 
8 


% 
9 


% http://esscc.uq.edu.au 
10 


% Primary Business: Queensland, Australia 
11 


% Licensed under the Open Software License version 3.0 
12 


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


% 
14 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
15 


% 
16 
jgs 
102 

17 
gross 
599 
\chapter{The module \linearPDEs} 
18 
jgs 
102 

19 



20 
gross 
999 

21 


\section{Linear Partial Differential Equations} 
22 
jgs 
102 
\label{SEC LinearPDE} 
23 



24 


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


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


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

29 
gross 
660 
For a single PDE with a solution with a single component the linear PDE is defined in the 
30 
jgs 
102 
following form: 
31 


\begin{equation}\label{LINEARPDE.SINGLE.1} 
32 
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 \; . 
33 
jgs 
102 
\end{equation} 
34 
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. 
35 


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


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


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


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


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


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


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


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


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


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


\end{equation} 
49 


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


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


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

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


\begin{equation}\label{LINEARPDE.SYSTEM.1} 
56 
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} \; . 
57 
jgs 
102 
\end{equation} 
58 
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. 
59 
jgs 
102 
The natural boundary conditions \index{boundary condition!natural} take the form: 
60 


\begin{equation}\label{LINEARPDE.SYSTEM.2} 
61 
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} \;. 
62 
jgs 
102 
\end{equation} 
63 
gross 
660 
The coefficient $d$ is a \RankTwo and $y$ is a 
64 
jgs 
102 
\RankOne both in the \FunctionOnBoundary. Constraints \index{constraint} take the form 
65 


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


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


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



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


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


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


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


\end{equation} 
78 


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


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


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


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


the contact condition takes the form 
85 


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


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} \; . 
87 


\end{equation} 
88 


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


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


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


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


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


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


\end{equation} 
97 
ksteube 
1316 
In this case the the coefficient $d^{contact}$ and $y^{contact}$ are each \Scalar 
98 
jgs 
102 
both in the \FunctionOnContactZero or \FunctionOnContactOne. 
99 
gross 
625 

100 


The PDE is symmetrical \index{symmetrical} if 
101 


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


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


\end{equation} 
104 


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


\begin{eqnarray} 
106 


\label{LINEARPDE.SYSTEM.4} 
107 


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


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


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


d\hackscore{ik}=d\hackscore{ki} \\ 
111 
gross 
660 
d^{contact}\hackscore{ik}=d^{contact}\hackscore{ki} 
112 
gross 
625 
\end{eqnarray} 
113 


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


have to be inspected. 
115 



116 
gross 
999 

117 


\subsection{Classes} 
118 


\declaremodule{extension}{esys.escript.linearPDEs} 
119 
ksteube 
1316 
\modulesynopsis{Linear partial differential equation handler} 
120 
gross 
999 
The module \linearPDEs provides an interface to define and solve linear partial 
121 


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


solver capabilities in itself but hands the PDE over to 
123 


the PDE solver library defined through the \Domain of the PDE. 
124 


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


\AdvectivePDE which is derived from the \LinearPDE class 
126 


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


class which is also derived form the \LinearPDE class should be used 
128 


to define the Poisson equation \index{Poisson}. 
129 



130 


\subsection{\LinearPDE class} 
131 
ksteube 
1316 
This is the general class to define a linear PDE in \escript. We list a selection of the most 
132 
gross 
625 
important methods of the class only and refer to reference guide \ReferenceGuide for a complete list. 
133 



134 
jgs 
102 
\begin{classdesc}{LinearPDE}{domain,numEquations=0,numSolutions=0} 
135 


opens a linear, steady, second order PDE on the \Domain \var{domain}. \var{numEquations} 
136 
ksteube 
1316 
and \var{numSolutions} gives the number of equations and the number of solution components. 
137 
gross 
660 
If \var{numEquations} and \var{numSolutions} is nonpositive, the number of equations 
138 
ksteube 
1316 
and the number solutions, respectively, stay undefined until a coefficient is 
139 
gross 
660 
defined. 
140 
jgs 
102 
\end{classdesc} 
141 



142 
gross 
625 
\begin{methoddesc}[LinearPDE]{setValue}{ 
143 
gross 
660 
\optional{A}\optional{, B}, 
144 


\optional{, C}\optional{, D} 
145 


\optional{, X}\optional{, Y} 
146 


\optional{, d}\optional{, y} 
147 


\optional{, d_contact}\optional{, y_contact} 
148 


\optional{, q}\optional{, r}} 
149 
ksteube 
1316 
assigns new values to coefficients. By default all values are assumed to be zero\footnote{ 
150 
gross 
660 
In fact it is assumed they are not present by assigning the value \code{escript.Data()}. The 
151 


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


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


\end{methoddesc} 
156 



157 


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


an exception is raised. 
160 
jgs 
102 
\end{methoddesc} 
161 



162 


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


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


\end{methoddesc} 
165 



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


\end{methoddesc} 
169 



170 


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


switches the debug mode to on. 
172 


\end{methoddesc} 
173 



174 


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


switches the debug mode to on. 
176 


\end{methoddesc} 
177 



178 
gross 
625 
\begin{methoddesc}[LinearPDE]{isUsingLumping}{} 
179 
ksteube 
1316 
returns \True if \LUMPING is set as the solver for the system of linear equations. 
180 
gross 
653 
Otherwise \False is returned. 
181 
jgs 
102 
\end{methoddesc} 
182 



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



188 
gross 
653 
\begin{methoddesc}[LinearPDE]{getSolverMethodName}{} 
189 


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


\end{methoddesc} 
191 



192 


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


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


\end{methoddesc} 
195 



196 


\begin{methoddesc}[LinearPDE]{setSolverPackage}{\optional{package=LinearPDE.DEFAULT}} 
197 
gross 
660 
Set the solver package to be used by PDE library to solve the linear systems of equations. The 
198 
ksteube 
1316 
specified package may not be supported by the PDE solver library. In this case, depending on 
199 


the PDE solver, the default solver is used or an exception is thrown. 
200 
gross 
660 
If \var{package} is not specified, the default package of the PDE solver library is used. 
201 
gross 
653 
\end{methoddesc} 
202 



203 


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


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


\end{methoddesc} 
206 



207 



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


resets the tolerance for solution. The actually meaning of tolerance is 
210 
gross 
660 
depending on the underlying PDE library. In most cases, the tolerance 
211 
ksteube 
1316 
will only consider the error from solving the discrete problem but will 
212 
gross 
625 
not consider any discretization error. 
213 


\end{methoddesc} 
214 
jgs 
102 

215 
gross 
625 
\begin{methoddesc}[LinearPDE]{getTolerance}{} 
216 


returns the current tolerance of the solution 
217 
jgs 
102 
\end{methoddesc} 
218 



219 
gross 
625 
\begin{methoddesc}[LinearPDE]{getDomain}{} 
220 


returns the \Domain of the PDE. 
221 
jgs 
102 
\end{methoddesc} 
222 



223 
gross 
625 
\begin{methoddesc}[LinearPDE]{getDim}{} 
224 


returns the spatial dimension of the PDE. 
225 
jgs 
102 
\end{methoddesc} 
226 



227 
gross 
625 
\begin{methoddesc}[LinearPDE]{getNumEquations}{} 
228 


returns the number of equations. 
229 


\end{methoddesc} 
230 
jgs 
102 

231 
gross 
625 
\begin{methoddesc}[LinearPDE]{getNumSolutions}{} 
232 


returns the number of components of the solution. 
233 
jgs 
102 
\end{methoddesc} 
234 



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


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


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


are printed. 
241 
jgs 
102 
\end{methoddesc} 
242 



243 
gross 
625 
\begin{methoddesc}[LinearPDE]{getFlux}{u} 
244 


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


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



248 
gross 
625 

249 
jgs 
102 
\begin{methoddesc}[LinearPDE]{isSymmetric}{} 
250 


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


Otherwise \False is returned. 
252 


\end{methoddesc} 
253 



254 


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


indicates that the PDE is symmetric. 
256 


\end{methoddesc} 
257 



258 


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


indicates that the PDE is not symmetric. 
260 


\end{methoddesc} 
261 



262 


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


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



268 


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


\end{methoddesc} 
272 



273 


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


returns the \Operator of the PDE. 
275 


\end{methoddesc} 
276 



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


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


when building up the right hand side. 
281 


\end{methoddesc} 
282 



283 


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


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


\end{methoddesc} 
286 



287 
gross 
625 
\begin{methoddesc}[LinearPDE]{getSolution}{ 
288 


\optional{verbose=False} 
289 


\optional{, reordering=LinearPDE.NO_REORDERING} 
290 


\optional{, iter_max=1000} 
291 


\optional{, drop_tolerance=0.01} 
292 


\optional{, drop_storage=1.20} 
293 


\optional{, truncation=1} 
294 


\optional{, restart=1} 
295 


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


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


for the stiffness matrix. \var{truncation} defines the truncation. 
305 
jgs 
102 
\end{methoddesc} 
306 



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


\end{memberdesc} 
311 
jgs 
102 

312 
gross 
625 
\begin{memberdesc}[LinearPDE]{SCSL} 
313 
gross 
660 
the SCSL library by SGI,~\Ref{SCSL}\footnote{The SCSL library will only be available on SGI systems} 
314 
gross 
625 
\end{memberdesc} 
315 
jgs 
102 

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

320 
gross 
625 
\begin{memberdesc}[LinearPDE]{UMFPACK} 
321 
gross 
653 
the UMFPACK,~\Ref{UMFPACK}. Remark: UMFPACK is not parallelized. 
322 
gross 
625 
\end{memberdesc} 
323 
jgs 
102 

324 
gross 
625 
\begin{memberdesc}[LinearPDE]{PASO} 
325 
gross 
653 
the solver library of \finley, see \Sec{CHAPTER ON FINLEY}. 
326 
gross 
625 
\end{memberdesc} 
327 
jgs 
102 

328 
gross 
625 
\begin{memberdesc}[LinearPDE]{ITERATIVE} 
329 
gross 
653 
the default iterative method and preconditioner. The actually used method depends on the 
330 
ksteube 
1316 
PDE solver library and the solver package been chosen. Typically, \PCG is used for symmetric PDEs 
331 
gross 
660 
and \BiCGStab otherwise, both with \JACOBI preconditioner. 
332 
gross 
625 
\end{memberdesc} 
333 
jgs 
102 

334 
gross 
625 
\begin{memberdesc}[LinearPDE]{DIRECT} 
335 
gross 
660 
the default direct linear solver. 
336 
gross 
625 
\end{memberdesc} 
337 
jgs 
102 

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

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

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


\end{memberdesc} 
350 
jgs 
102 

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


condenses the stiffness matrix to a diagonal matrix so the solution of the linear systems becomes very cheap. It can be used when 
354 
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 
355 
gross 
660 
but is expect to converge to zero when the mesh gets finer. 
356 


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

359 
gross 
625 
\begin{memberdesc}[LinearPDE]{PRES20} 
360 
gross 
653 
the GMRES method with truncation after five residuals and 
361 
gross 
625 
restart after 20 steps, see~\Ref{WEISS}. 
362 
gross 
999 
\end{memberdesc} 
363 
gross 
625 

364 


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


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



368 
gross 
625 
\begin{memberdesc}[LinearPDE]{BICGSTAB} 
369 
gross 
660 
stabilized biconjugate gradients methods, see~\Ref{WEISS}. 
370 
jgs 
107 
\end{memberdesc} 
371 



372 
gross 
625 
\begin{memberdesc}[LinearPDE]{SSOR} 
373 
gross 
653 
symmetric successive overrelaxation method, see~\Ref{WEISS}. Typically used as preconditioner but some linear solver libraries support 
374 
gross 
660 
this as a solver. 
375 
gross 
625 
\end{memberdesc} 
376 


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



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


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


\method{getSolution} call. 
385 
gross 
653 
\end{memberdesc} 
386 



387 
gross 
625 
\begin{memberdesc}[LinearPDE]{JACOBI} 
388 
gross 
653 
the Jacobi preconditioner, see~\Ref{Saad}. 
389 


\end{memberdesc} 
390 



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


\end{memberdesc} 
395 



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


between levels. During the LUfactorization element with 
399 


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


\method{getSolution} call. 
402 
gross 
653 
\end{memberdesc} 
403 
jgs 
107 

404 
gross 
653 
\begin{memberdesc}[LinearPDE]{NO_REORDERING} 
405 


no ordering is used during factorization. 
406 


\end{memberdesc} 
407 
gross 
625 

408 
gross 
653 
\begin{memberdesc}[LinearPDE]{MINIMUM_FILL_IN} 
409 


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


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


\end{memberdesc} 
412 
gross 
625 

413 


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


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


\end{memberdesc} 
417 
gross 
625 

418 
gross 
999 
\subsection{The \Poisson Class} 
419 
jgs 
102 
The \Poisson class provides an easy way to define and solve the Poisson 
420 


equation 
421 


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


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


\end{equation} 
424 


with homogeneous boundary conditions 
425 


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


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


\end{equation} 
428 


and homogeneous constraints 
429 


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


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


\end{equation} 
432 


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

435 


\begin{classdesc}{Poisson}{domain} 
436 


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


\end{classdesc} 
438 


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


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


\end{methoddesc} 
441 
gross 
625 

442 
gross 
999 
\subsection{The \Helmholtz Class} 
443 
gross 
660 
The \Helmholtz class defines the Helmholtz problem 
444 


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


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


\end{equation} 
447 
ksteube 
1316 
with natural boundary conditions 
448 
gross 
660 
\begin{equation}\label{HZ.2} 
449 


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


\end{equation} 
451 


and constraints: 
452 


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


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


\end{equation} 
455 


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


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


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

459 
gross 
660 
\begin{classdesc}{Helmholtz}{domain} 
460 


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


\end{classdesc} 
462 


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


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. 
464 


\end{methoddesc} 
465 



466 
gross 
999 
\subsection{The \Lame Class} 
467 
gross 
660 
The \Lame class defines a Lame equation problem: 
468 


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


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


\end{equation} 
471 
ksteube 
1316 
with natural boundary conditions: 
472 
gross 
660 
\begin{equation}\label{LE.2} 
473 


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} 
474 


\end{equation} 
475 


and constraint 
476 


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


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


\end{equation} 
479 


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


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


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


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


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

485 
gross 
660 
\begin{classdesc}{Lame}{domain} 
486 


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


\end{classdesc} 
488 


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


assigns new values to 
490 


\var{lame_lambda}, 
491 


\var{lame_mu}, 
492 


\var{F}, 
493 


\var{sigma}, 
494 


\var{f}, 
495 


\var{r} and 
496 


\var{q} 
497 


By default all values are set to be zero. 
498 


\end{methoddesc} 
499 


