From 79922b5939e81b25ab4e6f6314bea4a36f078f8c Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 25 Jul 2017 14:13:43 +0100 Subject: [PATCH] HTML doc fixes. --- docs/html/index.html | 84 +- docs/html/node1.html | 32 +- docs/html/node10.html | 16 +- docs/html/node11.html | 60 +- docs/html/node12.html | 103 ++- docs/html/node13.html | 438 ++++++---- docs/html/node14.html | 442 ++++------ docs/html/node15.html | 235 +++-- docs/html/node16.html | 309 +++++-- docs/html/node17.html | 943 +++----------------- docs/html/node18.html | 98 +-- docs/html/node19.html | 875 +++++++++++++++++-- docs/html/node2.html | 86 +- docs/html/node20.html | 90 +- docs/html/node21.html | 176 +--- docs/html/node22.html | 106 ++- docs/html/node23.html | 171 +++- docs/html/node24.html | 182 +--- docs/html/node25.html | 117 ++- docs/html/node26.html | 191 ++-- docs/html/node27.html | 167 +--- docs/html/node28.html | 88 +- docs/html/node29.html | 167 +++- docs/html/node3.html | 64 +- docs/html/node30.html | 211 +---- docs/html/node4.html | 18 +- docs/html/node5.html | 42 +- docs/html/node6.html | 46 +- docs/html/node7.html | 40 +- docs/html/node8.html | 32 +- docs/html/node9.html | 16 +- docs/html/userhtml.html | 84 +- docs/mld2p4-2.1-guide.pdf | 1741 +++++++++++++++++++------------------ docs/src/background.tex | 2 +- 34 files changed, 3925 insertions(+), 3547 deletions(-) diff --git a/docs/html/index.html b/docs/html/index.html index 3a70fdf3..82c86e2e 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -23,18 +23,18 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next up previous - contents
- Next: Next: Abstract -   Contents

@@ -90,74 +90,78 @@ July 31, 2017

diff --git a/docs/html/node1.html b/docs/html/node1.html index d847bde7..ce6ac925 100644 --- a/docs/html/node1.html +++ b/docs/html/node1.html @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
- Next: Next: Contents - Up: Up: userhtml - Previous: Previous: userhtml -   Contents

@@ -92,26 +92,26 @@ the user interface of MLD2P4.
- next - up - previous - contents
- Next: Next: Contents - Up: Up: userhtml - Previous: Previous: userhtml -   Contents diff --git a/docs/html/node10.html b/docs/html/node10.html index b826184e..1eb7127a 100644 --- a/docs/html/node10.html +++ b/docs/html/node10.html @@ -25,26 +25,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
- Next: Next: Multigrid Background - Up: Up: Configuring and Building MLD2P4 - Previous: Previous: Bug reporting -   Contents

diff --git a/docs/html/node11.html b/docs/html/node11.html index 3036675d..6b586910 100644 --- a/docs/html/node11.html +++ b/docs/html/node11.html @@ -18,7 +18,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
- Next: Next: AMG preconditioners - Up: Up: userhtml - Previous: Previous: Example and test programs -   Contents

@@ -55,47 +55,51 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Multigrid Background Multigrid preconditioners, coupled with Krylov iterative solvers, are widely used in the parallel solution of large and sparse linear systems, because of their optimality in the solution of linear systems arising from the discretization of scalar elliptic Partial Differential Equations (PDEs) on regular grids. Optimality, also known as algorithmic scalability, is the property of having a computational cost per iteration that depends linearly on the problem size, and a convergence rate that is independent of the problem size. Multigrid preconditioners are based on a recursive application of a two-grid process consisting of smoother iterations and a coarse-space (or coarse-level) correction. The smoothers may be either basic iterative methods, such as the Jacobi and Gauss-Seidel ones, or more complex subspace-correction methods, such as the Schwarz ones. The coarse-space correction consists of solving, in an appropriately chosen coarse space, the residual equation associated with the approximate solution computed by the smoother, and of using the solution of this equation to correct the previous approximation. The transfer of information between the original (fine) space and the coarse one is performed by using suitable restriction and prolongation operators. The construction of the coarse space and the corresponding transfer operators is carried out by applying a so-called coarsening algorithm to the system matrix. Two main approaches can be used to perform coarsening: the geometric approach, which exploits the knowledge of some physical grid associated with the matrix and requires the user to define transfer operators from the fine to the coarse level and vice versa, and the algebraic approach, which builds the coarse-space correction and the associate transfer operators using only matrix information. The first approach may be difficult when the system comes from discretizations on complex geometries; furthermore, ad hoc one-level smoothers may be required to get an efficient interplay between fine and coarse levels, e.g., when matrices with highly varying coefficients are considered. The second approach performs a fully automatic coarsening and enforces the interplay between fine and coarse level by suitably choosing the coarse space and the coarse-to-fine interpolation (see, e.g., [3,23,21] for details.) MLD2P4 uses a pure algebraic approach, based on the smoothed aggregation algorithm [2,25], for building the sequence of coarse matrices and transfer operators, starting from the original one. A decoupled version of this algorithm is implemented, where the smoothed aggregation is applied locally to each submatrix [24]. A brief description of the AMG preconditioners implemented in MLD2P4 is given in Sections 4.1-4.3. For further details the reader is referred to [4,5,7,8]. We note that optimal multigrid preconditioners do not necessarily correspond to minimum execution times in a parallel setting. Indeed, to obtain effective parallel multigrid preconditioners, a tradeoff between the optimality and the cost of building and applying the smoothers and the coarse-space corrections must be achieved. Effective parallel preconditioners require algorithmic scalability to be coupled with implementation scalability, i.e., a computational cost per iteration which remains (almost) constant as the number of parallel processors increases. + HREF="node29.html#Briggs2000">3,23,21] for details.) MLD2P4 uses a pure algebraic approach, based on the smoothed aggregation algorithm [2,25], for building the sequence of coarse matrices and transfer operators, starting from the original one. A decoupled version of this algorithm is implemented, where the smoothed aggregation is applied locally to each submatrix [24]. A brief description of the AMG preconditioners implemented in MLD2P4 is given in Sections 4.1-4.3. For further details the reader is referred to [4,5,7,8]. We note that optimal multigrid preconditioners do not necessarily correspond to minimum execution times in a parallel setting. Indeed, to obtain effective parallel multigrid preconditioners, a tradeoff between the optimality and the cost of building and applying the smoothers and the coarse-space corrections must be achieved. Effective parallel preconditioners require algorithmic scalability to be coupled with implementation scalability, i.e., a computational cost per iteration which remains (almost) constant as the number of parallel processors increases.

Subsections
- next - up - previous - contents
- Next: Next: AMG preconditioners - Up: Up: userhtml - Previous: Previous: Example and test programs -   Contents diff --git a/docs/html/node12.html b/docs/html/node12.html index 098eaea6..42fbc14c 100644 --- a/docs/html/node12.html +++ b/docs/html/node12.html @@ -18,6 +18,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds + @@ -25,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
- Next: Getting Started - Up: Next: Smoothed Aggregation + Up: Multigrid Background - Previous: Previous: Multigrid Background -   Contents

@@ -150,29 +151,91 @@ P^k \in \mathbb{R}^{n_k \times n_{k+1}}, \quad R^k \in \mathbb{R}^{n_{k+1}\ ALT="\begin{displaymath} P^k \in \mathbb{R}^{n_k \times n_{k+1}}, \quad R^k \in \mathbb{R}^{n_{k+1}\times n_k}; \end{displaymath}">
-

-
+

the matrix $A^{k+1}$ is computed by using the previous operators according to the Galerkin approach, i.e., +

+
+ + +\begin{displaymath}
 A^{k+1}=R^kA^kP^k.
\end{displaymath} +
+
+

In the current implementation of MLD2P4 we have $R^k=(P^k)^T$ A smoother with iteration matrix $M^k$ is set up at each level $k < nlev$, and a solver is set up at the coarsest level, so that they are ready for application (for example, setting up a solver based on the $LU$ factorization means computing and storing the $L$ and $U$ factors). The construction of the hierarchy of AMG components described so far corresponds to the so-called build phase of the preconditioner. +
+ + + +
Figure 1: +Application phase of a V-cycle preconditioner.
+
+ +\framebox{
\begin{minipage}{.85\textwidth}
\begin{tabbing}
\quad \=\quad \=\quad...
+...mm]
\>endif \\ [1mm]
\>return $u^k$\ \\ [1mm]
end
\end{tabbing}
\end{minipage}
} +
+
+ The components produced in the build phase may be combined in several ways to obtain different multilevel preconditioners; this is done in the application phase, i.e., in the computation of a vector of type $w=B^{-1}v$, where $B$ denotes the preconditioner, usually within an iteration of a Krylov solver [20]. An example of such a combination, known as V-cycle, is given in Figure 1. In this case, a single iteration of the same smoother is used before and after the the recursive call to the V-cycle (i.e., in the pre-smoothing and post-smoothing phases); however, different choices can be performed. Other cycles can be defined; in MLD2P4, we implemented the standard V-cycle and W-cycle [3], and a version of the K-cycle described in [19].
- next - up - previous - contents
- Next: Getting Started - Up: Next: Smoothed Aggregation + Up: Multigrid Background - Previous: Previous: Multigrid Background -   Contents diff --git a/docs/html/node13.html b/docs/html/node13.html index 2af33d3d..f871dd6c 100644 --- a/docs/html/node13.html +++ b/docs/html/node13.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Getting Started - +Smoothed Aggregation + @@ -18,206 +18,314 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
- Next: Examples - Up: userhtml - Previous: Next: Smoothers and coarsest-level solvers + Up: Multigrid Background + Previous: AMG preconditioners -   Contents

-

+


-Getting Started -

-

-We describe the basics for building and applying MLD2P4 one-level and multi-level -(i.e., AMG) preconditioners with the Krylov solvers included in PSBLAS [13]. -The following steps are required: - - +Smoothed Aggregation + In order to define the prolongator $P^k$, used to compute the coarse-level matrix $A^{k+1}$, MLD2P4 uses the smoothed aggregation algorithm described in [2,25]. The basic idea of this algorithm is to build a coarse set of indices $\Omega^{k+1}$ by suitably grouping the indices of $\Omega^k$ into disjoint subsets (aggregates), and to define the coarse-to-fine space transfer operator $P^k$ by applying a suitable smoother to a simple piecewise constant prolongation operator, with the aim of improving the quality of the coarse-space correction. Three main steps can be identified in the smoothed aggregation procedure: +

    -
  1. Declare the preconditioner data structure. It is a derived data type, - mld_xprec_ type, where x may be s, d, c - or z, according to the basic data type of the sparse matrix - (s = real single precision; d = real double precision; - c = complex single precision; z = complex double precision). - This data structure is accessed by the user only through the MLD2P4 routines, - following an object-oriented approach. -
  2. -
  3. Allocate and initialize the preconditioner data structure, according to - a preconditioner type chosen by the user. This is performed by the routine - init, which also sets defaults for each preconditioner - type selected by the user. The preconditioner types and the defaults associated - with them are given in Table 1, where the strings used by - init to identify the preconditioner types are also given. - Note that these strings are valid also if uppercase letters are substituted by - corresponding lowercase ones. -
  4. -
  5. Modify the selected preconditioner type, by properly setting - preconditioner parameters. This is performed by the routine set. - This routine must be called only if the user wants to modify the default values - of the parameters associated with the selected preconditioner type, to obtain a variant - of that preconditioner. Examples of use of set are given in - Section 5.1; a complete list of all the - preconditioner parameters and their allowed and default values is provided in - Section 6, Tables 2-8. +
  6. aggregation of the indices of $\Omega^k$ to obtain $\Omega^{k+1}$;
  7. -
  8. Build the preconditioner for a given matrix. If the selected preconditioner - is multi-level, then two steps must be performed, as specified next. -
    -
    4.1
    -
    Build the aggregation hierarchy for a given matrix. This is -performed by the routine hierarchy_build. -
    -
    4.2
    -
    Build the preconditioner for a given matrix. This is performed -by the routine smoothers_build. -
    -
    - If the selected preconditioner is one-level, it is built in a single step, -performed by the routine bld. +
  9. construction of the prolongator $P^k$;
  10. -
  11. Apply the preconditioner at each iteration of a Krylov solver. - This is performed by the routine aply. When using the PSBLAS Krylov solvers, - this step is completely transparent to the user, since aply is called - by the PSBLAS routine implementing the Krylov solver (psb_krylov). +
  12. application of $P^k$ and $R^k=(P^k)^T$ to build $A^{k+1}$.
  13. -
  14. Free the preconditioner data structure. This is performed by - the routine free. This step is complementary to step 1 and should - be performed when the preconditioner is no more used. -
  15. -
-

-All the previous routines are available as methods of the preconditioner object. -A detailed description of them is given in Section 6. -Examples showing the basic use of MLD2P4 are reported in Section 5.1. - -

- -

-
- - - +

for a given threshold +$\theta \in [0,1]$ (see [25] for the details). Since this algorithm has a sequential nature, a decoupled version of it is applied, where each processor independently executes the algorithm on the set of indices assigned to it in the initial data distribution. This version is embarrassingly parallel, since it does not require any data communication. On the other hand, it may produce some nonuniform aggregates and is strongly dependent on the number of processors and on the initial partitioning of the matrix $A$. Nevertheless, this parallel algorithm has been chosen for MLD2P4, since it has been shown to produce good results in practice [5,7,24]. The prolongator $P^k$ is built starting from a tentative prolongator +$\bar{P}^k \in \mathbb{R}^{n_k \times n_{k+1}}$, defined as +
+
+ + +
Table 1: -Preconditioner types, corresponding strings and default choices. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - + In order to perform the coarsening step, the smoothed aggregation algorithm described in [25] is used. In this algorithm, each index +$j \in \Omega^{k+1}$ corresponds to an aggregate $\Omega^k_j$ of $\Omega^k$, consisting of a suitably chosen index +$i \in \Omega^k$ and indices that are (usually) contained in a strongly-coupled neighborood of $i$, i.e., +
+
+ + +
TYPESTRINGDEFAULT PRECONDITIONER
No preconditioner'NOPREC'Considered only to use the PSBLAS - Krylov solvers with no preconditioner.
Diagonal'DIAG' or 'JACOBI'Diagonal preconditioner. - For any zero diagonal entry of the matrix to be preconditioned, - the corresponding entry of the preconditioner is set to 1.
Block Jacobi'BJAC'Block-Jacobi with ILU(0) on the local blocks.
Additive Schwarz'AS'Restricted Additive Schwarz (RAS), - with overlap 1 and ILU(0) on the local blocks.
Multilevel'ML'V-cycle with one hybrid forward Gauss-Seidel - (GS) sweep as pre-smoother and one hybrid backward - GS sweep as post-smoother, basic smoothed aggregation - as coarsening algorithm, and LU (plus triangular solve) - as coarsest-level solver. See the default values in - Tables 2-8 - for further details of the preconditioner.
+ +
\begin{displaymath}
+\Omega^k_j \subset \mathcal{N}_i^k(\theta) = 
 \left\{ r ...
+...vert a_{ii}^ka_{rr}^k\vert} \right \} \cup \left\{ i \right\},
\end{displaymath} +(3)
-
+ +
\begin{displaymath}
\bar{P}^k =(\bar{p}_{ij}^k), \quad \bar{p}_{ij}^k = 
\left\{...
+...ega^k_j, \\ 
0 & \quad \mbox{otherwise},
\end{array} \right.
+\end{displaymath} +(4)
-

-
-

-Note that the module mld_prec_mod, containing the definition of the -preconditioner data type and the interfaces to the routines of MLD2P4, -must be used in any program calling such routines. -The modules psb_base_mod, for the sparse matrix and communication descriptor -data types, and psb_krylov_mod, for interfacing with the -Krylov solvers, must be also used (see Section 5.1). -
-

-Remark 1. Coarsest-level solvers based on the LU factorization, -such as those implemented in UMFPACK, MUMPS, SuperLU, and SuperLU_Dist, -usually lead to smaller numbers of preconditioned Krylov -iterations than inexact solvers, when the linear system comes from -a standard discretization of basic scalar elliptic PDE problems. However, -this does not necessarily correspond to the smallest execution time -on parallel computers. -

- -


- -Subsections +

where $\Omega^k_j$ is the aggregate of $\Omega^k$ corresponding to the index +$j \in \Omega^{k+1}$. $P^k$ is obtained by applying to $\bar{P}^k$ a smoother +$S^k \in \mathbb{R}^{n_k \times n_k}$: +

+
+ - - -
+\begin{displaymath}
P^k = S^k \bar{P}^k,
\end{displaymath} +
+
+

in order to remove nonsmooth components from the range of the prolongator, and hence to improve the convergence properties of the multi-level method [2,23]. A simple choice for $S^k$ is the damped Jacobi smoother: +

+
+ + +\begin{displaymath}
S^k = I - \omega^k (D^k)^{-1} A^k_F , 
\end{displaymath} +
+
+

where $D^k$ is the diagonal matrix with the same diagonal entries as $A^k$, +$A^k_F = (\bar{a}_{ij}^k)$ is the filtered matrix defined as +
+
+ + + + + +
\begin{displaymath}
+\bar{a}_{ij}^k =
 \left \{ \begin{array}{ll}
 a_{ij}^k & ...
+...ii}^k = a_{ii}^k - \sum_{j \ne i} (a_{ij}^k - \bar{a}_{ij}^k),
\end{displaymath} +(5)
+

and $\omega^k$ is an approximation of $4/(3\rho^k)$, where $\rho^k$ is the spectral radius of +$(D^k)^{-1}A^k_F$ [2]. In MLD2P4 this approximation is obtained by using +$\Vert A^k_F \Vert _\infty$ as an estimate of $\rho^k$. Note that for systems coming from uniformly elliptic problems, filtering the matrix $A^k$ has little or no effect, and $A^k$ can be used instead of $A^k_F$. The latter choice is the default in MLD2P4.
- next - + up - previous - contents
- Next: Examples - Up: userhtml - Previous: Next: Smoothers and coarsest-level solvers + Up: Multigrid Background + Previous: AMG preconditioners -   Contents diff --git a/docs/html/node14.html b/docs/html/node14.html index a5607641..71b7a474 100644 --- a/docs/html/node14.html +++ b/docs/html/node14.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Examples - +Smoothers and coarsest-level solvers + @@ -19,296 +19,216 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
- Next: User Interface - Up: Getting Started - Previous: Getting Started -   Next: Getting Started + Up: Multigrid Background + Previous: Smoothed Aggregation +   Contents

-

+


-Examples -

-

-The code reported in Figure 2 shows how to set and apply the default -multi-level preconditioner available in the real double precision version -of MLD2P4 (see Table 1). This preconditioner is chosen -by simply specifying 'ML' as the second argument of P%init -(a call to P%set is not needed) and is applied with the CG -solver provided by PSBLAS (the matrix of the system to be solved is -assumed to be positive definite). As previously observed, the modules -psb_base_mod, mld_prec_mod and psb_krylov_mod -must be used by the example program. - -

-The part of the code concerning the -reading and assembling of the sparse matrix and the right-hand side vector, performed -through the PSBLAS routines for sparse matrix and vector management, is not reported -here for brevity; the statements concerning the deallocation of the PSBLAS -data structure are neglected too. -The complete code can be found in the example program file mld_dexample_ml.f90, -in the directory examples/fileread of the MLD2P4 implementation (see -Section 3.5). A sample test problem along with the relevant -input data is available in examples/fileread/runs. -For details on the use of the PSBLAS routines, see the PSBLAS User's -Guide [13]. - -

-The setup and application of the default multi-level preconditioner -for the real single precision and the complex, single and double -precision, versions are obtained with straightforward modifications of the previous -example (see Section 6 for details). If these versions are installed, -the corresponding codes are available in examples/fileread/. - -

- -

- - - -
Figure 2: -setup and application of the default multi-level preconditioner (example 1). -
+Smoothers and coarsest-level solvers + The smoothers implemented in MLD2P4 include the Jacobi and block-Jacobi methods, a hybrid version of the forward and backward Gauss-Seidel methods, and the additive Schwarz (AS) ones (see, e.g., [20,21]). The hybrid Gauss-Seidel version is considered because the original Gauss-Seidel method is inherently sequential. At each iteration of the hybrid version, each parallel process uses the most recent values of its own local variables and the values of the non-local variables computed at the previous iteration, obtained by exchanging data with other processes before the beginning of the current iteration. In the AS methods, the index space $\Omega^k$ is divided into $m_k$ subsets $\Omega^k_i$ of size $n_{k,i}$, possibly overlapping. For each $i$ we consider the restriction operator +$R_i^k \in \mathbb{R}^{n_{k,i} \times n_k}$ that maps a vector $x^k$ to the vector $x_i^k$ made of the components of $x^k$ with indices in $\Omega^k_i$, and the prolongation operator +$P^k_i = (R_i^k)^T$. These operators are then used to build +$A_i^k=R_i^kA^kP_i^k$, which is the restriction of $A^k$ to the index space $\Omega^k_i$. The classical AS preconditioner $M^k_{AS}$ is defined as +

-
- -
-
-  use psb_base_mod
-  use mld_prec_mod
-  use psb_krylov_mod
-... ...
-!
-! sparse matrix
-  type(psb_dspmat_type) :: A
-! sparse matrix descriptor
-  type(psb_desc_type)   :: desc_A
-! preconditioner
-  type(mld_dprec_type)  :: P
-! right-hand side and solution vectors
-  type(psb_d_vect_type) :: b, x
-... ...
-!
-! initialize the parallel environment
-  call psb_init(ictxt)
-  call psb_info(ictxt,iam,np)
-... ...
-!
-! read and assemble the spd matrix A and the right-hand side b 
-! using PSBLAS routines for sparse matrix / vector management
-... ...
-!
-! initialize the default multi-level preconditioner, i.e. V-cycle
-! with basic smoothed aggregation, 1 hybrid forward/backward
-! GS sweep as pre/post-smoother and UMFPACK as coarsest-level
-! solver
-  call P%init('ML',info)
-!
-! build the preconditioner
-  call P%hierarchy_build(A,desc_A,info)
-  call P%smoothers_build(A,desc_A,info)
+
 
-!
-! set the solver parameters and the initial guess
-  ... ...
-!
-! solve Ax=b with preconditioned CG
-  call psb_krylov('CG',A,P,b,x,tol,desc_A,info)
-  ... ...
-!
-! deallocate the preconditioner
-  call P%free(info)
-!
-! deallocate other data structures
-  ... ...
-!
-! exit the parallel environment
-  call psb_exit(ictxt)
-  stop
-
-
-
- -
+\begin{displaymath}
 ( M^k_{AS} )^{-1} = \sum_{i=1}^{m_k} P_i^k (A_i^k)^{-1} R_i^{k},
\end{displaymath}
- -

-Different versions of the multi-level preconditioner can be obtained by changing -the default values of the preconditioner parameters. The code reported in -Figure 3 shows how to set a V-cycle preconditioner -which applies 1 block-Jacobi sweep as pre- and post-smoother, -and solves the coarsest-level system with 8 block-Jacobi sweeps. -Note that the ILU(0) factorization (plus triangular solve) is used as -local solver for the block-Jacobi sweeps, since this is the default associated -with block-Jacobi and set by P%init. -Furthermore, specifying block-Jacobi as coarsest-level -solver implies that the coarsest-level matrix is distributed -among the processes. -Figure 4 shows how to set a W-cycle preconditioner which -applies 2 hybrid Gauss-Seidel sweeps as pre- and post-smoother, -and solves the coarsest-level system with the multifrontal LU factorization -implemented in MUMPS. It is specified that the coarsest-level -matrix is distributed, since MUMPS can be used on both -replicated and distributed matrices, and by default -it is used on replicated ones. The code fragments shown in Figures 3 and 4 are -included in the example program file mld_dexample_ml.f90 too. - -

-Finally, Figure 5 shows the setup of a one-level -additive Schwarz preconditioner, i.e., RAS with overlap 2. -Note also that a Krylov method different from CG must be used to solve -the preconditioned system, since the preconditione in nonsymmetric. -The corresponding example program is available in the file -mld_dexample_1lev.f90. - -

-For all the previous preconditioners, example programs where the sparse matrix and -the right-hand side are generated by discretizing a PDE with Dirichlet -boundary conditions are also available in the directory examples/pdegen. - -

- -

- - - -
Figure 3: -setup of a multi-level preconditioner
-
-
- -
-
-... ...
-! build a V-cycle preconditioner with 1 block-Jacobi sweep (with 
-! ILU(0) on the blocks) as pre- and post-smoother, and 8  block-Jacobi
-! sweeps (with ILU(0) on the blocks) as coarsest-level solver
-  call P%init('ML',info)
-  call_P%set('SMOOTHER_TYPE','BJAC',info)
-  call P%set('COARSE_SOLVE','BJAC',info)
-  call P%set('COARSE_SWEEPS',8,info)
-  call P%hierarchy_build(A,desc_A,info)
-  call P%smoothers_build(A,desc_A,info)
-... ...
-
-
-
-
-

-

-
-
- -

- -

- - - -
Figure 4: -setup of a multi-level preconditioner
-
-
- -
-
-... ...
-! build a W-cycle preconditioner with 2 hybrid Gauss-Seidel sweeps
-! as pre- and post-smoother, a distributed coarsest
-! matrix, and MUMPS as coarsest-level solver
-  call P%init('ML',info)
-  call P%set('ML_CYCLE','WCYCLE',info)
-  call P%set('SMOOTHER_TYPE','FBGS',info)
-  call P%set('SMOOTHER_SWEEPS',2,info)
-  call P%set('COARSE_SOLVE','MUMPS',info)
-  call P%set('COARSE_MAT','DIST',info)
-  call P%hierarchy_build(A,desc_A,info)
-  call P%smoothers_build(A,desc_A,info)
-... ...
-
-
-
- -
-
- -

- -

- - - -
Figure 5: -setup of a one-level Schwarz preconditioner.
-
-
- -
-
-... ...
-! set RAS with overlap 2 and ILU(0) on the local blocks
-  call P%init('AS',info)
-  call P%set('SUB_OVR',2,info)
-  call P%bld(A,desc_A,info)
-... ...
-! solve Ax=b with preconditioned BiCGSTAB
-  call psb_krylov('BICGSTAB',A,P,b,x,tol,desc_A,info)
-
-
-
- -
-
- -

-


+
+

where $A_i^k$ is supposed to be nonsingular. We observe that an approximate inverse of $A_i^k$ is usually considered instead of $(A_i^k)^{-1}$. The setup of $M^k_{AS}$ during the multilevel build phase involves + + The computation of +$z^k=M^k_{AS}w^k$, with +$w^k \in \mathbb{R}^{n_k}$, during the multilevel application phase, requires + + Variants of the classical AS method, which use modifications of the restriction and prolongation operators, are also implemented in MLD2P4. Among them, the Restricted AS (RAS) preconditioner usually outperforms the classical AS preconditioner in terms of convergence rate and of computation and communication time on parallel distributed-memory computers, and is therefore the most widely used among the AS preconditioners [6]. Direct solvers based on sparse LU factorizations, implemented in the third-party libraries reported in Section 3.2, can be applied as coarsest-level solvers by MLD2P4. Native inexact solvers based on incomplete LU factorizations, as well as Jacobi, hybrid (forward) Gauss-Seidel, and block Jacobi preconditioners are also available. Direct solvers usually lead to more effective preconditioners in terms of algorithmic scalability; however, this does not guarantee parallel efficiency. +
- next - + up - previous - contents
- Next: User Interface - Up: Getting Started - Previous: Getting Started -   Next: Getting Started + Up: Multigrid Background + Previous: Smoothed Aggregation +   Contents diff --git a/docs/html/node15.html b/docs/html/node15.html index a364c90b..ca695c21 100644 --- a/docs/html/node15.html +++ b/docs/html/node15.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -User Interface - +Getting Started + @@ -18,96 +18,173 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + + - next - up - previous - contents
- Next: Subroutine init - Up: Next: Examples + Up: userhtml - Previous: Examples -   Previous: Smoothers and coarsest-level solvers +   Contents

-

+


-User Interface +Getting Started

-The basic user interface of MLD2P4 consists of eight routines. The six -routines init, set, -hierarchy_build, smoothers_build, -bld, and apply encapsulate all the -functionalities for the setup and the application of any multi-level and one-level -preconditioner implemented in the package. -The routine free deallocates the preconditioner data structure, while -descr prints a description of the preconditioner setup by the user. - -

-All the routines are available as methods of the preconditioner object. -For each routine, the same user interface is overloaded with -respect to the real/ complex case and the single/double precision; -arguments with appropriate data types must be passed to the routine, -i.e., +We describe the basics for building and applying MLD2P4 one-level and multi-level +(i.e., AMG) preconditioners with the Krylov solvers included in PSBLAS [13]. +The following steps are required: -

-A description of each routine is given in the remainder of this section. +
  • Free the preconditioner data structure. This is performed by + the routine free. This step is complementary to step 1 and should + be performed when the preconditioner is no more used. +
  • + +

    +All the previous routines are available as methods of the preconditioner object. +A detailed description of them is given in Section 6. +Examples showing the basic use of MLD2P4 are reported in Section 5.1.

    +

    +
    + + + +
    Table 1: +Preconditioner types, corresponding strings and default choices. +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TYPESTRINGDEFAULT PRECONDITIONER
    No preconditioner'NOPREC'Considered only to use the PSBLAS + Krylov solvers with no preconditioner.
    Diagonal'DIAG' or 'JACOBI'Diagonal preconditioner. + For any zero diagonal entry of the matrix to be preconditioned, + the corresponding entry of the preconditioner is set to 1.
    Block Jacobi'BJAC'Block-Jacobi with ILU(0) on the local blocks.
    Additive Schwarz'AS'Restricted Additive Schwarz (RAS), + with overlap 1 and ILU(0) on the local blocks.
    Multilevel'ML'V-cycle with one hybrid forward Gauss-Seidel + (GS) sweep as pre-smoother and one hybrid backward + GS sweep as post-smoother, basic smoothed aggregation + as coarsening algorithm, and LU (plus triangular solve) + as coarsest-level solver. See the default values in + Tables 2-8 + for further details of the preconditioner.
    +
    +

    +
    +

    +Note that the module mld_prec_mod, containing the definition of the +preconditioner data type and the interfaces to the routines of MLD2P4, +must be used in any program calling such routines. +The modules psb_base_mod, for the sparse matrix and communication descriptor +data types, and psb_krylov_mod, for interfacing with the +Krylov solvers, must be also used (see Section 5.1). +
    +

    +Remark 1. Coarsest-level solvers based on the LU factorization, +such as those implemented in UMFPACK, MUMPS, SuperLU, and SuperLU_Dist, +usually lead to smaller numbers of preconditioned Krylov +iterations than inexact solvers, when the linear system comes from +a standard discretization of basic scalar elliptic PDE problems. However, +this does not necessarily correspond to the smallest execution time +on parallel computers.



    @@ -115,46 +192,32 @@ A description of each routine is given in the remainder of this section. Subsections
    - next - up - previous - contents
    - Next: Subroutine init - Up: Next: Examples + Up: userhtml - Previous: Examples -   Previous: Smoothers and coarsest-level solvers +   Contents diff --git a/docs/html/node16.html b/docs/html/node16.html index ec06f471..e4e69d4a 100644 --- a/docs/html/node16.html +++ b/docs/html/node16.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Subroutine init - +Examples + @@ -18,7 +18,6 @@ original version by: Nikos Drakos, CBLU, University of Leeds - @@ -26,104 +25,290 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Subroutine set - Up: User Interface - Previous: User Interface -   Next: User Interface + Up: Getting Started + Previous: Getting Started +   Contents

    -

    +


    -Subroutine init +Examples

    - -

    call p%init(ptype,info) -
    +The code reported in Figure 2 shows how to set and apply the default +multi-level preconditioner available in the real double precision version +of MLD2P4 (see Table 1). This preconditioner is chosen +by simply specifying 'ML' as the second argument of P%init +(a call to P%set is not needed) and is applied with the CG +solver provided by PSBLAS (the matrix of the system to be solved is +assumed to be positive definite). As previously observed, the modules +psb_base_mod, mld_prec_mod and psb_krylov_mod +must be used by the example program. + +

    +The part of the code concerning the +reading and assembling of the sparse matrix and the right-hand side vector, performed +through the PSBLAS routines for sparse matrix and vector management, is not reported +here for brevity; the statements concerning the deallocation of the PSBLAS +data structure are neglected too. +The complete code can be found in the example program file mld_dexample_ml.f90, +in the directory examples/fileread of the MLD2P4 implementation (see +Section 3.5). A sample test problem along with the relevant +input data is available in examples/fileread/runs. +For details on the use of the PSBLAS routines, see the PSBLAS User's +Guide [13]. +

    - -This routine allocates and initializes the preconditioner -p, according to the preconditioner type chosen by the user. +The setup and application of the default multi-level preconditioner +for the real single precision and the complex, single and double +precision, versions are obtained with straightforward modifications of the previous +example (see Section 6 for details). If these versions are installed, +the corresponding codes are available in examples/fileread/.

    -Arguments -

    + +
    + + + +
    Figure 2: +setup and application of the default multi-level preconditioner (example 1). +
    +
    +
    + +
    +
    +  use psb_base_mod
    +  use mld_prec_mod
    +  use psb_krylov_mod
    +... ...
    +!
    +! sparse matrix
    +  type(psb_dspmat_type) :: A
    +! sparse matrix descriptor
    +  type(psb_desc_type)   :: desc_A
    +! preconditioner
    +  type(mld_dprec_type)  :: P
    +! right-hand side and solution vectors
    +  type(psb_d_vect_type) :: b, x
    +... ...
    +!
    +! initialize the parallel environment
    +  call psb_init(ictxt)
    +  call psb_info(ictxt,iam,np)
    +... ...
    +!
    +! read and assemble the spd matrix A and the right-hand side b 
    +! using PSBLAS routines for sparse matrix / vector management
    +... ...
    +!
    +! initialize the default multi-level preconditioner, i.e. V-cycle
    +! with basic smoothed aggregation, 1 hybrid forward/backward
    +! GS sweep as pre/post-smoother and UMFPACK as coarsest-level
    +! solver
    +  call P%init('ML',info)
    +!
    +! build the preconditioner
    +  call P%hierarchy_build(A,desc_A,info)
    +  call P%smoothers_build(A,desc_A,info)
    +
    +!
    +! set the solver parameters and the initial guess
    +  ... ...
    +!
    +! solve Ax=b with preconditioned CG
    +  call psb_krylov('CG',A,P,b,x,tol,desc_A,info)
    +  ... ...
    +!
    +! deallocate the preconditioner
    +  call P%free(info)
    +!
    +! deallocate other data structures
    +  ... ...
    +!
    +! exit the parallel environment
    +  call psb_exit(ictxt)
    +  stop
    +
    +
    +
    + +
    +

    - - - - - - - - - - - - - - - - -
    ptype character(len=*), intent(in).
    - The type of preconditioner. Its values are specified - in Table 1.
    - Note that the strings are case insensitive.
    -info integer, intent(out).
    - Error code. If no error, 0 is returned. See Section 8 for details.
    +Different versions of the multi-level preconditioner can be obtained by changing +the default values of the preconditioner parameters. The code reported in +Figure 3 shows how to set a V-cycle preconditioner +which applies 1 block-Jacobi sweep as pre- and post-smoother, +and solves the coarsest-level system with 8 block-Jacobi sweeps. +Note that the ILU(0) factorization (plus triangular solve) is used as +local solver for the block-Jacobi sweeps, since this is the default associated +with block-Jacobi and set by P%init. +Furthermore, specifying block-Jacobi as coarsest-level +solver implies that the coarsest-level matrix is distributed +among the processes. +Figure 4 shows how to set a W-cycle preconditioner which +applies 2 hybrid Gauss-Seidel sweeps as pre- and post-smoother, +and solves the coarsest-level system with the multifrontal LU factorization +implemented in MUMPS. It is specified that the coarsest-level +matrix is distributed, since MUMPS can be used on both +replicated and distributed matrices, and by default +it is used on replicated ones. The code fragments shown in Figures 3 and 4 are +included in the example program file mld_dexample_ml.f90 too. +

    -For compatibility with the previous versions of MLD2P4, this routine can be also invoked -as follows: +Finally, Figure 5 shows the setup of a one-level +additive Schwarz preconditioner, i.e., RAS with overlap 2. +Note also that a Krylov method different from CG must be used to solve +the preconditioned system, since the preconditione in nonsymmetric. +The corresponding example program is available in the file +mld_dexample_1lev.f90.

    +For all the previous preconditioners, example programs where the sparse matrix and +the right-hand side are generated by discretizing a PDE with Dirichlet +boundary conditions are also available in the directory examples/pdegen. + +

    + +

    + + + +
    Figure 3: +setup of a multi-level preconditioner
    +
    +
    + +
    +
    +... ...
    +! build a V-cycle preconditioner with 1 block-Jacobi sweep (with 
    +! ILU(0) on the blocks) as pre- and post-smoother, and 8  block-Jacobi
    +! sweeps (with ILU(0) on the blocks) as coarsest-level solver
    +  call P%init('ML',info)
    +  call_P%set('SMOOTHER_TYPE','BJAC',info)
    +  call P%set('COARSE_SOLVE','BJAC',info)
    +  call P%set('COARSE_SWEEPS',8,info)
    +  call P%hierarchy_build(A,desc_A,info)
    +  call P%smoothers_build(A,desc_A,info)
    +... ...
    +
    +
    +
    +
    +

    +

    +
    +
    -
    call mld_precinit(p,ptype,info) -

    +

    + + + +
    Figure 4: +setup of a multi-level preconditioner
    +
    +
    + +
    +
    +... ...
    +! build a W-cycle preconditioner with 2 hybrid Gauss-Seidel sweeps
    +! as pre- and post-smoother, a distributed coarsest
    +! matrix, and MUMPS as coarsest-level solver
    +  call P%init('ML',info)
    +  call P%set('ML_CYCLE','WCYCLE',info)
    +  call P%set('SMOOTHER_TYPE','FBGS',info)
    +  call P%set('SMOOTHER_SWEEPS',2,info)
    +  call P%set('COARSE_SOLVE','MUMPS',info)
    +  call P%set('COARSE_MAT','DIST',info)
    +  call P%hierarchy_build(A,desc_A,info)
    +  call P%smoothers_build(A,desc_A,info)
    +... ...
    +
    +
    +
    + +
    +
    + +

    + +

    + + + +
    Figure 5: +setup of a one-level Schwarz preconditioner.
    +
    +
    + +
    +
    +... ...
    +! set RAS with overlap 2 and ILU(0) on the local blocks
    +  call P%init('AS',info)
    +  call P%set('SUB_OVR',2,info)
    +  call P%bld(A,desc_A,info)
    +... ...
    +! solve Ax=b with preconditioned BiCGSTAB
    +  call psb_krylov('BICGSTAB',A,P,b,x,tol,desc_A,info)
    +
    +
    +
    + +
    +
    +

    -


    +
    - next - up - previous - contents
    - Next: Subroutine set - Up: User Interface - Previous: User Interface -   Next: User Interface + Up: Getting Started + Previous: Getting Started +   Contents diff --git a/docs/html/node17.html b/docs/html/node17.html index 1e8d5699..c5dc1094 100644 --- a/docs/html/node17.html +++ b/docs/html/node17.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Subroutine set - +User Interface + @@ -18,888 +18,143 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
    - Next: Subroutine build - Up: User Interface - Previous: Subroutine init -   Next: Subroutine init + Up: userhtml + Previous: Examples +   Contents

    -

    +


    -Subroutine set -

    -

    - -

    call p%set(what,val,info [,ilev, ilmax, pos]) -
    -

    - -This routine sets the parameters defining the preconditioner p. More -precisely, the parameter identified by what is assigned the value -contained in val. - -

    -Arguments -

    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    what character(len=*).
    - The parameter to be set. It can be specified through its name; - the string is case-insensitive. See - Tables 2-8.
    -val integer or character(len=*) or - real(psb_spk_) or real(psb_dpk_), - intent(in).
    - The value of the parameter to be set. The list of allowed - values and the corresponding data types is given in - Tables 2-8. - When the value is of type character(len=*), - it is also treated as case insensitive.
    -info integer, intent(out).
    - Error code. If no error, 0 is returned. See Section 8 - for details.
    -ilev integer, optional, intent(in).
    - For the multi-level preconditioner, the level at which the - preconditioner parameter has to be set. - The levels are numbered in increasing - order starting from the finest one, i.e., level 1 is the finest level. - If ilev is not present, the parameter identified by what - is set at all the appropriate levels (see - Tables 2-8).
    -ilmax integer, optional, intent(in).
    - For the multi-level preconditioner, when both - ilev and ilmax are present, the settings - are applied at all levels ilev:ilmax. When - ilev is present but ilmax is not, then - the default is ilmax=ilev. - The levels are numbered in increasing - order starting from the finest one, i.e., level 1 is the finest level.
    -pos charater(len=*), optional, intent(in).
    - Whether the other arguments apply only to the pre-smoother ('PRE') - or to the post-smoother ('POST'). If pos is not present, - the other arguments are applied to both smoothers. - If the preconditioner is one-level or the parameter identified by what - does not concern the smoothers, pos is ignored. -
    -

    -For compatibility with the previous versions of MLD2P4, this routine can be also invoked -as follows: +User Interface + +

    +The basic user interface of MLD2P4 consists of eight routines. The six +routines init, set, +hierarchy_build, smoothers_build, +bld, and apply encapsulate all the +functionalities for the setup and the application of any multi-level and one-level +preconditioner implemented in the package. +The routine free deallocates the preconditioner data structure, while +descr prints a description of the preconditioner setup by the user.

    - -

    call mld_precset(p,what,val,info) -
    -

    - -However, in this case the optional arguments ilev, ilmax, and pos -cannot be used. -
    -

    -A variety of preconditioners can be obtained -by a suitable setting of the preconditioner parameters. These parameters -can be logically divided into four groups, i.e., parameters defining +All the routines are available as methods of the preconditioner object. +For each routine, the same user interface is overloaded with +respect to the real/ complex case and the single/double precision; +arguments with appropriate data types must be passed to the routine, +i.e., -

      -
    1. the type of multi-level cycle and how many cycles must be applied; +
        +
      • the sparse matrix data structure, containing the matrix to be + preconditioned, must be of type psb_xspmat_type + with x = s for real single precision, x = d + for real double precision, x = c for complex single precision, + x = z for complex double precision;
      • -
      • the aggregation algorithm; +
      • the preconditioner data structure must be of type + mld_xprec_type, with x = + s, d, c, z, according to the sparse + matrix data structure;
      • -
      • the coarse-space correction at the coarsest level (for multi-level - preconditioners only); +
      • the arrays containing the vectors $v$ and $w$ involved in + the preconditioner application $w=B^{-1}v$ must be of type + psb_xvect_type with x = + s, d, c, z, in a manner completely + analogous to the sparse matrix type;
      • -
      • the smoother of the multi-level preconditioners, or the one-level - preconditioner. - -

        +

      • real parameters defining the preconditioner must be declared + according to the precision of the sparse matrix and preconditioner + data structures (see Section 6.2).
      • -
    -A list of the parameters that can be set, along with their allowed and -default values, is given in Tables 2-8. -For a description of the meaning of the parameters, please -refer also to Section 4. -
    -

    -Remark 2. A smoother is usually obtained by combining two objects: -a smoother (SMOOTHER_TYPE) and a local solver (SUB_SOLVE), -as specified in Tables 7-8. -For example, the block-Jacobi smoother using -ILU(0) on the blocks is obtained by combining the block-Jacobi smoother -object with the ILU(0) solver object. Similarly, -the hybrid Gauss-Seidel smoother (see Note in Table 7) -is obtained by combining the block-Jacobi smoother object with a single sweep -of the Gauss-Seidel solver object, while the point-Jacobi smoother is the -result of combining the block-Jacobi smoother object with a single sweep -of the pointwise-Jacobi solver object. However, for simplicity, shortcuts are -provided to set point-Jacobi, hybrid (forward) Gauss-Seidel, and -hybrid backward Gauss-Seidel, i.e., the previous smoothers can be defined -by setting only SMOOTHER_TYPE to appropriate values (see -Tables 7), i.e., without setting -SUB_SOLVE too. - -

    -The smoother and solver objects are arranged in a -hierarchical manner. When specifying a smoother object, its parameters, -including the local solver, are set to their default values, and when a solver -object is specified, its defaults are also set, overriding in both -cases any previous settings even if explicitly specified. Therefore if -the user sets a smoother, and wishes to use a solver -different from the default one, the call to set the solver must come -after the call to set the smoother. - -

    -Similar considerations apply to the point-Jacobi, Gauss-Seidel and block-Jacobi -coarsest-level solvers, and shortcuts are available -in this case too (see Table 5). -
    -

    -Remark 3. In general, a coarsest-level solver cannot be used with -both the replicated and distributed coarsest-matrix layout; -therefore, setting the solver after the layout may change the layout. -Similarly, setting the layout after the solver may change the solver. - -

    -More precisely, UMFPACK and SuperLU require the coarsest-level -matrix to be replicated, while SuperLU_Dist requires it to be distributed. -In these cases, setting the coarsest-level solver implies that -the layout is redefined according to the solver, ovverriding any -previous settings. MUMPS, point-Jacobi, -hybrid Gauss-Seidel and block-Jacobi can be applied to -replicated and distributed matrices, thus their choice -does not modify any previously specified layout. -It is worth noting that, when the matrix is replicated, -the point-Jacobi, hybrid Gauss-Seidel and block-Jacobi solvers -reduce to the corresponding local solver objects (see Remark 2). -For the point-Jacobi and Gauss-Seidel solvers, these objects -correspond to a single point-Jacobi sweep and a single -Gauss-Seidel sweep, respectively, which are very poor solvers. + +A description of each routine is given in the remainder of this section.

    -On the other hand, the distributed layout can be used with any solver -but UMFPACK and SuperLU; therefore, if any of these two solvers has already -been selected, the coarsest-level solver is changed to block-Jacobi, -with the previously chosen solver applied to the local blocks. -Likewise, the replicated layout can be used with any solver but SuperLu_Dist; -therefore, if SuperLu_Dist has been previously set, the coarsest-level -solver is changed to the default sequential solver. - -

    - -

    -
    - - - -
    Table 2: -Parameters defining the multi-level cycle and the number of cycles to -be applied. -
    -
    - - - - - - - - - - - - - - - - - - - -
    whatDATA TYPEvalDEFAULTCOMMENTS
    'ML_CYCLE'character(len=*)'VCYCLE' -

    -'WCYCLE' -

    -'KCYCLE' -

    -'MULT' -

    -'ADD'

    'VCYCLE'Multi-level cycle: V-cycle, W-cycle, K-cycle, hybrid Multiplicative Schwarz, - and Additive Schwarz. -

    -Note that hybrid Multiplicative Schwarz is equivalent to V-cycle and - is included for compatibility with previous versions of MLD2P4.

    'OUTER_SWEEPS'integerAny integer -

    -number $\ge 1$

    1Number of multi-level cycles.
    -
    -
    -

    -
    -

    - -

    -
    - - - -
    Table 3: -Parameters defining the aggregation algorithm. -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    whatDATA TYPEvalDEFAULTCOMMENTS
    'MIN_COARSE_SIZE'integerAny number -

    -$> 0$

    -$\lfloor 40 \sqrt[3]{n} \rfloor$, where $n$ is the dimension - of the matrix at the finest levelCoarse size threshold. The aggregation stops - if the global number of variables of the - computed coarsest matrix - is lower than or equal to this threshold - (see Note).
    'MIN_CR_RATIO'realAny number -

    -$> 1$

    1.5Minimum coarsening ratio. The aggregation stops - if the ratio between the matrix dimensions - at two consecutive levels is lower than or equal to this - threshold (see Note).
    'MAX_LEVS'integerAny integer -

    -number $> 1$

    20Maximum number of levels. The aggregation stops - if the number of levels reaches this value (see Note).
    'PAR_AGGR'character(len=*)'DEC', 'SYMDEC''DEC'Parallel aggregation algorithm. -

    -Currently, only the - decoupled aggregation (DEC) is available; the - SYMDEC option applies decoupled - aggregation to the sparsity pattern - of $A+A^T$.

    'AGGR_TYPE'character(len=*)'VMB''VMB'Type of aggregation algorithm: currently, the scalar aggregation - algorithm by Vanek, Mandel and Brezina is implemented - [25].
    'AGGR_PROL'character(len=*)'SMOOTHED', 'UNSMOOTHED''SMOOTHED'Prolongator used by the aggregation algorithm: smoothed or unsmoothed - (i.e., tentative prolongator).
    Note. The aggregation algorithm stops when -at least one of the following criteria is met: -the coarse size threshold, the
    maximum coarsening ratio, or the maximum number -of levels is reached. Therefore, the actual number of levels may be
    smaller than the specified maximum number -of levels.
    -
    -
    -

    -
    -

    - -

    -
    - - - -
    Table 4: -Parameters defining the aggregation algorithm (continued). -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    whatDATA TYPEvalDEFAULTCOMMENTS
    'AGGR_ORD'character(len=*)'NATURAL' -

    -'DEGREE'

    'NATURAL'Initial ordering of indices for the aggregation - algorithm: either natural ordering or sorted by - descending degrees of the nodes in the - matrix graph.
    'AGGR_THRESH'real(kind_parameter)Any real -

    -number $\in [0, 1]$

    0.05The threshold $\theta$ in the aggregation algorithm, - see (3) in Section 4.2. - See also the note at the bottom of this table.
    'AGGR_FILTER'character(len=*)'FILTER' -

    -'NOFILTER'

    'NOFILTER'Matrix used in computing the smoothed - prolongator: filtered or unfiltered (see (4) in Section 4.2).
    Note. Different thresholds at different levels, such as -those used in [25, Section 5.1], can be easily set by -invoking the rou-
    tine set with -the parameter ilev.
    -
    -
    -

    -
    -

    -

    -
    - - - -
    Table 5: -Parameters defining the coarse-space correction at the coarsest -level.
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    whatDATA TYPEvalDEFAULTCOMMENTS
    'COARSE_MAT'character(len=*)'DIST' -

    -'REPL'

    'REPL'Coarsest matrix layout: distributed among the processes or - replicated on each of them.
    'COARSE_SOLVE'character(len=*)'MUMPS' -

    -'UMF' -

    -'SLU' -

    -'SLUDIST' -

    -'JACOBI' -

    -'GS' -

    -'BJAC'

    See Note.Solver used at the coarsest level: sequential - LU from MUMPS, UMFPACK, or SuperLU - (plus triangular solve); - distributed LU from MUMPS or SuperLU_Dist - (plus triangular solve); - point-Jacobi, hybrid Gauss-Seidel or block-Jacobi. -

    -Note that UMF and SLU require the coarsest - matrix to be replicated, SLUDIST, JACOBI, - GS and BJAC require it to be - distributed, MUMPS can be used with either - a replicated or a distributed matrix. When any of the previous - solvers is specified, the matrix layout is set to a default - value - which allows the use - value UMFPACK and SuperLU_Dist - are available only in double precision.

    'COARSE_SUBSOLVE'character(len=*)'ILU' -

    -'ILUT' -

    -'MILU' -

    -'MUMPS' -

    -'SLU' -

    -'UMF'

    See Note.Solver for the diagonal blocks of the coarse matrix, - in case the block Jacobi solver - is chosen as coarsest-level solver: ILU($p$), ILU($p,t$), - MILU($p$), LU from MUMPS, SuperLU or UMFPACK - (plus triangular solve). - Note that UMFPACK and SuperLU_Dist - are available only in double precision.
    Note. Defaults for COARSE_SOLVE and -COARSE_SUBSOLVE are chosen in the following order:
    single precision version - MUMPS if installed, - then SLU if installed, - ILU otherwise;
    double precision version - UMF if installed, - then MUMPS if installed, then SLU if - installed, ILU otherwise.
    -
    -
    -

    -
    -

    - -

    -
    - - - -
    Table 6: -Parameters defining the coarse-space correction at the coarsest -level (continued).
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    whatDATA TYPEvalDEFAULTCOMMENTS
    'COARSE_SWEEPS'integerAny integer -

    -number $> 0$

    10Number of sweeps when JACOBI, GS or BJAC - is chosen as coarsest-level solver.
    'COARSE_FILLIN'integerAny integer -

    -number $\ge 0$

    0Fill-in level $p$ of the ILU factorizations.
    'COARSE_ILUTHRS'real(kind_parameter)Any real -

    -number $\ge 0$

    0Drop tolerance $t$ in the ILU($p,t$) factorization.
    -
    -
    -

    -

    -

    -
    - - - -
    Table 7: -Parameters defining the smoother or the details of the one-level preconditioner. -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -what DATA TYPE val DEFAULT -COMMENTS
    'SMOOTHER_TYPE' character(len=*) - 'JACOBI' -

    -'GS' -

    -'BGS' -

    -'BJAC' - -

    -'AS' -

    'FBGS' - Type of smoother used in the multi-level preconditioner: - point-Jacobi, hybrid (forward) Gauss-Seidel, - hybrid backward Gauss-Seidel, block-Jacobi, and - Additive Schwarz. -

    -It is ignored by one-level preconditioners.

    'SUB_SOLVE' character(len=*) - 'JACOBI' -

    -'GS' -

    -'BGS' -

    -'ILU' -

    -'ILUT' -

    -'MILU' -

    -'MUMPS' -

    -'SLU' -

    -'UMF' -

    GS and BGS for pre- and post-smoothers - of multi-level preconditioners, respectively -

    -ILU for block-Jacobi and Additive Schwarz - one-level preconditioners -

    The local solver to be used with the smoother or one-level - preconditioner (see Remark 2, page 24): point-Jacobi, - hybrid (forward) Gauss-Seidel, hybrid backward - Gauss-Seidel, ILU($p$), ILU($p,t$), MILU($p$), - LU from MUMPS, SuperLU or UMFPACK - (plus triangular solve). See Note for details on hybrid - Gauss-Seidel.
    'SMOOTHER_SWEEPS' integer - Any integer -

    -number $\ge 0$ -

    1 - Number of sweeps of the smoother or one-level preconditioner. - In the multi-level case, no pre-smother or - post-smoother is used if this parameter is set to 0 - together with pos='PRE' or pos='POST, - respectively.
    'SUB_OVR' integer - Any integer -

    -number $\ge 0$ -

    1 - Number of overlap layers, for Additive Schwarz only.
    -
    -

    -
    -

    - -

    -
    - - - -
    Table 8: -Parameters defining the smoother or the details of the one-level preconditioner -(continued).
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -what DATA TYPE val DEFAULT -COMMENTS
    'SUB_RESTR' character(len=*) - 'HALO' -

    -'NONE' -

    'HALO' - Type of restriction operator, for Additive Schwarz only: - HALO for taking into account the overlap, NONE - for neglecting it. -

    -Note that HALO must be chosen for - the classical Addditive Schwarz smoother and its RAS variant.

    'SUB_PROL' character(len=*) - 'SUM' -

    -'NONE' -

    'NONE' - Type of prolongation operator, for Additive Schwarz only: - SUM for adding the contributions from the overlap, NONE - for neglecting them. -

    -Note that SUM must be chosen for the classical Additive - Schwarz smoother, and NONE for its RAS variant.

    'SUB_FILLIN' integer - Any integer -

    -number $\ge 0$ -

    0 - Fill-in level $p$ of the incomplete LU factorizations.
    'SUB_ILUTHRS' real(kind_parameter) - Any real number $\ge 0$ - 0 - Drop tolerance $t$ in the ILU($p,t$) factorization.
    -
    -

    -
    -

    - -

    -


    +

    + +Subsections + + + +
    - next - + up - previous - contents
    - Next: Subroutine build - Up: User Interface - Previous: Subroutine init -   Next: Subroutine init + Up: userhtml + Previous: Examples +   Contents diff --git a/docs/html/node18.html b/docs/html/node18.html index 6f5ede9d..4479d15b 100644 --- a/docs/html/node18.html +++ b/docs/html/node18.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Subroutine build - +Subroutine init + @@ -20,50 +20,49 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: Subroutine hierarchy_build - Up: User Interface - Previous: Subroutine set -   Next: Subroutine set + Up: User Interface + Previous: User Interface +   Contents

    -

    +


    -Subroutine build +Subroutine init

    -

    call p%build(a,desc_a,info) -
    +
    call p%init(ptype,info) +

    -This routine builds the one-level preconditioner p according to the requirements -made by the user through the routines init and set -(see Sections 6.4 and 6.5 for multi-level preconditioners). +This routine allocates and initializes the preconditioner +p, according to the preconditioner type chosen by the user.

    Arguments @@ -71,34 +70,25 @@ made by the user through the routines init and set

    - - + + - - - - + - + - + - +
    -a type(psb_xspmat_type), intent(in).
    ptype character(len=*), intent(in).
    The sparse matrix structure containing the local part of the - matrix to be preconditioned. Note that x must be chosen according - to the real/complex, single/double precision version of MLD2P4 under use. - See the PSBLAS User's Guide for details [13].
    -desc_a type(psb_desc_type), intent(in). The type of preconditioner. Its values are specified + in Table 1.
    The communication descriptor of a. See the PSBLAS User's Guide for - details [13]. Note that the strings are case insensitive.
    info
    +info integer, intent(out).
    Error code. If no error, 0 is returned. See Section 8 for details. Error code. If no error, 0 is returned. See Section 8 for details.

    @@ -107,37 +97,33 @@ as follows:

    -

    call mld_precbld(p,what,val,info) +
    call mld_precinit(p,ptype,info)

    - -In this case, the routine can be used to build multi-level preconditioners too. - -


    - next - + up - previous - contents
    - Next: Subroutine hierarchy_build - Up: User Interface - Previous: Subroutine set -   Next: Subroutine set + Up: User Interface + Previous: User Interface +   Contents diff --git a/docs/html/node19.html b/docs/html/node19.html index e3c84247..950b875b 100644 --- a/docs/html/node19.html +++ b/docs/html/node19.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Subroutine hierarchy_build - +Subroutine set + @@ -20,50 +20,50 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: Subroutine smoothers_build - Up: User Interface - Previous: Subroutine build -   Next: Subroutine build + Up: User Interface + Previous: Subroutine init +   Contents

    -

    +


    -Subroutine hierarchy_build +Subroutine set

    -

    call p%hierarchy_build(a,desc_a,info) -
    +
    call p%set(what,val,info [,ilev, ilmax, pos]) +

    -This routine builds the hierarchy of matrices and restriction/prolongation -operators for the multi-level preconditioner p, according to the requirements -made by the user through the routines init and set. +This routine sets the parameters defining the preconditioner p. More +precisely, the parameter identified by what is assigned the value +contained in val.

    Arguments @@ -71,62 +71,835 @@ made by the user through the routines init and set.

    - - + + - + - - + + - + - + - + + + + + + + + + + + + + + + + + + +
    -a type(psb_xspmat_type), intent(in).
    what character(len=*).
    The sparse matrix structure containing the local part of the - matrix to be preconditioned. Note that x must be chosen according - to the real/complex, -single/double precision version of MLD2P4 under use. - See the PSBLAS User's Guide for details [13]. The parameter to be set. It can be specified through its name; + the string is case-insensitive. See + Tables 2-8.
    -desc_a type(psb_desc_type), intent(in).
    +val integer or character(len=*) or + real(psb_spk_) or real(psb_dpk_), + intent(in).
    The communication descriptor of a. See the PSBLAS User's Guide for - details [13]. The value of the parameter to be set. The list of allowed + values and the corresponding data types is given in + Tables 2-8. + When the value is of type character(len=*), + it is also treated as case insensitive.
    info
    +info integer, intent(out).
    Error code. If no error, 0 is returned. See Section 8 for details. Error code. If no error, 0 is returned. See Section 8 + for details.
    +ilev integer, optional, intent(in).
    + For the multi-level preconditioner, the level at which the + preconditioner parameter has to be set. + The levels are numbered in increasing + order starting from the finest one, i.e., level 1 is the finest level. + If ilev is not present, the parameter identified by what + is set at all the appropriate levels (see + Tables 2-8).
    +ilmax integer, optional, intent(in).
    + For the multi-level preconditioner, when both + ilev and ilmax are present, the settings + are applied at all levels ilev:ilmax. When + ilev is present but ilmax is not, then + the default is ilmax=ilev. + The levels are numbered in increasing + order starting from the finest one, i.e., level 1 is the finest level.
    +pos charater(len=*), optional, intent(in).
    + Whether the other arguments apply only to the pre-smoother ('PRE') + or to the post-smoother ('POST'). If pos is not present, + the other arguments are applied to both smoothers. + If the preconditioner is one-level or the parameter identified by what + does not concern the smoothers, pos is ignored. +

    +For compatibility with the previous versions of MLD2P4, this routine can be also invoked +as follows: + +

    + +

    call mld_precset(p,what,val,info) +
    +

    + +However, in this case the optional arguments ilev, ilmax, and pos +cannot be used. +
    +

    +A variety of preconditioners can be obtained +by a suitable setting of the preconditioner parameters. These parameters +can be logically divided into four groups, i.e., parameters defining + +

      +
    1. the type of multi-level cycle and how many cycles must be applied; +
    2. +
    3. the aggregation algorithm; +
    4. +
    5. the coarse-space correction at the coarsest level (for multi-level + preconditioners only); +
    6. +
    7. the smoother of the multi-level preconditioners, or the one-level + preconditioner. + +

      +

    8. +
    +A list of the parameters that can be set, along with their allowed and +default values, is given in Tables 2-8. +For a description of the meaning of the parameters, please +refer also to Section 4. +
    +

    +Remark 2. A smoother is usually obtained by combining two objects: +a smoother (SMOOTHER_TYPE) and a local solver (SUB_SOLVE), +as specified in Tables 7-8. +For example, the block-Jacobi smoother using +ILU(0) on the blocks is obtained by combining the block-Jacobi smoother +object with the ILU(0) solver object. Similarly, +the hybrid Gauss-Seidel smoother (see Note in Table 7) +is obtained by combining the block-Jacobi smoother object with a single sweep +of the Gauss-Seidel solver object, while the point-Jacobi smoother is the +result of combining the block-Jacobi smoother object with a single sweep +of the pointwise-Jacobi solver object. However, for simplicity, shortcuts are +provided to set point-Jacobi, hybrid (forward) Gauss-Seidel, and +hybrid backward Gauss-Seidel, i.e., the previous smoothers can be defined +by setting only SMOOTHER_TYPE to appropriate values (see +Tables 7), i.e., without setting +SUB_SOLVE too. + +

    +The smoother and solver objects are arranged in a +hierarchical manner. When specifying a smoother object, its parameters, +including the local solver, are set to their default values, and when a solver +object is specified, its defaults are also set, overriding in both +cases any previous settings even if explicitly specified. Therefore if +the user sets a smoother, and wishes to use a solver +different from the default one, the call to set the solver must come +after the call to set the smoother. + +

    +Similar considerations apply to the point-Jacobi, Gauss-Seidel and block-Jacobi +coarsest-level solvers, and shortcuts are available +in this case too (see Table 5). +
    +

    +Remark 3. In general, a coarsest-level solver cannot be used with +both the replicated and distributed coarsest-matrix layout; +therefore, setting the solver after the layout may change the layout. +Similarly, setting the layout after the solver may change the solver. + +

    +More precisely, UMFPACK and SuperLU require the coarsest-level +matrix to be replicated, while SuperLU_Dist requires it to be distributed. +In these cases, setting the coarsest-level solver implies that +the layout is redefined according to the solver, ovverriding any +previous settings. MUMPS, point-Jacobi, +hybrid Gauss-Seidel and block-Jacobi can be applied to +replicated and distributed matrices, thus their choice +does not modify any previously specified layout. +It is worth noting that, when the matrix is replicated, +the point-Jacobi, hybrid Gauss-Seidel and block-Jacobi solvers +reduce to the corresponding local solver objects (see Remark 2). +For the point-Jacobi and Gauss-Seidel solvers, these objects +correspond to a single point-Jacobi sweep and a single +Gauss-Seidel sweep, respectively, which are very poor solvers. + +

    +On the other hand, the distributed layout can be used with any solver +but UMFPACK and SuperLU; therefore, if any of these two solvers has already +been selected, the coarsest-level solver is changed to block-Jacobi, +with the previously chosen solver applied to the local blocks. +Likewise, the replicated layout can be used with any solver but SuperLu_Dist; +therefore, if SuperLu_Dist has been previously set, the coarsest-level +solver is changed to the default sequential solver. + +

    + +

    +
    + + + +
    Table 2: +Parameters defining the multi-level cycle and the number of cycles to +be applied. +
    +
    + + + + + + + + + + + + + + + + + + + +
    whatDATA TYPEvalDEFAULTCOMMENTS
    'ML_CYCLE'character(len=*)'VCYCLE' +

    +'WCYCLE' +

    +'KCYCLE' +

    +'MULT' +

    +'ADD'

    'VCYCLE'Multi-level cycle: V-cycle, W-cycle, K-cycle, hybrid Multiplicative Schwarz, + and Additive Schwarz. +

    +Note that hybrid Multiplicative Schwarz is equivalent to V-cycle and + is included for compatibility with previous versions of MLD2P4.

    'OUTER_SWEEPS'integerAny integer +

    +number $\ge 1$

    1Number of multi-level cycles.
    +
    +
    +

    +
    +

    + +

    +
    + + + +
    Table 3: +Parameters defining the aggregation algorithm. +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    whatDATA TYPEvalDEFAULTCOMMENTS
    'MIN_COARSE_SIZE'integerAny number +

    +$> 0$

    +$\lfloor 40 \sqrt[3]{n} \rfloor$, where $n$ is the dimension + of the matrix at the finest levelCoarse size threshold. The aggregation stops + if the global number of variables of the + computed coarsest matrix + is lower than or equal to this threshold + (see Note).
    'MIN_CR_RATIO'realAny number +

    +$> 1$

    1.5Minimum coarsening ratio. The aggregation stops + if the ratio between the matrix dimensions + at two consecutive levels is lower than or equal to this + threshold (see Note).
    'MAX_LEVS'integerAny integer +

    +number $> 1$

    20Maximum number of levels. The aggregation stops + if the number of levels reaches this value (see Note).
    'PAR_AGGR'character(len=*)'DEC', 'SYMDEC''DEC'Parallel aggregation algorithm. +

    +Currently, only the + decoupled aggregation (DEC) is available; the + SYMDEC option applies decoupled + aggregation to the sparsity pattern + of $A+A^T$.

    'AGGR_TYPE'character(len=*)'VMB''VMB'Type of aggregation algorithm: currently, the scalar aggregation + algorithm by Vanek, Mandel and Brezina is implemented + [25].
    'AGGR_PROL'character(len=*)'SMOOTHED', 'UNSMOOTHED''SMOOTHED'Prolongator used by the aggregation algorithm: smoothed or unsmoothed + (i.e., tentative prolongator).
    Note. The aggregation algorithm stops when +at least one of the following criteria is met: +the coarse size threshold, the
    maximum coarsening ratio, or the maximum number +of levels is reached. Therefore, the actual number of levels may be
    smaller than the specified maximum number +of levels.
    +
    +
    +

    +
    +

    + +

    +
    + + + +
    Table 4: +Parameters defining the aggregation algorithm (continued). +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    whatDATA TYPEvalDEFAULTCOMMENTS
    'AGGR_ORD'character(len=*)'NATURAL' +

    +'DEGREE'

    'NATURAL'Initial ordering of indices for the aggregation + algorithm: either natural ordering or sorted by + descending degrees of the nodes in the + matrix graph.
    'AGGR_THRESH'real(kind_parameter)Any real +

    +number $\in [0, 1]$

    0.05The threshold $\theta$ in the aggregation algorithm, + see (3) in Section 4.2. + See also the note at the bottom of this table.
    'AGGR_FILTER'character(len=*)'FILTER' +

    +'NOFILTER'

    'NOFILTER'Matrix used in computing the smoothed + prolongator: filtered or unfiltered (see (5) in Section 4.2).
    Note. Different thresholds at different levels, such as +those used in [25, Section 5.1], can be easily set by +invoking the rou-
    tine set with +the parameter ilev.
    +
    +
    +

    +
    +

    + +

    +
    + + + +
    Table 5: +Parameters defining the coarse-space correction at the coarsest +level.
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    whatDATA TYPEvalDEFAULTCOMMENTS
    'COARSE_MAT'character(len=*)'DIST' +

    +'REPL'

    'REPL'Coarsest matrix layout: distributed among the processes or + replicated on each of them.
    'COARSE_SOLVE'character(len=*)'MUMPS' +

    +'UMF' +

    +'SLU' +

    +'SLUDIST' +

    +'JACOBI' +

    +'GS' +

    +'BJAC'

    See Note.Solver used at the coarsest level: sequential + LU from MUMPS, UMFPACK, or SuperLU + (plus triangular solve); + distributed LU from MUMPS or SuperLU_Dist + (plus triangular solve); + point-Jacobi, hybrid Gauss-Seidel or block-Jacobi. +

    +Note that UMF and SLU require the coarsest + matrix to be replicated, SLUDIST, JACOBI, + GS and BJAC require it to be + distributed, MUMPS can be used with either + a replicated or a distributed matrix. When any of the previous + solvers is specified, the matrix layout is set to a default + value + which allows the use + value UMFPACK and SuperLU_Dist + are available only in double precision.

    'COARSE_SUBSOLVE'character(len=*)'ILU' +

    +'ILUT' +

    +'MILU' +

    +'MUMPS' +

    +'SLU' +

    +'UMF'

    See Note.Solver for the diagonal blocks of the coarse matrix, + in case the block Jacobi solver + is chosen as coarsest-level solver: ILU($p$), ILU($p,t$), + MILU($p$), LU from MUMPS, SuperLU or UMFPACK + (plus triangular solve). + Note that UMFPACK and SuperLU_Dist + are available only in double precision.
    Note. Defaults for COARSE_SOLVE and +COARSE_SUBSOLVE are chosen in the following order:
    single precision version - MUMPS if installed, + then SLU if installed, + ILU otherwise;
    double precision version - UMF if installed, + then MUMPS if installed, then SLU if + installed, ILU otherwise.
    +
    +
    +

    +
    +

    + +

    +
    + + + +
    Table 6: +Parameters defining the coarse-space correction at the coarsest +level (continued).
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    whatDATA TYPEvalDEFAULTCOMMENTS
    'COARSE_SWEEPS'integerAny integer +

    +number $> 0$

    10Number of sweeps when JACOBI, GS or BJAC + is chosen as coarsest-level solver.
    'COARSE_FILLIN'integerAny integer +

    +number $\ge 0$

    0Fill-in level $p$ of the ILU factorizations.
    'COARSE_ILUTHRS'real(kind_parameter)Any real +

    +number $\ge 0$

    0Drop tolerance $t$ in the ILU($p,t$) factorization.
    +
    +
    +

    +
    +

    + +

    +
    + + + +
    Table 7: +Parameters defining the smoother or the details of the one-level preconditioner. +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +what DATA TYPE val DEFAULT +COMMENTS
    'SMOOTHER_TYPE' character(len=*) + 'JACOBI' +

    +'GS' +

    +'BGS' +

    +'BJAC' + +

    +'AS' +

    'FBGS' + Type of smoother used in the multi-level preconditioner: + point-Jacobi, hybrid (forward) Gauss-Seidel, + hybrid backward Gauss-Seidel, block-Jacobi, and + Additive Schwarz. +

    +It is ignored by one-level preconditioners.

    'SUB_SOLVE' character(len=*) + 'JACOBI' +

    +'GS' +

    +'BGS' +

    +'ILU' +

    +'ILUT' +

    +'MILU' +

    +'MUMPS' +

    +'SLU' +

    +'UMF' +

    GS and BGS for pre- and post-smoothers + of multi-level preconditioners, respectively +

    +ILU for block-Jacobi and Additive Schwarz + one-level preconditioners +

    The local solver to be used with the smoother or one-level + preconditioner (see Remark 2, page 24): point-Jacobi, + hybrid (forward) Gauss-Seidel, hybrid backward + Gauss-Seidel, ILU($p$), ILU($p,t$), MILU($p$), + LU from MUMPS, SuperLU or UMFPACK + (plus triangular solve). See Note for details on hybrid + Gauss-Seidel.
    'SMOOTHER_SWEEPS' integer + Any integer +

    +number $\ge 0$ +

    1 + Number of sweeps of the smoother or one-level preconditioner. + In the multi-level case, no pre-smother or + post-smoother is used if this parameter is set to 0 + together with pos='PRE' or pos='POST, + respectively.
    'SUB_OVR' integer + Any integer +

    +number $\ge 0$ +

    1 + Number of overlap layers, for Additive Schwarz only.
    +
    +

    +
    +

    + +

    +
    + + + +
    Table 8: +Parameters defining the smoother or the details of the one-level preconditioner +(continued).
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +what DATA TYPE val DEFAULT +COMMENTS
    'SUB_RESTR' character(len=*) + 'HALO' +

    +'NONE' +

    'HALO' + Type of restriction operator, for Additive Schwarz only: + HALO for taking into account the overlap, NONE + for neglecting it. +

    +Note that HALO must be chosen for + the classical Addditive Schwarz smoother and its RAS variant.

    'SUB_PROL' character(len=*) + 'SUM' +

    +'NONE' +

    'NONE' + Type of prolongation operator, for Additive Schwarz only: + SUM for adding the contributions from the overlap, NONE + for neglecting them. +

    +Note that SUM must be chosen for the classical Additive + Schwarz smoother, and NONE for its RAS variant.

    'SUB_FILLIN' integer + Any integer +

    +number $\ge 0$ +

    0 + Fill-in level $p$ of the incomplete LU factorizations.
    'SUB_ILUTHRS' real(kind_parameter) + Any real number $\ge 0$ + 0 + Drop tolerance $t$ in the ILU($p,t$) factorization.
    +
    +

    +
    +


    - next - + up - previous - contents
    - Next: Subroutine smoothers_build - Up: User Interface - Previous: Subroutine build -   Next: Subroutine build + Up: User Interface + Previous: Subroutine init +   Contents diff --git a/docs/html/node2.html b/docs/html/node2.html index e4e87b11..a3236629 100644 --- a/docs/html/node2.html +++ b/docs/html/node2.html @@ -26,21 +26,21 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous
    - Next: Next: General Overview - Up: Up: userhtml - Previous: Previous: Abstract

    @@ -53,68 +53,72 @@ Contents
    diff --git a/docs/html/node20.html b/docs/html/node20.html index 44b84b49..0f8f5af1 100644 --- a/docs/html/node20.html +++ b/docs/html/node20.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Subroutine smoothers_build - +Subroutine build + @@ -20,52 +20,50 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: Subroutine apply - Up: User Interface - Previous: Subroutine hierarchy_build -   Next: Subroutine hierarchy_build + Up: User Interface + Previous: Subroutine set +   Contents

    -

    +


    -Subroutine smoothers_build +Subroutine build

    -

    call p%smoothers_build(a,desc_a,p,info) +
    call p%build(a,desc_a,info)

    -This routine builds the smoothers and the coarsest-level solvers for the -multi-level preconditioner p, according to the requirements made by -the user through the routines init and set, and based on the aggregation -hierarchy produced by a previous call to hierarchy_build -(see Section 6.4). +This routine builds the one-level preconditioner p according to the requirements +made by the user through the routines init and set +(see Sections 6.4 and 6.5 for multi-level preconditioners).

    Arguments @@ -74,7 +72,7 @@ hierarchy produced by a previous call to hierarchy_build

    +a + HREF="node29.html#PSBLASGUIDE">13]. @@ -93,39 +91,53 @@ hierarchy produced by a previous call to hierarchy_build + HREF="node29.html#PSBLASGUIDE">13]. - +
    -a type(psb_xspmat_type), intent(in).
    @@ -83,7 +81,7 @@ hierarchy produced by a previous call to hierarchy_build matrix to be preconditioned. Note that x must be chosen according to the real/complex, single/double precision version of MLD2P4 under use. See the PSBLAS User's Guide for details [13].
    desc_a The communication descriptor of a. See the PSBLAS User's Guide for details [13].
    info integer, intent(out).
    Error code. If no error, 0 is returned. See Section 8 for details. Error code. If no error, 0 is returned. See Section 8 for details.

    +For compatibility with the previous versions of MLD2P4, this routine can be also invoked +as follows: + +

    + +

    call mld_precbld(p,what,val,info) +
    +

    + +In this case, the routine can be used to build multi-level preconditioners too. + +

    + +


    - next - + up - previous - contents
    - Next: Subroutine apply - Up: User Interface - Previous: Subroutine hierarchy_build -   Next: Subroutine hierarchy_build + Up: User Interface + Previous: Subroutine set +   Contents diff --git a/docs/html/node21.html b/docs/html/node21.html index 7ba18a33..f1e5c65a 100644 --- a/docs/html/node21.html +++ b/docs/html/node21.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Subroutine apply - +Subroutine hierarchy_build + @@ -20,66 +20,50 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: Subroutine free - Up: User Interface - Previous: Subroutine smoothers_build -   Next: Subroutine smoothers_build + Up: User Interface + Previous: Subroutine build +   Contents

    -

    +


    -Subroutine apply +Subroutine hierarchy_build

    -

    call p%apply(x,y,desc_a,info [,trans,work]) +
    call p%hierarchy_build(a,desc_a,info)

    -This routine computes -$y = op(B^{-1})  x$, where $B$ is a previously built -preconditioner, stored into p, and $op$ -denotes the preconditioner itself or its transpose, according to -the value of trans. -Note that, when MLD2P4 is used with a Krylov solver from PSBLAS, -p%apply is called within the PSBLAS routine psb_krylov -and hence it is completely transparent to the user. +This routine builds the hierarchy of matrices and restriction/prolongation +operators for the multi-level preconditioner p, according to the requirements +made by the user through the routines init and set.

    Arguments @@ -87,30 +71,18 @@ and hence it is completely transparent to the user.

    - - + + - - - - - - - + @@ -118,97 +90,43 @@ and hence it is completely transparent to the user. - + - + - - - - - - - - - - - - - +
    x type(kind_parameter), dimension(:), intent(in).
    +a type(psb_xspmat_type), intent(in).
    The local part of the vector $x$. Note that type and - kind_parameter must be chosen according - to the real/complex, single/double precision version of MLD2P4 under use.
    -y type(kind_parameter), dimension(:), intent(out).
    - The local part of the vector $y$. Note that type and - kind_parameter must be chosen according - to the real/complex, single/double precision version of MLD2P4 under use. The sparse matrix structure containing the local part of the + matrix to be preconditioned. Note that x must be chosen according + to the real/complex, +single/double precision version of MLD2P4 under use. + See the PSBLAS User's Guide for details [13].
    desc_a
    The communication descriptor associated to the matrix to be - preconditioned. The communication descriptor of a. See the PSBLAS User's Guide for + details [13].
    -info
    info integer, intent(out).
    Error code. If no error, 0 is returned. See Section 8 for details.
    -trans character(len=1), optional, intent(in).
    - If trans = 'N','n' then -$op(B^{-1}) = B^{-1}$; - if trans = 'T','t' then -$op(B^{-1}) = B^{-T}$ - (transpose of $B^{-1})$; if trans = 'C','c' then -$op(B^{-1}) = B^{-C}$ - (conjugate transpose of $B^{-1})$.
    -work type(kind_parameter), dimension(:), optional, target.
    - Workspace. Its size should be at - least 4 * psb_cd_get_local_ cols(desc_a) (see the PSBLAS User's Guide). - Note that type and kind_parameter must be chosen according - to the real/complex, single/double precision version of MLD2P4 under use. Error code. If no error, 0 is returned. See Section 8 for details.

    -For compatibility with the previous versions of MLD2P4, this routine can be also invoked -as follows: - -

    - -

    call mld_precaply(p,what,val,info) -
    -


    - next - + up - previous - contents
    - Next: Subroutine free - Up: User Interface - Previous: Subroutine smoothers_build -   Next: Subroutine smoothers_build + Up: User Interface + Previous: Subroutine build +   Contents diff --git a/docs/html/node22.html b/docs/html/node22.html index 0335eb66..4647922a 100644 --- a/docs/html/node22.html +++ b/docs/html/node22.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Subroutine free - +Subroutine smoothers_build + @@ -20,48 +20,52 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: Subroutine descr - Up: User Interface - Previous: Subroutine apply -   Next: Subroutine apply + Up: User Interface + Previous: Subroutine hierarchy_build +   Contents

    -

    +


    -Subroutine free +Subroutine smoothers_build

    -

    call p%free(p,info) +
    call p%smoothers_build(a,desc_a,p,info)

    -This routine deallocates the preconditioner data structure p. +This routine builds the smoothers and the coarsest-level solvers for the +multi-level preconditioner p, according to the requirements made by +the user through the routines init and set, and based on the aggregation +hierarchy produced by a previous call to hierarchy_build +(see Section 6.4).

    Arguments @@ -69,27 +73,61 @@ This routine deallocates the preconditioner data structure p.

    - - + + - + + + + + + + + + + + + +
    info integer, intent(out).
    +a type(psb_xspmat_type), intent(in).
    Error code. If no error, 0 is returned. See Section 8 for details. The sparse matrix structure containing the local part of the + matrix to be preconditioned. Note that x must be chosen according + to the real/complex, single/double precision version of MLD2P4 under use. + See the PSBLAS User's Guide for details [13].
    +desc_a type(psb_desc_type), intent(in).
    + The communication descriptor of a. See the PSBLAS User's Guide for + details [13].
    info integer, intent(out).
    + Error code. If no error, 0 is returned. See Section 8 for details.

    -For compatibility with the previous versions of MLD2P4, this routine can be also invoked -as follows: - -

    - -

    call mld_precfree(p,info) -
    -

    - -

    - -


    +
    + + +next + +up + +previous + +contents +
    + Next: Subroutine apply + Up: User Interface + Previous: Subroutine hierarchy_build +   Contents + diff --git a/docs/html/node23.html b/docs/html/node23.html index 1c982ca1..fb1abe9a 100644 --- a/docs/html/node23.html +++ b/docs/html/node23.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Subroutine descr - +Subroutine apply + @@ -18,51 +18,68 @@ original version by: Nikos Drakos, CBLU, University of Leeds + - + - next - + up - previous - contents
    - Next: Adding new smoother and - Up: User Interface - Previous: Subroutine free -   Next: Subroutine free + Up: User Interface + Previous: Subroutine smoothers_build +   Contents

    -

    +


    -Subroutine descr +Subroutine apply

    -

    call p%descr(info, [iout]) +
    call p%apply(x,y,desc_a,info [,trans,work])

    -This routine prints a description of the preconditioner p to the standard output or -to a file. It must be called after hierachy_build and smoothers_build, -or build, have been called. +This routine computes +$y = op(B^{-1})  x$, where $B$ is a previously built +preconditioner, stored into p, and $op$ +denotes the preconditioner itself or its transpose, according to +the value of trans. +Note that, when MLD2P4 is used with a Krylov solver from PSBLAS, +p%apply is called within the PSBLAS routine psb_krylov +and hence it is completely transparent to the user.

    Arguments @@ -70,21 +87,93 @@ or build, have been called.

    - + + + + + + + + + + + + + + + + + + + - + - +trans + - + + + + + + +
    info
    x type(kind_parameter), dimension(:), intent(in).
    + The local part of the vector $x$. Note that type and + kind_parameter must be chosen according + to the real/complex, single/double precision version of MLD2P4 under use.
    +y type(kind_parameter), dimension(:), intent(out).
    + The local part of the vector $y$. Note that type and + kind_parameter must be chosen according + to the real/complex, single/double precision version of MLD2P4 under use.
    +desc_a type(psb_desc_type), intent(in).
    + The communication descriptor associated to the matrix to be + preconditioned.
    +info integer, intent(out).
    Error code. If no error, 0 is returned. See Section 8 for details. Error code. If no error, 0 is returned. See Section 8 for details.
    -iout integer, intent(in), optional. character(len=1), optional, intent(in).
    The id of the file where the preconditioner description - will be printed; the default is the standard output. If trans = 'N','n' then +$op(B^{-1}) = B^{-1}$; + if trans = 'T','t' then +$op(B^{-1}) = B^{-T}$ + (transpose of $B^{-1})$; if trans = 'C','c' then +$op(B^{-1}) = B^{-C}$ + (conjugate transpose of $B^{-1})$.
    +work type(kind_parameter), dimension(:), optional, target.
    + Workspace. Its size should be at + least 4 * psb_cd_get_local_ cols(desc_a) (see the PSBLAS User's Guide). + Note that type and kind_parameter must be chosen according + to the real/complex, single/double precision version of MLD2P4 under use.

    @@ -93,35 +182,33 @@ as follows:

    -

    call mld_precdescr(p,info [,iout]) +
    call mld_precaply(p,what,val,info)

    - -


    - next - + up - previous - contents
    - Next: Adding new smoother and - Up: User Interface - Previous: Subroutine free -   Next: Subroutine free + Up: User Interface + Previous: Subroutine smoothers_build +   Contents diff --git a/docs/html/node24.html b/docs/html/node24.html index cc56ac92..53a2959e 100644 --- a/docs/html/node24.html +++ b/docs/html/node24.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Adding new smoother and solver objects to MLD2P4 - +Subroutine free + @@ -19,167 +19,77 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + + - next - + up - previous - contents
    - Next: Error Handling - Up: userhtml - Previous: Subroutine descr -   Next: Subroutine descr + Up: User Interface + Previous: Subroutine apply +   Contents

    -

    +


    -Adding new smoother and solver objects to MLD2P4 -

    +Subroutine free +

    -Developers can add completely new smoother and/or solver classes -derived from the base objects in the library (see Remark 2 in Section 6.2), -without recompiling the library itself. - -

    -To do so, it is necessary first to select the base type to be extended. -In our experience, it is quite likely that the new application needs -only the definition of a ``solver'' object, which is almost -always acting only on the local part of the distributed matrix. -The parallel actions required to connect the various solver objects -are most often already provided by the block-Jacobi or the additive -Schwarz smoothers. To define a new solver, the developer will then -have to define its components and methods, perhaps taking one of the -predefined solvers as a starting point, if possible. - -

    -Once the new smoother/solver class has been developed, to use it in -the context of the multilevel preconditioners it is necessary to: - -

      -
    • declare in the application program a variable of the new type; -
    • -
    • pass that variable as the argument to the set routine as in the -following: -
      -call p%set(smoother,info [,ilev,ilmax,pos]) -
      call p%set(solver,info [,ilev,ilmax,pos]) - -
      -
    • -
    • link the code implementing the various methods into the application executable. -
    • -
    -The new solver object is then dynamically included in the -preconditioner structure, and acts as a mold to which the -preconditioner will conform, even though the MLD2P4 library has not -been modified to account for this new development. - + +
    call p%free(p,info) +

    -It is possible to define new values for the keyword WHAT in the -set routine; if the library code does not recognize a keyword, -it passes it down the composition hierarchy (levels containing -smoothers containing in turn solvers), so that it can be eventually caught by -the new solver. + +This routine deallocates the preconditioner data structure p.

    -An example is provided in the source code distribution under the -folder tests/newslv. In this example we are implementing a new -incomplete factorization variant (which is simply the ILU(0) -factorization under a new name). Because of the specifics of this case, it is -possible to reuse the basic structure of the ILU solver, with its -L/D/U components and the methods needed to apply the solver; only a -few methods, such as the description and most importantly the build, -need to be ovverridden (rewritten). - +Arguments +

    +

    -The interfaces for the calls shown above are defined using - -

    - - - - - - - - +
    -smoother class(mld_x_base_smoother_type)
    - The user-defined new smoother to be employed in the - preconditioner.
    -solver class(mld_x_base_solver_type)
    + + - - + -
    info integer, intent(out).
    +
    The user-defined new solver to be employed in the - preconditioner. - Error code. If no error, 0 is returned. See Section 8 for details.
    -The other arguments are defined in the way described in -Sec. 6.2. As an example, in the tests/newslv -code we define a new object of type mld_d_tlu_solver_type, and -we pass it as follows: -
    -  ! sparse matrix and preconditioner
    -  type(psb_dspmat_type) :: a
    -  type(mld_dprec_type)  :: prec
    -  type(mld_d_tlu_solver_type) :: tlusv
    -
    -......
    -  !
    -  !  prepare the preconditioner: an ML with defaults, but with TLU solver at
    -  !  intermediate levels. All other parameters are at default values. 
    -  !  
    -  call prec%init('ML',       info)
    -  call prec%hierarchy_build(a,desc_a,info)
    -  nlv = prec%get_nlevs()
    -  call prec%set(tlusv,   info,ilev=1,ilmax=max(1,nlv-1))
    -  call prec%smoothers_build(a,desc_a,info)
    -
    -
    - - -next - -up - -previous - -contents -
    - Next: Error Handling - Up: userhtml - Previous: Subroutine descr -   Contents - + +

    +For compatibility with the previous versions of MLD2P4, this routine can be also invoked +as follows: + +

    + +

    call mld_precfree(p,info) +
    +

    + +

    + +


    diff --git a/docs/html/node25.html b/docs/html/node25.html index c88593b1..e2357c3c 100644 --- a/docs/html/node25.html +++ b/docs/html/node25.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Error Handling - +Subroutine descr + @@ -18,61 +18,112 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + - next - + up - previous - contents
    - Next: License - Up: userhtml - Previous: Adding new smoother and -   Next: Adding new smoother and + Up: User Interface + Previous: Subroutine free +   Contents

    -

    +


    -Error Handling -

    +Subroutine descr +

    -The error handling in MLD2P4 is based on the PSBLAS (version 2) error -handling. Error conditions are signaled via an integer argument -info; whenever an error condition is detected, an error trace -stack is built by the library up to the top-level, user-callable -routine. This routine will then decide, according to the user -preferences, whether the error should be handled by terminating the -program or by returning the error condition to the user code, which -will then take action, and whether -an error message should be printed. These options may be set by using -the PSBLAS error handling routines; for further details see the PSBLAS -User's Guide [13]. - + +

    call p%descr(info, [iout]) +

    +This routine prints a description of the preconditioner p to the standard output or +to a file. It must be called after hierachy_build and smoothers_build, +or build, have been called. + +

    +Arguments +

    + +

    + + + + + + + + + + + + + +
    info integer, intent(out).
    + Error code. If no error, 0 is returned. See Section 8 for details.
    +iout integer, intent(in), optional.
    + The id of the file where the preconditioner description + will be printed; the default is the standard output.
    +

    +For compatibility with the previous versions of MLD2P4, this routine can be also invoked +as follows: -


    +

    + +

    call mld_precdescr(p,info [,iout]) +
    +

    + +

    + +

    +


    + + +next + +up + +previous + +contents +
    + Next: Adding new smoother and + Up: User Interface + Previous: Subroutine free +   Contents + diff --git a/docs/html/node26.html b/docs/html/node26.html index fa875782..c0265b99 100644 --- a/docs/html/node26.html +++ b/docs/html/node26.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -License - +Adding new smoother and solver objects to MLD2P4 + @@ -19,86 +19,167 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - up - previous - contents
    - Next: Bibliography - Up: Next: Error Handling + Up: userhtml - Previous: Error Handling -   Previous: Subroutine descr +   Contents

    -

    +


    -License +Adding new smoother and solver objects to MLD2P4

    -The MLD2P4 is freely distributable under the following copyright -terms:

     
    -
    - 
    -                           MLD2P4  version 2.1
    -  MultiLevel Domain Decomposition Parallel Preconditioners Package
    -             based on PSBLAS (Parallel Sparse BLAS version 3.4)
    -  
    -  (C) Copyright 2008, 2010, 2012, 2017
    +Developers can add completely new smoother and/or solver classes
    +derived from the base objects in the library (see Remark 2 in Section 6.2),
    +without recompiling the library itself. 
    +
    +

    +To do so, it is necessary first to select the base type to be extended. +In our experience, it is quite likely that the new application needs +only the definition of a ``solver'' object, which is almost +always acting only on the local part of the distributed matrix. +The parallel actions required to connect the various solver objects +are most often already provided by the block-Jacobi or the additive +Schwarz smoothers. To define a new solver, the developer will then +have to define its components and methods, perhaps taking one of the +predefined solvers as a starting point, if possible. + +

    +Once the new smoother/solver class has been developed, to use it in +the context of the multilevel preconditioners it is necessary to: + +

      +
    • declare in the application program a variable of the new type; +
    • +
    • pass that variable as the argument to the set routine as in the +following: +
      +call p%set(smoother,info [,ilev,ilmax,pos]) +
      call p%set(solver,info [,ilev,ilmax,pos]) - Salvatore Filippone Cranfield University, Cranfield, UK - Ambra Abdullahi Hassan University of Rome Tor Vergata, Rome, IT - Alfredo Buttari CNRS-IRIT, Toulouse, FR - Pasqua D'Ambra IAC-CNR, Naples, IT - Daniela di Serafino University of Campania L. Vanvitelli, Caserta, IT +
      +
    • +
    • link the code implementing the various methods into the application executable. +
    • +
    +The new solver object is then dynamically included in the +preconditioner structure, and acts as a mold to which the +preconditioner will conform, even though the MLD2P4 library has not +been modified to account for this new development. + +

    +It is possible to define new values for the keyword WHAT in the +set routine; if the library code does not recognize a keyword, +it passes it down the composition hierarchy (levels containing +smoothers containing in turn solvers), so that it can be eventually caught by +the new solver. + +

    +An example is provided in the source code distribution under the +folder tests/newslv. In this example we are implementing a new +incomplete factorization variant (which is simply the ILU(0) +factorization under a new name). Because of the specifics of this case, it is +possible to reuse the basic structure of the ILU solver, with its +L/D/U components and the methods needed to apply the solver; only a +few methods, such as the description and most importantly the build, +need to be ovverridden (rewritten). + +

    +The interfaces for the calls shown above are defined using + +

    + + + + + + + + + + + + +
    +smoother class(mld_x_base_smoother_type)
    + The user-defined new smoother to be employed in the + preconditioner.
    +solver class(mld_x_base_solver_type)
    + The user-defined new solver to be employed in the + preconditioner. +
    +The other arguments are defined in the way described in +Sec. 6.2. As an example, in the tests/newslv +code we define a new object of type mld_d_tlu_solver_type, and +we pass it as follows: +
    +  ! sparse matrix and preconditioner
    +  type(psb_dspmat_type) :: a
    +  type(mld_dprec_type)  :: prec
    +  type(mld_d_tlu_solver_type) :: tlusv
     
    -  Redistribution and use in source and binary forms, with or without
    -  modification, are permitted provided that the following conditions
    -  are met:
    -    1. Redistributions of source code must retain the above copyright
    -       notice, this list of conditions and the following disclaimer.
    -    2. Redistributions in binary form must reproduce the above copyright
    -       notice, this list of conditions, and the following disclaimer in the
    -       documentation and/or other materials provided with the distribution.
    -    3. The name of the MLD2P4 group or the names of its contributors may
    -       not be used to endorse or promote products derived from this
    -       software without specific written permission.
    - 
    -  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    -  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    -  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    -  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS
    -  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    -  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    -  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    -  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    -  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    -  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    -  POSSIBILITY OF SUCH DAMAGE.
    +......
    +  !
    +  !  prepare the preconditioner: an ML with defaults, but with TLU solver at
    +  !  intermediate levels. All other parameters are at default values. 
    +  !  
    +  call prec%init('ML',       info)
    +  call prec%hierarchy_build(a,desc_a,info)
    +  nlv = prec%get_nlevs()
    +  call prec%set(tlusv,   info,ilev=1,ilmax=max(1,nlv-1))
    +  call prec%smoothers_build(a,desc_a,info)
     
    - - -

    +
    + + +next + +up + +previous + +contents +
    + Next: Error Handling + Up: userhtml + Previous: Subroutine descr +   Contents + diff --git a/docs/html/node27.html b/docs/html/node27.html index c6176e3f..1be7a8f9 100644 --- a/docs/html/node27.html +++ b/docs/html/node27.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Bibliography - +Error Handling + @@ -26,154 +26,53 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: About this document ... - Up: Next: License + Up: userhtml - Previous: License -   Previous: Adding new smoother and +   Contents -

    +
    +
    - -

    -Bibliography -

    - -

    -

    1 -
    -P. R. Amestoy, C. Ashcraft, O. Boiteau, A. Buttari, J. L'Excellent, C. Weisbecker, -Improving multifrontal methods by means of block low-rank representations, -SIAM Journal on Scientific Computing, volume 37 (3), 2015, A1452-A1474. -See also http://mumps.enseeiht.fr.

    2 -
    -M. Brezina, P. Vanek, -A Black-Box Iterative Solver Based on a Two-Level Schwarz Method, -Computing, 63, 1999, 233-263.

    3 -
    -W. L. Briggs, V. E. Henson, S. F. McCormick, -A Multigrid Tutorial, Second Edition, -SIAM, 2000.

    4 -
    -A. Buttari, P. D'Ambra, D. di Serafino, S. Filippone, -Extending PSBLAS to Build Parallel Schwarz Preconditioners, -in J. Dongarra, K. Madsen, J. Wasniewski, editors, -Proceedings of PARA 04 Workshop on State of the Art -in Scientific Computing, Lecture Notes in Computer Science, -Springer, 2005, 593-602.

    5 -
    -A. Buttari, P. D'Ambra, D. di Serafino, S. Filippone, -2LEV-D2P4: a package of high-performance preconditioners -for scientific and engineering applications, -Applicable Algebra in Engineering, Communications and Computing, -18 (3) 2007, 223-239.

    6 -
    -X. C. Cai, M. Sarkis, -A Restricted Additive Schwarz Preconditioner for General Sparse Linear Systems, -SIAM Journal on Scientific Computing, 21 (2), 1999, 792-797.

    7 -
    -P. D'Ambra, S. Filippone, D. di Serafino, -On the Development of PSBLAS-based Parallel Two-level Schwarz Preconditioners, -Applied Numerical Mathematics, Elsevier Science, -57 (11-12), 2007, 1181-1196.

    8 -
    -P. D'Ambra, D. di Serafino, S. Filippone, -MLD2P4: a Package of Parallel Multilevel -Algebraic Domain Decomposition Preconditioners -in Fortran 95, ACM Trans. Math. Softw., 37(3), 2010, art. 30.

    9 -
    -T. A. Davis, -Algorithm 832: UMFPACK - an Unsymmetric-pattern Multifrontal -Method with a Column Pre-ordering Strategy, -ACM Transactions on Mathematical Software, 30, 2004, 196-199. -(See also http://www.cise.ufl.edu/ davis/)

    10 -
    -J. W. Demmel, S. C. Eisenstat, J. R. Gilbert, X. S. Li, J. W. H. Liu, -A supernodal approach to sparse partial pivoting, -SIAM Journal on Matrix Analysis and Applications, 20 (3), 1999, 720-755.

    11 -
    -J. J. Dongarra, J. Du Croz, I. S. Duff, S. Hammarling, -A set of Level 3 Basic Linear Algebra Subprograms, -ACM Transactions on Mathematical Software, 16 (1) 1990, 1-17.

    12 -
    -J. J. Dongarra, J. Du Croz, S. Hammarling, R. J. Hanson, -An extended set of FORTRAN Basic Linear Algebra Subprograms, -ACM Transactions on Mathematical Software, 14 (1) 1988, 1-17.

    13 -
    -S. Filippone, A. Buttari, -PSBLAS-3.0 User's Guide. A Reference Guide for the Parallel Sparse BLAS Library, 2012, -available from http://www.ce.uniroma2.it/psblas/.

    14 -
    -S. Filippone, A. Buttari, -Object-Oriented Techniques for Sparse Matrix Computations in Fortran 2003. -ACM Transactions on on Mathematical Software, 38 (4), 2012, art. 23.

    15 -
    -S. Filippone, M. Colajanni, -PSBLAS: A Library for Parallel Linear Algebra -Computation on Sparse Matrices, -ACM Transactions on Mathematical Software, 26 (4), 2000, 527-550.

    16 -
    -W. Gropp, S. Huss-Lederman, A. Lumsdaine, E. Lusk, B. Nitzberg, W. Saphir, M. Snir, -MPI: The Complete Reference. Volume 2 - The MPI-2 Extensions, -MIT Press, 1998.

    17 -
    -C. L. Lawson, R. J. Hanson, D. Kincaid, F. T. Krogh, -Basic Linear Algebra Subprograms for FORTRAN usage, -ACM Transactions on Mathematical Software, 5 (3), 1979, 308-323.

    18 -
    -X. S. Li, J. W. Demmel, -SuperLU_DIST: A Scalable Distributed-memory -Sparse Direct Solver for Unsymmetric Linear Systems, -ACM Transactions on Mathematical Software, 29 (2), 2003, 110-140.

    19 -
    -Y. Notay, P. S. Vassilevski, -Recursive Krylov-based multigrid cycles, -Numerical Linear Algebra with Applications, 15 (5), 2008, 473-487.

    20 -
    -Y. Saad, -Iterative methods for sparse linear systems, 2nd edition, SIAM, 2003.

    21 -
    -B. Smith, P. Bjorstad, W. Gropp, -Domain Decomposition: Parallel Multilevel Methods for Elliptic -Partial Differential Equations, -Cambridge University Press, 1996.

    22 -
    -M. Snir, S. Otto, S. Huss-Lederman, D. Walker, J. Dongarra, -MPI: The Complete Reference. Volume 1 - The MPI Core, second edition, -MIT Press, 1998.

    23 -
    -K. Stüben, -An Introduction to Algebraic Multigrid, -in A. Schüller, U. Trottenberg, C. Oosterlee, Multigrid, -Academic Press, 2001.

    24 -
    -R. S. Tuminaro, C. Tong, -Parallel Smoothed Aggregation Multigrid: Aggregation Strategies on Massively Parallel Machines, in J. Donnelley, editor, Proceedings of SuperComputing 2000, Dallas, 2000.

    25 -
    -P. Vanek, J. Mandel, M. Brezina, -Algebraic Multigrid by Smoothed Aggregation for Second and Fourth Order Elliptic Problems, -Computing, 56 (3) 1996, 179-196. +

    +
    +Error Handling +

    -

    +The error handling in MLD2P4 is based on the PSBLAS (version 2) error +handling. Error conditions are signaled via an integer argument +info; whenever an error condition is detected, an error trace +stack is built by the library up to the top-level, user-callable +routine. This routine will then decide, according to the user +preferences, whether the error should be handled by terminating the +program or by returning the error condition to the user code, which +will then take action, and whether +an error message should be printed. These options may be set by using +the PSBLAS error handling routines; for further details see the PSBLAS +User's Guide [13].

    -


    + + +

    diff --git a/docs/html/node28.html b/docs/html/node28.html index 71f542e2..58e4f069 100644 --- a/docs/html/node28.html +++ b/docs/html/node28.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -About this document ... - +License + @@ -18,52 +18,86 @@ original version by: Nikos Drakos, CBLU, University of Leeds + + -next - +next + up - previous - contents
    - Up: Next: Bibliography + Up: userhtml - Previous: Bibliography -   Previous: Error Handling +   Contents

    -

    -About this document ... -

    -

    -This document was generated using the -LaTeX2HTML translator Version 2012 (1.2) -

    -Copyright © 1993, 1994, 1995, 1996, -Nikos Drakos, -Computer Based Learning Unit, University of Leeds. +


    -Copyright © 1997, 1998, 1999, -Ross Moore, -Mathematics Department, Macquarie University, Sydney. -

    -The command line arguments were:
    - latex2html -local_icons -noaddress -dir ../../html userhtml.tex +License +

    -The translation was initiated by Salvatore Filippone on 2017-07-24 +The MLD2P4 is freely distributable under the following copyright +terms:

     
    +
    + 
    +                           MLD2P4  version 2.1
    +  MultiLevel Domain Decomposition Parallel Preconditioners Package
    +             based on PSBLAS (Parallel Sparse BLAS version 3.4)
    +  
    +  (C) Copyright 2008, 2010, 2012, 2017
    +
    +  Salvatore Filippone    Cranfield University, Cranfield, UK
    +  Ambra Abdullahi Hassan University of Rome Tor Vergata, Rome, IT
    +  Alfredo Buttari        CNRS-IRIT, Toulouse, FR
    +  Pasqua D'Ambra         IAC-CNR, Naples, IT
    +  Daniela di Serafino    University of Campania L. Vanvitelli, Caserta, IT
    +
    +  Redistribution and use in source and binary forms, with or without
    +  modification, are permitted provided that the following conditions
    +  are met:
    +    1. Redistributions of source code must retain the above copyright
    +       notice, this list of conditions and the following disclaimer.
    +    2. Redistributions in binary form must reproduce the above copyright
    +       notice, this list of conditions, and the following disclaimer in the
    +       documentation and/or other materials provided with the distribution.
    +    3. The name of the MLD2P4 group or the names of its contributors may
    +       not be used to endorse or promote products derived from this
    +       software without specific written permission.
    + 
    +  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS
    +  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +  POSSIBILITY OF SUCH DAMAGE.
    +
    + +

    diff --git a/docs/html/node29.html b/docs/html/node29.html index f80ff24c..ab187489 100644 --- a/docs/html/node29.html +++ b/docs/html/node29.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -About this document ... - +Bibliography + @@ -18,53 +18,162 @@ original version by: Nikos Drakos, CBLU, University of Leeds + + -next - +next + up - previous - contents
    - Up: Next: About this document ... + Up: userhtml - Previous: Bibliography -   Previous: License +   Contents -
    -
    +

    +
    +

    +Bibliography +

    -

    -About this document ... -

    -

    -This document was generated using the -LaTeX2HTML translator Version 2012 (1.2)

    -Copyright © 1993, 1994, 1995, 1996, -Nikos Drakos, -Computer Based Learning Unit, University of Leeds. -
    -Copyright © 1997, 1998, 1999, -Ross Moore, -Mathematics Department, Macquarie University, Sydney. +

    1 +
    +P. R. Amestoy, C. Ashcraft, O. Boiteau, A. Buttari, J. L'Excellent, C. Weisbecker, +Improving multifrontal methods by means of block low-rank representations, +SIAM Journal on Scientific Computing, volume 37 (3), 2015, A1452-A1474. +See also http://mumps.enseeiht.fr.

    2 +
    +M. Brezina, P. Vanek, +A Black-Box Iterative Solver Based on a Two-Level Schwarz Method, +Computing, 63, 1999, 233-263.

    3 +
    +W. L. Briggs, V. E. Henson, S. F. McCormick, +A Multigrid Tutorial, Second Edition, +SIAM, 2000.

    4 +
    +A. Buttari, P. D'Ambra, D. di Serafino, S. Filippone, +Extending PSBLAS to Build Parallel Schwarz Preconditioners, +in J. Dongarra, K. Madsen, J. Wasniewski, editors, +Proceedings of PARA 04 Workshop on State of the Art +in Scientific Computing, Lecture Notes in Computer Science, +Springer, 2005, 593-602.

    5 +
    +A. Buttari, P. D'Ambra, D. di Serafino, S. Filippone, +2LEV-D2P4: a package of high-performance preconditioners +for scientific and engineering applications, +Applicable Algebra in Engineering, Communications and Computing, +18 (3) 2007, 223-239.

    6 +
    +X. C. Cai, M. Sarkis, +A Restricted Additive Schwarz Preconditioner for General Sparse Linear Systems, +SIAM Journal on Scientific Computing, 21 (2), 1999, 792-797.

    7 +
    +P. D'Ambra, S. Filippone, D. di Serafino, +On the Development of PSBLAS-based Parallel Two-level Schwarz Preconditioners, +Applied Numerical Mathematics, Elsevier Science, +57 (11-12), 2007, 1181-1196.

    8 +
    +P. D'Ambra, D. di Serafino, S. Filippone, +MLD2P4: a Package of Parallel Multilevel +Algebraic Domain Decomposition Preconditioners +in Fortran 95, ACM Trans. Math. Softw., 37(3), 2010, art. 30.

    9 +
    +T. A. Davis, +Algorithm 832: UMFPACK - an Unsymmetric-pattern Multifrontal +Method with a Column Pre-ordering Strategy, +ACM Transactions on Mathematical Software, 30, 2004, 196-199. +(See also http://www.cise.ufl.edu/ davis/)

    10 +
    +J. W. Demmel, S. C. Eisenstat, J. R. Gilbert, X. S. Li, J. W. H. Liu, +A supernodal approach to sparse partial pivoting, +SIAM Journal on Matrix Analysis and Applications, 20 (3), 1999, 720-755.

    11 +
    +J. J. Dongarra, J. Du Croz, I. S. Duff, S. Hammarling, +A set of Level 3 Basic Linear Algebra Subprograms, +ACM Transactions on Mathematical Software, 16 (1) 1990, 1-17.

    12 +
    +J. J. Dongarra, J. Du Croz, S. Hammarling, R. J. Hanson, +An extended set of FORTRAN Basic Linear Algebra Subprograms, +ACM Transactions on Mathematical Software, 14 (1) 1988, 1-17.

    13 +
    +S. Filippone, A. Buttari, +PSBLAS-3.0 User's Guide. A Reference Guide for the Parallel Sparse BLAS Library, 2012, +available from http://www.ce.uniroma2.it/psblas/.

    14 +
    +S. Filippone, A. Buttari, +Object-Oriented Techniques for Sparse Matrix Computations in Fortran 2003. +ACM Transactions on on Mathematical Software, 38 (4), 2012, art. 23.

    15 +
    +S. Filippone, M. Colajanni, +PSBLAS: A Library for Parallel Linear Algebra +Computation on Sparse Matrices, +ACM Transactions on Mathematical Software, 26 (4), 2000, 527-550.

    16 +
    +W. Gropp, S. Huss-Lederman, A. Lumsdaine, E. Lusk, B. Nitzberg, W. Saphir, M. Snir, +MPI: The Complete Reference. Volume 2 - The MPI-2 Extensions, +MIT Press, 1998.

    17 +
    +C. L. Lawson, R. J. Hanson, D. Kincaid, F. T. Krogh, +Basic Linear Algebra Subprograms for FORTRAN usage, +ACM Transactions on Mathematical Software, 5 (3), 1979, 308-323.

    18 +
    +X. S. Li, J. W. Demmel, +SuperLU_DIST: A Scalable Distributed-memory +Sparse Direct Solver for Unsymmetric Linear Systems, +ACM Transactions on Mathematical Software, 29 (2), 2003, 110-140.

    19 +
    +Y. Notay, P. S. Vassilevski, +Recursive Krylov-based multigrid cycles, +Numerical Linear Algebra with Applications, 15 (5), 2008, 473-487.

    20 +
    +Y. Saad, +Iterative methods for sparse linear systems, 2nd edition, SIAM, 2003.

    21 +
    +B. Smith, P. Bjorstad, W. Gropp, +Domain Decomposition: Parallel Multilevel Methods for Elliptic +Partial Differential Equations, +Cambridge University Press, 1996.

    22 +
    +M. Snir, S. Otto, S. Huss-Lederman, D. Walker, J. Dongarra, +MPI: The Complete Reference. Volume 1 - The MPI Core, second edition, +MIT Press, 1998.

    23 +
    +K. Stüben, +An Introduction to Algebraic Multigrid, +in A. Schüller, U. Trottenberg, C. Oosterlee, Multigrid, +Academic Press, 2001.

    24 +
    +R. S. Tuminaro, C. Tong, +Parallel Smoothed Aggregation Multigrid: Aggregation Strategies on Massively Parallel Machines, in J. Donnelley, editor, Proceedings of SuperComputing 2000, Dallas, 2000.

    25 +
    +P. Vanek, J. Mandel, M. Brezina, +Algebraic Multigrid by Smoothed Aggregation for Second and Fourth Order Elliptic Problems, +Computing, 56 (3) 1996, 179-196. +

    -The command line arguments were:
    - latex2html -local_icons -noaddress -dir ../../html userhtml.tex +

    +

    -The translation was initiated by Salvatore Filippone on 2017-04-18 -


    +

    diff --git a/docs/html/node3.html b/docs/html/node3.html index 5e5e3daf..07fff983 100644 --- a/docs/html/node3.html +++ b/docs/html/node3.html @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Next: Code Distribution - Up: Up: userhtml - Previous: Previous: Contents -   Contents

    @@ -59,9 +59,9 @@ General Overview The MULTI-LEVEL DOMAIN DECOMPOSITION PARALLEL PRECONDITIONERS PACKAGE BASED ON PSBLAS (MLD2P4) provides parallel Algebraic MultiGrid (AMG) and Domain Decomposition preconditioners (see, e.g., [3,23,21]), + HREF="node29.html#Briggs2000">3,23,21]), to be used in the iterative solution of linear systems,
    @@ -95,8 +95,8 @@ multi-level cycles and smoothers widely used in multigrid methods. The multi-level preconditioners implemented in MLD2P4 are obtained by combining AMG cycles with smoothers and coarsest-level solvers. The V-, W-, and K-cycles [3,19] are available, which allow to define + HREF="node29.html#Briggs2000">3,19] are available, which allow to define almost all the preconditioners in the package, including the multi-level hybrid Schwarz ones; a specific cycle is implemented to obtain multi-level additive Schwarz preconditioners. The Jacobi, hybridforward/backward Gauss-Seidel, block-Jacobi, and additive Schwarz methods @@ -104,8 +104,8 @@ are available as smoothers. An algebraic approach is used to generate a hierarch coarse-level matrices and operators, without explicitly using any information on the geometry of the original problem, e.g., the discretization of a PDE. To this end, the smoothed aggregation technique [2,25] + HREF="node29.html#BREZINA_VANEK">2,25] is applied. Either exact or approximate solvers can be used on the coarsest-level system. Specifically, different sparse LU factorizations from external packages, and native incomplete LU factorizations and Jacobi, hybrid Gauss-Seidel, @@ -126,8 +126,8 @@ interface. MLD2P4 has been designed to implement scalable and easy-to-use multilevel preconditioners in the context of the PSBLAS (Parallel Sparse BLAS) computational framework [15,14]. PSBLAS provides basic linear algebra + HREF="node29.html#psblas_00">15,14]. PSBLAS provides basic linear algebra operators and data management facilities for distributed sparse matrices, as well as parallel Krylov solvers which can be used with the MLD2P4 preconditioners. The choice of PSBLAS has been mainly motivated by the need of having @@ -150,14 +150,14 @@ few black-box routines at the upper layer allow all users to easily build and apply any preconditioner available in MLD2P4; facilities are also available allowing expert users to extend the set of smoothers and solvers for building new versions of the preconditioners (see -Section 7). +Section 7).

    We note that the user interface of MLD2P4 2.1 has been extended with respect to the previous versions in order to separate the construction of the multi-level hierarchy from the construction of the smoothers and solvers, and to allow for more flexibility at each level. The software architecture described in [8] has significantly + HREF="node29.html#MLD2P4_TOMS">8] has significantly evolved too, in order to fully exploit the Fortran 2003 features implemented in PSBLAS 3. However, compatibility with previous versions has been preserved. @@ -168,37 +168,37 @@ and installation of the package are given in Section 4, to help the users in choosing among them. The basics for building and applying the preconditioners with the Krylov solvers implemented in PSBLAS are reported -in Section 5, where the Fortran codes of a few sample programs +in Section 5, where the Fortran codes of a few sample programs are also shown. A reference guide for the user interface routines is provided -in Section 6. Information on the extension of the package -through the addition of new smoothers and solvers is reported in Section 7. +in Section 6. Information on the extension of the package +through the addition of new smoothers and solvers is reported in Section 7. The error handling mechanism used by the package -is briefly described in Section 8. The copyright terms concerning the -distribution and modification of MLD2P4 are reported in Appendix A. +is briefly described in Section 8. The copyright terms concerning the +distribution and modification of MLD2P4 are reported in Appendix A.


    - next - up - previous - contents
    - Next: Next: Code Distribution - Up: Up: userhtml - Previous: Previous: Contents -   Contents diff --git a/docs/html/node30.html b/docs/html/node30.html index e72d2f91..f348d8d3 100644 --- a/docs/html/node30.html +++ b/docs/html/node30.html @@ -1,209 +1,70 @@ - + - -Bibliography - +About this document ... + - + - - - - +
    +
    - -

    -Bibliography -

    +

    +About this document ... +

    +

    +This document was generated using the +LaTeX2HTML translator Version 2012 (1.2)

    -

    1 -
    -M. Brezina, P. Vanek, -A Black-Box Iterative Solver Based on a Two-Level Schwarz Method, -Computing, 63, 1999, 233-263. -

    2 -
    -A. Buttari, P. D'Ambra, D. di Serafino, S. Filippone, -Extending PSBLAS to Build Parallel Schwarz Preconditioners, -in , J. Dongarra, K. Madsen, J. Wasniewski, editors, -Proceedings of PARA 04 Workshop on State of the Art -in Scientific Computing, Lecture Notes in Computer Science, -Springer, 2005, 593-602. -

    3 -
    A. Buttari, P. D'Ambra, D. di Serafino, S. Filippone, -2LEV-D2P4: a package of high-performance preconditioners -for scientific and engineering applications, -Applicable Algebra in Engineering, Communications and Computing, -18, 3, 2007, 223-239. -

    4 -
    P. D'Ambra, S. Filippone, D. di Serafino, -On the Development of PSBLAS-based Parallel Two-level Schwarz Preconditioners, -Applied Numerical Mathematics, Elsevier Science, -57, 11-12, 2007, 1181-1196. - -

    -

    5 -
    -X. C. Cai, M. Sarkis, -A Restricted Additive Schwarz Preconditioner for General Sparse Linear Systems, -SIAM Journal on Scientific Computing, 21, 2, 1999, 792-797. -

    6 -
    -X. C. Cai, O. B. Widlund, -Domain Decomposition Algorithms for Indefinite Elliptic Problems, -SIAM Journal on Scientific and Statistical Computing, 13, 1, 1992, 243-258. -

    7 -
    -T. Chan and T. Mathew, -Domain Decomposition Algorithms, -in A. Iserles, editor, Acta Numerica 1994, 61-143. -Cambridge University Press. -

    8 -
    -T.A. Davis, -Algorithm 832: UMFPACK - an Unsymmetric-pattern Multifrontal -Method with a Column Pre-ordering Strategy, -ACM Transactions on Mathematical Software, 30, 2004, 196-199. -(See also http://www.cise.ufl.edu/ davis/) -

    9 -
    -J.W. Demmel, S.C. Eisenstat, J.R. Gilbert, X.S. Li and J.W.H. Liu, -A supernodal approach to sparse partial pivoting, -SIAM Journal on Matrix Analysis and Applications, 20, 3, 1999, 720-755. -

    10 -
    -J. J. Dongarra, J. Du Croz, I. S. Duff, S. Hammarling, -A set of Level 3 Basic Linear Algebra Subprograms, -ACM Transactions on Mathematical Software, 16, 1990, 1-17. -

    11 -
    -J. J. Dongarra, J. Du Croz, S. Hammarling, R. J. Hanson, -An extended set of FORTRAN Basic Linear Algebra Subprograms, -ACM Transactions on Mathematical Software, 14, 1988, 1-17. -

    12 -
    -J. J. Dongarra and R. C. Whaley, -A User's Guide to the BLACS v. 1.1, -Lapack Working Note 94, Tech. Rep. UT-CS-95-281, University of -Tennessee, March 1995 (updated May 1997). -

    13 -
    -E. Efstathiou, J. G. Gander, -Why Restricted Additive Schwarz Converges Faster than Additive Schwarz, -BIT Numerical Mathematics, 43, 2003, 945-959. -

    14 -
    -S. Filippone, A. Buttari, -PSBLAS-2.3 User's Guide. A Reference Guide for the Parallel Sparse BLAS Library, -available from http://www.ce.uniroma2.it/psblas/. -

    15 -
    -S. Filippone, M. Colajanni, -PSBLAS: A Library for Parallel Linear Algebra -Computation on Sparse Matrices, -ACM Transactions on Mathematical Software, 26, 4, 2000, 527-550. -

    16 -
    -W. Gropp, S. Huss-Lederman, A. Lumsdaine, E. Lusk, B. Nitzberg, W. Saphir, M. Snir, -MPI: The Complete Reference. Volume 2 - The MPI-2 Extensions, -MIT Press, 1998. -

    17 -
    -C. L. Lawson, R. J. Hanson, D. Kincaid, F. T. Krogh, -Basic Linear Algebra Subprograms for FORTRAN usage, -ACM Transactions on Mathematical Software, 5, 1979, 308-323. -

    18 -
    -X. S. Li, J. W. Demmel, SuperLU_DIST: A Scalable Distributed-memory -Sparse Direct Solver for Unsymmetric Linear Systems, -ACM Transactions on Mathematical Software, 29, 2, 2003, 110-140. -

    19 -
    -Y. Saad, -Iterative methods for sparse linear systems, 2nd edition, -SIAM, 2003 - +Copyright © 1993, 1994, 1995, 1996, +Nikos Drakos, +Computer Based Learning Unit, University of Leeds. +
    +Copyright © 1997, 1998, 1999, +Ross Moore, +Mathematics Department, Macquarie University, Sydney.

    -

    20 -
    -B. Smith, P. Bjorstad, W. Gropp, -Domain Decomposition: Parallel Multilevel Methods for Elliptic -Partial Differential Equations, -Cambridge University Press, 1996. -

    21 -
    -M. Snir, S. Otto, S. Huss-Lederman, D. Walker, J. Dongarra, -MPI: The Complete Reference. Volume 1 - The MPI Core, second edition, -MIT Press, 1998. -

    22 -
    -K. Stüben, -Algebraic Multigrid (AMG): an Introduction with Applications, -in A. Schüller, U. Trottenberg, C. Oosterlee, editors, Multigrid, -Academic Press, 2000. -

    23 -
    -R. S. Tuminaro, C. Tong, -Parallel Smoothed Aggregation Multigrid: Aggregation Strategies on Massively Parallel Machines, -in J. Donnelley, editor, Proceedings of SuperComputing 2000, Dallas, 2000. -

    24 -
    -P. Vanek, J. Mandel and M. Brezina, -Algebraic Multigrid by Smoothed Aggregation for Second and Fourth Order Elliptic Problems, -Computing, 56, 1996, 179-196. - -

    -

    - +The command line arguments were:
    + latex2html -local_icons -noaddress -dir ../../html userhtml.tex

    +The translation was initiated by Salvatore Filippone on 2017-07-25


    -
    -Salvatore Filippone -2008-07-23 -
    + diff --git a/docs/html/node4.html b/docs/html/node4.html index 5b865be9..cb8f1623 100644 --- a/docs/html/node4.html +++ b/docs/html/node4.html @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Next: Configuring and Building MLD2P4 - Up: Up: userhtml - Previous: Previous: General Overview -   Contents

    @@ -65,7 +65,7 @@ where contact points for further information can be also found.

    The software is available under a modified BSD license, as specified -in Appendix A; please note that some of the optional +in Appendix A; please note that some of the optional third party libraries may be licensed under a different and more stringent license, most notably the GPL, and this should be taken into account when treating derived works. diff --git a/docs/html/node5.html b/docs/html/node5.html index 87755718..7a4528fb 100644 --- a/docs/html/node5.html +++ b/docs/html/node5.html @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Next: Prerequisites - Up: Up: userhtml - Previous: Previous: Code Distribution -   Contents

    @@ -89,40 +89,40 @@ optional software used by MLD2P4 is given in the next sections. Subsections


    - next - up - previous - contents
    - Next: Next: Prerequisites - Up: Up: userhtml - Previous: Previous: Code Distribution -   Contents diff --git a/docs/html/node6.html b/docs/html/node6.html index 8201d48f..a5398c73 100644 --- a/docs/html/node6.html +++ b/docs/html/node6.html @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Next: Optional third party libraries - Up: Up: Configuring and Building MLD2P4 - Previous: Previous: Configuring and Building MLD2P4 -   Contents

    @@ -60,9 +60,9 @@ Prerequisites
    BLAS
    [11,12,17] Many vendors provide optimized versions + HREF="node29.html#blas3">11,12,17] Many vendors provide optimized versions of BLAS; if no vendor version is available for a given platform, the ATLAS software (
    MPI
    [16,22] A version of MPI is available on most + HREF="node29.html#MPI2">16,22] A version of MPI is available on most high-performance computing systems.
    PSBLAS
    [13,15] Parallel Sparse BLAS (PSBLAS) is + HREF="node29.html#PSBLASGUIDE">13,15] Parallel Sparse BLAS (PSBLAS) is available from www.ce.uniroma2.it/psblas; version 3.5.0 (or later) is required. Indeed, all the prerequisites @@ -108,26 +108,26 @@ compiler as MLD2P4.


    - next - up - previous - contents
    - Next: Next: Optional third party libraries - Up: Up: Configuring and Building MLD2P4 - Previous: Previous: Configuring and Building MLD2P4 -   Contents diff --git a/docs/html/node7.html b/docs/html/node7.html index 1b918e26..f87e992d 100644 --- a/docs/html/node7.html +++ b/docs/html/node7.html @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Next: Configuration options - Up: Up: Configuring and Building MLD2P4 - Previous: Previous: Prerequisites -   Contents

    @@ -64,7 +64,7 @@ for multi-level preconditioners may change to reflect their presence.
    UMFPACK
    [9] + HREF="node29.html#UMFPACK">9] A sparse LU factorization package included in the SuiteSparse library, available from faculty.cse.tamu.edu/davis/suitesparse.html; @@ -75,7 +75,7 @@ for multi-level preconditioners may change to reflect their presence.
    MUMPS
    [1] + HREF="node29.html#MUMPS">1] A sparse LU factorization package available from mumps.enseeiht.fr; it provides sequential and parallel factorizations and triangular system solution @@ -84,7 +84,7 @@ for multi-level preconditioners may change to reflect their presence.
    SuperLU
    [10] + HREF="node29.html#SUPERLU">10] A sparse LU factorization package available from crd.lbl.gov/~xiaoye/SuperLU/; it provides sequential @@ -95,7 +95,7 @@ for multi-level preconditioners may change to reflect their presence.
    SuperLU_Dist
    [18] + HREF="node29.html#SUPERLUDIST">18] A sparse LU factorization package available from the same site as SuperLU; it provides parallel factorization and triangular system solution for double precision real and complex data. @@ -111,26 +111,26 @@ for multi-level preconditioners may change to reflect their presence.


    - next - up - previous - contents
    - Next: Next: Configuration options - Up: Up: Configuring and Building MLD2P4 - Previous: Previous: Prerequisites -   Contents diff --git a/docs/html/node8.html b/docs/html/node8.html index 788b5598..db0eaab4 100644 --- a/docs/html/node8.html +++ b/docs/html/node8.html @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Next: Bug reporting - Up: Up: Configuring and Building MLD2P4 - Previous: Previous: Optional third party libraries -   Contents

    @@ -260,26 +260,26 @@ followed (optionally) by make install

    - next - up - previous - contents
    - Next: Next: Bug reporting - Up: Up: Configuring and Building MLD2P4 - Previous: Previous: Optional third party libraries -   Contents diff --git a/docs/html/node9.html b/docs/html/node9.html index 5144a6d6..6a26d105 100644 --- a/docs/html/node9.html +++ b/docs/html/node9.html @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Next: Example and test programs - Up: Up: Configuring and Building MLD2P4 - Previous: Previous: Configuration options -   Contents

    diff --git a/docs/html/userhtml.html b/docs/html/userhtml.html index 3a70fdf3..82c86e2e 100644 --- a/docs/html/userhtml.html +++ b/docs/html/userhtml.html @@ -23,18 +23,18 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next up previous - contents
    - Next: Next: Abstract -   Contents

    @@ -90,74 +90,78 @@ July 31, 2017

    diff --git a/docs/mld2p4-2.1-guide.pdf b/docs/mld2p4-2.1-guide.pdf index 41cb26cb..8bbe1121 100644 --- a/docs/mld2p4-2.1-guide.pdf +++ b/docs/mld2p4-2.1-guide.pdf @@ -1893,7 +1893,7 @@ endstream endobj 325 0 obj << -/Length 11368 +/Length 11467 >> stream 0 g 0 G @@ -1904,7 +1904,7 @@ BT 0 g 0 G /F15 10.9091 Tf 182.57 0 Td [(\0502\051)]TJ 0 g 0 G - -398.511 -19.516 Td [(where)]TJ/F22 10.9091 Tf 32.496 0 Td [(A)]TJ/F15 10.9091 Tf 12.796 0 Td [(=)-423(\050)]TJ/F22 10.9091 Tf 17.342 0 Td [(a)]TJ/F23 7.9701 Tf 5.767 -1.636 Td [(ij)]TJ/F15 10.9091 Tf 7.265 1.636 Td [(\051)]TJ/F25 10.9091 Tf 8.857 0 Td [(2)]TJ/F34 10.9091 Tf 11.888 0 Td [(R)]TJ/F23 7.9701 Tf 7.878 3.959 Td [(n)]TJ/F26 7.9701 Tf 5.139 0 Td [(\002)]TJ/F23 7.9701 Tf 6.586 0 Td [(n)]TJ/F15 10.9091 Tf 10.223 -3.959 Td [(is)-421(a)-420(nonsingular)-420(sparse)-421(matrix;)-464(for)-420(ease)-421(of)-420(presen)28(tation)-421(w)28(e)]TJ -126.237 -13.549 Td [(assume)]TJ/F22 10.9091 Tf 37.697 0 Td [(A)]TJ/F15 10.9091 Tf 11.818 0 Td [(is)-333(real,)-334(but)-333(the)-333(results)-334(are)-333(v)56(alid)-334(for)-333(the)-333(complex)-334(case)-333(as)-333(w)27(ell.)]TJ -32.579 -13.549 Td [(Let)-497(us)-498(assume)-497(as)-497(\014nest)-498(in)1(dex)-498(space)-497(the)-497(set)-498(of)-497(ro)28(w)-497(\050column\051)-498(ind)1(ice)-1(s)-497(of)]TJ/F22 10.9091 Tf 361.461 0 Td [(A)]TJ/F15 10.9091 Tf 8.182 0 Td [(,)-538(i.e.,)]TJ -386.579 -13.55 Td [(\012)-377(=)]TJ/F25 10.9091 Tf 24.593 0 Td [(f)]TJ/F15 10.9091 Tf 5.454 0 Td [(1)]TJ/F22 10.9091 Tf 5.455 0 Td [(;)]TJ/F15 10.9091 Tf 4.848 0 Td [(2)]TJ/F22 10.9091 Tf 5.455 0 Td [(;)-167(:)-166(:)-167(:)-167(;)-166(n)]TJ/F25 10.9091 Tf 30.79 0 Td [(g)]TJ/F15 10.9091 Tf 5.455 0 Td [(.)-623(An)28(y)-393(algebraic)-393(m)27(ultilev)28(el)-393(preconditioners)-393(implemen)28(ted)-393(in)-393(MLD2P4)]TJ -82.05 -13.549 Td [(generates)-333(a)-334(hierarc)28(h)28(y)-333(of)-334(index)-333(spaces)-333(and)-334(a)-333(corresp)-28(onding)-333(hierarc)28(h)28(y)-334(of)-333(matrices,)]TJ 81.377 -23.491 Td [(\012)]TJ/F20 7.9701 Tf 7.879 4.505 Td [(1)]TJ/F25 10.9091 Tf 7.762 -4.505 Td [(\021)]TJ/F15 10.9091 Tf 11.515 0 Td [(\012)]TJ/F25 10.9091 Tf 10.909 0 Td [(\033)]TJ/F15 10.9091 Tf 11.515 0 Td [(\012)]TJ/F20 7.9701 Tf 7.879 4.505 Td [(2)]TJ/F25 10.9091 Tf 7.763 -4.505 Td [(\033)]TJ/F22 10.9091 Tf 11.515 0 Td [(:)-167(:)-166(:)]TJ/F25 10.9091 Tf 15.757 0 Td [(\033)]TJ/F15 10.9091 Tf 11.516 0 Td [(\012)]TJ/F23 7.9701 Tf 7.878 4.505 Td [(nl)-12(ev)]TJ/F22 10.9091 Tf 16.597 -4.505 Td [(;)-1167(A)]TJ/F20 7.9701 Tf 23.939 4.505 Td [(1)]TJ/F25 10.9091 Tf 7.763 -4.505 Td [(\021)]TJ/F22 10.9091 Tf 11.515 0 Td [(A;)-167(A)]TJ/F20 7.9701 Tf 21.212 4.505 Td [(2)]TJ/F22 10.9091 Tf 4.732 -4.505 Td [(;)-167(:)-166(:)-167(:)-167(;)-166(A)]TJ/F23 7.9701 Tf 32.424 4.505 Td [(nl)-12(ev)]TJ/F22 10.9091 Tf 16.597 -4.505 Td [(;)]TJ/F15 10.9091 Tf -328.044 -23.49 Td [(b)28(y)-282(using)-282(the)-282(information)-282(con)28(tained)-282(in)]TJ/F22 10.9091 Tf 180.373 0 Td [(A)]TJ/F15 10.9091 Tf 8.182 0 Td [(,)-292(without)-282(assuming)-282(an)27(y)-282(kno)28(wledge)-282(of)-282(the)-282(geom-)]TJ -188.555 -13.55 Td [(etry)-295(of)-294(the)-295(problem)-294(from)-295(whic)28(h)]TJ/F22 10.9091 Tf 150.888 0 Td [(A)]TJ/F15 10.9091 Tf 11.395 0 Td [(originates.)-431(A)-295(v)28(ector)-295(space)]TJ/F34 10.9091 Tf 126.348 0 Td [(R)]TJ/F23 7.9701 Tf 7.879 3.959 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.406 Td [(k)]TJ/F15 10.9091 Tf 8.285 -2.553 Td [(is)-295(asso)-27(ciate)-1(d)-294(with)-295(\012)]TJ/F23 7.9701 Tf 94.368 3.959 Td [(k)]TJ/F15 10.9091 Tf 5.12 -3.959 Td [(,)]TJ -409.421 -13.549 Td [(where)]TJ/F22 10.9091 Tf 31.714 0 Td [(n)]TJ/F23 7.9701 Tf 6.548 -1.777 Td [(k)]TJ/F15 10.9091 Tf 8.925 1.777 Td [(is)-349(the)-349(size)-348(of)-349(\012)]TJ/F23 7.9701 Tf 71.401 3.959 Td [(k)]TJ/F15 10.9091 Tf 5.12 -3.959 Td [(.)-491(F)84(or)-349(all)]TJ/F22 10.9091 Tf 43.449 0 Td [(k)-335(<)-304(nl)-19(ev)]TJ/F15 10.9091 Tf 41.907 0 Td [(,)-353(a)-348(restriction)-349(op)-28(erator)-349(and)-348(a)-349(prolongation)]TJ -209.064 -13.549 Td [(one)-333(are)-334(built,)-333(whic)28(h)-333(connect)-334(t)28(w)28(o)-334(l)1(e)-1(v)28(els)]TJ/F22 10.9091 Tf 188.273 0 Td [(k)]TJ/F15 10.9091 Tf 9.659 0 Td [(and)]TJ/F22 10.9091 Tf 21.212 0 Td [(k)]TJ/F15 10.9091 Tf 8.447 0 Td [(+)-222(1:)]TJ/F22 10.9091 Tf -101.285 -23.491 Td [(P)]TJ/F23 7.9701 Tf 8.519 4.504 Td [(k)]TJ/F25 10.9091 Tf 8.15 -4.504 Td [(2)]TJ/F34 10.9091 Tf 10.303 0 Td [(R)]TJ/F23 7.9701 Tf 7.879 4.504 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.405 Td [(k)]TJ/F26 7.9701 Tf 4.573 1.405 Td [(\002)]TJ/F23 7.9701 Tf 6.587 0 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.405 Td [(k)]TJ/F21 5.9776 Tf 4.075 0 Td [(+1)]TJ/F22 10.9091 Tf 10.239 -3.099 Td [(;)-1167(R)]TJ/F23 7.9701 Tf 24.125 4.504 Td [(k)]TJ/F25 10.9091 Tf 8.15 -4.504 Td [(2)]TJ/F34 10.9091 Tf 10.303 0 Td [(R)]TJ/F23 7.9701 Tf 7.879 4.504 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.405 Td [(k)]TJ/F21 5.9776 Tf 4.075 0 Td [(+1)]TJ/F26 7.9701 Tf 9.741 1.405 Td [(\002)]TJ/F23 7.9701 Tf 6.587 0 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.405 Td [(k)]TJ/F15 10.9091 Tf 5.071 -3.099 Td [(;)]TJ -283.114 -23.491 Td [(the)-282(matrix)]TJ/F22 10.9091 Tf 53.146 0 Td [(A)]TJ/F23 7.9701 Tf 8.182 3.959 Td [(k)]TJ/F20 7.9701 Tf 4.621 0 Td [(+1)]TJ/F15 10.9091 Tf 14.392 -3.959 Td [(is)-282(computed)-281(b)27(y)-281(using)-282(the)-282(previou)1(s)-282(op)-28(erators)-282(according)-281(to)-282(the)-282(Galerkin)]TJ -80.341 -13.549 Td [(approac)28(h,)-333(i.e.,)]TJ/F22 10.9091 Tf 165.163 -13.549 Td [(A)]TJ/F23 7.9701 Tf 8.182 4.504 Td [(k)]TJ/F20 7.9701 Tf 4.621 0 Td [(+1)]TJ/F15 10.9091 Tf 14.349 -4.504 Td [(=)]TJ/F22 10.9091 Tf 11.515 0 Td [(R)]TJ/F23 7.9701 Tf 8.368 4.504 Td [(k)]TJ/F22 10.9091 Tf 5.12 -4.504 Td [(A)]TJ/F23 7.9701 Tf 8.181 4.504 Td [(k)]TJ/F22 10.9091 Tf 5.12 -4.504 Td [(P)]TJ/F23 7.9701 Tf 8.519 4.504 Td [(k)]TJ/F22 10.9091 Tf 5.12 -4.504 Td [(:)]TJ -244.258 -19.516 Td [(R)]TJ/F23 7.9701 Tf 8.367 3.958 Td [(k)]TJ/F15 10.9091 Tf 9.885 -3.958 Td [(=)-437(\050)]TJ/F22 10.9091 Tf 17.493 0 Td [(P)]TJ/F23 7.9701 Tf 8.519 3.958 Td [(k)]TJ/F15 10.9091 Tf 5.12 -3.958 Td [(\051)]TJ/F23 7.9701 Tf 4.242 3.958 Td [(T)]TJ/F15 10.9091 Tf 11.282 -3.958 Td [(in)-429(the)-428(c)-1(u)1(rren)27(t)-428(implemen)27(tation)-428(of)-429(MLD2P4.)-731(A)-428(smo)-28(other)-429(with)-429(iteration)]TJ -64.908 -13.55 Td [(matrix)]TJ/F22 10.9091 Tf 35.437 0 Td [(M)]TJ/F23 7.9701 Tf 11.773 3.959 Td [(k)]TJ/F15 10.9091 Tf 8.708 -3.959 Td [(is)-329(set)-329(up)-329(at)-329(eac)28(h)-329(lev)28(el)]TJ/F22 10.9091 Tf 106.2 0 Td [(k)-309(<)-278(nl)-20(ev)]TJ/F15 10.9091 Tf 41.345 0 Td [(,)-330(and)-329(a)-329(solv)28(er)-329(is)-329(set)-329(up)-329(at)-329(the)-329(coarsest)-329(lev)28(el,)]TJ -203.463 -13.549 Td [(so)-280(that)-280(they)-281(are)-280(ready)-280(for)-280(application)-280(\050for)-280(example,)-291(setting)-280(up)-280(a)-281(solv)28(er)-280(based)-280(on)-280(the)]TJ/F22 10.9091 Tf 396.389 0 Td [(LU)]TJ/F15 10.9091 Tf -396.389 -13.549 Td [(factorization)-353(means)-353(computing)-353(and)-353(storing)-352(the)]TJ/F22 10.9091 Tf 228.435 0 Td [(L)]TJ/F15 10.9091 Tf 11.275 0 Td [(and)]TJ/F22 10.9091 Tf 21.426 0 Td [(U)]TJ/F15 10.9091 Tf 12.488 0 Td [(factors\051.)-503(The)-353(construction)-353(of)]TJ -273.624 -13.549 Td [(the)-366(hierarc)28(h)28(y)-366(of)-366(AMG)-366(comp)-27(onen)27(ts)-365(desc)-1(r)1(ib)-28(ed)-366(so)-366(far)-366(corresp)-27(onds)-366(to)-366(the)-366(so-called)-366(build)]TJ 0 -13.549 Td [(phase)-333(of)-334(the)-333(preconditioner.)]TJ 16.936 -13.55 Td [(The)-359(com)-1(p)-27(onen)28(ts)-360(pro)-28(du)1(c)-1(ed)-359(in)-359(the)-360(build)-359(phase)-359(ma)27(y)-359(b)-28(e)-359(com)28(bined)-360(in)-359(sev)28(eral)-360(w)28(a)28(ys)-360(to)]TJ -16.936 -13.549 Td [(obtain)-306(di\013eren)28(t)-306(m)27(ultilev)28(el)-306(preconditioners;)-315(this)-306(is)-306(done)-307(in)-306(the)-306(application)-306(phase,)-312(i.)1(e)-1(.,)-311(in)]TJ 0 -13.549 Td [(the)-391(computation)-391(of)-391(a)-391(v)27(ector)-391(of)-391(t)28(yp)-28(e)]TJ/F22 10.9091 Tf 178.081 0 Td [(w)]TJ/F15 10.9091 Tf 12.185 0 Td [(=)]TJ/F22 10.9091 Tf 12.566 0 Td [(B)]TJ/F26 7.9701 Tf 8.822 3.959 Td [(\000)]TJ/F20 7.9701 Tf 6.586 0 Td [(1)]TJ/F22 10.9091 Tf 4.732 -3.959 Td [(v)]TJ/F15 10.9091 Tf 5.68 0 Td [(,)-406(where)]TJ/F22 10.9091 Tf 39.631 0 Td [(B)]TJ/F15 10.9091 Tf 13.089 0 Td [(denotes)-391(the)-391(preconditioner,)]TJ -281.372 -13.549 Td [(usually)-334(withi)1(n)-334(an)-334(iteration)-333(of)-334(a)-334(Kr)1(ylo)27(v)-333(solv)27(er)-333([)]TJ + -398.511 -19.516 Td [(where)]TJ/F22 10.9091 Tf 32.496 0 Td [(A)]TJ/F15 10.9091 Tf 12.796 0 Td [(=)-423(\050)]TJ/F22 10.9091 Tf 17.342 0 Td [(a)]TJ/F23 7.9701 Tf 5.767 -1.636 Td [(ij)]TJ/F15 10.9091 Tf 7.265 1.636 Td [(\051)]TJ/F25 10.9091 Tf 8.857 0 Td [(2)]TJ/F34 10.9091 Tf 11.888 0 Td [(R)]TJ/F23 7.9701 Tf 7.878 3.959 Td [(n)]TJ/F26 7.9701 Tf 5.139 0 Td [(\002)]TJ/F23 7.9701 Tf 6.586 0 Td [(n)]TJ/F15 10.9091 Tf 10.223 -3.959 Td [(is)-421(a)-420(nonsingular)-420(sparse)-421(matrix;)-464(for)-420(ease)-421(of)-420(presen)28(tation)-421(w)28(e)]TJ -126.237 -13.549 Td [(assume)]TJ/F22 10.9091 Tf 37.697 0 Td [(A)]TJ/F15 10.9091 Tf 11.818 0 Td [(is)-333(real,)-334(but)-333(the)-333(results)-334(are)-333(v)56(alid)-334(for)-333(the)-333(complex)-334(case)-333(as)-333(w)27(ell.)]TJ -32.579 -13.549 Td [(Let)-497(us)-498(assume)-497(as)-497(\014nest)-498(in)1(dex)-498(space)-497(the)-497(set)-498(of)-497(ro)28(w)-497(\050column\051)-498(ind)1(ice)-1(s)-497(of)]TJ/F22 10.9091 Tf 361.461 0 Td [(A)]TJ/F15 10.9091 Tf 8.182 0 Td [(,)-538(i.e.,)]TJ -386.579 -13.55 Td [(\012)-377(=)]TJ/F25 10.9091 Tf 24.593 0 Td [(f)]TJ/F15 10.9091 Tf 5.454 0 Td [(1)]TJ/F22 10.9091 Tf 5.455 0 Td [(;)]TJ/F15 10.9091 Tf 4.848 0 Td [(2)]TJ/F22 10.9091 Tf 5.455 0 Td [(;)-167(:)-166(:)-167(:)-167(;)-166(n)]TJ/F25 10.9091 Tf 30.79 0 Td [(g)]TJ/F15 10.9091 Tf 5.455 0 Td [(.)-623(An)28(y)-393(algebraic)-393(m)27(ultilev)28(el)-393(preconditioners)-393(implemen)28(ted)-393(in)-393(MLD2P4)]TJ -82.05 -13.549 Td [(generates)-333(a)-334(hierarc)28(h)28(y)-333(of)-334(index)-333(spaces)-333(and)-334(a)-333(corresp)-28(onding)-333(hierarc)28(h)28(y)-334(of)-333(matrices,)]TJ 81.377 -23.491 Td [(\012)]TJ/F20 7.9701 Tf 7.879 4.505 Td [(1)]TJ/F25 10.9091 Tf 7.762 -4.505 Td [(\021)]TJ/F15 10.9091 Tf 11.515 0 Td [(\012)]TJ/F25 10.9091 Tf 10.909 0 Td [(\033)]TJ/F15 10.9091 Tf 11.515 0 Td [(\012)]TJ/F20 7.9701 Tf 7.879 4.505 Td [(2)]TJ/F25 10.9091 Tf 7.763 -4.505 Td [(\033)]TJ/F22 10.9091 Tf 11.515 0 Td [(:)-167(:)-166(:)]TJ/F25 10.9091 Tf 15.757 0 Td [(\033)]TJ/F15 10.9091 Tf 11.516 0 Td [(\012)]TJ/F23 7.9701 Tf 7.878 4.505 Td [(nl)-12(ev)]TJ/F22 10.9091 Tf 16.597 -4.505 Td [(;)-1167(A)]TJ/F20 7.9701 Tf 23.939 4.505 Td [(1)]TJ/F25 10.9091 Tf 7.763 -4.505 Td [(\021)]TJ/F22 10.9091 Tf 11.515 0 Td [(A;)-167(A)]TJ/F20 7.9701 Tf 21.212 4.505 Td [(2)]TJ/F22 10.9091 Tf 4.732 -4.505 Td [(;)-167(:)-166(:)-167(:)-167(;)-166(A)]TJ/F23 7.9701 Tf 32.424 4.505 Td [(nl)-12(ev)]TJ/F22 10.9091 Tf 16.597 -4.505 Td [(;)]TJ/F15 10.9091 Tf -328.044 -23.49 Td [(b)28(y)-282(using)-282(the)-282(information)-282(con)28(tained)-282(in)]TJ/F22 10.9091 Tf 180.373 0 Td [(A)]TJ/F15 10.9091 Tf 8.182 0 Td [(,)-292(without)-282(assuming)-282(an)27(y)-282(kno)28(wledge)-282(of)-282(the)-282(geom-)]TJ -188.555 -13.55 Td [(etry)-295(of)-294(the)-295(problem)-294(from)-295(whic)28(h)]TJ/F22 10.9091 Tf 150.888 0 Td [(A)]TJ/F15 10.9091 Tf 11.395 0 Td [(originates.)-431(A)-295(v)28(ector)-295(space)]TJ/F34 10.9091 Tf 126.348 0 Td [(R)]TJ/F23 7.9701 Tf 7.879 3.959 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.406 Td [(k)]TJ/F15 10.9091 Tf 8.285 -2.553 Td [(is)-295(asso)-27(ciate)-1(d)-294(with)-295(\012)]TJ/F23 7.9701 Tf 94.368 3.959 Td [(k)]TJ/F15 10.9091 Tf 5.12 -3.959 Td [(,)]TJ -409.421 -13.549 Td [(where)]TJ/F22 10.9091 Tf 31.714 0 Td [(n)]TJ/F23 7.9701 Tf 6.548 -1.777 Td [(k)]TJ/F15 10.9091 Tf 8.925 1.777 Td [(is)-349(the)-349(size)-348(of)-349(\012)]TJ/F23 7.9701 Tf 71.401 3.959 Td [(k)]TJ/F15 10.9091 Tf 5.12 -3.959 Td [(.)-491(F)84(or)-349(all)]TJ/F22 10.9091 Tf 43.449 0 Td [(k)-335(<)-304(nl)-19(ev)]TJ/F15 10.9091 Tf 41.907 0 Td [(,)-353(a)-348(restriction)-349(op)-28(erator)-349(and)-348(a)-349(prolongation)]TJ -209.064 -13.549 Td [(one)-333(are)-334(built,)-333(whic)28(h)-333(connect)-334(t)28(w)28(o)-334(l)1(e)-1(v)28(els)]TJ/F22 10.9091 Tf 188.273 0 Td [(k)]TJ/F15 10.9091 Tf 9.659 0 Td [(and)]TJ/F22 10.9091 Tf 21.212 0 Td [(k)]TJ/F15 10.9091 Tf 8.447 0 Td [(+)-222(1:)]TJ/F22 10.9091 Tf -101.285 -23.491 Td [(P)]TJ/F23 7.9701 Tf 8.519 4.504 Td [(k)]TJ/F25 10.9091 Tf 8.15 -4.504 Td [(2)]TJ/F34 10.9091 Tf 10.303 0 Td [(R)]TJ/F23 7.9701 Tf 7.879 4.504 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.405 Td [(k)]TJ/F26 7.9701 Tf 4.573 1.405 Td [(\002)]TJ/F23 7.9701 Tf 6.587 0 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.405 Td [(k)]TJ/F21 5.9776 Tf 4.075 0 Td [(+1)]TJ/F22 10.9091 Tf 10.239 -3.099 Td [(;)-1167(R)]TJ/F23 7.9701 Tf 24.125 4.504 Td [(k)]TJ/F25 10.9091 Tf 8.15 -4.504 Td [(2)]TJ/F34 10.9091 Tf 10.303 0 Td [(R)]TJ/F23 7.9701 Tf 7.879 4.504 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.405 Td [(k)]TJ/F21 5.9776 Tf 4.075 0 Td [(+1)]TJ/F26 7.9701 Tf 9.741 1.405 Td [(\002)]TJ/F23 7.9701 Tf 6.587 0 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.405 Td [(k)]TJ/F15 10.9091 Tf 5.071 -3.099 Td [(;)]TJ -283.114 -23.491 Td [(the)-282(matrix)]TJ/F22 10.9091 Tf 53.146 0 Td [(A)]TJ/F23 7.9701 Tf 8.182 3.959 Td [(k)]TJ/F20 7.9701 Tf 4.621 0 Td [(+1)]TJ/F15 10.9091 Tf 14.392 -3.959 Td [(is)-282(computed)-281(b)27(y)-281(using)-282(the)-282(previou)1(s)-282(op)-28(erators)-282(according)-281(to)-282(the)-282(Galerkin)]TJ -80.341 -13.549 Td [(approac)28(h,)-333(i.e.,)]TJ/F22 10.9091 Tf 165.163 -13.549 Td [(A)]TJ/F23 7.9701 Tf 8.182 4.504 Td [(k)]TJ/F20 7.9701 Tf 4.621 0 Td [(+1)]TJ/F15 10.9091 Tf 14.349 -4.504 Td [(=)]TJ/F22 10.9091 Tf 11.515 0 Td [(R)]TJ/F23 7.9701 Tf 8.368 4.504 Td [(k)]TJ/F22 10.9091 Tf 5.12 -4.504 Td [(A)]TJ/F23 7.9701 Tf 8.181 4.504 Td [(k)]TJ/F22 10.9091 Tf 5.12 -4.504 Td [(P)]TJ/F23 7.9701 Tf 8.519 4.504 Td [(k)]TJ/F22 10.9091 Tf 5.12 -4.504 Td [(:)]TJ/F15 10.9091 Tf -244.258 -19.516 Td [(In)-476(the)-477(curren)28(t)-476(implemen)28(tation)-477(of)-476(MLD2P4)-476(w)28(e)-477(ha)28(v)28(e)]TJ/F22 10.9091 Tf 261.479 0 Td [(R)]TJ/F23 7.9701 Tf 8.368 3.958 Td [(k)]TJ/F15 10.9091 Tf 10.749 -3.958 Td [(=)-516(\050)]TJ/F22 10.9091 Tf 18.358 0 Td [(P)]TJ/F23 7.9701 Tf 8.519 3.958 Td [(k)]TJ/F15 10.9091 Tf 5.119 -3.958 Td [(\051)]TJ/F23 7.9701 Tf 4.243 3.958 Td [(T)]TJ/F15 10.9091 Tf 11.801 -3.958 Td [(A)-476(smo)-28(other)-476(with)]TJ -328.636 -13.55 Td [(iteration)-441(matrix)]TJ/F22 10.9091 Tf 82.101 0 Td [(M)]TJ/F23 7.9701 Tf 11.773 3.959 Td [(k)]TJ/F15 10.9091 Tf 9.928 -3.959 Td [(is)-441(set)-441(up)-440(at)-441(eac)28(h)-441(lev)28(el)]TJ/F22 10.9091 Tf 113.517 0 Td [(k)-488(<)-457(nl)-20(ev)]TJ/F15 10.9091 Tf 45.251 0 Td [(,)-468(and)-440(a)-441(solv)28(er)-441(is)-441(set)-441(up)-440(at)-441(the)]TJ -262.57 -13.549 Td [(coarsest)-369(lev)28(el,)-378(so)-368(that)-369(they)-369(are)-369(ready)-368(for)-369(application)-369(\050for)-368(example,)-378(setting)-369(up)-368(a)-369(solv)28(er)]TJ 0 -13.549 Td [(based)-292(on)-291(the)]TJ/F22 10.9091 Tf 62.938 0 Td [(LU)]TJ/F15 10.9091 Tf 19.243 0 Td [(factorization)-292(means)-291(computing)-292(and)-291(storing)-292(the)]TJ/F22 10.9091 Tf 224.422 0 Td [(L)]TJ/F15 10.9091 Tf 10.605 0 Td [(and)]TJ/F22 10.9091 Tf 20.757 0 Td [(U)]TJ/F15 10.9091 Tf 11.819 0 Td [(factors\051.)-431(The)]TJ -349.784 -13.549 Td [(construction)-345(of)-344(the)-345(hierarc)28(h)27(y)-344(of)-345(AMG)-345(comp)-28(on)1(e)-1(n)28(ts)-345(d)1(e)-1(scrib)-27(ed)-345(so)-345(far)-345(corresp)-27(onds)-345(to)-345(the)]TJ 0 -13.549 Td [(so-called)-333(build)-334(ph)1(as)-1(e)-333(of)-333(the)-334(p)1(rec)-1(on)1(ditioner.)]TJ 16.936 -13.55 Td [(The)-359(com)-1(p)-27(onen)28(ts)-360(pro)-28(du)1(c)-1(ed)-359(in)-359(the)-360(build)-359(phase)-359(ma)27(y)-359(b)-28(e)-359(com)28(bined)-360(in)-359(sev)28(eral)-360(w)28(a)28(ys)-360(to)]TJ -16.936 -13.549 Td [(obtain)-306(di\013eren)28(t)-306(m)27(ultilev)28(el)-306(preconditioners;)-315(this)-306(is)-306(done)-307(in)-306(the)-306(application)-306(phase,)-312(i)1(.e)-1(.)1(,)-312(in)]TJ 0 -13.549 Td [(the)-391(computation)-391(of)-391(a)-391(v)27(ector)-391(of)-391(t)28(yp)-28(e)]TJ/F22 10.9091 Tf 178.081 0 Td [(w)]TJ/F15 10.9091 Tf 12.185 0 Td [(=)]TJ/F22 10.9091 Tf 12.566 0 Td [(B)]TJ/F26 7.9701 Tf 8.822 3.959 Td [(\000)]TJ/F20 7.9701 Tf 6.586 0 Td [(1)]TJ/F22 10.9091 Tf 4.732 -3.959 Td [(v)]TJ/F15 10.9091 Tf 5.68 0 Td [(,)-406(where)]TJ/F22 10.9091 Tf 39.631 0 Td [(B)]TJ/F15 10.9091 Tf 13.089 0 Td [(denotes)-391(the)-391(preconditioner,)]TJ -281.372 -13.549 Td [(usually)-334(with)1(in)-334(an)-334(iteration)-333(of)-334(a)-334(Kr)1(ylo)27(v)-333(solv)27(er)-333([)]TJ 1 0 0 rg 1 0 0 RG [(20)]TJ 0 g 0 G @@ -1920,7 +1920,7 @@ BT 1 0 0 rg 1 0 0 RG [(19)]TJ 0 g 0 G - [(].)]TJ/F17 11.9552 Tf 0 -29.053 Td [(4.2)-1125(Smo)-31(othed)-375(Aggregation)]TJ/F15 10.9091 Tf 0 -20.595 Td [(In)-374(order)-374(to)-374(de\014ne)-375(t)1(he)-375(prolongator)]TJ/F22 10.9091 Tf 167.339 0 Td [(P)]TJ/F23 7.9701 Tf 8.519 3.959 Td [(k)]TJ/F15 10.9091 Tf 5.12 -3.959 Td [(,)-384(used)-375(to)-374(compute)-374(the)-374(coarse-lev)28(el)-375(matrix)]TJ/F22 10.9091 Tf 204.32 0 Td [(A)]TJ/F23 7.9701 Tf 8.182 3.959 Td [(k)]TJ/F20 7.9701 Tf 4.622 0 Td [(+1)]TJ/F15 10.9091 Tf 11.319 -3.959 Td [(,)]TJ -409.421 -13.549 Td [(MLD2P4)-319(uses)-320(the)-319(smo)-28(othed)-319(aggregation)-319(algorithm)-320(describ)-27(ed)-320(in)-319([)]TJ + [(].)]TJ/F17 11.9552 Tf 0 -29.053 Td [(4.2)-1125(Smo)-31(othed)-375(Aggregation)]TJ/F15 10.9091 Tf 0 -20.595 Td [(In)-374(order)-374(to)-374(de\014ne)-374(the)-375(prolongator)]TJ/F22 10.9091 Tf 167.339 0 Td [(P)]TJ/F23 7.9701 Tf 8.519 3.959 Td [(k)]TJ/F15 10.9091 Tf 5.12 -3.959 Td [(,)-384(used)-375(to)-374(compute)-374(the)-374(coarse-lev)28(el)-375(matrix)]TJ/F22 10.9091 Tf 204.32 0 Td [(A)]TJ/F23 7.9701 Tf 8.182 3.959 Td [(k)]TJ/F20 7.9701 Tf 4.622 0 Td [(+1)]TJ/F15 10.9091 Tf 11.319 -3.959 Td [(,)]TJ -409.421 -13.549 Td [(MLD2P4)-319(uses)-320(the)-319(smo)-28(othed)-319(aggregation)-319(algorithm)-320(describ)-27(ed)-320(in)-319([)]TJ 1 0 0 rg 1 0 0 RG [(2)]TJ 0 g 0 G @@ -2027,14 +2027,18 @@ endstream endobj 360 0 obj << -/Length 15415 +/Length 15466 >> stream 0 g 0 G BT /F15 10.9091 Tf 86.4 740.002 Td [(14)]TJ/F42 10.9091 Tf 203.265 0 Td [(MLD2P4)-378(User)67('s)-378(and)-378(Ref)1(erence)-378(Guide)]TJ 0 g 0 G -/F15 10.9091 Tf -186.329 -35.866 Td [(The)-375(prolongator)]TJ/F22 10.9091 Tf 82.192 0 Td [(P)]TJ/F23 7.9701 Tf 8.518 3.959 Td [(k)]TJ/F15 10.9091 Tf 9.216 -3.959 Td [(is)-375(built)-376(starting)-375(from)-375(a)-376(ten)28(tativ)28(e)-376(prolongator)]TJ 222.868 2.758 Td [(\026)]TJ/F22 10.9091 Tf -2.441 -2.758 Td [(P)]TJ/F23 7.9701 Tf 8.519 3.959 Td [(k)]TJ/F25 10.9091 Tf 8.915 -3.959 Td [(2)]TJ/F34 10.9091 Tf 11.069 0 Td [(R)]TJ/F23 7.9701 Tf 7.878 3.959 Td [(n)]TJ/F24 5.9776 Tf 5.139 -1.406 Td [(k)]TJ/F26 7.9701 Tf 4.573 1.406 Td [(\002)]TJ/F23 7.9701 Tf 6.586 0 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.406 Td [(k)]TJ/F21 5.9776 Tf 4.075 0 Td [(+1)]TJ/F15 10.9091 Tf 10.24 -2.553 Td [(,)]TJ -409.421 -13.549 Td [(de\014ned)-333(as)]TJ 115.609 -14.79 Td [(\026)]TJ/F22 10.9091 Tf -2.442 -2.757 Td [(P)]TJ/F23 7.9701 Tf 8.519 4.504 Td [(k)]TJ/F15 10.9091 Tf 8.15 -4.504 Td [(=)-278(\050)-85(\026)]TJ/F22 10.9091 Tf 15.758 0 Td [(p)]TJ/F23 7.9701 Tf 5.489 4.504 Td [(k)]TJ 0 -7.201 Td [(ij)]TJ/F15 10.9091 Tf 7.265 2.697 Td [(\051)]TJ/F22 10.9091 Tf 4.242 0 Td [(;)]TJ/F15 10.9091 Tf 16.684 0 Td [(\026)]TJ/F22 10.9091 Tf -0.926 0 Td [(p)]TJ/F23 7.9701 Tf 5.489 4.504 Td [(k)]TJ 0 -7.201 Td [(ij)]TJ/F15 10.9091 Tf 10.295 2.697 Td [(=)]TJ/F28 10.9091 Tf 11.515 15.382 Td [(\032)]TJ/F15 10.9091 Tf 13.163 -8.325 Td [(1)-1913(if)]TJ/F22 10.9091 Tf 35.721 0 Td [(i)]TJ/F25 10.9091 Tf 6.788 0 Td [(2)]TJ/F15 10.9091 Tf 10.303 0 Td [(\012)]TJ/F23 7.9701 Tf 7.879 3.959 Td [(k)]TJ 0 -7.014 Td [(j)]TJ/F22 10.9091 Tf 5.12 3.055 Td [(;)]TJ/F15 10.9091 Tf -65.811 -14.089 Td [(0)-1913(otherwise)]TJ/F22 10.9091 Tf 71.266 0 Td [(;)]TJ/F15 10.9091 Tf -290.076 -19.797 Td [(where)-357(\012)]TJ/F23 7.9701 Tf 39.687 3.959 Td [(k)]TJ 0 -7.015 Td [(j)]TJ/F15 10.9091 Tf 9.02 3.056 Td [(is)-357(the)-358(aggregate)-357(of)-358(\012)]TJ/F23 7.9701 Tf 100.235 3.959 Td [(k)]TJ/F15 10.9091 Tf 9.019 -3.959 Td [(corresp)-28(onding)-357(to)-358(the)-357(index)]TJ/F22 10.9091 Tf 132.69 0 Td [(j)]TJ/F25 10.9091 Tf 8.586 0 Td [(2)]TJ/F15 10.9091 Tf 10.742 0 Td [(\012)]TJ/F23 7.9701 Tf 7.879 3.959 Td [(k)]TJ/F20 7.9701 Tf 4.622 0 Td [(+1)]TJ/F15 10.9091 Tf 11.318 -3.959 Td [(.)]TJ/F22 10.9091 Tf 8.669 0 Td [(P)]TJ/F23 7.9701 Tf 8.519 3.959 Td [(k)]TJ/F15 10.9091 Tf 9.02 -3.959 Td [(is)-357(obtained)]TJ -360.006 -15.095 Td [(b)28(y)-333(applying)-334(to)]TJ 75.471 2.757 Td [(\026)]TJ/F22 10.9091 Tf -2.441 -2.757 Td [(P)]TJ/F23 7.9701 Tf 8.519 3.959 Td [(k)]TJ/F15 10.9091 Tf 8.756 -3.959 Td [(a)-333(smo)-28(other)]TJ/F22 10.9091 Tf 56.758 0 Td [(S)]TJ/F23 7.9701 Tf 7.318 3.959 Td [(k)]TJ/F25 10.9091 Tf 8.15 -3.959 Td [(2)]TJ/F34 10.9091 Tf 10.303 0 Td [(R)]TJ/F23 7.9701 Tf 7.879 3.959 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.406 Td [(k)]TJ/F26 7.9701 Tf 4.573 1.406 Td [(\002)]TJ/F23 7.9701 Tf 6.587 0 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.406 Td [(k)]TJ/F15 10.9091 Tf 5.071 -2.553 Td [(:)]TJ/F22 10.9091 Tf -29.64 -22.041 Td [(P)]TJ/F23 7.9701 Tf 8.519 4.504 Td [(k)]TJ/F15 10.9091 Tf 8.15 -4.504 Td [(=)]TJ/F22 10.9091 Tf 11.515 0 Td [(S)]TJ/F23 7.9701 Tf 7.318 4.504 Td [(k)]TJ/F15 10.9091 Tf 7.561 -1.746 Td [(\026)]TJ/F22 10.9091 Tf -2.441 -2.758 Td [(P)]TJ/F23 7.9701 Tf 8.519 4.504 Td [(k)]TJ/F22 10.9091 Tf 5.12 -4.504 Td [(;)]TJ/F15 10.9091 Tf -231.841 -22.041 Td [(in)-255(order)-255(to)-255(remo)27(v)28(e)-255(nonsmo)-28(oth)-255(comp)-28(onen)28(ts)-255(from)-255(the)-256(r)1(ange)-256(of)-255(the)-255(prolongator,)-271(and)-255(hence)]TJ 0 -13.549 Td [(to)-266(impro)27(v)28(e)-266(the)-267(con)28(v)28(ergence)-267(pr)1(op)-28(erties)-267(of)-266(the)-267(m)28(ulti-lev)28(el)-266(metho)-28(d)-267([)]TJ +/F15 10.9091 Tf -186.329 -35.866 Td [(The)-375(prolongator)]TJ/F22 10.9091 Tf 82.192 0 Td [(P)]TJ/F23 7.9701 Tf 8.518 3.959 Td [(k)]TJ/F15 10.9091 Tf 9.216 -3.959 Td [(is)-375(built)-376(starting)-375(from)-375(a)-376(ten)28(tativ)28(e)-376(prolongator)]TJ 222.868 2.758 Td [(\026)]TJ/F22 10.9091 Tf -2.441 -2.758 Td [(P)]TJ/F23 7.9701 Tf 8.519 3.959 Td [(k)]TJ/F25 10.9091 Tf 8.915 -3.959 Td [(2)]TJ/F34 10.9091 Tf 11.069 0 Td [(R)]TJ/F23 7.9701 Tf 7.878 3.959 Td [(n)]TJ/F24 5.9776 Tf 5.139 -1.406 Td [(k)]TJ/F26 7.9701 Tf 4.573 1.406 Td [(\002)]TJ/F23 7.9701 Tf 6.586 0 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.406 Td [(k)]TJ/F21 5.9776 Tf 4.075 0 Td [(+1)]TJ/F15 10.9091 Tf 10.24 -2.553 Td [(,)]TJ -409.421 -13.549 Td [(de\014ned)-333(as)]TJ 115.609 -14.79 Td [(\026)]TJ/F22 10.9091 Tf -2.442 -2.757 Td [(P)]TJ/F23 7.9701 Tf 8.519 4.504 Td [(k)]TJ/F15 10.9091 Tf 8.15 -4.504 Td [(=)-278(\050)-85(\026)]TJ/F22 10.9091 Tf 15.758 0 Td [(p)]TJ/F23 7.9701 Tf 5.489 4.504 Td [(k)]TJ 0 -7.201 Td [(ij)]TJ/F15 10.9091 Tf 7.265 2.697 Td [(\051)]TJ/F22 10.9091 Tf 4.242 0 Td [(;)]TJ/F15 10.9091 Tf 16.684 0 Td [(\026)]TJ/F22 10.9091 Tf -0.926 0 Td [(p)]TJ/F23 7.9701 Tf 5.489 4.504 Td [(k)]TJ 0 -7.201 Td [(ij)]TJ/F15 10.9091 Tf 10.295 2.697 Td [(=)]TJ/F28 10.9091 Tf 11.515 15.382 Td [(\032)]TJ/F15 10.9091 Tf 13.163 -8.325 Td [(1)-1913(if)]TJ/F22 10.9091 Tf 35.721 0 Td [(i)]TJ/F25 10.9091 Tf 6.788 0 Td [(2)]TJ/F15 10.9091 Tf 10.303 0 Td [(\012)]TJ/F23 7.9701 Tf 7.879 3.959 Td [(k)]TJ 0 -7.014 Td [(j)]TJ/F22 10.9091 Tf 5.12 3.055 Td [(;)]TJ/F15 10.9091 Tf -65.811 -14.089 Td [(0)-1913(otherwise)]TJ/F22 10.9091 Tf 71.266 0 Td [(;)]TJ +0 g 0 G +/F15 10.9091 Tf 108.435 7.032 Td [(\0504\051)]TJ +0 g 0 G + -398.511 -26.829 Td [(where)-357(\012)]TJ/F23 7.9701 Tf 39.687 3.959 Td [(k)]TJ 0 -7.015 Td [(j)]TJ/F15 10.9091 Tf 9.02 3.056 Td [(is)-357(the)-358(aggregate)-357(of)-358(\012)]TJ/F23 7.9701 Tf 100.235 3.959 Td [(k)]TJ/F15 10.9091 Tf 9.019 -3.959 Td [(corresp)-28(onding)-357(to)-358(the)-357(index)]TJ/F22 10.9091 Tf 132.69 0 Td [(j)]TJ/F25 10.9091 Tf 8.586 0 Td [(2)]TJ/F15 10.9091 Tf 10.742 0 Td [(\012)]TJ/F23 7.9701 Tf 7.879 3.959 Td [(k)]TJ/F20 7.9701 Tf 4.622 0 Td [(+1)]TJ/F15 10.9091 Tf 11.318 -3.959 Td [(.)]TJ/F22 10.9091 Tf 8.669 0 Td [(P)]TJ/F23 7.9701 Tf 8.519 3.959 Td [(k)]TJ/F15 10.9091 Tf 9.02 -3.959 Td [(is)-357(obtained)]TJ -360.006 -15.095 Td [(b)28(y)-333(applying)-334(to)]TJ 75.471 2.757 Td [(\026)]TJ/F22 10.9091 Tf -2.441 -2.757 Td [(P)]TJ/F23 7.9701 Tf 8.519 3.959 Td [(k)]TJ/F15 10.9091 Tf 8.756 -3.959 Td [(a)-333(smo)-28(other)]TJ/F22 10.9091 Tf 56.758 0 Td [(S)]TJ/F23 7.9701 Tf 7.318 3.959 Td [(k)]TJ/F25 10.9091 Tf 8.15 -3.959 Td [(2)]TJ/F34 10.9091 Tf 10.303 0 Td [(R)]TJ/F23 7.9701 Tf 7.879 3.959 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.406 Td [(k)]TJ/F26 7.9701 Tf 4.573 1.406 Td [(\002)]TJ/F23 7.9701 Tf 6.587 0 Td [(n)]TJ/F24 5.9776 Tf 5.138 -1.406 Td [(k)]TJ/F15 10.9091 Tf 5.071 -2.553 Td [(:)]TJ/F22 10.9091 Tf -29.64 -22.041 Td [(P)]TJ/F23 7.9701 Tf 8.519 4.504 Td [(k)]TJ/F15 10.9091 Tf 8.15 -4.504 Td [(=)]TJ/F22 10.9091 Tf 11.515 0 Td [(S)]TJ/F23 7.9701 Tf 7.318 4.504 Td [(k)]TJ/F15 10.9091 Tf 7.561 -1.746 Td [(\026)]TJ/F22 10.9091 Tf -2.441 -2.758 Td [(P)]TJ/F23 7.9701 Tf 8.519 4.504 Td [(k)]TJ/F22 10.9091 Tf 5.12 -4.504 Td [(;)]TJ/F15 10.9091 Tf -231.841 -22.041 Td [(in)-255(order)-255(to)-255(remo)27(v)28(e)-255(nonsmo)-28(oth)-255(comp)-28(onen)28(ts)-255(from)-255(the)-256(r)1(ange)-256(of)-255(the)-255(prolongator,)-271(and)-255(hence)]TJ 0 -13.549 Td [(to)-266(impro)27(v)28(e)-266(the)-267(con)28(v)28(ergence)-267(pr)1(op)-28(erties)-267(of)-266(the)-267(m)28(ulti-lev)28(el)-266(metho)-28(d)-267([)]TJ 1 0 0 rg 1 0 0 RG [(2)]TJ 0 g 0 G @@ -2044,7 +2048,7 @@ BT 0 g 0 G [(].)-422(A)-266(simple)-267(c)28(hoice)]TJ 0 -13.549 Td [(for)]TJ/F22 10.9091 Tf 16.697 0 Td [(S)]TJ/F23 7.9701 Tf 7.318 3.959 Td [(k)]TJ/F15 10.9091 Tf 8.756 -3.959 Td [(is)-333(the)-334(damp)-27(ed)-334(Jacobi)-333(smo)-28(other:)]TJ/F22 10.9091 Tf 118.068 -22.041 Td [(S)]TJ/F23 7.9701 Tf 7.318 4.505 Td [(k)]TJ/F15 10.9091 Tf 8.15 -4.505 Td [(=)]TJ/F22 10.9091 Tf 11.515 0 Td [(I)]TJ/F25 10.9091 Tf 8.076 0 Td [(\000)]TJ/F22 10.9091 Tf 10.909 0 Td [(!)]TJ/F23 7.9701 Tf 7.182 4.505 Td [(k)]TJ/F15 10.9091 Tf 5.119 -4.505 Td [(\050)]TJ/F22 10.9091 Tf 4.243 0 Td [(D)]TJ/F23 7.9701 Tf 9.335 4.505 Td [(k)]TJ/F15 10.9091 Tf 5.119 -4.505 Td [(\051)]TJ/F26 7.9701 Tf 4.243 4.505 Td [(\000)]TJ/F20 7.9701 Tf 6.586 0 Td [(1)]TJ/F22 10.9091 Tf 4.733 -4.505 Td [(A)]TJ/F23 7.9701 Tf 8.181 4.505 Td [(k)]TJ 0 -7.202 Td [(F)]TJ/F22 10.9091 Tf 7.034 2.697 Td [(;)]TJ/F15 10.9091 Tf -258.582 -22.04 Td [(where)]TJ/F22 10.9091 Tf 32.045 0 Td [(D)]TJ/F23 7.9701 Tf 9.335 3.958 Td [(k)]TJ/F15 10.9091 Tf 9.255 -3.958 Td [(is)-379(the)-379(diagonal)-379(matrix)-379(with)-379(the)-379(s)-1(ame)-379(diagonal)-379(en)28(tries)-379(as)]TJ/F22 10.9091 Tf 276.813 0 Td [(A)]TJ/F23 7.9701 Tf 8.181 3.958 Td [(k)]TJ/F15 10.9091 Tf 5.12 -3.958 Td [(,)]TJ/F22 10.9091 Tf 7.291 0 Td [(A)]TJ/F23 7.9701 Tf 8.182 3.958 Td [(k)]TJ 0 -7.191 Td [(F)]TJ/F15 10.9091 Tf 10.896 3.233 Td [(=)-354(\050)-14(\026)]TJ/F22 10.9091 Tf 16.59 0 Td [(a)]TJ/F23 7.9701 Tf 5.766 3.958 Td [(k)]TJ 0 -7.014 Td [(ij)]TJ/F15 10.9091 Tf 7.266 3.056 Td [(\051)-379(is)]TJ -396.74 -13.55 Td [(the)-333(\014ltered)-334(matrix)-333(de\014ned)-333(as)]TJ 48.968 -26.039 Td [(\026)]TJ/F22 10.9091 Tf -0.156 0 Td [(a)]TJ/F23 7.9701 Tf 5.766 4.505 Td [(k)]TJ 0 -7.202 Td [(ij)]TJ/F15 10.9091 Tf 10.296 2.697 Td [(=)]TJ/F28 10.9091 Tf 11.515 15.382 Td [(\032)]TJ/F22 10.9091 Tf 13.163 -8.324 Td [(a)]TJ/F23 7.9701 Tf 5.766 3.959 Td [(k)]TJ 0 -7.015 Td [(ij)]TJ/F15 10.9091 Tf 17.228 3.056 Td [(if)]TJ/F22 10.9091 Tf 10 0 Td [(j)]TJ/F25 10.9091 Tf 8.147 0 Td [(2)-278(N)]TJ/F23 7.9701 Tf 20.862 3.959 Td [(k)]TJ -1.608 -7.015 Td [(i)]TJ/F15 10.9091 Tf 6.728 3.056 Td [(\050)]TJ/F22 10.9091 Tf 4.242 0 Td [(\022)]TJ/F15 10.9091 Tf 5.424 0 Td [(\051)]TJ/F22 10.9091 Tf 4.243 0 Td [(;)]TJ/F15 10.9091 Tf -81.032 -14.09 Td [(0)-1608(otherwise)]TJ/F22 10.9091 Tf 67.934 0 Td [(;)]TJ/F15 10.9091 Tf 27.153 7.032 Td [(\050)]TJ/F22 10.9091 Tf 4.243 0 Td [(j)]TJ/F25 10.9091 Tf 8.147 0 Td [(6)]TJ/F15 10.9091 Tf 0 0 Td [(=)]TJ/F22 10.9091 Tf 11.515 0 Td [(i)]TJ/F15 10.9091 Tf 3.758 0 Td [(\051)]TJ/F22 10.9091 Tf 4.243 0 Td [(;)]TJ/F15 10.9091 Tf 26.822 0 Td [(\026)]TJ/F22 10.9091 Tf -0.156 0 Td [(a)]TJ/F23 7.9701 Tf 5.767 4.505 Td [(k)]TJ 0 -7.202 Td [(ii)]TJ/F15 10.9091 Tf 9.294 2.697 Td [(=)]TJ/F22 10.9091 Tf 11.516 0 Td [(a)]TJ/F23 7.9701 Tf 5.766 4.505 Td [(k)]TJ 0 -7.202 Td [(ii)]TJ/F25 10.9091 Tf 8.689 2.697 Td [(\000)]TJ/F28 10.9091 Tf 10.909 10.364 Td [(X)]TJ/F23 7.9701 Tf 1.202 -23.717 Td [(j)]TJ/F26 7.9701 Tf 3.884 0 Td [(6)]TJ/F20 7.9701 Tf 0 0 Td [(=)]TJ/F23 7.9701 Tf 6.586 0 Td [(i)]TJ/F15 10.9091 Tf 4.085 13.353 Td [(\050)]TJ/F22 10.9091 Tf 4.243 0 Td [(a)]TJ/F23 7.9701 Tf 5.766 4.505 Td [(k)]TJ 0 -7.202 Td [(ij)]TJ/F25 10.9091 Tf 9.69 2.697 Td [(\000)]TJ/F15 10.9091 Tf 11.065 0 Td [(\026)]TJ/F22 10.9091 Tf -0.156 0 Td [(a)]TJ/F23 7.9701 Tf 5.766 4.505 Td [(k)]TJ 0 -7.202 Td [(ij)]TJ/F15 10.9091 Tf 7.265 2.697 Td [(\051)]TJ/F22 10.9091 Tf 4.243 0 Td [(;)]TJ 0 g 0 G -/F15 10.9091 Tf 39.721 0 Td [(\0504\051)]TJ +/F15 10.9091 Tf 39.721 0 Td [(\0505\051)]TJ 0 g 0 G -398.512 -34.975 Td [(and)]TJ/F22 10.9091 Tf 20.68 0 Td [(!)]TJ/F23 7.9701 Tf 7.182 3.959 Td [(k)]TJ/F15 10.9091 Tf 8.224 -3.959 Td [(is)-285(an)-284(appro)28(ximation)-285(of)-284(4)]TJ/F22 10.9091 Tf 114.629 0 Td [(=)]TJ/F15 10.9091 Tf 5.455 0 Td [(\0503)]TJ/F22 10.9091 Tf 9.697 0 Td [(\032)]TJ/F23 7.9701 Tf 5.64 3.959 Td [(k)]TJ/F15 10.9091 Tf 5.12 -3.959 Td [(\051,)-294(where)]TJ/F22 10.9091 Tf 41.497 0 Td [(\032)]TJ/F23 7.9701 Tf 5.64 3.959 Td [(k)]TJ/F15 10.9091 Tf 8.224 -3.959 Td [(is)-285(the)-284(sp)-28(ectral)-285(r)1(adius)-285(of)-284(\050)]TJ/F22 10.9091 Tf 117.582 0 Td [(D)]TJ/F23 7.9701 Tf 9.335 3.959 Td [(k)]TJ/F15 10.9091 Tf 5.12 -3.959 Td [(\051)]TJ/F26 7.9701 Tf 4.242 3.959 Td [(\000)]TJ/F20 7.9701 Tf 6.587 0 Td [(1)]TJ/F22 10.9091 Tf 4.732 -3.959 Td [(A)]TJ/F23 7.9701 Tf 8.182 3.959 Td [(k)]TJ 0 -7.192 Td [(F)]TJ/F15 10.9091 Tf 10.138 3.233 Td [([)]TJ 1 0 0 rg 1 0 0 RG @@ -2065,7 +2069,7 @@ ET endstream endobj -368 0 obj +369 0 obj << /Length 7392 >> @@ -2116,7 +2120,7 @@ ET endstream endobj -381 0 obj +382 0 obj << /Length 8463 >> @@ -2188,7 +2192,7 @@ ET endstream endobj -400 0 obj +401 0 obj << /Length 9282 >> @@ -2430,7 +2434,7 @@ ET endstream endobj -413 0 obj +414 0 obj << /Length 7376 >> @@ -2478,7 +2482,7 @@ ET endstream endobj -421 0 obj +422 0 obj << /Length 3319 >> @@ -2508,19 +2512,19 @@ endobj /Type /ObjStm /N 100 /First 904 -/Length 13177 +/Length 13178 >> stream 296 0 297 152 298 301 299 456 300 618 301 773 302 925 303 1076 304 1226 305 1377 306 1528 311 1681 43 1735 308 1788 324 1881 317 2055 318 2207 319 2353 320 2505 321 2656 322 2811 326 2974 47 3028 327 3081 51 3138 323 3191 344 3388 342 3562 337 3708 338 3870 339 4033 340 4183 341 4334 346 4490 336 4544 348 4601 349 4655 350 4709 351 4763 343 4820 -359 4978 353 5144 354 5299 355 5451 356 5607 357 5758 361 5906 362 5960 55 6017 358 6070 -367 6280 365 6430 363 6576 364 6729 369 6881 366 6935 380 7119 371 7293 372 7447 373 7590 -374 7741 375 7888 376 8033 382 8177 59 8231 383 8284 384 8338 385 8392 386 8446 387 8500 -388 8554 379 8608 399 8727 397 8917 377 9063 378 9209 392 9359 393 9504 394 9648 395 9800 -396 9943 401 10088 389 10142 63 10199 398 10252 412 10371 403 10561 404 10712 405 10865 406 11012 -407 11155 408 11301 409 11445 410 11590 414 11736 411 11790 420 11883 418 12017 422 12163 402 12217 +359 4978 353 5144 354 5299 355 5451 356 5607 357 5758 361 5906 362 5960 363 6017 55 6074 +358 6127 368 6337 366 6487 364 6633 365 6786 370 6938 367 6992 381 7176 372 7350 373 7504 +374 7647 375 7798 376 7945 377 8090 383 8234 59 8288 384 8341 385 8395 386 8449 387 8503 +388 8557 389 8611 380 8665 400 8784 398 8974 378 9120 379 9266 393 9416 394 9561 395 9705 +396 9857 397 10000 402 10145 390 10199 63 10256 399 10309 413 10428 404 10618 405 10769 406 10922 +407 11069 408 11212 409 11358 410 11502 411 11647 415 11793 412 11847 421 11940 419 12074 423 12220 % 296 0 obj << /Type /Annot @@ -2841,6 +2845,10 @@ stream >> % 362 0 obj << +/D [359 0 R /XYZ 199.567 686.589 null] +>> +% 363 0 obj +<< /D [359 0 R /XYZ 135.211 489.815 null] >> % 55 0 obj @@ -2852,16 +2860,16 @@ stream /Font << /F15 136 0 R /F42 137 0 R /F22 195 0 R /F23 328 0 R /F25 329 0 R /F34 330 0 R /F24 333 0 R /F26 331 0 R /F21 334 0 R /F28 347 0 R /F20 332 0 R /F17 124 0 R >> /ProcSet [ /PDF /Text ] >> -% 367 0 obj +% 368 0 obj << /Type /Page -/Contents 368 0 R -/Resources 366 0 R +/Contents 369 0 R +/Resources 367 0 R /MediaBox [0 0 595.276 841.89] /Parent 352 0 R -/Annots [ 365 0 R 363 0 R 364 0 R ] +/Annots [ 366 0 R 364 0 R 365 0 R ] >> -% 365 0 obj +% 366 0 obj << /Type /Annot /Subtype /Link @@ -2869,7 +2877,7 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.4) >> >> -% 363 0 obj +% 364 0 obj << /Type /Annot /Subtype /Link @@ -2877,7 +2885,7 @@ stream /Rect [112.695 387.524 120.142 396.546] /A << /S /GoTo /D (cite.CAI_SARKIS) >> >> -% 364 0 obj +% 365 0 obj << /Type /Annot /Subtype /Link @@ -2885,25 +2893,25 @@ stream /Rect [231.213 358.304 247.145 369.993] /A << /S /GoTo /D (subsection.3.2) >> >> -% 369 0 obj +% 370 0 obj << -/D [367 0 R /XYZ 92.6 752.957 null] +/D [368 0 R /XYZ 92.6 752.957 null] >> -% 366 0 obj +% 367 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F22 195 0 R /F23 328 0 R /F26 331 0 R /F20 332 0 R /F25 329 0 R /F34 330 0 R /F24 333 0 R /F28 347 0 R >> /ProcSet [ /PDF /Text ] >> -% 380 0 obj +% 381 0 obj << /Type /Page -/Contents 381 0 R -/Resources 379 0 R +/Contents 382 0 R +/Resources 380 0 R /MediaBox [0 0 595.276 841.89] /Parent 352 0 R -/Annots [ 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R ] +/Annots [ 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R ] >> -% 371 0 obj +% 372 0 obj << /Type /Annot /Subtype /Link @@ -2911,7 +2919,7 @@ stream /Rect [453.726 664.789 466.627 673.811] /A << /S /GoTo /D (cite.PSBLASGUIDE) >> >> -% 372 0 obj +% 373 0 obj << /Type /Annot /Subtype /Link @@ -2919,7 +2927,7 @@ stream /Rect [440.223 507.39 447.67 519.079] /A << /S /GoTo /D (table.1) >> >> -% 373 0 obj +% 374 0 obj << /Type /Annot /Subtype /Link @@ -2927,7 +2935,7 @@ stream /Rect [272.428 389.103 288.36 400.793] /A << /S /GoTo /D (subsection.5.1) >> >> -% 374 0 obj +% 375 0 obj << /Type /Annot /Subtype /Link @@ -2935,7 +2943,7 @@ stream /Rect [434.839 375.554 442.287 387.244] /A << /S /GoTo /D (section.6) >> >> -% 375 0 obj +% 376 0 obj << /Type /Annot /Subtype /Link @@ -2943,7 +2951,7 @@ stream /Rect [480.279 375.554 487.726 387.244] /A << /S /GoTo /D (table.2) >> >> -% 376 0 obj +% 377 0 obj << /Type /Annot /Subtype /Link @@ -2951,53 +2959,53 @@ stream /Rect [489.37 375.554 496.817 387.244] /A << /S /GoTo /D (table.8) >> >> -% 382 0 obj +% 383 0 obj << -/D [380 0 R /XYZ 85.4 752.957 null] +/D [381 0 R /XYZ 85.4 752.957 null] >> % 59 0 obj << -/D [380 0 R /XYZ 86.4 715.095 null] ->> -% 383 0 obj -<< -/D [380 0 R /XYZ 86.4 645.168 null] +/D [381 0 R /XYZ 86.4 715.095 null] >> % 384 0 obj << -/D [380 0 R /XYZ 86.4 567.529 null] +/D [381 0 R /XYZ 86.4 645.168 null] >> % 385 0 obj << -/D [380 0 R /XYZ 86.4 464.913 null] +/D [381 0 R /XYZ 86.4 567.529 null] >> % 386 0 obj << -/D [380 0 R /XYZ 86.4 371.604 null] +/D [381 0 R /XYZ 86.4 464.913 null] >> % 387 0 obj << -/D [380 0 R /XYZ 86.4 231.205 null] +/D [381 0 R /XYZ 86.4 371.604 null] >> % 388 0 obj << -/D [380 0 R /XYZ 86.4 164.388 null] +/D [381 0 R /XYZ 86.4 231.205 null] >> -% 379 0 obj +% 389 0 obj +<< +/D [381 0 R /XYZ 86.4 164.388 null] +>> +% 380 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F17 124 0 R /F18 275 0 R /F45 225 0 R >> /ProcSet [ /PDF /Text ] >> -% 399 0 obj +% 400 0 obj << /Type /Page -/Contents 400 0 R -/Resources 398 0 R +/Contents 401 0 R +/Resources 399 0 R /MediaBox [0 0 595.276 841.89] /Parent 352 0 R -/Annots [ 397 0 R 377 0 R 378 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R ] +/Annots [ 398 0 R 378 0 R 379 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R ] >> -% 397 0 obj +% 398 0 obj << /Type /Annot /Subtype /Link @@ -3005,7 +3013,7 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.5) >> >> -% 377 0 obj +% 378 0 obj << /Type /Annot /Subtype /Link @@ -3013,7 +3021,7 @@ stream /Rect [323.557 687.47 331.004 699.159] /A << /S /GoTo /D (section.6) >> >> -% 378 0 obj +% 379 0 obj << /Type /Annot /Subtype /Link @@ -3021,7 +3029,7 @@ stream /Rect [252.847 673.92 268.778 685.61] /A << /S /GoTo /D (subsection.5.1) >> >> -% 392 0 obj +% 393 0 obj << /Type /Annot /Subtype /Link @@ -3029,7 +3037,7 @@ stream /Rect [424.929 458.375 432.377 467.943] /A << /S /GoTo /D (table.2) >> >> -% 393 0 obj +% 394 0 obj << /Type /Annot /Subtype /Link @@ -3037,7 +3045,7 @@ stream /Rect [434.02 458.375 441.467 467.943] /A << /S /GoTo /D (table.8) >> >> -% 394 0 obj +% 395 0 obj << /Type /Annot /Subtype /Link @@ -3045,7 +3053,7 @@ stream /Rect [279.665 325.418 295.597 338.319] /A << /S /GoTo /D (subsection.5.1) >> >> -% 395 0 obj +% 396 0 obj << /Type /Annot /Subtype /Link @@ -3053,7 +3061,7 @@ stream /Rect [239.739 172.6 247.186 184.29] /A << /S /GoTo /D (figure.2) >> >> -% 396 0 obj +% 397 0 obj << /Type /Annot /Subtype /Link @@ -3061,33 +3069,33 @@ stream /Rect [492.328 158.445 499.775 171.347] /A << /S /GoTo /D (table.1) >> >> -% 401 0 obj +% 402 0 obj << -/D [399 0 R /XYZ 92.6 752.957 null] +/D [400 0 R /XYZ 92.6 752.957 null] >> -% 389 0 obj +% 390 0 obj << -/D [399 0 R /XYZ 166.644 436.373 null] +/D [400 0 R /XYZ 166.644 436.373 null] >> % 63 0 obj << -/D [399 0 R /XYZ 93.6 211.121 null] +/D [400 0 R /XYZ 93.6 211.121 null] >> -% 398 0 obj +% 399 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F45 225 0 R /F44 175 0 R /F17 124 0 R >> /ProcSet [ /PDF /Text ] >> -% 412 0 obj +% 413 0 obj << /Type /Page -/Contents 413 0 R -/Resources 411 0 R +/Contents 414 0 R +/Resources 412 0 R /MediaBox [0 0 595.276 841.89] /Parent 352 0 R -/Annots [ 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R ] +/Annots [ 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R ] >> -% 403 0 obj +% 404 0 obj << /Type /Annot /Subtype /Link @@ -3095,7 +3103,7 @@ stream /Rect [404.565 605.568 420.497 618.47] /A << /S /GoTo /D (subsection.3.5) >> >> -% 404 0 obj +% 405 0 obj << /Type /Annot /Subtype /Link @@ -3103,7 +3111,7 @@ stream /Rect [464.571 581.197 477.472 590.22] /A << /S /GoTo /D (cite.PSBLASGUIDE) >> >> -% 405 0 obj +% 406 0 obj << /Type /Annot /Subtype /Link @@ -3111,7 +3119,7 @@ stream /Rect [397.562 537.822 405.009 550.724] /A << /S /GoTo /D (section.6) >> >> -% 406 0 obj +% 407 0 obj << /Type /Annot /Subtype /Link @@ -3119,7 +3127,7 @@ stream /Rect [492.4 497.781 499.847 509.47] /A << /S /GoTo /D (figure.3) >> >> -% 407 0 obj +% 408 0 obj << /Type /Annot /Subtype /Link @@ -3127,7 +3135,7 @@ stream /Rect [409.441 416.486 416.888 428.175] /A << /S /GoTo /D (figure.4) >> >> -% 408 0 obj +% 409 0 obj << /Type /Annot /Subtype /Link @@ -3135,7 +3143,7 @@ stream /Rect [402.463 348.74 409.91 360.429] /A << /S /GoTo /D (figure.3) >> >> -% 409 0 obj +% 410 0 obj << /Type /Annot /Subtype /Link @@ -3143,7 +3151,7 @@ stream /Rect [431.659 348.74 439.106 360.429] /A << /S /GoTo /D (figure.4) >> >> -% 410 0 obj +% 411 0 obj << /Type /Annot /Subtype /Link @@ -3151,25 +3159,25 @@ stream /Rect [178.322 321.641 185.769 333.331] /A << /S /GoTo /D (figure.5) >> >> -% 414 0 obj +% 415 0 obj << -/D [412 0 R /XYZ 85.4 752.957 null] +/D [413 0 R /XYZ 85.4 752.957 null] >> -% 411 0 obj +% 412 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F45 225 0 R >> /ProcSet [ /PDF /Text ] >> -% 420 0 obj +% 421 0 obj << /Type /Page -/Contents 421 0 R -/Resources 419 0 R +/Contents 422 0 R +/Resources 420 0 R /MediaBox [0 0 595.276 841.89] -/Parent 423 0 R -/Annots [ 418 0 R ] +/Parent 424 0 R +/Annots [ 419 0 R ] >> -% 418 0 obj +% 419 0 obj << /Type /Annot /Subtype /Link @@ -3177,18 +3185,14 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.5) >> >> -% 422 0 obj -<< -/D [420 0 R /XYZ 92.6 752.957 null] ->> -% 402 0 obj +% 423 0 obj << -/D [420 0 R /XYZ 141.32 103.443 null] +/D [421 0 R /XYZ 92.6 752.957 null] >> endstream endobj -427 0 obj +428 0 obj << /Length 3196 >> @@ -3233,7 +3237,7 @@ ET endstream endobj -433 0 obj +434 0 obj << /Length 6206 >> @@ -3272,7 +3276,7 @@ ET endstream endobj -439 0 obj +440 0 obj << /Length 1860 >> @@ -3302,7 +3306,7 @@ ET endstream endobj -451 0 obj +452 0 obj << /Length 7087 >> @@ -3355,7 +3359,7 @@ ET endstream endobj -463 0 obj +464 0 obj << /Length 7886 >> @@ -3426,7 +3430,7 @@ ET endstream endobj -480 0 obj +481 0 obj << /Length 2620 >> @@ -3459,7 +3463,7 @@ ET endstream endobj -485 0 obj +486 0 obj << /Length 3777 >> @@ -3624,7 +3628,7 @@ Q endstream endobj -490 0 obj +491 0 obj << /Length 10364 >> @@ -4012,7 +4016,7 @@ Q endstream endobj -495 0 obj +496 0 obj << /Length 6126 >> @@ -4213,7 +4217,7 @@ Q BT /F15 10.9091 Tf 697.221 704.029 Td [(Matrix)-233(used)-232(in)-233(computing)-233(the)-232(smo)-28(othed)]TJ 0 -13.549 Td [(prolongator:)-1734(\014ltered)-979(or)-978(un\014ltered)]TJ 0 -13.549 Td [(\050see)-333(\050)]TJ 0 0 1 rg 0 0 1 RG - [(4)]TJ + [(5)]TJ 0 g 0 G [(\051)-334(in)-333(Section)]TJ 0 0 1 rg 0 0 1 RG @@ -4273,7 +4277,7 @@ Q endstream endobj -501 0 obj +502 0 obj << /Length 9077 >> @@ -4556,7 +4560,7 @@ Q endstream endobj -505 0 obj +506 0 obj << /Length 4941 >> @@ -4771,7 +4775,7 @@ Q endstream endobj -511 0 obj +512 0 obj << /Length 7696 >> @@ -5025,7 +5029,7 @@ Q endstream endobj -516 0 obj +517 0 obj << /Length 6856 >> @@ -5283,7 +5287,7 @@ Q endstream endobj -526 0 obj +527 0 obj << /Length 3261 >> @@ -5328,7 +5332,7 @@ ET endstream endobj -533 0 obj +534 0 obj << /Length 2791 >> @@ -5366,68 +5370,72 @@ ET endstream endobj -424 0 obj +425 0 obj << /Type /ObjStm /N 100 -/First 892 -/Length 12259 +/First 891 +/Length 12163 >> stream -419 0 426 93 428 207 415 261 416 317 417 373 425 430 432 523 430 665 429 811 -434 962 67 1016 431 1069 438 1240 435 1382 436 1527 440 1674 71 1728 437 1781 450 1887 -448 2077 441 2223 442 2368 443 2513 444 2658 445 2803 446 2950 447 3095 452 3239 75 3293 -449 3346 462 3465 453 3655 454 3800 455 3944 456 4091 457 4235 458 4380 459 4524 460 4669 -464 4814 465 4868 466 4921 467 4975 468 5029 461 5083 479 5202 477 5336 481 5482 478 5536 -484 5629 486 5743 390 5797 483 5856 489 5962 487 6104 471 6250 491 6413 492 6467 488 6525 -494 6683 472 6849 473 6999 474 7151 475 7299 476 7449 496 7611 497 7665 493 7722 500 7867 -498 8001 502 8147 470 8201 499 8260 504 8379 506 8493 507 8547 503 8606 510 8738 508 8872 -512 9018 469 9072 509 9130 515 9249 517 9363 391 9417 514 9472 525 9604 523 9778 518 9924 -519 10076 520 10228 521 10382 522 10536 527 10683 79 10737 524 10790 532 10909 528 11059 529 11213 -% 419 0 obj +403 0 420 56 427 149 429 263 416 317 417 373 418 429 426 486 433 579 431 721 +430 867 435 1018 67 1072 432 1125 439 1296 436 1438 437 1583 441 1730 71 1784 438 1837 +451 1943 449 2133 442 2279 443 2424 444 2569 445 2714 446 2859 447 3006 448 3151 453 3295 +75 3349 450 3402 463 3521 454 3711 455 3856 456 4000 457 4147 458 4291 459 4436 460 4580 +461 4725 465 4870 466 4924 467 4977 468 5031 469 5085 462 5139 480 5258 478 5392 482 5538 +479 5592 485 5685 487 5799 391 5853 484 5912 490 6018 488 6160 472 6306 492 6469 493 6523 +489 6581 495 6739 473 6905 474 7055 475 7207 476 7355 477 7505 497 7667 498 7721 494 7778 +501 7923 499 8057 503 8203 471 8257 500 8315 505 8434 507 8548 508 8602 504 8661 511 8793 +509 8927 513 9073 470 9127 510 9185 516 9304 518 9418 392 9472 515 9531 526 9663 524 9837 +519 9983 520 10135 521 10287 522 10441 523 10595 528 10742 79 10796 525 10849 533 10968 529 11118 +% 403 0 obj +<< +/D [421 0 R /XYZ 141.32 103.443 null] +>> +% 420 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F45 225 0 R >> /ProcSet [ /PDF /Text ] >> -% 426 0 obj +% 427 0 obj << /Type /Page -/Contents 427 0 R -/Resources 425 0 R +/Contents 428 0 R +/Resources 426 0 R /MediaBox [0 0 595.276 841.89] -/Parent 423 0 R ->> -% 428 0 obj -<< -/D [426 0 R /XYZ 85.4 752.957 null] +/Parent 424 0 R >> -% 415 0 obj +% 429 0 obj << -/D [426 0 R /XYZ 230.08 568.121 null] +/D [427 0 R /XYZ 85.4 752.957 null] >> % 416 0 obj << -/D [426 0 R /XYZ 230.08 340.449 null] +/D [427 0 R /XYZ 230.08 568.121 null] >> % 417 0 obj << -/D [426 0 R /XYZ 211.883 170.338 null] +/D [427 0 R /XYZ 230.08 340.449 null] +>> +% 418 0 obj +<< +/D [427 0 R /XYZ 211.883 170.338 null] >> -% 425 0 obj +% 426 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F45 225 0 R >> /ProcSet [ /PDF /Text ] >> -% 432 0 obj +% 433 0 obj << /Type /Page -/Contents 433 0 R -/Resources 431 0 R +/Contents 434 0 R +/Resources 432 0 R /MediaBox [0 0 595.276 841.89] -/Parent 423 0 R -/Annots [ 430 0 R 429 0 R ] +/Parent 424 0 R +/Annots [ 431 0 R 430 0 R ] >> -% 430 0 obj +% 431 0 obj << /Type /Annot /Subtype /Link @@ -5435,7 +5443,7 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.6) >> >> -% 429 0 obj +% 430 0 obj << /Type /Annot /Subtype /Link @@ -5443,29 +5451,29 @@ stream /Rect [483.843 382.76 499.775 395.662] /A << /S /GoTo /D (subsection.6.2) >> >> -% 434 0 obj +% 435 0 obj << -/D [432 0 R /XYZ 92.6 752.957 null] +/D [433 0 R /XYZ 92.6 752.957 null] >> % 67 0 obj << -/D [432 0 R /XYZ 93.6 715.095 null] +/D [433 0 R /XYZ 93.6 715.095 null] >> -% 431 0 obj +% 432 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F17 124 0 R /F45 225 0 R /F25 329 0 R /F18 275 0 R /F22 195 0 R /F26 331 0 R /F20 332 0 R >> /ProcSet [ /PDF /Text ] >> -% 438 0 obj +% 439 0 obj << /Type /Page -/Contents 439 0 R -/Resources 437 0 R +/Contents 440 0 R +/Resources 438 0 R /MediaBox [0 0 595.276 841.89] -/Parent 423 0 R -/Annots [ 435 0 R 436 0 R ] +/Parent 424 0 R +/Annots [ 436 0 R 437 0 R ] >> -% 435 0 obj +% 436 0 obj << /Type /Annot /Subtype /Link @@ -5473,7 +5481,7 @@ stream /Rect [443.652 576.211 451.099 589.844] /A << /S /GoTo /D (table.1) >> >> -% 436 0 obj +% 437 0 obj << /Type /Annot /Subtype /Link @@ -5481,29 +5489,29 @@ stream /Rect [395.046 535.563 402.493 549.196] /A << /S /GoTo /D (section.8) >> >> -% 440 0 obj +% 441 0 obj << -/D [438 0 R /XYZ 85.4 752.957 null] +/D [439 0 R /XYZ 85.4 752.957 null] >> % 71 0 obj << -/D [438 0 R /XYZ 86.4 715.095 null] +/D [439 0 R /XYZ 86.4 715.095 null] >> -% 437 0 obj +% 438 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F17 124 0 R /F45 225 0 R >> /ProcSet [ /PDF /Text ] >> -% 450 0 obj +% 451 0 obj << /Type /Page -/Contents 451 0 R -/Resources 449 0 R +/Contents 452 0 R +/Resources 450 0 R /MediaBox [0 0 595.276 841.89] -/Parent 423 0 R -/Annots [ 448 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R ] +/Parent 424 0 R +/Annots [ 449 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R ] >> -% 448 0 obj +% 449 0 obj << /Type /Annot /Subtype /Link @@ -5511,7 +5519,7 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.6) >> >> -% 441 0 obj +% 442 0 obj << /Type /Annot /Subtype /Link @@ -5519,7 +5527,7 @@ stream /Rect [306.337 563.986 313.784 577.619] /A << /S /GoTo /D (table.2) >> >> -% 442 0 obj +% 443 0 obj << /Type /Annot /Subtype /Link @@ -5527,7 +5535,7 @@ stream /Rect [315.428 563.986 322.875 577.619] /A << /S /GoTo /D (table.8) >> >> -% 443 0 obj +% 444 0 obj << /Type /Annot /Subtype /Link @@ -5535,7 +5543,7 @@ stream /Rect [376.234 511.733 383.681 523.423] /A << /S /GoTo /D (table.2) >> >> -% 444 0 obj +% 445 0 obj << /Type /Annot /Subtype /Link @@ -5543,7 +5551,7 @@ stream /Rect [385.325 511.733 392.772 523.423] /A << /S /GoTo /D (table.8) >> >> -% 445 0 obj +% 446 0 obj << /Type /Annot /Subtype /Link @@ -5551,7 +5559,7 @@ stream /Rect [402.247 469.142 409.694 482.775] /A << /S /GoTo /D (section.8) >> >> -% 446 0 obj +% 447 0 obj << /Type /Annot /Subtype /Link @@ -5559,7 +5567,7 @@ stream /Rect [246.822 387.847 254.269 402.086] /A << /S /GoTo /D (table.2) >> >> -% 447 0 obj +% 448 0 obj << /Type /Annot /Subtype /Link @@ -5567,29 +5575,29 @@ stream /Rect [255.913 387.847 263.36 402.086] /A << /S /GoTo /D (table.8) >> >> -% 452 0 obj +% 453 0 obj << -/D [450 0 R /XYZ 92.6 752.957 null] +/D [451 0 R /XYZ 92.6 752.957 null] >> % 75 0 obj << -/D [450 0 R /XYZ 93.6 715.095 null] +/D [451 0 R /XYZ 93.6 715.095 null] >> -% 449 0 obj +% 450 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F17 124 0 R /F45 225 0 R /F18 275 0 R >> /ProcSet [ /PDF /Text ] >> -% 462 0 obj +% 463 0 obj << /Type /Page -/Contents 463 0 R -/Resources 461 0 R +/Contents 464 0 R +/Resources 462 0 R /MediaBox [0 0 595.276 841.89] -/Parent 423 0 R -/Annots [ 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R ] +/Parent 424 0 R +/Annots [ 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R ] >> -% 453 0 obj +% 454 0 obj << /Type /Annot /Subtype /Link @@ -5597,7 +5605,7 @@ stream /Rect [171.802 538.429 179.249 550.118] /A << /S /GoTo /D (table.2) >> >> -% 454 0 obj +% 455 0 obj << /Type /Annot /Subtype /Link @@ -5605,7 +5613,7 @@ stream /Rect [180.892 538.429 188.34 550.118] /A << /S /GoTo /D (table.8) >> >> -% 455 0 obj +% 456 0 obj << /Type /Annot /Subtype /Link @@ -5613,7 +5621,7 @@ stream /Rect [158.797 527.001 166.245 536.569] /A << /S /GoTo /D (section.4) >> >> -% 456 0 obj +% 457 0 obj << /Type /Annot /Subtype /Link @@ -5621,7 +5629,7 @@ stream /Rect [438.34 483.626 445.787 496.527] /A << /S /GoTo /D (table.7) >> >> -% 457 0 obj +% 458 0 obj << /Type /Annot /Subtype /Link @@ -5629,7 +5637,7 @@ stream /Rect [447.431 483.626 454.878 496.527] /A << /S /GoTo /D (table.8) >> >> -% 458 0 obj +% 459 0 obj << /Type /Annot /Subtype /Link @@ -5637,7 +5645,7 @@ stream /Rect [285.485 442.978 292.932 455.88] /A << /S /GoTo /D (table.7) >> >> -% 459 0 obj +% 460 0 obj << /Type /Annot /Subtype /Link @@ -5645,7 +5653,7 @@ stream /Rect [246.252 361.683 253.699 374.585] /A << /S /GoTo /D (table.7) >> >> -% 460 0 obj +% 461 0 obj << /Type /Annot /Subtype /Link @@ -5653,41 +5661,41 @@ stream /Rect [449.707 253.289 457.154 266.191] /A << /S /GoTo /D (table.5) >> >> -% 464 0 obj -<< -/D [462 0 R /XYZ 85.4 752.957 null] ->> % 465 0 obj << -/D [462 0 R /XYZ 86.4 671.48 null] +/D [463 0 R /XYZ 85.4 752.957 null] >> % 466 0 obj << -/D [462 0 R /XYZ 86.4 649.487 null] +/D [463 0 R /XYZ 86.4 671.48 null] >> % 467 0 obj << -/D [462 0 R /XYZ 86.4 627.495 null] +/D [463 0 R /XYZ 86.4 649.487 null] >> % 468 0 obj << -/D [462 0 R /XYZ 86.4 591.347 null] +/D [463 0 R /XYZ 86.4 627.495 null] >> -% 461 0 obj +% 469 0 obj +<< +/D [463 0 R /XYZ 86.4 591.347 null] +>> +% 462 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F44 175 0 R /F45 225 0 R /F18 275 0 R >> /ProcSet [ /PDF /Text ] >> -% 479 0 obj +% 480 0 obj << /Type /Page -/Contents 480 0 R -/Resources 478 0 R +/Contents 481 0 R +/Resources 479 0 R /MediaBox [0 0 595.276 841.89] -/Parent 482 0 R -/Annots [ 477 0 R ] +/Parent 483 0 R +/Annots [ 478 0 R ] >> -% 477 0 obj +% 478 0 obj << /Type /Annot /Subtype /Link @@ -5695,46 +5703,46 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.6) >> >> -% 481 0 obj +% 482 0 obj << -/D [479 0 R /XYZ 92.6 752.957 null] +/D [480 0 R /XYZ 92.6 752.957 null] >> -% 478 0 obj +% 479 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F18 275 0 R >> /ProcSet [ /PDF /Text ] >> -% 484 0 obj +% 485 0 obj << /Type /Page -/Contents 485 0 R -/Resources 483 0 R +/Contents 486 0 R +/Resources 484 0 R /MediaBox [0 0 595.276 841.89] -/Parent 482 0 R +/Parent 483 0 R >> -% 486 0 obj +% 487 0 obj << -/D [484 0 R /XYZ 85.4 752.957 null] +/D [485 0 R /XYZ 85.4 752.957 null] >> -% 390 0 obj +% 391 0 obj << -/D [484 0 R /XYZ -3855.021 592.732 null] +/D [485 0 R /XYZ -3855.021 592.732 null] >> -% 483 0 obj +% 484 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F45 225 0 R /F25 329 0 R >> /ProcSet [ /PDF /Text ] >> -% 489 0 obj +% 490 0 obj << /Type /Page -/Contents 490 0 R -/Resources 488 0 R +/Contents 491 0 R +/Resources 489 0 R /MediaBox [0 0 595.276 841.89] -/Parent 482 0 R -/Annots [ 487 0 R 471 0 R ] +/Parent 483 0 R +/Annots [ 488 0 R 472 0 R ] >> -% 487 0 obj +% 488 0 obj << /Type /Annot /Subtype /Link @@ -5742,7 +5750,7 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.6) >> >> -% 471 0 obj +% 472 0 obj << /Type /Annot /Subtype /Link @@ -5750,29 +5758,29 @@ stream /Rect [378.191 560.558 387.214 574.456] /A << /S /GoTo /D (cite.VANEK_MANDEL_BREZINA) >> >> -% 491 0 obj +% 492 0 obj << -/D [489 0 R /XYZ 92.6 752.957 null] +/D [490 0 R /XYZ 92.6 752.957 null] >> -% 492 0 obj +% 493 0 obj << -/D [489 0 R /XYZ 489.543 4405.505 null] +/D [490 0 R /XYZ 489.684 4405.505 null] >> -% 488 0 obj +% 489 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F45 225 0 R /F22 195 0 R /F25 329 0 R /F21 334 0 R /F23 328 0 R /F44 175 0 R >> /ProcSet [ /PDF /Text ] >> -% 494 0 obj +% 495 0 obj << /Type /Page -/Contents 495 0 R -/Resources 493 0 R +/Contents 496 0 R +/Resources 494 0 R /MediaBox [0 0 595.276 841.89] -/Parent 482 0 R -/Annots [ 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R ] +/Parent 483 0 R +/Annots [ 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R ] >> -% 472 0 obj +% 473 0 obj << /Type /Annot /Subtype /Link @@ -5780,7 +5788,7 @@ stream /Rect [305.333 237.711 318.234 246.154] /A << /S /GoTo /D (equation.4.3) >> >> -% 473 0 obj +% 474 0 obj << /Type /Annot /Subtype /Link @@ -5788,15 +5796,15 @@ stream /Rect [305.333 166.335 318.234 183.263] /A << /S /GoTo /D (subsection.4.2) >> >> -% 474 0 obj +% 475 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [249.4 276.931 263.639 285.374] -/A << /S /GoTo /D (equation.4.4) >> +/A << /S /GoTo /D (equation.4.5) >> >> -% 475 0 obj +% 476 0 obj << /Type /Annot /Subtype /Link @@ -5804,7 +5812,7 @@ stream /Rect [249.4 204.203 263.639 221.132] /A << /S /GoTo /D (subsection.4.2) >> >> -% 476 0 obj +% 477 0 obj << /Type /Annot /Subtype /Link @@ -5812,29 +5820,29 @@ stream /Rect [239.517 367.769 248.54 381.667] /A << /S /GoTo /D (cite.VANEK_MANDEL_BREZINA) >> >> -% 496 0 obj +% 497 0 obj << -/D [494 0 R /XYZ 85.4 752.957 null] +/D [495 0 R /XYZ 85.4 752.957 null] >> -% 497 0 obj +% 498 0 obj << -/D [494 0 R /XYZ 204.914 540.899 null] +/D [495 0 R /XYZ 204.945 540.899 null] >> -% 493 0 obj +% 494 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F45 225 0 R /F18 275 0 R /F25 329 0 R /F22 195 0 R /F44 175 0 R >> /ProcSet [ /PDF /Text ] >> -% 500 0 obj +% 501 0 obj << /Type /Page -/Contents 501 0 R -/Resources 499 0 R +/Contents 502 0 R +/Resources 500 0 R /MediaBox [0 0 595.276 841.89] -/Parent 482 0 R -/Annots [ 498 0 R ] +/Parent 483 0 R +/Annots [ 499 0 R ] >> -% 498 0 obj +% 499 0 obj << /Type /Annot /Subtype /Link @@ -5842,50 +5850,50 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.6) >> >> -% 502 0 obj +% 503 0 obj << -/D [500 0 R /XYZ 92.6 752.957 null] +/D [501 0 R /XYZ 92.6 752.957 null] >> -% 470 0 obj +% 471 0 obj << -/D [500 0 R /XYZ -3611.905 275.875 null] +/D [501 0 R /XYZ 468.547 4356.566 null] >> -% 499 0 obj +% 500 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F45 225 0 R /F22 195 0 R /F44 175 0 R >> /ProcSet [ /PDF /Text ] >> -% 504 0 obj +% 505 0 obj << /Type /Page -/Contents 505 0 R -/Resources 503 0 R +/Contents 506 0 R +/Resources 504 0 R /MediaBox [0 0 595.276 841.89] -/Parent 482 0 R +/Parent 483 0 R >> -% 506 0 obj +% 507 0 obj << -/D [504 0 R /XYZ 85.4 752.957 null] +/D [505 0 R /XYZ 85.4 752.957 null] >> -% 507 0 obj +% 508 0 obj << -/D [504 0 R /XYZ -3834.398 589.839 null] +/D [505 0 R /XYZ -3834.398 589.839 null] >> -% 503 0 obj +% 504 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F45 225 0 R /F22 195 0 R /F25 329 0 R /F18 275 0 R >> /ProcSet [ /PDF /Text ] >> -% 510 0 obj +% 511 0 obj << /Type /Page -/Contents 511 0 R -/Resources 509 0 R +/Contents 512 0 R +/Resources 510 0 R /MediaBox [0 0 595.276 841.89] -/Parent 513 0 R -/Annots [ 508 0 R ] +/Parent 514 0 R +/Annots [ 509 0 R ] >> -% 508 0 obj +% 509 0 obj << /Type /Annot /Subtype /Link @@ -5893,50 +5901,50 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.6) >> >> -% 512 0 obj +% 513 0 obj << -/D [510 0 R /XYZ 92.6 752.957 null] +/D [511 0 R /XYZ 92.6 752.957 null] >> -% 469 0 obj +% 470 0 obj << -/D [510 0 R /XYZ 441.894 4328.445 null] +/D [511 0 R /XYZ 441.897 4328.445 null] >> -% 509 0 obj +% 510 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F45 225 0 R /F22 195 0 R /F25 329 0 R >> /ProcSet [ /PDF /Text ] >> -% 515 0 obj +% 516 0 obj << /Type /Page -/Contents 516 0 R -/Resources 514 0 R +/Contents 517 0 R +/Resources 515 0 R /MediaBox [0 0 595.276 841.89] -/Parent 513 0 R +/Parent 514 0 R >> -% 517 0 obj +% 518 0 obj << -/D [515 0 R /XYZ 85.4 752.957 null] +/D [516 0 R /XYZ 85.4 752.957 null] >> -% 391 0 obj +% 392 0 obj << -/D [515 0 R /XYZ 191.4 615.536 null] +/D [516 0 R /XYZ -3888.794 615.536 null] >> -% 514 0 obj +% 515 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F45 225 0 R /F25 329 0 R /F22 195 0 R /F18 275 0 R >> /ProcSet [ /PDF /Text ] >> -% 525 0 obj +% 526 0 obj << /Type /Page -/Contents 526 0 R -/Resources 524 0 R +/Contents 527 0 R +/Resources 525 0 R /MediaBox [0 0 595.276 841.89] -/Parent 513 0 R -/Annots [ 523 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R ] +/Parent 514 0 R +/Annots [ 524 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R ] >> -% 523 0 obj +% 524 0 obj << /Type /Annot /Subtype /Link @@ -5944,7 +5952,7 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.6) >> >> -% 518 0 obj +% 519 0 obj << /Type /Annot /Subtype /Link @@ -5952,7 +5960,7 @@ stream /Rect [382.674 640.765 398.606 653.666] /A << /S /GoTo /D (subsection.6.4) >> >> -% 519 0 obj +% 520 0 obj << /Type /Annot /Subtype /Link @@ -5960,7 +5968,7 @@ stream /Rect [421.122 640.765 437.054 653.666] /A << /S /GoTo /D (subsection.6.5) >> >> -% 520 0 obj +% 521 0 obj << /Type /Annot /Subtype /Link @@ -5968,7 +5976,7 @@ stream /Rect [364.686 526.079 377.588 535.102] /A << /S /GoTo /D (cite.PSBLASGUIDE) >> >> -% 521 0 obj +% 522 0 obj << /Type /Annot /Subtype /Link @@ -5976,7 +5984,7 @@ stream /Rect [199.125 485.431 212.027 494.454] /A << /S /GoTo /D (cite.PSBLASGUIDE) >> >> -% 522 0 obj +% 523 0 obj << /Type /Annot /Subtype /Link @@ -5984,48 +5992,40 @@ stream /Rect [402.247 454.268 409.694 467.901] /A << /S /GoTo /D (section.8) >> >> -% 527 0 obj +% 528 0 obj << -/D [525 0 R /XYZ 92.6 752.957 null] +/D [526 0 R /XYZ 92.6 752.957 null] >> % 79 0 obj << -/D [525 0 R /XYZ 93.6 715.095 null] +/D [526 0 R /XYZ 93.6 715.095 null] >> -% 524 0 obj +% 525 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F17 124 0 R /F45 225 0 R /F18 275 0 R >> /ProcSet [ /PDF /Text ] >> -% 532 0 obj +% 533 0 obj << /Type /Page -/Contents 533 0 R -/Resources 531 0 R +/Contents 534 0 R +/Resources 532 0 R /MediaBox [0 0 595.276 841.89] -/Parent 513 0 R -/Annots [ 528 0 R 529 0 R 530 0 R ] ->> -% 528 0 obj -<< -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[0 1 0] -/Rect [357.486 526.079 370.387 535.102] -/A << /S /GoTo /D (cite.PSBLASGUIDE) >> +/Parent 514 0 R +/Annots [ 529 0 R 530 0 R 531 0 R ] >> % 529 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[0 1 0] -/Rect [191.925 485.431 204.826 494.454] +/Rect [357.486 526.079 370.387 535.102] /A << /S /GoTo /D (cite.PSBLASGUIDE) >> >> endstream endobj -543 0 obj +544 0 obj << /Length 3054 >> @@ -6070,7 +6070,7 @@ ET endstream endobj -548 0 obj +549 0 obj << /Length 8513 >> @@ -6138,7 +6138,7 @@ ET endstream endobj -554 0 obj +555 0 obj << /Length 1281 >> @@ -6167,7 +6167,7 @@ ET endstream endobj -560 0 obj +561 0 obj << /Length 2148 >> @@ -6193,7 +6193,7 @@ ET endstream endobj -567 0 obj +568 0 obj << /Length 7499 >> @@ -6238,7 +6238,7 @@ ET endstream endobj -571 0 obj +572 0 obj << /Length 1207 >> @@ -6256,7 +6256,7 @@ ET endstream endobj -577 0 obj +578 0 obj << /Length 1804 >> @@ -6279,7 +6279,7 @@ ET endstream endobj -581 0 obj +582 0 obj << /Length 4176 >> @@ -6298,7 +6298,7 @@ ET endstream endobj -585 0 obj +586 0 obj << /Length 6410 >> @@ -6358,7 +6358,7 @@ ET endstream endobj -590 0 obj +591 0 obj << /Length 7114 >> @@ -6436,7 +6436,7 @@ ET endstream endobj -609 0 obj +610 0 obj << /Length1 2121 /Length2 17358 @@ -6598,219 +6598,63 @@ M 7)fe( ZB,֑iCGnE4p -L-tMq ʀ`hJ xbdZv* m܎\.8d/*.moz6T0[OOCZ;Csh1i߬*O/m5~INNFoSQ[)71neHZހ]P@vi$n˫\ ʤ@oHV!%aI5C'~/[c|I`e:BeQfdX!8] endstream endobj -611 0 obj -<< -/Length1 2163 -/Length2 15247 -/Length3 0 -/Length 17410 ->> -stream -%!PS-AdobeFont-1.0: CMBX12 003.002 -%%Title: CMBX12 -%Version: 003.002 -%%CreationDate: Mon Jul 13 16:17:00 2009 -%%Creator: David M. Jones -%Copyright: Copyright (c) 1997, 2009 American Mathematical Society -%Copyright: (), with Reserved Font Name CMBX12. -% This Font Software is licensed under the SIL Open Font License, Version 1.1. -% This license is in the accompanying file OFL.txt, and is also -% available with a FAQ at: http://scripts.sil.org/OFL. -%%EndComments -FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup -/UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse -{save true}{false}ifelse}{false}ifelse -11 dict begin -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def -/FontName /ZNEEDW+CMBX12 def -/FontBBox {-53 -251 1139 750 }readonly def -/PaintType 0 def -/FontInfo 9 dict dup begin -/version (003.002) readonly def -/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def -/FullName (CMBX12) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Bold) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 76 /L put -dup 77 /M put -dup 79 /O put -dup 80 /P put -dup 82 /R put -dup 83 /S put -dup 85 /U put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 56 /eight put -dup 102 /f put -dup 12 /fi put -dup 53 /five put -dup 52 /four put -dup 103 /g put -dup 104 /h put -dup 45 /hyphen put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 49 /one put -dup 112 /p put -dup 46 /period put -dup 113 /q put -dup 39 /quoteright put -dup 114 /r put -dup 115 /s put -dup 55 /seven put -dup 54 /six put -dup 116 /t put -dup 51 /three put -dup 50 /two put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -readonly def -currentdict end -currentfile eexec -oc;jAw-=%W)-{ru)rAE(@{빴Q|_R -ϤA -T@|q|VkJ%qu8PwGxŪ̆Q6K -U\%b"t-*xJ+ -}3{Z2zݬT2s$Z&{BJ{Jf^ַ>aq4!<_CцcQ%BlS71_ -sQzԜr?ktP2Òl(?69~'@2bt[{ax 7}Gn[TY>T#a1h!;`WƮk>Kj̱JzNc?^<@ qTud[eюj:JnK#2S[ŝBb?̬Mo7aa'gP:δѩ҈ dBd|IH^wMe#DD13W.J.6׮r(N #>Zjhɵ+Uw -$\WN.C(V\N¸3A?l_sMP yfSyֿb`9upPȐNur)L=uhՂD١Pԋ^} --zU*3~HwzQ:.cxv(P}F>48zeU+Jk <>,H~^U>~~)9G-_+ԇ2miΝ1r>Z?ώ8PZm#meDPњ69v=hE_X(yN(9d5p7LZC~ld1:/ g!, -}Q+93V{ QlG 7!;yq+ JA vj/rڜZP)4f+OpX_t~ 5[RZ$ҹ=#e@K*WEt_-J bΣZdh>xNpsGLOh>o련J;J+\m -J6km9"N `D[ h6w{Ac<=ޮv}PC*|sAחfK+1!Sn~#_*]\i!Jiq˘mJ K fy*S}iGV6wa$mv<zZQ^L0NRq!*7uLO=b~_J CI?<5 T zs}uL`M؀"7K 8yO {|v`).D3K$ ,3sÝDRT c2쑃%yD\MS9HQ՝rfG^\55#v[Yϴ)KS^~nMX,8&7a d$ݕ ^t/WyϿ4QK{)=WDd>oeZpٕi-e@PLb|#p"6KLPXzbZc})%LKfO2ݮ (NԴU-eru RyTkl>'H 9т-)u -u+ld4zcLsTJ[:v?WNM* NiLffF/? ̔o_a! Bt]z\ޔR/r4MFwe5']ZPp׶r?PaL'- -c3G}T'ڡn#^>Ҡ'-ހFwMOTDsJQ{ T޾2VNsҎ%Bh$,>oK"Hϯ 2BU7'J(Ǜc1PIݐ.lQjF%jP -1zb2ɮWM+mKf,"/3~į;7/7=o-R%nJB@n6A0hRF9T {(&$߅:hMj %FVڈGv?`S::JepR̶9y?O_4:╱bEV]1Vb,"KoF0dba̟f4G^̬k({: -]-eJbc?hs+΢_sS,atyir%F3gދ&M}ۨ3Dkh`\rud>;iA_ -oF_љckNԋn`v)2ۙ$# 6{⮶\FvUW l -%x[gj6~C "^klCy%)%nWFO/My~ZqiI$CT*x])it4ZV]m剁VO)gi -%-JUƠ[fTX7/.cU,h78M4 z9:̳jmrvP# >bx_Løğ y5R@/{fQC}d~r!4ѐfPo퀿M+^',6_/W{h/њjS}Jz sնj ޳~zL{qA\Rh$):zNSJLyj^Ĕǒ)T~KZAP0JP~(>~9&åv^")X5=hN҂aNز%1v1gv?467H!NjO4پb夹tFy&{wQ[+ZJq -+@ mn,jMnEfI m RGUY8šNK:]ĤB!N?J'A.k{c㣆+/lB~z- NWWcr酉?V,d\$;tTR%M8DLsY{D#4 D{a\j;$ndʟ'KE 'p a_C1daEE4"<[ɬ}77%غk/2Ik'wblZqq@`C,6|U[2ǩ{{_W{l[(Eㅐ&K!.0t)f7lnMwX< | w2#:|м6ޡ4Hkr~IEmvb,[xY@rL'3:`A7C~X+_显R#GAVt]Dd ! 0*uzbrYN%gUX&h͈6OW2^zG iNΫyf_S">.g`B6G -BdXXE}텅eW_llQ6ioF<3ԙZN%Q^w݃{&E:k= BI| -~ڛfKikx zm 3ٳ~mk -R-rHsډZ嬪.]]Mmјrx{%u_p[ -5~`31>pajdoT&]J[[@ǿ&#F8i ^9<we+-lBdv>B2p["j FSoa9"1ܟ`IC"9²xG@,ty -ďuo1H?$YM;oia=ۓe%H-+XH -"'$wfS"o3"fŕ -?JЂ.~e/@CowK*VeMU&~7;V^"&%~޷$6v%? "1(ʲv#Z)H2A{*5a4h+`KPY#LDE#@]8.| qML$ZMgurB2Y {rqf^grB0y7J,/(^uI7L5f8G ;-1mg%&E0#3i; "m_f9NA?~!5mK~F7 /*-xމ/,Yy81(ޝJsߞ4kFx`NA\ -XLqT0%]*VWALҿv wL8mv|cPϨ+HP1'LSe޹%' -ƒ7+r4RE&7B؞Dg<&? -[0+sKt5p%$qntoOM<=(Ck@>R˯s0pN߲\u6410H :E1:_]تpM9V;i=m|?#0wW-͖☈<5V -l$MoWpG)r}aU sK"k`$)NDcxXŁe;03hfK,tRJ6"D{k˷\ -e^ۦrf⡁R[S Q-kV4b;v؆-{&vUf||w3-o2]s'=m33,QSF7FrݥDFܗ'SSu BL<1öCW3ȆP -Ptc :8F\5Qtڗf)"iA:8~ oãSPD0ryaj|y,* m֡ wE# m=J6Ey@;q?nsU;Mt1|6{[v`*~Aݽd)'[\wj˲rm"Wruٓ$j_uܐ`|tu~˗o3]P'OpS>^9MMo6M*Q-uF4$ED?QvIQJ87iW're L[4$-H3fO qa=%h KHx - -|r$JQ& 'fl"-J̆a jӔ0C 6=c~xG\@O7u)CZ"m>gyfWz5t -:i~@a|(!NELq`?].d1 H-p2hcBiՐcQ)gW;63IZ=7iG h`^`vv@sI$d:.q%2HON9q,A빶M12$VPq<Q&m5tYa%J:%^_)WU{SF Mxvqd,^6y:#C1Xe --DL#`((ʛnEJԼq͌N$Jͽ ?fj1 -uWWjW 'IDne玬D;-؏!I;51IH#E!oc~ˤr' }sيBt0fGBR(JXV c.mQ8@<J*mNC'U݀74TưpF@/bÈr\`']ʁ-Z1U֖!䙅%c.zX:驊Aa~|%P.T5ed49aHғp󓋂~A-^X*e u|#!CM:v5 oCK)J+R!-'@]%NY  -tYT<kIq>Us{$$pSK;& q@(&EbopixO,johR8s~*!r2/ߜ\c9dnJA -nď")9cTsA ?IDω0{GA~oYFxϫY]à&"kAhMWC6قg*H?4s j&4CYrH19ǂ02ˮzHuz;_RIФIR_|!u<}#Xrw{Ⱦ1^S?RjX3;U2`kj^_) gy^bdU#iI#ٶ2% sу"ӑR6(R0~UcsDL}̋Yl'9qp`j -yTlZE텑}zk*;fhgSxvJ\8 -p/+6GfxfwEa;m-S$8-Xnj"GݖVNl?|T-"<0V2AjK1.Ck<Ųż5 Ӑݺq_{OWHcrfMeU"p -xRkXOiܥiVКye re_-Y#,'7Ik Ltb(CDYvɅq|A)J#lgZCD[[%fjiQre&xi@#ulpzKطz`8X+LMF"=ה+Ȅ}ϧjT$t  mZwxx65q[e@+:EdH۱dWaR\T(2* /D8"F1!vpC4Ddly.xPADE4e=e4ˌWKJ 30>RsԽq-QknHeKF=q|l*G֭D)ZmiױS_6ܸhR"{%Vǩ+OԢb" y -V.xF7T C<9] Bv`ٚip2P ЪqSoS$)PI.됝LB<ZW!jCLy4I6 -6syaޡNk>R+vd *hN,S5:^v -̨A :#ܙlxxESx -/Oa, 1{ڥCJExxQjA?fO}GDǃŒ52[19"ʂUw}ԙ 1GOI8YE)(ζ_xZTpSnhnL dfEH9#UI3 !uk< pT|S/-Nm7obOr>Q<2 *,[`Alr 3WmYQX1GtӓM$dʲ%3#0/W-H~^o1I+Pt󄸅k sVQ) [n/2}&Mq|+wA6j([3}*(Yd\%L5xx=?bEY 2YeAt*_|Pgc\^Z]R^H:XdO\o#עT5@his& W%-ME;)gg'^|*FPmJE @z Kp=k - gqaZ(P1n.37S&g;k%UW[B9+m> w2P{٥EQ~LF7JTz^#@ٸtR aLhyCP[-P_]#2<ߥG ;ez[i8W MlJ6Iۚ# _6Ƭ<6 ێA; uXA9Б:Ds \-C˝%lq~:|wΦ}9=vRY#Q$~ ֵ鎟!6qF/EišhdX&]f8Pn nm4S uz4 ndm>RR-w{_; \Ulœ=6{9j;bfbU# LUhȂ쾼x\Wh'9Iv%mw TKq{ .D’XXV[ 2-4}vNeaBwN0=*Ci}3ZMfН@ڃz;St;΍5כ-E]RlM4qzo ɦ޴)q GoP^sY,Yv:"أmxeVI]S{JG 818}t77}7u -Ÿ>>Ɉ -.QDZu2Zx!d%% -տ{P~8PU)R -Э(k# H9oz -.XNOMc -պtfBg99 dz+Yld)DY=9ˊ;Z>tZLu׹BoAyMz a/\eP``G'^ꯔZ1EJSAAY4ѯ-A0H!bbi5]'+| .Te0a\/!#φ Ԗm*R,eĈZ?E` % JKL!t0AXPldhP!vxgy#j;=䐤C9P| -5RTENT/8Z`[A|JR1% K!">O6aIFnkyb[-}O%K4Ł)m} *Zu<FĐ!L1=h$Ȱms*VL+.y nd6us:6>Q3-،@m[';(6-C+3"nmsS{l#LS]09rt|۾(T6C8 {' Q7ۍ%TW34fs*}uUӅzgH;qcØ{O{37t\}"?)z}v4zk_&_`ןZ^f6 VűLd7e}3¹^QK@7󅵹C?jV`|@<-X+Dd!B;@'$ ˗.r}R/ѳo]r\ˍ|:}_}]k\Vde^1 0=vꦼ#ez1.ܵk}a0-|t/+D堼Hrk{O#4!0Nפ7`l/f\_cd|~Ř )֏i/_L5@u1D-'|@mw_cӛt׽6OUU5!zwr>_F֠3SΊo]I ,W zf1f.l=ʏ5@>VũI e'[H8Iӂ<ųNes;cÍmتŨDMՄ3N9n Lp; } Wr;:4&<`IV?w`'ZOU>ׄCdkI b(ĂM?^?z&RylWHVO9")$rʟfMs?Y'YFrA0@A]:oW.e1"گC`}`a=`,,n1>aKcVO{;U7Rj-lD Rz۪Y&FFL,!0]yv̴)sjw3tBXn"4 #CT10߀ »',[N@5a#CkTϹf16#>,,5̿n{x%JXtVc_VBD  -)!ۚRWj[V5:Dme|-nԦ4v}{"J**áb41P̝ȼ&3}QJt(H.V/B!ƙ#6י  ~Ҧ:5?KvQz%6 hR$>B f0ڿcB>:HhANm=dӈ%MҏFٚ1Q>;S\aR,SrBT[~vc^0(3"#6 폺O̧JN ˻H`CIr>b@!P4]4 {|UȀTJxW![ B.̛gtHaȺnJ|W*B\~A΍wVJՏ\nLD('@"!kX&8n7E AWΦ~}&|2K{"wJi7 ̃5uiȾ, ?􀂄p|U%$aO`$VEXY>x[]~i^dtFPyQ#R h@ȭ3抇w'ſ:tFgG"fQO4l#vR!-U[i#HXݕ6HM]<N*&&w ;mYc6aQzkR j`1?w0=ӑ$Nd=Mqk8+pz .qǵ(`_ՙ,F5e l ZZdm "$ gE( sӰЅFuזx2= - Ͼֱw\K׳q۶ݶ/{5)BA -9p K(Q'V[whVƧP -endstream -endobj -535 0 obj +536 0 obj << /Type /ObjStm /N 100 /First 894 -/Length 16454 +/Length 16244 >> stream -530 0 534 147 83 201 531 254 542 373 540 539 536 685 537 837 538 990 539 1144 -544 1291 87 1345 541 1398 547 1517 545 1651 549 1798 91 1852 546 1905 553 2076 551 2218 -550 2364 555 2510 95 2564 552 2617 559 2723 557 2857 561 3004 99 3058 558 3111 566 3217 -564 3367 562 3513 563 3665 568 3817 103 3871 565 3925 570 4057 572 4171 569 4225 576 4318 -574 4460 573 4606 578 4760 107 4814 575 4868 580 4974 582 5088 111 5142 579 5196 584 5302 -586 5416 115 5470 268 5524 201 5578 197 5631 314 5683 315 5737 370 5791 316 5845 218 5899 -267 5953 269 6007 246 6061 583 6115 589 6234 591 6348 247 6402 251 6456 204 6510 203 6564 -249 6618 248 6671 270 6725 200 6779 335 6833 199 6887 250 6941 198 6995 313 7049 202 7103 -588 7157 592 7263 593 7959 594 8027 595 8331 596 8459 597 8813 598 8833 599 9476 600 9848 -601 10512 602 10902 603 11494 604 12104 605 12611 606 13256 607 13851 608 14215 610 14847 612 15196 +530 0 531 154 535 301 83 355 532 408 543 527 541 693 537 839 538 991 539 1144 +540 1298 545 1445 87 1499 542 1552 548 1671 546 1805 550 1952 91 2006 547 2059 554 2230 +552 2372 551 2518 556 2664 95 2718 553 2771 560 2877 558 3011 562 3158 99 3212 559 3265 +567 3371 565 3521 563 3667 564 3819 569 3971 103 4025 566 4079 571 4211 573 4325 570 4379 +577 4472 575 4614 574 4760 579 4914 107 4968 576 5022 581 5128 583 5242 111 5296 580 5350 +585 5456 587 5570 115 5624 268 5678 201 5732 197 5785 314 5837 315 5891 371 5945 316 5999 +218 6053 267 6107 269 6161 246 6215 584 6269 590 6388 592 6502 247 6556 251 6610 204 6664 +203 6718 249 6772 248 6825 270 6879 200 6933 335 6987 199 7041 250 7095 198 7149 313 7203 +202 7257 589 7311 593 7417 594 8113 595 8181 596 8485 597 8613 598 8967 599 8987 600 9630 +601 10002 602 10666 603 11056 604 11648 605 12258 606 12765 607 13410 608 14005 609 14369 611 15001 % 530 0 obj << /Type /Annot /Subtype /Link +/Border[0 0 0]/H/I/C[0 1 0] +/Rect [191.925 485.431 204.826 494.454] +/A << /S /GoTo /D (cite.PSBLASGUIDE) >> +>> +% 531 0 obj +<< +/Type /Annot +/Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [395.046 454.268 402.493 467.901] /A << /S /GoTo /D (section.8) >> >> -% 534 0 obj +% 535 0 obj << -/D [532 0 R /XYZ 85.4 752.957 null] +/D [533 0 R /XYZ 85.4 752.957 null] >> % 83 0 obj << -/D [532 0 R /XYZ 86.4 715.095 null] +/D [533 0 R /XYZ 86.4 715.095 null] >> -% 531 0 obj +% 532 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F17 124 0 R /F45 225 0 R /F18 275 0 R >> /ProcSet [ /PDF /Text ] >> -% 542 0 obj +% 543 0 obj << /Type /Page -/Contents 543 0 R -/Resources 541 0 R +/Contents 544 0 R +/Resources 542 0 R /MediaBox [0 0 595.276 841.89] -/Parent 513 0 R -/Annots [ 540 0 R 536 0 R 537 0 R 538 0 R 539 0 R ] +/Parent 514 0 R +/Annots [ 541 0 R 537 0 R 538 0 R 539 0 R 540 0 R ] >> -% 540 0 obj +% 541 0 obj << /Type /Annot /Subtype /Link @@ -6818,7 +6662,7 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.6) >> >> -% 536 0 obj +% 537 0 obj << /Type /Annot /Subtype /Link @@ -6826,7 +6670,7 @@ stream /Rect [242.209 613.666 258.141 626.568] /A << /S /GoTo /D (subsection.6.4) >> >> -% 537 0 obj +% 538 0 obj << /Type /Annot /Subtype /Link @@ -6834,7 +6678,7 @@ stream /Rect [364.686 512.53 377.588 521.553] /A << /S /GoTo /D (cite.PSBLASGUIDE) >> >> -% 538 0 obj +% 539 0 obj << /Type /Annot /Subtype /Link @@ -6842,7 +6686,7 @@ stream /Rect [199.125 471.882 212.027 480.905] /A << /S /GoTo /D (cite.PSBLASGUIDE) >> >> -% 539 0 obj +% 540 0 obj << /Type /Annot /Subtype /Link @@ -6850,29 +6694,29 @@ stream /Rect [402.247 440.719 409.694 454.352] /A << /S /GoTo /D (section.8) >> >> -% 544 0 obj +% 545 0 obj << -/D [542 0 R /XYZ 92.6 752.957 null] +/D [543 0 R /XYZ 92.6 752.957 null] >> % 87 0 obj << -/D [542 0 R /XYZ 93.6 715.095 null] +/D [543 0 R /XYZ 93.6 715.095 null] >> -% 541 0 obj +% 542 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F17 124 0 R /F45 225 0 R /F18 275 0 R >> /ProcSet [ /PDF /Text ] >> -% 547 0 obj +% 548 0 obj << /Type /Page -/Contents 548 0 R -/Resources 546 0 R +/Contents 549 0 R +/Resources 547 0 R /MediaBox [0 0 595.276 841.89] -/Parent 513 0 R -/Annots [ 545 0 R ] +/Parent 514 0 R +/Annots [ 546 0 R ] >> -% 545 0 obj +% 546 0 obj << /Type /Annot /Subtype /Link @@ -6880,29 +6724,29 @@ stream /Rect [395.046 386.522 402.493 400.155] /A << /S /GoTo /D (section.8) >> >> -% 549 0 obj +% 550 0 obj << -/D [547 0 R /XYZ 85.4 752.957 null] +/D [548 0 R /XYZ 85.4 752.957 null] >> % 91 0 obj << -/D [547 0 R /XYZ 86.4 715.095 null] +/D [548 0 R /XYZ 86.4 715.095 null] >> -% 546 0 obj +% 547 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F17 124 0 R /F45 225 0 R /F22 195 0 R /F26 331 0 R /F20 332 0 R /F18 275 0 R /F23 328 0 R >> /ProcSet [ /PDF /Text ] >> -% 553 0 obj +% 554 0 obj << /Type /Page -/Contents 554 0 R -/Resources 552 0 R +/Contents 555 0 R +/Resources 553 0 R /MediaBox [0 0 595.276 841.89] -/Parent 556 0 R -/Annots [ 551 0 R 550 0 R ] +/Parent 557 0 R +/Annots [ 552 0 R 551 0 R ] >> -% 551 0 obj +% 552 0 obj << /Type /Annot /Subtype /Link @@ -6910,7 +6754,7 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.6) >> >> -% 550 0 obj +% 551 0 obj << /Type /Annot /Subtype /Link @@ -6918,29 +6762,29 @@ stream /Rect [399.894 589.76 407.341 603.393] /A << /S /GoTo /D (section.8) >> >> -% 555 0 obj +% 556 0 obj << -/D [553 0 R /XYZ 92.6 752.957 null] +/D [554 0 R /XYZ 92.6 752.957 null] >> % 95 0 obj << -/D [553 0 R /XYZ 93.6 715.095 null] +/D [554 0 R /XYZ 93.6 715.095 null] >> -% 552 0 obj +% 553 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F17 124 0 R /F45 225 0 R >> /ProcSet [ /PDF /Text ] >> -% 559 0 obj +% 560 0 obj << /Type /Page -/Contents 560 0 R -/Resources 558 0 R +/Contents 561 0 R +/Resources 559 0 R /MediaBox [0 0 595.276 841.89] -/Parent 556 0 R -/Annots [ 557 0 R ] +/Parent 557 0 R +/Annots [ 558 0 R ] >> -% 557 0 obj +% 558 0 obj << /Type /Annot /Subtype /Link @@ -6948,29 +6792,29 @@ stream /Rect [395.046 562.662 402.493 576.295] /A << /S /GoTo /D (section.8) >> >> -% 561 0 obj +% 562 0 obj << -/D [559 0 R /XYZ 85.4 752.957 null] +/D [560 0 R /XYZ 85.4 752.957 null] >> % 99 0 obj << -/D [559 0 R /XYZ 86.4 715.095 null] +/D [560 0 R /XYZ 86.4 715.095 null] >> -% 558 0 obj +% 559 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F17 124 0 R /F45 225 0 R >> /ProcSet [ /PDF /Text ] >> -% 566 0 obj +% 567 0 obj << /Type /Page -/Contents 567 0 R -/Resources 565 0 R +/Contents 568 0 R +/Resources 566 0 R /MediaBox [0 0 595.276 841.89] -/Parent 556 0 R -/Annots [ 564 0 R 562 0 R 563 0 R ] +/Parent 557 0 R +/Annots [ 565 0 R 563 0 R 564 0 R ] >> -% 564 0 obj +% 565 0 obj << /Type /Annot /Subtype /Link @@ -6978,7 +6822,7 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.6) >> >> -% 562 0 obj +% 563 0 obj << /Type /Annot /Subtype /Link @@ -6986,7 +6830,7 @@ stream /Rect [334.005 662.511 349.937 675.413] /A << /S /GoTo /D (subsection.6.2) >> >> -% 563 0 obj +% 564 0 obj << /Type /Annot /Subtype /Link @@ -6994,46 +6838,46 @@ stream /Rect [394.361 145.502 410.293 157.191] /A << /S /GoTo /D (subsection.6.2) >> >> -% 568 0 obj +% 569 0 obj << -/D [566 0 R /XYZ 92.6 752.957 null] +/D [567 0 R /XYZ 92.6 752.957 null] >> % 103 0 obj << -/D [566 0 R /XYZ 93.6 715.095 null] +/D [567 0 R /XYZ 93.6 715.095 null] >> -% 565 0 obj +% 566 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F17 124 0 R /F25 329 0 R /F45 225 0 R /F18 275 0 R >> /ProcSet [ /PDF /Text ] >> -% 570 0 obj +% 571 0 obj << /Type /Page -/Contents 571 0 R -/Resources 569 0 R +/Contents 572 0 R +/Resources 570 0 R /MediaBox [0 0 595.276 841.89] -/Parent 556 0 R +/Parent 557 0 R >> -% 572 0 obj +% 573 0 obj << -/D [570 0 R /XYZ 85.4 752.957 null] +/D [571 0 R /XYZ 85.4 752.957 null] >> -% 569 0 obj +% 570 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F45 225 0 R >> /ProcSet [ /PDF /Text ] >> -% 576 0 obj +% 577 0 obj << /Type /Page -/Contents 577 0 R -/Resources 575 0 R +/Contents 578 0 R +/Resources 576 0 R /MediaBox [0 0 595.276 841.89] -/Parent 556 0 R -/Annots [ 574 0 R 573 0 R ] +/Parent 557 0 R +/Annots [ 575 0 R 574 0 R ] >> -% 574 0 obj +% 575 0 obj << /Type /Annot /Subtype /Link @@ -7041,7 +6885,7 @@ stream /Rect [92.604 739.006 100.627 748.453] /A << /S /GoTo /D (section.8) >> >> -% 573 0 obj +% 574 0 obj << /Type /Annot /Subtype /Link @@ -7049,213 +6893,213 @@ stream /Rect [314.074 583.943 326.976 592.966] /A << /S /GoTo /D (cite.PSBLASGUIDE) >> >> -% 578 0 obj +% 579 0 obj << -/D [576 0 R /XYZ 92.6 752.957 null] +/D [577 0 R /XYZ 92.6 752.957 null] >> % 107 0 obj << -/D [576 0 R /XYZ 93.6 715.095 null] +/D [577 0 R /XYZ 93.6 715.095 null] >> -% 575 0 obj +% 576 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F17 124 0 R /F45 225 0 R >> /ProcSet [ /PDF /Text ] >> -% 580 0 obj +% 581 0 obj << /Type /Page -/Contents 581 0 R -/Resources 579 0 R +/Contents 582 0 R +/Resources 580 0 R /MediaBox [0 0 595.276 841.89] -/Parent 556 0 R +/Parent 557 0 R >> -% 582 0 obj +% 583 0 obj << -/D [580 0 R /XYZ 85.4 752.957 null] +/D [581 0 R /XYZ 85.4 752.957 null] >> % 111 0 obj << -/D [580 0 R /XYZ 86.4 715.095 null] +/D [581 0 R /XYZ 86.4 715.095 null] >> -% 579 0 obj +% 580 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F17 124 0 R /F45 225 0 R >> /ProcSet [ /PDF /Text ] >> -% 584 0 obj +% 585 0 obj << /Type /Page -/Contents 585 0 R -/Resources 583 0 R +/Contents 586 0 R +/Resources 584 0 R /MediaBox [0 0 595.276 841.89] -/Parent 587 0 R +/Parent 588 0 R >> -% 586 0 obj +% 587 0 obj << -/D [584 0 R /XYZ 92.6 752.957 null] +/D [585 0 R /XYZ 92.6 752.957 null] >> % 115 0 obj << -/D [584 0 R /XYZ 93.6 722.069 null] +/D [585 0 R /XYZ 93.6 722.069 null] >> % 268 0 obj << -/D [584 0 R /XYZ 93.6 697.846 null] +/D [585 0 R /XYZ 93.6 697.846 null] >> % 201 0 obj << -/D [584 0 R /XYZ 93.6 630.21 null] +/D [585 0 R /XYZ 93.6 630.21 null] >> % 197 0 obj << -/D [584 0 R /XYZ 93.6 592.4 null] +/D [585 0 R /XYZ 93.6 592.4 null] >> % 314 0 obj << -/D [584 0 R /XYZ 93.6 554.287 null] +/D [585 0 R /XYZ 93.6 554.287 null] >> % 315 0 obj << -/D [584 0 R /XYZ 93.6 489.076 null] +/D [585 0 R /XYZ 93.6 489.076 null] >> -% 370 0 obj +% 371 0 obj << -/D [584 0 R /XYZ 93.6 425.986 null] +/D [585 0 R /XYZ 93.6 425.986 null] >> % 316 0 obj << -/D [584 0 R /XYZ 93.6 374.324 null] +/D [585 0 R /XYZ 93.6 374.324 null] >> % 218 0 obj << -/D [584 0 R /XYZ 93.6 319.935 null] +/D [585 0 R /XYZ 93.6 319.935 null] >> % 267 0 obj << -/D [584 0 R /XYZ 93.6 268.273 null] +/D [585 0 R /XYZ 93.6 268.273 null] >> % 269 0 obj << -/D [584 0 R /XYZ 93.6 216.611 null] +/D [585 0 R /XYZ 93.6 216.611 null] >> % 246 0 obj << -/D [584 0 R /XYZ 93.6 164.948 null] +/D [585 0 R /XYZ 93.6 164.948 null] >> -% 583 0 obj +% 584 0 obj << /Font << /F42 137 0 R /F15 136 0 R /F17 124 0 R /F18 275 0 R /F45 225 0 R >> /ProcSet [ /PDF /Text ] >> -% 589 0 obj +% 590 0 obj << /Type /Page -/Contents 590 0 R -/Resources 588 0 R +/Contents 591 0 R +/Resources 589 0 R /MediaBox [0 0 595.276 841.89] -/Parent 587 0 R +/Parent 588 0 R >> -% 591 0 obj +% 592 0 obj << -/D [589 0 R /XYZ 85.4 752.957 null] +/D [590 0 R /XYZ 85.4 752.957 null] >> % 247 0 obj << -/D [589 0 R /XYZ 86.4 715.095 null] +/D [590 0 R /XYZ 86.4 715.095 null] >> % 251 0 obj << -/D [589 0 R /XYZ 86.4 670.542 null] +/D [590 0 R /XYZ 86.4 670.542 null] >> % 204 0 obj << -/D [589 0 R /XYZ 86.4 622.659 null] +/D [590 0 R /XYZ 86.4 622.659 null] >> % 203 0 obj << -/D [589 0 R /XYZ 86.4 574.776 null] +/D [590 0 R /XYZ 86.4 574.776 null] >> % 249 0 obj << -/D [589 0 R /XYZ 86.4 526.59 null] +/D [590 0 R /XYZ 86.4 526.59 null] >> % 248 0 obj << -/D [589 0 R /XYZ 86.4 478.405 null] +/D [590 0 R /XYZ 86.4 478.405 null] >> % 270 0 obj << -/D [589 0 R /XYZ 86.4 429.613 null] +/D [590 0 R /XYZ 86.4 429.613 null] >> % 200 0 obj << -/D [589 0 R /XYZ 86.4 381.427 null] +/D [590 0 R /XYZ 86.4 381.427 null] >> % 335 0 obj << -/D [589 0 R /XYZ 86.4 346.791 null] +/D [590 0 R /XYZ 86.4 346.791 null] >> % 199 0 obj << -/D [589 0 R /XYZ 86.4 325.703 null] +/D [590 0 R /XYZ 86.4 325.703 null] >> % 250 0 obj << -/D [589 0 R /XYZ 86.4 280.245 null] +/D [590 0 R /XYZ 86.4 280.245 null] >> % 198 0 obj << -/D [589 0 R /XYZ 86.4 243.487 null] +/D [590 0 R /XYZ 86.4 243.487 null] >> % 313 0 obj << -/D [589 0 R /XYZ 86.4 208.851 null] +/D [590 0 R /XYZ 86.4 208.851 null] >> % 202 0 obj << -/D [589 0 R /XYZ 86.4 160.665 null] +/D [590 0 R /XYZ 86.4 160.665 null] >> -% 588 0 obj +% 589 0 obj << /Font << /F15 136 0 R /F42 137 0 R /F18 275 0 R /F45 225 0 R >> /ProcSet [ /PDF /Text ] >> -% 592 0 obj -[458.3 458.3 416.7 416.7 472.2 472.2 472.2 472.2 583.3 583.3 472.2 472.2 333.3 555.6 577.8 577.8 597.2 597.2 736.1 736.1 527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 805.6 805.6 805.6 805.6 1277.8 1277.8 811.1 811.1 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 888.9 888.9 888.9 666.7 875 875 875 875 611.1 611.1 833.3 1111.1 472.2 555.6 1111.1 1511.1 1111.1 1511.1 1111.1 1511.1 1055.6 944.4 472.2 833.3 833.3 833.3 833.3 833.3 1444.4 1277.8 555.6 1111.1 1111.1 1111.1 1111.1 1111.1 944.4 1277.8 555.6 1000 1444.4 555.6 1000 1444.4 472.2 472.2 527.8 527.8 527.8 527.8 666.7 666.7 1000 1000] % 593 0 obj -[935.2 351.8 416.7 351.8 611.1 611.1 611.1 611.1 611.1] +[458.3 458.3 416.7 416.7 472.2 472.2 472.2 472.2 583.3 583.3 472.2 472.2 333.3 555.6 577.8 577.8 597.2 597.2 736.1 736.1 527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 805.6 805.6 805.6 805.6 1277.8 1277.8 811.1 811.1 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 888.9 888.9 888.9 666.7 875 875 875 875 611.1 611.1 833.3 1111.1 472.2 555.6 1111.1 1511.1 1111.1 1511.1 1111.1 1511.1 1055.6 944.4 472.2 833.3 833.3 833.3 833.3 833.3 1444.4 1277.8 555.6 1111.1 1111.1 1111.1 1111.1 1111.1 944.4 1277.8 555.6 1000 1444.4 555.6 1000 1444.4 472.2 472.2 527.8 527.8 527.8 527.8 666.7 666.7 1000 1000] % 594 0 obj -[379.6 963 638.9 963 638.9 658.7 924.1 926.6 883.7 998.3 899.8 775 952.9 999.5 547.7 681.6 1025.7 846.3 1161.6 967.1 934.1 780 966.5 922.1 756.7 731.1 838.1 729.6 1150.9 1001.4 726.4 837.7 509.3 509.3 509.3 1222.2 1222.2 518.5 674.9 547.7 559.1 642.5 589 600.7 607.7 725.7 445.6 511.6 660.9] +[935.2 351.8 416.7 351.8 611.1 611.1 611.1 611.1 611.1] % 595 0 obj -[826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4] +[379.6 963 638.9 963 638.9 658.7 924.1 926.6 883.7 998.3 899.8 775 952.9 999.5 547.7 681.6 1025.7 846.3 1161.6 967.1 934.1 780 966.5 922.1 756.7 731.1 838.1 729.6 1150.9 1001.4 726.4 837.7 509.3 509.3 509.3 1222.2 1222.2 518.5 674.9 547.7 559.1 642.5 589 600.7 607.7 725.7 445.6 511.6 660.9] % 596 0 obj -[826.4 295.1 826.4 531.3 826.4 531.3 826.4 826.4 826.4 826.4 826.4 826.4 826.4 1062.5 531.3 531.3 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 1062.5 1062.5 826.4 826.4 1062.5 1062.5 531.3 531.3 1062.5 1062.5 1062.5 826.4 1062.5 1062.5 649.3 649.3 1062.5 1062.5 1062.5 826.4 288.2 1062.5 708.3 708.3 944.5 944.5 0] +[826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4] % 597 0 obj -[722.2] +[826.4 295.1 826.4 531.3 826.4 531.3 826.4 826.4 826.4 826.4 826.4 826.4 826.4 1062.5 531.3 531.3 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 1062.5 1062.5 826.4 826.4 1062.5 1062.5 531.3 531.3 1062.5 1062.5 1062.5 826.4 1062.5 1062.5 649.3 649.3 1062.5 1062.5 1062.5 826.4 288.2 1062.5 708.3 708.3 944.5 944.5 0] % 598 0 obj -[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3] +[722.2] % 599 0 obj -[295.1 826.4 531.3 826.4 531.3 559.7 795.8 801.4 757.3 871.7 778.7 672.4 827.9 872.8 460.7 580.4 896 722.6 1020.4 843.3 806.2 673.6 835.7 800.2 646.2 618.6 718.8 618.8 1002.4 873.9 615.8 720 413.2 413.2 413.2 1062.5 1062.5 434 564.4 454.5 460.2 546.7 492.9 510.4 505.6 612.3 361.7 429.7 553.2 317.1 939.8 644.7 513.5 534.8 474.4 479.5 491.3 383.7 615.2 517.4] +[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3] % 600 0 obj -[613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6 408.9] +[295.1 826.4 531.3 826.4 531.3 559.7 795.8 801.4 757.3 871.7 778.7 672.4 827.9 872.8 460.7 580.4 896 722.6 1020.4 843.3 806.2 673.6 835.7 800.2 646.2 618.6 718.8 618.8 1002.4 873.9 615.8 720 413.2 413.2 413.2 1062.5 1062.5 434 564.4 454.5 460.2 546.7 492.9 510.4 505.6 612.3 361.7 429.7 553.2 317.1 939.8 644.7 513.5 534.8 474.4 479.5 491.3 383.7 615.2 517.4] % 601 0 obj -[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] +[613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6 408.9] % 602 0 obj -[469.4 353.9 576.2 583.3 602.5 494 437.5 570 517 571.4 437.2 540.3 595.8 625.7 651.4 622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.7 361.1 572.5 484.7 715.9 571.5 490.3 465] +[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] % 603 0 obj -[638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.5 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6] +[469.4 353.9 576.2 583.3 602.5 494 437.5 570 517 571.4 437.2 540.3 595.8 625.7 651.4 622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.7 361.1 572.5 484.7 715.9 571.5 490.3 465] % 604 0 obj -[319.4 436.1 436.1 552.8 844.4 319.4 377.8 319.4 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.6 566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 591.1 613.3 613.3 835.6 613.3 613.3] +[638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.5 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6] % 605 0 obj -[722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500] +[319.4 436.1 436.1 552.8 844.4 319.4 377.8 319.4 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.6 566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 591.1 613.3 613.3 835.6 613.3 613.3] % 606 0 obj -[544 544 816 816 272 299.2 489.6 489.6 489.6 489.6 489.6 734 435.2 489.6 707.2 761.6 489.6 883.8 992.6 761.6 272 272 489.6 816 489.6 816 761.6 272 380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8] +[722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500] % 607 0 obj -[350 300 500 500 500 500 500 500 500 500 500 500 500 300 300 300 750 500 500 750 726.9 688.4 700 738.4 663.4 638.4 756.7 726.9 376.9 513.4 751.9 613.4 876.9 726.9 750 663.4 750 713.4 550 700 726.9 726.9 976.9 726.9 726.9 600 300 500 300 500 300 300 500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325 525 450 650 450 475] +[544 544 816 816 272 299.2 489.6 489.6 489.6 489.6 489.6 734 435.2 489.6 707.2 761.6 489.6 883.8 992.6 761.6 272 272 489.6 816 489.6 816 761.6 272 380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8] % 608 0 obj +[350 300 500 500 500 500 500 500 500 500 500 500 500 300 300 300 750 500 500 750 726.9 688.4 700 738.4 663.4 638.4 756.7 726.9 376.9 513.4 751.9 613.4 876.9 726.9 750 663.4 750 713.4 550 700 726.9 726.9 976.9 726.9 726.9 600 300 500 300 500 300 300 500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325 525 450 650 450 475] +% 609 0 obj [625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7] -% 610 0 obj +% 611 0 obj << /Type /FontDescriptor /FontName /GSGTRH+CMBX10 @@ -7268,27 +7112,176 @@ stream /StemV 114 /XHeight 444 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/U/a/b/c/d/e/eight/f/fi/five/four/g/h/i/j/k/l/m/n/nine/o/one/p/period/r/s/seven/six/t/three/two/u/v/w) -/FontFile 609 0 R +/FontFile 610 0 R >> -% 612 0 obj + +endstream +endobj +612 0 obj << -/Type /FontDescriptor -/FontName /ZNEEDW+CMBX12 -/Flags 4 -/FontBBox [-53 -251 1139 750] -/Ascent 694 -/CapHeight 686 -/Descent -194 -/ItalicAngle 0 -/StemV 109 -/XHeight 444 -/CharSet (/A/B/C/D/E/F/G/H/I/L/M/O/P/R/S/U/a/b/c/d/e/eight/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/o/one/p/period/q/quoteright/r/s/seven/six/t/three/two/u/v/w/x/y) -/FontFile 611 0 R +/Length1 2163 +/Length2 15247 +/Length3 0 +/Length 17410 >> - +stream +%!PS-AdobeFont-1.0: CMBX12 003.002 +%%Title: CMBX12 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (), with Reserved Font Name CMBX12. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup +/UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /ZNEEDW+CMBX12 def +/FontBBox {-53 -251 1139 750 }readonly def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def +/FullName (CMBX12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 76 /L put +dup 77 /M put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 85 /U put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 56 /eight put +dup 102 /f put +dup 12 /fi put +dup 53 /five put +dup 52 /four put +dup 103 /g put +dup 104 /h put +dup 45 /hyphen put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 49 /one put +dup 112 /p put +dup 46 /period put +dup 113 /q put +dup 39 /quoteright put +dup 114 /r put +dup 115 /s put +dup 55 /seven put +dup 54 /six put +dup 116 /t put +dup 51 /three put +dup 50 /two put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +currentdict end +currentfile eexec +oc;jAw-=%W)-{ru)rAE(@{빴Q|_R +ϤA -T@|q|VkJ%qu8PwGxŪ̆Q6K -U\%b"t-*xJ+ +}3{Z2zݬT2s$Z&{BJ{Jf^ַ>aq4!<_CцcQ%BlS71_ +sQzԜr?ktP2Òl(?69~'@2bt[{ax 7}Gn[TY>T#a1h!;`WƮk>Kj̱JzNc?^<@ qTud[eюj:JnK#2S[ŝBb?̬Mo7aa'gP:δѩ҈ dBd|IH^wMe#DD13W.J.6׮r(N #>Zjhɵ+Uw +$\WN.C(V\N¸3A?l_sMP yfSyֿb`9upPȐNur)L=uhՂD١Pԋ^} +-zU*3~HwzQ:.cxv(P}F>48zeU+Jk <>,H~^U>~~)9G-_+ԇ2miΝ1r>Z?ώ8PZm#meDPњ69v=hE_X(yN(9d5p7LZC~ld1:/ g!, +}Q+93V{ QlG 7!;yq+ JA vj/rڜZP)4f+OpX_t~ 5[RZ$ҹ=#e@K*WEt_-J bΣZdh>xNpsGLOh>o련J;J+\m +J6km9"N `D[ h6w{Ac<=ޮv}PC*|sAחfK+1!Sn~#_*]\i!Jiq˘mJ K fy*S}iGV6wa$mv<zZQ^L0NRq!*7uLO=b~_J CI?<5 T zs}uL`M؀"7K 8yO {|v`).D3K$ ,3sÝDRT c2쑃%yD\MS9HQ՝rfG^\55#v[Yϴ)KS^~nMX,8&7a d$ݕ ^t/WyϿ4QK{)=WDd>oeZpٕi-e@PLb|#p"6KLPXzbZc})%LKfO2ݮ (NԴU-eru RyTkl>'H 9т-)u +u+ld4zcLsTJ[:v?WNM* NiLffF/? ̔o_a! Bt]z\ޔR/r4MFwe5']ZPp׶r?PaL'- +c3G}T'ڡn#^>Ҡ'-ހFwMOTDsJQ{ T޾2VNsҎ%Bh$,>oK"Hϯ 2BU7'J(Ǜc1PIݐ.lQjF%jP +1zb2ɮWM+mKf,"/3~į;7/7=o-R%nJB@n6A0hRF9T {(&$߅:hMj %FVڈGv?`S::JepR̶9y?O_4:╱bEV]1Vb,"KoF0dba̟f4G^̬k({: +]-eJbc?hs+΢_sS,atyir%F3gދ&M}ۨ3Dkh`\rud>;iA_ +oF_љckNԋn`v)2ۙ$# 6{⮶\FvUW l +%x[gj6~C "^klCy%)%nWFO/My~ZqiI$CT*x])it4ZV]m剁VO)gi +%-JUƠ[fTX7/.cU,h78M4 z9:̳jmrvP# >bx_Løğ y5R@/{fQC}d~r!4ѐfPo퀿M+^',6_/W{h/њjS}Jz sնj ޳~zL{qA\Rh$):zNSJLyj^Ĕǒ)T~KZAP0JP~(>~9&åv^")X5=hN҂aNز%1v1gv?467H!NjO4پb夹tFy&{wQ[+ZJq ++@ mn,jMnEfI m RGUY8šNK:]ĤB!N?J'A.k{c㣆+/lB~z- NWWcr酉?V,d\$;tTR%M8DLsY{D#4 D{a\j;$ndʟ'KE 'p a_C1daEE4"<[ɬ}77%غk/2Ik'wblZqq@`C,6|U[2ǩ{{_W{l[(Eㅐ&K!.0t)f7lnMwX< | w2#:|м6ޡ4Hkr~IEmvb,[xY@rL'3:`A7C~X+_显R#GAVt]Dd ! 0*uzbrYN%gUX&h͈6OW2^zG iNΫyf_S">.g`B6G +BdXXE}텅eW_llQ6ioF<3ԙZN%Q^w݃{&E:k= BI| +~ڛfKikx zm 3ٳ~mk +R-rHsډZ嬪.]]Mmјrx{%u_p[ +5~`31>pajdoT&]J[[@ǿ&#F8i ^9<we+-lBdv>B2p["j FSoa9"1ܟ`IC"9²xG@,ty +ďuo1H?$YM;oia=ۓe%H-+XH +"'$wfS"o3"fŕ +?JЂ.~e/@CowK*VeMU&~7;V^"&%~޷$6v%? "1(ʲv#Z)H2A{*5a4h+`KPY#LDE#@]8.| qML$ZMgurB2Y {rqf^grB0y7J,/(^uI7L5f8G ;-1mg%&E0#3i; "m_f9NA?~!5mK~F7 /*-xމ/,Yy81(ޝJsߞ4kFx`NA\ +XLqT0%]*VWALҿv wL8mv|cPϨ+HP1'LSe޹%' +ƒ7+r4RE&7B؞Dg<&? +[0+sKt5p%$qntoOM<=(Ck@>R˯s0pN߲\u6410H :E1:_]تpM9V;i=m|?#0wW-͖☈<5V +l$MoWpG)r}aU sK"k`$)NDcxXŁe;03hfK,tRJ6"D{k˷\ +e^ۦrf⡁R[S Q-kV4b;v؆-{&vUf||w3-o2]s'=m33,QSF7FrݥDFܗ'SSu BL<1öCW3ȆP +Ptc :8F\5Qtڗf)"iA:8~ oãSPD0ryaj|y,* m֡ wE# m=J6Ey@;q?nsU;Mt1|6{[v`*~Aݽd)'[\wj˲rm"Wruٓ$j_uܐ`|tu~˗o3]P'OpS>^9MMo6M*Q-uF4$ED?QvIQJ87iW're L[4$-H3fO qa=%h KHx + +|r$JQ& 'fl"-J̆a jӔ0C 6=c~xG\@O7u)CZ"m>gyfWz5t +:i~@a|(!NELq`?].d1 H-p2hcBiՐcQ)gW;63IZ=7iG h`^`vv@sI$d:.q%2HON9q,A빶M12$VPq<Q&m5tYa%J:%^_)WU{SF Mxvqd,^6y:#C1Xe +-DL#`((ʛnEJԼq͌N$Jͽ ?fj1 +uWWjW 'IDne玬D;-؏!I;51IH#E!oc~ˤr' }sيBt0fGBR(JXV c.mQ8@<J*mNC'U݀74TưpF@/bÈr\`']ʁ-Z1U֖!䙅%c.zX:驊Aa~|%P.T5ed49aHғp󓋂~A-^X*e u|#!CM:v5 oCK)J+R!-'@]%NY  +tYT<kIq>Us{$$pSK;& q@(&EbopixO,johR8s~*!r2/ߜ\c9dnJA +nď")9cTsA ?IDω0{GA~oYFxϫY]à&"kAhMWC6قg*H?4s j&4CYrH19ǂ02ˮzHuz;_RIФIR_|!u<}#Xrw{Ⱦ1^S?RjX3;U2`kj^_) gy^bdU#iI#ٶ2% sу"ӑR6(R0~UcsDL}̋Yl'9qp`j +yTlZE텑}zk*;fhgSxvJ\8 +p/+6GfxfwEa;m-S$8-Xnj"GݖVNl?|T-"<0V2AjK1.Ck<Ųż5 Ӑݺq_{OWHcrfMeU"p +xRkXOiܥiVКye re_-Y#,'7Ik Ltb(CDYvɅq|A)J#lgZCD[[%fjiQre&xi@#ulpzKطz`8X+LMF"=ה+Ȅ}ϧjT$t  mZwxx65q[e@+:EdH۱dWaR\T(2* /D8"F1!vpC4Ddly.xPADE4e=e4ˌWKJ 30>RsԽq-QknHeKF=q|l*G֭D)ZmiױS_6ܸhR"{%Vǩ+OԢb" y +V.xF7T C<9] Bv`ٚip2P ЪqSoS$)PI.됝LB<ZW!jCLy4I6 -6syaޡNk>R+vd *hN,S5:^v +̨A :#ܙlxxESx +/Oa, 1{ڥCJExxQjA?fO}GDǃŒ52[19"ʂUw}ԙ 1GOI8YE)(ζ_xZTpSnhnL dfEH9#UI3 !uk< pT|S/-Nm7obOr>Q<2 *,[`Alr 3WmYQX1GtӓM$dʲ%3#0/W-H~^o1I+Pt󄸅k sVQ) [n/2}&Mq|+wA6j([3}*(Yd\%L5xx=?bEY 2YeAt*_|Pgc\^Z]R^H:XdO\o#עT5@his& W%-ME;)gg'^|*FPmJE @z Kp=k + gqaZ(P1n.37S&g;k%UW[B9+m> w2P{٥EQ~LF7JTz^#@ٸtR aLhyCP[-P_]#2<ߥG ;ez[i8W MlJ6Iۚ# _6Ƭ<6 ێA; uXA9Б:Ds \-C˝%lq~:|wΦ}9=vRY#Q$~ ֵ鎟!6qF/EišhdX&]f8Pn nm4S uz4 ndm>RR-w{_; \Ulœ=6{9j;bfbU# LUhȂ쾼x\Wh'9Iv%mw TKq{ .D’XXV[ 2-4}vNeaBwN0=*Ci}3ZMfН@ڃz;St;΍5כ-E]RlM4qzo ɦ޴)q GoP^sY,Yv:"أmxeVI]S{JG 818}t77}7u +Ÿ>>Ɉ +.QDZu2Zx!d%% -տ{P~8PU)R +Э(k# H9oz +.XNOMc -պtfBg99 dz+Yld)DY=9ˊ;Z>tZLu׹BoAyMz a/\eP``G'^ꯔZ1EJSAAY4ѯ-A0H!bbi5]'+| .Te0a\/!#φ Ԗm*R,eĈZ?E` % JKL!t0AXPldhP!vxgy#j;=䐤C9P| +5RTENT/8Z`[A|JR1% K!">O6aIFnkyb[-}O%K4Ł)m} *Zu<FĐ!L1=h$Ȱms*VL+.y nd6us:6>Q3-،@m[';(6-C+3"nmsS{l#LS]09rt|۾(T6C8 {' Q7ۍ%TW34fs*}uUӅzgH;qcØ{O{37t\}"?)z}v4zk_&_`ןZ^f6 VűLd7e}3¹^QK@7󅵹C?jV`|@<-X+Dd!B;@'$ ˗.r}R/ѳo]r\ˍ|:}_}]k\Vde^1 0=vꦼ#ez1.ܵk}a0-|t/+D堼Hrk{O#4!0Nפ7`l/f\_cd|~Ř )֏i/_L5@u1D-'|@mw_cӛt׽6OUU5!zwr>_F֠3SΊo]I ,W zf1f.l=ʏ5@>VũI e'[H8Iӂ<ųNes;cÍmتŨDMՄ3N9n Lp; } Wr;:4&<`IV?w`'ZOU>ׄCdkI b(ĂM?^?z&RylWHVO9")$rʟfMs?Y'YFrA0@A]:oW.e1"گC`}`a=`,,n1>aKcVO{;U7Rj-lD Rz۪Y&FFL,!0]yv̴)sjw3tBXn"4 #CT10߀ »',[N@5a#CkTϹf16#>,,5̿n{x%JXtVc_VBD  +)!ۚRWj[V5:Dme|-nԦ4v}{"J**áb41P̝ȼ&3}QJt(H.V/B!ƙ#6י  ~Ҧ:5?KvQz%6 hR$>B f0ڿcB>:HhANm=dӈ%MҏFٚ1Q>;S\aR,SrBT[~vc^0(3"#6 폺O̧JN ˻H`CIr>b@!P4]4 {|UȀTJxW![ B.̛gtHaȺnJ|W*B\~A΍wVJՏ\nLD('@"!kX&8n7E AWΦ~}&|2K{"wJi7 ̃5uiȾ, ?􀂄p|U%$aO`$VEXY>x[]~i^dtFPyQ#R h@ȭ3抇w'ſ:tFgG"fQO4l#vR!-U[i#HXݕ6HM]<N*&&w ;mYc6aQzkR j`1?w0=ӑ$Nd=Mqk8+pz .qǵ(`_ՙ,F5e l ZZdm "$ gE( sӰЅFuזx2= + Ͼֱw\K׳q۶ݶ/{5)BA +9p K(Q'V[whVƧP endstream endobj -613 0 obj +615 0 obj << /Length1 2086 /Length2 14519 @@ -7449,7 +7442,7 @@ J {McKa_K@Am%ɝ^ P׏/vZ4.ǺYՉ߈ЙT;OAbtWMzޞg@cN߬@{mK AfF'3N7̷u;ue~PO69A(QMvt%(M}swPӵ,CKۣTV.;xvpDŽ#mMeWJX4HswP>Oд@ w_93/ endstream endobj -624 0 obj +625 0 obj << /Length1 2717 /Length2 23393 @@ -8084,7 +8077,7 @@ V, 8ǁ1Y}M~2w^fǸMI/,3=(5ǩcCuTP!C+QSf +Y kL1bV\ĠO=ڋC!X!͋1=ӝx>sJsecnOf iD q K @ _q߯Н\>3$GO ;PT:LZ˄"C1/1-6z,efb.K;9ZP?ljXigR%(W635EZqZ֣ezcyg! 2EMR}Z~;r`]{_ IyO!JZ:>3f(R4}Afh,M'6ܭLia'4Anr 2vl@P?C+7;uױ^`IAsۮ(\k^0P?=˼{.~4,.}Nm*L%~ W/q>*:C¬^oĪcO=|,7l0ѳq Ą-@Mbǜ7iFCAlL( PGIݗk endstream endobj -636 0 obj +637 0 obj << /Length1 2278 /Length2 19476 @@ -8711,7 +8704,7 @@ ZPQb \ r2dqw.pd;`h"џ>H H+-`Mqfpiw/e20N"AQqv8tuT.WZc;}F/vwN$;ߋde~`Y8Yl/IS1a6H^ް}4M6((iKB!_u3_aLtw29bWSM5Br 9\;})ܢe7P 26ֲ>UA1oB9nx> hK 6˼* endstream endobj -638 0 obj +639 0 obj << /Length1 1805 /Length2 11857 @@ -8839,7 +8832,7 @@ R7 YS@tb0+rJnl}IFR7 \![<1/C=be]ـ8E3WNM(Ȳ0>,!$yٕbu1em׷?M*29$JE#iS8Gr;A&FI߈!OBn+>c0;g;;8Ta6R@iP^9,1 bEr2N:}-օg2a_MoDJX WSo9@*0KWRJx-wy`ΛvW%Up},(`Fr!5N [.# endstream endobj -640 0 obj +641 0 obj << /Length1 2784 /Length2 20020 @@ -9054,7 +9047,7 @@ l nwsU75d endstream endobj -642 0 obj +643 0 obj << /Length1 1306 /Length2 1345 @@ -9104,25 +9097,40 @@ currentfile eexec jY r["Nh,KC"m` \338t5(;LrS Ua{Pjx$ǔ(mR ֖ alC_-cI#g6R2ѷE09Vm4w%{-Oֆ@ѷoBJG5 rgH(ütiJ&lR:UF,/SĈfՁ: P8A9ӨVq5;ӜΒzAuuw$A^Y M/ ^v" endstream endobj -615 0 obj +614 0 obj << /Type /ObjStm /N 100 -/First 905 -/Length 16291 +/First 909 +/Length 16579 >> stream -614 0 617 344 619 653 621 974 623 1197 625 1445 627 1992 629 2342 631 2568 633 2798 -635 3170 637 3422 639 3810 641 4090 643 4663 175 4875 124 5014 137 5153 347 5293 195 5431 -333 5570 328 5708 136 5846 126 5984 334 6122 332 6258 329 6394 331 6532 275 6668 125 6807 -225 6946 330 7085 127 7223 196 7335 281 7447 352 7559 423 7671 482 7783 513 7895 556 8007 -587 8119 644 8199 645 8312 646 8401 647 8466 116 8534 112 8606 108 8692 104 8778 100 8863 -96 8934 92 9017 88 9099 84 9181 80 9263 76 9345 72 9427 68 9496 64 9616 60 9672 -56 9790 52 9859 48 9941 44 10010 40 10128 36 10197 32 10279 28 10361 24 10443 20 10512 -16 10630 12 10711 8 10791 4 10856 648 10948 649 11116 650 11273 651 11473 652 11680 653 11913 -654 12127 655 12329 656 12514 657 12680 658 12845 659 13008 660 13171 661 13336 662 13500 663 13662 -664 13824 665 14000 666 14177 667 14392 668 14607 669 14809 670 14974 671 15065 672 15174 673 15280 -% 614 0 obj +613 0 616 364 618 708 620 1017 622 1338 624 1561 626 1809 628 2356 630 2706 632 2932 +634 3162 636 3534 638 3786 640 4174 642 4454 644 5027 175 5239 124 5378 137 5517 347 5657 +195 5795 333 5934 328 6072 136 6210 126 6348 334 6486 332 6622 329 6758 331 6896 275 7032 +125 7171 225 7310 330 7449 127 7587 196 7699 281 7811 352 7923 424 8035 483 8147 514 8259 +557 8371 588 8483 645 8563 646 8676 647 8765 648 8830 116 8898 112 8970 108 9056 104 9142 +100 9227 96 9298 92 9381 88 9463 84 9545 80 9627 76 9709 72 9791 68 9860 64 9980 +60 10036 56 10154 52 10223 48 10305 44 10374 40 10492 36 10561 32 10643 28 10725 24 10807 +20 10876 16 10994 12 11075 8 11155 4 11220 649 11312 650 11480 651 11637 652 11837 653 12044 +654 12277 655 12491 656 12693 657 12882 658 13049 659 13214 660 13378 661 13543 662 13706 663 13869 +664 14032 665 14191 666 14368 667 14544 668 14750 669 14965 670 15180 671 15345 672 15454 673 15563 +% 613 0 obj +<< +/Type /FontDescriptor +/FontName /ZNEEDW+CMBX12 +/Flags 4 +/FontBBox [-53 -251 1139 750] +/Ascent 694 +/CapHeight 686 +/Descent -194 +/ItalicAngle 0 +/StemV 109 +/XHeight 444 +/CharSet (/A/B/C/D/E/F/G/H/I/L/M/O/P/R/S/U/a/b/c/d/e/eight/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/o/one/p/period/q/quoteright/r/s/seven/six/t/three/two/u/v/w/x/y) +/FontFile 612 0 R +>> +% 616 0 obj << /Type /FontDescriptor /FontName /PXRLEF+CMCSC10 @@ -9135,9 +9143,9 @@ stream /StemV 72 /XHeight 431 /CharSet (/A/B/C/D/E/G/I/L/M/O/P/R/S/U/a/b/c/d/e/eight/f/five/four/g/h/hyphen/i/k/l/m/n/o/one/p/parenleft/quoteright/r/s/six/t/three/two/u/v/w/y) -/FontFile 613 0 R +/FontFile 615 0 R >> -% 617 0 obj +% 618 0 obj << /Type /FontDescriptor /FontName /YJJMFD+CMEX10 @@ -9150,9 +9158,9 @@ stream /StemV 47 /XHeight 431 /CharSet (/braceleftbigg/bracerightbigg/parenleftbig/parenrightbig/radicalBig/summationdisplay/summationtext) -/FontFile 616 0 R +/FontFile 617 0 R >> -% 619 0 obj +% 620 0 obj << /Type /FontDescriptor /FontName /VFYBNB+CMMI10 @@ -9165,9 +9173,9 @@ stream /StemV 72 /XHeight 431 /CharSet (/A/B/D/I/L/M/P/R/S/U/a/b/comma/e/greater/i/j/k/l/less/m/n/o/omega/p/period/r/rho/slash/t/theta/u/v/w/x/y/z) -/FontFile 618 0 R +/FontFile 619 0 R >> -% 621 0 obj +% 622 0 obj << /Type /FontDescriptor /FontName /PNUTJM+CMMI6 @@ -9180,9 +9188,9 @@ stream /StemV 85 /XHeight 431 /CharSet (/comma/i/k) -/FontFile 620 0 R +/FontFile 621 0 R >> -% 623 0 obj +% 624 0 obj << /Type /FontDescriptor /FontName /TWBVYQ+CMMI8 @@ -9195,9 +9203,9 @@ stream /StemV 78 /XHeight 431 /CharSet (/A/C/F/S/T/comma/e/i/j/k/l/m/n/r/v) -/FontFile 622 0 R +/FontFile 623 0 R >> -% 625 0 obj +% 626 0 obj << /Type /FontDescriptor /FontName /DKEMOU+CMR10 @@ -9210,9 +9218,9 @@ stream /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/Omega/P/R/S/T/U/V/W/X/Y/a/b/bracketleft/bracketright/c/caron/colon/comma/d/dieresis/e/eight/endash/equal/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/macron/n/nine/o/one/p/parenleft/parenright/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 624 0 R +/FontFile 625 0 R >> -% 627 0 obj +% 628 0 obj << /Type /FontDescriptor /FontName /SNVSAK+CMR12 @@ -9225,9 +9233,9 @@ stream /StemV 65 /XHeight 431 /CharSet (/A/C/I/J/K/L/N/R/S/U/V/a/colon/comma/d/e/f/fi/g/hyphen/i/l/m/n/o/one/p/period/quotedblleft/quotedblright/r/s/seven/t/three/two/u/v/w/y/zero) -/FontFile 626 0 R +/FontFile 627 0 R >> -% 629 0 obj +% 630 0 obj << /Type /FontDescriptor /FontName /VROLGE+CMR6 @@ -9240,9 +9248,9 @@ stream /StemV 83 /XHeight 431 /CharSet (/one/plus/three) -/FontFile 628 0 R +/FontFile 629 0 R >> -% 631 0 obj +% 632 0 obj << /Type /FontDescriptor /FontName /ABQBBP+CMR8 @@ -9255,9 +9263,9 @@ stream /StemV 76 /XHeight 431 /CharSet (/equal/one/plus/two) -/FontFile 630 0 R +/FontFile 631 0 R >> -% 633 0 obj +% 634 0 obj << /Type /FontDescriptor /FontName /NSLWFJ+CMSY10 @@ -9270,9 +9278,9 @@ stream /StemV 40 /XHeight 431 /CharSet (/N/bar/bardbl/braceleft/braceright/bullet/element/equivalence/floorleft/floorright/greaterequal/minus/negationslash/propersubset/propersuperset/radical/union) -/FontFile 632 0 R +/FontFile 633 0 R >> -% 635 0 obj +% 636 0 obj << /Type /FontDescriptor /FontName /JHSYKM+CMSY8 @@ -9285,9 +9293,9 @@ stream /StemV 46 /XHeight 431 /CharSet (/infinity/minus/multiply/negationslash) -/FontFile 634 0 R +/FontFile 635 0 R >> -% 637 0 obj +% 638 0 obj << /Type /FontDescriptor /FontName /FPIMLF+CMTI10 @@ -9300,9 +9308,9 @@ stream /StemV 68 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/I/K/L/M/N/O/P/R/S/T/U/V/a/b/c/colon/comma/d/e/eight/f/ff/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/period/q/quoteright/r/s/t/three/two/u/v/w/x/y/z/zero) -/FontFile 636 0 R +/FontFile 637 0 R >> -% 639 0 obj +% 640 0 obj << /Type /FontDescriptor /FontName /IQNFIV+CMTI12 @@ -9315,9 +9323,9 @@ stream /StemV 63 /XHeight 431 /CharSet (/A/B/D/L/M/P/S/T/a/b/c/d/e/f/g/h/hyphen/i/k/l/m/n/o/p/r/s/t/u/v/y) -/FontFile 638 0 R +/FontFile 639 0 R >> -% 641 0 obj +% 642 0 obj << /Type /FontDescriptor /FontName /EDERWC+CMTT10 @@ -9330,9 +9338,9 @@ stream /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/asciitilde/asterisk/at/b/backslash/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotedbl/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) -/FontFile 640 0 R +/FontFile 641 0 R >> -% 643 0 obj +% 644 0 obj << /Type /FontDescriptor /FontName /QDTWCG+MSBM10 @@ -9345,262 +9353,262 @@ stream /StemV 40 /XHeight 463 /CharSet (/R) -/FontFile 642 0 R +/FontFile 643 0 R >> % 175 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GSGTRH+CMBX10 -/FontDescriptor 610 0 R +/FontDescriptor 611 0 R /FirstChar 12 /LastChar 119 -/Widths 603 0 R +/Widths 604 0 R >> % 124 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZNEEDW+CMBX12 -/FontDescriptor 612 0 R +/FontDescriptor 613 0 R /FirstChar 12 /LastChar 121 -/Widths 608 0 R +/Widths 609 0 R >> % 137 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PXRLEF+CMCSC10 -/FontDescriptor 614 0 R +/FontDescriptor 616 0 R /FirstChar 39 /LastChar 121 -/Widths 604 0 R +/Widths 605 0 R >> % 347 0 obj << /Type /Font /Subtype /Type1 /BaseFont /YJJMFD+CMEX10 -/FontDescriptor 617 0 R +/FontDescriptor 618 0 R /FirstChar 0 /LastChar 113 -/Widths 592 0 R +/Widths 593 0 R >> % 195 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VFYBNB+CMMI10 -/FontDescriptor 619 0 R +/FontDescriptor 620 0 R /FirstChar 18 /LastChar 122 -/Widths 602 0 R +/Widths 603 0 R >> % 333 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PNUTJM+CMMI6 -/FontDescriptor 621 0 R +/FontDescriptor 622 0 R /FirstChar 59 /LastChar 107 -/Widths 594 0 R +/Widths 595 0 R >> % 328 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TWBVYQ+CMMI8 -/FontDescriptor 623 0 R +/FontDescriptor 624 0 R /FirstChar 59 /LastChar 118 -/Widths 599 0 R +/Widths 600 0 R >> % 136 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DKEMOU+CMR10 -/FontDescriptor 625 0 R +/FontDescriptor 626 0 R /FirstChar 10 /LastChar 127 -/Widths 605 0 R +/Widths 606 0 R >> % 126 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SNVSAK+CMR12 -/FontDescriptor 627 0 R +/FontDescriptor 628 0 R /FirstChar 12 /LastChar 121 -/Widths 606 0 R +/Widths 607 0 R >> % 334 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VROLGE+CMR6 -/FontDescriptor 629 0 R +/FontDescriptor 630 0 R /FirstChar 43 /LastChar 51 -/Widths 593 0 R +/Widths 594 0 R >> % 332 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ABQBBP+CMR8 -/FontDescriptor 631 0 R +/FontDescriptor 632 0 R /FirstChar 43 /LastChar 61 -/Widths 595 0 R +/Widths 596 0 R >> % 329 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NSLWFJ+CMSY10 -/FontDescriptor 633 0 R +/FontDescriptor 634 0 R /FirstChar 0 /LastChar 112 -/Widths 598 0 R +/Widths 599 0 R >> % 331 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JHSYKM+CMSY8 -/FontDescriptor 635 0 R +/FontDescriptor 636 0 R /FirstChar 0 /LastChar 54 -/Widths 596 0 R +/Widths 597 0 R >> % 275 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FPIMLF+CMTI10 -/FontDescriptor 637 0 R +/FontDescriptor 638 0 R /FirstChar 11 /LastChar 122 -/Widths 600 0 R +/Widths 601 0 R >> % 125 0 obj << /Type /Font /Subtype /Type1 /BaseFont /IQNFIV+CMTI12 -/FontDescriptor 639 0 R +/FontDescriptor 640 0 R /FirstChar 45 /LastChar 121 -/Widths 607 0 R +/Widths 608 0 R >> % 225 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EDERWC+CMTT10 -/FontDescriptor 641 0 R +/FontDescriptor 642 0 R /FirstChar 33 /LastChar 126 -/Widths 601 0 R +/Widths 602 0 R >> % 330 0 obj << /Type /Font /Subtype /Type1 /BaseFont /QDTWCG+MSBM10 -/FontDescriptor 643 0 R +/FontDescriptor 644 0 R /FirstChar 82 /LastChar 82 -/Widths 597 0 R +/Widths 598 0 R >> % 127 0 obj << /Type /Pages /Count 6 -/Parent 644 0 R +/Parent 645 0 R /Kids [119 0 R 129 0 R 133 0 R 139 0 R 171 0 R 178 0 R] >> % 196 0 obj << /Type /Pages /Count 6 -/Parent 644 0 R +/Parent 645 0 R /Kids [192 0 R 216 0 R 222 0 R 240 0 R 262 0 R 272 0 R] >> % 281 0 obj << /Type /Pages /Count 6 -/Parent 644 0 R +/Parent 645 0 R /Kids [278 0 R 283 0 R 288 0 R 292 0 R 309 0 R 324 0 R] >> % 352 0 obj << /Type /Pages /Count 6 -/Parent 644 0 R -/Kids [344 0 R 359 0 R 367 0 R 380 0 R 399 0 R 412 0 R] +/Parent 645 0 R +/Kids [344 0 R 359 0 R 368 0 R 381 0 R 400 0 R 413 0 R] >> -% 423 0 obj +% 424 0 obj << /Type /Pages /Count 6 -/Parent 644 0 R -/Kids [420 0 R 426 0 R 432 0 R 438 0 R 450 0 R 462 0 R] +/Parent 645 0 R +/Kids [421 0 R 427 0 R 433 0 R 439 0 R 451 0 R 463 0 R] >> -% 482 0 obj +% 483 0 obj << /Type /Pages /Count 6 -/Parent 644 0 R -/Kids [479 0 R 484 0 R 489 0 R 494 0 R 500 0 R 504 0 R] +/Parent 645 0 R +/Kids [480 0 R 485 0 R 490 0 R 495 0 R 501 0 R 505 0 R] >> -% 513 0 obj +% 514 0 obj << /Type /Pages /Count 6 -/Parent 645 0 R -/Kids [510 0 R 515 0 R 525 0 R 532 0 R 542 0 R 547 0 R] +/Parent 646 0 R +/Kids [511 0 R 516 0 R 526 0 R 533 0 R 543 0 R 548 0 R] >> -% 556 0 obj +% 557 0 obj << /Type /Pages /Count 6 -/Parent 645 0 R -/Kids [553 0 R 559 0 R 566 0 R 570 0 R 576 0 R 580 0 R] +/Parent 646 0 R +/Kids [554 0 R 560 0 R 567 0 R 571 0 R 577 0 R 581 0 R] >> -% 587 0 obj +% 588 0 obj << /Type /Pages /Count 2 -/Parent 645 0 R -/Kids [584 0 R 589 0 R] +/Parent 646 0 R +/Kids [585 0 R 590 0 R] >> -% 644 0 obj +% 645 0 obj << /Type /Pages /Count 36 -/Parent 646 0 R -/Kids [127 0 R 196 0 R 281 0 R 352 0 R 423 0 R 482 0 R] +/Parent 647 0 R +/Kids [127 0 R 196 0 R 281 0 R 352 0 R 424 0 R 483 0 R] >> -% 645 0 obj +% 646 0 obj << /Type /Pages /Count 14 -/Parent 646 0 R -/Kids [513 0 R 556 0 R 587 0 R] +/Parent 647 0 R +/Kids [514 0 R 557 0 R 588 0 R] >> -% 646 0 obj +% 647 0 obj << /Type /Pages /Count 50 -/Kids [644 0 R 645 0 R] +/Kids [645 0 R 646 0 R] >> -% 647 0 obj +% 648 0 obj << /Type /Outlines /First 4 0 R @@ -9837,149 +9845,144 @@ stream << /Title 5 0 R /A 1 0 R -/Parent 647 0 R +/Parent 648 0 R /First 8 0 R /Last 116 0 R /Count -11 >> -% 648 0 obj +% 649 0 obj << -/Names [(Doc-Start) 123 0 R (Item.1) 348 0 R (Item.10) 465 0 R (Item.11) 466 0 R (Item.12) 467 0 R (Item.13) 468 0 R] +/Names [(Doc-Start) 123 0 R (Item.1) 348 0 R (Item.10) 466 0 R (Item.11) 467 0 R (Item.12) 468 0 R (Item.13) 469 0 R] /Limits [(Doc-Start) (Item.13)] >> -% 649 0 obj +% 650 0 obj << -/Names [(Item.2) 349 0 R (Item.3) 350 0 R (Item.4) 383 0 R (Item.5) 384 0 R (Item.6) 385 0 R (Item.7) 386 0 R] +/Names [(Item.2) 349 0 R (Item.3) 350 0 R (Item.4) 384 0 R (Item.5) 385 0 R (Item.6) 386 0 R (Item.7) 387 0 R] /Limits [(Item.2) (Item.7)] >> -% 650 0 obj +% 651 0 obj << -/Names [(Item.8) 387 0 R (Item.9) 388 0 R (appendix.A) 111 0 R (cite.BREZINA_VANEK) 201 0 R (cite.Briggs2000) 197 0 R (cite.CAI_SARKIS) 370 0 R] +/Names [(Item.8) 388 0 R (Item.9) 389 0 R (appendix.A) 111 0 R (cite.BREZINA_VANEK) 201 0 R (cite.Briggs2000) 197 0 R (cite.CAI_SARKIS) 371 0 R] /Limits [(Item.8) (cite.CAI_SARKIS)] >> -% 651 0 obj +% 652 0 obj << /Names [(cite.MLD2P4_TOMS) 218 0 R (cite.MPI1) 250 0 R (cite.MPI2) 249 0 R (cite.MUMPS) 268 0 R (cite.Notay2008) 200 0 R (cite.PSBLAS3) 204 0 R] /Limits [(cite.MLD2P4_TOMS) (cite.PSBLAS3)] >> -% 652 0 obj +% 653 0 obj << /Names [(cite.PSBLASGUIDE) 251 0 R (cite.SUPERLU) 269 0 R (cite.SUPERLUDIST) 270 0 R (cite.Saad_book) 335 0 R (cite.Stuben_01) 198 0 R (cite.TUMINARO_TONG) 313 0 R] /Limits [(cite.PSBLASGUIDE) (cite.TUMINARO_TONG)] >> -% 653 0 obj +% 654 0 obj << /Names [(cite.UMFPACK) 267 0 R (cite.VANEK_MANDEL_BREZINA) 202 0 R (cite.aaecc_07) 315 0 R (cite.apnum_07) 316 0 R (cite.blas1) 248 0 R (cite.blas2) 247 0 R] /Limits [(cite.UMFPACK) (cite.blas2)] >> -% 654 0 obj +% 655 0 obj << /Names [(cite.blas3) 246 0 R (cite.dd2_96) 199 0 R (cite.para_04) 314 0 R (cite.psblas_00) 203 0 R (equation.1.1) 194 0 R (equation.4.2) 327 0 R] /Limits [(cite.blas3) (equation.4.2)] >> -% 655 0 obj -<< -/Names [(equation.4.3) 351 0 R (equation.4.4) 362 0 R (figure.1) 336 0 R (figure.2) 402 0 R (figure.3) 415 0 R (figure.4) 416 0 R] -/Limits [(equation.4.3) (figure.4)] ->> % 656 0 obj << -/Names [(figure.5) 417 0 R (page.1) 122 0 R (page.10) 294 0 R (page.11) 311 0 R (page.12) 326 0 R (page.13) 346 0 R] -/Limits [(figure.5) (page.13)] +/Names [(equation.4.3) 351 0 R (equation.4.4) 362 0 R (equation.4.5) 363 0 R (figure.1) 336 0 R (figure.2) 403 0 R (figure.3) 416 0 R] +/Limits [(equation.4.3) (figure.3)] >> % 657 0 obj << -/Names [(page.14) 361 0 R (page.15) 369 0 R (page.16) 382 0 R (page.17) 401 0 R (page.18) 414 0 R (page.19) 422 0 R] -/Limits [(page.14) (page.19)] +/Names [(figure.4) 417 0 R (figure.5) 418 0 R (page.1) 122 0 R (page.10) 294 0 R (page.11) 311 0 R (page.12) 326 0 R] +/Limits [(figure.4) (page.12)] >> % 658 0 obj << -/Names [(page.2) 131 0 R (page.20) 428 0 R (page.21) 434 0 R (page.22) 440 0 R (page.23) 452 0 R (page.24) 464 0 R] -/Limits [(page.2) (page.24)] +/Names [(page.13) 346 0 R (page.14) 361 0 R (page.15) 370 0 R (page.16) 383 0 R (page.17) 402 0 R (page.18) 415 0 R] +/Limits [(page.13) (page.18)] >> % 659 0 obj << -/Names [(page.25) 481 0 R (page.26) 486 0 R (page.27) 491 0 R (page.28) 496 0 R (page.29) 502 0 R (page.3) 224 0 R] -/Limits [(page.25) (page.3)] +/Names [(page.19) 423 0 R (page.2) 131 0 R (page.20) 429 0 R (page.21) 435 0 R (page.22) 441 0 R (page.23) 453 0 R] +/Limits [(page.19) (page.23)] >> % 660 0 obj << -/Names [(page.30) 506 0 R (page.31) 512 0 R (page.32) 517 0 R (page.33) 527 0 R (page.34) 534 0 R (page.35) 544 0 R] -/Limits [(page.30) (page.35)] +/Names [(page.24) 465 0 R (page.25) 482 0 R (page.26) 487 0 R (page.27) 492 0 R (page.28) 497 0 R (page.29) 503 0 R] +/Limits [(page.24) (page.29)] >> % 661 0 obj << -/Names [(page.36) 549 0 R (page.37) 555 0 R (page.38) 561 0 R (page.39) 568 0 R (page.4) 242 0 R (page.40) 572 0 R] -/Limits [(page.36) (page.40)] +/Names [(page.3) 224 0 R (page.30) 507 0 R (page.31) 513 0 R (page.32) 518 0 R (page.33) 528 0 R (page.34) 535 0 R] +/Limits [(page.3) (page.34)] >> % 662 0 obj << -/Names [(page.41) 578 0 R (page.42) 582 0 R (page.43) 586 0 R (page.44) 591 0 R (page.5) 264 0 R (page.6) 274 0 R] -/Limits [(page.41) (page.6)] +/Names [(page.35) 545 0 R (page.36) 550 0 R (page.37) 556 0 R (page.38) 562 0 R (page.39) 569 0 R (page.4) 242 0 R] +/Limits [(page.35) (page.4)] >> % 663 0 obj << -/Names [(page.7) 280 0 R (page.8) 285 0 R (page.9) 290 0 R (page.i) 135 0 R (page.ii) 141 0 R (page.iii) 173 0 R] -/Limits [(page.7) (page.iii)] +/Names [(page.40) 573 0 R (page.41) 579 0 R (page.42) 583 0 R (page.43) 587 0 R (page.44) 592 0 R (page.5) 264 0 R] +/Limits [(page.40) (page.5)] >> % 664 0 obj << -/Names [(page.iv) 180 0 R (section*.1) 7 0 R (section*.2) 174 0 R (section*.3) 115 0 R (section.1) 11 0 R (section.2) 15 0 R] -/Limits [(page.iv) (section.2)] +/Names [(page.6) 274 0 R (page.7) 280 0 R (page.8) 285 0 R (page.9) 290 0 R (page.i) 135 0 R (page.ii) 141 0 R] +/Limits [(page.6) (page.ii)] >> % 665 0 obj << -/Names [(section.3) 19 0 R (section.4) 43 0 R (section.5) 59 0 R (section.6) 67 0 R (section.7) 103 0 R (section.8) 107 0 R] -/Limits [(section.3) (section.8)] +/Names [(page.iii) 173 0 R (page.iv) 180 0 R (section*.1) 7 0 R (section*.2) 174 0 R (section*.3) 115 0 R (section.1) 11 0 R] +/Limits [(page.iii) (section.1)] >> % 666 0 obj << -/Names [(subsection.3.1) 23 0 R (subsection.3.2) 27 0 R (subsection.3.3) 31 0 R (subsection.3.4) 35 0 R (subsection.3.5) 39 0 R (subsection.4.1) 47 0 R] -/Limits [(subsection.3.1) (subsection.4.1)] +/Names [(section.2) 15 0 R (section.3) 19 0 R (section.4) 43 0 R (section.5) 59 0 R (section.6) 67 0 R (section.7) 103 0 R] +/Limits [(section.2) (section.7)] >> % 667 0 obj << -/Names [(subsection.4.2) 51 0 R (subsection.4.3) 55 0 R (subsection.5.1) 63 0 R (subsection.6.1) 71 0 R (subsection.6.2) 75 0 R (subsection.6.3) 79 0 R] -/Limits [(subsection.4.2) (subsection.6.3)] +/Names [(section.8) 107 0 R (subsection.3.1) 23 0 R (subsection.3.2) 27 0 R (subsection.3.3) 31 0 R (subsection.3.4) 35 0 R (subsection.3.5) 39 0 R] +/Limits [(section.8) (subsection.3.5)] >> % 668 0 obj << -/Names [(subsection.6.4) 83 0 R (subsection.6.5) 87 0 R (subsection.6.6) 91 0 R (subsection.6.7) 95 0 R (subsection.6.8) 99 0 R (table.1) 389 0 R] -/Limits [(subsection.6.4) (table.1)] +/Names [(subsection.4.1) 47 0 R (subsection.4.2) 51 0 R (subsection.4.3) 55 0 R (subsection.5.1) 63 0 R (subsection.6.1) 71 0 R (subsection.6.2) 75 0 R] +/Limits [(subsection.4.1) (subsection.6.2)] >> % 669 0 obj << -/Names [(table.2) 390 0 R (table.3) 492 0 R (table.4) 497 0 R (table.5) 470 0 R (table.6) 507 0 R (table.7) 469 0 R] -/Limits [(table.2) (table.7)] +/Names [(subsection.6.3) 79 0 R (subsection.6.4) 83 0 R (subsection.6.5) 87 0 R (subsection.6.6) 91 0 R (subsection.6.7) 95 0 R (subsection.6.8) 99 0 R] +/Limits [(subsection.6.3) (subsection.6.8)] >> % 670 0 obj << -/Names [(table.8) 391 0 R (title.0) 3 0 R] -/Limits [(table.8) (title.0)] +/Names [(table.1) 390 0 R (table.2) 391 0 R (table.3) 493 0 R (table.4) 498 0 R (table.5) 471 0 R (table.6) 508 0 R] +/Limits [(table.1) (table.6)] >> % 671 0 obj << -/Kids [648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R] -/Limits [(Doc-Start) (cite.blas2)] +/Names [(table.7) 470 0 R (table.8) 392 0 R (title.0) 3 0 R] +/Limits [(table.7) (title.0)] >> % 672 0 obj << -/Kids [654 0 R 655 0 R 656 0 R 657 0 R 658 0 R 659 0 R] -/Limits [(cite.blas3) (page.3)] +/Kids [649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R] +/Limits [(Doc-Start) (cite.blas2)] >> % 673 0 obj << -/Kids [660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R] -/Limits [(page.30) (section.8)] +/Kids [655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R] +/Limits [(cite.blas3) (page.29)] >> endstream endobj -679 0 obj +680 0 obj << /Title (MultiLevel Domain Decomposition Parallel Preconditioners Package based on PSBLAS, V. 2.1) /Subject (MultiLevel Domain Decomposition Parallel Preconditioners Package) /Keywords (Parallel Numerical Software, Algebraic Multilevel Preconditioners, Sparse Iterative Solvers, PSBLAS, MPI) /Creator (pdfLaTeX) /Producer ($Id: userguide.tex 2008-04-08 Pasqua D'Ambra, Daniela di Serafino, Salvatore Filippone$) /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.17)/Keywords() -/CreationDate (D:20170724110836+01'00') -/ModDate (D:20170724110836+01'00') +/CreationDate (D:20170725140354+01'00') +/ModDate (D:20170725140354+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016) kpathsea version 6.2.2) >> @@ -9987,59 +9990,65 @@ endobj 675 0 obj << /Type /ObjStm -/N 4 -/First 30 -/Length 429 +/N 5 +/First 38 +/Length 537 >> stream -674 0 676 103 677 193 678 226 +674 0 676 105 677 203 678 293 679 326 % 674 0 obj << -/Kids [666 0 R 667 0 R 668 0 R 669 0 R 670 0 R] -/Limits [(subsection.3.1) (title.0)] +/Kids [661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 666 0 R] +/Limits [(page.3) (section.7)] >> % 676 0 obj << -/Kids [671 0 R 672 0 R 673 0 R 674 0 R] -/Limits [(Doc-Start) (title.0)] +/Kids [667 0 R 668 0 R 669 0 R 670 0 R 671 0 R] +/Limits [(section.8) (title.0)] >> % 677 0 obj << -/Dests 676 0 R +/Kids [672 0 R 673 0 R 674 0 R 676 0 R] +/Limits [(Doc-Start) (title.0)] >> % 678 0 obj << +/Dests 677 0 R +>> +% 679 0 obj +<< /Type /Catalog -/Pages 646 0 R -/Outlines 647 0 R -/Names 677 0 R +/Pages 647 0 R +/Outlines 648 0 R +/Names 678 0 R /PageMode/UseOutlines/PageLabels<>2<>6<>]>> /OpenAction 118 0 R >> endstream endobj -680 0 obj +681 0 obj << /Type /XRef -/Index [0 681] -/Size 681 +/Index [0 682] +/Size 682 /W [1 3 1] -/Root 678 0 R -/Info 679 0 R -/ID [<083069AD8BD8BBF9B7F99C6A9AB05277> <083069AD8BD8BBF9B7F99C6A9AB05277>] -/Length 3405 +/Root 679 0 R +/Info 680 0 R +/ID [ ] +/Length 3410 >> stream -2i>gIEgHgG'gF;gE  -<gD  KgC LgB^gA_g@8 g?8g>8g=80g<8@g;8Sg:  g9!"g8#$g7%&_g6'(g5)* g4+,g3-.g2/0g112"g034+g/56/g.783g-9:;?<=gggg B@AFCDggIGKHKLMNOPQRSTUVWXYZ[\]^_`abcJg8S    - Tgg!6MKI5OED !"s;%$(#&g*+,-./1345678=):029>BGFLC@ABCDEGH?M>nJFI<4=HPN~OgRTQֻSg"WUVY[XZ`\ ]c8888888888 8 -b8 a8 dN78:88888888o088gggggggJ8"88888 88'88!g8#8$8%8&g#8)8*8+8,8-818(8.8/8485838782@869898:8;8<8=8>8J8K8G88"\8?8A8B8C8D8E8F8R4U8L8M8N8O8P8I8T8HC8Q8c8V8W8X8Y8Z8[8\8]8_8Uh%8^8a8`18bg$9   - k !"#$%&'-()*+,QH8=>?@A/1.-0g%528X37;6GU9:D<p BCFIE7GMJKLORNqPg&VSݽTYZ[\]X`W^bca}  A - MFng't #|!&$'%)(,'*0-b.?12g(P@4AQRSTUVWXYZ[\]^_`a:b8cg'g g[gzgg gFrgdg#g g -g /g Sg igg)g*g+g,gJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg[g\g]g^g_g`gagbgc& +2i>fJEfIfH'fG;fF  +<fE  KfD LfC^fB_fA8 f@8f?8f>81f=8Af<8Tf;  f:!"f9#$f8%&`f7'(f6)* f5+,f4-.f3/0f212#f134,f0560f/784f.9:;?<=ffff!B@AFCDffIGKHKLMNOPQRSTUVWXYZ[\]^_`abcJf8S    + Tff"7NLJ6PFE !"s<%$(#&f*+,-./1345678=):029?CHGMD@ABCDEGH?M>nJFI=5>IPN~OfRTQֻSf#WUVY[XZ`\ ]c8888888888 8 +b8 a8 O89;88888888o088fff ffffK8"88888 88'878!f8#8$8%8&f$8)8*8+8,8-828(08.8/80858684888387:8:8;8<8=8>8?8K8L8H89"8@8B8C8D8E8F8G8S5V8M8N8O8P8Q8J8U8ID=8R8W8X8Y8Z8[8\8]8^8`8Vh8_8b8a8cf%t +  ӈ !"#$%&'(. m)*+,-RI9>?@AB02/.w1f&63848<7G:;E=pCDGJFHNKLMPSOQf'WTTUZ[\]^YaXX_cbQ8  + AS M}nf(t7 !$|"'%^&*)-(Q+1./@2%3f)QAkBRSTUVWXYZ[\]^_`abqcxf"fcff[fzWff +ifEfd f f +lf 6f f SVfff*f+f,f-fKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf[f\f]f^f_f`fafbfc endstream endobj startxref -589064 +589305 %%EOF diff --git a/docs/src/background.tex b/docs/src/background.tex index d496242f..eae73aee 100644 --- a/docs/src/background.tex +++ b/docs/src/background.tex @@ -1 +1 @@ -\section{Multigrid Background\label{sec:background}} \markboth{\textsc{MLD2P4 User's and Reference Guide}} {\textsc{\ref{sec:background} Multigrid Background}} Multigrid preconditioners, coupled with Krylov iterative solvers, are widely used in the parallel solution of large and sparse linear systems, because of their optimality in the solution of linear systems arising from the discretization of scalar elliptic Partial Differential Equations (PDEs) on regular grids. Optimality, also known as algorithmic scalability, is the property of having a computational cost per iteration that depends linearly on the problem size, and a convergence rate that is independent of the problem size. Multigrid preconditioners are based on a recursive application of a two-grid process consisting of smoother iterations and a coarse-space (or coarse-level) correction. The smoothers may be either basic iterative methods, such as the Jacobi and Gauss-Seidel ones, or more complex subspace-correction methods, such as the Schwarz ones. The coarse-space correction consists of solving, in an appropriately chosen coarse space, the residual equation associated with the approximate solution computed by the smoother, and of using the solution of this equation to correct the previous approximation. The transfer of information between the original (fine) space and the coarse one is performed by using suitable restriction and prolongation operators. The construction of the coarse space and the corresponding transfer operators is carried out by applying a so-called coarsening algorithm to the system matrix. Two main approaches can be used to perform coarsening: the geometric approach, which exploits the knowledge of some physical grid associated with the matrix and requires the user to define transfer operators from the fine to the coarse level and vice versa, and the algebraic approach, which builds the coarse-space correction and the associate transfer operators using only matrix information. The first approach may be difficult when the system comes from discretizations on complex geometries; furthermore, ad hoc one-level smoothers may be required to get an efficient interplay between fine and coarse levels, e.g., when matrices with highly varying coefficients are considered. The second approach performs a fully automatic coarsening and enforces the interplay between fine and coarse level by suitably choosing the coarse space and the coarse-to-fine interpolation (see, e.g., \cite{Briggs2000,Stuben_01,dd2_96} for details.) MLD2P4 uses a pure algebraic approach, based on the smoothed aggregation algorithm \cite{BREZINA_VANEK,VANEK_MANDEL_BREZINA}, for building the sequence of coarse matrices and transfer operators, starting from the original one. A decoupled version of this algorithm is implemented, where the smoothed aggregation is applied locally to each submatrix \cite{TUMINARO_TONG}. A brief description of the AMG preconditioners implemented in MLD2P4 is given in Sections~\ref{sec:multilevel}-\ref{sec:smoothers}. For further details the reader is referred to \cite{para_04,aaecc_07,apnum_07,MLD2P4_TOMS}. We note that optimal multigrid preconditioners do not necessarily correspond to minimum execution times in a parallel setting. Indeed, to obtain effective parallel multigrid preconditioners, a tradeoff between the optimality and the cost of building and applying the smoothers and the coarse-space corrections must be achieved. Effective parallel preconditioners require algorithmic scalability to be coupled with implementation scalability, i.e., a computational cost per iteration which remains (almost) constant as the number of parallel processors increases. \subsection{AMG preconditioners\label{sec:multilevel}} In order to describe the AMG preconditioners available in MLD2P4, we consider a linear system \begin{equation} Ax=b, \label{eq:system} \end{equation} where $A=(a_{ij}) \in \mathbb{R}^{n \times n}$ is a nonsingular sparse matrix; for ease of presentation we assume $A$ is real, but the results are valid for the complex case as well. Let us assume as finest index space the set of row (column) indices of $A$, i.e., $\Omega = \{1, 2, \ldots, n\}$. Any algebraic multilevel preconditioners implemented in MLD2P4 generates a hierarchy of index spaces and a corresponding hierarchy of matrices, \[ \Omega^1 \equiv \Omega \supset \Omega^2 \supset \ldots \supset \Omega^{nlev}, \quad A^1 \equiv A, A^2, \ldots, A^{nlev}, \] by using the information contained in $A$, without assuming any knowledge of the geometry of the problem from which $A$ originates. A vector space $\mathbb{R}^{n_{k}}$ is associated with $\Omega^k$, where $n_k$ is the size of $\Omega^k$. For all $k < nlev$, a restriction operator and a prolongation one are built, which connect two levels $k$ and $k+1$: $$ P^k \in \mathbb{R}^{n_k \times n_{k+1}}, \quad R^k \in \mathbb{R}^{n_{k+1}\times n_k}; $$ %\[ % P^k: \mathbb{R}^{n_{k+1}} \longrightarrow \mathbb{R}^{n_k}, \quad % R^k: \mathbb{R}^{n_k} \longrightarrow \mathbb{R}^{n_{k+1}}; %\] the matrix $A^{k+1}$ is computed by using the previous operators according to the Galerkin approach, i.e., $$ A^{k+1}=R^kA^kP^k. $$ $R^k=(P^k)^T$ in the current implementation of MLD2P4. A smoother with iteration matrix $M^k$ is set up at each level $k < nlev$, and a solver is set up at the coarsest level, so that they are ready for application (for example, setting up a solver based on the $LU$ factorization means computing and storing the $L$ and $U$ factors). The construction of the hierarchy of AMG components described so far corresponds to the so-called build phase of the preconditioner. \begin{figure}[t] \begin{center} \framebox{ \begin{minipage}{.85\textwidth} \begin{tabbing} \quad \=\quad \=\quad \=\quad \\[-3mm] procedure V-cycle$\left(k,A^k,b^k,u^k\right)$ \\[2mm] \>if $\left(k \ne nlev \right)$ then \\[1mm] \>\> $u^k = u^k + M^k \left(b^k - A^k u^k\right)$ \\[1mm] \>\> $b^{k+1} = R^{k+1}\left(b^k - A^k u^k\right)$ \\[1mm] \>\> $u^{k+1} =$ V-cycle$\left(k+1,A^{k+1},b^{k+1},0\right)$ \\[1mm] \>\> $u^k = u^k + P^{k+1} u^{k+1}$ \\[1mm] \>\> $u^k = u^k + M^k \left(b^k - A^k u^k\right)$ \\[1mm] \>else \\[1mm] \>\> $u^k = \left(A^k\right)^{-1} b^k$\\[1mm] \>endif \\[1mm] \>return $u^k$ \\[1mm] end \end{tabbing} \end{minipage} } \caption{Application phase of a V-cycle preconditioner.\label{fig:application_alg}} \end{center} \end{figure} The components produced in the build phase may be combined in several ways to obtain different multilevel preconditioners; this is done in the application phase, i.e., in the computation of a vector of type $w=B^{-1}v$, where $B$ denotes the preconditioner, usually within an iteration of a Krylov solver \cite{Saad_book}. An example of such a combination, known as V-cycle, is given in Figure~\ref{fig:application_alg}. In this case, a single iteration of the same smoother is used before and after the the recursive call to the V-cycle (i.e., in the pre-smoothing and post-smoothing phases); however, different choices can be performed. Other cycles can be defined; in MLD2P4, we implemented the standard V-cycle and W-cycle~\cite{Briggs2000}, and a version of the K-cycle described in~\cite{Notay2008}. \subsection{Smoothed Aggregation\label{sec:aggregation}} In order to define the prolongator $P^k$, used to compute the coarse-level matrix $A^{k+1}$, MLD2P4 uses the smoothed aggregation algorithm described in \cite{BREZINA_VANEK,VANEK_MANDEL_BREZINA}. The basic idea of this algorithm is to build a coarse set of indices $\Omega^{k+1}$ by suitably grouping the indices of $\Omega^k$ into disjoint subsets (aggregates), and to define the coarse-to-fine space transfer operator $P^k$ by applying a suitable smoother to a simple piecewise constant prolongation operator, with the aim of improving the quality of the coarse-space correction. Three main steps can be identified in the smoothed aggregation procedure: \begin{enumerate} \item aggregation of the indices of $\Omega^k$ to obtain $\Omega^{k+1}$; \item construction of the prolongator $P^k$; \item application of $P^k$ and $R^k=(P^k)^T$ to build $A^{k+1}$. \end{enumerate} In order to perform the coarsening step, the smoothed aggregation algorithm described in~\cite{VANEK_MANDEL_BREZINA} is used. In this algorithm, each index $j \in \Omega^{k+1}$ corresponds to an aggregate $\Omega^k_j$ of $\Omega^k$, consisting of a suitably chosen index $i \in \Omega^k$ and indices that are (usually) contained in a strongly-coupled neighborood of $i$, i.e., \begin{equation} \label{eq:strongly_coup} \Omega^k_j \subset \mathcal{N}_i^k(\theta) = \left\{ r \in \Omega^k: |a_{ir}^k| > \theta \sqrt{|a_{ii}^ka_{rr}^k|} \right \} \cup \left\{ i \right\}, \end{equation} for a given threshold $\theta \in [0,1]$ (see~\cite{VANEK_MANDEL_BREZINA} for the details). Since this algorithm has a sequential nature, a decoupled version of it is applied, where each processor independently executes the algorithm on the set of indices assigned to it in the initial data distribution. This version is embarrassingly parallel, since it does not require any data communication. On the other hand, it may produce some nonuniform aggregates and is strongly dependent on the number of processors and on the initial partitioning of the matrix $A$. Nevertheless, this parallel algorithm has been chosen for MLD2P4, since it has been shown to produce good results in practice \cite{aaecc_07,apnum_07,TUMINARO_TONG}. The prolongator $P^k$ is built starting from a tentative prolongator $\bar{P}^k \in \mathbb{R}^{n_k \times n_{k+1}}$, defined as $$ \bar{P}^k =(\bar{p}_{ij}^k), \quad \bar{p}_{ij}^k = \left\{ \begin{array}{ll} 1 & \quad \mbox{if} \; i \in \Omega^k_j, \\ 0 & \quad \mbox{otherwise}, \end{array} \right. \label{eq:tent_prol} $$ where $\Omega^k_j$ is the aggregate of $\Omega^k$ corresponding to the index $j \in \Omega^{k+1}$. $P^k$ is obtained by applying to $\bar{P}^k$ a smoother $S^k \in \mathbb{R}^{n_k \times n_k}$: $$ P^k = S^k \bar{P}^k, $$ in order to remove nonsmooth components from the range of the prolongator, and hence to improve the convergence properties of the multi-level method~\cite{BREZINA_VANEK,Stuben_01}. A simple choice for $S^k$ is the damped Jacobi smoother: $$ S^k = I - \omega^k (D^k)^{-1} A^k_F , $$ where $D^k$ is the diagonal matrix with the same diagonal entries as $A^k$, $A^k_F = (\bar{a}_{ij}^k)$ is the filtered matrix defined as \begin{equation} \label{eq:filtered} \bar{a}_{ij}^k = \left \{ \begin{array}{ll} a_{ij}^k & \mbox{if } j \in \mathcal{N}_i^k(\theta), \\ 0 & \mbox{otherwise}, \end{array} \right. \; (j \ne i), \qquad \bar{a}_{ii}^k = a_{ii}^k - \sum_{j \ne i} (a_{ij}^k - \bar{a}_{ij}^k), \end{equation} and $\omega^k$ is an approximation of $4/(3\rho^k)$, where $\rho^k$ is the spectral radius of $(D^k)^{-1}A^k_F$ \cite{BREZINA_VANEK}. In MLD2P4 this approximation is obtained by using $\| A^k_F \|_\infty$ as an estimate of $\rho^k$. Note that for systems coming from uniformly elliptic problems, filtering the matrix $A^k$ has little or no effect, and $A^k$ can be used instead of $A^k_F$. The latter choice is the default in MLD2P4. \subsection{Smoothers and coarsest-level solvers\label{sec:smoothers}} The smoothers implemented in MLD2P4 include the Jacobi and block-Jacobi methods, a hybrid version of the forward and backward Gauss-Seidel methods, and the additive Schwarz (AS) ones (see, e.g., \cite{Saad_book,dd2_96}). The hybrid Gauss-Seidel version is considered because the original Gauss-Seidel method is inherently sequential. At each iteration of the hybrid version, each parallel process uses the most recent values of its own local variables and the values of the non-local variables computed at the previous iteration, obtained by exchanging data with other processes before the beginning of the current iteration. In the AS methods, the index space $\Omega^k$ is divided into $m_k$ subsets $\Omega^k_i$ of size $n_{k,i}$, possibly overlapping. For each $i$ we consider the restriction operator $R_i^k \in \mathbb{R}^{n_{k,i} \times n_k}$ % $R_i^k: \mathbb{R}^{n_k} \longrightarrow \mathbb{R}^{n_{k,i}}$ that maps a vector $x^k$ to the vector $x_i^k$ made of the components of $x^k$ with indices in $\Omega^k_i$, and the prolongation operator $P^k_i = (R_i^k)^T$. These operators are then used to build $A_i^k=R_i^kA^kP_i^k$, which is the restriction of $A^k$ to the index space $\Omega^k_i$. The classical AS preconditioner $M^k_{AS}$ is defined as \[ ( M^k_{AS} )^{-1} = \sum_{i=1}^{m_k} P_i^k (A_i^k)^{-1} R_i^{k}, \] where $A_i^k$ is supposed to be nonsingular. We observe that an approximate inverse of $A_i^k$ is usually considered instead of $(A_i^k)^{-1}$. The setup of $M^k_{AS}$ during the multilevel build phase involves \begin{itemize} \item the definition of the index subspaces $\Omega_i^k$ and of the corresponding operators $R_i^k$ (and $P_i^k$); \item the computation of the submatrices $A_i^k$; \item the computation of their inverses (usually approximated through some form of incomplete factorization). \end{itemize} The computation of $z^k=M^k_{AS}w^k$, with $w^k \in \mathbb{R}^{n_k}$, during the multilevel application phase, requires \begin{itemize} \item the restriction of $w^k$ to the subspaces $\mathbb{R}^{n_{k,i}}$, i.e.\ $w_i^k = R_i^{k} w^k$; \item the computation of the vectors $z_i^k=(A_i^k)^{-1} w_i^k$; \item the prolongation and the sum of the previous vectors, i.e.\ $z^k = \sum_{i=1}^{m_k} P_i^k z_i^k$. \end{itemize} Variants of the classical AS method, which use modifications of the restriction and prolongation operators, are also implemented in MLD2P4. Among them, the Restricted AS (RAS) preconditioner usually outperforms the classical AS preconditioner in terms of convergence rate and of computation and communication time on parallel distributed-memory computers, and is therefore the most widely used among the AS preconditioners~\cite{CAI_SARKIS}. Direct solvers based on sparse LU factorizations, implemented in the third-party libraries reported in Section~\ref{sec:third-party}, can be applied as coarsest-level solvers by MLD2P4. Native inexact solvers based on incomplete LU factorizations, as well as Jacobi, hybrid (forward) Gauss-Seidel, and block Jacobi preconditioners are also available. Direct solvers usually lead to more effective preconditioners in terms of algorithmic scalability; however, this does not guarantee parallel efficiency. %%% Local Variables: %%% mode: latex %%% TeX-master: "userguide" %%% End: \ No newline at end of file +\section{Multigrid Background\label{sec:background}} \markboth{\textsc{MLD2P4 User's and Reference Guide}} {\textsc{\ref{sec:background} Multigrid Background}} Multigrid preconditioners, coupled with Krylov iterative solvers, are widely used in the parallel solution of large and sparse linear systems, because of their optimality in the solution of linear systems arising from the discretization of scalar elliptic Partial Differential Equations (PDEs) on regular grids. Optimality, also known as algorithmic scalability, is the property of having a computational cost per iteration that depends linearly on the problem size, and a convergence rate that is independent of the problem size. Multigrid preconditioners are based on a recursive application of a two-grid process consisting of smoother iterations and a coarse-space (or coarse-level) correction. The smoothers may be either basic iterative methods, such as the Jacobi and Gauss-Seidel ones, or more complex subspace-correction methods, such as the Schwarz ones. The coarse-space correction consists of solving, in an appropriately chosen coarse space, the residual equation associated with the approximate solution computed by the smoother, and of using the solution of this equation to correct the previous approximation. The transfer of information between the original (fine) space and the coarse one is performed by using suitable restriction and prolongation operators. The construction of the coarse space and the corresponding transfer operators is carried out by applying a so-called coarsening algorithm to the system matrix. Two main approaches can be used to perform coarsening: the geometric approach, which exploits the knowledge of some physical grid associated with the matrix and requires the user to define transfer operators from the fine to the coarse level and vice versa, and the algebraic approach, which builds the coarse-space correction and the associate transfer operators using only matrix information. The first approach may be difficult when the system comes from discretizations on complex geometries; furthermore, ad hoc one-level smoothers may be required to get an efficient interplay between fine and coarse levels, e.g., when matrices with highly varying coefficients are considered. The second approach performs a fully automatic coarsening and enforces the interplay between fine and coarse level by suitably choosing the coarse space and the coarse-to-fine interpolation (see, e.g., \cite{Briggs2000,Stuben_01,dd2_96} for details.) MLD2P4 uses a pure algebraic approach, based on the smoothed aggregation algorithm \cite{BREZINA_VANEK,VANEK_MANDEL_BREZINA}, for building the sequence of coarse matrices and transfer operators, starting from the original one. A decoupled version of this algorithm is implemented, where the smoothed aggregation is applied locally to each submatrix \cite{TUMINARO_TONG}. A brief description of the AMG preconditioners implemented in MLD2P4 is given in Sections~\ref{sec:multilevel}-\ref{sec:smoothers}. For further details the reader is referred to \cite{para_04,aaecc_07,apnum_07,MLD2P4_TOMS}. We note that optimal multigrid preconditioners do not necessarily correspond to minimum execution times in a parallel setting. Indeed, to obtain effective parallel multigrid preconditioners, a tradeoff between the optimality and the cost of building and applying the smoothers and the coarse-space corrections must be achieved. Effective parallel preconditioners require algorithmic scalability to be coupled with implementation scalability, i.e., a computational cost per iteration which remains (almost) constant as the number of parallel processors increases. \subsection{AMG preconditioners\label{sec:multilevel}} In order to describe the AMG preconditioners available in MLD2P4, we consider a linear system \begin{equation} Ax=b, \label{eq:system} \end{equation} where $A=(a_{ij}) \in \mathbb{R}^{n \times n}$ is a nonsingular sparse matrix; for ease of presentation we assume $A$ is real, but the results are valid for the complex case as well. Let us assume as finest index space the set of row (column) indices of $A$, i.e., $\Omega = \{1, 2, \ldots, n\}$. Any algebraic multilevel preconditioners implemented in MLD2P4 generates a hierarchy of index spaces and a corresponding hierarchy of matrices, \[ \Omega^1 \equiv \Omega \supset \Omega^2 \supset \ldots \supset \Omega^{nlev}, \quad A^1 \equiv A, A^2, \ldots, A^{nlev}, \] by using the information contained in $A$, without assuming any knowledge of the geometry of the problem from which $A$ originates. A vector space $\mathbb{R}^{n_{k}}$ is associated with $\Omega^k$, where $n_k$ is the size of $\Omega^k$. For all $k < nlev$, a restriction operator and a prolongation one are built, which connect two levels $k$ and $k+1$: \[ P^k \in \mathbb{R}^{n_k \times n_{k+1}}, \quad R^k \in \mathbb{R}^{n_{k+1}\times n_k}; \] the matrix $A^{k+1}$ is computed by using the previous operators according to the Galerkin approach, i.e., \[ A^{k+1}=R^kA^kP^k. \] In the current implementation of MLD2P4 we have $R^k=(P^k)^T$ A smoother with iteration matrix $M^k$ is set up at each level $k < nlev$, and a solver is set up at the coarsest level, so that they are ready for application (for example, setting up a solver based on the $LU$ factorization means computing and storing the $L$ and $U$ factors). The construction of the hierarchy of AMG components described so far corresponds to the so-called build phase of the preconditioner. \begin{figure}[t] \begin{center} \framebox{ \begin{minipage}{.85\textwidth} \begin{tabbing} \quad \=\quad \=\quad \=\quad \\[-3mm] procedure V-cycle$\left(k,A^k,b^k,u^k\right)$ \\[2mm] \>if $\left(k \ne nlev \right)$ then \\[1mm] \>\> $u^k = u^k + M^k \left(b^k - A^k u^k\right)$ \\[1mm] \>\> $b^{k+1} = R^{k+1}\left(b^k - A^k u^k\right)$ \\[1mm] \>\> $u^{k+1} =$ V-cycle$\left(k+1,A^{k+1},b^{k+1},0\right)$ \\[1mm] \>\> $u^k = u^k + P^{k+1} u^{k+1}$ \\[1mm] \>\> $u^k = u^k + M^k \left(b^k - A^k u^k\right)$ \\[1mm] \>else \\[1mm] \>\> $u^k = \left(A^k\right)^{-1} b^k$\\[1mm] \>endif \\[1mm] \>return $u^k$ \\[1mm] end \end{tabbing} \end{minipage} } \caption{Application phase of a V-cycle preconditioner.\label{fig:application_alg}} \end{center} \end{figure} The components produced in the build phase may be combined in several ways to obtain different multilevel preconditioners; this is done in the application phase, i.e., in the computation of a vector of type $w=B^{-1}v$, where $B$ denotes the preconditioner, usually within an iteration of a Krylov solver \cite{Saad_book}. An example of such a combination, known as V-cycle, is given in Figure~\ref{fig:application_alg}. In this case, a single iteration of the same smoother is used before and after the the recursive call to the V-cycle (i.e., in the pre-smoothing and post-smoothing phases); however, different choices can be performed. Other cycles can be defined; in MLD2P4, we implemented the standard V-cycle and W-cycle~\cite{Briggs2000}, and a version of the K-cycle described in~\cite{Notay2008}. \subsection{Smoothed Aggregation\label{sec:aggregation}} In order to define the prolongator $P^k$, used to compute the coarse-level matrix $A^{k+1}$, MLD2P4 uses the smoothed aggregation algorithm described in \cite{BREZINA_VANEK,VANEK_MANDEL_BREZINA}. The basic idea of this algorithm is to build a coarse set of indices $\Omega^{k+1}$ by suitably grouping the indices of $\Omega^k$ into disjoint subsets (aggregates), and to define the coarse-to-fine space transfer operator $P^k$ by applying a suitable smoother to a simple piecewise constant prolongation operator, with the aim of improving the quality of the coarse-space correction. Three main steps can be identified in the smoothed aggregation procedure: \begin{enumerate} \item aggregation of the indices of $\Omega^k$ to obtain $\Omega^{k+1}$; \item construction of the prolongator $P^k$; \item application of $P^k$ and $R^k=(P^k)^T$ to build $A^{k+1}$. \end{enumerate} In order to perform the coarsening step, the smoothed aggregation algorithm described in~\cite{VANEK_MANDEL_BREZINA} is used. In this algorithm, each index $j \in \Omega^{k+1}$ corresponds to an aggregate $\Omega^k_j$ of $\Omega^k$, consisting of a suitably chosen index $i \in \Omega^k$ and indices that are (usually) contained in a strongly-coupled neighborood of $i$, i.e., \begin{equation} \label{eq:strongly_coup} \Omega^k_j \subset \mathcal{N}_i^k(\theta) = \left\{ r \in \Omega^k: |a_{ir}^k| > \theta \sqrt{|a_{ii}^ka_{rr}^k|} \right \} \cup \left\{ i \right\}, \end{equation} for a given threshold $\theta \in [0,1]$ (see~\cite{VANEK_MANDEL_BREZINA} for the details). Since this algorithm has a sequential nature, a decoupled version of it is applied, where each processor independently executes the algorithm on the set of indices assigned to it in the initial data distribution. This version is embarrassingly parallel, since it does not require any data communication. On the other hand, it may produce some nonuniform aggregates and is strongly dependent on the number of processors and on the initial partitioning of the matrix $A$. Nevertheless, this parallel algorithm has been chosen for MLD2P4, since it has been shown to produce good results in practice \cite{aaecc_07,apnum_07,TUMINARO_TONG}. The prolongator $P^k$ is built starting from a tentative prolongator $\bar{P}^k \in \mathbb{R}^{n_k \times n_{k+1}}$, defined as \begin{equation} \bar{P}^k =(\bar{p}_{ij}^k), \quad \bar{p}_{ij}^k = \left\{ \begin{array}{ll} 1 & \quad \mbox{if} \; i \in \Omega^k_j, \\ 0 & \quad \mbox{otherwise}, \end{array} \right. \label{eq:tent_prol} \end{equation} where $\Omega^k_j$ is the aggregate of $\Omega^k$ corresponding to the index $j \in \Omega^{k+1}$. $P^k$ is obtained by applying to $\bar{P}^k$ a smoother $S^k \in \mathbb{R}^{n_k \times n_k}$: $$ P^k = S^k \bar{P}^k, $$ in order to remove nonsmooth components from the range of the prolongator, and hence to improve the convergence properties of the multi-level method~\cite{BREZINA_VANEK,Stuben_01}. A simple choice for $S^k$ is the damped Jacobi smoother: \[ S^k = I - \omega^k (D^k)^{-1} A^k_F , \] where $D^k$ is the diagonal matrix with the same diagonal entries as $A^k$, $A^k_F = (\bar{a}_{ij}^k)$ is the filtered matrix defined as \begin{equation} \label{eq:filtered} \bar{a}_{ij}^k = \left \{ \begin{array}{ll} a_{ij}^k & \mbox{if } j \in \mathcal{N}_i^k(\theta), \\ 0 & \mbox{otherwise}, \end{array} \right. \; (j \ne i), \qquad \bar{a}_{ii}^k = a_{ii}^k - \sum_{j \ne i} (a_{ij}^k - \bar{a}_{ij}^k), \end{equation} and $\omega^k$ is an approximation of $4/(3\rho^k)$, where $\rho^k$ is the spectral radius of $(D^k)^{-1}A^k_F$ \cite{BREZINA_VANEK}. In MLD2P4 this approximation is obtained by using $\| A^k_F \|_\infty$ as an estimate of $\rho^k$. Note that for systems coming from uniformly elliptic problems, filtering the matrix $A^k$ has little or no effect, and $A^k$ can be used instead of $A^k_F$. The latter choice is the default in MLD2P4. \subsection{Smoothers and coarsest-level solvers\label{sec:smoothers}} The smoothers implemented in MLD2P4 include the Jacobi and block-Jacobi methods, a hybrid version of the forward and backward Gauss-Seidel methods, and the additive Schwarz (AS) ones (see, e.g., \cite{Saad_book,dd2_96}). The hybrid Gauss-Seidel version is considered because the original Gauss-Seidel method is inherently sequential. At each iteration of the hybrid version, each parallel process uses the most recent values of its own local variables and the values of the non-local variables computed at the previous iteration, obtained by exchanging data with other processes before the beginning of the current iteration. In the AS methods, the index space $\Omega^k$ is divided into $m_k$ subsets $\Omega^k_i$ of size $n_{k,i}$, possibly overlapping. For each $i$ we consider the restriction operator $R_i^k \in \mathbb{R}^{n_{k,i} \times n_k}$ that maps a vector $x^k$ to the vector $x_i^k$ made of the components of $x^k$ with indices in $\Omega^k_i$, and the prolongation operator $P^k_i = (R_i^k)^T$. These operators are then used to build $A_i^k=R_i^kA^kP_i^k$, which is the restriction of $A^k$ to the index space $\Omega^k_i$. The classical AS preconditioner $M^k_{AS}$ is defined as \[ ( M^k_{AS} )^{-1} = \sum_{i=1}^{m_k} P_i^k (A_i^k)^{-1} R_i^{k}, \] where $A_i^k$ is supposed to be nonsingular. We observe that an approximate inverse of $A_i^k$ is usually considered instead of $(A_i^k)^{-1}$. The setup of $M^k_{AS}$ during the multilevel build phase involves \begin{itemize} \item the definition of the index subspaces $\Omega_i^k$ and of the corresponding operators $R_i^k$ (and $P_i^k$); \item the computation of the submatrices $A_i^k$; \item the computation of their inverses (usually approximated through some form of incomplete factorization). \end{itemize} The computation of $z^k=M^k_{AS}w^k$, with $w^k \in \mathbb{R}^{n_k}$, during the multilevel application phase, requires \begin{itemize} \item the restriction of $w^k$ to the subspaces $\mathbb{R}^{n_{k,i}}$, i.e.\ $w_i^k = R_i^{k} w^k$; \item the computation of the vectors $z_i^k=(A_i^k)^{-1} w_i^k$; \item the prolongation and the sum of the previous vectors, i.e.\ $z^k = \sum_{i=1}^{m_k} P_i^k z_i^k$. \end{itemize} Variants of the classical AS method, which use modifications of the restriction and prolongation operators, are also implemented in MLD2P4. Among them, the Restricted AS (RAS) preconditioner usually outperforms the classical AS preconditioner in terms of convergence rate and of computation and communication time on parallel distributed-memory computers, and is therefore the most widely used among the AS preconditioners~\cite{CAI_SARKIS}. Direct solvers based on sparse LU factorizations, implemented in the third-party libraries reported in Section~\ref{sec:third-party}, can be applied as coarsest-level solvers by MLD2P4. Native inexact solvers based on incomplete LU factorizations, as well as Jacobi, hybrid (forward) Gauss-Seidel, and block Jacobi preconditioners are also available. Direct solvers usually lead to more effective preconditioners in terms of algorithmic scalability; however, this does not guarantee parallel efficiency. %%% Local Variables: %%% mode: latex %%% TeX-master: "userguide" %%% End: \ No newline at end of file