 # Contents of /trunk/doc/user/linearPDE.tex

Revision 3094 - (show annotations)
Fri Aug 13 08:38:06 2010 UTC (8 years, 11 months ago) by gross
File MIME type: application/x-tex
File size: 42658 byte(s)
The MPI and sequational GAUSS_SEIDEL have been merged.
The couring and main diagonal pointer is now manged by the patternm which means that they are calculated once only even if the preconditioner is deleted.


 1 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3 % 4 % Copyright (c) 2003-2010 by University of Queensland 5 % Earth Systems Science Computational Center (ESSCC) 6 7 % 8 % Primary Business: Queensland, Australia 9 % Licensed under the Open Software License version 3.0 10 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$\footnote{In some applications the definition of flux used here can be different from the commonly used definition. For instance, if $T$ is a temperature field the heat flux $q$ is defined as $q\hackscore{,i}=-\kappa T\hackscore{,i}$ ($\kappa$ is diffusifity) which differs from the definition used here by the sign. This needs to be kept in mind when defining natural boundary conditions.\index{boundary condition!natural}} 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 The following example illustrates the typical usage of the \LinearPDE class: 115 \begin{python} 116 from esys.escript import * 117 from esys.escript.linearPDEs import LinearPDE 118 from esys.finley import Rectangle 119 mydomain = Rectangle(l0=1.,l1=1.,n0=40, n1=20) 120 mypde=LinearPDE(mydomain) 121 mypde.setSymmetryOn() 122 mypde.setValue(A=kappa*kronecker(mydomain),D=1,Y=1) 123 u=mypde.getSolution() 124 \end{python} 125 We refer to chapter~\ref{CHAP: Tutorial} for more details. 126 127 An instance of the \SolverOptions class is attached to the \LinearPDE class object. It is used to set options of the solver used to solve the PDE. In the following 128 code the \method{getSolverOptions} is used to access the \SolverOptions 129 attached to \var{mypde}: 130 \begin{python} 131 from esys.escript import * 132 from esys.escript.linearPDEs import LinearPDE, SolverOptions 133 from esys.finley import Rectangle 134 mydomain = Rectangle(l0=1.,l1=1.,n0=40, n1=20) 135 mypde=LinearPDE(mydomain) 136 mypde.setValue(A=kappa*kronecker(mydomain),D=1,Y=1) 137 mypde.getSolverOptions().setVerbosityOn() 138 mypde.getSolverOptions().setSolverMethod(SolverOptions.PCG) 139 mypde.getSolverOptions().setPreconditioner(SolverOptions.AMG) 140 mypde.getSolverOptions().setTolerance(1e-8) 141 mypde.getSolverOptions().setIterMax(1000) 142 u=mypde.getSolution() 143 \end{python} 144 In this code the preconditioned conjugate gradient method \PCG 145 with preconditioner \AMG. The relative tolerance is set to $10^{-8}$ and 146 the maximum number of iteration steps to $1000$. 147 148 Moreover, after a completed solution call 149 the attached \SolverOptions object gives access to diagnostic informations: 150 \begin{python} 151 u=mypde.getSolution() 152 print 'Number of iteration steps =', mypde.getDiagnostics('num_iter') 153 print 'Total solution time =', mypde.getDiagnostics('time') 154 print 'Set-up time =', mypde.getDiagnostics('set_up_time') 155 print 'Net time =', mypde.getDiagnostics('net_time') 156 print 'Residual norm of returned solution =', mypde.getDiagnostics('residual_norm') 157 \end{python} 158 Typically a negative value for a diagnostic value indicates that the value is undefined. 159 160 \subsection{Classes} 161 \declaremodule{extension}{esys.escript.linearPDEs} 162 \modulesynopsis{Linear partial differential equation handler} 163 The module \linearPDEs provides an interface to define and solve linear partial 164 differential equations within \escript. The module \linearPDEs does not provide any 165 solver capabilities in itself but hands the PDE over to 166 the PDE solver library defined through the \Domain of the PDE, eg. \finley. 167 The general interface is provided through the \LinearPDE class. The \Poisson 168 class which is also derived form the \LinearPDE class should be used 169 to define the Poisson equation \index{Poisson}. 170 171 \subsection{\LinearPDE class} 172 This is the general class to define a linear PDE in \escript. We list a selection of the most 173 important methods of the class. For a complete list, see the reference at \ReferenceGuide. 174 175 \begin{classdesc}{LinearPDE}{domain,numEquations=0,numSolutions=0} 176 opens a linear, steady, second order PDE on the \Domain \var{domain}. \var{numEquations} 177 and \var{numSolutions} gives the number of equations and the number of solution components. 178 If \var{numEquations} and \var{numSolutions} is non-positive, the number of equations 179 and the number solutions, respectively, stay undefined until a coefficient is 180 defined. 181 \end{classdesc} 182 183 \subsubsection{\LinearPDE methods} 184 185 \begin{methoddesc}[LinearPDE]{setValue}{ 186 \optional{A}\optional{, B}, 187 \optional{, C}\optional{, D} 188 \optional{, X}\optional{, Y} 189 \optional{, d}\optional{, y} 190 \optional{, d_contact}\optional{, y_contact} 191 \optional{, q}\optional{, r}} 192 assigns new values to coefficients. By default all values are assumed to be zero\footnote{ 193 In fact it is assumed they are not present by assigning the value \code{escript.Data()}. The 194 can by used by the solver library to reduce computational costs. 195 } 196 If the new coefficient value is not a \Data object, it is converted into a \Data object in the 197 appropriate \FunctionSpace. 198 \end{methoddesc} 199 200 \begin{methoddesc}[LinearPDE]{getCoefficient}{name} 201 return the value assigned to coefficient \var{name}. If \var{name} is not a valid name 202 an exception is raised. 203 \end{methoddesc} 204 205 \begin{methoddesc}[LinearPDE]{getShapeOfCoefficient}{name} 206 returns the shape of coefficient \var{name} even if no value has been assigned to it. 207 \end{methoddesc} 208 209 \begin{methoddesc}[LinearPDE]{getFunctionSpaceForCoefficient}{name} 210 returns the \FunctionSpace of coefficient \var{name} even if no value has been assigned to it. 211 \end{methoddesc} 212 213 \begin{methoddesc}[LinearPDE]{setDebugOn}{} 214 switches on debug mode. 215 \end{methoddesc} 216 217 \begin{methoddesc}[LinearPDE]{setDebugOff}{} 218 switches off debug mode. 219 \end{methoddesc} 220 221 \begin{methoddesc}[LinearPDE]{getSolverOptions}{} 222 returns the solver options for solving the PDE. In fact the method returns 223 a \SolverOptions class object which can be used to modify the tolerance, 224 the solver or the preconditioner, see Section~\ref{SEC Solver Options} for details. 225 \end{methoddesc} 226 227 \begin{methoddesc}[LinearPDE]{setSolverOptions}{\optional{options=None}} 228 sets the solver options for solving the PDE. If argument \var{options} is present it 229 must be a \SolverOptions class object, see Section~\ref{SEC Solver Options} for details. Otherwise the solver options are reset to the default. 230 \end{methoddesc} 231 232 233 \begin{methoddesc}[LinearPDE]{isUsingLumping}{} 234 returns \True if \LUMPING is set as the solver for the system of linear equations. 235 Otherwise \False is returned. 236 \end{methoddesc} 237 238 239 \begin{methoddesc}[LinearPDE]{getDomain}{} 240 returns the \Domain of the PDE. 241 \end{methoddesc} 242 243 \begin{methoddesc}[LinearPDE]{getDim}{} 244 returns the spatial dimension of the PDE. 245 \end{methoddesc} 246 247 \begin{methoddesc}[LinearPDE]{getNumEquations}{} 248 returns the number of equations. 249 \end{methoddesc} 250 251 \begin{methoddesc}[LinearPDE]{getNumSolutions}{} 252 returns the number of components of the solution. 253 \end{methoddesc} 254 255 \begin{methoddesc}[LinearPDE]{checkSymmetry}{verbose=\False} 256 returns \True if the PDE is symmetric and \False otherwise. 257 The method is very computationally expensive and should only be 258 called for testing purposes. The symmetry flag is not altered. 259 If \var{verbose}=\True information about where symmetry is violated 260 are printed. 261 \end{methoddesc} 262 263 \begin{methoddesc}[LinearPDE]{getFlux}{u} 264 returns the flux $J\hackscore{ij}$ \index{flux} for given solution \var{u} 265 defined by \eqn{LINEARPDE.SYSTEM.5} and \eqn{LINEARPDE.SINGLE.5}, respectively. 266 \end{methoddesc} 267 268 269 \begin{methoddesc}[LinearPDE]{isSymmetric}{} 270 returns \True if the PDE has been indicated to be symmetric. 271 Otherwise \False is returned. 272 \end{methoddesc} 273 274 \begin{methoddesc}[LinearPDE]{setSymmetryOn}{} 275 indicates that the PDE is symmetric. 276 \end{methoddesc} 277 278 \begin{methoddesc}[LinearPDE]{setSymmetryOff}{} 279 indicates that the PDE is not symmetric. 280 \end{methoddesc} 281 282 \begin{methoddesc}[LinearPDE]{setReducedOrderOn}{} 283 switches on the reduction of polynomial order for the solution and equation evaluation even if 284 a quadratic or higher interpolation order is defined in the \Domain. This feature may not 285 be supported by all PDE libraries. 286 \end{methoddesc} 287 288 \begin{methoddesc}[LinearPDE]{setReducedOrderOff}{} 289 switches off the reduction of polynomial order for the solution and 290 equation evaluation. 291 \end{methoddesc} 292 293 \begin{methoddesc}[LinearPDE]{getOperator}{} 294 returns the \Operator of the PDE. 295 \end{methoddesc} 296 297 \begin{methoddesc}[LinearPDE]{getRightHandSide}{} 298 returns the right hand side of the PDE as a \Data object. If 299 \var{ignoreConstraint}=\True, then the constraints are not considered 300 when building up the right hand side. 301 \end{methoddesc} 302 303 \begin{methoddesc}[LinearPDE]{getSystem}{} 304 returns the \Operator and right hand side of the PDE. 305 \end{methoddesc} 306 307 \begin{methoddesc}[LinearPDE]{getSolution}{} 308 returns (an approximation of) the solution of the PDE. This call 309 will invoke the discretization of the PDE and the solution of the resulting 310 system of linear equations. Keep in mind that this call is typically computational 311 expensive and can - depending on the PDE and the discretiztion - take a long time to complete. 312 \end{methoddesc} 313 314 315 316 \subsection{The \Poisson Class} 317 The \Poisson class provides an easy way to define and solve the Poisson 318 equation 319 \begin{equation}\label{POISSON.1} 320 -u\hackscore{,ii}=f\; . 321 \end{equation} 322 with homogeneous boundary conditions 323 \begin{equation}\label{POISSON.2} 324 n\hackscore{i}u\hackscore{,i}=0 325 \end{equation} 326 and homogeneous constraints 327 \begin{equation}\label{POISSON.3} 328 u=0 \mbox{ where } q>0 329 \end{equation} 330 $f$ has to be a \Scalar in the \Function and $q$ must be 331 a \Scalar in the \SolutionFS. 332 333 \begin{classdesc}{Poisson}{domain} 334 opens a Poisson equation on the \Domain domain. \Poisson is derived from \LinearPDE. 335 \end{classdesc} 336 \begin{methoddesc}[Poisson]{setValue}{f=escript.Data(),q=escript.Data()} 337 assigns new values to \var{f} and \var{q}. 338 \end{methoddesc} 339 340 \subsection{The \Helmholtz Class} 341 The \Helmholtz class defines the Helmholtz problem 342 \begin{equation}\label{HZ.1} 343 \omega \; u - (k\; u\hackscore{,j})\hackscore{,j} = f 344 \end{equation} 345 with natural boundary conditions 346 \begin{equation}\label{HZ.2} 347 k\; u\hackscore{,j} n\hackscore{,j} = g- \alpha \; u 348 \end{equation} 349 and constraints: 350 \begin{equation}\label{HZ.3} 351 u=r \mbox{ where } q>0 352 \end{equation} 353 $\omega$, $k$, $f$ have to be a \Scalar in the \Function, 354 $g$ and $\alpha$ must be a \Scalar in the \FunctionOnBoundary, 355 and $q$ and $r$ must be a \Scalar in the \SolutionFS or must be mapped or interpolated into the particular \FunctionSpace. 356 357 \begin{classdesc}{Helmholtz}{domain} 358 opens a Helmholtz equation on the \Domain domain. \Helmholtz is derived from \LinearPDE. 359 \end{classdesc} 360 \begin{methoddesc}[Helmholtz]{setValue}{ \optional{omega} \optional{, k} \optional{, f} \optional{, alpha} \optional{, g} \optional{, r} \optional{, q}} 361 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. 362 \end{methoddesc} 363 364 \subsection{The \Lame Class} 365 The \Lame class defines a Lame equation problem: 366 \begin{equation}\label{LE.1} 367 -(\mu (u\hackscore{i,j}+u\hackscore{j,i})+\lambda u\hackscore{k,k}\delta\hackscore{ij})\hackscore{j} = F\hackscore{i}-\sigma\hackscore{ij,j} 368 \end{equation} 369 with natural boundary conditions: 370 \begin{equation}\label{LE.2} 371 n\hackscore{j}(\mu \; (u\hackscore{i,j}+u\hackscore{j,i})+\lambda u\hackscore{k,k}\delta\hackscore{ij}) = f\hackscore{i}+n\hackscore{j}\sigma\hackscore{ij} 372 \end{equation} 373 and constraint 374 \begin{equation}\label{LE.3} 375 u\hackscore{i}=r\hackscore{i} \mbox{ where } q\hackscore{i}>0 376 \end{equation} 377 $\mu$, $\lambda$ have to be a \Scalar in the \Function, 378 $F$ has to be a \Vector in the \Function, 379 $\sigma$ has to be a \Tensor in the \Function, 380 $f$ must be a \Vector in the \FunctionOnBoundary, 381 and $q$ and $r$ must be a \Vector in the \SolutionFS or must be mapped or interpolated into the particular \FunctionSpace. 382 383 \begin{classdesc}{Lame}{domain} 384 opens a Lame equation on the \Domain domain. \Lame is derived from \LinearPDE. 385 \end{classdesc} 386 \begin{methoddesc}[Lame]{setValue}{ \optional{lame_lambda} \optional{, lame_mu} \optional{, F} \optional{, sigma} \optional{, f} \optional{, r} \optional{, q}} 387 assigns new values to 388 \var{lame_lambda}, 389 \var{lame_mu}, 390 \var{F}, 391 \var{sigma}, 392 \var{f}, 393 \var{r} and 394 \var{q} 395 By default all values are set to be zero. 396 \end{methoddesc} 397 398 399 400 \section{Projection} 401 \declaremodule{extension}{esys.escript.pdetools} 402 \label{SEC Projection} 403 404 Using the \LinearPDE class provides an option to change the \FunctionSpace attribute in addition 405 to the standard interpolation mechanism\index{interpolation} as 406 discussed on in Chapter~\ref{ESCRIPT CHAP}. If one looks the 407 stripped down version 408 \begin{equation}\label{PROJ.1} 409 u = Y 410 \end{equation} 411 of the general scalar PDE~\ref{LINEARPDE.SINGLE.1} (boundary conditions are irrelevant) 412 one can see the solution $u$ of this PDE as a project of the input function $Y$ 413 which has the \Function attribute to a function with the \SolutionFS or \ReducedSolutionFS 414 attribute. In fact, the solution maps values defined at 415 element centers representing a possibly discontinuous function 416 onto a continuous function represented by its values at the nodes of the FEM mesh. 417 This mapping is called a projection\index{projection}. Projection 418 can be a useful tool but needs to be applied with some care due to the fact that 419 a potentially discontinuous function is projected onto a continuous function but it can 420 also be a desirable effect for instance to smooth a function. The projection of the 421 gradient of a function typically calculated on the element center to the 422 nodes of a FEM mesh can be evaluated on the domain boundary and so projection provides a tool to extrapolate 423 the gradient from the internal to the boundary. This is only a reasonable procedure in the absence of singularities at the boundary. 424 425 As projection is used often in simulations \escript provides an easy to use class \class{Projector} 426 which is part of the \pdetools module. The following script demonstrates 427 the usage of the class to project the piecewise constant function ($=1$ for $x\hackscore{0}\ge 0.5$ and 428 $=-1$ for $x\hackscore{0}<0.5$ ) to a function with the \ReducedSolutionFS attribute (default target) 429 \begin{python} 430 from esys.escript.pdetools import Projector 431 proj=Projector(domain) 432 x0=domain.getX() 433 jmp=1.-2.*wherePositive(x0-0.5) 434 u=proj.getValue(jmp) 435 # alternative call: 436 u=proj(jmp) 437 \end{python} 438 By default the class uses lumping to solve the PDE~\ref{PROJ.1}. This technique is faster 439 then using the standard solver techniques of PDEs. In essence it leads to using the average of 440 neighbor element values to calculate the value at each FEM node. 441 442 The following script illustrate how to evaluate the normal stress 443 on the boundary from a given displacement field \var{u}: 444 \begin{python} 445 from esys.escript.pdetools import Projector 446 u=... 447 proj=Projector(u.getDomin()) 448 e=symmetric(grad(u)) 449 stress = G*e+ (K-2./3.*G)*trace(e)*kronecker(u.getDomin()) 450 normal_stress = inner(u.getDomin().getNormal(), proj(stress)) 451 \end{python} 452 453 454 455 \begin{classdesc}{Projector}{domain\optional{, reduce=\True \optional{, fast=\True}}} 456 This class defines the projector on the domain \var{domain}. 457 If \var{reduce} is set to \True the projection will be returned 458 as a \ReducedSolutionFS \Data object. Otherwise \SolutionFS representation is returned. 459 If \var{reduce} is set to \True lumping is used when 460 the equation~\ref{PROJ.1} is solved. Otherwise the standard 461 PDE solver is used. Notice, that lumping is requires significant less 462 compute time and memory. The class is callable. 463 \end{classdesc} 464 465 \begin{methoddesc}[Projector]{getSolverOptions}{} 466 returns the solver options for solving the PDE. In fact the method returns 467 a \SolverOptions class object which can be used to modify the tolerance, 468 the solver or the preconditioner, see Section~\ref{SEC Solver Options} for details. 469 \end{methoddesc} 470 471 \begin{methoddesc}[Projector]{getValue}{input_data} 472 projects the \var{input_data}. This method is equivalent to call an instance 473 of the class with argument \var{input_data}: 474 475 \end{methoddesc} 476 477 478 % \section{Transport Problems} 479 % \label{SEC Transport} 480 481 \section{Solver Options} 482 \label{SEC Solver Options} 483 484 \begin{classdesc}{SolverOptions}{} 485 This class defines the solver options for a linear or non-linear solver. 486 The option also supports the handling of diagnostic informations. 487 \end{classdesc} 488 489 \begin{methoddesc}[SolverOptions]{getSummary}{} 490 Returns a string reporting the current settings 491 \end{methoddesc} 492 493 \begin{methoddesc}[SolverOptions]{getName}{key} 494 Returns the name as a string of a given key 495 \end{methoddesc} 496 497 \begin{methoddesc}[SolverOptions]{setSolverMethod}{\optional{method=SolverOptions.DEFAULT}} 498 Sets the solver method to be used. Use \var{method}=\member{SolverOptions.DIRECT} to indicate that a direct rather than an iterative solver should be used and use \var{method}=\member{SolverOptions.ITERATIVE} to indicate that an iterative rather than a direct solver should be used. 499 The value of \var{method} must be one of the constants 500 \member{SolverOptions.DEFAULT}, \member{SolverOptions.DIRECT}, \member{SolverOptions.CHOLEVSKY}, \member{SolverOptions.PCG},\member{SolverOptions.CR}, \member{SolverOptions.CGS}, \member{SolverOptions.BICGSTAB}, \member{SolverOptions.SSOR}, 501 \member{SolverOptions.GMRES}, \member{SolverOptions.PRES20}, \member{SolverOptions.LUMPING}, \member{SolverOptions.ITERATIVE}, \member{SolverOptions.NONLINEAR_GMRES}, \member{SolverOptions.TFQMR}, \member{SolverOptions.MINRES}, 502 or \member{SolverOptions.GAUSS_SEIDEL}. 503 Not all packages support all solvers. It can be assumed that a package makes a reasonable choice if it encounters. See Table~\ref{TAB FINLEY SOLVER OPTIONS 1} for the solvers supported by \finley. 504 \end{methoddesc} 505 506 \begin{methoddesc}[SolverOptions]{getSolverMethod}{} 507 Returns key of the solver method to be used. 508 \end{methoddesc} 509 510 \begin{methoddesc}[SolverOptions]{setPreconditioner}{\optional{preconditioner=SolverOptions.JACOBI}} 511 Sets the preconditioner to be used. 512 The value of \var{preconditioner} must be one of the constants 513 \member{SolverOptions.ILU0}, \member{SolverOptions.ILUT}, \member{SolverOptions.JACOBI}, 514 \member{SolverOptions.AMG}, \member{SolverOptions.REC_ILU}, \member{SolverOptions.GAUSS_SEIDEL}, \member{SolverOptions.RILU}, or 515 \member{SolverOptions.NO_PRECONDITIONER}. 516 Not all packages support all preconditioner. It can be assumed that a package makes a reasonable choice if it encounters 517 an unknown preconditioner. See Table~\ref{TAB FINLEY SOLVER OPTIONS 2} for the solvers supported by \finley. 518 \end{methoddesc} 519 520 \begin{methoddesc}[SolverOptions]{getPreconditioner}{} 521 Returns key of the preconditioner to be used. 522 \end{methoddesc} 523 524 \begin{methoddesc}[SolverOptions]{setPackage}{\optional{package=SolverOptions.DEFAULT}} 525 Sets the solver package to be used as a solver. 526 The value of \var{method} must be one of the constants in \member{SolverOptions.DEFAULT}, \member{SolverOptions.PASO}, \member{SolverOptions.SUPER_LU}, \member{SolverOptions.PASTIX}, \member{SolverOptions.MKL}, \member{SolverOptions.UMFPACK}, \member{SolverOptions.TRILINOS}. 527 Not all packages are support on all implementation. An exception may be thrown on some platforms if a particular package is requested. Currently \finley supports \member{SolverOptions.PASO} (as default) 528 and, if available, \member{SolverOptions.MKL} 529 \footnote{If the stiffness matrix is non-regular \MKL may return without 530 returning a proper error code. If you observe suspicious solutions when using MKL, this may cause by a non-invertible operator. } 531 and \member{SolverOptions.UMFPACK} 532 533 \end{methoddesc} 534 535 \begin{methoddesc}[SolverOptions]{getPackage}{} 536 Returns the solver package key 537 \end{methoddesc} 538 539 540 \begin{methoddesc}[SolverOptions]{resetDiagnostics}{\optional{all=False}} 541 resets the diagnostics. If \var{all} is \True all diagnostics including accumulative counters are reset. 542 \end{methoddesc} 543 544 \begin{methoddesc}[SolverOptions]{getDiagnostics}{\optional{ name}} 545 Returns the diagnostic information \var{name}. The following keywords are 546 supported: 547 \begin{itemize} 548 \item "num_iter": the number of iteration steps 549 \item "cum_num_iter": the cumulative number of iteration steps 550 \item "num_level": the number of level in multi level solver 551 \item "num_inner_iter": the number of inner iteration steps 552 \item"cum_num_inner_iter": the cumulative number of inner iteration steps 553 \item"time": execution time 554 \item "cum_time": cumulative execution time 555 \item "set_up_time": time to set up of the solver, typically this includes factorization and reordering 556 \item "cum_set_up_time": cumulative time to set up of the solver 557 \item "net_time": net execution time, excluding setup time for the solver and execution time for preconditioner 558 \item "cum_net_time": cumulative net execution time 559 \item "residual_norm": norm of the final residual 560 \item "converged": status of convergence 561 \item "preconditioner_size": size of precondtioner in Mbytes. 562 \end{itemize} 563 \end{methoddesc} 564 565 566 \begin{methoddesc}[SolverOptions]{hasConverged}{} 567 Returns \True if the last solver call has been finalized successfully. 568 If an exception has been thrown by the solver the status of this flag is undefined. 569 \end{methoddesc} 570 571 \begin{methoddesc}[SolverOptions]{setCoarsening}{\optional{method=SolverOptions.DEFAULT}} 572 Sets the key of the coarsening method to be applied in \AMG. 573 The value of \var{method} must be one of the constants 574 \member{SolverOptions.DEFAULT} 575 \member{SolverOptions.STANDARD_COARSENING} 576 \member{SolverOptions.YAIR_SHAPIRA_COARSENING}, \\ 577 \member{SolverOptions.RUGE_STUEBEN_COARSENING}~\footnote{The Ruge-Stueben and aggregation coarsening algorithms used for measuring the strength of connection only, but splitting is done with greedy algorithm.}, \\or \member{SolverOptions.AGGREGATION_COARSENING}. 578 \end{methoddesc} 579 580 \begin{methoddesc}[SolverOptions]{getCoarsening}{} 581 Returns the key of the coarsening algorithm to be applied \AMG. 582 \end{methoddesc} 583 584 \begin{methoddesc}[SolverOptions]{setReordering}{\optional{ordering=SolverOptions.DEFAULT_REORDERING}} 585 Sets the key of the reordering method to be applied if supported by the solver. Some direct solvers support reordering to optimize compute time and storage use during elimination. The value of \var{ordering} must be one of the constants 586 \member{SolverOptions.NO_REORDERING}, \member{SolverOptions.MINIMUM_FILL_IN}, 587 \member{SolverOptions.NESTED_DISSECTION}, or \member{SolverOptions.DEFAULT_REORDERING}. 588 \end{methoddesc} 589 590 \begin{methoddesc}[SolverOptions]{getReordering}{} 591 Returns the key of the reordering method to be applied if supported by the solver. 592 \end{methoddesc} 593 594 \begin{methoddesc}[SolverOptions]{setRestart}{\optional{restart=None}} 595 Sets the number of iterations steps after which \GMRES is performing a restart. 596 If \var{restart} is equal to \var{None} no restart is performed. 597 \end{methoddesc} 598 599 600 \begin{methoddesc}[SolverOptions]{getRestart}{} 601 Returns the number of iterations steps after which \GMRES is performing a restart. 602 \end{methoddesc} 603 604 \begin{methoddesc}[SolverOptions]{setTruncation}{\optional{truncation=20}} 605 Sets the number of residuals in \GMRES to be stored for orthogonalization. The more residuals are stored the faster \GMRES converged but 606 \end{methoddesc} 607 608 \begin{methoddesc}[SolverOptions]{getTruncation}{} 609 Returns the number of residuals in \GMRES to be stored for orthogonalization 610 \end{methoddesc} 611 612 613 \begin{methoddesc}[SolverOptions]{setIterMax}{\optional{iter_max=10000}} 614 Sets the maximum number of iteration steps 615 \end{methoddesc} 616 617 \begin{methoddesc}[SolverOptions]{getIterMax}{} 618 Returns maximum number of iteration steps 619 \end{methoddesc} 620 621 \begin{methoddesc}[SolverOptions]{setLevelMax}{\optional{level_max=10}} 622 Sets the maximum number of coarsening levels to be used in the \AMG solver or preconditioner. 623 \end{methoddesc} 624 625 \begin{methoddesc}[SolverOptions]{getLevelMax}{} 626 Returns the maximum number of coarsening levels to be used in an algebraic multi level solver or preconditioner 627 \end{methoddesc} 628 629 \begin{methoddesc}[SolverOptions]{setCoarseningThreshold}{\optional{theta=0.25}} 630 Sets the threshold for coarsening in the \AMG solver or preconditioner 631 \end{methoddesc} 632 633 \begin{methoddesc}[SolverOptions]{getCoarseningThreshold}{} 634 Returns the threshold for coarsening in the \AMG solver or preconditioner 635 \end{methoddesc} 636 637 \begin{methoddesc}[SolverOptions]{setMinCoarseMatrixSize}{\optional{size=500}} 638 Sets the minumum size of the coarsest level matrix in \AMG. 639 \end{methoddesc} 640 641 \begin{methoddesc}[SolverOptions]{getMinCoarseMatrixSize}{} 642 Returns the minumum size of the coarsest level matrix in \AMG. 643 \end{methoddesc} 644 645 \begin{methoddesc}[SolverOptions]{setSmoother}{\optional{smoother=\GAUSSSEIDEL}} 646 Sets the \JACOBI or \GAUSSSEIDEL smoother to be used in \AMG. 647 \end{methoddesc} 648 649 \begin{methoddesc}[SolverOptions]{getSmoother}{} 650 Returns the key for \JACOBI or \GAUSSSEIDEL smoother used in \AMG. 651 \end{methoddesc} 652 653 \begin{methoddesc}[SolverOptions]{setNumSweeps}{\optional{sweeps=2}} 654 Sets the number of sweeps in a \JACOBI or \GAUSSSEIDEL preconditioner. 655 \end{methoddesc} 656 657 \begin{methoddesc}[SolverOptions]{getNumSweeps}{} 658 Returns the number of sweeps in a \JACOBI or \GAUSSSEIDEL preconditioner. 659 \end{methoddesc} 660 661 \begin{methoddesc}[SolverOptions]{setNumPreSweeps}{\optional{sweeps=2}} 662 Sets the number of sweeps in the pre-smoothing step of \AMG 663 \end{methoddesc} 664 665 \begin{methoddesc}[SolverOptions]{getNumPreSweeps}{} 666 Returns the number of sweeps in the pre-smoothing step of \AMG 667 \end{methoddesc} 668 669 \begin{methoddesc}[SolverOptions]{setNumPostSweeps}{\optional{sweeps=2}} 670 Sets the number of sweeps in the post-smoothing step of \AMG 671 \end{methoddesc} 672 673 \begin{methoddesc}[SolverOptions]{getNumPostSweeps}{} 674 Returns he number of sweeps sweeps in the post-smoothing step of \AMG 675 \end{methoddesc} 676 677 \begin{methoddesc}[SolverOptions]{setTolerance}{\optional{rtol=1.e-8}} 678 Sets the relative tolerance for the solver. The actually meaning of tolerance depends 679 on the underlying PDE library. In most cases, the tolerance 680 will only consider the error from solving the discrete problem but will 681 not consider any discretization error. 682 \end{methoddesc} 683 684 \begin{methoddesc}[SolverOptions]{getTolerance}{} 685 Returns the relative tolerance for the solver 686 \end{methoddesc} 687 688 \begin{methoddesc}[SolverOptions]{setAbsoluteTolerance}{\optional{atol=0.}} 689 Sets the absolute tolerance for the solver. The actually meaning of tolerance depends 690 on the underlying PDE library. In most cases, the tolerance 691 will only consider the error from solving the discrete problem but will 692 not consider any discretization error. 693 \end{methoddesc} 694 695 \begin{methoddesc}[SolverOptions]{getAbsoluteTolerance}{} 696 Returns the absolute tolerance for the solver 697 \end{methoddesc} 698 699 700 \begin{methoddesc}[SolverOptions]{setInnerTolerance}{\optional{rtol=0.9}} 701 Sets the relative tolerance for an inner iteration scheme for instance 702 on the coarsest level in a multi-level scheme. 703 \end{methoddesc} 704 705 \begin{methoddesc}[SolverOptions]{getInnerTolerance}{} 706 Returns the relative tolerance for an inner iteration scheme 707 \end{methoddesc} 708 709 \begin{methoddesc}[SolverOptions]{setDropTolerance}{\optional{drop_tol=0.01}} 710 Sets the relative drop tolerance in ILUT 711 \end{methoddesc} 712 713 \begin{methoddesc}[SolverOptions]{getDropTolerance}{} 714 Returns the relative drop tolerance in \ILUT 715 \end{methoddesc} 716 717 718 \begin{methoddesc}[SolverOptions]{setDropStorage}{\optional{storage=2.}} 719 Sets the maximum allowed increase in storage for \ILUT. \var{storage}=2 would mean that a doubling of the storage needed for the coefficient matrix is allowed in the \ILUT factorization. 720 \end{methoddesc} 721 722 \begin{methoddesc}[SolverOptions]{getDropStorage}{} 723 Returns the maximum allowed increase in storage for \ILUT 724 \end{methoddesc} 725 726 \begin{methoddesc}[SolverOptions]{setRelaxationFactor}{\optional{factor=0.3}} 727 Sets the relaxation factor used to add dropped elements in \RILU to the main diagonal. 728 \end{methoddesc} 729 730 \begin{methoddesc}[SolverOptions]{getRelaxationFactor}{} 731 Returns the relaxation factor used to add dropped elements in RILU to the main diagonal. 732 \end{methoddesc} 733 734 \begin{methoddesc}[SolverOptions]{isSymmetric}{} 735 Returns \True is the descrete system is indicated as symmetric. 736 \end{methoddesc} 737 738 \begin{methoddesc}[SolverOptions]{setSymmetryOn}{} 739 Sets the symmetry flag to indicate that the coefficient matrix is symmetric. 740 \end{methoddesc} 741 742 \begin{methoddesc}[SolverOptions]{setSymmetryOff}{} 743 Clears the symmetry flag for the coefficient matrix. 744 \end{methoddesc} 745 746 \begin{methoddesc}[SolverOptions]{isVerbose}{} 747 Returns \True if the solver is expected to be verbose. 748 \end{methoddesc} 749 750 751 \begin{methoddesc}[SolverOptions]{setVerbosityOn}{} 752 Switches the verbosity of the solver on. 753 \end{methoddesc} 754 755 756 \begin{methoddesc}[SolverOptions]{setVerbosityOff}{} 757 Switches the verbosity of the solver off. 758 \end{methoddesc} 759 760 761 \begin{methoddesc}[SolverOptions]{adaptInnerTolerance}{} 762 Returns \True if the tolerance of the inner solver is selected automatically. 763 Otherwise the inner tolerance set by \member{setInnerTolerance} is used. 764 \end{methoddesc} 765 766 \begin{methoddesc}[SolverOptions]{setInnerToleranceAdaptionOn}{} 767 Switches the automatic selection of inner tolerance on 768 \end{methoddesc} 769 770 \begin{methoddesc}[SolverOptions]{setInnerToleranceAdaptionOff}{} 771 Switches the automatic selection of inner tolerance off. 772 \end{methoddesc} 773 774 \begin{methoddesc}[SolverOptions]{setInnerIterMax}{\optional{iter_max=10}} 775 Sets the maximum number of iteration steps for the inner iteration. 776 \end{methoddesc} 777 778 \begin{methoddesc}[SolverOptions]{getInnerIterMax}{} 779 Returns maximum number of inner iteration steps. 780 \end{methoddesc} 781 782 \begin{methoddesc}[SolverOptions]{acceptConvergenceFailure}{} 783 Returns \True if a failure to meet the stopping criteria within the 784 given number of iteration steps is not raising in exception. This is useful 785 if a solver is used in a non-linear context where the non-linear solver can 786 continue even if the returned the solution does not necessarily meet the 787 stopping criteria. One can use the \member{hasConverged} method to check if the 788 last call to the solver was successful. 789 \end{methoddesc} 790 791 \begin{methoddesc}[SolverOptions]{setAcceptanceConvergenceFailureOn}{} 792 Switches the acceptance of a failure of convergence on. 793 \end{methoddesc} 794 795 \begin{methoddesc}[SolverOptions]{setAcceptanceConvergenceFailureOff}{} 796 Switches the acceptance of a failure of convergence off. 797 \end{methoddesc} 798 799 \begin{memberdesc}[SolverOptions]{DEFAULT} 800 default method, preconditioner or package to be used to solve the PDE. An appropriate method should be 801 chosen by the used PDE solver library. 802 \end{memberdesc} 803 804 \begin{memberdesc}[SolverOptions]{MKL} 805 the \MKL library by Intel,~\Ref{MKL}\footnote{The \MKL library will only be available when the Intel compilation environment is used.}. 806 \end{memberdesc} 807 808 \begin{memberdesc}[SolverOptions]{UMFPACK} 809 the \UMFPACK,~\Ref{UMFPACK}. Remark: \UMFPACK is not parallelized. 810 \end{memberdesc} 811 812 \begin{memberdesc}[SolverOptions]{PASO} 813 \PASO is the solver library of \finley, see \Sec{CHAPTER ON FINLEY}. 814 \end{memberdesc} 815 816 \begin{memberdesc}[SolverOptions]{ITERATIVE} 817 the default iterative method and preconditioner. The actually used method depends on the PDE solver library and the solver package been chosen. Typically, \PCG is used for symmetric PDEsand \BiCGStab otherwise, both with \JACOBI preconditioner. 818 \end{memberdesc} 819 820 \begin{memberdesc}[SolverOptions]{DIRECT} 821 the default direct linear solver. 822 \end{memberdesc} 823 824 \begin{memberdesc}[SolverOptions]{CHOLEVSKY} 825 direct solver based on Cholevsky factorization (or similar), see~\Ref{Saad}. The solver will require a symmetric PDE. 826 \end{memberdesc} 827 828 \begin{memberdesc}[SolverOptions]{PCG} 829 preconditioned conjugate gradient method, see~\Ref{WEISS}\index{linear solver!PCG}\index{PCG}. The solver will require a symmetric PDE. 830 \end{memberdesc} 831 832 \begin{memberdesc}[SolverOptions]{TFQMR} 833 transpose-free quasi-minimal residual method, see~\Ref{WEISS}\index{linear solver!TFQMR}\index{TFQMR}. \end{memberdesc} 834 835 \begin{memberdesc}[SolverOptions]{GMRES} 836 the GMRES method, see~\Ref{WEISS}\index{linear solver!GMRES}\index{GMRES}. Truncation and restart are controlled by the parameters 837 \var{truncation} and \var{restart} of \method{getSolution}. 838 \end{memberdesc} 839 840 \begin{memberdesc}[SolverOptions]{MINRES} 841 minimal residual method method, \index{linear solver!MINRES}\index{MINRES} \end{memberdesc} 842 843 \begin{memberdesc}[SolverOptions]{LUMPING} 844 uses lumping to solve the system of linear equations~\index{linear solver!lumping}\index{lumping}. This solver technique 845 condenses the stiffness matrix to a diagonal matrix so the solution of the linear systems becomes very cheap. It can be used when 846 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 847 but is expected to converge to zero when the mesh gets finer. 848 Lumping does not use the linear system solver library. 849 \end{memberdesc} 850 851 \begin{memberdesc}[SolverOptions]{PRES20} 852 the GMRES method with truncation after five residuals and 853 restart after 20 steps, see~\Ref{WEISS}. 854 \end{memberdesc} 855 856 \begin{memberdesc}[SolverOptions]{CGS} 857 conjugate gradient squared method, see~\Ref{WEISS}. 858 \end{memberdesc} 859 860 \begin{memberdesc}[SolverOptions]{BICGSTAB} 861 stabilized bi-conjugate gradients methods, see~\Ref{WEISS}. 862 \end{memberdesc} 863 864 \begin{memberdesc}[SolverOptions]{SSOR} 865 symmetric successive over-relaxation method, see~\Ref{WEISS}. Typically used as preconditioner but some linear solver libraries support 866 this as a solver. 867 \end{memberdesc} 868 869 \begin{memberdesc}[SolverOptions]{ILU0} 870 the incomplete LU factorization preconditioner with no fill-in, see~\Ref{Saad}. 871 \end{memberdesc} 872 873 \begin{memberdesc}[SolverOptions]{ILUT} 874 the incomplete LU factorization preconditioner with fill-in, see~\Ref{Saad}. During the LU-factorization element with 875 relative size less then \member{getDropTolerance} are dropped. Moreover, the size of the LU-factorization is restricted to the 876 \member{getDropStorage}-fold of the stiffness matrix. \member{getDropTolerance} and \member{getDropStorage} are both set in the 877 \method{getSolution} call. 878 \end{memberdesc} 879 880 \begin{memberdesc}[SolverOptions]{JACOBI} 881 the Jacobi preconditioner, see~\Ref{Saad}. 882 \end{memberdesc} 883 884 885 \begin{memberdesc}[SolverOptions]{AMG} 886 the algebraic--multi grid method, see~\Ref{AMG}. This method can be used as linear solver method but is more robust when used 887 in a preconditioner. 888 \end{memberdesc} 889 890 \begin{memberdesc}[SolverOptions]{GAUSS_SEIDEL} 891 the symmetric Gauss-Seidel preconditioner, see~\Ref{Saad}. 892 \member{getNumSweeps()} is the number of sweeps used. 893 \end{memberdesc} 894 895 \begin{memberdesc}[SolverOptions]{RILU} 896 relaxed incomplete LU factorization preconditioner, see~\Ref{RELAXILU}. This method is similar to \ILU0 but dropped elements are added to the main diagonal 897 with the relaxation factor \member{getRelaxationFactor} 898 \end{memberdesc} 899 900 \begin{memberdesc}[SolverOptions]{REC_ILU} 901 recursive incomplete LU factorization preconditioner, see~\Ref{RILU}. This method is similar to \ILU0 but applies reordering during the factorization. 902 \end{memberdesc} 903 904 \begin{memberdesc}[SolverOptions]{NO_REORDERING} 905 no ordering is used during factorization. 906 \end{memberdesc} 907 908 \begin{memberdesc}[SolverOptions]{DEFAULT_REORDERING} 909 the default reordering method during factorization. 910 \end{memberdesc} 911 912 \begin{memberdesc}[SolverOptions]{MINIMUM_FILL_IN} 913 applies reordering before factorization using a fill-in minimization strategy. You have to check with the particular solver library or 914 linear solver package if this is supported. In any case, it is advisable to apply reordering on the mesh to minimize fill-in. 915 \end{memberdesc} 916 917 \begin{memberdesc}[SolverOptions]{NESTED_DISSECTION} 918 applies reordering before factorization using a nested dissection strategy. You have to check with the particular solver library or 919 linear solver package if this is supported. In any case, it is advisable to apply reordering on the mesh to minimize fill-in. 920 \end{memberdesc} 921 922 \begin{memberdesc}[SolverOptions]{TRILINOS} 923 the Trilinos library is used as a solver~\Ref{TRILINOS} 924 \end{memberdesc} 925 926 \begin{memberdesc}[SolverOptions]{SUPER_LU} 927 the SuperLU library is used as a solver~\Ref{SuperLU} 928 \end{memberdesc} 929 930 \begin{memberdesc}[SolverOptions]{PASTIX} 931 the Pastix library is used as a solver~\Ref{PASTIX} 932 \end{memberdesc} 933 934 935 \begin{memberdesc}[SolverOptions]{STANDARD_COARSENING} 936 \AMG coarsening method by Ruge and Stueben using measure of importance principle~\cite{Multigrid}. 937 \end{memberdesc} 938 939 \begin{memberdesc}[SolverOptions]{YAIR_SHAPIRA_COARSENING} 940 \AMG coarsening method by Yair-Shapira 941 \end{memberdesc} 942 943 \begin{memberdesc}[SolverOptions]{RUGE_STUEBEN_COARSENING} \AMG coarsening method by Ruge and Stueben using greedy algorithm for splitting. 944 \end{memberdesc} 945 946 \begin{memberdesc}[SolverOptions]{AGGREGATION_COARSENING} \AMG coarsening using (symmetric) aggregation using greedy algorithm for splitting. 947 \end{memberdesc} 948 949 \begin{memberdesc}[SolverOptions]{NO_PRECONDITIONER} 950 no preconditioner is applied. 951 \end{memberdesc} 952

## Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision