1 

2 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
3 
% 
4 
% Copyright (c) 20032008 by University of Queensland 
5 
% Earth Systems Science Computational Center (ESSCC) 
6 
% http://www.uq.edu.au/esscc 
7 
% 
8 
% Primary Business: Queensland, Australia 
9 
% Licensed under the Open Software License version 3.0 
10 
% http://www.opensource.org/licenses/osl3.0.php 
11 
% 
12 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
13 

14 

15 
\chapter{The Module \linearPDEs} 
16 

17 

18 

19 
\section{Linear Partial Differential Equations} 
20 
\label{SEC LinearPDE} 
21 

22 
The \LinearPDE class is used to define a general linear, steady, second order PDE 
23 
for an unknown function $u$ on a given $\Omega$ defined through a \Domain object. 
24 
In the following $\Gamma$ denotes the boundary of the domain $\Omega$. $n$ denotes 
25 
the outer normal field on $\Gamma$. 
26 

27 
For a single PDE with a solution with a single component the linear PDE is defined in the 
28 
following form: 
29 
\begin{equation}\label{LINEARPDE.SINGLE.1} 
30 
(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 \; . 
31 
\end{equation} 
32 
$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. 
33 
The coefficients $A$, $B$, $C$, $D$, $X$ and $Y$ have to be specified through \Data objects in the 
34 
\Function on the PDE or objects that can be converted into such \Data objects. 
35 
$A$ is a \RankTwo, $B$, $C$ and $X$ are \RankOne and $D$ and $Y$ are scalar. 
36 
The following natural 
37 
boundary conditions are considered \index{boundary condition!natural} on $\Gamma$: 
38 
\begin{equation}\label{LINEARPDE.SINGLE.2} 
39 
n\hackscore{j}(A\hackscore{jl} u\hackscore{,l}+B\hackscore{j} u)+d u=n\hackscore{j}X\hackscore{j} + y \;. 
40 
\end{equation} 
41 
Notice that the coefficients $A$, $B$ and $X$ are defined in the PDE. The coefficients $d$ and $y$ are 
42 
each a \Scalar in the \FunctionOnBoundary. Constraints \index{constraint} for the solution prescribing the value of the 
43 
solution at certain locations in the domain. They have the form 
44 
\begin{equation}\label{LINEARPDE.SINGLE.3} 
45 
u=r \mbox{ where } q>0 
46 
\end{equation} 
47 
$r$ and $q$ are each \Scalar where $q$ is the characteristic function 
48 
\index{characteristic function} defining where the constraint is applied. 
49 
The constraints defined by \eqn{LINEARPDE.SINGLE.3} override any other condition set by \eqn{LINEARPDE.SINGLE.1} 
50 
or \eqn{LINEARPDE.SINGLE.2}. 
51 

52 
For a system of PDEs and a solution with several components the PDE has the form 
53 
\begin{equation}\label{LINEARPDE.SYSTEM.1} 
54 
(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} \; . 
55 
\end{equation} 
56 
$A$ is a \RankFour, $B$ and $C$ are each a \RankThree, $D$ and $X$ are each a \RankTwo and $Y$ is a \RankOne. 
57 
The natural boundary conditions \index{boundary condition!natural} take the form: 
58 
\begin{equation}\label{LINEARPDE.SYSTEM.2} 
59 
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} \;. 
60 
\end{equation} 
61 
The coefficient $d$ is a \RankTwo and $y$ is a 
62 
\RankOne both in the \FunctionOnBoundary. Constraints \index{constraint} take the form 
63 
\begin{equation}\label{LINEARPDE.SYSTEM.3} 
64 
u\hackscore{i}=r\hackscore{i} \mbox{ where } q\hackscore{i}>0 
65 
\end{equation} 
66 
$r$ and $q$ are each \RankOne. Notice that not necessarily all components must 
67 
have a constraint at all locations. 
68 

69 
\LinearPDE also supports solution discontinuities \index{discontinuity} over contact region $\Gamma^{contact}$ 
70 
in the domain $\Omega$. To specify the conditions across the discontinuity we are using the 
71 
generalised flux $J$ which is in the case of a systems of PDEs and several components of the solution 
72 
defined as 
73 
\begin{equation}\label{LINEARPDE.SYSTEM.5} 
74 
J\hackscore{ij}=A\hackscore{ijkl}u\hackscore{k,l}+B\hackscore{ijk}u\hackscore{k}X\hackscore{ij} 
75 
\end{equation} 
76 
For the case of single solution component and single PDE $J$ is defined 
77 
\begin{equation}\label{LINEARPDE.SINGLE.5} 
78 
J\hackscore{j}=A\hackscore{jl}u\hackscore{,l}+B\hackscore{j}u\hackscore{k}X\hackscore{j} 
79 
\end{equation} 
80 
In the context of discontinuities \index{discontinuity} $n$ denotes the normal on the 
81 
discontinuity pointing from side 0 towards side 1. For a system of PDEs 
82 
the contact condition takes the form 
83 
\begin{equation}\label{LINEARPDE.SYSTEM.6} 
84 
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} \; . 
85 
\end{equation} 
86 
where $J^{0}$ and $J^{1}$ are the fluxes on side $0$ and side $1$ of the 
87 
discontinuity $\Gamma^{contact}$, respectively. $[u]$, which is the difference 
88 
of the solution at side 1 and at side 0, denotes the jump of $u$ across $\Gamma^{contact}$. 
89 
The coefficient $d^{contact}$ is a \RankTwo and $y^{contact}$ is a 
90 
\RankOne both in the \FunctionOnContactZero or \FunctionOnContactOne. 
91 
In case of a single PDE and a single component solution the contact condition takes the form 
92 
\begin{equation}\label{LINEARPDE.SINGLE.6} 
93 
n\hackscore{j} J^{0}\hackscore{j}=n\hackscore{j} J^{1}\hackscore{j}=y^{contact}  d^{contact}[u] 
94 
\end{equation} 
95 
In this case the the coefficient $d^{contact}$ and $y^{contact}$ are each \Scalar 
96 
both in the \FunctionOnContactZero or \FunctionOnContactOne. 
97 

98 
The PDE is symmetrical \index{symmetrical} if 
99 
\begin{equation}\label{LINEARPDE.SINGLE.4} 
100 
A\hackscore{jl}=A\hackscore{lj} \mbox{ and } B\hackscore{j}=C\hackscore{j} 
101 
\end{equation} 
102 
The system of PDEs is symmetrical \index{symmetrical} if 
103 
\begin{eqnarray} 
104 
\label{LINEARPDE.SYSTEM.4} 
105 
A\hackscore{ijkl}&=&A\hackscore{klij} \\ 
106 
B\hackscore{ijk}&=&C\hackscore{kij} \\ 
107 
D\hackscore{ik}&=&D\hackscore{ki} \\ 
108 
d\hackscore{ik}&=&d\hackscore{ki} \\ 
109 
d^{contact}\hackscore{ik}&=&d^{contact}\hackscore{ki} 
110 
\end{eqnarray} 
111 
Note that in contrast with the scalar case~\eqn{LINEARPDE.SINGLE.4} now the coefficients $D$, $d$ abd $d^{contact}$ 
112 
have to be inspected. 
113 

114 

115 
\subsection{Classes} 
116 
\declaremodule{extension}{esys.escript.linearPDEs} 
117 
\modulesynopsis{Linear partial differential equation handler} 
118 
The module \linearPDEs provides an interface to define and solve linear partial 
119 
differential equations within \escript. The module \linearPDEs does not provide any 
120 
solver capabilities in itself but hands the PDE over to 
121 
the PDE solver library defined through the \Domain of the PDE. 
122 
The general interface is provided through the \LinearPDE class. The 
123 
\AdvectivePDE which is derived from the \LinearPDE class 
124 
provides an interface to a PDE dominated by its advective terms. The \Poisson 
125 
class which is also derived form the \LinearPDE class should be used 
126 
to define the Poisson equation \index{Poisson}. 
127 

128 
\subsection{\LinearPDE class} 
129 
This is the general class to define a linear PDE in \escript. We list a selection of the most 
130 
important methods of the class. For a complete list, see the reference at \ReferenceGuide. 
131 

132 
\begin{classdesc}{LinearPDE}{domain,numEquations=0,numSolutions=0} 
133 
opens a linear, steady, second order PDE on the \Domain \var{domain}. \var{numEquations} 
134 
and \var{numSolutions} gives the number of equations and the number of solution components. 
135 
If \var{numEquations} and \var{numSolutions} is nonpositive, the number of equations 
136 
and the number solutions, respectively, stay undefined until a coefficient is 
137 
defined. 
138 
\end{classdesc} 
139 

140 
\subsubsection{\LinearPDE methods} 
141 

142 
\begin{methoddesc}[LinearPDE]{setValue}{ 
143 
\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 
assigns new values to coefficients. By default all values are assumed to be zero\footnote{ 
150 
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 
If the new coefficient value is not a \Data object, it is converted into a \Data object in the 
154 
appropriate \FunctionSpace. 
155 
\end{methoddesc} 
156 

157 
\begin{methoddesc}[LinearPDE]{getCoefficient}{name} 
158 
return the value assigned to coefficient \var{name}. If \var{name} is not a valid name 
159 
an exception is raised. 
160 
\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 
\begin{methoddesc}[LinearPDE]{getFunctionSpaceForCoefficient}{name} 
167 
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 on debug mode. 
172 
\end{methoddesc} 
173 

174 
\begin{methoddesc}[LinearPDE]{setDebugOff}{} 
175 
switches off debug mode. 
176 
\end{methoddesc} 
177 

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

183 
\begin{methoddesc}[LinearPDE]{setSolverMethod}{\optional{solver=LinearPDE.DEFAULT}\optional{, preconditioner=LinearPDE.DEFAULT}} 
184 
sets the solver method and preconditioner to be used. It should be noted that a PDE solver library 
185 
may not know the specified solver method but may choose a similar method and preconditioner. 
186 
\end{methoddesc} 
187 

188 
\begin{methoddesc}[LinearPDE]{getSolverMethodName}{} 
189 
returns the name of the solver method and preconditioner which is in use. 
190 
\end{methoddesc} 
191 

192 
\begin{methoddesc}[LinearPDE]{getSolverMethod}{} 
193 
returns the solver method and preconditioner which is in use. 
194 
\end{methoddesc} 
195 

196 
\begin{methoddesc}[LinearPDE]{setSolverPackage}{\optional{package=LinearPDE.DEFAULT}} 
197 
sets the solver package to be used by PDE library to solve the linear systems of equations. The 
198 
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 
If \var{package} is not specified, the default package of the PDE solver library is used. 
201 
\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 
\begin{methoddesc}[LinearPDE]{setTolerance}{\optional{tol=1.e8}} 
209 
resets the tolerance for solution. The actually meaning of tolerance depends 
210 
on the underlying PDE library. In most cases, the tolerance 
211 
will only consider the error from solving the discrete problem but will 
212 
not consider any discretization error. 
213 
\end{methoddesc} 
214 

215 
\begin{methoddesc}[LinearPDE]{setToleranceReductionFactor}{TOL} 
216 
lowers the tolerance by a factor of TOL. 
217 
\end{methoddesc} 
218 

219 
\begin{methoddesc}[LinearPDE]{getTolerance}{} 
220 
returns the current tolerance of the solution 
221 
\end{methoddesc} 
222 

223 
\begin{methoddesc}[LinearPDE]{getDomain}{} 
224 
returns the \Domain of the PDE. 
225 
\end{methoddesc} 
226 

227 
\begin{methoddesc}[LinearPDE]{getDim}{} 
228 
returns the spatial dimension of the PDE. 
229 
\end{methoddesc} 
230 

231 
\begin{methoddesc}[LinearPDE]{getNumEquations}{} 
232 
returns the number of equations. 
233 
\end{methoddesc} 
234 

235 
\begin{methoddesc}[LinearPDE]{getNumSolutions}{} 
236 
returns the number of components of the solution. 
237 
\end{methoddesc} 
238 

239 
\begin{methoddesc}[LinearPDE]{checkSymmetry}{verbose=\False} 
240 
returns \True if the PDE is symmetric and \False otherwise. 
241 
The method is very computationally expensive and should only be 
242 
called for testing purposes. The symmetry flag is not altered. 
243 
If \var{verbose}=\True information about where symmetry is violated 
244 
are printed. 
245 
\end{methoddesc} 
246 

247 
\begin{methoddesc}[LinearPDE]{getFlux}{u} 
248 
returns the flux $J\hackscore{ij}$ \index{flux} for given solution \var{u} 
249 
defined by \eqn{LINEARPDE.SYSTEM.5} and \eqn{LINEARPDE.SINGLE.5}, respectively. 
250 
\end{methoddesc} 
251 

252 

253 
\begin{methoddesc}[LinearPDE]{isSymmetric}{} 
254 
returns \True if the PDE has been indicated to be symmetric. 
255 
Otherwise \False is returned. 
256 
\end{methoddesc} 
257 

258 
\begin{methoddesc}[LinearPDE]{setSymmetryOn}{} 
259 
indicates that the PDE is symmetric. 
260 
\end{methoddesc} 
261 

262 
\begin{methoddesc}[LinearPDE]{setSymmetryOff}{} 
263 
indicates that the PDE is not symmetric. 
264 
\end{methoddesc} 
265 

266 
\begin{methoddesc}[LinearPDE]{setReducedOrderOn}{} 
267 
switches on the reduction of polynomial order for the solution and equation evaluation even if 
268 
a quadratic or higher interpolation order is defined in the \Domain. This feature may not 
269 
be supported by all PDE libraries. 
270 
\end{methoddesc} 
271 

272 
\begin{methoddesc}[LinearPDE]{setReducedOrderOff}{} 
273 
switches off the reduction of polynomial order for the solution and 
274 
equation evaluation. 
275 
\end{methoddesc} 
276 

277 
\begin{methoddesc}[LinearPDE]{getOperator}{} 
278 
returns the \Operator of the PDE. 
279 
\end{methoddesc} 
280 

281 
\begin{methoddesc}[LinearPDE]{getRightHandSide}{} 
282 
returns the right hand side of the PDE as a \Data object. If 
283 
\var{ignoreConstraint}=\True, then the constraints are not considered 
284 
when building up the right hand side. 
285 
\end{methoddesc} 
286 

287 
\begin{methoddesc}[LinearPDE]{getSystem}{} 
288 
returns the \Operator and right hand side of the PDE. 
289 
\end{methoddesc} 
290 

291 
\begin{methoddesc}[LinearPDE]{getSolution}{ 
292 
\optional{verbose=False} 
293 
\optional{, reordering=LinearPDE.NO_REORDERING} 
294 
\optional{, iter_max=1000} 
295 
\optional{, drop_tolerance=0.01} 
296 
\optional{, drop_storage=1.20} 
297 
\optional{, truncation=1} 
298 
\optional{, restart=1} 
299 
} 
300 
returns (an approximation of) the solution of the PDE. If \code{verbose=\True}, then some information is printed during the solution process. 
301 
\var{reordering} selects a reordering methods that is applied before or during the solution process 
302 
(=\NOREORDERING, \MINIMUMFILLIN, \NESTEDDESCTION). 
303 
\var{iter_max} specifies the maximum number of iteration steps that are allowed to reach the specified tolerance. 
304 
\var{drop_tolerance} specifies a relative tolerance for small elements to be dropped when building a preconditioner 
305 
(eg. in \ILUT). \var{drop_storage} limits the extra storage allowed when building a preconditioner 
306 
(eg. in \ILUT). The extra storage is given relative to the size of the stiffness matrix, eg. 
307 
\var{drop_storage=1.2} will allow the preconditioner to use the $1.2$ fold storage space than used 
308 
for the stiffness matrix. \var{truncation} defines the truncation. 
309 
\end{methoddesc} 
310 

311 
\subsubsection{\LinearPDE symbols/members} 
312 

313 
\begin{memberdesc}[LinearPDE]{DEFAULT} 
314 
default method, preconditioner or package to be used to solve the PDE. An appropriate method should be 
315 
chosen by the used PDE solver library. 
316 
\end{memberdesc} 
317 

318 
\begin{memberdesc}[LinearPDE]{SCSL} 
319 
the SCSL library by SGI,~\Ref{SCSL}\footnote{The SCSL library will only be available on SGI systems} 
320 
\end{memberdesc} 
321 

322 
\begin{memberdesc}[LinearPDE]{MKL} 
323 
the MKL library by Intel,~\Ref{MKL}\footnote{The MKL library will only be available when the Intel compilation environment is used.}. 
324 
\end{memberdesc} 
325 

326 
\begin{memberdesc}[LinearPDE]{UMFPACK} 
327 
the UMFPACK,~\Ref{UMFPACK}. Remark: UMFPACK is not parallelized. 
328 
\end{memberdesc} 
329 

330 
\begin{memberdesc}[LinearPDE]{PASO} 
331 
the solver library of \finley, see \Sec{CHAPTER ON FINLEY}. 
332 
\end{memberdesc} 
333 

334 
\begin{memberdesc}[LinearPDE]{ITERATIVE} 
335 
the default iterative method and preconditioner. The actually used method depends on the 
336 
PDE solver library and the solver package been chosen. Typically, \PCG is used for symmetric PDEs 
337 
and \BiCGStab otherwise, both with \JACOBI preconditioner. 
338 
\end{memberdesc} 
339 

340 
\begin{memberdesc}[LinearPDE]{DIRECT} 
341 
the default direct linear solver. 
342 
\end{memberdesc} 
343 

344 
\begin{memberdesc}[LinearPDE]{CHOLEVSKY} 
345 
direct solver based on Cholevsky factorization (or similar), see~\Ref{Saad}. The solver will require a symmetric PDE. 
346 
\end{memberdesc} 
347 

348 
\begin{memberdesc}[LinearPDE]{PCG} 
349 
preconditioned conjugate gradient method, see~\Ref{WEISS}\index{linear solver!PCG}\index{PCG}. The solver will require a symmetric PDE. 
350 
\end{memberdesc} 
351 

352 
\begin{memberdesc}[LinearPDE]{TFQMR} 
353 
transposefree quasiminimal residual method, see~\Ref{WEISS}\index{linear solver!TFQMR}\index{TFQMR}. \end{memberdesc} 
354 

355 
\begin{memberdesc}[LinearPDE]{GMRES} 
356 
the GMRES method, see~\Ref{WEISS}\index{linear solver!GMRES}\index{GMRES}. Truncation and restart are controlled by the parameters 
357 
\var{truncation} and \var{restart} of \method{getSolution}. 
358 
\end{memberdesc} 
359 

360 
\begin{memberdesc}[LinearPDE]{MINRES} 
361 
minimal residual method method, \index{linear solver!MINRES}\index{MINRES} \end{memberdesc} 
362 

363 
\begin{memberdesc}[LinearPDE]{LUMPING} 
364 
uses lumping to solve the system of linear equations~\index{linear solver!lumping}\index{lumping}. This solver technique 
365 
condenses the stiffness matrix to a diagonal matrix so the solution of the linear systems becomes very cheap. It can be used when 
366 
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 
367 
but is expected to converge to zero when the mesh gets finer. 
368 
Lumping does not use the linear system solver library. 
369 
\end{memberdesc} 
370 

371 
\begin{memberdesc}[LinearPDE]{PRES20} 
372 
the GMRES method with truncation after five residuals and 
373 
restart after 20 steps, see~\Ref{WEISS}. 
374 
\end{memberdesc} 
375 

376 
\begin{memberdesc}[LinearPDE]{CGS} 
377 
conjugate gradient squared method, see~\Ref{WEISS}. 
378 
\end{memberdesc} 
379 

380 
\begin{memberdesc}[LinearPDE]{BICGSTAB} 
381 
stabilized biconjugate gradients methods, see~\Ref{WEISS}. 
382 
\end{memberdesc} 
383 

384 
\begin{memberdesc}[LinearPDE]{SSOR} 
385 
symmetric successive overrelaxation method, see~\Ref{WEISS}. Typically used as preconditioner but some linear solver libraries support 
386 
this as a solver. 
387 
\end{memberdesc} 
388 
\begin{memberdesc}[LinearPDE]{ILU0} 
389 
the incomplete LU factorization preconditioner with no fillin, see~\Ref{Saad}. 
390 
\end{memberdesc} 
391 

392 
\begin{memberdesc}[LinearPDE]{ILUT} 
393 
the incomplete LU factorization preconditioner with fillin, see~\Ref{Saad}. During the LUfactorization element with 
394 
relative size less then \var{drop_tolerance} are dropped. Moreover, the size of the LUfactorization is restricted to the 
395 
\var{drop_storage}fold of the stiffness matrix. \var{drop_tolerance} and \var{drop_storage} are both set in the 
396 
\method{getSolution} call. 
397 
\end{memberdesc} 
398 

399 
\begin{memberdesc}[LinearPDE]{JACOBI} 
400 
the Jacobi preconditioner, see~\Ref{Saad}. 
401 
\end{memberdesc} 
402 

403 
\begin{memberdesc}[LinearPDE]{AMG} 
404 
the algebraicmulti grid method, see~\Ref{AMG}. This method can be used as linear solver method but is more robust when used 
405 
in a preconditioner. 
406 
\end{memberdesc} 
407 

408 
\begin{memberdesc}[LinearPDE]{GS} 
409 
the symmetric GaussSeidel preconditioner, see~\Ref{Saad}. 
410 
\end{memberdesc} 
411 

412 
\begin{memberdesc}[LinearPDE]{RILU} 
413 
recursive incomplete LU factorization preconditioner, see~\Ref{RILU}. This method is similar to \ILUT but uses smoothing 
414 
between levels. During the LUfactorization element with 
415 
relative size less then \var{drop_tolerance} are dropped. Moreover, the size of the LUfactorization is restricted to the 
416 
\var{drop_storage}fold of the stiffness matrix. \var{drop_tolerance} and \var{drop_storage} are both set in the 
417 
\method{getSolution} call. 
418 
\end{memberdesc} 
419 

420 
\begin{memberdesc}[LinearPDE]{NO_REORDERING} 
421 
no ordering is used during factorization. 
422 
\end{memberdesc} 
423 

424 
\begin{memberdesc}[LinearPDE]{MINIMUM_FILL_IN} 
425 
applies reordering before factorization using a fillin minimization strategy. You have to check with the particular solver library or 
426 
linear solver package if this is supported. In any case, it is advisable to apply reordering on the mesh to minimize fillin. 
427 
\end{memberdesc} 
428 

429 
\begin{memberdesc}[LinearPDE]{NESTED_DISSECTION} 
430 
applies reordering before factorization using a nested dissection strategy. You have to check with the particular solver library or 
431 
linear solver package if this is supported. In any case, it is advisable to apply reordering on the mesh to minimize fillin. 
432 
\end{memberdesc} 
433 

434 
\subsection{The \Poisson Class} 
435 
The \Poisson class provides an easy way to define and solve the Poisson 
436 
equation 
437 
\begin{equation}\label{POISSON.1} 
438 
u\hackscore{,ii}=f\; . 
439 
\end{equation} 
440 
with homogeneous boundary conditions 
441 
\begin{equation}\label{POISSON.2} 
442 
n\hackscore{i}u\hackscore{,i}=0 
443 
\end{equation} 
444 
and homogeneous constraints 
445 
\begin{equation}\label{POISSON.3} 
446 
u=0 \mbox{ where } q>0 
447 
\end{equation} 
448 
$f$ has to be a \Scalar in the \Function and $q$ must be 
449 
a \Scalar in the \SolutionFS. 
450 

451 
\begin{classdesc}{Poisson}{domain} 
452 
opens a Poisson equation on the \Domain domain. \Poisson is derived from \LinearPDE. 
453 
\end{classdesc} 
454 
\begin{methoddesc}[Poisson]{setValue}{f=escript.Data(),q=escript.Data()} 
455 
assigns new values to \var{f} and \var{q}. 
456 
\end{methoddesc} 
457 

458 
\subsection{The \Helmholtz Class} 
459 
The \Helmholtz class defines the Helmholtz problem 
460 
\begin{equation}\label{HZ.1} 
461 
\omega \; u  (k\; u\hackscore{,j})\hackscore{,j} = f 
462 
\end{equation} 
463 
with natural boundary conditions 
464 
\begin{equation}\label{HZ.2} 
465 
k\; u\hackscore{,j} n\hackscore{,j} = g \alpha \; u 
466 
\end{equation} 
467 
and constraints: 
468 
\begin{equation}\label{HZ.3} 
469 
u=r \mbox{ where } q>0 
470 
\end{equation} 
471 
$\omega$, $k$, $f$ have to be a \Scalar in the \Function, 
472 
$g$ and $\alpha$ must be a \Scalar in the \FunctionOnBoundary, 
473 
and $q$ and $r$ must be a \Scalar in the \SolutionFS or must be mapped or interpolated into the particular \FunctionSpace. 
474 

475 
\begin{classdesc}{Helmholtz}{domain} 
476 
opens a Helmholtz equation on the \Domain domain. \Helmholtz is derived from \LinearPDE. 
477 
\end{classdesc} 
478 
\begin{methoddesc}[Helmholtz]{setValue}{ \optional{omega} \optional{, k} \optional{, f} \optional{, alpha} \optional{, g} \optional{, r} \optional{, q}} 
479 
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. 
480 
\end{methoddesc} 
481 

482 
\subsection{The \Lame Class} 
483 
The \Lame class defines a Lame equation problem: 
484 
\begin{equation}\label{LE.1} 
485 
\mu (u\hackscore{i,j}+u\hackscore{j,i})+\lambda u\hackscore{k,k})\hackscore{j} = F\hackscore{i}\sigma\hackscore{ij,j} 
486 
\end{equation} 
487 
with natural boundary conditions: 
488 
\begin{equation}\label{LE.2} 
489 
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} 
490 
\end{equation} 
491 
and constraint 
492 
\begin{equation}\label{LE.3} 
493 
u\hackscore{i}=r\hackscore{i} \mbox{ where } q\hackscore{i}>0 
494 
\end{equation} 
495 
$\mu$, $\lambda$ have to be a \Scalar in the \Function, 
496 
$F$ has to be a \Vector in the \Function, 
497 
$\sigma$ has to be a \Tensor in the \Function, 
498 
$f$ must be a \Vector in the \FunctionOnBoundary, 
499 
and $q$ and $r$ must be a \Vector in the \SolutionFS or must be mapped or interpolated into the particular \FunctionSpace. 
500 

501 
\begin{classdesc}{Lame}{domain} 
502 
opens a Lame equation on the \Domain domain. \Lame is derived from \LinearPDE. 
503 
\end{classdesc} 
504 
\begin{methoddesc}[Lame]{setValue}{ \optional{lame_lambda} \optional{, lame_mu} \optional{, F} \optional{, sigma} \optional{, f} \optional{, r} \optional{, q}} 
505 
assigns new values to 
506 
\var{lame_lambda}, 
507 
\var{lame_mu}, 
508 
\var{F}, 
509 
\var{sigma}, 
510 
\var{f}, 
511 
\var{r} and 
512 
\var{q} 
513 
By default all values are set to be zero. 
514 
\end{methoddesc} 
515 

516 
% \section{Transport Problems} 
517 
% \label{SEC Transport} 