diff --git a/docs/html/cmsy10-42.png b/docs/html/cmsy10-42.png index bd31f1f8..3ebb79e6 100644 Binary files a/docs/html/cmsy10-42.png and b/docs/html/cmsy10-42.png differ diff --git a/docs/html/cmsy10-48.png b/docs/html/cmsy10-48.png index df31f928..04f134fe 100644 Binary files a/docs/html/cmsy10-48.png and b/docs/html/cmsy10-48.png differ diff --git a/docs/html/cmsy10-49.png b/docs/html/cmsy10-49.png index cb292c09..37ce5dc4 100644 Binary files a/docs/html/cmsy10-49.png and b/docs/html/cmsy10-49.png differ diff --git a/docs/html/dia.png b/docs/html/dia.png new file mode 100644 index 00000000..de7db919 Binary files /dev/null and b/docs/html/dia.png differ diff --git a/docs/html/ell.png b/docs/html/ell.png new file mode 100644 index 00000000..31911882 Binary files /dev/null and b/docs/html/ell.png differ diff --git a/docs/html/hdia.png b/docs/html/hdia.png new file mode 100644 index 00000000..08bfb5ff Binary files /dev/null and b/docs/html/hdia.png differ diff --git a/docs/html/hll.png b/docs/html/hll.png new file mode 100644 index 00000000..219b751a Binary files /dev/null and b/docs/html/hll.png differ diff --git a/docs/html/index.html b/docs/html/index.html index c4f777e4..083bd90a 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -10,7 +10,7 @@ -

PSBLAS
User’s and Reference Guide
Salvatore Filippone
Alfredo Buttari
Software version: 3.8.0
May 1st, 2022 +class="newline" />Software version: 3.9.0
Aug 1st, 2024 @@ -29,219 +29,39 @@ class="newline" />May 1st, 2022

- Contents -
1  1 Introduction -
2  2 General overview -
 2.1 Basic Nomenclature -
 2.2 Library contents -
 2.3 Application structure -
 2.4 Programming model -
3 Data Structures and Classes -
 3.1 Descriptor data structure -
 3.2 Sparse Matrix class -
 3.3 Dense Vector Data Structure -
 3.4 Preconditioner data structure -
 3.5 Heap data structure -
4 Computational routines -
 4.1 psb_geaxpby — General Dense Matrix Sum -
 4.2 psb_gedot — Dot Product -
 4.3 psb_gedots — Generalized Dot Product -
 4.4 psb_normi — Infinity-Norm of Vector -
 4.5 psb_geamaxs — Generalized Infinity Norm -
 4.6 psb_norm1 — 1-Norm of Vector -
 4.7 psb_geasums — Generalized 1-Norm of Vector -
 4.8 psb_norm2 — 2-Norm of Vector -
 4.9 psb_genrm2s — Generalized 2-Norm of Vector -
 4.10 psb_norm1 — 1-Norm of Sparse Matrix -
 4.11 psb_normi — Infinity Norm of Sparse Matrix -
 4.12 psb_spmm — Sparse Matrix by Dense Matrix Product -
 4.13 psb_spsm — Triangular System Solve -
 4.14 psb_gemlt — Entrywise Product -
 4.15 psb_gediv — Entrywise Division -
 4.16 psb_geinv — Entrywise Inversion -
5 Communication routines -
 5.1 psb_halo — Halo Data Communication -
 5.2 psb_ovrl — Overlap Update -
 5.3 psb_gather — Gather Global Dense Matrix -
 5.4 psb_scatter — Scatter Global Dense Matrix -
6 Data management routines -
 6.1 psb_cdall — Allocates a communication descriptor -
 6.2 psb_cdins — Communication descriptor insert routine -
 6.3 psb_cdasb — Communication descriptor assembly routine -
 6.4 psb_cdcpy — Copies a communication descriptor -
 6.5 psb_cdfree — Frees a communication descriptor -
 6.6 psb_cdbldext — Build an extended communication descriptor -
 6.7 psb_spall — Allocates a sparse matrix -
 6.8 psb_spins — Insert a set of coefficients into a sparse matrix -
 6.9 psb_spasb — Sparse matrix assembly routine -
 6.10 psb_spfree — Frees a sparse matrix -
 6.11 psb_sprn — Reinit sparse matrix structure for psblas routines. -
 6.12 psb_geall — Allocates a dense matrix - +
 3 Data Structures and Classes +
 4 Computational routines +
 5 Communication routines +
 6 Data management routines +
 7 Parallel environment routines +
 8 Error handling +
 9 Utilities +
 10 Preconditioner routines +
 11 Iterative Methods +
 12 Extensions +
 13 CUDA Environment Routines +
 References +
- -
 6.13 psb_geins — Dense matrix insertion routine -
 6.14 psb_geasb — Assembly a dense matrix -
 6.15 psb_gefree — Frees a dense matrix -
 6.16 psb_gelp — Applies a left permutation to a dense matrix -
 6.17 psb_glob_to_loc — Global to local indices convertion -
 6.18 psb_loc_to_glob — Local to global indices conversion -
 6.19 psb_is_owned — -
 6.20 psb_owned_index — -
 6.21 psb_is_local — -
 6.22 psb_local_index — -
 6.23 psb_get_boundary — Extract list of boundary elements -
 6.24 psb_get_overlap — Extract list of overlap elements -
 6.25 psb_sp_getrow — Extract row(s) from a sparse matrix -
 6.26 psb_sizeof — Memory occupation -
 6.27 Sorting utilities — -
7 Parallel environment routines -
 7.1 psb_init — Initializes PSBLAS parallel environment -
 7.2 psb_info — Return information about PSBLAS parallel environment -
 7.3 psb_exit — Exit from PSBLAS parallel environment -
 7.4 psb_get_mpi_comm — Get the MPI communicator -
 7.5 psb_get_mpi_rank — Get the MPI rank -
 7.6 psb_wtime — Wall clock timing -
 7.7 psb_barrier — Sinchronization point parallel environment -
 7.8 psb_abort — Abort a computation -
 7.9 psb_bcast — Broadcast data -
 7.10 psb_sum — Global sum -
 7.11 psb_max — Global maximum -
 7.12 psb_min — Global minimum -
 7.13 psb_amx — Global maximum absolute value -
 7.14 psb_amn — Global minimum absolute value -
 7.15 psb_nrm2 — Global 2-norm reduction -
 7.16 psb_snd — Send data -
 7.17 psb_rcv — Receive data -
8 Error handling -
 8.1 psb_errpush — Pushes an error code onto the error stack -
 8.2 psb_error — Prints the error stack content and aborts execution -
 8.3 psb_set_errverbosity — Sets the verbosity of error messages -
 8.4 psb_set_erraction — Set the type of action to be taken upon error condition -
9 Utilities -
 9.1 hb_read — Read a sparse matrix from a file in the Harwell–Boeing format -
 9.2 hb_write — Write a sparse matrix to a file in the Harwell–Boeing format -
 9.3 mm_mat_read — Read a sparse matrix from a file in the MatrixMarket format -
 9.4 mm_array_read — Read a dense array from a file in the MatrixMarket format -
 9.5 mm_mat_write — Write a sparse matrix to a file in the MatrixMarket format -
 9.6 mm_array_write — Write a dense array from a file in the MatrixMarket format -
10 Preconditioner routines -
 10.1 init — Initialize a preconditioner -
 10.2 build — Builds a preconditioner -
 10.3 apply — Preconditioner application routine -
 10.4 descr — Prints a description of current preconditioner - - -
 10.5 clone — clone current preconditioner -
 10.6 free — Free a preconditioner -
11 Iterative Methods -
 11.1 psb_krylov — Krylov Methods Driver Routine -
References - diff --git a/docs/html/mat.png b/docs/html/mat.png new file mode 100644 index 00000000..d4f5c6f9 Binary files /dev/null and b/docs/html/mat.png differ diff --git a/docs/html/userhtml.css b/docs/html/userhtml.css index 31d7eb99..9dc17886 100644 --- a/docs/html/userhtml.css +++ b/docs/html/userhtml.css @@ -33,21 +33,26 @@ p.indent{text-indent:0;} p + p{margin-top:1em;} p + div, p + pre {margin-top:1em;} div + p, pre + p {margin-top:1em;} +a { overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; hyphens: auto; } @media print {div.crosslinks {visibility:hidden;}} +table.tabular{border-collapse: collapse; border-spacing: 0;} a img { border-top: 0; border-left: 0; border-right: 0; } center { margin-top:1em; margin-bottom:1em; } td center { margin-top:0em; margin-bottom:0em; } .Canvas { position:relative; } img.math{vertical-align:middle;} +div.par-math-display, div.math-display{text-align:center;} li p.indent { text-indent: 0em } li p:first-child{ margin-top:0em; } li p:last-child, li div:last-child { margin-bottom:0.5em; } +li p:first-child{ margin-bottom:0; } li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; } .enumerate1 {list-style-type:decimal;} .enumerate2 {list-style-type:lower-alpha;} .enumerate3 {list-style-type:lower-roman;} .enumerate4 {list-style-type:upper-alpha;} div.newtheorem { margin-bottom: 2em; margin-top: 2em;} +div.newtheorem .head{font-weight: bold;} .obeylines-h,.obeylines-v {white-space: nowrap; } div.obeylines-v p { margin-top:0; margin-bottom:0; } .overline{ text-decoration:overline; } @@ -91,6 +96,9 @@ table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } .hline hr, .cline hr{ height : 0px; margin:0px; } .hline td, .cline td{ padding: 0; } .hline hr, .cline hr{border:none;border-top:1px solid black;} +.hline {border-top: 1px solid black;} +.hline + .vspace:last-child{display:none;} +.hline:first-child{border-bottom:1px solid black;border-top:none;} .tabbing-right {text-align:right;} div.float, div.figure {margin-left: auto; margin-right: auto;} div.float img {text-align:center;} @@ -115,15 +123,16 @@ table.pmatrix {width:100%;} span.bar-css {text-decoration:overline;} img.cdots{vertical-align:middle;} .partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;} +.chapterToc a, .chapterToc, .likechapterToc a, .likechapterToc, .appendixToc a, .appendixToc {line-height: 200%; font-weight:bold;} .index-item, .index-subitem, .index-subsubitem {display:block} div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;} div.caption span.id{font-weight: bold; white-space: nowrap; } h1.partHead{text-align: center} p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } +.subsubsectionHead, .likesubsubsectionHead { font-size: 1em; } .paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;} .subparagraphHead, .likesubparagraphHead { font-weight: bold;} -.quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;} .verse{white-space:nowrap; margin-left:2em} div.maketitle {text-align:center;} h2.titleHead{text-align:center;} @@ -131,19 +140,23 @@ div.maketitle{ margin-bottom: 2em; } div.author, div.date {text-align:center;} div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; } div.author{white-space: nowrap;} -.quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; } -.abstract p {margin-left:5%; margin-right:5%;} +div.abstract p {margin-left:5%; margin-right:5%;} div.abstract {width:100%;} +.abstracttitle{text-align:center;margin-bottom:1em;} .subsectionToc, .likesubsectionToc {margin-left:2em;} .subsubsectionToc, .likesubsubsectionToc {margin-left:4em;} +.paragraphToc, .likeparagraphToc {margin-left:6em;} +.subparagraphToc, .likesubparagraphToc {margin-left:8em;} .ovalbox { padding-left:3pt; padding-right:3pt; border:solid thin; } .Ovalbox-thick { padding-left:3pt; padding-right:3pt; border:solid thick; } .shadowbox { padding-left:3pt; padding-right:3pt; border:solid thin; border-right:solid thick; border-bottom:solid thick; } .doublebox { padding-left:3pt; padding-right:3pt; border-style:double; border:solid thick; } .rotatebox{display: inline-block;} +code.lstinline{font-family:monospace,monospace;} +pre.listings{font-family: monospace,monospace; white-space: pre-wrap; margin-top:0.5em; margin-bottom:0.5em; } .lstlisting .label{margin-right:0.5em; } -div.lstlisting{font-family: monospace,monospace; white-space: nowrap; margin-top:0.5em; margin-bottom:0.5em; } -div.lstinputlisting{ font-family: monospace,monospace; white-space: nowrap; } +pre.lstlisting{font-family: monospace,monospace; white-space: pre-wrap; margin-top:0.5em; margin-bottom:0.5em; } +pre.lstinputlisting{ font-family: monospace,monospace; white-space: pre-wrap; } .lstinputlisting .label{margin-right:0.5em;} /* end css.sty */ diff --git a/docs/html/userhtml.html b/docs/html/userhtml.html index c4f777e4..083bd90a 100644 --- a/docs/html/userhtml.html +++ b/docs/html/userhtml.html @@ -10,7 +10,7 @@ -

PSBLAS
User’s and Reference Guide
Salvatore Filippone
Alfredo Buttari
Software version: 3.8.0
May 1st, 2022 +class="newline" />Software version: 3.9.0
Aug 1st, 2024 @@ -29,219 +29,39 @@ class="newline" />May 1st, 2022

- Contents -
1  1 Introduction -
2  2 General overview -
 2.1 Basic Nomenclature -
 2.2 Library contents -
 2.3 Application structure -
 2.4 Programming model -
3 Data Structures and Classes -
 3.1 Descriptor data structure -
 3.2 Sparse Matrix class -
 3.3 Dense Vector Data Structure -
 3.4 Preconditioner data structure -
 3.5 Heap data structure -
4 Computational routines -
 4.1 psb_geaxpby — General Dense Matrix Sum -
 4.2 psb_gedot — Dot Product -
 4.3 psb_gedots — Generalized Dot Product -
 4.4 psb_normi — Infinity-Norm of Vector -
 4.5 psb_geamaxs — Generalized Infinity Norm -
 4.6 psb_norm1 — 1-Norm of Vector -
 4.7 psb_geasums — Generalized 1-Norm of Vector -
 4.8 psb_norm2 — 2-Norm of Vector -
 4.9 psb_genrm2s — Generalized 2-Norm of Vector -
 4.10 psb_norm1 — 1-Norm of Sparse Matrix -
 4.11 psb_normi — Infinity Norm of Sparse Matrix -
 4.12 psb_spmm — Sparse Matrix by Dense Matrix Product -
 4.13 psb_spsm — Triangular System Solve -
 4.14 psb_gemlt — Entrywise Product -
 4.15 psb_gediv — Entrywise Division -
 4.16 psb_geinv — Entrywise Inversion -
5 Communication routines -
 5.1 psb_halo — Halo Data Communication -
 5.2 psb_ovrl — Overlap Update -
 5.3 psb_gather — Gather Global Dense Matrix -
 5.4 psb_scatter — Scatter Global Dense Matrix -
6 Data management routines -
 6.1 psb_cdall — Allocates a communication descriptor -
 6.2 psb_cdins — Communication descriptor insert routine -
 6.3 psb_cdasb — Communication descriptor assembly routine -
 6.4 psb_cdcpy — Copies a communication descriptor -
 6.5 psb_cdfree — Frees a communication descriptor -
 6.6 psb_cdbldext — Build an extended communication descriptor -
 6.7 psb_spall — Allocates a sparse matrix -
 6.8 psb_spins — Insert a set of coefficients into a sparse matrix -
 6.9 psb_spasb — Sparse matrix assembly routine -
 6.10 psb_spfree — Frees a sparse matrix -
 6.11 psb_sprn — Reinit sparse matrix structure for psblas routines. -
 6.12 psb_geall — Allocates a dense matrix - +
 3 Data Structures and Classes +
 4 Computational routines +
 5 Communication routines +
 6 Data management routines +
 7 Parallel environment routines +
 8 Error handling +
 9 Utilities +
 10 Preconditioner routines +
 11 Iterative Methods +
 12 Extensions +
 13 CUDA Environment Routines +
 References +
- -
 6.13 psb_geins — Dense matrix insertion routine -
 6.14 psb_geasb — Assembly a dense matrix -
 6.15 psb_gefree — Frees a dense matrix -
 6.16 psb_gelp — Applies a left permutation to a dense matrix -
 6.17 psb_glob_to_loc — Global to local indices convertion -
 6.18 psb_loc_to_glob — Local to global indices conversion -
 6.19 psb_is_owned — -
 6.20 psb_owned_index — -
 6.21 psb_is_local — -
 6.22 psb_local_index — -
 6.23 psb_get_boundary — Extract list of boundary elements -
 6.24 psb_get_overlap — Extract list of overlap elements -
 6.25 psb_sp_getrow — Extract row(s) from a sparse matrix -
 6.26 psb_sizeof — Memory occupation -
 6.27 Sorting utilities — -
7 Parallel environment routines -
 7.1 psb_init — Initializes PSBLAS parallel environment -
 7.2 psb_info — Return information about PSBLAS parallel environment -
 7.3 psb_exit — Exit from PSBLAS parallel environment -
 7.4 psb_get_mpi_comm — Get the MPI communicator -
 7.5 psb_get_mpi_rank — Get the MPI rank -
 7.6 psb_wtime — Wall clock timing -
 7.7 psb_barrier — Sinchronization point parallel environment -
 7.8 psb_abort — Abort a computation -
 7.9 psb_bcast — Broadcast data -
 7.10 psb_sum — Global sum -
 7.11 psb_max — Global maximum -
 7.12 psb_min — Global minimum -
 7.13 psb_amx — Global maximum absolute value -
 7.14 psb_amn — Global minimum absolute value -
 7.15 psb_nrm2 — Global 2-norm reduction -
 7.16 psb_snd — Send data -
 7.17 psb_rcv — Receive data -
8 Error handling -
 8.1 psb_errpush — Pushes an error code onto the error stack -
 8.2 psb_error — Prints the error stack content and aborts execution -
 8.3 psb_set_errverbosity — Sets the verbosity of error messages -
 8.4 psb_set_erraction — Set the type of action to be taken upon error condition -
9 Utilities -
 9.1 hb_read — Read a sparse matrix from a file in the Harwell–Boeing format -
 9.2 hb_write — Write a sparse matrix to a file in the Harwell–Boeing format -
 9.3 mm_mat_read — Read a sparse matrix from a file in the MatrixMarket format -
 9.4 mm_array_read — Read a dense array from a file in the MatrixMarket format -
 9.5 mm_mat_write — Write a sparse matrix to a file in the MatrixMarket format -
 9.6 mm_array_write — Write a dense array from a file in the MatrixMarket format -
10 Preconditioner routines -
 10.1 init — Initialize a preconditioner -
 10.2 build — Builds a preconditioner -
 10.3 apply — Preconditioner application routine -
 10.4 descr — Prints a description of current preconditioner - - -
 10.5 clone — clone current preconditioner -
 10.6 free — Free a preconditioner -
11 Iterative Methods -
 11.1 psb_krylov — Krylov Methods Driver Routine -
References - diff --git a/docs/html/userhtml0x.png b/docs/html/userhtml0x.png index bed5b304..3e324fc8 100644 Binary files a/docs/html/userhtml0x.png and b/docs/html/userhtml0x.png differ diff --git a/docs/html/userhtml10x.png b/docs/html/userhtml10x.png index a0d4d0d4..5db77543 100644 Binary files a/docs/html/userhtml10x.png and b/docs/html/userhtml10x.png differ diff --git a/docs/html/userhtml11x.png b/docs/html/userhtml11x.png index 634594e1..e168a574 100644 Binary files a/docs/html/userhtml11x.png and b/docs/html/userhtml11x.png differ diff --git a/docs/html/userhtml12x.png b/docs/html/userhtml12x.png index 7257667a..df163814 100644 Binary files a/docs/html/userhtml12x.png and b/docs/html/userhtml12x.png differ diff --git a/docs/html/userhtml13x.png b/docs/html/userhtml13x.png index 4c70ecb3..108c35cd 100644 Binary files a/docs/html/userhtml13x.png and b/docs/html/userhtml13x.png differ diff --git a/docs/html/userhtml14x.png b/docs/html/userhtml14x.png index 711ce998..9a0f37dd 100644 Binary files a/docs/html/userhtml14x.png and b/docs/html/userhtml14x.png differ diff --git a/docs/html/userhtml15x.png b/docs/html/userhtml15x.png index 00e0d73d..feaec761 100644 Binary files a/docs/html/userhtml15x.png and b/docs/html/userhtml15x.png differ diff --git a/docs/html/userhtml16.html b/docs/html/userhtml16.html new file mode 100644 index 00000000..88e57e0e --- /dev/null +++ b/docs/html/userhtml16.html @@ -0,0 +1,19 @@ + + + + + + + + + + +
+

4The string is case-insensitive

+ + diff --git a/docs/html/userhtml16x.png b/docs/html/userhtml16x.png index 95794ed0..3f5b67d7 100644 Binary files a/docs/html/userhtml16x.png and b/docs/html/userhtml16x.png differ diff --git a/docs/html/userhtml17x.png b/docs/html/userhtml17x.png index 27a7387e..26e4a3a9 100644 Binary files a/docs/html/userhtml17x.png and b/docs/html/userhtml17x.png differ diff --git a/docs/html/userhtml18.html b/docs/html/userhtml18.html new file mode 100644 index 00000000..245d8cd5 --- /dev/null +++ b/docs/html/userhtml18.html @@ -0,0 +1,20 @@ + + + + + + + + + + +
+

5Note: the implementation is for FCG(1).

+ diff --git a/docs/html/userhtml18x.png b/docs/html/userhtml18x.png index ebcb935d..d33d825c 100644 Binary files a/docs/html/userhtml18x.png and b/docs/html/userhtml18x.png differ diff --git a/docs/html/userhtml19x.png b/docs/html/userhtml19x.png index 5ac0302a..a44a8a1a 100644 Binary files a/docs/html/userhtml19x.png and b/docs/html/userhtml19x.png differ diff --git a/docs/html/userhtml1x.png b/docs/html/userhtml1x.png index 465c255b..933f19a7 100644 Binary files a/docs/html/userhtml1x.png and b/docs/html/userhtml1x.png differ diff --git a/docs/html/userhtml20x.png b/docs/html/userhtml20x.png index f9f0de44..170b8f17 100644 Binary files a/docs/html/userhtml20x.png and b/docs/html/userhtml20x.png differ diff --git a/docs/html/userhtml21x.png b/docs/html/userhtml21x.png index 85201b8c..10ebc465 100644 Binary files a/docs/html/userhtml21x.png and b/docs/html/userhtml21x.png differ diff --git a/docs/html/userhtml22x.png b/docs/html/userhtml22x.png index 8c882bc2..700fc628 100644 Binary files a/docs/html/userhtml22x.png and b/docs/html/userhtml22x.png differ diff --git a/docs/html/userhtml23x.png b/docs/html/userhtml23x.png index 30c84d3d..eeeb8317 100644 Binary files a/docs/html/userhtml23x.png and b/docs/html/userhtml23x.png differ diff --git a/docs/html/userhtml24x.png b/docs/html/userhtml24x.png index 0910fe9c..194d79c7 100644 Binary files a/docs/html/userhtml24x.png and b/docs/html/userhtml24x.png differ diff --git a/docs/html/userhtml25x.png b/docs/html/userhtml25x.png index 88630c50..51f10fd7 100644 Binary files a/docs/html/userhtml25x.png and b/docs/html/userhtml25x.png differ diff --git a/docs/html/userhtml26x.png b/docs/html/userhtml26x.png index ac0518e5..37257ff8 100644 Binary files a/docs/html/userhtml26x.png and b/docs/html/userhtml26x.png differ diff --git a/docs/html/userhtml27x.png b/docs/html/userhtml27x.png index 57beeb01..bd9e8f4f 100644 Binary files a/docs/html/userhtml27x.png and b/docs/html/userhtml27x.png differ diff --git a/docs/html/userhtml28x.png b/docs/html/userhtml28x.png index b2106916..112718a9 100644 Binary files a/docs/html/userhtml28x.png and b/docs/html/userhtml28x.png differ diff --git a/docs/html/userhtml29x.png b/docs/html/userhtml29x.png index b4efccdb..46a83099 100644 Binary files a/docs/html/userhtml29x.png and b/docs/html/userhtml29x.png differ diff --git a/docs/html/userhtml2x.png b/docs/html/userhtml2x.png index 49dbf305..bc929ca7 100644 Binary files a/docs/html/userhtml2x.png and b/docs/html/userhtml2x.png differ diff --git a/docs/html/userhtml30x.png b/docs/html/userhtml30x.png index 509285f3..276f94cf 100644 Binary files a/docs/html/userhtml30x.png and b/docs/html/userhtml30x.png differ diff --git a/docs/html/userhtml31x.png b/docs/html/userhtml31x.png index 72203987..55f88e51 100644 Binary files a/docs/html/userhtml31x.png and b/docs/html/userhtml31x.png differ diff --git a/docs/html/userhtml32x.png b/docs/html/userhtml32x.png index a92c5455..f1fb77ea 100644 Binary files a/docs/html/userhtml32x.png and b/docs/html/userhtml32x.png differ diff --git a/docs/html/userhtml3x.png b/docs/html/userhtml3x.png index 3676aa53..29404472 100644 Binary files a/docs/html/userhtml3x.png and b/docs/html/userhtml3x.png differ diff --git a/docs/html/userhtml4x.png b/docs/html/userhtml4x.png index 1ce118eb..e17fca31 100644 Binary files a/docs/html/userhtml4x.png and b/docs/html/userhtml4x.png differ diff --git a/docs/html/userhtml5.html b/docs/html/userhtml5.html index 0664a74b..8231fcf4 100644 --- a/docs/html/userhtml5.html +++ b/docs/html/userhtml5.html @@ -12,7 +12,8 @@ >

1 1In our prototype implementation we provide sample scatter/gather routines.

diff --git a/docs/html/userhtml5x.png b/docs/html/userhtml5x.png index cabc66d4..324d7f45 100644 Binary files a/docs/html/userhtml5x.png and b/docs/html/userhtml5x.png differ diff --git a/docs/html/userhtml6.html b/docs/html/userhtml6.html new file mode 100644 index 00000000..d6dbd1dc --- /dev/null +++ b/docs/html/userhtml6.html @@ -0,0 +1,24 @@ + + + + + + + + + + +
+

2This is the normal situation when the pattern of the sparse matrix is symmetric, which is + equivalent to say that the interaction between two variables is reciprocal. If the matrix pattern is + non-symmetric we may have one-way interactions, and these could cause a situation in which a + boundary point is not a halo point for its neighbour.

+ diff --git a/docs/html/userhtml6x.png b/docs/html/userhtml6x.png index a0ef30ce..72a36e5d 100644 Binary files a/docs/html/userhtml6x.png and b/docs/html/userhtml6x.png differ diff --git a/docs/html/userhtml7.html b/docs/html/userhtml7.html index ae82b72f..f61a7dac 100644 --- a/docs/html/userhtml7.html +++ b/docs/html/userhtml7.html @@ -11,13 +11,16 @@
-

2This is the normal situation when the pattern of the sparse matrix is symmetric, which is +

3The subroutine style psb_precinit and psb_precbl are still supported for backward equivalent to say that the interaction between two variables is reciprocal. If the matrix pattern is - non-symmetric we may have one-way interactions, and these could cause a situation in which a - boundary point is not a halo point for its neighbour.

+class="cmr-8">compatibility diff --git a/docs/html/userhtml7x.png b/docs/html/userhtml7x.png index a0d4d0d4..5db77543 100644 Binary files a/docs/html/userhtml7x.png and b/docs/html/userhtml7x.png differ diff --git a/docs/html/userhtml8x.png b/docs/html/userhtml8x.png index 147d6b03..221e309e 100644 Binary files a/docs/html/userhtml8x.png and b/docs/html/userhtml8x.png differ diff --git a/docs/html/userhtml9x.png b/docs/html/userhtml9x.png index dcf8438f..72555397 100644 Binary files a/docs/html/userhtml9x.png and b/docs/html/userhtml9x.png differ diff --git a/docs/html/userhtmlli1.html b/docs/html/userhtmlli1.html index 2f706b63..e767ddcf 100644 --- a/docs/html/userhtmlli1.html +++ b/docs/html/userhtmlli1.html @@ -10,306 +10,346 @@ - -

10 Preconditioner routines

+ id="x15-13500010">Preconditioner routines

The base PSBLAS library contains the implementation of two simple preconditioning techniques:

+
  • +

    Block Jacobi with ILU(0) factorization

  • The supporting data type and subroutine interfaces are defined in the module psb_prec_mod. The old interfaces -  10.1 init — Initialize a preconditioner -
     10.2 build — Builds a preconditioner -
     10.3 apply — Preconditioner application routine -
     10.4 descr — Prints a description of current preconditioner -
     10.5 clone — clone current preconditioner -
     10.6 free — Free a preconditioner - +

    10.1 init — Initialize a preconditioner

    + + + +
    +call prec%init(icontxt,ptype, info)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +icontxt

    +

    the communication context.
    Scope:global.
    Type:required.
    Intent: in.
    Specified as: an integer value. +

    +

    +ptype

    +

    the type of preconditioner. Scope: global
    Type: required
    Intent: in.
    Specified as: a character string, see usage notes. +

    +

    +On Exit

    +

    +

    +

    +prec

    +

    Scope: local
    Type: required
    Intent: inout.
    Specified as: a preconditioner data structure psb_prec_type. + + + +

    +

    +info

    +

    Scope: global
    Type: required
    Intent: out.
    Error code: if no error, 0 is returned.

    +

    Notes Legal inputs to this subroutine are interpreted depending on the ptype string as +follows4 : +

    +

    +NONE

    +

    No preconditioning, i.e. the preconditioner is just a copy operator. +

    +

    +DIAG

    +

    Diagonal scaling; each entry of the input vector is multiplied by the + reciprocal of the sum of the absolute values of the coefficients in the + corresponding row of matrix A; +

    +

    +BJAC

    +

    Precondition by a factorization of the block-diagonal of matrix A, where + block boundaries are determined by the data allocation boundaries + for each process; requires no communication. Only the incomplete + factorization ILU(0) is currently implemented.

    + + + +

    10.2 build — Builds a preconditioner

    + + + +
    +call prec%build(a, desc_a, info[,amold,vmold,imold])
    +
    +

    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +a

    +

    the system sparse matrix. Scope: local
    Type: required
    Intent: in, target.
    Specified as: a sparse matrix data structure psb_Tspmat_type. +

    +

    +prec

    +

    the preconditioner.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: an already initialized precondtioner data structure + psb_prec_type
    +

    +

    +desc_a

    +

    the problem communication descriptor. Scope: local
    Type: required
    Intent: in, target.
    Specified as: a communication descriptor data structure psb_desc_type. +

    +

    +amold

    + + + +

    The desired dynamic type for the internal matrix storage.
    Scope: local.
    Type: optional.
    Intent: in.
    Specified as: an object of a class derived from psb_T_base_sparse_mat. +

    +

    +vmold

    +

    The desired dynamic type for the internal vector storage.
    Scope: local.
    Type: optional.
    Intent: in.
    Specified as: an object of a class derived from psb_T_base_vect_type. +

    +

    +imold

    +

    The desired dynamic type for the internal integer vector storage.
    Scope: local.
    Type: optional.
    Intent: in.
    Specified as: an object of a class derived from (integer) + psb_T_base_vect_type.

    +

    +

    +

    +On Return

    +

    +

    +

    +prec

    +

    the preconditioner.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: a precondtioner data structure psb_prec_type
    +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    The amold, vmold and imold arguments may be employed to interface with special +devices, such as GPUs and other accelerators. + + + +

    10.3 apply — Preconditioner application routine

    + + + +
    +call prec%apply(x,y,desc_a,info,trans,work)
    +call prec%apply(x,desc_a,info,trans)
    +
    +

    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +prec

    +

    the preconditioner. Scope: local
    Type: required
    Intent: in.
    Specified as: a preconditioner data structure psb_prec_type. +

    +

    +x

    +

    the source vector. Scope: local
    Type: required
    Intent: inout.
    Specified as: a rank one array or an object of type psb_T_vect_type. +

    +

    +desc_a

    +

    the problem communication descriptor. Scope: local
    Type: required
    Intent: in.
    Specified as: a communication data structure psb_desc_type. +

    +

    +trans

    +

    Scope:
    Type: optional
    Intent: in.
    Specified as: a character. + + + +

    +

    +work

    +

    an optional work space Scope: local
    Type: optional
    Intent: inout.
    Specified as: a double precision array.

    +

    +

    +

    +On Return

    +

    +

    +

    +y

    +

    the destination vector. Scope: local
    Type: required
    Intent: inout.
    Specified as: a rank one array or an object of type psb_T_vect_type. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    10.4 descr — Prints a description of current preconditioner

    + + + +
    +call prec%descr(info)
    +call prec%descr(info,iout, root)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +prec

    +

    the preconditioner. Scope: local
    Type: required
    Intent: in.
    Specified as: a preconditioner data structure psb_prec_type. +

    +

    +iout

    +

    output unit. Scope: local
    Type: optional
    Intent: in.
    Specified as: an integer number. Default: default output unit. +

    +

    +root

    +

    Process from which to print Scope: local
    Type: optional
    Intent: in.
    Specified as: an integer number between 0 and np - 1, in which case + the specified process will print the description, or -1, in which case all + processes will print. Default: 0. +

    +

    +On Return

    +

    + + + +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    10.5 clone — clone current preconditioner

    + + +
    +call  prec%clone(precout,info)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +prec

    +

    the preconditioner.
    Scope: local.

    +

    +

    +

    +On Return

    +

    +

    +

    +precout

    +

    A copy of the input object. +

    +

    +info

    +

    Return code.

    + + +

    10.6 free — Free a preconditioner

    + + +
    +call prec%free(info)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +prec

    +

    the preconditioner.
    Scope: local.
    Type: required
    Intent: inout.
    Specified as: a preconditioner data structure psb_prec_type. +

    +

    +On Exit

    +

    +

    +

    +prec

    +

    Scope: local
    Type: required
    Intent: inout.
    Specified as: a preconditioner data structure psb_prec_type. +

    +

    +info

    +

    Scope: global
    Type: required
    Intent: out.
    Error code: if no error, 0 is returned.

    +

    Notes Releases all internal storage. + + + + + + +

    +href="userhtml.html#userhtmlse13.html" >up]

    + id="tailuserhtmlse10.html"> diff --git a/docs/html/userhtmlse11.html b/docs/html/userhtmlse11.html index a9cc2529..41a4cd65 100644 --- a/docs/html/userhtmlse11.html +++ b/docs/html/userhtmlse11.html @@ -13,10 +13,10 @@

    11 Iterative Methods

    + id="x17-14200011">Iterative Methods

    In this chapter we provide routines for preconditioners and iterative methods. The interfaces for Krylov subspace methods are available in the module psb_krylov_mod. -

    -  11.1 psb_krylov — Krylov Methods Driver Routine -
    +

    11.1 psb_krylov — Krylov Methods Driver Routine

    +

    This subroutine is a driver that provides a general interface for all the Krylov-Subspace +family methods implemented in PSBLAS version 2. +

    The stopping criterion can take the following values: +

    +

    +1

    +

    normwise backward error in the infinity norm; the iteration is stopped + when +

    +      -----∥ri∥------
+err = (∥A∥∥xi∥+ ∥b∥) < eps
+
    +

    +

    +

    +2

    +

    Relative residual in the 2-norm; the iteration is stopped when +

    +      ∥ri∥-
+err = ∥b∥2 < eps
+
    +

    +

    +

    +3

    +

    Relative residual reduction in the 2-norm; the iteration is stopped when +

    +      ∥ri∥
+err = ∥r0∥2 < eps
+
    +

    +

    The behaviour is controlled by the istop argument (see later). In the above formulae, xi +is the tentative solution and ri = b - Axi the corresponding residual at the i-th +iteration. + -

    4 Computational routines

    + id="x9-550004">Computational routines -
    -  4.1 psb_geaxpby — General Dense Matrix Sum -
     4.2 psb_gedot — Dot Product -
     4.3 psb_gedots — Generalized Dot Product -
     4.4 psb_normi — Infinity-Norm of Vector -
     4.5 psb_geamaxs — Generalized Infinity Norm -
     4.6 psb_norm1 — 1-Norm of Vector -
     4.7 psb_geasums — Generalized 1-Norm of Vector -
     4.8 psb_norm2 — 2-Norm of Vector -
     4.9 psb_genrm2s — Generalized 2-Norm of Vector -
     4.10 psb_norm1 — 1-Norm of Sparse Matrix -
     4.11 psb_normi — Infinity Norm of Sparse Matrix -
     4.12 psb_spmm — Sparse Matrix by Dense Matrix Product -
     4.13 psb_spsm — Triangular System Solve -
     4.14 psb_gemlt — Entrywise Product -
     4.15 psb_gediv — Entrywise Division -
     4.16 psb_geinv — Entrywise Inversion +

    4.1 psb_geaxpby — General Dense Matrix Sum

    +

    This subroutine is an interface to the computational kernel for dense matrix +sum: +

    +y ← α x+ βy
+
    +

    +

    call psb_geaxpby(alpha, x, beta, y, desc_a, info) +

    + + + +


    + + + +
    +

    +

    + + + + +


    x, y, α, β Subroutine


    Short Precision Real psb_geaxpby
    Long Precision Real psb_geaxpby
    Short Precision Complexpsb_geaxpby
    Long Precision Complex psb_geaxpby


    +
    Table 1: Data types
    + + + +

    +
    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +alpha

    +

    the scalar α.
    Scope: global
    Type: required
    Intent: in.
    Specified as: a number of the data type indicated in Table 1. +

    +

    +x

    +

    the local portion of global dense matrix x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 1. The + rank of x must be the same of y. +

    +

    +beta

    +

    the scalar β.
    Scope: global
    Type: required
    Intent: in.
    Specified as: a number of the data type indicated in Table 1. +

    +

    +y

    +

    the local portion of the global dense matrix y.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of the type indicated in Table 1. + The rank of y must be the same of x. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +
    +

    +On Return

    +

    +

    +

    +y

    +

    the local portion of result submatrix y.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of the type indicated in Table 1. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + +

    4.2 psb_gedot — Dot Product

    +

    This function computes dot product between two vectors x and y.
    If x and y are real vectors it computes dot-product as: +

    +dot ← xTy
+
    +

    Else if x and y are complex vectors then it computes dot-product as: +

    +dot ← xHy
+
    +

    +

    psb_gedot(x, y, desc_a, info [,global])

    + + +


    + + +
    +

    +

    + + + + +


    dot, x, y Function


    Short Precision Real psb_gedot
    Long Precision Real psb_gedot
    Short Precision Complexpsb_gedot
    Long Precision Complex psb_gedot


    +
    Table 2: Data types
    + + +

    +
    +
    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    the local portion of global dense matrix x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 2. The + rank of x must be the same of y. +

    +

    +y

    +

    the local portion of global dense matrix y.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 2. The + rank of y must be the same of x. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +global

    + + +

    Specifies whether the computation should include the global reduction + across all processes.
    Scope: global
    Type: optional.
    Intent: in.
    Specified as: a logical scalar. Default: global=.true.
    +

    +

    +On Return

    +

    +

    +

    +Function value

    +

    is the dot product of vectors x and y.
    Scope: global unless the optional variable global=.false. has been + specified
    Specified as: a number of the data type indicated in Table 2. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      The computation of a global result requires a global communication, which + entails a significant overhead. It may be necessary and/or advisable to + compute multiple dot products at the same time; in this case, it is + possible to improve the runtime efficiency by using the following scheme: + +

         vres(1) = psb_gedot(x1,y1,desc_a,info,global=.false.) 
      +   vres(2) = psb_gedot(x2,y2,desc_a,info,global=.false.) 
      +   vres(3) = psb_gedot(x3,y3,desc_a,info,global=.false.) 
      +   call psb_sum(ctxt,vres(1:3))
      + +

      In this way the global communication, which for small sizes is a latency-bound + operation, is invoked only once.

    + + +

    4.3 psb_gedots — Generalized Dot Product

    +

    This subroutine computes a series of dot products among the columns of two dense +matrices x and y: +

    +res(i) ← x(:,i)Ty(:,i)
+
    +

    If the matrices are complex, then the usual convention applies, i.e. the conjugate +transpose of x is used. If x and y are of rank one, then res is a scalar, else it is a rank +one array. +

    call psb_gedots(res, x, y, desc_a, info) +

    + + +


    + + +
    +

    +

    + + + + +


    res, x, y Subroutine


    Short Precision Real psb_gedots
    Long Precision Real psb_gedots
    Short Precision Complexpsb_gedots
    Long Precision Complex psb_gedots


    +
    Table 3: Data types
    + + +

    +
    +
    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    the local portion of global dense matrix x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 3. The + rank of x must be the same of y. +

    +

    +y

    +

    the local portion of global dense matrix y.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 3. The + rank of y must be the same of x. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +On Return

    +

    + + +

    +

    +res

    +

    is the dot product of vectors x and y.
    Scope: global
    Intent: out.
    Specified as: a number or a rank-one array of the data type indicated in + Table 2. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + +

    4.4 psb_normi — Infinity-Norm of Vector

    +

    This function computes the infinity-norm of a vector x.
    If x is a real vector it computes infinity norm as: +

    +amax  ← max |xi|
+          i
+
    +

    else if x is a complex vector then it computes the infinity-norm as: +

    +amax ← maxi (|re(xi)|+ |im(xi)|)
+
    +

    +

    psb_geamax(x, desc_a, info [,global])
    psb_normi(x, desc_a, info [,global]) +

    + + +


    + + +
    +

    +

    + + + +



    amax x Function



    Short Precision RealShort Precision Real psb_geamax
    Long Precision Real Long Precision Real psb_geamax
    Short Precision RealShort Precision Complexpsb_geamax
    Long Precision Real Long Precision Complex psb_geamax



    +
    Table 4: Data types
    + + +

    +
    +
    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    the local portion of global dense matrix x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 4. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +global

    +

    Specifies whether the computation should include the global reduction + across all processes.
    Scope: global
    Type: optional.
    Intent: in.
    Specified as: a logical scalar. Default: global=.true.
    +

    +

    +On Return

    +

    + + + +

    +

    +Function value

    +

    is the infinity norm of vector x.
    Scope: global unless the optional variable global=.false. has been + specified
    Specified as: a long precision real number. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      The computation of a global result requires a global communication, which + entails a significant overhead. It may be necessary and/or advisable to compute + multiple norms at the same time; in this case, it is possible to improve the + runtime efficiency by using the following scheme: +

         vres(1) = psb_geamax(x1,desc_a,info,global=.false.) 
      +   vres(2) = psb_geamax(x2,desc_a,info,global=.false.) 
      +   vres(3) = psb_geamax(x3,desc_a,info,global=.false.) 
      +   call psb_amx(ctxt,vres(1:3))
      + +

      In this way the global communication, which for small sizes is a latency-bound + operation, is invoked only once.

    + + + +

    4.5 psb_geamaxs — Generalized Infinity Norm

    +

    This subroutine computes a series of infinity norms on the columns of a dense matrix +x: +

    +res(i) ← max|x(k,i)|
+         k
+
    +

    +

    call psb_geamaxs(res, x, desc_a, info) +

    + + + +


    + + + +
    +

    +

    + + + +



    res x Subroutine



    Short Precision RealShort Precision Real psb_geamaxs
    Long Precision Real Long Precision Real psb_geamaxs
    Short Precision RealShort Precision Complexpsb_geamaxs
    Long Precision Real Long Precision Complex psb_geamaxs



    +
    Table 5: Data types
    + + + +

    +
    +
    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    the local portion of global dense matrix x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 5. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +On Return

    +

    +

    +

    +res

    +

    is the infinity norm of the columns of x.
    Scope: global
    Intent: out.
    Specified as: a number or a rank-one array of long precision real numbers. +

    +

    +info

    + + + +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    4.6 psb_norm1 — 1-Norm of Vector

    +

    This function computes the 1-norm of a vector x.
    If x is a real vector it computes 1-norm as: +

    +asum ←  ∥xi∥
+
    +

    else if x is a complex vector then it computes 1-norm as: +

    +asum ←  ∥re(x)∥1 + ∥im (x)∥1
+
    +

    +

    psb_geasum(x, desc_a, info [,global]) psb_norm1(x, desc_a, info [,global]) +

    + + + +


    + + + +
    +

    +

    + + + +



    asum x Function



    Short Precision RealShort Precision Real psb_geasum
    Long Precision Real Long Precision Real psb_geasum
    Short Precision RealShort Precision Complexpsb_geasum
    Long Precision Real Long Precision Complex psb_geasum



    +
    Table 6: Data types
    + + + +

    +
    +
    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    the local portion of global dense matrix x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 6. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +global

    +

    Specifies whether the computation should include the global reduction + across all processes.
    Scope: global
    Type: optional.
    Intent: in.
    Specified as: a logical scalar. Default: global=.true.
    +

    +

    +On Return

    +

    + + + +

    +

    +Function value

    +

    is the 1-norm of vector x.
    Scope: global unless the optional variable global=.false. has been + specified
    Specified as: a long precision real number. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      The computation of a global result requires a global communication, which + entails a significant overhead. It may be necessary and/or advisable to compute + multiple norms at the same time; in this case, it is possible to improve the + runtime efficiency by using the following scheme: +

         vres(1) = psb_geasum(x1,desc_a,info,global=.false.) 
      +   vres(2) = psb_geasum(x2,desc_a,info,global=.false.) 
      +   vres(3) = psb_geasum(x3,desc_a,info,global=.false.) 
      +   call psb_sum(ctxt,vres(1:3))
      + +

      In this way the global communication, which for small sizes is a latency-bound + operation, is invoked only once.

    + + + +

    4.7 psb_geasums — Generalized 1-Norm of Vector

    +

    This subroutine computes a series of 1-norms on the columns of a dense matrix +x: +

    +res(i) ← max|x(k,i)|
+         k
+
    +

    This function computes the 1-norm of a vector x.
    If x is a real vector it computes 1-norm as: +

    +res(i) ← ∥xi∥
+
    +

    else if x is a complex vector then it computes 1-norm as: +

    +res(i) ← ∥re(x )∥1 +∥im (x )∥1
+
    +

    +

    call psb_geasums(res, x, desc_a, info) +

    + + + +


    + + + +
    +

    +

    + + + +



    res x Subroutine



    Short Precision RealShort Precision Real psb_geasums
    Long Precision Real Long Precision Real psb_geasums
    Short Precision RealShort Precision Complexpsb_geasums
    Long Precision Real Long Precision Complex psb_geasums



    +
    Table 7: Data types
    + + + +

    +
    +
    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    the local portion of global dense matrix x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 7. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +On Return

    +

    +

    +

    +res

    +

    contains the 1-norm of (the columns of) x.
    Scope: global
    Intent: out.
    Short as: a long precision real number. Specified as: a long precision real + number. + + + +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    4.8 psb_norm2 — 2-Norm of Vector

    +

    This function computes the 2-norm of a vector x.
    If x is a real vector it computes 2-norm as: +

    +nrm2  ← √xT-x-
+
    +

    else if x is a complex vector then it computes 2-norm as: +

    +        √----
+nrm2 ←   xHx
+
    +

    +

    + + + +


    + + + +
    +

    +

    + + + +



    nrm2 x Function



    Short Precision RealShort Precision Real psb_genrm2
    Long Precision Real Long Precision Real psb_genrm2
    Short Precision RealShort Precision Complexpsb_genrm2
    Long Precision Real Long Precision Complex psb_genrm2



    +
    Table 8: Data types
    + + + +

    +
    +

    psb_genrm2(x, desc_a, info [,global])
    psb_norm2(x, desc_a, info [,global])
    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    the local portion of global dense matrix x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 8. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +global

    +

    Specifies whether the computation should include the global reduction + across all processes.
    Scope: global
    Type: optional.
    Intent: in.
    Specified as: a logical scalar. Default: global=.true.
    +

    +

    +On Return

    + + + +

    +

    +

    +Function Value

    +

    is the 2-norm of vector x.
    Scope: global unless the optional variable global=.false. has been + specified
    Type: required
    Specified as: a long precision real number. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      The computation of a global result requires a global communication, which + entails a significant overhead. It may be necessary and/or advisable to compute + multiple norms at the same time; in this case, it is possible to improve the + runtime efficiency by using the following scheme: +

         vres(1) = psb_genrm2(x1,desc_a,info,global=.false.) 
      +   vres(2) = psb_genrm2(x2,desc_a,info,global=.false.) 
      +   vres(3) = psb_genrm2(x3,desc_a,info,global=.false.) 
      +   call psb_nrm2(ctxt,vres(1:3))
      + +

      In this way the global communication, which for small sizes is a latency-bound + operation, is invoked only once.

    + + + +

    4.9 psb_genrm2s — Generalized 2-Norm of Vector

    +

    This subroutine computes a series of 2-norms on the columns of a dense matrix +x: +

    +res(i) ← ∥x(:,i)∥2
+
    +

    +

    call psb_genrm2s(res, x, desc_a, info) +

    + + + +


    + + + +
    +

    +

    + + + +



    res x Subroutine



    Short Precision RealShort Precision Real psb_genrm2s
    Long Precision Real Long Precision Real psb_genrm2s
    Short Precision RealShort Precision Complexpsb_genrm2s
    Long Precision Real Long Precision Complex psb_genrm2s



    +
    Table 9: Data types
    + + + +

    +
    +
    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    the local portion of global dense matrix x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 9. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +On Return

    +

    +

    +

    +res

    +

    contains the 1-norm of (the columns of) x.
    Scope: global
    Intent: out.
    Specified as: a long precision real number. +

    +

    +info

    + + + +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    4.10 psb_norm1 — 1-Norm of Sparse Matrix

    +

    This function computes the 1-norm of a matrix A:
    +

    +nrm1 ← ∥A ∥1
+
    +

    where: +

    +

    +A

    +

    represents the global matrix A

    +
    + + + +


    + +
    +

    +

    + + + +


    A Function


    Short Precision Real psb_spnrm1
    Long Precision Real psb_spnrm1
    Short Precision Complexpsb_spnrm1
    Long Precision Complex psb_spnrm1


    +
    Table 10: Data types
    + + + +

    +
    + + + +
    +psb_spnrm1(A, desc_a, info)
    +psb_norm1(A, desc_a, info)
    +
    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +a

    +

    the local portion of the global sparse matrix A.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_Tspmat_type. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +On Return

    +

    +

    +

    +Function value

    +

    is the 1-norm of sparse submatrix A.
    Scope: global
    Specified as: a long precision real number. + + + +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    4.11 psb_normi — Infinity Norm of Sparse Matrix

    +

    This function computes the infinity-norm of a matrix A:
    +

    +nrmi ←  ∥A∥∞
+
    +

    where: +

    +

    +A

    +

    represents the global matrix A

    +
    + + + +


    + + + +
    +

    +

    + + + +


    A Function


    Short Precision Real psb_spnrmi
    Long Precision Real psb_spnrmi
    Short Precision Complexpsb_spnrmi
    Long Precision Complex psb_spnrmi


    +
    Table 11: Data types
    + + + +

    +
    + + + +
    +psb_spnrmi(A, desc_a, info)
    +psb_normi(A, desc_a, info)
    +
    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +a

    +

    the local portion of the global sparse matrix A.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_Tspmat_type. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +On Return

    +

    +

    +

    +Function value

    +

    is the infinity-norm of sparse submatrix A.
    Scope: global
    Specified as: a long precision real number. + + + +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    4.12 psb_spmm — Sparse Matrix by Dense Matrix Product

    +

    This subroutine computes the Sparse Matrix by Dense Matrix Product: +
    +
    +y ← αAx + βy
+
    +
    (1)
    +

    +
    +
    +       T
+y ← αA  x+ βy
+
    +
    (2)
    +

    +
    +
    +y ← αAHx + βy
+
    +
    (3)
    +

    +

    where: + + + +

    +

    +x

    +

    is the global dense matrix x:,: +

    +

    +y

    +

    is the global dense matrix y:,: +

    +

    +A

    +

    is the global sparse matrix A

    +
    + + + +


    + + + +
    +

    +

    + + + + +


    A, x, y, α, β Subroutine


    Short Precision Real psb_spmm
    Long Precision Real psb_spmm
    Short Precision Complexpsb_spmm
    Long Precision Complex psb_spmm


    +
    Table 12: Data types
    + + + +

    +
    +

    call psb_spmm(alpha, a, x, beta, y, desc_a, info)
    call psb_spmm(alpha, a, x, beta, y,desc_a, info, trans, work) +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +alpha

    +

    the scalar α.
    Scope: global
    Type: required
    Intent: in.
    Specified as: a number of the data type indicated in Table 12. +

    +

    +a

    +

    the local portion of the sparse matrix A.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_Tspmat_type. +

    +

    +x

    +

    the local portion of global dense matrix x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 12. The + rank of x must be the same of y. +

    +

    +beta

    + + + +

    the scalar β.
    Scope: global
    Type: required
    Intent: in.
    Specified as: a number of the data type indicated in Table 12. +

    +

    +y

    +

    the local portion of global dense matrix y.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 12. The + rank of y must be the same of x. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +trans

    +

    indicates what kind of operation to perform. +

    +

    + trans = N

    +

    the operation is specified by equation 1 +

    +

    + trans = T

    +

    the operation is specified by equation 2 +

    +

    + trans = C

    +

    the operation is specified by equation 3

    +

    Scope: global
    Type: optional
    Intent: in.
    Default: trans = N
    Specified as: a character variable. + + + +

    +

    +work

    +

    work array.
    Scope: local
    Type: optional
    Intent: inout.
    Specified as: a rank one array of the same type of x and y with the TARGET + attribute. +

    +

    +On Return

    +

    +

    +

    +y

    +

    the local portion of result matrix y.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: an array of rank one or two containing numbers of type specified + in Table 12. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    4.13 psb_spsm — Triangular System Solve

    +

    This subroutine computes the Triangular System Solve: +

    +
    +y  ←   αT- 1x + βy
+y  ←   αDT -1x +βy
+         - 1
+y  ←   αT  Dx  +βy
+y  ←   αT- Tx+ βy
+y  ←   αDT -Tx + βy
+y  ←   αT- TDx + βy
+         - H
+y  ←   αT   x +βy
+y  ←   αDT -Hx + βy
+y  ←   αT- HDx + βy
+
    +
    +

    where: +

    +

    +x

    +

    is the global dense matrix x:,: +

    +

    +y

    +

    is the global dense matrix y:,: +

    +

    +T

    +

    is the global sparse block triangular submatrix T +

    +

    +D

    +

    is the scaling diagonal matrix.

    + + + +

    call psb_spsm(alpha, t, x, beta, y, desc_a, info)
    call psb_spsm(alpha, t, x, beta, y, desc_a, info, trans, unit, choice, diag, work)
    +

    + + + +


    + + + +
    +

    +

    + + + + +


    T, x, y, D, α, β Subroutine


    Short Precision Real psb_spsm
    Long Precision Real psb_spsm
    Short Precision Complexpsb_spsm
    Long Precision Complex psb_spsm


    +
    Table 13: Data types
    + + + +

    +
    +
    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +alpha

    +

    the scalar α.
    Scope: global
    Type: required
    Intent: in.
    Specified as: a number of the data type indicated in Table 13. +

    +

    +t

    +

    the global portion of the sparse matrix T.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object type specified in  3. +

    +

    +x

    +

    the local portion of global dense matrix x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 13. The + rank of x must be the same of y. +

    +

    +beta

    +

    the scalar β.
    Scope: global
    Type: required
    Intent: in.
    Specified as: a number of the data type indicated in Table 13. + + + +

    +

    +y

    +

    the local portion of global dense matrix y.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 13. The + rank of y must be the same of x. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +trans

    +

    specify with unitd the operation to perform. +

    +

    + trans = ’N’

    +

    the operation is with no transposed matrix +

    +

    + trans = ’T’

    +

    the operation is with transposed matrix. +

    +

    + trans = ’C’

    +

    the operation is with conjugate transposed matrix.

    +

    Scope: global
    Type: optional
    Intent: in.
    Default: trans = N
    Specified as: a character variable. +

    +

    +unitd

    +

    specify with trans the operation to perform. + + + +

    +

    + unitd = ’U’

    +

    the operation is with no scaling +

    +

    + unitd = ’L’

    +

    the operation is with left scaling +

    +

    + unitd = ’R’

    +

    the operation is with right scaling.

    +

    Scope: global
    Type: optional
    Intent: in.
    Default: unitd = U
    Specified as: a character variable. +

    +

    +choice

    +

    specifies the update of overlap elements to be performed on exit: +

    +

    +

    +

    psb_none_ +

    +

    +

    +

    psb_sum_ +

    +

    +

    +

    psb_avg_ +

    +

    +

    +

    psb_square_root_

    +

    Scope: global
    Type: optional
    Intent: in.
    Default: psb_avg_
    Specified as: an integer variable. + + + +

    +

    +diag

    +

    the diagonal scaling matrix.
    Scope: local
    Type: optional
    Intent: in.
    Default: diag(1) = 1(noscaling)
    Specified as: a rank one array containing numbers of the type indicated in + Table 13. +

    +

    +work

    +

    a work array.
    Scope: local
    Type: optional
    Intent: inout.
    Specified as: a rank one array of the same type of x with the TARGET + attribute. +

    +

    +On Return

    +

    +

    +

    +y

    +

    the local portion of global dense matrix y.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: an array of rank one or two containing numbers of type specified + in Table 13. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    4.14 psb_gemlt — Entrywise Product

    +

    This function computes the entrywise product between two vectors x and +y +

    +dot ← x(i)y(i).
+
    +

    +

    psb_gemlt(x, y, desc_a, info) +

    + + + +


    + + + +
    +

    +

    + + + + +


    dot, x, y Function


    Short Precision Real psb_gemlt
    Long Precision Real psb_gemlt
    Short Precision Complexpsb_gemlt
    Long Precision Complex psb_gemlt


    +
    Table 14: Data types
    + + + +

    +
    +
    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    the local portion of global dense vector x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_T_vect_type containing numbers of + type specified in Table 2. +

    +

    +y

    +

    the local portion of global dense vector y.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_T_vect_type containing numbers of + type specified in Table 2. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +On Return

    +

    + + + +

    +

    +y

    +

    the local portion of result submatrix y.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: an object of type psb_T_vect_type containing numbers of + the type indicated in Table 14. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    4.15 psb_gediv — Entrywise Division

    +

    This function computes the entrywise division between two vectors x and +y +

    +∕ ← x(i)∕y(i).
+
    +

    +

    psb_gediv(x, y, desc_a, info, [flag) +

    + + + +


    + + + +
    +

    +

    + + + + +


    , x, y Function


    Short Precision Real psb_gediv
    Long Precision Real psb_gediv
    Short Precision Complexpsb_gediv
    Long Precision Complex psb_gediv


    +
    Table 15: Data types
    + + + +

    +
    +
    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    the local portion of global dense vector x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_T_vect_type containing numbers of + type specified in Table 2. +

    +

    +y

    +

    the local portion of global dense vector y.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_T_vect_type containing numbers of + type specified in Table 2. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +flag

    +

    check if any of the y(i) = 0, and in case returns error halting the + computation.
    Scope: local
    Type: optional Intent: in.
    Specified as: the logical value flag=.true. + + + +

    +

    +On Return

    +

    +

    +

    +x

    +

    the local portion of result submatrix x.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: an object of type psb_T_vect_type containing numbers of + the type indicated in Table 14. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    4.16 psb_geinv — Entrywise Inversion

    +

    This function computes the entrywise inverse of a vector x and puts it into +y +

    +∕ ← 1∕x(i).
+
    +

    +

    psb_geinv(x, y, desc_a, info, [flag) +

    + + + +


    + + + +
    +

    +

    + + + + +


    , x, y Function


    Short Precision Real psb_geinv
    Long Precision Real psb_geinv
    Short Precision Complexpsb_geinv
    Long Precision Complex psb_geinv


    +
    Table 16: Data types
    + + + +

    +
    +
    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    the local portion of global dense vector x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_T_vect_type containing numbers of + type specified in Table 2. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an object of type psb_desc_type. +

    +

    +flag

    +

    check if any of the x(i) = 0, and in case returns error halting the + computation.
    Scope: local
    Type: optional Intent: in.
    Specified as: the logical value flag=.true. +

    +

    +On Return

    +

    + + + +

    +

    +y

    +

    the local portion of result submatrix x.
    Scope: local
    Type: required
    Intent: out.
    Specified as: an object of type psb_T_vect_type containing numbers of + the type indicated in Table 16. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + + + + + + + + +href="userhtml.html#userhtmlse7.html" >up]

    + id="tailuserhtmlse4.html"> diff --git a/docs/html/userhtmlse5.html b/docs/html/userhtmlse5.html index c897c0eb..6b87e4b3 100644 --- a/docs/html/userhtmlse5.html +++ b/docs/html/userhtmlse5.html @@ -11,42 +11,2309 @@

    +href="#tailuserhtmlse5.html">tail] [up]

    5 Communication routines

    + id="x10-720005">Communication routines

    The routines in this chapter implement various global communication operators on vectors associated with a discretization mesh. For auxiliary communication routines not tied to a discretization space see 6. +href="userhtmlse6.html#x11-770006">6. -

    -  5.1 psb_halo — Halo Data Communication -
     5.2 psb_ovrl — Overlap Update -
     5.3 psb_gather — Gather Global Dense Matrix -
     5.4 psb_scatter — Scatter Global Dense Matrix +

    5.1 psb_halo — Halo Data Communication

    +

    These subroutines gathers the values of the halo elements: +

    +x ← x
+
    +

    where: +

    +

    +x

    +

    is a global dense submatrix.

    +
    + + + +


    + + + +
    +

    +

    + + + + + +


    α, x Subroutine


    Integer psb_halo
    Short Precision Real psb_halo
    Long Precision Real psb_halo
    Short Precision Complexpsb_halo
    Long Precision Complex psb_halo


    +
    Table 17: Data types
    + + + +

    +

    call psb_halo(x, desc_a, info)
    call psb_halo(x, desc_a, info, work, data) +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    global dense matrix x.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 17. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a structured data of type psb_desc_type. +

    +

    +work

    +

    the work array.
    Scope: local
    Type: optional
    Intent: inout.
    Specified as: a rank one array of the same type of x. +

    +

    +data

    + + +

    index list selector.
    Scope: global
    Type: optional
    Specified + as: an integer. Values:psb_comm_halo_,psb_comm_mov_, psb_comm_ext_, + default: psb_comm_halo_. Chooses the index list on which to base the data + exchange. +

    +

    +On Return

    +

    +

    +

    +x

    +

    global dense result matrix x.
    Scope: local
    Type: required
    Intent: inout.
    Returned as: a rank one or two array containing numbers of type specified + in Table 17. +

    +

    +info

    +

    the local portion of result submatrix y.
    Scope: local
    Type: required
    Intent: out.
    An integer value that contains an error code.

    +


    +
    +

    +

    PIC

    +
    Figure 3: Sample discretization mesh.
    +


    +

    Usage Example Consider the discretization mesh depicted in fig. 3, partitioned +among two processes as shown by the dashed line; the data distribution is such that +each process will own 32 entries in the index space, with a halo made of 8 entries +placed at local indices 33 through 40. If process 0 assigns an initial value of 1 to +its entries in the x vector, and process 1 assigns a value of 2, then after +a call to psb_halo the contents of the local vectors will be the following: +

    + + +


    + + + +
    +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Process 0
    Process 1
    +
    IGLOB(I)X(I) IGLOB(I)X(I)
    1 1 1.0 1 33 2.0
    2 2 1.0 2 34 2.0
    3 3 1.0 3 35 2.0
    4 4 1.0 4 36 2.0
    5 5 1.0 5 37 2.0
    6 6 1.0 6 38 2.0
    7 7 1.0 7 39 2.0
    8 8 1.0 8 40 2.0
    9 9 1.0 9 41 2.0
    10 10 1.010 42 2.0
    11 11 1.011 43 2.0
    12 12 1.012 44 2.0
    13 13 1.013 45 2.0
    14 14 1.014 46 2.0
    15 15 1.015 47 2.0
    16 16 1.016 48 2.0
    17 17 1.017 49 2.0
    18 18 1.018 50 2.0
    19 19 1.019 51 2.0
    20 20 1.020 52 2.0
    21 21 1.021 53 2.0
    22 22 1.022 54 2.0
    23 23 1.023 55 2.0
    24 24 1.024 56 2.0
    25 25 1.025 57 2.0
    26 26 1.026 58 2.0
    27 27 1.027 59 2.0
    28 28 1.028 60 2.0
    29 29 1.029 61 2.0
    30 30 1.030 62 2.0
    31 31 1.031 63 2.0
    32 32 1.032 64 2.0
    33 33 2.033 25 1.0
    34 34 2.034 26 1.0
    35 35 2.035 27 1.0
    36 36 2.036 28 1.0
    37 37 2.037 29 1.0
    38 38 2.038 30 1.0
    39 39 2.039 31 1.0
    40 40 2.040 32 1.0
    + + + +

    +
    + + + +

    5.2 psb_ovrl — Overlap Update

    +

    These subroutines applies an overlap operator to the input vector: +

    +x ← Qx
+
    +

    where: +

    +

    +x

    +

    is the global dense submatrix x +

    +

    +Q

    +

    is the overlap operator; it is the composition of two operators Pa and PT.

    +
    + +


    + + + +
    +

    +

    + + + +


    x Subroutine


    Short Precision Real psb_ovrl
    Long Precision Real psb_ovrl
    Short Precision Complexpsb_ovrl
    Long Precision Complex psb_ovrl


    +
    Table 18: Data types
    + + + +

    +
    +

    call psb_ovrl(x, desc_a, info)
    call psb_ovrl(x, desc_a, info, update=update_type, work=work) +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    global dense matrix x.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type containing numbers of type specified in Table 18. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a structured data of type psb_desc_type. +

    +

    +update

    +

    Update operator.
    +

    +

    + update = psb_none_

    +

    Do nothing; +

    +

    + update = psb_add_

    +

    Sum overlap entries, i.e. apply PT; + + + +

    +

    + update = psb_avg_

    +

    Average overlap entries, i.e. apply PaPT;

    +

    Scope: global
    Intent: in.
    Default: update_type = psb_avg_
    Scope: global
    Specified as: a integer variable. +

    +

    +work

    +

    the work array.
    Scope: local
    Type: optional
    Intent: inout.
    Specified as: a one dimensional array of the same type of x. +

    +

    +On Return

    +

    +

    +

    +x

    +

    global dense result matrix x.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: an array of rank one or two containing numbers of type specified + in Table 18. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. + + + +

      If there is no overlap in the data distribution associated with the + descriptor, no operations are performed; +

    2. +
    3. +

      The operator PT performs the reduction sum of overlap elements; it is a + “prolongation” operator PT that replicates overlap elements, accounting + for the physical replication of data; +

    4. +
    5. +

      The operator Pa performs a scaling on the overlap elements by the + amount of replication; thus, when combined with the reduction operator, + it implements the average of replicated elements over all of their instances.

    +


    + + + + + + + +
    +

    +

    PIC

    +
    Figure 4: Sample discretization mesh.
    + + + +


    +

    Example of use Consider the discretization mesh depicted in fig. 4, partitioned +among two processes as shown by the dashed lines, with an overlap of 1 extra layer +with respect to the partition of fig. 3; the data distribution is such that +each process will own 40 entries in the index space, with an overlap of 16 +entries placed at local indices 25 through 40; the halo will run from local +index 41 through local index 48.. If process 0 assigns an initial value of 1 to +its entries in the x vector, and process 1 assigns a value of 2, then after a +call to psb_ovrl with psb_avg_ and a call to psb_halo_ the contents of +the local vectors will be the following (showing a transition among the two +subdomains) +

    + + + +


    + + + +
    +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Process 0
    Process 1
    +
    IGLOB(I)X(I) IGLOB(I)X(I)
    1 1 1.0 1 33 1.5
    2 2 1.0 2 34 1.5
    3 3 1.0 3 35 1.5
    4 4 1.0 4 36 1.5
    5 5 1.0 5 37 1.5
    6 6 1.0 6 38 1.5
    7 7 1.0 7 39 1.5
    8 8 1.0 8 40 1.5
    9 9 1.0 9 41 2.0
    10 10 1.010 42 2.0
    11 11 1.011 43 2.0
    12 12 1.012 44 2.0
    13 13 1.013 45 2.0
    14 14 1.014 46 2.0
    15 15 1.015 47 2.0
    16 16 1.016 48 2.0
    17 17 1.017 49 2.0
    18 18 1.018 50 2.0
    19 19 1.019 51 2.0
    20 20 1.020 52 2.0
    21 21 1.021 53 2.0
    22 22 1.022 54 2.0
    23 23 1.023 55 2.0
    24 24 1.024 56 2.0
    25 25 1.525 57 2.0
    26 26 1.526 58 2.0
    27 27 1.527 59 2.0
    28 28 1.528 60 2.0
    29 29 1.529 61 2.0
    30 30 1.530 62 2.0
    31 31 1.531 63 2.0
    32 32 1.532 64 2.0
    33 33 1.533 25 1.5
    34 34 1.534 26 1.5
    35 35 1.535 27 1.5
    36 36 1.536 28 1.5
    37 37 1.537 29 1.5
    38 38 1.538 30 1.5
    39 39 1.539 31 1.5
    40 40 1.540 32 1.5
    41 41 2.041 17 1.0
    42 42 2.042 18 1.0
    43 43 2.043 19 1.0
    44 44 2.044 20 1.0
    45 45 2.045 21 1.0
    46 46 2.046 22 1.0
    47 47 2.047 23 1.0
    48 48 2.048 24 1.0
    + + + +

    +
    + + + +

    5.3 psb_gather — Gather Global Dense Matrix

    +

    These subroutines collect the portions of global dense matrix distributed over all +process into one single array stored on one process. +

    +glob-x ← collect(loc-xi)
+
    +

    where: +

    +

    +glob_x

    +

    is the global submatrix glob_x1:m,1:n +

    +

    +loc_xi

    +

    is the local portion of global dense matrix on process i. +

    +

    +collect

    +

    is the collect function.

    +
    + + + +


    + + + +
    +

    +

    + + + + + +


    xi,y Subroutine


    Integer psb_gather
    Short Precision Real psb_gather
    Long Precision Real psb_gather
    Short Precision Complexpsb_gather
    Long Precision Complex psb_gather


    +
    Table 19: Data types
    + + + +

    +
    +

    call psb_gather(glob_x, loc_x, desc_a, info, root) +call psb_gather(glob_x, loc_x, desc_a, info, root) +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +loc_x

    +

    the local portion of global dense matrix glob_x.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type indicated in Table 19. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a structured data of type psb_desc_type. +

    +

    +root

    +

    The process that holds the global copy. If root = -1 all the processes will + have a copy of the global vector.
    Scope: global
    Type: optional
    Intent: in.
    Specified as: an integer variable -1 root np - 1, default -1. +

    +

    +On Return

    +

    + + + +

    +

    +glob_x

    +

    The array where the local parts must be gathered.
    Scope: global
    Type: required
    Intent: out.
    Specified as: a rank one or two array with the ALLOCATABLE attribute. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    5.4 psb_scatter — Scatter Global Dense Matrix

    +

    These subroutines scatters the portions of global dense matrix owned by a process to +all the processes in the processes grid. +

    +loc-xi ← scatter(glob-x)
+
    +

    where: +

    +

    +glob_x

    +

    is the global matrix glob_x1:m,1:n +

    +

    +loc_xi

    +

    is the local portion of global dense matrix on process i. +

    +

    +scatter

    +

    is the scatter function.

    +
    + + + +


    + + + +
    +

    +

    + + + + + +


    xi,y Subroutine


    Integer psb_scatter
    Short Precision Real psb_scatter
    Long Precision Real psb_scatter
    Short Precision Complexpsb_scatter
    Long Precision Complex psb_scatter


    +
    Table 20: Data types
    + + + +

    +
    +

    call psb_scatter(glob_x, loc_x, desc_a, info, root, mold) +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +glob_x

    +

    The array that must be scattered into local pieces.
    Scope: global
    Type: required
    Intent: in.
    Specified as: a rank one or two array. +

    +

    +desc_a

    +

    contains data structures for communications.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a structured data of type psb_desc_type. +

    +

    +root

    +

    The process that holds the global copy. If root = -1 all the processes have + a copy of the global vector.
    Scope: global
    Type: optional
    Intent: in.
    Specified as: an integer variable -1 root np - 1, default psb_root_, + i.e. process 0. +

    +

    +mold

    + + + +

    The desired dynamic type for the internal vector storage.
    Scope: local.
    Type: optional.
    Intent: in.
    Specified as: an object of a class derived from psb_T_base_vect_type; + this is only allowed when loc_x is of type psb_T_vect_type. +

    +

    +On Return

    +

    +

    +

    +loc_x

    +

    the local portion of global dense matrix glob_x.
    Scope: local
    Type: required
    Intent: out.
    Specified as: a rank one or two ALLOCATABLE array or an object of type + psb_T_vect_type containing numbers of the type indicated in Table 20. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + + + + + + + + +href="userhtml.html#userhtmlse8.html" >up]

    + id="tailuserhtmlse5.html"> diff --git a/docs/html/userhtmlse6.html b/docs/html/userhtmlse6.html index 78d2fa1e..19fb0f5d 100644 --- a/docs/html/userhtmlse6.html +++ b/docs/html/userhtmlse6.html @@ -11,105 +11,4060 @@

    +href="userhtmlse3.html#tailuserhtmlse6.html">tail] [up]

    6 Data management routines

    + id="x11-770006">Data management routines

    -

    -  6.1 psb_cdall — Allocates a communication descriptor -
     6.2 psb_cdins — Communication descriptor insert routine -
     6.3 psb_cdasb — Communication descriptor assembly routine -
     6.4 psb_cdcpy — Copies a communication descriptor -
     6.5 psb_cdfree — Frees a communication descriptor -
     6.6 psb_cdbldext — Build an extended communication descriptor -
     6.7 psb_spall — Allocates a sparse matrix -
     6.8 psb_spins — Insert a set of coefficients into a sparse matrix -
     6.9 psb_spasb — Sparse matrix assembly routine -
     6.10 psb_spfree — Frees a sparse matrix -
     6.11 psb_sprn — Reinit sparse matrix structure for psblas routines. -
     6.12 psb_geall — Allocates a dense matrix -
     6.13 psb_geins — Dense matrix insertion routine -
     6.14 psb_geasb — Assembly a dense matrix -
     6.15 psb_gefree — Frees a dense matrix -
     6.16 psb_gelp — Applies a left permutation to a dense matrix -
     6.17 psb_glob_to_loc — Global to local indices convertion -
     6.18 psb_loc_to_glob — Local to global indices conversion -
     6.19 psb_is_owned — -
     6.20 psb_owned_index — -
     6.21 psb_is_local — -
     6.22 psb_local_index — -
     6.23 psb_get_boundary — Extract list of boundary elements -
     6.24 psb_get_overlap — Extract list of overlap elements -
     6.25 psb_sp_getrow — Extract row(s) from a sparse matrix -
     6.26 psb_sizeof — Memory occupation -
     6.27 Sorting utilities — -
    +

    6.1 psb_cdall — Allocates a communication descriptor

    + + + +
    +call psb_cdall(icontxt, desc_a, info,mg=mg,parts=parts)
    +call psb_cdall(icontxt, desc_a, info,vg=vg,[mg=mg,flag=flag])
    +call psb_cdall(icontxt, desc_a, info,vl=vl,[nl=nl,globalcheck=.false.,lidx=lidx])
    +call psb_cdall(icontxt, desc_a, info,nl=nl)
    +call psb_cdall(icontxt, desc_a, info,mg=mg,repl=.true.)
    +
    +

    +

    This subroutine initializes the communication descriptor associated with an index +space. One of the optional arguments parts, vg, vl, nl or repl must be specified, +thereby choosing the specific initialization strategy. +

    +

    +On Entry

    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +icontxt

    +

    the communication context.
    Scope:global.
    Type:required.
    Intent: in.
    Specified as: an integer value. +

    +

    +vg

    +

    Data allocation: each index i ∈{1mg} is allocated to process vg(i).
    Scope:global.
    Type:optional.
    Intent: in.
    Specified as: an integer array. +

    +

    +flag

    +

    Specifies whether entries in vg are zero- or one-based.
    Scope:global.
    Type:optional.
    Intent: in.
    Specified as: an integer value 0,1, default 0. + + + +

    +

    +mg

    +

    the (global) number of rows of the problem.
    Scope:global.
    Type:optional.
    Intent: in.
    Specified as: an integer value. It is required if parts or repl is specified, + it is optional if vg is specified. +

    +

    +parts

    +

    the subroutine that defines the partitioning scheme.
    Scope:global.
    Type:required.
    Specified as: a subroutine. +

    +

    +vl

    +

    Data allocation: the set of global indices vl(1 : nl) belonging to the calling + process.
    Scope:local.
    Type:optional.
    Intent: in.
    Specified as: an integer array. +

    +

    +nl

    +

    Data allocation: in a generalized block-row distribution the number of + indices belonging to the current process.
    Scope:local.
    Type:optional.
    Intent: in.
    Specified as: an integer value. May be specified together with vl. +

    +

    +repl

    +

    Data allocation: build a replicated index space (i.e. all processes own all + indices).
    Scope:global.
    Type:optional.
    Intent: in.
    Specified as: the logical value .true. + + + +

    +

    +globalcheck

    +

    Data allocation: do global checks on the local index lists vl
    Scope:global.
    Type:optional.
    Intent: in.
    Specified as: a logical value, default: .false. +

    +

    +lidx

    +

    Data allocation: the set of local indices lidx(1 : nl) to be assigned to the + global indices vl.
    Scope:local.
    Type:optional.
    Intent: in.
    Specified as: an integer array.

    +

    +

    +

    +On Return

    +

    +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: out.
    Specified as: a structured data of type psb_desc_type. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. + + + +

      One of the optional arguments parts, vg, vl, nl or repl must be specified, + thereby choosing the initialization strategy as follows: +

      +

      + parts

      +

      In this case we have a subroutine specifying the mapping between global + indices and process/local index pairs. If this optional argument is + specified, then it is mandatory to specify the argument mg as well. The + subroutine must conform to the following interface: + + + +

      +           interface
      +              subroutine psb_parts(glob_index,mg,np,pv,nv)
      +                integer, intent (in)  :: glob_index,np,mg
      +                integer, intent (out) :: nv, pv(*)
      +              end subroutine psb_parts
      +           end interface
      +
      +

      The input arguments are: +

      +

      + glob_index

      +

      The global index to be mapped; +

      +

      + np

      +

      The number of processes in the mapping; +

      +

      + mg

      +

      The total number of global rows in the mapping;

      +

      The output arguments are: +

      +

      + nv

      +

      The number of entries in pv; +

      +

      + pv

      +

      A vector containing the indices of the processes to which the + global index should be assigend; each entry must satisfy 0 + pv(i) < np; if nv > 1 we have an index assigned to multiple + processes, i.e. we have an overlap among the subdomains.

      +
      +

      + vg

      +

      In this case the association between an index and a process is specified via + an integer vector vg(1:mg); each index i ∈{1mg} is assigned to process + vg(i). The vector vg must be identical on all calling processes; its + entries may have the ranges (0np - 1) or (1np) according to the + value of flag. The size mg may be specified via the optional + argument mg; the default is to use the entire vector vg, thus having + mg=size(vg). +

      +

      + vl

      + + + +

      In this case we are specifying the list of indices vl(1:nl) assigned to the + current process; thus, the global problem size mg is given by the range of + the aggregate of the individual vectors vl specified in the calling + processes. The size may be specified via the optional argument nl; the + default is to use the entire vector vl, thus having nl=size(vl). If + globalcheck=.true. the subroutine will check how many times each + entry in the global index space (1mg) is specified in the input lists vl, + thus allowing for the presence of overlap in the input, and checking for + “orphan” indices. If globalcheck=.false., the subroutine will not + check for overlap, and may be significantly faster, but the user is + implicitly guaranteeing that there are neither orphan nor overlap + indices. +

      +

      + lidx

      +

      The optional argument lidx is available for those cases in which the user + has already established a global-to-local mapping; if it is specified, each + index in vl(i) will be mapped to the corresponding local index lidx(i). + When specifying the argument lidx the user would also likely employ + lidx in calls to psb_cdins and local in calls to psb_spins and + psb_geins; see also sec. 2.3.1. +

      +

      + nl

      +

      If this argument is specified alone (i.e. without vl) the result is a + generalized row-block distribution in which each process I gets assigned a + consecutive chunk of NI = nl global indices. +

      +

      + repl

      +

      This arguments specifies to replicate all indices on all processes. This is a + special purpose data allocation that is useful in the construction of some + multilevel preconditioners.

      +
    2. +
    3. +

      On exit from this routine the descriptor is in the build state. +

    4. +
    5. +

      Calling the routine with vg or parts implies that every process will scan the + entire index space to figure out the local indices. +

    6. +
    7. +

      Overlapped indices are possible with both parts and vl invocations. + + + +

    8. +
    9. +

      When the subroutine is invoked with vl in conjunction with globalcheck=.true., + it will perform a scan of the index space to search for overlap or orphan + indices. +

    10. +
    11. +

      When the subroutine is invoked with vl in conjunction with globalcheck=.false., + no index space scan will take place. Thus it is the responsibility of the user to + make sure that the indices specified in vl have neither orphans nor overlaps; if + this assumption fails, results will be unpredictable. +

    12. +
    13. +

      Orphan and overlap indices are impossible by construction when the subroutine + is invoked with nl (alone), or vg.

    + + + +

    6.2 psb_cdins — Communication descriptor insert routine

    + + + +
    +call psb_cdins(nz, ia, ja, desc_a, info [,ila,jla])
    +call psb_cdins(nz,ja,desc,info[,jla,mask,lidx])
    +
    +

    +

    This subroutine examines the edges of the graph associated with the +discretization mesh (and isomorphic to the sparsity pattern of a linear system +coefficient matrix), storing them as necessary into the communication descriptor. In +the first form the edges are specified as pairs of indices ia(i),ja(i); the starting index +ia(i) should belong to the current process. In the second form only the remote indices +ja(i) are specified. +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +nz

    +

    the number of points being inserted.
    Scope: local.
    Type: required.
    Intent: in.
    Specified as: an integer value. +

    +

    +ia

    +

    the indices of the starting vertex of the edges being inserted.
    Scope: local.
    Type: required.
    Intent: in.
    Specified as: an integer array of length nz. +

    +

    +ja

    + + + +

    the indices of the end vertex of the edges being inserted.
    Scope: local.
    Type: required.
    Intent: in.
    Specified as: an integer array of length nz. +

    +

    +mask

    +

    Mask entries in ja, they are inserted only when the corresponding mask + entries are .true.
    Scope: local.
    Type: optional.
    Intent: in.
    Specified as: a logical array of length nz, default .true.. +

    +

    +lidx

    +

    User defined local indices for ja.
    Scope: local.
    Type: optional.
    Intent: in.
    Specified as: an integer array of length nz.

    +

    +

    +

    +On Return

    +

    +

    +

    +desc_a

    +

    the updated communication descriptor.
    Scope:local.
    Type:required.
    Intent: inout.
    Specified as: a structured data of type psb_desc_type. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected. + + + +

    +

    +ila

    +

    the local indices of the starting vertex of the edges being inserted.
    Scope: local.
    Type: optional.
    Intent: out.
    Specified as: an integer array of length nz. +

    +

    +jla

    +

    the local indices of the end vertex of the edges being inserted.
    Scope: local.
    Type: optional.
    Intent: out.
    Specified as: an integer array of length nz. +

    +

    Notes +

      +
    1. +

      This routine may only be called if the descriptor is in the build state; +

    2. +
    3. +

      This routine automatically ignores edges that do not insist on the current + process, i.e. edges for which neither the starting nor the end vertex belong + to the current process. +

    4. +
    5. +

      The second form of this routine will be useful when dealing with + user-specified index mappings; see also 2.3.1.

    + + + +

    6.3 psb_cdasb — Communication descriptor assembly routine

    + + + +
    +call psb_cdasb(desc_a, info [, mold])
    +
    +

    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: inout.
    Specified as: a structured data of type psb_desc_type. +

    +

    +mold

    +

    The desired dynamic type for the internal index storage.
    Scope: local.
    Type: optional.
    Intent: in.
    Specified as: a object of type derived from (integer) + psb_T_base_vect_type.

    +

    +

    +

    +On Return

    +

    +

    +

    +desc_a

    + + + +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: inout.
    Specified as: a structured data of type psb_desc_type. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      On exit from this routine the descriptor is in the assembled state.

    +

    This call will set up all the necessary information for the halo data exchanges. In doing +so, the library will need to identify the set of processes owning the halo indices +through the use of the desc%fnd_owner() method; the owning processes +are the topological neighbours of the calling process. If the user has some +background information on the processes that are neighbours of the current one, +it is possible to specify explicitly the list of adjacent processes with a call +to desc%set_p_adjcncy(list); this will speed up the subsequent call to +psb_cdasb. + + + +

    6.4 psb_cdcpy — Copies a communication descriptor

    + + + +
    +call psb_cdcpy(desc_in, desc_out, info)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +desc_in

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_desc_type. +

    +

    +

    +

    +On Return

    +

    +

    +

    +desc_out

    +

    the communication descriptor copy.
    Scope:local.
    Type:required.
    Intent: out.
    Specified as: a structured data of type psb_desc_type. +

    +

    +info

    + + + +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    6.5 psb_cdfree — Frees a communication descriptor

    + + + +
    +call psb_cdfree(desc_a, info)
    +
    +

    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +desc_a

    +

    the communication descriptor to be freed.
    Scope:local.
    Type:required.
    Intent: inout.
    Specified as: a structured data of type psb_desc_type.

    +

    +

    +

    +On Return

    +

    +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    6.6 psb_cdbldext — Build an extended communication descriptor

    + + + +
    +call psb_cdbldext(a,desc_a,nl,desc_out, info, extype)
    +
    +

    +

    This subroutine builds an extended communication descriptor, based on the input +descriptor desc_a and on the stencil specified through the input sparse matrix +a. +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +a

    +

    A sparse matrix Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data type. +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_Tspmat_type. +

    +

    +nl

    +

    the number of additional layers desired.
    Scope:global.
    Type:required.
    Intent: in.
    Specified as: an integer value nl 0. + + + +

    +

    +extype

    +

    the kind of estension required.
    Scope:global.
    Type:optional .
    Intent: in.
    Specified as: an integer value psb_ovt_xhal_, psb_ovt_asov_, default: + psb_ovt_xhal_ +

    +

    +

    +

    +On Return

    +

    +

    +

    +desc_out

    +

    the extended communication descriptor.
    Scope:local.
    Type:required.
    Intent: inout.
    Specified as: a structured data of type psb_desc_type. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      Specifying psb_ovt_xhal_ for the extype argument the user will obtain a + descriptor for a domain partition in which the additional layers are fetched + as part of an (extended) halo; however the index-to-process mapping is + identical to that of the base descriptor; +

    2. +
    3. + + + +

      Specifying psb_ovt_asov_ for the extype argument the user will obtain + a descriptor with an overlapped decomposition: the additional layer is + aggregated to the local subdomain (and thus is an overlap), and a new + halo extending beyond the last additional layer is formed.

    + + + +

    6.7 psb_spall — Allocates a sparse matrix

    + + + +
    +call psb_spall(a, desc_a, info [, nnz, dupl, bldmode])
    +
    +

    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_desc_type. +

    +

    +nnz

    +

    An estimate of the number of nonzeroes in the local part of the assembled + matrix.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value. +

    +

    +dupl

    +

    How to handle duplicate coefficients.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: integer, possible values: psb_dupl_ovwrt_, psb_dupl_add_, + psb_dupl_err_. + + + +

    +

    +bldmode

    +

    Whether to keep track of matrix entries that do not belong to the current + process.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: + an integer value psb_matbld_noremote_, psb_matbld_remote_. Default: + psb_matbld_noremote_.

    +

    +

    +

    +On Return

    +

    +

    +

    +a

    +

    the matrix to be allocated.
    Scope:local
    Type:required
    Intent: out.
    Specified as: a structured data of type psb_Tspmat_type. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      On exit from this routine the sparse matrix is in the build state. +

    2. +
    3. +

      The descriptor may be in either the build or assembled state. + + + +

    4. +
    5. +

      Providing a good estimate for the number of nonzeroes nnz in the + assembled matrix may substantially improve performance in the matrix + build phase, as it will reduce or eliminate the need for (potentially + multiple) data reallocations; +

    6. +
    7. +

      Using psb_matbld_remote_ is likely to cause a runtime overhead at + assembly time;

    + + + +

    6.8 psb_spins — Insert a set of coefficients into a sparse matrix

    + + + +
    +call psb_spins(nz, ia, ja, val, a, desc_a, info [,local])
    +call psb_spins(nr, irw, irp, ja, val, a, desc_a, info [,local])
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +nz

    +

    the number of coefficients to be inserted.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: an integer scalar. +

    +

    +nr

    +

    the number of rows to be inserted.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: an integer scalar. +

    +

    +irw

    +

    the first row to be inserted.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: an integer scalar. + + + +

    +

    +ia

    +

    the row indices of the coefficients to be inserted.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: an integer array of size nz. +

    +

    +irp

    +

    the row pointers of the coefficients to be inserted.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: an integer array of size nr + 1. +

    +

    +ja

    +

    the column indices of the coefficients to be inserted.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: an integer array of size nz. +

    +

    +val

    +

    the coefficients to be inserted.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: an array of size nz. Must be of the same type and kind of + the coefficients of the sparse matrix a. +

    +

    +desc_a

    +

    The communication descriptor.
    Scope: local.
    Type: required.
    Intent: inout.
    Specified as: a variable of type psb_desc_type.
    + + + +

    +

    +local

    +

    Whether the entries in the indices vectors ia, ja are already in local + numbering.
    Scope:local.
    Type:optional.
    Specified as: a logical value; default: .false.. +

    +

    +

    +

    +On Return

    +

    +

    +

    +a

    +

    the matrix into which coefficients will be inserted.
    Scope:local
    Type:required
    Intent: inout.
    Specified as: a structured data of type psb_Tspmat_type. +

    +

    +desc_a

    +

    The communication descriptor.
    Scope: local.
    Type: required.
    Intent: inout.
    Specified as: a variable of type psb_desc_type.
    +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes + + + +

      +
    1. +

      On entry to this routine the descriptor may be in either the build or + assembled state. +

    2. +
    3. +

      On entry to this routine the sparse matrix may be in either the build or + update state. +

    4. +
    5. +

      If the descriptor is in the build state, then the sparse matrix must also be + in the build state; the action of the routine is to (implicitly) call psb_cdins + to add entries to the sparsity pattern; each sparse matrix entry implicitly + defines a graph edge, that is passed to the descriptor routine for the + appropriate processing; +

    6. +
    7. +

      The input data can be passed in either COO or CSR formats; +

    8. +
    9. +

      In COO format the coefficients to be inserted are represented by the + ordered triples ia(i),ja(i),val(i), for i = 1,,nz; these triples are + arbitrary; +

    10. +
    11. +

      In CSR format the coefficients to be inserted for each input row i = 1,nr + are represented by the ordered triples (i + irw - 1),ja(j),val(j), for + j = irp(i),,irp(i + 1) - 1; these triples should belong to the current + process, i.e. i+irw-1 should be one of the local indices, but are otherwise + arbitrary; +

    12. +
    13. +

      There is no requirement that a given row must be passed in its entirety + to a single call to this routine: the buildup of a row may be split into as + many calls as desired (even in the CSR format); + + + +

    14. +
    15. +

      Coefficients from different rows may also be mixed up freely in a single + call, according to the application needs; +

    16. +
    17. +

      Coefficients from matrix rows not owned by the calling process are treated + according to the value of bldmode specified at allocation time; if bldmode + was chosen as psb_matbld_remote_ the library will keep track of them, + otherwise they are silently ignored; +

    18. +
    19. +

      If the descriptor is in the assembled state, then any entries in the sparse + matrix that would generate additional communication requirements are + ignored; +

    20. +
    21. +

      If the matrix is in the update state, any entries in positions that were not + present in the original matrix are ignored.

    + + + +

    6.9 psb_spasb — Sparse matrix assembly routine

    + + + +
    +call psb_spasb(a, desc_a, info [, afmt, upd,  mold])
    +
    +

    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in/out.
    Specified as: a structured data of type psb_desc_type. +

    +

    +afmt

    +

    the storage format for the sparse matrix.
    Scope: local.
    Type: optional.
    Intent: in.
    Specified as: an array of characters. Defalt: ’CSR’. +

    +

    +upd

    +

    Provide for updates to the matrix coefficients.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: integer, possible values: psb_upd_srch_, psb_upd_perm_ +

    +

    +mold

    + + + +

    The desired dynamic type for the internal matrix storage.
    Scope: local.
    Type: optional.
    Intent: in.
    Specified as: an object of a class derived from psb_T_base_sparse_mat.

    +

    +

    +

    +On Return

    +

    +

    +

    +a

    +

    the matrix to be assembled.
    Scope:local
    Type:required
    Intent: inout.
    Specified as: a structured data of type psb_Tspmat_type. +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in/out.
    Specified as: a structured data of type psb_desc_type. If the matrix was + allocated with bldmode=psb_matbld_remote_, then the descriptor will be + reassembled. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      On entry to this routine the descriptor must be in the assembled state, + i.e. psb_cdasb must already have been called. + + + +

    2. +
    3. +

      The sparse matrix may be in either the build or update state; +

    4. +
    5. +

      Duplicate entries are detected and handled in both build and update state, + with the exception of the error action that is only taken in the build state, + i.e. on the first assembly; +

    6. +
    7. +

      If the update choice is psb_upd_perm_, then subsequent calls to psb_spins + to update the matrix must be arranged in such a way as to produce exactly + the same sequence of coefficient values as encountered at the first assembly; +

    8. +
    9. +

      The output storage format need not be the same on all processes; +

    10. +
    11. +

      On exit from this routine the matrix is in the assembled state, and thus + is suitable for the computational routines; +

    12. +
    13. +

      If the bldmode=psb_matbld_remote_ value was specified at allocation + time, contributions defined on the current process but belonging to a + remote process will be handled accordingly. This is most likely to occur in + finite element applications, with dupl=psb_dupl_add_; it is necessary to + check for possible updates needed in the descriptor, hence there will be a + runtime overhead.

    + + + +

    6.10 psb_spfree — Frees a sparse matrix

    + + + +
    +call psb_spfree(a, desc_a, info)
    +
    +

    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +a

    +

    the matrix to be freed.
    Scope:local
    Type:required
    Intent: inout.
    Specified as: a structured data of type psb_Tspmat_type. +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_desc_type.

    +

    +

    +

    +On Return

    +

    +

    +

    +info

    + + + +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    6.11 psb_sprn — Reinit sparse matrix structure for psblas routines.

    + + + +
    +call psb_sprn(a, decsc_a, info, clear)
    +
    +

    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +a

    +

    the matrix to be reinitialized.
    Scope:local
    Type:required
    Intent: inout.
    Specified as: a structured data of type psb_Tspmat_type. +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_desc_type. +

    +

    +clear

    +

    Choose whether to zero out matrix coefficients
    Scope:local.
    Type:optional.
    Intent: in.
    Default: true.

    +

    + + + +

    +

    +On Return

    +

    +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      On exit from this routine the sparse matrix is in the update state.

    + + + +

    6.12 psb_geall — Allocates a dense matrix

    + + + +
    +call psb_geall(x, desc_a, info[, dupl, bldmode, n, lb])
    +
    +

    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +desc_a

    +

    The communication descriptor.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a variable of type psb_desc_type.
    +

    +

    +n

    +

    The number of columns of the dense matrix to be allocated.
    Scope: local
    Type: optional
    Intent: in.
    Specified as: Integer scalar, default 1. It is not a valid argument if x is a + rank-1 array. +

    +

    +lb

    +

    The lower bound for the column index range of the dense matrix to be + allocated.
    Scope: local
    Type: optional
    Intent: in.
    Specified as: Integer scalar, default 1. It is not a valid argument if x is a + rank-1 array. + + + +

    +

    +dupl

    +

    How to handle duplicate coefficients.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: integer, possible values: psb_dupl_ovwrt_, psb_dupl_add_; + psb_dupl_err_ has no effect. +

    +

    +bldmode

    +

    Whether to keep track of matrix entries that do not belong to the current + process.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: + an integer value psb_matbld_noremote_, psb_matbld_remote_. Default: + psb_matbld_noremote_.

    +

    +

    +

    +On Return

    +

    +

    +

    +x

    +

    The dense matrix to be allocated.
    Scope: local
    Type: required
    Intent: out.
    Specified as: a rank one or two array with the ALLOCATABLE attribute + or an object of type psb_T_vect_type, of type real, complex or integer.
    +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + +

    Notes +

      +
    1. +

      Using psb_matbld_remote_ is likely to cause a runtime overhead at + assembly time;

    + + +

    6.13 psb_geins — Dense matrix insertion routine

    + + +
    +call psb_geins(m, irw, val, x, desc_a, info [,local])
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +m

    +

    Number of rows in val to be inserted.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: an integer value. +

    +

    +irw

    +

    Indices of the rows to be inserted. Specifically, row i of val will be + inserted into the local row corresponding to the global row index irw(i). + Scope:local.
    Type:required.
    Intent: in.
    Specified as: an integer array. +

    +

    +val

    +

    the dense submatrix to be inserted.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a rank 1 or 2 array. Specified as: an integer value. + + +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_desc_type. +

    +

    +local

    +

    Whether the entries in the index vector irw, are already in local + numbering.
    Scope:local.
    Type:optional.
    Specified as: a logical value; default: .false.. +

    +

    +

    +

    +On Return

    +

    +

    +

    +x

    +

    the output dense matrix.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: a rank one or two array or an object of type + psb_T_vect_type, of type real, complex or integer.
    +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes + + +

      +
    1. +

      Dense vectors/matrices do not have an associated state; +

    2. +
    3. +

      Duplicate entries are either overwritten or added, there is no provision for + raising an error condition.

    + + +

    6.14 psb_geasb — Assembly a dense matrix

    + + +
    +call psb_geasb(x, desc_a, info, mold)
    +
    +

    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +desc_a

    +

    The communication descriptor.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a variable of type psb_desc_type.
    +

    +

    +mold

    +

    The desired dynamic type for the internal vector storage.
    Scope: local.
    Type: optional.
    Intent: in.
    Specified as: an object of a class derived from psb_T_base_vect_type; + this is only allowed when x is of type psb_T_vect_type.

    +

    +

    +

    +On Return

    +

    +

    +

    +x

    + + +

    The dense matrix to be assembled.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: a rank one or two array with the ALLOCATABLE or an + object of type psb_T_vect_type, of type real, complex or integer.
    +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      On entry to this routine the descriptor must be in the assembled state, + i.e. psb_cdasb must already have been called. +

    2. +
    3. +

      If the bldmode=psb_matbld_remote_ value was specified at allocation + time, contributions defined on the current process but belonging to a + remote process will be handled accordingly. This is most likely to occur in + finite element applications, with dupl=psb_dupl_add_.

    + + +

    6.15 psb_gefree — Frees a dense matrix

    + + +
    +call psb_gefree(x, desc_a, info)
    +
    +

    +

    +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    The dense matrix to be freed.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: a rank one or two array with the ALLOCATABLE or an + object of type psb_T_vect_type, of type real, complex or integer.
    +

    +

    +desc_a

    +

    The communication descriptor.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a variable of type psb_desc_type.

    +

    +

    +

    +On Return

    +

    + + +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + +

    6.16 psb_gelp — Applies a left permutation to a dense matrix

    + + +
    +call psb_gelp(trans, iperm, x, info)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +trans

    +

    A character that specifies whether to permute A or AT.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a single character with value ’N’ for A or ’T’ for AT.
    +

    +

    +iperm

    +

    An integer array containing permutation information.
    Scope: local
    Type: required
    Intent: in.
    Specified as: an integer one-dimensional array.
    +

    +

    +x

    +

    The dense matrix to be permuted.
    Scope: local
    Type: required
    Intent: inout.
    Specified as: a one or two dimensional array.

    +

    + + +

    +

    +On Return

    +

    +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + +

    6.17 psb_glob_to_loc — Global to local indices convertion

    + + +
    +call psb_glob_to_loc(x, y, desc_a, info, iact,owned)
    +call psb_glob_to_loc(x, desc_a, info, iact,owned)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    An integer vector of indices to be converted.
    Scope: local
    Type: required
    Intent: in, inout.
    Specified as: a rank one integer array.
    +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_desc_type. +

    +

    +iact

    +

    specifies action to be taken in case of range errors. Scope: global
    Type: optional
    Intent: in.
    Specified as: a character variable Ignore, Warning or Abort, default Ignore. + + +

    +

    +owned

    +

    Specfies valid range of input Scope: global
    Type: optional
    Intent: in.
    If true, then only indices strictly owned by the current process are + considered valid, if false then halo indices are also accepted. Default: false.

    +

    +

    +

    +On Return

    +

    +

    +

    +x

    +

    If y is not present, then x is overwritten with the translated integer indices. + Scope: global
    Type: required
    Intent: inout.
    Specified as: a rank one integer array. +

    +

    +y

    +

    If y is present, then y is overwritten with the translated integer indices, + and x is left unchanged. Scope: global
    Type: optional
    Intent: out.
    Specified as: a rank one integer array. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      If an input index is out of range, then the corresponding output index is + set to a negative number; + + +

    2. +
    3. +

      The default Ignore means that the negative output is the only action + taken on an out-of-range input.

    + + + +

    6.18 psb_loc_to_glob — Local to global indices conversion

    + + + +
    +call psb_loc_to_glob(x, y, desc_a, info, iact)
    +call psb_loc_to_glob(x, desc_a, info, iact)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    An integer vector of indices to be converted.
    Scope: local
    Type: required
    Intent: in, inout.
    Specified as: a rank one integer array.
    +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_desc_type. +

    +

    +iact

    +

    specifies action to be taken in case of range errors. Scope: global
    Type: optional
    Intent: in.
    Specified as: a character variable Ignore, Warning or Abort, default Ignore.

    +

    + + + +

    +

    +On Return

    +

    +

    +

    +x

    +

    If y is not present, then x is overwritten with the translated integer indices. + Scope: global
    Type: required
    Intent: inout.
    Specified as: a rank one integer array. +

    +

    +y

    +

    If y is not present, then y is overwritten with the translated integer indices, + and x is left unchanged. Scope: global
    Type: optional
    Intent: out.
    Specified as: a rank one integer array. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    + + + +

    6.19 psb_is_owned —

    + + + +
    +call psb_is_owned(x, desc_a)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    Integer index.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a scalar integer.
    +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_desc_type.

    +

    +

    +

    +On Return

    +

    +

    +

    +Function value

    + + +

    A logical mask which is true if x is owned by the current process Scope: + local
    Type: required
    Intent: out.

    +

    Notes +

      +
    1. +

      This routine returns a .true. value for an index that is strictly owned by + the current process, excluding the halo indices

    + + +

    6.20 psb_owned_index —

    + + +
    +call psb_owned_index(y, x, desc_a, info)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    Integer indices.
    Scope: local
    Type: required
    Intent: in, inout.
    Specified as: a scalar or a rank one integer array.
    +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_desc_type. +

    +

    +iact

    +

    specifies action to be taken in case of range errors. Scope: global
    Type: optional
    Intent: in.
    Specified as: a character variable Ignore, Warning or Abort, default Ignore.

    +

    + + +

    +

    +On Return

    +

    +

    +

    +y

    +

    A logical mask which is true for all corresponding entries of x that are + owned by the current process Scope: local
    Type: required
    Intent: out.
    Specified as: a scalar or rank one logical array. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      This routine returns a .true. value for those indices that are strictly + owned by the current process, excluding the halo indices

    + + +

    6.21 psb_is_local —

    + + +
    +call psb_is_local(x, desc_a)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    Integer index.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a scalar integer.
    +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_desc_type.

    +

    +

    +

    +On Return

    +

    +

    +

    +Function value

    + + +

    A logical mask which is true if x is local to the current process Scope: + local
    Type: required
    Intent: out.

    +

    Notes +

      +
    1. +

      This routine returns a .true. value for an index that is local to the current + process, including the halo indices

    + +

    6.22 psb_local_index —

    + + + +
    +call psb_local_index(y, x, desc_a, info)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    Integer indices.
    Scope: local
    Type: required
    Intent: in, inout.
    Specified as: a scalar or a rank one integer array.
    +

    +

    +desc_a

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_desc_type. +

    +

    +iact

    +

    specifies action to be taken in case of range errors. Scope: global
    Type: optional
    Intent: in.
    Specified as: a character variable Ignore, Warning or Abort, default Ignore.

    +

    + + + +

    +

    +On Return

    +

    +

    +

    +y

    +

    A logical mask which is true for all corresponding entries of x that are + local to the current process Scope: local
    Type: required
    Intent: out.
    Specified as: a scalar or rank one logical array. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      This routine returns a .true. value for those indices that are local to the + current process, including the halo indices.

    + + + +

    6.23 psb_get_boundary — Extract list of boundary elements

    + + + +
    +call psb_get_boundary(bndel, desc, info)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +desc

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_desc_type.

    +

    +

    +

    +On Return

    +

    +

    +

    +bndel

    +

    The list of boundary elements on the calling process, in local numbering.
    Scope: local
    Type: required
    Intent: out.
    Specified as: a rank one array with the ALLOCATABLE attribute, of type + integer.
    +

    +

    +info

    + + + +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      If there are no boundary elements (i.e., if the local part of the connectivity + graph is self-contained) the output vector is set to the “not allocated” + state. +

    2. +
    3. +

      Otherwise the size of bndel will be exactly equal to the number of + boundary elements.

    + + + +

    6.24 psb_get_overlap — Extract list of overlap elements

    + + + +
    +call psb_get_overlap(ovrel, desc, info)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +desc

    +

    the communication descriptor.
    Scope:local.
    Type:required.
    Intent: in.
    Specified as: a structured data of type psb_desc_type.

    +

    +

    +

    +On Return

    +

    +

    +

    +ovrel

    +

    The list of overlap elements on the calling process, in local numbering.
    Scope: local
    Type: required
    Intent: out.
    Specified as: a rank one array with the ALLOCATABLE attribute, of type + integer.
    +

    +

    +info

    + + + +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      If there are no overlap elements the output vector is set to the “not + allocated” state. +

    2. +
    3. +

      Otherwise the size of ovrel will be exactly equal to the number of overlap + elements.

    + + + +

    6.25 psb_sp_getrow — Extract row(s) from a sparse matrix

    + + + +
    +call psb_sp_getrow(row, a, nz, ia, ja, val, info, &
    +              & append, nzin, lrw)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +row

    +

    The (first) row to be extracted.
    Scope:local
    Type:required
    Intent: in.
    Specified as: an integer > 0. +

    +

    +a

    +

    the matrix from which to get rows.
    Scope:local
    Type:required
    Intent: in.
    Specified as: a structured data of type psb_Tspmat_type. +

    +

    +append

    +

    Whether to append or overwrite existing output.
    Scope:local
    Type:optional
    Intent: in.
    Specified as: a logical value default: false (overwrite). + + + +

    +

    +nzin

    +

    Input size to be appended to.
    Scope:local
    Type:optional
    Intent: in.
    Specified as: an integer > 0. When append is true, specifies how many + entries in the output vectors are already filled. +

    +

    +lrw

    +

    The last row to be extracted.
    Scope:local
    Type:optional
    Intent: in.
    Specified as: an integer > 0, default: row. +

    +

    +

    +

    +On Return

    +

    +

    +

    +nz

    +

    the number of elements returned by this call.
    Scope:local.
    Type:required.
    Intent: out.
    Returned as: an integer scalar. +

    +

    +ia

    +

    the row indices.
    Scope:local.
    Type:required.
    Intent: inout.
    Specified as: an integer array with the ALLOCATABLE attribute. +

    +

    +ja

    + + + +

    the column indices of the elements to be inserted.
    Scope:local.
    Type:required.
    Intent: inout.
    Specified as: an integer array with the ALLOCATABLE attribute. +

    +

    +val

    +

    the elements to be inserted.
    Scope:local.
    Type:required.
    Intent: inout.
    Specified as: a real array with the ALLOCATABLE attribute. +

    +

    +info

    +

    Error code.
    Scope: local
    Type: required
    Intent: out.
    An integer value; 0 means no error has been detected.

    +

    Notes +

      +
    1. +

      The output nz is always the size of the output generated by the current + call; thus, if append=.true., the total output size will be nzin + nz, with + the newly extracted coefficients stored in entries nzin+1:nzin+nz of the + array arguments; +

    2. +
    3. +

      When append=.true. the output arrays are reallocated as necessary; +

    4. +
    5. +

      The row and column indices are returned in the local numbering + scheme; if the global numbering is desired, the user may employ the + psb_loc_to_glob routine on the output.

    + + + +

    6.26 psb_sizeof — Memory occupation

    +

    This function computes the memory occupation of a PSBLAS object. + + + +

    +isz = psb_sizeof(a)
    +isz = psb_sizeof(desc_a)
    +isz = psb_sizeof(prec)
    +
    +

    +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +a

    +

    A sparse matrix A.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a structured data of type psb_Tspmat_type. +

    +

    +desc_a

    +

    Communication descriptor.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a structured data of type psb_desc_type. +

    +

    +prec

    +

    Scope: local
    Type: required
    Intent: in.
    Specified as: a preconditioner data structure psb_prec_type. + + + +

    +

    +On Return

    +

    +

    +

    +Function value

    +

    The memory occupation of the object specified in the calling sequence, in + bytes.
    Scope: local
    Returned as: an integer(psb_long_int_k_) number.

    + + + +

    6.27 Sorting utilities —

    +

    psb_msort — Sorting by the Merge-sort algorithm +

    psb_qsort — Sorting by the Quicksort algorithm +

    psb_hsort — Sorting by the Heapsort algorithm + + + +

    +call psb_msort(x,ix,dir,flag)
    +call psb_qsort(x,ix,dir,flag)
    +call psb_hsort(x,ix,dir,flag)
    +
    +

    +

    These serial routines sort a sequence X into ascending or descending order. The +argument meaning is identical for the three calls; the only difference is the algorithm +used to accomplish the task (see Usage Notes below). +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +x

    +

    The sequence to be sorted.
    Type:required.
    Specified as: an integer, real or complex array of rank 1. +

    +

    +ix

    +

    A vector of indices.
    Type:optional.
    Specified as: an integer array of (at least) the same size as X. +

    +

    +dir

    +

    The desired ordering.
    Type:optional.
    Specified as: an integer value: +

    +

    + Integer and real data:

    +

    psb_sort_up_, psb_sort_down_, psb_asort_up_, + psb_asort_down_; default psb_sort_up_. + + + +

    +

    + Complex data:

    +

    psb_lsort_up_, psb_lsort_down_, psb_asort_up_, + psb_asort_down_; default psb_lsort_up_.

    +
    +

    +flag

    +

    Whether to keep the original values in IX.
    Type:optional.
    Specified as: an integer value psb_sort_ovw_idx_ or psb_sort_keep_idx_; + default psb_sort_ovw_idx_. +

    +

    +

    +

    +On Return

    +

    +

    +

    +x

    +

    The sequence of values, in the chosen ordering.
    Type:required.
    Specified as: an integer, real or complex array of rank 1. +

    +

    +ix

    +

    A vector of indices.
    Type: Optional
    An integer array of rank 1, whose entries are moved to the same position + as the corresponding entries in x.

    +

    Notes +

      +
    1. +

      For integer or real data the sorting can be performed in the up/down + direction, on the natural or absolute values; +

    2. +
    3. +

      For complex data the sorting can be done in a lexicographic order (i.e.: + sort on the real part with ties broken according to the imaginary part) or + on the absolute values; + + + +

    4. +
    5. +

      The routines return the items in the chosen ordering; the output difference + is the handling of ties (i.e. items with an equal value) in the original input. + With the merge-sort algorithm ties are preserved in the same relative + order as they had in the original sequence, while this is not guaranteed for + quicksort or heapsort; +

    6. +
    7. +

      If flag = psb_sort_ovw_idx_ then the entries in ix(1 : n) where n is the size + of x are initialized to ix(i) i; thus, upon return from the subroutine, + for each index i we have in ix(i) the position that the item x(i) occupied + in the original data sequence; +

    8. +
    9. +

      If flag = psb_sort_keep_idx_ the routine will assume that the entries in + ix(:) have already been initialized by the user; +

    10. +
    11. +

      The three sorting algorithms have a similar O(nlog n) expected running time; + in the average case quicksort will be the fastest and merge-sort the slowest. + However note that: +

        +
      1. +

        The worst case running time for quicksort is O(n2); the algorithm + implemented here follows the well-known median-of-three heuristics, + but the worst case may still apply; +

      2. +
      3. +

        The worst case running time for merge-sort and heap-sort is + O(nlog n) as the average case; +

      4. +
      5. +

        The merge-sort algorithm is implemented to take advantage of + subsequences that may be already in the desired ordering prior to + the subroutine call; this situation is relatively common when dealing + with groups of indices of sparse matrix entries, thus merge-sort is the + preferred choice when a sorting is needed by other routines in the + library.

      + + + +
    + + + + + + + + + + +href="userhtml.html#userhtmlse9.html" >up]

    + id="tailuserhtmlse6.html"> diff --git a/docs/html/userhtmlse7.html b/docs/html/userhtmlse7.html index 16277374..6e245159 100644 --- a/docs/html/userhtmlse7.html +++ b/docs/html/userhtmlse7.html @@ -11,77 +11,2174 @@

    +href="userhtmlse4.html#tailuserhtmlse7.html">tail] [up]

    7 Parallel environment routines

    + id="x12-1050007">Parallel environment routines -
    -  7.1 psb_init — Initializes PSBLAS parallel environment -
     7.2 psb_info — Return information about PSBLAS parallel environment -
     7.3 psb_exit — Exit from PSBLAS parallel environment -
     7.4 psb_get_mpi_comm — Get the MPI communicator -
     7.5 psb_get_mpi_rank — Get the MPI rank -
     7.6 psb_wtime — Wall clock timing -
     7.7 psb_barrier — Sinchronization point parallel environment -
     7.8 psb_abort — Abort a computation -
     7.9 psb_bcast — Broadcast data -
     7.10 psb_sum — Global sum -
     7.11 psb_max — Global maximum -
     7.12 psb_min — Global minimum -
     7.13 psb_amx — Global maximum absolute value -
     7.14 psb_amn — Global minimum absolute value -
     7.15 psb_nrm2 — Global 2-norm reduction -
     7.16 psb_snd — Send data -
     7.17 psb_rcv — Receive data -
    +

    7.1 psb_init — Initializes PSBLAS parallel environment

    + + + +
    +call psb_init(ctxt, np, basectxt, ids)
    +
    +

    +

    This subroutine initializes the PSBLAS parallel environment, defining a virtual +parallel machine. +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +np

    +

    Number of processes in the PSBLAS virtual parallel machine.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value.  Default: use all available processes. +

    +

    +basectxt

    +

    the initial communication context. The new context will be defined from + the processes participating in the initial one.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value.  Default: use MPI_COMM_WORLD. +

    +

    +ids

    +

    Identities of the processes to use for the new context; the argument is + ignored when np is not specified. This allows the processes in the new + environment to be in an order different from the original one.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer array.  Default: use the indices (0np - 1).

    + + + +

    +

    +

    +On Return

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine, type + psb_ctxt_type. Note that this is always a duplicate of basectxt, + so that library communications are completely separated from other + communication operations.
    Scope: global.
    Type: required.
    Intent: out.
    Specified as: an integer variable.

    +

    Notes +

      +
    1. +

      A call to this routine must precede any other PSBLAS call. +

    2. +
    3. +

      It is an error to specify a value for np greater than the number of processes + available in the underlying base parallel environment.

    + + + +

    7.2 psb_info — Return information about PSBLAS parallel environment

    + + + +
    +call psb_info(ctxt, iam, np)
    +
    +

    +

    This subroutine returns information about the PSBLAS parallel environment, +defining a virtual parallel machine. +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable.

    +

    +

    +

    +On Return

    +

    +

    +

    +iam

    +

    Identifier of current process in the PSBLAS virtual parallel machine.
    Scope: local.
    Type: required.
    Intent: out.
    Specified as: an integer value. -1 iam np - 1  +

    +

    +np

    + + + +

    Number of processes in the PSBLAS virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: out.
    Specified as: an integer variable.  

    +

    Notes +

      +
    1. +

      For processes in the virtual parallel machine the identifier will satisfy + 0 iam np - 1; +

    2. +
    3. +

      If the user has requested on psb_init a number of processes less than + the total available in the parallel execution environment, the remaining + processes will have on return iam = -1; the only call involving ctxt that + any such process may execute is to psb_exit.

    + + + +

    7.3 psb_exit — Exit from PSBLAS parallel environment

    + + + +
    +call psb_exit(ctxt)
    +call psb_exit(ctxt,close)
    +
    +

    +

    This subroutine exits from the PSBLAS parallel virtual machine. +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable. +

    +

    +close

    +

    Whether to close all data structures related to the virtual parallel machine, + besides those associated with ctxt.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: a logical variable, default value: true.

    +

    Notes +

      +
    1. +

      This routine may be called even if a previous call to psb_info has returned + with iam = -1; indeed, it it is the only routine that may be called with + argument ctxt in this situation. + + + +

    2. +
    3. +

      A call to this routine with close=.true. implies a call to MPI_Finalize, + after which no parallel routine may be called. +

    4. +
    5. +

      If the user whishes to use multiple communication contexts in the + same program, or to enter and exit multiple times into the parallel + environment, this routine may be called to selectively close the contexts + with close=.false., while on the last call it should be called with + close=.true. to shutdown in a clean way the entire parallel environment.

    + + + +

    7.4 psb_get_mpi_comm — Get the MPI communicator

    + + + +
    +icomm = psb_get_mpi_comm(ctxt)
    +
    +

    +

    This function returns the MPI communicator associated with a PSBLAS +context +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable.

    +

    +

    +

    +On Return

    +

    +

    +

    +Function value

    +

    The MPI communicator associated with the PSBLAS virtual parallel + machine.
    Scope: global.
    Type: required.
    Intent: out.

    +

    Notes The subroutine version psb_get_mpicomm is still available but is +deprecated. + + + +

    7.5 psb_get_mpi_rank — Get the MPI rank

    + + + +
    +rank = psb_get_mpi_rank(ctxt, id)
    +
    +

    +

    This function returns the MPI rank of the PSBLAS process id +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable. +

    +

    +id

    +

    Identifier of a process in the PSBLAS virtual parallel machine.
    Scope: local.
    Type: required.
    Intent: in.
    Specified as: an integer value. 0 id np -

    +

    +

    +

    +On Return

    +

    +

    +

    +Funciton value

    + + + +

    The MPI rank associated with the PSBLAS process id.
    Scope: local.
    Type: required.
    Intent: out.

    +

    Notes The subroutine version psb_get_rank is still available but is deprecated. + + +

    7.6 psb_wtime — Wall clock timing

    + + +
    +time = psb_wtime()
    +
    +

    +

    This function returns a wall clock timer. The resolution of the timer is dependent +on the underlying parallel environment implementation. +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Exit

    +

    +

    +

    +Function value

    +

    the elapsed time in seconds.
    Returned as: a real(psb_dpk_) variable.

    + + +

    7.7 psb_barrier — Sinchronization point parallel environment

    + + +
    +call psb_barrier(ctxt)
    +
    +

    +

    This subroutine acts as an explicit synchronization point for the PSBLAS parallel +virtual machine. +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable.

    + + +

    7.8 psb_abort — Abort a computation

    + + +
    +call psb_abort(ctxt)
    +
    +

    +

    This subroutine aborts computation on the parallel virtual machine. +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable.

    + + +

    7.9 psb_bcast — Broadcast data

    + + +
    +call psb_bcast(ctxt, dat [, root, mode, request])
    +
    +

    +

    This subroutine implements a broadcast operation based on the underlying +communication library. +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable. +

    +

    +dat

    +

    On the root process, the data to be broadcast.
    Scope: global.
    Type: required.
    Intent: inout.
    Specified as: an integer, real or complex variable, which may be a scalar, + or a rank 1 or 2 array, or a character or logical variable, which may be + a scalar or rank 1 array.  Type, kind, rank and size must agree on all + processes. +

    +

    +root

    +

    Root process holding data to be broadcast.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value 0 <= root <= np - 1, default 0   + + +

    +

    +mode

    +

    Whether the call is started in non-blocking mode and completed later, or + is executed synchronously.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value. The action to be taken is determined by + its bit fields, which can be set with bitwise OR. Basic action values are + psb_collective_start_, psb_collective_end_. Default: both fields are + selected (i.e. require synchronous completion).
    +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    +

    +

    +

    +On Return

    +

    +

    +

    +dat

    +

    On all processes other than root, the broadcasted data.
    Scope: global.
    Type: required.
    Intent: inout.
    Specified as: an integer, real or complex variable, which may be a scalar, + or a rank 1 or 2 array, or a character or logical scalar.  Type, kind, rank + and size must agree on all processes. +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    +

    Notes +

      +
    1. +

      The dat argument is both input and output, and its value may be changed + even on processes different from the final result destination. +

    2. +
    3. +

      The mode argument can be built with the bitwise IOR() operator; in the + following example, the argument is forcing immediate completion, hence the + request argument needs not be specified: +

      +

      +

      +  call psb_bcast(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
      +
      +

      +
    4. +
    5. +

      When splitting the operation in two calls, the dat argument must not be + accessed between calls: +

      +

      +

      +  call psb_bcast(ctxt,dat,mode=psb_collective_start_,request=bcast_request)
      +  ....... ! Do not access dat
      +  call psb_bcast(ctxt,dat,mode=psb_collective_end_, request=bcast_request)
      +
      +

      +
    + + +

    7.10 psb_sum — Global sum

    + + +
    +call psb_sum(ctxt, dat [, root, mode, request])
    +
    +

    +

    This subroutine implements a sum reduction operation based on the underlying +communication library. +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable. +

    +

    +dat

    +

    The local contribution to the global sum.
    Scope: global.
    Type: required.
    Intent: inout.
    Specified as: an integer, real or complex variable, which may be a scalar, or + a rank 1 or 2 array.  Type, kind, rank and size must agree on all processes. +

    +

    +root

    +

    Process to hold the final sum, or -1 to make it available on all processes.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value -1 <= root <= np - 1, default -1.   + + +

    +

    +mode

    +

    Whether the call is started in non-blocking mode and completed later, or + is executed synchronously.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value. The action to be taken is determined by + its bit fields, which can be set with bitwise OR. Basic action values are + psb_collective_start_, psb_collective_end_. Default: both fields are + selected (i.e. require synchronous completion).
    +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    +

    +

    +

    +On Return

    +

    +

    +

    +dat

    +

    On destination process(es), the result of the sum operation.
    Scope: global.
    Type: required.
    Intent: inout.
    Specified as: an integer, real or complex variable, which may be a scalar, + or a rank 1 or 2 array.
    Type, kind, rank and size must agree on all processes. +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    +

    Notes +

      +
    1. +

      The dat argument is both input and output, and its value may be changed + even on processes different from the final result destination. +

    2. +
    3. +

      The mode argument can be built with the bitwise IOR() operator; in the + following example, the argument is forcing immediate completion, hence the + request argument needs not be specified: +

      +

      +

      +  call psb_sum(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
      +
      +

      +
    4. +
    5. +

      When splitting the operation in two calls, the dat argument must not be + accessed between calls: +

      +

      +

      +  call psb_sum(ctxt,dat,mode=psb_collective_start_,request=sum_request)
      +  ....... ! Do not access dat
      +  call psb_sum(ctxt,dat,mode=psb_collective_end_,request=sum_request)
      +
      +

      +
    + + +

    7.11 psb_max — Global maximum

    + + +
    +call psb_max(ctxt, dat [, root, mode, request])
    +
    +

    +

    This subroutine implements a maximum valuereduction operation based on the +underlying communication library. +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable. +

    +

    +dat

    +

    The local contribution to the global maximum.
    Scope: local.
    Type: required.
    Intent: inout.
    Specified as: an integer or real variable, which may be a scalar, or a rank + 1 or 2 array.  Type, kind, rank and size must agree on all processes. +

    +

    +root

    +

    Process to hold the final maximum, or -1 to make it available on all + processes.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value -1 <= root <= np - 1, default -1.
    + + +

    +

    +mode

    +

    Whether the call is started in non-blocking mode and completed later, or + is executed synchronously.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value. The action to be taken is determined by + its bit fields, which can be set with bitwise OR. Basic action values are + psb_collective_start_, psb_collective_end_. Default: both fields are + selected (i.e. require synchronous completion).
    +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    +

    +

    +

    +On Return

    +

    +

    +

    +dat

    +

    On destination process(es), the result of the maximum operation.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer or real variable, which may be a scalar, or a rank + 1 or 2 array.  Type, kind, rank and size must agree on all processes. +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    + +

    Notes +

      +
    1. +

      The dat argument is both input and output, and its value may be changed + even on processes different from the final result destination. +

    2. +
    3. +

      The mode argument can be built with the bitwise IOR() operator; in the + following example, the argument is forcing immediate completion, hence the + request argument needs not be specified: +

      +

      +

      +  call psb_max(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
      +
      +

      +
    4. +
    5. +

      When splitting the operation in two calls, the dat argument must not be + accessed between calls: +

      +

      +

      +  call psb_max(ctxt,dat,mode=psb_collective_start_,request=max_request)
      +  ....... ! Do not access dat
      +  call psb_max(ctxt,dat,mode=psb_collective_end_,request=max_request)
      +
      +

      +
    + + + +

    7.12 psb_min — Global minimum

    + + + +
    +call psb_min(ctxt, dat [, root, mode, request])
    +
    +

    +

    This subroutine implements a minimum value reduction operation based on the +underlying communication library. +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable. +

    +

    +dat

    +

    The local contribution to the global minimum.
    Scope: local.
    Type: required.
    Intent: inout.
    Specified as: an integer or real variable, which may be a scalar, or a rank + 1 or 2 array.  Type, kind, rank and size must agree on all processes. +

    +

    +root

    +

    Process to hold the final value, or -1 to make it available on all processes.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value -1 <= root <= np - 1, default -1.
    + + + +

    +

    +mode

    +

    Whether the call is started in non-blocking mode and completed later, or + is executed synchronously.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value. The action to be taken is determined by + its bit fields, which can be set with bitwise OR. Basic action values are + psb_collective_start_, psb_collective_end_. Default: both fields are + selected (i.e. require synchronous completion).
    +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    +

    +

    +

    +On Return

    +

    +

    +

    +dat

    +

    On destination process(es), the result of the minimum operation.
    Scope: global.
    Type: required.
    Intent: inout.
    Specified as: an integer or real variable, which may be a scalar, or a rank + 1 or 2 array.
    Type, kind, rank and size must agree on all processes. +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    +

    Notes +

      +
    1. +

      The dat argument is both input and output, and its value may be changed + even on processes different from the final result destination. +

    2. +
    3. +

      The mode argument can be built with the bitwise IOR() operator; in the + following example, the argument is forcing immediate completion, hence the + request argument needs not be specified: +

      +

      +

      +  call psb_min(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
      +
      +

      +
    4. +
    5. +

      When splitting the operation in two calls, the dat argument must not be + accessed between calls: +

      +

      +

      +  call psb_min(ctxt,dat,mode=psb_collective_start_,request=min_request)
      +  ....... ! Do not access dat
      +  call psb_min(ctxt,dat,mode=psb_collective_end_,request=min_request)
      +
      +

      +
    + + + +

    7.13 psb_amx — Global maximum absolute value

    + + + +
    +call psb_amx(ctxt, dat [, root, mode, request])
    +
    +

    +

    This subroutine implements a maximum absolute value reduction operation based +on the underlying communication library. +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable. +

    +

    +dat

    +

    The local contribution to the global maximum.
    Scope: local.
    Type: required.
    Intent: inout.
    Specified as: an integer, real or complex variable, which may be a scalar, or + a rank 1 or 2 array.  Type, kind, rank and size must agree on all processes. +

    +

    +root

    +

    Process to hold the final value, or -1 to make it available on all processes.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value -1 <= root <= np - 1, default -1.
    + + + +

    +

    +mode

    +

    Whether the call is started in non-blocking mode and completed later, or + is executed synchronously.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value. The action to be taken is determined by + its bit fields, which can be set with bitwise OR. Basic action values are + psb_collective_start_, psb_collective_end_. Default: both fields are + selected (i.e. require synchronous completion).
    +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    +

    +

    +

    +On Return

    +

    +

    +

    +dat

    +

    On destination process(es), the result of the maximum operation.
    Scope: global.
    Type: required.
    Intent: inout.
    Specified as: an integer, real or complex variable, which may be a scalar, or + a rank 1 or 2 array.  Type, kind, rank and size must agree on all processes. +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    + + + +

    Notes +

      +
    1. +

      The dat argument is both input and output, and its value may be changed + even on processes different from the final result destination. +

    2. +
    3. +

      The mode argument can be built with the bitwise IOR() operator; in the + following example, the argument is forcing immediate completion, hence the + request argument needs not be specified: +

      +

      +

      +  call psb_amx(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
      +
      +

      +
    4. +
    5. +

      When splitting the operation in two calls, the dat argument must not be + accessed between calls: +

      +

      +

      +  call psb_amx(ctxt,dat,mode=psb_collective_start_,request=amx_request)
      +  ....... ! Do not access dat
      +  call psb_amx(ctxt,dat,mode=psb_collective_end_,request=amx_request)
      +
      +

      +
    + + + +

    7.14 psb_amn — Global minimum absolute value

    + + + +
    +call psb_amn(ctxt, dat [, root, mode, request])
    +
    +

    +

    This subroutine implements a minimum absolute value reduction operation based +on the underlying communication library. +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable. +

    +

    +dat

    +

    The local contribution to the global minimum.
    Scope: local.
    Type: required.
    Intent: inout.
    Specified as: an integer, real or complex variable, which may be a scalar, or + a rank 1 or 2 array.  Type, kind, rank and size must agree on all processes. +

    +

    +root

    +

    Process to hold the final value, or -1 to make it available on all processes.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value -1 <= root <= np - 1, default -1.
    + + + +

    +

    +mode

    +

    Whether the call is started in non-blocking mode and completed later, or + is executed synchronously.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value. The action to be taken is determined by + its bit fields, which can be set with bitwise OR. Basic action values are + psb_collective_start_, psb_collective_end_. Default: both fields are + selected (i.e. require synchronous completion).
    +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    +

    +

    +

    +On Return

    +

    +

    +

    +dat

    +

    On destination process(es), the result of the minimum operation.
    Scope: global.
    Type: required.
    Intent: inout.
    Specified as: an integer, real or complex variable, which may be a scalar, + or a rank 1 or 2 array.
    Type, kind, rank and size must agree on all processes. +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    +

    Notes +

      +
    1. +

      The dat argument is both input and output, and its value may be changed + even on processes different from the final result destination. +

    2. +
    3. +

      The mode argument can be built with the bitwise IOR() operator; in the + following example, the argument is forcing immediate completion, hence the + request argument needs not be specified: +

      +

      +

      +  call psb_amn(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
      +
      +

      +
    4. +
    5. +

      When splitting the operation in two calls, the dat argument must not be + accessed between calls: +

      +

      +

      +  call psb_amn(ctxt,dat,mode=psb_collective_start_,request=amn_request)
      +  ....... ! Do not access dat
      +  call psb_amn(ctxt,dat,mode=psb_collective_end_,request=amn_request)
      +
      +

      +
    + + + +

    7.15 psb_nrm2 — Global 2-norm reduction

    + + + +
    +call psb_nrm2(ctxt, dat [, root, mode, request])
    +
    +

    +

    This subroutine implements a 2-norm value reduction operation based on the +underlying communication library. +

    +

    +Type:

    +

    Synchronous. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable. +

    +

    +dat

    +

    The local contribution to the global minimum.
    Scope: local.
    Type: required.
    Intent: inout.
    Specified as: a real variable, which may be a scalar, or a rank 1 array. +  Kind, rank and size must agree on all processes. +

    +

    +root

    +

    Process to hold the final value, or -1 to make it available on all processes.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value -1 <= root <= np - 1, default -1.
    + + + +

    +

    +mode

    +

    Whether the call is started in non-blocking mode and completed later, or + is executed synchronously.
    Scope: global.
    Type: optional.
    Intent: in.
    Specified as: an integer value. The action to be taken is determined by + its bit fields, which can be set with bitwise OR. Basic action values are + psb_collective_start_, psb_collective_end_. Default: both fields are + selected (i.e. require synchronous completion).
    +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    +

    +

    +

    +On Return

    +

    +

    +

    +dat

    +

    On destination process(es), the result of the 2-norm reduction.
    Scope: global.
    Type: required.
    Intent: inout.
    Specified as: a real variable, which may be a scalar, or a rank 1 array.
    Kind, rank and size must agree on all processes. +

    +

    +request

    +

    A request variable to check for operation completion.
    Scope: local.
    Type: optional.
    Intent: inout.
    If mode does not specify synchronous completion, then this variable must + be present.

    + + + +

    Notes +

      +
    1. +

      This reduction is appropriate to compute the results of multiple (local) + NRM2 operations at the same time. +

    2. +
    3. +

      Denoting by dati the value of the variable dat on process i, the output res + is equivalent to the computation of +

      +      ∘ ∑------
+res =      dat2i,
+         i
+
      +

      with care taken to avoid unnecessary overflow. +

    4. +
    5. +

      The dat argument is both input and output, and its value may be changed + even on processes different from the final result destination. +

    6. +
    7. +

      The mode argument can be built with the bitwise IOR() operator; in the + following example, the argument is forcing immediate completion, hence the + request argument needs not be specified: +

      +

      +

      +  call psb_nrm2(ctxt,dat,mode=ior(psb_collective_start_,psb_collective_end_))
      +
      +

      +
    8. +
    9. +

      When splitting the operation in two calls, the dat argument must not be + accessed between calls: + + + +

      +

      +

      +  call psb_nrm2(ctxt,dat,mode=psb_collective_start_,request=nrm2_request)
      +  ....... ! Do not access dat
      +  call psb_nrm2(ctxt,dat,mode=psb_collective_end_,request=nrm2_request)
      +
      +

      +
    + + + +

    7.16 psb_snd — Send data

    + + + +
    +call psb_snd(ctxt, dat, dst, m)
    +
    +

    +

    This subroutine sends a packet of data to a destination. +

    +

    +Type:

    +

    Synchronous: see usage notes. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable. +

    +

    +dat

    +

    The data to be sent.
    Scope: local.
    Type: required.
    Intent: in.
    Specified as: an integer, real or complex variable, which may be a scalar, + or a rank 1 or 2 array, or a character or logical scalar.  Type, kind and + rank must agree on sender and receiver process; if m is not specified, size + must agree as well. +

    +

    +dst

    +

    Destination process.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer value 0 <= dst <= np - 1.
    + + + +

    +

    +m

    +

    Number of rows.
    Scope: global.
    Type: Optional.
    Intent: in.
    Specified as: an integer value 0 <= m <= size(dat,1).
    When dat is a rank 2 array, specifies the number of rows to be sent + independently of the leading dimension size(dat,1); must have the same + value on sending and receiving processes.

    +

    +

    +

    +On Return

    +

    +

    Notes +

      +
    1. +

      This subroutine implies a synchronization, but only between the calling + process and the destination process dst.

    + + + +

    7.17 psb_rcv — Receive data

    + + + +
    +call psb_rcv(ctxt, dat, src, m)
    +
    +

    +

    This subroutine receives a packet of data to a destination. +

    +

    +Type:

    +

    Synchronous: see usage notes. +

    +

    +On Entry

    +

    +

    +

    +ctxt

    +

    the communication context identifying the virtual parallel machine.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer variable. +

    +

    +src

    +

    Source process.
    Scope: global.
    Type: required.
    Intent: in.
    Specified as: an integer value 0 <= src <= np - 1.
    +

    +

    +m

    +

    Number of rows.
    Scope: global.
    Type: Optional.
    Intent: in.
    Specified as: an integer value 0 <= m <= size(dat,1).
    When dat is a rank 2 array, specifies the number of rows to be sent + independently of the leading dimension size(dat,1); must have the same + value on sending and receiving processes.

    + + + +

    +

    +

    +On Return

    +

    +

    +

    +dat

    +

    The data to be received.
    Scope: local.
    Type: required.
    Intent: inout.
    Specified as: an integer, real or complex variable, which may be a scalar, + or a rank 1 or 2 array, or a character or logical scalar.  Type, kind and + rank must agree on sender and receiver process; if m is not specified, size + must agree as well.

    +

    Notes +

      +
    1. +

      This subroutine implies a synchronization, but only between the calling + process and the source process src.

    + + + + +href="userhtml.html#userhtmlse10.html" >up]

    + id="tailuserhtmlse7.html"> diff --git a/docs/html/userhtmlse8.html b/docs/html/userhtmlse8.html index d4260b27..2e6b2ff0 100644 --- a/docs/html/userhtmlse8.html +++ b/docs/html/userhtmlse8.html @@ -11,13 +11,13 @@

    +href="userhtmlse5.html#tailuserhtmlse8.html">tail] [up]

    8 Error handling

    + id="x13-1230008">Error handling

    The PSBLAS library error handling policy has been completely rewritten in version 2.0. The idea behind the design of this new error handling strategy is to keep error messages on a stack allowing the user to trace back up to the point where the first @@ -36,7 +36,7 @@ zero, an error condition is raised. This process continues on all the levels of nested calls until the level where the user decides to abort the program execution.

    Figure 5 shows the layout of a generic 5 shows the layout of a generic psb_foo routine with respect to the PSBLAS-2.0 error handling policy. It is possible to see how, whenever an error condition is detected, the



    @@ -67,270 +67,241 @@ explicitly. >

    -
    subroutinesubroutine psb_foo(some args, info) + psb_foo(some args, ... + info) 
      if(error detected) then +  ... 
       if(error info=errcode1 + detected) then 
        call psb_errpush(psb_foo, errcode1) +   info=errcode1 
       goto 9999 +   end if +  call ... + psb_errpush(psb_foo, errcode1) 
     call psb_bar(some args, info) +   if(info .ne. zero) then +    goto 9999 
     info=errcode2 +   end if 
      call psb_errpush(psb_foo, errcode2) +  ... 
       call goto 9999 + psb_bar(some args, end if + info) 
      ... +9999 continue +  if(info if (err_act .eq. act_abort) then + .ne. zero) then 
      call psb_error(icontxt) +     return + info=errcode2 
      else +     return + call psb_errpush(psb_foo, errcode2) 
          goto 9999 
       end if 
       ... 
    9999 continue 
       if (err_act .eq. act_abort) then 
         call psb_error(icontxt) 
         return 
       else 
         return 
       end if 
     
    end subroutine psb_foo -
    +class="cmtt-9"> end if + +end subroutine psb_foo

    Listing 5: The layout of a generic psb_foo routine with respect to PSBLAS-2.0 -error handling policy.
    +error handling policy.

    Figure 6 reports a sample error message generated by the PSBLAS-2.0 +href="#x13-123026r6">6 reports a sample error message generated by the PSBLAS-2.0 library. This error has been generated by the fact that the user has chosen the invalid “FOO” storage format to represent the sparse matrix. From this error message it is possible to see that the error has been detected inside @@ -342,7 +313,7 @@ process).



    @@ -371,7 +342,7 @@ Aborting...
    Listing 6: A sample PSBLAS-3.0 error message. Process 0 detected an error -condition inside the psb_cest subroutine
    +condition inside the psb_cest subroutine
    @@ -379,28 +350,236 @@ condition inside the psb_cest subroutine
    +
    call psb_errpush(err_c, r_name, i_err, a_err)
    + +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +err_c

    +

    the error code
    Scope: local
    Type: required
    Intent: in.
    Specified as: an integer. +

    +

    +r_name

    +

    the soutine where the error has been caught.
    Scope: local
    Type: required
    Intent: in.
    Specified as: a string.
    +

    +

    +i_err

    +

    addional info for error code
    Scope: local
    Type: optional
    Specified as: an integer array
    +

    +

    +a_err

    + + +

    addional info for error code
    Scope: local
    Type: optional
    Specified as: a string.

    + + + +

    8.2 psb_error — Prints the error stack content and aborts execution

    + +
    call psb_error(icontxt)
    + +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +icontxt

    +

    the communication context.
    Scope: global
    Type: optional
    Intent: in.
    Specified as: an integer.

    + + + +

    8.3 psb_set_errverbosity — Sets the verbosity of error messages

    + +
    call psb_set_errverbosity(v)
    + +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +v

    +

    the verbosity level
    Scope: global
    Type: required
    Intent: in.
    Specified as: an integer.

    + + + +

    8.4 psb_set_erraction — Set the type of action to be taken upon error +condition

    + +
    call psb_set_erraction(err_act)
    + +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +err_act

    +

    the type of action.
    Scope: global
    Type: required
    Intent: in.
    Specified as: an integer. Possible values: psb_act_ret, psb_act_abort.

    + + + + + + + +href="userhtml.html#userhtmlse11.html" >up]

    + id="tailuserhtmlse8.html"> diff --git a/docs/html/userhtmlse9.html b/docs/html/userhtmlse9.html index 878297b4..f0fa9516 100644 --- a/docs/html/userhtmlse9.html +++ b/docs/html/userhtmlse9.html @@ -11,47 +11,728 @@

    +href="userhtmlse6.html#tailuserhtmlse9.html">tail] [up]

    9 Utilities

    + id="x14-1280009">Utilities

    We have some utilities available for input and output of sparse matrices; the interfaces to these routines are available in the module psb_util_mod. -

    -  9.1 hb_read — Read a sparse matrix from a file in the Harwell–Boeing format -
     9.2 hb_write — Write a sparse matrix to a file in the Harwell–Boeing format -
     9.3 mm_mat_read — Read a sparse matrix from a file in the MatrixMarket format -
     9.4 mm_array_read — Read a dense array from a file in the MatrixMarket format -
     9.5 mm_mat_write — Write a sparse matrix to a file in the MatrixMarket format -
     9.6 mm_array_write — Write a dense array from a file in the MatrixMarket format -
    +

    9.1 hb_read — Read a sparse matrix from a file in the Harwell–Boeing +format

    + +
    call hb_read(a, iret, iunit, filename, b, mtitle)
    + +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +filename

    +

    The name of the file to be read.
    Type:optional.
    Specified as: a character variable containing a valid file name, or -, in + which case the default input unit 5 (i.e. standard input in Unix jargon) is + used. Default: -. +

    +

    +iunit

    +

    The Fortran file unit number.
    Type:optional.
    Specified as: an integer value. Only meaningful if filename is not -.

    +

    +

    +

    +On Return

    +

    +

    +

    +a

    +

    the sparse matrix read from file.
    Type:required.
    Specified as: a structured data of type psb_Tspmat_type. + + + +

    +

    +b

    +

    Rigth hand side(s).
    Type: Optional
    An array of type real or complex, rank 2 and having the ALLOCATABLE + attribute; will be allocated and filled in if the input file contains a right + hand side, otherwise will be left in the UNALLOCATED state. +

    +

    +mtitle

    +

    Matrix title.
    Type: Optional
    A charachter variable of length 72 holding a copy of the matrix title as + specified by the Harwell-Boeing format and contained in the input file. +

    +

    +iret

    +

    Error code.
    Type: required
    An integer value; 0 means no error has been detected.

    + + + +

    9.2 hb_write — Write a sparse matrix to a file in the Harwell–Boeing +format

    + +
    call hb_write(a, iret, iunit, filename, key, rhs, mtitle)
    + +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +a

    +

    the sparse matrix to be written.
    Type:required.
    Specified as: a structured data of type psb_Tspmat_type. +

    +

    +b

    +

    Rigth hand side.
    Type: Optional
    An array of type real or complex, rank 1 and having the ALLOCATABLE + attribute; will be allocated and filled in if the input file contains a right + hand side. +

    +

    +filename

    +

    The name of the file to be written to.
    Type:optional.
    Specified as: a character variable containing a valid file name, or -, in + which case the default output unit 6 (i.e. standard output in Unix jargon) + is used. Default: -. +

    +

    +iunit

    +

    The Fortran file unit number.
    Type:optional.
    Specified as: an integer value. Only meaningful if filename is not -. + + + +

    +

    +key

    +

    Matrix key.
    Type: Optional
    A charachter variable of length 8 holding the matrix key as specified by + the Harwell-Boeing format and to be written to file. +

    +

    +mtitle

    +

    Matrix title.
    Type: Optional
    A charachter variable of length 72 holding the matrix title as specified by + the Harwell-Boeing format and to be written to file.

    +

    +

    +

    +On Return

    +

    +

    +

    +iret

    +

    Error code.
    Type: required
    An integer value; 0 means no error has been detected.

    + + + +

    9.3 mm_mat_read — Read a sparse matrix from a file in the MatrixMarket +format

    + +
    call mm_mat_read(a, iret, iunit, filename)
    + +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +filename

    +

    The name of the file to be read.
    Type:optional.
    Specified as: a character variable containing a valid file name, or -, in + which case the default input unit 5 (i.e. standard input in Unix jargon) is + used. Default: -. +

    +

    +iunit

    +

    The Fortran file unit number.
    Type:optional.
    Specified as: an integer value. Only meaningful if filename is not -.

    +

    +

    +

    +On Return

    +

    +

    +

    +a

    +

    the sparse matrix read from file.
    Type:required.
    Specified as: a structured data of type psb_Tspmat_type. + + +

    +

    +iret

    +

    Error code.
    Type: required
    An integer value; 0 means no error has been detected.

    + + +

    9.4 mm_array_read — Read a dense array from a file in the MatrixMarket +format

    + +
    call mm_array_read(b, iret, iunit, filename)
    + +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +filename

    +

    The name of the file to be read.
    Type:optional.
    Specified as: a character variable containing a valid file name, or -, in + which case the default input unit 5 (i.e. standard input in Unix jargon) is + used. Default: -. +

    +

    +iunit

    +

    The Fortran file unit number.
    Type:optional.
    Specified as: an integer value. Only meaningful if filename is not -.

    +

    +

    +

    +On Return

    +

    +

    +

    +b

    +

    Rigth hand side(s).
    Type: required
    An array of type real or complex, rank 1 or 2 and having the + + + ALLOCATABLE attribute, or an object of type psb_T_vect_type, of + type real or complex.
    Will be allocated and filled in if the input file contains a right hand side, + otherwise will be left in the UNALLOCATED state.
    +

    +

    +iret

    +

    Error code.
    Type: required
    An integer value; 0 means no error has been detected.

    + + +

    9.5 mm_mat_write — Write a sparse matrix to a file in the MatrixMarket +format

    + +
    call mm_mat_write(a, mtitle, iret, iunit, filename)
    + +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +a

    +

    the sparse matrix to be written.
    Type:required.
    Specified as: a structured data of type psb_Tspmat_type. +

    +

    +mtitle

    +

    Matrix title.
    Type: required
    A charachter variable holding a descriptive title for the matrix to be + written to file. +

    +

    +filename

    +

    The name of the file to be written to.
    Type:optional.
    Specified as: a character variable containing a valid file name, or -, in + which case the default output unit 6 (i.e. standard output in Unix jargon) + is used. Default: -. +

    +

    +iunit

    +

    The Fortran file unit number.
    Type:optional.
    Specified as: an integer value. Only meaningful if filename is not -.

    + +

    +

    +

    +On Return

    +

    +

    +

    +iret

    +

    Error code.
    Type: required
    An integer value; 0 means no error has been detected.

    +

    Notes +

    If this function is called on a matrix a on a distributed communicator only the +local part is written in output. To get a single MatrixMarket file with the whole +matrix when appropriate, e.g. for debugging purposes, one could gather the whole +matrix on a single rank and then write it. Consider the following example for a +double precision matrix +

    +

    +

    +type(psb_ldspmat_type) :: aglobal
    +
    +call psb_gather(aglobal,a,desc_a,info)
    +if (iam == psb_root_) then
    +call mm_mat_write(aglobal,mtitle,info,filename)
    +end if
    +call psb_spfree(aglobal, desc_a, info)
    +
    +

    +

    To simplify this procedure in C, there is a utility function +

    +

    +

    +psb_i_t psb_c_<s,d,c,z>global_mat_write(ah,cdh);
    +
    +

    +

    that produces exactly this result. + + + +

    9.6 mm_array_write — Write a dense array from a file in the MatrixMarket +format

    + +
    call mm_array_write(b, vtitle, iret, iunit, filename)
    + +

    +

    +

    +Type:

    +

    Asynchronous. +

    +

    +On Entry

    +

    +

    +

    +b

    +

    Rigth hand side(s).
    Type: required
    An array of type real or complex, rank 1 or 2, or an object of type + psb_T_vect_type, of type real or complex; its contents will be written to + disk.
    +

    +

    +filename

    +

    The name of the file to be written.
    +

    +

    +vtitle

    +

    Matrix title.
    Type: required
    A charachter variable holding a descriptive title for the vector to be written + to file. Type:optional.
    Specified as: a character variable containing a valid file name, or -, in + which case the default input unit 5 (i.e. standard input in Unix jargon) is + used. Default: -. +

    +

    +iunit

    + + + +

    The Fortran file unit number.
    Type:optional.
    Specified as: an integer value. Only meaningful if filename is not -.

    +

    +

    +

    +On Return

    +

    +

    +

    +iret

    +

    Error code.
    Type: required
    An integer value; 0 means no error has been detected.

    +

    Notes +

    If this function is called on a vector v on a distributed communicator only the +local part is written in output. To get a single MatrixMarket file with the whole +vector when appropriate, e.g. for debugging purposes, one could gather the whole +vector on a single rank and then write it. Consider the following example for a double +precision vector +

    +

    +

    +real(psb_dpk_), allocatable :: vglobal(:)
    +
    +call psb_gather(vglobal,v,desc,info)
    +if (iam == psb_root_) then
    +call mm_array_write(vglobal,vtitle,info,filename)
    +end if
    +call deallocate(vglobal, stat=info)
    +
    +

    +

    To simplify this procedure in C, there is a utility function +

    +

    +

    +psb_i_t psb_c_<s,d,c,z>global_vec_write(vh,cdh);
    +
    +

    +

    that produces exactly this result. + + + + + + + + + +

    +href="userhtml.html#userhtmlse12.html" >up]

    + id="tailuserhtmlse9.html"> diff --git a/docs/psblas-3.9.pdf b/docs/psblas-3.9.pdf index 5e56d8b3..5140f9d2 100644 --- a/docs/psblas-3.9.pdf +++ b/docs/psblas-3.9.pdf @@ -28369,7 +28369,7 @@ endstream endobj 2053 0 obj << -/Length 8697 +/Length 8663 >> stream 0 g 0 G @@ -28604,19 +28604,19 @@ BT [-525(my_cuda_test)]TJ 0.95 0.95 0.95 rg 0.95 0.95 0.95 RG 0 g 0 G -/F62 9.9626 Tf -2.989 -24.267 Td [(A)-222(full)-223(example)-222(of)-223(this)-222(strategy)-222(can)-223(be)-222(seen)-223(in)-222(the)]TJ/F67 9.9626 Tf 212.576 0 Td [(test/ext/kernel)]TJ/F62 9.9626 Tf 80.671 0 Td [(and)]TJ/F67 9.9626 Tf 19.082 0 Td [(test/-)]TJ -312.329 -11.955 Td [(cuda/kernel)]TJ/F62 9.9626 Tf 61.29 0 Td [(subdir)18(ectories,)-409(wher)18(e)-377(we)-377(pr)18(ov)1(ide)-377(sample)-377(pr)18(ograms)-377(to)-377(test)-377(the)]TJ -61.29 -11.956 Td [(speed)-276(of)-275(the)-275(sparse)-276(matrix-vector)-275(pr)18(oduct)-276(with)-275(the)-276(various)-275(data)-276(str)8(uctur)18(es)-275(in-)]TJ 0 -11.955 Td [(cluded)-250(in)-250(the)-250(library)111(.)]TJ/F59 11.9552 Tf 0 -29.243 Td [(12.2)-1000(Extensions')-250(Data)-250(Structures)]TJ/F62 9.9626 Tf 0 -19.001 Td [(Access)-232(to)-233(the)-232(facilities)-232(pr)18(ovided)-233(by)-232(the)-232(EXT)-233(library)-232(is)-233(mainl)1(y)-233(achieved)-232(thr)18(ough)]TJ 0 -11.955 Td [(the)-384(data)-385(types)-384(that)-384(ar)18(e)-385(pr)18(ovi)1(ded)-385(within.)-713(The)-384(data)-384(classes)-385(ar)18(e)-384(derived)-384(fr)18(om)]TJ 0 -11.955 Td [(the)-247(base)-247(classes)-248(in)-247(PSBLAS,)-247(thr)18(ough)-247(the)-247(Fortran)-247(2003)-248(mechanism)-247(of)]TJ/F60 9.9626 Tf 299.187 0 Td [(type)-247(exten-)]TJ -299.187 -11.955 Td [(sion)]TJ/F62 9.9626 Tf 19.098 0 Td [([)]TJ +/F62 9.9626 Tf 11.955 -24.283 Td [(A)-378(full)-379(example)-378(of)-379(this)-378(strategy)-379(can)-378(be)-378(seen)-379(in)-378(the)]TJ/F67 9.9626 Tf 229.675 0 Td [(test/ext/kernel)]TJ/F62 9.9626 Tf 82.226 0 Td [(and)]TJ/F67 9.9626 Tf -326.845 -11.955 Td [(test/cuda/kernel)]TJ/F62 9.9626 Tf 86.402 0 Td [(subdir)18(ectories,)-278(wher)18(e)-273(we)-272(pr)18(ovide)-273(sample)-272(pr)18(ograms)-273(to)-273(test)]TJ -86.402 -11.955 Td [(the)-259(speed)-259(of)-259(the)-259(sparse)-259(matrix-vector)-259(pr)18(oduct)-259(with)-259(the)-259(various)-259(data)-259(str)8(uctur)18(es)]TJ 0 -11.956 Td [(included)-250(in)-250(the)-250(library)111(.)]TJ/F59 11.9552 Tf 0 -29.238 Td [(12.2)-1000(Extensions')-250(Data)-250(Structures)]TJ/F62 9.9626 Tf 0 -18.999 Td [(Access)-232(to)-233(the)-232(facilities)-232(pr)18(ovided)-233(by)-232(the)-232(EXT)-233(library)-232(is)-233(mainly)-232(achieved)-232(thr)18(ough)]TJ 0 -11.955 Td [(the)-384(data)-385(types)-384(that)-384(ar)18(e)-385(pr)18(ovi)1(ded)-385(within.)-713(The)-384(data)-384(classes)-385(ar)18(e)-384(derived)-384(fr)18(om)]TJ 0 -11.955 Td [(the)-247(base)-247(classes)-248(in)-247(PSBLAS,)-247(thr)18(ough)-247(the)-247(Fortran)-247(2003)-248(mechanism)-247(of)]TJ/F60 9.9626 Tf 299.187 0 Td [(type)-247(exten-)]TJ -299.187 -11.956 Td [(sion)]TJ/F62 9.9626 Tf 19.098 0 Td [([)]TJ 1 0 0 rg 1 0 0 RG [(17)]TJ 0 g 0 G - [(].)]TJ -4.154 -11.975 Td [(The)-255(data)-255(classes)-255(ar)18(e)-254(divided)-255(between)-255(the)-255(general)-255(purpose)-254(CPU)-255(extensions,)]TJ -14.944 -11.955 Td [(the)-232(GPU)-232(interfaces)-232(and)-232(the)-232(RSB)-232(interfaces.)-304(In)-232(the)-232(description)-232(we)-232(will)-232(make)-232(use)]TJ 0 -11.955 Td [(of)-250(the)-250(notation)-250(intr)18(oduced)-250(in)-250(T)92(able)]TJ + [(].)]TJ -4.154 -11.973 Td [(The)-255(data)-255(classes)-255(ar)18(e)-254(divided)-255(between)-255(the)-255(general)-255(purpose)-254(CPU)-255(extensions,)]TJ -14.944 -11.955 Td [(the)-232(GPU)-232(interfaces)-232(and)-232(the)-232(RSB)-232(interfaces.)-304(In)-232(the)-232(description)-232(we)-232(will)-232(make)-232(use)]TJ 0 -11.955 Td [(of)-250(the)-250(notation)-250(intr)18(oduced)-250(in)-250(T)92(able)]TJ 0 0 1 rg 0 0 1 RG [-250(21)]TJ 0 g 0 G - [(.)]TJ/F59 11.9552 Tf 0 -29.243 Td [(12.3)-1000(CPU-class)-250(extensions)]TJ/F59 9.9626 Tf 0 -19.001 Td [(ELLP)74(ACK)]TJ/F62 9.9626 Tf 0 -19.001 Td [(The)-190(ELLP)92(ACK/ITP)92(ACK)-190(format)-190(\050shown)-190(in)-190(Figur)18(e)]TJ + [(.)]TJ/F59 11.9552 Tf 0 -29.238 Td [(12.3)-1000(CPU-class)-250(extensions)]TJ/F59 9.9626 Tf 0 -19 Td [(ELLP)74(ACK)]TJ/F62 9.9626 Tf 0 -18.999 Td [(The)-190(ELLP)92(ACK/ITP)92(ACK)-190(format)-190(\050shown)-190(in)-190(Figur)18(e)]TJ 0 0 1 rg 0 0 1 RG [-190(6)]TJ 0 g 0 G - [(\051)-190(comprises)-190(two)-190(2-dimensional)]TJ 0 -11.956 Td [(arrays)]TJ/F67 9.9626 Tf 30.302 0 Td [(AS)]TJ/F62 9.9626 Tf 13.165 0 Td [(and)]TJ/F67 9.9626 Tf 19.571 0 Td [(JA)]TJ/F62 9.9626 Tf 13.166 0 Td [(with)]TJ/F67 9.9626 Tf 22.958 0 Td [(M)]TJ/F62 9.9626 Tf 7.935 0 Td [(r)18(ows)-272(and)]TJ/F67 9.9626 Tf 44.005 0 Td [(MAXNZR)]TJ/F62 9.9626 Tf 34.087 0 Td [(columns,)-277(wher)18(e)]TJ/F67 9.9626 Tf 72.949 0 Td [(MAXNZR)]TJ/F62 9.9626 Tf 34.087 0 Td [(is)-272(th)1(e)-272(maxi-)]TJ -292.225 -11.955 Td [(mum)-211(number)-211(of)-212(nonzer)18(os)-211(in)-211(any)-211(r)18(ow)-211([)]TJ/F59 9.9626 Tf 167.954 0 Td [(?)]TJ/F62 9.9626 Tf 4.424 0 Td [(].)-297(Each)-211(r)18(ow)-211(of)-212(the)-211(arrays)]TJ/F67 9.9626 Tf 108.255 0 Td [(AS)]TJ/F62 9.9626 Tf 12.564 0 Td [(and)]TJ/F67 9.9626 Tf 18.971 0 Td [(JA)]TJ/F62 9.9626 Tf 12.565 0 Td [(con-)]TJ -324.733 -11.955 Td [(tains)-218(the)-217(coef)18(\002cients)-218(and)-217(column)-218(indices;)-228(r)18(ows)-218(shorter)-217(than)]TJ/F67 9.9626 Tf 260.482 0 Td [(MAXNZR)]TJ/F62 9.9626 Tf 33.55 0 Td [(ar)18(e)-218(padded)]TJ -294.032 -11.955 Td [(with)-315(zer)18(o)-315(coef)18(\002cients)-315(and)-315(appr)18(opriate)-315(column)-315(indices,)-331(e.g.)-505(the)-315(last)-315(valid)-315(one)]TJ 0 -11.955 Td [(found)-250(in)-250(the)-250(same)-250(r)18(ow)92(.)]TJ + [(\051)-190(comprises)-190(two)-190(2-dimensional)]TJ 0 -11.956 Td [(arrays)]TJ/F67 9.9626 Tf 30.302 0 Td [(AS)]TJ/F62 9.9626 Tf 13.165 0 Td [(and)]TJ/F67 9.9626 Tf 19.571 0 Td [(JA)]TJ/F62 9.9626 Tf 13.166 0 Td [(with)]TJ/F67 9.9626 Tf 22.958 0 Td [(M)]TJ/F62 9.9626 Tf 7.935 0 Td [(r)18(ows)-272(and)]TJ/F67 9.9626 Tf 44.005 0 Td [(MAXNZR)]TJ/F62 9.9626 Tf 34.087 0 Td [(columns,)-277(wher)18(e)]TJ/F67 9.9626 Tf 72.949 0 Td [(MAXNZR)]TJ/F62 9.9626 Tf 34.087 0 Td [(is)-272(th)1(e)-272(maxi-)]TJ -292.225 -11.955 Td [(mum)-211(number)-211(of)-212(nonzer)18(os)-211(in)-211(any)-211(r)18(ow)-211([)]TJ/F59 9.9626 Tf 167.954 0 Td [(?)]TJ/F62 9.9626 Tf 4.424 0 Td [(].)-297(Each)-211(r)18(ow)-211(of)-212(the)-211(arrays)]TJ/F67 9.9626 Tf 108.255 0 Td [(AS)]TJ/F62 9.9626 Tf 12.564 0 Td [(and)]TJ/F67 9.9626 Tf 18.971 0 Td [(JA)]TJ/F62 9.9626 Tf 12.565 0 Td [(con-)]TJ -324.733 -11.955 Td [(tains)-218(the)-217(coef)18(\002cients)-218(and)-217(column)-218(indices;)-228(r)18(ows)-218(shorter)-217(than)]TJ/F67 9.9626 Tf 260.483 0 Td [(MAXNZR)]TJ/F62 9.9626 Tf 33.549 0 Td [(ar)18(e)-218(padded)]TJ -294.032 -11.955 Td [(with)-315(zer)18(o)-315(coef)18(\002cients)-315(and)-315(appr)18(opriate)-315(column)-315(indices,)-331(e.g.)-505(the)-315(last)-315(valid)-315(one)]TJ 0 -11.955 Td [(found)-250(in)-250(the)-250(same)-250(r)18(ow)92(.)]TJ 0 g 0 G 164.384 -29.888 Td [(163)]TJ 0 g 0 G @@ -30420,7 +30420,7 @@ stream /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[0 1 0] -/Rect [121.315 282.176 133.27 291.182] +/Rect [121.315 282.166 133.27 291.173] /A << /S /GoTo /D (cite.MRC:11) >> >> % 2045 0 obj @@ -30428,7 +30428,7 @@ stream /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [253.836 246.191 265.791 255.601] +/Rect [253.836 246.183 265.791 255.592] /A << /S /GoTo /D (table.21) >> >> % 2047 0 obj @@ -30445,15 +30445,15 @@ stream >> % 585 0 obj << -/D [2052 0 R /XYZ 99.895 349.256 null] +/D [2052 0 R /XYZ 99.895 349.244 null] >> % 589 0 obj << -/D [2052 0 R /XYZ 99.895 231.912 null] +/D [2052 0 R /XYZ 99.895 231.907 null] >> % 2055 0 obj << -/D [2052 0 R /XYZ 99.895 211.058 null] +/D [2052 0 R /XYZ 99.895 211.056 null] >> % 2056 0 obj << @@ -31454,7 +31454,7 @@ ET endstream endobj -2209 0 obj +2212 0 obj << /Length1 1383 /Length2 5908 @@ -31525,124 +31525,7 @@ W 6S&_!S|esUFRyYﭧN endstream endobj -2211 0 obj -<< -/Length1 1956 -/Length2 7144 -/Length3 0 -/Length 9100 ->> -stream -%!PS-AdobeFont-1.0: CMITT10 003.002 -%%Title: CMITT10 -%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 CMITT10. -% 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/CMITT10 known{/CMITT10 findfont dup/UniqueID known{dup -/UniqueID get 5000779 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 /SFGIZH+CMITT10 def -/FontBBox {11 -233 669 696 }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 CMITT10.) readonly def -/FullName (CMITT10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.04 def -/isFixedPitch true 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 67 /C put -dup 68 /D put -dup 69 /E put -dup 72 /H put -dup 73 /I put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 80 /P put -dup 84 /T put -dup 86 /V put -dup 97 /a put -dup 99 /c put -dup 44 /comma put -dup 100 /d put -dup 101 /e put -dup 33 /exclam put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 45 /hyphen put -dup 105 /i put -dup 107 /k put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 40 /parenleft put -dup 41 /parenright put -dup 46 /period put -dup 114 /r put -dup 115 /s put -dup 47 /slash put -dup 116 /t put -dup 119 /w put -dup 120 /x put -dup 121 /y put -readonly def -currentdict end -currentfile eexec -oc;jAw-36Uu4 -l.Nk48DPh>[ME7wk9B.H.CSoZqO O)9OHl~Q:ɾD0j J'JZ `B 5ԆG -tbY7:Ϳ2hK@,',L~## gyMiM? i8Z+Ւ~[\3Mn=r=_Vxgp%vbҨSr\Ʃ*'"$9iV2;xտ`e'fz+;Z)ӣ4Y,1i$WVCo _S*`6 Ij$I/}!9'n0%3SVP}vqsF}OTӌ+O*6I*\-R3Nٜ:gd;p/V;aZ6詡:swQu+MFÜաn>s *HPix\x6uj^tTg'Dঐi&k|5.+ E0E,Tٙ~#NaXϖ.-EJ:cxΖxhN T#O #k]FּXND Ajvf rƮ/*{,Ed),# vih@ `ܲ~y)ΚgىZlnv̉˭02L7PkgcW% N |]ɼgn L>DCj}xt7$ 1쵗T -"*vOBdN#/Ý_,N f/.1fuUoݫctݶ.aLEEԝ O8NFm|@*7ȪqEIueXʊHm{+RZ\ Do 6;%GC`]m%4BHi*GFn/.'1#F\ځSֆEkS*Kbix VAyqi,kiXW&`BA:[2 G֒LQ2}O6%ڑʚX;a~S?雂Koڻ6lTy6DȱFDץW\g?""v|]Jz`%i~H 69t @YPaЪ' 雠$|,kߒ2ǝ{fC,1iJݹ`z$RI)O!lG{INN~zj"(:.AonߦvSw_#a\ QTH5̯EUSOjD17سBKT*uNEhZwЅ?r81:AJОQ[͡`첈~l&P}Ǹ?p?{F.t@_bkq 7/# iojih'`7]7DoVKN4eu -rpn!7PѓМweǏ(B - g D -ߦчPq2tξXm7+t?a}i/k5i:S`$u5n2/ĝK #&} 6f -{a$6wAKY0tdt IZI+cC'0@-hqm -y3P^>]A{G -I7{pr ݵ(rc(j|/ G%! . -.I~NKGd} ]l5, j]~ "CxCHt x@x /[o=~h7/Oaw>0xd);?u^q#+uI֦| -ĽT,GfKu(U c]~n8:>NAncwvZB3]%#qc)!56#D!oC>Fb2y Xptl0;4bON̜moOAgn]umiMC]GEonX5cI+Q] -qe@E+LNv{*H!Aǯș?=A%;W xB6J&@;l ƽ&=ȘeiyΧ -.}  -˘xVJ{npJF岍u:JA/%ț VဿOb0SKʔ_4CߖJ`@`ǎ%*M ^A{y뿱)旚d=U'oXRx/8ʖ~TM> ٢Li;g}c[ͫ.lvjg)G66[>kxĐ-Sÿ,M/sVijj]wu/ۺ*,yLC|QqSApF~_U0|6;"s;1(V$ -YGrēăoXr60ź3jw86*̣yVKevG=>NlN -ƣ+@޲g5:0_D*хaȷ76Mxv.TRG&!'PM7>z-~}IEH}YN8lj"S7nyNR_cὅý+gfQɛay @< z~C̃D:`12Yz̗KD|nd5DŽ?M G&[;ʱ GxIdXhX7 `⟵mRIhlQ:C͖;;EWrUk&8.[h% fYBŋ5Q 2m'c F#ׇ eDFJ07Dņ󩔪\gW}Lj̉XwFuœT0C"N^c*CxYEk4 `UV0N s,KU !lj =”}wfX"u'Bs]P{baܱl7r^cJY% x~@t N%=bWa[pT729w"63M"(MlYl U&FFJ嫋j#6EMkw-hl%s󲘮K6}unYA(unr]۠RW?8^v_%45]ZoH0g?ۈ2f!zq*. sf':"5aM6Lc$KtȅArS'\sWF6 &oߛLyJYRVRnZT 87=n4PrZ\J̢t7vhP;?'\z*ƙ m⌟)Vl\IG/r+sZ|᧺5ˮDCt C @'h zH]/m)zkt[E {NXcKyXGR|΁A=1WEJɽ6ϑ*^v[SJ$ -`D/̏>wjE** X(H | r=̟z#-1_1kmG\e+@To3'Pj~-cv~H3ZW-Zz"dm+:Zoǹ O@a[C*D3* fT,1QĤjJ z6h[+JJ6L|"?N|ieԝs{ -AehX'v2d*U1{d^ -_g\e+J`ڼu4 -"r?i'5D*,u eH%. $f'Tx ɮ3a\<;3&.8o a?shp/`ȶBF{D1U#'@/wNwO{WCS2tP='B\n m$`≲XvG^Hf0@Ǽ8Dzgtۅ-4}GW - XY־q7D(mD "gFAushB!&sXӒ}WTZsc@ى`9zmڧuxle :wna`uϩntv87JMSrrdI8Mi6?."{O-|lv~6|g|P.SD~nLjyDZoW$Qp$,;C꺵nƭ|ƶ法dwPw?WLIq>\h(FS*їQs䙓3 -ڪ N@I;ieg|F\;;ḾZk_`:BY9 LxqyKN,H`#W$V=UDxkU. "*4xSR? PrP#>i$!EְsG&lzҿg$|oj0PsffX _簻^a9Mh- t\ZZ Hz)XHm]c&AslY x=VZ]wq پfpnv%\*i;2f<٪cZ}Z;{,X]T]4~jrd.1=x%LE(C_LлF|zy8ő;nF+G'jDWT2-hZVۇ cAA^dE_{0vȟ)7y΂Lh頳ᝧ9SFsf_-vAY}1)GMo\<+’Xc?[l&/_iǜT%j.2F"C"#UѸ4?h)Dnkc7@*Y7s=R9YB݅TZGkJ`ʞ` \j+@{kF] O`wqr1-F8A(pԞ@f]Ż#xq"T -*!/KBd$ɉڊ`ijMzJ7]āj[JXp h핤>Òm@4G7 -23>n jVwY28Qד%uh@}yS._6džwAl饌?ʡ- -48ɹ ktÒ:]X|j9' 7,} -R{>g7,}P+zm5˺HU?iSr,+ -FAa.Pgvasl ZBhgǠW -BѶNh`˨[Wj)q(͌.wY$Q0] -endstream -endobj -2213 0 obj +2214 0 obj << /Length1 1442 /Length2 6151 @@ -31720,88 +31603,7 @@ n^ r sbVb)l 2STH+PMzjzif$DMkV ?\ټ>߈ƶa<EELD6=tE.(%Fo~6r\l;s'$ֵ>4r$2DZ~*\R Yi$=ޡk'哙.m6–tY0O$)QrUQ+ߪ4(,Qb8mөqH=,Y8i SZ6m@`7~"L7\FdN#FHRKKHpb40 2~HKε֊X endstream endobj -2215 0 obj -<< -/Length1 1478 -/Length2 6403 -/Length3 0 -/Length 7881 ->> -stream -%!PS-AdobeFont-1.0: CMR10 003.002 -%%Title: CMR10 -%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 CMR10. -% 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/CMR10 known{/CMR10 findfont dup/UniqueID known{dup -/UniqueID get 5000793 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 /SOSTRQ+CMR10 def -/FontBBox {-40 -250 1009 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 CMR10.) readonly def -/FullName (CMR10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) 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 91 /bracketleft put -dup 93 /bracketright put -dup 61 /equal put -dup 40 /parenleft put -dup 41 /parenright put -dup 43 /plus 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{x< ,-.2iRnñvپ1䠕 '䓱_r"O_t3kefBݼVfj9ҳ Yh뀸{q-ɷ}W??gw1*Eh[:tWeI,v8a<{B100Z85|}Nlw]6Nbh3E`(Eޏ'Q;eԃ/.DyL5$4IG׮Ɋ\yj9.VU5Q!-赁B9dB^oVwBɎT7RsOGA b#TBv!mWT=w,ID%'MK<|]D@2O( ݎ%#_ɷVBST#z!${l\4ĸ ;5l&!〚=(fUwAeB#30>H 'L+֓jz@=s\<=\Y$D?U 6xGQnǫi%֔! -L2[)!fXc<'ȲRP3E!-:'AJ.IJCJJt&{76 -#VH/Fgw"F5wS$|oQ<Η `~<10|;,zɴ% -oߠx0sW1Fx gmxVyѝ"]#z~pv Ũ.rB9$nYCC1td@#8kNԋK;ԓlF( ،N;d*<Ʀs9ZQ@It%[)7&hn Y'a¶T'Xrߙ/n_nJL (@ -К -N{KF^kbn~`L]aU{vLܺ41$rmAsnZ*=sob@{y !CC{c.WZ0n bpgsPd$-\ԛ&L27JBs/g(xQ,t>[8͓GsŸ:R$9]6&my)ivjWLRB^RBalx_Y:5M/j١!}`D&WȪQX$HߧtI .Y@nr_n܁ OtAN-L n?_^_g~Ə;`KB6eĶ ->lQp)/;S' ^:tJj@xE(0G;κQqǔkT'; ÃDHjsrxܖ -.>֯kl;&#<ښe)fFz`Ƿ?Ic@SH&<evn8F\V3aA!yy:+c!xbM։/f}3ߖ˦"G'fMsXWU}Yĵ^ %j!HOH͎_;臲Jv]# -$'Ch?5u-G:zHZ\%Uv z^By%NT⸶3=X?mJ-3iH@ܐfσkR.v'm.'SDly7 YCm^Gu5_G1t/ -41n_D>}p+fg9h$]@M`^ҹGK;5wIrqA3fAYiuYrD:dR At -,)aɺh9[ԧuS9KTKaX$wgɓO[xqǃyI(j5LIc}|h$zDUwY+Z:ϤŜ1le`u@|܈贚^6/y`a [Ί`ҾEwa ziLa}jʰ@}xWns0n*{l?Zz>8p-L&ȣK`> `%`ݿs?v˻^\*QNbf+ۼބo" ٧U zgga䎐uFљ<Xyݸ*g4?X2]4H͢^qLeoU~ 7>)ƤHnA7"{DRj)ע~eVDJ|X}ѧCrTA fP};"ӼK#ΑTF\^ԓ ; |R D\Ă Hu6QИ'Q3b;x#3S:jb%tJ/>ʡOrVށx]>)]l5o[F;,N&'i\NQIH?T:@FN SX0<)hW4fFDh.سT)^S-nw}, ZNEC Y Rez3\ -tY5`F~_xU|'XLJG@U6I \>:V_>զ9*I0}ӵ\"{3UzuFf٤Pߨ)E8Uw)gq:dj#hq so -@ -KG7"|QЇ Zzs|}LմS:fmA3S 2=[dؓJ\ܳc|tj1ƛArѮJv,K| ϕVސ -Q[ AEKS/zKc -O,4e|{G#RvKy{ K1EVVwb6ª=yeeܑuE>M%;,1W}w ~hW _F9QcyE~fz\a:a<2euggSR1Eܝ(=F=;q')^1>u6 -G0+B+渞bqGYitLxRIPvhԥϋ^:nwp5>^؉R}4agl}^(t7a &)ZS8n}@f0;b.ۣEL7%3C,@7[I [1sIX<[f܌a:?y3"u/'\d Dӹ=qU kκH$ yQ7pl*mhS]AD5ƫ79 -endstream -endobj -2217 0 obj +2216 0 obj << /Length1 1688 /Length2 8444 @@ -31892,45 +31694,273 @@ p b|<dF.O[vOhgyQ쮗h0},:(і~6umXRV<гJVM\Fw%T6VvQnϨ: M\څU-:φ57M}!ZD s  {$Q0݄n띮 (N3[( ?ӌo9Tuҫ6nuD!qZUT!pڐV؞/\h^:'.AES6P*BYL endstream endobj -2219 0 obj +2218 0 obj << -/Length1 2589 -/Length2 18452 +/Length1 1173 +/Length2 2916 /Length3 0 -/Length 21041 +/Length 4089 >> stream -%!PS-AdobeFont-1.0: CMTT10 003.002 -%%Title: CMTT10 -%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 CMTT10. -% 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/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup -/UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse -{save true}{false}ifelse}{false}ifelse +%!PS-AdobeFont-1.0: PazoMath 001.003 +%%CreationDate: Fri May 17 11:17:28 2002 +%%VMusage: 120000 150000 11 dict begin +/FontInfo 14 dict dup begin +/version (001.003) readonly def +/Copyright ((c) Diego Puga, 2000, 2002.) readonly def +/Notice (Copyright (c) Diego Puga, 2000, 2002. Distributed under the GNU General Public License (http://www.gnu.org/copyleft/gpl.txt). As a special exception, permission is granted to include this font program in a PostScript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def +/FullName (Pazo Math) readonly def +/FamilyName (PazoMath) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +/Weight (Regular) readonly def +end readonly def +/FontName /IKXQUG+PazoMath def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 165 /infinity put +dup 229 /summation put +readonly def +/PaintType 0 def /FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def -/FontName /QGKXNM+CMTT10 def -/FontBBox {-4 -233 537 696 }readonly def +/FontMatrix [0.00100 0 0 0.00100 0 0] readonly def +/FontBBox {-40 -283 878 946} readonly def +currentdict end +currentfile eexec +oc;jtD[|<33229IfÐ"XXH`{(b$`Ꮻ2 Gy<\&MꐵCt+˅BJvƷmoϚ}^߼YTYC]S=nt9x>JK1'r6iX'l 6я=v1]mO CQC>iOLUO*TcTm(߀ 1U +nAYXU12rrE^Oy";Dm{O0 {2RBiNMufLon>Gl_1#Y> ؋nׯ ,G#IJ5.FE)a" pqo-4`7}ӺWt_ceuJh>>W! A5j-v`-?R tl.e)1=kdSi!5_l< -^+bގީܖnW%yg͚3N>Vp9e.ovh; ͍fW\^yя_ܓ'1︖œ]c*" 磺@A.XcǽD&(49g6vf4J ]5(W sԘtaȝ<[EpTU!JtО ?,L?!w sg0MhB1$sy8G(b>zuݬDoeHz)^0 +9JWf'UIcei+5H,r73g03{#Y_E^n2ݥ xdR$;9(fn*eHcAI#y`%,tŁ\ )_V+7\M7A4R"З@O!1$*ϤНsp%>*Ȗ, QɥH;Eٺ~b@n sXZۖ+ , +y#/!AL98Ta/eT,ut/u6~ 1QA\SW{N?2/G?E 8ӮchbK3q$;+^B(񬼨xฉk:wMX,Ӄ~R[&h8AS #L'ɧTp#{۪>;+⭼MuU[%V0EėٲC9؅Sםu^sI2\. +>j5xBĒڪ]˸f*g|x*cfr+B!H9R2H4^Ed>>J1uz&MLLioJ$!tFo_O>y,ު+#D qW2  tE"QIՅ.e]l w,*"Mf]i/FSꂒ.s_.n1 /8,}̨ W HFPsWkn3a9`6IݐWi>| =1uŪ4ԅXHAH +$-U3# +endstream +endobj +2220 0 obj +<< +/Length1 1188 +/Length2 2740 +/Length3 0 +/Length 3928 +>> +stream +%!PS-AdobeFont-1.0: PazoMath-Italic 001.003 +%%CreationDate: Fri May 17 11:17:28 2002 +%%VMusage: 120000 150000 +11 dict begin +/FontInfo 14 dict dup begin +/version (001.003) readonly def +/Copyright ((c) Diego Puga, 2000, 2002.) readonly def +/Notice (Copyright (c) Diego Puga, 2000, 2002. Distributed under the GNU General Public License (http://www.gnu.org/copyleft/gpl.txt). As a special exception, permission is granted to include this font program in a PostScript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def +/FullName (Pazo Math Italic) readonly def +/FamilyName (PazoMath) readonly def +/ItalicAngle -9.50 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +/Weight (Regular) readonly def +end readonly def +/FontName /DUJUUF+PazoMath-Italic def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 97 /alpha put +dup 98 /beta put +readonly def /PaintType 0 def +/FontType 1 def +/FontMatrix [0.00100 0 0 0.00100 0 0] readonly def +/FontBBox {-70 -277 902 733} readonly def +currentdict end +currentfile eexec +oc;jtD[|<33229IfÐ"XXH`{(b$`Ꮻ2 Gy<\&MꐵCt+˅BJvƷmoϚ}^߼YTYC]S=nt9x>JK1'r6iX'l 6я=v1] +đg@F7pqӁ')jjOh%Ssq={.] ZO7єEՄ|۪uBwLÍ `'&0Cg)X0F?nY&8 ˹r]lpKGCpoğg\t/bj}t SEcqR7VL%Y'1b J71SU3=gO>bHt kKc:hA:F.xW(L^N1K @_P̹>nnof7-U El#+A5FԔkyt:RR2\3 l v"ڪ> V b/&"@4 +nD5tv_\$S|KpCO1vF^(By@`gFszV0Qn .T=>>rYA,{ɠQrF!s߸ߟ0׀ߎ5ˢV<4d(nLس[PC;+qޥK V:d&>J3)Q6P|B5 e )\@~7mknˋ$ԶܖP+C}o*( -.47W?8"N[.^7/Ɵ3/3j(ĦwN wLjC; f&cv^%:S,yr8N@K}m>KWKn9}%FSGhpxC(@rX#?F0ʃ#w^cuֻy"-lE#~%U1b[ ^•1@*rEPWS/?N!< e* Wxax"(Z5ŅQu? +UgH{@^Κ2]Ʀy1Q',XL kx2 ]mȌ0`픈p:*:_kp +ϊ%,vVb]2q2嶖ćVas |HzN@=ܫ7ikK\}pYNsS)# 􊄡c,E׀Z=D=0Maf~nľ4ߍš2Bob bObwww>|Gkh6p r[#P"77vE8ʖ$;E6zдR]}##+0"i%uCj,|aSVMx5p6Uj(mE*~mYdǡ旵w#`9k?)픥ZW|M%H*'a>"Vћw5t0QPGR%"*Bu+8~j X< @cNngYGй34 V])-l Ɋ5imՙUV#Ŷ{ۭls1we(\OL ER~[шPs1\zLDgSS[Oup6(@1RsP1 ?=E؜neM6N5w<3dq^cF)UI2M F~q +1йmدNIB}fȷ/ZMYE(Y֋'Ჹ +T;UF7<{LN-^(U'UAf0GivO0P$ 4Z@/.}L dlI/_f>k[WSʪ1<" ̣U3 lP.+\Bl{ɂH%չ'%@-ƺRS覟yNuE|v^+ZRkڜ[ȈRԶ0ZH: +wFe@g`!$ pepdw,,# ov>ժI83!/ J?|i$d_(/;b49%Xealwv_̹@drp.l䧏<ɁJt~M[y 3[{ +endstream +endobj +2222 0 obj +<< +/Length1 1756 +/Length2 19614 +/Length3 0 +/Length 21370 +>> +stream +%!PS-AdobeFont-1.0: LMRoman10-Regular 2.004 +%%CreationDate: 7th October 2009 +% Generated by MetaType1 (a MetaPost-based engine) +% Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS). +% Supported by CSTUG, DANTE eV, GUST, GUTenberg, NTG, and TUG. +% METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki +% from GUST (http://www.gust.org.pl). +% This work is released under the GUST Font License. +% For the most recent version of this license see +% This work has the LPPL maintenance status `maintained'. +% The Current Maintainer of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki. +% This work consists of the files listed in the MANIFEST-Latin-Modern.txt file. +% ADL: 806 194 0 +%%EndComments +FontDirectory/LMRoman10-Regular known{/LMRoman10-Regular findfont dup/UniqueID known{dup +/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +17 dict begin /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 CMTT10.) readonly def -/FullName (CMTT10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def +/version(2.004)readonly def +/Notice(Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).)readonly def +/FullName(LMRoman10-Regular)readonly def +/FamilyName(LMRoman10)readonly def +/Weight(Normal)readonly def +/isFixedPitch false def /ItalicAngle 0 def +/UnderlinePosition -146 def +/UnderlineThickness 40 def +end readonly def +/FontName /NCCVYE+LMRoman10-Regular def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 91 /bracketleft put +dup 93 /bracketright put +dup 61 /equal put +dup 40 /parenleft put +dup 41 /parenright put +dup 43 /plus put +readonly def +/PaintType 0 def +/FontType 1 def +/StrokeWidth 0 def +/FontMatrix[0.001 0 0 0.001 0 0]readonly def +%/UniqueID 0 def +/FontBBox{-430 -290 1417 1127}readonly def +currentdict end +currentfile eexec +oc;j~EЪ%9.>XJٚмD"e?&oLH:]~nX%l޹dQ@a~M~EA˟V.UM؀")JY4қ UC92"\ܡw1rlxнtaA*`Jp?(:E(qU[s $gG '\ +wMsuIC'93|Y@TۂEk$:mGzRg?x= w;*E JM8͛,uZmY +`n.ˣ/J +E: BO/g^Mj9Z6F脨0 BKBՈ[GOrEY86nXՔ*wFot8CF :g6}dPk]!$3h+ۆ^];JR*-uC4⚈u6Lj=!;͐`,7TZXV]w)ߧɍ)%NL߱VيӒI|5sBMedO&Ng$q&Y©Au(@HVqQy?>&_@GKf0Z E\$3eL +:G(, f[M]ln uE~0Rt^S PjwWv6! +1nC22O՜QS tynG + }=_nW?^‚2I=>]L-ͬIq^ ͘ EM +,|K93QbָZ׹pu P۫%Fj`(m->ĸtGTf +b0UAx>|z40 +BCGҡ %"nH#ܕ diKsxc"Hc A2sk6.ab?CGZրݣ~cc>Uڔ!U ؏ Zlp;@6CўO.aވR&UtA_Kfq +(C$gU^/"z Rkf ¦vPGyQ}i0}*+z>n y!2X{Z60ŬW ZxV*2'Pԧxh}C}B.Ȏp&j׷dq'g0!gz$ͅA\/=ǏjUEBm/Ġy]"Q5Q._x(]nR{jF.6S0&MP!>>ǒܡQA&%_͡ ~ei6SܯI_1p$$~<-./pY7jUcdMTj)9Z[a +IjQЖ@1t26he>}[Efag~g$P81lÑ_h8*5C, UwF`eͿ;;1"c%|PPh\CMN Qn1:.«h+Uew56eK0k(@sQ-rD%}zzR7u̝Kf 1(ƾH^P( B'vhufg!ᱛ >ԝg㦉ZLyMS({CE];&mP4}:FkR{"K ;\c/[pU)6)gs +. +wʘXԼ68|%;x_jAw(dBsь>~>b a5s8ݯ>ןq !/jWKpDz¥N=0C72K0r|]*Lx\Ҩ +G:c{7&L3PDf$FVe=X`5 :cZ+2a ].D`Kk^%IhMH/F? A]bu\k)T@,Ød[ϿB, Hh^ۯI*qjTqbx`J@̤HI{ۣ;qO]Te7xwyiCoQ. =eX2)m 9 odBa%\ٸ *sr7zE;~P ѽ L%*DC̯VpdmoPB69OsER"($@A.6'y[)GG`ٚq!fG(OZE2u[\-Xu[]ąe[@$@zJ&U, ͸ +۫+| +F +6dn[E-xԻR,*[cPLC 6'绵~8q!.:kSkn98@?-TtBԬƍE!3`yl& WAv88 +W24CqMAa·qqYqf잞bۘDŽ5(Z$hߦm,ŷ,]xN84tG= Xvgkgc qdf%M SGPm,,L Av9l1H`C!T!2Rō9QNIuV;D\GChtAeS6 [2V$&=ӳ%],2J o5@|JK6!CL&dxXB8p9j4 [هGtb./_9":Nx V)$եtV54jCYȭU-i73)IF27sx:qdAٺXHzlaV/üD84&MgV1R<8 ?b 6[Z$R vT-|0V|?D7F<Ǽi;zH8c,oH_K" oo%&TT{ݱߎZ\=`:zX QDWn®*RyʣW^kD!&p`|O*W^kWn\a^0Azk@Ú66zOˢ^cb-!zp$'heW}?'ˏYp2xtD;9\w{d\w*Vҕ1 }FT/osGS yIzxPOZMA'FڷjfzM`7U*0@WBX3ʍoʕ:c6RE!Pܝ^Fθej]Ӭ!m=ܡP:4ZIqvknZU˚]P$T%.38`1!MxR =N#xPt#&Tt+i~u$zY(=Ϗ>TqZȄ;[}pa~ [ps!c y;.e\Nh]"XR񀋑3+w^Y$àaa{cFSu1\,*FD6,eY VO~<޹50޴ScYNrtE{a,Ż:4 W \eXݿ+Wi6 :ŊߣԖt \1O|峔h<"eu "k(F 9??'yxIxCf&,f0Gã^l5\_|*m 4Id3$)fΦeždA9Vt!- /EJ}d[y{H/8qbpw?jYި+?=ވF#N:znmy.!ևA6q#,nc+o +rCR` +"hZSCf'փ|OJѢ4qmպă0׹ kFϛ$yöTJA$碬eL||gB|{$WC^UG!ÚZ/ejΉj$,:Ck)8SJc zUMNTf{KS?O~ݡ8RR}͏@\aI:^lykH@".,yɉʩo!TiSPz8C3F.Jt ^ 3xv% n`= 7"^>hC2)+qLvW +gZ٭㦨̰B$@vɅ&vP2ot8~v8͞cd_MN.lvS(ﻺtW:Hc'l[)U4ҵ G[^@^r\L:)zpjm4nxѢT%YYCOĤșbܤ!Ic=!Ā?3ZuvDI6!uܶ M?b5zp$EEm{<燑 ˿摪o.'W@/|aut )muP#4ѹ2P|Z9#^.p40A5&j|$mG.1`8Z@$9H!Ri6'҉G1tnkna$Nb}*@[ÓxB#S.L?'ҤS`vzַ#df0̋Kǯc%<d!l:XKW0mV)-L%kRYMX ٜ|,y.B8ꄉp׊*ܾ?G.Q{Q&;¿ '!} o/܈D-;)+lʔڠlT${ыzOŔaNxR+G^$:ۿчj}`˦zRa0 ȗrmFbP4'#'0 ߡ>:!C穤qG Pj]6yROF˩XmGU߭tKuG\Q8䫩:(vIe41=9)`șx|`Zx0ϾH&q *@p  7 YyB͹xݿq߰`H»pHjX D׵`1E+y88#R}Ŗ ~Lȅ"*nD7 \BUIӼH0L.G )Ee(ydgQ2=\b8Z .x竫7%M}կjWvD dG|D[mh|xgj棻RLO+Ho%ZF&'`}5+Dbm6i>^W5tɌmbeD{M/ec@MH{q8BBr5)ٱģ Yq]$&eT31EhV+/Y(X~E><&ry|kVq6җ u0P}gX.H.{al[Nf40w kihx'_3b'QJCza?]$!:<il웭xeٵ\K'{.?>yK>鯊\ +4~9f+ cU$dMejϢjS]6!W#u:$ Nԕ\Z?o[oA{=$v>ÅN.ȿߍ<. խ\ +cVO& @uK\ߕfA[,fp֟J~J%eyTZBn ly4D"#a;=\dQPsJo]yHNLe(3Fsz, KznjpS뗴(^8.ox6FW T^|ܦB天JS< +YXuxϗ,#8 +4~FJ |Y&Ѱl iBE`#7ybB OOyeV;'%N6HDPB`pq?QqL\-{F;:=3*w֐;ZRE &*TUrM**=`DMYX'N@qx?E*ԛ]yʃ?vөވB7XmԚ)Ut Wt~Nb]LϪd!S2 +ld ȭI3:ORB>EVp;'vnN>6K\q_4ٻNUMړl%[._1ؘ%Ҭ4HjwyevhDjc0]8uɯ`b9M&} :~z鮕{#ɣy,ZQI>`>D 6.VSo0r:xk|4΢GY +]wcީu]kvVW[=Otw*"$;w{pK逖#㣏55RҼږ[&>6 F#_ -Ԟ{b=i7fއ5zԘӤ- y#tbci40-Ώ^THYm}%xͺh0A:]T9[Xe7JTMvIB:w؉5J@7 `pup&9ad S( +b1%,hh2zQ+$2%l@izɚϓg%sA8M)= A8T:XJ+;G5to D+w)u;C`~L%mbG T\J~7atꩠ@ϕyqe~-n?%üt*7b{e(zaX ,[mY!d ]7ڵiG^QvĽ@Z:3&*@~n1z A2>Gԑblq⶜ʫӧvvImjoX6%Ʀw}]>6_'V,5ߨyOTT-brq&6ǐ]&3N&`<vӼXG M}Bg"Mu|QDƒd.Eb=D$h&0k))Pwd:6p +J.>rWri8(P||nnJ mTpBGLfJNUB-yɘJՙY~_Уf slE'1SC:TF RW :pys͜Z[Y @==g~6RaW*Z@[nidɲ(D_Uv<a$]1f I੔L qD ˄FߋПśGBt+( +I-_>xb!H޿9M`챓O:%Ig8:!zPQK~If rq5It{⇓DJHSuNf.>Sv.P6)*COFsNc| ɑqji{t΁qY0dbY3BY%P"?6 +}FrĘO-ePzA;,d-$Kw2j +eX\kE*2(P_?f Y=}LOUQßG] JwP5zBu9C$9<3suҪ-K榖ԢIv#Erq (Yܽ6^!b4.U1}`Hͨ=:CyICܐݠoX۹r"CP]rvw2+62-(1Y(_2Qi:m\5p= YU&xZ^PQ$ETdS=PۆL|Wk酬xaW|eVSlaU| 4ʒT~Bxlb4ۆ%+K,aY3$rPq/U2&p, Pz`IM N="(wqmBHfj +hMA`+zxm0% hRZ֡4A֠H0`Bb=,2=pdM.l0/mƉs ?lX_5aXX bijMqJWg`Ko/[=̳q}bG`M^ogLx~!qWS7r(Ro= +((F5|l.2@gP#')㓗YNSaK7W}&g +9i%Ō5"r2aK GI .Z󆛾!cly^ȹp( >b ´7)uv5j*΃n*RPvZKI@.wh!9>xqߊxa.]?a}3\W2hYKO$AU@VdXV?تI)4^NŪfpq+s&s}61{HNC1&=~aZ$?1]wOzR?~ fX"2O/ɕѠ;Ȅ>0;n`!Z?g.hQTi'Y.!O$8,t,~B(T=_5_$뉩9k*hosQ?1aLZ:9C N+S8VWWE^H;&R^oJssnZxemq-|2j%ANݯgU$QChk5-ʿRlmgǡýߔM.H +~a 91/#MMSL_A0It_P?+4lĦ:ΊE83$O<3/LJ:ukY'? +gȫ ˻)Q2(|?#t+G>;0O0N ]It8C 5ۢKtA8|C?2ఇIDL98Ta-\~E><&ry|kVqגzkΡ73{0rċv +̆1݃ԑ,oZѨ!A*}j|9 + /_LzF? Ɣ..Z +O1PZӌ$|!}LPIZ80vA +T.rdH*% )IZcqC-):A$Yłgn6gaXOr)Ra,t{@S j"ZEUY g7ѳ鐒lkv9K5pu# .>DrnԬ[{lOT +hη¿ +d}bJDZ.~X] +OígA'XMtRh1QJ"(#T1zag}x3kt1Hu5bTRP7Uܿ̄밫g+ZN䀣}˿awi#a˓@x^ +!ybTݤR<(" "kk5tf6H*6N2n4|Ape+MVvEM/1cJ6taS74"`~8S^ۦrF5Zd,)BN;SA࡛rt"@7ZREf}|ʕ9 j G^$Eg&QQ CaLs1[r {.5ƉTs! >l:,j$ʹpBj[66࢓J 7 4Kn:Ԡ:E[G:;㸅ڇ3RrCXɸfVȹ"PA:U4:70^sңBQDE2vޚobP%s82qdoTO U +J_ +yIaٱ fvFw~p!@i`هC' +_ybEs8ɯY Vn/`>V$\~]$X=K>.!)|RbW؞`d8N.:ȟ-" 1^?;Q8WbII@ C\I=J +NB&&^Q"LW 7:Q/lVlzgR!ƈ)07L&Tp-}4<6P9#G+ P!nH_FJ ->dcM s x!3ma SjZO!uAF, CS@#ZZ"1&@Nߐu|W;r .>_2ƝAwV *2qRٹn*h$29t-`As$ƨ>^tƚ:)+K>3%+븝ƸPK y/h B: @[$~j{:e Em~@ȓBE L֥Ɵ[`Rp.,QKgj.޶'ц}zyS~Břd4(5da<̓ʒ3PL'E5Wդ[qH1EjU[&c~98U: 5b5-c NW@$#ZTeBE;88YԠRJx7&4 "n@J6h![%컿}^G}G* ]e_d#ܰ3QQw (z3-?=I+or^9&̯N ʪE҈:0t8Cx:1/fO᧰ezjꮕR)Ś]U S$}zȣoLH5a{AɏQnZ1JOǨ"Ag^NUotӕйD*  TJ_&0Jܢ1Ԃ L d=ws$_q1NWr neGKu1Бȯ\@"/F7|>R534Atg 5&v|Q@3z s9\nyvnjD_vj`Fus9I@JC]? 8<^Af];ь[LÀb*JA.\\=PPxesQ03 xc1p9#Φz4%A. %O -Ihke!yZi6BT%=N[O?\鸏m;:z{':`eϽg|gu|/47\A ɝe~)٘ȂUR!QQ`[yH|0*?:y/4ũJ(|5^O,MoU]mc=UBL^FР: +)#>ރ 1֔uω'nNU]%+?ov EP0BkCUDv%} l (mX"DH'Gs p'@;m҅2\ S7?.9R^ueZ&Dsbƭ1Kϼ0 +ڀ3nқ1] g݂ѡҗї>a%^ӌvZ%3\7!o{%Ux.b 8P=?U7DtԾrqNЍC,{3Jr꣬ q㭝pS:qY ᓂ̐%od s{oHބzȥbH\$ |9}RC|nB +3CDa 4ѓ1wڊv{XoBjqߨ|>Ax$9Dj4ulSPG0\@QM}멛b-%S˞GJ|wKQɴz62j[K]mն>wY& '- 58ZI .6 }l1T$_U\a(lģs IN*w*TcҬ$5f]َ&`lzKMP J;im%צ U6V!}uNbΣq|Р4*qLJMIt oj^2 6%K::l'O= FN?)z,>St:6%M`w*ʀ #Fo+_Į6IPGգ|ƙL# +UeHM ;pn[Qt H(RYjF@ZKnK)K%ki'"$ 4wc~cɪA-T-ݾI?fg$+fDS6ؓCQR66V~A_9&Ȉi5|dVo+Ydo97$!_S_鑒WLwE)uL(~t3 ſH601e)f{+y{T*m?Sa% R/Ź[6;%Z\٬ceqе$o}1gܤ~n+5-uBl<_YbXjr3FL0F*)WPg QeoرlHoI_B`m]z c,nz;E;\i>0$j5g$^.Hc =`h)e$bE<]`Q&ScWV` [u(lJ;wƏDL,i+G]1 )ߞ 0{ g$*'|gcjN 7;%ߴd=4{cgzl''H3LY,k$ 1~ԅjOf;`|^1j*=ݕi_$nHͽ%us1X85^R6>mIerE < @'[}祏I/4>(Ԅ:o+LK 9'Qܬ$b0ff4{lSGˆZodG9Jᚤy2Њw=Lw|Gq| +endstream +endobj +2224 0 obj +<< +/Length1 2854 +/Length2 29958 +/Length3 0 +/Length 32812 +>> +stream +%!PS-AdobeFont-1.0: LMMono10-Regular 2.004 +%%CreationDate: 7th October 2009 +% Generated by MetaType1 (a MetaPost-based engine) +% Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS). +% Supported by CSTUG, DANTE eV, GUST, GUTenberg, NTG, and TUG. +% METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki +% from GUST (http://www.gust.org.pl). +% This work is released under the GUST Font License. +% For the most recent version of this license see +% This work has the LPPL maintenance status `maintained'. +% The Current Maintainer of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki. +% This work consists of the files listed in the MANIFEST-Latin-Modern.txt file. +% ADL: 778 222 0 +%%EndComments +FontDirectory/LMMono10-Regular known{/LMMono10-Regular findfont dup/UniqueID known{dup +/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +17 dict begin +/FontInfo 9 dict dup begin +/version(2.004)readonly def +/Notice(Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).)readonly def +/FullName(LMMono10-Regular)readonly def +/FamilyName(LMMono10)readonly def +/Weight(Normal)readonly def /isFixedPitch true def -/UnderlinePosition -100 def -/UnderlineThickness 50 def +/ItalicAngle 0 def +/UnderlinePosition -167 def +/UnderlineThickness 69 def end readonly def +/FontName /XKYJEW+LMMono10-Regular def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 65 /A put @@ -31993,7 +32023,7 @@ dup 37 /percent put dup 46 /period put dup 43 /plus put dup 113 /q put -dup 13 /quotesingle put +dup 39 /quotesingle put dup 114 /r put dup 115 /s put dup 54 /six put @@ -32010,124 +32040,181 @@ dup 121 /y put dup 122 /z put dup 48 /zero put readonly def +/PaintType 0 def +/FontType 1 def +/StrokeWidth 0 def +/FontMatrix[0.001 0 0 0.001 0 0]readonly def +%/UniqueID 0 def +/FontBBox{-451 -316 731 1016}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{=מ0).|˿!:[LI0lr9G$}/X S`p*p+fwwFGO^ȇ r+dMvNy{YK[z[f -ܷBDq}M8|j${jpxxSƫEu -7%ɑ4\ 9b \)[FU.q4Z8KzwwylϦI5bjcZ,7ɪK:#@Jd@ѻFM_d#g+=>ZaWNH5Y/ .rpf{0D|6@;]/h|.RAɰKml^&W܀{mFՙ3FK~I7@T7AMOP.;ݐH+iX;}jYXEu5ǻpېBIᡊS 7pQ40cH4u[ wYÖ2[tʖڣ?hb*$ -dƥ`$ P :")|UƩfDtd§=5+j7%i@)шT/qUF1tEςҷݢ@ Ѣ1ãF^R?-¦q^!*1gw24/3@\7zaz1).ExY'Ȫ5Fc=nj2cw1 3bI]y: f֡ꋓfg%p^`('m K'K '>EPN,:M{S3G2R@6\?-^X'F.qhYlawNUpͧ`M9_Jgbw! ̼sāTҔDb:Wq!]iơw`褩'`h^ TTInHel䶢͒à`じ 'p(=Y1UѬ/OT -%`&{(K:.CiK9xH-vE4x_5叠ٺ,dl5'bbq,H. O8 NNnZGquDZMgd/.o~*ĽẾʿep˵ -1}oK({AsM`?  }|^ڧ(1vMXAj!Vk5=&Yiw|vCPezFލ`FJO!zơãE.)8At`+o z`!|a*dU ).tIhq*0q>NU 3ȏ7Ā9Ot[3|5r0p8ߕWqDLŽ{`dw|ׄ GJz/H'Z$MΤ8Z̈<7{LpV)%k3ToCn}4>ZrȰ{rUZ9EGu49>`oq/~x▏S|f9׬?X.uBxfGbE.wW;o, BLkkK{9fgg,l|&Ma*$v#ܶ>7Ucö'nNЙ1WƫV Nu+947yG( "zoO_|cZzB@ZAݾ@aexb?>"YTgBlٍ9UFJ?"[p] phU8Փz޾L?:K;W%X$؇:b9pF^dBJR(6[-T*4!yY`'M( MPA#fT"f"?eX&RE ]2L6 ?h)8&/Baf!0tM<ŋX0z1$6$}W<1ji76$4e L,vΡTuQo:=}E˨(S0.1) d#I;P]ɵR蕺I,"?bB8|GϞ\;H -nc2߯xX1!?:t#?%gSe[ze} h)D j-O6vzu@b ixc`r&r Iڹ_> 1SSdY$`)­:] R]FITkxjgbHd.(: -﫜.%pq>>^zx,{^c]r6oެtHTC O;q]8$yBoLr {=f$' F}*%*tdsCNzc5G~¸e 2d]bsz':aWA>4+ -5u=JTH8Yn{-t}PtJx8R.\{`u[%37\rnNJFk Oj+WesMV)JYV˛81d#JL1?M?"śbQᄍfcӟr ar4ד@dv5꺜5eDfR+c=PisX8mm;EL]H|S° #ȿl S6e!3BYTg}TTaΈfgX_+t12)A{ߨcװzP*Q˩SRd*lN؏bjɇwu_ŧ03_m=/Quf -'I N?qj) -ʎӲ+Ar⻩6&HДC9mr|7rG%:Jr<(gG^Ĵ~xP^KYYD˓"$?f7ښ}Xo3'+Te|7~x9Fʓ u -ih -9Nt9uicsJw -cZ|$C[ie ";3|AzFY4WSHʘJ᧞)~%b[O?;Rw߹E5?"W|;ծI6X'\dKs}2{QA)wJtXi3uR3Tq5b|~<27bA}LXO6/'`:8gI$G,M`y}Gꦜ?)c7K !8Bʽl. ouv -KS?0Z<M^oE "1\eάI SsBITve赡 Rkvl$|i0qp -QxroHQvzŃe4`eb?V'ax * ǡ~MCC0"rsSC=y [^ՔI1d#J9&I# g߶c*B+FWndM}RYubPvc?_gMk5Zoof~G>ص͈,gk]E8?`aN/`p22it (/[@|;C]ar6X W,COQY``J_Bhq8 !;.*ĿLMbMKa{boKInUowg3Ս|Rq?'SoIV\]iTgȋ[_Z_j5'N8wM%+E:v -"Ӫax;Y `m e"bsiq>,Znè3Œe(go =$Rܬ'J:cj3f2 -N:3CC;Ov"<ȳA?9=ԇa{M˻&}Lnu4۟V[+._b$t1.}c{<0PBW*ZCƛOS 0aS5Ε-}7-*IC{1ȹAZųrO(G n69i5bDN'wL ,j"WvyMbfv&,ՆHѶG[f&Px&I뤏i=(˗z:[} $>]IlvyPd[tzw;hc9X S8{՝YJ4ks'$r+t7))m&LWQ L7)g͑".f E* -M:7jm !'3x<[r n^s:^M{9Eŷ8Bt,wv0V\a4T2G+F],ٚ]z~a1CJUs/ 'ګœk[M#I8ߦ)qU$rCO>ŰtM>IV&Mi`o k P^\ m"e]VD7u\~&bO4tޡKLԁN\-vaKD­~2W^"ቍö 8YJBX5"żovFv$=M }( 7@L&5|L.`A@{hrYi(n$weBp{oǔԽxM}T}Q4qvBfSDtQ뱥ty%ש &[ӀIB|B8LMGU "6 F#_>,omq;Fow圠GǀG+WХᩝQw]6:lD-K !czsVri)t8lQC+>po"ٕawCNn>n&Z*~ Bb0mUsQ_#25}!PrSUjISDܮied;#>PU^2w7yvό!n{Éa|˃{/9L0P+%[s­ #S_!`%J/v8GXv@;#b!Os~a45L9߈6u&eh_Grpdv<J_?q. zdyo(w/EU**-| XL$ԃԻ`z -#n yJKt77ӫ6bk^1b -y:M_vBnQVEC:uծ$PO.%S kE&H=<ƭ4iڭ07L'죉p;;IXb[-DޣCFiµXlhli,漹-SCe`EI`qvRMS@+'>QeYh™@ wuJ@]TJ -WʀNqQiS}Qr2y]XaXN.8չxpwx4jOY ԫDwF>߬X'4կ֛B2 _n#.EA{S*scS -\mY.n \B2EO<_&6 CN&Y21h I-ĬD&q(7q{?:9jAN+?>~xrlt(+ŚР3Z2 Jv8HԚxQš>w$+l~g߮a\.ڂˬ́s ;3zNoPJʤRoo -恩 BeŌCD I2ܷ$ꤢt#CW1L 3a\۝(CC@ -HjlZ%$*GLi#*5 -x*z~ r9Cˆt}'hg*6 LWM[XR]MC?+kE!K,6T 姏ja-C=m!Nz,YQSˌ'nF4M1CsU2jUxE-v/}%3A-Yd,0N ^(BPSi9" @CE͵Ύ:ߋo|؂ slR-~5ջViQÚxP 9@/ CNZfh!QvK+ZxSV%yIp${Xt۾Z*Zɸ09B+aht9c)Wz/^ilYogk(oQ4ȐV~2>eS=jH'Q~NuόQQ+X H L7o>}' >.~Q1+%cϻu ݽWQ5Cf?Jk!7#'N\Nɹo4,r詁ˮu>\EN"Ȁ2С6IÛF!YO#/ 2w0e ٰ -pE4SgGT"`shŴbש/0;mTtѶPDA; P'<)Uaw f]XsUS&݁]g 5{!omT+tgO<={=1Qpz/=>J2/ٳ [(x/ mD:_EZl.ṁT+`*AAI&^yޝlCgl1#;~0-bFI\%OIr{ʭqe/nZVDI2ݍGml$а }pl2p#cu^SKd=&wހ6_<3m[!`AA@DMݣiVjj=PMиN/#/A? ͘[^zM ż0n -:ސ)+c;fN|GQޜQ3!e.#7%:k(m_@W :ZRCv|h[ -[->#jmd}\.Yӄ60kf%^h7?>daXwLr$w3]#2E2hŇR) V%dz"6rGzwvWJ񈡁/7V Hb1{~wjɚ$t@_3W٧u*y3@-9juS>$Pf s>5gQvW\aaKyL,]f6>Qj%[Oq\"yIDBfjg-(Y&tֳC`uw&Gjl4ǧ٘7WvN5NnmRnZ[QR:8;rS+MV\B2 &JАM=R^am!ޭ@3Sѡܟ9`<&FshpREVWQ]ŃpHH14Hye/}z` )o V$r|Wt Hy:b>]1#W/s-~*&YKc ΢U^EBz58W5llT=.H«Ӕhqwyz1Y*pWP,^VJٷh{_ ?@șN!4.3Xr%'9*A"J߲@].oXc I 1H?Y,H9Yb/ lRycЧ#$ee1;]k͛W9URS+@s -U{dhPn;u1D*+lD7[($שj?*(vhoޢ[/aQ1Ul*;B$NxQV*JˈcxF0J{OztתG|dX̹8*fEL=A91[_U#JA@aKg}'ZEuCX׮% I8pdM -9{{jpAo.x]|$x},-tJ| |ڗS0KGUY"?DdurO uO@$>ѷ]\H>{*X`"gˬDw޵VzZKqH쑞&\ -}<{Yp1Z4JՅUw.t00s޴u$cn-uCQh@x`reHP؉1a9Quq]阏<,B>zP SuQӁ'n/3LV-&'ol vay\}8,2BUSһ 8n>1HaW}$/$,á%޴f*s9TXJ[\ +U&ak3i!$p*gL 䗏/pw@V 3=,TںmcދN.4$ŽVV76n3:S$f/ -3Y&0h82NxjcS$GcҪY.yiGC?^b^vsx| >ti1b^><ݢl&8@ɝ\]ޱhf}%DH EAPJبɃ8t߲Q =HEcΡк(ɇT`P28I^.{WhmKX%BUwo/mz{#?)V  s+7y -gh$Kq|٤c;nB\UtUI&f}^`1ǚ#Ñ~cA,0pWg1=DC2;+o'}g9^u*׀mJKz;Jd*:=>jE0^sDHDG2̍xJ#O:'J28ˠǺXI t[1?W<>/i$ asc-8&jlR~>n@zB9aRpXT ^Jp4,95[~ʦ.3g_°~`1Nq5 -eC;#g+ DRraV {L*茌ȱ,r pX_X1SvvԊ9\ `-NLdZOTs*Jg'r318++g,@dr3mzRV6 -ENҫs53>.F!!`h:fbE -I_+q֧9)jzuYk˭O+3N~;_/CT;"Y&'cA -3>1=0ѿ|mޯ gY"TjΫ}Y0y=|~Q( T< 7ߌ.Ro>`Fy?dy= -%ѓ/ٚ3N9KU[ޡ}ߢ -*zf| 4Ҝj_B c_&DL,@Z̗ wg0?y]fM -'yjNN[QVHjL4ZuQae8Mi>PDMX ~v4XAߠDž -U<|>tU ֳ?SNl=Q~dMļmh٘d_'uxYb %ih5V16^Ϳ#CIV%K>PLTRxUkݶ}\7=+/CJVd5XjG3 b~=FRik0HaC[x0*y;gŹF)2Ŵ-mru%rA4`"}w;Q -j7eƻKr ;ZiYpF=Pg)K |KJ%4*^b̈ EdfşZ 6&!Ѣ7~ZuwxЃWuceo=]bE0,$:ۥ(c"GUf9CUpB^ )]td֬FHTr4Vc'"ZP"Xndn0%DuZd4"E`Pc ~F1%ַZ/ wr,ukiø2CmAd^a R[:@nRSZxDPvnRr -WfwHC׵>[B.ߵw0?oCˑԞELB8S?FDtsڿTn+׽EeJC.9H`~$;`|-G,'湿zhGoM崡= y˧sÑ;V9ݡPIoY8} 1o(E' -5hI]3^'qLڛa wc}$7@.wEˢQu ՋDd~8wmu4w­!,նsJ bnV_ouQ>gݻb!?Ԝo~]l%d! ~iպ( >m NF3.g2 @ I:DzN_T`X^^gMcrpF|7sT| ©zHƪ 1ă00qCޣ#S@`-3ՍG1?p+X zfi\%#[l+udz$kS)-f۩|] OTJNd̲*<݂*`v7zY uؤ?%:$v8KPdW>kT{YC= -,eƺ.70q{sSKyeWܠǭ1|Q0^f=K@=}&l/| Qfs5F83ʦ/TCXU+ 0tܒq. gnIJiNd?sΔA͒` "/Ya'e^Й%(TZBX$m*5pBN۷GLfF cج9/8oWOzkx!xAӇo;kP7_A;%1:,cz 򱇿 -ad!oEZ]9z㹄(fKGQ0 tIv`60_8x1Pwq61%.}/idYvK?ދ@_cN/W^T2ӥJ&z2I@jNG±):[ޅMsuTFR˔'-VK^*6Ŀ7aTbަtjÅWV\8vN[9 -uRWjcp00Xq-ߕyVPRC7XItEZfTFH_Q5YذNdfOSPib]ZjL%JMDX!;r)#sGw6⹑ۯ -c6E@hN -&c1WNHZ,9kO(/c/o6aPewcW͈8́z -Q%? -ˎNh|W+@4yקJ,n -.Fyr֛t:iIuL*nOC|e!U0@7Zxl֢kh!-'`RcAlsCma -endstream -endobj -2221 0 obj -<< -/Length1 1494 -/Length2 2555 +oc;j~EЪ%9.>XJٚмD"e?&oLH:]~nX%l޹dQ@a~M~EA˟V.UM؀")JY4қ UC92"\ܡw1rlxнtaA*`JpZ+TX{ԉZ4 +3<@Rb[silk`Lخ_/{S&QR`SZC^鶃?\j!m,jk3\<5](R_4Qj|64CAt71[C-#׀ȗ(PNGFa|spam6&b 4NaaמY.͐! +>\rnM0/T*fvXA္-wrO +Bg(JCIeP9zgV"zow$1=VXqmXNkMv!:P3wV?Zd dCB߻1sVArXUɫl݈>>;F4ǤMY]W &R`92.:BB:?҉s%D7Κթv(O+}8<:Uyky +eJ&^V-/gvDgPg ,A*-7pS+zZxU)\ADf}مe_d#="RXLvL3Bj@=$edKpwwF b|3 e\`Rt?!dkb;^m;pZt~ Uhm4]M1OS n$zIΌ5 6ȤZ +Jo4!"Ĉk:=*R~z ٷBp`,6`CƻjӼdAw/'NŬW#?"b-DHԭK}V^MtOe/  y_4s z\gPn@݁wwy7u Qڕ6 W.C*I;%EE|o$Aѡ6x +_ihA%fGmTaY\8X!f=;b'D %q-y<4gY>켙qZsr뇙R{MWJ@t$䎎{~>.KsM\Z p5B_:Yg`̌ ҫqă.S+F  B ,דcYhwR>O,+fK}|Р4*1:/ +ԝsI,P> +p1#!' 4wP91HGPA,;G' ŠN\T421G9f&K/}#XFDĖqDIAY%A[OuDTDh۰dL|*SSv\xt-PV3*5#T+VVqϮ>cוЙ2h kcK@̫aH0:핤>Ò +RS.+sz%^dsOn?YSynZ!_^)LB[TPxtD;9\w{d\z(fD>lSW "+loƛ|MD}DZ +x͚;ngK4"3=nӴ~fz6?&݃Z,XB%Zmܕ2䨉 ss[`:OSOb_WA7⚕vkɀw<@;|I(Pd!*V?ho0Wy.&-q~G2&KmShJ~ܵxMmmi|\'] A׿ц؊}) $2`%䖬T QԾ h +_NdP!ɥ*G9f4y+3Nb|K 1zhxyVӋ:Y,P#ge׳ ' 6E6) +;usW`v'oaVM DڂxLȃf s'3hjXbK|Ф5bV8^{5{.z%q;LX<uZ1AHœh&5\]{$+-2d`&9.Ͼ /f=B UmպJCεĽRxE% oMsHMofPYkzPAz}ԭ}|EtQW]=1C/]L1 Pbn?UAه nҎ&GmlI,ĨS}ۄA75b˗a5aR2DӼP྄CXz8R lTjI}!'83J +1]H$ +lĈz`Dy;mW/ZPf_wm/S7@?*ə,# [q j徛oL1@rW.Scj5/o8cĐ(k/ݶPYM9cfE*`Ȼ62* +Vckb8xf RZ1A' .ͳ~-KO\i֜[;.@⯂Y'U7.uWYu?KWwkĞa* ՛p e`G~iJ |n_GΜ>sn5iY29c$dL. ps1}yll'c&WLU +L/9Acex!tH݉ cֵpeW1Jm=6bPePW[.~0`&l y\Is5=(J)rJU/n!4-g5 o._Kh.3⦞YuLu5}No;L@{=x0 ZLPdJ$+B2weU`+Aw3O.WHtϋǖCAvG &Ò"2m󠳾unqٻZf73ұS[=*9qlL̢ ӤbIGܩ~(~69Б/дq 3y~t[$+4 N )(C,YÆ>xY֌ ~b¾]H/VCZ57nVGk4O|[}@u6[ւ`ToRu.͍~v)-*TFa ,\)mg?v4:2ϯpCxL_)3]ƒ&Y-c} ĥ+f3ɨʴvcU*A[6l8f_K7fA@Ǎ=ĔE +@<@bmnV<%s,fa:7:Bpxot0(IZEmˌ8Ok&/n|/60>_"M-Zmy +eC,]OFŭ0?ߴX;-텴fLR ڻDR9L{eO7 +Eޕ$$/(4GcfM}&ZN֥+;{%.Iv_7|Q9*"DU =ݼ0)kLVbcֵpeW1Jm=6g!C z ͑".f By+kzK+׊,(PL ?F{3sF'Ŵ%실Y U\.K2H{f,v|]ߓlcdx'o,<ɍB>?:-,y: +%-7#ܦ-v;x4LkMɺ2=_Nu3is[6S -o si?N& .O% 4E44U 1 j<H6!.)b-ҷ&yЄqkFGJcoڹc!1OR+M;nD%ъloAG/7DP~&cfՁafUaHZ*ЮMfDLa%$VU8Ά͛2V8dT ({Ė֪*/ĕ|z,-Pp:R=o;i0>#vN]d *JZPF_XZ˲{v`i5RdXoLjyf--/x^ iBE`#7ybyua3Xb&ځ']Y`;5cf8oSu73qt\ػsM- WՁ CU5<6  _p8D E?t VH_mH/"t{d>\4ZO(?qtX>14FO^mD.}X +` +#\QZOh9S u /QuK>\X|aXF6n1MinUg*ڧ,69xX' wTw:/Ko .s+t:w\ >YsS-ٯ@xbl| DgCpqԅvibuƐ yǕǣ nPӋv;6ʪ##Yb(R8=JУ4.fxCjiudZh@'VA)ҞDGD塡\v@kcWdQDI6ydig>uw 1[ 9׶bRt IJ! 슎OX0Vy,Gս4R*7MwCut5_ JY) +;U/h{( { +v6^m{,qN7vaۊiALnܽuTZs.'mz݄37[Ul +_t?ĝv7JJH,<#ZY{9𤻔Bn]'5҄DD H+$iU*@@UԛM@%ۦ|1b?9j!NM-*SE50O]}_TJGV-mFCto(|o:XD.̗p&(#MM $! ea:2"LH"щn>-A+p:YW +iYTGTUb~]An#Gl\9j/*oEx'c[m\fфpL4:É%C“z2|g:ڷ6)X M[OCABiz>(Q{ HR3T(!c֥j;Nŧ&6itސWpM5W8*ٗ!V7m!pm&%+ʗ ±*wz.{K⨚-ҿƳJܳp(<1ak*w0lT1H.HͺァQZވֹO:([ RPo卝w 埭QZL &Mkd7w TyHVfyrp#uh<]HYHRWc1{W[vJOn/7=i1+B(%89--F0Cw!!g+W(,ria,F=')|AsGkBV_uFe_!4bUFhxT}8ߧr$7HRDq5BDf-s6]aUy*dRwv>bx74:a7|_]pEe,q2qq:i9/UbbXBq4cQYq><ː^3꿱V܅DA\0dbY3BFmiII!~7AumPy}>fv=Yu(r`x\:P]O,A^N8U[%{>[JVL>7ZW,YB:$1?38p6k]:; @}ƻyneM6N5w<3dq^cF,=1^gouuSJ07bGV +,`1 s +$񾫟`,@+4mDJ̄^_VGov'⾧uKL9ot.Cx!~QjDѴWɝbLXljҸ;RvFVœɃ,iȝðU&˙!1eqc +2֒d8: #mrُ u1kHe,aH\&af8&HQkWk3nWy9@~y{!o$A߁d>"$ˍ<2J+R(ػ'w{H)a,w9e֨!,`)BF8k;e tz4,M6@:6#86Q;? ucM%{vᩮЁՍ2WBK׻2vF4'ͰoccIB5>"ޡ( [0M2;'H6dê:*0CUDlu]p^+޲̿nVjTKrlC}=/3 +S]uk#rZ_!.r]icB{y!J8>fʈ(ͨ,XF~2*fL~os Ȭja`zg ٖ&?"l_}j^Eq#l^%(U35s)u-ZR7G҅󄋹/1dİFe $ ^ZR pz+.1oֵ%XД(l KmbWjV!۳V"1D}`F`rqTgVn()wC1%iU=ʄg% ڗ]ia-X'm|{hﴼss63'DRv0s>Q$ͿsEu#!@^ճ1 0Gr}5 ŇduKwMޯ4ds @׳ѢzgjMőGqقlCWqq##$UMw;'|(HWB*.=f9o 4?].Z7ltB¹<Ũ0sY[(hwjeU+Jq]\Wϑ/w`uMΣ4&rVr ldL:Q"$ˀ#50SӒAgi[/S=9:Qր!ɂTZePs_@6y_̻{P"Fe&d| TzXw͏cnv$DήfG2kc7NaprŦ6`69ՙ.:&td? ~#ŝ,V}d^ъEg4p9xAStW[*Vy~W ո(,i JF9vYoOSB`Yj&uK [v>*p- $rɅwm`\(`xU6$ Ywpd7o3AЙbdrIxcb&4Y{+#Ag=5畢!.m,teܝߗһw@PsЀߊxb@3qG{:rŀ!3h H ";A(EIs(-r^˯{8"\<5IU (B* bw T~d=f]r]!1!cFn(Tww}b̔΀OiFpVZCftڤNx(QӮwȁA~/.FkQNIkpMi((U 0`V94 FV&~DK +vm 3M[2Np1,) 2sRL2x/Ű+pW6a+2Glò!zer/ t LVJz>bxEx[޻㨬4lK&CddL_ۢʪN&BU7?J[/ Pt5AS:\5<Lhr£pi'ģ 3N|vok+%ðlyq謇5(z2j7̓UPY0T[co&kѲ=pci 1Ƃ٣Y*o6a ȷ0$}4]Q=";s{~-zQJ"og pX+1s2TPnTC3I1(+半X$r"ər¸[`>:9XQ6mmY+{2rxEq04-GǑ|q鍛x.HD꙳DY翂Y6nw_+߯pW ŲyJkbɻ'<>rc6flAV%cUݜ!g8IahPwP>Qaեhx +H 'r]=ZZkÙ^%ٍs."y%®vCkx +95]!JYe[B7pד@=pL3\A| 3T%'?=naGpGD"F'@Vj!ρ;?he|(D.MT &JD1Ch+-kcAgnoOb+Je;HL߇ǘt`'49lEzAdS|fGzI>cݜ[.@R.D θe M.Z'HRE0 [s +eϖH!/":-K C`dӪ⒎D=oipON;7q v'g#1'E(pqx;ߧ{tZ x[~e˯$+N1*GYG~6r߲;(D1XkEL0c&ydՌDT2"̞C9.K^:gGH3O%S3y+K8]πГ]m,=-0v}VYn7} hK..٢HV\E0 +Qaz"6P]6Ua-5f~r[- P^3[. jyXeTc9lNqC˜翴r晪?+xk*1pߏ." U 0o+ 3WX}g+r{Y}Z;ll-Xqs>I \ތ23…`XufI"czqa-ך2?HW;).bLmS#?ͺ~w~e|㐤8gnc!Pnscur? b]t(nAIhRiDL^wA|5+: +ŧ"(ۉEsr!ՠ +)}ff*o]y:CLvR|jՀ@F8DU?QfP >EoʝUxcDP?8Ki6nC:S #oP$~Iػ~EgdL)p+mƩ85/BD2+`SWy`+; Ï]P~yQqQfH)Hxxmu,],CLݻU>nOdvIZ合ht#r8*.W/fBCݏo@4ƶRN_pI;r_8Rh>gϜW^pºLU{VLJm^zC͑{~\Iy&s>kr&U$8˞FD9y4ak:by "+V~'7{y.)j%Un5dO\m4VrZKUqA?)0%lR$"dbc4/ӊ Nv#*irv]UID!!10>J\ݕiw}9 WR=}}Ey 횦)'Oxw.n8nyBI)*"&D_Tlu!L1ȹȠrk}"=c"%B6nˁܒolY,-2{dpZhd=cGU.i( |t.`!מLnSَf磨섹Z&4œ(+xҿh/7KUƨQi~m7Ԏi>5NT9$x]"Fm[U#`&Ž@C3ZB'ŌDSXpfc.™CQRo1KƄ!VCK*'Cv6i_HY=$ԫff3H8ĄN;Ĉ}Olup_"r}+TM0N{%9A]_F|2n3$&1ù|9fuew}ѱg} +z7W|}ZO|4?n+QT|wU9򜼄=~S +~X r1E'ͦ"ˆonX%uU Xg~ǯSODG5zSX5Al0H534's+)boC(s +S"ֽri3O`'M^TL/rYկ gGP, ih^o SWH߇ ti7l~$"eLP|fGTpi0޸"˪Zx L/8CnZKHcI #_Wy;liqHQږrCqw7s*/~~2R__L,@(qؚ031b*vYdbl},%oNO6IXY{#) uhu=:TiV>tnq%DY.O_(reb@7"8ӛ`_%*F{𕽙Yڵr<0i( 5ݿ9ňPIʴы/γWbzuci*c!jj+ ʴ&4ڱg}.>枂<~K=.,2z.1!Nb_BH]>7wZؔ쇻LEyщ> vS">e(va߬GqLF*K(b,0%uNӱɈ|x֭8ϷlfeLRN6i96O@I)5#$,YY3%'z2tjF^MEYW_oƲZ,:|E~.rҒ bGAQ])r3jYjkCoQW 7>NMkHw Y\KٿL6QNCXۋ.K\nRLO-6 ɺ*!; prц؆`^9>QXQ|e,$/ g}&w%}\|ɘ6;Wu^vOj0SeǯC{^J6b!߈!<|%KT tTwt5²yVTg]Duyɳt={ŷ " 7ZK7MsAs2h[RuUaD0  +M_kL51%g Js?3,eS/Go\euGVh'eD$Ny +@mY\}):{ȑp3~X´ |5Ƶ{g6: +JMu^ J&ܚeUzı42mqN+A +u,i 9!:}SR2sF%P>رTNm=#q&+E w l swGjGtYuH|2˧'?#(I|4][ 7@Wz!1!T)V~!8uAHzK(?%ءB+^o'4 ?HN;t5j!u2a]ۭ ֢g7de)I[-Hj2w~d.P4᠁΃y20UD]dBc3A{ۮ_P2aS"GW 6  Y[xEv-72ȤoeVjB?M&%FrXxp'4qs7)yci@#q`|Mo>] 5 =\y-n4焁 qcVhʺ~6guzڑL +t.m,?.?3z[79e? 8,qsDsmwIѶA=l!*]VMY?#\/d+em{^1M؏seYaЫ1~*)GgB(2 8Gό1(aq7ݘjsDY)kåac/S7D#vC>aM}pj0|BcnN/ +o%]/ 늒r4H44{!XyOG\QZ*T: E31OodɾVvjN=>h!*2BCLůώyLyc RCKJ2~ڪ2qHmrUTbbGSKVOrC{"nNP҂%F @$ *˜gX:][\Jzt֢)涥+(*UNruÌanȅ;6느Sl7I!1Hr{Ah`~ԘֶRhr!pNJ[iouGwmM!nj\Dڰ&*IЙ`vb=7|3%CRqJI*!RjH +_F(߇O;ǹ +D;lB;qK֦u@_[V{Kpb2'I%s۝1!䤗{U$3uJGU34n+XaV4:MQ +qe@Z.)Gz3 閺̱VC #T][M\8Y /` 4Dya\/5:Tdͷi`CNBFK|uu.c&;L!Si +o!Ÿl0t[X 6ݴOSis& +N̲o^1[ O~q0$ݝeH7K#W]3A's2*~28UIR1ɩȩֿ=/L ^a?t{k(~=Ȼ!׏2đx&D+lGq +u]&LF>tԜ0a*2q, |CR;0̦Bi +} 8,ɒǔv8v kfRʫ6ZDΓ\15D«|e.:Kia*LK"h~ęmJ=eO6(x&$]9zyveA~).ڋ\xbuDHD ~ܽ{SE=ۑgB/! ijEP{dO@/G #\BVv^̴g#:.\!PV8 Bw_"D_ iv/0}ɤEA5?6R.^iGdY+Ή +l2wA+F!p묹w,1ہbf41`35 +?t"kebAt-N抐'哋/5Du ,8O/Գy6OEݞT¡%Ru{CHE?w옒;3{Ҋ%)c +|5`}*y=_y^@G6H IMLxM9Ens4|6"SKd:d>)2'd SDGWDM'ވ:(l<-e +rϱT7v%OSp? +fOu;gCӷ$]쫣SXCk&D[Htuիkj=< *i k:<%㜠T"Xo+ aռl:ۓݪ>گ,JmۛFtOW7|n;t54% 8Epdt*-@2 UM;5K _̤H4Gy8# +J?j:w_6Xb22uŠ(94mxy7H:"'?d[2Śb>%C# +yz87m2}+3zaĕ 5g3IguTԘӤ- y#tbci42ٙN2iqpE]#< + '?WZ`}0(7I収 >9,L=>֡jR'W{=c]cUnz;㸼z`N;t53 Dq'm[sVtm?PN%6;dl>yo gWuuK=dc|XəsWQן;/v^V3P {9*m+ڌ&iq!.D÷n0=*sDnA%\Ԣ𤞻 +سmᜏ,'liJzRW6M̅ʹ=;ho9Aib&%I:^+л\!OwQu7 qCKAɿnu_oWl)`UvLc4Y &~sO0KY~\))hFDF-"t{~G4$CK + 3Y돨} +BO15=HAϒX2Yrg2JWb+8ѓyL åb~'5gU?nZ]PBg+y%T[mh̉X[ +ʗ +-#Z ֦XVǙIgmk`jܣ5Z⤜ ̵َc-y16Ikoyop)DZݭfH/X:3<]KA>QbY{wOU؄1#UAk @΢wz{ +IbY)IcgCK$Jv"2% .gm^:ҿ8pIѾˌYv?%fT-vUlsBs@{\=FsH#k +?Ieg*WY9>![@景7[EI"x#X^%QdKl{]Yvf T:ũYqoqn+ORN'ǰQWBw&@s'Y9i.DKg?8Jz-A+0 +Spy.+ӌo[+ /SǢT ܠWO"zfiVD#ZZTpsS Hzot̽HwrI(!M zmY={Lߊ7"1r1D[&%>``p`^R hW\[P)1s19dznL`GV*}utn.s ʿyT$ILz[$ }WHy᷐.  0s[j\9BxCD]r+Kt0f3ȩy=mH[(߲3/7{L#E#;AI`k9_C_X6N)aQ`XLxJ>؋1*wQKo㼒'I0nxQb )7c1dkG20,?71`Ë< +<k5]53R_ƬۮVxO9Jw{m8e 3; y{@[T=}w(aہ-?^ߛxyrfIJJBWҮM\S̡ʙR$ǁD[$X-mךlui`0ZaW_bSR-J&%y_!>JEa X%~Fz +Q +6V +)|z`I&^SƓwLIaG$N')̷Nn>p%=EMK+3$UJ}[dEjuL?|XÞ\z<>4pĕB J2Q/ %KanD>coEZ%hU.cT|vHv;=/)RXRNAϡgNgEFvٶB3b\5pB._'r|N|O3.bɺEQ H> +ktyN"SHOh}/9Ϙs ITP"~6--ΐLe)3j5ZW?F +wtW&T'TQ= 8ciT8jG=Nip@J-x<54kGd%PY&b(eȰ&4njO0Ӯ2@j `5eB|Not_jDJpRs֝.광QI!Öֲ:e}eR#sP/5]"]8 ^p )ifV6F5eܘ#ׯՃ6{LE\{|6){#$YWlHwH68cmTpZǥдuRWw.Q- K,́I[ +c\2dK*6Ţ2_= 9x@ %)MOL-ƛh&j52*aZAASe{lTLCb*Ӻn"vRXDR^mIt0;DKQ !h_oIprjcժ$E~ >YI!c60tzb(Xh+YWQ_ZxL\ {mU. s+P Me Ԣ6_^ f6V\q[= W=zvssrk,B:Wcòt0bLq&6#Έ^&rTMK_,:D ;И찭[GЄBaFۯ8e ιtV2e'+J$ԓ>LyPp:9"q"nګ|*X?SjNlM)`cL7.ͯ?Jl +.a31*.CoqW.{bޕrM cIq(%`.ADcyقBIg?ꃑd"9,dV*xUw{L$tǦJc ] +!V䠙j\yt4-2W-%Tfe!3Vq!?H6`ϟ \V'|QZ4?O3ͺ)yAbj8&tL\y[z-͠\r [>^E?X,^ܼt,K?ix`˙k #U"$cp@q B Nq0W?Rqsp'~Zhm"ً_ 5@M? .*ewzߙ PXwqD$>F*[eS C_OaͿޔWn$؞PSǺmSs״~SHiCf*rM0,5bk0purV'WfTn(YO,bX'dǗ;@!,-&%Y鞙K,ՋC^+ BJoe )>v'Uۇ%UAGhX?ov%L[-xZf3,jt\ SOck!`!c#{|\xT dA70t3bbYǬ!}ê׮US@vc>ܮI'$8ҝ)(5b1ƞm;(:EPź/3(< (_¬r5Y1ڸ &3nRkf8̖ĀEQg(f@޽]G.o +w]n8 'atKI}&Cp߫PT'2v@e +sh'@RU3X˫ΑshwFÔ:ڵF2[~Zu%[RL(fU~fC^r r-+:}:]W.fmQ +ZWT}nSv+VD0kG,ʂkwy` +h@4 p1f%BGYB{GO&` +?aXîgHrdWGlM2AF<*bP@ᩈ8އx37N Xu"?EzZ|qbuAXBT2A$C{эh*,bM^a h)2*M= -ǿY4^`Ƚ 6NlQy i9'֪A~H$!&":] . '13C)ӷX$$ύ~#g$+/Te1!0BJT\4+q B&% -z[a1kDNOƘc|#|{a}N>F6! k,|h;/L+yS,vjb߹B "b3I\s/@di|wЩt'A̷x,[K֖3Lqp#HՍRV{%LQM[LJYʋ5f;7 +"odIH +&d_$T&XA(R?//Y @·5#C'rWVȠhi~7ʗict>C!0MB1ep[j>QIFPBh,y;tEKr6#uKR Pӈ#_5#0.:Eb6 I9a\$&t.KpθKаj{ʍŀ< RQ.O/dzݓhN#ŋM$}y4@uMT"1wGjS~CstIZ #uA8r{g֚`LH7WOQNqZԭP·= ~%RL@ц;ttIPHjL #OoSw~3C Gcta tQR"0mMvdq3")c'{F\h(vOc^FI&PާX{jdCfڪuꉴ VB;jdr#?%r,2T)bS9N@ ]zpm{UȑAٯ 8ey[-e)"zDm~#?lvO7VTОh=|lMsDBkjt!9vVˀ̈KW]k}!-cѡ?-wt6*iSߡ|Ɉk-S[Zo@_Ӻ,O|Lim>:Vf$g¿t,{` ڔ1-unY^7RYMYĊo3Э.Xxť}}qؑe)KH_U#FyJXZs'c< ç0Ŧ/yGa`ê?Ϣ, +JZR+/2.jR +[dXsF:L:lL,j|'79˵3liRV0":=jGKR9'N$;ydЃ# + r`m\J3%bdQ0qrB$Z$ZykGq0m tQWuG +endstream +endobj +2226 0 obj +<< +/Length1 1761 +/Length2 18831 /Length3 0 -/Length 4049 ->> -stream -%!PS-AdobeFont-1.0: CMTT8 003.002 -%%Title: CMTT8 -%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 CMTT8. -% 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. +/Length 20592 +>> +stream +%!PS-AdobeFont-1.0: LMMono8-Regular 2.004 +%%CreationDate: 7th October 2009 +% Generated by MetaType1 (a MetaPost-based engine) +% Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS). +% Supported by CSTUG, DANTE eV, GUST, GUTenberg, NTG, and TUG. +% METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki +% from GUST (http://www.gust.org.pl). +% This work is released under the GUST Font License. +% For the most recent version of this license see +% This work has the LPPL maintenance status `maintained'. +% The Current Maintainer of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki. +% This work consists of the files listed in the MANIFEST-Latin-Modern.txt file. +% ADL: 778 222 0 %%EndComments -FontDirectory/CMTT8 known{/CMTT8 findfont dup/UniqueID known{dup -/UniqueID get 5000830 eq exch/FontType get 1 eq and}{pop false}ifelse +FontDirectory/LMMono8-Regular known{/LMMono8-Regular findfont dup/UniqueID known{dup +/UniqueID get 0 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 /HZGQIC+CMTT8 def -/FontBBox {-5 -232 545 699 }readonly def -/PaintType 0 def +17 dict begin /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 CMTT8.) readonly def -/FullName (CMTT8) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def +/version(2.004)readonly def +/Notice(Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).)readonly def +/FullName(LMMono8-Regular)readonly def +/FamilyName(LMMono8)readonly def +/Weight(Normal)readonly def /isFixedPitch true def -/UnderlinePosition -100 def -/UnderlineThickness 50 def +/ItalicAngle 0 def +/UnderlinePosition -133 def +/UnderlineThickness 61 def end readonly def +/FontName /XHVBMR+LMMono8-Regular def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 98 /b put @@ -32141,57 +32228,133 @@ dup 114 /r put dup 115 /s put dup 116 /t put readonly def +/PaintType 0 def +/FontType 1 def +/StrokeWidth 0 def +/FontMatrix[0.001 0 0 0.001 0 0]readonly def +%/UniqueID 0 def +/FontBBox{-456 -320 743 1014}readonly def currentdict end -currentfile eexec -oc;jAw-24 WEvQC<3A2kX0k^|:ٴfb,|=sLu2KZ`3ndgRw@),q՜G<&h'. ΍883 ABAԾI$s@F25ڪ,i pK>6K` %E((bsP,WKT"0KDǯҖkIUܨf/+WN/r4qW@d̍OG|Babhy52+2upa,-I"MC㉮0גv\G\% ؊Z\+;7tamJsXPc0NqL%tWtį, );b&L}NֲGi$߲:[<+s\6qGq %E~@kִ[iYKq[ Pvbr~1z6>)廄\oxobBin\![(;"0:7w yqMomD$cqKRXr c3mx]FЅ4_~n} VFuM;[)(6!^c0?;mXBeotnEyx<Pq;A >O8}yf2rDՒ%s}w` Ӱߒ/3x6& ?gى.\YEII~:I`ԉlWI1{6oy"ޤW[͗#@xs*宓d4]'oK荛%~%j{|FA1@*z}\13%u}jy<=/ޠ6l@CC\+F!} k9I F _Wڪ+̚~"'K["Ş 4]#) l'iӥjI:]e '{Ͳ}|+nгΙY0ܬsdu;?Dz~!3ȷgǯ^@exVa؉HaĎqO*K{ډ %8;'FJ`K!-%lR,ܽx!z CB!1@ K=\ßߪb(m4wPZh6?@LC@8uw1rǿ$BKń -&̡Y5<1B dla;9^'lHn,W{Y[v -endstream -endobj -2223 0 obj -<< -/Length1 2299 -/Length2 13894 +currentfile eexec +oc;j~EЪ%9.>XJٚмD"e?&oLH:]~nX%l޹dQ@a~M~EA˟V.UM؀")JY4қ UC92"\ܡw1rlxнtaA*`Jp[KLI5(ڶ>HVhg!M8yi4W~Ή\ef5SDy/sjeXQysCrny,qwʘN>~:ބ98>Æ0jE ۸t=xqsa2ԅ)cH.#{2V#B9;TOz9RBѹ:2@)sUFE+~`Ncd`XXyR1TuGxei}'hY̰Cs +Eϐ#poyL0 !~D,YJCސ}rH6ӌeN ӸlH>Mtnc=,L v~ޞ( vw*B@nx̽J 9܇A&oĬߞIdyzzg NA +})/ёZ=qx +xG~ƻxzW5@CtվЈTG=ظADŐ\g1*maXށfR +qu`e(š"av.{L#e(vKL9eLHAkά&I0q\JLh(Y|o=6[aEfI>8ɻ{O*dofkҢf8VJ:_#w.yoPxY/T0R|KYk+qHfƺ'/,:rSWUĎItG`㚺 +IB6mz |r3|=5#y.E\!.Z&f>hn<g:7SЋk4ݟH"{ 1{ZߛCp1(:_H.VO1qB7y?Q:٠Zw7#HyuEAy$_ܛDC+H*BzN,vI Fl26-eJEmZw8!GagŞDU]'hjܚn$۲&v3Y s[$ Z*1u1kHe,aH\dlyB/$a JjjfSyAy[%:1d-Mts6uxNT c83t!%-')o M>~61"( E"b /R}K?ra/m~ Qs[GEMY  EÙ/?i~Vw0xpU0}ek;>QEW;l-0h1!,{h)T…TY`K\SX(&2/Gf'$r\D + 4+c- H/YMɣҋـFFJ)ADcy:}i(0/#/_V iB/XQc8X /y6q%AJY64xi1zN >k"huhDK':]kPc7a7= kFq{x&nٵ/)it‰PO@^w. +e}Rkxɴiaj>S^m 7A3s4{ՒeI1\ُi8j&g7MfDLa%$BSF*@`pxBwy~SIce[W`%]s*jD 1E!k;FgbErX1˻q+C>I+_9Ս_Vz=QQ Gijx}qt,~B(T=E zsQnK E?JahN"at6-f"\NQ:B/o,RaEw!Ч>,pw xD +td\>\؉y29f{Ɖ(`H?h -YǺ; qyWԩAOUW_:KcBTvDM06$c 3^Ix_$*]47b<[*& z9~zL9שK<j +hQ .J= |R3-<Y|`EbqX:rYH 3~!\dץ,Mx߄ ?mq툵Q)Zщ($ҴQ4g.!Nb_BH_WY.h@ jwi&2w+0CM&bDMYX'N@q{{-*TK`WP% fḃ$XGp>vG7$--S*-wS /^hGwG"$9˳eg |x}T HP9θtEh(֢*AwXRDz/>>h*TJ@p+E ˁ!-t_2=m;QU` y3.h컰},XAon gLJY۶MV}P߆r\$dDvs6Rwgճi;9"cjLI*u+I*m]Xdz%B$ioΘjNoak:c5, r&&=8-AjgXE sJ6!xg#v>[}='X)m3jKTdh5z[j_ +?& +/I\B2 +kz[66Lgi LҴ6zZQ_sp$26taPL,G22gS᭻Fݧ,l.nxPi˙k CTд/g5 ֚g>98#N?AWD$Uu1P3uݜmr8-`S*3hs&Ov? Ĉ}^PЩO[y%v乻ӅwV ܑF%! y$[loݔՃ_Vv)>AuhP"U#À'n"@! ,"gNO P4`Wr?4630;% "|ΙN8<~9TBy t̐ylPojfroJ;o| <(yH[ȦBImG$U ma@S<TH`ֈ^vڄڦ)8lhiHݗ8Qn,^r57o84^]$4B xyÆi'e8CJH H}b ӯ3wJMd3n!fS/[AYJIˋmj6yep̪H7] jPqinj_hfYGp|;]Ϸ{ZjgίURn} dw4s;fUXL!ǧDdgȫ ˻)Q + +c V?06 X#|[ +yqJyk+!YvXk7QLY"5k)$%< ZN neGKuDJy]Lu ,o|Mfi[974lnǎIbG<P ,2 r{p/|Pqo&^v`J1moJ(.~tG2P@9?W "㕫85zkQ~aͱO1F>J ;XEr礻$AW +9'{{D&Џ y (0BU }hH5r|**E4=m +YlZ2 !*"%YڿJk-Lp^s~|/`y˕k{It1FA +7vt͟9^ KR!^r /$zõr/l[3#.^ +n^RƢj.Z=4c)JPZ)y&qiٿʧz4OgiXdJPofүVÐFTڔ?US0򍫫 +0ܰ(IޣGX@4U|'77b h6}lhىϚ1^v8lBR9972V|lEv/!ʘ\M NbKFeH,ݻ?ԺlV'f tȺ@duƮ,2u! Z3Hu +lUNpZ4EHghR}1G !wEsAkK;]{gO>]2u,\ҫbn;={^Tn0hCzA"2t@ˑ_0K mW@.}y +9g֭00GÜztFDCRp{. )aݽ@t(!چt#vGQQM6H_IsAkK;]{|y;O٧-e$nd6٢R]w<ɝOOR9 +ZQ$ձNW؅3IY}l; 9 >E(Z$9ak[^KgF3=GxYαWv[2MAK)(ΈؚR{(u׼΢MGP'Bd! <`;8'|9#C \/bN}jr!zHOo_Cck0nay2ی6W8Jꞈ+gFŌ)$ZK^" +\4Xaஅ9zl!3E%hA^xp?'/ϕW$^k!Rj)9l0mdiGcxy˟IlJcs:Ⱦk,Uez^lDw)_u`QnӬQ?EvtšaR:寍݋›ӸݑԚ0B5%'M*`Dn7cxY?ǽי p"Dvz.\'fĜ?CАU u LSɟE1j +. +wVđ{B=v^eS͚,t)5,1_RͬM<9Q$&6 ?XxKB6zf '}5iO ǟ?`3nWy9@~y{!o)*'_6KΦ[ ;7ە7<_,yo5<}م v'Z2xZeAaB#9r2TX~[õr/l[3#.^ê}$P' _:*r"j&Y[LUl]F!Ĥ^Įnb;lٷ!_ 8Ą=!L==yXq zsSmVΉڂb%*ZI 4&GȪ4@`'^$싅hɪ@xgJO\W?ϘF8=8WggU =~rDe8 >ꙂgQB{w +}@GwJvѹ. :Burrֳ' 60+ؗ<},Jԝ:K|Eb#'哗iA\jM X?0-pb=V]&]=uѥX ETP\,+QN߮¶>@'RS4^buo{1v4)i/< (_¬r^zqt9(r6VܑAP<4pN G]1 K˧oԾ{$o!M[}LN!F< +8ɢUU^ncIPaHȅrigΈ Ô;'_Kfq +(C~X'mg\EAEI$knJ!xObH3hj..P@96^MKd+B}I-U'e'31ӋwmS+ɯsg:WҊH Rp2ٞ L?B>-a±8r%g +{V;` ;1)}p<x4M#!D_ɨè7@M)>Pq +߮,+蜠v@֟enuET3olGy} +O %_O0ǞcǠ*=38/.rL|AIݍ6:[c* ߓױ#G*^II݆̺s"'%}4?ӧ"ܧ5)U.}3807Eֆn,]o^9]-W>,HicP3q'y\|⦀+I4hZWӱ(|CiRCԬ7l5A׃ViXwaGּ:N&l|fL% " +'c`WEik^ץWͮb[c/Z|<td`w xFH[z0!+`)ꙃ%=7 l9.p#{ME0tF- 0M\ps(*YO Ӈ*2G|rgHx#5ıdn./FuX.(S~&'sa_{-ζ CJ:$VPİAx1"OP( +ZZ޼9c+^HOU1(+sǾ+ai/1%v= "lPX/И<;xYPAKD34򭈞J># +oZЭ*hnU؎G%|t#m)}GJUTd[ҙZ_"NB:S!8ҁ/,HO@afPH9 `|"RW Q;Kr;5@O$yõ$s^3w*kӫO(䙵B:G' ~jFQA}Ya&A-1@ 0Iey9 A;a~U!] H既`7hӸmtPKGp6PO5>B:TNj^¶洕=*O1! j7bQ$ԛct?k\H>i#enJ:SNW<?:Y$% [Վ4NA/4Ձ;I7By`CٖgX캽>T,)c[zOd&q m&jA1;*?;-a# &'v/b*˖$M[ +(@s@\y9 F^ @ejp@Cu`g$ .NE4w'<%n;1-k?.f'’(( d"p)6-.X +}WTGj`75q +WGIXWo࡛t = ԙð8? ¹Q5MH˻1r ]u}kkHYԣsȈL)_u' PE "1N(7&QHfQj99> 0OUD,@S +X]E̅k`lGM!]w&ęq}3_*H;uL J@}q)) +=qX j +0`T|G4VW=<_bQ? PKX0ڀvsAdΕ:a>`^eC5ci`K2,ۈ{OlMR|ھt5'"~ :Ĺ%Db/A U@'X)cq,}Jߝ(C ³"1\+p)s.CHL.*}$n;c2:nd%;qTLg{n1˂UU߹Knڿs"ynTn"C*kt-_8f­*~+KMrdM$]5ψr#dp6^*kS( !f_rђLT¬vt8 zhXiepdMpXLJHH*anB೦=MJhrcE`2jϰffy:eև+w=~ Ws%!;)*bz#ڲ-S o33oB '!:4~1`&l y\F#˚l&q-' Y tŻ԰f{_kSxN:56菏}>'nNKK t `2$(ӞON8T{fDq#\CIV{VT0ln3t,p`7;$vr +.c)*.a0 ,)vqZv |yOn?YSynY\1Q>G0Fpru_dẌ́6JQ YA3e F2Ci%E#tHQ0RX[YԫFUM583CU&zn!oZ9PfГZ>?@MVd RJmqB!Drr~|ƠB`x +DUH!1<8eS籉kw3/\ 5c ,~#R)K _Ę̞,WGұz.L!`lr?֢Clnw;h%3-B'j=:]갡H‰|KKG8!\ +*Ր;t̷,pMJY we<ڥ!:Ka}W&/s)K1]Fnp4hxW,[݀ l_z^:Csv_OYj^ѹ#Q-_;~_V-_kd!By$"dY? j)(fDS6ؓCQR4_/B|~Oũ-$_ <]:ZfSngst>ÚV,}`WϙQ*'[s L>.{#1Sq&EV bnd$ă;tm/i6@SZ13Cp\jx;4o#0?NGkaD ʔĽқ=j6]Kmyp< +^wf#7Ў" +lZK=i@U3q%Dn\2[C-IeWDd7A?j{ѳsV_= )ƳK%m3{m.hJ"D?G(¶iݢwANfgRbG w&j9OK?Lf9 URڛ L \~6Cmء'˨dT2h}ԟ_1JWa5YẀ2N]>*{mX$L+U3E~)d|RlaLX֭vh}LE#Q>ecI9@E֖w)-Hʂb"WڂL5ū~#l +G鈜}=1f(qXe|P.~֮$Q `sI :ee˳=FN9rVC/hSQS @Y+"m$P6N%sC ԬfQ!K䡞"C 轥Nݗ۲mbyf=;f̩yC߉?,ӫaŔhdSߍޙo;.'"џtV՟WFJ+V> rZtcP.د}݋=nZfN]'1Asɤh +& vXhz +j/c5~:ҧDeLͫWK?_F7]@U!9?aTz¿ '!} 6!S|UޖIy2,0B-q5a)t =&{۝}(xzu孔JY Ӛ4`WFc~[h#P +q0ȯcֱBQ6АuAB`[rJ`|V壪XwbM||dx' +W6XA@?߬"G JSR \bɽâR+E#Z9϶˯fuL4s0qaEZ 'H?B6|j|j&y$f)qx~s0ŒKx!QIA0Zoݑ:ªFůn./FuX.}dV_+!ϟOV?r!msK 2LALf+k j߀sHR<4Ӫ&`=jՄ$ylxC˸v3crWh~-|HGa>C[)ں֋tR0WsK9H;|~j?ZJxJX/?imLcYe;k{E1T] +lRgډܐuVfA/kN0)a D3 h nZR>~6ȩt a8 Nxoa~$RҚ{_tUFaf1:_ +R&Zn͗ވ':cpfqM_Erve +v + h#)xF@aW.xME HHč-y$$Jp:"p3q|GlA]\tš'XNR\bWr08&9 Z,cw @Q1k7ni tKWG4 4a0D>ILcBGACdͥY{d1A,Є5.`ܨ%‘kCpRٙRpyޚOkR glBψT.2ކfX  aXX1_M;n{B>)I\g`ZV~' †DGM,qSC[ڵm.Ƃ /DΫs.yNtXՊjTSewV3P*҆}}S8:(e,Y!])0_fx7k*ӘA )ǡ\#&]R7Q&d[,q>9d7zW*mmj"Qydo^jwNئ3"wZbVjxVLfϮ.xOmz[lx NZ /_ooxj 1k/T}7/@Tc&q6_5|+ף.r8dvlhwPQ=E5U% +A!aC20C^KPGg4`Y=ߊ=&{rAMF/";UXʵCKqJ:$I൚i:k} ߅D[-RSD'8#F_d<7#0BSoep\J+V;ʵ{ſ[жY[?{3?wx2 o^l]NvXxl(D}&-3CtMI2_ϚT}]; kU18lz+7HE[ad'X-2g8L.z:D8kSl },| 9y>Y3 6y4ZQX }t8SL>PmShXl w~v"9Yz{]9OPtG CaTI|IH˜3:8({3=#0m EO>goW.{!H> ɚ泫 lB{E4ieI%ޔ<zROQ..AZ]#I;4>I;V2 ;ɥxj{<ұKQ;_,M!xHK  ^i|y?ezbl/r[81,)=Bgѝ +nv!{T:+[,-T2jǪq\P+>@`C+/*>D~8ǂDfDJ}SV-9dG;Ty_13R(q#:emxDp[(L߭q71,֑R<_Cm4me;DƗf"MF0{2r+5ɹ\%އGW9ΙKԗܼ*@zE$o +MgݟӊF{K<a HG峐 m6nTX9YTTwugJ ^}<x1g"cVbTv) +#8| +Dnj ARX;éxK;#xCbˤk7L*$Ho.`+@T"`yЏ!Pk5/@Iq!g(`X(ƒن 70OP(poV޹ i,,AWFY5<ܭeqr@a/^!ON/$OuQ&_KЗ^[2TuHH5M+șwڈaS5 &H|'#/zf|G 5*PIJhVմ~@҇FB#8.ne$nVr]PD#tJ-yk1yByCw$둝 @"E%~#K",WoԐ,0''N Rc޿UWL|ysVj$S+}Z{&YT#dc4n< F>A$VlV)8/Y4͏@o"vh0UYu^qV>މmĽf٬%&YKdw{n7¦ ]"=8C 5;EY. WLԝgAs +?K]^]R4=/7g7;q&z zy˵m[&qJw 1=)o63?jPxƭ7%J' +m@u>KV. {s$3ٵoRCas3K$"{O#fΤS9ek/87ƣށH rWLX`0Op +endstream +endobj +2228 0 obj +<< +/Length1 2566 +/Length2 25126 /Length3 0 -/Length 16193 ->> -stream -%!PS-AdobeFont-1.0: CMTT9 003.002 -%%Title: CMTT9 -%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 CMTT9. -% 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. +/Length 27692 +>> +stream +%!PS-AdobeFont-1.0: LMMono9-Regular 2.004 +%%CreationDate: 7th October 2009 +% Generated by MetaType1 (a MetaPost-based engine) +% Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS). +% Supported by CSTUG, DANTE eV, GUST, GUTenberg, NTG, and TUG. +% METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki +% from GUST (http://www.gust.org.pl). +% This work is released under the GUST Font License. +% For the most recent version of this license see +% This work has the LPPL maintenance status `maintained'. +% The Current Maintainer of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki. +% This work consists of the files listed in the MANIFEST-Latin-Modern.txt file. +% ADL: 778 222 0 %%EndComments -FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup -/UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse +FontDirectory/LMMono9-Regular known{/LMMono9-Regular findfont dup/UniqueID known{dup +/UniqueID get 0 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 /RQJPKO+CMTT9 def -/FontBBox {-6 -233 542 698 }readonly def -/PaintType 0 def +17 dict begin /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 CMTT9.) readonly def -/FullName (CMTT9) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def +/version(2.004)readonly def +/Notice(Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).)readonly def +/FullName(LMMono9-Regular)readonly def +/FamilyName(LMMono9)readonly def +/Weight(Normal)readonly def /isFixedPitch true def -/UnderlinePosition -100 def -/UnderlineThickness 50 def +/ItalicAngle 0 def +/UnderlinePosition -150 def +/UnderlineThickness 67 def end readonly def +/FontName /TWMFXI+LMMono9-Regular def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 68 /D put @@ -32236,7 +32399,7 @@ dup 37 /percent put dup 46 /period put dup 43 /plus put dup 113 /q put -dup 13 /quotesingle put +dup 39 /quotesingle put dup 114 /r put dup 115 /s put dup 59 /semicolon put @@ -32253,172 +32416,255 @@ dup 121 /y put dup 122 /z put dup 48 /zero 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{=מ0).nBd^/!2-G+~b7 N&lds%o53NPc9U,Y뱂0L+OAdN;[9!"k_ӆ$Rb՘g uxVMhL$3Py5,o"7'*E<Zcb8r$`Fާ/r]:BI\$~=ԑψȜȿ!ꖲQS*_LyXg*!#B;Fdy9 vF.x&W܀cK[龭j - T-hj:ֲbcӢx~gk0^Z]Ψ&33g3wm2pBÌ:~qF邉u<^IE=*J.Zwc38Y.1jKAs;Ļ`R^yCQ4y &{uQgF -vlP︩ -e=Gylw -x]v&o9fiQpymQrijF\UBu :sy7R'T{cr/bzfuy-_Kh~ sӭ>a(zfz!#vZuZ"VUEɟw-@ i aI+ R̿P;XC 6e+je[7-^j[ -g93 ÅD c% ؙyJC=z[t vʩ>V3m9=Wp+l֏nׇ3g#7:Q@P~-u@ӱDV\sS;x; -J 'p -y?^CI $HGYt` \Lj%fxSڌrܾ0;=l;ÀMI>o C" - m޳I^:O|u.^Nuwb`95>dJJ 0Xp[tu^%ئ`' -0T I{ 6j=w ɽډ7Ș:{?lH)8OfmXn,ߗ Pii]X&Bx{5ǬfEޮDtz9nyB t+ 4,p$@x&|Ĩ4H~4J7B<«CP}uz|gr-:u[D\; }bUIS{27= FBk' - .~"tOz-3RٷZ[&hD|AQGCH :\'`aу2{=o>u&0߻;e01]V2c`CJ1/LW Yckɲ }c8LC|g%Y9.?e+PҁI4,}#yE؇]%T>},S !*. vt7[ORYSSԪ5՞l+>͎l6UY'_p%=]^:k2 b3Ҳvu\k!n2̋@Q*v}5z3mؚ/_~GfG쪑4,=5%ڹ]EHfnۀxRL/' 7.eϽaG}r -~) ]<$2uo6){QBX[#CI3je/NUX+`"P[\AXa|i Hnk, ? J_y3^c}|at <;1v@{EҬ /E7+?`+7TɈ/~2Fe匊I5)SXvNe BҮmy‰_14tl0w -3Kq -Tύ\Ӽzl]%bpg7G)t[VN~O^ v`v`чm -ňXh>r:9e1SNC$c% $¦,TM2COVe=S7u_{x $:#Zi1ʇl y ö^|QLψc&Hn) Ϩ|he }IMǕW*+-Z,dުyfmvԛ]t ;`o]WHY}'PN`SuBf$,ՕL=wm0mV l TOnt6M"X˃qDf0ms9?Ğ_mnH`AAmҚ -ܭajfnUۙCat/vPqE$NP^_مdv"TC[ |wҁ1|7B%fW"d6QIaҝE.Z;eF{N#{}?7yg -hS `tZ" *QC&KsulJ|6i$rEFXggξ&vH_I)LR*QgXuV,В"%_L΄"4vܹ٩vûZ! -Y@L{vߺ+N*Y+qi]/^L)my1=K ~{it{n?'2d,佛rt߳-F܅Fl L yfF?M_*a5պӽŒ!d 2Λiw/";qfW"^0$goaWvm.͢B/c@{:d"Av]P}C*&kx;k6܆xɃ% ^X2Lg]VmMhxP&({g^֣ ĤԒ|(dk/ܺHԔqJ'wBtgO`Oc \K*/g9Z<0vBWK=Q]a92Fr$>.N:;f70\ -^M -aQu`8@jkpXDS<׶nhyDI#!MJF. 2E7'GYN}N4Qs)y*>YAV`upmS6)3F@ -kqk~ ] -ٻcM*i[S.ƥʨ 5M/gê4i,&=E*< -&~ f@a-ҥ!E=3jd+aN@#R/k0Ǡv*Di*ٰzu; \ - oشa;r( ֒wzKNB'gfW?1Yr!kU`)٘ʫ\$<ޓX<9)AV(`r).Uߊ]X/^:b[B'A+u}" -pC3q'z}SdxBiؤ+GF.Y2p8ov}@*QzIDV `ʥkʦ.=h98nA@$` H@0Q-H1gܭуvŝS=]m;ƬݖVJd<* OvI<]_cK.& CʭE] Wz7=/ \`ΫT(~ְ.)l$asZyާ^p2BC [b@1X<9yr0v!SsK/R'3eX۸jto+9n{cg@f)8}EU9_u-yj\}qѥ~'qXGޫk`$qpvq&"<޽K.Xo|%}¯|5FZXKb Xp3ߨ{/x+HvE p ( -L 4m(J;Zsr%PVR0?*=tޑ.")$y8V+"V_HBtU2.?-B'fF̽"]T+l#c-۰hnrQȑ"`Q4ѥOްc7?үnߏސ-yc(ڡgDB^ل b~* 9 E?^mqYFgрueP/6DYDPq|2ISHF1`vqþV?ǛP9~DXʘy*0u&$G>HRspX3DB K[B8J s+5tPهIw]+~dI -75V$.adrT$g,~m0x;YfQ%D"IGiיz{BSry>j7w<OI ^E+GwSʞHqki艨!fԳ{>LR-CIQm.NNT\o=u~ ҟf*;J._Zp3¢T_ͻrЕFh((t\JHz 2VQ#FU188'⹴.A2eLf@_`4p2ϡqˆ 3+~*ߣo9(>۔T=_k J9+^}m{~,1ag`;7TS.cW(D,7q3oiNZ'-8It"ϜbߺZUnI4`0j!=L?҄*|?aȒk&TQwA2NqvAnxb]-uvޖV>xE.MOͪR.aLwj;ܠ73SqhTlM1vRBaUb:HSliD71nMIr owxṢ@m ӷ_&mEg}`Tt AS(^=5X&NNqƱs7>T@H7a%}l pM؅\D 0]A[v: -A0ݶKȕE57X|ي^=W1iqSwV]6Kzbz){G`;t7zw"81b ը,OسNڢCBܠ[[;-\{;,Be,-:)* CUDV"/<{];u9㢩9^ 0ZM VRt+>[qhw^f1u=<)b8Y6;=UI<uCN_aPi9[a\PU)M`ɏR})e>2V/H’~궉S@ Swu'{/$0UF:U˰[M}( -NX yWSKb3i:0/\ϨH[/7]re;B'NkÝY%>)#-ذw#1\;A'DusiZqw=@w`x$D#S>ZT -V~éHMљBg?;"^m -U -x)w"+y#\13W">LWrDK9cEGoEYh -ݝ~)(D(ѝc{/ ZX(&axep-,ΙS=L8ٖ/GUx^2xnsO:Ґv53δ +cv,w:!S?pG!r{ʇuc<{*F븙ᦪ]eTZqu\ k~dwjRX6;+b:V,`:G>mcF"!`S1h~iϒ1oN E,iXn -xhΡh.mdI-SF3hu*:|B{ UusCb]= -Q, -NJlza58 Aph(W\2twdOe%(2 EpD -0o6NlAqqN@ i@Ԇ0O8s\}r_DÈ1RaY _4%L=<xgU Y:GE*6novᕈ/Q.3dwR8u"cIGZ9ʹ곺>EJQPbT6ݖ:ԇZBm/t`{NwN""u3{1у18 -虫 Dh]D~mPDveY5Q>>iVrS~/q>U),'kAqU\c.D4g$n=b,oeh 8FMg1/q0 -٭ec[.?Rj^τeNxl01ۉ<Ys7 ~]g%O#AҔy-ۅ~ X0yn\KbFT{-a.[D}ya0-%HE5Kר}q5yGhTW=0}t(o -8U+`3|Hq*G!h5v*b> FVzɈidv]=<8ib y1* 6&>1ķJc(` 2&a%&]*T:vFoi5.{|2Ⱖة&|TcYRM3W\0y8HZb7}Eʈ"| !^ܩlfZ`p+nYf/3@/%zՁF:}Wo0U!nWξ[~KS[i)3M(]7_p0zO맕8-MbћL|IxcKo{Hh=&;0 wY3 1L'fde-oO݇^%&_ 땯=I&Qݵ`sj;z YI4/! P17c߱9:/aSϴ؞sE]2SC1Z5 ~c8܇QOZ_1/Jڣ{rok'&O`4P;@/Qգ`7(z S ]Pr?^h| edMޖ=-35Вus 7 7&r"c.#mU'ֹZ?y`Y!xKc/Z (-2i4hY -CC'{iF<<"TJPraW? *5| a*ґ^~!^FlwԴu8XZ\tHHKXT&m<\Hnh"8Sɠ2v|Rqő'Q=:.IxyϏxdW*l{uuJr bD42vi"-7KLw@ l4%>ml (SbcjVg7hð|tt܇[h" "o֘'TKEA2I8ӀPT -@ {߬o[wr1|lq8͢/YxIJÔGT]2dF_8QA~C1}s,XT/W%)hg"^Y(NP鑸 u)ƣ;^|/>Ⱓ(Cdŧb|tfpm]vTmH3!40ub\I>U{l`p)Z%$7}zqQScR-)g׶iRpN -G|yTCc^;[6,#33$b4 ѧτXLAʒ,Iބ{ІϭtqC<5?H/+ԁ & -Zk`bZ} utq;z$,|u\ϧ O?"nY02{,yc-#:cɞ{t{)m}}G\c q2qA"}$T&] -§fˀlk wC~//v¡d9]%mf-}V]ebt+0 {Ն/J%,|9*yBu=M׌ oȡ>AMwOЧ -7;_:d:>OoD -\4 ?yɁLq9uȷ۠ -^Fv2pX !,x?%J;I WdKC(ɝc?Ʉ-y^tQ`-o23b$F#oum]AUYwሴ rDi@xߎ\S% oObE : }*EBҙ`%YyX>+G dLeuŅe✓6]6&m9=nP;O,^T乸s^VTK -P^0Wݶ' S>P Cڍ#tp'JyBv;KWTwg kTz7یPB/zҜ9*)CyJѽaXX1jm࣬1KʇzT겟j&[TtOu!Ņ9cP,c09׿5ԭpL+1CӺ @-GQPH$WD%4{ $9M|_y"=yɷ1^[N"yMc޲_~# 5"XqO]xevKr -endstream -endobj -2225 0 obj -<< -/Length1 1173 -/Length2 2916 -/Length3 0 -/Length 4089 ->> -stream -%!PS-AdobeFont-1.0: PazoMath 001.003 -%%CreationDate: Fri May 17 11:17:28 2002 -%%VMusage: 120000 150000 -11 dict begin -/FontInfo 14 dict dup begin -/version (001.003) readonly def -/Copyright ((c) Diego Puga, 2000, 2002.) readonly def -/Notice (Copyright (c) Diego Puga, 2000, 2002. Distributed under the GNU General Public License (http://www.gnu.org/copyleft/gpl.txt). As a special exception, permission is granted to include this font program in a PostScript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/FullName (Pazo Math) readonly def -/FamilyName (PazoMath) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -/Weight (Regular) readonly def -end readonly def -/FontName /IKXQUG+PazoMath def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 165 /infinity put -dup 229 /summation put -readonly def /PaintType 0 def /FontType 1 def -/FontMatrix [0.00100 0 0 0.00100 0 0] readonly def -/FontBBox {-40 -283 878 946} readonly def +/StrokeWidth 0 def +/FontMatrix[0.001 0 0 0.001 0 0]readonly def +%/UniqueID 0 def +/FontBBox{-451 -318 734 1016}readonly def currentdict end currentfile eexec -oc;jtD[|<33229IfÐ"XXH`{(b$`Ꮻ2 Gy<\&MꐵCt+˅BJvƷmoϚ}^߼YTYC]S=nt9x>JK1'r6iX'l 6я=v1]mO CQC>iOLUO*TcTm(߀ 1U -nAYXU12rrE^Oy";Dm{O0 {2RBiNMufLon>Gl_1#Y> ؋nׯ ,G#IJ5.FE)a" pqo-4`7}ӺWt_ceuJh>>W! A5j-v`-?R tl.e)1=kdSi!5_l< -^+bގީܖnW%yg͚3N>Vp9e.ovh; ͍fW\^yя_ܓ'1︖œ]c*" 磺@A.XcǽD&(49g6vf4J ]5(W sԘtaȝ<[EpTU!JtО ?,L?!w sg0MhB1$sy8G(b>zuݬDoeHz)^0 -9JWf'UIcei+5H,r73g03{#Y_E^n2ݥ xdR$;9(fn*eHcAI#y`%,tŁ\ )_V+7\M7A4R"З@O!1$*ϤНsp%>*Ȗ, QɥH;Eٺ~b@n sXZۖ+ , -y#/!AL98Ta/eT,ut/u6~ 1QA\SW{N?2/G?E 8ӮchbK3q$;+^B(񬼨xฉk:wMX,Ӄ~R[&h8AS #L'ɧTp#{۪>;+⭼MuU[%V0EėٲC9؅Sםu^sI2\. ->j5xBĒڪ]˸f*g|x*cfr+B!H9R2H4^Ed>>J1uz&MLLioJ$!tFo_O>y,ު+#D qW2  tE"QIՅ.e]l w,*"Mf]i/FSꂒ.s_.n1 /8,}̨ W HFPsWkn3a9`6IݐWi>| =1uŪ4ԅXHAH -$-U3# -endstream -endobj -2227 0 obj -<< -/Length1 1188 -/Length2 2740 +oc;j~EЪ%9.>XJٚмD"e?&oLH:]~nX%l޹dQ@a~M~EA˟V.UM؀")JY4қ UC92"\ܡw1rlxнtaA*`JpZ+TX{ԉ]_W_(~FvWfE@QcPNdqclY]O据k r ln8e &y~8qEd*f$_{}EN5w0amL@opra,YuvT fEC/ -^[XO2 WEƃKQB:Avyug=qp5/1[܂!l2T'9HCaĉwC3^Cy}^ 2A3>G|H.]J%KV`8?(0gt,OT7 $n"Jao82*t߮.Մe]'2bvi)k+T:CY#M57^kjrcTDd;y9/E͜I7K| Sݿ[l6 +K|OV`b'Eph(uf*؈{sG(\hM9?5 g| 9@? +;^;Z]_pX5MlpCbMD C![]z>nԥR>X5 ksƾl +yHRv,##ymB[! Y|+@w1y0+[3ހ ;.fK$w:; 06I@3]3}AE:l9;fQI1YuKYEXfhƼmxg{G9zςi{$@v2BG4#=-*n=׬>pa\ߵ wQSR9~R~{,VNQ:B/o,S[-gS9jCa7YFC; +gӃSޓ$2hH`N}H+iI9HuI&ՖJ&HPnͅLT|D쎂j'jʑ?k.&~w% RFϺo>aCwDe]ɡ>#_(-ˊ;]l׈ S \Z+J C<;ɒZ[H9Z<(*@L5G:xכ{yP 0DyQ/%ߤ]O 35Hw"%o14,ݶ 4?F)CkRnk5o +ul!xJp$ KNgGZs6^mYs8磩}2 HU +]O$H;Ci_'6[$K\x;^z8?!7&dDtrjpޗD+Ɇ9Zɀ3HTIVxuJ'8ҁ/,HO@afPC4Cob*l7#ױ?f)'WgsJ+) c&yn2lPՏʢ Pz`IM N0LV0k7%HBh5>ZY@U4h9jDF|HVx6ՂA {MhЌB|Worr6B4BRlk*6@֗1_r:~a-:55h ;zŦ6`69ɺ }׏LMa31>pѰMq#=4nU ߛa5|F#<, ;N`,mJV Clö˯fuL#i>4~Hm\=c+t$e&X\>" #TrE𒮲 x\5/WnTq)APɯmnDBޮa?,& B]]PEb-ֽw)2 K(]il?~6F k"}u ^ɊDl޽gG`L&Rf`V'3EM)Lۖ;'#gtIW#D]'rܣقOCXm6 q%Qm =GdbI6!#[ӻ>B6V hcUIF&i %fd@#aQ#02o2v`윊O줎 r3,iPfQfro3NY5%/F*=(V$"3s8;M&Fz-Yqɉ#ð~`1NVcqܙo71aiA<1HUqn4MN f>gҜ3 6$ۿ7!y{Np|j. ?CVX =OZ{C8L-Y+ ^UluJaŐ[*[TN$CԂ]8} /}bOW޵rrM-f.+Ў+XUt96{W +gaGrI4HarC+2)kͩHL E6No8׊G²XρH0wD/+$jnoE+:Ƅ [G^.$>y=U3Ef̯$|pZm| +t>=RpLLJ”)P^q 7k: \y +Fau"ɀеsv_T*;ɈiJPis4E\''>*UPZ(ӳ #.?^f04(GW`3ೌXjzU*54 m`Ag[X8]kRO1MCnVGkd28g|}/UR榝0Ar 43":PI:'+Bb\-%XSmgk\DDyk?* &̅!&'ѳFvC"W>BQL$tҦnoP''6)foS<5xS~΄q@0z6aWGM +0#$l:+jCsy$Iͭ.l2-5a +Tb);4$X/rTJ4AiՒvR(X`V,ۂaZ.6^ρ〶7'=QsG`9\>KǶTkIϹ3ZY\\.F5*r& ޛt_RB%<6L7k+ _ q)O:E^Wr$:ӵ0ƅߪREowOt8U}b$ܺv䛭KnPfBQA@B{E|0<:eTxxΕnEgH*D8yn¨E=eU%oJ.Bf_)pr +Iw9V]1)ѵXe>`91T-9oW|8KR NM09RÁ:?DwV5L-ŧkB쒢ϟמ*t(44"2ڣ;xmB@Gۈ*í7%J'٢ k4k)DLC*y̍i$^$&+KԌ#1YL_~pB`*<y7GEF]ǩ=p@f}RA d"cٔ D5B#/"IPa]N!ve< +<$ Fs^ à{sס͖͋=!\jחY@V\5be|3il"ƭ+4x5vڐy>v9-m\.2.P3 ;Kq}}̪YKzi3L@Ũ~N9ir|6Tm9ߪu$) Z.y3ږZytNQv:kA'aAExG "<}e$ڕy)U2YUj隹,wr{ ^I:Y7TY7Qme5F8r'ðҎO2跔~ŪPrB^@ԁ!;w`Ci$qE4F?%(hNTuӓy),U0ܜrfal_';SV{]p6Uj(mE=fG&!:׻$ ߽1AX>4 $޵b?op)DZݭJC̨+2D@S~Z^`7G}@6@ɠMmS_MrhI۬HAo`'C%tԋdK!wW.z(^&Rtm~-M._ ~|%L2`(xR?$)7 +4+m1؋(DZ^x8p +"Ugao6Yf, i8?G$`V{1r/ @:G+d{x{] NpYk.vTe%~tyǷV`P bEmNmpVĎ㝖uY}n~Sݎζ'v\)@~09F&` RD4ܻTG3 i}'V!N値/5MaISbq( 9UK!rdz~v"?1?aW/@; rO>$t[Z燸*6U˦ۑ${/qA7RxSq5ۺDaE 6 ٸD&S^+ +}KM*עGt81U\ r@Kʝϐu%Oέ_3{sRu7Xo2M4E,T")y@" :s +$񾫟`,@=R%L1-dz\#c9dtXyoCD>?"̏2㋁^u*a_/^k)Wq}mEZۼ_XJ5G0 `twJৗ%cU/pgp`:G>mcW{,] q-P=|sw;BM$:~gs#c%^p@y˪f蒲:."#Sһi_?u[M]?y!Ag@XKׂ'.9R^ueZ"th%'(^g2W| lPX)>Z?[$@UGqZ\6LˈPeZ^/rF _c +)~0zqaH=`zC#}x$<^q%*N2F.#{B4HarC+2)i*v,aMVM>ݝLFȌkYgrvH ~5 InIS$ a2E5ӊRI#>s<h_8]7s%p5[V4wӻ72+L=RZ +t[ eMVZ;;Ha)XC&+w>rW#!CIq;2!]蔨9 FI+[y17%rA]4F L y!v%{$SP()̖p eHn^1h GOo; q{R>?D7F<Ǽi:F,0@S DhtD~$mnX?}"+OéK&Fhq8|\@* Q }G2xL;q`(ZdžTQ׺Ճ($퐯 +!e}QD*HIp +xFt;6v&R =[ZkoϿN*4q&7rVГy8U6IRƓ|pK;:"63Pyl[60CDáu1" KaSF,AXk'"prsGA=dQsrOnVQ;:SGYx7?S$Kʘp= e+smOcSWUĎIJECl@ v}֪XaL}%+ +5Z7шa⸅jRTA[wdk3xLjW|4#iGRaDF%~ +֪X7eŸm^=cM"d J`D&K_: .;.S%3e"PR쬅F9pѬ[tFºeXYXKmn9mb+^ɏNI7j}>%,&C;g4~*6vU''&&MY@n(dYXv2}!RH^T>za Iš֢ʽn! U4L 7 ;%r8.dnHOzSv$iB7w qpI*SEy [>$ؔHex(B]rf֩nJ2AYnqt +tmN8t ^gt4r#ϪNZJ@0=bXoF\󃧖,0V9x S壘^)wߠq8`ZdK{X7 }J=t(/}ׯgt;LF~j*c68i+Q.afoޢP(d!m"̂diIkP!Cӟ3I"WY6A?x';qQ_QDj.pÅދ9wy*K!8KBk;d!%"igO }:tMWgdY.y682p&u:zM-–uQ?WQyfOc/B3Ks54>{ 8"yj' B؝I\q˼'JȰ)nЇhlӭDZ5&2BI૴ԽVbi@kABh!9_OE LnN0M/-E&'G!7JB{ך=y=_״xʹv:"0H(MUx0uϲOЊSyCv#@Զ1\I\K +:7/Y&s0}w?fPXńf_YOPn!Iˢ<˧l~0ɖ2`Cf㳩0<'f>F2'.a}A0?bvP!^ pg敕r`2W#l \P{T,߅SMf_E0Z4D4z1VX̂B7Zw6a\:CAvdS7[H +R)vX*5@!퐀HuI}τS`gM0U#>AUP$wZJX,RrE ٫P n7dj@ijfaG^đ仸JPL 6&Pn'u /@Vb-`с+5*Z9TÌF _iiɰDӦӅٺa[}'Gh;C RNn5~:ҧDe8LKK= _r ۫Q먖ޓ31pW1V&܈=*tēRJ΅AUdK5^qʯZYrsM}H<ާe_tk$E9AFaц%z:jooگ NJv!(Y08Rm((?اGn|,$?gn fOT+đ3>;f;*M"M|GlC~_ɌD1k<\S{ifT.=zu[lP d}Xt>/k +0su'#uȹ9෣kn92ײ( Qʭ^+0ߨ2[T$RH _Il,Dw,gk +4с(?c`rEd!C 㰙\AWd57=ZOI\Đy:PRf/\8Aw/lrsffS9<+K7\1a0C"\h,x>q vU'}ފʄMJ.rՄso=<e8zᗩ|lq4.}nc~-:ŖZg5UrHwu#&SMXƾLE75KZ-g|n +ō3{L `e2Ӑsf; &~A!wC>(aImؤ-m, +eJڝ7Uql>DqNi\f<`U"2.R>Q;٨E8a;*p~]mdIɕlzT#)DX-߁`$.nݑ'HTK{`C16d\O&/B$z^z kf} _(̘:3X>MkGP4̟f+\-oDEmc#(l=qK0ӆƗ}v2s} (Ng GMI,e u(Թ6g5:(Ѳ$O@ѯЭow} i~7{QF}NX0J-gGϋtEh2oE}R؍RU ;R]r¹hygBj3xD [`Nlfj]n/jTLor*&GLj~Cft ;2K p:Bb=25xc艱?Z7w(XѨM6{!ԷKI"V6' o~U; B*|ji +N$MO2EJS3jxT5޴/BB{v]XA1^, ebAuoJHLSS$z $ {jEBR"+kze 9Iq^HY6KirԒ2):v +Wim㜠ZLl1&CtD9_BqM`Ļ)ɘ2")\GӢV '7@VϒI6hV[M\؋>0ST0[oya/K:6?XHҚ7t(D` *<[;;zB:̦,u5 Tm&)`c|sE)$e"oO&^3RMgw|Zs͍9F SW|P`JIsi?9r=kPWl `6RnyqNpL4to3 8J WҸnHe+#VCʘ yKmfl^rYL.+2OK[wdk3xLjW|4#ka|2 < iRcX<* >A{\5ZP˽DJ<3/LJ:uoW$i@F>-CXeH4 8uD.8v'neQ@cbW+^1z|<{b/k('/1GQMgDL!g+O]}`u_FHR~TojbܕHzatfG웳)tMhYBS=F젯m͕8Zx-x {g=>PA2PvDK7@]qZe.h/xSHIW~@%nP5&vT1;ԉϨj`M,*өIRj%qT* +Fuv2 ͅw3p\x62i#;~sTw:*LӯD3x8tԙaMZS:nHNy +yحg#J,`yIg4adb _Hf9(iHjCɓ$!(PS9fWɻ[3*?o:eEg|f$Ґ*iU0C>_y5dG!wil*^D9O~8m8 W6j§pP΂1hpBf5jd%c0z2aS"GW !ԏ Tb8j 2>n:W)LhШ6J䩮|i RA5=OgClhqf>LR gEUZ9 {'v܍::Q&.k;7u@x 4Rubc8;0P]4oiQ]v>ԋd/ 3-W7 ] C}g},t/*}F@7 )ј3,ʚtJRW ny1O{,$C`lzF POE~Nc{EE$C2Nj6^RbƠOI`HdC|Y+O%оv%S{}Lh0+٥rgKUiB]v [J'ˤ]K?= Nunte|2%Ata_t*?d@ߙI֎2ԓqy>;i MV!Cw9~W^o #kp<+j΁ҕݑϬmUFB @mEKV@vG~>ᩛ1w/{S*gems'[7Tȡ OPƟt4k˓jMPBU\;mv/2WJy&$IwE'dUGޥjQ:xoS 20. Q i+m[RIz[?C\oۖ*0\>x1-!u3︒csоS`#+9LxPN=GR%= Q ݼSW_XUV"K>1Sdyd:F̈KfyX}6BM=:$ |~,è3]gGb^!o,v]K|tfKMsMklm+}w~ے8 h].^4!ҮFG|ֻ8J8clU6J/W\M>QsV@d ]:J4tQm3#F#| J~~&&;Ie-]0f*$R}}g=,zC#a1ho"Xgf\ okC/X@YW}Jc[ZN\]͊|Sfޱ-I%4dH&sb(0nF ۈ<1J˜NKIe9W첖&HPvt}T'aUu+*7RI‚E"]}M,"g($ KWJ$[. >0-QD}5AjNsb j)@PљI-mpk`kة 2j_m%<۩ny䕢qHR0<1ۡ-/";XP3bc[WS<4S78@^zay}7!Hݒ zd8Ng,`Sn+`S%φx\18rVbŌ8A#>0H&r Wr1w-#\Kǣ$9,iLzA f3+g'*#o0p6p_M_ƚˉ#=I+jT$.(Z`KAM px| +?s9Є8ow><7|#dIYDA1sFF||EvK?t#b}% Y3#:ql9WojisLzxbxEr(6T-ؿ 23uBy d@, .I +Rԣo_ec4J΍j +PЍGh eTl-pͽƲ v,{g]ե\ԯU9N&x_Kmp=Hđw)],Tv@?#"Fd ){`!}ǡЦ2uF $9 --G,AO7}#_,mG&} z}%6ktĝG @%# +ęp:ƈk dwp_H?4l Wz׆Nuzk:i8R=#*@>xћsa =2h%ZEC(X[rŝs,3gUWiش8Hvb+Y7TIU #P?E`D&&6({ *F\͊_FfxPSn䖍 +/)[\t4lb餄bAXCF\d#DoqQl~vtF] rle6I*us.+ѫUzZ eu|Mg259#\ӧ{˿a19:CK\Jx߄ ҰTk.b=%0`bJí "S9Qy;a^Bá{,w</~Ox3,%roX6~=˄@x!#d^恟 -GFDeؼ&an97}?`wWSS___6~c蹷ز^n[{ 3<*v5kT+'ׂipщ>z[&X;$- x}:l0e<({.DSWl eqRr;#/U[Kվ9/zH -$VLFE㏃A{歛l X== X2I{̺3Mc0ǖ +SGߝ. FR㚔eN QdWR-FIU;{)8=3}nyu~CT^<]\jmElDh{M5x%y:'|p 5͞g^)`B|پ1Olwv1'rLrMS-K1i+a"$$ +|;̸XٚJ#/1A_H.3hL ЫAM'bhލNe B'{t9,4S2f?;mPﶵeƻZvF#1\9I- + 7%LMnzlHݘUaQtBK)&盹j@A&YwZp@m3麢O*2nTzdz-E +?Z̎,k|-*6Z Zwޜ]j?KNOƱcƱstz%K<-|Zs͍ 6+DWF.[Oݏކ;'$:vk[hуɭPj%A*YS.q~QQOz~ú> 6i7}^FCQF'}3$Z4chnp ǧL`xR HI<>_ud?)9xc9 Lb(07DpG+FQ(Ie'0钧 B# +$;MgqqZ$cI%_E/JZ ؞Z1,+_I3AB%^GF-6AWL~=6>4P@x +Ub]>̦*4xmFû.L!86ƻIT"P\) +endstream +endobj +2230 0 obj +<< +/Length1 2210 +/Length2 15959 /Length3 0 -/Length 3928 ->> -stream -%!PS-AdobeFont-1.0: PazoMath-Italic 001.003 -%%CreationDate: Fri May 17 11:17:28 2002 -%%VMusage: 120000 150000 -11 dict begin -/FontInfo 14 dict dup begin -/version (001.003) readonly def -/Copyright ((c) Diego Puga, 2000, 2002.) readonly def -/Notice (Copyright (c) Diego Puga, 2000, 2002. Distributed under the GNU General Public License (http://www.gnu.org/copyleft/gpl.txt). As a special exception, permission is granted to include this font program in a PostScript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/FullName (Pazo Math Italic) readonly def -/FamilyName (PazoMath) readonly def -/ItalicAngle -9.50 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -/Weight (Regular) readonly def +/Length 18169 +>> +stream +%!PS-AdobeFont-1.0: LMMono10-Italic 2.004 +%%CreationDate: 7th October 2009 +% Generated by MetaType1 (a MetaPost-based engine) +% Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS). +% Supported by CSTUG, DANTE eV, GUST, GUTenberg, NTG, and TUG. +% METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki +% from GUST (http://www.gust.org.pl). +% This work is released under the GUST Font License. +% For the most recent version of this license see +% This work has the LPPL maintenance status `maintained'. +% The Current Maintainer of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki. +% This work consists of the files listed in the MANIFEST-Latin-Modern.txt file. +% ADL: 778 222 0 +%%EndComments +FontDirectory/LMMono10-Italic known{/LMMono10-Italic findfont dup/UniqueID known{dup +/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +17 dict begin +/FontInfo 9 dict dup begin +/version(2.004)readonly def +/Notice(Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).)readonly def +/FullName(LMMono10-Italic)readonly def +/FamilyName(LMMono10)readonly def +/Weight(Normal)readonly def +/isFixedPitch true def +/ItalicAngle -14.0362 def +/UnderlinePosition -167 def +/UnderlineThickness 69 def end readonly def -/FontName /DUJUUF+PazoMath-Italic def +/FontName /XVBOSG+LMMono10-Italic def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for -dup 97 /alpha put -dup 98 /beta put +dup 65 /A put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 72 /H put +dup 73 /I put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 80 /P put +dup 84 /T put +dup 86 /V put +dup 97 /a put +dup 99 /c put +dup 44 /comma put +dup 100 /d put +dup 101 /e put +dup 33 /exclam put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 45 /hyphen put +dup 105 /i put +dup 107 /k put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 40 /parenleft put +dup 41 /parenright put +dup 46 /period put +dup 114 /r put +dup 115 /s put +dup 47 /slash put +dup 116 /t put +dup 119 /w put +dup 120 /x put +dup 121 /y put readonly def /PaintType 0 def /FontType 1 def -/FontMatrix [0.00100 0 0 0.00100 0 0] readonly def -/FontBBox {-70 -277 902 733} readonly def +/StrokeWidth 0 def +/FontMatrix[0.001 0 0 0.001 0 0]readonly def +%/UniqueID 0 def +/FontBBox{-491 -316 834 1016}readonly def currentdict end currentfile eexec -oc;jtD[|<33229IfÐ"XXH`{(b$`Ꮻ2 Gy<\&MꐵCt+˅BJvƷmoϚ}^߼YTYC]S=nt9x>JK1'r6iX'l 6я=v1] -đg@F7pqӁ')jjOh%Ssq={.] ZO7єEՄ|۪uBwLÍ `'&0Cg)X0F?nY&8 ˹r]lpKGCpoğg\t/bj}t SEcqR7VL%Y'1b J71SU3=gO>bHt kKc:hA:F.xW(L^N1K @_P̹>nnof7-U El#+A5FԔkyt:RR2\3 l v"ڪ> V b/&"@4 -nD5tv_\$S|KpCO1vF^(By@`gFszV0Qn .T=>>rYA,{ɠQrF!s߸ߟ0׀ߎ5ˢV<4d(nLس[PC;+qޥK V:d&>J3)Q6P|B5 e )\@~7mknˋ$ԶܖP+C}o*( -.47W?8"N[.^7/Ɵ3/3j(ĦwN wLjC; f&cv^%:S,yr8N@K}m>KWKn9}%FSGhpxC(@rX#?F0ʃ#w^cuֻy"-lE#~%U1b[ ^•1@*rEPWS/?N!< e* Wxax"(Z5ŅQu? -UgH{@^Κ2]Ʀy1Q',XL kx2 ]mȌ0`픈p:*:_kp -ϊ%,vVb]2q2嶖ćVas |HzN@=ܫ7ikK\}pYNsS)# 􊄡c,E׀Z=D=0Maf~nľ4ߍš2Bob bObwww>|Gkh6p r[#P"77vE8ʖ$;E6zдR]}##+0"i%uCj,|aSVMx5p6Uj(mE*~mYdǡ旵w#`9k?)픥ZW|M%H*'a>"Vћw5t0QPGR%"*Bu+8~j X< @cNngYGй34 V])-l Ɋ5imՙUV#Ŷ{ۭls1we(\OL ER~[шPs1\zLDgSS[Oup6(@1RsP1 ?=E؜neM6N5w<3dq^cF)UI2M F~q -1йmدNIB}fȷ/ZMYE(Y֋'Ჹ -T;UF7<{LN-^(U'UAf0GivO0P$ 4Z@/.}L dlI/_f>k[WSʪ1<" ̣U3 lP.+\Bl{ɂH%չ'%@-ƺRS覟yNuE|v^+ZRkڜ[ȈRԶ0ZH: -wFe@g`!$ pepdw,,# ov>ժI83!/ J?|i$d_(/;b49%Xealwv_̹@drp.l䧏<ɁJt~M[y 3[{ -endstream -endobj -2229 0 obj +oc;j~EЪ%9.>XJٚмD"e?&oLH:]~nX%l޹dQ@a~M~EA˟V.UM؀")JY4қ UC92"\ܡw1rlxнtaA*`JpZ+TX] >:|smea댍؄lv+:ɋD([ՈGJJOęIz&EnqJEz&Cxh+ rnnDgEaw'}|ܠꜱ$%É ׍ZVgHTC(I_H7}$¹%\yOaۋ'Oiȑi'%o2{PQwCX7%S?s~u'iiq쳀N 3w QE:u廕=L)Moi\d!<0ZER%qa` k)V&#RITxMk'ek) }I\qG#Ov1;dpV5 <^c ./#QEUhZOGUce5E«Ir&v1U4́SN7pkVe^qT"ĕ>UѪj "*Ú}I璘]KА}_pMV|~mv5ѰQ+-0"&'O` imh)6kּeyj/ۈjoA4XD1GvJC2X:.'I|7ߐO֗1_r:~8Up֡aEr}Cw {˱ l[]WVz,U+gR訑hiL][cm>ǘbT08٩VAx`! w +.rm){z"5xK09u@QjS_{|'/ VF.Z!z;jp.HR{hBA+i*?IPaHȅr!~o 2A9 SO}Ğ~4'FgCp|x{Z(HK a[,~m3,Ti=EXa}b9-[J"O{R1* +l7H.Hͺァ+2y޺ŦkPGvՔ|q+D@i㻽IhJeH=ou?60+٥r)tljRho1WLdO(b=5Ne@cH&͕!T +)Wz"_׶̉VfIfygEY< QJU$wxSGZcT* OTc bGn5ަ2TMehX=,p8 W.^ F`z@}4奞3  YcpìcQa馦m+rf]kLfz/Z=]n}x8HțQ;}7hG ZEףjL*m]۴gN>2\s5ϊ]ki'llG^}U?fMUJf&cvRma0$UnѓIjV;9I7By`CٖgRjQb60y ,>v}JbXgPx|<͒U%`լU.` +׽Y) C ÒNև0FN 0+jI& +{e~_'X^jRT:3䘙79r֗[X0%lOX?V'fmGmZlB ⺵ˑ1mfIIQywH(xtY8fRb5jt닮N;tKQҖ_םH<c8G`dP]j|j +&ɶc>(_&;y¦ Ԑ] +])Jb> w33ڞξ`ŝSvm߿LoN"uoqӖ[cg 7'BwGɈ +U|$]4bakЃ 6[qzBv_.Av$ϱWBȍ̡ m~|D^ʉ.8.L쏴ü62`dƅt|]E04$?kJ!Xg ^bӣJۈ }3f$4P-duAz)]{'a[`Bw~v9+A ^9Wfզ[J8~@%|F,ȁTh՛ڏ +rg3 +,Rp؋4eH?6jQx[-Ɓ-ظy'("_T۴$43/|,c +TXЄ M[JC~}Pq_yL+ ݢN~׈Tr +]uİE)bE{=leݶ  +;S IW4Zi*I.+NyqW .U>u} `l$DS3oFo3,Ti=EXt94E%$^F!}7S7kDs#+6'1rf*go&z* {Nl'{{i5,>gJSV~]X;1F!!u>c+&ZOqd4IGRiΌI zwko|i{2 [0B(-Tn/æe/oJ~PI!|!sdUg~2MCKK"K&==~[*ӡ$‘vbж#ǯhR|-u2 SyH+uFXޱ{A'P7&O1UaO_ˆ.esgO3LIRUMDYIZEn&rҖ?s%Lb?3Q*Bh{Kfr岿Qd Ԡ`uʼn~qvb}^Z 0G>Ѕ"ʸiX쐻1($j2jnGƁgNE^xl5v߲ɾ"ϔasRWԔ1Sbן6,0]8e +Ï!Z=Qo$l{Gky|-zWܿnE~#s'Fp^?Jm7EψP:ns/}묬Zb|QOdݢ}xnadW/יUhNo&H}nfnWb8`+ s}+RF5Pwd +-4L3<3vjSf}2dLs1$}۴X=\ V0'ޖ yT-d(3k%R`ǺZGfk򋝂'ҳ%xr +ݞ*dD)!h^Av΋l;,X#RhJ H!58+ȢKy K]R^B <>5(nӲbz){yC&Fos%6) +̱O|%#8|l%Yni7?b#@IF"MX ³}kxzA)&#i:ALkip¦?? )` hX)&ҭ"k[+^pDGh61xQwn,/,lؠ[O128j#mG'$zptr,4q`=vspEڐ7=pHV^VF["ӯϑt+R_:9ﭗ8bw=EW `q:P1qOL- !1=O;R=ɝdC6kt^XP뇁}Wy48#?RCTvd7G2"=X[ +%ܧRK{ݩI}$Y/eTȜ9{CՃ[*zQ (b%b>\B#!m/f=_L+CZ\=Ŋ;8f6,ǍxT!`=.Pkxypyq>FhRy\ޘ{ t4<]l'%*}A` p zۊ̤PRiieD)~&ڴoY0/xH,`i:L"eJ鹠w< GG"İc]g;qdZ*<.ۢێiUnMjo޳qo-l$Nc/7%i#;T[}׫{ʾ~Bh~P67.pR %{=gnd#$(v崚 '`HtR I0FVҲ&GyLFb OpxMa6<O#'gP'Jr#R̴|bkTVrf/e2vyi֫/kr|1PLOmx,+UvTV냗l!DY;z1u.q>W;ItM8MTFc: +إ`Ẇ<V_>e!SKЯB '==dH4V a⤿w01t%z*QsM  h,dlJd&e6vYQCBH%+"NnbՠdN*6a6}Q9-o :,GHr99[ U/`lMTt[WBՆcq6s<Ѝ@N A菉 P.Δ'F8QHĝJ7Mjo2jxrCF!>eH{rN N̆z]<J 1zo}D^) N 93y2Hb̙~O=R{o˾J3_>Y`8s=58ڭvUtR>gitL( @;Z5b> +\l2)ˁ/ *J[Xmц +s(>]7c[d3jVcwޠlp0dsȹ@:oVo.^ Яѩ%e: }F*.Q׌ s{R Vb8+psQ7qYKWԣK{Rs@In\Yy yA-JU%XInkGEt +Cn0fet.ЎFTsoXۇ :Uu8P7V]䜜ͮ,;.9lnECL4( y9)=Al<Ũ0RlORCsIbnY$K)b0m\ A0X9,{+HDlF-xEN4m4sP=5/0wcТC3WinrR͉P?( rNAes=&^5=_βZbֈU5ܿ6Λu!N\`(˴n(D< +SE0ԋ8tV} oxobBi&E=M$5J|ҏXk:k,#0礧VO\i֜[;.@% ,ܲ R& +PoT8׵iY³Vy^,2J o5VLos,A` <YSN&F^Ik;sCN3:=3>EC޼P2jMb}qp*qC"wb'f߅OK֧pDvu9'ԏ0f1bewyu3>//e˒[\{^Ruoce " 7{CܝkJCq6#eA:`DMYX'N@q~={ӇA6q#ςZCUrSטAx&k'%Y~.taZUCl޼3`amqOzD#vd_*î\^*8Qu2'kAxL=p7Rhl\YAn AkHe""] dsH )-}mcyKqIrȆe#,ۙGs;۰K;6oф4qX]A3̢By"v$ynǓ$B eL7[<KTе)ˮJن?⳷:ЀdzKį 6E-XOSC9cE~.|ml'tS4tTbv~<>ڧ,)ćBRǏ_&_(e;1zg)|M KG(Ud"˾)S$e;GH%XHu\$It\,F^K2m ]Eu頷pl8H e/`.$0 Q|b惇a,PHa1, +S} Z}9@+),8HU`qV);k5ӊRI#>sB:TNk^v& +Qf%QomW֪݆roo؊y>>Du]>2q<8]04CdjP9QEO篢Q-i%\ڙZ0JI g5u4^pm" 6yq*]خvdE~(j='è2%yz__?ڗ 99.5[+HjU + y$=ZZ᧲r.=xSQK*'qJRFR#&޷N A>Q"p1\9Qּ +b8v,Le/s]zQ٤ƴ˥Mvs+C6,R:}5-i6T S&J]^i9/XA)=ꖼpY^=fC3 U ~sU>4ߍš=-.chCt1SU3_AH3Bd+{jn(s<ثJTn +$1 <4ǿ S|l b2ʾF%6r.<)pNTvZ闏+U#u|RqP_~YC7C`0"NBJ6RzZQo)Wd] g7afMǾ. +*:QȻ q[Lzk8dfG`{a` k)V&h +X%认?Etde +_wR< :`ɧ*P6zkRu&.Ŷ 'p]=ll; X0/ۇqbTU\69O4yFAbZWVfzuvaJh%W!>|C[́m!@?`^XyGF);-aTJ@p+E ˁ!50X‹H!_^)LB[TP`bjt_!@&ԀQW¥k l$j _;Rď#O@g/pճlqG㤥g5z! ܾi4;epŲZf>eި7cU-tؙG^Su@P6FӴsFB\ +g_ӂR +)G1drsiz0z V݈Hx]XGe7ԟ?AͤU*vs =;@#iսƍQ-~DPFnTQ uhgGW1y#ĹUϐԥɄo+S{ Yd|/|QwRo`a# R}d믴)%e{ +[8N_?gon/</^2FlP}fc>,!Jɉv#&#Y9бdZ<XL{lpՙ ٴʗ&"L?")5tL_fTlģ4deP׺ՌjZ"=u#*B2=Vuv灯I/cKDhODΠlw,}wQy~D f% 997]`F꾙o^vXrG[Y.{9Pʅj5ccnF`V|EGbDh83ׁWh&2|=Y}T!11Ă}՘}d/!;êERWԴA5dXRFVE*%&/$Ӆ ͭ- J\Fm?L \v@Ń8<5k@⢒Meoky} ?j BEFȞ+wbcSzr=Λެ/6ob[1˯+c Bc o&֘:ɣ:8C!հ$Q83}<3`r8>C濐sI&Ab J-.imhb˙qsʼnaV\uu#2e8(eďߖ.D!7Fxcn  URn"ff$d 7۞ߪ]L-a YLU`ɼ">F}?2Ziأ8a4C^&paai" +&eI*XifKJT@9tF(ֱgq؜1Y2בY^n+1n;y޴9#~I 9 .I/ב.LݥJA-eѢwAN爢pjïo5R},D낃}cGKO͈]K&渝QЏ!eSV= +DG@|Skl;cr gHe<SZ&BV"{骴?>0w.WYuKa˄u׻)Sp *-Ifv側9&ZMPwvt)ЧR56 !?{o@񽎎j3CQtc%;^sL_{:7.RjPyP!3>rf3Yh?N ' +O KDJ1*C%\l1HJ3\klxJşPLC,y Ba?jÒ'trGf-xсJ6 weG1a"]IRif=afwJ];ވCe^SBN}^M+ڋ[$XJK<웊MGzTظ' j@61s?(ںo<4 Wp V.x^Tٍ@)|)$w}}?)\$Z9iMM[vҕ"8R}J13,C@ +/ZFRލ NtZB=&%X1C wwʳ&U)c 260*޴! kѹOJKƣwG4Ky5P&=ģF1/2JPcinƗf"MFun8V.%uy[i3vN#;2DZӈ1oB8{kJfȭl֞&AI`)V{[6_$J.ddAL;y<] eב)6~8Am9ÆGCT3j[n7Ga.CD^5Z(\A8'_|@G8gj\B-? +"|g3 pB!ڧ)G%J9lMo Z/ĮܑӦZegM<g}U|lr䝳~Yd}RtR(1_*J\-yu[JjrA%Z׋=Ls5'.Εp\ +Ǵl\*O_g7Jb ;lE˦O~7,'12w?d}5\YʢI(pm +_uu9c1{QZ%11A\JV;`fsX;:M4/  }j~V=kj=Њg$'o*C2_. +22&0Dܟub#Y?&OG'7Ei͔Ɲ' +z-Z)Zp)ҚrJjc0D#+ko{.^[4M)vZ(S$ksFUmn8pfeqQxPRed֕ +endstream +endobj +2232 0 obj << /Length1 1614 /Length2 22531 @@ -32538,7 +32784,7 @@ s K=(HfUrIQ$W0Lյ8Xk߉JMz{Pԓ>$ y"jrXfyLEtnyɎQ]Ex.B;[XnUOś1Ndɸ&Ό endstream endobj -2231 0 obj +2234 0 obj << /Length1 1616 /Length2 24418 @@ -32663,7 +32909,7 @@ c51 A2C05o]}I(&* ;@ar@\-@|5JZT .1T"aJk:bĖD| endstream endobj -2233 0 obj +2236 0 obj << /Length1 1620 /Length2 18673 @@ -32795,7 +33041,7 @@ ST ƀ{qKT%4 ~T:s# uBK@wI5=um9.tў25Ĭap5E4D(Xm{>o:=TAB[inQՃ:m.8UE%x~˹>:@CQBY: endstream endobj -2235 0 obj +2238 0 obj << /Length 1007 >> @@ -32865,16 +33111,16 @@ end endstream endobj -2236 0 obj +2239 0 obj << -/Length 1577 +/Length 1153 >> stream %!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-cmitt10-builtin-0) -%%Title: (TeX-cmitt10-builtin-0 TeX cmitt10-builtin 0) +%%BeginResource: CMap (TeX-cmitt10-lm-rep-cmitt-0) +%%Title: (TeX-cmitt10-lm-rep-cmitt-0 TeX cmitt10-lm-rep-cmitt 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin @@ -32882,23 +33128,22 @@ stream begincmap /CIDSystemInfo << /Registry (TeX) -/Ordering (cmitt10-builtin) +/Ordering (cmitt10-lm-rep-cmitt) /Supplement 0 >> def -/CMapName /TeX-cmitt10-builtin-0 def +/CMapName /TeX-cmitt10-lm-rep-cmitt-0 def /CMapType 2 def 1 begincodespacerange <00> endcodespacerange -6 beginbfrange +5 beginbfrange <07> <08> <03A5> <21> <23> <0021> <25> <26> <0025> <28> <5F> <0028> <61> <7E> <0061> - <03A5> endbfrange -71 beginbfchar +35 beginbfchar <00> <0393> <01> <2206> <02> <0398> @@ -32934,42 +33179,6 @@ endbfrange <27> <2019> <60> <2018> <7F> <00A8> -<80> <2423> - <0020> - <0393> - <2206> - <0398> - <039B> - <039E> - <03A0> - <03A3> - <03A8> - <00AD> - <00A0> - <2126> - <2191> - <2193> - <0027> - <00A1> - <00BF> - <0131> - <0237> - <0060> - <00B4> - <02C7> - <02D8> - <00AF> - <02DA> - <00B8> - <00DF> - <00E6> - <0153> - <00F8> - <00C6> - <0152> - <00D8> - <2423> - <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop @@ -32980,7 +33189,7 @@ end endstream endobj -2237 0 obj +2240 0 obj << /Length 1535 >> @@ -33086,16 +33295,16 @@ end endstream endobj -2238 0 obj +2241 0 obj << -/Length 1724 +/Length 1291 >> stream %!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-cmr10-builtin-0) -%%Title: (TeX-cmr10-builtin-0 TeX cmr10-builtin 0) +%%BeginResource: CMap (TeX-cmr10-lm-rep-cmrm-0) +%%Title: (TeX-cmr10-lm-rep-cmrm-0 TeX cmr10-lm-rep-cmrm 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin @@ -33103,24 +33312,23 @@ stream begincmap /CIDSystemInfo << /Registry (TeX) -/Ordering (cmr10-builtin) +/Ordering (cmr10-lm-rep-cmrm) /Supplement 0 >> def -/CMapName /TeX-cmr10-builtin-0 def +/CMapName /TeX-cmr10-lm-rep-cmrm-0 def /CMapType 2 def 1 begincodespacerange <00> endcodespacerange -7 beginbfrange +6 beginbfrange <07> <08> <03A5> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <61> <7A> <0061> <7B> <7C> <2013> - <03A5> endbfrange -78 beginbfchar +44 beginbfchar <00> <0393> <01> <2206> <02> <0398> @@ -33165,40 +33373,6 @@ endbfrange <7D> <02DD> <7E> <02DC> <7F> <00A8> - <0020> - <0393> - <2206> - <0398> - <039B> - <039E> - <03A0> - <03A3> - <03A8> - <00AD> - <00A0> - <2126> - <00660066> - <00660069> - <0066006C> - <006600660069> - <00660066006C> - <0131> - <0237> - <0060> - <00B4> - <02C7> - <02D8> - <00AF> - <02DA> - <00B8> - <00DF> - <00E6> - <0153> - <00F8> - <00C6> - <0152> - <00D8> - <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop @@ -33209,7 +33383,7 @@ end endstream endobj -2239 0 obj +2242 0 obj << /Length 2050 >> @@ -33355,16 +33529,16 @@ end endstream endobj -2240 0 obj +2243 0 obj << -/Length 1543 +/Length 1114 >> stream %!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-cmtt10-builtin-0) -%%Title: (TeX-cmtt10-builtin-0 TeX cmtt10-builtin 0) +%%BeginResource: CMap (TeX-cmtt10-lm-rep-cmtt-0) +%%Title: (TeX-cmtt10-lm-rep-cmtt-0 TeX cmtt10-lm-rep-cmtt 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin @@ -33372,22 +33546,21 @@ stream begincmap /CIDSystemInfo << /Registry (TeX) -/Ordering (cmtt10-builtin) +/Ordering (cmtt10-lm-rep-cmtt) /Supplement 0 >> def -/CMapName /TeX-cmtt10-builtin-0 def +/CMapName /TeX-cmtt10-lm-rep-cmtt-0 def /CMapType 2 def 1 begincodespacerange <00> endcodespacerange -5 beginbfrange +4 beginbfrange <07> <08> <03A5> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> - <03A5> endbfrange -70 beginbfchar +34 beginbfchar <00> <0393> <01> <2206> <02> <0398> @@ -33422,42 +33595,6 @@ endbfrange <27> <2019> <60> <2018> <7F> <00A8> -<80> <2423> - <0020> - <0393> - <2206> - <0398> - <039B> - <039E> - <03A0> - <03A3> - <03A8> - <00AD> - <00A0> - <2126> - <2191> - <2193> - <0027> - <00A1> - <00BF> - <0131> - <0237> - <0060> - <00B4> - <02C7> - <02D8> - <00AF> - <02DA> - <00B8> - <00DF> - <00E6> - <0153> - <00F8> - <00C6> - <0152> - <00D8> - <2423> - <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop @@ -33468,16 +33605,16 @@ end endstream endobj -2241 0 obj +2244 0 obj << -/Length 1538 +/Length 1109 >> stream %!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-cmtt8-builtin-0) -%%Title: (TeX-cmtt8-builtin-0 TeX cmtt8-builtin 0) +%%BeginResource: CMap (TeX-cmtt8-lm-rep-cmtt-0) +%%Title: (TeX-cmtt8-lm-rep-cmtt-0 TeX cmtt8-lm-rep-cmtt 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin @@ -33485,22 +33622,21 @@ stream begincmap /CIDSystemInfo << /Registry (TeX) -/Ordering (cmtt8-builtin) +/Ordering (cmtt8-lm-rep-cmtt) /Supplement 0 >> def -/CMapName /TeX-cmtt8-builtin-0 def +/CMapName /TeX-cmtt8-lm-rep-cmtt-0 def /CMapType 2 def 1 begincodespacerange <00> endcodespacerange -5 beginbfrange +4 beginbfrange <07> <08> <03A5> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> - <03A5> endbfrange -70 beginbfchar +34 beginbfchar <00> <0393> <01> <2206> <02> <0398> @@ -33535,42 +33671,6 @@ endbfrange <27> <2019> <60> <2018> <7F> <00A8> -<80> <2423> - <0020> - <0393> - <2206> - <0398> - <039B> - <039E> - <03A0> - <03A3> - <03A8> - <00AD> - <00A0> - <2126> - <2191> - <2193> - <0027> - <00A1> - <00BF> - <0131> - <0237> - <0060> - <00B4> - <02C7> - <02D8> - <00AF> - <02DA> - <00B8> - <00DF> - <00E6> - <0153> - <00F8> - <00C6> - <0152> - <00D8> - <2423> - <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop @@ -33581,16 +33681,16 @@ end endstream endobj -2242 0 obj +2245 0 obj << -/Length 1538 +/Length 1109 >> stream %!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-cmtt9-builtin-0) -%%Title: (TeX-cmtt9-builtin-0 TeX cmtt9-builtin 0) +%%BeginResource: CMap (TeX-cmtt9-lm-rep-cmtt-0) +%%Title: (TeX-cmtt9-lm-rep-cmtt-0 TeX cmtt9-lm-rep-cmtt 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin @@ -33598,22 +33698,21 @@ stream begincmap /CIDSystemInfo << /Registry (TeX) -/Ordering (cmtt9-builtin) +/Ordering (cmtt9-lm-rep-cmtt) /Supplement 0 >> def -/CMapName /TeX-cmtt9-builtin-0 def +/CMapName /TeX-cmtt9-lm-rep-cmtt-0 def /CMapType 2 def 1 begincodespacerange <00> endcodespacerange -5 beginbfrange +4 beginbfrange <07> <08> <03A5> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> - <03A5> endbfrange -70 beginbfchar +34 beginbfchar <00> <0393> <01> <2206> <02> <0398> @@ -33648,42 +33747,6 @@ endbfrange <27> <2019> <60> <2018> <7F> <00A8> -<80> <2423> - <0020> - <0393> - <2206> - <0398> - <039B> - <039E> - <03A0> - <03A3> - <03A8> - <00AD> - <00A0> - <2126> - <2191> - <2193> - <0027> - <00A1> - <00BF> - <0131> - <0237> - <0060> - <00B4> - <02C7> - <02D8> - <00AF> - <02DA> - <00B8> - <00DF> - <00E6> - <0153> - <00F8> - <00C6> - <0152> - <00D8> - <2423> - <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop @@ -33694,7 +33757,7 @@ end endstream endobj -2243 0 obj +2246 0 obj << /Length 853 >> @@ -33752,7 +33815,7 @@ end endstream endobj -2244 0 obj +2247 0 obj << /Length 1113 >> @@ -33830,7 +33893,7 @@ end endstream endobj -2245 0 obj +2248 0 obj << /Length 1477 >> @@ -33933,7 +33996,7 @@ end endstream endobj -2246 0 obj +2249 0 obj << /Length 1477 >> @@ -34036,7 +34099,7 @@ end endstream endobj -2247 0 obj +2250 0 obj << /Length 1482 >> @@ -34143,8 +34206,8 @@ endobj << /Type /ObjStm /N 100 -/First 974 -/Length 16950 +/First 973 +/Length 17544 >> stream 606 0 2163 57 2170 151 2172 269 610 328 614 386 618 444 622 502 626 560 630 618 @@ -34152,11 +34215,11 @@ stream 2178 1384 2180 1502 2177 1561 2182 1629 2184 1747 2185 1805 2186 1863 931 1921 930 1977 890 2034 891 2091 906 2148 887 2205 888 2262 2187 2319 883 2377 2188 2434 1046 2492 2181 2550 2191 2644 2193 2762 918 2821 889 2879 886 2937 882 2995 2058 3053 885 3112 2194 3170 884 3229 2042 3287 -2043 3345 2190 3404 2195 3498 2196 3518 2197 3889 2198 3992 2199 4151 2200 4174 2201 4629 2202 4758 -2203 5056 2204 5702 2206 6173 2207 6804 2208 7275 2210 7850 2212 8075 2214 8407 2216 8651 2218 8922 -2220 9270 2222 9782 2224 10014 2226 10460 2228 10686 2230 10917 2232 11396 2234 11972 2205 12401 1851 12842 -1782 13005 1460 13168 915 13329 914 13488 913 13648 970 13809 1016 13969 1254 14130 1127 14295 665 14465 -667 14655 666 14845 668 15035 881 15148 971 15261 1028 15376 1062 15496 1092 15616 1134 15736 1180 15856 +2043 3345 2190 3404 2195 3498 2197 3518 2198 3889 2199 3992 2200 4151 2202 4174 2203 4629 2205 4758 +2206 5056 2207 5702 2209 6173 2210 6804 2211 7275 2213 7850 2215 8075 2217 8319 2219 8667 2221 8893 +2223 9124 2225 9409 2227 9934 2229 10179 2231 10638 2233 10981 2235 11460 2237 12036 2208 12465 2196 12906 +2204 13124 2201 13246 1851 13652 1782 13815 1460 14005 915 14166 914 14356 913 14516 970 14706 1016 14895 +1254 15085 1127 15250 665 15420 667 15610 666 15800 668 15990 881 16103 971 16216 1028 16331 1062 16451 % 606 0 obj << /D [2164 0 R /XYZ 99.895 284.171 null] @@ -34393,31 +34456,31 @@ stream >> % 2195 0 obj [1000] -% 2196 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] % 2197 0 obj -[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] +[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] % 2198 0 obj -[853 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 747 0 0 0 0 0 0 0 0 0 0 0 0 0 0 881 0 0 0 0 0 0 0 0 0 0 0 0 234 0 881 767] +[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] % 2199 0 obj -[528 542] +[853 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 747 0 0 0 0 0 0 0 0 0 0 0 0 0 0 881 0 0 0 0 0 0 0 0 0 0 0 0 234 0 881 767] % 2200 0 obj +[528 542] +% 2202 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 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] -% 2201 0 obj +% 2203 0 obj [531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3] -% 2202 0 obj +% 2205 0 obj [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] -% 2203 0 obj +% 2206 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 761.9 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] -% 2204 0 obj +% 2207 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 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] -% 2206 0 obj +% 2209 0 obj [605 608 167 380 611 291 313 333 0 333 606 0 667 500 333 287 0 0 0 0 0 0 0 0 0 0 0 0 333 208 250 278 371 500 500 840 778 278 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 606 333 606 500 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 333 606 333 606 0 0 0 278 500 500 1000 500 500 333 1144 525 331 998 0 0 0 0 0 0 500 500 606 500 1000 333 979 424 331 827 0 0 667 0 278 500 500 500 500 606 500] -% 2207 0 obj +% 2210 0 obj [528 545 167 333 556 278 333 333 0 333 606 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 333 250 333 500 500 500 889 778 278 333 333 389 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 500 747 722 611 667 778 611 556 722 778 333 333 667 556 944 778 778 611 778 667 556 611 778 722 944 722 667 667 333 606 333 606 500 278 444 463 407 500 389 278 500 500 278 278 444 278 778 556 444 500 463 389 389 333 556 500 722 500 500 444] -% 2208 0 obj +% 2211 0 obj [611 611 167 333 611 333 333 333 0 333 606 0 667 500 333 333 0 0 0 0 0 0 0 0 0 0 0 0 333 227 250 278 402 500 500 889 833 278 333 333 444 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 667 722 833 611 556 833 833 389 389 778 611 1000 833 833 611 833 722 611 667 778 778 1000 667 667 667 333 606 333 606 500 278 500 611 444 611 500 389 556 611 333 333 611 333 889 611 556 611 611 389 444 333 611 556 833 500 556 500 310 606 310 606 0 0 0 333 500 500 1000 500 500 333 1000 611 389 1000 0 0 0 0 0 0 500 500 606 500 1000] -% 2210 0 obj +% 2213 0 obj << /Type /FontDescriptor /FontName /MNPEHI+CMEX10 @@ -34430,24 +34493,9 @@ stream /StemV 47 /XHeight 431 /CharSet (/radicalbigg) -/FontFile 2209 0 R ->> -% 2212 0 obj -<< -/Type /FontDescriptor -/FontName /SFGIZH+CMITT10 -/Flags 4 -/FontBBox [11 -233 669 696] -/Ascent 611 -/CapHeight 611 -/Descent -222 -/ItalicAngle -14 -/StemV 69 -/XHeight 431 -/CharSet (/A/C/D/E/H/I/K/L/M/P/T/V/a/c/comma/d/e/exclam/f/g/h/hyphen/i/k/m/n/o/p/parenleft/parenright/period/r/s/slash/t/w/x/y) -/FontFile 2211 0 R +/FontFile 2212 0 R >> -% 2214 0 obj +% 2215 0 obj << /Type /FontDescriptor /FontName /TPELEW+CMMI10 @@ -34460,44 +34508,74 @@ stream /StemV 72 /XHeight 431 /CharSet (/arrowhookleft/greater/less) -/FontFile 2213 0 R +/FontFile 2214 0 R >> -% 2216 0 obj +% 2217 0 obj << /Type /FontDescriptor -/FontName /SOSTRQ+CMR10 +/FontName /VKSUEJ+CMSY10 /Flags 4 -/FontBBox [-40 -250 1009 750] -/Ascent 694 +/FontBBox [-29 -960 1116 775] +/Ascent 750 /CapHeight 683 /Descent -194 -/ItalicAngle 0 -/StemV 69 +/ItalicAngle -14 +/StemV 40 /XHeight 431 -/CharSet (/bracketleft/bracketright/equal/parenleft/parenright/plus) -/FontFile 2215 0 R +/CharSet (/B/H/I/arrowleft/arrowright/asteriskmath/bar/bardbl/braceleft/braceright/element/greaterequal/lessequal/minus/negationslash/radical) +/FontFile 2216 0 R >> -% 2218 0 obj +% 2219 0 obj << /Type /FontDescriptor -/FontName /VKSUEJ+CMSY10 +/FontName /IKXQUG+PazoMath /Flags 4 -/FontBBox [-29 -960 1116 775] -/Ascent 750 +/FontBBox [-40 -283 878 946] +/Ascent 0 +/CapHeight 0 +/Descent 0 +/ItalicAngle 0 +/StemV 95 +/XHeight 0 +/CharSet (/infinity/summation) +/FontFile 2218 0 R +>> +% 2221 0 obj +<< +/Type /FontDescriptor +/FontName /DUJUUF+PazoMath-Italic +/Flags 4 +/FontBBox [-70 -277 902 733] +/Ascent 482 +/CapHeight 0 +/Descent -276 +/ItalicAngle -9 +/StemV 65 +/XHeight 0 +/CharSet (/alpha/beta) +/FontFile 2220 0 R +>> +% 2223 0 obj +<< +/Type /FontDescriptor +/FontName /NCCVYE+LMRoman10-Regular +/Flags 4 +/FontBBox [-430 -290 1417 1127] +/Ascent 694 /CapHeight 683 /Descent -194 -/ItalicAngle -14 -/StemV 40 +/ItalicAngle 0 +/StemV 69 /XHeight 431 -/CharSet (/B/H/I/arrowleft/arrowright/asteriskmath/bar/bardbl/braceleft/braceright/element/greaterequal/lessequal/minus/negationslash/radical) -/FontFile 2217 0 R +/CharSet (/bracketleft/bracketright/equal/parenleft/parenright/plus) +/FontFile 2222 0 R >> -% 2220 0 obj +% 2225 0 obj << /Type /FontDescriptor -/FontName /QGKXNM+CMTT10 +/FontName /XKYJEW+LMMono10-Regular /Flags 4 -/FontBBox [-4 -233 537 696] +/FontBBox [-451 -316 731 1016] /Ascent 611 /CapHeight 611 /Descent -222 @@ -34505,14 +34583,14 @@ stream /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/ampersand/asciitilde/asterisk/b/backslash/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/f/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotesingle/r/s/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) -/FontFile 2219 0 R +/FontFile 2224 0 R >> -% 2222 0 obj +% 2227 0 obj << /Type /FontDescriptor -/FontName /HZGQIC+CMTT8 +/FontName /XHVBMR+LMMono8-Regular /Flags 4 -/FontBBox [-5 -232 545 699] +/FontBBox [-456 -320 743 1014] /Ascent 611 /CapHeight 611 /Descent -222 @@ -34520,14 +34598,14 @@ stream /StemV 76 /XHeight 431 /CharSet (/b/c/e/i/l/n/p/r/s/t) -/FontFile 2221 0 R +/FontFile 2226 0 R >> -% 2224 0 obj +% 2229 0 obj << /Type /FontDescriptor -/FontName /RQJPKO+CMTT9 +/FontName /TWMFXI+LMMono9-Regular /Flags 4 -/FontBBox [-6 -233 542 698] +/FontBBox [-451 -318 734 1016] /Ascent 611 /CapHeight 611 /Descent -222 @@ -34535,39 +34613,24 @@ stream /StemV 74 /XHeight 431 /CharSet (/D/E/I/K/N/P/S/T/Y/a/ampersand/asterisk/b/c/colon/comma/d/e/equal/f/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotesingle/r/s/semicolon/six/slash/t/two/u/underscore/v/w/x/y/z/zero) -/FontFile 2223 0 R ->> -% 2226 0 obj -<< -/Type /FontDescriptor -/FontName /IKXQUG+PazoMath -/Flags 4 -/FontBBox [-40 -283 878 946] -/Ascent 0 -/CapHeight 0 -/Descent 0 -/ItalicAngle 0 -/StemV 95 -/XHeight 0 -/CharSet (/infinity/summation) -/FontFile 2225 0 R +/FontFile 2228 0 R >> -% 2228 0 obj +% 2231 0 obj << /Type /FontDescriptor -/FontName /DUJUUF+PazoMath-Italic +/FontName /XVBOSG+LMMono10-Italic /Flags 4 -/FontBBox [-70 -277 902 733] -/Ascent 482 -/CapHeight 0 -/Descent -276 -/ItalicAngle -9 -/StemV 65 -/XHeight 0 -/CharSet (/alpha/beta) -/FontFile 2227 0 R +/FontBBox [-491 -316 834 1016] +/Ascent 611 +/CapHeight 611 +/Descent -222 +/ItalicAngle -14 +/StemV 69 +/XHeight 431 +/CharSet (/A/C/D/E/H/I/K/L/M/P/T/V/a/c/comma/d/e/exclam/f/g/h/hyphen/i/k/m/n/o/p/parenleft/parenright/period/r/s/slash/t/w/x/y) +/FontFile 2230 0 R >> -% 2230 0 obj +% 2233 0 obj << /Type /FontDescriptor /FontName /BDDEWM+URWPalladioL-Bold @@ -34580,9 +34643,9 @@ stream /StemV 123 /XHeight 471 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/Y/Z/a/b/c/colon/comma/d/e/eight/emdash/endash/equal/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/question/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 2229 0 R +/FontFile 2232 0 R >> -% 2232 0 obj +% 2235 0 obj << /Type /FontDescriptor /FontName /GLTUCO+URWPalladioL-Roma @@ -34595,9 +34658,9 @@ stream /StemV 84 /XHeight 469 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/bracketleft/bracketright/bullet/c/colon/comma/d/e/eight/emdash/endash/equal/f/fi/five/fl/four/g/grave/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/section/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 2231 0 R +/FontFile 2234 0 R >> -% 2234 0 obj +% 2237 0 obj << /Type /FontDescriptor /FontName /LHHPET+URWPalladioL-Ital @@ -34610,446 +34673,466 @@ stream /StemV 78 /XHeight 482 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/X/a/b/bracketleft/bracketright/c/colon/comma/d/e/f/fi/five/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/period/plus/q/quoteright/r/s/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 2233 0 R +/FontFile 2236 0 R >> -% 2205 0 obj +% 2208 0 obj << /Type /Encoding /Differences [2/fi/fl 30/grave 38/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon 61/equal 63/question 65/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/bracketleft 93/bracketright 97/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 147/quotedblleft/quotedblright/bullet/endash/emdash 167/section] >> +% 2196 0 obj +<< +/Type /Encoding +/Differences [33/exclam 40/parenleft/parenright 44/comma/hyphen/period/slash 65/A 67/C/D/E 72/H/I 75/K/L/M 80/P 84/T 86/V 97/a 99/c/d/e/f/g/h/i 107/k 109/m/n/o/p 114/r/s/t 119/w/x/y] +>> +% 2204 0 obj +<< +/Type /Encoding +/Differences [40/parenleft/parenright 43/plus 61/equal 91/bracketleft 93/bracketright] +>> +% 2201 0 obj +<< +/Type /Encoding +/Differences [13/quotesingle 37/percent/ampersand 40/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four 54/six 56/eight/nine/colon/semicolon/less/equal/greater 65/A/B/C/D/E/F 72/H/I/J/K/L/M/N/O/P 82/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright 95/underscore 97/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 126/asciitilde] +>> % 1851 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MNPEHI+CMEX10 -/FontDescriptor 2210 0 R +/FontDescriptor 2213 0 R /FirstChar 114 /LastChar 114 /Widths 2195 0 R -/ToUnicode 2235 0 R +/ToUnicode 2238 0 R >> % 1782 0 obj << /Type /Font /Subtype /Type1 -/BaseFont /SFGIZH+CMITT10 -/FontDescriptor 2212 0 R +/BaseFont /XVBOSG+LMMono10-Italic +/FontDescriptor 2231 0 R /FirstChar 33 /LastChar 121 -/Widths 2196 0 R -/ToUnicode 2236 0 R +/Widths 2197 0 R +/Encoding 2196 0 R +/ToUnicode 2239 0 R >> % 1460 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TPELEW+CMMI10 -/FontDescriptor 2214 0 R +/FontDescriptor 2215 0 R /FirstChar 44 /LastChar 62 -/Widths 2197 0 R -/ToUnicode 2237 0 R +/Widths 2198 0 R +/ToUnicode 2240 0 R >> % 915 0 obj << /Type /Font /Subtype /Type1 -/BaseFont /SOSTRQ+CMR10 -/FontDescriptor 2216 0 R +/BaseFont /NCCVYE+LMRoman10-Regular +/FontDescriptor 2223 0 R /FirstChar 40 /LastChar 93 -/Widths 2202 0 R -/ToUnicode 2238 0 R +/Widths 2205 0 R +/Encoding 2204 0 R +/ToUnicode 2241 0 R >> % 914 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VKSUEJ+CMSY10 -/FontDescriptor 2218 0 R +/FontDescriptor 2217 0 R /FirstChar 0 /LastChar 112 -/Widths 2203 0 R -/ToUnicode 2239 0 R +/Widths 2206 0 R +/ToUnicode 2242 0 R >> % 913 0 obj << /Type /Font /Subtype /Type1 -/BaseFont /QGKXNM+CMTT10 -/FontDescriptor 2220 0 R +/BaseFont /XKYJEW+LMMono10-Regular +/FontDescriptor 2225 0 R /FirstChar 13 /LastChar 126 -/Widths 2204 0 R -/ToUnicode 2240 0 R +/Widths 2207 0 R +/Encoding 2201 0 R +/ToUnicode 2243 0 R >> % 970 0 obj << /Type /Font /Subtype /Type1 -/BaseFont /HZGQIC+CMTT8 -/FontDescriptor 2222 0 R +/BaseFont /XHVBMR+LMMono8-Regular +/FontDescriptor 2227 0 R /FirstChar 98 /LastChar 116 -/Widths 2201 0 R -/ToUnicode 2241 0 R +/Widths 2203 0 R +/Encoding 2201 0 R +/ToUnicode 2244 0 R >> % 1016 0 obj << /Type /Font /Subtype /Type1 -/BaseFont /RQJPKO+CMTT9 -/FontDescriptor 2224 0 R +/BaseFont /TWMFXI+LMMono9-Regular +/FontDescriptor 2229 0 R /FirstChar 13 /LastChar 122 -/Widths 2200 0 R -/ToUnicode 2242 0 R +/Widths 2202 0 R +/Encoding 2201 0 R +/ToUnicode 2245 0 R >> % 1254 0 obj << /Type /Font /Subtype /Type1 /BaseFont /IKXQUG+PazoMath -/FontDescriptor 2226 0 R +/FontDescriptor 2219 0 R /FirstChar 165 /LastChar 229 -/Widths 2198 0 R -/ToUnicode 2243 0 R +/Widths 2199 0 R +/ToUnicode 2246 0 R >> % 1127 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DUJUUF+PazoMath-Italic -/FontDescriptor 2228 0 R +/FontDescriptor 2221 0 R /FirstChar 97 /LastChar 98 -/Widths 2199 0 R -/ToUnicode 2244 0 R +/Widths 2200 0 R +/ToUnicode 2247 0 R >> % 665 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BDDEWM+URWPalladioL-Bold -/FontDescriptor 2230 0 R +/FontDescriptor 2233 0 R /FirstChar 2 /LastChar 151 -/Widths 2208 0 R -/Encoding 2205 0 R -/ToUnicode 2245 0 R +/Widths 2211 0 R +/Encoding 2208 0 R +/ToUnicode 2248 0 R >> % 667 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GLTUCO+URWPalladioL-Roma -/FontDescriptor 2232 0 R +/FontDescriptor 2235 0 R /FirstChar 2 /LastChar 167 -/Widths 2206 0 R -/Encoding 2205 0 R -/ToUnicode 2246 0 R +/Widths 2209 0 R +/Encoding 2208 0 R +/ToUnicode 2249 0 R >> % 666 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LHHPET+URWPalladioL-Ital -/FontDescriptor 2234 0 R +/FontDescriptor 2237 0 R /FirstChar 2 /LastChar 122 -/Widths 2207 0 R -/Encoding 2205 0 R -/ToUnicode 2247 0 R +/Widths 2210 0 R +/Encoding 2208 0 R +/ToUnicode 2250 0 R >> % 668 0 obj << /Type /Pages /Count 6 -/Parent 2248 0 R +/Parent 2251 0 R /Kids [658 0 R 671 0 R 717 0 R 774 0 R 821 0 R 861 0 R] >> % 881 0 obj << /Type /Pages /Count 6 -/Parent 2248 0 R +/Parent 2251 0 R /Kids [879 0 R 898 0 R 910 0 R 923 0 R 935 0 R 940 0 R] >> % 971 0 obj << /Type /Pages /Count 6 -/Parent 2248 0 R +/Parent 2251 0 R /Kids [953 0 R 975 0 R 986 0 R 994 0 R 1005 0 R 1021 0 R] >> % 1028 0 obj << /Type /Pages /Count 6 -/Parent 2248 0 R +/Parent 2251 0 R /Kids [1025 0 R 1030 0 R 1035 0 R 1042 0 R 1049 0 R 1054 0 R] >> % 1062 0 obj << /Type /Pages /Count 6 -/Parent 2248 0 R +/Parent 2251 0 R /Kids [1059 0 R 1065 0 R 1069 0 R 1073 0 R 1077 0 R 1083 0 R] >> + +endstream +endobj +2252 0 obj +<< +/Type /ObjStm +/N 100 +/First 923 +/Length 10703 +>> +stream +1092 0 1134 120 1180 240 1222 360 1281 480 1333 600 1382 720 1431 840 1471 960 1510 1080 +1557 1200 1600 1320 1638 1440 1674 1560 1713 1680 1754 1800 1783 1920 1817 2040 1855 2160 1890 2280 +1928 2400 1966 2520 2002 2640 2057 2760 2158 2880 2189 3000 2251 3084 2253 3202 2254 3323 2255 3444 +2256 3565 2257 3686 2258 3761 2259 3866 655 3935 651 4009 647 4097 643 4185 639 4273 635 4361 +631 4449 627 4537 623 4625 619 4713 615 4801 611 4889 607 4977 602 5065 598 5139 594 5251 +590 5325 586 5413 582 5501 578 5575 574 5700 570 5760 566 5885 562 5959 558 6047 554 6135 +550 6223 546 6311 542 6385 538 6510 534 6584 530 6672 526 6760 522 6848 518 6936 514 7010 +510 7135 506 7209 502 7297 498 7385 494 7459 490 7584 486 7658 482 7746 478 7834 474 7922 +470 8010 466 8098 462 8186 458 8274 454 8362 450 8450 446 8538 442 8626 438 8714 434 8802 +430 8890 426 8978 422 9052 418 9178 414 9252 410 9340 406 9428 401 9516 397 9604 393 9692 % 1092 0 obj << /Type /Pages /Count 6 -/Parent 2248 0 R +/Parent 2251 0 R /Kids [1089 0 R 1096 0 R 1103 0 R 1109 0 R 1113 0 R 1124 0 R] >> % 1134 0 obj << /Type /Pages /Count 6 -/Parent 2249 0 R +/Parent 2253 0 R /Kids [1131 0 R 1141 0 R 1147 0 R 1158 0 R 1164 0 R 1171 0 R] >> % 1180 0 obj << /Type /Pages /Count 6 -/Parent 2249 0 R +/Parent 2253 0 R /Kids [1176 0 R 1185 0 R 1193 0 R 1198 0 R 1206 0 R 1211 0 R] >> - -endstream -endobj -2250 0 obj -<< -/Type /ObjStm -/N 100 -/First 920 -/Length 10604 ->> -stream -1222 0 1281 120 1333 240 1382 360 1431 480 1471 600 1510 720 1557 840 1600 960 1638 1080 -1674 1200 1713 1320 1754 1440 1783 1560 1817 1680 1855 1800 1890 1920 1928 2040 1966 2160 2002 2280 -2057 2400 2158 2520 2189 2640 2248 2724 2249 2842 2251 2963 2252 3084 2253 3205 2254 3326 2255 3401 -2256 3506 655 3575 651 3649 647 3737 643 3825 639 3913 635 4001 631 4089 627 4177 623 4265 -619 4353 615 4441 611 4529 607 4617 602 4705 598 4779 594 4891 590 4965 586 5053 582 5141 -578 5215 574 5340 570 5400 566 5525 562 5599 558 5687 554 5775 550 5863 546 5951 542 6025 -538 6150 534 6224 530 6312 526 6400 522 6488 518 6576 514 6650 510 6775 506 6849 502 6937 -498 7025 494 7099 490 7224 486 7298 482 7386 478 7474 474 7562 470 7650 466 7738 462 7826 -458 7914 454 8002 450 8090 446 8178 442 8266 438 8354 434 8442 430 8530 426 8618 422 8692 -418 8818 414 8892 410 8980 406 9068 401 9156 397 9244 393 9332 389 9420 385 9508 381 9596 % 1222 0 obj << /Type /Pages /Count 6 -/Parent 2249 0 R +/Parent 2253 0 R /Kids [1218 0 R 1224 0 R 1237 0 R 1244 0 R 1251 0 R 1262 0 R] >> % 1281 0 obj << /Type /Pages /Count 6 -/Parent 2249 0 R +/Parent 2253 0 R /Kids [1278 0 R 1285 0 R 1296 0 R 1302 0 R 1313 0 R 1318 0 R] >> % 1333 0 obj << /Type /Pages /Count 6 -/Parent 2249 0 R +/Parent 2253 0 R /Kids [1329 0 R 1335 0 R 1344 0 R 1350 0 R 1358 0 R 1365 0 R] >> % 1382 0 obj << /Type /Pages /Count 6 -/Parent 2249 0 R +/Parent 2253 0 R /Kids [1379 0 R 1387 0 R 1396 0 R 1404 0 R 1408 0 R 1423 0 R] >> % 1431 0 obj << /Type /Pages /Count 6 -/Parent 2251 0 R +/Parent 2254 0 R /Kids [1428 0 R 1435 0 R 1442 0 R 1446 0 R 1451 0 R 1457 0 R] >> % 1471 0 obj << /Type /Pages /Count 6 -/Parent 2251 0 R +/Parent 2254 0 R /Kids [1463 0 R 1474 0 R 1479 0 R 1488 0 R 1496 0 R 1501 0 R] >> % 1510 0 obj << /Type /Pages /Count 6 -/Parent 2251 0 R +/Parent 2254 0 R /Kids [1507 0 R 1512 0 R 1520 0 R 1525 0 R 1533 0 R 1539 0 R] >> % 1557 0 obj << /Type /Pages /Count 6 -/Parent 2251 0 R +/Parent 2254 0 R /Kids [1548 0 R 1562 0 R 1566 0 R 1579 0 R 1585 0 R 1592 0 R] >> % 1600 0 obj << /Type /Pages /Count 6 -/Parent 2251 0 R +/Parent 2254 0 R /Kids [1596 0 R 1604 0 R 1609 0 R 1618 0 R 1626 0 R 1630 0 R] >> % 1638 0 obj << /Type /Pages /Count 6 -/Parent 2251 0 R +/Parent 2254 0 R /Kids [1635 0 R 1640 0 R 1647 0 R 1652 0 R 1658 0 R 1664 0 R] >> % 1674 0 obj << /Type /Pages /Count 6 -/Parent 2252 0 R +/Parent 2255 0 R /Kids [1670 0 R 1677 0 R 1684 0 R 1691 0 R 1695 0 R 1705 0 R] >> % 1713 0 obj << /Type /Pages /Count 6 -/Parent 2252 0 R +/Parent 2255 0 R /Kids [1710 0 R 1715 0 R 1728 0 R 1732 0 R 1738 0 R 1744 0 R] >> % 1754 0 obj << /Type /Pages /Count 6 -/Parent 2252 0 R +/Parent 2255 0 R /Kids [1751 0 R 1756 0 R 1760 0 R 1764 0 R 1768 0 R 1772 0 R] >> % 1783 0 obj << /Type /Pages /Count 6 -/Parent 2252 0 R +/Parent 2255 0 R /Kids [1776 0 R 1785 0 R 1789 0 R 1796 0 R 1800 0 R 1807 0 R] >> % 1817 0 obj << /Type /Pages /Count 6 -/Parent 2252 0 R +/Parent 2255 0 R /Kids [1811 0 R 1819 0 R 1824 0 R 1831 0 R 1835 0 R 1842 0 R] >> % 1855 0 obj << /Type /Pages /Count 6 -/Parent 2252 0 R +/Parent 2255 0 R /Kids [1846 0 R 1857 0 R 1862 0 R 1869 0 R 1875 0 R 1879 0 R] >> % 1890 0 obj << /Type /Pages /Count 6 -/Parent 2253 0 R +/Parent 2256 0 R /Kids [1885 0 R 1892 0 R 1898 0 R 1904 0 R 1909 0 R 1916 0 R] >> % 1928 0 obj << /Type /Pages /Count 6 -/Parent 2253 0 R +/Parent 2256 0 R /Kids [1923 0 R 1932 0 R 1939 0 R 1946 0 R 1952 0 R 1956 0 R] >> % 1966 0 obj << /Type /Pages /Count 6 -/Parent 2253 0 R +/Parent 2256 0 R /Kids [1962 0 R 1972 0 R 1976 0 R 1984 0 R 1989 0 R 1993 0 R] >> % 2002 0 obj << /Type /Pages /Count 6 -/Parent 2253 0 R +/Parent 2256 0 R /Kids [1999 0 R 2004 0 R 2011 0 R 2022 0 R 2027 0 R 2037 0 R] >> % 2057 0 obj << /Type /Pages /Count 6 -/Parent 2253 0 R +/Parent 2256 0 R /Kids [2052 0 R 2062 0 R 2073 0 R 2101 0 R 2121 0 R 2139 0 R] >> % 2158 0 obj << /Type /Pages /Count 6 -/Parent 2253 0 R +/Parent 2256 0 R /Kids [2155 0 R 2160 0 R 2164 0 R 2170 0 R 2174 0 R 2178 0 R] >> % 2189 0 obj << /Type /Pages /Count 2 -/Parent 2254 0 R +/Parent 2257 0 R /Kids [2182 0 R 2191 0 R] >> -% 2248 0 obj +% 2251 0 obj << /Type /Pages /Count 36 -/Parent 2255 0 R +/Parent 2258 0 R /Kids [668 0 R 881 0 R 971 0 R 1028 0 R 1062 0 R 1092 0 R] >> -% 2249 0 obj +% 2253 0 obj << /Type /Pages /Count 36 -/Parent 2255 0 R +/Parent 2258 0 R /Kids [1134 0 R 1180 0 R 1222 0 R 1281 0 R 1333 0 R 1382 0 R] >> -% 2251 0 obj +% 2254 0 obj << /Type /Pages /Count 36 -/Parent 2255 0 R +/Parent 2258 0 R /Kids [1431 0 R 1471 0 R 1510 0 R 1557 0 R 1600 0 R 1638 0 R] >> -% 2252 0 obj +% 2255 0 obj << /Type /Pages /Count 36 -/Parent 2255 0 R +/Parent 2258 0 R /Kids [1674 0 R 1713 0 R 1754 0 R 1783 0 R 1817 0 R 1855 0 R] >> -% 2253 0 obj +% 2256 0 obj << /Type /Pages /Count 36 -/Parent 2255 0 R +/Parent 2258 0 R /Kids [1890 0 R 1928 0 R 1966 0 R 2002 0 R 2057 0 R 2158 0 R] >> -% 2254 0 obj +% 2257 0 obj << /Type /Pages /Count 2 -/Parent 2255 0 R +/Parent 2258 0 R /Kids [2189 0 R] >> -% 2255 0 obj +% 2258 0 obj << /Type /Pages /Count 182 -/Kids [2248 0 R 2249 0 R 2251 0 R 2252 0 R 2253 0 R 2254 0 R] +/Kids [2251 0 R 2253 0 R 2254 0 R 2255 0 R 2256 0 R 2257 0 R] >> -% 2256 0 obj +% 2259 0 obj << /Type /Outlines /First 4 0 R @@ -35589,6 +35672,27 @@ stream /Prev 389 0 R /Next 397 0 R >> + +endstream +endobj +2260 0 obj +<< +/Type /ObjStm +/N 100 +/First 862 +/Length 9899 +>> +stream +389 0 385 88 381 176 377 264 373 352 369 440 365 528 361 616 357 704 353 792 +349 880 345 968 341 1056 337 1144 333 1232 329 1320 325 1408 321 1496 317 1584 313 1672 +309 1746 305 1872 301 1946 297 2034 293 2122 289 2196 285 2321 281 2395 277 2483 273 2571 +269 2659 265 2747 261 2835 257 2923 253 3011 249 3099 245 3187 241 3275 237 3363 233 3451 +229 3539 225 3627 221 3701 217 3826 213 3899 209 3986 205 4060 200 4148 196 4236 192 4324 +188 4412 184 4486 180 4612 176 4686 172 4774 168 4862 164 4950 160 5038 156 5126 152 5214 +148 5302 144 5390 140 5478 136 5566 132 5654 128 5742 124 5830 120 5918 116 6006 112 6094 +108 6182 104 6256 100 6382 96 6453 92 6536 88 6618 84 6700 80 6782 76 6864 72 6946 +68 7028 64 7110 60 7192 56 7274 52 7356 48 7438 44 7520 40 7589 36 7698 32 7818 +28 7887 24 7943 20 8062 16 8144 12 8213 8 8330 4 8395 2261 8488 2262 8684 2263 8857 % 389 0 obj << /Title 390 0 R @@ -35613,27 +35717,6 @@ stream /Prev 377 0 R /Next 385 0 R >> - -endstream -endobj -2257 0 obj -<< -/Type /ObjStm -/N 100 -/First 865 -/Length 10172 ->> -stream -377 0 373 88 369 176 365 264 361 352 357 440 353 528 349 616 345 704 341 792 -337 880 333 968 329 1056 325 1144 321 1232 317 1320 313 1408 309 1482 305 1608 301 1682 -297 1770 293 1858 289 1932 285 2057 281 2131 277 2219 273 2307 269 2395 265 2483 261 2571 -257 2659 253 2747 249 2835 245 2923 241 3011 237 3099 233 3187 229 3275 225 3363 221 3437 -217 3562 213 3635 209 3722 205 3796 200 3884 196 3972 192 4060 188 4148 184 4222 180 4348 -176 4422 172 4510 168 4598 164 4686 160 4774 156 4862 152 4950 148 5038 144 5126 140 5214 -136 5302 132 5390 128 5478 124 5566 120 5654 116 5742 112 5830 108 5918 104 5992 100 6118 -96 6189 92 6272 88 6354 84 6436 80 6518 76 6600 72 6682 68 6764 64 6846 60 6928 -56 7010 52 7092 48 7174 44 7256 40 7325 36 7434 32 7554 28 7623 24 7679 20 7798 -16 7880 12 7949 8 8066 4 8131 2258 8224 2259 8420 2260 8593 2261 8773 2262 8950 2263 9127 % 377 0 obj << /Title 378 0 R @@ -36391,570 +36474,555 @@ stream << /Title 5 0 R /A 1 0 R -/Parent 2256 0 R +/Parent 2259 0 R /First 8 0 R /Last 598 0 R /Count -13 >> -% 2258 0 obj +% 2261 0 obj << /Names [(Doc-Start) 664 0 R (Hfootnote.1) 916 0 R (Hfootnote.2) 917 0 R (Hfootnote.3) 969 0 R (Hfootnote.4) 1965 0 R (Hfootnote.5) 2017 0 R] /Limits [(Doc-Start) (Hfootnote.5)] >> -% 2259 0 obj +% 2262 0 obj << /Names [(Item.1) 943 0 R (Item.10) 957 0 R (Item.100) 1698 0 R (Item.101) 1699 0 R (Item.102) 1700 0 R (Item.103) 1718 0 R] /Limits [(Item.1) (Item.103)] >> -% 2260 0 obj +% 2263 0 obj << /Names [(Item.104) 1719 0 R (Item.105) 1720 0 R (Item.106) 1721 0 R (Item.107) 1722 0 R (Item.108) 1723 0 R (Item.109) 1724 0 R] /Limits [(Item.104) (Item.109)] >> -% 2261 0 obj + +endstream +endobj +2265 0 obj +<< +/Type /ObjStm +/N 100 +/First 1037 +/Length 20320 +>> +stream +2264 0 2266 177 2267 354 2268 534 2269 712 2270 892 2271 1070 2272 1247 2273 1412 2274 1578 +2275 1744 2276 1916 2277 2086 2278 2258 2279 2428 2280 2600 2281 2769 2282 2938 2283 3110 2284 3280 +2285 3452 2286 3622 2287 3794 2288 3983 2289 4173 2290 4396 2291 4617 2292 4822 2293 5012 2294 5194 +2295 5390 2296 5615 2297 5835 2298 6066 2299 6302 2300 6534 2301 6745 2302 6922 2303 7100 2304 7280 +2305 7459 2306 7639 2307 7818 2308 7998 2309 8177 2310 8357 2311 8536 2312 8716 2313 8894 2314 9072 +2315 9252 2316 9424 2317 9596 2318 9766 2319 9938 2320 10108 2321 10280 2322 10449 2323 10618 2324 10790 +2325 10960 2326 11132 2327 11302 2328 11474 2329 11644 2330 11816 2331 11986 2332 12182 2333 12379 2334 12575 +2335 12762 2336 12944 2337 13138 2338 13368 2339 13593 2340 13812 2341 14039 2342 14265 2343 14487 2344 14712 +2345 14942 2346 15171 2347 15399 2348 15621 2349 15849 2350 16075 2351 16297 2352 16519 2353 16760 2354 17022 +2355 17278 2356 17544 2357 17814 2358 18076 2359 18338 2360 18548 2361 18728 2362 18904 2363 19073 2364 19169 +% 2264 0 obj << /Names [(Item.11) 958 0 R (Item.110) 1725 0 R (Item.111) 1726 0 R (Item.112) 1735 0 R (Item.113) 1736 0 R (Item.114) 1741 0 R] /Limits [(Item.11) (Item.114)] >> -% 2262 0 obj +% 2266 0 obj << /Names [(Item.115) 1742 0 R (Item.116) 1747 0 R (Item.117) 1748 0 R (Item.118) 1749 0 R (Item.119) 1779 0 R (Item.12) 959 0 R] /Limits [(Item.115) (Item.12)] >> -% 2263 0 obj -<< -/Names [(Item.120) 1780 0 R (Item.121) 1781 0 R (Item.122) 1792 0 R (Item.123) 1793 0 R (Item.124) 1794 0 R (Item.125) 1803 0 R] -/Limits [(Item.120) (Item.125)] ->> - -endstream -endobj -2265 0 obj +% 2267 0 obj << -/Type /ObjStm -/N 100 -/First 1037 -/Length 20119 ->> -stream -2264 0 2266 178 2267 358 2268 536 2269 713 2270 878 2271 1044 2272 1210 2273 1382 2274 1552 -2275 1724 2276 1894 2277 2066 2278 2235 2279 2404 2280 2576 2281 2746 2282 2918 2283 3088 2284 3260 -2285 3449 2286 3639 2287 3862 2288 4083 2289 4288 2290 4478 2291 4660 2292 4856 2293 5081 2294 5301 -2295 5532 2296 5768 2297 6000 2298 6211 2299 6388 2300 6566 2301 6746 2302 6925 2303 7105 2304 7284 -2305 7464 2306 7643 2307 7823 2308 8002 2309 8182 2310 8360 2311 8538 2312 8718 2313 8890 2314 9062 -2315 9232 2316 9404 2317 9574 2318 9746 2319 9915 2320 10084 2321 10256 2322 10426 2323 10598 2324 10768 -2325 10940 2326 11110 2327 11282 2328 11452 2329 11648 2330 11845 2331 12041 2332 12228 2333 12410 2334 12604 -2335 12834 2336 13059 2337 13278 2338 13505 2339 13731 2340 13953 2341 14178 2342 14408 2343 14637 2344 14865 -2345 15087 2346 15315 2347 15541 2348 15763 2349 15985 2350 16226 2351 16488 2352 16744 2353 17010 2354 17280 -2355 17542 2356 17804 2357 18014 2358 18194 2359 18370 2360 18539 2361 18635 2362 18749 2363 18861 2364 18972 -% 2264 0 obj +/Names [(Item.120) 1780 0 R (Item.121) 1781 0 R (Item.122) 1792 0 R (Item.123) 1793 0 R (Item.124) 1794 0 R (Item.125) 1803 0 R] +/Limits [(Item.120) (Item.125)] +>> +% 2268 0 obj << /Names [(Item.126) 1804 0 R (Item.127) 1805 0 R (Item.128) 1814 0 R (Item.129) 1815 0 R (Item.13) 960 0 R (Item.130) 1816 0 R] /Limits [(Item.126) (Item.130)] >> -% 2266 0 obj +% 2269 0 obj << /Names [(Item.131) 1827 0 R (Item.132) 1828 0 R (Item.133) 1829 0 R (Item.134) 1838 0 R (Item.135) 1839 0 R (Item.136) 1840 0 R] /Limits [(Item.131) (Item.136)] >> -% 2267 0 obj +% 2270 0 obj << /Names [(Item.137) 1849 0 R (Item.138) 1850 0 R (Item.139) 1852 0 R (Item.14) 961 0 R (Item.140) 1853 0 R (Item.141) 1854 0 R] /Limits [(Item.137) (Item.141)] >> -% 2268 0 obj +% 2271 0 obj << /Names [(Item.142) 1860 0 R (Item.143) 1865 0 R (Item.144) 2066 0 R (Item.145) 2067 0 R (Item.146) 2167 0 R (Item.15) 962 0 R] /Limits [(Item.142) (Item.15)] >> -% 2269 0 obj +% 2272 0 obj << /Names [(Item.16) 963 0 R (Item.17) 964 0 R (Item.18) 965 0 R (Item.19) 966 0 R (Item.2) 944 0 R (Item.20) 967 0 R] /Limits [(Item.16) (Item.20)] >> -% 2270 0 obj +% 2273 0 obj << /Names [(Item.21) 968 0 R (Item.22) 978 0 R (Item.23) 979 0 R (Item.24) 980 0 R (Item.25) 981 0 R (Item.26) 982 0 R] /Limits [(Item.21) (Item.26)] >> -% 2271 0 obj +% 2274 0 obj << /Names [(Item.27) 983 0 R (Item.28) 997 0 R (Item.29) 998 0 R (Item.3) 945 0 R (Item.30) 999 0 R (Item.31) 1000 0 R] /Limits [(Item.27) (Item.31)] >> -% 2272 0 obj +% 2275 0 obj << /Names [(Item.32) 1001 0 R (Item.33) 1008 0 R (Item.34) 1009 0 R (Item.35) 1010 0 R (Item.36) 1011 0 R (Item.37) 1012 0 R] /Limits [(Item.32) (Item.37)] >> -% 2273 0 obj +% 2276 0 obj << /Names [(Item.38) 1013 0 R (Item.39) 1014 0 R (Item.4) 946 0 R (Item.40) 1015 0 R (Item.41) 1057 0 R (Item.42) 1150 0 R] /Limits [(Item.38) (Item.42)] >> -% 2274 0 obj +% 2277 0 obj << /Names [(Item.43) 1179 0 R (Item.44) 1201 0 R (Item.45) 1227 0 R (Item.46) 1399 0 R (Item.47) 1400 0 R (Item.48) 1401 0 R] /Limits [(Item.43) (Item.48)] >> -% 2275 0 obj +% 2278 0 obj << /Names [(Item.49) 1454 0 R (Item.5) 947 0 R (Item.50) 1461 0 R (Item.51) 1466 0 R (Item.52) 1467 0 R (Item.53) 1468 0 R] /Limits [(Item.49) (Item.53)] >> -% 2276 0 obj +% 2279 0 obj << /Names [(Item.54) 1469 0 R (Item.55) 1470 0 R (Item.56) 1482 0 R (Item.57) 1483 0 R (Item.58) 1484 0 R (Item.59) 1491 0 R] /Limits [(Item.54) (Item.59)] >> -% 2277 0 obj +% 2280 0 obj << /Names [(Item.6) 948 0 R (Item.60) 1515 0 R (Item.61) 1516 0 R (Item.62) 1523 0 R (Item.63) 1528 0 R (Item.64) 1529 0 R] /Limits [(Item.6) (Item.64)] >> -% 2278 0 obj +% 2281 0 obj << /Names [(Item.65) 1530 0 R (Item.66) 1542 0 R (Item.67) 1543 0 R (Item.68) 1544 0 R (Item.69) 1545 0 R (Item.7) 949 0 R] /Limits [(Item.65) (Item.7)] >> -% 2279 0 obj +% 2282 0 obj << /Names [(Item.70) 1546 0 R (Item.71) 1551 0 R (Item.72) 1552 0 R (Item.73) 1553 0 R (Item.74) 1554 0 R (Item.75) 1555 0 R] /Limits [(Item.70) (Item.75)] >> -% 2280 0 obj +% 2283 0 obj << /Names [(Item.76) 1556 0 R (Item.77) 1569 0 R (Item.78) 1570 0 R (Item.79) 1571 0 R (Item.8) 950 0 R (Item.80) 1572 0 R] /Limits [(Item.76) (Item.80)] >> -% 2281 0 obj +% 2284 0 obj << /Names [(Item.81) 1573 0 R (Item.82) 1574 0 R (Item.83) 1575 0 R (Item.84) 1588 0 R (Item.85) 1599 0 R (Item.86) 1612 0 R] /Limits [(Item.81) (Item.86)] >> -% 2282 0 obj +% 2285 0 obj << /Names [(Item.87) 1613 0 R (Item.88) 1621 0 R (Item.89) 1622 0 R (Item.9) 956 0 R (Item.90) 1643 0 R (Item.91) 1644 0 R] /Limits [(Item.87) (Item.91)] >> -% 2283 0 obj +% 2286 0 obj << /Names [(Item.92) 1655 0 R (Item.93) 1661 0 R (Item.94) 1667 0 R (Item.95) 1673 0 R (Item.96) 1680 0 R (Item.97) 1681 0 R] /Limits [(Item.92) (Item.97)] >> -% 2284 0 obj +% 2287 0 obj << /Names [(Item.98) 1687 0 R (Item.99) 1688 0 R (algocf.1) 2071 0 R (algocf.2) 2117 0 R (algocfline.1) 2056 0 R (algocfline.2) 2124 0 R] /Limits [(Item.98) (algocfline.2)] >> -% 2285 0 obj +% 2288 0 obj << /Names [(cite.2007c) 930 0 R (cite.2007d) 931 0 R (cite.BLACS) 906 0 R (cite.BLAS1) 889 0 R (cite.BLAS2) 890 0 R (cite.BLAS3) 891 0 R] /Limits [(cite.2007c) (cite.BLAS3)] >> -% 2286 0 obj +% 2289 0 obj << /Names [(cite.CaFiRo:2014) 2042 0 R (cite.DesPat:11) 884 0 R (cite.DesignPatterns) 1046 0 R (cite.KIVA3PSBLAS) 2188 0 R (cite.METIS) 918 0 R (cite.MPI1) 2194 0 R] /Limits [(cite.CaFiRo:2014) (cite.MPI1)] >> -% 2287 0 obj +% 2290 0 obj << /Names [(cite.MRC:11) 2058 0 R (cite.OurTechRep) 2043 0 R (cite.PARA04FOREST) 2186 0 R (cite.PSBLAS) 2187 0 R (cite.RouXiaXu:11) 885 0 R (cite.Sparse03) 883 0 R] /Limits [(cite.MRC:11) (cite.Sparse03)] >> -% 2288 0 obj +% 2291 0 obj << /Names [(cite.machiels) 886 0 R (cite.metcalf) 882 0 R (cite.sblas02) 888 0 R (cite.sblas97) 887 0 R (descdata) 989 0 R (equation.4.1) 1265 0 R] /Limits [(cite.machiels) (equation.4.1)] >> -% 2289 0 obj +% 2292 0 obj << /Names [(equation.4.2) 1266 0 R (equation.4.3) 1267 0 R (figure.1) 900 0 R (figure.2) 926 0 R (figure.3) 1368 0 R (figure.4) 1402 0 R] /Limits [(equation.4.2) (figure.4)] >> -% 2290 0 obj +% 2293 0 obj << /Names [(figure.5) 2065 0 R (figure.6) 2060 0 R (figure.7) 2104 0 R (figure.8) 2116 0 R (figure.9) 2142 0 R (listing.1) 1017 0 R] /Limits [(figure.5) (listing.1)] >> -% 2291 0 obj +% 2294 0 obj << /Names [(listing.2) 1047 0 R (listing.3) 1087 0 R (listing.4) 1107 0 R (listing.5) 1872 0 R (listing.6) 1873 0 R (lstlisting.-1) 1228 0 R] /Limits [(listing.2) (lstlisting.-1)] >> -% 2292 0 obj +% 2295 0 obj << /Names [(lstlisting.-10) 1942 0 R (lstlisting.-11) 1949 0 R (lstlisting.-12) 2014 0 R (lstlisting.-13) 2076 0 R (lstlisting.-2) 1882 0 R (lstlisting.-3) 1888 0 R] /Limits [(lstlisting.-10) (lstlisting.-3)] >> -% 2293 0 obj +% 2296 0 obj << /Names [(lstlisting.-4) 1895 0 R (lstlisting.-5) 1901 0 R (lstlisting.-6) 1912 0 R (lstlisting.-7) 1919 0 R (lstlisting.-8) 1926 0 R (lstlisting.-9) 1935 0 R] /Limits [(lstlisting.-4) (lstlisting.-9)] >> -% 2294 0 obj +% 2297 0 obj << /Names [(lstnumber.-1.1) 1229 0 R (lstnumber.-1.2) 1230 0 R (lstnumber.-1.3) 1231 0 R (lstnumber.-1.4) 1232 0 R (lstnumber.-10.1) 1943 0 R (lstnumber.-11.1) 1950 0 R] /Limits [(lstnumber.-1.1) (lstnumber.-11.1)] >> -% 2295 0 obj +% 2298 0 obj << /Names [(lstnumber.-12.1) 2015 0 R (lstnumber.-12.2) 2016 0 R (lstnumber.-13.1) 2077 0 R (lstnumber.-13.2) 2078 0 R (lstnumber.-13.3) 2079 0 R (lstnumber.-13.4) 2080 0 R] /Limits [(lstnumber.-12.1) (lstnumber.-13.4)] >> -% 2296 0 obj +% 2299 0 obj << /Names [(lstnumber.-13.5) 2081 0 R (lstnumber.-13.6) 2082 0 R (lstnumber.-13.7) 2083 0 R (lstnumber.-2.1) 1883 0 R (lstnumber.-3.1) 1889 0 R (lstnumber.-4.1) 1896 0 R] /Limits [(lstnumber.-13.5) (lstnumber.-4.1)] >> -% 2297 0 obj +% 2300 0 obj << /Names [(lstnumber.-5.1) 1902 0 R (lstnumber.-6.1) 1913 0 R (lstnumber.-7.1) 1920 0 R (lstnumber.-8.1) 1927 0 R (lstnumber.-9.1) 1936 0 R (page.1) 663 0 R] /Limits [(lstnumber.-5.1) (page.1)] >> -% 2298 0 obj +% 2301 0 obj << /Names [(page.10) 996 0 R (page.100) 1654 0 R (page.101) 1660 0 R (page.102) 1666 0 R (page.103) 1672 0 R (page.104) 1679 0 R] /Limits [(page.10) (page.104)] >> -% 2299 0 obj +% 2302 0 obj << /Names [(page.105) 1686 0 R (page.106) 1693 0 R (page.107) 1697 0 R (page.108) 1707 0 R (page.109) 1712 0 R (page.11) 1007 0 R] /Limits [(page.105) (page.11)] >> -% 2300 0 obj +% 2303 0 obj << /Names [(page.110) 1717 0 R (page.111) 1730 0 R (page.112) 1734 0 R (page.113) 1740 0 R (page.114) 1746 0 R (page.115) 1753 0 R] /Limits [(page.110) (page.115)] >> -% 2301 0 obj +% 2304 0 obj << /Names [(page.116) 1758 0 R (page.117) 1762 0 R (page.118) 1766 0 R (page.119) 1770 0 R (page.12) 1023 0 R (page.120) 1774 0 R] /Limits [(page.116) (page.120)] >> -% 2302 0 obj +% 2305 0 obj << /Names [(page.121) 1778 0 R (page.122) 1787 0 R (page.123) 1791 0 R (page.124) 1798 0 R (page.125) 1802 0 R (page.126) 1809 0 R] /Limits [(page.121) (page.126)] >> -% 2303 0 obj +% 2306 0 obj << /Names [(page.127) 1813 0 R (page.128) 1821 0 R (page.129) 1826 0 R (page.13) 1027 0 R (page.130) 1833 0 R (page.131) 1837 0 R] /Limits [(page.127) (page.131)] >> -% 2304 0 obj +% 2307 0 obj << /Names [(page.132) 1844 0 R (page.133) 1848 0 R (page.134) 1859 0 R (page.135) 1864 0 R (page.136) 1871 0 R (page.137) 1877 0 R] /Limits [(page.132) (page.137)] >> -% 2305 0 obj +% 2308 0 obj << /Names [(page.138) 1881 0 R (page.139) 1887 0 R (page.14) 1032 0 R (page.140) 1894 0 R (page.141) 1900 0 R (page.142) 1906 0 R] /Limits [(page.138) (page.142)] >> -% 2306 0 obj +% 2309 0 obj << /Names [(page.143) 1911 0 R (page.144) 1918 0 R (page.145) 1925 0 R (page.146) 1934 0 R (page.147) 1941 0 R (page.148) 1948 0 R] /Limits [(page.143) (page.148)] >> -% 2307 0 obj +% 2310 0 obj << /Names [(page.149) 1954 0 R (page.15) 1037 0 R (page.150) 1958 0 R (page.151) 1964 0 R (page.152) 1974 0 R (page.153) 1978 0 R] /Limits [(page.149) (page.153)] >> -% 2308 0 obj +% 2311 0 obj << /Names [(page.154) 1986 0 R (page.155) 1991 0 R (page.156) 1995 0 R (page.157) 2001 0 R (page.158) 2006 0 R (page.159) 2013 0 R] /Limits [(page.154) (page.159)] >> -% 2309 0 obj +% 2312 0 obj << /Names [(page.16) 1044 0 R (page.160) 2024 0 R (page.161) 2029 0 R (page.162) 2039 0 R (page.163) 2054 0 R (page.164) 2064 0 R] /Limits [(page.16) (page.164)] >> -% 2310 0 obj +% 2313 0 obj << /Names [(page.165) 2075 0 R (page.166) 2103 0 R (page.167) 2123 0 R (page.168) 2141 0 R (page.169) 2157 0 R (page.17) 1051 0 R] /Limits [(page.165) (page.17)] >> -% 2311 0 obj +% 2314 0 obj << /Names [(page.170) 2162 0 R (page.171) 2166 0 R (page.172) 2172 0 R (page.173) 2176 0 R (page.174) 2180 0 R (page.175) 2184 0 R] /Limits [(page.170) (page.175)] >> -% 2312 0 obj +% 2315 0 obj << /Names [(page.176) 2193 0 R (page.18) 1056 0 R (page.19) 1061 0 R (page.2) 673 0 R (page.20) 1067 0 R (page.21) 1071 0 R] /Limits [(page.176) (page.21)] >> -% 2313 0 obj +% 2316 0 obj << /Names [(page.22) 1075 0 R (page.23) 1079 0 R (page.24) 1085 0 R (page.25) 1091 0 R (page.26) 1098 0 R (page.27) 1105 0 R] /Limits [(page.22) (page.27)] >> -% 2314 0 obj +% 2317 0 obj << /Names [(page.28) 1111 0 R (page.29) 1115 0 R (page.3) 912 0 R (page.30) 1126 0 R (page.31) 1133 0 R (page.32) 1143 0 R] /Limits [(page.28) (page.32)] >> -% 2315 0 obj +% 2318 0 obj << /Names [(page.33) 1149 0 R (page.34) 1160 0 R (page.35) 1166 0 R (page.36) 1173 0 R (page.37) 1178 0 R (page.38) 1187 0 R] /Limits [(page.33) (page.38)] >> -% 2316 0 obj +% 2319 0 obj << /Names [(page.39) 1195 0 R (page.4) 925 0 R (page.40) 1200 0 R (page.41) 1208 0 R (page.42) 1213 0 R (page.43) 1220 0 R] /Limits [(page.39) (page.43)] >> -% 2317 0 obj +% 2320 0 obj << /Names [(page.44) 1226 0 R (page.45) 1239 0 R (page.46) 1246 0 R (page.47) 1253 0 R (page.48) 1264 0 R (page.49) 1280 0 R] /Limits [(page.44) (page.49)] >> -% 2318 0 obj +% 2321 0 obj << /Names [(page.5) 937 0 R (page.50) 1287 0 R (page.51) 1298 0 R (page.52) 1304 0 R (page.53) 1315 0 R (page.54) 1320 0 R] /Limits [(page.5) (page.54)] >> -% 2319 0 obj +% 2322 0 obj << /Names [(page.55) 1331 0 R (page.56) 1337 0 R (page.57) 1346 0 R (page.58) 1352 0 R (page.59) 1360 0 R (page.6) 942 0 R] /Limits [(page.55) (page.6)] >> -% 2320 0 obj +% 2323 0 obj << /Names [(page.60) 1367 0 R (page.61) 1381 0 R (page.62) 1389 0 R (page.63) 1398 0 R (page.64) 1406 0 R (page.65) 1410 0 R] /Limits [(page.60) (page.65)] >> -% 2321 0 obj +% 2324 0 obj << /Names [(page.66) 1425 0 R (page.67) 1430 0 R (page.68) 1437 0 R (page.69) 1444 0 R (page.7) 955 0 R (page.70) 1448 0 R] /Limits [(page.66) (page.70)] >> -% 2322 0 obj +% 2325 0 obj << /Names [(page.71) 1453 0 R (page.72) 1459 0 R (page.73) 1465 0 R (page.74) 1476 0 R (page.75) 1481 0 R (page.76) 1490 0 R] /Limits [(page.71) (page.76)] >> -% 2323 0 obj +% 2326 0 obj << /Names [(page.77) 1498 0 R (page.78) 1503 0 R (page.79) 1509 0 R (page.8) 977 0 R (page.80) 1514 0 R (page.81) 1522 0 R] /Limits [(page.77) (page.81)] >> -% 2324 0 obj +% 2327 0 obj << /Names [(page.82) 1527 0 R (page.83) 1535 0 R (page.84) 1541 0 R (page.85) 1550 0 R (page.86) 1564 0 R (page.87) 1568 0 R] /Limits [(page.82) (page.87)] >> -% 2325 0 obj +% 2328 0 obj << /Names [(page.88) 1581 0 R (page.89) 1587 0 R (page.9) 988 0 R (page.90) 1594 0 R (page.91) 1598 0 R (page.92) 1606 0 R] /Limits [(page.88) (page.92)] >> -% 2326 0 obj +% 2329 0 obj << /Names [(page.93) 1611 0 R (page.94) 1620 0 R (page.95) 1628 0 R (page.96) 1632 0 R (page.97) 1637 0 R (page.98) 1642 0 R] /Limits [(page.93) (page.98)] >> -% 2327 0 obj +% 2330 0 obj << /Names [(page.99) 1649 0 R (page.i) 719 0 R (page.ii) 776 0 R (page.iii) 823 0 R (page.iv) 863 0 R (precdata) 1106 0 R] /Limits [(page.99) (precdata)] >> -% 2328 0 obj +% 2331 0 obj << /Names [(section*.1) 720 0 R (section*.10) 618 0 R (section*.11) 622 0 R (section*.12) 626 0 R (section*.13) 630 0 R (section*.14) 634 0 R] /Limits [(section*.1) (section*.14)] >> -% 2329 0 obj +% 2332 0 obj << /Names [(section*.15) 638 0 R (section*.16) 642 0 R (section*.17) 646 0 R (section*.18) 650 0 R (section*.19) 654 0 R (section*.2) 2055 0 R] /Limits [(section*.15) (section*.2)] >> -% 2330 0 obj +% 2333 0 obj << /Names [(section*.20) 2185 0 R (section*.3) 2084 0 R (section*.4) 2105 0 R (section*.5) 2125 0 R (section*.6) 601 0 R (section*.7) 606 0 R] /Limits [(section*.20) (section*.7)] >> -% 2331 0 obj +% 2334 0 obj << /Names [(section*.8) 610 0 R (section*.9) 614 0 R (section.1) 7 0 R (section.10) 541 0 R (section.11) 569 0 R (section.12) 577 0 R] /Limits [(section*.8) (section.12)] >> -% 2332 0 obj +% 2335 0 obj << /Names [(section.13) 597 0 R (section.2) 11 0 R (section.3) 35 0 R (section.4) 220 0 R (section.5) 288 0 R (section.6) 308 0 R] /Limits [(section.13) (section.6)] >> -% 2333 0 obj +% 2336 0 obj << /Names [(section.7) 421 0 R (section.8) 493 0 R (section.9) 513 0 R (spbasedata) 1052 0 R (spdata) 1045 0 R (subsection.10.1) 545 0 R] /Limits [(section.7) (subsection.10.1)] >> -% 2334 0 obj +% 2337 0 obj << /Names [(subsection.10.2) 549 0 R (subsection.10.3) 553 0 R (subsection.10.4) 557 0 R (subsection.10.5) 561 0 R (subsection.10.6) 565 0 R (subsection.11.1) 573 0 R] /Limits [(subsection.10.2) (subsection.11.1)] >> -% 2335 0 obj +% 2338 0 obj << /Names [(subsection.12.1) 581 0 R (subsection.12.2) 585 0 R (subsection.12.3) 589 0 R (subsection.12.4) 593 0 R (subsection.2.1) 15 0 R (subsection.2.2) 19 0 R] /Limits [(subsection.12.1) (subsection.2.2)] >> -% 2336 0 obj +% 2339 0 obj << /Names [(subsection.2.3) 23 0 R (subsection.2.4) 31 0 R (subsection.3.1) 39 0 R (subsection.3.2) 103 0 R (subsection.3.3) 183 0 R (subsection.3.4) 212 0 R] /Limits [(subsection.2.3) (subsection.3.4)] >> -% 2337 0 obj +% 2340 0 obj << /Names [(subsection.3.5) 216 0 R (subsection.4.1) 224 0 R (subsection.4.10) 260 0 R (subsection.4.11) 264 0 R (subsection.4.12) 268 0 R (subsection.4.13) 272 0 R] /Limits [(subsection.3.5) (subsection.4.13)] >> -% 2338 0 obj +% 2341 0 obj << /Names [(subsection.4.14) 276 0 R (subsection.4.15) 280 0 R (subsection.4.16) 284 0 R (subsection.4.2) 228 0 R (subsection.4.3) 232 0 R (subsection.4.4) 236 0 R] /Limits [(subsection.4.14) (subsection.4.4)] >> -% 2339 0 obj +% 2342 0 obj << /Names [(subsection.4.5) 240 0 R (subsection.4.6) 244 0 R (subsection.4.7) 248 0 R (subsection.4.8) 252 0 R (subsection.4.9) 256 0 R (subsection.5.1) 292 0 R] /Limits [(subsection.4.5) (subsection.5.1)] >> -% 2340 0 obj +% 2343 0 obj << /Names [(subsection.5.2) 296 0 R (subsection.5.3) 300 0 R (subsection.5.4) 304 0 R (subsection.6.1) 312 0 R (subsection.6.10) 348 0 R (subsection.6.11) 352 0 R] /Limits [(subsection.5.2) (subsection.6.11)] >> -% 2341 0 obj +% 2344 0 obj << /Names [(subsection.6.12) 356 0 R (subsection.6.13) 360 0 R (subsection.6.14) 364 0 R (subsection.6.15) 368 0 R (subsection.6.16) 372 0 R (subsection.6.17) 376 0 R] /Limits [(subsection.6.12) (subsection.6.17)] >> -% 2342 0 obj +% 2345 0 obj << /Names [(subsection.6.18) 380 0 R (subsection.6.19) 384 0 R (subsection.6.2) 316 0 R (subsection.6.20) 388 0 R (subsection.6.21) 392 0 R (subsection.6.22) 396 0 R] /Limits [(subsection.6.18) (subsection.6.22)] >> -% 2343 0 obj +% 2346 0 obj << /Names [(subsection.6.23) 400 0 R (subsection.6.24) 405 0 R (subsection.6.25) 409 0 R (subsection.6.26) 413 0 R (subsection.6.27) 417 0 R (subsection.6.3) 320 0 R] /Limits [(subsection.6.23) (subsection.6.3)] >> -% 2344 0 obj +% 2347 0 obj << /Names [(subsection.6.4) 324 0 R (subsection.6.5) 328 0 R (subsection.6.6) 332 0 R (subsection.6.7) 336 0 R (subsection.6.8) 340 0 R (subsection.6.9) 344 0 R] /Limits [(subsection.6.4) (subsection.6.9)] >> -% 2345 0 obj +% 2348 0 obj << /Names [(subsection.7.1) 425 0 R (subsection.7.10) 461 0 R (subsection.7.11) 465 0 R (subsection.7.12) 469 0 R (subsection.7.13) 473 0 R (subsection.7.14) 477 0 R] /Limits [(subsection.7.1) (subsection.7.14)] >> -% 2346 0 obj +% 2349 0 obj << /Names [(subsection.7.15) 481 0 R (subsection.7.16) 485 0 R (subsection.7.17) 489 0 R (subsection.7.2) 429 0 R (subsection.7.3) 433 0 R (subsection.7.4) 437 0 R] /Limits [(subsection.7.15) (subsection.7.4)] >> -% 2347 0 obj +% 2350 0 obj << /Names [(subsection.7.5) 441 0 R (subsection.7.6) 445 0 R (subsection.7.7) 449 0 R (subsection.7.8) 453 0 R (subsection.7.9) 457 0 R (subsection.8.1) 497 0 R] /Limits [(subsection.7.5) (subsection.8.1)] >> -% 2348 0 obj +% 2351 0 obj << /Names [(subsection.8.2) 501 0 R (subsection.8.3) 505 0 R (subsection.8.4) 509 0 R (subsection.9.1) 517 0 R (subsection.9.2) 521 0 R (subsection.9.3) 525 0 R] /Limits [(subsection.8.2) (subsection.9.3)] >> -% 2349 0 obj +% 2352 0 obj << /Names [(subsection.9.4) 529 0 R (subsection.9.5) 533 0 R (subsection.9.6) 537 0 R (subsubsection.2.3.1) 27 0 R (subsubsection.3.1.1) 43 0 R (subsubsection.3.1.10) 79 0 R] /Limits [(subsection.9.4) (subsubsection.3.1.10)] >> -% 2350 0 obj +% 2353 0 obj << /Names [(subsubsection.3.1.11) 83 0 R (subsubsection.3.1.12) 87 0 R (subsubsection.3.1.13) 91 0 R (subsubsection.3.1.14) 95 0 R (subsubsection.3.1.15) 99 0 R (subsubsection.3.1.2) 47 0 R] /Limits [(subsubsection.3.1.11) (subsubsection.3.1.2)] >> -% 2351 0 obj +% 2354 0 obj << /Names [(subsubsection.3.1.3) 51 0 R (subsubsection.3.1.4) 55 0 R (subsubsection.3.1.5) 59 0 R (subsubsection.3.1.6) 63 0 R (subsubsection.3.1.7) 67 0 R (subsubsection.3.1.8) 71 0 R] /Limits [(subsubsection.3.1.3) (subsubsection.3.1.8)] >> -% 2352 0 obj +% 2355 0 obj << /Names [(subsubsection.3.1.9) 75 0 R (subsubsection.3.2.1) 107 0 R (subsubsection.3.2.10) 143 0 R (subsubsection.3.2.11) 147 0 R (subsubsection.3.2.12) 151 0 R (subsubsection.3.2.13) 155 0 R] /Limits [(subsubsection.3.1.9) (subsubsection.3.2.13)] >> -% 2353 0 obj +% 2356 0 obj << /Names [(subsubsection.3.2.14) 159 0 R (subsubsection.3.2.15) 163 0 R (subsubsection.3.2.16) 167 0 R (subsubsection.3.2.17) 171 0 R (subsubsection.3.2.18) 175 0 R (subsubsection.3.2.19) 179 0 R] /Limits [(subsubsection.3.2.14) (subsubsection.3.2.19)] >> -% 2354 0 obj +% 2357 0 obj << /Names [(subsubsection.3.2.2) 111 0 R (subsubsection.3.2.3) 115 0 R (subsubsection.3.2.4) 119 0 R (subsubsection.3.2.5) 123 0 R (subsubsection.3.2.6) 127 0 R (subsubsection.3.2.7) 131 0 R] /Limits [(subsubsection.3.2.2) (subsubsection.3.2.7)] >> -% 2355 0 obj +% 2358 0 obj << /Names [(subsubsection.3.2.8) 135 0 R (subsubsection.3.2.9) 139 0 R (subsubsection.3.3.1) 187 0 R (subsubsection.3.3.2) 191 0 R (subsubsection.3.3.3) 195 0 R (subsubsection.3.3.4) 199 0 R] /Limits [(subsubsection.3.2.8) (subsubsection.3.3.4)] >> -% 2356 0 obj +% 2359 0 obj << /Names [(subsubsection.3.3.5) 204 0 R (subsubsection.3.3.6) 208 0 R (table.1) 1099 0 R (table.10) 1247 0 R (table.11) 1255 0 R (table.12) 1268 0 R] /Limits [(subsubsection.3.3.5) (table.12)] >> -% 2357 0 obj +% 2360 0 obj << /Names [(table.13) 1288 0 R (table.14) 1316 0 R (table.15) 1332 0 R (table.16) 1347 0 R (table.17) 1361 0 R (table.18) 1390 0 R] /Limits [(table.13) (table.18)] >> -% 2358 0 obj +% 2361 0 obj << /Names [(table.19) 1426 0 R (table.2) 1144 0 R (table.20) 1438 0 R (table.21) 2059 0 R (table.3) 1161 0 R (table.4) 1174 0 R] /Limits [(table.19) (table.4)] >> -% 2359 0 obj +% 2362 0 obj << /Names [(table.5) 1188 0 R (table.6) 1196 0 R (table.7) 1209 0 R (table.8) 1221 0 R (table.9) 1240 0 R (title.0) 3 0 R] /Limits [(table.5) (title.0)] >> -% 2360 0 obj +% 2363 0 obj << /Names [(vbasedata) 1033 0 R (vdata) 1086 0 R] /Limits [(vbasedata) (vdata)] >> -% 2361 0 obj -<< -/Kids [2258 0 R 2259 0 R 2260 0 R 2261 0 R 2262 0 R 2263 0 R] -/Limits [(Doc-Start) (Item.125)] ->> -% 2362 0 obj -<< -/Kids [2264 0 R 2266 0 R 2267 0 R 2268 0 R 2269 0 R 2270 0 R] -/Limits [(Item.126) (Item.26)] ->> -% 2363 0 obj -<< -/Kids [2271 0 R 2272 0 R 2273 0 R 2274 0 R 2275 0 R 2276 0 R] -/Limits [(Item.27) (Item.59)] ->> % 2364 0 obj << -/Kids [2277 0 R 2278 0 R 2279 0 R 2280 0 R 2281 0 R 2282 0 R] -/Limits [(Item.6) (Item.91)] +/Kids [2261 0 R 2262 0 R 2263 0 R 2264 0 R 2266 0 R 2267 0 R] +/Limits [(Doc-Start) (Item.125)] >> endstream endobj -2385 0 obj +2388 0 obj << /Title (Parallel Sparse BLAS V. 3.9.0) /Subject (Parallel Sparse Basic Linear Algebra Subroutines) /Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners) /Creator (pdfLaTeX) /Producer ($Id$) /Author()/Title()/Subject()/Creator(LaTeX with hyperref)/Keywords() -/CreationDate (D:20240711120826+02'00') -/ModDate (D:20240711120826+02'00') +/CreationDate (D:20240711130925+02'00') +/ModDate (D:20240711130925+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Fedora 40) kpathsea version 6.3.5) >> @@ -36962,153 +37030,169 @@ endobj 2366 0 obj << /Type /ObjStm -/N 19 -/First 179 -/Length 2402 +/N 22 +/First 209 +/Length 2765 >> stream -2365 0 2367 116 2368 240 2369 360 2370 473 2371 585 2372 696 2373 807 2374 921 2375 1042 -2376 1168 2377 1294 2378 1424 2379 1545 2380 1666 2381 1788 2382 1891 2383 1975 2384 2010 +2365 0 2367 112 2368 223 2369 333 2370 449 2371 573 2372 693 2373 806 2374 918 2375 1029 +2376 1140 2377 1254 2378 1375 2379 1501 2380 1627 2381 1757 2382 1878 2383 1999 2384 2121 2385 2224 +2386 2308 2387 2343 % 2365 0 obj << -/Kids [2283 0 R 2284 0 R 2285 0 R 2286 0 R 2287 0 R 2288 0 R] -/Limits [(Item.92) (equation.4.1)] +/Kids [2268 0 R 2269 0 R 2270 0 R 2271 0 R 2272 0 R 2273 0 R] +/Limits [(Item.126) (Item.26)] >> % 2367 0 obj << -/Kids [2289 0 R 2290 0 R 2291 0 R 2292 0 R 2293 0 R 2294 0 R] -/Limits [(equation.4.2) (lstnumber.-11.1)] +/Kids [2274 0 R 2275 0 R 2276 0 R 2277 0 R 2278 0 R 2279 0 R] +/Limits [(Item.27) (Item.59)] >> % 2368 0 obj << -/Kids [2295 0 R 2296 0 R 2297 0 R 2298 0 R 2299 0 R 2300 0 R] -/Limits [(lstnumber.-12.1) (page.115)] +/Kids [2280 0 R 2281 0 R 2282 0 R 2283 0 R 2284 0 R 2285 0 R] +/Limits [(Item.6) (Item.91)] >> % 2369 0 obj << -/Kids [2301 0 R 2302 0 R 2303 0 R 2304 0 R 2305 0 R 2306 0 R] -/Limits [(page.116) (page.148)] +/Kids [2286 0 R 2287 0 R 2288 0 R 2289 0 R 2290 0 R 2291 0 R] +/Limits [(Item.92) (equation.4.1)] >> % 2370 0 obj << -/Kids [2307 0 R 2308 0 R 2309 0 R 2310 0 R 2311 0 R 2312 0 R] -/Limits [(page.149) (page.21)] +/Kids [2292 0 R 2293 0 R 2294 0 R 2295 0 R 2296 0 R 2297 0 R] +/Limits [(equation.4.2) (lstnumber.-11.1)] >> % 2371 0 obj << -/Kids [2313 0 R 2314 0 R 2315 0 R 2316 0 R 2317 0 R 2318 0 R] -/Limits [(page.22) (page.54)] +/Kids [2298 0 R 2299 0 R 2300 0 R 2301 0 R 2302 0 R 2303 0 R] +/Limits [(lstnumber.-12.1) (page.115)] >> % 2372 0 obj << -/Kids [2319 0 R 2320 0 R 2321 0 R 2322 0 R 2323 0 R 2324 0 R] -/Limits [(page.55) (page.87)] +/Kids [2304 0 R 2305 0 R 2306 0 R 2307 0 R 2308 0 R 2309 0 R] +/Limits [(page.116) (page.148)] >> % 2373 0 obj << -/Kids [2325 0 R 2326 0 R 2327 0 R 2328 0 R 2329 0 R 2330 0 R] -/Limits [(page.88) (section*.7)] +/Kids [2310 0 R 2311 0 R 2312 0 R 2313 0 R 2314 0 R 2315 0 R] +/Limits [(page.149) (page.21)] >> % 2374 0 obj << -/Kids [2331 0 R 2332 0 R 2333 0 R 2334 0 R 2335 0 R 2336 0 R] -/Limits [(section*.8) (subsection.3.4)] +/Kids [2316 0 R 2317 0 R 2318 0 R 2319 0 R 2320 0 R 2321 0 R] +/Limits [(page.22) (page.54)] >> % 2375 0 obj << -/Kids [2337 0 R 2338 0 R 2339 0 R 2340 0 R 2341 0 R 2342 0 R] -/Limits [(subsection.3.5) (subsection.6.22)] +/Kids [2322 0 R 2323 0 R 2324 0 R 2325 0 R 2326 0 R 2327 0 R] +/Limits [(page.55) (page.87)] >> % 2376 0 obj << -/Kids [2343 0 R 2344 0 R 2345 0 R 2346 0 R 2347 0 R 2348 0 R] -/Limits [(subsection.6.23) (subsection.9.3)] +/Kids [2328 0 R 2329 0 R 2330 0 R 2331 0 R 2332 0 R 2333 0 R] +/Limits [(page.88) (section*.7)] >> % 2377 0 obj << -/Kids [2349 0 R 2350 0 R 2351 0 R 2352 0 R 2353 0 R 2354 0 R] -/Limits [(subsection.9.4) (subsubsection.3.2.7)] +/Kids [2334 0 R 2335 0 R 2336 0 R 2337 0 R 2338 0 R 2339 0 R] +/Limits [(section*.8) (subsection.3.4)] >> % 2378 0 obj << -/Kids [2355 0 R 2356 0 R 2357 0 R 2358 0 R 2359 0 R 2360 0 R] -/Limits [(subsubsection.3.2.8) (vdata)] +/Kids [2340 0 R 2341 0 R 2342 0 R 2343 0 R 2344 0 R 2345 0 R] +/Limits [(subsection.3.5) (subsection.6.22)] >> % 2379 0 obj << -/Kids [2361 0 R 2362 0 R 2363 0 R 2364 0 R 2365 0 R 2367 0 R] -/Limits [(Doc-Start) (lstnumber.-11.1)] +/Kids [2346 0 R 2347 0 R 2348 0 R 2349 0 R 2350 0 R 2351 0 R] +/Limits [(subsection.6.23) (subsection.9.3)] >> % 2380 0 obj << -/Kids [2368 0 R 2369 0 R 2370 0 R 2371 0 R 2372 0 R 2373 0 R] -/Limits [(lstnumber.-12.1) (section*.7)] +/Kids [2352 0 R 2353 0 R 2354 0 R 2355 0 R 2356 0 R 2357 0 R] +/Limits [(subsection.9.4) (subsubsection.3.2.7)] >> % 2381 0 obj << -/Kids [2374 0 R 2375 0 R 2376 0 R 2377 0 R 2378 0 R] -/Limits [(section*.8) (vdata)] +/Kids [2358 0 R 2359 0 R 2360 0 R 2361 0 R 2362 0 R 2363 0 R] +/Limits [(subsubsection.3.2.8) (vdata)] >> % 2382 0 obj << -/Kids [2379 0 R 2380 0 R 2381 0 R] -/Limits [(Doc-Start) (vdata)] +/Kids [2364 0 R 2365 0 R 2367 0 R 2368 0 R 2369 0 R 2370 0 R] +/Limits [(Doc-Start) (lstnumber.-11.1)] >> % 2383 0 obj << -/Dests 2382 0 R +/Kids [2371 0 R 2372 0 R 2373 0 R 2374 0 R 2375 0 R 2376 0 R] +/Limits [(lstnumber.-12.1) (section*.7)] >> % 2384 0 obj << +/Kids [2377 0 R 2378 0 R 2379 0 R 2380 0 R 2381 0 R] +/Limits [(section*.8) (vdata)] +>> +% 2385 0 obj +<< +/Kids [2382 0 R 2383 0 R 2384 0 R] +/Limits [(Doc-Start) (vdata)] +>> +% 2386 0 obj +<< +/Dests 2385 0 R +>> +% 2387 0 obj +<< /Type /Catalog -/Pages 2255 0 R -/Outlines 2256 0 R -/Names 2383 0 R +/Pages 2258 0 R +/Outlines 2259 0 R +/Names 2386 0 R /URI (http://ce.uniroma2.it/psblas) /PageMode/UseOutlines/PageLabels<>2<>6<>]>> /OpenAction 657 0 R >> endstream endobj -2386 0 obj +2389 0 obj << /Type /XRef -/Index [0 2387] -/Size 2387 +/Index [0 2390] +/Size 2390 /W [1 3 1] -/Root 2384 0 R -/Info 2385 0 R -/ID [ ] -/Length 11935 ->> -stream -]]c#\c-[c5ZcAY  -cJX  W  VUT3S4R5Q6P:O;N <M!"@L#$AK%&CJ'(DI)*HH+,IG-.JF/0QE12RD34YC56ZB78^A9:_@;<a?=>'>?@'=AB'<CD';EF':GH' 9IJ' 8KL'7MN'6OP'5QR'4ST'3UV'2WX'1YZ' 0[\'&/]^''._`'(-ab'.,c?%'3+'4*'5)'<('@'  -'J&  'Z% $#"%!1 <MT[ !"#$/%&<'(K)*Q+,X-.a /0a)12a234a=56a>78aU9:ab;< => - ?@ AB -CD& EFAGHQIJWKL^MNGOPGQRGSTGUVG!WXG+cYZG0b[\G6a]^G<`_`GB_abGH^c}GO]GV\Gc[ZY  -X  W #V*U.T2S6R:Q>PHORN \M!"L#$ K%&J'("I)*'H+,.G-.7F/0=E12CD34IC56OB78TA9:[@;<b?=>>?@ =AB<CD;EF":GH+9IJ68KL;7MN?6OPE5QRI4STO3UV2WX1YZ 0[\/]^]._`a-abb,c]x+]]x*]]x)]]x(]]x'] ] -x&] ] x %] ]x -$]]x #]]x"]]x!]]x ]]x]]]]] ]]xYx[xZx\O]#]!]"]%]&]'](])]*]+],]-].]/]0]1]2]3]4]5]6]7]9];]<]=]>]?]@]A]B]C]E]G]I]J]K]L]M]N]O]P]Q]R]W]U]$w]S]T]8]:]D]F]H]X]Y]Z][]\]]]^]_]`]a]b]c           +/Root 2387 0 R +/Info 2388 0 R +/ID [ ] +/Length 11950 +>> +stream +]`c#_c-^c5]cA\  +cJ[  Z  YXW3V4U5T6S:R;Q <P!"@O#$AN%&CM'(DL)*HK+,IJ-.JI/0QH12RG34YF56ZE78^D9:_C;<aB=>'A?@'@AB'?CD'>EF'=GH' <IJ' ;KL':MN'9OP'8QR'7ST'6UV'5WX'4YZ' 3[\'&2]^''1_`'(0ab'./c?%'3.'4-'5,'<+'@*  +'J)  'Z( '&%%$1#<"M!T [ !"#$/%&<'(K)*Q+,X-.a /0a)12a234a=56a>78aU9:ab;<=> +?@AB CD& EFA GHQ +IJW KL^MNGOPGQRGSTGUVG!WXG+YZG0[\G6]^G<c_`GBbabGHac}GO`GV_Gc^]\  +[  Z #Y*X.W2V6U:T>SHRRQ \P!"O#$ N%&M'("L)*'K+,.J-.7I/0=H12CG34IF56OE78TD9:[C;<bB=>A?@ @AB?CD>EF"=GH+<IJ6;KL;:MN?9OPE8QRI7STO6UV5WX4YZ 3[\2]^]1_`a0abb/c]x.]]x-]]x,]]x+]]x*] ] +x)] ] x (] ]x +']]x &]]x%]]x$]]x#]]x"]]]]] ]]x\x^x]x_O]#]!]"]%]&]'](])]*]+],]-].]/]0]1]2]3]4]5]6]7]9];]<]=]>]?]@]A]B]C]E]G]I]J]K]L]M]N]O]P]Q]R]W]U]$w]S]T]8]:]D]F]H]X]Y]Z][]\]]]^]_]`]a]b]c                                  ! % #]V " & ' ( ) * + , - . / 0 1 2 3 4 5 6 8 9 : ; < = > ? @ A B C D E F G H I J K M N P R W U $5 T 7 L O Q S Y [ ] ^ _ ` a b ccccccccccc c -c c c ccccccccc V}c X Z \ cccccccc c!c"c$cx]x,x#x0x.x+x x!x*xxc*c+c,%c1c/c%c.c&c'c(c)*Dxc2c3c8c05c4xTxSxRc6c7x)c=c>iycBc9V_c?c@c:c;c<xxcDcEcGcCp#cFcUcScHcIcKcLcMcNcOcPcQcRcTcVcWcXcYcZc[c\c]c^c_c`cacbccxUx^   -   /*"#.!G$%&'()*+,xV-017/b2=8vx9x_E>?BKFGMNOTLPSx%W[UVXb\']`'cx'x`b' '1''' -H' ''['''mo''''"'`''!'%')'#`'$xa'+','/'*e'-'K'1'9'7'0ǽ'2'6';'='8j':'A'>1'?'C'D'E'F'G'H'N'L'B 'IxX'O'P'R'Mr'Qxb'T'U'V'W'X'\'S'Y'['^'a']0/'_'`'c'bA{  f -  xc!"#' $&+(-)*-./3,P0264589:>7_;=G?6@ABCDEFIJKOHGLNQRVP`{SUXY]WuZxW\_`ab^c7  -    _"#%!.$'()*+,-1&@.042]36789:@A>5_G;=C?|BEFGHIMD'JLORNnPTUVbZSWY]ca[Aaa\]^_`aָ -'"aal`aaaa a axa -a akaaaaMaaaaa"aaaa#aa!aaaaaa  xa%a&a'a+a$,a(a*a.a,Mza-a0a6a4a/S@a1a3a7a8a:a5pa9a?a;Na<aAaDa@:aBaCaFaIaE8aGxQaHaQaJvaKaLaMaNaOaPaSaVaRaTaXa]aWIaYaZa[a\a_a`a^ Eaaac=O \)   d{hq# !")'$%*+2(,-./01;3456789:=>?B<@LCDEFGHIJKNORM&PTUYSVX[\_Z!]]c`9abGGGGf(GsG -G%GGG G G GGG }GGGGGGGGGGwGGG"GFG  G'G#G$G%G&G)G,G(ξG*G.G2G-MG/G1G4G8G3G5G7G:G>G9G;G=G@GDG?kGAGC -GFGKGE#YGGGIGJGMGRGL1GNGPGQGTGWGS?GUG]GXU9GYGZG[G\G_G`GaG^c?Gb    -   ϊr 5'!"$%&+( l) /, U-30 174 $[5;8 *9?< /D=E@ EABCDxP IF Z%GOJ q'KLMNSP QYT UVWX]Z Y[c^ K_`ab 0"F !]  -!) !?3!S!jxO$ !t!#)%!&(+,/*!-2340!`1:5!689@;! -<>?FA"{BDELG"HJKPM"NRWQ"SUVY^X"% Z\]`_"8ac#"k - "|>  """d $"!#&'(),%"*/-".123470"59<8#<:@=#>BCFA#DJG#$HLMVTK#&NPQRSWXY[U#G^Z]_\#c)^ac`#tb%x1x2  -# $!0## x-%#$7.0$$&'()*+,-/$+ !$,"$-}$.$Ma$u89:>1$V;<=23456$'7$H$>$HJ$UFL?$GIK@ABCD$^E$Z$j$%&TWM%:UVNO%3PQR%5JS%6F%7f%TqZX%aY^[%di\x_% `c(x x%}xxx %xxx%xx&x%4xxxx"x$x3x'&Bx(x/x4x5x6x7x8x9x:x;x<x=xNx>x?x@& xA&0xB&TxC&rxD&xE& xF' xG'xH'\}xI'lxJ'|xK'LxL(AcxM( (9(((((W(((g((() )Jd^_`abc)r}  -    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc >)Ý > > > > > > > > >  > - >  >  >  > > > > >)r)[ +c c c ccccccccc V}c X Z \ cccccccc c!c"c$cx`x,x#x0x.x+x x!x*xxc*c+c,%c1c/c%c.c&c'c(c)*Dxc2c3c8c05c4xWxVxUc6c7x)c=c>iycBc9V_c?c@c:c;c<xxcDcEcGcCp#cFcUcScHcIcKcLcMcNcOcPcQcRcTcVcWcXcYcZc[c\c]c^c_c`cacbccxXxa   +   /*"#.!G$%&'()*+,xY-017/b2=8vx9xbE>?BKFGMNOTLPSx%W[UVXb\']`'cx'xcb' '1''' +H' ''['''mo''''"'`''!'%')'#`'$'+','/'*e'-'K'1'9'7'0ǽ'2'6';'='8j':'A'>1'?'C'D'E'F'G'H'N'L'B 'Ix['O'P'R'Mr'Q'T'U'V'W'X'\'S'Y'['^'a']0/'_'`'c'bA{  f +  !"#' $&+(-)*-./3,P0264589:>7_;=G?6@ABCDEFIJKOHGLNQRVP`{SUXY]WuZxZ\_`ab^c7  +    _"#%!.$'()*+,-1&@.042]36789:@A>5_G;=C?|BEFGHIMD'JLORNnPTUVbZSWY]ca[Aaa\]^_`aָ +'"aal`aaaa a axa +a akaaaaMaaaaa"aaaa#aa!aaaaaa  xa%a&a'a+a$,a(a*a.a,Mza-a0a6a4a/S@a1a3a7a8a:a5pa9a?a;Na<aAaDa@:aBaCaFaIaE8aGxTaHaQaJvaKaLaMaNaOaPaSaVaRaTaXa]aWIaYaZa[a\a_a`a^ Eaaac=O \)   d {hq# !")'$%*+2(,-./01;3456789: +=>?B<@LCDEFGHIJKNORM&PTUYSVX[\_Z!]]c`9ab GGGGf(GsG +G%GGG G G GGG }GGGGGGGGGGwGGG"GFG  G'G#G$G%G&G)G,G(ξG*G.G2G-MG/G1G4G8G3G5G7G:G>G9G;G=G@GDG?kGAGC GFGKGE#YGGGIGJGMGRGL1GNGPGQGTGWGS?GUG]GXU9GYGZG[G\G_G`GaG^c?Gb   +   ϊr 5'!"$%&+( l)/, U-30 174 $[5;8 *9?< /D=E@ EABCDxSIF Z%GOJ q'KLMNSP QYT UVWX]Z Y[c^ K_`ab 0"F !]  +!) !?3!S!jxR$ !t!#)%!&(+,/*!-2340!`1:5!689@;! +<>?FA"{BDELG"HJKPM"NRWQ"SUVY^X"% Z\]`_"8ac#"k + "|>  """d $"!#&'(),%"*/-".123470"59<8#<:@=#>BCFA#DJG#$HLMVTK#&NPQRSWXY[U#G^Z]_\#c)^ac`#tb%lx1x2  +# $!## x-%#$.0$$&'()*+,-/$+] !$,e"$-[$.e$M?$u89:>1$Vq;<=23456$7$&$$HJ$3FL?$GIK@ABCD$<E$8$H$%&|TWM%UVNO%3PQR%5(S%6$%7D%TOZX%aY^[%dG\x_%`c),x x%[xxx %ݦxxx%xx&x%xxxx"x$x3x'& x(x/x4xOx5x6x7x8xQx9x:xPx;x<x=xNx>x?x@&xA&0xB&NxC&vxD&*xE&xF&xG'kVxH'+xI((xJ(pxK(xL)4xM))){)))>))g)))!)#)%* !*8=abc*_E  +    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc >*. > > > > > > > > >  > + >  >  >  > > > > > > > >**W endstream endobj startxref -2739547 +2800727 %%EOF diff --git a/docs/src/cuda.tex b/docs/src/cuda.tex index c6ee7dfa..0ac435ef 100644 --- a/docs/src/cuda.tex +++ b/docs/src/cuda.tex @@ -31,9 +31,19 @@ routine in the library is built according to the following principles: In this way, data items are put on the {GPU} memory ``on demand'' and remain there as long as ``normal'' computations are carried out. As an example, the following call to a matrix-vector product +\ifpdf \begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{fortran} call psb_spmm(alpha,a,x,beta,y,desc_a,info) \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} + call psb_spmm(alpha,a,x,beta,y,desc_a,info) +\end{verbatim} + \end{minipage} + \end{center} +\fi will transparently and automatically be performed on the {GPU} whenever all three data inputs \fortinline|a|, \fortinline|x| and \fortinline|y| are {GPU}-enabled. If a program makes many such calls @@ -81,9 +91,19 @@ and \fortinline|beta|, and the return code \fortinline|info|. environment} \addcontentsline{toc}{subsection}{psb\_cuda\_init} +\ifpdf \begin{minted}[breaklines=true]{fortran} call psb_cuda_init(ctxt [, device]) \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +call psb_cuda_init(ctxt [, device]) +\end{verbatim} + \end{minipage} + \end{center} +\fi This subroutine initializes the PSBLAS-CUDA environment. \begin{description} @@ -109,9 +129,19 @@ available on the current node. environment} \addcontentsline{toc}{subsection}{psb\_cuda\_exit} +\ifpdf \begin{minted}[breaklines=true]{fortran} call psb_cuda_exit(ctxt) \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +call psb_cuda_exit(ctxt) +\end{verbatim} + \end{minipage} + \end{center} +\fi This subroutine exits from the PSBLAS CUDA context. \begin{description} @@ -131,9 +161,19 @@ Specified as: an integer variable. \subsection*{psb\_cuda\_DeviceSync --- Synchronize CUDA device} \addcontentsline{toc}{subsection}{psb\_cuda\_DeviceSync} +\ifpdf \begin{minted}[breaklines=true]{fortran} call psb_cuda_DeviceSync() \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +call psb_cuda_DeviceSync() +\end{verbatim} + \end{minipage} + \end{center} +\fi This subroutine ensures that all previosly invoked kernels, i.e. all invocation of CUDA-side code, have completed. @@ -142,45 +182,96 @@ invocation of CUDA-side code, have completed. \subsection*{psb\_cuda\_getDeviceCount } \addcontentsline{toc}{subsection}{psb\_cuda\_getDeviceCount} +\ifpdf \begin{minted}[breaklines=true]{fortran} ngpus = psb_cuda_getDeviceCount() \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +ngpus = psb_cuda_getDeviceCount() +\end{verbatim} + \end{minipage} + \end{center} +\fi Get number of devices available on current computing node. \subsection*{psb\_cuda\_getDevice } \addcontentsline{toc}{subsection}{psb\_cuda\_getDevice} +\ifpdf \begin{minted}[breaklines=true]{fortran} ngpus = psb_cuda_getDevice() \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +ngpus = psb_cuda_getDevice() +\end{verbatim} + \end{minipage} + \end{center} +\fi Get device in use by current process. \subsection*{psb\_cuda\_setDevice } \addcontentsline{toc}{subsection}{psb\_cuda\_setDevice} +\ifpdf \begin{minted}[breaklines=true]{fortran} info = psb_cuda_setDevice(dev) \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +info = psb_cuda_setDevice(dev) +\end{verbatim} + \end{minipage} + \end{center} +\fi Set device to be used by current process. \subsection*{psb\_cuda\_DeviceHasUVA } \addcontentsline{toc}{subsection}{psb\_cuda\_DeviceHasUVA} +\ifpdf \begin{minted}[breaklines=true]{fortran} hasUva = psb_cuda_DeviceHasUVA() \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +hasUva = psb_cuda_DeviceHasUVA() +\end{verbatim} + \end{minipage} + \end{center} +\fi -Returns true if device currently in use supports UVA (Unified Virtual Addressing). +Returns true if device currently in use supports UVA +(Unified Virtual Addressing). \subsection*{psb\_cuda\_WarpSize } \addcontentsline{toc}{subsection}{psb\_cuda\_WarpSize} +\ifpdf \begin{minted}[breaklines=true]{fortran} nw = psb_cuda_WarpSize() \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +nw = psb_cuda_WarpSize() +\end{verbatim} + \end{minipage} + \end{center} +\fi Returns the warp size. @@ -188,18 +279,38 @@ Returns the warp size. \subsection*{psb\_cuda\_MultiProcessors } \addcontentsline{toc}{subsection}{psb\_cuda\_MultiProcessors} +\ifpdf \begin{minted}[breaklines=true]{fortran} nmp = psb_cuda_MultiProcessors() \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +nmp = psb_cuda_MultiProcessors() +\end{verbatim} + \end{minipage} + \end{center} +\fi Returns the number of multiprocessors in the CUDA device. \subsection*{psb\_cuda\_MaxThreadsPerMP } \addcontentsline{toc}{subsection}{psb\_cuda\_MaxThreadsPerMP} +\ifpdf \begin{minted}[breaklines=true]{fortran} nt = psb_cuda_MaxThreadsPerMP() \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +nt = psb_cuda_MaxThreadsPerMP() +\end{verbatim} + \end{minipage} + \end{center} +\fi Returns the maximum number of threads per multiprocessor. @@ -207,9 +318,19 @@ Returns the maximum number of threads per multiprocessor. \subsection*{psb\_cuda\_MaxRegistersPerBlock } \addcontentsline{toc}{subsection}{psb\_cuda\_MaxRegisterPerBlock} +\ifpdf \begin{minted}[breaklines=true]{fortran} nr = psb_cuda_MaxRegistersPerBlock() \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +nr = psb_cuda_MaxRegistersPerBlock() +\end{verbatim} + \end{minipage} + \end{center} +\fi Returns the maximum number of register per thread block. @@ -217,27 +338,57 @@ Returns the maximum number of register per thread block. \subsection*{psb\_cuda\_MemoryClockRate } \addcontentsline{toc}{subsection}{psb\_cuda\_MemoryClockRate} +\ifpdf \begin{minted}[breaklines=true]{fortran} cl = psb_cuda_MemoryClockRate() \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +cl = psb_cuda_MemoryClockRate() +\end{verbatim} + \end{minipage} + \end{center} +\fi Returns the memory clock rate in KHz, as an integer. \subsection*{psb\_cuda\_MemoryBusWidth } \addcontentsline{toc}{subsection}{psb\_cuda\_MemoryBusWidth} +\ifpdf \begin{minted}[breaklines=true]{fortran} nb = psb_cuda_MemoryBusWidth() \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +nb = psb_cuda_MemoryBusWidth() +\end{verbatim} + \end{minipage} + \end{center} +\fi Returns the memory bus width in bits. \subsection*{psb\_cuda\_MemoryPeakBandwidth } \addcontentsline{toc}{subsection}{psb\_cuda\_MemoryPeakBandwidth} +\ifpdf \begin{minted}[breaklines=true]{fortran} bw = psb_cuda_MemoryPeakBandwidth() \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +bw = psb_cuda_MemoryPeakBandwidth() +\end{verbatim} + \end{minipage} + \end{center} +\fi Returns the peak memory bandwidth in MB/s (real double precision). diff --git a/docs/src/ext-intro.tex b/docs/src/ext-intro.tex index ef9b882d..44e9915c 100644 --- a/docs/src/ext-intro.tex +++ b/docs/src/ext-intro.tex @@ -32,6 +32,7 @@ following steps: Suppose you want to use the CUDA-enabled ELLPACK data structure; you would use a piece of code like this (and don't forget, you need CUDA-side vectors along with the matrices): +\ifpdf \begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{fortran} program my_cuda_test use psb_base_mod @@ -80,6 +81,61 @@ program my_cuda_test stop end program my_cuda_test \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} +program my_cuda_test + use psb_base_mod + use psb_util_mod + use psb_ext_mod + use psb_cuda_mod + type(psb_dspmat_type) :: a, agpu + type(psb_d_vect_type) :: x, xg, bg + + real(psb_dpk_), allocatable :: xtmp(:) + type(psb_d_vect_cuda) :: vmold + type(psb_d_elg_sparse_mat) :: aelg + type(psb_ctxt_type) :: ctxt + integer :: iam, np + + + call psb_init(ctxt) + call psb_info(ctxt,iam,np) + call psb_cuda_init(ctxt, iam) + + + ! My own home-grown matrix generator + call gen_matrix(ctxt,idim,desc_a,a,x,info) + if (info /= 0) goto 9999 + + call a%cscnv(agpu,info,mold=aelg) + if (info /= 0) goto 9999 + xtmp = x%get_vect() + call xg%bld(xtmp,mold=vmold) + call bg%bld(size(xtmp),mold=vmold) + + ! Do sparse MV + call psb_spmm(done,agpu,xg,dzero,bg,desc_a,info) + + +9999 continue + if (info == 0) then + write(*,*) '42' + else + write(*,*) 'Something went wrong ',info + end if + + + call psb_cuda_exit() + call psb_exit(ctxt) + stop +end program my_cuda_test +\end{verbatim} + \end{minipage} + \end{center} +\fi + A full example of this strategy can be seen in the \texttt{test/ext/kernel} and \texttt{test/\-cuda/\-kernel} subdirectories, where we provide sample programs @@ -132,7 +188,11 @@ OFFSET & Offset for diagonals \\ \begin{figure}[ht] \centering % \includegraphics[width=5.2cm]{figures/mat.eps} - \includegraphics[width=5.2cm]{figures/mat.pdf} +\ifcase\pdfoutput + \includegraphics[width=5.2cm]{mat.png} +\or + \includegraphics[width=5.2cm]{figures/mat.pdf} +\fi \caption{Example of sparse matrix} \label{fig:dense} \end{figure} @@ -155,7 +215,11 @@ indices, e.g. the last valid one found in the same row. \begin{figure}[ht] \centering % \includegraphics[width=8.2cm]{figures/ell.eps} - \includegraphics[width=8.2cm]{figures/ell.pdf} +\ifcase\pdfoutput + \includegraphics[width=8.2cm]{ell.png} +\or + \includegraphics[width=8.2cm]{figures/ell.pdf} +\fi \caption{ELLPACK compression of matrix in Figure~\ref{fig:dense}} \label{fig:ell} \end{figure} @@ -199,6 +263,7 @@ computing days; in modern CPUs it is not quite as popular, but it is the basis for many GPU formats. The relevant data type is \verb|psb_T_ell_sparse_mat|: +\ifpdf \begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{fortran} type, extends(psb_d_base_sparse_mat) :: psb_d_ell_sparse_mat ! @@ -212,6 +277,25 @@ The relevant data type is \verb|psb_T_ell_sparse_mat|: .... end type psb_d_ell_sparse_mat \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} + type, extends(psb_d_base_sparse_mat) :: psb_d_ell_sparse_mat + ! + ! ITPACK/ELL format, extended. + ! + + integer(psb_ipk_), allocatable :: irn(:), ja(:,:), idiag(:) + real(psb_dpk_), allocatable :: val(:,:) + + contains + .... + end type psb_d_ell_sparse_mat +\end{verbatim} + \end{minipage} + \end{center} +\fi \subsubsection*{Hacked ELLPACK} @@ -251,13 +335,18 @@ submatrix inside the stacked \textit{cM}/\textit{rP} buffers, plus an additional element pointing past the end of the last block, where the next one would begin. We thus have the property that -the elements of the $k$-th \textit{hack} are stored between \verb|hackOffsets[k]| and +the elements of the $k$-th \textit{hack} are stored between +\verb|hackOffsets[k]| and \verb|hackOffsets[k+1]|, similarly to what happens in the CSR format. \begin{figure}[ht] \centering % \includegraphics[width=8.2cm]{../figures/hll.eps} - \includegraphics[width=.72\textwidth]{../figures/hll.pdf} +\ifcase\pdfoutput + \includegraphics[width=.72\textwidth]{hll.png} +\or + \includegraphics[width=.72\textwidth]{../figures/hll.pdf} +\fi \caption{Hacked ELLPACK compression of matrix in Figure~\ref{fig:dense}} \label{fig:hll} \end{figure} @@ -267,6 +356,7 @@ therefore the additional memory is limited to the hack in which the row appears. The relevant data type is \verb|psb_T_hll_sparse_mat|: +\ifpdf \begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{fortran} type, extends(psb_d_base_sparse_mat) :: psb_d_hll_sparse_mat ! @@ -280,6 +370,25 @@ The relevant data type is \verb|psb_T_hll_sparse_mat|: .... end type \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} + type, extends(psb_d_base_sparse_mat) :: psb_d_hll_sparse_mat + ! + ! HLL format. (Hacked ELL) + ! + integer(psb_ipk_) :: hksz + integer(psb_ipk_), allocatable :: irn(:), ja(:), idiag(:), hkoffs(:) + real(psb_dpk_), allocatable :: val(:) + + contains + .... + end type +\end{verbatim} + \end{minipage} + \end{center} +\fi \subsubsection*{Diagonal storage} @@ -300,13 +409,18 @@ addressing is required. \begin{figure}[ht] \centering % \includegraphics[width=8.2cm]{figures/dia.eps} - \includegraphics[width=.72\textwidth]{figures/dia.pdf} +\ifcase\pdfoutput + \includegraphics[width=.72\textwidth]{dia.png} +\or + \includegraphics[width=.72\textwidth]{figures/dia.pdf} +\fi \caption{DIA compression of matrix in Figure~\ref{fig:dense}} \label{fig:dia} \end{figure} \begin{algorithm} +\ifpdf \begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{fortran} do j=1,ndiag if (offset(j) > 0) then @@ -319,11 +433,30 @@ addressing is required. end do end do \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} + do j=1,ndiag + if (offset(j) > 0) then + ir1 = 1; ir2 = m - offset(j); + else + ir1 = 1 - offset(j); ir2 = m; + end if + do i=ir1,ir2 + y(i) = y(i) + alpha*as(i,j)*x(i+offset(j)) + end do + end do +\end{verbatim} + \end{minipage} + \end{center} +\fi \caption{\label{alg:dia} Matrix-Vector product in DIA format} \end{algorithm} The relevant data type is \verb|psb_T_dia_sparse_mat|: +\ifpdf \begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{fortran} type, extends(psb_d_base_sparse_mat) :: psb_d_dia_sparse_mat ! @@ -336,6 +469,24 @@ The relevant data type is \verb|psb_T_dia_sparse_mat|: end type \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} + type, extends(psb_d_base_sparse_mat) :: psb_d_dia_sparse_mat + ! + ! DIA format, extended. + ! + + integer(psb_ipk_), allocatable :: offset(:) + integer(psb_ipk_) :: nzeros + real(psb_dpk_), allocatable :: data(:,:) + + end type +\end{verbatim} + \end{minipage} + \end{center} +\fi @@ -378,12 +529,17 @@ the number of diagonals of the $k$-th \textit{hack} is given by \begin{figure}[ht] \centering % \includegraphics[width=8.2cm]{../figures/hdia.eps} - \includegraphics[width=.72\textwidth]{../figures/hdia.pdf} +\ifcase\pdfoutput + \includegraphics[width=.72\textwidth]{hdia.png} +\or + \includegraphics[width=.72\textwidth]{../figures/hdia.pdf} +\fi \caption{Hacked DIA compression of matrix in Figure~\ref{fig:dense}} \label{fig:hdia} \end{figure} The relevant data type is \verb|psb_T_hdia_sparse_mat|: +\ifpdf \begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{fortran} type pm real(psb_dpk_), allocatable :: data(:,:) @@ -408,5 +564,35 @@ The relevant data type is \verb|psb_T_hdia_sparse_mat|: .... end type \end{minted} +\else +\begin{center} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} + type pm + real(psb_dpk_), allocatable :: data(:,:) + end type pm + + type po + integer(psb_ipk_), allocatable :: off(:) + end type po + + type, extends(psb_d_base_sparse_mat) :: psb_d_hdia_sparse_mat + ! + ! HDIA format, extended. + ! + + type(pm), allocatable :: hdia(:) + type(po), allocatable :: offset(:) + integer(psb_ipk_) :: nblocks, nzeros + integer(psb_ipk_) :: hack = 64 + integer(psb_long_int_k_) :: dim=0 + + contains + .... + end type +\end{verbatim} + \end{minipage} + \end{center} +\fi diff --git a/docs/src/figures/dia.png b/docs/src/figures/dia.png new file mode 100644 index 00000000..de7db919 Binary files /dev/null and b/docs/src/figures/dia.png differ diff --git a/docs/src/figures/ell.png b/docs/src/figures/ell.png new file mode 100644 index 00000000..31911882 Binary files /dev/null and b/docs/src/figures/ell.png differ diff --git a/docs/src/figures/hdia.png b/docs/src/figures/hdia.png new file mode 100644 index 00000000..08bfb5ff Binary files /dev/null and b/docs/src/figures/hdia.png differ diff --git a/docs/src/figures/hll.png b/docs/src/figures/hll.png new file mode 100644 index 00000000..219b751a Binary files /dev/null and b/docs/src/figures/hll.png differ diff --git a/docs/src/figures/mat.png b/docs/src/figures/mat.png new file mode 100644 index 00000000..d4f5c6f9 Binary files /dev/null and b/docs/src/figures/mat.png differ diff --git a/docs/src/userhtml.tex b/docs/src/userhtml.tex index eb1d7943..770f9194 100644 --- a/docs/src/userhtml.tex +++ b/docs/src/userhtml.tex @@ -18,8 +18,6 @@ \newtheorem{corollary}{Corollary} \usepackage{listings} \usepackage{algorithm2e} -\usepackage{minted} -\usemintedstyle{friendly} \usepackage{microtype} \ifpdf \newmintinline[fortinline]{fortran}{}