1 
% $Id$ 
2 
% 
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 

10 

11 
\chapter{The module \linearPDEs} 
12 

13 
\declaremodule{extension}{linearPDEs} \modulesynopsis{Linear partial pifferential equation handler} 
14 
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 
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 
to define the Poisson equation \index{Poisson}. 
23 

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 
the outer normal field on $\Gamma$. 
31 

32 
For a single PDE with a solution with a single component the linear PDE is defined in the 
33 
following form: 
34 
\begin{equation}\label{LINEARPDE.SINGLE.1} 
35 
(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 
\end{equation} 
37 
$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 
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 
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 
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 
or \eqn{LINEARPDE.SINGLE.2}. 
56 

57 
For a system of PDEs and a solution with several components the PDE has the form 
58 
\begin{equation}\label{LINEARPDE.SYSTEM.1} 
59 
(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 
\end{equation} 
61 
$A$ is a \RankFour, $B$ and $C$ are each a \RankThree, $D$ and $X$ are each a \RankTwo and $Y$ is a \RankOne. 
62 
The natural boundary conditions \index{boundary condition!natural} take the form: 
63 
\begin{equation}\label{LINEARPDE.SYSTEM.2} 
64 
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 
\end{equation} 
66 
The coefficient $d$ is a \RankTwo and $y$ is a 
67 
\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 
$r$ and $q$ are each \RankOne. Notice that not necessarily all components must 
72 
have a constraint at all locations. 
73 

74 
\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 
defined as 
78 
\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 
In the context of discontinuities \index{discontinuity} $n$ denotes the normal on the 
86 
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 
The coefficient $d^{contact}$ is a \RankTwo and $y^{contact}$ is a 
95 
\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 

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 
d^{contact}\hackscore{ik}=d^{contact}\hackscore{ki} 
115 
\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 
This is the general class to define a linear PDE in \escript. We list a selction of the most 
121 
important methods of the class only and refer to reference guide \ReferenceGuide for a complete list. 
122 

123 
\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 
If \var{numEquations} and \var{numSolutions} is nonpositive, the number of equations 
127 
and the number solutions, respctively, stay undefined until a coefficient is 
128 
defined. 
129 
\end{classdesc} 
130 

131 
\begin{methoddesc}[LinearPDE]{setValue}{ 
132 
\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 
If the new coefficient value is not a \Data object, it is converted into a \Data object in the 
143 
appropriate \FunctionSpace. 
144 
\end{methoddesc} 
145 

146 
\begin{methoddesc}[LinearPDE]{getCoefficient}{name} 
147 
return the value assigned to coefficient \var{name}. If \var{name} is not a valid name 
148 
an exception is raised. 
149 
\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 
\begin{methoddesc}[LinearPDE]{getFunctionSpaceForCoefficient}{name} 
156 
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 
\begin{methoddesc}[LinearPDE]{isUsingLumping}{} 
168 
returns \True if \LUMPING is set as the solver for the system of lienar equations. 
169 
Otherwise \False is returned. 
170 
\end{methoddesc} 
171 

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

177 
\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 
Set the solver package to be used by PDE library to solve the linear systems of equations. The 
187 
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 
If \var{package} is not specified, the default package of the PDE solver library is used. 
190 
\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 
\begin{methoddesc}[LinearPDE]{setTolerance}{\optional{tol=1.e8}}: 
198 
resets the tolerance for solution. The actually meaning of tolerance is 
199 
depending on the underlying PDE library. In most cases, the tolerance 
200 
will only consider the error from solving the discerete problem but will 
201 
not consider any discretization error. 
202 
\end{methoddesc} 
203 

204 
\begin{methoddesc}[LinearPDE]{getTolerance}{} 
205 
returns the current tolerance of the solution 
206 
\end{methoddesc} 
207 

208 
\begin{methoddesc}[LinearPDE]{getDomain}{} 
209 
returns the \Domain of the PDE. 
210 
\end{methoddesc} 
211 

212 
\begin{methoddesc}[LinearPDE]{getDim}{} 
213 
returns the spatial dimension of the PDE. 
214 
\end{methoddesc} 
215 

216 
\begin{methoddesc}[LinearPDE]{getNumEquations}{} 
217 
returns the number of equations. 
218 
\end{methoddesc} 
219 

220 
\begin{methoddesc}[LinearPDE]{getNumSolutions}{} 
221 
returns the number of components of the solution. 
222 
\end{methoddesc} 
223 

224 
\begin{methoddesc}[LinearPDE]{checkSymmetry}{verbose=\False} 
225 
returns \True if the PDE is symmetric and \False otherwise. 
226 
The method is very computational expensive and should only be 
227 
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 
\end{methoddesc} 
231 

232 
\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 
\end{methoddesc} 
236 

237 

238 
\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 
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 
be supported by all PDE libraries. 
255 
\end{methoddesc} 
256 

257 
\begin{methoddesc}[LinearPDE]{setReducedOrderOff}{} 
258 
switches off the reduction of polynomial order for the solution and 
259 
equation evaluation. 
260 
\end{methoddesc} 
261 

262 
\begin{methoddesc}[LinearPDE]{getOperator}{} 
263 
returns the \Operator of the PDE. 
264 
\end{methoddesc} 
265 

266 
\begin{methoddesc}[LinearPDE]{getRightHandSide}{} 
267 
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 
\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 
returns (an approximation of) the solution of the PDE. If \code{verbose=\True} some information during the solution process printed. 
286 
\var{reordering} selects a reordering methods that is applied before or during the solution process 
287 
(=\NOREORDERING ,\MINIMUMFILLIN ,\NESTEDDESCTION). 
288 
\var{iter_max} specifies the maximum number of iteration steps that are allowed to reach the specified tolerance. 
289 
\var{drop_tolerance} specifies a relative tolerance for small elements to be dropped when building a preconditioner 
290 
(eg. in \ILUT). \var{drop_storage} limits the extra storage allowed when building a preconditioner 
291 
(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 
\end{methoddesc} 
295 

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

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

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

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

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

317 
\begin{memberdesc}[LinearPDE]{ITERATIVE} 
318 
the default iterative method and preconditioner. The actually used method depends on the 
319 
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 
\end{memberdesc} 
322 

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

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

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

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

340 
\begin{memberdesc}[LinearPDE]{LUMPING} 
341 
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 
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 
but is expect to converge to zero when the mesh gets finer. 
345 
Lumping does not use the linear system solver library. 
346 
\end{memberdesc} 
347 

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

353 
\begin{memberdesc}[LinearPDE]{CGS} 
354 
conjugate gradient squared method, see~\Ref{WEISS}. 
355 
\end{memberdesc} 
356 

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

361 
\begin{memberdesc}[LinearPDE]{SSOR} 
362 
symmetric successive overrelaxation method, see~\Ref{WEISS}. Typically used as preconditioner but some linear solver libraries support 
363 
this as a solver. 
364 
\end{memberdesc} 
365 
\begin{memberdesc}[LinearPDE]{ILU0} 
366 
the incomplete LU factorization preconditioner with no fillin, see~\Ref{Saad}. 
367 
\end{memberdesc} 
368 

369 
\begin{memberdesc}[LinearPDE]{ILUT} 
370 
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 
\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 
\end{memberdesc} 
375 

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

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

385 
\begin{memberdesc}[LinearPDE]{RILU} 
386 
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 
\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 
\end{memberdesc} 
392 

393 
\begin{memberdesc}[LinearPDE]{NO_REORDERING} 
394 
no ordering is used during factorization. 
395 
\end{memberdesc} 
396 

397 
\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 

402 
\begin{memberdesc}[LinearPDE]{NESTED_DISSECTION} 
403 
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 

407 
\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 
a \Scalar in the \SolutionFS. 
423 

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 

431 
\section{The \Helmholtz Class} 
432 
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 

448 
\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 
\section{The \Lame Class} 
456 
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 

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