From fa4c86c99092b12ad52fa095ee39ebff5e98a41a Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 18 Dec 2019 14:08:19 +0000 Subject: [PATCH] Switch to htlatex step 2. --- docs/html/cmsy10-42.png | Bin 0 -> 331 bytes docs/html/cmsy10-48.png | Bin 0 -> 373 bytes docs/html/cmsy10-49.png | Bin 0 -> 292 bytes docs/html/index.html | 255 ++++++++ docs/html/userhtml.css | 157 +++++ docs/html/userhtml.html | 255 ++++++++ docs/html/userhtml0x.png | Bin 0 -> 1840 bytes docs/html/userhtml10.html | 25 + docs/html/userhtml105.html | 19 + docs/html/userhtml10x.png | Bin 0 -> 1201 bytes docs/html/userhtml11x.png | Bin 0 -> 2024 bytes docs/html/userhtml12x.png | Bin 0 -> 2147 bytes docs/html/userhtml13x.png | Bin 0 -> 1295 bytes docs/html/userhtml14x.png | Bin 0 -> 2015 bytes docs/html/userhtml15x.png | Bin 0 -> 1306 bytes docs/html/userhtml16x.png | Bin 0 -> 1325 bytes docs/html/userhtml17x.png | Bin 0 -> 1572 bytes docs/html/userhtml18x.png | Bin 0 -> 1078 bytes docs/html/userhtml19x.png | Bin 0 -> 1236 bytes docs/html/userhtml1x.png | Bin 0 -> 3309 bytes docs/html/userhtml20x.png | Bin 0 -> 1299 bytes docs/html/userhtml21x.png | Bin 0 -> 1474 bytes docs/html/userhtml22x.png | Bin 0 -> 1476 bytes docs/html/userhtml23x.png | Bin 0 -> 11173 bytes docs/html/userhtml24x.png | Bin 0 -> 439 bytes docs/html/userhtml25x.png | Bin 0 -> 6407 bytes docs/html/userhtml26x.png | Bin 0 -> 765 bytes docs/html/userhtml27x.png | Bin 0 -> 11086 bytes docs/html/userhtml28x.png | Bin 0 -> 1950 bytes docs/html/userhtml29x.png | Bin 0 -> 2043 bytes docs/html/userhtml2x.png | Bin 0 -> 1674 bytes docs/html/userhtml30x.png | Bin 0 -> 2396 bytes docs/html/userhtml31x.png | Bin 0 -> 2664 bytes docs/html/userhtml32x.png | Bin 0 -> 1764 bytes docs/html/userhtml33x.png | Bin 0 -> 1834 bytes docs/html/userhtml3x.png | Bin 0 -> 1122 bytes docs/html/userhtml4x.png | Bin 0 -> 1118 bytes docs/html/userhtml5.html | 18 + docs/html/userhtml5x.png | Bin 0 -> 1167 bytes docs/html/userhtml6x.png | Bin 0 -> 1820 bytes docs/html/userhtml7.html | 23 + docs/html/userhtml7x.png | Bin 0 -> 1465 bytes docs/html/userhtml8x.png | Bin 0 -> 2529 bytes docs/html/userhtml97.html | 18 + docs/html/userhtml9x.png | Bin 0 -> 2147 bytes docs/html/userhtmlli1.html | 318 ++++++++++ docs/html/userhtmlli2.html | 186 ++++++ docs/html/userhtmlse1.html | 96 +++ docs/html/userhtmlse10.html | 64 ++ docs/html/userhtmlse11.html | 41 ++ docs/html/userhtmlse2.html | 126 ++++ docs/html/userhtmlse3.html | 184 ++++++ docs/html/userhtmlse4.html | 75 +++ docs/html/userhtmlse5.html | 52 ++ docs/html/userhtmlse6.html | 115 ++++ docs/html/userhtmlse7.html | 87 +++ docs/html/userhtmlse8.html | 418 +++++++++++++ docs/html/userhtmlse9.html | 57 ++ docs/html/userhtmlsu1.html | 149 +++++ docs/html/userhtmlsu10.html | 233 ++++++++ docs/html/userhtmlsu11.html | 249 ++++++++ docs/html/userhtmlsu12.html | 208 +++++++ docs/html/userhtmlsu13.html | 223 +++++++ docs/html/userhtmlsu14.html | 177 ++++++ docs/html/userhtmlsu15.html | 224 +++++++ docs/html/userhtmlsu16.html | 192 ++++++ docs/html/userhtmlsu17.html | 227 +++++++ docs/html/userhtmlsu18.html | 177 ++++++ docs/html/userhtmlsu19.html | 171 ++++++ docs/html/userhtmlsu2.html | 129 ++++ docs/html/userhtmlsu20.html | 171 ++++++ docs/html/userhtmlsu21.html | 337 +++++++++++ docs/html/userhtmlsu22.html | 398 +++++++++++++ docs/html/userhtmlsu23.html | 832 ++++++++++++++++++++++++++ docs/html/userhtmlsu24.html | 1014 ++++++++++++++++++++++++++++++++ docs/html/userhtmlsu25.html | 225 +++++++ docs/html/userhtmlsu26.html | 244 ++++++++ docs/html/userhtmlsu27.html | 419 +++++++++++++ docs/html/userhtmlsu28.html | 206 +++++++ docs/html/userhtmlsu29.html | 122 ++++ docs/html/userhtmlsu3.html | 282 +++++++++ docs/html/userhtmlsu30.html | 100 ++++ docs/html/userhtmlsu31.html | 83 +++ docs/html/userhtmlsu32.html | 163 +++++ docs/html/userhtmlsu33.html | 128 ++++ docs/html/userhtmlsu34.html | 311 ++++++++++ docs/html/userhtmlsu35.html | 186 ++++++ docs/html/userhtmlsu36.html | 98 +++ docs/html/userhtmlsu37.html | 114 ++++ docs/html/userhtmlsu38.html | 132 +++++ docs/html/userhtmlsu39.html | 178 ++++++ docs/html/userhtmlsu4.html | 61 ++ docs/html/userhtmlsu40.html | 123 ++++ docs/html/userhtmlsu41.html | 102 ++++ docs/html/userhtmlsu42.html | 109 ++++ docs/html/userhtmlsu43.html | 162 +++++ docs/html/userhtmlsu44.html | 140 +++++ docs/html/userhtmlsu45.html | 103 ++++ docs/html/userhtmlsu46.html | 131 +++++ docs/html/userhtmlsu47.html | 103 ++++ docs/html/userhtmlsu48.html | 131 +++++ docs/html/userhtmlsu49.html | 107 ++++ docs/html/userhtmlsu5.html | 697 ++++++++++++++++++++++ docs/html/userhtmlsu50.html | 106 ++++ docs/html/userhtmlsu51.html | 209 +++++++ docs/html/userhtmlsu52.html | 113 ++++ docs/html/userhtmlsu53.html | 229 ++++++++ docs/html/userhtmlsu54.html | 121 ++++ docs/html/userhtmlsu55.html | 118 ++++ docs/html/userhtmlsu56.html | 101 ++++ docs/html/userhtmlsu57.html | 80 +++ docs/html/userhtmlsu58.html | 96 +++ docs/html/userhtmlsu59.html | 58 ++ docs/html/userhtmlsu6.html | 963 ++++++++++++++++++++++++++++++ docs/html/userhtmlsu60.html | 63 ++ docs/html/userhtmlsu61.html | 62 ++ docs/html/userhtmlsu62.html | 110 ++++ docs/html/userhtmlsu63.html | 124 ++++ docs/html/userhtmlsu64.html | 125 ++++ docs/html/userhtmlsu65.html | 125 ++++ docs/html/userhtmlsu66.html | 124 ++++ docs/html/userhtmlsu67.html | 125 ++++ docs/html/userhtmlsu68.html | 141 +++++ docs/html/userhtmlsu69.html | 129 ++++ docs/html/userhtmlsu7.html | 352 +++++++++++ docs/html/userhtmlsu70.html | 124 ++++ docs/html/userhtmlsu71.html | 93 +++ docs/html/userhtmlsu72.html | 61 ++ docs/html/userhtmlsu73.html | 61 ++ docs/html/userhtmlsu74.html | 63 ++ docs/html/userhtmlsu75.html | 110 ++++ docs/html/userhtmlsu76.html | 121 ++++ docs/html/userhtmlsu77.html | 94 +++ docs/html/userhtmlsu78.html | 93 +++ docs/html/userhtmlsu79.html | 105 ++++ docs/html/userhtmlsu8.html | 71 +++ docs/html/userhtmlsu80.html | 88 +++ docs/html/userhtmlsu81.html | 125 ++++ docs/html/userhtmlsu82.html | 186 ++++++ docs/html/userhtmlsu83.html | 149 +++++ docs/html/userhtmlsu84.html | 91 +++ docs/html/userhtmlsu85.html | 69 +++ docs/html/userhtmlsu86.html | 94 +++ docs/html/userhtmlsu87.html | 357 +++++++++++ docs/html/userhtmlsu9.html | 79 +++ docs/src/figures/points.png | Bin 0 -> 6317 bytes docs/src/figures/psblas.png | Bin 0 -> 4604 bytes docs/src/figures/try8x8.png | Bin 0 -> 6081 bytes docs/src/figures/try8x8_ov.png | Bin 0 -> 6936 bytes 149 files changed, 18568 insertions(+) create mode 100644 docs/html/cmsy10-42.png create mode 100644 docs/html/cmsy10-48.png create mode 100644 docs/html/cmsy10-49.png create mode 100644 docs/html/index.html create mode 100644 docs/html/userhtml.css create mode 100644 docs/html/userhtml.html create mode 100644 docs/html/userhtml0x.png create mode 100644 docs/html/userhtml10.html create mode 100644 docs/html/userhtml105.html create mode 100644 docs/html/userhtml10x.png create mode 100644 docs/html/userhtml11x.png create mode 100644 docs/html/userhtml12x.png create mode 100644 docs/html/userhtml13x.png create mode 100644 docs/html/userhtml14x.png create mode 100644 docs/html/userhtml15x.png create mode 100644 docs/html/userhtml16x.png create mode 100644 docs/html/userhtml17x.png create mode 100644 docs/html/userhtml18x.png create mode 100644 docs/html/userhtml19x.png create mode 100644 docs/html/userhtml1x.png create mode 100644 docs/html/userhtml20x.png create mode 100644 docs/html/userhtml21x.png create mode 100644 docs/html/userhtml22x.png create mode 100644 docs/html/userhtml23x.png create mode 100644 docs/html/userhtml24x.png create mode 100644 docs/html/userhtml25x.png create mode 100644 docs/html/userhtml26x.png create mode 100644 docs/html/userhtml27x.png create mode 100644 docs/html/userhtml28x.png create mode 100644 docs/html/userhtml29x.png create mode 100644 docs/html/userhtml2x.png create mode 100644 docs/html/userhtml30x.png create mode 100644 docs/html/userhtml31x.png create mode 100644 docs/html/userhtml32x.png create mode 100644 docs/html/userhtml33x.png create mode 100644 docs/html/userhtml3x.png create mode 100644 docs/html/userhtml4x.png create mode 100644 docs/html/userhtml5.html create mode 100644 docs/html/userhtml5x.png create mode 100644 docs/html/userhtml6x.png create mode 100644 docs/html/userhtml7.html create mode 100644 docs/html/userhtml7x.png create mode 100644 docs/html/userhtml8x.png create mode 100644 docs/html/userhtml97.html create mode 100644 docs/html/userhtml9x.png create mode 100644 docs/html/userhtmlli1.html create mode 100644 docs/html/userhtmlli2.html create mode 100644 docs/html/userhtmlse1.html create mode 100644 docs/html/userhtmlse10.html create mode 100644 docs/html/userhtmlse11.html create mode 100644 docs/html/userhtmlse2.html create mode 100644 docs/html/userhtmlse3.html create mode 100644 docs/html/userhtmlse4.html create mode 100644 docs/html/userhtmlse5.html create mode 100644 docs/html/userhtmlse6.html create mode 100644 docs/html/userhtmlse7.html create mode 100644 docs/html/userhtmlse8.html create mode 100644 docs/html/userhtmlse9.html create mode 100644 docs/html/userhtmlsu1.html create mode 100644 docs/html/userhtmlsu10.html create mode 100644 docs/html/userhtmlsu11.html create mode 100644 docs/html/userhtmlsu12.html create mode 100644 docs/html/userhtmlsu13.html create mode 100644 docs/html/userhtmlsu14.html create mode 100644 docs/html/userhtmlsu15.html create mode 100644 docs/html/userhtmlsu16.html create mode 100644 docs/html/userhtmlsu17.html create mode 100644 docs/html/userhtmlsu18.html create mode 100644 docs/html/userhtmlsu19.html create mode 100644 docs/html/userhtmlsu2.html create mode 100644 docs/html/userhtmlsu20.html create mode 100644 docs/html/userhtmlsu21.html create mode 100644 docs/html/userhtmlsu22.html create mode 100644 docs/html/userhtmlsu23.html create mode 100644 docs/html/userhtmlsu24.html create mode 100644 docs/html/userhtmlsu25.html create mode 100644 docs/html/userhtmlsu26.html create mode 100644 docs/html/userhtmlsu27.html create mode 100644 docs/html/userhtmlsu28.html create mode 100644 docs/html/userhtmlsu29.html create mode 100644 docs/html/userhtmlsu3.html create mode 100644 docs/html/userhtmlsu30.html create mode 100644 docs/html/userhtmlsu31.html create mode 100644 docs/html/userhtmlsu32.html create mode 100644 docs/html/userhtmlsu33.html create mode 100644 docs/html/userhtmlsu34.html create mode 100644 docs/html/userhtmlsu35.html create mode 100644 docs/html/userhtmlsu36.html create mode 100644 docs/html/userhtmlsu37.html create mode 100644 docs/html/userhtmlsu38.html create mode 100644 docs/html/userhtmlsu39.html create mode 100644 docs/html/userhtmlsu4.html create mode 100644 docs/html/userhtmlsu40.html create mode 100644 docs/html/userhtmlsu41.html create mode 100644 docs/html/userhtmlsu42.html create mode 100644 docs/html/userhtmlsu43.html create mode 100644 docs/html/userhtmlsu44.html create mode 100644 docs/html/userhtmlsu45.html create mode 100644 docs/html/userhtmlsu46.html create mode 100644 docs/html/userhtmlsu47.html create mode 100644 docs/html/userhtmlsu48.html create mode 100644 docs/html/userhtmlsu49.html create mode 100644 docs/html/userhtmlsu5.html create mode 100644 docs/html/userhtmlsu50.html create mode 100644 docs/html/userhtmlsu51.html create mode 100644 docs/html/userhtmlsu52.html create mode 100644 docs/html/userhtmlsu53.html create mode 100644 docs/html/userhtmlsu54.html create mode 100644 docs/html/userhtmlsu55.html create mode 100644 docs/html/userhtmlsu56.html create mode 100644 docs/html/userhtmlsu57.html create mode 100644 docs/html/userhtmlsu58.html create mode 100644 docs/html/userhtmlsu59.html create mode 100644 docs/html/userhtmlsu6.html create mode 100644 docs/html/userhtmlsu60.html create mode 100644 docs/html/userhtmlsu61.html create mode 100644 docs/html/userhtmlsu62.html create mode 100644 docs/html/userhtmlsu63.html create mode 100644 docs/html/userhtmlsu64.html create mode 100644 docs/html/userhtmlsu65.html create mode 100644 docs/html/userhtmlsu66.html create mode 100644 docs/html/userhtmlsu67.html create mode 100644 docs/html/userhtmlsu68.html create mode 100644 docs/html/userhtmlsu69.html create mode 100644 docs/html/userhtmlsu7.html create mode 100644 docs/html/userhtmlsu70.html create mode 100644 docs/html/userhtmlsu71.html create mode 100644 docs/html/userhtmlsu72.html create mode 100644 docs/html/userhtmlsu73.html create mode 100644 docs/html/userhtmlsu74.html create mode 100644 docs/html/userhtmlsu75.html create mode 100644 docs/html/userhtmlsu76.html create mode 100644 docs/html/userhtmlsu77.html create mode 100644 docs/html/userhtmlsu78.html create mode 100644 docs/html/userhtmlsu79.html create mode 100644 docs/html/userhtmlsu8.html create mode 100644 docs/html/userhtmlsu80.html create mode 100644 docs/html/userhtmlsu81.html create mode 100644 docs/html/userhtmlsu82.html create mode 100644 docs/html/userhtmlsu83.html create mode 100644 docs/html/userhtmlsu84.html create mode 100644 docs/html/userhtmlsu85.html create mode 100644 docs/html/userhtmlsu86.html create mode 100644 docs/html/userhtmlsu87.html create mode 100644 docs/html/userhtmlsu9.html create mode 100644 docs/src/figures/points.png create mode 100644 docs/src/figures/psblas.png create mode 100644 docs/src/figures/try8x8.png create mode 100644 docs/src/figures/try8x8_ov.png diff --git a/docs/html/cmsy10-42.png b/docs/html/cmsy10-42.png new file mode 100644 index 0000000000000000000000000000000000000000..3e3ff34f417052fb633bd4a8c25b9e36646d3e05 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa&H|6fVxZU&5N4dJ%_j{M{OjrB z7@{FsI*FI}kONPvJ_{qakXoYD1OpwPLpDB#R3>;Ph)rlHp@}|^_Z~7p@mbBj`Mxw=U$4p-*ApvGz(P=uGU&UsW1TFn|O050A z<`;&8W?eozI_7uFHY;WFUKFYnzWD0NpM9Zi>#wF5tDjbSxU5+#WPxCo=}iu~V+W0k zzlR1sxvBS6Zi|@bi_MnKP)R5%f(li^JRF$_j?hyiYfj&P_Obc9N5&=JZAsBF*?fDz~l zWrKEv_BJ@)OPi8}Abw!!i(`Lh$FXx^nx>EtLRf%zZ~zlnC9c+R8?erUKcXXq8F~p! zu&o2Nk>SeE?zOtE+oN6~U#|8^jf@xdV|~PP<{eChoTcp3(|7pVhs&QDPG>+t^IU_yp7=&2=)hIHjAvNC44; z*je;5sHgCNPx-E{(Ig+px%O)#KC*&q^`N+;QJL7AU1rBl-^K`0jHs>x-ZIv?zpkJd zQGOB)wRuYFkuP{rC-|#;6U+(hf&Ccr@}0mI^m&PCkKYP>!d}CFXDQdY{71e3#*PYp T>b|F#00000NkvXXu0mjf$or+u literal 0 HcmV?d00001 diff --git a/docs/html/cmsy10-49.png b/docs/html/cmsy10-49.png new file mode 100644 index 0000000000000000000000000000000000000000..b44b91b4f5c3d06d8372bb81b4b1b16963438588 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa&H|6fVxZU&5N4dJ%_j{MyyofR z7@{FsJBd-W*?`C8wx$EK(1i<@K=OkT?_`5D2Hb}o%ja*Ez2I=)`c_<#r`MyT9=*es z*Etq{5K2>&`q9B19jMR5SUuZeK|0g(WhxIBv?@=$mE%#P&ety6e|Ek6`%brSt+x8_ zZAA~ + + + + + + + + + +

PSBLAS
User’s and Reference Guide
A reference guide for the Parallel Sparse BLAS library
Salvatore Filippone
Alfredo Buttari
Software version: 3.6.1
May 31st, 2019 + + + + + + +

+ Contents +
1 Introduction +
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 +
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 +
 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_mpicomm — Get the MPI communicator +
 7.5 psb_get_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/userhtml.css b/docs/html/userhtml.css new file mode 100644 index 00000000..201b1c23 --- /dev/null +++ b/docs/html/userhtml.css @@ -0,0 +1,157 @@ + +/* start css.sty */ +.cmr-7{font-size:70%;} +.cmmi-5{font-size:50%;font-style: italic;} +.cmmi-7{font-size:70%;font-style: italic;} +.cmmi-10{font-style: italic;} +.cmsy-7{font-size:70%;} +.cmbx-12x-x-144{font-size:172%; font-weight: bold;} +.cmbx-12x-x-144{ font-weight: bold;} +.cmbx-12x-x-144{ font-weight: bold;} +.cmbx-12x-x-144{ font-weight: bold;} +.cmti-10{ font-style: italic;} +.cmti-12{font-size:120%; font-style: italic;} +.cmbx-10{ font-weight: bold;} +.cmbx-10{ font-weight: bold;} +.cmbx-10{ font-weight: bold;} +.cmbx-10{ font-weight: bold;} +.cmtt-10{font-family: monospace;} +.cmtt-10{font-family: monospace;} +.cmtt-10{font-family: monospace;} +.cmr-9{font-size:90%;} +.cmr-8{font-size:80%;} +.cmbx-12{font-size:120%; font-weight: bold;} +.cmbx-12{ font-weight: bold;} +.cmbx-12{ font-weight: bold;} +.cmbx-12{ font-weight: bold;} +.cmtt-8{font-size:80%;font-family: monospace;} +.cmtt-8{font-family: monospace;} +.cmtt-8{font-family: monospace;} +.cmtt-9{font-size:90%;font-family: monospace;} +.cmtt-9{font-family: monospace;} +.cmtt-9{font-family: monospace;} +.cmmi-8{font-size:80%;font-style: italic;} +.cmbx-9{font-size:90%; font-weight: bold;} +.cmbx-9{ font-weight: bold;} +.cmbx-9{ font-weight: bold;} +.cmbx-9{ font-weight: bold;} +p.noindent { text-indent: 0em } +td p.noindent { text-indent: 0em; margin-top:0em; } +p.nopar { text-indent: 0em; } +p.indent{ text-indent: 1.5em } +@media print {div.crosslinks {visibility:hidden;}} +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;} +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~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;} +.obeylines-h,.obeylines-v {white-space: nowrap; } +div.obeylines-v p { margin-top:0; margin-bottom:0; } +.overline{ text-decoration:overline; } +.overline img{ border-top: 1px solid black; } +td.displaylines {text-align:center; white-space:nowrap;} +.centerline {text-align:center;} +.rightline {text-align:right;} +div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; } +.fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } +div.fbox {display:table} +div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } +div.minipage{width:100%;} +div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;} +div.center div {text-align: left;} +div.flushright, div.flushright div.flushright {text-align: right;} +div.flushright div {text-align: left;} +div.flushleft {text-align: left;} +.underline{ text-decoration:underline; } +.underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } +.framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } +.framebox-c {text-align:center;} +.framebox-l {text-align:left;} +.framebox-r {text-align:right;} +span.thank-mark{ vertical-align: super } +span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; } +div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; } +table.tabular td p{margin-top:0em;} +table.tabular {margin-left: auto; margin-right: auto;} +td p:first-child{ margin-top:0em; } +td p:last-child{ margin-bottom:0em; } +div.td00{ margin-left:0pt; margin-right:0pt; } +div.td01{ margin-left:0pt; margin-right:5pt; } +div.td10{ margin-left:5pt; margin-right:0pt; } +div.td11{ margin-left:5pt; margin-right:5pt; } +table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } +td.td00{ padding-left:0pt; padding-right:0pt; } +td.td01{ padding-left:0pt; padding-right:5pt; } +td.td10{ padding-left:5pt; padding-right:0pt; } +td.td11{ padding-left:5pt; padding-right:5pt; } +table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } +.hline hr, .cline hr{ height : 1px; margin:0px; } +.tabbing-right {text-align:right;} +span.TEX {letter-spacing: -0.125em; } +span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} +a span.TEX span.E {text-decoration: none; } +span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;} +span.LATEX span.TEX{ position:relative; left: -0.4em; } +div.float, div.figure {margin-left: auto; margin-right: auto;} +div.float img {text-align:center;} +div.figure img {text-align:center;} +.marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;} +.marginpar p{margin-top:0.4em; margin-bottom:0.4em;} +table.equation {width:100%;} +.equation td{text-align:center; } +td.equation { margin-top:1em; margin-bottom:1em; } +td.equation-label { width:5%; text-align:center; } +td.eqnarray4 { width:5%; white-space: normal; } +td.eqnarray2 { width:5%; } +table.eqnarray-star, table.eqnarray {width:100%;} +div.eqnarray{text-align:center;} +div.array {text-align:center;} +div.pmatrix {text-align:center;} +table.pmatrix {width:100%;} +span.pmatrix img{vertical-align:middle;} +div.pmatrix {text-align:center;} +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%;} +.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; } +.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;} +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 {width:100%;} +.subsectionToc, .likesubsectionToc {margin-left:2em;} +.subsubsectionToc, .likesubsubsectionToc {margin-left:4em;} +.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; } +.figure img.graphics {margin-left:10%;} +.lstlisting .label{margin-right:0.5em; } +div.lstlisting{font-family: monospace; white-space: nowrap; margin-top:0.5em; margin-bottom:0.5em; } +div.lstinputlisting{ font-family: monospace; white-space: nowrap; } +.lstinputlisting .label{margin-right:0.5em;} +/* end css.sty */ + diff --git a/docs/html/userhtml.html b/docs/html/userhtml.html new file mode 100644 index 00000000..bdfbf5f2 --- /dev/null +++ b/docs/html/userhtml.html @@ -0,0 +1,255 @@ + + + + + + + + + + +

PSBLAS
User’s and Reference Guide
A reference guide for the Parallel Sparse BLAS library
Salvatore Filippone
Alfredo Buttari
Software version: 3.6.1
May 31st, 2019 + + + + + + +

+ Contents +
1 Introduction +
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 +
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 +
 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_mpicomm — Get the MPI communicator +
 7.5 psb_get_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 new file mode 100644 index 0000000000000000000000000000000000000000..d26e17d5a886f4693c25b90591a52d66cae3d1ee GIT binary patch literal 1840 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5B{Y4Ma#aUf!7ysYXh4mo nsL^~eT7Zm}v{b1t5*YV2vg$Jb5nBwb0vSAA{an^LB{Ts5ImkO^ literal 0 HcmV?d00001 diff --git a/docs/html/userhtml10.html b/docs/html/userhtml10.html new file mode 100644 index 00000000..5d4c39b0 --- /dev/null +++ b/docs/html/userhtml10.html @@ -0,0 +1,25 @@ + + + + + + + + + + +
+

3The subroutine style psb_precinit and psb_precbl are still supported for backward + compatibility

+ diff --git a/docs/html/userhtml105.html b/docs/html/userhtml105.html new file mode 100644 index 00000000..13394996 --- /dev/null +++ b/docs/html/userhtml105.html @@ -0,0 +1,19 @@ + + + + + + + + + + +
+

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

+ diff --git a/docs/html/userhtml10x.png b/docs/html/userhtml10x.png new file mode 100644 index 0000000000000000000000000000000000000000..c16766fd668e8f9f205b002096e90305fb4e96a2 GIT binary patch literal 1201 zcmV;i1Wx;jP)e5n2S*xF%X6^;{qI~1JeOXI)Dyr(gAb;lL|7V1Lz=u z4nhYZ?f`cX;tt6FEm~RDoqcELFqhanvzD}4?OW2xou{X#y&e301UjA0k)-q#&s(Hv ze5&SN<1yo=VUfQ5rWI|myq@HxXdZ(D z(eQU_v+Mk5@g68ZD2XIkj7ivU;dkdrThV_C2ToI;>L>YXEQz!vVQxKRAxU<=dIcoa*}-$t_|I= zlIopGaC$VN42-nE>&-w0QUoOAPHW#VAsUJ1h%{qGBB=(VksQEf^6;J}bnHmMlNpO5 z;dL1)f1xjacFM8zL^}#hn&P^=U^8)6x7r^a>57@6xzFh?DbJ4{6{+yzp?M~PqP1P**B zbSPV2MuQ*vT;T+}a5%RCy?OD8R0I+sIUMiUM#0q%Oi^0n6fex^H$LY!=Hn_WxI-TU zQ|>GZ{jQ_R4W#rc1j)uy$Wc&M!4%35W19US(+Wp2qD;}Et{JP**oo0D9M(K&Rh`L5 zmd?6bPeE{$adf>J$kv|lCis9IABFdsL7a95;u{Ljg?u#ChJ88A(M6RIC<6(hq5(c~ z*d_2da17>3*kO56NrXQ$xLZAe_v)j|5~Y5AuWHJmY&WxxBy&eo1o`fLUYY%dqM#7n zhKyq)L+k~K1wNC^K4U;MVs0mo`uNEl{+$SGLpN|z!Iu(5@<;*+V|Ni$-iK+j=pTxg z`x9Ud&yaX@81*^9X%I2aj%l?I;m3{r2y3piez(K z_FaBR6op#5=yF|>L2~%>AznMqvq;~*Gi*ca!TuL~4GH55n`_T^ai!^7mC(v)w2Of& zjOP}~tbMBZ9ojBecGmctweUwnRcLkzt%^|n`Sc~gD#rdKtS_ZLXQ{qF%p`&YmbKz= P00000NkvXXu0mjfZ>uqP literal 0 HcmV?d00001 diff --git a/docs/html/userhtml11x.png b/docs/html/userhtml11x.png new file mode 100644 index 0000000000000000000000000000000000000000..aaff2dea7b648a7b11112e431234b40a8c480565 GIT binary patch literal 2024 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 Z{{zk}b1-lEGwJ{U002ovPDHLkV1hw#8HfM? literal 0 HcmV?d00001 diff --git a/docs/html/userhtml13x.png b/docs/html/userhtml13x.png new file mode 100644 index 0000000000000000000000000000000000000000..02e3ca83f5add6f2a472978251830f1aa6ebe2f9 GIT binary patch literal 1295 zcmV+q1@QWbP)e5nTt)_Fc^SK#Q+pGfDLH70c^ly1K0r62`bnCIzgcu zlul4!gR(*CZ9u=zvLh!KUy{=uDWbn*65IdN|I0a6o}QlGj14O*D?93dE;n7efO`ba z6}Xcw+~?kpcC4Y>H)Tg%Z<*gOLzj}gx62SVglAN2zmG%Z3*IGL&_jv!v@WAYOq1^Evfc;Hg%#vS>4Hv<2UI94Leq#Jii{PB6 zcb;b8&um`3M%n`wb{QAYm7MRb(h?kQn>_o%sAW5zpJyy=Vc#)p&OO&H#wlwPo^wIU z)E$`Ulx>*X=aQ2?@Y-~ipA_F+hvq!e+22$shaXIIh&VcP1DyOYeJ@@04J2>5I=v>J zc@DQs48GnF?fcxDU^$4#*}1HvldZ(W(Po3$F*m%8&PbW)b=+)Ck?(qSkpb6?cCJ!+ zBuSHaqzjDSYhevKv({j!aCleNBcldUhCw5ksX0wp%>Jl@yn6w>4W#YNzFu^TL_!D8 zArC6`H>nJ8&%~;9#h4pbrPN4-nQ02B1hU?|q@>RXGg=1=mfyB)+63pCy|0WLcr`CX z%9=2m@SuUv24mUOu_dsyCp}6yVI6*c7VW}&7QdN17PRSERgb%VR8v?wqb+!+5N9pGqpCdU;&~dp2L3Ft)m3z}5Zw!z8j+0PJ_qRKs1s1a z9|+O~z(aMs&j@v%29-ei5WyvcxZY{3&fowo>FQu`b<%XmT-5edBB5ukl__YbzUiVQ ztpZXnbKV9z!chYhS&LC;skmTNd{D@e(H7zM)AbsoIDy_);0O`S+$?JYZ;Dg;v>~F0 z0c&Zql#K$|;W_yer?v@)3@>{*SlI%Ax5qePRQH;+H|rUk3Q;NpU72dXt@R{mRnXgN zD%?p$Ea zN)oCQ@1CoB+J3<34XY7T2KUkEA~E~t3XZ}p!Yg*KsDs!9$|IJGDEm+)2hnfHPk(c&iR>diJd7F}#lo@WX&&nZ+M zp0)^eH9`8cAnuN4=9UG${~I-U zr+Bd5Dle2@HphZ1A~9w3P#vre%`)GM2M07P@_TVzJQ8OUS`Yd@WZB#)Xl$ois`Jv_ zsjvtbXuB|S2bErFUKrT2{0uYWdk13bsiWA6Q&iZ`4SUHD=bE8YAL*kQu|%O}=sb3g z>Qv9eY{RK$pS`Cu^T4xQH-Dy-)xQAE&nxGTOH`~?-d|qF{e`AxAJ6~*002ovPDHLk FV1mjBXchnf literal 0 HcmV?d00001 diff --git a/docs/html/userhtml14x.png b/docs/html/userhtml14x.png new file mode 100644 index 0000000000000000000000000000000000000000..2fe0d7419ad404eb581f3d1528ced8e9eede94de GIT binary patch literal 2015 zcmV<52O#)~P)f- zy94MTHXXzrgwO%`KOxE5xzb8|?_TdN&YUB!9;4CdpV8=X@y_GpgIooKr1=MZw zcyQje1OoIB-<3We)o*{BdTk&Zy$+K8wwyGLmmP|u9k~%#I~QBFVy7-!{cQQW>Nj^A zO&$znjSD&ANy#b#@Qc!^X@~z0Q}?46dvR<8=ZD6%;A@T0HL=awMw12ufqx+gFDo#9 zReR_9px{9rM{sw&sPupK&5bx#ahM~nn%iMj@$nc|d~GbzOR&-2Sd(2-&U-oFPknvW z{;tqY5IIxo1d0OhbFZ%AH~@gT;d-HkbQS{DfO!mN?eVq2vN9cJZ==ah1~M?a`q~Rw zhNJJ1N8j7O>wmI+5}fC>;Li-0!y)xI~hpXS5o^}>5%BC@>}I!E3weH z=eT3J@{ZKb(T!dCZ>6896c6P{;-T;FO8M4!n>^J~Vt0qY`;Owjkop3qBSd7?VX*zlziyY7R&DXoiZDq|6OVS%4! zeJ#Q1wJ>5`;5XO~!Z*S0PW8NLxpkl~za-f=uw~dtic9|&r~b?0<{tmnm%k{_Vq~$q zq%uG4!N;US9eoHSDIa}fo$~M;1s>&*5zC>TugHz5FCgEfZD}4pC4yBPx0Z)r$<43E zyG}c@l{gXxY?wo5o+>xtjU1(3tbKb&ei)mtDB`31Mztb3&n`7v&MCDAwS z)8SPC9gy8blIJLe;FXf~$wk;`j~OsYO`Zue ziRe74=XjG+_&M*D2a+~G>0A+fhePoYO#$>)vg|`4V_6XC`c=Ffy=ccE1cVZC1;HRy zk~|{#8_DjISCumcgLG)YyA|saj;IRmDaOC5j=$5u<^)-5Uz(t1T%Xv#{pD_;YSM9d~ z2B%|Z;%Et|O@COVzQK9vi#`@uRSzSLjUfpJ=)uu$9b#eSg5Drmk`bJzhIbRzeS;@s zaY{fQP8oK)zOHMxX-xbl+@lX#1xY_n5d;xSY*IIB4}Ouh<5L08w7w~?zCq@SuO)5R ziJ)P}L09V!!KOiORgYBe)Hd2nv}MO^S$N!ks-#Ksh!P&FSd64!l8ykjpOkHu{%#ku z4W?|3WSXBIHw84uL3G&2fmVdCU(teh3)VFpgNDITW3U${o$Fm-^xrD3hJT}?_m>qJ z(vj2Uwtrge^EK=gF+)Lc(+A(R>!l=T5jNUoa-MLOaDNJQ_RFM59TGU)5!rbF>QX7n zk&$_Sun`p2d!_8oq5gnPa=Vzy?CLq6%v8ig z?)+kL6}f-Z{sAZQj>HjmUy1t^$D=?jdL9_Lhe7c0^GygAu2TQ7h&zELG>Df6wqq}Y zS6tgSuyV{zK@auCulTPd7u|c`J&FRxX{h2YJzKCwn-Y%T!Y>6bAV?lpHf$FHAvP(U zss`hVB1GQfM7d#5KZMCTi_qHT61f{TYSA(qf`k;)w9skAPsL--iEl2iqrQJ zCS0<xKKt4|}Ylg!QPI-oo&edlhY{{Ww(<<_SK)H478002ovPDHLkV1gHL&zArI literal 0 HcmV?d00001 diff --git a/docs/html/userhtml15x.png b/docs/html/userhtml15x.png new file mode 100644 index 0000000000000000000000000000000000000000..2640335f77d5e94f556c873aeac824de218e4c93 GIT binary patch literal 1306 zcmV+#1?BpQP)e5n2T+cIS_!ehyrrZ0d&Bl0=N!9RB)sN5GAC992Fqw zfTIIQ2jog19pt{xH)H+JjsHzHyGU!vYkNFz&y2nQ>gww1=+JiOfz@iYR|l{<1jJ5* z;Vsf1a|Z8sr$t}#At3txxYHHY;U@y05)hYnDtL{sdu#R%TU+!1!SD+9U-l^&H1|*; zws`34SQ8LG*nhD!AfS5(-5dHp!T$;4Bl?$EJAVS-$FW{C++T#f17sYafqBP1WB%Rs zQb+DU^;wZo9lmd9!*l4KCUbawW_}JVeRLGCL|HWMbwFe=VC+d+1e#7wt zI=@(|clhJefbJ#h8Vs>_F~DhF?)w|!v>Oaz)nAOqIOnw4$~{6vZx3+O>TrZV@@lXW z9P11D4NN>6tecm6{f59`|D#{vgx-A^aLZ&Zoy`{S7!lpSqQVKfZ=A(x0=#^feumd7 zVK*K3y+WL0;M89-VP?jnh68t6Rgmuk@bWf-Aq@YMF&~$Ud@+Yy-VhOKKHhw=yk>1# zQ+b<0eZ+YbRPx2k@}qOAz9`xT6u!!tN9__b_{KOFEAff0PvMz-^3BxwUrh= z`37@+_4kYr1G3uJ#erV`>qna(t4@Hq7H)-{dPr+e)Ai8IAHnb}hv?{s5?`&agvXu- z_9NE`i&1=yEcoKl&tlKOU^&l|J$V}hDNBNvxtMm&SD(6x-%OB-+r{fl|6AHZwk58hF!2BC-o%7La38PRJ% zFfWlD_$ulhmItaK8qvaYbg0k?tHGFjb7W81YjF~{J3^yAvxm{ey~!LIeu`GVQBVUb zzM0}5blt@8olyddQJbZ$`|_Y^6Vs+(P_IhQe3n0Z|06PbkV@)h9_yO*p-9;mFYreZ z3cLtsoa3oNHIRaD;#S3n#zLbmy-XS64A%%uH)Yg2#pvzy&gJy<;9!AS&yDFTPNXDWAJZ2lqnudV92wYX}iJUd^UIkM?aTCXEb_5wb_msj>V9N=caC}V(m$X1W~USaMvqJmR>an{H$_1pG{EbUS6YR{BR_OpuA zYY~`1pwI0$x-Ot!#DA|pU1Q9xHnPnt@g~{UtPirRx*w4@`ncB2WCw`<0YK{BW1=Hd Qf&c&j07*qoM6N<$g1C`>s{jB1 literal 0 HcmV?d00001 diff --git a/docs/html/userhtml16x.png b/docs/html/userhtml16x.png new file mode 100644 index 0000000000000000000000000000000000000000..bc55f7d1f3fbc356af4b7b6d2be9b3f978b28959 GIT binary patch literal 1325 zcmV+|1=9M7P)e5nTu@{F%X71L;(?W03Gn?06G9s0nh=63Q$T2lmHz7 z9guVY9U#&{_&&!r-d%goo4XTt(phqBkAKgM=V5yZmJ8KAzpKyAF4=%UEal2e@Z}z1Sk7IE3dUN}@_pto130nh$5m`y(sZ5dWl)vhpCMBwz2`U;jGk=@j3NRNjs!|)c<4~ zI%@~&>oKnueTbKGeEqaOR z=^w(UtoP?njQJpKi2emMhkN<^K+?0(dOePVy#ZZIei#vNu*dHL{e=D{cKTJ&7IzOJ zI4&ByGV{!uMFk^z5~cUcqP3fXk*zZ~c3Po_zmI$y?*}=)Lk6cwv8KBlf&*qgkUXNE zAm{~SGcrY`3i$ZTPKuj+>6(alz0s<(G=7NKUcTVovhE($;$56Gi~gf)^1r{}m1Dh$ z0d{iQM4Nm^CvEldpSFXZ*I?e;V1@xa^ntdtJkSo%l5adY$B%ILawd3G^j(dfVLh_K zLzERd)P?>iW7Iu&9BDf4JdG1Aw&LAzz>A~i$D?xvuF4mT{PW|CzKT38<&FDsjW~m| z`!NkZ>$+s!IxKv3hECKTUV#&xBIavtF44dQdpV|PFC8pz6JhZ1j5L7{)B3nh?1Wxo zB5tiL_=I~q2#8Fxa}yKjIXLKt=#FzL{5c7>PffhS=@W4(TjMKz;9$nma&RWzsTIEt zldxsW8ugiVPKm!sAO8LvuKttYhL℘~m$QN#g%pLZH#QXV;hW1|zJ7fe5WiFL7Yh zv*cBk1?Cz=YlPOEH9if3Gr=Y&4I(!w(ZN@Ra$vcRl61(5Cw{2~qdt>Qw=`dC!FxLG zG%%7}2J$5WxrQeKK>%($&m=%-AytX zn$frRw+1jOT;uD;22PIHCQs%)W(RA^P1pM1y-M6ea2l<_wX{~9)R5)bp}a-a>~F^OJl!7g@EjZY6vy{PWnK(Rj?#1W^hgMDcY zc(VTKMgggnQ!qkH+`atSI8JIE|(d;;rl!TuRF@RM20_b z84Q7U@HDv*O`^OE?#ApPt?cAp0yJg_iIhQ@P9{l9b4QpP3!YG zU>5x8mxbc;^;DP~eUYwXG-!S#M*0LVud=pq(9MiVHbK+jo+|l`L*J`LC2MtYHp#El zaaVohxEFQKduho6lTMg?bwV>Bw7WH**exEtba-{kI*9+uvZ1XNve2t@TUprD3pt*y jpO7{A5wE#u&nEr?jxcdtPF*DU00000NkvXXu0mjfSv7`X literal 0 HcmV?d00001 diff --git a/docs/html/userhtml17x.png b/docs/html/userhtml17x.png new file mode 100644 index 0000000000000000000000000000000000000000..0b01ec0795f708c61d3385dd2a2948ec242a396e GIT binary patch literal 1572 zcmV+<2HW|GP)d|nSoUlF%X75-W34Y0d|1e0d}BLfm{djsDOtZfE5UK zAXXsIfp#EX2l#(^nKj96ZnL>v)~EAcZa1?tlbJu0Np^4c@bK_tYMRYv2lyaguDg7Z z?2%+HCA;jBo#MHVWn2DzW_<7Ojrw;(_|pfg+VM&--ZajwTIYt+^8vgmNjk=q+=VVz z(%T-&hk@2(IhMe_RePU2 zNB(2N`yaY%v8n}N3XCUBJOz9vu+BRG`=RI27OX^t$2R7+=nnmV;&CBXwXr@r#`9WF z2huxI678(BrRQ%l&q>&0wJ0ewvi}0R6RX-Fr@(l!is!3UbMSBdv8G5D|7vj+e z+h=OW;w^QBy0E&H3^;}OI>p@2BVe2x+VQR89mr`CXI~C+?y^LBq1!Z}_?+tLyN(n8-~+acNVb{4{UE*~y`hEV2Uvv3PYn1) z)gy_h@Rw>vtyuBU&%?|FORi&L9FDJXi0j1ji0g-8KZmK#XCE+v4ItuE;zP1e7*s}* z5MryfM0E`RvnQD=-G5TMmaX(9g0YrfHoV~6op+i)qNxqQG z+Ove7Uuyt>WMy-1S*l<3kyyGmA?V^y?tG`mWu&n=K9G3$!Fi~LNS3w**4visG*w*w zfGLT^0(}%31LKV2M~aU`vz%hbV=fl1;&~-1LCGZZLeWVYjE}r_U}iAd^FWaV1MnQ7 z@2Wsf!1J3)%*n}@V*$YSjSnn3Xi#*wMheakfWZc=Kl01q0pcY}SK4FD@!4w;@#xHhqfH$d0nwLNYo`m8%=|Y*eo>r~qq4G?T>R*9@3vZXrlL!&2CIyHeW1!l+e@hd1)gqYrK(fP z)neuTS*mor8e_)O+_ICNs8P|``bk30w38x~N*vB5eCp_1xsZRS_TNw?R&4QnRj8qjG1k~SYO|!d zkK^+ikA~EdQ+#ZuECW(!1(O_GGyij@hv^~R+Qe4s7kv);8&hAbBwux;D8zW9IDZ4m Wwj|k)Gjq)V0000Ot00009a7bBm000ie z000ie0hKEb8vpe5n2S*xF%Up)h5{JU0qFoj1qmGl(n06|CKY5z2apOF z=m0th&_O7HaR=l*p*`foXN*xMhvS`*Ppez)SG(Ht@c#aOu!PrpU^pCpg3B8IJeM2z zR~}d3H{!Db`!=AxW8bK~=QT1`+RXZjYb4{Mulk|a8e_fCuZp=Z78DrtwYs0ozMvF$BBTIMoj;b$|O>`t@0qZTpex z8Jz+RV*`AM(|g!d_QC+zhUE9+kQ z;Fsbx0lw<_y(Z5ZywJ-eDZeJ{OR5KY1wo#29WE%qZ@Ba=m{uOMEuqj$qcVae#;gu{ z*NiYvd+5{ z^p_}|{rG`Bexk`E!Kwkta|3z{9)j|6x~t1z#(U{U&^LE?Y?y(kidf=H2!5eY`EIUx zcBFy!(0Q%Q1DDv-)^#2}V|&oYB++KGFYae)^o>wf&WDv5eser-;Hlk@fiCuX;>Usp zvG>P-%~6^Q@`3cvW#1&8Q3=|6z1PbUR?3=dZh)}C`_HV|1&>2I7r)Az)afHSjUDXl zbNeLyR1H=NPM)r^De#q@bqcZyFiPQ*=-pGoBpTPO1dY=(UwNOp8QjxY1(4%`GGlaJ zF97@W!F4;xS-J3w8D9-jpb^}4KkEDlzFl-uBGao#J1ZN-rtq9p36ztrf$W4ye48@V z2$^w`^|nc@c7SFS{e%o1wDlOBx~f-Xc-6l_Q=k#7@S6x^p`Ca0R(4QxPfwvQws!JN zhL(iLHL#b+@xNXhxpakqdw&@q51U!A!Tg$W#)!ko^7D`#>-F$Y0DaY6JM0ylKdCUR z*(JyNo-_>o^=ep^15U6!Ke>lrx?XBCWpDXC-fV%sY)H~NYo6|!!D)B6jr_ko!4|8b z)vObsscGw&oXF_0#YIJMWLLRdRFfOKQbsq}a`NUqK&kgivx)YLX&u}ucCidJURWfc wYT4g7#=iZRfvy+j=$3<{_+22Co^#9i17Ez3fhs|;Z2$lO07*qoM6N<$f)2h6ssI20 literal 0 HcmV?d00001 diff --git a/docs/html/userhtml19x.png b/docs/html/userhtml19x.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe28a82187fe45bc809bfe3f960b9f144f1f6d9 GIT binary patch literal 1236 zcmV;_1S|WAP)kc>00009a7bBm000ie z000ie0hKEb8vpe5nTt^yF%UolLjj(o1JVJ63V;syR1oL@CKY5z2S5cR zbP!TOfDRxXFmyoP6WT)@KKrooff?_NkhI!et@bCKnY+8Y`!IviEHF1Ww+3eq8=fkG z`3~JV^GoM#0lr0OZ{WMF^Ssm^b-B*x`ypqz))weN`LUp`&x@sj!{4lKHBi)L*5?gu z!_iaae6rwzwm1A((?h{|tQKbe=dQJ$D(7RIYuZ`YMw--qINmJY%<>&~3Jaa?Hs)sB ziD9TQCA}H;Z)mbhyP}!>ox-$b{z%3l!wyDboFEfAC1(@RRd@kgwlXa-s7c|3njfJ(~>)SW~8t zA@w+9ZIrU_dEOdmr>JB%DA#%BN7>iu`xyF)_6tQ$nE%jP%}|+y#E3Lo?qWC2q5!-ONlW!QePA5gHSEgFt1gtO6fp zO!8rJ!||0v3mqc6uaS8P-hI@=0B8m9c$KWf-tLPI6msH4h_N}E|Mgn9QSU!yH z4cxjfP2x!Kk~gRkuS(TOvYE2m`H%0H2rxtVJ(?g`$t zL4a%n%k0vquMV8UGhfslpA`!`=(uM?w$U++el-|af527eX6!r6>SAJfjizg7fk`~9 z9M&^Yqo)TPy)X9&1fwWL7=0tKiF86;uGOH9bFXxbz^9>NT^WJ55(S>&U@*8mIBkz{ z`g$46F_~5NPj*Cyrk`+in9#I-zuNqF1KHIz!hSy?{YP&A7!c*xlY3bicjg%gDtD=| z((K`ncl|PiW?^;jGj5`P;JhC-(TR_sN|fxaQ_ob2zQ;V3EqVhk@LoZW%2{F_@CSOM z-D{(B;4F(YtEuk}$5l3lGT^jB;J2iqX`kmn1W)4O%+6P7CW~KV{S$@-4f?Jd2H2Uz z8MARK+00E6e*<|jd$!pFno5V*8(fcO(D^_6e(P1{v;KYogY)WFE?9{aac90000cEz5YUoI@at5gu5VQxG#uVw`Vl-C~ zq`IR+9%vdvqmF{o%ySb!2DlvIA9c=X=!~YF(VR6}?u?eoqm=}xQXH*9M;jQU&9BkM f>5y+LH?n@&$9htvP!`ykVPNod^>bP0l+XkKi9{9> literal 0 HcmV?d00001 diff --git a/docs/html/userhtml20x.png b/docs/html/userhtml20x.png new file mode 100644 index 0000000000000000000000000000000000000000..82edd7f7db4e9628f81d062f4941062e7dedc835 GIT binary patch literal 1299 zcmV+u1?>8XP)=00009a7bBm000ie z000ie0hKEb8vpe5nT=5tF%*C~h5{JuKsrF}06RdfK}_^$Z|`)_^UdUvyuA1F{_>KA$^HHP+A70jGI@&q-|@rUs`+7k z)eNrKdk*e(1^?(#Bt5%kLA&a-qs^jv#L_my;jyg z!*DpXMtE#_D1-ZaGGU?wv99!2n-iv_GJoi%ZQp zO~D!0H-^?zzt=}Ib`80fwHw;gB!jV!wyR=(kjAwhTAjC_));Fa)3$x!O_JoJQ|8CC zaNpAZpk+CUZdMPEa>RlotHT?*M7%m$o#=iAthN{H4gHuK3>keu6DizPX8ec+%v{ z>m_gBIPxtV{OLWAdqwjtKsPL=5(We8X>tYuQHa58Ic9p}NZZP=8r@hNdg$yQHU6lh z!LoHamNlzVwlC@}P8%D1mAQ$RD?v?Mj9-N7XI zhmJeuy1{6bX>i_|owB1J zOzcM0VLr-E_!c?&)yjiR6I&a?)t7t__v(!4Is^&K?#ncZy*SIsOkhJRh9^qnmI}yD zr_h&q7c{OYT(z;8TMUI zE%wH=48Dv{5;KNd%7yY8c))c0#vmQT>q%KQ7+gPFGO&+9a<3G?HRcTmF*kr#uj+Nc zT1trWPrS+qa^Tm227Zec0Gz(*k{79#+eJHW>8I_}esz3X*|9gK6PyxwqHs%NI_cpX zlJ(Ll75QxxvMj-K^R*>4G00UvOMD8L|BX9~x*HIa-~`-tVUPE&r`nTI-t{Jm@?6(> z$~4h^cUWPR7v3-M`CaY&8%g_ez(1p^#yrj$64P|&8|)K>!(>UZ#QE7_Df|yh^Z-7cew59W9%C|Z zEM~?u-1!LiKJk7KysQ1B`0d#lcKiP`(*wlEK>GKV!7&*U)1O5qCHqZ?pWy%i002ov JPDHLkV1l<;fT92Z literal 0 HcmV?d00001 diff --git a/docs/html/userhtml21x.png b/docs/html/userhtml21x.png new file mode 100644 index 0000000000000000000000000000000000000000..336cb190e367a0f5ca83ba3fc7175104499307af GIT binary patch literal 1474 zcmV;z1wHzSP)e5nvHc7HxPh*JPPn59Y6;JIv^bYsUXk+yi}0qbYN1! z#qPj#K{hma8@4JV4ui<bl(|HC+Xm>qwjeW5+4Ez3gzJ_z@^X2E!Gu#Q*GSdprMQ=vO((C>9J z2Fek^QPy0Sj9Z6Ix=!!yHH4A8R$fKtcCMky>8*ODBH0a!oCfno01w~fjtPoZz^mIN zxVOQAb$+G2jaKS)NDM0HTZWFyciNq7Az)tA*G<&RAeyY#PJ#tNPIhX(4Vfq7$Mkyx zyGH{opE(EZ)d0-4E$L7T3iuPo|hmZ-P2in`o@djLMMF25y#uK+ai(T>6s zXx}m>?)V%z<+CZc|A#1t`Y4M{KWCp7viHV-Cx&%lp}k)%FC0rvoF?NuHuMawMtwO% zGj|TYrcK{o9w#0=TclnV_`CGn>Y>$mZ_*sk>IXVazacvK7=+2De#G9#m|u|(TxYn@0&voSXwk7=M`Rv6Ys=43CQq{avG(aj?|9;d@E5mZ6�}=)W>}jqH3?dVqKgp2Lbt1ABa1$K<8v9#|N0d=#*?JAj zoLMjH7j<+@9edZc_N>S1_233}&NMasR2&|&GmA3ORt{I%mvMtRXC23Z!5DZ5(T!BV zYuXKXu2;alfzZyWNPL10UHZe*RS zn+3ko!6We=jsXbEJJzq1ITgc4$4{zPpi?mEH#(u^{^?nsG(*36=QC~{6HKv}_q*L6hHwGR+kigUMDIu|U z%ycyhY-mRE#H!p@0p97<`sUIHLvJY|kl~X~P{||l)_}8sQ*X99qZ!nK|JqRhj$}~& z+o0Yp@NM!Od(@u;24kQM78m}IIHR~%i%?!mcOyN2qf<{=>&ektj*-_kBD}m3)?U{Teq{*0%IB4n9Q>7i&ZF!)#GqL+c2($O z9bne*B$c&_fh9lZHJ&^@7;Al~f@itQ`X=k!zIl8KydA@S8e5nt^o`HxPz7o(u3J9heSC(gEoJNCklo;H82*rvsA; zjNO6hz_B}k4uI>x`92{n+C53PyLad3*f;O#q?Jaa(af*W?AnW)o0~^_YFl8jSiFGa zPs$PHJ>>+ueXjL0{vc?v2hTV^1C%p4vDeFdMy)^Rxv%ZV_jO}C*w=GpUKHfk`U|Z0 zt7{J){7LjUq8!#->o{YMf6RGm{W;HlZXev|%}v;w5#^X-K2xG+vGWap`I0gGN_%Pk zllA>Cn(V`f`5VRkxQ|ozaZWv&9z1w3;%lsBWO>@KnnwPJao^=U%ry_{MWcNDuC^m^ z%-_2G(04_-o^lW#^tFYtyoyo+T)np7spU0Bq|4g^3Hl21jR+a)d2^ym@sK#ZkTMXu`cXO#b=7byS`Q%UZc*7 z7SASQ$Tqxwq8ueTv`u=ivS%Gy)fZlk_&V{>c8@&P=gb*Hrhp52&^Ea~p@f`+`WvOw zA@Q|p_?6M^yTw}?V{Xug+QX;Kf*q(k+ogH*1)oz_F~L~aOmH^s6`;^3x<-KkJ|j*K zd`X#Y)W~+z8oj4a>{m}CB-Ib6mDXjvrz6ig#fc`8RnSctLzd3zKn@9S3+(aX;!1!DDV9is#VEca(w?zQ`Pj>R&3quX zTeb^w)11uTZA`$JLY1gKOV8GjKp2(pz^8KZZ|(FBba8_!Rm>CUHxCNeLOw5VGpV2Z8FSjm_F(lQCeM@Y#GFkcPZwG8Js{Hq<=(@UKNxFb;xUsFc{(oBL#*vH zq^%_uHDY<1U2yA!{B)9iGpbSV`$f*gX${~;PU+Mp*&1?VVl5-v8AZTLzOnrqT0edS z>}`_!FOhGp=h$WVDMH>RCUWpN`6p*cY}~6z%CE8SJ(b_+;1lM0(sn_D!&k?SSW8E_ zUIKu+_YB3ePBelRuQSFHpjv;T=++$3aQ&bIYwG}k^CZoqPutdXNo-rI0*3VzX~K5^3_jVQ$nyG_Jg>5WUN^GU(JLxB{3~mnNBwn*AUdV* zI@^=^gHgp3mghPGO?i%ML}hwdCVwzvPDjXeEp-X`A8Yz;#pf@PNj*BS$G)`{GK}hz zbz`1U&V9Y2sGDS;D_;D>JLe9ei-ih9ClDUenb+>}>u;Tt_XBNP>g1~Qe ell(ab6aN9qUsjgmi%Mny0000X^I literal 0 HcmV?d00001 diff --git a/docs/html/userhtml23x.png b/docs/html/userhtml23x.png new file mode 100644 index 0000000000000000000000000000000000000000..c7b037cf274551e7725cfbd7c411677a8eddfea2 GIT binary patch literal 11173 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 literal 0 HcmV?d00001 diff --git a/docs/html/userhtml24x.png b/docs/html/userhtml24x.png new file mode 100644 index 0000000000000000000000000000000000000000..37836c81e2f7fb4fbf71d03c883714feee67fdde GIT binary patch literal 439 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 literal 0 HcmV?d00001 diff --git a/docs/html/userhtml27x.png b/docs/html/userhtml27x.png new file mode 100644 index 0000000000000000000000000000000000000000..2e891ddd150df2b33c9bf6d46b2d042e5fe1b06f GIT binary patch literal 11086 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 literal 0 HcmV?d00001 diff --git a/docs/html/userhtml28x.png b/docs/html/userhtml28x.png new file mode 100644 index 0000000000000000000000000000000000000000..51d8b23820b6d2e8122789ec7bed82e213fa199f GIT binary patch literal 1950 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 Z{s+7B$hd8}c~SrX002ovPDHLkV1gH^1110f literal 0 HcmV?d00001 diff --git a/docs/html/userhtml2x.png b/docs/html/userhtml2x.png new file mode 100644 index 0000000000000000000000000000000000000000..236023f4f1a466a77e3fbea530a77fc45955daee GIT binary patch literal 1674 zcmV;526g#~P)e5n~iZ4IS_@tE(c&70%Tw=155^RmjTWI>LR#;3@{mh zGcX}wG5|8b&cM8HPH#%;)y!y?HEWkgRVw|pp1Pm9rJ3=1b#rsGx6QO#t=oqNCaM~`ds**cVgMH=vEofp7LmMs{K6MD)1czyNw&;j+(ltwJ&bhg*9qV8qYb3^^N$%M&*dL#*t)Z*`9FW2W&Vsx3t&%V~iikcTS8`SW%RrjZ@M0 z$pERJJ{GhiQSbUPIR^&)gLsy2DTQN4&Nl;sad>oy4rK?znb6gG=JUZct^){tahQ%+ z>!!9j8nqpHCF44v3*9ozsN*Ni1)vN3gawygn=xc)dw+UaF)-E)5paKU zs_rY$r!;@DBhHEaa?QROuf^n-kt0fIS3)6Z=UUph0c;;2YTFyM?2wka;oE0 zRonBqk{R4|ja4@-o73y4KJ!@wf%-Wii-RIxf2^)~O?zn!$zyx5zQbD?5)-;`+Y!`xw(L=yp!Vq3vkh#oEKzi!BYei>z8aq%^PHcq%q?%h zo~XhopHaA>J!L!l96969260})QhR&*L5k>%soy|3Khez#>6!9NWrBo1Ua>eQU`(TU zQFyAY^$0ZnVEA{E<qo!k&-MIa` z_Gtd0GW-vvQ9g$z{YF22fKC_6C(7LFe%F`}E5~6H4ooFJ!(ur7e#hX%rQKiiX+FWz z_cNZ_5wCb>VeZ^4TpouALUgNMlWDBi+iR#FJ=w6RKeD5b2^w#*-D^=Q4L&BYo-#u5 z{RrC%yVN$H@hcg&Z2BlQ%O0&$Jhri}a-pYfSN|lRnd~4(iNhw_wI;rWj(+Kfo3%%I zuRB#9XmXy2GzjAb5QT|4Zio1@4j!Et`=X4q{j2;{a@Q*JF>wCYhiacfyy(lb=z%qJDP#ax`sb8HtDjvevbF20&1T!Izdum|o7o79F| z&!_B8!q7*5!GGi;wk6-Zmq|~2#J+*9?{iGGoB5P%6GyC}++_Q}`sQ@@&C&fNBt<45 zfBYvL>E!UKAr*@BQ{-1~g+gj+bPPOHE|dTM5D9*o;Km@3xlsvN4xj$#EG;}8Xu_`3 z2PuH^)g&Vx^e=R)qzrdHR4%!JI7E3gjp?&|h`yJ~{+-t(Pdg6`8Ph*cM~jyBJO&;x zm)sCX+#KS7dQ5yd?fYAJIsi0;RL$ UVBA#D%>V!Z07*qoM6N<$f?CQzq5uE@ literal 0 HcmV?d00001 diff --git a/docs/html/userhtml30x.png b/docs/html/userhtml30x.png new file mode 100644 index 0000000000000000000000000000000000000000..b890fc38e24e28a081a9499ea04aaa7507b8eafc GIT binary patch literal 2396 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 WYH9r5?41|@0000 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 Y4-0Necub3UHvj+t07*qoM6N<$f`24o^8f$< literal 0 HcmV?d00001 diff --git a/docs/html/userhtml3x.png b/docs/html/userhtml3x.png new file mode 100644 index 0000000000000000000000000000000000000000..00fc2e33da3bfa51875c5cfd1e5e1c27d1a8fc90 GIT binary patch literal 1122 zcmV-o1fBbdP)e5n2S*yF${(|h60$R1L%Mx9gq%yR1neuOe)Bb4j>f} z=m0t(qyy-HM+fBloYk_s?8AE;%mAkuo!7P`Tly_|_a=9DcMEfRT@hG%UGBUNZzhw; zI-Y!nui#JcA<1`4n?;j(re?+I*@Ox}7r^B-7G><5=S{{gW2~=T?3HQA-A|b89I)0ma z13wjim0U&d8)N!!2_0oi12ZDmKPdL$OOkt$#iNXUW$&F>c_E{h6m56l6UTz>!x}Ef z`ks+BOE>yt9y5n+OVI_q5_WjrhR-Ygop^3*k==`No{!*tINfKoH}H1M=eFo*r`%Jn zUdW-F_C)J})gM8w`K2tBu%PY4N+F#|AkaPlkTES~frOkHT00c6=~=Yc)?tHQ+fOm> zKCLJ;_n_zWI9B(&S;KU~<3~Rx=qW zj0lorgH9sz;N&zn_}D&c81S1mJB+(e0h2p}+nl5CAt^Jr&34WhHm1&0_XO7tYOKk) zhpx5OIsJA?OvZkR^*4Z6U^pO4TkkOA1 zus$4g$e5kw%Lsdol6%-C-yBEBQvI)gx<`;lSSJ;rO_cuhI7Xc<0&Js{E- z_)mJe|M3OoxygiRBj50k@%?XOvKOl=s4Bh>WgL%h&1yN0>DIOg{64y7z*CT*`6^!$ zYYCL=1?UU(yMp9+nnT9G2$upzpa||EW6jeo*p@S8(!Gz2--Y(C zV9Bf~56AzZykG2Cp+@~lpk?%|3?|MN?EWN^>rB5=uknM92ca7)6w{sBY*8|Bz2AFH zo#>-C`a3UlUuuibQ{Ac4#<&_MY}Bwye5nTt^yF%X7r4+VHg1%VDo=zw&bL4Mbt3<1ngGu;m@FTNewTt! z!zp03{k!7nawp$0pV#xQ zF0G}4+9;R*BlUZuPkH9XEb_m!^k{s19Gr-6sx^S#QztWM2cnVj7g}!7#ARuOrczL(lhu@A$&rNQ4{l$6Jl&m6qt<*1{y+v)0hF1)!m8f>FR8L*uE=A$a9H zMkg@vZ8%+HzT9qoZhX+5Q(Ea*a%^t5l)o(>`dvn2K6tn+urJ^9p|7`nq6--{_Mc-% znVvY{L>SJU)QIMQe(W@j-Kh#7qT?{~X&~4P*&PF0GL{V4P;s_Iu9Qc*57k3rA%iXT zdmDoTe#iAvy(SM10UJF7z^S}w7~FNxF;vM)%>fuDep`5x&x`>SyfJ7R6R=hpBmP&} z;kNsF%0^5K^Bq59<}YGLdeSP9vC^tzH5;weuEb9on`0jlYZ3$!k4+^vI5vl>BqQPIN9!x~Ikjc2mvM{c|=vIFFZ> zN>+-2?2oUx#qNM>K#hR`$L9Dzv@XhOzA*kr8WaB)!uIsWxkSl)nVOu(0l~&Q% zSE%LH!r2~Hui^#n&sX4p>vU4#$UJYQ2+n{07*qoM6N<$f{|kt82|tP literal 0 HcmV?d00001 diff --git a/docs/html/userhtml5.html b/docs/html/userhtml5.html new file mode 100644 index 00000000..5a5cae45 --- /dev/null +++ b/docs/html/userhtml5.html @@ -0,0 +1,18 @@ + + + + + + + + + + +
+

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

+ + diff --git a/docs/html/userhtml5x.png b/docs/html/userhtml5x.png new file mode 100644 index 0000000000000000000000000000000000000000..55f1e95acce75afb501ae6250ccb38d9757bfb81 GIT binary patch literal 1167 zcmV;A1aSL_P)e5n2S*xF%X8&9v9${3IZLFNe83@9u)*SfJq6Y1JeP4 z4xj@WJ!JbBAY;wwZneAGUH#fy$u6Fro{DvE#-J#QUG-b_NA*+n zP4H5yzqE!X{-VLOf-fgHesS0= z;G`*QI!(wocj~up#LpG;ZzYf>enqW)I7-D@FrN|!>|Nl`cvqc=o&PD3A3$58Poy`K zjKH`LvvITo@%RERBrj!yuUicW0MN%$)XOrSUv*cEy=%+{p=ZDJf-V7Zu%>$O z9#dW}t$AeqZm#|!df0Y-(Hxo_sH}-Eob?{Me3iHC0JvTSI8-sDj86 z$Od>AMtU32sh)T^-*r%NTFO$50UD)kpD6l;9x^omgNU0adf_b6oEKT*zWaE~eoT%K zH!;R9p${LyZdyI6xHwkhk(|>gIcG-AAN!CpmL4`t{5@BR6gy4(!z0u?HZRsW_-##d zC^djjjpdK5W!kmkwc1=aS+e*eQ9iuXoY(2D!jqp_m=A_CjZ+*r|E8|vC8t#Dq(GL( z&tG({o{UIj|N6z6uQ8ih`jXJ=>YBsm0(>b$yXGw;mk&0&6l33hWe*HXrB`FtXXn9C zg#QSNSs@+`AnbmxETQhZ-1SWE+C5<&Oc6vJ5kLY*X{ zag(tx)ke<`lBUlFE;ki}@C?_X7R)C?Y4M;a8-B;060~Ig8C{Cz>SQg*0BTQm((<$+ zo^6(NaON9l^V%L^lP8*&wP9_xDl(FZ&iaT6;EB_kc&xcvdV_T77npqZ*}(@xD?|3* zj+g+Cb9M=3zkZRy)T~%XrHjme2XHUuz$$?&9TtZ@Hs(QcHf^CM8{9&$-%FD{l8Bh> zJdy1)@fhC+2ba}#1pd-5*#}qfvP{<-JSnNRuFgN!r2HmLfpZ4+or!O<7I&&Ok+jr% z`(gHO!S{ea>RUjQ@f!k~GmKJ4$)gf{5zor_5W%{=3Ic$Aj%5MwC6BYw&(C6=`LBYz h0nW|IFEO=e<3DxHg)!@fpuzwE002ovPDHLkV1kz-D!~8% literal 0 HcmV?d00001 diff --git a/docs/html/userhtml6x.png b/docs/html/userhtml6x.png new file mode 100644 index 0000000000000000000000000000000000000000..cdca46960d976d8cd0b7d8c29dd34c3c033aa1b8 GIT binary patch literal 1820 zcmV+%2jlpOP)>fFk`71*B+uPf{$Mom{Jh0hpPW5=J zd_`I5Q2Cki7Ya(eA8O3}ZAvTrbFf02A5EUm11~k0pF8oI0GE3Isk*bI&J|bp++Ur= zj|R`;0S#`V_oqbok;-3_x?f3oRmBG};N|Qia*gLiccQ$lp_4!Vb+-+Uh z-r!^M_eAG;Qf?~V2j(nZf!td%%UcZe^C32fo~W}O!t+pRTkwy;QtLa>9V<)K^yA|` zF{gMJ9qc$$=|`7SX;(fCX;fzUy$tKt`VPLiY)7_olkdbwB>y^xZP+!J+&;XEZfUgS ze6WtyqnOw;x?2N7Bxjj@B+FuvYXuFJ_{Sg_@4a-Jqy^q70qCCDA)P&){)cWq5s^r8x@Pk>Sg(o~M%0sV5FA z9-N?4{t)u^y+f~T@b%FSZ4YhHJHZ3{_*&_<2q#Xa>bmelk0T=AJKnCR97`OcYiNokCQhlYFEO z-_=IchKAYXaxS_97CNFFOQK&5oIKm^SAd}2(86PBva0~}N}aRX$s9@>^3}e}mI#Z= z9Qul@kJm&Z_d{E==ZC4jMmN!yaHWJ_^n zP@D6kTM3!4pIQ{P^3378k}ZL*H=;@V$*jx)O-anC`apj5SUCtZVr0$WVjtFvV(0BHZbvec}lV>>vw{O^b^fPy?yvA zRb|O0^IcYYT$vj;;LnYvxiDAb-4ATXNVj(ms-ss7CPzt~$w`^$Pjurp!pl)7^ZSfk zWMu!&o^B_JpY0XdL`ap1&bh?TRCnyj5y}oafIX$TiOSKm*2zBbb5nuMq_@iHZ&1?P zjv{^|q4AHkVN&1qm_om&w{6tOcDlG zmUOi$;uk#==vF!Mqsm+Z?$jG4cYkK_-JSTIH*h?4wXzSaq+FlPfq4*K^QBcrGN}I1 zfC#r7#_IG>0En#(ljN89h~g%xosKs~*eWxTf(ha1*mrT;lb+;VJCT^d{5zCy8totH zYWh+uzH7;x?4KAU4~%rQIUh*&h3Y8(Yfb&4x^O$gBq-vy@{k3e4-`Q?!JybzqMOZk z7LR{O7pn;q(*+)a8{4-X|B7}N%!BaCu_9;$>nr{eVn-{yw}_{}g=yhMd-Ip#DSandM0595-t?u)#qTEgM`>`Mi--Ph!fbi{SZUf$4DHx1dKpAi zh(1Ag(OajnU)=W5t)YD=e$kKGj){LV-$@o{KW@;-thQAj(nL3?&qd#iS-cV6MSmVF zV@$G3A(Jn6vUg;TmV*x;fuciTM6|NP5d34HNza4v-F;xr;r$Q5ZGgSXsdHNZ0000< KMNUMnLSTZPtD}Md literal 0 HcmV?d00001 diff --git a/docs/html/userhtml7.html b/docs/html/userhtml7.html new file mode 100644 index 00000000..a7486f7c --- /dev/null +++ b/docs/html/userhtml7.html @@ -0,0 +1,23 @@ + + + + + + + + + + +
+

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/userhtml7x.png b/docs/html/userhtml7x.png new file mode 100644 index 0000000000000000000000000000000000000000..403b9248f8b536a354842350eddb1e7907327325 GIT binary patch literal 1465 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 + + + + + + + + + +
+

4The string is case-insensitive

+ + diff --git a/docs/html/userhtml9x.png b/docs/html/userhtml9x.png new file mode 100644 index 0000000000000000000000000000000000000000..bc555490c50d1a625a2e33ba1a1a977fbbc3f082 GIT binary patch literal 2147 zcmV-p2%PtcP)oNqK9Ce{~n9M`} zcY<4nzup6#u~R%R)m}&)iqXYXYSrYztcfngIY#?-{H16bR~j6N^ThA2JoFd%wI1k; zo#v^eKqGdysL}t9&V{YfOHRZ1R!RG0l_<@>%FMGtj?|`fWM-)a-Qj`0*inS8ttfTy z4@TAG!fX}YSL4x1Dx={&ketDHbzhAJJ9=Tb^*~|lxVnsv?+{;?U#so1 zYczhT{&O{whz7LXH5!Mm=lxR% zob^$BIfs4MJeA{%+7N(eQjpI0kmm;T4L$=0V8@Z{_%1qo-gw4@aINPP(eP%;HZXJ- zqT?alftNwNkbkY_9_EGTDu{e==id{AwyBRD*voMr zbk!JR8@fQFMqRBM1= z;0S(dFDDW!C>Ljqt9OH?Rh0& z=jzgR6cH?T(`Pk~(e$B{wJ<&fUQOX3=1I)1L@*w%ML44uBoBwbknC0RdgT-nd`sxe zP7)`EH1UZAR}^4;p`bUFynCQb8z*u?Z2Hoz4q z@AFS4TffCg?xjtZ3tQe0LwCtC8`8N}Vy6U*r6Wm;&d^gVhzYnBNGFN{@xWhi zS_B0M$q1*WWD#Q$nF2Ky*eGmv?)L8`lZqbJC>1Im^J8@`xQgxz*MZXINY3U6Lw zocWN%VpC*kHCFg z=wcwP0XW+mNHzMX7UalS?!#S`kZQHl5ab8qr+U#ogVGphbpaKlrB4^3^k5Tn1d|N+ z8F&Wb)O1Pi72P(4&4dFPkh-{-+ zF~N>l|6D9%`JwOis?LQ?Bubd=!oG^m{k>5!ydpT;0>iNt9$=9#fG16M=vlW5z`JXd z1RhOU`CmnG<8*z}cV;Kc~f*Jzr>1~{DY{n@L7M?v~i0Rne4rB*@cJ|A* zYxPO?W8wE4LD@efCe8AIBo8`C7N<*kvaX69u}36s7a!x-?)8;yI-6wC8-r!g+>Yo5vre?xvka}|$E`;r-6 z$(8c-(Mcu&L1!Gw>p1!(IKJY#2c9Dwo2XDNTGkNYKjxfo_3K{i=@(uSg85ix@S&fN z*YA3bi0pt@A03hF;^lQfKI_v0t@*&yhII|^dC@bxTJ<=yC%mHcc-F=@D|1it@Q=y` z&%4{1%(3F@>`RGJiRzu?5@L*gIBg8yW8ksC*VnU=;xHlK(PIT_=C^-nY+rglO z4fnl40v6&aJTNMD>B2siUsHVPxHK1LO>`wH4=KF*8(Nv6e^cs=hd?JE9IEjj6*z|P zJygUlwT=5cZ|25AQ7&v~k+BO*#%IBmF1;06v|M%gcw?`xCeveXL9&ftJdte_fVF_u z;6Zcj7u1$cLt@uru0)jNg4ug761~#iN5QUu@Yd!ZC3($=0)ny$9Jz$w! zS$a>j2W;Q0s&CD@`m%WJ0Y0?wzL*ayeAnQk4SyG&erSVafq@=aD*8Z&t&yCH{!K~F zM;g97{#0{sm-M?pr3aQfdZh!WVE6ZPz9@2aaeoXoh1^BPod=eRe&>rhdv-r}A3l6l zpHrVlxAv0g_amh4e(qnHa!-GbT1&!D7n~*0r}JfvB<|uTUVwY^q9o^g!SbgHHC~N) Z{{zk}b1-lEGwJ{U002ovPDHLkV1hw#8HfM? literal 0 HcmV?d00001 diff --git a/docs/html/userhtmlli1.html b/docs/html/userhtmlli1.html new file mode 100644 index 00000000..8cc8ecab --- /dev/null +++ b/docs/html/userhtmlli1.html @@ -0,0 +1,318 @@ + + +Contents + + + + + + + + +

Contents

+
+ 1 Introduction +
2 General overview +
 2.1 Basic Nomenclature +
 2.2 Library contents +
 2.3 Application structure +
  2.3.1 User-defined index mappings +
 2.4 Programming model +
3 Data Structures and Classes +
 3.1 Descriptor data structure +
  3.1.1 Descriptor Methods +
  3.1.2 get_local_rows — Get number of local rows +
  3.1.3 get_local_cols — Get number of local cols +
  3.1.4 get_global_rows — Get number of global rows +
  3.1.5 get_global_cols — Get number of global cols +
  3.1.6 get_global_indices — Get vector of global indices +
  3.1.7 get_context — Get communication context +
  3.1.8 Clone — clone current object +
  3.1.9 CNV — convert internal storage format +
  3.1.10 psb_cd_get_large_threshold — Get threshold for index mapping switch +
  3.1.11 psb_cd_set_large_threshold — Set threshold for index mapping switch +
  3.1.12 Named Constants +
 3.2 Sparse Matrix class +
  3.2.1 Sparse Matrix Methods +
  3.2.2 get_nrows — Get number of rows in a sparse matrix +
  3.2.3 get_ncols — Get number of columns in a sparse matrix +
  3.2.4 get_nnzeros — Get number of nonzero elements in a sparse matrix +
  3.2.5 get_size — Get maximum number of nonzero elements in a sparse matrix +
  3.2.6 sizeof — Get memory occupation in bytes of a sparse matrix +
  3.2.7 get_fmt — Short description of the dynamic type +
  3.2.8 is_bld, is_upd, is_asb — Status check +
  3.2.9 is_lower, is_upper, is_triangle, is_unit — Format check +
  3.2.10 cscnv — Convert to a different storage format +
  3.2.11 csclip — Reduce to a submatrix +
  3.2.12 clean_zeros — Eliminate zero coefficients +
  3.2.13 get_diag — Get main diagonal +
  3.2.14 clip_diag — Cut out main diagonal +
  3.2.15 tril — Return the lower triangle +
  3.2.16 triu — Return the upper triangle +
  3.2.17 psb_set_mat_default — Set default storage format +
  3.2.18 clone — Clone current object +
  3.2.19 Named Constants +
 3.3 Dense Vector Data Structure + + + +
  3.3.1 Vector Methods +
  3.3.2 get_nrows — Get number of rows in a dense vector +
  3.3.3 sizeof — Get memory occupation in bytes of a dense vector +
  3.3.4 set — Set contents of the vector +
  3.3.5 get_vect — Get a copy of the vector contents +
  3.3.6 clone — Clone current object +
 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 +
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 +
 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_mpicomm — Get the MPI communicator +
 7.5 psb_get_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 +
+ + + +

+ + + + + + + + + +

+

+ diff --git a/docs/html/userhtmlli2.html b/docs/html/userhtmlli2.html new file mode 100644 index 00000000..89f10601 --- /dev/null +++ b/docs/html/userhtmlli2.html @@ -0,0 +1,186 @@ + + +References + + + + + + + +

+

References

+

+

+

+ [1]    + D. Barbieri, V. Cardellini, S. Filippone and D. Rouson Design Patterns + for Scientific Computations on Sparse Matrices, HPSS 2011, Algorithms + and Programming Tools for Next-Generation High-Performance Scientific + Software, Bordeaux, Sep. 2011 +

+

+ [2]   G. Bella, S. Filippone, A. De Maio and M. Testa, A Simulation Model + for Forest Fires, in J. Dongarra, K. Madsen, J. Wasniewski, editors, + Proceedings of PARA 04 Workshop on State of the Art in Scientific + Computing, pp. 546–553, Lecture Notes in Computer Science, Springer, + 2005. +

+

+ [3]   A. Buttari, D. di Serafino, P. D’Ambra, S. Filippone, 2LEV-D2P4: + a package of high-performance preconditioners, Applicable Algebra in + Engineering, Communications and Computing, Volume 18, Number 3, May, + 2007, pp. 223-239 +

+

+ [4]   P. D’Ambra, S. Filippone, D. Di Serafino On the Development + of PSBLAS-based Parallel Two-level Schwarz Preconditioners Applied + Numerical Mathematics, Elsevier Science, Volume 57, Issues 11-12, + November-December 2007, Pages 1181-1196. +

+

+ [5]   Dongarra, J. J., DuCroz, J., Hammarling, S. and Hanson, R., An + Extended Set of Fortran Basic Linear Algebra Subprograms, ACM Trans. + Math. Softw. vol. 14, 1–17, 1988. +

+

+ [6]   Dongarra, J., DuCroz, J., Hammarling, S. and Duff, I., A Set of level + 3 Basic Linear Algebra Subprograms, ACM Trans. Math. Softw. vol. 16, + 1–17, 1990. + + + +

+

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

+

+ [8]   I. Duff, M. Marrone, G. Radicati and C. Vittoli, Level 3 Basic Linear + Algebra Subprograms for Sparse Matrices: a User Level Interface, ACM + Transactions on Mathematical Software, 23(3), pp. 379–401, 1997. +

+

+ [9]   I. Duff, M. Heroux and R. Pozo, An Overview of the Sparse Basic + Linear Algebra Subprograms: the New Standard from the BLAS Technical + Forum, ACM Transactions on Mathematical Software, 28(2), pp. 239–267, + 2002. +

+

+ [10]   S. Filippone and M. Colajanni, PSBLAS: A Library for Parallel + Linear Algebra Computation on Sparse Matrices, ACM Transactions on + Mathematical Software, 26(4), pp. 527–550, 2000. +

+

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

+

+ [12]   S. Filippone, P. D’Ambra, M. Colajanni, Using a Parallel Library + of Sparse Linear Algebra in a Fluid Dynamics Applications Code on + Linux Clusters, in G. Joubert, A. Murli, F. Peters, M. Vanneschi, editors, + Parallel Computing - Advances & Current Issues, pp. 441–448, Imperial + College Press, 2002. +

+

+ [13]    Gamma, E., Helm, R., Johnson, R., and Vlissides, J. 1995. Design + Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. +

+

+ [14]   Karypis, G. and Kumar, V., METIS: Unstructured Graph Partitioning + and Sparse Matrix Ordering System. Minneapolis, MN 55455: University + of Minnesota, Department of Computer Science, 1995. Internet Address: + http://www.cs.umn.edu/~karypis. + + + +

+

+ [15]   Lawson, C., Hanson, R., Kincaid, D. and Krogh, F., Basic Linear + Algebra Subprograms for Fortran usage, ACM Trans. Math. Softw. vol. 5, + 38–329, 1979. +

+

+ [16]   Machiels, L. and Deville, M. Fortran 90: An entry to object-oriented + programming for the solution of partial differential equations. ACM Trans. + Math. Softw. vol. 23, 32–49. +

+

+ [17]   Metcalf, M., Reid, J. and Cohen, M. Fortran 95/2003 explained. Oxford + University Press, 2004. +

+

+ [18]   Rouson, D.W.I., Xia, J., Xu, X.: Scientific Software Design: The + Object-Oriented Way. Cambridge University Press (2011) +

+

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

+ + + + +

+ diff --git a/docs/html/userhtmlse1.html b/docs/html/userhtmlse1.html new file mode 100644 index 00000000..4ffa201d --- /dev/null +++ b/docs/html/userhtmlse1.html @@ -0,0 +1,96 @@ + + +Introduction + + + + + + + +

+

1 Introduction

+

The PSBLAS library, developed with the aim to facilitate the parallelization of +computationally intensive scientific applications, is designed to address parallel +implementation of iterative solvers for sparse linear systems through the distributed +memory paradigm. It includes routines for multiplying sparse matrices by dense +matrices, solving block diagonal systems with triangular diagonal entries, +preprocessing sparse matrices, and contains additional routines for dense matrix +operations. The current implementation of PSBLAS addresses a distributed memory +execution model operating with message passing. +

The PSBLAS library version 3 is implemented in the Fortran 2003 [17] +programming language, with reuse and/or adaptation of existing Fortran 77 and +Fortran 95 software, plus a handful of C routines. +

The use of Fortran 2003 offers a number of advantages over Fortran 95, mostly in +the handling of requirements for evolution and adaptation of the library to new +computing architectures and integration of new algorithms. For a detailed discussion +of our design see [11]; other works discussing advanced programming in Fortran 2003 +include [118]; sufficient support for Fortran 2003 is now available from many +compilers, including the GNU Fortran compiler from the Free Software Foundation +(as of version 4.8). +

Previous approaches have been based on mixing Fortran 95, with its support for +object-based design, with other languages; these have been advocated by a number of +authors, e.g. [16]. Moreover, the Fortran 95 facilities for dynamic memory +management and interface overloading greatly enhance the usability of the PSBLAS +subroutines. In this way, the library can take care of runtime memory requirements +that are quite difficult or even impossible to predict at implementation or +compilation time. +

The presentation of the PSBLAS library follows the general structure of the +proposal for serial Sparse BLAS [89], which in its turn is based on the proposal for +BLAS on dense matrices [1556]. +

The applicability of sparse iterative solvers to many different areas causes some +terminology problems because the same concept may be denoted through different +names depending on the application area. The PSBLAS features presented in this +document will be discussed referring to a finite difference discretization of a Partial +Differential Equation (PDE). However, the scope of the library is wider than that: for +example, it can be applied to finite element discretizations of PDEs, and even to +different classes of problems such as nonlinear optimization, for example in optimal +control problems. +

The design of a solver for sparse linear systems is driven by many conflicting +objectives, such as limiting occupation of storage resources, exploiting regularities in +the input data, exploiting hardware characteristics of the parallel platform. To +achieve an optimal communication to computation ratio on distributed memory +machines it is essential to keep the data locality as high as possible; this can be +done through an appropriate data allocation strategy. The choice of the + + + +preconditioner is another very important factor that affects efficiency of the +implemented application. Optimal data distribution requirements for a given +preconditioner may conflict with distribution requirements of the rest of the solver. +Finding the optimal trade-off may be very difficult because it is application +dependent. Possible solutions to these problems and other important inputs to the +development of the PSBLAS software package have come from an established +experience in applying the PSBLAS solvers to computational fluid dynamics +applications. + + + +

+

+ diff --git a/docs/html/userhtmlse10.html b/docs/html/userhtmlse10.html new file mode 100644 index 00000000..37eeacaa --- /dev/null +++ b/docs/html/userhtmlse10.html @@ -0,0 +1,64 @@ + + +Preconditioner routines + + + + + + + +

+

10 Preconditioner routines

+

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

    +
  • Diagonal Scaling +
  • +
  • Block Jacobi with ILU(0) factorization
+

The supporting data type and subroutine interfaces are defined in the module +psb_prec_mod. The old interfaces psb_precinit and psb_precbld are still +supported for backward compatibility + + + +

+ + + + + + + + + +

+ diff --git a/docs/html/userhtmlse11.html b/docs/html/userhtmlse11.html new file mode 100644 index 00000000..8e371c0f --- /dev/null +++ b/docs/html/userhtmlse11.html @@ -0,0 +1,41 @@ + + +Iterative Methods + + + + + + + +

+

11 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. + + + +

+ + + + +

+ diff --git a/docs/html/userhtmlse2.html b/docs/html/userhtmlse2.html new file mode 100644 index 00000000..023dcb01 --- /dev/null +++ b/docs/html/userhtmlse2.html @@ -0,0 +1,126 @@ + + +General overview + + + + + + + +

+

2 General overview

+

The PSBLAS library is designed to handle the implementation of iterative solvers for +sparse linear systems on distributed memory parallel computers. The system +coefficient matrix A must be square; it may be real or complex, nonsymmetric, and +its sparsity pattern needs not to be symmetric. The serial computation parts are +based on the serial sparse BLAS, so that any extension made to the data structures +of the serial kernels is available to the parallel version. The overall design and +parallelization strategy have been influenced by the structure of the ScaLAPACK +parallel library. The layered structure of the PSBLAS library is shown in figure 1; +lower layers of the library indicate an encapsulation relationship with upper +layers. The ongoing discussion focuses on the Fortran 2003 layer immediately +below the application layer. The serial parts of the computation on each +process are executed through calls to the serial sparse BLAS subroutines. In a +similar way, the inter-process message exchanges are encapsulated in an +applicaiton layer that has been strongly inspired by the Basic Linear Algebra +Communication Subroutines (BLACS) library [7]. Usually there is no need to deal +directly with MPI; however, in some cases, MPI routines are used directly +to improve efficiency. For further details on our communication layer see +Sec. 7. +


+ + + + + + + +
+

+

PIC

+
Figure 1: PSBLAS library components hierarchy.
+ + + +


+

The type of linear system matrices that we address typically arise in +the numerical solution of PDEs; in such a context, it is necessary to pay +special attention to the structure of the problem from which the application +originates. The nonzero pattern of a matrix arising from the discretization of a +PDE is influenced by various factors, such as the shape of the domain, the +discretization strategy, and the equation/unknown ordering. The matrix itself can be +interpreted as the adjacency matrix of the graph associated with the discretization +mesh. +

The distribution of the coefficient matrix for the linear system is based on the +“owner computes” rule: the variable associated to each mesh point is assigned to a +process that will own the corresponding row in the coefficient matrix and will +carry out all related computations. This allocation strategy is equivalent to a +partition of the discretization mesh into sub-domains. Our library supports any +distribution that keeps together the coefficients of each matrix row; there are no +other constraints on the variable assignment. This choice is consistent with +simple data distributions such as CYCLIC(N) and BLOCK, as well as completely +arbitrary assignments of equation indices to processes. In particular it is +consistent with the usage of graph partitioning tools commonly available in +the literature, e.g. METIS [14]. Dense vectors conform to sparse matrices, +that is, the entries of a vector follow the same distribution of the matrix +rows. +

We assume that the sparse matrix is built in parallel, where each process generates +its own portion. We never require that the entire matrix be available on a single +node. However, it is possible to hold the entire matrix in one process and distribute it +explicitly1 , +even though the resulting memory bottleneck would make this option unattractive in +most cases. +

+ + + + + + + +

+ diff --git a/docs/html/userhtmlse3.html b/docs/html/userhtmlse3.html new file mode 100644 index 00000000..b668ab9a --- /dev/null +++ b/docs/html/userhtmlse3.html @@ -0,0 +1,184 @@ + + +Data Structures and Classes + + + + + + + +

+

3 Data Structures and Classes

+

In this chapter we illustrate the data structures used for definition of routines +interfaces. They include data structures for sparse matrices, communication +descriptors and preconditioners. +

All the data types and the basic subroutine interfaces related to descriptors and +sparse matrices are defined in the module psb_base_mod; this will have to be +included by every user subroutine that makes use of the library. The preconditioners +are defined in the module psb_prec_mod +

Integer, real and complex data types are parametrized with a kind type defined in +the library as follows: +

+psb_spk_
Kind parameter for short precision real and complex data; + corresponds to a REAL declaration and is normally 4 bytes; +
+psb_dpk_
Kind parameter for long precision real and complex data; + corresponds to a DOUBLE PRECISION declaration and is normally 8 bytes; +
+psb_ipk_
Kind parameter for integer data; with default build options this is + a 4 bytes integer, but there is (highly) experimental support for 8-bytes + integers; +
+psb_mpik_
Kind parameter for 4-bytes integer data, as is always used by MPI; +
+psb_long_int_k_
Kind parameter for long (8 bytes) integers, which are always + used by the sizeof methods.
+

Together with the classes attributes we also discuss their methods. Most methods +detailed here only act on the local variable, i.e. their action is purely local and +asynchronous unless otherwise stated. The list of methods here is not completely +exhaustive; many methods, especially those that alter the contents of the various +objects, are usually not needed by the end-user, and therefore are described in the +developer’s documentation. +

+

+  3.1 Descriptor data structure +
  3.1.1 Descriptor Methods +
  3.1.2 get_local_rows — Get number of local rows +
  3.1.3 get_local_cols — Get number of local cols + + + +
  3.1.4 get_global_rows — Get number of global rows +
  3.1.5 get_global_cols — Get number of global cols +
  3.1.6 get_global_indices — Get vector of global indices +
  3.1.7 get_context — Get communication context +
  3.1.8 Clone — clone current object +
  3.1.9 CNV — convert internal storage format +
  3.1.10 psb_cd_get_large_threshold — Get threshold for index mapping switch +
  3.1.11 psb_cd_set_large_threshold — Set threshold for index mapping switch +
  3.1.12 Named Constants +
 3.2 Sparse Matrix class +
  3.2.1 Sparse Matrix Methods +
  3.2.2 get_nrows — Get number of rows in a sparse matrix +
  3.2.3 get_ncols — Get number of columns in a sparse matrix +
  3.2.4 get_nnzeros — Get number of nonzero elements in a sparse matrix +
  3.2.5 get_size — Get maximum number of nonzero elements in a sparse matrix +
  3.2.6 sizeof — Get memory occupation in bytes of a sparse matrix +
  3.2.7 get_fmt — Short description of the dynamic type +
  3.2.8 is_bld, is_upd, is_asb — Status check +
  3.2.9 is_lower, is_upper, is_triangle, is_unit — Format check +
  3.2.10 cscnv — Convert to a different storage format +
  3.2.11 csclip — Reduce to a submatrix +
  3.2.12 clean_zeros — Eliminate zero coefficients +
  3.2.13 get_diag — Get main diagonal +
  3.2.14 clip_diag — Cut out main diagonal +
  3.2.15 tril — Return the lower triangle +
  3.2.16 triu — Return the upper triangle +
  3.2.17 psb_set_mat_default — Set default storage format +
  3.2.18 clone — Clone current object +
  3.2.19 Named Constants +
 3.3 Dense Vector Data Structure +
  3.3.1 Vector Methods +
  3.3.2 get_nrows — Get number of rows in a dense vector +
  3.3.3 sizeof — Get memory occupation in bytes of a dense vector +
  3.3.4 set — Set contents of the vector +
  3.3.5 get_vect — Get a copy of the vector contents +
  3.3.6 clone — Clone current object +
 3.4 Preconditioner data structure +
 3.5 Heap data structure +
+ + + + + + + + +

+ diff --git a/docs/html/userhtmlse4.html b/docs/html/userhtmlse4.html new file mode 100644 index 00000000..2c399798 --- /dev/null +++ b/docs/html/userhtmlse4.html @@ -0,0 +1,75 @@ + + +Computational routines + + + + + + + +

+

4 Computational routines

+ + + + + + + + + + + + + + + + + + + + +

+ diff --git a/docs/html/userhtmlse5.html b/docs/html/userhtmlse5.html new file mode 100644 index 00000000..6a3db24f --- /dev/null +++ b/docs/html/userhtmlse5.html @@ -0,0 +1,52 @@ + + +Communication routines + + + + + + + +

+

5 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. + + + +

+ + + + + + + +

+ diff --git a/docs/html/userhtmlse6.html b/docs/html/userhtmlse6.html new file mode 100644 index 00000000..5923c595 --- /dev/null +++ b/docs/html/userhtmlse6.html @@ -0,0 +1,115 @@ + + +Data management routines + + + + + + + +

+

6 Data management routines

+

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ diff --git a/docs/html/userhtmlse7.html b/docs/html/userhtmlse7.html new file mode 100644 index 00000000..2ee17978 --- /dev/null +++ b/docs/html/userhtmlse7.html @@ -0,0 +1,87 @@ + + +Parallel environment routines + + + + + + + +

+

7 Parallel environment routines

+ + + + + + + + + + + + + + + + + + + + + + + + +

+ diff --git a/docs/html/userhtmlse8.html b/docs/html/userhtmlse8.html new file mode 100644 index 00000000..f74823fd --- /dev/null +++ b/docs/html/userhtmlse8.html @@ -0,0 +1,418 @@ + + +Error handling + + + + + + + +

+

8 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 +error message has been generated. Every routine in the PSBLAS-2.0 library has, as +last non-optional argument, an integer info variable; whenever, inside the routine, an +error is detected, this variable is set to a value corresponding to a specific +error code. Then this error code is also pushed on the error stack and then +either control is returned to the caller routine or the execution is aborted, +depending on the users choice. At the time when the execution is aborted, +an error message is printed on standard output with a level of verbosity +than can be chosen by the user. If the execution is not aborted, then, the +caller routine checks the value returned in the info variable and, if not +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 9 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 info variable is set to the corresponding error code which +is, then, pushed on top of the stack by means of the psb_errpush. An error condition +may be directly detected inside a routine or indirectly checking the error code +returned returned by a called routine. Whenever an error is encountered, after it has +been pushed on stack, the program execution skips to a point where the error +condition is handled; the error condition is handled either by returning control to the +caller routine or by calling the psb\_error routine which prints the content of +the error stack and aborts the program execution, according to the choice +made by the user with psb_set_erraction. The default is to print the error +and terminate the program, but the user may choose to handle the error +explicitly. +


+ + + + + + + +
+

+

+
subroutine psb_foo(some args, info) 
   ... 
   if(error detected) then 
      info=errcode1 
      call psb_errpush(psb_foo, errcode1) 
      goto 9999 
   end if 
   ... 
   call psb_bar(some args, info) 
   if(info .ne. zero) then 
      info=errcode2 
      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 +
+
+
Figure 9: The layout of a generic psb_foo routine with respect to PSBLAS-2.0 +error handling policy.
+ + + +


+

Figure 10 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 +the psb_cest subroutine called by psb_spasb ... by process 0 (i.e. the root +process). +


+ + + + + + + +
+

+

+========================================================== + 
Process: 0.  PSBLAS Error (4010) in subroutine: df_sample + 
Error from call to subroutine mat dist + 
========================================================== + 
Process: 0.  PSBLAS Error (4010) in subroutine: mat_distv + 
Error from call to subroutine psb_spasb + 
========================================================== + 
Process: 0.  PSBLAS Error (4010) in subroutine: psb_spasb + 
Error from call to subroutine psb_cest + 
========================================================== + 
Process: 0.  PSBLAS Error (136) in subroutine: psb_cest + 
Format FOO is unknown + 
========================================================== + 
Aborting... +
+

+
+
Figure 10: A sample PSBLAS-2.0 error message. Process 0 detected an error +condition inside the psb_cest subroutine
+ + + +


+ + + + + + + + + + + +

+ diff --git a/docs/html/userhtmlse9.html b/docs/html/userhtmlse9.html new file mode 100644 index 00000000..2bd7e2da --- /dev/null +++ b/docs/html/userhtmlse9.html @@ -0,0 +1,57 @@ + + +Utilities + + + + + + + +

+

9 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. + + + +

+ + + + + + + + + +

+ diff --git a/docs/html/userhtmlsu1.html b/docs/html/userhtmlsu1.html new file mode 100644 index 00000000..9132bdd5 --- /dev/null +++ b/docs/html/userhtmlsu1.html @@ -0,0 +1,149 @@ + + +Basic Nomenclature + + + + + + + +

+

2.1 Basic Nomenclature

+

Our computational model implies that the data allocation on the parallel distributed +memory machine is guided by the structure of the physical model, and specifically by +the discretization mesh of the PDE. +

Each point of the discretization mesh will have (at least) one associated +equation/variable, and therefore one index. We say that point i depends on point j if +the equation for a variable associated with i contains a term in j, or equivalently if + + + +aij0. After the partition of the discretization mesh into sub-domains assigned +to the parallel processes, we classify the points of a given sub-domain as +following. +

+Internal.
An internal point of a given domain depends only on points of the + same domain. If all points of a domain are assigned to one process, then + a computational step (e.g., a matrix-vector product) of the equations + associated with the internal points requires no data items from other + domains and no communications. +
+Boundary.
A point of a given domain is a boundary point if it depends on + points belonging to other domains. +
+Halo.
A halo point for a given domain is a point belonging to another domain + such that there is a boundary point which depends on it. Whenever performing + a computational step, such as a matrix-vector product, the values associated + with halo points are requested from other domains. A boundary point of a + given domain is usually a halo point for some other domain2 ; + therefore the cardinality of the boundary points set denotes the amount + of data sent to other domains. +
+Overlap.
An overlap point is a boundary point assigned to multiple domains. + Any operation that involves an overlap point has to be replicated for each + assignment.
+

Overlap points do not usually exist in the basic data distributions; however they are a +feature of Domain Decomposition Schwarz preconditioners which are the subject of +related research work [43]. +

We denote the sets of internal, boundary and halo points for a given subdomain +by I, B and H. Each subdomain is assigned to one process; each process usually owns +one subdomain, although the user may choose to assign more than one subdomain to +a process. If each process i owns one subdomain, the number of rows in +the local sparse matrix is |Ii| + |Bi|, and the number of local columns (i.e. +those for which there exists at least one non-zero entry in the local rows) is +|Ii| + |Bi| + |Hi|. +


+ + + + + + + +
+

+

PIC

+
Figure 2: Point classfication.
+ + + +


+

This classification of mesh points guides the naming scheme that we adopted in +the library internals and in the data structures. We explicitly note that “Halo” points +are also often called “ghost” points in the literature. + + + +

+

+ diff --git a/docs/html/userhtmlsu10.html b/docs/html/userhtmlsu10.html new file mode 100644 index 00000000..9125bf7a --- /dev/null +++ b/docs/html/userhtmlsu10.html @@ -0,0 +1,233 @@ + + +psb_geaxpby — General Dense Matrix Sum + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu11.html b/docs/html/userhtmlsu11.html new file mode 100644 index 00000000..02088032 --- /dev/null +++ b/docs/html/userhtmlsu11.html @@ -0,0 +1,249 @@ + + +psb_gedot — Dot Product + + + + + + + +

+

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: +

+       T
+dot ← x y
+
+

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(ictxt,vres(1:3)) + +
    +

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

+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu12.html b/docs/html/userhtmlsu12.html new file mode 100644 index 00000000..7c80c72c --- /dev/null +++ b/docs/html/userhtmlsu12.html @@ -0,0 +1,208 @@ + + +psb_gedots — Generalized Dot Product + + + + + + + +

+

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: +

+            T
+res(i) ← x(:,i) y(:,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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu13.html b/docs/html/userhtmlsu13.html new file mode 100644 index 00000000..eac24110 --- /dev/null +++ b/docs/html/userhtmlsu13.html @@ -0,0 +1,223 @@ + + +psb_normi — Infinity-Norm of Vector + + + + + + + +

+

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  ← maxi |xi|
+
+

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(ictxt,vres(1:3)) + +
    +

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

+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu14.html b/docs/html/userhtmlsu14.html new file mode 100644 index 00000000..0cc3c708 --- /dev/null +++ b/docs/html/userhtmlsu14.html @@ -0,0 +1,177 @@ + + +psb_geamaxs — Generalized Infinity Norm + + + + + + + +

+

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) ← makx|x(k,i)|
+
+

+ + + +

+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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu15.html b/docs/html/userhtmlsu15.html new file mode 100644 index 00000000..dbae82bf --- /dev/null +++ b/docs/html/userhtmlsu15.html @@ -0,0 +1,224 @@ + + +psb_norm1 — 1-Norm of Vector + + + + + + + +

+

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)∥ + ∥im (x)∥
+              1         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(ictxt,vres(1:3)) + +
    +

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

+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu16.html b/docs/html/userhtmlsu16.html new file mode 100644 index 00000000..91cc3a13 --- /dev/null +++ b/docs/html/userhtmlsu16.html @@ -0,0 +1,192 @@ + + +psb_geasums — Generalized 1-Norm of Vector + + + + + + + +

+

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) ← makx|x(k,i)|
+
+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu17.html b/docs/html/userhtmlsu17.html new file mode 100644 index 00000000..96c7a8cb --- /dev/null +++ b/docs/html/userhtmlsu17.html @@ -0,0 +1,227 @@ + + +psb_norm2 — 2-Norm of Vector + + + + + + + +

+

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: +

+        √ -T--
+nrm2  ←   x 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(ictxt,vres(1:3)) + +
    +

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

+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu18.html b/docs/html/userhtmlsu18.html new file mode 100644 index 00000000..7ea7b0c0 --- /dev/null +++ b/docs/html/userhtmlsu18.html @@ -0,0 +1,177 @@ + + +psb_genrm2s — Generalized 2-Norm of Vector + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu19.html b/docs/html/userhtmlsu19.html new file mode 100644 index 00000000..31eb0f86 --- /dev/null +++ b/docs/html/userhtmlsu19.html @@ -0,0 +1,171 @@ + + +psb_norm1 — 1-Norm of Sparse Matrix + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu2.html b/docs/html/userhtmlsu2.html new file mode 100644 index 00000000..1cb338da --- /dev/null +++ b/docs/html/userhtmlsu2.html @@ -0,0 +1,129 @@ + + +Library contents + + + + + + + +

+

2.2 Library contents

+

The PSBLAS library consists of various classes of subroutines: +

+Computational routines
comprising: +
    +
  • Sparse matrix by dense matrix product; +
  • +
  • Sparse triangular systems solution for block diagonal matrices; +
  • +
  • Vector and matrix norms; +
  • +
  • Dense matrix sums; +
  • +
  • Dot products.
+
+Communication routines
handling halo and overlap communications; +
+Data management and auxiliary routines
including: +
    +
  • Parallel environment management +
  • +
  • Communication descriptors allocation; +
  • +
  • Dense and sparse matrix allocation; +
  • +
  • Dense and sparse matrix build and update; +
  • +
  • Sparse matrix and data distribution preprocessing.
+
+Preconditioner routines
+
+Iterative methods
a subset of Krylov subspace iterative methods
+

The following naming scheme has been adopted for all the symbols internally defined in +the PSBLAS software package: +

    +
  • all symbols (i.e. subroutine names, data types...) are prefixed by psb_ + + + +
  • +
  • all data type names are suffixed by _type +
  • +
  • all constants are suffixed by _ +
  • +
  • all top-level subroutine names follow the rule psb_xxname where xx can be + either: +
      +
    • ge: the routine is related to dense data, +
    • +
    • sp: the routine is related to sparse data, +
    • +
    • cd: the routine is related to communication descriptor (see 3).
    +

    For example the psb_geins, psb_spins and psb_cdins perform the same + action (see 6) on dense matrices, sparse matrices and communication + descriptors respectively. Interface overloading allows the usage of the same + subroutine names for both real and complex data.

+

In the description of the subroutines, arguments or argument entries are classified +as: +

+global
For input arguments, the value must be the same on all processes + participating in the subroutine call; for output arguments the value is + guaranteed to be the same. +
+local
Each process has its own value(s) independently.
+

To finish our general description, we define a version string with the constant +

+psb_version_string_
+
+

whose current value is 3.4.0 + + + +

+

+ diff --git a/docs/html/userhtmlsu20.html b/docs/html/userhtmlsu20.html new file mode 100644 index 00000000..d022a095 --- /dev/null +++ b/docs/html/userhtmlsu20.html @@ -0,0 +1,171 @@ + + +psb_normi — Infinity Norm of Sparse Matrix + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu21.html b/docs/html/userhtmlsu21.html new file mode 100644 index 00000000..2fe948d8 --- /dev/null +++ b/docs/html/userhtmlsu21.html @@ -0,0 +1,337 @@ + + +psb_spmm — Sparse Matrix by Dense Matrix Product + + + + + + + +

+

4.12 psb_spmm — Sparse Matrix by Dense Matrix Product

+

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

+
+
+y ← αAT x+ βy
+
(2)
+

+
+
+      H
+y ← αA  x+ β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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu22.html b/docs/html/userhtmlsu22.html new file mode 100644 index 00000000..d0ed85bb --- /dev/null +++ b/docs/html/userhtmlsu22.html @@ -0,0 +1,398 @@ + + +psb_spsm — Triangular System Solve + + + + + + + +

+

4.13 psb_spsm — Triangular System Solve

+

This subroutine computes the Triangular System Solve: +

+
+y  ←   αT- 1x + βy
+           -1
+y  ←   αDT   x +βy
+y  ←   αT- 1Dx  +βy
+y  ←   αT- Tx+ βy
+y  ←   αDT -Tx + βy
+         - T
+y  ←   αT   Dx + βy
+y  ←   αT- Hx +β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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu23.html b/docs/html/userhtmlsu23.html new file mode 100644 index 00000000..be2b0458 --- /dev/null +++ b/docs/html/userhtmlsu23.html @@ -0,0 +1,832 @@ + + +psb_halo — Halo Data Communication + + + + + + + +

+

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 14: 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 14. +
+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 14. +
+info
the local portion of result submatrix y.
Scope: local
Type: required
Intent: out.
An integer value that contains an error code.
+


+
+

+

PIC

+
Figure 7: Sample discretization mesh.
+


+

Usage Example Consider the discretization mesh depicted in fig. 7, 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
+ + + +

+
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu24.html b/docs/html/userhtmlsu24.html new file mode 100644 index 00000000..e5626dad --- /dev/null +++ b/docs/html/userhtmlsu24.html @@ -0,0 +1,1014 @@ + + +psb_ovrl — Overlap Update + + + + + + + +

+

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 15: 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 15. +
+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 15. +
+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 8: Sample discretization mesh.
+ + + +


+

Example of use Consider the discretization mesh depicted in fig. 8, partitioned +among two processes as shown by the dashed lines, with an overlap of 1 extra layer +with respect to the partition of fig. 7; 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
+ + + +

+
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu25.html b/docs/html/userhtmlsu25.html new file mode 100644 index 00000000..e2cab217 --- /dev/null +++ b/docs/html/userhtmlsu25.html @@ -0,0 +1,225 @@ + + +psb_gather — Gather Global Dense Matrix + + + + + + + +

+

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 16: 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 16. +
+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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu26.html b/docs/html/userhtmlsu26.html new file mode 100644 index 00000000..414c3508 --- /dev/null +++ b/docs/html/userhtmlsu26.html @@ -0,0 +1,244 @@ + + +psb_scatter — Scatter Global Dense Matrix + + + + + + + +

+

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 17: 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 17. +
+info
Error code.
Scope: local
Type: required
Intent: out.
An integer value; 0 means no error has been detected.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu27.html b/docs/html/userhtmlsu27.html new file mode 100644 index 00000000..16e74e11 --- /dev/null +++ b/docs/html/userhtmlsu27.html @@ -0,0 +1,419 @@ + + +psb_cdall — Allocates a communication descriptor + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu28.html b/docs/html/userhtmlsu28.html new file mode 100644 index 00000000..fe493759 --- /dev/null +++ b/docs/html/userhtmlsu28.html @@ -0,0 +1,206 @@ + + +psb_cdins — Communication descriptor insert routine + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu29.html b/docs/html/userhtmlsu29.html new file mode 100644 index 00000000..2a9d8453 --- /dev/null +++ b/docs/html/userhtmlsu29.html @@ -0,0 +1,122 @@ + + +psb_cdasb — Communication descriptor assembly routine + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu3.html b/docs/html/userhtmlsu3.html new file mode 100644 index 00000000..6434859e --- /dev/null +++ b/docs/html/userhtmlsu3.html @@ -0,0 +1,282 @@ + + +Application structure + + + + + + + +

+

2.3 Application structure

+

The main underlying principle of the PSBLAS library is that the library objects are +created and exist with reference to a discretized space to which there corresponds +an index space and a matrix sparsity pattern. As an example, consider a +cell-centered finite-volume discretization of the Navier-Stokes equations on a +simulation domain; the index space 1n is isomorphic to the set of cell centers, +whereas the pattern of the associated linear system matrix is isomorphic to the +adjacency graph imposed on the discretization mesh by the discretization +stencil. +

Thus the first order of business is to establish an index space, and this is done +with a call to psb_cdall in which we specify the size of the index space n and the +allocation of the elements of the index space to the various processes making up the +MPI (virtual) parallel machine. +

The index space is partitioned among processes, and this creates a mapping from +the “global” numbering 1n to a numbering “local” to each process; each process i +will own a certain subset 1nrowi, each element of which corresponds to a certain +element of 1n. The user does not set explicitly this mapping; when the application +needs to indicate to which element of the index space a certain item is related, +such as the row and column index of a matrix coefficient, it does so in the +“global” numbering, and the library will translate into the appropriate “local” +numbering. +

For a given index space 1n there are many possible associated topologies, i.e. +many different discretization stencils; thus the description of the index space is not +completed until the user has defined a sparsity pattern, either explicitly through +psb_cdins or implicitly through psb_spins. The descriptor is finalized with a call to +psb_cdasb and a sparse matrix with a call to psb_spasb. After psb_cdasb each +process i will have defined a set of “halo” (or “ghost”) indices nrowi + 1ncol +i, +denoting elements of the index space that are not assigned to process i; however the +variables associated with them are needed to complete computations associated with +the sparse matrix A, and thus they have to be fetched from (neighbouring) +processes. The descriptor of the index space is built exactly for the purpose +of properly sequencing the communication steps required to achieve this +objective. +

A simple application structure will walk through the index space allocation, +matrix/vector creation and linear system solution as follows: +

    +
  1. Initialize parallel environment with psb_init +
  2. +
  3. Initialize index space with psb_cdall +
  4. +
  5. Allocate sparse matrix and dense vectors with psb_spall and psb_geall + + + +
  6. +
  7. Loop over all local rows, generate matrix and vector entries, and insert + them with psb_spins and psb_geins +
  8. +
  9. Assemble the various entities: +
      +
    1. psb_cdasb +
    2. +
    3. psb_spasb +
    4. +
    5. psb_geasb
    +
  10. +
  11. Choose the preconditioner to be used with prec%init and build it with + prec%build3 . +
  12. +
  13. Call the iterative method of choice, e.g. psb_bicgstab
+

This is the structure of the sample program test/pargen/psb_d_pde3d.f90. +

For a simulation in which the same discretization mesh is used over multiple time +steps, the following structure may be more appropriate: +

    +
  1. Initialize parallel environment with psb_init +
  2. +
  3. Initialize index space with psb_cdall +
  4. +
  5. Loop over the topology of the discretization mesh and build the descriptor + with psb_cdins +
  6. +
  7. Assemble the descriptor with psb_cdasb +
  8. +
  9. Allocate the sparse matrices and dense vectors with psb_spall and + psb_geall +
  10. +
  11. Loop over the time steps: +
      +
    1. If after first time step, reinitialize the sparse matrix with psb_sprn; + also zero out the dense vectors; +
    2. +
    3. Loop over the mesh, generate the coefficients and insert/update them + with psb_spins and psb_geins + + + +
    4. +
    5. Assemble with psb_spasb and psb_geasb +
    6. +
    7. Choose and build preconditioner with prec%init and prec%build +
    8. +
    9. Call the iterative method of choice, e.g. psb_bicgstab
    +
+

The insertion routines will be called as many times as needed; they only need to be +called on the data that is actually allocated to the current process, i.e. each process +generates its own data. +

In principle there is no specific order in the calls to psb_spins, nor is there a +requirement to build a matrix row in its entirety before calling the routine; this +allows the application programmer to walk through the discretization mesh element +by element, generating the main part of a given matrix row but also contributions to +the rows corresponding to neighbouring elements. +

From a functional point of view it is even possible to execute one call for each +nonzero coefficient; however this would have a substantial computational +overhead. It is therefore advisable to pack a certain amount of data into each +call to the insertion routine, say touching on a few tens of rows; the best +performng value would depend on both the architecture of the computer being +used and on the problem structure. At the opposite extreme, it would be +possible to generate the entire part of a coefficient matrix residing on a +process and pass it in a single call to psb_spins; this, however, would entail a +doubling of memory occupation, and thus would be almost always far from +optimal. +

+

2.3.1 User-defined index mappings
+

PSBLAS supports user-defined global to local index mappings, subject to the +constraints outlined in sec. 2.3: +

    +
  1. The set of indices owned locally must be mapped to the set 1nrowi; +
  2. +
  3. The set of halo points must be mapped to the set nrowi + 1ncol +i;
+

but otherwise the mapping is arbitrary. The user application is responsible to ensure +consistency of this mapping; some errors may be caught by the library, but +this is not guaranteed. The application structure to support this usage is as +follows: +

    +
  1. Initialize index + space with psb_cdall(ictx,desc,info,vl=vl,lidx=lidx) passing the + vectors vl(:) containing the set of global indices owned by the current + process and lidx(:) containing the corresponding local indices; + + + +
  2. +
  3. Add the halo points ja(:) and their associated local indices lidx(:) with + a(some) call(s) to psb_cdins(nz,ja,desc,info,lidx=lidx); +
  4. +
  5. Assemble the descriptor with psb_cdasb; +
  6. +
  7. Build the sparse matrices and vectors, optionally making use in psb_spins + and psb_geins of the local argument specifying that the indices in ia, + ja and irw, respectively, are already local indices.
+ + + + +

+ diff --git a/docs/html/userhtmlsu30.html b/docs/html/userhtmlsu30.html new file mode 100644 index 00000000..9fe8df1c --- /dev/null +++ b/docs/html/userhtmlsu30.html @@ -0,0 +1,100 @@ + + +psb_cdcpy — Copies a communication descriptor + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu31.html b/docs/html/userhtmlsu31.html new file mode 100644 index 00000000..13d8ad01 --- /dev/null +++ b/docs/html/userhtmlsu31.html @@ -0,0 +1,83 @@ + + +psb_cdfree — Frees a communication descriptor + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu32.html b/docs/html/userhtmlsu32.html new file mode 100644 index 00000000..ff01fc91 --- /dev/null +++ b/docs/html/userhtmlsu32.html @@ -0,0 +1,163 @@ + + +psb_cdbldext — Build an extended communication descriptor + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu33.html b/docs/html/userhtmlsu33.html new file mode 100644 index 00000000..adf29faf --- /dev/null +++ b/docs/html/userhtmlsu33.html @@ -0,0 +1,128 @@ + + +psb_spall — Allocates a sparse matrix + + + + + + + +

+

6.7 psb_spall — Allocates a sparse matrix

+ + + +
+call psb_spall(a, desc_a, info, nnz) +
+

+

+

+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.
+

+

+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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu34.html b/docs/html/userhtmlsu34.html new file mode 100644 index 00000000..9e83fcb1 --- /dev/null +++ b/docs/html/userhtmlsu34.html @@ -0,0 +1,311 @@ + + +psb_spins — Insert a set of coefficients into a sparse matrix + + + + + + + +

+

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, irp, ja, val, irw, 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. +
+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. +
+irw
the row index displacement.
Scope:local.
Type:required.
Intent: in.
Specified as: an integer scalar. +
+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 should + belong to the current process, i.e. ia(i) should be one of the local indices, + but are otherwise 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. Any coefficients from matrix rows not owned by the calling process 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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu35.html b/docs/html/userhtmlsu35.html new file mode 100644 index 00000000..6d3342de --- /dev/null +++ b/docs/html/userhtmlsu35.html @@ -0,0 +1,186 @@ + + +psb_spasb — Sparse matrix assembly routine + + + + + + + +

+

6.9 psb_spasb — Sparse matrix assembly routine

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

+

+

+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. +
+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_ +
+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_. +
+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. +
+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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu36.html b/docs/html/userhtmlsu36.html new file mode 100644 index 00000000..e0692130 --- /dev/null +++ b/docs/html/userhtmlsu36.html @@ -0,0 +1,98 @@ + + +psb_spfree — Frees a sparse matrix + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu37.html b/docs/html/userhtmlsu37.html new file mode 100644 index 00000000..11d87cd6 --- /dev/null +++ b/docs/html/userhtmlsu37.html @@ -0,0 +1,114 @@ + + +psb_sprn — Reinit sparse matrix structure for psblas routines. + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu38.html b/docs/html/userhtmlsu38.html new file mode 100644 index 00000000..f5ee709d --- /dev/null +++ b/docs/html/userhtmlsu38.html @@ -0,0 +1,132 @@ + + +psb_geall — Allocates a dense matrix + + + + + + + +

+

6.12 psb_geall — Allocates a dense matrix

+ + + +
+call psb_geall(x, desc_a, info, 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.
+

+

+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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu39.html b/docs/html/userhtmlsu39.html new file mode 100644 index 00000000..57d504b4 --- /dev/null +++ b/docs/html/userhtmlsu39.html @@ -0,0 +1,178 @@ + + +psb_geins — Dense matrix insertion routine + + + + + + + +

+

6.13 psb_geins — Dense matrix insertion routine

+ + + +
+call psb_geins(m, irw, val, x, desc_a, info [,dupl,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. +
+dupl
How to handle duplicate coefficients.
Scope: global.
Type: optional.
Intent: in.
Specified as: integer, possible values: psb_dupl_ovwrt_, psb_dupl_add_. + + + +
+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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu4.html b/docs/html/userhtmlsu4.html new file mode 100644 index 00000000..ffc95516 --- /dev/null +++ b/docs/html/userhtmlsu4.html @@ -0,0 +1,61 @@ + + +Programming model + + + + + + + +

+

2.4 Programming model

+

The PSBLAS librarary is based on the Single Program Multiple Data (SPMD) +programming model: each process participating in the computation performs the +same actions on a chunk of data. Parallelism is thus data-driven. +

Because of this structure, many subroutines coordinate their action across the +various processes, thus providing an implicit synchronization point, and therefore +must be called simultaneously by all processes participating in the computation. This +is certainly true for the data allocation and assembly routines, for all the +computational routines and for some of the tools routines. +

However there are many cases where no synchronization, and indeed no +communication among processes, is implied; for instance, all the routines in sec. 3 +are only acting on the local data structures, and thus may be called independently. +The most important case is that of the coefficient insertion routines: since the +number of coefficients in the sparse and dense matrices varies among the processors, +and since the user is free to choose an arbitrary order in builiding the matrix entries, +these routines cannot imply a synchronization. +

Throughout this user’s guide each subroutine will be clearly indicated +as: +

+Synchronous:
must be called simultaneously by all the processes in the + relevant communication context; +
+Asynchronous:
may be called in a totally independent manner.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu40.html b/docs/html/userhtmlsu40.html new file mode 100644 index 00000000..345d1506 --- /dev/null +++ b/docs/html/userhtmlsu40.html @@ -0,0 +1,123 @@ + + +psb_geasb — Assembly a dense matrix + + + + + + + +

+

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.
+ + + + +

+ diff --git a/docs/html/userhtmlsu41.html b/docs/html/userhtmlsu41.html new file mode 100644 index 00000000..a561c920 --- /dev/null +++ b/docs/html/userhtmlsu41.html @@ -0,0 +1,102 @@ + + +psb_gefree — Frees a dense matrix + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu42.html b/docs/html/userhtmlsu42.html new file mode 100644 index 00000000..bf1d0e40 --- /dev/null +++ b/docs/html/userhtmlsu42.html @@ -0,0 +1,109 @@ + + +psb_gelp — Applies a left permutation to a dense matrix + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu43.html b/docs/html/userhtmlsu43.html new file mode 100644 index 00000000..08451ab1 --- /dev/null +++ b/docs/html/userhtmlsu43.html @@ -0,0 +1,162 @@ + + +psb_glob_to_loc — Global to local indices convertion + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu44.html b/docs/html/userhtmlsu44.html new file mode 100644 index 00000000..169ec8db --- /dev/null +++ b/docs/html/userhtmlsu44.html @@ -0,0 +1,140 @@ + + +psb_loc_to_glob — Local to global indices conversion + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu45.html b/docs/html/userhtmlsu45.html new file mode 100644 index 00000000..49eba023 --- /dev/null +++ b/docs/html/userhtmlsu45.html @@ -0,0 +1,103 @@ + + +psb_is_owned — + + + + + + + +

+

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
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu46.html b/docs/html/userhtmlsu46.html new file mode 100644 index 00000000..b67dbd45 --- /dev/null +++ b/docs/html/userhtmlsu46.html @@ -0,0 +1,131 @@ + + +psb_owned_index — + + + + + + + +

+

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
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu47.html b/docs/html/userhtmlsu47.html new file mode 100644 index 00000000..0202a65b --- /dev/null +++ b/docs/html/userhtmlsu47.html @@ -0,0 +1,103 @@ + + +psb_is_local — + + + + + + + +

+

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
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu48.html b/docs/html/userhtmlsu48.html new file mode 100644 index 00000000..2b5e3d2f --- /dev/null +++ b/docs/html/userhtmlsu48.html @@ -0,0 +1,131 @@ + + +psb_local_index — + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu49.html b/docs/html/userhtmlsu49.html new file mode 100644 index 00000000..499a2f88 --- /dev/null +++ b/docs/html/userhtmlsu49.html @@ -0,0 +1,107 @@ + + +psb_get_boundary — Extract list of boundary elements + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu5.html b/docs/html/userhtmlsu5.html new file mode 100644 index 00000000..d224f516 --- /dev/null +++ b/docs/html/userhtmlsu5.html @@ -0,0 +1,697 @@ + + +Descriptor data structure + + + + + + + +

+

3.1 Descriptor data structure

+

All the general matrix informations and elements to be exchanged among processes +are stored within a data structure of the type psb_desc_type. Every structure of this +type is associated with a discretization pattern and enables data communications and +other operations that are necessary for implementing the various algorithms of +interest to us. + + + +

The data structure itself psb_desc_type can be treated as an opaque object +handled via the tools routines of Sec. 6 or the query routines detailed below; +nevertheless we include here a description for the curious reader. +

First we describe the psb_indx_map type. This is a data structure that keeps +track of a certain number of basic issues such as: +

    +
  • The value of the communication/MPI context; +
  • +
  • The number of indices in the index space, i.e. global number of rows and + columns of a sparse matrix; +
  • +
  • The local set of indices, including: +
      +
    • The number of local indices (and local rows); +
    • +
    • The number of halo indices (and therefore local columns); +
    • +
    • The global indices corresponding to the local ones.
    +
+

There are many different schemes for storing these data; therefore there are a number of +types extending the base one, and the descriptor structure holds a polymorphic +object whose dynamic type can be any of the extended types. The methods +associated with this data type answer the following queries: +

    +
  • For a given set of local indices, find the corresponding indices in the global + numbering; +
  • +
  • For a given set of global indices, find the corresponding indices in the local + numbering, if any, or return an invalid +
  • +
  • Add a global index to the set of halo indices; +
  • +
  • Find the process owner of each member of a set of global indices.
+

All methods but the last are purely local; the last method potentially requires +communication among processes, and thus is a synchronous method. The +choice of a specific dynamic type for the index map is made at the time the +descriptor is initially allocated, according to the mode of initialization (see +also 6). +

The descriptor contents are as follows: +

+indxmap
A polymorphic variable of a type that is any extension of the + indx_map type described above.
+ + + +
+halo_index
A list of the halo and boundary elements for the current process to be + exchanged with other processes; for each processes with which it is necessary to + communicate: +
    +
  1. Process identifier; +
  2. +
  3. Number of points to be received; +
  4. +
  5. Indices of points to be received; +
  6. +
  7. Number of points to be sent; +
  8. +
  9. Indices of points to be sent;
+

Specified as: a vector of integer type, see 3.3. +

+ext_index
A list of element indices to be exchanged to implement the mapping + between a base descriptor and a descriptor with overlap.
Specified as: a vector of integer type, see 3.3. +
+ovrlap_index
A list of the overlap elements for the current process, organized in + groups like the previous vector: +
    +
  1. Process identifier; +
  2. +
  3. Number of points to be received; +
  4. +
  5. Indices of points to be received; +
  6. +
  7. Number of points to be sent; +
  8. +
  9. Indices of points to be sent;
+

Specified as: a vector of integer type, see 3.3. +

+ovr_mst_idx
A list to retrieve the value of each overlap element from the respective + master process.
Specified as: a vector of integer type, see 3.3. +
+ovrlap_elem
For all overlap points belonging to th ecurrent process: +
    +
  1. Overlap point index; + + + +
  2. +
  3. Number of processes sharing that overlap points; +
  4. +
  5. Index of a “master” process:
+

Specified as: an allocatable integer array of rank two. +

+bnd_elem
A list of all boundary points, i.e. points that have a connection with + other processes.
+

The Fortran 2003 declaration for psb_desc_type structures is as follows:


+
+

+

+type psb_desc_type + 
    class(psb_indx_map), allocatable :: indxmap + 
    type(psb_i_vect_type) :: v_halo_index + 
    type(psb_i_vect_type) :: v_ext_index + 
    type(psb_i_vect_type) :: v_ovrlap_index + 
    type(psb_i_vect_type) :: v_ovr_mst_idx + 
    integer, allocatable  :: ovrlap_elem(:,:) + 
    integer, allocatable  :: bnd_elem(:) + 
end type psb_desc_type +
+

+
Figure 3: The PSBLAS defined data type that contains the communication +descriptor.
+


+

A communication descriptor associated with a sparse matrix has a state, which +can take the following values: +

+Build:
State entered after the first allocation, and before the first assembly; in + this state it is possible to add communication requirements among different + processes. +
+Assembled:
State entered after the assembly; computations using the + associated sparse matrix, such as matrix-vector products, are only possible + in this state.
+

+

3.1.1 Descriptor Methods
+ + + +

+

3.1.2 get_local_rows — Get number of local rows
+ + + +
+nr = desc%get_local_rows() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+desc
the communication descriptor.
Scope: local.
+

+

+On Return
+
+Function value
The number of local rows, i.e. the number of rows owned by + the current process; as explained in 1, it is equal to |Ii|+|Bi|. The returned + value is specific to the calling process.
+

+

3.1.3 get_local_cols — Get number of local cols
+ + + +
+nc = desc%get_local_cols() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+desc
the communication descriptor.
Scope: local.
+

+

+On Return
+
+Function value
The number of local cols, i.e. the number of indices used by + the current process, including both local and halo indices; as explained + in 1, it is equal to |Ii| + |Bi| + |Hi|. The returned value is specific to the + calling process.
+

+

3.1.4 get_global_rows — Get number of global rows
+ + + +
+nr = desc%get_global_rows() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+desc
the communication descriptor.
Scope: local.
+

+

+On Return
+
+Function value
The number of global rows, i.e. the size of the global index + space.
+

+

3.1.5 get_global_cols — Get number of global cols
+ + + +
+nr = desc%get_global_cols() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+desc
the communication descriptor.
Scope: local.
+

+

+On Return
+
+Function value
The number of global cols; usually this is equal to the number + of global rows.
+

+

3.1.6 get_global_indices — Get vector of global indices
+ + + +
+myidx = desc%get_global_indices([owned]) +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+desc
the communication descriptor.
Scope: local.
Type: required.
+
+owned
Choose if you only want owned indices (owned=.true.) or also halo + indices (owned=.false.). Scope: local.
Type: optional; default: .true..
+

+

+On Return
+
+Function value
The global indices, returned as an allocatable integer array of + rank 1.
+

+

3.1.7 get_context — Get communication context
+ + + +
+ictxt = desc%get_context() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+desc
the communication descriptor.
Scope: local.
+

+

+On Return
+
+Function value
The communication context.
+

+

3.1.8 Clone — clone current object
+ + + +
+call  desc%clone(descout,info) +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+desc
the communication descriptor.
Scope: local.
+

+

+On Return
+
+descout
A copy of the input object. +
+info
Return code.
+

+

3.1.9 CNV — convert internal storage format
+ + + +
+call  desc%cnv(mold) +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+desc
the communication descriptor.
Scope: local.
+
+mold
the desred integer storage format.
Scope: local.
Specified as: a object of type derived from (integer) + psb_T_base_vect_type.
+

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

+

3.1.10 psb_cd_get_large_threshold — Get threshold for index mapping +switch
+ + + +
+ith = psb_cd_get_large_threshold() +
+

+

+

+Type:
Asynchronous. +
+On Return
+
+Function value
The current value for the size threshold. +
+

+

3.1.11 psb_cd_set_large_threshold — Set threshold for index mapping +switch
+ + + +
+call psb_cd_set_large_threshold(ith) +
+

+

+

+Type:
Synchronous. +
+On Entry
+
+ith
the new threshold for communication descriptors.
Scope: global.
Type: required.
Intent: in.
Specified as: an integer value greater than zero.
+

Note: the threshold value is only queried by the library at the time a call to psb_cdall +is executed, therefore changing the threshold has no effect on communication +descriptors that have already been initialized. Moreover the threshold must have the +same value on all processes. +

+

3.1.12 Named Constants
+

+

+psb_none_
Generic no-op; +
+psb_root_
Default root process for broadcast and scatter operations; +
+psb_nohalo_
Do not fetch halo elements; +
+psb_halo_
Fetch halo elements from neighbouring processes; +
+psb_sum_
Sum overlapped elements +
+psb_avg_
Average overlapped elements +
+psb_comm_halo_
Exchange data based on the halo_index list; +
+psb_comm_ext_
Exchange data based on the ext_index list; + + + +
+psb_comm_ovr_
Exchange data based on the ovrlap_index list; +
+psb_comm_mov_
Exchange data based on the ovr_mst_idx list; +
+ + + + +

+ diff --git a/docs/html/userhtmlsu50.html b/docs/html/userhtmlsu50.html new file mode 100644 index 00000000..1a9d90a3 --- /dev/null +++ b/docs/html/userhtmlsu50.html @@ -0,0 +1,106 @@ + + +psb_get_overlap — Extract list of overlap 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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu51.html b/docs/html/userhtmlsu51.html new file mode 100644 index 00000000..d90c3db0 --- /dev/null +++ b/docs/html/userhtmlsu51.html @@ -0,0 +1,209 @@ + + +psb_sp_getrow — Extract row(s) from a sparse matrix + + + + + + + +

+

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.
+ + + + + + + + + + +

+ diff --git a/docs/html/userhtmlsu52.html b/docs/html/userhtmlsu52.html new file mode 100644 index 00000000..033aa3bf --- /dev/null +++ b/docs/html/userhtmlsu52.html @@ -0,0 +1,113 @@ + + +psb_sizeof — Memory occupation + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu53.html b/docs/html/userhtmlsu53.html new file mode 100644 index 00000000..fb7ef2d4 --- /dev/null +++ b/docs/html/userhtmlsu53.html @@ -0,0 +1,229 @@ + + +Sorting utilities — + + + + + + + +

+

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.
    +
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu54.html b/docs/html/userhtmlsu54.html new file mode 100644 index 00000000..029d425f --- /dev/null +++ b/docs/html/userhtmlsu54.html @@ -0,0 +1,121 @@ + + +psb_init — Initializes PSBLAS parallel environment + + + + + + + +

+

7.1 psb_init — Initializes PSBLAS parallel environment

+ + + +
+call psb_init(icontxt, 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
+
+icontxt
the communication context identifying the virtual parallel machine. + 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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu55.html b/docs/html/userhtmlsu55.html new file mode 100644 index 00000000..547402ae --- /dev/null +++ b/docs/html/userhtmlsu55.html @@ -0,0 +1,118 @@ + + +psb_info — Return information about PSBLAS parallel environment + + + + + + + +

+

7.2 psb_info — Return information about PSBLAS parallel environment

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

+

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

+Type:
Asynchronous. +
+On Entry
+
+icontxt
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 icontxt + that any such process may execute is to psb_exit.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu56.html b/docs/html/userhtmlsu56.html new file mode 100644 index 00000000..8ff02225 --- /dev/null +++ b/docs/html/userhtmlsu56.html @@ -0,0 +1,101 @@ + + +psb_exit — Exit from PSBLAS parallel environment + + + + + + + +

+

7.3 psb_exit — Exit from PSBLAS parallel environment

+ + + +
+call psb_exit(icontxt) + 
call psb_exit(icontxt,close) +
+

+

This subroutine exits from the PSBLAS parallel virtual machine. +

+Type:
Synchronous. +
+On Entry
+
+icontxt
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 icontxt.
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 icontxt 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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu57.html b/docs/html/userhtmlsu57.html new file mode 100644 index 00000000..5c71e544 --- /dev/null +++ b/docs/html/userhtmlsu57.html @@ -0,0 +1,80 @@ + + +psb_get_mpicomm — Get the MPI communicator + + + + + + + +

+

7.4 psb_get_mpicomm — Get the MPI communicator

+ + + +
+call psb_get_mpicomm(icontxt, icomm) +
+

+

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

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

+

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

+ diff --git a/docs/html/userhtmlsu58.html b/docs/html/userhtmlsu58.html new file mode 100644 index 00000000..25847755 --- /dev/null +++ b/docs/html/userhtmlsu58.html @@ -0,0 +1,96 @@ + + +psb_get_rank — Get the MPI rank + + + + + + + +

+

7.5 psb_get_rank — Get the MPI rank

+ + + +
+call psb_get_rank(rank, icontxt, id) +
+

+

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

+Type:
Asynchronous. +
+On Entry
+
+icontxt
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
+
+rank
The MPI rank associated with the PSBLAS process id.
Scope: local.
Type: required.
Intent: out.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu59.html b/docs/html/userhtmlsu59.html new file mode 100644 index 00000000..46626f2c --- /dev/null +++ b/docs/html/userhtmlsu59.html @@ -0,0 +1,58 @@ + + +psb_wtime — Wall clock timing + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu6.html b/docs/html/userhtmlsu6.html new file mode 100644 index 00000000..cb15a3dc --- /dev/null +++ b/docs/html/userhtmlsu6.html @@ -0,0 +1,963 @@ + + +Sparse Matrix class + + + + + + + +

+

3.2 Sparse Matrix class

+

The psb_Tspmat_type class contains all information about the local portion of the +sparse matrix and its storage mode. Its design is based on the STATE design +pattern [13] as detailed in [11]; the type declaration is shown in figure 4 where T is a +placeholder for the data type and precision variants +

+S
Single precision real; +
+D
Double precision real; +
+C
Single precision complex; +
+Z
Double precision complex.
+

The actual data is contained in the polymorphic component a%a of type +psb_T_base_sparse_mat; its specific layout can be chosen dynamically among the +predefined types, or an entirely new storage layout can be implemented and passed to +the library at runtime via the psb_spasb routine.


+
+

+

+  type :: psb_Tspmat_type + 
    class(psb_T_base_sparse_mat), allocatable  :: a + 
  end type  psb_Tspmat_type +
+

+
Figure 4: The PSBLAS defined data type that contains a sparse matrix.
+


+

The following very common formats are precompiled in PSBLAS and thus are +always available: +

+psb_T_coo_sparse_mat
Coordinate storage; +
+psb_T_csr_sparse_mat
Compressed storage by rows; +
+psb_T_csc_sparse_mat
Compressed storage by columns;
+ + + +

The inner sparse matrix has an associated state, which can take the following +values: +

+Build:
State entered after the first allocation, and before the first assembly; in + this state it is possible to add nonzero entries. +
+Assembled:
State entered after the assembly; computations using the sparse + matrix, such as matrix-vector products, are only possible in this state; +
+Update:
State entered after a reinitalization; this is used to handle applications + in which the same sparsity pattern is used multiple times with different + coefficients. In this state it is only possible to enter coefficients for already + existing nonzero entries.
+

The only storage variant supporting the build state is COO; all other variants are +obtained by conversion to/from it. +

+

3.2.1 Sparse Matrix Methods
+

+

3.2.2 get_nrows — Get number of rows in a sparse matrix
+ + + +
+nr = a%get_nrows() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix
Scope: local
+

+

+On Return
+
+Function value
The number of rows of sparse matrix a.
+

+

3.2.3 get_ncols — Get number of columns in a sparse matrix
+ + + +
+nc = a%get_ncols() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix
Scope: local
+

+

+On Return
+
+Function value
The number of columns of sparse matrix a.
+

+

3.2.4 get_nnzeros — Get number of nonzero elements in a sparse matrix
+ + + +
+nz = a%get_nnzeros() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix
Scope: local
+

+

+On Return
+
+Function value
The number of nonzero elements stored in sparse matrix a.
+

Notes +

    +
  1. The function value is specific to the storage format of matrix a; some + storage formats employ padding, thus the returned value for the same + matrix may be different for different storage choices.
+

+

3.2.5 get_size — Get maximum number of nonzero elements in a sparse +matrix
+ + + +
+maxnz = a%get_size() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix
Scope: local
+

+

+On Return
+
+Function value
The maximum number of nonzero elements that can be stored + in sparse matrix a using its current memory allocation.
+

+

3.2.6 sizeof — Get memory occupation in bytes of a sparse matrix
+ + + +
+memory_size = a%sizeof() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix
Scope: local
+

+

+On Return
+
+Function value
The memory occupation in bytes.
+

+

3.2.7 get_fmt — Short description of the dynamic type
+ + + +
+write(*,*) a%get_fmt() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix
Scope: local
+

+

+On Return
+
+Function value
A short string describing the dynamic type of the matrix. + Predefined values include NULL, COO, CSR and CSC.
+

+

3.2.8 is_bld, is_upd, is_asb — Status check
+ + + +
+if (a%is_bld()) then + 
if (a%is_upd()) then + 
if (a%is_asb()) then +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix
Scope: local
+

+

+On Return
+
+Function value
A logical value indicating whether the matrix is in the Build, + Update or Assembled state, respectively.
+

+

3.2.9 is_lower, is_upper, is_triangle, is_unit — Format check
+ + + +
+if (a%is_triangle()) then + 
if (a%is_upper()) then + 
if (a%is_lower()) then + 
if (a%is_unit()) then +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix
Scope: local
+

+

+On Return
+
+Function value
A logical value indicating whether the matrix is triangular; + if is_triangle() returns .true. check also if it is lower, upper and with + a unit (i.e. assumed) diagonal.
+

+

3.2.10 cscnv — Convert to a different storage format
+ + + +
+call  a%cscnv(b,info [, type, mold, dupl]) + 
call  a%cscnv(info [, type, mold, dupl]) +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix.
A variable of type psb_Tspmat_type.
Scope: local.
+
+type
a string requesting a new format.
Type: optional. +
+mold
a variable of class(psb_T_base_sparse_mat) requesting a new format.
Type: optional. +
+dupl
an integer value specifing how to handle duplicates (see Named Constants + below)
+

+

+On Return
+
+b,a
A copy of a with a new storage format.
A variable of type psb_Tspmat_type. +
+info
Return code.
+

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

+

3.2.11 csclip — Reduce to a submatrix
+ + + +
+    call a%csclip(b,info[,& + 
       & imin,imax,jmin,jmax,rscale,cscale]) +
+

+

Returns the submatrix A(imin:imax,jmin:jmax), optionally rescaling row/col +indices to the range 1:imax-imin+1,1:jmax-jmin+1. +

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix.
A variable of type psb_Tspmat_type.
Scope: local.
+
+imin,imax,jmin,jmax
Minimum and maximum row and column indices.
Type: optional. +
+rscale,cscale
Whether to rescale row/column indices. Type: optional.
+

+

+On Return
+
+b
A copy of a submatrix of a.
A variable of type psb_Tspmat_type. +
+info
Return code.
+

+

3.2.12 clean_zeros — Eliminate zero coefficients
+ + + +
+    call a%clean_zeros(info) +
+

+

Eliminates zero coefficients in the input matrix. Note that depending on the +internal storage format, there may still be some amount of zero padding in the +output. +

+

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix.
A variable of type psb_Tspmat_type.
Scope: local.
+

+

+On Return
+
+a
The matrix a without zero coefficients.
A variable of type psb_Tspmat_type. +
+info
Return code.
+

+

3.2.13 get_diag — Get main diagonal
+ + + +
+    call a%get_diag(d,info) +
+

+

Returns a copy of the main diagonal. +

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix.
A variable of type psb_Tspmat_type.
Scope: local.
+

+

+On Return
+
+d
A copy of the main diagonal.
A one-dimensional array of the appropriate type. +
+info
Return code.
+

+

3.2.14 clip_diag — Cut out main diagonal
+ + + +
+    call a%clip_diag(b,info) +
+

+

Returns a copy of a without the main diagonal. +

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix.
A variable of type psb_Tspmat_type.
Scope: local.
+

+

+On Return
+
+b
A copy of a without the main diagonal.
A variable of type psb_Tspmat_type. +
+info
Return code.
+

+

3.2.15 tril — Return the lower triangle
+ + + +
+    call a%tril(l,info[,& + 
       & diag,imin,imax,jmin,jmax,rscale,cscale,u]) +
+

+

Returns the lower triangular part of submatrix A(imin:imax,jmin:jmax), +optionally rescaling row/col indices to the range 1:imax-imin+1,1:jmax-jmin+1 and +returing the complementary upper triangle. +

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix.
A variable of type psb_Tspmat_type.
Scope: local.
+
+diag
Include diagonals up to this one; diag=1 means the first superdiagonal, + diag=-1 means the first subdiagonal. Default 0. +
+imin,imax,jmin,jmax
Minimum and maximum row and column indices.
Type: optional. +
+rscale,cscale
Whether to rescale row/column indices. Type: optional.
+

+

+On Return
+
+l
A copy of the lower triangle of a.
A variable of type psb_Tspmat_type. +
+u
(optional) A copy of the upper triangle of a.
A variable of type psb_Tspmat_type. +
+info
Return code.
+

+

3.2.16 triu — Return the upper triangle
+ + + +
+    call a%triu(u,info[,& + 
       & diag,imin,imax,jmin,jmax,rscale,cscale,l]) +
+

+

Returns the upper triangular part of submatrix A(imin:imax,jmin:jmax), +optionally rescaling row/col indices to the range 1:imax-imin+1,1:jmax-jmin+1, +and returing the complementary lower triangle. +

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix.
A variable of type psb_Tspmat_type.
Scope: local.
+
+diag
Include diagonals up to this one; diag=1 means the first superdiagonal, + diag=-1 means the first subdiagonal. Default 0. +
+imin,imax,jmin,jmax
Minimum and maximum row and column indices.
Type: optional. +
+rscale,cscale
Whether to rescale row/column indices. Type: optional.
+

+

+On Return
+
+u
A copy of the upper triangle of a.
A variable of type psb_Tspmat_type. +
+l
(optional) A copy of the lower triangle of a.
A variable of type psb_Tspmat_type. +
+info
Return code.
+

+

3.2.17 psb_set_mat_default — Set default storage format
+ + + +
+call  psb_set_mat_default(a) +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+a
a variable of class(psb_T_base_sparse_mat) requesting a new default + storage format.
Type: required.
+

+

3.2.18 clone — Clone current object
+ + + +
+call  a%clone(b,info) +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+a
the sparse matrix.
Scope: local.
+

+

+On Return
+
+b
A copy of the input object. +
+info
Return code.
+

+

3.2.19 Named Constants
+

+

+psb_dupl_ovwrt_
Duplicate coefficients should be overwritten (i.e. ignore + duplications) +
+psb_dupl_add_
Duplicate coefficients should be added; +
+psb_dupl_err_
Duplicate coefficients should trigger an error conditino +
+psb_upd_dflt_
Default update strategy for matrix coefficients; +
+psb_upd_srch_
Update strategy based on search into the data structure; +
+psb_upd_perm_
Update strategy based on additional permutation data (see + tools routine description).
+ + + + +

+ diff --git a/docs/html/userhtmlsu60.html b/docs/html/userhtmlsu60.html new file mode 100644 index 00000000..ba486b8d --- /dev/null +++ b/docs/html/userhtmlsu60.html @@ -0,0 +1,63 @@ + + +psb_barrier — Sinchronization point parallel environment + + + + + + + +

+

7.7 psb_barrier — Sinchronization point parallel environment

+ + + +
+call psb_barrier(icontxt) +
+

+

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

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

+ diff --git a/docs/html/userhtmlsu61.html b/docs/html/userhtmlsu61.html new file mode 100644 index 00000000..73e3c1b8 --- /dev/null +++ b/docs/html/userhtmlsu61.html @@ -0,0 +1,62 @@ + + +psb_abort — Abort a computation + + + + + + + +

+

7.8 psb_abort — Abort a computation

+ + + +
+call psb_abort(icontxt) +
+

+

This subroutine aborts computation on the parallel virtual machine. +

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

+ diff --git a/docs/html/userhtmlsu62.html b/docs/html/userhtmlsu62.html new file mode 100644 index 00000000..3d10e78a --- /dev/null +++ b/docs/html/userhtmlsu62.html @@ -0,0 +1,110 @@ + + +psb_bcast — Broadcast data + + + + + + + +

+

7.9 psb_bcast — Broadcast data

+ + + +
+call psb_bcast(icontxt, dat, root) +
+

+

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

+Type:
Synchronous. +
+On Entry
+
+icontxt
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  
+

+

+On Return
+
+dat
On processes other than root, 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 scalar.  Type, kind, rank + and size must agree on all processes.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu63.html b/docs/html/userhtmlsu63.html new file mode 100644 index 00000000..1fae8008 --- /dev/null +++ b/docs/html/userhtmlsu63.html @@ -0,0 +1,124 @@ + + +psb_sum — Global sum + + + + + + + +

+

7.10 psb_sum — Global sum

+ + + +
+call psb_sum(icontxt, dat, root) +
+

+

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

+Type:
Synchronous. +
+On Entry
+
+icontxt
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.  
+

+

+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.
+

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 dat argument may also be a long integer scalar.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu64.html b/docs/html/userhtmlsu64.html new file mode 100644 index 00000000..30b2de50 --- /dev/null +++ b/docs/html/userhtmlsu64.html @@ -0,0 +1,125 @@ + + +psb_max — Global maximum + + + + + + + +

+

7.11 psb_max — Global maximum

+ + + +
+call psb_max(icontxt, dat, root) +
+

+

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

+Type:
Synchronous. +
+On Entry
+
+icontxt
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.
+

+

+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.
+

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 dat argument may also be a long integer scalar.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu65.html b/docs/html/userhtmlsu65.html new file mode 100644 index 00000000..edd9169b --- /dev/null +++ b/docs/html/userhtmlsu65.html @@ -0,0 +1,125 @@ + + +psb_min — Global minimum + + + + + + + +

+

7.12 psb_min — Global minimum

+ + + +
+call psb_min(icontxt, dat, root) +
+

+

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

+Type:
Synchronous. +
+On Entry
+
+icontxt
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.
+

+

+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.
+

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 dat argument may also be a long integer scalar.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu66.html b/docs/html/userhtmlsu66.html new file mode 100644 index 00000000..fc6c12d9 --- /dev/null +++ b/docs/html/userhtmlsu66.html @@ -0,0 +1,124 @@ + + +psb_amx — Global maximum absolute value + + + + + + + +

+

7.13 psb_amx — Global maximum absolute value

+ + + +
+call psb_amx(icontxt, dat, root) +
+

+

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

+Type:
Synchronous. +
+On Entry
+
+icontxt
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.
+

+

+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.
+

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 dat argument may also be a long integer scalar.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu67.html b/docs/html/userhtmlsu67.html new file mode 100644 index 00000000..e3ec9808 --- /dev/null +++ b/docs/html/userhtmlsu67.html @@ -0,0 +1,125 @@ + + +psb_amn — Global minimum absolute value + + + + + + + +

+

7.14 psb_amn — Global minimum absolute value

+ + + +
+call psb_amn(icontxt, dat, root) +
+

+

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

+Type:
Synchronous. +
+On Entry
+
+icontxt
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.
+

+

+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.
+

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 dat argument may also be a long integer scalar.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu68.html b/docs/html/userhtmlsu68.html new file mode 100644 index 00000000..267cf42a --- /dev/null +++ b/docs/html/userhtmlsu68.html @@ -0,0 +1,141 @@ + + +psb_nrm2 — Global 2-norm reduction + + + + + + + +

+

7.15 psb_nrm2 — Global 2-norm reduction

+ + + +
+call psb_nrm2(icontxt, dat, root) +
+

+

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

+Type:
Synchronous. +
+On Entry
+
+icontxt
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.
+

+

+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.
+

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 +
    +      ∘ -------
+       ∑     2
+res =     dati,
+         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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu69.html b/docs/html/userhtmlsu69.html new file mode 100644 index 00000000..f3eb9733 --- /dev/null +++ b/docs/html/userhtmlsu69.html @@ -0,0 +1,129 @@ + + +psb_snd — Send data + + + + + + + +

+

7.16 psb_snd — Send data

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

+

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

+Type:
Synchronous: see usage notes. +
+On Entry
+
+icontxt
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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu7.html b/docs/html/userhtmlsu7.html new file mode 100644 index 00000000..2f3f9153 --- /dev/null +++ b/docs/html/userhtmlsu7.html @@ -0,0 +1,352 @@ + + +Dense Vector Data Structure + + + + + + + +

+

3.3 Dense Vector Data Structure

+

The psb_T_vect_type data structure encapsulates the dense vectors in a way similar +to sparse matrices, i.e. including a base type psb_T_base_vect_type. The user will +not, in general, access the vector components directly, but rather via the routines of +sec. 6. Among other simple things, we define here an extraction method that +can be used to get a full copy of the part of the vector stored on the local +process. +

The type declaration is shown in figure 5 where T is a placeholder for the data +type and precision variants +

+I
Integer; +
+S
Single precision real; +
+D
Double precision real; +
+C
Single precision complex; +
+Z
Double precision complex.
+

The actual data is contained in the polymorphic component v%v; the separation between +the application and the actual data is essential for cases where it is necessary to link +to data storage made available elsewhere outside the direct control of the +compiler/application, e.g. data stored in a graphics accelerator’s private memory. +


+
+

+

+  type psb_T_base_vect_type + 
    TYPE(KIND_), allocatable :: v(:) + 
  end type psb_T_base_vect_type + 

  type psb_T_vect_type + 
    class(psb_T_base_vect_type), allocatable :: v + 
  end type  psb_T_vect_type + 
+
+

+ + + +
Figure 5: The PSBLAS defined data type that contains a dense vector.
+


+

+

3.3.1 Vector Methods
+

+

3.3.2 get_nrows — Get number of rows in a dense vector
+ + + +
+nr = v%get_nrows() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+v
the dense vector
Scope: local
+

+

+On Return
+
+Function value
The number of rows of dense vector v.
+

+

3.3.3 sizeof — Get memory occupation in bytes of a dense vector
+ + + +
+memory_size = v%sizeof() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+v
the dense vector
Scope: local
+

+

+On Return
+
+Function value
The memory occupation in bytes.
+

+

3.3.4 set — Set contents of the vector
+ + + +
+ call  v%set(alpha[,first,last]) + 
 call  v%set(vect[,first,last]) + 
 call  v%zero() +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+v
the dense vector
Scope: local
+
+alpha
A scalar value.
Scope: local
Type: required
Intent: in.
Specified as: a number of the data type indicated in Table 1. +
+first,last
Boundaries for setting in the vector.
Scope: local
Type: optional
Intent: in.
Specified as: integers. +
+vect
An array
Scope: local
Type: required
Intent: in.
Specified as: a number of the data type indicated in Table 1.
+

Note that a call to v%zero() is provided as a shorthand, but is equivalent to a call +to v%set(zero) with the zero constant having the appropriate type and +kind. +

+

+On Return
+
+v
the dense vector, with updated entries
Scope: local
+ + + +

+

3.3.5 get_vect — Get a copy of the vector contents
+ + + +
+extv = v%get_vect([n]) +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+v
the dense vector
Scope: local
+
+n
Size to be returned
Scope: local.
Type: optional; default: entire vector.
+
+

+

+On Return
+
+Function value
An allocatable array holding a copy of the dense vector + contents. If the argument n is specified, the size of the returned array + equals the minimum between n and the internal size of the vector, or 0 if + n is negative; otherwise, the size of the array is the same as the internal + size of the vector.
+

+

3.3.6 clone — Clone current object
+ + + +
+call  x%clone(y,info) +
+

+

+

+Type:
Asynchronous. +
+On Entry
+
+x
the dense vector.
Scope: local.
+

+

+On Return
+
+y
A copy of the input object. +
+info
Return code.
+ + + + +

+ diff --git a/docs/html/userhtmlsu70.html b/docs/html/userhtmlsu70.html new file mode 100644 index 00000000..d71eb786 --- /dev/null +++ b/docs/html/userhtmlsu70.html @@ -0,0 +1,124 @@ + + +psb_rcv — Receive data + + + + + + + +

+

7.17 psb_rcv — Receive data

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

+

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

+Type:
Synchronous: see usage notes. +
+On Entry
+
+icontxt
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.
+ + + + +

+ diff --git a/docs/html/userhtmlsu71.html b/docs/html/userhtmlsu71.html new file mode 100644 index 00000000..60772d43 --- /dev/null +++ b/docs/html/userhtmlsu71.html @@ -0,0 +1,93 @@ + + +psb_errpush — Pushes an error code onto the error stack + + + + + + + +

+

8.1 psb_errpush — Pushes an error code onto the error stack

+ +
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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu72.html b/docs/html/userhtmlsu72.html new file mode 100644 index 00000000..6e16022f --- /dev/null +++ b/docs/html/userhtmlsu72.html @@ -0,0 +1,61 @@ + + +psb_error — Prints the error stack content and aborts execution + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu73.html b/docs/html/userhtmlsu73.html new file mode 100644 index 00000000..cdbfdbba --- /dev/null +++ b/docs/html/userhtmlsu73.html @@ -0,0 +1,61 @@ + + +psb_set_errverbosity — Sets the verbosity of error messages + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu74.html b/docs/html/userhtmlsu74.html new file mode 100644 index 00000000..13437ecd --- /dev/null +++ b/docs/html/userhtmlsu74.html @@ -0,0 +1,63 @@ + + +psb_set_erraction — Set the type of action to be taken upon error condition + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu75.html b/docs/html/userhtmlsu75.html new file mode 100644 index 00000000..8666457b --- /dev/null +++ b/docs/html/userhtmlsu75.html @@ -0,0 +1,110 @@ + + + hb_read — Read a sparse matrix from a file in the Harwell–Boeing +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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu76.html b/docs/html/userhtmlsu76.html new file mode 100644 index 00000000..ec0a91bc --- /dev/null +++ b/docs/html/userhtmlsu76.html @@ -0,0 +1,121 @@ + + +hb_write — Write a sparse matrix to a file in the Harwell–Boeing format + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu77.html b/docs/html/userhtmlsu77.html new file mode 100644 index 00000000..26698973 --- /dev/null +++ b/docs/html/userhtmlsu77.html @@ -0,0 +1,94 @@ + + +mm_mat_read — Read a sparse matrix from a file in the MatrixMarket +format + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu78.html b/docs/html/userhtmlsu78.html new file mode 100644 index 00000000..fc4e6a42 --- /dev/null +++ b/docs/html/userhtmlsu78.html @@ -0,0 +1,93 @@ + + +mm_array_read — Read a dense array from a file in the MatrixMarket +format + + + + + + + +

+

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; 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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu79.html b/docs/html/userhtmlsu79.html new file mode 100644 index 00000000..6cbe4a5f --- /dev/null +++ b/docs/html/userhtmlsu79.html @@ -0,0 +1,105 @@ + + +mm_mat_write — Write a sparse matrix to a file in the MatrixMarket +format + + + + + + + +

+

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.
+ + + + + + + + + + +

+ diff --git a/docs/html/userhtmlsu8.html b/docs/html/userhtmlsu8.html new file mode 100644 index 00000000..61ac55f0 --- /dev/null +++ b/docs/html/userhtmlsu8.html @@ -0,0 +1,71 @@ + + +Preconditioner data structure + + + + + + + +

+

3.4 Preconditioner data structure

+

Our base library offers support for simple well known preconditioners like Diagonal +Scaling or Block Jacobi with incomplete factorization ILU(0). +

A preconditioner is held in the psb_prec_type data structure reported in +figure 6. The psb_prec_type data type may contain a simple preconditioning matrix +with the associated communication descriptor.The internal preconditioner is +allocated appropriately with the dynamic type corresponding to the desired +preconditioner.


+ + + + + + + +
+

+


  type psb_Tprec_type + 
    class(psb_T_base_prec_type), allocatable :: prec + 
  end type psb_Tprec_type + 
+
+

+
Figure 6: The PSBLAS defined data type that contains a preconditioner.
+ + + +


+ + + + +

+ diff --git a/docs/html/userhtmlsu80.html b/docs/html/userhtmlsu80.html new file mode 100644 index 00000000..df5ec3ce --- /dev/null +++ b/docs/html/userhtmlsu80.html @@ -0,0 +1,88 @@ + + +mm_array_write — Write a dense array from a file in the MatrixMarket +format + + + + + + + +

+

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

+ +
call mm_array_write(b, 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; will be written..  +
+filename
The name of the file to be written.
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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu81.html b/docs/html/userhtmlsu81.html new file mode 100644 index 00000000..5a33eead --- /dev/null +++ b/docs/html/userhtmlsu81.html @@ -0,0 +1,125 @@ + + +init — Initialize 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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu82.html b/docs/html/userhtmlsu82.html new file mode 100644 index 00000000..853608ee --- /dev/null +++ b/docs/html/userhtmlsu82.html @@ -0,0 +1,186 @@ + + +build — Builds a preconditioner + + + + + + + +

+

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. + + + + + + +

+

+ diff --git a/docs/html/userhtmlsu83.html b/docs/html/userhtmlsu83.html new file mode 100644 index 00000000..24fe50fe --- /dev/null +++ b/docs/html/userhtmlsu83.html @@ -0,0 +1,149 @@ + + +apply — Preconditioner application routine + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu84.html b/docs/html/userhtmlsu84.html new file mode 100644 index 00000000..c597c012 --- /dev/null +++ b/docs/html/userhtmlsu84.html @@ -0,0 +1,91 @@ + + +descr — Prints a description of current preconditioner + + + + + + + +

+

10.4 descr — Prints a description of current preconditioner

+ + + +
+call prec%descr() + 
call prec%descr(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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu85.html b/docs/html/userhtmlsu85.html new file mode 100644 index 00000000..9e95b63f --- /dev/null +++ b/docs/html/userhtmlsu85.html @@ -0,0 +1,69 @@ + + +clone — clone current preconditioner + + + + + + + +

+

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.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu86.html b/docs/html/userhtmlsu86.html new file mode 100644 index 00000000..77057722 --- /dev/null +++ b/docs/html/userhtmlsu86.html @@ -0,0 +1,94 @@ + + +free — Free a preconditioner + + + + + + + +

+

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. + + + + + + +

+

+ diff --git a/docs/html/userhtmlsu87.html b/docs/html/userhtmlsu87.html new file mode 100644 index 00000000..e1206e0c --- /dev/null +++ b/docs/html/userhtmlsu87.html @@ -0,0 +1,357 @@ + + +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 +
+ err = -----∥ri∥------< eps
+      (∥A ∥∥xi∥ + ∥b∥)
+
+

+

+2
Relative residual in the 2-norm; the iteration is stopped when +
+ err = ∥ri∥-< eps
+      ∥b∥2
+
+

+

+3
Relative residual reduction in the 2-norm; the iteration is stopped when +
+ err = -∥ri∥-< eps
+     ∥r0∥2
+
+

+

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. + +

call psb_krylov(method,a,prec,b,x,eps,desc_a,info,& 
     & itmax,iter,err,itrace,irst,istop,cond) + +
+

+ + + +

+Type:
Synchronous. +
+On Entry
+
+method
a string that defines the iterative method to be used. Supported values + are: +
+ CG:
the Conjugate Gradient method; +
+ CGS:
the Conjugate Gradient Stabilized method; +
+ GCR:
the Generalized Conjugate Residual method; +
+ FCG:
the Flexible Conjugate Gradient method5 ; +
+ BICG:
the Bi-Conjugate Gradient method; +
+ BICGSTAB:
the Bi-Conjugate Gradient Stabilized method; +
+ BICGSTABL:
the Bi-Conjugate Gradient Stabilized method with + restarting; +
+ RGMRES:
the Generalized Minimal Residual method with restarting.
+
+a
the local portion of global sparse matrix A.
Scope: local
Type: required
Intent: in.
Specified as: a structured data of type psb_Tspmat_type. +
+prec
The data structure containing the preconditioner.
Scope: local
Type: required
Intent: in.
Specified as: a structured data of type psb_prec_type. +
+b
The RHS vector.
Scope: local
Type: required
Intent: in.
Specified as: a rank one array or an object of type psb_T_vect_type. + + + +
+x
The initial guess.
Scope: local
Type: required
Intent: inout.
Specified as: a rank one array or an object of type psb_T_vect_type. +
+eps
The stopping tolerance.
Scope: global
Type: required
Intent: in.
Specified as: a real number. +
+desc_a
contains data structures for communications.
Scope: local
Type: required
Intent: in.
Specified as: a structured data of type psb_desc_type. +
+itmax
The maximum number of iterations to perform.
Scope: global
Type: optional
Intent: in.
Default: itmax = 1000.
Specified as: an integer variable itmax 1. +
+itrace
If > 0 print out an informational message about convergence every itrace + iterations. If = 0 print a message in case of convergence failure.
Scope: global
Type: optional
Intent: in.
Default: itrace = -1.
+
+irst
An integer specifying the restart parameter.
Scope: global
Type: optional.
Intent: in.
Values: irst > 0. This is employed for the BiCGSTABL or RGMRES methods, + otherwise it is ignored. +
+istop
An integer specifying the stopping criterion.
Scope: global
Type: optional.
Intent: in.
Values: 1: use the normwise backward error, 2: use the scaled 2-norm + + + + of the residual, 3: use the residual reduction in the 2-norm. Default: + 2. +
+On Return
+
+x
The computed solution.
Scope: local
Type: required
Intent: inout.
Specified as: a rank one array or an object of type psb_T_vect_type. +
+iter
The number of iterations performed.
Scope: global
Type: optional
Intent: out.
Returned as: an integer variable. +
+err
The convergence estimate on exit.
Scope: global
Type: optional
Intent: out.
Returned as: a real number. +
+cond
An estimate of the condition number of matrix A; only available with the CG + method on real data.
Scope: global
Type: optional
Intent: out.
Returned as: a real number. A correct result will be greater than or + equal to one; if specified for non-real data, or an error occurred, zero is + returned. +
+info
Error code.
Scope: local
Type: required
Intent: out.
An integer value; 0 means no error has been detected.
+ + + + + + + +

+ diff --git a/docs/html/userhtmlsu9.html b/docs/html/userhtmlsu9.html new file mode 100644 index 00000000..c0088f5a --- /dev/null +++ b/docs/html/userhtmlsu9.html @@ -0,0 +1,79 @@ + + +Heap data structure + + + + + + + +

+

3.5 Heap data structure

+

Among the tools routines of sec. 6, we have a number of sorting utilities; the heap +sort is implemented in terms of heaps having the following signatures: +

+psb_T_heap
: a heap containing elements of type T, where T can be i,s,c,d,z + for integer, real and complex data; +
+psb_T_idx_heap
: a heap containing elements of type T, as above, together + with an integer index.
+

Given a heap object, the following methods are defined on it: +

+init
Initialize memory; also choose ascending or descending order; +
+howmany
Current heap occupancy; +
+insert
Add an item (or an item and its index); +
+get_first
Remove and return the first element; +
+dump
Print on file; +
+free
Release memory.
+

These objects are used in MLD2P4 to implement the factorization algorithms. + + + + + + +

+

+ diff --git a/docs/src/figures/points.png b/docs/src/figures/points.png new file mode 100644 index 0000000000000000000000000000000000000000..531c538e41347a4fb1737d5bd4e4c85feabca5b7 GIT binary patch literal 6317 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 literal 0 HcmV?d00001 diff --git a/docs/src/figures/try8x8.png b/docs/src/figures/try8x8.png new file mode 100644 index 0000000000000000000000000000000000000000..931bd49da5a4f834a489937c3bd632e6bca167db GIT binary patch literal 6081 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 MjVugl`aj400|i@ORsaA1 literal 0 HcmV?d00001 diff --git a/docs/src/figures/try8x8_ov.png b/docs/src/figures/try8x8_ov.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd2eb0f16d92156bc61b552cb2c052e2026abf4 GIT binary patch literal 6936 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