From b0e6f32827a747a11ec187acbb788c7123010013 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Sat, 11 Feb 2012 11:57:43 +0000 Subject: [PATCH] psblas3: base/modules/Makefile base/modules/psb_gen_block_map_mod.f90 base/modules/psb_hash_map_mod.f90 docs/html/footnode.html docs/html/img1.png docs/html/img10.png docs/html/img100.png docs/html/img101.png docs/html/img102.png docs/html/img103.png docs/html/img104.png docs/html/img105.png docs/html/img106.png docs/html/img107.png docs/html/img108.png docs/html/img109.png docs/html/img11.png docs/html/img110.png docs/html/img111.png docs/html/img112.png docs/html/img113.png docs/html/img114.png docs/html/img115.png docs/html/img116.png docs/html/img117.png docs/html/img118.png docs/html/img119.png docs/html/img12.png docs/html/img120.png docs/html/img121.png docs/html/img122.png docs/html/img123.png docs/html/img124.png docs/html/img125.png docs/html/img126.png docs/html/img127.png docs/html/img128.png docs/html/img129.png docs/html/img13.png docs/html/img130.png docs/html/img131.png docs/html/img132.png docs/html/img133.png docs/html/img134.png docs/html/img135.png docs/html/img136.png docs/html/img137.png docs/html/img138.png docs/html/img139.png docs/html/img14.png docs/html/img140.png docs/html/img141.png docs/html/img142.png docs/html/img143.png docs/html/img144.png docs/html/img145.png docs/html/img146.png docs/html/img147.png docs/html/img148.png docs/html/img15.png docs/html/img16.png docs/html/img17.png docs/html/img18.png docs/html/img2.png docs/html/img20.png docs/html/img22.png docs/html/img23.png docs/html/img24.png docs/html/img25.png docs/html/img26.png docs/html/img27.png docs/html/img28.png docs/html/img29.png docs/html/img3.png docs/html/img30.png docs/html/img31.png docs/html/img32.png docs/html/img33.png docs/html/img34.png docs/html/img35.png docs/html/img36.png docs/html/img37.png docs/html/img38.png docs/html/img39.png docs/html/img4.png docs/html/img40.png docs/html/img41.png docs/html/img42.png docs/html/img43.png docs/html/img44.png docs/html/img45.png docs/html/img46.png docs/html/img47.png docs/html/img48.png docs/html/img49.png docs/html/img5.png docs/html/img50.png docs/html/img51.png docs/html/img52.png docs/html/img53.png docs/html/img54.png docs/html/img55.png docs/html/img56.png docs/html/img57.png docs/html/img58.png docs/html/img59.png docs/html/img6.png docs/html/img60.png docs/html/img61.png docs/html/img62.png docs/html/img63.png docs/html/img64.png docs/html/img65.png docs/html/img66.png docs/html/img67.png docs/html/img68.png docs/html/img69.png docs/html/img7.png docs/html/img70.png docs/html/img71.png docs/html/img72.png docs/html/img73.png docs/html/img74.png docs/html/img75.png docs/html/img76.png docs/html/img77.png docs/html/img78.png docs/html/img79.png docs/html/img8.png docs/html/img80.png docs/html/img81.png docs/html/img82.png docs/html/img83.png docs/html/img84.png docs/html/img85.png docs/html/img86.png docs/html/img87.png docs/html/img88.png docs/html/img89.png docs/html/img9.png docs/html/img90.png docs/html/img91.png docs/html/img92.png docs/html/img93.png docs/html/img94.png docs/html/img95.png docs/html/img96.png docs/html/img97.png docs/html/img98.png docs/html/img99.png docs/html/index.html docs/html/node1.html docs/html/node10.html docs/html/node100.html docs/html/node101.html docs/html/node102.html docs/html/node103.html docs/html/node104.html docs/html/node105.html docs/html/node106.html docs/html/node107.html docs/html/node108.html docs/html/node109.html docs/html/node11.html docs/html/node110.html docs/html/node111.html docs/html/node112.html docs/html/node113.html docs/html/node114.html docs/html/node115.html docs/html/node116.html docs/html/node117.html docs/html/node118.html docs/html/node119.html docs/html/node12.html docs/html/node13.html docs/html/node14.html docs/html/node15.html docs/html/node16.html docs/html/node17.html docs/html/node18.html docs/html/node19.html docs/html/node2.html docs/html/node20.html docs/html/node21.html docs/html/node22.html docs/html/node23.html docs/html/node24.html docs/html/node25.html docs/html/node26.html docs/html/node27.html docs/html/node28.html docs/html/node29.html docs/html/node3.html docs/html/node30.html docs/html/node31.html docs/html/node32.html docs/html/node33.html docs/html/node34.html docs/html/node35.html docs/html/node36.html docs/html/node37.html docs/html/node38.html docs/html/node39.html docs/html/node4.html docs/html/node40.html docs/html/node41.html docs/html/node42.html docs/html/node43.html docs/html/node44.html docs/html/node45.html docs/html/node46.html docs/html/node47.html docs/html/node48.html docs/html/node49.html docs/html/node5.html docs/html/node50.html docs/html/node51.html docs/html/node52.html docs/html/node53.html docs/html/node54.html docs/html/node55.html docs/html/node56.html docs/html/node57.html docs/html/node58.html docs/html/node59.html docs/html/node6.html docs/html/node60.html docs/html/node61.html docs/html/node62.html docs/html/node63.html docs/html/node64.html docs/html/node65.html docs/html/node66.html docs/html/node67.html docs/html/node68.html docs/html/node69.html docs/html/node7.html docs/html/node70.html docs/html/node71.html docs/html/node72.html docs/html/node73.html docs/html/node74.html docs/html/node75.html docs/html/node76.html docs/html/node77.html docs/html/node78.html docs/html/node79.html docs/html/node8.html docs/html/node80.html docs/html/node81.html docs/html/node82.html docs/html/node83.html docs/html/node84.html docs/html/node85.html docs/html/node86.html docs/html/node87.html docs/html/node88.html docs/html/node89.html docs/html/node9.html docs/html/node90.html docs/html/node91.html docs/html/node92.html docs/html/node93.html docs/html/node94.html docs/html/node95.html docs/html/node96.html docs/html/node97.html docs/html/node98.html docs/html/node99.html docs/html/userhtml.html docs/psblas-3.0.pdf docs/src/biblio.tex docs/src/datastruct.tex docs/src/intro.tex test/fileread/df_sample.f90 test/fileread/runs/dfs.inp test/pargen/ppde.f90 test/pargen/spde.f90 1. Worked on documentation. 2. Fixed performance problem with gen_block_map: changed to use a hash internally. 3. Changed ppde to implement a convection-diffusion problem with centered differences. --- base/modules/Makefile | 1 + base/modules/psb_gen_block_map_mod.f90 | 69 +- base/modules/psb_hash_map_mod.f90 | 1930 ++-- docs/html/footnode.html | 10 +- docs/html/img1.png | Bin 210 -> 200 bytes docs/html/img10.png | Bin 446 -> 401 bytes docs/html/img100.png | Bin 233 -> 260 bytes docs/html/img101.png | Bin 358 -> 188 bytes docs/html/img102.png | Bin 277 -> 143 bytes docs/html/img103.png | Bin 200 -> 257 bytes docs/html/img104.png | Bin 150 -> 379 bytes docs/html/img105.png | Bin 273 -> 263 bytes docs/html/img106.png | Bin 390 -> 249 bytes docs/html/img107.png | Bin 266 -> 264 bytes docs/html/img108.png | Bin 273 -> 399 bytes docs/html/img109.png | Bin 284 -> 208 bytes docs/html/img11.png | Bin 562 -> 529 bytes docs/html/img110.png | Bin 419 -> 260 bytes docs/html/img111.png | Bin 222 -> 793 bytes docs/html/img112.png | Bin 258 -> 406 bytes docs/html/img113.png | Bin 868 -> 426 bytes docs/html/img114.png | Bin 425 -> 345 bytes docs/html/img115.png | Bin 420 -> 321 bytes docs/html/img116.png | Bin 359 -> 840 bytes docs/html/img117.png | Bin 332 -> 341 bytes docs/html/img118.png | Bin 895 -> 505 bytes docs/html/img119.png | Bin 337 -> 405 bytes docs/html/img12.png | Bin 125 -> 125 bytes docs/html/img120.png | Bin 535 -> 271 bytes docs/html/img121.png | Bin 418 -> 542 bytes docs/html/img122.png | Bin 272 -> 541 bytes docs/html/img123.png | Bin 571 -> 335 bytes docs/html/img124.png | Bin 595 -> 229 bytes docs/html/img125.png | Bin 369 -> 525 bytes docs/html/img126.png | Bin 239 -> 579 bytes docs/html/img127.png | Bin 565 -> 581 bytes docs/html/img128.png | Bin 625 -> 215 bytes docs/html/img129.png | Bin 593 -> 584 bytes docs/html/img13.png | Bin 3495 -> 3161 bytes docs/html/img130.png | Bin 217 -> 736 bytes docs/html/img131.png | Bin 629 -> 272 bytes docs/html/img132.png | Bin 743 -> 521 bytes docs/html/img133.png | Bin 273 -> 270 bytes docs/html/img134.png | Bin 542 -> 561 bytes docs/html/img135.png | Bin 274 -> 247 bytes docs/html/img136.png | Bin 585 -> 0 bytes docs/html/img137.png | Bin 251 -> 0 bytes docs/html/img138.png | Bin 0 -> 372 bytes docs/html/img139.png | Bin 0 -> 433 bytes docs/html/img14.png | Bin 693 -> 650 bytes docs/html/img140.png | Bin 372 -> 915 bytes docs/html/img141.png | Bin 445 -> 673 bytes docs/html/img142.png | Bin 999 -> 219 bytes docs/html/img143.png | Bin 728 -> 429 bytes docs/html/img144.png | Bin 238 -> 477 bytes docs/html/img145.png | Bin 444 -> 410 bytes docs/html/img146.png | Bin 505 -> 352 bytes docs/html/img147.png | Bin 451 -> 387 bytes docs/html/img148.png | Bin 369 -> 287 bytes docs/html/img15.png | Bin 244 -> 230 bytes docs/html/img16.png | Bin 204 -> 196 bytes docs/html/img17.png | Bin 394 -> 370 bytes docs/html/img18.png | Bin 606 -> 539 bytes docs/html/img2.png | Bin 112 -> 3157 bytes docs/html/img20.png | Bin 7070 -> 6807 bytes docs/html/img22.png | Bin 543 -> 0 bytes docs/html/img23.png | Bin 799 -> 0 bytes docs/html/img24.png | Bin 642 -> 478 bytes docs/html/img25.png | Bin 0 -> 194 bytes docs/html/img26.png | Bin 506 -> 223 bytes docs/html/img27.png | Bin 193 -> 191 bytes docs/html/img28.png | Bin 224 -> 226 bytes docs/html/img29.png | Bin 203 -> 449 bytes docs/html/img3.png | Bin 3581 -> 3157 bytes docs/html/img30.png | Bin 224 -> 468 bytes docs/html/img31.png | Bin 467 -> 276 bytes docs/html/img32.png | Bin 477 -> 780 bytes docs/html/img33.png | Bin 275 -> 244 bytes docs/html/img34.png | Bin 710 -> 571 bytes docs/html/img35.png | Bin 257 -> 1078 bytes docs/html/img36.png | Bin 613 -> 309 bytes docs/html/img37.png | Bin 1042 -> 793 bytes docs/html/img38.png | Bin 322 -> 444 bytes docs/html/img39.png | Bin 803 -> 863 bytes docs/html/img4.png | Bin 195 -> 178 bytes docs/html/img40.png | Bin 488 -> 307 bytes docs/html/img41.png | Bin 866 -> 507 bytes docs/html/img42.png | Bin 329 -> 905 bytes docs/html/img43.png | Bin 527 -> 557 bytes docs/html/img44.png | Bin 923 -> 571 bytes docs/html/img45.png | Bin 566 -> 319 bytes docs/html/img46.png | Bin 577 -> 646 bytes docs/html/img47.png | Bin 340 -> 486 bytes docs/html/img48.png | Bin 654 -> 670 bytes docs/html/img49.png | Bin 517 -> 721 bytes docs/html/img5.png | Bin 207 -> 200 bytes docs/html/img50.png | Bin 706 -> 729 bytes docs/html/img51.png | Bin 747 -> 242 bytes docs/html/img52.png | Bin 761 -> 255 bytes docs/html/img53.png | Bin 241 -> 350 bytes docs/html/img54.png | Bin 266 -> 416 bytes docs/html/img55.png | Bin 308 -> 3612 bytes docs/html/img56.png | Bin 426 -> 199 bytes docs/html/img57.png | Bin 3433 -> 228 bytes docs/html/img58.png | Bin 207 -> 426 bytes docs/html/img59.png | Bin 225 -> 804 bytes docs/html/img6.png | Bin 401 -> 374 bytes docs/html/img60.png | Bin 444 -> 282 bytes docs/html/img61.png | Bin 821 -> 404 bytes docs/html/img62.png | Bin 297 -> 97 bytes docs/html/img63.png | Bin 423 -> 3613 bytes docs/html/img64.png | Bin 97 -> 364 bytes docs/html/img65.png | Bin 3291 -> 249 bytes docs/html/img66.png | Bin 361 -> 257 bytes docs/html/img67.png | Bin 264 -> 267 bytes docs/html/img68.png | Bin 253 -> 261 bytes docs/html/img69.png | Bin 263 -> 335 bytes docs/html/img7.png | Bin 207 -> 202 bytes docs/html/img70.png | Bin 266 -> 776 bytes docs/html/img71.png | Bin 338 -> 117 bytes docs/html/img72.png | Bin 775 -> 5395 bytes docs/html/img73.png | Bin 117 -> 793 bytes docs/html/img74.png | Bin 5341 -> 366 bytes docs/html/img75.png | Bin 785 -> 497 bytes docs/html/img76.png | Bin 393 -> 325 bytes docs/html/img77.png | Bin 522 -> 362 bytes docs/html/img78.png | Bin 345 -> 301 bytes docs/html/img79.png | Bin 363 -> 350 bytes docs/html/img8.png | Bin 241 -> 230 bytes docs/html/img80.png | Bin 321 -> 534 bytes docs/html/img81.png | Bin 378 -> 172 bytes docs/html/img82.png | Bin 560 -> 826 bytes docs/html/img83.png | Bin 195 -> 357 bytes docs/html/img84.png | Bin 843 -> 501 bytes docs/html/img85.png | Bin 374 -> 366 bytes docs/html/img86.png | Bin 511 -> 255 bytes docs/html/img87.png | Bin 370 -> 243 bytes docs/html/img88.png | Bin 273 -> 186 bytes docs/html/img89.png | Bin 273 -> 416 bytes docs/html/img9.png | Bin 246 -> 247 bytes docs/html/img90.png | Bin 203 -> 580 bytes docs/html/img91.png | Bin 442 -> 319 bytes docs/html/img92.png | Bin 604 -> 456 bytes docs/html/img93.png | Bin 341 -> 392 bytes docs/html/img94.png | Bin 481 -> 285 bytes docs/html/img95.png | Bin 397 -> 412 bytes docs/html/img96.png | Bin 300 -> 178 bytes docs/html/img97.png | Bin 424 -> 361 bytes docs/html/img98.png | Bin 184 -> 231 bytes docs/html/img99.png | Bin 385 -> 343 bytes docs/html/index.html | 351 +- docs/html/node1.html | 82 +- docs/html/node10.html | 66 +- docs/html/node100.html | 174 +- docs/html/node101.html | 112 +- docs/html/node102.html | 96 +- docs/html/node103.html | 110 +- docs/html/node104.html | 60 +- docs/html/node105.html | 56 +- docs/html/node106.html | 353 +- docs/html/node107.html | 242 +- docs/html/node108.html | 101 +- docs/html/node109.html | 102 +- docs/html/node11.html | 250 +- docs/html/node110.html | 114 +- docs/html/node111.html | 80 +- docs/html/node112.html | 395 +- docs/html/node113.html | 213 +- docs/html/node114.html | 157 +- docs/html/node115.html | 46 +- docs/html/node116.html | 38 +- docs/html/node117.html | 107 +- docs/html/node118.html | 91 +- docs/html/node119.html | 36 +- docs/html/node12.html | 87 +- docs/html/node13.html | 76 +- docs/html/node14.html | 97 +- docs/html/node15.html | 84 +- docs/html/node16.html | 65 +- docs/html/node17.html | 73 +- docs/html/node18.html | 88 +- docs/html/node19.html | 189 +- docs/html/node2.html | 58 +- docs/html/node20.html | 97 +- docs/html/node21.html | 54 +- docs/html/node22.html | 63 +- docs/html/node23.html | 57 +- docs/html/node24.html | 48 +- docs/html/node25.html | 61 +- docs/html/node26.html | 101 +- docs/html/node27.html | 246 +- docs/html/node28.html | 263 +- docs/html/node29.html | 298 +- docs/html/node3.html | 59 +- docs/html/node30.html | 222 +- docs/html/node31.html | 188 +- docs/html/node32.html | 219 +- docs/html/node33.html | 235 +- docs/html/node34.html | 212 +- docs/html/node35.html | 222 +- docs/html/node36.html | 196 +- docs/html/node37.html | 442 +- docs/html/node38.html | 383 +- docs/html/node39.html | 276 +- docs/html/node4.html | 44 +- docs/html/node40.html | 635 +- docs/html/node41.html | 719 +- docs/html/node42.html | 201 +- docs/html/node43.html | 236 +- docs/html/node44.html | 313 +- docs/html/node45.html | 466 +- docs/html/node46.html | 202 +- docs/html/node47.html | 179 +- docs/html/node48.html | 378 +- docs/html/node49.html | 422 +- docs/html/node5.html | 44 +- docs/html/node50.html | 196 +- docs/html/node51.html | 616 +- docs/html/node52.html | 757 +- docs/html/node53.html | 250 +- docs/html/node54.html | 214 +- docs/html/node55.html | 179 +- docs/html/node56.html | 384 +- docs/html/node57.html | 160 +- docs/html/node58.html | 70 +- docs/html/node59.html | 76 +- docs/html/node6.html | 44 +- docs/html/node60.html | 85 +- docs/html/node61.html | 169 +- docs/html/node62.html | 146 +- docs/html/node63.html | 188 +- docs/html/node64.html | 145 +- docs/html/node65.html | 77 +- docs/html/node66.html | 86 +- docs/html/node67.html | 106 +- docs/html/node68.html | 140 +- docs/html/node69.html | 207 +- docs/html/node7.html | 38 +- docs/html/node70.html | 89 +- docs/html/node71.html | 282 +- docs/html/node72.html | 234 +- docs/html/node73.html | 177 +- docs/html/node74.html | 140 +- docs/html/node75.html | 154 +- docs/html/node76.html | 84 +- docs/html/node77.html | 122 +- docs/html/node78.html | 96 +- docs/html/node79.html | 97 +- docs/html/node8.html | 177 +- docs/html/node80.html | 221 +- docs/html/node81.html | 136 +- docs/html/node82.html | 276 +- docs/html/node83.html | 197 +- docs/html/node84.html | 136 +- docs/html/node85.html | 144 +- docs/html/node86.html | 134 +- docs/html/node87.html | 146 +- docs/html/node88.html | 143 +- docs/html/node89.html | 183 +- docs/html/node9.html | 64 +- docs/html/node90.html | 84 +- docs/html/node91.html | 49 +- docs/html/node92.html | 127 +- docs/html/node93.html | 147 +- docs/html/node94.html | 179 +- docs/html/node95.html | 160 +- docs/html/node96.html | 165 +- docs/html/node97.html | 145 +- docs/html/node98.html | 170 +- docs/html/node99.html | 164 +- docs/html/userhtml.html | 351 +- docs/psblas-3.0.pdf | 13413 ++++++++++++----------- docs/src/biblio.tex | 7 + docs/src/datastruct.tex | 867 +- docs/src/intro.tex | 23 +- test/fileread/df_sample.f90 | 11 +- test/fileread/runs/dfs.inp | 4 +- test/pargen/ppde.f90 | 3 +- test/pargen/spde.f90 | 60 +- 279 files changed, 19012 insertions(+), 18922 deletions(-) diff --git a/base/modules/Makefile b/base/modules/Makefile index 717f4249..7b0137fc 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -93,6 +93,7 @@ psb_hash_map_mod.o psb_list_map_mod.o psb_repl_map_mod.o psb_gen_block_map_mod.o psb_glist_map_mod.o: psb_list_map_mod.o psb_hash_map_mod.o: psb_hash_mod.o psb_sort_mod.o psb_hash_mod.o: psb_realloc_mod.o psb_const_mod.o +psb_gen_block_map_mod.o: psb_hash_mod.o psb_linmap_mod.o: psb_s_linmap_mod.o psb_d_linmap_mod.o psb_c_linmap_mod.o psb_z_linmap_mod.o psb_s_linmap_mod.o: psb_base_linmap_mod.o psb_s_mat_mod.o psb_s_vect_mod.o psb_d_linmap_mod.o: psb_base_linmap_mod.o psb_d_mat_mod.o psb_d_vect_mod.o diff --git a/base/modules/psb_gen_block_map_mod.f90 b/base/modules/psb_gen_block_map_mod.f90 index bfb95dfc..6b5afd8d 100644 --- a/base/modules/psb_gen_block_map_mod.f90 +++ b/base/modules/psb_gen_block_map_mod.f90 @@ -49,11 +49,13 @@ module psb_gen_block_map_mod use psb_const_mod use psb_desc_const_mod use psb_indx_map_mod + use psb_hash_mod type, extends(psb_indx_map) :: psb_gen_block_map integer(psb_ipk_) :: min_glob_row = -1 integer(psb_ipk_) :: max_glob_row = -1 integer(psb_ipk_), allocatable :: loc_to_glob(:), srt_l2g(:,:), vnl(:) + type(psb_hash_type) :: hash contains procedure, pass(idxmap) :: gen_block_map_init => block_init @@ -106,14 +108,14 @@ contains & val = val + size(idxmap%srt_l2g)*psb_sizeof_int if (allocated(idxmap%vnl)) & & val = val + size(idxmap%vnl)*psb_sizeof_int - + val = val + psb_sizeof(idxmap%hash) end function block_sizeof subroutine block_free(idxmap) implicit none class(psb_gen_block_map), intent(inout) :: idxmap - + integer(psb_ipk_) :: info if (allocated(idxmap%loc_to_glob)) & & deallocate(idxmap%loc_to_glob) if (allocated(idxmap%srt_l2g)) & @@ -121,7 +123,7 @@ contains if (allocated(idxmap%srt_l2g)) & & deallocate(idxmap%vnl) - + call psb_free(idxmap%hash,info) call idxmap%psb_indx_map%free() end subroutine block_free @@ -283,7 +285,7 @@ contains integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: mask(:) logical, intent(in), optional :: owned - integer(psb_ipk_) :: i, nv, is + integer(psb_ipk_) :: i, nv, is, ip, lip integer(psb_ipk_) :: ictxt, iam, np logical :: owned_ @@ -329,9 +331,9 @@ contains idx(i) = idx(i) - idxmap%min_glob_row + 1 else if ((1<= idx(i)).and.(idx(i) <= idxmap%global_rows)& &.and.(.not.owned_)) then - nv = idxmap%local_cols-idxmap%local_rows - idx(i) = psb_issrch(idx(i),nv,idxmap%loc_to_glob) - if (idx(i) > 0) idx(i) = idx(i) + idxmap%local_rows + ip = idx(i) + call psb_hash_searchkey(ip,lip,idxmap%hash,info) + if (lip > 0) idx(i) = lip + idxmap%local_rows else idx(i) = -1 end if @@ -365,9 +367,9 @@ contains idx(i) = idx(i) - idxmap%min_glob_row + 1 else if ((1<= idx(i)).and.(idx(i) <= idxmap%global_rows)& &.and.(.not.owned_)) then - nv = idxmap%local_cols-idxmap%local_rows - idx(i) = psb_issrch(idx(i),nv,idxmap%loc_to_glob) - if (idx(i) > 0) idx(i) = idx(i) + idxmap%local_rows + ip = idx(i) + call psb_hash_searchkey(ip,lip,idxmap%hash,info) + if (lip > 0) idx(i) = lip + idxmap%local_rows else idx(i) = -1 end if @@ -447,6 +449,8 @@ contains integer(psb_ipk_), intent(out) :: info logical, intent(in), optional :: mask(:) integer(psb_ipk_) :: i, nv, is, ix + integer(psb_ipk_) :: ip, lip, nxt + info = 0 is = size(idx) @@ -473,20 +477,21 @@ contains idx(i) = idx(i) - idxmap%min_glob_row + 1 else if ((1<= idx(i)).and.(idx(i) <= idxmap%global_rows)) then nv = idxmap%local_cols-idxmap%local_rows - ix = psb_issrch(idx(i),nv,idxmap%loc_to_glob) - if (ix < 0) then - ix = idxmap%local_cols + 1 - call psb_ensure_size(ix,idxmap%loc_to_glob,info,addsz=500) + nxt = nv + 1 + ip = idx(i) + call psb_hash_searchinskey(ip,lip,nxt,idxmap%hash,info) + + if (lip == nxt) then + ! We have added one item + call psb_ensure_size(nxt,idxmap%loc_to_glob,info,addsz=500) if (info /= 0) then info = -4 return end if - idxmap%local_cols = ix - ix = ix - idxmap%local_rows - idxmap%loc_to_glob(ix) = idx(i) + idxmap%local_cols = nxt + idxmap%local_rows + idxmap%loc_to_glob(nxt) = idx(i) end if - ix = ix + idxmap%local_rows - idx(i) = ix + idx(i) = lip + idxmap%local_rows else idx(i) = -1 info = -1 @@ -502,20 +507,21 @@ contains idx(i) = idx(i) - idxmap%min_glob_row + 1 else if ((1<= idx(i)).and.(idx(i) <= idxmap%global_rows)) then nv = idxmap%local_cols-idxmap%local_rows - ix = psb_issrch(idx(i),nv,idxmap%loc_to_glob) - if (ix < 0) then - ix = idxmap%local_cols + 1 - call psb_ensure_size(ix,idxmap%loc_to_glob,info,addsz=500) + nxt = nv + 1 + ip = idx(i) + call psb_hash_searchinskey(ip,lip,nxt,idxmap%hash,info) + + if (lip == nxt) then + ! We have added one item + call psb_ensure_size(nxt,idxmap%loc_to_glob,info,addsz=500) if (info /= 0) then info = -4 return end if - idxmap%local_cols = ix - ix = ix - idxmap%local_rows - idxmap%loc_to_glob(ix) = idx(i) + idxmap%local_cols = nxt + idxmap%local_rows + idxmap%loc_to_glob(nxt) = idx(i) end if - ix = ix + idxmap%local_rows - idx(i) = ix + idx(i) = lip + idxmap%local_rows else idx(i) = -1 info = -1 @@ -629,9 +635,9 @@ contains info = -2 return end if + call psb_hash_init(nl,idxmap%hash,info) call idxmap%set_state(psb_desc_bld_) - end subroutine block_init @@ -659,8 +665,8 @@ contains call psb_msort(idxmap%srt_l2g(:,1),& & ix=idxmap%srt_l2g(:,2),dir=psb_sort_up_) + call psb_free(idxmap%hash,info) call idxmap%set_state(psb_desc_asb_) - end subroutine block_asb function block_get_fmt() result(res) @@ -710,6 +716,9 @@ contains & call psb_safe_ab_cpy(idxmap%vnl,outmap%vnl,info) if (info == psb_success_)& & call psb_safe_ab_cpy(idxmap%srt_l2g,outmap%srt_l2g,info) + if (info == psb_success_)& + & call psb_hash_copy(idxmap%hash,outmap%hash,info) + class default ! This should be impossible info = -1 diff --git a/base/modules/psb_hash_map_mod.f90 b/base/modules/psb_hash_map_mod.f90 index 03ced807..1c4c7f13 100644 --- a/base/modules/psb_hash_map_mod.f90 +++ b/base/modules/psb_hash_map_mod.f90 @@ -57,166 +57,178 @@ module psb_hash_map_mod use psb_desc_const_mod use psb_indx_map_mod use psb_hash_mod - + type, extends(psb_indx_map) :: psb_hash_map - integer(psb_ipk_) :: hashvsize, hashvmask - integer(psb_ipk_), allocatable :: hashv(:), glb_lc(:,:), loc_to_glob(:) - type(psb_hash_type), allocatable :: hash + integer(psb_ipk_) :: hashvsize, hashvmask + integer(psb_ipk_), allocatable :: hashv(:), glb_lc(:,:), loc_to_glob(:) + type(psb_hash_type) :: hash -contains + contains - procedure, pass(idxmap) :: init_vl => hash_init_vl - procedure, pass(idxmap) :: hash_map_init => hash_init_vg + procedure, pass(idxmap) :: init_vl => hash_init_vl + procedure, pass(idxmap) :: hash_map_init => hash_init_vg - procedure, pass(idxmap) :: sizeof => hash_sizeof - procedure, pass(idxmap) :: asb => hash_asb - procedure, pass(idxmap) :: free => hash_free - procedure, pass(idxmap) :: clone => hash_clone - procedure, nopass :: get_fmt => hash_get_fmt + procedure, pass(idxmap) :: sizeof => hash_sizeof + procedure, pass(idxmap) :: asb => hash_asb + procedure, pass(idxmap) :: free => hash_free + procedure, pass(idxmap) :: clone => hash_clone + procedure, nopass :: get_fmt => hash_get_fmt - procedure, nopass :: row_extendable => hash_row_extendable + procedure, nopass :: row_extendable => hash_row_extendable - procedure, pass(idxmap) :: l2gs1 => hash_l2gs1 - procedure, pass(idxmap) :: l2gs2 => hash_l2gs2 - procedure, pass(idxmap) :: l2gv1 => hash_l2gv1 - procedure, pass(idxmap) :: l2gv2 => hash_l2gv2 + procedure, pass(idxmap) :: l2gs1 => hash_l2gs1 + procedure, pass(idxmap) :: l2gs2 => hash_l2gs2 + procedure, pass(idxmap) :: l2gv1 => hash_l2gv1 + procedure, pass(idxmap) :: l2gv2 => hash_l2gv2 - procedure, pass(idxmap) :: g2ls1 => hash_g2ls1 - procedure, pass(idxmap) :: g2ls2 => hash_g2ls2 - procedure, pass(idxmap) :: g2lv1 => hash_g2lv1 - procedure, pass(idxmap) :: g2lv2 => hash_g2lv2 + procedure, pass(idxmap) :: g2ls1 => hash_g2ls1 + procedure, pass(idxmap) :: g2ls2 => hash_g2ls2 + procedure, pass(idxmap) :: g2lv1 => hash_g2lv1 + procedure, pass(idxmap) :: g2lv2 => hash_g2lv2 - procedure, pass(idxmap) :: g2ls1_ins => hash_g2ls1_ins - procedure, pass(idxmap) :: g2ls2_ins => hash_g2ls2_ins - procedure, pass(idxmap) :: g2lv1_ins => hash_g2lv1_ins - procedure, pass(idxmap) :: g2lv2_ins => hash_g2lv2_ins + procedure, pass(idxmap) :: g2ls1_ins => hash_g2ls1_ins + procedure, pass(idxmap) :: g2ls2_ins => hash_g2ls2_ins + procedure, pass(idxmap) :: g2lv1_ins => hash_g2lv1_ins + procedure, pass(idxmap) :: g2lv2_ins => hash_g2lv2_ins - procedure, pass(idxmap) :: bld_g2l_map => hash_bld_g2l_map + procedure, pass(idxmap) :: hash_cpy + generic, public :: assignment(=) => hash_cpy + procedure, pass(idxmap) :: bld_g2l_map => hash_bld_g2l_map -end type psb_hash_map + end type psb_hash_map -private :: hash_init_vl, hash_init_vg, hash_sizeof, hash_asb, & - & hash_free, hash_get_fmt, hash_l2gs1, hash_l2gs2, & - & hash_l2gv1, hash_l2gv2, hash_g2ls1, hash_g2ls2, & - & hash_g2lv1, hash_g2lv2, hash_g2ls1_ins, hash_g2ls2_ins, & - & hash_g2lv1_ins, hash_g2lv2_ins, hash_init_vlu, & - & hash_bld_g2l_map, hash_inner_cnvs1, hash_inner_cnvs2,& - & hash_inner_cnv1, hash_inner_cnv2, hash_row_extendable + private :: hash_init_vl, hash_init_vg, hash_sizeof, hash_asb, & + & hash_free, hash_get_fmt, hash_l2gs1, hash_l2gs2, & + & hash_l2gv1, hash_l2gv2, hash_g2ls1, hash_g2ls2, & + & hash_g2lv1, hash_g2lv2, hash_g2ls1_ins, hash_g2ls2_ins, & + & hash_g2lv1_ins, hash_g2lv2_ins, hash_init_vlu, & + & hash_bld_g2l_map, hash_inner_cnvs1, hash_inner_cnvs2,& + & hash_inner_cnv1, hash_inner_cnv2, hash_row_extendable -interface hash_inner_cnv - module procedure hash_inner_cnvs1, hash_inner_cnvs2,& - & hash_inner_cnv1, hash_inner_cnv2 -end interface hash_inner_cnv -private :: hash_inner_cnv + interface hash_inner_cnv + module procedure hash_inner_cnvs1, hash_inner_cnvs2,& + & hash_inner_cnv1, hash_inner_cnv2 + end interface hash_inner_cnv + private :: hash_inner_cnv contains -function hash_row_extendable() result(val) - implicit none - logical :: val - val = .true. -end function hash_row_extendable + function hash_row_extendable() result(val) + implicit none + logical :: val + val = .true. + end function hash_row_extendable -function hash_sizeof(idxmap) result(val) - implicit none - class(psb_hash_map), intent(in) :: idxmap - integer(psb_long_int_k_) :: val + function hash_sizeof(idxmap) result(val) + implicit none + class(psb_hash_map), intent(in) :: idxmap + integer(psb_long_int_k_) :: val - val = idxmap%psb_indx_map%sizeof() - val = val + 2 * psb_sizeof_int - if (allocated(idxmap%hashv)) & - & val = val + size(idxmap%hashv)*psb_sizeof_int - if (allocated(idxmap%glb_lc)) & - & val = val + size(idxmap%glb_lc)*psb_sizeof_int - if (allocated(idxmap%hash)) & - & val = val + psb_sizeof(idxmap%hash) + val = idxmap%psb_indx_map%sizeof() + val = val + 2 * psb_sizeof_int + if (allocated(idxmap%hashv)) & + & val = val + size(idxmap%hashv)*psb_sizeof_int + if (allocated(idxmap%glb_lc)) & + & val = val + size(idxmap%glb_lc)*psb_sizeof_int + val = val + psb_sizeof(idxmap%hash) -end function hash_sizeof + end function hash_sizeof -subroutine hash_free(idxmap) - implicit none - class(psb_hash_map), intent(inout) :: idxmap - integer(psb_ipk_) :: info + subroutine hash_free(idxmap) + implicit none + class(psb_hash_map), intent(inout) :: idxmap + integer(psb_ipk_) :: info - if (allocated(idxmap%hashv)) & - & deallocate(idxmap%hashv) - if (allocated(idxmap%glb_lc)) & - & deallocate(idxmap%glb_lc) + if (allocated(idxmap%hashv)) & + & deallocate(idxmap%hashv) + if (allocated(idxmap%glb_lc)) & + & deallocate(idxmap%glb_lc) - if (allocated(idxmap%hash)) then call psb_free(idxmap%hash,info) - deallocate(idxmap%hash) - end if - - call idxmap%psb_indx_map%free() - -end subroutine hash_free - - -subroutine hash_l2gs1(idx,idxmap,info,mask,owned) - implicit none - class(psb_hash_map), intent(in) :: idxmap - integer(psb_ipk_), intent(inout) :: idx - integer(psb_ipk_), intent(out) :: info - logical, intent(in), optional :: mask - logical, intent(in), optional :: owned - integer(psb_ipk_) :: idxv(1) - info = 0 - if (present(mask)) then - if (.not.mask) return - end if - - idxv(1) = idx - call idxmap%l2g(idxv,info,owned=owned) - idx = idxv(1) - -end subroutine hash_l2gs1 - -subroutine hash_l2gs2(idxin,idxout,idxmap,info,mask,owned) - implicit none - class(psb_hash_map), intent(in) :: idxmap - integer(psb_ipk_), intent(in) :: idxin - integer(psb_ipk_), intent(out) :: idxout - integer(psb_ipk_), intent(out) :: info - logical, intent(in), optional :: mask - logical, intent(in), optional :: owned - - idxout = idxin - call idxmap%l2g(idxout,info,mask,owned) - -end subroutine hash_l2gs2 - - -subroutine hash_l2gv1(idx,idxmap,info,mask,owned) - implicit none - class(psb_hash_map), intent(in) :: idxmap - integer(psb_ipk_), intent(inout) :: idx(:) - integer(psb_ipk_), intent(out) :: info - logical, intent(in), optional :: mask(:) - logical, intent(in), optional :: owned - integer(psb_ipk_) :: i - logical :: owned_ - info = 0 - - if (present(mask)) then - if (size(mask) < size(idx)) then - info = -1 - return + + call idxmap%psb_indx_map%free() + + end subroutine hash_free + + + subroutine hash_l2gs1(idx,idxmap,info,mask,owned) + implicit none + class(psb_hash_map), intent(in) :: idxmap + integer(psb_ipk_), intent(inout) :: idx + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: mask + logical, intent(in), optional :: owned + integer(psb_ipk_) :: idxv(1) + info = 0 + if (present(mask)) then + if (.not.mask) return + end if + + idxv(1) = idx + call idxmap%l2g(idxv,info,owned=owned) + idx = idxv(1) + + end subroutine hash_l2gs1 + + subroutine hash_l2gs2(idxin,idxout,idxmap,info,mask,owned) + implicit none + class(psb_hash_map), intent(in) :: idxmap + integer(psb_ipk_), intent(in) :: idxin + integer(psb_ipk_), intent(out) :: idxout + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: mask + logical, intent(in), optional :: owned + + idxout = idxin + call idxmap%l2g(idxout,info,mask,owned) + + end subroutine hash_l2gs2 + + + subroutine hash_l2gv1(idx,idxmap,info,mask,owned) + implicit none + class(psb_hash_map), intent(in) :: idxmap + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: mask(:) + logical, intent(in), optional :: owned + integer(psb_ipk_) :: i + logical :: owned_ + info = 0 + + if (present(mask)) then + if (size(mask) < size(idx)) then + info = -1 + return + end if + end if + if (present(owned)) then + owned_ = owned + else + owned_ = .false. end if - end if - if (present(owned)) then - owned_ = owned - else - owned_ = .false. - end if - if (present(mask)) then + if (present(mask)) then - do i=1, size(idx) - if (mask(i)) then + do i=1, size(idx) + if (mask(i)) then + if ((1<=idx(i)).and.(idx(i) <= idxmap%local_rows)) then + idx(i) = idxmap%loc_to_glob(idx(i)) + else if ((idxmap%local_rows < idx(i)).and.(idx(i) <= idxmap%local_cols)& + & .and.(.not.owned_)) then + idx(i) = idxmap%loc_to_glob(idx(i)) + else + idx(i) = -1 + end if + end if + end do + + else if (.not.present(mask)) then + + do i=1, size(idx) if ((1<=idx(i)).and.(idx(i) <= idxmap%local_rows)) then idx(i) = idxmap%loc_to_glob(idx(i)) else if ((idxmap%local_rows < idx(i)).and.(idx(i) <= idxmap%local_cols)& @@ -225,133 +237,155 @@ subroutine hash_l2gv1(idx,idxmap,info,mask,owned) else idx(i) = -1 end if - end if - end do + end do - else if (.not.present(mask)) then + end if - do i=1, size(idx) - if ((1<=idx(i)).and.(idx(i) <= idxmap%local_rows)) then - idx(i) = idxmap%loc_to_glob(idx(i)) - else if ((idxmap%local_rows < idx(i)).and.(idx(i) <= idxmap%local_cols)& - & .and.(.not.owned_)) then - idx(i) = idxmap%loc_to_glob(idx(i)) - else - idx(i) = -1 + end subroutine hash_l2gv1 + + subroutine hash_l2gv2(idxin,idxout,idxmap,info,mask,owned) + implicit none + class(psb_hash_map), intent(in) :: idxmap + integer(psb_ipk_), intent(in) :: idxin(:) + integer(psb_ipk_), intent(out) :: idxout(:) + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: mask(:) + logical, intent(in), optional :: owned + integer(psb_ipk_) :: is, im + + is = size(idxin) + im = min(is,size(idxout)) + idxout(1:im) = idxin(1:im) + call idxmap%l2g(idxout(1:im),info,mask,owned) + if (is > im) then + write(0,*) 'l2gv2 err -3' + info = -3 + end if + + end subroutine hash_l2gv2 + + + subroutine hash_g2ls1(idx,idxmap,info,mask,owned) + implicit none + class(psb_hash_map), intent(in) :: idxmap + integer(psb_ipk_), intent(inout) :: idx + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: mask + logical, intent(in), optional :: owned + integer(psb_ipk_) :: idxv(1) + info = 0 + + if (present(mask)) then + if (.not.mask) return + end if + + idxv(1) = idx + call idxmap%g2l(idxv,info,owned=owned) + idx = idxv(1) + + end subroutine hash_g2ls1 + + subroutine hash_g2ls2(idxin,idxout,idxmap,info,mask,owned) + implicit none + class(psb_hash_map), intent(in) :: idxmap + integer(psb_ipk_), intent(in) :: idxin + integer(psb_ipk_), intent(out) :: idxout + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: mask + logical, intent(in), optional :: owned + + idxout = idxin + call idxmap%g2l(idxout,info,mask,owned) + + end subroutine hash_g2ls2 + + + subroutine hash_g2lv1(idx,idxmap,info,mask,owned) + use psb_penv_mod + use psb_sort_mod + implicit none + class(psb_hash_map), intent(in) :: idxmap + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: mask(:) + logical, intent(in), optional :: owned + integer(psb_ipk_) :: i, is, mglob, ip, lip, nrow, ncol, nrm + integer(psb_ipk_) :: ictxt, iam, np + logical :: owned_ + + info = 0 + ictxt = idxmap%get_ctxt() + call psb_info(ictxt,iam,np) + + if (present(mask)) then + if (size(mask) < size(idx)) then + info = -1 + return end if - end do + end if + if (present(owned)) then + owned_ = owned + else + owned_ = .false. + end if - end if - -end subroutine hash_l2gv1 - -subroutine hash_l2gv2(idxin,idxout,idxmap,info,mask,owned) - implicit none - class(psb_hash_map), intent(in) :: idxmap - integer(psb_ipk_), intent(in) :: idxin(:) - integer(psb_ipk_), intent(out) :: idxout(:) - integer(psb_ipk_), intent(out) :: info - logical, intent(in), optional :: mask(:) - logical, intent(in), optional :: owned - integer(psb_ipk_) :: is, im - - is = size(idxin) - im = min(is,size(idxout)) - idxout(1:im) = idxin(1:im) - call idxmap%l2g(idxout(1:im),info,mask,owned) - if (is > im) then - write(0,*) 'l2gv2 err -3' - info = -3 - end if - -end subroutine hash_l2gv2 - - -subroutine hash_g2ls1(idx,idxmap,info,mask,owned) - implicit none - class(psb_hash_map), intent(in) :: idxmap - integer(psb_ipk_), intent(inout) :: idx - integer(psb_ipk_), intent(out) :: info - logical, intent(in), optional :: mask - logical, intent(in), optional :: owned - integer(psb_ipk_) :: idxv(1) - info = 0 - - if (present(mask)) then - if (.not.mask) return - end if - - idxv(1) = idx - call idxmap%g2l(idxv,info,owned=owned) - idx = idxv(1) - -end subroutine hash_g2ls1 - -subroutine hash_g2ls2(idxin,idxout,idxmap,info,mask,owned) - implicit none - class(psb_hash_map), intent(in) :: idxmap - integer(psb_ipk_), intent(in) :: idxin - integer(psb_ipk_), intent(out) :: idxout - integer(psb_ipk_), intent(out) :: info - logical, intent(in), optional :: mask - logical, intent(in), optional :: owned - - idxout = idxin - call idxmap%g2l(idxout,info,mask,owned) - -end subroutine hash_g2ls2 - - -subroutine hash_g2lv1(idx,idxmap,info,mask,owned) - use psb_penv_mod - use psb_sort_mod - implicit none - class(psb_hash_map), intent(in) :: idxmap - integer(psb_ipk_), intent(inout) :: idx(:) - integer(psb_ipk_), intent(out) :: info - logical, intent(in), optional :: mask(:) - logical, intent(in), optional :: owned - integer(psb_ipk_) :: i, is, mglob, ip, lip, nrow, ncol, nrm - integer(psb_ipk_) :: ictxt, iam, np - logical :: owned_ - - info = 0 - ictxt = idxmap%get_ctxt() - call psb_info(ictxt,iam,np) - - if (present(mask)) then - if (size(mask) < size(idx)) then - info = -1 - return + is = size(idx) + + mglob = idxmap%get_gr() + nrow = idxmap%get_lr() + ncol = idxmap%get_lc() + if (owned_) then + nrm = nrow + else + nrm = ncol end if - end if - if (present(owned)) then - owned_ = owned - else - owned_ = .false. - end if + if (present(mask)) then - is = size(idx) + if (idxmap%is_asb()) then - mglob = idxmap%get_gr() - nrow = idxmap%get_lr() - ncol = idxmap%get_lc() - if (owned_) then - nrm = nrow - else - nrm = ncol - end if - if (present(mask)) then + call hash_inner_cnv(is,idx,idxmap%hashvmask,& + & idxmap%hashv,idxmap%glb_lc,mask=mask, nrm=nrm) - if (idxmap%is_asb()) then + else if (idxmap%is_valid()) then - call hash_inner_cnv(is,idx,idxmap%hashvmask,& - & idxmap%hashv,idxmap%glb_lc,mask=mask, nrm=nrm) + do i = 1, is + if (mask(i)) then + ip = idx(i) + if ((ip < 1 ).or.(ip>mglob)) then + idx(i) = -1 + cycle + endif + call hash_inner_cnv(ip,lip,idxmap%hashvmask,idxmap%hashv,idxmap%glb_lc,nrm) + if (lip < 0) & + & call psb_hash_searchkey(ip,lip,idxmap%hash,info) + if (owned_) then + if (lip<=nrow) then + idx(i) = lip + else + idx(i) = -1 + endif + else + idx(i) = lip + endif + end if + enddo + + else + write(0,*) 'Hash status: invalid ',idxmap%get_state() + idx(1:is) = -1 + info = -1 + end if - else if (idxmap%is_valid()) then + else if (.not.present(mask)) then - do i = 1, is - if (mask(i)) then + if (idxmap%is_asb()) then + + call hash_inner_cnv(is,idx,idxmap%hashvmask,& + & idxmap%hashv,idxmap%glb_lc,nrm=nrm) + + else if (idxmap%is_valid()) then + + do i = 1, is ip = idx(i) if ((ip < 1 ).or.(ip>mglob)) then idx(i) = -1 @@ -369,153 +403,158 @@ subroutine hash_g2lv1(idx,idxmap,info,mask,owned) else idx(i) = lip endif - end if - enddo + enddo + + else + write(0,*) 'Hash status: invalid ',idxmap%get_state() + idx(1:is) = -1 + info = -1 + + end if - else - write(0,*) 'Hash status: invalid ',idxmap%get_state() - idx(1:is) = -1 - info = -1 end if - else if (.not.present(mask)) then + end subroutine hash_g2lv1 - if (idxmap%is_asb()) then + subroutine hash_g2lv2(idxin,idxout,idxmap,info,mask,owned) + implicit none + class(psb_hash_map), intent(in) :: idxmap + integer(psb_ipk_), intent(in) :: idxin(:) + integer(psb_ipk_), intent(out) :: idxout(:) + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: mask(:) + logical, intent(in), optional :: owned + + integer(psb_ipk_) :: is, im + + is = size(idxin) + im = min(is,size(idxout)) + idxout(1:im) = idxin(1:im) + call idxmap%g2l(idxout(1:im),info,mask,owned) + if (is > im) then + write(0,*) 'g2lv2 err -3' + info = -3 + end if - call hash_inner_cnv(is,idx,idxmap%hashvmask,& - & idxmap%hashv,idxmap%glb_lc,nrm=nrm) + end subroutine hash_g2lv2 - else if (idxmap%is_valid()) then - do i = 1, is - ip = idx(i) - if ((ip < 1 ).or.(ip>mglob)) then - idx(i) = -1 - cycle - endif - call hash_inner_cnv(ip,lip,idxmap%hashvmask,idxmap%hashv,idxmap%glb_lc,nrm) - if (lip < 0) & - & call psb_hash_searchkey(ip,lip,idxmap%hash,info) - if (owned_) then - if (lip<=nrow) then - idx(i) = lip - else - idx(i) = -1 - endif - else - idx(i) = lip - endif - enddo - else - write(0,*) 'Hash status: invalid ',idxmap%get_state() - idx(1:is) = -1 - info = -1 + subroutine hash_g2ls1_ins(idx,idxmap,info,mask) + use psb_realloc_mod + use psb_sort_mod + implicit none + class(psb_hash_map), intent(inout) :: idxmap + integer(psb_ipk_), intent(inout) :: idx + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: mask - end if + integer(psb_ipk_) :: idxv(1) - end if - -end subroutine hash_g2lv1 - -subroutine hash_g2lv2(idxin,idxout,idxmap,info,mask,owned) - implicit none - class(psb_hash_map), intent(in) :: idxmap - integer(psb_ipk_), intent(in) :: idxin(:) - integer(psb_ipk_), intent(out) :: idxout(:) - integer(psb_ipk_), intent(out) :: info - logical, intent(in), optional :: mask(:) - logical, intent(in), optional :: owned - - integer(psb_ipk_) :: is, im - - is = size(idxin) - im = min(is,size(idxout)) - idxout(1:im) = idxin(1:im) - call idxmap%g2l(idxout(1:im),info,mask,owned) - if (is > im) then - write(0,*) 'g2lv2 err -3' - info = -3 - end if - -end subroutine hash_g2lv2 - - - -subroutine hash_g2ls1_ins(idx,idxmap,info,mask) - use psb_realloc_mod - use psb_sort_mod - implicit none - class(psb_hash_map), intent(inout) :: idxmap - integer(psb_ipk_), intent(inout) :: idx - integer(psb_ipk_), intent(out) :: info - logical, intent(in), optional :: mask - - integer(psb_ipk_) :: idxv(1) - - info = 0 - if (present(mask)) then - if (.not.mask) return - end if - idxv(1) = idx - call idxmap%g2l_ins(idxv,info) - idx = idxv(1) - -end subroutine hash_g2ls1_ins - -subroutine hash_g2ls2_ins(idxin,idxout,idxmap,info,mask) - implicit none - class(psb_hash_map), intent(inout) :: idxmap - integer(psb_ipk_), intent(in) :: idxin - integer(psb_ipk_), intent(out) :: idxout - integer(psb_ipk_), intent(out) :: info - logical, intent(in), optional :: mask - - idxout = idxin - call idxmap%g2l_ins(idxout,info,mask=mask) - -end subroutine hash_g2ls2_ins - - -subroutine hash_g2lv1_ins(idx,idxmap,info,mask) - use psb_error_mod - use psb_realloc_mod - use psb_sort_mod - use psb_penv_mod - implicit none - class(psb_hash_map), intent(inout) :: idxmap - integer(psb_ipk_), intent(inout) :: idx(:) - integer(psb_ipk_), intent(out) :: info - logical, intent(in), optional :: mask(:) - integer(psb_ipk_) :: i, is, mglob, ip, lip, nrow, ncol, & - & nxt, err_act, ictxt, me, np - character(len=20) :: name,ch_err - - info = psb_success_ - name = 'hash_g2l_ins' - call psb_erractionsave(err_act) - - ictxt = idxmap%get_ctxt() - call psb_info(ictxt, me, np) - - is = size(idx) - - if (present(mask)) then - if (size(mask) < size(idx)) then - info = -1 - return + info = 0 + if (present(mask)) then + if (.not.mask) return end if - end if + idxv(1) = idx + call idxmap%g2l_ins(idxv,info) + idx = idxv(1) + + end subroutine hash_g2ls1_ins + + subroutine hash_g2ls2_ins(idxin,idxout,idxmap,info,mask) + implicit none + class(psb_hash_map), intent(inout) :: idxmap + integer(psb_ipk_), intent(in) :: idxin + integer(psb_ipk_), intent(out) :: idxout + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: mask + idxout = idxin + call idxmap%g2l_ins(idxout,info,mask=mask) - mglob = idxmap%get_gr() - nrow = idxmap%get_lr() - if (idxmap%is_bld()) then + end subroutine hash_g2ls2_ins + + + subroutine hash_g2lv1_ins(idx,idxmap,info,mask) + use psb_error_mod + use psb_realloc_mod + use psb_sort_mod + use psb_penv_mod + implicit none + class(psb_hash_map), intent(inout) :: idxmap + integer(psb_ipk_), intent(inout) :: idx(:) + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: mask(:) + integer(psb_ipk_) :: i, is, mglob, ip, lip, nrow, ncol, & + & nxt, err_act, ictxt, me, np + character(len=20) :: name,ch_err + + info = psb_success_ + name = 'hash_g2l_ins' + call psb_erractionsave(err_act) + + ictxt = idxmap%get_ctxt() + call psb_info(ictxt, me, np) + + is = size(idx) if (present(mask)) then - do i = 1, is - ncol = idxmap%get_lc() - if (mask(i)) then + if (size(mask) < size(idx)) then + info = -1 + return + end if + end if + + + mglob = idxmap%get_gr() + nrow = idxmap%get_lr() + if (idxmap%is_bld()) then + + if (present(mask)) then + do i = 1, is + ncol = idxmap%get_lc() + if (mask(i)) then + ip = idx(i) + if ((ip < 1 ).or.(ip>mglob)) then + idx(i) = -1 + cycle + endif + nxt = ncol + 1 + call hash_inner_cnv(ip,lip,idxmap%hashvmask,idxmap%hashv,idxmap%glb_lc,ncol) + if (lip < 0) & + & call psb_hash_searchinskey(ip,lip,nxt,idxmap%hash,info) + + if (info >=0) then + if (nxt == lip) then + ncol = nxt + call psb_ensure_size(ncol,idxmap%loc_to_glob,info,pad=-1,addsz=200) + if (info /= psb_success_) then + info=1 + ch_err='psb_ensure_size' + call psb_errpush(psb_err_from_subroutine_ai_,name,& + &a_err=ch_err,i_err=(/info,0,0,0,0/)) + goto 9999 + end if + idxmap%loc_to_glob(nxt) = ip + call idxmap%set_lc(ncol) + endif + info = psb_success_ + else + ch_err='SearchInsKeyVal' + call psb_errpush(psb_err_from_subroutine_ai_,name,& + & a_err=ch_err,i_err=(/info,0,0,0,0/)) + goto 9999 + end if + idx(i) = lip + info = psb_success_ + else + idx(i) = -1 + end if + enddo + + else + do i = 1, is + ncol = idxmap%get_lc() ip = idx(i) if ((ip < 1 ).or.(ip>mglob)) then idx(i) = -1 @@ -549,520 +588,515 @@ subroutine hash_g2lv1_ins(idx,idxmap,info,mask) end if idx(i) = lip info = psb_success_ - else - idx(i) = -1 - end if - enddo + enddo - else - do i = 1, is - ncol = idxmap%get_lc() - ip = idx(i) - if ((ip < 1 ).or.(ip>mglob)) then - idx(i) = -1 - cycle - endif - nxt = ncol + 1 - call hash_inner_cnv(ip,lip,idxmap%hashvmask,idxmap%hashv,idxmap%glb_lc,ncol) - if (lip < 0) & - & call psb_hash_searchinskey(ip,lip,nxt,idxmap%hash,info) - - if (info >=0) then - if (nxt == lip) then - ncol = nxt - call psb_ensure_size(ncol,idxmap%loc_to_glob,info,pad=-1,addsz=200) - if (info /= psb_success_) then - info=1 - ch_err='psb_ensure_size' - call psb_errpush(psb_err_from_subroutine_ai_,name,& - &a_err=ch_err,i_err=(/info,0,0,0,0/)) - goto 9999 - end if - idxmap%loc_to_glob(nxt) = ip - call idxmap%set_lc(ncol) - endif - info = psb_success_ - else - ch_err='SearchInsKeyVal' - call psb_errpush(psb_err_from_subroutine_ai_,name,& - & a_err=ch_err,i_err=(/info,0,0,0,0/)) - goto 9999 - end if - idx(i) = lip - info = psb_success_ - enddo + end if + else + ! Wrong state + idx = -1 + info = -1 end if - - else - ! Wrong state - idx = -1 - info = -1 - end if - call psb_erractionrestore(err_act) - return + call psb_erractionrestore(err_act) + return 9999 continue - call psb_erractionrestore(err_act) + call psb_erractionrestore(err_act) - if (err_act == psb_act_ret_) then - return - else - call psb_error(ictxt) - end if - return - -end subroutine hash_g2lv1_ins - -subroutine hash_g2lv2_ins(idxin,idxout,idxmap,info,mask) - implicit none - class(psb_hash_map), intent(inout) :: idxmap - integer(psb_ipk_), intent(in) :: idxin(:) - integer(psb_ipk_), intent(out) :: idxout(:) - integer(psb_ipk_), intent(out) :: info - logical, intent(in), optional :: mask(:) - integer(psb_ipk_) :: is, im - - is = size(idxin) - im = min(is,size(idxout)) - idxout(1:im) = idxin(1:im) - call idxmap%g2l_ins(idxout(1:im),info,mask) - if (is > im) then - write(0,*) 'g2lv2_ins err -3' - info = -3 - end if - -end subroutine hash_g2lv2_ins - -subroutine hash_init_vl(idxmap,ictxt,vl,info) - use psb_penv_mod - use psb_error_mod - use psb_sort_mod - use psb_realloc_mod - implicit none - class(psb_hash_map), intent(inout) :: idxmap - integer(psb_ipk_), intent(in) :: ictxt, vl(:) - integer(psb_ipk_), intent(out) :: info - ! To be implemented - integer(psb_ipk_) :: iam, np, i, nlu, nl, m, nrt,int_err(5) - integer(psb_ipk_), allocatable :: vlu(:) - character(len=20), parameter :: name='hash_map_init_vl' - - info = 0 - call psb_info(ictxt,iam,np) - if (np < 0) then - write(psb_err_unit,*) 'Invalid ictxt:',ictxt - info = -1 + if (err_act == psb_act_ret_) then + return + else + call psb_error(ictxt) + end if return - end if - nl = size(vl) + end subroutine hash_g2lv1_ins - m = maxval(vl(1:nl)) - nrt = nl - call psb_sum(ictxt,nrt) - call psb_max(ictxt,m) + subroutine hash_g2lv2_ins(idxin,idxout,idxmap,info,mask) + implicit none + class(psb_hash_map), intent(inout) :: idxmap + integer(psb_ipk_), intent(in) :: idxin(:) + integer(psb_ipk_), intent(out) :: idxout(:) + integer(psb_ipk_), intent(out) :: info + logical, intent(in), optional :: mask(:) + integer(psb_ipk_) :: is, im + + is = size(idxin) + im = min(is,size(idxout)) + idxout(1:im) = idxin(1:im) + call idxmap%g2l_ins(idxout(1:im),info,mask) + if (is > im) then + write(0,*) 'g2lv2_ins err -3' + info = -3 + end if - allocate(vlu(nl), stat=info) - if (info /= 0) then - info = -1 - return - end if - - do i=1,nl - if ((vl(i)<1).or.(vl(i)>m)) then - info = psb_err_entry_out_of_bounds_ - int_err(1) = i - int_err(2) = vl(i) - int_err(3) = nl - int_err(4) = m - exit - endif - vlu(i) = vl(i) - end do - - if ((m /= nrt).and.(iam == psb_root_)) then - write(psb_err_unit,*) trim(name),& - & ' Warning: globalcheck=.false., but there is a mismatch' - write(psb_err_unit,*) trim(name),& - & ' : in the global sizes!',m,nrt - end if - ! - ! Now sort the input items, and check for duplicates - ! (unlikely, but possible) - ! - call psb_msort_unique(vlu,nlu) - if (nlu /= nl) then - write(0,*) 'Warning: duplicates in input' - end if - - call hash_init_vlu(idxmap,ictxt,m,nlu,vlu,info) - -end subroutine hash_init_vl - -subroutine hash_init_vg(idxmap,ictxt,vg,info) - use psb_penv_mod - use psb_error_mod - implicit none - class(psb_hash_map), intent(inout) :: idxmap - integer(psb_ipk_), intent(in) :: ictxt, vg(:) - integer(psb_ipk_), intent(out) :: info - ! To be implemented - integer(psb_ipk_) :: iam, np, i, j, nl, n, int_err(5) - integer(psb_ipk_), allocatable :: vlu(:) - - info = 0 - call psb_info(ictxt,iam,np) - if (np < 0) then - write(psb_err_unit,*) 'Invalid ictxt:',ictxt - info = -1 - return - end if - - n = size(vg) - nl = 0 - do i=1, n - if ((vg(i)<0).or.(vg(i)>=np)) then - info = psb_err_partfunc_wrong_pid_ - int_err(1) = 3 - int_err(2) = vg(i) - int_err(3) = i - exit - endif - if (vg(i) == iam) nl = nl + 1 - end do + end subroutine hash_g2lv2_ins - allocate(vlu(nl), stat=info) - if (info /= 0) then - info = -1 - return - end if + subroutine hash_init_vl(idxmap,ictxt,vl,info) + use psb_penv_mod + use psb_error_mod + use psb_sort_mod + use psb_realloc_mod + implicit none + class(psb_hash_map), intent(inout) :: idxmap + integer(psb_ipk_), intent(in) :: ictxt, vl(:) + integer(psb_ipk_), intent(out) :: info + ! To be implemented + integer(psb_ipk_) :: iam, np, i, nlu, nl, m, nrt,int_err(5) + integer(psb_ipk_), allocatable :: vlu(:) + character(len=20), parameter :: name='hash_map_init_vl' + + info = 0 + call psb_info(ictxt,iam,np) + if (np < 0) then + write(psb_err_unit,*) 'Invalid ictxt:',ictxt + info = -1 + return + end if + + nl = size(vl) - j = 0 - do i=1, n - if (vg(i) == iam) then - j = j + 1 - vlu(j) = i + m = maxval(vl(1:nl)) + nrt = nl + call psb_sum(ictxt,nrt) + call psb_max(ictxt,m) + + allocate(vlu(nl), stat=info) + if (info /= 0) then + info = -1 + return + end if + + do i=1,nl + if ((vl(i)<1).or.(vl(i)>m)) then + info = psb_err_entry_out_of_bounds_ + int_err(1) = i + int_err(2) = vl(i) + int_err(3) = nl + int_err(4) = m + exit + endif + vlu(i) = vl(i) + end do + + if ((m /= nrt).and.(iam == psb_root_)) then + write(psb_err_unit,*) trim(name),& + & ' Warning: globalcheck=.false., but there is a mismatch' + write(psb_err_unit,*) trim(name),& + & ' : in the global sizes!',m,nrt end if - end do + ! + ! Now sort the input items, and check for duplicates + ! (unlikely, but possible) + ! + call psb_msort_unique(vlu,nlu) + if (nlu /= nl) then + write(0,*) 'Warning: duplicates in input' + end if + + call hash_init_vlu(idxmap,ictxt,m,nlu,vlu,info) + end subroutine hash_init_vl - call hash_init_vlu(idxmap,ictxt,n,nl,vlu,info) + subroutine hash_init_vg(idxmap,ictxt,vg,info) + use psb_penv_mod + use psb_error_mod + implicit none + class(psb_hash_map), intent(inout) :: idxmap + integer(psb_ipk_), intent(in) :: ictxt, vg(:) + integer(psb_ipk_), intent(out) :: info + ! To be implemented + integer(psb_ipk_) :: iam, np, i, j, nl, n, int_err(5) + integer(psb_ipk_), allocatable :: vlu(:) + + info = 0 + call psb_info(ictxt,iam,np) + if (np < 0) then + write(psb_err_unit,*) 'Invalid ictxt:',ictxt + info = -1 + return + end if + n = size(vg) + nl = 0 + do i=1, n + if ((vg(i)<0).or.(vg(i)>=np)) then + info = psb_err_partfunc_wrong_pid_ + int_err(1) = 3 + int_err(2) = vg(i) + int_err(3) = i + exit + endif + if (vg(i) == iam) nl = nl + 1 + end do -end subroutine hash_init_vg + allocate(vlu(nl), stat=info) + if (info /= 0) then + info = -1 + return + end if + + j = 0 + do i=1, n + if (vg(i) == iam) then + j = j + 1 + vlu(j) = i + end if + end do -subroutine hash_init_vlu(idxmap,ictxt,ntot,nl,vlu,info) - use psb_penv_mod - use psb_error_mod - use psb_sort_mod - use psb_realloc_mod - implicit none - class(psb_hash_map), intent(inout) :: idxmap - integer(psb_ipk_), intent(in) :: ictxt, vlu(:), nl, ntot - integer(psb_ipk_), intent(out) :: info - ! To be implemented - integer(psb_ipk_) :: iam, np, i, j, lc2, nlu, m, nrt,int_err(5) - character(len=20), parameter :: name='hash_map_init_vlu' + call hash_init_vlu(idxmap,ictxt,n,nl,vlu,info) - info = 0 - call psb_info(ictxt,iam,np) - if (np < 0) then - write(psb_err_unit,*) 'Invalid ictxt:',ictxt - info = -1 - return - end if - - idxmap%global_rows = ntot - idxmap%global_cols = ntot - idxmap%local_rows = nl - idxmap%local_cols = nl - idxmap%ictxt = ictxt - idxmap%state = psb_desc_bld_ - call psb_get_mpicomm(ictxt,idxmap%mpic) - - lc2 = int(1.5*nl) - allocate(idxmap%hash,idxmap%loc_to_glob(lc2),stat=info) - if (info /= 0) then - info = -2 - return - end if - - call psb_hash_init(nl,idxmap%hash,info) - if (info /= 0) then - write(0,*) 'from Hash_Init inside init_vlu',info - info = -3 - return - endif - - do i=1, nl - idxmap%loc_to_glob(i) = vlu(i) - end do - - call hash_bld_g2l_map(idxmap,info) - call idxmap%set_state(psb_desc_bld_) - -end subroutine hash_init_vlu - - - -subroutine hash_bld_g2l_map(idxmap,info) - use psb_penv_mod - use psb_error_mod - use psb_sort_mod - use psb_realloc_mod - implicit none - class(psb_hash_map), intent(inout) :: idxmap - integer(psb_ipk_), intent(out) :: info - ! To be implemented - integer(psb_ipk_) :: ictxt, iam, np, i, j, m, nl - integer(psb_ipk_) :: key, ih, nh, idx, nbits, hsize, hmask - character(len=20), parameter :: name='hash_map_init_vlu' - - info = 0 - ictxt = idxmap%get_ctxt() - - call psb_info(ictxt,iam,np) - if (np < 0) then - write(psb_err_unit,*) 'Invalid ictxt:',ictxt - info = -1 - return - end if - nl = idxmap%get_lc() + end subroutine hash_init_vg - call psb_realloc(nl,2,idxmap%glb_lc,info) - nbits = psb_hash_bits - hsize = 2**nbits - do - if (hsize < 0) then - ! This should never happen for sane values - ! of psb_max_hash_bits. - write(psb_err_unit,*) & - & 'Error: hash size overflow ',hsize,nbits - info = -2 + subroutine hash_init_vlu(idxmap,ictxt,ntot,nl,vlu,info) + use psb_penv_mod + use psb_error_mod + use psb_sort_mod + use psb_realloc_mod + implicit none + class(psb_hash_map), intent(inout) :: idxmap + integer(psb_ipk_), intent(in) :: ictxt, vlu(:), nl, ntot + integer(psb_ipk_), intent(out) :: info + ! To be implemented + integer(psb_ipk_) :: iam, np, i, j, lc2, nlu, m, nrt,int_err(5) + character(len=20), parameter :: name='hash_map_init_vlu' + + info = 0 + call psb_info(ictxt,iam,np) + if (np < 0) then + write(psb_err_unit,*) 'Invalid ictxt:',ictxt + info = -1 return end if - if (hsize > nl) exit - if (nbits >= psb_max_hash_bits) exit - nbits = nbits + 1 - hsize = hsize * 2 - end do - - hmask = hsize - 1 - idxmap%hashvsize = hsize - idxmap%hashvmask = hmask - - if (info == psb_success_) & - & call psb_realloc(hsize+1,idxmap%hashv,info,lb=0) - if (info /= psb_success_) then - ! !$ ch_err='psb_realloc' - ! !$ call psb_errpush(info,name,a_err=ch_err) - ! !$ goto 9999 - info = -4 - return - end if - - idxmap%hashv(:) = 0 - - do i=1, nl - key = idxmap%loc_to_glob(i) - ih = iand(key,hmask) - idxmap%hashv(ih) = idxmap%hashv(ih) + 1 - end do - - nh = idxmap%hashv(0) - idx = 1 - - do i=1, hsize - idxmap%hashv(i-1) = idx - idx = idx + nh - nh = idxmap%hashv(i) - end do - - do i=1, nl - key = idxmap%loc_to_glob(i) - ih = iand(key,hmask) - idx = idxmap%hashv(ih) - idxmap%glb_lc(idx,1) = key - idxmap%glb_lc(idx,2) = i - idxmap%hashv(ih) = idxmap%hashv(ih) + 1 - end do - - do i = hsize, 1, -1 - idxmap%hashv(i) = idxmap%hashv(i-1) - end do - - idxmap%hashv(0) = 1 - do i=0, hsize-1 - idx = idxmap%hashv(i) - nh = idxmap%hashv(i+1) - idxmap%hashv(i) - if (nh > 1) then - call psb_msort(idxmap%glb_lc(idx:idx+nh-1,1),& - & ix=idxmap%glb_lc(idx:idx+nh-1,2),& - & flag=psb_sort_keep_idx_) + + idxmap%global_rows = ntot + idxmap%global_cols = ntot + idxmap%local_rows = nl + idxmap%local_cols = nl + idxmap%ictxt = ictxt + idxmap%state = psb_desc_bld_ + call psb_get_mpicomm(ictxt,idxmap%mpic) + + lc2 = int(1.5*nl) + allocate(idxmap%loc_to_glob(lc2),stat=info) + if (info /= 0) then + info = -2 + return end if - end do -end subroutine hash_bld_g2l_map + call psb_hash_init(nl,idxmap%hash,info) + if (info /= 0) then + write(0,*) 'from Hash_Init inside init_vlu',info + info = -3 + return + endif + do i=1, nl + idxmap%loc_to_glob(i) = vlu(i) + end do -subroutine hash_asb(idxmap,info) - use psb_penv_mod - use psb_error_mod - use psb_realloc_mod - use psb_sort_mod - implicit none - class(psb_hash_map), intent(inout) :: idxmap - integer(psb_ipk_), intent(out) :: info + call hash_bld_g2l_map(idxmap,info) + call idxmap%set_state(psb_desc_bld_) - integer(psb_ipk_) :: nhal, ictxt, iam, np + end subroutine hash_init_vlu - info = 0 - ictxt = idxmap%get_ctxt() - call psb_info(ictxt,iam,np) - nhal = max(0,idxmap%local_cols-idxmap%local_rows) - call hash_bld_g2l_map(idxmap,info) - if (info /= 0) then - write(0,*) 'Error from bld_g2l_map', info - return - end if + subroutine hash_bld_g2l_map(idxmap,info) + use psb_penv_mod + use psb_error_mod + use psb_sort_mod + use psb_realloc_mod + implicit none + class(psb_hash_map), intent(inout) :: idxmap + integer(psb_ipk_), intent(out) :: info + ! To be implemented + integer(psb_ipk_) :: ictxt, iam, np, i, j, m, nl + integer(psb_ipk_) :: key, ih, nh, idx, nbits, hsize, hmask + character(len=20), parameter :: name='hash_map_init_vlu' - call psb_free(idxmap%hash,info) - if (info == 0) deallocate(idxmap%hash,stat=info) - if (info /= 0) then - write(0,*) 'Error from hash free', info - return - end if - - call idxmap%set_state(psb_desc_asb_) - -end subroutine hash_asb - -function hash_get_fmt() result(res) - implicit none - character(len=5) :: res - res = 'HASH' -end function hash_get_fmt - - -subroutine hash_inner_cnvs1(x,hashmask,hashv,glb_lc,nrm) - - integer(psb_ipk_), intent(in) :: hashmask,hashv(0:),glb_lc(:,:) - integer(psb_ipk_), intent(inout) :: x - integer(psb_ipk_), intent(in) :: nrm - integer(psb_ipk_) :: ih, key, idx,nh,tmp,lb,ub,lm - ! - ! When a large descriptor is assembled the indices - ! are kept in a (hashed) list of ordered lists. - ! Thus we first hash the index, then we do a binary search on the - ! ordered sublist. The hashing is based on the low-order bits - ! for a width of psb_hash_bits - ! - - key = x - ih = iand(key,hashmask) - idx = hashv(ih) - nh = hashv(ih+1) - hashv(ih) - if (nh > 0) then - tmp = -1 - lb = idx - ub = idx+nh-1 + info = 0 + ictxt = idxmap%get_ctxt() + + call psb_info(ictxt,iam,np) + if (np < 0) then + write(psb_err_unit,*) 'Invalid ictxt:',ictxt + info = -1 + return + end if + + nl = idxmap%get_lc() + + call psb_realloc(nl,2,idxmap%glb_lc,info) + + nbits = psb_hash_bits + hsize = 2**nbits do - if (lb>ub) exit - lm = (lb+ub)/2 - if (key == glb_lc(lm,1)) then - tmp = lm - exit - else if (key nl) exit + if (nbits >= psb_max_hash_bits) exit + nbits = nbits + 1 + hsize = hsize * 2 end do - else - tmp = -1 - end if - if (tmp > 0) then - x = glb_lc(tmp,2) - if (x > nrm) then - x = -1 + + hmask = hsize - 1 + idxmap%hashvsize = hsize + idxmap%hashvmask = hmask + + if (info == psb_success_) & + & call psb_realloc(hsize+1,idxmap%hashv,info,lb=0) + if (info /= psb_success_) then + ! !$ ch_err='psb_realloc' + ! !$ call psb_errpush(info,name,a_err=ch_err) + ! !$ goto 9999 + info = -4 + return end if - else - x = tmp - end if -end subroutine hash_inner_cnvs1 - -subroutine hash_inner_cnvs2(x,y,hashmask,hashv,glb_lc,nrm) - integer(psb_ipk_), intent(in) :: hashmask,hashv(0:),glb_lc(:,:) - integer(psb_ipk_), intent(in) :: x - integer(psb_ipk_), intent(out) :: y - integer(psb_ipk_), intent(in) :: nrm - integer(psb_ipk_) :: ih, key, idx,nh,tmp,lb,ub,lm - ! - ! When a large descriptor is assembled the indices - ! are kept in a (hashed) list of ordered lists. - ! Thus we first hash the index, then we do a binary search on the - ! ordered sublist. The hashing is based on the low-order bits - ! for a width of psb_hash_bits - ! - - key = x - ih = iand(key,hashmask) - idx = hashv(ih) - nh = hashv(ih+1) - hashv(ih) - if (nh > 0) then - tmp = -1 - lb = idx - ub = idx+nh-1 - do - if (lb>ub) exit - lm = (lb+ub)/2 - if (key == glb_lc(lm,1)) then - tmp = lm - exit - else if (key 1) then + call psb_msort(idxmap%glb_lc(idx:idx+nh-1,1),& + & ix=idxmap%glb_lc(idx:idx+nh-1,2),& + & flag=psb_sort_keep_idx_) end if end do - else - tmp = -1 - end if - if (tmp > 0) then - y = glb_lc(tmp,2) - if (y > nrm) then - y = -1 + + end subroutine hash_bld_g2l_map + + + subroutine hash_asb(idxmap,info) + use psb_penv_mod + use psb_error_mod + use psb_realloc_mod + use psb_sort_mod + implicit none + class(psb_hash_map), intent(inout) :: idxmap + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: nhal, ictxt, iam, np + + info = 0 + ictxt = idxmap%get_ctxt() + call psb_info(ictxt,iam,np) + + nhal = max(0,idxmap%local_cols-idxmap%local_rows) + + call hash_bld_g2l_map(idxmap,info) + if (info /= 0) then + write(0,*) 'Error from bld_g2l_map', info + return end if - else - y = tmp - end if -end subroutine hash_inner_cnvs2 - - -subroutine hash_inner_cnv1(n,x,hashmask,hashv,glb_lc,mask,nrm) - integer(psb_ipk_), intent(in) :: n,hashmask,hashv(0:),glb_lc(:,:) - logical, intent(in), optional :: mask(:) - integer(psb_ipk_), intent(in), optional :: nrm - integer(psb_ipk_), intent(inout) :: x(:) - - integer(psb_ipk_) :: i, ih, key, idx,nh,tmp,lb,ub,lm - ! - ! When a large descriptor is assembled the indices - ! are kept in a (hashed) list of ordered lists. - ! Thus we first hash the index, then we do a binary search on the - ! ordered sublist. The hashing is based on the low-order bits - ! for a width of psb_hash_bits - ! - if (present(mask)) then - do i=1, n - if (mask(i)) then + + call psb_free(idxmap%hash,info) + if (info /= 0) then + write(0,*) 'Error from hash free', info + return + end if + + call idxmap%set_state(psb_desc_asb_) + + end subroutine hash_asb + + function hash_get_fmt() result(res) + implicit none + character(len=5) :: res + res = 'HASH' + end function hash_get_fmt + + + subroutine hash_inner_cnvs1(x,hashmask,hashv,glb_lc,nrm) + + integer(psb_ipk_), intent(in) :: hashmask,hashv(0:),glb_lc(:,:) + integer(psb_ipk_), intent(inout) :: x + integer(psb_ipk_), intent(in) :: nrm + integer(psb_ipk_) :: ih, key, idx,nh,tmp,lb,ub,lm + ! + ! When a large descriptor is assembled the indices + ! are kept in a (hashed) list of ordered lists. + ! Thus we first hash the index, then we do a binary search on the + ! ordered sublist. The hashing is based on the low-order bits + ! for a width of psb_hash_bits + ! + + key = x + ih = iand(key,hashmask) + idx = hashv(ih) + nh = hashv(ih+1) - hashv(ih) + if (nh > 0) then + tmp = -1 + lb = idx + ub = idx+nh-1 + do + if (lb>ub) exit + lm = (lb+ub)/2 + if (key == glb_lc(lm,1)) then + tmp = lm + exit + else if (key 0) then + x = glb_lc(tmp,2) + if (x > nrm) then + x = -1 + end if + else + x = tmp + end if + end subroutine hash_inner_cnvs1 + + subroutine hash_inner_cnvs2(x,y,hashmask,hashv,glb_lc,nrm) + integer(psb_ipk_), intent(in) :: hashmask,hashv(0:),glb_lc(:,:) + integer(psb_ipk_), intent(in) :: x + integer(psb_ipk_), intent(out) :: y + integer(psb_ipk_), intent(in) :: nrm + integer(psb_ipk_) :: ih, key, idx,nh,tmp,lb,ub,lm + ! + ! When a large descriptor is assembled the indices + ! are kept in a (hashed) list of ordered lists. + ! Thus we first hash the index, then we do a binary search on the + ! ordered sublist. The hashing is based on the low-order bits + ! for a width of psb_hash_bits + ! + + key = x + ih = iand(key,hashmask) + idx = hashv(ih) + nh = hashv(ih+1) - hashv(ih) + if (nh > 0) then + tmp = -1 + lb = idx + ub = idx+nh-1 + do + if (lb>ub) exit + lm = (lb+ub)/2 + if (key == glb_lc(lm,1)) then + tmp = lm + exit + else if (key 0) then + y = glb_lc(tmp,2) + if (y > nrm) then + y = -1 + end if + else + y = tmp + end if + end subroutine hash_inner_cnvs2 + + + subroutine hash_inner_cnv1(n,x,hashmask,hashv,glb_lc,mask,nrm) + integer(psb_ipk_), intent(in) :: n,hashmask,hashv(0:),glb_lc(:,:) + logical, intent(in), optional :: mask(:) + integer(psb_ipk_), intent(in), optional :: nrm + integer(psb_ipk_), intent(inout) :: x(:) + + integer(psb_ipk_) :: i, ih, key, idx,nh,tmp,lb,ub,lm + ! + ! When a large descriptor is assembled the indices + ! are kept in a (hashed) list of ordered lists. + ! Thus we first hash the index, then we do a binary search on the + ! ordered sublist. The hashing is based on the low-order bits + ! for a width of psb_hash_bits + ! + if (present(mask)) then + do i=1, n + if (mask(i)) then + key = x(i) + ih = iand(key,hashmask) + idx = hashv(ih) + nh = hashv(ih+1) - hashv(ih) + if (nh > 0) then + tmp = -1 + lb = idx + ub = idx+nh-1 + do + if (lb>ub) exit + lm = (lb+ub)/2 + if (key == glb_lc(lm,1)) then + tmp = lm + exit + else if (key 0) then + x(i) = glb_lc(tmp,2) + if (present(nrm)) then + if (x(i) > nrm) then + x(i) = -1 + end if + end if + else + x(i) = tmp + end if + end if + end do + else + do i=1, n key = x(i) ih = iand(key,hashmask) idx = hashv(ih) @@ -1096,65 +1130,70 @@ subroutine hash_inner_cnv1(n,x,hashmask,hashv,glb_lc,mask,nrm) else x(i) = tmp end if - end if - end do - else - do i=1, n - key = x(i) - ih = iand(key,hashmask) - idx = hashv(ih) - nh = hashv(ih+1) - hashv(ih) - if (nh > 0) then - tmp = -1 - lb = idx - ub = idx+nh-1 - do - if (lb>ub) exit - lm = (lb+ub)/2 - if (key == glb_lc(lm,1)) then - tmp = lm - exit - else if (key ubound(hashv,1) ) then + write(psb_err_unit,*) ' In inner cnv: ',ih,ubound(hashv) end if - end do - else - tmp = -1 - end if - if (tmp > 0) then - x(i) = glb_lc(tmp,2) - if (present(nrm)) then - if (x(i) > nrm) then - x(i) = -1 + idx = hashv(ih) + nh = hashv(ih+1) - hashv(ih) + if (nh > 0) then + tmp = -1 + lb = idx + ub = idx+nh-1 + do + if (lb>ub) exit + lm = (lb+ub)/2 + if (key == glb_lc(lm,1)) then + tmp = lm + exit + else if (key 0) then + y(i) = glb_lc(tmp,2) + if (present(nrm)) then + if (y(i) > nrm) then + y(i) = -1 + end if + end if + else + y(i) = tmp end if end if - else - x(i) = tmp - end if - end do - end if -end subroutine hash_inner_cnv1 - -subroutine hash_inner_cnv2(n,x,y,hashmask,hashv,glb_lc,mask,nrm) - integer(psb_ipk_), intent(in) :: n, hashmask,hashv(0:),glb_lc(:,:) - logical, intent(in), optional :: mask(:) - integer(psb_ipk_), intent(in), optional :: nrm - integer(psb_ipk_), intent(in) :: x(:) - integer(psb_ipk_), intent(out) :: y(:) - - integer(psb_ipk_) :: i, ih, key, idx,nh,tmp,lb,ub,lm - ! - ! When a large descriptor is assembled the indices - ! are kept in a (hashed) list of ordered lists. - ! Thus we first hash the index, then we do a binary search on the - ! ordered sublist. The hashing is based on the low-order bits - ! for a width of psb_hash_bits - ! - if (present(mask)) then - do i=1, n - if (mask(i)) then + end do + + else + + do i=1, n key = x(i) ih = iand(key,hashmask) if (ih > ubound(hashv,1) ) then @@ -1191,51 +1230,9 @@ subroutine hash_inner_cnv2(n,x,y,hashmask,hashv,glb_lc,mask,nrm) else y(i) = tmp end if - end if - end do - - else - - do i=1, n - key = x(i) - ih = iand(key,hashmask) - if (ih > ubound(hashv,1) ) then - write(psb_err_unit,*) ' In inner cnv: ',ih,ubound(hashv) - end if - idx = hashv(ih) - nh = hashv(ih+1) - hashv(ih) - if (nh > 0) then - tmp = -1 - lb = idx - ub = idx+nh-1 - do - if (lb>ub) exit - lm = (lb+ub)/2 - if (key == glb_lc(lm,1)) then - tmp = lm - exit - else if (key 0) then - y(i) = glb_lc(tmp,2) - if (present(nrm)) then - if (y(i) > nrm) then - y(i) = -1 - end if - end if - else - y(i) = tmp - end if - end do - end if -end subroutine hash_inner_cnv2 + end do + end if + end subroutine hash_inner_cnv2 subroutine hash_clone(idxmap,outmap,info) @@ -1271,7 +1268,6 @@ end subroutine hash_inner_cnv2 outmap%psb_indx_map = idxmap%psb_indx_map outmap%hashvsize = idxmap%hashvsize outmap%hashvmask = idxmap%hashvmask - allocate(outmap%hash, stat=info) end if if (info == psb_success_)& & call psb_safe_ab_cpy(idxmap%loc_to_glob,outmap%loc_to_glob,info) @@ -1281,7 +1277,8 @@ end subroutine hash_inner_cnv2 & call psb_safe_ab_cpy(idxmap%glb_lc,outmap%glb_lc,info) if (info == psb_success_)& & call psb_hash_copy(idxmap%hash,outmap%hash,info) - class default +!!$ outmap = idxmap + class default ! This should be impossible info = -1 end select @@ -1303,4 +1300,27 @@ end subroutine hash_inner_cnv2 end subroutine hash_clone + subroutine hash_cpy(outmap,idxmap) + use psb_penv_mod + use psb_error_mod + use psb_realloc_mod + class(psb_hash_map), intent(in) :: idxmap + type(psb_hash_map), intent(out) :: outmap + integer :: info + + outmap%psb_indx_map = idxmap%psb_indx_map + outmap%hashvsize = idxmap%hashvsize + outmap%hashvmask = idxmap%hashvmask + if (info == psb_success_)& + & call psb_safe_ab_cpy(idxmap%loc_to_glob,outmap%loc_to_glob,info) + if (info == psb_success_)& + & call psb_safe_ab_cpy(idxmap%hashv,outmap%hashv,info) + if (info == psb_success_)& + & call psb_safe_ab_cpy(idxmap%glb_lc,outmap%glb_lc,info) + if (info == psb_success_)& + & call psb_hash_copy(idxmap%hash,outmap%hash,info) + end subroutine hash_cpy + + + end module psb_hash_map_mod diff --git a/docs/html/footnode.html b/docs/html/footnode.html index 0bb3989c..643991ed 100644 --- a/docs/html/footnode.html +++ b/docs/html/footnode.html @@ -18,14 +18,14 @@ original version by: Nikos Drakos, CBLU, University of Leeds - +
-
... +
... explicitly1
In our prototype implementation we provide @@ -63,7 +63,7 @@ sample scatter/gather routines. .
-
... domain... domain2
This is the normal situation when the pattern of the sparse matrix is @@ -104,8 +104,8 @@ sample scatter/gather routines. .
-
... follows3
+
... follows3
The string is case-insensitive
.
diff --git a/docs/html/img1.png b/docs/html/img1.png
index f20c575316dbe600d67a871a6aa8db14b2a437b8..2bcd8b2c6eb4f57b5457d47249c8c88579088bf8 100644
GIT binary patch
delta 172
zcmcb_c!F_)O1*l3Pl)U0&6`)OSTSeLoR*fBii(PyoScM&gpiOB0|NsU6%`2y2_7CE
z1_p)`g{$5JDaMi@zhDN3XE)M-9Dh$2#}JO0$v_Q>K%C0J$Y&7Apd=xg&~TGs#gaV@
zjFKN3IwTa*m^R*6?Xc^H_-r;-EpUFLk?O1)NqPl)S*0|%BbU*6l>o1UKT>+7qouFk-~z{|_KWy_XXvt~6kG?bK-
zL`6lJn3$ZA^40{(F_r}R1v5B2yO9Rugn7C+hH%VGPDpr=n2?YF#7PMW$qbCl0tZhr
zu(LPVEaf(kQ|@5UwqZLWv&W&yopnifHzV&B|Aq^5^iPW@^z^P_KVWiR=_+@?SzG|Sd(gtV+gQu&X%Q~loCIB*;Ka2nX

diff --git a/docs/html/img10.png b/docs/html/img10.png
index f17919431ac244dc39d3a86c5648222dbe5ec85c..2049ac157ed2846497868eca46c8fe170a502601 100644
GIT binary patch
delta 369
zcmV-%0gnE@1CaxeDSxxGv#6-3oSdAHkdTCggm`#(Y;0^`U|>{KR7gljJUl!wFfb$}
zBp4VN3=9ka008P)%boxL00DGTPE!Ct=GbNc009q4L_t(IjbmVd0Y)I6z<>s}GcbH$
zVA#OGzzGxKWMgy0_GM)eat0h@vYjLDu<0%35$WjP!gAPhdZ
z5WmL*s7?@((a{ESIn;~=tp}j0)P>+o1B7Kr%;5qyFnHeo|1SU%n+QSH!6q0mg@LHNcQHz*NJ%A!{Q8lA11HxEG+Qu@_+AdH@sMz`*o?fw2Px!8bbt{8ji~MHyz-j5WyA)G=HIpZa@=9W0RAah6VrtiM>uV^-@5g
P00000NkvXXu0mjfGSr(+

delta 415
zcmV;Q0bu@-1HJ>0DSyDgz^A9Djg5_GXJ<`KO(!QO0000D4Gpxkw3?clfPjE>baYx;
zT0lTRG&D3C8X9cetX%*A00DGTPE!Ct=GbNc00BHnL_t(IjbmVd0S+K`U_b*07#I@3
zh-05b?R7%(tQ;9)qx!>|Bo-Ul8gCx4y^1waez1cM@G&s)fZfK!;PZU6AkoMJ@fKJ$l;k19ZVG^a
z0+`}!f{QR(^gtNwU=k$Hwc!9nh#3^tU?IMqf(EeA0uZ5Oq{zU)#sF0n5ETGb#lmna
z0BY<4s1VS?1%K4^z~BG}7`D87_lAK176ed1uFo>>i(sM$Rxz+HV1V(M4nWm#rZ+Hr
zf~#R*ILm;khNnO!k^xCgCQwcR#9&fVc2ZIV3$ia@=nsI1g19U|+C~7)99v-ea)5~*
ze3q8x$S@bpF2>m0GZt`Bh@jU3C_@0@HiRhL%cy?GCKx)r006gQQt0N5!h-++002ov
JPDHLkV1licrAPn(

diff --git a/docs/html/img100.png b/docs/html/img100.png
index fd2f3222776f1baffd7226b99aad8c2bfd0d769e..154e1ae1bb0c8d6ac08746ada826c5d87814e8f4 100644
GIT binary patch
literal 260
zcmeAS@N?(olHy`uVBq!ia0vp^@*p+~GXn$Tm6Vjmv0~1gITI#K
zXlZGwsHn)v$w^2^2nh-C@bIv)u~AV`k&uw!;Q{H`w%e`~NHLZK`2{mLJiCzwe&<9%a8LvL$iWB0+tgC?!*6w@bYfivSrq+Sq%*hB_$mgkdP1$4-Xp~8x<852?+_H+B;Vc?*USbB|(0{3=Yq3qyah3o-U3d95a&>
z5+0-^B-~&)!t;igr{I7RLu!W=182J{&x!>*8XD&wY;0_w+1Pl}q><4);#dIRq8;24
hd`+3m=b9MU80uKqcb*ljas?X4;OXk;vd$@?2>=AUJdgkY

literal 358
zcmeAS@N?(olHy`uVBq!ia0vp^`amql!py+HXsMCK2;>+9_=LC~IB;P3^5wm~z3J)c
zzP`Td>gpgZyu4esY?(D{RzpKWNl8gmRFs2*gNccWl$2D?oi(vQ6^tc8e!&b5&u*jv
zIZr%Y978lFCMPg3$yqQm^4-bNs9|Gd`^VMB%#*`&gHc`}KY=0ZQ5utW+yM@ur&i6*
zmTU}Br5sBP8ya68Vw$jbx8w{7p@uZONo^Vx8V+j$D;gzQZgFg#a=5XvQT|1e+*)2<
zhemFP|C$WCwFM049;OI*uxKYI=OjExjrqW_X7Xn7XYY(%swc`N$O_!na<~!0rz8A8
z$T6YlKAV7LZ=<51hpx@71?LZZWmxsVMnFF~!Gmcdx8ym44O$8>1DZVytPNNtUKlFh
zJZR3C!(gz
mz`)FwP~@1jTg*XXhXzC3b7pOkOO5tG4Gf;HelF{r5}E*RBqTln

literal 277
zcmeAS@N?(olHy`uVBq!ia0vp^3P8-q!py+Hc>1fcIFMry;1l9{;J|_9%a`}|_NJ$&
z`}+E-tE&TLczJoZY}qnv)~tqxhLVz!sHi9h2L}@q6DcXFoI7h`fhrhFg8YIR9G=}s
z19B#Nx;Tb#%uG&bU{upMt9{_e!3Ksq`Qkna2@!vl7(L%y$eL!$vxqpd^veT%OrH;ED4?7PmH5hhuH-;!7%GKE67}xg$kshMkVhtp(=~
z6eOKvo4~P~;XGrTQ=2gl&m8UpUOo~bGiS=qVB)dhHzGiSnt
z2`w!x6%`dZIXMXl2_YdN9v&VxHZ}$Z1}Z8l5)u+TJUl>6uOd&+15%77L4Lsu4$p3+
z0Xg-aE{-7_Gn0YZ5=0n;c$|0y4qX2)eJbfe+Joc}rc0ST8V%eX(h_zeECvbeIssA|
z=U){(IMmMU@QrPGLmS%!1>wyN0(`X&2fi`2{$_Al;?t3ukasrVfd<3Ov(g7nZJ2y;
znxoj72ZqgBr`_99yVfQc-?ib9xa7RtYKfQu14HXF@yeJpvipEeVeoYIb6Mw<&;$U4
CQdZLd

literal 200
zcmeAS@N?(olHy`uVBq!ia0vp^JV4CH!py+HIB&`YPawx2z$e7@z<~qHmoM+_?M+Wl
z_x1HvS62sV;pN@3Wy`Etvl<#2N=iziqM{re98641q@<*B?yQLgs$eV$@(X5gcy=QV
z$Z_*@aSY*@nVgW2keHBggW(8I47bFC25GPJWeEvM0tpU`%Oxa!%xs)d%fx*85-ZOQ
u#&nkJ>0fhdEP)y+vNx;H~>d5hy(a2i~$9tMPdcZE5>@`=lL~k0Ar~sNPZM*9Jme>BFnLxMAvV&
z#5bVqtv=Tc%2(n$*n!~E%9N8>5mRgnI>rP4LEB-vktCgD^XZETKFp&lF^)K|hg9#}J?iv@>rWLGyQmb~S@BXetsV`TQeDcZ!3@Rzp#
Z2e1C4D?$72=A!@r002ovPDHLkV1g{9njQcE

literal 150
zcmeAS@N?(olHy`uVBq!ia0vp^JRmj;GXn#o1jC}|K#p{PPl)S*0|(O6)7910dwY9%
zd3m>N*-}zc5)~C?Vqzk6{_PK-GRBf1zhDN3XE)M-98FIb#}JO0$q5b&&zJ;G^11mq
wh-tU5A5%EMc0?v)hYI7u`x}^@!XGSPn3T_=wLsF(0;q|>)78&qol`;+0Coc_H2?qr

diff --git a/docs/html/img105.png b/docs/html/img105.png
index 48478479e6bc8f0606e1aaf0505a3d6b836772ad..6e24d57c8f743a02ef5b5430fe8eff70be153eb8 100644
GIT binary patch
literal 263
zcmeAS@N?(olHy`uVBq!ia0vp^Qa~)i!py+HD3-|}4dfUE_=LD_-n@CmiWPI_%$YD@
zLQ6|aMMXtUPEJBXLP$u6hlhuajg5hUfr^TXgoFeS4-Zh&tH{&yfD~g%kY6x^!?PP{
zKu)Wti(`ny)Z_#QCLNDAd={rCG#-4&#GK7MNhV@ab0hZ|ZV!gw9v*3jEA<9H8gg`;
z-MMEZJ!XwQaQ*<>vuDN<4H{~79ZG$19Cr^iE)t(zS#Tig!14sX)YA-ws&~|XIy@5W
z2|w}vz>7i`hAe(&`9s=0ygYZL6J)m4a`M>fi)@JeA}`6naFkp7Y}vxzyFdpqc)I$z
JtaD0e0sso!SSu}b3E
zo1%maW=_pHi2;x9A9!=1fbGcRKL-*PoIjvk0Q(?X-e4flm5Fff>VN^OtW
S`A!DtGzL#sKbLh*2~7aO9$Xjz

diff --git a/docs/html/img106.png b/docs/html/img106.png
index f0a8e0d93f3a9508a4d170d56c27097f982b2fdd..3429fd92c71880c2dced4bcc03dcbff9272abc10 100644
GIT binary patch
literal 249
zcmeAS@N?(olHy`uVBq!ia0vp^GC(ZH!py+Hxa&=@6_BG6;1lAydGqEKD^|>zGpD7c
zrJ|xDCnqN)B*eqR!^Xx&LPCOvhX<%|Pw9VlAjMb`#<5g$l;fS0pltw;|Yyy3QIW?tQfoboDMLqSU<6`
zu``j0x#J*DnIe13dBp<<1QHG$P;+S8DR8`rA&)g@9ixJg;HlUX5BQep9$-2nEwN^y
skQnEQn2s+>Z5%A@X(D?Mzopr0Q6H(lmGw#

literal 390
zcmV;10eSw3P)6}K4Yahhnwpw`fPi##bXr*Q3kicRY8(X{k2?v%Uq_LIz3G)+D
zScKT5G^SYuL9wwDtj@y1?tY598xkWXa9EfJJM-So$IddqHk7=gBO6_JYwi;Js3C_}
zbC{qyUbVnpv=Ul)*T2aRvMvcuym;*(C*+vXceX*k8TtW&cpjuV?`G0iV8OCcoHPC#%A?Y!g-eO&Mj!p+J=^T@!
zQ8hflQ@9u8%$r}pGcMuC1%ks^ajjGXs3tj4tQ~a0IF5mPn@zp@oV?!x1?UL)`2F}<
kFl082_27^F!=L{LUkwZ{Q~^9b&Hw-a07*qoM6N<$f+xM6`Tzg`

diff --git a/docs/html/img107.png b/docs/html/img107.png
index 67fafc48f0c7624a4e52099d1b4b961116eae87c..cb96fe7f1ab812c042793a4bb342884f0fdca1c9 100644
GIT binary patch
literal 264
zcmeAS@N?(olHy`uVBq!ia0vp^3LrKMGXn#oZ=&N)AjcrUC&YF0=FKZste7)r&V&gQ
zT3T8vDk^evauN~}LPA13JUnb{YzzzxR8&+XBqVrvcz~K-MV_7qq!>$r{DK)Ap4~_T
za@ssy978x}CMPg3@e3RbKE%MbMgpgZyu4esY?(D{RzpKWNl8gmRFs2*gNccWl$2D?oi(vQ6^tc8e!&b5&u*jv
zIUSxZjv*3LlM@mW9wZ)M5=r1$sm0dD!pJ7a-f|}|SK#Ea15Ar7eke4t#UyC)@(4}n
zeRS;}!!k>WgHr^X8D~68)L;nK5eS|9Md1sJnMiqpAwOf4M4qusgMp=%q=be20hKgW
zLxT@_4L9`#4j-s_qcWx3OOr2=;lk_V4`imwu)Rxf-w-vWjfdevmQ2RA7gOATZes9s
L^>bP0l+XkK=Alpo(KnL9rI?UT?#%8pBFbYF_|B(%#ku=FrLDfBIXA)TErtQ
z!6URx0Lau;^|BXCV4m}JK|^4}e8mJt=i|L>ZM>{JY!+88vVRZ^I#BY!`4F3>AfrM1
z+e7TltOp$84xC(Yu
q7=g4x69b(>j)`@Si{`hPGB7AhScud{aTEhXiNVv=&t;ucLK6U-zJ~Jv

literal 273
zcmeAS@N?(olHy`uVBq!ia0vp^vOp}y!py+H7^-K%0_5lh_=LC~IB;P3^5wm~z3J)c
zzP`Td>gqt5EnBwCnl-DTp`oOtBq}P(!NI}A#6(I;%DG+aJy4plB*-tA!Qt7BG$3b^
zr;B5V#MI;j2WH`b3h{&<6NQG2kx~vqoDO2gS=me&LZ&qwS_+rp>e!alJU}APfZVJMoxygP6|82
TrZB$*x{krq)z4*}Q$iB};bT}F

diff --git a/docs/html/img109.png b/docs/html/img109.png
index bc3978ffbfef6d64b52a934932b03e5e7f8ca4a9..c37fb3777baef35bd62274b8ff7d0f37eaf22007 100644
GIT binary patch
literal 208
zcmeAS@N?(olHy`uVBq!ia0vp^!a&T&!py+H=wZmE1LSB0_=LD_-n@CmiWPI_%xP(9
z$;rt{NJt0?3Gwjou(7c*FfdS2QIU|4;Njr`D)0KSXfKdrED7=pW^j0RBMrz2@pN$v
z;h346;Lym>l
z{NRQS+l@sIwWO*Y3f&RYxLKk`Q7f{FTcW6s@g{@e8J@dZe^~Q@<}-M@`njxgN@xNA
Dt}H%*

literal 284
zcmeAS@N?(olHy`uVBq!ia0vp^@<7bT!OXzGIQ=jCVj#yXz$e7@z<~qHmoM+_?JX=U
zOixeu_4QR(R|o0h<=wJn%dAOiZMtq)huJ-v%mTED7=p
zW^j0RBMr!z;_2cTA~AJt;Ax@53LG)I+qwe2{;%KWFw3m{OvxLb>pV3w&{Nw$~HFpgny6I6A-S@(u%P--g8IH>&Ics
zoyp%c!=L@_ombN2Beb6FPX5g0`l4&!iJF?7?SHnf;zV|}M}yal6EmOXlw5spdg{KR7gljJUl!wFfb$}
zBp4VN3=9ka008P)%boxL00DGTPE!Ct=GbNc00EClL_t(IjqOyuO2beXJ^5`kC8;75
zsnEDM=Mg%%SDXYLvMEko-7<(|P>6$27wr?+OoEGMbPRoh;C~YoL?{%AH|f1;nxuuI
zgF_GD%gOn^bCY|&djrfuV`K*Kd&9J{|4q$${G{AC
zWJJ<eHg)OdDna2M>ojVKzoBs*92{5G~wP-S9iH;kj{HxnrP`E{PJ
o0++3<7x`{1Ru}%iR`^r=01}>6-GnF=5&!@I07*qoM6N<$f*L{Jl>h($

delta 532
zcmV+v0_**e1hNE>DSyDgz^A9Djg5_GXJ<`KO(!QO0000D4Gpxkw3?clfPjE>baYx;
zT0lTRG&D3C8X9cetX%*A00DGTPE!Ct=GbNc00FQ`L_t(IjqOysP69y`Jq)h}7M5s?
zG@4<3R2FC~DQIjAG1gWVgvt+4E9i)ovCzt78ylmMPgo-f7JtN0Sy`CaSQtWMj8@(q
zW{1auCKTFmvY9<|&b@o*xj;X3m&{=Z!hqG&4GfFvftd^eEDcnD2^N=ieA-F61L&=*rEwNQVP2iZKG4$PF2b>C1Ispid-nVEo@*@YT8McBF-&o%eB|h
zPbU};w69yOmfgRK#BWv~KDbA{exb8M!JVU^M=k6~hkvl*MxE}%;Dc%wZ@?^6E{YeBM&qD2H$*|Eh%(J}(@YBS5Zb#})oldm2gOxxp6zGiSnt
z2`w!x6%`dZIXMXl2_YdN9v&VxHZ}$Z1}Z8l5)u+TJUl>6uOd&+15%77L4Lsu4$p3+
z0Xa>cE{-7_Gm{e-nAq7QZX7#s;M@t8#Ldix`p%5Z%*jkK^BVgb9~yO}B_}*dKfqKW
zx#QrmjfMt3tREY1**Cmk=aJD<_{DUXDd*RXYuk-Ce2GtBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*IAxT6*R5*=eV1R%L3XBX`fPfAYLj$_t0w~R_z_28MiNOe~PF#TX
z&(0MNU?>zo
zm<5*MT)+up-)4|o)Wee6z+=q7yMghQ0zwr?hU0)+1TNQ;l!1l^0067`K13}wws`;m
N002ovPDHLkV1m~nn*aa+

diff --git a/docs/html/img111.png b/docs/html/img111.png
index b00a8cd8e30966f7b4be07de0eef8daa2abf7a4d..df0c9d187d3c21e0bda05d6f41e2ee407a634ae9 100644
GIT binary patch
literal 793
zcmV+!1LpjRP)RHR400001
zbW%=J06^y0W&i*Jmq|oHR7i>KRXt1;K@|R$o!Q&F-Mv}0pi(Y|=usdf#tvcp!CXP&
zf)~Zam@Oa@wID%-auR|$y9*jAY_PGgIuoHZpvKN*NidQ$uIA$4*m6MtG6k#!_7PNO6yFl%Qi{_VR3zBWb0TSf7NZ-gL%e
z*Kv_|Cs>eor|c5?gUuYq@MMw&FZGecBNiO~r~Sj2Vl~qye-DjX?i&S0?Mkt1EL5}G
zYC{m^9-d~R$z#!aNgjVIAIiTUlB*`#
z$yp>41f(dGOq8L4k2Kkn0x8H=TU~GhSXfUkPGkbYNI@flwfH+^fN9J@tcE&?m)LWh$m)@-VK^uuqJ5d(daEpv^+N9ffK$9CZ;JQVv%V
zb9g8Z{HH0oU!=H8(pKzO*_}cV!eZWQ~y*O1D&a)IycCxRh+`1o6XJT{z=7qJ`D^7DWxqn6Zu##0Ys>KIO09GJnIw&DtBLAz{H0t3V2Jl?gokwvF~
P_Aq$5`njxgN@xNADXmAI

diff --git a/docs/html/img112.png b/docs/html/img112.png
index d5fd8d1b3674a74ebe0c5e98ad2218e3bb704899..69215c619b10b5bb57a01f7538b52331a1b7d17c 100644
GIT binary patch
literal 406
zcmV;H0crk;P)RHR400001
zbW%=J06^y0W&i*I6iGxuR49>SV1NQP5W&fS2QWh@ehz$!kO2#bX!ro-efYq@R{&xt
z5UU>vu!8jELpck8MjIG>=VRb!U`Swy5C99B9b)B%2ypTz7(i7{faxd4P9i}8lm-RQ
z15gk)K=_OhiVd!?fq~_Liwu;h!w*!Ptko?$YGVDVyL4Nr+?*aDO90b;h+kO~F{ZxGjE
zCW8Un28bM7zr!*HI|fiv07k|H1qNORCQ!T}YhVTl4m2C`!~QCti5(FPQ*1-iU5y1)3|!py+H82!xa29RSA;1l9{;J|_9%a`}|_NJ$&
z`}+E-tE+>w@bYfivSrq+Sq%*hB_$Xf-NNAM>gTe~DWM4f
De`HvJ

diff --git a/docs/html/img113.png b/docs/html/img113.png
index 8b8bbce788f2241e8eaf8425df45691cb70fa22c..1ba043fefefbcae58c3441e0faa6d29699ea1e65 100644
GIT binary patch
literal 426
zcmV;b0agBqP)RHR400001
zbW%=J06^y0W&i*IC`m*?R5*=eV1R-GFnNFh6(oR&1q>K~i5Eyn@5YqC0PGwXdKnlR
z7*6ltCqgrBzz4(=*ntK?KmY@S9AiTOLp+cTw$K@fp9E}RaA0I`fGA;3fY1UAj1<{S
z3NS#i%Ls@Scvzr3J_rSJZ2?>ft3kp(KA;mHFffC-en9+z!GRy>&kqc>xFdAUc^qhNId(fq|3C{-HN0giw+U4B{XH1+W?*ahMi>sYBQdNtwWq
z+7c1K?ZBV{ROJm4f~QFqFEGhDftg_j0|PKgs%`*N43h9TahM6FW->D{eP9B`8h4NY
zB=QnrN;oGdfT*Pg(QZo}88{LcxLg<*%26D_>4w6c1h%#Thqu9i86?|?PsMNn01@>p
U8W?y6Z~y=R07*qoM6N<$f_;gUDF6Tf

literal 868
zcmV-q1DpJbP)BjLjd5{tXJ=MthEt5z&)qbBc9MHfN-JoU#kE8Uak>`Ng_iAqWjbt8b
zt<>h|!NrizqnLG)+1RHk)utz{sAd>d|5GNg1jt
z9JrX64hO?Ky6ICX26EGd{N-+-r{!o#kKrX`{9hS68umfWY*k(c#J|T<7LJqwq+nrV
zq)*1tZ5D}>fWpRBF%_^{Vvl%I9QHnBPNd(%}9O|f%kBTr(Ju9=pOa-P%vN~MJ
zmX%ztxc#ANlxUOnYbvjuZ{eke1~VpxE(KVg;^wc5etB(kLqM0(0iug@mv_b%ihe1e
zeLbDv+B2+)PHJ0MSMt@?%&teu;{?l==yA2$3d8!aU%uC4Ma(XOkwWzW)M?>AoTziZpw?{0jarsnp5N}Cu07oV$}
u8~N}_v#vGAaE2UTPPgEun{K-4|D`|9A{gH7Q+ZJU0000RHR400001
zbW%=J06^y0W&i*H*GWV{R49?XkTDKHK@f&N&%VbJ&jm!brP?S&sSt$=D72y`(Nn2c
z=>U2K7jP1V1L(AN_9+OW;@_D~Hvi1O^A7|peHvbo_gO7sE^oLy9eUvs+TUqBA(o;v
z0%h$rrOpZ3$GFUyT~^`H-$XuQ>JK8RY28(l5bD&c5nKO`j1b}{HH%2mQdwOogdi8<
z9|!~a-yF|yLsvZd|@o9x7e(k?TjouSf=#QP>6R)Fqvn9MCJ
r*jke5gS-}D8c)M?d=~5vTzBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*ICrLy>R49?vQcX(4Fckip&N!XUn;Q2bvloUg1ra=gc#=7Qi@^g(
z@Bmr_7h;j(Qa8b$ouG&d#Z8Xj5zI>?r0vG8#1Hyj-uLBuc_{%xBw>+pP*|dc6;{^U
zYztANlD5{ouwmIze}N%;V^bI0X%2G?7)%lEeUT;J3q59n5DQGaE&uWBz6bU};d9I(
z<=f3YGpo}o$P)$-Dt{&>DwKzA!bJkAcZ|qcZr&(kVurym=h2l^1K%Ox9%1wTKl3kf
zQKxHrkt*aP9ag05XBx&M7jJd4{c$Bv;PuIi4G)`T1uE=HkbMOEz!L($m{zHQa0i@^
zk(vl)sN)o)HN;N8&v!0gxA?h<#{)YcEiCzojWc92oOZW!vAae^vL(kI!~erK!M`~g
Tylah!00000NkvXXu0mjfF?+8l

diff --git a/docs/html/img115.png b/docs/html/img115.png
index 97d08ff9cc6a95c58950e0d0409fc8ab76e4a17e..899aed9a7050d320aa055566ea58aa3b980d6303 100644
GIT binary patch
literal 321
zcmV-H0lxl;P)x^v0000mP)t-sv$M0P
zsHmKroRE-^goK26czA4VY+ztuR8&+*NJu<9JTNdYBqSsl7#Iu;3;+NC>RHR400001
zbW%=J06^y0W&i*Hzez+vR49>SV896i9DoD|4oMD%1O_&K5Q~Lj0&X+FO1XeULJU8n
z0Ek!1%FXbV86uOwz=U5bR-nLO0H(Pa7JyA;U0TK9Kytpcu`-
zzz@&sBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*IB1uF+R5*>*Qn60MFc5ul8X&0&`2@@CRiw_95MR(w=_f>DW2n5s
zfU+=DLI^RYtz@-pB^HK?3I2pT*P$(m%EZto-6ej$duQJn@W{vlwBgP)xl=N`(5>-%
zXh;?|gI10{`#ZgXgbPQ~uOdL0{7s+-i!L)gvg%#NSmR~GtbJ?_*_8VylvHhtA-5qB
zewA!K7eKlV5ua%+g$V&}wqTc?(1Aykb*;6+2spo$lv35VsMrEWS(RHR400001
zbW%=J06^y0W&i*J#z{m$R7i>KRZB=zQ5gR2Yvx>M?jt32VRVB^gBF9~&f=D%Sy0_6
z?17X+C{9H%i%=IW4rn?pqPvLJE<{>tG(nq~pvQIs1()L@X%Tc)YG^f`J9ozJj1Q)T
z5aG8t_y7O%o$o)7|DFT*L0|=2#XdZ@JfBAmNPw6}-$)Rz0?F-ZxK`M`HU5i;Co0^!h|k`z
zEZp&oP}S&-%I0+VtGrZA_v4iGal=Jhd=MGbdVoPBq;tn9)Mjo(=sMd4ak|m&xa+B9
zDIfNZn75r7q5(4sq6oW_QJVPnV=Q84bM>Vpmz|^}gQQr28;?XbJ4qB})*3KYMVR0T
zWLV=e?=8aW7$ULa(BPQV6QqS7JtW5H2MhEWIYX>bTKE;8q@!lRL3qyPQLhZEYO{pg
z4%@ni{{n%j3|{TfFXT3bX52=a-V|5eM`*SpqHo3fgHXIWB4yk*9I1|bbIJO>e#SHK
z9v{(ShM7=rih%-+7xfF67jids&0sWU$w_WGxvpA@>*HR7YPBQ@&ZD_V1)`@AW)h9~
z@~|wJ7r@u3F8u8BsO%qJV-lTg
zqvy&JJiD>yZ!6}3E0G0!@UPDi-zk*0v;1e~xmFsTx~2oG?$r~R*7oaZNQahj*rmD~
z+#X-x7EgRq%p)ZY;(JQOj8D97(_U|j?WlDl8zz~U^mXu0X|39SLEXb1w#ILI)u6Q|
Sw~TuL0000q2NM$$DJiL(J8NQrDi}+G{DK)Ap4~_T
za-Mp+IEH9UOio~EW)J9LQCslghJ=KO#0EyUG>h(s4vZ7B94>dVZeaSz*v6{B{8d8E
zC+R|p0fSM#j>UnK2lhT-2${%u!NKbQlfg;WB5`egmk#+3R*4yE5_6t2M)7P}(a_w;
z{v?mBEjGO3heV!14#ThL1SW1~X7(#0tZZ^!F^*gjoD0nuV{IMTT-(@XmdNlQm~)ri
zVom-!;Tgvd9N635_)x^7qmx~t#F2+5y@8J{Np{1orE_><_$4H-G4yiJIFP_BW}TC;
z``08^4W^17NeMZn+Xr7TZ1ZHin#9P)R`7&Jgn{9poaQ?HQw4%R4>NeW`njxgN@xNA
DY@Bqw

diff --git a/docs/html/img117.png b/docs/html/img117.png
index 195c0224f865d1458c1e406d13197a7caa4a010c..5a4d88133467fa3d706e7a85275ca93840931538 100644
GIT binary patch
literal 341
zcmeAS@N?(olHy`uVBq!ia0vp^DnP8j!py+H_EP
z6IxnYDk>^+a&i(95<)^kJUl#XY-|h+3{+H9BqStwczA%CUPYds2c#HFg8YIR9G=}s
z19C2Vx;TbtOiWH-Xl7CfOK50hVQXV8;A0lnXFkl%meVj-a2?xf8?giIM}#FJ8kWc;
zJ2Nm#A7*B2Q)iTxkhvjY<`BYRP#}~o!Df(1XQjnR#HsEg``JZx0-}
zeBb~Rm#Ww~&NDp55)upkF}R=eNn=~a@AKdTYZJRd(n`lIw}af-`dB8oePc@btlr4M
lFS6ahoPoJJPR^Z?p|C=(x#(@@PoVc0JYD@<);T3K0RZh&Y`6db

literal 332
zcmV-S0ki&zP)x^v0000mP)t-sz`($#
zr>BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*H%1J~)R49?Pkv$5+KoEt$B>1z*Dmj2fTEQZvphAuyp2#D30;@T<;
zZ3MAq)|zTxk}&;t^)uoJNm&?AZXhxveKTFOU%)gRX%)sMi$to5LX~@o81wtkAF+cK
zomZ@9&Ni*LgUdFZ!(L<@T|zN|6QPzw&mWI%zy_8IhAtkh&wXlekRQ1|n+An%oxP25
e&zb*gsS55wA0ScBvIA-W0000RHR400001
zbW%=J06^y0W&i*IcS%G+R5*>@QawupK@ffSmA%9ydxc;d3oWd!5LAS4NWhe71QC>g
zjg4TbVzGq@u}X@7Vs%BZ^$NlEenP;;GPTvEveenTRnAKSl1?A&&di(L*|)O`BoOgj
zK?bkHHKfxM*%V-xq8#`nKNaqj19Wh^`K*Gn^UF#Z6fxA(u}>pFI6@G?#$g$YN#Riu
zL4gjjaX_1RBN2qWl2Vhay!j-|1D5hFIjtLRk4(Csnn2W4Tzp3%uZs{D#96lH;FKeh
z`Md*O1ouoPU=<{1xX19AdB)j-K^N1VAgSpm#)!{XJy4xz^^C4Rj-|UB7g{d~%*RZY
zd9kTd5ALz{#ZG+Z>v-*$rY@eKoviK(xr){Huu*RX$hB+dz;?WsGWt6;-z<5#kYbJ8
zFv18}?x3oQ7f8^NE6Gb-(bI5!3~Simk+}#Dx{|Qfxus`m125<|VRnVxX`%b^Mju#U
v;9)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8{LP9`5Kr}Qo8X6j8W)DUH
z0004WQchCL+PHr#RO-iOy
zi--uqQ=&_nh#XNSCg%#}7#YmEcF)%%zfL*eFF`#GGnE(vGiE7o>j^L4ylYRpwprvc
zAf|z8trUspI^u7(GbMD!t|D33X6Of!tH%JSbDTo#
zLud6_m04C#ipMAyOSU_xd&cWr`NrCB*(tx1ym^WmRmv+a`EWcT}^Kk?tPqP7c
zP%$HE`=?M3R*;x-jO}SDEonX=u$w*D5(d2Fv5$D41qFGNZKCXG97k>0r2E7MFeVxd
zwid}Fq9Wrcv8Yi2(XrR}!37WfQYzV8Y}`f{g&?1#2ujS0F8fI;eN^5y`-S*$_{dt`
z7|hIR-vL%giM%qUW!UA!D1@R|vPSYi9uXz2ml>ep%8DGCrJ7!R*!Z?c_S%4z$-<;1
z$;fLBh_Wb2@T{WX_iS$~YeM)LD|)N;6d+nn>W&F0XDu0-Qd=}h;cn0&J|Ek76&0m%
zR*4N;P%*02)HQqvMqya(wCp3HrRB1sP1Tw}7MKFAJR%B?(@Nq}X##Ne<_SIoHqw{r
zQgqj0eK-w`0*99+jY^qtW?P&V4(
z;+rlieA&fi)fauBq-zw!@Z2X|sI4uUTmekLHXxo19!i6}Hc{in8EEJoMBCM5+)&rs
z6q9e0Nu6)+O{WaI0_u&}UtJ-Wunwu@S?k(@GwG)6jt>&bnsq~snJqG>7|#i0&^^G$g3y71
zo2_OV%>{%BjXXnx7Z^}5^9)vZua1j~_yB+CpTDcBtLp(P#H_Sy7or2`NvavlKZyJkXUY>U^-@@~8HT6owwqv*iK#q-4HuYLF20ld3mjVx7dEv=
zF1(~SKLoUx?)q-L&l8mlAV>G3z	#DSDc|c7RHg1{!y_voyuqP(#rl7X3>EZaH_p
zj#dj@K&*m

literal 337
zcmeAS@N?(olHy`uVBq!ia0vp^%0R5Z!py+HD4X&IBw!HW6XJT{z=7qimaUC&)78@HlXFRP3&3
zIA?o+H|Xkt158Q^4vfpDUu)o&IyJi?g3Yy!UFGmch9ghz9lo%q{F-xHB@a)vq=a9i
zY(-ll(`qK>!;%}KWH$sd3QJsLbk5_AIKh_FX83vS-c!6hYj}8$OG?NoNuPhgFe%(&
gYY>CTH)ci#Ie*3G-49;926~Ob)78&qol`;+0I8pHJ^%m!

diff --git a/docs/html/img12.png b/docs/html/img12.png
index b6e1ab70d80428faae5ecdce702547312aa0e538..9d510bb967696e971e61869e9e397f72e9c08386 100644
GIT binary patch
delta 66
zcmb=eouDbOdGqG~4F4}OFfjaQVBvePbE2iRChrLuK8~Z!6PUU+8aUWzC^1VkvoqLi
WW!!nO#xxnIlEKr}&t;ucLK6TtwH9aq

delta 66
zcmb=eouDaj;J^Wf{~&mgfk9`MW%oo&X-)PCmNo)itct8+h75wd2Chs7Y}^bHcbO6u
SZeH?Z00K`}KbLh*2~7a%Y7_ea

diff --git a/docs/html/img120.png b/docs/html/img120.png
index 017eea044bf934f25bded7f4bc5886f7c3ede020..1e0359c319c7e844a0c1752876539491835f8e91 100644
GIT binary patch
literal 271
zcmeAS@N?(olHy`uVBq!ia0vp^qChOi!py+H==QVX1CV17;1lAydGqEKD^|>zGiSnt
z2`w!x6%`dZIXMXl2_YdN9v&VxHZ}$Z1}Z8l5)u+TJUl>6uOd&+15%77L4Lsu4$p3+
z0Xe;%E{-7*Q}+i!%xr9GEzAD@w_hN6_``yR
z$?|739HuL>%;2j@V4Ssf!-4~yjm?e^53){pz#?$auyMk@|Nke>?GoRxwJpS8hEAbB
z!zS5jhBpi?;uHQbr5ML2L@YZn^}t5P6VJF3A{HgwzQl8VOHasofihi*8U}_<^K~U2
T9@0<(I*h^7)z4*}Q$iB}w;5wv

literal 535
zcmV+y0_gpTP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*Il}SWFR5*>@QawupK@fd=XFe`j@6J|(T&YAcg@vF)gh;L7IH$0kXWQP7H20`S6exIALc_uNtp+`v-@^-=FRQ^15jv)
zK>{XxlS~%fKF7jY1=6}#*L9b9_#4)D4n4Aw;kcx%3^p(eQ~yVxAIOU{F0G#=piu?4
zaxDw*qOu592}mqF&9+hABQ6k76>ubVNMvti73Mes#sNcal$t_KrdN`^)Ki5YB%DC>
z^d4#+m82NVFyJ&~9f}3tgXz)RHg#lpSX
zIj84DoOd#yb&A`-UA$ZIM~(~OoUc$Xmbe|0%BWX1Bz9@&{y8=5)M
zS#(^WE$<%EbZtFTxA$-(y&i$jw3Vjiw40+qOEMODDaUX~Uw|W%yf%Rob$yMFE|8f4
zHl!DC6`p_;{ff&zEG*Zx7spoj4?LiU`77Y9uaT99B$Jl=c*(5+o)5QoVn{

diff --git a/docs/html/img121.png b/docs/html/img121.png
index 68bc1a028e93104b22e585d6dba9aed0030d8e59..fb0711bbd65e35a58eb1537f0ef61ff265c219c9 100644
GIT binary patch
literal 542
zcmV+(0^$9MP)RHR400001
zbW%=J06^y0W&i*IoJmAMR7i}Y7PfK7em2^3t)3N*cmP~faH+O
z0l9~fpD&rA!42#lK7NG_2MGJbfUpv-27*dP0VE_6bT^
z3_JmB2at?0UBLW+g)@Qm1Ab!|7(5$6BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*IAW1|)R49?fQaet>Fc5voMoH`pSs!4F2(c7skyeP315l>i8YIp@
zL9yZlJ^{)RK$M`BsR4;2gpLYrOUH~IAX;enNIWSoZ)WV7@z{XJ83-l%Sn%gGR-se3
zK*b{Z6cXgMuobF0k6ANaaPZ}pRj4al@Q-|fC0a{c7e{bxG_h?IINLO=OwgrlnD^NXfumAu6
M07*qoM6N<$f}3%zTmS$7

diff --git a/docs/html/img122.png b/docs/html/img122.png
index 69253a7820421c3cbae5e138bba5fcf6c740d07c..6ffb8caa238929bb8fdbf7aadef1595c2e899796 100644
GIT binary patch
literal 541
zcmV+&0^RHR400001
zbW%=J06^y0W&i*In@L1LR5*?8R6R?>Kp1|Krs>hNUIqn0hq#DimaY;|L~$@+DH$_3
zC?W_t=ysMW*{p*fW5AEqf{W0l|G@r){)7s3bMSI!+mwE}2nBtH_wIe(=bqfXM-FI%
zR@`TpO^iVu^X;h?=XHj%m{=k*N$5Pa;MwC`M%2@iYslaQcAa(CP}L1FI{PcThMa)0$=(Q74<-J$%$dlA(^+gQL!6I-eMf%(%1d
zj}!bsl)Roa_w$wV(a4&L{3*4-8mwC{4l$r2ZUHSm=r@wghnU^*aGLY-Yb+x6e8KA%
zt0!2z_xzy-*CJDADx{9bgy9gDXb1yW6cz$3!+uv?hJ^cmp1r-{Z&qExswU$BexYK$ig4-P#(icw3KK`g6sybfrT5f#{X
f5)2UhV*>C6v8z|%q#^fv00000NkvXXu0mjfUL5fG

literal 272
zcmeAS@N?(olHy`uVBq!ia0vp^Vn8g%!py+Hxc1!P&p?hrfKQ0)fddDYFJIo<+nb)A
z?(6HTuC5N!!ppm5%a&QQW;HZ4l$4Z2MMXI{IGC82NJ&ZM+*uO~RKZvh^!D;BZ2wG+}4E1W&B5GPGVz{&^yf7m$CllfyaAK
zGpE?SXIsb4wO#UD~Kn%r`!v`)KdhrHsqc?Ixy8eh|aKz;Nfgg5ZG{
SF0MeAF?hQAxvXzGiSnt
z2`w!x6%`dZIXMXl2_YdN9v&VxHZ}$Z1}Z8l5)u+TJUl>6uOd&+15%77L4Lsu4$p3+
z0Xb(qT^vI!dXp0x81neoavT=yZ+^%eCRxYEW|zvQrZHLILGvYEo|^BH5*ASoIbz3h
zds<2-@i?3d4SJf8SP;SRtoZ%C-oxBq7~NLH@XDNu;1y|IWyvBTVPz%tph@0N;_+(iY2&~t6%(#fB(WUGZ3tRUFwPik`{F6Vh#jJ|3P%rRL
z*mvNJ{(*}J{xB?$G@kjFb;l$YD~TtPJA_0X0$Eu2UaXoXwPC7Tn?X!UM*4%IqXwNT
fAG4dK_k=Jo%u>t+

literal 571
zcmV-B0>u4^P)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*Ixk*GpR7i>KRKH8ZKp1_Owx-vlHj1-^h=ceO>L5-E4x&qE@sH41
zhafn(1t$@qLEP-n!9{V1pdeVJqgaRh1)5b{yu0K|k{T35LGaP$yYGGP`}*##Es#Kf
zbrDVW(vSgN+4b?pSHu+3Bxaz)@;xBXuSQZZody@lA)oD0K
z)nT-GEjEYyd2q~pU&RqbzEIVAym3&1qFfhMBfU4va=Pn5c9Xz#TJn!iP;4gBl9QqP
zq*M39NS1nTDa6oX#u(WdOOz*DWZEU@-3hM88|U+FPE6j0GR8FZ)r;kxPWDCPKk4Kc
zv&H^MXO(iZRKsg*3}<|^gZpmZhi>GiO11p}n@$}CSNELQrs_}!Xn?JZO({3qiIb{g
z<#f&MU=;l$@q_4K__+LdW@mN^G+GR4lDp%)7bW!%1poLWcn2kWY@3y3x>EoE002ov
JPDHLkV1l(#{N?}v

diff --git a/docs/html/img124.png b/docs/html/img124.png
index 798e786430d3d0a926eebe4c49268ae7d27a51d9..3c2f35d48c28943cea1416ac0c4837a7d4b37c78 100644
GIT binary patch
literal 229
zcmeAS@N?(olHy`uVBq!ia0vp^f
z7sn8enaK$aOw0x+YuJ1?78zRXFx+5he1MT(z}_O^Km(7S!3M{YO))n%G&XuJOk`$W
z-;`|7B^9
Z!Q`~yZ28txra&7RJYD@<);T3K0RWZJODg~X

literal 595
zcmV-Z0<8UsP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*I(Md!>R5*?8Q%y@8K@fe@e(cUUDKh
zbq~;ioRSEXF$ysBM2aB7va%xj0^8-qke)I^y{w`7LlKKDA_nr_;a(1@$AS(GA-t_9
zL0FA7LHH9vK+d%l;F{z@<=8Kz4sdL(zuV5L5-=?&xmms{1@Mu$P&z(1kF=oOVHYAq
zW^4!9TK`h+3t}qGkr?U_vg>1oDldg=agUmyI}GH2Z_CutShU*B}k@&^GU0i)R&
z_Njp_)71)AW0!MtoG5e-m(}2)oPE=~28U`z(aC4?;k=A)O&GI`kw=AaE;{xoT@m2F
z`q92WI7gwq^u%+*Cn%e4-eJlFS_pgV#=blgpi-!jr5KKAy3RED;V=Dqjkq%3IRCn@
zh?z5^KAEoPI63;6{UbosM34`}(G`9n5ZwUG&%J^M+C=Y+>jz;1I4Q=nZV6r@KA|+>
zwy=VxYn8Br(uf+YS7ZWUd*i~c>oW%T4)^?=CAh6wjw?*=;^y~Kmtm*tRRHR400001
zbW%=J06^y0W&i*Ii%CR5R5*?8QZY-zKotJcT+)QLNk_+eitZs-QuN;AH6FTwF8x4+<(cI`{*Eh_ku7wxnrlEp+S$x%a*I^77uhe82z%1_3o2^UbUKF%6&WiTYo@H2D)I539V6+u8D^lJe<{~%SXv|
zq0iiB8a^DrV1fZ_@l41ch8zXT28t+0zHX@s8)h|EP@*0?g7~DcCy4Pg_c`Z<3u!dy
z-e^MMN6{Nx0tFh0QW7oAFX2cz1)d_(tZg5RWzB*mvcxY{VzQtimg
zI!viOes0}P>?SHnh-zeRn2hc3BG2+}^c%lrKwEi6n6;Trla+~{nJ>I!2eFq2NM$$DJiL(J8NQrDi}+G{DK)Ap4~_T
za^8EoIEGmCCMPg3p9{6&xp834GUJG&k`f{k5E6UbyMWO&ox)WZG7CSbd7P!L16?}LPd2Mbn(9%*0*Stq-U%Z`n089SrA
z%g>(@73byzHgFkwnB^oqdDyNI2vpAXvCPO&qNKpj;S$G}sSOMlCmQ@)0&%FNfWOm`IAdABvW*=;Ed}ww!h^;Q=w7MoEqmO9#fhGJrt-==e
z1}=tk7~AyTTPsww=85$iHeY|Wf_0Dd3?>OV$%Kd%!gaGWp7#p?Jv_-|^B=}4HXw_^
M)78&qol`;+04nu`G5`Po

diff --git a/docs/html/img126.png b/docs/html/img126.png
index 1fe14d4673902b406e48c274d44fb7e44cf3e24b..16fbe1b733bae4250583c7a87cfeccb1ffb8287c 100644
GIT binary patch
literal 579
zcmV-J0=)f+P)RHR400001
zbW%=J06^y0W&i*I!AV3xR7i>KR6S3^P!v5aggjAfiHk7~{Rs>XCPwpuQE{?H2Sx`6
z$1WyL=0yP;8N|U^2EvSqgT{rQz~F9w!W-E2mKI7WViO$Hc+&Q@_nvp|d0zzrXb{ka
zKr9rl76dC;LBI*;QxP3bF-GnD`5ThJjMP8Veve|J7dCjSQ5C_2cJQEs+hSjnUYzPF
zKmx9*<6Klhov1&pzfd7^#CQzhBlE36C&!x6PntO3#C2d;c^#_nHTpt;bzcIW6SWa)sSjBI#85@C+-Boug00hPl8B
znSDl5K0)KxZlD@U^CmX1*-^TqVi`kq`jzR>5a?^xBqd}@5>>n=2F7}6dP#K9G}1?`
zH7bU(zW~DnS)+S(+rmlFz+EnqPMc^L>!r&ft-?(OQ=mCb=YRZs#QV9#!v|Cz{Pipa
RT(bZG002ovPDHLkV1hAQ_~FlusIqNJ@chPD
jp(9o~2R3EB)?#Bw>k#fK5z=}Aw3xxu)z4*}Q$iB}Nf}Lr

diff --git a/docs/html/img127.png b/docs/html/img127.png
index 5032beaf50de614cad74a71024d28df374a3cfe8..f2318bce2e9019006246abf07a1c3c52ed3bbcbe 100644
GIT binary patch
literal 581
zcmV-L0=oT)P)RHR400001
zbW%=J06^y0W&i*I!%0LzR7i>KRIg9NKp1`P)^eGvYJEb8h-L%>=A(`QQSqyD#-7&RoC&7|O6vg{kprYWu7b~S=v7y=a=-JlC
zY|LGKSn*L11AbQ9vVr(b7Qdh}&4+n~>Emn0$NjTS~W$e*VXWL9fJufKZ
zerC9G0mblQYrjl!W?NBLUn`o#7~H=As;BM0ky<)8C5
zn~00lk4C|VR%eN7?$4^3X*yE5?^(YLDS2n@7^HKA=BCm8aJN#gBad`DZ6@z7on(8G
z%P3W#4Uj(8HHOzIrvsGR=(1dAg+YN<=Jo76-84ntIi2X%OLg3>gIHy~^_^z0Oi?l#
zr#MT?vw6BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*Ivq?ljR5*?8RKZHaKoEVK26dCPjp9)-C<>K|{e<`dLOtrKdh*!*
zLGUDkPz61ChzG@kU<5%C4-pX$hSH!B@qMcnGl{$1!z1PDku`qXMlULZu-*}w#FPayeGB)Ykl9BBzVrAOEU2r
zJM9Hdl;OzQ9|Phz@*0u}h-R6a3g+nG9U1@veg-WR6PXI`4nGC8(9~rRL2TwQCdNcT
z=E<@P4wGd$?7I1$$v2cj$+(a<%lrqWd@J8lBZ|}mmLjh`n!}%f;p%n8MnbwTii@iW
zvgqrS@fT@!fF-iKSM5-i4unVcS80TXydMC|;0m1e)qSJ0A063rU@1ZtRr_y7gknYp?Vr}}KI^H_Tg+I?nRtz62)X568PRVUqo
z_}y`jr5u8$r{DK)Ap4~_T
zazZ^_978x}CIhuSU`T2^tI*WAvzw8Nr(p)`v6;6fF{qf^L>y>f-7ve&gh8{tja@;O
z=_C)&og5y%8zGAt7U;3Xv(_1WWa*8?qJ@O1Ta
JS?83{1OWc$Lt6j<

literal 625
zcmV-%0*?KOP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*I?@2^KR7i>KR53^#K@@#Ep6>15Y&=0y9mjHDB_>NM(MG{SvlE|3&z$}~%=D?$uOYq6k}HlrwrEQz);#gbA&a_Lj}XU0AEyvt?a(j4U7eVF<4
z{+qXdb`~f?swl$(LY@M(gBV$!IqM|&3%5(|(EmN7f#;2Z10$hH_Qca}h`xr#+oK2w
zW1jM#PaZ>ZIr=*>dD^msB!Q#0&AJsTef2F2+7}D*;K-XfR}pt|ltaPr(ac;l-KI+=
z%VzFyw*=N`7@q1Xs%E8(>jTvK)v{By_ca_?i2q8tM{gNKXHz9bt&>K5_ld@`!{+ceMxvxKw%PcBE<9PBSlT_;}kq_KxNKkBE(
zGffs43)Nt9v9PovlL^1dI>$*xgONB=`n%++M>fZ97)MieK8-*A2Ax!XHg?7%2
zWNtS|{ERrC=q@z~VOz}+xT~02F8D#XBo4ih_rad4xb)g``7*ZPP7vosmp8oII5+dc
zqXyJc{@_%{w^@@bKI#SPAA&Et1;6b0Wr6{)HAwM)3=Ql)HFgkJu*R<_7ES)D00000
LNkvXXu0mjfE1w>i

diff --git a/docs/html/img129.png b/docs/html/img129.png
index 2a4a67cc73782264f15976410e1d0dc3911393b7..35b42919ace8a430ace93e5fed8441ec3bf2d7eb 100644
GIT binary patch
literal 584
zcmV-O0=NB%P)RHR400001
zbW%=J06^y0W&i*I#z{m$R7i>KR6R?>P!v6FUeedvq#0b5;4kQ62SEr0K7ZLRo$g9q~NJGu9rci(+C0U{8f
z?1B{WF+vB)EbM&leYeAhbi^}&;ZWj1ft8@lP+-8)5urx=M9_dlv%+VzZg(=Fp4xaq
zKwV{{U&Z)R4x{3MSJaVn3kj1Mzc(V}kBv3SbOT3O;6kz)15VhDQkjk>v}l>Es7z~2
z_-vAvtLgI(o#OXUkETN|$ZX=Zj)v?etv`tHq6K0~*Oj?LyHh-DI;pjus7|%rM6PH-
zbtNn27t~11@{u*+c`m}LnQvJrgK!r3y55_;yp!pz@#+Dy+k*Kg=@psC-rz$q19$BjLjb~?PU0q#GO-&~!CjbBd4Gj&nw6vObaYx;T0lTRG&D3C8XDEr
z3?={o00DGTPE!Ct=GbNc00GHKL_t(oh3!|{a)clZ4NzU75aa*EfbDwz+7)Ik~soxTyUT=|&wSk2m+xf%z*4gkljFW}vL}ja|Be3xS=Wa5pmH%=RCS6w?vqzE
zL?TBTGW;w^alD%aMtD?YAKhZ~bxsh+dnqzSe=1((JK+U*Q6D-cOM{F&%v%~ZwTyZs
za1Jg&hHIU64YK5+sDo{nJaaX$n<_60ve*B|b5b^5jT?U&#~X^j@laj|eQl$04qavN
zd*GY;;IvW9W5n}6P7F;uO(9gD(Qdl)(J=|eUMv_^+ua#>pBi^DDz7&_j`Eb
f#*GWwtPAi30D>6B2c|Cn00000NkvXXu0mjffxr5y

diff --git a/docs/html/img13.png b/docs/html/img13.png
index 0b64d387eb1d3203c99db41cac131e5bd026b993..817ef1d539a899823c803e6aa179e9cdf2c317b7 100644
GIT binary patch
literal 3161
zcmb7Gc{Cg77Eh~-wHu}kib2&9v{PycDJ`OwSb`xU8Ew%@EG;8c&@{DHg)VerskPQv
z6S2k8sv@OiYHbtyPKwx~c&6{Y|K54$y>ouQd(S=JckVrRIp237!rQ{NL?U1x(50wYPau4hkZ8nWX$7>#w8mCqYXPmGozTv}GJ4Uy
z{iyyC*vKekbP6;zuQg9>C2|xwTnTRU`{-@q?R~(0kFYS7fo(#gQT-^$C`4;sOIUcj
z7XXmpO0=L*5)xcRMUIx%JP0)P76yYrM$^+9V6YJssvnK+ZG%841qE0v0|3~6AN~H4
zn_t*LE{6i`Z5#ksrw2U&03maW>&7r_+EThuM0UfO_isiFDB>m6!*Pxe;wT%|Uomq5
ziRzrqeJ5psQSnn}T5qTCFDJq;J$sXg<&y?bd-1h&X5}Mth40&486h)h>hJBB43Y`2
z{LM{PyRnfn;uVH}>5@-o>J~3+u(MqYm!M{-^#><4C@8?3iU
zAo;PVzHi*(<=O@kaw*xOX5sx1SBE0vq}86_$tzPF&*6DogufF%f9k5l~>Jz+g
z^OP(Ris;h!W4R}v%sw>PMYQ)U#MtXJx#c29yluB`D<8-4|H7Ca>*xBIPF*9aqj7hj
zjZQE+pHiZNpz50AOB&PYmHh?1uw;_a5#v*OTXwp#kF39>`rg6~W$n7!80gE^rZ=~>
zqT0D0$xGAquMs&X51rBS-TorqD?@DPnBW^4ep6?h=vRJj>(5a~yM@d%vdd!`(~r!l
z9qnqWlS$P>MOTta7@#O|a!bvL;}`LLT_i}MR8
z`BVKWaAXeOl~3EJJ9%4K!A?B#<T?
z<7TaoL*7b5fdl27x+T8DJwYw@tcupB;LBdTX}#x~qRO3gHtRH_k-6Oi&Rj$Ke@9eC
zt4PfMsgp2BZy4W-4tIQ=h8P^8k_c)s(cdA&+;&k0zuxohu_2j+|DZbugW
zlyO0Qebqw)Zx|)AKkg->KW1XO-4b-z1O8I>-AlN4-M?K78UjY)+OcwC#D
zs=i?Iohc*ZQwMW-#8}m&Pg6TN{Js3}%hO6=;|{Xs49_#9$~+_q<6?2+h3*q?DZCs%
zUhV_ZhP$m0gprIj!sU{IYK{ZW>+M%+qe|m+e)u`%k{ljenhjJC0E34ya~|!dPSNmki^>XptTdPkDRsJq%)Q~2;<&0G5>9+G-v{^N>QNAQX
zyUN>x{JHA5CIE^$@qIj%I@dGX)4`+D}*
zO3*Kph)|^e{Kpp3gZ=fVqdwtoc=Gs4v3~lO2Ic3H?tR{9zqv3gO0Z#}*$UhGH!(}5
zc9Q=x++2Ob59Q+UL_-){AT`4ixUyzGgUI|tpA#58v7Q8u#7v8pt`%jLO<{pGQTJaF
zHg-QrjdHFta+=@xA68aoegrP;jKB+z)^#bBm#y{AHj9tEMTJr@>;&q~*-pB%FUz90
zPOZh38Dz~Q=Z7b(j(vtP3uKf`%_nqB>E+w}v$s%Dw%;Bt*>RluzgYY>pQK6_%BOtCY
zUc?)z@_%W^>YgFT=x=r=o{J~^fl8k3FOIV>d@
z?*K)xjElFrh1M$$EvYHlTnzf3bynQQ5Oq)_>&_GRXx+R)%Om65`S#oAt^u-NTL*%~
z1Lh#rI^-gry;FBUfS62*=!)swEA?L8Byj#L%?;8JQHa;E1FDYS11vo|`~xP8sN8xZ
zPQ5}k#6~=zR?Y+2hpA$Iu{ZEJFn_rwcUTclY6Pm>@3gxgujawAly=VrT2#y;9Rl5q
zMh(iuyfgm=fosZ*=alJAIXEIW1jY6`S`D4Ak{OQP=nzSOy3b{;q&wgBu7>^x_COOM
za^F9Uv6Qth5C1nt|NR{N4g26P{dnS#X}{dHJ(3es{#`&?TXuR;{qNUvQxOJz`q@Jf
z8Mi*)$9-(H7M++}G1Zo!>FKzQiQQea49-?r6w-2WGq{P15?SyIYU&r3~F;wHUG)TCc`O)mi2FV9F}!>oBrq7v-_l
znrc)meNUznu2c6BrR2Ob*eWUef#%-RbDpH2@mSpf)=U3M0GUW#^l`5jTqF@CiKe=r
z@?A&@Ki!hOwN2^H$Nk!eZk5#Yp>z)$Y$U-qTjj{4H#qA@ja=>aUpML=RAAWCF^`A-
zo%%xRS2_mn6!9%JKRDR7;>Lr{K_m|I`56@1$EBQjOAnk{Xr%}C)c~nzm;UBUW4_mG
zf`%q5z~%1WsqXBbK}_rX&oyR<$Y}cQp`47}FlY+0PIW&GZ{f15xo8EP8^Vb$W1f-0
zgNO)CxOG89@CKsXlT}8wuS54YIc(HCzv{V@Dx{0?o~7b!zK8X4<2Wzyyr*D6uDjS=d=v(Ku797&M<9bD2`HNe8u<~rE~h5rYk{LcA(@8{lgzvq7L`P}h|^Z@tGb10y|NtJ{WA;XS$>IcO#)m
zsj1|V_>nQx7`6vHftZ+coI{h)s|Kssu1I=|!
z@D^BNS7I0dkdW8~GJ%?!>w^*!9jU3kj)yTvEGXzg9L7XjZEZn8e-E~YoJs}&IFGK)
z79C!P3vmN}6JW4Beg^ypq~PoW%Y>WK
z8n!r(#&QAcsK-J_cCKi6n?Gppw+wC*0tnKhLe~ELDinCNe?^LC#PnpIyWv?Lpy(;}
z5c^y(=)JzL1gL=Lga6_T;;Pmu_~KfMf}pmR*jv9bEQ#zOu@25R%1EArr!YN>N3`KN
z@H3Oke=dmZH?ex1Dp{v!v&xl5Z=iFyOL4(1rb-=peT4T?cw`O@*$H`)vlLT0A@aj@
zdepYLxLv*(FyY5B8aXl&
z`6BbN?HO({)4L+)+onD!gv8?YD$#@w>^F3Ggm$w0W5@b0btf)R$({n0u89MBZSE0W
zw3z0)wnEOo4i*`4@ye`8t5z3nKfV~bLKH2$3^OWORZqy4b(E==(`M!qBRg`-1>8MDA4R2;ubl-?jHgN;slF^Xm|$)l3QZ86
zDAD9m}bHe5|97oeLFplCrdcl
zZN{y5Rj|?G-8;T(07$#41@zoHt4lSQ5e$?#{pz47TM|v#7)f~JG;dT#$f7iJh2kYO
zl`C1ExS)z(eEBfEBoC$pd4GB8FNQ&d$dbOH7^Gh#?=J%i~
zog}Har`QWF>OmUi31OId0z{OQ@1@8x@rvO=Nax
z7C|lo$B9708*O{<8+9UWcP=F^kV@K;$#XTYc9^@TFL~vhptnTzOT43n{dffIS^!}o
zvU`d)DvnfjdOQ!h?54L3lFc4)MlLPAt3MybeCn5au7BjAT4Jlk*ln&t2>3!Zgxfl4
zV+o2LjnK8Q9gZ62FiW_0JhuIKV3gw8?nr-;eAq{Fe5`!TGurfqAzPSwJzm>c8^eDs
z#agYsJm_uyfx|Bk$1M;1$Nd{BT)z~@V{~$;G#LZS+OQhg`ZX{)sLoN_xm9IsuaZZU
z-{i?pAEM0i3^c=+*Gmb(LeAVjOVhUeQaal4v-s$_VS1u7_0zF?Y&A4BSwccaP#T&(Qf=(4D5m@@k8!@)ace$|AXnm2uu
zG6$1m4ZA}lSUcKDWP6ua;u{Joi86-4QhzK&QpY~s#0~vGu6(4j_xNIE`CVBC8;lVZ$#Q}JX{Dj2?rz)LW0bMq
z&bgA<7;!azMn%Rs3#xWWj%Z9xMb*8{g5>SfOx#H@B37p`swz4
zG~*%C0ZKSLZtP$C0fpQZYyT)6iWy7qb$q425j@$J4%@Lm)sOyFa<9d!pxRSyaAPtl
zH}nd>OOK~Zm?yF2yYcW>&Q4Nmz~*h+b7K__aXfGK6Yb;e^cKc^9Bf10qWapEowRhw
zIQ0qwswS*M`uaUS4TgJLeb1A^%Bu;tFb;~0Hij?ke6WjmEc1opd|;-E(~tCt`GgwQ(3+&
zzrqwaKH?eG`g3JpgIexf+I)BcT9=KSJ7F(e^dU0fsO0?z-q#r`XfCxKGckRM1YOBQ
zb(IJL^Nc`s(x3)qqQim3d~j?#K9)sBBrv7?%$TlIZKiG5hZcXVU~7U}y`^6yncQ;2
zJLuTGthxGgpw8mR`ol86?O&1R
zO6b8e4>
zmBwAF^a{)`^Cu%WMvmFNg59mi)m&Rh)h4A&qW6vgDG=7_=933u2acbH>!vMeS}her
zkL!@ggSEuLCypEHKAQC_FyGG_SFFHrkQ$HTr#Nk^=tN(r0A&}pLj=e`bPVPyafq;P<5_@D`1CXV*-Yu1uTimb
z|G4AOAhLX0YnQdsg2SDEwAL<^v}*{3h|J3dITyfWFABZi&+qD0tS%qd%ML9-%>UhI
zS>Uzhag>TxfU8H~xz=u;0_Qc2qjr^&vah)Y7_gpom@BGj7a=X?6|zMo$&j=6vwD+(
z;%7jvF-3)ZzD^kZwjW2cygCXgGH;&ig-Ia$6wYiWXaubiZK&8o++%O
ziu#?d+~@UouwIxoc9!+)K5H~SBImW(IVLBs%0-5N{)72(pD#{V`{|
z%iaoFE3@2mBdRo$a$2ACX23-2_;V8=A4%SFx@mK(g-aK`N}mf{!0`w>RKBfml(L7j
zUiBuoDQ4es649fXQ@hhJz4czeE}CLD<+izwmVHnIUoiBEG>D;GGTuGWJkW_Bk{hk%
zpT>X=oG8y-|2EkpP2I`jZ7_JZn}=}M4mM7iSd7t_2+9;u53>oX=t)7+PL15Pr9{BD
zw6mpIi)-(nb_!RIfP+INZw2%nlnO@VEzZRT;4=s$dF1GqHAd-nbLb
zz3$(hxsyz%@=k>@UWkB}Sa%cbE#I3i&18#D=Zk|hA`8#o>5w35zrT8yg0f-XQY4n&
zqnJ(Q9v2r(6z<3MR-CWmWumR6Kf^w&KvG~IC-4oO-Z_B}&UKVB4V3qq?oI!%6MWzy
zOV_`iYhLZK%{D6FYFvFSmmb#~0IUTk|4H2YP^#PYH=MCHxR5)dP)u;tdie)+kvhAK
zlVYJ?4)(!NyYl|c=Zlp5tZan*ei{*1c1*hjoTT)RXl(TddN&uoH%(O{mmcZ&q<1YT
z`tzLgl^mU_v5e5mhWu;IbEJNF+fkNW>cVQhKalr{UaJ-K-hPok@>J+m(6ALP=VGj)
zzx{RW0DYVQCi){`3w}ENc`ebsPvHt@#1qbE;

diff --git a/docs/html/img130.png b/docs/html/img130.png
index f63e861ee297c16410e9dda1714b049003bef807..d2000c191deb9ca7576ede6c238462d86ff1dac0 100644
GIT binary patch
literal 736
zcmV<60w4W}P)RHR400001
zbW%=J06^y0W&i*JUP(kjR7i>KRljf3Kp1^KJI>j0a+VOkDh3w@7&~@Am8AwMwL>#h
z0*S>!2)fl39oV=bR8b|=2&pqsRbY*Ts2Iz_hLnLnAVVcqOVELh@6Jx*v?-*N0YRVT
zyLad3ci-K2J_9)jDgi_j!)HH3?
z9Rki5)#U-Q%tpT4QpLFI@kbHK(fyt(9Ew<{>V~2gWrBxjG$fvKU(Zx=Blh`4k3_NT
zbYmlC0fvSoq(nCYI{OSd7}}c{VIVxhpxxX^XMp9CG~A(qcRtT
zDCH}VHun953*o951YJ5_BNZnxg=cFqy9)n)*hbspE0u@^q|81a7;+He&|HJGveIe(
z9L|6?f2BRc--`O(lj)7PPcPGLeab()Lc2o!e^B;~PNr{+_OV;X48Zh*UCq6ku4s#6
zTaiWJn>O7D2QO6LR=1a)q^7$$BXez*%>y$Z9^leaR0?6N&+TD)uE}4n_iYz)ws})v
zwu3jAAyW7_6rb3dWcR3EhSR(dlgD$owUR70v4Os=(2EeTZZBB+=n2$vBeR3oK`&UY
zy46v>Y9@F$Nk>8`NKOa90T$SzU%7_QX5Y4=*|RKV`Bk_HC&Er}WEHA+eC&kR`FG!}
zSA8B~`quKQy*6LP)|9nR|DH_>>d}!ToDeUDT3J-=)Te?eM|3_ut?L>7A^ZTgJ#gH_
S8-{lP0000&{Ez2

literal 217
zcmeAS@N?(olHy`uVBq!ia0vp^LO{&N!py+HxcqY>h+`1o6XJT{z=7qRi14oS;8M!~$?POT-?GTfn!f)pTj0!sy
z9~hdoYBYGOHN6x+tSm4&w&6L$b9RB#EeqE+)~lTmV`Sr7(96Tn$}M=0OJV&XpcM?B
Lu6{1-oD!M3|!py+H82!xa29Tp0;1lAydGqEKD^|>zGiSnt
z2`w!x6%`dZIXMXl2_YdN9v&VxHZ}$Z1}Z8l5)u+X9eU=aEI^8}B*-tA!Qt7BG$3c9
zr;B3<$IN7)o(BR9LOksf3Jpu&H!@AJY?Spdc*WG&!osGaaN@uL_9aqsHW~@(2biQ9
z(wbhdCoJV*XswW(!6aqIkg2DZ)_DBJ7sDSh4iAf*b8NZPRD-f4W<(o{Sj9KE
zSn3(*q~180aQeVT29=ZI2R1oARXl9u8pqD8Fny=$npg$fl2y#<2F%P1do^W$yH<<7
Q0y>Vt)78&qol`;+0KD2&qyPW_

literal 629
zcmV-*0*d{KP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*I^GQTOR7i>KRliFdQ4s#_-A3>Bmn(=Qa**Xfu~59iLM-GYok2(`
zsZ@e?LrpWQj#L8b{5P20T!9}_RiglavUBCf*#(BM!BS7Epw)z=2t#*#=`OAtf|=W-~^>ungM_q_>H7ph@W^w``Fy
z`*|N0zz&OI%YtWK;iV17^zr&rTN&>U>m7-LT&95+q%!|`_*5}waTYO6=^C`boEkHS
zb+CM1df}W7r&wZNJz|AR(mm44>ob1Hh5q#cPx2Tzh?l*0I#Bbv7;c)Vh{?;&CZUV#
zOgEw!v2XhLb-i(T>-^eHIMo{+7Id1F!6ji{MKiIQx202xV+aTWAK{m3xCfe)5d;;4
z3ni@{DZ7OFFs9z0R0c^;N>;u29aYiqG&^_L%=nClg<4cfckORU+0tm(gfCPXn3Fu^
zHbnd*gziKn_p@mzT}Ijg=1FB;acf-xo7jvR;!N{8xNzAx7T&^iLTAX$uyEy+AKr>I
zAS0=7crrZuM)qLTx_zC;ho)ywC#ZXZRs!fj3RHR400001
zbW%=J06^y0W&i*IheEn3GQbrFYdx_Lqb2Zvfg9D@pu
zjbp(f6{`+ns*IU-Mr
zUFs-s&kX1`>(P!vYK0mqT+I&0q{GC`V$$zGix~-1R|Gex7!()I&};GE$3#HI2^1wX
zY~O)K@`ZeCx+hTO9l%FPC6QRj=oPm?E#`X$lN>J?9>W{b?vT<;iIBAd%OI5aL&+I}ESTkz2l;7=$;}Pi0Mok%kdNxAvr85^m5v}URXWRw
z>fk{>xiyMA?I0Q97jo9?Q2WBX;)qQdahnF;jNy0$V1-
zG5_%93EeZVSaTic{8F7hThQ$B9i@%YYT`YwCLP#ff<|bP^Z(!t8mvvOWB^sx00000
LNkvXXu0mjfthnNw

literal 743
zcmV?P)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*JWl2OqR7i>KRKJT8K@|S7YvNAw@y=kXtYhJOv)Np7xo}9ZxZ}Q^
zdGqG&%(w5&ytlw0$TY@JAY&S!Fc#jZDHy-nAm1Bv&}J0rDGRf+5#nfv%@d+x;z^m0>4AX&JIY{*f&R2CP=adk4<1W+j+HfZiT_Yt=XtGdu
zIVydPa|yLErC=(6(n^_@L{m~pG_anw?EMV6F+xeUd!UNB*TZF=8$E*aDxim1a#8Qp
zJHiHAa@fP=gdszmBt1P_pMzd>BjvyGL&Gb{9>l=g#QWPSNcFke3XxBNvbad^5Xjtd
zLtaHm%&M;|1b*PiP~k^7OFJEzoeb8{>Fr~eA+!3Am-no%6-B>6F?wYxWoO~2h7dF?^#g*3mmx(@T$HHU18o|2Ja8>J^Vh+`M
zT2ZYh`A^^dl$P`+?dgw$Zn)pD4EeckvE$FN262!oL{~LM>*9>*y@-X@l2gcdIO3=K
zi@z8fysd*7v`yg|`wy|R69xaCyR4wJVsDUVzdN|T$UWFleOg;+@o4_bNVLU}&uYCo
zVyENh@viDbm#*UV$tw6fuRNd8($~-8Ljddj%@CzY>vw8sR_Kju6SAiNv0>N~v+iT>
Z;4fe1pX_9k;m!a6002ovPDHLkV1i?_YHt7l

diff --git a/docs/html/img133.png b/docs/html/img133.png
index 850dcba0e0715780348d23a8549238be7f098311..0a3ba10e0af66117c39220c53c1a627e9182f6ee 100644
GIT binary patch
delta 255
zcmV@}0{{R4v?L+s0000mP)t-sv$M0PsHmKroRE-^goK26czA4V
zY+ztuR8&+*NJu<9JTNdYBqSsl7#Iu;3;+NC>RHR400001bW%=J06^y0W&i*Hj7da6
zR0x@4U|?Y2FaQz^2O1c_fTdR-!eE%d!N9->q!XAK5I_)&7{H;=Ei84HKBK>GQdO%;Qb~kvst)QX-{>fhom>V}2XRtrr-U
zGVm>PV(0=%@dvPMPzYu4XSf1#B6CYvyFiF*BEwVz1^_*m9JZOD1|t9f002ovPDHLk
FV1mbFT5SLT

delta 258
zcmV+d0sa1t0+9lc7k>`~0{{R4e|Yjk0000mP)t-sz`($#r>BjLjb~?PO-)TFCno>^
z01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001bW%=J06^y0W&i*Hk4Z#9
zR0x@4U|?Y2{{SQyLViu(M&q0gw)X2?7k*
zzy~P3fq?<2j;S?Hsvs$S26jmhW_ZO3RHR400001
zbW%=J06^y0W&i*IuSrBfR7i>KR6R?>P!v6B()5`$q~O-YjEaj(MFcU3S_MHt1i>YU
ziiktIIX5|F0gFm1@A%pla>B~pk#Mt&x7X{CdaNj-mymKG#KA;aB
zG}9(1fddP(rmuph;-9TO{=v
zvreK&<&qv`jI%HWW`>x<_H_eRC5U8KVC^8Zn^GjnP+KjZ6@bQy>%lL}Y3J92$fFpW
z@UD*mQHq^#_m~m~m&D7nS`VO9+nl)p9~RjP1c(xjt0N
z?`<1+_I2*eNNQmn7sm(499{W350TXAUXiBG3O9q4VmiS4uBcid4$AD-K1MT=Vu>A5
z&rL-Od?n3Db-I?=XfUv79?RHbqY$utOTn&-@0000mP)t-sz`($#
zr>BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*IoJmAMR5*?0Q$0(>KoEVG`!FACl2Sn-C~6}rY9%76t*$$l^q2i~SqY}f4ur}Zpp1ZC
z6|9(Mp0R{%n3u=0iv_>N7-zzEPBj!5STv3Z$!L?&A7=2IFh2`fX<#x1$iP
zWJ$2qYr45@=)pRIv_m~}smk7VxNBe*!Mc@cmA+C9vBFo~JZ}ikc8=kZYT>181HO@v
z@va1UOZ^$r{DK)Ap4~_T
za!Ng2978x}CIhu4B(Vzd$nf$c98fxVkb!*;7Z1-G9vu$GzLrg_N~}CQtnzjWok>i>
zTTR-`6#h;vWHL8qW>z+CX0V@d`o+0(2VS-LE2}*a%n<)9Y=59+;#=kk$II%N4~Ma_
q)v`|zxy`tYQ-@tb;t7j{FhkNL!E@PX9&7_TfWgz%&t;ucLK6T{&Pu8P

literal 274
zcmeAS@N?(olHy`uVBq!ia0vp^l0eMQ!py+HIK|)70mv~3@Ck7}aNxl5<;#0}d(+d?
zeSLk^)zyJAyu7?ywrrU-YgR);LrFjBs|#9pdyhZEFq!RATdXlM6PdkC6D}V+aG=7MVP-ayTIj(ib7EV0
zY`ewR{H$hr@{IQkA5XoA^b974pkF+1Cf(uv%T>ee(6(vKtzBL2C%YQ`cQ!IIte>Fh
UzgqZf8_;bGp00i_>zopr01`T0bpQYW

diff --git a/docs/html/img136.png b/docs/html/img136.png
index 6928567c99f107cf02428584db43c69f79ef08c5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
GIT binary patch
literal 0
HcmV?d00001

literal 585
zcmV-P0=E5$P)OW;0000mP)t-sz`($#
zr>BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*I$4Nv%R7i>KRJ%*VKpg%qKGM`n8$lf<23$m;vo6(1oC*%EnZ!~5
zgZS7KEY6|@T||)1?Ghh@&?0sAK}S)Lx;yy0JW85q8||XtM{>FEzVCjQ``rTw!iLQg
zb##Vl+b6tQ$a0TMEow3wvZv@NkViq<64oAiIX=a51ZIr?A?V`G^QwCPggn3CW4=HG
zDO=8`cd;1lmyQ>{>;I#qF@V{@mR2V6Pc8{ZE=#V+px_>pIkcK$7_Q4nxaP!w$g9tg
zkhSkj=Qksp?_lVui>aHmwk=K`>PN05xwwXE^#Y0FXeL*8nT_G}{&v$Pk!#*%eL1FB
z@EPNBFC>wBav@K}xzoOy%_w3yT$a&Osb(x}h>9%=g_g!@GA+Skt>E8!U!uy%E&0jc5kcC<&K6=*j%
zu%;bC4ql~hC>*TcB0LLjOhYB_w@bYfivSrq+Sq%*hB_$L#H2yr4*y3<~)>WS6jV0}B%=XN31v8FL
zD-@q#x8n4HvnLK5ID7v50){7_G760i^baf-6u$FdpX%oWeTi9zEd}y3vzT`?FsHLc
xWc^~9#wN_hc8;INR$-kAb2GyUdtnI)29Y??C(%h7Yk`hn@O1TaS?83{1OS}VSZDwM

diff --git a/docs/html/img138.png b/docs/html/img138.png
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4713133c3e836a1a58b5f38ffc23ac38c4fc46bc 100644
GIT binary patch
literal 372
zcmV-)0gL{LP)RHR400001
zbW%=J06^y0W&i*H@<~KNR49>SU;qM^L?B_o00;Su3=9nh49I}{03#CbKL~t4QDDH}
z>vDpDfsOS~IKu)4hXxc$hz15UfKYRxp@Ex+i-W@fY!CxO02{hm(!m2vicyz6tM9=5db=wpW(p+1IG;v47?y!3l@M#Um$L0LiHnQ;6EIYp*aR!fUPv7
z+2dssnLp8SaWLR@;A&ua
z#BhS&0c-;2)Cd92Pyx2oegXFF5dzFDE&@PNJBaad44WDF6v*=^ZNPsl-~#}_c~_)g
Sg8W$k0000RHR400001
zbW%=J06^y0W&i*IFG)l}R49?flCe(1Fc5~nripQi()1BLF|dG`*vK2u35m^fRiO;5
zND)KTp+b2BIx}@(;3-hXj)4I&R=~i>*^!_^SrAnGlFz>UzVm-~0f*p>78HdTv;Y0G
zvMFiX{ZDim$`ZUm+DE(n$0(`DF@e_3>#+ruqE16r5YxvNmW7U4e8t4LYnyy@
z^nQuDo-kh0DbXjE^M>qO=}#$#8(+~bJaCH6Jb5AO$jGnp0y}U^xZ;>@GrOlIh;4~3
zkokJj%~={>Nzg0gX@-&nH9RtENOg5bFk4RV2c7BEy)(fJii$SzvGH54y|hDTg5htv
b^B?#Ck0mxAWr)zY00000NkvXXu0mjfG?}^X

literal 0
HcmV?d00001

diff --git a/docs/html/img14.png b/docs/html/img14.png
index e5fcc49cbe766ddfb333d1e4bf8d311ca5252962..4f94ec288cbfe5d6e89cef823242bf2fa7784ea5 100644
GIT binary patch
delta 620
zcmV-y0+ao<1&RfbDSxxGv#6-3oSdAHkdTCggm`#(Y;0^`U|>{KR7gljJUl!wFfb$}
zBp4VN3=9ka008P)%boxL00DGTPE!Ct=GbNc00Ia}L_t(YiS1RfZqrZ{J&EPiZn3Xf
zfx#O{2+12#RZw8;64)8?11SCg2E%|lpe7PCA`&Zzzz;N1mVa)z42&d*q3KdR5Gqum
zzP$GwH%{WH3=s=G!;RlL=N{c8@A(16uvXuP7eUmSQ0)a)ul2^2AFFO_!UYSwMJSc*
z5N<>vd>K|1;Le#nXG7?^GF}Z-`MqD3)d4Ov2X2U}@G6r0S%xi#kfflnn)ZpgIBN+b
z{R0q6ul4wm$A7Y3>MD*1nwC64h`6JT3KfoL`Z>3VuJim4agI4`=NIm@7UmaJ+&@j*
z*G!@-fMJ+-qaW>ig7CO&%L8Sq|M8=AJja%=`&N3o^&#;<;88%?rth65Zt29Uwxbg9
z$-Ey6v|_@Ot`;0O8`sN?livdhjg!feE)_8!X5-yK+x?25)
zTiCr*0eMEczxS-V6W|6&b}KkF{SuWaU)78=ZT{e6=r`^un5
zv)@CXkKi!JO>S^~hY!-DzMMBZWl1%zFD399?=B^027dsll(K6toNBZH0000baYx;
zT0lTRG&D3C8X9cetX%*A00DGTPE!Ct=GbNc00J{fL_t(YiS1RtYZO5keVf(IdH2np
zg{8<6K`m7L3u3Co!Xlko2y1b(7Qzt~L9n<&Awh^I*k}KQOMfE$Ig0BOjES0PT9;CG2is@15H(w9qpCe^Ek
zW<6WpI4?RBI6QVxPJPnB5f?*)lsE2SsVZO@Cd>`;spe{O)kE$*U}XTYeFtW%TwlN(T|zcl778McqxluK}dNEB-d@ZEpM~VB%XK`HlQWtDHdAteyLkuA3=~j
y2NFm#=wsgqDbT0Jo9ey+2gTFc+e67o;up|gzY&E6$aP)RHR400001
zbW%=J06^y0W&i*K5lKWrR9J=WSG{W#K@@-ck=;4>F1v!@2SKk;2!gPvokd2yXavC(
zBnlQ@5hRUpMJxm%12JR~0!Iq9ygy-(1T0Uqurq&vMH<1v;tC5poj1FCx8J!eO!
zaxsN9e#jhcr#gp;$6Qs;K&{Tf606Sf(wtM#jp41nf8&i4=ZyIA&R?9@Zou{m*9wa^
zj$`7got&|4PZW7y6u$2JY!{Bw!|qYD92XWS#g-@G%B|!)*wNr|5VRE*kjQnjb0Yck
zYYJy8!yc>Oa>|74NO*3%^yR&!)-KXRneEPYwY!$xe=6D9E0$yOQy
pjdN91Kw||mkWBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*H@<~KNR49>SU;qIg2L=Wv1~?FS*TC?>fB_jWZ$sv#fj|O`#}6X-
zJQM^b0BIfT3;10PUyLo_g;0UkJuk@oorc{9I1d1s4V35htyOr8UrAJFY&XlfwC?bHEj*Z=^FHB4hx
Sbytl50000RHR400001
zbW%=J06^y0W&i*JA4x<(R7i={lre16Koo}m)IP`65#kY+HWdu0NGPI+juJSSnQB*|o7R@fn
z-~Yb%?#^ceDfv9^JQS^MyW%zy%`l09EMMxFg8F5N?!r_sXpcCF?ZJy?
z+#gTZbZ6y00j)Vs(l?k6STJ|OC$T$PZ1Hf)@dUwmc1^V}(nj&=jVqQPLiwaWycsBc
zKhRyJ4|F5ni^q(s=V8c!R0X4*LF)%?hTTnqiR96lp|)+mv2IKG;c$+8`89T#YmIzg
z_&R%ji08Axt4x9D^FW_n#iuzl{O=LJkGVT
zLamc;lPX=M{ol(^jtwt5+owSry^dF&UU@Z7ZG4-DuDZaJ!92TmMnADVH$KQw`X@YV
zA8fNr-ZsRCO0s9?i`hFkxAqA4FsypG(Qbm%52AS8D+jn}_$;{6SXHc>WA%G_`62H`_gZrnlBLaoOdm^s?-tX`TfNzIv54+t
z*(RFx-<6>!cq?jaSSmxWZ(8BZt9BVWyiw=qa1Q#P(ZAJiFP5P=Ck+e900000NkvXX
Hu0mjf>l-#v

literal 445
zcmV;u0Yd(XP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*IJ4r-AR49?fk}*!hFcgNrI8|FWZju3Y0i=k5i6KX**g?HPLnqjJ
zgq#3%p>xCuVDI397?3K&1&}f_F!TsKrxg^aI#410=snx{?Y#eg4pcB&lHx1ov7}?Z
z!^0%z$J(3sBTwPDx<{tWWKPFt;
n!JWl$x8B>-C4Z~-{0H6vY63MM|4Re300000NkvXXu0mjf8U4C;

diff --git a/docs/html/img142.png b/docs/html/img142.png
index 9eaf8c6191ab4121f82565bc6c709e2d2b9021fd..41e972b937ec2b9e770e3b941cdf945ffb63dc99 100644
GIT binary patch
literal 219
zcmeAS@N?(olHy`uVBq!ia0vp^LO?9X!py+HxI{I%6UfmG@Ck9NcI^RY!Gdjk;6ShLff(D#01R~^RfyRuHD@c%fiMmonNNujpA*P
O-3*?telF{r5}E*(u16OD

literal 999
zcmVBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*KWl2OqR9J=WSWRdXK@@)3UF&XkvRR=BLXkD`B(=m_u@%nMImAfqE&);Q7_XLga)ZWJX8w0UOWhv(32OzH#3{bW|K{`
zjV%hkba!Xpo9}%yZ{EB~3edAS;0G-QezFJkphTe1yN6EV%hna~ZVkf^wP`1z9?8X2
z)pn%@)5mTGZ5svzi*0E*uhx;J0p?N!sKq)Y5f_6KWAeM0E;;e2T8n9VYO1}H4V6k6
zpkBAuq9%${^MW?c#`l9ZpOzuJwV9e?sm#QE3`I;MVU!&+gFeLSG@gw?bBUJ?K^j65
zg8(xn0@7v6oIVH#d-0=CyuG?zqw5~1WfROmpVshZYoLi&%I_{-gy;4kz+qVR@~zJ5
zZ1P1bh#dn_mPN&``-vs`g3Ccg4$4j7rcVJSxcTG6P-sOO10998x1SaB6;mCLY+1@QCG=$09gVR
ze;)I`gdh04_I)GJ3gFRUz?&?*DAb@9Xj5W;Qt@zu!OJ8%3T8etLk_ffVx3i|f$NrRWZU_v05&k}>>??a5OEb);Q*K23h#A^(TEj)B;f$4k@Fcw=R8V2X9F47(FJ2L
z3{41{z_UV?G%AIbSo?CsR?-UoUs}bN@v~xA`5)sUlVi2*
z;Bi**d2Q=?j5=>^IZp<6?Bf&LlLy+9E#|4oe9Ls_8Cr^JjMG3LE~`Gfu*keaS?G5-
z_vfYSTg%={STSpGC+7fM25~jz!X~AN*qKq`BXB(hv*$gy4mwp`JYd~^XAzQNJ|XVf
zH~qUM%>%f>&O~vA#dLyI*RP88Z`OiH5}?8SC6q%_$y?}p=Po?$_H-H2Qp5ATb8$Qh
zZScUlQ0jifi}GcIuO5aUcsA`bl1Cr=^xW>mW1e~@l-2HD+lA18rv--W}mm
z$>k?<`vgzc(I{6AC*?^8Joxvv8Mie478tkN=Q9GkZLSRHR400001
zbW%=J06^y0W&i*ID@jB_R5*=eV1NJ)1{MaE1O}`CBwWk@RDb~tV7fV3I>3w#OxTUU
z0l0ve5ySwQ%@4ANbpenN;OJo3z`)SJsfnzZl_aC_0uCt62Bn$6egum1Lj@Xy7&w8{
z1%?JNmmNZF<9Jl=z)n49kPY;qG!L3MCzSSwP)ySTAPn&W2rbW$1`=WZzyJ|w5CKyh
zd`$cd%pg9{a~&NG3?C+d#Ra&5AqCPP01bOn0T9XdfTugdpaHDY0mE&R$oJN;0d{Eo
ze*DU}p>o;$9gukJ+zn5`43CZuP~0%EUS#-$B+nGUpTL;F7k&WB_dzq9H-HtWyn8ng
zfVdGIy+AXv;nG_f7y=F;D`(IZK=3#O7&tcY6kK5nD7pX><21$Z8!+GzB|_0CAPxWk
X97!-L22VCj00000NkvXXu0mjf0oBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*JR!KxbR7i={RXvE*P!RsI$+?`V1dCXx90~?b;W!W$u~8A8KZSUUq&zsmR|_7;^@8(~O?LCLo4w0{;4FEW
zH{X0Sv-5reObQ#lwI6ak6$+q*TT=h6k01e6xT09n<$54hz2uxG;fle{4Ccm0X7$m#
z5M@byB?hGkr^Vj8IJ1D2D9U}9*^zJiS2DFA+mQ*E!$c8Z3sE%AgJN7>r%FDD$xnFI
zxJPIe4n!&LWhQgQgsJ*%(zEj^=DPv(C`LRo`^ff;;o!Bm6`U;61eWqWHBE#D&K9iM
zI5n8HOV#`%@$+G-h?}E>A
z?HelE;557q2jU~G@(%s5y*-)p47pGl@4K`!1{h?CD0iwI0nS-3*y%!025ygMUA1zi
z!B%aPu)%DYGmkbqv|x|#nlfw?dv@Cx0=s-NCg94_{u8nD+rqAKV;!9RW%WaScEh4w
zcBgjk=ebsgy#=gYI!M=y^;&Ez=ZrONsD2&WSMcq)INza%WvPSrPB}6AXgWGo4AOV*8ZukC<{x#rG&yO7XdWi_V-<;rjolfG-S{~u8%wz_zpAxdDZA?$bkFgYch{}K
zK8vG{%0

diff --git a/docs/html/img144.png b/docs/html/img144.png
index 0cc86fe7ac880844c73059882e1d909a55d2188a..c1e6819a0424a7c62ef152dbee0ed72558f7cfbf 100644
GIT binary patch
literal 477
zcmV<30V4j1P)RHR400001
zbW%=J06^y0W&i*ITS-JgR49>+P`^vVKotJkT;j!QlEK{$;wCMklTc2OE)E8Vy2e7m
zF^k~fkVT0uwu&IQln(wK9RvrLO#U5Lf6Vn=(yJ0l?f3EWa^Ji6y~hC>PdmU^Vw^&1
zwfkCEDO0C+QR?-&U@)4GA;3>KM;^m0x#?F7CMO{Tr54O4*}9fxY3u1&Bj>Y(%amkt
z)48}0dE4wv%osk2)N{+~_2IJ|K!C@wprO^i;-97Ff}cBkw67w;%#|Ed5n%lXb8RKs
zj*j-Bms6ylZnO@6*i9_tDmD_wTwvbua#?My+$=?^1b24D4o>}+NIO{kvq2HY1(36v
zisAS;n^9(065QuPN2ZoWGd(40V2KVA_8Q@|W7tj{ceAYzD4TZO}z$w=IoP@KVEJu7wA-&@uNL{YKIA7eamm6!o~c
TTWzoN00000NkvXXu0mjfI42yJCLIr;1l9{;J|_9%a`}|_NJ$&
z`}+E-tE&TLwrtrlYu2oWhK7=olBlRC2L}fe6B8*ZDd%>v_dsdJk|4ie28U-i(twLRSTf((U_(x-1Ea<#g#&zQtWp+|9*lcrd>kh6
z9(nR4O@k$fm1o|OOkeNA1Ci6b{uUOkiMmv|q$|i~N>Ypw$eXu6{1-oD!M<1T9c(

diff --git a/docs/html/img145.png b/docs/html/img145.png
index 554b59b21951976bc6fb8c9307a231d289435905..81ca11d66a7e22ac598c2ee980122e99a13bb531 100644
GIT binary patch
literal 410
zcmV;L0cHM)P)0wX0000mP)t-sv$M0P
zsHmKroRE-^goK26czA4VY+ztuR8&+*NJu<9JTNdYBqSsl7#Iu;3;+NC>RHR400001
zbW%=J06^y0W&i*I7)eAyR5*=eV1R%I76xoUz=4MwO$e-zlYxzafsdo-lfx%YtQye)
zAC%??GOsf6J`n&jSp*my*dd~n16Bl+aRS6lB@TuU8wym|7$zXZ1_~H)!I>NiK%xP}
z;z7u>2Y@M7116>g7d{vU7<>n*gvfm;U|T+6Gs5lybm1A49Xv#9b$!;H>^M*
z0r>?mhP(h4S&bGb;{%vXnV@m9g?(~pt4jt0gN6G9hR`zC4PY6zWe8;~oD-N1Fc@rM
z=wPs8;BH`_z|4>hHHK{)l4&!UxdW6~HZVM7SjOxxz^BZ>aD_nuWa$(XOP3mOgbHvQ
zur)9&abPR)a^Vh3cSd$&#*Y>T+<;>@5Nse22*VEm0BsRF{>^4ku>b%707*qoM6N<$
Ef=oJ%`2YX_

literal 444
zcmV;t0YmBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*II!Q!9R5*=eV1NK#1}+AM1q@h$0}u-{fD}O3n1G*=_Z^b}h{cTE
z2<(6#h}ofsC3k(Vn1`mUhk^%#dD$p5B
zK>h|!sI>>cvI%^L*BVTqjuR*Xd!ckEnm7}bUId|dRzvxlFMug-9*&(4K#UDgg&!O^
zm6U+q)8k|Ug#af54+F!ycMljIB!Hz4urVwUH~>l%yb$$=!6eIpZMvHpz(!(;j|Jp<
zY6t-Vys|#1T;?QviWw77`3G{4I1A4)Kj2URGR}Yikil|+#{fybhv5k@)4buI09M3M
zh-S7J1M2|>U<`xOG%$7#DfuxlaKP+ic3|LYMfQjs!x^nUKM2
m0kYvUFul^iiLPiAkOcr9Q8yE}Jw3tz0000%=0000mP)t-sv$M0P
zsHmKroRE-^goK26czA4VY+ztuR8&+*NJu<9JTNdYBqSsl7#Iu;3;+NC>RHR400001
zbW%=J06^y0W&i*H-bqA3R2Y?GU;u#$j12$(|A#Pv7{&$y76yhu2L~9B;Q*L)SjfBD
zvVeghoMWno07&)!{~s6_m>H0OLw{NtV=6-{V;GP#iN!#GmB$`r7#x2XbPKFEo3?G1Q16s|QFqwnFB%Q<2!~w;~{|JD`V!i-|
z3hXkBAF&9!*fDTiU`%;f!*HCTgF)9Ip7Ah415ljl69abv19t!eZv(?erY}HqTO7g0
y8zt~FEBG)l@H%icBtB$d2P!GR?VA5s!3O}-G*q5-t&2YZ0000BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*IcS%G+R49?1Qawn+Kp1^VY)#U%$*8y-bq0I@$D2H-%_MN6L>IBg_5LI@;+mCHI%kY#yXFfXfed1RCf
zM&SO&U+=rht@LVSsV$L__NY2>(ki=*Y=sKke!Qm&C`XZtihylOs?^`hBFI{6w3Nm?d2a^e
zl&0I0@V`4i3;Hy9F#;~Inp=v&)RZq!EEMN6qaPzKhv?w^(Kg)*Q8v|B!l&-gA3LCU
zNJCV5w3Zp6o>@clfn8ea3`cg^gKY6tM0&KE84DTh7i~{!$Q^v0bYYgRW_*nc!3VB$
vLoxym1i)r*$1nt&9|}5{)gPOD{S)yG39^k34k)6m00000NkvXXu0mjfvbE6`

diff --git a/docs/html/img147.png b/docs/html/img147.png
index ee9568425999fcd6b4f91eaeafc8c6581b4214f9..7e245b7636739fd1ed56c2780ff6e1fb832e7dcc 100644
GIT binary patch
literal 387
zcmV-}0et?6P)RHR400001
zbW%=J06^y0W&i*I0ZBwbR49>SU;qI|1`d7(G$6>p;D9d1z|p|K$DqW-kigl1A%_I`
z7#Ip544+*W7!rUCmIDe5Z1}Vg20$040V#(M3=B%#3~V3RLGB3v^I;%?G8=FLBM`v>
zX0out1c3pxfq{XSL4kqQAg_S2paCd$0O(2w28Iu;3_Kfvk_<9nc?Kf~h6f8iGca%i
z^&^D>7mb`tIVi*~oECvDaukTU5+H1@0LBX-I%NV|S=s^ya~FfoA7H6$Fv;)0@C8V*
za86L{1kyi)1UMEzG&1%Cz@-^xGBbQ+U|<)pXW(@(0895IfGuHq0OBk)U~d2#;#$bS
h8H_L+o70970046UEcg(F#peJ3002ovPDHLkV1nwqfk6NO

literal 451
zcmV;!0X+VRP)0012X0{{R4XRy4b0000mP)t-sz`($#
zr>BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*IK}keGR5*=eV1R(Qbr70~0R>F>$q8X7po%jwFf%Z4CveRBbpTBV
z4#4#RL>e&g0gY;8-~h4@0GV9O4HGs%L?J*(0ha-U0S|)7y@3I2X2Aglfdd~BE-)k@
z#3nE>0tpVV8|VoF5KLYmW_kc(9Y6^3LAXp064o>=Pzd;7a2_bY4^bj;fSrevvta`V
zLLF~IHwzp8OeTgaJYe%6Moj>DYl48l1guVAQqrWVmuLpKu)7})I5t2TOaa(rk0?MG
zJP$x5_a3hEcN&gpui0sJfr0b%5(WRHR400001
zbW%=J06^y0W&i*Hok>JNR0x@Ejw=qrKoEw%KA@#6ZBPV|2wyV)JTm`eKp4C@2^BY#v^4>R(PM>~^2Hr}8pqT_F#fWO+?<}s
zpnKU;F!84<(wqX4ddaQ)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*H?@2^KR2Y?GU;u&J8yM2k(!fjx76AmCfq{o(!zu#>7>@zM;t674
z;6K2?tiZ5gwE;+VT3P}F0~Z4l*t7nC^M%X7Ler7&K?wLTD$OoJZ{Ot1~4l{Vn%fPa9jWY8BG?UX1AOW8X
zq8Rvb$eh6<#-#axA%kJzIpznP5nLZQBX}N6ZQub(unX`UU|=X@V3^jxyJ1=b180&F
zSi|iuwuTMN4h#(Q81%X4GjN=|0{{R4Q>bwY0000jP)t-sv$M0PsHmKroRE-^goK1_Y;0g)
zU{q98NJvOLJUlQkFeD@-7#J7~3=9AO0P&8JI{*Lx0d!JMQvg8b*k%9#0B1==K~xx(
zV_?7zSPKdmcp6|lJ_N@}0{{R4)jR{F0000jP)t-sz`($bjg4n#XH88_CnqPTr>6}K
z4Yahhnwpw`fPi##bXr|*Z_nJF5+-G7zo|PA+eVzan5LW#s}EcvjuQ(fQw5*f(e9`8AO<{
f85_XBUcdkVTjCXd1c>mH00000NkvXXu0mjfS$I*$

diff --git a/docs/html/img16.png b/docs/html/img16.png
index 55c3442a4097c2ac80e440bc7dad325b3f724714..b7b0b14062b29d1f3bd06599cc1a307a6cbfe3a3 100644
GIT binary patch
delta 181
zcmX@Zc!Y6+cs(x*GXn$T_d_RdGB7ac2Ka=yZr;3k#flYk=FFKeVM0qwOGQORPEJlj
zLPAJLh=+%Vjg5_pii(7U1P>1nP{+32cAY?qu_VYZn8D%MjWi&~)zif>gkxqhP)}My
zLIlGRo;3+V95M|NjHmK+8HCuy3>PqLo504_*23+ex0aJ9CgG`tL%?@}0{{R4aaOx`0000jP)t-sz`($bjg4n#XH88_CnqPTr>6}K
z4Yahhnwpw`fPi##bXr00000NkvXXu0mjfuk1hv

diff --git a/docs/html/img17.png b/docs/html/img17.png
index 8db5ceddfffbfe92f16fe6baf259f303cb80d4e2..47445ae6e5855df1d5bd8b54cf112f91328f988f 100644
GIT binary patch
delta 338
zcmV-Y0j>Uu1M&ipDSxxGv#6-3oSdAHkdTCggm`#(Y;0^`U|>{KR7gljJUl!wFfb$}
zBp4VN3=9ka008P)%boxL00DGTPE!Ct=GbNc008hwL_t(IjbmUy1FYx*Xn+lwlfc0B
zfW_|uih}=efGo<7%H;k4Wpc1F$TP4d5U>=*+z&Vu@Z%FyV1MH`XlN)fz>r?Bz%-Z$
z+o=W`NK?)}0gK>=11zl!kv!}W9tSW^8W;-Pfu8xGjINZGA>hIRYzA|X<_>bfe@sA%
z_60<$!<8oRt7FVib8jF*9Sg4m+X1bwJq%%P0sV{m8|o%tSI1DrP{Rxq<8ff{VLc$*
zpb8Vu_|d|^z)J(P>I8(k%rGSZsE#*)A(o*dVQB&bV*ySlYy5Cvi0lkt-~mDgS8T}v
k3jn%c_y8AY{Q#sB~S07*qoM6N<$f_n&yI{*Lx

delta 362
zcmV-w0hRvp0*V8WDSyDgz^A9Djg5_GXJ<`KO(!QO0000D4Gpxkw3?clfPjE>baYx;
zT0lTRG&D3C8X9cetX%*A00DGTPE!Ct=GbNc009U|L_t(IjbmUy0~~040W>}nDwkP-
z;q3<$ku*3!7Ue@Qd4QM|qKAixhlhdh0HXp-j*)>I-9Z@UCV${iz=Kbak%wKQA>hJ>
z24qPA4nB^C4?WUMnEGf2?68RO;TGdMp@6Bb;DDk%BQpy#M2v?)0SFy}75Eqq?2=?e
zHl#s;ow1=H0NsBA3=Iu9!xjd=`C|<1f=mw>_AxO0;>h56zzh@D2|vxia2%K#3n2J5gWMvZI$&C;X4tpk
zumSE=&%mHtBfxoU%>)LP39JH)bBOfkp$SAP90~wS8o~k+0Op8OM$}N+fB*mh07*qo
IM6N<$f)mD;MF0Q*

diff --git a/docs/html/img18.png b/docs/html/img18.png
index 0ab65bf0327acc41aec264e1a69e6b8975b53ef1..5881302d5ae5b35992b87a13771322c90bc42065 100644
GIT binary patch
delta 508
zcmV{KR7gljJUl!wFfb$}
zBp4VN3=9ka008P)%boxL00DGTPE!Ct=GbNc00EgvL_t(IjpdX*OT$nUhTk-wt(EjA
zWOQ`XNiwN}=oM-~QOMvb1VnJmQb{KryS0OK?oY@d;@G9qv42Ykx7ew;=N`inTG!nb<@pp!wrxbh{z!r53OK$Aa}xb34H}L(
zx)p^#+fF>FKfz*0g}6dj>BO0N@6f*k;ha1L!zfg&iTJ0z!kSwfOY|cXZ&?(VDK+c&
z%R8j0^&a-nxt@si1LbRLCV%8QFttb7OYsBrG_{5o;C1to8Ay61l|OYDSyDgz^A9Djg5_GXJ<`KO(!QO0000D4Gpxkw3?clfPjE>baYx;
zT0lTRG&D3C8X9cetX%*A00DGTPE!Ct=GbNc00G=dL_t(Ijop;JOB_KM#-EuJ?rS}V
zR4D|d-FEFJZ9
zaaJvl1xdMenSUre9pz7`T1oj{gCpMl5Y_N}VREPRmG{`R?waU>!A*WQ`WGC+8h)0d
zH!Sq@3pQS*0^~EUNIZm&hM>S9YdD>fEcS4yWOaeZrc@nD7TMa@HjgVGarm=Z>dr)W
zw~Rs@x_+Xaw=(kh#nMabT_s)i6g>!orG1Ap_s=Nh?tfS=T-%ppMk<~9{>k4vWU1vP
zcCg!d#g4b%T|K#ZbS~_8cc$)6ryZ<1;%U@X_OU9c^bdgFZ`E1yIn2(%s$)geHQr{|
zlK#vCZ>k;Vd0c~`1OMKnt^7ewo_$&M`u-s%w+{PG++0(XFSc8FiAAsvVN75Ml@+|N
z8cb}OpgA(L_%`B0Lk=hy6!#3=eC1F+Zfb079nCfIMcvclKV;PD9myY{zNT-IgKIVb
O0000Ihlr1om3R&OX77UNmvF?Cr7&&X;=w}PUnQJ4
z4a3jYq-#DMQFtnf=yWrg=lati=<6Nx2IoF&%@@~$XxA}XhaQYw0zn`}>1!5=LR1yl
zl#rQE@|>eed&N|Bi51sC(c~xL77QUeix`E|GaLk5UkxmmWP)LJ@}kpG0Ehq`sIKra
zHhudzL0jTwP(NUEbHZy;BVWpYuV?8m-rOj}pi0xDhh_k)@YI#~%mXPj1Xfl*cA+WJ
zw=WKE#9^ZL54GUFhTK$-;j9$HUn=BY#1AJgXSY}Bx=G!iqqmP;I+YGz4ZSlMOood>
zJzixZ-sTy93C5dxF`4b@;?mA%wwMl4KcdxQ~RI=>I1A#$p0XbuAQIP+CzZDy`RYiFH_;Hm@ej+3l5M
z?8ia4f{`rc$ft_36hIzR@->XUqsi<;WCGO?WlH~kQp`6eRQu{=OQ}r3DdlxDTEO+H
z7}Z2F2JSm!>;<$*A+XuU(+%#4#3BFRBbgCS!N|=k?Hx1?foa|Q&N%EQ+(0wJl<1uA
zu7*1=!+1}HTkpeNjt3X#c&`;NbF6r(PjjrHVt#+6fBFU5-sp}H21mzmL8carj}`qx
zD)*F}bkY(!uJ!c^k@6%VsII~Pb`1mxsVCqz*>h8s6}+&RM?Xw|VCVp>&>*~LFVt_$
zSf!_)amIfPfw{0oQw7Jlt&^(K!CLZ;6MqMVFrk$ij6{e6QzN4uD9p`$ErJlnTG4Bf
zATs7)MO1@ejtDkO0fCrHls!~YaQ?>YKIs$sn;HnU8x=ZMJbWX&jXbHzWKNTd=64Ix
z-YNrj8+VhVlO%V1e4g-*XSSdg~Ks-I_v~M=Glh*|$Cm6kgctcMRHbiQp
ztX=S91^tkE5`s!bxZp_L3KKJR&r*aTrcQBzLQ?`k#VV<&N!^;R0gqC|;7Ma@loz&D
zp$LMVyPl+A9kE1;ceL_dEJ%(MXB$#sr!)U7TlQXw{{|^{rd1W~L^u)N<_b60hF)FW
zyPiHp(2W4wS<)d2jU=)#Adj8nF06^0n%TS8Dmr~59xFf
zDj`%(`y!XK!n_HZ`3V_Lgs&m&Ks$`n)pV9+sCC($2tR{h#B-Mmvhy5C#$h5g5O_58
zz<+3T^*O4r8I!GWcT6DMIJbv$eeu<-SPC*F!}z3)%n39{YNt}Ffl!}5LwFJVHT^f6
zf%etSdNQPf?x*k7LeQi=jb6Wqq>_B-^_#A(!vYu)czMrqK^am^1iSUpW0#6F~5Vc7j4mxOfiZA*EffN&y{$L(&
z!X&$o5IPP(7NL^~!7)TPF{kkX0*#FFDuWa4l(zZ_0%^BR6h1cEMCgqsMU~%8J%rK+
zIT3yqVOgH-5mwO--kD-8;%Eczdpc&NJP|ffm7gy}0Cs11=N4=tvIrp?*8wU8g}g-Y
zy3%5+qt~S(Pe!TNqn-?S>u7sc1#2Mip=J#AbX{W2)AD{bJ)>DD+b(Ar!l2B$^xsD!
zO}qzG7{T`frMJ;XjlzH8{yBPkI1%1uTH+m9IMa$t6A#A)f-LHzmNH*S38CQ?9TS}#
z2fvT!s~cTH089a16A&+D?8c>kV^=I+%}r#4CV_aNOe5G)3}l>g#Hg{B>|$l}gulEI
zlt*z7*8aN_c|fOIVEKo&+JU~t$7cjGc+=)jHqxU76b)qa*Q8#LuDXz3alH0{s&k2T
z3dCdLt>0uWi=OOrcZblbAW=1~a4vdw6n707^f`RLC#}W_>+oM_P2Y?eJ#~>OoDGM4
z1C$`~%}}hoD)|oKx%^+Oqp~X|QEJxKX$|fNY!O~!5t8!85g@*(6m$DS2)aZ-OpYXx
zH<`eR`N9dx?GMW~mmnG1VZ%3Ojz!Bva{FU9RGAEEOE~7-h{E@p+h1uv%`%Xl-tszp
z)kD$5X>Nbi3lzPFlfFU=2I{@v;vT^wwP%0!ujyML?kmMsXnRU=%CJA*J+V$1j)C=U
z8T7N!XcbwJH69
z;;p{q=?nA+MEDbRX+{RmTKdBd57VSuY{+CHrQNZzpJv{C?22YcKBbxWfIOdaJCP#W
z$#hz!Z8=B`p`&P&P)%B_Je|5S&B;LTp&xBivhP$j?$ltrl2v=PR$-ih91TF}`(1Vn
zEO`&3ZF(_IakO18_A3=X&p<|J@Dga+f+H0sA>Mg|0mn^-ww4+
zVyd2c=}rg-z;d-q?<`wkt1=4DWkzu+Z3g0Mc)p|$uw
zKv2|G1>S-Qs7FnAzC{J^;nM%Oh6cP#2g;uy!lCCG?tF=s$e_^*<1aEaz+*!brS!v{
zFVR1sP5%U)G8}_W8Mdafh>vm^>TfqPi?|Wn{lwT1X*VIZ1lmc6O<_(MjsbJZa15C5
z$iPNG+lY>gN8bFFfAWrdS36T-azJo``DJw9lYt%@hELY>Pu?ZzDnn4|9B}GuxHHVR
zqDL73e0n&=A<+EnvTJT+hyY<&3gPEBqxs%@AORw~L}mUNM;RoDkaigErRaH4#;k+*
zY}3bpIb}Eo%qhb$VD>T~{(=p(9n$Z|oqS_DyL83N=F4I>rQ<$XF&(*hOX&}Y@F(ih
zybKn@wjU(?oaWyHer=wul*(inRuQD=4C{nWYv2#_dJ1I_V`v77=n6CLMn&x*uOb+u
zGXi!_I;^r!Q58B+ajvFQhGWo@zV*R@c9^h}A{mCT6aGTUeb|Wu4mFX$Ay?lEJ6Y1V
zqIe2BQAY?nStNse3_C%S!cKzJ_KRUB|BN<$d^%+~2K_l1s=7h$O!ZB-`@qT5dSDxK
zzCYb6NM*a~`uynIA?+vwU<&k)#rE?sW&B7FChCI>I(TyjaM{to#~}f@GBbBd2E%i|
zX_{AhXf+wm9`Yea6bpccG$QYZo!Evc^P9AY4zZ(ji9_d)`(~@G^qo`?AB7v8J0jS?Ju2?d{TcSRU&V
z^i(|j-P7I*)GB@JuDxwHwoCKqdC!Bq=z`NVN*ED&BKoZiA}w&Bf3cAgq-9@5I^>9A
zl`LrAX_2>D%asnAOEM~8iB}n9%%2Oom4PdXMB~F1oDv3gl_BkSKm6(i=*u13MSb_V
z>oslK8D%CvN&7OrFy^5yNsQ1~o(}KnMWd6vqk->A$#rxVe6
zCrpR&ez(JgGMLybG7xh5wf$0oQSkbtGHuwm?lwiT!}###N-d-r&SNN&xu)xKlkX%i
zwtK^Q{>lyAj(@|@W(tKal7T~!t_;KQl@I9OjuT5|xQ>5gxmA?`=x|}kgHsL)qe1*l
z7|&7}uH)Z0v{jYCTx0;5wky?i!D}8A-f^D4azi)c-{>=|Cc|nvP@DdM^Zb=sNPj_w
vjaW}`-LkYc7(l04Zd_U$IU6>YB7yxMAw|=*FnI8*00000NkvXXu0mjfXP)S#

literal 112
zcmeAS@N?(olHy`uVBq!ia0vp^szA)d$jrdNIO*T^2q1?oz$e7@z<~omruOxP%YYPP
zNswPKgTu2MX+VyIr;B3<$IRpv2|o^e*x&fjUclVIz`%on!B&U$UkbnG8=x8nPgg&e
IbxsLQ0N(5#i~s-t

diff --git a/docs/html/img20.png b/docs/html/img20.png
index 2dbb9145890fc4fd861844e5b7411cf8c0b5820b..7e25b47488510c6da07c79d63bd7d21730954911 100644
GIT binary patch
literal 6807
zcmZu$bx<76l3qMm2)ZmTL4&(Hi@OFE*Wk`V2oNL$4elD;T^4tD4-$gAYtZ9&@4dVG
z^kajN?%Gzgap#*}{F4{U7qJ4Oa=qiyCusZB
zJd@NYg;k<@w%aSn$F*<**Sg6iEWG
z@mV^sRhar|y#!~0KWkegfS;-Gw!ETN8_N6lQyq(hyR7J+HhQrzrmrAW5<@>avcl|9
zh=YbH=U9sIH6XP`Fm7{w4f^Sb!kR)kYiT=Q$RLd_j(epU5u)eVgBMKF0|nk#TjUtME6yF<%;FIKIrK#*&%9vZLZ%LN}x7JG=T5$da(;$rq&s
z@8{#nr~^)wt!%-cWDi_l{O-9$9FM$zC}K6RBanQS&IAoNnS
zWa{WzZj1QTD*4Ji4~%Ih1Byqu@~KUrGZ)IXx~X8>0Z24O+Aubibe!B4#|1)&zIdQv
zqk5Mdlv87g{#fBuA-6-z7HL8{W4oF7LbPY;mKty}zT7Z2_Cj1`j6!Ea3!{XwS-DN%Og&shVz(f{HSpk#um!HyaV!~DyzG}#
zRlb76o18x%6p4~erwg}wRA+!QS&Jb&=~FFSA@^e%4=*1r#HCC$^l3vnVz9sgNhbRz
zp-!aO`P>J#~)#hFCfuw{y(y$eSSf(Vp#T68a3YUDWV
zO|bcjKb|C5MggyR@&R#wN90L%&ItrM-`yIR8=KI7)HtHsj2)ZX@1fUAy~eL2NpMq|
z%M)4PG{ugm4NRflkN|oHC>er^zd6?$#pl<^2@ZA+McNlkg-Zx;=kW7&M(c-3aNY2pXtyvq`O&Dz=EU@R31n&
zkRAswz|@j=0BEwpUdCC1a@V&=JB?CY?6yR`Z;uyHsTie{NOdg-HsO^jJr2l42-GYz
zDPZjWT`TIlBt!-Uz-w%dc~-L019S_OUVJKVWv}nw9L(}}UuwTaT<#<4Ug9bSAe4r=
z&ONW=OE6UQ?RY&p4)tRQ>Tt4yylF~(CSqnfQNdDGYkTh(-G_^8r%RJp?C{?<#dcYQ
zVn_L6F~~U}V%Lpe>*N>|MjYOTqFKl4H6cw$83ZMSTofBDkqJplHI``{@Z|`7jd(hY
zU)dQDZ%V>ZuRo!s?r(6HXIU}Ti(6j-co2UPmgZ?kNdEFs_5~g!Nn565oy?NJRs11)
zu*1aHzr4}gnNsORU*8JXN9kNEMzz7CWkeA{wDHX7J+;`?f{W84aqL~v$JCDdG|Ddu=hrev22{LP7n_;;@j+*}wNjk@nw{DoR3f
zq}u%8n2pA_eef-M!K}rP6YP_lZ@Id^
zWrQ>H7r!w
z5>!hcTNQQM|4y}mCHLIp%HTfFbCqdKy0;szSV=+AIPFB8e>I?*gn|ek!!ZH@^1>%p
z@K*2e_1Jc&BoH+T1XS};3rI+n@vh)ilHe^)fBtBRu-@@^U+@>#J=&wU@6jaXDT|X&
zExD3_EE>J3E=EZ3<|s-kzHhezV{xF9?)kquw5+W@PpZn|oAf4T*>c&#Kp^6MwHnpO
z?+^RK`9uL`m2#H}P(Pyqjr)koKQW_htYd#|@;Xk%@b422rFBf2$%_@#QEU!?`7Y0N
z&0$}u=m{F`_TRGm{r+l-*WaDL4#8cx`YR=@N*MmefY;Eowqiz5<3x;FsAi%GEqrvb
z6`rjC_F>L54U}1C+1j0UlUjK5vowe&cxcj!mXOrGsECQ)jFWC-$MFg#7x(h=bbu_c=sBi%S@GF1`|
zGN`d~R@FkmuQcEcG*=CiUvCc$0NQtaC-@24GZ%=O;74JT7hXZliA)_%q_}0uN3Nwa
z!zb>e4E*c4IC_AbX=hi3x$+gr&@@hY|W4UE+
znrj~lxXl5Dgw4zWFK<{K*Ts!3rJP2^URX#jXo7Tr&2UH32lVp!g*aP>$FnZ6v{W~y
zjcq3}x#hj%tsJl{
zi-*RWRJ@t0%e1v(MNJhSge;l!;8#_~mTZI=$brr{P*qH0Lqs-K_+%j5XgFX;8gNPF
z?}gpj`sQ`nZVTys`xA-BiaK
zI<|&DUk$>zTAm1$YyFALzUa)Aw+&a1u8Rj>^
ztDf4aShb5d6Fpm$%BR%I%FXY-gi7Zm4&t=-RWRB%9GLf
z2h?*UXs9?-OBHh?QX)4EFqwnixnliT)m@ji*l>@N1f`}oxuWQCaqnM~^mwJjFjsL~
ziC03Ji{iWAP|O!IZBQ6q+3TpP1$nuMQpfSRjjDPmUhFW%6f-sTyU|`L1S-o@sTHfB
zT;dzXvly&>K>o3R?A&briE60Y#3deesnFa&)0tyX;UtsEn7H38g+)Cksd$a>W1-Lc
zPA+h0r7uza4sO{+cXUv@yY-hDfh-)mdWs)0a)*QHyE2j!a}NvBH}b>8oHDJdQ4mFaLqr*nt4ULVmSiA(2YqAza0_p>TeKKPLZGdFZ56GS7+pu;_IyfAx4L5o^OexBENzvV3CQ$dzsRs0{r%E|6ME
z4pj@S_i)mdX?Y6i`@x}I7*z7T`3<0_6
zN)akEq!?^7XvS+pLR1Wxe>99Fx#;^5<4T-5dw@yeh8gFan&W;`essE=QV8rlN%vJI`WU4ad
z)~FvR7VBJQxK;ulqcxamZ#1+MZjtPEkecs#`_))kayQNpg13WfLeh~)$;*UPHVj#l
zpp?CRQw>7%zp)A5AJogu6})g0`j!WGk5<`>YmS?I51B@^c_(frlchZn5=zsnk#|Qr
z#m~?xNowkx)Vz+oDPl}ja)E*67W&vM_dCiN5e)NlTB;8OrV#mZqNVi&?f{blUyYz@
z2*F|at9&{BK33A%L9oKdWY`6xG1>FylIjGr*4nRcwbRFVKLWrSZ{`jIz-y+zi*ak9
z72K-~9{NL?(jWS3Yc8F_y$Y3Wmc1uNPsapbOnqARTWcXgksA_1ZobZ_ub{)bs2>$m299D;M&Qvd
zWN3D%YHY>jjEkEw)mb%m1O>_i%`3E1)qvE>KS;D8t2|2!S|P-%rjDR+jIW7uP|4dq
zsnE=cU+ouBKA#*@Hf*ufgqGEO>^&uN!jq4&+Dgi%Pg|7&1W%Z$%gV)5-v&BdIjg4;
zpU<^zr%ed@k&TA?qg-s%Kr0&;&MCo-#|2e=`{;ed2X}+idC2%<%!;&|X&X1m6TEvZ
zxlvfc68ANk=F_Ipk^R*(MyG-Ycaxdz3j241{in@?>%24PYAr50VcW0`eE`XI@F;Tm|bjjXQnLAg{;$Y?MRVQtKAXa)a3PG_AOSwjeN|ZY%Ga-X{EKyjJu+N{XYXSjE7^=2FQm-ojqG9&i@uo0KO1TN1V1A!LL#fD&Q3;>q
zuD!F-z9|VI0c=Wj(w3
zAsR-Iz>7<;L*~$FH^T0lZ=D}U-%HzF9iH2Km9vxp(6)&8M6`U00<*cWm%r}*g&2L
zBS_RpiRfT7CSU}fE(;+;6@*RQ7-pQ;>Cz?pbvqyi{yzugV0?D9>3CI<>bH23`+f+h
zFt!I;ntRlEZn2qwSlWAsIY}SG(ks+!0D|;mbR2>~KD?P~c?TC^UIR*;h9-hkwYYra
z$IAw_ex2weR){L@Rj?SbpBsPynH}%ObkG_{id8`%apK9N69*Km(KSdH#zA1tB|6$#
z&C5G{2T!ma(EJq~YlgVBjvWaJu@Bfg1C^XD!zpYjv(RU9C$c0YgvYQV={jCFMsl?K
z=Rx*F+6(EXbZ@JX@kB~%kgR1~OmH<3G$nqmk?|4GM+j)8F`g$CZ)`6)6%8%eOXfzf
z8e0g*;&+R{`cgLkqNiZ~a}7RhP)p@)5Hph$G{(CC+7Q0J3reDP)^g;jY*+ZgzI8AH?7bicf?U(7sj7^uOV&bk_CZ*k^Z
zHT=7dM*0)uoG+p_Z-lQXVMSN5IR}znk1Xsf@g-M>aO<35#q;J~FKDP&pC9qMEToja
zL$AHSl!?oX#LU*>ma5{jMdbn|X5fl3{)F%nR_V}?#b)B^HO{yh%UR%&B8@AXH>>HIWv0+D
z;`cE~S$u{&?|!q`wAjl^rJ+r1@*6HI8cNsiLV0Z)%&x9h(`=I-xk$)sQ_5&Bv;m0(
zvu3%@8_|CupAFszN0&rvynZ-g=3`C^9J5x16c4zZH*~PQJVt7jpOnoz?wvZd*%3(A
zPb0Qb>yNvaGML$9^=dsGJUVFz3w+xkr6pfGsAaL+cxxww@7a_i7-13d@UQso3oiO*
z{ZRB2*yH?TGaG^zw|@b;7fkkHF`vV;?
zVb*^es}d1i$x&?zzJ)4hn4AjfGA@C+)wYeH>-EkR)pZ`*nS26Ky6$2;6I@}5Sgd{<*6(4^n#*ee7o-h=mKh89PS)6|J%M$qS23-Fea!BICVfITQ
zPPAWXj)V()cGpa`pd^=qWQlJQ&SBG3r{wv2b$rDge7OU^N>0-Yva(No)&`@5#@trV
z^RA0~LhjLR-F9u9=Ixc@_9ygM85CkX2MJU;N^u%8yIdTofHe~}zweko6Su^K8Vnze
z=`P=aamVtnGk!Bp5M#11}VdD*Ea@q9*5>20T^iFX1AhP#+NBOOTS59=k2l}%^my?F4+u?$kM=r;0`O6OMz
z5^m5k61EMY5(_REZS}M9)l`4jY*4p!WOHzf3V!a^-}cHCw;gD78|WgONO05kD#Dxq
z+i&#*-i(mEnhb-r4o;bPW)7>STAzmu(l^L&3f-u?q=M}&LAH(q5&hZ!2ZjC{uJ6aW
z?Q(W_@pH;fSAH#_SY+nCvG`)OqC1u9*IbY@x;&XmcbU;quM_0Wm|6U~wOho_JOciJ
zl$)oOwSg~Pl(P{UraJE#MKptB@Z)>6(Y#L>5HBYx%!*Os;~ESrQA@P)A1RR)Pp}h<
zuHS!>Lm$vsqKAnxY}bYS)s5tr`i5OMj7cuds_G+7=UEOxk}l`2z9S9QM8wl05fEIh
zt9PHKm{RgZ@o5-QHB_uxCyU>j%h+C|yj(=25;Jm$%o;s@Uvsf$lAI%$-y(>qsP{6<
z6(pNdVjA45T;zPwcfij)Y%6$o?CZB
zz3R2~9Z@q=x7f>e_;fbQ$MIB5Pj(ZPuj7`2PKrUgmxFuRth!jCHUa;6-Qe+{qm%nE
z#u*C`V6ShD5en0Phy|}u;NcTTts6^Mvw}%?4Ya!A
z)4$G`xw5^^&@a|iPOH>#wCmVC%X!|oJ-%a7x`}wlg*FU?B4;98*`L5aAwCF);9l!V
zJpLrjnh>)R55m5;7
z^4wtVN#|^#Ovbk_>a-2^yWmm-{BYEVS)b+#q5encw(@_TTLnoEK~bhAcm*`y(J0oB
z4mmaXJeE7&D!Lv_8_|%*bkeNypVtFnO&Zeh8J}E*RWn#5BFDzA$+8P{dqeKS$*VUn
zwHAq83d5jfsfWxQ=UtnZq4(n`%jbU?k1$~x(n9lN*Ad{u&}E8nzV|>;s{yOh$?Y>X
z>{S7t3RCyF02oiQn(9P?^l(zOnRd82<3jw&^l
zR9D3<^ODrK1IzT#u_q*^=f$<(1>q>J?8@R2EUl#JwbSSgpK{f~)sjnO!2I#7{&mhJ
zL=54ZfW3gg(q-NQm!IyKODAKmHIt{xkGApW{5US_$A8l2Z88U*==GDc6N3a6%|ECM_XH4tEi|jGBW;Sf{R;MSC^ii9uN@V>gxLG(^8U`|MXP_~Sc6JI-hpqNBw*mauie$lrImJ&Symsn9F%8(4N=uh_W44KB}(+HY?D
z$tfGVk$>jA9NqRAJNLC$cD=Et8&zOWm?tx(*SLC)oGrm>so{=2eqKkfb80F5eRH~Y
z4?p0GbxzZ|5?|0*vT7DKlP#fRV$>{GPy7F@6$H%Gi4-c%FL{VU+;t!&ovmMm}(g*Isngi|f;u=ot|9BTy^z
zX}ICCI5Po*vK@5qd{qlv#kSQcaLitUg3nhovFbGB?2?
zflOak-j_Fj?QVp4Xplz!FmXVJ>(~sqk$dBxqU2L1HtH7DR4-(!FV>_W!GDA#+3gCu
zq!QF08-0K3>@lBrTZ;?GUwc=)D{^;bb&Ju_HRA@-NGx6cP#jv@H)o=gG1#L9kw!v%
z>ZY2VB?)8nF=vd`tvSq#*a-0a$gmT2o|I_mdtZ&<8)zlHI>vt=&`<7pspGlv(+s$r
z<7HAN^~;8=%G-%
z(rt_Ss_hFO(P35V*8AvDn`vgQwbpvh^30zXVXK&19n1}s2111ojde1x>@MqBAhKQ*
z5u4n1PJ+$#ofANIETmX37z{If$UMLF~>
zth%M+ZWPZ-uqxrt^_5gfQ7=@s66D6WJx#%=TuyIUo){6XJ4pXSyWZ1FD(x4M@vtXK
z&Q9+w27fQq`g6PAo}qjiJ%7;fWk57h3uk9i62dY7>;n&`Kso57gJh)Ed>JccCaTCH
zM8?pYqY(kpdkG8U@HOy$`%Jc+D9z)|2bPPdwm*qYS{S`AS5T7BMISCb)x`2z?JYfQ
z^&gXQd)z!NxsPD@6ghMKG^22`krS9@msgWeQ!mHTrSOW3>F4en`93}0O*rEGL6=V|
zgPpMhXSmg_AfCw^cMmPx6owPUPkdYC7&I|ivIFi=C9hLq048kTMb?X?zI_Coj}N~q-J2QNIe17_
zB5}CSk-4oo{9mSduXdPutwS(|q9NXKy1tV(#_2`766e|7
zmrWXejG;eJf%u!d?+dQGB-Ezh7hrcXA#SwnKQ!ELj53NWBBfe+?)eEpcdy$53&?t*
z26p(lwgP^~rs!@ErK3Y~ETV8k!l;?2yvq>DMC17&$;>@21v6{EKjgDZ{GTmmw$|?@SQa_xEu8iJn9a?1^48f0YblVy0~+Nh(0aoA
zy}0HoGSf1jj(A_Pv@va47u{}g4YcH-l^g>j=YCg>94dc$(C%nR?_sk9ev>Mzi-Kad
z)67J4i^mbF_>p2oYGHX&IqdHK?;Vw0d&_mvQtCN8%U5N|n*Ns9l1+IhecnZp42EZ+
zJc)&zgnwIU`_^w@Bran&41&Hd(Tb*R1?lFc|H}R}ESKZXnzwJra@2UdpVmhZCuKuk
zNuHW{4Y57p>Xfp7vt_>gh~7IL?W9FP}UK@TtnWX5+B-r`;9$6TWM6^wac`zexP
zGc4ZS4&q%}#UV~d!WjC3>d$tvjAlHMI%<%w&;!Zegqd|&DF~MiT|dM1(6O2dFHjye
zv%d&^ADk0qMe>5^M?{yhZ(<)U&PP1=#KJD!tZ1k%$pmKCzP!yZPBswVEwSh^FObg8
zEtR{J)>&`vTM+L>MH@tl_h_N+LwG>F4A)v{IX2@Y%(r2o`!wC!AS67q9_ld{7$eG&
zNS*yUd3}G6_DT`GBstm`dD^%&l*ofLSu&D25d(ym|9bMZ-8WvGIbbr
zn~q^ieq+%XG+lVF^V#$jwR;YxSpDY&(SgD9JK=O^+hzKZLN&E{megwVqrX}Q4C|8g
zQvGR^TiB&EX)3nMDCQdcbw~6g3~bQOv0Z&p7}S5PCE^X&^fF;5O|tV4gIQ8$x6c=*
z7^0YaiblFesv%
z)9CVVdt8n9*)5}-_s=!jc9I=qfJ&ock#n3Yag4n`DUDkATLHH7R(>}5EYo-E%(5q@
zNv&THr}W)iZWW8(kYVbPVJeWV8PmyAAQ<|srAVv2i3hI58a03m_s}K(rUXkkKS+``
zJ)uofly@DuZ$S0CxNg=fGdYpgpkLL!9xJa;gU28qUL&;i7aA&++>Vi{gu;jW^
z=J*Zt$I{O}MrXLZ>9Dkz$lGJUSOX{GzkKSE;h+U~nPi~Ap>kCmw0Z#ivPg^>S(F3X
zAUFK3mT(i0%*$u+KJ7i{^Ex&J!a+5|?WyN{0H@pkaX>4wh`?m)fz~~;$`$4y!fi@j
zbtg5k6^JDs9tv8Dn>6e0<|-rV5w411-9-arEN?g`Ol8vhxR?I<6`>6XHK(G_LKHTo
zM#EX*pne@5O{ynsuz_Cf5pnY_Aw-YHxxaH8@G;yf?ZC`)qtEw7WHe^}R`Stdvjd?l
zG8{M&x*B!)_d1Z$pi$RVl5&@yu!%X|*Ov!p%%htO8mC_g`VoqPO66qoJUWOmudTRC
z9xo`X52z!=5lBYdlKE|g1ddn~kaLSmhmmxC(#T7JIWh&OUFVutq$$`c-aKrQfWG4z
zEai-M;Zz_+j|J5bD8*AH+)RRfmtN1lYgmBjlURh%`9O>#%SuWEtFP!&NrKbp
zuIm^p
zJ;G(i`$UtUZo@iiIOLdF>B{F>|9-UZpKX{4M_*H?6`rtyb;G2c7w~{9g^C_2jk7dq
z$pY*@+sl~vPe*gr-7#Vi4!)IVN9UJqGj87g=J~F`cBR06QzK0>VB25orRjA?1F{&m
zmDZ}P`Ot{P`hc1tY66-;bE`aZTq=&dP~0;P2a+2b;?2nRe&+xu{xbczzdx#tW4t(Z
zpEIr>>@x(`=?w!p%u1)4?Opb7H}P`z68W{S1OcNs^GPXD=fI262?DN$MnoEm~lc&__`XN~6CstgRg5h^oC?zcUjhrN8T5k*HrS#%?0N
z`6Sta@V?`p`|udYu`q8uc7IQ`M&aXQwxt|!ZsglN`T)aQa}g6$Kx~~{!q;7}+-WGm
z%toR#l8ahHix3kV+_)Tld|6ixM3+{h&By2mXu~Z?n22IiV#LI{_mKaL-Q9BaIRj`S
zRi}zMSSC=TWDdG@qKbe4_d>vIdo)th?jG{-WPv+WKlil|5iumy`4_{sgVQrbyrO;D
zo<$!YL2=K&n{5HK3{}h?zDJe>#)eog(HAIZPc6t9-XxgRxecq|>JOdB*|=Yf7He+65peBx
zUdR??chiY9cw;KapB)`yKMWt%`m#=Yfj*mpnyIpTA@eb7wTvL2i!aN&M^+7JWB|)m
zD#2bVlhT|%meVpchZUkV8@hklX{=!1*(^UeY1^pZ!k{w#r!x5|04g7DpovDFkCMRE
z1;oqRHfjD+xac4Q1~(B^i#Y#voX>dw4i(gyh-Kwx{_=^3I|1yFJXPh(GY0IucsFfY
zpWoCRGbzx`*O_nv-Pfl{8l|!2JCvzKvq?4PvfttRgS_2>%?6fJjf0IjX38H;l5d9_
z>|z}<09O`=GL&PIuPsfj4oYy*1+BUQ>^5gRmsh`EU|f9>3_k<}4B>1X4XQK+BGfV;
z0dw`z2KxqUB0d5IL2d`$3LU-u0u=6cZ(OaAb{^zw^oAS;L(6?5I)?iJRVSanxi|&f
z=AQL!y`-GaXn&E@P#T9`fp`L`aA7zq2c-Qk!edTsWz(!+Tc|QuV*dEhTuADh0N~}B
zDV(1_#_aO~2pwSP8R3_E>O2$9IZvrhNa?>30%Ca4kc7WB_<@~&Dp1)2k5_>?VU5QxOaL7
zkECz=nW9@G48uEXdpZ|@k{WI2yASwo8WGG~JFjyHZhMTy{x*kIy(v33MHM_fq~^kL
zT>}(kmKGnbKFH;_K#^SVG}^*{=S(_bwP3t&9elX;nRvV|I+0(HbF~;nJmncx6||#V
zM#A!sa_)%VS;Qa1L*C<8cdcDc9$y1v!`mzSH%}D&7^fY+Hh4U2g7W#^C6VDt?T1}EV!Cg#&M?o4$i>MHk
z25dP@2S60T90%#!DiD{_zZG&V06n$C*B#6bf+e3@!8D>ErcJEBVD2
zr|DgdhR&$jL_W+v0`GU_nGKd$XYbQcrd<>HxoyLl_jQ#ZF@Ql2Y^5hz!3h&hB>whh
zz+yPwEnMq-VXsSYMrk<_K?=9^?b?Ki61iE-2ac;_DYBE!bkLeX$*1?$R@dJr+Nm!Q
z8m4r$vKRX(8y3)8p)yfINcJ5{{M#oSNoROThf?)5F2)bu--_^55;Lkqb}dpHT)a#U
zXAyx*QL&1%J4rzjyO?DglbZsuOKr8;r`gfw^tbhvv6UK`OG$bF
zVAI5s!g^jq5&QB&mT0Iovt&48JB64n8=uKx$-G*LY?>DftmTjLHyM$B0UwvBMfzC-
z@?f_rp(ds$7`vp(SFk%wJm&Dh=3MAwT0`TnGC=Lv|C9XW5K5DKDX`8AG!FOV$iHqkkumxX>Ia;ZNJ7IYKiiP|k@Gv58-d*_GwKiEGGZdW+_!K+(63e;@bteq--eet%Ivf)BtMb*66M{#w``S(C;JO3e|C3}
zhp{6wx+oO|;&m+aC*8!%mf3M=Aa9;%W9IrsNHgqgAU`XP=13Ky+WXYyK*Eu!CjbrZG^tL()CN-Df!W(q7s
zAS#lf+r1yD{VwoG@bN5`p@=hMfHX_O$#zySk*{dVBS5ek36?!dyRR?Njq9TLAxgad
zmU;X9y8Me@)$kL4r7cW8O7Y+nAJek!!LEq)wB?tUd`ebTG`4kdyia2xT~&_PGRJY?
zZmP^>=v_b!=rA2SEUo=4l^=z~w7HNB$gL=BNi}2bi?$j<2j5h3|HtW$nu2BTvR6Az5?LkC6E<_&;2k
z;jEc0B)D>(K_3Qa*=AjT%PS{fohan--0!7664}25Y(w~437?qO{*xP0q^tS~+lVW_LT~9z{H^uV>6$#S&*VGd
zqtftE>xS3QN!f}264V@M;23kOds5(gk?eV?M=d{9qz4h;2D3lodOmwE5b;G=f8)Qy
z8T9XSr~(-V_?yu2o*1lrYb%rl4B?JE_sVUHw>Xgv<+Q5uaF5KXlE?lzzbUYw_!-Rc
z7`ELMdk35!coeu{f8Zg~vCYPuG|=5(f=tA3c(%uf_?d`I{wb-*x=eSTyhlz
z$%-V?_dK&o-hx>bMONhs9h<`i_<5fH_zrd8aGQz8hwmlPzJnX|J!q2rkB{dB-{F^S
zSgkZ>m`#>9PoCU8Q2g**<$<7F8~=+>P8mIY7`dKF^oKbJg$7m)loCP8H6mNVnz0EO
z&rGpStbH-xM`{(|!lSDO3W=DF93$|NNp!^!|AhY3d}n~Kx@oZouPugl7h5FL$T6#g
znGv=v&-q$9U#XIJrp)aNI!!1iD-lVyceOOms}hqG*(56gf6ndtI0m{`6^gYbb+i8s
z2GH^l0}_*DPx{hFmP$Z_^hqN4yib4;p6vO*2ZHS<%29JatIX!JlA>Q`YM9!HW|03&8`NjZm}9v<@>_
z*s9d=n92s6K9+Mp&65xmOC=LzJUYngy${`%OqXd>XA=u2X61rk6JMh}DpCP|1J4;+
zjG%hdw_9axHH-mv91Ta^AIp;5!(w0j(Y~Mn&#ztE^|;ked**m`jp(;VSc&XZCs59U
z3Kf-&tKXlbS?bO$cD?U#q<7>`INv7rQoraQ{mti73{m4j_|fl<2d_`Beg0Rk5RwV5
z_S#`@%Febq-=D(p?-#z|WrBh6H_DMda>TAnGhj
zZDB8@rx3bHHYU4yPcRWLWafx7=}Z_4jDPDq#JfX_w0;`4GmpBVFINCz98}#2l&{N&
zZtcu#3`c!x{G|>%(A(pTd)4^fg(G4k!qSXylz1z`nk+dcD@_AaaE1p0wfqlVk1t|h
z)gH&+mWj>#c7kX&baSI-&%T4ECjOw$sFk;_y>C5|B4hlI^8bG=&p$m;P%So^d7v5v
k!^=a%e|Jw^w>`H&LY{CZM?`~v{+J;s%Bsp#NSOrv7w?PHvj6}9

diff --git a/docs/html/img22.png b/docs/html/img22.png
index 0f8a878c6c6dfc76e68a2d7e3e7e969447c3ebac..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
GIT binary patch
literal 0
HcmV?d00001

literal 543
zcmV+)0^t3LP)0000mP)t-sz`($#
zr>BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*Iok>JNR5*?8Q!z`!KotIZ5p0rc?I4KYaE(qgif8h
z33YeKDuRT#C@vjz5}|W-NO4hH`UhN2e?eC1;^mSyXsmWqwLsVE_0Yau~70^@QKpdA-W+qslXRz
z3q-m^naB=w>p;(2^rqTWvq)nc7^i{>Vm!F4ojkJVyu^qe7LG0KF2Wp8#ItKLiJEVS50KwAJ0a2aCl#7tkh~;T>MOvnD{J4vcgdZ_=u@wU=+(Ev*DYfEV(d&
h_QYuM7u7#z$2V{^Usp^Ty9)pS002ovPDHLkV1gLx>^lGe

diff --git a/docs/html/img23.png b/docs/html/img23.png
index c1d195f73426fa3005bb81578db66d785705ef92..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
GIT binary patch
literal 0
HcmV?d00001

literal 799
zcmV+)1K|9LP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*Jok>JNR7i>KR=!vzZK$Q#glOHYT!BMg9f=CkHXzhDbzM`^D(L1AAqG{on>f
z!sSwcIT=_eHi5GNA!-~&)Nm^1&Ih)p*9Y8J24FOJflOVXbOcNO6BMbG^AIa)agRX`~lT6j8b|Cel&IYXVINXTg59=Q*Ju6tAZw{0UxTMh8{vU2XTp>
zKbZ4ri|F~5p7UTtE7YVDvxnrEMGw2ENJhRKklQO2hAtnRXGY?VBv@|`5NiqQP_K^E
z7iby(azb?PD7%2;NH7XOqCDoMHI@6Rclf=sjB<
zQ)dZ=vzUu*6dhZZh_u%7A~!Yi^ivnM@K}cz7b3&kG+eS
zUqB^h=$Rmw?Q)gccDb_Fk5KG#5oI%R#dx`1H3~aVcbwZdZ^=Wie*InMdx^|!P0sog
z&Z4@MmW#c)6QgQvr6RI$n%b?*v)3ok_~MMD%5o+qS{tOEU*hM`M}6ko?D#b6JlrWU
dW|-k`;s;vys6>3O6^j4>002ovPDHLkV1kYEXwCot

diff --git a/docs/html/img24.png b/docs/html/img24.png
index da5b9052745ea8472decf14fde59f768ccca60eb..1cde977dcc32c8a55cd65de30bea3af0d1331353 100644
GIT binary patch
literal 478
zcmV<40U`d0P)RHR400001
zbW%=J06^y0W&i*ITuDShR5*=eU_b#52Al;9{0sshHY)=T3=Ke%ia@GQB
z_-jM~RksA9)Nw;7HU_2#UXjT8W;a&b?SsYvP*GEOptEC9xuLlwhP
zprYw;19vd6d<0r;!0UiyKC=M>kCXTU4xp)@m=1vKgJm3+4-70{K#Xh#1%!HFO37v5
zSKtS#YWE31ad3o7;8q6))~TMZNaj1IMi?-#rS4#0&@*Tw!q*8P;yCLBB9x*60O6@P
UgAC%sL;wH)07*qoM6N<$fBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*J07*naR5*?8RK1H6K@|VZByqpSY$7%Xhb-G2o_9eTkwYT*2ShDw
z^JiRfMX<0DVapRl7wwK51V0){v4Vn}K~gGOti45g8{c~yZ)eRm2U-aCgMITp=J)2!
zo0$bHWEd_r7ar=6)p}RaU}2z%pt6nnTqi*SbbvOGtVs4Y*%8|g)w?@2THFJ`>loMT
zQ1q|kI(;ew7LZn?G|VKBZGo3>%lbf$wZ)c-$Q_XZ$C8@Hzl7EYf_cN{$VhjTX7zj$MCt?>N!~C`A@z|LAjj%t+;e*9?2%@
zBk`y>MmU#a60_JC-@{75r#Ly>N!7k;8-B7>9`2OR7r+BxU38NdzVkP1nz~tiHn&UF
zP{vQRYF@H0eJDcSG$pCOjl>G3cz1D3#l6}~vHr4$$8Y+00%7B5mEAR&#g1nB?8K)D
zR?u357S83bKHp~@##f4|U
zA?cTo&^&m3z>j0|?nmJJ@ic!%pqfpW|7#etX=V9x%Wi1D$Q}RpGXn#o%-5n@K#oCxPl)U0&6`)OSTSeLoCy;q
zw6wHTR8-{T@*cccXsHmt&NJ#MT@BlTviab3JNHLZK`2{mLJiCzw
z#5Mvi8PM1i~YGgjf
ovhM?PLYUc%Cz?ABi5y^Hc&y4Mz;5Be1~iMo)78&qol`;+0NG(VnE(I)

literal 0
HcmV?d00001

diff --git a/docs/html/img26.png b/docs/html/img26.png
index cf98cfe0687e5d392c1b37a6ee07289e80dc5365..976644df9e85cd6b250f64d230ba9da8efe572e9 100644
GIT binary patch
literal 223
zcmeAS@N?(olHy`uVBq!ia0vp^JU}eR!py+HIM?aYB_KyPz$e6Y^XAPfR;-vaXU>EP
z6IxnYDk>^+a&i(95<)^kJUl#XY;06iR3s!Mcz8hCx9zs;1X7G8L4Lsu4$p3+0XYet
zE{-7_Gn0XO(i<39+1NRn*E728t7Z^w@91)>j-4?o_Ls=
z@WAK5x_5VXms|KGd`-H*V7a&}QM2QBM<#Pe)^|RJNxRr`f2=*eg_VQh<1?{T#$N92
QK)V<`UHx3vIVCg!07Dc?q5uE@

literal 506
zcmVBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*Icu7P-R5*?0Q@ct8F%&&B`(Vb&j#G(tF(UY85j(Nj+QQy1u=5k5
zHdZp7B7%z_AXDn05LlZWD!YVvn7osqS%~B;B5cat^OFY3rD@pgk5+=BS&L~*0`-k6dp<6pk6E8`F=QB8wY*2Skd}9KJ8P-T0kEciQ02dbSDBVQ
z38(CGgd8_PaB4mtifw^&HLo9Nqq=+7(Yu2eFE~-Y00{$3#GDY3
zdBba$sjv*c;Vx-|a?9RrfIaBo(0*&{Pex7bW0VTHKWj@ZY7@s#5i+;c5!umK4(htELEn4~(Dv%(blkM-0hjde=+3W=gjQL;F}RR91007*qoM6N<$f-9TV2mk;8

diff --git a/docs/html/img27.png b/docs/html/img27.png
index 09de5cc5345774f75eb8025e08c631aa0bea759e..b9895904a565f33c6fbc271bd864ca4c8ef8df18 100644
GIT binary patch
literal 191
zcmeAS@N?(olHy`uVBq!ia0vp^{2(?9GXn$TXLHFXK#od)Pl)U0&6`)OSTSM3gqD_;
zii(PyoScx55DyOz0|NsU6%`2y37|sLd5^9DDaMi@zhDN3XE)M-98XUd#}JO0$q5Y2
zoC-~68yLBGBxVRN@VUmss4%~mky%BXq0}HJHQ_&^
zeSOu{)qyfwwrrU-YgR);LrF20!$4+Q!W6t9sttp1q|%c*wux?t;GgbZ8+cnIfjXQ1J48yzn4J;
tEMB8^6YQ7>Zip9(3J5v~)lMJ?000*X6H2?9=#BsY002ovPDHLkV1n(?LXZFe

diff --git a/docs/html/img29.png b/docs/html/img29.png
index 9430fcbe698aca4ff4a39e0554606de01496e7f5..02398bc14f3a848883d2d0c94a4e8a6f34b0361a 100644
GIT binary patch
literal 449
zcmV;y0Y3hTP)RHR400001
zbW%=J06^y0W&i*IKS@MER5*=eV1NNmFe$*pfCfO~tPBhvz?=YdStz(A$cjS-4RA0R
zfT#inhKhR+fQ(j;dfdCbxsT+J}?Os=Y|VG6bUjQ1&}+4IM84y=l~8&1~%>o3=Bdn3=JPXI89(+
z-@SV`0|N_CoQs>mq3ywij}TRS2|$t`i!YfmL|6;R_7vTKM@L5oK}AdsTnX@SV>ydc
zoh=f38<@mq_A(fQvCaJegGNL`#*YRDP^yN3)RqWH!U|cyuz{hMfh&N!f#D1L2A~N0
z0+=FZh8a-Di7()2VED@5&E(I(v4O_{lvJG&PXE9JVel*P3oux?W)!luHZgF9p|~j8
rZK)%K#g@7Qr|%HpIO_x=RDl2hVP!d92?)2q00000NkvXXu0mjfVv(eX

literal 203
zcmeAS@N?(olHy`uVBq!ia0vp^d?3ui%)r1nE0LiD$k7V$32{Ae;K1_b%X@o!)6>({
z)zyK*TefVOHEUKwLqkbPNmNvngM)*KiHVey)Q@Q^J^`f}OM?7@862M7NCR^GJzX3_
zIA$g%Bs@q;NSMKJgy#$^Pr!u(2MifcO<^&bAu-J`q2Xu_508!lXIvYzgR=>Ll2#*g
xnR%P@Oov@2jftWs9z?OV#U^x?ux(>uV_2ZZBbGElwhU-AgQu&X%Q~loCIH0fKK%dy

diff --git a/docs/html/img3.png b/docs/html/img3.png
index 81958a74179e129382a380de2f14db712301f919..fa40a0b0677a2e87f31865aef3771ec3d6d01f24 100644
GIT binary patch
literal 3157
zcmV-b465^qP)Ihlr1om3R&OX77UNmvF?Cr7&&X;=w}PUnQJ4
z4a3jYq-#DMQFtnf=yWrg=lati=<6Nx2IoF&%@@~$XxA}XhaQYw0zn`}>1!5=LR1yl
zl#rQE@|>eed&N|Bi51sC(c~xL77QUeix`E|GaLk5UkxmmWP)LJ@}kpG0Ehq`sIKra
zHhudzL0jTwP(NUEbHZy;BVWpYuV?8m-rOj}pi0xDhh_k)@YI#~%mXPj1Xfl*cA+WJ
zw=WKE#9^ZL54GUFhTK$-;j9$HUn=BY#1AJgXSY}Bx=G!iqqmP;I+YGz4ZSlMOood>
zJzixZ-sTy93C5dxF`4b@;?mA%wwMl4KcdxQ~RI=>I1A#$p0XbuAQIP+CzZDy`RYiFH_;Hm@ej+3l5M
z?8ia4f{`rc$ft_36hIzR@->XUqsi<;WCGO?WlH~kQp`6eRQu{=OQ}r3DdlxDTEO+H
z7}Z2F2JSm!>;<$*A+XuU(+%#4#3BFRBbgCS!N|=k?Hx1?foa|Q&N%EQ+(0wJl<1uA
zu7*1=!+1}HTkpeNjt3X#c&`;NbF6r(PjjrHVt#+6fBFU5-sp}H21mzmL8carj}`qx
zD)*F}bkY(!uJ!c^k@6%VsII~Pb`1mxsVCqz*>h8s6}+&RM?Xw|VCVp>&>*~LFVt_$
zSf!_)amIfPfw{0oQw7Jlt&^(K!CLZ;6MqMVFrk$ij6{e6QzN4uD9p`$ErJlnTG4Bf
zATs7)MO1@ejtDkO0fCrHls!~YaQ?>YKIs$sn;HnU8x=ZMJbWX&jXbHzWKNTd=64Ix
z-YNrj8+VhVlO%V1e4g-*XSSdg~Ks-I_v~M=Glh*|$Cm6kgctcMRHbiQp
ztX=S91^tkE5`s!bxZp_L3KKJR&r*aTrcQBzLQ?`k#VV<&N!^;R0gqC|;7Ma@loz&D
zp$LMVyPl+A9kE1;ceL_dEJ%(MXB$#sr!)U7TlQXw{{|^{rd1W~L^u)N<_b60hF)FW
zyPiHp(2W4wS<)d2jU=)#Adj8nF06^0n%TS8Dmr~59xFf
zDj`%(`y!XK!n_HZ`3V_Lgs&m&Ks$`n)pV9+sCC($2tR{h#B-Mmvhy5C#$h5g5O_58
zz<+3T^*O4r8I!GWcT6DMIJbv$eeu<-SPC*F!}z3)%n39{YNt}Ffl!}5LwFJVHT^f6
zf%etSdNQPf?x*k7LeQi=jb6Wqq>_B-^_#A(!vYu)czMrqK^am^1iSUpW0#6F~5Vc7j4mxOfiZA*EffN&y{$L(&
z!X&$o5IPP(7NL^~!7)TPF{kkX0*#FFDuWa4l(zZ_0%^BR6h1cEMCgqsMU~%8J%rK+
zIT3yqVOgH-5mwO--kD-8;%Eczdpc&NJP|ffm7gy}0Cs11=N4=tvIrp?*8wU8g}g-Y
zy3%5+qt~S(Pe!TNqn-?S>u7sc1#2Mip=J#AbX{W2)AD{bJ)>DD+b(Ar!l2B$^xsD!
zO}qzG7{T`frMJ;XjlzH8{yBPkI1%1uTH+m9IMa$t6A#A)f-LHzmNH*S38CQ?9TS}#
z2fvT!s~cTH089a16A&+D?8c>kV^=I+%}r#4CV_aNOe5G)3}l>g#Hg{B>|$l}gulEI
zlt*z7*8aN_c|fOIVEKo&+JU~t$7cjGc+=)jHqxU76b)qa*Q8#LuDXz3alH0{s&k2T
z3dCdLt>0uWi=OOrcZblbAW=1~a4vdw6n707^f`RLC#}W_>+oM_P2Y?eJ#~>OoDGM4
z1C$`~%}}hoD)|oKx%^+Oqp~X|QEJxKX$|fNY!O~!5t8!85g@*(6m$DS2)aZ-OpYXx
zH<`eR`N9dx?GMW~mmnG1VZ%3Ojz!Bva{FU9RGAEEOE~7-h{E@p+h1uv%`%Xl-tszp
z)kD$5X>Nbi3lzPFlfFU=2I{@v;vT^wwP%0!ujyML?kmMsXnRU=%CJA*J+V$1j)C=U
z8T7N!XcbwJH69
z;;p{q=?nA+MEDbRX+{RmTKdBd57VSuY{+CHrQNZzpJv{C?22YcKBbxWfIOdaJCP#W
z$#hz!Z8=B`p`&P&P)%B_Je|5S&B;LTp&xBivhP$j?$ltrl2v=PR$-ih91TF}`(1Vn
zEO`&3ZF(_IakO18_A3=X&p<|J@Dga+f+H0sA>Mg|0mn^-ww4+
zVyd2c=}rg-z;d-q?<`wkt1=4DWkzu+Z3g0Mc)p|$uw
zKv2|G1>S-Qs7FnAzC{J^;nM%Oh6cP#2g;uy!lCCG?tF=s$e_^*<1aEaz+*!brS!v{
zFVR1sP5%U)G8}_W8Mdafh>vm^>TfqPi?|Wn{lwT1X*VIZ1lmc6O<_(MjsbJZa15C5
z$iPNG+lY>gN8bFFfAWrdS36T-azJo``DJw9lYt%@hELY>Pu?ZzDnn4|9B}GuxHHVR
zqDL73e0n&=A<+EnvTJT+hyY<&3gPEBqxs%@AORw~L}mUNM;RoDkaigErRaH4#;k+*
zY}3bpIb}Eo%qhb$VD>T~{(=p(9n$Z|oqS_DyL83N=F4I>rQ<$XF&(*hOX&}Y@F(ih
zybKn@wjU(?oaWyHer=wul*(inRuQD=4C{nWYv2#_dJ1I_V`v77=n6CLMn&x*uOb+u
zGXi!_I;^r!Q58B+ajvFQhGWo@zV*R@c9^h}A{mCT6aGTUeb|Wu4mFX$Ay?lEJ6Y1V
zqIe2BQAY?nStNse3_C%S!cKzJ_KRUB|BN<$d^%+~2K_l1s=7h$O!ZB-`@qT5dSDxK
zzCYb6NM*a~`uynIA?+vwU<&k)#rE?sW&B7FChCI>I(TyjaM{to#~}f@GBbBd2E%i|
zX_{AhXf+wm9`Yea6bpccG$QYZo!Evc^P9AY4zZ(ji9_d)`(~@G^qo`?AB7v8J0jS?Ju2?d{TcSRU&V
z^i(|j-P7I*)GB@JuDxwHwoCKqdC!Bq=z`NVN*ED&BKoZiA}w&Bf3cAgq-9@5I^>9A
zl`LrAX_2>D%asnAOEM~8iB}n9%%2Oom4PdXMB~F1oDv3gl_BkSKm6(i=*u13MSb_V
z>oslK8D%CvN&7OrFy^5yNsQ1~o(}KnMWd6vqk->A$#rxVe6
zCrpR&ez(JgGMLybG7xh5wf$0oQSkbtGHuwm?lwiT!}###N-d-r&SNN&xu)xKlkX%i
zwtK^Q{>lyAj(@|@W(tKal7T~!t_;KQl@I9OjuT5|xQ>5gxmA?`=x|}kgHsL)qe1*l
z7|&7}uH)Z0v{jYCTx0;5wky?i!D}8A-f^D4azi)c-{>=|Cc|nvP@DdM^Zb=sNPj_w
vjaW}`-LkYc7(l04Zd_U$IU6>YB7yxMAw|=*FnI8*00000NkvXXu0mjfXP)S#

literal 3581
zcmVBjLjb~?PO-)TFCno>^01XWdw6wISsHmEnnvjr?goK2EfPi>-cyx4hT3T9GR#rej
zKr}Qo8X6iVV}6bR0004WQchCMcK{{L@1
z7Mfd{RFr17p1tQHyq3heF@$*HBau`jOjT97>S9RSS6EpJdQ+0d=H}^pN)i$cKei$n
z_>sheAN}_hsJVZdO~%ZmRQvW_>xu>{3|DY6`Ib~9)B$8128$i={+(+bx)iD)_230f
z2Bp)~m5sQJ9RZ1Zhk~xs)D%U{hBD^f^~oDzyPLUrm`$&Iv_P|$D-EGCRNFjGKH`B-
zj$llv6G1@|PI7fe)yR%eMHuhv&l@^Rny5_8c@Pg!ZcIzsjZxqLAJPUlje7p!9T~sW
zZx`ra3CzWF1(Bz9{yV~b}SCcQ-mZOJ8^`K
z#79J!`!3&7=L>L~KU9+^-I_s!Jkhr@_7Z;`V#_$;7SEUYGFr-!Ewj>hHaQ5+DuGLb
z8QJFk2xdm#LYXZ%?hTB{3;HuPAx`A%uzvaZ$28`-^Tm!{hwwEthOVpixmH{&Kqz>cOZyZIn4X3mh
zC&HEvKdMabni5t1D`f(Cv-I_=3kxD8`c4pND_qI}4aTi?j7$u`VNxvo`F!FD
zh>Y;J>8Zld(dbqsb7nlKrzjg?7=VGHsJo-st%0CJZmpO8JKdx1reoTBZ8}{cFES
zg(AX~z6@y^(Kn!f>=TnunKOzeDBQtdq|ajh$9=(n%qO#;9x%!hA`L
zB3r_%exSNn9T_ACr8Q3IKTaX1^P(#;ve3ape3JomRU7$B37jRmPPddARY<#pMoXfo
z#>l*`PXa@6xfjxWp+*(bF2UMMG&i4dBAJCTbD9%Hgvm3Qj01U_+W4fzJL%6yY!1dt
zJQReR5mYlN^#NmqGVzqg;C=3R6!_9M>bP2fAp@gNY3$=+-aiCJlC6<3M``TeIv31x
zfo(8_D<Cy8$&&Z5G=aj2@~e
zr5y;WhGZy4#Y4}%S%@|2ps1DFRFmRu&6dowPkRC0tP>!-999MAR_;&20zy{F4wY
zk)S1SWN(Sr^wYVqrYJd_b0HMdYn}VdC<@a1BRD2z{45^8U!E;*l+Q{J5MlzQXDTe+
z60@#-Te-PWZWIC_G3pN;&n|8SO))SDTG@%Bt(T&6>lG&8>M<2k_M*_ih8CiC8&MR>
zThoPVH!toBIt&m6D8>-T&r=C^q70^Y8Vcw_rwz1J5@51U%}bWtH_DB2AeH8qD!jX9
z=)$t)-$Ka}(jGveYCsQ3XK1fA;R^~{MJTY?Jy8pnJP)W+W%x%{D>Niq={%(RN(OUiGc{w0k$>
zRi2j{CAQ!igAQL+=+UN?jpHi|t_MpscafRe`h#2okr<_E
zmZ(?xBrx+czth|Fu@T5xBIkq|@o9;eBz!?p!mW`N2D6xDbCu^!1&^Ez%9a+zoq2(@
ze`{F)MWD}85ag)AqcfM?Vz?LfVFe5AgY)dIjG>W7A@37fNP29VKA{
z=Br8>6m@!!-6%K8B~fDM@_i^r6v^9jC)}4NB&+I|ZBSd|m7XZn{>DMq;SM+qzQ=uV
zsI#F*SW%lwG0qRux1$ga)F^OJF{7=a3MaJH*>JZN)jkz%XJWm%>;Dy3lT0`y$g({_YWJ>M{#XYGxQS1{+
zd|*aC!Y33V?t`CBrsC#+T@5#qcsc
znvOD~&h%3^Ng(MtzgxY7yIjHn2o;uC`J*yQ2eP40h|dA
ziV4(b%$pnl|NqggQIi$#p;Z`tj>*9APyov7O7~*E-UDda41bKvDFyxfoLq3dXJFpE
zl!N{e(=VN4{!_f1-GGGjcX*LtX{i!fgN>N10nYrf?uGke
z&og`VXoj?CWEOX)_A2%H^Xq7d7Y#5xb!J)FUnw>3|9YJowdigTMA?Ycny+`UrlXkq
zLLNFZdHjz$^{7P;j)}Zp#0C1!3mpb)U~)RM;+@^YjqgsU_FA-LXfvqWt~>R&?f=d^
zb}d@q1)kH^`w>hXWc-nijkLrI{^CKS*ib1>1?g~ygzj1?8}zU%^FmaO4?JEurp5CV
z!Hb`)Oisqk!dclO?jTKb*{zQ5O76xk&?;W)Mi5CyUd%P6NsWt3<*ppi-f#4Wp8ZSF
z%}bed^Kv*v#jvd4<+PZXAF{*dgFKv>oPb9&bMtb3-ACiyyp)M|E-yycs2Z?G$jR2}
zB+Tf(`mw=6v`+Q#8P?RDpC-K6D451I8F^8y@U}0TQgN#j`V4F8&QBk_FzVZ=+Q#ef
zTs?W|DFwez+h$l(cYd1Q7ef>cCm5lmaa4h~6$8Nl8GGNx3~TDnPhmVk=y&7wVuty;
z^U?3lW7nzsXuO-3GVyL+iUd3*@G1xBnUM|A=U(JH8{~a?=q7-63W>ii>B;M0W=KN~OG7)vi)?Dz
z19pDfch(Lf2l%huAB5*^yyS2vbl9y!|HFKgQK)RO^}M*y22ROK%!xZ}rs7s_fu*4x
z9AnY6Txtz312DU#?ZJybY=%9QXFs$Tu(Hj`@vb7Pi{a0*J@;w6kbx1|VPKW>r8&16zIZQOYyRZZ&!!oz2kEXo^IHFwi)(HPZv*woXEozToZ~m;g$}h4Kq|(~yY;16
zx0-z!Prh%oRu4a$Kh)2k;P=RjzB+%N-_USl*5pN4w8w
zZ@t;*kIZ95)_Vr#Db|iF>&R2sy#CR{DWOT}DdPPf`r3=)GNn?700000NkvXXu0mjf
DSUKx5

diff --git a/docs/html/img30.png b/docs/html/img30.png
index aa48fceccb3ff00fee354ec871a7f73ea2af0aad..9c151e35ad3552b942f918cf1843b07ca406cb37 100644
GIT binary patch
literal 468
zcmV;_0W1EAP)RHR400001
zbW%=J06^y0W&i*IQb|NXR5*=eV1R=KAVL7bW@JDCtPBhRU`7H1c5q986~a)!p@0D)
z&B0&*VtxkVilYyJWGe&z2L=X7kUbmVE&u`+{AS?>91IR1il2dj2QFsC4Knxwg9--+
z1HcOrZw(0W
zPZED3Kv-Ec14jdl&2ko}vg0oP2+lSz*@3BwAt?c
z>gwvtmoMM4Wy`Etvl<#2N=iziqM{re98641q@<*>5AHPs>S8Pj@(X5gcy=QV$Vu^Z
zaSY*@nVgXDAgQ5|LBO!LaUvrphrx!pgoGUj8aOQ)iv;c(izQ5KW8Ri0aF9vm$eD&C
zEOHZ8$~Y_%T+u5y-%lq^v_VsiO>V+n9$^VD1---w&ZTP|x3Do!W{j96_$r`?fnnt{
WF30UoQ)_|tF?hQAxvXzGiSnt
z2`w!x6%`dZIXMXl2_YdN9v&VxHZ}$Z1}Z8l5)u+TJUl>6uOd&+15%77L4Lsu4$p3+
z0XdUAT^vI=W+nr*JxE|^Z01YoYFxTr?oh&v17{B$*wfgk*f^1qkwsD>qA}!fJO3VG
zi46^GY;4Q|e;XSgGEC6Qun_pr(AYS=@#I2AjiaZJY8W(%&bFJ+eZuA)i@?c?3`(j&
zSrQW7wr74>J2;6;Of!0ulJGNtchV#NgqsUKH8yU4$YDI;_#L5ZdI=B14j7m=GBU_>
W$ZitoJ^K*oItEWyKbLh*2~7aWBw<7V

literal 467
zcmV;^0WAKBP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*IQAtEWR5*=eV1NN06bb>jftZtlVFH*VfG!IKlO}M3X}$wE6u_VBrtF?
za=>&jG=K<>1~ToX0C4bPgg65OKb+!+i*ds#goZOjxgoE!`c8-Pq^o(~KROb-q)
zBwR?~KES}Eq@)D(n?M7@gWn$>BtX>hIvfD10~&+~0R~18i*Y)pYj_MO@E_g4ZtYFG
z2`b`hU>D$maTu@RO3n->7;IH6stVz(IlBrOWHuYD`FjG$VTOrvSl?U+v4VRK!yE?w
z4a^RF8yMa&1%MP?QUU=5P@)Zjs#iF}@QOj7fn8FcfvJLT0Vv^WA)Nkz5yIg705pJQ
z)z(!!MyD9~lpBy;WV`y31=Q|G`xoHy9Ri3=I73(w1BV6!0{}TgK?MiO5HkP(002ov
JPDHLkV1mNer^EmN

diff --git a/docs/html/img32.png b/docs/html/img32.png
index aa4a804d31eb48b9f2a1fee76605997593d383cf..2d457aaccf3e8376108933cb23726e0507008593 100644
GIT binary patch
literal 780
zcmV+n1M~ceP)RHR400001
zbW%=J06^y0W&i*Jib+I4R7i>KRnKeGKotIx&F050O(O^jg2W#e^5&Y{5Uk_a>9{xGcPYh=KVkD>40i0dL1C-_-ZI&hi9J|C0KM
zU_JqE0XKl-y9C`8LQ1(lG*p1O51zqWy^ol*P|DtZxOK8+Sgr7|c14a)q;z=l8O!+F
zo$LS&2uel9HS)+NbF1)BA?$KkEM<653^?kT3hMp7?oYz%cDuYxpB$6Yo%RNt;j2)E
zBJz+`wUy3ZB=+wjIyPpqU<@nZ^N}AT=L#{JopKnTn5*S|&sJA218_kKUDxqqmW(r}}
z@Es{_%0&>`_`zHvE&96HcHVzAvU0Az^6VQ>x|ZzX_Ol}zOldk}2lyYq2fN*Fi#=K^
ztZZnzt);yN7VvaCPtgw5!1k#TLZwzBMJ&%5eZo&k=>!7Z<6?+;t+C3U&#V}ifXm8$5i9rzyQdVgA9+D{!=Luu_vh&*7!D=F
zPu=4(T;RmHi6Pd?S5SP_H@Dh1fqBxdlFWcLo&OPN1A|0Q)1}B1cM?Cp`?LX3i_5i~
zBp|y*QO##9v>G?@2zVR9EYo9D*YCAFJm(x=3OE;lyDG=quh>pGexhP50LvpMYzvl$
zFb>CudQG6I%f3j5g_>8|^<;F)fzj-SFkP~l5&Kff9&R`7kMRpj;CQz?LiFGO0000<
KMNUMnLSTZB9%KLj

literal 477
zcmV<30V4j1P)000{V0{{R4vFTs90000mP)t-sz`($#
zr>BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*ITS-JgR5*=eV1R=S3^)NN1A_vXaR7&cNfWriG!rfbP;dZZ7zmsN
z;`px#K=LI6A5fgTfq{VwMLRQovv318Z7{{lz`z3+J2MSL&fuQG4is}zQc_@G0|_v4
zFmQq}R8<3rkSrkAVhR8cFQyomKA7SMBPcik321I4zcD790Z}s+%;4mJL?biL2Vh)G
zIKYr_A%Xh<1CNrD64Y-W5*Qx*{_r3HqK?<$0FZoefB_K#42)nFM+1gyIAkdDApHR6
z*#j!xM5uekz%Bq|GhP$Gp^7O;$pyhP0h6kj%J>#A6vEhZb`>(nY&KZ)_XGn{D(0}h
zxejW{?gN|$82C3ZJMe8_c*7I`QgulQ1QbBoBM4?Q&jFyR`V8!n`V34Jdl4XT(G>6}~>qcVnm2I-@-HTRSH*zlq6bW4kBj&erxO
nJmKY19-bIR9><$Jvw&{dVI?SA^CpfR=l}*!S3j3^P6

literal 275
zcmeAS@N?(olHy`uVBq!ia0vp^l0eMQ!py+HIK|)70mv~3@Ck7}aNxl5<;#0}d(+d?
zeSLk^)zyJAyu7?ywrrU-YgR);LrFjBs}0}5aRjB$-^V;z|$tnqmgilB~RrZD_a{g56>K4YiX_qlfx{H
zY%BCcJ}~x3m^FwLmlc}%WF#a!PEEdX_`reV`{(!bYP5z*Gc!LnWlUMeIU|I1a&eic
z(TNu4^P)RHR400001
zbW%=J06^y0W&i*Ixk*GpR7irVH-%`D2M82pz+e&9#1LBM
z3XIG`I@lM$
z?fC#KyFjHE5XU5f?KR+RU|`S!>ix>#!_4p)m=2K<9VQa}~>6@T?1E`mE
zOIC;g>qGLxiX)78y=(=jdKrk1BgRT%Ex`gJDA3#DK!Ii|0{|q{UGnvn4k!Qs002ov
JPDHLkV1j0q>`4Fs

literal 710
zcmV;%0y+JOP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*JL`g(JR7i>KRZVLXK^T5^($JmVNwWtL4?uE>
zhu|+z@CPh-5{eAHC=z5*ED9o_y$Ee_TtTpevPaR&)}yE3FYuk&&m@b2)r*bFcaTM4K
zZ2Ikif+rw)y&mP##J)@+(xhRfZE*U~aORYw4@gcPXeg}oKMXZqFgf*1=ZWSuox?-q
zS8nLr7FpltI>!_XDfHH4&C8kK5t2lmrxr82Al=k&&L!=KrE#Gx+`?9=;3}Q~y9&Y_KPcwh+kbq-Q@Dva#~yHyA88MxIlKP_=#EFS8=u02x?O?kAaC>x
zNXfPjQN-;}fQzO4HfQJb-kzmjZ|v{-;(5-|(i2!z9{x2vr&!|*BwZo~e98uM_6`--
zz5EREYJ@iMKETS%{n7fozZzlyaT^~b#1-Hu&(GJlQIkD~)z=&^WF9zSl47LrGt)^q
sX|xv*-s}xi;a#bUqS)t}?SBS800NkmDs^Rx{{R3007*qoM6N<$f^|(rdjJ3c

diff --git a/docs/html/img35.png b/docs/html/img35.png
index a758b5013a71f66f2be374de26dc2f685f054369..0d34de725feb5d87e99591866410b9015426bc3d 100644
GIT binary patch
literal 1078
zcmV-61j+k}P)!j1?;dA5lo&~C9E9o!An5hGgZSwg-;_3&*r=Fm2m4At<&H-bek~F3qZ5t
zd%{QS8EHMfUNw2k(GaSBgXmG1C~~TlL0Ox|_E{k0yq=XDr*EO?jQm9u)J|onbFcs!
zh(JgH#4uo{Vop-;+W>1brsbb-@%quy=1)7Ry|VlVqCf1HH*VZ`4RPIp-TRuuN!EDJ
z$G0gRm&DT@2%zSufRzR+~#X;*1nNBU22E
z1mWv6i8h8k(3w~a)f(EGvATE^p+&{2qOu!^k2HrT-DGB06cc<|yO29BOp2{*9w0#@
zNi1ZFXKs8d6s>n8hJh<)3}dKdo7JM5Q{gSkH5ojwwcK<@7$BWgYA$dHlPR9bdV`>A
zEt~wVux?h&v`YnhwO>sfvS)xud|F8!u{r7BN$Y|m8Lbw6GUD)@=JWAKj*mBP+_-V$
zuYr|H@U&9E<1snvp8Tk;sN?=v0oao})?^z?{Fb{x=$gDe@T|JgE4W9uC662c$AX*D
zL1U3gEd?LBSc=JcPaZL-ct;q;OTiQJ@T|sBL;<7>h{WNsk>>zI{Rn30r#reiMv+D7
zRiFzfQOO#aodlPk7>d}*BRg(@$4Ijb7kmhQu^H#7cv6z8ht+aQECsTYN?mSoVl89S
zY@AJJ6HwrVlJm?tAo?MZy%8a&0J@l;q$bdUtVBS7!oiVA3JE
z-Bd*iZ?VW#^GCVj3C3ZuV!n_I?|l9XCw1A{&=mB|hJ?O-f8(q!)_Y!Ddt{Li{d^3$
zj40a)s->yM23Y=&LR`j22%i?w%}_@iZdo|8j&#*_$e|697Y3rw7&?y^WhYP}2!#S_
zgAiR$zeZMO7^>nFnu^_&6PU_NQ^YP3{HS8o+)G0xg*ow=y0zoOQI(Nnh=dXxsw*$V
z#_qr6ZZ6F^VUNuqdt6=*Q`gmam9g}^bRo?wr@87wNM~n1M~_tW`%4k1N$Jgos*Ek7
wYb@~Tmznd&@y~;P_QCq|kPd6{#*MGRZ)YwTblC%-VgLXD07*qoM6N<$f}5ZG@&Et;

literal 257
zcmeAS@N?(olHy`uVBq!ia0vp^Qb5ed!py+HxJ5w@bYfivSrq+Sq%*hB_$kl684vVdvc
zRi1XsFh)t~AC*5$B_u2)Z%A0ol8~s7+%a_~Pr>WMOk(qr>kddBENIxCsNWHN;(&p#
zXJezb4%3OmvV??;HEb-Dq;bo}oxsbp3)u7C@IUFnGH9xvX@*cccXsHmt&NJ#MT@BlTviab3JNHLZK`2{mLJiCzw
zbSo^X{7)F

literal 613
zcmV-r0-F7aP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMh|J~T8m8X6kuD9E+|
z0004WQchCzd*q3{3;HB!q?cf7%TfX~*i=>8kr3h)Tbt`S23elvg%O>e?uZe#+;=Uf~Il_cp(SQEG6ZktT6&FBbRmYQRtmV3^k
z^QJ!|b==OGkfm#pambFGvL(+jIqlb}QUg+3cerREsgl*vMRlmzsw$Mq
zn6)wK(=9quX{!YpWrXFc%B3N@9(V3>6XamPdmt(_+LqKBx7p6Hp!o7o3l|MP)oZUW
z>hyXa=on(DsaZZgS8G}S%RK)Wd}r%AX8g1?KKS5QVqfF$sQNo$NdjA?76VHl!x2`g
zHz5+Iam?85Aea-gh!31fA4G#TK(GnHMj1h_+^8gL3pQ4pZw$R3Wg61bQr-G`U?OgC
ziK`cl0+N()H=u<#-FV}snn|--COwc9;oj=A0}y6VCVsfipSns3h07#9IqB8H?Vd7lg#iGOn0?-rSQ*wqcik;tpD
z4WhU6im-U&J@NGgWaPiR$F-$X30000mP)t-sv$M0P
zsHmKroRE-^goK26czA4VY+ztuR8&+*NJu<9JTNdYBqSsl7#Iu;3;+NC>RHR400001
zbW%=J06^y0W&i*Jmq|oHR7i>KRXvCkK@|S7*}r7H-3Wq(2qOeRwAez9vysKSlM@6N
zE`m0)!f7F*Tj&W^O9+Bkn8UlmE`^Al3u=`nl_-cDVqu{W4=wCgu(0&a>`#)*nrv}}
zieK2-$$Q`XX6DVjSs)iRv+wI$(9MC#$!87+*}(A+5HW3G(Wk}$TZ3+Z&s^qR$lwE(
zwV(c}9X2vX0mVXa2Hj9Rr=Qg1WVsA4z+^K-Zx2jEm~<$?v7TvgZn8Kvl?ew@Gn+d#
zzk(unimlHqPx^@p2xs|fi_|!4vp~y8eoW@D;3bFpahl)8GkgV{w}T3NtzV4(w9=m!Z&dRo6%U-C*f
z&oTWi`{BfUou3pW9H)%bgRo1Dkpxq-_8cKcr9^L1m$Io
z&#H{~qQG`FBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMh|J~T8m8X6kuD9E+|
z0004WQchCnsZ<{wW-qR(9
zn*~G&Ex^Y>G!?-Hc>@H!FaWHt4OqWTWq&a2+wiz<5l!Hv38WnP5c}&>c>!gp%uY9L
z4Vrt%pW$FvhSkE&C*scDTQA%NC_9M5kY=d;Pkk
z*1MSM_sJycNd|(KwPKcO6^aNqZE&biV#i%=H*pZSf^#o>;h9X*Ewo>OL
zscv$OqXu5}yP#r6?2({s7UCVSlB8hGMNruiRP@!R?KGHQVv8iz}(#ds;|0n2|kc&f4`HjKyO%(DP0_3~wZ1-Czx3
zp(VFBmBeb?wjmXdHGIXUcFnJce&h0R2pSrv+XD+J!HekjLF{J9efl3xal5&OJJQcS
zPS8u0_NPbv6G1OrxNzaZUxru;n3IM*%wu8KL-jN$G#*`bp3IrMPX>n;aoBKxPX{)h
zRwQq@>O2)OaHL#qIgG?HSXw%*w{Z!Swz}rwOn_@5V)l_z4u%$8gy<52TS{6XwH(=z
zxGTHpzV1HT|Fb-h2mXwAD8C>Pzk=-YGwjzyOb)NVgr~fyA
zLzjH^#{oYKbzSnF?lR++qpQx-7yRF5A5;HF(Vn$`AN5(gaN#@f8>HqOa~BI6SO5S3
M07*qoM6N<$f|ZxRHR400001
zbW%=J06^y0W&i*II!Q!9R5*=eU_b>48yJ|mAxv&GDF%)Y4E*R~7+?c~3In486Nq^L
z$RP*Z+vm%`zzJlqgLs`R+Zb7aw5kGGh7kg|oCx#>8|zDME*1ud1q|N1cW(v>HsDgv
z6F{C<=?OM~orn>u1jP*l7!BlDsyPH07!)AlE;1nT4-2?IG!*dg0AuO)?%f-J;+$ah
zAD&%M`0$mLn?Hbo38KE9sTPO%j3l^c6kq^uq+r@WIKr0geXd2S5oQ0c7O{Y{1ClGyp007vNK7
z4Pg1e>%d*0(7_1-ulF03wL0&J-n=?oVc+8MZ9G2Fg2
mt;7H*Ly}jgDv%R0Bmn@M#!A)|c|)%N0000BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*Hz)3_wR2Y?GU;qMU1_=1T00%6w3S6rU7|;NB{AX4M2CfB6uC{10
zJPQu3wq-cQV7m}#OyvYFp84z(_|UcE0J9yuPcGox!m;xK1H%TV3kx{8SvZ*(7?>CY
zJ_H<4U}RVzz`(G2!G?gxT)TKTH4teiK`^ypJ(o-b(=UccASN&j-tbRgVBpMPxXr*W
zz;l4}1DMIckpNQ6`GD!e1`~$12L72dLCm!*2YA5Z4U7x|3>*v$6TnQy22KVB02lHz
US#6=V)c^nh07*qoM6N<$f^9u@N&o-=

diff --git a/docs/html/img39.png b/docs/html/img39.png
index c00b10d4e9d950bf8f4d533aefd8b622cfc2fd40..8ac8e75b82b3596e13466f86bea53ec12a55f86a 100644
GIT binary patch
literal 863
zcmV-l1EBngP)RHR400001
zbW%=J06^y0W&i*J-AP12R7i>KR!wNsKotIxY?9qg-2_pJw^2|$=GcR1O561pjBU|k
zdkEFFr57uDP*519N-x49f{F)2sd^0*>0v?kAb9Yycn~kbq9AxO2ZeeNoS9_PGsSF0cRAX8}
zJb#!}xiSp;@kQWpQ($BCm0@%<-`~TH$MWl+1PZ(HMKlaKlS1b=%=)FNw+JS`Og@1O
zgz1UA)cx%Li?UHTRaW3YqsL>FpwC+=QFVS4(ecX_ozHo#*r;SV_Gg`?ljxL4I4c{t
zp(-8n;bD?YKC;NEJ;&iYTejA0&&zeUMQ&jWn}m_-u(VY#Wp2#H
z@%43b$1u1wxG;JZh6AN?;VhIO(YcEf!H;3N*Uwk?%%I2B>P-AWIv>UGfVavmc4jGf
z2!1eeoqdgrj`Iiu4Lrv|esb-W`5!fb&D0000mP)t-sz`($#
zr>BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*Jp-DtRR7i>KRzHZ-U=;r)ZM~%VuFWDi91>d*1UZ9~SPz1u|0pgl
z4u^}lIk+e{WD>+Bh=W6sfGBt;N6|$Q@6j65tn~3xXKWVt>DvsE!hDK{3y61mjIE
zXaDi{;t}uwGh;}Ua>YU-Q8t79CjxmlqCBpcYs_!T*hWAcZ*>V&}$kfcoCHb=o<_YBCxd%QkZbEp;U&wh?eX@G@w(g6hgHbf60sA7J%dO@T)T
zQE^1XNt}UsRfbI_51ET=Pve)xHoPbB{;`h*PmFJP2;Ad!cU0=bH1=8L%D940zVV7w
zg5^k)+>Yp~io`bj@#N2;b?7cu>LGaNc*%)<%vMH!Pp{XX|1dt+-!{JE>|=
zu_VYZn8D%MjWi&~$}f+F)%ZCXb4Z4d4hqRFCmmwfj5VT
zCxo1UJouCC6&z`)DPyJgFkS+iy}G&Gcylte{E
zIXF0&n3%*QGqM7u8B2ovf*Bm1-ADs++&x_!LpWw8ConVxDBL?Bz>s8Q+|bD6GKJYg
zmm!It&0+?F(hjo*lL8}y0_ldY?T3~|svVf=wKqXa&_&^c4tuwGgJ^pj8v_HEHrGaB
TRkQOzGZ{Qx{an^LB{Ts5%91uz

diff --git a/docs/html/img40.png b/docs/html/img40.png
index fc90801217f55222fc19f6d75b0b8dfc3df08658..0b9bf85cc3b53af244ad9216cc5e1dcaf46571e9 100644
GIT binary patch
literal 307
zcmeAS@N?(olHy`uVBq!ia0vp^+8{OyGXn$T*2Z0aK#oCxPl)U0&6`)OSTSeLoCy;q
zw6wHTR8-{T@*cccXsHmt&NJ#MT@BlTviab3JNHLZK`2{mLJiCzw
zQUjDp})y4;X!J|oEOInT0@f=Pph`^DP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*IW=TXrR5*?8ld(&~KorKmBu$e`u4z`mA*MJ9>L>*vIEq95105ax
z6QWLnU~no@FyK~-1jIqH5XG@Wz)cZOadYV^I(SJVwkd6`lY<}J4L%7jef2^C(c~bUxsJ$$aWV7b}>aY=tlHd&S
z8EU$=sT5&G9o*Qq#eFsPi68*U^1pb~*SP=J<)o1g_-u?{3)FC)Hg^K6dt(NJh}_?Z
zWmgasN`RGQJ`BZ_XYX5%6%~r*Y(7k**yg?p0-{3wKHtOY1pWMLKt|6`WaB56$Lp64
z_D=%+3e&iqYhG02q_WtH@3xMfGQ1p04nAf)tBqH&6lyNscwyO2mEpc@0d|TnK$+6L
z1B-M-*F1(C(1G3aaN6sB~Y;)TX}gW6T7&u4eu17=}V^1Vy3ss`GGB_(FMk~X0000RHR400001
zbW%=J06^y0W&i*Ic}YY;R5*?8R6S3_Fc5ud+N5b{n*oW1!E~dO2UK;81RXk2iO&%v
zHU?UW0k#aN6GIp(#MT9=qX&eLvhY&^BU1-{0JfW^acd9=iHR5IV*5ScozF=C1)WMv
z5krq|@(i`?YufYPm@mZ64E*
ziho-6MRcLhKLgu*x@V5X|K^T=l>7n9Q}Q_lu@9xb#8+BZyVyGL&BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*J;7LS5R7i>KR=;Z$K^T3zNzCou+};*i2o{?SX-v=qn-~oo*IIa3
z+IU!{Gk-!zr69U!6Cs#`XcJF4{81Pqj4@42&>%Jvgwa%r#kG?_c2QwwjEtef#YrODAd~3E3h@5~eWhWYa2}+ebIJ
zRpxYoekY&Ot|FH
zvRd)&P-(U>YsyVh?OMa|b&cK9(Im&Gs+s4JtW8#f*bB;)s=SE8C#sNcQe&$Vd3wm0
z+0;RY%x3-cd=a;2t8b(wu{2nFJ+j7Z!PHrr
zeG6yhyrYo0@b#IG51nnzX)oJH@+?8Mz*1_Ksm&{GwXcG<3)
z>zN^g)&82gl=%|CxB-F2B=5Kh-hN%H;Z&Tl@bk
s@~07*qoM6N<$g2AJl;{X5v

diff --git a/docs/html/img42.png b/docs/html/img42.png
index 92e6525b83b403a9ee1e4495c718fdbb88b2f341..68e3d16d5cdcaacbf7cf218a0938a9fc81287d78 100644
GIT binary patch
literal 905
zcmV;419tq0P)RHR400001
zbW%=J06^y0W&i*K2T4RhR7i>KR!?gaQ4s&_X0yBLrn`#=MZ820Rq(PPD4txUmRd!E
zv{vcCMXOa1Trr0pLrEnUA!0>52vPb079?JB38rRVjMv
zz`j58X685ZX5M=X>_U${_GYQ`gJ)SCuQfEJ_Q|}>8H<*gYnSug9SCI^`o#*QVqypIP4V3n2FJ$x&rQF^U
zrD2f!gtsP>Q_8hz$&)RatSu=@?2Pbp+f}=b^NX%>`s;t|oc4FLuyh|M1
zC?29pw7agNboD^cOjF~0M;HxJ!y{3lC)@20yv{a#78F06sMl+xbZkuXqm*4sjzBJ7
z*AZx>tqUX@iJo&Cv7;b;cMGncSZPVw9cH4V#>9a2;g|v@s3-;EO6w~b*>$00Ww&&n
z_Gzz_i=o9@Bg=GTy)iN(-WB`|S5QK=m=AihGoo9;2uYmfZLzc?&a~{`Ww=QnXW+4P
zwh;6rC)VzlwO3Qf)o$ZG^cixR@%2c>S-!h~!$v}M%U5nA^u
z0nBPfQqq{OCR@Q7j5+BI&Yj*06}e0u;H~J62>tq2*5)F8wx8u?>hcBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*H$4Nv%R2Y?GU;qMU0ZtIb@PUZ|23TTN7%&(xpaCA9y$cu^xE3*4
z$DzwC;4#?4!?I@<$e79vA0{a9v+|&8#{p(LbS>B*aA>tHkiEg-Q`3P5+^qZz3``6H
z9SR=;CvfphU|?9iK$+q7jSC7)1Wh9rOl?@tz}v8wN%H~EfrUpK^cV0c07W@77;ZCg
zg+(y13$O_=6f&G)m=99S`GD!e&PoOk20ex&+{_Lf84N#Xg2fvc85n`iW0=4QWHB@_
b00R;L`eQL3(=o5E00000NkvXXu0mjfw#IV(

diff --git a/docs/html/img43.png b/docs/html/img43.png
index 83b6d032ead04481bd5899b52c3e07f1b2977484..00dbf7e6bd0c6774f01e93ba39871fa0863ac1fe 100644
GIT binary patch
literal 557
zcmV+|0@D47P)RHR400001
zbW%=J06^y0W&i*It4TybR5*>*Qaek-P!#@}q>m(!2LC`alsZ^2gPTw)*rJmGD-=2y
z2NA^~qhl;B)Shn!vt*RAbkeM#D*tllgLe}O`BBSkCPZg%++V;cN8roAVg%HDm-*L7MP{MbLA-)
zlZ3=ea$ASLWi~X6u9x_CNB-Zq{7sM`yUaBj4Kv&!ad`Dnx$kirEok9UPe>U71(o4t
zUu1{-9jll2P-rh}Yt_;TiNJau?lKI(9Ra80RxZ>b=%m=Jl{MsB$YHJrCey?{c7eFN
zJ6ZL;Ws6q;l^;yR;>@qwQbcN3Qls5?H_w`IGmdn5UUhla+fo8!)2a#@u9bQE+J>m|
vMLar=5}Z_|y3zJd$sev#yjci;kuUKEDdb>8zGsad00000NkvXXu0mjfFbDFK

literal 527
zcmV+q0`UEbP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*IjY&j7R5*?8RLe@kKomWBlqP1HX6Z^o3WB@f(g$?y$`9zG_zix*
zfGal=T!|DJ5Cuh~=thvjSaBmFS?ebLLGcTm8RIl*qe2(1JYj}=?>Td4?wuq+3Czs;
z7@-<{F{l{4lI>`VZYNZV?T2p?RYGMYK!)cIHHmcAgwrNyc+yE(CKa)k&5S@>au?VI
z$|w>(P{)2)+vErcNEAhqpo#z-xZ+U_Q7a4=%%A;Ge}Oqzxs}(^5=9a@@BOGJ8>=aL*NOAEf+OITgD^?OMg7j;@GaMe
zuRyckOPa%ZJi#O!rp&hu4^P)RHR400001
zbW%=J06^y0W&i*Ixk*GpR5*>*R6R?>P!v7QN0YQQ4Q`@f1SxLj7f8e^4uS<+aWhVS
zLkAHjiQ-2^6cs03DvEQ24nmhK&N_&*gFhfTxYqlUpslt_1qTnjcW%zRH}~F`OMp+%
zCICf=)MzrTcF%$JWPWyM*sij3*ytwWF%7An?+@_v+SsMt%v&1EtVNw3!No0%Xqwfc
z0!h8u_l{Nq)H&j5CB?50<%uMGTY`(ccSnvLka36-dZvlC|258j6&2Hb5?;Gj`|EqiJLg};wSYtig$6Hv
zKxe*2phQZL42h+5`0WwhO0OVwJd??-XAiS0q)eI!CMhUv4>%&XiNQ^bK(gtVusrCX
ztAIWjFW^!|++YEa*bKFOWRx962MomypLxtP@^Hz?q^XAJO0LPBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*K8A(JzR7i>KR=;Z$K@|RW_b#_TCU*;_un^hosYR5q#72_{ho#kF
zEfP}s2lxjpS_u+XE0tgl0)lvikXR@rFgemB202ni(`-tuj&!1hZ)SG)c9R$_qD}mg
zo16LOeecbic{3bv3|=$&WkbJPOF8X0L5d}yDm(im1~{P0A^V-sZ5PLOD!O++Zb>E-
zO)RF&=Ovzm`75BfE<8>d$8tdbAH&dM7In|u;a>tyRQv>(WHi+P97m`E_LXxvwH!uW
zN2Tl`O+;*laA^F&Zk#;qepf|r0YSEqQu6Kg=LLHGQvG*O8X$?3cOE>yM3vN3Wbcv)3+divtnc{M+sIP!}3GtP@-bk+5;NIhXC$@4*z
zcegQ0_30>4yZQ{C!Fntw8f`yl(H)JWK$4o}*#76W8J47XsN|*|x!3KBayo$6_8mL8ai;F~ckzGiisE`wtu&B+P2vo#q
zm@+3lO*+V~lS;%muzRxA#nJr5*X=(}CmauUr12tI1lF!N=Hkw6}}Ez
z0vocO`E?*=05i_BI?n=SU`fQ8zMkEh=vp7H!`vLVVmK?rw1Dg>Q-VmuN*rxxg)GI(Z5i^cLtfKI)ICfHT->>fHJ%Gw#52N~RW
zvwaQNJ30`lcX1KbI?6CUuhv81D`%NuNVc6KnJBd6;z_z4kr&7JoPNxc97002ovPDHLkV1jz$r8)or

diff --git a/docs/html/img45.png b/docs/html/img45.png
index 74259acf5eddbd9d5ff8254a60615b5779b7ae92..d91d32f13c2ed0999b8e3ec8c4b2a14660ee1152 100644
GIT binary patch
literal 319
zcmV-F0l@x=P)RHR400001
zbW%=J06^y0W&i*Hy-7qtR2Y?GU_b^25Q^;q1MdU|2LA;NsDR}NcQZGT&Svi7M-t8k
z;v^4NPtFK828Im`3BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*Iv`IukR5*>*Q@=~YKotJcRNFL{dW-v!;-CfT;7}An1Q$^d{{ZP!
za1mXcML`f8if%4u6f7mUX%RvZL=-H=MY~j7#Ko*`zDsINYP8@W_>p_>-p_mQ-391^
z^$Mh!7Sb8Cc9&e(ZmZi};xe!w!_FQt1#>7z`S!#VT%cxgfNI!K9S4{}UK6qm;}`k1
ziyjIQrX+m^3u+3&=c-3_k0uya!5x>RxM`Z?M0I)2ehLLB1yU%Qul_3(f9&sD&?uQ6
z(hS={DcBOUTswV=t_P@l`@sR_sk~_k*#4jrv|9Vi$lcNq7L=B#9qkai;a`sQ|fDvNbV;bVgY(u5@*kCZqarp4srE$>T;oaw5I)4s2jvmP1X2oB#j-07*qoM6N<$
Ef_Ve>g8%>k

diff --git a/docs/html/img46.png b/docs/html/img46.png
index daed562ba8a5f804397083964e8c152dd10fe58d..8d80e5be5f613726e0230c12e56da6a1f5dc8047 100644
GIT binary patch
literal 646
zcmV;10(t$3P)RHR400001
zbW%=J06^y0W&i*J1W80eR5*?8RKHIYK@|RGXV+VAmD|R`?o70wLK733C3pm-*$AkK
z1sj_yEIboJVz84ZW|I(F7Wg>3<}z+2KlXxH>P+
z6a+jX=8$vVlncyn)WMc0y)!Ej0XnzYbPNISdy!7fa!x67Aaxu%CCLsUPUCxez?HdQ
z6a_nM8*_*ObiZH95)-6~U_&eDc*y?q@VI0K{DIs(&=I+)p{~QVCp5ykV^6CJRXw1H
zY?u9Bexk5O1-)zS>h}yC1rggq=IG*+E%;JV9I)P=Ad07@Bs%@#K?!mWto}HNkTr28
zi3-d8bM8mAzsI+NY}zDh6Rx@Wn-c0e|DR~iRK)U7uSDNu`~1b6
zTzMN~6F5|OH}U<^oAx|v9m?N7C1M^yZo_^UcV+BOub-`JVwQD7dq2*{dhmKA^D(`s
gUUe^>-oG2*4~CX&Y^GFUng9R*07*qoM6N<$f}cz)P5=M^

literal 577
zcmV-H0>1r;P)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*Izez+vR5*>@RJ}{XKotL7V?WYfVixxhbx=V%IEW$?(M1%*KR}8@
zN3n}@Q4j=&;3$IGEj6o(5Q`w9U~%(fsJMuWT?Gf<$)-0$VxyZ7$BcXt6=
z;5-9*qIpiEu`%C(``WtN$Eg%CK|@&IB*8Epx%5}aVUM`#7=Q|tlw+>jn8dJZid-m}
za@!%-3K9{f6b-J0XY!_$iqBp~aFSyQhSwma!?G+|M41UgLWW>~9SXrz!KJqI{3{CI
z*Y_1f*|NR>eQsD=2y1FKFF(?BLgZHy-(8*Tp}gXla3T9dqrQEXS9k-A!$@*f7^;?K
zf(`m@^ZSxD6?7yz?Qu`~k-_mqMmY~giZ!QgNKH2N-{9;|UflG>_FZhkjb0JEFg{OK
zrO+J|qrFm(!8;BiBR4~@)sqYMA3rz;pBk;543zgrYIN&;HzjaMUjm1~>e1Fco{*%Y
z8@;X=FmF*26w}=FEM6#1R(M@m0%8|l&rm&f{C!7y`E!CBC>liALEPbGEhUdoneOcZ*)=-E6tA*ixBJM&;(HyCl`I-K*i~zWj_gF=S!lPgXhB
P00000NkvXXu0mjfmlOWs

diff --git a/docs/html/img47.png b/docs/html/img47.png
index 507614678dd02efd209ced9ccc386fef7a04d357..0913945f1c3b9cfdc35d7318e850e2ba7f6dfcb6 100644
GIT binary patch
literal 486
zcmV@P)RHR400001
zbW%=J06^y0W&i*IWJyFpR5*=eU_b*2JOb!KD1a-U5wAQHaDWH_2L`4OtRMyhgCa4y
zkiY>T-oU^OB>$^JL^gzhcuWo783I5&ZtiS^YKThe0B$&eP09r-#m>bbz|Nqspn-vB
z_wL;wsfZ5Tx_|@=R|5W!9c%zgI20gcK4A4LP>>BOqs$P&Q_ms5`hkH9Dx(0EX(-@l
z;N)XxXkgIZy?Yx-rsD!c=D{Zp1}0Aa009Ojh#n4x25ts{=`1+hCSZe0W)zSL7zx*Lq%#di?@lFs(S;I7f6sP0aZ^SzXP%!(*?{An7I=e
zSZo=%3YZ@-MT4{)Mzx27fv*8s503#?f`Jc^v5WzzD~Vw%sKjAM(ZdMTumQ}X14(R@2+n2!5^Fjg00;aSZ3=F6WaE1Yl716;svz5qj
cLuHWz0210qVzXbmNB{r;07*qoM6N<$f@Z$98~^|S

literal 340
zcmV-a0jvIrP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*H(n&-?R2Y?GU;qLx1_-#s00-O;cooUS=!OpaTv69WS;?u
z^DCJMre6$?fFi%a@`Vg%Km-H30M7x=4-5>u!J^C#OaTVW4h#$?3~dekGbc<@(g6uG
m0(}4?7z7wN7#Jo%YybeSCN7Nqoshl&0000RHR400001
zbW%=J06^y0W&i*J97#k$R5*?8Rn2SEKotKaW+zG4Y*HwA>0ywCdeZq18t}74Y>;B>
zLCHlFJ-7!2@iYgkv8B2o*o%i;Jb0@hvXaXl>uo&<9z5)y5bULRY2PH-Y`bi<9xMp{
zAn$A5d-LWcZvu>gFYGpCp9Sy=OE}JrAlg?l9u&G);RmFs!zi_uGK4T~M$)`q8Fd)A
z0OLxy3CyS(u1cJ=f_o(DyVxPtci9(!3iLVJD<>u
z@e2N9yrsyEa+eN_ZI1hc$vJ^pAIG+HMc8tGB_ZnmOkC>%KlHBJV-Q3WW>CmC5^q10
zFamXsiI~)-i@+K1VGf!c?=
zi{3B^yR{^Uya7&&r&Z0JJD{-#*GASuMOO9qRq=m@J;SMK>d_g%=l}o!07*qoM6N<$
Ef-?>?*Z=?k

literal 654
zcmV;90&)F`P)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*J3`s;mR5*?8RKbeWKoEWD%wV$VnaxcPA|VTcATsDpU6`|{!Lx@&
z!7uOw0(5m)<`Rzrd>M$tKxdFS>{a-;hlAt5?<4
z)ztxxpj58H_oI9d72vWgpiv43{R`EMo-q%0_*L991v!ofA88TK{|2m*KVH%SpKlc^
z2v=i?c#^Q2fNSnZz`YB`3lQf%bmkoqEg@@U2W|1oBJkMEB
zz=}bSk?|-(OusflAX5{g7$Z5sUHk)BYlpg-(xKV|HbrSW0aGXSHKILJw!U)S_Nw+upPREHvEp<
z@&4ZG@!){gH?Gx~zc$g{RXhRSQsh16Ctd&T#p8XpE_j~2<3?-zvv0t9H8<XFevSqU56L`+xWJh5-0AN(MoCu>yOj6-;r)kS7aIjzKj6KAzCs_bRKm{t%3vxL$&Rm|SXVb~DfH>P
ocluJD_A2L5>#kK0cIiLDPp4ahO8zIcDF6Tf07*qoM6N<$g4LKN-v9sr

diff --git a/docs/html/img49.png b/docs/html/img49.png
index c6870ddb4f86d303b73ae4e8d33265db13d899c1..3d693307ea71dd0228d9f4c972efc5db0263385a 100644
GIT binary patch
literal 721
zcmV;?0xtcDP)RHR400001
zbW%=J06^y0W&i*JPf0{UR5*?8RXvE*KotIxO|sda>;x^Y5F~|yVzY=~A!txVUY5_1^Cso<<+rGSPG;KS3P
zqcLOG40r{-Mol*+%5`cR=Q;H(2Avmlq;uUy>7xO|u7toblN>03|CuZEBb~h*&?U?v
z#k7L%bk3As)#|7xNdg;O#_O5LR-Kv-T#F)#s84qkQO#iB00On=A3_|@!}4Y=mPO_3
zoQj%ZZ#r2jkQx|KjE5JSlo~}El5W#@+(cFAmeXOYE)b4MIlW3LGbIVm5d%ELnIw6O
zG4tie6A2r_bw=_oM~78wNK=tb+Qbmz0{JCKdk8++>bTKSM%f$WysBhU>P>u-zCS%Q
zB4&6fZ@(6iHZPT#OKDU{(6x`WHcR=;&
z@96tv=zV5r1l9sxPW7vJGLfu(H8veT=ToVP`sIaz&Efb};c@maV!pUS=?jUE>8P@Y
z8)_pQ!MnKx+*1#MvSf=}Gmp8jmiul#K&6$%R!?8wC9(sY`s^9~Ew$y<3cUm#%+2;<
z&ZjHOOHDFD!Mugn_yu|gr>uwF!b~8#59VBN+MM_XDpqiBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*IgGod|R5*?8R6R?>U=V(irXQ(q(}1{#NGCxuiXe!fbAN&K2RP_I
z2rl9xLERe^1!<5vC|FTK8*p&x-lel3banIId^IVtwjfSEaF@G#?s?zKkrtSMUDYN_
zDV*#sOyxu5d~e{m&)Y4aH;XEPI+-gn^4&!hL!Nm&+cwr@lV=6?I_`GC<~;v!+)csw6=0UpjeUnbq6BHsfDFB2%SQsT@2MvWAkSp&|>JrK+Pi
zhqi7(4jFS8Faj&m`ef`w;;W-#cQarNO@dUYTAk>$9Bg7*G)Rf^QoK|py3EX&Aawtj
z4>zeyq2CnY$cmyF5Om7dT2jNdI&bhUpW&@IkL!Ir`HYd)+~wV*MjPN(th7N^uH#c=
zoY~NQL>hKc8zwdK2nTADf+q4dbFC}>*@<@Q9{QVT_|f@?b=EUcX$$Xk7cf8#$})QK
zSdm8Daq+UJagBxt^XFBJC*o1dvF<%LNRbr!w=G@n@6_CIsi00000NkvXX
Hu0mjfs=DKK

diff --git a/docs/html/img5.png b/docs/html/img5.png
index b2f5b3611b3033bca92784d83334dbf38d737069..c46a3819d8295605bcb24fdf82a8731663c57c5e 100644
GIT binary patch
delta 172
zcmX@lc!F_)O1*A?Pl)U0&6`)OSTSeLoCy;qw6wHTR8-{Tr-wmV~OM?7@862M7NCR>_JzX3_IA$g%G%&Nau?UnlFbaP#GGIv%
zOnbnPbP0l+XkK>nS*=

delta 179
zcmV;k08IbL0nY)DB!4PUOjJd{z`&=cr;Uw`XJ=<8Cno>^0JOBUnwpw`fPi##bXrdsK~xBtV_;z5VSs@G5OIM46L2sv
zh+`3EU{GLSV8JTEz`!N|p)D97YCzU7F);9Mz@Z)$m?5#*XDl^002ovPDHLkV1n9KLO1{b

diff --git a/docs/html/img50.png b/docs/html/img50.png
index 086639b39feb62c55e7efea9a70e343ae1ab9694..418f2429a098774221a98ee03ee1aa4dc9a2593a 100644
GIT binary patch
literal 729
zcmV;~0w(>5P)RHR400001
zbW%=J06^y0W&i*JS4l)cR5*?8RljT0a1{R}O>#+dcS%8TDH7$t(abK5*s2GLL5i(|
z5`?4T;tf?g$#?KDZK*vFbaBY)cB071EjQNf925tK{0WhQ6er&|zwVm0*HSw;_<_9l
zzVG{a@B7~O2LTFjW9ivi8`apfvl+9%G*WH19kq%^PE?91M-V|5`f$>bfF^f&WH#GN
zfD~9`VvmZruKQfbA#j6Nev9E8&{8@yxDY`m6&lJHm2}dinb(xTlTM(N@nD^?(`{-*
zWLk}(DLa|d<~8eOXuV#KI*l~$^q+AV(kDUmeFjTX)a)qtB0WgnAp5HZ{zZrgj=)m)
zocHb|c8z4mnBey$_ZA<3hI!h>=%Q|7kg#<6Y)0aY3^jI?V64(oZp26300MJk7W&o{
zSQFE|UKcgVD|4UEStV`_pl+I7@CzDFWVim
zl`;T!5^Ei}juInt#)83y96eDbh+)F4;|bR}MQGhIO;kKgx8pIpna93`@R^4!&b3BT
zc@I9J7T_hEZ{kmif1UHYkhU#6%AVh8%s8nzv7KmJW204h(4F&v+(*TkY^oZ}muqrN;#^&z#zc_pOtF^X6rRWyaACCB9E8V`$
zSM=^|$R8fgo5NH}W5Fiz2Dpd!H~{s1e9H3eg2&@xO?-DymgC?L){J%&C`YFY00000
LNkvXXu0mjf&Ky^m

literal 706
zcmV;z0zLhSP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001
zbW%=J06^y0W&i*JKuJVFR5*?8RZVErKotIx>`!85e|iyw9@1<@(IUP3L+H_q#jB#L
zw}OXWy$yO1ED|V)6pM?!dC-6-af{;?MQW5DJg6Y7JrvPB
z&CHwcee>SrEieL3pev~&+ks4H)F?NCR9g@Q>lq?c40>tFDBvw}59*UjU}fr;yNghw
zXM>Fsz-@Z@4@r%X$H=q?7;x+=Rw(2~;@`~ewlV!%(F>3dB!5~B>ZG!b`EoK;^sw2e
zK)9}p3RHvVdtNM%cDpkUf|_Om*HQ|fW{uSDk68(ej(zig`Xv88{QS`1VjB*kQZ}dO
zU88qGwDP4g0K#fLV>cbT34_?zesLcTZz
z^DMDNO5~mZR8@Il!muWAL(zUwT#DVzB
zu$yP;o?d`Xf^c

Ekw%iG@@0v9c7L5T9v$+>Jrj8Hja>4@1s%_Z;a;yQp7wn8Iz% zxD()pE;fa#cVI<2e^+{Es5FB31Z|Fz@v5u%&w|demqjgfecVr)WTHfO(CFO3esbM> zGTfhF?a-qyW6!>k^D;1b3HDZR{QOfo(kzVkt1X$4*!QLsZXEu~LBgGq`z}8`*~(gV oZ1IV-IYETx!JRmEhbtuQI}$;P7r$OX#{d8T07*qoM6N<$g5(rQy8r+H diff --git a/docs/html/img51.png b/docs/html/img51.png index 6577cec8d9f181100e232ae77b825838e54033a3..15dbb2d12c354cb75dba2c9510da2e03b4d89b54 100644 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoS!py+H7;|(+9gt%X;1lAydGqEKD^|>zGiSnt z2`w!x6%`dZIXMXl2_YdN9v&VxHZ}$Z1}Z8l5)u+TJUl>6uOd&+15%77L4Lsu4$p3+ z0XYSpE{-7*Qg!+SlChy@TLF#|NlR;(;o(A=6r^Z#D+BujLaJnxh8T+{Ny@d zVm{+ZVxU1oL{8igQu&X%Q~loCIDN)QH1~i literal 747 zcmVBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*JX-PyuR5*?8mA{JTMJz-Qgz)bJgBs94Lc5~2gf%rPIXf# zePIjI!GhZO)y*l#=q!lq^ot)b(^2RNv_h80K_AI*BAFrW{Hr`<}rF zyQ^Ti$nid26D{5!FJcN;g#$$UN?gW)M5xT?;yj&`dx3{Kb>`t6Fnfq<&L(Tyyzz4R zr1p0^)CV`@BW7I%RwiafR42OpS1SMhqurY-w~4xq3uylC%k8yK~4@$T|VBD)Bx8uSTb`FgvD=r$gpMf?l>2-+kGNW;w=2JH}me|C^ZX5XGj3xE~*95Tlh{55I1G z`i-1#0G0FbKP~I=?Wdp63g&DHWgxS0vQgIGju<;y?*AWYt7O6@h`Vzm d&@YG~-vPYRi^rvTvr7N~002ovPDHLkV1i?#SM&e? diff --git a/docs/html/img52.png b/docs/html/img52.png index e3ca633abdbe7dd6d8ddf3fb46a3e6b6a4c8834d..9849391fdf1f170a95fe48440f2d24130b790d62 100644 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^;y^6N!py+H=)|+)ERdrc;1lAydGqEKD^|>zGiSnt z2`w!x6%`dZIXMXl2_YdN9v&VxHa03MDiRVBJUl!=9ou%>bpk2Ik|4ie28U-i(tw-> zPZ!4!iK)pzJqhed%xoM12?+%W4UGHPIR3u7YrR9lCu|BMBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*JcS%G+R5*?8RXu1FK@|RO_kMPBb3bVULW<2?f|7^?Tbm_ViD0l* z^t20D#L{liMli@iAV@gzh@FKlT8S4OFDN0dB4VMUa9$yzDXta^-|XDq9(Tz_Qds!G z&b)o|=9~AoJ3tTKhNA;RiX<3`qSvAY)|`c`u^b*k_UQYefh7D{67p@8gczZzeiCxz zs2sF$4~Q$yjFQY6P_hBZ);8bMQF_ekNuC*PBEhX}hASjoO;az=6g6i{~E! zgFl2-awhujMPE(z8JG^E=4iw_Y9nfu!aR*KSkbj=8u*Iq2&2{_B(fqI2r_aNYal86 zo~EgK5>%ur=MHYMu-j~2qcN;#5k`SiOS+9B9I3gy42AX}Z_}bW8_Q)Go@m0Y$#y9% z)dQVs8>9%Wh{6)s*flfO_^u}Z(S_1yk6LmF++^8o{~(Oz}yVYW^k& zHv8D#So^RORmP?NPAIKj1b!f;{*CW}mt8i745zffX)RPxLU-fEULB)OT*>2L_-&>0 zXIm@w1sLQauC1?r?V_4kIwhV+TfzzGOqlPufjv0<$?uPajBRPC6?l$%Qx5BK#|puI92Oh5iP`r9xI0000mP)t-sv$M0P zsHmKroRE-^goK26czA4VY+ztuR8&+*NJu<9JTNdYBqSsl7#Iu;3;+NC>RHR400001 zbW%=J06^y0W&i*H+(|@1R49>SU;u*zAZB5J0X7B!IGf=W1H%sx?Eq1Q1#mPnu(Seo zF*7i5GBEJ7ZQx~SU|`^8Wngo_t^o}s@Po(;V3HT&0EqoPKsWI*^gHkoWek46-7x{= z)D;`RmNbAYVc-C>AArdNAX%_Veu$$Oqyj)9tN{!xFM$4PVOYVy1eSr2>;Y786xo1t z0R!g-D4Xds1Jf5MTVH{J2PV!rfq@k!KDVQ*5vEsvM&}fm)~`rr&OtIBXa*}VWLOt4 wK+MiyxB!=IV?d;p2Mh|x&SG*P!!Ps#0A2v_dsdJk|4ie28U-i(tw;I zPZ!4!iK)p62iPqn4~9fVNyT(*Z){97n`M+zsgckez{I@Y;tD*@Wh;OXk;vd$@?2>__DO#lD@ diff --git a/docs/html/img54.png b/docs/html/img54.png index 6daecc86f4de7c16e1a3fbf61bb09295fe534892..6ea93c9e158c5b49d2460e2259b2599b6866a440 100644 GIT binary patch literal 416 zcmV;R0bl-!P)RHR400001 zbW%=J06^y0W&i*I9!W$&R49>SU;qPlb%qu;2$SK1fItHS9PogM{|p5{vOs_V3usVa zVAv`&ftjO&frEj8Er6}$5>S){n^LfHR4)4gupke^hXQ^chW$`c{sLUuv4RJvTuz1r zOp6#M0L^4%;COK112;c69|K262hc|kfL`KYa9|2(P+((y2~k*}3UUF%1}0{K1rIqm zVNN2+Mfd^R`~-%a8z5E;euX7p7}!Cy$IB+QDH#FGtr-epO(_)&OerqN%9tJU1wf8w zVBNrA@QHz8Cxb16!xe@c2EJuZ$m-Y`I4*!gmdC+>qk)0tBf~O9_66(*3_=yWx)RS}o0000< KMNUMnLSTYX&y#Wh literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^5RHR400001 zbW%=J06^y0W&i*Unn^@KRCt{2Tz#w@RTcm3?C$LB+fS21AR+BiYf?e%hC+fGVMt#; zumTH|QiRw+UJJ$|8+{TH(P`7dytb6pR8l0y#fS;UKc0M;#+R5CHNM1XHUyg{nm9nf zCi=&=RxSSJx%bZZ&g{&-eGgylp5)Ekx%b?A&OP_s-#vHc?gIvpMt?ghm?$Dcsk)P& zcUiJ7XJdjc)ma}Wl&CfbaMpdCN(EBa%c;3_Bym%zwv~HzL|5t_&LUN;MsiktoFx<@ z_#ASiXOQVcvUuB+_D6CirLvn$0bLaxpE1LT?5#8I5Vk;Te~Dm&k4>pFw{Y1qVQlp( zdV|%9qf#(qI<5v2N_tI%l~n@I5o`;jd|ovwVs;2ON{Rg0T$%0W_cI_ajNXZxnpT3XTBll;Vxtz}I%2(w|Wp`+iA*^H_uYRqy#9X0-7 z`g$t!o+7UT84sE?bgKnhgV4=9H$-diAL$`^Iba1jd&|kVS-8(b6`rM3Z)CS~ zaMqj(3M|zsHhE<@FzY96Bu(WEdUI=aW?SLowpOL0!ma&t9H8rKRadLJxre8+%wKNk zg==MLoPhN3%G_3RP%GP3=+nxw6<%E&t-chkmAhd2waV*g7SPlX9KnJjH41o)^&?cP z^+}Z?dbBSmKY`vVMYsHlAeC0PHWQww1xzS%4gF<)g8Kx^rnRl!9_j~i9i{w+HiY<4 z3bPfhI+DRGAO*A%%TWoE64a`|AhoDe^u^ICj4Z80+a`iq(UQcx=Vrn}zg7wgGzl|u zbrEzp)R)6YkenuMFAu>H6pMPj<{d${a3U`a0rW%Cga|*~WhQ7V)T#lkO2Sq{Ek73= zB@GwL6!O+Olu&x;6`gENw^Q6RQJR~ZWA|=F<=`fYC5B5a$cCY%V9HkT5)!V24H83L zGohBtgGw|-x)p1p81yKNOq1D~Q+>9Qv6q|6vPhFR0^{U9sFexDQxc$>n>4GIjM@s)SVW>*41;WChr-HJ6!}A) z?TFmLwkk`OjH(kw{7)!v%t|MpK%RGumhXe^vL$U|*Nkr%l?~L}3R;(18>7u+j3QDS zL{zf7a|QJ=!(GMRMfWOL4U?}Wx|PN5T1})iiF)6d4b`m{l1G@OhjTAI<&8GB&ixF` zuar~ILpo{LMUl2L#e^lll5sylb!zWmTd^21rHV)9S9!8?oUQu(O3?DKRY%8>gHAw| z+GHi7ZIxR;3r((LdxIm%9W9G>psj?J!E2~>!5U{Pm^E>acEM3;<)vyYkADuX*a~Id zRc4KbxH$+G!*#IYV>~JEk=m_@IhZ-%%)tp{8?xmqGHQ(^2FTfvra_5)n>Zx>YEwK9 zBiFBvcDP?%W$1QUl&ws6(PVy=$0dVpwH}J<@hh1EtWKP*d~YVEJo|?wu+^B(b6Ua$ zzeE72^>kxDrQ5FKHOA)UfVpu)h!|_bX-S;aN76PxMy$;Te@}whDabB_VU}fK!y!!rMhF zT~nZ4B-1+B1gybf>x0;)f1d9IY^RZ1)z#41_KZ*I^xMRCDRM^}yoS7Yu;Z*SWRe{3Ru6rt`S+f$+ zesz^nL${3Vv_O?B+JbekUx}ByR(e*j4)!bFXqT&#g(+AE`W0@`aX33ADsQ$~llqku z1#RaAOl>Y@Yd$)M;e623u8|5s% z!+cY!lbpCb)LP4$()yVpYor_l$B=_p%B0Hi>hK{4(4+i{;}yXJ4J*T|)y`+j2)}ah ziV@)zbDP0_)kXlXdN5=B3SVh^@ah0s3I_Yt>vZ$rRZTh8iuEhq`>@MbbUymkn8q}w zrKY6EL6VXDePiZ%x^JB$(i{oOFN}lV>gP^v+daI97iqT%hR27IsW}pGLS)-yZ8V$s zXi&qO@QCveJmvkwP4yJgXCS}L)%&NfVpn9}`N+muS3>rKFSfC*E$J?!dO|vFr*mz; zfWs6XX_&Bcm5#TtBpONM3*J8DfLAiP_Jrp=NJ*V=LP*$#w24aXBi_#LdOC9Fblv2(2eq}o-v|Cy!T5vWDckaQQmkAB&a$kTc89PB$U-B##6g*)GoDk6cLRG%#M0pFU~iRo@nVR#T(n6WRzyE8rTN*TlE$JO zm&8=aK{EXsE)hi3&4^0$QZ=(yxCCJP| z$}ZM~2a>WXuJ<>(P+UUh$UI%&0$$xcU3VqOlbcn4qa)!Gq1(oQezzxYbWDpw8N+Z7 zK`#ldA@FF#vn3#!yVtA0yO3ytNH5_yJ}e3Zc&w{qo!VC^-5BC`YA5(EE7wK#Ec>FE zJ#8Ofo6y*mqM4l@3D$e2+r;n8iSD~aLST+Jh!O(n56fN zXPJOzL4U_1K|`r}doM-cq0HtwHgoPz44~(n&nW~v=TruvI8wzo?A)CJHSFr^*k!Hp zlws`ShxAsd6B_GB87tk<3j7S~RdyJY4Z|l$$X{XY91$i|TnFIza72W1u050Xu8P9UR z&Yt!cf6q9$m)#kx>}-sHOJ(~bY7p}50F7WJb!rq`VvxtmCVB6l>mA7miCVFy&c+Vi+gcx|GsTR=uq*9G4tm z`t3Tg^AUZ>HL0Gj)zNUt2TWYT#lcob#HD^<(vr72ro|z7c8J6I3!-9UkzRm@?Bm2X z^wY@cR9@Cb-N;4l<1+IfxJ3g;#z7mok@s=H-;9H70!IZ*Bk$voGp$5Kz%w@bYfivSrq+Sq%*hB_$M;qXg!?nuEKVMpz@V;fE-OFK#jhF*3YR;;P(Kbg~aBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*IC`m*?R49>SV1R}_?L@_dOGBPqW2;ei0 zXu$k{5o{5vU;v0rSi?7C!I~z9ZU&w+XB2><8$c@A84@nA^Du-$m9iNCiEb8#2ftZZ z%~>E~223FL0=>%tLU_GRHrVruf!h~kHv>}uUWLqR0ub+Uoxjs?Wbs~xIlCMfj%csh zz|gaJ0kXnL+!c`UWl&{c;@!Z&zk%5SNOL`4_@mf>tk8hrJTrv#ij!eJ1A{&TyCjfi z7vyf}S72b^eFp@ufU=wl47^bgg^w&4ZUf_V)z(!&T5b`Kk`c$FkApK0Q(U` UU#34jFaQ7m07*qoM6N<$f`m(-CjbBd diff --git a/docs/html/img57.png b/docs/html/img57.png index 919319cce4b55359537d121277b9b1ba501cf31b..09e8cb6ccb3e5119c7d4be4cb0c2a180a8840952 100644 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&N!py+HxcqY>h+`1o6XLpg^X3&RR?L|*XTpRD zEiEk-6%{!-ISB~~At50i9v(I}HU@x5)wQ-JU~saB2Ui)Qj8@*e!&b5&u*jv zIZ2)_jv*W~lM@^o*c6_%8SIqY@k7$$q0t$pKMs@TJ2o+j78v?4bQd#t`mu#8WFGmz z;Gvfw?ht&lc5$-0OOJj-<4fZip{EZV_`!Up>ezt;9|evi>_2ee0&~#uOWPMGOHN>8 Y*y+g6s6ScfBG5JlPgg&ebxsLQ04D=ZbN~PV literal 3433 zcmV-v4VLnWP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*T=Sf6CRCt{2TuqD|#T9?$QBl2S}P;m?bxw9TQ90)j4 z$ESd-Xsld_&sdF2K~ z56RNP;|iGdpe2-&>V({ubbWX2)DimDfnhsZTXh~CGMb957pu(}%F#1k8;mX-1y*I_suU0EBRGQVm4#4GYt&Pt zSu^qe)cZMogX$vr7Of2o?%TqB1!}u`hzk}cI|Ru7EV2o|?w@7!%dmFRjBpXeA5bLa zAQ-x|ZN|0Lp32iw1%~Hw{_$#Yy=s&Vi^OC>I(io)0 zsuA^SmhrkR81u>%jLWOz)tO|k%HC8E_Nv6F{(%Wmujc9|o;XS+v0g3ZbqdG8`LUu} z3D})Fj!*8y4*^yH&b0uR%T>3(KZ6$3SKtG2!Dr{$!eQ(OEWkPZG(X^(NDLB+#}F4Q zA$Tw=eg(X$xu=z=S6m1i^;_8Lcoj!1=~ai0NlqeOAr^4ryy!s0E2D{nP{>Sd^F^lB zUypl5caTUmD{olz4w83UO=MQ!4pKj$F(ZXO)~f=D;iU|TKh2EAs?(2nB?aD_ex~*6 z{}N83UF#fV2_uLzyERu@-{#YzV;=iMkO zpfI3G>#ohD?@bHhVnqndwk9t#NobU(Cg|BJ!-*Co#wyG!T}&Kia;&1f8o@$ltU|mZ zSg?*_6&`h!1gk)-N)MvzVr|8>a6uZR#)@YzT~N2SFv!DESCpp43hI2UQX3{zto%J% zZ5TEK+lJCheudx&Sl0b%q#b3y~OH)0laEkZn+2)q{Yg3s|$~-J=k?P5Gcrq6~B@O zE^`9~nX$SGr217k$9g(623uPNw9>B8XcD4{<$Fe_&zi5I+WSRpGibi-WeR zh%2B!T1W~&P(jO^dGjP$%Cp(sDg=9LK0BXR`#PLgR3MQQE6FPY@d|^N9;;386Bgjr z!5#)LD^{Uace`o!+Qe!D*En+TPIw3}Jd+a{oWeU`IUV~9UNI6|{xl=Boy042aH@)l zx=?1ZsSoThgqgt8>R_kX93hlw^f^7cLWko$CQ8LRV6AgAkJ}nJn1G z$iOjM>B~KCO#0P6<6c!u;K(+@D;JGg4CD)O>D6BnLlD9MD)ad)*CTYN@Fn3Ztazga z@&Wl&sh16V;BcA|Q0Pka_$z3=fqd%UsPiR=F56)sx9-Pz)rJx0lc*YyW+h|9uNdgt z$T)^q3zAP9BjJB*w+Vw9Pua(KHEJNA;DFodMR4xuFy2PLU8go;cm?6K!MQ;b{ZK`c zpOaU@kMFVE*6Rn;>J`C?H;n34Tjz$Uyb9~pqPUj~5_uKXs}X!5lUHHA8W>r;is+RN z+iID-3h5QOalP@%8nU97j6%N>wmu-hE7bFnco-vKCSBq2%3v`YOOVbhn8j4IeO6R& zsB)4@;}w^bN_cxEombcst^Kya+h~_nIVjV4g|^LJWJ4xDuZ-!QIenBcay=Bq1q3a& zYAY+?E$SuoTVt;%BQrX)&@*(L2a#4CaXa~rEf>9IeqY@A!f0EMgTt5pwDOYM0Ht^N zniJ+nWNlQ*@-E4e1;ZLbm+!qxuJhvsxyQ@My2mZ6vW*e01+^acqbo}IvBSMmVMNxC zgvQOOSLd(nfwN6GF#mN?g2zvM?r&mO_(g8rWpUjP&V!!DE5iEGaq|=uvtA#_tyi=# zJx`C9@E+0vH9)LHUUfBK1Fly!nglxDsx*mLxRm82N4=souGXw)@=8u;AV^ii>oRx+ zzFuwO$G^zn)g`DLeqC%bDEFaWojq-3@+z!XKCT;H0UKu95PV)883ng$6G#OCUKvQN zp_ns#Qb8K8ZbD+o&0U{VkijdOYBe=TD#+lKyB+M43etH6A7}7H?YI>n6=d=%DppX4 zDeHz*dAG@YIAgD~#UL~f?&}0M)c^w>1AiXGAN@t4Ss*edK8RE2K>}$OZSkV9a#m+7 za~|ZHH6t@716V&{9yFG{?Y>PYj&s48#;$||hT)iUD zrZ^HUi&tU2!oO|?uiy*|=#@=GOXt-k=qbKlX<%I0lgX>lBycovd~Nb-0~@&B(O>HZ zRA*JI(^qVpmMXjKd+n8;*MeIdLFL39R^cYz26zJ}9TTp&vd#M-iap48%l`;7X2io~ z@Smqe-}0XS-Jk;6H$i=vn|6ce+~V)Q^2|T|7Sx+he+Va;#(YE5cHeZv2F|qzo)0qv zu%CyTtJICaW#AR}xX-QD-7QLjv6Cw*rXl@+D?tktjc+C??n zWJ>H5hu4FKe?t2RIRz@YGz|Gx&(LAN30+L z96a()(I&=q3BFAqC`d-vH&dB#$P&Zb_i$2O;)3+ao}Vho7B(+^#R^qAu`U7pLwpHI zQd?Vgx9HW^0T@oO(#drR$1HvEkAtSfEU1$Fdw1DCI61YA}_)`2XG$XH54cu(tiLcPxpq6s2t_#nc-gXSWon!)W1sgxE8AN5Wrt$;K;{|oD4<9Jo`xI5)-Cr*Kxi)B_vFR)^Yt0Kan6$@0V^% zN|*|*<4Q^Y97J`XnUpZCm4a-@)75|+&1;BRHR400001 zbW%=J06^y0W&i*IC`m*?R49>SU;qO)K8A({2$MmHmjS|j03tRpF!1kSa8v;@-5JmT z3loHP;Q7dKm!pG$1ISL$<3Lx22?7{6A&d{KAS*5~aWN@0sIWl{RbV1)019AMSiryw zVKyKvKfnMrPkU%$Ip-eB-t1yd}G#U z`0xxY#>*%`qFW%K5KJ=lDCU!S>!7NgE)w0^wSa0S4{{_6bPJ_!Afy3&5;TOb--n8Mu-d zW-@aJDESNUDFXwg0|bDQ{tOJza7%YvCa{!&%ZXvB0Y|6+TZxwol4;B{IzY|^0I_>H Uh#D5_i2wiq07*qoM6N<$f*u^4XaE2J literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~i!py+HxR`CDK9FM&;1l9{;J|_9%a`}|_NJ$& z`}+E-tE+>w@bYfivSrq+Sq%*hB_$+d_%+Q|7S+F|RHR400001 zbW%=J06^y0W&i*JqDe$SR7i>KR6TFgKp1`!U*dCY$7ZNnBnAr*s>EW3(k=)KN`V3* z;(NnG3)vck00A9ba7%_rH4+P(L1IMmzz>KzA+cD>9|-({2vG?(?#>@g(iC;*fT}*y z-Mx43^St+-?_L9aDCAb7Z?%n`;r3Ajz}kt|7@E^wW*Mljv7v`O0}*|G7Rs8*4VP~w zV5Xi{Cr!bE5w`;Qvn}Qt5cUUb?_F-Ygi;YhI0+?LSV~WopivTo$6DLFuW1FxO&rap z$4=8l)C+4-=(aRU>?I?0J8K0pc1DApeIiDUDpj+#aa6_eu~Y78vv^H|lkGx1PR+lg zGL$3r3fS*(0XwthZC-JHj|$sd&mO-g?j;3fmx1(q_tF&uG;{Zrg}$}aSTRXi(+tL} zf;O8DUw_WBiN+P3lnLn`gQl^_Oyk8i)j8A1BN>{G_!~uRn?=iOP@V0pSFjm(NJ(Wp zH6uDQd0DPjN~O5-s%mwAk`kiaC$X-W&GO~kotL`r@|1(jacGF>yTkA10RJtn#+cfg zO#??**_#8DkUjgiqs0+Qd9mPdW~go-M+%aE@W%lqD~yw)6H={#>4xYh7M5`<#Khtg z6xQz6R6B`zWjN*+6zV4~dY}uhF+FSJ=_QM6?t#o>&Y$yyI+4*BpNeA<8-AdLs>S1F zZ6Ib3M0d(<+QxPKxnZ^-PjF2H=RKxEsVmfp%&3vbQg0eHIj}cb`DXE|e7`1xpT_J0 zFR&~b4!+9fS^VNsIhb;7C9pKR;tI8pLGtgsG1c?Z>Vs9x-2M*gVsgC+JnT=i{@ceh zpo4d=ifL1Yhy85}Sb4q9e0MQ&t;{X5v diff --git a/docs/html/img6.png b/docs/html/img6.png index 58a0b450d7dc0629b03ab12b887a69192f448aea..28b4778668ab8eef08be38f0ed6cdc0452d14558 100644 GIT binary patch delta 347 zcmV-h0i^zs1NH)tB!4zgOjJd)v$LqEsGOXfkdTmsgoJo_cx-HJU|?WWR8&YvNJKt<80d!JMQvg8b*k%9#0PaadK~y-6?NjZJ zgCGzbaFL~472p45%YYu%NLnxHuj?cr?#{w~0viHgAn0J=wttW{o)fazSemOUQit>k zF0UsSq^_H80<-+>=C={KrQ!*cNdautlylBOanOroH9RV>!tKI#=EII&MDbqxbulZ$ z?}a59QVNeB20QUf)SRrU1!)k4qe}IzDuqGoQKB%JVWs2XhUd$`X;)3*VvPS2<8SUX zCtABByhmeM7F1B?`ZLT1E}hVc`%QJVlV#g@L6*f%V+GsJ`baYx;T0lTRJUl!!G&C?UFd7;f5)u-Iqx>%b0004WQchC=Wl|~Is42xk92$$> ztoA&tF3i(7!lGUIq1Z^yik36+HugjO9{NZg!7F#;FJ>}7XeiJ^>K*e>w+>_XN1zsY zdad={cm4N(lW*5`gnYkL5{riPJ5JJD>JK(85va-_x|X&l6~*OKnl?|3nJVTOh|Ez$e6Y^XAPfR;-vaXU>EP z6IxnYDk>^+a&i(95<)^kJUl#XY-|h+3{+H9BqStwczA%CUPYds2c#HFg8YIR9G=}s z19E0~x;TbtOiWH_V7|uojg6&$VPm2*1G7~JThg&>yb_OII54;vC~eea6qk_je}C`p zfhP~xQus_fZX7?5z_3J;cUj{MKAt(d%ipIxNdLi*VwaqrpuuqJqhSq$VY|FXZYRT1 zPQD!tE-zf%Iy8(A^Gs++Vf5+R-FPsbN9)v=Mot&iLr?xRo?ujxdb{n4;8DJ7V&N|Z dcmhip7&5*nE`Mrqh9Brg22WQ%mvv4FO#o8uV`cyV literal 444 zcmV;t0YmBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*II!Q!9R49>^k}*rfFdW5Sdgs}+>9vca5QGEq7D0zw1aVZ5&No#* z!TAjeP9jJ~aj}EoAZRBMbqMEpML&Rt6vrF%b{BI=v84{;80GQ0vH`(7!`H} zu`KKqNI5LoxJ3%wp{AQ+Zf8sO8Oz`(-wcz_dhVAPW<1jXAY`6lAX}c!7h&sqE@kRCRHR400001 zbW%=J06^y0W&i*I5=lfsR5*=eU;qPFAjAd)LK`pzd7(7x83qOeh7K$$FabY<1K2zU zHkJx^s9i>Hc712)05cVcF#{Li2I2%1kqZj~)LD6$Igrh5oj8R%keN$4EC9^)XrRPO z5|0d0LWAm9U-qDBSRI#4F(%5X7M_3H6(m2VE({z ykh6i|Q@|C*tHxMtgaEDtBK*kI-#~<_;S2zy_%px@b%V740000BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*Jvq?ljR7i>KRL^VFKotIx?Y2oao21Z!f|Q6Se_(@pu|iq=3l=60vVLMk^=?s6H&*uh?DU)SyiqxrB844?PyCZl}u=t!Ng(U+aL0e z$e$T=afBu1YBDm^KXJ}!ca{}vbysO6A94$oG)P)F@U@UEQ;1wM2l~Y z+4qDRVS2_IhnuO0nhS7^n>+v2y9f>nUAe!VJsRS)2-B1(0X51tu!SJmq#^9?MN-Jv zbyF)kQ@^1`^MO&KB6?I!VX0!=*8RKXqBS1`hmH5HQ4*02m*LdfZN`PAoBA}Nn8RpX zoJXx)9l<5uX2P{)zxJcecFd?TQcE44Yg@N9W=5M|OF`vaJEm&-NyEoQH!(i55!50P;8B;nu1{JC(Kh zAl{F_%^so|NyPxPdRCHlr!iA{MNx-^5FOQA5&HdcWHPd#mA3d(AOI9d%a zIo=*!42dmic37ymtz;_2xL|VWQsp_9LgB9CF{}_j?d5&=fl=a^Tou1^Xhg)8v`LKY zH>!*#D=1Wq)MbI@FTVr==~5{47&Fc!)GIHv4KbKX!f1F3>>OmUc&`{`Oq>4X-*n?<$_}}px2^_-$pwh8#00000NkvXXu0mjfUMPEj diff --git a/docs/html/img62.png b/docs/html/img62.png index 1ec88bf6664deefdf26bd479ad9107a0486aaa16..6ce9093eab1621e11b22d26362a0441070f0f466 100644 GIT binary patch literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr9$P8p$@euh0&jv*W~lM@mWfIJok#>HHskAW-(Pgg&ebxsLQ0AtYnJVTOda_z$e7@z<~qHmoM+_?M+Wl z_x1HvS62thY}vA9)~s0#4GkqFB~ejP4h{|`CMHr+QqJvS?}5^cB|(0{3=Yq3qyagr zJY5_^G$tk|G%)wE-Q(tvJIvbFz{XZ$Anh{ePJ?2fsEC7xPp}6ICl8OGmlu}|>uv|1 zvK=4ayxH;f0*}O-dI>jdWwlOKHVV3A9@_HK(BO@3 sL&vQ%Rw;c+oZBz1xz{SO=mi7A!HX*Sjn{sx0J@sN)78&qol`;+0LbKLqyPW_ diff --git a/docs/html/img63.png b/docs/html/img63.png index 8e1ae26a8f170becd7f1842f72d13bbd3333ef6b..7cb080adfe1a9b5f16c9c508f230bf3482acec1e 100644 GIT binary patch literal 3613 zcmb7HXHXN`x`hDJoAgK%LoZT72~9!?MOuVVrAW~ry%=dn={4k10s@8>5D<|Lg7hL) zY7mf)bft>Y%j3OybIyHt&V4iY$KLy!*?Z5ozV)rOXLhWyp*AfQkcx@{D6b$<**Bdg%`ledd)z!tt#W)-;F)=YBBEsL_-_6a<-rnBS)Ko`DM_E}} zQc_YxL<9r^v9q(&(9m4p8#EH@yIzR>9vGSssjW>tzRr=Zs|hvr$8Fohr@a%QLHwwm z-(0$CJ)9UaeMhRJu7>NgtyVOX>l0uh4K_v?`3-2d2GVt9LXcVG~phog=8fb zd+nWBe*CJF=$inCi()#S@{0y+;?xrI!OJ?#ThN^u>*rS3*cMiJa-zG=1WmngepesN zJkD5H7f_5~d<$Z{RZAe^!PqE&Zs}TbJhQzR&o#%)e0&)w7)N9RGzo~q$cAVG>bzg{ zy$2EBQh;&~WjA1*9yPwa@A*Y>pLDZa$+g3cKh)5}jLJ|~9d%49JTt&NvhAjp0Vq|8 zNhf`niXa#}O@2)ww^y#`QMB4P@;OXjI20(4zX}Xm7+RbVBnoUb=KCYWWn{LO!LhWf zL1?gsvfv67_}VYb4Gqg!VAw=&mY3#?0-qDA?7663cjHSf)@8Y#p6nsItw%p-zKz>C zgc>y^Zjvjz3@C-lz8Bq;eVRt`nY)5 zF_q<#BsQ~mZ&#^zQPWAIv*NsA*zi)Qfs0g9D#Wk$zPR0N6)~Myn`c|AvBADT#1M*4 za5|lk+NzqSC~Y#(ARhFOC$8oD{M@nQdGs}@CNe`f_VJ(Pbu@!z$8X2hnHvsrkH+@; zu?o+FGz&tkT9Tc;Z~#t=dGG#FB%ugsJ;?NV#d4=qFZ~&f^=V~Zno;%Ew!KYd&qnR- z?)>F)%foeX6JPFuUhX@H`(qhQA)8Cziw(r7E%u*<_p%YQUw-`}6uDZR4`-kFVK$PY z-j;aeIyWudCT~)$L6C?Ifomi;9+{9|CmMc_*BXd+}# za&q%sOvTzdGEZj9JP|wLL6K=Xm?Wet1BMYDwl^k%3&RzN1mh{D1v64o99r22TMws- z`%A(*1Q5O;(`w{(atJtQZ2gH+`YX%Rn>}WBLy*e=ujcrrEvc=Cop=3n^K+Lirwg9i z5lNpq(=@dU6#Z?L%AlHlz7JXm}F=1Q5S=I2Kw*s`21>gfNx2-!Y zQ;|jczWtLO`0u&bd^A0b-rgV9korX7%DtxO;P3wcmov8+|A}K5RdW)Z8Y%h|!zg%aKOeVm!!6mmioU-XAH&#bOPNrsWIb6TR(>?;UcNJnq&1V?Dyjt#tZOKHt!6xS zQ{V5NNuWvGR~9n1L)!Ra;zaYX8Q!obohP#OS8Wu}MULs@(ndI=O2b2JP(@PsM#^nI z9n=fT)ub$AJ_R~~J*D0%x|W7T1pT{HU>onxK+3DCI3~P_brs!;c!`s;X;lG9K)eVC zeX7`|+B{ybTZ8|;qSp*bH$+XFI*G~QCQ`xpV|DNO`K2@&r8Yl^{3nTU2rA6!ayJT# zTWnJ^yVq74FR+$dVkKiZ;`F>PVOH9Mbj>S1?Hv8{3&?zN;DRb`HnZ^Qg3570lIR{KTC$ zl6%H|$^U~&j3$w1ikxr^frHtxJ8n}T zHKtoSvS*QUOc*^PE1}`J7X|+9?nlL9SA4*GMQ41|M5=<;!|vKL0`DJCihT&q_U`4 zS$z}xD!ECyF|gLra`svh9Z4J;NGNjz5I`F}wc}>2A9h)l1x1;v`|#dN1Rw=<3eUeW z5bIJ4FpxjcZprVkcX6OQmtze0@0J{f>i54dy7_N(#?iD$a>}0mTLazQ-%zR0NvmoA z%ItX6F=ngT=!Oj!+O$aXq|$SdVy4mp5*<0sH0F{gY>NU|+N#WxN^IpPq7n6>cSzoZ zAP@BhWIV`9va5c6dA0rN#jOp}rft?XuyCY&Q`B6c{I1}nw?kpTP^64%;GMvlGsd$nF`J;$gEQ{qA=b& zCNvhIrxs2uUp+dsCk)LehR}Y>4FJcD8443KZi3fNrLF@OJj*89F#{Se4~wdl10h3G z$T4+=ae67j#3c0%E-N&sb};fZdpCs!hbY($bE#5&J0j$ZG(}<|U=eUXCy)i`OqW2F zARP^hgk@;ttLJ~tgXh85MvDLMG0GhIkE}3J3m`52AnL}H2u9!$nqqlstwOJmW1S6S z#CJF}rvp>!6wK_V5JJmfBJMpGbG(JW53cXMsl$w=J7^ZT5f)j`9wmcfHK-u<3{S}L zypxQ%ojS{?TGV>Zv|5rW+us-L!J?6m8!Cc9qK*C&bi^|=9-7GLD+scK-=A*PmX2fS~byA(`;Wl(}K6?#3z*t>x?$pl zWY-ox&lws~-^!GvV2ls|;;5wV&;GLf|R!)>@N7>{H z@Mi7irU#A0xSYNENezR0(EP#F<`?gvx7a_H9XVew-ukT~IRPWx zo<%_%DK{$K=}B0%k0tx9ky`Q-{7jSo4%^>B&*E@iS&32DrpXBdQ)#Z#RubaZ>KSua zQ=;AkNChV#REB5bvU2K_QM9QD=>)e@jvWmZ6$V#AiOz z*hKDk_g<3+o4(u3Ln8NZr&)`CAxtys|AWwMPU>zzNH^-irI3jD;;%ish_qT#FuRwG_@F|a$tiQ;s6Eck!37UbOJy~>^Nl&-r9?lQi&UJe zMKOcw8Q0}{0ZZ_q$@Lo)`E3~gngMr~PhDN&(e)l+osaB9<7G)6bF6x2OL^Mt27SYS zM&_E`E`xhU@ferZb=Q|RDs@kT`M7^rge0S0ljCHiCAB<~?nd<>-Fo&zBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*IB}qgHxYBADksH;S|G!cMH%JU;zan zVgmy=!wyF-AnO5xLIXF$ciwkE7G(hFIyMxSZE!fi&DX%q&x{aSy>P=Vhl0Z_OCc^j zzJWqJi2#fV3=C)Byat$48{k4f4#O!925*Pc7dW@Th4`6ym@XVhxWLVV5MrMu@S)&9 zkOCtE-@A8UA(o}<6mB;#7;xaRQ5Gn{mg30ayoDGrXdVrybfd?$c z8Nu~|>j9_C3vLJ213U*9rZ%hxik<-h1-PPV4ZIsz6&TnBST3vslAIX~w=qqc$Dq%x z$IM{Iu#e#r!|iU)2TUI}U?^gk!63jPz)&a%%pIU8;cQ^URHR400001 zbW%=J06^y0W&i*H>PbXFR49>SV1NVG1_lQZ#ef7F7_tQzFaaL}Lo|?LFDSqwi2yu6 z4ALIJ-~+K?!zYNu1-#nufDb?yf%P+<-o3klgMr}zC$jW{1ab|g2oy6LAn{lofX-xK zNZ7}~021bBV7SZ=3?~N$&fU9r1G#JhKzBc5XJ7yY9w&nsk3s;FZediTKhxatv;i6& zvlMX2%>kx~RZw!IiOir7!(+y-Ih9{+S$6|hJpZhSh_QIC++GX!cPDm6e}%whI&l^0000< KMNUMnLSTX&TY-20 literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr9$P8p$@euh0&jv*W~lM@mWfIJok#>HHskAW-(Pgg&ebxsLQ0AtY9KYsl9h8stK_hyA@*Z)+k~{sisxcKDDV>kJZrF zp*C$=yGCsKdY%vO`+j)e59eIhIrka=`*;7Zb6qFd+*BXL#KS~IMFldrt7}O`Mg8!i z-2~8H^n(k$Sr-9Wb7Si}?d|P2940MWscagi%oe9Sn4}t;32ooQbKT2Amm~)$}*3H@@lt zx??${!jLP$Q?XTdSsUf~^=yA#>r<1uByy%d)_Hv?ZS6x#CvQRpr;HlQ2v}Pk*i=JU zY8;eZbw2*kC<5eHPkHXZsX3q8mzRlAw^83Nttp>7nLEIL{+yK7H?Yd3!<+0Yl+mr5 z7C#9F>q4^ew7I6g?&Z``rr8W4>Tc(%PdumN5M;LStqjTR>)M@GWA*VjI~5miWep@+ ziByWbJZKK)77@*yin-6PJa(t|?Vp{YwXY$R#MRj2s*3T9uepA+9BMiPV{a|js~w+K znhq%YhenU@u%?!TFqj9k;YnSso6UFJngfN+vZ7XeBibZT22n0f{I5Qej;m51<3e;J zz)#y2k$D`Z36u|Ok4{m}FCI(d)~bE1eScc5SADf!CUuBd1pkU3k31UfCfcrC%7K*! zb6!sxqvDeB>aSKf4rfWt_2X?9dM1h%O`+1+ey%k|KbtYl;Na!jbctT6xj0K`nCBag zI^O%BzrjkLI|2a@cw9h2i?lYzXQ7A7#JS)@-LOEHI;GMxmf2^9`JO6<3rbfZP=w`= z1RZ~>-At~qyi2w>P}g*P5rtNbv!mTG>*C#2t2v`_GJ#3G+Fq}he`7B*!Uk)KO&TAA zJFF<$1nw0f_SZj0BZF$SofzK`Vr-X8qL;n{Ajsp_TU`|*NeTvT6H~dZle5E-j-5VmVGl; zK0>Ty6Li7 z%-D*cQ#arXnEe>T4U2j8-76{NTBR~g@-3rP>d?Lfej&{9`s))F&dcnZGati>!~t|V zKLPvuB%j{aO9!=*kw6xg)3_`)CE-Rcf#u6%@i|m?&P3kA-`awvTLRSP$`Bk2Zo$h^ z*8WP+Yh_2BHm}`xV^v3pOPfmDdqN9ehyRf91}2Afbx;nu6(|^s>>4p%MN(Iptl4b= zBtEP@n@al4N_VlYH1ei}rL2}L9f+-ASs0>Vz=!x@p6VR}D*Q;MSDY=?E z10mT2M7{FFm&TMU+x!CU8ozm%_dImx?9uqwWA-XX)|>*bH~Bc_13PJ?*sl(Maq*jqX`2kh)>oKEqlv_L|^Ko<6}3JWLz%`kX3+_ z2Z}IP^0!qd9YvWrYQg={vDRKr;yf`g+=RTv61`=K67&Y6G$?K9*(>=gJOfDO;`~803}hntwp`u}v#2jdrr7U3Bmq-@alSJ4<}rZj zs;FyR&f)ihS2mE*QbJ`q8S-R&qJgZjk96(T7jPEVIQNvTGG9vpq-#s%V-%1ujkbX- zPijB8SZa5~7giPVC-wp336>G|IAff8^}BO7{ZoB3BkYQo>m15c9~Izpxa4h*)|Ama z?2s~_)Q&lDQk*IBQz=!(;XKG_%(54H=T9UhBp;5`yYIDF z?SO9j7IytW+WJP{^ieII-i@?x(X;Pz0Fqi^@Ikffs;EPJ0zzEQXrH`xfM7R7sk5agb# z%l&Cy_}Js_GoD*qu`d%{HxJX6z24SSIpp7rU{9AHh35b8Q@z^#xXn;1nM)YP;5A)Z zlJz%4ROLYI>=}*=I4tNIA6xy^6A$0%e-;heA2Y8XY``F9hO0CER@%-rN!3>4`JVIL z@?U)Liy=m~lsk@zjuwcN#DN(d?15Ga)DTBxm_Ky_G{p_U(wX0@H>-Xxl42y|T-Hg*qf0o# ztk8ApogIm|_n0*1|1)q+W|e5p-JtE^TT!*#k*^_F=X@HdYLfgzM!|d2u%9qc(DLu; zbEwf$mXF&Fm-} z(fGa-HHrwY#bOFDiIBzBgD`p;E=7lhIx{p_l}-?h!LZOS3FvI_`|-K_-U1$x!k^5k z7vXPclu!)%3F|Mz|LiXa$AsgDpJ(M^prIAt9>NBlCBiWdNIOFp*hCeh`iRZ~^P%7n zpMtOzd)+8=9MD>#LH0p}QF{#X{3VT0`2<6>WTIQNTlyLY3|(4b#g2i$39rdW=UEpx zd2vHnc7Oof(_Te|CTb+DT_1tj@ndVq8SWqd9|<0&0dKPBL|tDO=3Do#zi5QABbJ-< zcj5j&sJ?h~CecjJolb9Ie;SJk7)#><{MR^WVBpCnO3Lqm+K-`sVHHE(ZPv|3qK~mE z&rQh7AHVzEokDLg8w;Qw6Hf}F;V-&O*k#+R_m-QQv?jliXUoBbDjM)X2jt|)f3lwW zFBo-;D=C!twfzr!#z1CnC<6dJ2fbqZoRS-S7KwvB3Eo=7qi?#ptE(Iq%{#JYXdX|E zt7}hvgS_9w=q9quK9sbNAj>~`;J*|_3Gr%(6E{IY48io=6OGtHCf*sHM{*TT@hVD= z9U}@&xAoC4*ySePpP{5JqL@()V?@A5t<>Q!M6NZ>e>4vLAB}$(?96+vJ)BQGGlOdp zS&y!O%ip2>!jL-o=8^4M4!u(^#kHKehh2aV$q*7R_Y{=O?c_ZFOZ6V*(T6oi2wz)y zYRP*MwkU;{)4`&DCNCo=ilB+o#aVerX-n|M@rm060MGRWy=qK+ObKb@n+b1@OU)Z=c zka}dR2>Tg0#Z+fYlvCnym0CEM+2YA<@&WP$HnOdCC@~;-fQq?DC8VoM>UAC23*_rYtw0u(er%8|9W1hWTlH1*yS-l+b#Zk{+;wX{&(BB c)QKke$?|vG=yC6h9|x7e9aG(E9oLwD0dZVa=>Px# diff --git a/docs/html/img66.png b/docs/html/img66.png index b36bd89cfc7fd0e1396da662fba79cb72b538b3f..d9049fe704d41c1f37c452ace8a94815bb1f1699 100644 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^Vn8g%!py+Hxc1!P&p?hrfKQ0)=FOW|tXMH;&YTGo zCbYD)R8&;t6fKzK9l*$Ne4p^lFrIA(flguYboFyt=akR{ E0C??J5&!@I literal 361 zcmV-v0ha!WP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*H=Sf6CR49>SV1NV84Pc6k0SP={IL?3turn~MVc5XHvH_bU0`S6F zFTo`DuLBTn0DgVQfDwh40CW+U;!#pkVqj8Wc)-TMzyXtGx-g-Ec#|ms3MjlCoXFNP zDu5knaGrq^#05I=FwX~&BUwOhW@BJs0II&i15wPwFq7Be0E55;sAi!iMowg-6RGcZ zx_~*G_D;Yhx3z(R;W32CVSRI*0FX9-$+3Wv#yf~GCqocO$W{pqfGjlyU@A?53UfUG zB@LzpFr91)O%2m0K!j~qU$Q{8^T>)b4GoyWF!1&)5q<&yLXj}kj(iXl00000NkvXX Hu0mjfWqO4H diff --git a/docs/html/img67.png b/docs/html/img67.png index e85b77f0e363bbe91c4a3ab586b535d08cb35b23..5060d61f08248526902472fe02a0f8600a626462 100644 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^(m*W2!py+H_;Yo(Dv)Ck;1lAydGqEKD^|>zGiSnt z2`w!x6%`dZIXMXl2_YdN9v&VxHZ}$Z1}Z8l5)u+TJUl>6uOd&+15%77L4Lsu4$p3+ z0XdzXE{-7*QLSgySnowGT}de|Xq$IGE&5XNU+BT~)!f>Z`zGy95hvF13yR4_Y?tiZ59slJFq7 z!Rv#XK|xKzik6k9Qxi@Y8&u{oJiX^&*us0XV%k389XZX_{I9ea_I}bk`-lDI0idH8 NJYD@<);T3K0RWzKU?czl literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRs!py+HxZuL(EkKSzfKQ0)fddDYFJIo<+nb)A z?(6HTuC5N!!ppm5%a&QQW;HZ4l$4Z2MMXI{IGC82NJ&ZM+*uO~RKZvh;#Z0EQX&dy*_xyNWI zePWH2LRfG@LP90OrfZ3Z&&^Lb+T&$DL(O4}KDWwAGZhAgBcWo#^4h+Ofi7b3boFyt I=akR{08+YFCjbBd diff --git a/docs/html/img68.png b/docs/html/img68.png index 4f8dbfd9c895a8f5c464ad6b7f6704c530925850..432763a50ca253fbfbd1258e67b2abe468596e90 100644 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^Qa~)i!py+HD3-|}4dfUE_=LD_-n@CmiWPI_%$YD@ zLQ6|aMMXtUPEJBXLP$u6hlhuajg5hUfr^TXgoFeS4-Zh&tH{&yfD~g%kY6x^!?PP{ zKu)u#i(`ny)Z_#QCL5j`4w}sJhgsOlR3`TEDI7d!(8zz};d>DVZZU@^|C$f7r!dd3 znsvZLTD{{*>Wu>|&kS=IvRA%nSy6SM!OQr82|uHSOpavN!M3ySU&Nd^uz^Qw-=xNc z^BaFMwH*G_+4$CQ@^=xA{%pogjNjNiWO_II-dNkXlZlIgy+{A_sf*zWK<6-cy85}S Ib4q9e00-1u3;+NC literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^Vn8g%!py+Hxc1!P&p?iDfKQ0)fddDYFJIo<+nb)A z?(6HTuC5N!!ppm5%a&QQW|fqbL`6k8I5?P?m`F)U74G~Y4wPmr3GxeOaCmkj4alkU zba4!kn3|jb1T0C+Y#a$m4UM;XJPrvQ*xKCKIC*koV=uGDxn?bPcD@{iN$iJisvkJj z87pb^;ND)wMf^S+4Mh}YDxEyQv!%yyR^lPX4rPCVbT!8Ve;OK(GoDI|KX9Om@s!!^ xz18eKXOmls^d>CMD>`g@Zc8J-VB8fJhTw&Q#i8eJxdC0m;OXk;vd$@?2>>L4S&{$% diff --git a/docs/html/img69.png b/docs/html/img69.png index 11b3c242b52f6a9c702792ec59b5db10dc5c7743..0f133fbf4ec185a35b384d2f95a7d129632b89b5 100644 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^xn;NknSCX0f z#JMFUe(hqJp`hoTmf(?KTz7`SY`UV%lb{)gLN4*B@fwKwBqTg|#~@^FB`Ign@aHna z7i;#zEC$jVMUDMS8J_S=c*WMSjD@X_&5UF6QBZ2Q?}6y|VezKkepaCdiS7fV!Q zU&j*0F}awL`8gZQVXgTe~DWM4fm#J-7 literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^Qa~)i!py+HD3-|}4dfUE_=LC~IB;P3^5wm~z3J)c zzP`Td>gpgZyu4esY?(D{RzpKWNl8gmRFs2*gNccWl$2D?oi(vQ6^tc8e!&b5&u*jv zIjx>9jv*3LlM@`6*6>6ygo`p;H#0CBPr8tot8nm4K_lytMC;28Vs{uOdNVh(qzLcW zs#qk`qcCay!GjDsr#>uTaJfCFam6o&(Ab77Td~gq3)&x=9cJ8+`25@)%Yz3vjURI{ zA2wu*ThVPHEIC7KX8+ul4;A_f(h6pboyx-X0=rEO!W|eHp4loHOmv>L7U&=bPgg&e IbxsLQ0J(%#wg3PC diff --git a/docs/html/img7.png b/docs/html/img7.png index 30a3969921a50051ed3ebb8c4b38e4a543008e3b..34864f2515e1ad6193da1e1c79684c89ad0c95d1 100644 GIT binary patch delta 169 zcmX@lc#3g?X8q>Pn^&w@F=x)42@@u?w6s)IROIC3BqSt+goJo_c-Yw37#J9+sHjLt zNbvCRFfcH@iab3JNHLZK`2{mLJiCzw4t delta 174 zcmX@bc%E^BX8nN!2bM2i-rL)oo}TXO>#MG=&cMLH%geiE%a&QQW;HZ4l$4Z2MMXI{ zIGC82NJ&ZM+*uO~RKZvhXrGJ~h9pUXO@geCyU1v+B@ diff --git a/docs/html/img70.png b/docs/html/img70.png index 30dbd771877180fddde8e701a246f2ec13d3cea7..e344cde87c47a860e555731c665b094de5ad934e 100644 GIT binary patch literal 776 zcmV+j1NZ!iP)RHR400001 zbW%=J06^y0W&i*JhDk(0R7i>KR843TK@|RWcXqN#lT18Vdr-1yFBYW1S``$HZfK?2 zy1A4dTHJ%h6czT+7QIcOg!Lc>YKwS^7q9L?#bZFcFE&DtwI{u8tCfO+hd=)=O55|x|?37#ul1;dEu)0}d&&&)e-c;e# z_DuK4uN7ztH#Ar4Rz6+0Mleme4xAuu&|&ylt`Zk);Q=g;u61UHl(9B{Ec*iu$NwA> zUTb`-Y)|meoR}rb>)#m6h z(`YWBN|w}1^0iNcdI3ef_M6Z3w^3{mkL?U)>fPtt;#;mnF7pZAZMT}1FbTTW5$zb1 zv>-!zQDho~8*~=aL5=cwNiS8LMKf^#ush=CnRq;)NBJuX5iAAcnN3%+oABjI(~^-=VBT!{alMJ45h2%!G3lgDoMWl9 z8qdZJvWSCb@R$Z5cOu;yH<{W8@7GH#A6~-zj1@Ss%t)%=uk4BP146~y%)NTimzYOF zRo<@R4i<10QH~F}l%IJ7JcWfTxO(J^w)H?{1-HJUiu<1DixeB#1ou|jfJ<%TCWb{< zS~jY}yDlc^FCeRaWAKw7Wl9n1bnVq%(0000w@bYfivSrq+Sq%*hB_$>hv$!m((JP46Z|@76uN$%Vcei#?V`ua6maGJ zHMZcGH!%uddBh_WUNK8Jn%thrwn4`@}5Gd1=su4gHTVE-<6C6rbP0l+XkKZqZwZ diff --git a/docs/html/img71.png b/docs/html/img71.png index 2a8221eca08df88294a3de62e1d37ef031ea6f48..18a82590a741663740bb43d788ca5595fe85e6e6 100644 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^K0wUG$jrdNxSwanBOr$@z$e6Y^XAPA{S0@T&MN># z7)yfuf*Bm1-ADs+WIbIRLpWw8Z?Hdb;oN}_<{6BKpMBcB`MZIM!2t$_x-9k(d%vgB PK!psRu6{1-oD!M<>NX>3 literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^IzX(w@bYfivSrq+Sq%*hB_$7a1o zgn|U--)TyhS=js-eT^p=J1k`QsubY5nNj-6PkBiuwK?tWw^Ny=c24#=us3u2H#VP# zqCBlU+y`{3+1j)@*fukVIGQp$%QPM2`zl|2PBOtm(fB~aeTKP=Y_}U{1F0 iP!phV*u0sKf#I}(_QJdD%3FbcWAJqKb6Mw<&;$Tb)N|SZ diff --git a/docs/html/img72.png b/docs/html/img72.png index 5b3493320e4656ae8b9259fbbd0311e7d732cd97..b9c750c26417319f9075254c69af329d52379163 100644 GIT binary patch literal 5395 zcmb_gXH-+$x(y&LQp7{E0s+lg`xxqRV4%j5~K=*rl5k#q4yF<=pw;@ zfQSeP0fMv;iqc7>i*&f*_|6-SH}1XfjPc%|z1R5mT5Hd5esg|nkNw!xSeFxc8VCRY zIQ76<<^TXA9{|A6%Em;$GSfQm(jSDI8bY+ItE-EviZd!Q+Ei5hi~KzbJvwA%2?+@* z=_<0RvSP_%onm73k&%FS08vn|!Qa2QxHuytBcU{*hl8WZ!y^(GnUIhW85!yC?+?j= zkN^M=4-aq_7zTquAP_JZESMk(HGd6B82@6l?{9IXF0Kii_zep0HlY zqTd*h=EfF)8?(c1008d|JuMB0f5u`aXZj@QRn&EI@V7CJ$K?8Ej!_W#p0L*8A*=nF zyHB2qi{-{!EUl|`gh>inW1&g^82zYkcgwh;ROSl2v(uuS;$Qt%OGkn%r2%8v^)pif zK-?<5M1}#LqR5FK6t*!+Z!kOW&(4{9vXalgdO2NM>6V?aY18H2Atd zgeh`G`~+BVT2e3usKXm8`VWn4wq$jPUqF6k%(^7EO~T2BC^NrOR`#inm!3?rdQ=n7 zw7#S*XRn5dqc1&t$Ef|h{S3Fw9Z(ZCH1U~+9SeEr%GE-KDO1IYe6NDrK2OD_PKwyW zcrS4e2gtoG-CoNUflr}FZn;EUuE146;db@o?9dFi1fpYl+Eh;Kpyrubgn~)1eQwJJ z4TX4J#+o%4L7Sy5HWY2toi5!z_3Y&-G$~x48upS)?An1jzjMV^pic88L2Z2n%+A$X zIaF>VLF>oWL65y$K;G6Gvq)^P?9qhD7P*bFQ?C)Fri#$!{~a z6k^?+GLbb9heI2fVAObPy}`JvVVQN{1z;QJ2YW_Eowe`@2l`4FZ*?rAi(9yy-236U zs)ak4cmsaDJ#hr|6Wd2MH(pP(y}kXC9eWjEAt+s?mQS553ZREd(8HpHb_I-%r)+zQ zd;P9xw>ikLtVaoxrfc>L`vh$!8>^^e=DzjmJWE^ufnC4c0BZEuDGR-TB=%a+TRuM< zm$v4dpEsiJs;jR;J zOGQQZRN%|*rI#V@Q5kS;+0TG3UIdY#PzY;vH}9s|Lc;>LlgIVXWW%8K(rd44YZ{ix z7B3*f#)du=2r&H`-l(g2HvFOg%MQ0V@jPNoFG!IY?XnJ#{B|#$>oqa)ENd)pO5FL` zycoi~qfFpm!w&E6)PV8!0C$meR^ODOkLdM&l_f_H2YzbNQj>~0&&!xEX*R_|^=+YY z0@SI8?6Xc7Spn59ZEjyu3-mjEcxx65I@2Bea=l*wasGam(pOQZAR%kU%78Flkk8_~ zcUni2{+fSmnsJ)cvg&B}y;3GHw#VYR$H6+JqV9&0nT*d`gJscfHf6It_x)b#Ipn6-}=LR!-PwUX(enV&LlY^1< zs5*timbw%P`T}y^G~U6Ic$7jL8YPzD(vyEmHMk_to~U*l+!8iEG2?u z!H@e{X@86^hCn4>5}9M1k74!B>a&R`qy%N+s@l8ahhF=+;EhfTeImCy1^ATG%C7aW ze+%a{VO|`D+r}Z%Uw?4&e*tf+r>w&bU_k|oedflJ9!qb@h>v!MgQ}`SFjZvJTPOcu z&j%+`{6gTish_YlmYACb6wD!0l#oqkSDP1{lKSaYjkMAGz@jIMWB79kl6;xO{?TqX zs=@8_8A7YQ4cE7ieWJx99;Jrf55~fe9>4C8!0(Uu{h`p;Z$)W#@kH2u<{4SaudNYT z!jvarAg@7XoVp%xO1g8^qO2y{YHFe`v%8DHY*_Mf$r-J3vm+fu2d(aU7cHA zSG#4brW+t!b9JpI7fXy9`A8EUhTb^Mn@zzy_Ja)@o6N%28L$b*xf#JkSE&q-Q#agY zEWWyQ0?d6=ffBYX32B`W1@hIfekkUBM-oH9>{UKvJcsc0WbFM{t^h2-FzTf=6PPHS z4y=S{lMvl1hwj(2jl`?B!;r#>-P&5UU=X{OM=gHXbnEO)c>gExsowk{LHw!`8%W?2 z2L^95IikdWyk^U6pSE3*1Mif^H-n1d7&|F`V|BK8NV{HOqk*L?AI_k)spm@1ke0hA z4yVwh;_w@mz;3Y`gE)Ow!QCnTnNW~GA14MBy6vGhFE(Tt?x7~UsMW3U9~c_tz*efR@?r_4bmGKp_~cV! z<9HVkTKEyd$u0njxc=1&j+jn2nJ;EBSrVf)=^U2OCwAW+0)2N#l&;whlZL=@$sJ zqm8w25l~^)L=e7~AEY-<$(_YYU-&yn3Hmu(5w7UfuFQ>BFNJjya%AgmyfIsT3xk)Qmuc^G>9Xry#^ zEWVr*ikl&+$|{4!R~(fyt^h?%Rg@Q-n_iWM);cM#e4~-vFwhzN)1lRxkY3PI0aN)i zfr+Tc2(^MYZa|dk0Bb>JyW*oiCH1$;`7hNtByV7Ut-=CmviN_1>8zeJbpp(gO zYn-4Ds8ES?yAf}1hETjQ5>?3kWOT?dd$?;6ShF4W`Zq?kD^kZp&%)MO3K}{*xP+rFzYf*=q(wpINVo5cu6cNy^YG-dK04oUVHne1 z)$-iWapB>$@24-mFe3jc#w>s3|J|7Xk;Tz9$zzY95|!G_VkTF}XKw&&_nO1oej-rq ztLY&_uhlRFhs~2NqY*$Z?g~oqjk+JH(}7YVktZ}~pKN#h&@Zdj{;HSX)dRUj?sj*t z?$D{ZP8l4$Gxn|J><-Mk38WtX0Y8B-sa3p{{@o3f*{6Q-W8DLyrS~W$%>^H&J|yvl zbjhOsBNMX7M90#?cC+Dmrco{aTYxQm=()M0bJ2$J^)Y!d&-l4h^MjN?gyPQAI(J+7 zhfDp`230NGSRH=aC)Rz4JqbP$_;&tu$oFr26?L1=rWuPR1kgHZezTKQy%q!^Yd`R> zaBnK#&!Z{jHdrez`We+9RFyrMY3`hGq-30#S8QuqP>GTs^ARYZM6YjKy#vZk-3xgo*0K&}()IgPO0EO4 z=pyW$`fdr=!#iK1fQSkOyg*1QSuvy7xGaRlDdxyhAoavq%nf~f;k*rB zzlefic%p{^sYGJ%$l2;9C)b#3uJA~Pw; zd7aC$?B;>`)K?c=Wpc~nvaKJ?#2?=J2meIl{&tVLOx)q#EFnC`-;-x6>VoN#w6IJ^$~E{7-o^QySvz`J9$oGU}IB^PynH*~0lX zWkYmg){DAQaB9R|+T`3op{B`O-@Y-cp7QmR-FC?dy$T=Z8KcaR_fAwlh?<`cof;GQ zTcvEl#S-1}L37DV6BODEarSEjC2b^tn5z*#2${MrpM>z-8|n|IoNYTbd(O+K4aZh` zQL-(E*Y09WDbP%*lt+yBPeC|n*vb8j;MlZ}gyV026gjJ*wLq5;pKr>_+eyFdd&S)r z3ZZs3noLOS4iIrmKkrN_^|?ItA{fHwyjlJgJU{>z&W~1FYUjt-;EWNv8=gP@i;-QZ zb>_%ndL4F2{fV!=_v(f{XEH1Nr*6JZ;&;E;V5#>H?7MdjX+Wd$~TFq^F&ogJk)LE-!%;$;>Hl>rY{O7RiCs}CU zr|NsktCyE35$)(E3P%RJSxj!a%W5#6a&EI}%w#W1MFedAl>=)kRlr_Iqc{%try=e$ zW?6?V3|pI8cZrl}CUWIT+3OrpVcK)K+6oKs*n%)_QvCh$wELj&Xt1R}&Y6Vm%T@+SXmaWvB_{)X(+d|n}esMan#$Dqf82EU+ zmwrR0F=aLOijR4X+FMoji(6`+O*1og)qH6>otPM2`4L)>Xg%^%gy2gBl~B8GTRCE}#fVp$`Y1)!f3L z_wxv-oz<}nq=0$wlxjfZ)WrfWjkXf!lgJYj{_9F?DKhmp?XU6WI6EAXkY&x*s{vu& z1AuiT({xB;$^Z8RsvF~H24hSr_%Bux*xP8gUY^-_in z!Z)>}snesIskWP2W-UpC|PNn`B3^L=sw zjW;vX)OZYOvf$+CUYp{Z-hZ=|+WEzVdV$Uq9#oU}%KIJCD;(q}nB;jy1*xWIvq~oS zmN%EiF6!JmYUg&jxUB}-Wl%DXE#%R?NErPk!%59U4r=37Qo^W0orGsi3g|FuYzE>W zBqUUgvUmCZO*wQfSL?s)--JEOl*5VW5H7oSEvGb>1voi>S9{w7c_YJozW13N_#ZLCWGhrQfXZL*Cnw%SlDUN_POH_||3j%CGu8n0Fij)}}rUc0{G03y%z%VY8R fcNvu@bPt5E=#*moUfyT=k41oZCJg;gU=Mba literal 775 zcmV+i1Ni)jP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*Jg-Jv~R7i>KRXu1FK@|ROZg1~)XKr_G0zn8HQz@D(*o6pbJtAlq zQeB}(%Gf2{q9}$mn)kP}@<7a=Y-7HOQB+tnp^NAL$y zm=E60%=dog&ClBb(pY_cukN9w`6-T~D|~3I?kTqvZlfh6YctEF`ev)qY(hkX?=W`F zY1_(pJKg8`Ei~FGR=+qiHiv!qd|_1A;csk+T&Ao(8&7P4Paz8ZB<-TU6<_Zk<@6`W za=FZf98^T<0i)*_Rj5L+;vt9NQ6pH9S(8Ta&9wvgqm20S1a6!!zS3)Y&2Wa*3b`|c zraRmU(sT##Oszbv>eZ9wO8MY~1-D~@{eQK*BSTLYp0-~cCEoqqL4}>;Z@ z57vSAa~i9;>rx>)^a8K}f9j^g2@-_Vh@8mDnY>Euvj+UHak=>6nyJ9dlE9A2f{3no zG@6NK^aVZ$&76jpfU&p7Yi89nRG4`$a;l@k^vl-vXlbG}LFNY3%8pShF3|xQw7A61 zFsE{Lxw?y{Rgql!_Vfm3(lvjvdV2+TxP=`y;uuGd2d(DkDVyC46O0`mvnjtUNXDCo z*k{U}d2%{r!TbmJg*L87LZG_ZIAq+(lu|I80yZERY|)0&V7!8a6E{>GqneA~sJx|G zxQPlscNx&H_Uvqnq<1K{Xss1P{vFQ!QAx}w@>blbQ}|YN;9~pVM!33Wc?i4$3a(#Wy3Jqa5SEzz=JGy0L6QB*6dx002ovPDHLk FV1n>yXJh~X diff --git a/docs/html/img73.png b/docs/html/img73.png index 2f029ed72ab26bcb1fdc2265df236041f88ec808..29f556d6b00b0c7f378e364c114f12d12a0e1df3 100644 GIT binary patch literal 793 zcmV+!1LpjRP)RHR400001 zbW%=J06^y0W&i*Jmq|oHR7i>KRn2SEKotLF^RctLO_S}#!djYzRm6(KgL)FuVoM7` zQ!E(iB|_`RrKGS_yp3gxUMedp6nfc<_Z&oo1zAB)UKa5W2tBCBi0etE&Sbx<>0#A_ z;t%HIO@8mq%glT8fHTsLU4a_vg|RSD-%}kSzUI!=9rm|^n^?`e{uR@L=fnQJZVU>& zJLMkn({lS6cAEDj*+V7J(kT_+WCI#7QLR2j0d$Jmn#D#9<$_jcG}hQ>Iezm*&s_Y~ zKlyjjO^@in$d8BRH{+eKL}{bKnhIq0F)LBr(Imf|7Hp`hloG}?BuNlO0P?OE7_~IX zyCGnm%9d+zpYsm|MJLh`ElS?k)vAwB#b?knX2`Y{5KeIiEY38n4S5K8441uT2n0DX z=Z<8hKvyJU1a;fQyQB!S>1qtR?hjcMuZ(!6&=bj4JncXJLR|29fBe&dq*bbX=n;kc zEwz3WTVuxHJvpGBFbtzxQ{);Z+G_nE7E8#|4LHEnS$n*=&UY_9nB$ptw8I*m@s#CF z+yU_*E?;DF@!q!a1YGTy<6?c9n_ek7Tuo%2Kf^8f*a8}NG0wNZTW;rs*|wOWqEm-9 zS;rXgM%-Ysy#!Wpm|BLSv4y10)wUV8#@D5f*p*$gfs`L&hnrCR=tb!~F!Suiwy;AM zjLi`#jAXnN*sc@V$Rq$R=x&eLeCYqM0G!|3#FoON_RHR400001 zbW%=J06^y0W&i*H>`6pHR49>SU;qMkMm7dyAmf3=;b2ezlB`od{9$llzz$d#J^)EJ zhT;O&0I&`q=)|EG8*qT?0fGY$4s76`5Wrxt0mx|;NH8gImH)r3m;}S{0H7-uz&St* z8lcS900+^AF9r!t80TY&wH9(5Df%yVQ1Jf4Wg@%Sga1bOCIRF5tzf*@mAiaEid~f+$(C7{bL|t87Mnm>53YzfxkpyoU3@=jRkFHw15 zoAl}>I zAsIVQ&P9(@EW4FVpXojm9PKDM;DMdakU@l2szr%#MdGk~9$-@; z7Ljqs#eQiYvVv>M*R_7k?)DC>n&(3KV54>r7X%#UY6)y|Nk+Ym?#1kCXX^Q-t5dx4 z>PbqIARB;jhiGYH$0ugaa?x$qBahe!IO#IOBwA%}d5vGQ+^Os9 z60xW=;?`(u!Td^gNBJwR$kgAogf7=x)vPe5ual6|Z9)8?k7P-B4}k)ZZbsf0ZpDez zRo%MX)3K;7yBl7Ocwx%jC^j{tPlMpR`rDM+1M2X6>E-dIU+0Li0i&anKqw6D4)RJtA zDTIvTSa{xk)h6!@QvRDN)osuGx>s?cuZ*-tNMwW@)OvVrv=3z%_HBN;g1Kj?=F1sR zj}O%E*dcuXabMsY@`QUUqxXz)@SN(Kw)3aJ0dSGSDho+GSoR-a+sS6dhUH_%9fD8A zjDDQ#f@W`?QVp*rONEI#?2OE*Nzg1 zt8{s##d++&ylTvPybR(P&M`IS1-)EglorzzkH0oR5x)DIBtweTap~~n#8}KnOmvX~ zM&{w;E58RfTy{KA{EYa~hL%WiFB zVB+oauDc7uZmsr97w#6aLdFF7W@N0yFmb=FVgxJBXIHFx4ghd(TuvijdTMvL8?oqE z3S6z5nAl%^QYm##>;j#a*MgLJu}uZPCi z{VKN^g5`V{>j756e*Gq0wN#!6Fni z{Qs=R@sjv~b|C`Rr_gj0Sed3_xY~^Jh*U_VC8d4-sg(8qj)_q`!{F~CDq@z}*U%*nn2pt4p; zDQd-9M~Pnd>v*>f*xc<1H4z12y509t`t}~j$l{qTY49%!A?V3W5G|o9%)+Lz17V?K zVaNK{jQ+axUx_k^|Brp$j#q2WsThA}xXA%AyB?2GT3+GU1v zv$??r1Ip{f!{4T35fB7wbF}o^)UPp7QV>~Hdr<9hM%)v+zQQ0;w?>Jsi>=PXA9oZ- zUdWIFe4mPb?+(He;AzTK_60oRTd>V%O!pC9*Z9v^_s@O*=|1H+|FHCW;O1Z}PJ3MR z8`qDaYF-+#6v6k@KJRLdCBz}zS!8+KeQ_cJA!&^189{gaGgi*vv7%c|b}#>l(|?Oj z`h0M7Y)d$TH7l~GQ67R9gz^rz{Z9^i%FN3a6~^NTqFr^KHqN!wXN$dcgFOMlV|ZTH z-ZP62-k|!m%!KHWu99W-p-SHfl(1}H$3Mtv(t|OHQTn6sc9~Jn^Z77vN_v-u{5YF` z#W&lT3-@&uE2bv>tIe=~tsh01&Ajg{DWrv5Ixe}>@S)NJ6a#UxGQ%ThbV z-tG^#Qj(gDE>|&H^{H-j4*^ckRe;OJ>8W@;ia_|2ZmG(idTxIf*1ARhptDzoKJtDZ z$6V6w2>1^pBGhRN$5`I$hzYt5r`n|%ugDcC=O+ZY+!e>-aLiBbG=^-_8-oAyoy2DM<7Axt_N{$kJA|%9- z7r9pgDGEYbdOkt?Gb^HhP>>s_+Y>Du=*cTjX_E+axAHCSuv9b;@6hcAn9ukl?z+A`!Pg&1Iy=DG~r`VjxeUY z8PxE*sA%14J8I7(zeY9)EQ}ntY|jE!WK=5fKxdJ`bxU5l!}-^Iw@0%J4p4&dEd=W+ z{GrmLJEG9fhUbY5#BLLwXWhl;1h9oQD=nx2kEsy>f}-7fE+|(7g5-Y|Y9nxvSNy;W zn`>I^z6%89@Ei0egdIaFBsk0q2b@>Fhu0Hr9$x)yyIh#BC6_B9Tpy?2uEj$qHlU>& zm9+FeTU-BkznSp$fF;oc4i#jQUX-AsevUS)z;*Mi$T*Jw^flqtI>lA~@cKEi_gAk< z-_W2Gt`_RQi_!S(Z|5s$1QX90(YZfXftBkIAO2Lt(C3*jq^K~b6NGA3Gy7w~CM=Fi z>}n8tp3PIWBA65R7QHn|KDI}-Fpz$n|ZO;jv|_LYn^k>@VztxJyL2( z&SSMVd)X~~h$zZLs@OcQXg6b+*W`UKhfAO>b?Q#1)CGa-PQ6L}3Bn5#!4Pa+JcK94 zZNBofZ-J}nFNTOOclT+ajsnSH^1>pn{p|m;Wt;DB7+4BAU`BuaR@{y(`Cgc6TQp97 z^r#MZBuiPtuY4ph1!G2)5rZWl<@~#yQZ!IHDoFEG0uWi`t<~kuS<;Z%rpXBU&87Eg z=cq&&rBS(n)H3DnXO8lNN{!2dU9j1vp%Nq2!qPWXN(yU0*3g{1(>hs@K2(Ml^|EML z&Ud-gS?NGWB^iTAK2z#2aVA_oD3^tF82|a`LCR`$K;R+4!>-%U%mLf)iQ5w{hzmCx z@;Kqop(DhFR~X6|y*hDbT6&DC(Y|eICTE%8K6R|3ZpqaXC5*7YSQLU8xa6}=#DOYS z7aOL=5yfZMHDVP5|1g1OAd~0nV&0$+Wx?1)(z={vrz22{C7|7By?Os%xIPhFu?xFh+KP?{3$W?|VL*76( z2dbd3=c(vwpUR85sxZ|3LIB&+cXdnUDhcJ;wiw0Lk^^L%rVBZtc$7Q!e$<=7(mbuH z#X=>{-^8rx+5)Bi)?wOZeRqpi_)CKR2#S0OC;#uLIIx6?9Rk zh@f-iTmEFU&lnWpo;WkzGWq=6z&K;-a+?n{vj2x4?CNLs<@6V&qt4CK-=j9-c9yn! zW06j6F#)fnTL-0=0}0+cE&Yx<>lrfJ-^`f?km9_@8;esS-0X#4r@K~HL=n2#-|*Kz=5Vz)YL+( z8K~k5r?_6CZq5eU25*puj;5%-J!;kJL2*#KZ8>oKS%@l0So01=?YW!ofA?@u$=$Y8 zO}WAc8-$)XRu-1~wW6F*ru`lg@vHzV_3l8Es?TBz{w$GTFfS1>h5?hZVw!&k(h~!b zo@|^dTdB6u5*(@b#p-+QF9?WvxO4lz!awCF&)@dE)9Kf_AqjXU!BJoT|8$dtfAmbr zA;y~HpQ2{yZ}kpck2kCVU|&g`KUzePseno_G`Foyrq;Mu@qwXSIp1@aQ9hb3P<~vW zED}?0$}On5Q zM4vaOPPGjeFN%Kd?F!86)P3`DRdL6~efg^R3NhH$?*glT{q`?uKEh~lUS&qX+Ea@? z;VnY6au2M38tf(`}LZ!{J}n(v%MZO?OVYoBIw(nAuwnlx#mPQjxlO=ri~= zAL9eRd2-K8hVGqi$*bMmp3fi_!SShj86}tHLCDNt2*2+$2Ob5+ih7Fk%C=V@%h%*< bj)5n1mAg6tboyxh(|qsh7;6`5I)?oPK_Ng; diff --git a/docs/html/img75.png b/docs/html/img75.png index 19eb28999a678470660dbab7fb2fe8e551ec696a..ab90c16de116c20644aba9250d409679cee05b52 100644 GIT binary patch literal 497 zcmVRHR400001 zbW%=J06^y0W&i*IZ%IT!R5*?8lRrztKp4iKyQJ}IYZK5_4Gyjbp`(zYgJT@3B3L6* z=-5r&4(uQb;@}4;=x$t`i<4stx~JdZkSaLUTv}s^X(@<<;6u1SzdU(!58Mm%r4c44 z1?X-gA+nW`lLO>~FG^v?YyH-KhY&RnYVzaJ(jnqCTUxGbPFy-Ck5Wb9>=PUS7gv*) z9<4BC_B-_~&U8KpTv9&*Zl70M4~!R$UiT(EE8)!$<)%}rIw|aT6dvI^jq~V9s>lW7 zT^E`4gxha=Di^T07VQVARb$^493ChIf<_q-%BIYANSvy9r1$PO!i^_6sJsp{aYe=h z&fL{E#Xk9Y$iFDHB}XNg(4KeYm~$tvt{IDF1xlNAb`9MOTh%x(jJ|O66~}nQimkpp zW6zZ62^eZM*?2>CK|88&7L0kzr|l3_G;d1U71ZiGMD*=e=9CO7FrM;LY0u*>TQaT4 n4nJFp@|7Fov(1iw{jW$LtNBuInl*sl00000NkvXXu0mjfwdT?I literal 785 zcmV+s1Md8ZP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*Jk4Z#9R7i>KR845qKotIx{W00ZB!Wj-#)=9exYUz%1@S072>Dzdb+pimrlL26rY&w7c9VyS5GF8C&!-FD0FT5JUoA7tje zH{bW(n|U(<1_}4!UUEIR0<^kLH3%($2k|{yG&&GAFz{xWk{)E+VG$uuexKJr`#0f# z<1J%Yh#iaUYB3OG>c{oGs-g}HC@e!+Q}C&VS^ukQkr#qhl=Gf&OCuQtfWUpBO zwx3UE>QVU!yDkH+Zx*pgXbv<+Mi?TSUt!^07D2gSkrP3m0$kd)L2cwP?2K%a5pauU zkw;+Dj6mci|1^L0LrcnV?6SqVuP#_((l6|_V+wJ)HqM!*H?yUmMO0K05+7ph?MYrLJ3p_P0P zPM{!FJBy9io;Ql<7G6SlXYdrNPoB}s2XdS6oE5SG3f6pNB_J#%{1F`7dTDYvQa z%?tl8e~TEO(&>5Y7oc*q#dcUm>qV(dSxZNs4NbfTw}Zz~;8lm#D|hI-eRj->V62|T z!k8}e#?tgVy;kWaUVVl`^A!S30yFc1?8iTr?HCzNuW!;^2`9k>W#53OzGIwxqL3DQ zZX^}bHgLeJ;|qb-;MZpa*=DFK&S+$JXeNWH;K|(iNyAKV{CaFm=wMIMe~T%zB54Vy zU|yXxtSC6vwmm6I3K=bF<20=rAg5rwT@1=|Xr7cyaPGd$9GYpLHjuTdl7*b{hYae&Rxq-S^>PM>nE&T P00000NkvXXu0mjfExTYy diff --git a/docs/html/img76.png b/docs/html/img76.png index 2111312c7c47f658f72c52e4609418b068965b25..c4b1412a5f4794f23aa87c1c2bed9878babdaa10 100644 GIT binary patch literal 325 zcmV-L0lNN)P)RHR400001 zbW%=J06^y0W&i*H!%0LzR49>SU;u*zAZBEMfgb^ICIc6QV)@~~;J|<%G$gPBH41=K zLj*VpXn^QKVlUXha-o31U<1fC0jUbD{{OcXa}Z+)Zou>byIqV5stF|u4B_5DHU~q) z51_l*7M_*EG81BG~*JQx^w6gn7P`TvJGup*hkPMLcs0Y2D;k6{&MeZXKVASW=L z;RKLl!t${OBFxjk^o7A+w*kWAgwhQDtc(vCFLMVlm;gD)^%;WLEwNj6z=15M(-i;! XIU^#`2>4*X00000NkvXXu0mjfd7E~8 literal 393 zcmV;40e1e0P)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*I2T4RhR49>SU;qMc23`gp1_a>P#mKM$#$g1Ld}a!Y3=bHv12%>a zK$2&HZ~*fHpaynE9O`fZpxyjX<_5+C+jSS(kwvMG_6g0v<3h z?1ggRHR400001 zbW%=J06^y0W&i*H=t)FDR2Y?GU;qK0H*8>|c zr~q^<%LibfIv4GlVHt%K!iX07*qo IM6N<$f@!;dR{#J2 literal 522 zcmV+l0`>igP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*Ih)G02R5*>@Q$0(=P!v5$`jM}OC@2LTf|H9Spp#h0575O?9Xb_9 zadQg_T^tO$xikfbf>q+;{IH`AajwFf9MmDYIS9Tcv9__)c5vx|yxe>4xgXrT01*U5 zimlHxBv2{ZvGr&<9ae+av1RN133y#1#$hsf0Q_%505KIBJGKZ}$2sJCG}^wR1I?2W z%Ju~T_}^?$B2*15I7Zx_M0{()yK$SDa%&zG4z*w)$1&bWzGiSnt z2`w!x6%`dZIXMXl2_YdN9v&VxHZ}$Z1}Z8l5)u+TJUl>6uOd&+15%77L4Lsu4$p3+ z0XeHZT^vI+CMG8^For3lB|EV7XxOMpJhm68ahUXgFX6{|frA?ume?F*^kiBxfl>Pb zyI_t?!nY8GyaVfcOb(p;$l#&H!DQI6dqHDkzSB!avo`*O<5CQN!x_Skp9pYVbn^eg zhM4Jw(|o@1G#G@68ThaTo#6>@U}Pxk|HX8TSz%T#vv9I%1n+((eUH+V6H^!xb{Oqr xKDG2*qx7{$3|*`Ami0c_)#md-p0|d9!RxBke0%4{FFu6OdyN;1l9{;J|_9%a`}|_NJ$& z`}+E-tE+>w@bYfivSrq+Sq%*hB_$zopr0K~L<*8l(j diff --git a/docs/html/img79.png b/docs/html/img79.png index 337d43ee38ecc038533d98fdc5612abab0714e68..b10c809acb285f9c118c3a533cf697d801509a28 100644 GIT binary patch literal 350 zcmV-k0iphhP)0015Y0{{R4;Uvxr0000mP)t-sv$M0P zsHmKroRE-^goK26czA4VY+ztuR8&+*NJu<9JTNdYBqSsl7#Iu;3;+NC>RHR400001 zbW%=J06^y0W&i*H+(|@1R5*=eU;qQYP!0xcfa^SVaRvsUI5+FT378W9Vc-KcZ3+O$z5p8z^GP%p1{zR!4h#)V4h;}7?%lhIwTgz|0gS9Rhbhyom4PFr znL#|H+2dssE@jO83Je?v82q^>F!-}>z-bx-Fy-<)Fr4sbV7S5KU;s+W9k8fER(26+ wVoL@Pr!#Pd3Sbzf(cgg~HVUw$8Z6)g0IHXERcYdcqyPW_07*qoM6N<$g7JHPvH$=8 literal 363 zcmV-x0hIoUP)BjLjb~?PCnqNW000dQ4Yahhnwpw`fPi##bXr6Iacs(BrGXn!->EdiJ1_lO$0G|-o&6_u`Sg~TxoH-LFOlWCosi>&P$;nAb zNC*iD@$m4lv9U2QFi=rZk&uw!;o$*ldKGzk9*|-z3GxeOaCmkj4aiCHba4#fn3)XJ zmY$Gs`~0{{R4zW=!I0000mP)t-sz`($#r>BjLjb~?PO-)TFCno>^ z01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001bW%=J06^y0W&i*HZ%IT! zR0x@4U|`^3U|@K_z}UmU!Tn+a diff --git a/docs/html/img80.png b/docs/html/img80.png index af302e8bd5ef41883df942f6e64bca019c050045..0ee708a9d7060555266e6a88e9b6f799b54c81c7 100644 GIT binary patch literal 534 zcmV+x0_pvUP);T0000mP)t-sv$M0P zsHmKroRE-^goK26czA4VY+ztuR8&+*NJu<9JTNdYBqSsl7#Iu;3;+NC>RHR400001 zbW%=J06^y0W&i*Ilu1NER7ig_UIrY1n_akp;R7yNh6V;sBpwHZ;$+~f zyAPz9QgLbfj}CCy@BwNp#1ej}5P$GS0d591hP?2r@8m37|>t-n{`tO$7Pp1Mdf?4Zwf`swr5�!!`cQ-1yK#DI0C1?O*rUodd z0EjivBq4wm&IAU11a_l9M>(L0gR;{228DO9P`_dB-~ou8W_?;Jq(C4#srv&cQUYi z*ulW>(1k2vx`6os3uglB2fW4r-97{4cJ2V684SEF9~inBt}r7>@EC9<80a$aHsCO( z<3|$`&l-p=+zJ>nA`}>=B74A#fzyp)W@sZ$onWvV2zHBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*Hzez+vR49>SU;qLhCLqDV00RafAvlkLmkYs81A+twB=Cb_4gm2(*cdhoO;&LE!+9 z+rZ$(#2{G!QOd+{m@F&Opdf*4M>g-B^$^11-UAFfAeg|az`&pcVkw+qcmZs5GYaBKnt$D{oVU}mwbV&GzGbbb@ z#K6EnMMVWDb1g(v3P>@Q1o;IsI6S+N2IRPUx;TbNOifNWz$r4pGBY!iGhi8G*i{GC z8BKb6d^^q_XFsDLBHdI}XqezEsKU9Vkx?%)P()6;(k9h7*+|CC%EOt7lOgvCuZD4! RUBjLjb~?PU0q#GO-&~!CjbBd4Gj&nw6vObaYx;T0lTRG&D3C8XDEr z3?={o00DGTPE!Ct=GbNc008nyL_t(YiS1O;4uc>NtH*T0@I3ziXLpFYF^RHedvZ-o z3BplI0eFIR4vZRbu$FbG>s0^|wS8;+NQtvcMl~a25qN#C|0RnVS6(cRe2)|Hrvd^?p?0 Y4jV!Xllgp7DF6Tf07*qoM6N<$f-G~JC;$Ke diff --git a/docs/html/img82.png b/docs/html/img82.png index ffe4cf524189bc57d269a657af61599198922289..617901509b38311f24b415c75e7f4325c2bfcca9 100644 GIT binary patch literal 826 zcmV-A1I7G_P)PUX6xg#4?v@g~J<~hF2gDxRG=Y$t&J?@#-rG!pK#^26 z8jCmjcj$i;`N6E(8v3i>=qL~c`lj>7{oOWl9GG0ApTM-cs3Q$lfFHqJFn-gnE;{e2 zzknXl|3Bb*+CHdlO~W&M{jdv;^1DPgR?l>Xp2dtM>Vr$QQ|z z(b3j1WFMOBJak-+lcw1Ohj-4KF$Xv!$!XGqqn4aca_#&yez6064E1A7^~BfYpjA_h z5PNbz(N%vH``b*Pz8pZ)X?I%UxVwYKh9UerKq8jig1;R z44xCRT?=#bSrBA3i>gRgX68-`(_-Z!g|9w)cFh?PX% zH4)Ke)f`M@tkD!}QB%^Y6;)noo@<5Bbj8*vgVct*pvAxyyw-0lLRz>hX&1a|oV6rs z*>>>~48E;4(Lu1fTt#Bh1ski~J9b3@hGLPSbgVo*5RVlpS4z5ku1&weE_AVlz=V(> zYD-WIln4_NjL6&rBB`k+0#V}~$r!DqTl^A*PSPbu-=x&Ya;)yt$l8a2Bqk)*;Yz>y z;;9R@s(EJF^VqbzI`wwDKiLc5AJ0e~{L;qdA8KuW0_;x`;(5o{cmMzZ07*qoM6N<$ Eg4REUcK`qY literal 560 zcmV-00?+-4P)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*Iu1Q2eR7i>KRKH8ZKoowLR%6u5W(5X}0)Jk<$hvHa7^C$T3aw(Ujk%$fz{KC6;_rCY*(w73n(YR&G z0H|q@g%Zj_=^}-D0*W$;rmf7RhbfHq>w}8xG%r$Ng(g7#IM~O=oGvgL zYpX@@JoGBOa}!84rc3}Yvx^*k+4*B>-812!_z4o)ra^TbKn7QKWpt2Gj(oXDIo`Q| zDSRS0ME}M`#un>z@dbmLB*WkNItq^jDhm zv;7HLzZBWydUhk>CN(mMWTbdnykSb+S$l-JOABT7;l&Y%%}y88-OhG8Pun!T5aNgDBJ0`CyF@g*X y?di(NiVRV@NBAjof;b=H@Q=TR9RCS9V1EKuSet3zPjJBi0000RHR400001 zbW%=J06^y0W&i*H<4Ht8R2Y?GU;qK800jmJ;NXJLJRpKaLe#avfdK`40Afyt%?!LP z3=FI+nGB)c3>bhTK{TLE<6EagE2}4vTkwT}pG(1cgFXW{rdsSEKoH6>QD|k3;A}d< z9PI51-O^_2{DEh$sF@c|1;Ufp*Lk2O1k3bm!?c*xR#qoSP00000NkvXXu0mjf De(Qt1 literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^5Eak7F*P~i0H??U z9dU7Sjci7tv;#`~Y%vZx8X5;$Z)dD&5X^ePVsTVYqvMFORHR400001 zbW%=J06^y0W&i*Ib4f%&R5*?8Q@=~YKotIZX>HmxP2Gh?u;AE1L=Yj1Qafd(Ta8*q%4QRtGOJIN`TP)-IJ`DTNxHSaElvOi>`>|esP zAd;DlAZUyJm}rK>eyf59ag{b2QbV`K;rd_py38sFO%hxgGd1w+6!K2@r%+OF>|K0o zxv5NP!NNuGL`?mfde<4Eb}n{FFjibi1v_tbwt5`e)tMbDoO@x6_?=PlQVPv#=v)i& zf<0izrldPz%knHNOjmV_CaT99pLhh`qGb=r?z+>eI)iJV#(~$E#<)RsAE&(`l;1LW rv@FzIvz-~qh00000NkvXXu0mjf+o|A| literal 843 zcmV-R1GM~!P)BjLjb~?PWo2beO-&~!CjbBd4Gj&nw6vODW`K~z|U?N|$Q+aL@UFzlc)1pNOWJAFJHJ8|2j z>u%j$bQiDzy^&;v=ott>honEIK#r)MoXJm7?7)LOMPegF%gGtRU_L?o4(g7Q^vTY> z(Dj2zrRw7v92E+7E`I}vkM3J4OspCfp8BPw1X`hH(d9)4-}d3lQq}%44Ri5on-tbT zGr=H&eR-d|4WHBMKZZ9PqBcFf$Zvtr&bA}6I{yCF7x-1Zl7?q!&SD!htc3$MGAJs| z)pjC{Lsfj;zN~{d@NL^h6!u7j5B-f=+?T_4h`V5Zdz{;2EKlhEf*0)IoizW(E}9$vm)3<^J@XINJ;TEOgXna z((nm~5xP8b?3QZ%7W;8U%GLv^M>}Kn(zMLVdudYs7}f|~pW;-g#C)9Vy_bZ@OfazBmk~(*!<>W!UEfgQGY3#B^hDcQ#+OfraYKGknGWqr##FbZ6@y zRI?Yn;06C2Oj$oZ^u>^NMd83d)w34I^h_duDWTY94!0nDc-!-@r*$o$AoUM>Bgwfw zr*6p|Yf?6(LH^@(V*~Yp5*Zqmm>p1I;DH8;wO5AT2I#Hr?@; zI20;qzO?&bVWXJ-^UV^=8jALo_&dFv~d*3u@Sq;?=)HYp=@+c9l7X~{oA@?(}ix!(kjsFzj zC-|*b7Y_cAK<_ecwm1vxVvg$E72tAA**bXc-6mc;4S0T_`WVv^^}PVK4V3!UFz9Gw zOioE<>inkwdWoRL4S%BYSf}sfN8RvqV0`O!9}i=B=F{;@LGO~a5C0!>`tkE!;Wz8} V7RHR400001 zbW%=J06^y0W&i*H>`6pHR49?HkFjb3K@>&LW}S82#W-C^BPq1s&XiM#2ohNA1&e%u zUD~lps(_!c{=qi(gI^-#2ewI{nQ;{?l%U??@#fum_uUHzRGfp-#BJiUyhX&q))(Km zFqgj8NLV<f5{N!KXfjdIw}MhRks?NAe1q>3V5`WQt7IS>3CY{ zvXiI#C7Hp4>%`dYtZuV&0|xNK^XV+y+u8d1zM2ty4t1K*D`4Vgjdm{hCYjq{{gOK0 z4}E@lbFXwNeSR2?GhRm<;yK9>J`OjcqG{FEUQM5#kCZLTyQaJbfBIV_$oDy=82|tP M07*qoM6N<$g2$SjmH+?% literal 374 zcmV-+0g3*JP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*H^hrcPR2Y?GU;qIQ22BPC_`tvfrddG*6B9S{g9QvIAOIx(aEk)> zTm}Z_!>b+`b2DIot_7z#xA5FJ+qsj)7Rc?;XHa0|V|bvzz>ldG3t(bUfG`d-?&4Xn z{?s2HgHszA7!GnXelTEV2>5USXeBql0>g(&t_dp>7$z_<@MtkF@QPw;(AZ>ffha5B zz6Bwyfad@RA%Pp*7p69xzGiSnt z2`w!x6%`dZIXMXl2_YdN9v&VxHZ}$Z1}Z8l5)u+TJUl>6uOd&+15%77L4Lsu4$p3+ z0XemvE{-7*Q|LuD*gKZpMA#~<{m*tai@vw&AhC<34(5nY>yaE zx3@KL^6+qO;^A`O;}?&ZAn#HjB6R7uJWI#M!`%-hnq9isC%g*czHttllW>{s{y|9Z#UZ6l;f`K6^Uv0fMV@m|kAq<|belF{r5}E)L3{H9g literal 511 zcmVBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*IeMv+?R5*?8RKH5YKpg&hsoHDqnlA1!laplDMfwDt-F$;SfJ1O{ z=n!yK$Wl;LI2;@*NJK@%P&x`-g1$f>!MjUR&!#E33Hm|q_sf0v{r=ot0u)F`xf5dv z()kII8Kwp==h-w|7GnW~;kOG%#;oy89eM2qb!G1}CZOzx397J?nb=CrSrvT?wsQTV z<;%m!O}mPDLnBZc$;3pit*<)anJ_9E8=-hVi}PC$e|xjl#y7RgWXI)&4WSq|&yY~7 z>N95DX(1B6^m-tki<22sV-Bb2OK%8{ESlOi7yc1Fb#xwiUG7pNOB)o9QL1I8XMXt> z{!yG8zCF%Ps{$>PY9@*L%2+I)v{IsIiCblO@HIClVV&XY@fFbD+0G?In~vvsQbiww zlEj^004KDk*hk|-|11Vn4%a!)MM*-Z*h4~Fk+lmeE9^mCH#!N5!pPHs0P6wI(1r`r z#k*gd+_Z~c7WKCP7f34TB&v{*4S57fRlt8N!6)57SR6>sNE847002ovPDHLkV1h+X B+NA&h diff --git a/docs/html/img87.png b/docs/html/img87.png index 4b39f077c786934afb9ec9eb2a0ed7d7288758c2..37a6ec01e3a5b8d17b1e4efacd2268ba850e1cf2 100644 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^(m*W7!py+H7-8Vy4CJT>_=LD_-n@CmiWPI_%xP(9 zsi>&P$;k-`3Gwjou(7c*Fffpikl^9r0jdpUHGB!A7)yfuf*Bm1-ADs+sytmBLnNjq zCjdd3Lj$vcUNn>R1dZm-`Ig1c7?=eaLhmv%hs+9jkZ|Atmq}k|BIA`*_5&t8=LHfb z9AMbUm)6Lnd2BvoGxH3goOO%|vzQOvJ@J5VS>*wh&x~x+cVgOnc?3_yObFa8DG^b8 n=|SQFr!MJ}%;^&jGBTW-uJJqW)iDd8D;PXo{an^LB{Ts5BI8e} literal 370 zcmV-&0ge8NP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*H@JU2LR49?fkv&cWF%X5n^%lWdZ?Xjk2y}F=q1hwk3S5IK2Z+!f z!A&H78bm=u3IkQ7+#ro>sy#r8jII2ELKQ_kX~yGu&oiSjY%$t}tys+-I@4vwL3Gz= zmAvOnAJ+Xw#n6Ll>M-;w7|Dd{;U$!#BC_Qe6{{VEjC>P%++arpX&kJ3q)1&Z}E#b^L7LnrQ2Ig%H*H{#mo;+Z{=@DsU f;N$k;KoNuPOm^mq1)oiTrZRZC`njxgN@xNA2&OgX literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^qChOi!py+H==QVX1CV17;1l9{;J|_9%a`}|_NJ$& z`}+E-tE+>w@bYfivSrq+Sq%*hB_$KM7Dd3y@j@@AHv}tVOk2l|9NHkD3S-Mnpf#l%>CkhgoCOk?> z_|c%}%3$DIP$6*OK){BF3<1xX8$}&nTR1#3F!=CI;L_}AZEr&UBz$N5#wycpuFnv8 zvbe!B(VlrWgGY_sh4l3jJ_oXXgy|+sxI35Q@}aGb&lzI&Ph!|;cj$GLfd>PFZiu3` U!@1Y*flg!aboFyt=akR{0KBbZ3;+NC diff --git a/docs/html/img89.png b/docs/html/img89.png index 97c77ca2b50aaad1aa3277592344288f41f40964..7272efa2c532e5eb92cd31f5e240f554d52aec67 100644 GIT binary patch literal 416 zcmV;R0bl-!P)RHR400001 zbW%=J06^y0W&i*I9!W$&R5*=eV1NM*1|k3(h+qaPCQ3CD;Ar>&wd2DF2KE*FK!yQG zoQXtp7#R2&1p1-O4+=m+PC$SkD9F&jkk8M^zy}n0(D0obA|k-#U%(AjTmUy=0?Brg z3LIbzb|}pSbPS5^4Qwzz2SWk_1FOS<4`5ybgEGkJK(N69rlp|(7TN;L5H$}zF~aQN zMA*6jLNOym1jzNkKm(3149o>^A0Y%M!Z|D(7%YL*2NV@RK`sRlBV|G?1CIm4W|)c- zK03-+zdCZ{7a8vgpgZyu4esY?(D{RzpKWNl8gmRFs2*gNccWl$2D?oi(vQ6^tc8e!&b5&u*jv zIsKk4jv*3LlM{d-*@1~&V#WcJ(=2vuZ0F2v0v-ZQVwoYt%GSopW5KY=ip{T$WkREa zu%d~xu!sJ~hVItJ#-EHQ8ku-_5~3JepFK`uy6o_dWk&Ck1``9115+m4<5;-+pvr!R zV1^lmd_JoT4OAXJ>oPP*Qz*2IKf(1O#mL}A%lx+4`x;f;C$V0d;K;{KR7gljJUl!wFfb$} zBp4VN3=9ka008P)%boxL00DGTPE!Ct=GbNc004DKL_t&tnPXsJVBiO020jLE2N;`y zk(Yt<0|Ofa46rb;g5^E{Nd<LuSPFfc>_8C(JU3Jk0Zz=CxQ3~~_Z>kJIrzzp^S49p+EEIR=PmQPa|09Aw#sIP}2 QaR2}S07*qoM6N<$g3tI%tN;K2 delta 213 zcmV;`04o3Y0rmlqDSyDgz^A9Djg5_GXJ<`KO(!QO0000D4Gpxkw3?clfPjE>baYx; zT0lTRG&D3C8X9cetX%*A00DGTPE!Ct=GbNc004AJL_t&tnPXsJVBi5_1{MaE2SAFA zfdRtfIshc#U;{`EKf?zg*}!m#0Trk+a5FG)@-rL&sW}5u!%oGp0Z1NTQUsC$3>Q$9 zbKNswV2}Yam=EwBU|=i&3$~p(b9@4rb%ue#2h89E$|QkV{1X_Ma=aM;o{|(Gn`FA) P00000NkvXXu0mjfWztNc diff --git a/docs/html/img90.png b/docs/html/img90.png index f89a8e47a1be3125f20255c0d7ec705fab8e8ddc..d7b63b63c7fdf176e8e6602f86f1cdce6b097253 100644 GIT binary patch literal 580 zcmV-K0=xZ*P)RHR400001 zbW%=J06^y0W&i*I!bwCyR5*?8R6R?>Kp1|KrfJfzbn|06P;d<$Tm(r$P;pSOLvd-G z?4k(T$t7Y%$0D}q7DU9cgM;8A_y;;V27f^){s8ZzY0}z?__6hY+|IxW+ei2==`8T+oB3HkhI zkF>H@3M?pL*4_wt86{zI1Si@NxlE}Z93(xuNNkKg)Jj9$Q}j0H^xTM~OimINRnAGo zExX*@bcd5pf7UwiPL0|W!{zFVS#;BO%7VHItcjdkzHDWw0<~H^iDWed#aun!nQ&pz zm&&>p50>^I7L09S5mpmrrjW>tHx3F z80w)3%|>z)*g+^!adBzujZ&mSPZW>Tz6Fj8F1U^XEDk#Q5o1+5_$nNa*QQGe!&b5&u*jvIYFK-jv*W~ zlM@)48QA1l*}k#z1S~jkfKA1cwL!?oL5EFnDoYY0JDb{qEP*tZq_$oro`MT!68KbZ yGD}1>Hpw`6H8wVKIvM7qzhKi$3{Fa5VCZ_pzHiZ!_A5Zs89ZJ6T-G@yGywqnPdj=5 diff --git a/docs/html/img91.png b/docs/html/img91.png index 0802142aadd634ce6e2dee53466cc5f51770142e..1a5e9297ed61d81a301b33d9bf8726d00c688de2 100644 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^#y~8`!py+H$g+z&9mp{V@Ck97Nmh3N-aA3bJ@ z_;Z;2g({&ay_%1 zCd#4Nrqw2u*5=RC$aCVBLeO-{Whw?KGnBkHl>G5fxcj!5>(6mkI|hdR{{mh-w_45# P^az8etDnm{r-UW|rkHL! literal 442 zcmV;r0Y(0aP)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*II7vi7R5*>*Qn5+{K@fer5^}j)*Hf^Qu-Iy`wTRp&2>yVdkXkHa zV|`zs!BSEjS6eKiAaX@|n-#&rDxcu&-d%DzL$EM~uh^OQcINFY46q6vK!SnET3}V| z=EeoSvU>*Y4(siF!XAMDDdktcGiYKYa8hO=6pfH3R?(E0V0TOUr|b@SlVYHif+>qP zW(KV7_{Rua+{WCNnG`;#X+0E23~rBz8bkD` ke-vtg#Xl?blCJ-ZZ*Lbua(JC2&;S4c07*qoM6N<$f&u%zJOBUy diff --git a/docs/html/img92.png b/docs/html/img92.png index 7ae3977fe3b3fe5fc462b11bef3f78a7d13504ec..a96b5b14ce3a85f2c0cd3951f524563a121e05d9 100644 GIT binary patch literal 456 zcmV;(0XP1MP)RHR400001 zbW%=J06^y0W&i*IMoC0LR5*=eU_b)w5Q>KZ6*NF72L_ygA53z7*o|8W24ID=IDpt6 zSqj8?&cK0WS^)_L;{_ZXXaXz~!2bKd0`UVwgaG@84@mMGI5~g{64)3x`4b!spn?uS z%!W|IrvPOzQp=fS0wyeCAUADr2tX6%_`m`r11@0b_y7)Tuq+Vh@H03lK*b*bNtk*j zE_N0L?%lgV;=s@{a7bWC-~dKs0}~%F%$yDIlmh~saFzl}QtHH1FoFO}0z+B^K~*vg z43ZF*2Lo3C;{`(MK}q=#n6;UK-+|!^vK(7$NCkt*688i&_1<9C2MqNN%NXn!oG&nb zK~v8URnL{c^Z;2s^96=w3S0>s8_?AAfmy8#5dWS4mNE?t3_T1$|1d03ux)8ZQtr{; y#=uYxW^!Zq;4%ymmIeqNgk1v$Xe3hINCp5kh&v3-JVvPi00000000mP)t-sz`($# zr>BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*I+DSw~R5*?8RJ}^XKoI_RbN(cki>Ihqh%5&d;$I%&1d9V3!57FQ zoM5F*)KZWb`v0h zd=O81(E_L8!;p+jd5y-T6QC)k-PQ7}sKJL*AhS zPCS-l)VVU{EKy`R=*p1tLbadm3*q5Z_KaFzT(D&JwJ7%@?X1I-EAqx%7C*~E!Q=F9 zpd}t^t^JPtS+HvQdsfH_;2^&8ukeP^h(6myzfp3tVXmiG+(9QL=FhG&&AHQ3_6*B< z2vh@@6}8$wBjwfjv5%|jp4&t=zbQd*Revw zHYk2yho%k}^LEhHD}^tO?bU}w&AF!&7q5qqFZt4j6`xmCS;NRKUXDtM@Z(#8${3?x q$%}LY^?G_G1^KhlzKQuqyLbn2+-2`DYAMzL0000QuAe>Y$=9bn)JPnpPI zz$tn%A)%Tf)k)JXuZ_*%GNT657g1|wY44`Rjf~7kmUCoFH%w7*Y6)i)DRt&IFf%gn zcsxOyX>t_L29XX<3x|h?Hn2FeChu4k&A55Fw-)nhCV~HqZCqkTPR=gE>W#H`1@VT&@nJuh9E4lo@D-XYbDc+7Z jk}PbPN+vM+tyJV>&{?V__a})J6y^+`u6{1-oD!Mq2NM$$DJiL(J8NQrDi}+G{DK)Ap4~_T zaxQziIEH9UOio~6RBPkq$#@{Z%)g33o|)O3f!Tahfs};Gf>pr@2@wZh9^g&8%~`N` zb~n$4SM5x43oLoq8+JTkus$Im%hA7(kz?iuNiW8PI)>!0O&kjSh7X$MjBmVGkZV4` z=r-X9t3m(FPDe*ZCBC4O7Y>|kkn9Oz$@EZYEO~qP1=AfSgKL%sCm(NlZNmIru1!l} z_TvtwO;Zl#ww3a5rAtgvX!>oYu*AaNK!l5dli48uJ)cVK9%+eqO@lpAtVZWk7+qHT l{m8sD*KUV{l->jehUZUh7MU6s*aE%B;OXk;vd$@?2>_7lbI$+( diff --git a/docs/html/img94.png b/docs/html/img94.png index 5a5b952c187d3adb98e214b2d10878e513731935..c7fd477904ac87c074ae7fb8f32cd760b6c27ca1 100644 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^Qa~)n!py+Hxc!rIEs$dn;1lAydGqEKD^|>zGiSnt z2`w!x6%`dZIXMXl2_YdN9v&VxHZ}$Z1}Z8l5)u+TJUl>6uOd&+15%77L4Lsu4$p3+ z0XefhT^vIsrX~ZmB``i>W8+}B$jM`Hpiu7EumAu5v+pQqI3&41FI?etBcmrHGuw|1 z3mclnPn8{*q9$gbyW@jn3vbTnCT=!|bVFl}cngN9Eth0fW_*|Du@eaEV0bgxIXc!z zLP90TyV0gu*WvdY2@5_08>UYYW(GDX5y#HRAFyLQ@z^XOJ0arHfjd&_4HxbmG?*)L f+k@f%L`H_`(x#se*c_b*bS8tRtDnm{r-UW|jZtFg literal 481 zcmV<70UrK|P)BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*IUr9tkR5*?0Q@c*XFcdv@+U8L=3JW8$A~7+5#Evo|vG57~1a=q- zAAs@&v|`Q>AtqQX1S$hUu+qh!(2i`_uG5AzQlzR2;tV$@_a2|?YbSt3RFDBY)Pj~o z_{|wOK*mYT>z6j8Ul18BUSdcA-}EBu`c}Y#RyB15p(5|-5fsSj_iJugsKx@)Ffii@ zheAqQ=&I-}EqZyu#D?~{HiDX**=f}BD`_gt$kVh_T_7NJ9N9v4MPya}A9f2Xp6rws4Z8vDqr=O^=e;avClALJJsWBEwxXxKJdk{XcR<~IZ2owyr)EPLNFUpSvi}h7 zmOsUL#osadw%XF=r^=iGRHR400001 zbW%=J06^y0W&i*I8c9S!R5*=eV89Csz@!2L0|&ZH0|P&p_WF+B1O^619HufjAd4L! zWDFL-!ZHDw3v%NFIIm&D2SXtcV*?Pg0o|Lx&Bmbk;Qs9cbZ z4ICekg&Y__0fQn0(F7H$<`7`G@PQ9mh=+%rDPRIWSn~&v4>=fEx%q>b1h^R>-i8AX z1|}dWh$O-t!hjNZLlH1eWMGiNDJuz~w1Jo(w;6}P)3gV6cTrJ;1cCgF&8wD^cYm!!ia2Nc@#EFnIL00VA-1f#C#%y2#MZ zz~#!29)18U4FntxIGoHAz-z$3(g5Lz6}K4Yahhnwpw`fPi##bXr zSwsMcxse4f0Nn-?2;pPBV4wix!UR~k83GOnFmQkbHh|PA2rzMhoZkS`9>C5P0P?>A z!bCX+k^^;M0ha&+`vUAztdOYM0SvSY*i|spf(VWa7%I38SMFlqwpwY<|YA#x2=Er)~qPOaN0n3s`Ro@SI#+z`z>- rQW1>Zk$oUyBZR#bhesgEWjFx<%G5JnxhwJC00000NkvXXu0mjf@M(s& diff --git a/docs/html/img96.png b/docs/html/img96.png index ac788493fc6c2fbe0816c9e3818c65ea088cf852..108b51d17ab7c7d4ac8371b5053747f9f77a6214 100644 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CH!py+HIB&`YPasDBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*Hs!2paR2Y?GU;qMc1~?E{z`$St=P@@-fU?rk(h?A=7+C*-$jBajItw6J9ZxfEC|n yP-Wm#W{};Ti0qLKJSfgo5+KzL1V9=xNB{td`6&N0IJ=bq0000RHR400001 zbW%=J06^y0W&i*H=Sf6CR49>SV1NP-1_lKNeBeU@h&;f+z{9}NfmbC10|y_J!F~|L zD*!PAI9m9Zf*2PFXvPK_*%9mwKx4TX7!1H14Q3EIgQ0;NYBQJf1TxGg0Js&p;cOO= z{SS~N6@Yj`0+f^H!3v@{3wR-X2|kd+3it$oR7Xbx0|T3y0RzheCI%LWd;<%VQ9^xJ z(++Ul0Jz#_{CiTVQOFTm)uX=VTg2@p6iFo^jI@H22YfMl5+81hXS z801iNZe^%qkOZ@UIynviH6qKh9ANkq*rBjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*ICP_p=R5*=eU_b*6D7=4Q(g9r&81V3csqqj2a5rc**pfQP8xcETY-UN11?F%17PYT(4!AwFO{`cLP%Z!y^O6+uH;f_`n%M1ebGHGn`>yI0RuI#G!^s5t_P&DF6Uhbv$lJ SSM$RF0000Vjmv0~1gITI#K zXlZGwsHn)v$w^2^2nh-C@bIv)u`w_(P*G8lkdWZv;Q?xT6?u9dkYX$e@(X5gcy=QV z$Vv5daSY*@nGDpHFpoh+Ld>9n@%1Ne9)kxAN>d)jv|VF5$D>f1D5%cOEOtQb(gFPg z2PS-IxY*D*Q_*okV`KM0M{|bRK|TUkln`&^ zeSOu{)j>*md1uXzC6&2;+;9z26A|)lY?bEIWKsm;eAirP+hi5m^fE*i77sn8e znaK$ajZ7BZjWZh?#m^ZsB$ctTi9~K-@ZeMrVPraE#rm)~zv07e7KJZj97iW|ESoXy d9#a=H!}CXMv%7qF=K;-O@O1TaS?83{1OO>sH}U`g diff --git a/docs/html/img99.png b/docs/html/img99.png index e4114dd3bb2ab759c8d582696d624eb0114d90f9..a44fda45b72f8406c2da8fe3780d876f2399d372 100644 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^20$#w!py+H_`Y{T3P>QpC&YF0=FKZste7)r&V&gQ zT3T8vDk^evauN~}LPA13JUnb{YzzzxR8&+XBqVrvcz~K-MV_7qq!>$r{DK)Ap4~_T za;|#1IEH9UOio~65@V}lV|&NTV=#e1B=JGpM=1%38xl9TMMNa#878pjILI70aOL0u z)<+wSd>T03A6qCReSzT-JEOz$4(?*uX1X_aM1-CS#{o+oZa#CTDVjP72?hlo?q&^*jmhSkaZ4;8lrdOk3Qf7p zRc6NG(&+hdrNX3_%+2}}lAhmT_;O!y1ruMwoy|1~AJ{j3m8=kokUnro=!BKTG-DgV n=VHMQn-=#ba=oo_PG?|PCaxx1RoXrk=s^ZgS3j3^P6BjLjb~?PO-)TFCno>^01XWdw6wIEnwo%sfOK?pT3T8_KtMD!G#VNjY}~9}00001 zbW%=J06^y0W&i*H|4BqaR49>SU;qJb28IO;3 - next up previous - contents
- Next: Next:
Contents -   Contents

@@ -65,285 +65,310 @@ December 15th, 2011


-
  • Communication routines +
  • Computational routines -
    + HREF="node42.html">psb_geamaxs -- Generalized Infinity Norm
  • Data management routines - +
  • psb_spall -- Allocates a sparse matrix + HREF="node50.html">Communication routines + +
  • psb_geall -- Allocates a dense matrix + HREF="node55.html">Data management routines + -
    + HREF="node70.html">psb_gefree -- Frees a dense matrix
  • Parallel environment routines - +
  • psb_min -- Global minimum + HREF="node83.html">Parallel environment routines +
    -
  • Error handling +
  • Error handling
    -
  • Utilities +
  • Utilities
    -
  • Preconditioner routines +
  • Preconditioner routines
    -
  • Iterative Methods +
  • Iterative Methods
    -
  • Bibliography -
  • About this document ... +
  • Bibliography +
  • About this document ...

    diff --git a/docs/html/node1.html b/docs/html/node1.html index 6cc53fdf..501f2382 100644 --- a/docs/html/node1.html +++ b/docs/html/node1.html @@ -26,21 +26,21 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous
    - Next: Next: Introduction - Up: Up: userhtml - Previous: Previous: userhtml

    @@ -53,54 +53,54 @@ Contents

    diff --git a/docs/html/node10.html b/docs/html/node10.html index 883b07db..fe549154 100644 --- a/docs/html/node10.html +++ b/docs/html/node10.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Named Constants - +Methods + @@ -18,6 +18,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds + @@ -25,73 +26,34 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Sparse Matrix data structure - Up: Next: get_local_rows Get + Up: Descriptor data structure - Previous: Previous: Descriptor data structure -   Contents

    -

    - -
    -Named Constants +

    +Methods

    -
    -
    psb_none_
    -
    Generic no-op; -
    -
    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/node100.html b/docs/html/node100.html index 86954603..935aac54 100644 --- a/docs/html/node100.html +++ b/docs/html/node100.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Preconditioner routines - +Error handling + @@ -19,56 +19,130 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - up - previous - contents
    - Next: psb_precinit Initialize - Up: Next: psb_errpush Pushes + Up: userhtml - Previous: mm_mat_write Write -   Previous: psb_rcv Receive +   Contents

    -

    - -
    -Preconditioner routines +

    +Error handling

    -The base PSBLAS library contains the implementation of two simple -preconditioning techniques: +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. -

      -
    • Diagonal Scaling -
    • -
    • Block Jacobi with ILU(0) factorization -
    • -
    -The supporting data type and subroutine interfaces are defined in the -module psb_prec_mod. +

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

    + +

    + + + +
    Figure 9: +The layout of a generic psb_foo + routine with respect to PSBLAS-2.0 error handling policy.
    +
    + +
    + +\fbox{\TheSbox} +
    +
    + +

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

    + +

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



    @@ -76,18 +150,44 @@ module psb_prec_mod. Subsections -

    +
    + + +next + +up + +previous + +contents +
    + Next: psb_errpush Pushes + Up: userhtml + Previous: psb_rcv Receive +   Contents + diff --git a/docs/html/node101.html b/docs/html/node101.html index e571ced7..f5df1b42 100644 --- a/docs/html/node101.html +++ b/docs/html/node101.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_precinit -- Initialize a preconditioner - +psb_errpush -- Pushes an error code onto the error stack + @@ -26,38 +26,39 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: psb_precbld Builds - Up: Preconditioner routines - Previous: Preconditioner routines -   Next: psb_error Prints + Up: Error handling + Previous: Error handling +   Contents

    -

    -psb_precinit -- Initialize a preconditioner +

    +psb_errpush -- Pushes an error code onto the error + stack

    -call psb_precinit(prec, ptype, info)
    +call psb_errpush(err_c, r_name, i_err, a_err)
     

    @@ -68,71 +69,46 @@ call psb_precinit(prec, ptype, info)

    On Entry
    -
    ptype
    -
    the type of preconditioner. -Scope: global +
    err_c
    +
    the error code +
    +Scope: local
    Type: required
    Intent: in.
    -Specified as: a character string, see usage notes. -
    -
    On Exit
    -

    +Specified as: an integer.

    -
    prec
    -
    Scope: local +
    r_name
    +
    the soutine where the error has been caught. +
    +Scope: local
    Type: required
    -Intent: inout. +Intent: in.
    -Specified as: a preconditioner data structure precdatapsb_prec_type. -
    -
    info
    -
    Scope: global +Specified as: a string. +
    +
    i_err
    +
    addional info for error code
    -Type: required +Scope: local
    -Intent: out. +Type: optional
    -Error code: if no error, 0 is returned. -
    -
  • -Notes -Legal inputs to this subroutine are interpreted depending on the -$ptype$ string as follows3: -
    -
    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. -
    +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/node102.html b/docs/html/node102.html index 36aec719..aea3a015 100644 --- a/docs/html/node102.html +++ b/docs/html/node102.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_precbld -- Builds a preconditioner - +psb_error -- Prints the error stack content and aborts execution + @@ -26,107 +26,59 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: psb_precaply Preconditioner - Up: Preconditioner routines - Previous: psb_precinit Initialize -   Next: psb_set_errverbosity Sets + Up: Error handling + Previous: psb_errpush Pushes +   Contents

    -

    -psb_precbld -- Builds a preconditioner +

    +psb_error -- Prints the error stack content and aborts + execution

    -call psb_precbld(a, desc_a, prec, info)
    +call psb_error(icontxt)
     

    Type:
    -
    Synchronous. +
    Asynchronous.
    On Entry
    -
    a
    -
    the system sparse matrix. -Scope: local +
    icontxt
    +
    the communication context.
    -Type: required +Scope: global
    -Intent: in, target. +Type: optional
    -Specified as: a sparse matrix data structure spdatapsb_spmat_type. -
    -
    prec
    -
    the preconditioner. -
    -Scope: local -
    -Type: required -
    -Intent: inout. -
    -Specified as: an already initialized precondtioner data structure precdatapsb_prec_type -
    -
    desc_a
    -
    the problem communication descriptor. -Scope: local -
    -Type: required -
    -Intent: in, target. -
    -Specified as: a communication descriptor data structure descdatapsb_desc_type. -
    -
    - -

    -

    -
    On Return
    -
    -
    -
    prec
    -
    the preconditioner. -
    -Scope: local -
    -Type: required -
    -Intent: inout. -
    -Specified as: a precondtioner data structure precdatapsb_prec_type -
    -
    info
    -
    Error code. -
    -Scope: local -
    -Type: required -
    -Intent: out. +Intent: in.
    -An integer value; 0 means no error has been detected. +Specified as: an integer.
    diff --git a/docs/html/node103.html b/docs/html/node103.html index 645ffe26..1203e4ff 100644 --- a/docs/html/node103.html +++ b/docs/html/node103.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_precaply -- Preconditioner application routine - +psb_set_errverbosity -- Sets the verbosity of error messages. + @@ -26,125 +26,59 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: psb_precdescr Prints - Up: Preconditioner routines - Previous: psb_precbld Builds -   Next: psb_set_erraction Set + Up: Error handling + Previous: psb_error Prints +   Contents

    -

    -psb_precaply -- Preconditioner application routine +

    +psb_set_errverbosity -- Sets the verbosity of error + messages.

    -call psb_precaply(prec,x,y,desc_a,info,trans,work)
    -call psb_precaply(prec,x,desc_a,info,trans)
    +call psb_set_errverbosity(v)
     

    Type:
    -
    Synchronous. +
    Asynchronous.
    On Entry
    -
    prec
    -
    the preconditioner. -Scope: local +
    v
    +
    the verbosity level
    -Type: required -
    -Intent: in. -
    -Specified as: a preconditioner data structure precdatapsb_prec_type. -
    -
    x
    -
    the source vector. -Scope: local -
    -Type: required -
    -Intent: inout. -
    -Specified as: a double precision array. -
    -
    desc_a
    -
    the problem communication descriptor. -Scope: local +Scope: global
    Type: required
    Intent: in.
    -Specified as: a communication data structure descdatapsb_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 double precision array. -
    -
    info
    -
    Error code. -
    -Scope: local -
    -Type: required -
    -Intent: out. -
    -An integer value; 0 means no error has been detected. +Specified as: an integer.
    diff --git a/docs/html/node104.html b/docs/html/node104.html index 021b52e1..80493d57 100644 --- a/docs/html/node104.html +++ b/docs/html/node104.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_precdescr -- Prints a description of current preconditioner - +psb_set_erraction -- Set the type of action to be taken upon error condition. + @@ -25,40 +25,39 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Iterative Methods - Up: Preconditioner routines - Previous: psb_precaply Preconditioner -   Next: Utilities + Up: Error handling + Previous: psb_set_errverbosity Sets +   Contents

    -

    -psb_precdescr -- Prints a description of current - preconditioner +

    +psb_set_erraction -- Set the type of action to be + taken upon error condition.

    -call psb_precdescr(prec)
    -call psb_precdescr(prec, iout)
    +call psb_set_erraction(err_act)
     

    @@ -69,28 +68,25 @@ call psb_precdescr(prec, iout)

    On Entry
    -
    prec
    -
    the preconditioner. -Scope: local +
    err_act
    +
    the type of action.
    -Type: required -
    -Intent: in. -
    -Specified as: a preconditioner data structure precdatapsb_prec_type. -
    -
    iout
    -
    output unit. -Scope: local +Scope: global
    -Type: optiona +Type: required
    Intent: in.
    -Specified as: an integer number. +Specified as: an integer. Possible values: psb_act_ret, +psb_act_abort.
    +

    +

    +call psb_errcomm(icontxt, err)
    +
    +



    diff --git a/docs/html/node105.html b/docs/html/node105.html index 3ba7a91c..8d385f3b 100644 --- a/docs/html/node105.html +++ b/docs/html/node105.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Iterative Methods - +Utilities + @@ -18,7 +18,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + @@ -26,41 +26,41 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: psb_krylov Krylov - Up: Next: hb_read Read + Up: userhtml - Previous: psb_precdescr Prints -   Previous: psb_set_erraction Set +   Contents

    -

    - +

    +
    -Iterative Methods +Utilities

    -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. +We have some utitlities available for input and output of +sparsematrices; the interfaces to these routines are available in the +module psb_util_mod.



    @@ -68,9 +68,21 @@ the module psb_krylov_mod. Subsections

    diff --git a/docs/html/node106.html b/docs/html/node106.html index 12954c0f..0a0cda8c 100644 --- a/docs/html/node106.html +++ b/docs/html/node106.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_krylov -- Krylov Methods Driver Routine - +hb_read -- Read a sparse matrix from a file in the Harwell-Boeing format + @@ -18,6 +18,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds + @@ -25,363 +26,129 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Bibliography - Up: Iterative Methods - Previous: Iterative Methods -   Next: hb_write Write + Up: Utilities + Previous: Utilities +   Contents

    -

    -
    -psb_krylov -- Krylov Methods Driver - Routine +

    +hb_read -- Read a sparse matrix from a file in the + Harwell-Boeing format

    -

    -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 is the normwise backward error, in the infinity -norm, i.e. the iteration is stopped when -

    -
    - - -\begin{displaymath}err = \frac{\Vert r_i\Vert}{(\Vert A\Vert\Vert x_i\Vert+\Vert b\Vert)} < eps \end{displaymath} -
    -
    -

    -or the 2-norm residual reduction -

    -
    - - -\begin{displaymath}err = \frac{\Vert r_i\Vert}{\Vert b\Vert _2} < eps \end{displaymath} -
    -
    -

    -according to the value passed through the istop argument (see -later). In the above formulae, $x_i$ is the tentative solution and -$r_i=b-Ax_i$ 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)
    +call hb_read(a, iret, iunit, filename, b, mtitle)
     

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

    -

    -
    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 spdatapsb_spmat_type. -
    -
    prec
    -
    The data structure containing the preconditioner. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type precdatapsb_prec_type. -
    -
    b
    -
    The RHS vector. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a rank one array. -
    -
    x
    -
    The initial guess. -
    -Scope: local -
    -Type: required -
    -Intent: inout. -
    -Specified as: a rank one array. -
    -
    eps
    -
    The stopping tolerance. -
    -Scope: global -
    -Type: required -
    -Intent: in. -
    -Specified as: a real number. -
    -
    desc_a
    -
    contains data structures for communications. -
    -Scope: local +
    filename
    +
    The name of the file to be read.
    -Type: required +Type:optional.
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. +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: -.
    -
    itmax
    -
    The maximum number of iterations to perform. -
    -Scope: global -
    -Type: optional +
    iunit
    +
    The Fortran file unit number.
    -Intent: in. +Type:optional.
    -Default: $itmax = 1000$. -
    -Specified as: an integer variable $itmax \ge 1$. +Specified as: an integer value. Only meaningful if filename is not -.
    -
    itrace
    -
    If $>0$ print out an informational message about - convergence every $itrace$ iterations. -
    -Scope: global -
    -Type: optional -
    -Intent: in. -
    -
    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. Default: 2. -
    +
    On Return
    -
    x
    -
    The computed solution. -
    -Scope: local -
    -Type: required -
    -Intent: inout. -
    -Specified as: a rank one array. -
    -
    iter
    -
    The number of iterations performed. -
    -Scope: global -
    -Type: optional +
    a
    +
    the sparse matrix read from file.
    -Intent: out. +Type:required.
    -Returned as: an integer variable. +Specified as: a structured data of type spdatapsb_spmat_type.
    -
    err
    -
    The convergence estimate on exit. -
    -Scope: global -
    -Type: optional +
    b
    +
    Rigth hand side(s).
    -Intent: out. +Type: Optional
    -Returned as: a real number. +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.
    -
    cond
    -
    An estimate of the condition number of matrix $A$; only - available with the $CG$ method. -
    -Scope: global -
    -Type: optional +
    mtitle
    +
    Matrix title.
    -Intent: out. +Type: Optional
    -Returned as: a real number. +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.
    -
    info
    +
    iret
    Error code.
    -Scope: local -
    Type: required
    -Intent: out. -
    An integer value; 0 means no error has been detected.
    -

    - -

    - -

    -


    - next - up - previous - contents
    - Next: Bibliography - Up: Iterative Methods - Previous: Iterative Methods -   Next: hb_write Write + Up: Utilities + Previous: Utilities +   Contents diff --git a/docs/html/node107.html b/docs/html/node107.html index d9949883..15cb9b1d 100644 --- a/docs/html/node107.html +++ b/docs/html/node107.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Bibliography - +hb_write -- Write a sparse matrix to a file in the Harwell-Boeing format + @@ -19,157 +19,147 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + + - next - + up - previous - contents
    - Next: About this document ... - Up: userhtml - Previous: psb_krylov Krylov -   Next: mm_mat_read Read + Up: Utilities + Previous: hb_read Read +   Contents -

    +
    +
    - -

    -Bibliography -

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

    +hb_write -- Write a sparse matrix to a file + in the Harwell-Boeing format +

    -

    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. +
    +call hb_write(a, iret, iunit, filename, key, rhs, mtitle)
    +

    -

    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, +
    +
    Type:
    +
    Asynchronous. +
    +
    On Entry
    +
    +
    +
    a
    +
    the sparse matrix to be written.
    -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, +Type:required.
    -ACM Transactions on Mathematical Software, to appear. -

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

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

    -

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

    16 -
    -Metcalf, M., Reid, J. and Cohen, M. -Fortran 95/2003 explained. -Oxford University Press, 2004. -

    17 -
    -Rouson, D.W.I., Xia, J., Xu, X.: Scientific Software Design: The - Object-Oriented Way. Cambridge University Press (2011) +Specified as: a structured data of type spdatapsb_spmat_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. +
    +

    -

    18 +
    +
    On Return
    -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. +
    +
    iret
    +
    Error code. +
    +Type: required +
    +An integer value; 0 means no error has been detected. +

    -


    +
    + + +next + +up + +previous + +contents +
    + Next: mm_mat_read Read + Up: Utilities + Previous: hb_read Read +   Contents + diff --git a/docs/html/node108.html b/docs/html/node108.html index 1789a129..55238a8b 100644 --- a/docs/html/node108.html +++ b/docs/html/node108.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -About this document ... - +mm_mat_read -- Read a sparse matrix from a file in the MatrixMarket format + @@ -18,52 +18,97 @@ original version by: Nikos Drakos, CBLU, University of Leeds + - + + -next - + +next + up - previous - contents
    - Up: userhtml - Previous: Bibliography -   Next: mm_vet_read Read + Up: Utilities + Previous: hb_write Write +   Contents

    -

    -About this document ... -

    -

    -This document was generated using the -LaTeX2HTML translator Version 2008 (1.71) +

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

    + +

    +

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

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

    +
    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.
    -Copyright © 1997, 1998, 1999, -Ross Moore, -Mathematics Department, Macquarie University, Sydney. +Specified as: an integer value. Only meaningful if filename is not -. +
    +
    +

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

    +
    On Return
    +
    +
    +
    a
    +
    the sparse matrix read from file. +
    +Type:required. +
    +Specified as: a structured data of type spdatapsb_spmat_type. +
    +
    iret
    +
    Error code. +
    +Type: required +
    +An integer value; 0 means no error has been detected. +
    +
    +

    -The translation was initiated by Salvatore Filippone on 2011-12-16


    diff --git a/docs/html/node109.html b/docs/html/node109.html index 7c873f92..477bd497 100644 --- a/docs/html/node109.html +++ b/docs/html/node109.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -About this document ... - +mm_vet_read -- Read a dense vector from a file in the MatrixMarket format + @@ -18,52 +18,98 @@ original version by: Nikos Drakos, CBLU, University of Leeds + - + + -next - + +next + up - previous - contents
    - Up: userhtml - Previous: Bibliography -   Next: mm_mat_write Write + Up: Utilities + Previous: mm_mat_read Read +   Contents

    -

    -About this document ... -

    -

    -This document was generated using the -LaTeX2HTML translator Version 2008 (1.71) +

    +mm_vet_read -- Read a dense vector from a + file in the MatrixMarket format +

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

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

    +
    Type:
    +
    Asynchronous. +
    +
    On Entry
    +
    +
    +
    filename
    +
    The name of the file to be read. +
    +Type:optional.
    -Copyright © 1997, 1998, 1999, -Ross Moore, -Mathematics Department, Macquarie University, Sydney. +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 -. +
    +
    +

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

    +
    On Return
    +
    +
    +
    b
    +
    Rigth hand side(s). +
    +Type: required +
    +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. +
    +
    iret
    +
    Error code. +
    +Type: required +
    +An integer value; 0 means no error has been detected. +
    +
    +

    -The translation was initiated by Salvatore Filippone on 2011-12-15


    diff --git a/docs/html/node11.html b/docs/html/node11.html index 555c4e71..bc95bcd6 100644 --- a/docs/html/node11.html +++ b/docs/html/node11.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Sparse Matrix data structure - +get_local_rows -- Get number of local rows + @@ -18,242 +18,84 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
    - Next: Named Constants - Up: Data Structures - Previous: Named Constants -   Next: get_local_cols Get + Up: Descriptor data structure + Previous: Methods +   Contents

    -

    - -
    -Sparse Matrix data structure -

    -The spdatapsb_spmat_type data structure -contains all information about the local portion of the sparse matrix and -its storage mode. Most of these fields are set by the tools -routines when inserting a new sparse matrix; the user needs only -choose, if he/she so whishes, a specific matrix storage mode. +

    +get_local_rows -- Get number of local rows +

    + +

    +

    +nr = desc%get_local_rows()
    +

    -The

    -
    aspk
    -
    Contains values of the local distributed sparse -matrix. -
    -Specified as: an allocatable array of rank one of type corresponding -to matrix entries type. -
    -
    ia1
    -
    Holds integer information on distributed sparse -matrix. Actual information will depend on data format used. -
    -Specified as: an allocatable integer array of rank one. -
    -
    ia2
    -
    Holds integer information on distributed sparse -matrix. Actual information will depend on data format used. -
    -Specified as: an allocatable integer array of rank one. +
    Type:
    +
    Asynchronous.
    -
    infoa
    -
    On entry can hold auxiliary information on distributed sparse -matrix. Actual information will depend on data format used. -
    -Specified as: an integer array of length psb_ifasize_. -
    -
    fida
    -
    Defines the format of the distributed sparse matrix. -
    -Specified as: a string of length 5 +
    On Entry
    +
    -
    descra
    -
    Describe the characteristic of the distributed sparse matrix. +
    desc
    +
    the communication descriptor.
    -Specified as: array of character of length 9. -
    -
    pl
    -
    Specifies the local row permutation of distributed sparse -matrix. If pl(1) is equal to 0, then there isn't row permutation. -
    -Specified as: an allocatable integer array of dimension equal to number of local row (matrix_data[psb_n_row_]) -
    -
    pr
    -
    Specifies the local column permutation of distributed sparse -matrix. If PR(1) is equal to 0, then there isn't columnm permutation. -
    -Specified as: an allocatable integer array of dimension equal to number of -local row (matrix_data[psb_n_col_]) -
    -
    m
    -
    Number of rows; if row indices are stored explicitly, -as in Coordinate Storage, should be greater than or equal to the -maximum row index actually present in the sparse matrix. -Specified as: integer variable. -
    -
    k
    -
    Number of columns; if column indices are stored explicitly, -as in Coordinate Storage or Compressed Sparse Rows, should be greater -than or equal to the maximum column index actually present in the sparse matrix. -Specified as: integer variable. -
    +Scope: local. +
    -The Fortran 95 interface for distributed sparse matrices containing -double precision real entries is defined as shown in -figure 4. The definitions for single precision and -complex data are identical except for the real declaration and -for the kind type parameter. - -
    - - - -
    Figure 4: - The PSBLAS defined data type that - contains a sparse matrix.
    -
    - -
    - -\fbox{\TheSbox} -
    -

    -The following two cases are among the most commonly used:

    -
    fida=``CSR''
    -
    Compressed storage by rows. In this case the -following should hold: - -
      -
    1. ia2(i) contains the index of the first element of row -i; the last element of the sparse matrix is thus stored at -index $ia2(m+1)-1$. It should contain m+1 entries in -nondecreasing order (strictly increasing, if there are no empty rows). -
    2. -
    3. ia1(j) contains the column index and aspk(j) -contains the corresponding coefficient value, for all -$ia2(1) \le j
-\le ia2(m+1)-1$. -
    4. -
    +
    On Return
    +
    -
    fida=``COO''
    -
    Coordinate storage. In this case the following -should hold: - -
      -
    1. infoa(1) contains the number of nonzero elements in the -matrix; -
    2. -
    3. For all $1 \le j \le infoa(1)$, the coefficient, row index and -column index are stored into apsk(j), ia1(j) and -ia2(j) respectively. -
    4. -
    -
    -
    -A 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. + WIDTH="70" HEIGHT="32" ALIGN="MIDDLE" BORDER="0" + SRC="img10.png" + ALT="$\vert{\cal I}_i\vert + \vert{\cal B}_i\vert$">. The returned value is + specific to the calling process.
    -

    - -Subsections - - -
    - - -next - -up - -previous - -contents -
    - Next: Named Constants - Up: Data Structures - Previous: Named Constants -   Contents - +

    +


    diff --git a/docs/html/node110.html b/docs/html/node110.html index ae8679c7..36d5648a 100644 --- a/docs/html/node110.html +++ b/docs/html/node110.html @@ -1,96 +1,114 @@ - -psb_precdescr -- Prints a description of current preconditioner - +mm_mat_write -- Write a sparse matrix to a file in the MatrixMarket format + - + - - + - -next - -up - + +up + -previous - + -contents +contents
    - Next: Iterative Methods - Up: userhtml - Previous: psb_precaply Preconditioner -   Next: Preconditioner routines + Up: Utilities + Previous: mm_vet_read Read +   Contents

    -

    -psb_precdescr -- Prints a description of current - preconditioner -

    - -

    -ifstarssyntaxsyntaxcall psb_precdescrprec -ifstarssyntaxsyntax*call psb_precdescrprec, iout +

    +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
    +
    On Entry
    -
    prec
    -
    the preconditioner. -Scope: local +
    a
    +
    the sparse matrix to be written. +
    +Type:required.
    -Type: required +Specified as: a structured data of type spdatapsb_spmat_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.
    -Intent: in. +Type:optional.
    -Specified as: a preconditioner data structure precdatapsb_prec_type. +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: -.
    -
    iout
    -
    output unit. -Scope: local +
    iunit
    +
    The Fortran file unit number.
    -Type: optiona +Type:optional. +
    +Specified as: an integer value. Only meaningful if filename is not -. +
    +
    + +

    +

    +
    On Return
    +
    +
    +
    iret
    +
    Error code.
    -Intent: in. +Type: required
    -Specified as: an integer number. +An integer value; 0 means no error has been detected.
    diff --git a/docs/html/node111.html b/docs/html/node111.html index 95cd3349..2abd518e 100644 --- a/docs/html/node111.html +++ b/docs/html/node111.html @@ -1,73 +1,93 @@ - -Iterative Methods - +Preconditioner routines + - + - - + + - -next - + -up - + -previous - + -contents +contents
    - Next: psb_krylov Krylov - Up: Next: psb_precinit Initialize + Up: userhtml - Previous: psb_precdescr Prints -   Previous: mm_mat_write Write +   Contents

    -

    - +

    +
    -Iterative Methods +Preconditioner routines

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



    + +Subsections + + + +

    diff --git a/docs/html/node112.html b/docs/html/node112.html index 68e007fe..7b925e19 100644 --- a/docs/html/node112.html +++ b/docs/html/node112.html @@ -1,393 +1,142 @@ - -psb_krylov -- Krylov Methods Driver Routine - +psb_precinit -- Initialize a preconditioner + - + - + - -next - -up - + -previous - + +previous + -contents -
    - Next: Bibliography - Up: userhtml - Previous: Iterative Methods -   +
    + Next: psb_precbld Builds + Up: Preconditioner routines + Previous: Preconditioner routines +   Contents

    -

    -
    -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 is the normwise backward error, in the infinity -norm, i.e. the iteration is stopped when -

    -
    - - -\begin{displaymath}err = \frac{\Vert r_i\Vert}{(\Vert A\Vert\Vert x_i\Vert+\Vert b\Vert)} < eps \end{displaymath} -
    -
    -

    -or the 2-norm residual reduction -

    -
    - - -\begin{displaymath}err = \frac{\Vert r_i\Vert}{\Vert b\Vert _2} < eps \end{displaymath} -
    -
    -

    -according to the value passed through the istop argument (see -later). In the above formulae, $x_i$ is the tentative solution and -$r_i=b-Ax_i$ the corresponding residual at the $i$-th iteration. +

    +psb_precinit -- Initialize a preconditioner +

    -ifstarssyntaxsyntaxcall psb_krylovmethod,a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,irst,istop,cond +

    +call psb_precinit(prec, ptype, info)
    +

    Type:
    -
    Synchronous. +
    Asynchronous.
    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; - -

    -

    -
    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 spdatapsb_spmat_type. -
    -
    prec
    -
    The data structure containing the preconditioner. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type precdatapsb_prec_type. -
    -
    b
    -
    The RHS vector. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a rank one array. -
    -
    x
    -
    The initial guess. -
    -Scope: local -
    -Type: required -
    -Intent: inout. -
    -Specified as: a rank one array. -
    -
    eps
    -
    The stopping tolerance. -
    +
    ptype
    +
    the type of preconditioner. Scope: global
    Type: required
    Intent: in.
    -Specified as: a real number. +Specified as: a character string, see usage notes.
    -
    desc_a
    -
    contains data structures for communications. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. +
    On Exit
    +

    -
    itmax
    -
    The maximum number of iterations to perform. -
    -Scope: global -
    -Type: optional -
    -Intent: in. -
    -Default: $itmax = 1000$. -
    -Specified as: an integer variable $itmax \ge 1$. -
    -
    itrace
    -
    If $>0$ print out an informational message about - convergence every $itrace$ iterations. -
    -Scope: global -
    -Type: optional -
    -Intent: in. -
    -
    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. Default: 2. -
    -
    On Return
    -
    -
    -
    x
    -
    The computed solution. -
    -Scope: local +
    prec
    +
    Scope: local
    Type: required
    Intent: inout.
    -Specified as: a rank one array. -
    -
    iter
    -
    The number of iterations performed. -
    -Scope: global -
    -Type: optional -
    -Intent: out. -
    -Returned as: an integer variable. +Specified as: a preconditioner data structure precdatapsb_prec_type.
    -
    err
    -
    The convergence estimate on exit. -
    -Scope: global +
    info
    +
    Scope: global
    -Type: optional +Type: required
    Intent: out.
    -Returned as: a real number. +Error code: if no error, 0 is returned.
    -
    cond
    -
    An estimate of the condition number of matrix +Notes +Legal inputs to this subroutine are interpreted depending on the +$ptype$ string as follows3: +
    +
    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$; only - available with the $CG$ method. -
    -Scope: global -
    -Type: optional -
    -Intent: out. -
    -Returned as: a real number. + ALT="$A$">;
    -
    info
    -
    Error code. -
    -Scope: local -
    -Type: required -
    -Intent: out. -
    -An integer value; 0 means no error has been detected. +
    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.

    - -

    - -

    -


    - - -next - -up - -previous - -contents -
    - Next: Bibliography - Up: userhtml - Previous: Iterative Methods -   Contents - +

    diff --git a/docs/html/node113.html b/docs/html/node113.html index 290203c3..41d372b2 100644 --- a/docs/html/node113.html +++ b/docs/html/node113.html @@ -1,158 +1,133 @@ - -Bibliography - +psb_precbld -- Builds a preconditioner + - + - + - -next - -up - + +up + -previous - + -contents -
    - Next: About this document ... - Up: userhtml - Previous: psb_krylov Krylov -   +
    + Next: psb_precaply Preconditioner + Up: Preconditioner routines + Previous: psb_precinit Initialize +   Contents -

    +
    +
    - -

    -Bibliography -

    + +

    +psb_precbld -- Builds a preconditioner +

    +

    -

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

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

    3 -
    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. +
    +call psb_precbld(a, desc_a, prec, info)
    +

    -

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

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

    6 -
    -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). -

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

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

    9 -
    -S. Filippone and M. Colajanni, -PSBLAS: A Library for Parallel Linear Algebra -Computation on Sparse Matrices, +
    +
    a
    +
    the system sparse matrix. +Scope: local
    -ACM Transactions on Mathematical Software, 26(4), pp. 527-550, 2000. -

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

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

    12 -
    -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. +Type: required +
    +Intent: in, target. +
    +Specified as: a sparse matrix data structure spdatapsb_spmat_type. +
    +
    prec
    +
    the preconditioner. +
    +Scope: local +
    +Type: required +
    +Intent: inout. +
    +Specified as: an already initialized precondtioner data structure precdatapsb_prec_type +
    +
    desc_a
    +
    the problem communication descriptor. +Scope: local +
    +Type: required +
    +Intent: in, target. +
    +Specified as: a communication descriptor data structure descdatapsb_desc_type. +
    +

    -

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

    14 -
    -Metcalf, M., Reid, J. and Cohen, M. -Fortran 95/2003 explained. -Oxford University Press, 2004. -

    15 +
    +
    On Return
    -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. +
    +
    prec
    +
    the preconditioner. +
    +Scope: local +
    +Type: required +
    +Intent: inout. +
    +Specified as: a precondtioner data structure precdatapsb_prec_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/node114.html b/docs/html/node114.html index 8ddb1a93..eb8eb791 100644 --- a/docs/html/node114.html +++ b/docs/html/node114.html @@ -1,73 +1,154 @@ - -About this document ... - +psb_precaply -- Preconditioner application routine + - + + - + + -next - -up - +next + +up + -previous - + -contents -
    - Up: userhtml - Previous: Bibliography -   +
    + Next: psb_precdescr Prints + Up: Preconditioner routines + Previous: psb_precbld Builds +   Contents

    -

    -About this document ... -

    -

    -This document was generated using the -LaTeX2HTML translator Version 2002-2-1 (1.71) +

    +psb_precaply -- Preconditioner application routine +

    + +

    +

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

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

    +
    Type:
    +
    Synchronous. +
    +
    On Entry
    +
    +
    +
    prec
    +
    the preconditioner. +Scope: local +
    +Type: required +
    +Intent: in. +
    +Specified as: a preconditioner data structure precdatapsb_prec_type. +
    +
    x
    +
    the source vector. +Scope: local +
    +Type: required +
    +Intent: inout. +
    +Specified as: a double precision array. +
    +
    desc_a
    +
    the problem communication descriptor. +Scope: local +
    +Type: required +
    +Intent: in. +
    +Specified as: a communication data structure descdatapsb_desc_type. +
    +
    trans
    +
    Scope: +
    +Type: optional
    -Copyright © 1997, 1998, 1999, -Ross Moore, -Mathematics Department, Macquarie University, Sydney. +Intent: in. +
    +Specified as: a character. +
    +
    work
    +
    an optional work space +Scope: local +
    +Type: optional +
    +Intent: inout. +
    +Specified as: a double precision array. +
    +
    +

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

    +
    On Return
    +
    +
    +
    y
    +
    the destination vector. +Scope: local +
    +Type: required +
    +Intent: inout. +
    +Specified as: a double precision array. +
    +
    info
    +
    Error code. +
    +Scope: local +
    +Type: required +
    +Intent: out. +
    +An integer value; 0 means no error has been detected. +
    +
    +

    -The translation was initiated by Salvatore Filippone on 2008-07-24


    diff --git a/docs/html/node115.html b/docs/html/node115.html index 012ff547..a81962e6 100644 --- a/docs/html/node115.html +++ b/docs/html/node115.html @@ -1,6 +1,6 @@ - - -next - -up - + +up + -previous - + -contents +contents
    - Next: Next:
    Iterative Methods - Up: Preconditioner routines - Previous: Up:
    Preconditioner routines + Previous: psb_precaply Preconditioner -   Contents

    -

    +

    psb_precdescr -- Prints a description of current preconditioner

    -ifstarssyntaxsyntaxcall psb_precdescrprec -ifstarssyntaxsyntax*call psb_precdescrprec, iout +

    +call psb_precdescr(prec)
    +call psb_precdescr(prec, iout)
    +

    diff --git a/docs/html/node116.html b/docs/html/node116.html index 0216e1fa..91d965f5 100644 --- a/docs/html/node116.html +++ b/docs/html/node116.html @@ -1,6 +1,6 @@ - - -next - + -up - + -previous - + -contents +contents
    - Next: Next: psb_krylov Krylov - Up: Up: userhtml - Previous: Previous: psb_precdescr Prints -   Contents

    -

    +


    Iterative Methods @@ -72,7 +68,7 @@ the module psb_krylov_mod. Subsections diff --git a/docs/html/node117.html b/docs/html/node117.html index d647571f..c3c86d3a 100644 --- a/docs/html/node117.html +++ b/docs/html/node117.html @@ -1,6 +1,6 @@ - - -next - + -up - + -previous - + -contents +contents
    - Next: Next: Bibliography - Up: Up: Iterative Methods - Previous: Previous: Iterative Methods -   Contents

    -

    +


    psb_krylov -- Krylov Methods Driver Routine @@ -77,7 +73,7 @@ err = \frac{\|r_i\|}{(\|A\|\|x_i\|+\|b\|)} < eps \begin{displaymath}err = \frac{\Vert r_i\Vert}{(\Vert A\Vert\Vert x_i\Vert+\Vert b\Vert)} < eps \end{displaymath}
    @@ -93,26 +89,29 @@ err = \frac{\|r_i\|}{\|b\|_2} < eps \begin{displaymath}err = \frac{\Vert r_i\Vert}{\Vert b\Vert _2} < eps \end{displaymath}

    according to the value passed through the istop argument (see later). In the above formulae, $x_i$ is the tentative solution and $r_i=b-Ax_i$ the corresponding residual at the $i$-th iteration.

    -ifstarssyntaxsyntaxcall psb_krylovmethod,a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,irst,istop,cond +

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

    @@ -233,23 +232,23 @@ Type: optional Intent: in.
    Default: $itmax = 1000$.
    Specified as: an integer variable $itmax \ge 1$.

    itrace
    If $>0$ print out an informational message about convergence every $itrace$ iterations.
    Scope: global @@ -268,8 +267,8 @@ Type: optional. Intent: in.
    Values: $irst>0$. This is employed for the BiCGSTABL or RGMRES methods, otherwise it is ignored. @@ -330,7 +329,7 @@ Returned as: a real number. ALT="$A$">; only available with the $CG$ method.
    Scope: global @@ -358,33 +357,31 @@ An integer value; 0 means no error has been detected.

    +

    +


    - -next - + -up - + -previous - + -contents +contents
    - Next: Next: Bibliography - Up: Up: Iterative Methods - Previous: Previous: Iterative Methods -   Contents diff --git a/docs/html/node118.html b/docs/html/node118.html index bddfca28..21313b13 100644 --- a/docs/html/node118.html +++ b/docs/html/node118.html @@ -1,6 +1,6 @@ - - -next - + -up - + -previous - + -contents +contents
    - Next: Next: About this document ... - Up: Up: userhtml - Previous: Previous: psb_krylov Krylov -   Contents

    -

    +

    Bibliography -

    +

    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 +

    -

    1 +

    2
    G. Bella, S. Filippone, A. De Maio and M. Testa, A Simulation Model for Forest Fires, @@ -66,12 +67,12 @@ 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. -

    2 +

    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 -

    3 +

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

    -

    4 +

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

    5 +

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

    6 +

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

    7 +

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

    8 +

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

    9 +

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

    10 +

    11 +
    +S. Filippone and A. Buttari, +Object-Oriented Techniques for Sparse Matrix Computations in Fortran 2003, +
    +ACM Transactions on Mathematical Software, to appear. +

    12
    S. Filippone, P. D'Ambra, M. Colajanni, Using a Parallel Library of Sparse Linear Algebra in a Fluid Dynamics @@ -122,7 +129,15 @@ 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. -

    11 +

    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 @@ -130,25 +145,31 @@ Karypis, G. and Kumar, V., Minneapolis, MN 55455: University of Minnesota, Department of Computer Science, 1995. Internet Address: http://www.cs.umn.edu/~karypis. -

    12 +

    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.

    -

    13 +

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

    14 +

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

    15 +

    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, diff --git a/docs/html/node119.html b/docs/html/node119.html index 4e3b8779..e533d93e 100644 --- a/docs/html/node119.html +++ b/docs/html/node119.html @@ -1,6 +1,6 @@ - -next - + -up - + -previous - + -contents +contents
    - Up: Up: userhtml - Previous: Previous: Bibliography -   Contents

    -

    +

    About this document ...

    This document was generated using the -LaTeX2HTML translator Version 2002-2-1 (1.71) +LaTeX2HTML translator Version 2008 (1.71)

    Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, @@ -65,9 +61,9 @@ Copyright © 1997, 1998, 1999, Mathematics Department, Macquarie University, Sydney.

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

    -The translation was initiated by Salvatore Filippone on 2008-07-24 +The translation was initiated by Salvatore Filippone on 2012-01-24


    diff --git a/docs/html/node12.html b/docs/html/node12.html index 8825b9cc..2c8f5469 100644 --- a/docs/html/node12.html +++ b/docs/html/node12.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Named Constants - +get_local_cols -- Get number of local cols + @@ -18,63 +18,80 @@ original version by: Nikos Drakos, CBLU, University of Leeds + - + - next - + up - previous - contents
    - Next: Dense Vector Data Structure - Up: Sparse Matrix data structure - Previous: Sparse Matrix data structure -   Next: get_global_rows Get + Up: Descriptor data structure + Previous: get_local_rows Get +   Contents

    -

    - -
    -Named Constants +

    +get_local_cols -- Get number of local cols

    + +

    +

    +nc = desc%get_local_cols()
    +
    + +

    -
    psb_dupl_ovwrt_
    -
    Duplicate coefficients should be overwritten - (i.e. ignore duplications) +
    On Entry
    +
    -
    psb_dupl_add_
    -
    Duplicate coefficients should be added; +
    Type:
    +
    Asynchronous.
    -
    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; +
    desc
    +
    the communication descriptor. +
    +Scope: local. +
    +
    + +

    +

    +
    On Return
    +
    -
    psb_upd_perm_
    -
    Update strategy based on additional - permutation data (see tools routine description). +
    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 +$\vert{\cal I}_i\vert + \vert{\cal B}_i\vert +\vert{\cal H}_i\vert$. The + returned value is specific to the calling process.
    diff --git a/docs/html/node13.html b/docs/html/node13.html index b854d547..92b4f110 100644 --- a/docs/html/node13.html +++ b/docs/html/node13.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Dense Vector Data Structure - +get_global_rows -- Get number of global rows + @@ -19,49 +19,73 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + + - next - + up - previous - contents
    - Next: Preconditioner data structure - Up: Data Structures - Previous: Named Constants -   Next: get_global_cols Get + Up: Descriptor data structure + Previous: get_local_cols Get +   Contents

    -

    - -
    -Dense Vector Data Structure -

    -The vdatapsb_vect_type data structure -contains all information about local portion of the sparse matrix and -its storage mode. Most of these fields are set by the tools -routines when inserting a new sparse matrix; the user needs only -choose, if he/she so whishes, a specific matrix storage mode. +

    +get_global_rows -- Get number of global rows +

    + +

    +

    +nr = desc%get_global_rows()
    +
    + +

    +

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

    +

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



    diff --git a/docs/html/node14.html b/docs/html/node14.html index f01a0035..f7851f0b 100644 --- a/docs/html/node14.html +++ b/docs/html/node14.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Preconditioner data structure - +get_global_cols -- Get number of global cols + @@ -18,79 +18,72 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + - next - + up - previous - contents
    - Next: Data structure query routines - Up: Data Structures - Previous: Dense Vector Data Structure -   Next: get_context Get communication context + Up: Descriptor data structure + Previous: get_global_rows Get +   Contents

    -

    - -
    -Preconditioner data structure -

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

    +get_global_cols -- Get number of global cols +

    -A preconditioner is held in the precdata psb_prec_type data structure reported in -figure 5. The psb_prec_type -data type may contain a simple preconditioning matrix with the -associated communication descriptor.The values contained in -the iprcparm and rprcparm define tha type of -preconditioner along with all the parameters related to it; thus, -iprcparm and rprcparm define how the other records have -to be interpreted. This data structure is the basis of more complex -preconditioning strategies, which are the subject of further -research. - -

    - - - -
    Figure 5: -The PSBLAS defined data type that contains a preconditioner.

    +
    +nr = desc%get_global_cols()
    +
    +

    +

    +
    Type:
    +
    Asynchronous. +
    +
    On Entry
    +
    +
    +
    desc
    +
    the communication descriptor.
    - -
    -
    -\fbox{\TheSbox}
    -
    -
    +Scope: local. +
    +
    + +

    +

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



    diff --git a/docs/html/node15.html b/docs/html/node15.html index 719ee509..d2114c6d 100644 --- a/docs/html/node15.html +++ b/docs/html/node15.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Data structure query routines - +get_context--Get communication context + @@ -18,57 +18,87 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + + - next - up - previous - contents
    - Next: get_local_rows Get - Up: Data Structures - Previous: Preconditioner data structure -   Next: psb_cd_get_large_threshold Get + Up: Data Structures and Classes + Previous: get_global_cols Get +   Contents

    -

    - -
    -Data structure query routines +

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



    Subsections

    diff --git a/docs/html/node16.html b/docs/html/node16.html index cbf0d441..8eb32729 100644 --- a/docs/html/node16.html +++ b/docs/html/node16.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -get_local_rows -- Get number of local rows - +psb_cd_get_large_threshold -- Get threshold for index mapping switch + @@ -26,38 +26,38 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: get_local_cols Get - Up: Data structure query routines - Previous: Data structure query routines -   Next: psb_cd_set_large_threshold Set + Up: get_context Get communication context + Previous: get_context Get communication context +   Contents

    -

    -get_local_rows -- Get number of local rows +

    +psb_cd_get_large_threshold -- Get threshold for + index mapping switch

    -

    -nr = desc%get_local_rows()
    +ith = psb_cd_get_large_threshold()
     

    @@ -65,38 +65,13 @@ nr = desc%get_local_rows()

    Type:
    Asynchronous.
    -
    On Entry
    -
    -
    -
    desc
    -
    the communication descriptor. -
    -Scope: local. -
    -Type: required. -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. -
    -
    - -

    -

    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 -$\vert{\cal I}_i\vert + \vert{\cal B}_i\vert$. The returned value is - specific to the calling process. +
    The current value for the size threshold. + +

    diff --git a/docs/html/node17.html b/docs/html/node17.html index 4f29c33d..46dfba63 100644 --- a/docs/html/node17.html +++ b/docs/html/node17.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -get_local_cols -- Get number of local cols - +psb_cd_set_large_threshold -- Set threshold for index mapping switch + @@ -26,80 +26,65 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: get_global_rows Get - Up: Data structure query routines - Previous: get_local_rows Get -   Next: Named Constants + Up: get_context Get communication context + Previous: psb_cd_get_large_threshold Get +   Contents

    -

    -get_local_cols -- Get number of local cols +

    +psb_cd_set_large_threshold -- Set threshold for + index mapping switch

    -

    -nc = desc%get_local_cols()
    +call psb_cd_set_large_threshold(ith)
     

    +
    Type:
    +
    Synchronous. +
    On Entry
    -
    Type:
    -
    Asynchronous. -
    -
    desc
    -
    the communication descriptor. +
    ith
    +
    the new threshold for communication descriptors.
    -Scope: local. +Scope: global.
    Type: required.
    Intent: in.
    -Specified as: a structured data of type descdatapsb_desc_type. -
    -
    - -

    -

    -
    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 -$\vert{\cal I}_i\vert + \vert{\cal B}_i\vert +\vert{\cal H}_i\vert$. The - returned value is specific to the calling process. +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.



    diff --git a/docs/html/node18.html b/docs/html/node18.html index a642776c..d34af5ef 100644 --- a/docs/html/node18.html +++ b/docs/html/node18.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -get_global_rows -- Get number of global rows - +Named Constants + @@ -18,7 +18,6 @@ original version by: Nikos Drakos, CBLU, University of Leeds - @@ -26,68 +25,69 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: get_global_cols Get - Up: Data structure query routines - Previous: get_local_cols Get -   Next: Sparse Matrix class + Up: get_context Get communication context + Previous: psb_cd_set_large_threshold Set +   Contents

    -

    -get_global_rows -- Get number of global rows +

    + +
    +Named Constants

    - -

    -

    -nr = desc%get_global_rows()
    -
    - -

    -
    On Entry
    -
    +
    psb_none_
    +
    Generic no-op;
    -
    Type:
    -
    Asynchronous. +
    psb_nohalo_
    +
    Do not fetch halo elements;
    -
    desc
    -
    the communication descriptor. -
    -Scope: local. -
    -Type: required. -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. +
    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;

    -

    -
    On Return
    -
    -
    -
    Function value
    -
    The number of global rows in the mesh
    diff --git a/docs/html/node19.html b/docs/html/node19.html index bb56ea20..7cf80586 100644 --- a/docs/html/node19.html +++ b/docs/html/node19.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -get_global_cols -- Get number of global cols - +Sparse Matrix class + @@ -18,80 +18,179 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + + + - next - + up - previous - contents
    - Next: get_context Get communication context - Up: Data structure query routines - Previous: get_global_rows Get -   Next: Methods + Up: Data Structures and Classes + Previous: Named Constants +   Contents

    -

    -get_global_cols -- Get number of global cols -

    - -

    -

    -nr = desc%get_global_cols()
    -
    - -

    +

    + +
    +Sparse Matrix class +

    +The spdatapsb_spmat_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
    -
    Type:
    -
    Asynchronous. +
    S
    +
    Single precision real;
    -
    On Entry
    -
    +
    D
    +
    Double precision real;
    -
    desc
    -
    the communication descriptor. -
    -Scope: local. -
    -Type: required. -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. +
    C
    +
    Single precision complex; +
    +
    Z
    +
    Double precision complex.
    +The actual data is contained in the polymorphic component a%a; 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. -

    +

    + + + +
    Figure 4: + The PSBLAS defined data type that + contains a sparse matrix.
    +
    + +
    + +\fbox{\TheSbox} +
    +
    +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:
    -
    On Return
    -
    +
    Build:
    +
    State entered after the first allocation, and before the + first assembly; in this state it is possible to add nonzero entries.
    -
    Function value
    -
    The number of global cols in the mesh +
    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.



    + +Subsections + + + +
    + + +next + +up + +previous + +contents +
    + Next: Methods + Up: Data Structures and Classes + Previous: Named Constants +   Contents + diff --git a/docs/html/node2.html b/docs/html/node2.html index b3003ade..c8d7c660 100644 --- a/docs/html/node2.html +++ b/docs/html/node2.html @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Next: General overview - Up: Up: userhtml - Previous: Previous: Contents -   Contents

    @@ -69,11 +69,11 @@ addresses a distributed memory execution model operating with message passing.

    -The PSBLAS library version 3 is internally implemented in +The PSBLAS library version 3 is implemented in the Fortran 2003 [16] programming language, with reuse and/or - adaptation of some existing Fortran 77 software, and a handful of C - routines. + HREF="node118.html#metcalf">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, @@ -81,11 +81,11 @@ 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 + HREF="node118.html#Sparse03">11]; other works discussing advanced programming in Fortran 2003 include [1,17]; sufficient support for + HREF="node118.html#DesPat:11">1,18]; 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.6). @@ -94,7 +94,7 @@ 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. [15]. Moreover, the Fortran 95 facilities for dynamic + HREF="node118.html#machiels">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 @@ -105,12 +105,12 @@ implementation or compilation time. The presentation of the PSBLAS library follows the general structure of the proposal for serial Sparse BLAS [8,9], which in its turn is based on the + HREF="node118.html#sblas97">8,9], which in its turn is based on the proposal for BLAS on dense matrices [14,5,6]. + HREF="node118.html#BLAS1">15,5,6].

    The applicability of sparse iterative solvers to many different areas @@ -144,26 +144,26 @@ computational fluid dynamics applications.


    - next - up - previous - contents
    - Next: Next: General overview - Up: Up: userhtml - Previous: Previous: Contents -   Contents diff --git a/docs/html/node20.html b/docs/html/node20.html index f8312f99..97335261 100644 --- a/docs/html/node20.html +++ b/docs/html/node20.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -get_context--Get communication context - +Methods + @@ -18,99 +18,42 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + + + - next - + up - previous - contents
    - Next: psb_cd_get_large_threshold Get - Up: Data Structures - Previous: get_global_cols Get -   Next: get_nrows Get + Up: Sparse Matrix class + Previous: Sparse Matrix class +   Contents

    -

    -
    -get_context--Get communication context -
    -

    -
    -ictxt = desc%get_context()
    -
    - -

    -

    -
    Type:
    -
    Asynchronous. -
    -
    On Entry
    -
    -
    -
    desc
    -
    the communication descriptor. -
    -Scope: local. -
    -Type: required. -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. -
    -
    - -

    -

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

    -


    - -Subsections - - - +

    +Methods +



    diff --git a/docs/html/node21.html b/docs/html/node21.html index 42155ebc..8351372e 100644 --- a/docs/html/node21.html +++ b/docs/html/node21.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_cd_get_large_threshold -- Get threshold for index mapping switch - +get_nrows -- Get number of rows in a sparse matrix + @@ -20,44 +20,44 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_cd_set_large_threshold Set - Up: get_context Get communication context - Previous: get_context Get communication context -   Next: get_ncols Get + Up: Sparse Matrix class + Previous: Methods +   Contents

    -

    -psb_cd_get_large_threshold -- Get threshold for - index mapping switch +

    +get_nrows -- Get number of rows in a sparse matrix

    +

    -ith = psb_cd_get_large_threshold()
    +nr = a%get_nrows()
     

    @@ -65,13 +65,23 @@ ith = psb_cd_get_large_threshold()

    Type:
    Asynchronous.
    -
    On Return
    +
    On Entry
    -
    Function value
    -
    The current value for the size threshold. +
    a
    +
    the sparse matrix +
    +Scope: local +
    +

    +

    +
    On Return
    +
    +
    +
    Function value
    +
    The number of rows of sparse matrix a.
    diff --git a/docs/html/node22.html b/docs/html/node22.html index 0ad007a6..bbefbf9a 100644 --- a/docs/html/node22.html +++ b/docs/html/node22.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_cd_set_large_threshold -- Set threshold for index mapping switch - +get_ncols -- Get number of columns in a sparse matrix + @@ -20,44 +20,44 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: get_nrows Get - Up: get_context Get communication context - Previous: psb_cd_get_large_threshold Get -   Next: get_nnzeros Get + Up: Sparse Matrix class + Previous: get_nrows Get +   Contents

    -

    -psb_cd_set_large_threshold -- Set threshold for - index mapping switch +

    +get_ncols -- Get number of columns in a sparse matrix

    +

    -call psb_cd_set_large_threshold(ith)
    +nc = a%get_ncols()
     

    @@ -68,21 +68,22 @@ call psb_cd_set_large_threshold(ith)

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

    +

    +
    On Return
    +
    +
    +
    Function value
    +
    The number of columns of sparse matrix a.
    -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.



    diff --git a/docs/html/node23.html b/docs/html/node23.html index 15da1733..8aff9f6c 100644 --- a/docs/html/node23.html +++ b/docs/html/node23.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -get_nrows -- Get number of rows in a sparse matrix - +get_nnzeros -- Get number of nonzero elements in a sparse matrix + @@ -20,44 +20,45 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: get_ncols Get - Up: get_context Get communication context - Previous: psb_cd_set_large_threshold Set -   Next: get_size Get + Up: Sparse Matrix class + Previous: get_ncols Get +   Contents

    -

    -get_nrows -- Get number of rows in a sparse matrix +

    +get_nnzeros -- Get number of nonzero elements + in a sparse matrix

    -nr = a%get_nrows()
    +nz = a%get_nnzeros()
     

    @@ -72,13 +73,7 @@ nr = a%get_nrows()

    the sparse matrix
    Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type spdatapsb_spmat_type. -
    +

    @@ -87,10 +82,20 @@ Specified as: a structured data of type spdatapsb_spmat_type.

    Function value
    -
    The number of rows of sparse matrix a. +
    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. +
    2. +
    +



    diff --git a/docs/html/node24.html b/docs/html/node24.html index 91915427..065398ed 100644 --- a/docs/html/node24.html +++ b/docs/html/node24.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -get_ncols -- Get number of columns in a sparse matrix - +get_size -- Get maximum number of nonzero elements in a sparse matrix + @@ -20,44 +20,45 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: get_nnzeros Get - Up: get_context Get communication context - Previous: get_nrows Get -   Next: sizeof Get + Up: Sparse Matrix class + Previous: get_nnzeros Get +   Contents

    -

    -get_ncols -- Get number of columns in a sparse matrix +

    +get_size -- Get maximum number of nonzero elements + in a sparse matrix

    -nr = a%get_ncols()
    +maxnz = a%get_size()
     

    @@ -72,13 +73,7 @@ nr = a%get_ncols()

    the sparse matrix
    Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type spdatapsb_spmat_type. -
    +

    @@ -87,7 +82,8 @@ Specified as: a structured data of type spdatapsb_spmat_type.

    Function value
    -
    The number of columns of sparse matrix a. +
    The maximum number of nonzero elements that can + be stored in sparse matrix a using its current memory allocation.
    diff --git a/docs/html/node25.html b/docs/html/node25.html index 9ea89d12..7fb161a5 100644 --- a/docs/html/node25.html +++ b/docs/html/node25.html @@ -7,8 +7,10 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -get_nnzeros -- Get number of nonzero elements in a sparse matrix - +sizeof -- Get memory occupation in bytes +of a sparse matrix + @@ -18,46 +20,47 @@ original version by: Nikos Drakos, CBLU, University of Leeds + - + - next - + up - previous - contents
    - Next: Computational routines - Up: get_context Get communication context - Previous: get_ncols Get -   Next: get_fmt Short + Up: Sparse Matrix class + Previous: get_size Get +   Contents

    -

    -get_nnzeros -- Get number of nonzero elements - in a sparse matrix +

    +sizeof -- Get memory occupation in bytes +of a sparse matrix

    -nr = a%get_nnzeros()
    +memory_size = a%sizeof()
     

    @@ -72,13 +75,7 @@ nr = a%get_nnzeros()

    the sparse matrix
    Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type spdatapsb_spmat_type. -
    +

    @@ -87,20 +84,10 @@ Specified as: a structured data of type spdatapsb_spmat_type.

    Function value
    -
    The number of nonzero elements stored in sparse matrix a. +
    The memory occupation in bytes.
    -

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



    diff --git a/docs/html/node26.html b/docs/html/node26.html index 7c467b4c..27fd36d8 100644 --- a/docs/html/node26.html +++ b/docs/html/node26.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Computational routines - +get_fmt -- Short description of the dynamic type + @@ -18,75 +18,76 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
    - Next: psb_geaxpby General - Up: userhtml - Previous: get_nnzeros Get -   Next: is_bld, is_upd, is_asb + Up: Sparse Matrix class + Previous: sizeof Get +   Contents

    -

    -Computational routines -

    +

    +get_fmt -- Short description of the dynamic type +

    -


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



    diff --git a/docs/html/node27.html b/docs/html/node27.html index f8c7c410..be2ad8d8 100644 --- a/docs/html/node27.html +++ b/docs/html/node27.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_geaxpby -- General Dense Matrix Sum - +is_bld, is_upd, is_asb -- Status check + @@ -20,202 +20,61 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_gedot Dot - Up: Computational routines - Previous: Computational routines -   Next: Named Constants + Up: Sparse Matrix class + Previous: get_fmt Short +   Contents

    -

    -psb_geaxpby -- General Dense Matrix Sum -

    - -

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

    -
    - - -\begin{displaymath}y \leftarrow \alpha\> x+ \beta y \end{displaymath} -
    -
    -

    +

    +is_bld, is_upd, is_asb -- Status check +

    -call psb_geaxpby(alpha, x, beta, y, desc_a, info)
    +if (a%is_bld()) then 
    +if (a%is_upd()) then 
    +if (a%is_asb()) then 
     
    -

    -

    -
    - - - -
    Table 1: -Data types
    -
    - - - - - - - - - - - - - - - - -
    $x$, $y$, $\alpha$, $\beta$Subroutine
    Short Precision Realpsb_geaxpby
    Long Precision Realpsb_geaxpby
    Short Precision Complexpsb_geaxpby
    Long Precision Complexpsb_geaxpby
    -
    -
    -

    -
    -

    Type:
    -
    Synchronous. +
    Asynchronous.
    On Entry
    -
    alpha
    -
    the scalar $\alpha$. -
    -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 -containing numbers of type -specified in Table 1. The rank of $x$ must be the same of $y$. -
    -
    beta
    -
    the scalar $\beta$. -
    -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 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. +
    a
    +
    the sparse matrix
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. - -

    -

    +Scope: local +

    @@ -223,59 +82,14 @@ Specified as: a structured data of type descdatapsb_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 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. +
    Function value
    +
    A logical value indicating whether the + matrix is in the Build, Update or Assembled state, respectively.

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_gedot Dot - Up: Computational routines - Previous: Computational routines -   Contents - +

    diff --git a/docs/html/node28.html b/docs/html/node28.html index 2152c782..b3fc272e 100644 --- a/docs/html/node28.html +++ b/docs/html/node28.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_gedot -- Dot Product - +Named Constants + @@ -18,263 +18,68 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + - next - + up - previous - contents
    - Next: psb_gedots Generalized - Up: Computational routines - Previous: psb_geaxpby General -   Next: Dense Vector Data Structure + Up: Sparse Matrix class + Previous: is_bld, is_upd, is_asb +   Contents

    -

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

    -
    - - -\begin{displaymath}dot \leftarrow x^T y\end{displaymath} -
    -
    -

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

    -
    - - -\begin{displaymath}dot \leftarrow x^H y\end{displaymath} -
    -
    -

    - -

    -

    -psb_gedot(x, y, desc_a, info)
    -
    -

    -
    - - - -
    Table 2: -Data types
    -
    - - - - - - - - - - - - - - - - -
    $dot$, $x$, $y$Function
    Short Precision Realpsb_gedot
    Long Precision Realpsb_gedot
    Short Precision Complexpsb_gedot
    Long Precision Complexpsb_gedot
    -
    -
    -

    -
    - -

    +Named Constants +

    -
    Type:
    -
    Synchronous. +
    psb_dupl_ovwrt_
    +
    Duplicate coefficients should be overwritten + (i.e. ignore duplications)
    -
    On Entry
    -
    +
    psb_dupl_add_
    +
    Duplicate coefficients should be added;
    -
    x
    -
    the local portion of global dense matrix -$x$. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: an array of rank one or two -containing numbers of type specified in -Table 2. The rank of $x$ must be the same of $y$. +
    psb_dupl_err_
    +
    Duplicate coefficients should trigger an error conditino
    -
    y
    -
    the local portion of global dense matrix -$y$. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: an array of rank one or two -containing numbers of type specified in -Table 2. The rank of $y$ must be the same of $x$. +
    psb_upd_dflt_
    +
    Default update strategy for matrix coefficients;
    -
    desc_a
    -
    contains data structures for communications. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. - -

    -

    -
    On Return
    -
    +
    psb_upd_srch_
    +
    Update strategy based on search into the data structure;
    -
    Function value
    -
    is the dot product of subvectors $x$ and $y$. -
    -Scope: global -
    -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. +
    psb_upd_perm_
    +
    Update strategy based on additional + permutation data (see tools routine description).

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_gedots Generalized - Up: Computational routines - Previous: psb_geaxpby General -   Contents - +

    diff --git a/docs/html/node29.html b/docs/html/node29.html index 970d2717..779d33ec 100644 --- a/docs/html/node29.html +++ b/docs/html/node29.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_gedots -- Generalized Dot Product - +Dense Vector Data Structure + @@ -18,247 +18,139 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
    - Next: psb_geamax Infinity-Norm - Up: Computational routines - Previous: psb_gedot Dot -   Next: Methods + Up: Data Structures and Classes + Previous: Named Constants +   Contents

    -

    -psb_gedots -- Generalized Dot Product -

    - -

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

    -
    - - -\begin{displaymath}res(i) \leftarrow x(:,i)^T y(:,i)\end{displaymath} -
    -
    -

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

    -
    - - - -
    Table 3: -Data types
    -
    - - - - - - - - - - - - - - - - -
    $res$, $x$, $y$Subroutine
    Short Precision Realpsb_gedots
    Long Precision Realpsb_gedots
    Short Precision Complexpsb_gedots
    Long Precision Complexpsb_gedots
    -
    -
    -

    +

    +
    +Dense Vector Data Structure +

    +The vdatapsb_vect_type data structure +encapsulates the dense vectors in a way similar to sparse matrices. +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

    -
    Type:
    -
    Synchronous. +
    I
    +
    Integer;
    -
    On Entry
    -
    +
    S
    +
    Single precision real;
    -
    x
    -
    the local portion of global dense matrix -$x$. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: an array of rank one or two -containing numbers of type specified in -Table 3. The rank of $x$ must be the same of $y$. +
    D
    +
    Double precision real;
    -
    y
    -
    the local portion of global dense matrix -$y$. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: an array of rank one or two -containing numbers of type specified in -Table 3. The rank of $y$ must be the same of $x$. +
    C
    +
    Single precision complex;
    -
    desc_a
    -
    contains data structures for communications. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. -
    -
    On Return
    -
    -
    -
    res
    -
    is the dot product of subvectors $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. +
    Z
    +
    Double precision complex.
    +The actual data is contained in the polymorphic component a%a; 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. + +
    + + + +
    Figure 5: + The PSBLAS defined data type that + contains a dense vector..
    +
    + +
    + +\fbox{\TheSbox} +
    +

    +


    + +Subsections + + +
    - next - + up - previous - contents
    - Next: psb_geamax Infinity-Norm - Up: Computational routines - Previous: psb_gedot Dot -   Next: Methods + Up: Data Structures and Classes + Previous: Named Constants +   Contents diff --git a/docs/html/node3.html b/docs/html/node3.html index 0e7a9c7a..214fe0da 100644 --- a/docs/html/node3.html +++ b/docs/html/node3.html @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Next: Basic Nomenclature - Up: Up: userhtml - Previous: Previous: Introduction -   Contents

    @@ -78,31 +78,28 @@ 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]. + HREF="node118.html#BLACS">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. +further details on our communication layer see Sec. 7.

    -

    +
    Figure 1: PSBLAS library components hierarchy.
    \includegraphics[scale=0.65]{figures/psblas.eps} - \rotatebox{-90}{\includegraphics[scale=0.65]{figures/psblas}} + ALT="\includegraphics[scale=0.65]{figures/psblas}">
    @@ -137,7 +134,7 @@ equation indices to processes. In particular it is consistent with the usage of graph partitioning tools commonly available in the literature, e.g. METIS [13]. + HREF="node118.html#METIS">14]. Dense vectors conform to sparse matrices, that is, the entries of a vector follow the same distribution of the matrix rows. @@ -148,7 +145,7 @@ 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 + HREF="footnode.html#foot166">1, even though the resulting memory bottleneck would make this option unattractive in most cases.

    @@ -157,38 +154,38 @@ bottleneck would make this option unattractive in most cases. Subsections


    - next - up - previous - contents
    - Next: Next: Basic Nomenclature - Up: Up: userhtml - Previous: Previous: Introduction -   Contents diff --git a/docs/html/node30.html b/docs/html/node30.html index f69ad8e2..f7d48c1d 100644 --- a/docs/html/node30.html +++ b/docs/html/node30.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_geamax -- Infinity-Norm of Vector - +Methods + @@ -20,225 +20,41 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_geamaxs Generalized - Up: Computational routines - Previous: psb_gedots Generalized -   Next: get_nrows Get + Up: Dense Vector Data Structure + Previous: Dense Vector Data Structure +   Contents

    -

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

    -
    - - -\begin{displaymath}amax \leftarrow \max_i \vert x_i\vert\end{displaymath} -
    -
    -

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

    -
    - - -\begin{displaymath}amax \leftarrow \max_i {(\vert re(x_i)\vert + \vert im(x_i)\vert)}\end{displaymath} -
    -
    -

    - -

    -

    -psb_geamax(x, desc_a, info)
    -
    - -

    -

    -
    - - - -
    Table 4: -Data types
    -
    - - - - - - - - - - - - - - - - - - - - - -
    $amax$$x$Function
    Short Precision RealShort Precision Realpsb_geamax
    Long Precision RealLong Precision Realpsb_geamax
    Short Precision RealShort Precision Complexpsb_geamax
    Long Precision RealLong Precision Complexpsb_geamax
    -
    -
    -

    -
    - -

    -

    -
    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 -containing numbers of type specified in -Table 4. -
    -
    desc_a
    -
    contains data structures for communications. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. - -

    -

    -
    On Return
    -
    -
    -
    Function value
    -
    is the infinity norm of subvector $x$. -
    -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. -
    -
    - -

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_geamaxs Generalized - Up: Computational routines - Previous: psb_gedots Generalized -   Contents - +

    +Methods +

    +

    diff --git a/docs/html/node31.html b/docs/html/node31.html index 900ffaec..1a11e620 100644 --- a/docs/html/node31.html +++ b/docs/html/node31.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_geamaxs -- Generalized Infinity Norm - +get_nrows -- Get number of rows in a dense vector + @@ -20,199 +20,73 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_geasum 1-Norm - Up: Computational routines - Previous: psb_geamax Infinity-Norm -   Next: get_ncols Get + Up: Dense Vector Data Structure + Previous: Methods +   Contents

    -

    -psb_geamaxs -- Generalized Infinity Norm -

    - -

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

    -
    - - -\begin{displaymath}res(i) \leftarrow \max_k \vert x(k,i)\vert \end{displaymath} -
    -
    -

    +

    +get_nrows -- Get number of rows in a dense vector +

    -call psb_geamaxs(res, x, desc_a, info)
    +nr = v%get_nrows()
     
    -

    -

    -
    - - - -
    Table 5: -Data types
    -
    - - - - - - - - - - - - - - - - - - - - - -
    $res$$x$Subroutine
    Short Precision RealShort Precision Realpsb_geamaxs
    Long Precision RealLong Precision Realpsb_geamaxs
    Short Precision RealShort Precision Complexpsb_geamaxs
    Long Precision RealLong Precision Complexpsb_geamaxs
    -
    -
    -

    -
    -

    Type:
    -
    Synchronous. +
    Asynchronous.
    On Entry
    -
    x
    -
    the local portion of global dense matrix -$x$. -
    -Scope: local -
    -Type: required +
    v
    +
    the dense vector
    -Intent: in. -
    -Specified as: a rank one or two array -containing numbers of type specified in -Table 5. -
    -
    desc_a
    -
    contains data structures for communications. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. -
    +Scope: local +
    +
    + +

    +

    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. +
    Function value
    +
    The number of rows of sparse matrix a.

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_geasum 1-Norm - Up: Computational routines - Previous: psb_geamax Infinity-Norm -   Contents - +

    diff --git a/docs/html/node32.html b/docs/html/node32.html index dfa141d0..80043db9 100644 --- a/docs/html/node32.html +++ b/docs/html/node32.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_geasum -- 1-Norm of Vector - +get_ncols -- Get number of columns in a sparse matrix + @@ -20,224 +20,43 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_geasums Generalized - Up: Computational routines - Previous: psb_geamaxs Generalized -   Next: sizeof Get + Up: Dense Vector Data Structure + Previous: get_nrows Get +   Contents

    -

    -psb_geasum -- 1-Norm of Vector -

    +

    +get_ncols -- Get number of columns in a sparse matrix +

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

    -
    - - -\begin{displaymath}asum \leftarrow \Vert x_i\Vert\end{displaymath} -
    -
    -

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

    -
    - - -\begin{displaymath}asum \leftarrow \Vert re(x)\Vert _1 + \Vert im(x)\Vert _1\end{displaymath} -
    -
    -

    - -

    -

    -psb_geasum(x, desc_a, info)
    -
    - -

    -

    -
    - - - -
    Table 6: -Data types
    -
    - - - - - - - - - - - - - - - - - - - - - -
    $asum$$x$Function
    Short Precision RealShort Precision Realpsb_geasum
    Long Precision RealLong Precision Realpsb_geasum
    Short Precision RealShort Precision Complexpsb_geasum
    Long Precision RealLong Precision Complexpsb_geasum
    -
    -
    -

    -
    - -

    -

    -
    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 -containing numbers of type specified in -Table 6. -
    -
    desc_a
    -
    contains data structures for communications. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. - -

    -

    -
    On Return
    -
    -
    -
    Function value
    -
    is the 1-norm of vector $x$. -
    -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. -
    -
    - -

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_geasums Generalized - Up: Computational routines - Previous: psb_geamaxs Generalized -   Contents - +

    diff --git a/docs/html/node33.html b/docs/html/node33.html index dab9733c..8051c04b 100644 --- a/docs/html/node33.html +++ b/docs/html/node33.html @@ -7,8 +7,10 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_geasums -- Generalized 1-Norm of Vector - +sizeof -- Get memory occupation in bytes +of a dense vector matrix + @@ -20,247 +22,74 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_genrm2 2-Norm - Up: Computational routines - Previous: psb_geasum 1-Norm -   Next: get_vect Get + Up: Dense Vector Data Structure + Previous: get_ncols Get +   Contents

    -

    -psb_geasums -- Generalized 1-Norm of Vector -

    - -

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

    -
    - - -\begin{displaymath}res(i) \leftarrow \max_k \vert x(k,i)\vert \end{displaymath} -
    -
    -

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

    -
    - - -\begin{displaymath}res(i) \leftarrow \Vert x_i\Vert\end{displaymath} -
    -
    -

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

    -
    - - -\begin{displaymath}res(i) \leftarrow \Vert re(x)\Vert _1 + \Vert im(x)\Vert _1\end{displaymath} -
    -
    -

    +

    +sizeof -- Get memory occupation in bytes +of a dense vector matrix +

    -call psb_geasums(res, x, desc_a, info)
    +memory_size = v%sizeof()
     
    -

    -

    -
    - - - -
    Table 7: -Data types
    -
    - - - - - - - - - - - - - - - - - - - - - -
    $res$$x$Subroutine
    Short Precision RealShort Precision Realpsb_geasums
    Long Precision RealLong Precision Realpsb_geasums
    Short Precision RealShort Precision Complexpsb_geasums
    Long Precision RealLong Precision Complexpsb_geasums
    -
    -
    -

    -
    -

    Type:
    -
    Synchronous. +
    Asynchronous.
    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 -containing numbers of type specified in -Table 7. -
    -
    desc_a
    -
    contains data structures for communications. +
    v
    +
    the dense vector
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. +Scope: local +
    +

    - +

    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. +
    Function value
    +
    The memory occupation in bytes.

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_genrm2 2-Norm - Up: Computational routines - Previous: psb_geasum 1-Norm -   Contents - +

    diff --git a/docs/html/node34.html b/docs/html/node34.html index 29ca2461..7150a347 100644 --- a/docs/html/node34.html +++ b/docs/html/node34.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_genrm2 -- 2-Norm of Vector - +get_vect -- Get a copy of the vector contents + @@ -18,227 +18,75 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + - next - + up - previous - contents
    - Next: psb_genrm2s Generalized - Up: Computational routines - Previous: psb_geasums Generalized -   Next: Preconditioner data structure + Up: Dense Vector Data Structure + Previous: sizeof Get +   Contents

    -

    -psb_genrm2 -- 2-Norm of Vector -

    - -

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

    -
    - - -\begin{displaymath}nrm2 \leftarrow \sqrt{x^T x}\end{displaymath} -
    -
    -

    -else if $x$ is double precision complex vector then it computes 2-norm as: -

    -
    - - -\begin{displaymath}nrm2 \leftarrow \sqrt{x^H x}\end{displaymath} -
    -
    -

    - -

    -

    -
    - - - -
    Table 8: -Data types
    -
    - - - - - - - - - - - - - - - - - - - - - -
    $nrm2$$x$Function
    Short Precision RealShort Precision Realpsb_genrm2
    Long Precision RealLong Precision Realpsb_genrm2
    Short Precision RealShort Precision Complexpsb_genrm2
    Long Precision RealLong Precision Complexpsb_genrm2
    -
    -
    -

    -
    +

    +get_vect -- Get a copy of the vector contents +

    -psb_genrm2(x, desc_a, info)
    +extv = v%get_vect()
     

    Type:
    -
    Synchronous. +
    Asynchronous.
    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 -containing numbers of type specified in -Table 8. -
    -
    desc_a
    -
    contains data structures for communications. -
    -Scope: local +
    v
    +
    the dense vector
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. +Scope: local +
    +

    - +

    On Return
    -
    Function Value
    -
    is the 2-norm of subvector $x$. -
    -Scope: global -
    -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. +
    Function value
    +
    An allocatable array holding a copy of the dense + vector contents.

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_genrm2s Generalized - Up: Computational routines - Previous: psb_geasums Generalized -   Contents - +

    diff --git a/docs/html/node35.html b/docs/html/node35.html index 07de357b..8c072f3a 100644 --- a/docs/html/node35.html +++ b/docs/html/node35.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_genrm2s -- Generalized 2-Norm of Vector - +Preconditioner data structure + @@ -19,203 +19,81 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + + - next - + up - previous - contents
    - Next: psb_spnrmi Infinity - Up: Computational routines - Previous: psb_genrm2 2-Norm -   Next: Data structure Methods + Up: Data Structures and Classes + Previous: get_vect Get +   Contents

    -

    -psb_genrm2s -- Generalized 2-Norm of Vector +

    + +
    +Preconditioner data structure

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

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

    -
    - - -\begin{displaymath}res(i) \leftarrow \Vert x(:,i)\Vert _2 \end{displaymath} -
    -
    -

    - -

    -

    -call psb_genrm2s(res, x, desc_a, info)
    -
    +A preconditioner is held in the precdata 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 values contained in +the iprcparm and rprcparm define tha type of +preconditioner along with all the parameters related to it; thus, +iprcparm and rprcparm define how the other records have +to be interpreted. This data structure is the basis of more complex +preconditioning strategies, which are the subject of further +research. -

    -

    -
    +
    - - -
    Table 9: -Data types
    -
    - - - - - - - - - - - - - - - - - - - - - -
    $res$$x$Subroutine
    Short Precision RealShort Precision Realpsb_genrm2s
    Long Precision RealLong Precision Realpsb_genrm2s
    Short Precision RealShort Precision Complexpsb_genrm2s
    Long Precision RealLong Precision Complexpsb_genrm2s
    -
    -
    -

    -
    - -

    -

    -
    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 -containing numbers of type specified in -Table 9. -
    -
    desc_a
    -
    contains data structures for communications. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. +Figure 6: +The PSBLAS defined data type that contains a preconditioner. +
    -

    -

    -
    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. -
    -
    + + +
    +\fbox{\TheSbox}
    + + +

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_spnrmi Infinity - Up: Computational routines - Previous: psb_genrm2 2-Norm -   Contents - +

    diff --git a/docs/html/node36.html b/docs/html/node36.html index 540a458c..bb39efc5 100644 --- a/docs/html/node36.html +++ b/docs/html/node36.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_spnrmi -- Infinity Norm of Sparse Matrix - +Data structure Methods + @@ -18,202 +18,46 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + - next - + up - previous - contents
    - Next: psb_spmm Sparse - Up: Computational routines - Previous: psb_genrm2s Generalized -   Next: Computational routines + Up: Data Structures and Classes + Previous: Preconditioner data structure +   Contents

    -

    -psb_spnrmi -- Infinity Norm of Sparse Matrix -

    - -

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

    -

    -
    - - -\begin{displaymath}nrmi \leftarrow \Vert A\Vert _\infty \end{displaymath} -
    -
    -

    -where: -
    -
    $A$
    -
    represents the global matrix $A$ -
    -
    - -

    -

    -
    - - - -
    Table 10: -Data types
    -
    - - - - - - - - - - - - - - - - -
    $A$Function
    Short Precision Realpsb_spnrmi
    Long Precision Realpsb_spnrmi
    Short Precision Complexpsb_spnrmi
    Long Precision Complexpsb_spnrmi
    -
    -
    -

    -
    - -

    -

    -psb_spnrmi(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: a structured data of type spdatapsb_spmat_type. -
    -
    desc_a
    -
    contains data structures for communications. -
    -Scope: local -
    -Type: required +

    +
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_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. -
    -
    +Data structure Methods +

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_spmm Sparse - Up: Computational routines - Previous: psb_genrm2s Generalized -   Contents - +

    diff --git a/docs/html/node37.html b/docs/html/node37.html index 2c436ced..31b129f9 100644 --- a/docs/html/node37.html +++ b/docs/html/node37.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_spmm -- Sparse Matrix by Dense Matrix Product - +Computational routines + @@ -18,414 +18,76 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
    - Next: psb_spsm Triangular - Up: Computational routines - Previous: psb_spnrmi Infinity -   Next: psb_geaxpby General + Up: userhtml + Previous: Data structure Methods +   Contents

    -

    -psb_spmm -- Sparse Matrix by Dense Matrix Product -

    - -

    -This subroutine computes the Sparse Matrix by Dense Matrix Product: - -

    -
    -

    - - - - - -
    \begin{displaymath}
-y \leftarrow \alpha P_r A P_c x + \beta y
-\end{displaymath} -(1)
    -

    -
    -
    - - - - - -
    \begin{displaymath}
-y \leftarrow \alpha P_r A^T P_c x + \beta y
-\end{displaymath} -(2)
    -

    -
    -
    - - - - - -
    \begin{displaymath}
-y \leftarrow \alpha P_r A^H P_c x + \beta y
-\end{displaymath} -(3)
    -

    - -

    -where: -

    -
    $x$
    -
    is the global dense submatrix $x_{:, :}$ -
    -
    $y$
    -
    is the global dense submatrix $y_{:, :}$ -
    -
    $A$
    -
    is the global sparse submatrix $A$ -
    -
    $P_r, P_c$
    -
    are the permutation matrices. -
    -
    - -

    -

    -
    - - - -
    Table 11: -Data types
    -
    - - - - - - - - - - - - - - - - -
    $A$, $x$, $y$, $\alpha$, $\beta$Subroutine
    Short Precision Realpsb_spmm
    Long Precision Realpsb_spmm
    Short Precision Complexpsb_spmm
    Long Precision Complexpsb_spmm
    -
    -
    -

    -
    - -

    -

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

    +Computational routines +

    -

    -
    Type:
    -
    Synchronous. -
    -
    On Entry
    -
    -
    -
    alpha
    -
    the scalar $\alpha$. -
    -Scope: global -
    -Type: required -
    -Intent: in. -
    -Specified as: a number of the data type indicated in -Table 11. -
    -
    a
    -
    the local portion of the sparse matrix -$A$. -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type spdatapsb_spmat_type. -
    -
    x
    -
    the local portion of global dense matrix -$x$. - -
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a rank one or two array -containing numbers of type specified in -Table 11. The rank of $x$ must be the same of $y$. -
    -
    beta
    -
    the scalar $\beta$. -
    -Scope: global -
    -Type: required -
    -Intent: in. -
    -Specified as: a number of the data type indicated in Table 11. -
    -
    y
    -
    the local portion of global dense matrix -$y$. - -
    -Scope: local -
    -Type: required -
    -Intent: inout. -
    -Specified as: a rank one or two array -containing numbers of type specified in -Table 11. 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: a structured data of type descdatapsb_desc_type. -
    -
    trans
    -
    indicate 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 submatrix $y$. -
    -Scope: local -
    -Type: required -
    -Intent: inout. -
    -Specified as: an array of rank one or two -containing numbers of type specified in -Table 11. -
    -
    info
    -
    Error code. -
    -Scope: local -
    -Type: required -
    -Intent: out. -
    -An integer value; 0 means no error has been detected. -
    -
    - -

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_spsm Triangular - Up: Computational routines - Previous: psb_spnrmi Infinity -   Contents - +

    + +Subsections + + + +

    diff --git a/docs/html/node38.html b/docs/html/node38.html index 5acca937..06716813 100644 --- a/docs/html/node38.html +++ b/docs/html/node38.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_spsm -- Triangular System Solve - +psb_geaxpby -- General Dense Matrix Sum + @@ -18,164 +18,102 @@ original version by: Nikos Drakos, CBLU, University of Leeds + - + - next - + up - previous - contents
    - Next: Communication routines - Up: Computational routines - Previous: psb_spmm Sparse -   Next: psb_gedot Dot + Up: Computational routines + Previous: Computational routines +   Contents

    -

    -psb_spsm -- Triangular System Solve +

    +psb_geaxpby -- General Dense Matrix Sum

    -This subroutine computes the Triangular System Solve: - -

    -

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

    -\begin{eqnarray*}
-y &\leftarrow& \alpha P_r T^{-1} P_c x + \beta y\\
-y &\leftar...
-...\beta y\\
-y &\leftarrow& \alpha P_r T^{-H} P_c D x + \beta y\\
-\end{eqnarray*}
    -

    -

    -where: -

    -
    $x$
    -
    is the global dense submatrix $x_{:, :}$ -
    -
    $y$
    -
    is the global dense submatrix $y_{:, :}$ -
    -
    $T$
    -
    is the global sparse block triangular submatrix $T$ -
    -
    $D$
    -
    is the scaling diagonal matrix. -
    -
    $P_r, P_c$
    -
    are the permutation matrices. -
    -
    +\begin{displaymath}y \leftarrow \alpha\> x+ \beta y \end{displaymath} +
    +
    +

    -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)
    -
    +call psb_geaxpby(alpha, x, beta, y, desc_a, info) +


    -
    +
    -
    Table 12: +Table 1: Data types
    - + - + - + - +
    $T$, $x$, $y$, $D$, $\alpha$, $\beta$ Subroutine
    Short Precision Realpsb_spsmpsb_geaxpby
    Long Precision Realpsb_spsmpsb_geaxpby
    Short Precision Complexpsb_spsmpsb_geaxpby
    Long Precision Complexpsb_spsmpsb_geaxpby
    @@ -194,42 +132,24 @@ Data types
    alpha
    the scalar $\alpha$.
    Scope: global
    -Type: required -
    -Intent: in. -
    -Specified as: a number of the data type indicated in -Table 12. -
    -
    t
    -
    the global portion of the sparse matrix -$T$. -
    -Scope: local -
    -Type: required +Type: required
    Intent: in.
    -Specified as: a structured data type specified in -§ 3. +Specified as: a number of the data type indicated in Table 1.
    x
    the local portion of global dense matrix $x$. - + WIDTH="14" HEIGHT="13" ALIGN="BOTTOM" BORDER="0" + SRC="img25.png" + ALT="$x$">.
    Scope: local
    @@ -237,20 +157,20 @@ Type: required
    Intent: in.
    -Specified as: a rank one or two array -containing numbers of type specified in -Table 12. The rank of 1. The rank of $x$ must be the same of $y$.
    beta
    the scalar $\beta$.
    Scope: global @@ -259,15 +179,14 @@ Type: required
    Intent: in.
    -Specified as: a number of the data type indicated in Table 12. +Specified as: a number of the data type indicated in Table 1.
    y
    -
    the local portion of global dense matrix +
    the local portion of the global dense matrix $y$. -
    Scope: local
    @@ -275,14 +194,13 @@ Type: required
    Intent: inout.
    -Specified as: a rank one or two array -containing numbers of type specified in -Table 12. The rank of 1. The rank of $y$ must be the same of $x$.
    desc_a
    @@ -295,133 +213,21 @@ Type: required Intent: in.
    Specified as: a structured data of type descdatapsb_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 (no scaling)$ -
    -Specified as: a rank one array containing numbers of the type -indicated in Table 12. -
    -
    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$. - +
    the local portion of result submatrix $y$.
    Scope: local
    @@ -429,9 +235,8 @@ Type: required
    Intent: inout.
    -Specified as: an array of rank one or two -containing numbers of type specified in -Table 12. +Specified as: a rank one or two array containing numbers of the type +indicated in Table 1.
    info
    Error code. @@ -449,26 +254,26 @@ An integer value; 0 means no error has been detected.


    - next - + up - previous - contents
    - Next: Communication routines - Up: Computational routines - Previous: psb_spmm Sparse -   Next: psb_gedot Dot + Up: Computational routines + Previous: Computational routines +   Contents diff --git a/docs/html/node39.html b/docs/html/node39.html index 4f878be8..cfb9766c 100644 --- a/docs/html/node39.html +++ b/docs/html/node39.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Communication routines - +psb_gedot -- Dot Product + @@ -18,63 +18,263 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
    - Next: psb_halo Halo - Up: userhtml - Previous: psb_spsm Triangular -   Next: psb_gedots Generalized + Up: Computational routines + Previous: psb_geaxpby General +   Contents

    -

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

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

    +
    + + +\begin{displaymath}dot \leftarrow x^T y\end{displaymath} +
    +
    +

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

    +
    + + +\begin{displaymath}dot \leftarrow x^H y\end{displaymath} +
    +
    +

    -


    - -Subsections +
    +psb_gedot(x, y, desc_a, info)
    +
    +

    +
    + + + +
    Table 2: +Data types
    +
    + + + + + + + + + + + + + + + + +
    $dot$, $x$, $y$Function
    Short Precision Realpsb_gedot
    Long Precision Realpsb_gedot
    Short Precision Complexpsb_gedot
    Long Precision Complexpsb_gedot
    +
    +
    +

    +
    + +

    +

    +
    Type:
    +
    Synchronous. +
    +
    On Entry
    +
    +
    +
    x
    +
    the local portion of global dense matrix +$x$. +
    +Scope: local +
    +Type: required +
    +Intent: in. +
    +Specified as: an array of rank one or two +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: an array of rank one or two +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: a structured data of type descdatapsb_desc_type. - - -

    +

    +

    +
    On Return
    +
    +
    +
    Function value
    +
    is the dot product of subvectors $x$ and $y$. +
    +Scope: global +
    +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. +
    +
    + +

    +


    + + +next + +up + +previous + +contents +
    + Next: psb_gedots Generalized + Up: Computational routines + Previous: psb_geaxpby General +   Contents + diff --git a/docs/html/node4.html b/docs/html/node4.html index 7920add7..ebf6622f 100644 --- a/docs/html/node4.html +++ b/docs/html/node4.html @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Next: Library contents - Up: Up: General overview - Previous: Previous: General overview -   Contents

    @@ -112,7 +112,7 @@ 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 + HREF="footnode.html#foot175">2; therefore the cardinality of the boundary points set denotes the amount of data sent to other domains.
    @@ -126,8 +126,8 @@ 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 [4,3]. + HREF="node118.html#2007c">4,3].

    We denote the sets of internal, boundary and halo points for a given @@ -135,7 +135,7 @@ subdomain by $\cal I$, $\cal B$ and -

    +
    Figure 2: Point classfication.
    \includegraphics[scale=0.65]{figures/points.eps} - next - up - previous - contents
    - Next: Next: Library contents - Up: Up: General overview - Previous: Previous: General overview -   Contents diff --git a/docs/html/node40.html b/docs/html/node40.html index ef06fc8a..b2a5169c 100644 --- a/docs/html/node40.html +++ b/docs/html/node40.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_halo -- Halo Data Communication - +psb_gedots -- Generalized Dot Product + @@ -20,103 +20,117 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_ovrl Overlap - Up: Communication routines - Previous: Communication routines -   Next: psb_geamax Infinity-Norm + Up: Computational routines + Previous: psb_gedot Dot +   Contents

    -

    -psb_halo -- Halo Data Communication +

    +psb_gedots -- Generalized Dot Product

    -These subroutines gathers the values of the halo -elements, and (optionally) scale the result: - -

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

    \begin{displaymath}x \leftarrow \alpha x \end{displaymath} + WIDTH="150" HEIGHT="28" BORDER="0" + SRC="img32.png" + ALT="\begin{displaymath}res(i) \leftarrow x(:,i)^T y(:,i)\end{displaymath}">

    -where: -
    -
    $x$
    -
    is a global dense submatrix. -
    -
    +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)
    +

    -
    +
    -
    Table 13: +Table 3: Data types
    + WIDTH="27" HEIGHT="13" ALIGN="BOTTOM" BORDER="0" + SRC="img33.png" + ALT="$res$">, $x$, $y$ - - - - + - + - + - +
    $\alpha$, $x$ Subroutine
    Integerpsb_halo
    Short Precision Realpsb_halopsb_gedots
    Long Precision Realpsb_halopsb_gedots
    Short Precision Complexpsb_halopsb_gedots
    Long Precision Complexpsb_halopsb_gedots
    @@ -125,12 +139,6 @@ Data types


    -

    -

    -call psb_halo(x, desc_a, info)
    -call psb_halo(x, desc_a, info, alpha, work, data)
    -
    -

    Type:
    @@ -140,103 +148,83 @@ call psb_halo(x, desc_a, info, alpha, work, data)
    x
    -
    global dense matrix $x$. +
    the local portion of global dense matrix +$x$.
    Scope: local
    Type: required
    -Intent: inout. +Intent: in.
    -Specified as: a rank one or two array with the TARGET attribute +Specified as: an array of rank one or two containing numbers of type specified in -Table 13. +Table 3. The rank of $x$ must be the same of $y$.
    -
    desc_a
    -
    contains data structures for communications. +
    y
    +
    the local portion of global dense matrix +$y$.
    Scope: local
    -Type: required -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. -
    -
    alpha
    -
    the scalar $\alpha$. -
    -Scope: global -
    -Type: optional +Type: required
    Intent: in.
    -Default: $alpha = 1 $ -
    -Specified as: a number of the data type indicated in Table 13. +Specified as: an array of rank one or two +containing numbers of type specified in +Table 3. The rank of $y$ must be the same of $x$.
    -
    work
    -
    the work array. +
    desc_a
    +
    contains data structures for communications.
    Scope: local
    -Type: optional -
    -Intent: inout. -
    -Specified as: a rank one array of the same type of $x$ with the -POINTER attribute. -
    -
    data
    -
    index list selector. -
    -Scope: global +Type: required
    -Type: optional +Intent: in.
    -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. - -

    +Specified as: a structured data of type descdatapsb_desc_type.

    On Return
    -
    x
    -
    global dense result matrix $x$. -
    -Scope: local +
    res
    +
    is the dot product of subvectors $x$ and $y$.
    -Type: required +Scope: global
    -Intent: inout. +Intent: out.
    -Returned as: a rank one or two array -containing numbers of type specified in -Table 13. +Specified as: a number or a rank-one array of the data type indicated +in Table 2.
    info
    -
    the local portion of result submatrix $y$. +
    Error code.
    Scope: local
    @@ -244,408 +232,33 @@ Type: required
    Intent: out.
    -An integer value that contains an error code. +An integer value; 0 means no error has been detected.
    -
    - - - -
    Figure 6: -Sample discretization mesh.
    -
    -\includegraphics[scale=0.45]{figures/try8x8.eps} - - -\rotatebox{-90}{\includegraphics[scale=0.45]{figures/try8x8}} - -
    -
    - -

    -Usage Example -Consider the discretization mesh depicted in fig. 6, -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
    - I GLOB(I) X(I)   I GLOB(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.0   10 42 2.0
    - 11 11 1.0   11 43 2.0
    - 12 12 1.0   12 44 2.0
    - 13 13 1.0   13 45 2.0
    - 14 14 1.0   14 46 2.0
    - 15 15 1.0   15 47 2.0
    - 16 16 1.0   16 48 2.0
    - 17 17 1.0   17 49 2.0
    - 18 18 1.0   18 50 2.0
    - 19 19 1.0   19 51 2.0
    - 20 20 1.0   20 52 2.0
    -21 21 1.0   21 53 2.0
    -22 22 1.0   22 54 2.0
    -23 23 1.0   23 55 2.0
    -24 24 1.0   24 56 2.0
    -25 25 1.0   25 57 2.0
    -26 26 1.0   26 58 2.0
    -27 27 1.0   27 59 2.0
    -28 28 1.0   28 60 2.0
    -29 29 1.0   29 61 2.0
    -30 30 1.0   30 62 2.0
    -31 31 1.0   31 63 2.0
    -32 32 1.0   32 64 2.0
    -33 33 2.0   33 25 1.0
    -34 34 2.0   34 26 1.0
    -35 35 2.0   35 27 1.0
    -36 36 2.0   36 28 1.0
    -37 37 2.0   37 29 1.0
    -38 38 2.0   38 30 1.0
    -39 39 2.0   39 31 1.0
    -40 40 2.0   40 32 1.0
    -
    -


    - next - + up - previous - contents
    - Next: psb_ovrl Overlap - Up: Communication routines - Previous: Communication routines -   Next: psb_geamax Infinity-Norm + Up: Computational routines + Previous: psb_gedot Dot +   Contents diff --git a/docs/html/node41.html b/docs/html/node41.html index adae6ae8..a95db45c 100644 --- a/docs/html/node41.html +++ b/docs/html/node41.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_ovrl -- Overlap Update - +psb_geamax -- Infinity-Norm of Vector + @@ -20,112 +20,127 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_gather Gather - Up: Communication routines - Previous: psb_halo Halo -   Next: psb_geamaxs Generalized + Up: Computational routines + Previous: psb_gedots Generalized +   Contents

    -

    -psb_ovrl -- Overlap Update +

    +psb_geamax -- Infinity-Norm of Vector

    -These subroutines applies an overlap operator to the input vector: +This function computes + the infinity-norm of a vector $x$. +
    +If $x$ is a real vector +it computes infinity norm as: +

    +
    + -

    +\begin{displaymath}amax \leftarrow \max_i \vert x_i\vert\end{displaymath} +

    +
    +

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

    \begin{displaymath}x \leftarrow Q x \end{displaymath} + WIDTH="232" HEIGHT="36" BORDER="0" + SRC="img35.png" + ALT="\begin{displaymath}amax \leftarrow \max_i {(\vert re(x_i)\vert + \vert im(x_i)\vert)}\end{displaymath}">

    -where: -
    -
    $x$
    -
    is the global dense submatrix $x$ -
    -
    $Q$
    -
    is the overlap operator; it is the composition of two -operators $ P_a$ and $ P^{T}$. -
    -
    + +

    +

    +psb_geamax(x, desc_a, info)
    +


    -
    +
    -
    Table 14: +Table 4: Data types
    + - + - + + - + + - - + + + - - + + +
    $amax$$x$SubroutineFunction
    Short Precision Realpsb_ovrlShort Precision Realpsb_geamax
    Long Precision Realpsb_ovrlLong Precision Realpsb_geamax
    Short Precision Complexpsb_ovrl
    Short Precision RealShort Precision Complexpsb_geamax
    Long Precision Complexpsb_ovrl
    Long Precision RealLong Precision Complexpsb_geamax
    @@ -134,12 +149,6 @@ Data types


    -

    -

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

    Type:
    @@ -149,20 +158,22 @@ call psb_ovrl(x, desc_a, info, update=update_type, work=work)
    x
    -
    global dense matrix $x$. +
    the local portion of global dense matrix +$x$. +
    Scope: local
    Type: required
    -Intent: inout. +Intent: in.
    -Specified as: a rank one or two array +Specified as: a rank one or two array containing numbers of type specified in -Table 14. +Table 4.
    desc_a
    contains data structures for communications. @@ -174,76 +185,21 @@ Type: required Intent: in.
    Specified as: a structured data of type descdatapsb_desc_type. -
    -
    update
    -
    Update operator. -
    -
    update = psb_none_
    -
    Do nothing; -
    -
    update = psb_add_
    -
    Sum overlap entries, i.e. apply $P^T$; -
    -
    update = psb_avg_
    -
    Average overlap entries, i.e. apply $P_aP^T$; -
    -
    -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 Function value +
    is the infinity norm of subvector $x$.
    -Scope: local -
    -Type: required -
    -Intent: inout. +Scope: global
    -Specified as: an array of rank one or two -containing numbers of type specified in -Table 14. +Specified as: a long precision real number.
    info
    Error code. @@ -258,502 +214,29 @@ 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 $ P^{T}$ performs the reduction sum of overlap -elements; it is a ``prolongation'' operator $P^T$ that -replicates overlap elements, accounting for the physical replication -of data; -
    4. -
    5. The operator $ P_a$ 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. -
    6. -
    - -

    - -

    - - - -
    Figure 7: -Sample discretization mesh.
    -
    -\includegraphics[scale=0.65]{figures/try8x8_ov.eps} - - -\rotatebox{-90}{\includegraphics[scale=0.65]{figures/try8x8_ov}} - -
    -
    - -Example of use -Consider the discretization mesh depicted in fig. 7, -partitioned among two processes as shown by the dashed lines, with an -overlap of 1 extra layer with respect to the partition of -fig. 6; 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
    - I GLOB(I) X(I)   I GLOB(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.0   10 42 2.0
    - 11 11 1.0   11 43 2.0
    - 12 12 1.0   12 44 2.0
    - 13 13 1.0   13 45 2.0
    - 14 14 1.0   14 46 2.0
    - 15 15 1.0   15 47 2.0
    - 16 16 1.0   16 48 2.0
    - 17 17 1.0   17 49 2.0
    - 18 18 1.0   18 50 2.0
    - 19 19 1.0   19 51 2.0
    - 20 20 1.0   20 52 2.0
    - 21 21 1.0   21 53 2.0
    - 22 22 1.0   22 54 2.0
    - 23 23 1.0   23 55 2.0
    - 24 24 1.0   24 56 2.0
    - 25 25 1.5   25 57 2.0
    - 26 26 1.5   26 58 2.0
    - 27 27 1.5   27 59 2.0
    - 28 28 1.5   28 60 2.0
    - 29 29 1.5   29 61 2.0
    - 30 30 1.5   30 62 2.0
    - 31 31 1.5   31 63 2.0
    - 32 32 1.5   32 64 2.0
    - 33 33 1.5   33 25 1.5
    - 34 34 1.5   34 26 1.5
    - 35 35 1.5   35 27 1.5
    - 36 36 1.5   36 28 1.5
    - 37 37 1.5   37 29 1.5
    - 38 38 1.5   38 30 1.5
    - 39 39 1.5   39 31 1.5
    - 40 40 1.5   40 32 1.5
    - 41 41 2.0   41 17 1.0
    - 42 42 2.0   42 18 1.0
    - 43 43 2.0   43 19 1.0
    - 44 44 2.0   44 20 1.0
    - 45 45 2.0   45 21 1.0
    - 46 46 2.0   46 22 1.0
    - 47 47 2.0   47 23 1.0
    - 48 48 2.0   48 24 1.0
    -
    -


    - next - + up - previous - contents
    - Next: psb_gather Gather - Up: Communication routines - Previous: psb_halo Halo -   Next: psb_geamaxs Generalized + Up: Computational routines + Previous: psb_gedots Generalized +   Contents diff --git a/docs/html/node42.html b/docs/html/node42.html index 98e1b3e5..e8826722 100644 --- a/docs/html/node42.html +++ b/docs/html/node42.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_gather -- Gather Global Dense Matrix - +psb_geamaxs -- Generalized Infinity Norm + @@ -20,123 +20,102 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_scatter Scatter - Up: Communication routines - Previous: psb_ovrl Overlap -   Next: psb_geasum 1-Norm + Up: Computational routines + Previous: psb_geamax Infinity-Norm +   Contents

    -

    -psb_gather -- Gather Global Dense Matrix +

    +psb_geamaxs -- Generalized Infinity Norm

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

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

    \begin{displaymath}glob\_x \leftarrow collect(loc\_x_i) \end{displaymath} + WIDTH="147" HEIGHT="36" BORDER="0" + SRC="img37.png" + ALT="\begin{displaymath}res(i) \leftarrow \max_k \vert x(k,i)\vert \end{displaymath}">

    -where: -
    -
    $glob\_x$
    -
    is the global submatrix -$glob\_x_{1:m,1:n}$ -
    -
    $loc\_x_i$
    -
    is the local portion of global dense matrix on -process $i$. -
    -
    $collect$
    -
    is the collect function. -
    -
    + +

    +

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


    -
    +
    -
    Table 15: +Table 5: Data types
    + WIDTH="27" HEIGHT="13" ALIGN="BOTTOM" BORDER="0" + SRC="img33.png" + ALT="$res$"> + - - - - + + - + + - - + + + - - + + +
    $x_i, y$$x$ Subroutine
    Integerpsb_gather
    Short Precision Realpsb_gatherShort Precision Realpsb_geamaxs
    Long Precision Realpsb_gatherLong Precision Realpsb_geamaxs
    Short Precision Complexpsb_gather
    Short Precision RealShort Precision Complexpsb_geamaxs
    Long Precision Complexpsb_gather
    Long Precision RealLong Precision Complexpsb_geamaxs
    @@ -145,12 +124,6 @@ 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:
    @@ -159,21 +132,22 @@ call psb_gather(glob_x, loc_x, desc_a, info, root)
    On Entry
    -
    loc_x
    +
    x
    the local portion of global dense matrix $glob\_x$. + WIDTH="14" HEIGHT="13" ALIGN="BOTTOM" BORDER="0" + SRC="img25.png" + ALT="$x$">.
    Scope: local
    -Type: required +Type: required
    Intent: in.
    -Specified as: a rank one or two array containing numbers of the type -indicated in Table 15. +Specified as: a rank one or two array +containing numbers of type specified in +Table 5.
    desc_a
    contains data structures for communications. @@ -186,43 +160,20 @@ Intent: in.
    Specified as: a structured data of type descdatapsb_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\le root\le np-1$, default $-1$. -
    On Return
    -
    glob_x
    -
    The array where the local parts must be gathered. +
    res
    +
    is the infinity norm of the columns of $x$.
    Scope: global
    -Type: required -
    Intent: out.
    -Specified as: a rank one or two array. +Specified as: a number or a rank-one array of long precision real numbers.
    info
    Error code. @@ -240,26 +191,26 @@ An integer value; 0 means no error has been detected.


    - next - + up - previous - contents
    - Next: psb_scatter Scatter - Up: Communication routines - Previous: psb_ovrl Overlap -   Next: psb_geasum 1-Norm + Up: Computational routines + Previous: psb_geamax Infinity-Norm +   Contents diff --git a/docs/html/node43.html b/docs/html/node43.html index 3ab5b145..17dc137f 100644 --- a/docs/html/node43.html +++ b/docs/html/node43.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_scatter -- Scatter Global Dense Matrix - +psb_geasum -- 1-Norm of Vector + @@ -18,123 +18,128 @@ original version by: Nikos Drakos, CBLU, University of Leeds + - + - next - + up - previous - contents
    - Next: Data management routines - Up: Communication routines - Previous: psb_gather Gather -   Next: psb_geasums Generalized + Up: Computational routines + Previous: psb_geamaxs Generalized +   Contents

    -

    -psb_scatter -- Scatter Global Dense Matrix +

    +psb_geasum -- 1-Norm of Vector

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

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

    \begin{displaymath}loc\_x_i \leftarrow scatter(glob\_x) \end{displaymath} + WIDTH="92" HEIGHT="28" BORDER="0" + SRC="img38.png" + ALT="\begin{displaymath}asum \leftarrow \Vert x_i\Vert\end{displaymath}">

    -where: -
    -
    $glob\_x$
    -
    is the global matrix + $glob\_x_{1:m,1:n}$ -
    -
    $loc\_x_i$
    -
    is the local portion of global dense matrix on -process $i$. -
    -
    $scatter$
    -
    is the scatter function. -
    -
    + WIDTH="205" HEIGHT="28" BORDER="0" + SRC="img39.png" + ALT="\begin{displaymath}asum \leftarrow \Vert re(x)\Vert _1 + \Vert im(x)\Vert _1\end{displaymath}"> + +
    +

    + +

    +

    +psb_geasum(x, desc_a, info)
    +


    -
    +
    -
    Table 16: +Table 6: Data types
    - - - - + WIDTH="43" HEIGHT="13" ALIGN="BOTTOM" BORDER="0" + SRC="img40.png" + ALT="$asum$"> + + - + + - + + - - + + + - - + + +
    $x_i, y$Subroutine
    Integerpsb_scatter$x$Function
    Short Precision Realpsb_scatterShort Precision Realpsb_geasum
    Long Precision Realpsb_scatterLong Precision Realpsb_geasum
    Short Precision Complexpsb_scatter
    Short Precision RealShort Precision Complexpsb_geasum
    Long Precision Complexpsb_scatter
    Long Precision RealLong Precision Complexpsb_geasum
    @@ -143,12 +148,6 @@ Data types


    -

    -

    -call psb_scatter(glob_x, loc_x, desc_a, info, root)
    -call psb_scatter(glob_x, loc_x, desc_a, info, root)
    -
    -

    Type:
    @@ -157,16 +156,23 @@ call psb_scatter(glob_x, loc_x, desc_a, info, root)
    On Entry
    -
    glob_x
    -
    The array that must be scattered into local pieces. +
    x
    +
    the local portion of global dense matrix +$x$. +
    -Scope: global +Scope: local
    -Type: required +Type: required
    Intent: in.
    -Specified as: a rank one or two array. +Specified as: a rank one or two array +containing numbers of type specified in +Table 6.
    desc_a
    contains data structures for communications. @@ -178,49 +184,21 @@ Type: required Intent: in.
    Specified as: a structured data of type descdatapsb_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\le root\le np-1$, default $-1$. + +

    On Return
    -
    loc_x
    -
    the local portion of global dense matrix -$glob\_x$. +
    Function value
    +
    is the 1-norm of vector $x$.
    -Scope: local -
    -Type: required -
    -Intent: out. +Scope: global
    -Specified as: a rank one or two array containing numbers of the type -indicated in Table 16. +Specified as: a long precision real number.
    info
    Error code. @@ -238,26 +216,26 @@ An integer value; 0 means no error has been detected.


    - next - + up - previous - contents
    - Next: Data management routines - Up: Communication routines - Previous: psb_gather Gather -   Next: psb_geasums Generalized + Up: Computational routines + Previous: psb_geamaxs Generalized +   Contents diff --git a/docs/html/node44.html b/docs/html/node44.html index de4b64e3..32646510 100644 --- a/docs/html/node44.html +++ b/docs/html/node44.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Data management routines - +psb_geasums -- Generalized 1-Norm of Vector + @@ -18,114 +18,249 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
    - Next: psb_cdall Allocates - Up: userhtml - Previous: psb_scatter Scatter -   Next: psb_genrm2 2-Norm + Up: Computational routines + Previous: psb_geasum 1-Norm +   Contents

    -

    - +

    +psb_geasums -- Generalized 1-Norm of Vector +

    + +

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

    +
    + + +\begin{displaymath}res(i) \leftarrow \max_k \vert x(k,i)\vert \end{displaymath} +
    +
    +

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

    +
    + + +\begin{displaymath}res(i) \leftarrow \Vert x_i\Vert\end{displaymath} +
    +
    +

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

    +
    + + +\begin{displaymath}res(i) \leftarrow \Vert re(x)\Vert _1 + \Vert im(x)\Vert _1\end{displaymath} +
    +
    +

    + +

    +

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

    +

    +
    + + + +
    Table 7: +Data types
    +
    + + + + + + + + + + + + + + + + + + + + + +
    $res$$x$Subroutine
    Short Precision RealShort Precision Realpsb_geasums
    Long Precision RealLong Precision Realpsb_geasums
    Short Precision RealShort Precision Complexpsb_geasums
    Long Precision RealLong Precision Complexpsb_geasums
    +
    +
    +

    +
    + +

    +

    +
    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 +containing numbers of type specified in +Table 7. +
    +
    desc_a
    +
    contains data structures for communications. +
    +Scope: local +
    +Type: required +
    +Intent: in. +
    +Specified as: a structured data of type descdatapsb_desc_type. + +

    +

    +
    On Return
    +
    +
    +
    res
    +
    contains the 1-norm of (the columns of) $x$. +
    +Scope: global +
    +Intent: out.
    -Data management routines - +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. +
    +

    -


    - -Subsections - - - -

    +
    + + +next + +up + +previous + +contents +
    + Next: psb_genrm2 2-Norm + Up: Computational routines + Previous: psb_geasum 1-Norm +   Contents + diff --git a/docs/html/node45.html b/docs/html/node45.html index 6fdf28b2..3fa4e1e7 100644 --- a/docs/html/node45.html +++ b/docs/html/node45.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_cdall -- Allocates a communication descriptor - +psb_genrm2 -- 2-Norm of Vector + @@ -20,207 +20,186 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_cdins Communication - Up: Data management routines - Previous: Data management routines -   Next: psb_genrm2s Generalized + Up: Computational routines + Previous: psb_geasums Generalized +   Contents

    -

    -psb_cdall -- Allocates a communication descriptor +

    +psb_genrm2 -- 2-Norm of Vector

    +

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

    +
    + + +\begin{displaymath}nrm2 \leftarrow \sqrt{x^T x}\end{displaymath} +
    +
    +

    +else if $x$ is double precision complex vector then it computes 2-norm as: +

    +
    + + +\begin{displaymath}nrm2 \leftarrow \sqrt{x^H x}\end{displaymath} +
    +
    +

    + +

    +

    +
    + + + +
    Table 8: +Data types
    +
    + + + + + + + + + + + + + + + + + + + + + +
    $nrm2$$x$Function
    Short Precision RealShort Precision Realpsb_genrm2
    Long Precision RealLong Precision Realpsb_genrm2
    Short Precision RealShort Precision Complexpsb_genrm2
    Long Precision RealLong Precision Complexpsb_genrm2
    +
    +
    +

    +
    +

    -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=.true.])
    -call psb_cdall(icontxt, desc_a, info,nl=nl)
    -call psb_cdall(icontxt, desc_a, info,mg=mg,repl=.true.)
    +psb_genrm2(x, desc_a, info)
     

    -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. +
    On Entry
    +
    -
    vg
    -
    Data allocation: each index +
    x
    +
    the local portion of global dense matrix $i\in \{1\dots mg\}$ is allocated - to process $vg(i)$. + WIDTH="14" HEIGHT="13" ALIGN="BOTTOM" BORDER="0" + SRC="img25.png" + ALT="$x$">.
    -Scope:global. +Scope: local
    -Type:optional. +Type: required
    Intent: in.
    -Specified as: an integer array. +Specified as: a rank one or two array +containing numbers of type specified in +Table 8.
    -
    flag
    -
    Specifies whether entries in $vg$ are zero- or one-based. +
    desc_a
    +
    contains data structures for communications.
    -Scope:global. +Scope: local
    -Type:optional. +Type: required
    Intent: in.
    -Specified as: an integer value $0,1$, default $0$. +Specified as: a structured data of type descdatapsb_desc_type.

    -
    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: .true. -
    -
    - -

    -

    On Return
    -
    desc_a
    -
    the communication descriptor. +
    Function Value
    +
    is the 2-norm of subvector $x$.
    -Scope:local. +Scope: global
    -Type:required. -
    -Intent: out. +Type: required
    -Specified as: a structured data of type descdatapsb_desc_type. +Specified as: a long precision real number.
    info
    Error code. @@ -235,188 +214,29 @@ 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\le 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\in \{1\dots mg\}$ is assigned to process $vg(i)$. - The vector vg must be identical on all - calling processes; its entries may have the ranges $(0\dots np-1)$ - or $(1\dots np)$ 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 $(1\dots mg)$ 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. -
      -
      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 $N_I=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. -
    14. -
    -


    - next - + up - previous - contents
    - Next: psb_cdins Communication - Up: Data management routines - Previous: Data management routines -   Next: psb_genrm2s Generalized + Up: Computational routines + Previous: psb_geasums Generalized +   Contents diff --git a/docs/html/node46.html b/docs/html/node46.html index 3bc5a73c..8abbd9db 100644 --- a/docs/html/node46.html +++ b/docs/html/node46.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_cdins -- Communication descriptor insert routine - +psb_genrm2s -- Generalized 2-Norm of Vector + @@ -20,116 +20,163 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_cdasb Communication - Up: Data management routines - Previous: psb_cdall Allocates -   Next: psb_spnrmi Infinity + Up: Computational routines + Previous: psb_genrm2 2-Norm +   Contents

    -

    -psb_cdins -- Communication descriptor insert routine +

    +psb_genrm2s -- Generalized 2-Norm of Vector

    +

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

    +
    + + +\begin{displaymath}res(i) \leftarrow \Vert x(:,i)\Vert _2 \end{displaymath} +
    +
    +

    +

    -call psb_cdins(nz, ia, ja, desc_a, info)
    +call psb_genrm2s(res, x, desc_a, info)
     

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

    +
    + + + +
    Table 9: +Data types
    +
    + + + + + + + + + + + + + + + + + + + + + +
    $res$$x$Subroutine
    Short Precision RealShort Precision Realpsb_genrm2s
    Long Precision RealLong Precision Realpsb_genrm2s
    Short Precision RealShort Precision Complexpsb_genrm2s
    Long Precision RealLong Precision Complexpsb_genrm2s
    +
    +
    +

    +

    Type:
    -
    Asynchronous. +
    Synchronous.
    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. +
    x
    +
    the local portion of global dense matrix +$x$. +
    -Scope: local. +Scope: local
    -Type: required. +Type: required
    Intent: in.
    -Specified as: an integer array of length $nz$. +Specified as: a rank one or two array +containing numbers of type specified in +Table 9.
    -
    ja
    -
    the indices of the end vertex of the edges being inserted. +
    desc_a
    +
    contains data structures for communications.
    -Scope: local. +Scope: local
    -Type: required. +Type: required
    Intent: in.
    -Specified as: an integer array of length $nz$. -
    -
    +Specified as: a structured data of type descdatapsb_desc_type.

    -

    +
    On Return
    -
    desc_a
    -
    the updated communication descriptor. -
    -Scope:local. +
    res
    +
    contains the 1-norm of (the columns of) $x$.
    -Type:required. +Scope: global
    -Intent: inout. +Intent: out.
    -Specified as: a structured data of type descdatapsb_desc_type. +Specified as: a long precision real number.
    info
    Error code. @@ -143,41 +190,30 @@ Intent: out. An integer value; 0 means no error has been detected.
    -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. -


    - next - + up - previous - contents
    - Next: psb_cdasb Communication - Up: Data management routines - Previous: psb_cdall Allocates -   Next: psb_spnrmi Infinity + Up: Computational routines + Previous: psb_genrm2 2-Norm +   Contents diff --git a/docs/html/node47.html b/docs/html/node47.html index f59a2e29..784e2fe1 100644 --- a/docs/html/node47.html +++ b/docs/html/node47.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_cdasb -- Communication descriptor assembly routine - +psb_spnrmi -- Infinity Norm of Sparse Matrix + @@ -20,44 +20,113 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_cdcpy Copies - Up: Data management routines - Previous: psb_cdins Communication -   Next: psb_spmm Sparse + Up: Computational routines + Previous: psb_genrm2s Generalized +   Contents

    -

    -psb_cdasb -- Communication descriptor assembly routine +

    +psb_spnrmi -- Infinity Norm of Sparse Matrix

    +

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

    +

    +
    + + +\begin{displaymath}nrmi \leftarrow \Vert A\Vert _\infty \end{displaymath} +
    +
    +

    +where: +
    +
    $A$
    +
    represents the global matrix $A$ +
    +
    + +

    +

    +
    + + + +
    Table 10: +Data types
    +
    + + + + + + + + + + + + + + + + +
    $A$Function
    Short Precision Realpsb_spnrmi
    Long Precision Realpsb_spnrmi
    Short Precision Complexpsb_spnrmi
    Long Precision Complexpsb_spnrmi
    +
    +
    +

    +
    +

    -call psb_cdasb(desc_a, info)
    +psb_spnrmi(A, desc_a, info)
     

    @@ -68,34 +137,44 @@ call psb_cdasb(desc_a, info)

    On Entry
    +
    a
    +
    the local portion of the global sparse matrix +$A$. +
    +Scope: local +
    +Type: required +
    +Intent: in. +
    +Specified as: a structured data of type spdatapsb_spmat_type. +
    desc_a
    -
    the communication descriptor. +
    contains data structures for communications.
    -Scope:local. +Scope: local
    -Type:required. +Type: required
    -Intent: inout. +Intent: in.
    Specified as: a structured data of type descdatapsb_desc_type.
    - - -

    -

    On Return
    -
    desc_a
    -
    the communication descriptor. -
    -Scope:local. +
    Function value
    +
    is the infinity-norm of sparse submatrix $A$.
    -Type:required. +Scope: global
    -Intent: inout. -
    -Specified as: a structured data of type descdatapsb_desc_type. +Specified as: a long precision real number.
    info
    Error code. @@ -109,16 +188,32 @@ 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. -
    2. -

    -


    +
    + + +next + +up + +previous + +contents +
    + Next: psb_spmm Sparse + Up: Computational routines + Previous: psb_genrm2s Generalized +   Contents + diff --git a/docs/html/node48.html b/docs/html/node48.html index 494fb301..56281004 100644 --- a/docs/html/node48.html +++ b/docs/html/node48.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_cdcpy -- Copies a communication descriptor - +psb_spmm -- Sparse Matrix by Dense Matrix Product + @@ -20,84 +20,373 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_cdfree Frees - Up: Data management routines - Previous: psb_cdasb Communication -   Next: psb_spsm Triangular + Up: Computational routines + Previous: psb_spnrmi Infinity +   Contents

    -

    -psb_cdcpy -- Copies a communication descriptor +

    +psb_spmm -- Sparse Matrix by Dense Matrix Product

    +

    +This subroutine computes the Sparse Matrix by Dense Matrix Product: + +

    +
    +

    + + + + + +
    \begin{displaymath}
+y \leftarrow \alpha P_r A P_c x + \beta y
+\end{displaymath} +(1)
    +

    +
    +
    + + + + + +
    \begin{displaymath}
+y \leftarrow \alpha P_r A^T P_c x + \beta y
+\end{displaymath} +(2)
    +

    +
    +
    + + + + + +
    \begin{displaymath}
+y \leftarrow \alpha P_r A^H P_c x + \beta y
+\end{displaymath} +(3)
    +

    + +

    +where: +

    +
    $x$
    +
    is the global dense submatrix $x_{:, :}$ +
    +
    $y$
    +
    is the global dense submatrix $y_{:, :}$ +
    +
    $A$
    +
    is the global sparse submatrix $A$ +
    +
    $P_r, P_c$
    +
    are the permutation matrices. +
    +
    + +

    +

    +
    + + + +
    Table 11: +Data types
    +
    + + + + + + + + + + + + + + + + +
    $A$, $x$, $y$, $\alpha$, $\beta$Subroutine
    Short Precision Realpsb_spmm
    Long Precision Realpsb_spmm
    Short Precision Complexpsb_spmm
    Long Precision Complexpsb_spmm
    +
    +
    +

    +
    +

    -call psb_cdcpy(desc_in, desc_out, info)
    -
    +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:
    -
    Asynchronous. +
    Synchronous.
    On Entry
    -
    desc_in
    -
    the communication descriptor. +
    alpha
    +
    the scalar $\alpha$.
    -Scope:local. +Scope: global
    -Type:required. +Type: required +
    +Intent: in. +
    +Specified as: a number of the data type indicated in +Table 11. +
    +
    a
    +
    the local portion of the sparse matrix +$A$. +
    +Scope: local +
    +Type: required +
    +Intent: in. +
    +Specified as: a structured data of type spdatapsb_spmat_type. +
    +
    x
    +
    the local portion of global dense matrix +$x$. + +
    +Scope: local +
    +Type: required +
    +Intent: in. +
    +Specified as: a rank one or two array +containing numbers of type specified in +Table 11. The rank of $x$ must be the same of $y$. +
    +
    beta
    +
    the scalar $\beta$. +
    +Scope: global +
    +Type: required +
    +Intent: in. +
    +Specified as: a number of the data type indicated in Table 11. +
    +
    y
    +
    the local portion of global dense matrix +$y$. + +
    +Scope: local +
    +Type: required +
    +Intent: inout. +
    +Specified as: a rank one or two array +containing numbers of type specified in +Table 11. 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: a structured data of type descdatapsb_desc_type. +
    +
    trans
    +
    indicate 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
    -
    desc_out
    -
    the communication descriptor copy. +
    y
    +
    the local portion of result submatrix $y$.
    -Scope:local. +Scope: local
    -Type:required. +Type: required
    -Intent: out. +Intent: inout.
    -Specified as: a structured data of type descdatapsb_desc_type. +Specified as: an array of rank one or two +containing numbers of type specified in +Table 11.
    info
    Error code. @@ -113,7 +402,30 @@ An integer value; 0 means no error has been detected.

    -


    +
    + + +next + +up + +previous + +contents +
    + Next: psb_spsm Triangular + Up: Computational routines + Previous: psb_spnrmi Infinity +   Contents + diff --git a/docs/html/node49.html b/docs/html/node49.html index 00fa09f8..3282764e 100644 --- a/docs/html/node49.html +++ b/docs/html/node49.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_cdfree -- Frees a communication descriptor - +psb_spsm -- Triangular System Solve + @@ -18,47 +18,171 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + - next - + up - previous - contents
    - Next: psb_cdbldext Build - Up: Data management routines - Previous: psb_cdcpy Copies -   Next: Communication routines + Up: Computational routines + Previous: psb_spmm Sparse +   Contents

    -

    -psb_cdfree -- Frees a communication descriptor +

    +psb_spsm -- Triangular System Solve

    +

    +This subroutine computes the Triangular System Solve: + +

    +

    +
    + +\begin{eqnarray*}
+y &\leftarrow& \alpha P_r T^{-1} P_c x + \beta y\\
+y &\leftar...
+...\beta y\\
+y &\leftarrow& \alpha P_r T^{-H} P_c D x + \beta y\\
+\end{eqnarray*}
    +

    + +

    +where: +

    +
    $x$
    +
    is the global dense submatrix $x_{:, :}$ +
    +
    $y$
    +
    is the global dense submatrix $y_{:, :}$ +
    +
    $T$
    +
    is the global sparse block triangular submatrix $T$ +
    +
    $D$
    +
    is the scaling diagonal matrix. +
    +
    $P_r, P_c$
    +
    are the permutation matrices. +
    +
    +

    -call psb_cdfree(desc_a, info)
    -
    +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) + + +

    +

    +
    + + + +
    Table 12: +Data types
    +
    + + + + + + + + + + + + + + + + +
    $T$, $x$, $y$, $D$, $\alpha$, $\beta$Subroutine
    Short Precision Realpsb_spsm
    Long Precision Realpsb_spsm
    Short Precision Complexpsb_spsm
    Long Precision Complexpsb_spsm
    +
    +
    +

    +

    @@ -68,24 +192,247 @@ call psb_cdfree(desc_a, info)
    On Entry
    -
    desc_a
    -
    the communication descriptor to be freed. +
    alpha
    +
    the scalar $\alpha$. +
    +Scope: global
    -Scope:local. +Type: required
    -Type:required. +Intent: in. +
    +Specified as: a number of the data type indicated in +Table 12. +
    +
    t
    +
    the global portion of the sparse matrix +$T$. +
    +Scope: local +
    +Type: required +
    +Intent: in. +
    +Specified as: a structured data 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 +containing numbers of type specified in +Table 12. The rank of $x$ must be the same of $y$. +
    +
    beta
    +
    the scalar $\beta$. +
    +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 +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: a structured data of type descdatapsb_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 (no scaling)$ +
    +Specified as: a rank one array containing numbers of the type +indicated in Table 12. +
    +
    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 12. +
    info
    Error code.
    @@ -100,7 +447,30 @@ An integer value; 0 means no error has been detected.

    -


    +
    + + +next + +up + +previous + +contents +
    + Next: Communication routines + Up: Computational routines + Previous: psb_spmm Sparse +   Contents + diff --git a/docs/html/node5.html b/docs/html/node5.html index 08ddb656..52bb0a15 100644 --- a/docs/html/node5.html +++ b/docs/html/node5.html @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Next: Application structure - Up: Up: General overview - Previous: Previous: Basic Nomenclature -   Contents

    @@ -107,14 +107,14 @@ The following naming scheme has been adopted for all the symbols internally defined in the PSBLAS software package:
      -
    • all the symbols (i.e. subroutine names, data types...) are +
    • all symbols (i.e. subroutine names, data types...) are prefixed by psb_
    • -
    • all the data type names are suffixed by _type +
    • all data type names are suffixed by _type
    • -
    • all the constant values are suffixed by _ +
    • all constants are suffixed by _
    • -
    • all the subroutine names follow the rule psb_xxname where +
    • all top-level subroutine names follow the rule psb_xxname where xx can be either:
        @@ -128,11 +128,11 @@ internally defined in the PSBLAS software package:
      For example the psb_geins, psb_spins and - psb_cdins perform the same action (see 6) on + 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 - interfaces for both real and complex data. + names for both real and complex data.
    In the description of the subroutines, arguments or argument entries @@ -169,26 +169,26 @@ whose current value is 3.0.0


    - next - up - previous - contents
    - Next: Next: Application structure - Up: Up: General overview - Previous: Previous: Basic Nomenclature -   Contents diff --git a/docs/html/node50.html b/docs/html/node50.html index 95eb82ff..60b7170b 100644 --- a/docs/html/node50.html +++ b/docs/html/node50.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_cdbldext -- Build an extended communication descriptor - +Communication routines + @@ -18,183 +18,63 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
    - Next: psb_spall Allocates - Up: Data management routines - Previous: psb_cdfree Frees -   Next: psb_halo Halo + Up: userhtml + Previous: psb_spsm Triangular +   Contents

    -

    -psb_cdbldext -- Build an extended communication - descriptor -

    +

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

    -

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

    + +Subsections -

    -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 spdatapsb_spmat_type. -
    -
    nl
    -
    the number of additional layers desired. -
    -Scope:global. -
    -Type:required. -
    -Intent: in. -
    -Specified as: an integer value $nl\ge 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 descdatapsb_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. -
    4. -
    - -

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_spall Allocates - Up: Data management routines - Previous: psb_cdfree Frees -   Contents - + + +

    diff --git a/docs/html/node51.html b/docs/html/node51.html index 9560d5ad..bd59901e 100644 --- a/docs/html/node51.html +++ b/docs/html/node51.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_spall -- Allocates a sparse matrix - +psb_halo -- Halo Data Communication + @@ -20,44 +20,115 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_spins Insert - Up: Data management routines - Previous: psb_cdbldext Build -   Next: psb_ovrl Overlap + Up: Communication routines + Previous: Communication routines +   Contents

    -

    -psb_spall -- Allocates a sparse matrix +

    +psb_halo -- Halo Data Communication

    +

    +These subroutines gathers the values of the halo +elements, and (optionally) scale the result: + +

    +

    +
    + + +\begin{displaymath}x \leftarrow \alpha x \end{displaymath} +
    +
    +

    +where: +
    +
    $x$
    +
    is a global dense submatrix. +
    +
    + +

    +

    +
    + + + +
    Table 13: +Data types
    +
    + + + + + + + + + + + + + + + + + + + +
    $\alpha$, $x$Subroutine
    Integerpsb_halo
    Short Precision Realpsb_halo
    Long Precision Realpsb_halo
    Short Precision Complexpsb_halo
    Long Precision Complexpsb_halo
    +
    +
    +

    +
    +

    -call psb_spall(a, desc_a, info, nnz)
    +call psb_halo(x, desc_a, info)
    +call psb_halo(x, desc_a, info, alpha, work, data)
     

    @@ -68,49 +139,104 @@ call psb_spall(a, desc_a, info, nnz)

    On Entry
    +
    x
    +
    global dense matrix $x$. +
    +Scope: local +
    +Type: required +
    +Intent: inout. +
    +Specified as: a rank one or two array with the TARGET attribute +containing numbers of type specified in +Table 13. +
    desc_a
    -
    the communication descriptor. +
    contains data structures for communications.
    -Scope:local. +Scope: local
    -Type:required. +Type: required
    Intent: in.
    Specified as: a structured data of type descdatapsb_desc_type.
    -
    nnz
    -
    An estimate of the number of nonzeroes in the local - part of the assembled matrix. +
    alpha
    +
    the scalar $\alpha$.
    -Scope: global. +Scope: global
    -Type: optional. +Type: optional
    Intent: in.
    -Specified as: an integer value. +Default: $alpha = 1 $ +
    +Specified as: a number of the data type indicated in Table 13.
    - +
    work
    +
    the work array. +
    +Scope: local +
    +Type: optional +
    +Intent: inout. +
    +Specified as: a rank one array of the same type of $x$ with the +POINTER attribute. +
    +
    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
    -
    a
    -
    the matrix to be allocated. +
    x
    +
    global dense result matrix $x$.
    -Scope:local +Scope: local
    -Type:required +Type: required
    -Intent: out. +Intent: inout.
    -Specified as: a structured data of type spdatapsb_spmat_type. +Returned as: a rank one or two array +containing numbers of type specified in +Table 13.
    info
    -
    Error code. +
    the local portion of result submatrix $y$.
    Scope: local
    @@ -118,50 +244,408 @@ Type: required
    Intent: out.
    -An integer value; 0 means no error has been detected. +An integer value that contains an error code.
    -Notes - -
      -
    1. On exit from this routine the sparse matrix is in the build - state. -
    2. -
    3. The descriptor may be in either the build or assembled state. -
    4. -
    5. Providing a good estimate for the number of nonzeroes $nnz$ in - the assembled matrix may substantially improve performance in the - matrix build phase, as it will reduce or eliminate the need for - (potentially multiple) data reallocations. -
    6. -
    + +
    + + + +
    Figure 7: +Sample discretization mesh.
    +
    +\includegraphics[scale=0.45]{figures/try8x8.eps} + + +\rotatebox{-90}{\includegraphics[scale=0.45]{figures/try8x8}} + +
    +
    + +

    +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
    + I GLOB(I) X(I)   I GLOB(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.0   10 42 2.0
    + 11 11 1.0   11 43 2.0
    + 12 12 1.0   12 44 2.0
    + 13 13 1.0   13 45 2.0
    + 14 14 1.0   14 46 2.0
    + 15 15 1.0   15 47 2.0
    + 16 16 1.0   16 48 2.0
    + 17 17 1.0   17 49 2.0
    + 18 18 1.0   18 50 2.0
    + 19 19 1.0   19 51 2.0
    + 20 20 1.0   20 52 2.0
    +21 21 1.0   21 53 2.0
    +22 22 1.0   22 54 2.0
    +23 23 1.0   23 55 2.0
    +24 24 1.0   24 56 2.0
    +25 25 1.0   25 57 2.0
    +26 26 1.0   26 58 2.0
    +27 27 1.0   27 59 2.0
    +28 28 1.0   28 60 2.0
    +29 29 1.0   29 61 2.0
    +30 30 1.0   30 62 2.0
    +31 31 1.0   31 63 2.0
    +32 32 1.0   32 64 2.0
    +33 33 2.0   33 25 1.0
    +34 34 2.0   34 26 1.0
    +35 35 2.0   35 27 1.0
    +36 36 2.0   36 28 1.0
    +37 37 2.0   37 29 1.0
    +38 38 2.0   38 30 1.0
    +39 39 2.0   39 31 1.0
    +40 40 2.0   40 32 1.0
    +


    - next - + up - previous - contents
    - Next: psb_spins Insert - Up: Data management routines - Previous: psb_cdbldext Build -   Next: psb_ovrl Overlap + Up: Communication routines + Previous: Communication routines +   Contents diff --git a/docs/html/node52.html b/docs/html/node52.html index d654ec48..febb1e51 100644 --- a/docs/html/node52.html +++ b/docs/html/node52.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_spins -- Insert a cloud of elements into a sparse matrix - +psb_ovrl -- Overlap Update + @@ -20,152 +20,231 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_spasb Sparse - Up: Data management routines - Previous: psb_spall Allocates -   Next: psb_gather Gather + Up: Communication routines + Previous: psb_halo Halo +   Contents

    -

    -psb_spins -- Insert a cloud of elements into a sparse - matrix +

    +psb_ovrl -- Overlap Update

    +

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

    +

    +
    + + +\begin{displaymath}x \leftarrow Q x \end{displaymath} +
    +
    +

    +where: +
    +
    $x$
    +
    is the global dense submatrix $x$ +
    +
    $Q$
    +
    is the overlap operator; it is the composition of two +operators $ P_a$ and $ P^{T}$. +
    +
    + +

    +

    +
    + + + +
    Table 14: +Data types
    +
    + + + + + + + + + + + + + + + + +
    $x$Subroutine
    Short Precision Realpsb_ovrl
    Long Precision Realpsb_ovrl
    Short Precision Complexpsb_ovrl
    Long Precision Complexpsb_ovrl
    +
    +
    +

    +
    +

    -call psb_spins(nz, ia, ja, val, a, desc_a, info)
    -
    +call psb_ovrl(x, desc_a, info) +call psb_ovrl(x, desc_a, info, update=update_type, work=work) +

    Type:
    -
    Asynchronous. +
    Synchronous.
    On Entry
    -
    nz
    -
    the number of elements to be inserted. +
    x
    +
    global dense matrix $x$.
    -Scope:local. +Scope: local
    -Type:required. +Type: required
    -Intent: in. +Intent: inout.
    -Specified as: an integer scalar. +Specified as: a rank one or two array +containing numbers of type specified in +Table 14.
    -
    ia
    -
    the row indices of the elements to be inserted. +
    desc_a
    +
    contains data structures for communications.
    -Scope:local. +Scope: local
    -Type:required. +Type: required
    Intent: in.
    -Specified as: an integer array of size $nz$. +Specified as: a structured data of type descdatapsb_desc_type.
    -
    ja
    -
    the column indices of the elements to be inserted. -
    -Scope:local. -
    -Type:required. -
    -Intent: in. -
    -Specified as: an integer array of size $nz$. +
    update
    +
    Update operator. +
    +
    update = psb_none_
    +
    Do nothing; +
    +
    update = psb_add_
    +
    Sum overlap entries, i.e. apply $P^T$;
    -
    val
    -
    the elements to be inserted. +
    update = psb_avg_
    +
    Average overlap entries, i.e. apply $P_aP^T$; +
    +
    +Scope: global
    -Scope:local. +Intent: in.
    -Type:required. +Default: +$update\_type = psb\_avg\_ $
    -Intent: in. +Scope: global
    -Specified as: an array of size $nz$. Must be of the same type and kind -of the aspk component of the sparse matrix $a$. +Specified as: a integer variable.
    -
    desc_a
    -
    The communication descriptor. +
    work
    +
    the work array.
    -Scope: local. +Scope: local
    -Type: required. +Type: optional
    Intent: inout.
    -Specified as: a variable of type descdatapsb_desc_type. -
    -
    +Specified as: a one dimensional array of the same type of $x$.

    -

    +
    On Return
    -
    a
    -
    the matrix into which elements will be inserted. +
    x
    +
    global dense result matrix $x$.
    -Scope:local +Scope: local
    -Type:required +Type: required
    Intent: inout.
    -Specified as: a structured data of type spdatapsb_spmat_type. +Specified as: an array of rank one or two +containing numbers of type specified in +Table 14.
    -
    desc_a
    -
    The communication descriptor. -
    -Scope: local. -
    -Type: required. -
    -Intent: inout. -
    -Specified as: a variable of type descdatapsb_desc_type. -
    info
    Error code.
    @@ -183,54 +262,498 @@ 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. If there is no overlap in the data distribution associated with + the descriptor, no operations are performed;
    3. -
    4. On entry to this routine the sparse matrix may be in either the - build or update state. +
    5. The operator $ P^{T}$ performs the reduction sum of overlap +elements; it is a ``prolongation'' operator $P^T$ that +replicates overlap elements, accounting for the physical replication +of data;
    6. -
    7. 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. -
    8. -
    9. Any coefficients from matrix rows not assigned to the calling - process are silently ignored; -
    10. -
    11. If the descriptor is in the assembled state, then any entries in - the sparse matrix that would generate additional communication - requirements will be ignored; -
    12. -
    13. If the matrix is in the update state, any entries in positions - that were not present in the original matrix will be ignored. +
    14. The operator $ P_a$ 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.
    +

    + +

    + + + +
    Figure 8: +Sample discretization mesh.
    +
    +\includegraphics[scale=0.65]{figures/try8x8_ov.eps} + + +\rotatebox{-90}{\includegraphics[scale=0.65]{figures/try8x8_ov}} + +
    +
    + +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
    + I GLOB(I) X(I)   I GLOB(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.0   10 42 2.0
    + 11 11 1.0   11 43 2.0
    + 12 12 1.0   12 44 2.0
    + 13 13 1.0   13 45 2.0
    + 14 14 1.0   14 46 2.0
    + 15 15 1.0   15 47 2.0
    + 16 16 1.0   16 48 2.0
    + 17 17 1.0   17 49 2.0
    + 18 18 1.0   18 50 2.0
    + 19 19 1.0   19 51 2.0
    + 20 20 1.0   20 52 2.0
    + 21 21 1.0   21 53 2.0
    + 22 22 1.0   22 54 2.0
    + 23 23 1.0   23 55 2.0
    + 24 24 1.0   24 56 2.0
    + 25 25 1.5   25 57 2.0
    + 26 26 1.5   26 58 2.0
    + 27 27 1.5   27 59 2.0
    + 28 28 1.5   28 60 2.0
    + 29 29 1.5   29 61 2.0
    + 30 30 1.5   30 62 2.0
    + 31 31 1.5   31 63 2.0
    + 32 32 1.5   32 64 2.0
    + 33 33 1.5   33 25 1.5
    + 34 34 1.5   34 26 1.5
    + 35 35 1.5   35 27 1.5
    + 36 36 1.5   36 28 1.5
    + 37 37 1.5   37 29 1.5
    + 38 38 1.5   38 30 1.5
    + 39 39 1.5   39 31 1.5
    + 40 40 1.5   40 32 1.5
    + 41 41 2.0   41 17 1.0
    + 42 42 2.0   42 18 1.0
    + 43 43 2.0   43 19 1.0
    + 44 44 2.0   44 20 1.0
    + 45 45 2.0   45 21 1.0
    + 46 46 2.0   46 22 1.0
    + 47 47 2.0   47 23 1.0
    + 48 48 2.0   48 24 1.0
    +
    +


    - next - + up - previous - contents
    - Next: psb_spasb Sparse - Up: Data management routines - Previous: psb_spall Allocates -   Next: psb_gather Gather + Up: Communication routines + Previous: psb_halo Halo +   Contents diff --git a/docs/html/node53.html b/docs/html/node53.html index 645f2d12..3066418e 100644 --- a/docs/html/node53.html +++ b/docs/html/node53.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_spasb -- Sparse matrix assembly routine - +psb_gather -- Gather Global Dense Matrix + @@ -20,44 +20,135 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_spfree Frees - Up: Data management routines - Previous: psb_spins Insert -   Next: psb_scatter Scatter + Up: Communication routines + Previous: psb_ovrl Overlap +   Contents

    -

    -psb_spasb -- Sparse matrix assembly routine +

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

    +

    +
    + + +\begin{displaymath}glob\_x \leftarrow collect(loc\_x_i) \end{displaymath} +
    +
    +

    +where: +
    +
    $glob\_x$
    +
    is the global submatrix +$glob\_x_{1:m,1:n}$ +
    +
    $loc\_x_i$
    +
    is the local portion of global dense matrix on +process $i$. +
    +
    $collect$
    +
    is the collect function. +
    +
    + +

    +

    +
    + + + +
    Table 15: +Data types
    +
    + + + + + + + + + + + + + + + + + + + +
    $x_i, y$Subroutine
    Integerpsb_gather
    Short Precision Realpsb_gather
    Long Precision Realpsb_gather
    Short Precision Complexpsb_gather
    Long Precision Complexpsb_gather
    +
    +
    +

    +
    +

    -call psb_spasb(a, desc_a, info, afmt, upd, dupl)
    +call psb_gather(glob_x, loc_x, desc_a, info, root)
    +call psb_gather(glob_x, loc_x, desc_a, info, root)
     

    @@ -68,68 +159,70 @@ call psb_spasb(a, desc_a, info, afmt, upd, dupl)

    On Entry
    -
    desc_a
    -
    the communication descriptor. -
    -Scope:local. +
    loc_x
    +
    the local portion of global dense matrix +$glob\_x$.
    -Type:required. -
    -Intent: in. -
    -Specified as: a structured data of type descdatapsb_desc_type. -
    -
    afmt
    -
    the storage format for the sparse matrix. -
    -Scope: global. +Scope: local
    -Type: optional. +Type: required
    Intent: in.
    -Specified as: an array of characters. Defalt: 'CSR'. +Specified as: a rank one or two array containing numbers of the type +indicated in Table 15.
    -
    upd
    -
    Provide for updates to the matrix coefficients. +
    desc_a
    +
    contains data structures for communications.
    -Scope: global. +Scope: local
    -Type: optional. +Type: required
    Intent: in.
    -Specified as: integer, possible values: psb_upd_srch_, psb_upd_perm_ +Specified as: a structured data of type descdatapsb_desc_type.
    -
    dupl
    -
    How to handle duplicate coefficients. +
    root
    +
    The process that holds the global copy. If $root=-1$ all + the processes will have a copy of the global vector.
    -Scope: global. +Scope: global
    -Type: optional. +Type: optional
    Intent: in.
    -Specified as: integer, possible values: psb_dupl_ovwrt_, -psb_dupl_add_, psb_dupl_err_. +Specified as: an integer variable +$-1\le root\le np-1$, default $-1$.
    -
    - -

    -

    On Return
    -
    a
    -
    the matrix to be assembled. +
    glob_x
    +
    The array where the local parts must be gathered.
    -Scope:local +Scope: global
    -Type:required +Type: required
    -Intent: inout. +Intent: out.
    -Specified as: a structured data of type spdatapsb_spmat_type. +Specified as: a rank one or two array.
    info
    Error code. @@ -144,52 +237,29 @@ 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. On exit from this routine the matrix is in the assembled state, - and thus is suitable for the computational routines. -
    10. -
    -


    - next - + up - previous - contents
    - Next: psb_spfree Frees - Up: Data management routines - Previous: psb_spins Insert -   Next: psb_scatter Scatter + Up: Communication routines + Previous: psb_ovrl Overlap +   Contents diff --git a/docs/html/node54.html b/docs/html/node54.html index b20062ac..36f43dcc 100644 --- a/docs/html/node54.html +++ b/docs/html/node54.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_spfree -- Frees a sparse matrix - +psb_scatter -- Scatter Global Dense Matrix + @@ -18,46 +18,135 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + - next - + up - previous - contents
    - Next: psb_sprn Reinit - Up: Data management routines - Previous: psb_spasb Sparse -   Next: Data management routines + Up: Communication routines + Previous: psb_gather Gather +   Contents

    -

    -psb_spfree -- Frees a sparse matrix +

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

    +

    +
    + + +\begin{displaymath}loc\_x_i \leftarrow scatter(glob\_x) \end{displaymath} +
    +
    +

    +where: +
    +
    $glob\_x$
    +
    is the global matrix +$glob\_x_{1:m,1:n}$ +
    +
    $loc\_x_i$
    +
    is the local portion of global dense matrix on +process $i$. +
    +
    $scatter$
    +
    is the scatter function. +
    +
    + +

    +

    +
    + + + +
    Table 16: +Data types
    +
    + + + + + + + + + + + + + + + + + + + +
    $x_i, y$Subroutine
    Integerpsb_scatter
    Short Precision Realpsb_scatter
    Long Precision Realpsb_scatter
    Short Precision Complexpsb_scatter
    Long Precision Complexpsb_scatter
    +
    +
    +

    +
    +

    -call psb_spfree(a, desc_a, info)
    +call psb_scatter(glob_x, loc_x, desc_a, info, root)
    +call psb_scatter(glob_x, loc_x, desc_a, info, root)
     

    @@ -68,35 +157,71 @@ call psb_spfree(a, desc_a, info)

    On Entry
    -
    a
    -
    the matrix to be freed. +
    glob_x
    +
    The array that must be scattered into local pieces.
    -Scope:local +Scope: global
    -Type:required +Type: required
    -Intent: inout. +Intent: in.
    -Specified as: a structured data of type spdatapsb_spmat_type. +Specified as: a rank one or two array.
    desc_a
    -
    the communication descriptor. +
    contains data structures for communications.
    -Scope:local. +Scope: local
    -Type:required. +Type: required
    Intent: in.
    Specified as: a structured data of type descdatapsb_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\le root\le np-1$, default $-1$. +
    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 array containing numbers of the type +indicated in Table 16. +
    info
    Error code.
    @@ -111,7 +236,30 @@ An integer value; 0 means no error has been detected.

    -


    +
    + + +next + +up + +previous + +contents +
    + Next: Data management routines + Up: Communication routines + Previous: psb_gather Gather +   Contents + diff --git a/docs/html/node55.html b/docs/html/node55.html index 27c4e778..789becdb 100644 --- a/docs/html/node55.html +++ b/docs/html/node55.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_sprn -- Reinit sparse matrix structure for psblas routines. - +Data management routines + @@ -18,118 +18,113 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
    - Next: psb_geall Allocates - Up: Data management routines - Previous: psb_spfree Frees -   Next: psb_cdall Allocates + Up: userhtml + Previous: psb_scatter Scatter +   Contents

    -

    -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 spdatapsb_spmat_type. -
    -
    desc_a
    -
    the communication descriptor. -
    -Scope:local. -
    -Type:required. -
    -Intent: in. +

    +
    -Specified as: a structured data of type descdatapsb_desc_type. -

    -
    clear
    -
    Choose whether to zero out matrix coefficients -
    -Scope:local. -
    -Type:optional. -
    -Intent: in. -
    -Default: true. -
    -
    +Data management routines +

    -

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

    + +Subsections -

    +

    +

    diff --git a/docs/html/node56.html b/docs/html/node56.html index 3c7cfdd7..8917d80f 100644 --- a/docs/html/node56.html +++ b/docs/html/node56.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_geall -- Allocates a dense matrix - +psb_cdall -- Allocates a communication descriptor + @@ -20,100 +20,189 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_geins Dense - Up: Data management routines - Previous: psb_sprn Reinit -   Next: psb_cdins Communication + Up: Data management routines + Previous: Data management routines +   Contents

    -

    -psb_geall -- Allocates a dense matrix +

    +psb_cdall -- Allocates a communication descriptor

    -call psb_geall(x, desc_a, info, n, lb)
    +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=.true.])
    +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.
    -
    On Entry
    -
    +
    icontxt
    +
    the communication context. +
    +Scope:global. +
    +Type:required. +
    +Intent: in. +
    +Specified as: an integer value.
    -
    desc_a
    -
    The communication descriptor. +
    vg
    +
    Data allocation: each index +$i\in \{1\dots mg\}$ is allocated + to process $vg(i)$.
    -Scope: local +Scope:global.
    -Type: required +Type:optional.
    Intent: in.
    -Specified as: a variable of type descdatapsb_desc_type. -
    -
    n
    -
    The number of columns of the dense matrix to be allocated. +Specified as: an integer array. +
    +
    flag
    +
    Specifies whether entries in $vg$ are zero- or one-based.
    -Scope: local +Scope:global.
    -Type: optional +Type:optional.
    Intent: in.
    -Specified as: Integer scalar, default $0,1$, default $1$. It is not a valid argument if $x$ is a -rank-1 array. + SRC="img88.png" + ALT="$0$">. + +

    -
    lb
    -
    The lower bound for the column index range of the dense matrix to be allocated. +
    mg
    +
    the (global) number of rows of the problem.
    -Scope: local +Scope:global.
    -Type: optional +Type:optional.
    Intent: in.
    -Specified as: Integer scalar, default $1$. It is not a valid argument if $x$ is a -rank-1 array. +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: .true.
    @@ -122,18 +211,17 @@ rank-1 array.
    On Return
    -
    x
    -
    The dense matrix to be allocated. +
    desc_a
    +
    the communication descriptor.
    -Scope: local +Scope:local.
    -Type: required +Type:required.
    Intent: out.
    -Specified as: a rank one or two array with the ALLOCATABLE -attribute, of type real, complex or integer. -
    +Specified as: a structured data of type descdatapsb_desc_type. +
    info
    Error code.
    @@ -148,7 +236,189 @@ 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\le 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\in \{1\dots mg\}$ is assigned to process $vg(i)$. + The vector vg must be identical on all + calling processes; its entries may have the ranges $(0\dots np-1)$ + or $(1\dots np)$ 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 $(1\dots mg)$ 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. +
      +
      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 $N_I=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. +
    14. +
    + +

    +


    + + +next + +up + +previous + +contents +
    + Next: psb_cdins Communication + Up: Data management routines + Previous: Data management routines +   Contents + diff --git a/docs/html/node57.html b/docs/html/node57.html index f8a07e95..06b28b64 100644 --- a/docs/html/node57.html +++ b/docs/html/node57.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_geins -- Dense matrix insertion routine - +psb_cdins -- Communication descriptor insert routine + @@ -20,46 +20,52 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_geasb Assembly - Up: Data management routines - Previous: psb_geall Allocates -   Next: psb_cdasb Communication + Up: Data management routines + Previous: psb_cdall Allocates +   Contents

    -

    -psb_geins -- Dense matrix insertion routine +

    +psb_cdins -- Communication descriptor insert routine

    -call psb_geins(m, irw, val, x, desc_a, info,dupl)
    +call psb_cdins(nz, ia, ja, desc_a, info)
     
    +

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

    Type:
    @@ -68,75 +74,44 @@ call psb_geins(m, irw, val, x, desc_a, info,dupl)
    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. +
    nz
    +
    the number of points being inserted.
    -Scope:local. +Scope: local.
    -Type:required. +Type: required.
    Intent: in.
    -Specified as: a rank 1 or 2 array. Specified as: an integer value.
    -
    desc_a
    -
    the communication descriptor. +
    ia
    +
    the indices of the starting vertex of the edges being inserted.
    -Scope:local. +Scope: local.
    -Type:required. +Type: required.
    Intent: in.
    -Specified as: a structured data of type descdatapsb_desc_type. +Specified as: an integer array of length $nz$.
    -
    dupl
    -
    How to handle duplicate coefficients. +
    ja
    +
    the indices of the end vertex of the edges being inserted.
    -Scope: global. +Scope: local.
    -Type: optional. +Type: required.
    Intent: in.
    -Specified as: integer, possible values: psb_dupl_ovwrt_, -psb_dupl_add_. +Specified as: an integer array of length $nz$.
    @@ -145,18 +120,17 @@ Specified as: integer, possible values: psb_dupl_ovwrt_,
    On Return
    -
    x
    -
    the output dense matrix. +
    desc_a
    +
    the updated communication descriptor.
    -Scope: local +Scope:local.
    -Type: required +Type:required.
    Intent: inout.
    -Specified as: a rank one or two array with the ALLOCATABLE -attribute, of type real, complex or integer. -
    +Specified as: a structured data of type descdatapsb_desc_type. +
    info
    Error code.
    @@ -169,41 +143,41 @@ Intent: out. An integer value; 0 means no error has been detected.
    - -

    Notes

      -
    1. Dense vectors/matrices do not have an associated state; +
    2. This routine may only be called if the descriptor is in the + build state;
    3. -
    4. Duplicate entries are either overwritten or added, there is no - provision for raising an error condition. +
    5. 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.


    - next - + up - previous - contents
    - Next: psb_geasb Assembly - Up: Data management routines - Previous: psb_geall Allocates -   Next: psb_cdasb Communication + Up: Data management routines + Previous: psb_cdall Allocates +   Contents diff --git a/docs/html/node58.html b/docs/html/node58.html index 70d5c058..e69857e5 100644 --- a/docs/html/node58.html +++ b/docs/html/node58.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_geasb -- Assembly a dense matrix - +psb_cdasb -- Communication descriptor assembly routine + @@ -20,44 +20,44 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_gefree Frees - Up: Data management routines - Previous: psb_geins Dense -   Next: psb_cdcpy Copies + Up: Data management routines + Previous: psb_cdins Communication +   Contents

    -

    -psb_geasb -- Assembly a dense matrix +

    +psb_cdasb -- Communication descriptor assembly routine

    -call psb_geasb(x, desc_a, info)
    +call psb_cdasb(desc_a, info)
     

    @@ -69,16 +69,16 @@ call psb_geasb(x, desc_a, info)

    desc_a
    -
    The communication descriptor. +
    the communication descriptor.
    -Scope: local +Scope:local.
    -Type: required +Type:required.
    -Intent: in. +Intent: inout.
    -Specified as: a variable of type descdatapsb_desc_type. -
    +Specified as: a structured data of type descdatapsb_desc_type. +

    @@ -86,18 +86,17 @@ Specified as: a variable of type descdatapsb_desc_type.

    On Return
    -
    x
    -
    The dense matrix to be assembled. +
    desc_a
    +
    the communication descriptor.
    -Scope: local +Scope:local.
    -Type: required +Type:required.
    Intent: inout.
    -Specified as: a rank one or two array with the ALLOCATABLE -attribute, of type real, complex or integer. -
    +Specified as: a structured data of type descdatapsb_desc_type. +
    info
    Error code.
    @@ -110,6 +109,15 @@ 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. +
    2. +
    + +



    diff --git a/docs/html/node59.html b/docs/html/node59.html index 5be73a71..81fe7c90 100644 --- a/docs/html/node59.html +++ b/docs/html/node59.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_gefree -- Frees a dense matrix - +psb_cdcpy -- Copies a communication descriptor + @@ -20,80 +20,67 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_gelp Applies - Up: Data management routines - Previous: psb_geasb Assembly -   Next: psb_cdfree Frees + Up: Data management routines + Previous: psb_cdasb Communication +   Contents

    -

    -psb_gefree -- Frees a dense matrix +

    +psb_cdcpy -- Copies a communication descriptor

    -call psb_gefree(x, desc_a, info)
    +call psb_cdcpy(desc_in, desc_out, info)
     

    Type:
    -
    Synchronous. +
    Asynchronous.
    On Entry
    -
    x
    -
    The dense matrix to - be freed. +
    desc_in
    +
    the communication descriptor.
    -Scope: local -
    -Type: required +Scope:local.
    -Intent: inout. +Type:required.
    -Specified as: a rank one or two array with the ALLOCATABLE -attribute, of type real, complex or integer. +Intent: in.
    +Specified as: a structured data of type descdatapsb_desc_type. +

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

    @@ -101,6 +88,17 @@ Specified as: a variable of type descdatapsb_desc_type.

    On Return
    +
    desc_out
    +
    the communication descriptor copy. +
    +Scope:local. +
    +Type:required. +
    +Intent: out. +
    +Specified as: a structured data of type descdatapsb_desc_type. +
    info
    Error code.
    diff --git a/docs/html/node6.html b/docs/html/node6.html index dc86daf7..af78326b 100644 --- a/docs/html/node6.html +++ b/docs/html/node6.html @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Next: Programming model - Up: Up: General overview - Previous: Previous: Library contents -   Contents

    @@ -62,7 +62,7 @@ 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 $1\dots n$ is isomorphic to the set of cell centers, whereas the pattern of the associated linear system matrix is @@ -73,7 +73,7 @@ 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) @@ -82,7 +82,7 @@ parallel machine.

    The index space is partitioned among processes, and this creates a mapping from the ``global'' numbering $1\dots n$ to a numbering ``local'' to each process; each process $1\dots n_{\hbox{row}_i}$, each element of which corresponds to a certain element of $1\dots n$. The user does not set explicitly this mapping; when the application needs to indicate to which element of the index @@ -107,7 +107,7 @@ library will translate into the appropriate ``local'' numbering.

    For a given index space $1\dots n$ there are many possible associated topologies, i.e. many different discretization stencils; thus the @@ -174,7 +174,7 @@ follows: This is the structure of the sample program -test/pargen/ppde90.f90. +test/pargen/ppde.f90.

    For a simulation in which the same discretization mesh is used over @@ -244,26 +244,26 @@ from optimal.


    - next - up - previous - contents
    - Next: Next: Programming model - Up: Up: General overview - Previous: Previous: Library contents -   Contents diff --git a/docs/html/node60.html b/docs/html/node60.html index 5438798f..0d218d1d 100644 --- a/docs/html/node60.html +++ b/docs/html/node60.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_gelp -- Applies a left permutation to a dense matrix - +psb_cdfree -- Frees a communication descriptor + @@ -20,100 +20,65 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_glob_to_loc Global - Up: Data management routines - Previous: psb_gefree Frees -   Next: psb_cdbldext Build + Up: Data management routines + Previous: psb_cdcpy Copies +   Contents

    -

    -psb_gelp -- Applies a left permutation to a dense - matrix +

    +psb_cdfree -- Frees a communication descriptor

    -call psb_gelp(trans, iperm, x, info)
    +call psb_cdfree(desc_a, info)
     

    Type:
    -
    Asynchronous. +
    Synchronous.
    On Entry
    -
    trans
    -
    A character that specifies whether to permute $A$ or $A^T$. +
    desc_a
    +
    the communication descriptor to be freed.
    -Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a single character with value 'N' for $A$ or 'T' for $A^T$. -
    -
    iperm
    -
    An integer array containing permutation information. -
    -Scope: local +Scope:local.
    -Type: required -
    -Intent: in. -
    -Specified as: an integer one-dimensional array. -
    -
    x
    -
    The dense matrix to be permuted. -
    -Scope: local -
    -Type: required +Type:required.
    Intent: inout.
    -Specified as: a one or two dimensional array. -
    +Specified as: a structured data of type descdatapsb_desc_type. +

    diff --git a/docs/html/node61.html b/docs/html/node61.html index 14ebdb5a..4ae23ddc 100644 --- a/docs/html/node61.html +++ b/docs/html/node61.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_glob_to_loc -- Global to local indices convertion - +psb_cdbldext -- Build an extended communication descriptor + @@ -20,67 +20,68 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_loc_to_glob Local - Up: Data management routines - Previous: psb_gelp Applies -   Next: psb_spall Allocates + Up: Data management routines + Previous: psb_cdfree Frees +   Contents

    -

    -psb_glob_to_loc -- Global to local indices - convertion +

    +psb_cdbldext -- Build an extended communication + descriptor

    -call psb_glob_to_loc(x, y, desc_a, info, iact,owned)
    -call psb_glob_to_loc(x, desc_a, info, iact,owned)
    +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:
    -
    Asynchronous. +
    Synchronous.
    On Entry
    -
    x
    -
    An integer vector of indices to be converted. -
    -Scope: local +
    a
    +
    A sparse matrix +Scope:local.
    -Type: required +Type:required.
    -Intent: in, inout. +Intent: in.
    -Specified as: a rank one integer array. -
    +Specified as: a structured data type. +
    desc_a
    the communication descriptor.
    @@ -90,30 +91,35 @@ Type:required.
    Intent: in.
    -Specified as: a structured data of type descdatapsb_desc_type. +Specified as: a structured data of type spdatapsb_spmat_type.
    -
    iact
    -
    specifies action to be taken in case of range errors. -Scope: global +
    nl
    +
    the number of additional layers desired.
    -Type: optional +Scope:global. +
    +Type:required.
    Intent: in.
    -Specified as: a character variable Ignore, Warning or -Abort, default Ignore. +Specified as: an integer value $nl\ge 0$.
    -
    owned
    -
    Specfies valid range of input -Scope: global +
    extype
    +
    the kind of estension required. +
    +Scope:global.
    -Type: optional +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. +Specified as: an integer value +psb_ovt_xhal_, psb_ovt_asov_, default: psb_ovt_xhal_ + +

    @@ -122,43 +128,16 @@ accepted. Default: false.
    On Return
    -
    x
    -
    If $y$ is not present, - then $x$ is overwritten with the translated integer indices. -Scope: global -
    -Type: required +
    desc_out
    +
    the extended communication descriptor.
    -Intent: inout. +Scope:local.
    -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 +Type:required.
    -Intent: out. +Intent: inout.
    -Specified as: a rank one integer array. +Specified as: a structured data of type descdatapsb_desc_type.
    info
    Error code. @@ -177,37 +156,43 @@ 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. 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;
    3. -
    4. The default Ignore means that the negative output is the - only action taken on an out-of-range input. +
    5. 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.


    - next - + up - previous - contents
    - Next: psb_loc_to_glob Local - Up: Data management routines - Previous: psb_gelp Applies -   Next: psb_spall Allocates + Up: Data management routines + Previous: psb_cdfree Frees +   Contents diff --git a/docs/html/node62.html b/docs/html/node62.html index 2023f791..5031e56e 100644 --- a/docs/html/node62.html +++ b/docs/html/node62.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_loc_to_glob -- Local to global indices conversion - +psb_spall -- Allocates a sparse matrix + @@ -20,67 +20,54 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_is_owned - Up: Data management routines - Previous: psb_glob_to_loc Global -   Next: psb_spins Insert + Up: Data management routines + Previous: psb_cdbldext Build +   Contents

    -

    -psb_loc_to_glob -- Local to global indices - conversion +

    +psb_spall -- Allocates a sparse matrix

    -call psb_loc_to_glob(x, y, desc_a, info, iact)
    -call psb_loc_to_glob(x, desc_a, info, iact)
    +call psb_spall(a, desc_a, info, nnz)
     

    Type:
    -
    Asynchronous. +
    Synchronous.
    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.
    @@ -92,16 +79,17 @@ Intent: in.
    Specified as: a structured data of type descdatapsb_desc_type.
    -
    iact
    -
    specifies action to be taken in case of range errors. -Scope: global +
    nnz
    +
    An estimate of the number of nonzeroes in the local + part of the assembled matrix.
    -Type: optional +Scope: global. +
    +Type: optional.
    Intent: in.
    -Specified as: a character variable Ignore, Warning or -Abort, default Ignore. +Specified as: an integer value.
    @@ -110,43 +98,16 @@ Specified as: a character variable Ignore, Warning or
    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 +
    a
    +
    the matrix to be allocated. +
    +Scope:local +
    +Type:required
    Intent: out.
    -Specified as: a rank one integer array. +Specified as: a structured data of type spdatapsb_spmat_type.
    info
    Error code. @@ -160,30 +121,47 @@ Intent: out. An integer value; 0 means no error has been detected.
    +Notes + +
      +
    1. On exit from this routine the sparse matrix is in the build + state. +
    2. +
    3. The descriptor may be in either the build or assembled state. +
    4. +
    5. Providing a good estimate for the number of nonzeroes $nnz$ in + the assembled matrix may substantially improve performance in the + matrix build phase, as it will reduce or eliminate the need for + (potentially multiple) data reallocations. +
    6. +


    - next - + up - previous - contents
    - Next: psb_is_owned - Up: Data management routines - Previous: psb_glob_to_loc Global -   Next: psb_spins Insert + Up: Data management routines + Previous: psb_cdbldext Build +   Contents diff --git a/docs/html/node63.html b/docs/html/node63.html index 8d314d3f..aaf0460b 100644 --- a/docs/html/node63.html +++ b/docs/html/node63.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_is_owned - +psb_spins -- Insert a cloud of elements into a sparse matrix + @@ -20,44 +20,45 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_owned_index - Up: Data management routines - Previous: psb_loc_to_glob Local -   Next: psb_spasb Sparse + Up: Data management routines + Previous: psb_spall Allocates +   Contents

    -

    -psb_is_owned +

    +psb_spins -- Insert a cloud of elements into a sparse + matrix

    -call psb_is_owned(x, desc_a)
    +call psb_spins(nz, ia, ja, val, a, desc_a, info)
     

    @@ -68,19 +69,47 @@ call psb_is_owned(x, desc_a)

    On Entry
    -
    x
    -
    Integer index. +
    nz
    +
    the number of elements to be inserted.
    -Scope: local +Scope:local.
    -Type: required +Type:required.
    Intent: in.
    -Specified as: a scalar integer. -
    -
    desc_a
    -
    the communication descriptor. +Specified as: an integer scalar. +
    +
    ia
    +
    the row indices of the elements to be inserted. +
    +Scope:local. +
    +Type:required. +
    +Intent: in. +
    +Specified as: an integer array of size $nz$. +
    +
    ja
    +
    the column indices of the elements to be inserted. +
    +Scope:local. +
    +Type:required. +
    +Intent: in. +
    +Specified as: an integer array of size $nz$. +
    +
    val
    +
    the elements to be inserted.
    Scope:local.
    @@ -88,8 +117,26 @@ Type:required.
    Intent: in.
    -Specified as: a structured data of type descdatapsb_desc_type. +Specified as: an array of size $nz$. Must be of the same type and kind +of the aspk component of the sparse matrix $a$.
    +
    desc_a
    +
    The communication descriptor. +
    +Scope: local. +
    +Type: required. +
    +Intent: inout. +
    +Specified as: a variable of type descdatapsb_desc_type. +

    @@ -97,32 +144,95 @@ Specified as: a structured data of type descdatapsb_desc_type.

    On Return
    -
    Function value
    -
    A logical mask which is true if - $x$ is owned by the current process +
    a
    +
    the matrix into which elements will be inserted. +
    +Scope:local +
    +Type:required +
    +Intent: inout. +
    +Specified as: a structured data of type spdatapsb_spmat_type. +
    +
    desc_a
    +
    The communication descriptor. +
    +Scope: local. +
    +Type: required. +
    +Intent: inout. +
    +Specified as: a variable of type descdatapsb_desc_type. +
    +
    info
    +
    Error code. +
    Scope: local
    -Type: required +Type: required
    Intent: out. -
    +
    +An integer value; 0 means no error has been detected. +

    Notes

      -
    1. This routine returns a .true. value for an index - that is strictly owned by the current process, excluding the halo - indices +
    2. On entry to this routine the descriptor may be in either the + build or assembled state. +
    3. +
    4. On entry to this routine the sparse matrix may be in either the + build or update state. +
    5. +
    6. 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. +
    7. +
    8. Any coefficients from matrix rows not assigned to the calling + process are silently ignored; +
    9. +
    10. If the descriptor is in the assembled state, then any entries in + the sparse matrix that would generate additional communication + requirements will be ignored; +
    11. +
    12. If the matrix is in the update state, any entries in positions + that were not present in the original matrix will be ignored.

    -


    +
    + + +next + +up + +previous + +contents +
    + Next: psb_spasb Sparse + Up: Data management routines + Previous: psb_spall Allocates +   Contents + diff --git a/docs/html/node64.html b/docs/html/node64.html index effa9e8e..bd125e03 100644 --- a/docs/html/node64.html +++ b/docs/html/node64.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_owned_index - +psb_spasb -- Sparse matrix assembly routine + @@ -20,65 +20,54 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_is_local - Up: Data management routines - Previous: psb_is_owned -   Next: psb_spfree Frees + Up: Data management routines + Previous: psb_spins Insert +   Contents

    -

    -psb_owned_index +

    +psb_spasb -- Sparse matrix assembly routine

    -call psb_owned_index(y, x, desc_a, info)
    +call psb_spasb(a, desc_a, info, afmt, upd, dupl)
     

    Type:
    -
    Asynchronous. +
    Synchronous.
    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.
    @@ -90,16 +79,39 @@ Intent: in.
    Specified as: a structured data of type descdatapsb_desc_type.
    -
    iact
    -
    specifies action to be taken in case of range errors. -Scope: global +
    afmt
    +
    the storage format for the sparse matrix. +
    +Scope: global. +
    +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 +Type: optional.
    Intent: in.
    -Specified as: a character variable Ignore, Warning or -Abort, default Ignore. +Specified as: integer, possible values: psb_dupl_ovwrt_, +psb_dupl_add_, psb_dupl_err_.
    @@ -108,19 +120,16 @@ Specified as: a character variable Ignore, Warning or
    On Return
    -
    y
    -
    A logical mask which is true for all corresponding entries of - $x$ that are owned by the current process -Scope: local +
    a
    +
    the matrix to be assembled.
    -Type: required +Scope:local
    -Intent: out. +Type:required +
    +Intent: inout.
    -Specified as: a scalar or rank one logical array. +Specified as: a structured data of type spdatapsb_spmat_type.
    info
    Error code. @@ -139,14 +148,50 @@ 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 +
    2. On entry to this routine the descriptor must be in the + assembled state, i.e. psb_cdasb must already have been called. +
    3. +
    4. The sparse matrix may be in either the build or update state; +
    5. +
    6. 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; +
    7. +
    8. 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; +
    9. +
    10. On exit from this routine the matrix is in the assembled state, + and thus is suitable for the computational routines.

    -


    +
    + + +next + +up + +previous + +contents +
    + Next: psb_spfree Frees + Up: Data management routines + Previous: psb_spins Insert +   Contents + diff --git a/docs/html/node65.html b/docs/html/node65.html index dc100621..ede1462d 100644 --- a/docs/html/node65.html +++ b/docs/html/node65.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_is_local - +psb_spfree -- Frees a sparse matrix + @@ -20,65 +20,65 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_local_index - Up: Data management routines - Previous: psb_owned_index -   Next: psb_sprn Reinit + Up: Data management routines + Previous: psb_spasb Sparse +   Contents

    -

    -psb_is_local +

    +psb_spfree -- Frees a sparse matrix

    -call psb_is_local(x, desc_a)
    +call psb_spfree(a, desc_a, info)
     

    Type:
    -
    Asynchronous. +
    Synchronous.
    On Entry
    -
    x
    -
    Integer index. +
    a
    +
    the matrix to be freed.
    -Scope: local +Scope:local
    -Type: required +Type:required
    -Intent: in. +Intent: inout.
    -Specified as: a scalar integer. -
    +Specified as: a structured data of type spdatapsb_spmat_type. +
    desc_a
    the communication descriptor.
    @@ -97,30 +97,19 @@ Specified as: a structured data of type descdatapsb_desc_type.
    On Return
    -
    Function value
    -
    A logical mask which is true if - $x$ is local to the current process +
    info
    +
    Error code. +
    Scope: local
    -Type: required +Type: required
    Intent: out. -
    +
    +An integer value; 0 means no error has been detected. + -

    -Notes - -

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



    diff --git a/docs/html/node66.html b/docs/html/node66.html index ece8a0cd..ba0d6156 100644 --- a/docs/html/node66.html +++ b/docs/html/node66.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_local_index - +psb_sprn -- Reinit sparse matrix structure for psblas routines. + @@ -20,65 +20,66 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_get_boundary Extract - Up: Data management routines - Previous: psb_is_local -   Next: psb_geall Allocates + Up: Data management routines + Previous: psb_spfree Frees +   Contents

    -

    -psb_local_index +

    +psb_sprn -- Reinit sparse matrix structure for psblas + routines.

    -call psb_local_index(y, x, desc_a, info)
    +call psb_sprn(a, decsc_a, info, clear)
     

    Type:
    -
    Asynchronous. +
    Synchronous.
    On Entry
    -
    x
    -
    Integer indices. +
    a
    +
    the matrix to be reinitialized.
    -Scope: local +Scope:local
    -Type: required +Type:required
    -Intent: in, inout. +Intent: inout.
    -Specified as: a scalar or a rank one integer array. -
    +Specified as: a structured data of type spdatapsb_spmat_type. +
    desc_a
    the communication descriptor.
    @@ -90,16 +91,16 @@ Intent: in.
    Specified as: a structured data of type descdatapsb_desc_type.
    -
    iact
    -
    specifies action to be taken in case of range errors. -Scope: global +
    clear
    +
    Choose whether to zero out matrix coefficients +
    +Scope:local.
    -Type: optional +Type:optional.
    Intent: in.
    -Specified as: a character variable Ignore, Warning or -Abort, default Ignore. +Default: true.
    @@ -108,20 +109,6 @@ Specified as: a character variable Ignore, Warning or
    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.
    @@ -134,14 +121,11 @@ 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. +
    2. On exit from this routine the sparse matrix is in the update + state.
    diff --git a/docs/html/node67.html b/docs/html/node67.html index 7c971837..634d9fb3 100644 --- a/docs/html/node67.html +++ b/docs/html/node67.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_get_boundary -- Extract list of boundary elements - +psb_geall -- Allocates a dense matrix + @@ -20,64 +20,100 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_get_overlap Extract - Up: Data management routines - Previous: psb_local_index -   Next: psb_geins Dense + Up: Data management routines + Previous: psb_sprn Reinit +   Contents

    -

    -psb_get_boundary -- Extract list of boundary elements +

    +psb_geall -- Allocates a dense matrix

    -call psb_get_boundary(bndel, desc, info)
    +call psb_geall(x, desc_a, info, n, lb)
     

    Type:
    -
    Asynchronous. +
    Synchronous.
    On Entry
    -
    desc
    -
    the communication descriptor. +
    desc_a
    +
    The communication descriptor.
    -Scope:local. +Scope: local +
    +Type: required +
    +Intent: in.
    -Type:required. +Specified as: a variable of type descdatapsb_desc_type. +
    +
    n
    +
    The number of columns of the dense matrix to be allocated. +
    +Scope: local +
    +Type: optional
    Intent: in.
    -Specified as: a structured data of type descdatapsb_desc_type. +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.
    @@ -86,9 +122,8 @@ Specified as: a structured data of type descdatapsb_desc_type.
    On Return
    -
    bndel
    -
    The list of boundary elements on the calling process, in - local numbering. +
    x
    +
    The dense matrix to be allocated.
    Scope: local
    @@ -96,8 +131,8 @@ Type: required
    Intent: out.
    -Specified as: a rank one array with the ALLOCATABLE -attribute, of type integer. +Specified as: a rank one or two array with the ALLOCATABLE +attribute, of type real, complex or integer.
    info
    Error code. @@ -112,19 +147,6 @@ 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. -
    4. -
    -



    diff --git a/docs/html/node68.html b/docs/html/node68.html index 541a261b..797ae7f1 100644 --- a/docs/html/node68.html +++ b/docs/html/node68.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_get_overlap -- Extract list of overlap elements - +psb_geins -- Dense matrix insertion routine + @@ -20,44 +20,44 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_sp_getrow Extract - Up: Data management routines - Previous: psb_get_boundary Extract -   Next: psb_geasb Assembly + Up: Data management routines + Previous: psb_geall Allocates +   Contents

    -

    -psb_get_overlap -- Extract list of overlap elements +

    +psb_geins -- Dense matrix insertion routine

    -call psb_get_overlap(ovrel, desc, info)
    +call psb_geins(m, irw, val, x, desc_a, info,dupl)
     

    @@ -68,7 +68,54 @@ call psb_get_overlap(ovrel, desc, info)

    On Entry
    -
    desc
    +
    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. @@ -79,6 +126,18 @@ Intent: in.
    Specified as: a structured data of type descdatapsb_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_. +

    @@ -86,18 +145,17 @@ Specified as: a structured data of type descdatapsb_desc_type.

    On Return
    -
    ovrel
    -
    The list of overlap elements on the calling process, in - local numbering. +
    x
    +
    the output dense matrix.
    Scope: local
    Type: required
    -Intent: out. +Intent: inout.
    -Specified as: a rank one array with the ALLOCATABLE -attribute, of type integer. +Specified as: a rank one or two array with the ALLOCATABLE +attribute, of type real, complex or integer.
    info
    Error code. @@ -116,16 +174,38 @@ 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. Dense vectors/matrices do not have an associated state;
    3. -
    4. Otherwise the size of ovrel will be exactly equal to the - number of overlap elements. +
    5. Duplicate entries are either overwritten or added, there is no + provision for raising an error condition.

    -


    +
    + + +next + +up + +previous + +contents +
    + Next: psb_geasb Assembly + Up: Data management routines + Previous: psb_geall Allocates +   Contents + diff --git a/docs/html/node69.html b/docs/html/node69.html index 8e12aee7..3a3ec72f 100644 --- a/docs/html/node69.html +++ b/docs/html/node69.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_sp_getrow -- Extract row(s) from a sparse matrix - +psb_geasb -- Assembly a dense matrix + @@ -20,125 +20,65 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_sizeof Memory - Up: Data management routines - Previous: psb_get_overlap Extract -   Next: psb_gefree Frees + Up: Data management routines + Previous: psb_geins Dense +   Contents

    -

    -psb_sp_getrow -- Extract row(s) from a sparse matrix +

    +psb_geasb -- Assembly a dense matrix

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

    Type:
    -
    Asynchronous. +
    Synchronous.
    On Entry
    -
    row
    -
    The (first) row to be extracted. +
    desc_a
    +
    The communication descriptor.
    -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 spdatapsb_spmat_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 +Scope: local
    -Type:optional +Type: required
    Intent: in.
    -Specified as: an integer $>0$, default: $row$. - -

    -

    +Specified as: a variable of type descdatapsb_desc_type. +

    @@ -146,50 +86,18 @@ Specified as: an integer 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. +
    x
    +
    The dense matrix to be assembled.
    -Scope:local. -
    -Type:required. -
    -Intent: inout. -
    -Specified as: an integer array with the ALLOCATABLE attribute. -
    -
    val
    -
    the elements to be inserted. -
    -Scope:local. +Scope: local
    -Type:required. +Type: required
    Intent: inout.
    -Specified as: a real array with the ALLOCATABLE attribute. -
    +Specified as: a rank one or two array with the ALLOCATABLE +attribute, of type real, complex or integer. +
    info
    Error code.
    @@ -202,56 +110,7 @@ Intent: out. An integer value; 0 means no error has been detected.
    - -

    -Notes - -

      -
    1. The output $nz$ is always the size of the output generated by - the current call; thus, if append=.true., the total output - size will be $nzin+nz$, with the newly extracted coefficients stored in - entries nzin+1:nzin+nz of the array arguments; -
    2. -
    3. When append=.true. the output arrays are reallocated as - necessary; -
    4. -
    5. The row and column indices are returned in the local numbering - scheme; if the global numbering is desired, the user may employ the - psb_loc_to_glob routine on the output. -
    6. -
    - -

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_sizeof Memory - Up: Data management routines - Previous: psb_get_overlap Extract -   Contents - +

    diff --git a/docs/html/node7.html b/docs/html/node7.html index 1733c683..f85e6b2f 100644 --- a/docs/html/node7.html +++ b/docs/html/node7.html @@ -25,26 +25,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Data Structures - Up: Next: Data Structures and Classes + Up: General overview - Previous: Previous: Application structure -   Contents

    @@ -72,7 +72,7 @@ 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.5 are only acting on the local data structures, +sec. 3.5 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 @@ -96,26 +96,26 @@ as:


    - next - up - previous - contents
    - Next: Data Structures - Up: Next: Data Structures and Classes + Up: General overview - Previous: Previous: Application structure -   Contents diff --git a/docs/html/node70.html b/docs/html/node70.html index 311730e3..740b2e35 100644 --- a/docs/html/node70.html +++ b/docs/html/node70.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_sizeof -- Memory occupation - +psb_gefree -- Frees a dense matrix + @@ -20,76 +20,71 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: Sorting utilities - Up: Data management routines - Previous: psb_sp_getrow Extract -   Next: psb_gelp Applies + Up: Data management routines + Previous: psb_geasb Assembly +   Contents

    -

    -psb_sizeof -- Memory occupation +

    +psb_gefree -- Frees a dense matrix

    -

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

    -isz = psb_sizeof(a)
    -isz = psb_sizeof(desc_a)
    -isz = psb_sizeof(prec)
    +call psb_gefree(x, desc_a, info)
     

    Type:
    -
    Asynchronous. +
    Synchronous.
    On Entry
    -
    a
    -
    A sparse matrix -$A$. +
    x
    +
    The dense matrix to + be freed.
    Scope: local
    Type: required
    -Intent: in. +Intent: inout.
    -Specified as: a structured data of type spdatapsb_spmat_type. +Specified as: a rank one or two array with the ALLOCATABLE +attribute, of type real, complex or integer. +
    +

    desc_a
    -
    Communication descriptor. +
    The communication descriptor.
    Scope: local
    @@ -97,27 +92,25 @@ Type: required
    Intent: in.
    -Specified as: a structured data of type descdatapsb_desc_type. -
    -
    prec
    -
    Scope: local -
    -Type: required -
    -Intent: in. -
    -Specified as: a preconditioner data structure precdatapsb_prec_type. -
    +Specified as: a variable of type descdatapsb_desc_type. +
    +
    + +

    +

    On Return
    -
    Function value
    -
    The memory occupation of the object specified in - the calling sequence, in bytes. +
    info
    +
    Error code.
    Scope: local
    -Returned as: an integer(psb_long_int_k_) number. +Type: required +
    +Intent: out. +
    +An integer value; 0 means no error has been detected.
    diff --git a/docs/html/node71.html b/docs/html/node71.html index ffb6d548..4bf66ee1 100644 --- a/docs/html/node71.html +++ b/docs/html/node71.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Sorting utilities - +psb_gelp -- Applies a left permutation to a dense matrix + @@ -18,121 +18,102 @@ original version by: Nikos Drakos, CBLU, University of Leeds + - + - next - + up - previous - contents
    - Next: Parallel environment routines - Up: Data management routines - Previous: psb_sizeof Memory -   Next: psb_glob_to_loc Global + Up: Data management routines + Previous: psb_gefree Frees +   Contents

    -

    -Sorting utilities +

    +psb_gelp -- Applies a left permutation to a dense + matrix

    -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)
    +call psb_gelp(trans, iperm, x, info)
     

    -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
    +
    On Entry
    -
    x
    -
    The sequence to be sorted. +
    trans
    +
    A character that specifies whether to permute $A$ or $A^T$.
    -Type:required. +Scope: local
    -Specified as: an integer, real or complex array of rank 1. -
    -
    ix
    -
    A vector of indices. +Type: required
    -Type:optional. +Intent: in.
    -Specified as: an integer array of (at least) the same size as $X$. -
    -
    dir
    -
    The desired ordering. +Specified as: a single character with value 'N' for $A$ or 'T' for $A^T$. +
    +
    iperm
    +
    An integer array containing permutation information.
    -Type:optional. +Scope: local
    -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: required
    -Type:optional. +Intent: in.
    -Specified as: an integer value psb_sort_ovw_idx_ or -psb_sort_keep_idx_; default psb_sort_ovw_idx_. - -

    -

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

    @@ -140,154 +121,21 @@ Specified as: an integer value psb_sort_ovw_idx_ or

    On Return
    -
    x
    -
    The sequence of values, in the chosen ordering. +
    info
    +
    Error code.
    -Type:required. +Scope: local
    -Specified as: an integer, real or complex array of rank 1. -
    -
    ix
    -
    A vector of indices. +Type: required
    -Type: Optional +Intent: out.
    -An integer array of rank 1, whose entries are moved to the same -position as the corresponding entries in $x$. +An integer value; 0 means no error has been detected.

    - -

    -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) \leftarrow
-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(n \log 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(n^2)$; 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(n \log 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 often the preferred choice when a sorting is needed - by other routines in the library. -
      6. -
      -
    12. -
    - -

    - -

    -


    - - -next - -up - -previous - -contents -
    - Next: Parallel environment routines - Up: Data management routines - Previous: psb_sizeof Memory -   Contents - +

    diff --git a/docs/html/node72.html b/docs/html/node72.html index 1eb18f5b..13e6dc5d 100644 --- a/docs/html/node72.html +++ b/docs/html/node72.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Parallel environment routines - +psb_glob_to_loc -- Global to local indices convertion + @@ -18,88 +18,198 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
    - Next: psb_init Initializes - Up: userhtml - Previous: Sorting utilities -   Next: psb_loc_to_glob Local + Up: Data management routines + Previous: psb_gelp Applies +   Contents

    -

    - +

    +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.
    -Parallel environment routines - +Intent: in. +
    +Specified as: a structured data of type descdatapsb_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. +
    +

    -


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

    +


    + + +next + +up + +previous + +contents +
    + Next: psb_loc_to_glob Local + Up: Data management routines + Previous: psb_gelp Applies +   Contents + diff --git a/docs/html/node73.html b/docs/html/node73.html index 3d0cfa8a..40f0ad5f 100644 --- a/docs/html/node73.html +++ b/docs/html/node73.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_init -- Initializes PSBLAS parallel environment - +psb_loc_to_glob -- Local to global indices conversion + @@ -20,95 +20,88 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_info Return - Up: Parallel environment routines - Previous: Parallel environment routines -   Next: psb_is_owned + Up: Data management routines + Previous: psb_glob_to_loc Global +   Contents

    -

    -psb_init -- Initializes PSBLAS parallel environment +

    +psb_loc_to_glob -- Local to global indices + conversion

    -call psb_init(icontxt, np, basectxt, ids)
    +call psb_loc_to_glob(x, y, desc_a, info, iact)
    +call psb_loc_to_glob(x, desc_a, info, iact)
     

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

    Type:
    -
    Synchronous. +
    Asynchronous.
    -
    On Entry
    +
    On Entry
    -
    np
    -
    Number of processes in the PSBLAS virtual parallel machine. +
    x
    +
    An integer vector of indices to be converted.
    -Scope: global. +Scope: local
    -Type: optional. +Type: required
    -Intent: in. +Intent: in, inout.
    -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. +Specified as: a rank one integer array. +
    +
    desc_a
    +
    the communication descriptor.
    -Scope: global. +Scope:local.
    -Type: optional. +Type:required.
    Intent: in.
    -Specified as: an integer value. Default: use MPI_COMM_WORLD. +Specified as: a structured data of type descdatapsb_desc_type.
    -
    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. +
    iact
    +
    specifies action to be taken in case of range errors. +Scope: global
    -Type: optional. +Type: optional
    Intent: in.
    -Specified as: an integer array. Default: use the indices $(0\dots np-1)$. +Specified as: a character variable Ignore, Warning or +Abort, default Ignore.
    @@ -117,60 +110,80 @@ Specified as: an integer array. Default: use the indices 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. +
    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
    -Scope: global. +Intent: out.
    -Type: required. +Specified as: a rank one integer array. +
    +
    info
    +
    Error code. +
    +Scope: local +
    +Type: required
    Intent: out.
    -Specified as: an integer variable. +An integer value; 0 means no error has been detected.
    -

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


    - next - + up - previous - contents
    - Next: psb_info Return - Up: Parallel environment routines - Previous: Parallel environment routines -   Next: psb_is_owned + Up: Data management routines + Previous: psb_glob_to_loc Global +   Contents diff --git a/docs/html/node74.html b/docs/html/node74.html index 0661fe90..d25641fd 100644 --- a/docs/html/node74.html +++ b/docs/html/node74.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_info -- Return information about PSBLAS parallel environment - +psb_is_owned + @@ -20,68 +20,75 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_exit Exit - Up: Parallel environment routines - Previous: psb_init Initializes -   Next: psb_owned_index + Up: Data management routines + Previous: psb_loc_to_glob Local +   Contents

    -

    -psb_info -- Return information about PSBLAS parallel - environment +

    +psb_is_owned

    -call psb_info(icontxt, iam, np)
    +call psb_is_owned(x, desc_a)
     

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

    Type:
    Asynchronous.
    -
    On Entry
    +
    On Entry
    -
    icontxt
    -
    the communication context identifying the virtual - parallel machine. +
    x
    +
    Integer index.
    -Scope: global. +Scope: local
    -Type: required. +Type: required
    Intent: in.
    -Specified as: an integer variable. +Specified as: a scalar integer. +
    +
    desc_a
    +
    the communication descriptor. +
    +Scope:local. +
    +Type:required. +
    +Intent: in. +
    +Specified as: a structured data of type descdatapsb_desc_type.
    @@ -90,83 +97,32 @@ Specified as: an integer variable.
    On Return
    -
    iam
    -
    Identifier of current process in the PSBLAS virtual parallel machine. -
    -Scope: local. +
    Function value
    +
    A logical mask which is true if + $x$ is owned by the current process +Scope: local
    -Type: required. +Type: required
    Intent: out. -
    -Specified as: an integer value. -$-1 \le iam \le 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 \le iam \le 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. +
    4. This routine returns a .true. value for an index + that is strictly owned by the current process, excluding the halo + indices

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_exit Exit - Up: Parallel environment routines - Previous: psb_init Initializes -   Contents - +

    diff --git a/docs/html/node75.html b/docs/html/node75.html index c6a54eac..16e56ca5 100644 --- a/docs/html/node75.html +++ b/docs/html/node75.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_exit -- Exit from PSBLAS parallel environment - +psb_owned_index + @@ -20,79 +20,118 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_get_mpicomm Get - Up: Parallel environment routines - Previous: psb_info Return -   Next: psb_is_local + Up: Data management routines + Previous: psb_is_owned +   Contents

    -

    -psb_exit -- Exit from PSBLAS parallel environment +

    +psb_owned_index

    -call psb_exit(icontxt)
    -call psb_exit(icontxt,close)
    +call psb_owned_index(y, x, desc_a, info)
     

    -This subroutine exits from the PSBLAS parallel virtual machine.

    Type:
    -
    Synchronous. +
    Asynchronous.
    -
    On Entry
    +
    On Entry
    -
    icontxt
    -
    the communication context identifying the virtual - parallel machine. +
    x
    +
    Integer indices.
    -Scope: global. +Scope: local
    -Type: required. +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: an integer variable. +Specified as: a structured data of type descdatapsb_desc_type.
    -
    close
    -
    Whether to close all data structures related to the - virtual parallel machine, besides those associated with icontxt. -
    -Scope: global. +
    iact
    +
    specifies action to be taken in case of range errors. +Scope: global
    -Type: optional. +Type: optional
    Intent: in.
    -Specified as: a logical variable, default value: true. +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.
    @@ -100,51 +139,14 @@ 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. +
    6. This routine returns a .true. value for those indices + that are strictly owned by the current process, excluding the halo + indices

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_get_mpicomm Get - Up: Parallel environment routines - Previous: psb_info Return -   Contents - +

    diff --git a/docs/html/node76.html b/docs/html/node76.html index 590d57fe..e27dc8cc 100644 --- a/docs/html/node76.html +++ b/docs/html/node76.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_get_mpicomm -- Get the MPI communicator - +psb_is_local + @@ -20,66 +20,75 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_get_rank Get - Up: Parallel environment routines - Previous: psb_exit Exit -   Next: psb_local_index + Up: Data management routines + Previous: psb_owned_index +   Contents

    -

    -psb_get_mpicomm -- Get the MPI communicator +

    +psb_is_local

    -call psb_get_mpicomm(icontxt, icomm)
    +call psb_is_local(x, desc_a)
     

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

    Type:
    Asynchronous.
    -
    On Entry
    +
    On Entry
    -
    icontxt
    -
    the communication context identifying the virtual - parallel machine. +
    x
    +
    Integer index.
    -Scope: global. +Scope: local
    -Type: required. +Type: required
    Intent: in.
    -Specified as: an integer variable. +Specified as: a scalar integer. +
    +
    desc_a
    +
    the communication descriptor. +
    +Scope:local. +
    +Type:required. +
    +Intent: in. +
    +Specified as: a structured data of type descdatapsb_desc_type.
    @@ -88,17 +97,30 @@ Specified as: an integer variable.
    On Return
    -
    icomm
    -
    The MPI communicator associated with the PSBLAS virtual parallel machine. -
    -Scope: global. +
    Function value
    +
    A logical mask which is true if + $x$ is local to the current process +Scope: local
    -Type: required. +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 +
    2. +
    +



    diff --git a/docs/html/node77.html b/docs/html/node77.html index 1522930a..65d02b3c 100644 --- a/docs/html/node77.html +++ b/docs/html/node77.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_get_rank -- Get the MPI rank - +psb_local_index + @@ -20,86 +20,87 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_wtime Wall - Up: Parallel environment routines - Previous: psb_get_mpicomm Get -   Next: psb_get_boundary Extract + Up: Data management routines + Previous: psb_is_local +   Contents

    -

    -psb_get_rank -- Get the MPI rank +

    +psb_local_index

    -call psb_get_rank(rank, icontxt, id)
    +call psb_local_index(y, x, desc_a, info)
     

    -This subroutine returns the MPI rank of the PSBLAS process $id$

    Type:
    Asynchronous.
    -
    On Entry
    +
    On Entry
    -
    icontxt
    -
    the communication context identifying the virtual - parallel machine. +
    x
    +
    Integer indices.
    -Scope: global. +Scope: local
    -Type: required. +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: an integer variable. +Specified as: a structured data of type descdatapsb_desc_type.
    -
    id
    -
    Identifier of a process in the PSBLAS virtual parallel machine. +
    iact
    +
    specifies action to be taken in case of range errors. +Scope: global
    -Scope: local. -
    -Type: required. +Type: optional
    Intent: in.
    -Specified as: an integer value. -$0 \le id \le np-1$
    +Specified as: a character variable Ignore, Warning or +Abort, default Ignore. +

    @@ -107,20 +108,43 @@ Specified as: an integer value. -psb_wtime -- Wall clock timing - +psb_get_boundary -- Extract list of boundary elements + @@ -20,63 +20,111 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_barrier Sinchronization - Up: Parallel environment routines - Previous: psb_get_rank Get -   Next: psb_get_overlap Extract + Up: Data management routines + Previous: psb_local_index +   Contents

    -

    -psb_wtime -- Wall clock timing +

    +psb_get_boundary -- Extract list of boundary elements

    -time = psb_wtime()
    +call psb_get_boundary(bndel, desc, info)
     

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

    Type:
    Asynchronous.
    -
    On Exit
    +
    On Entry
    -
    Function value
    -
    the elapsed time in seconds. +
    desc
    +
    the communication descriptor.
    -Returned as: a real(psb_dpk_) variable. +Scope:local. +
    +Type:required. +
    +Intent: in. +
    +Specified as: a structured data of type descdatapsb_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. +
    4. +
    +



    diff --git a/docs/html/node79.html b/docs/html/node79.html index 60e904d8..2fc320ef 100644 --- a/docs/html/node79.html +++ b/docs/html/node79.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_barrier -- Sinchronization point parallel environment - +psb_get_overlap -- Extract list of overlap elements + @@ -20,71 +20,110 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_abort Abort - Up: Parallel environment routines - Previous: psb_wtime Wall -   Next: psb_sp_getrow Extract + Up: Data management routines + Previous: psb_get_boundary Extract +   Contents

    -

    -psb_barrier -- Sinchronization point parallel - environment +

    +psb_get_overlap -- Extract list of overlap elements

    -call psb_barrier(icontxt)
    +call psb_get_overlap(ovrel, desc, info)
     

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

    Type:
    -
    Synchronous. +
    Asynchronous.
    -
    On Entry
    +
    On Entry
    -
    icontxt
    -
    the communication context identifying the virtual - parallel machine. +
    desc
    +
    the communication descriptor.
    -Scope: global. +Scope:local.
    -Type: required. +Type:required.
    Intent: in.
    -Specified as: an integer variable. +Specified as: a structured data of type descdatapsb_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. +
    4. +
    +



    diff --git a/docs/html/node8.html b/docs/html/node8.html index 69c0646a..ea8b9adc 100644 --- a/docs/html/node8.html +++ b/docs/html/node8.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Data Structures - +Data Structures and Classes + @@ -18,7 +18,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Next: Descriptor data structure - Up: Up: userhtml - Previous: Previous: Programming model -   Contents

    @@ -54,7 +54,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds


    -Data Structures +Data Structures and Classes

    @@ -62,9 +62,11 @@ 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 are defined in +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. +user subroutine that makes use of the library. The preconditioners are +defined in the module psb_prec_mod

    Real and complex data types are parametrized with a kind type defined @@ -80,10 +82,19 @@ in the library as follows: data; corresponds to a DOUBLE PRECISION declaration and is normally 8 bytes. +

    psb_long_int_k_
    +
    Kind parameter for long integers, used by + the psb_sizeof utility. +
    -Moreover, the library defines a long integer kind -psb_long_int_k_ which normally corresponds to 64-bit integers; -it is only used for the psb_sizeof utility. +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.



    @@ -91,59 +102,109 @@ it is only used for the psb_sizeof utility. Subsections +
  • get_size -- Get maximum number of nonzero elements + in a sparse matrix +
  • sizeof -- Get memory occupation in bytes +of a sparse matrix +
  • get_fmt -- Short description of the dynamic type +
  • is_bld, is_upd, is_asb -- Status check +
  • Named Constants + +
    +
  • Dense Vector Data Structure + +
    +
  • Preconditioner data structure +
  • Data structure Methods + -

    +
    + + +next + +up + +previous + +contents +
    + Next: Descriptor data structure + Up: userhtml + Previous: Programming model +   Contents + diff --git a/docs/html/node80.html b/docs/html/node80.html index be179d4d..07979b43 100644 --- a/docs/html/node80.html +++ b/docs/html/node80.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_abort -- Abort a computation - +psb_sp_getrow -- Extract row(s) from a sparse matrix + @@ -20,71 +20,238 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_bcast Broadcast - Up: Parallel environment routines - Previous: psb_barrier Sinchronization -   Next: psb_sizeof Memory + Up: Data management routines + Previous: psb_get_overlap Extract +   Contents

    -

    -psb_abort -- Abort a computation +

    +psb_sp_getrow -- Extract row(s) from a sparse matrix

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

    -This subroutine aborts computation on the parallel virtual machine.

    Type:
    Asynchronous.
    -
    On Entry
    +
    On Entry
    -
    icontxt
    -
    the communication context identifying the virtual - parallel machine. +
    row
    +
    The (first) row to be extracted.
    -Scope: global. +Scope:local
    -Type: required. +Type:required
    Intent: in.
    -Specified as: an integer variable. +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 spdatapsb_spmat_type. +
    +
    append
    +
    Whether to append or overwrite existing output. +
    +Scope:local +
    +Type:optional +
    +Intent: in. +
    +Specified as: a logical value default: false (overwrite). +
    +
    nzin
    +
    Input size to be appended to. +
    +Scope:local +
    +Type:optional +
    +Intent: in. +
    +Specified as: an integer $>0$. When append is true, specifies how many +entries in the output vectors are already filled. +
    +
    lrw
    +
    The last row to be extracted. +
    +Scope:local +
    +Type:optional +
    +Intent: in. +
    +Specified as: an integer $>0$, default: $row$. + +

    -


    +
    +
    On Return
    +
    +
    +
    nz
    +
    the number of elements returned by this call. +
    +Scope:local. +
    +Type:required. +
    +Intent: out. +
    +Returned as: an integer scalar. +
    +
    ia
    +
    the row indices. +
    +Scope:local. +
    +Type:required. +
    +Intent: inout. +
    +Specified as: an integer array with the ALLOCATABLE attribute. +
    +
    ja
    +
    the column indices of the elements to be inserted. +
    +Scope:local. +
    +Type:required. +
    +Intent: inout. +
    +Specified as: an integer array with the ALLOCATABLE attribute. +
    +
    val
    +
    the elements to be inserted. +
    +Scope:local. +
    +Type:required. +
    +Intent: inout. +
    +Specified as: a real array with the ALLOCATABLE attribute. +
    +
    info
    +
    Error code. +
    +Scope: local +
    +Type: required +
    +Intent: out. +
    +An integer value; 0 means no error has been detected. +
    +
    + +

    +Notes + +

      +
    1. The output $nz$ is always the size of the output generated by + the current call; thus, if append=.true., the total output + size will be $nzin+nz$, with the newly extracted coefficients stored in + entries nzin+1:nzin+nz of the array arguments; +
    2. +
    3. When append=.true. the output arrays are reallocated as + necessary; +
    4. +
    5. The row and column indices are returned in the local numbering + scheme; if the global numbering is desired, the user may employ the + psb_loc_to_glob routine on the output. +
    6. +
    + +

    +


    + + +next + +up + +previous + +contents +
    + Next: psb_sizeof Memory + Up: Data management routines + Previous: psb_get_overlap Extract +   Contents + diff --git a/docs/html/node81.html b/docs/html/node81.html index 8e69eaca..c4949781 100644 --- a/docs/html/node81.html +++ b/docs/html/node81.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_bcast -- Broadcast data - +psb_sizeof -- Memory occupation + @@ -20,143 +20,109 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_sum Global - Up: Parallel environment routines - Previous: psb_abort Abort -   Next: Sorting utilities + Up: Data management routines + Previous: psb_sp_getrow Extract +   Contents

    -

    -psb_bcast -- Broadcast data +

    +psb_sizeof -- Memory occupation

    +

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

    -call psb_bcast(icontxt, dat, root)
    +isz = psb_sizeof(a)
    +isz = psb_sizeof(desc_a)
    +isz = psb_sizeof(prec)
     

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

    Type:
    -
    Synchronous. +
    Asynchronous.
    -
    On Entry
    +
    On Entry
    -
    icontxt
    -
    the communication context identifying the virtual - parallel machine. +
    a
    +
    A sparse matrix +$A$.
    -Scope: global. +Scope: local
    -Type: required. +Type: required
    Intent: in.
    -Specified as: an integer variable. +Specified as: a structured data of type spdatapsb_spmat_type.
    -
    dat
    -
    On the root process, the data to be broadcast. +
    desc_a
    +
    Communication descriptor.
    -Scope: global. +Scope: local
    -Type: required. +Type: required
    -Intent: inout. +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 variable, -which may be a scalar or rank 1 array. Type, kind, rank and size must agree on all processes. +Specified as: a structured data of type descdatapsb_desc_type.
    -
    root
    -
    Root process holding data to be broadcast. -
    -Scope: global. +
    prec
    +
    Scope: local
    -Type: optional. +Type: required
    Intent: in.
    -Specified as: an integer value -$0<= root <= np-1$, default 0
    -
    - -

    -

    +Specified as: a preconditioner data structure precdatapsb_prec_type. +
    On Return
    -
    dat
    -
    On processes other than root, the data to be broadcast. -
    -Scope: global. +
    Function value
    +
    The memory occupation of the object specified in + the calling sequence, in bytes.
    -Type: required. +Scope: local
    -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. +Returned as: an integer(psb_long_int_k_) number.

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_sum Global - Up: Parallel environment routines - Previous: psb_abort Abort -   Contents - +

    diff --git a/docs/html/node82.html b/docs/html/node82.html index 892f3389..d519b69c 100644 --- a/docs/html/node82.html +++ b/docs/html/node82.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_sum -- Global sum - +Sorting utilities + @@ -18,102 +18,121 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - + - next - + up - previous - contents
    - Next: psb_max Global - Up: Parallel environment routines - Previous: psb_bcast Broadcast -   Next: Parallel environment routines + Up: Data management routines + Previous: psb_sizeof Memory +   Contents

    -

    -psb_sum -- Global sum +

    +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_sum(icontxt, dat, root)
    +call psb_msort(x,ix,dir,flag)
    +call psb_qsort(x,ix,dir,flag)
    +call psb_hsort(x,ix,dir,flag)
     

    -This subroutine implements a sum reduction operation based on the -underlying communication library. +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:
    -
    Synchronous. +
    Asynchronous.
    On Entry
    -
    icontxt
    -
    the communication context identifying the virtual - parallel machine. +
    x
    +
    The sequence to be sorted.
    -Scope: global. +Type:required.
    -Type: required. -
    -Intent: in. -
    -Specified as: an integer variable. +Specified as: an integer, real or complex array of rank 1.
    -
    dat
    -
    The local contribution to the global sum. -
    -Scope: global. +
    ix
    +
    A vector of indices.
    -Type: required. +Type:optional.
    -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. +Specified as: an integer array of (at least) the same size as $X$.
    -
    root
    -
    Process to hold the final sum, or $-1$ to make it available - on all processes. +
    dir
    +
    The desired ordering.
    -Scope: global. +Type:optional.
    -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$.
    -Intent: in. +Type:optional.
    -Specified as: an integer value -$-1<= root <= np-1$, default -1.
    +Specified as: an integer value psb_sort_ovw_idx_ or +psb_sort_keep_idx_; default psb_sort_ovw_idx_. + +

    +

    @@ -121,57 +140,152 @@ Specified as: an integer value +$flag = psb\_sort\_ovw\_idx\_$ then the entries in $ix(1:n)$ + where $n$ is the size of $x$ are initialized to +$ix(i) \leftarrow
+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; +

  • +
  • If +$flag = psb\_sort\_keep\_idx\_$ the routine will assume that + the entries in $ix(:)$ have already been initialized by the user; +
  • +
  • The three sorting algorithms have a similar $O(n \log 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(n^2)$; the algorithm + implemented here follows the well-known median-of-three heuristics, + but the worst case may still apply;
    2. -
    3. The dat argument may also be a long integer scalar. +
    4. The worst case running time for merge-sort and heap-sort is + $O(n \log n)$ as the average case; +
    5. +
    6. 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 often the preferred choice when a sorting is needed + by other routines in the library. +
    7. +
  • +

    +


    - next - + up - previous - contents
    - Next: psb_max Global - Up: Parallel environment routines - Previous: psb_bcast Broadcast -   Next: Parallel environment routines + Up: Data management routines + Previous: psb_sizeof Memory +   Contents diff --git a/docs/html/node83.html b/docs/html/node83.html index 9addeac9..28b1e21a 100644 --- a/docs/html/node83.html +++ b/docs/html/node83.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_max -- Global maximum - +Parallel environment routines + @@ -18,161 +18,88 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
    - Next: psb_min Global - Up: Parallel environment routines - Previous: psb_sum Global -   Next: psb_init Initializes + Up: userhtml + Previous: Sorting utilities +   Contents

    -

    -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. -
    -
    +Parallel environment routines +

    -

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

    + +Subsections -

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_min Global - Up: Parallel environment routines - Previous: psb_sum Global -   Contents - + + +

    diff --git a/docs/html/node84.html b/docs/html/node84.html index 578c01e7..9d26d790 100644 --- a/docs/html/node84.html +++ b/docs/html/node84.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_min -- Global minimum - +psb_init -- Initializes PSBLAS parallel environment + @@ -20,49 +20,49 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_amx Global - Up: Parallel environment routines - Previous: psb_max Global -   Next: psb_info Return + Up: Parallel environment routines + Previous: Parallel environment routines +   Contents

    -

    -psb_min -- Global minimum +

    +psb_init -- Initializes PSBLAS parallel environment

    -call psb_min(icontxt, dat, root)
    +call psb_init(icontxt, np, basectxt, ids)
     

    -This subroutine implements a minimum value reduction -operation based on the underlying communication library. +This subroutine initializes the PSBLAS parallel environment, defining +a virtual parallel machine.

    Type:
    Synchronous. @@ -70,36 +70,34 @@ operation based on the underlying communication library.
    On Entry
    -
    icontxt
    -
    the communication context identifying the virtual - parallel machine. +
    np
    +
    Number of processes in the PSBLAS virtual parallel machine.
    Scope: global.
    -Type: required. +Type: optional.
    Intent: in.
    -Specified as: an integer variable. +Specified as: an integer value. Default: use all available processes.
    -
    dat
    -
    The local contribution to the global minimum. +
    basectxt
    +
    the initial communication context. The new context + will be defined from the processes participating in the initial one.
    -Scope: local. +Scope: global.
    -Type: required. +Type: optional.
    -Intent: inout. +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. +Specified as: an integer value. Default: use MPI_COMM_WORLD.
    -
    root
    -
    Process to hold the final value, or $-1$ to make it available - on all processes. +
    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.
    @@ -107,14 +105,11 @@ Type: optional.
    Intent: in.
    -Specified as: an integer value -$-1<= root <= np-1$, default -1. -
    +Specified as: an integer array. Default: use the indices $(0\dots np-1)$. +

    @@ -122,19 +117,19 @@ Specified as: an integer value - next - + up - previous - contents
    - Next: psb_amx Global - Up: Parallel environment routines - Previous: psb_max Global -   Next: psb_info Return + Up: Parallel environment routines + Previous: Parallel environment routines +   Contents diff --git a/docs/html/node85.html b/docs/html/node85.html index 77bc82f6..c017ea99 100644 --- a/docs/html/node85.html +++ b/docs/html/node85.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_amx -- Global maximum absolute value - +psb_info -- Return information about PSBLAS parallel environment + @@ -20,52 +20,53 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_amn Global - Up: Parallel environment routines - Previous: psb_min Global -   Next: psb_exit Exit + Up: Parallel environment routines + Previous: psb_init Initializes +   Contents

    -

    -psb_amx -- Global maximum absolute value +

    +psb_info -- Return information about PSBLAS parallel + environment

    -call psb_amx(icontxt, dat, root)
    +call psb_info(icontxt, iam, np)
     

    -This subroutine implements a maximum absolute value reduction -operation based on the underlying communication library. +This subroutine returns information about the PSBLAS parallel environment, defining +a virtual parallel machine.

    Type:
    -
    Synchronous. +
    Asynchronous.
    On Entry
    @@ -82,95 +83,88 @@ Intent: in.
    Specified as: an integer variable.
    -
    dat
    -
    The local contribution to the global maximum. +
    + +

    +

    +
    On Return
    +
    +
    +
    iam
    +
    Identifier of current process in the PSBLAS virtual parallel machine.
    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: out.
    -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. + WIDTH="140" HEIGHT="29" ALIGN="MIDDLE" BORDER="0" + SRC="img121.png" + ALT="$-1 \le iam \le np-1$">
    +
    np
    +
    Number of processes in the PSBLAS virtual parallel machine.
    Scope: global.
    Type: required.
    -Intent: inout. +Intent: out.
    -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. -
    +Specified as: an integer variable.

    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. For processes in the virtual parallel machine the identifier + will satisfy +$0 \le iam \le np-1$;
    3. -
    4. The dat argument may also be a long integer scalar. +
    5. 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.


    - next - + up - previous - contents
    - Next: psb_amn Global - Up: Parallel environment routines - Previous: psb_min Global -   Next: psb_exit Exit + Up: Parallel environment routines + Previous: psb_init Initializes +   Contents diff --git a/docs/html/node86.html b/docs/html/node86.html index 6286cdd8..071d7e8c 100644 --- a/docs/html/node86.html +++ b/docs/html/node86.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_amn -- Global minimum absolute value - +psb_exit -- Exit from PSBLAS parallel environment + @@ -20,49 +20,49 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_snd Send - Up: Parallel environment routines - Previous: psb_amx Global -   Next: psb_get_mpicomm Get + Up: Parallel environment routines + Previous: psb_info Return +   Contents

    -

    -psb_amn -- Global minimum absolute value +

    +psb_exit -- Exit from PSBLAS parallel environment

    -call psb_amn(icontxt, dat, root)
    +call psb_exit(icontxt)
    +call psb_exit(icontxt,close)
     

    -This subroutine implements a minimum absolute value reduction -operation based on the underlying communication library. +This subroutine exits from the PSBLAS parallel virtual machine.

    Type:
    Synchronous. @@ -82,24 +82,9 @@ 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. +
    close
    +
    Whether to close all data structures related to the + virtual parallel machine, besides those associated with icontxt.
    Scope: global.
    @@ -107,34 +92,7 @@ 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. +Specified as: a logical variable, default value: true.
    @@ -142,37 +100,49 @@ 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. 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. +
    3. +
    4. A call to this routine with close=.true. implies a call + to MPI_Finalize, after which no parallel routine may be called.
    5. -
    6. The dat argument may also be a long integer scalar. +
    7. 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.


    - next - + up - previous - contents
    - Next: psb_snd Send - Up: Parallel environment routines - Previous: psb_amx Global -   Next: psb_get_mpicomm Get + Up: Parallel environment routines + Previous: psb_info Return +   Contents diff --git a/docs/html/node87.html b/docs/html/node87.html index 4da69119..40b1523c 100644 --- a/docs/html/node87.html +++ b/docs/html/node87.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_snd -- Send data - +psb_get_mpicomm -- Get the MPI communicator + @@ -20,51 +20,51 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_rcv Receive - Up: Parallel environment routines - Previous: psb_amn Global -   Next: psb_get_rank Get + Up: Parallel environment routines + Previous: psb_exit Exit +   Contents

    -

    -psb_snd -- Send data +

    +psb_get_mpicomm -- Get the MPI communicator

    -call psb_snd(icontxt, dat, dst, m)
    +call psb_get_mpicomm(icontxt, icomm)
     

    -This subroutine sends a packet of data to a destination. +This subroutine returns the MPI communicator associated with a PSBLAS context

    Type:
    -
    Synchronous: see usage notes. +
    Asynchronous.
    On Entry
    @@ -81,66 +81,6 @@ 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. -

    @@ -148,45 +88,19 @@ same value on sending and receiving processes.

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

    -Notes - -

      -
    1. This subroutine implies a synchronization, but only between the - calling process and the destination process $dst$. -
    2. -
    - -

    -


    - - -next - -up - -previous - -contents -
    - Next: psb_rcv Receive - Up: Parallel environment routines - Previous: psb_amn Global -   Contents - +

    diff --git a/docs/html/node88.html b/docs/html/node88.html index 171b803a..f7fb114b 100644 --- a/docs/html/node88.html +++ b/docs/html/node88.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_rcv -- Receive data - +psb_get_rank -- Get the MPI rank + @@ -18,52 +18,56 @@ original version by: Nikos Drakos, CBLU, University of Leeds + - + - next - + up - previous - contents
    - Next: Error handling - Up: Parallel environment routines - Previous: psb_snd Send -   Next: psb_wtime Wall + Up: Parallel environment routines + Previous: psb_get_mpicomm Get +   Contents

    -

    -psb_rcv -- Receive data +

    +psb_get_rank -- Get the MPI rank

    -call psb_rcv(icontxt, dat, src, m)
    +call psb_get_rank(rank, icontxt, id)
     

    -This subroutine receives a packet of data to a destination. +This subroutine returns the MPI rank of the PSBLAS process $id$

    Type:
    -
    Synchronous: see usage notes. +
    Asynchronous.
    On Entry
    @@ -80,50 +84,22 @@ Intent: in.
    Specified as: an integer variable.
    -
    src
    -
    Source process. +
    id
    +
    Identifier of a process in the PSBLAS virtual parallel machine.
    -Scope: global. +Scope: local.
    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. -
    + WIDTH="114" HEIGHT="30" ALIGN="MIDDLE" BORDER="0" + SRC="img125.png" + ALT="$0 \le id \le np-1$">

    @@ -131,61 +107,22 @@ same value on sending and receiving processes.

    On Return
    -
    dat
    -
    The data to be received. +
    rank
    +
    The MPI rank associated with the PSBLAS process $id$.
    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. -
    +Intent: out. +

    -Notes - -

      -
    1. This subroutine implies a synchronization, but only between the - calling process and the source process $src$. -
    2. -
    - -

    -


    - - -next - -up - -previous - -contents -
    - Next: Error handling - Up: Parallel environment routines - Previous: psb_snd Send -   Contents - +

    diff --git a/docs/html/node89.html b/docs/html/node89.html index 139e8115..ce1ab8d4 100644 --- a/docs/html/node89.html +++ b/docs/html/node89.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Error handling - +psb_wtime -- Wall clock timing + @@ -18,176 +18,67 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
    - Next: psb_errpush Pushes - Up: userhtml - Previous: psb_rcv Receive -   Next: psb_barrier Sinchronization + Up: Parallel environment routines + Previous: psb_get_rank Get +   Contents

    -

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

    +psb_wtime -- Wall clock timing +

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

    +time = psb_wtime()
    +

    - -

    - - - -
    Figure 8: -The layout of a generic psb_foo - routine with respect to PSBLAS-2.0 error handling policy.
    +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.
    - -
    - -\fbox{\TheSbox} -
    -
    - -

    -Figure 9 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). - -

    - -

    - - - -
    Figure 9: -A sample PSBLAS-2.0 error - message. Process 0 detected an error condition inside the psb_cest subroutine
    -
    - -
    - -\fbox{\TheSbox} -
    -
    +Returned as: a real(psb_dpk_) variable. + +



    - -Subsections - - - -
    - - -next - -up - -previous - -contents -
    - Next: psb_errpush Pushes - Up: userhtml - Previous: psb_rcv Receive -   Contents - diff --git a/docs/html/node9.html b/docs/html/node9.html index c6f17983..a57625c3 100644 --- a/docs/html/node9.html +++ b/docs/html/node9.html @@ -18,7 +18,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + @@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next - up - previous - contents
    - Next: Named Constants - Up: Data Structures - Previous: Data Structures -   Next: Methods + Up: Data Structures and Classes + Previous: Data Structures and Classes +   Contents

    @@ -66,7 +66,7 @@ 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 and 3.5; +Sec. 6 and 3.5; nevertheless we include here a description for the curious reader. @@ -117,7 +117,7 @@ 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 mode of initialization (see also 6).

    The descriptor contents are as follows: @@ -202,7 +202,7 @@ Specified as: an allocatable integer array of rank two. The Fortran 2003 declaration for psb_desc_type structures is as follows: -

    +
    Figure 3: The PSBLAS defined data type that @@ -244,32 +244,40 @@ state, which can take the following values: Subsections
    - next - up - previous - contents
    - Next: Named Constants - Up: Data Structures - Previous: Data Structures -   Next: Methods + Up: Data Structures and Classes + Previous: Data Structures and Classes +   Contents diff --git a/docs/html/node90.html b/docs/html/node90.html index b60cc623..b4d0de13 100644 --- a/docs/html/node90.html +++ b/docs/html/node90.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_errpush -- Pushes an error code onto the error stack - +psb_barrier -- Sinchronization point parallel environment + @@ -20,95 +20,69 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_error Prints - Up: Error handling - Previous: Error handling -   Next: psb_abort Abort + Up: Parallel environment routines + Previous: psb_wtime Wall +   Contents

    -

    -psb_errpush -- Pushes an error code onto the error - stack +

    +psb_barrier -- Sinchronization point parallel + environment

    -call psb_errpush(err_c, r_name, i_err, a_err)
    +call psb_barrier(icontxt)
     

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

    Type:
    -
    Asynchronous. +
    Synchronous.
    -
    On Entry
    +
    On Entry
    -
    err_c
    -
    the error code +
    icontxt
    +
    the communication context identifying the virtual + parallel machine.
    -Scope: local +Scope: global.
    -Type: required +Type: required.
    Intent: in.
    -Specified as: an integer. +Specified as: an integer variable.
    -
    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/node91.html b/docs/html/node91.html index 0b109c6b..8b80b3ef 100644 --- a/docs/html/node91.html +++ b/docs/html/node91.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_error -- Prints the error stack content and aborts execution - +psb_abort -- Abort a computation + @@ -20,65 +20,66 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_set_errverbosity Sets - Up: Error handling - Previous: psb_errpush Pushes -   Next: psb_bcast Broadcast + Up: Parallel environment routines + Previous: psb_barrier Sinchronization +   Contents

    -

    -psb_error -- Prints the error stack content and aborts - execution +

    +psb_abort -- Abort a computation

    -call psb_error(icontxt)
    +call psb_abort(icontxt)
     

    +This subroutine aborts computation on the parallel virtual machine.

    Type:
    Asynchronous.
    -
    On Entry
    +
    On Entry
    icontxt
    -
    the communication context. +
    the communication context identifying the virtual + parallel machine.
    -Scope: global +Scope: global.
    -Type: optional +Type: required.
    Intent: in.
    -Specified as: an integer. +Specified as: an integer variable.
    diff --git a/docs/html/node92.html b/docs/html/node92.html index 5e0e1523..c0f9ec3b 100644 --- a/docs/html/node92.html +++ b/docs/html/node92.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_set_errverbosity -- Sets the verbosity of error messages. - +psb_bcast -- Broadcast data + @@ -20,70 +20,143 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: psb_set_erraction Set - Up: Error handling - Previous: psb_error Prints -   Next: psb_sum Global + Up: Parallel environment routines + Previous: psb_abort Abort +   Contents

    -

    -psb_set_errverbosity -- Sets the verbosity of error - messages. +

    +psb_bcast -- Broadcast data

    -call psb_set_errverbosity(v)
    +call psb_bcast(icontxt, dat, root)
     

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

    Type:
    -
    Asynchronous. +
    Synchronous.
    -
    On Entry
    +
    On Entry
    -
    v
    -
    the verbosity level +
    icontxt
    +
    the communication context identifying the virtual + parallel machine.
    -Scope: global +Scope: global.
    -Type: required +Type: required.
    Intent: in.
    -Specified as: an integer. +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.

    -


    +
    + + +next + +up + +previous + +contents +
    + Next: psb_sum Global + Up: Parallel environment routines + Previous: psb_abort Abort +   Contents + diff --git a/docs/html/node93.html b/docs/html/node93.html index 8b4f5052..7bf272fb 100644 --- a/docs/html/node93.html +++ b/docs/html/node93.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -psb_set_erraction -- Set the type of action to be taken upon error condition. - +psb_sum -- Global sum + @@ -18,77 +18,162 @@ original version by: Nikos Drakos, CBLU, University of Leeds + - + - next - + up - previous - contents
    - Next: Utilities - Up: Error handling - Previous: psb_set_errverbosity Sets -   Next: psb_max Global + Up: Parallel environment routines + Previous: psb_bcast Broadcast +   Contents

    -

    -psb_set_erraction -- Set the type of action to be - taken upon error condition. +

    +psb_sum -- Global sum

    -call psb_set_erraction(err_act)
    +call psb_sum(icontxt, dat, root)
     

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

    Type:
    -
    Asynchronous. +
    Synchronous.
    -
    On Entry
    +
    On Entry
    -
    err_act
    -
    the type of action. +
    icontxt
    +
    the communication context identifying the virtual + parallel machine.
    -Scope: global +Scope: global.
    -Type: required +Type: required.
    Intent: in.
    -Specified as: an integer. Possible values: psb_act_ret, -psb_act_abort. +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.

    -

    -call psb_errcomm(icontxt, err)
    -
    +
    +
    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. +
    4. +
    + +

    +


    + + +next + +up + +previous + +contents +
    + Next: psb_max Global + Up: Parallel environment routines + Previous: psb_bcast Broadcast +   Contents + diff --git a/docs/html/node94.html b/docs/html/node94.html index d7a71f94..5d7fd1a5 100644 --- a/docs/html/node94.html +++ b/docs/html/node94.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -Utilities - +psb_max -- Global maximum + @@ -18,74 +18,161 @@ original version by: Nikos Drakos, CBLU, University of Leeds - - - + + + - next - + up - previous - contents
    - Next: hb_read Read - Up: userhtml - Previous: psb_set_erraction Set -   Next: psb_min Global + Up: Parallel environment routines + Previous: psb_sum Global +   Contents

    -

    - +

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

    -We have some utitlities available for input and output of -sparsematrices; the interfaces to these routines are available in the -module psb_util_mod. +

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

    -


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

    +

    +


    + + +next + +up + +previous + +contents +
    + Next: psb_min Global + Up: Parallel environment routines + Previous: psb_sum Global +   Contents + diff --git a/docs/html/node95.html b/docs/html/node95.html index cc868f5b..1100582a 100644 --- a/docs/html/node95.html +++ b/docs/html/node95.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -hb_read -- Read a sparse matrix from a file in the Harwell-Boeing format - +psb_min -- Global minimum + @@ -20,71 +20,101 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: hb_write Write - Up: Utilities - Previous: Utilities -   Next: psb_amx Global + Up: Parallel environment routines + Previous: psb_max Global +   Contents

    -

    -hb_read -- Read a sparse matrix from a file in the - Harwell-Boeing format +

    +psb_min -- Global minimum

    -call hb_read(a, iret, iunit, filename, b, mtitle)
    +call psb_min(icontxt, dat, root)
     

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

    Type:
    -
    Asynchronous. +
    Synchronous.
    On Entry
    -
    filename
    -
    The name of the file to be read. +
    icontxt
    +
    the communication context identifying the virtual + parallel machine. +
    +Scope: global.
    -Type:optional. +Type: required.
    -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: -. +Intent: in. +
    +Specified as: an integer variable.
    -
    iunit
    -
    The Fortran file unit number. +
    dat
    +
    The local contribution to the global minimum. +
    +Scope: local.
    -Type:optional. +Type: required.
    -Specified as: an integer value. Only meaningful if filename is not -. +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. +

    @@ -92,63 +122,57 @@ Specified as: an integer value. Only meaningful if filename is not -On Return

    -
    a
    -
    the sparse matrix read from file. -
    -Type:required. +
    dat
    +
    On destination process(es), the result of the minimum operation.
    -Specified as: a structured data of type spdatapsb_spmat_type. -
    -
    b
    -
    Rigth hand side(s). +Scope: global.
    -Type: Optional +Type: required.
    -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. +Intent: inout.
    -Type: Optional +Specified as: an integer or real variable, which may be a +scalar, or a rank 1 or 2 array.
    -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. +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. +
    4. +
    +


    - next - + up - previous - contents
    - Next: hb_write Write - Up: Utilities - Previous: Utilities -   Next: psb_amx Global + Up: Parallel environment routines + Previous: psb_max Global +   Contents diff --git a/docs/html/node96.html b/docs/html/node96.html index 2ad99819..a8cc2dc9 100644 --- a/docs/html/node96.html +++ b/docs/html/node96.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -hb_write -- Write a sparse matrix to a file in the Harwell-Boeing format - +psb_amx -- Global maximum absolute value + @@ -20,105 +20,101 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: mm_mat_read Read - Up: Utilities - Previous: hb_read Read -   Next: psb_amn Global + Up: Parallel environment routines + Previous: psb_min Global +   Contents

    -

    -hb_write -- Write a sparse matrix to a file - in the Harwell-Boeing format +

    +psb_amx -- Global maximum absolute value

    -call hb_write(a, iret, iunit, filename, key, rhs, mtitle)
    +call psb_amx(icontxt, dat, root)
     

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

    Type:
    -
    Asynchronous. +
    Synchronous.
    On Entry
    -
    a
    -
    the sparse matrix to be written. +
    icontxt
    +
    the communication context identifying the virtual + parallel machine.
    -Type:required. +Scope: global.
    -Specified as: a structured data of type spdatapsb_spmat_type. -
    -
    b
    -
    Rigth hand side. +Type: required.
    -Type: Optional +Intent: in.
    -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. +Specified as: an integer variable.
    -
    filename
    -
    The name of the file to be written to. +
    dat
    +
    The local contribution to the global maximum.
    -Type:optional. +Scope: local.
    -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: required.
    -Type:optional. +Intent: inout.
    -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. +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. +

    @@ -126,38 +122,55 @@ written to file.

    On Return
    -
    iret
    -
    Error code. +
    dat
    +
    On destination process(es), the result of the maximum operation. +
    +Scope: global. +
    +Type: required.
    -Type: required +Intent: inout.
    -An integer value; 0 means no error has been detected. +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. +
    4. +
    +


    - next - + up - previous - contents
    - Next: mm_mat_read Read - Up: Utilities - Previous: hb_read Read -   Next: psb_amn Global + Up: Parallel environment routines + Previous: psb_min Global +   Contents diff --git a/docs/html/node97.html b/docs/html/node97.html index b29dd9c9..c87cfbf5 100644 --- a/docs/html/node97.html +++ b/docs/html/node97.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -mm_mat_read -- Read a sparse matrix from a file in the MatrixMarket format - +psb_amn -- Global minimum absolute value + @@ -20,71 +20,101 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: mm_vet_read Read - Up: Utilities - Previous: hb_write Write -   Next: psb_snd Send + Up: Parallel environment routines + Previous: psb_amx Global +   Contents

    -

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

    +psb_amn -- Global minimum absolute value

    -call mm_mat_read(a, iret, iunit, filename)
    +call psb_amn(icontxt, dat, root)
     

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

    Type:
    -
    Asynchronous. +
    Synchronous.
    On Entry
    -
    filename
    -
    The name of the file to be read. +
    icontxt
    +
    the communication context identifying the virtual + parallel machine.
    -Type:optional. +Scope: global.
    -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: -. +Type: required. +
    +Intent: in. +
    +Specified as: an integer variable.
    -
    iunit
    -
    The Fortran file unit number. +
    dat
    +
    The local contribution to the global minimum. +
    +Scope: local.
    -Type:optional. +Type: required.
    -Specified as: an integer value. Only meaningful if filename is not -. +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. +

    @@ -92,24 +122,59 @@ Specified as: an integer value. Only meaningful if filename is not -On Return

    -
    a
    -
    the sparse matrix read from file. +
    dat
    +
    On destination process(es), the result of the minimum operation.
    -Type:required. +Scope: global.
    -Specified as: a structured data of type spdatapsb_spmat_type. -
    -
    iret
    -
    Error code. +Type: required.
    -Type: required +Intent: inout.
    -An integer value; 0 means no error has been detected. +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. +
    4. +
    + +

    +


    + + +next + +up + +previous + +contents +
    + Next: psb_snd Send + Up: Parallel environment routines + Previous: psb_amx Global +   Contents + diff --git a/docs/html/node98.html b/docs/html/node98.html index e9bf7fbf..4fe488b6 100644 --- a/docs/html/node98.html +++ b/docs/html/node98.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -mm_vet_read -- Read a dense vector from a file in the MatrixMarket format - +psb_snd -- Send data + @@ -20,69 +20,126 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: mm_mat_write Write - Up: Utilities - Previous: mm_mat_read Read -   Next: psb_rcv Receive + Up: Parallel environment routines + Previous: psb_amn Global +   Contents

    -

    -mm_vet_read -- Read a dense vector from a - file in the MatrixMarket format +

    +psb_snd -- Send data

    +

    -call mm_vet_read(b, iret, iunit, filename)
    +call psb_snd(icontxt, dat, dst, m)
     

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

    Type:
    -
    Asynchronous. +
    Synchronous: see usage notes.
    On Entry
    -
    filename
    -
    The name of the file to be read. +
    icontxt
    +
    the communication context identifying the virtual + parallel machine. +
    +Scope: global. +
    +Type: required.
    -Type:optional. +Intent: in.
    -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: -. +Specified as: an integer variable.
    -
    iunit
    -
    The Fortran file unit number. +
    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:optional. +Type: required.
    -Specified as: an integer value. Only meaningful if filename is not -. +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.
    @@ -91,26 +148,45 @@ 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 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. -

    -


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

    +


    + + +next + +up + +previous + +contents +
    + Next: psb_rcv Receive + Up: Parallel environment routines + Previous: psb_amn Global +   Contents + diff --git a/docs/html/node99.html b/docs/html/node99.html index 16644100..0c466ac1 100644 --- a/docs/html/node99.html +++ b/docs/html/node99.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -mm_mat_write -- Write a sparse matrix to a file in the MatrixMarket format - +psb_rcv -- Receive data + @@ -19,82 +19,110 @@ original version by: Nikos Drakos, CBLU, University of Leeds - + - next - + up - previous - contents
    - Next: Preconditioner routines - Up: Utilities - Previous: mm_vet_read Read -   Next: Error handling + Up: Parallel environment routines + Previous: psb_snd Send +   Contents

    -

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

    +psb_rcv -- Receive data

    +

    -call mm_mat_write(a, mtitle, iret, iunit, filename)
    +call psb_rcv(icontxt, dat, src, m)
     
    + +

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

    Type:
    -
    Asynchronous. +
    Synchronous: see usage notes.
    On Entry
    -
    a
    -
    the sparse matrix to be written. +
    icontxt
    +
    the communication context identifying the virtual + parallel machine.
    -Type:required. +Scope: global.
    -Specified as: a structured data of type spdatapsb_spmat_type. -
    -
    mtitle
    -
    Matrix title. +Type: required.
    -Type: required +Intent: in.
    -A charachter variable holding a descriptive title for the matrix to be - written to file. +Specified as: an integer variable.
    -
    filename
    -
    The name of the file to be written to. +
    src
    +
    Source process.
    -Type:optional. +Scope: global.
    -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: required. +
    +Intent: in. +
    +Specified as: an integer value +$0<= src <= np-1$. +
    +
    m
    +
    Number of rows.
    -Type:optional. +Scope: global.
    -Specified as: an integer value. Only meaningful if filename is not -. +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.
    @@ -103,17 +131,61 @@ Specified as: an integer value. Only meaningful if filename is not -On Return
    -
    iret
    -
    Error code. +
    dat
    +
    The data to be received.
    -Type: required +Scope: local.
    -An integer value; 0 means no error has been detected. +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$. +
    2. +
    + +

    +


    + + +next + +up + +previous + +contents +
    + Next: Error handling + Up: Parallel environment routines + Previous: psb_snd Send +   Contents + diff --git a/docs/html/userhtml.html b/docs/html/userhtml.html index fc0b17cf..adcb8b18 100644 --- a/docs/html/userhtml.html +++ b/docs/html/userhtml.html @@ -23,18 +23,18 @@ original version by: Nikos Drakos, CBLU, University of Leeds - next up previous - contents
    - Next: Next: Contents -   Contents

    @@ -65,285 +65,310 @@ December 15th, 2011
    -
  • Communication routines +
  • Computational routines -
    + HREF="node42.html">psb_geamaxs -- Generalized Infinity Norm
  • Data management routines - +
  • psb_spall -- Allocates a sparse matrix + HREF="node50.html">Communication routines + +
  • psb_geall -- Allocates a dense matrix + HREF="node55.html">Data management routines + -
    + HREF="node70.html">psb_gefree -- Frees a dense matrix
  • Parallel environment routines - +
  • psb_min -- Global minimum + HREF="node83.html">Parallel environment routines +
    -
  • Error handling +
  • Error handling
    -
  • Utilities +
  • Utilities
    -
  • Preconditioner routines +
  • Preconditioner routines
    -
  • Iterative Methods +
  • Iterative Methods
    -
  • Bibliography -
  • About this document ... +
  • Bibliography +
  • About this document ...

    diff --git a/docs/psblas-3.0.pdf b/docs/psblas-3.0.pdf index 25d4ad33..917473ab 100644 --- a/docs/psblas-3.0.pdf +++ b/docs/psblas-3.0.pdf @@ -46,7 +46,7 @@ endobj << /S /GoTo /D (section.3) >> endobj 36 0 obj -(3 Data Structures) +(3 Data Structures and Classes) endobj 37 0 obj << /S /GoTo /D (subsection.3.1) >> @@ -58,588 +58,648 @@ endobj << /S /GoTo /D (subsubsection.3.1.1) >> endobj 44 0 obj -(3.1.1 Named Constants) +(3.1.1 Methods) endobj 45 0 obj -<< /S /GoTo /D (subsection.3.2) >> +<< /S /GoTo /D (section*.2) >> endobj 48 0 obj -(3.2 Sparse Matrix data structure) +(get\137local\137rows ) endobj 49 0 obj -<< /S /GoTo /D (subsubsection.3.2.1) >> +<< /S /GoTo /D (section*.3) >> endobj 52 0 obj -(3.2.1 Named Constants) +(get\137local\137cols ) endobj 53 0 obj -<< /S /GoTo /D (subsection.3.3) >> +<< /S /GoTo /D (section*.4) >> endobj 56 0 obj -(3.3 Dense Vector Data Structure) +(get\137global\137rows ) endobj 57 0 obj -<< /S /GoTo /D (subsection.3.4) >> +<< /S /GoTo /D (section*.5) >> endobj 60 0 obj -(3.4 Preconditioner data structure) +(get\137global\137cols ) endobj 61 0 obj -<< /S /GoTo /D (subsection.3.5) >> +<< /S /GoTo /D (section*.6) >> endobj 64 0 obj -(3.5 Data structure query routines) +(get\137context) endobj 65 0 obj -<< /S /GoTo /D (section*.2) >> +<< /S /GoTo /D (section*.7) >> endobj 68 0 obj -(get\137local\137rows ) +(psb\137cd\137get\137large\137threshold) endobj 69 0 obj -<< /S /GoTo /D (section*.3) >> +<< /S /GoTo /D (section*.8) >> endobj 72 0 obj -(get\137local\137cols ) +(psb\137cd\137set\137large\137threshold) endobj 73 0 obj -<< /S /GoTo /D (section*.4) >> +<< /S /GoTo /D (subsubsection.3.1.2) >> endobj 76 0 obj -(get\137global\137rows ) +(3.1.2 Named Constants) endobj 77 0 obj -<< /S /GoTo /D (section*.5) >> +<< /S /GoTo /D (subsection.3.2) >> endobj 80 0 obj -(get\137global\137cols ) +(3.2 Sparse Matrix class) endobj 81 0 obj -<< /S /GoTo /D (section*.6) >> +<< /S /GoTo /D (subsubsection.3.2.1) >> endobj 84 0 obj -(get\137context) +(3.2.1 Methods) endobj 85 0 obj -<< /S /GoTo /D (section*.7) >> +<< /S /GoTo /D (section*.9) >> endobj 88 0 obj -(psb\137cd\137get\137large\137threshold) +(get\137nrows) endobj 89 0 obj -<< /S /GoTo /D (section*.8) >> +<< /S /GoTo /D (section*.10) >> endobj 92 0 obj -(psb\137cd\137set\137large\137threshold) +(get\137ncols) endobj 93 0 obj -<< /S /GoTo /D (section*.9) >> +<< /S /GoTo /D (section*.11) >> endobj 96 0 obj -(get\137nrows) +(get\137nnzeros) endobj 97 0 obj -<< /S /GoTo /D (section*.10) >> +<< /S /GoTo /D (section*.12) >> endobj 100 0 obj -(get\137ncols) +(get\137size) endobj 101 0 obj -<< /S /GoTo /D (section*.11) >> +<< /S /GoTo /D (section*.13) >> endobj 104 0 obj -(get\137nnzeros) +(sizeof) endobj 105 0 obj -<< /S /GoTo /D (section.4) >> +<< /S /GoTo /D (section*.14) >> endobj 108 0 obj -(4 Computational routines) +(get\137fmt) endobj 109 0 obj -<< /S /GoTo /D (section*.12) >> +<< /S /GoTo /D (section*.15) >> endobj 112 0 obj -(psb\137geaxpby) +(is\137bld, is\137upd, is\137asb) endobj 113 0 obj -<< /S /GoTo /D (section*.13) >> +<< /S /GoTo /D (subsubsection.3.2.2) >> endobj 116 0 obj -(psb\137gedot) +(3.2.2 Named Constants) endobj 117 0 obj -<< /S /GoTo /D (section*.14) >> +<< /S /GoTo /D (subsection.3.3) >> endobj 120 0 obj -(psb\137gedots) +(3.3 Dense Vector Data Structure) endobj 121 0 obj -<< /S /GoTo /D (section*.15) >> +<< /S /GoTo /D (subsubsection.3.3.1) >> endobj 124 0 obj -(psb\137geamax) +(3.3.1 Methods) endobj 125 0 obj << /S /GoTo /D (section*.16) >> endobj 128 0 obj -(psb\137geamaxs) +(v\137get\137nrows) endobj 129 0 obj -<< /S /GoTo /D (section*.17) >> +<< /S /GoTo /D (section*.18) >> endobj 132 0 obj -(psb\137geasum) +(v\137sizeof) endobj 133 0 obj -<< /S /GoTo /D (section*.18) >> +<< /S /GoTo /D (section*.19) >> endobj 136 0 obj -(psb\137geasums) +(v\137get\137vect) endobj 137 0 obj -<< /S /GoTo /D (section*.19) >> +<< /S /GoTo /D (subsection.3.4) >> endobj 140 0 obj -(psb\137geasums) +(3.4 Preconditioner data structure) endobj 141 0 obj -<< /S /GoTo /D (section*.20) >> +<< /S /GoTo /D (subsection.3.5) >> endobj 144 0 obj -(psb\137genrm2s) +(3.5 Data structure Methods) endobj 145 0 obj -<< /S /GoTo /D (section*.21) >> +<< /S /GoTo /D (section.4) >> endobj 148 0 obj -(psb\137spnrmi) +(4 Computational routines) endobj 149 0 obj -<< /S /GoTo /D (section*.22) >> +<< /S /GoTo /D (section*.20) >> endobj 152 0 obj -(psb\137spmm) +(psb\137geaxpby) endobj 153 0 obj -<< /S /GoTo /D (section*.23) >> +<< /S /GoTo /D (section*.21) >> endobj 156 0 obj -(psb\137spsm) +(psb\137gedot) endobj 157 0 obj -<< /S /GoTo /D (section.5) >> +<< /S /GoTo /D (section*.22) >> endobj 160 0 obj -(5 Communication routines) +(psb\137gedots) endobj 161 0 obj -<< /S /GoTo /D (section*.24) >> +<< /S /GoTo /D (section*.23) >> endobj 164 0 obj -(psb\137halo) +(psb\137geamax) endobj 165 0 obj -<< /S /GoTo /D (section*.25) >> +<< /S /GoTo /D (section*.24) >> endobj 168 0 obj -(psb\137ovrl) +(psb\137geamaxs) endobj 169 0 obj -<< /S /GoTo /D (section*.26) >> +<< /S /GoTo /D (section*.25) >> endobj 172 0 obj -(psb\137gather) +(psb\137geasum) endobj 173 0 obj -<< /S /GoTo /D (section*.27) >> +<< /S /GoTo /D (section*.26) >> endobj 176 0 obj -(psb\137scatter) +(psb\137geasums) endobj 177 0 obj -<< /S /GoTo /D (section.6) >> +<< /S /GoTo /D (section*.27) >> endobj 180 0 obj -(6 Data management routines) +(psb\137geasums) endobj 181 0 obj << /S /GoTo /D (section*.28) >> endobj 184 0 obj -(psb\137cdall) +(psb\137genrm2s) endobj 185 0 obj << /S /GoTo /D (section*.29) >> endobj 188 0 obj -(psb\137cdins) +(psb\137spnrmi) endobj 189 0 obj << /S /GoTo /D (section*.30) >> endobj 192 0 obj -(psb\137cdasb) +(psb\137spmm) endobj 193 0 obj << /S /GoTo /D (section*.31) >> endobj 196 0 obj -(psb\137cdcpy) +(psb\137spsm) endobj 197 0 obj -<< /S /GoTo /D (section*.32) >> +<< /S /GoTo /D (section.5) >> endobj 200 0 obj -(psb\137cdfree) +(5 Communication routines) endobj 201 0 obj -<< /S /GoTo /D (section*.33) >> +<< /S /GoTo /D (section*.32) >> endobj 204 0 obj -(psb\137cdbldext) +(psb\137halo) endobj 205 0 obj -<< /S /GoTo /D (section*.34) >> +<< /S /GoTo /D (section*.33) >> endobj 208 0 obj -(psb\137spall) +(psb\137ovrl) endobj 209 0 obj -<< /S /GoTo /D (section*.35) >> +<< /S /GoTo /D (section*.34) >> endobj 212 0 obj -(psb\137spins) +(psb\137gather) endobj 213 0 obj -<< /S /GoTo /D (section*.36) >> +<< /S /GoTo /D (section*.35) >> endobj 216 0 obj -(psb\137spasb) +(psb\137scatter) endobj 217 0 obj -<< /S /GoTo /D (section*.37) >> +<< /S /GoTo /D (section.6) >> endobj 220 0 obj -(psb\137spfree) +(6 Data management routines) endobj 221 0 obj -<< /S /GoTo /D (section*.38) >> +<< /S /GoTo /D (section*.36) >> endobj 224 0 obj -(psb\137sprn) +(psb\137cdall) endobj 225 0 obj -<< /S /GoTo /D (section*.39) >> +<< /S /GoTo /D (section*.37) >> endobj 228 0 obj -(psb\137geall) +(psb\137cdins) endobj 229 0 obj -<< /S /GoTo /D (section*.40) >> +<< /S /GoTo /D (section*.38) >> endobj 232 0 obj -(psb\137geins) +(psb\137cdasb) endobj 233 0 obj -<< /S /GoTo /D (section*.41) >> +<< /S /GoTo /D (section*.39) >> endobj 236 0 obj -(psb\137geasb) +(psb\137cdcpy) endobj 237 0 obj -<< /S /GoTo /D (section*.42) >> +<< /S /GoTo /D (section*.40) >> endobj 240 0 obj -(psb\137gefree) +(psb\137cdfree) endobj 241 0 obj -<< /S /GoTo /D (section*.43) >> +<< /S /GoTo /D (section*.41) >> endobj 244 0 obj -(psb\137gelp) +(psb\137cdbldext) endobj 245 0 obj -<< /S /GoTo /D (section*.44) >> +<< /S /GoTo /D (section*.42) >> endobj 248 0 obj -(psb\137glob\137to\137loc) +(psb\137spall) endobj 249 0 obj -<< /S /GoTo /D (section*.45) >> +<< /S /GoTo /D (section*.43) >> endobj 252 0 obj -(psb\137loc\137to\137glob) +(psb\137spins) endobj 253 0 obj -<< /S /GoTo /D (section*.46) >> +<< /S /GoTo /D (section*.44) >> endobj 256 0 obj -(psb\137is\137owned) +(psb\137spasb) endobj 257 0 obj -<< /S /GoTo /D (section*.47) >> +<< /S /GoTo /D (section*.45) >> endobj 260 0 obj -(psb\137owned\137index) +(psb\137spfree) endobj 261 0 obj -<< /S /GoTo /D (section*.48) >> +<< /S /GoTo /D (section*.46) >> endobj 264 0 obj -(psb\137is\137local) +(psb\137sprn) endobj 265 0 obj -<< /S /GoTo /D (section*.49) >> +<< /S /GoTo /D (section*.47) >> endobj 268 0 obj -(psb\137local\137index) +(psb\137geall) endobj 269 0 obj -<< /S /GoTo /D (section*.50) >> +<< /S /GoTo /D (section*.48) >> endobj 272 0 obj -(psb\137get\137boundary) +(psb\137geins) endobj 273 0 obj -<< /S /GoTo /D (section*.51) >> +<< /S /GoTo /D (section*.49) >> endobj 276 0 obj -(psb\137get\137overlap) +(psb\137geasb) endobj 277 0 obj -<< /S /GoTo /D (section*.52) >> +<< /S /GoTo /D (section*.50) >> endobj 280 0 obj -(psb\137sp\137getrow) +(psb\137gefree) endobj 281 0 obj -<< /S /GoTo /D (section*.53) >> +<< /S /GoTo /D (section*.51) >> endobj 284 0 obj -(psb\137sizeof) +(psb\137gelp) endobj 285 0 obj -<< /S /GoTo /D (section*.54) >> +<< /S /GoTo /D (section*.52) >> endobj 288 0 obj -(Sorting utilities) +(psb\137glob\137to\137loc) endobj 289 0 obj -<< /S /GoTo /D (section.7) >> +<< /S /GoTo /D (section*.53) >> endobj 292 0 obj -(7 Parallel environment routines) +(psb\137loc\137to\137glob) endobj 293 0 obj -<< /S /GoTo /D (section*.55) >> +<< /S /GoTo /D (section*.54) >> endobj 296 0 obj -(psb\137init) +(psb\137is\137owned) endobj 297 0 obj -<< /S /GoTo /D (section*.56) >> +<< /S /GoTo /D (section*.55) >> endobj 300 0 obj -(psb\137info) +(psb\137owned\137index) endobj 301 0 obj -<< /S /GoTo /D (section*.57) >> +<< /S /GoTo /D (section*.56) >> endobj 304 0 obj -(psb\137exit) +(psb\137is\137local) endobj 305 0 obj -<< /S /GoTo /D (section*.58) >> +<< /S /GoTo /D (section*.57) >> endobj 308 0 obj -(psb\137get\137mpicomm) +(psb\137local\137index) endobj 309 0 obj -<< /S /GoTo /D (section*.59) >> +<< /S /GoTo /D (section*.58) >> endobj 312 0 obj -(psb\137get\137rank) +(psb\137get\137boundary) endobj 313 0 obj -<< /S /GoTo /D (section*.60) >> +<< /S /GoTo /D (section*.59) >> endobj 316 0 obj -(psb\137wtime) +(psb\137get\137overlap) endobj 317 0 obj -<< /S /GoTo /D (section*.61) >> +<< /S /GoTo /D (section*.60) >> endobj 320 0 obj -(psb\137barrier) +(psb\137sp\137getrow) endobj 321 0 obj -<< /S /GoTo /D (section*.62) >> +<< /S /GoTo /D (section*.61) >> endobj 324 0 obj -(psb\137abort) +(psb\137sizeof) endobj 325 0 obj -<< /S /GoTo /D (section*.63) >> +<< /S /GoTo /D (section*.62) >> endobj 328 0 obj -(psb\137bcast) +(Sorting utilities) endobj 329 0 obj -<< /S /GoTo /D (section*.64) >> +<< /S /GoTo /D (section.7) >> endobj 332 0 obj -(psb\137sum) +(7 Parallel environment routines) endobj 333 0 obj -<< /S /GoTo /D (section*.65) >> +<< /S /GoTo /D (section*.63) >> endobj 336 0 obj -(psb\137max) +(psb\137init) endobj 337 0 obj -<< /S /GoTo /D (section*.66) >> +<< /S /GoTo /D (section*.64) >> endobj 340 0 obj -(psb\137min) +(psb\137info) endobj 341 0 obj -<< /S /GoTo /D (section*.67) >> +<< /S /GoTo /D (section*.65) >> endobj 344 0 obj -(psb\137amx) +(psb\137exit) endobj 345 0 obj -<< /S /GoTo /D (section*.68) >> +<< /S /GoTo /D (section*.66) >> endobj 348 0 obj -(psb\137amn) +(psb\137get\137mpicomm) endobj 349 0 obj -<< /S /GoTo /D (section*.69) >> +<< /S /GoTo /D (section*.67) >> endobj 352 0 obj -(psb\137snd) +(psb\137get\137rank) endobj 353 0 obj -<< /S /GoTo /D (section*.70) >> +<< /S /GoTo /D (section*.68) >> endobj 356 0 obj -(psb\137rcv) +(psb\137wtime) endobj 357 0 obj -<< /S /GoTo /D (section.8) >> +<< /S /GoTo /D (section*.69) >> endobj 360 0 obj -(8 Error handling) +(psb\137barrier) endobj 361 0 obj -<< /S /GoTo /D (section*.71) >> +<< /S /GoTo /D (section*.70) >> endobj 364 0 obj -(psb\137errpush) +(psb\137abort) endobj 365 0 obj -<< /S /GoTo /D (section*.72) >> +<< /S /GoTo /D (section*.71) >> endobj 368 0 obj -(psb\137error) +(psb\137bcast) endobj 369 0 obj -<< /S /GoTo /D (section*.73) >> +<< /S /GoTo /D (section*.72) >> endobj 372 0 obj -(psb\137set\137errverbosity) +(psb\137sum) endobj 373 0 obj -<< /S /GoTo /D (section*.74) >> +<< /S /GoTo /D (section*.73) >> endobj 376 0 obj -(psb\137set\137erraction) +(psb\137max) endobj 377 0 obj -<< /S /GoTo /D (section.9) >> +<< /S /GoTo /D (section*.74) >> endobj 380 0 obj -(9 Utilities) +(psb\137min) endobj 381 0 obj << /S /GoTo /D (section*.75) >> endobj 384 0 obj -(hb\137read) +(psb\137amx) endobj 385 0 obj << /S /GoTo /D (section*.76) >> endobj 388 0 obj -(hb\137write) +(psb\137amn) endobj 389 0 obj << /S /GoTo /D (section*.77) >> endobj 392 0 obj -(mm\137mat\137read) +(psb\137snd) endobj 393 0 obj << /S /GoTo /D (section*.78) >> endobj 396 0 obj -(mm\137vet\137read ) +(psb\137rcv) endobj 397 0 obj -<< /S /GoTo /D (section*.79) >> +<< /S /GoTo /D (section.8) >> endobj 400 0 obj -(mm\137mat\137write) +(8 Error handling) endobj 401 0 obj -<< /S /GoTo /D (section.10) >> +<< /S /GoTo /D (section*.79) >> endobj 404 0 obj -(10 Preconditioner routines) +(psb\137errpush) endobj 405 0 obj << /S /GoTo /D (section*.80) >> endobj 408 0 obj -(psb\137precinit) +(psb\137error) endobj 409 0 obj << /S /GoTo /D (section*.81) >> endobj 412 0 obj -(psb\137precbld) +(psb\137set\137errverbosity) endobj 413 0 obj << /S /GoTo /D (section*.82) >> endobj 416 0 obj -(psb\137precaply) +(psb\137set\137erraction) endobj 417 0 obj -<< /S /GoTo /D (section*.83) >> +<< /S /GoTo /D (section.9) >> endobj 420 0 obj -(psb\137precdescr) +(9 Utilities) endobj 421 0 obj -<< /S /GoTo /D (section.11) >> +<< /S /GoTo /D (section*.83) >> endobj 424 0 obj -(11 Iterative Methods) +(hb\137read) endobj 425 0 obj << /S /GoTo /D (section*.84) >> endobj 428 0 obj -(krylov) +(hb\137write) endobj 429 0 obj -<< /S /GoTo /D [430 0 R /Fit ] >> +<< /S /GoTo /D (section*.85) >> +endobj +432 0 obj +(mm\137mat\137read) +endobj +433 0 obj +<< /S /GoTo /D (section*.86) >> +endobj +436 0 obj +(mm\137vet\137read ) +endobj +437 0 obj +<< /S /GoTo /D (section*.87) >> +endobj +440 0 obj +(mm\137mat\137write) +endobj +441 0 obj +<< /S /GoTo /D (section.10) >> +endobj +444 0 obj +(10 Preconditioner routines) +endobj +445 0 obj +<< /S /GoTo /D (section*.88) >> +endobj +448 0 obj +(psb\137precinit) +endobj +449 0 obj +<< /S /GoTo /D (section*.89) >> +endobj +452 0 obj +(psb\137precbld) +endobj +453 0 obj +<< /S /GoTo /D (section*.90) >> +endobj +456 0 obj +(psb\137precaply) +endobj +457 0 obj +<< /S /GoTo /D (section*.91) >> +endobj +460 0 obj +(psb\137precdescr) +endobj +461 0 obj +<< /S /GoTo /D (section.11) >> +endobj +464 0 obj +(11 Iterative Methods) +endobj +465 0 obj +<< /S /GoTo /D (section*.92) >> +endobj +468 0 obj +(krylov) +endobj +469 0 obj +<< /S /GoTo /D [470 0 R /Fit ] >> endobj -432 0 obj << +472 0 obj << /Length 725 >> stream @@ -665,27 +725,27 @@ BT ET endstream endobj -430 0 obj << +470 0 obj << /Type /Page -/Contents 432 0 R -/Resources 431 0 R +/Contents 472 0 R +/Resources 471 0 R /MediaBox [0 0 595.276 841.89] -/Parent 439 0 R +/Parent 479 0 R >> endobj -433 0 obj << -/D [430 0 R /XYZ 99.895 740.998 null] +473 0 obj << +/D [470 0 R /XYZ 99.895 740.998 null] >> endobj -434 0 obj << -/D [430 0 R /XYZ 99.895 716.092 null] +474 0 obj << +/D [470 0 R /XYZ 99.895 716.092 null] >> endobj 6 0 obj << -/D [430 0 R /XYZ 99.895 716.092 null] +/D [470 0 R /XYZ 99.895 716.092 null] >> endobj -431 0 obj << -/Font << /F16 435 0 R /F18 436 0 R /F27 437 0 R /F8 438 0 R >> +471 0 obj << +/Font << /F16 475 0 R /F18 476 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -442 0 obj << +482 0 obj << /Length 77 >> stream @@ -698,22 +758,22 @@ BT ET endstream endobj -441 0 obj << +481 0 obj << /Type /Page -/Contents 442 0 R -/Resources 440 0 R +/Contents 482 0 R +/Resources 480 0 R /MediaBox [0 0 595.276 841.89] -/Parent 439 0 R +/Parent 479 0 R >> endobj -443 0 obj << -/D [441 0 R /XYZ 150.705 740.998 null] +483 0 obj << +/D [481 0 R /XYZ 150.705 740.998 null] >> endobj -440 0 obj << -/Font << /F8 438 0 R >> +480 0 obj << +/Font << /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -490 0 obj << -/Length 16320 +532 0 obj << +/Length 17819 >> stream 0 g 0 G @@ -721,535 +781,587 @@ stream BT /F16 14.3462 Tf 99.895 706.129 Td [(Con)31(ten)31(ts)]TJ 0 0 1 rg 0 0 1 RG -/F27 9.9626 Tf 0 -23.163 Td [(1)-925(In)32(tro)-32(duction)]TJ +/F27 9.9626 Tf 0 -22.197 Td [(1)-925(In)32(tro)-32(duction)]TJ 0 g 0 G [-26085(1)]TJ 0 0 1 rg 0 0 1 RG - 0 -23.163 Td [(2)-925(General)-383(o)32(v)31(erview)]TJ + 0 -22.196 Td [(2)-925(General)-383(o)32(v)31(erview)]TJ 0 g 0 G [-23689(2)]TJ 0 0 1 rg 0 0 1 RG -/F8 9.9626 Tf 14.944 -12.703 Td [(2.1)-1022(Basic)-334(Nomenclature)]TJ +/F8 9.9626 Tf 14.944 -12.122 Td [(2.1)-1022(Basic)-334(Nomenclature)]TJ 0 g 0 G [-927(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G [-1583(3)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - 0 -12.702 Td [(2.2)-1022(Library)-333(con)27(ten)28(ts)]TJ + 0 -12.123 Td [(2.2)-1022(Library)-333(con)27(ten)28(ts)]TJ 0 g 0 G [-897(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G [-1584(4)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - 0 -12.703 Td [(2.3)-1022(Application)-333(structure)]TJ + 0 -12.122 Td [(2.3)-1022(Application)-333(structure)]TJ 0 g 0 G [-300(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)]TJ 0 g 0 G - [-1584(5)]TJ + [-1584(6)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - 0 -12.702 Td [(2.4)-1022(Programming)-334(mo)-27(del)]TJ + 0 -12.123 Td [(2.4)-1022(Programming)-334(mo)-27(del)]TJ 0 g 0 G [-736(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)]TJ 0 g 0 G - [-1584(7)]TJ + [-1584(8)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG -/F27 9.9626 Tf -14.944 -23.163 Td [(3)-925(Data)-383(Struct)-1(ure)1(s)]TJ +/F27 9.9626 Tf -14.944 -22.196 Td [(3)-925(Data)-383(Struct)-1(ure)1(s)-384(and)-383(Classes)]TJ 0 g 0 G - [-24345(9)]TJ + [-18144(9)]TJ 0 0 1 rg 0 0 1 RG -/F8 9.9626 Tf 14.944 -12.702 Td [(3.1)-1022(Descriptor)-334(data)-333(structure)]TJ +/F8 9.9626 Tf 14.944 -12.122 Td [(3.1)-1022(Descriptor)-334(data)-333(structure)]TJ 0 g 0 G [-886(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G [-1584(9)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - 22.914 -12.703 Td [(3.1.1)-1144(Nam)-1(ed)-333(Constan)28(ts)]TJ + 22.914 -12.123 Td [(3.1.1)-1144(Metho)-28(ds)]TJ 0 g 0 G - [-1016(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-356(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G [-1084(11)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -22.914 -12.702 Td [(3.2)-1022(Sparse)-334(Matr)1(ix)-334(data)-333(structure)]TJ -0 g 0 G - [-816(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ -0 g 0 G - [-1084(12)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG - 22.914 -12.703 Td [(3.2.1)-1144(Nam)-1(ed)-333(Constan)28(ts)]TJ -0 g 0 G - [-1016(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ -0 g 0 G - [-1084(14)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG - -22.914 -12.702 Td [(3.3)-1022(Dense)-334(V)84(ector)-334(Data)-333(Structure)]TJ -0 g 0 G - [-852(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ -0 g 0 G - [-1084(14)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG - 0 -12.702 Td [(3.4)-1022(Preconditioner)-333(data)-334(structure)]TJ -0 g 0 G - [-586(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ -0 g 0 G - [-1084(15)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG - 0 -12.703 Td [(3.5)-1022(Data)-334(structure)-333(query)-333(routines)]TJ -0 g 0 G - [-497(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)]TJ -0 g 0 G - [-1084(15)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG - 22.914 -12.702 Td [(get)]TJ + 0 -12.122 Td [(get)]TJ ET q -1 0 0 1 151.635 484.41 cm +1 0 0 1 151.635 554.882 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 154.624 484.211 Td [(lo)-28(cal)]TJ +/F8 9.9626 Tf 154.624 554.683 Td [(lo)-28(cal)]TJ ET q -1 0 0 1 175.423 484.41 cm +1 0 0 1 175.423 554.882 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 178.412 484.211 Td [(ro)28(ws)]TJ +/F8 9.9626 Tf 178.412 554.683 Td [(ro)28(ws)]TJ 0 g 0 G [-1277(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1083(15)]TJ + [-1083(11)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -40.659 -12.702 Td [(get)]TJ + -40.659 -12.123 Td [(get)]TJ ET q -1 0 0 1 151.635 471.708 cm +1 0 0 1 151.635 542.76 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 154.624 471.509 Td [(lo)-28(cal)]TJ +/F8 9.9626 Tf 154.624 542.56 Td [(lo)-28(cal)]TJ ET q -1 0 0 1 175.423 471.708 cm +1 0 0 1 175.423 542.76 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 178.412 471.509 Td [(cols)]TJ +/F8 9.9626 Tf 178.412 542.56 Td [(cols)]TJ 0 g 0 G [-863(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(15)]TJ + [-1084(12)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -40.659 -12.703 Td [(get)]TJ + -40.659 -12.122 Td [(get)]TJ ET q -1 0 0 1 151.635 459.006 cm +1 0 0 1 151.635 530.637 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 154.624 458.806 Td [(global)]TJ +/F8 9.9626 Tf 154.624 530.438 Td [(global)]TJ ET q -1 0 0 1 181.235 459.006 cm +1 0 0 1 181.235 530.637 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.224 458.806 Td [(ro)28(ws)]TJ +/F8 9.9626 Tf 184.224 530.438 Td [(ro)28(ws)]TJ 0 g 0 G [-694(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(16)]TJ + [-1084(12)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -46.47 -12.702 Td [(get)]TJ + -46.47 -12.122 Td [(get)]TJ ET q -1 0 0 1 151.635 446.303 cm +1 0 0 1 151.635 518.515 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 154.624 446.104 Td [(global)]TJ +/F8 9.9626 Tf 154.624 518.316 Td [(global)]TJ ET q -1 0 0 1 181.235 446.303 cm +1 0 0 1 181.235 518.515 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.224 446.104 Td [(cols)]TJ +/F8 9.9626 Tf 184.224 518.316 Td [(cols)]TJ 0 g 0 G [-1058(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(17)]TJ + [-1084(13)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -46.47 -12.702 Td [(get)]TJ + -46.47 -12.123 Td [(get)]TJ ET q -1 0 0 1 151.635 433.601 cm +1 0 0 1 151.635 506.393 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 154.624 433.402 Td [(con)28(text)]TJ +/F8 9.9626 Tf 154.624 506.193 Td [(con)28(text)]TJ 0 g 0 G [-868(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(17)]TJ + [-1084(13)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -16.87 -12.703 Td [(psb)]TJ + -16.87 -12.122 Td [(psb)]TJ ET q -1 0 0 1 153.351 420.898 cm +1 0 0 1 153.351 494.27 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 156.339 420.699 Td [(cd)]TJ +/F8 9.9626 Tf 156.339 494.071 Td [(cd)]TJ ET q -1 0 0 1 166.9 420.898 cm +1 0 0 1 166.9 494.27 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 169.889 420.699 Td [(get)]TJ +/F8 9.9626 Tf 169.889 494.071 Td [(get)]TJ ET q -1 0 0 1 183.77 420.898 cm +1 0 0 1 183.77 494.27 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 186.759 420.699 Td [(large)]TJ +/F8 9.9626 Tf 186.759 494.071 Td [(large)]TJ ET q -1 0 0 1 208.416 420.898 cm +1 0 0 1 208.416 494.27 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 211.405 420.699 Td [(threshold)]TJ +/F8 9.9626 Tf 211.405 494.071 Td [(threshold)]TJ 0 g 0 G [-549(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(17)]TJ + [-1084(13)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -73.652 -12.702 Td [(psb)]TJ + -73.652 -12.122 Td [(psb)]TJ ET q -1 0 0 1 153.351 408.196 cm +1 0 0 1 153.351 482.148 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 156.339 407.997 Td [(cd)]TJ +/F8 9.9626 Tf 156.339 481.949 Td [(cd)]TJ ET q -1 0 0 1 166.9 408.196 cm +1 0 0 1 166.9 482.148 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 169.889 407.997 Td [(set)]TJ +/F8 9.9626 Tf 169.889 481.949 Td [(set)]TJ ET q -1 0 0 1 182.718 408.196 cm +1 0 0 1 182.718 482.148 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 185.707 407.997 Td [(large)]TJ +/F8 9.9626 Tf 185.707 481.949 Td [(large)]TJ ET q -1 0 0 1 207.365 408.196 cm +1 0 0 1 207.365 482.148 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 210.354 407.997 Td [(threshold)]TJ +/F8 9.9626 Tf 210.354 481.949 Td [(threshold)]TJ 0 g 0 G [-654(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(18)]TJ + [-1084(13)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -72.601 -12.123 Td [(3.1.2)-1144(Nam)-1(ed)-333(Constan)28(ts)]TJ +0 g 0 G + [-1017(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(14)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -22.914 -12.122 Td [(3.2)-1022(Sparse)-334(Matri)1(x)-334(class)]TJ +0 g 0 G + [-372(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(14)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + 22.914 -12.123 Td [(3.2.1)-1144(Metho)-28(ds)]TJ +0 g 0 G + [-356(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(15)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -72.601 -12.702 Td [(get)]TJ + 0 -12.122 Td [(get)]TJ ET q -1 0 0 1 151.635 395.494 cm +1 0 0 1 151.635 433.658 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 154.624 395.295 Td [(nro)28(ws)]TJ +/F8 9.9626 Tf 154.624 433.459 Td [(nro)28(ws)]TJ 0 g 0 G [-776(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(18)]TJ + [-1084(15)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -16.87 -12.703 Td [(get)]TJ + -16.87 -12.122 Td [(get)]TJ ET q -1 0 0 1 151.635 382.791 cm +1 0 0 1 151.635 421.536 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 154.624 382.592 Td [(ncols)]TJ +/F8 9.9626 Tf 154.624 421.337 Td [(ncols)]TJ 0 g 0 G [-362(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(18)]TJ + [-1084(15)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -16.87 -12.702 Td [(get)]TJ + -16.87 -12.123 Td [(get)]TJ ET q -1 0 0 1 151.635 370.089 cm +1 0 0 1 151.635 409.414 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 154.624 369.89 Td [(nnzeros)]TJ +/F8 9.9626 Tf 154.624 409.214 Td [(nnzeros)]TJ 0 g 0 G [-804(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(19)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG -/F27 9.9626 Tf -54.729 -23.163 Td [(4)-925(Computational)-383(r)-1(ou)1(t)-1(ines)]TJ + [-1084(16)]TJ 0 g 0 G - [-19886(20)]TJ 0 0 1 rg 0 0 1 RG -/F8 9.9626 Tf 14.944 -12.703 Td [(psb)]TJ + -16.87 -12.122 Td [(get)]TJ ET q -1 0 0 1 130.436 334.224 cm +1 0 0 1 151.635 397.291 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 334.024 Td [(geaxpb)28(y)]TJ +/F8 9.9626 Tf 154.624 397.092 Td [(size)]TJ 0 g 0 G - [-301(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-973(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(21)]TJ + [-1084(16)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -12.702 Td [(psb)]TJ -ET -q -1 0 0 1 130.436 321.521 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S -Q -BT -/F8 9.9626 Tf 133.425 321.322 Td [(gedot)]TJ + -16.87 -12.122 Td [(sizeof)]TJ 0 g 0 G - [-718(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-305(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)]TJ 0 g 0 G - [-1083(23)]TJ + [-1084(17)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -12.702 Td [(psb)]TJ + 0 -12.123 Td [(get)]TJ ET q -1 0 0 1 130.436 308.819 cm +1 0 0 1 151.635 373.046 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 308.62 Td [(gedots)]TJ +/F8 9.9626 Tf 154.624 372.847 Td [(fm)28(t)]TJ 0 g 0 G - [-323(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-257(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(25)]TJ + [-1084(17)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -12.703 Td [(psb)]TJ + -16.87 -12.122 Td [(is)]TJ ET q -1 0 0 1 130.436 296.116 cm +1 0 0 1 145.048 360.924 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 295.917 Td [(geamax)]TJ -0 g 0 G - [-579(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ -0 g 0 G - [-1084(27)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG - -18.586 -12.702 Td [(psb)]TJ +/F8 9.9626 Tf 148.037 360.725 Td [(bld,)-333(is)]TJ ET q -1 0 0 1 130.436 283.414 cm +1 0 0 1 175.257 360.924 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 283.215 Td [(geamaxs)]TJ -0 g 0 G - [-962(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ -0 g 0 G - [-1084(28)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG - -18.586 -12.703 Td [(psb)]TJ +/F8 9.9626 Tf 178.246 360.725 Td [(up)-28(d,)-333(is)]TJ ET q -1 0 0 1 130.436 270.712 cm +1 0 0 1 208.51 360.924 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 270.512 Td [(geasum)]TJ +/F8 9.9626 Tf 211.499 360.725 Td [(asb)]TJ 0 g 0 G - [-657(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-820(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1083(29)]TJ + [-1084(17)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -12.702 Td [(psb)]TJ -ET -q -1 0 0 1 130.436 258.009 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S -Q -BT -/F8 9.9626 Tf 133.425 257.81 Td [(geasums)]TJ + -73.746 -12.123 Td [(3.2.2)-1144(Nam)-1(ed)-333(Constan)28(ts)]TJ 0 g 0 G - [-262(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-1017(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(30)]TJ + [-1084(18)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -12.702 Td [(psb)]TJ -ET -q -1 0 0 1 130.436 245.307 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S -Q -BT -/F8 9.9626 Tf 133.425 245.108 Td [(geasums)]TJ + -22.914 -12.122 Td [(3.3)-1022(Dense)-334(V)84(ector)-334(Data)-333(Structure)]TJ 0 g 0 G - [-262(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-852(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(32)]TJ + [-1084(18)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -12.703 Td [(psb)]TJ -ET -q -1 0 0 1 130.436 232.605 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S -Q -BT -/F8 9.9626 Tf 133.425 232.405 Td [(genrm2s)]TJ + 22.914 -12.122 Td [(3.3.1)-1144(Metho)-28(ds)]TJ 0 g 0 G - [-265(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-356(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(33)]TJ + [-1084(19)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -12.702 Td [(psb)]TJ + 0 -12.123 Td [(v)]TJ ET q -1 0 0 1 130.436 219.902 cm +1 0 0 1 143.609 312.435 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 219.703 Td [(spnrmi)]TJ -0 g 0 G - [-876(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ -0 g 0 G - [-1084(34)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG - -18.586 -12.702 Td [(psb)]TJ +/F8 9.9626 Tf 146.598 312.235 Td [(get)]TJ ET q -1 0 0 1 130.436 207.2 cm +1 0 0 1 160.479 312.435 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 207.001 Td [(spmm)]TJ +/F8 9.9626 Tf 163.468 312.235 Td [(nro)28(ws)]TJ 0 g 0 G - [-490(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-666(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(35)]TJ + [-1084(19)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -12.703 Td [(psb)]TJ + -25.715 -12.122 Td [(v)]TJ ET q -1 0 0 1 130.436 194.498 cm +1 0 0 1 143.609 300.312 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 194.298 Td [(spsm)]TJ +/F8 9.9626 Tf 146.598 300.113 Td [(sizeof)]TJ 0 g 0 G - [-929(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-973(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(37)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG -/F27 9.9626 Tf -33.53 -23.163 Td [(5)-925(Comm)32(unication)-384(routines)]TJ + [-1084(19)]TJ 0 g 0 G - [-19454(40)]TJ 0 0 1 rg 0 0 1 RG -/F8 9.9626 Tf 14.944 -12.702 Td [(psb)]TJ + -8.845 -12.122 Td [(v)]TJ ET q -1 0 0 1 130.436 158.632 cm +1 0 0 1 143.609 288.19 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 158.433 Td [(halo)]TJ -0 g 0 G - [-495(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)]TJ -0 g 0 G - [-1084(41)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG - -18.586 -12.703 Td [(psb)]TJ +/F8 9.9626 Tf 146.598 287.991 Td [(get)]TJ ET q -1 0 0 1 130.436 145.93 cm +1 0 0 1 160.479 288.19 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 145.73 Td [(o)28(vrl)]TJ +/F8 9.9626 Tf 163.468 287.991 Td [(v)28(ect)]TJ 0 g 0 G - [-660(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)]TJ + [-647(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(44)]TJ + [-1084(19)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -12.702 Td [(psb)]TJ -ET -q -1 0 0 1 130.436 133.227 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S + -48.629 -12.123 Td [(3.4)-1022(Preconditioner)-333(data)-334(structure)]TJ +0 g 0 G + [-586(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(20)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + 0 -12.122 Td [(3.5)-1022(Data)-334(structure)-333(Metho)-28(ds)]TJ +0 g 0 G + [-669(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(20)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG +/F27 9.9626 Tf -14.944 -22.197 Td [(4)-925(Computational)-383(r)-1(ou)1(t)-1(ines)]TJ +0 g 0 G + [-19886(22)]TJ +0 0 1 rg 0 0 1 RG +/F8 9.9626 Tf 14.944 -12.122 Td [(psb)]TJ +ET +q +1 0 0 1 130.436 229.626 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 133.425 229.427 Td [(geaxpb)28(y)]TJ +0 g 0 G + [-301(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(23)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -12.122 Td [(psb)]TJ +ET +q +1 0 0 1 130.436 217.504 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 133.425 217.305 Td [(gedot)]TJ +0 g 0 G + [-718(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1083(25)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -12.123 Td [(psb)]TJ +ET +q +1 0 0 1 130.436 205.382 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 133.425 205.182 Td [(gedots)]TJ +0 g 0 G + [-323(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(27)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -12.122 Td [(psb)]TJ +ET +q +1 0 0 1 130.436 193.259 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 133.425 193.06 Td [(geamax)]TJ +0 g 0 G + [-579(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(29)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -12.122 Td [(psb)]TJ +ET +q +1 0 0 1 130.436 181.137 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 133.425 180.937 Td [(geamaxs)]TJ +0 g 0 G + [-962(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(30)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -12.122 Td [(psb)]TJ +ET +q +1 0 0 1 130.436 169.014 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 133.425 168.815 Td [(geasum)]TJ +0 g 0 G + [-657(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1083(31)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -12.122 Td [(psb)]TJ +ET +q +1 0 0 1 130.436 156.892 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 133.425 156.693 Td [(geasums)]TJ +0 g 0 G + [-262(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(32)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -12.123 Td [(psb)]TJ +ET +q +1 0 0 1 130.436 144.77 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 133.425 144.57 Td [(geasums)]TJ +0 g 0 G + [-262(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(34)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -12.122 Td [(psb)]TJ +ET +q +1 0 0 1 130.436 132.647 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 133.028 Td [(gather)]TJ +/F8 9.9626 Tf 133.425 132.448 Td [(genrm2s)]TJ 0 g 0 G - [-326(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-265(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(48)]TJ + [-1084(35)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -12.702 Td [(psb)]TJ + -18.586 -12.122 Td [(psb)]TJ ET q 1 0 0 1 130.436 120.525 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 120.326 Td [(scatter)]TJ +/F8 9.9626 Tf 133.425 120.326 Td [(spnrmi)]TJ 0 g 0 G - [-932(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-876(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1083(50)]TJ + [-1084(36)]TJ 0 g 0 G 0 g 0 G 136.942 -29.888 Td [(i)]TJ @@ -1257,1379 +1369,1442 @@ BT ET endstream endobj -489 0 obj << +531 0 obj << /Type /Page -/Contents 490 0 R -/Resources 488 0 R +/Contents 532 0 R +/Resources 530 0 R /MediaBox [0 0 595.276 841.89] -/Parent 439 0 R -/Annots [ 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R ] +/Parent 479 0 R +/Annots [ 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R ] >> endobj -444 0 obj << +484 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [98.899 681.969 179.001 690.88] +/Rect [98.899 682.936 179.001 691.847] /Subtype /Link /A << /S /GoTo /D (section.1) >> >> endobj -445 0 obj << +485 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [98.899 658.806 202.863 667.717] +/Rect [98.899 660.74 202.863 669.651] /Subtype /Link /A << /S /GoTo /D (section.2) >> >> endobj -446 0 obj << +486 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 646.104 225.868 655.015] +/Rect [113.843 648.617 225.868 657.528] /Subtype /Link /A << /S /GoTo /D (subsection.2.1) >> >> endobj -447 0 obj << +487 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 631.464 210.675 642.313] +/Rect [113.843 634.558 210.675 645.406] /Subtype /Link /A << /S /GoTo /D (subsection.2.2) >> >> endobj -448 0 obj << +488 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 618.762 232.122 629.61] +/Rect [113.843 622.435 232.122 633.284] /Subtype /Link /A << /S /GoTo /D (subsection.2.3) >> >> endobj -449 0 obj << +489 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 606.06 227.777 616.908] +/Rect [113.843 610.313 227.777 621.161] /Subtype /Link /A << /S /GoTo /D (subsection.2.4) >> >> endobj -450 0 obj << +490 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [98.899 584.834 196.34 593.662] +/Rect [98.899 590.054 258.112 598.965] /Subtype /Link /A << /S /GoTo /D (section.3) >> >> endobj -451 0 obj << +491 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 570.194 249.529 581.042] +/Rect [113.843 575.994 249.529 586.842] /Subtype /Link /A << /S /GoTo /D (subsection.3.1) >> >> endobj -452 0 obj << +492 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 559.429 248.228 568.34] +/Rect [136.757 565.809 208.322 574.72] /Subtype /Link /A << /S /GoTo /D (subsubsection.3.1.1) >> >> endobj -453 0 obj << +493 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 544.789 265.718 555.638] +/Rect [136.757 551.749 202.461 562.598] /Subtype /Link -/A << /S /GoTo /D (subsection.3.2) >> +/A << /S /GoTo /D (section*.2) >> >> endobj -454 0 obj << +494 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 534.024 248.228 542.935] +/Rect [136.757 539.627 198.836 550.475] /Subtype /Link -/A << /S /GoTo /D (subsubsection.3.2.1) >> +/A << /S /GoTo /D (section*.3) >> >> endobj -455 0 obj << +495 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 521.322 265.358 530.122] +/Rect [136.757 527.505 208.273 538.353] /Subtype /Link -/A << /S /GoTo /D (subsection.3.3) >> +/A << /S /GoTo /D (section*.4) >> >> endobj -456 0 obj << +496 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 508.62 268.015 517.531] +/Rect [136.757 515.382 204.647 526.23] /Subtype /Link -/A << /S /GoTo /D (subsection.3.4) >> +/A << /S /GoTo /D (section*.5) >> >> endobj -457 0 obj << +497 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 493.98 268.901 504.717] +/Rect [136.757 503.26 187.722 513.61] /Subtype /Link -/A << /S /GoTo /D (subsection.3.5) >> +/A << /S /GoTo /D (section*.6) >> >> endobj -458 0 obj << +498 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 481.278 202.461 492.126] +/Rect [136.757 491.137 252.889 501.986] /Subtype /Link -/A << /S /GoTo /D (section*.2) >> +/A << /S /GoTo /D (section*.7) >> >> endobj -459 0 obj << +499 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 468.575 198.836 479.423] +/Rect [136.757 479.015 251.837 489.863] /Subtype /Link -/A << /S /GoTo /D (section*.3) >> +/A << /S /GoTo /D (section*.8) >> >> endobj -460 0 obj << +500 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 455.873 208.273 466.721] +/Rect [136.757 468.83 248.228 477.741] /Subtype /Link -/A << /S /GoTo /D (section*.4) >> +/A << /S /GoTo /D (subsubsection.3.1.2) >> >> endobj -461 0 obj << +501 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 443.171 204.647 454.019] +/Rect [113.843 454.77 223.654 465.619] /Subtype /Link -/A << /S /GoTo /D (section*.5) >> +/A << /S /GoTo /D (subsection.3.2) >> >> endobj -462 0 obj << +502 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 430.468 187.722 440.818] +/Rect [136.757 444.585 208.322 453.496] /Subtype /Link -/A << /S /GoTo /D (section*.6) >> +/A << /S /GoTo /D (subsubsection.3.2.1) >> >> endobj -463 0 obj << +503 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 417.766 252.889 428.614] +/Rect [136.757 430.526 180.886 440.876] /Subtype /Link -/A << /S /GoTo /D (section*.7) >> +/A << /S /GoTo /D (section*.9) >> >> endobj -464 0 obj << +504 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 405.063 251.837 415.912] +/Rect [136.757 418.403 177.261 429.251] /Subtype /Link -/A << /S /GoTo /D (section*.8) >> +/A << /S /GoTo /D (section*.10) >> >> endobj -465 0 obj << +505 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 392.361 180.886 402.711] +/Rect [136.757 406.281 188.358 416.631] /Subtype /Link -/A << /S /GoTo /D (section*.9) >> +/A << /S /GoTo /D (section*.11) >> >> endobj -466 0 obj << +506 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 379.659 177.261 390.507] +/Rect [136.757 394.159 171.173 404.742] /Subtype /Link -/A << /S /GoTo /D (section*.10) >> +/A << /S /GoTo /D (section*.12) >> >> endobj -467 0 obj << +507 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 366.956 188.358 377.306] +/Rect [136.757 383.973 162.328 392.884] /Subtype /Link -/A << /S /GoTo /D (section*.11) >> +/A << /S /GoTo /D (section*.13) >> >> endobj -468 0 obj << +508 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [98.899 343.793 235.028 354.641] +/Rect [136.757 369.914 170.564 380.762] /Subtype /Link -/A << /S /GoTo /D (section.4) >> +/A << /S /GoTo /D (section*.14) >> >> endobj -469 0 obj << +509 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 331.091 170.121 341.939] +/Rect [136.757 357.791 226.941 368.64] /Subtype /Link -/A << /S /GoTo /D (section*.12) >> +/A << /S /GoTo /D (section*.15) >> >> endobj -470 0 obj << +510 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 318.388 158.221 329.237] +/Rect [136.757 347.606 248.228 356.517] /Subtype /Link -/A << /S /GoTo /D (section*.13) >> +/A << /S /GoTo /D (subsubsection.3.2.2) >> >> endobj -471 0 obj << +511 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 305.686 162.151 316.534] +/Rect [113.843 335.484 265.358 344.284] /Subtype /Link -/A << /S /GoTo /D (section*.14) >> +/A << /S /GoTo /D (subsection.3.3) >> >> endobj -472 0 obj << +512 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 292.984 167.354 303.832] +/Rect [136.757 323.361 208.322 332.272] /Subtype /Link -/A << /S /GoTo /D (section*.15) >> +/A << /S /GoTo /D (subsubsection.3.3.1) >> >> endobj -473 0 obj << +513 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 280.281 171.283 291.13] +/Rect [136.757 309.302 189.731 319.652] /Subtype /Link /A << /S /GoTo /D (section*.16) >> >> endobj -474 0 obj << +514 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 267.579 166.579 278.427] +/Rect [136.757 299.117 171.173 308.028] /Subtype /Link -/A << /S /GoTo /D (section*.17) >> +/A << /S /GoTo /D (section*.18) >> >> endobj -475 0 obj << +515 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 254.877 170.508 265.725] +/Rect [136.757 285.057 182.176 295.407] /Subtype /Link -/A << /S /GoTo /D (section*.18) >> +/A << /S /GoTo /D (section*.19) >> >> endobj -476 0 obj << +516 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 242.174 170.508 253.022] +/Rect [113.843 274.872 268.015 283.783] /Subtype /Link -/A << /S /GoTo /D (section*.19) >> +/A << /S /GoTo /D (subsection.3.4) >> >> endobj -477 0 obj << +517 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 229.472 170.481 240.32] +/Rect [113.843 262.75 243.939 271.661] /Subtype /Link -/A << /S /GoTo /D (section*.20) >> +/A << /S /GoTo /D (subsection.3.5) >> >> endobj -478 0 obj << +518 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 216.77 164.393 227.618] +/Rect [98.899 238.616 235.028 249.464] /Subtype /Link -/A << /S /GoTo /D (section*.21) >> +/A << /S /GoTo /D (section.4) >> >> endobj -479 0 obj << +519 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 204.067 160.49 214.915] +/Rect [113.843 226.494 170.121 237.342] /Subtype /Link -/A << /S /GoTo /D (section*.22) >> +/A << /S /GoTo /D (section*.20) >> >> endobj -480 0 obj << +520 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 191.365 156.118 202.213] +/Rect [113.843 214.371 158.221 225.219] /Subtype /Link -/A << /S /GoTo /D (section*.23) >> +/A << /S /GoTo /D (section*.21) >> >> endobj -481 0 obj << +521 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [98.899 170.139 239.325 179.05] +/Rect [113.843 202.249 162.151 213.097] /Subtype /Link -/A << /S /GoTo /D (section.5) >> +/A << /S /GoTo /D (section*.22) >> >> endobj -482 0 obj << +522 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.843 190.126 167.354 200.975] +/Subtype /Link +/A << /S /GoTo /D (section*.23) >> +>> endobj +523 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 155.499 152.686 166.347] +/Rect [113.843 178.004 171.283 188.852] /Subtype /Link /A << /S /GoTo /D (section*.24) >> >> endobj -483 0 obj << +524 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 142.797 151.054 153.645] +/Rect [113.843 165.882 166.579 176.73] /Subtype /Link /A << /S /GoTo /D (section*.25) >> >> endobj -484 0 obj << +525 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 130.095 162.123 140.943] +/Rect [113.843 153.759 170.508 164.608] /Subtype /Link /A << /S /GoTo /D (section*.26) >> >> endobj -485 0 obj << +526 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 117.392 163.839 128.24] +/Rect [113.843 141.637 170.508 152.485] /Subtype /Link /A << /S /GoTo /D (section*.27) >> >> endobj -491 0 obj << -/D [489 0 R /XYZ 99.895 740.998 null] +527 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.843 129.515 170.481 140.363] +/Subtype /Link +/A << /S /GoTo /D (section*.28) >> >> endobj -492 0 obj << -/D [489 0 R /XYZ 99.895 695.727 null] +528 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.843 117.392 164.393 128.24] +/Subtype /Link +/A << /S /GoTo /D (section*.29) >> >> endobj -488 0 obj << -/Font << /F16 435 0 R /F27 437 0 R /F8 438 0 R >> +533 0 obj << +/D [531 0 R /XYZ 99.895 740.998 null] +>> endobj +534 0 obj << +/D [531 0 R /XYZ 99.895 696.143 null] +>> endobj +530 0 obj << +/Font << /F16 475 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -542 0 obj << -/Length 20922 +584 0 obj << +/Length 21523 >> stream 0 g 0 G 0 g 0 G 0 0 1 rg 0 0 1 RG BT -/F27 9.9626 Tf 150.705 706.129 Td [(6)-925(Data)-383(managem)-1(e)1(n)31(t)-383(routines)]TJ -0 g 0 G - [-18205(52)]TJ -0 0 1 rg 0 0 1 RG -/F8 9.9626 Tf 14.944 -13.071 Td [(psb)]TJ +/F8 9.9626 Tf 165.649 706.129 Td [(psb)]TJ ET q -1 0 0 1 181.246 693.258 cm +1 0 0 1 181.246 706.328 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 693.058 Td [(cdall)]TJ +/F8 9.9626 Tf 184.235 706.129 Td [(spmm)]TJ 0 g 0 G - [-273(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-490(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(52)]TJ + [-1084(37)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 680.187 cm +1 0 0 1 181.246 694.248 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 679.988 Td [(cdins)]TJ +/F8 9.9626 Tf 184.235 694.049 Td [(spsm)]TJ 0 g 0 G - [-879(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-929(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(56)]TJ + [-1084(39)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ +/F27 9.9626 Tf -33.53 -22.125 Td [(5)-925(Comm)32(unication)-383(r)-1(ou)1(t)-1(ines)]TJ +0 g 0 G + [-19454(42)]TJ +0 0 1 rg 0 0 1 RG +/F8 9.9626 Tf 14.944 -12.08 Td [(psb)]TJ +ET +q +1 0 0 1 181.246 660.043 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 184.235 659.844 Td [(halo)]TJ +0 g 0 G + [-495(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(43)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -12.08 Td [(psb)]TJ +ET +q +1 0 0 1 181.246 647.964 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 184.235 647.764 Td [(o)28(vrl)]TJ +0 g 0 G + [-659(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)]TJ +0 g 0 G + [-1084(46)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -12.079 Td [(psb)]TJ +ET +q +1 0 0 1 181.246 635.884 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 184.235 635.685 Td [(gather)]TJ +0 g 0 G + [-326(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(50)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -12.08 Td [(psb)]TJ +ET +q +1 0 0 1 181.246 623.804 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 184.235 623.605 Td [(scatter)]TJ +0 g 0 G + [-932(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1083(52)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG +/F27 9.9626 Tf -33.53 -22.125 Td [(6)-925(Data)-383(managem)-1(e)1(n)31(t)-383(routines)]TJ +0 g 0 G + [-18205(54)]TJ +0 0 1 rg 0 0 1 RG +/F8 9.9626 Tf 14.944 -12.08 Td [(psb)]TJ +ET +q +1 0 0 1 181.246 589.599 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 184.235 589.4 Td [(cdall)]TJ +0 g 0 G + [-273(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(54)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -12.08 Td [(psb)]TJ +ET +q +1 0 0 1 181.246 577.519 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 184.235 577.32 Td [(cdins)]TJ +0 g 0 G + [-879(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-1084(58)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -12.079 Td [(psb)]TJ ET q -1 0 0 1 181.246 667.117 cm +1 0 0 1 181.246 565.44 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 666.918 Td [(cdasb)]TJ +/F8 9.9626 Tf 184.235 565.241 Td [(cdasb)]TJ 0 g 0 G [-657(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1083(57)]TJ + [-1083(59)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.071 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 654.047 cm +1 0 0 1 181.246 553.36 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 653.847 Td [(cdcp)28(y)]TJ +/F8 9.9626 Tf 184.235 553.161 Td [(cdcp)28(y)]TJ 0 g 0 G [-607(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(58)]TJ + [-1084(60)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 640.976 cm +1 0 0 1 181.246 541.28 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 640.777 Td [(cdfree)]TJ +/F8 9.9626 Tf 184.235 541.081 Td [(cdfree)]TJ 0 g 0 G [-520(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(59)]TJ + [-1084(61)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 627.906 cm +1 0 0 1 181.246 529.201 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 627.707 Td [(cdbldext)]TJ +/F8 9.9626 Tf 184.235 529.001 Td [(cdbldext)]TJ 0 g 0 G [-912(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(60)]TJ + [-1084(62)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.071 Td [(psb)]TJ + -18.586 -12.079 Td [(psb)]TJ ET q -1 0 0 1 181.246 614.835 cm +1 0 0 1 181.246 517.121 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 614.636 Td [(spall)]TJ +/F8 9.9626 Tf 184.235 516.922 Td [(spall)]TJ 0 g 0 G [-323(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(62)]TJ + [-1084(64)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 601.765 cm +1 0 0 1 181.246 505.041 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 601.566 Td [(spins)]TJ +/F8 9.9626 Tf 184.235 504.842 Td [(spins)]TJ 0 g 0 G [-929(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(63)]TJ + [-1084(65)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.071 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 588.695 cm +1 0 0 1 181.246 492.962 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 588.495 Td [(spasb)]TJ +/F8 9.9626 Tf 184.235 492.762 Td [(spasb)]TJ 0 g 0 G [-707(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1083(65)]TJ + [-1083(67)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.079 Td [(psb)]TJ ET q -1 0 0 1 181.246 575.624 cm +1 0 0 1 181.246 480.882 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 575.425 Td [(spfree)]TJ +/F8 9.9626 Tf 184.235 480.683 Td [(spfree)]TJ 0 g 0 G [-570(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(67)]TJ + [-1084(69)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 562.554 cm +1 0 0 1 181.246 468.802 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 562.355 Td [(sprn)]TJ +/F8 9.9626 Tf 184.235 468.603 Td [(sprn)]TJ 0 g 0 G [-431(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)]TJ 0 g 0 G - [-1084(68)]TJ + [-1084(70)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.071 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 549.483 cm +1 0 0 1 181.246 456.722 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 549.284 Td [(geall)]TJ +/F8 9.9626 Tf 184.235 456.523 Td [(geall)]TJ 0 g 0 G [-329(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(69)]TJ + [-1084(71)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.079 Td [(psb)]TJ ET q -1 0 0 1 181.246 536.413 cm +1 0 0 1 181.246 444.643 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 536.214 Td [(geins)]TJ +/F8 9.9626 Tf 184.235 444.444 Td [(geins)]TJ 0 g 0 G [-934(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(70)]TJ + [-1084(72)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.071 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 523.343 cm +1 0 0 1 181.246 432.563 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 523.143 Td [(geasb)]TJ +/F8 9.9626 Tf 184.235 432.364 Td [(geasb)]TJ 0 g 0 G [-712(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(72)]TJ + [-1084(74)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 510.272 cm +1 0 0 1 181.246 420.483 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 510.073 Td [(gefree)]TJ +/F8 9.9626 Tf 184.235 420.284 Td [(gefree)]TJ 0 g 0 G [-576(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(73)]TJ + [-1084(75)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 497.202 cm +1 0 0 1 181.246 408.404 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 497.003 Td [(gelp)]TJ +/F8 9.9626 Tf 184.235 408.204 Td [(gelp)]TJ 0 g 0 G [-551(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(74)]TJ + [-1084(76)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.071 Td [(psb)]TJ + -18.586 -12.079 Td [(psb)]TJ ET q -1 0 0 1 181.246 484.132 cm +1 0 0 1 181.246 396.324 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 483.932 Td [(glob)]TJ +/F8 9.9626 Tf 184.235 396.125 Td [(glob)]TJ ET q -1 0 0 1 203.097 484.132 cm +1 0 0 1 203.097 396.324 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 206.086 483.932 Td [(to)]TJ +/F8 9.9626 Tf 206.086 396.125 Td [(to)]TJ ET q -1 0 0 1 215.54 484.132 cm +1 0 0 1 215.54 396.324 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 218.528 483.932 Td [(lo)-28(c)]TJ +/F8 9.9626 Tf 218.528 396.125 Td [(lo)-28(c)]TJ 0 g 0 G [-747(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1083(75)]TJ + [-1083(77)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -52.879 -13.07 Td [(psb)]TJ + -52.879 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 471.061 cm +1 0 0 1 181.246 384.244 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 470.862 Td [(lo)-28(c)]TJ +/F8 9.9626 Tf 184.235 384.045 Td [(lo)-28(c)]TJ ET q -1 0 0 1 197.286 471.061 cm +1 0 0 1 197.286 384.244 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 200.275 470.862 Td [(to)]TJ +/F8 9.9626 Tf 200.275 384.045 Td [(to)]TJ ET q -1 0 0 1 209.728 471.061 cm +1 0 0 1 209.728 384.244 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 212.717 470.862 Td [(glob)]TJ +/F8 9.9626 Tf 212.717 384.045 Td [(glob)]TJ 0 g 0 G [-748(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1083(77)]TJ + [-1083(79)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -47.068 -13.071 Td [(psb)]TJ + -47.068 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 457.991 cm +1 0 0 1 181.246 372.165 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 457.791 Td [(is)]TJ +/F8 9.9626 Tf 184.235 371.965 Td [(is)]TJ ET q -1 0 0 1 191.53 457.991 cm +1 0 0 1 191.53 372.165 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 194.518 457.791 Td [(o)28(wned)]TJ +/F8 9.9626 Tf 194.518 371.965 Td [(o)28(wned)]TJ 0 g 0 G [-880(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(78)]TJ + [-1084(80)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -28.869 -13.07 Td [(psb)]TJ + -28.869 -12.079 Td [(psb)]TJ ET q -1 0 0 1 181.246 444.92 cm +1 0 0 1 181.246 360.085 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 444.721 Td [(o)28(wned)]TJ +/F8 9.9626 Tf 184.235 359.886 Td [(o)28(wned)]TJ ET q -1 0 0 1 212.23 444.92 cm +1 0 0 1 212.23 360.085 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 215.219 444.721 Td [(index)]TJ +/F8 9.9626 Tf 215.219 359.886 Td [(index)]TJ 0 g 0 G [-746(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1083(79)]TJ + [-1083(81)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -49.57 -13.07 Td [(psb)]TJ + -49.57 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 431.85 cm +1 0 0 1 181.246 348.005 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 431.651 Td [(is)]TJ +/F8 9.9626 Tf 184.235 347.806 Td [(is)]TJ ET q -1 0 0 1 191.53 431.85 cm +1 0 0 1 191.53 348.005 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 194.518 431.651 Td [(lo)-28(cal)]TJ +/F8 9.9626 Tf 194.518 347.806 Td [(lo)-28(cal)]TJ 0 g 0 G [-824(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(80)]TJ + [-1084(82)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -28.869 -13.071 Td [(psb)]TJ + -28.869 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 418.78 cm +1 0 0 1 181.246 335.925 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 418.58 Td [(lo)-28(cal)]TJ +/F8 9.9626 Tf 184.235 335.726 Td [(lo)-28(cal)]TJ ET q -1 0 0 1 205.035 418.78 cm +1 0 0 1 205.035 335.925 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 208.023 418.58 Td [(index)]TJ +/F8 9.9626 Tf 208.023 335.726 Td [(index)]TJ 0 g 0 G [-691(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(81)]TJ + [-1084(83)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -42.374 -13.07 Td [(psb)]TJ + -42.374 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 405.709 cm +1 0 0 1 181.246 323.846 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 405.51 Td [(get)]TJ +/F8 9.9626 Tf 184.235 323.647 Td [(get)]TJ ET q -1 0 0 1 198.116 405.709 cm +1 0 0 1 198.116 323.846 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 201.105 405.51 Td [(b)-28(oundary)]TJ +/F8 9.9626 Tf 201.105 323.647 Td [(b)-28(oundary)]TJ 0 g 0 G [-354(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1083(82)]TJ + [-1083(84)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -35.456 -13.07 Td [(psb)]TJ + -35.456 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 392.639 cm +1 0 0 1 181.246 311.766 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 392.44 Td [(get)]TJ +/F8 9.9626 Tf 184.235 311.567 Td [(get)]TJ ET q -1 0 0 1 198.116 392.639 cm +1 0 0 1 198.116 311.766 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 201.105 392.44 Td [(o)28(v)28(erlap)]TJ +/F8 9.9626 Tf 201.105 311.567 Td [(o)28(v)28(erlap)]TJ 0 g 0 G [-605(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(83)]TJ + [-1084(85)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -35.456 -13.071 Td [(psb)]TJ + -35.456 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 379.568 cm +1 0 0 1 181.246 299.686 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 379.369 Td [(sp)]TJ +/F8 9.9626 Tf 184.235 299.487 Td [(sp)]TJ ET q -1 0 0 1 194.297 379.568 cm +1 0 0 1 194.297 299.686 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 197.286 379.369 Td [(getro)28(w)]TJ +/F8 9.9626 Tf 197.286 299.487 Td [(getro)28(w)]TJ 0 g 0 G [-433(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(84)]TJ + [-1084(86)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -31.637 -13.07 Td [(psb)]TJ + -31.637 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 366.498 cm +1 0 0 1 181.246 287.607 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 366.299 Td [(sizeof)]TJ +/F8 9.9626 Tf 184.235 287.407 Td [(sizeof)]TJ 0 g 0 G [-740(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(86)]TJ + [-1084(88)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.071 Td [(Sorting)-333(utilities)]TJ + -18.586 -12.079 Td [(Sorting)-333(utilities)]TJ 0 g 0 G [-519(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1083(87)]TJ + [-1083(89)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG -/F27 9.9626 Tf -14.944 -23.776 Td [(7)-925(P)32(arallel)-384(en)32(vironmen)32(t)-383(routines)]TJ +/F27 9.9626 Tf -14.944 -22.126 Td [(7)-925(P)32(arallel)-384(en)32(vironmen)32(t)-383(routines)]TJ 0 g 0 G - [-16891(89)]TJ + [-16891(91)]TJ 0 0 1 rg 0 0 1 RG -/F8 9.9626 Tf 14.944 -13.071 Td [(psb)]TJ +/F8 9.9626 Tf 14.944 -12.079 Td [(psb)]TJ ET q -1 0 0 1 181.246 316.581 cm +1 0 0 1 181.246 241.322 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 316.381 Td [(init)]TJ +/F8 9.9626 Tf 184.235 241.123 Td [(init)]TJ 0 g 0 G [-829(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1083(90)]TJ + [-1083(92)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 303.51 cm +1 0 0 1 181.246 229.242 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 303.311 Td [(info)]TJ +/F8 9.9626 Tf 184.235 229.043 Td [(info)]TJ 0 g 0 G [-690(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(91)]TJ + [-1084(93)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 290.44 cm +1 0 0 1 181.246 217.162 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 290.241 Td [(exit)]TJ +/F8 9.9626 Tf 184.235 216.963 Td [(exit)]TJ 0 g 0 G [-690(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(92)]TJ + [-1084(94)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.071 Td [(psb)]TJ + -18.586 -12.079 Td [(psb)]TJ ET q -1 0 0 1 181.246 277.37 cm +1 0 0 1 181.246 205.083 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 277.17 Td [(get)]TJ +/F8 9.9626 Tf 184.235 204.884 Td [(get)]TJ ET q -1 0 0 1 198.116 277.37 cm +1 0 0 1 198.116 205.083 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 201.105 277.17 Td [(mpicomm)]TJ +/F8 9.9626 Tf 201.105 204.884 Td [(mpicomm)]TJ 0 g 0 G [-1024(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1083(93)]TJ + [-1083(95)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -35.456 -13.07 Td [(psb)]TJ + -35.456 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 264.299 cm +1 0 0 1 181.246 193.003 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 264.1 Td [(get)]TJ +/F8 9.9626 Tf 184.235 192.804 Td [(get)]TJ ET q -1 0 0 1 198.116 264.299 cm +1 0 0 1 198.116 193.003 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 201.105 264.1 Td [(rank)]TJ +/F8 9.9626 Tf 201.105 192.804 Td [(rank)]TJ 0 g 0 G [-994(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1083(94)]TJ + [-1083(96)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -35.456 -13.07 Td [(psb)]TJ + -35.456 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 251.229 cm +1 0 0 1 181.246 180.923 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 251.03 Td [(wtime)]TJ +/F8 9.9626 Tf 184.235 180.724 Td [(wtime)]TJ 0 g 0 G [-440(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(95)]TJ + [-1084(97)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.071 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 238.158 cm +1 0 0 1 181.246 168.844 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 237.959 Td [(barrier)]TJ +/F8 9.9626 Tf 184.235 168.644 Td [(barrier)]TJ 0 g 0 G [-931(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)]TJ 0 g 0 G - [-1084(96)]TJ + [-1084(98)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.079 Td [(psb)]TJ ET q -1 0 0 1 181.246 225.088 cm +1 0 0 1 181.246 156.764 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 224.889 Td [(ab)-28(ort)]TJ +/F8 9.9626 Tf 184.235 156.565 Td [(ab)-28(ort)]TJ 0 g 0 G [-742(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(97)]TJ + [-1084(99)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.071 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 212.018 cm +1 0 0 1 181.246 144.684 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 211.818 Td [(b)-28(cast)]TJ +/F8 9.9626 Tf 184.235 144.485 Td [(b)-28(cast)]TJ 0 g 0 G [-795(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-1084(98)]TJ + [-584(100)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.08 Td [(psb)]TJ ET q -1 0 0 1 181.246 198.947 cm +1 0 0 1 181.246 132.605 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 198.748 Td [(sum)]TJ +/F8 9.9626 Tf 184.235 132.405 Td [(sum)]TJ 0 g 0 G [-545(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)]TJ -0 g 0 G - [-1084(99)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ -ET -q -1 0 0 1 181.246 185.877 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S -Q -BT -/F8 9.9626 Tf 184.235 185.678 Td [(max)]TJ -0 g 0 G - [-468(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ -0 g 0 G - [-583(100)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG - -18.586 -13.071 Td [(psb)]TJ -ET -q -1 0 0 1 181.246 172.806 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S -Q -BT -/F8 9.9626 Tf 184.235 172.607 Td [(min)]TJ -0 g 0 G - [-662(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G [-584(101)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ + -18.586 -12.079 Td [(psb)]TJ ET q -1 0 0 1 181.246 159.736 cm +1 0 0 1 181.246 120.525 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 184.235 159.537 Td [(amx)]TJ +/F8 9.9626 Tf 184.235 120.326 Td [(max)]TJ 0 g 0 G [-468(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G [-583(102)]TJ 0 g 0 G -0 0 1 rg 0 0 1 RG - -18.586 -13.071 Td [(psb)]TJ -ET -q -1 0 0 1 181.246 146.666 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S -Q -BT -/F8 9.9626 Tf 184.235 146.466 Td [(amn)]TJ -0 g 0 G - [-440(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ -0 g 0 G - [-584(103)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ -ET -q -1 0 0 1 181.246 133.595 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S -Q -BT -/F8 9.9626 Tf 184.235 133.396 Td [(snd)]TJ -0 g 0 G - [-823(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ -0 g 0 G - [-584(104)]TJ -0 g 0 G -0 0 1 rg 0 0 1 RG - -18.586 -13.07 Td [(psb)]TJ -ET -q -1 0 0 1 181.246 120.525 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S -Q -BT -/F8 9.9626 Tf 184.235 120.326 Td [(rcv)]TJ -0 g 0 G - [-965(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ -0 g 0 G - [-584(105)]TJ -0 g 0 G 0 g 0 G 135.558 -29.888 Td [(ii)]TJ 0 g 0 G ET endstream endobj -541 0 obj << +583 0 obj << /Type /Page -/Contents 542 0 R -/Resources 540 0 R +/Contents 584 0 R +/Resources 582 0 R /MediaBox [0 0 595.276 841.89] -/Parent 439 0 R -/Annots [ 486 0 R 487 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R ] ->> endobj -486 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [149.709 703.195 302.58 714.044] -/Subtype /Link -/A << /S /GoTo /D (section.6) >> ->> endobj -487 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 690.125 205.71 700.973] -/Subtype /Link -/A << /S /GoTo /D (section*.28) >> +/Parent 479 0 R +/Annots [ 529 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R ] >> endobj -493 0 obj << +529 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 677.055 207.426 687.903] +/Rect [164.653 703.195 211.3 714.044] /Subtype /Link -/A << /S /GoTo /D (section*.29) >> +/A << /S /GoTo /D (section*.30) >> >> endobj -494 0 obj << +535 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 663.984 209.639 674.832] +/Rect [164.653 691.116 206.927 701.964] /Subtype /Link -/A << /S /GoTo /D (section*.30) >> +/A << /S /GoTo /D (section*.31) >> >> endobj -495 0 obj << +536 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 650.914 210.138 661.762] +/Rect [149.709 670.928 290.134 679.839] /Subtype /Link -/A << /S /GoTo /D (section*.31) >> +/A << /S /GoTo /D (section.5) >> >> endobj -496 0 obj << +537 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 637.843 210.996 648.692] +/Rect [164.653 656.911 203.496 667.759] /Subtype /Link /A << /S /GoTo /D (section*.32) >> >> endobj -497 0 obj << +538 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 624.773 222.591 635.621] +/Rect [164.653 644.831 201.863 655.679] /Subtype /Link /A << /S /GoTo /D (section*.33) >> >> endobj -498 0 obj << +539 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 611.703 205.212 622.551] +/Rect [164.653 632.751 212.933 643.599] /Subtype /Link /A << /S /GoTo /D (section*.34) >> >> endobj -499 0 obj << +540 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 598.632 206.927 609.481] +/Rect [164.653 620.672 214.648 631.52] /Subtype /Link /A << /S /GoTo /D (section*.35) >> >> endobj -500 0 obj << +541 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 585.562 209.141 596.41] +/Rect [149.709 598.546 302.58 609.394] +/Subtype /Link +/A << /S /GoTo /D (section.6) >> +>> endobj +542 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.653 586.466 205.71 597.315] /Subtype /Link /A << /S /GoTo /D (section*.36) >> >> endobj -501 0 obj << +543 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 572.492 210.497 583.34] +/Rect [164.653 574.387 207.426 585.235] /Subtype /Link /A << /S /GoTo /D (section*.37) >> >> endobj -502 0 obj << +544 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 559.421 204.132 570.269] +/Rect [164.653 562.307 209.639 573.155] /Subtype /Link /A << /S /GoTo /D (section*.38) >> >> endobj -503 0 obj << +545 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 546.351 205.156 557.199] +/Rect [164.653 550.227 210.138 561.076] /Subtype /Link /A << /S /GoTo /D (section*.39) >> >> endobj -504 0 obj << +546 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 533.28 206.872 544.129] +/Rect [164.653 538.148 210.996 548.996] /Subtype /Link /A << /S /GoTo /D (section*.40) >> >> endobj -505 0 obj << +547 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 520.21 209.086 531.058] +/Rect [164.653 526.068 222.591 536.916] /Subtype /Link /A << /S /GoTo /D (section*.41) >> >> endobj -506 0 obj << +548 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 507.14 210.442 517.988] +/Rect [164.653 513.988 205.212 524.836] /Subtype /Link /A << /S /GoTo /D (section*.42) >> >> endobj -507 0 obj << +549 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 494.069 202.942 504.917] +/Rect [164.653 501.909 206.927 512.757] /Subtype /Link /A << /S /GoTo /D (section*.43) >> >> endobj -508 0 obj << +550 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 480.999 231.978 491.847] +/Rect [164.653 489.829 209.141 500.677] /Subtype /Link /A << /S /GoTo /D (section*.44) >> >> endobj -509 0 obj << +551 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 467.928 231.978 478.777] +/Rect [164.653 477.749 210.497 488.597] /Subtype /Link /A << /S /GoTo /D (section*.45) >> >> endobj -510 0 obj << +552 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 454.858 222.912 465.706] +/Rect [164.653 465.669 204.132 476.518] /Subtype /Link /A << /S /GoTo /D (section*.46) >> >> endobj -511 0 obj << +553 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 441.788 239.738 452.636] +/Rect [164.653 453.59 205.156 464.438] /Subtype /Link /A << /S /GoTo /D (section*.47) >> >> endobj -512 0 obj << +554 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 428.717 215.717 439.565] +/Rect [164.653 441.51 206.872 452.358] /Subtype /Link /A << /S /GoTo /D (section*.48) >> >> endobj -513 0 obj << +555 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 415.647 232.543 426.495] +/Rect [164.653 429.43 209.086 440.279] /Subtype /Link /A << /S /GoTo /D (section*.49) >> >> endobj -514 0 obj << +556 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 402.576 243.64 413.425] +/Rect [164.653 417.351 210.442 428.199] /Subtype /Link /A << /S /GoTo /D (section*.50) >> >> endobj -515 0 obj << +557 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 389.506 233.4 400.354] +/Rect [164.653 405.271 202.942 416.119] /Subtype /Link /A << /S /GoTo /D (section*.51) >> >> endobj -516 0 obj << +558 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 376.436 227.367 387.284] +/Rect [164.653 393.191 231.978 404.039] /Subtype /Link /A << /S /GoTo /D (section*.52) >> >> endobj -517 0 obj << +559 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 363.365 208.809 374.214] +/Rect [164.653 381.112 231.978 391.96] /Subtype /Link /A << /S /GoTo /D (section*.53) >> >> endobj -518 0 obj << +560 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 350.295 234.253 361.143] +/Rect [164.653 369.032 222.912 379.88] /Subtype /Link /A << /S /GoTo /D (section*.54) >> >> endobj -519 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [149.709 328.456 315.677 337.367] -/Subtype /Link -/A << /S /GoTo /D (section.7) >> ->> endobj -520 0 obj << +561 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 313.448 200.175 324.296] +/Rect [164.653 356.952 239.738 367.8] /Subtype /Link /A << /S /GoTo /D (section*.55) >> >> endobj -521 0 obj << +562 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 300.378 201.559 311.226] +/Rect [164.653 344.872 215.717 355.721] /Subtype /Link /A << /S /GoTo /D (section*.56) >> >> endobj -522 0 obj << +563 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 287.307 201.559 298.155] +/Rect [164.653 332.793 232.543 343.641] /Subtype /Link /A << /S /GoTo /D (section*.57) >> >> endobj -523 0 obj << +564 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 274.237 244.719 285.085] +/Rect [164.653 320.713 243.64 331.561] /Subtype /Link /A << /S /GoTo /D (section*.58) >> >> endobj -524 0 obj << +565 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 261.166 221.777 272.015] +/Rect [164.653 308.633 233.4 319.482] /Subtype /Link /A << /S /GoTo /D (section*.59) >> >> endobj -525 0 obj << +566 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 248.096 211.798 258.944] +/Rect [164.653 296.554 227.367 307.402] /Subtype /Link /A << /S /GoTo /D (section*.60) >> >> endobj -526 0 obj << +567 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 235.026 214.648 245.874] +/Rect [164.653 284.474 208.809 295.322] /Subtype /Link /A << /S /GoTo /D (section*.61) >> >> endobj -527 0 obj << +568 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 221.955 208.782 232.804] +/Rect [164.653 272.394 234.253 283.242] /Subtype /Link /A << /S /GoTo /D (section*.62) >> >> endobj -528 0 obj << +569 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [149.709 252.206 315.677 261.117] +/Subtype /Link +/A << /S /GoTo /D (section.7) >> +>> endobj +570 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 208.885 208.256 219.733] +/Rect [164.653 238.189 200.175 249.037] /Subtype /Link /A << /S /GoTo /D (section*.63) >> >> endobj -529 0 obj << +571 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 195.815 202.998 206.663] +/Rect [164.653 226.109 201.559 236.958] /Subtype /Link /A << /S /GoTo /D (section*.64) >> >> endobj -530 0 obj << +572 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 182.744 203.773 193.592] +/Rect [164.653 214.03 201.559 224.878] /Subtype /Link /A << /S /GoTo /D (section*.65) >> >> endobj -531 0 obj << +573 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 169.674 201.835 180.522] +/Rect [164.653 201.95 244.719 212.798] /Subtype /Link /A << /S /GoTo /D (section*.66) >> >> endobj -532 0 obj << +574 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 156.603 203.773 167.452] +/Rect [164.653 189.87 221.777 200.719] /Subtype /Link /A << /S /GoTo /D (section*.67) >> >> endobj -533 0 obj << +575 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 143.533 204.049 154.381] +/Rect [164.653 177.791 211.798 188.639] /Subtype /Link /A << /S /GoTo /D (section*.68) >> >> endobj -534 0 obj << +576 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 130.463 200.23 141.311] +/Rect [164.653 165.711 214.648 176.559] /Subtype /Link /A << /S /GoTo /D (section*.69) >> >> endobj -535 0 obj << +577 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.653 117.392 198.819 128.24] +/Rect [164.653 153.631 208.782 164.48] /Subtype /Link /A << /S /GoTo /D (section*.70) >> >> endobj -543 0 obj << -/D [541 0 R /XYZ 150.705 740.998 null] +578 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.653 141.552 208.256 152.4] +/Subtype /Link +/A << /S /GoTo /D (section*.71) >> >> endobj -540 0 obj << -/Font << /F27 437 0 R /F8 438 0 R >> +579 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.653 129.472 202.998 140.32] +/Subtype /Link +/A << /S /GoTo /D (section*.72) >> +>> endobj +580 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.653 117.392 203.773 128.24] +/Subtype /Link +/A << /S /GoTo /D (section*.73) >> +>> endobj +585 0 obj << +/D [583 0 R /XYZ 150.705 740.998 null] +>> endobj +582 0 obj << +/Font << /F8 478 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -560 0 obj << -/Length 7118 +610 0 obj << +/Length 9400 >> stream 0 g 0 G 0 g 0 G 0 0 1 rg 0 0 1 RG BT -/F27 9.9626 Tf 99.895 706.129 Td [(8)-925(Error)-383(handling)]TJ +/F8 9.9626 Tf 114.839 706.129 Td [(psb)]TJ +ET +q +1 0 0 1 130.436 706.328 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 133.425 706.129 Td [(min)]TJ +0 g 0 G + [-662(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-584(103)]TJ 0 g 0 G - [-23812(106)]TJ 0 0 1 rg 0 0 1 RG -/F8 9.9626 Tf 14.944 -11.955 Td [(psb)]TJ + -18.586 -11.955 Td [(psb)]TJ ET q 1 0 0 1 130.436 694.373 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 694.174 Td [(errpush)]TJ +/F8 9.9626 Tf 133.425 694.174 Td [(amx)]TJ 0 g 0 G - [-595(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)]TJ + [-468(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-584(108)]TJ + [-583(104)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG -18.586 -11.955 Td [(psb)]TJ @@ -2639,11 +2814,11 @@ q []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 682.219 Td [(error)]TJ +/F8 9.9626 Tf 133.425 682.219 Td [(amn)]TJ 0 g 0 G - [-987(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-440(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-584(109)]TJ + [-584(105)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG -18.586 -11.956 Td [(psb)]TJ @@ -2653,354 +2828,449 @@ q []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 670.263 Td [(set)]TJ +/F8 9.9626 Tf 133.425 670.263 Td [(snd)]TJ +0 g 0 G + [-823(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-584(106)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -11.955 Td [(psb)]TJ +ET +q +1 0 0 1 130.436 658.507 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 133.425 658.308 Td [(rcv)]TJ +0 g 0 G + [-965(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-584(107)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG +/F27 9.9626 Tf -33.53 -21.918 Td [(8)-925(Error)-383(handling)]TJ +0 g 0 G + [-23812(108)]TJ +0 0 1 rg 0 0 1 RG +/F8 9.9626 Tf 14.944 -11.955 Td [(psb)]TJ ET q -1 0 0 1 146.255 670.463 cm +1 0 0 1 130.436 624.634 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 149.244 670.263 Td [(errv)28(erb)-28(osit)28(y)]TJ +/F8 9.9626 Tf 133.425 624.435 Td [(errpush)]TJ 0 g 0 G - [-977(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)]TJ + [-595(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G [-584(110)]TJ 0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -11.955 Td [(psb)]TJ +ET +q +1 0 0 1 130.436 612.679 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 133.425 612.48 Td [(error)]TJ +0 g 0 G + [-987(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-584(111)]TJ +0 g 0 G +0 0 1 rg 0 0 1 RG + -18.586 -11.955 Td [(psb)]TJ +ET +q +1 0 0 1 130.436 600.724 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 133.425 600.525 Td [(set)]TJ +ET +q +1 0 0 1 146.255 600.724 cm +[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +Q +BT +/F8 9.9626 Tf 149.244 600.525 Td [(errv)28(erb)-28(osit)28(y)]TJ +0 g 0 G + [-977(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)]TJ +0 g 0 G + [-584(112)]TJ +0 g 0 G 0 0 1 rg 0 0 1 RG -34.405 -11.955 Td [(psb)]TJ ET q -1 0 0 1 130.436 658.507 cm +1 0 0 1 130.436 588.769 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 658.308 Td [(set)]TJ +/F8 9.9626 Tf 133.425 588.57 Td [(set)]TJ ET q -1 0 0 1 146.255 658.507 cm +1 0 0 1 146.255 588.769 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 149.244 658.308 Td [(erraction)]TJ +/F8 9.9626 Tf 149.244 588.57 Td [(erraction)]TJ 0 g 0 G [-735(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)]TJ 0 g 0 G - [-584(111)]TJ + [-584(113)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG /F27 9.9626 Tf -49.349 -21.918 Td [(9)-925(Utilities)]TJ 0 g 0 G - [-27238(112)]TJ + [-27238(114)]TJ 0 0 1 rg 0 0 1 RG /F8 9.9626 Tf 37.859 -11.955 Td [(h)28(b)]TJ ET q -1 0 0 1 149.144 624.634 cm +1 0 0 1 149.144 554.896 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 152.133 624.435 Td [(read)]TJ +/F8 9.9626 Tf 152.133 554.697 Td [(read)]TJ 0 g 0 G [-893(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-583(113)]TJ + [-583(115)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG -14.38 -11.955 Td [(h)28(b)]TJ ET q -1 0 0 1 149.144 612.679 cm +1 0 0 1 149.144 542.941 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 152.133 612.48 Td [(write)]TJ +/F8 9.9626 Tf 152.133 542.742 Td [(write)]TJ 0 g 0 G [-559(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-584(114)]TJ + [-584(116)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -14.38 -11.955 Td [(mm)]TJ + -14.38 -11.956 Td [(mm)]TJ ET q -1 0 0 1 154.956 600.724 cm +1 0 0 1 154.956 530.986 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 157.944 600.525 Td [(mat)]TJ +/F8 9.9626 Tf 157.944 530.786 Td [(mat)]TJ ET q -1 0 0 1 175.7 600.724 cm +1 0 0 1 175.7 530.986 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 178.689 600.525 Td [(read)]TJ +/F8 9.9626 Tf 178.689 530.786 Td [(read)]TJ 0 g 0 G [-560(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-583(115)]TJ + [-583(117)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG -40.935 -11.955 Td [(mm)]TJ ET q -1 0 0 1 154.956 588.769 cm +1 0 0 1 154.956 519.03 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 157.944 588.57 Td [(v)28(et)]TJ +/F8 9.9626 Tf 157.944 518.831 Td [(v)28(et)]TJ ET q -1 0 0 1 171.826 588.769 cm +1 0 0 1 171.826 519.03 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 174.815 588.57 Td [(read)]TJ +/F8 9.9626 Tf 174.815 518.831 Td [(read)]TJ 0 g 0 G [-949(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-584(116)]TJ + [-584(118)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG -37.062 -11.955 Td [(mm)]TJ ET q -1 0 0 1 154.956 576.814 cm +1 0 0 1 154.956 507.075 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 157.944 576.615 Td [(mat)]TJ +/F8 9.9626 Tf 157.944 506.876 Td [(mat)]TJ ET q -1 0 0 1 175.7 576.814 cm +1 0 0 1 175.7 507.075 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 178.689 576.615 Td [(write)]TJ +/F8 9.9626 Tf 178.689 506.876 Td [(write)]TJ 0 g 0 G [-1005(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-584(117)]TJ + [-584(119)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG /F27 9.9626 Tf -78.794 -21.918 Td [(10)-350(Preconditioner)-383(routi)-1(ne)1(s)]TJ 0 g 0 G - [-19367(118)]TJ + [-19367(120)]TJ 0 0 1 rg 0 0 1 RG /F8 9.9626 Tf 14.944 -11.955 Td [(psb)]TJ ET q -1 0 0 1 130.436 542.941 cm +1 0 0 1 130.436 473.202 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 542.742 Td [(precinit)]TJ +/F8 9.9626 Tf 133.425 473.003 Td [(precinit)]TJ 0 g 0 G [-548(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-584(119)]TJ + [-584(121)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG - -18.586 -11.956 Td [(psb)]TJ + -18.586 -11.955 Td [(psb)]TJ ET q -1 0 0 1 130.436 530.986 cm +1 0 0 1 130.436 461.247 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 530.786 Td [(precbld)]TJ +/F8 9.9626 Tf 133.425 461.048 Td [(precbld)]TJ 0 g 0 G [-659(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-584(120)]TJ + [-584(122)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG -18.586 -11.955 Td [(psb)]TJ ET q -1 0 0 1 130.436 519.03 cm +1 0 0 1 130.436 449.292 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 518.831 Td [(precaply)]TJ +/F8 9.9626 Tf 133.425 449.093 Td [(precaply)]TJ 0 g 0 G [-965(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-584(121)]TJ + [-584(123)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG -18.586 -11.955 Td [(psb)]TJ ET q -1 0 0 1 130.436 507.075 cm +1 0 0 1 130.436 437.337 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 133.425 506.876 Td [(precdescr)]TJ +/F8 9.9626 Tf 133.425 437.138 Td [(precdescr)]TJ 0 g 0 G [-596(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-583(122)]TJ + [-583(124)]TJ 0 g 0 G 0 0 1 rg 0 0 1 RG /F27 9.9626 Tf -33.53 -21.918 Td [(11)-350(Iterativ)32(e)-384(Metho)-31(ds)]TJ 0 g 0 G - [-22176(123)]TJ + [-22176(125)]TJ 0 0 1 rg 0 0 1 RG /F8 9.9626 Tf 14.944 -11.955 Td [(krylo)28(v)]TJ 0 g 0 G [-692(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-499(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)-500(.)]TJ 0 g 0 G - [-583(124)]TJ + [-583(126)]TJ 0 g 0 G 0 g 0 G - 152.761 -382.565 Td [(iii)]TJ + 152.761 -312.827 Td [(iii)]TJ 0 g 0 G ET endstream endobj -559 0 obj << +609 0 obj << /Type /Page -/Contents 560 0 R -/Resources 558 0 R +/Contents 610 0 R +/Resources 608 0 R /MediaBox [0 0 595.276 841.89] -/Parent 439 0 R -/Annots [ 536 0 R 537 0 R 538 0 R 539 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R ] +/Parent 479 0 R +/Annots [ 581 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R ] >> endobj -536 0 obj << +581 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.843 703.195 151.026 714.044] +/Subtype /Link +/A << /S /GoTo /D (section*.74) >> +>> endobj +586 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.843 691.24 152.963 702.088] +/Subtype /Link +/A << /S /GoTo /D (section*.75) >> +>> endobj +587 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.843 679.285 153.24 690.133] +/Subtype /Link +/A << /S /GoTo /D (section*.76) >> +>> endobj +588 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.843 667.33 149.421 678.178] +/Subtype /Link +/A << /S /GoTo /D (section*.77) >> +>> endobj +589 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.843 655.375 148.009 666.223] +/Subtype /Link +/A << /S /GoTo /D (section*.78) >> +>> endobj +590 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [98.899 703.195 190.188 714.044] +/Rect [98.899 633.457 190.188 644.305] /Subtype /Link /A << /S /GoTo /D (section.8) >> >> endobj -537 0 obj << +591 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 691.24 167.188 702.088] +/Rect [113.843 621.502 167.188 632.35] /Subtype /Link -/A << /S /GoTo /D (section*.71) >> +/A << /S /GoTo /D (section*.79) >> >> endobj -538 0 obj << +592 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 679.285 155.537 690.133] +/Rect [113.843 609.547 155.537 620.395] /Subtype /Link -/A << /S /GoTo /D (section*.72) >> +/A << /S /GoTo /D (section*.80) >> >> endobj -539 0 obj << +593 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 667.33 202.129 678.178] +/Rect [113.843 597.591 202.129 608.44] /Subtype /Link -/A << /S /GoTo /D (section*.73) >> +/A << /S /GoTo /D (section*.81) >> >> endobj -544 0 obj << +594 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 655.375 189.039 666.223] +/Rect [113.843 585.636 189.039 596.484] /Subtype /Link -/A << /S /GoTo /D (section*.74) >> +/A << /S /GoTo /D (section*.82) >> >> endobj -545 0 obj << +595 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [98.899 635.394 156.061 644.305] +/Rect [98.899 565.656 156.061 574.567] /Subtype /Link /A << /S /GoTo /D (section.9) >> >> endobj -546 0 obj << +596 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 623.439 171.975 632.35] +/Rect [136.757 553.7 171.975 562.611] /Subtype /Link -/A << /S /GoTo /D (section*.75) >> +/A << /S /GoTo /D (section*.83) >> >> endobj -547 0 obj << +597 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 611.484 175.296 620.395] +/Rect [136.757 541.745 175.296 550.656] /Subtype /Link -/A << /S /GoTo /D (section*.76) >> +/A << /S /GoTo /D (section*.84) >> >> endobj -548 0 obj << +598 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 599.529 198.531 608.44] +/Rect [136.757 529.79 198.531 538.701] /Subtype /Link -/A << /S /GoTo /D (section*.77) >> +/A << /S /GoTo /D (section*.85) >> >> endobj -549 0 obj << +599 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 587.573 197.978 596.484] +/Rect [136.757 517.835 197.978 526.746] /Subtype /Link -/A << /S /GoTo /D (section*.78) >> +/A << /S /GoTo /D (section*.86) >> >> endobj -550 0 obj << +600 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [136.757 575.618 201.852 584.264] +/Rect [136.757 505.88 201.852 514.526] /Subtype /Link -/A << /S /GoTo /D (section*.79) >> +/A << /S /GoTo /D (section*.87) >> >> endobj -551 0 obj << +601 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [98.899 553.7 234.475 562.611] +/Rect [98.899 483.962 234.475 492.873] /Subtype /Link /A << /S /GoTo /D (section.10) >> >> endobj -552 0 obj << +602 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 539.808 167.658 550.656] +/Rect [113.843 470.07 167.658 480.918] /Subtype /Link -/A << /S /GoTo /D (section*.80) >> +/A << /S /GoTo /D (section*.88) >> >> endobj -553 0 obj << +603 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 527.853 166.551 538.701] +/Rect [113.843 458.114 166.551 468.963] /Subtype /Link -/A << /S /GoTo /D (section*.81) >> +/A << /S /GoTo /D (section*.89) >> >> endobj -554 0 obj << +604 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 515.898 171.256 526.746] +/Rect [113.843 446.159 171.256 457.007] /Subtype /Link -/A << /S /GoTo /D (section*.82) >> +/A << /S /GoTo /D (section*.90) >> >> endobj -555 0 obj << +605 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 503.943 174.936 514.791] +/Rect [113.843 434.204 174.936 445.052] /Subtype /Link -/A << /S /GoTo /D (section*.83) >> +/A << /S /GoTo /D (section*.91) >> >> endobj -556 0 obj << +606 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [98.899 483.962 206.49 492.873] +/Rect [98.899 414.223 206.49 423.134] /Subtype /Link /A << /S /GoTo /D (section.11) >> >> endobj -557 0 obj << +607 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.843 470.07 142.984 480.918] +/Rect [113.843 400.331 142.984 411.179] /Subtype /Link -/A << /S /GoTo /D (section*.84) >> +/A << /S /GoTo /D (section*.92) >> >> endobj -561 0 obj << -/D [559 0 R /XYZ 99.895 740.998 null] +611 0 obj << +/D [609 0 R /XYZ 99.895 740.998 null] >> endobj -558 0 obj << -/Font << /F27 437 0 R /F8 438 0 R >> +608 0 obj << +/Font << /F8 478 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -564 0 obj << +614 0 obj << /Length 79 >> stream @@ -3013,32 +3283,32 @@ BT ET endstream endobj -563 0 obj << +613 0 obj << /Type /Page -/Contents 564 0 R -/Resources 562 0 R +/Contents 614 0 R +/Resources 612 0 R /MediaBox [0 0 595.276 841.89] -/Parent 439 0 R +/Parent 479 0 R >> endobj -565 0 obj << -/D [563 0 R /XYZ 150.705 740.998 null] +615 0 obj << +/D [613 0 R /XYZ 150.705 740.998 null] >> endobj -562 0 obj << -/Font << /F8 438 0 R >> +612 0 obj << +/Font << /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -578 0 obj << -/Length 8510 +628 0 obj << +/Length 8518 >> stream 0 g 0 G 0 g 0 G BT -/F16 14.3462 Tf 99.895 706.129 Td [(1)-1125(In)31(tro)-31(duction)]TJ/F8 9.9626 Tf 0 -22.316 Td [(The)-316(PSBLAS)-316(library)84(,)-319(dev)27(elop)-27(e)-1(d)-315(with)-316(the)-316(aim)-316(to)-316(facilitate)-315(the)-316(parallelization)-316(of)]TJ 0 -11.955 Td [(computationally)-324(in)28(tensiv)28(e)-324(s)-1(cien)28(ti\014c)-324(applications,)-326(is)-324(designed)-324(to)-324(address)-324(parallel)]TJ 0 -11.955 Td [(implemen)28(tation)-427(of)-428(iterativ)28(e)-427(solv)28(ers)-428(for)-427(sparse)-427(linear)-427(systems)-428(thr)1(ough)-428(the)-427(dis-)]TJ 0 -11.955 Td [(tributed)-284(memory)-285(paradigm.)-428(It)-284(includes)-284(routines)-285(f)1(o)-1(r)-284(m)28(ultiplying)-284(sparse)-285(matrices)]TJ 0 -11.955 Td [(b)28(y)-343(dense)-343(matrices,)-345(solving)-343(blo)-28(c)28(k)-343(diagonal)-342(syste)-1(ms)-342(with)-343(triangular)-343(diagonal)-343(en-)]TJ 0 -11.956 Td [(tries,)-350(prepro)-28(cessing)-346(sparse)-347(matrices,)-350(an)1(d)-347(con)28(tains)-347(addition)1(al)-347(routines)-346(for)-347(dense)]TJ 0 -11.955 Td [(matrix)-439(op)-28(erations.)-763(The)-439(curren)28(t)-440(implemen)28(tation)-439(of)-440(PSBLAS)-439(addresses)-439(a)-440(dis-)]TJ 0 -11.955 Td [(tributed)-333(memory)-334(execution)-333(mo)-28(del)-333(op)-28(erating)-333(with)-333(me)-1(ssage)-333(passing.)]TJ 14.944 -12.221 Td [(The)-222(PSBLAS)-222(library)-222(v)27(ersion)-222(3)-222(is)-222(in)28(ternally)-223(implemen)28(ted)-222(in)-222(the)-222(F)83(ortran)-222(2003)-222([)]TJ +/F16 14.3462 Tf 99.895 706.129 Td [(1)-1125(In)31(tro)-31(duction)]TJ/F8 9.9626 Tf 0 -22.316 Td [(The)-316(PSBLAS)-316(library)84(,)-319(dev)27(elop)-27(e)-1(d)-315(with)-316(the)-316(aim)-316(to)-316(facilitate)-315(the)-316(parallelization)-316(of)]TJ 0 -11.955 Td [(computationally)-324(in)28(tensiv)28(e)-324(s)-1(cien)28(ti\014c)-324(applications,)-326(is)-324(designed)-324(to)-324(address)-324(parallel)]TJ 0 -11.955 Td [(implemen)28(tation)-427(of)-428(iterativ)28(e)-427(solv)28(ers)-428(for)-427(sparse)-427(linear)-427(systems)-428(thr)1(ough)-428(the)-427(dis-)]TJ 0 -11.955 Td [(tributed)-284(memory)-285(paradigm.)-428(It)-284(includes)-284(routines)-285(f)1(o)-1(r)-284(m)28(ultiplying)-284(sparse)-285(matrices)]TJ 0 -11.955 Td [(b)28(y)-343(dense)-343(matrices,)-345(solving)-343(blo)-28(c)28(k)-343(diagonal)-342(syste)-1(ms)-342(with)-343(triangular)-343(diagonal)-343(en-)]TJ 0 -11.956 Td [(tries,)-350(prepro)-28(cessing)-346(sparse)-347(matrices,)-350(an)1(d)-347(con)28(tains)-347(addition)1(al)-347(routines)-346(for)-347(dense)]TJ 0 -11.955 Td [(matrix)-439(op)-28(erations.)-763(The)-439(curren)28(t)-440(implemen)28(tation)-439(of)-440(PSBLAS)-439(addresses)-439(a)-440(dis-)]TJ 0 -11.955 Td [(tributed)-333(memory)-334(execution)-333(mo)-28(del)-333(op)-28(erating)-333(with)-333(me)-1(ssage)-333(passing.)]TJ 14.944 -12.221 Td [(The)-317(PSBLAS)-317(library)-317(v)28(ersion)-318(3)-317(is)-317(implemen)28(ted)-317(in)-317(the)-317(F)83(ortran)-317(2003)-317([)]TJ 1 0 0 rg 1 0 0 RG - [(16)]TJ + [(17)]TJ 0 g 0 G - [(])]TJ -14.944 -11.955 Td [(programming)-497(language,)-537(with)-497(reuse)-497(an)1(d/or)-497(adaptation)-497(of)-496(some)-497(existing)-497(F)84(or-)]TJ 0 -11.955 Td [(tran)-333(77)-334(soft)28(w)28(are,)-333(and)-334(a)-333(handful)-333(of)-333(C)-334(routines.)]TJ 14.944 -12.221 Td [(The)-474(use)-474(of)-474(F)84(ortran)-474(2003)-474(o\013ers)-474(a)-474(n)28(um)28(b)-28(er)-474(of)-473(adv)55(an)28(tages)-474(o)28(v)28(er)-474(F)83(ortran)-474(95,)]TJ -14.944 -11.955 Td [(mostly)-493(in)-493(the)-494(han)1(dling)-494(of)-493(requiremen)28(ts)-493(for)-493(ev)28(olution)-494(an)1(d)-494(adaptation)-493(of)-493(the)]TJ 0 -11.956 Td [(library)-339(to)-339(new)-339(computin)1(g)-339(arc)27(hitectures)-339(and)-338(in)27(t)1(e)-1(grati)1(on)-339(of)-339(new)-339(algorithms.)-461(F)83(or)]TJ 0 -11.955 Td [(a)-444(detailed)-444(discussion)-445(of)-444(our)-444(design)-444(see)-444([)]TJ + [(])-317(pro-)]TJ -14.944 -11.955 Td [(gramming)-400(language,)-417(with)-400(reuse)-400(and/or)-400(ad)1(aptation)-400(of)-400(existing)-400(F)83(ortran)-400(77)-400(and)]TJ 0 -11.955 Td [(F)83(ortran)-333(95)-333(soft)28(w)27(are,)-333(plus)-333(a)-334(handfu)1(l)-334(of)-333(C)-333(routines.)]TJ 14.944 -12.221 Td [(The)-474(use)-474(of)-474(F)84(ortran)-474(2003)-474(o\013ers)-474(a)-474(n)28(um)28(b)-28(er)-474(of)-473(adv)55(an)28(tages)-474(o)28(v)28(er)-474(F)83(ortran)-474(95,)]TJ -14.944 -11.955 Td [(mostly)-493(in)-493(the)-494(han)1(dling)-494(of)-493(requiremen)28(ts)-493(for)-493(ev)28(olution)-494(an)1(d)-494(adaptation)-493(of)-493(the)]TJ 0 -11.956 Td [(library)-339(to)-339(new)-339(computin)1(g)-339(arc)27(hitectures)-339(and)-338(in)27(t)1(e)-1(grati)1(on)-339(of)-339(new)-339(algorithms.)-461(F)83(or)]TJ 0 -11.955 Td [(a)-444(detailed)-444(discussion)-445(of)-444(our)-444(design)-444(see)-444([)]TJ 1 0 0 rg 1 0 0 RG [(11)]TJ 0 g 0 G @@ -3048,11 +3318,11 @@ BT 0 g 0 G [(,)]TJ 1 0 0 rg 1 0 0 RG - [-278(17)]TJ + [-278(18)]TJ 0 g 0 G [(];)-297(su\016cien)28(t)-278(supp)-28(ort)-278(for)-278(F)84(ortran)-278(2003)]TJ 0 -11.955 Td [(is)-249(no)28(w)-249(a)27(v)56(ailable)-249(from)-249(man)28(y)-250(compilers,)-266(in)1(c)-1(lu)1(ding)-249(the)-250(GNU)-249(F)84(ortran)-249(compiler)-249(from)]TJ 0 -11.955 Td [(the)-333(F)83(ree)-333(Soft)27(w)28(are)-333(F)83(oundation)-333(\050as)-333(of)-334(v)28(ersion)-333(4.6\051.)]TJ 14.944 -12.221 Td [(Previous)-270(approac)28(hes)-271(ha)28(v)28(e)-271(b)-27(een)-271(based)-270(on)-270(mixing)-271(F)84(ortran)-270(95,)-283(with)-271(its)-270(supp)-28(ort)]TJ -14.944 -11.955 Td [(for)-352(ob)-56(ject-based)-352(design,)-357(with)-352(other)-352(languages;)-362(these)-352(ha)27(v)28(e)-352(b)-28(een)-352(adv)28(o)-28(cated)-352(b)27(y)-352(a)]TJ 0 -11.956 Td [(n)28(um)28(b)-28(er)-423(of)-422(authors,)-445(e.g.)-423([)]TJ 1 0 0 rg 1 0 0 RG - [(15)]TJ + [(16)]TJ 0 g 0 G [(].)-712(Moreo)28(v)27(er,)-445(the)-422(F)83(ortran)-422(95)-423(facilities)-423(for)-422(dynamic)]TJ 0 -11.955 Td [(memory)-436(managemen)28(t)-435(and)-436(in)28(terface)-435(o)28(v)27(erloading)-435(greatly)-435(enhance)-436(the)-435(usabilit)28(y)]TJ 0 -11.955 Td [(of)-374(the)-374(PSBLAS)-374(subroutines.)-567(In)-374(this)-374(w)28(a)27(y)84(,)-385(the)-374(library)-374(can)-374(tak)28(e)-374(care)-375(of)-374(run)28(time)]TJ 0 -11.955 Td [(memory)-404(requiremen)28(ts)-403(that)-404(are)-403(quite)-404(di\016cult)-403(or)-404(ev)28(en)-404(imp)-27(os)-1(sibl)1(e)-404(to)-404(predi)1(c)-1(t)-403(at)]TJ 0 -11.955 Td [(implemen)28(tation)-334(or)-333(compilation)-333(time.)]TJ 14.944 -12.221 Td [(The)-301(presen)27(tation)-301(of)-301(the)-301(PSBLAS)-301(library)-301(follo)27(ws)-301(the)-301(general)-301(s)-1(tru)1(c)-1(t)1(ure)-302(of)-301(the)]TJ -14.944 -11.955 Td [(prop)-28(osal)-275(for)-275(serial)-275(Sparse)-275(BLAS)-275([)]TJ 1 0 0 rg 1 0 0 RG @@ -3064,7 +3334,7 @@ BT 0 g 0 G [(])1(,)-287(whic)28(h)-276(in)-275(its)-275(turn)-275(is)-275(based)-275(on)-275(the)-275(prop)-28(osal)]TJ 0 -11.956 Td [(for)-333(BLAS)-334(on)-333(dense)-333(matrices)-334([)]TJ 1 0 0 rg 1 0 0 RG - [(14)]TJ + [(15)]TJ 0 g 0 G [(,)]TJ 1 0 0 rg 1 0 0 RG @@ -3081,78 +3351,78 @@ BT ET endstream endobj -577 0 obj << +627 0 obj << /Type /Page -/Contents 578 0 R -/Resources 576 0 R +/Contents 628 0 R +/Resources 626 0 R /MediaBox [0 0 595.276 841.89] -/Parent 580 0 R -/Annots [ 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R ] +/Parent 630 0 R +/Annots [ 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R ] >> endobj -566 0 obj << +616 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] -/Rect [442.333 586.91 454.288 595.323] +/Rect [408.982 586.91 420.937 595.323] /Subtype /Link /A << /S /GoTo /D (cite.metcalf) >> >> endobj -567 0 obj << +617 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [277.684 514.913 289.639 523.326] /Subtype /Link /A << /S /GoTo /D (cite.Sparse03) >> >> endobj -568 0 obj << +618 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [265.763 502.958 272.737 511.371] /Subtype /Link /A << /S /GoTo /D (cite.DesPat:11) >> >> endobj -569 0 obj << +619 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [276.283 502.958 288.238 511.371] /Subtype /Link /A << /S /GoTo /D (cite.RouXiaXu:11) >> >> endobj -570 0 obj << +620 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [210.166 442.916 222.121 451.329] /Subtype /Link /A << /S /GoTo /D (cite.machiels) >> >> endobj -571 0 obj << +621 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [241.566 370.919 248.54 379.332] /Subtype /Link /A << /S /GoTo /D (cite.sblas97) >> >> endobj -572 0 obj << +622 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [252.056 370.919 259.03 379.332] /Subtype /Link /A << /S /GoTo /D (cite.sblas02) >> >> endobj -573 0 obj << +623 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [227.473 358.964 239.428 367.377] /Subtype /Link /A << /S /GoTo /D (cite.BLAS1) >> >> endobj -574 0 obj << +624 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [243.524 358.964 250.498 367.377] /Subtype /Link /A << /S /GoTo /D (cite.BLAS2) >> >> endobj -575 0 obj << +625 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [254.593 358.964 261.567 367.377] @@ -3160,28 +3430,28 @@ endobj /A << /S /GoTo /D (cite.BLAS3) >> >> endobj 10 0 obj << -/D [577 0 R /XYZ 99.895 716.092 null] +/D [627 0 R /XYZ 99.895 716.092 null] >> endobj -576 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F17 579 0 R >> +626 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F17 629 0 R >> /ProcSet [ /PDF /Text ] >> endobj -598 0 obj << -/Length 5794 +648 0 obj << +/Length 5581 >> stream 0 g 0 G 0 g 0 G BT -/F8 9.9626 Tf 150.705 706.129 Td [(ha)28(v)28(e)-385(come)-385(from)-385(an)-385(established)-385(exp)-28(eri)1(e)-1(nce)-384(in)-385(applying)-385(the)-385(PSBLAS)-384(s)-1(olv)28(ers)-385(to)]TJ 0 -11.955 Td [(computational)-333(\015uid)-333(dynamics)-334(applications.)]TJ/F16 14.3462 Tf 0 -34.08 Td [(2)-1125(General)-375(o)31(v)32(erv)-1(iew)]TJ/F8 9.9626 Tf 0 -22.219 Td [(The)-519(PSBLAS)-519(lib)1(rary)-519(is)-519(designed)-519(to)-519(handle)-519(the)-519(implemen)28(tation)-519(of)-519(iterativ)28(e)]TJ 0 -11.955 Td [(solv)28(ers)-502(f)1(or)-502(sparse)-501(linear)-501(systems)-502(on)-501(distributed)-501(memory)-501(parallel)-501(computers.)]TJ 0 -11.955 Td [(The)-430(system)-429(co)-28(e\016cien)27(t)-429(matrix)]TJ/F11 9.9626 Tf 136.257 0 Td [(A)]TJ/F8 9.9626 Tf 11.753 0 Td [(m)28(ust)-430(b)-28(e)-429(square;)-478(it)-430(ma)28(y)-429(b)-28(e)-430(real)-430(or)-429(complex,)]TJ -148.01 -11.955 Td [(nonsymmetric,)-373(and)-365(its)-365(sparsit)28(y)-365(pattern)-365(needs)-365(not)-365(to)-365(b)-28(e)-365(symmetric.)-539(The)-365(serial)]TJ 0 -11.956 Td [(computation)-357(parts)-357(are)-357(based)-357(on)-357(the)-357(serial)-356(s)-1(p)1(ars)-1(e)-356(B)-1(LAS)1(,)-357(so)-357(that)-357(an)28(y)-357(extension)]TJ 0 -11.955 Td [(made)-320(to)-320(the)-321(data)-320(structures)-320(of)-320(the)-321(serial)-320(k)28(ernels)-320(is)-321(a)28(v)56(ailable)-320(to)-321(the)-320(parallel)-320(v)28(er-)]TJ 0 -11.955 Td [(sion.)-688(The)-415(o)28(v)28(erall)-415(design)-414(and)-415(parallelization)-414(strategy)-415(ha)28(v)28(e)-415(b)-28(een)-414(in\015uenced)-415(b)28(y)]TJ 0 -11.955 Td [(the)-348(structure)-348(of)-348(t)1(he)-348(ScaLAP)83(A)28(CK)-348(parallel)-348(library)84(.)-488(The)-348(la)28(y)27(ered)-348(structur)1(e)-348(of)-348(the)]TJ 0 -11.955 Td [(PSBLAS)-449(library)-449(is)-449(sho)28(wn)-449(in)-449(\014gure)]TJ +/F8 9.9626 Tf 150.705 706.129 Td [(ha)28(v)28(e)-385(come)-385(from)-385(an)-385(established)-385(exp)-28(eri)1(e)-1(nce)-384(in)-385(applying)-385(the)-385(PSBLAS)-384(s)-1(olv)28(ers)-385(to)]TJ 0 -11.955 Td [(computational)-333(\015uid)-333(dynamics)-334(applications.)]TJ/F16 14.3462 Tf 0 -32.736 Td [(2)-1125(General)-375(o)31(v)32(erv)-1(iew)]TJ/F8 9.9626 Tf 0 -21.821 Td [(The)-519(PSBLAS)-519(lib)1(rary)-519(is)-519(designed)-519(to)-519(handle)-519(the)-519(implemen)28(tation)-519(of)-519(iterativ)28(e)]TJ 0 -11.955 Td [(solv)28(ers)-502(f)1(or)-502(sparse)-501(linear)-501(systems)-502(on)-501(distributed)-501(memory)-501(parallel)-501(computers.)]TJ 0 -11.956 Td [(The)-430(system)-429(co)-28(e\016cien)27(t)-429(matrix)]TJ/F11 9.9626 Tf 136.257 0 Td [(A)]TJ/F8 9.9626 Tf 11.753 0 Td [(m)28(ust)-430(b)-28(e)-429(square;)-478(it)-430(ma)28(y)-429(b)-28(e)-430(real)-430(or)-429(complex,)]TJ -148.01 -11.955 Td [(nonsymmetric,)-373(and)-365(its)-365(sparsit)28(y)-365(pattern)-365(needs)-365(not)-365(to)-365(b)-28(e)-365(symmetric.)-539(The)-365(serial)]TJ 0 -11.955 Td [(computation)-357(parts)-357(are)-357(based)-357(on)-357(the)-357(serial)-356(s)-1(p)1(ars)-1(e)-356(B)-1(LAS)1(,)-357(so)-357(that)-357(an)28(y)-357(extension)]TJ 0 -11.955 Td [(made)-320(to)-320(the)-321(data)-320(structures)-320(of)-320(the)-321(serial)-320(k)28(ernels)-320(is)-321(a)28(v)56(ailable)-320(to)-321(the)-320(parallel)-320(v)28(er-)]TJ 0 -11.955 Td [(sion.)-688(The)-415(o)28(v)28(erall)-415(design)-414(and)-415(parallelization)-414(strategy)-415(ha)28(v)28(e)-415(b)-28(een)-414(in\015uenced)-415(b)28(y)]TJ 0 -11.955 Td [(the)-348(structure)-348(of)-348(t)1(he)-348(ScaLAP)83(A)28(CK)-348(parallel)-348(library)84(.)-488(The)-348(la)28(y)27(ered)-348(structur)1(e)-348(of)-348(the)]TJ 0 -11.956 Td [(PSBLAS)-449(library)-449(is)-449(sho)28(wn)-449(in)-449(\014gure)]TJ 0 0 1 rg 0 0 1 RG [-449(1)]TJ 0 g 0 G - [(;)-506(lo)27(w)28(er)-449(la)28(y)28(ers)-449(of)-449(the)-449(library)-449(indicate)-449(an)]TJ 0 -11.955 Td [(encapsulation)-422(relationship)-423(with)-422(upp)-28(er)-422(la)27(y)28(ers.)-712(The)-422(ongoing)-423(discussion)-422(fo)-28(cuses)]TJ 0 -11.956 Td [(on)-367(the)-367(F)83(ortran)-367(2003)-367(la)28(y)28(er)-367(immediately)-368(b)-27(elo)28(w)-368(the)-367(application)-367(la)28(y)28(er.)-546(The)-367(serial)]TJ 0 -11.955 Td [(parts)-262(of)-261(the)-262(computation)-262(on)-262(eac)28(h)-262(pro)-27(cess)-262(are)-262(executed)-262(through)-261(calls)-262(to)-262(the)-262(serial)]TJ 0 -11.955 Td [(sparse)-271(BLAS)-271(subroutines.)-424(In)-270(a)-271(s)-1(i)1(m)-1(il)1(a)-1(r)-270(w)27(a)28(y)83(,)-283(the)-271(in)28(ter-pro)-28(cess)-271(message)-271(exc)27(han)1(ge)-1(s)]TJ 0 -11.955 Td [(are)-333(encapsulated)-333(in)-333(an)-332(applicaiton)-333(la)28(y)27(er)-332(that)-333(has)-333(b)-28(een)-333(strongly)-333(in)1(s)-1(p)1(ired)-333(b)28(y)-333(the)]TJ 0 -11.955 Td [(Basic)-257(Linear)-257(Algebra)-258(Comm)28(unication)-257(Subroutines)-257(\050BLA)28(CS\051)-257(library)-257([)]TJ + [(;)-506(lo)27(w)28(er)-449(la)28(y)28(ers)-449(of)-449(the)-449(library)-449(indicate)-449(an)]TJ 0 -11.955 Td [(encapsulation)-422(relationship)-423(with)-422(upp)-28(er)-422(la)27(y)28(ers.)-712(The)-422(ongoing)-423(discussion)-422(fo)-28(cuses)]TJ 0 -11.955 Td [(on)-367(the)-367(F)83(ortran)-367(2003)-367(la)28(y)28(er)-367(immediately)-368(b)-27(elo)28(w)-368(the)-367(application)-367(la)28(y)28(er.)-546(The)-367(serial)]TJ 0 -11.955 Td [(parts)-262(of)-261(the)-262(computation)-262(on)-262(eac)28(h)-262(pro)-27(cess)-262(are)-262(executed)-262(through)-261(calls)-262(to)-262(the)-262(serial)]TJ 0 -11.955 Td [(sparse)-271(BLAS)-271(subroutines.)-424(In)-270(a)-271(s)-1(i)1(m)-1(il)1(a)-1(r)-270(w)27(a)28(y)83(,)-283(the)-271(in)28(ter-pro)-28(cess)-271(message)-271(exc)27(han)1(ge)-1(s)]TJ 0 -11.955 Td [(are)-333(encapsulated)-333(in)-333(an)-332(applicaiton)-333(la)28(y)27(er)-332(that)-333(has)-333(b)-28(een)-333(strongly)-333(in)1(s)-1(p)1(ired)-333(b)28(y)-333(the)]TJ 0 -11.956 Td [(Basic)-257(Linear)-257(Algebra)-258(Comm)28(unication)-257(Subroutines)-257(\050BLA)28(CS\051)-257(library)-257([)]TJ 1 0 0 rg 1 0 0 RG [(7)]TJ 0 g 0 G - [(].)-419(Usually)]TJ 0 -11.955 Td [(there)-261(is)-261(no)-261(need)-261(to)-261(deal)-261(directly)-261(with)-261(MPI;)-261(ho)28(w)27(ev)28(er,)-275(in)-261(some)-261(case)-1(s,)-275(MPI)-261(routines)]TJ 0 -11.956 Td [(are)-248(used)-249(directly)-248(to)-248(im)-1(p)1(ro)27(v)28(e)-248(e\016ciency)83(.)-416(F)83(or)-248(further)-248(details)-249(on)-248(our)-248(c)-1(omm)28(unication)]TJ 0 -11.955 Td [(la)28(y)28(er)-334(see)-333(Sec.)]TJ + [(].)-419(Usually)]TJ 0 -11.955 Td [(there)-261(is)-261(no)-261(need)-261(to)-261(deal)-261(directly)-261(with)-261(MPI;)-261(ho)28(w)27(ev)28(er,)-275(in)-261(some)-261(case)-1(s,)-275(MPI)-261(routines)]TJ 0 -11.955 Td [(are)-248(used)-249(directly)-248(to)-248(im)-1(p)1(ro)27(v)28(e)-248(e\016ciency)83(.)-416(F)83(or)-248(further)-248(details)-249(on)-248(our)-248(c)-1(omm)28(unication)]TJ 0 -11.955 Td [(la)28(y)28(er)-334(see)-333(Sec.)]TJ 0 0 1 rg 0 0 1 RG [-334(7)]TJ 0 g 0 G @@ -3190,9 +3460,7 @@ BT 0 g 0 G 0 g 0 G ET -1 0 0 1 252.686 420.317 cm -q -0 -1 1 0 0 0 cm +1 0 0 1 258.536 283.226 cm q 0.65 0 0 0.65 0 0 cm q @@ -3200,43 +3468,42 @@ q /Im1 Do Q Q -Q 0 g 0 G -1 0 0 1 -252.686 -420.317 cm +1 0 0 1 -258.536 -283.226 cm BT -/F8 9.9626 Tf 215.088 264.429 Td [(Figure)-333(1:)-445(PSBLAS)-333(library)-333(comp)-28(onen)28(ts)-334(hi)1(e)-1(r)1(arc)27(h)28(y)83(.)]TJ +/F8 9.9626 Tf 215.088 251.345 Td [(Figure)-333(1:)-445(PSBLAS)-333(library)-333(comp)-28(onen)28(ts)-334(hi)1(e)-1(r)1(arc)27(h)28(y)83(.)]TJ 0 g 0 G 0 g 0 G - -49.439 -24.338 Td [(The)-438(t)27(yp)-27(e)-439(of)-438(linear)-439(system)-438(matrices)-439(that)-438(w)28(e)-439(address)-438(t)28(ypically)-439(arise)-438(in)-439(the)]TJ -14.944 -11.955 Td [(n)28(umerical)-428(solution)-428(of)-428(PDEs;)-476(in)-428(suc)28(h)-428(a)-428(con)28(text,)-452(it)-428(is)-428(necessary)-428(to)-429(p)1(a)27(y)-428(sp)-28(ecial)]TJ 0 -11.955 Td [(atten)28(tion)-296(to)-296(th)1(e)-296(structure)-296(of)-296(the)-295(problem)-296(from)-296(whic)28(h)-295(the)-296(application)-296(originates.)]TJ 0 -11.955 Td [(The)-322(nonzero)-322(pattern)-322(of)-322(a)-322(matrix)-322(arising)-322(from)-322(the)-322(discretization)-322(of)-322(a)-322(PDE)-322(is)-322(in-)]TJ 0 -11.956 Td [(\015uenced)-332(b)28(y)-332(v)55(arious)-332(factors,)-332(suc)27(h)-332(as)-332(the)-332(shap)-28(e)-332(of)-332(the)-332(domain,)-332(the)-333(d)1(is)-1(cretization)]TJ 0 -11.955 Td [(strategy)83(,)-396(and)-383(the)-383(equation/unkno)28(wn)-384(ordering.)-595(The)-383(matrix)-383(itself)-384(can)-383(b)-28(e)-384(i)1(n)27(ter-)]TJ 0 -11.955 Td [(preted)-358(as)-358(the)-358(adjacency)-358(matrix)-358(of)-358(the)-358(graph)-358(ass)-1(o)-27(ciated)-358(with)-358(the)-358(disc)-1(r)1(e)-1(tization)]TJ 0 -11.955 Td [(mesh.)]TJ 14.944 -12.169 Td [(The)-241(distrib)1(ution)-241(of)-241(th)1(e)-241(co)-28(e\016cien)28(t)-241(matrix)-240(for)-241(the)-241(lin)1(e)-1(ar)-240(system)-241(is)-240(based)-241(on)-241(the)]TJ -14.944 -11.955 Td [(\134o)28(wner)-353(computes")-352(rule:)-483(the)-353(v)56(ariable)-353(asso)-28(ciated)-352(to)-353(eac)28(h)-352(me)-1(sh)-352(p)-28(oin)28(t)-352(is)-353(assigned)]TJ 0 -11.955 Td [(to)-359(a)-358(pro)-28(cess)-359(that)-359(will)-359(o)28(wn)-359(th)1(e)-359(corresp)-28(onding)-359(ro)28(w)-359(in)-358(the)-359(co)-28(e\016cien)28(t)-359(matrix)-359(and)]TJ + -49.439 -23.423 Td [(The)-438(t)27(yp)-27(e)-439(of)-438(linear)-439(system)-438(matrices)-439(that)-438(w)28(e)-439(address)-438(t)28(ypically)-439(arise)-438(in)-439(the)]TJ -14.944 -11.955 Td [(n)28(umerical)-428(solution)-428(of)-428(PDEs;)-476(in)-428(suc)28(h)-428(a)-428(con)28(text,)-452(it)-428(is)-428(necessary)-428(to)-429(p)1(a)27(y)-428(sp)-28(ecial)]TJ 0 -11.955 Td [(atten)28(tion)-296(to)-296(th)1(e)-296(structure)-296(of)-296(the)-295(problem)-296(from)-296(whic)28(h)-295(the)-296(application)-296(originates.)]TJ 0 -11.955 Td [(The)-322(nonzero)-322(pattern)-322(of)-322(a)-322(matrix)-322(arising)-322(from)-322(the)-322(discretization)-322(of)-322(a)-322(PDE)-322(is)-322(in-)]TJ 0 -11.956 Td [(\015uenced)-332(b)28(y)-332(v)55(arious)-332(factors,)-332(suc)27(h)-332(as)-332(the)-332(shap)-28(e)-332(of)-332(the)-332(domain,)-332(the)-333(d)1(is)-1(cretization)]TJ 0 -11.955 Td [(strategy)83(,)-396(and)-383(the)-383(equation/unkno)28(wn)-384(ordering.)-595(The)-383(matrix)-383(itself)-384(can)-383(b)-28(e)-384(i)1(n)27(ter-)]TJ 0 -11.955 Td [(preted)-358(as)-358(the)-358(adjacency)-358(matrix)-358(of)-358(the)-358(graph)-358(ass)-1(o)-27(ciated)-358(with)-358(the)-358(disc)-1(r)1(e)-1(tization)]TJ 0 -11.955 Td [(mesh.)]TJ 14.944 -11.955 Td [(The)-241(distrib)1(ution)-241(of)-241(th)1(e)-241(co)-28(e\016cien)28(t)-241(matrix)-240(for)-241(the)-241(lin)1(e)-1(ar)-240(system)-241(is)-240(based)-241(on)-241(the)]TJ -14.944 -11.955 Td [(\134o)28(wner)-353(computes")-352(rule:)-483(the)-353(v)56(ariable)-353(asso)-28(ciated)-352(to)-353(eac)28(h)-352(me)-1(sh)-352(p)-28(oin)28(t)-352(is)-353(assigned)]TJ 0 g 0 G 169.365 -29.888 Td [(2)]TJ 0 g 0 G ET endstream endobj -597 0 obj << +647 0 obj << /Type /Page -/Contents 598 0 R -/Resources 596 0 R +/Contents 648 0 R +/Resources 646 0 R /MediaBox [0 0 595.276 841.89] -/Parent 580 0 R -/Annots [ 591 0 R 592 0 R 593 0 R ] +/Parent 630 0 R +/Annots [ 641 0 R 642 0 R 643 0 R ] >> endobj -594 0 obj << +644 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/psblas.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 601 0 R +/PTEX.InfoDict 651 0 R /BBox [0 0 197 215] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 602 0 R ->>/Font << /R8 603 0 R>> +/R7 652 0 R +>>/Font << /R8 653 0 R>> >> -/Length 604 0 R +/Length 654 0 R /Filter /FlateDecode >> stream @@ -3255,7 +3522,7 @@ x «Ͻ'ƒÇ›ÇÇùaÚ>=|9Êh±Büuæ¹£$îËLËàq·–ÑÃÊŸ5×k^Þ½;>íN÷Ûi™ZŠ\V+9D£­8îNËLÓG™÷×»~0+¾’”àŠ'¢ˆ±íúmw>o÷;{·=ŸŽûEý—»a¥ÃѲîîÝâ8SË4Â%ÕÇ¥_¾œžNÛ#OαéƒùüÐ endstream endobj -601 0 obj +651 0 obj << /Producer (GPL Ghostscript 9.04) /CreationDate (D:20111215145523+01'00') @@ -3265,16 +3532,16 @@ endobj /Author (sfilippo@donald \(Salvatore Filippone\)) >> endobj -602 0 obj +652 0 obj << /Type /ExtGState /OPM 1 >> endobj -603 0 obj +653 0 obj << /BaseFont /JEJNJE#2BTimes-Roman -/FontDescriptor 605 0 R +/FontDescriptor 655 0 R /Type /Font /FirstChar 32 /LastChar 116 @@ -3283,10 +3550,10 @@ endobj /Subtype /Type1 >> endobj -604 0 obj +654 0 obj 898 endobj -605 0 obj +655 0 obj << /Type /FontDescriptor /FontName /JEJNJE#2BTimes-Roman @@ -3300,10 +3567,10 @@ endobj /MissingWidth 500 /XHeight 460 /CharSet (/A/B/F/I/L/M/P/S/a/c/e/f/g/i/l/n/o/p/r/s/space/t/three/two/zero) -/FontFile3 606 0 R +/FontFile3 656 0 R >> endobj -606 0 obj +656 0 obj << /Filter /FlateDecode /Subtype /Type1C @@ -3323,75 +3590,71 @@ p IZ¹t4¤w!}^€gì½—ú€h9@±^è Ò…s2•=3B2H>ÉçynÞÌû7ŠC‰#ˆþhñÚï-whèÇGtBŒV²Õºø`uÞ1èFæ3ÑvðøçÓ÷à´ÛoÝ34\z"ž“,P&+š´®¿Ú»oB03¼å㣶xsÉÝä!FáŽ/†m'~¼êŒn?àßvaÝDëÑ÷ì+°¥¸5ïšôt0Ü ¶æ+ÉÔ·ÆsRz…t¥J–xFzëþƒöÁQîè`û¼/dŠº2›åž™j@7GÛú.º?Üwyc$O‘œÀI‘(S¥ME®ƒßŒô| Áõ^`‚2!-›’"VîIN™"Ì‚B-ÌÎe³/uV9:Î6:.Ç°ÿMɪH endstream endobj -591 0 obj << +641 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [310.543 539.3 317.517 550.149] +/Rect [310.543 541.042 317.517 551.89] /Subtype /Link /A << /S /GoTo /D (figure.1) >> >> endobj -592 0 obj << +642 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] -/Rect [446.018 469.506 452.992 477.919] +/Rect [446.018 471.248 452.992 479.661] /Subtype /Link /A << /S /GoTo /D (cite.BLACS) >> >> endobj -593 0 obj << +643 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [210.398 431.704 217.372 442.552] +/Rect [210.398 433.445 217.372 444.294] /Subtype /Link /A << /S /GoTo /D (section.7) >> >> endobj 14 0 obj << -/D [597 0 R /XYZ 150.705 676.303 null] +/D [647 0 R /XYZ 150.705 677.433 null] >> endobj -600 0 obj << -/D [597 0 R /XYZ 258.703 276.384 null] +650 0 obj << +/D [647 0 R /XYZ 258.703 263.3 null] >> endobj -596 0 obj << -/Font << /F8 438 0 R /F16 435 0 R /F11 599 0 R >> -/XObject << /Im1 594 0 R >> +646 0 obj << +/Font << /F8 478 0 R /F16 475 0 R /F11 649 0 R >> +/XObject << /Im1 644 0 R >> /ProcSet [ /PDF /Text ] >> endobj -614 0 obj << -/Length 9171 +662 0 obj << +/Length 8854 >> stream 0 g 0 G 0 g 0 G BT -/F8 9.9626 Tf 99.895 706.129 Td [(will)-287(carry)-287(out)-287(all)-287(related)-287(computations.)-429(This)-287(allo)-28(cation)-287(strategy)-287(is)-287(e)-1(qu)1(iv)55(alen)28(t)-287(to)]TJ 0 -11.955 Td [(a)-390(partition)-390(of)-390(the)-390(discretization)-390(mesh)-390(in)28(to)]TJ/F17 9.9626 Tf 189.534 0 Td [(sub-domains)]TJ/F8 9.9626 Tf 53.721 0 Td [(.)-614(Our)-390(library)-390(supp)-28(orts)]TJ -243.255 -11.955 Td [(an)28(y)-379(distribution)-379(that)-379(k)28(eeps)-379(together)-379(the)-379(co)-28(e\016cien)28(ts)-379(of)-379(eac)27(h)-379(matri)1(x)-379(ro)27(w;)-401(there)]TJ 0 -11.956 Td [(are)-391(no)-391(other)-391(constrain)28(ts)-391(on)-391(the)-391(v)55(ariable)-391(assignmen)28(t.)-617(This)-392(c)28(hoice)-391(is)-391(consisten)28(t)]TJ 0 -11.955 Td [(with)-389(simple)-388(data)-389(distributions)-388(s)-1(u)1(c)27(h)-388(as)]TJ/F30 9.9626 Tf 172.701 0 Td [(CYCLIC\050N\051)]TJ/F8 9.9626 Tf 50.944 0 Td [(and)]TJ/F30 9.9626 Tf 19.923 0 Td [(BLOCK)]TJ/F8 9.9626 Tf 26.152 0 Td [(,)-389(as)-388(w)27(ell)-388(as)-389(com-)]TJ -269.72 -11.955 Td [(pletely)-373(arbitrary)-372(assignmen)27(ts)-372(of)-373(equation)-372(indices)-373(to)-373(pro)-28(cesses.)-562(In)-373(particular)-372(it)]TJ 0 -11.955 Td [(is)-376(consisten)28(t)-376(with)-376(the)-375(usage)-376(of)-376(graph)-375(partitioning)-376(to)-28(ols)-376(commonly)-375(a)27(v)56(ailable)-376(in)]TJ 0 -11.955 Td [(the)-308(literatur)1(e)-1(,)-312(e.g.)-436(METIS)-308([)]TJ +/F8 9.9626 Tf 99.895 706.129 Td [(to)-359(a)-359(pr)1(o)-28(cess)-359(that)-359(will)-359(o)28(wn)-359(the)-358(corresp)-28(onding)-359(ro)28(w)-359(in)-358(the)-359(co)-28(e\016cien)28(t)-359(matrix)-359(and)]TJ 0 -11.955 Td [(will)-287(carry)-287(out)-287(all)-287(related)-287(computations.)-429(This)-287(allo)-28(cation)-287(strategy)-287(is)-287(e)-1(qu)1(iv)55(alen)28(t)-287(to)]TJ 0 -11.955 Td [(a)-390(partition)-390(of)-390(the)-390(discretization)-390(mesh)-390(in)28(to)]TJ/F17 9.9626 Tf 189.534 0 Td [(sub-domains)]TJ/F8 9.9626 Tf 53.721 0 Td [(.)-614(Our)-390(library)-390(supp)-28(orts)]TJ -243.255 -11.956 Td [(an)28(y)-379(distribution)-379(that)-379(k)28(eeps)-379(together)-379(the)-379(co)-28(e\016cien)28(ts)-379(of)-379(eac)27(h)-379(matri)1(x)-379(ro)27(w;)-401(there)]TJ 0 -11.955 Td [(are)-391(no)-391(other)-391(constrain)28(ts)-391(on)-391(the)-391(v)55(ariable)-391(assignmen)28(t.)-617(This)-392(c)28(hoice)-391(is)-391(consisten)28(t)]TJ 0 -11.955 Td [(with)-389(simple)-388(data)-389(distributions)-388(s)-1(u)1(c)27(h)-388(as)]TJ/F30 9.9626 Tf 172.701 0 Td [(CYCLIC\050N\051)]TJ/F8 9.9626 Tf 50.944 0 Td [(and)]TJ/F30 9.9626 Tf 19.923 0 Td [(BLOCK)]TJ/F8 9.9626 Tf 26.152 0 Td [(,)-389(as)-388(w)27(ell)-388(as)-389(com-)]TJ -269.72 -11.955 Td [(pletely)-373(arbitrary)-372(assignmen)27(ts)-372(of)-373(equation)-372(indices)-373(to)-373(pro)-28(cesses.)-562(In)-373(particular)-372(it)]TJ 0 -11.955 Td [(is)-376(consisten)28(t)-376(with)-376(the)-375(usage)-376(of)-376(graph)-375(partitioning)-376(to)-28(ols)-376(commonly)-375(a)27(v)56(ailable)-376(in)]TJ 0 -11.956 Td [(the)-308(literatur)1(e)-1(,)-312(e.g.)-436(METIS)-308([)]TJ 1 0 0 rg 1 0 0 RG - [(13)]TJ + [(14)]TJ 0 g 0 G - [(].)-435(Dense)-308(v)28(ectors)-308(conform)-307(to)-308(sparse)-308(matri)1(c)-1(es,)-312(that)]TJ 0 -11.956 Td [(is,)-333(the)-334(en)28(tries)-333(of)-334(a)-333(v)28(ector)-334(f)1(ollo)27(w)-333(the)-333(same)-334(distribution)-333(of)-333(the)-334(matrix)-333(ro)28(ws.)]TJ 14.944 -11.955 Td [(W)83(e)-413(assume)-413(that)-413(the)-412(s)-1(par)1(s)-1(e)-412(m)-1(atr)1(ix)-413(is)-413(built)-413(in)-413(parallel,)-433(where)-413(eac)28(h)-413(pro)-28(cess)]TJ -14.944 -11.955 Td [(generates)-321(its)-321(o)28(wn)-321(p)-28(ortion.)-440(W)84(e)-321(nev)28(e)-1(r)-320(require)-321(that)-321(the)-321(en)28(tire)-321(matrix)-321(b)-27(e)-321(a)28(v)55(ailable)]TJ 0 -11.955 Td [(on)-279(a)-279(single)-279(no)-28(de.)-426(Ho)27(w)28(ev)28(er,)-290(it)-279(is)-279(p)-28(ossible)-279(to)-279(hold)-279(the)-279(en)28(tire)-279(m)-1(atr)1(ix)-280(in)-279(one)-279(pro)-27(ces)-1(s)]TJ 0 -11.955 Td [(and)-369(distribute)-369(it)-370(expl)1(ic)-1(i)1(tly)]TJ + [(].)-435(Dense)-308(v)28(ectors)-308(conform)-307(to)-308(sparse)-308(matri)1(c)-1(es,)-312(that)]TJ 0 -11.955 Td [(is,)-333(the)-334(en)28(tries)-333(of)-334(a)-333(v)28(ector)-334(f)1(ollo)27(w)-333(the)-333(same)-334(distribution)-333(of)-333(the)-334(matrix)-333(ro)28(ws.)]TJ 14.944 -13.267 Td [(W)83(e)-413(assume)-413(that)-413(the)-412(s)-1(par)1(s)-1(e)-412(m)-1(atr)1(ix)-413(is)-413(built)-413(in)-413(parallel,)-433(where)-413(eac)28(h)-413(pro)-28(cess)]TJ -14.944 -11.955 Td [(generates)-321(its)-321(o)28(wn)-321(p)-28(ortion.)-440(W)84(e)-321(nev)28(e)-1(r)-320(require)-321(that)-321(the)-321(en)28(tire)-321(matrix)-321(b)-27(e)-321(a)28(v)55(ailable)]TJ 0 -11.955 Td [(on)-279(a)-279(single)-279(no)-28(de.)-426(Ho)27(w)28(ev)28(er,)-290(it)-279(is)-279(p)-28(ossible)-279(to)-279(hold)-279(the)-279(en)28(tire)-279(m)-1(atr)1(ix)-280(in)-279(one)-279(pro)-27(ces)-1(s)]TJ 0 -11.955 Td [(and)-243(distribute)-243(it)-243(explicitly)]TJ 0 0 1 rg 0 0 1 RG -/F7 6.9738 Tf 115.727 3.615 Td [(1)]TJ +/F7 6.9738 Tf 111.956 3.615 Td [(1)]TJ 0 g 0 G -/F8 9.9626 Tf 4.469 -3.615 Td [(,)-378(ev)28(e)-1(n)-369(though)-369(the)-369(resulting)-369(b)-28(ottlenec)28(k)-369(w)27(ould)-369(mak)28(e)]TJ -120.196 -11.955 Td [(this)-333(option)-334(un)1(a)-1(t)1(trac)-1(t)1(iv)27(e)-333(in)-333(most)-334(cases.)]TJ/F16 11.9552 Tf 0 -27.747 Td [(2.1)-1125(Basic)-375(Nomenclature)]TJ/F8 9.9626 Tf 0 -18.389 Td [(Our)-377(computational)-377(mo)-28(del)-377(implies)-378(that)-377(the)-377(data)-377(allo)-28(cation)-377(on)-378(the)-377(parallel)-377(dis-)]TJ 0 -11.956 Td [(tributed)-303(memory)-302(mac)27(hine)-302(is)-303(guided)-303(b)28(y)-303(the)-302(structure)-303(of)-303(the)-303(p)1(h)27(ysical)-302(mo)-28(del,)-309(and)]TJ 0 -11.955 Td [(sp)-28(eci\014cally)-333(b)28(y)-334(the)-333(discretization)-333(mesh)-334(of)-333(the)-333(PDE.)]TJ 14.944 -11.955 Td [(Eac)28(h)-471(p)-28(oin)28(t)-471(of)-470(the)-471(discretization)-471(mesh)-470(will)-471(ha)28(v)28(e)-471(\050at)-471(least\051)-471(one)-470(asso)-28(ciated)]TJ -14.944 -11.955 Td [(equation/v)56(ariable,)-467(an)1(d)-440(therefore)-440(one)-439(index.)-764(W)84(e)-440(sa)28(y)-440(that)-439(p)-28(oin)28(t)]TJ/F11 9.9626 Tf 286.579 0 Td [(i)]TJ/F17 9.9626 Tf 7.812 0 Td [(dep)51(ends)]TJ/F8 9.9626 Tf 38.804 0 Td [(on)]TJ -333.195 -11.955 Td [(p)-28(oin)28(t)]TJ/F11 9.9626 Tf 26.99 0 Td [(j)]TJ/F8 9.9626 Tf 8.971 0 Td [(if)-431(the)-432(equation)-431(for)-431(a)-431(v)55(ariable)-431(asso)-28(ciated)-431(with)]TJ/F11 9.9626 Tf 205.846 0 Td [(i)]TJ/F8 9.9626 Tf 7.73 0 Td [(con)28(tains)-432(a)-431(term)-431(in)]TJ/F11 9.9626 Tf 86.734 0 Td [(j)]TJ/F8 9.9626 Tf 4.673 0 Td [(,)]TJ -340.944 -11.955 Td [(or)-408(equiv)56(alen)28(tly)-408(if)]TJ/F11 9.9626 Tf 78.912 0 Td [(a)]TJ/F10 6.9738 Tf 5.266 -1.495 Td [(ij)]TJ/F14 9.9626 Tf 11.021 1.495 Td [(6)]TJ/F8 9.9626 Tf 0 0 Td [(=)-402(0.)-668(After)-408(the)-408(partition)-407(of)-408(the)-408(discretization)-408(mesh)-408(in)28(to)]TJ/F17 9.9626 Tf -95.199 -11.956 Td [(sub-domains)]TJ/F8 9.9626 Tf 57.628 0 Td [(assigned)-310(to)-310(the)-310(parallel)-310(pro)-28(cesses,)-315(w)28(e)-310(classify)-310(the)-311(p)-27(oin)28(ts)-311(of)-310(a)-310(giv)28(en)]TJ -57.628 -11.955 Td [(sub-domain)-333(as)-334(follo)28(wing.)]TJ +/F8 9.9626 Tf 4.469 -3.615 Td [(,)-261(ev)28(en)-243(though)-243(the)-243(resulting)-243(memory)-243(b)-28(ottlenec)28(k)-244(w)28(ould)]TJ -116.425 -11.955 Td [(mak)28(e)-334(this)-333(option)-333(unattractiv)28(e)-334(in)-333(most)-333(case)-1(s.)]TJ/F16 11.9552 Tf 0 -34.848 Td [(2.1)-1125(Basic)-375(Nomenclature)]TJ/F8 9.9626 Tf 0 -20.831 Td [(Our)-377(computational)-377(mo)-28(del)-377(implies)-378(that)-377(the)-377(data)-377(allo)-28(cation)-377(on)-378(the)-377(parallel)-377(dis-)]TJ 0 -11.955 Td [(tributed)-303(memory)-302(mac)27(hine)-302(is)-303(guided)-303(b)28(y)-303(the)-302(structure)-303(of)-303(the)-303(p)1(h)27(ysical)-302(mo)-28(del,)-309(and)]TJ 0 -11.955 Td [(sp)-28(eci\014cally)-333(b)28(y)-334(the)-333(discretization)-333(mesh)-334(of)-333(the)-333(PDE.)]TJ 14.944 -13.267 Td [(Eac)28(h)-471(p)-28(oin)28(t)-471(of)-470(the)-471(discretization)-471(mesh)-470(will)-471(ha)28(v)28(e)-471(\050at)-471(least\051)-471(one)-470(asso)-28(ciated)]TJ -14.944 -11.955 Td [(equation/v)56(ariable,)-467(an)1(d)-440(therefore)-440(one)-439(index.)-764(W)84(e)-440(sa)28(y)-440(that)-439(p)-28(oin)28(t)]TJ/F11 9.9626 Tf 286.579 0 Td [(i)]TJ/F17 9.9626 Tf 7.812 0 Td [(dep)51(ends)]TJ/F8 9.9626 Tf 38.804 0 Td [(on)]TJ -333.195 -11.955 Td [(p)-28(oin)28(t)]TJ/F11 9.9626 Tf 26.99 0 Td [(j)]TJ/F8 9.9626 Tf 8.971 0 Td [(if)-431(the)-432(equation)-431(for)-431(a)-431(v)55(ariable)-431(asso)-28(ciated)-431(with)]TJ/F11 9.9626 Tf 205.846 0 Td [(i)]TJ/F8 9.9626 Tf 7.73 0 Td [(con)28(tains)-432(a)-431(term)-431(in)]TJ/F11 9.9626 Tf 86.734 0 Td [(j)]TJ/F8 9.9626 Tf 4.673 0 Td [(,)]TJ -340.944 -11.955 Td [(or)-408(equiv)56(alen)28(tly)-408(if)]TJ/F11 9.9626 Tf 78.912 0 Td [(a)]TJ/F10 6.9738 Tf 5.266 -1.495 Td [(ij)]TJ/F14 9.9626 Tf 11.021 1.495 Td [(6)]TJ/F8 9.9626 Tf 0 0 Td [(=)-402(0.)-668(After)-408(the)-408(partition)-407(of)-408(the)-408(discretization)-408(mesh)-408(in)28(to)]TJ/F17 9.9626 Tf -95.199 -11.956 Td [(sub-domains)]TJ/F8 9.9626 Tf 57.628 0 Td [(assigned)-310(to)-310(the)-310(parallel)-310(pro)-28(cesses,)-315(w)28(e)-310(classify)-310(the)-311(p)-27(oin)28(ts)-311(of)-310(a)-310(giv)28(en)]TJ -57.628 -11.955 Td [(sub-domain)-333(as)-334(follo)28(wing.)]TJ 0 g 0 G -/F27 9.9626 Tf 0 -19.266 Td [(In)32(ternal.)]TJ +/F27 9.9626 Tf 0 -23.86 Td [(In)32(ternal.)]TJ 0 g 0 G -/F8 9.9626 Tf 48.097 0 Td [(An)-397(in)28(ternal)-397(p)-28(oin)28(t)-397(of)-397(a)-396(giv)27(en)-397(domain)]TJ/F17 9.9626 Tf 164.694 0 Td [(dep)51(ends)]TJ/F8 9.9626 Tf 37.561 0 Td [(only)-397(on)-397(p)-27(oin)27(ts)-397(of)-396(the)]TJ -225.445 -11.956 Td [(same)-288(domain.)-429(If)-289(al)1(l)-289(p)-27(oin)28(ts)-289(of)-288(a)-288(domain)-288(are)-288(assigned)-288(to)-288(one)-288(pro)-28(cess,)-297(then)-288(a)]TJ 0 -11.955 Td [(computational)-342(step)-342(\050e.g.,)-344(a)-342(matrix-v)28(ec)-1(tor)-342(pr)1(o)-28(duct\051)-342(of)-342(the)-342(equations)-342(asso-)]TJ 0 -11.955 Td [(ciated)-302(with)-303(t)1(he)-303(in)28(ternal)-302(p)-28(oin)28(ts)-302(requires)-303(no)-302(data)-302(items)-302(from)-303(other)-302(domains)]TJ 0 -11.955 Td [(and)-333(no)-334(comm)28(unications.)]TJ +/F8 9.9626 Tf 48.097 0 Td [(An)-397(in)28(ternal)-397(p)-28(oin)28(t)-397(of)-397(a)-396(giv)27(en)-397(domain)]TJ/F17 9.9626 Tf 164.694 0 Td [(dep)51(ends)]TJ/F8 9.9626 Tf 37.561 0 Td [(only)-397(on)-397(p)-27(oin)27(ts)-397(of)-396(the)]TJ -225.445 -11.955 Td [(same)-288(domain.)-429(If)-289(al)1(l)-289(p)-27(oin)28(ts)-289(of)-288(a)-288(domain)-288(are)-288(assigned)-288(to)-288(one)-288(pro)-28(cess,)-297(then)-288(a)]TJ 0 -11.956 Td [(computational)-342(step)-342(\050e.g.,)-344(a)-342(matrix-v)28(ec)-1(tor)-342(pr)1(o)-28(duct\051)-342(of)-342(the)-342(equations)-342(asso-)]TJ 0 -11.955 Td [(ciated)-302(with)-303(t)1(he)-303(in)28(ternal)-302(p)-28(oin)28(ts)-302(requires)-303(no)-302(data)-302(items)-302(from)-303(other)-302(domains)]TJ 0 -11.955 Td [(and)-333(no)-334(comm)28(unications.)]TJ 0 g 0 G -/F27 9.9626 Tf -24.907 -19.596 Td [(Boundary)96(.)]TJ +/F27 9.9626 Tf -24.907 -25.172 Td [(Boundary)96(.)]TJ 0 g 0 G /F8 9.9626 Tf 56.517 0 Td [(A)-438(p)-28(oin)28(t)-438(of)-438(a)-438(giv)28(en)-439(domain)-438(is)-438(a)-438(b)-28(oundar)1(y)-439(p)-27(oin)28(t)-439(if)-438(it)]TJ/F17 9.9626 Tf 238.706 0 Td [(dep)51(ends)]TJ/F8 9.9626 Tf 37.972 0 Td [(on)]TJ -308.288 -11.955 Td [(p)-28(oin)28(ts)-333(b)-28(elonging)-333(to)-334(other)-333(domains.)]TJ 0 g 0 G -/F27 9.9626 Tf -24.907 -19.596 Td [(Halo.)]TJ +/F27 9.9626 Tf -24.907 -25.172 Td [(Halo.)]TJ 0 g 0 G -/F8 9.9626 Tf 31.611 0 Td [(A)-462(halo)-462(p)-28(oin)28(t)-463(for)-462(a)-462(giv)27(en)-462(domain)-462(is)-463(a)-462(p)-28(oin)28(t)-462(b)-28(elonging)-462(to)-463(an)1(other)-463(do-)]TJ -6.704 -11.955 Td [(main)-313(s)-1(u)1(c)27(h)-313(that)-314(there)-313(is)-314(a)-313(b)-28(oundary)-313(p)-28(oin)28(t)-314(whic)28(h)]TJ/F17 9.9626 Tf 210.37 0 Td [(dep)51(ends)]TJ/F8 9.9626 Tf 37.548 0 Td [(on)-313(it.)-438(Whenev)28(er)]TJ -247.918 -11.955 Td [(p)-28(erforming)-444(a)-444(computational)-444(step,)-472(suc)28(h)-444(as)-444(a)-445(matrix-v)28(ector)-444(pro)-28(duct,)-472(th)1(e)]TJ 0 -11.956 Td [(v)56(alues)-383(asso)-28(ciated)-383(with)-383(halo)-383(p)-27(oin)27(ts)-383(ar)1(e)-383(requested)-383(from)-383(other)-383(domains.)-593(A)]TJ 0 -11.955 Td [(b)-28(oundary)-363(p)-28(oin)28(t)-363(of)-364(a)-363(giv)28(en)-364(domain)-363(is)-364(usually)-363(a)-364(halo)-363(p)-28(oin)28(t)-363(for)-364(some)-363(other)]TJ 0 -11.955 Td [(domain)]TJ +/F8 9.9626 Tf 31.611 0 Td [(A)-462(halo)-462(p)-28(oin)28(t)-463(for)-462(a)-462(giv)27(en)-462(domain)-462(is)-463(a)-462(p)-28(oin)28(t)-462(b)-28(elonging)-462(to)-463(an)1(other)-463(do-)]TJ -6.704 -11.956 Td [(main)-313(s)-1(u)1(c)27(h)-313(that)-314(there)-313(is)-314(a)-313(b)-28(oundary)-313(p)-28(oin)28(t)-314(whic)28(h)]TJ/F17 9.9626 Tf 210.37 0 Td [(dep)51(ends)]TJ/F8 9.9626 Tf 37.548 0 Td [(on)-313(it.)-438(Whenev)28(er)]TJ -247.918 -11.955 Td [(p)-28(erforming)-444(a)-444(computational)-444(step,)-472(suc)28(h)-444(as)-444(a)-445(matrix-v)28(ector)-444(pro)-28(duct,)-472(th)1(e)]TJ 0 -11.955 Td [(v)56(alues)-383(asso)-28(ciated)-383(with)-383(halo)-383(p)-27(oin)27(ts)-383(ar)1(e)-383(requested)-383(from)-383(other)-383(domains.)-593(A)]TJ 0 -11.955 Td [(b)-28(oundary)-363(p)-28(oin)28(t)-363(of)-364(a)-363(giv)28(en)-364(domain)-363(is)-364(usually)-363(a)-364(halo)-363(p)-28(oin)28(t)-363(for)-364(some)-363(other)]TJ 0 -11.955 Td [(domain)]TJ 0 0 1 rg 0 0 1 RG /F7 6.9738 Tf 32.102 3.615 Td [(2)]TJ 0 g 0 G /F8 9.9626 Tf 4.469 -3.615 Td [(;)-323(therefore)-319(the)-319(card)1(inalit)27(y)-318(of)-319(the)-318(b)-28(oundary)-318(p)-28(oin)28(ts)-319(set)-318(denotes)-319(the)]TJ -36.571 -11.955 Td [(amoun)28(t)-334(of)-333(data)-333(sen)28(t)-334(to)-333(other)-333(domains.)]TJ 0 g 0 G -/F27 9.9626 Tf -24.907 -19.596 Td [(Ov)32(erlap.)]TJ -0 g 0 G -/F8 9.9626 Tf 47.586 0 Td [(An)-339(o)28(v)28(erlap)-339(p)-28(oin)28(t)-339(is)-339(a)-339(b)-28(oundary)-339(p)-28(oin)28(t)-339(assigned)-339(to)-339(m)28(ultiple)-339(domains.)]TJ -22.679 -11.955 Td [(An)28(y)-297(op)-28(eration)-296(that)-297(in)28(v)28(olv)27(es)-296(an)-297(o)28(v)27(erlap)-296(p)-28(oin)28(t)-297(has)-297(to)-296(b)-28(e)-297(replicated)-297(for)-296(eac)27(h)]TJ 0 -11.955 Td [(assignmen)28(t.)]TJ -0 g 0 G ET q 1 0 0 1 99.895 167.678 cm @@ -3406,59 +3669,62 @@ BT ET endstream endobj -613 0 obj << +661 0 obj << /Type /Page -/Contents 614 0 R -/Resources 612 0 R +/Contents 662 0 R +/Resources 660 0 R /MediaBox [0 0 595.276 841.89] -/Parent 580 0 R -/Annots [ 595 0 R 608 0 R 609 0 R ] +/Parent 630 0 R +/Annots [ 645 0 R 658 0 R 659 0 R ] >> endobj -595 0 obj << +645 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] -/Rect [219.5 621.446 231.455 629.859] +/Rect [219.5 609.491 231.455 617.904] /Subtype /Link /A << /S /GoTo /D (cite.METIS) >> >> endobj -608 0 obj << +658 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [214.626 559.733 221.088 571.773] +/Rect [210.854 546.467 217.316 558.506] /Subtype /Link /A << /S /GoTo /D (Hfootnote.1) >> >> endobj -609 0 obj << +659 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [155.908 227.991 162.37 240.03] +/Rect [155.908 188.124 162.37 200.163] /Subtype /Link /A << /S /GoTo /D (Hfootnote.2) >> >> endobj -615 0 obj << -/D [613 0 R /XYZ 99.895 740.998 null] +663 0 obj << +/D [661 0 R /XYZ 99.895 740.998 null] >> endobj 18 0 obj << -/D [613 0 R /XYZ 99.895 534.976 null] +/D [661 0 R /XYZ 99.895 515.919 null] >> endobj -621 0 obj << -/D [613 0 R /XYZ 115.138 167.688 null] +669 0 obj << +/D [661 0 R /XYZ 115.138 167.688 null] >> endobj -623 0 obj << -/D [613 0 R /XYZ 115.138 158.184 null] +671 0 obj << +/D [661 0 R /XYZ 115.138 158.184 null] >> endobj -612 0 obj << -/Font << /F8 438 0 R /F17 579 0 R /F30 616 0 R /F7 617 0 R /F16 435 0 R /F11 599 0 R /F10 618 0 R /F14 619 0 R /F27 437 0 R /F32 620 0 R /F31 622 0 R >> +660 0 obj << +/Font << /F8 478 0 R /F17 629 0 R /F30 664 0 R /F7 665 0 R /F16 475 0 R /F11 649 0 R /F10 666 0 R /F14 667 0 R /F27 477 0 R /F32 668 0 R /F31 670 0 R >> /ProcSet [ /PDF /Text ] >> endobj -628 0 obj << -/Length 5188 +678 0 obj << +/Length 5348 >> stream 0 g 0 G 0 g 0 G +0 g 0 G BT -/F8 9.9626 Tf 150.705 706.129 Td [(Ov)28(erlap)-266(p)-27(oin)27(t)1(s)-266(do)-265(not)-266(usually)-265(exist)-266(in)-265(the)-266(basic)-265(data)-266(distrib)1(utions;)-288(ho)27(w)28(ev)28(er)-266(they)]TJ 0 -11.955 Td [(are)-347(a)-347(feature)-348(of)-347(Domain)-347(Decomp)-28(osition)-347(Sc)28(h)28(w)27(arz)-347(preconditioners)-347(whic)28(h)-347(are)-348(the)]TJ 0 -11.955 Td [(sub)-56(j)1(e)-1(ct)-333(of)-333(related)-334(r)1(e)-1(searc)28(h)-333(w)28(ork)-334([)]TJ +/F27 9.9626 Tf 150.705 706.129 Td [(Ov)32(erlap.)]TJ +0 g 0 G +/F8 9.9626 Tf 47.585 0 Td [(An)-339(o)28(v)28(erlap)-339(p)-28(oin)28(t)-339(is)-339(a)-339(b)-28(oundary)-339(p)-28(oin)28(t)-339(assigned)-339(to)-339(m)28(ultiple)-339(domains.)]TJ -22.679 -11.955 Td [(An)28(y)-297(op)-28(eration)-296(that)-297(in)28(v)28(olv)27(es)-297(an)-296(o)28(v)27(erlap)-296(p)-28(oin)28(t)-297(has)-297(to)-297(b)-27(e)-297(replicated)-297(for)-296(e)-1(ac)28(h)]TJ 0 -11.955 Td [(assignmen)28(t.)]TJ -24.906 -19.428 Td [(Ov)28(erlap)-266(p)-27(oin)27(t)1(s)-266(do)-265(not)-266(usually)-265(exist)-266(in)-265(the)-266(basic)-265(data)-266(distrib)1(utions;)-288(ho)27(w)28(ev)28(er)-266(they)]TJ 0 -11.955 Td [(are)-347(a)-347(feature)-348(of)-347(Domain)-347(Decomp)-28(osition)-347(Sc)28(h)28(w)27(arz)-347(preconditioners)-347(whic)28(h)-347(are)-348(the)]TJ 0 -11.955 Td [(sub)-56(j)1(e)-1(ct)-333(of)-333(related)-333(re)-1(searc)28(h)-333(w)28(ork)-334([)]TJ 1 0 0 rg 1 0 0 RG [(4)]TJ 0 g 0 G @@ -3466,12 +3732,12 @@ BT 1 0 0 rg 1 0 0 RG [-333(3)]TJ 0 g 0 G - [(].)]TJ 14.944 -11.978 Td [(W)83(e)-313(denote)-314(the)-313(se)-1(t)1(s)-314(of)-314(in)28(ternal,)-317(b)-28(oundary)-313(and)-314(halo)-313(p)-28(oin)28(ts)-314(for)-314(a)-313(giv)28(en)-314(sub)-28(do-)]TJ -14.944 -11.956 Td [(main)-338(b)28(y)]TJ/F14 9.9626 Tf 38.841 0 Td [(I)]TJ/F8 9.9626 Tf 6.16 0 Td [(,)]TJ/F14 9.9626 Tf 6.149 0 Td [(B)]TJ/F8 9.9626 Tf 10.216 0 Td [(and)]TJ/F14 9.9626 Tf 19.421 0 Td [(H)]TJ/F8 9.9626 Tf 8.51 0 Td [(.)-459(Eac)28(h)-338(s)-1(u)1(b)-28(domain)-338(is)-339(assigned)-338(to)-338(one)-338(pro)-28(cess;)-341(eac)28(h)-338(pro)-28(cess)]TJ -89.297 -11.955 Td [(usually)-280(o)28(wns)-280(one)-281(sub)-27(domain,)-291(although)-280(the)-280(user)-280(ma)28(y)-281(c)28(ho)-28(ose)-280(to)-280(assign)-280(more)-280(than)]TJ 0 -11.955 Td [(one)-294(sub)-28(domain)-294(to)-294(a)-294(pro)-28(cess.)-432(If)-294(eac)28(h)-294(pro)-28(cess)]TJ/F11 9.9626 Tf 192.296 0 Td [(i)]TJ/F8 9.9626 Tf 6.363 0 Td [(o)28(wns)-294(one)-295(sub)-27(domain,)-302(the)-294(n)27(um)28(b)-28(er)]TJ -198.659 -11.955 Td [(of)-296(ro)27(ws)-296(in)-297(the)-296(lo)-28(cal)-296(sparse)-297(matrix)-296(is)]TJ/F14 9.9626 Tf 156.215 0 Td [(jI)]TJ/F10 6.9738 Tf 8.193 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.316 1.494 Td [(j)]TJ/F8 9.9626 Tf 4.247 0 Td [(+)]TJ/F14 9.9626 Tf 9.228 0 Td [(jB)]TJ/F10 6.9738 Tf 9.311 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.494 Td [(j)]TJ/F8 9.9626 Tf 2.768 0 Td [(,)-304(and)-296(the)-297(n)28(um)28(b)-28(er)-296(of)-297(lo)-27(c)-1(al)-296(columns)]TJ -196.595 -11.955 Td [(\050i.e.)-515(those)-357(f)1(or)-357(whic)28(h)-357(there)-357(exists)-357(at)-357(least)-356(one)-357(non-zero)-357(en)28(try)-357(in)-357(the)-356(lo)-28(cal)-357(ro)28(ws\051)]TJ 0 -11.955 Td [(is)]TJ/F14 9.9626 Tf 10.018 0 Td [(jI)]TJ/F10 6.9738 Tf 8.192 -1.495 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.495 Td [(j)]TJ/F8 9.9626 Tf 4.981 0 Td [(+)]TJ/F14 9.9626 Tf 9.963 0 Td [(jB)]TJ/F10 6.9738 Tf 9.311 -1.495 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.495 Td [(j)]TJ/F8 9.9626 Tf 4.981 0 Td [(+)]TJ/F14 9.9626 Tf 9.962 0 Td [(jH)]TJ/F10 6.9738 Tf 11.182 -1.495 Td [(i)]TJ/F14 9.9626 Tf 3.316 1.495 Td [(j)]TJ/F8 9.9626 Tf 2.768 0 Td [(.)]TJ + [(].)]TJ 14.944 -11.955 Td [(W)83(e)-313(denote)-314(the)-313(se)-1(t)1(s)-314(of)-314(in)28(ternal,)-317(b)-28(oundary)-313(and)-314(halo)-313(p)-28(oin)28(ts)-314(for)-314(a)-313(giv)28(en)-314(sub)-28(do-)]TJ -14.944 -11.956 Td [(main)-338(b)28(y)]TJ/F14 9.9626 Tf 38.841 0 Td [(I)]TJ/F8 9.9626 Tf 6.16 0 Td [(,)]TJ/F14 9.9626 Tf 6.149 0 Td [(B)]TJ/F8 9.9626 Tf 10.216 0 Td [(and)]TJ/F14 9.9626 Tf 19.421 0 Td [(H)]TJ/F8 9.9626 Tf 8.51 0 Td [(.)-459(Eac)28(h)-338(s)-1(u)1(b)-28(domain)-338(is)-339(assigned)-338(to)-338(one)-338(pro)-28(cess;)-341(eac)28(h)-338(pro)-28(cess)]TJ -89.297 -11.955 Td [(usually)-280(o)28(wns)-280(one)-281(sub)-27(domain,)-291(although)-280(the)-280(user)-280(ma)28(y)-281(c)28(ho)-28(ose)-280(to)-280(assign)-280(more)-280(than)]TJ 0 -11.955 Td [(one)-294(sub)-28(domain)-294(to)-294(a)-294(pro)-28(cess.)-432(If)-294(eac)28(h)-294(pro)-28(cess)]TJ/F11 9.9626 Tf 192.296 0 Td [(i)]TJ/F8 9.9626 Tf 6.363 0 Td [(o)28(wns)-294(one)-295(sub)-27(domain,)-302(the)-294(n)27(um)28(b)-28(er)]TJ -198.659 -11.955 Td [(of)-296(ro)27(ws)-296(in)-297(the)-296(lo)-28(cal)-296(sparse)-297(matrix)-296(is)]TJ/F14 9.9626 Tf 156.215 0 Td [(jI)]TJ/F10 6.9738 Tf 8.193 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.316 1.494 Td [(j)]TJ/F8 9.9626 Tf 4.247 0 Td [(+)]TJ/F14 9.9626 Tf 9.228 0 Td [(jB)]TJ/F10 6.9738 Tf 9.311 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.494 Td [(j)]TJ/F8 9.9626 Tf 2.768 0 Td [(,)-304(and)-296(the)-297(n)28(um)28(b)-28(er)-296(of)-297(lo)-27(c)-1(al)-296(columns)]TJ -196.595 -11.955 Td [(\050i.e.)-515(those)-357(f)1(or)-357(whic)28(h)-357(there)-357(exists)-357(at)-357(least)-356(one)-357(non-zero)-357(en)28(try)-357(in)-357(the)-356(lo)-28(cal)-357(ro)28(ws\051)]TJ 0 -11.955 Td [(is)]TJ/F14 9.9626 Tf 10.018 0 Td [(jI)]TJ/F10 6.9738 Tf 8.192 -1.495 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.495 Td [(j)]TJ/F8 9.9626 Tf 4.981 0 Td [(+)]TJ/F14 9.9626 Tf 9.963 0 Td [(jB)]TJ/F10 6.9738 Tf 9.311 -1.495 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.495 Td [(j)]TJ/F8 9.9626 Tf 4.981 0 Td [(+)]TJ/F14 9.9626 Tf 9.962 0 Td [(jH)]TJ/F10 6.9738 Tf 11.181 -1.495 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.495 Td [(j)]TJ/F8 9.9626 Tf 2.768 0 Td [(.)]TJ 0 g 0 G 0 g 0 G 0 g 0 G ET -1 0 0 1 222.462 584.018 cm +1 0 0 1 222.462 540.998 cm q 0 -1 1 0 0 0 cm q @@ -3483,77 +3749,69 @@ Q Q Q 0 g 0 G -1 0 0 1 -222.462 -584.018 cm +1 0 0 1 -222.462 -540.998 cm BT -/F8 9.9626 Tf 259.948 378.08 Td [(Figure)-333(2:)-445(P)28(oin)28(t)-333(class\014cation.)]TJ +/F8 9.9626 Tf 259.948 335.06 Td [(Figure)-333(2:)-445(P)28(oin)28(t)-333(class\014cation.)]TJ 0 g 0 G 0 g 0 G - -94.299 -23.402 Td [(This)-267(classi\014cation)-266(of)-267(mesh)-267(p)-27(oin)27(ts)-266(guides)-267(the)-267(naming)-266(sc)27(heme)-266(that)-267(w)28(e)-267(adopted)]TJ -14.944 -11.955 Td [(in)-474(the)-474(library)-474(in)28(ternals)-474(and)-474(in)-474(the)-474(data)-474(structures.)-866(W)83(e)-474(explicitly)-474(note)-474(that)]TJ 0 -11.955 Td [(\134Halo")-333(p)-28(oin)28(ts)-334(are)-333(also)-333(often)-334(called)-333(\134ghost")-333(p)-28(oin)28(ts)-334(in)-333(the)-333(literature.)]TJ/F16 11.9552 Tf 0 -28.009 Td [(2.2)-1125(Library)-375(con)31(ten)31(ts)]TJ/F8 9.9626 Tf 0 -18.432 Td [(The)-333(PSBLAS)-334(libr)1(a)-1(r)1(y)-334(consists)-333(of)-334(v)56(arious)-333(classes)-334(of)-333(subroutines:)]TJ + -94.299 -23.108 Td [(This)-267(classi\014cation)-266(of)-267(mesh)-267(p)-27(oin)27(ts)-266(guides)-267(the)-267(naming)-266(sc)27(heme)-266(that)-267(w)28(e)-267(adopted)]TJ -14.944 -11.955 Td [(in)-474(the)-474(library)-474(in)28(ternals)-474(and)-474(in)-474(the)-474(data)-474(structures.)-866(W)83(e)-474(explicitly)-474(note)-474(that)]TJ 0 -11.955 Td [(\134Halo")-333(p)-28(oin)28(ts)-334(are)-333(also)-333(often)-334(called)-333(\134ghost")-333(p)-28(oin)28(ts)-334(in)-333(the)-333(literature.)]TJ/F16 11.9552 Tf 0 -27.782 Td [(2.2)-1125(Library)-375(con)31(ten)31(ts)]TJ/F8 9.9626 Tf 0 -18.389 Td [(The)-333(PSBLAS)-334(libr)1(a)-1(r)1(y)-334(consists)-333(of)-334(v)56(arious)-333(classes)-334(of)-333(subroutines:)]TJ 0 g 0 G -/F27 9.9626 Tf 0 -19.994 Td [(Computational)-383(routines)]TJ +/F27 9.9626 Tf 0 -19.427 Td [(Computational)-383(routines)]TJ 0 g 0 G /F8 9.9626 Tf 124.174 0 Td [(comprising:)]TJ 0 g 0 G -/F14 9.9626 Tf -87.312 -20.016 Td [(\017)]TJ +/F14 9.9626 Tf -87.312 -19.677 Td [(\017)]TJ 0 g 0 G /F8 9.9626 Tf 9.962 0 Td [(Sparse)-333(matrix)-334(b)28(y)-333(dense)-334(matrix)-333(pro)-28(du)1(c)-1(t;)]TJ 0 g 0 G -/F14 9.9626 Tf -9.962 -15.986 Td [(\017)]TJ +/F14 9.9626 Tf -9.962 -15.691 Td [(\017)]TJ 0 g 0 G /F8 9.9626 Tf 9.962 0 Td [(Sparse)-333(triangular)-334(systems)-333(solution)-333(for)-334(bl)1(o)-28(c)27(k)-333(diagonal)-333(matrices;)]TJ 0 g 0 G -/F14 9.9626 Tf -9.962 -15.985 Td [(\017)]TJ +/F14 9.9626 Tf -9.962 -15.691 Td [(\017)]TJ 0 g 0 G /F8 9.9626 Tf 9.962 0 Td [(V)83(ector)-333(and)-333(matrix)-334(norms;)]TJ 0 g 0 G -/F14 9.9626 Tf -9.962 -15.986 Td [(\017)]TJ +/F14 9.9626 Tf -9.962 -15.692 Td [(\017)]TJ 0 g 0 G /F8 9.9626 Tf 9.962 0 Td [(Dense)-333(matrix)-334(sums;)]TJ 0 g 0 G -/F14 9.9626 Tf -9.962 -15.986 Td [(\017)]TJ +/F14 9.9626 Tf -9.962 -15.691 Td [(\017)]TJ 0 g 0 G /F8 9.9626 Tf 9.962 0 Td [(Dot)-333(pro)-28(ducts.)]TJ 0 g 0 G -/F27 9.9626 Tf -46.824 -20.016 Td [(Comm)32(unication)-383(r)-1(ou)1(t)-1(ines)]TJ +/F27 9.9626 Tf -46.824 -19.676 Td [(Comm)32(unication)-383(r)-1(ou)1(t)-1(ines)]TJ 0 g 0 G /F8 9.9626 Tf 128.47 0 Td [(handling)-333(halo)-333(and)-334(o)28(v)28(erlap)-333(com)-1(m)28(unications;)]TJ 0 g 0 G -/F27 9.9626 Tf -128.47 -20.016 Td [(Data)-383(managem)-1(e)1(n)31(t)-383(and)-383(auxiliary)-384(routines)]TJ -0 g 0 G -/F8 9.9626 Tf 210.717 0 Td [(including:)]TJ -0 g 0 G -/F14 9.9626 Tf -173.855 -20.016 Td [(\017)]TJ -0 g 0 G -/F8 9.9626 Tf 9.962 0 Td [(P)28(arallel)-334(en)28(vironmen)28(t)-333(managemen)27(t)]TJ -0 g 0 G - 122.541 -29.888 Td [(4)]TJ + 40.895 -29.888 Td [(4)]TJ 0 g 0 G ET endstream endobj -627 0 obj << +677 0 obj << /Type /Page -/Contents 628 0 R -/Resources 626 0 R +/Contents 678 0 R +/Resources 676 0 R /MediaBox [0 0 595.276 841.89] -/Parent 580 0 R -/Annots [ 610 0 R 611 0 R ] +/Parent 630 0 R +/Annots [ 673 0 R 674 0 R ] >> endobj -625 0 obj << +675 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/points.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 631 0 R +/PTEX.InfoDict 681 0 R /BBox [0 0 274 308] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 632 0 R ->>/Font << /R8 633 0 R>> +/R7 682 0 R +>>/Font << /R8 683 0 R>> >> -/Length 634 0 R +/Length 684 0 R /Filter /FlateDecode >> stream @@ -3561,478 +3819,517 @@ x – 󣄠¹3ÊBü=®§«æ±bA‡HŒ}Ï©c·í²»?­é”ׄÿäïÍeùö]_?ü¾¤Ó©d êwßGüðaù´d"®òçæ²¾¾ä}ÍíëÕûe4­ß ,äýÔ×sÿ»º,_ýx÷Ç/w×·¯®~[¾»ZÞ.ø›Œ1¸ð™âuóâ¯ïÿ¼ûùúáoO*žþx/þÃõí½Î22Tø<ᜇd†&Âoî/×ïV˜âÿõèCê1V^õd¨æõãR ¬Û9ŸÎç¶^–ºµÓ¾ÍšÚýÝz¦zõ¯7‹!€S®ûj짔êJÚR¿–ðWZSöN•m˜´ ide«3çûfyÿõROÛú×|J_F¿~]~z2ò–}×òVÐÕämë¦Î€sQ<I<³¦uiüd¸r͵9.Ö¤¢ÆR’ÉÑãY~ОÐCÑÝ¥Ÿ}öçÙ^â<3LA ‰c‹YÒ¶®ôçY¯qž&mCÙØâÌû懣ç—Ñ#|H–_rƧšÇÒ³,wš0s>}yüÇ5ÒNóË p%U¤ –ðW@E’§$§•|¡pxõE`&ÆøåU ™¤ó«›%AÝIUÍ0Gš]ý‘&ûÖM’ î Jšx÷¬…T.ù)~¼C²8˜}~‚­ÛÍWÛ¢íÁvKÑö¶K,8ÛÍ—&†`[C*—ü¨ONÔÇs­ƒ ½m‚ê ò9؆Áu¶!×`{P9¦m‚êKI7oÛB*—ü¨O샹~ñ̳·Ç'­¡Á^ÝIaÏvRy!œzw'ó¤`Íx"0.Ѥb'…iÄù|ùÌs¼žP:-%X/[´^º“#Àa°há…dÞPÓY/)Z‡Ýqˆ&-VŠÖ½ON¬Çtnƒ®G±À¹ÍY–& é›Ë’וB¿Ìœ¤¡¹M…ÁnngäŽ%¤Ò#ØœÃÉÙÇ‚"d;’Àô)ùÃ(˜\X‹³Ž¥²£0}Z¡pø#`Ó†Sò‹%Hvt§Ð̧f£`ú`-Î+”ÐŽQ4ó9ƒ…Ç,x›O/,îf,z»âißn«ªÝìv«$½úæ-ÜŒå`?›“禩™|,ˆ7cïó™;Ìñº@!osõé]Š¦?ݲta0€yýÒ¥¤Zdy›«OïRÜ<%9­äƒ€[}拇ú6m8uõIPžþhǃf>m))…YÞæê“ Ò<%9­äƒ€[}ækçÿÜæ“WO’rõ= A} £ Ñ0'Ë 9‘S,irêÕ÷+\_ã­uâÝ¿›ÑÆE?æóé{¦ƒÙÇá'È‹ÎB#4_²$&†`[–’qq‘‘&/> Mõ5^_'†`[Bý˜OõºÖÁ–%©¡ ª/]07o[šqq ’&/M Íõ5^_'nÞ¶†4.ú1Ÿ6ØsýÜ¥%]Š!ƒCÞgVe@Ù–‹’…$)š5-ƒÃØ5}‡ä²?ÖLg+‡ |>{é>hO‘jøX5~,ê>–0àxÕ},1’š¬ác ”ø±ŠûX€5‹ûXb$3òø³ Ú…t¡í¡=Å>tpº8Õ‡’Ô$iÎ>´-ö¡Ç%ÀšTÔXJR#ÞgL¼í“-J/0®jãȶw.Þâªick£Z,”Ô¤š^”Ñk·ì«éUÝ ‹¯WjÇ‚µÛçƒ.ÁºUE³zÉgýãPˆ,é"›Ñe±ûÌ‹:t˜!*%~ Ö *«QÊÒ@emPMÓ1:¾Þ’àX¼÷(˜®4æ ¤Nƒ¾]þÎJ¦' endstream endobj -631 0 obj +681 0 obj << /Producer (ESP Ghostscript 815.03) /CreationDate (D:20070123225315) /ModDate (D:20070123225315) >> endobj -632 0 obj +682 0 obj << /Type /ExtGState /OPM 1 >> endobj -633 0 obj +683 0 obj << /BaseFont /Times-Roman /Type /Font /Subtype /Type1 >> endobj -634 0 obj +684 0 obj 1397 endobj -610 0 obj << +673 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] -/Rect [294.665 681.222 301.639 689.635] +/Rect [294.665 637.885 301.639 646.297] /Subtype /Link /A << /S /GoTo /D (cite.2007c) >> >> endobj -611 0 obj << +674 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] -/Rect [305.735 681.222 312.709 689.635] +/Rect [305.735 637.885 312.709 646.297] /Subtype /Link /A << /S /GoTo /D (cite.2007d) >> >> endobj -629 0 obj << -/D [627 0 R /XYZ 150.705 740.998 null] +679 0 obj << +/D [677 0 R /XYZ 150.705 740.998 null] >> endobj -630 0 obj << -/D [627 0 R /XYZ 303.562 390.036 null] +680 0 obj << +/D [677 0 R /XYZ 303.562 347.015 null] >> endobj 22 0 obj << -/D [627 0 R /XYZ 150.705 314.792 null] +/D [677 0 R /XYZ 150.705 272.271 null] >> endobj -626 0 obj << -/Font << /F8 438 0 R /F14 619 0 R /F11 599 0 R /F10 618 0 R /F16 435 0 R /F27 437 0 R >> -/XObject << /Im2 625 0 R >> +676 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F14 667 0 R /F11 649 0 R /F10 666 0 R /F16 475 0 R >> +/XObject << /Im2 675 0 R >> /ProcSet [ /PDF /Text ] >> endobj -641 0 obj << -/Length 6324 +691 0 obj << +/Length 5462 >> stream 0 g 0 G 0 g 0 G 0 g 0 G BT -/F14 9.9626 Tf 136.757 706.129 Td [(\017)]TJ +/F27 9.9626 Tf 99.895 706.129 Td [(Data)-383(m)-1(anagemen)32(t)-383(and)-383(auxiliary)-384(routines)]TJ +0 g 0 G +/F8 9.9626 Tf 210.717 0 Td [(including:)]TJ +0 g 0 G +/F14 9.9626 Tf -173.855 -24.208 Td [(\017)]TJ +0 g 0 G +/F8 9.9626 Tf 9.963 0 Td [(P)28(arallel)-333(en)27(vironmen)28(t)-333(managemen)28(t)]TJ +0 g 0 G +/F14 9.9626 Tf -9.963 -18.081 Td [(\017)]TJ 0 g 0 G /F8 9.9626 Tf 9.963 0 Td [(Comm)28(unication)-334(d)1(e)-1(scriptor)1(s)-334(allo)-28(cation;)]TJ 0 g 0 G -/F14 9.9626 Tf -9.963 -15.986 Td [(\017)]TJ +/F14 9.9626 Tf -9.963 -18.082 Td [(\017)]TJ 0 g 0 G /F8 9.9626 Tf 9.963 0 Td [(Dense)-333(and)-334(sparse)-333(matrix)-333(allo)-28(cation;)]TJ 0 g 0 G -/F14 9.9626 Tf -9.963 -15.985 Td [(\017)]TJ +/F14 9.9626 Tf -9.963 -18.081 Td [(\017)]TJ 0 g 0 G /F8 9.9626 Tf 9.963 0 Td [(Dense)-333(and)-334(sparse)-333(matrix)-333(build)-334(an)1(d)-334(up)-27(date;)]TJ 0 g 0 G -/F14 9.9626 Tf -9.963 -15.986 Td [(\017)]TJ +/F14 9.9626 Tf -9.963 -18.082 Td [(\017)]TJ 0 g 0 G /F8 9.9626 Tf 9.963 0 Td [(Sparse)-333(matrix)-334(and)-333(data)-333(distribution)-333(prepro)-28(cessing.)]TJ 0 g 0 G -/F27 9.9626 Tf -46.825 -20.015 Td [(Preconditioner)-383(routi)-1(n)1(es)]TJ +/F27 9.9626 Tf -46.825 -24.207 Td [(Preconditioner)-383(routi)-1(n)1(es)]TJ 0 g 0 G 0 g 0 G - 0 -20.016 Td [(Iterativ)32(e)-384(metho)-32(ds)]TJ + 0 -24.208 Td [(Iterativ)32(e)-384(metho)-32(ds)]TJ 0 g 0 G -/F8 9.9626 Tf 94.307 0 Td [(a)-333(subset)-334(of)-333(Krylo)28(v)-334(sub)1(s)-1(p)1(ac)-1(e)-333(iterativ)28(e)-333(me)-1(th)1(o)-28(ds)]TJ -94.307 -19.993 Td [(The)-391(follo)27(wing)-391(naming)-391(sc)27(heme)-391(has)-392(b)-27(een)-392(adopted)-391(for)-391(all)-392(the)-391(sym)27(b)-27(ols)-392(in)28(ternally)]TJ 0 -11.956 Td [(de\014ned)-333(in)-334(the)-333(PSBLAS)-333(soft)28(w)27(are)-333(pac)28(k)55(age:)]TJ +/F8 9.9626 Tf 94.307 0 Td [(a)-333(subset)-334(of)-333(Krylo)28(v)-334(sub)1(s)-1(p)1(ac)-1(e)-333(iterativ)28(e)-333(me)-1(th)1(o)-28(ds)]TJ -94.307 -23.137 Td [(The)-391(follo)27(wing)-391(naming)-391(sc)27(heme)-391(has)-392(b)-27(een)-392(adopted)-391(for)-391(all)-392(the)-391(sym)27(b)-27(ols)-392(in)28(ternally)]TJ 0 -11.955 Td [(de\014ned)-333(in)-334(the)-333(PSBLAS)-333(soft)28(w)27(are)-333(pac)28(k)55(age:)]TJ 0 g 0 G -/F14 9.9626 Tf 14.944 -19.993 Td [(\017)]TJ +/F14 9.9626 Tf 14.944 -23.137 Td [(\017)]TJ 0 g 0 G -/F8 9.9626 Tf 9.963 0 Td [(all)-275(the)-275(sym)28(b)-28(ols)-275(\050i.e.)-425(subroutine)-275(names,)-286(data)-275(t)28(yp)-28(es...\051)-425(are)-275(pre\014xed)-275(b)28(y)]TJ/F30 9.9626 Tf 297.883 0 Td [(psb_)]TJ +/F8 9.9626 Tf 9.963 0 Td [(all)-333(sym)27(b)-27(ols)-334(\050i.e.)-444(subroutine)-333(names,)-334(data)-333(t)28(yp)-28(es...\051)-444(are)-334(pre\014xed)-333(b)28(y)]TJ/F30 9.9626 Tf 286.233 0 Td [(psb_)]TJ 0 g 0 G -/F14 9.9626 Tf -307.846 -20.016 Td [(\017)]TJ +/F14 9.9626 Tf -296.196 -24.208 Td [(\017)]TJ 0 g 0 G -/F8 9.9626 Tf 9.963 0 Td [(all)-333(the)-334(data)-333(t)28(yp)-28(e)-333(names)-334(are)-333(su\016xed)-333(b)27(y)]TJ/F30 9.9626 Tf 173.378 0 Td [(_type)]TJ +/F8 9.9626 Tf 9.963 0 Td [(all)-333(data)-334(t)28(yp)-28(e)-333(names)-333(are)-334(su\016xed)-333(b)28(y)]TJ/F30 9.9626 Tf 156.22 0 Td [(_type)]TJ 0 g 0 G -/F14 9.9626 Tf -183.341 -20.015 Td [(\017)]TJ +/F14 9.9626 Tf -166.183 -24.208 Td [(\017)]TJ 0 g 0 G -/F8 9.9626 Tf 9.963 0 Td [(all)-333(the)-334(constan)28(t)-333(v)55(alues)-333(are)-333(su\016xed)-334(b)28(y)]TJ/F30 9.9626 Tf 167.622 0 Td [(_)]TJ +/F8 9.9626 Tf 9.963 0 Td [(all)-333(constan)27(ts)-333(are)-333(su\016xed)-334(b)28(y)]TJ/F30 9.9626 Tf 124.727 0 Td [(_)]TJ 0 g 0 G -/F14 9.9626 Tf -177.585 -20.016 Td [(\017)]TJ +/F14 9.9626 Tf -134.69 -24.208 Td [(\017)]TJ 0 g 0 G -/F8 9.9626 Tf 9.963 0 Td [(all)-473(the)-474(subroutine)-473(names)-474(follo)28(w)-474(th)1(e)-474(rule)]TJ/F30 9.9626 Tf 186.5 0 Td [(psb_xxname)]TJ/F8 9.9626 Tf 57.021 0 Td [(where)]TJ/F30 9.9626 Tf 30.205 0 Td [(xx)]TJ/F8 9.9626 Tf 15.178 0 Td [(can)-473(b)-28(e)]TJ -288.904 -11.955 Td [(either:)]TJ +/F8 9.9626 Tf 9.963 0 Td [(all)-390(top-lev)28(e)-1(l)-390(subroutine)-390(names)-390(follo)28(w)-391(the)-390(rule)]TJ/F30 9.9626 Tf 203.944 0 Td [(psb_xxname)]TJ/F8 9.9626 Tf 56.192 0 Td [(where)]TJ/F30 9.9626 Tf 29.376 0 Td [(xx)]TJ/F8 9.9626 Tf 14.348 0 Td [(can)]TJ -303.86 -11.955 Td [(b)-28(e)-333(either:)]TJ 0 g 0 G -/F27 9.9626 Tf 11.208 -20.016 Td [({)]TJ +/F27 9.9626 Tf 11.208 -24.208 Td [({)]TJ 0 g 0 G -/F30 9.9626 Tf 10.71 0 Td [(ge)]TJ/F8 9.9626 Tf 10.46 0 Td [(:)-444(the)-334(routine)-333(is)-333(related)-334(to)-333(dense)-333(data,)]TJ +/F30 9.9626 Tf 10.71 0 Td [(ge)]TJ/F8 9.9626 Tf 10.461 0 Td [(:)-444(the)-334(routine)-333(is)-333(related)-334(to)-333(dense)-333(data,)]TJ 0 g 0 G -/F27 9.9626 Tf -21.17 -15.986 Td [({)]TJ +/F27 9.9626 Tf -21.171 -18.081 Td [({)]TJ 0 g 0 G -/F30 9.9626 Tf 10.71 0 Td [(sp)]TJ/F8 9.9626 Tf 10.46 0 Td [(:)-444(the)-334(routine)-333(is)-333(related)-334(to)-333(sparse)-333(data,)]TJ +/F30 9.9626 Tf 10.71 0 Td [(sp)]TJ/F8 9.9626 Tf 10.461 0 Td [(:)-444(the)-334(routine)-333(is)-333(related)-334(to)-333(sparse)-333(data,)]TJ 0 g 0 G -/F27 9.9626 Tf -21.17 -15.985 Td [({)]TJ +/F27 9.9626 Tf -21.171 -18.081 Td [({)]TJ 0 g 0 G -/F30 9.9626 Tf 10.71 0 Td [(cd)]TJ/F8 9.9626 Tf 10.46 0 Td [(:)-444(the)-334(routine)-333(is)-333(related)-334(to)-333(comm)28(unication)-334(descriptor)-333(\050see)]TJ +/F30 9.9626 Tf 10.71 0 Td [(cd)]TJ/F8 9.9626 Tf 10.461 0 Td [(:)-444(the)-334(routine)-333(is)-333(related)-334(to)-333(comm)28(unication)-334(d)1(e)-1(scriptor)-333(\050see)]TJ 0 0 1 rg 0 0 1 RG [-333(3)]TJ 0 g 0 G - [(\051.)]TJ -32.378 -20.016 Td [(F)83(or)-275(example)-276(the)]TJ/F30 9.9626 Tf 72.33 0 Td [(psb_geins)]TJ/F8 9.9626 Tf 47.073 0 Td [(,)]TJ/F30 9.9626 Tf 5.628 0 Td [(psb_spins)]TJ/F8 9.9626 Tf 49.818 0 Td [(and)]TJ/F30 9.9626 Tf 18.797 0 Td [(psb_cdins)]TJ/F8 9.9626 Tf 49.818 0 Td [(p)-28(erform)-275(the)-276(same)]TJ -243.464 -11.955 Td [(action)-343(\050see)]TJ + [(\051.)]TJ -32.379 -24.208 Td [(F)83(or)-275(example)-276(the)]TJ/F30 9.9626 Tf 72.33 0 Td [(psb_geins)]TJ/F8 9.9626 Tf 47.073 0 Td [(,)]TJ/F30 9.9626 Tf 5.628 0 Td [(psb_spins)]TJ/F8 9.9626 Tf 49.818 0 Td [(and)]TJ/F30 9.9626 Tf 18.797 0 Td [(psb_cdins)]TJ/F8 9.9626 Tf 49.818 0 Td [(p)-28(erform)-275(the)-276(same)]TJ -243.464 -11.955 Td [(action)-343(\050see)]TJ 0 0 1 rg 0 0 1 RG [-343(6)]TJ 0 g 0 G - [(\051)-343(on)-342(dense)-343(matrices,)-345(s)-1(p)1(arse)-343(matrices)-343(and)-343(comm)28(unication)-343(de-)]TJ 0 -11.955 Td [(scriptors)-357(resp)-28(ectiv)28(ely)83(.)-514(In)27(terface)-356(o)27(v)28(erloading)-357(allo)28(ws)-357(the)-357(u)1(s)-1(age)-356(of)-357(the)-357(same)]TJ 0 -11.956 Td [(subroutine)-333(in)28(terfaces)-334(for)-333(b)-28(oth)-333(real)-333(and)-334(complex)-333(data.)]TJ -24.907 -19.993 Td [(In)-320(the)-320(desc)-1(r)1(iption)-321(of)-320(the)-320(subroutines,)-323(argumen)28(ts)-320(or)-320(argumen)27(t)-320(en)28(tries)-320(are)-320(clas)-1(si-)]TJ 0 -11.955 Td [(\014ed)-333(as:)]TJ + [(\051)-343(on)-342(dense)-343(matrices,)-345(s)-1(p)1(ars)-1(e)-342(matrices)-343(and)-343(comm)28(unication)-343(de-)]TJ 0 -11.956 Td [(scriptors)-357(resp)-28(ectiv)28(ely)83(.)-514(In)27(terface)-356(o)27(v)28(erloading)-357(allo)28(ws)-357(the)-357(u)1(s)-1(age)-356(of)-357(the)-357(same)]TJ 0 -11.955 Td [(subroutine)-333(names)-334(for)-333(b)-28(oth)-333(real)-333(and)-334(complex)-333(data.)]TJ -24.907 -23.137 Td [(In)-320(the)-320(desc)-1(r)1(iption)-321(of)-320(the)-320(subroutines,)-323(argumen)28(ts)-320(or)-320(argumen)27(t)-320(en)28(tries)-320(are)-320(clas)-1(si-)]TJ 0 -11.955 Td [(\014ed)-333(as:)]TJ 0 g 0 G -/F27 9.9626 Tf 0 -19.993 Td [(global)]TJ +/F27 9.9626 Tf 0 -23.137 Td [(global)]TJ 0 g 0 G -/F8 9.9626 Tf 34.738 0 Td [(F)83(or)-228(input)-228(argumen)28(ts,)-250(th)1(e)-229(v)56(alue)-229(m)28(ust)-228(b)-28(e)-228(the)-228(same)-229(on)-228(all)-228(pro)-28(cesses)-229(par)1(tic)-1(i)1(-)]TJ -9.831 -11.955 Td [(pating)-252(in)-253(the)-253(subroutin)1(e)-253(call;)-280(for)-252(output)-253(argumen)28(ts)-252(the)-253(v)56(alue)-253(is)-253(guaran)28(teed)]TJ 0 -11.955 Td [(to)-333(b)-28(e)-333(the)-334(same.)]TJ +/F8 9.9626 Tf 34.738 0 Td [(F)83(or)-228(input)-228(argumen)28(ts,)-250(the)-228(v)56(alue)-229(m)28(ust)-228(b)-28(e)-228(the)-228(same)-229(on)-228(all)-228(pro)-28(cesses)-229(part)1(ic)-1(i)1(-)]TJ -9.831 -11.955 Td [(pating)-253(i)1(n)-253(the)-253(subroutin)1(e)-253(call;)-280(for)-252(output)-253(argumen)28(ts)-252(the)-253(v)56(alue)-253(is)-253(guaran)28(teed)]TJ 0 -11.955 Td [(to)-333(b)-28(e)-333(the)-334(same.)]TJ 0 g 0 G -/F27 9.9626 Tf -24.907 -20.016 Td [(lo)-32(cal)]TJ +/F27 9.9626 Tf -24.907 -24.208 Td [(lo)-32(cal)]TJ 0 g 0 G -/F8 9.9626 Tf 28.055 0 Td [(Eac)28(h)-333(pro)-28(cess)-334(has)-333(its)-333(o)27(wn)-333(v)56(alue\050s\051)-334(indep)-27(enden)27(tly)84(.)]TJ -28.055 -19.993 Td [(T)83(o)-333(\014nish)-333(our)-334(general)-333(description,)-333(w)28(e)-334(de\014ne)-333(a)-333(v)27(ersion)-333(string)-333(with)-334(th)1(e)-334(constan)28(t)]TJ/F30 9.9626 Tf 122.168 -21.963 Td [(psb_version_string_)]TJ/F8 9.9626 Tf -122.168 -21.964 Td [(whose)-333(curren)27(t)-333(v)56(alue)-334(is)]TJ/F30 9.9626 Tf 99.793 0 Td [(3.0.0)]TJ/F16 11.9552 Tf -99.793 -28.008 Td [(2.3)-1125(Application)-375(structure)]TJ/F8 9.9626 Tf 0 -18.432 Td [(The)-274(main)-275(underlyi)1(ng)-275(principle)-274(of)-274(the)-275(P)1(SBLAS)-275(library)-274(is)-274(that)-274(the)-275(library)-274(ob)-55(jects)]TJ 0 -11.955 Td [(are)-311(created)-311(and)-311(exist)-312(with)-311(reference)-311(to)-311(a)-311(discretized)-311(space)-311(to)-311(whic)27(h)-311(there)-311(corre-)]TJ 0 -11.955 Td [(sp)-28(onds)-339(an)-340(index)-339(space)-340(and)-340(a)-339(matrix)-340(sparsit)28(y)-339(pattern.)-463(As)-340(an)-340(example,)-341(consider)]TJ 0 -11.955 Td [(a)-355(cell-cen)27(tered)-355(\014nite-v)28(olume)-355(discretization)-356(of)-355(the)-355(Na)28(vier-Stok)28(es)-356(equations)-355(on)-355(a)]TJ 0 -11.955 Td [(sim)28(ulation)-371(domain;)-390(the)-371(index)-371(space)-371(1)]TJ/F11 9.9626 Tf 166.004 0 Td [(:)-167(:)-166(:)-167(n)]TJ/F8 9.9626 Tf 22.959 0 Td [(is)-371(isomorphic)-371(to)-371(the)-371(set)-371(of)-371(cell)-371(cen-)]TJ -188.963 -11.955 Td [(ters,)-388(whereas)-378(the)-377(pattern)-377(of)-377(the)-378(asso)-28(ciated)-377(linear)-377(system)-378(matrix)-377(is)-377(isomorphic)]TJ +/F8 9.9626 Tf 28.055 0 Td [(Eac)28(h)-334(p)1(ro)-28(cess)-334(has)-333(its)-333(o)27(wn)-333(v)56(alue\050s\051)-334(indep)-27(enden)27(tly)84(.)]TJ -28.055 -23.137 Td [(T)83(o)-333(\014nish)-333(our)-334(general)-333(description,)-333(w)28(e)-334(de\014ne)-333(a)-333(v)27(ersion)-333(string)-333(with)-334(th)1(e)-334(constan)28(t)]TJ/F30 9.9626 Tf 122.168 -24.059 Td [(psb_version_string_)]TJ/F8 9.9626 Tf -122.168 -24.059 Td [(whose)-333(curren)27(t)-333(v)56(alue)-334(is)]TJ/F30 9.9626 Tf 99.793 0 Td [(3.0.0)]TJ 0 g 0 G - 169.365 -29.888 Td [(5)]TJ +/F8 9.9626 Tf 69.572 -29.888 Td [(5)]TJ 0 g 0 G ET endstream endobj -640 0 obj << +690 0 obj << /Type /Page -/Contents 641 0 R -/Resources 639 0 R +/Contents 691 0 R +/Resources 689 0 R /MediaBox [0 0 595.276 841.89] -/Parent 580 0 R -/Annots [ 637 0 R 638 0 R ] +/Parent 630 0 R +/Annots [ 687 0 R 688 0 R ] >> endobj -637 0 obj << +687 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [406.358 438.723 413.331 450.678] +/Rect [406.358 354.515 413.331 366.47] /Subtype /Link /A << /S /GoTo /D (section.3) >> >> endobj -638 0 obj << +688 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [173.863 406.752 180.837 418.707] +/Rect [173.863 318.352 180.837 330.307] /Subtype /Link /A << /S /GoTo /D (section.6) >> >> endobj -642 0 obj << -/D [640 0 R /XYZ 99.895 740.998 null] ->> endobj -26 0 obj << -/D [640 0 R /XYZ 99.895 212.503 null] +692 0 obj << +/D [690 0 R /XYZ 99.895 740.998 null] >> endobj -639 0 obj << -/Font << /F14 619 0 R /F8 438 0 R /F27 437 0 R /F30 616 0 R /F16 435 0 R /F11 599 0 R >> +689 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F14 667 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -645 0 obj << -/Length 8533 +695 0 obj << +/Length 8657 >> stream 0 g 0 G 0 g 0 G BT -/F8 9.9626 Tf 150.705 706.129 Td [(to)-278(t)1(he)-278(adjacency)-278(grap)1(h)-278(imp)-28(osed)-277(on)-278(the)-277(discretization)-278(mesh)-277(b)27(y)-277(the)-278(discretization)]TJ 0 -11.955 Td [(stencil.)]TJ 14.944 -12.048 Td [(Th)28(us)-409(the)-408(\014rst)-408(order)-409(of)-408(business)-408(is)-409(to)-408(establish)-409(an)-408(index)-408(space,)-427(and)-409(this)-408(is)]TJ -14.944 -11.955 Td [(done)-371(with)-371(a)-371(call)-371(to)]TJ/F30 9.9626 Tf 87.109 0 Td [(psb_cdall)]TJ/F8 9.9626 Tf 50.768 0 Td [(in)-371(whic)28(h)-371(w)28(e)-371(sp)-28(ecify)-371(the)-371(size)-371(of)-371(the)-371(index)-371(space)]TJ/F11 9.9626 Tf -137.877 -11.955 Td [(n)]TJ/F8 9.9626 Tf 9.142 0 Td [(and)-317(the)-318(allo)-28(cation)-317(of)-317(the)-318(elemen)28(ts)-318(of)-317(the)-317(index)-318(space)-317(to)-318(the)-317(v)55(arious)-317(pro)-28(cesses)]TJ -9.142 -11.956 Td [(making)-333(up)-334(th)1(e)-334(MPI)-333(\050virtual\051)-333(parallel)-334(mac)28(hine.)]TJ 14.944 -12.047 Td [(The)-308(index)-309(space)-308(is)-309(parti)1(tioned)-309(among)-308(pro)-28(cesses,)-314(an)1(d)-309(this)-308(creates)-309(a)-308(mapping)]TJ -14.944 -11.956 Td [(from)-249(the)-249(\134global")-249(n)28(um)28(b)-28(ering)-249(1)]TJ/F11 9.9626 Tf 132.852 0 Td [(:)-167(:)-166(:)-167(n)]TJ/F8 9.9626 Tf 21.744 0 Td [(to)-249(a)-249(n)28(um)28(b)-28(ering)-249(\134lo)-28(cal")-249(to)-249(eac)28(h)-249(pro)-28(cess;)-277(eac)27(h)]TJ -154.596 -11.955 Td [(pro)-28(cess)]TJ/F11 9.9626 Tf 33.771 0 Td [(i)]TJ/F8 9.9626 Tf 5.794 0 Td [(will)-237(o)28(wn)-237(a)-237(certain)-237(subset)-237(1)]TJ/F11 9.9626 Tf 113.508 0 Td [(:)-167(:)-166(:)-167(n)]TJ/F8 9.9626 Tf 19.264 -1.494 Td [(ro)28(w)]TJ/F9 4.9813 Tf 15.801 -0.996 Td [(i)]TJ/F8 9.9626 Tf 3.655 2.49 Td [(,)-256(eac)27(h)-237(elemen)28(t)-237(of)-237(whic)28(h)-237(corresp)-28(onds)]TJ -191.793 -11.955 Td [(to)-390(a)-389(certain)-390(elemen)28(t)-390(of)-389(1)]TJ/F11 9.9626 Tf 111.313 0 Td [(:)-167(:)-166(:)-167(n)]TJ/F8 9.9626 Tf 19.264 0 Td [(.)-613(The)-390(user)-389(do)-28(es)-390(not)-389(s)-1(et)-389(explicitly)-390(this)-389(mapping;)]TJ -130.577 -11.955 Td [(when)-392(the)-393(appl)1(ic)-1(ati)1(on)-393(needs)-392(to)-392(indicate)-393(to)-392(whic)28(h)-392(e)-1(lemen)28(t)-392(of)-392(the)-393(index)-392(space)-392(a)]TJ 0 -11.955 Td [(certain)-273(item)-273(is)-273(related,)-285(suc)28(h)-273(as)-273(the)-273(ro)28(w)-273(and)-273(column)-273(index)-273(of)-273(a)-273(matrix)-273(co)-27(e\016c)-1(ien)28(t,)]TJ 0 -11.956 Td [(it)-449(do)-27(es)-449(so)-449(in)-448(the)-449(\134global")-449(n)28(um)28(b)-28(ering,)-477(and)-449(the)-448(library)-449(will)-448(translate)-449(in)28(to)-449(the)]TJ 0 -11.955 Td [(appropriate)-333(\134lo)-28(cal")-333(n)28(um)27(b)-27(ering.)]TJ 14.944 -12.048 Td [(F)83(or)-273(a)-274(giv)28(en)-274(index)-274(space)-273(1)]TJ/F11 9.9626 Tf 109.331 0 Td [(:)-167(:)-166(:)-167(n)]TJ/F8 9.9626 Tf 21.99 0 Td [(there)-274(are)-273(m)-1(an)28(y)-273(p)-28(ossible)-274(asso)-28(ciated)-274(top)-27(ologies,)]TJ -146.265 -11.955 Td [(i.e.)-418(man)28(y)-254(di\013eren)27(t)-254(discretization)-254(stencils;)-281(th)28(us)-254(the)-254(description)-254(of)-254(the)-254(index)-255(space)]TJ 0 -11.955 Td [(is)-355(not)-355(completed)-355(un)28(til)-356(th)1(e)-356(user)-355(has)-355(de\014ned)-355(a)-355(sparsit)28(y)-355(pattern,)-361(either)-355(explicitly)]TJ 0 -11.955 Td [(through)]TJ/F30 9.9626 Tf 36.93 0 Td [(psb_cdins)]TJ/F8 9.9626 Tf 49.661 0 Td [(or)-260(implicitly)-259(through)]TJ/F30 9.9626 Tf 92.222 0 Td [(psb_spins)]TJ/F8 9.9626 Tf 47.073 0 Td [(.)-420(The)-260(descriptor)-259(is)-260(\014nalized)]TJ -225.886 -11.955 Td [(with)-354(a)-355(call)-354(to)]TJ/F30 9.9626 Tf 62.274 0 Td [(psb_cdasb)]TJ/F8 9.9626 Tf 50.603 0 Td [(and)-354(a)-355(sparse)-354(matrix)-354(with)-355(a)-354(call)-354(to)]TJ/F30 9.9626 Tf 153.217 0 Td [(psb_spasb)]TJ/F8 9.9626 Tf 47.073 0 Td [(.)-508(Af)1(te)-1(r)]TJ/F30 9.9626 Tf -313.167 -11.955 Td [(psb_cdasb)]TJ/F8 9.9626 Tf 50.443 0 Td [(eac)28(h)-338(pro)-28(cess)]TJ/F11 9.9626 Tf 57.244 0 Td [(i)]TJ/F8 9.9626 Tf 6.803 0 Td [(will)-338(ha)28(v)27(e)-338(de\014ned)-338(a)-338(set)-339(of)-338(\134halo")-338(\050or)-338(\134ghost"\051)-338(indices)]TJ/F11 9.9626 Tf -114.49 -11.956 Td [(n)]TJ/F8 9.9626 Tf 5.98 -1.494 Td [(ro)28(w)]TJ/F9 4.9813 Tf 15.802 -0.996 Td [(i)]TJ/F8 9.9626 Tf 5.985 2.49 Td [(+)-234(1)]TJ/F11 9.9626 Tf 16.722 0 Td [(:)-167(:)-166(:)-167(n)]TJ/F8 9.9626 Tf 19.263 -3.487 Td [(col)]TJ/F9 4.9813 Tf 12.177 -0.996 Td [(i)]TJ/F8 9.9626 Tf 3.654 4.483 Td [(,)-355(denoting)-351(elemen)27(ts)-351(of)-351(th)1(e)-351(index)-351(space)-351(that)-351(are)]TJ/F17 9.9626 Tf 209.596 0 Td [(not)]TJ/F8 9.9626 Tf 18.445 0 Td [(assigned)]TJ -307.624 -11.955 Td [(to)-284(pro)-28(cess)]TJ/F11 9.9626 Tf 45.921 0 Td [(i)]TJ/F8 9.9626 Tf 3.432 0 Td [(;)-300(ho)28(w)27(ev)28(er)-284(the)-284(v)56(ariables)-284(asso)-28(ciated)-283(with)-284(them)-284(are)-284(needed)-284(to)-283(c)-1(omplete)]TJ -49.353 -11.955 Td [(computations)-410(asso)-27(ciated)-410(with)-409(the)-410(sparse)-409(m)-1(atri)1(x)]TJ/F11 9.9626 Tf 216.316 0 Td [(A)]TJ/F8 9.9626 Tf 7.472 0 Td [(,)-429(an)1(d)-410(th)28(us)-410(they)-409(ha)28(v)27(e)-409(to)-410(b)-27(e)]TJ -223.788 -11.955 Td [(fetc)28(hed)-464(from)-464(\050)1(ne)-1(i)1(gh)27(b)-27(ouring\051)-464(pro)-28(cesses.)-835(The)-464(descriptor)-464(of)-463(the)-464(index)-463(space)-464(is)]TJ 0 -11.955 Td [(built)-394(exactly)-394(for)-393(the)-394(purp)-28(ose)-394(of)-394(prop)-27(e)-1(r)1(ly)-394(sequencing)-394(the)-394(comm)28(unication)-394(steps)]TJ 0 -11.956 Td [(required)-333(to)-334(ac)28(hiev)28(e)-333(this)-334(ob)-55(jectiv)28(e)-1(.)]TJ 14.944 -12.047 Td [(A)-306(simple)-306(application)-305(structure)-306(will)-306(w)28(alk)-306(through)-306(the)-306(in)1(dex)-306(space)-306(allo)-28(cation,)]TJ -14.944 -11.956 Td [(matrix/v)28(ector)-334(creation)-333(and)-333(linear)-333(syste)-1(m)-333(solution)-333(as)-334(f)1(o)-1(l)1(lo)27(ws:)]TJ +/F16 11.9552 Tf 150.705 706.129 Td [(2.3)-1125(Application)-375(structure)]TJ/F8 9.9626 Tf 0 -18.787 Td [(The)-274(main)-275(und)1(e)-1(r)1(lying)-275(principle)-274(of)-274(the)-274(PSBLAS)-275(librar)1(y)-275(is)-274(that)-274(the)-275(library)-274(ob)-55(jects)]TJ 0 -11.955 Td [(are)-311(created)-311(and)-311(exist)-311(with)-312(r)1(e)-1(f)1(e)-1(rence)-311(to)-311(a)-311(discretized)-311(space)-311(to)-311(whic)27(h)-311(there)-311(corre-)]TJ 0 -11.955 Td [(sp)-28(onds)-339(an)-340(index)-339(space)-340(and)-339(a)-340(matrix)-340(sparsit)28(y)-339(pattern.)-463(As)-340(an)-340(example,)-341(consider)]TJ 0 -11.955 Td [(a)-355(cell-cen)27(tered)-355(\014nite-v)28(olume)-355(discretization)-356(of)-355(the)-355(Na)28(vier-Stok)28(es)-356(equations)-355(on)-355(a)]TJ 0 -11.955 Td [(sim)28(ulation)-371(domain;)-390(the)-371(index)-371(space)-371(1)]TJ/F11 9.9626 Tf 166.003 0 Td [(:)-167(:)-166(:)-167(n)]TJ/F8 9.9626 Tf 22.959 0 Td [(is)-371(isomorphic)-371(to)-371(the)-371(set)-371(of)-371(cell)-371(cen-)]TJ -188.962 -11.956 Td [(ters,)-388(whereas)-378(the)-377(pattern)-377(of)-377(the)-378(asso)-28(ciated)-377(linear)-377(system)-377(m)-1(atr)1(ix)-378(is)-377(isomorphic)]TJ 0 -11.955 Td [(to)-277(the)-278(adjacency)-278(grap)1(h)-278(imp)-28(osed)-277(on)-278(the)-277(discretization)-278(mesh)-277(b)27(y)-277(the)-278(discretization)]TJ 0 -11.955 Td [(stencil.)]TJ 14.944 -12.169 Td [(Th)28(us)-409(the)-408(\014rst)-408(order)-409(of)-408(business)-408(is)-409(to)-408(establish)-409(an)-408(index)-408(space,)-427(and)-409(this)-408(is)]TJ -14.944 -11.955 Td [(done)-371(with)-371(a)-371(call)-371(to)]TJ/F30 9.9626 Tf 87.109 0 Td [(psb_cdall)]TJ/F8 9.9626 Tf 50.768 0 Td [(in)-371(whic)28(h)-371(w)28(e)-371(sp)-28(ecify)-371(the)-371(size)-371(of)-371(the)-371(index)-371(space)]TJ/F11 9.9626 Tf -137.877 -11.955 Td [(n)]TJ/F8 9.9626 Tf 9.142 0 Td [(and)-317(the)-318(allo)-28(cation)-317(of)-317(the)-318(elemen)28(ts)-318(of)-317(the)-317(index)-318(space)-317(to)-318(the)-317(v)55(arious)-317(pro)-28(cesses)]TJ -9.142 -11.955 Td [(making)-333(up)-334(th)1(e)-334(MPI)-333(\050virtual\051)-333(parallel)-334(mac)28(hine.)]TJ 14.944 -12.169 Td [(The)-308(index)-309(space)-308(is)-309(parti)1(tioned)-309(among)-308(pro)-28(cesses,)-314(an)1(d)-309(this)-308(creates)-309(a)-308(mapping)]TJ -14.944 -11.955 Td [(from)-249(the)-249(\134global")-249(n)28(um)28(b)-28(ering)-249(1)]TJ/F11 9.9626 Tf 132.852 0 Td [(:)-167(:)-166(:)-167(n)]TJ/F8 9.9626 Tf 21.744 0 Td [(to)-249(a)-249(n)28(um)28(b)-28(ering)-249(\134lo)-28(cal")-249(to)-249(eac)28(h)-249(pro)-28(cess;)-277(eac)27(h)]TJ -154.596 -11.955 Td [(pro)-28(cess)]TJ/F11 9.9626 Tf 33.771 0 Td [(i)]TJ/F8 9.9626 Tf 5.794 0 Td [(will)-237(o)28(wn)-237(a)-237(certain)-237(subset)-237(1)]TJ/F11 9.9626 Tf 113.508 0 Td [(:)-167(:)-166(:)-167(n)]TJ/F8 9.9626 Tf 19.264 -1.495 Td [(ro)28(w)]TJ/F9 4.9813 Tf 15.801 -0.996 Td [(i)]TJ/F8 9.9626 Tf 3.655 2.491 Td [(,)-256(eac)27(h)-237(elemen)28(t)-237(of)-237(whic)28(h)-237(corresp)-28(onds)]TJ -191.793 -11.955 Td [(to)-390(a)-389(certain)-390(elemen)28(t)-390(of)-389(1)]TJ/F11 9.9626 Tf 111.313 0 Td [(:)-167(:)-166(:)-167(n)]TJ/F8 9.9626 Tf 19.264 0 Td [(.)-613(The)-390(user)-389(do)-28(es)-390(not)-389(s)-1(et)-389(explicitly)-390(this)-389(mapping;)]TJ -130.577 -11.956 Td [(when)-392(the)-393(appl)1(ic)-1(ati)1(on)-393(needs)-392(to)-392(indicate)-393(to)-392(whic)28(h)-392(e)-1(lemen)28(t)-392(of)-392(the)-393(index)-392(space)-392(a)]TJ 0 -11.955 Td [(certain)-273(item)-273(is)-273(related,)-285(suc)28(h)-273(as)-273(the)-273(ro)28(w)-273(and)-273(column)-273(index)-273(of)-273(a)-273(matrix)-273(co)-27(e\016c)-1(ien)28(t,)]TJ 0 -11.955 Td [(it)-449(do)-27(es)-449(so)-449(in)-448(the)-449(\134global")-449(n)28(um)28(b)-28(ering,)-477(and)-449(the)-448(library)-449(will)-448(translate)-449(in)28(to)-449(the)]TJ 0 -11.955 Td [(appropriate)-333(\134lo)-28(cal")-333(n)28(um)27(b)-27(ering.)]TJ 14.944 -12.169 Td [(F)83(or)-273(a)-274(giv)28(en)-274(index)-274(space)-273(1)]TJ/F11 9.9626 Tf 109.331 0 Td [(:)-167(:)-166(:)-167(n)]TJ/F8 9.9626 Tf 21.99 0 Td [(there)-274(are)-273(m)-1(an)28(y)-273(p)-28(ossible)-274(asso)-28(ciated)-274(top)-27(ologies,)]TJ -146.265 -11.955 Td [(i.e.)-418(man)28(y)-254(di\013eren)27(t)-254(discretization)-254(stencils;)-281(th)28(us)-254(the)-254(description)-254(of)-254(the)-254(index)-255(space)]TJ 0 -11.955 Td [(is)-355(not)-355(completed)-355(un)28(til)-356(th)1(e)-356(user)-355(has)-355(de\014ned)-355(a)-355(sparsit)28(y)-355(pattern,)-361(either)-355(explicitly)]TJ 0 -11.955 Td [(through)]TJ/F30 9.9626 Tf 36.93 0 Td [(psb_cdins)]TJ/F8 9.9626 Tf 49.66 0 Td [(or)-260(implicitly)-259(through)]TJ/F30 9.9626 Tf 92.223 0 Td [(psb_spins)]TJ/F8 9.9626 Tf 47.073 0 Td [(.)-420(The)-260(descriptor)-259(is)-260(\014nalized)]TJ -225.886 -11.955 Td [(with)-354(a)-355(call)-354(to)]TJ/F30 9.9626 Tf 62.274 0 Td [(psb_cdasb)]TJ/F8 9.9626 Tf 50.603 0 Td [(and)-354(a)-355(sparse)-354(matrix)-354(with)-355(a)-354(call)-354(to)]TJ/F30 9.9626 Tf 153.217 0 Td [(psb_spasb)]TJ/F8 9.9626 Tf 47.073 0 Td [(.)-507(After)]TJ/F30 9.9626 Tf -313.167 -11.956 Td [(psb_cdasb)]TJ/F8 9.9626 Tf 50.443 0 Td [(eac)28(h)-338(pro)-28(cess)]TJ/F11 9.9626 Tf 57.244 0 Td [(i)]TJ/F8 9.9626 Tf 6.802 0 Td [(will)-338(ha)28(v)27(e)-338(de\014ned)-338(a)-338(set)-339(of)-338(\134halo")-338(\050or)-338(\134ghost"\051)-339(i)1(ndices)]TJ/F11 9.9626 Tf -114.489 -11.955 Td [(n)]TJ/F8 9.9626 Tf 5.98 -1.494 Td [(ro)28(w)]TJ/F9 4.9813 Tf 15.802 -0.996 Td [(i)]TJ/F8 9.9626 Tf 5.985 2.49 Td [(+)-234(1)]TJ/F11 9.9626 Tf 16.722 0 Td [(:)-167(:)-166(:)-167(n)]TJ/F8 9.9626 Tf 19.263 -3.487 Td [(col)]TJ/F9 4.9813 Tf 12.176 -0.996 Td [(i)]TJ/F8 9.9626 Tf 3.655 4.483 Td [(,)-355(denoting)-351(elemen)27(ts)-351(of)-351(th)1(e)-351(index)-351(space)-351(that)-351(are)]TJ/F17 9.9626 Tf 209.596 0 Td [(not)]TJ/F8 9.9626 Tf 18.445 0 Td [(assigned)]TJ -307.624 -11.955 Td [(to)-284(pro)-28(cess)]TJ/F11 9.9626 Tf 45.92 0 Td [(i)]TJ/F8 9.9626 Tf 3.433 0 Td [(;)-300(ho)28(w)27(ev)28(er)-284(the)-284(v)56(ariables)-284(asso)-28(ciated)-283(with)-284(them)-284(are)-284(needed)-284(to)-283(c)-1(omplete)]TJ -49.353 -11.955 Td [(computations)-409(a)-1(sso)-27(ciated)-410(with)-409(the)-410(sparse)-409(m)-1(atr)1(ix)]TJ/F11 9.9626 Tf 216.316 0 Td [(A)]TJ/F8 9.9626 Tf 7.472 0 Td [(,)-429(an)1(d)-410(th)28(us)-410(they)-409(ha)28(v)27(e)-409(to)-410(b)-27(e)]TJ -223.788 -11.955 Td [(fetc)28(hed)-464(from)-464(\050)1(neigh)27(b)-27(ouring\051)-464(pro)-28(cesses.)-835(The)-464(descriptor)-464(of)-463(the)-464(index)-463(space)-464(is)]TJ 0 -11.955 Td [(built)-394(exactly)-394(for)-393(the)-394(purp)-28(ose)-394(of)-394(prop)-27(e)-1(r)1(ly)-394(sequencing)-394(the)-394(comm)28(unication)-394(steps)]TJ 0 -11.956 Td [(required)-333(to)-334(ac)28(hiev)28(e)-333(this)-334(ob)-55(jectiv)28(e)-1(.)]TJ 14.944 -12.168 Td [(A)-306(simple)-306(application)-305(structure)-306(will)-306(w)28(alk)-306(through)-306(the)-306(in)1(dex)-306(space)-306(allo)-28(cation,)]TJ -14.944 -11.955 Td [(matrix/v)28(ector)-334(creation)-333(and)-333(linear)-333(syste)-1(m)-333(solution)-333(as)-334(f)1(o)-1(l)1(lo)27(ws:)]TJ 0 g 0 G - 12.177 -20.203 Td [(1.)]TJ + 12.177 -20.566 Td [(1.)]TJ 0 g 0 G [-500(Initialize)-333(parallel)-334(en)28(vironmen)28(t)-333(with)]TJ/F30 9.9626 Tf 169.42 0 Td [(psb_init)]TJ 0 g 0 G -/F8 9.9626 Tf -169.42 -20.296 Td [(2.)]TJ +/F8 9.9626 Tf -169.42 -20.779 Td [(2.)]TJ 0 g 0 G [-500(Initialize)-333(index)-334(space)-333(with)]TJ/F30 9.9626 Tf 130.123 0 Td [(psb_cdall)]TJ 0 g 0 G -/F8 9.9626 Tf -130.123 -20.296 Td [(3.)]TJ +/F8 9.9626 Tf -130.123 -20.78 Td [(3.)]TJ 0 g 0 G [-500(Allo)-28(cate)-301(sparse)-302(matrix)-301(and)-302(dense)-302(v)28(ectors)-301(with)]TJ/F30 9.9626 Tf 215.329 0 Td [(psb_spall)]TJ/F8 9.9626 Tf 50.077 0 Td [(and)]TJ/F30 9.9626 Tf 19.055 0 Td [(psb_geall)]TJ 0 g 0 G -/F8 9.9626 Tf -284.461 -20.296 Td [(4.)]TJ +/F8 9.9626 Tf -284.461 -20.779 Td [(4.)]TJ 0 g 0 G [-500(Lo)-28(op)-411(o)28(v)28(er)-411(all)-411(lo)-28(cal)-411(ro)27(ws,)-430(generate)-411(matrix)-411(and)-411(v)27(ector)-411(en)28(tries,)-431(an)1(d)-412(in)1(s)-1(ert)]TJ 12.73 -11.955 Td [(them)-333(with)]TJ/F30 9.9626 Tf 48.153 0 Td [(psb_spins)]TJ/F8 9.9626 Tf 50.393 0 Td [(and)]TJ/F30 9.9626 Tf 19.372 0 Td [(psb_geins)]TJ 0 g 0 G -/F8 9.9626 Tf -130.648 -20.296 Td [(5.)]TJ +/F8 9.9626 Tf -130.648 -20.779 Td [(5.)]TJ 0 g 0 G [-500(Assem)28(ble)-334(the)-333(v)56(arious)-334(en)28(tities:)]TJ 0 g 0 G - 16.936 -20.296 Td [(\050a\051)]TJ + 16.936 -20.779 Td [(\050a\051)]TJ 0 g 0 G /F30 9.9626 Tf 17.711 0 Td [(psb_cdasb)]TJ 0 g 0 G -/F8 9.9626 Tf -18.264 -16.126 Td [(\050b\051)]TJ +/F8 9.9626 Tf -18.264 -16.368 Td [(\050b\051)]TJ 0 g 0 G /F30 9.9626 Tf 18.264 0 Td [(psb_spasb)]TJ 0 g 0 G -/F8 9.9626 Tf -17.157 -16.125 Td [(\050c\051)]TJ +/F8 9.9626 Tf -17.157 -16.367 Td [(\050c\051)]TJ 0 g 0 G /F30 9.9626 Tf 17.157 0 Td [(psb_geasb)]TJ 0 g 0 G -/F8 9.9626 Tf -34.647 -20.296 Td [(6.)]TJ -0 g 0 G - [-500(Cho)-28(ose)-286(the)-287(preconditioner)-287(to)-286(b)-28(e)-287(u)1(s)-1(ed)-286(with)]TJ/F30 9.9626 Tf 198.375 0 Td [(psb_precset)]TJ/F8 9.9626 Tf 60.389 0 Td [(and)-287(b)1(uild)-287(it)-287(with)]TJ/F30 9.9626 Tf -246.034 -11.955 Td [(psb_precbld)]TJ -0 g 0 G -/F8 9.9626 Tf -12.73 -20.296 Td [(7.)]TJ -0 g 0 G - [-500(Call)-333(the)-334(iterativ)28(e)-333(metho)-28(d)-333(of)-334(c)28(hoice,)-333(e.g.)]TJ/F30 9.9626 Tf 189.595 0 Td [(psb_bicgstab)]TJ/F8 9.9626 Tf -201.772 -20.204 Td [(This)-333(is)-334(the)-333(structure)-333(of)-334(the)-333(sample)-333(program)]TJ/F30 9.9626 Tf 194.327 0 Td [(test/pargen/ppde90.f90)]TJ/F8 9.9626 Tf 115.068 0 Td [(.)]TJ -294.451 -12.047 Td [(F)83(or)-291(a)-292(sim)28(ulation)-292(in)-291(whic)27(h)-291(the)-292(same)-292(discretization)-291(mesh)-292(is)-292(used)-291(o)27(v)28(er)-292(m)28(ultiple)]TJ -14.944 -11.956 Td [(time)-333(steps,)-334(the)-333(follo)28(wing)-334(structure)-333(ma)28(y)-333(b)-28(e)-334(more)-333(appropriate:)]TJ -0 g 0 G - 169.365 -29.888 Td [(6)]TJ +/F8 9.9626 Tf 122.541 -32.378 Td [(6)]TJ 0 g 0 G ET endstream endobj -644 0 obj << +694 0 obj << /Type /Page -/Contents 645 0 R -/Resources 643 0 R +/Contents 695 0 R +/Resources 693 0 R /MediaBox [0 0 595.276 841.89] -/Parent 580 0 R ->> endobj -646 0 obj << -/D [644 0 R /XYZ 150.705 740.998 null] +/Parent 630 0 R >> endobj -648 0 obj << -/D [644 0 R /XYZ 150.705 376.4 null] +696 0 obj << +/D [694 0 R /XYZ 150.705 740.998 null] >> endobj -649 0 obj << -/D [644 0 R /XYZ 150.705 356.381 null] +26 0 obj << +/D [694 0 R /XYZ 150.705 716.092 null] >> endobj -650 0 obj << -/D [644 0 R /XYZ 150.705 336.085 null] +698 0 obj << +/D [694 0 R /XYZ 150.705 285.279 null] >> endobj -651 0 obj << -/D [644 0 R /XYZ 150.705 315.789 null] +699 0 obj << +/D [694 0 R /XYZ 150.705 264.776 null] >> endobj -652 0 obj << -/D [644 0 R /XYZ 150.705 283.538 null] +700 0 obj << +/D [694 0 R /XYZ 150.705 243.997 null] >> endobj -653 0 obj << -/D [644 0 R /XYZ 150.705 263.371 null] +701 0 obj << +/D [694 0 R /XYZ 150.705 223.218 null] >> endobj -654 0 obj << -/D [644 0 R /XYZ 150.705 244.754 null] +702 0 obj << +/D [694 0 R /XYZ 150.705 190.483 null] >> endobj -655 0 obj << -/D [644 0 R /XYZ 150.705 228.629 null] +703 0 obj << +/D [694 0 R /XYZ 150.705 169.712 null] >> endobj -656 0 obj << -/D [644 0 R /XYZ 150.705 210.418 null] +704 0 obj << +/D [694 0 R /XYZ 150.705 150.854 null] >> endobj -657 0 obj << -/D [644 0 R /XYZ 150.705 178.444 null] +705 0 obj << +/D [694 0 R /XYZ 150.705 134.487 null] >> endobj -643 0 obj << -/Font << /F8 438 0 R /F30 616 0 R /F11 599 0 R /F9 647 0 R /F17 579 0 R >> +693 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F30 664 0 R /F9 697 0 R /F17 629 0 R >> /ProcSet [ /PDF /Text ] >> endobj -661 0 obj << -/Length 7629 +708 0 obj << +/Length 6893 >> stream 0 g 0 G 0 g 0 G 0 g 0 G BT -/F8 9.9626 Tf 112.072 706.129 Td [(1.)]TJ +/F8 9.9626 Tf 112.072 706.129 Td [(6.)]TJ +0 g 0 G + [-500(Cho)-28(ose)-286(the)-287(preconditioner)-287(to)-286(b)-28(e)-287(used)-286(with)]TJ/F30 9.9626 Tf 198.375 0 Td [(psb_precset)]TJ/F8 9.9626 Tf 60.389 0 Td [(and)-287(bu)1(ild)-287(it)-287(with)]TJ/F30 9.9626 Tf -246.034 -11.955 Td [(psb_precbld)]TJ +0 g 0 G +/F8 9.9626 Tf -12.73 -24.805 Td [(7.)]TJ +0 g 0 G + [-500(Call)-333(the)-334(iterativ)28(e)-333(metho)-28(d)-333(of)-334(c)28(hoice,)-333(e.g.)]TJ/F30 9.9626 Tf 189.595 0 Td [(psb_bicgstab)]TJ/F8 9.9626 Tf -201.772 -23.585 Td [(This)-333(is)-334(the)-333(structure)-333(of)-334(the)-333(sample)-333(program)]TJ/F30 9.9626 Tf 194.328 0 Td [(test/pargen/ppde.f90)]TJ/F8 9.9626 Tf 104.606 0 Td [(.)]TJ -283.99 -13.175 Td [(F)83(or)-291(a)-292(sim)28(ulation)-292(in)-291(whic)27(h)-291(the)-292(same)-292(discretization)-291(mes)-1(h)-291(is)-292(used)-291(o)27(v)28(er)-292(m)28(ultiple)]TJ -14.944 -11.955 Td [(time)-333(ste)-1(p)1(s)-1(,)-333(the)-333(follo)28(wing)-334(structure)-333(ma)28(y)-333(b)-28(e)-334(more)-333(appropriate:)]TJ +0 g 0 G + 12.177 -23.586 Td [(1.)]TJ 0 g 0 G [-500(Initialize)-333(parallel)-334(en)28(vironmen)28(t)-333(with)]TJ/F30 9.9626 Tf 169.421 0 Td [(psb_init)]TJ 0 g 0 G -/F8 9.9626 Tf -169.421 -20.056 Td [(2.)]TJ +/F8 9.9626 Tf -169.421 -24.804 Td [(2.)]TJ 0 g 0 G [-500(Initialize)-333(index)-334(space)-333(with)]TJ/F30 9.9626 Tf 130.123 0 Td [(psb_cdall)]TJ 0 g 0 G -/F8 9.9626 Tf -130.123 -20.056 Td [(3.)]TJ +/F8 9.9626 Tf -130.123 -24.805 Td [(3.)]TJ 0 g 0 G [-500(Lo)-28(op)-271(o)28(v)27(er)-271(the)-272(top)-27(ology)-272(of)-271(the)-272(discretization)-271(mesh)-272(and)-271(build)-271(the)-272(descriptor)]TJ 12.73 -11.956 Td [(with)]TJ/F30 9.9626 Tf 22.693 0 Td [(psb_cdins)]TJ 0 g 0 G -/F8 9.9626 Tf -35.423 -20.056 Td [(4.)]TJ +/F8 9.9626 Tf -35.423 -24.805 Td [(4.)]TJ 0 g 0 G [-500(Assem)28(ble)-334(the)-333(descriptor)-333(with)]TJ/F30 9.9626 Tf 143.019 0 Td [(psb_cdasb)]TJ 0 g 0 G -/F8 9.9626 Tf -143.019 -20.056 Td [(5.)]TJ +/F8 9.9626 Tf -143.019 -24.804 Td [(5.)]TJ 0 g 0 G [-500(Allo)-28(cate)-222(the)-222(sparse)-223(matrices)-222(and)-222(dense)-222(v)27(ectors)-222(with)]TJ/F30 9.9626 Tf 233.375 0 Td [(psb_spall)]TJ/F8 9.9626 Tf 49.287 0 Td [(and)]TJ/F30 9.9626 Tf 18.265 0 Td [(psb_geall)]TJ 0 g 0 G -/F8 9.9626 Tf -300.927 -20.056 Td [(6.)]TJ +/F8 9.9626 Tf -300.927 -24.805 Td [(6.)]TJ 0 g 0 G [-500(Lo)-28(op)-333(o)28(v)28(e)-1(r)-333(the)-333(time)-334(steps:)]TJ 0 g 0 G - 16.936 -20.056 Td [(\050a\051)]TJ + 16.936 -24.805 Td [(\050a\051)]TJ 0 g 0 G - [-500(If)-340(after)-339(\014rst)-340(time)-339(step,)-341(reinitialize)-340(the)-339(s)-1(p)1(a)-1(r)1(s)-1(e)-339(matrix)-340(with)]TJ/F30 9.9626 Tf 269.988 0 Td [(psb_sprn)]TJ/F8 9.9626 Tf 41.843 0 Td [(;)]TJ -294.119 -11.955 Td [(also)-333(zero)-334(out)-333(the)-333(dense)-334(v)28(ectors;)]TJ + [-500(If)-340(after)-339(\014rst)-340(time)-339(step,)-341(reinitialize)-340(the)-339(s)-1(p)1(a)-1(r)1(s)-1(e)-339(matrix)-340(with)]TJ/F30 9.9626 Tf 269.988 0 Td [(psb_sprn)]TJ/F8 9.9626 Tf 41.843 0 Td [(;)]TJ -294.119 -11.956 Td [(also)-333(zero)-334(out)-333(the)-333(dense)-334(v)28(ectors;)]TJ 0 g 0 G - -18.265 -16.006 Td [(\050b\051)]TJ + -18.265 -18.38 Td [(\050b\051)]TJ 0 g 0 G [-500(Lo)-28(op)-252(o)28(v)27(er)-252(the)-253(mesh,)-268(generate)-253(the)-253(co)-27(e\016cie)-1(n)28(ts)-252(and)-253(insert/up)-27(date)-253(them)]TJ 18.265 -11.955 Td [(with)]TJ/F30 9.9626 Tf 22.693 0 Td [(psb_spins)]TJ/F8 9.9626 Tf 50.394 0 Td [(and)]TJ/F30 9.9626 Tf 19.371 0 Td [(psb_geins)]TJ 0 g 0 G -/F8 9.9626 Tf -109.616 -16.006 Td [(\050c\051)]TJ +/F8 9.9626 Tf -109.616 -18.38 Td [(\050c\051)]TJ 0 g 0 G [-500(Assem)28(ble)-334(with)]TJ/F30 9.9626 Tf 83.686 0 Td [(psb_spasb)]TJ/F8 9.9626 Tf 50.394 0 Td [(and)]TJ/F30 9.9626 Tf 19.372 0 Td [(psb_geasb)]TJ 0 g 0 G -/F8 9.9626 Tf -154.559 -16.005 Td [(\050d\051)]TJ +/F8 9.9626 Tf -154.559 -18.38 Td [(\050d\051)]TJ 0 g 0 G [-500(Cho)-28(ose)-222(and)-222(build)-222(preconditioner)-222(with)]TJ/F30 9.9626 Tf 180.822 0 Td [(psb_precset)]TJ/F8 9.9626 Tf 59.748 0 Td [(and)]TJ/F30 9.9626 Tf 18.265 0 Td [(psb_precbld)]TJ 0 g 0 G -/F8 9.9626 Tf -257.728 -16.006 Td [(\050e\051)]TJ +/F8 9.9626 Tf -257.728 -18.38 Td [(\050e\051)]TJ 0 g 0 G - [-500(Call)-333(the)-334(iterativ)28(e)-333(metho)-28(d)-333(of)-334(c)28(hoice,)-333(e.g.)]TJ/F30 9.9626 Tf 194.023 0 Td [(psb_bicgstab)]TJ/F8 9.9626 Tf -223.69 -20.056 Td [(The)-370(insertion)-370(routines)-370(will)-370(b)-27(e)-370(c)-1(all)1(e)-1(d)-369(as)-370(man)27(y)-370(times)-370(as)-370(needed;)-388(they)-370(only)-370(need)]TJ 0 -11.955 Td [(to)-404(b)-27(e)-404(called)-404(on)-404(the)-403(data)-404(that)-404(is)-403(actually)-404(allo)-28(cated)-403(to)-404(the)-404(curren)28(t)-404(pro)-27(ce)-1(ss,)-421(i.e.)]TJ 0 -11.955 Td [(eac)28(h)-334(pro)-27(cess)-334(generates)-333(its)-334(o)28(wn)-333(data.)]TJ 14.944 -11.988 Td [(In)-326(principle)-326(there)-327(is)-326(no)-326(sp)-28(eci\014c)-326(order)-327(in)-326(the)-326(calls)-327(to)]TJ/F30 9.9626 Tf 225.879 0 Td [(psb_spins)]TJ/F8 9.9626 Tf 47.073 0 Td [(,)-328(nor)-326(is)-326(there)]TJ -287.896 -11.956 Td [(a)-393(requiremen)27(t)-393(to)-393(build)-394(a)-393(matrix)-393(ro)28(w)-394(in)-393(its)-394(en)28(tiret)28(y)-393(b)-28(efore)-393(c)-1(alli)1(ng)-394(the)-393(routine;)]TJ 0 -11.955 Td [(this)-288(allo)28(ws)-288(the)-288(application)-288(programmer)-288(to)-288(w)27(alk)-288(through)-288(the)-288(discretization)-288(mesh)]TJ 0 -11.955 Td [(elemen)28(t)-402(b)28(y)-401(elemen)28(t,)-419(generating)-401(the)-401(main)-401(part)-401(of)-402(a)-401(giv)28(en)-401(matrix)-402(ro)28(w)-401(but)-401(also)]TJ 0 -11.955 Td [(con)28(tributions)-333(to)-334(the)-333(ro)28(ws)-334(corresp)-28(on)1(ding)-334(to)-333(neigh)28(b)-28(ouring)-333(elemen)28(ts)-1(.)]TJ 14.944 -11.988 Td [(F)83(rom)-410(a)-410(functional)-410(p)-28(oin)28(t)-410(of)-410(view)-410(it)-410(is)-410(ev)27(en)-410(p)-27(os)-1(sibl)1(e)-411(to)-410(execute)-410(one)-410(call)-410(for)]TJ -14.944 -11.955 Td [(eac)28(h)-372(nonzero)-372(co)-28(e\016cien)28(t;)-391(ho)27(w)28(ev)28(er)-372(this)-372(w)28(ould)-372(ha)28(v)28(e)-372(a)-372(substan)27(tial)-371(com)-1(p)1(utational)]TJ 0 -11.955 Td [(o)28(v)28(e)-1(r)1(head.)-412(It)-236(is)-236(therefore)-236(advisable)-236(to)-235(pac)27(k)-236(a)-235(certain)-236(amoun)28(t)-236(of)-236(data)-236(in)28(to)-236(eac)28(h)-236(call)]TJ 0 -11.955 Td [(to)-308(the)-307(insertion)-308(routin)1(e)-1(,)-312(sa)28(y)-308(touc)28(hing)-308(on)-307(a)-308(few)-307(tens)-308(of)-307(ro)27(ws;)-316(the)-307(b)-28(est)-308(p)-27(erformng)]TJ 0 -11.956 Td [(v)56(alue)-386(w)28(ould)-385(dep)-28(end)-386(on)-385(b)-28(oth)-385(the)-385(arc)27(hitecture)-385(of)-385(the)-386(computer)-385(b)-28(eing)-385(used)-386(and)]TJ 0 -11.955 Td [(on)-450(the)-450(problem)-450(structure.)-794(A)28(t)-450(the)-450(opp)-27(os)-1(it)1(e)-450(extrem)-1(e,)-479(it)-449(w)27(ould)-449(b)-28(e)-450(p)-28(ossible)-450(to)]TJ 0 -11.955 Td [(generate)-310(the)-311(en)28(tire)-310(part)-310(of)-311(a)-310(co)-28(e\016cien)28(t)-311(matrix)-310(residing)-310(on)-310(a)-311(pro)-27(ces)-1(s)-310(and)-310(pass)-310(it)]TJ 0 -11.955 Td [(in)-309(a)-309(single)-309(call)-309(to)]TJ/F30 9.9626 Tf 76.89 0 Td [(psb_spins)]TJ/F8 9.9626 Tf 47.073 0 Td [(;)-317(this,)-314(ho)28(w)28(e)-1(v)28(er,)-314(w)28(ould)-309(en)28(tail)-309(a)-309(doubling)-309(of)-309(memory)]TJ -123.963 -11.955 Td [(o)-28(ccupation,)-333(and)-333(th)27(u)1(s)-334(w)28(ould)-333(b)-28(e)-333(almos)-1(t)-333(alw)28(a)28(ys)-334(far)-333(from)-333(optimal.)]TJ/F16 11.9552 Tf 0 -28.062 Td [(2.4)-1125(Programming)-375(mo)-31(del)]TJ/F8 9.9626 Tf 0 -18.451 Td [(The)-325(PSBLAS)-324(librarary)-325(is)-325(based)-325(on)-324(the)-325(Single)-325(Program)-324(Multiple)-325(Data)-325(\050SPMD\051)]TJ 0 -11.955 Td [(programming)-413(mo)-28(del:)-603(eac)27(h)-413(pro)-27(cess)-413(participating)-413(in)-413(the)-413(computation)-413(p)-28(erforms)]TJ 0 -11.955 Td [(the)-333(same)-334(actions)-333(on)-333(a)-334(c)28(h)28(unk)-334(of)-333(data.)-444(P)28(arallelism)-334(is)-333(th)28(us)-334(data-driv)28(en.)]TJ 14.944 -11.988 Td [(Because)-389(of)-389(this)-389(structure,)-403(man)28(y)-389(subrouti)1(nes)-389(co)-28(ordinate)-389(their)-389(action)-389(across)]TJ -14.944 -11.955 Td [(the)-478(v)56(arious)-478(pro)-28(cesses,)-514(th)28(us)-478(pro)28(viding)-478(an)-477(implicit)-478(sync)28(hronization)-478(p)-28(oin)28(t,)-514(and)]TJ 0 -11.955 Td [(therefore)]TJ/F17 9.9626 Tf 43.026 0 Td [(must)]TJ/F8 9.9626 Tf 26.326 0 Td [(b)-28(e)-452(called)-452(sim)28(ultaneously)-452(b)28(y)-452(all)-452(pro)-28(cesses)-453(p)1(articipating)-452(in)-452(the)]TJ -69.352 -11.955 Td [(computation.)-597(This)-384(is)-384(certainly)-384(true)-385(for)-384(the)-384(data)-384(allo)-28(cation)-384(and)-384(assem)28(bly)-385(rou-)]TJ 0 -11.955 Td [(tines,)-333(for)-334(all)-333(the)-333(computational)-334(r)1(outines)-334(and)-333(for)-333(some)-334(of)-333(the)-333(to)-28(ols)-334(rou)1(tines)-1(.)]TJ 14.944 -11.988 Td [(Ho)28(w)27(ev)28(er)-490(there)-490(are)-491(man)28(y)-490(cases)-490(where)-491(no)-490(sync)28(hronization,)-529(and)-491(ind)1(e)-1(ed)-490(no)]TJ -14.944 -11.956 Td [(comm)28(unication)-459(among)-458(pro)-28(cesses,)-489(is)-459(implied;)-521(for)-458(instance,)-489(all)-459(the)-458(routines)-458(in)]TJ + [-500(Call)-333(the)-334(iterativ)28(e)-333(metho)-28(d)-333(of)-334(c)28(hoice,)-333(e.g.)]TJ/F30 9.9626 Tf 194.023 0 Td [(psb_bicgstab)]TJ/F8 9.9626 Tf -223.69 -24.805 Td [(The)-370(insertion)-370(routines)-370(will)-370(b)-27(e)-370(c)-1(all)1(e)-1(d)-369(as)-370(man)27(y)-370(times)-370(as)-370(needed;)-388(they)-370(only)-370(need)]TJ 0 -11.955 Td [(to)-404(b)-27(e)-404(called)-404(on)-404(the)-403(data)-404(that)-404(is)-403(actually)-404(allo)-28(cated)-403(to)-404(the)-404(curren)28(t)-404(pro)-27(ce)-1(ss,)-421(i.e.)]TJ 0 -11.955 Td [(eac)28(h)-334(pro)-27(cess)-334(generates)-333(its)-334(o)28(wn)-333(data.)]TJ 14.944 -13.175 Td [(In)-326(principle)-326(there)-327(is)-326(no)-326(sp)-28(eci\014c)-326(order)-327(in)-326(the)-326(calls)-327(to)]TJ/F30 9.9626 Tf 225.879 0 Td [(psb_spins)]TJ/F8 9.9626 Tf 47.073 0 Td [(,)-328(nor)-326(is)-326(there)]TJ -287.896 -11.955 Td [(a)-393(requiremen)27(t)-393(to)-393(build)-394(a)-393(matrix)-393(ro)28(w)-394(in)-393(its)-394(en)28(tiret)28(y)-393(b)-28(efore)-393(c)-1(alli)1(ng)-394(the)-393(routine;)]TJ 0 -11.956 Td [(this)-288(allo)28(ws)-288(the)-288(application)-288(programmer)-288(to)-288(w)27(alk)-288(through)-288(the)-288(discretization)-288(mesh)]TJ 0 -11.955 Td [(elemen)28(t)-402(b)28(y)-401(elemen)28(t,)-419(generating)-401(the)-401(main)-401(part)-401(of)-402(a)-401(giv)28(en)-401(matrix)-402(ro)28(w)-401(but)-401(also)]TJ 0 -11.955 Td [(con)28(tributions)-333(to)-334(the)-333(ro)28(ws)-334(corresp)-28(on)1(ding)-334(to)-333(neigh)28(b)-28(ouring)-333(elemen)28(ts)-1(.)]TJ 14.944 -13.175 Td [(F)83(rom)-410(a)-410(functional)-410(p)-28(oin)28(t)-410(of)-410(view)-410(it)-410(is)-410(ev)27(en)-410(p)-27(os)-1(sibl)1(e)-411(to)-410(execute)-410(one)-410(call)-410(for)]TJ -14.944 -11.955 Td [(eac)28(h)-372(nonzero)-372(co)-28(e\016cien)28(t;)-391(ho)27(w)28(ev)28(er)-372(this)-372(w)28(ould)-372(ha)28(v)28(e)-372(a)-372(substan)27(tial)-371(com)-1(p)1(utational)]TJ 0 -11.955 Td [(o)28(v)28(e)-1(r)1(head.)-412(It)-236(is)-236(therefore)-236(advisable)-236(to)-235(pac)27(k)-236(a)-235(certain)-236(amoun)28(t)-236(of)-236(data)-236(in)28(to)-236(eac)28(h)-236(call)]TJ 0 -11.956 Td [(to)-308(the)-307(insertion)-308(routin)1(e)-1(,)-312(sa)28(y)-308(touc)28(hing)-308(on)-307(a)-308(few)-307(tens)-308(of)-307(ro)27(ws;)-316(the)-307(b)-28(est)-308(p)-27(erformng)]TJ 0 -11.955 Td [(v)56(alue)-386(w)28(ould)-385(dep)-28(end)-386(on)-385(b)-28(oth)-385(the)-385(arc)27(hitecture)-385(of)-385(the)-386(computer)-385(b)-28(eing)-385(used)-386(and)]TJ 0 -11.955 Td [(on)-450(the)-450(problem)-450(structure.)-794(A)28(t)-450(the)-450(opp)-27(os)-1(it)1(e)-450(extrem)-1(e,)-479(it)-449(w)27(ould)-449(b)-28(e)-450(p)-28(ossible)-450(to)]TJ 0 -11.955 Td [(generate)-310(the)-311(en)28(tire)-310(part)-310(of)-311(a)-310(co)-28(e\016cien)28(t)-311(matrix)-310(residing)-310(on)-310(a)-311(pro)-27(ces)-1(s)-310(and)-310(pass)-310(it)]TJ 0 -11.955 Td [(in)-309(a)-309(single)-309(call)-309(to)]TJ/F30 9.9626 Tf 76.89 0 Td [(psb_spins)]TJ/F8 9.9626 Tf 47.073 0 Td [(;)-317(this,)-314(ho)28(w)28(e)-1(v)28(er,)-314(w)28(ould)-309(en)28(tail)-309(a)-309(doubling)-309(of)-309(memory)]TJ -123.963 -11.955 Td [(o)-28(ccupation,)-333(and)-333(th)27(u)1(s)-334(w)28(ould)-333(b)-28(e)-333(almos)-1(t)-333(alw)28(a)28(ys)-334(far)-333(from)-333(optimal.)]TJ 0 g 0 G - 169.365 -29.887 Td [(7)]TJ + 169.365 -29.888 Td [(7)]TJ 0 g 0 G ET endstream endobj -660 0 obj << +707 0 obj << /Type /Page -/Contents 661 0 R -/Resources 659 0 R +/Contents 708 0 R +/Resources 706 0 R /MediaBox [0 0 595.276 841.89] -/Parent 674 0 R +/Parent 723 0 R >> endobj -662 0 obj << -/D [660 0 R /XYZ 99.895 740.998 null] +709 0 obj << +/D [707 0 R /XYZ 99.895 740.998 null] >> endobj -663 0 obj << -/D [660 0 R /XYZ 99.895 716.092 null] +710 0 obj << +/D [707 0 R /XYZ 99.895 716.092 null] >> endobj -664 0 obj << -/D [660 0 R /XYZ 99.895 699.864 null] +711 0 obj << +/D [707 0 R /XYZ 99.895 685.535 null] >> endobj -665 0 obj << -/D [660 0 R /XYZ 99.895 679.808 null] +712 0 obj << +/D [707 0 R /XYZ 99.895 613.511 null] >> endobj -666 0 obj << -/D [660 0 R /XYZ 99.895 647.797 null] +713 0 obj << +/D [707 0 R /XYZ 99.895 588.43 null] >> endobj -667 0 obj << -/D [660 0 R /XYZ 99.895 627.741 null] +714 0 obj << +/D [707 0 R /XYZ 99.895 563.625 null] >> endobj -668 0 obj << -/D [660 0 R /XYZ 99.895 607.685 null] +715 0 obj << +/D [707 0 R /XYZ 99.895 526.865 null] >> endobj -669 0 obj << -/D [660 0 R /XYZ 99.895 585.88 null] +716 0 obj << +/D [707 0 R /XYZ 99.895 502.06 null] >> endobj -670 0 obj << -/D [660 0 R /XYZ 99.895 557.919 null] +717 0 obj << +/D [707 0 R /XYZ 99.895 477.255 null] >> endobj -671 0 obj << -/D [660 0 R /XYZ 99.895 529.682 null] +718 0 obj << +/D [707 0 R /XYZ 99.895 449.514 null] >> endobj -672 0 obj << -/D [660 0 R /XYZ 99.895 513.399 null] +719 0 obj << +/D [707 0 R /XYZ 99.895 419.179 null] >> endobj -673 0 obj << -/D [660 0 R /XYZ 99.895 497.394 null] +720 0 obj << +/D [707 0 R /XYZ 99.895 388.567 null] >> endobj -30 0 obj << -/D [660 0 R /XYZ 99.895 258.481 null] +721 0 obj << +/D [707 0 R /XYZ 99.895 369.91 null] >> endobj -659 0 obj << -/Font << /F8 438 0 R /F30 616 0 R /F16 435 0 R /F17 579 0 R >> +722 0 obj << +/D [707 0 R /XYZ 99.895 351.53 null] +>> endobj +706 0 obj << +/Font << /F8 478 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -677 0 obj << -/Length 1716 +727 0 obj << +/Length 3504 >> stream 0 g 0 G 0 g 0 G BT -/F8 9.9626 Tf 150.705 706.129 Td [(sec.)]TJ +/F16 11.9552 Tf 150.705 706.129 Td [(2.4)-1125(Programming)-375(mo)-31(del)]TJ/F8 9.9626 Tf 0 -18.389 Td [(The)-325(PSBLAS)-324(librarary)-325(is)-325(based)-324(o)-1(n)-324(the)-325(Single)-325(Program)-324(Multiple)-325(Data)-325(\050SPMD\051)]TJ 0 -11.956 Td [(programming)-413(mo)-28(del:)-603(eac)27(h)-413(pro)-27(cess)-413(participating)-413(in)-413(the)-413(computation)-413(p)-28(erforms)]TJ 0 -11.955 Td [(the)-333(same)-334(actions)-333(on)-333(a)-334(c)28(h)28(unk)-333(of)-334(data.)-444(P)28(arallelism)-334(is)-333(th)28(us)-334(data-d)1(riv)27(en.)]TJ 14.944 -11.955 Td [(Because)-389(of)-389(this)-389(structure,)-402(m)-1(an)28(y)-389(subrou)1(tines)-389(co)-28(ordinate)-389(their)-389(action)-389(across)]TJ -14.944 -11.955 Td [(the)-478(v)56(arious)-478(pro)-28(cesses,)-514(th)28(us)-478(pro)28(viding)-477(a)-1(n)-477(implicit)-478(sync)28(hronization)-478(p)-28(oin)28(t,)-514(and)]TJ 0 -11.955 Td [(therefore)]TJ/F17 9.9626 Tf 43.026 0 Td [(must)]TJ/F8 9.9626 Tf 26.326 0 Td [(b)-28(e)-452(called)-452(sim)28(ultaneously)-452(b)28(y)-452(all)-452(pro)-28(cesses)-452(participating)-452(in)-452(the)]TJ -69.352 -11.956 Td [(computation.)-597(This)-384(is)-384(certainly)-384(true)-385(for)-384(the)-384(data)-384(allo)-28(cation)-384(and)-384(assem)28(bly)-385(rou)1(-)]TJ 0 -11.955 Td [(tines,)-333(for)-334(all)-333(the)-333(computational)-333(routines)-334(and)-333(for)-333(some)-334(of)-333(the)-333(to)-28(ols)-334(r)1(outines.)]TJ 14.944 -11.955 Td [(Ho)28(w)28(e)-1(v)28(er)-490(there)-490(are)-490(m)-1(an)28(y)-490(cases)-490(where)-491(no)-490(sync)28(hronization,)-529(and)-491(in)1(dee)-1(d)-490(no)]TJ -14.944 -11.955 Td [(comm)28(unication)-459(among)-458(pro)-28(cesses,)-489(is)-459(implied;)-521(f)1(or)-459(instance,)-489(all)-459(the)-458(routines)-458(in)]TJ 0 -11.955 Td [(sec.)]TJ 0 0 1 rg 0 0 1 RG [-421(3.5)]TJ 0 g 0 G - [-421(are)-421(only)-420(acting)-421(on)-421(the)-421(lo)-28(cal)-421(data)-420(structures,)-443(and)-421(th)28(us)-421(ma)28(y)-421(b)-28(e)-421(called)]TJ 0 -11.955 Td [(indep)-28(enden)28(tly)84(.)-917(The)-491(most)-491(imp)-27(ortan)27(t)-490(case)-491(is)-491(that)-491(of)-490(the)-491(co)-28(e\016cien)28(t)-491(insertion)]TJ 0 -11.955 Td [(routines:)-409(since)-263(the)-263(n)27(um)28(b)-28(er)-263(of)-263(co)-27(e\016c)-1(i)1(e)-1(n)28(ts)-263(in)-263(the)-263(sparse)-263(and)-263(dense)-263(matrices)-263(v)55(aries)]TJ 0 -11.956 Td [(among)-323(the)-322(pro)-28(cessors,)-325(and)-323(since)-322(the)-323(user)-323(is)-322(free)-323(to)-323(c)28(ho)-28(ose)-322(an)-323(arbitrary)-323(ord)1(e)-1(r)-322(in)]TJ 0 -11.955 Td [(builiding)-333(the)-333(matrix)-334(en)28(tries,)-333(these)-334(routines)-333(cannot)-333(imply)-334(a)-333(sync)28(hronization.)]TJ 14.944 -11.955 Td [(Throughout)-333(this)-333(use)-1(r)1('s)-334(guide)-333(eac)28(h)-334(subroutine)-333(will)-333(b)-28(e)-333(clearly)-334(indicated)-333(as:)]TJ + [-421(are)-421(only)-420(acting)-421(on)-421(the)-421(lo)-28(cal)-421(data)-420(structures,)-443(and)-421(th)28(us)-421(ma)28(y)-421(b)-28(e)-421(called)]TJ 0 -11.955 Td [(indep)-28(enden)28(tly)84(.)-917(The)-491(most)-491(imp)-27(ortan)27(t)-490(case)-491(is)-491(that)-491(of)-490(the)-491(co)-28(e\016cien)28(t)-491(insertion)]TJ 0 -11.956 Td [(routines:)-409(since)-263(the)-263(n)27(um)28(b)-28(er)-263(of)-263(co)-27(e\016c)-1(i)1(e)-1(n)28(ts)-263(in)-263(the)-263(sparse)-263(and)-263(dense)-263(matrices)-263(v)55(aries)]TJ 0 -11.955 Td [(among)-323(the)-322(pro)-28(cessors,)-325(and)-323(since)-322(the)-323(user)-323(is)-322(free)-323(to)-323(c)28(ho)-28(ose)-322(an)-323(arbitrary)-323(ord)1(e)-1(r)-322(in)]TJ 0 -11.955 Td [(builiding)-333(the)-333(matrix)-334(en)28(tries,)-333(these)-334(routines)-333(cannot)-333(imply)-334(a)-333(sync)28(hronization.)]TJ 14.944 -11.955 Td [(Throughout)-333(this)-333(use)-1(r)1('s)-334(guide)-333(eac)28(h)-334(subroutine)-333(will)-333(b)-28(e)-333(clearly)-334(indicated)-333(as:)]TJ 0 g 0 G /F27 9.9626 Tf -14.944 -19.925 Td [(Sync)32(hronous:)]TJ 0 g 0 G -/F8 9.9626 Tf 71.504 0 Td [(m)28(ust)-359(b)-28(e)-359(called)-359(sim)28(ultaneously)-359(b)28(y)-359(all)-359(the)-359(pro)-28(cesses)-359(in)-359(the)-359(rele-)]TJ -46.597 -11.955 Td [(v)56(an)27(t)-333(comm)28(unication)-333(con)27(text;)]TJ +/F8 9.9626 Tf 71.504 0 Td [(m)28(ust)-359(b)-28(e)-359(called)-359(sim)28(ultaneously)-359(b)28(y)-359(all)-359(the)-359(pro)-28(cesses)-359(in)-359(the)-359(rele-)]TJ -46.597 -11.956 Td [(v)56(an)27(t)-333(comm)28(unication)-333(c)-1(on)28(text;)]TJ 0 g 0 G -/F27 9.9626 Tf -24.907 -19.926 Td [(Async)32(hronous:)]TJ +/F27 9.9626 Tf -24.907 -19.925 Td [(Async)32(hronous:)]TJ 0 g 0 G /F8 9.9626 Tf 78.32 0 Td [(ma)28(y)-334(b)-27(e)-334(called)-333(in)-333(a)-334(totally)-333(indep)-28(enden)28(t)-333(manner.)]TJ 0 g 0 G - 91.045 -504.109 Td [(8)]TJ + 91.045 -366.168 Td [(8)]TJ 0 g 0 G ET endstream endobj -676 0 obj << +726 0 obj << /Type /Page -/Contents 677 0 R -/Resources 675 0 R +/Contents 727 0 R +/Resources 725 0 R /MediaBox [0 0 595.276 841.89] -/Parent 674 0 R -/Annots [ 658 0 R ] +/Parent 723 0 R +/Annots [ 724 0 R ] >> endobj -658 0 obj << +724 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [169.454 703.195 184.177 714.044] +/Rect [169.454 565.254 184.177 576.103] /Subtype /Link /A << /S /GoTo /D (subsection.3.5) >> >> endobj -678 0 obj << -/D [676 0 R /XYZ 150.705 740.998 null] +728 0 obj << +/D [726 0 R /XYZ 150.705 740.998 null] >> endobj -675 0 obj << -/Font << /F8 438 0 R /F27 437 0 R >> +30 0 obj << +/D [726 0 R /XYZ 150.705 716.092 null] +>> endobj +725 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F17 629 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -683 0 obj << -/Length 7759 +733 0 obj << +/Length 7887 >> stream 0 g 0 G 0 g 0 G BT -/F16 14.3462 Tf 99.895 706.129 Td [(3)-1125(Data)-375(Structures)]TJ/F8 9.9626 Tf 0 -21.821 Td [(In)-369(th)1(is)-369(c)28(hapter)-369(w)28(e)-369(il)1(lustrate)-369(the)-369(d)1(ata)-369(structures)-369(u)1(s)-1(ed)-368(for)-368(de\014nition)-369(of)-368(routines)]TJ 0 -11.955 Td [(in)28(terfaces.)-796(They)-450(include)-451(data)-450(structures)-450(for)-451(sparse)-450(matrices,)-480(comm)28(unication)]TJ 0 -11.955 Td [(descriptors)-333(and)-334(precondition)1(e)-1(rs.)]TJ 14.944 -11.956 Td [(All)-456(the)-456(data)-455(t)27(yp)-27(es)-456(and)-456(the)-456(basic)-455(subroutine)-456(in)28(terfaces)-456(are)-456(de\014ned)-456(in)-455(the)]TJ -14.944 -11.955 Td [(mo)-28(dule)]TJ/F30 9.9626 Tf 35.635 0 Td [(psb_base_mod)]TJ/F8 9.9626 Tf 62.764 0 Td [(;)-407(this)-382(will)-383(ha)28(v)28(e)-382(to)-383(b)-27(e)-383(included)-382(b)28(y)-383(ev)28(ery)-382(user)-383(subroutin)1(e)]TJ -98.399 -11.955 Td [(that)-333(mak)27(es)-333(use)-333(of)-334(the)-333(library)83(.)]TJ 14.944 -11.955 Td [(Real)-359(and)-359(complex)-358(data)-359(t)28(yp)-28(es)-359(are)-359(parametrized)-359(with)-358(a)-359(kind)-359(t)28(yp)-28(e)-359(de\014ned)-358(in)]TJ -14.944 -11.955 Td [(the)-333(library)-334(as)-333(follo)28(ws:)]TJ +/F16 14.3462 Tf 99.895 706.129 Td [(3)-1125(Data)-375(Structures)-375(and)-375(Classes)]TJ/F8 9.9626 Tf 0 -22.373 Td [(In)-369(th)1(is)-369(c)28(hapter)-369(w)28(e)-369(il)1(lustrate)-369(the)-369(d)1(ata)-369(structures)-369(u)1(s)-1(ed)-368(for)-368(de\014nition)-369(of)-368(routines)]TJ 0 -11.955 Td [(in)28(terfaces.)-796(They)-450(include)-451(data)-450(structures)-450(for)-451(sparse)-450(matrices,)-480(comm)28(unication)]TJ 0 -11.955 Td [(descriptors)-333(and)-334(precondition)1(e)-1(rs.)]TJ 14.944 -12.252 Td [(All)-319(the)-319(data)-319(t)28(yp)-28(es)-319(and)-319(the)-319(b)1(as)-1(i)1(c)-319(s)-1(u)1(broutine)-319(in)28(terface)-1(s)-318(relate)-1(d)-318(to)-319(descriptors)]TJ -14.944 -11.955 Td [(and)-445(sparse)-444(matrices)-445(are)-445(de\014ned)-445(in)-444(the)-445(mo)-28(dule)]TJ/F30 9.9626 Tf 213.082 0 Td [(psb_base_mod)]TJ/F8 9.9626 Tf 62.764 0 Td [(;)-500(this)-445(will)-445(ha)28(v)28(e)]TJ -275.846 -11.955 Td [(to)-451(b)-28(e)-451(included)-452(b)28(y)-451(ev)28(ery)-452(user)-451(subroutine)-451(that)-451(mak)27(es)-451(use)-451(of)-452(th)1(e)-452(library)84(.)-799(The)]TJ 0 -11.956 Td [(preconditioners)-333(are)-334(de\014ned)-333(in)-333(the)-334(mo)-27(dule)]TJ/F30 9.9626 Tf 184.725 0 Td [(psb_prec_mod)]TJ/F8 9.9626 Tf -169.781 -12.251 Td [(Real)-359(and)-359(complex)-358(data)-359(t)28(yp)-28(es)-359(are)-359(parametrized)-359(with)-358(a)-359(kind)-359(t)28(yp)-28(e)-359(de\014ned)-358(in)]TJ -14.944 -11.955 Td [(the)-333(library)-334(as)-333(follo)28(ws:)]TJ +0 g 0 G +/F27 9.9626 Tf 0 -20.815 Td [(psb)]TJ +ET +q +1 0 0 1 117.832 566.906 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 121.269 566.707 Td [(spk)]TJ +ET +q +1 0 0 1 138.887 566.906 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +0 g 0 G +BT +/F8 9.9626 Tf 147.306 566.707 Td [(Kind)-472(parameter)-472(for)-472(short)-472(precision)-473(real)-472(and)-472(complex)-472(data;)-542(corre-)]TJ -22.504 -11.956 Td [(sp)-28(onds)-333(to)-333(a)]TJ/F30 9.9626 Tf 53.522 0 Td [(REAL)]TJ/F8 9.9626 Tf 24.242 0 Td [(declaration)-333(and)-334(i)1(s)-334(normally)-333(4)-333(b)27(ytes.)]TJ 0 g 0 G -/F27 9.9626 Tf 0 -18.427 Td [(psb)]TJ +/F27 9.9626 Tf -102.671 -21.111 Td [(psb)]TJ ET q -1 0 0 1 117.832 582.394 cm +1 0 0 1 117.832 533.839 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 121.269 582.195 Td [(spk)]TJ +/F27 9.9626 Tf 121.269 533.64 Td [(dpk)]TJ ET q -1 0 0 1 138.887 582.394 cm +1 0 0 1 140.733 533.839 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q 0 g 0 G BT -/F8 9.9626 Tf 147.306 582.195 Td [(Kind)-472(parameter)-472(for)-472(short)-472(precision)-473(real)-472(and)-472(complex)-472(data;)-542(corre-)]TJ -22.504 -11.955 Td [(sp)-28(onds)-333(to)-333(a)]TJ/F30 9.9626 Tf 53.522 0 Td [(REAL)]TJ/F8 9.9626 Tf 24.242 0 Td [(declaration)-333(and)-334(i)1(s)-334(normally)-333(4)-333(b)27(ytes.)]TJ +/F8 9.9626 Tf 149.152 533.64 Td [(Kind)-494(parameter)-495(for)-494(long)-495(precision)-494(real)-495(and)-494(complex)-495(d)1(ata;)-576(corr)1(e)-1(-)]TJ -24.35 -11.955 Td [(sp)-28(onds)-333(to)-333(a)]TJ/F30 9.9626 Tf 53.522 0 Td [(DOUBLE)-525(PRECISION)]TJ/F8 9.9626 Tf 87.006 0 Td [(declaration)-333(and)-334(is)-333(normally)-333(8)-333(b)27(ytes.)]TJ 0 g 0 G -/F27 9.9626 Tf -102.671 -19.177 Td [(psb)]TJ +/F27 9.9626 Tf -165.435 -21.112 Td [(psb)]TJ +ET +q +1 0 0 1 117.832 500.772 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 121.269 500.573 Td [(long)]TJ ET q -1 0 0 1 117.832 551.263 cm +1 0 0 1 142.961 500.772 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 121.269 551.063 Td [(dpk)]TJ +/F27 9.9626 Tf 146.398 500.573 Td [(in)32(t)]TJ ET q -1 0 0 1 140.733 551.263 cm +1 0 0 1 160.77 500.772 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 164.207 500.573 Td [(k)]TJ +ET +q +1 0 0 1 170.941 500.772 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q 0 g 0 G BT -/F8 9.9626 Tf 149.152 551.063 Td [(Kind)-494(parameter)-495(for)-494(long)-495(precision)-494(real)-495(and)-494(complex)-495(d)1(ata;)-576(corr)1(e)-1(-)]TJ -24.35 -11.955 Td [(sp)-28(onds)-333(to)-333(a)]TJ/F30 9.9626 Tf 53.522 0 Td [(DOUBLE)-525(PRECISION)]TJ/F8 9.9626 Tf 87.006 0 Td [(declaration)-333(and)-334(is)-333(normally)-333(8)-333(b)27(ytes.)]TJ -165.435 -18.427 Td [(Moreo)28(v)28(e)-1(r)1(,)-353(the)-349(library)-349(d)1(e)-1(\014)1(nes)-349(a)-349(long)-349(in)28(teger)-349(kind)]TJ/F30 9.9626 Tf 215.384 0 Td [(psb_long_int_k_)]TJ/F8 9.9626 Tf 81.93 0 Td [(whic)28(h)-349(nor-)]TJ -297.314 -11.955 Td [(mally)-332(corresp)-28(onds)-333(to)-332(64-bit)-332(in)28(tege)-1(rs;)-332(it)-333(is)-332(only)-332(used)-333(for)-332(the)]TJ/F30 9.9626 Tf 259.592 0 Td [(psb_sizeof)]TJ/F8 9.9626 Tf 55.615 0 Td [(utilit)28(y)83(.)]TJ/F16 11.9552 Tf -315.207 -27.566 Td [(3.1)-1125(Descriptor)-375(data)-375(structure)]TJ/F8 9.9626 Tf 0 -18.389 Td [(All)-349(the)-349(general)-349(matrix)-349(informations)-349(and)-349(elemen)28(ts)-349(to)-349(b)-28(e)-349(exc)28(hanged)-349(among)-349(pro-)]TJ 0 -11.956 Td [(cesses)-453(are)-453(stored)-453(within)-452(a)-453(data)-453(structure)-452(of)-453(the)-453(t)28(yp)-28(e)]TJ/F30 9.9626 Tf 242.532 0 Td [(psb)]TJ +/F8 9.9626 Tf 179.36 500.573 Td [(Kind)-444(parame)-1(ter)-444(for)-445(long)-444(in)28(tege)-1(rs,)-472(used)-445(b)28(y)-444(the)]TJ/F30 9.9626 Tf 211.943 0 Td [(psb_sizeof)]TJ/F8 9.9626 Tf -266.501 -11.955 Td [(utilit)28(y)83(.)]TJ -24.907 -20.815 Td [(T)83(ogether)-311(with)-311(the)-311(classes)-311(attributes)-311(w)28(e)-311(also)-311(discuss)-311(their)-311(metho)-28(ds.)-437(Most)-311(meth-)]TJ 0 -11.955 Td [(o)-28(ds)-342(detailed)-342(here)-342(only)-343(act)-342(on)-342(the)-342(lo)-28(cal)-342(v)55(ariable,)-344(i.e.)-471(their)-342(action)-343(i)1(s)-343(purely)-342(lo)-28(cal)]TJ 0 -11.955 Td [(and)-299(async)28(hronous)-299(unless)-298(otherwise)-299(stated.)-433(The)-299(list)-299(of)-299(metho)-27(ds)-299(here)-299(is)-299(not)-298(com)-1(-)]TJ 0 -11.956 Td [(pletely)-418(exhaustiv)27(e;)-460(man)27(y)-418(metho)-28(ds,)-439(esp)-28(ecially)-419(th)1(os)-1(e)-418(that)-418(alter)-419(th)1(e)-419(con)28(ten)28(ts)-419(of)]TJ 0 -11.955 Td [(the)-379(v)55(ariou)1(s)-380(ob)-55(jects,)-391(are)-379(usually)-379(not)-379(needed)-379(b)28(y)-379(the)-379(e)-1(n)1(d-use)-1(r)1(,)-391(and)-379(therefore)-379(are)]TJ 0 -11.955 Td [(describ)-28(ed)-333(in)-333(the)-334(dev)28(elop)-28(er's)-333(do)-28(cumen)28(tation.)]TJ/F16 11.9552 Tf 0 -29.462 Td [(3.1)-1125(Descriptor)-375(data)-375(structure)]TJ/F8 9.9626 Tf 0 -18.941 Td [(All)-349(the)-349(general)-349(matrix)-349(informations)-349(and)-349(elemen)28(ts)-349(to)-349(b)-28(e)-349(exc)28(hanged)-349(among)-349(pro-)]TJ 0 -11.955 Td [(cesses)-453(are)-453(stored)-453(within)-452(a)-453(data)-453(structure)-452(of)-453(the)-453(t)28(yp)-28(e)]TJ/F30 9.9626 Tf 242.532 0 Td [(psb)]TJ ET q -1 0 0 1 358.746 451.015 cm +1 0 0 1 358.746 347.868 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F30 9.9626 Tf 361.884 450.815 Td [(desc)]TJ +/F30 9.9626 Tf 361.884 347.669 Td [(desc)]TJ ET q -1 0 0 1 383.433 451.015 cm +1 0 0 1 383.433 347.868 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F30 9.9626 Tf 386.571 450.815 Td [(type)]TJ/F8 9.9626 Tf 20.922 0 Td [(.)-803(Ev)28(ery)]TJ -307.598 -11.955 Td [(structure)-437(of)-438(this)-437(t)28(yp)-28(e)-437(is)-438(asso)-28(ciated)-437(with)-437(a)-438(discretization)-437(pattern)-437(and)-438(enables)]TJ 0 -11.955 Td [(data)-302(comm)28(unications)-301(and)-302(other)-301(op)-28(erations)-302(that)-301(are)-302(necessary)-301(for)-302(implemen)28(ting)]TJ 0 -11.955 Td [(the)-333(v)55(arious)-333(algorithms)-333(of)-334(in)28(terest)-333(to)-334(us.)]TJ 14.944 -11.955 Td [(The)-281(data)-282(structure)-281(itself)]TJ/F30 9.9626 Tf 107.959 0 Td [(psb_desc_type)]TJ/F8 9.9626 Tf 70.797 0 Td [(can)-281(b)-28(e)-281(treate)-1(d)-281(as)-281(an)-281(opaque)-282(ob)-55(ject)]TJ -193.7 -11.955 Td [(handled)-339(via)-339(the)-339(to)-27(ols)-339(routines)-339(of)-339(Sec.)]TJ +/F30 9.9626 Tf 386.571 347.669 Td [(type)]TJ/F8 9.9626 Tf 20.922 0 Td [(.)-803(Ev)28(ery)]TJ -307.598 -11.955 Td [(structure)-437(of)-438(this)-437(t)28(yp)-28(e)-437(is)-438(asso)-28(ciated)-437(with)-437(a)-438(discretization)-437(pattern)-437(and)-438(enables)]TJ 0 -11.956 Td [(data)-302(comm)28(unications)-301(and)-302(other)-301(op)-28(erations)-302(that)-301(are)-302(necessary)-301(for)-302(implemen)28(ting)]TJ 0 -11.955 Td [(the)-333(v)55(arious)-333(algorithms)-333(of)-334(in)28(terest)-333(to)-334(us.)]TJ 14.944 -12.251 Td [(The)-281(data)-282(structure)-281(itself)]TJ/F30 9.9626 Tf 107.959 0 Td [(psb_desc_type)]TJ/F8 9.9626 Tf 70.797 0 Td [(can)-281(b)-28(e)-281(treate)-1(d)-281(as)-281(an)-281(opaque)-282(ob)-55(ject)]TJ -193.7 -11.956 Td [(handled)-339(via)-339(the)-339(to)-27(ols)-339(routines)-339(of)-339(Sec.)]TJ 0 0 1 rg 0 0 1 RG [-339(6)]TJ 0 g 0 G @@ -4040,1820 +4337,1987 @@ BT 0 0 1 rg 0 0 1 RG [-339(3.)1(5)]TJ 0 g 0 G - [(;)-342(nev)28(ertheless)-339(w)27(e)-339(in)1(c)-1(l)1(ude)-339(here)-339(a)]TJ 0 -11.956 Td [(description)-333(for)-334(the)-333(curious)-333(reader.)]TJ 14.944 -11.955 Td [(First)-248(w)28(e)-248(describ)-28(e)-248(t)1(he)]TJ/F30 9.9626 Tf 91.264 0 Td [(psb_indx_map)]TJ/F8 9.9626 Tf 65.233 0 Td [(t)28(yp)-28(e.)-416(This)-248(is)-248(a)-247(data)-248(structure)-248(that)-248(k)28(eeps)]TJ -171.441 -11.955 Td [(trac)28(k)-334(of)-333(a)-333(certain)-334(n)28(um)28(b)-28(er)-333(of)-333(basic)-334(issues)-333(suc)28(h)-334(as:)]TJ + [(;)-342(nev)28(ertheless)-339(w)27(e)-339(in)1(c)-1(l)1(ude)-339(here)-339(a)]TJ 0 -11.955 Td [(description)-333(for)-334(the)-333(curious)-333(reader.)]TJ 14.944 -12.252 Td [(First)-248(w)28(e)-248(describ)-28(e)-248(t)1(he)]TJ/F30 9.9626 Tf 91.264 0 Td [(psb_indx_map)]TJ/F8 9.9626 Tf 65.233 0 Td [(t)28(yp)-28(e.)-416(This)-248(is)-248(a)-247(data)-248(structure)-248(that)-248(k)28(eeps)]TJ -171.441 -11.955 Td [(trac)28(k)-334(of)-333(a)-333(certain)-334(n)28(um)28(b)-28(er)-333(of)-333(basic)-334(issues)-333(suc)28(h)-334(as:)]TJ 0 g 0 G -/F14 9.9626 Tf 14.944 -18.427 Td [(\017)]TJ +/F14 9.9626 Tf 14.944 -20.815 Td [(\017)]TJ 0 g 0 G /F8 9.9626 Tf 9.963 0 Td [(The)-333(v)55(alue)-333(of)-333(the)-334(comm)28(unication/MPI)-333(con)28(te)-1(x)1(t;)]TJ 0 g 0 G -/F14 9.9626 Tf -9.963 -19.176 Td [(\017)]TJ +/F14 9.9626 Tf -9.963 -21.111 Td [(\017)]TJ 0 g 0 G /F8 9.9626 Tf 9.963 0 Td [(The)-331(n)28(um)27(b)-27(er)-332(of)-331(indices)-331(in)-331(the)-332(index)-331(space,)-332(i.e.)-443(global)-332(n)28(um)28(b)-28(er)-331(of)-331(ro)28(ws)-332(and)]TJ 0 -11.955 Td [(columns)-333(of)-334(a)-333(sparse)-333(matrix;)]TJ 0 g 0 G -/F14 9.9626 Tf -9.963 -19.177 Td [(\017)]TJ +/F14 9.9626 Tf -9.963 -21.112 Td [(\017)]TJ 0 g 0 G /F8 9.9626 Tf 9.963 0 Td [(The)-333(lo)-28(cal)-333(s)-1(et)-333(of)-333(indices,)-334(i)1(ncluding:)]TJ 0 g 0 G -/F27 9.9626 Tf 11.208 -19.176 Td [({)]TJ +/F27 9.9626 Tf 11.208 -21.112 Td [({)]TJ 0 g 0 G /F8 9.9626 Tf 10.71 0 Td [(The)-333(n)27(u)1(m)27(b)-27(e)-1(r)-333(of)-333(lo)-28(cal)-333(indices)-334(\050and)-333(lo)-28(cal)-333(ro)28(ws\051;)]TJ 0 g 0 G -/F27 9.9626 Tf -10.71 -15.191 Td [({)]TJ +/F27 9.9626 Tf -10.71 -16.533 Td [({)]TJ 0 g 0 G /F8 9.9626 Tf 10.71 0 Td [(The)-333(n)27(u)1(m)27(b)-27(e)-1(r)-333(of)-333(halo)-333(indices)-334(\050and)-333(therefore)-333(lo)-28(cal)-333(columns\051;)]TJ 0 g 0 G -/F27 9.9626 Tf -10.71 -15.191 Td [({)]TJ -0 g 0 G -/F8 9.9626 Tf 10.71 0 Td [(The)-333(global)-334(indi)1(c)-1(es)-333(corresp)-28(onding)-333(to)-333(the)-334(lo)-27(cal)-334(ones.)]TJ -46.825 -19.176 Td [(There)-376(are)-377(man)28(y)-376(di\013eren)28(t)-376(sc)27(hemes)-376(for)-376(storing)-376(these)-377(data;)-397(therefore)-376(there)-377(are)-376(a)]TJ 0 -11.955 Td [(n)28(um)28(b)-28(er)-389(of)-389(t)28(yp)-28(es)-389(extending)-389(the)-389(b)1(as)-1(e)-388(one,)-403(and)-389(the)-389(descriptor)-389(structure)-389(holds)-388(a)]TJ 0 -11.956 Td [(p)-28(olymorphic)-290(ob)-56(ject)-290(whose)-291(dynamic)-290(t)28(yp)-28(e)-290(c)-1(an)-290(b)-28(e)-290(an)28(y)-291(of)-290(the)-291(extended)-290(t)28(yp)-28(es.)-430(The)]TJ 0 -11.955 Td [(metho)-28(ds)-333(asso)-28(ciated)-333(with)-334(this)-333(data)-333(t)27(yp)-27(e)-334(answ)28(er)-333(the)-334(foll)1(o)27(wing)-333(queries:)]TJ -0 g 0 G -/F14 9.9626 Tf 14.944 -18.427 Td [(\017)]TJ -0 g 0 G -/F8 9.9626 Tf 9.963 0 Td [(F)83(or)-271(a)-271(giv)28(en)-272(set)-271(of)-271(lo)-28(cal)-271(indices,)-284(\014nd)-271(the)-271(corresp)-28(onding)-271(indices)-272(i)1(n)-272(the)-271(global)]TJ 0 -11.955 Td [(n)28(um)28(b)-28(ering;)]TJ +/F27 9.9626 Tf -10.71 -16.533 Td [({)]TJ 0 g 0 G -/F14 9.9626 Tf -9.963 -19.176 Td [(\017)]TJ +/F8 9.9626 Tf 10.71 0 Td [(The)-333(global)-334(indi)1(c)-1(es)-333(corresp)-28(onding)-333(to)-333(the)-334(lo)-27(cal)-334(ones.)]TJ 0 g 0 G -/F8 9.9626 Tf 9.963 0 Td [(F)83(or)-271(a)-271(giv)28(en)-272(set)-271(of)-271(global)-271(indices,)-284(\014nd)-271(the)-271(corres)-1(p)-27(onding)-271(indices)-272(in)-271(the)-271(lo)-28(cal)]TJ 0 -11.955 Td [(n)28(um)28(b)-28(ering,)-333(if)-334(an)28(y)83(,)-333(or)-333(return)-333(an)-334(in)28(v)56(alid)]TJ -0 g 0 G - 144.458 -29.888 Td [(9)]TJ + 122.54 -31.825 Td [(9)]TJ 0 g 0 G ET endstream endobj -682 0 obj << +732 0 obj << /Type /Page -/Contents 683 0 R -/Resources 681 0 R +/Contents 733 0 R +/Resources 731 0 R /MediaBox [0 0 595.276 841.89] -/Parent 674 0 R -/Annots [ 679 0 R 680 0 R ] +/Parent 723 0 R +/Annots [ 729 0 R 730 0 R ] >> endobj -679 0 obj << +729 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [264.639 388.106 271.613 398.954] +/Rect [264.639 284.663 271.613 295.511] /Subtype /Link /A << /S /GoTo /D (section.6) >> >> endobj -680 0 obj << +730 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [292.423 388.106 307.146 398.954] +/Rect [292.423 284.663 307.146 295.511] /Subtype /Link /A << /S /GoTo /D (subsection.3.5) >> >> endobj -684 0 obj << -/D [682 0 R /XYZ 99.895 740.998 null] +734 0 obj << +/D [732 0 R /XYZ 99.895 740.998 null] >> endobj 34 0 obj << -/D [682 0 R /XYZ 99.895 716.092 null] +/D [732 0 R /XYZ 99.895 716.092 null] >> endobj 38 0 obj << -/D [682 0 R /XYZ 99.895 492.894 null] +/D [732 0 R /XYZ 99.895 390.872 null] >> endobj -685 0 obj << -/D [682 0 R /XYZ 342.427 450.815 null] +735 0 obj << +/D [732 0 R /XYZ 342.427 347.669 null] >> endobj -681 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F30 616 0 R /F27 437 0 R /F14 619 0 R >> +731 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F30 664 0 R /F27 477 0 R /F14 667 0 R >> /ProcSet [ /PDF /Text ] >> endobj -689 0 obj << -/Length 6608 +739 0 obj << +/Length 6364 >> stream 0 g 0 G 0 g 0 G -0 g 0 G BT -/F14 9.9626 Tf 165.649 706.129 Td [(\017)]TJ +/F8 9.9626 Tf 150.705 706.129 Td [(There)-376(are)-376(m)-1(an)28(y)-376(di\013eren)28(t)-376(sc)27(hemes)-376(for)-376(storing)-376(these)-377(data;)-397(therefore)-376(there)-377(are)-376(a)]TJ 0 -11.955 Td [(n)28(um)28(b)-28(er)-389(of)-389(t)28(yp)-28(es)-389(extending)-389(the)-388(base)-389(one,)-403(and)-389(the)-389(descriptor)-389(structure)-389(hold)1(s)-389(a)]TJ 0 -11.955 Td [(p)-28(olymorphic)-290(ob)-56(ject)-290(whose)-291(dyn)1(am)-1(ic)-290(t)28(yp)-28(e)-290(can)-291(b)-28(e)-290(an)28(y)-291(of)-290(the)-291(extend)1(e)-1(d)-290(t)28(yp)-28(es.)-430(The)]TJ 0 -11.956 Td [(metho)-28(ds)-333(asso)-28(ciated)-333(with)-334(this)-333(data)-333(t)28(yp)-28(e)-334(answ)28(er)-333(the)-334(f)1(ollo)27(wing)-333(queries:)]TJ +0 g 0 G +/F14 9.9626 Tf 14.944 -20.696 Td [(\017)]TJ +0 g 0 G +/F8 9.9626 Tf 9.962 0 Td [(F)83(or)-271(a)-271(giv)28(en)-272(set)-271(of)-271(lo)-28(cal)-271(indices,)-284(\014nd)-271(the)-271(corresp)-28(onding)-271(indices)-272(in)-271(the)-271(global)]TJ 0 -11.955 Td [(n)28(um)28(b)-28(ering;)]TJ +0 g 0 G +/F14 9.9626 Tf -9.962 -20.954 Td [(\017)]TJ +0 g 0 G +/F8 9.9626 Tf 9.962 0 Td [(F)83(or)-271(a)-271(giv)28(en)-272(set)-271(of)-271(global)-271(indices,)-284(\014nd)-271(the)-271(c)-1(orr)1(e)-1(sp)-27(onding)-271(indices)-272(in)-271(the)-271(lo)-28(cal)]TJ 0 -11.955 Td [(n)28(um)28(b)-28(ering,)-333(if)-334(an)28(y)83(,)-333(or)-333(return)-333(an)-334(in)28(v)56(alid)]TJ +0 g 0 G +/F14 9.9626 Tf -9.962 -20.954 Td [(\017)]TJ 0 g 0 G /F8 9.9626 Tf 9.962 0 Td [(Add)-333(a)-334(global)-333(index)-333(to)-333(the)-334(set)-333(of)-334(h)1(a)-1(l)1(o)-334(indices;)]TJ 0 g 0 G -/F14 9.9626 Tf -9.962 -19.593 Td [(\017)]TJ +/F14 9.9626 Tf -9.962 -20.954 Td [(\017)]TJ 0 g 0 G -/F8 9.9626 Tf 9.962 0 Td [(Find)-333(the)-334(pro)-27(cess)-334(o)28(wner)-333(of)-334(eac)28(h)-333(mem)27(b)-27(er)-334(of)-333(a)-333(set)-334(of)-333(global)-333(indices.)]TJ -24.906 -19.261 Td [(All)-355(metho)-28(ds)-355(but)-355(the)-355(last)-355(are)-355(purely)-355(lo)-28(cal;)-366(the)-355(last)-355(metho)-28(d)-355(p)-28(oten)28(tially)-355(requires)]TJ 0 -11.956 Td [(comm)28(unication)-259(among)-258(pro)-28(cesses,)-274(and)-258(th)28(us)-259(is)-258(a)-259(sync)28(hronous)-259(metho)-27(d.)-420(The)-258(c)27(hoice)]TJ 0 -11.955 Td [(of)-309(a)-310(sp)-28(eci\014c)-309(dynamic)-310(t)28(yp)-27(e)-310(for)-309(the)-310(index)-309(map)-310(is)-309(made)-310(at)-309(the)-309(time)-310(the)-309(descriptor)]TJ 0 -11.955 Td [(is)-333(initially)-334(all)1(o)-28(cated,)-334(according)-333(to)-333(the)-334(mo)-27(de)-334(of)-333(initialization)-333(\050see)-334(also)]TJ +/F8 9.9626 Tf 9.962 0 Td [(Find)-333(the)-334(pro)-27(cess)-334(o)28(wner)-333(of)-334(eac)28(h)-333(mem)27(b)-27(er)-334(of)-333(a)-333(set)-334(of)-333(global)-333(indices.)]TJ -24.906 -20.696 Td [(All)-355(metho)-28(ds)-355(but)-355(the)-355(last)-355(are)-355(purely)-355(lo)-28(cal;)-366(the)-355(last)-355(metho)-28(d)-355(p)-28(oten)28(tially)-355(requires)]TJ 0 -11.955 Td [(comm)28(unication)-259(among)-258(pro)-28(cesses,)-274(and)-258(th)28(us)-259(is)-258(a)-259(sync)28(hronous)-259(metho)-27(d.)-420(The)-258(c)27(hoice)]TJ 0 -11.956 Td [(of)-309(a)-310(sp)-28(eci\014c)-309(dynamic)-310(t)28(yp)-27(e)-310(for)-309(the)-310(index)-309(map)-310(is)-309(made)-310(at)-309(the)-309(time)-310(the)-309(descriptor)]TJ 0 -11.955 Td [(is)-333(initially)-334(all)1(o)-28(cated,)-334(according)-333(to)-333(the)-334(mo)-27(de)-334(of)-333(initialization)-333(\050see)-334(also)]TJ 0 0 1 rg 0 0 1 RG [-333(6)]TJ 0 g 0 G - [(\051.)]TJ 14.944 -11.955 Td [(The)-333(descriptor)-334(con)28(ten)28(ts)-333(are)-334(as)-333(follo)28(ws:)]TJ + [(\051.)]TJ 14.944 -12.212 Td [(The)-333(descriptor)-334(con)28(ten)28(ts)-333(are)-334(as)-333(follo)28(ws:)]TJ 0 g 0 G -/F27 9.9626 Tf -14.944 -19.261 Td [(indxmap)]TJ +/F27 9.9626 Tf -14.944 -20.697 Td [(indxmap)]TJ 0 g 0 G /F8 9.9626 Tf 48.422 0 Td [(A)-222(p)-28(olymorphic)-222(v)56(ariable)-223(of)-222(a)-222(t)28(yp)-28(e)-222(that)-222(is)-223(an)28(y)-222(extension)-222(of)-222(the)-223(indx)]TJ ET q -1 0 0 1 476.354 600.392 cm +1 0 0 1 476.354 473.524 cm []0 d 0 J 0.398 w 0 0 m 2.989 0 l S Q BT -/F8 9.9626 Tf 479.343 600.193 Td [(map)]TJ -303.732 -11.955 Td [(t)28(yp)-28(e)-333(describ)-28(ed)-333(ab)-28(o)28(v)27(e.)]TJ +/F8 9.9626 Tf 479.343 473.324 Td [(map)]TJ -303.732 -11.955 Td [(t)28(yp)-28(e)-333(describ)-28(ed)-333(ab)-28(o)28(v)27(e.)]TJ 0 g 0 G -/F27 9.9626 Tf -24.906 -31.549 Td [(halo)]TJ +/F27 9.9626 Tf -24.906 -32.909 Td [(halo)]TJ ET q -1 0 0 1 172.238 556.889 cm +1 0 0 1 172.238 428.66 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 175.675 556.689 Td [(index)]TJ +/F27 9.9626 Tf 175.675 428.46 Td [(index)]TJ 0 g 0 G /F8 9.9626 Tf 32.191 0 Td [(A)-384(list)-384(of)-385(the)-384(halo)-384(and)-384(b)-28(oundary)-384(elemen)28(ts)-384(for)-385(the)-384(curren)28(t)-384(pro)-28(cess)]TJ -32.255 -11.955 Td [(to)-347(b)-28(e)-347(exc)28(hanged)-347(with)-347(other)-348(p)1(ro)-28(cesses;)-354(for)-348(eac)28(h)-347(pro)-28(cesses)-347(with)-347(whic)28(h)-347(it)-347(is)]TJ 0 -11.955 Td [(necessary)-334(to)-333(comm)28(unicate:)]TJ 0 g 0 G - 9.188 -19.593 Td [(1.)]TJ + 9.188 -20.954 Td [(1.)]TJ 0 g 0 G [-500(Pro)-28(cess)-333(iden)28(ti\014er;)]TJ 0 g 0 G - 0 -15.608 Td [(2.)]TJ + 0 -16.454 Td [(2.)]TJ 0 g 0 G [-500(Num)28(b)-28(er)-333(of)-334(p)-27(oin)27(ts)-333(to)-333(b)-28(e)-333(receiv)27(ed;)]TJ 0 g 0 G - 0 -15.609 Td [(3.)]TJ + 0 -16.454 Td [(3.)]TJ 0 g 0 G [-500(Indices)-333(of)-334(p)-27(oin)27(ts)-333(to)-333(b)-28(e)-333(rece)-1(i)1(v)27(ed;)]TJ 0 g 0 G - 0 -15.608 Td [(4.)]TJ + 0 -16.455 Td [(4.)]TJ 0 g 0 G [-500(Num)28(b)-28(er)-333(of)-334(p)-27(oin)27(ts)-333(to)-333(b)-28(e)-333(sen)27(t;)]TJ 0 g 0 G - 0 -15.608 Td [(5.)]TJ + 0 -16.454 Td [(5.)]TJ 0 g 0 G - [-500(Indices)-333(of)-334(p)-27(oin)27(ts)-333(to)-333(b)-28(e)-333(sen)27(t;)]TJ -9.188 -19.593 Td [(The)-313(list)-313(ma)28(y)-312(c)-1(on)28(tain)-312(an)-313(arbitrary)-313(n)28(um)28(b)-28(er)-312(of)-313(groups;)-320(its)-312(end)-313(is)-313(mark)28(ed)-313(b)28(y)]TJ 0 -11.955 Td [(a)-333(-1.)]TJ 0 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(allo)-28(catable)-333(in)28(teger)-334(arr)1(a)27(y)-333(of)-333(rank)-334(one.)]TJ + [-500(Indices)-333(of)-334(p)-27(oin)27(ts)-333(to)-333(b)-28(e)-333(sen)27(t;)]TJ -9.188 -20.954 Td [(The)-313(list)-313(ma)28(y)-312(c)-1(on)28(tain)-312(an)-313(arbitrary)-313(n)28(um)28(b)-28(er)-312(of)-313(groups;)-320(its)-312(end)-313(is)-313(mark)28(ed)-313(b)28(y)]TJ 0 -11.955 Td [(a)-333(-1.)]TJ 0 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(allo)-28(catable)-333(in)28(teger)-334(arr)1(a)27(y)-333(of)-333(rank)-334(one.)]TJ 0 g 0 G -/F27 9.9626 Tf -24.906 -19.594 Td [(ext)]TJ +/F27 9.9626 Tf -24.906 -20.954 Td [(ext)]TJ ET q -1 0 0 1 167.146 387.856 cm +1 0 0 1 167.146 252.16 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 170.583 387.656 Td [(index)]TJ +/F27 9.9626 Tf 170.583 251.961 Td [(index)]TJ 0 g 0 G /F8 9.9626 Tf 32.191 0 Td [(A)-274(list)-274(of)-274(elemen)28(t)-274(indices)-274(to)-273(b)-28(e)-274(exc)28(hanged)-274(to)-274(implemen)28(t)-274(the)-274(mapping)]TJ -27.163 -11.955 Td [(b)-28(et)28(w)28(een)-334(a)-333(base)-333(descriptor)-334(and)-333(a)-333(descriptor)-334(with)-333(o)28(v)28(erlap.)]TJ 0 g 0 G -/F27 9.9626 Tf -24.906 -19.593 Td [(o)32(vrlap)]TJ +/F27 9.9626 Tf -24.906 -20.954 Td [(o)32(vrlap)]TJ ET q -1 0 0 1 182.684 356.307 cm +1 0 0 1 182.684 219.251 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 186.122 356.108 Td [(index)]TJ +/F27 9.9626 Tf 186.122 219.052 Td [(index)]TJ 0 g 0 G /F8 9.9626 Tf 32.191 0 Td [(A)-320(list)-320(of)-320(the)-320(o)28(v)28(erlap)-320(eleme)-1(n)28(ts)-320(for)-320(the)-320(curren)28(t)-320(pro)-28(cess,)-322(organized)]TJ -42.702 -11.955 Td [(in)-333(groups)-334(lik)28(e)-333(the)-333(previous)-334(v)28(ector:)]TJ 0 g 0 G - 9.188 -19.593 Td [(1.)]TJ + 9.188 -20.954 Td [(1.)]TJ 0 g 0 G [-500(Pro)-28(cess)-333(iden)28(ti\014er;)]TJ 0 g 0 G - 0 -15.608 Td [(2.)]TJ + 0 -16.454 Td [(2.)]TJ 0 g 0 G [-500(Num)28(b)-28(er)-333(of)-334(p)-27(oin)27(ts)-333(to)-333(b)-28(e)-333(receiv)27(ed;)]TJ 0 g 0 G - 0 -15.608 Td [(3.)]TJ + 0 -16.455 Td [(3.)]TJ 0 g 0 G [-500(Indices)-333(of)-334(p)-27(oin)27(ts)-333(to)-333(b)-28(e)-333(rece)-1(i)1(v)27(ed;)]TJ 0 g 0 G - 0 -15.609 Td [(4.)]TJ + 0 -16.454 Td [(4.)]TJ 0 g 0 G [-500(Num)28(b)-28(er)-333(of)-334(p)-27(oin)27(ts)-333(to)-333(b)-28(e)-333(sen)27(t;)]TJ 0 g 0 G - 0 -15.608 Td [(5.)]TJ -0 g 0 G - [-500(Indices)-333(of)-334(p)-27(oin)27(ts)-333(to)-333(b)-28(e)-333(sen)27(t;)]TJ -9.188 -19.593 Td [(The)-313(list)-313(ma)28(y)-312(c)-1(on)28(tain)-312(an)-313(arbitrary)-313(n)28(um)28(b)-28(er)-312(of)-313(groups;)-320(its)-312(end)-313(is)-313(mark)28(ed)-313(b)28(y)]TJ 0 -11.955 Td [(a)-333(-1.)]TJ 0 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(allo)-28(catable)-333(in)28(teger)-334(arr)1(a)27(y)-333(of)-333(rank)-334(one.)]TJ -0 g 0 G -/F27 9.9626 Tf -24.906 -19.594 Td [(o)32(vr)]TJ -ET -q -1 0 0 1 167.568 199.23 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q -BT -/F27 9.9626 Tf 171.005 199.03 Td [(mst)]TJ -ET -q -1 0 0 1 190.214 199.23 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q -BT -/F27 9.9626 Tf 193.651 199.03 Td [(idx)]TJ -0 g 0 G -/F8 9.9626 Tf 20.576 0 Td [(A)-367(list)-368(to)-367(retriev)27(e)-367(the)-368(v)56(alue)-368(of)-367(eac)28(h)-368(o)28(v)28(erlap)-368(elemen)28(t)-368(from)-367(the)-368(re-)]TJ -38.616 -11.955 Td [(sp)-28(ectiv)28(e)-333(m)-1(aster)-333(pro)-28(cess.)]TJ 0 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(allo)-28(catable)-333(in)28(teger)-334(arr)1(a)27(y)-333(of)-333(rank)-334(one.)]TJ -0 g 0 G -/F27 9.9626 Tf -24.906 -19.593 Td [(o)32(vrlap)]TJ -ET -q -1 0 0 1 182.684 155.726 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q -BT -/F27 9.9626 Tf 186.122 155.527 Td [(elem)]TJ -0 g 0 G -/F8 9.9626 Tf 28.213 0 Td [(F)83(or)-333(all)-333(o)28(v)27(erlap)-333(p)-28(oin)28(ts)-333(b)-28(elonging)-333(to)-334(th)-333(ecurren)28(t)-333(pro)-28(cess:)]TJ -0 g 0 G - -29.536 -19.593 Td [(1.)]TJ -0 g 0 G - [-500(Ov)28(erlap)-333(p)-28(oin)28(t)-334(index;)]TJ -0 g 0 G - 0 -15.608 Td [(2.)]TJ + 0 -16.454 Td [(5.)]TJ 0 g 0 G - [-500(Num)28(b)-28(er)-333(of)-334(pro)-27(cess)-1(es)-333(sharing)-333(that)-333(o)27(v)28(erlap)-333(p)-28(oin)28(ts;)]TJ + [-500(Indices)-333(of)-334(p)-27(oin)27(ts)-333(to)-333(b)-28(e)-333(sen)27(t;)]TJ 0 g 0 G 132.78 -29.888 Td [(10)]TJ 0 g 0 G ET endstream endobj -688 0 obj << +738 0 obj << /Type /Page -/Contents 689 0 R -/Resources 687 0 R +/Contents 739 0 R +/Resources 737 0 R /MediaBox [0 0 595.276 841.89] -/Parent 674 0 R -/Annots [ 686 0 R ] +/Parent 723 0 R +/Annots [ 736 0 R ] >> endobj -686 0 obj << +736 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [452.103 627.922 459.077 639.877] +/Rect [452.103 502.746 459.077 514.702] /Subtype /Link /A << /S /GoTo /D (section.6) >> >> endobj -690 0 obj << -/D [688 0 R /XYZ 150.705 740.998 null] ->> endobj -691 0 obj << -/D [688 0 R /XYZ 150.705 525.03 null] ->> endobj -692 0 obj << -/D [688 0 R /XYZ 150.705 509.422 null] +740 0 obj << +/D [738 0 R /XYZ 150.705 740.998 null] >> endobj -693 0 obj << -/D [688 0 R /XYZ 150.705 493.814 null] +741 0 obj << +/D [738 0 R /XYZ 150.705 395.864 null] >> endobj -694 0 obj << -/D [688 0 R /XYZ 150.705 478.206 null] +742 0 obj << +/D [738 0 R /XYZ 150.705 379.41 null] >> endobj -695 0 obj << -/D [688 0 R /XYZ 150.705 462.598 null] +743 0 obj << +/D [738 0 R /XYZ 150.705 362.955 null] >> endobj -696 0 obj << -/D [688 0 R /XYZ 150.705 336.404 null] +744 0 obj << +/D [738 0 R /XYZ 150.705 346.501 null] >> endobj -697 0 obj << -/D [688 0 R /XYZ 150.705 320.796 null] +745 0 obj << +/D [738 0 R /XYZ 150.705 330.046 null] >> endobj -698 0 obj << -/D [688 0 R /XYZ 150.705 305.188 null] +746 0 obj << +/D [738 0 R /XYZ 150.705 198.411 null] >> endobj -699 0 obj << -/D [688 0 R /XYZ 150.705 289.58 null] +747 0 obj << +/D [738 0 R /XYZ 150.705 181.957 null] >> endobj -700 0 obj << -/D [688 0 R /XYZ 150.705 273.972 null] +748 0 obj << +/D [738 0 R /XYZ 150.705 165.502 null] >> endobj -701 0 obj << -/D [688 0 R /XYZ 150.705 147.778 null] +749 0 obj << +/D [738 0 R /XYZ 150.705 149.048 null] >> endobj -702 0 obj << -/D [688 0 R /XYZ 150.705 132.17 null] +750 0 obj << +/D [738 0 R /XYZ 150.705 132.593 null] >> endobj -687 0 obj << -/Font << /F14 619 0 R /F8 438 0 R /F27 437 0 R >> +737 0 obj << +/Font << /F8 478 0 R /F14 667 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -705 0 obj << -/Length 7328 +753 0 obj << +/Length 5551 >> stream 0 g 0 G 0 g 0 G +BT +/F8 9.9626 Tf 124.802 706.129 Td [(The)-313(list)-312(ma)27(y)-312(con)27(tain)-312(an)-313(arbitrary)-313(n)28(um)28(b)-28(er)-312(of)-313(groups;)-320(its)-312(end)-313(is)-313(mark)28(ed)-313(b)28(y)]TJ 0 -11.955 Td [(a)-333(-1.)]TJ 0 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(allo)-28(catable)-333(in)28(teger)-333(arra)27(y)-333(of)-333(rank)-334(on)1(e)-1(.)]TJ 0 g 0 G +/F27 9.9626 Tf -24.907 -20.079 Td [(o)32(vr)]TJ +ET +q +1 0 0 1 116.758 662.339 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 120.195 662.14 Td [(mst)]TJ +ET +q +1 0 0 1 139.405 662.339 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q BT -/F8 9.9626 Tf 133.99 706.129 Td [(3.)]TJ +/F27 9.9626 Tf 142.842 662.14 Td [(idx)]TJ 0 g 0 G - [-500(Index)-333(of)-334(a)-333(\134master")-333(pro)-28(cess:)]TJ -9.188 -19.963 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(allo)-28(catable)-333(in)28(teger)-333(arra)27(y)-333(of)-333(rank)-334(t)28(w)28(o.)]TJ +/F8 9.9626 Tf 20.575 0 Td [(A)-368(l)1(is)-1(t)-367(to)-368(r)1(e)-1(tri)1(e)-1(v)28(e)-367(the)-368(v)56(alue)-368(of)-367(eac)28(h)-368(o)28(v)28(erlap)-368(elemen)28(t)-368(from)-367(the)-368(re-)]TJ -38.615 -11.955 Td [(sp)-28(ectiv)28(e)-333(mas)-1(ter)-333(pro)-28(cess.)]TJ 0 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(allo)-28(catable)-333(in)28(teger)-333(arra)27(y)-333(of)-333(rank)-334(on)1(e)-1(.)]TJ 0 g 0 G -/F27 9.9626 Tf -24.907 -19.962 Td [(bnd)]TJ +/F27 9.9626 Tf -24.907 -20.079 Td [(o)32(vrlap)]TJ ET q -1 0 0 1 119.678 666.403 cm +1 0 0 1 131.875 618.351 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 123.115 666.204 Td [(elem)]TJ +/F27 9.9626 Tf 135.312 618.151 Td [(elem)]TJ 0 g 0 G -/F8 9.9626 Tf 28.213 0 Td [(A)-270(list)-269(of)-270(all)-269(b)-28(oundary)-269(p)-28(oin)28(ts,)-283(i.e.)-423(p)-28(oin)28(ts)-269(that)-270(ha)28(v)28(e)-270(a)-269(connection)-270(with)]TJ -26.526 -11.955 Td [(other)-333(pro)-28(cesses.)]TJ -24.907 -19.954 Td [(The)-333(F)83(ortran)-333(2003)-334(declaration)-333(for)]TJ/F30 9.9626 Tf 146.645 0 Td [(psb_desc_type)]TJ/F8 9.9626 Tf 71.315 0 Td [(structures)-333(is)-334(as)-333(follo)28(ws:)]TJ +/F8 9.9626 Tf 28.214 0 Td [(F)83(or)-333(all)-333(o)28(v)27(erlap)-333(p)-28(oin)28(ts)-333(b)-28(elonging)-333(to)-334(th)-333(ecurren)28(t)-333(pro)-28(cess:)]TJ 0 g 0 G + -29.536 -20.078 Td [(1.)]TJ 0 g 0 G + [-500(Ov)28(erlap)-333(p)-28(oin)28(t)-334(index;)]TJ 0 g 0 G -ET + 0 -16.017 Td [(2.)]TJ +0 g 0 G + [-500(Num)28(b)-28(er)-333(of)-334(pr)1(o)-28(cesses)-334(sharing)-333(that)-333(o)27(v)28(erlap)-333(p)-28(oin)28(ts;)]TJ +0 g 0 G + 0 -16.017 Td [(3.)]TJ +0 g 0 G + [-500(Index)-333(of)-334(a)-333(\134master")-333(pro)-28(cess:)]TJ -9.188 -20.078 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(allo)-28(catable)-333(in)28(teger)-333(arra)27(y)-333(of)-333(rank)-334(t)28(w)28(o.)]TJ +0 g 0 G +/F27 9.9626 Tf -24.907 -20.079 Td [(bnd)]TJ +ET +q +1 0 0 1 119.678 526.082 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 123.115 525.882 Td [(elem)]TJ +0 g 0 G +/F8 9.9626 Tf 28.213 0 Td [(A)-270(list)-269(of)-270(all)-269(b)-28(oundary)-269(p)-28(oin)28(ts,)-283(i.e.)-423(p)-28(oin)28(ts)-269(that)-270(ha)28(v)28(e)-270(a)-269(connection)-270(with)]TJ -26.526 -11.955 Td [(other)-333(pro)-28(cesses.)]TJ -24.907 -20.04 Td [(The)-333(F)83(ortran)-333(2003)-334(declaration)-333(for)]TJ/F30 9.9626 Tf 146.645 0 Td [(psb_desc_type)]TJ/F8 9.9626 Tf 71.315 0 Td [(structures)-333(is)-334(as)-333(follo)28(ws:)]TJ +0 g 0 G +0 g 0 G +0 g 0 G +ET q -1 0 0 1 107.053 609.946 cm +1 0 0 1 107.053 469.48 cm []0 d 0 J 0.398 w 0 0 m 329.396 0 l S Q q -1 0 0 1 107.252 489.863 cm +1 0 0 1 107.252 349.396 cm []0 d 0 J 0.398 w 0 0 m 0 119.884 l S Q 0 g 0 G 0 g 0 G BT -/F30 9.9626 Tf 115.422 595.688 Td [(type)-525(psb_desc_type)]TJ 20.921 -11.955 Td [(class\050psb_indx_map\051,)-525(allocatable)-525(::)-525(indxmap)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-1050(::)-525(halo_index\050:\051)]TJ 0 -11.956 Td [(integer,)-525(allocatable)-1050(::)-525(ext_index\050:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-1050(::)-525(ovrlap_index\050:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-1050(::)-525(ovrlap_elem\050:,:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-1050(::)-525(ovr_mst_idx\050:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-1050(::)-525(bnd_elem\050:\051)]TJ -20.921 -11.955 Td [(end)-525(type)-525(psb_desc_type)]TJ +/F30 9.9626 Tf 115.422 455.222 Td [(type)-525(psb_desc_type)]TJ 20.921 -11.955 Td [(class\050psb_indx_map\051,)-525(allocatable)-525(::)-525(indxmap)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-1050(::)-525(halo_index\050:\051)]TJ 0 -11.956 Td [(integer,)-525(allocatable)-1050(::)-525(ext_index\050:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-1050(::)-525(ovrlap_index\050:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-1050(::)-525(ovrlap_elem\050:,:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-1050(::)-525(ovr_mst_idx\050:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-1050(::)-525(bnd_elem\050:\051)]TJ -20.921 -11.956 Td [(end)-525(type)-525(psb_desc_type)]TJ ET q -1 0 0 1 436.25 489.863 cm +1 0 0 1 436.25 349.396 cm []0 d 0 J 0.398 w 0 0 m 0 119.884 l S Q q -1 0 0 1 107.053 489.663 cm +1 0 0 1 107.053 349.197 cm []0 d 0 J 0.398 w 0 0 m 329.396 0 l S Q BT -/F8 9.9626 Tf 99.895 461.624 Td [(Figure)-464(3:)-705(The)-464(PSBLAS)-464(de\014ned)-464(data)-464(t)28(yp)-28(e)-464(that)-463(con)27(tains)-464(th)1(e)-464(com)-1(m)28(unication)]TJ 0 -11.955 Td [(descriptor.)]TJ +/F8 9.9626 Tf 99.895 321.158 Td [(Figure)-464(3:)-705(The)-464(PSBLAS)-464(de\014ned)-464(data)-464(t)28(yp)-28(e)-464(that)-463(con)27(tains)-464(th)1(e)-464(com)-1(m)28(unication)]TJ 0 -11.955 Td [(descriptor.)]TJ 0 g 0 G - 14.944 -23.662 Td [(A)-445(comm)28(unication)-445(descriptor)-445(asso)-28(ciated)-445(with)-445(a)-445(sparse)-445(matrix)-445(has)-445(a)-445(state,)]TJ -14.944 -11.955 Td [(whic)28(h)-334(can)-333(tak)28(e)-333(the)-334(follo)28(wing)-333(v)55(alues:)]TJ + 14.944 -23.749 Td [(A)-445(comm)28(unication)-445(descriptor)-445(asso)-28(ciated)-445(with)-445(a)-445(sparse)-445(matrix)-445(has)-445(a)-445(state,)]TJ -14.944 -11.955 Td [(whic)28(h)-334(can)-333(tak)28(e)-333(the)-334(follo)28(wing)-333(v)55(alues:)]TJ 0 g 0 G -/F27 9.9626 Tf 0 -19.953 Td [(Build:)]TJ +/F27 9.9626 Tf 0 -20.04 Td [(Build:)]TJ 0 g 0 G /F8 9.9626 Tf 35.409 0 Td [(State)-306(en)28(tered)-306(after)-307(the)-306(\014rst)-306(allo)-28(cation,)-311(and)-306(b)-28(efore)-306(the)-306(\014rst)-306(assem)27(bly;)-315(in)]TJ -10.502 -11.955 Td [(this)-224(state)-223(it)-224(is)-223(p)-28(ossible)-224(to)-223(add)-224(comm)28(unication)-224(requiremen)28(ts)-224(among)-223(di\013eren)27(t)]TJ 0 -11.955 Td [(pro)-28(cesses.)]TJ 0 g 0 G -/F27 9.9626 Tf -24.907 -19.963 Td [(Assem)32(bled:)]TJ +/F27 9.9626 Tf -24.907 -20.079 Td [(Assem)32(bled:)]TJ 0 g 0 G -/F8 9.9626 Tf 61.508 0 Td [(State)-351(en)28(tered)-351(after)-351(the)-350(assem)27(bly;)-359(computations)-351(using)-351(the)-350(ass)-1(o)-27(ci-)]TJ -36.601 -11.955 Td [(ated)-392(sparse)-391(matrix,)-406(suc)28(h)-392(as)-391(m)-1(atr)1(ix-v)27(ector)-391(pro)-28(ducts,)-406(are)-392(only)-391(p)-28(ossible)-391(in)]TJ 0 -11.955 Td [(this)-333(state.)]TJ/F27 9.9626 Tf -24.907 -25.946 Td [(3.1.1)-1150(Named)-383(Constan)31(ts)]TJ -0 g 0 G - 0 -18.406 Td [(psb)]TJ +/F8 9.9626 Tf 61.508 0 Td [(State)-351(en)28(tered)-351(after)-351(the)-350(assem)27(bly;)-359(computations)-351(using)-351(the)-350(ass)-1(o)-27(ci-)]TJ -36.601 -11.955 Td [(ated)-392(sparse)-391(matrix,)-406(suc)28(h)-392(as)-391(m)-1(atr)1(ix-v)27(ector)-391(pro)-28(ducts,)-406(are)-392(only)-391(p)-28(ossible)-391(in)]TJ 0 -11.955 Td [(this)-333(state.)]TJ/F27 9.9626 Tf -24.907 -26.099 Td [(3.1.1)-1150(Metho)-32(ds)]TJ 0 -18.461 Td [(get)]TJ ET q -1 0 0 1 117.832 282.163 cm +1 0 0 1 116.018 141.199 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 121.269 281.964 Td [(none)]TJ +/F27 9.9626 Tf 119.455 141 Td [(lo)-32(cal)]TJ ET q -1 0 0 1 145.666 282.163 cm +1 0 0 1 143.215 141.199 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -0 g 0 G BT -/F8 9.9626 Tf 154.084 281.964 Td [(Generic)-333(no-op;)]TJ +/F27 9.9626 Tf 146.653 141 Td [(ro)32(ws)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(lo)-32(cal)-383(ro)32(ws)]TJ 0 g 0 G -/F27 9.9626 Tf -54.189 -19.963 Td [(psb)]TJ -ET -q -1 0 0 1 117.832 262.2 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q -BT -/F27 9.9626 Tf 121.269 262.001 Td [(nohalo)]TJ -ET -q -1 0 0 1 154.895 262.2 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q 0 g 0 G -BT -/F8 9.9626 Tf 163.314 262.001 Td [(Do)-333(not)-334(fetc)28(h)-333(halo)-333(elem)-1(en)28(ts;)]TJ +/F30 9.9626 Tf -46.758 -18.46 Td [(nr)-525(=)-525(desc%get_local_rows\050\051)]TJ +0 g 0 G +/F8 9.9626 Tf 166.875 -32.102 Td [(11)]TJ 0 g 0 G -/F27 9.9626 Tf -63.419 -19.963 Td [(psb)]TJ -ET -q -1 0 0 1 117.832 242.238 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q -BT -/F27 9.9626 Tf 121.269 242.038 Td [(halo)]TJ ET -q -1 0 0 1 142.802 242.238 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q +endstream +endobj +752 0 obj << +/Type /Page +/Contents 753 0 R +/Resources 751 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 723 0 R +>> endobj +754 0 obj << +/D [752 0 R /XYZ 99.895 740.998 null] +>> endobj +755 0 obj << +/D [752 0 R /XYZ 99.895 610.122 null] +>> endobj +756 0 obj << +/D [752 0 R /XYZ 99.895 594.105 null] +>> endobj +757 0 obj << +/D [752 0 R /XYZ 99.895 578.088 null] +>> endobj +758 0 obj << +/D [752 0 R /XYZ 147.412 333.113 null] +>> endobj +42 0 obj << +/D [752 0 R /XYZ 99.895 171.454 null] +>> endobj +46 0 obj << +/D [752 0 R /XYZ 99.895 132.596 null] +>> endobj +751 0 obj << +/Font << /F8 478 0 R /F27 477 0 R /F30 664 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +763 0 obj << +/Length 4680 +>> +stream +0 g 0 G +0 g 0 G 0 g 0 G BT -/F8 9.9626 Tf 151.22 242.038 Td [(F)83(etc)28(h)-333(halo)-334(elemen)28(ts)-333(from)-334(neigh)28(b)-27(ouring)-334(pro)-27(ces)-1(ses;)]TJ +/F27 9.9626 Tf 150.705 706.129 Td [(T)32(yp)-32(e:)]TJ +0 g 0 G +/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ +0 g 0 G +/F27 9.9626 Tf -33.797 -23.777 Td [(On)-383(En)32(try)]TJ +0 g 0 G +0 g 0 G + 0 -23.778 Td [(desc)]TJ +0 g 0 G +/F8 9.9626 Tf 26.208 0 Td [(the)-333(comm)27(unication)-333(descriptor.)]TJ -1.302 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf 23.073 0 Td [(.)]TJ +0 g 0 G +/F27 9.9626 Tf -80.358 -36.762 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -23.777 Td [(F)96(unction)-384(v)64(alue)]TJ 0 g 0 G -/F27 9.9626 Tf -51.325 -19.962 Td [(psb)]TJ +/F8 9.9626 Tf 78.386 0 Td [(The)-460(n)28(um)27(b)-27(er)-461(of)-460(lo)-28(cal)-460(ro)28(ws,)-492(i.e.)-825(the)-460(n)28(um)27(b)-27(er)-461(of)-460(ro)28(ws)-460(o)28(wned)]TJ -53.48 -11.956 Td [(b)28(y)-401(the)-401(curren)27(t)-401(pro)-27(ces)-1(s;)-435(as)-401(explained)-401(in)]TJ +0 0 1 rg 0 0 1 RG + [-401(1)]TJ +0 g 0 G + [(,)-418(it)-401(is)-401(equal)-401(to)]TJ/F14 9.9626 Tf 249.678 0 Td [(jI)]TJ/F10 6.9738 Tf 8.192 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.494 Td [(j)]TJ/F8 9.9626 Tf 5.431 0 Td [(+)]TJ/F14 9.9626 Tf 10.413 0 Td [(jB)]TJ/F10 6.9738 Tf 9.311 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.494 Td [(j)]TJ/F8 9.9626 Tf 2.767 0 Td [(.)-648(The)]TJ -292.426 -11.955 Td [(returned)-333(v)55(alue)-333(is)-333(sp)-28(eci\014c)-334(to)-333(the)-333(calling)-334(p)1(ro)-28(cess.)]TJ/F27 9.9626 Tf -24.906 -31.005 Td [(get)]TJ ET q -1 0 0 1 117.832 222.275 cm +1 0 0 1 166.827 531.363 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 121.269 222.076 Td [(sum)]TJ +/F27 9.9626 Tf 170.264 531.164 Td [(lo)-32(cal)]TJ ET q -1 0 0 1 142.388 222.275 cm +1 0 0 1 194.025 531.363 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -0 g 0 G BT -/F8 9.9626 Tf 150.806 222.076 Td [(Sum)-333(o)27(v)28(erlapp)-27(e)-1(d)-333(elemen)28(ts)]TJ +/F27 9.9626 Tf 197.462 531.164 Td [(cols)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(lo)-32(cal)-383(cols)]TJ +0 g 0 G +0 g 0 G +/F30 9.9626 Tf -46.757 -20.182 Td [(nc)-525(=)-525(desc%get_local_cols\050\051)]TJ +0 g 0 G +/F27 9.9626 Tf 0 -24.806 Td [(On)-383(En)32(try)]TJ +0 g 0 G 0 g 0 G -/F27 9.9626 Tf -50.911 -19.963 Td [(psb)]TJ + 0 -23.778 Td [(T)32(yp)-32(e:)]TJ +0 g 0 G +/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ +0 g 0 G +/F27 9.9626 Tf -33.797 -23.777 Td [(desc)]TJ +0 g 0 G +/F8 9.9626 Tf 26.208 0 Td [(the)-333(comm)27(unication)-333(descriptor.)]TJ -1.302 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf 23.073 0 Td [(.)]TJ +0 g 0 G +/F27 9.9626 Tf -80.358 -36.762 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -23.778 Td [(F)96(unction)-384(v)64(alue)]TJ +0 g 0 G +/F8 9.9626 Tf 78.386 0 Td [(The)-361(n)28(um)28(b)-28(er)-360(of)-361(lo)-27(cal)-361(cols,)-367(i.e.)-526(the)-361(n)28(um)28(b)-28(er)-360(of)-361(indices)-360(used)-361(b)28(y)]TJ -53.48 -11.955 Td [(the)-421(curren)28(t)-421(pro)-28(cess,)-443(including)-421(b)-27(oth)-421(lo)-28(cal)-421(and)-421(halo)-421(ind)1(ice)-1(s;)-464(as)-421(explained)]TJ 0 -11.955 Td [(in)]TJ +0 0 1 rg 0 0 1 RG + [-344(1)]TJ +0 g 0 G + [(,)-346(it)-343(is)-344(equal)-343(to)]TJ/F14 9.9626 Tf 81.777 0 Td [(jI)]TJ/F10 6.9738 Tf 8.192 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.494 Td [(j)]TJ/F8 9.9626 Tf 5.049 0 Td [(+)]TJ/F14 9.9626 Tf 10.031 0 Td [(jB)]TJ/F10 6.9738 Tf 9.311 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.494 Td [(j)]TJ/F8 9.9626 Tf 5.049 0 Td [(+)]TJ/F14 9.9626 Tf 10.03 0 Td [(jH)]TJ/F10 6.9738 Tf 11.181 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.494 Td [(j)]TJ/F8 9.9626 Tf 2.768 0 Td [(.)-475(The)-344(returned)-343(v)55(al)1(ue)-344(is)-344(sp)-27(ec)-1(i)1(\014c)-344(to)-344(the)]TJ -153.339 -11.955 Td [(calling)-333(pro)-28(cess.)]TJ/F27 9.9626 Tf -24.906 -31.005 Td [(get)]TJ ET q -1 0 0 1 117.832 202.312 cm +1 0 0 1 166.827 299.455 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 121.269 202.113 Td [(a)32(vg)]TJ +/F27 9.9626 Tf 170.264 299.256 Td [(global)]TJ ET q -1 0 0 1 138.983 202.312 cm +1 0 0 1 200.708 299.455 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -0 g 0 G BT -/F8 9.9626 Tf 147.401 202.113 Td [(Av)28(erage)-334(o)28(v)28(erlapp)-28(ed)-333(elemen)28(ts)]TJ +/F27 9.9626 Tf 204.145 299.256 Td [(ro)32(ws)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(global)-383(ro)32(ws)]TJ +0 g 0 G +0 g 0 G +/F30 9.9626 Tf -53.44 -20.182 Td [(nr)-525(=)-525(desc%get_global_rows\050\051)]TJ +0 g 0 G +/F27 9.9626 Tf 0 -24.807 Td [(On)-383(En)32(try)]TJ +0 g 0 G +0 g 0 G + 0 -23.777 Td [(T)32(yp)-32(e:)]TJ +0 g 0 G +/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ +0 g 0 G +/F27 9.9626 Tf -33.797 -23.777 Td [(desc)]TJ +0 g 0 G +/F8 9.9626 Tf 26.208 0 Td [(the)-333(comm)27(unication)-333(descriptor.)]TJ -1.302 -11.956 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf 23.073 0 Td [(.)]TJ +0 g 0 G +/F27 9.9626 Tf -80.358 -36.762 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -23.777 Td [(F)96(unction)-384(v)64(alue)]TJ +0 g 0 G +/F8 9.9626 Tf 78.386 0 Td [(The)-390(n)28(um)27(b)-27(er)-391(of)-390(global)-390(ro)28(ws,)-405(i.e.)-615(the)-390(size)-391(of)-390(the)-390(global)-390(index)]TJ -53.48 -11.955 Td [(space.)]TJ +0 g 0 G + 141.968 -31.825 Td [(12)]TJ 0 g 0 G -/F27 9.9626 Tf -47.506 -19.962 Td [(psb)]TJ ET -q -1 0 0 1 117.832 182.35 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q +endstream +endobj +762 0 obj << +/Type /Page +/Contents 763 0 R +/Resources 761 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 723 0 R +/Annots [ 759 0 R 760 0 R ] +>> endobj +759 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [351.231 570.638 358.204 582.593] +/Subtype /Link +/A << /S /GoTo /D (section.1) >> +>> endobj +760 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [186.34 338.729 193.314 350.684] +/Subtype /Link +/A << /S /GoTo /D (section.1) >> +>> endobj +764 0 obj << +/D [762 0 R /XYZ 150.705 740.998 null] +>> endobj +50 0 obj << +/D [762 0 R /XYZ 150.705 521.963 null] +>> endobj +54 0 obj << +/D [762 0 R /XYZ 150.705 290.055 null] +>> endobj +761 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F14 667 0 R /F10 666 0 R /F30 664 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +767 0 obj << +/Length 4238 +>> +stream +0 g 0 G +0 g 0 G BT -/F27 9.9626 Tf 121.269 182.151 Td [(comm)]TJ +/F27 9.9626 Tf 99.895 706.129 Td [(get)]TJ ET q -1 0 0 1 151.872 182.35 cm +1 0 0 1 116.018 706.328 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 155.309 182.151 Td [(halo)]TJ +/F27 9.9626 Tf 119.455 706.129 Td [(global)]TJ ET q -1 0 0 1 176.842 182.35 cm +1 0 0 1 149.899 706.328 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -0 g 0 G BT -/F8 9.9626 Tf 185.26 182.151 Td [(Exc)28(hange)-334(d)1(ata)-334(based)-333(on)-333(the)]TJ/F30 9.9626 Tf 126.387 0 Td [(halo_index)]TJ/F8 9.9626 Tf 55.625 0 Td [(list;)]TJ +/F27 9.9626 Tf 153.336 706.129 Td [(cols)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(global)-383(cols)]TJ +0 g 0 G 0 g 0 G -/F27 9.9626 Tf -267.377 -19.963 Td [(psb)]TJ +/F30 9.9626 Tf -53.441 -19.105 Td [(nr)-525(=)-525(desc%get_global_cols\050\051)]TJ +0 g 0 G +/F27 9.9626 Tf 0 -23.072 Td [(T)32(yp)-32(e:)]TJ +0 g 0 G +/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ +0 g 0 G +/F27 9.9626 Tf -33.797 -21.464 Td [(On)-383(En)32(try)]TJ +0 g 0 G +0 g 0 G + 0 -21.464 Td [(desc)]TJ +0 g 0 G +/F8 9.9626 Tf 26.209 0 Td [(the)-333(comm)27(unication)-333(descriptor.)]TJ -1.302 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf 23.073 0 Td [(.)]TJ +0 g 0 G +/F27 9.9626 Tf -80.359 -35.027 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -21.464 Td [(F)96(unction)-384(v)64(alue)]TJ +0 g 0 G +/F8 9.9626 Tf 78.387 0 Td [(The)-273(n)28(um)28(b)-28(er)-273(of)-272(global)-273(cols;)-293(usually)-273(this)-273(is)-272(e)-1(q)1(ual)-273(to)-273(the)-273(n)28(um)28(b)-28(er)]TJ -53.48 -11.956 Td [(of)-333(global)-334(ro)28(ws.)]TJ +0 g 0 G +0 g 0 G +/F16 11.9552 Tf -24.907 -53.386 Td [(get)]TJ ET q -1 0 0 1 117.832 162.387 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +1 0 0 1 118.794 487.436 cm +[]0 d 0 J 0.398 w 0 0 m 4.035 0 l S Q BT -/F27 9.9626 Tf 121.269 162.188 Td [(comm)]TJ +/F16 11.9552 Tf 122.829 487.236 Td [(con)31(text|Get)-375(comm)31(unica)1(tion)-375(con)31(text)]TJ +0 g 0 G +0 g 0 G +/F30 9.9626 Tf -22.934 -27.844 Td [(ictxt)-525(=)-525(desc%get_context\050\051)]TJ +0 g 0 G +/F27 9.9626 Tf 0 -23.072 Td [(T)32(yp)-32(e:)]TJ +0 g 0 G +/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ +0 g 0 G +/F27 9.9626 Tf -33.797 -21.464 Td [(On)-383(En)32(try)]TJ +0 g 0 G +0 g 0 G + 0 -21.464 Td [(desc)]TJ +0 g 0 G +/F8 9.9626 Tf 26.209 0 Td [(the)-333(comm)27(unication)-333(descriptor.)]TJ -1.302 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf 23.073 0 Td [(.)]TJ +0 g 0 G +/F27 9.9626 Tf -80.359 -35.027 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -21.464 Td [(F)96(unction)-384(v)64(alue)]TJ +0 g 0 G +/F8 9.9626 Tf 78.387 0 Td [(The)-333(comm)27(unication)-333(con)28(text.)]TJ/F27 9.9626 Tf -78.387 -27.937 Td [(psb)]TJ ET q -1 0 0 1 151.872 162.387 cm +1 0 0 1 117.832 297.208 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 155.309 162.188 Td [(ext)]TJ +/F27 9.9626 Tf 121.269 297.009 Td [(cd)]TJ ET q -1 0 0 1 171.75 162.387 cm +1 0 0 1 133.413 297.208 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -0 g 0 G BT -/F8 9.9626 Tf 180.168 162.188 Td [(Exc)28(hange)-334(d)1(ata)-334(based)-333(on)-333(the)]TJ/F30 9.9626 Tf 126.387 0 Td [(ext_index)]TJ/F8 9.9626 Tf 50.394 0 Td [(list;)]TJ -0 g 0 G -/F27 9.9626 Tf -257.054 -19.963 Td [(psb)]TJ +/F27 9.9626 Tf 136.85 297.009 Td [(get)]TJ ET q -1 0 0 1 117.832 142.425 cm +1 0 0 1 152.973 297.208 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 121.269 142.225 Td [(comm)]TJ +/F27 9.9626 Tf 156.41 297.009 Td [(large)]TJ ET q -1 0 0 1 151.872 142.425 cm +1 0 0 1 181.547 297.208 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 155.309 142.225 Td [(o)32(vr)]TJ +/F27 9.9626 Tf 184.984 297.009 Td [(threshold)-268(|)-268(Get)-268(threshold)-269(for)-268(index)-268(mapping)-268(switc)32(h)]TJ +0 g 0 G +0 g 0 G +/F30 9.9626 Tf -85.089 -19.105 Td [(ith)-525(=)-525(psb_cd_get_large_threshold\050\051)]TJ +0 g 0 G +/F27 9.9626 Tf 0 -23.072 Td [(T)32(yp)-32(e:)]TJ +0 g 0 G +/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ +0 g 0 G +/F27 9.9626 Tf -33.797 -21.464 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -21.464 Td [(F)96(unction)-384(v)64(alue)]TJ +0 g 0 G +/F8 9.9626 Tf 78.387 0 Td [(The)-333(curren)28(t)-334(v)56(alue)-334(for)-333(the)-333(size)-334(threshold.)]TJ/F27 9.9626 Tf -78.387 -27.937 Td [(psb)]TJ ET q -1 0 0 1 172.172 142.425 cm +1 0 0 1 117.832 184.166 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -0 g 0 G BT -/F8 9.9626 Tf 180.59 142.225 Td [(Exc)28(hange)-334(d)1(ata)-334(based)-333(on)-333(the)]TJ/F30 9.9626 Tf 126.387 0 Td [(ovrlap_index)]TJ/F8 9.9626 Tf 66.085 0 Td [(list;)]TJ -0 g 0 G -/F27 9.9626 Tf -273.167 -19.962 Td [(psb)]TJ +/F27 9.9626 Tf 121.269 183.967 Td [(cd)]TJ ET q -1 0 0 1 117.832 122.462 cm +1 0 0 1 133.413 184.166 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 121.269 122.263 Td [(comm)]TJ +/F27 9.9626 Tf 136.85 183.967 Td [(set)]TJ ET q -1 0 0 1 151.872 122.462 cm +1 0 0 1 151.764 184.166 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 155.309 122.263 Td [(mo)32(v)]TJ +/F27 9.9626 Tf 155.201 183.967 Td [(large)]TJ ET q -1 0 0 1 177.001 122.462 cm +1 0 0 1 180.338 184.166 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -0 g 0 G BT -/F8 9.9626 Tf 185.419 122.263 Td [(Exc)28(hange)-334(d)1(ata)-334(based)-333(on)-333(the)]TJ/F30 9.9626 Tf 126.388 0 Td [(ovr_mst_idx)]TJ/F8 9.9626 Tf 60.854 0 Td [(list;)]TJ +/F27 9.9626 Tf 183.775 183.967 Td [(threshold)-323(|)-324(Set)-323(threshold)-324(for)-323(index)-323(mapping)-324(switc)32(h)]TJ +0 g 0 G +0 g 0 G +/F30 9.9626 Tf -83.88 -19.106 Td [(call)-525(psb_cd_set_large_threshold\050ith\051)]TJ +0 g 0 G +/F27 9.9626 Tf 0 -23.071 Td [(T)32(yp)-32(e:)]TJ +0 g 0 G +/F8 9.9626 Tf 33.797 0 Td [(Sync)28(hronous.)]TJ +0 g 0 G +/F27 9.9626 Tf -33.797 -21.464 Td [(On)-383(En)32(try)]TJ 0 g 0 G - -105.891 -31.825 Td [(11)]TJ +0 g 0 G +/F8 9.9626 Tf 166.875 -29.888 Td [(13)]TJ 0 g 0 G ET endstream endobj -704 0 obj << +766 0 obj << /Type /Page -/Contents 705 0 R -/Resources 703 0 R +/Contents 767 0 R +/Resources 765 0 R /MediaBox [0 0 595.276 841.89] -/Parent 674 0 R +/Parent 769 0 R >> endobj -706 0 obj << -/D [704 0 R /XYZ 99.895 740.998 null] +768 0 obj << +/D [766 0 R /XYZ 99.895 740.998 null] >> endobj -707 0 obj << -/D [704 0 R /XYZ 99.895 716.092 null] +58 0 obj << +/D [766 0 R /XYZ 99.895 697.426 null] >> endobj -708 0 obj << -/D [704 0 R /XYZ 147.412 473.579 null] +62 0 obj << +/D [766 0 R /XYZ 99.895 469.407 null] >> endobj -42 0 obj << -/D [704 0 R /XYZ 99.895 312.335 null] +66 0 obj << +/D [766 0 R /XYZ 99.895 288.306 null] >> endobj -703 0 obj << -/Font << /F8 438 0 R /F27 437 0 R /F30 616 0 R >> +70 0 obj << +/D [766 0 R /XYZ 99.895 175.264 null] +>> endobj +765 0 obj << +/Font << /F27 477 0 R /F30 664 0 R /F8 478 0 R /F16 475 0 R >> /ProcSet [ /PDF /Text ] >> endobj -712 0 obj << -/Length 7793 +775 0 obj << +/Length 9242 >> stream 0 g 0 G 0 g 0 G +0 g 0 G BT -/F16 11.9552 Tf 150.705 706.129 Td [(3.2)-1125(Sparse)-375(Matrix)-375(data)-375(structure)]TJ/F8 9.9626 Tf 0 -18.452 Td [(The)]TJ/F30 9.9626 Tf 21.748 0 Td [(psb)]TJ +/F27 9.9626 Tf 150.705 706.129 Td [(ith)]TJ +0 g 0 G +/F8 9.9626 Tf 18.984 0 Td [(the)-333(new)-334(threshold)-333(for)-333(comm)27(un)1(ic)-1(ati)1(on)-334(descriptors.)]TJ 5.922 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(global)]TJ/F8 9.9626 Tf 29.756 0 Td [(.)]TJ -62.135 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf 41.898 0 Td [(.)]TJ -71.51 -11.956 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.547 0 Td [(.)]TJ -43.033 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(in)28(teger)-333(v)55(alue)-333(greater)-334(th)1(an)-334(zero.)]TJ -24.906 -22.293 Td [(Note:)-756(the)-490(th)1(re)-1(shol)1(d)-490(v)56(alue)-489(is)-490(only)-489(queried)-489(b)28(y)-489(the)-490(library)-489(at)-489(the)-489(time)-490(a)-489(call)]TJ 0 -11.955 Td [(to)]TJ/F30 9.9626 Tf 13.431 0 Td [(psb_cdall)]TJ/F8 9.9626 Tf 51.648 0 Td [(is)-459(executed,)-491(therefore)-459(c)27(hangin)1(g)-460(the)-459(threshold)-459(has)-459(no)-460(e\013ect)-459(on)]TJ -65.079 -11.955 Td [(comm)28(unication)-464(descriptors)-465(th)1(at)-465(ha)28(v)28(e)-464(already)-464(b)-28(een)-464(initialized.)-837(Moreo)28(v)27(er)-464(the)]TJ 0 -11.956 Td [(threshold)-333(m)28(ust)-334(ha)28(v)28(e)-334(the)-333(same)-333(v)55(alue)-333(on)-333(all)-334(pro)-27(ce)-1(sses.)]TJ/F27 9.9626 Tf 0 -26.393 Td [(3.1.2)-1150(Named)-383(Constan)32(ts)]TJ +0 g 0 G + 0 -18.564 Td [(psb)]TJ ET q -1 0 0 1 188.772 687.876 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 168.641 555.391 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F30 9.9626 Tf 191.91 687.677 Td [(spmat)]TJ +/F27 9.9626 Tf 172.078 555.192 Td [(none)]TJ ET q -1 0 0 1 218.689 687.876 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 196.475 555.391 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -BT -/F30 9.9626 Tf 221.827 687.677 Td [(type)]TJ/F8 9.9626 Tf 25.512 0 Td [(data)-461(structure)-460(c)-1(on)28(tains)-460(all)-461(information)-461(ab)-27(out)-461(the)-461(lo)-28(cal)]TJ -96.634 -11.955 Td [(p)-28(ortion)-350(of)-351(the)-350(sparse)-351(matrix)-350(and)-351(its)-350(storage)-351(mo)-28(de.)-496(Most)-350(of)-351(these)-350(\014elds)-351(are)-350(set)]TJ 0 -11.955 Td [(b)28(y)-373(the)-372(to)-28(ols)-373(routines)-372(when)-373(inserting)-373(a)-372(new)-373(sparse)-373(matrix;)-392(the)-372(user)-373(needs)-373(only)]TJ 0 -11.955 Td [(c)28(ho)-28(ose,)-333(if)-334(he/she)-333(so)-333(whishes,)-334(a)-333(sp)-28(eci\014c)-333(matrix)-334(storage)-333(mo)-28(de.)]TJ 14.944 -11.989 Td [(The)]TJ -0 g 0 G -/F27 9.9626 Tf -14.944 -20.026 Td [(aspk)]TJ -0 g 0 G -/F8 9.9626 Tf 27.481 0 Td [(Con)28(tains)-334(v)56(alues)-333(of)-334(the)-333(lo)-28(cal)-333(distributed)-333(sparse)-334(matrix.)]TJ -2.575 -11.955 Td [(Sp)-28(eci\014ed)-431(as:)-639(an)-431(allo)-27(catable)-431(arra)28(y)-431(of)-431(rank)-431(one)-430(of)-431(t)28(yp)-28(e)-431(corresp)-28(onding)-430(to)]TJ 0 -11.955 Td [(matrix)-333(en)27(tries)-333(t)28(yp)-28(e.)]TJ -0 g 0 G -/F27 9.9626 Tf -24.906 -20.059 Td [(ia1)]TJ -0 g 0 G -/F8 9.9626 Tf 19.461 0 Td [(Holds)-266(in)28(teger)-267(infor)1(m)-1(ation)-266(on)-266(distributed)-266(sparse)-266(matrix.)-422(Actual)-266(information)]TJ 5.445 -11.956 Td [(will)-333(dep)-28(end)-333(on)-334(data)-333(format)-333(used.)]TJ 0 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(allo)-28(catable)-333(in)28(teger)-334(arr)1(a)27(y)-333(of)-333(rank)-334(one.)]TJ -0 g 0 G -/F27 9.9626 Tf -24.906 -20.059 Td [(ia2)]TJ -0 g 0 G -/F8 9.9626 Tf 19.461 0 Td [(Holds)-266(in)28(teger)-267(infor)1(m)-1(ation)-266(on)-266(distributed)-266(sparse)-266(matrix.)-422(Actual)-266(information)]TJ 5.445 -11.955 Td [(will)-333(dep)-28(end)-333(on)-334(data)-333(format)-333(used.)]TJ 0 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(allo)-28(catable)-333(in)28(teger)-334(arr)1(a)27(y)-333(of)-333(rank)-334(one.)]TJ -0 g 0 G -/F27 9.9626 Tf -24.906 -20.06 Td [(infoa)]TJ 0 g 0 G -/F8 9.9626 Tf 29.327 0 Td [(On)-435(en)28(try)-434(can)-435(hold)-435(auxili)1(ary)-435(information)-435(on)-434(distributed)-435(sparse)-434(matrix.)]TJ -4.421 -11.955 Td [(Actual)-333(information)-334(will)-333(dep)-28(end)-333(on)-333(data)-333(format)-334(used.)]TJ 0 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(in)28(teger)-333(arra)27(y)-333(of)-333(length)]TJ/F30 9.9626 Tf 172.548 0 Td [(psb_ifasize_)]TJ/F8 9.9626 Tf 62.764 0 Td [(.)]TJ -0 g 0 G -/F27 9.9626 Tf -260.218 -20.059 Td [(\014da)]TJ -0 g 0 G -/F8 9.9626 Tf 23.28 0 Td [(De\014nes)-333(the)-334(format)-333(of)-333(the)-334(distributed)-333(sparse)-333(matrix.)]TJ 1.626 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(string)-333(of)-333(le)-1(n)1(gth)-334(5)]TJ -0 g 0 G -/F27 9.9626 Tf -24.906 -20.06 Td [(descra)]TJ -0 g 0 G -/F8 9.9626 Tf 36.496 0 Td [(Describ)-28(e)-333(the)-334(c)28(haracteristic)-333(of)-333(the)-334(distributed)-333(sparse)-333(matrix.)]TJ -11.59 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(arra)28(y)-333(of)-333(c)27(haracter)-333(of)-333(length)-334(9.)]TJ -0 g 0 G -/F27 9.9626 Tf -24.906 -20.059 Td [(pl)]TJ +BT +/F8 9.9626 Tf 204.894 555.192 Td [(Generic)-333(no-op;)]TJ 0 g 0 G -/F8 9.9626 Tf 14.529 0 Td [(Sp)-28(eci\014es)-352(the)-353(lo)-28(cal)-352(ro)28(w)-353(p)-28(erm)28(utation)-352(of)-353(distributed)-352(sparse)-353(matrix.)-502(If)-353(pl\0501\051)-352(is)]TJ 10.377 -11.955 Td [(equal)-333(to)-334(0,)-333(then)-333(there)-334(isn't)-333(ro)28(w)-333(p)-28(erm)28(utation.)]TJ 0 -11.955 Td [(Sp)-28(eci\014ed)-302(as:)-429(an)-302(allo)-28(catable)-302(in)28(teger)-302(arra)28(y)-302(of)-302(dimension)-302(equal)-303(to)-302(n)28(um)28(b)-28(er)-302(of)]TJ 0 -11.955 Td [(lo)-28(cal)-333(ro)28(w)-334(\050matrix)]TJ +/F27 9.9626 Tf -54.189 -20.301 Td [(psb)]TJ ET q -1 0 0 1 251.815 344.224 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +1 0 0 1 168.641 535.09 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F8 9.9626 Tf 254.804 344.025 Td [(data[psb)]TJ +/F27 9.9626 Tf 172.078 534.891 Td [(nohalo)]TJ ET q -1 0 0 1 292.54 344.224 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +1 0 0 1 205.705 535.09 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q +0 g 0 G BT -/F8 9.9626 Tf 295.529 344.025 Td [(n)]TJ +/F8 9.9626 Tf 214.123 534.891 Td [(Do)-333(not)-334(fetc)28(h)-333(halo)-333(e)-1(l)1(e)-1(men)28(ts;)]TJ +0 g 0 G +/F27 9.9626 Tf -63.418 -20.301 Td [(psb)]TJ ET q -1 0 0 1 301.661 344.224 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +1 0 0 1 168.641 514.789 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F8 9.9626 Tf 304.65 344.025 Td [(ro)28(w)]TJ +/F27 9.9626 Tf 172.078 514.59 Td [(halo)]TJ ET q -1 0 0 1 321.05 344.224 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +1 0 0 1 193.611 514.789 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -BT -/F8 9.9626 Tf 324.039 344.025 Td [(]\051)]TJ 0 g 0 G -/F27 9.9626 Tf -173.334 -20.06 Td [(pr)]TJ +BT +/F8 9.9626 Tf 202.03 514.59 Td [(F)83(etc)28(h)-333(halo)-333(e)-1(lemen)28(ts)-333(from)-333(neigh)27(b)-27(ouring)-334(pro)-27(cesse)-1(s;)]TJ 0 g 0 G -/F8 9.9626 Tf 16.065 0 Td [(Sp)-28(eci\014es)-512(the)-512(lo)-28(cal)-512(column)-512(p)-27(erm)27(u)1(tation)-512(of)-512(distributed)-512(sparse)-512(matrix.)-981(If)]TJ 8.842 -11.955 Td [(PR\0501\051)-333(is)-334(equal)-333(to)-333(0,)-334(then)-333(there)-333(isn't)-333(c)-1(olu)1(m)-1(n)1(m)-334(p)-28(erm)28(utation.)]TJ 0 -11.955 Td [(Sp)-28(eci\014ed)-302(as:)-429(an)-302(allo)-27(c)-1(atab)1(le)-303(in)28(teger)-302(arra)28(y)-302(of)-302(dimension)-302(equal)-302(to)-303(n)28(um)28(b)-28(er)-302(of)]TJ 0 -11.955 Td [(lo)-28(cal)-333(ro)28(w)-334(\050matrix)]TJ +/F27 9.9626 Tf -51.325 -20.301 Td [(psb)]TJ ET q -1 0 0 1 251.815 288.299 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +1 0 0 1 168.641 494.489 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F8 9.9626 Tf 254.804 288.1 Td [(data[psb)]TJ +/F27 9.9626 Tf 172.078 494.289 Td [(sum)]TJ ET q -1 0 0 1 292.54 288.299 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +1 0 0 1 193.197 494.489 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q +0 g 0 G BT -/F8 9.9626 Tf 295.529 288.1 Td [(n)]TJ +/F8 9.9626 Tf 201.616 494.289 Td [(Sum)-333(o)27(v)28(erlapp)-27(ed)-334(elemen)28(ts)]TJ +0 g 0 G +/F27 9.9626 Tf -50.911 -20.3 Td [(psb)]TJ ET q -1 0 0 1 301.661 288.299 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +1 0 0 1 168.641 474.188 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F8 9.9626 Tf 304.65 288.1 Td [(col)]TJ +/F27 9.9626 Tf 172.078 473.989 Td [(a)32(vg)]TJ ET q -1 0 0 1 317.424 288.299 cm -[]0 d 0 J 0.398 w 0 0 m 2.989 0 l S +1 0 0 1 189.792 474.188 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -BT -/F8 9.9626 Tf 320.413 288.1 Td [(]\051)]TJ -0 g 0 G -/F27 9.9626 Tf -169.708 -20.059 Td [(m)]TJ 0 g 0 G -/F8 9.9626 Tf 14.529 0 Td [(Num)28(b)-28(er)-244(of)-243(ro)28(w)-1(s;)-273(if)-244(ro)28(w)-244(indices)-243(are)-244(stored)-244(explicitly)84(,)-262(as)-244(in)-243(Co)-28(ordinate)-244(Storage,)]TJ 10.377 -11.956 Td [(should)-225(b)-27(e)-225(greater)-225(than)-225(or)-224(e)-1(q)1(ual)-225(to)-225(the)-225(maxim)28(um)-225(ro)28(w)-225(index)-224(actually)-225(presen)28(t)]TJ 0 -11.955 Td [(in)-333(the)-334(sparse)-333(matrix.)-444(Sp)-28(eci\014ed)-334(as:)-444(in)28(teger)-334(v)56(ariable.)]TJ -0 g 0 G -/F27 9.9626 Tf -24.906 -20.059 Td [(k)]TJ -0 g 0 G -/F8 9.9626 Tf 11.028 0 Td [(Num)28(b)-28(er)-338(of)-338(columns;)-340(if)-338(column)-338(indices)-338(are)-338(stored)-338(explicitly)84(,)-339(as)-338(in)-338(Co)-28(ordinate)]TJ 13.878 -11.955 Td [(Storage)-227(or)-227(Compressed)-227(Sparse)-227(Ro)28(ws,)-248(should)-227(b)-28(e)-227(greater)-227(than)-227(or)-227(equal)-226(to)-227(the)]TJ 0 -11.955 Td [(maxim)28(um)-374(column)-374(index)-374(actually)-374(presen)28(t)-374(in)-374(the)-374(sparse)-374(matrix.)-567(Sp)-27(eci\014ed)]TJ 0 -11.955 Td [(as:)-445(i)1(n)27(teger)-333(v)56(ariable.)]TJ -24.906 -20.026 Td [(The)-328(F)84(ortran)-328(95)-327(in)28(terface)-328(for)-327(distributed)-328(sparse)-327(matrices)-328(con)28(taining)-327(double)-328(pre-)]TJ 0 -11.955 Td [(cision)-454(real)-454(en)28(tries)-454(is)-455(de\014n)1(e)-1(d)-454(as)-454(sho)28(wn)-454(in)-454(\014gure)]TJ -0 0 1 rg 0 0 1 RG - [-454(4)]TJ -0 g 0 G - [(.)-807(The)-454(de\014nitions)-454(for)-454(single)]TJ 0 -11.956 Td [(precision)-279(and)-280(complex)-279(data)-279(are)-280(iden)28(tical)-279(e)-1(x)1(c)-1(ept)-279(for)-279(the)]TJ/F30 9.9626 Tf 238.28 0 Td [(real)]TJ/F8 9.9626 Tf 23.705 0 Td [(declaration)-279(and)-280(for)]TJ -261.985 -11.955 Td [(the)-333(kind)-334(t)28(yp)-27(e)-334(parameter.)]TJ 14.944 -11.988 Td [(The)-333(follo)28(w)-1(i)1(ng)-334(t)28(w)28(o)-334(cases)-333(are)-333(among)-334(the)-333(most)-334(commonly)-333(used:)]TJ -0 g 0 G - 151.93 -29.888 Td [(12)]TJ +BT +/F8 9.9626 Tf 198.211 473.989 Td [(Av)28(erage)-334(o)28(v)28(erlapp)-28(ed)-333(elemen)28(ts)]TJ 0 g 0 G +/F27 9.9626 Tf -47.506 -20.301 Td [(psb)]TJ ET -endstream -endobj -711 0 obj << -/Type /Page -/Contents 712 0 R -/Resources 710 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 674 0 R -/Annots [ 709 0 R ] ->> endobj -709 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [365.682 153.291 372.656 164.139] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -713 0 obj << -/D [711 0 R /XYZ 150.705 740.998 null] ->> endobj -46 0 obj << -/D [711 0 R /XYZ 150.705 716.092 null] ->> endobj -714 0 obj << -/D [711 0 R /XYZ 172.453 687.677 null] ->> endobj -710 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F30 616 0 R /F27 437 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -718 0 obj << -/Length 3623 ->> -stream -0 g 0 G -0 g 0 G -0 g 0 G -0 g 0 G -0 g 0 G -q -1 0 0 1 115.644 705.93 cm -[]0 d 0 J 0.398 w 0 0 m 312.215 0 l S -Q q -1 0 0 1 115.843 217.45 cm -[]0 d 0 J 0.398 w 0 0 m 0 488.28 l S +1 0 0 1 168.641 453.887 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -0 g 0 G -0 g 0 G BT -/F30 9.9626 Tf 124.012 691.672 Td [(type)-525(psb_sspmat_type)]TJ 15.691 -11.955 Td [(integer)-2625(::)-525(m,)-525(k)]TJ 0 -11.955 Td [(character)-1575(::)-525(fida\0505\051)]TJ 0 -11.956 Td [(character)-1575(::)-525(descra\05010\051)]TJ 0 -11.955 Td [(integer)-2625(::)-525(infoa\050psb_ifa_size_\051)]TJ 0 -11.955 Td [(real\050psb_spk_\051,)-525(allocatable)-525(::)-525(aspk\050:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-525(::)-525(ia1\050:\051,)-525(ia2\050:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-525(::)-525(pr\050:\051,)-525(pl\050:\051)]TJ -15.691 -11.955 Td [(end)-525(type)-525(psb_sspmat_type)]TJ 0 -23.911 Td [(type)-525(psb_dspmat_type)]TJ 15.691 -11.955 Td [(integer)-2625(::)-525(m,)-525(k)]TJ 0 -11.955 Td [(character)-1575(::)-525(fida\0505\051)]TJ 0 -11.955 Td [(character)-1575(::)-525(descra\05010\051)]TJ 0 -11.955 Td [(integer)-2625(::)-525(infoa\050psb_ifa_size_\051)]TJ 0 -11.956 Td [(real\050psb_dpk_\051,)-525(allocatable)-525(::)-525(aspk\050:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-525(::)-525(ia1\050:\051,)-525(ia2\050:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-525(::)-525(pr\050:\051,)-525(pl\050:\051)]TJ -15.691 -11.955 Td [(end)-525(type)-525(psb_dspmat_type)]TJ 0 -23.91 Td [(type)-525(psb_cspmat_type)]TJ 15.691 -11.956 Td [(integer)-2625(::)-525(m,)-525(k)]TJ 0 -11.955 Td [(character)-1575(::)-525(fida\0505\051)]TJ 0 -11.955 Td [(character)-1575(::)-525(descra\05010\051)]TJ 0 -11.955 Td [(integer)-2625(::)-525(infoa\050psb_ifa_size_\051)]TJ 0 -11.955 Td [(complex\050psb_spk_\051,)-525(allocatable)-525(::)-525(aspk\050:\051)]TJ 0 -11.956 Td [(integer,)-525(allocatable)-525(::)-525(ia1\050:\051,)-525(ia2\050:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-525(::)-525(pr\050:\051,)-525(pl\050:\051)]TJ -15.691 -11.955 Td [(end)-525(type)-525(psb_cspmat_type)]TJ 0 -23.91 Td [(type)-525(psb_zspmat_type)]TJ 15.691 -11.955 Td [(integer)-2625(::)-525(m,)-525(k)]TJ 0 -11.956 Td [(character)-1575(::)-525(fida\0505\051)]TJ 0 -11.955 Td [(character)-1575(::)-525(descra\05010\051)]TJ 0 -11.955 Td [(integer)-2625(::)-525(infoa\050psb_ifa_size_\051)]TJ 0 -11.955 Td [(complex\050psb_dpk_\051,)-525(allocatable)-525(::)-525(aspk\050:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-525(::)-525(ia1\050:\051,)-525(ia2\050:\051)]TJ 0 -11.955 Td [(integer,)-525(allocatable)-525(::)-525(pr\050:\051,)-525(pl\050:\051)]TJ -15.691 -11.956 Td [(end)-525(type)-525(psb_zspmat_type)]TJ +/F27 9.9626 Tf 172.078 453.688 Td [(comm)]TJ ET q -1 0 0 1 427.659 217.45 cm -[]0 d 0 J 0.398 w 0 0 m 0 488.28 l S -Q -q -1 0 0 1 115.644 217.251 cm -[]0 d 0 J 0.398 w 0 0 m 312.215 0 l S +1 0 0 1 202.681 453.887 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -0 g 0 G BT -/F8 9.9626 Tf 111.947 189.212 Td [(Figure)-333(4:)-778(The)-333(PSBLAS)-334(de\014ned)-333(data)-333(t)28(yp)-28(e)-334(th)1(at)-334(con)28(tains)-333(a)-334(sparse)-333(matrix.)]TJ -0 g 0 G -0 g 0 G -0 g 0 G -/F27 9.9626 Tf -12.052 -33.552 Td [(\014da=\134CSR")]TJ -0 g 0 G -/F8 9.9626 Tf 67.435 0 Td [(Compressed)-380(s)-1(tor)1(age)-381(b)28(y)-380(ro)27(ws.)-585(In)-381(th)1(is)-381(case)-380(the)-381(follo)28(wing)-380(should)]TJ -42.528 -11.955 Td [(hold:)]TJ -0 g 0 G - 9.188 -23.379 Td [(1.)]TJ -0 g 0 G -/F30 9.9626 Tf 12.73 0 Td [(ia2\050i\051)]TJ/F8 9.9626 Tf 36.202 0 Td [(con)28(tains)-484(the)-484(index)-483(of)-484(the)-484(\014rst)-484(elemen)28(t)-484(of)-484(r)1(o)27(w)]TJ/F30 9.9626 Tf 212.908 0 Td [(i)]TJ/F8 9.9626 Tf 5.23 0 Td [(;)-559(the)-484(last)]TJ -0 g 0 G - -134.29 -29.888 Td [(13)]TJ -0 g 0 G +/F27 9.9626 Tf 206.118 453.688 Td [(halo)]TJ ET -endstream -endobj -717 0 obj << -/Type /Page -/Contents 718 0 R -/Resources 716 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 721 0 R ->> endobj -719 0 obj << -/D [717 0 R /XYZ 99.895 740.998 null] ->> endobj -715 0 obj << -/D [717 0 R /XYZ 155.561 201.167 null] ->> endobj -720 0 obj << -/D [717 0 R /XYZ 99.895 135.137 null] ->> endobj -716 0 obj << -/Font << /F30 616 0 R /F8 438 0 R /F27 437 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -725 0 obj << -/Length 8610 ->> -stream -0 g 0 G +q +1 0 0 1 227.651 453.887 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q 0 g 0 G BT -/F8 9.9626 Tf 197.529 706.129 Td [(elemen)28(t)-274(of)-273(the)-274(sparse)-273(matrix)-273(is)-274(th)28(us)-273(s)-1(tored)-273(at)-273(index)]TJ/F11 9.9626 Tf 222.702 0 Td [(ia)]TJ/F8 9.9626 Tf 8.698 0 Td [(2\050)]TJ/F11 9.9626 Tf 8.856 0 Td [(m)]TJ/F8 9.9626 Tf 9.768 0 Td [(+)-102(1\051)]TJ/F14 9.9626 Tf 18.644 0 Td [(\000)]TJ/F8 9.9626 Tf 8.769 0 Td [(1.)-424(It)]TJ -277.437 -11.955 Td [(should)-248(con)28(tain)]TJ/F30 9.9626 Tf 65.055 0 Td [(m+1)]TJ/F8 9.9626 Tf 18.164 0 Td [(en)28(tries)-249(in)-248(nondecreasing)-248(order)-248(\050strictly)-248(increasing,)]TJ -83.219 -11.955 Td [(if)-333(there)-334(are)-333(no)-333(empt)27(y)-333(ro)28(ws\051.)]TJ -0 g 0 G - -12.73 -18.055 Td [(2.)]TJ -0 g 0 G -/F30 9.9626 Tf 12.73 0 Td [(ia1\050j\051)]TJ/F8 9.9626 Tf 35.118 0 Td [(con)28(tains)-375(the)-375(column)-375(index)-375(and)]TJ/F30 9.9626 Tf 139.395 0 Td [(aspk\050j\051)]TJ/F8 9.9626 Tf 40.348 0 Td [(con)28(tains)-375(the)-375(corre-)]TJ -214.861 -11.956 Td [(sp)-28(onding)-333(co)-28(e\016cien)28(t)-333(v)55(alue,)-333(for)-333(all)]TJ/F11 9.9626 Tf 146.479 0 Td [(ia)]TJ/F8 9.9626 Tf 8.698 0 Td [(2\0501\051)]TJ/F14 9.9626 Tf 20.479 0 Td [(\024)]TJ/F11 9.9626 Tf 10.516 0 Td [(j)]TJ/F14 9.9626 Tf 7.441 0 Td [(\024)]TJ/F11 9.9626 Tf 10.516 0 Td [(ia)]TJ/F8 9.9626 Tf 8.698 0 Td [(2\050)]TJ/F11 9.9626 Tf 8.856 0 Td [(m)]TJ/F8 9.9626 Tf 10.961 0 Td [(+)-222(1\051)]TJ/F14 9.9626 Tf 21.032 0 Td [(\000)]TJ/F8 9.9626 Tf 9.963 0 Td [(1.)]TJ -0 g 0 G -/F27 9.9626 Tf -310.463 -24.155 Td [(\014da=\134COO")]TJ -0 g 0 G -/F8 9.9626 Tf 69.69 0 Td [(Co)-28(ordinate)-333(storage.)-444(I)-1(n)-333(this)-333(case)-334(the)-333(follo)28(wing)-333(should)-334(hold:)]TJ -0 g 0 G - -35.596 -24.154 Td [(1.)]TJ -0 g 0 G -/F30 9.9626 Tf 12.73 0 Td [(infoa\0501\051)]TJ/F8 9.9626 Tf 45.164 0 Td [(con)28(tains)-334(th)1(e)-334(n)28(um)28(b)-28(er)-333(of)-334(nonzero)-333(elemen)28(ts)-334(in)-333(the)-333(matrix;)]TJ -0 g 0 G - -57.894 -18.056 Td [(2.)]TJ -0 g 0 G - [-500(F)83(or)-269(all)-269(1)]TJ/F14 9.9626 Tf 50.921 0 Td [(\024)]TJ/F11 9.9626 Tf 10.516 0 Td [(j)]TJ/F14 9.9626 Tf 7.44 0 Td [(\024)]TJ/F11 9.9626 Tf 10.516 0 Td [(inf)-108(oa)]TJ/F8 9.9626 Tf 25.457 0 Td [(\0501\051,)-282(the)-270(co)-28(e\016cien)28(t,)-282(ro)28(w)-270(index)-269(and)-269(c)-1(olu)1(m)-1(n)-269(index)]TJ -92.12 -11.955 Td [(are)-333(stored)-334(in)28(to)]TJ/F30 9.9626 Tf 66.805 0 Td [(apsk\050j\051)]TJ/F8 9.9626 Tf 36.613 0 Td [(,)]TJ/F30 9.9626 Tf 6.088 0 Td [(ia1\050j\051)]TJ/F8 9.9626 Tf 34.703 0 Td [(and)]TJ/F30 9.9626 Tf 19.372 0 Td [(ia2\050j\051)]TJ/F8 9.9626 Tf 34.703 0 Td [(resp)-28(ectiv)28(ely)83(.)]TJ -245.108 -24.155 Td [(A)-333(sparse)-334(matrix)-333(has)-333(an)-334(asso)-28(ciated)-333(state,)-333(whic)27(h)-333(can)-333(tak)28(e)-334(the)-333(follo)28(wing)-334(v)56(alues:)]TJ -0 g 0 G -/F27 9.9626 Tf 0 -23.097 Td [(Build:)]TJ -0 g 0 G -/F8 9.9626 Tf 35.409 0 Td [(State)-306(en)28(tered)-306(after)-307(th)1(e)-307(\014rst)-306(allo)-27(c)-1(ation)1(,)-312(and)-306(b)-28(efore)-306(the)-306(\014rst)-306(assem)27(bly;)-315(in)]TJ -10.503 -11.955 Td [(this)-333(state)-334(it)-333(is)-333(p)-28(ossible)-334(to)-333(add)-333(nonzero)-333(e)-1(n)28(tries.)]TJ -0 g 0 G -/F27 9.9626 Tf -24.906 -24.155 Td [(Assem)32(bled:)]TJ -0 g 0 G -/F8 9.9626 Tf 61.508 0 Td [(State)-373(en)27(tered)-373(after)-373(the)-373(a)-1(ssem)28(bly;)-393(computations)-373(using)-374(the)-373(sparse)]TJ -36.602 -11.955 Td [(matrix,)-333(suc)27(h)-333(as)-333(matrix-v)28(e)-1(ctor)-333(pro)-28(du)1(c)-1(ts,)-333(are)-333(only)-334(p)-27(ossible)-334(in)-333(this)-333(state;)]TJ +/F8 9.9626 Tf 236.07 453.688 Td [(Exc)28(hange)-333(data)-334(based)-333(on)-333(the)]TJ/F30 9.9626 Tf 126.387 0 Td [(halo_index)]TJ/F8 9.9626 Tf 55.624 0 Td [(list;)]TJ 0 g 0 G -/F27 9.9626 Tf -24.906 -24.155 Td [(Up)-32(date:)]TJ -0 g 0 G -/F8 9.9626 Tf 45.302 0 Td [(State)-233(en)27(tered)-233(after)-233(a)-234(r)1(e)-1(in)1(italization;)-267(this)-233(is)-234(used)-233(to)-233(handle)-234(appli)1(c)-1(ation)1(s)]TJ -20.396 -11.955 Td [(in)-395(whic)28(h)-396(the)-395(same)-395(sparsit)28(y)-395(pattern)-396(is)-395(used)-395(m)28(ultiple)-395(times)-396(with)-395(di\013eren)28(t)]TJ 0 -11.956 Td [(co)-28(e\016cien)28(ts.)-427(In)-280(this)-280(state)-280(it)-281(i)1(s)-281(only)-280(p)-27(os)-1(sibl)1(e)-281(to)-280(en)28(ter)-280(co)-28(e\016cien)28(ts)-281(f)1(or)-281(already)]TJ 0 -11.955 Td [(existing)-333(nonzero)-334(en)28(tries.)]TJ/F27 9.9626 Tf -24.906 -31.506 Td [(3.2.1)-1150(Named)-383(Constan)32(ts)]TJ -0 g 0 G - 0 -20.357 Td [(psb)]TJ +/F27 9.9626 Tf -267.376 -20.301 Td [(psb)]TJ ET q -1 0 0 1 168.641 366.886 cm +1 0 0 1 168.641 433.586 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 172.078 366.687 Td [(dupl)]TJ +/F27 9.9626 Tf 172.078 433.387 Td [(comm)]TJ ET q -1 0 0 1 195.043 366.886 cm +1 0 0 1 202.681 433.586 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 198.48 366.687 Td [(o)32(vwrt)]TJ +/F27 9.9626 Tf 206.118 433.387 Td [(ext)]TJ ET q -1 0 0 1 228.073 366.886 cm +1 0 0 1 222.559 433.586 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q 0 g 0 G BT -/F8 9.9626 Tf 236.492 366.687 Td [(Duplicate)-315(co)-28(e\016cien)28(ts)-315(should)-315(b)-28(e)-315(o)28(v)28(erwritten)-315(\050i.e.)-438(ignore)-315(du-)]TJ -60.881 -11.955 Td [(plications\051)]TJ +/F8 9.9626 Tf 230.978 433.387 Td [(Exc)28(hange)-333(data)-334(based)-333(on)-333(the)]TJ/F30 9.9626 Tf 126.387 0 Td [(ext_index)]TJ/F8 9.9626 Tf 50.394 0 Td [(list;)]TJ 0 g 0 G -/F27 9.9626 Tf -24.906 -24.155 Td [(psb)]TJ +/F27 9.9626 Tf -257.054 -20.301 Td [(psb)]TJ ET q -1 0 0 1 168.641 330.776 cm +1 0 0 1 168.641 413.286 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 172.078 330.577 Td [(dupl)]TJ +/F27 9.9626 Tf 172.078 413.086 Td [(comm)]TJ ET q -1 0 0 1 195.043 330.776 cm +1 0 0 1 202.681 413.286 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 198.48 330.577 Td [(add)]TJ +/F27 9.9626 Tf 206.118 413.086 Td [(o)32(vr)]TJ ET q -1 0 0 1 217.467 330.776 cm +1 0 0 1 222.981 413.286 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q 0 g 0 G BT -/F8 9.9626 Tf 225.886 330.577 Td [(Duplicate)-333(co)-28(e\016cien)28(ts)-334(should)-333(b)-28(e)-333(added;)]TJ +/F8 9.9626 Tf 231.4 413.086 Td [(Exc)28(hange)-333(data)-334(based)-333(on)-333(the)]TJ/F30 9.9626 Tf 126.387 0 Td [(ovrlap_index)]TJ/F8 9.9626 Tf 66.085 0 Td [(list;)]TJ 0 g 0 G -/F27 9.9626 Tf -75.181 -24.155 Td [(psb)]TJ +/F27 9.9626 Tf -273.167 -20.3 Td [(psb)]TJ ET q -1 0 0 1 168.641 306.621 cm +1 0 0 1 168.641 392.985 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 172.078 306.422 Td [(dupl)]TJ +/F27 9.9626 Tf 172.078 392.786 Td [(comm)]TJ ET q -1 0 0 1 195.043 306.621 cm +1 0 0 1 202.681 392.985 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 198.48 306.422 Td [(err)]TJ +/F27 9.9626 Tf 206.118 392.786 Td [(mo)32(v)]TJ ET q -1 0 0 1 213.856 306.621 cm +1 0 0 1 227.81 392.985 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q 0 g 0 G BT -/F8 9.9626 Tf 222.274 306.422 Td [(Duplicate)-333(co)-28(e\016cien)28(ts)-334(should)-333(trigger)-333(an)-334(error)-333(conditino)]TJ -0 g 0 G -/F27 9.9626 Tf -71.569 -24.155 Td [(psb)]TJ +/F8 9.9626 Tf 236.229 392.786 Td [(Exc)28(hange)-333(data)-334(based)-333(on)-333(the)]TJ/F30 9.9626 Tf 126.387 0 Td [(ovr_mst_idx)]TJ/F8 9.9626 Tf 60.855 0 Td [(list;)]TJ/F16 11.9552 Tf -272.766 -28.387 Td [(3.2)-1125(Sparse)-375(Matrix)-375(class)]TJ/F8 9.9626 Tf 0 -18.564 Td [(The)]TJ/F30 9.9626 Tf 21.176 0 Td [(psb)]TJ ET q -1 0 0 1 168.641 282.466 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +1 0 0 1 188.199 346.035 cm +[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F27 9.9626 Tf 172.078 282.267 Td [(up)-32(d)]TJ +/F30 9.9626 Tf 191.337 345.835 Td [(spmat)]TJ ET q -1 0 0 1 192.179 282.466 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +1 0 0 1 218.117 346.035 cm +[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F27 9.9626 Tf 195.616 282.267 Td [(d\015t)]TJ -ET -q -1 0 0 1 213.489 282.466 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q +/F30 9.9626 Tf 221.255 345.835 Td [(type)]TJ/F8 9.9626 Tf 24.939 0 Td [(class)-403(con)27(tains)-403(all)-403(information)-403(ab)-28(out)-403(the)-404(lo)-27(cal)-404(p)-27(ortion)-404(of)]TJ -95.489 -11.955 Td [(the)-249(sparse)-249(matrix)-248(and)-249(its)-249(storage)-249(mo)-27(de.)-417(Its)-248(design)-249(is)-249(based)-249(on)-248(the)-249(ST)83(A)84(TE)-249(design)]TJ 0 -11.955 Td [(pattern)-347([)]TJ +1 0 0 rg 1 0 0 RG + [(13)]TJ 0 g 0 G -BT -/F8 9.9626 Tf 221.907 282.267 Td [(Default)-333(up)-28(date)-333(strategy)-334(for)-333(matrix)-333(co)-28(e\016cien)28(ts;)]TJ + [(])-346(as)-347(detailed)-347(in)-347([)]TJ +1 0 0 rg 1 0 0 RG + [(11)]TJ +0 g 0 G + [(])1(;)-354(the)-347(t)28(yp)-28(e)-346(declaration)-347(is)-347(sho)28(wn)-347(in)-346(\014gure)]TJ +0 0 1 rg 0 0 1 RG + [-347(4)]TJ +0 g 0 G + [-347(where)]TJ/F30 9.9626 Tf 0 -11.955 Td [(T)]TJ/F8 9.9626 Tf 8.551 0 Td [(is)-333(a)-334(placeholder)-333(for)-333(the)-334(data)-333(t)28(yp)-28(e)-333(and)-333(precision)-334(v)56(arian)28(ts)]TJ +0 g 0 G +/F27 9.9626 Tf -8.551 -20.207 Td [(S)]TJ +0 g 0 G +/F8 9.9626 Tf 11.346 0 Td [(Single)-333(precision)-334(real;)]TJ +0 g 0 G +/F27 9.9626 Tf -11.346 -20.301 Td [(D)]TJ 0 g 0 G -/F27 9.9626 Tf -71.202 -24.155 Td [(psb)]TJ +/F8 9.9626 Tf 13.768 0 Td [(Double)-333(precision)-334(real;)]TJ +0 g 0 G +/F27 9.9626 Tf -13.768 -20.301 Td [(C)]TJ +0 g 0 G +/F8 9.9626 Tf 13.256 0 Td [(Single)-333(precision)-334(complex;)]TJ +0 g 0 G +/F27 9.9626 Tf -13.256 -20.3 Td [(Z)]TJ +0 g 0 G +/F8 9.9626 Tf 11.983 0 Td [(Double)-333(precision)-334(complex.)]TJ -11.983 -20.207 Td [(The)-431(actual)-432(data)-431(is)-432(con)28(tained)-431(in)-431(the)-432(p)-28(olymorphi)1(c)-432(comp)-28(onen)28(t)]TJ/F30 9.9626 Tf 274.27 0 Td [(a%a)]TJ/F8 9.9626 Tf 15.691 0 Td [(;)-480(its)-432(sp)-28(eci\014c)]TJ -289.961 -11.955 Td [(la)28(y)28(out)-411(can)-411(b)-27(e)-411(c)28(hosen)-411(dynamically)-410(among)-411(the)-411(prede\014ned)-410(t)28(yp)-28(es,)-430(or)-411(an)-410(en)28(tirely)]TJ 0 -11.955 Td [(new)-276(storage)-275(la)27(y)28(out)-275(can)-276(b)-28(e)-275(impleme)-1(n)28(ted)-275(and)-276(passed)-276(to)-275(the)-276(library)-275(at)-276(run)28(time)-276(via)]TJ 0 -11.956 Td [(the)]TJ/F30 9.9626 Tf 16.778 0 Td [(psb_spasb)]TJ/F8 9.9626 Tf 50.015 0 Td [(routine.)-432(The)-295(follo)28(wing)-295(v)28(ery)-296(common)-295(formats)-295(are)-295(prec)-1(ompi)1(le)-1(d)-295(in)]TJ -66.793 -11.955 Td [(PSBLAS)-333(and)-334(t)1(h)27(us)-333(are)-333(alw)27(a)28(ys)-333(a)28(v)55(ailable:)]TJ +0 g 0 G +/F27 9.9626 Tf 0 -20.207 Td [(psb)]TJ ET q -1 0 0 1 168.641 258.311 cm +1 0 0 1 168.641 140.826 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 172.078 258.112 Td [(up)-32(d)]TJ +/F27 9.9626 Tf 172.078 140.626 Td [(T)]TJ ET q -1 0 0 1 192.179 258.311 cm +1 0 0 1 180.736 140.826 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 195.616 258.112 Td [(src)32(h)]TJ +/F27 9.9626 Tf 184.173 140.626 Td [(co)-32(o)]TJ ET q -1 0 0 1 216.68 258.311 cm +1 0 0 1 201.728 140.826 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -0 g 0 G BT -/F8 9.9626 Tf 225.098 258.112 Td [(Up)-28(date)-333(strategy)-333(base)-1(d)-333(on)-333(searc)28(h)-334(in)28(to)-333(the)-334(data)-333(structure;)]TJ -0 g 0 G -/F27 9.9626 Tf -74.393 -24.155 Td [(psb)]TJ +/F27 9.9626 Tf 205.165 140.626 Td [(sparse)]TJ ET q -1 0 0 1 168.641 234.157 cm +1 0 0 1 236.794 140.826 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 172.078 233.957 Td [(up)-32(d)]TJ +/F27 9.9626 Tf 240.231 140.626 Td [(mat)]TJ +0 g 0 G +/F8 9.9626 Tf 24.554 0 Td [(Co)-28(ordinate)-333(storage;)]TJ +0 g 0 G +/F27 9.9626 Tf -114.08 -20.3 Td [(psb)]TJ ET q -1 0 0 1 192.179 234.157 cm +1 0 0 1 168.641 120.525 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 195.616 233.957 Td [(p)-32(erm)]TJ +/F27 9.9626 Tf 172.078 120.326 Td [(T)]TJ ET q -1 0 0 1 222.504 234.157 cm +1 0 0 1 180.736 120.525 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -0 g 0 G BT -/F8 9.9626 Tf 230.922 233.957 Td [(Up)-28(date)-398(strategy)-398(based)-398(on)-398(additional)-398(p)-28(erm)28(utation)-398(data)-398(\050s)-1(ee)]TJ -55.311 -11.955 Td [(to)-28(ols)-333(routine)-333(desc)-1(r)1(iption\051.)]TJ/F16 11.9552 Tf -24.906 -33.498 Td [(3.3)-1125(Dense)-375(V)94(ector)-375(Data)-375(Structure)]TJ/F8 9.9626 Tf 0 -20.358 Td [(The)]TJ/F30 9.9626 Tf 20.327 0 Td [(psb)]TJ +/F27 9.9626 Tf 184.173 120.326 Td [(csr)]TJ ET q -1 0 0 1 187.351 168.346 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 199.19 120.525 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F30 9.9626 Tf 190.489 168.146 Td [(vect)]TJ +/F27 9.9626 Tf 202.627 120.326 Td [(sparse)]TJ ET q -1 0 0 1 212.038 168.346 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 234.257 120.525 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F30 9.9626 Tf 215.177 168.146 Td [(type)]TJ/F8 9.9626 Tf 24.091 0 Td [(data)-318(structure)-318(con)28(tains)-319(all)-318(information)-318(ab)-27(out)-319(lo)-27(cal)-319(p)-27(ortion)]TJ -88.563 -11.955 Td [(of)-374(the)-374(sparse)-375(matrix)-374(and)-374(its)-374(storage)-374(mo)-28(de.)-567(Most)-374(of)-374(these)-375(\014elds)-374(are)-374(set)-374(b)28(y)-375(the)]TJ 0 -11.955 Td [(to)-28(ols)-348(routines)-349(when)-349(inserting)-348(a)-349(new)-349(sparse)-348(matrix;)-357(the)-348(user)-349(needs)-349(only)-348(c)27(ho)-27(ose,)]TJ 0 -11.955 Td [(if)-333(he/she)-334(so)-333(whishes,)-333(a)-334(sp)-28(eci\014c)-333(matrix)-333(storage)-334(mo)-27(de.)]TJ +/F27 9.9626 Tf 237.694 120.326 Td [(mat)]TJ +0 g 0 G +/F8 9.9626 Tf 24.553 0 Td [(Compressed)-333(s)-1(torage)-333(b)28(y)-333(ro)27(ws;)]TJ 0 g 0 G - 166.874 -41.843 Td [(14)]TJ + 55.332 -29.888 Td [(14)]TJ 0 g 0 G ET endstream endobj -724 0 obj << +774 0 obj << /Type /Page -/Contents 725 0 R -/Resources 723 0 R +/Contents 775 0 R +/Resources 773 0 R /MediaBox [0 0 595.276 841.89] -/Parent 721 0 R +/Parent 769 0 R +/Annots [ 770 0 R 771 0 R 772 0 R ] >> endobj -726 0 obj << -/D [724 0 R /XYZ 150.705 740.998 null] +770 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 0] +/Rect [188.06 320.929 200.015 329.342] +/Subtype /Link +/A << /S /GoTo /D (cite.DesignPatterns) >> >> endobj -727 0 obj << -/D [724 0 R /XYZ 150.705 676.678 null] +771 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 0] +/Rect [268.904 320.929 280.86 329.342] +/Subtype /Link +/A << /S /GoTo /D (cite.Sparse03) >> >> endobj -728 0 obj << -/D [724 0 R /XYZ 150.705 616.966 null] +772 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [459.496 318.438 466.47 330.393] +/Subtype /Link +/A << /S /GoTo /D (figure.4) >> >> endobj -729 0 obj << -/D [724 0 R /XYZ 150.705 598.911 null] +776 0 obj << +/D [774 0 R /XYZ 150.705 740.998 null] >> endobj -50 0 obj << -/D [724 0 R /XYZ 150.705 398.12 null] +74 0 obj << +/D [774 0 R /XYZ 150.705 583.867 null] >> endobj -54 0 obj << -/D [724 0 R /XYZ 150.705 201.018 null] +78 0 obj << +/D [774 0 R /XYZ 150.705 376.504 null] >> endobj -730 0 obj << -/D [724 0 R /XYZ 171.032 168.146 null] +777 0 obj << +/D [774 0 R /XYZ 171.881 345.835 null] >> endobj -723 0 obj << -/Font << /F8 438 0 R /F11 599 0 R /F14 619 0 R /F30 616 0 R /F27 437 0 R /F16 435 0 R >> +773 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F30 664 0 R /F16 475 0 R >> /ProcSet [ /PDF /Text ] >> endobj -737 0 obj << -/Length 7516 +782 0 obj << +/Length 4897 >> stream 0 g 0 G 0 g 0 G +0 g 0 G +0 g 0 G +0 g 0 G +q +1 0 0 1 115.644 705.93 cm +[]0 d 0 J 0.398 w 0 0 m 312.215 0 l S +Q +q +1 0 0 1 115.843 618.059 cm +[]0 d 0 J 0.398 w 0 0 m 0 87.671 l S +Q +0 g 0 G +0 g 0 G BT -/F16 11.9552 Tf 99.895 706.129 Td [(3.4)-1125(Preconditioner)-375(data)-375(structure)]TJ/F8 9.9626 Tf 0 -18.389 Td [(Our)-383(base)-383(library)-383(o\013ers)-383(supp)-28(ort)-383(for)-383(simple)-383(w)28(ell)-383(kno)27(wn)-383(preconditioners)-383(lik)28(e)-383(Di-)]TJ 0 -11.956 Td [(agonal)-333(Scaling)-334(or)-333(Blo)-28(c)28(k)-333(Jacobi)-334(with)-333(incomplete)-333(factorization)-334(ILU\0500\051.)]TJ 14.944 -11.955 Td [(A)-427(preconditioner)-428(is)-427(held)-428(in)-427(the)]TJ/F30 9.9626 Tf 142.724 0 Td [(psb)]TJ +/F30 9.9626 Tf 134.473 685.805 Td [(type)-525(::)-525(psb_Tspmat_type)]TJ 10.461 -23.91 Td [(class\050psb_T_base_sparse_mat\051,)-525(allocatable)-1050(::)-525(a)]TJ -10.461 -23.911 Td [(end)-525(type)-1050(psb_Tspmat_type)]TJ ET q -1 0 0 1 273.881 664.028 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 427.659 618.059 cm +[]0 d 0 J 0.398 w 0 0 m 0 87.671 l S +Q +q +1 0 0 1 115.644 617.86 cm +[]0 d 0 J 0.398 w 0 0 m 312.215 0 l S +Q +0 g 0 G +BT +/F8 9.9626 Tf 111.947 589.821 Td [(Figure)-333(4:)-778(The)-333(PSBLAS)-334(de\014ned)-333(data)-333(t)28(yp)-28(e)-334(th)1(at)-334(con)28(tains)-333(a)-334(sparse)-333(matrix.)]TJ +0 g 0 G +0 g 0 G +0 g 0 G +/F27 9.9626 Tf -12.052 -31.634 Td [(psb)]TJ +ET +q +1 0 0 1 117.832 558.386 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F30 9.9626 Tf 277.019 663.829 Td [(prec)]TJ +/F27 9.9626 Tf 121.269 558.187 Td [(T)]TJ ET q -1 0 0 1 298.568 664.028 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 129.926 558.386 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F30 9.9626 Tf 301.707 663.829 Td [(type)]TJ/F8 9.9626 Tf 25.18 0 Td [(data)-427(structure)-428(rep)-28(orted)-427(in)]TJ -226.992 -11.955 Td [(\014gure)]TJ -0 0 1 rg 0 0 1 RG - [-361(5)]TJ -0 g 0 G - [(.)-527(The)]TJ/F30 9.9626 Tf 61.73 0 Td [(psb_prec_type)]TJ/F8 9.9626 Tf 71.589 0 Td [(data)-361(t)28(yp)-28(e)-361(ma)28(y)-361(con)28(tain)-361(a)-361(simple)-361(preconditioning)]TJ -133.319 -11.955 Td [(matrix)-395(w)-1(i)1(th)-396(the)-395(asso)-28(ciated)-396(comm)28(unication)-395(des)-1(crip)1(tor.The)-396(v)56(alues)-396(con)28(tained)-396(in)]TJ 0 -11.955 Td [(the)]TJ/F30 9.9626 Tf 16.637 0 Td [(iprcparm)]TJ/F8 9.9626 Tf 44.643 0 Td [(and)]TJ/F30 9.9626 Tf 18.85 0 Td [(rprcparm)]TJ/F8 9.9626 Tf 44.643 0 Td [(de\014ne)-281(tha)-281(t)28(yp)-28(e)-281(of)-281(preconditioner)-281(along)-281(with)-281(all)-281(the)]TJ -124.773 -11.956 Td [(parameters)-420(related)-421(to)-420(it;)-464(th)28(us,)]TJ/F30 9.9626 Tf 139.397 0 Td [(iprcparm)]TJ/F8 9.9626 Tf 46.03 0 Td [(and)]TJ/F30 9.9626 Tf 20.239 0 Td [(rprcparm)]TJ/F8 9.9626 Tf 46.03 0 Td [(de\014ne)-420(ho)27(w)-420(the)-420(other)]TJ -251.696 -11.955 Td [(records)-282(ha)28(v)28(e)-282(to)-282(b)-27(e)-282(in)28(terpreted.)-428(This)-281(data)-282(structure)-282(is)-282(the)-281(basis)-282(of)-282(more)-282(complex)]TJ 0 -11.955 Td [(preconditioning)-333(strategies,)-334(whic)28(h)-333(are)-333(the)-334(sub)-55(ject)-334(of)-333(further)-333(researc)27(h)1(.)]TJ/F16 11.9552 Tf 0 -27.843 Td [(3.5)-1125(Data)-375(structure)-375(query)-375(routines)]TJ/F27 9.9626 Tf 0 -18.39 Td [(get)]TJ +/F27 9.9626 Tf 133.364 558.187 Td [(csc)]TJ ET q -1 0 0 1 116.018 546.065 cm +1 0 0 1 148.754 558.386 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 119.455 545.865 Td [(lo)-32(cal)]TJ +/F27 9.9626 Tf 152.191 558.187 Td [(sparse)]TJ ET q -1 0 0 1 143.215 546.065 cm +1 0 0 1 183.821 558.386 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 146.653 545.865 Td [(ro)32(ws)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(lo)-32(cal)-383(ro)32(ws)]TJ -0 g 0 G +/F27 9.9626 Tf 187.258 558.187 Td [(mat)]TJ 0 g 0 G -/F30 9.9626 Tf -46.758 -18.389 Td [(nr)-525(=)-525(desc%get_local_rows\050\051)]TJ +/F8 9.9626 Tf 24.553 0 Td [(Compressed)-334(storage)-333(b)28(y)-333(columns;)]TJ -111.916 -19.734 Td [(The)-373(inner)-373(sparse)-373(matrix)-373(has)-373(an)-373(asso)-28(ciated)-373(state,)-383(whic)28(h)-373(can)-373(tak)28(e)-373(the)-373(follo)27(wing)]TJ 0 -11.956 Td [(v)56(alues:)]TJ 0 g 0 G -/F27 9.9626 Tf 0 -21.657 Td [(T)32(yp)-32(e:)]TJ +/F27 9.9626 Tf 0 -19.734 Td [(Build:)]TJ 0 g 0 G -/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ +/F8 9.9626 Tf 35.409 0 Td [(State)-306(en)28(tered)-306(after)-307(the)-306(\014rst)-306(allo)-28(cation,)-311(and)-306(b)-28(efore)-306(the)-306(\014rst)-306(assem)27(bly;)-315(in)]TJ -10.502 -11.955 Td [(this)-333(state)-334(it)-333(is)-333(p)-28(ossible)-334(to)-333(add)-333(nonzero)-333(en)27(tries.)]TJ 0 g 0 G -/F27 9.9626 Tf -33.797 -19.821 Td [(On)-383(En)32(try)]TJ +/F27 9.9626 Tf -24.907 -19.829 Td [(Assem)32(bled:)]TJ 0 g 0 G +/F8 9.9626 Tf 61.508 0 Td [(State)-373(en)27(tered)-373(after)-373(the)-374(assem)28(bly;)-393(computations)-373(us)-1(i)1(ng)-374(the)-373(sparse)]TJ -36.601 -11.956 Td [(matrix,)-333(suc)27(h)-333(as)-333(matrix-v)28(ec)-1(tor)-333(pro)-28(d)1(ucts)-1(,)-333(are)-333(only)-333(p)-28(ossible)-334(in)-333(this)-333(state;)]TJ 0 g 0 G - 0 -19.821 Td [(desc)]TJ +/F27 9.9626 Tf -24.907 -19.829 Td [(Up)-32(date:)]TJ 0 g 0 G -/F8 9.9626 Tf 26.209 0 Td [(the)-333(comm)27(unication)-333(descriptor.)]TJ -1.302 -11.956 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf 23.073 0 Td [(.)]TJ -55.452 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf 41.898 0 Td [(.)]TJ -71.509 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.547 0 Td [(.)]TJ -43.033 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(structured)-333(data)-333(of)-334(t)28(yp)-28(e)]TJ -0 0 1 rg 0 0 1 RG -/F30 9.9626 Tf 170.915 0 Td [(psb)]TJ +/F8 9.9626 Tf 45.302 0 Td [(State)-233(en)27(tered)-233(after)-233(a)-234(reinit)1(aliz)-1(at)1(ion;)-267(this)-233(is)-234(used)-233(to)-233(handle)-234(applications)]TJ -20.395 -11.955 Td [(in)-395(whic)28(h)-396(th)1(e)-396(same)-395(sparsit)28(y)-395(pattern)-396(is)-395(used)-395(m)28(ultiple)-395(times)-396(with)-395(di\013eren)28(t)]TJ 0 -11.956 Td [(co)-28(e\016cien)28(ts.)-427(In)-280(this)-280(state)-280(it)-280(is)-281(only)-280(p)-27(oss)-1(ib)1(le)-281(to)-280(en)28(ter)-280(co)-28(e\016cien)28(ts)-280(for)-281(already)]TJ 0 -11.955 Td [(existing)-333(nonzero)-334(en)28(tries.)]TJ -24.907 -19.734 Td [(The)-358(only)-357(storage)-358(v)56(arian)27(t)-357(supp)-28(orting)-357(the)-358(build)-357(s)-1(tate)-357(is)-358(COO;)-357(all)-358(other)-358(v)56(arian)28(ts)]TJ 0 -11.955 Td [(are)-333(obtained)-334(b)28(y)-333(con)28(v)27(ersion)-333(to/from)-333(it.)]TJ/F27 9.9626 Tf 0 -25.855 Td [(3.2.1)-1150(Metho)-32(ds)]TJ 0 -18.389 Td [(get)]TJ ET q -1 0 0 1 312.036 418.555 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 116.018 331.594 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F30 9.9626 Tf 315.174 418.356 Td [(desc)]TJ +/F27 9.9626 Tf 119.455 331.395 Td [(nro)32(ws)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(ro)32(ws)-383(in)-383(a)-384(sparse)-383(matrix)]TJ +0 g 0 G +0 g 0 G +/F30 9.9626 Tf -19.56 -18.389 Td [(nr)-525(=)-525(a%get_nrows\050\051)]TJ +0 g 0 G +/F27 9.9626 Tf 0 -21.679 Td [(T)32(yp)-32(e:)]TJ +0 g 0 G +/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ +0 g 0 G +/F27 9.9626 Tf -33.797 -19.83 Td [(On)-383(En)32(try)]TJ +0 g 0 G +0 g 0 G + 0 -19.83 Td [(a)]TJ +0 g 0 G +/F8 9.9626 Tf 10.551 0 Td [(the)-333(sparse)-334(matrix)]TJ 14.356 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ +0 g 0 G + -57.286 -33.634 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -19.829 Td [(F)96(unction)-384(v)64(alue)]TJ +0 g 0 G +/F8 9.9626 Tf 78.387 0 Td [(The)-333(n)27(u)1(m)27(b)-27(e)-1(r)-333(of)-333(ro)28(ws)-334(of)-333(sparse)-333(matrix)]TJ/F30 9.9626 Tf 164.937 0 Td [(a)]TJ/F8 9.9626 Tf 5.23 0 Td [(.)]TJ/F27 9.9626 Tf -248.554 -25.855 Td [(get)]TJ ET q -1 0 0 1 336.723 418.555 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 116.018 160.593 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F30 9.9626 Tf 339.861 418.356 Td [(type)]TJ +/F27 9.9626 Tf 119.455 160.394 Td [(ncols)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(columns)-383(in)-383(a)-384(sparse)-383(matrix)]TJ 0 g 0 G -/F8 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G -/F27 9.9626 Tf -260.887 -21.657 Td [(On)-383(Return)]TJ +/F30 9.9626 Tf -19.56 -18.39 Td [(nc)-525(=)-525(a%get_ncols\050\051)]TJ 0 g 0 G +/F27 9.9626 Tf 0 -21.678 Td [(T)32(yp)-32(e:)]TJ 0 g 0 G - 0 -19.821 Td [(F)96(unction)-384(v)64(alue)]TJ +/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ 0 g 0 G -/F8 9.9626 Tf 78.387 0 Td [(The)-460(n)28(um)27(b)-27(er)-461(of)-460(lo)-27(c)-1(al)-460(ro)28(ws,)-492(i.e.)-825(the)-460(n)28(um)27(b)-27(er)-460(of)-461(ro)28(ws)-460(o)28(wned)]TJ -53.48 -11.956 Td [(b)28(y)-401(the)-401(curren)27(t)-401(pro)-27(cess)-1(;)-435(as)-401(explained)-401(in)]TJ -0 0 1 rg 0 0 1 RG - [-401(1)]TJ + 133.078 -29.888 Td [(15)]TJ 0 g 0 G - [(,)-418(it)-401(is)-401(equal)-401(to)]TJ/F14 9.9626 Tf 249.677 0 Td [(jI)]TJ/F10 6.9738 Tf 8.193 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.316 1.494 Td [(j)]TJ/F8 9.9626 Tf 5.432 0 Td [(+)]TJ/F14 9.9626 Tf 10.413 0 Td [(jB)]TJ/F10 6.9738 Tf 9.31 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.494 Td [(j)]TJ/F8 9.9626 Tf 2.768 0 Td [(.)-648(The)]TJ -292.426 -11.955 Td [(returned)-333(v)55(alue)-333(is)-333(sp)-28(eci\014c)-334(to)-333(the)-333(calling)-333(pro)-28(cess.)]TJ/F27 9.9626 Tf -24.907 -25.851 Td [(get)]TJ ET -q -1 0 0 1 116.018 327.315 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q +endstream +endobj +781 0 obj << +/Type /Page +/Contents 782 0 R +/Resources 780 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 769 0 R +>> endobj +783 0 obj << +/D [781 0 R /XYZ 99.895 740.998 null] +>> endobj +779 0 obj << +/D [781 0 R /XYZ 155.561 601.776 null] +>> endobj +82 0 obj << +/D [781 0 R /XYZ 99.895 359.249 null] +>> endobj +86 0 obj << +/D [781 0 R /XYZ 99.895 323.023 null] +>> endobj +90 0 obj << +/D [781 0 R /XYZ 99.895 152.022 null] +>> endobj +780 0 obj << +/Font << /F30 664 0 R /F8 478 0 R /F27 477 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +786 0 obj << +/Length 3553 +>> +stream +0 g 0 G +0 g 0 G +0 g 0 G BT -/F27 9.9626 Tf 119.455 327.116 Td [(lo)-32(cal)]TJ +/F27 9.9626 Tf 150.705 706.129 Td [(On)-383(En)32(try)]TJ +0 g 0 G +0 g 0 G + 0 -23.725 Td [(a)]TJ +0 g 0 G +/F8 9.9626 Tf 10.551 0 Td [(the)-333(sparse)-334(matrix)]TJ 14.355 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ +0 g 0 G + -57.285 -36.723 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -23.725 Td [(F)96(unction)-384(v)64(alue)]TJ +0 g 0 G +/F8 9.9626 Tf 78.386 0 Td [(The)-333(n)27(um)28(b)-28(er)-333(of)-333(columns)-334(of)-333(sparse)-333(matrix)]TJ/F30 9.9626 Tf 180.684 0 Td [(a)]TJ/F8 9.9626 Tf 5.23 0 Td [(.)]TJ/F27 9.9626 Tf -264.3 -30.935 Td [(get)]TJ ET q -1 0 0 1 143.215 327.315 cm +1 0 0 1 166.827 579.265 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 146.653 327.116 Td [(cols)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(lo)-32(cal)-383(cols)]TJ +/F27 9.9626 Tf 170.264 579.066 Td [(nnzeros)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(nonzero)-383(elemen)32(ts)-383(in)-384(a)-383(sparse)-383(m)-1(atrix)]TJ 0 g 0 G 0 g 0 G -/F30 9.9626 Tf -46.758 -18.389 Td [(nc)-525(=)-525(desc%get_local_cols\050\051)]TJ +/F30 9.9626 Tf -19.559 -20.157 Td [(nz)-525(=)-525(a%get_nnzeros\050\051)]TJ 0 g 0 G -/F27 9.9626 Tf 0 -21.658 Td [(On)-383(En)32(try)]TJ +/F27 9.9626 Tf 0 -24.768 Td [(T)32(yp)-32(e:)]TJ 0 g 0 G +/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ 0 g 0 G - 0 -19.821 Td [(T)32(yp)-32(e:)]TJ +/F27 9.9626 Tf -33.797 -23.725 Td [(On)-383(En)32(try)]TJ 0 g 0 G -/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ 0 g 0 G -/F27 9.9626 Tf -33.797 -19.821 Td [(desc)]TJ + 0 -23.725 Td [(a)]TJ 0 g 0 G -/F8 9.9626 Tf 26.209 0 Td [(the)-333(comm)27(unication)-333(descriptor.)]TJ -1.302 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf 23.073 0 Td [(.)]TJ -55.452 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf 41.898 0 Td [(.)]TJ -71.509 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.547 0 Td [(.)]TJ -43.033 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(structured)-333(data)-333(of)-334(t)28(yp)-28(e)]TJ -0 0 1 rg 0 0 1 RG -/F30 9.9626 Tf 170.915 0 Td [(psb)]TJ -ET -q -1 0 0 1 312.036 199.806 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S -Q -BT -/F30 9.9626 Tf 315.174 199.607 Td [(desc)]TJ +/F8 9.9626 Tf 10.551 0 Td [(the)-333(sparse)-334(matrix)]TJ 14.355 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ +0 g 0 G + -57.285 -36.723 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -23.724 Td [(F)96(unction)-384(v)64(alue)]TJ +0 g 0 G +/F8 9.9626 Tf 78.386 0 Td [(The)-333(n)27(um)28(b)-28(er)-333(of)-333(nonzero)-333(e)-1(l)1(e)-1(men)28(ts)-333(stored)-334(in)-333(sparse)-333(matrix)]TJ/F30 9.9626 Tf 249.98 0 Td [(a)]TJ/F8 9.9626 Tf 5.23 0 Td [(.)]TJ/F27 9.9626 Tf -333.596 -25.718 Td [(Notes)]TJ +0 g 0 G +/F8 9.9626 Tf 12.176 -22.775 Td [(1.)]TJ +0 g 0 G + [-500(The)-462(function)-462(v)55(alue)-462(is)-462(sp)-28(eci\014c)-462(to)-463(th)1(e)-463(storage)-462(format)-462(of)-462(matrix)]TJ/F30 9.9626 Tf 296.649 0 Td [(a)]TJ/F8 9.9626 Tf 5.23 0 Td [(;)-527(some)]TJ -289.149 -11.955 Td [(storage)-465(formats)-466(emplo)28(y)-465(padding,)-498(th)27(us)-465(the)-465(returned)-465(v)55(alue)-465(for)-465(the)-466(same)]TJ 0 -11.955 Td [(matrix)-333(ma)27(y)-333(b)-28(e)-333(di\013eren)28(t)-334(for)-333(di\013eren)28(t)-333(storage)-334(c)28(hoices.)]TJ/F27 9.9626 Tf -24.906 -30.936 Td [(get)]TJ ET q -1 0 0 1 336.723 199.806 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 166.827 311.15 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F30 9.9626 Tf 339.861 199.607 Td [(type)]TJ +/F27 9.9626 Tf 170.264 310.95 Td [(size)-503(|)-503(Get)-503(maxim)32(um)-503(n)32(um)32(b)-32(er)-503(of)-503(nonzero)-503(elemen)32(ts)-503(in)-503(a)-504(sp)1(a)-1(rse)]TJ -19.559 -11.955 Td [(matrix)]TJ 0 g 0 G -/F8 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G -/F27 9.9626 Tf -260.887 -21.658 Td [(On)-383(Return)]TJ +/F30 9.9626 Tf 0 -20.157 Td [(maxnz)-525(=)-525(a%get_size\050\051)]TJ 0 g 0 G +/F27 9.9626 Tf 0 -24.768 Td [(T)32(yp)-32(e:)]TJ 0 g 0 G - 0 -19.821 Td [(F)96(unction)-384(v)64(alue)]TJ +/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ 0 g 0 G -/F8 9.9626 Tf 78.387 0 Td [(The)-360(n)27(um)28(b)-28(er)-360(of)-361(lo)-27(cal)-361(cols,)-367(i.e.)-526(the)-361(n)28(um)28(b)-28(er)-360(of)-361(ind)1(ic)-1(es)-360(used)-361(b)28(y)]TJ -53.48 -11.955 Td [(the)-421(curren)28(t)-421(pro)-28(cess,)-443(including)-420(b)-28(oth)-421(lo)-28(cal)-421(and)-421(halo)-421(i)1(ndices)-1(;)-464(as)-421(explained)]TJ 0 -11.955 Td [(in)]TJ -0 0 1 rg 0 0 1 RG - [-343(1)]TJ +/F27 9.9626 Tf -33.797 -23.724 Td [(On)-383(En)32(try)]TJ +0 g 0 G +0 g 0 G + 0 -23.725 Td [(a)]TJ +0 g 0 G +/F8 9.9626 Tf 10.551 0 Td [(the)-333(sparse)-334(matrix)]TJ 14.355 -11.956 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ +0 g 0 G + -57.285 -36.722 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -23.725 Td [(F)96(unction)-384(v)64(alue)]TJ 0 g 0 G - [(,)-347(it)-343(is)-344(equal)-343(to)]TJ/F14 9.9626 Tf 81.777 0 Td [(jI)]TJ/F10 6.9738 Tf 8.192 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.494 Td [(j)]TJ/F8 9.9626 Tf 5.049 0 Td [(+)]TJ/F14 9.9626 Tf 10.03 0 Td [(jB)]TJ/F10 6.9738 Tf 9.311 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.494 Td [(j)]TJ/F8 9.9626 Tf 5.049 0 Td [(+)]TJ/F14 9.9626 Tf 10.031 0 Td [(jH)]TJ/F10 6.9738 Tf 11.181 -1.494 Td [(i)]TJ/F14 9.9626 Tf 3.317 1.494 Td [(j)]TJ/F8 9.9626 Tf 2.767 0 Td [(.)-475(The)-344(returned)-343(v)55(alue)-343(is)-344(sp)-27(e)-1(ci\014c)-343(to)-344(the)]TJ -153.338 -11.955 Td [(calling)-333(pro)-28(cess.)]TJ +/F8 9.9626 Tf 78.386 0 Td [(The)-253(maxim)27(u)1(m)-254(n)28(um)28(b)-28(er)-253(of)-253(nonzero)-254(elemen)28(ts)-253(that)-253(can)-254(b)-27(e)-254(stored)]TJ -53.48 -11.955 Td [(in)-333(sparse)-334(matrix)]TJ/F30 9.9626 Tf 74.056 0 Td [(a)]TJ/F8 9.9626 Tf 8.551 0 Td [(using)-333(its)-334(curren)28(t)-333(memory)-334(allo)-27(cation.)]TJ 0 g 0 G - 141.968 -31.825 Td [(15)]TJ + 59.361 -31.825 Td [(16)]TJ 0 g 0 G ET endstream endobj -736 0 obj << +785 0 obj << /Type /Page -/Contents 737 0 R -/Resources 735 0 R +/Contents 786 0 R +/Resources 784 0 R /MediaBox [0 0 595.276 841.89] -/Parent 721 0 R -/Annots [ 722 0 R 731 0 R 732 0 R 733 0 R 734 0 R ] ->> endobj -722 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.875 648.664 133.849 659.789] -/Subtype /Link -/A << /S /GoTo /D (figure.5) >> ->> endobj -731 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [294.721 415.146 361.779 426.271] -/Subtype /Link -/A << /S /GoTo /D (descdata) >> ->> endobj -732 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [300.421 361.435 307.395 373.391] -/Subtype /Link -/A << /S /GoTo /D (section.1) >> ->> endobj -733 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [294.721 196.396 361.779 207.521] -/Subtype /Link -/A << /S /GoTo /D (descdata) >> ->> endobj -734 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [135.531 130.731 142.505 142.686] -/Subtype /Link -/A << /S /GoTo /D (section.1) >> ->> endobj -738 0 obj << -/D [736 0 R /XYZ 99.895 740.998 null] ->> endobj -58 0 obj << -/D [736 0 R /XYZ 99.895 716.092 null] +/Parent 769 0 R >> endobj -739 0 obj << -/D [736 0 R /XYZ 257.563 663.829 null] +787 0 obj << +/D [785 0 R /XYZ 150.705 740.998 null] >> endobj -62 0 obj << -/D [736 0 R /XYZ 99.895 576.265 null] +94 0 obj << +/D [785 0 R /XYZ 150.705 569.876 null] >> endobj -66 0 obj << -/D [736 0 R /XYZ 99.895 537.494 null] +788 0 obj << +/D [785 0 R /XYZ 150.705 383.636 null] >> endobj -70 0 obj << -/D [736 0 R /XYZ 99.895 318.745 null] +98 0 obj << +/D [785 0 R /XYZ 150.705 291.743 null] >> endobj -735 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F30 616 0 R /F27 437 0 R /F14 619 0 R /F10 618 0 R >> +784 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -744 0 obj << -/Length 3952 +791 0 obj << +/Length 3701 >> stream 0 g 0 G 0 g 0 G +BT +/F27 9.9626 Tf 99.895 706.129 Td [(sizeof)-383(|)-384(Get)-383(memory)-383(o)-32(ccupation)-384(in)-383(b)32(ytes)-384(of)-383(a)-383(sparse)-384(matrix)]TJ +0 g 0 G 0 g 0 G +/F30 9.9626 Tf 0 -19.623 Td [(memory_size)-525(=)-525(a%sizeof\050\051)]TJ 0 g 0 G +/F27 9.9626 Tf 0 -23.906 Td [(T)32(yp)-32(e:)]TJ 0 g 0 G -q -1 0 0 1 157.987 705.93 cm -[]0 d 0 J 0.398 w 0 0 m 329.147 0 l S -Q -q -1 0 0 1 158.186 251.434 cm -[]0 d 0 J 0.398 w 0 0 m 0 454.296 l S -Q +/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ 0 g 0 G +/F27 9.9626 Tf -33.797 -22.576 Td [(On)-383(En)32(try)]TJ 0 g 0 G -BT -/F46 8.9664 Tf 175.77 686.801 Td [(type)-525(psb_sprec_type)]TJ 9.415 -10.959 Td [(type\050psb_sspmat_type\051,)-525(allocatable)-525(::)-525(av\050:\051)]TJ 0 -10.958 Td [(real\050psb_spk_\051,)-525(allocatable)-4200(::)-525(d\050:\051)]TJ 0 -10.959 Td [(type\050psb_desc_type\051)-8400(::)-525(desc_data)]TJ 0 -10.959 Td [(integer,)-525(allocatable)-7875(::)-525(iprcparm\050:\051)]TJ 0 -10.959 Td [(real\050psb_spk_\051,)-525(allocatable)-4200(::)-525(rprcparm\050:\051)]TJ 0 -10.959 Td [(integer,)-525(allocatable)-7875(::)-525(perm\050:\051,)-1050(invperm\050:\051)]TJ 0 -10.959 Td [(integer)-14700(::)-525(prec,)-525(base_prec)]TJ -9.415 -10.959 Td [(end)-525(type)-525(psb_sprec_type)]TJ 0 -21.918 Td [(type)-525(psb_dprec_type)]TJ 9.415 -10.959 Td [(type\050psb_dspmat_type\051,)-525(allocatable)-525(::)-525(av\050:\051)]TJ 0 -10.958 Td [(real\050psb_dpk_\051,)-525(allocatable)-4200(::)-525(d\050:\051)]TJ 0 -10.959 Td [(type\050psb_desc_type\051)-8400(::)-525(desc_data)]TJ 0 -10.959 Td [(integer,)-525(allocatable)-7875(::)-525(iprcparm\050:\051)]TJ 0 -10.959 Td [(real\050psb_dpk_\051,)-525(allocatable)-4200(::)-525(rprcparm\050:\051)]TJ 0 -10.959 Td [(integer,)-525(allocatable)-7875(::)-525(perm\050:\051,)-1050(invperm\050:\051)]TJ 0 -10.959 Td [(integer)-14700(::)-525(prec,)-525(base_prec)]TJ -9.415 -10.959 Td [(end)-525(type)-525(psb_dprec_type)]TJ 0 -21.918 Td [(type)-525(psb_cprec_type)]TJ 9.415 -10.959 Td [(type\050psb_cspmat_type\051,)-525(allocatable)-525(::)-525(av\050:\051)]TJ 0 -10.958 Td [(complex\050psb_spk_\051,)-525(allocatable)-2625(::)-525(d\050:\051)]TJ 0 -10.959 Td [(type\050psb_desc_type\051)-8400(::)-525(desc_data)]TJ 0 -10.959 Td [(integer,)-525(allocatable)-7875(::)-525(iprcparm\050:\051)]TJ 0 -10.959 Td [(real\050psb_spk_\051,)-525(allocatable)-4200(::)-525(rprcparm\050:\051)]TJ 0 -10.959 Td [(integer,)-525(allocatable)-7875(::)-525(perm\050:\051,)-1050(invperm\050:\051)]TJ 0 -10.959 Td [(integer)-14700(::)-525(prec,)-525(base_prec)]TJ -9.415 -10.959 Td [(end)-525(type)-525(psb_cprec_type)]TJ 0 -21.918 Td [(type)-525(psb_zprec_type)]TJ 9.415 -10.959 Td [(type\050psb_zspmat_type\051,)-525(allocatable)-525(::)-525(av\050:\051)]TJ 0 -10.959 Td [(complex\050psb_dpk_\051,)-525(allocatable)-2625(::)-525(d\050:\051)]TJ 0 -10.958 Td [(type\050psb_desc_type\051)-8400(::)-525(desc_data)]TJ 0 -10.959 Td [(integer,)-525(allocatable)-7875(::)-525(iprcparm\050:\051)]TJ 0 -10.959 Td [(real\050psb_dpk_\051,)-525(allocatable)-4200(::)-525(rprcparm\050:\051)]TJ 0 -10.959 Td [(integer,)-525(allocatable)-7875(::)-525(perm\050:\051,)-1050(invperm\050:\051)]TJ 0 -10.959 Td [(integer)-14700(::)-525(prec,)-525(base_prec)]TJ -9.415 -10.959 Td [(end)-525(type)-525(psb_zprec_type)]TJ +0 g 0 G + 0 -22.576 Td [(a)]TJ +0 g 0 G +/F8 9.9626 Tf 10.551 0 Td [(the)-333(sparse)-334(matrix)]TJ 14.356 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ +0 g 0 G + -57.286 -35.862 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -22.576 Td [(F)96(unction)-384(v)64(alue)]TJ +0 g 0 G +/F8 9.9626 Tf 78.387 0 Td [(The)-333(memory)-334(o)-28(ccupati)1(on)-334(in)-333(b)28(ytes.)]TJ/F27 9.9626 Tf -78.387 -29.412 Td [(get)]TJ ET q -1 0 0 1 486.935 251.434 cm -[]0 d 0 J 0.398 w 0 0 m 0 454.296 l S -Q -q -1 0 0 1 157.987 251.235 cm -[]0 d 0 J 0.398 w 0 0 m 329.147 0 l S +1 0 0 1 116.018 517.842 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -0 g 0 G BT -/F8 9.9626 Tf 162.674 223.195 Td [(Figure)-333(5:)-445(The)-333(PSBLAS)-333(de\014ned)-334(d)1(a)-1(t)1(a)-334(t)28(yp)-28(e)-333(that)-333(con)27(tains)-333(a)-333(preconditioner.)]TJ +/F27 9.9626 Tf 119.455 517.643 Td [(fm)32(t)-383(|)-384(Short)-383(description)-384(of)-383(the)-383(dynamic)-384(t)32(yp)-32(e)]TJ +0 g 0 G +0 g 0 G +/F30 9.9626 Tf -19.56 -19.623 Td [(write\050*,*\051)-525(a%get_fmt\050\051)]TJ +0 g 0 G +/F27 9.9626 Tf 0 -23.906 Td [(T)32(yp)-32(e:)]TJ +0 g 0 G +/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ +0 g 0 G +/F27 9.9626 Tf -33.797 -22.576 Td [(On)-383(En)32(try)]TJ +0 g 0 G +0 g 0 G + 0 -22.576 Td [(a)]TJ 0 g 0 G +/F8 9.9626 Tf 10.551 0 Td [(the)-333(sparse)-334(matrix)]TJ 14.356 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ 0 g 0 G -/F27 9.9626 Tf -11.969 -33.816 Td [(get)]TJ + -57.286 -35.861 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -22.577 Td [(F)96(unction)-384(v)64(alue)]TJ +0 g 0 G +/F8 9.9626 Tf 78.387 0 Td [(A)-484(short)-483(string)-484(describing)-484(the)-484(dynamic)-484(t)28(yp)-27(e)-484(of)-484(the)-484(matrix.)]TJ -53.48 -11.955 Td [(Prede\014ned)-333(v)55(alues)-333(include)]TJ/F30 9.9626 Tf 113.408 0 Td [(NULL)]TJ/F8 9.9626 Tf 20.922 0 Td [(,)]TJ/F30 9.9626 Tf 6.088 0 Td [(COO)]TJ/F8 9.9626 Tf 15.691 0 Td [(,)]TJ/F30 9.9626 Tf 6.088 0 Td [(CSR)]TJ/F8 9.9626 Tf 19.012 0 Td [(and)]TJ/F30 9.9626 Tf 19.372 0 Td [(CSC)]TJ/F8 9.9626 Tf 15.691 0 Td [(.)]TJ/F27 9.9626 Tf -241.179 -29.412 Td [(is)]TJ +ET +q +1 0 0 1 108.284 317.401 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 111.722 317.202 Td [(bld,)-383(is)]TJ ET q -1 0 0 1 166.827 189.579 cm +1 0 0 1 143.024 317.401 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 170.264 189.379 Td [(global)]TJ +/F27 9.9626 Tf 146.462 317.202 Td [(up)-32(d,)-383(is)]TJ ET q -1 0 0 1 200.708 189.579 cm +1 0 0 1 181.265 317.401 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 204.145 189.379 Td [(ro)32(ws)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(global)-383(ro)32(ws)]TJ +/F27 9.9626 Tf 184.702 317.202 Td [(asb)-383(|)-384(Status)-383(c)32(hec)32(k)]TJ 0 g 0 G 0 g 0 G -/F30 9.9626 Tf -53.44 -20.242 Td [(nr)-525(=)-525(desc%get_global_rows\050\051)]TJ +/F30 9.9626 Tf -84.807 -19.623 Td [(if)-525(\050a%is_bld\050\051\051)-525(then)]TJ 0 -11.955 Td [(if)-525(\050a%is_upd\050\051\051)-525(then)]TJ 0 -11.955 Td [(if)-525(\050a%is_asb\050\051\051)-525(then)]TJ 0 g 0 G -/F27 9.9626 Tf 0 -24.904 Td [(On)-383(En)32(try)]TJ +/F27 9.9626 Tf 0 -23.906 Td [(T)32(yp)-32(e:)]TJ 0 g 0 G +/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ 0 g 0 G - 0 -23.907 Td [(T)32(yp)-32(e:)]TJ +/F27 9.9626 Tf -33.797 -22.576 Td [(On)-383(En)32(try)]TJ 0 g 0 G -/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ 0 g 0 G - 133.077 -29.888 Td [(16)]TJ + 0 -22.576 Td [(a)]TJ +0 g 0 G +/F8 9.9626 Tf 10.551 0 Td [(the)-333(sparse)-334(matrix)]TJ 14.356 -11.956 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ +0 g 0 G + -57.286 -35.861 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -22.576 Td [(F)96(unction)-384(v)64(alue)]TJ +0 g 0 G +/F8 9.9626 Tf 78.387 0 Td [(A)]TJ/F30 9.9626 Tf 9.727 0 Td [(logical)]TJ/F8 9.9626 Tf 38.87 0 Td [(v)56(alue)-227(indicating)-226(whether)-227(the)-226(matrix)-227(is)-226(in)-227(the)-227(Bui)1(ld,)]TJ -102.077 -11.955 Td [(Up)-28(date)-333(or)-333(Asse)-1(m)28(bled)-333(state,)-333(res)-1(p)-27(ectiv)27(ely)84(.)]TJ +0 g 0 G + 141.968 -31.825 Td [(17)]TJ 0 g 0 G ET endstream endobj -743 0 obj << +790 0 obj << /Type /Page -/Contents 744 0 R -/Resources 742 0 R +/Contents 791 0 R +/Resources 789 0 R /MediaBox [0 0 595.276 841.89] -/Parent 721 0 R +/Parent 769 0 R >> endobj -745 0 obj << -/D [743 0 R /XYZ 150.705 740.998 null] +792 0 obj << +/D [790 0 R /XYZ 99.895 740.998 null] >> endobj -740 0 obj << -/D [743 0 R /XYZ 206.288 235.151 null] +102 0 obj << +/D [790 0 R /XYZ 99.895 697.187 null] >> endobj -74 0 obj << -/D [743 0 R /XYZ 150.705 180.151 null] +106 0 obj << +/D [790 0 R /XYZ 99.895 508.701 null] >> endobj -742 0 obj << -/Font << /F46 746 0 R /F8 438 0 R /F27 437 0 R /F30 616 0 R >> +110 0 obj << +/D [790 0 R /XYZ 99.895 308.26 null] +>> endobj +789 0 obj << +/Font << /F27 477 0 R /F30 664 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -751 0 obj << -/Length 5741 +797 0 obj << +/Length 7258 >> stream 0 g 0 G 0 g 0 G +BT +/F27 9.9626 Tf 150.705 706.129 Td [(3.2.2)-1150(Named)-383(Constan)32(ts)]TJ 0 g 0 G + 0 -18.389 Td [(psb)]TJ +ET +q +1 0 0 1 168.641 687.939 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q BT -/F27 9.9626 Tf 99.895 706.129 Td [(desc)]TJ +/F27 9.9626 Tf 172.078 687.74 Td [(dupl)]TJ +ET +q +1 0 0 1 195.043 687.939 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 198.48 687.74 Td [(o)32(vwrt)]TJ +ET +q +1 0 0 1 228.073 687.939 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q 0 g 0 G -/F8 9.9626 Tf 26.209 0 Td [(the)-333(comm)27(unication)-333(descriptor.)]TJ -1.302 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf 23.073 0 Td [(.)]TJ -55.452 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf 41.898 0 Td [(.)]TJ -71.509 -11.956 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.547 0 Td [(.)]TJ -43.033 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(structured)-333(data)-333(of)-334(t)28(yp)-28(e)]TJ -0 0 1 rg 0 0 1 RG -/F30 9.9626 Tf 170.915 0 Td [(psb)]TJ +BT +/F8 9.9626 Tf 236.492 687.74 Td [(Duplicate)-315(co)-28(e\016cien)28(ts)-315(should)-315(b)-28(e)-315(o)28(v)28(erwritten)-315(\050i.e.)-438(ignore)-315(du-)]TJ -60.881 -11.956 Td [(plications\051)]TJ +0 g 0 G +/F27 9.9626 Tf -24.906 -19.8 Td [(psb)]TJ ET q -1 0 0 1 312.036 658.507 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 168.641 656.183 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 172.078 655.984 Td [(dupl)]TJ +ET +q +1 0 0 1 195.043 656.183 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F30 9.9626 Tf 315.174 658.308 Td [(desc)]TJ +/F27 9.9626 Tf 198.48 655.984 Td [(add)]TJ +ET +q +1 0 0 1 217.467 656.183 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +0 g 0 G +BT +/F8 9.9626 Tf 225.886 655.984 Td [(Duplicate)-333(co)-28(e\016cien)28(ts)-334(should)-333(b)-28(e)-333(added;)]TJ +0 g 0 G +/F27 9.9626 Tf -75.181 -19.801 Td [(psb)]TJ +ET +q +1 0 0 1 168.641 636.383 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 172.078 636.183 Td [(dupl)]TJ +ET +q +1 0 0 1 195.043 636.383 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 198.48 636.183 Td [(err)]TJ +ET +q +1 0 0 1 213.856 636.383 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +0 g 0 G +BT +/F8 9.9626 Tf 222.274 636.183 Td [(Duplicate)-333(co)-28(e\016cien)28(ts)-334(should)-333(trigger)-333(an)-334(error)-333(conditino)]TJ +0 g 0 G +/F27 9.9626 Tf -71.569 -19.8 Td [(psb)]TJ +ET +q +1 0 0 1 168.641 616.582 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 172.078 616.383 Td [(up)-32(d)]TJ +ET +q +1 0 0 1 192.179 616.582 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 195.616 616.383 Td [(d\015t)]TJ +ET +q +1 0 0 1 213.489 616.582 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +0 g 0 G +BT +/F8 9.9626 Tf 221.907 616.383 Td [(Default)-333(up)-28(date)-333(strategy)-334(for)-333(matrix)-333(co)-28(e\016cien)28(ts;)]TJ +0 g 0 G +/F27 9.9626 Tf -71.202 -19.801 Td [(psb)]TJ +ET +q +1 0 0 1 168.641 596.781 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 172.078 596.582 Td [(up)-32(d)]TJ +ET +q +1 0 0 1 192.179 596.781 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +BT +/F27 9.9626 Tf 195.616 596.582 Td [(src)32(h)]TJ +ET +q +1 0 0 1 216.68 596.781 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +Q +0 g 0 G +BT +/F8 9.9626 Tf 225.098 596.582 Td [(Up)-28(date)-333(strategy)-333(base)-1(d)-333(on)-333(searc)28(h)-334(in)28(to)-333(the)-334(data)-333(structure;)]TJ +0 g 0 G +/F27 9.9626 Tf -74.393 -19.8 Td [(psb)]TJ ET q -1 0 0 1 336.723 658.507 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 168.641 576.981 cm +[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F30 9.9626 Tf 339.861 658.308 Td [(type)]TJ -0 g 0 G -/F8 9.9626 Tf 20.921 0 Td [(.)]TJ -0 g 0 G -/F27 9.9626 Tf -260.887 -19.082 Td [(On)-383(Return)]TJ -0 g 0 G -0 g 0 G - 0 -18.79 Td [(F)96(unction)-384(v)64(alue)]TJ -0 g 0 G -/F8 9.9626 Tf 78.387 0 Td [(The)-333(n)27(u)1(m)27(b)-27(e)-1(r)-333(of)-333(global)-333(ro)27(ws)-333(in)-333(the)-334(mesh)]TJ/F27 9.9626 Tf -78.387 -25.408 Td [(get)]TJ +/F27 9.9626 Tf 172.078 576.782 Td [(up)-32(d)]TJ ET q -1 0 0 1 116.018 595.227 cm +1 0 0 1 192.179 576.981 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 119.455 595.028 Td [(global)]TJ +/F27 9.9626 Tf 195.616 576.782 Td [(p)-32(erm)]TJ ET q -1 0 0 1 149.899 595.227 cm +1 0 0 1 222.504 576.981 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q -BT -/F27 9.9626 Tf 153.336 595.028 Td [(cols)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(global)-383(cols)]TJ -0 g 0 G -0 g 0 G -/F30 9.9626 Tf -53.441 -18.389 Td [(nr)-525(=)-525(desc%get_global_cols\050\051)]TJ -0 g 0 G -/F27 9.9626 Tf 0 -19.082 Td [(T)32(yp)-32(e:)]TJ -0 g 0 G -/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ -0 g 0 G -/F27 9.9626 Tf -33.797 -18.791 Td [(On)-383(En)32(try)]TJ -0 g 0 G 0 g 0 G - 0 -18.791 Td [(desc)]TJ -0 g 0 G -/F8 9.9626 Tf 26.209 0 Td [(the)-333(comm)27(unication)-333(descriptor.)]TJ -1.302 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf 23.073 0 Td [(.)]TJ -55.452 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf 41.898 0 Td [(.)]TJ -71.509 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.547 0 Td [(.)]TJ -43.033 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(structured)-333(data)-333(of)-334(t)28(yp)-28(e)]TJ -0 0 1 rg 0 0 1 RG -/F30 9.9626 Tf 170.915 0 Td [(psb)]TJ +BT +/F8 9.9626 Tf 230.922 576.782 Td [(Up)-28(date)-398(strategy)-398(based)-398(on)-398(additional)-398(p)-28(erm)28(utation)-398(data)-398(\050s)-1(ee)]TJ -55.311 -11.956 Td [(to)-28(ols)-333(routine)-333(desc)-1(r)1(iption\051.)]TJ/F16 11.9552 Tf -24.906 -27.834 Td [(3.3)-1125(Dense)-375(V)94(ector)-375(Data)-375(Structure)]TJ/F8 9.9626 Tf 0 -18.39 Td [(The)]TJ/F30 9.9626 Tf 20.035 0 Td [(psb)]TJ ET q -1 0 0 1 312.036 472.354 cm +1 0 0 1 187.059 518.802 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F30 9.9626 Tf 315.174 472.155 Td [(desc)]TJ +/F30 9.9626 Tf 190.197 518.602 Td [(vect)]TJ ET q -1 0 0 1 336.723 472.354 cm +1 0 0 1 211.746 518.802 cm []0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F30 9.9626 Tf 339.861 472.155 Td [(type)]TJ +/F30 9.9626 Tf 214.885 518.602 Td [(type)]TJ/F8 9.9626 Tf 23.799 0 Td [(data)-289(structure)-289(encapsulates)-289(th)1(e)-289(dense)-289(v)28(e)-1(ctors)-288(in)-289(a)-289(w)28(a)27(y)-288(sim-)]TJ -87.979 -11.955 Td [(ilar)-346(to)-346(sparse)-347(matrices.)-483(The)-346(user)-346(will)-347(not,)-349(in)-346(general,)-350(access)-346(the)-346(v)27(ector)-346(comp)-28(o-)]TJ 0 -11.955 Td [(nen)28(ts)-298(directly)83(,)-305(but)-297(rather)-298(via)-298(the)-298(routines)-298(of)-297(sec)-1(.)]TJ +0 0 1 rg 0 0 1 RG + [-297(6)]TJ 0 g 0 G -/F8 9.9626 Tf 20.921 0 Td [(.)]TJ + [(.)-433(Among)-298(other)-298(simple)-297(things,)]TJ 0 -11.955 Td [(w)28(e)-347(de\014ne)-346(here)-347(an)-346(extraction)-347(metho)-28(d)-346(that)-347(can)-346(b)-28(e)-346(used)-347(to)-346(ge)-1(t)-346(a)-347(ful)1(l)-347(cop)28(y)-347(of)-346(the)]TJ 0 -11.955 Td [(part)-333(of)-334(th)1(e)-334(v)28(ector)-333(s)-1(t)1(o)-1(r)1(e)-1(d)-333(on)-333(the)-333(lo)-28(cal)-334(pr)1(o)-28(cess.)]TJ 14.944 -11.956 Td [(The)-399(t)28(yp)-28(e)-399(declaration)-398(is)-399(sho)28(wn)-399(in)-399(\014gure)]TJ +0 0 1 rg 0 0 1 RG + [-399(5)]TJ 0 g 0 G -/F27 9.9626 Tf -260.887 -19.082 Td [(On)-383(Return)]TJ + [-399(where)]TJ/F30 9.9626 Tf 216.941 0 Td [(T)]TJ/F8 9.9626 Tf 9.203 0 Td [(is)-399(a)-399(placeholder)-398(for)-399(the)]TJ -241.088 -11.955 Td [(data)-333(t)28(yp)-28(e)-334(and)-333(precision)-333(v)55(arian)28(ts)]TJ 0 g 0 G +/F27 9.9626 Tf 0 -19.676 Td [(I)]TJ 0 g 0 G - 0 -18.791 Td [(F)96(unction)-384(v)64(alue)]TJ +/F8 9.9626 Tf 9.326 0 Td [(In)28(teger;)]TJ 0 g 0 G -/F8 9.9626 Tf 78.387 0 Td [(The)-333(n)27(u)1(m)27(b)-27(e)-1(r)-333(of)-333(global)-333(cols)-334(in)-333(the)-333(mes)-1(h)]TJ +/F27 9.9626 Tf -9.326 -19.8 Td [(S)]TJ 0 g 0 G +/F8 9.9626 Tf 11.346 0 Td [(Single)-333(precision)-334(real;)]TJ 0 g 0 G -/F16 11.9552 Tf -78.387 -47.049 Td [(get)]TJ -ET -q -1 0 0 1 118.794 387.432 cm -[]0 d 0 J 0.398 w 0 0 m 4.035 0 l S -Q -BT -/F16 11.9552 Tf 122.829 387.233 Td [(con)31(text|Get)-375(comm)31(unica)1(tion)-375(con)31(text)]TJ +/F27 9.9626 Tf -11.346 -19.801 Td [(D)]TJ 0 g 0 G +/F8 9.9626 Tf 13.768 0 Td [(Double)-333(precision)-334(real;)]TJ 0 g 0 G -/F30 9.9626 Tf -22.934 -24.09 Td [(ictxt)-525(=)-525(desc%get_context\050\051)]TJ +/F27 9.9626 Tf -13.768 -19.8 Td [(C)]TJ 0 g 0 G -/F27 9.9626 Tf 0 -19.082 Td [(T)32(yp)-32(e:)]TJ +/F8 9.9626 Tf 13.256 0 Td [(Single)-333(precision)-334(complex;)]TJ 0 g 0 G -/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ +/F27 9.9626 Tf -13.256 -19.801 Td [(Z)]TJ 0 g 0 G -/F27 9.9626 Tf -33.797 -18.791 Td [(On)-383(En)32(try)]TJ +/F8 9.9626 Tf 11.983 0 Td [(Double)-333(precision)-334(complex.)]TJ -11.983 -19.676 Td [(The)-431(actual)-432(data)-431(is)-432(con)28(tained)-431(in)-431(the)-432(p)-28(olymorphi)1(c)-432(comp)-28(onen)28(t)]TJ/F30 9.9626 Tf 274.27 0 Td [(a%a)]TJ/F8 9.9626 Tf 15.691 0 Td [(;)-480(its)-432(sp)-28(eci\014c)]TJ -289.961 -11.955 Td [(la)28(y)28(out)-411(can)-411(b)-27(e)-411(c)28(hosen)-411(dynamically)-410(among)-411(the)-411(prede\014ned)-410(t)28(yp)-28(es,)-430(or)-411(an)-410(en)28(tirely)]TJ 0 -11.955 Td [(new)-407(storage)-408(la)28(y)28(out)-408(can)-407(b)-28(e)-407(implemen)27(ted)-407(and)-407(passed)-408(to)-407(the)-408(l)1(ibrary)-408(at)-407(run)28(time)]TJ 0 -11.955 Td [(via)-333(the)]TJ/F30 9.9626 Tf 33.486 0 Td [(psb_spasb)]TJ/F8 9.9626 Tf 50.393 0 Td [(routine.)]TJ 0 g 0 G 0 g 0 G - 0 -18.791 Td [(desc)]TJ 0 g 0 G -/F8 9.9626 Tf 26.209 0 Td [(the)-333(comm)27(unication)-333(descriptor.)]TJ -1.302 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf 23.073 0 Td [(.)]TJ -55.452 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf 41.898 0 Td [(.)]TJ -71.509 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.547 0 Td [(.)]TJ -43.033 -11.956 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(structured)-333(data)-333(of)-334(t)28(yp)-28(e)]TJ -0 0 1 rg 0 0 1 RG -/F30 9.9626 Tf 170.915 0 Td [(psb)]TJ ET q -1 0 0 1 312.036 258.858 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 166.453 268.246 cm +[]0 d 0 J 0.398 w 0 0 m 312.215 0 l S Q -BT -/F30 9.9626 Tf 315.174 258.658 Td [(desc)]TJ -ET q -1 0 0 1 336.723 258.858 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 166.652 162.332 cm +[]0 d 0 J 0.398 w 0 0 m 0 105.715 l S Q -BT -/F30 9.9626 Tf 339.861 258.658 Td [(type)]TJ -0 g 0 G -/F8 9.9626 Tf 20.921 0 Td [(.)]TJ -0 g 0 G -/F27 9.9626 Tf -260.887 -19.081 Td [(On)-383(Return)]TJ 0 g 0 G 0 g 0 G - 0 -18.791 Td [(F)96(unction)-384(v)64(alue)]TJ -0 g 0 G -/F8 9.9626 Tf 78.387 0 Td [(The)-333(comm)27(unication)-333(con)28(text.)]TJ/F27 9.9626 Tf -78.387 -25.408 Td [(psb)]TJ -ET -q -1 0 0 1 117.832 195.578 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q -BT -/F27 9.9626 Tf 121.269 195.378 Td [(cd)]TJ -ET -q -1 0 0 1 133.413 195.578 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q BT -/F27 9.9626 Tf 136.85 195.378 Td [(get)]TJ +/F30 9.9626 Tf 185.282 253.988 Td [(type)-525(psb_T_base_vect_type)]TJ 10.461 -11.955 Td [(TYPE\050KIND_\051,)-525(allocatable)-525(::)-525(v\050:\051)]TJ -10.461 -11.955 Td [(end)-525(type)-525(psb_T_base_vect_type)]TJ 0 -23.911 Td [(type)-525(psb_T_vect_type)]TJ 10.461 -11.955 Td [(class\050psb_T_base_vect_type\051,)-525(allocatable)-525(::)-525(v)]TJ -10.461 -11.955 Td [(end)-525(type)-1050(psb_T_vect_type)]TJ ET q -1 0 0 1 152.973 195.578 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +1 0 0 1 478.468 162.332 cm +[]0 d 0 J 0.398 w 0 0 m 0 105.715 l S Q -BT -/F27 9.9626 Tf 156.41 195.378 Td [(large)]TJ -ET q -1 0 0 1 181.547 195.578 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +1 0 0 1 166.453 162.133 cm +[]0 d 0 J 0.398 w 0 0 m 312.215 0 l S Q -BT -/F27 9.9626 Tf 184.984 195.378 Td [(threshold)-268(|)-268(Get)-268(threshold)-269(for)-268(index)-268(mapping)-268(switc)32(h)]TJ -0 g 0 G -0 g 0 G -/F30 9.9626 Tf -85.089 -18.389 Td [(ith)-525(=)-525(psb_cd_get_large_threshold\050\051)]TJ -0 g 0 G -/F27 9.9626 Tf 0 -19.082 Td [(T)32(yp)-32(e:)]TJ -0 g 0 G -/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ -0 g 0 G -/F27 9.9626 Tf -33.797 -18.791 Td [(On)-383(Return)]TJ 0 g 0 G +BT +/F8 9.9626 Tf 164.043 134.093 Td [(Figure)-333(5:)-778(The)-333(PSBLAS)-334(de\014ned)-333(data)-333(t)28(yp)-28(e)-334(that)-333(con)28(tains)-333(a)-334(dense)-333(v)28(ector..)]TJ 0 g 0 G - 0 -18.79 Td [(F)96(unction)-384(v)64(alue)]TJ 0 g 0 G -/F8 9.9626 Tf 78.387 0 Td [(The)-333(curren)28(t)-334(v)56(alue)-334(for)-333(the)-333(size)-334(threshold.)]TJ 0 g 0 G - 88.488 -29.888 Td [(17)]TJ + 153.536 -43.655 Td [(18)]TJ 0 g 0 G ET endstream endobj -750 0 obj << +796 0 obj << /Type /Page -/Contents 751 0 R -/Resources 749 0 R +/Contents 797 0 R +/Resources 795 0 R /MediaBox [0 0 595.276 841.89] -/Parent 721 0 R -/Annots [ 741 0 R 747 0 R 748 0 R ] +/Parent 769 0 R +/Annots [ 793 0 R 794 0 R ] >> endobj -741 0 obj << +793 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [294.721 655.098 361.779 666.223] +/Rect [361.348 491.759 368.322 502.607] /Subtype /Link -/A << /S /GoTo /D (descdata) >> +/A << /S /GoTo /D (section.6) >> >> endobj -747 0 obj << +794 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [294.721 468.945 361.779 480.069] +/Rect [343.178 455.893 350.152 466.741] /Subtype /Link -/A << /S /GoTo /D (descdata) >> +/A << /S /GoTo /D (figure.5) >> >> endobj -748 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [294.721 255.448 361.779 266.573] -/Subtype /Link -/A << /S /GoTo /D (descdata) >> +798 0 obj << +/D [796 0 R /XYZ 150.705 740.998 null] >> endobj -752 0 obj << -/D [750 0 R /XYZ 99.895 740.998 null] +114 0 obj << +/D [796 0 R /XYZ 150.705 716.092 null] >> endobj -78 0 obj << -/D [750 0 R /XYZ 99.895 586.657 null] +118 0 obj << +/D [796 0 R /XYZ 150.705 548.449 null] >> endobj -82 0 obj << -/D [750 0 R /XYZ 99.895 372.773 null] +799 0 obj << +/D [796 0 R /XYZ 170.74 518.602 null] >> endobj -86 0 obj << -/D [750 0 R /XYZ 99.895 187.007 null] +800 0 obj << +/D [796 0 R /XYZ 207.658 146.048 null] >> endobj -749 0 obj << -/Font << /F27 437 0 R /F8 438 0 R /F30 616 0 R /F16 435 0 R >> +795 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F16 475 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -757 0 obj << -/Length 5496 +804 0 obj << +/Length 3278 >> stream 0 g 0 G 0 g 0 G BT -/F27 9.9626 Tf 150.705 706.129 Td [(psb)]TJ -ET -q -1 0 0 1 168.641 706.328 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q -BT -/F27 9.9626 Tf 172.078 706.129 Td [(cd)]TJ -ET -q -1 0 0 1 184.223 706.328 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q -BT -/F27 9.9626 Tf 187.66 706.129 Td [(set)]TJ -ET -q -1 0 0 1 202.573 706.328 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S -Q -BT -/F27 9.9626 Tf 206.01 706.129 Td [(large)]TJ +/F27 9.9626 Tf 99.895 706.129 Td [(3.3.1)-1150(Metho)-32(ds)]TJ 0 -19.587 Td [(get)]TJ ET q -1 0 0 1 231.147 706.328 cm +1 0 0 1 116.018 686.742 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 234.585 706.129 Td [(threshold)-323(|)-324(Set)-323(threshold)-323(for)-324(index)-323(mapping)-324(switc)32(h)]TJ +/F27 9.9626 Tf 119.455 686.542 Td [(nro)32(ws)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(ro)32(ws)-383(in)-383(a)-384(dense)-383(v)32(ector)]TJ 0 g 0 G 0 g 0 G -/F30 9.9626 Tf -83.88 -18.905 Td [(call)-525(psb_cd_set_large_threshold\050ith\051)]TJ +/F30 9.9626 Tf -19.56 -19.586 Td [(nr)-525(=)-525(v%get_nrows\050\051)]TJ 0 g 0 G -/F27 9.9626 Tf 0 -22.75 Td [(T)32(yp)-32(e:)]TJ +/F27 9.9626 Tf 0 -23.847 Td [(T)32(yp)-32(e:)]TJ 0 g 0 G /F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ 0 g 0 G -/F27 9.9626 Tf -33.797 -21.034 Td [(On)-383(En)32(try)]TJ +/F27 9.9626 Tf -33.797 -22.499 Td [(On)-383(En)32(try)]TJ +0 g 0 G 0 g 0 G + 0 -22.498 Td [(v)]TJ 0 g 0 G - 0 -21.034 Td [(ith)]TJ +/F8 9.9626 Tf 11.028 0 Td [(the)-333(dense)-334(v)28(ector)]TJ 13.879 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ 0 g 0 G -/F8 9.9626 Tf 18.984 0 Td [(the)-333(new)-334(threshold)-333(for)-333(comm)27(un)1(ic)-1(ati)1(on)-334(descriptors.)]TJ 5.923 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.378 0 Td [(global)]TJ/F8 9.9626 Tf 29.756 0 Td [(.)]TJ -62.135 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf 41.898 0 Td [(.)]TJ -71.51 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.548 0 Td [(.)]TJ -43.034 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(in)28(teger)-333(v)55(alue)-333(greater)-334(th)1(an)-334(zero.)]TJ -24.906 -23.027 Td [(Note:)-756(the)-490(thr)1(e)-1(shold)-489(v)56(alue)-489(is)-490(only)-489(queried)-489(b)28(y)-489(the)-490(library)-489(at)-489(the)-489(time)-490(a)-489(call)]TJ 0 -11.955 Td [(to)]TJ/F30 9.9626 Tf 13.431 0 Td [(psb_cdall)]TJ/F8 9.9626 Tf 51.648 0 Td [(is)-459(executed,)-491(therefore)-459(c)27(hanging)-459(the)-459(threshold)-459(has)-459(no)-460(e\013ect)-459(on)]TJ -65.079 -11.955 Td [(comm)28(unication)-334(descriptors)-333(that)-333(ha)28(v)27(e)-333(already)-333(b)-28(een)-333(initialized.)]TJ/F27 9.9626 Tf 0 -27.367 Td [(get)]TJ + -57.286 -35.803 Td [(On)-383(Return)]TJ +0 g 0 G +0 g 0 G + 0 -22.498 Td [(F)96(unction)-384(v)64(alue)]TJ +0 g 0 G +/F8 9.9626 Tf 78.387 0 Td [(The)-333(n)28(um)27(b)-27(e)-1(r)-333(of)-333(ro)28(ws)-334(of)-333(sparse)-333(matrix)]TJ/F30 9.9626 Tf 164.937 0 Td [(a)]TJ/F8 9.9626 Tf 5.23 0 Td [(.)]TJ/F27 9.9626 Tf -248.554 -29.308 Td [(get)]TJ ET q -1 0 0 1 166.827 500.482 cm +1 0 0 1 116.018 498.747 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 170.264 500.282 Td [(nro)32(ws)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(ro)32(ws)-383(in)-383(a)-384(sparse)-383(matrix)]TJ +/F27 9.9626 Tf 119.455 498.548 Td [(ncols)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(columns)-383(in)-383(a)-384(sparse)-383(matrix)]TJ -19.56 -19.587 Td [(sizeof)-383(|)-384(Get)-383(memory)-383(o)-32(ccupation)-384(in)-383(b)32(ytes)-384(of)-383(a)-383(dense)-384(v)32(ector)-383(matrix)]TJ 0 g 0 G 0 g 0 G -/F30 9.9626 Tf -19.559 -18.905 Td [(nr)-525(=)-525(a%get_nrows\050\051)]TJ +/F30 9.9626 Tf 0 -19.586 Td [(memory_size)-525(=)-525(v%sizeof\050\051)]TJ 0 g 0 G -/F27 9.9626 Tf 0 -22.749 Td [(T)32(yp)-32(e:)]TJ +/F27 9.9626 Tf 0 -23.847 Td [(T)32(yp)-32(e:)]TJ 0 g 0 G /F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ 0 g 0 G -/F27 9.9626 Tf -33.797 -21.034 Td [(On)-383(En)32(try)]TJ -0 g 0 G +/F27 9.9626 Tf -33.797 -22.499 Td [(On)-383(En)32(try)]TJ 0 g 0 G - 0 -21.034 Td [(a)]TJ 0 g 0 G -/F8 9.9626 Tf 10.551 0 Td [(the)-333(sparse)-334(matrix)]TJ 14.355 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.956 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.548 0 Td [(.)]TJ -43.034 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(structured)-333(data)-333(of)-334(t)28(yp)-28(e)]TJ -0 0 1 rg 0 0 1 RG -/F30 9.9626 Tf 170.915 0 Td [(psb)]TJ -ET -q -1 0 0 1 362.845 368.938 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S -Q -BT -/F30 9.9626 Tf 365.983 368.739 Td [(spmat)]TJ -ET -q -1 0 0 1 392.763 368.938 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S -Q -BT -/F30 9.9626 Tf 395.901 368.739 Td [(type)]TJ + 0 -22.498 Td [(v)]TJ 0 g 0 G -/F8 9.9626 Tf 20.921 0 Td [(.)]TJ +/F8 9.9626 Tf 11.028 0 Td [(the)-333(dense)-334(v)28(ector)]TJ 13.879 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ 0 g 0 G -/F27 9.9626 Tf -266.117 -22.749 Td [(On)-383(Return)]TJ + -57.286 -35.803 Td [(On)-383(Return)]TJ 0 g 0 G 0 g 0 G - 0 -21.034 Td [(F)96(unction)-384(v)64(alue)]TJ + 0 -22.498 Td [(F)96(unction)-384(v)64(alue)]TJ 0 g 0 G -/F8 9.9626 Tf 78.386 0 Td [(The)-333(n)27(um)28(b)-28(er)-333(of)-333(ro)28(ws)-334(of)-333(sparse)-333(matrix)]TJ/F30 9.9626 Tf 164.937 0 Td [(a)]TJ/F8 9.9626 Tf 5.231 0 Td [(.)]TJ/F27 9.9626 Tf -248.554 -27.367 Td [(get)]TJ +/F8 9.9626 Tf 78.387 0 Td [(The)-333(memory)-334(o)-28(ccupati)1(on)-334(in)-333(b)28(ytes.)]TJ/F27 9.9626 Tf -78.387 -29.308 Td [(get)]TJ ET q -1 0 0 1 166.827 297.789 cm +1 0 0 1 116.018 291.166 cm []0 d 0 J 0.398 w 0 0 m 3.437 0 l S Q BT -/F27 9.9626 Tf 170.264 297.589 Td [(ncols)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(columns)-383(in)-384(a)-383(sparse)-383(matrix)]TJ +/F27 9.9626 Tf 119.455 290.967 Td [(v)32(ect)-383(|)-384(Get)-383(a)-383(cop)32(y)-384(of)-383(the)-383(v)31(ector)-383(con)32(ten)32(ts)]TJ 0 g 0 G 0 g 0 G -/F30 9.9626 Tf -19.559 -18.905 Td [(nr)-525(=)-525(a%get_ncols\050\051)]TJ +/F30 9.9626 Tf -19.56 -19.587 Td [(extv)-525(=)-525(v%get_vect\050\051)]TJ 0 g 0 G -/F27 9.9626 Tf 0 -22.749 Td [(T)32(yp)-32(e:)]TJ +/F27 9.9626 Tf 0 -23.847 Td [(T)32(yp)-32(e:)]TJ 0 g 0 G /F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ 0 g 0 G -/F27 9.9626 Tf -33.797 -21.034 Td [(On)-383(En)32(try)]TJ -0 g 0 G +/F27 9.9626 Tf -33.797 -22.498 Td [(On)-383(En)32(try)]TJ 0 g 0 G - 0 -21.034 Td [(a)]TJ 0 g 0 G -/F8 9.9626 Tf 10.551 0 Td [(the)-333(sparse)-334(matrix)]TJ 14.355 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.956 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.548 0 Td [(.)]TJ -43.034 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(structured)-333(data)-333(of)-334(t)28(yp)-28(e)]TJ -0 0 1 rg 0 0 1 RG -/F30 9.9626 Tf 170.915 0 Td [(psb)]TJ -ET -q -1 0 0 1 362.845 166.245 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S -Q -BT -/F30 9.9626 Tf 365.983 166.046 Td [(spmat)]TJ -ET -q -1 0 0 1 392.763 166.245 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S -Q -BT -/F30 9.9626 Tf 395.901 166.046 Td [(type)]TJ + 0 -22.498 Td [(v)]TJ 0 g 0 G -/F8 9.9626 Tf 20.921 0 Td [(.)]TJ +/F8 9.9626 Tf 11.028 0 Td [(the)-333(dense)-334(v)28(ector)]TJ 13.879 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ 0 g 0 G -/F27 9.9626 Tf -266.117 -22.749 Td [(On)-383(Return)]TJ + -57.286 -35.803 Td [(On)-383(Return)]TJ 0 g 0 G 0 g 0 G - 0 -21.034 Td [(F)96(unction)-384(v)64(alue)]TJ + 0 -22.498 Td [(F)96(unction)-384(v)64(alue)]TJ 0 g 0 G -/F8 9.9626 Tf 78.386 0 Td [(The)-333(n)27(um)28(b)-28(er)-333(of)-333(columns)-334(of)-333(sparse)-333(matrix)]TJ/F30 9.9626 Tf 180.684 0 Td [(a)]TJ/F8 9.9626 Tf 5.23 0 Td [(.)]TJ +/F8 9.9626 Tf 78.387 0 Td [(An)-353(allo)-28(catable)-354(arra)28(y)-353(holding)-354(a)-353(cop)28(y)-354(of)-353(the)-354(dense)-353(v)28(ector)-354(con-)]TJ -53.48 -11.955 Td [(ten)28(ts.)]TJ 0 g 0 G - -97.426 -31.825 Td [(18)]TJ + 141.968 -29.888 Td [(19)]TJ 0 g 0 G ET endstream endobj -756 0 obj << +803 0 obj << /Type /Page -/Contents 757 0 R -/Resources 755 0 R +/Contents 804 0 R +/Resources 802 0 R /MediaBox [0 0 595.276 841.89] -/Parent 721 0 R -/Annots [ 753 0 R 754 0 R ] +/Parent 807 0 R >> endobj -753 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [345.53 365.529 417.818 376.654] -/Subtype /Link -/A << /S /GoTo /D (spdata) >> +805 0 obj << +/D [803 0 R /XYZ 99.895 740.998 null] >> endobj -754 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [345.53 162.836 417.818 173.961] -/Subtype /Link -/A << /S /GoTo /D (spdata) >> +122 0 obj << +/D [803 0 R /XYZ 99.895 716.092 null] >> endobj -758 0 obj << -/D [756 0 R /XYZ 150.705 740.998 null] +126 0 obj << +/D [803 0 R /XYZ 99.895 677.617 null] >> endobj -90 0 obj << -/D [756 0 R /XYZ 150.705 697.519 null] +806 0 obj << +/D [803 0 R /XYZ 99.895 489.623 null] >> endobj -94 0 obj << -/D [756 0 R /XYZ 150.705 491.672 null] +130 0 obj << +/D [803 0 R /XYZ 99.895 470.036 null] >> endobj -98 0 obj << -/D [756 0 R /XYZ 150.705 288.979 null] +134 0 obj << +/D [803 0 R /XYZ 99.895 282.042 null] >> endobj -755 0 obj << -/Font << /F27 437 0 R /F30 616 0 R /F8 438 0 R >> +802 0 obj << +/Font << /F27 477 0 R /F30 664 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -762 0 obj << -/Length 2436 +810 0 obj << +/Length 2332 >> stream 0 g 0 G 0 g 0 G BT -/F27 9.9626 Tf 99.895 706.129 Td [(get)]TJ +/F16 11.9552 Tf 150.705 706.129 Td [(3.4)-1125(Preconditioner)-375(data)-375(structure)]TJ/F8 9.9626 Tf 0 -18.389 Td [(Our)-383(base)-383(library)-383(o\013ers)-383(supp)-28(ort)-383(for)-383(simple)-383(w)28(ell)-383(kno)27(wn)-383(precondition)1(e)-1(r)1(s)-384(lik)28(e)-383(Di-)]TJ 0 -11.956 Td [(agonal)-333(Scaling)-334(or)-333(Blo)-28(c)28(k)-333(Jacobi)-334(with)-333(incomplete)-333(factorization)-333(ILU\0500\051.)]TJ 14.944 -11.955 Td [(A)-427(preconditioner)-428(is)-427(held)-428(in)-427(the)]TJ/F30 9.9626 Tf 142.723 0 Td [(psb)]TJ ET q -1 0 0 1 116.018 706.328 cm -[]0 d 0 J 0.398 w 0 0 m 3.437 0 l S +1 0 0 1 324.691 664.028 cm +[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +Q +BT +/F30 9.9626 Tf 327.829 663.829 Td [(prec)]TJ +ET +q +1 0 0 1 349.378 664.028 cm +[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S Q BT -/F27 9.9626 Tf 119.455 706.129 Td [(nnzeros)-383(|)-384(Get)-383(n)32(um)32(b)-32(er)-383(of)-384(nonzero)-383(elemen)32(ts)-383(in)-384(a)-383(sparse)-383(ma)-1(trix)]TJ +/F30 9.9626 Tf 352.516 663.829 Td [(type)]TJ/F8 9.9626 Tf 25.18 0 Td [(data)-427(structure)-428(rep)-28(orted)-427(in)]TJ -226.991 -11.955 Td [(\014gure)]TJ +0 0 1 rg 0 0 1 RG + [-361(6)]TJ 0 g 0 G + [(.)-527(The)]TJ/F30 9.9626 Tf 61.729 0 Td [(psb_prec_type)]TJ/F8 9.9626 Tf 71.59 0 Td [(data)-361(t)28(yp)-28(e)-361(ma)28(y)-361(con)28(tain)-361(a)-361(simple)-361(preconditionin)1(g)]TJ -133.319 -11.955 Td [(matrix)-395(with)-396(the)-395(asso)-28(ciated)-396(comm)28(unication)-395(desc)-1(r)1(iptor.The)-396(v)56(alues)-396(con)28(tained)-395(in)]TJ 0 -11.955 Td [(the)]TJ/F30 9.9626 Tf 16.637 0 Td [(iprcparm)]TJ/F8 9.9626 Tf 44.642 0 Td [(and)]TJ/F30 9.9626 Tf 18.851 0 Td [(rprcparm)]TJ/F8 9.9626 Tf 44.642 0 Td [(de\014ne)-281(tha)-281(t)28(yp)-28(e)-281(of)-281(preconditioner)-281(along)-281(with)-281(all)-281(the)]TJ -124.772 -11.956 Td [(parameters)-420(related)-421(to)-420(it;)-464(th)28(us,)]TJ/F30 9.9626 Tf 139.397 0 Td [(iprcparm)]TJ/F8 9.9626 Tf 46.03 0 Td [(and)]TJ/F30 9.9626 Tf 20.239 0 Td [(rprcparm)]TJ/F8 9.9626 Tf 46.03 0 Td [(de\014ne)-420(ho)28(w)-421(the)-420(other)]TJ -251.696 -11.955 Td [(records)-282(ha)28(v)28(e)-282(to)-282(b)-27(e)-282(in)28(terpreted.)-428(This)-281(data)-282(structure)-282(is)-282(the)-281(basis)-282(of)-282(more)-282(complex)]TJ 0 -11.955 Td [(preconditioning)-333(strategies,)-334(whic)28(h)-333(are)-333(the)-334(sub)-55(ject)-334(of)-333(further)-333(researc)28(h.)]TJ/F16 11.9552 Tf 0 -27.888 Td [(3.5)-1125(Data)-375(structure)-375(Metho)-31(ds)]TJ 0 g 0 G -/F30 9.9626 Tf -19.56 -18.389 Td [(nr)-525(=)-525(a%get_nnzeros\050\051)]TJ +/F8 9.9626 Tf 166.874 -473.772 Td [(20)]TJ 0 g 0 G -/F27 9.9626 Tf 0 -21.918 Td [(T)32(yp)-32(e:)]TJ +ET +endstream +endobj +809 0 obj << +/Type /Page +/Contents 810 0 R +/Resources 808 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 807 0 R +/Annots [ 801 0 R ] +>> endobj +801 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [177.685 648.664 184.659 659.789] +/Subtype /Link +/A << /S /GoTo /D (figure.6) >> +>> endobj +811 0 obj << +/D [809 0 R /XYZ 150.705 740.998 null] +>> endobj +138 0 obj << +/D [809 0 R /XYZ 150.705 716.092 null] +>> endobj +812 0 obj << +/D [809 0 R /XYZ 308.372 663.829 null] +>> endobj +142 0 obj << +/D [809 0 R /XYZ 150.705 576.22 null] +>> endobj +808 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F30 664 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +816 0 obj << +/Length 3319 +>> +stream 0 g 0 G -/F8 9.9626 Tf 33.797 0 Td [(Async)28(hronous.)]TJ 0 g 0 G -/F27 9.9626 Tf -33.797 -19.926 Td [(On)-383(En)32(try)]TJ 0 g 0 G 0 g 0 G - 0 -19.925 Td [(a)]TJ 0 g 0 G -/F8 9.9626 Tf 10.551 0 Td [(the)-333(sparse)-334(matrix)]TJ 14.356 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.547 0 Td [(.)]TJ -43.033 -11.956 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(structured)-333(data)-333(of)-334(t)28(yp)-28(e)]TJ -0 0 1 rg 0 0 1 RG -/F30 9.9626 Tf 170.915 0 Td [(psb)]TJ -ET q -1 0 0 1 312.036 578.35 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 107.177 655.463 cm +[]0 d 0 J 0.398 w 0 0 m 329.147 0 l S Q -BT -/F30 9.9626 Tf 315.174 578.15 Td [(spmat)]TJ -ET q -1 0 0 1 341.953 578.35 cm -[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S +1 0 0 1 107.377 200.968 cm +[]0 d 0 J 0.398 w 0 0 m 0 454.296 l S Q -BT -/F30 9.9626 Tf 345.091 578.15 Td [(type)]TJ 0 g 0 G -/F8 9.9626 Tf 20.922 0 Td [(.)]TJ -0 g 0 G -/F27 9.9626 Tf -266.118 -21.917 Td [(On)-383(Return)]TJ 0 g 0 G +BT +/F46 8.9664 Tf 124.961 636.335 Td [(type)-525(psb_sprec_type)]TJ 9.414 -10.959 Td [(type\050psb_sspmat_type\051,)-525(allocatable)-525(::)-525(av\050:\051)]TJ 0 -10.959 Td [(real\050psb_spk_\051,)-525(allocatable)-4200(::)-525(d\050:\051)]TJ 0 -10.959 Td [(type\050psb_desc_type\051)-8400(::)-525(desc_data)]TJ 0 -10.959 Td [(integer,)-525(allocatable)-7875(::)-525(iprcparm\050:\051)]TJ 0 -10.959 Td [(real\050psb_spk_\051,)-525(allocatable)-4200(::)-525(rprcparm\050:\051)]TJ 0 -10.958 Td [(integer,)-525(allocatable)-7875(::)-525(perm\050:\051,)-1050(invperm\050:\051)]TJ 0 -10.959 Td [(integer)-14700(::)-525(prec,)-525(base_prec)]TJ -9.414 -10.959 Td [(end)-525(type)-525(psb_sprec_type)]TJ 0 -21.918 Td [(type)-525(psb_dprec_type)]TJ 9.414 -10.959 Td [(type\050psb_dspmat_type\051,)-525(allocatable)-525(::)-525(av\050:\051)]TJ 0 -10.959 Td [(real\050psb_dpk_\051,)-525(allocatable)-4200(::)-525(d\050:\051)]TJ 0 -10.959 Td [(type\050psb_desc_type\051)-8400(::)-525(desc_data)]TJ 0 -10.959 Td [(integer,)-525(allocatable)-7875(::)-525(iprcparm\050:\051)]TJ 0 -10.959 Td [(real\050psb_dpk_\051,)-525(allocatable)-4200(::)-525(rprcparm\050:\051)]TJ 0 -10.958 Td [(integer,)-525(allocatable)-7875(::)-525(perm\050:\051,)-1050(invperm\050:\051)]TJ 0 -10.959 Td [(integer)-14700(::)-525(prec,)-525(base_prec)]TJ -9.414 -10.959 Td [(end)-525(type)-525(psb_dprec_type)]TJ 0 -21.918 Td [(type)-525(psb_cprec_type)]TJ 9.414 -10.959 Td [(type\050psb_cspmat_type\051,)-525(allocatable)-525(::)-525(av\050:\051)]TJ 0 -10.959 Td [(complex\050psb_spk_\051,)-525(allocatable)-2625(::)-525(d\050:\051)]TJ 0 -10.959 Td [(type\050psb_desc_type\051)-8400(::)-525(desc_data)]TJ 0 -10.959 Td [(integer,)-525(allocatable)-7875(::)-525(iprcparm\050:\051)]TJ 0 -10.959 Td [(real\050psb_spk_\051,)-525(allocatable)-4200(::)-525(rprcparm\050:\051)]TJ 0 -10.958 Td [(integer,)-525(allocatable)-7875(::)-525(perm\050:\051,)-1050(invperm\050:\051)]TJ 0 -10.959 Td [(integer)-14700(::)-525(prec,)-525(base_prec)]TJ -9.414 -10.959 Td [(end)-525(type)-525(psb_cprec_type)]TJ 0 -21.918 Td [(type)-525(psb_zprec_type)]TJ 9.414 -10.959 Td [(type\050psb_zspmat_type\051,)-525(allocatable)-525(::)-525(av\050:\051)]TJ 0 -10.959 Td [(complex\050psb_dpk_\051,)-525(allocatable)-2625(::)-525(d\050:\051)]TJ 0 -10.959 Td [(type\050psb_desc_type\051)-8400(::)-525(desc_data)]TJ 0 -10.959 Td [(integer,)-525(allocatable)-7875(::)-525(iprcparm\050:\051)]TJ 0 -10.959 Td [(real\050psb_dpk_\051,)-525(allocatable)-4200(::)-525(rprcparm\050:\051)]TJ 0 -10.959 Td [(integer,)-525(allocatable)-7875(::)-525(perm\050:\051,)-1050(invperm\050:\051)]TJ 0 -10.958 Td [(integer)-14700(::)-525(prec,)-525(base_prec)]TJ -9.414 -10.959 Td [(end)-525(type)-525(psb_zprec_type)]TJ +ET +q +1 0 0 1 436.125 200.968 cm +[]0 d 0 J 0.398 w 0 0 m 0 454.296 l S +Q +q +1 0 0 1 107.177 200.768 cm +[]0 d 0 J 0.398 w 0 0 m 329.147 0 l S +Q 0 g 0 G - 0 -19.926 Td [(F)96(unction)-384(v)64(alue)]TJ -0 g 0 G -/F8 9.9626 Tf 78.387 0 Td [(The)-333(n)27(u)1(m)27(b)-27(e)-1(r)-333(of)-333(nonzero)-333(elem)-1(en)28(ts)-333(stored)-333(in)-334(sparse)-333(matrix)]TJ/F30 9.9626 Tf 249.979 0 Td [(a)]TJ/F8 9.9626 Tf 5.231 0 Td [(.)]TJ/F27 9.9626 Tf -333.597 -21.917 Td [(Notes)]TJ +BT +/F8 9.9626 Tf 111.864 172.729 Td [(Figure)-333(6:)-445(The)-333(PSBLAS)-333(de\014ned)-334(data)-333(t)28(yp)-28(e)-333(that)-333(c)-1(on)28(tains)-333(a)-333(preconditioner.)]TJ 0 g 0 G -/F8 9.9626 Tf 12.177 -19.926 Td [(1.)]TJ 0 g 0 G - [-500(The)-462(function)-462(v)55(alue)-462(is)-462(sp)-28(eci\014c)-462(to)-462(the)-463(storage)-462(format)-462(of)-462(matrix)]TJ/F30 9.9626 Tf 296.649 0 Td [(a)]TJ/F8 9.9626 Tf 5.23 0 Td [(;)-527(some)]TJ -289.149 -11.955 Td [(storage)-465(formats)-466(emplo)28(y)-465(padding,)-498(th)27(u)1(s)-466(the)-465(returned)-465(v)55(alue)-465(for)-465(the)-466(same)]TJ 0 -11.955 Td [(matrix)-333(ma)27(y)-333(b)-28(e)-333(di\013eren)28(t)-334(for)-333(di\013eren)28(t)-333(storage)-334(c)28(hoices.)]TJ 0 g 0 G - 141.968 -380.116 Td [(19)]TJ + 154.906 -82.291 Td [(21)]TJ 0 g 0 G ET endstream endobj -761 0 obj << +815 0 obj << /Type /Page -/Contents 762 0 R -/Resources 760 0 R +/Contents 816 0 R +/Resources 814 0 R /MediaBox [0 0 595.276 841.89] -/Parent 765 0 R -/Annots [ 759 0 R ] ->> endobj -759 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [294.721 574.94 367.009 586.065] -/Subtype /Link -/A << /S /GoTo /D (spdata) >> ->> endobj -763 0 obj << -/D [761 0 R /XYZ 99.895 740.998 null] +/Parent 807 0 R >> endobj -102 0 obj << -/D [761 0 R /XYZ 99.895 697.758 null] +817 0 obj << +/D [815 0 R /XYZ 99.895 740.998 null] >> endobj -764 0 obj << -/D [761 0 R /XYZ 99.895 510.405 null] +813 0 obj << +/D [815 0 R /XYZ 155.478 184.684 null] >> endobj -760 0 obj << -/Font << /F27 437 0 R /F30 616 0 R /F8 438 0 R >> +814 0 obj << +/Font << /F46 818 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -768 0 obj << +821 0 obj << /Length 158 >> stream @@ -5862,29 +6326,29 @@ stream BT /F16 14.3462 Tf 150.705 706.129 Td [(4)-1125(Computational)-375(routines)]TJ 0 g 0 G -/F8 9.9626 Tf 166.874 -615.691 Td [(20)]TJ +/F8 9.9626 Tf 166.874 -615.691 Td [(22)]TJ 0 g 0 G ET endstream endobj -767 0 obj << +820 0 obj << /Type /Page -/Contents 768 0 R -/Resources 766 0 R +/Contents 821 0 R +/Resources 819 0 R /MediaBox [0 0 595.276 841.89] -/Parent 765 0 R +/Parent 807 0 R >> endobj -769 0 obj << -/D [767 0 R /XYZ 150.705 740.998 null] +822 0 obj << +/D [820 0 R /XYZ 150.705 740.998 null] >> endobj -106 0 obj << -/D [767 0 R /XYZ 150.705 716.092 null] +146 0 obj << +/D [820 0 R /XYZ 150.705 716.092 null] >> endobj -766 0 obj << -/Font << /F16 435 0 R /F8 438 0 R >> +819 0 obj << +/Font << /F16 475 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -778 0 obj << +831 0 obj << /Length 6970 >> stream @@ -6026,68 +6490,68 @@ BT 0 g 0 G /F8 9.9626 Tf 20.921 0 Td [(.)]TJ 0 g 0 G - -94.012 -29.888 Td [(21)]TJ + -94.012 -29.888 Td [(23)]TJ 0 g 0 G ET endstream endobj -777 0 obj << +830 0 obj << /Type /Page -/Contents 778 0 R -/Resources 776 0 R +/Contents 831 0 R +/Resources 829 0 R /MediaBox [0 0 595.276 841.89] -/Parent 765 0 R -/Annots [ 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R ] +/Parent 807 0 R +/Annots [ 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R ] >> endobj -770 0 obj << +823 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.088 410.346 389.062 421.194] /Subtype /Link /A << /S /GoTo /D (table.1) >> >> endobj -771 0 obj << +824 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.826 331.13 169.8 341.978] /Subtype /Link /A << /S /GoTo /D (table.1) >> >> endobj -772 0 obj << +825 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.088 263.869 389.062 274.717] /Subtype /Link /A << /S /GoTo /D (table.1) >> >> endobj -773 0 obj << +826 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.998 184.653 212.972 195.501] /Subtype /Link /A << /S /GoTo /D (table.1) >> >> endobj -774 0 obj << +827 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 117.115 361.779 128.24] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -779 0 obj << -/D [777 0 R /XYZ 99.895 740.998 null] +832 0 obj << +/D [830 0 R /XYZ 99.895 740.998 null] >> endobj -110 0 obj << -/D [777 0 R /XYZ 99.895 697.37 null] +150 0 obj << +/D [830 0 R /XYZ 99.895 697.37 null] >> endobj -780 0 obj << -/D [777 0 R /XYZ 267.641 543.834 null] +833 0 obj << +/D [830 0 R /XYZ 267.641 543.834 null] >> endobj -776 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F30 616 0 R /F27 437 0 R >> +829 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F30 664 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -783 0 obj << +836 0 obj << /Length 1495 >> stream @@ -6110,34 +6574,34 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.378 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.378 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.485 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.034 -11.955 Td [(An)-333(in)28(teger)-334(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detected.)]TJ 0 g 0 G - 141.967 -468.244 Td [(22)]TJ + 141.967 -468.244 Td [(24)]TJ 0 g 0 G ET endstream endobj -782 0 obj << +835 0 obj << /Type /Page -/Contents 783 0 R -/Resources 781 0 R +/Contents 836 0 R +/Resources 834 0 R /MediaBox [0 0 595.276 841.89] -/Parent 765 0 R -/Annots [ 775 0 R ] +/Parent 807 0 R +/Annots [ 828 0 R ] >> endobj -775 0 obj << +828 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [256.807 625.431 263.781 634.343] /Subtype /Link /A << /S /GoTo /D (table.1) >> >> endobj -784 0 obj << -/D [782 0 R /XYZ 150.705 740.998 null] +837 0 obj << +/D [835 0 R /XYZ 150.705 740.998 null] >> endobj -781 0 obj << -/Font << /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +834 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -791 0 obj << +844 0 obj << /Length 6909 >> stream @@ -6274,61 +6738,61 @@ BT 0 g 0 G [(.)]TJ 0 g 0 G - 141.968 -29.888 Td [(23)]TJ + 141.968 -29.888 Td [(25)]TJ 0 g 0 G ET endstream endobj -790 0 obj << +843 0 obj << /Type /Page -/Contents 791 0 R -/Resources 789 0 R +/Contents 844 0 R +/Resources 842 0 R /MediaBox [0 0 595.276 841.89] -/Parent 765 0 R -/Annots [ 785 0 R 786 0 R 787 0 R 788 0 R ] +/Parent 847 0 R +/Annots [ 838 0 R 839 0 R 840 0 R 841 0 R ] >> endobj -785 0 obj << +838 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.009 332.314 209.983 343.163] /Subtype /Link /A << /S /GoTo /D (table.2) >> >> endobj -786 0 obj << +839 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.009 251.685 209.983 262.533] /Subtype /Link /A << /S /GoTo /D (table.2) >> >> endobj -787 0 obj << +840 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 182.733 361.779 193.858] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -788 0 obj << +841 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.088 117.392 389.062 128.24] /Subtype /Link /A << /S /GoTo /D (table.2) >> >> endobj -792 0 obj << -/D [790 0 R /XYZ 99.895 740.998 null] +845 0 obj << +/D [843 0 R /XYZ 99.895 740.998 null] >> endobj -114 0 obj << -/D [790 0 R /XYZ 99.895 697.17 null] +154 0 obj << +/D [843 0 R /XYZ 99.895 697.17 null] >> endobj -793 0 obj << -/D [790 0 R /XYZ 267.641 483.443 null] +846 0 obj << +/D [843 0 R /XYZ 267.641 483.443 null] >> endobj -789 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F10 618 0 R /F30 616 0 R /F27 437 0 R >> +842 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F10 666 0 R /F30 664 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -796 0 obj << +850 0 obj << /Length 625 >> stream @@ -6340,26 +6804,26 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.148 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.956 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)27(t)1(e)-1(ger)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detec)-1(ted.)]TJ 0 g 0 G - 141.968 -567.87 Td [(24)]TJ + 141.968 -567.87 Td [(26)]TJ 0 g 0 G ET endstream endobj -795 0 obj << +849 0 obj << /Type /Page -/Contents 796 0 R -/Resources 794 0 R +/Contents 850 0 R +/Resources 848 0 R /MediaBox [0 0 595.276 841.89] -/Parent 765 0 R +/Parent 847 0 R >> endobj -797 0 obj << -/D [795 0 R /XYZ 150.705 740.998 null] +851 0 obj << +/D [849 0 R /XYZ 150.705 740.998 null] >> endobj -794 0 obj << -/Font << /F27 437 0 R /F8 438 0 R >> +848 0 obj << +/Font << /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -804 0 obj << +858 0 obj << /Length 7473 >> stream @@ -6496,61 +6960,61 @@ BT 0 g 0 G [(.)]TJ 0 g 0 G - 141.968 -29.888 Td [(25)]TJ + 141.968 -29.888 Td [(27)]TJ 0 g 0 G ET endstream endobj -803 0 obj << +857 0 obj << /Type /Page -/Contents 804 0 R -/Resources 802 0 R +/Contents 858 0 R +/Resources 856 0 R /MediaBox [0 0 595.276 841.89] -/Parent 807 0 R -/Annots [ 798 0 R 799 0 R 800 0 R 801 0 R ] +/Parent 847 0 R +/Annots [ 852 0 R 853 0 R 854 0 R 855 0 R ] >> endobj -798 0 obj << +852 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.009 352.148 209.983 362.996] /Subtype /Link /A << /S /GoTo /D (table.3) >> >> endobj -799 0 obj << +853 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.009 272.537 209.983 283.386] /Subtype /Link /A << /S /GoTo /D (table.3) >> >> endobj -800 0 obj << +854 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 204.605 361.779 215.73] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -801 0 obj << +855 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.203 119.329 158.177 128.24] /Subtype /Link /A << /S /GoTo /D (table.2) >> >> endobj -805 0 obj << -/D [803 0 R /XYZ 99.895 740.998 null] +859 0 obj << +/D [857 0 R /XYZ 99.895 740.998 null] >> endobj -118 0 obj << -/D [803 0 R /XYZ 99.895 697.37 null] +158 0 obj << +/D [857 0 R /XYZ 99.895 697.37 null] >> endobj -806 0 obj << -/D [803 0 R /XYZ 267.641 499.76 null] +860 0 obj << +/D [857 0 R /XYZ 267.641 499.76 null] >> endobj -802 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F10 618 0 R /F30 616 0 R /F27 437 0 R >> +856 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F10 666 0 R /F30 664 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -810 0 obj << +863 0 obj << /Length 625 >> stream @@ -6562,26 +7026,26 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.148 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.956 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)27(t)1(e)-1(ger)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detec)-1(ted.)]TJ 0 g 0 G - 141.968 -567.87 Td [(26)]TJ + 141.968 -567.87 Td [(28)]TJ 0 g 0 G ET endstream endobj -809 0 obj << +862 0 obj << /Type /Page -/Contents 810 0 R -/Resources 808 0 R +/Contents 863 0 R +/Resources 861 0 R /MediaBox [0 0 595.276 841.89] -/Parent 807 0 R +/Parent 847 0 R >> endobj -811 0 obj << -/D [809 0 R /XYZ 150.705 740.998 null] +864 0 obj << +/D [862 0 R /XYZ 150.705 740.998 null] >> endobj -808 0 obj << -/Font << /F27 437 0 R /F8 438 0 R >> +861 0 obj << +/Font << /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -816 0 obj << +869 0 obj << /Length 6532 >> stream @@ -6710,47 +7174,47 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 141.968 -45.795 Td [(27)]TJ + 141.968 -45.795 Td [(29)]TJ 0 g 0 G ET endstream endobj -815 0 obj << +868 0 obj << /Type /Page -/Contents 816 0 R -/Resources 814 0 R +/Contents 869 0 R +/Resources 867 0 R /MediaBox [0 0 595.276 841.89] -/Parent 807 0 R -/Annots [ 812 0 R 813 0 R ] +/Parent 847 0 R +/Annots [ 865 0 R 866 0 R ] >> endobj -812 0 obj << +865 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.826 334.489 169.8 343.4] /Subtype /Link /A << /S /GoTo /D (table.4) >> >> endobj -813 0 obj << +866 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 264.529 361.779 275.654] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -817 0 obj << -/D [815 0 R /XYZ 99.895 740.998 null] +870 0 obj << +/D [868 0 R /XYZ 99.895 740.998 null] >> endobj -122 0 obj << -/D [815 0 R /XYZ 99.895 697.37 null] +162 0 obj << +/D [868 0 R /XYZ 99.895 697.37 null] >> endobj -818 0 obj << -/D [815 0 R /XYZ 267.641 480.663 null] +871 0 obj << +/D [868 0 R /XYZ 267.641 480.663 null] >> endobj -814 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F10 618 0 R /F30 616 0 R /F27 437 0 R >> +867 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F10 666 0 R /F30 664 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -823 0 obj << +876 0 obj << /Length 5812 >> stream @@ -6879,47 +7343,47 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.148 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.956 Td [(An)-333(in)27(t)1(e)-1(ger)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detec)-1(ted.)]TJ 0 g 0 G - 141.968 -90.64 Td [(28)]TJ + 141.968 -90.64 Td [(30)]TJ 0 g 0 G ET endstream endobj -822 0 obj << +875 0 obj << /Type /Page -/Contents 823 0 R -/Resources 821 0 R +/Contents 876 0 R +/Resources 874 0 R /MediaBox [0 0 595.276 841.89] -/Parent 807 0 R -/Annots [ 819 0 R 820 0 R ] +/Parent 847 0 R +/Annots [ 872 0 R 873 0 R ] >> endobj -819 0 obj << +872 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.636 391.29 220.609 400.201] /Subtype /Link /A << /S /GoTo /D (table.5) >> >> endobj -820 0 obj << +873 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 321.33 412.588 332.455] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -824 0 obj << -/D [822 0 R /XYZ 150.705 740.998 null] +877 0 obj << +/D [875 0 R /XYZ 150.705 740.998 null] >> endobj -126 0 obj << -/D [822 0 R /XYZ 150.705 697.37 null] +166 0 obj << +/D [875 0 R /XYZ 150.705 697.37 null] >> endobj -825 0 obj << -/D [822 0 R /XYZ 318.451 537.464 null] +878 0 obj << +/D [875 0 R /XYZ 318.451 537.464 null] >> endobj -821 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F10 618 0 R /F30 616 0 R /F27 437 0 R >> +874 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F10 666 0 R /F30 664 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -830 0 obj << +883 0 obj << /Length 6175 >> stream @@ -7048,47 +7512,47 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 141.968 -52.257 Td [(29)]TJ + 141.968 -52.257 Td [(31)]TJ 0 g 0 G ET endstream endobj -829 0 obj << +882 0 obj << /Type /Page -/Contents 830 0 R -/Resources 828 0 R +/Contents 883 0 R +/Resources 881 0 R /MediaBox [0 0 595.276 841.89] -/Parent 807 0 R -/Annots [ 826 0 R 827 0 R ] +/Parent 886 0 R +/Annots [ 879 0 R 880 0 R ] >> endobj -826 0 obj << +879 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.826 340.951 169.8 349.862] /Subtype /Link /A << /S /GoTo /D (table.6) >> >> endobj -827 0 obj << +880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 270.991 361.779 282.116] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -831 0 obj << -/D [829 0 R /XYZ 99.895 740.998 null] +884 0 obj << +/D [882 0 R /XYZ 99.895 740.998 null] >> endobj -130 0 obj << -/D [829 0 R /XYZ 99.895 697.37 null] +170 0 obj << +/D [882 0 R /XYZ 99.895 697.37 null] >> endobj -832 0 obj << -/D [829 0 R /XYZ 267.641 487.125 null] +885 0 obj << +/D [882 0 R /XYZ 267.641 487.125 null] >> endobj -828 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F10 618 0 R /F7 617 0 R /F30 616 0 R /F27 437 0 R >> +881 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F10 666 0 R /F7 665 0 R /F30 664 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -837 0 obj << +891 0 obj << /Length 6862 >> stream @@ -7213,47 +7677,47 @@ BT 0 g 0 G /F8 9.9626 Tf 19.47 0 Td [(con)28(tains)-334(th)1(e)-334(1-norm)-333(of)-333(\050the)-334(columns)-333(of)-78(\051)]TJ/F11 9.9626 Tf 177.75 0 Td [(x)]TJ/F8 9.9626 Tf 5.694 0 Td [(.)]TJ -178.008 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(global)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(Short)-324(as:)-440(a)-324(long)-324(precision)-325(r)1(e)-1(al)-324(n)28(um)28(b)-28(er.)-441(Sp)-28(eci\014ed)-324(as:)-440(a)-324(long)-324(precision)-325(real)]TJ 0 -11.955 Td [(n)28(um)28(b)-28(er.)]TJ 0 g 0 G - 141.968 -29.888 Td [(30)]TJ + 141.968 -29.888 Td [(32)]TJ 0 g 0 G ET endstream endobj -836 0 obj << +890 0 obj << /Type /Page -/Contents 837 0 R -/Resources 835 0 R +/Contents 891 0 R +/Resources 889 0 R /MediaBox [0 0 595.276 841.89] -/Parent 807 0 R -/Annots [ 833 0 R 834 0 R ] +/Parent 886 0 R +/Annots [ 887 0 R 888 0 R ] >> endobj -833 0 obj << +887 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.636 280.099 220.609 289.01] /Subtype /Link /A << /S /GoTo /D (table.7) >> >> endobj -834 0 obj << +888 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 208.355 412.588 219.48] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -838 0 obj << -/D [836 0 R /XYZ 150.705 740.998 null] +892 0 obj << +/D [890 0 R /XYZ 150.705 740.998 null] >> endobj -134 0 obj << -/D [836 0 R /XYZ 150.705 696.986 null] +174 0 obj << +/D [890 0 R /XYZ 150.705 696.986 null] >> endobj -839 0 obj << -/D [836 0 R /XYZ 318.451 432.072 null] +893 0 obj << +/D [890 0 R /XYZ 318.451 432.072 null] >> endobj -835 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F10 618 0 R /F7 617 0 R /F30 616 0 R /F27 437 0 R >> +889 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F10 666 0 R /F7 665 0 R /F30 664 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -842 0 obj << +896 0 obj << /Length 624 >> stream @@ -7265,26 +7729,26 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.956 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 141.968 -567.87 Td [(31)]TJ + 141.968 -567.87 Td [(33)]TJ 0 g 0 G ET endstream endobj -841 0 obj << +895 0 obj << /Type /Page -/Contents 842 0 R -/Resources 840 0 R +/Contents 896 0 R +/Resources 894 0 R /MediaBox [0 0 595.276 841.89] -/Parent 844 0 R +/Parent 886 0 R >> endobj -843 0 obj << -/D [841 0 R /XYZ 99.895 740.998 null] +897 0 obj << +/D [895 0 R /XYZ 99.895 740.998 null] >> endobj -840 0 obj << -/Font << /F27 437 0 R /F8 438 0 R >> +894 0 obj << +/Font << /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -849 0 obj << +902 0 obj << /Length 6259 >> stream @@ -7427,47 +7891,47 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.378 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.378 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.956 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.485 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.034 -11.955 Td [(An)-333(in)28(teger)-334(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detected.)]TJ 0 g 0 G - 141.967 -41.423 Td [(32)]TJ + 141.967 -41.423 Td [(34)]TJ 0 g 0 G ET endstream endobj -848 0 obj << +901 0 obj << /Type /Page -/Contents 849 0 R -/Resources 847 0 R +/Contents 902 0 R +/Resources 900 0 R /MediaBox [0 0 595.276 841.89] -/Parent 844 0 R -/Annots [ 845 0 R 846 0 R ] +/Parent 886 0 R +/Annots [ 898 0 R 899 0 R ] >> endobj -845 0 obj << +898 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.636 341.49 220.609 350.401] /Subtype /Link /A << /S /GoTo /D (table.8) >> >> endobj -846 0 obj << +899 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 271.676 412.588 282.801] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -850 0 obj << -/D [848 0 R /XYZ 150.705 740.998 null] +903 0 obj << +/D [901 0 R /XYZ 150.705 740.998 null] >> endobj -138 0 obj << -/D [848 0 R /XYZ 150.705 697.37 null] +178 0 obj << +/D [901 0 R /XYZ 150.705 697.37 null] >> endobj -851 0 obj << -/D [848 0 R /XYZ 318.451 510.406 null] +904 0 obj << +/D [901 0 R /XYZ 318.451 510.406 null] >> endobj -847 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F10 618 0 R /F27 437 0 R /F30 616 0 R >> +900 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F10 666 0 R /F27 477 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -856 0 obj << +909 0 obj << /Length 5648 >> stream @@ -7596,47 +8060,47 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 141.968 -94.1 Td [(33)]TJ + 141.968 -94.1 Td [(35)]TJ 0 g 0 G ET endstream endobj -855 0 obj << +908 0 obj << /Type /Page -/Contents 856 0 R -/Resources 854 0 R +/Contents 909 0 R +/Resources 907 0 R /MediaBox [0 0 595.276 841.89] -/Parent 844 0 R -/Annots [ 852 0 R 853 0 R ] +/Parent 886 0 R +/Annots [ 905 0 R 906 0 R ] >> endobj -852 0 obj << +905 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.826 394.749 169.8 403.66] /Subtype /Link /A << /S /GoTo /D (table.9) >> >> endobj -853 0 obj << +906 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 324.789 361.779 335.914] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -857 0 obj << -/D [855 0 R /XYZ 99.895 740.998 null] +910 0 obj << +/D [908 0 R /XYZ 99.895 740.998 null] >> endobj -142 0 obj << -/D [855 0 R /XYZ 99.895 697.37 null] +182 0 obj << +/D [908 0 R /XYZ 99.895 697.37 null] >> endobj -858 0 obj << -/D [855 0 R /XYZ 267.641 540.923 null] +911 0 obj << +/D [908 0 R /XYZ 267.641 540.923 null] >> endobj -854 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F7 617 0 R /F30 616 0 R /F27 437 0 R >> +907 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F7 665 0 R /F30 664 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -863 0 obj << +916 0 obj << /Length 5477 >> stream @@ -7783,47 +8247,47 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.148 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(te)-1(ger)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detec)-1(ted.)]TJ 0 g 0 G - 141.968 -68.197 Td [(34)]TJ + 141.968 -68.197 Td [(36)]TJ 0 g 0 G ET endstream endobj -862 0 obj << +915 0 obj << /Type /Page -/Contents 863 0 R -/Resources 861 0 R +/Contents 916 0 R +/Resources 914 0 R /MediaBox [0 0 595.276 841.89] -/Parent 844 0 R -/Annots [ 859 0 R 860 0 R ] +/Parent 886 0 R +/Annots [ 912 0 R 913 0 R ] >> endobj -859 0 obj << +912 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 354.677 417.818 365.802] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -860 0 obj << +913 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 286.931 412.588 298.056] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -864 0 obj << -/D [862 0 R /XYZ 150.705 740.998 null] +917 0 obj << +/D [915 0 R /XYZ 150.705 740.998 null] >> endobj -146 0 obj << -/D [862 0 R /XYZ 150.705 697.37 null] +186 0 obj << +/D [915 0 R /XYZ 150.705 697.37 null] >> endobj -866 0 obj << -/D [862 0 R /XYZ 320.941 513.305 null] +919 0 obj << +/D [915 0 R /XYZ 320.941 513.305 null] >> endobj -861 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F13 865 0 R /F27 437 0 R /F30 616 0 R >> +914 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F13 918 0 R /F27 477 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -873 0 obj << +926 0 obj << /Length 7526 >> stream @@ -7970,63 +8434,63 @@ BT 0 g 0 G [(.)-445(The)-333(rank)-333(of)]TJ/F11 9.9626 Tf 111.001 0 Td [(x)]TJ/F8 9.9626 Tf 9.014 0 Td [(m)28(ust)-334(b)-27(e)-334(the)-333(same)-334(of)]TJ/F11 9.9626 Tf 91.712 0 Td [(y)]TJ/F8 9.9626 Tf 5.242 0 Td [(.)]TJ 0 g 0 G - -75.001 -29.888 Td [(35)]TJ + -75.001 -29.888 Td [(37)]TJ 0 g 0 G ET endstream endobj -872 0 obj << +925 0 obj << /Type /Page -/Contents 873 0 R -/Resources 871 0 R +/Contents 926 0 R +/Resources 924 0 R /MediaBox [0 0 595.276 841.89] -/Parent 844 0 R -/Annots [ 867 0 R 868 0 R 869 0 R ] +/Parent 932 0 R +/Annots [ 920 0 R 921 0 R 922 0 R ] >> endobj -867 0 obj << +920 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.088 263.462 394.043 274.311] /Subtype /Link /A << /S /GoTo /D (table.11) >> >> endobj -868 0 obj << +921 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 196.128 367.009 207.253] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -869 0 obj << +922 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.826 117.392 174.781 128.24] /Subtype /Link /A << /S /GoTo /D (table.11) >> >> endobj -874 0 obj << -/D [872 0 R /XYZ 99.895 740.998 null] +927 0 obj << +/D [925 0 R /XYZ 99.895 740.998 null] >> endobj -150 0 obj << -/D [872 0 R /XYZ 99.895 697.37 null] +190 0 obj << +/D [925 0 R /XYZ 99.895 697.37 null] >> endobj -875 0 obj << -/D [872 0 R /XYZ 229.172 675.784 null] +928 0 obj << +/D [925 0 R /XYZ 229.172 675.784 null] >> endobj -876 0 obj << -/D [872 0 R /XYZ 226.034 658.884 null] +929 0 obj << +/D [925 0 R /XYZ 226.034 658.884 null] >> endobj -877 0 obj << -/D [872 0 R /XYZ 225.394 641.984 null] +930 0 obj << +/D [925 0 R /XYZ 225.394 641.984 null] >> endobj -878 0 obj << -/D [872 0 R /XYZ 270.132 440.216 null] +931 0 obj << +/D [925 0 R /XYZ 270.132 440.216 null] >> endobj -871 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F10 618 0 R /F7 617 0 R /F27 437 0 R /F30 616 0 R >> +924 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F10 666 0 R /F7 665 0 R /F27 477 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -887 0 obj << +941 0 obj << /Length 6469 >> stream @@ -8124,76 +8588,76 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.148 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(te)-1(ger)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detec)-1(t)1(e)-1(d.)]TJ 0 g 0 G - 141.968 -40.322 Td [(36)]TJ + 141.968 -40.322 Td [(38)]TJ 0 g 0 G ET endstream endobj -886 0 obj << +940 0 obj << /Type /Page -/Contents 887 0 R -/Resources 885 0 R +/Contents 941 0 R +/Resources 939 0 R /MediaBox [0 0 595.276 841.89] -/Parent 844 0 R -/Annots [ 870 0 R 879 0 R 880 0 R 881 0 R 882 0 R 883 0 R 884 0 R ] +/Parent 932 0 R +/Annots [ 923 0 R 933 0 R 934 0 R 935 0 R 936 0 R 937 0 R 938 0 R ] >> endobj -870 0 obj << +923 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [432.897 655.375 444.852 666.223] /Subtype /Link /A << /S /GoTo /D (table.11) >> >> endobj -879 0 obj << +933 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.636 576.26 225.591 587.108] /Subtype /Link /A << /S /GoTo /D (table.11) >> >> endobj -880 0 obj << +934 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 508.823 412.588 519.948] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -881 0 obj << +935 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [397.199 470.422 404.172 481.27] /Subtype /Link /A << /S /GoTo /D (equation.1) >> >> endobj -882 0 obj << +936 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [396.202 455.068 403.176 465.916] /Subtype /Link /A << /S /GoTo /D (equation.2) >> >> endobj -883 0 obj << +937 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [396.507 439.714 403.481 450.563] /Subtype /Link /A << /S /GoTo /D (equation.3) >> >> endobj -884 0 obj << +938 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [253.818 194.986 265.774 205.834] /Subtype /Link /A << /S /GoTo /D (table.11) >> >> endobj -888 0 obj << -/D [886 0 R /XYZ 150.705 740.998 null] +942 0 obj << +/D [940 0 R /XYZ 150.705 740.998 null] >> endobj -885 0 obj << -/Font << /F27 437 0 R /F8 438 0 R /F11 599 0 R /F30 616 0 R >> +939 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F11 649 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -893 0 obj << +947 0 obj << /Length 8409 >> stream @@ -8302,40 +8766,40 @@ BT 0 g 0 G [(.)]TJ 0 g 0 G - 141.968 -29.888 Td [(37)]TJ + 141.968 -29.888 Td [(39)]TJ 0 g 0 G ET endstream endobj -892 0 obj << +946 0 obj << /Type /Page -/Contents 893 0 R -/Resources 891 0 R +/Contents 947 0 R +/Resources 945 0 R /MediaBox [0 0 595.276 841.89] -/Parent 896 0 R -/Annots [ 889 0 R ] +/Parent 932 0 R +/Annots [ 943 0 R ] >> endobj -889 0 obj << +943 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.088 117.392 394.043 128.24] /Subtype /Link /A << /S /GoTo /D (table.12) >> >> endobj -894 0 obj << -/D [892 0 R /XYZ 99.895 740.998 null] +948 0 obj << +/D [946 0 R /XYZ 99.895 740.998 null] >> endobj -154 0 obj << -/D [892 0 R /XYZ 99.895 697.37 null] +194 0 obj << +/D [946 0 R /XYZ 99.895 697.37 null] >> endobj -895 0 obj << -/D [892 0 R /XYZ 270.132 252.928 null] +949 0 obj << +/D [946 0 R /XYZ 270.132 252.928 null] >> endobj -891 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F10 618 0 R /F13 865 0 R /F7 617 0 R /F30 616 0 R /F27 437 0 R >> +945 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F10 666 0 R /F13 918 0 R /F7 665 0 R /F30 664 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -903 0 obj << +956 0 obj << /Length 6773 >> stream @@ -8436,62 +8900,62 @@ BT 0 g 0 G /F8 9.9626 Tf 63.221 0 Td [(the)-333(op)-28(eration)-333(is)-334(with)-333(righ)28(t)-333(sc)-1(al)1(ing.)]TJ 0 g 0 G - 78.746 -29.888 Td [(38)]TJ + 78.746 -29.888 Td [(40)]TJ 0 g 0 G ET endstream endobj -902 0 obj << +955 0 obj << /Type /Page -/Contents 903 0 R -/Resources 901 0 R +/Contents 956 0 R +/Resources 954 0 R /MediaBox [0 0 595.276 841.89] -/Parent 896 0 R -/Annots [ 890 0 R 897 0 R 898 0 R 899 0 R 900 0 R ] +/Parent 932 0 R +/Annots [ 944 0 R 950 0 R 951 0 R 952 0 R 953 0 R ] >> endobj -890 0 obj << +944 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [393.738 655.375 400.712 666.223] /Subtype /Link /A << /S /GoTo /D (section.3) >> >> endobj -897 0 obj << +950 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.636 572.775 225.591 583.624] /Subtype /Link /A << /S /GoTo /D (table.12) >> >> endobj -898 0 obj << +951 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [432.897 502.131 444.852 512.979] /Subtype /Link /A << /S /GoTo /D (table.12) >> >> endobj -899 0 obj << +952 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.636 419.532 225.591 430.38] /Subtype /Link /A << /S /GoTo /D (table.12) >> >> endobj -900 0 obj << +953 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 348.611 412.588 359.736] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -904 0 obj << -/D [902 0 R /XYZ 150.705 740.998 null] +957 0 obj << +/D [955 0 R /XYZ 150.705 740.998 null] >> endobj -901 0 obj << -/Font << /F27 437 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F30 616 0 R /F17 579 0 R >> +954 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F30 664 0 R /F17 629 0 R >> /ProcSet [ /PDF /Text ] >> endobj -909 0 obj << +962 0 obj << /Length 4663 >> stream @@ -8543,41 +9007,41 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.956 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 141.968 -73.723 Td [(39)]TJ + 141.968 -73.723 Td [(41)]TJ 0 g 0 G ET endstream endobj -908 0 obj << +961 0 obj << /Type /Page -/Contents 909 0 R -/Resources 907 0 R +/Contents 962 0 R +/Resources 960 0 R /MediaBox [0 0 595.276 841.89] -/Parent 896 0 R -/Annots [ 905 0 R 906 0 R ] +/Parent 932 0 R +/Annots [ 958 0 R 959 0 R ] >> endobj -905 0 obj << +958 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.826 410.238 174.781 419.149] /Subtype /Link /A << /S /GoTo /D (table.12) >> >> endobj -906 0 obj << +959 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.009 228.974 214.964 239.822] /Subtype /Link /A << /S /GoTo /D (table.12) >> >> endobj -910 0 obj << -/D [908 0 R /XYZ 99.895 740.998 null] +963 0 obj << +/D [961 0 R /XYZ 99.895 740.998 null] >> endobj -907 0 obj << -/Font << /F8 438 0 R /F27 437 0 R /F11 599 0 R /F30 616 0 R >> +960 0 obj << +/Font << /F8 478 0 R /F27 477 0 R /F11 649 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -914 0 obj << +967 0 obj << /Length 651 >> stream @@ -8590,37 +9054,37 @@ BT 0 g 0 G [(.)]TJ 0 g 0 G - 166.874 -569.96 Td [(40)]TJ + 166.874 -569.96 Td [(42)]TJ 0 g 0 G ET endstream endobj -913 0 obj << +966 0 obj << /Type /Page -/Contents 914 0 R -/Resources 912 0 R +/Contents 967 0 R +/Resources 965 0 R /MediaBox [0 0 595.276 841.89] -/Parent 896 0 R -/Annots [ 911 0 R ] +/Parent 932 0 R +/Annots [ 964 0 R ] >> endobj -911 0 obj << +964 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.345 657.464 357.319 668.312] /Subtype /Link /A << /S /GoTo /D (section.6) >> >> endobj -915 0 obj << -/D [913 0 R /XYZ 150.705 740.998 null] +968 0 obj << +/D [966 0 R /XYZ 150.705 740.998 null] >> endobj -158 0 obj << -/D [913 0 R /XYZ 150.705 716.092 null] +198 0 obj << +/D [966 0 R /XYZ 150.705 716.092 null] >> endobj -912 0 obj << -/Font << /F16 435 0 R /F8 438 0 R >> +965 0 obj << +/Font << /F16 475 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -921 0 obj << +974 0 obj << /Length 6023 >> stream @@ -8761,54 +9225,54 @@ BT 0 g 0 G /F8 9.9626 Tf 29.432 0 Td [(the)-333(w)27(ork)-333(arra)28(y)83(.)]TJ -4.525 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(optional)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(inout)]TJ/F8 9.9626 Tf 26.096 0 Td [(.)]TJ -59.582 -11.955 Td [(Sp)-28(eci\014ed)-348(as:)-475(a)-349(rank)-348(one)-349(arra)28(y)-349(of)-348(the)-349(same)-348(t)27(yp)-27(e)-349(of)]TJ/F11 9.9626 Tf 222.576 0 Td [(x)]TJ/F8 9.9626 Tf 9.167 0 Td [(with)-349(th)1(e)-349(POINTER)]TJ -231.743 -11.955 Td [(attribute.)]TJ 0 g 0 G - 141.968 -29.888 Td [(41)]TJ + 141.968 -29.888 Td [(43)]TJ 0 g 0 G ET endstream endobj -920 0 obj << +973 0 obj << /Type /Page -/Contents 921 0 R -/Resources 919 0 R +/Contents 974 0 R +/Resources 972 0 R /MediaBox [0 0 595.276 841.89] -/Parent 896 0 R -/Annots [ 916 0 R 917 0 R 918 0 R ] +/Parent 977 0 R +/Annots [ 969 0 R 970 0 R 971 0 R ] >> endobj -916 0 obj << +969 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [310.744 340.904 322.699 351.753] /Subtype /Link /A << /S /GoTo /D (table.13) >> >> endobj -917 0 obj << +970 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 274.094 361.779 285.219] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -918 0 obj << +971 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.088 195.881 394.043 206.73] /Subtype /Link /A << /S /GoTo /D (table.13) >> >> endobj -922 0 obj << -/D [920 0 R /XYZ 99.895 740.998 null] +975 0 obj << +/D [973 0 R /XYZ 99.895 740.998 null] >> endobj -162 0 obj << -/D [920 0 R /XYZ 99.895 697.37 null] +202 0 obj << +/D [973 0 R /XYZ 99.895 697.37 null] >> endobj -923 0 obj << -/D [920 0 R /XYZ 270.132 513.469 null] +976 0 obj << +/D [973 0 R /XYZ 270.132 513.469 null] >> endobj -919 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F27 437 0 R /F30 616 0 R >> +972 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F27 477 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -929 0 obj << +983 0 obj << /Length 4119 >> stream @@ -8852,43 +9316,43 @@ Q 0 g 0 G 1 0 0 1 -210.961 -455.126 cm BT -/F8 9.9626 Tf 240.078 231.087 Td [(Figure)-333(6:)-445(Sample)-333(discretization)-333(mesh.)]TJ +/F8 9.9626 Tf 240.078 231.087 Td [(Figure)-333(7:)-445(Sample)-333(discretization)-333(mesh.)]TJ 0 g 0 G 0 g 0 G /F16 11.9552 Tf -89.373 -23.91 Td [(Usage)-381(Example)]TJ/F8 9.9626 Tf 93.98 0 Td [(Consider)-338(the)-339(discretization)-338(mesh)-339(depicted)-338(in)-338(\014g.)]TJ 0 0 1 rg 0 0 1 RG - [-339(6)]TJ + [-339(7)]TJ 0 g 0 G [(,)-339(parti-)]TJ -93.98 -11.955 Td [(tioned)-334(among)-334(t)27(w)28(o)-334(pro)-28(cesses)-334(as)-335(sho)28(wn)-334(b)28(y)-334(the)-335(dashed)-334(line;)-334(the)-335(data)-334(distribution)]TJ 0 -11.955 Td [(is)-422(suc)28(h)-422(that)-422(eac)28(h)-422(pro)-28(cess)-422(will)-421(o)27(wn)-422(32)-421(en)27(tries)-421(in)-422(the)-422(index)-422(space,)-444(with)-422(a)-422(halo)]TJ 0 -11.955 Td [(made)-340(of)-341(8)-340(en)28(tries)-341(placed)-340(at)-340(lo)-28(cal)-341(in)1(dices)-341(33)-340(through)-340(40.)-466(If)-340(pro)-28(cess)-341(0)-340(assigns)-340(an)]TJ 0 -11.956 Td [(initial)-423(v)55(alue)-423(of)-424(1)-423(to)-424(its)-423(en)28(tries)-424(in)-423(the)]TJ/F11 9.9626 Tf 169.005 0 Td [(x)]TJ/F8 9.9626 Tf 9.913 0 Td [(v)28(ector,)-446(and)-424(pro)-27(cess)-424(1)-423(ass)-1(i)1(g)-1(n)1(s)-424(a)-423(v)55(alue)]TJ -178.918 -11.955 Td [(of)-349(2,)-353(then)-349(after)-349(a)-349(call)-349(to)]TJ/F30 9.9626 Tf 108.539 0 Td [(psb_halo)]TJ/F8 9.9626 Tf 45.32 0 Td [(the)-349(con)28(ten)27(t)1(s)-350(of)-349(the)-349(lo)-27(cal)-350(v)28(ectors)-349(will)-349(b)-28(e)-349(the)]TJ -153.859 -11.955 Td [(follo)28(wing:)]TJ 0 g 0 G - 166.874 -45.008 Td [(42)]TJ + 166.874 -45.008 Td [(44)]TJ 0 g 0 G ET endstream endobj -928 0 obj << +982 0 obj << /Type /Page -/Contents 929 0 R -/Resources 927 0 R +/Contents 983 0 R +/Resources 981 0 R /MediaBox [0 0 595.276 841.89] -/Parent 896 0 R -/Annots [ 924 0 R 926 0 R ] +/Parent 977 0 R +/Annots [ 978 0 R 980 0 R ] >> endobj -925 0 obj << +979 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/try8x8.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 932 0 R +/PTEX.InfoDict 986 0 R /BBox [0 0 436 496] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 933 0 R ->>/Font << /R8 934 0 R/R9 935 0 R>> +/R7 987 0 R +>>/Font << /R8 988 0 R/R9 989 0 R>> >> -/Length 936 0 R +/Length 990 0 R /Filter /FlateDecode >> stream @@ -8904,62 +9368,62 @@ QI* d)eI%}QÉ'?+ä°~I*écÂ\‚?XO#~Ã[!©äX‚?fJÇüÁaî‹J8ù9â÷%©¤ s‰ù`=ø Ÿ× ,ªƒ1Œ|?ª$6ŠázžAª@}¡J¢¿R©’#‡z|]ñd•9ÔãýL G„z8¯—÷¬’Ï€äcD¾P%ùàgÌcå‘#<¾®x²J2³jˆÏÕpD„ó¢¼g•mø»ãoÇßþžŸúö§Ç6Úë¸w¶W~ûùñéØ?ûçãK߯åÌÞ>Øíƒ]?Øeµûü`ŸìqÛ{éÏ/m;±ù"×~¢WëÖëj¾Z…3lï²ÛÂ?|Ïz¼Ú½m[{힦„iÿb¬m»¦øóe•Ï¿{üáÛã¯×¿ÿ-3‡à endstream endobj -932 0 obj +986 0 obj << /Producer (ESP Ghostscript 815.03) /CreationDate (D:20070118112257) /ModDate (D:20070118112257) >> endobj -933 0 obj +987 0 obj << /Type /ExtGState /OPM 1 >> endobj -934 0 obj +988 0 obj << /BaseFont /Times-Roman /Type /Font /Subtype /Type1 >> endobj -935 0 obj +989 0 obj << /BaseFont /Times-Bold /Type /Font /Subtype /Type1 >> endobj -936 0 obj +990 0 obj 3571 endobj -924 0 obj << +978 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.636 545.73 225.591 554.641] /Subtype /Link /A << /S /GoTo /D (table.13) >> >> endobj -926 0 obj << +980 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.906 203.856 464.88 216.476] /Subtype /Link -/A << /S /GoTo /D (figure.6) >> +/A << /S /GoTo /D (figure.7) >> >> endobj -930 0 obj << -/D [928 0 R /XYZ 150.705 740.998 null] +984 0 obj << +/D [982 0 R /XYZ 150.705 740.998 null] >> endobj -931 0 obj << -/D [928 0 R /XYZ 283.692 243.043 null] +985 0 obj << +/D [982 0 R /XYZ 283.692 243.043 null] >> endobj -927 0 obj << -/Font << /F27 437 0 R /F8 438 0 R /F30 616 0 R /F11 599 0 R /F16 435 0 R >> -/XObject << /Im3 925 0 R >> +981 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F30 664 0 R /F11 649 0 R /F16 475 0 R >> +/XObject << /Im3 979 0 R >> /ProcSet [ /PDF /Text ] >> endobj -939 0 obj << +993 0 obj << /Length 3050 >> stream @@ -8972,26 +9436,26 @@ BT /F45 8.9664 Tf 205.966 645.656 Td [(Pro)-29(cess)-342(0)-8224(Pro)-28(cess)-343(1)]TJ -33.967 -10.959 Td [(I)-1333(GLOB\050I\051)-1334(X\050I\051)-4656(I)-1334(GLOB\050I\051)-1333(X\050I\051)]TJ -1.281 -10.959 Td [(1)-4966(1)-1961(1.0)-4514(1)-4452(33)-1961(2.0)]TJ 0 -10.959 Td [(2)-4966(2)-1961(1.0)-4514(2)-4452(34)-1961(2.0)]TJ 0 -10.959 Td [(3)-4966(3)-1961(1.0)-4514(3)-4452(35)-1961(2.0)]TJ 0 -10.959 Td [(4)-4966(4)-1961(1.0)-4514(4)-4452(36)-1961(2.0)]TJ 0 -10.959 Td [(5)-4966(5)-1961(1.0)-4514(5)-4452(37)-1961(2.0)]TJ 0 -10.959 Td [(6)-4966(6)-1961(1.0)-4514(6)-4452(38)-1961(2.0)]TJ 0 -10.959 Td [(7)-4966(7)-1961(1.0)-4514(7)-4452(39)-1961(2.0)]TJ 0 -10.958 Td [(8)-4966(8)-1961(1.0)-4514(8)-4452(40)-1961(2.0)]TJ 0 -10.959 Td [(9)-4966(9)-1961(1.0)-4514(9)-4452(41)-1961(2.0)]TJ -4.608 -10.959 Td [(10)-4452(10)-1961(1.0)-4000(10)-4452(42)-1961(2.0)]TJ 0 -10.959 Td [(11)-4452(11)-1961(1.0)-4000(11)-4452(43)-1961(2.0)]TJ 0 -10.959 Td [(12)-4452(12)-1961(1.0)-4000(12)-4452(44)-1961(2.0)]TJ 0 -10.959 Td [(13)-4452(13)-1961(1.0)-4000(13)-4452(45)-1961(2.0)]TJ 0 -10.959 Td [(14)-4452(14)-1961(1.0)-4000(14)-4452(46)-1961(2.0)]TJ 0 -10.959 Td [(15)-4452(15)-1961(1.0)-4000(15)-4452(47)-1961(2.0)]TJ 0 -10.959 Td [(16)-4452(16)-1961(1.0)-4000(16)-4452(48)-1961(2.0)]TJ 0 -10.959 Td [(17)-4452(17)-1961(1.0)-4000(17)-4452(49)-1961(2.0)]TJ 0 -10.958 Td [(18)-4452(18)-1961(1.0)-4000(18)-4452(50)-1961(2.0)]TJ 0 -10.959 Td [(19)-4452(19)-1961(1.0)-4000(19)-4452(51)-1961(2.0)]TJ 0 -10.959 Td [(20)-4452(20)-1961(1.0)-4000(20)-4452(52)-1961(2.0)]TJ 0 -10.959 Td [(21)-4452(21)-1961(1.0)-4000(21)-4452(53)-1961(2.0)]TJ 0 -10.959 Td [(22)-4452(22)-1961(1.0)-4000(22)-4452(54)-1961(2.0)]TJ 0 -10.959 Td [(23)-4452(23)-1961(1.0)-4000(23)-4452(55)-1961(2.0)]TJ 0 -10.959 Td [(24)-4452(24)-1961(1.0)-4000(24)-4452(56)-1961(2.0)]TJ 0 -10.959 Td [(25)-4452(25)-1961(1.0)-4000(25)-4452(57)-1961(2.0)]TJ 0 -10.959 Td [(26)-4452(26)-1961(1.0)-4000(26)-4452(58)-1961(2.0)]TJ 0 -10.959 Td [(27)-4452(27)-1961(1.0)-4000(27)-4452(59)-1961(2.0)]TJ 0 -10.958 Td [(28)-4452(28)-1961(1.0)-4000(28)-4452(60)-1961(2.0)]TJ 0 -10.959 Td [(29)-4452(29)-1961(1.0)-4000(29)-4452(61)-1961(2.0)]TJ 0 -10.959 Td [(30)-4452(30)-1961(1.0)-4000(30)-4452(62)-1961(2.0)]TJ 0 -10.959 Td [(31)-4452(31)-1961(1.0)-4000(31)-4452(63)-1961(2.0)]TJ 0 -10.959 Td [(32)-4452(32)-1961(1.0)-4000(32)-4452(64)-1961(2.0)]TJ 0 -10.959 Td [(33)-4452(33)-1961(2.0)-4000(33)-4452(25)-1961(1.0)]TJ 0 -10.959 Td [(34)-4452(34)-1961(2.0)-4000(34)-4452(26)-1961(1.0)]TJ 0 -10.959 Td [(35)-4452(35)-1961(2.0)-4000(35)-4452(27)-1961(1.0)]TJ 0 -10.959 Td [(36)-4452(36)-1961(2.0)-4000(36)-4452(28)-1961(1.0)]TJ 0 -10.959 Td [(37)-4452(37)-1961(2.0)-4000(37)-4452(29)-1961(1.0)]TJ 0 -10.958 Td [(38)-4452(38)-1961(2.0)-4000(38)-4452(30)-1961(1.0)]TJ 0 -10.959 Td [(39)-4452(39)-1961(2.0)-4000(39)-4452(31)-1961(1.0)]TJ 0 -10.959 Td [(40)-4452(40)-1961(2.0)-4000(40)-4452(32)-1961(1.0)]TJ 0 g 0 G 0 g 0 G -/F8 9.9626 Tf 100.66 -105.903 Td [(43)]TJ +/F8 9.9626 Tf 100.66 -105.903 Td [(45)]TJ 0 g 0 G ET endstream endobj -938 0 obj << +992 0 obj << /Type /Page -/Contents 939 0 R -/Resources 937 0 R +/Contents 993 0 R +/Resources 991 0 R /MediaBox [0 0 595.276 841.89] -/Parent 942 0 R +/Parent 977 0 R >> endobj -940 0 obj << -/D [938 0 R /XYZ 99.895 740.998 null] +994 0 obj << +/D [992 0 R /XYZ 99.895 740.998 null] >> endobj -937 0 obj << -/Font << /F45 941 0 R /F8 438 0 R >> +991 0 obj << +/Font << /F45 995 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -947 0 obj << +1000 0 obj << /Length 6993 >> stream @@ -9193,47 +9657,47 @@ Q BT /F8 9.9626 Tf 175.611 132.281 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(global)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(in)28(teger)-333(v)55(ariable.)]TJ 0 g 0 G - 141.968 -29.888 Td [(44)]TJ + 141.968 -29.888 Td [(46)]TJ 0 g 0 G ET endstream endobj -946 0 obj << +999 0 obj << /Type /Page -/Contents 947 0 R -/Resources 945 0 R +/Contents 1000 0 R +/Resources 998 0 R /MediaBox [0 0 595.276 841.89] -/Parent 942 0 R -/Annots [ 943 0 R 944 0 R ] +/Parent 977 0 R +/Annots [ 996 0 R 997 0 R ] >> endobj -943 0 obj << +996 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.636 334.803 225.591 343.714] /Subtype /Link /A << /S /GoTo /D (table.14) >> >> endobj -944 0 obj << +997 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 265.461 412.588 276.586] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -948 0 obj << -/D [946 0 R /XYZ 150.705 740.998 null] +1001 0 obj << +/D [999 0 R /XYZ 150.705 740.998 null] >> endobj -166 0 obj << -/D [946 0 R /XYZ 150.705 697.37 null] +206 0 obj << +/D [999 0 R /XYZ 150.705 697.37 null] >> endobj -949 0 obj << -/D [946 0 R /XYZ 320.941 510.188 null] +1002 0 obj << +/D [999 0 R /XYZ 320.941 510.188 null] >> endobj -945 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F10 618 0 R /F27 437 0 R /F30 616 0 R >> +998 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F10 666 0 R /F27 477 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -956 0 obj << +1009 0 obj << /Length 5866 >> stream @@ -9272,65 +9736,65 @@ BT 0 g 0 G [-500(The)-255(op)-28(erator)]TJ/F11 9.9626 Tf 71.84 0 Td [(P)]TJ/F10 6.9738 Tf 6.397 -1.495 Td [(a)]TJ/F8 9.9626 Tf 7.364 1.495 Td [(p)-28(erforms)-255(a)-256(scaling)-255(on)-256(the)-255(o)28(v)27(erlap)-255(elemen)28(ts)-256(b)28(y)-256(the)-255(amoun)28(t)]TJ -72.871 -11.956 Td [(of)-290(r)1(e)-1(pl)1(ic)-1(ati)1(on;)-305(th)28(us,)-298(when)-290(com)28(bined)-289(with)-290(the)-289(reduction)-290(op)-28(erator,)-298(it)-289(im)-1(p)1(le-)]TJ 0 -11.955 Td [(men)28(ts)-334(the)-333(a)28(v)28(erage)-334(of)-333(replicated)-333(elem)-1(en)28(ts)-333(o)28(v)27(er)-333(all)-333(of)-333(their)-334(instances.)]TJ/F16 11.9552 Tf -24.907 -19.925 Td [(Example)-388(of)-388(use)]TJ/F8 9.9626 Tf 93.469 0 Td [(Consider)-345(the)-344(discretization)-345(mesh)-345(d)1(e)-1(p)1(icte)-1(d)-344(in)-345(\014g.)]TJ 0 0 1 rg 0 0 1 RG - [-344(7)]TJ + [-344(8)]TJ 0 g 0 G [(,)-348(parti-)]TJ -93.469 -11.955 Td [(tioned)-330(among)-330(t)28(w)27(o)-330(pro)-27(c)-1(esses)-330(as)-330(sho)28(wn)-330(b)27(y)-330(the)-330(dashed)-330(lines,)-331(with)-330(an)-330(o)28(v)28(erlap)-330(of)-330(1)]TJ 0 -11.955 Td [(extra)-360(la)28(y)28(er)-360(with)-359(resp)-28(ect)-360(to)-359(the)-360(partition)-359(of)-360(\014g.)]TJ 0 0 1 rg 0 0 1 RG - [-359(6)]TJ + [-359(7)]TJ 0 g 0 G [(;)-373(the)-359(data)-360(distribution)-359(is)-360(suc)28(h)]TJ 0 -11.956 Td [(that)-351(eac)27(h)-351(pro)-28(cess)-351(will)-352(o)28(wn)-351(40)-352(en)28(tries)-351(in)-351(the)-352(index)-351(space,)-356(with)-351(an)-352(o)28(v)28(erlap)-351(of)-352(16)]TJ 0 -11.955 Td [(en)28(tries)-326(placed)-325(a)-1(t)-325(lo)-28(cal)-325(indices)-326(25)-326(through)-325(40;)-328(the)-326(halo)-325(w)-1(il)1(l)-326(run)-326(fr)1(om)-326(lo)-28(cal)-326(in)1(dex)]TJ 0 -11.955 Td [(41)-290(through)-291(lo)-27(cal)-291(index)-290(48..)-430(If)-291(pro)-27(cess)-291(0)-290(assigns)-291(an)-290(initial)-290(v)55(alue)-290(of)-291(1)-290(to)-290(its)-291(en)28(tries)]TJ 0 -11.955 Td [(in)-298(the)]TJ/F11 9.9626 Tf 28.079 0 Td [(x)]TJ/F8 9.9626 Tf 8.663 0 Td [(v)28(ector,)-305(and)-298(pro)-28(cess)-298(1)-298(assigns)-299(a)-298(v)56(alue)-298(of)-298(2,)-305(then)-298(after)-298(a)-298(call)-298(to)]TJ/F30 9.9626 Tf 265.127 0 Td [(psb_ovrl)]TJ/F8 9.9626 Tf -301.869 -11.955 Td [(with)]TJ/F30 9.9626 Tf 22.401 0 Td [(psb_avg_)]TJ/F8 9.9626 Tf 44.871 0 Td [(and)-304(a)-304(call)-304(to)]TJ/F30 9.9626 Tf 56.945 0 Td [(psb_halo_)]TJ/F8 9.9626 Tf 50.101 0 Td [(the)-304(con)28(ten)28(ts)-304(of)-304(the)-304(lo)-28(cal)-304(v)28(ectors)-304(will)-304(b)-28(e)]TJ -174.318 -11.955 Td [(the)-333(follo)27(win)1(g)-334(\050sho)28(wing)-333(a)-334(transition)-333(among)-333(the)-334(t)28(w)28(o)-333(sub)-28(domains\051)]TJ 0 g 0 G - 166.875 -143.462 Td [(45)]TJ + 166.875 -143.462 Td [(47)]TJ 0 g 0 G ET endstream endobj -955 0 obj << +1008 0 obj << /Type /Page -/Contents 956 0 R -/Resources 954 0 R +/Contents 1009 0 R +/Resources 1007 0 R /MediaBox [0 0 595.276 841.89] -/Parent 942 0 R -/Annots [ 950 0 R 952 0 R 953 0 R ] +/Parent 977 0 R +/Annots [ 1003 0 R 1005 0 R 1006 0 R ] >> endobj -950 0 obj << +1003 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.009 555.748 214.964 566.597] /Subtype /Link /A << /S /GoTo /D (table.14) >> >> endobj -952 0 obj << +1005 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [407.019 326.22 413.993 338.84] /Subtype /Link -/A << /S /GoTo /D (figure.7) >> +/A << /S /GoTo /D (figure.8) >> >> endobj -953 0 obj << +1006 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.759 302.697 313.733 313.546] /Subtype /Link -/A << /S /GoTo /D (figure.6) >> +/A << /S /GoTo /D (figure.7) >> >> endobj -957 0 obj << -/D [955 0 R /XYZ 99.895 740.998 null] +1010 0 obj << +/D [1008 0 R /XYZ 99.895 740.998 null] >> endobj -958 0 obj << -/D [955 0 R /XYZ 99.895 465.033 null] +1011 0 obj << +/D [1008 0 R /XYZ 99.895 465.033 null] >> endobj -959 0 obj << -/D [955 0 R /XYZ 99.895 431.215 null] +1012 0 obj << +/D [1008 0 R /XYZ 99.895 431.215 null] >> endobj -960 0 obj << -/D [955 0 R /XYZ 99.895 387.38 null] +1013 0 obj << +/D [1008 0 R /XYZ 99.895 387.38 null] >> endobj -954 0 obj << -/Font << /F27 437 0 R /F8 438 0 R /F11 599 0 R /F16 435 0 R /F10 618 0 R /F30 616 0 R >> +1007 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F11 649 0 R /F16 475 0 R /F10 666 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -964 0 obj << +1017 0 obj << /Length 3619 >> stream @@ -9343,26 +9807,26 @@ BT /F31 7.9701 Tf 260.921 653.177 Td [(Pro)-29(ce)-1(ss)-354(0)-8986(Pro)-30(cess)-354(1)]TJ -33.381 -9.464 Td [(I)-1500(GLOB\050I\051)-1500(X\050I\051)-5180(I)-1500(GLOB\050I\051)-1500(X\050I\051)]TJ -1.185 -9.465 Td [(1)-5253(1)-2148(1)1(.)-1(0)-5031(1)-4722(33)-2147(1.5)]TJ 0 -9.464 Td [(2)-5253(2)-2148(1)1(.)-1(0)-5031(2)-4722(34)-2147(1.5)]TJ 0 -9.465 Td [(3)-5253(3)-2148(1)1(.)-1(0)-5031(3)-4722(35)-2147(1.5)]TJ 0 -9.464 Td [(4)-5253(4)-2148(1)1(.)-1(0)-5031(4)-4722(36)-2147(1.5)]TJ 0 -9.465 Td [(5)-5253(5)-2148(1)1(.)-1(0)-5031(5)-4722(37)-2147(1.5)]TJ 0 -9.464 Td [(6)-5253(6)-2148(1)1(.)-1(0)-5031(6)-4722(38)-2147(1.5)]TJ 0 -9.465 Td [(7)-5253(7)-2148(1)1(.)-1(0)-5031(7)-4722(39)-2147(1.5)]TJ 0 -9.464 Td [(8)-5253(8)-2148(1)1(.)-1(0)-5031(8)-4722(40)-2147(1.5)]TJ 0 -9.465 Td [(9)-5253(9)-2148(1)1(.)-1(0)-5031(9)-4722(41)-2147(2.0)]TJ -4.234 -9.464 Td [(10)-4722(10)-2147(1.0)-4500(10)-4722(42)-2147(2.0)]TJ 0 -9.465 Td [(11)-4722(11)-2147(1.0)-4500(11)-4722(43)-2147(2.0)]TJ 0 -9.464 Td [(12)-4722(12)-2147(1.0)-4500(12)-4722(44)-2147(2.0)]TJ 0 -9.465 Td [(13)-4722(13)-2147(1.0)-4500(13)-4722(45)-2147(2.0)]TJ 0 -9.464 Td [(14)-4722(14)-2147(1.0)-4500(14)-4722(46)-2147(2.0)]TJ 0 -9.465 Td [(15)-4722(15)-2147(1.0)-4500(15)-4722(47)-2147(2.0)]TJ 0 -9.464 Td [(16)-4722(16)-2147(1.0)-4500(16)-4722(48)-2147(2.0)]TJ 0 -9.465 Td [(17)-4722(17)-2147(1.0)-4500(17)-4722(49)-2147(2.0)]TJ 0 -9.464 Td [(18)-4722(18)-2147(1.0)-4500(18)-4722(50)-2147(2.0)]TJ 0 -9.465 Td [(19)-4722(19)-2147(1.0)-4500(19)-4722(51)-2147(2.0)]TJ 0 -9.464 Td [(20)-4722(20)-2147(1.0)-4500(20)-4722(52)-2147(2.0)]TJ 0 -9.465 Td [(21)-4722(21)-2147(1.0)-4500(21)-4722(53)-2147(2.0)]TJ 0 -9.464 Td [(22)-4722(22)-2147(1.0)-4500(22)-4722(54)-2147(2.0)]TJ 0 -9.465 Td [(23)-4722(23)-2147(1.0)-4500(23)-4722(55)-2147(2.0)]TJ 0 -9.464 Td [(24)-4722(24)-2147(1.0)-4500(24)-4722(56)-2147(2.0)]TJ 0 -9.465 Td [(25)-4722(25)-2147(1.5)-4500(25)-4722(57)-2147(2.0)]TJ 0 -9.464 Td [(26)-4722(26)-2147(1.5)-4500(26)-4722(58)-2147(2.0)]TJ 0 -9.465 Td [(27)-4722(27)-2147(1.5)-4500(27)-4722(59)-2147(2.0)]TJ 0 -9.464 Td [(28)-4722(28)-2147(1.5)-4500(28)-4722(60)-2147(2.0)]TJ 0 -9.465 Td [(29)-4722(29)-2147(1.5)-4500(29)-4722(61)-2147(2.0)]TJ 0 -9.464 Td [(30)-4722(30)-2147(1.5)-4500(30)-4722(62)-2147(2.0)]TJ 0 -9.465 Td [(31)-4722(31)-2147(1.5)-4500(31)-4722(63)-2147(2.0)]TJ 0 -9.464 Td [(32)-4722(32)-2147(1.5)-4500(32)-4722(64)-2147(2.0)]TJ 0 -9.465 Td [(33)-4722(33)-2147(1.5)-4500(33)-4722(25)-2147(1.5)]TJ 0 -9.464 Td [(34)-4722(34)-2147(1.5)-4500(34)-4722(26)-2147(1.5)]TJ 0 -9.465 Td [(35)-4722(35)-2147(1.5)-4500(35)-4722(27)-2147(1.5)]TJ 0 -9.464 Td [(36)-4722(36)-2147(1.5)-4500(36)-4722(28)-2147(1.5)]TJ 0 -9.465 Td [(37)-4722(37)-2147(1.5)-4500(37)-4722(29)-2147(1.5)]TJ 0 -9.464 Td [(38)-4722(38)-2147(1.5)-4500(38)-4722(30)-2147(1.5)]TJ 0 -9.465 Td [(39)-4722(39)-2147(1.5)-4500(39)-4722(31)-2147(1.5)]TJ 0 -9.464 Td [(40)-4722(40)-2147(1.5)-4500(40)-4722(32)-2147(1.5)]TJ 0 -9.465 Td [(41)-4722(41)-2147(2.0)-4500(41)-4722(17)-2147(1.0)]TJ 0 -9.464 Td [(42)-4722(42)-2147(2.0)-4500(42)-4722(18)-2147(1.0)]TJ 0 -9.465 Td [(43)-4722(43)-2147(2.0)-4500(43)-4722(19)-2147(1.0)]TJ 0 -9.464 Td [(44)-4722(44)-2147(2.0)-4500(44)-4722(20)-2147(1.0)]TJ 0 -9.465 Td [(45)-4722(45)-2147(2.0)-4500(45)-4722(21)-2147(1.0)]TJ 0 -9.464 Td [(46)-4722(46)-2147(2.0)-4500(46)-4722(22)-2147(1.0)]TJ 0 -9.465 Td [(47)-4722(47)-2147(2.0)-4500(47)-4722(23)-2147(1.0)]TJ 0 -9.464 Td [(48)-4722(48)-2147(2.0)-4500(48)-4722(24)-2147(1.0)]TJ 0 g 0 G 0 g 0 G -/F8 9.9626 Tf 95.458 -98.979 Td [(46)]TJ +/F8 9.9626 Tf 95.458 -98.979 Td [(48)]TJ 0 g 0 G ET endstream endobj -963 0 obj << +1016 0 obj << /Type /Page -/Contents 964 0 R -/Resources 962 0 R +/Contents 1017 0 R +/Resources 1015 0 R /MediaBox [0 0 595.276 841.89] -/Parent 942 0 R +/Parent 977 0 R >> endobj -965 0 obj << -/D [963 0 R /XYZ 150.705 740.998 null] +1018 0 obj << +/D [1016 0 R /XYZ 150.705 740.998 null] >> endobj -962 0 obj << -/Font << /F31 622 0 R /F8 438 0 R >> +1015 0 obj << +/Font << /F31 670 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -968 0 obj << +1021 0 obj << /Length 347 >> stream @@ -9385,37 +9849,37 @@ Q 0 g 0 G 1 0 0 1 -104.703 -574.795 cm BT -/F8 9.9626 Tf 189.268 263.559 Td [(Figure)-333(7:)-445(Sample)-333(discretization)-333(mes)-1(h)1(.)]TJ +/F8 9.9626 Tf 189.268 263.559 Td [(Figure)-333(8:)-445(Sample)-333(discretization)-333(mes)-1(h)1(.)]TJ 0 g 0 G 0 g 0 G 0 g 0 G - 77.502 -173.121 Td [(47)]TJ + 77.502 -173.121 Td [(49)]TJ 0 g 0 G ET endstream endobj -967 0 obj << +1020 0 obj << /Type /Page -/Contents 968 0 R -/Resources 966 0 R +/Contents 1021 0 R +/Resources 1019 0 R /MediaBox [0 0 595.276 841.89] -/Parent 942 0 R +/Parent 1023 0 R >> endobj -951 0 obj << +1004 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figures/try8x8_ov.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 970 0 R +/PTEX.InfoDict 1024 0 R /BBox [0 0 436 514] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 971 0 R ->>/Font << /R8 972 0 R/R9 973 0 R>> +/R7 1025 0 R +>>/Font << /R8 1026 0 R/R9 1027 0 R>> >> -/Length 974 0 R +/Length 1028 0 R /Filter /FlateDecode >> stream @@ -9429,48 +9893,48 @@ V óá!Zäÿ/L)ÇÇ8ú:ß=þ êë¼® endstream endobj -970 0 obj +1024 0 obj << /Producer (ESP Ghostscript 815.03) /CreationDate (D:20070118114343) /ModDate (D:20070118114343) >> endobj -971 0 obj +1025 0 obj << /Type /ExtGState /OPM 1 >> endobj -972 0 obj +1026 0 obj << /BaseFont /Times-Roman /Type /Font /Subtype /Type1 >> endobj -973 0 obj +1027 0 obj << /BaseFont /Times-Bold /Type /Font /Subtype /Type1 >> endobj -974 0 obj +1028 0 obj 3652 endobj -969 0 obj << -/D [967 0 R /XYZ 99.895 740.998 null] +1022 0 obj << +/D [1020 0 R /XYZ 99.895 740.998 null] >> endobj -961 0 obj << -/D [967 0 R /XYZ 232.883 275.514 null] +1014 0 obj << +/D [1020 0 R /XYZ 232.883 275.514 null] >> endobj -966 0 obj << -/Font << /F8 438 0 R >> -/XObject << /Im4 951 0 R >> +1019 0 obj << +/Font << /F8 478 0 R >> +/XObject << /Im4 1004 0 R >> /ProcSet [ /PDF /Text ] >> endobj -979 0 obj << +1033 0 obj << /Length 7588 >> stream @@ -9663,47 +10127,47 @@ BT /F27 9.9626 Tf -299.782 -19.6 Td [(On)-383(Return)]TJ 0 g 0 G 0 g 0 G -/F8 9.9626 Tf 166.874 -29.888 Td [(48)]TJ +/F8 9.9626 Tf 166.874 -29.888 Td [(50)]TJ 0 g 0 G ET endstream endobj -978 0 obj << +1032 0 obj << /Type /Page -/Contents 979 0 R -/Resources 977 0 R +/Contents 1033 0 R +/Resources 1031 0 R /MediaBox [0 0 595.276 841.89] -/Parent 942 0 R -/Annots [ 975 0 R 976 0 R ] +/Parent 1023 0 R +/Annots [ 1029 0 R 1030 0 R ] >> endobj -975 0 obj << +1029 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [256.807 285.728 268.762 294.639] /Subtype /Link /A << /S /GoTo /D (table.15) >> >> endobj -976 0 obj << +1030 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 216.093 412.588 227.218] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -980 0 obj << -/D [978 0 R /XYZ 150.705 740.998 null] +1034 0 obj << +/D [1032 0 R /XYZ 150.705 740.998 null] >> endobj -170 0 obj << -/D [978 0 R /XYZ 150.705 697.37 null] +210 0 obj << +/D [1032 0 R /XYZ 150.705 697.37 null] >> endobj -981 0 obj << -/D [978 0 R /XYZ 320.941 465.393 null] +1035 0 obj << +/D [1032 0 R /XYZ 320.941 465.393 null] >> endobj -977 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F10 618 0 R /F7 617 0 R /F27 437 0 R /F30 616 0 R >> +1031 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F10 666 0 R /F7 665 0 R /F27 477 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -984 0 obj << +1038 0 obj << /Length 1355 >> stream @@ -9726,26 +10190,26 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.956 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 141.968 -500.124 Td [(49)]TJ + 141.968 -500.124 Td [(51)]TJ 0 g 0 G ET endstream endobj -983 0 obj << +1037 0 obj << /Type /Page -/Contents 984 0 R -/Resources 982 0 R +/Contents 1038 0 R +/Resources 1036 0 R /MediaBox [0 0 595.276 841.89] -/Parent 986 0 R +/Parent 1023 0 R >> endobj -985 0 obj << -/D [983 0 R /XYZ 99.895 740.998 null] +1039 0 obj << +/D [1037 0 R /XYZ 99.895 740.998 null] >> endobj -982 0 obj << -/Font << /F27 437 0 R /F8 438 0 R >> +1036 0 obj << +/Font << /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -991 0 obj << +1044 0 obj << /Length 7211 >> stream @@ -9927,40 +10391,40 @@ BT /F27 9.9626 Tf -299.782 -20.278 Td [(On)-383(Return)]TJ 0 g 0 G 0 g 0 G -/F8 9.9626 Tf 166.874 -29.888 Td [(50)]TJ +/F8 9.9626 Tf 166.874 -29.888 Td [(52)]TJ 0 g 0 G ET endstream endobj -990 0 obj << +1043 0 obj << /Type /Page -/Contents 991 0 R -/Resources 989 0 R +/Contents 1044 0 R +/Resources 1042 0 R /MediaBox [0 0 595.276 841.89] -/Parent 986 0 R -/Annots [ 987 0 R ] +/Parent 1023 0 R +/Annots [ 1040 0 R ] >> endobj -987 0 obj << +1040 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 217.448 412.588 228.573] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -992 0 obj << -/D [990 0 R /XYZ 150.705 740.998 null] +1045 0 obj << +/D [1043 0 R /XYZ 150.705 740.998 null] >> endobj -174 0 obj << -/D [990 0 R /XYZ 150.705 697.294 null] +214 0 obj << +/D [1043 0 R /XYZ 150.705 697.294 null] >> endobj -993 0 obj << -/D [990 0 R /XYZ 320.941 459.569 null] +1046 0 obj << +/D [1043 0 R /XYZ 320.941 459.569 null] >> endobj -989 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F10 618 0 R /F14 619 0 R /F7 617 0 R /F27 437 0 R /F30 616 0 R >> +1042 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F10 666 0 R /F14 667 0 R /F7 665 0 R /F27 477 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -996 0 obj << +1049 0 obj << /Length 1718 >> stream @@ -9994,34 +10458,34 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.956 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 141.968 -488.169 Td [(51)]TJ + 141.968 -488.169 Td [(53)]TJ 0 g 0 G ET endstream endobj -995 0 obj << +1048 0 obj << /Type /Page -/Contents 996 0 R -/Resources 994 0 R +/Contents 1049 0 R +/Resources 1047 0 R /MediaBox [0 0 595.276 841.89] -/Parent 986 0 R -/Annots [ 988 0 R ] +/Parent 1023 0 R +/Annots [ 1041 0 R ] >> endobj -988 0 obj << +1041 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.998 645.357 217.953 654.268] /Subtype /Link /A << /S /GoTo /D (table.16) >> >> endobj -997 0 obj << -/D [995 0 R /XYZ 99.895 740.998 null] +1050 0 obj << +/D [1048 0 R /XYZ 99.895 740.998 null] >> endobj -994 0 obj << -/Font << /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +1047 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1000 0 obj << +1053 0 obj << /Length 6529 >> stream @@ -10071,32 +10535,32 @@ BT 0 g 0 G /F8 9.9626 Tf 14.211 0 Td [(Data)-363(allo)-28(cation:)-504(the)-363(set)-364(of)-363(global)-363(indices)]TJ/F11 9.9626 Tf 182.789 0 Td [(v)-36(l)]TJ/F8 9.9626 Tf 8.355 0 Td [(\0501)-328(:)]TJ/F11 9.9626 Tf 18.15 0 Td [(nl)]TJ/F8 9.9626 Tf 9.149 0 Td [(\051)-363(b)-28(elonging)-363(to)-363(the)-364(callin)1(g)]TJ -207.747 -11.955 Td [(pro)-28(cess.)]TJ 0 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 27.95 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf 23.074 0 Td [(.)]TJ -51.024 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 25.183 0 Td [(optional)]TJ/F8 9.9626 Tf 40.577 0 Td [(.)]TJ -65.76 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.485 0 Td [(in)]TJ/F8 9.9626 Tf 9.548 0 Td [(.)]TJ -43.033 -11.956 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(in)28(teger)-333(arra)27(y)84(.)]TJ 0 g 0 G - 141.967 -29.888 Td [(52)]TJ + 141.967 -29.888 Td [(54)]TJ 0 g 0 G ET endstream endobj -999 0 obj << +1052 0 obj << /Type /Page -/Contents 1000 0 R -/Resources 998 0 R +/Contents 1053 0 R +/Resources 1051 0 R /MediaBox [0 0 595.276 841.89] -/Parent 986 0 R +/Parent 1023 0 R >> endobj -1001 0 obj << -/D [999 0 R /XYZ 150.705 740.998 null] +1054 0 obj << +/D [1052 0 R /XYZ 150.705 740.998 null] >> endobj -178 0 obj << -/D [999 0 R /XYZ 150.705 716.092 null] +218 0 obj << +/D [1052 0 R /XYZ 150.705 716.092 null] >> endobj -182 0 obj << -/D [999 0 R /XYZ 150.705 673.557 null] +222 0 obj << +/D [1052 0 R /XYZ 150.705 673.557 null] >> endobj -998 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F11 599 0 R /F14 619 0 R >> +1051 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F11 649 0 R /F14 667 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1005 0 obj << +1058 0 obj << /Length 6340 >> stream @@ -10174,37 +10638,37 @@ BT 0 g 0 G /F8 9.9626 Tf 32.191 0 Td [(The)-333(global)-334(index)-333(to)-333(b)-28(e)-333(mapp)-28(ed;)]TJ 0 g 0 G - 62.73 -29.888 Td [(53)]TJ + 62.73 -29.888 Td [(55)]TJ 0 g 0 G ET endstream endobj -1004 0 obj << +1057 0 obj << /Type /Page -/Contents 1005 0 R -/Resources 1003 0 R +/Contents 1058 0 R +/Resources 1056 0 R /MediaBox [0 0 595.276 841.89] -/Parent 986 0 R -/Annots [ 1002 0 R ] +/Parent 1061 0 R +/Annots [ 1055 0 R ] >> endobj -1002 0 obj << +1055 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 406.032 361.779 417.157] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1006 0 obj << -/D [1004 0 R /XYZ 99.895 740.998 null] +1059 0 obj << +/D [1057 0 R /XYZ 99.895 740.998 null] >> endobj -1007 0 obj << -/D [1004 0 R /XYZ 99.895 315.593 null] +1060 0 obj << +/D [1057 0 R /XYZ 99.895 315.593 null] >> endobj -1003 0 obj << -/Font << /F27 437 0 R /F8 438 0 R /F30 616 0 R /F16 435 0 R >> +1056 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F30 664 0 R /F16 475 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1010 0 obj << +1064 0 obj << /Length 10027 >> stream @@ -10264,41 +10728,41 @@ BT 0 g 0 G [-500(When)-222(the)-222(subroutine)-222(is)-223(in)28(v)28(ok)28(ed)-223(with)]TJ/F30 9.9626 Tf 170.611 0 Td [(vl)]TJ/F8 9.9626 Tf 12.674 0 Td [(in)-222(conjunction)-222(with)]TJ/F30 9.9626 Tf 84.959 0 Td [(globalcheck=.false.)]TJ/F8 9.9626 Tf 99.377 0 Td [(,)]TJ -354.891 -11.955 Td [(no)-405(index)-405(space)-405(scan)-405(will)-405(tak)28(e)-405(place.)-660(Th)28(us)-405(it)-405(is)-405(the)-405(resp)-28(onsibilit)28(y)-405(of)-405(the)]TJ 0 -11.955 Td [(user)-419(to)-418(mak)28(e)-419(sure)-418(that)-419(the)-418(indices)-419(sp)-28(eci\014ed)-418(in)]TJ/F30 9.9626 Tf 211.319 0 Td [(vl)]TJ/F8 9.9626 Tf 14.63 0 Td [(ha)28(v)28(e)-419(neither)-418(orphans)]TJ -225.949 -11.956 Td [(nor)-333(o)27(v)28(erlaps;)-333(if)-333(this)-334(assumption)-333(fails,)-333(results)-334(will)-333(b)-28(e)-333(unpredictable.)]TJ 0 g 0 G - 141.968 -29.887 Td [(54)]TJ + 141.968 -29.887 Td [(56)]TJ 0 g 0 G ET endstream endobj -1009 0 obj << +1063 0 obj << /Type /Page -/Contents 1010 0 R -/Resources 1008 0 R +/Contents 1064 0 R +/Resources 1062 0 R /MediaBox [0 0 595.276 841.89] -/Parent 986 0 R +/Parent 1061 0 R >> endobj -1011 0 obj << -/D [1009 0 R /XYZ 150.705 740.998 null] +1065 0 obj << +/D [1063 0 R /XYZ 150.705 740.998 null] >> endobj -1012 0 obj << -/D [1009 0 R /XYZ 150.705 287.871 null] +1066 0 obj << +/D [1063 0 R /XYZ 150.705 287.871 null] >> endobj -1013 0 obj << -/D [1009 0 R /XYZ 150.705 267.476 null] +1067 0 obj << +/D [1063 0 R /XYZ 150.705 267.476 null] >> endobj -1014 0 obj << -/D [1009 0 R /XYZ 150.705 235.127 null] +1068 0 obj << +/D [1063 0 R /XYZ 150.705 235.127 null] >> endobj -1015 0 obj << -/D [1009 0 R /XYZ 150.705 214.456 null] +1069 0 obj << +/D [1063 0 R /XYZ 150.705 214.456 null] >> endobj -1016 0 obj << -/D [1009 0 R /XYZ 150.705 172.366 null] +1070 0 obj << +/D [1063 0 R /XYZ 150.705 172.366 null] >> endobj -1008 0 obj << -/Font << /F27 437 0 R /F8 438 0 R /F30 616 0 R /F14 619 0 R /F11 599 0 R /F10 618 0 R >> +1062 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F30 664 0 R /F14 667 0 R /F11 649 0 R /F10 666 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1019 0 obj << +1073 0 obj << /Length 507 >> stream @@ -10310,29 +10774,29 @@ BT 0 g 0 G [-500(Orphan)-313(and)-312(o)27(v)28(erlap)-312(indices)-313(are)-313(imp)-28(ossible)-313(b)28(y)-313(construction)-312(when)-313(the)-313(sub-)]TJ 12.73 -11.955 Td [(routine)-333(is)-334(in)28(v)28(ok)28(ed)-334(with)]TJ/F30 9.9626 Tf 103.307 0 Td [(nl)]TJ/F8 9.9626 Tf 13.782 0 Td [(\050alone\051,)-333(or)]TJ/F30 9.9626 Tf 48.734 0 Td [(vg)]TJ/F8 9.9626 Tf 10.46 0 Td [(.)]TJ 0 g 0 G - -34.315 -603.736 Td [(55)]TJ + -34.315 -603.736 Td [(57)]TJ 0 g 0 G ET endstream endobj -1018 0 obj << +1072 0 obj << /Type /Page -/Contents 1019 0 R -/Resources 1017 0 R +/Contents 1073 0 R +/Resources 1071 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1022 0 R +/Parent 1061 0 R >> endobj -1020 0 obj << -/D [1018 0 R /XYZ 99.895 740.998 null] +1074 0 obj << +/D [1072 0 R /XYZ 99.895 740.998 null] >> endobj -1021 0 obj << -/D [1018 0 R /XYZ 99.895 716.092 null] +1075 0 obj << +/D [1072 0 R /XYZ 99.895 716.092 null] >> endobj -1017 0 obj << -/Font << /F8 438 0 R /F30 616 0 R >> +1071 0 obj << +/Font << /F8 478 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1026 0 obj << +1079 0 obj << /Length 5575 >> stream @@ -10414,43 +10878,43 @@ BT 0 g 0 G [-500(This)-305(rout)1(ine)-305(automatically)-305(ign)1(ores)-305(edges)-305(that)-304(do)-305(not)-304(insist)-305(on)-304(the)-305(curren)28(t)]TJ 12.73 -11.955 Td [(pro)-28(cess,)-285(i.e.)-424(edges)-272(for)-273(whic)28(h)-272(neither)-273(the)-272(starting)-272(nor)-273(the)-272(end)-273(v)28(ertex)-272(b)-28(elong)]TJ 0 -11.955 Td [(to)-333(the)-334(curren)28(t)-333(pro)-28(cess.)]TJ 0 g 0 G - 141.968 -51.349 Td [(56)]TJ + 141.968 -51.349 Td [(58)]TJ 0 g 0 G ET endstream endobj -1025 0 obj << +1078 0 obj << /Type /Page -/Contents 1026 0 R -/Resources 1024 0 R +/Contents 1079 0 R +/Resources 1077 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1022 0 R -/Annots [ 1023 0 R ] +/Parent 1061 0 R +/Annots [ 1076 0 R ] >> endobj -1023 0 obj << +1076 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 292.001 412.588 303.126] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1027 0 obj << -/D [1025 0 R /XYZ 150.705 740.998 null] +1080 0 obj << +/D [1078 0 R /XYZ 150.705 740.998 null] >> endobj -186 0 obj << -/D [1025 0 R /XYZ 150.705 697.37 null] +226 0 obj << +/D [1078 0 R /XYZ 150.705 697.37 null] >> endobj -1028 0 obj << -/D [1025 0 R /XYZ 150.705 201.563 null] +1081 0 obj << +/D [1078 0 R /XYZ 150.705 201.563 null] >> endobj -1029 0 obj << -/D [1025 0 R /XYZ 150.705 179.7 null] +1082 0 obj << +/D [1078 0 R /XYZ 150.705 179.7 null] >> endobj -1024 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F11 599 0 R >> +1077 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1034 0 obj << +1087 0 obj << /Length 3494 >> stream @@ -10545,47 +11009,47 @@ BT 0 g 0 G [-500(On)-333(exit)-334(from)-333(this)-333(routine)-333(the)-334(descriptor)-333(is)-333(in)-334(the)-333(assem)28(bled)-334(state.)]TJ 0 g 0 G - 154.698 -288.46 Td [(57)]TJ + 154.698 -288.46 Td [(59)]TJ 0 g 0 G ET endstream endobj -1033 0 obj << +1086 0 obj << /Type /Page -/Contents 1034 0 R -/Resources 1032 0 R +/Contents 1087 0 R +/Resources 1085 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1022 0 R -/Annots [ 1030 0 R 1031 0 R ] +/Parent 1061 0 R +/Annots [ 1083 0 R 1084 0 R ] >> endobj -1030 0 obj << +1083 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 574.94 361.779 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1031 0 obj << +1084 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 485.277 361.779 496.401] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1035 0 obj << -/D [1033 0 R /XYZ 99.895 740.998 null] +1088 0 obj << +/D [1086 0 R /XYZ 99.895 740.998 null] >> endobj -190 0 obj << -/D [1033 0 R /XYZ 99.895 697.37 null] +230 0 obj << +/D [1086 0 R /XYZ 99.895 697.37 null] >> endobj -1036 0 obj << -/D [1033 0 R /XYZ 99.895 394.838 null] +1089 0 obj << +/D [1086 0 R /XYZ 99.895 394.838 null] >> endobj -1032 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1085 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1041 0 obj << +1094 0 obj << /Length 3278 >> stream @@ -10676,44 +11140,44 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.148 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)27(t)1(e)-1(ger)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detec)-1(ted.)]TJ 0 g 0 G - 141.968 -330.303 Td [(58)]TJ + 141.968 -330.303 Td [(60)]TJ 0 g 0 G ET endstream endobj -1040 0 obj << +1093 0 obj << /Type /Page -/Contents 1041 0 R -/Resources 1039 0 R +/Contents 1094 0 R +/Resources 1092 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1022 0 R -/Annots [ 1037 0 R 1038 0 R ] +/Parent 1061 0 R +/Annots [ 1090 0 R 1091 0 R ] >> endobj -1037 0 obj << +1090 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 574.94 412.588 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1038 0 obj << +1091 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 485.277 412.588 496.401] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1042 0 obj << -/D [1040 0 R /XYZ 150.705 740.998 null] +1095 0 obj << +/D [1093 0 R /XYZ 150.705 740.998 null] >> endobj -194 0 obj << -/D [1040 0 R /XYZ 150.705 697.37 null] +234 0 obj << +/D [1093 0 R /XYZ 150.705 697.37 null] >> endobj -1039 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1092 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1046 0 obj << +1099 0 obj << /Length 2243 >> stream @@ -10775,37 +11239,37 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 141.968 -398.049 Td [(59)]TJ + 141.968 -398.049 Td [(61)]TJ 0 g 0 G ET endstream endobj -1045 0 obj << +1098 0 obj << /Type /Page -/Contents 1046 0 R -/Resources 1044 0 R +/Contents 1099 0 R +/Resources 1097 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1022 0 R -/Annots [ 1043 0 R ] +/Parent 1101 0 R +/Annots [ 1096 0 R ] >> endobj -1043 0 obj << +1096 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 574.94 361.779 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1047 0 obj << -/D [1045 0 R /XYZ 99.895 740.998 null] +1100 0 obj << +/D [1098 0 R /XYZ 99.895 740.998 null] >> endobj -198 0 obj << -/D [1045 0 R /XYZ 99.895 697.37 null] +238 0 obj << +/D [1098 0 R /XYZ 99.895 697.37 null] >> endobj -1044 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1097 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1052 0 obj << +1106 0 obj << /Length 5915 >> stream @@ -10908,44 +11372,44 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.148 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)27(t)1(e)-1(ger)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detec)-1(ted.)]TJ/F16 11.9552 Tf -24.906 -23.476 Td [(Notes)]TJ 0 g 0 G -/F8 9.9626 Tf 166.874 -29.888 Td [(60)]TJ +/F8 9.9626 Tf 166.874 -29.888 Td [(62)]TJ 0 g 0 G ET endstream endobj -1051 0 obj << +1105 0 obj << /Type /Page -/Contents 1052 0 R -/Resources 1050 0 R +/Contents 1106 0 R +/Resources 1104 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1022 0 R -/Annots [ 1048 0 R 1049 0 R ] +/Parent 1101 0 R +/Annots [ 1102 0 R 1103 0 R ] >> endobj -1048 0 obj << +1102 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 453.24 417.818 464.364] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1049 0 obj << +1103 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 209.896 412.588 221.021] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1053 0 obj << -/D [1051 0 R /XYZ 150.705 740.998 null] +1107 0 obj << +/D [1105 0 R /XYZ 150.705 740.998 null] >> endobj -202 0 obj << -/D [1051 0 R /XYZ 150.705 685.412 null] +242 0 obj << +/D [1105 0 R /XYZ 150.705 685.412 null] >> endobj -1050 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F11 599 0 R /F14 619 0 R >> +1104 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F11 649 0 R /F14 667 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1056 0 obj << +1110 0 obj << /Length 1591 >> stream @@ -10961,32 +11425,32 @@ BT 0 g 0 G [-500(Sp)-28(ecifying)]TJ/F30 9.9626 Tf 60.957 0 Td [(psb_ovt_asov_)]TJ/F8 9.9626 Tf 71.666 0 Td [(for)-368(the)]TJ/F30 9.9626 Tf 33.107 0 Td [(extype)]TJ/F8 9.9626 Tf 35.054 0 Td [(argumen)28(t)-369(the)-368(user)-369(will)-368(obtain)]TJ -188.054 -11.955 Td [(a)-458(descriptor)-459(with)-458(an)-458(o)28(v)27(erlapp)-27(ed)-459(decomp)-27(os)-1(iti)1(on:)-695(the)-458(additional)-458(la)27(y)28(er)-458(is)]TJ 0 -11.955 Td [(aggregated)-413(to)-413(the)-413(lo)-28(cal)-413(sub)-28(domain)-413(\050and)-413(th)28(us)-414(is)-413(an)-413(o)28(v)28(erlap\051,)-433(and)-413(a)-414(new)]TJ 0 -11.955 Td [(halo)-333(extending)-334(b)-27(ey)27(on)1(d)-334(the)-333(last)-333(additional)-334(la)28(y)28(er)-333(is)-334(formed.)]TJ 0 g 0 G - 141.968 -524.035 Td [(61)]TJ + 141.968 -524.035 Td [(63)]TJ 0 g 0 G ET endstream endobj -1055 0 obj << +1109 0 obj << /Type /Page -/Contents 1056 0 R -/Resources 1054 0 R +/Contents 1110 0 R +/Resources 1108 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1060 0 R +/Parent 1101 0 R >> endobj -1057 0 obj << -/D [1055 0 R /XYZ 99.895 740.998 null] +1111 0 obj << +/D [1109 0 R /XYZ 99.895 740.998 null] >> endobj -1058 0 obj << -/D [1055 0 R /XYZ 99.895 716.092 null] +1112 0 obj << +/D [1109 0 R /XYZ 99.895 716.092 null] >> endobj -1059 0 obj << -/D [1055 0 R /XYZ 99.895 664.341 null] +1113 0 obj << +/D [1109 0 R /XYZ 99.895 664.341 null] >> endobj -1054 0 obj << -/Font << /F8 438 0 R /F30 616 0 R >> +1108 0 obj << +/Font << /F8 478 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1065 0 obj << +1118 0 obj << /Length 4886 >> stream @@ -11086,53 +11550,53 @@ BT 0 g 0 G [-500(Pro)28(viding)-307(a)-308(go)-27(o)-28(d)-307(e)-1(stimate)-307(for)-307(the)-307(n)27(um)28(b)-28(er)-307(of)-307(nonzero)-28(es)]TJ/F11 9.9626 Tf 254.288 0 Td [(nnz)]TJ/F8 9.9626 Tf 20.093 0 Td [(in)-307(the)-308(assem-)]TJ -261.651 -11.955 Td [(bled)-402(matrix)-401(ma)28(y)-402(substan)28(tially)-401(impro)27(v)28(e)-401(p)-28(erformance)-402(in)-401(the)-402(matrix)-401(build)]TJ 0 -11.955 Td [(phase,)-458(as)-433(it)-432(will)-433(reduce)-433(or)-433(eliminate)-433(the)-433(need)-432(for)-433(\050p)-28(oten)28(tially)-433(m)28(ultiple\051)]TJ 0 -11.956 Td [(data)-333(reallo)-28(cations.)]TJ 0 g 0 G - 141.968 -133.042 Td [(62)]TJ + 141.968 -133.042 Td [(64)]TJ 0 g 0 G ET endstream endobj -1064 0 obj << +1117 0 obj << /Type /Page -/Contents 1065 0 R -/Resources 1063 0 R +/Contents 1118 0 R +/Resources 1116 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1060 0 R -/Annots [ 1061 0 R 1062 0 R ] +/Parent 1101 0 R +/Annots [ 1114 0 R 1115 0 R ] >> endobj -1061 0 obj << +1114 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 574.94 412.588 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1062 0 obj << +1115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 405.575 417.818 416.7] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1066 0 obj << -/D [1064 0 R /XYZ 150.705 740.998 null] +1119 0 obj << +/D [1117 0 R /XYZ 150.705 740.998 null] >> endobj -206 0 obj << -/D [1064 0 R /XYZ 150.705 697.37 null] +246 0 obj << +/D [1117 0 R /XYZ 150.705 697.37 null] >> endobj -1067 0 obj << -/D [1064 0 R /XYZ 150.705 315.137 null] +1120 0 obj << +/D [1117 0 R /XYZ 150.705 315.137 null] >> endobj -1068 0 obj << -/D [1064 0 R /XYZ 150.705 293.274 null] +1121 0 obj << +/D [1117 0 R /XYZ 150.705 293.274 null] >> endobj -1069 0 obj << -/D [1064 0 R /XYZ 150.705 273.349 null] +1122 0 obj << +/D [1117 0 R /XYZ 150.705 273.349 null] >> endobj -1063 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +1116 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1075 0 obj << +1128 0 obj << /Length 6672 >> stream @@ -11257,51 +11721,51 @@ BT 0 g 0 G /F8 9.9626 Tf 20.922 0 Td [(.)]TJ 0 g 0 G - -60.444 -41.843 Td [(63)]TJ + -60.444 -41.843 Td [(65)]TJ 0 g 0 G ET endstream endobj -1074 0 obj << +1127 0 obj << /Type /Page -/Contents 1075 0 R -/Resources 1073 0 R +/Contents 1128 0 R +/Resources 1126 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1060 0 R -/Annots [ 1070 0 R 1071 0 R 1072 0 R ] +/Parent 1101 0 R +/Annots [ 1123 0 R 1124 0 R 1125 0 R ] >> endobj -1070 0 obj << +1123 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.152 296.208 328.21 307.333] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1071 0 obj << +1124 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 196.322 367.009 207.447] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1072 0 obj << +1125 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.152 129.071 328.21 140.196] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1076 0 obj << -/D [1074 0 R /XYZ 99.895 740.998 null] +1129 0 obj << +/D [1127 0 R /XYZ 99.895 740.998 null] >> endobj -210 0 obj << -/D [1074 0 R /XYZ 99.895 697.37 null] +250 0 obj << +/D [1127 0 R /XYZ 99.895 697.37 null] >> endobj -1073 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +1126 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1079 0 obj << +1132 0 obj << /Length 3014 >> stream @@ -11337,44 +11801,44 @@ BT 0 g 0 G [-500(If)-309(the)-308(matrix)-309(is)-308(in)-309(the)-308(up)-28(date)-309(state,)-313(an)28(y)-309(en)28(tries)-309(in)-308(p)-28(ositions)-309(that)-308(w)28(ere)-309(not)]TJ 12.73 -11.955 Td [(presen)28(t)-334(in)-333(the)-333(original)-333(matrix)-334(will)-333(b)-28(e)-333(ignored.)]TJ 0 g 0 G - 141.968 -306.849 Td [(64)]TJ + 141.968 -306.849 Td [(66)]TJ 0 g 0 G ET endstream endobj -1078 0 obj << +1131 0 obj << /Type /Page -/Contents 1079 0 R -/Resources 1077 0 R +/Contents 1132 0 R +/Resources 1130 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1060 0 R +/Parent 1101 0 R >> endobj -1080 0 obj << -/D [1078 0 R /XYZ 150.705 740.998 null] +1133 0 obj << +/D [1131 0 R /XYZ 150.705 740.998 null] >> endobj -1081 0 obj << -/D [1078 0 R /XYZ 150.705 632.405 null] +1134 0 obj << +/D [1131 0 R /XYZ 150.705 632.405 null] >> endobj -1082 0 obj << -/D [1078 0 R /XYZ 150.705 600.525 null] +1135 0 obj << +/D [1131 0 R /XYZ 150.705 600.525 null] >> endobj -1083 0 obj << -/D [1078 0 R /XYZ 150.705 566.707 null] +1136 0 obj << +/D [1131 0 R /XYZ 150.705 566.707 null] >> endobj -1084 0 obj << -/D [1078 0 R /XYZ 150.705 498.961 null] +1137 0 obj << +/D [1131 0 R /XYZ 150.705 498.961 null] >> endobj -1085 0 obj << -/D [1078 0 R /XYZ 150.705 467.081 null] +1138 0 obj << +/D [1131 0 R /XYZ 150.705 467.081 null] >> endobj -1086 0 obj << -/D [1078 0 R /XYZ 150.705 423.245 null] +1139 0 obj << +/D [1131 0 R /XYZ 150.705 423.245 null] >> endobj -1077 0 obj << -/Font << /F27 437 0 R /F8 438 0 R /F16 435 0 R /F30 616 0 R >> +1130 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F16 475 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1091 0 obj << +1144 0 obj << /Length 5985 >> stream @@ -11478,50 +11942,50 @@ BT 0 g 0 G [-500(The)-333(sparse)-334(matrix)-333(ma)28(y)-334(b)-27(e)-334(in)-333(either)-333(the)-334(build)-333(or)-333(up)-28(date)-333(state;)]TJ 0 g 0 G - 154.698 -29.888 Td [(65)]TJ + 154.698 -29.888 Td [(67)]TJ 0 g 0 G ET endstream endobj -1090 0 obj << +1143 0 obj << /Type /Page -/Contents 1091 0 R -/Resources 1089 0 R +/Contents 1144 0 R +/Resources 1142 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1060 0 R -/Annots [ 1087 0 R 1088 0 R ] +/Parent 1148 0 R +/Annots [ 1140 0 R 1141 0 R ] >> endobj -1087 0 obj << +1140 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 571.784 361.779 582.909] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1088 0 obj << +1141 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 262.266 367.009 273.391] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1092 0 obj << -/D [1090 0 R /XYZ 99.895 740.998 null] +1145 0 obj << +/D [1143 0 R /XYZ 99.895 740.998 null] >> endobj -214 0 obj << -/D [1090 0 R /XYZ 99.895 697.159 null] +254 0 obj << +/D [1143 0 R /XYZ 99.895 697.159 null] >> endobj -1093 0 obj << -/D [1090 0 R /XYZ 99.895 169.619 null] +1146 0 obj << +/D [1143 0 R /XYZ 99.895 169.619 null] >> endobj -1094 0 obj << -/D [1090 0 R /XYZ 99.895 134.543 null] +1147 0 obj << +/D [1143 0 R /XYZ 99.895 134.543 null] >> endobj -1089 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1142 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1097 0 obj << +1151 0 obj << /Length 1520 >> stream @@ -11541,35 +12005,35 @@ BT 0 g 0 G [-500(On)-370(exit)-370(from)-370(this)-370(routine)-370(the)-370(matrix)-370(is)-370(in)-370(the)-370(assem)28(bled)-370(state,)-380(an)1(d)-370(th)27(us)]TJ 12.73 -11.956 Td [(is)-333(suitable)-334(for)-333(the)-333(computational)-334(rou)1(tines)-1(.)]TJ 0 g 0 G - 141.968 -516.064 Td [(66)]TJ + 141.968 -516.064 Td [(68)]TJ 0 g 0 G ET endstream endobj -1096 0 obj << +1150 0 obj << /Type /Page -/Contents 1097 0 R -/Resources 1095 0 R +/Contents 1151 0 R +/Resources 1149 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1060 0 R +/Parent 1148 0 R >> endobj -1098 0 obj << -/D [1096 0 R /XYZ 150.705 740.998 null] +1152 0 obj << +/D [1150 0 R /XYZ 150.705 740.998 null] >> endobj -1099 0 obj << -/D [1096 0 R /XYZ 150.705 716.092 null] +1153 0 obj << +/D [1150 0 R /XYZ 150.705 716.092 null] >> endobj -1100 0 obj << -/D [1096 0 R /XYZ 150.705 676.296 null] +1154 0 obj << +/D [1150 0 R /XYZ 150.705 676.296 null] >> endobj -1101 0 obj << -/D [1096 0 R /XYZ 150.705 632.461 null] +1155 0 obj << +/D [1150 0 R /XYZ 150.705 632.461 null] >> endobj -1095 0 obj << -/Font << /F8 438 0 R /F30 616 0 R >> +1149 0 obj << +/Font << /F8 478 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1106 0 obj << +1160 0 obj << /Length 3085 >> stream @@ -11653,44 +12117,44 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 141.968 -330.303 Td [(67)]TJ + 141.968 -330.303 Td [(69)]TJ 0 g 0 G ET endstream endobj -1105 0 obj << +1159 0 obj << /Type /Page -/Contents 1106 0 R -/Resources 1104 0 R +/Contents 1160 0 R +/Resources 1158 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1108 0 R -/Annots [ 1102 0 R 1103 0 R ] +/Parent 1148 0 R +/Annots [ 1156 0 R 1157 0 R ] >> endobj -1102 0 obj << +1156 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 574.94 367.009 586.065] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1103 0 obj << +1157 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 507.194 361.779 518.319] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1107 0 obj << -/D [1105 0 R /XYZ 99.895 740.998 null] +1161 0 obj << +/D [1159 0 R /XYZ 99.895 740.998 null] >> endobj -218 0 obj << -/D [1105 0 R /XYZ 99.895 697.37 null] +258 0 obj << +/D [1159 0 R /XYZ 99.895 697.37 null] >> endobj -1104 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1158 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1113 0 obj << +1166 0 obj << /Length 3975 >> stream @@ -11782,47 +12246,47 @@ BT 0 g 0 G [-500(On)-333(exit)-334(from)-333(this)-333(routine)-334(t)1(he)-334(sparse)-333(matrix)-334(is)-333(in)-333(the)-333(up)-28(date)-334(state.)]TJ 0 g 0 G - 154.698 -206.766 Td [(68)]TJ + 154.698 -206.766 Td [(70)]TJ 0 g 0 G ET endstream endobj -1112 0 obj << +1165 0 obj << /Type /Page -/Contents 1113 0 R -/Resources 1111 0 R +/Contents 1166 0 R +/Resources 1164 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1108 0 R -/Annots [ 1109 0 R 1110 0 R ] +/Parent 1148 0 R +/Annots [ 1162 0 R 1163 0 R ] >> endobj -1109 0 obj << +1162 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 560.993 417.818 572.118] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1110 0 obj << +1163 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 493.247 412.588 504.372] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1114 0 obj << -/D [1112 0 R /XYZ 150.705 740.998 null] +1167 0 obj << +/D [1165 0 R /XYZ 150.705 740.998 null] >> endobj -222 0 obj << -/D [1112 0 R /XYZ 150.705 685.747 null] +262 0 obj << +/D [1165 0 R /XYZ 150.705 685.747 null] >> endobj -1115 0 obj << -/D [1112 0 R /XYZ 150.705 313.144 null] +1168 0 obj << +/D [1165 0 R /XYZ 150.705 313.144 null] >> endobj -1111 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1164 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1119 0 obj << +1172 0 obj << /Length 4603 >> stream @@ -11896,37 +12360,37 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 141.968 -123.08 Td [(69)]TJ + 141.968 -123.08 Td [(71)]TJ 0 g 0 G ET endstream endobj -1118 0 obj << +1171 0 obj << /Type /Page -/Contents 1119 0 R -/Resources 1117 0 R +/Contents 1172 0 R +/Resources 1170 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1108 0 R -/Annots [ 1116 0 R ] +/Parent 1148 0 R +/Annots [ 1169 0 R ] >> endobj -1116 0 obj << +1169 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.152 574.94 328.21 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1120 0 obj << -/D [1118 0 R /XYZ 99.895 740.998 null] +1173 0 obj << +/D [1171 0 R /XYZ 99.895 740.998 null] >> endobj -226 0 obj << -/D [1118 0 R /XYZ 99.895 697.37 null] +266 0 obj << +/D [1171 0 R /XYZ 99.895 697.37 null] >> endobj -1117 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +1170 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1124 0 obj << +1177 0 obj << /Length 6176 >> stream @@ -12008,37 +12472,37 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.378 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.378 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.485 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.034 -11.955 Td [(An)-333(in)28(teger)-334(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detected.)]TJ 0 g 0 G - 141.967 -29.888 Td [(70)]TJ + 141.967 -29.888 Td [(72)]TJ 0 g 0 G ET endstream endobj -1123 0 obj << +1176 0 obj << /Type /Page -/Contents 1124 0 R -/Resources 1122 0 R +/Contents 1177 0 R +/Resources 1175 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1108 0 R -/Annots [ 1121 0 R ] +/Parent 1148 0 R +/Annots [ 1174 0 R ] >> endobj -1121 0 obj << +1174 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 363.459 412.588 374.584] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1125 0 obj << -/D [1123 0 R /XYZ 150.705 740.998 null] +1178 0 obj << +/D [1176 0 R /XYZ 150.705 740.998 null] >> endobj -230 0 obj << -/D [1123 0 R /XYZ 150.705 697.37 null] +270 0 obj << +/D [1176 0 R /XYZ 150.705 697.37 null] >> endobj -1122 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +1175 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1128 0 obj << +1181 0 obj << /Length 554 >> stream @@ -12055,32 +12519,32 @@ BT 0 g 0 G [-500(Duplicate)-292(en)28(tries)-293(are)-292(either)-292(o)28(v)28(erwritten)-292(or)-293(added,)-300(there)-292(is)-292(no)-292(pro)27(vision)-292(for)]TJ 12.73 -11.955 Td [(raising)-333(an)-334(error)-333(condition.)]TJ 0 g 0 G - 141.968 -563.885 Td [(71)]TJ + 141.968 -563.885 Td [(73)]TJ 0 g 0 G ET endstream endobj -1127 0 obj << +1180 0 obj << /Type /Page -/Contents 1128 0 R -/Resources 1126 0 R +/Contents 1181 0 R +/Resources 1179 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1108 0 R +/Parent 1185 0 R >> endobj -1129 0 obj << -/D [1127 0 R /XYZ 99.895 740.998 null] +1182 0 obj << +/D [1180 0 R /XYZ 99.895 740.998 null] >> endobj -1130 0 obj << -/D [1127 0 R /XYZ 99.895 702.144 null] +1183 0 obj << +/D [1180 0 R /XYZ 99.895 702.144 null] >> endobj -1131 0 obj << -/D [1127 0 R /XYZ 99.895 679.728 null] +1184 0 obj << +/D [1180 0 R /XYZ 99.895 679.728 null] >> endobj -1126 0 obj << -/Font << /F16 435 0 R /F8 438 0 R >> +1179 0 obj << +/Font << /F16 475 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1135 0 obj << +1189 0 obj << /Length 2877 >> stream @@ -12146,37 +12610,37 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.148 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.956 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(te)-1(ger)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detec)-1(ted.)]TJ 0 g 0 G - 141.968 -294.437 Td [(72)]TJ + 141.968 -294.437 Td [(74)]TJ 0 g 0 G ET endstream endobj -1134 0 obj << +1188 0 obj << /Type /Page -/Contents 1135 0 R -/Resources 1133 0 R +/Contents 1189 0 R +/Resources 1187 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1108 0 R -/Annots [ 1132 0 R ] +/Parent 1185 0 R +/Annots [ 1186 0 R ] >> endobj -1132 0 obj << +1186 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [311.962 574.94 379.019 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1136 0 obj << -/D [1134 0 R /XYZ 150.705 740.998 null] +1190 0 obj << +/D [1188 0 R /XYZ 150.705 740.998 null] >> endobj -234 0 obj << -/D [1134 0 R /XYZ 150.705 697.37 null] +274 0 obj << +/D [1188 0 R /XYZ 150.705 697.37 null] >> endobj -1133 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1187 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1140 0 obj << +1194 0 obj << /Length 2881 >> stream @@ -12242,37 +12706,37 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.956 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 141.968 -294.437 Td [(73)]TJ + 141.968 -294.437 Td [(75)]TJ 0 g 0 G ET endstream endobj -1139 0 obj << +1193 0 obj << /Type /Page -/Contents 1140 0 R -/Resources 1138 0 R +/Contents 1194 0 R +/Resources 1192 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1142 0 R -/Annots [ 1137 0 R ] +/Parent 1185 0 R +/Annots [ 1191 0 R ] >> endobj -1137 0 obj << +1191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.152 483.284 328.21 494.409] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1141 0 obj << -/D [1139 0 R /XYZ 99.895 740.998 null] +1195 0 obj << +/D [1193 0 R /XYZ 99.895 740.998 null] >> endobj -238 0 obj << -/D [1139 0 R /XYZ 99.895 697.37 null] +278 0 obj << +/D [1193 0 R /XYZ 99.895 697.37 null] >> endobj -1138 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1192 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1145 0 obj << +1198 0 obj << /Length 3438 >> stream @@ -12317,29 +12781,29 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.378 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.378 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.956 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.485 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.034 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detected.)]TJ 0 g 0 G - 141.967 -226.691 Td [(74)]TJ + 141.967 -226.691 Td [(76)]TJ 0 g 0 G ET endstream endobj -1144 0 obj << +1197 0 obj << /Type /Page -/Contents 1145 0 R -/Resources 1143 0 R +/Contents 1198 0 R +/Resources 1196 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1142 0 R +/Parent 1185 0 R >> endobj -1146 0 obj << -/D [1144 0 R /XYZ 150.705 740.998 null] +1199 0 obj << +/D [1197 0 R /XYZ 150.705 740.998 null] >> endobj -242 0 obj << -/D [1144 0 R /XYZ 150.705 697.37 null] +282 0 obj << +/D [1197 0 R /XYZ 150.705 697.37 null] >> endobj -1143 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R /F11 599 0 R /F10 618 0 R >> +1196 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R /F11 649 0 R /F10 666 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1150 0 obj << +1203 0 obj << /Length 6540 >> stream @@ -12435,37 +12899,37 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.956 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ/F16 11.9552 Tf -24.907 -21.202 Td [(Notes)]TJ 0 g 0 G -/F8 9.9626 Tf 166.875 -29.887 Td [(75)]TJ +/F8 9.9626 Tf 166.875 -29.887 Td [(77)]TJ 0 g 0 G ET endstream endobj -1149 0 obj << +1202 0 obj << /Type /Page -/Contents 1150 0 R -/Resources 1148 0 R +/Contents 1203 0 R +/Resources 1201 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1142 0 R -/Annots [ 1147 0 R ] +/Parent 1185 0 R +/Annots [ 1200 0 R ] >> endobj -1147 0 obj << +1200 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 484.86 361.779 495.985] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1151 0 obj << -/D [1149 0 R /XYZ 99.895 740.998 null] +1204 0 obj << +/D [1202 0 R /XYZ 99.895 740.998 null] >> endobj -246 0 obj << -/D [1149 0 R /XYZ 99.895 697.37 null] +286 0 obj << +/D [1202 0 R /XYZ 99.895 697.37 null] >> endobj -1148 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +1201 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1154 0 obj << +1207 0 obj << /Length 705 >> stream @@ -12481,32 +12945,32 @@ BT 0 g 0 G [-500(The)-476(default)]TJ/F30 9.9626 Tf 69.543 0 Td [(I)]TJ/F8 9.9626 Tf 5.23 0 Td [(gnore)-476(means)-477(that)-476(the)-476(negativ)28(e)-477(out)1(put)-477(is)-476(the)-476(only)-476(action)]TJ -62.043 -11.955 Td [(tak)28(en)-334(on)-333(an)-333(out-of-range)-333(input.)]TJ 0 g 0 G - 141.968 -571.855 Td [(76)]TJ + 141.968 -571.855 Td [(78)]TJ 0 g 0 G ET endstream endobj -1153 0 obj << +1206 0 obj << /Type /Page -/Contents 1154 0 R -/Resources 1152 0 R +/Contents 1207 0 R +/Resources 1205 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1142 0 R +/Parent 1185 0 R >> endobj -1155 0 obj << -/D [1153 0 R /XYZ 150.705 740.998 null] +1208 0 obj << +/D [1206 0 R /XYZ 150.705 740.998 null] >> endobj -1156 0 obj << -/D [1153 0 R /XYZ 150.705 716.092 null] +1209 0 obj << +/D [1206 0 R /XYZ 150.705 716.092 null] >> endobj -1157 0 obj << -/D [1153 0 R /XYZ 150.705 688.251 null] +1210 0 obj << +/D [1206 0 R /XYZ 150.705 688.251 null] >> endobj -1152 0 obj << -/Font << /F8 438 0 R /F30 616 0 R >> +1205 0 obj << +/Font << /F8 478 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1161 0 obj << +1214 0 obj << /Length 5721 >> stream @@ -12598,37 +13062,37 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 141.968 -115.11 Td [(77)]TJ + 141.968 -115.11 Td [(79)]TJ 0 g 0 G ET endstream endobj -1160 0 obj << +1213 0 obj << /Type /Page -/Contents 1161 0 R -/Resources 1159 0 R +/Contents 1214 0 R +/Resources 1212 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1142 0 R -/Annots [ 1158 0 R ] +/Parent 1216 0 R +/Annots [ 1211 0 R ] >> endobj -1158 0 obj << +1211 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 483.284 361.779 494.409] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1162 0 obj << -/D [1160 0 R /XYZ 99.895 740.998 null] +1215 0 obj << +/D [1213 0 R /XYZ 99.895 740.998 null] >> endobj -250 0 obj << -/D [1160 0 R /XYZ 99.895 697.37 null] +290 0 obj << +/D [1213 0 R /XYZ 99.895 697.37 null] >> endobj -1159 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +1212 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1166 0 obj << +1220 0 obj << /Length 3272 >> stream @@ -12705,40 +13169,40 @@ BT 0 g 0 G [-500(This)-300(routine)-300(r)1(e)-1(tu)1(rns)-300(a)]TJ/F30 9.9626 Tf 111.214 0 Td [(.true.)]TJ/F8 9.9626 Tf 34.368 0 Td [(v)56(alue)-300(for)-300(an)-300(index)-299(that)-300(is)-300(strictly)-300(o)28(wned)-300(b)28(y)]TJ -132.852 -11.955 Td [(the)-333(curren)27(t)-333(pro)-28(cess,)-333(excluding)-333(the)-334(halo)-333(indices)]TJ 0 g 0 G - 141.968 -264.549 Td [(78)]TJ + 141.968 -264.549 Td [(80)]TJ 0 g 0 G ET endstream endobj -1165 0 obj << +1219 0 obj << /Type /Page -/Contents 1166 0 R -/Resources 1164 0 R +/Contents 1220 0 R +/Resources 1218 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1142 0 R -/Annots [ 1163 0 R ] +/Parent 1216 0 R +/Annots [ 1217 0 R ] >> endobj -1163 0 obj << +1217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 495.239 412.588 506.364] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1167 0 obj << -/D [1165 0 R /XYZ 150.705 740.998 null] +1221 0 obj << +/D [1219 0 R /XYZ 150.705 740.998 null] >> endobj -254 0 obj << -/D [1165 0 R /XYZ 150.705 697.37 null] +294 0 obj << +/D [1219 0 R /XYZ 150.705 697.37 null] >> endobj -1168 0 obj << -/D [1165 0 R /XYZ 150.705 382.883 null] +1222 0 obj << +/D [1219 0 R /XYZ 150.705 382.883 null] >> endobj -1164 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +1218 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1172 0 obj << +1226 0 obj << /Length 4972 >> stream @@ -12823,40 +13287,40 @@ BT 0 g 0 G [-500(This)-475(routine)-474(returns)-475(a)]TJ/F30 9.9626 Tf 118.186 0 Td [(.true.)]TJ/F8 9.9626 Tf 36.111 0 Td [(v)56(alue)-475(for)-475(those)-475(indices)-474(that)-475(are)-475(strictly)]TJ -141.567 -11.955 Td [(o)28(wned)-334(b)28(y)-333(the)-333(curren)27(t)-333(pro)-28(cess,)-333(excluding)-333(the)-334(halo)-333(indices)]TJ 0 g 0 G - 141.968 -141.013 Td [(79)]TJ + 141.968 -141.013 Td [(81)]TJ 0 g 0 G ET endstream endobj -1171 0 obj << +1225 0 obj << /Type /Page -/Contents 1172 0 R -/Resources 1170 0 R +/Contents 1226 0 R +/Resources 1224 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1175 0 R -/Annots [ 1169 0 R ] +/Parent 1216 0 R +/Annots [ 1223 0 R ] >> endobj -1169 0 obj << +1223 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 495.239 361.779 506.364] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1173 0 obj << -/D [1171 0 R /XYZ 99.895 740.998 null] +1227 0 obj << +/D [1225 0 R /XYZ 99.895 740.998 null] >> endobj -258 0 obj << -/D [1171 0 R /XYZ 99.895 697.37 null] +298 0 obj << +/D [1225 0 R /XYZ 99.895 697.37 null] >> endobj -1174 0 obj << -/D [1171 0 R /XYZ 99.895 259.346 null] +1228 0 obj << +/D [1225 0 R /XYZ 99.895 259.346 null] >> endobj -1170 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +1224 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1179 0 obj << +1232 0 obj << /Length 3240 >> stream @@ -12933,40 +13397,40 @@ BT 0 g 0 G [-500(This)-239(routine)-239(returns)-239(a)]TJ/F30 9.9626 Tf 108.787 0 Td [(.true.)]TJ/F8 9.9626 Tf 33.762 0 Td [(v)56(alue)-239(for)-239(an)-239(index)-239(that)-239(is)-239(lo)-27(cal)-239(to)-239(the)-239(curren)28(t)]TJ -129.819 -11.955 Td [(pro)-28(cess,)-333(including)-333(the)-334(halo)-333(indices)]TJ 0 g 0 G - 141.968 -264.549 Td [(80)]TJ + 141.968 -264.549 Td [(82)]TJ 0 g 0 G ET endstream endobj -1178 0 obj << +1231 0 obj << /Type /Page -/Contents 1179 0 R -/Resources 1177 0 R +/Contents 1232 0 R +/Resources 1230 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1175 0 R -/Annots [ 1176 0 R ] +/Parent 1216 0 R +/Annots [ 1229 0 R ] >> endobj -1176 0 obj << +1229 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 495.239 412.588 506.364] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1180 0 obj << -/D [1178 0 R /XYZ 150.705 740.998 null] +1233 0 obj << +/D [1231 0 R /XYZ 150.705 740.998 null] >> endobj -262 0 obj << -/D [1178 0 R /XYZ 150.705 697.37 null] +302 0 obj << +/D [1231 0 R /XYZ 150.705 697.37 null] >> endobj -1181 0 obj << -/D [1178 0 R /XYZ 150.705 382.883 null] +1234 0 obj << +/D [1231 0 R /XYZ 150.705 382.883 null] >> endobj -1177 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +1230 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1185 0 obj << +1238 0 obj << /Length 4956 >> stream @@ -13051,40 +13515,40 @@ BT 0 g 0 G [-500(This)-308(routine)-309(retur)1(ns)-309(a)]TJ/F30 9.9626 Tf 111.554 0 Td [(.true.)]TJ/F8 9.9626 Tf 34.454 0 Td [(v)56(alue)-309(for)-308(those)-308(indices)-309(that)-308(are)-308(lo)-28(cal)-308(to)-309(the)]TJ -133.278 -11.955 Td [(curren)28(t)-333(pro)-28(cess,)-334(including)-333(the)-333(halo)-333(indices.)]TJ 0 g 0 G - 141.968 -141.013 Td [(81)]TJ + 141.968 -141.013 Td [(83)]TJ 0 g 0 G ET endstream endobj -1184 0 obj << +1237 0 obj << /Type /Page -/Contents 1185 0 R -/Resources 1183 0 R +/Contents 1238 0 R +/Resources 1236 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1175 0 R -/Annots [ 1182 0 R ] +/Parent 1216 0 R +/Annots [ 1235 0 R ] >> endobj -1182 0 obj << +1235 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 495.239 361.779 506.364] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1186 0 obj << -/D [1184 0 R /XYZ 99.895 740.998 null] +1239 0 obj << +/D [1237 0 R /XYZ 99.895 740.998 null] >> endobj -266 0 obj << -/D [1184 0 R /XYZ 99.895 697.37 null] +306 0 obj << +/D [1237 0 R /XYZ 99.895 697.37 null] >> endobj -1187 0 obj << -/D [1184 0 R /XYZ 99.895 259.346 null] +1240 0 obj << +/D [1237 0 R /XYZ 99.895 259.346 null] >> endobj -1183 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +1236 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1191 0 obj << +1244 0 obj << /Length 3804 >> stream @@ -13158,43 +13622,43 @@ BT 0 g 0 G [-500(Otherwise)-288(the)-289(size)-288(of)]TJ/F30 9.9626 Tf 105.44 0 Td [(bndel)]TJ/F8 9.9626 Tf 29.024 0 Td [(will)-288(b)-28(e)-288(exactly)-288(e)-1(qu)1(al)-289(to)-288(the)-288(n)28(um)27(b)-27(er)-289(of)-288(b)-28(oun)1(d-)]TJ -121.734 -11.956 Td [(ary)-333(elemen)27(ts.)]TJ 0 g 0 G - 141.968 -208.758 Td [(82)]TJ + 141.968 -208.758 Td [(84)]TJ 0 g 0 G ET endstream endobj -1190 0 obj << +1243 0 obj << /Type /Page -/Contents 1191 0 R -/Resources 1189 0 R +/Contents 1244 0 R +/Resources 1242 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1175 0 R -/Annots [ 1188 0 R ] +/Parent 1216 0 R +/Annots [ 1241 0 R ] >> endobj -1188 0 obj << +1241 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 574.94 412.588 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1192 0 obj << -/D [1190 0 R /XYZ 150.705 740.998 null] +1245 0 obj << +/D [1243 0 R /XYZ 150.705 740.998 null] >> endobj -270 0 obj << -/D [1190 0 R /XYZ 150.705 697.37 null] +310 0 obj << +/D [1243 0 R /XYZ 150.705 697.37 null] >> endobj -1193 0 obj << -/D [1190 0 R /XYZ 150.705 370.928 null] +1246 0 obj << +/D [1243 0 R /XYZ 150.705 370.928 null] >> endobj -1194 0 obj << -/D [1190 0 R /XYZ 150.705 327.092 null] +1247 0 obj << +/D [1243 0 R /XYZ 150.705 327.092 null] >> endobj -1189 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1242 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1198 0 obj << +1251 0 obj << /Length 3654 >> stream @@ -13268,43 +13732,43 @@ BT 0 g 0 G [-500(Otherwise)-284(the)-284(size)-283(of)]TJ/F30 9.9626 Tf 105.261 0 Td [(ovrel)]TJ/F8 9.9626 Tf 28.979 0 Td [(will)-284(b)-27(e)-284(exactly)-284(equal)-284(to)-284(th)1(e)-284(n)28(um)27(b)-27(er)-284(of)-284(o)28(v)28(erlap)]TJ -121.51 -11.955 Td [(elemen)28(ts.)]TJ 0 g 0 G - 141.968 -220.714 Td [(83)]TJ + 141.968 -220.714 Td [(85)]TJ 0 g 0 G ET endstream endobj -1197 0 obj << +1250 0 obj << /Type /Page -/Contents 1198 0 R -/Resources 1196 0 R +/Contents 1251 0 R +/Resources 1249 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1175 0 R -/Annots [ 1195 0 R ] +/Parent 1255 0 R +/Annots [ 1248 0 R ] >> endobj -1195 0 obj << +1248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 574.94 361.779 586.065] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1199 0 obj << -/D [1197 0 R /XYZ 99.895 740.998 null] +1252 0 obj << +/D [1250 0 R /XYZ 99.895 740.998 null] >> endobj -274 0 obj << -/D [1197 0 R /XYZ 99.895 697.37 null] +314 0 obj << +/D [1250 0 R /XYZ 99.895 697.37 null] >> endobj -1200 0 obj << -/D [1197 0 R /XYZ 99.895 370.928 null] +1253 0 obj << +/D [1250 0 R /XYZ 99.895 370.928 null] >> endobj -1201 0 obj << -/D [1197 0 R /XYZ 99.895 339.047 null] +1254 0 obj << +/D [1250 0 R /XYZ 99.895 339.047 null] >> endobj -1196 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1249 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1205 0 obj << +1259 0 obj << /Length 5790 >> stream @@ -13386,37 +13850,37 @@ BT 0 g 0 G /F8 9.9626 Tf 13.733 0 Td [(the)-333(ro)27(w)-333(indices.)]TJ 11.173 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 27.951 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf 23.073 0 Td [(.)]TJ -51.024 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 25.184 0 Td [(required)]TJ/F8 9.9626 Tf 41.898 0 Td [(.)]TJ -67.082 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(inout)]TJ/F8 9.9626 Tf 26.096 0 Td [(.)]TJ -59.582 -11.956 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(in)28(teger)-333(arra)27(y)-333(with)-333(the)]TJ/F30 9.9626 Tf 170.611 0 Td [(ALLOCATABLE)]TJ/F8 9.9626 Tf 60.854 0 Td [(attribute.)]TJ 0 g 0 G - -89.497 -29.887 Td [(84)]TJ + -89.497 -29.887 Td [(86)]TJ 0 g 0 G ET endstream endobj -1204 0 obj << +1258 0 obj << /Type /Page -/Contents 1205 0 R -/Resources 1203 0 R +/Contents 1259 0 R +/Resources 1257 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1175 0 R -/Annots [ 1202 0 R ] +/Parent 1255 0 R +/Annots [ 1256 0 R ] >> endobj -1202 0 obj << +1256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 492.904 417.818 504.029] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1206 0 obj << -/D [1204 0 R /XYZ 150.705 740.998 null] +1260 0 obj << +/D [1258 0 R /XYZ 150.705 740.998 null] >> endobj -278 0 obj << -/D [1204 0 R /XYZ 150.705 696.587 null] +318 0 obj << +/D [1258 0 R /XYZ 150.705 696.587 null] >> endobj -1203 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +1257 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1209 0 obj << +1263 0 obj << /Length 3701 >> stream @@ -13448,35 +13912,35 @@ BT 0 g 0 G [-500(The)-253(ro)28(w)-252(and)-253(column)-253(ind)1(ic)-1(es)-252(are)-253(returned)-252(in)-253(the)-253(lo)-27(cal)-253(n)28(um)28(b)-28(ering)-253(sc)28(heme;)-280(if)]TJ 12.73 -11.955 Td [(the)-222(global)-222(n)27(um)28(b)-28(erin)1(g)-223(is)-222(desired,)-244(the)-223(user)-222(ma)28(y)-222(emplo)27(y)-222(the)]TJ/F30 9.9626 Tf 243.172 0 Td [(psb_loc_to_glob)]TJ/F8 9.9626 Tf -243.172 -11.955 Td [(routine)-333(on)-334(th)1(e)-334(output.)]TJ 0 g 0 G - 141.968 -290.909 Td [(85)]TJ + 141.968 -290.909 Td [(87)]TJ 0 g 0 G ET endstream endobj -1208 0 obj << +1262 0 obj << /Type /Page -/Contents 1209 0 R -/Resources 1207 0 R +/Contents 1263 0 R +/Resources 1261 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1214 0 R +/Parent 1255 0 R >> endobj -1210 0 obj << -/D [1208 0 R /XYZ 99.895 740.998 null] +1264 0 obj << +/D [1262 0 R /XYZ 99.895 740.998 null] >> endobj -1211 0 obj << -/D [1208 0 R /XYZ 99.895 496.913 null] +1265 0 obj << +/D [1262 0 R /XYZ 99.895 496.913 null] >> endobj -1212 0 obj << -/D [1208 0 R /XYZ 99.895 439.185 null] +1266 0 obj << +/D [1262 0 R /XYZ 99.895 439.185 null] >> endobj -1213 0 obj << -/D [1208 0 R /XYZ 99.895 418.983 null] +1267 0 obj << +/D [1262 0 R /XYZ 99.895 418.983 null] >> endobj -1207 0 obj << -/Font << /F27 437 0 R /F8 438 0 R /F30 616 0 R /F16 435 0 R /F11 599 0 R >> +1261 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F30 664 0 R /F16 475 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1220 0 obj << +1273 0 obj << /Length 4125 >> stream @@ -13582,51 +14046,51 @@ BT 0 g 0 G /F8 9.9626 Tf 78.386 0 Td [(The)-332(memory)-331(o)-28(ccupation)-332(of)-331(the)-332(ob)-55(jec)-1(t)-331(sp)-28(eci\014ed)-332(in)-331(the)-332(calling)]TJ -53.48 -11.955 Td [(sequence,)-333(in)-334(b)28(ytes.)]TJ 0 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(Returned)-333(as:)-445(an)]TJ/F30 9.9626 Tf 73.835 0 Td [(integer\050psb_long_int_k_\051)]TJ/F8 9.9626 Tf 128.849 0 Td [(n)28(um)28(b)-28(er.)]TJ 0 g 0 G - -60.716 -242.632 Td [(86)]TJ + -60.716 -242.632 Td [(88)]TJ 0 g 0 G ET endstream endobj -1219 0 obj << +1272 0 obj << /Type /Page -/Contents 1220 0 R -/Resources 1218 0 R +/Contents 1273 0 R +/Resources 1271 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1214 0 R -/Annots [ 1215 0 R 1216 0 R 1217 0 R ] +/Parent 1255 0 R +/Annots [ 1268 0 R 1269 0 R 1270 0 R ] >> endobj -1215 0 obj << +1268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 529.112 417.818 540.237] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1216 0 obj << +1269 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 461.366 412.588 472.491] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1217 0 obj << +1270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.153 405.575 439.211 416.7] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1221 0 obj << -/D [1219 0 R /XYZ 150.705 740.998 null] +1274 0 obj << +/D [1272 0 R /XYZ 150.705 740.998 null] >> endobj -282 0 obj << -/D [1219 0 R /XYZ 150.705 697.37 null] +322 0 obj << +/D [1272 0 R /XYZ 150.705 697.37 null] >> endobj -1218 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F30 616 0 R /F27 437 0 R /F11 599 0 R >> +1271 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F30 664 0 R /F27 477 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1224 0 obj << +1277 0 obj << /Length 5754 >> stream @@ -13701,29 +14165,29 @@ BT 0 g 0 G /F8 9.9626 Tf 14.211 0 Td [(A)-333(v)27(ector)-333(of)-333(indices.)]TJ 10.696 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(Optional)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(An)-332(in)27(teger)-332(arra)28(y)-333(of)-332(rank)-333(1,)-332(whose)-333(en)28(tries)-332(are)-333(mo)28(v)28(ed)-333(to)-332(the)-333(same)-332(p)-28(osition)]TJ 0 -11.955 Td [(as)-333(the)-334(corresp)-28(on)1(ding)-334(en)28(tries)-333(in)]TJ/F11 9.9626 Tf 136.959 0 Td [(x)]TJ/F8 9.9626 Tf 5.694 0 Td [(.)]TJ 0 g 0 G - -0.685 -43.727 Td [(87)]TJ + -0.685 -43.727 Td [(89)]TJ 0 g 0 G ET endstream endobj -1223 0 obj << +1276 0 obj << /Type /Page -/Contents 1224 0 R -/Resources 1222 0 R +/Contents 1277 0 R +/Resources 1275 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1214 0 R +/Parent 1255 0 R >> endobj -1225 0 obj << -/D [1223 0 R /XYZ 99.895 740.998 null] +1278 0 obj << +/D [1276 0 R /XYZ 99.895 740.998 null] >> endobj -286 0 obj << -/D [1223 0 R /XYZ 99.895 696.813 null] +326 0 obj << +/D [1276 0 R /XYZ 99.895 696.813 null] >> endobj -1222 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F11 599 0 R /F27 437 0 R >> +1275 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F11 649 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1228 0 obj << +1281 0 obj << /Length 7020 >> stream @@ -13824,53 +14288,53 @@ BT 0 g 0 G [-500(The)-358(merge-sort)-358(algorithm)-357(is)-358(implemen)28(ted)-358(to)-358(tak)28(e)-358(adv)56(an)28(tage)-358(of)-358(sub-)]TJ 17.158 -11.955 Td [(sequences)-401(that)-400(ma)28(y)-401(b)-28(e)-400(already)-401(in)-400(the)-401(desired)-400(ordering)-400(prior)-401(to)-400(the)]TJ 0 -11.956 Td [(subroutine)-246(call;)-275(this)-246(situation)-246(is)-247(relativ)28(ely)-246(common)-246(when)-246(dealing)-246(with)]TJ 0 -11.955 Td [(groups)-258(of)-257(indices)-258(of)-258(sparse)-258(matrix)-257(en)28(tries,)-273(th)28(us)-258(merge-sort)-258(is)-258(often)-257(the)]TJ 0 -11.955 Td [(preferred)-318(c)27(hoice)-318(when)-319(a)-318(sorting)-319(is)-318(needed)-319(b)28(y)-319(oth)1(e)-1(r)-318(routines)-318(in)-319(the)-318(li-)]TJ 0 -11.955 Td [(brary)83(.)]TJ 0 g 0 G - 120.05 -193.275 Td [(88)]TJ + 120.05 -193.275 Td [(90)]TJ 0 g 0 G ET endstream endobj -1227 0 obj << +1280 0 obj << /Type /Page -/Contents 1228 0 R -/Resources 1226 0 R +/Contents 1281 0 R +/Resources 1279 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1214 0 R +/Parent 1255 0 R >> endobj -1229 0 obj << -/D [1227 0 R /XYZ 150.705 740.998 null] +1282 0 obj << +/D [1280 0 R /XYZ 150.705 740.998 null] >> endobj -1230 0 obj << -/D [1227 0 R /XYZ 150.705 702.144 null] +1283 0 obj << +/D [1280 0 R /XYZ 150.705 702.144 null] >> endobj -1231 0 obj << -/D [1227 0 R /XYZ 150.705 668.326 null] +1284 0 obj << +/D [1280 0 R /XYZ 150.705 668.326 null] >> endobj -1232 0 obj << -/D [1227 0 R /XYZ 150.705 624.491 null] +1285 0 obj << +/D [1280 0 R /XYZ 150.705 624.491 null] >> endobj -1233 0 obj << -/D [1227 0 R /XYZ 150.705 556.745 null] +1286 0 obj << +/D [1280 0 R /XYZ 150.705 556.745 null] >> endobj -1234 0 obj << -/D [1227 0 R /XYZ 150.705 500.954 null] +1287 0 obj << +/D [1280 0 R /XYZ 150.705 500.954 null] >> endobj -1235 0 obj << -/D [1227 0 R /XYZ 150.705 468.52 null] +1288 0 obj << +/D [1280 0 R /XYZ 150.705 468.52 null] >> endobj -1236 0 obj << -/D [1227 0 R /XYZ 150.705 425.182 null] +1289 0 obj << +/D [1280 0 R /XYZ 150.705 425.182 null] >> endobj -1237 0 obj << -/D [1227 0 R /XYZ 150.705 383.395 null] +1290 0 obj << +/D [1280 0 R /XYZ 150.705 383.395 null] >> endobj -1238 0 obj << -/D [1227 0 R /XYZ 150.705 355.499 null] +1291 0 obj << +/D [1280 0 R /XYZ 150.705 355.499 null] >> endobj -1226 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F7 617 0 R >> +1279 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F7 665 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1241 0 obj << +1294 0 obj << /Length 181 >> stream @@ -13879,29 +14343,29 @@ stream BT /F16 14.3462 Tf 99.895 706.129 Td [(7)-1125(P)31(arallel)-375(en)31(vironmen)32(t)-375(routines)]TJ 0 g 0 G -/F8 9.9626 Tf 166.875 -615.691 Td [(89)]TJ +/F8 9.9626 Tf 166.875 -615.691 Td [(91)]TJ 0 g 0 G ET endstream endobj -1240 0 obj << +1293 0 obj << /Type /Page -/Contents 1241 0 R -/Resources 1239 0 R +/Contents 1294 0 R +/Resources 1292 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1214 0 R +/Parent 1296 0 R >> endobj -1242 0 obj << -/D [1240 0 R /XYZ 99.895 740.998 null] +1295 0 obj << +/D [1293 0 R /XYZ 99.895 740.998 null] >> endobj -290 0 obj << -/D [1240 0 R /XYZ 99.895 716.092 null] +330 0 obj << +/D [1293 0 R /XYZ 99.895 716.092 null] >> endobj -1239 0 obj << -/Font << /F16 435 0 R /F8 438 0 R >> +1292 0 obj << +/Font << /F16 475 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1245 0 obj << +1299 0 obj << /Length 5573 >> stream @@ -13968,35 +14432,35 @@ BT 0 g 0 G [-500(It)-262(is)-262(an)-262(error)-262(to)-262(sp)-28(ecify)-262(a)-262(v)56(alue)-262(for)]TJ/F11 9.9626 Tf 159.87 0 Td [(np)]TJ/F8 9.9626 Tf 13.602 0 Td [(greater)-262(than)-262(the)-262(n)28(um)28(b)-28(er)-262(of)-262(pro)-28(cesses)]TJ -160.742 -11.955 Td [(a)28(v)55(ailable)-333(in)-333(the)-334(und)1(e)-1(r)1(lying)-334(base)-333(parallel)-333(en)27(viron)1(m)-1(en)28(t.)]TJ 0 g 0 G - 141.968 -97.177 Td [(90)]TJ + 141.968 -97.177 Td [(92)]TJ 0 g 0 G ET endstream endobj -1244 0 obj << +1298 0 obj << /Type /Page -/Contents 1245 0 R -/Resources 1243 0 R +/Contents 1299 0 R +/Resources 1297 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1214 0 R +/Parent 1296 0 R >> endobj -1246 0 obj << -/D [1244 0 R /XYZ 150.705 740.998 null] +1300 0 obj << +/D [1298 0 R /XYZ 150.705 740.998 null] >> endobj -294 0 obj << -/D [1244 0 R /XYZ 150.705 697.37 null] +334 0 obj << +/D [1298 0 R /XYZ 150.705 697.37 null] >> endobj -1247 0 obj << -/D [1244 0 R /XYZ 150.705 235.436 null] +1301 0 obj << +/D [1298 0 R /XYZ 150.705 235.436 null] >> endobj -1248 0 obj << -/D [1244 0 R /XYZ 150.705 213.573 null] +1302 0 obj << +/D [1298 0 R /XYZ 150.705 213.573 null] >> endobj -1243 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F11 599 0 R /F14 619 0 R >> +1297 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F11 649 0 R /F14 667 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1251 0 obj << +1305 0 obj << /Length 4646 >> stream @@ -14045,35 +14509,35 @@ BT 0 g 0 G [-500(If)-432(the)-433(user)-432(has)-433(requested)-432(on)]TJ/F30 9.9626 Tf 143.13 0 Td [(psb_init)]TJ/F8 9.9626 Tf 46.151 0 Td [(a)-432(n)27(um)28(b)-28(er)-432(of)-432(pro)-28(cesses)-433(less)-432(than)]TJ -176.551 -11.955 Td [(the)-417(total)-416(a)28(v)55(ailable)-416(in)-417(the)-416(parallel)-417(execution)-416(en)28(vironmen)28(t,)-438(the)-416(remaining)]TJ 0 -11.955 Td [(pro)-28(cesses)-359(will)-359(ha)28(v)28(e)-359(on)-359(return)]TJ/F11 9.9626 Tf 130.486 0 Td [(iam)]TJ/F8 9.9626 Tf 20.639 0 Td [(=)]TJ/F14 9.9626 Tf 10.941 0 Td [(\000)]TJ/F8 9.9626 Tf 7.749 0 Td [(1;)-372(the)-359(only)-359(call)-359(in)28(v)28(olving)]TJ/F30 9.9626 Tf 112.377 0 Td [(icontxt)]TJ/F8 9.9626 Tf -282.192 -11.956 Td [(that)-333(an)28(y)-334(suc)28(h)-333(pro)-28(cess)-334(ma)28(y)-333(execute)-334(is)-333(to)]TJ/F30 9.9626 Tf 177.086 0 Td [(psb_exit)]TJ/F8 9.9626 Tf 41.843 0 Td [(.)]TJ 0 g 0 G - -76.961 -174.885 Td [(91)]TJ + -76.961 -174.885 Td [(93)]TJ 0 g 0 G ET endstream endobj -1250 0 obj << +1304 0 obj << /Type /Page -/Contents 1251 0 R -/Resources 1249 0 R +/Contents 1305 0 R +/Resources 1303 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1255 0 R +/Parent 1296 0 R >> endobj -1252 0 obj << -/D [1250 0 R /XYZ 99.895 740.998 null] +1306 0 obj << +/D [1304 0 R /XYZ 99.895 740.998 null] >> endobj -298 0 obj << -/D [1250 0 R /XYZ 99.895 685.747 null] +338 0 obj << +/D [1304 0 R /XYZ 99.895 685.747 null] >> endobj -1253 0 obj << -/D [1250 0 R /XYZ 99.895 349.01 null] +1307 0 obj << +/D [1304 0 R /XYZ 99.895 349.01 null] >> endobj -1254 0 obj << -/D [1250 0 R /XYZ 99.895 315.192 null] +1308 0 obj << +/D [1304 0 R /XYZ 99.895 315.192 null] >> endobj -1249 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F14 619 0 R /F11 599 0 R >> +1303 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F14 667 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1258 0 obj << +1311 0 obj << /Length 4354 >> stream @@ -14119,38 +14583,38 @@ BT 0 g 0 G [-500(If)-391(the)-390(user)-391(whishes)-391(to)-390(use)-391(m)28(ultiple)-391(comm)28(unication)-391(con)28(texts)-391(in)-390(the)-391(same)]TJ 12.73 -11.955 Td [(program,)-485(or)-455(to)-455(en)28(ter)-455(and)-454(exit)-455(m)27(u)1(ltiple)-455(times)-455(in)28(to)-455(the)-455(parallel)-455(en)28(viron-)]TJ 0 -11.955 Td [(men)28(t,)-494(this)-462(routine)-462(ma)28(y)-462(b)-28(e)-462(called)-462(to)-462(selectiv)28(ely)-462(close)-462(the)-462(con)27(texts)-462(with)]TJ/F30 9.9626 Tf 0 -11.955 Td [(close=.false.)]TJ/F8 9.9626 Tf 67.994 0 Td [(,)-244(while)-223(on)-222(the)-222(last)-222(call)-223(it)-222(should)-222(b)-28(e)-222(called)-222(with)]TJ/F30 9.9626 Tf 194.327 0 Td [(close=.true.)]TJ/F8 9.9626 Tf -262.321 -11.955 Td [(to)-333(sh)27(u)1(tdo)27(wn)-333(in)-333(a)-334(clean)-333(w)28(a)28(y)-334(the)-333(en)28(tire)-334(parallel)-333(en)28(vironmen)28(t.)]TJ 0 g 0 G - 141.967 -212.744 Td [(92)]TJ + 141.967 -212.744 Td [(94)]TJ 0 g 0 G ET endstream endobj -1257 0 obj << +1310 0 obj << /Type /Page -/Contents 1258 0 R -/Resources 1256 0 R +/Contents 1311 0 R +/Resources 1309 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1255 0 R +/Parent 1296 0 R >> endobj -1259 0 obj << -/D [1257 0 R /XYZ 150.705 740.998 null] +1312 0 obj << +/D [1310 0 R /XYZ 150.705 740.998 null] >> endobj -302 0 obj << -/D [1257 0 R /XYZ 150.705 697.37 null] +342 0 obj << +/D [1310 0 R /XYZ 150.705 697.37 null] >> endobj -1260 0 obj << -/D [1257 0 R /XYZ 150.705 442.659 null] +1313 0 obj << +/D [1310 0 R /XYZ 150.705 442.659 null] >> endobj -1261 0 obj << -/D [1257 0 R /XYZ 150.705 396.886 null] +1314 0 obj << +/D [1310 0 R /XYZ 150.705 396.886 null] >> endobj -1262 0 obj << -/D [1257 0 R /XYZ 150.705 365.005 null] +1315 0 obj << +/D [1310 0 R /XYZ 150.705 365.005 null] >> endobj -1256 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F11 599 0 R /F14 619 0 R >> +1309 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F11 649 0 R /F14 667 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1265 0 obj << +1318 0 obj << /Length 2160 >> stream @@ -14194,29 +14658,29 @@ BT 0 g 0 G /F8 9.9626 Tf 38.08 0 Td [(The)-377(MPI)-378(comm)28(unicator)-377(as)-1(so)-27(ciated)-378(with)-377(the)-378(PSBLAS)-377(virtual)-377(parallel)]TJ -13.173 -11.955 Td [(mac)28(hine.)]TJ 0 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(global)]TJ/F8 9.9626 Tf 29.756 0 Td [(.)]TJ -62.135 -11.956 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf 41.898 0 Td [(.)]TJ -71.509 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ 0 g 0 G - 91.933 -366.168 Td [(93)]TJ + 91.933 -366.168 Td [(95)]TJ 0 g 0 G ET endstream endobj -1264 0 obj << +1317 0 obj << /Type /Page -/Contents 1265 0 R -/Resources 1263 0 R +/Contents 1318 0 R +/Resources 1316 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1255 0 R +/Parent 1296 0 R >> endobj -1266 0 obj << -/D [1264 0 R /XYZ 99.895 740.998 null] +1319 0 obj << +/D [1317 0 R /XYZ 99.895 740.998 null] >> endobj -306 0 obj << -/D [1264 0 R /XYZ 99.895 697.37 null] +346 0 obj << +/D [1317 0 R /XYZ 99.895 697.37 null] >> endobj -1263 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R >> +1316 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1269 0 obj << +1322 0 obj << /Length 3024 >> stream @@ -14264,29 +14728,29 @@ BT 0 g 0 G /F8 9.9626 Tf 27.681 0 Td [(The)-333(MPI)-334(rank)-333(asso)-28(ciated)-333(with)-333(the)-334(PSBLAS)-333(pro)-28(cess)]TJ/F11 9.9626 Tf 230.248 0 Td [(id)]TJ/F8 9.9626 Tf 8.617 0 Td [(.)]TJ -241.639 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.378 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf 23.073 0 Td [(.)]TJ -55.451 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf 41.898 0 Td [(.)]TJ -71.509 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.485 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ 0 g 0 G - 91.933 -322.333 Td [(94)]TJ + 91.933 -322.333 Td [(96)]TJ 0 g 0 G ET endstream endobj -1268 0 obj << +1321 0 obj << /Type /Page -/Contents 1269 0 R -/Resources 1267 0 R +/Contents 1322 0 R +/Resources 1320 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1255 0 R +/Parent 1296 0 R >> endobj -1270 0 obj << -/D [1268 0 R /XYZ 150.705 740.998 null] +1323 0 obj << +/D [1321 0 R /XYZ 150.705 740.998 null] >> endobj -310 0 obj << -/D [1268 0 R /XYZ 150.705 697.37 null] +350 0 obj << +/D [1321 0 R /XYZ 150.705 697.37 null] >> endobj -1267 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F11 599 0 R /F27 437 0 R /F14 619 0 R >> +1320 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F11 649 0 R /F27 477 0 R /F14 667 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1273 0 obj << +1326 0 obj << /Length 1180 >> stream @@ -14316,29 +14780,29 @@ BT 0 g 0 G /F8 9.9626 Tf 78.387 0 Td [(the)-333(elapsed)-334(time)-333(in)-333(seconds.)]TJ -53.48 -11.955 Td [(Returned)-333(as:)-445(a)]TJ/F30 9.9626 Tf 68.3 0 Td [(real\050psb_dpk_\051)]TJ/F8 9.9626 Tf 76.545 0 Td [(v)56(ariable.)]TJ 0 g 0 G - -2.877 -491.698 Td [(95)]TJ + -2.877 -491.698 Td [(97)]TJ 0 g 0 G ET endstream endobj -1272 0 obj << +1325 0 obj << /Type /Page -/Contents 1273 0 R -/Resources 1271 0 R +/Contents 1326 0 R +/Resources 1324 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1255 0 R +/Parent 1328 0 R >> endobj -1274 0 obj << -/D [1272 0 R /XYZ 99.895 740.998 null] +1327 0 obj << +/D [1325 0 R /XYZ 99.895 740.998 null] >> endobj -314 0 obj << -/D [1272 0 R /XYZ 99.895 697.37 null] +354 0 obj << +/D [1325 0 R /XYZ 99.895 697.37 null] >> endobj -1271 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R >> +1324 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1277 0 obj << +1331 0 obj << /Length 1473 >> stream @@ -14368,29 +14832,29 @@ BT 0 g 0 G /F8 9.9626 Tf 39.989 0 Td [(the)-333(comm)27(unication)-333(con)28(text)-333(iden)27(tifyi)1(ng)-334(the)-333(virtual)-333(parallel)-334(mac)28(hine.)]TJ -15.082 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.378 0 Td [(global)]TJ/F8 9.9626 Tf 29.756 0 Td [(.)]TJ -62.134 -11.956 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf 41.898 0 Td [(.)]TJ -71.509 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.485 0 Td [(in)]TJ/F8 9.9626 Tf 9.548 0 Td [(.)]TJ -43.033 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-444(an)-334(in)28(teger)-333(v)55(ariable.)]TJ 0 g 0 G - 141.967 -455.832 Td [(96)]TJ + 141.967 -455.832 Td [(98)]TJ 0 g 0 G ET endstream endobj -1276 0 obj << +1330 0 obj << /Type /Page -/Contents 1277 0 R -/Resources 1275 0 R +/Contents 1331 0 R +/Resources 1329 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1255 0 R +/Parent 1328 0 R >> endobj -1278 0 obj << -/D [1276 0 R /XYZ 150.705 740.998 null] +1332 0 obj << +/D [1330 0 R /XYZ 150.705 740.998 null] >> endobj -318 0 obj << -/D [1276 0 R /XYZ 150.705 697.37 null] +358 0 obj << +/D [1330 0 R /XYZ 150.705 697.37 null] >> endobj -1275 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R >> +1329 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1281 0 obj << +1335 0 obj << /Length 1359 >> stream @@ -14420,30 +14884,30 @@ BT 0 g 0 G /F8 9.9626 Tf 39.989 0 Td [(the)-333(comm)27(unication)-333(con)28(text)-333(iden)27(tifyin)1(g)-334(the)-333(virtual)-333(parallel)-334(mac)28(hine.)]TJ -15.082 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(global)]TJ/F8 9.9626 Tf 29.756 0 Td [(.)]TJ -62.135 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf 41.898 0 Td [(.)]TJ -71.509 -11.956 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.547 0 Td [(.)]TJ -43.033 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(in)28(teger)-333(v)55(ariable.)]TJ 0 g 0 G - 141.968 -467.787 Td [(97)]TJ + 141.968 -467.787 Td [(99)]TJ 0 g 0 G ET endstream endobj -1280 0 obj << +1334 0 obj << /Type /Page -/Contents 1281 0 R -/Resources 1279 0 R +/Contents 1335 0 R +/Resources 1333 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1283 0 R +/Parent 1328 0 R >> endobj -1282 0 obj << -/D [1280 0 R /XYZ 99.895 740.998 null] +1336 0 obj << +/D [1334 0 R /XYZ 99.895 740.998 null] >> endobj -322 0 obj << -/D [1280 0 R /XYZ 99.895 697.37 null] +362 0 obj << +/D [1334 0 R /XYZ 99.895 697.37 null] >> endobj -1279 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R >> +1333 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1286 0 obj << -/Length 4532 +1339 0 obj << +/Length 4533 >> stream 0 g 0 G @@ -14487,29 +14951,29 @@ BT 0 g 0 G /F8 9.9626 Tf 21.371 0 Td [(On)-333(pro)-28(cesses)-334(other)-333(than)-333(ro)-28(ot,)-333(the)-334(dat)1(a)-334(to)-333(b)-28(e)-333(broadcast.)]TJ 3.536 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.378 0 Td [(global)]TJ/F8 9.9626 Tf 29.757 0 Td [(.)]TJ -62.135 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf 41.898 0 Td [(.)]TJ -71.509 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.485 0 Td [(inout)]TJ/F8 9.9626 Tf 26.097 0 Td [(.)]TJ -59.582 -11.955 Td [(Sp)-28(eci\014ed)-339(as:)-458(an)-339(in)28(tege)-1(r,)-341(real)-339(or)-340(complex)-340(v)56(ariable,)-342(whic)28(h)-339(m)-1(a)28(y)-339(b)-28(e)-340(a)-340(scalar,)]TJ 0 -11.955 Td [(or)-346(a)-346(rank)-347(1)-346(or)-346(2)-346(arra)28(y)83(,)-349(or)-347(a)-346(c)28(haracter)-346(or)-346(logical)-347(scalar.)-829(T)28(yp)-28(e,)-349(kind,)-350(rank)]TJ 0 -11.956 Td [(and)-333(size)-334(m)28(ust)-333(agree)-334(on)-333(all)-333(pro)-28(cesses.)]TJ 0 g 0 G - 141.967 -170.9 Td [(98)]TJ + 139.477 -170.9 Td [(100)]TJ 0 g 0 G ET endstream endobj -1285 0 obj << +1338 0 obj << /Type /Page -/Contents 1286 0 R -/Resources 1284 0 R +/Contents 1339 0 R +/Resources 1337 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1283 0 R +/Parent 1328 0 R >> endobj -1287 0 obj << -/D [1285 0 R /XYZ 150.705 740.998 null] +1340 0 obj << +/D [1338 0 R /XYZ 150.705 740.998 null] >> endobj -326 0 obj << -/D [1285 0 R /XYZ 150.705 697.37 null] +366 0 obj << +/D [1338 0 R /XYZ 150.705 697.37 null] >> endobj -1284 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F11 599 0 R /F14 619 0 R >> +1337 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F11 649 0 R /F14 667 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1290 0 obj << +1343 0 obj << /Length 5146 >> stream @@ -14562,35 +15026,35 @@ BT 0 g 0 G [-500(The)]TJ/F30 9.9626 Tf 33.209 0 Td [(dat)]TJ/F8 9.9626 Tf 19.012 0 Td [(argumen)28(t)-333(m)-1(a)28(y)-333(also)-333(b)-28(e)-334(a)-333(long)-333(in)28(teger)-334(scalar.)]TJ 0 g 0 G - 102.477 -109.132 Td [(99)]TJ + 99.986 -109.132 Td [(101)]TJ 0 g 0 G ET endstream endobj -1289 0 obj << +1342 0 obj << /Type /Page -/Contents 1290 0 R -/Resources 1288 0 R +/Contents 1343 0 R +/Resources 1341 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1283 0 R +/Parent 1328 0 R >> endobj -1291 0 obj << -/D [1289 0 R /XYZ 99.895 740.998 null] +1344 0 obj << +/D [1342 0 R /XYZ 99.895 740.998 null] >> endobj -330 0 obj << -/D [1289 0 R /XYZ 99.895 697.37 null] +370 0 obj << +/D [1342 0 R /XYZ 99.895 697.37 null] >> endobj -1292 0 obj << -/D [1289 0 R /XYZ 99.895 247.391 null] +1345 0 obj << +/D [1342 0 R /XYZ 99.895 247.391 null] >> endobj -1293 0 obj << -/D [1289 0 R /XYZ 99.895 213.573 null] +1346 0 obj << +/D [1342 0 R /XYZ 99.895 213.573 null] >> endobj -1288 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F14 619 0 R /F11 599 0 R >> +1341 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F14 667 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1296 0 obj << +1349 0 obj << /Length 5185 >> stream @@ -14643,35 +15107,35 @@ BT 0 g 0 G [-500(The)]TJ/F30 9.9626 Tf 33.208 0 Td [(dat)]TJ/F8 9.9626 Tf 19.012 0 Td [(argumen)28(t)-334(ma)28(y)-333(also)-334(b)-27(e)-334(a)-333(long)-333(in)28(teger)-334(scalar.)]TJ 0 g 0 G - 99.987 -109.132 Td [(100)]TJ + 99.987 -109.132 Td [(102)]TJ 0 g 0 G ET endstream endobj -1295 0 obj << +1348 0 obj << /Type /Page -/Contents 1296 0 R -/Resources 1294 0 R +/Contents 1349 0 R +/Resources 1347 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1283 0 R +/Parent 1328 0 R >> endobj -1297 0 obj << -/D [1295 0 R /XYZ 150.705 740.998 null] +1350 0 obj << +/D [1348 0 R /XYZ 150.705 740.998 null] >> endobj -334 0 obj << -/D [1295 0 R /XYZ 150.705 697.37 null] +374 0 obj << +/D [1348 0 R /XYZ 150.705 697.37 null] >> endobj -1298 0 obj << -/D [1295 0 R /XYZ 150.705 247.391 null] +1351 0 obj << +/D [1348 0 R /XYZ 150.705 247.391 null] >> endobj -1299 0 obj << -/D [1295 0 R /XYZ 150.705 213.573 null] +1352 0 obj << +/D [1348 0 R /XYZ 150.705 213.573 null] >> endobj -1294 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F14 619 0 R /F11 599 0 R >> +1347 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F14 667 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1302 0 obj << +1355 0 obj << /Length 5160 >> stream @@ -14724,35 +15188,35 @@ BT 0 g 0 G [-500(The)]TJ/F30 9.9626 Tf 33.209 0 Td [(dat)]TJ/F8 9.9626 Tf 19.012 0 Td [(argumen)28(t)-333(m)-1(a)28(y)-333(also)-333(b)-28(e)-334(a)-333(long)-333(in)28(teger)-334(scalar.)]TJ 0 g 0 G - 99.986 -109.132 Td [(101)]TJ + 99.986 -109.132 Td [(103)]TJ 0 g 0 G ET endstream endobj -1301 0 obj << +1354 0 obj << /Type /Page -/Contents 1302 0 R -/Resources 1300 0 R +/Contents 1355 0 R +/Resources 1353 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1283 0 R +/Parent 1359 0 R >> endobj -1303 0 obj << -/D [1301 0 R /XYZ 99.895 740.998 null] +1356 0 obj << +/D [1354 0 R /XYZ 99.895 740.998 null] >> endobj -338 0 obj << -/D [1301 0 R /XYZ 99.895 697.37 null] +378 0 obj << +/D [1354 0 R /XYZ 99.895 697.37 null] >> endobj -1304 0 obj << -/D [1301 0 R /XYZ 99.895 247.391 null] +1357 0 obj << +/D [1354 0 R /XYZ 99.895 247.391 null] >> endobj -1305 0 obj << -/D [1301 0 R /XYZ 99.895 213.573 null] +1358 0 obj << +/D [1354 0 R /XYZ 99.895 213.573 null] >> endobj -1300 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F14 619 0 R /F11 599 0 R >> +1353 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F14 667 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1308 0 obj << +1362 0 obj << /Length 5277 >> stream @@ -14805,35 +15269,35 @@ BT 0 g 0 G [-500(The)]TJ/F30 9.9626 Tf 33.208 0 Td [(dat)]TJ/F8 9.9626 Tf 19.012 0 Td [(argumen)28(t)-334(ma)28(y)-333(also)-334(b)-27(e)-334(a)-333(long)-333(in)28(teger)-334(scalar.)]TJ 0 g 0 G - 99.987 -97.177 Td [(102)]TJ + 99.987 -97.177 Td [(104)]TJ 0 g 0 G ET endstream endobj -1307 0 obj << +1361 0 obj << /Type /Page -/Contents 1308 0 R -/Resources 1306 0 R +/Contents 1362 0 R +/Resources 1360 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1283 0 R +/Parent 1359 0 R >> endobj -1309 0 obj << -/D [1307 0 R /XYZ 150.705 740.998 null] +1363 0 obj << +/D [1361 0 R /XYZ 150.705 740.998 null] >> endobj -342 0 obj << -/D [1307 0 R /XYZ 150.705 697.37 null] +382 0 obj << +/D [1361 0 R /XYZ 150.705 697.37 null] >> endobj -1310 0 obj << -/D [1307 0 R /XYZ 150.705 235.436 null] +1364 0 obj << +/D [1361 0 R /XYZ 150.705 235.436 null] >> endobj -1311 0 obj << -/D [1307 0 R /XYZ 150.705 201.618 null] +1365 0 obj << +/D [1361 0 R /XYZ 150.705 201.618 null] >> endobj -1306 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F14 619 0 R /F11 599 0 R >> +1360 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F14 667 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1314 0 obj << +1368 0 obj << /Length 5248 >> stream @@ -14886,35 +15350,35 @@ BT 0 g 0 G [-500(The)]TJ/F30 9.9626 Tf 33.209 0 Td [(dat)]TJ/F8 9.9626 Tf 19.012 0 Td [(argumen)28(t)-333(m)-1(a)28(y)-333(also)-333(b)-28(e)-334(a)-333(long)-333(in)28(teger)-334(scalar.)]TJ 0 g 0 G - 99.986 -97.177 Td [(103)]TJ + 99.986 -97.177 Td [(105)]TJ 0 g 0 G ET endstream endobj -1313 0 obj << +1367 0 obj << /Type /Page -/Contents 1314 0 R -/Resources 1312 0 R +/Contents 1368 0 R +/Resources 1366 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1318 0 R +/Parent 1359 0 R >> endobj -1315 0 obj << -/D [1313 0 R /XYZ 99.895 740.998 null] +1369 0 obj << +/D [1367 0 R /XYZ 99.895 740.998 null] >> endobj -346 0 obj << -/D [1313 0 R /XYZ 99.895 697.37 null] +386 0 obj << +/D [1367 0 R /XYZ 99.895 697.37 null] >> endobj -1316 0 obj << -/D [1313 0 R /XYZ 99.895 235.436 null] +1370 0 obj << +/D [1367 0 R /XYZ 99.895 235.436 null] >> endobj -1317 0 obj << -/D [1313 0 R /XYZ 99.895 201.618 null] +1371 0 obj << +/D [1367 0 R /XYZ 99.895 201.618 null] >> endobj -1312 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F14 619 0 R /F11 599 0 R >> +1366 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F14 667 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1321 0 obj << +1374 0 obj << /Length 5369 >> stream @@ -14964,32 +15428,32 @@ BT 0 g 0 G [-500(This)-402(subroutine)-403(implies)-402(a)-402(sync)27(hronization,)-419(but)-403(on)1(ly)-403(b)-28(et)28(w)28(een)-403(th)1(e)-403(calling)]TJ 12.73 -11.955 Td [(pro)-28(cess)-333(and)-333(the)-334(destination)-333(pro)-28(cess)]TJ/F11 9.9626 Tf 157.52 0 Td [(dst)]TJ/F8 9.9626 Tf 13.453 0 Td [(.)]TJ 0 g 0 G - -31.496 -105.147 Td [(104)]TJ + -31.496 -105.147 Td [(106)]TJ 0 g 0 G ET endstream endobj -1320 0 obj << +1373 0 obj << /Type /Page -/Contents 1321 0 R -/Resources 1319 0 R +/Contents 1374 0 R +/Resources 1372 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1318 0 R +/Parent 1359 0 R >> endobj -1322 0 obj << -/D [1320 0 R /XYZ 150.705 740.998 null] +1375 0 obj << +/D [1373 0 R /XYZ 150.705 740.998 null] >> endobj -350 0 obj << -/D [1320 0 R /XYZ 150.705 697.37 null] +390 0 obj << +/D [1373 0 R /XYZ 150.705 697.37 null] >> endobj -1323 0 obj << -/D [1320 0 R /XYZ 150.705 223.48 null] +1376 0 obj << +/D [1373 0 R /XYZ 150.705 223.48 null] >> endobj -1319 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F11 599 0 R /F14 619 0 R >> +1372 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F11 649 0 R /F14 667 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1326 0 obj << +1379 0 obj << /Length 5352 >> stream @@ -15038,33 +15502,33 @@ BT 0 g 0 G [-500(This)-402(subroutine)-403(implies)-402(a)-402(s)-1(yn)1(c)27(hronization,)-419(but)-403(onl)1(y)-403(b)-28(et)28(w)28(een)-403(the)-402(calling)]TJ 12.73 -11.955 Td [(pro)-28(cess)-333(and)-333(the)-334(source)-333(pro)-28(cess)]TJ/F11 9.9626 Tf 136.516 0 Td [(sr)-28(c)]TJ/F8 9.9626 Tf 13.753 0 Td [(.)]TJ 0 g 0 G - -10.792 -105.147 Td [(105)]TJ + -10.792 -105.147 Td [(107)]TJ 0 g 0 G ET endstream endobj -1325 0 obj << +1378 0 obj << /Type /Page -/Contents 1326 0 R -/Resources 1324 0 R +/Contents 1379 0 R +/Resources 1377 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1318 0 R +/Parent 1359 0 R >> endobj -1327 0 obj << -/D [1325 0 R /XYZ 99.895 740.998 null] +1380 0 obj << +/D [1378 0 R /XYZ 99.895 740.998 null] >> endobj -354 0 obj << -/D [1325 0 R /XYZ 99.895 697.37 null] +394 0 obj << +/D [1378 0 R /XYZ 99.895 697.37 null] >> endobj -1328 0 obj << -/D [1325 0 R /XYZ 99.895 223.48 null] +1381 0 obj << +/D [1378 0 R /XYZ 99.895 223.48 null] >> endobj -1324 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F8 438 0 R /F27 437 0 R /F11 599 0 R /F14 619 0 R >> +1377 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F8 478 0 R /F27 477 0 R /F11 649 0 R /F14 667 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1333 0 obj << -/Length 6406 +1386 0 obj << +/Length 6407 >> stream 0 g 0 G @@ -15072,53 +15536,53 @@ stream BT /F16 14.3462 Tf 150.705 706.129 Td [(8)-1125(Error)-375(handling)]TJ/F8 9.9626 Tf 0 -21.821 Td [(The)-446(PSBLAS)-446(library)-446(error)-446(handling)-446(p)-28(olicy)-446(has)-446(b)-28(een)-446(completely)-446(rewritten)-446(in)]TJ 0 -11.955 Td [(v)28(ersion)-448(2.0.)-788(The)-448(idea)-448(b)-27(ehind)-448(the)-448(design)-448(of)-447(this)-448(new)-448(error)-448(handling)-447(strategy)]TJ 0 -11.955 Td [(is)-491(to)-492(k)28(eep)-491(error)-491(mes)-1(sages)-491(on)-491(a)-492(stac)28(k)-491(allo)28(wing)-492(th)1(e)-492(user)-491(to)-491(trace)-492(bac)28(k)-491(up)-492(t)1(o)]TJ 0 -11.956 Td [(the)-401(p)-27(oin)28(t)-401(where)-401(the)-400(\014rst)-401(error)-400(mes)-1(sage)-400(has)-401(b)-28(een)-400(generated.)-646(Ev)27(ery)-400(routine)-401(in)]TJ 0 -11.955 Td [(the)-442(P)1(SBLAS-2.0)-442(library)-441(has,)-469(as)-442(l)1(as)-1(t)-441(non-optional)-441(argumen)27(t,)-468(an)-442(in)28(teger)]TJ/F30 9.9626 Tf 322.79 0 Td [(info)]TJ/F8 9.9626 Tf -322.79 -11.955 Td [(v)56(ariable;)-385(whenev)28(er,)-376(inside)-368(the)-367(routine,)-376(an)-368(error)-367(is)-368(detected,)-376(this)-367(v)55(ariab)1(le)-368(is)-368(set)]TJ 0 -11.955 Td [(to)-381(a)-380(v)55(alu)1(e)-381(corresp)-28(onding)-380(to)-381(a)-380(sp)-28(eci\014c)-381(error)-380(co)-28(de.)-586(Then)-381(this)-380(error)-381(co)-28(de)-380(is)-381(also)]TJ 0 -11.955 Td [(pushed)-245(on)-245(the)-245(error)-245(stac)28(k)-245(and)-245(then)-245(either)-245(con)27(tr)1(ol)-245(is)-246(retur)1(ned)-245(to)-246(th)1(e)-246(caller)-245(routin)1(e)]TJ 0 -11.955 Td [(or)-372(the)-371(e)-1(xecution)-371(is)-372(ab)-28(orted,)-381(dep)-28(ending)-372(on)-371(the)-372(users)-372(c)28(hoice.)-560(A)28(t)-372(the)-372(time)-371(when)]TJ 0 -11.956 Td [(the)-364(execution)-363(is)-364(ab)-28(orted,)-371(an)-364(error)-364(message)-363(is)-364(prin)28(ted)-364(on)-364(standard)-363(output)-364(with)]TJ 0 -11.955 Td [(a)-448(lev)28(el)-448(of)-447(v)27(erb)-27(osit)27(y)-447(than)-448(can)-448(b)-27(e)-448(c)28(hosen)-448(b)28(y)-448(the)-448(user.)-787(If)-448(the)-448(execution)-447(is)-448(not)]TJ 0 -11.955 Td [(ab)-28(orted,)-328(then,)-329(the)-328(caller)-327(routine)-328(c)28(hec)28(ks)-328(the)-327(v)55(alue)-327(returned)-328(in)-327(the)]TJ/F30 9.9626 Tf 285.459 0 Td [(info)]TJ/F8 9.9626 Tf 24.185 0 Td [(v)56(ariable)]TJ -309.644 -11.955 Td [(and,)-359(if)-354(not)-354(zero,)-359(an)-353(error)-354(condition)-354(is)-354(raised.)-506(This)-354(pro)-28(cess)-354(con)28(tin)28(ues)-354(on)-354(all)-354(th)1(e)]TJ 0 -11.955 Td [(lev)28(els)-297(of)-296(nes)-1(ted)-296(calls)-297(un)28(til)-297(the)-296(lev)28(el)-297(where)-297(the)-296(user)-297(decides)-297(to)-296(ab)-28(ort)-297(the)-296(program)]TJ 0 -11.955 Td [(execution.)]TJ 14.944 -11.956 Td [(Figure)]TJ 0 0 1 rg 0 0 1 RG - [-353(8)]TJ + [-353(9)]TJ 0 g 0 G [-353(sho)28(ws)-353(the)-353(la)28(y)27(out)-353(of)-352(a)-353(ge)-1(n)1(e)-1(ri)1(c)]TJ/F30 9.9626 Tf 170.683 0 Td [(psb_foo)]TJ/F8 9.9626 Tf 40.129 0 Td [(routine)-353(with)-353(resp)-28(ect)-353(to)-353(the)]TJ -225.756 -11.955 Td [(PSBLAS-2.0)-326(error)-326(hand)1(ling)-326(p)-28(olicy)83(.)-442(It)-325(is)-326(p)-28(ossible)-326(to)-326(see)-326(ho)28(w,)-327(whenev)28(e)-1(r)-325(an)-326(error)]TJ 0 -11.955 Td [(condition)-379(is)-378(detected,)-390(the)]TJ/F30 9.9626 Tf 115.439 0 Td [(info)]TJ/F8 9.9626 Tf 24.694 0 Td [(v)56(ariable)-379(is)-379(set)-379(to)-378(the)-379(corresp)-28(onding)-378(error)-379(co)-28(de)]TJ -140.133 -11.955 Td [(whic)28(h)-376(is,)-387(then,)-386(pushed)-376(on)-376(top)-376(of)-376(the)-376(stac)28(k)-376(b)28(y)-376(means)-376(of)-376(the)]TJ/F30 9.9626 Tf 264.702 0 Td [(psb_errpush)]TJ/F8 9.9626 Tf 57.534 0 Td [(.)-572(An)]TJ -322.236 -11.955 Td [(error)-331(condition)-331(ma)28(y)-331(b)-28(e)-331(directly)-331(detected)-331(inside)-331(a)-331(routine)-331(or)-331(indirectly)-331(c)27(h)1(e)-1(c)28(king)]TJ 0 -11.956 Td [(the)-461(e)-1(rr)1(or)-462(co)-28(de)-461(returned)-462(returned)-461(b)28(y)-462(a)-461(called)-462(routine.)-829(Whenev)28(er)-461(an)-462(error)-461(is)]TJ 0 -11.955 Td [(encoun)28(tered,)-459(after)-434(it)-434(has)-433(b)-28(een)-434(pushed)-434(on)-434(stac)28(k,)-459(the)-434(program)-433(execution)-434(skips)]TJ 0 -11.955 Td [(to)-356(a)-356(p)-27(oin)28(t)-356(where)-356(the)-356(error)-355(condition)-356(is)-356(handled;)-367(the)-355(error)-356(condition)-356(is)-356(han)1(dled)]TJ 0 -11.955 Td [(either)-392(b)28(y)-392(returning)-392(con)28(trol)-392(to)-392(the)-392(caller)-391(routine)-392(or)-392(b)28(y)-392(calling)-392(the)]TJ/F30 9.9626 Tf 291.408 0 Td [(psb\134_error)]TJ/F8 9.9626 Tf -291.408 -11.955 Td [(routine)-478(whic)28(h)-479(pr)1(in)27(ts)-478(the)-478(con)28(ten)27(t)-478(of)-478(the)-478(error)-478(s)-1(tac)28(k)-478(and)-478(ab)-28(orts)-478(the)-478(program)]TJ 0 -11.955 Td [(execution,)-329(ac)-1(cord)1(ing)-329(to)-328(the)-329(c)28(hoice)-329(made)-328(b)27(y)-328(the)-329(user)-328(with)]TJ/F30 9.9626 Tf 252.028 0 Td [(psb_set_erraction)]TJ/F8 9.9626 Tf 88.916 0 Td [(.)]TJ -340.944 -11.956 Td [(The)-347(default)-346(is)-347(to)-346(prin)28(t)-347(the)-347(error)-346(and)-347(terminate)-346(the)-347(program,)-350(but)-346(the)-347(user)-346(ma)27(y)]TJ 0 -11.955 Td [(c)28(ho)-28(ose)-333(to)-334(handle)-333(the)-333(error)-334(explicitly)84(.)]TJ 14.944 -11.955 Td [(Figure)]TJ 0 0 1 rg 0 0 1 RG - [-400(9)]TJ + [-479(10)]TJ 0 g 0 G - [-400(rep)-28(orts)-400(a)-401(sample)-400(error)-400(message)-401(generated)-400(b)28(y)-400(the)-401(PSBLAS-2.0)-400(li-)]TJ -14.944 -11.955 Td [(brary)83(.)-555(This)-370(error)-370(has)-371(b)-28(een)-370(generated)-370(b)28(y)-371(the)-370(fact)-370(that)-371(the)-370(user)-370(has)-371(c)28(hosen)-370(the)]TJ 0 -11.955 Td [(in)28(v)55(alid)-367(\134F)28(OO")-368(storage)-367(format)-368(to)-367(represen)27(t)-367(the)-368(sparse)-367(matrix.)-547(F)83(rom)-367(this)-368(error)]TJ 0 -11.955 Td [(message)-248(it)-248(is)-248(p)-27(oss)-1(i)1(ble)-248(to)-248(see)-248(that)-248(the)-248(error)-247(has)-248(b)-28(een)-248(detected)-248(inside)-248(th)1(e)]TJ/F30 9.9626 Tf 301.868 0 Td [(psb_cest)]TJ/F8 9.9626 Tf -301.868 -11.956 Td [(subroutine)-333(called)-334(b)28(y)]TJ/F30 9.9626 Tf 91.407 0 Td [(psb_spasb)]TJ/F8 9.9626 Tf 50.394 0 Td [(...)-444(b)27(y)-333(pro)-28(cess)-333(0)-333(\050i.e.)-445(the)-333(ro)-28(ot)-333(pro)-28(cess\051.)]TJ + [-479(rep)-28(orts)-479(a)-479(sample)-480(error)-479(message)-479(generated)-479(b)28(y)-480(the)-479(PSBLAS-2.0)]TJ -14.944 -11.955 Td [(library)83(.)-451(This)-335(error)-336(has)-335(b)-28(een)-336(generated)-335(b)27(y)-335(the)-336(fact)-335(that)-336(the)-335(use)-1(r)-335(has)-336(c)28(hosen)-336(th)1(e)]TJ 0 -11.955 Td [(in)28(v)55(alid)-367(\134F)28(OO")-368(storage)-367(format)-368(to)-367(represen)27(t)-367(the)-368(sparse)-367(matrix.)-547(F)83(rom)-367(this)-368(error)]TJ 0 -11.955 Td [(message)-248(it)-248(is)-248(p)-27(oss)-1(i)1(ble)-248(to)-248(see)-248(that)-248(the)-248(error)-247(has)-248(b)-28(een)-248(detected)-248(inside)-248(th)1(e)]TJ/F30 9.9626 Tf 301.868 0 Td [(psb_cest)]TJ/F8 9.9626 Tf -301.868 -11.956 Td [(subroutine)-333(called)-334(b)28(y)]TJ/F30 9.9626 Tf 91.407 0 Td [(psb_spasb)]TJ/F8 9.9626 Tf 50.394 0 Td [(...)-444(b)27(y)-333(pro)-28(cess)-333(0)-333(\050i.e.)-445(the)-333(ro)-28(ot)-333(pro)-28(cess\051.)]TJ 0 g 0 G - 22.583 -211.304 Td [(106)]TJ + 22.583 -211.304 Td [(108)]TJ 0 g 0 G ET endstream endobj -1332 0 obj << +1385 0 obj << /Type /Page -/Contents 1333 0 R -/Resources 1331 0 R +/Contents 1386 0 R +/Resources 1384 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1318 0 R -/Annots [ 1329 0 R 1330 0 R ] +/Parent 1359 0 R +/Annots [ 1382 0 R 1383 0 R ] >> endobj -1329 0 obj << +1382 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [196.286 501.77 203.26 512.895] /Subtype /Link -/A << /S /GoTo /D (figure.8) >> +/A << /S /GoTo /D (figure.9) >> >> endobj -1330 0 obj << +1383 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [196.757 346.63 203.731 357.478] +/Rect [197.543 346.63 209.498 357.478] /Subtype /Link -/A << /S /GoTo /D (figure.9) >> +/A << /S /GoTo /D (figure.10) >> >> endobj -1334 0 obj << -/D [1332 0 R /XYZ 150.705 740.998 null] +1387 0 obj << +/D [1385 0 R /XYZ 150.705 740.998 null] >> endobj -358 0 obj << -/D [1332 0 R /XYZ 150.705 716.092 null] +398 0 obj << +/D [1385 0 R /XYZ 150.705 716.092 null] >> endobj -1331 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F30 616 0 R >> +1384 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1339 0 obj << -/Length 3859 +1392 0 obj << +/Length 3853 >> stream 0 g 0 G @@ -15148,7 +15612,7 @@ q []0 d 0 J 0.398 w 0 0 m 346.583 0 l S Q BT -/F8 9.9626 Tf 99.895 400.281 Td [(Figure)-329(8:)-443(The)-329(la)27(y)28(out)-329(of)-330(a)-329(generic)]TJ/F30 9.9626 Tf 147.445 0 Td [(psb)]TJ +/F8 9.9626 Tf 99.895 400.281 Td [(Figure)-329(9:)-443(The)-329(la)27(y)28(out)-329(of)-330(a)-329(generic)]TJ/F30 9.9626 Tf 147.445 0 Td [(psb)]TJ ET q 1 0 0 1 263.659 400.481 cm @@ -15183,7 +15647,7 @@ q []0 d 0 J 0.398 w 0 0 m 346.583 0 l S Q BT -/F8 9.9626 Tf 99.895 159.118 Td [(Figure)-422(9:)-622(A)-422(sample)-422(PSBLAS-2.0)-422(error)-422(message.)-711(Pr)1(o)-28(cess)-422(0)-422(dete)-1(cted)-422(an)-422(error)]TJ 0 -11.955 Td [(condition)-333(inside)-334(the)-333(psb)]TJ +/F8 9.9626 Tf 99.895 159.118 Td [(Figure)-386(10:)-551(A)-386(sample)-386(PSBLAS-2.0)-387(error)-386(message.)-603(Pro)-28(cess)-387(0)-386(detected)-386(an)-387(error)]TJ 0 -11.955 Td [(condition)-333(inside)-334(the)-333(psb)]TJ ET q 1 0 0 1 204.658 147.362 cm @@ -15193,32 +15657,32 @@ BT /F8 9.9626 Tf 207.647 147.163 Td [(cest)-333(s)-1(u)1(broutine)]TJ 0 g 0 G 0 g 0 G - 56.632 -56.725 Td [(107)]TJ + 56.632 -56.725 Td [(109)]TJ 0 g 0 G ET endstream endobj -1338 0 obj << +1391 0 obj << /Type /Page -/Contents 1339 0 R -/Resources 1337 0 R +/Contents 1392 0 R +/Resources 1390 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1318 0 R +/Parent 1394 0 R >> endobj -1340 0 obj << -/D [1338 0 R /XYZ 99.895 740.998 null] +1393 0 obj << +/D [1391 0 R /XYZ 99.895 740.998 null] >> endobj -1335 0 obj << -/D [1338 0 R /XYZ 143.452 412.237 null] +1388 0 obj << +/D [1391 0 R /XYZ 143.452 412.237 null] >> endobj -1336 0 obj << -/D [1338 0 R /XYZ 146.161 171.074 null] +1389 0 obj << +/D [1391 0 R /XYZ 150.074 171.074 null] >> endobj -1337 0 obj << -/Font << /F46 746 0 R /F8 438 0 R /F30 616 0 R >> +1390 0 obj << +/Font << /F46 818 0 R /F8 478 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1343 0 obj << +1397 0 obj << /Length 2958 >> stream @@ -15288,29 +15752,29 @@ BT 0 g 0 G /F8 9.9626 Tf 19.669 0 Td [(addional)-333(info)-333(for)-334(error)-333(co)-28(de)]TJ -4.457 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(optional)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(string.)]TJ 0 g 0 G - 139.477 -284.475 Td [(108)]TJ + 139.477 -284.475 Td [(110)]TJ 0 g 0 G ET endstream endobj -1342 0 obj << +1396 0 obj << /Type /Page -/Contents 1343 0 R -/Resources 1341 0 R +/Contents 1397 0 R +/Resources 1395 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1318 0 R +/Parent 1394 0 R >> endobj -1344 0 obj << -/D [1342 0 R /XYZ 150.705 740.998 null] +1398 0 obj << +/D [1396 0 R /XYZ 150.705 740.998 null] >> endobj -362 0 obj << -/D [1342 0 R /XYZ 150.705 697.37 null] +402 0 obj << +/D [1396 0 R /XYZ 150.705 697.37 null] >> endobj -1341 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1395 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1347 0 obj << +1401 0 obj << /Length 1151 >> stream @@ -15340,29 +15804,29 @@ BT 0 g 0 G /F8 9.9626 Tf 39.989 0 Td [(the)-333(comm)27(unication)-333(con)28(text.)]TJ -15.082 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(global)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(optional)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.547 0 Td [(.)]TJ -43.033 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(in)28(teger.)]TJ 0 g 0 G - 139.477 -473.765 Td [(109)]TJ + 139.477 -473.765 Td [(111)]TJ 0 g 0 G ET endstream endobj -1346 0 obj << +1400 0 obj << /Type /Page -/Contents 1347 0 R -/Resources 1345 0 R +/Contents 1401 0 R +/Resources 1399 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1349 0 R +/Parent 1394 0 R >> endobj -1348 0 obj << -/D [1346 0 R /XYZ 99.895 740.998 null] +1402 0 obj << +/D [1400 0 R /XYZ 99.895 740.998 null] >> endobj -366 0 obj << -/D [1346 0 R /XYZ 99.895 685.747 null] +406 0 obj << +/D [1400 0 R /XYZ 99.895 685.747 null] >> endobj -1345 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1399 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1352 0 obj << +1405 0 obj << /Length 1249 >> stream @@ -15399,29 +15863,29 @@ BT 0 g 0 G /F8 9.9626 Tf 11.028 0 Td [(the)-333(v)27(erb)-27(osit)27(y)-333(lev)28(el)]TJ 13.878 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(global)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.548 0 Td [(.)]TJ -43.034 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(in)28(teger.)]TJ 0 g 0 G - 139.477 -473.765 Td [(110)]TJ + 139.477 -473.765 Td [(112)]TJ 0 g 0 G ET endstream endobj -1351 0 obj << +1404 0 obj << /Type /Page -/Contents 1352 0 R -/Resources 1350 0 R +/Contents 1405 0 R +/Resources 1403 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1349 0 R +/Parent 1394 0 R >> endobj -1353 0 obj << -/D [1351 0 R /XYZ 150.705 740.998 null] +1406 0 obj << +/D [1404 0 R /XYZ 150.705 740.998 null] >> endobj -370 0 obj << -/D [1351 0 R /XYZ 150.705 683.422 null] +410 0 obj << +/D [1404 0 R /XYZ 150.705 683.422 null] >> endobj -1350 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1403 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1356 0 obj << +1409 0 obj << /Length 1710 >> stream @@ -15468,29 +15932,29 @@ BT 0 g 0 G /F30 9.9626 Tf -336.792 -21.918 Td [(call)-525(psb_errcomm\050icontxt,)-525(err\051)]TJ 0 g 0 G -/F8 9.9626 Tf 164.384 -451.847 Td [(111)]TJ +/F8 9.9626 Tf 164.384 -451.847 Td [(113)]TJ 0 g 0 G ET endstream endobj -1355 0 obj << +1408 0 obj << /Type /Page -/Contents 1356 0 R -/Resources 1354 0 R +/Contents 1409 0 R +/Resources 1407 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1349 0 R +/Parent 1394 0 R >> endobj -1357 0 obj << -/D [1355 0 R /XYZ 99.895 740.998 null] +1410 0 obj << +/D [1408 0 R /XYZ 99.895 740.998 null] >> endobj -374 0 obj << -/D [1355 0 R /XYZ 99.895 685.747 null] +414 0 obj << +/D [1408 0 R /XYZ 99.895 685.747 null] >> endobj -1354 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1407 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1360 0 obj << +1413 0 obj << /Length 526 >> stream @@ -15499,29 +15963,29 @@ stream BT /F16 14.3462 Tf 150.705 706.129 Td [(9)-1125(Utilities)]TJ/F8 9.9626 Tf 0 -21.821 Td [(W)83(e)-414(ha)27(v)28(e)-415(some)-414(utitlities)-415(a)28(v)55(ailable)-414(for)-415(input)-415(and)-414(output)-415(of)-415(sparsematrices;)-455(the)]TJ 0 -11.955 Td [(in)28(terfaces)-334(to)-333(these)-333(routines)-334(are)-333(a)28(v)55(ailable)-333(in)-333(the)-334(mo)-27(dule)]TJ/F30 9.9626 Tf 241.843 0 Td [(psb_util_mod)]TJ/F8 9.9626 Tf 62.764 0 Td [(.)]TJ 0 g 0 G - -140.224 -581.915 Td [(112)]TJ + -140.224 -581.915 Td [(114)]TJ 0 g 0 G ET endstream endobj -1359 0 obj << +1412 0 obj << /Type /Page -/Contents 1360 0 R -/Resources 1358 0 R +/Contents 1413 0 R +/Resources 1411 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1349 0 R +/Parent 1394 0 R >> endobj -1361 0 obj << -/D [1359 0 R /XYZ 150.705 740.998 null] +1414 0 obj << +/D [1412 0 R /XYZ 150.705 740.998 null] >> endobj -378 0 obj << -/D [1359 0 R /XYZ 150.705 716.092 null] +418 0 obj << +/D [1412 0 R /XYZ 150.705 716.092 null] >> endobj -1358 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F30 616 0 R >> +1411 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1365 0 obj << +1418 0 obj << /Length 4442 >> stream @@ -15592,37 +16056,37 @@ BT 0 g 0 G /F8 9.9626 Tf 22.589 0 Td [(Error)-333(co)-28(de.)]TJ 2.318 -11.956 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 139.477 -196.803 Td [(113)]TJ + 139.477 -196.803 Td [(115)]TJ 0 g 0 G ET endstream endobj -1364 0 obj << +1417 0 obj << /Type /Page -/Contents 1365 0 R -/Resources 1363 0 R +/Contents 1418 0 R +/Resources 1416 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1349 0 R -/Annots [ 1362 0 R ] +/Parent 1420 0 R +/Annots [ 1415 0 R ] >> endobj -1362 0 obj << +1415 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 451.404 367.009 462.529] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1366 0 obj << -/D [1364 0 R /XYZ 99.895 740.998 null] +1419 0 obj << +/D [1417 0 R /XYZ 99.895 740.998 null] >> endobj -382 0 obj << -/D [1364 0 R /XYZ 99.895 683.422 null] +422 0 obj << +/D [1417 0 R /XYZ 99.895 683.422 null] >> endobj -1363 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1416 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1370 0 obj << +1424 0 obj << /Length 4868 >> stream @@ -15697,37 +16161,37 @@ BT 0 g 0 G /F8 9.9626 Tf 22.589 0 Td [(Error)-333(co)-28(de.)]TJ 2.318 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.956 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detected.)]TJ 0 g 0 G - 139.477 -141.012 Td [(114)]TJ + 139.477 -141.012 Td [(116)]TJ 0 g 0 G ET endstream endobj -1369 0 obj << +1423 0 obj << /Type /Page -/Contents 1370 0 R -/Resources 1368 0 R +/Contents 1424 0 R +/Resources 1422 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1349 0 R -/Annots [ 1367 0 R ] +/Parent 1420 0 R +/Annots [ 1421 0 R ] >> endobj -1367 0 obj << +1421 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 584.903 417.818 596.028] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1371 0 obj << -/D [1369 0 R /XYZ 150.705 740.998 null] +1425 0 obj << +/D [1423 0 R /XYZ 150.705 740.998 null] >> endobj -386 0 obj << -/D [1369 0 R /XYZ 150.705 683.422 null] +426 0 obj << +/D [1423 0 R /XYZ 150.705 683.422 null] >> endobj -1368 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1422 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1375 0 obj << +1429 0 obj << /Length 3234 >> stream @@ -15797,37 +16261,37 @@ BT 0 g 0 G /F8 9.9626 Tf 22.589 0 Td [(Error)-333(co)-28(de.)]TJ 2.318 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 139.477 -320.34 Td [(115)]TJ + 139.477 -320.34 Td [(117)]TJ 0 g 0 G ET endstream endobj -1374 0 obj << +1428 0 obj << /Type /Page -/Contents 1375 0 R -/Resources 1373 0 R +/Contents 1429 0 R +/Resources 1427 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1377 0 R -/Annots [ 1372 0 R ] +/Parent 1420 0 R +/Annots [ 1426 0 R ] >> endobj -1372 0 obj << +1426 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 451.404 367.009 462.529] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1376 0 obj << -/D [1374 0 R /XYZ 99.895 740.998 null] +1430 0 obj << +/D [1428 0 R /XYZ 99.895 740.998 null] >> endobj -390 0 obj << -/D [1374 0 R /XYZ 99.895 685.747 null] +430 0 obj << +/D [1428 0 R /XYZ 99.895 685.747 null] >> endobj -1373 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1427 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1380 0 obj << +1433 0 obj << /Length 3263 >> stream @@ -15879,29 +16343,29 @@ BT 0 g 0 G /F8 9.9626 Tf 22.589 0 Td [(Error)-333(co)-28(de.)]TJ 2.318 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detected.)]TJ 0 g 0 G - 139.477 -296.43 Td [(116)]TJ + 139.477 -296.43 Td [(118)]TJ 0 g 0 G ET endstream endobj -1379 0 obj << +1432 0 obj << /Type /Page -/Contents 1380 0 R -/Resources 1378 0 R +/Contents 1433 0 R +/Resources 1431 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1377 0 R +/Parent 1420 0 R >> endobj -1381 0 obj << -/D [1379 0 R /XYZ 150.705 740.998 null] +1434 0 obj << +/D [1432 0 R /XYZ 150.705 740.998 null] >> endobj -394 0 obj << -/D [1379 0 R /XYZ 150.705 685.747 null] +434 0 obj << +/D [1432 0 R /XYZ 150.705 685.747 null] >> endobj -1378 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1431 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1385 0 obj << +1438 0 obj << /Length 3710 >> stream @@ -15975,37 +16439,37 @@ BT 0 g 0 G /F8 9.9626 Tf 22.589 0 Td [(Error)-333(co)-28(de.)]TJ 2.318 -11.956 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detected.)]TJ 0 g 0 G - 139.477 -264.549 Td [(117)]TJ + 139.477 -264.549 Td [(119)]TJ 0 g 0 G ET endstream endobj -1384 0 obj << +1437 0 obj << /Type /Page -/Contents 1385 0 R -/Resources 1383 0 R +/Contents 1438 0 R +/Resources 1436 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1377 0 R -/Annots [ 1382 0 R ] +/Parent 1420 0 R +/Annots [ 1435 0 R ] >> endobj -1382 0 obj << +1435 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 584.903 367.009 596.028] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1386 0 obj << -/D [1384 0 R /XYZ 99.895 740.998 null] +1439 0 obj << +/D [1437 0 R /XYZ 99.895 740.998 null] >> endobj -398 0 obj << -/D [1384 0 R /XYZ 99.895 685.747 null] +438 0 obj << +/D [1437 0 R /XYZ 99.895 685.747 null] >> endobj -1383 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1436 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1389 0 obj << +1442 0 obj << /Length 912 >> stream @@ -16022,29 +16486,29 @@ BT 0 g 0 G /F8 9.9626 Tf 9.962 0 Td [(Blo)-28(c)28(k)-333(Jacobi)-334(with)-333(ILU\0500\051)-333(factorization)]TJ -24.906 -19.925 Td [(The)-364(supp)-27(orting)-364(data)-363(t)27(yp)-27(e)-364(and)-364(subroutin)1(e)-364(in)28(terfaces)-364(are)-364(de\014ned)-363(in)-364(the)-363(mo)-28(dule)]TJ/F30 9.9626 Tf 0 -11.955 Td [(psb_prec_mod)]TJ/F8 9.9626 Tf 62.764 0 Td [(.)]TJ 0 g 0 G - 101.619 -510.184 Td [(118)]TJ + 101.619 -510.184 Td [(120)]TJ 0 g 0 G ET endstream endobj -1388 0 obj << +1441 0 obj << /Type /Page -/Contents 1389 0 R -/Resources 1387 0 R +/Contents 1442 0 R +/Resources 1440 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1377 0 R +/Parent 1420 0 R >> endobj -1390 0 obj << -/D [1388 0 R /XYZ 150.705 740.998 null] +1443 0 obj << +/D [1441 0 R /XYZ 150.705 740.998 null] >> endobj -402 0 obj << -/D [1388 0 R /XYZ 150.705 716.092 null] +442 0 obj << +/D [1441 0 R /XYZ 150.705 716.092 null] >> endobj -1387 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F14 619 0 R /F30 616 0 R >> +1440 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F14 667 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1395 0 obj << +1448 0 obj << /Length 4642 >> stream @@ -16128,47 +16592,47 @@ BT /F32 5.9776 Tf 110.987 123.138 Td [(3)]TJ/F31 7.9701 Tf 4.151 -2.812 Td [(The)-354(string)-354(is)-355(case-insensitiv)30(e)]TJ 0 g 0 G 0 g 0 G -/F8 9.9626 Tf 149.141 -29.888 Td [(119)]TJ +/F8 9.9626 Tf 149.141 -29.888 Td [(121)]TJ 0 g 0 G ET endstream endobj -1394 0 obj << +1447 0 obj << /Type /Page -/Contents 1395 0 R -/Resources 1393 0 R +/Contents 1448 0 R +/Resources 1446 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1377 0 R -/Annots [ 1391 0 R 1392 0 R ] +/Parent 1451 0 R +/Annots [ 1444 0 R 1445 0 R ] >> endobj -1391 0 obj << +1444 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [321.343 511.179 388.401 522.304] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1392 0 obj << +1445 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.831 421.792 175.293 433.832] /Subtype /Link /A << /S /GoTo /D (Hfootnote.3) >> >> endobj -1396 0 obj << -/D [1394 0 R /XYZ 99.895 740.998 null] +1449 0 obj << +/D [1447 0 R /XYZ 99.895 740.998 null] >> endobj -406 0 obj << -/D [1394 0 R /XYZ 99.895 697.37 null] +446 0 obj << +/D [1447 0 R /XYZ 99.895 697.37 null] >> endobj -1397 0 obj << -/D [1394 0 R /XYZ 115.138 129.79 null] +1450 0 obj << +/D [1447 0 R /XYZ 115.138 129.79 null] >> endobj -1393 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R /F11 599 0 R /F7 617 0 R /F32 620 0 R /F31 622 0 R >> +1446 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R /F11 649 0 R /F7 665 0 R /F32 668 0 R /F31 670 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1404 0 obj << +1458 0 obj << /Length 4723 >> stream @@ -16294,58 +16758,58 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.148 -11.956 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)27(t)1(e)-1(ger)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detec)-1(ted.)]TJ 0 g 0 G - 139.477 -194.811 Td [(120)]TJ + 139.477 -194.811 Td [(122)]TJ 0 g 0 G ET endstream endobj -1403 0 obj << +1457 0 obj << /Type /Page -/Contents 1404 0 R -/Resources 1402 0 R +/Contents 1458 0 R +/Resources 1456 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1377 0 R -/Annots [ 1398 0 R 1399 0 R 1400 0 R 1401 0 R ] +/Parent 1451 0 R +/Annots [ 1452 0 R 1453 0 R 1454 0 R 1455 0 R ] >> endobj -1398 0 obj << +1452 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.666 586.895 440.954 598.02] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1399 0 obj << +1453 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.73 519.15 514.788 530.274] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1400 0 obj << +1454 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [422.298 451.404 489.356 462.529] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1401 0 obj << +1455 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.385 361.74 436.443 372.865] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1405 0 obj << -/D [1403 0 R /XYZ 150.705 740.998 null] +1459 0 obj << +/D [1457 0 R /XYZ 150.705 740.998 null] >> endobj -410 0 obj << -/D [1403 0 R /XYZ 150.705 697.37 null] +450 0 obj << +/D [1457 0 R /XYZ 150.705 697.37 null] >> endobj -1402 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1456 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1410 0 obj << +1464 0 obj << /Length 5001 >> stream @@ -16445,44 +16909,44 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.149 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(tege)-1(r)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detecte)-1(d)1(.)]TJ 0 g 0 G - 139.477 -119.095 Td [(121)]TJ + 139.477 -119.095 Td [(123)]TJ 0 g 0 G ET endstream endobj -1409 0 obj << +1463 0 obj << /Type /Page -/Contents 1410 0 R -/Resources 1408 0 R +/Contents 1464 0 R +/Resources 1462 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1412 0 R -/Annots [ 1406 0 R 1407 0 R ] +/Parent 1451 0 R +/Annots [ 1460 0 R 1461 0 R ] >> endobj -1406 0 obj << +1460 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [321.343 574.94 388.401 586.065] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1407 0 obj << +1461 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [324.885 463.359 391.943 474.484] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1411 0 obj << -/D [1409 0 R /XYZ 99.895 740.998 null] +1465 0 obj << +/D [1463 0 R /XYZ 99.895 740.998 null] >> endobj -414 0 obj << -/D [1409 0 R /XYZ 99.895 697.37 null] +454 0 obj << +/D [1463 0 R /XYZ 99.895 697.37 null] >> endobj -1408 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1462 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1416 0 obj << +1469 0 obj << /Length 1996 >> stream @@ -16534,37 +16998,37 @@ BT 0 g 0 G /F8 9.9626 Tf 24.713 0 Td [(output)-333(unit.)-444(Scop)-28(e:)]TJ/F27 9.9626 Tf 89.94 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -89.747 -11.956 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(optiona)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.548 0 Td [(.)]TJ -43.034 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(an)-333(in)28(teger)-333(n)27(um)28(b)-28(er.)]TJ 0 g 0 G - 139.477 -417.974 Td [(122)]TJ + 139.477 -417.974 Td [(124)]TJ 0 g 0 G ET endstream endobj -1415 0 obj << +1468 0 obj << /Type /Page -/Contents 1416 0 R -/Resources 1414 0 R +/Contents 1469 0 R +/Resources 1467 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1412 0 R -/Annots [ 1413 0 R ] +/Parent 1451 0 R +/Annots [ 1466 0 R ] >> endobj -1413 0 obj << +1466 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.153 560.993 439.211 572.118] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1417 0 obj << -/D [1415 0 R /XYZ 150.705 740.998 null] +1470 0 obj << +/D [1468 0 R /XYZ 150.705 740.998 null] >> endobj -418 0 obj << -/D [1415 0 R /XYZ 150.705 685.747 null] +458 0 obj << +/D [1468 0 R /XYZ 150.705 685.747 null] >> endobj -1414 0 obj << -/Font << /F16 435 0 R /F30 616 0 R /F27 437 0 R /F8 438 0 R >> +1467 0 obj << +/Font << /F16 475 0 R /F30 664 0 R /F27 477 0 R /F8 478 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1420 0 obj << +1473 0 obj << /Length 598 >> stream @@ -16573,29 +17037,29 @@ stream BT /F16 14.3462 Tf 99.895 706.129 Td [(11)-1125(Iterativ)31(e)-375(Metho)-31(ds)]TJ/F8 9.9626 Tf 0 -21.821 Td [(In)-519(this)-518(c)28(hapter)-519(w)28(e)-519(pro)28(vide)-519(routin)1(e)-1(s)-518(for)-519(preconditioners)-518(and)-519(iterativ)28(e)-519(meth-)]TJ 0 -11.955 Td [(o)-28(ds.)-647(The)-401(in)28(terfaces)-401(for)-401(Kryl)1(o)27(v)-401(subspace)-400(m)-1(etho)-27(ds)-401(are)-401(a)28(v)55(ailable)-400(in)-401(the)-401(mo)-28(dule)]TJ/F30 9.9626 Tf 0 -11.955 Td [(psb_krylov_mod)]TJ/F8 9.9626 Tf 73.225 0 Td [(.)]TJ 0 g 0 G - 91.159 -569.96 Td [(123)]TJ + 91.159 -569.96 Td [(125)]TJ 0 g 0 G ET endstream endobj -1419 0 obj << +1472 0 obj << /Type /Page -/Contents 1420 0 R -/Resources 1418 0 R +/Contents 1473 0 R +/Resources 1471 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1412 0 R +/Parent 1451 0 R >> endobj -1421 0 obj << -/D [1419 0 R /XYZ 99.895 740.998 null] +1474 0 obj << +/D [1472 0 R /XYZ 99.895 740.998 null] >> endobj -422 0 obj << -/D [1419 0 R /XYZ 99.895 716.092 null] +462 0 obj << +/D [1472 0 R /XYZ 99.895 716.092 null] >> endobj -1418 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F30 616 0 R >> +1471 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1426 0 obj << +1479 0 obj << /Length 7212 >> stream @@ -16711,44 +17175,44 @@ BT 0 g 0 G /F8 9.9626 Tf 11.346 0 Td [(The)-333(RHS)-334(v)28(ector.)]TJ 13.56 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(in)]TJ/F8 9.9626 Tf 9.548 0 Td [(.)]TJ -43.034 -11.955 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(rank)-333(one)-334(ar)1(ra)27(y)84(.)]TJ 0 g 0 G - 139.477 -29.888 Td [(124)]TJ + 139.477 -29.888 Td [(126)]TJ 0 g 0 G ET endstream endobj -1425 0 obj << +1478 0 obj << /Type /Page -/Contents 1426 0 R -/Resources 1424 0 R +/Contents 1479 0 R +/Resources 1477 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1412 0 R -/Annots [ 1422 0 R 1423 0 R ] +/Parent 1451 0 R +/Annots [ 1475 0 R 1476 0 R ] >> endobj -1422 0 obj << +1475 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 250.914 417.818 262.039] /Subtype /Link /A << /S /GoTo /D (spdata) >> >> endobj -1423 0 obj << +1476 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.53 184.015 412.588 195.14] /Subtype /Link /A << /S /GoTo /D (precdata) >> >> endobj -1427 0 obj << -/D [1425 0 R /XYZ 150.705 740.998 null] +1480 0 obj << +/D [1478 0 R /XYZ 150.705 740.998 null] >> endobj -426 0 obj << -/D [1425 0 R /XYZ 150.705 697.37 null] +466 0 obj << +/D [1478 0 R /XYZ 150.705 697.37 null] >> endobj -1424 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F11 599 0 R /F14 619 0 R /F10 618 0 R /F7 617 0 R /F30 616 0 R /F27 437 0 R >> +1477 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F11 649 0 R /F14 667 0 R /F10 666 0 R /F7 665 0 R /F30 664 0 R /F27 477 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1431 0 obj << +1484 0 obj << /Length 5689 >> stream @@ -16816,34 +17280,34 @@ BT 0 g 0 G /F8 9.9626 Tf 11.028 0 Td [(The)-333(computed)-334(solution.)]TJ 13.879 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.955 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.611 0 Td [(required)]TJ/F8 9.9626 Tf -29.611 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(inout)]TJ/F8 9.9626 Tf 26.096 0 Td [(.)]TJ -59.582 -11.956 Td [(Sp)-28(eci\014ed)-333(as:)-445(a)-333(rank)-333(one)-333(arra)27(y)84(.)]TJ 0 g 0 G - 139.477 -29.887 Td [(125)]TJ + 139.477 -29.887 Td [(127)]TJ 0 g 0 G ET endstream endobj -1430 0 obj << +1483 0 obj << /Type /Page -/Contents 1431 0 R -/Resources 1429 0 R +/Contents 1484 0 R +/Resources 1482 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1412 0 R -/Annots [ 1428 0 R ] +/Parent 1486 0 R +/Annots [ 1481 0 R ] >> endobj -1428 0 obj << +1481 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.721 520.602 361.779 531.727] /Subtype /Link /A << /S /GoTo /D (descdata) >> >> endobj -1432 0 obj << -/D [1430 0 R /XYZ 99.895 740.998 null] +1485 0 obj << +/D [1483 0 R /XYZ 99.895 740.998 null] >> endobj -1429 0 obj << -/Font << /F27 437 0 R /F8 438 0 R /F30 616 0 R /F11 599 0 R /F14 619 0 R >> +1482 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F30 664 0 R /F11 649 0 R /F14 667 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1435 0 obj << +1489 0 obj << /Length 2484 >> stream @@ -16867,26 +17331,26 @@ BT 0 g 0 G /F8 9.9626 Tf 23.758 0 Td [(Error)-333(co)-28(de.)]TJ 1.148 -11.955 Td [(Scop)-28(e:)]TJ/F27 9.9626 Tf 32.379 0 Td [(lo)-32(cal)]TJ/F8 9.9626 Tf -32.379 -11.956 Td [(T)28(yp)-28(e:)]TJ/F27 9.9626 Tf 29.612 0 Td [(required)]TJ/F8 9.9626 Tf -29.612 -11.955 Td [(In)28(ten)28(t:)]TJ/F27 9.9626 Tf 33.486 0 Td [(out)]TJ/F8 9.9626 Tf 16.549 0 Td [(.)]TJ -50.035 -11.955 Td [(An)-333(in)28(te)-1(ger)-333(v)56(alue;)-334(0)-333(means)-333(no)-334(error)-333(has)-333(b)-28(een)-333(detec)-1(ted.)]TJ 0 g 0 G - 139.477 -352.677 Td [(126)]TJ + 139.477 -352.677 Td [(128)]TJ 0 g 0 G ET endstream endobj -1434 0 obj << +1488 0 obj << /Type /Page -/Contents 1435 0 R -/Resources 1433 0 R +/Contents 1489 0 R +/Resources 1487 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1412 0 R +/Parent 1486 0 R >> endobj -1436 0 obj << -/D [1434 0 R /XYZ 150.705 740.998 null] +1490 0 obj << +/D [1488 0 R /XYZ 150.705 740.998 null] >> endobj -1433 0 obj << -/Font << /F27 437 0 R /F8 438 0 R /F11 599 0 R >> +1487 0 obj << +/Font << /F27 477 0 R /F8 478 0 R /F11 649 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1439 0 obj << +1493 0 obj << /Length 7011 >> stream @@ -16943,66 +17407,66 @@ BT 0 g 0 G [-500(S.)-267(Filipp)-27(one,)-280(P)83(.)-267(D'Am)28(bra,)-280(M.)-267(Cola)-55(janni,)]TJ/F17 9.9626 Tf 197.776 0 Td [(Using)-297(a)-296(Par)51(al)-51(lel)-297(Libr)52(ary)-297(of)-296(Sp)51(arse)]TJ -177.297 -11.955 Td [(Line)51(ar)-352(A)26(lgebr)51(a)-352(in)-352(a)-352(Fluid)-352(Dynami)1(cs)-352(Applic)51(ations)-352(Co)51(de)-352(on)-352(Linux)-352(Clusters)]TJ/F8 9.9626 Tf 320.465 0 Td [(,)]TJ -320.465 -11.955 Td [(in)-398(G.)-399(Jou)1(b)-28(ert,)-415(A.)-398(Murli,)-414(F.)-399(P)28(eters,)-414(M.)-399(V)84(annesc)27(hi,)-414(editors,)-415(P)28(arallel)-398(Com-)]TJ 0 -11.955 Td [(puting)-354(-)-354(Adv)55(ances)-354(&)-354(Curren)28(t)-355(Issues,)-359(pp.)-354(441{448,)-360(Imp)-28(erial)-354(College)-354(Press,)]TJ 0 -11.955 Td [(2002.)]TJ 0 g 0 G - 143.905 -29.888 Td [(127)]TJ + 143.905 -29.888 Td [(129)]TJ 0 g 0 G ET endstream endobj -1438 0 obj << +1492 0 obj << /Type /Page -/Contents 1439 0 R -/Resources 1437 0 R +/Contents 1493 0 R +/Resources 1491 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1445 0 R +/Parent 1486 0 R >> endobj -1440 0 obj << -/D [1438 0 R /XYZ 99.895 740.998 null] +1494 0 obj << +/D [1492 0 R /XYZ 99.895 740.998 null] >> endobj -1441 0 obj << -/D [1438 0 R /XYZ 99.895 696.263 null] +1495 0 obj << +/D [1492 0 R /XYZ 99.895 696.263 null] >> endobj -583 0 obj << -/D [1438 0 R /XYZ 99.895 699.619 null] +633 0 obj << +/D [1492 0 R /XYZ 99.895 699.619 null] >> endobj -1442 0 obj << -/D [1438 0 R /XYZ 99.895 643.15 null] +1496 0 obj << +/D [1492 0 R /XYZ 99.895 643.15 null] >> endobj -636 0 obj << -/D [1438 0 R /XYZ 99.895 588.618 null] +686 0 obj << +/D [1492 0 R /XYZ 99.895 588.618 null] >> endobj -635 0 obj << -/D [1438 0 R /XYZ 99.895 534.087 null] +685 0 obj << +/D [1492 0 R /XYZ 99.895 534.087 null] >> endobj -589 0 obj << -/D [1438 0 R /XYZ 99.895 479.555 null] +639 0 obj << +/D [1492 0 R /XYZ 99.895 479.555 null] >> endobj -590 0 obj << -/D [1438 0 R /XYZ 99.895 436.978 null] +640 0 obj << +/D [1492 0 R /XYZ 99.895 436.978 null] >> endobj -607 0 obj << -/D [1438 0 R /XYZ 99.895 394.402 null] +657 0 obj << +/D [1492 0 R /XYZ 99.895 394.402 null] >> endobj -586 0 obj << -/D [1438 0 R /XYZ 99.895 351.272 null] +636 0 obj << +/D [1492 0 R /XYZ 99.895 351.272 null] >> endobj -587 0 obj << -/D [1438 0 R /XYZ 99.895 308.696 null] +637 0 obj << +/D [1492 0 R /XYZ 99.895 308.696 null] >> endobj -1443 0 obj << -/D [1438 0 R /XYZ 99.895 266.119 null] +1497 0 obj << +/D [1492 0 R /XYZ 99.895 266.119 null] >> endobj -582 0 obj << -/D [1438 0 R /XYZ 99.895 223.543 null] +632 0 obj << +/D [1492 0 R /XYZ 99.895 223.543 null] >> endobj -1444 0 obj << -/D [1438 0 R /XYZ 99.895 181.52 null] +1498 0 obj << +/D [1492 0 R /XYZ 99.895 181.52 null] >> endobj -1437 0 obj << -/Font << /F16 435 0 R /F8 438 0 R /F17 579 0 R >> +1491 0 obj << +/Font << /F16 475 0 R /F8 478 0 R /F17 629 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1448 0 obj << -/Length 2747 +1501 0 obj << +/Length 3124 >> stream 0 g 0 G @@ -17011,118 +17475,125 @@ stream BT /F8 9.9626 Tf 150.705 706.129 Td [([13])]TJ 0 g 0 G - [-500(Karypis,)-561(G.)-515(and)-515(Kumar,)-561(V.,)]TJ/F17 9.9626 Tf 157.275 0 Td [(METIS:)-525(Unstructur)51(e)51(d)-525(Gr)51(aph)-525(Partitioning)]TJ -136.796 -11.955 Td [(and)-413(Sp)51(arse)-413(Matrix)-414(Or)51(deri)1(ng)-414(System)]TJ/F8 9.9626 Tf 158.597 0 Td [(.)-394(Minneap)-27(olis,)-409(MN)-394(55455:)-565(Univ)28(ersit)28(y)]TJ -158.597 -11.955 Td [(of)-420(Minnesota,)-441(Departmen)27(t)-420(of)-419(Computer)-420(Science,)-442(1995.)-420(In)28(ternet)-420(Address:)]TJ/F30 9.9626 Tf 0 -11.956 Td [(http://www.cs.umn.edu/~karypis)]TJ/F8 9.9626 Tf 156.91 0 Td [(.)]TJ + [-500(Gamma,)-494(E.,)-987(Helm,)-493(R.,)-987(Johnson,)-494(R.,)-987(and)-923(Vlissides,)-494(J.)-461(1995.)]TJ/F17 9.9626 Tf 314.294 0 Td [(Design)]TJ -293.815 -11.955 Td [(Patterns:)-427(Elements)-293(of)-292(R)51(eusable)-293(Obje)51(ct-Oriente)51(d)-292(Softwar)51(e)]TJ/F8 9.9626 Tf 246.617 0 Td [(.)-262(Addison-W)83(esley)83(.)]TJ 0 g 0 G - -177.389 -19.925 Td [([14])]TJ + -267.096 -19.926 Td [([14])]TJ 0 g 0 G - [-500(La)28(wson,)-339(C.,)-339(Hanson,)-339(R.,)-339(Kincaid,)-339(D.)-338(and)-338(Krogh,)-339(F.,)-339(Basic)-338(Linear)-338(Algebra)]TJ 20.479 -11.955 Td [(Subprograms)-337(for)-336(Fortran)-337(usage,)-338(A)28(CM)-337(T)84(rans.)-337(Math.)-337(Soft)28(w.)-337(v)28(ol.)-337(5,)-337(38{329,)]TJ 0 -11.955 Td [(1979.)]TJ + [-500(Karypis,)-561(G.)-515(and)-515(Kumar,)-561(V.,)]TJ/F17 9.9626 Tf 157.276 0 Td [(METIS:)-525(Unstructur)51(e)51(d)-525(Gr)51(aph)-525(Partitioning)]TJ -136.797 -11.955 Td [(and)-413(Sp)51(arse)-413(Matrix)-414(Or)51(deri)1(ng)-414(System)]TJ/F8 9.9626 Tf 158.597 0 Td [(.)-394(Minneap)-27(olis,)-409(MN)-394(55455:)-565(Univ)28(ersit)28(y)]TJ -158.597 -11.955 Td [(of)-420(Minnesota,)-441(Departmen)27(t)-420(of)-419(Computer)-420(Science,)-442(1995.)-420(In)28(ternet)-420(Address:)]TJ/F30 9.9626 Tf 0 -11.955 Td [(http://www.cs.umn.edu/~karypis)]TJ/F8 9.9626 Tf 156.91 0 Td [(.)]TJ 0 g 0 G - -20.479 -19.926 Td [([15])]TJ + -177.389 -19.925 Td [([15])]TJ 0 g 0 G - [-500(Mac)28(hiels,)-372(L.)-364(and)-364(Deville,)-372(M.)]TJ/F17 9.9626 Tf 148.97 0 Td [(F)77(ortr)51(an)-386(90:)-517(A)26(n)-387(entry)-386(to)-386(obje)51(ct-oriente)51(d)-386(pr)51(o-)]TJ -128.491 -11.955 Td [(gr)51(amming)-492(for)-492(the)-492(solu)1(t)-1(i)1(on)-492(of)-492(p)51(artial)-492(di\013er)51(ential)-492(e)51(quations.)]TJ/F8 9.9626 Tf 267.456 0 Td [(A)28(CM)-479(T)83(rans.)]TJ -267.456 -11.955 Td [(Math.)-333(Soft)28(w.)-334(v)28(ol.)-333(23,)-334(32{49.)]TJ + [-500(La)28(wson,)-339(C.,)-339(Hanson,)-339(R.,)-339(Kincaid,)-339(D.)-338(and)-338(Krogh,)-339(F.,)-339(Basic)-338(Linear)-338(Algebra)]TJ 20.479 -11.956 Td [(Subprograms)-337(for)-336(Fortran)-337(usage,)-338(A)28(CM)-337(T)84(rans.)-337(Math.)-337(Soft)28(w.)-337(v)28(ol.)-337(5,)-337(38{329,)]TJ 0 -11.955 Td [(1979.)]TJ 0 g 0 G -20.479 -19.925 Td [([16])]TJ 0 g 0 G - [-500(Metcalf,)-434(M.,)-434(Reid,)-433(J.)-414(and)-414(Cohen,)-434(M.)]TJ/F17 9.9626 Tf 189.335 0 Td [(F)77(ortr)51(an)-432(95/2003)-432(explaine)51(d.)]TJ/F8 9.9626 Tf 123.907 0 Td [(Oxford)]TJ -292.763 -11.955 Td [(Univ)28(ersit)28(y)-334(Press,)-333(2004.)]TJ + [-500(Mac)28(hiels,)-372(L.)-364(and)-364(Deville,)-372(M.)]TJ/F17 9.9626 Tf 148.97 0 Td [(F)77(ortr)51(an)-386(90:)-517(A)26(n)-387(entry)-386(to)-386(obje)51(ct-oriente)51(d)-386(pr)51(o-)]TJ -128.491 -11.955 Td [(gr)51(amming)-492(for)-492(the)-492(soluti)1(on)-492(of)-492(p)51(artial)-492(di\013er)51(ential)-492(e)51(quations.)]TJ/F8 9.9626 Tf 267.456 0 Td [(A)28(CM)-479(T)83(rans.)]TJ -267.456 -11.955 Td [(Math.)-333(Soft)28(w.)-334(v)28(ol.)-333(23,)-334(32{49.)]TJ 0 g 0 G -20.479 -19.926 Td [([17])]TJ 0 g 0 G - [-500(Rouson,)-374(D.W.I.,)-374(Xia,)-374(J.,)-374(Xu,)-373(X.:)-510(Scien)28(ti\014c)-366(Soft)28(w)28(are)-366(Design:)-509(T)-1(h)1(e)-366(Ob)-56(ject-)]TJ 20.479 -11.955 Td [(Orien)28(ted)-333(W)83(a)28(y.)-334(Cam)28(bridge)-333(Univ)28(ersit)27(y)-333(Press)-333(\0502011\051)]TJ + [-500(Metcalf,)-434(M.,)-434(Reid,)-433(J.)-414(and)-414(Cohen,)-434(M.)]TJ/F17 9.9626 Tf 189.335 0 Td [(F)77(ortr)51(an)-432(95/2003)-432(explaine)51(d.)]TJ/F8 9.9626 Tf 123.907 0 Td [(Oxford)]TJ -292.763 -11.955 Td [(Univ)28(ersit)28(y)-334(Press,)-333(2004.)]TJ 0 g 0 G -20.479 -19.925 Td [([18])]TJ +0 g 0 G + [-500(Rouson,)-374(D.W.I.,)-374(Xia,)-374(J.,)-374(Xu,)-373(X.:)-510(Scien)28(ti\014c)-366(Soft)28(w)28(are)-366(Design:)-510(Th)1(e)-366(Ob)-56(ject-)]TJ 20.479 -11.955 Td [(Orien)28(ted)-333(W)83(a)28(y.)-334(Cam)28(bridge)-333(Univ)28(ersit)27(y)-333(Press)-333(\0502011\051)]TJ +0 g 0 G + -20.479 -19.926 Td [([19])]TJ 0 g 0 G [-500(M.)-443(Snir,)-471(S.)-443(Otto,)-471(S.)-443(Huss-Lederman,)-471(D.)-443(W)84(alk)27(er)-443(and)-443(J.)-443(Dongarra,)]TJ/F17 9.9626 Tf 321.124 0 Td [(MPI:)]TJ -300.645 -11.955 Td [(The)-365(Complete)-365(R)51(efer)51(enc)51(e.)-365(V)76(ol)1(ume)-366(1)-365(-)-365(The)-365(MPI)-365(Cor)51(e)]TJ/F8 9.9626 Tf 228.803 0 Td [(,)-343(sec)-1(on)1(d)-342(edition,)-343(MIT)]TJ -228.803 -11.955 Td [(Press,)-333(1998.)]TJ 0 g 0 G - 143.905 -384.558 Td [(128)]TJ + 143.905 -352.677 Td [(130)]TJ 0 g 0 G ET endstream endobj -1447 0 obj << +1500 0 obj << /Type /Page -/Contents 1448 0 R -/Resources 1446 0 R +/Contents 1501 0 R +/Resources 1499 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1445 0 R +/Parent 1486 0 R >> endobj -1449 0 obj << -/D [1447 0 R /XYZ 150.705 740.998 null] +1502 0 obj << +/D [1500 0 R /XYZ 150.705 740.998 null] >> endobj -624 0 obj << -/D [1447 0 R /XYZ 150.705 716.092 null] +778 0 obj << +/D [1500 0 R /XYZ 150.705 716.092 null] >> endobj -588 0 obj << -/D [1447 0 R /XYZ 150.705 664.064 null] +672 0 obj << +/D [1500 0 R /XYZ 150.705 688.251 null] >> endobj -585 0 obj << -/D [1447 0 R /XYZ 150.705 622.443 null] +638 0 obj << +/D [1500 0 R /XYZ 150.705 632.184 null] >> endobj -581 0 obj << -/D [1447 0 R /XYZ 150.705 576.67 null] +635 0 obj << +/D [1500 0 R /XYZ 150.705 590.562 null] >> endobj -584 0 obj << -/D [1447 0 R /XYZ 150.705 544.789 null] +631 0 obj << +/D [1500 0 R /XYZ 150.705 544.789 null] >> endobj -1450 0 obj << -/D [1447 0 R /XYZ 150.705 512.356 null] +634 0 obj << +/D [1500 0 R /XYZ 150.705 512.909 null] >> endobj -1446 0 obj << -/Font << /F8 438 0 R /F17 579 0 R /F30 616 0 R >> +1503 0 obj << +/D [1500 0 R /XYZ 150.705 480.475 null] +>> endobj +1499 0 obj << +/Font << /F8 478 0 R /F17 629 0 R /F30 664 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1451 0 obj +1504 0 obj [399.7 399.7 513.9 799.4 285.5 342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4] endobj -1452 0 obj +1505 0 obj [892.9 339.3 892.9 585.3 892.9 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 585.3 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 1138.9 892.9 892.9 1138.9 1138.9 585.3 585.3 1138.9 1138.9 1138.9 892.9 1138.9 1138.9 708.3 708.3 1138.9 1138.9 1138.9 892.9 329.4 1138.9] endobj -1453 0 obj +1506 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj -1454 0 obj +1507 0 obj [533.6] endobj -1455 0 obj +1508 0 obj [413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 413.2 590.3 560.8 767.4 560.8 560.8] endobj -1456 0 obj +1509 0 obj [611.1 611.1 611.1] endobj -1457 0 obj +1510 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3 750 833.3 416.7 666.7 666.7 777.8 777.8 444.4] endobj -1458 0 obj +1511 0 obj [339.3 892.9 585.3 892.9 585.3 610.1 859.1 863.2 819.4 934.1 838.7 724.5 889.4 935.6 506.3 632 959.9 783.7 1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 1074.4 936.9 671.5 778.4 462.3 462.3 462.3 1138.9 1138.9 478.2 619.7 502.4 510.5 594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 530.4] endobj -1459 0 obj +1512 0 obj [569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 323.4] endobj -1460 0 obj +1513 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj -1461 0 obj +1514 0 obj [639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.6 494 437.5 570 517 571.4 437.2 540.3 595.8 625.7 651.4 622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5 490.3 465.1] endobj -1462 0 obj +1515 0 obj [613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6] endobj -1463 0 obj +1516 0 obj [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500] endobj -1464 0 obj +1517 0 obj [638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575 1150] endobj -1465 0 obj +1518 0 obj [726.9 688.4 700 738.4 663.4 638.4 756.7 726.9 376.9 513.4 751.9 613.4 876.9 726.9 750 663.4 750 713.4 550 700 726.9 726.9 976.9 726.9 726.9 600 300 500 300 500 300 300 500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325 525 450 650 450 475] endobj -1466 0 obj +1519 0 obj [625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500 562.5 1125] endobj -1467 0 obj << -/Length1 1782 -/Length2 12254 +1520 0 obj << +/Length1 1745 +/Length2 12042 /Length3 0 -/Length 14036 +/Length 13787 >> stream %!PS-AdobeFont-1.1: CMBX10 1.00B @@ -17138,7 +17609,7 @@ stream /ItalicAngle 0 def /isFixedPitch false def end readonly def -/FontName /GPIGCD+CMBX10 def +/FontName /STSKKW+CMBX10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def @@ -17164,6 +17635,7 @@ dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put +dup 90 /Z put dup 97 /a put dup 98 /b put dup 99 /c put @@ -17194,8 +17666,6 @@ dup 49 /one put dup 112 /p put dup 46 /period put dup 113 /q put -dup 92 /quotedblleft put -dup 34 /quotedblright put dup 39 /quoteright put dup 114 /r put dup 115 /s put @@ -17225,62 +17695,49 @@ S ?] •ˆFÂx¸Âºþz¯‹DÈL•_‰¡>b T¼vÊ»¿b–Þ§œ×ÈÆpñ'aŽ™uµšˆ…á&õzØM7nGkßÚÈhûjúÙÖ”µa#ÄÙõSfÐSµ/+ 츮 †Å5æ&`8­¬þ1?Îá¢æ‰’¬Ê{·ù—p~£wÓ~¦ÿ5¿¼(f¥r³‘ù¸Eh]º^bñfè‰÷hü•»Ç‘XÂ;/Ñ%o†¦OvÙšcŠÀÜß9³ÁÂÙr²çXo$²Ý’-#z}ÿýfSUÏ»îy;ÿÍ”Ïýº>r^ÜôÍä0~;‘‰:6]ô:S½ÒSŽ( xŽ:b´ NPc´ Ái:(O¤>©¶EÿQÀÓú@q;¨y¿Ãʨ¹Ø… Áª‹¾§ïFšï nÍ<&ª½S^Ÿ½ÅÏ…‹üØ'¤,ÅÌÄñ5:8 N‰ø «:U6øHíÞ¢ êS¥µîK¢äL M7ÿ Aä“þÚoKrî;pzþ·ÉYHbòЫFÎ&/ԋ㊞á5Ý;–O*öÿ÷'²Ïà;Øòƒûh2Ãã÷˸¼«2Ï*ŽaK»2GËÿAÖ`ÀOn˜r!¸Ll‡>ó¹Šâ¨¬%hª.ŠrÂYèìaS¦ùC-÷·ýåµµáËÂbë•Á·Eshî¦mb©T/E nãHÒ.œiþURËfÍ -ÝSK2™‰´Í,‰ŒƒMüÝ…S°Èv;Ú -tÐæ“8X e‹!aªdâ¦í3|S„C–LòÀÚ‡<{ÈØ8ž [éqЬñ®:çÊî£ÈŒŒo¤XßzÕ2yñ<ó7Ý…©èŒ67»žÏÂ1\T³"¤;;ïß»—¨Ôçò«_.¡‰Ç®"˜éÝNd_ËugžÕÞ´´Òž`8N´ÌH2©Üa·ó­Ä¨{Á€ñ«¨KJ X?X*$‹/ª/ž6¸ñín/½ÛŒzÑoø= ƒšðÇ”;®+‰¯^Ö4'4b!ŠíßÄOíZµõ®ñú-Á -)BïfJ°Ó ü©í3Ežé/@Üîg©å¯ %³&U6ºž!Ñ<ƒîZÂdæ”Ê!¦ôq«»ju¢é|úÿ¶?—¼8™t¤N«6h³ÛEûnÿõãèG•‹·)?°  QüuÌ\ÎJesovó…_,-âÂ[Ì\gËYºÎ3!s&ýöb«‰ -íñKÁÕúÊôtT¢x›¾µÖQÖƒ¢jšpÜäGl¦å´IãXw¿k²æàPÉ9ŠfÛjI—š г)´ÒÖKmDŠÌI]¬·g›ðhç ‘2X!Í‚5’¾é1´éG  GênΞ];<öÃ7„ŸÜo²Þ!”Gmèø/Ô¹gê·v5){cƒ*ݨaB™tê陜øV@çºò:ÆíKk󺊌%±%àAøå;V©œft’–%Ÿ!ÝâoÍ\Ïv;Ø1b’¸ßæPÕ± ÷ÿË=ؼbñoÞ5=k4Ç‚Þ¼QŒ^ð½‡Sz·ræ1× Þ%ÝHß -w@ûy*9ο¼Aé‡óñ sŸM©ˆh€·ª8xÆ -án",H’shbæK‹Á†q@ç?w£˜Fɶµ‚OÓÇ/–¬šk4@ ¾ò*•ï‹|Á¿½ÞR›ÿ«6?Ï7”íçài§znçcÁÃ["­°÷Rf*FŸ]‘†»ÝXŒ­ß³V²ºÈ¾7Dþ-¦m9„Ç¡O•?®ø•”eo¹ˆ¹=›_<Óîîl(ˆ7·„¦ØÝÛŠ:¼Ü#>µƒ¬|’æ…r&¶ô/®÷\Ý"ÎÑ©™4„^("$Ìòe‘ŽæLXsì6}ËDFy8°çœ)Ýå„°ÿ“ÞF7@+• -„‚ˆ¸6R@!oÑ¢6£†6‹5#4kõ -Šâ"‚«À‰/éïTùÆVØ#r#CVZ Ñe¤uÛ*J}ЈƒhóC`€Îñdò¼y¬>œF›¼=¹Ó¤µÓ͉þ[ê p-8dÍrãOoÏ5eỉwQ„.yB.â¦àTž#Í7ÿEó?÷<®ÅVN&^ó@e‰‘)•GWPà^¬†E:3-·ßÝ`v´úx;“ë_–>ùn•HÃ{—uÙÜ`hö‚.wÔíý €c­M’¦`0×)«:€uŒºð…ã'–üƒê`)—I¼.‚/½4ÿ2)X«oµoàŽÌÞj'Gûë¡Ÿ½eŸ„â b¿ø;á£CÕ·ø;OHÔG¨LõSè -c3@¦ÀŠ…ߟ(h½¬)™ù¬ùšû/òNrº ±†ÿ¤ X £i}ý§÷XcX‡Oû[ò<¾¸±.íˆB EÏú’ðžòqÁ¤©£%Ó ¬ÞXR/LOÃÞbçèõüß"l,a©ß^­¡à5ÛY(±V -\ªÒÑÏ9öê°I.Ušá¡UM}}€ÙÊ„À6Ã=ó¬ûÌ¾íª²X ³²d+K#xˆ,Ùùó‚¯âNn¦Õ F_6M?)nÞv ôfŠŽ¹")-ól¹gn@­(€çÛ`g„ÓeÊÝÃÇò÷”§ú¦_^i<Ó&,C}F9Œp}(üOÂçl±éºÉ^»®Š F´ÕÊÇ2ŽhŠþgÇb+›Tb ·]B‚ÄÚ5©v2Q” ÁÝr«ì(löråì-K/.~œŠXCÿ6¼gš‡a¡¯à·°,ÚÔ˜†T̘…F|Æ•l¯¸·áîv^.ÃØ!ZÕVúF3‰È%m2ͧáEÅö#Ø\¡ß]x0f}`RE‚t!X×Bjr{nV/¤E)d7g KlùÓmu6¥5^¨ãôÙ>.þM"óJkp¶"Ž€FMßKƒ¸Ül3æ!|µ¢§I>Œ‰yˆPœúzü?ŸZÔ'øæ’-Q3K=ëµôm)9ÚìY~KHc5{jÀ™¢i°ÄlgOÉY¶p‡—é¯1]»%ɦ·÷QÔ»’°!E•ãaª)[xTq½½-ÿÈ8™XE@Ã"¤•}jÒ¸¯J?Õ1GdšFƒ¢@ŠibhÎxÈ%ÀÖM¹x²Ný IÔ~‡hKOTÝÓlÚR³ótu%ü ? Ñ¿=D+ߘ²Ò–õtR„ºÈ eª¢ ¬wH³žvAï+…ò0Yj@©b^ã¬2ò˜-mÜÖ—½â‰Ð!ˆ{ö)¢#h‘Gƒ'C(µãëìDhYò7ÅkæÔµQ Ó9*õ5/ғОwµr"&plÿ»’ÿi †ú·ïÇ¥åûfP6¦WÙ;i•ÎMM…« ¿ÎÄñ¤$F˳¬_sÛ-_œÉ9ü¨½øJe MNm[›ý/MÈ…V·¸C¬"%¿¸fmMË{Ö¶Vî±o-Br³ýŽY¸ /+(6Á Š-V‰Pa'1ÁzTû}ðÔ=S\ -¾ŠÁÓÖÈÍ‚?²Üxec”ù¥Ük:• Ž‡g­G©ªnêÝá´µ½ öð l–œNš»¯ öâA$2ZdHt:ÄMp„=v£6Ü]d¬êåp*c–?ÝÖk½nZ&Öè{ªQ³(r>s9ãi -¸¹vÚY°$/®uÄÖ°6¬hßõ¯éóúrÑwjZ0†+išðÜgò:U  =\ -…³^o[‡ = 8²ç -Ì¿Q£ë)wX¢q¿ý§g)JRÖ#lùŒN0²”Z)®hh€1m{žøÔò‘àÖ¡jç÷é~Óúwrزglñ-jùŠ%ÛŠT©Áðe’P‚ Ýl&ºà(ÕenD|¿ZI¤ -5Œ‹£|×sÿ¼ù»ûæ<§F«„”¾3‚ɯà*®"°íõî]šÎå“A-DÑê„·'UA:Öý š«âF§B‘'|+BÊ8ø¦Ñ6ºô³ÔŽ7·& Ú¿ ž‚V8»å…ßêP[h²¨Ÿý<Òt•xR¿=Æÿê({ã(]ŒâU(<²º›¡]†®éð|¬¤ší½·¼+¢aƆˆõ…GVÈ»æc’z2OYX-Ã^«½‹+rÓmÃÇ7]"¢Ûw–uÂ,-ϼ©3NðFð?—?·`¡&¸)ð/ßEã*8ÅÖ{ÀC$Þ›j¡Cži -6e–ÜD³¾{ï N¬câóidi4š3¥Ý‹ÉV7Ç­Ùò“3bÄ¢‰$º‚dÂ/ð5k±ç#ÞÑNÁÌ“½z8ëmà7ôsSûäWGd^úÞ"PÛZ¼B&ç~Öö·Ÿî¡s"Êeœ:fC*®.^ ÁlOc €1¾ª}?¤=HŠ‰Už`õÙЪ›g!r"”x`m€ -Õ0ÉrÑQpλô¸K¢¡1ƒ'zÍŽv œ'ó“x¦MŒ§[ù'‘$üÄc4Á·f®S£õ:o×á3ÉT÷sæ’ÿÎ#ýÒåÕ1ŒîÅCt\Lù3œ¼>‰CÕßxûP3üž¬÷]Ï \ô¹8lß….Or—iº†ßcÁ’@Ùñh]; #h”Ðâ€j¼×ìBÞS(Z|M°ŒhæA:>é<:z ĮРG‹ `~6|åë};†nŒÉ*u‡¤Ãi' ÷¢.ˆJ¬¡(F†8)]Wåœ,ë³Ç="”ƒÅZäêË.ŠT¡ óÿÇôrSºoKĸ8ô«¶®í®B«7(w¹ï -9ྡྷÁšs¥x¥Î”B¦:ÞGz}¬åÐÌΟ)h*´¢R4÷µëò5 ÉÝ<@ «a—ô"½™TÞÖ¬£°’¨ -édÈ}þE§SvOèÓ¬9 Nè¹SÏ"{oÍ—YÈÙ¶ÓAÒH#"„ÖWÖ9à3ÅŒÐJÄŸ@µkUË"œë|nËóÔR©È -¥QïåÇŸ£¥˜£c¦G‹À&ª‡‚bê×FHߦfIe‡"ßùܱf¸êåÍlóÇtƒ¼0ÛõÒ¥;U°¤)ÿ¬eË -‹ÂÕy†°l:ì-1ƒƒ3bú¾…5PÆŠ@êXüàû—»Éñʽzþ½ÖŒNpUm2sظb?Ù†/ê¯Ìž@©%€ rAÃ-ÈôÿpÉk€[ÖvÕQ<ç;k³éO-êã¦]×"Îi|¡¡ tØcŒÌ¥ë«Ñsf~ÉìLLv¯¼cü„Õ)ª‡V® ŽÉVÂúÁ0Ðö pvpÕÏ"«âYnOsW¤ê§úýþã+ `Á–º25Ž½V_ùõ4h)ÓÁ5Vz^¼>·ØT)†€tÝÑÕ,tÅ\O0’øa»ƒµH$Be §2‰Å׆Ϻ58ðÜ6˜(éIPez¶éÈPóõÚg*¯Uù{ÚêÃ]¡"tÍЭ劰á]¡çoUmžÆŽox œpHÁ¶0uƒN)™Ó‡hW°iìÆÉNDŒœ³Ú‰QD!QT·‡¥‘DƒDßÜ>Þ¨ßG¹×ÀZ£ÏYZ¸ñrÅè Ð l4¢í$€Ö麚¯ØŠÌa?)òþÈæ1kï*ÆŽT¨¶ÜÍ6°Ç¹@y¥ ·’·–æšð1WgŸ|€l€‘©wEÆ<ŠnAX5å–#¨ÍVàr.Œ.œ—ôz<(ÙçXœ$2Y’ûIÌL«údŠNU³0>o ú$†ô mxß°ÿ¥M—Ä”z]î’±øç*×cSÖ» -”zQ`òH½»£ ¼6pA xï”N¨¹ë«‹ï7\Ø!¤}}³zM­Ó÷w#«©Þ÷;YÄòlÃM™0CŽ9×Àrƈ3ö5Î7ToSÏ 7oHˆv–Â꾕(Àiv]¥«TkÜÜ!¸ ( >>×B£Í* D0Ñøœ3+&­WE«Ý×…Oõ–ÝOˉ_X“"' ú Ð<íqEÞ·ÛäæŸPµQõôã1ƒj‰w­Ï lÞsP«Z5ÏŸ-´4ÈÉàÅ!ZÒ9ÝY®; ê½¦€LMI¨6á0ª&ÚœŒØ }&_E“>fê²ÜSÑÅô<€+ž´4{ªž›¼ÄZôå º´’±÷™ï ±¥ç£Èùü‰VãÎËæ÷m/lh*S‰LÇ›g5àQ‹JÚèZkrHõ¥¶%–“^ñ#’³(‰ºÔ…Ö‹°TÿÚ4¡Ü.n©W8ò’ߌ 0ó× × e›ù*ØF<{>¿AšúéôËéC-Ü4úû'[Ù½p‘öiº°`§y]C ˜ÔMÎW%e ©6 gÁSý‘ër46´<¦oÉò]õ)`0&Œñ-{‚Éž³ •±¤Â[ ôåßôm©°’&¼jèC_§z„3 _ys}3Ðt9õÁ£kȉ‡)û4• KTü¦”Œ(áoþB^ûk>‡äÈÂTû=%†s©no©º¿¢)ÃL‰Zû&¨u‚º#Ü »Ù®J= ¶¶azÜ©G—c7›ö2>Þ%‚ölJªªÔ· ¯“Ýë¬$›ª8Ây·H§T¶‹ùËt¢@aò ¸$”¼¨ùÄ“úfiRÔìw»k¦\€ª_𵛯K÷ÚòY”Ãm)f¾§˜L… tRÅÔhC;øU’Ý£É<ñ8&£å¥½äy¨Eüp1¢[[œ§ñJ`CßØ/ßE£,&/÷½fÛ -ŒqyÓdHÄ eÖà]Ùbƒ!'·7?Ä?¼w ?4æTd¯×Éê¨.ž4Œ8,§Ë$è°É•9{>ÃNè.ÑÐ"kp$~ I]ÍöT:e†~ÕppK&ªºéõÚ𿘞r=ºDÿÖçuOƒr“NÑ;©;E é–ã·^Ñ%ž¨Ø<=‡Ø|È ·P e'¨ -ƒŽ¸+›Ýõ: -SëˆÃ€‚DNÓ–,è6âÙΣ½»sÒ®±ÞGMT¼ZŒS0¶Rp/~$ -ÿ$9m?ç]Ÿ0VE›*>i¬(¸Þz˜â`™G¨r¸‚ ½k¤ÆúQ -;®Es‚+ä©Å¥'yb•²$Ë·‚Ãñ”vHû.`a]2e°š²hR8TÊ4¢éû‡ïÇoÔÇ•GÅo»‘È|çJËx,§Ì¯BÿàéFÑÕpŽÍÌõCò¦göãTœvÔñšÐ¬üP}*£§ÂƒHÅ„eyËñÌWá”w(oek«Ïªt~p4Îõ6Lú“ÐW8Ì…v'uÅvJ–ê,<-D±}³•R;1í`ûÊ›ƒá¼þ U«kI˜Štbüß¾ˆTU’Jþ¥±öPà®i8©Ö)Ë´b¹þhº‡›ØuF¾åØÃTà†<¶É&݃Ý(]5…½@Ø ¤K1œí»œëó±%gãÈåOl"C.µSò*mãÃkzW_é+»® ¯Ñÿ•·8…ðŠ ËUžvÀ0+‚J!AyX4ÓùŠÔÒð4?z æM0')©oý.Ðó…ó•Ûså‰×”¶šQá½!TúÓcÆÆÒh$²õB…w&Sƒ6¡4©Is.‹W3RœÕÃd -tš½¼¬ZJš¢— ë.¶7ó¹Tf¨HÌÉd¸/`fC‘ÃK¼ÚèH¦^k%» -ëI+­˜pÑþAWß?úˆ…Ûú-Q¯Æ©nàÓ˜’T^hå C$^ÿŽÉ ž:a¿°¢YÂL•ÿ™SQwûò7iZAnÅ.œ+{}æ/Uñ¶hÉniÏ4Ý/AÓO›ÓŸEßC¤¤‰Í€B÷GG÷ /%‚v‡ ÎéQ"W7†ÔðãÖùù6}ö@!àxë!ÏøG-µœÛØá·¸³’Ob3ð˜1®B[Íx9D€êJø´[Úåtsjv¿»bN^Lhc~WX˜KÙÆz¸Ý.Òpµ ~´2RºàIóý ¦kGÞÈ2R|lC‡\QŒ]d²¶}4ÕÑ3Š¾¯Dv¨`ÒŽr*¾– U-HN0ÎV'ð¸„_^Æõ=$9äü¾$†jpÓ.Ïß{- öQß ÜVVŸÕ"fÑÚqÄTà{àáüèìr!ùH/¦»<³úÌÁ·³´ßu)@wñU7W¦E0ý|+öRî)sÓS~X—R‹;ÒHçá@Ån½&ÏýÊÊñå\ÈÑN´TèìE…R¡¢(U·F¿cÈ®A¬ÿNX*©Êïu»Ç¸…ìPž»<¹²TÅÑqNaÏÃ_¡Óõƒ4Ä¡m`·¿h*š= -&–Û-0àõ -ÿÄc­Õ 3äšÖ5¬9^&µâaF›OuCE¤36Vc8`°ÊÆâG‘õèÅ%iË°>oOÎÊÈb-È‚Eb”|œH_E†ðˆeœWöÔu -]‚¨5@Ç)˜£ˆP: LõîÚ1ûl)àÄTß²q^ùýÈ¡ßq:e;NŠ(5½Á邆µ¹-¨ÊL*#·kˆ¿<ÆúÎzD°qœv>¶bÚ*±—UÙÊ87¤ö*…'Ólv£Ÿø–©XPjŽsqÃ|9w×xçG¯hš òóÍç‘Ì%ïÿ%Eê;þã%ÉY¿j+ŠÄ£ßFŸ§"(„[ƒUÇ[0Šœj7’_ŽQÏŠEµÍè+‘»SÏJ€üÝç7i`šˆÕhƒ -º¶^… -œð-ŠG¶|Ù|,|=¯I¦jÖ%Ÿ+´%î¶pdJd»ÉÍÜc—}¸Žþ)ŠëÜ2ãÕ×ÂêEÔ´X᧲RL€huÚ×'r‰ÖKqb‘wn=ƒæ“5Icî`¸u§Í¯=ÊÅÌ‘«ÿ0Úð¼Ý¶½‘§†nÑcîxT±-îëùÀ°²•8é¬)%*m·Bûgw¹MqÚ×È©öÊçu÷÷yk¡'‡àJ:[·ù—¥³Z$UKLcŠî¥‹×-…Ëé1ÑC¤m^ëo+¯Ã°WŒ8q¢Â}Ó@¹IJ³Uª?Ipµ¥0X@;Q $§Ê9rĸfàÑ›ô ÜB—]ãÕ§|³g|eËÕœéäôÎV¹&q˹j©sl‰ÝÎG)qüëpí…Y_¨j«¿d²ðæpÖÁGb ؽÉ$íŽ(4ó×ÈÄ/RHƒŒãþé pm_Æ8Sö¢¯Í þÌkÚïHཱུ{E&´L=¢mœìâŸÚ,‡B’˲²äoš6j4cŒzDƒã;ïÉõ8j£Ó)VÊŽ·Ù‘Óyj’ñÆ1"C* Ý³6ì½"[Ý¥ÎI§+±Í™L›óÏ8}ñ‰£«$Ö¸{/‹•jk®ÂæéÌË])çq:ýCsʉÁÄsqrPö,‚#Ýný2݈AÞðÔþ.%QbXÀ®ÜñP¯B›ÅY×ú˜¥lǼe³Om0çu¡4ÅÆX*£viŒ+?«, `Iåµ-ŸöÝCcžmÙiA€~ÞÞJ¾ =:/öêÍK˜û¼¬¹HzP”†>uÒv¡‰8Tâêܶ9+aVgFòÝW;¬–Gÿœí6ˆ*lñè Ì+ïBÍ*‚†ÔxŽ_­úŠg¯ú¨%»¿¾¢~3ì€Ìµ‚ÊG•=ª…2«ênÕÀ”ãøŠÎ¶dÞe- -~Š.!€Çà\(Âr{'c˜_¦B£Øq,G¡×ù}¢Šª û¡(鵄 !Óò`o™1MF¥¡´:Ü@‘¸Ï4°¥HiP]O+?PëJœ@I‹Ú>·ä‘ôP·I¡O“ï4»«C§4ŒÉ+6û§U5Цz¢žžÊw]˜ `ûyr.‚ß"a øU/pÁÏ8!Cå,ù*Î…¦¦,¤‘a„ô²ÇÐ1£ãs ”®8ª‹Ísqv ´Ž¿Þ¡cg{aÁ‚›€–2,†÷Î-6d€ª¾ÞˆDx(o·t?B×® lÓY“ÜŽlÂÊÉÛÚÃPÒåÞSªë‹r…¡—¸¼6øzuX.i[Õ.u✗!(ÆkÏ©Hx¢j­£©ÅRg'Š“5«.CÈúÓTS´t/ýÁ¨[Kë)YX.%›8‰L{WNŸ]»‹ÚÎYmbJØb^õÌ`évwyÖÎ7&Ÿ¥gHØWբД¶É`Ã<ü¹$_>?ÈJN;§Xýб´6)¬’ðϽürñ¦ª{IŠURžÍ_vjêð5 »€¦Äó&Š~æÅ`YA2ìy”AO5 ÑÐÄt}Ÿ>‹ÃOx Íd;â•WÛÚ.4jŒ<9e•X#ËF¥ÒáŽhÕ¬ç-ßÓè‡t+`m• -ž£ÚêI†/`ô‰™ëÀŽÛl™vP°°¦•­6SÜ[·hY1uH “–åZ[}*Vê%]RWYùÎ […ÈÀblÜ3§Iö°'ä?ÂûG$Ží …r¼§íà ]ÖøÂNû¬×P ¡õ´OÁ0A·sX»O6 -â@hܦ¸ïdH®Þ%p"Ù¥„‡i|ÖØB‰ol\]÷¨t©hULa•d}ñX«àæ°×.ÖGÃÝòø¾óŠ¥ÉˆŽ½Œyûpoö,¹ˆÜ)Ldn}沟‘ÜZé»C|ND‚Õ[8±j„ÓWQÈèI,îÐËó¯Ýu@UÜ“vØ;„w>æ[Ó•™|^\â׃±ÚCZSê™ Û;ÀRÅ:ãþ`³„Öá-£—DœáH¾±?+GO -ìÜ¡‘<‘ªµÑèÄ­$ºÇâ4®“ZÈõPA«Lùñ…‹}îõP£˜Z¾îÓR}Åcb¯¢—'WáÊ° -qèZÚÐ#zOnܹ‹úH8FOŠÔsêï^n6V'0¯ÿÌí&àJzµ¬ïæ¯Ö `‡µîE„A%/_ ¶åRHZmlD5¾ou KŒ)!q¤Š‹HÇéP°s‘"c¯$M¾®ÆÔÇK൩¤¢#IéI€q@к¦?zÈdItûË{ÞÎ7³ 錜§OËéI®ÑŠÅËíàôKëDµ9Ï]d¦ºæ# Bœ–tÌ^[pØÙ›=^ 6ß—é «º–íS¡×TÚ òõÔ£xÚ¦®EL+ñ( -©îóÓ=ŹˆI£z{ù| ]{íÜÒÂQF‘¿«Î{¹ù‰Üª3~0¢›ÿ þMŠÌ7•d²«þ-áç•öŽí¹b~µK§U"%ò¢I¾Ý…wˆ ŸÚ“!x›€ÞµgyMÅd5EˆÄàwè §HPÊÂ(§5tºÁ‰Ü -ýBO¸ïK‹F¨D#šñÍ«¥Ž»$ƒÐ 8?·ß5 àÏ AœQ¬âNåjvIGqV^œ äGû/ý«ýfhš mFå™^êÉ#!î-¥ÿù¨q+áäaãf8 |ÖÊ99»6qÝRŽUdÿ¨5B£»¹þµjÖx~jg§¡±3 é3ss—v]@¶[ÀÌíwm"‹Ÿ¾¸Ü/"ÚÒ°UX^V'°õ'Z?ÔÜI Íô¦çn)}”yš¸‹^2^cºýî%¡Lõ×’ÃgK;yÌÏí:¡z:êFÔ*È¥"€˜<±}@¯_[è„‘ÃÆÉãB²1áÎâí6 Èk -#ÂK5¹µnBb ð'î 3û9ÔCPÙ»lO‘vµ!ý­H2¡š«¿¥øfë `}=j{¯« pH8¯¶O5ºãSS®™¨öQã2Nñ£n Vg ¯ðŠ"¡öeñ5ïuö‡,­o£¹¬W°¸’8—1ù'eë -„¢Å‚á)š.ÛVî -‹>³²õljˆ¾P‚k–c’ñ²Ì$R.=Yv‰^ -GCÆûÈUÒµÄÉ^Wñ¹€ÄyÇJŽùžüºÏ+ÔP¹ kÈK´Þ¾f°ª©ÕéMš´;K_™î.½ìÝ0ØΞ8’¹œ±¸n3(Á Üÿ¨Lç\{w¡ºAc°ÃæüÁ»©Ò?d{ð6÷ÀÆQó/kjýàÏô“Ÿc Þ4úæíö8 †*Á8Ä㘼äMl¹tíÐÁ©Ÿeš²0VÙ[Lwý‡¦ê×I .Ì-éŒñ?Ý Uÿ͇̂òáo¿&µ(´È°õAP ŽDÂ6®?ây6  &³`‚„Ï"´}âŒpÐ:$Œ`fSÅå˜`Jc9BNÒP“¨ôÝ|¼GŽ{¸©“þÐúcŠƒä4s}°âê>´\ëÝ•AØS©âQGä´×ù¦žFk œØ:ôhÙ -@¥<éòð¦ç»-XºÙéï0äÑÌ>oÍÛä*_¸ùÒ/4.<êd¬IK²'¡8Ç~Â-ã ‰±¤ä¦‚:b“?Ù˜µÐzûÉVà>PÜh{o…±£ëù ôÿ½xÏGz&JŸFð?çÄVv0ã}TH´.BÁŒŠa Ç‚°?íLÝÍ ã…Y Œvð¯UúbVNÛí:ÁuX ÁŽ†IÛ‘MBN¬‚îa°ô,ü“o¶ŒO“«n(ÌhPÇ:È,;©‰Dã1Ü0榉îÈPâ†oIÈÆšÉ*7u1WìºU|ô’ŠMM@·þݤ2d[Ã]žԹҩڻİn+œÛ_¨ˆKÿæçB¸ ¥["™–ñ/qYÅ–,%bKŒå.6Ÿóm¨ -a„OdGù -ϲÏØÔrÒð†¼“Ò,óîõSû'ÐDz)…ìSªÞ!x°¯°£ÊœõÁíÿåq8DËå´ËQ¦ƒiåáÈ>öŒéš?駙+™ã«lÊÝmªJðoôù}܃¹Œb6 +!¥pgs˜è¸”#›ÙÁGšv™2?ôH¤ðœ¼Ò=d?yåâÎnL´‹‡1­ÉaÊr¬„!¿9÷´©¼$íS˜Ö`ÀOn˜r!¸Ll‡>ó¹Šâ¨¬%hª.ŠrÂYèã ­ð'‰‰Ì¬e1ÆgµÏ$•ìušÐîbSÝ>Y`TBÌ”¸ÚÛ3ÐIø¼`ë»H,·.ÅŠ×áîÇ0Ta÷¯Z¥·ëÖ¼× â2Ÿ†ö̧«)Ö¤ßÍ–÷¥qáKæ©“ dT‘,O%ž+]ìeù>ºû0K¦Ÿ£‘jób(lŒFØ,7.7DqôÊ‚[‚*uz¿A‡…×)v>\û2ńȪE½æ¸3ŒÜ9#;Œ01¦57ÔQLòÐè‚­8!¼UP÷K#½¸H^MÎ"yëDc]—fOÙs=¨Æ7­nntþ ÁÙñ³–”Î(ßÞ–Ç—¡^G¸÷RqÝ_^¬P”„íÓþÛ*¿g8 “º#µ¡^𫲠WYEIÕÕ:ÅYa_Êq2!“hA¡Ã;ðK‘®Ë€eãÓòx|ï!.úff»ã3D!Huž¢àÁNî’KMuEXûîÿå<Â>nÖj òDPr%…SY­¤„j” +©»ÕÍåaÕp”0b,As8HŒ9 ËðDÌoä5¢Ô2¬,νŽ0>2¾I¥ŠÝöGÊ%=æ¨Ý•ÙÑÉXöŽÎÓÓ§@ +3mØ\¨S¥P¦—žÇ÷,šÆ‡6ÍÕW'Ë8(…..ó1™~´„pÈÙó\šÎo‹Ãs…«Ï µ*þÄØ``:ÒV7¨çm¢rè½ê»­ÍBŸÀ«Ø¿£ßi¤yM°ÀY&Ëäžµ@Ãu³Ú·ÜÎl[v}»1ªÅÌïóÛK«³Ó e2ÿï2`Ú¿!„U¿á"ÐùGƒMmA¢º;£©GóGbí}Nÿ9æÝâ(Ù×#;(xT}\I]Üža8æÀÂÄ­ ÁA%\ â©A¿9ƒ³ë±°¥½ùÐqÐC¿2© Ä»Ÿo±S~7ä/o‘­xRÍáï*4@¹¥”nŸ5ÿ7CÆmËL߇ásÜœ%-ïu¸:<2îîBá5˜¦Ò+îiÞZxnc3¹/ÆÐH­âNfC¶6ûR5Ù”8ŸÍüSŸ n«€½¾h·P1H*è¤I¬ÌYå—Πðúi,È~Šl…{ÜŽ‚„íðÜ×¥a¿>Uù¸ÏSv“Ư?ßWDu8¢C5-Ÿ‰‘ê¶cûª»­ƒ<¡Åª WM!vJJÒ×>8ÈI”æÝLaLÀ­—9ç«Špn*@Ú:µ5`B‚äÛâ /Ïe_8_‰xêTv“© +²ÂH´d.CªG–‡yÖø,H_§ßÃçëÕ³Çku@̬Ñç¬%}WÛà +ñVk6šŒÃRIï+XFb T‘Ûv’I9;aøS°mæ€ý +>z|¤Áë;'ó5íø>¼Pà½WÛ_Kwæê:núØÿÀ2Õ,{D×ü¼ÓHÿØ$^ë§èѱ2¢µû½‰®#¾a°€¿è÷óî!Á›i•¿Ìÿæ9#K°æG”QŒ?%ðâIëK5“QD–·ñœ7 ï5È•ï)Ö˜‚tH1w#}m¬¤ôl qãXqŸf\6!Ä°°Ïù&Û±'Õ¸âÙêͬF%`Åq;}Ì*¯sð«¯ã/­õÕÈQa뢬„õnœ Þá㩲ôÁ˜@¢ï~,ú¥D·»îÆØ#hãaÔl¿ª#¤_jÍTµ‚Pðù–$Þv\®„ÞƒÝ{~ÆzÀØŽ®þó™kfºqѸ¹6"Ô$ºmþ²›¤ Ö|Ôveû؆À©ýhËbuf’]Ý +Œ®!O‚¶ÁG¡&w/LðF;ÄÙSˆÌà±r³F̼Ð4cô<+`3ÜÛ5ÉÁ …5¡»)™)ÜÕÎ+f*€a)A¯8Òbð¨‡Å˜ï.x€õä/; ÿ3†¾"Ä0œè¥éâ*ê¥È¶#æR¹tŽÂôÔjhh€9'Ð6Œù†kçìËVéí÷’þ¡=ñÍ6ůRö8§ÅAÛ€ßþTytɈ ½Wwt±Ø“™²¥,ؘ[‡/Ó]¿AÜxÔx:ÁWÒÛ2Ÿ†/á,TN*FB•L62(ý#QÜ€ÛVâýÌÝ^þxÊèš +íÒMÉÔ§$TÄ0 ãE”õÈHиîÚ!oUÛª£d,ršFIþ•YHØ•;ÍÞu‡×]+}&ì; º€y&°[BÝ6ðz]¼¶¹;/*ò†„vAäË[[»ÑÕƒphœê¨ÔŠŠI¢­¸LTóþÅ„7ºÂÄ¥áÄè™÷{{î’í¼ð^µ™K$¡,@ßÃÓÆCW¾Y)‹C›ö%üÛ©þ#Œ!eš¬½Û=×Çô‡Zï!öÒfqÂÁIĨd6·£æЖ˜È°nDIÙÍɾ/íçK0åd2-UÔÞa¾âf~1ø£ßß¹ùÔéä3_ÓW#0L÷Õ­ŸF[Çä&*¿å‰Áû¬ˆ«þ0šˆ5ÌbâÜÉØú ³à›£?¨6“žô6²ÈÂ× ˜”¹¯ûÒp&M>ºêêr¨LF}3â>_ gÙ‚ÚU|X|¦ ŠÙÒ=˜-ŠïtL£F\àÄ_á[âÏ3‹l5¥·f¬{‹ÜÆ›ï¹fO×`ÌBdG­uZYîW¦â0NÍ}*òcÍîÄ5ªßl¶sRQ}I¥•6ð,ls.GboiñAí+pIt4¶(d°¬]\é"»pZG{òòä}å¬g£°É+R]ÊœÞ̦xŠÑƒ€UtܱäT—^Ü0~ ÖCíƒ ²¢:õFÙð =y×Î[®¤Žî‚tHpOOlYgø ¯Oÿµ‹¯iκ§˜ù8¾"V†˜hZ¾ÒcüãŠ'†™Ú8ÏW]Y¬¸à ž12ÇIò‚›@p« + ý¿Êþ‰[˜æDe7¬sÿÑrÅ ^áç6VÜl¤™ò1?Ï£Z Í@†á!L¾ÝKº¨v9°…©ßþƒÈ´ÕŠ‰' +úÿ¶hæ`Ê ã(¬ýŒh±êÂG½ß†Ó³ü¨Éjž(qb^Á,Þc}eÙ©l?°’k—LÄ £ËÙh 4'k¦Wí NÎ>ÌϬU6¦FpfžâÂN¯”>°Q¢D>±¹Kalz˜$cŽ0öÌ6OK»‡·œ>Fx¸×ã s%±ÜOàè$꺪Õ+U€%Ƽ»cÇ#uÊç tŠX½Z/V*9´b­²=¨‡áÒFÀÃ+g2vCW’#ŒÓmÕ¸eFÙBjAxÆ­@­à!—Ò¥/³=»Ã¯Õ )Ì%°oØ]»žšŠàY]í7üÃÉ4¢›o£ï„R!94A_Áh!DO]z²Ä¸ßØHMNq+×ìšX‰•øÝÿ¥óÀeqŠÇ†Ã˜ÐëP)£dG¾«•1oH"d¢š±K6žn$„×æણ˜]iäòÐXÊ¢ica\Qßn¯ø3I>îUæAeh±åu¤J +RLoÊÙ4¾®ÚLçÀ if˜ã4‰3`‹¤ßx†®ðuÅœa—x“Ù‰éY¤ÎÍÅ0Ýì.syÿAözV˜1:=Òrþd±TÙù6³o™ ø:Û—ò£V QÔèÂËR¶™¥Ñí× +ÿ¨_-ωU5[yŠ³:]i9ýà +D9ÚnÁŽêø _XíolPM] úÛLè\Ɖô…yp²šór{îWuî*h× @Kšî0xcSšÖoeÒ©Ç7?pîºñ#ñÜlê¿}„KÈXœð ØRŒ=!­üm³¨^Œ^}''ÝœµÃpq˜IyyaÅáKÂã¹ÄA•¨i,ÓGÇØFOí}p†“Ê×ÃvT8„*Œù’V½SjÊ®7‰~êU”Vˆ~óR-7eI5Û¹‘¯ÂZ“q½·f]fš6CÊÌÊþqÕ¥]±BµÜÔÖ}=©ª0‘ÃË¢EÕØ)&Ó'/´‚šŸ•¶ØäN‹Ös5Ó€•ì·R{¦NŠ¹£N!äºç0öÇÇó¤«È «s©ßÀLÉïÝÍ‚F ~NAÁ,I¿Ú—Éö ÂÙ±ÏFÁ ÿ”=¶Ër«Íwf¼d'ŠðFXŸK‘»ÓSs’5¥`ÅY‰ˆéT;rÈôch"›¶uTÿRo + Jm¸Nÿ^f%—êþÝ~i<êóhd‡ÊZ é_³®÷(ÄãßaÔm)£”¶{Y¶ÌàŸ&…uêÚ 0W¯¤sÞMw­— ¨c0ë—¼†F I¯`¦gòKg&ìÑ1¨]·oAYQn¦CL¾ŸÜÙ™:à„Ö=K&¾ÔlÔdr¿·NiÜÿäɆN[Ãøg™:BüWÉn‡ª;ÅF¨^¶oDõòÃ4I5Ë6‡é¥ÌêˆVèõ§l)‹Ûï•äéYLÀ\SÑ;‚ýŒ¹?ßA&wÈf¨Hã.þZÔÈé ¦ì~ãªvè§âhüæå{ìt<8º†~ ôw§§Àö.¬0 gWGŒ=¨õ[ï>~šOªÖæ(Ë+ùo?€«o y‡*h2£n9ëy(‚­Ëz^g´:€‰2„,­ª’ÓéSj3+U3ÌyFó¼¨Ážü“¼Néåµ ¥¹µseÒ†4¾ïåUj†ßúb‡–¸²à–ôÕn¿^ŸÜÔ]ºêJùâÝÒMW•ëBÈÌÚ£½gã²Õ¥ŸTºÕ ‹V!Á¾éákwîj¢„¿qÆÝrÙØ@%ûø*}b;Å!|¶K0ƒaį%B+'îˇҧoZ}Xòn7.šoLÁ}¾h~.ØÅn,¯Ìr´{AÂ&ÆçP¯I,mµà!…tÓJ­û3M#Ï«Ê·:Öiøæ÷âm'Y6Cª]Øòúì«k¸Úâ©BÃË coR,CûŠ+~&Y×SÜàm·¿þL\Ë[ô`ö–Ô’Qôö¤·t½„{Bê5€‹¡ù¢õ<2.ƒvb7è¯[}íªrNªM`¶ðïÓ£¾H~È°ªg'ºqÏlŸTH?gAAn a]e2…œ3ªeÓûØä€Ë~š`"¡š ¬+ó܃ßwÍ]$ûˆñÙÈçÖ²\B«‡ä’CĹgÝZ¡zã†ìávË¡MðsŸÅ®w±b*às0ÝÙíj€Cfú>WO F™³vön0î- Òˆw£ðäÈ$?<À?îΠx +Wó‚UBøëÎæ^ª¤ŽèÛ´v® Cu£mÞßåwÄ—0ôÖÝÛ–äÅÀ'¿@Á$· 0ãrW‹ ´99qà„à‚¶ëñ­ÈZ$âB¯ìs’Åßyž„Ê@ã ^òäB•ÕeɆz΄<ª tÊ š6AN„ø qŸI¡yÜøì X€wvNgŒz¸œÕ•× ðòPS5ÈÈ@.Ü) ±¥$-Å"h?´LïÓP®Ætó‘j׸úÍ*×å3JTÉF?§7î§tãµðbÛy¤2Q+=™hæçZ#ñ¶±äurîGÚ&Ó;Ôx˜#Æ +N¥÷›÷ål|©˜ímM#ä,«ýŒ¬L§„fùq‘úžîÒö8«‚‘ê㲸…6´±½HhØ—a²ËµÞ¡’™&ìëßÌn~{Å.I‹$ZIêSIóR5ö‡ÑŒ´d?ˆnW¦Õ"w5 +tÂ{8ÁIËQ@Ç^§Z éÜ4yþغPfšè¡Š©‰|@vÇqDæ„­¦hHìRcçMèûÚ,yu’ÞQ›îZÊ•T=[%q¶,ä5çmmhý¨ü‰lƒòêË@Þ¬w† y2Ž²œ,\Zw-ÁÜBáíi†œœØ܉P.iê"mÖÛ…ãZ'q^RYâE"=¦?Ý–J%ü¡ÏÊ V­å¡¨«I7ŒG +ÕeŠ¬¶êñc.4¨²­õÜ—ëza&ó&XK‡}Y « ãáô„Xg¼ïSrkÔkêMŸüÖ (Ž Vp-ð®ˆ+Sëø2kG¬yÿ¹Ê ¸Ÿ‡XÏÐë”®Jz–Y°$ úˆ+ÊïdœD~Xðœ»j7 €¦Zˆð=Y6Ý*,#bc¶ƒP ák‡FÒ^q,o=ÕÞrLë[Ë öÇú++×)¨¸8‚ž0‚{\8ƒ^å'Q&"lò¬™qJŽj!û¶4º‹Î¿!")âÍÿÚRöµ¬²VŸ¢@íRHí5³Ó˜³÷Æ À`R©þÈà4º@J«þÞŽR÷ì;‰ª:CÛnþ€|Ó€X˜ì<|ž®x®ºv.²jO¹‘×Ã!FHí_‡·œPïµ÷I¦ZP*Ÿ-ØuÄEÈ_Ñ >%¤|¤–ã>ìÞÆ%ŸsW{¬ FÂl½ˆdí"IÀKµðq¢`²¤VÒLÐÇIJw6ãt0ü‰µpùžÁcš³a'ª.ÜM”Ôñ‡m¨•Î¤)›µú8j!]4azr§–9UòFÀH 0^€†ûiäxIº5²»®Žõúèq¿äßð{q‰1~„É–qŽJÿg,bþT¸@(ECóæ¶â¶-V‹plúæÙ5–YáLAÈQç¥Óì\z©,ðÉ*s Ø­ÍAÁš ô|Ðõû `f¥ù@±P²R9"÷vAzÝòàÓ¦_ä5¥Ô¾ lhÂ(ÄÌUãòÔ@pž~€S} +*·Æ¸‰í"¯UL^ŸQÞZ`ÒwYÜ4©Æ8VÙõ‘ÇC˜¼RïZ]s'á¹1JõngˆB³­§(ÞŒ“«I”d_ÀØVrv…M³!ž¤örøAk³íG¡ô´¬Û lô(E W–ŒÄªÒš#€ÑiUühr‡V/¤Ö”ÊBbs$1–jÙèH4A¸g ªÑîxËqœ…¨ùÊAßùN&1,ìæ¼fJdñjzc_§Ã¨V„·ËoôÏ¡XÀlTêƒgq°T^¥nÆëaJoŸÂjOWŠ8þ(~5 /edWñÀÄ[n¯™ÂÅñbUöÀ[òEh4Œ Ú¼›\—=Gó+Ãà€õW}HMX Ñ9¶œÝãàú7”<Ó[Æ“% ‰\Nø†qåHÅ +ÕbR¯9;Ý'µ/®ÝVËèšX]!Ak9- üÊs8köWO½b!cƒ WšÓjýM½üVHèòy+ϳJ~q†ì§žæÐ/*2}‚„LÎäž·ëÚ½$¬„¬‘®óˆlÚÃ×d²ýŽŽ€â#<=F9¢Ñd×:ìú-¦ìA.ê´¹éÍ…Ô0ÿYÞ” !ÓÆQBËÊtWõ®™Zã=!dÀ¼æïÃ> É®0,/,@§àl,vZÈì>—¾á>Dï-ó1îBöÌ™ƒ(œ8C£°õåœHŒÍõ€IÐw–Ò ·Bá¶N­2D‚8{ͱ™®72vIÏ+ºE]Up¦Hþ„džUJ4Üž)ê°¥<Ä@@åA´Zõ.Ù=+Ø_öÆQf?ꇾ澌½Â•Ì(ÔÂîPD¯Õ¢Ë K\Ž3®‘içv±iÝ0.7›GD„D†ãå¯—é² .–ª÷‰Éø"xq~±i1õË<æÞþt?¢âU=_¼¦Qº §¹Bø¨ÔuD@l"*¯=yã¾êìðJ`§c• ²›"wýœpˆ¹)ÊhÊÌÃ2 ¤§E…ņd æ«kª°Iri‡ûdOØ4N›C‚ZÒ!|`±7HŽàî'ûÂHú Á= òE”æ$­Tò!0VŠ¹±×Ôî9«ÎÁ ׆.:$½Ù%ÙÄ x¢=ÑD øµˆâß|J¡ ü<ñ(Ë$‹˜\êYÚv?ÝÈV–æhžù®‹ÃÛÎáš7|¤þËå¡É¢a2aÎᛟÑkddpW/h)¼€‰¡-§Xè$ÌÃàé<ÄRPáÕS‡µ¶>ÐÊÃÞ“ÁEI€ê©9>†bàÁc×XóËŽ¤ûô½Gl§©“;Ë«(¡×ßÜq_Ö£,íÖEÐ…„¿ð›kûü‘ë„^ÖÄK5šäšWOâ3ÿÞÍp¥ÃG¼#dzSûvþe´« ´'Âdºá˜ø*Øœé‘ñˆ®Ì ÓÞF^¬ @@%>~¢ð¢H8»´“[ío—Ó‘ªQ5(EìšEFyoá"œûMÖrÓÉs8ãV¨ÚÌ™‰w~†)åX×TrnóÃ<'âK]Üþ";Ÿ}°2¼B_—"sÝŠ <‚‹€‡¶©ôc•féì›áÏóX]Ê«m_œîkà#òáðd„LÈÕPeåë2Sà7˜'kfÆ>–=ØÔdz-{”ʇ%UFJ5*pF dj£Äü>Zb™Õ +MêÓ#ÙȘ3ØSÐL¯ +YšŸ«Béœ(aì@Ík³ º¦ ̶!—|Íì¥ÐlQa9<¥¾ï1GŠE»,H˜ËÔ"EåØâ€éU‘d)œ}ò&Þ»)£hè(ÃG¼t£Ù訙‹àtáõD@Ù&,?ýÑy® 0!4ñ©$ënaj‚˜•ý…D +ñ§õG7hg]H·R<¿/¹4   >ò¶wP—>DÙ`à»”†ª÷-=†gŠŽ6öh –lçxÎü:Šb%iH“»6ï3Oo¡”dÿË™ÇâÙyû¦JqMÝp÷jé…×ü¿®]úËž°ßÿë:JÆÿ A®²€ƒ¡Gc¬¾ÿŸ‘_ ù½Ý8”‰ù]mÑãçéyƒ‚“zŽDŽ–²‡†Gs#b†rò¿lŽƒiÁ +Ùf[‚å//}_Ök÷uL׌¶úJu6fÃDÛÁöþ\w­ßcœææuZý¥ V¦Û|²“=¨ +<™·]R +H>î<»úùæxQÐŒ)£GiÚ_’‚ë 6m·¨‰Z&™4#–Ð à±k˜$çj½‡Uß}uŽX¯ë¾/(iZ˜W=T:E3£7›¨£H$bõ…êÒ¢/)h °ÞÀ¢¥ÈkKÞúMwÉ9ǹ°££YLv‘°Ás(ÖQ +ÌÁ²NYÚ‚úë Sej¨<³uNÜg™Å^פšZD#8¡Ì>,ÿA–7ÏRNSÊÍYëÈL.‹“OÚfär#~Þ-ù ÚúÉÐ!—2¬óq=±±~ódcŒc߶ –Šß·‹×ÒHx9m¦á¬*J³ÐÅ}˜\GŠ{¡º–uÞ”£Qw›‹\ U¸QXcƒºbfÜmRIãá6 b=¯A±,—Ñð»ûÓµlòa[ö"Ë•ƒmZ™‚—F³#ô¬ç Ï¡àiˆ!Ó®0ݬRµ7 9“dÉÕødU¹òŸXGötà!ä†ë¥Pâó©Âþ]庙¨%ù·˜Â{gÝZr-×\xZK"ÅÑÉ)PÓÊS »nÈSeôWl×G?+KPè£äÁ›Š€&ò$Ý øXe]ï†(¿­óþ¥š'µú’Ôc£N¤’ëÍ.øwÍ~ð¸?XC3O00gZø§­< Ñ%þñ%GÞÞd±Í½™KÚ¼Ì`½ýíKºgÏÒêÎŒVnY¶<Öã9Í`Ï}>Îuyc4Ûþ+'®s ×éuk?tÖ +C·©2Â8â•?¾³þà ¨'Qï‹„Ü°Ö6›HÖŒ¢dGåÅÄ,+„Ñrº;àzë'Y)w±_øÎ1/ø&Õ^|p%B³B wJ.·nz™j…‰TŠyŒ5×6ªã¥(q¸WJR¼;y’á'.ý¦dǤևþ†ÕR +‡öÞ 5U‘yòG”sD³èFd?SGØ’?°`Säتôô¯LŠþÈ‘¨tl¨“Àt«™ˆZ ?]H¼Äšé|%-b¯aùn,ÌnkÜ¢¯8®è.¨ç]TáŒ"!VÄ`›ú!LÏMˆï©© ;þÞùX 9ƒ0‚4Îï6gL˜–œBƒ,Ô_£™m3`¯+q/a¨…AçJÖGÿÐ[òø$ºì[ïöóiÃY›wré7ßPÒP}} ãFffA8n€Jº!Ü`X¿kÍ”Ãðú hÉ¥©u¶Þ•—¨2¹Ü¶¦ãठz&; 0Ô6¸ÃBý|Ç ‹zw‡"¸gƒ-ª NåJ8ƒ=åœ%½mïÖÀ|`h÷ŠŸ’O7T¶—§íÔIÐPÉ<•uO¨%AiƒEBçÑé p¥ªdͨâCÞw¹5…Ê0êêµ.\=Ëú&×mSYx©AŸI6™†t&=Û—¢‹H§ú id&þhõ§±ÇE¿ìBIk¹ã•Ý%‘#búͶ'u³Ûe_eè|5˜b5DwE¼R;OÞíU?©ë@ÌY³Fó‰ûÆ𛹈uéwòvgDŽá'kŒ¸&6ÎÍK†’âØ`RåxsÅ‚ ½gÌLÝ€¦·œpðKv"‡K¿ùXRÊŸœdr…G]M“ª?º:•9_u0öÔ_àÐK‰ù¨«–Ñ7õü¸óTóÚ=ZÅð®y]H¹¶¹÷ý°·‚¼sDkæ Ö‚ ø†ÇëÌââBdEͶîFØ”1œ¿rÐà£ãfg6ri¢—,ñ#·¼ÙrÕUt}o£CËÉ{Çëb +ÿY-ôEŽ]«4xÉ*ËîQš‚Ç Š;Q:dLù 9@®ßåíqèÒuë3×Ù´vÇ4h…»¤&V„<‚£z{,HØ6îìØØÃré18Hn£¼ÉªŒqSµ=ÉuÌ×ÂyŸiÓÌW:'¥ÓËOÓ« dšÙÖr¨=Ž?`î/#/ñßòëzRã á˜›sö"µô5,ùzði.Ïdm?%o˜Ý\‡h +TúNTÆ ¤ö$É6P@OÕßÓy§ëŠ¨qHvu 7ƒiôXV£×¤Okò„0—ây¤FÎMTm¤‘'Ù­·ýÙᇠ2!ȯñøä™^z©}"!B]Ê;Ö«º)!ñ¼ÁtÊ©  ÑâÜ[ÙsëCê¿‚ã_oT‰ëÙ­,£zø¬ÃÛU¢†î”ÏèÏä`]yí/£'ª% a¶iöøü:ä$*ùìëO˜ÙßXToà׋«‚¼_fI²©’ƒGFµ,ª˜|”ídâ¿Ì]+šf©+O/²é©ÝÕèq"Z¶Zf½) 7:¸’½ˆ9‰¹y¼hð„Ôp6ŠÓ +PtSAÖAí%Œe"AÆNš¡^ QG¥c-³=X¿jßÍÁD’€RŽ°l§sþ ÉtÁæ;“ªâa¹õR 6ð"LدzY¡ Ñó|Yí¨ ¦¬ýƒ×þQ-åæ]Ønzn  òTç|ûçšCé·çÝÁÈŠêe|#«yÞå¿»ñná ªyîRñ/[¨I¿ó­EuN2 ÜÁ³±ãNÃÕùláÚ}Š•–-Š~=D¶Ìô,ºÓæ‰p^káý2}ÂÞĶû.«! µn/«½\¶êëµ”îËÿ«‘l§£ü©#9æpàë¶Ñ@”Žš±<3…º EB5n'—‚v3ú§öen ÏPåŸÄüx’ ˜$•[…È” €nœ,RùZ¦y†~ʶré†Þe_4H;û²îïÑwæ@ÃÏx‡Õz*`i“×ó1gP% -Ö °‘n)Ç4±¸ßfA½4ð!ƒ‚®G,]¢A ’T^\E¹zÞþ%òýãZ|`4/@žç©·W‘_H•:þ1!¸±Ð‰àKYÑк'àè—¤vé’ÞzC‘¼F +ƃ›ÖdõüµTûï®6çCÿáÊ~€¹•4tˆñâð«'½\â ²UbÖ‡t›‚ѯ&ƒ j#¬ÆîhW'>ÄÆžF¼/äL*=»ÿÕãÙ<Ð3¹ÆDè¨Ø&lï,¶ÞB:0 j˜Š î‘ô\žˆêTN%o˜êëTkïÌ‹7ºT V¨e•WPIÞ%’Ke +Gúd-VNHª•‡™yʈ;Ëóìw(l-3?½õ‚wCü“†+­~„ÃÒ%ͺPÙZ±ÔsOv +ˆzႱÔß ÆàÓFëÇð!æò+Zφ¨“1é'—g…N€ôúìqÙ#£.º¶=ú@¹†½¶æe „ÙNo"XÁÚ©èÃJéP÷ÚÅÈ…ÑØçå×ñ¾E÷j{œk,¥—F‹1#Þrë%'¹Lß½ìÎQ»ðW‘â9-+~ªyÜh»ßsÐ,ЂfK“üy÷Æq¦hë˜]lé!wÜÄ×µpÀQžMš5õJ¢A¿òa­ˆa•‰wMxÐ K* +"¼OË2÷¡­a+?WVµÇ-“o,hè„åƒyÉ–[s}~# endstream endobj -1468 0 obj << +1521 0 obj << /Type /FontDescriptor -/FontName /GPIGCD+CMBX10 +/FontName /STSKKW+CMBX10 /Flags 4 /FontBBox [-301 -250 1164 946] /Ascent 694 @@ -17289,10 +17746,10 @@ endobj /ItalicAngle 0 /StemV 114 /XHeight 444 -/CharSet (/A/B/C/D/E/F/G/H/I/J/L/M/N/O/P/R/S/T/U/V/a/b/c/colon/comma/d/e/eight/emdash/endash/equal/f/fi/five/fl/four/g/h/i/j/k/l/m/n/nine/o/one/p/period/q/quotedblleft/quotedblright/quoteright/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero) -/FontFile 1467 0 R +/CharSet (/A/B/C/D/E/F/G/H/I/J/L/M/N/O/P/R/S/T/U/V/Z/a/b/c/colon/comma/d/e/eight/emdash/endash/equal/f/fi/five/fl/four/g/h/i/j/k/l/m/n/nine/o/one/p/period/q/quoteright/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero) +/FontFile 1520 0 R >> endobj -1469 0 obj << +1522 0 obj << /Length1 1734 /Length2 10564 /Length3 0 @@ -17422,7 +17879,7 @@ BO ­Œ$*Jü1õ‘J{Y^>y†ˆKÃ=ÿb>'¿M¾9Ì|6ðÊN¤ã®ýµì%ÍíWœýÀSù5´öL6Œ_<ûTgÊM3€ìuÆÍ,€\\Co #Ž§Ñ£Gû&òä!=D×*…0DWÙÇÙÏ)@4[ÃZIz1°‹Ö˜y©‹ÄþeRaµi=˜£( Ÿ~7aÙ„¬Üæ<¢ÞÓfë@ÇJ†,˜ì^3Ç«\`D•¦€Úþ²-@ÎÒ‡)e]R³•YÖË&–½ÐÞIÆŒ½OW,aëh俯Ԯb:âôºá÷b€ðHU65uC(½"ÂmÙKxz·˜²›èMtì¯xpÙ§èlª‘¹\€7”S9žcŠ¬juðÀXlØ\‰|f6ƒxD6WYèKr±c]ûŒþ‘)êò Ž÷@Ojñß?цnšiªûJÑ:ˆ{{ž5{b° endstream endobj -1470 0 obj << +1523 0 obj << /Type /FontDescriptor /FontName /GBHFLB+CMBX12 /Flags 4 @@ -17434,9 +17891,9 @@ endobj /StemV 109 /XHeight 444 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/a/b/c/d/e/eight/emdash/endash/f/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quoteright/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero) -/FontFile 1469 0 R +/FontFile 1522 0 R >> endobj -1471 0 obj << +1524 0 obj << /Length1 1397 /Length2 9610 /Length3 0 @@ -17543,7 +18000,7 @@ gR ~Š š¹Çüž±×\xÑò<Êýo’[-¯$›LÁ]0. óäájÍÃ0˜KF‚^ú[@] /ßÛÁs9,@\ªf8š3(ŠöˆÊQ•œzQ{§X Ò– Œ{ý3GŽIñòSv»ëL…¬ ^«yR6P^1Xu3ÜBl}#›¶8¦®Gw-cd½üœö8™§´6˜‰!ã´Ýh²¶èÃòêãþ 4 ¶nÖßNu»[šÑc­#•{sTÈ\kð»~¤IÊ×®7-òOhW»¥ @Ò[Ê*$Pã7T1 endstream endobj -1472 0 obj << +1525 0 obj << /Type /FontDescriptor /FontName /XOPWSZ+CMMI10 /Flags 4 @@ -17555,9 +18012,9 @@ endobj /StemV 72 /XHeight 431 /CharSet (/A/C/D/G/I/L/N/O/P/Q/T/U/X/a/alpha/b/beta/c/comma/d/e/f/g/greater/h/i/j/k/l/less/m/n/o/p/period/r/s/t/u/v/w/x/y/z) -/FontFile 1471 0 R +/FontFile 1524 0 R >> endobj -1473 0 obj << +1526 0 obj << /Length1 745 /Length2 1242 /Length3 0 @@ -17595,7 +18052,7 @@ currentfile eexec ñPŠ?–_ %œD3´)‚/Å‘ˆdL£sw(wÞ&Mʺ™E¿Ât æ7â8k¬aò;BFåŸD¦(ÐéJø endstream endobj -1474 0 obj << +1527 0 obj << /Type /FontDescriptor /FontName /RVPZIX+CMMI5 /Flags 4 @@ -17607,9 +18064,9 @@ endobj /StemV 90 /XHeight 431 /CharSet (/i) -/FontFile 1473 0 R +/FontFile 1526 0 R >> endobj -1475 0 obj << +1528 0 obj << /Length1 907 /Length2 3553 /Length3 0 @@ -17668,7 +18125,7 @@ NØ• 7ñl‚Þµ`é–ùŸ«â¬\²Uñ‰ó·(:F'ñ½NÛ¿*Î,#Ã|T»÷ëZN÷ò`Ί‚¾³lxer3«¼bÓ­{Íã©…Î$=ü„f}mi•é‘\i}H¶ibš{‚=£ª¬3l¹#/ΊŸŠ›0¾Pé>§ãò©­Ùú.Hg½‚`É\wi³µ‚¿SNå„*¦1~œ^6#4Þ¯q[“( ÉDh”ªÈ^<ò(£À»“ÈSäEÛKÔÕ’|‚s²#qéýÑ€%Éü æ:`…Xz$RN#;Ùüm|˜Ï’°àòR•bÒ'n@¯]Z³cƒB£S7rÏéNÚ‡½óñá ÑóÙ2¸Ü\ˆ‰¤û endstream endobj -1476 0 obj << +1529 0 obj << /Type /FontDescriptor /FontName /LUIBYK+CMMI7 /Flags 4 @@ -17680,9 +18137,9 @@ endobj /StemV 81 /XHeight 431 /CharSet (/H/I/T/a/c/comma/i/j/k/m/n/r) -/FontFile 1475 0 R +/FontFile 1528 0 R >> endobj -1477 0 obj << +1530 0 obj << /Length1 2026 /Length2 14861 /Length3 0 @@ -17862,7 +18319,7 @@ z ›àã™üÿÀPŒáà•Ï€$y_É°¾a9›3“P_*Uþý“‹Ë3ï\(Ó‰Å)_0)ÄbÂãP*Qv¾×%–ޑ祫Ûù>ÍTAO˸UL`¯£'jìò¤Þ=ˆØ eðS)•Æ®¿îu*ïÎ-ô£ì•]2—æk0[] endstream endobj -1478 0 obj << +1531 0 obj << /Type /FontDescriptor /FontName /KYXPCE+CMR10 /Flags 4 @@ -17874,9 +18331,9 @@ endobj /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/a/ampersand/b/bracketleft/bracketright/c/colon/comma/d/e/eight/endash/equal/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 1477 0 R +/FontFile 1530 0 R >> endobj -1479 0 obj << +1532 0 obj << /Length1 769 /Length2 1408 /Length3 0 @@ -17918,7 +18375,7 @@ currentfile eexec µ)&ï¹ó)/@^Ð⵸PY.¾ê—(û½#´±SáRdíúmBq-‡_'ÈI-tñø‚¡ „/÷OþL»™Kô÷6§C€w\³v#ܶ>ì"L‹“+†ò¿ÜÓüà•Â½”þa+‹YEoÎ endstream endobj -1480 0 obj << +1533 0 obj << /Type /FontDescriptor /FontName /YPSQTS+CMR6 /Flags 4 @@ -17930,9 +18387,9 @@ endobj /StemV 83 /XHeight 431 /CharSet (/one/three/two) -/FontFile 1479 0 R +/FontFile 1532 0 R >> endobj -1481 0 obj << +1534 0 obj << /Length1 787 /Length2 1497 /Length3 0 @@ -17976,7 +18433,7 @@ _2 ¡b›x}‰èË÷…¹Òºz’™­ºs7'þõ¸­)Æãõ8-X“ûTåG`û‡9?óPíe•úã“:– “^­‘3¶›‚~§ÍhécîxbkÜå1!o^ëå™KÙWk«ìi7ݱ‚=3OÿÕá£ßø äô¼|ó endstream endobj -1482 0 obj << +1535 0 obj << /Type /FontDescriptor /FontName /EWABFK+CMR7 /Flags 4 @@ -17988,9 +18445,9 @@ endobj /StemV 79 /XHeight 431 /CharSet (/colon/one/three/two) -/FontFile 1481 0 R +/FontFile 1534 0 R >> endobj -1483 0 obj << +1536 0 obj << /Length1 1462 /Length2 8120 /Length3 0 @@ -18099,7 +18556,7 @@ j ë4×éùïwš4“n½]{­ŽÂô§–sú,r/Lˤ/ÝS.$Vܤ˜¶i¼+±WJv契Ž´*ö9Ã6\éu>£ÀtGÁ”Ûý¿Ò'3 (ªh[æ‚ð˜ÅWÿžu º×:=»´bA¦‡àB涌ÂMÄða§Ýw’rº“ºÏÛ–¥,Ë¿OÝS2 ?3w·;§Â/nÊJ0Rã}CpÒSé^™:Ò¶Õzâê3Ì|8¦Võg¾Ã¡µ`Æ~ä17Æ[|~9dy_*z€UIJ@ö®{t”¤åØVKƒÒ;S¯ˆÿ±’m¤£¥‰Hçî³¼ –$úX`ÝWçªÂúôÔ>Œ—:þ8ùæ÷¿³ÁE4•¾Ÿ¼3 w¼>0—Mñoƒ›vºÒL–xy÷rbQ¡ƒUˆ0_tœ¹ºu™'Iá^mÇÉ]*äÉÊ—:¬Ý\ ÛÝxK»gD÷«Ù³Õ=I8­ŠºÒ-œvx`%QÓ¢8ê™ÍEºïê+@eXnž"V¶¼ðæÅ"Ƀe‚¿Sñ:®wS%d›9Ñž#Ä`ž˜íÔ’Õ²ˆð¬ËmûMBeäPnpbÜ“^mäïbÅÃK0¾m1÷R\&òÄe{b"ŒŒW{u“ˆ)W2x cšµ9è¡|課#ᎹºJš¾ì—H1ÒTÚ³v®n-F `¢Çî5*…¨¸G™1–¯}YûŠª¹ª•ÛÚωà?ñõ‚dUfÒ o.nÔIƒ”fDg¬ðŒ/'@Tîø|Ú>1ÐØø£éU.Byþ.‘Ʀ¸25mª¹<Ês Ò—OËÇP œ®Ì÷·bM×v¬mšö¿ý²e…ö;ã{'½ì>Œ;×sáyâlµ’ØÀf9k Ƕz<È#Ž ý¤ËSðž>"zµQµ’N<)W”°ni}À;žá½!“@æe¬Þâ± šÃW&è‚=ù»ä÷óFÝÎXËÙå²Í1.8.†ˆvi˜äƒ. &×SÓ¬Ú74ÀÕRP¹ú´QC‹îNjÁ8Òq½ïàákYDå¢X4Ö±Htç7€ Azd5ZŒ†ã¿¾¹çÓ)05—ØN$HÑé=R§K+‚²h`Pèù†T¿3Œ®'/(#ž+UŠ5¤A³Î-¢ŒT endstream endobj -1484 0 obj << +1537 0 obj << /Type /FontDescriptor /FontName /TDRORS+CMR8 /Flags 4 @@ -18111,9 +18568,9 @@ endobj /StemV 76 /XHeight 431 /CharSet (/B/G/I/L/O/P/T/X/a/b/c/comma/d/e/eight/f/five/four/g/h/hyphen/i/l/m/n/nine/o/one/p/parenleft/parenright/period/q/r/s/seven/six/slash/t/three/two/u/v/w/x/y/zero) -/FontFile 1483 0 R +/FontFile 1536 0 R >> endobj -1485 0 obj << +1538 0 obj << /Length1 1125 /Length2 4765 /Length3 0 @@ -18202,7 +18659,7 @@ _ Ð*B¾ŠF™šcpB¬„©žò D…ÆýÄÃøÁ> endobj -1487 0 obj << +1540 0 obj << /Length1 1050 /Length2 2900 /Length3 0 @@ -18283,7 +18740,7 @@ R c’$”݈9`l¶|‰2*2Nú´u4œýÕâôv=¤rl³MÌp+§’…¶5ô†ÔÀµ‡™iu1Y@ãœ1[;îLE›êGÓa]:œ”Ó³öã_‰Uš¨–‘Îo#¿ÞÅÌ!|NWüÚè endstream endobj -1488 0 obj << +1541 0 obj << /Type /FontDescriptor /FontName /IMOIOS+CMSY10 /Flags 4 @@ -18295,9 +18752,9 @@ endobj /StemV 85 /XHeight 431 /CharSet (/B/H/I/arrowleft/bar/bardbl/braceleft/braceright/bullet/element/greaterequal/lessequal/minus/negationslash/radical/section) -/FontFile 1487 0 R +/FontFile 1540 0 R >> endobj -1489 0 obj << +1542 0 obj << /Length1 766 /Length2 759 /Length3 0 @@ -18335,7 +18792,7 @@ h aaT'/D…/¦v2_ÅIô÷*’XÆé¼VMäGoÆéjeÃï÷‚x"¡‘<Õ©O=}µL¾8QWÃYΞ^L„רFHyü˜ÈB9Ê2Îo¯G¥¾bv0„òÆ… 4…Fv1wz MrÀs1§‡zå; r‘*)!´î Ý·Š´ÿÝÔÕVåÕG•8 z±» Ó(O»û+¸iruþdtîOª=eb®|˜Œ‘Ô¤c<…=>òƒ?†!ÒêuóÿG\ïD3/dÈZ2)#Yboµ£˜B§cn“d¿lXë0 ]Ò%ÉMEÚmu`ò©bNßʾ”ËL›ìsë7§F„“qò¿'Z¿TÇ©c9$À ÑPâü<”»ÏÚ endstream endobj -1490 0 obj << +1543 0 obj << /Type /FontDescriptor /FontName /XNLILI+CMSY7 /Flags 4 @@ -18347,9 +18804,9 @@ endobj /StemV 93 /XHeight 431 /CharSet (/infinity/minus) -/FontFile 1489 0 R +/FontFile 1542 0 R >> endobj -1491 0 obj << +1544 0 obj << /Length1 1572 /Length2 12132 /Length3 0 @@ -18496,7 +18953,7 @@ fi ƒ­Öc@^ÕÝË´rF_¯ŒX"1ÁÖbvßÁŠÀšûòÅ5þŽÎ˜Ž×þpŒÚš5ã0²'ºÞ” ÛJ§­¦ i÷ïI•€LU·+K¹ïø,xæ㤱„‰2Dwé†îÆ®7d-ÿ΀Ðê¡­Î/»€È­ÎÍËIÄÌÃ5|Ÿr¥JÍã3ú‰Ï& endstream endobj -1492 0 obj << +1545 0 obj << /Type /FontDescriptor /FontName /HBJLDT+CMTI10 /Flags 4 @@ -18508,9 +18965,9 @@ endobj /StemV 68 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/I/L/M/N/O/P/R/S/T/U/V/a/b/c/colon/d/e/f/ff/fi/five/g/h/hyphen/i/j/l/m/n/nine/o/one/p/period/q/quoteright/r/s/slash/t/three/two/u/v/w/x/y/zero) -/FontFile 1491 0 R +/FontFile 1544 0 R >> endobj -1493 0 obj << +1546 0 obj << /Length1 1067 /Length2 5106 /Length3 0 @@ -18585,7 +19042,7 @@ Hn4*/ éÆ 'dŠÿDZ@Oëÿ{Ll§æR%M…]> endobj -1495 0 obj << -/Length1 1866 -/Length2 11720 +1548 0 obj << +/Length1 1849 +/Length2 11542 /Length3 0 -/Length 13586 +/Length 13391 >> stream %!PS-AdobeFont-1.1: CMTT10 1.00B @@ -18619,7 +19076,7 @@ stream /ItalicAngle 0 def /isFixedPitch true def end readonly def -/FontName /ATJOAU+CMTT10 def +/FontName /BGSLBR+CMTT10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def @@ -18659,7 +19116,6 @@ dup 100 /d put dup 101 /e put dup 61 /equal put dup 102 /f put -dup 53 /five put dup 52 /four put dup 103 /g put dup 104 /h put @@ -18703,53 +19159,59 @@ currentfile eexec û;Òà¬Á¡ Kèr^×ã©o™x¼7p4Ù= C‘åyÃOùü#yËŸ[¾©â4éê¨9'nÀÙ*¹xÁxÛ/J}û¥oÖ¯†pë6OÞÊû¯e}hà1‘W6Ϋª‹¥À¬%(ƒi]I½‰«ïèiš ãí…´ŠË""žb3™É=çÙ5sJÚÚzbÁÔJÕ>£[Wåеü H ä2"ÛŽüÕÓùº0O¨y9.à¼Àá¦t³¡ü:=×$E€Çª Æ]t¥þoŒ¿`% Ì'EK¿—ÊKœƒ¥fr•‡RíK^yá†`vO^†ðžúŸv…òõ~ÈZwR‡³ iÞNMWçÐ3HS¢p+§T,q!s0Ï(عÆ;U–©´+3çÙ"”J8q3ƒÓdŠJñ`£°Èó7›¤7+âçêIªºu®îÅÝáØ¿hH<=!'€«¹TÌ–€2.«rá% -v ÈÜÿy*¿ÄóS“’˜\L³$°r)_Á`‹°5_ÜO㛘H&ESãÒqð=ÂÑ*’¤Ó 4ýÚ¸vØŒŒ s„FØ×䡨—Ÿ›ì37ç »ã£w#[Ç›»ÛfÎA‰Ú·Î‘òü ¯mÚЙ’Õor)h&î=åÛ|ö6kL×OAD„ÜͺD›ý*â -°MÊö‚:7¯õjm˜mˆög¾:Û³–›DY¨eן¯‚±µ®Y,ýªÞšP&cvñXåiã“rãN?õ­‡)Œig"ÑÕf-yˆ€B]@0(i"/³8²ø=¤’œQ_@Íë*êsÜþk?«}‹¾¿ª|þ-×/²ùl’©tÔ«ÇÄíË5ËXO6½#èa>{|¨ñýä³É,èÿpÌ/ÊÓ Ð…uNÉåÔ,Q1œ^qœÏƒZá'•eØMÂV…Z=üÈ,”ÉB:†Åmš[„õ¦hù:ŸóÊsZÚ‡Ó=?€+m+ŠsÄ^3ë±IÅVPÝ{ÞÅãpvHrQêšN¬åÅ=ë¨Q²É|É’lÇn°¢uäÑréè% ·~dLA$ΰæxóo7»C7°¯b•Â&.®{ò”$e9:÷è•yEÄ$=}¯½D…À”pÙAS"~ÈPtöˆñèJ§ªèJm‡§2+gu•Ã§b¢ß`þŠyß¿¶µ6+­1ýbºs:g“6ïtÑ|n_ãÁ†bÃÁ4¦Ž¥°#ÞálТ [Tz‹¾[ïdPŸkÑ3JÇxvüß4.êD<ÐZ8.næ -0©L‰¦Áb…`‹§öóÓ÷7á|¹ŸÇcïbµóæœÔtpöJ6÷ƹuj“r„CµZTÞR‹'W¨ß™Ò¡Dj4hÀùE1‰¡ÓÐØk‡ä¢õ^Ù «ó z¦v UgT#pE‡9*2æ´×ß2Ú_¹¨â‰n=3'fÏK€R?ôš Qož_z±±ú•9õó¾EN(Ði7’ÞûÐ9&™é©6™EqâבÄ';¾X¸ˆò<²Í -nE’ßA»¤Ou`¹¡EW˜a‚Ô`ci'N/ç K嵸¨ü;wVwXâµDo¬õïNù9Î…Óý½«:xò'H¬A­›<¿±ó¼Nf>8š¤œÝ9ÛëMÄã%k;êo¶-vd,_ d<)¢Ù»â‡ÇxxË—ôÖbWÐ1#ôŠ@t'G‚¦èþéV«˜oñLäyÝGpª}TšUÆ­.;qsíobBG”ƒ×ÊÙÖZb€/ª‡ÆVôù­9M‹ê<½P -9„JžŠ)…}·!P܈e‘ ¸Nl¹0°7D¶³lf<ïÌ©•»aÆ ë±—’fDïðQÓfÝ ïuðÎó|c;»½‡ÁFWFi]ûÉž%ŸÆ6¼¤K.óÇ iûËóc öOv•}µdëGÿÝ -¬<ÜjöätòÄ㈟&i™!ÖµŠ„ºóKmãßÃN2N,RÒ¹‚RÕŸ—mÐÎ0àb/ªˆWH×úM7’`Þäòhy#}ÈðE­ö¥tB‘oa&€ð[0i…ð=‹hŒ6ÌÎý ÆsÜœ”L £zULò¿wÀ9fóÎH-ÀN^«}Ç¡ò@È6ÆÊŒ•a@ÞBguò{.ç }öë–»9ÌÚªv[“–™è=ê)æ‹ÏE÷x´Ë§`Éí怙@MjQƒ÷“®Í;ÅI1&sÛƒ@Ýk-ßo÷2Žo’Ž×~V§ã!ÅÞ¢ -—r(jvቀè(ÖÒü–åŒY,¾æÓ}›Ñ(3ø§¬˜å”FåÒwš…b ¾A þ©zåc(¡Äàlr“¢]Í뚶1zøÏ]—Ó7‹°ªÜ÷ÿ¾ŠßȃÁ `…‹)_%Ù³#v?š%ñÇxÚž‚׺ÇÏ·é³'Bõ:l˜/‚Z^Î 8_«Æš–ŒåVá©i­3ß@ðü!Æœ¢g##žñË6EGáMÆ…$Uü³l(ËW„ˆÜ;©|‚q²h„€¾«ÙõŸ‹G -„b„`lÒíª[΋2qßBVG.ºžùåõ;ÇFÐÓµ I1Ë=áhUåGÆ«&¯¢T5ê§ÎÚO‡Â%Õò–¬FýÙºƒVrôíœY› c¬FÛn‘‰›æQ~¯ÿ<L _+œ«’×;v®±`3+ßwNrZ.èÞŸÙ©–ÈŸÍ€“åY†ÅÙÒøŸ×:M…9#UH‡i²}yÀø çÛÖýãe€ŽÕ¼æáYi“Í-¼½ûLW¤©’ñû2 ðµ¤Ž3ög¯ð ”m }Ç!x¾OÌS4ÚçÕos?óê’¸I:—$å¿:^ç^aš®E9Y»8fqIò¶sÒÈWÙýÉq "“+Þ¯gx LÒÆŪ? o³w¡1Ñß¡§Ê²4âŸëÞÑ[Ž* þÌÁ¿òj¼{ãyÿ>×ôTÕæù¤K5…ó° ±­ o\0 y#œ•úZp k‰N]Î üC½þ÷Ï¡Ðr nwUCú¯cÜOBB›çÖH `±"t4/?I«"¡V†.9|ºL p±æ|ˆq§8©UÓ/DÑOQ¶âfI¸"k޶ѥëåúƤþ’6”¸Ôus-_µeºðÞ¦{X(S-$_UTÀ”.J†¼6‚´ž{"iÚ'v®V5y¯]ºJ†ôƒ¡12¦ŠûqRÈ…—PyB@É¥áÍ©5¼üOg^¹^® ,0@¹]ƒ²ww¯5Æ©ÉÞqù¨½¤íB.½ò}½}‘‚®´½cM §àdBä泌Ӊ‹õŠ¬r”¯ž†:–XÆÕDddÐ6,í(ÌOdÒ#´zH’<„$éÃèÍC1¢Œ7õÉ[ÂWöÍ8A—iMÜa"oÔ9Ðm ¨0¯–|³ÅŠzbÛ!yRî/z‘­›]CÈ=—G²4{¸fæø$7pÄ !îã\GnÁPT¦3«{ -KGd'ÂQ)®³¼)ü¯RQž»Ê€Õx -uªu-æü×ÓËï°1 -ÀòØþã\L4Y2¹Éþ}á*šÊ(©ðM73‹j-žÆ#¼Y|åãªÿæ>°0” <ô.ƒ'ïÄÏK½‰ªûcPS[Ü¢]JÇDW>þ^éF:ÛÔäšË— ¸Ò}ògÌì`À6¶A ñ fðBx*Ã’2ZþraôØêªð#²ÉΊÇÖqQié /w:σ¥«>î’õ ç,íæhÕ‹ -â}YaV0Œ[\Ül[‹œ¶Ü,"ºë“–okϧтɷ!åg¶ìw|AÜn;¨já9Æ øãáüÕÏS‹æ«"N±X÷¹îƹ"߸ÒýàÃlö¯=·ß/+ê%÷ÅP»éÊp˜"‚å´ç¢Àt{å\u xyç€m?©‡MÒ+8ÙîÁJ!˜{—{‹è§uÜ°iƒöHµÏw|ù}·TrZ!óX~Ê7îNkÛ’ÎGÀÂ/RRÛ6â!0E–J÷šÓ’è/{cù3 • -0yüö(9‚ Ó&„·ÐYKœç^)¢ Ži°®ÞDgŠ¢Þ; ==âc(tËÜŠ‘E7z¥¨Þ ¬¶Ø9Q¥ò2î>äxKÊëXÕ[ÀÓáÚ!1ÀÎØ5É()ßdï­î m7ÃõHèƒÅÁÑ÷:a~s -ÁÇtí‚ŒMÅBÜkHµ¯ʶì7†©ü54-^gÝbRxü\ê îdþÁ`•NHq”jR8v ¬žu <-žŠ‚FÓr ‡äU"ƒÞ°“`[­¾ç-`Iøº™¡N~tÃïÛëcjE»,üïýåBð+.R¥tToái)ÆœøÃÄx8µ«ÆÂÝowç1tÉBÚ®Yž±oç²2]Ý€ë‹Vńш™jÓ|%ÚgôëA—¦JÈÊ)I‰éHOFº63©×ȯS qÍk„“âÕd­PÂ>{1Ôiâ©Züª¬ì2IýCX;Å0›¢ŒK33´®eÀ–3Õvm”’v'õ ~qNÊÜ' …óH¢iÐÄQuÉv¦øÏD̪?â1i»#[ƪ˜´õc¦ÖÝdÄ:sµ•°>EÒ›£àÖ‚ÇË° -"ÂÁ€ñ³&΀n©·®²ÒaŒ6M»|mh¤­Y `NµNÓ£* ˆ¾ÝîÊÀ±’ JyEo¥ÛF׆ÅÛ˜‡ûçgd–ú„¹ -Ì0ÉZÔU ¦ÙÄÄJ—emøg—È|3e@w‡¿¯xñ&RÝ×M¾òÙŠZ±Š¢Gmüuùe5d>J`›xÃÐWöÓ@¯^^yÎáôÑ<™|¼Õ¬CÁªâæùN ¥¼¾ _Rùçd -ßÑôfÂÍ'pGS÷jÊîˆ&6ò‡hóP»…cŸíPÝC»w‘Á{ü6-¯jŽøä‘…ý€f†ôÙs³çÎE~íÅ׉|©H<œ2 ò¢ôO\:L0©Ö$–6‡?,»ý‡õÌlØ#b]v¸V—÷±uÏÇ2ÖÖäéß÷óK›ÜM8Ú4'Î>Ô jé%e¿Ê ãÒ®A ž& m6À6s³ @°xâƒNnù™¼n:«Lã–¥UýÀqqÍ­E-wd㜦ß<•ÊC2w«ïJ‘ð±‹(£ô06ªN ¥~LòµÐ!=¨g5²&fÀùìyRîíF–²T*›­=ƒ™­pQÙ$_h'eŒMúÍŠwZï+(ø‡qÕöýLÒs#áTûéNï°øù +B ÷ ‹š -|ù Æ=Q»2Yß‚.¡$epD1.ý¶.°ö/!VK+§Ó&¡<ìÞž] Ù¯P»È;’–Š·<Ä€ešùz8Ê*H"FBfåo³BÖj½£õjx‘6½þþ˜±°U|Û$ìžà¹=­öc˜¿ß™Fî¯w!§nA㇫˜÷bï[Ñx÷í<«quªŒuZ%!T…³¾‚I-?ríÍ I[} SQ!ø ÂvÜkLK1Á­`¸jýØmÁ‰b¦Jù0Æ¿p´RÙU‚E—hI‚LTt,ÈóBX©BÉ¿èÿã“È5¼ž^jW3?N½AgêTgÒX¶Xšp7¹”†zšJæãVÃVºu°Sq—ô||™Û‚àR•¯Jçõ•Ñ w0x,õ×%€\±Î­È"ãÕÄa¥5âH¥²;I‹‚®£«néüúâ±±’}ÌÚ€£Ï…˜‘‰=âðk7Þ¤OòqøÞDËi}M:tÔ»“ixFWÇOΟ„Œ†Âz|9ø²¼(âK{œX¾ V«ÄÔS”_ñ¡‘aeQ£ò"lùào2 £{Ÿíž*gsC¤è”Z¤´Û¯Þ¢Ò- %LLß»ìÚ¥hðE çáÅ †zfÑ‘ù±ºÈÄ@‚úAäæxŠ«d’ªÐ4$Ü úÜ9Hë ûm¯ñM–®Öæ÷S¹ZÂý6›òHH) ¶+Q}x&"É<Ëvô$ËxU{–U.ixZÃ]=NÂ&ß›McØÏÜm‡@Ÿ (œ&;f‰HÚ|­ú=Ç’ÙßÈKC†ãHÐMƒWŽš™•òRÁeËÌœ¬‡HŒÎ{Š¤vNíýlÎã<sÖÍoÖ€ÓEZãàGp ±Ð2^\?2;sË÷Ln? z@Ø ú=¹OxhÎãt¤!‰â É—¨Ö‡Aiý ùÒDƪZÊ;ñ—†ÌhµÔðçVÞ#*èÃdú! •h¹¢ëÞwcÆ!l7•°»r5¢•C•tô•2"Nªi:lCÞK§YIpòý¨ÎÖΰ‘; -·l׉TɆ‘G~8v€Â'Õ$“\Ÿ…‡W '°Ä¹€¾(šî£þµ"ƒ™e*Ç/´’„µíÛ÷®ýuĘx}ÌO];Ì0ÎtdF*}ú£_’kZ¿(Òð&ÓµÂ:qœ= •ÍyýüÞo›¡,ŠOW=Zÿëu¾BþÈ?2˜©O±„r’²…”¬™ÎyvoYA³Å,Êåh/ߤçyG±ÁTßéäsÿ‹—#™v.FÙõ¦[ ¼gi5TYc æ -Û&ô9°TØŸ Sû±Ì$Zõ.ŠÎÅj2×…°â¹Ë~­H²Vè ÄHk•ƒŽvQyÖwd¦õnÀežÉ¶Q¶ÊâHŒ5ñO/è­IX;®º¨!«¼‘à¥nTúVó?›ÂÑI©T$…Þa¿PólI›mØÝyÏ ¹‹¶a¯aÊQ)Yjvsød¬ÇLt«Šü|˜µd|.¢‚Òõ"A³DcÁJ.7'q̪rÙǨçN˜,CEËp4<å$ù³å—%ãôHÕfK®K1ßMà–…½#ž˜¶‹»8/?' ù#³)A7Š·dÞ9×YŽÛ¹ÌC«65ÜèÀ`ö?–ÞHœkÓ•»°UZdÇö¥ÚlÕDqgEˆâµ w mÓ¯.Œ!ߎèÒ³Á¼Ó2hÁŒÎÝûàš©L²PÝæ'â'jïI¥É$AáÃHmsö‡[ˆÊÓ#]o ða^UPã»rT»¾-=ƒåˆæà¶&µy Š7œvªÖ×Ë‘0coÐ(:ºGxñ*«y‘ëÆy2Ü„šûo©aXT soi ;Wc~p˘³±is‘»Ü`>ÌG'« s c`Àç5j7ŽäK«›Pªö£iŠ~"‹À#4Ÿ÷õ‰dïx8 ´™öŽÑ‹vÓ— Ê$æà1Ã𽎻ƒ©V*¶tK -@-¶à3^,å¬&ßù<¿ƒñWáÆþÚ¡êJgËOä²ÕCV^¹–ž>"LñoÁ·£#=˜CÆ¿S¸W.¡±|ê=™dÕ½Ÿçºqáw'¸£èž™¬…û Ò¨± öµì¼&dùQ,.Ì3GCd‘XÓʾÏ/cb™ÃºÀ¸aM€,w@ °`àØçI@úMìbܱ+º:µS,½Ï Ü3gN‹[ !>×”‹üW3Áyò20Òzú )"uªxe’{»€ggñ¢íXáübgñÉ+|ºI:%Ú#T`â÷ …0¨ÖÜ9 nµ>GÕÒIvçL°ÙÆIõ%¦È¥òINŠÆ/,Àv oIê ‡=sÅ[Ð ÞìJö1½è`É ýæ˜L¼ç-Çô›ñbš¹i†2Ý÷1À¢"˜û7–Ê0Ö!ÙÓWhCN{1ñŠV>‘ƒÂ$" ÞÏs0"áyõ:¹ -$7êäœÇ¢ÙòuwEo@!€Á:j@—Õœ…P»BªÂxè>¤=Ø«,1Pµ­w“âþ6‹ëŽn4²ðe³jÒeÿyð‹¹Éí!üBË¥úwr~[Úïû4I5ݘuwÐÀÂ}>yLJ=·‘–W<àFÏ Oo¯F¢6‰8 -u)õ™_¨óõÜÍ×ú£ËZ®„|} ëa™4e—4£¸ÇúŽzÇO9s…’ ñìt]ñ‘Ð_ Çþ|ù›»Ø¦—VÃ9—³w+…²ÅÁfD5 ø=Æ ‚£Â£,ƆN9®èP÷*¦Ám)úàÒËi%‹8: VMÄàÞ~1àåjD¥:ÝΖƒƒe%Œ EúOÌóg 4,HÖµ}yóæ cÀó<ÂiZ±‚³r#ž]b˜î› Ì¿m†©­P_¯¤HþÈÞ …)FÇ^¨û/?j½ˆLšU'çO)`®8CŠvŽã†¡÷*âL¿==WZ÷2#hÄ´¨æ¯8G‚yz…SÖl„ÐÅȪº'` ǹJ^TÝÍŽ|”&õÆëЫºò‰‰Ï„W¶$B3a¨Öæ0¢QsRŸ+ôá΄؟…ýêÉùš[óÎAeTëÿ×VøÎÜõ ØÇè{Q:¿ÐŽGEg1ž#X¹Zè“x†&äeû›À-¸¡šW¢pÔBÊë6týkÿ1’GO ®Ÿ»‡%ÒikP”$Ø.Tˆ©·ån‰1¯-åC+0ßaoÓÿö^ƒt&SÌ[ÓD(‚L~‚°qÁx‰$¹—q“º´±U¤‡òÕ…Åpö!}Cý·¡?1U.£ªdþÛžDY6âÙÖú¾ìCÕŸÙôŒ–³MÝEÖB£LJ±²ŸS ÏÖìˆ.uØÖ¹/éØ‚#E ’÷u!/5±¤b²„…Rs=ÐzÂ!X>=SwËmçáë¾I”·=¢®~Æç˜B¸GÌÑ -¹µ463Y²«iÛà2ö‚ux†×~ˆO¹b ÿ˜‘@‚eØOÂö =ÒÈ5I£/ˆ¦^až¢†Ó«½zïnÉúc ú–7‚w¾{>Æ‹ý^ݪ+ó³~t -7ýfsšï±å¸víi±÷S¹ô°BÛø‰˜åŘërj/¯À¡ËÇ÷µìš„;3öÂr×1»- UŸCÓ}Ç”‡ŽbñÏ øB¾À÷Y>­BSâI~‘Î3å"̧=é(Æ!—– ¹®ËEéÏ1þÀ‰:§ds5JÌVgŒR¹°à¸øåðW”}'IÁcægW8‰•ï.F;‰„S•ÈùÇë&bT¬fÝâŒì‡¡éØ‘@›Œ"?‘“2¬ -ÐÐsÃCP¦v*¢=(Vs“[·LTO"i.g/\Ò’òj”Ž°_–Ñ®‚©BYB‘Ÿš·œŸ§ê¨@XÎOm²t˜Ò -Α]irëÊ›cŒŸ8(;IÈ-¾µÝ|¥¾1ŸG3ÓˆŒ?ÍÀïæy½/p 7ªÎžä¿÷.[¼€`L M`K7Ö !N?m–? ÛªlàÊ_ÑÂiQvŒ{ØoM•`pïDÜ–³%ˆS„šþPxѾº¡ðvÂÅÉìÞtºŸ|ú7Y–í+sdAm{V4!NÆ'A)Ÿgý€þ·æ ÀL¹–qþô몢áœÊñµ°}ý|ú0 ¬Oöfħ!ÁòMáK{2c¹ÒÝñO8›l™LëÉ)9Eš -;FKQ¯Ü@p‹À‰"ýÎÓ»FUÕ–Ë&K4“Ùó vv£m†tY"âŽé4rÇz˜t“MƒÛšÓ±&›„GZ䀷لxž‡ƒú·£)ŸÌ‹ú7%~Œµ”ôd -~Áw¸»›]z4dgðFwª¿ëªHáÉ4ñ‹:T pÀ!‚Ê +˜þÄÉ~4?ðÑ3Ͷ÷'‘®@?=í—(¨£[öí,>ÔJó»©JzA>,pòK•Ö«rt…#6ŽèKC™½à—L”0F{ð–Sú‚ÝKÝËÞ—¶{¼üªEÓB2øv[Ê?ÆÐÔB[ÂÄ]<œ/NÌ‹¸ ׫¼ŸZíxÞí—4±ådö–I“\b#ìGW^d ö#ïßâå¥;´Ë«$Á$(%–½gPŽ¿ík@ŒETŽm°ÙÊfÌøOä„Ÿ ¶óí2›Œ—…ÄQe7ùä' ‡úMI© Õ­, ‰úÌäa€ÓmŠÿ|ÆM°’¦5ËÃjÍ&ñ´ÉcàŠÀØÖ̈ÒpY2‰ ³ bËΟÊct{Ù~J“Q…ì?Ã4²P̧cÙê€ð‡p:åÄñÁ̾é Ë -1awö´â¼RexZ±CÝ$¾«C¸ͳ¬¼ÙËât©8"o˜ˆ“À-`‰™½]AOù" ÀÊ•‘&­dº’¹ÿg[ójÂ[YÍGeÔpçW1¹ÿÅÑXÍçP+}ʳÇãÏÚæȆ“Ú<ú„ÀîìXae“]àÍåÌúîúOª6?e0eB·Îõ¤þÊIÆœd°F2>Z•9Ø°8Pó6ébî„1”ÐNæ¥S£t,RYýØÙ‚ûܚøwóCê ¥^·WðD»X-7 Í -ö(ÑM•ò„E$Y¼:{rŽ ýØx%RR”Wã /"tXÀ@®ÓŽ(ÂY– |ïj:Zõ¶Ù‹—úÖH,øõîdÂ1¨÷/g6͸ÁpsŒÞD¯ÈVÔ…ël#€W0” ýoú’댕ŒA(Cäç‚þ¶7õl‡ôy:jßú P‘õÆ»m¹ª\¡ŒWdV‡AœpùKê'`]=^à*Ÿ­À.|;€ÌnmÏÌÔq*þ SVï|«þ£TGT‡©9Ïì묇e ·µzu7ÓP–Þ At€Páp•X,ÝÙ -Ÿ¿äKb¤XÙ‘§i”¥óO ŒÛdb=›ëßfU¼Œç3…é­lkèkpGði»ÀÆ, ÷wÈý"ð{©õƒ3¯Ìß$#6ãî£â²ÝHôØhË髨¦ ]ïÀJVÀdÁðÕ@±Q¡@ú„3p=‹ï ¥L~€w÷Æ+γ-hÖ¦EÌÉJx¤ˆC™Ô'†“b}žÊBhvøµ¸€ /×õlŸYŠ­eˆÀ&»ìTB~«õ’ºÊÅ0Í AÛ…^¨ã{£°è| APñSëcÄѤG^]'¸Ÿ­„ñjõß÷Ûx¤Þ¿têË@iÉ°g Ï²B’ jÛ.$Š¿°áÓYS…Zù›G†[M»Ÿ²Œ¶*‘–ª¶NXc÷œbïþ2c³µ8[,¨éœ‰C¸}[çO±Ûñc÷a3·?mI%2Î{Û®¨r£E¨¹Õãû4LÛ»Lö5üñřŧ -‚..oÂC½*Žlõ0ÙÚò]-ÍÇá¿ö‚²(¡„6;ÃÝÙ©aX·¨rCn·@+ͽӵ´®oJ{ë£ú¬H¡Ž² ¤Vì¹c%Bª1=ʼNÚaϘ«'•í|ûíLhŸ„PÎ{àF¸ÁÔ#æŠÞ¡ã§Ø9Æ‘¤M`Œ4g³'lðÛOK½ÊZ€/¦«ÊÆÖ¡ùH%ÿ³áðÚ…ŸôfàiìŠGHc¯‰Ê‰9ëáö¡ÎØŒj͈õ!h©/rÊz#¢© -/h‡þAZîZHùvuu;6ú©,DÞMõŽª÷ Xa;cxýÆ#õÏ0œ=Œq8ý&MŒ»¸«ô2$^ üä:Bƒ1¾†=¿ïšiª†øÒ±áÆÊDákƒÉì'ÕÉi¦Ì÷VDí÷5Ö -&t)°Æ$5>Q³âk;²€«aÆŸ*ês¦>„æ Œ\iaØÒ¬1÷¹6Ï}ÔH‡VH÷”q¶B‡Ö9þ(i”â(©šj!’Ö…àCdæ?w.óx³Gê0?:Øo䮬ÐðDõYhö:êÇø­k˜Kf†ÏÕm²“ý|¶\F™S„w ¢TÄ>ûx^1ÉÐrYè™Cí‰ø:f\ˆ¶¸ ÷`psayÏŽ%ŸlZå4'Ñ~]ÌMçI2æøNñ««ÁlZ–D(ž©£Á·Ùüº¦U´;²µ«ë…‘ šG9æ»REOy0CA¸iA®­ drê2PÝwžª¡yÜ †:9YòجØaE½ß/½+]ÁÈãájøºè_p#dõ¶¯` -|´ž·Ç;™´Kcàf0qjzü¶qØ5–½™R\5¶°3Eü§ƒ¹ˆ ~ÐqWÉK[²øF·“tiL!ÆNÞžÍGK:O —I£O¯AA,õ›w{^¸I•L5áü¡9y¬‚_øôøoáZÒ¶ÊWvùÑhÂå/§Ê¶^¹õªïÖsÁ¸x -âÇ9îÎh¾•·õàû&ô•ýÒ‡Û5KÉÈ·híûqº!þÓ¦!Y’ìÂJ”É+m¨4êJù9ðɬ>|%¶©D(åìBè%Q¼]21jl7þ’ÑN¥‚ž5§Ö£lE¯ f_бieè¨2“„#«©!Ÿo<ã3‚™Üà3 =¯ërôEgMÓÕ‡^-Ì&p¢%ßѵùLæ„7@³¾~¤Üá _Õ`Ylk´S"7’Á½e vR-¬ñ#-èt’þâ[»Hš,'½Y#ÑçX³ÌoÇÿñF6&ùSPu~dÃkĵ\;žÏèpðb¸3^æwÍ.øÊ•¿oEUí²PöQiýò‡oš;MˆzØItÔ%7ºÇïK±Ã¥Q‰{„ñÀªÑ½±]]0¼ñ͈®ß;ÇÐÛ }MlÈ0gÙd€ŽWË™ƒ Åâ6“=$'ÿ:T·nP« C›Iu…ë ôãk/°ÚÁmñ¿€Vû+U6 äF‡Zïxþ 6 +v ÈÜÿy*¿ÄóS“’˜\L³$°r)_Á`‹°5_ÜO㛘H&ESãÒqð=ÂÑ*’¤Ó 4ýÚ¸vßD„g¶%+£®îÆP„OS×ýËæ1Þ$"¾ªþ,qlks5úµ>‚Gá«|Z}sƒâ´Ýø4fH ¼Yõ‘H%«Ûqú­´_…¹ lÎ^¬3¬ã7ÐÆ"i|SXmÖJÏ'ƒMk•ú17ð¾ÐUûíp•Í–CÉ]æ6np‚¾oà°BI¤„ +¡”Bð·:PXß!Èä€q·~ÝšÒSZ:*WÅþéöúJqÇFƒò¸Ü›q‡ŒàžEâ*¬¨?á¸=æ•qC +U}–lvÎM?µò£/8–@|Œß<ôŸV&/™1TÈðÛd…ØÜrS~¯’yáL³cÆ÷Í‚°¸ÑÂi¡ì”ANñJ|m¸ò¼Îãè¹yüûØ 51¢Œ“zR³ÑTnSÜ^ï3¡bÛCXïiÏq +S’¢`óOɼàš+Ô˜é^§&¯· þì;vmC×rûɹ¿”svS©œ¥Çɺ`"ÿoLŠþŸBôHÿÖ¸ £=Š±}óûbV}ôÝ™HÉÞHq¢HÄ-Q +gC]µJB xéÁË¡T$¸Y}ƒo™¾¿›A1L†ÏÄlO4wiVÂMšÃcÎO¿ÂþŒ„ÌLH`¾>¸XþZÀþ8ñ»œN_úÍ}‹—•ºÇ4ÿ@•n³aËѺ mJu©h›0(“ß3ˆZ]‰É“Œîãu/Ò§Ö¼0›5ÉîKjØ3K^„û.Ì÷*«–:j«!óW›ÀSh)Rz‡uúµ¡¢h Çܸ+ä<¶*ÍêD-?Íý½%€(‹º¡§–ñ£$rÑi2û)Ö¨fUCraä4ÊXº‹²_zv©½É>Û•4“&AfG¹æŽÞ뜿X R±oW@ãjÖ×}Õ¦ÅeÛHמfJt–`²ÍÛ8üî™Y¨ŸÍ)åRmxKp¢øH=˜;I°K”ÎLÙÎ*/ònÄCû¯sGd¬=ˆûžƒÍùÞ‡Óž%œÚå…yh;g‚6b¼¹t GñÚÿŠÒ—„©utzÛøÅLô–þ¥›kœ"$Ö\Ø´ n$l¢-¿IæTÔ6:Ñyšl$åæŽ[{çŒ&Ò™aõD -‘–iC3Á¥èÓ—&d­Œ @œrˆ—úƒ>nDŒþÒ£›i½ìôZ*®}\UÈjQ¦p9mÏ„J“ýu»|nŸðç‡q ™”lö5èa™×ª4C™lÍææ7‚æpQjÕÈäù±°6kÖlƒ\ý¹âÉØ“c^îÓú s3*ëÝe¾Ú—Y´³Û2 ÊW7ð„%žw²¥ÔæÏŒó (FËó¯If ‚á÷iñä=Ÿ/ìĶt â麌Ót‘÷ý‚4Žÿï-bÕiS'«ú'ŽOä eÆ!m)cmì©ùçïžýÞ^Dö÷’;lÂ]Ôá6q­CÐô'dàlý7Žn¡ª>º”£î+2HI?^—\ĵÈÒ¡]EðE(õFûÖ«bˆúÒ;UÐ8++5Y®Òníï@”ª2ó‚ÒÆÎ&“™ô¸òìùà¶Á°c­…¯‹†²Ñ‰´õTúU­$vú/ýä1èwx » `'ËëB¶€$,ú9§ÿw°ŒáœdL»ƒ\êné™3–#r†m®ª6+Á†‚Åú–èöz¸]eß[CpæIn{e·_àF±s[¦Åñgþ ?bêZÞ=½ß;Ut»“÷}n—kÇuª`‹¿n©Þônðcã´´ãé–Ž±;°÷t§¤+ÍTȦì¬äålsÊGðP¢`}Y°×ˆ.ÎðY9]ŽÍ°…æk2ØüP ë\ Ì +ðC bï”WSÄšþllñùñé§F–²u´Ü ,r\‚]}^}$è=ã²dÊ©Ÿ±±îO;ü,mÙVY´‡Ð¥ì",HÌÏ.æ‚žS4$ªú«;MéÀŠ%´ï‚ø’¥‘Be§[Îõ†RürÓuÒµ"U¹DFr¥MôtçTÈ34h«è%‚rlOOF&ÌæšÎ\‹y>j'RuØ!£8Z»Ì;Á6ê }|¨RºàR¢Ùq@ »Š;“’ÿçÀX¢Ž¹mmýÑ[Ò1 ^ÄŽrÍÏö~3ØY,-æÙHRôÐ%,?"WúÊA‰Å.çÂYïMc'I•˜ð}{V[ÑìMa(¥{d(ÛsSAúʲ H7 1k ›Ĥq?V|v~¸žæpª‚俨2ýNê J·;­;²%)3–H"à‚Ø=NvÂú^¢—}Ñ{l°ubÅ»ìÒºi5™A}µ ܈8–œè0Ù°÷¨eÒ;M5P]Û¡ßs¿ú}¾ÕB$q#F¥ê/Jÿ*Ǫ)œ[Ë£y]8»á¥@®KòÞºþ¾rœ»íçÖ Ìᆰťç øóÍêï'ãN&èûCE’<íöo3ùò¾dÂçÐmžï‹/ÿ­-X¤ÄTÌ ø«©Þg¾ÌÈüMÏ,O+75¶;úµNŠô‚˜l-Òª‡V˜´7À +Ï£c|ïÒØ2xÇÀñ©_Õ±hÇ‹CIéŒ(˯ÛmõSÂÀi8=¹’öœfõôwWYÏhû\¥¹ ƒ9É…¡2”}ž¿s=téV;ô‰c‚§A©¯Ö4­( YnöÖÚÆaé@¸Øoã$J™Î¯×”c€6WÉxyâ7i ;…Mº"`Ï*‰i€rÂèà|xNÕjùDG{u/c›Ý³&`ð&I¯.mž~­ó5ã]{ö¸ŸN·Éë™3´ÃïHQº|Ö.ÕlÄ" ¡þçöÇs8lù¼€œPNŒGõ +a4c}Ìă½“Ž Ŷ´g5ž'l?v¨ÿì7—Ù‘’Zëømɾ‹¨kз6€u@ñØ7"·ÙHt9~aÿ”|ŸrtC ëÚ*2Þ:Šˆ}뱆ã1Ðp.sd™(¨,ÎÌq:ƒÓ9o–nk•õ¼'¼ÿ}õÎÎËïœ1™PÝ‹½¼ÓúÍ2þÁÑ|·”8 Adˆ2‰sbºäÂP«ÀÖdÜ8¨[ßv=RC`¢¸Dz†cûØ7ùʤ ß_.&&Ñq6þ´zó­°À§ˆ¤¾Ivèà¼möu¸Ã®¤ì "µís 0ˆÎè‚96îO«c'­gaC‡ÐÓŠ¾Ý¬jðÐÒ¢gÖ”vƒ›oEÅÁ)ûí'] QÑcÞ™U’ T©£Ä«æ]Š·Bù>ÈÂpx|G:ÄÛCb뺓ô+\l]†Ñ•¿HýmÃf*[®†ÌHNšŸžªõˆ¯ýR*û‡mlSRÌ,›’ñÇíUñ„²=Å8jL¥=÷Ó5‘õHˆ£°Ïz¥µL"BÓw×ö|ùÁ¼…,n—„L±ÓŸÁýE=jˆæMmÒD2DCt»‚^Ð5íðt…Xv^­l<Ÿ›”X¦N.´¶½ådqš¶“²çã&‹‚žfÅs¡Ðüø1¯¶í0hØÊØlÅ{%“X»>hX{J¬˜¨+ð•;ð±ÈçìP/r:·ó=Š›X§ª®W‹ö5¸Wµz.Nçu4Gð_CÖ°éþ×,C€u;™çç|W ÝÞ±„l,þ´ÑÌÌ +¥ î°…á-b CÁñÁ­˜úR°¶‡cH€3›™ŒÐ_!;þ!UÓòw Ù †ú§idú`‘7·[¯ÖàM Vó·¿«.Y+Y≄5ÐGt¦-z#í{ˆdµ€‘WDbÊ=¤ ÒÁÁHÁôèàeeú´Ši ÜBØÙ´D'r'B2ÌB¹×jÊ=캧Ï;Ý©–]Ô^&èj‚³Ä¹<š`Oä›Å£c\k¤¶¿Åõ÷S굩8ÚÂîVnWX·’”k>w)Þï û« +-д üJUv$DôV\ª"±™³MdÄ„|_åߎe²Ä×ÄÓ¿Gô2-äŒsW¹Èå»1 WUR0’êºÐM ¬z¹01(ÇTõ45Ø¡ +M)I-–|?3¡4?´6tÿœ¢ŽZý\‹Š¸d±#×àL3t +ëÂɳ›0zR[¬il¤ü"œ6=¿»?½­‹'›åÑ7°î|ú£ô‚u[Õt{E±8Øð`ŽêBgPªüª­/©ˆõ¯NÆ ³›ÂÈDÏ ä¦»¿È*sI;–…ƒ.Òu¡ÌÞ©J¹#BŸˆ½,ë“ïU3YÓ$Ȩ¼K¡I:ŸHm&%êyK_¢Ë2Ê oßÃŽ>\Çl÷Zh-gÈU 'Ú˜¶e>KL4è›pPÆ„°@7žâ½È2ê{Tíœæ8>QÐôÙ¹EÊá4Þn4Š%[ü«o”jR†Û'¹ž·w–4|â4#ÑP›šäêΤòâ^œG¼™š õòî¼<®dHuîêR•{Bx¸bîË.ž9ñ»–|·Qþd?É”… úSå‰S‰õeK*k|Ùœ Õ C›[KúQ9Ðëg¿cÜå܉h^¬þg¹Ê›¼K&8á"°ð–m.ˆ„梖ûØ_L\þ¢A&Ú¥~ÃüñïS„8A#9 Nk6¸ÀN1•¦Î–ø3ö4O@k1ùÍ;³©°j{é¹Ð8™><×—i‡ÙºòT6L ¼ÏgÃywwYöƒÅŠ¥á©Ù:I½§´þ0D7 +\yÒz.b›H9>§/rf`*—I,±Þ¨Á[iä5¸$Ç{¼O,TRÿ°¸X,l]Ó(uD¦=R•»»à·Üâœ*½ûòh|,o6°Â €òìvp¶ý^ýÌF‡åÉ~†žmÖÁ]ájx´Ô‹/ÝëA]Óï?¯O]~Ü2å6T2««÷Á3—ƒGFñü6à ·9¦SþvyëÃ0srS­=®h ÅЀaçø¨7¡vÉá^xÄ@ÈHT&w¸õ cB†³ºÄM'r•'xˆÓËÜ× Ÿ×Û¼¡ÚČþužÐ­>T°"$jœö+Ÿýülr›q±¤QÈûi<L„‘ÖN,¨Ñ­³´œÁO‘O5\ÄЃ‚ÕW"xzèZ>9Á„:µ^^þ/I`×_MSYowñmA7?'òCɧâ¡môïXÈNŽ|² +ÈÚZ­æÊy”e1Ñý§ÊÄÒ wÔÜÈЉžm ä+'qÞ´ø?ÖE«¨þFò¼(Mu-¬–*õÔ„a6IÎÔ ]“-ŸáTXø;WE(åñ,€fmKÒ5{‘ZÜÍÚÁÙáâŸä½S^½þÐZõO¥Ï›Ý¼éÇvi Lµê’má¶ù|¨¼½;Ö {rIŒ Ž_5YN8!ÐÉàŒ÷Ô) +DÁðŒ4J7mþäVÔ<žk¡ò[~)«*?“°åènwúŸî|Àn‚ 7EF¹”{þO$` +úÚÔ +Lö– z!ðÇ/é™|y Ô‘kÌÕÇy±κ†–?W#tYÕ|i?¢F-¦ÙÝn‰sRÌè3}Ø0îyAÐCp*î 4Ák{ŒÌ6}àþKv^w³ˆ²¥Ï‡xfèQ^wL4ÄŽ–³f³aÏJgã Çts^&M‡ÏœÝ¦’—03¹ƒ÷â,Q$Ómá ÞÒˆÚ0@7´É4Så¾ôÀçñÖ_×ìRÛW’Æ(wÛë°wDÇĵDÀªQËÆë™ùƒN5‘¼¡ª½Õ‹§}rÚ&xïQ_õ'©«¢* µ~˜?Ýo@&“ÜÕ–»!” Õ6y‰½DèZ<ßÈÕÓ\ƒ·Q¬3«3µ¤üoÜ»:dû|=5³hÄv:ûŒ ÷ã²ûQI‰–Û-íòˆÒõ½½@?·_g¬¨_„érXÙíå!K‘.gçu=ŒabI9BócœX|¨Ñ¯f„.¸OÞ<6k¡hóû,÷CñjÞ{'r /F"u,}]SÔÀ”nB0fë8`/oÆ2ÉiN¹;v§ +l5? }øÓ€Ãâ@=–»ÏªÁWÒóRf"°–gÜne@\pçýry8{¶ë‚5Ð{ªïH®J|±_Ÿ«Þ^¢>Ľn;é¹ ’ßPyµ" *ñ wभòË׸®ÈÃöÇò.C­éšÎý… {·õâÛÞú/\¿têíºV*}Z?ï@S‚šÑŽEqA¥ÀCìQ,ÒÇu7ðÇ)…\Ñú×"uÂÈÌDÿ:¶–’ óZ yñÆGr´È0<ú¼9~æ´£ÌQ"¾ 5Âçt}-qþîÑ+æ¶<þY… Ÿ/Ke¡rFòÝ}žµU!ªÉK óÅÚ †§ží’©;5X·öÐ/–N/øÝÎ .´GÈÅf "GKrR¿¯î8G{íb§ þ^p¼Ë.äB8fÐýÐë/`ÉÎôÜ2dæùÚª +`Ÿµ³ºÜÇsZÞZ⢑"‚—¾ìfœc~B}RKqָѡ¤]Âpû-óójn9!×>ÿÕF³[¿¢+˜¬JÀ ¹b׋±Ú¥=™ezh¾‚ë€=Þ¦•OvŠ•ù¸on®)ÒÍÞ€{Ê_ +úÑ÷ÛgO6QéîçöˆÐË×ôTE<‚…ŸAë;ÇòJý¨Ý!._Qêô꟣É$èQ±ÛÌÕb®{Ûº:À^d‘õ¼—GÈ‹ús9íŠ9ßDQ®ºü{4ND»4ºkCi“àʆnž'&…™¬¼Ó1ç> ö°×æßÌ ÌpO’>iÜÿäÊ(}»8í5G×؇˜K¥˜Øpe«P¸WP»0æd!õ°2m¶¸É)Ix°?éæ­¨zû„äëØ©‹ÏŽÑeFÌÁÆæ&v×1Ce¨ŽÞ˜¾'=k>’D[ÕNš1ñŠ¹:îã1H¾$µç­/½öÓÕM\öªþ–XcåÞ½ôÔóù.LÆ9`óÍ_ΤuêàyŠK²¾ˆ˜Õ™4ñÂ)ÙNĻҡ´vàˆHð|kرÉúø߇‹ç ¤÷{qC€^ -µÆh2æËõKêÐ +’ñþ™íFÜs}CªÒUtóÄå&9AÝl¯Æ#Lð§ì>à=8gtÈŒóz¾z1¦^ì!õÏ!£Â×­Vl…êÚ´!œ_«p˜W>BL.œ¯åñ<&Á³ÿmfdÖþD-Ú u£ÆŸ–ýðyä‰L4&øñ±FP"•–ÿQ{á=¨Ô»¶ŸOM‹¹j(2,?ì¸}âUÿÝ?:Ùº;ÈÝ4¶JFï‚:Ä·î„`%3¥Ê4„æÅÄ.÷yÅ^‡Ú¨âã.¸øŸ‰]É—VV¬*`¯Êð?½çÊ¢Õ :Á-x汋¬EŽÊâÍ +•5s!L›E³TbvýF„d£&„^—]7€L¹ÓöÄ7¹yå­_¾ÕùÌêÜ’jAÖþU8d[*èS롈¾w„i¹ýÅ)©àA‘ÞϲͲÃþmëD~˜”~˜ÿ¡4=ºÉí¢µí°<ñÚã¸É¹ÌDzÇeÖ  Zàï0·‘Œ }ä¶?Dÿ™Áæõ0X×k%N9k€ýy–Ãh€"BªŠÖqúóù×ïõa÷‘‘dî EcôØ à½ƒ2Ï$mÌX!ÁÕC^:ü¸äŒ €Õ!•/(7ü·ÝpöDŠ8Qå¾€èq2YüM±€“<ÚdV_"4ŽFα– œúÖôÍÔ`¦ *ö¢…ËÁT!š`X¨y +ñ`Õ^5ê÷yýRq~vé],\Ëáoå6±³†WÅnožŽßIAÕFÏiìàÉóÙűK€¸iÔ‡ÜÔRÃð Gö|ÿ둆7+Õ7˜>{¤eC¹éjÒ¥0–FdÙW»ðÿ«›ìÈmš!gú Ò|Í7ö +Æ:ÊÎzñpb¢§0Ð3mÚ3i5Dµ±˜0Þ:Û’š£2‡)=DVùåzåM%—e5ð)_ËËzA=w~¶tÍ‘ª¾³êïü¿r$ªO'™í” ÑÒ•Ü(ú§$fæAÊ›ò¹ÍY¦9ƒùmŒáÿØ §óÓ3a2žµÜ.ØÕx%ê•lQX‹‡Î‰á2¾î»<œÜCIŒ ËÿØŒ¶á¥Í;éä[·Ôk¿ö»Æ ±^K>Öúœ¿_ñhU¬eŸð߆‹0Ñ#‹"^þ¾ŽòŠMMèºnÏöÓØâxfÙŒø•du•ð½oÒùÞzÕ †0›DÈçJ}!9ÓQ +uo†£ŽF(1; BY&…)Šà B½Ù·M•+kÝD!Ø•51г²èàèdïA4Þa2‚lBeèzºAè\y=jˆú'ùx‡þA¦ËÆ#¤‰î6{Fk¢=(´ÈLJ@èåTÒŠ„âÙsg2îœ îa¤,€=þDEµ¹Æ £´ w‡q_3}r“V·…±Šdc½PºÇIÊî^ÀÉÆ'H¾v~Òêý>[y)|ÝM(°–]SÜ3¼DÌ-ãNÝ~J´óBˆ2籧4ìõé—è8»Ö ’cq9Ö*”zšŸû–ŠÁ¦cèÿ[Áøl¾8zX)æÕ|áN|,QINK,w›9.Šrbzæ¡+ÜÆ[ðY;s¬Þ¾0×éù Ì?(vój<6¤©û+à#X6Dô³Ê΀ ¬2,3‚ÿÚ3ÌzE¬ …NF†ïV¨RH~i zeiêKÓGUÔI·ËÆ‚e=‚Á> ÎØ ´Œíßâ—Êf'Ö@¡[Uunb%rp)Üñ ¿"²°‡Øéá÷%‹À”fÒ[ç¥5ö/.-_©S¹yÄ™×ûl²¾ÏFRm4 yÄZͦ­çõ¸ÊH`xyƒÔlÝ‹i2þ1®0ƒñJ¿š$žÿ'vÕèŠÑ®’fÑšíOQ£aÝá¼úDºÕÕºÕ¥åñ:§Ž8äI#O–X«V/:·Ñ·v¹ÃÃ]ëö`¿'íöÿ•ª ÜBnß%@K¤xHµ¢ÐXoºÏµ3 |üvº<§ÈÔê$q™ûº$–cqH6Àr÷º´ñ^h'{þ"ÊCaþæBÔ¸HÀk=f7“Íìsnyß±K¬cUÚòuZ£óª|Dø¼«>:%–ìòö‹±ée±‘ÒËøù5]ø}&MC‹fÖ®A\ P·nƒòM]ÂGü˜*y÷§ÏEk(“yóW¼÷ÁׯóøÆÖ:ä… @¹'IYes]©š¯ ãĈ`Rl^²²®où? +¯Än^-\Ãm¯>Î(³5šP +èBÕa¦md-[«;zö"`ßÅ =’cÐ_|ƒ[>öBß”(9tÙ¶ž¿\…­ìÄBï¶wnó´›_ìØ%0·­»Š9Á'”%í‰ü"¹¯š{¡w$V?IO¦ÆáiDylŒà$Wк@èßà´Ü‡˜“O‡ÛeØ{IŸëóçjõcãvͧï³ÂÖû±”ÐpxS[;E²¨0s]§~SJJ›Ñ슃…oúÉ÷ñúÒ‡ù&uf–5ºUÓ^‘ :¸àPAL{yc}"ÝÈNtPŒûõa÷aä¤ +ƒb v¹ö|KòR ¼¥”涴szÕTOŽ†´çåŸÒ ¢qZÍ2[E"W©°âÌjË…CÖ¡™í'¢Ž´ßËöU«oÞ6È ·¡Øó¨))]ÖNk4/ggæ fæ™0×o2fœ!HM«ù"˜~‹nÐChãõC$ö¸s7åéöZ”›Ä œ +áÖÌ™Ô2‰î, ¼+ú¬Gò ­U›EE’ÔG¶+=‹Å}âÚª‘+¼ž¿>–¾MºZfɬó!h¼Ø±<¯d1-*Ÿµ»r­eÛ•9ç`‹xÊr´hL¦Ôcro |[º-Ü剉ZÒ# 𢹩5õa7EÒ&3£P"+vÇ))L1ò_Îá¾>ÅÑ Ê¶ +XÁƒÖ +•"-ÐãÕ Q«S˜ï)Åi ý¬Ñ4¯ ƒG…É‚›^ÛoÒAkÍÞ©²ˆbbw¸ïšØùž[¥‹“W~&EνÑv · +ÏÆ3‡—á”Q4¯gÖ”ñŠCÃ#pà +Lr~j¼Í-9¸¥Þ45ˆó±Ñ9uÐÕY‚6ßòÌ¿Í]18„P“B4Az‰(™‘ظñïÀÈ. P>‚ +S“JУt0jºB–¢7å7Ð[=©)ŒZPRŠ¬ ‰•šâ ìùôée\ás° "̺Ùô~\oªÂÈ1É] ,Ø(WÁèT¢ë$¢æ=+Z|GËÒÉÿ ‹¸ÕÙž=٣Ȕ)Šûs‹9@™ÄÁ¿ ç£SÈ.ÃoUSl›Ÿt—<œì¼'棓`ÈÈð.Õ}ÑYCϦ <%ÔK\3/œ;“鹟“*ÍHÕ¦­ƒ{{´$$_gm$Jv‘xasHäÑ`…SºHo‹ß²BLó‰ÊVÑÅ´Œ ü}㣟ÀºO/Xÿ“RPEÃïúðï­|1XïH'˜Y”€b²áIŽh1†Ž*iòš®Ÿµ× CÙ„¼×S…<ŒnCM+dL‰*¼·Û¶)ôhï.³í©*zuv¼ü!ŠQÈ®zxTÿ‡þá+"€=,®>ŽÑW\=ê£+÷*ã.WFogö(Ì姎+Ž‰Ë´ÍÀðªvvp΀›3Åós˜*!vBfýïdV,è¸/œSålJ¾î9‹tO%­ØJ×%`š:µ/R)²Wä^y$AϬLFÛX ŠD¸+þésj»qÒ¥”4h<ÕÇ%‡ü?ÙŠtX׌_ßn}{}”ÙÅEšF%–„U'3ê¿=µP„‚ý½¤¥8É:J u)âÖ‹4Û[n2–¨ŸL®tÏྴÖFTÌG[×Ñ#˜ïïÄV„«ìŒƒ†8M\ÊlôZ[ó.Pº¦û;ªbþ_Ù›Ä4Tzüv¨|4ò‘ÌèýNß+Bb¿XK¨v‘–[ÅâÁÿOñõk³xö¬eå«ÀU\bžã¸>}êšÎÈJ5S˜ÃÃIAÂõuâ¼þ'sieFµ·?iÐ3whöl´¼œÔ˜îÉñ:—²˜IÎQ|Ï2? @•–ÏËS¹Cu›â>ÎaŒóßÀÅ=cžÈák3BÑ;Ôb endstream endobj -1496 0 obj << +1549 0 obj << /Type /FontDescriptor -/FontName /ATJOAU+CMTT10 +/FontName /BGSLBR+CMTT10 /Flags 4 /FontBBox [-4 -235 731 800] /Ascent 611 @@ -18758,10 +19220,10 @@ endobj /ItalicAngle 0 /StemV 69 /XHeight 431 -/CharSet (/A/B/C/D/E/F/I/K/L/M/N/O/P/R/S/T/U/W/Y/a/ampersand/asciitilde/asterisk/b/backslash/bracketleft/bracketright/c/colon/comma/d/e/equal/f/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/r/s/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) -/FontFile 1495 0 R +/CharSet (/A/B/C/D/E/F/I/K/L/M/N/O/P/R/S/T/U/W/Y/a/ampersand/asciitilde/asterisk/b/backslash/bracketleft/bracketright/c/colon/comma/d/e/equal/f/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/r/s/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) +/FontFile 1548 0 R >> endobj -1497 0 obj << +1550 0 obj << /Length1 1289 /Length2 5599 /Length3 0 @@ -18851,7 +19313,7 @@ z(# uÆÏOWX*ðBR¦Á{ endstream endobj -1498 0 obj << +1551 0 obj << /Type /FontDescriptor /FontName /LEILHS+CMTT9 /Flags 4 @@ -18863,1028 +19325,1098 @@ endobj /StemV 74 /XHeight 431 /CharSet (/a/b/c/colon/comma/d/e/equal/f/g/h/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quoteright/r/s/t/two/u/underscore/v/x/y/z) -/FontFile 1497 0 R +/FontFile 1550 0 R >> endobj -437 0 obj << +477 0 obj << /Type /Font /Subtype /Type1 -/BaseFont /GPIGCD+CMBX10 -/FontDescriptor 1468 0 R +/BaseFont /STSKKW+CMBX10 +/FontDescriptor 1521 0 R /FirstChar 12 /LastChar 124 -/Widths 1464 0 R +/Widths 1517 0 R >> endobj -435 0 obj << +475 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GBHFLB+CMBX12 -/FontDescriptor 1470 0 R +/FontDescriptor 1523 0 R /FirstChar 12 /LastChar 124 -/Widths 1466 0 R +/Widths 1519 0 R >> endobj -599 0 obj << +649 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XOPWSZ+CMMI10 -/FontDescriptor 1472 0 R +/FontDescriptor 1525 0 R /FirstChar 11 /LastChar 122 -/Widths 1461 0 R +/Widths 1514 0 R >> endobj -647 0 obj << +697 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RVPZIX+CMMI5 -/FontDescriptor 1474 0 R +/FontDescriptor 1527 0 R /FirstChar 105 /LastChar 105 -/Widths 1454 0 R +/Widths 1507 0 R >> endobj -618 0 obj << +666 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LUIBYK+CMMI7 -/FontDescriptor 1476 0 R +/FontDescriptor 1529 0 R /FirstChar 59 /LastChar 114 -/Widths 1458 0 R +/Widths 1511 0 R >> endobj -438 0 obj << +478 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KYXPCE+CMR10 -/FontDescriptor 1478 0 R +/FontDescriptor 1531 0 R /FirstChar 11 /LastChar 123 -/Widths 1463 0 R +/Widths 1516 0 R >> endobj -620 0 obj << +668 0 obj << /Type /Font /Subtype /Type1 /BaseFont /YPSQTS+CMR6 -/FontDescriptor 1480 0 R +/FontDescriptor 1533 0 R /FirstChar 49 /LastChar 51 -/Widths 1456 0 R +/Widths 1509 0 R >> endobj -617 0 obj << +665 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EWABFK+CMR7 -/FontDescriptor 1482 0 R +/FontDescriptor 1535 0 R /FirstChar 49 /LastChar 58 -/Widths 1459 0 R +/Widths 1512 0 R >> endobj -622 0 obj << +670 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TDRORS+CMR8 -/FontDescriptor 1484 0 R +/FontDescriptor 1537 0 R /FirstChar 40 /LastChar 121 -/Widths 1455 0 R +/Widths 1508 0 R >> endobj -941 0 obj << +995 0 obj << /Type /Font /Subtype /Type1 /BaseFont /HLSVSX+CMR9 -/FontDescriptor 1486 0 R +/FontDescriptor 1539 0 R /FirstChar 40 /LastChar 115 -/Widths 1451 0 R +/Widths 1504 0 R >> endobj -619 0 obj << +667 0 obj << /Type /Font /Subtype /Type1 /BaseFont /IMOIOS+CMSY10 -/FontDescriptor 1488 0 R +/FontDescriptor 1541 0 R /FirstChar 0 /LastChar 120 -/Widths 1457 0 R +/Widths 1510 0 R >> endobj -865 0 obj << +918 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XNLILI+CMSY7 -/FontDescriptor 1490 0 R +/FontDescriptor 1543 0 R /FirstChar 0 /LastChar 49 -/Widths 1452 0 R +/Widths 1505 0 R >> endobj -579 0 obj << +629 0 obj << /Type /Font /Subtype /Type1 /BaseFont /HBJLDT+CMTI10 -/FontDescriptor 1492 0 R +/FontDescriptor 1545 0 R /FirstChar 11 /LastChar 121 -/Widths 1462 0 R +/Widths 1515 0 R >> endobj -436 0 obj << +476 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OZJPZO+CMTI12 -/FontDescriptor 1494 0 R +/FontDescriptor 1547 0 R /FirstChar 65 /LastChar 121 -/Widths 1465 0 R +/Widths 1518 0 R >> endobj -616 0 obj << +664 0 obj << /Type /Font /Subtype /Type1 -/BaseFont /ATJOAU+CMTT10 -/FontDescriptor 1496 0 R +/BaseFont /BGSLBR+CMTT10 +/FontDescriptor 1549 0 R /FirstChar 37 /LastChar 126 -/Widths 1460 0 R +/Widths 1513 0 R >> endobj -746 0 obj << +818 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LEILHS+CMTT9 -/FontDescriptor 1498 0 R +/FontDescriptor 1551 0 R /FirstChar 39 /LastChar 122 -/Widths 1453 0 R +/Widths 1506 0 R >> endobj -439 0 obj << +479 0 obj << /Type /Pages /Count 6 -/Parent 1499 0 R -/Kids [430 0 R 441 0 R 489 0 R 541 0 R 559 0 R 563 0 R] +/Parent 1552 0 R +/Kids [470 0 R 481 0 R 531 0 R 583 0 R 609 0 R 613 0 R] >> endobj -580 0 obj << +630 0 obj << /Type /Pages /Count 6 -/Parent 1499 0 R -/Kids [577 0 R 597 0 R 613 0 R 627 0 R 640 0 R 644 0 R] +/Parent 1552 0 R +/Kids [627 0 R 647 0 R 661 0 R 677 0 R 690 0 R 694 0 R] >> endobj -674 0 obj << +723 0 obj << /Type /Pages /Count 6 -/Parent 1499 0 R -/Kids [660 0 R 676 0 R 682 0 R 688 0 R 704 0 R 711 0 R] +/Parent 1552 0 R +/Kids [707 0 R 726 0 R 732 0 R 738 0 R 752 0 R 762 0 R] >> endobj -721 0 obj << +769 0 obj << /Type /Pages /Count 6 -/Parent 1499 0 R -/Kids [717 0 R 724 0 R 736 0 R 743 0 R 750 0 R 756 0 R] +/Parent 1552 0 R +/Kids [766 0 R 774 0 R 781 0 R 785 0 R 790 0 R 796 0 R] >> endobj -765 0 obj << +807 0 obj << /Type /Pages /Count 6 -/Parent 1499 0 R -/Kids [761 0 R 767 0 R 777 0 R 782 0 R 790 0 R 795 0 R] +/Parent 1552 0 R +/Kids [803 0 R 809 0 R 815 0 R 820 0 R 830 0 R 835 0 R] >> endobj -807 0 obj << +847 0 obj << /Type /Pages /Count 6 -/Parent 1499 0 R -/Kids [803 0 R 809 0 R 815 0 R 822 0 R 829 0 R 836 0 R] +/Parent 1552 0 R +/Kids [843 0 R 849 0 R 857 0 R 862 0 R 868 0 R 875 0 R] >> endobj -844 0 obj << +886 0 obj << /Type /Pages /Count 6 -/Parent 1500 0 R -/Kids [841 0 R 848 0 R 855 0 R 862 0 R 872 0 R 886 0 R] +/Parent 1553 0 R +/Kids [882 0 R 890 0 R 895 0 R 901 0 R 908 0 R 915 0 R] >> endobj -896 0 obj << +932 0 obj << /Type /Pages /Count 6 -/Parent 1500 0 R -/Kids [892 0 R 902 0 R 908 0 R 913 0 R 920 0 R 928 0 R] +/Parent 1553 0 R +/Kids [925 0 R 940 0 R 946 0 R 955 0 R 961 0 R 966 0 R] >> endobj -942 0 obj << +977 0 obj << /Type /Pages /Count 6 -/Parent 1500 0 R -/Kids [938 0 R 946 0 R 955 0 R 963 0 R 967 0 R 978 0 R] +/Parent 1553 0 R +/Kids [973 0 R 982 0 R 992 0 R 999 0 R 1008 0 R 1016 0 R] >> endobj -986 0 obj << +1023 0 obj << /Type /Pages /Count 6 -/Parent 1500 0 R -/Kids [983 0 R 990 0 R 995 0 R 999 0 R 1004 0 R 1009 0 R] +/Parent 1553 0 R +/Kids [1020 0 R 1032 0 R 1037 0 R 1043 0 R 1048 0 R 1052 0 R] >> endobj -1022 0 obj << +1061 0 obj << /Type /Pages /Count 6 -/Parent 1500 0 R -/Kids [1018 0 R 1025 0 R 1033 0 R 1040 0 R 1045 0 R 1051 0 R] +/Parent 1553 0 R +/Kids [1057 0 R 1063 0 R 1072 0 R 1078 0 R 1086 0 R 1093 0 R] >> endobj -1060 0 obj << +1101 0 obj << /Type /Pages /Count 6 -/Parent 1500 0 R -/Kids [1055 0 R 1064 0 R 1074 0 R 1078 0 R 1090 0 R 1096 0 R] +/Parent 1553 0 R +/Kids [1098 0 R 1105 0 R 1109 0 R 1117 0 R 1127 0 R 1131 0 R] >> endobj -1108 0 obj << +1148 0 obj << /Type /Pages /Count 6 -/Parent 1501 0 R -/Kids [1105 0 R 1112 0 R 1118 0 R 1123 0 R 1127 0 R 1134 0 R] +/Parent 1554 0 R +/Kids [1143 0 R 1150 0 R 1159 0 R 1165 0 R 1171 0 R 1176 0 R] >> endobj -1142 0 obj << +1185 0 obj << /Type /Pages /Count 6 -/Parent 1501 0 R -/Kids [1139 0 R 1144 0 R 1149 0 R 1153 0 R 1160 0 R 1165 0 R] +/Parent 1554 0 R +/Kids [1180 0 R 1188 0 R 1193 0 R 1197 0 R 1202 0 R 1206 0 R] >> endobj -1175 0 obj << +1216 0 obj << /Type /Pages /Count 6 -/Parent 1501 0 R -/Kids [1171 0 R 1178 0 R 1184 0 R 1190 0 R 1197 0 R 1204 0 R] +/Parent 1554 0 R +/Kids [1213 0 R 1219 0 R 1225 0 R 1231 0 R 1237 0 R 1243 0 R] >> endobj -1214 0 obj << +1255 0 obj << /Type /Pages /Count 6 -/Parent 1501 0 R -/Kids [1208 0 R 1219 0 R 1223 0 R 1227 0 R 1240 0 R 1244 0 R] +/Parent 1554 0 R +/Kids [1250 0 R 1258 0 R 1262 0 R 1272 0 R 1276 0 R 1280 0 R] >> endobj -1255 0 obj << +1296 0 obj << /Type /Pages /Count 6 -/Parent 1501 0 R -/Kids [1250 0 R 1257 0 R 1264 0 R 1268 0 R 1272 0 R 1276 0 R] +/Parent 1554 0 R +/Kids [1293 0 R 1298 0 R 1304 0 R 1310 0 R 1317 0 R 1321 0 R] >> endobj -1283 0 obj << +1328 0 obj << /Type /Pages /Count 6 -/Parent 1501 0 R -/Kids [1280 0 R 1285 0 R 1289 0 R 1295 0 R 1301 0 R 1307 0 R] +/Parent 1554 0 R +/Kids [1325 0 R 1330 0 R 1334 0 R 1338 0 R 1342 0 R 1348 0 R] >> endobj -1318 0 obj << +1359 0 obj << /Type /Pages /Count 6 -/Parent 1502 0 R -/Kids [1313 0 R 1320 0 R 1325 0 R 1332 0 R 1338 0 R 1342 0 R] +/Parent 1555 0 R +/Kids [1354 0 R 1361 0 R 1367 0 R 1373 0 R 1378 0 R 1385 0 R] >> endobj -1349 0 obj << +1394 0 obj << /Type /Pages /Count 6 -/Parent 1502 0 R -/Kids [1346 0 R 1351 0 R 1355 0 R 1359 0 R 1364 0 R 1369 0 R] +/Parent 1555 0 R +/Kids [1391 0 R 1396 0 R 1400 0 R 1404 0 R 1408 0 R 1412 0 R] >> endobj -1377 0 obj << +1420 0 obj << /Type /Pages /Count 6 -/Parent 1502 0 R -/Kids [1374 0 R 1379 0 R 1384 0 R 1388 0 R 1394 0 R 1403 0 R] +/Parent 1555 0 R +/Kids [1417 0 R 1423 0 R 1428 0 R 1432 0 R 1437 0 R 1441 0 R] >> endobj -1412 0 obj << +1451 0 obj << /Type /Pages /Count 6 -/Parent 1502 0 R -/Kids [1409 0 R 1415 0 R 1419 0 R 1425 0 R 1430 0 R 1434 0 R] +/Parent 1555 0 R +/Kids [1447 0 R 1457 0 R 1463 0 R 1468 0 R 1472 0 R 1478 0 R] >> endobj -1445 0 obj << +1486 0 obj << /Type /Pages -/Count 2 -/Parent 1502 0 R -/Kids [1438 0 R 1447 0 R] +/Count 4 +/Parent 1555 0 R +/Kids [1483 0 R 1488 0 R 1492 0 R 1500 0 R] >> endobj -1499 0 obj << +1552 0 obj << /Type /Pages /Count 36 -/Parent 1503 0 R -/Kids [439 0 R 580 0 R 674 0 R 721 0 R 765 0 R 807 0 R] +/Parent 1556 0 R +/Kids [479 0 R 630 0 R 723 0 R 769 0 R 807 0 R 847 0 R] >> endobj -1500 0 obj << +1553 0 obj << /Type /Pages /Count 36 -/Parent 1503 0 R -/Kids [844 0 R 896 0 R 942 0 R 986 0 R 1022 0 R 1060 0 R] +/Parent 1556 0 R +/Kids [886 0 R 932 0 R 977 0 R 1023 0 R 1061 0 R 1101 0 R] >> endobj -1501 0 obj << +1554 0 obj << /Type /Pages /Count 36 -/Parent 1503 0 R -/Kids [1108 0 R 1142 0 R 1175 0 R 1214 0 R 1255 0 R 1283 0 R] +/Parent 1556 0 R +/Kids [1148 0 R 1185 0 R 1216 0 R 1255 0 R 1296 0 R 1328 0 R] >> endobj -1502 0 obj << +1555 0 obj << /Type /Pages -/Count 26 -/Parent 1503 0 R -/Kids [1318 0 R 1349 0 R 1377 0 R 1412 0 R 1445 0 R] +/Count 28 +/Parent 1556 0 R +/Kids [1359 0 R 1394 0 R 1420 0 R 1451 0 R 1486 0 R] >> endobj -1503 0 obj << +1556 0 obj << /Type /Pages -/Count 134 -/Kids [1499 0 R 1500 0 R 1501 0 R 1502 0 R] +/Count 136 +/Kids [1552 0 R 1553 0 R 1554 0 R 1555 0 R] >> endobj -1504 0 obj << +1557 0 obj << /Type /Outlines /First 7 0 R /Last 7 0 R /Count 1 >> endobj +467 0 obj << +/Title 468 0 R +/A 465 0 R +/Parent 463 0 R +>> endobj +463 0 obj << +/Title 464 0 R +/A 461 0 R +/Parent 7 0 R +/Prev 443 0 R +/First 467 0 R +/Last 467 0 R +/Count -1 +>> endobj +459 0 obj << +/Title 460 0 R +/A 457 0 R +/Parent 443 0 R +/Prev 455 0 R +>> endobj +455 0 obj << +/Title 456 0 R +/A 453 0 R +/Parent 443 0 R +/Prev 451 0 R +/Next 459 0 R +>> endobj +451 0 obj << +/Title 452 0 R +/A 449 0 R +/Parent 443 0 R +/Prev 447 0 R +/Next 455 0 R +>> endobj +447 0 obj << +/Title 448 0 R +/A 445 0 R +/Parent 443 0 R +/Next 451 0 R +>> endobj +443 0 obj << +/Title 444 0 R +/A 441 0 R +/Parent 7 0 R +/Prev 419 0 R +/Next 463 0 R +/First 447 0 R +/Last 459 0 R +/Count -4 +>> endobj +439 0 obj << +/Title 440 0 R +/A 437 0 R +/Parent 423 0 R +/Prev 435 0 R +>> endobj +435 0 obj << +/Title 436 0 R +/A 433 0 R +/Parent 423 0 R +/Prev 431 0 R +/Next 439 0 R +>> endobj +431 0 obj << +/Title 432 0 R +/A 429 0 R +/Parent 423 0 R +/Prev 427 0 R +/Next 435 0 R +>> endobj 427 0 obj << /Title 428 0 R /A 425 0 R /Parent 423 0 R +/Next 431 0 R >> endobj 423 0 obj << /Title 424 0 R /A 421 0 R -/Parent 7 0 R -/Prev 403 0 R +/Parent 419 0 R /First 427 0 R -/Last 427 0 R -/Count -1 +/Last 439 0 R +/Count -4 >> endobj 419 0 obj << /Title 420 0 R /A 417 0 R -/Parent 403 0 R -/Prev 415 0 R +/Parent 7 0 R +/Prev 399 0 R +/Next 443 0 R +/First 423 0 R +/Last 423 0 R +/Count -1 >> endobj 415 0 obj << /Title 416 0 R /A 413 0 R -/Parent 403 0 R +/Parent 399 0 R /Prev 411 0 R -/Next 419 0 R >> endobj 411 0 obj << /Title 412 0 R /A 409 0 R -/Parent 403 0 R +/Parent 399 0 R /Prev 407 0 R /Next 415 0 R >> endobj 407 0 obj << /Title 408 0 R /A 405 0 R -/Parent 403 0 R +/Parent 399 0 R +/Prev 403 0 R /Next 411 0 R >> endobj 403 0 obj << /Title 404 0 R /A 401 0 R -/Parent 7 0 R -/Prev 379 0 R -/Next 423 0 R -/First 407 0 R -/Last 419 0 R -/Count -4 +/Parent 399 0 R +/Next 407 0 R >> endobj 399 0 obj << /Title 400 0 R /A 397 0 R -/Parent 383 0 R -/Prev 395 0 R +/Parent 7 0 R +/Prev 331 0 R +/Next 419 0 R +/First 403 0 R +/Last 415 0 R +/Count -4 >> endobj 395 0 obj << /Title 396 0 R /A 393 0 R -/Parent 383 0 R +/Parent 331 0 R /Prev 391 0 R -/Next 399 0 R >> endobj 391 0 obj << /Title 392 0 R /A 389 0 R -/Parent 383 0 R +/Parent 331 0 R /Prev 387 0 R /Next 395 0 R >> endobj 387 0 obj << /Title 388 0 R /A 385 0 R -/Parent 383 0 R +/Parent 331 0 R +/Prev 383 0 R /Next 391 0 R >> endobj 383 0 obj << /Title 384 0 R /A 381 0 R -/Parent 379 0 R -/First 387 0 R -/Last 399 0 R -/Count -4 +/Parent 331 0 R +/Prev 379 0 R +/Next 387 0 R >> endobj 379 0 obj << /Title 380 0 R /A 377 0 R -/Parent 7 0 R -/Prev 359 0 R -/Next 403 0 R -/First 383 0 R -/Last 383 0 R -/Count -1 +/Parent 331 0 R +/Prev 375 0 R +/Next 383 0 R >> endobj 375 0 obj << /Title 376 0 R /A 373 0 R -/Parent 359 0 R +/Parent 331 0 R /Prev 371 0 R +/Next 379 0 R >> endobj 371 0 obj << /Title 372 0 R /A 369 0 R -/Parent 359 0 R +/Parent 331 0 R /Prev 367 0 R /Next 375 0 R >> endobj 367 0 obj << /Title 368 0 R /A 365 0 R -/Parent 359 0 R +/Parent 331 0 R /Prev 363 0 R /Next 371 0 R >> endobj 363 0 obj << /Title 364 0 R /A 361 0 R -/Parent 359 0 R +/Parent 331 0 R +/Prev 359 0 R /Next 367 0 R >> endobj 359 0 obj << /Title 360 0 R /A 357 0 R -/Parent 7 0 R -/Prev 291 0 R -/Next 379 0 R -/First 363 0 R -/Last 375 0 R -/Count -4 +/Parent 331 0 R +/Prev 355 0 R +/Next 363 0 R >> endobj 355 0 obj << /Title 356 0 R /A 353 0 R -/Parent 291 0 R +/Parent 331 0 R /Prev 351 0 R +/Next 359 0 R >> endobj 351 0 obj << /Title 352 0 R /A 349 0 R -/Parent 291 0 R +/Parent 331 0 R /Prev 347 0 R /Next 355 0 R >> endobj 347 0 obj << /Title 348 0 R /A 345 0 R -/Parent 291 0 R +/Parent 331 0 R /Prev 343 0 R /Next 351 0 R >> endobj 343 0 obj << /Title 344 0 R /A 341 0 R -/Parent 291 0 R +/Parent 331 0 R /Prev 339 0 R /Next 347 0 R >> endobj 339 0 obj << /Title 340 0 R /A 337 0 R -/Parent 291 0 R +/Parent 331 0 R /Prev 335 0 R /Next 343 0 R >> endobj 335 0 obj << /Title 336 0 R /A 333 0 R -/Parent 291 0 R -/Prev 331 0 R +/Parent 331 0 R /Next 339 0 R >> endobj 331 0 obj << /Title 332 0 R /A 329 0 R -/Parent 291 0 R -/Prev 327 0 R -/Next 335 0 R +/Parent 7 0 R +/Prev 219 0 R +/Next 399 0 R +/First 335 0 R +/Last 395 0 R +/Count -16 >> endobj 327 0 obj << /Title 328 0 R /A 325 0 R -/Parent 291 0 R +/Parent 219 0 R /Prev 323 0 R -/Next 331 0 R >> endobj 323 0 obj << /Title 324 0 R /A 321 0 R -/Parent 291 0 R +/Parent 219 0 R /Prev 319 0 R /Next 327 0 R >> endobj 319 0 obj << /Title 320 0 R /A 317 0 R -/Parent 291 0 R +/Parent 219 0 R /Prev 315 0 R /Next 323 0 R >> endobj 315 0 obj << /Title 316 0 R /A 313 0 R -/Parent 291 0 R +/Parent 219 0 R /Prev 311 0 R /Next 319 0 R >> endobj 311 0 obj << /Title 312 0 R /A 309 0 R -/Parent 291 0 R +/Parent 219 0 R /Prev 307 0 R /Next 315 0 R >> endobj 307 0 obj << /Title 308 0 R /A 305 0 R -/Parent 291 0 R +/Parent 219 0 R /Prev 303 0 R /Next 311 0 R >> endobj 303 0 obj << /Title 304 0 R /A 301 0 R -/Parent 291 0 R +/Parent 219 0 R /Prev 299 0 R /Next 307 0 R >> endobj 299 0 obj << /Title 300 0 R /A 297 0 R -/Parent 291 0 R +/Parent 219 0 R /Prev 295 0 R /Next 303 0 R >> endobj 295 0 obj << /Title 296 0 R /A 293 0 R -/Parent 291 0 R +/Parent 219 0 R +/Prev 291 0 R /Next 299 0 R >> endobj 291 0 obj << /Title 292 0 R /A 289 0 R -/Parent 7 0 R -/Prev 179 0 R -/Next 359 0 R -/First 295 0 R -/Last 355 0 R -/Count -16 +/Parent 219 0 R +/Prev 287 0 R +/Next 295 0 R >> endobj 287 0 obj << /Title 288 0 R /A 285 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 283 0 R +/Next 291 0 R >> endobj 283 0 obj << /Title 284 0 R /A 281 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 279 0 R /Next 287 0 R >> endobj 279 0 obj << /Title 280 0 R /A 277 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 275 0 R /Next 283 0 R >> endobj 275 0 obj << /Title 276 0 R /A 273 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 271 0 R /Next 279 0 R >> endobj 271 0 obj << /Title 272 0 R /A 269 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 267 0 R /Next 275 0 R >> endobj 267 0 obj << /Title 268 0 R /A 265 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 263 0 R /Next 271 0 R >> endobj 263 0 obj << /Title 264 0 R /A 261 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 259 0 R /Next 267 0 R >> endobj 259 0 obj << /Title 260 0 R /A 257 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 255 0 R /Next 263 0 R >> endobj 255 0 obj << /Title 256 0 R /A 253 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 251 0 R /Next 259 0 R >> endobj 251 0 obj << /Title 252 0 R /A 249 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 247 0 R /Next 255 0 R >> endobj 247 0 obj << /Title 248 0 R /A 245 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 243 0 R /Next 251 0 R >> endobj 243 0 obj << /Title 244 0 R /A 241 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 239 0 R /Next 247 0 R >> endobj 239 0 obj << /Title 240 0 R /A 237 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 235 0 R /Next 243 0 R >> endobj 235 0 obj << /Title 236 0 R /A 233 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 231 0 R /Next 239 0 R >> endobj 231 0 obj << /Title 232 0 R /A 229 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 227 0 R /Next 235 0 R >> endobj 227 0 obj << /Title 228 0 R /A 225 0 R -/Parent 179 0 R +/Parent 219 0 R /Prev 223 0 R /Next 231 0 R >> endobj 223 0 obj << /Title 224 0 R /A 221 0 R -/Parent 179 0 R -/Prev 219 0 R +/Parent 219 0 R /Next 227 0 R >> endobj 219 0 obj << /Title 220 0 R /A 217 0 R -/Parent 179 0 R -/Prev 215 0 R -/Next 223 0 R +/Parent 7 0 R +/Prev 199 0 R +/Next 331 0 R +/First 223 0 R +/Last 327 0 R +/Count -27 >> endobj 215 0 obj << /Title 216 0 R /A 213 0 R -/Parent 179 0 R +/Parent 199 0 R /Prev 211 0 R -/Next 219 0 R >> endobj 211 0 obj << /Title 212 0 R /A 209 0 R -/Parent 179 0 R +/Parent 199 0 R /Prev 207 0 R /Next 215 0 R >> endobj 207 0 obj << /Title 208 0 R /A 205 0 R -/Parent 179 0 R +/Parent 199 0 R /Prev 203 0 R /Next 211 0 R >> endobj 203 0 obj << /Title 204 0 R /A 201 0 R -/Parent 179 0 R -/Prev 199 0 R +/Parent 199 0 R /Next 207 0 R >> endobj 199 0 obj << /Title 200 0 R /A 197 0 R -/Parent 179 0 R -/Prev 195 0 R -/Next 203 0 R +/Parent 7 0 R +/Prev 147 0 R +/Next 219 0 R +/First 203 0 R +/Last 215 0 R +/Count -4 >> endobj 195 0 obj << /Title 196 0 R /A 193 0 R -/Parent 179 0 R +/Parent 147 0 R /Prev 191 0 R -/Next 199 0 R >> endobj 191 0 obj << /Title 192 0 R /A 189 0 R -/Parent 179 0 R +/Parent 147 0 R /Prev 187 0 R /Next 195 0 R >> endobj 187 0 obj << /Title 188 0 R /A 185 0 R -/Parent 179 0 R +/Parent 147 0 R /Prev 183 0 R /Next 191 0 R >> endobj 183 0 obj << /Title 184 0 R /A 181 0 R -/Parent 179 0 R +/Parent 147 0 R +/Prev 179 0 R /Next 187 0 R >> endobj 179 0 obj << /Title 180 0 R /A 177 0 R -/Parent 7 0 R -/Prev 159 0 R -/Next 291 0 R -/First 183 0 R -/Last 287 0 R -/Count -27 +/Parent 147 0 R +/Prev 175 0 R +/Next 183 0 R >> endobj 175 0 obj << /Title 176 0 R /A 173 0 R -/Parent 159 0 R +/Parent 147 0 R /Prev 171 0 R +/Next 179 0 R >> endobj 171 0 obj << /Title 172 0 R /A 169 0 R -/Parent 159 0 R +/Parent 147 0 R /Prev 167 0 R /Next 175 0 R >> endobj 167 0 obj << /Title 168 0 R /A 165 0 R -/Parent 159 0 R +/Parent 147 0 R /Prev 163 0 R /Next 171 0 R >> endobj 163 0 obj << /Title 164 0 R /A 161 0 R -/Parent 159 0 R +/Parent 147 0 R +/Prev 159 0 R /Next 167 0 R >> endobj 159 0 obj << /Title 160 0 R /A 157 0 R -/Parent 7 0 R -/Prev 107 0 R -/Next 179 0 R -/First 163 0 R -/Last 175 0 R -/Count -4 +/Parent 147 0 R +/Prev 155 0 R +/Next 163 0 R >> endobj 155 0 obj << /Title 156 0 R /A 153 0 R -/Parent 107 0 R +/Parent 147 0 R /Prev 151 0 R +/Next 159 0 R >> endobj 151 0 obj << /Title 152 0 R /A 149 0 R -/Parent 107 0 R -/Prev 147 0 R +/Parent 147 0 R /Next 155 0 R >> endobj 147 0 obj << /Title 148 0 R /A 145 0 R -/Parent 107 0 R -/Prev 143 0 R -/Next 151 0 R +/Parent 7 0 R +/Prev 35 0 R +/Next 199 0 R +/First 151 0 R +/Last 195 0 R +/Count -12 >> endobj 143 0 obj << /Title 144 0 R /A 141 0 R -/Parent 107 0 R +/Parent 35 0 R /Prev 139 0 R -/Next 147 0 R >> endobj 139 0 obj << /Title 140 0 R /A 137 0 R -/Parent 107 0 R -/Prev 135 0 R +/Parent 35 0 R +/Prev 119 0 R /Next 143 0 R >> endobj 135 0 obj << /Title 136 0 R /A 133 0 R -/Parent 107 0 R +/Parent 119 0 R /Prev 131 0 R -/Next 139 0 R >> endobj 131 0 obj << /Title 132 0 R /A 129 0 R -/Parent 107 0 R +/Parent 119 0 R /Prev 127 0 R /Next 135 0 R >> endobj 127 0 obj << /Title 128 0 R /A 125 0 R -/Parent 107 0 R +/Parent 119 0 R /Prev 123 0 R /Next 131 0 R >> endobj 123 0 obj << /Title 124 0 R /A 121 0 R -/Parent 107 0 R -/Prev 119 0 R +/Parent 119 0 R /Next 127 0 R >> endobj 119 0 obj << /Title 120 0 R /A 117 0 R -/Parent 107 0 R -/Prev 115 0 R -/Next 123 0 R +/Parent 35 0 R +/Prev 79 0 R +/Next 139 0 R +/First 123 0 R +/Last 135 0 R +/Count -4 >> endobj 115 0 obj << /Title 116 0 R /A 113 0 R -/Parent 107 0 R +/Parent 79 0 R /Prev 111 0 R -/Next 119 0 R >> endobj 111 0 obj << /Title 112 0 R /A 109 0 R -/Parent 107 0 R +/Parent 79 0 R +/Prev 107 0 R /Next 115 0 R >> endobj 107 0 obj << /Title 108 0 R /A 105 0 R -/Parent 7 0 R -/Prev 35 0 R -/Next 159 0 R -/First 111 0 R -/Last 155 0 R -/Count -12 +/Parent 79 0 R +/Prev 103 0 R +/Next 111 0 R >> endobj 103 0 obj << /Title 104 0 R /A 101 0 R -/Parent 63 0 R +/Parent 79 0 R /Prev 99 0 R +/Next 107 0 R >> endobj 99 0 obj << /Title 100 0 R /A 97 0 R -/Parent 63 0 R +/Parent 79 0 R /Prev 95 0 R /Next 103 0 R >> endobj 95 0 obj << /Title 96 0 R /A 93 0 R -/Parent 63 0 R +/Parent 79 0 R /Prev 91 0 R /Next 99 0 R >> endobj 91 0 obj << /Title 92 0 R /A 89 0 R -/Parent 63 0 R +/Parent 79 0 R /Prev 87 0 R /Next 95 0 R >> endobj 87 0 obj << /Title 88 0 R /A 85 0 R -/Parent 63 0 R +/Parent 79 0 R /Prev 83 0 R /Next 91 0 R >> endobj 83 0 obj << /Title 84 0 R /A 81 0 R -/Parent 63 0 R -/Prev 79 0 R +/Parent 79 0 R /Next 87 0 R >> endobj 79 0 obj << /Title 80 0 R /A 77 0 R -/Parent 63 0 R -/Prev 75 0 R -/Next 83 0 R +/Parent 35 0 R +/Prev 39 0 R +/Next 119 0 R +/First 83 0 R +/Last 115 0 R +/Count -9 >> endobj 75 0 obj << /Title 76 0 R /A 73 0 R -/Parent 63 0 R +/Parent 39 0 R /Prev 71 0 R -/Next 79 0 R >> endobj 71 0 obj << /Title 72 0 R /A 69 0 R -/Parent 63 0 R +/Parent 39 0 R /Prev 67 0 R /Next 75 0 R >> endobj 67 0 obj << /Title 68 0 R /A 65 0 R -/Parent 63 0 R +/Parent 39 0 R +/Prev 63 0 R /Next 71 0 R >> endobj 63 0 obj << /Title 64 0 R /A 61 0 R -/Parent 35 0 R +/Parent 39 0 R /Prev 59 0 R -/First 67 0 R -/Last 103 0 R -/Count -10 +/Next 67 0 R >> endobj 59 0 obj << /Title 60 0 R /A 57 0 R -/Parent 35 0 R +/Parent 39 0 R /Prev 55 0 R /Next 63 0 R >> endobj 55 0 obj << /Title 56 0 R /A 53 0 R -/Parent 35 0 R -/Prev 47 0 R +/Parent 39 0 R +/Prev 51 0 R /Next 59 0 R >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R -/Parent 47 0 R +/Parent 39 0 R +/Prev 47 0 R +/Next 55 0 R >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R -/Parent 35 0 R -/Prev 39 0 R -/Next 55 0 R -/First 51 0 R -/Last 51 0 R -/Count -1 +/Parent 39 0 R +/Prev 43 0 R +/Next 51 0 R >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 39 0 R +/Next 47 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 35 0 R -/Next 47 0 R +/Next 79 0 R /First 43 0 R -/Last 43 0 R -/Count -1 +/Last 75 0 R +/Count -9 >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 7 0 R /Prev 15 0 R -/Next 107 0 R +/Next 147 0 R /First 39 0 R -/Last 63 0 R +/Last 143 0 R /Count -5 >> endobj 31 0 obj << @@ -19932,1959 +20464,2022 @@ endobj 7 0 obj << /Title 8 0 R /A 5 0 R -/Parent 1504 0 R +/Parent 1557 0 R /First 11 0 R -/Last 423 0 R +/Last 463 0 R /Count -11 >> endobj -1505 0 obj << -/Names [(Doc-Start) 434 0 R (Hfootnote.1) 621 0 R (Hfootnote.2) 623 0 R (Hfootnote.3) 1397 0 R (Item.1) 648 0 R (Item.10) 657 0 R] +1558 0 obj << +/Names [(Doc-Start) 474 0 R (Hfootnote.1) 669 0 R (Hfootnote.2) 671 0 R (Hfootnote.3) 1450 0 R (Item.1) 698 0 R (Item.10) 711 0 R] /Limits [(Doc-Start) (Item.10)] >> endobj -1506 0 obj << -/Names [(Item.100) 1262 0 R (Item.101) 1292 0 R (Item.102) 1293 0 R (Item.103) 1298 0 R (Item.104) 1299 0 R (Item.105) 1304 0 R] +1559 0 obj << +/Names [(Item.100) 1352 0 R (Item.101) 1357 0 R (Item.102) 1358 0 R (Item.103) 1364 0 R (Item.104) 1365 0 R (Item.105) 1370 0 R] /Limits [(Item.100) (Item.105)] >> endobj -1507 0 obj << -/Names [(Item.106) 1305 0 R (Item.107) 1310 0 R (Item.108) 1311 0 R (Item.109) 1316 0 R (Item.11) 663 0 R (Item.110) 1317 0 R] -/Limits [(Item.106) (Item.110)] +1560 0 obj << +/Names [(Item.106) 1371 0 R (Item.107) 1376 0 R (Item.108) 1381 0 R (Item.11) 712 0 R (Item.12) 713 0 R (Item.13) 714 0 R] +/Limits [(Item.106) (Item.13)] >> endobj -1508 0 obj << -/Names [(Item.111) 1323 0 R (Item.112) 1328 0 R (Item.12) 664 0 R (Item.13) 665 0 R (Item.14) 666 0 R (Item.15) 667 0 R] -/Limits [(Item.111) (Item.15)] +1561 0 obj << +/Names [(Item.14) 715 0 R (Item.15) 716 0 R (Item.16) 717 0 R (Item.17) 718 0 R (Item.18) 719 0 R (Item.19) 720 0 R] +/Limits [(Item.14) (Item.19)] >> endobj -1509 0 obj << -/Names [(Item.16) 668 0 R (Item.17) 669 0 R (Item.18) 670 0 R (Item.19) 671 0 R (Item.2) 649 0 R (Item.20) 672 0 R] -/Limits [(Item.16) (Item.20)] +1562 0 obj << +/Names [(Item.2) 699 0 R (Item.20) 721 0 R (Item.21) 722 0 R (Item.22) 741 0 R (Item.23) 742 0 R (Item.24) 743 0 R] +/Limits [(Item.2) (Item.24)] >> endobj -1510 0 obj << -/Names [(Item.21) 673 0 R (Item.22) 691 0 R (Item.23) 692 0 R (Item.24) 693 0 R (Item.25) 694 0 R (Item.26) 695 0 R] -/Limits [(Item.21) (Item.26)] +1563 0 obj << +/Names [(Item.25) 744 0 R (Item.26) 745 0 R (Item.27) 746 0 R (Item.28) 747 0 R (Item.29) 748 0 R (Item.3) 700 0 R] +/Limits [(Item.25) (Item.3)] >> endobj -1511 0 obj << -/Names [(Item.27) 696 0 R (Item.28) 697 0 R (Item.29) 698 0 R (Item.3) 650 0 R (Item.30) 699 0 R (Item.31) 700 0 R] -/Limits [(Item.27) (Item.31)] +1564 0 obj << +/Names [(Item.30) 749 0 R (Item.31) 750 0 R (Item.32) 755 0 R (Item.33) 756 0 R (Item.34) 757 0 R (Item.35) 788 0 R] +/Limits [(Item.30) (Item.35)] >> endobj -1512 0 obj << -/Names [(Item.32) 701 0 R (Item.33) 702 0 R (Item.34) 707 0 R (Item.35) 720 0 R (Item.36) 727 0 R (Item.37) 728 0 R] -/Limits [(Item.32) (Item.37)] +1565 0 obj << +/Names [(Item.36) 1011 0 R (Item.37) 1012 0 R (Item.38) 1013 0 R (Item.39) 1060 0 R (Item.4) 701 0 R (Item.40) 1066 0 R] +/Limits [(Item.36) (Item.40)] >> endobj -1513 0 obj << -/Names [(Item.38) 729 0 R (Item.39) 764 0 R (Item.4) 651 0 R (Item.40) 958 0 R (Item.41) 959 0 R (Item.42) 960 0 R] -/Limits [(Item.38) (Item.42)] +1566 0 obj << +/Names [(Item.41) 1067 0 R (Item.42) 1068 0 R (Item.43) 1069 0 R (Item.44) 1070 0 R (Item.45) 1075 0 R (Item.46) 1081 0 R] +/Limits [(Item.41) (Item.46)] >> endobj -1514 0 obj << -/Names [(Item.43) 1007 0 R (Item.44) 1012 0 R (Item.45) 1013 0 R (Item.46) 1014 0 R (Item.47) 1015 0 R (Item.48) 1016 0 R] -/Limits [(Item.43) (Item.48)] +1567 0 obj << +/Names [(Item.47) 1082 0 R (Item.48) 1089 0 R (Item.49) 1112 0 R (Item.5) 702 0 R (Item.50) 1113 0 R (Item.51) 1120 0 R] +/Limits [(Item.47) (Item.51)] >> endobj -1515 0 obj << -/Names [(Item.49) 1021 0 R (Item.5) 652 0 R (Item.50) 1028 0 R (Item.51) 1029 0 R (Item.52) 1036 0 R (Item.53) 1058 0 R] -/Limits [(Item.49) (Item.53)] +1568 0 obj << +/Names [(Item.52) 1121 0 R (Item.53) 1122 0 R (Item.54) 1134 0 R (Item.55) 1135 0 R (Item.56) 1136 0 R (Item.57) 1137 0 R] +/Limits [(Item.52) (Item.57)] >> endobj -1516 0 obj << -/Names [(Item.54) 1059 0 R (Item.55) 1067 0 R (Item.56) 1068 0 R (Item.57) 1069 0 R (Item.58) 1081 0 R (Item.59) 1082 0 R] -/Limits [(Item.54) (Item.59)] +1569 0 obj << +/Names [(Item.58) 1138 0 R (Item.59) 1139 0 R (Item.6) 703 0 R (Item.60) 1146 0 R (Item.61) 1147 0 R (Item.62) 1153 0 R] +/Limits [(Item.58) (Item.62)] >> endobj -1517 0 obj << -/Names [(Item.6) 653 0 R (Item.60) 1083 0 R (Item.61) 1084 0 R (Item.62) 1085 0 R (Item.63) 1086 0 R (Item.64) 1093 0 R] -/Limits [(Item.6) (Item.64)] +1570 0 obj << +/Names [(Item.63) 1154 0 R (Item.64) 1155 0 R (Item.65) 1168 0 R (Item.66) 1183 0 R (Item.67) 1184 0 R (Item.68) 1209 0 R] +/Limits [(Item.63) (Item.68)] >> endobj -1518 0 obj << -/Names [(Item.65) 1094 0 R (Item.66) 1099 0 R (Item.67) 1100 0 R (Item.68) 1101 0 R (Item.69) 1115 0 R (Item.7) 654 0 R] -/Limits [(Item.65) (Item.7)] +1571 0 obj << +/Names [(Item.69) 1210 0 R (Item.7) 704 0 R (Item.70) 1222 0 R (Item.71) 1228 0 R (Item.72) 1234 0 R (Item.73) 1240 0 R] +/Limits [(Item.69) (Item.73)] >> endobj -1519 0 obj << -/Names [(Item.70) 1130 0 R (Item.71) 1131 0 R (Item.72) 1156 0 R (Item.73) 1157 0 R (Item.74) 1168 0 R (Item.75) 1174 0 R] -/Limits [(Item.70) (Item.75)] +1572 0 obj << +/Names [(Item.74) 1246 0 R (Item.75) 1247 0 R (Item.76) 1253 0 R (Item.77) 1254 0 R (Item.78) 1265 0 R (Item.79) 1266 0 R] +/Limits [(Item.74) (Item.79)] >> endobj -1520 0 obj << -/Names [(Item.76) 1181 0 R (Item.77) 1187 0 R (Item.78) 1193 0 R (Item.79) 1194 0 R (Item.8) 655 0 R (Item.80) 1200 0 R] -/Limits [(Item.76) (Item.80)] +1573 0 obj << +/Names [(Item.8) 705 0 R (Item.80) 1267 0 R (Item.81) 1283 0 R (Item.82) 1284 0 R (Item.83) 1285 0 R (Item.84) 1286 0 R] +/Limits [(Item.8) (Item.84)] >> endobj -1521 0 obj << -/Names [(Item.81) 1201 0 R (Item.82) 1211 0 R (Item.83) 1212 0 R (Item.84) 1213 0 R (Item.85) 1230 0 R (Item.86) 1231 0 R] -/Limits [(Item.81) (Item.86)] +1574 0 obj << +/Names [(Item.85) 1287 0 R (Item.86) 1288 0 R (Item.87) 1289 0 R (Item.88) 1290 0 R (Item.89) 1291 0 R (Item.9) 710 0 R] +/Limits [(Item.85) (Item.9)] >> endobj -1522 0 obj << -/Names [(Item.87) 1232 0 R (Item.88) 1233 0 R (Item.89) 1234 0 R (Item.9) 656 0 R (Item.90) 1235 0 R (Item.91) 1236 0 R] -/Limits [(Item.87) (Item.91)] +1575 0 obj << +/Names [(Item.90) 1301 0 R (Item.91) 1302 0 R (Item.92) 1307 0 R (Item.93) 1308 0 R (Item.94) 1313 0 R (Item.95) 1314 0 R] +/Limits [(Item.90) (Item.95)] >> endobj -1523 0 obj << -/Names [(Item.92) 1237 0 R (Item.93) 1238 0 R (Item.94) 1247 0 R (Item.95) 1248 0 R (Item.96) 1253 0 R (Item.97) 1254 0 R] -/Limits [(Item.92) (Item.97)] +1576 0 obj << +/Names [(Item.96) 1315 0 R (Item.97) 1345 0 R (Item.98) 1346 0 R (Item.99) 1351 0 R (cite.2007c) 685 0 R (cite.2007d) 686 0 R] +/Limits [(Item.96) (cite.2007d)] >> endobj -1524 0 obj << -/Names [(Item.98) 1260 0 R (Item.99) 1261 0 R (cite.2007c) 635 0 R (cite.2007d) 636 0 R (cite.BLACS) 607 0 R (cite.BLAS1) 588 0 R] -/Limits [(Item.98) (cite.BLAS1)] +1577 0 obj << +/Names [(cite.BLACS) 657 0 R (cite.BLAS1) 638 0 R (cite.BLAS2) 639 0 R (cite.BLAS3) 640 0 R (cite.DesPat:11) 633 0 R (cite.DesignPatterns) 778 0 R] +/Limits [(cite.BLACS) (cite.DesignPatterns)] >> endobj -1525 0 obj << -/Names [(cite.BLAS2) 589 0 R (cite.BLAS3) 590 0 R (cite.DesPat:11) 583 0 R (cite.KIVA3PSBLAS) 1444 0 R (cite.METIS) 624 0 R (cite.MPI1) 1450 0 R] -/Limits [(cite.BLAS2) (cite.MPI1)] +1578 0 obj << +/Names [(cite.KIVA3PSBLAS) 1498 0 R (cite.METIS) 672 0 R (cite.MPI1) 1503 0 R (cite.PARA04FOREST) 1496 0 R (cite.PSBLAS) 1497 0 R (cite.RouXiaXu:11) 634 0 R] +/Limits [(cite.KIVA3PSBLAS) (cite.RouXiaXu:11)] >> endobj -1526 0 obj << -/Names [(cite.PARA04FOREST) 1442 0 R (cite.PSBLAS) 1443 0 R (cite.RouXiaXu:11) 584 0 R (cite.Sparse03) 582 0 R (cite.machiels) 585 0 R (cite.metcalf) 581 0 R] -/Limits [(cite.PARA04FOREST) (cite.metcalf)] +1579 0 obj << +/Names [(cite.Sparse03) 632 0 R (cite.machiels) 635 0 R (cite.metcalf) 631 0 R (cite.sblas02) 637 0 R (cite.sblas97) 636 0 R (descdata) 735 0 R] +/Limits [(cite.Sparse03) (descdata)] >> endobj -1527 0 obj << -/Names [(cite.sblas02) 587 0 R (cite.sblas97) 586 0 R (descdata) 685 0 R (equation.1) 875 0 R (equation.2) 876 0 R (equation.3) 877 0 R] -/Limits [(cite.sblas02) (equation.3)] +1580 0 obj << +/Names [(equation.1) 928 0 R (equation.2) 929 0 R (equation.3) 930 0 R (figure.1) 650 0 R (figure.10) 1389 0 R (figure.2) 680 0 R] +/Limits [(equation.1) (figure.2)] >> endobj -1528 0 obj << -/Names [(figure.1) 600 0 R (figure.2) 630 0 R (figure.3) 708 0 R (figure.4) 715 0 R (figure.5) 740 0 R (figure.6) 931 0 R] -/Limits [(figure.1) (figure.6)] +1581 0 obj << +/Names [(figure.3) 758 0 R (figure.4) 779 0 R (figure.5) 800 0 R (figure.6) 813 0 R (figure.7) 985 0 R (figure.8) 1014 0 R] +/Limits [(figure.3) (figure.8)] >> endobj -1529 0 obj << -/Names [(figure.7) 961 0 R (figure.8) 1335 0 R (figure.9) 1336 0 R (page.1) 433 0 R (page.10) 690 0 R (page.100) 1297 0 R] -/Limits [(figure.7) (page.100)] +1582 0 obj << +/Names [(figure.9) 1388 0 R (page.1) 473 0 R (page.10) 740 0 R (page.100) 1340 0 R (page.101) 1344 0 R (page.102) 1350 0 R] +/Limits [(figure.9) (page.102)] >> endobj -1530 0 obj << -/Names [(page.101) 1303 0 R (page.102) 1309 0 R (page.103) 1315 0 R (page.104) 1322 0 R (page.105) 1327 0 R (page.106) 1334 0 R] -/Limits [(page.101) (page.106)] +1583 0 obj << +/Names [(page.103) 1356 0 R (page.104) 1363 0 R (page.105) 1369 0 R (page.106) 1375 0 R (page.107) 1380 0 R (page.108) 1387 0 R] +/Limits [(page.103) (page.108)] >> endobj -1531 0 obj << -/Names [(page.107) 1340 0 R (page.108) 1344 0 R (page.109) 1348 0 R (page.11) 706 0 R (page.110) 1353 0 R (page.111) 1357 0 R] -/Limits [(page.107) (page.111)] +1584 0 obj << +/Names [(page.109) 1393 0 R (page.11) 754 0 R (page.110) 1398 0 R (page.111) 1402 0 R (page.112) 1406 0 R (page.113) 1410 0 R] +/Limits [(page.109) (page.113)] >> endobj -1532 0 obj << -/Names [(page.112) 1361 0 R (page.113) 1366 0 R (page.114) 1371 0 R (page.115) 1376 0 R (page.116) 1381 0 R (page.117) 1386 0 R] -/Limits [(page.112) (page.117)] +1585 0 obj << +/Names [(page.114) 1414 0 R (page.115) 1419 0 R (page.116) 1425 0 R (page.117) 1430 0 R (page.118) 1434 0 R (page.119) 1439 0 R] +/Limits [(page.114) (page.119)] >> endobj -1533 0 obj << -/Names [(page.118) 1390 0 R (page.119) 1396 0 R (page.12) 713 0 R (page.120) 1405 0 R (page.121) 1411 0 R (page.122) 1417 0 R] -/Limits [(page.118) (page.122)] +1586 0 obj << +/Names [(page.12) 764 0 R (page.120) 1443 0 R (page.121) 1449 0 R (page.122) 1459 0 R (page.123) 1465 0 R (page.124) 1470 0 R] +/Limits [(page.12) (page.124)] >> endobj -1534 0 obj << -/Names [(page.123) 1421 0 R (page.124) 1427 0 R (page.125) 1432 0 R (page.126) 1436 0 R (page.127) 1440 0 R (page.128) 1449 0 R] -/Limits [(page.123) (page.128)] +1587 0 obj << +/Names [(page.125) 1474 0 R (page.126) 1480 0 R (page.127) 1485 0 R (page.128) 1490 0 R (page.129) 1494 0 R (page.13) 768 0 R] +/Limits [(page.125) (page.13)] >> endobj -1535 0 obj << -/Names [(page.13) 719 0 R (page.14) 726 0 R (page.15) 738 0 R (page.16) 745 0 R (page.17) 752 0 R (page.18) 758 0 R] -/Limits [(page.13) (page.18)] +1588 0 obj << +/Names [(page.130) 1502 0 R (page.14) 776 0 R (page.15) 783 0 R (page.16) 787 0 R (page.17) 792 0 R (page.18) 798 0 R] +/Limits [(page.130) (page.18)] >> endobj -1536 0 obj << -/Names [(page.19) 763 0 R (page.2) 443 0 R (page.20) 769 0 R (page.21) 779 0 R (page.22) 784 0 R (page.23) 792 0 R] +1589 0 obj << +/Names [(page.19) 805 0 R (page.2) 483 0 R (page.20) 811 0 R (page.21) 817 0 R (page.22) 822 0 R (page.23) 832 0 R] /Limits [(page.19) (page.23)] >> endobj -1537 0 obj << -/Names [(page.24) 797 0 R (page.25) 805 0 R (page.26) 811 0 R (page.27) 817 0 R (page.28) 824 0 R (page.29) 831 0 R] +1590 0 obj << +/Names [(page.24) 837 0 R (page.25) 845 0 R (page.26) 851 0 R (page.27) 859 0 R (page.28) 864 0 R (page.29) 870 0 R] /Limits [(page.24) (page.29)] >> endobj -1538 0 obj << -/Names [(page.3) 615 0 R (page.30) 838 0 R (page.31) 843 0 R (page.32) 850 0 R (page.33) 857 0 R (page.34) 864 0 R] +1591 0 obj << +/Names [(page.3) 663 0 R (page.30) 877 0 R (page.31) 884 0 R (page.32) 892 0 R (page.33) 897 0 R (page.34) 903 0 R] /Limits [(page.3) (page.34)] >> endobj -1539 0 obj << -/Names [(page.35) 874 0 R (page.36) 888 0 R (page.37) 894 0 R (page.38) 904 0 R (page.39) 910 0 R (page.4) 629 0 R] +1592 0 obj << +/Names [(page.35) 910 0 R (page.36) 917 0 R (page.37) 927 0 R (page.38) 942 0 R (page.39) 948 0 R (page.4) 679 0 R] /Limits [(page.35) (page.4)] >> endobj -1540 0 obj << -/Names [(page.40) 915 0 R (page.41) 922 0 R (page.42) 930 0 R (page.43) 940 0 R (page.44) 948 0 R (page.45) 957 0 R] +1593 0 obj << +/Names [(page.40) 957 0 R (page.41) 963 0 R (page.42) 968 0 R (page.43) 975 0 R (page.44) 984 0 R (page.45) 994 0 R] /Limits [(page.40) (page.45)] >> endobj -1541 0 obj << -/Names [(page.46) 965 0 R (page.47) 969 0 R (page.48) 980 0 R (page.49) 985 0 R (page.5) 642 0 R (page.50) 992 0 R] +1594 0 obj << +/Names [(page.46) 1001 0 R (page.47) 1010 0 R (page.48) 1018 0 R (page.49) 1022 0 R (page.5) 692 0 R (page.50) 1034 0 R] /Limits [(page.46) (page.50)] >> endobj -1542 0 obj << -/Names [(page.51) 997 0 R (page.52) 1001 0 R (page.53) 1006 0 R (page.54) 1011 0 R (page.55) 1020 0 R (page.56) 1027 0 R] +1595 0 obj << +/Names [(page.51) 1039 0 R (page.52) 1045 0 R (page.53) 1050 0 R (page.54) 1054 0 R (page.55) 1059 0 R (page.56) 1065 0 R] /Limits [(page.51) (page.56)] >> endobj -1543 0 obj << -/Names [(page.57) 1035 0 R (page.58) 1042 0 R (page.59) 1047 0 R (page.6) 646 0 R (page.60) 1053 0 R (page.61) 1057 0 R] +1596 0 obj << +/Names [(page.57) 1074 0 R (page.58) 1080 0 R (page.59) 1088 0 R (page.6) 696 0 R (page.60) 1095 0 R (page.61) 1100 0 R] /Limits [(page.57) (page.61)] >> endobj -1544 0 obj << -/Names [(page.62) 1066 0 R (page.63) 1076 0 R (page.64) 1080 0 R (page.65) 1092 0 R (page.66) 1098 0 R (page.67) 1107 0 R] +1597 0 obj << +/Names [(page.62) 1107 0 R (page.63) 1111 0 R (page.64) 1119 0 R (page.65) 1129 0 R (page.66) 1133 0 R (page.67) 1145 0 R] /Limits [(page.62) (page.67)] >> endobj -1545 0 obj << -/Names [(page.68) 1114 0 R (page.69) 1120 0 R (page.7) 662 0 R (page.70) 1125 0 R (page.71) 1129 0 R (page.72) 1136 0 R] +1598 0 obj << +/Names [(page.68) 1152 0 R (page.69) 1161 0 R (page.7) 709 0 R (page.70) 1167 0 R (page.71) 1173 0 R (page.72) 1178 0 R] /Limits [(page.68) (page.72)] >> endobj -1546 0 obj << -/Names [(page.73) 1141 0 R (page.74) 1146 0 R (page.75) 1151 0 R (page.76) 1155 0 R (page.77) 1162 0 R (page.78) 1167 0 R] +1599 0 obj << +/Names [(page.73) 1182 0 R (page.74) 1190 0 R (page.75) 1195 0 R (page.76) 1199 0 R (page.77) 1204 0 R (page.78) 1208 0 R] /Limits [(page.73) (page.78)] >> endobj -1547 0 obj << -/Names [(page.79) 1173 0 R (page.8) 678 0 R (page.80) 1180 0 R (page.81) 1186 0 R (page.82) 1192 0 R (page.83) 1199 0 R] +1600 0 obj << +/Names [(page.79) 1215 0 R (page.8) 728 0 R (page.80) 1221 0 R (page.81) 1227 0 R (page.82) 1233 0 R (page.83) 1239 0 R] /Limits [(page.79) (page.83)] >> endobj -1548 0 obj << -/Names [(page.84) 1206 0 R (page.85) 1210 0 R (page.86) 1221 0 R (page.87) 1225 0 R (page.88) 1229 0 R (page.89) 1242 0 R] +1601 0 obj << +/Names [(page.84) 1245 0 R (page.85) 1252 0 R (page.86) 1260 0 R (page.87) 1264 0 R (page.88) 1274 0 R (page.89) 1278 0 R] /Limits [(page.84) (page.89)] >> endobj -1549 0 obj << -/Names [(page.9) 684 0 R (page.90) 1246 0 R (page.91) 1252 0 R (page.92) 1259 0 R (page.93) 1266 0 R (page.94) 1270 0 R] +1602 0 obj << +/Names [(page.9) 734 0 R (page.90) 1282 0 R (page.91) 1295 0 R (page.92) 1300 0 R (page.93) 1306 0 R (page.94) 1312 0 R] /Limits [(page.9) (page.94)] >> endobj -1550 0 obj << -/Names [(page.95) 1274 0 R (page.96) 1278 0 R (page.97) 1282 0 R (page.98) 1287 0 R (page.99) 1291 0 R (page.i) 491 0 R] +1603 0 obj << +/Names [(page.95) 1319 0 R (page.96) 1323 0 R (page.97) 1327 0 R (page.98) 1332 0 R (page.99) 1336 0 R (page.i) 533 0 R] /Limits [(page.95) (page.i)] >> endobj -1551 0 obj << -/Names [(page.ii) 543 0 R (page.iii) 561 0 R (page.iv) 565 0 R (precdata) 739 0 R (section*.1) 492 0 R (section*.10) 98 0 R] +1604 0 obj << +/Names [(page.ii) 585 0 R (page.iii) 611 0 R (page.iv) 615 0 R (precdata) 812 0 R (section*.1) 534 0 R (section*.10) 90 0 R] /Limits [(page.ii) (section*.10)] >> endobj -1552 0 obj << -/Names [(section*.11) 102 0 R (section*.12) 110 0 R (section*.13) 114 0 R (section*.14) 118 0 R (section*.15) 122 0 R (section*.16) 126 0 R] +1605 0 obj << +/Names [(section*.11) 94 0 R (section*.12) 98 0 R (section*.13) 102 0 R (section*.14) 106 0 R (section*.15) 110 0 R (section*.16) 126 0 R] /Limits [(section*.11) (section*.16)] >> endobj -1553 0 obj << -/Names [(section*.17) 130 0 R (section*.18) 134 0 R (section*.19) 138 0 R (section*.2) 66 0 R (section*.20) 142 0 R (section*.21) 146 0 R] +1606 0 obj << +/Names [(section*.17) 806 0 R (section*.18) 130 0 R (section*.19) 134 0 R (section*.2) 46 0 R (section*.20) 150 0 R (section*.21) 154 0 R] /Limits [(section*.17) (section*.21)] >> endobj -1554 0 obj << -/Names [(section*.22) 150 0 R (section*.23) 154 0 R (section*.24) 162 0 R (section*.25) 166 0 R (section*.26) 170 0 R (section*.27) 174 0 R] +1607 0 obj << +/Names [(section*.22) 158 0 R (section*.23) 162 0 R (section*.24) 166 0 R (section*.25) 170 0 R (section*.26) 174 0 R (section*.27) 178 0 R] /Limits [(section*.22) (section*.27)] >> endobj -1555 0 obj << -/Names [(section*.28) 182 0 R (section*.29) 186 0 R (section*.3) 70 0 R (section*.30) 190 0 R (section*.31) 194 0 R (section*.32) 198 0 R] +1608 0 obj << +/Names [(section*.28) 182 0 R (section*.29) 186 0 R (section*.3) 50 0 R (section*.30) 190 0 R (section*.31) 194 0 R (section*.32) 202 0 R] /Limits [(section*.28) (section*.32)] >> endobj -1556 0 obj << -/Names [(section*.33) 202 0 R (section*.34) 206 0 R (section*.35) 210 0 R (section*.36) 214 0 R (section*.37) 218 0 R (section*.38) 222 0 R] +1609 0 obj << +/Names [(section*.33) 206 0 R (section*.34) 210 0 R (section*.35) 214 0 R (section*.36) 222 0 R (section*.37) 226 0 R (section*.38) 230 0 R] /Limits [(section*.33) (section*.38)] >> endobj -1557 0 obj << -/Names [(section*.39) 226 0 R (section*.4) 74 0 R (section*.40) 230 0 R (section*.41) 234 0 R (section*.42) 238 0 R (section*.43) 242 0 R] +1610 0 obj << +/Names [(section*.39) 234 0 R (section*.4) 54 0 R (section*.40) 238 0 R (section*.41) 242 0 R (section*.42) 246 0 R (section*.43) 250 0 R] /Limits [(section*.39) (section*.43)] >> endobj -1558 0 obj << -/Names [(section*.44) 246 0 R (section*.45) 250 0 R (section*.46) 254 0 R (section*.47) 258 0 R (section*.48) 262 0 R (section*.49) 266 0 R] +1611 0 obj << +/Names [(section*.44) 254 0 R (section*.45) 258 0 R (section*.46) 262 0 R (section*.47) 266 0 R (section*.48) 270 0 R (section*.49) 274 0 R] /Limits [(section*.44) (section*.49)] >> endobj -1559 0 obj << -/Names [(section*.5) 78 0 R (section*.50) 270 0 R (section*.51) 274 0 R (section*.52) 278 0 R (section*.53) 282 0 R (section*.54) 286 0 R] +1612 0 obj << +/Names [(section*.5) 58 0 R (section*.50) 278 0 R (section*.51) 282 0 R (section*.52) 286 0 R (section*.53) 290 0 R (section*.54) 294 0 R] /Limits [(section*.5) (section*.54)] >> endobj -1560 0 obj << -/Names [(section*.55) 294 0 R (section*.56) 298 0 R (section*.57) 302 0 R (section*.58) 306 0 R (section*.59) 310 0 R (section*.6) 82 0 R] +1613 0 obj << +/Names [(section*.55) 298 0 R (section*.56) 302 0 R (section*.57) 306 0 R (section*.58) 310 0 R (section*.59) 314 0 R (section*.6) 62 0 R] /Limits [(section*.55) (section*.6)] >> endobj -1561 0 obj << -/Names [(section*.60) 314 0 R (section*.61) 318 0 R (section*.62) 322 0 R (section*.63) 326 0 R (section*.64) 330 0 R (section*.65) 334 0 R] +1614 0 obj << +/Names [(section*.60) 318 0 R (section*.61) 322 0 R (section*.62) 326 0 R (section*.63) 334 0 R (section*.64) 338 0 R (section*.65) 342 0 R] /Limits [(section*.60) (section*.65)] >> endobj -1562 0 obj << -/Names [(section*.66) 338 0 R (section*.67) 342 0 R (section*.68) 346 0 R (section*.69) 350 0 R (section*.7) 86 0 R (section*.70) 354 0 R] +1615 0 obj << +/Names [(section*.66) 346 0 R (section*.67) 350 0 R (section*.68) 354 0 R (section*.69) 358 0 R (section*.7) 66 0 R (section*.70) 362 0 R] /Limits [(section*.66) (section*.70)] >> endobj -1563 0 obj << -/Names [(section*.71) 362 0 R (section*.72) 366 0 R (section*.73) 370 0 R (section*.74) 374 0 R (section*.75) 382 0 R (section*.76) 386 0 R] +1616 0 obj << +/Names [(section*.71) 366 0 R (section*.72) 370 0 R (section*.73) 374 0 R (section*.74) 378 0 R (section*.75) 382 0 R (section*.76) 386 0 R] /Limits [(section*.71) (section*.76)] >> endobj -1564 0 obj << -/Names [(section*.77) 390 0 R (section*.78) 394 0 R (section*.79) 398 0 R (section*.8) 90 0 R (section*.80) 406 0 R (section*.81) 410 0 R] +1617 0 obj << +/Names [(section*.77) 390 0 R (section*.78) 394 0 R (section*.79) 402 0 R (section*.8) 70 0 R (section*.80) 406 0 R (section*.81) 410 0 R] /Limits [(section*.77) (section*.81)] >> endobj -1565 0 obj << -/Names [(section*.82) 414 0 R (section*.83) 418 0 R (section*.84) 426 0 R (section*.85) 1441 0 R (section*.9) 94 0 R (section.1) 10 0 R] -/Limits [(section*.82) (section.1)] +1618 0 obj << +/Names [(section*.82) 414 0 R (section*.83) 422 0 R (section*.84) 426 0 R (section*.85) 430 0 R (section*.86) 434 0 R (section*.87) 438 0 R] +/Limits [(section*.82) (section*.87)] >> endobj -1566 0 obj << -/Names [(section.10) 402 0 R (section.11) 422 0 R (section.2) 14 0 R (section.3) 34 0 R (section.4) 106 0 R (section.5) 158 0 R] -/Limits [(section.10) (section.5)] +1619 0 obj << +/Names [(section*.88) 446 0 R (section*.89) 450 0 R (section*.9) 86 0 R (section*.90) 454 0 R (section*.91) 458 0 R (section*.92) 466 0 R] +/Limits [(section*.88) (section*.92)] >> endobj -1567 0 obj << -/Names [(section.6) 178 0 R (section.7) 290 0 R (section.8) 358 0 R (section.9) 378 0 R (spdata) 714 0 R (subsection.2.1) 18 0 R] -/Limits [(section.6) (subsection.2.1)] +1620 0 obj << +/Names [(section*.93) 1495 0 R (section.1) 10 0 R (section.10) 442 0 R (section.11) 462 0 R (section.2) 14 0 R (section.3) 34 0 R] +/Limits [(section*.93) (section.3)] >> endobj -1568 0 obj << -/Names [(subsection.2.2) 22 0 R (subsection.2.3) 26 0 R (subsection.2.4) 30 0 R (subsection.3.1) 38 0 R (subsection.3.2) 46 0 R (subsection.3.3) 54 0 R] -/Limits [(subsection.2.2) (subsection.3.3)] +1621 0 obj << +/Names [(section.4) 146 0 R (section.5) 198 0 R (section.6) 218 0 R (section.7) 330 0 R (section.8) 398 0 R (section.9) 418 0 R] +/Limits [(section.4) (section.9)] >> endobj -1569 0 obj << -/Names [(subsection.3.4) 58 0 R (subsection.3.5) 62 0 R (subsubsection.3.1.1) 42 0 R (subsubsection.3.2.1) 50 0 R (table.1) 780 0 R (table.10) 866 0 R] -/Limits [(subsection.3.4) (table.10)] +1622 0 obj << +/Names [(spdata) 777 0 R (subsection.2.1) 18 0 R (subsection.2.2) 22 0 R (subsection.2.3) 26 0 R (subsection.2.4) 30 0 R (subsection.3.1) 38 0 R] +/Limits [(spdata) (subsection.3.1)] >> endobj -1570 0 obj << -/Names [(table.11) 878 0 R (table.12) 895 0 R (table.13) 923 0 R (table.14) 949 0 R (table.15) 981 0 R (table.16) 993 0 R] -/Limits [(table.11) (table.16)] +1623 0 obj << +/Names [(subsection.3.2) 78 0 R (subsection.3.3) 118 0 R (subsection.3.4) 138 0 R (subsection.3.5) 142 0 R (subsubsection.3.1.1) 42 0 R (subsubsection.3.1.2) 74 0 R] +/Limits [(subsection.3.2) (subsubsection.3.1.2)] >> endobj -1571 0 obj << -/Names [(table.2) 793 0 R (table.3) 806 0 R (table.4) 818 0 R (table.5) 825 0 R (table.6) 832 0 R (table.7) 839 0 R] -/Limits [(table.2) (table.7)] +1624 0 obj << +/Names [(subsubsection.3.2.1) 82 0 R (subsubsection.3.2.2) 114 0 R (subsubsection.3.3.1) 122 0 R (table.1) 833 0 R (table.10) 919 0 R (table.11) 931 0 R] +/Limits [(subsubsection.3.2.1) (table.11)] >> endobj -1572 0 obj << -/Names [(table.8) 851 0 R (table.9) 858 0 R (title.0) 6 0 R (vdata) 730 0 R] -/Limits [(table.8) (vdata)] +1625 0 obj << +/Names [(table.12) 949 0 R (table.13) 976 0 R (table.14) 1002 0 R (table.15) 1035 0 R (table.16) 1046 0 R (table.2) 846 0 R] +/Limits [(table.12) (table.2)] >> endobj -1573 0 obj << -/Kids [1505 0 R 1506 0 R 1507 0 R 1508 0 R 1509 0 R 1510 0 R] -/Limits [(Doc-Start) (Item.26)] +1626 0 obj << +/Names [(table.3) 860 0 R (table.4) 871 0 R (table.5) 878 0 R (table.6) 885 0 R (table.7) 893 0 R (table.8) 904 0 R] +/Limits [(table.3) (table.8)] >> endobj -1574 0 obj << -/Kids [1511 0 R 1512 0 R 1513 0 R 1514 0 R 1515 0 R 1516 0 R] -/Limits [(Item.27) (Item.59)] +1627 0 obj << +/Names [(table.9) 911 0 R (title.0) 6 0 R (vdata) 799 0 R] +/Limits [(table.9) (vdata)] >> endobj -1575 0 obj << -/Kids [1517 0 R 1518 0 R 1519 0 R 1520 0 R 1521 0 R 1522 0 R] -/Limits [(Item.6) (Item.91)] +1628 0 obj << +/Kids [1558 0 R 1559 0 R 1560 0 R 1561 0 R 1562 0 R 1563 0 R] +/Limits [(Doc-Start) (Item.3)] >> endobj -1576 0 obj << -/Kids [1523 0 R 1524 0 R 1525 0 R 1526 0 R 1527 0 R 1528 0 R] -/Limits [(Item.92) (figure.6)] +1629 0 obj << +/Kids [1564 0 R 1565 0 R 1566 0 R 1567 0 R 1568 0 R 1569 0 R] +/Limits [(Item.30) (Item.62)] >> endobj -1577 0 obj << -/Kids [1529 0 R 1530 0 R 1531 0 R 1532 0 R 1533 0 R 1534 0 R] -/Limits [(figure.7) (page.128)] +1630 0 obj << +/Kids [1570 0 R 1571 0 R 1572 0 R 1573 0 R 1574 0 R 1575 0 R] +/Limits [(Item.63) (Item.95)] >> endobj -1578 0 obj << -/Kids [1535 0 R 1536 0 R 1537 0 R 1538 0 R 1539 0 R 1540 0 R] -/Limits [(page.13) (page.45)] +1631 0 obj << +/Kids [1576 0 R 1577 0 R 1578 0 R 1579 0 R 1580 0 R 1581 0 R] +/Limits [(Item.96) (figure.8)] >> endobj -1579 0 obj << -/Kids [1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R 1546 0 R] +1632 0 obj << +/Kids [1582 0 R 1583 0 R 1584 0 R 1585 0 R 1586 0 R 1587 0 R] +/Limits [(figure.9) (page.13)] +>> endobj +1633 0 obj << +/Kids [1588 0 R 1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R] +/Limits [(page.130) (page.45)] +>> endobj +1634 0 obj << +/Kids [1594 0 R 1595 0 R 1596 0 R 1597 0 R 1598 0 R 1599 0 R] /Limits [(page.46) (page.78)] >> endobj -1580 0 obj << -/Kids [1547 0 R 1548 0 R 1549 0 R 1550 0 R 1551 0 R 1552 0 R] +1635 0 obj << +/Kids [1600 0 R 1601 0 R 1602 0 R 1603 0 R 1604 0 R 1605 0 R] /Limits [(page.79) (section*.16)] >> endobj -1581 0 obj << -/Kids [1553 0 R 1554 0 R 1555 0 R 1556 0 R 1557 0 R 1558 0 R] +1636 0 obj << +/Kids [1606 0 R 1607 0 R 1608 0 R 1609 0 R 1610 0 R 1611 0 R] /Limits [(section*.17) (section*.49)] >> endobj -1582 0 obj << -/Kids [1559 0 R 1560 0 R 1561 0 R 1562 0 R 1563 0 R 1564 0 R] +1637 0 obj << +/Kids [1612 0 R 1613 0 R 1614 0 R 1615 0 R 1616 0 R 1617 0 R] /Limits [(section*.5) (section*.81)] >> endobj -1583 0 obj << -/Kids [1565 0 R 1566 0 R 1567 0 R 1568 0 R 1569 0 R 1570 0 R] -/Limits [(section*.82) (table.16)] +1638 0 obj << +/Kids [1618 0 R 1619 0 R 1620 0 R 1621 0 R 1622 0 R 1623 0 R] +/Limits [(section*.82) (subsubsection.3.1.2)] >> endobj -1584 0 obj << -/Kids [1571 0 R 1572 0 R] -/Limits [(table.2) (vdata)] +1639 0 obj << +/Kids [1624 0 R 1625 0 R 1626 0 R 1627 0 R] +/Limits [(subsubsection.3.2.1) (vdata)] >> endobj -1585 0 obj << -/Kids [1573 0 R 1574 0 R 1575 0 R 1576 0 R 1577 0 R 1578 0 R] +1640 0 obj << +/Kids [1628 0 R 1629 0 R 1630 0 R 1631 0 R 1632 0 R 1633 0 R] /Limits [(Doc-Start) (page.45)] >> endobj -1586 0 obj << -/Kids [1579 0 R 1580 0 R 1581 0 R 1582 0 R 1583 0 R 1584 0 R] +1641 0 obj << +/Kids [1634 0 R 1635 0 R 1636 0 R 1637 0 R 1638 0 R 1639 0 R] /Limits [(page.46) (vdata)] >> endobj -1587 0 obj << -/Kids [1585 0 R 1586 0 R] +1642 0 obj << +/Kids [1640 0 R 1641 0 R] /Limits [(Doc-Start) (vdata)] >> endobj -1588 0 obj << -/Dests 1587 0 R +1643 0 obj << +/Dests 1642 0 R >> endobj -1589 0 obj << +1644 0 obj << /Type /Catalog -/Pages 1503 0 R -/Outlines 1504 0 R -/Names 1588 0 R +/Pages 1556 0 R +/Outlines 1557 0 R +/Names 1643 0 R /URI (http://ce.uniroma2.it/psblas) /PageMode/UseOutlines/PageLabels << /Nums [0 << /S /D >> 2 << /S /r >> 6 << /S /D >> ] >> -/OpenAction 429 0 R +/OpenAction 469 0 R >> endobj -1590 0 obj << - /Title (Parallel Sparse BLAS V. 3.0-beta) /Subject (Parallel Sparse Basic Linear Algebra Subroutines) /Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners) /Creator (pdfLaTeX) /Producer ($Id: userguide.tex 5433 2011-12-15 09:48:22Z sfilippo $) /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords() -/CreationDate (D:20111216174527+01'00') -/ModDate (D:20111216174527+01'00') +1645 0 obj << + /Title (Parallel Sparse BLAS V. 3.0-beta) /Subject (Parallel Sparse Basic Linear Algebra Subroutines) /Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners) /Creator (pdfLaTeX) /Producer ($Id: userguide.tex 5441 2011-12-16 16:45:25Z sfilippo $) /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords() +/CreationDate (D:20120124112631+01'00') +/ModDate (D:20120124112631+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6) >> endobj xref -0 1591 +0 1646 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f 0000000004 00000 f 0000000000 00000 f 0000000015 00000 n -0000010151 00000 n -0000906879 00000 n +0000011002 00000 n +0000914610 00000 n 0000000058 00000 n 0000000105 00000 n -0000083850 00000 n -0000906807 00000 n +0000090724 00000 n +0000914538 00000 n 0000000150 00000 n 0000000183 00000 n -0000095672 00000 n -0000906684 00000 n +0000102334 00000 n +0000914415 00000 n 0000000229 00000 n 0000000266 00000 n -0000105823 00000 n -0000906610 00000 n +0000112167 00000 n +0000914341 00000 n 0000000317 00000 n 0000000358 00000 n -0000114002 00000 n -0000906523 00000 n +0000120506 00000 n +0000914254 00000 n 0000000409 00000 n 0000000448 00000 n -0000121122 00000 n -0000906436 00000 n +0000135770 00000 n +0000914167 00000 n 0000000499 00000 n 0000000543 00000 n -0000139369 00000 n -0000906362 00000 n +0000148388 00000 n +0000914093 00000 n 0000000594 00000 n 0000000634 00000 n -0000150091 00000 n -0000906238 00000 n +0000157022 00000 n +0000913968 00000 n 0000000680 00000 n -0000000716 00000 n -0000150151 00000 n -0000906127 00000 n -0000000767 00000 n -0000000815 00000 n -0000165944 00000 n -0000906066 00000 n -0000000871 00000 n -0000000911 00000 n -0000174305 00000 n -0000905942 00000 n +0000000728 00000 n +0000157082 00000 n +0000913857 00000 n +0000000779 00000 n +0000000827 00000 n +0000170854 00000 n +0000913783 00000 n +0000000883 00000 n +0000000915 00000 n +0000170914 00000 n +0000913696 00000 n 0000000962 00000 n -0000001013 00000 n -0000187656 00000 n -0000905881 00000 n -0000001069 00000 n -0000001109 00000 n -0000187716 00000 n -0000905794 00000 n -0000001160 00000 n -0000001210 00000 n -0000196539 00000 n -0000905707 00000 n -0000001261 00000 n -0000001313 00000 n -0000196661 00000 n -0000905594 00000 n -0000001364 00000 n -0000001416 00000 n -0000196721 00000 n -0000905520 00000 n -0000001463 00000 n -0000001503 00000 n -0000196781 00000 n -0000905433 00000 n -0000001550 00000 n -0000001590 00000 n -0000201231 00000 n -0000905346 00000 n -0000001637 00000 n -0000001678 00000 n -0000207871 00000 n -0000905259 00000 n -0000001725 00000 n -0000001766 00000 n -0000207931 00000 n -0000905172 00000 n -0000001813 00000 n -0000001846 00000 n -0000207991 00000 n -0000905085 00000 n -0000001893 00000 n -0000001950 00000 n -0000214221 00000 n -0000904998 00000 n -0000001997 00000 n -0000002054 00000 n -0000214282 00000 n -0000904911 00000 n -0000002101 00000 n -0000002132 00000 n -0000214343 00000 n -0000904822 00000 n -0000002180 00000 n -0000002212 00000 n -0000217344 00000 n -0000904745 00000 n -0000002261 00000 n -0000002295 00000 n -0000217961 00000 n -0000904615 00000 n -0000002342 00000 n -0000002386 00000 n -0000226115 00000 n -0000904536 00000 n -0000002435 00000 n -0000002469 00000 n -0000236167 00000 n -0000904443 00000 n -0000002518 00000 n -0000002550 00000 n -0000245742 00000 n -0000904350 00000 n -0000002599 00000 n -0000002632 00000 n -0000254057 00000 n -0000904257 00000 n -0000002681 00000 n -0000002714 00000 n -0000260706 00000 n -0000904164 00000 n -0000002763 00000 n -0000002797 00000 n -0000267719 00000 n -0000904071 00000 n -0000002846 00000 n -0000002879 00000 n -0000275430 00000 n -0000903978 00000 n -0000002928 00000 n -0000002962 00000 n -0000283488 00000 n -0000903885 00000 n -0000003011 00000 n -0000003045 00000 n -0000289973 00000 n -0000903792 00000 n -0000003094 00000 n -0000003128 00000 n -0000296286 00000 n -0000903699 00000 n -0000003177 00000 n -0000003210 00000 n -0000304809 00000 n -0000903606 00000 n -0000003259 00000 n -0000003290 00000 n -0000322043 00000 n -0000903527 00000 n -0000003339 00000 n -0000003370 00000 n -0000336699 00000 n -0000903397 00000 n -0000003417 00000 n -0000003461 00000 n -0000343595 00000 n -0000903318 00000 n -0000003510 00000 n -0000003541 00000 n -0000363917 00000 n -0000903225 00000 n -0000003590 00000 n -0000003621 00000 n -0000388259 00000 n -0000903132 00000 n -0000003670 00000 n -0000003703 00000 n -0000397842 00000 n -0000903053 00000 n -0000003752 00000 n -0000003786 00000 n -0000407124 00000 n -0000902922 00000 n -0000003833 00000 n -0000003879 00000 n -0000407186 00000 n -0000902843 00000 n -0000003928 00000 n -0000003960 00000 n -0000431941 00000 n -0000902750 00000 n -0000004009 00000 n -0000004041 00000 n -0000436326 00000 n -0000902657 00000 n -0000004090 00000 n -0000004122 00000 n -0000440417 00000 n -0000902564 00000 n -0000004171 00000 n -0000004203 00000 n -0000443251 00000 n -0000902471 00000 n -0000004252 00000 n -0000004285 00000 n -0000449914 00000 n -0000902378 00000 n -0000004334 00000 n -0000004369 00000 n -0000457622 00000 n -0000902285 00000 n -0000004418 00000 n -0000004450 00000 n -0000465409 00000 n -0000902192 00000 n -0000004499 00000 n -0000004531 00000 n -0000475913 00000 n -0000902099 00000 n -0000004580 00000 n -0000004612 00000 n -0000481918 00000 n -0000902006 00000 n -0000004661 00000 n -0000004694 00000 n -0000486642 00000 n -0000901913 00000 n -0000004743 00000 n -0000004774 00000 n -0000491900 00000 n -0000901820 00000 n -0000004823 00000 n -0000004855 00000 n -0000498680 00000 n -0000901727 00000 n -0000004904 00000 n -0000004936 00000 n -0000503173 00000 n -0000901634 00000 n -0000004985 00000 n -0000005017 00000 n -0000506645 00000 n -0000901541 00000 n -0000005066 00000 n -0000005099 00000 n -0000510502 00000 n -0000901448 00000 n -0000005148 00000 n -0000005179 00000 n -0000517659 00000 n -0000901355 00000 n -0000005228 00000 n -0000005272 00000 n -0000525149 00000 n -0000901262 00000 n -0000005321 00000 n -0000005365 00000 n -0000529025 00000 n -0000901169 00000 n -0000005414 00000 n -0000005452 00000 n -0000534666 00000 n -0000901076 00000 n -0000005501 00000 n -0000005542 00000 n -0000538573 00000 n -0000900983 00000 n -0000005591 00000 n -0000005629 00000 n -0000544198 00000 n -0000900890 00000 n -0000005678 00000 n -0000005719 00000 n -0000548668 00000 n -0000900797 00000 n -0000005768 00000 n -0000005810 00000 n -0000553041 00000 n -0000900704 00000 n -0000005859 00000 n -0000005900 00000 n -0000559546 00000 n -0000900611 00000 n -0000005949 00000 n -0000005988 00000 n -0000568854 00000 n -0000900518 00000 n -0000006037 00000 n -0000006070 00000 n -0000575040 00000 n -0000900439 00000 n -0000006119 00000 n -0000006156 00000 n -0000583618 00000 n -0000900308 00000 n -0000006203 00000 n -0000006254 00000 n -0000589585 00000 n -0000900229 00000 n +0000001002 00000 n +0000176322 00000 n +0000913609 00000 n +0000001049 00000 n +0000001089 00000 n +0000176383 00000 n +0000913522 00000 n +0000001136 00000 n +0000001177 00000 n +0000181044 00000 n +0000913435 00000 n +0000001224 00000 n +0000001265 00000 n +0000181104 00000 n +0000913348 00000 n +0000001312 00000 n +0000001345 00000 n +0000181164 00000 n +0000913261 00000 n +0000001392 00000 n +0000001449 00000 n +0000181224 00000 n +0000913174 00000 n +0000001496 00000 n +0000001553 00000 n +0000191378 00000 n +0000913100 00000 n +0000001609 00000 n +0000001649 00000 n +0000191439 00000 n +0000912974 00000 n +0000001700 00000 n +0000001742 00000 n +0000196870 00000 n +0000912900 00000 n +0000001798 00000 n +0000001830 00000 n +0000196930 00000 n +0000912813 00000 n +0000001877 00000 n +0000001908 00000 n +0000196990 00000 n +0000912726 00000 n +0000001956 00000 n +0000001987 00000 n +0000200940 00000 n +0000912639 00000 n +0000002035 00000 n +0000002068 00000 n +0000201063 00000 n +0000912550 00000 n +0000002116 00000 n +0000002147 00000 n +0000205161 00000 n +0000912459 00000 n +0000002196 00000 n +0000002222 00000 n +0000205222 00000 n +0000912367 00000 n +0000002271 00000 n +0000002301 00000 n +0000205283 00000 n +0000912275 00000 n +0000002350 00000 n +0000002401 00000 n +0000213269 00000 n +0000912197 00000 n +0000002458 00000 n +0000002499 00000 n +0000213331 00000 n +0000912067 00000 n +0000002551 00000 n +0000002602 00000 n +0000217143 00000 n +0000911988 00000 n +0000002659 00000 n +0000002692 00000 n +0000217204 00000 n +0000911895 00000 n +0000002741 00000 n +0000002778 00000 n +0000217326 00000 n +0000911802 00000 n +0000002827 00000 n +0000002858 00000 n +0000217387 00000 n +0000911723 00000 n +0000002907 00000 n +0000002943 00000 n +0000220288 00000 n +0000911631 00000 n +0000002995 00000 n +0000003048 00000 n +0000220412 00000 n +0000911553 00000 n +0000003100 00000 n +0000003146 00000 n +0000224672 00000 n +0000911423 00000 n +0000003193 00000 n +0000003237 00000 n +0000232826 00000 n +0000911344 00000 n +0000003286 00000 n +0000003320 00000 n +0000242878 00000 n +0000911251 00000 n +0000003369 00000 n +0000003401 00000 n +0000252453 00000 n +0000911158 00000 n +0000003450 00000 n +0000003483 00000 n +0000260768 00000 n +0000911065 00000 n +0000003532 00000 n +0000003565 00000 n +0000267417 00000 n +0000910972 00000 n +0000003614 00000 n +0000003648 00000 n +0000274430 00000 n +0000910879 00000 n +0000003697 00000 n +0000003730 00000 n +0000282141 00000 n +0000910786 00000 n +0000003779 00000 n +0000003813 00000 n +0000290199 00000 n +0000910693 00000 n +0000003862 00000 n +0000003896 00000 n +0000296684 00000 n +0000910600 00000 n +0000003945 00000 n +0000003979 00000 n +0000302997 00000 n +0000910507 00000 n +0000004028 00000 n +0000004061 00000 n +0000311520 00000 n +0000910414 00000 n +0000004110 00000 n +0000004141 00000 n +0000328754 00000 n +0000910335 00000 n +0000004190 00000 n +0000004221 00000 n +0000343410 00000 n +0000910205 00000 n +0000004268 00000 n +0000004312 00000 n +0000350306 00000 n +0000910126 00000 n +0000004361 00000 n +0000004392 00000 n +0000370631 00000 n +0000910033 00000 n +0000004441 00000 n +0000004472 00000 n +0000395033 00000 n +0000909940 00000 n +0000004521 00000 n +0000004554 00000 n +0000404637 00000 n +0000909861 00000 n +0000004603 00000 n +0000004637 00000 n +0000413937 00000 n +0000909730 00000 n +0000004684 00000 n +0000004730 00000 n +0000414000 00000 n +0000909651 00000 n +0000004779 00000 n +0000004811 00000 n +0000438759 00000 n +0000909558 00000 n +0000004860 00000 n +0000004892 00000 n +0000443144 00000 n +0000909465 00000 n +0000004941 00000 n +0000004973 00000 n +0000447235 00000 n +0000909372 00000 n +0000005022 00000 n +0000005054 00000 n +0000450069 00000 n +0000909279 00000 n +0000005103 00000 n +0000005136 00000 n +0000456732 00000 n +0000909186 00000 n +0000005185 00000 n +0000005220 00000 n +0000464440 00000 n +0000909093 00000 n +0000005269 00000 n +0000005301 00000 n +0000472227 00000 n +0000909000 00000 n +0000005350 00000 n +0000005382 00000 n +0000482731 00000 n +0000908907 00000 n +0000005431 00000 n +0000005463 00000 n +0000488736 00000 n +0000908814 00000 n +0000005512 00000 n +0000005545 00000 n +0000493460 00000 n +0000908721 00000 n +0000005594 00000 n +0000005625 00000 n +0000498718 00000 n +0000908628 00000 n +0000005674 00000 n +0000005706 00000 n +0000505498 00000 n +0000908535 00000 n +0000005755 00000 n +0000005787 00000 n +0000509991 00000 n +0000908442 00000 n +0000005836 00000 n +0000005868 00000 n +0000513463 00000 n +0000908349 00000 n +0000005917 00000 n +0000005950 00000 n +0000517320 00000 n +0000908256 00000 n +0000005999 00000 n +0000006030 00000 n +0000524477 00000 n +0000908163 00000 n +0000006079 00000 n +0000006123 00000 n +0000531967 00000 n +0000908070 00000 n +0000006172 00000 n +0000006216 00000 n +0000535843 00000 n +0000907977 00000 n +0000006265 00000 n 0000006303 00000 n -0000006334 00000 n -0000594804 00000 n -0000900136 00000 n -0000006383 00000 n -0000006414 00000 n -0000599729 00000 n -0000900043 00000 n -0000006463 00000 n -0000006494 00000 n -0000602526 00000 n -0000899950 00000 n -0000006543 00000 n -0000006584 00000 n -0000605969 00000 n -0000899857 00000 n -0000006633 00000 n -0000006671 00000 n -0000607594 00000 n -0000899764 00000 n -0000006720 00000 n -0000006752 00000 n -0000609486 00000 n -0000899671 00000 n -0000006801 00000 n -0000006835 00000 n -0000611264 00000 n -0000899578 00000 n -0000006884 00000 n -0000006916 00000 n -0000616215 00000 n -0000899485 00000 n -0000006965 00000 n -0000006997 00000 n -0000621806 00000 n -0000899392 00000 n -0000007046 00000 n -0000007076 00000 n -0000627562 00000 n -0000899299 00000 n -0000007125 00000 n -0000007155 00000 n -0000633295 00000 n -0000899206 00000 n -0000007204 00000 n +0000541484 00000 n +0000907884 00000 n +0000006352 00000 n +0000006393 00000 n +0000545391 00000 n +0000907791 00000 n +0000006442 00000 n +0000006480 00000 n +0000551016 00000 n +0000907698 00000 n +0000006529 00000 n +0000006570 00000 n +0000555486 00000 n +0000907605 00000 n +0000006619 00000 n +0000006661 00000 n +0000559859 00000 n +0000907512 00000 n +0000006710 00000 n +0000006751 00000 n +0000566364 00000 n +0000907419 00000 n +0000006800 00000 n +0000006839 00000 n +0000575672 00000 n +0000907326 00000 n +0000006888 00000 n +0000006921 00000 n +0000581858 00000 n +0000907247 00000 n +0000006970 00000 n +0000007007 00000 n +0000590436 00000 n +0000907116 00000 n +0000007054 00000 n +0000007105 00000 n +0000596403 00000 n +0000907037 00000 n +0000007154 00000 n +0000007185 00000 n +0000601622 00000 n +0000906944 00000 n 0000007234 00000 n -0000639143 00000 n -0000899113 00000 n -0000007283 00000 n -0000007313 00000 n -0000644964 00000 n -0000899020 00000 n -0000007362 00000 n -0000007392 00000 n -0000650904 00000 n -0000898927 00000 n -0000007441 00000 n -0000007471 00000 n -0000656764 00000 n -0000898848 00000 n -0000007520 00000 n -0000007550 00000 n -0000664008 00000 n -0000898718 00000 n -0000007597 00000 n -0000007633 00000 n -0000671705 00000 n -0000898639 00000 n -0000007682 00000 n -0000007716 00000 n -0000673275 00000 n -0000898546 00000 n -0000007765 00000 n -0000007797 00000 n -0000674944 00000 n -0000898453 00000 n -0000007846 00000 n -0000007892 00000 n -0000677074 00000 n -0000898374 00000 n -0000007941 00000 n -0000007984 00000 n -0000678020 00000 n -0000898244 00000 n -0000008031 00000 n -0000008062 00000 n -0000683040 00000 n -0000898140 00000 n -0000008111 00000 n -0000008141 00000 n -0000688498 00000 n -0000898061 00000 n -0000008190 00000 n -0000008221 00000 n -0000692323 00000 n -0000897968 00000 n -0000008270 00000 n -0000008307 00000 n -0000696006 00000 n -0000897875 00000 n -0000008356 00000 n -0000008394 00000 n -0000700307 00000 n -0000897796 00000 n -0000008443 00000 n -0000008481 00000 n -0000701639 00000 n -0000897666 00000 n -0000008529 00000 n -0000008575 00000 n -0000707038 00000 n -0000897587 00000 n -0000008624 00000 n -0000008659 00000 n -0000712944 00000 n -0000897494 00000 n -0000008708 00000 n -0000008742 00000 n -0000718697 00000 n -0000897401 00000 n -0000008791 00000 n -0000008826 00000 n -0000721285 00000 n -0000897322 00000 n -0000008875 00000 n -0000008911 00000 n -0000722303 00000 n -0000897206 00000 n -0000008959 00000 n -0000008999 00000 n -0000730251 00000 n -0000897141 00000 n -0000009048 00000 n -0000009074 00000 n -0000009910 00000 n -0000010210 00000 n -0000009126 00000 n -0000010029 00000 n -0000010090 00000 n -0000891546 00000 n -0000893282 00000 n -0000891400 00000 n -0000892129 00000 n -0000893719 00000 n -0000010637 00000 n -0000010456 00000 n -0000010320 00000 n -0000010575 00000 n -0000027554 00000 n -0000027704 00000 n -0000027855 00000 n -0000028012 00000 n -0000028169 00000 n -0000028325 00000 n -0000028481 00000 n -0000028631 00000 n -0000028788 00000 n -0000028949 00000 n -0000029106 00000 n -0000029268 00000 n -0000029425 00000 n -0000029581 00000 n -0000029737 00000 n -0000029890 00000 n -0000030043 00000 n -0000030196 00000 n -0000030349 00000 n -0000030502 00000 n -0000030655 00000 n -0000030808 00000 n -0000030961 00000 n -0000031115 00000 n -0000031269 00000 n -0000031420 00000 n -0000031574 00000 n -0000031728 00000 n -0000031882 00000 n -0000032036 00000 n -0000032189 00000 n -0000032343 00000 n -0000032497 00000 n -0000032651 00000 n -0000032804 00000 n -0000032957 00000 n -0000033110 00000 n -0000033264 00000 n -0000033414 00000 n -0000033568 00000 n -0000033722 00000 n -0000033876 00000 n -0000055720 00000 n -0000055871 00000 n -0000034151 00000 n -0000027087 00000 n -0000010708 00000 n -0000034029 00000 n -0000034090 00000 n -0000056024 00000 n -0000056178 00000 n -0000056332 00000 n -0000056486 00000 n -0000056640 00000 n -0000056794 00000 n -0000056948 00000 n -0000057102 00000 n -0000057255 00000 n -0000057408 00000 n -0000057562 00000 n -0000057716 00000 n -0000057869 00000 n -0000058022 00000 n -0000058175 00000 n -0000058329 00000 n -0000058483 00000 n -0000058637 00000 n -0000058791 00000 n -0000058945 00000 n -0000059099 00000 n -0000059253 00000 n -0000059406 00000 n -0000059558 00000 n -0000059712 00000 n -0000059866 00000 n -0000060020 00000 n -0000060172 00000 n -0000060326 00000 n -0000060480 00000 n -0000060634 00000 n -0000060788 00000 n -0000060942 00000 n -0000061096 00000 n -0000061250 00000 n -0000061404 00000 n -0000061558 00000 n -0000061712 00000 n -0000061866 00000 n -0000062020 00000 n -0000062174 00000 n -0000062328 00000 n -0000062481 00000 n -0000070232 00000 n -0000070383 00000 n -0000070536 00000 n -0000070690 00000 n -0000062696 00000 n -0000055229 00000 n -0000034248 00000 n -0000062634 00000 n -0000070843 00000 n -0000070997 00000 n -0000071148 00000 n -0000071301 00000 n -0000071455 00000 n -0000071608 00000 n -0000071762 00000 n -0000071916 00000 n -0000072066 00000 n -0000072220 00000 n -0000072374 00000 n -0000072528 00000 n -0000072682 00000 n -0000072833 00000 n -0000073047 00000 n -0000069957 00000 n -0000062780 00000 n -0000072986 00000 n -0000073450 00000 n -0000073269 00000 n -0000073131 00000 n -0000073388 00000 n -0000082301 00000 n -0000082455 00000 n -0000082611 00000 n -0000082768 00000 n -0000082927 00000 n -0000083083 00000 n -0000083237 00000 n -0000083391 00000 n -0000083544 00000 n -0000083697 00000 n -0000083910 00000 n -0000082090 00000 n -0000073521 00000 n -0000893136 00000 n -0000893837 00000 n -0000750882 00000 n -0000747477 00000 n -0000746856 00000 n -0000750944 00000 n -0000750819 00000 n -0000747290 00000 n -0000747352 00000 n -0000750756 00000 n -0000747104 00000 n -0000747166 00000 n -0000095218 00000 n -0000095367 00000 n -0000095520 00000 n -0000090015 00000 n -0000105305 00000 n -0000095795 00000 n -0000089860 00000 n -0000084007 00000 n -0000891692 00000 n -0000095733 00000 n -0000091225 00000 n -0000091471 00000 n -0000091518 00000 n -0000091911 00000 n -0000091932 00000 n -0000092239 00000 n -0000747228 00000 n -0000105456 00000 n -0000105610 00000 n -0000113572 00000 n -0000113725 00000 n -0000106007 00000 n -0000105150 00000 n -0000095920 00000 n -0000105762 00000 n -0000893428 00000 n -0000892417 00000 n -0000891984 00000 n -0000892848 00000 n -0000892274 00000 n -0000105883 00000 n -0000892560 00000 n -0000105945 00000 n -0000750693 00000 n -0000111601 00000 n -0000114063 00000 n -0000111454 00000 n -0000106207 00000 n -0000113878 00000 n -0000113940 00000 n -0000113310 00000 n -0000113429 00000 n -0000113476 00000 n -0000113550 00000 n -0000747042 00000 n -0000746980 00000 n -0000120757 00000 n -0000120909 00000 n -0000121182 00000 n -0000120610 00000 n -0000114227 00000 n -0000121061 00000 n -0000130709 00000 n -0000129910 00000 n -0000121318 00000 n -0000130029 00000 n -0000891838 00000 n -0000130091 00000 n -0000130151 00000 n -0000130213 00000 n -0000130275 00000 n -0000130337 00000 n -0000130399 00000 n -0000130461 00000 n -0000130523 00000 n -0000130585 00000 n -0000130647 00000 n -0000141453 00000 n -0000139429 00000 n -0000138519 00000 n -0000130831 00000 n -0000138638 00000 n -0000138699 00000 n -0000138760 00000 n -0000138821 00000 n -0000138882 00000 n -0000138943 00000 n -0000139004 00000 n -0000139065 00000 n -0000139125 00000 n -0000139186 00000 n -0000139247 00000 n -0000139308 00000 n -0000893955 00000 n -0000141672 00000 n -0000141314 00000 n -0000139539 00000 n -0000141610 00000 n -0000149721 00000 n -0000149873 00000 n -0000150273 00000 n -0000149574 00000 n -0000141756 00000 n -0000150030 00000 n -0000150211 00000 n -0000157202 00000 n -0000158157 00000 n -0000157063 00000 n -0000150396 00000 n -0000157354 00000 n -0000157416 00000 n -0000157477 00000 n -0000157539 00000 n -0000157601 00000 n -0000157663 00000 n -0000157725 00000 n -0000157787 00000 n -0000157849 00000 n -0000157911 00000 n -0000157972 00000 n -0000158034 00000 n -0000158096 00000 n -0000166004 00000 n -0000165641 00000 n -0000158254 00000 n -0000165760 00000 n -0000165821 00000 n -0000165882 00000 n -0000174092 00000 n -0000174428 00000 n -0000173953 00000 n -0000166101 00000 n -0000174243 00000 n -0000174366 00000 n -0000178400 00000 n -0000178523 00000 n -0000178220 00000 n -0000174538 00000 n -0000178339 00000 n -0000178462 00000 n -0000894073 00000 n -0000195721 00000 n -0000187839 00000 n -0000187289 00000 n -0000178620 00000 n -0000187408 00000 n -0000187470 00000 n -0000187532 00000 n -0000187594 00000 n -0000187777 00000 n -0000195872 00000 n -0000196023 00000 n -0000196175 00000 n -0000196326 00000 n -0000196841 00000 n -0000195550 00000 n -0000187975 00000 n -0000196478 00000 n -0000196599 00000 n -0000201169 00000 n -0000207357 00000 n -0000201292 00000 n -0000200988 00000 n -0000196977 00000 n -0000201107 00000 n -0000893574 00000 n -0000207508 00000 n -0000207659 00000 n -0000208051 00000 n -0000207202 00000 n -0000201402 00000 n -0000207810 00000 n -0000213863 00000 n -0000214011 00000 n -0000214404 00000 n -0000213716 00000 n -0000208161 00000 n -0000214159 00000 n -0000217135 00000 n -0000217466 00000 n -0000216996 00000 n -0000214501 00000 n -0000217283 00000 n -0000217405 00000 n -0000894191 00000 n -0000218023 00000 n -0000217780 00000 n -0000217563 00000 n -0000217899 00000 n -0000225307 00000 n -0000225457 00000 n -0000225604 00000 n -0000225754 00000 n -0000225904 00000 n -0000228066 00000 n -0000226237 00000 n -0000225136 00000 n -0000218107 00000 n -0000226054 00000 n -0000226175 00000 n -0000228278 00000 n -0000227927 00000 n -0000226373 00000 n -0000228216 00000 n -0000235506 00000 n -0000235656 00000 n -0000235806 00000 n -0000235957 00000 n -0000236289 00000 n -0000235343 00000 n -0000228375 00000 n -0000236106 00000 n -0000236227 00000 n -0000237303 00000 n -0000237122 00000 n -0000236438 00000 n -0000237241 00000 n -0000245082 00000 n -0000245232 00000 n -0000245382 00000 n -0000245532 00000 n -0000245863 00000 n -0000244919 00000 n -0000237387 00000 n -0000245681 00000 n -0000245802 00000 n -0000894309 00000 n -0000246877 00000 n -0000246696 00000 n -0000246012 00000 n -0000246815 00000 n -0000253699 00000 n -0000253845 00000 n -0000254179 00000 n -0000253552 00000 n -0000246961 00000 n -0000253996 00000 n -0000254117 00000 n -0000260346 00000 n -0000260495 00000 n -0000260829 00000 n -0000260199 00000 n -0000254328 00000 n -0000260644 00000 n -0000260767 00000 n -0000267359 00000 n -0000267507 00000 n -0000267841 00000 n -0000267212 00000 n -0000260978 00000 n -0000267658 00000 n -0000267779 00000 n -0000275070 00000 n -0000275219 00000 n -0000275554 00000 n -0000274923 00000 n -0000268002 00000 n -0000275368 00000 n -0000275492 00000 n -0000276578 00000 n -0000276398 00000 n -0000275715 00000 n -0000276517 00000 n -0000894427 00000 n -0000283127 00000 n -0000283276 00000 n -0000283611 00000 n -0000282980 00000 n -0000276662 00000 n -0000283426 00000 n -0000283549 00000 n -0000289614 00000 n -0000289761 00000 n -0000290095 00000 n -0000289467 00000 n -0000283760 00000 n -0000289912 00000 n -0000290033 00000 n -0000295926 00000 n -0000296074 00000 n -0000296409 00000 n -0000295779 00000 n -0000290243 00000 n -0000296224 00000 n -0000892993 00000 n -0000296347 00000 n -0000304298 00000 n -0000304449 00000 n -0000304598 00000 n -0000311993 00000 n -0000305117 00000 n -0000304143 00000 n -0000296558 00000 n -0000304748 00000 n -0000304869 00000 n -0000304931 00000 n -0000304993 00000 n -0000305055 00000 n -0000312144 00000 n -0000312294 00000 n -0000312444 00000 n -0000312596 00000 n -0000312749 00000 n -0000312902 00000 n -0000313115 00000 n -0000311806 00000 n -0000305278 00000 n -0000313053 00000 n -0000321832 00000 n -0000329342 00000 n -0000322165 00000 n -0000321693 00000 n -0000313225 00000 n -0000321982 00000 n -0000322103 00000 n -0000894545 00000 n -0000329494 00000 n -0000329645 00000 n -0000329796 00000 n -0000329946 00000 n -0000330158 00000 n -0000329171 00000 n -0000322339 00000 n -0000330096 00000 n -0000335163 00000 n -0000335314 00000 n -0000335526 00000 n -0000335016 00000 n -0000330294 00000 n -0000335465 00000 n -0000336485 00000 n -0000336761 00000 n -0000336346 00000 n -0000335636 00000 n -0000336637 00000 n -0000343082 00000 n -0000343233 00000 n -0000343384 00000 n -0000343717 00000 n -0000342927 00000 n -0000336845 00000 n -0000343534 00000 n -0000343655 00000 n -0000352407 00000 n -0000348178 00000 n -0000352557 00000 n -0000352831 00000 n -0000348031 00000 n -0000343853 00000 n -0000352707 00000 n -0000352769 00000 n -0000352072 00000 n -0000352191 00000 n -0000352238 00000 n -0000352312 00000 n -0000352385 00000 n -0000356271 00000 n -0000356091 00000 n -0000352982 00000 n -0000356210 00000 n -0000892704 00000 n -0000894663 00000 n -0000363554 00000 n -0000363705 00000 n -0000364040 00000 n -0000363407 00000 n -0000356355 00000 n -0000363855 00000 n -0000363978 00000 n -0000370269 00000 n -0000375567 00000 n -0000370420 00000 n -0000370569 00000 n -0000370963 00000 n -0000370114 00000 n -0000364189 00000 n -0000370720 00000 n -0000370781 00000 n -0000370842 00000 n -0000370903 00000 n -0000379941 00000 n -0000374958 00000 n -0000374777 00000 n -0000371099 00000 n -0000374896 00000 n -0000380003 00000 n -0000375448 00000 n -0000375042 00000 n -0000379880 00000 n -0000379545 00000 n -0000379664 00000 n -0000379711 00000 n -0000379785 00000 n -0000379858 00000 n -0000387896 00000 n -0000388047 00000 n -0000388382 00000 n -0000387749 00000 n -0000380102 00000 n -0000388197 00000 n -0000388320 00000 n -0000390137 00000 n -0000389957 00000 n -0000388543 00000 n -0000390076 00000 n -0000894781 00000 n -0000397630 00000 n -0000400043 00000 n -0000397966 00000 n -0000397491 00000 n -0000390221 00000 n -0000397780 00000 n -0000397904 00000 n -0000400255 00000 n -0000399904 00000 n -0000398127 00000 n -0000400194 00000 n -0000407248 00000 n -0000406941 00000 n -0000400352 00000 n -0000407061 00000 n -0000413927 00000 n -0000414205 00000 n -0000413784 00000 n -0000407384 00000 n -0000414079 00000 n -0000414142 00000 n -0000424909 00000 n -0000424403 00000 n -0000414316 00000 n -0000424525 00000 n -0000424589 00000 n -0000424653 00000 n -0000424717 00000 n -0000424781 00000 n -0000424845 00000 n -0000425862 00000 n -0000425613 00000 n -0000425046 00000 n -0000425736 00000 n -0000425799 00000 n -0000894901 00000 n -0000431726 00000 n -0000432129 00000 n -0000431582 00000 n -0000425947 00000 n -0000431877 00000 n -0000432003 00000 n -0000432067 00000 n -0000435960 00000 n -0000436111 00000 n -0000436450 00000 n -0000435807 00000 n -0000432253 00000 n -0000436263 00000 n -0000436387 00000 n -0000440052 00000 n -0000440202 00000 n -0000440479 00000 n -0000439899 00000 n -0000436561 00000 n -0000440353 00000 n -0000443037 00000 n -0000443312 00000 n -0000442893 00000 n -0000440590 00000 n -0000443188 00000 n -0000449551 00000 n -0000449699 00000 n -0000449977 00000 n -0000449398 00000 n -0000443423 00000 n -0000449850 00000 n -0000452077 00000 n -0000451765 00000 n -0000450114 00000 n -0000451888 00000 n -0000451951 00000 n -0000452014 00000 n -0000895026 00000 n -0000457261 00000 n -0000457411 00000 n -0000457876 00000 n -0000457108 00000 n -0000452162 00000 n -0000457558 00000 n -0000457684 00000 n -0000457748 00000 n -0000457812 00000 n -0000464894 00000 n -0000465045 00000 n -0000465195 00000 n -0000465470 00000 n -0000464732 00000 n -0000458000 00000 n -0000465346 00000 n -0000469239 00000 n -0000468668 00000 n -0000465594 00000 n -0000468791 00000 n -0000468855 00000 n -0000468919 00000 n -0000468983 00000 n -0000469047 00000 n -0000469111 00000 n -0000469175 00000 n -0000475548 00000 n -0000475700 00000 n -0000476101 00000 n -0000475395 00000 n -0000469350 00000 n -0000475850 00000 n -0000475975 00000 n -0000476038 00000 n -0000478171 00000 n -0000477792 00000 n -0000476212 00000 n -0000477915 00000 n -0000477979 00000 n -0000478043 00000 n -0000478107 00000 n -0000481554 00000 n -0000481703 00000 n -0000481979 00000 n -0000481401 00000 n -0000478256 00000 n -0000481855 00000 n -0000895151 00000 n -0000486278 00000 n -0000486427 00000 n -0000486769 00000 n -0000486125 00000 n -0000482090 00000 n -0000486578 00000 n -0000486705 00000 n -0000491687 00000 n -0000491961 00000 n -0000491543 00000 n -0000486880 00000 n -0000491837 00000 n -0000498465 00000 n -0000498742 00000 n -0000498321 00000 n -0000492085 00000 n -0000498616 00000 n -0000499792 00000 n -0000499480 00000 n -0000498866 00000 n -0000499603 00000 n -0000499666 00000 n -0000499729 00000 n -0000502958 00000 n -0000503235 00000 n -0000502814 00000 n -0000499877 00000 n -0000503109 00000 n -0000506431 00000 n -0000506706 00000 n -0000506287 00000 n -0000503346 00000 n -0000506582 00000 n -0000895276 00000 n -0000510564 00000 n -0000510315 00000 n -0000506817 00000 n -0000510438 00000 n -0000517445 00000 n -0000517720 00000 n -0000517301 00000 n -0000510701 00000 n -0000517596 00000 n -0000518924 00000 n -0000518609 00000 n -0000517844 00000 n -0000518732 00000 n -0000518796 00000 n -0000518860 00000 n -0000524934 00000 n -0000525210 00000 n -0000524790 00000 n -0000519009 00000 n -0000525086 00000 n -0000528810 00000 n -0000529151 00000 n -0000528666 00000 n -0000525334 00000 n -0000528961 00000 n -0000529087 00000 n -0000534451 00000 n -0000534790 00000 n -0000534307 00000 n -0000529275 00000 n -0000534603 00000 n -0000534727 00000 n -0000895401 00000 n -0000538358 00000 n -0000538699 00000 n -0000538214 00000 n -0000534914 00000 n -0000538509 00000 n -0000538635 00000 n -0000543983 00000 n -0000544322 00000 n -0000543839 00000 n -0000538823 00000 n -0000544135 00000 n -0000544259 00000 n -0000548454 00000 n -0000548858 00000 n -0000548310 00000 n -0000544446 00000 n -0000548604 00000 n -0000548730 00000 n -0000548794 00000 n -0000552827 00000 n -0000553228 00000 n -0000552683 00000 n -0000548969 00000 n -0000552978 00000 n -0000553102 00000 n -0000553165 00000 n -0000559333 00000 n -0000559609 00000 n -0000559189 00000 n -0000553339 00000 n -0000559482 00000 n -0000563869 00000 n -0000563494 00000 n -0000559733 00000 n -0000563617 00000 n -0000563680 00000 n -0000563743 00000 n -0000563806 00000 n -0000895526 00000 n -0000568340 00000 n -0000568489 00000 n -0000568640 00000 n -0000568916 00000 n -0000568178 00000 n -0000563993 00000 n -0000568790 00000 n -0000575102 00000 n -0000574854 00000 n -0000569040 00000 n -0000574977 00000 n -0000583068 00000 n -0000582306 00000 n -0000575226 00000 n -0000582429 00000 n -0000582493 00000 n -0000582557 00000 n -0000582621 00000 n -0000582685 00000 n -0000582749 00000 n -0000582813 00000 n -0000582876 00000 n -0000582940 00000 n -0000583004 00000 n -0000583680 00000 n -0000583432 00000 n -0000583191 00000 n -0000583555 00000 n -0000589775 00000 n -0000589398 00000 n -0000583765 00000 n -0000589521 00000 n -0000589647 00000 n -0000589711 00000 n -0000594991 00000 n -0000594618 00000 n -0000589912 00000 n -0000594741 00000 n -0000594866 00000 n -0000594928 00000 n -0000895651 00000 n -0000599983 00000 n -0000599542 00000 n -0000595128 00000 n -0000599665 00000 n -0000599791 00000 n -0000599855 00000 n -0000599919 00000 n -0000602587 00000 n -0000602340 00000 n -0000600120 00000 n -0000602463 00000 n -0000606031 00000 n -0000605782 00000 n -0000602698 00000 n -0000605905 00000 n -0000607655 00000 n -0000607408 00000 n -0000606168 00000 n -0000607531 00000 n -0000609548 00000 n -0000609299 00000 n -0000607766 00000 n -0000609422 00000 n -0000611325 00000 n -0000611078 00000 n -0000609659 00000 n -0000611201 00000 n -0000895776 00000 n -0000616277 00000 n -0000616028 00000 n -0000611436 00000 n -0000616151 00000 n -0000621993 00000 n -0000621620 00000 n -0000616414 00000 n -0000621743 00000 n -0000621867 00000 n -0000621930 00000 n -0000627752 00000 n -0000627375 00000 n -0000622130 00000 n -0000627498 00000 n -0000627624 00000 n -0000627688 00000 n -0000633482 00000 n -0000633109 00000 n -0000627889 00000 n -0000633232 00000 n -0000633356 00000 n -0000633419 00000 n -0000639333 00000 n -0000638956 00000 n -0000633619 00000 n -0000639079 00000 n -0000639205 00000 n -0000639269 00000 n -0000645151 00000 n -0000644778 00000 n -0000639470 00000 n -0000644901 00000 n -0000645025 00000 n -0000645088 00000 n -0000895901 00000 n -0000651029 00000 n -0000650717 00000 n -0000645288 00000 n -0000650840 00000 n -0000650966 00000 n -0000656887 00000 n -0000656578 00000 n -0000651166 00000 n -0000656701 00000 n -0000656825 00000 n -0000663643 00000 n -0000663793 00000 n -0000664071 00000 n -0000663490 00000 n -0000657024 00000 n -0000663944 00000 n -0000668274 00000 n -0000668338 00000 n -0000668402 00000 n -0000668088 00000 n -0000664169 00000 n -0000668211 00000 n -0000671767 00000 n -0000671518 00000 n -0000668500 00000 n -0000671641 00000 n -0000673337 00000 n -0000673089 00000 n -0000671878 00000 n -0000673212 00000 n -0000896026 00000 n -0000675007 00000 n -0000674757 00000 n -0000673448 00000 n -0000674880 00000 n -0000677136 00000 n -0000676888 00000 n -0000675118 00000 n -0000677011 00000 n -0000678083 00000 n -0000677833 00000 n -0000677247 00000 n -0000677956 00000 n -0000682827 00000 n -0000683102 00000 n -0000682683 00000 n -0000678181 00000 n -0000682977 00000 n -0000688285 00000 n -0000688561 00000 n -0000688141 00000 n -0000683213 00000 n -0000688434 00000 n -0000692110 00000 n -0000692385 00000 n -0000691966 00000 n -0000688672 00000 n -0000692260 00000 n -0000896151 00000 n -0000696069 00000 n -0000695819 00000 n -0000692496 00000 n -0000695942 00000 n -0000700094 00000 n -0000700369 00000 n -0000699950 00000 n -0000696180 00000 n -0000700244 00000 n -0000701702 00000 n -0000701452 00000 n -0000700480 00000 n -0000701575 00000 n -0000706668 00000 n -0000706820 00000 n -0000707162 00000 n -0000706515 00000 n -0000701813 00000 n -0000706975 00000 n -0000707099 00000 n -0000712278 00000 n -0000712427 00000 n -0000712577 00000 n -0000712729 00000 n -0000713006 00000 n -0000712107 00000 n -0000707324 00000 n -0000712880 00000 n -0000718331 00000 n -0000718482 00000 n -0000718758 00000 n -0000718178 00000 n -0000713117 00000 n -0000718634 00000 n -0000896276 00000 n -0000721069 00000 n -0000721348 00000 n -0000720925 00000 n -0000718869 00000 n -0000721221 00000 n -0000722365 00000 n -0000722117 00000 n -0000721459 00000 n -0000722240 00000 n -0000729888 00000 n -0000730037 00000 n -0000730313 00000 n -0000729735 00000 n -0000722463 00000 n -0000730187 00000 n -0000736368 00000 n -0000736583 00000 n -0000736224 00000 n -0000730475 00000 n -0000736520 00000 n -0000739438 00000 n -0000739251 00000 n -0000736707 00000 n -0000739374 00000 n -0000747601 00000 n -0000746607 00000 n -0000739536 00000 n -0000746730 00000 n -0000746793 00000 n -0000746918 00000 n -0000747414 00000 n -0000747539 00000 n -0000896401 00000 n -0000751071 00000 n -0000750506 00000 n -0000747699 00000 n -0000750629 00000 n -0000751007 00000 n -0000751169 00000 n -0000751622 00000 n -0000751956 00000 n -0000752312 00000 n -0000752338 00000 n -0000752849 00000 n -0000752887 00000 n -0000753582 00000 n -0000753939 00000 n -0000754019 00000 n -0000754399 00000 n -0000755041 00000 n -0000755705 00000 n -0000756333 00000 n -0000756976 00000 n -0000757266 00000 n -0000757919 00000 n -0000772056 00000 n -0000772503 00000 n -0000784902 00000 n -0000785330 00000 n -0000796437 00000 n -0000796772 00000 n -0000798858 00000 n -0000799080 00000 n -0000803639 00000 n -0000803886 00000 n -0000820874 00000 n -0000821409 00000 n -0000823685 00000 n -0000823917 00000 n -0000826300 00000 n -0000826538 00000 n -0000836220 00000 n -0000836597 00000 n -0000842587 00000 n -0000842907 00000 n -0000846957 00000 n -0000847301 00000 n -0000848924 00000 n -0000849160 00000 n -0000862965 00000 n -0000863344 00000 n -0000869617 00000 n -0000869885 00000 n -0000883572 00000 n -0000884066 00000 n -0000891054 00000 n -0000896490 00000 n -0000896610 00000 n -0000896732 00000 n -0000896858 00000 n -0000896975 00000 n -0000897067 00000 n -0000906978 00000 n -0000907165 00000 n -0000907350 00000 n -0000907533 00000 n -0000907709 00000 n -0000907879 00000 n -0000908050 00000 n -0000908220 00000 n -0000908391 00000 n -0000908561 00000 n -0000908738 00000 n -0000908913 00000 n -0000909090 00000 n -0000909264 00000 n -0000909438 00000 n -0000909615 00000 n -0000909790 00000 n -0000909967 00000 n -0000910142 00000 n -0000910319 00000 n -0000910507 00000 n -0000910712 00000 n -0000910940 00000 n -0000911139 00000 n -0000911318 00000 n -0000911497 00000 n -0000911682 00000 n -0000911865 00000 n -0000912050 00000 n -0000912233 00000 n -0000912418 00000 n -0000912589 00000 n -0000912759 00000 n -0000912930 00000 n -0000913099 00000 n -0000913268 00000 n -0000913439 00000 n -0000913609 00000 n -0000913785 00000 n -0000913960 00000 n -0000914137 00000 n -0000914312 00000 n -0000914489 00000 n -0000914664 00000 n -0000914841 00000 n -0000915015 00000 n -0000915189 00000 n -0000915372 00000 n -0000915575 00000 n -0000915776 00000 n -0000915979 00000 n -0000916180 00000 n -0000916383 00000 n -0000916584 00000 n -0000916787 00000 n -0000916987 00000 n -0000917187 00000 n -0000917390 00000 n -0000917591 00000 n -0000917794 00000 n -0000917995 00000 n -0000918192 00000 n -0000918380 00000 n -0000918573 00000 n -0000918794 00000 n -0000919008 00000 n -0000919187 00000 n -0000919358 00000 n -0000919487 00000 n -0000919605 00000 n -0000919721 00000 n -0000919836 00000 n -0000919953 00000 n -0000920071 00000 n -0000920187 00000 n -0000920303 00000 n -0000920423 00000 n -0000920547 00000 n -0000920670 00000 n -0000920791 00000 n -0000920869 00000 n -0000920987 00000 n -0000921101 00000 n -0000921181 00000 n -0000921221 00000 n -0000921458 00000 n +0000007265 00000 n +0000606547 00000 n +0000906851 00000 n +0000007314 00000 n +0000007345 00000 n +0000609344 00000 n +0000906758 00000 n +0000007394 00000 n +0000007435 00000 n +0000612787 00000 n +0000906665 00000 n +0000007484 00000 n +0000007522 00000 n +0000614412 00000 n +0000906572 00000 n +0000007571 00000 n +0000007603 00000 n +0000616304 00000 n +0000906479 00000 n +0000007652 00000 n +0000007686 00000 n +0000618082 00000 n +0000906386 00000 n +0000007735 00000 n +0000007767 00000 n +0000623034 00000 n +0000906293 00000 n +0000007816 00000 n +0000007848 00000 n +0000628625 00000 n +0000906200 00000 n +0000007897 00000 n +0000007927 00000 n +0000634381 00000 n +0000906107 00000 n +0000007976 00000 n +0000008006 00000 n +0000640114 00000 n +0000906014 00000 n +0000008055 00000 n +0000008085 00000 n +0000645962 00000 n +0000905921 00000 n +0000008134 00000 n +0000008164 00000 n +0000651783 00000 n +0000905828 00000 n +0000008213 00000 n +0000008243 00000 n +0000657723 00000 n +0000905735 00000 n +0000008292 00000 n +0000008322 00000 n +0000663583 00000 n +0000905656 00000 n +0000008371 00000 n +0000008401 00000 n +0000670829 00000 n +0000905526 00000 n +0000008448 00000 n +0000008484 00000 n +0000678520 00000 n +0000905447 00000 n +0000008533 00000 n +0000008567 00000 n +0000680090 00000 n +0000905354 00000 n +0000008616 00000 n +0000008648 00000 n +0000681759 00000 n +0000905261 00000 n +0000008697 00000 n +0000008743 00000 n +0000683889 00000 n +0000905182 00000 n +0000008792 00000 n +0000008835 00000 n +0000684835 00000 n +0000905052 00000 n +0000008882 00000 n +0000008913 00000 n +0000689855 00000 n +0000904948 00000 n +0000008962 00000 n +0000008992 00000 n +0000695313 00000 n +0000904869 00000 n +0000009041 00000 n +0000009072 00000 n +0000699138 00000 n +0000904776 00000 n +0000009121 00000 n +0000009158 00000 n +0000702821 00000 n +0000904683 00000 n +0000009207 00000 n +0000009245 00000 n +0000707122 00000 n +0000904604 00000 n +0000009294 00000 n +0000009332 00000 n +0000708454 00000 n +0000904474 00000 n +0000009380 00000 n +0000009426 00000 n +0000713853 00000 n +0000904395 00000 n +0000009475 00000 n +0000009510 00000 n +0000719759 00000 n +0000904302 00000 n +0000009559 00000 n +0000009593 00000 n +0000725512 00000 n +0000904209 00000 n +0000009642 00000 n +0000009677 00000 n +0000728100 00000 n +0000904130 00000 n +0000009726 00000 n +0000009762 00000 n +0000729118 00000 n +0000904014 00000 n +0000009810 00000 n +0000009850 00000 n +0000737066 00000 n +0000903949 00000 n +0000009899 00000 n +0000009925 00000 n +0000010761 00000 n +0000011061 00000 n +0000009977 00000 n +0000010880 00000 n +0000010941 00000 n +0000898328 00000 n +0000900064 00000 n +0000898182 00000 n +0000898911 00000 n +0000900501 00000 n +0000011488 00000 n +0000011307 00000 n +0000011171 00000 n +0000011426 00000 n +0000029928 00000 n +0000030079 00000 n +0000030229 00000 n +0000030386 00000 n +0000030543 00000 n +0000030700 00000 n +0000030857 00000 n +0000031008 00000 n +0000031165 00000 n +0000031326 00000 n +0000031479 00000 n +0000031632 00000 n +0000031785 00000 n +0000031937 00000 n +0000032088 00000 n +0000032241 00000 n +0000032394 00000 n +0000032555 00000 n +0000032711 00000 n +0000032873 00000 n +0000033026 00000 n +0000033180 00000 n +0000033334 00000 n +0000033488 00000 n +0000033642 00000 n +0000033796 00000 n +0000033949 00000 n +0000034111 00000 n +0000034268 00000 n +0000034430 00000 n +0000034584 00000 n +0000034738 00000 n +0000034892 00000 n +0000035049 00000 n +0000035205 00000 n +0000035356 00000 n +0000035510 00000 n +0000035664 00000 n +0000035818 00000 n +0000035972 00000 n +0000036126 00000 n +0000036279 00000 n +0000036433 00000 n +0000036587 00000 n +0000036741 00000 n +0000059202 00000 n +0000037016 00000 n +0000029437 00000 n +0000011559 00000 n +0000036894 00000 n +0000036955 00000 n +0000059354 00000 n +0000059508 00000 n +0000059660 00000 n +0000059814 00000 n +0000059968 00000 n +0000060122 00000 n +0000060275 00000 n +0000060426 00000 n +0000060579 00000 n +0000060733 00000 n +0000060887 00000 n +0000061041 00000 n +0000061195 00000 n +0000061349 00000 n +0000061503 00000 n +0000061657 00000 n +0000061811 00000 n +0000061965 00000 n +0000062119 00000 n +0000062272 00000 n +0000062425 00000 n +0000062578 00000 n +0000062732 00000 n +0000062886 00000 n +0000063040 00000 n +0000063193 00000 n +0000063346 00000 n +0000063498 00000 n +0000063652 00000 n +0000063806 00000 n +0000063959 00000 n +0000064111 00000 n +0000064265 00000 n +0000064419 00000 n +0000064573 00000 n +0000064725 00000 n +0000064879 00000 n +0000065033 00000 n +0000065186 00000 n +0000065339 00000 n +0000065492 00000 n +0000065646 00000 n +0000065800 00000 n +0000065953 00000 n +0000066105 00000 n +0000066258 00000 n +0000076331 00000 n +0000066473 00000 n +0000058695 00000 n +0000037113 00000 n +0000066411 00000 n +0000076485 00000 n +0000076638 00000 n +0000076791 00000 n +0000076944 00000 n +0000077098 00000 n +0000077249 00000 n +0000077402 00000 n +0000077556 00000 n +0000077709 00000 n +0000077863 00000 n +0000078014 00000 n +0000078166 00000 n +0000078320 00000 n +0000078473 00000 n +0000078627 00000 n +0000078780 00000 n +0000078932 00000 n +0000079085 00000 n +0000079239 00000 n +0000079393 00000 n +0000079547 00000 n +0000079698 00000 n +0000079913 00000 n +0000076016 00000 n +0000066557 00000 n +0000079852 00000 n +0000080316 00000 n +0000080135 00000 n +0000079997 00000 n +0000080254 00000 n +0000089175 00000 n +0000089329 00000 n +0000089485 00000 n +0000089642 00000 n +0000089801 00000 n +0000089957 00000 n +0000090111 00000 n +0000090265 00000 n +0000090418 00000 n +0000090571 00000 n +0000090784 00000 n +0000088964 00000 n +0000080387 00000 n +0000899918 00000 n +0000900619 00000 n +0000758137 00000 n +0000754292 00000 n +0000753671 00000 n +0000758200 00000 n +0000758074 00000 n +0000754105 00000 n +0000754167 00000 n +0000758011 00000 n +0000753919 00000 n +0000753981 00000 n +0000101879 00000 n +0000102029 00000 n +0000102182 00000 n +0000096676 00000 n +0000111648 00000 n +0000102455 00000 n +0000096521 00000 n +0000090881 00000 n +0000898474 00000 n +0000102395 00000 n +0000097886 00000 n +0000098132 00000 n +0000098179 00000 n +0000098572 00000 n +0000098593 00000 n +0000098900 00000 n +0000754043 00000 n +0000111799 00000 n +0000111953 00000 n +0000112351 00000 n +0000111493 00000 n +0000102580 00000 n +0000112106 00000 n +0000900210 00000 n +0000899199 00000 n +0000898766 00000 n +0000899630 00000 n +0000899056 00000 n +0000112227 00000 n +0000899342 00000 n +0000112289 00000 n +0000757948 00000 n +0000120076 00000 n +0000120229 00000 n +0000118105 00000 n +0000120567 00000 n +0000117958 00000 n +0000112551 00000 n +0000120382 00000 n +0000120444 00000 n +0000119814 00000 n +0000119933 00000 n +0000119980 00000 n +0000120054 00000 n +0000753857 00000 n +0000753795 00000 n +0000126399 00000 n +0000126550 00000 n +0000126763 00000 n +0000126252 00000 n +0000120731 00000 n +0000126702 00000 n +0000136327 00000 n +0000135589 00000 n +0000126873 00000 n +0000135708 00000 n +0000898620 00000 n +0000135831 00000 n +0000135893 00000 n +0000135955 00000 n +0000136017 00000 n +0000136079 00000 n +0000136141 00000 n +0000136203 00000 n +0000136265 00000 n +0000144383 00000 n +0000143414 00000 n +0000136462 00000 n +0000143533 00000 n +0000143594 00000 n +0000143655 00000 n +0000143716 00000 n +0000143777 00000 n +0000143837 00000 n +0000143898 00000 n +0000143959 00000 n +0000144019 00000 n +0000144080 00000 n +0000144141 00000 n +0000144202 00000 n +0000144263 00000 n +0000144323 00000 n +0000900737 00000 n +0000148169 00000 n +0000148449 00000 n +0000148030 00000 n +0000144467 00000 n +0000148326 00000 n +0000156652 00000 n +0000156804 00000 n +0000157204 00000 n +0000156505 00000 n +0000148559 00000 n +0000156961 00000 n +0000157142 00000 n +0000163889 00000 n +0000164722 00000 n +0000163750 00000 n +0000157327 00000 n +0000164041 00000 n +0000164103 00000 n +0000164165 00000 n +0000164226 00000 n +0000164288 00000 n +0000164350 00000 n +0000164412 00000 n +0000164474 00000 n +0000164536 00000 n +0000164598 00000 n +0000164660 00000 n +0000170974 00000 n +0000170429 00000 n +0000164819 00000 n +0000170548 00000 n +0000170609 00000 n +0000170670 00000 n +0000170731 00000 n +0000170792 00000 n +0000175957 00000 n +0000176109 00000 n +0000176444 00000 n +0000175810 00000 n +0000171071 00000 n +0000176260 00000 n +0000181284 00000 n +0000180864 00000 n +0000176567 00000 n +0000180983 00000 n +0000900855 00000 n +0000190850 00000 n +0000191011 00000 n +0000191166 00000 n +0000191562 00000 n +0000190695 00000 n +0000181394 00000 n +0000191316 00000 n +0000191500 00000 n +0000757885 00000 n +0000196808 00000 n +0000197050 00000 n +0000196628 00000 n +0000191672 00000 n +0000196747 00000 n +0000201124 00000 n +0000200759 00000 n +0000197147 00000 n +0000200878 00000 n +0000201001 00000 n +0000205343 00000 n +0000204981 00000 n +0000201221 00000 n +0000205100 00000 n +0000212904 00000 n +0000213056 00000 n +0000213516 00000 n +0000212757 00000 n +0000205440 00000 n +0000213207 00000 n +0000213393 00000 n +0000213454 00000 n +0000220075 00000 n +0000217448 00000 n +0000216963 00000 n +0000213626 00000 n +0000217082 00000 n +0000217265 00000 n +0000900973 00000 n +0000220473 00000 n +0000219936 00000 n +0000217545 00000 n +0000220226 00000 n +0000220350 00000 n +0000224128 00000 n +0000224190 00000 n +0000223948 00000 n +0000220570 00000 n +0000224067 00000 n +0000900356 00000 n +0000224734 00000 n +0000224491 00000 n +0000224274 00000 n +0000224610 00000 n +0000232018 00000 n +0000232168 00000 n +0000232315 00000 n +0000232465 00000 n +0000232615 00000 n +0000234777 00000 n +0000232948 00000 n +0000231847 00000 n +0000224818 00000 n +0000232765 00000 n +0000232886 00000 n +0000234989 00000 n +0000234638 00000 n +0000233084 00000 n +0000234927 00000 n +0000242217 00000 n +0000242367 00000 n +0000242517 00000 n +0000242668 00000 n +0000243000 00000 n +0000242054 00000 n +0000235086 00000 n +0000242817 00000 n +0000242938 00000 n +0000901091 00000 n +0000244014 00000 n +0000243833 00000 n +0000243149 00000 n +0000243952 00000 n +0000251793 00000 n +0000251943 00000 n +0000252093 00000 n +0000252243 00000 n +0000252574 00000 n +0000251630 00000 n +0000244098 00000 n +0000252392 00000 n +0000252513 00000 n +0000253588 00000 n +0000253407 00000 n +0000252723 00000 n +0000253526 00000 n +0000260410 00000 n +0000260556 00000 n +0000260890 00000 n +0000260263 00000 n +0000253672 00000 n +0000260707 00000 n +0000260828 00000 n +0000267057 00000 n +0000267206 00000 n +0000267540 00000 n +0000266910 00000 n +0000261039 00000 n +0000267355 00000 n +0000267478 00000 n +0000274070 00000 n +0000274218 00000 n +0000274552 00000 n +0000273923 00000 n +0000267689 00000 n +0000274369 00000 n +0000274490 00000 n +0000901209 00000 n +0000281781 00000 n +0000281930 00000 n +0000282265 00000 n +0000281634 00000 n +0000274713 00000 n +0000282079 00000 n +0000282203 00000 n +0000283289 00000 n +0000283109 00000 n +0000282426 00000 n +0000283228 00000 n +0000289838 00000 n +0000289987 00000 n +0000290322 00000 n +0000289691 00000 n +0000283373 00000 n +0000290137 00000 n +0000290260 00000 n +0000296325 00000 n +0000296472 00000 n +0000296806 00000 n +0000296178 00000 n +0000290471 00000 n +0000296623 00000 n +0000296744 00000 n +0000302637 00000 n +0000302785 00000 n +0000303120 00000 n +0000302490 00000 n +0000296954 00000 n +0000302935 00000 n +0000899775 00000 n +0000303058 00000 n +0000311009 00000 n +0000311160 00000 n +0000311309 00000 n +0000318704 00000 n +0000311828 00000 n +0000310854 00000 n +0000303269 00000 n +0000311459 00000 n +0000311580 00000 n +0000311642 00000 n +0000311704 00000 n +0000311766 00000 n +0000901327 00000 n +0000318855 00000 n +0000319005 00000 n +0000319155 00000 n +0000319307 00000 n +0000319460 00000 n +0000319613 00000 n +0000319826 00000 n +0000318517 00000 n +0000311989 00000 n +0000319764 00000 n +0000328543 00000 n +0000336053 00000 n +0000328876 00000 n +0000328404 00000 n +0000319936 00000 n +0000328693 00000 n +0000328814 00000 n +0000336205 00000 n +0000336356 00000 n +0000336507 00000 n +0000336657 00000 n +0000336869 00000 n +0000335882 00000 n +0000329050 00000 n +0000336807 00000 n +0000341874 00000 n +0000342025 00000 n +0000342237 00000 n +0000341727 00000 n +0000337005 00000 n +0000342176 00000 n +0000343196 00000 n +0000343472 00000 n +0000343057 00000 n +0000342347 00000 n +0000343348 00000 n +0000349793 00000 n +0000349944 00000 n +0000350095 00000 n +0000350428 00000 n +0000349638 00000 n +0000343556 00000 n +0000350245 00000 n +0000350366 00000 n +0000901445 00000 n +0000359118 00000 n +0000354889 00000 n +0000359268 00000 n +0000359542 00000 n +0000354742 00000 n +0000350564 00000 n +0000359418 00000 n +0000359480 00000 n +0000358783 00000 n +0000358902 00000 n +0000358949 00000 n +0000359023 00000 n +0000359096 00000 n +0000362982 00000 n +0000362802 00000 n +0000359693 00000 n +0000362921 00000 n +0000899486 00000 n +0000370267 00000 n +0000370418 00000 n +0000370755 00000 n +0000370119 00000 n +0000363066 00000 n +0000370568 00000 n +0000370692 00000 n +0000376991 00000 n +0000382313 00000 n +0000377143 00000 n +0000377293 00000 n +0000377696 00000 n +0000376830 00000 n +0000370904 00000 n +0000377445 00000 n +0000377508 00000 n +0000377571 00000 n +0000377634 00000 n +0000386700 00000 n +0000381698 00000 n +0000381512 00000 n +0000377833 00000 n +0000381634 00000 n +0000386764 00000 n +0000382190 00000 n +0000381783 00000 n +0000386637 00000 n +0000901565 00000 n +0000386297 00000 n +0000386417 00000 n +0000386465 00000 n +0000386540 00000 n +0000386614 00000 n +0000394666 00000 n +0000394818 00000 n +0000395159 00000 n +0000394513 00000 n +0000386865 00000 n +0000394969 00000 n +0000395095 00000 n +0000396922 00000 n +0000396736 00000 n +0000395321 00000 n +0000396859 00000 n +0000404422 00000 n +0000406848 00000 n +0000404764 00000 n +0000404278 00000 n +0000397007 00000 n +0000404573 00000 n +0000404700 00000 n +0000407063 00000 n +0000406704 00000 n +0000404926 00000 n +0000407000 00000 n +0000414063 00000 n +0000413750 00000 n +0000407161 00000 n +0000413873 00000 n +0000420744 00000 n +0000421022 00000 n +0000420600 00000 n +0000414200 00000 n +0000420896 00000 n +0000420959 00000 n +0000901690 00000 n +0000431727 00000 n +0000431220 00000 n +0000421133 00000 n +0000431343 00000 n +0000431407 00000 n +0000431471 00000 n +0000431535 00000 n +0000431599 00000 n +0000431663 00000 n +0000432680 00000 n +0000432431 00000 n +0000431864 00000 n +0000432554 00000 n +0000432617 00000 n +0000438544 00000 n +0000438947 00000 n +0000438400 00000 n +0000432765 00000 n +0000438695 00000 n +0000438821 00000 n +0000438885 00000 n +0000442778 00000 n +0000442929 00000 n +0000443268 00000 n +0000442625 00000 n +0000439071 00000 n +0000443081 00000 n +0000443205 00000 n +0000446870 00000 n +0000447020 00000 n +0000447297 00000 n +0000446717 00000 n +0000443379 00000 n +0000447171 00000 n +0000449855 00000 n +0000450130 00000 n +0000449711 00000 n +0000447408 00000 n +0000450006 00000 n +0000901815 00000 n +0000456369 00000 n +0000456517 00000 n +0000456795 00000 n +0000456216 00000 n +0000450241 00000 n +0000456668 00000 n +0000458895 00000 n +0000458583 00000 n +0000456932 00000 n +0000458706 00000 n +0000458769 00000 n +0000458832 00000 n +0000464079 00000 n +0000464229 00000 n +0000464694 00000 n +0000463926 00000 n +0000458980 00000 n +0000464376 00000 n +0000464502 00000 n +0000464566 00000 n +0000464630 00000 n +0000471712 00000 n +0000471863 00000 n +0000472013 00000 n +0000472288 00000 n +0000471550 00000 n +0000464818 00000 n +0000472164 00000 n +0000476057 00000 n +0000475486 00000 n +0000472412 00000 n +0000475609 00000 n +0000475673 00000 n +0000475737 00000 n +0000475801 00000 n +0000475865 00000 n +0000475929 00000 n +0000475993 00000 n +0000482366 00000 n +0000482518 00000 n +0000482919 00000 n +0000482213 00000 n +0000476168 00000 n +0000482668 00000 n +0000482793 00000 n +0000482856 00000 n +0000901940 00000 n +0000484989 00000 n +0000484610 00000 n +0000483030 00000 n +0000484733 00000 n +0000484797 00000 n +0000484861 00000 n +0000484925 00000 n +0000488372 00000 n +0000488521 00000 n +0000488797 00000 n +0000488219 00000 n +0000485074 00000 n +0000488673 00000 n +0000493096 00000 n +0000493245 00000 n +0000493587 00000 n +0000492943 00000 n +0000488908 00000 n +0000493396 00000 n +0000493523 00000 n +0000498505 00000 n +0000498779 00000 n +0000498361 00000 n +0000493698 00000 n +0000498655 00000 n +0000505283 00000 n +0000505560 00000 n +0000505139 00000 n +0000498903 00000 n +0000505434 00000 n +0000506610 00000 n +0000506298 00000 n +0000505684 00000 n +0000506421 00000 n +0000506484 00000 n +0000506547 00000 n +0000902065 00000 n +0000509776 00000 n +0000510053 00000 n +0000509632 00000 n +0000506695 00000 n +0000509927 00000 n +0000513249 00000 n +0000513524 00000 n +0000513105 00000 n +0000510164 00000 n +0000513400 00000 n +0000517382 00000 n +0000517133 00000 n +0000513635 00000 n +0000517256 00000 n +0000524263 00000 n +0000524538 00000 n +0000524119 00000 n +0000517519 00000 n +0000524414 00000 n +0000525742 00000 n +0000525427 00000 n +0000524662 00000 n +0000525550 00000 n +0000525614 00000 n +0000525678 00000 n +0000531752 00000 n +0000532028 00000 n +0000531608 00000 n +0000525827 00000 n +0000531904 00000 n +0000902190 00000 n +0000535628 00000 n +0000535969 00000 n +0000535484 00000 n +0000532152 00000 n +0000535779 00000 n +0000535905 00000 n +0000541269 00000 n +0000541608 00000 n +0000541125 00000 n +0000536093 00000 n +0000541421 00000 n +0000541545 00000 n +0000545176 00000 n +0000545517 00000 n +0000545032 00000 n +0000541732 00000 n +0000545327 00000 n +0000545453 00000 n +0000550801 00000 n +0000551140 00000 n +0000550657 00000 n +0000545641 00000 n +0000550953 00000 n +0000551077 00000 n +0000555272 00000 n +0000555676 00000 n +0000555128 00000 n +0000551264 00000 n +0000555422 00000 n +0000555548 00000 n +0000555612 00000 n +0000559645 00000 n +0000560046 00000 n +0000559501 00000 n +0000555787 00000 n +0000559796 00000 n +0000559920 00000 n +0000559983 00000 n +0000902315 00000 n +0000566151 00000 n +0000566427 00000 n +0000566007 00000 n +0000560157 00000 n +0000566300 00000 n +0000570687 00000 n +0000570312 00000 n +0000566551 00000 n +0000570435 00000 n +0000570498 00000 n +0000570561 00000 n +0000570624 00000 n +0000575158 00000 n +0000575307 00000 n +0000575458 00000 n +0000575734 00000 n +0000574996 00000 n +0000570811 00000 n +0000575608 00000 n +0000581920 00000 n +0000581672 00000 n +0000575858 00000 n +0000581795 00000 n +0000589886 00000 n +0000589124 00000 n +0000582044 00000 n +0000589247 00000 n +0000589311 00000 n +0000589375 00000 n +0000589439 00000 n +0000589503 00000 n +0000589567 00000 n +0000589631 00000 n +0000589694 00000 n +0000589758 00000 n +0000589822 00000 n +0000590498 00000 n +0000590250 00000 n +0000590009 00000 n +0000590373 00000 n +0000902440 00000 n +0000596593 00000 n +0000596216 00000 n +0000590583 00000 n +0000596339 00000 n +0000596465 00000 n +0000596529 00000 n +0000601809 00000 n +0000601436 00000 n +0000596730 00000 n +0000601559 00000 n +0000601684 00000 n +0000601746 00000 n +0000606801 00000 n +0000606360 00000 n +0000601946 00000 n +0000606483 00000 n +0000606609 00000 n +0000606673 00000 n +0000606737 00000 n +0000609405 00000 n +0000609158 00000 n +0000606938 00000 n +0000609281 00000 n +0000612849 00000 n +0000612600 00000 n +0000609516 00000 n +0000612723 00000 n +0000614473 00000 n +0000614226 00000 n +0000612986 00000 n +0000614349 00000 n +0000902565 00000 n +0000616366 00000 n +0000616117 00000 n +0000614584 00000 n +0000616240 00000 n +0000618143 00000 n +0000617896 00000 n +0000616477 00000 n +0000618019 00000 n +0000623096 00000 n +0000622847 00000 n +0000618254 00000 n +0000622970 00000 n +0000628812 00000 n +0000628439 00000 n +0000623233 00000 n +0000628562 00000 n +0000628686 00000 n +0000628749 00000 n +0000634571 00000 n +0000634194 00000 n +0000628949 00000 n +0000634317 00000 n +0000634443 00000 n +0000634507 00000 n +0000640301 00000 n +0000639928 00000 n +0000634708 00000 n +0000640051 00000 n +0000640175 00000 n +0000640238 00000 n +0000902690 00000 n +0000646152 00000 n +0000645775 00000 n +0000640438 00000 n +0000645898 00000 n +0000646024 00000 n +0000646088 00000 n +0000651970 00000 n +0000651597 00000 n +0000646289 00000 n +0000651720 00000 n +0000651844 00000 n +0000651907 00000 n +0000657848 00000 n +0000657536 00000 n +0000652107 00000 n +0000657659 00000 n +0000657785 00000 n +0000663706 00000 n +0000663397 00000 n +0000657985 00000 n +0000663520 00000 n +0000663644 00000 n +0000670463 00000 n +0000670613 00000 n +0000670892 00000 n +0000670310 00000 n +0000663843 00000 n +0000670765 00000 n +0000675089 00000 n +0000675153 00000 n +0000675217 00000 n +0000674903 00000 n +0000670990 00000 n +0000675026 00000 n +0000902815 00000 n +0000678582 00000 n +0000678333 00000 n +0000675315 00000 n +0000678456 00000 n +0000680152 00000 n +0000679904 00000 n +0000678693 00000 n +0000680027 00000 n +0000681822 00000 n +0000681572 00000 n +0000680263 00000 n +0000681695 00000 n +0000683951 00000 n +0000683703 00000 n +0000681933 00000 n +0000683826 00000 n +0000684898 00000 n +0000684648 00000 n +0000684062 00000 n +0000684771 00000 n +0000689642 00000 n +0000689917 00000 n +0000689498 00000 n +0000684996 00000 n +0000689792 00000 n +0000902940 00000 n +0000695100 00000 n +0000695376 00000 n +0000694956 00000 n +0000690028 00000 n +0000695249 00000 n +0000698925 00000 n +0000699200 00000 n +0000698781 00000 n +0000695487 00000 n +0000699075 00000 n +0000702884 00000 n +0000702634 00000 n +0000699311 00000 n +0000702757 00000 n +0000706909 00000 n +0000707184 00000 n +0000706765 00000 n +0000702995 00000 n +0000707059 00000 n +0000708517 00000 n +0000708267 00000 n +0000707295 00000 n +0000708390 00000 n +0000713483 00000 n +0000713635 00000 n +0000713977 00000 n +0000713330 00000 n +0000708628 00000 n +0000713790 00000 n +0000713914 00000 n +0000903065 00000 n +0000719093 00000 n +0000719242 00000 n +0000719392 00000 n +0000719544 00000 n +0000719821 00000 n +0000718922 00000 n +0000714139 00000 n +0000719695 00000 n +0000725146 00000 n +0000725297 00000 n +0000725573 00000 n +0000724993 00000 n +0000719932 00000 n +0000725449 00000 n +0000727884 00000 n +0000728163 00000 n +0000727740 00000 n +0000725684 00000 n +0000728036 00000 n +0000729180 00000 n +0000728932 00000 n +0000728274 00000 n +0000729055 00000 n +0000736703 00000 n +0000736852 00000 n +0000737128 00000 n +0000736550 00000 n +0000729278 00000 n +0000737002 00000 n +0000743183 00000 n +0000743398 00000 n +0000743039 00000 n +0000737290 00000 n +0000743335 00000 n +0000903190 00000 n +0000746253 00000 n +0000746066 00000 n +0000743522 00000 n +0000746189 00000 n +0000754416 00000 n +0000753422 00000 n +0000746351 00000 n +0000753545 00000 n +0000753608 00000 n +0000753733 00000 n +0000754229 00000 n +0000754354 00000 n +0000758327 00000 n +0000757698 00000 n +0000754514 00000 n +0000757821 00000 n +0000758263 00000 n +0000758425 00000 n +0000758878 00000 n +0000759212 00000 n +0000759568 00000 n +0000759594 00000 n +0000760105 00000 n +0000760143 00000 n +0000760838 00000 n +0000761195 00000 n +0000761275 00000 n +0000761655 00000 n +0000762297 00000 n +0000762961 00000 n +0000763589 00000 n +0000764232 00000 n +0000764522 00000 n +0000765175 00000 n +0000779063 00000 n +0000779485 00000 n +0000791884 00000 n +0000792312 00000 n +0000803419 00000 n +0000803754 00000 n +0000805840 00000 n +0000806062 00000 n +0000810621 00000 n +0000810868 00000 n +0000827856 00000 n +0000828391 00000 n +0000830667 00000 n +0000830899 00000 n +0000833282 00000 n +0000833520 00000 n +0000843202 00000 n +0000843579 00000 n +0000849569 00000 n +0000849889 00000 n +0000853939 00000 n +0000854283 00000 n +0000855906 00000 n +0000856142 00000 n +0000869947 00000 n +0000870326 00000 n +0000876599 00000 n +0000876867 00000 n +0000890359 00000 n +0000890848 00000 n +0000897836 00000 n +0000903297 00000 n +0000903417 00000 n +0000903540 00000 n +0000903666 00000 n +0000903783 00000 n +0000903875 00000 n +0000914709 00000 n +0000914896 00000 n +0000915081 00000 n +0000915259 00000 n +0000915430 00000 n +0000915599 00000 n +0000915768 00000 n +0000915939 00000 n +0000916114 00000 n +0000916291 00000 n +0000916466 00000 n +0000916643 00000 n +0000916818 00000 n +0000916995 00000 n +0000917170 00000 n +0000917347 00000 n +0000917521 00000 n +0000917695 00000 n +0000917872 00000 n +0000918056 00000 n +0000918273 00000 n +0000918503 00000 n +0000918709 00000 n +0000918898 00000 n +0000919078 00000 n +0000919258 00000 n +0000919443 00000 n +0000919626 00000 n +0000919811 00000 n +0000919993 00000 n +0000920175 00000 n +0000920349 00000 n +0000920519 00000 n +0000920690 00000 n +0000920859 00000 n +0000921028 00000 n +0000921199 00000 n +0000921374 00000 n +0000921551 00000 n +0000921726 00000 n +0000921903 00000 n +0000922078 00000 n +0000922255 00000 n +0000922430 00000 n +0000922607 00000 n +0000922781 00000 n +0000922955 00000 n +0000923138 00000 n +0000923339 00000 n +0000923540 00000 n +0000923743 00000 n +0000923944 00000 n +0000924147 00000 n +0000924348 00000 n +0000924551 00000 n +0000924751 00000 n +0000924951 00000 n +0000925154 00000 n +0000925355 00000 n +0000925558 00000 n +0000925759 00000 n +0000925962 00000 n +0000926163 00000 n +0000926354 00000 n +0000926541 00000 n +0000926747 00000 n +0000926986 00000 n +0000927207 00000 n +0000927387 00000 n +0000927558 00000 n +0000927669 00000 n +0000927786 00000 n +0000927902 00000 n +0000928018 00000 n +0000928135 00000 n +0000928252 00000 n +0000928369 00000 n +0000928485 00000 n +0000928605 00000 n +0000928729 00000 n +0000928852 00000 n +0000928984 00000 n +0000929092 00000 n +0000929210 00000 n +0000929324 00000 n +0000929404 00000 n +0000929444 00000 n +0000929681 00000 n trailer -<< /Size 1591 -/Root 1589 0 R -/Info 1590 0 R -/ID [<873D15B7399DBC9824362D3D17D2E286> <873D15B7399DBC9824362D3D17D2E286>] >> +<< /Size 1646 +/Root 1644 0 R +/Info 1645 0 R +/ID [ ] >> startxref -922100 +930323 %%EOF diff --git a/docs/src/biblio.tex b/docs/src/biblio.tex index 42497dbe..4f318833 100644 --- a/docs/src/biblio.tex +++ b/docs/src/biblio.tex @@ -124,6 +124,13 @@ 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. +% +\bibitem{DesignPatterns} +{ Gamma, E.}, { Helm, R.}, { Johnson, R.}, { and} { Vlissides, + J.} 1995. + {\em Design Patterns: Elements of Reusable Object-Oriented Software}. + Addison-Wesley. + % \bibitem{METIS} Karypis, G. and Kumar, V., diff --git a/docs/src/datastruct.tex b/docs/src/datastruct.tex index 6ebd74c8..62d273aa 100644 --- a/docs/src/datastruct.tex +++ b/docs/src/datastruct.tex @@ -1,4 +1,4 @@ -\section{Data Structures} +\section{Data Structures and Classes} \label{sec:datastruct} %\ifthenelse{\boolean{mtc}}{\minitoc}{} @@ -8,9 +8,11 @@ communication descriptors and preconditioners.%% These data structures %% are used for calling PSBLAS routines in Fortran~90 language and will %% be used to next chapters containing these callings. -All the data types and the basic subroutine interfaces are defined in +All the data types and the basic subroutine interfaces related to +descriptors and sparse matrices are defined in the module \verb|psb_base_mod|; this will have to be included by every -user subroutine that makes use of the library. +user subroutine that makes use of the library. The preconditioners are +defined in the module \verb|psb_prec_mod| Real and complex data types are parametrized with a kind type defined in the library as follows: @@ -21,11 +23,17 @@ in the library as follows: \item[psb\_dpk\_] Kind parameter for long precision real and complex data; corresponds to a \verb|DOUBLE PRECISION| declaration and is normally 8 bytes. +\item[psb\_long\_int\_k\_] Kind parameter for long integers, used by + the \verb|psb_sizeof| utility. \end{description} -Moreover, the library defines a long integer kind -\verb|psb_long_int_k_| which normally corresponds to 64-bit integers; -it is only used for the \verb|psb_sizeof| utility. - +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. \subsection{Descriptor data structure} @@ -161,316 +169,7 @@ state, which can take the following values: only possible in this state. \end{description} - -\subsubsection{Named Constants} -\label{sec:cd_constants} -\begin{description} -\item[psb\_none\_] Generic no-op; -\item[psb\_nohalo\_] Do not fetch halo elements; -\item[psb\_halo\_] Fetch halo elements from neighbouring processes; -\item[psb\_sum\_] Sum overlapped elements -\item[psb\_avg\_] Average overlapped elements -\item[psb\_comm\_halo\_] Exchange data based on the \verb|halo_index| - list; -\item[psb\_comm\_ext\_] Exchange data based on the \verb|ext_index| - list; -\item[psb\_comm\_ovr\_] Exchange data based on the \verb|ovrlap_index| - list; -\item[psb\_comm\_mov\_] Exchange data based on the \verb|ovr_mst_idx| - list; - -%% \item[psb\_square\_root\_] Update with the square root of the average -%% of overlapped elements; -%% \item[psb\_dec\_type\_] Entry holding decomposition type (in \verb|desc_a%matrix_data|) -%% \item[psb\_m\_] Entry holding total number of rows -%% \item[psb\_n\_] Entry holding total number of columns -%% \item[ psb\_n\_row\_] Entry holding the number of rows stored in the -%% current process -%% \item[psb\_n\_col\_] Entry holding the number of columns stored in the -%% current process -%% \item[psb\_ctxt\_] Entry holding a copy of the BLACS communication context -%% \item[psb\_desc\_asb\_] State of the descriptor: assembled, -%% i.e. suitable for computational tasks. -%% \item[psb\_desc\_bld\_] State of the descriptor: build, must be -%% assembled before computational use. -\end{description} - - -\subsection{Sparse Matrix data structure} -\label{sec:spmat} -The \hypertarget{spdata}{{\tt psb\_spmat\_type}} data structure -contains all information about the local portion of the sparse matrix and -its storage mode. Most of these fields are set by the tools -routines when inserting a new sparse matrix; the user needs only -choose, if he/she so whishes, a specific matrix storage mode. - -The -\begin{description} -\item[{\bf aspk}] Contains values of the local distributed sparse -matrix.\\ -Specified as: an allocatable array of rank one of type corresponding -to matrix entries type. -\item[{\bf ia1}] Holds integer information on distributed sparse -matrix. Actual information will depend on data format used.\\ -Specified as: an allocatable integer array of rank one. -\item[{\bf ia2}] Holds integer information on distributed sparse -matrix. Actual information will depend on data format used.\\ -Specified as: an allocatable integer array of rank one. -\item[{\bf infoa}] On entry can hold auxiliary information on distributed sparse -matrix. Actual information will depend on data format used.\\ -Specified as: an integer array of length \verb|psb_ifasize_|. -\item[{\bf fida}] Defines the format of the distributed sparse matrix.\\ -Specified as: a string of length 5 -\item[{\bf descra}] Describe the characteristic of the distributed sparse matrix.\\ -Specified as: array of character of length 9. -\item[{\bf pl}] Specifies the local row permutation of distributed sparse -matrix. If pl(1) is equal to 0, then there isn't row permutation.\\ -Specified as: an allocatable integer array of dimension equal to number of local row (matrix\_data[psb\_n\_row\_\hbox{]}) -\item[{\bf pr}] Specifies the local column permutation of distributed sparse -matrix. If PR(1) is equal to 0, then there isn't columnm permutation.\\ -Specified as: an allocatable integer array of dimension equal to number of -local row (matrix\_data[psb\_n\_col\_\hbox{]}) -\item[{\bf m}] Number of rows; if row indices are stored explicitly, -as in Coordinate Storage, should be greater than or equal to the -maximum row index actually present in the sparse matrix. -Specified as: integer variable. -\item[{\bf k}] Number of columns; if column indices are stored explicitly, -as in Coordinate Storage or Compressed Sparse Rows, should be greater -than or equal to the maximum column index actually present in the sparse matrix. -Specified as: integer variable. -\end{description} -The Fortran~95 interface for distributed sparse matrices containing -double precision real entries is defined as shown in -figure~\ref{fig:spmattype}. The definitions for single precision and -complex data are identical except for the \verb|real| declaration and -for the kind type parameter. -\begin{figure}[h!] - \begin{Sbox} - \begin{minipage}[tl]{0.85\textwidth} -\begin{verbatim} -type psb_sspmat_type - integer :: m, k - character :: fida(5) - character :: descra(10) - integer :: infoa(psb_ifa_size_) - real(psb_spk_), allocatable :: aspk(:) - integer, allocatable :: ia1(:), ia2(:) - integer, allocatable :: pr(:), pl(:) -end type psb_sspmat_type - -type psb_dspmat_type - integer :: m, k - character :: fida(5) - character :: descra(10) - integer :: infoa(psb_ifa_size_) - real(psb_dpk_), allocatable :: aspk(:) - integer, allocatable :: ia1(:), ia2(:) - integer, allocatable :: pr(:), pl(:) -end type psb_dspmat_type - -type psb_cspmat_type - integer :: m, k - character :: fida(5) - character :: descra(10) - integer :: infoa(psb_ifa_size_) - complex(psb_spk_), allocatable :: aspk(:) - integer, allocatable :: ia1(:), ia2(:) - integer, allocatable :: pr(:), pl(:) -end type psb_cspmat_type - -type psb_zspmat_type - integer :: m, k - character :: fida(5) - character :: descra(10) - integer :: infoa(psb_ifa_size_) - complex(psb_dpk_), allocatable :: aspk(:) - integer, allocatable :: ia1(:), ia2(:) - integer, allocatable :: pr(:), pl(:) -end type psb_zspmat_type - -\end{verbatim} - \end{minipage} - \end{Sbox} - \setlength{\fboxsep}{8pt} - \begin{center} - \fbox{\TheSbox} - \end{center} - \caption{\label{fig:spmattype} - The PSBLAS defined data type that - contains a sparse matrix.} -\end{figure} - -The following two cases are among the most commonly used: -\begin{description} -\item[fida=``CSR''] Compressed storage by rows. In this case the -following should hold: -\begin{enumerate} -\item \verb|ia2(i)| contains the index of the first element of row -\verb|i|; the last element of the sparse matrix is thus stored at -index $ia2(m+1)-1$. It should contain \verb|m+1| entries in -nondecreasing order (strictly increasing, if there are no empty rows). -\item \verb|ia1(j)| contains the column index and \verb|aspk(j)| -contains the corresponding coefficient value, for all $ia2(1) \le j -\le ia2(m+1)-1$. -\end{enumerate} -\item[fida=``COO''] Coordinate storage. In this case the following -should hold: -\begin{enumerate} -\item \verb|infoa(1)| contains the number of nonzero elements in the -matrix; -\item For all $1 \le j \le infoa(1)$, the coefficient, row index and -column index are stored into \verb|apsk(j)|, \verb|ia1(j)| and -\verb|ia2(j)| respectively. -\end{enumerate} -\end{description} -A sparse matrix has an associated state, which can take the following -values: -\begin{description} -\item[Build:] State entered after the first allocation, and before the - first assembly; in this state it is possible to add nonzero entries. -\item[Assembled:] State entered after the assembly; computations using - the sparse matrix, such as matrix-vector products, are only possible - in this state; -\item[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. -\end{description} -\subsubsection{Named Constants} -\label{sec:sp_constants} -\begin{description} -%% \item[psb\_nztotreq\_] Request to fetch the total number of nonzeroes -%% stored in a sparse matrix -%% \item[psb\_nzrowreq\_] Request to fetch the number of nonzeroes in a -%% given row in a sparse matrix -\item[psb\_dupl\_ovwrt\_] Duplicate coefficients should be overwritten - (i.e. ignore duplications) -\item[psb\_dupl\_add\_] Duplicate coefficients should be added; -\item[psb\_dupl\_err\_] Duplicate coefficients should trigger an error conditino -\item[psb\_upd\_dflt\_] Default update strategy for matrix coefficients; -\item[psb\_upd\_srch\_] Update strategy based on search into the data structure; -\item[psb\_upd\_perm\_] Update strategy based on additional - permutation data (see tools routine description). -\end{description} - -\subsection{Dense Vector Data Structure} -\label{sec:spmat} -The \hypertarget{vdata}{{\tt psb\_vect\_type}} data structure -contains all information about local portion of the sparse matrix and -its storage mode. Most of these fields are set by the tools -routines when inserting a new sparse matrix; the user needs only -choose, if he/she so whishes, a specific matrix storage mode. \\ - - - - -\subsection{Preconditioner data structure} -\label{sec:prec} -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 \hypertarget{precdata}{{\tt - psb\_prec\_type}} data structure reported in -figure~\ref{fig:prectype}. The \verb|psb_prec_type| -data type may contain a simple preconditioning matrix with the -associated communication descriptor.%% which may be different than the -%% system communication descriptor in the case of parallel -%% preconditioners like the Additive Schwarz one. Then the -%% \verb|psb_prec_type| may contain more than one preconditioning matrix -%% like in the case of Two-Level (in general Multi-Level) preconditioners. -%% The user can choose the type of preconditioner to be used by means of -%% the \verb|psb_precset| subroutine; once the type of preconditioning -%% method is specified, along with all the parameters that characterize -%% it, the preconditioner data structure can be built using the -%% \verb|psb_precbld| subroutine. -%% This data structure wants to be flexible enough to easily allow the -%% implementation of new kind of preconditioners. -The values contained in -the \verb|iprcparm| and \verb|rprcparm| define tha type of -preconditioner along with all the parameters related to it; thus, -\verb|iprcparm| and \verb|rprcparm| define how the other records have -to be interpreted. This data structure is the basis of more complex -preconditioning strategies, which are the subject of further -research. -\begin{figure}[h!] - \small - \begin{Sbox} - \begin{minipage}[tl]{0.9\textwidth} -\begin{verbatim} - - type psb_sprec_type - type(psb_sspmat_type), allocatable :: av(:) - real(psb_spk_), allocatable :: d(:) - type(psb_desc_type) :: desc_data - integer, allocatable :: iprcparm(:) - real(psb_spk_), allocatable :: rprcparm(:) - integer, allocatable :: perm(:), invperm(:) - integer :: prec, base_prec - end type psb_sprec_type - - type psb_dprec_type - type(psb_dspmat_type), allocatable :: av(:) - real(psb_dpk_), allocatable :: d(:) - type(psb_desc_type) :: desc_data - integer, allocatable :: iprcparm(:) - real(psb_dpk_), allocatable :: rprcparm(:) - integer, allocatable :: perm(:), invperm(:) - integer :: prec, base_prec - end type psb_dprec_type - - type psb_cprec_type - type(psb_cspmat_type), allocatable :: av(:) - complex(psb_spk_), allocatable :: d(:) - type(psb_desc_type) :: desc_data - integer, allocatable :: iprcparm(:) - real(psb_spk_), allocatable :: rprcparm(:) - integer, allocatable :: perm(:), invperm(:) - integer :: prec, base_prec - end type psb_cprec_type - - type psb_zprec_type - type(psb_zspmat_type), allocatable :: av(:) - complex(psb_dpk_), allocatable :: d(:) - type(psb_desc_type) :: desc_data - integer, allocatable :: iprcparm(:) - real(psb_dpk_), allocatable :: rprcparm(:) - integer, allocatable :: perm(:), invperm(:) - integer :: prec, base_prec - end type psb_zprec_type - -\end{verbatim} - \end{minipage} - \end{Sbox} - \setlength{\fboxsep}{8pt} - \begin{center} - \fbox{\TheSbox} - \end{center} - \caption{\label{fig:prectype}The PSBLAS defined data type that contains a preconditioner.} -\end{figure} - -%% \subsection{Named Constants} -%% \label{sec:prec_constants} -%% \begin{description} -%% \item[f\_ilu\_n\_] Incomplete LU factorization with $n$ levels of -%% fill-in; currently only $n=0$ is implemented; -%% \item[f\_slu\_] Sparse factorization using SuperLU; -%% \item[f\_umf\_] Sparse factorization using UMFPACK; -%% \item[add\_ml\_prec\_] Additive multilevel correction; -%% \item[mult\_ml\_prec\_] Multiplicative multilevel correction; -%% \item[pre\_smooth\_] Pre-smoothing in applying multiplicative -%% multilevel corrections; -%% \item[post\_smooth\_] Post-smoothing in applying multiplicative -%% multilevel corrections; -%% \item[smooth\_both\_] Two-sided (i.e. symmetric) smoothing in applying multiplicative -%% multilevel corrections; -%% \item[mat\_distr\_] Coarse matrix distributed among processes -%% \item[mat\_repl\_] Coarse matrix replicated among processes -%% \end{description} - - -\subsection{Data structure query routines} -\label{sec:dataquery} +\subsubsection{Methods} \subsubsection*{get\_local\_rows --- Get number of local rows} \addcontentsline{toc}{subsubsection}{get\_local\_rows } @@ -483,9 +182,9 @@ nr = desc%get_local_rows() \item[\bf On Entry] \item[desc] the communication descriptor.\\ Scope: {\bf local}.\\ -Type: {\bf required}.\\ -Intent: {\bf in}.\\ -Specified as: a structured data of type \descdata. +% Type: {\bf required}.\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \descdata. \end{description} \begin{description} @@ -509,9 +208,9 @@ nc = desc%get_local_cols() \item[Type:] Asynchronous. \item[desc] the communication descriptor.\\ Scope: {\bf local}.\\ -Type: {\bf required}.\\ -Intent: {\bf in}.\\ -Specified as: a structured data of type \descdata. +% Type: {\bf required}.\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \descdata. \end{description} \begin{description} @@ -536,14 +235,15 @@ nr = desc%get_global_rows() \item[Type:] Asynchronous. \item[desc] the communication descriptor.\\ Scope: {\bf local}.\\ -Type: {\bf required}.\\ -Intent: {\bf in}.\\ -Specified as: a structured data of type \descdata. +% Type: {\bf required}.\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \descdata. \end{description} \begin{description} \item[\bf On Return] -\item[Function value] The number of global rows in the mesh +\item[Function value] The number of global rows, i.e. the size of the + global index space. \end{description} \subsubsection*{get\_global\_cols --- Get number of global cols} @@ -558,14 +258,15 @@ nr = desc%get_global_cols() \item[\bf On Entry] \item[desc] the communication descriptor.\\ Scope: {\bf local}.\\ -Type: {\bf required}.\\ -Intent: {\bf in}.\\ -Specified as: a structured data of type \descdata. +% Type: {\bf required}.\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \descdata. \end{description} \begin{description} \item[\bf On Return] -\item[Function value] The number of global cols in the mesh +\item[Function value] The number of global cols; usually this is equal + to the number of global rows. \end{description} @@ -579,9 +280,9 @@ ictxt = desc%get_context() \item[\bf On Entry] \item[desc] the communication descriptor.\\ Scope: {\bf local}.\\ -Type: {\bf required}.\\ -Intent: {\bf in}.\\ -Specified as: a structured data of type \descdata. +% Type: {\bf required}.\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \descdata. \end{description} \begin{description} @@ -614,7 +315,7 @@ call psb_cd_set_large_threshold(ith) \end{verbatim} \begin{description} -\item[Type:] Asynchronous. +\item[Type:] Synchronous. \item[\bf On Entry] \item[ith] the new threshold for communication descriptors.\\ Scope: {\bf global}.\\ @@ -624,26 +325,127 @@ Specified as: an integer value greater than zero. \end{description} Note: the threshold value is only queried by the library at the time a call to \verb|psb_cdall| is executed, therefore changing the threshold -has no effect on communication descriptors that have already been initialized. - -\subsubsection*{get\_nrows --- Get number of rows in a sparse matrix} -\addcontentsline{toc}{subsubsection}{get\_nrows} - -\begin{verbatim} -nr = a%get_nrows() -\end{verbatim} +has no effect on communication descriptors that have already been +initialized. Moreover the threshold must have the same value on all +processes. +\subsubsection{Named Constants} +\label{sec:cd_constants} \begin{description} -\item[Type:] Asynchronous. -\item[\bf On Entry] -\item[a] the sparse matrix\\ -Scope: {\bf local}\\ -Type: {\bf required}\\ -Intent: {\bf in}.\\ -Specified as: a structured data of type \spdata. +\item[psb\_none\_] Generic no-op; +\item[psb\_nohalo\_] Do not fetch halo elements; +\item[psb\_halo\_] Fetch halo elements from neighbouring processes; +\item[psb\_sum\_] Sum overlapped elements +\item[psb\_avg\_] Average overlapped elements +\item[psb\_comm\_halo\_] Exchange data based on the \verb|halo_index| + list; +\item[psb\_comm\_ext\_] Exchange data based on the \verb|ext_index| + list; +\item[psb\_comm\_ovr\_] Exchange data based on the \verb|ovrlap_index| + list; +\item[psb\_comm\_mov\_] Exchange data based on the \verb|ovr_mst_idx| + list; + +%% \item[psb\_square\_root\_] Update with the square root of the average +%% of overlapped elements; +%% \item[psb\_dec\_type\_] Entry holding decomposition type (in \verb|desc_a%matrix_data|) +%% \item[psb\_m\_] Entry holding total number of rows +%% \item[psb\_n\_] Entry holding total number of columns +%% \item[ psb\_n\_row\_] Entry holding the number of rows stored in the +%% current process +%% \item[psb\_n\_col\_] Entry holding the number of columns stored in the +%% current process +%% \item[psb\_ctxt\_] Entry holding a copy of the BLACS communication context +%% \item[psb\_desc\_asb\_] State of the descriptor: assembled, +%% i.e. suitable for computational tasks. +%% \item[psb\_desc\_bld\_] State of the descriptor: build, must be +%% assembled before computational use. \end{description} -\begin{description} + +\subsection{Sparse Matrix class} +\label{sec:spmat} +The \hypertarget{spdata}{{\tt psb\_spmat\_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~\cite{DesignPatterns} as detailed +in~\cite{Sparse03}; the type declaration is shown in +figure~\ref{fig:spmattype} where \verb|T| is a placeholder for the +data type and precision variants +\begin{description} +\item[S] Single precision real; +\item[D] Double precision real; +\item[C] Single precision complex; +\item[Z] Double precision complex. +\end{description} +The actual data is contained in the polymorphic component \verb|a%a|; 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 \verb|psb_spasb| routine. +\begin{figure}[h!] + \begin{Sbox} + \begin{minipage}[tl]{0.85\textwidth} +\begin{verbatim} + + type :: psb_Tspmat_type + + class(psb_T_base_sparse_mat), allocatable :: a + + end type psb_Tspmat_type + +\end{verbatim} + \end{minipage} + \end{Sbox} + \setlength{\fboxsep}{8pt} + \begin{center} + \fbox{\TheSbox} + \end{center} + \caption{\label{fig:spmattype} + The PSBLAS defined data type that + contains a sparse matrix.} +\end{figure} +The following very common formats are precompiled in PSBLAS and thus +are always available: +\begin{description} +\item[psb\_T\_coo\_sparse\_mat] Coordinate storage; +\item[psb\_T\_csr\_sparse\_mat] Compressed storage by rows; +\item[psb\_T\_csc\_sparse\_mat] Compressed storage by columns; +\end{description} +The inner sparse matrix has an associated state, which can take the +following values: +\begin{description} +\item[Build:] State entered after the first allocation, and before the + first assembly; in this state it is possible to add nonzero entries. +\item[Assembled:] State entered after the assembly; computations using + the sparse matrix, such as matrix-vector products, are only possible + in this state; +\item[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. +\end{description} +The only storage variant supporting the build state is COO; all other +variants are obtained by conversion to/from it. + +\subsubsection{Methods} +\subsubsection*{get\_nrows --- Get number of rows in a sparse matrix} +\addcontentsline{toc}{subsubsection}{get\_nrows} + +\begin{verbatim} +nr = a%get_nrows() +\end{verbatim} + +\begin{description} +\item[Type:] Asynchronous. +\item[\bf On Entry] +\item[a] the sparse matrix\\ +Scope: {\bf local}\\ +% Type: {\bf required}\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \spdata. +\end{description} + +\begin{description} \item[\bf On Return] \item[Function value] The number of rows of sparse matrix \verb|a|. \end{description} @@ -653,7 +455,7 @@ Specified as: a structured data of type \spdata. \addcontentsline{toc}{subsubsection}{get\_ncols} \begin{verbatim} -nr = a%get_ncols() +nc = a%get_ncols() \end{verbatim} \begin{description} @@ -661,9 +463,9 @@ nr = a%get_ncols() \item[\bf On Entry] \item[a] the sparse matrix\\ Scope: {\bf local}\\ -Type: {\bf required}\\ -Intent: {\bf in}.\\ -Specified as: a structured data of type \spdata. +% Type: {\bf required}\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \spdata. \end{description} \begin{description} @@ -677,7 +479,7 @@ Specified as: a structured data of type \spdata. \addcontentsline{toc}{subsubsection}{get\_nnzeros} \begin{verbatim} -nr = a%get_nnzeros() +nz = a%get_nnzeros() \end{verbatim} \begin{description} @@ -685,9 +487,9 @@ nr = a%get_nnzeros() \item[\bf On Entry] \item[a] the sparse matrix\\ Scope: {\bf local}\\ -Type: {\bf required}\\ -Intent: {\bf in}.\\ -Specified as: a structured data of type \spdata. +% Type: {\bf required}\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \spdata. \end{description} \begin{description} @@ -702,6 +504,353 @@ Specified as: a structured data of type \spdata. value for the same matrix may be different for different storage choices. \end{enumerate} +\subsubsection*{get\_size --- Get maximum number of nonzero elements + in a sparse matrix} +\addcontentsline{toc}{subsubsection}{get\_size} + +\begin{verbatim} +maxnz = a%get_size() +\end{verbatim} + +\begin{description} +\item[Type:] Asynchronous. +\item[\bf On Entry] +\item[a] the sparse matrix\\ +Scope: {\bf local}\\ +% Type: {\bf required}\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \spdata. +\end{description} + +\begin{description} +\item[\bf On Return] +\item[Function value] The maximum number of nonzero elements that can + be stored in sparse matrix \verb|a| using its current memory allocation. +\end{description} + +\subsubsection*{sizeof --- Get memory occupation in bytes +of a sparse matrix} +\addcontentsline{toc}{subsubsection}{sizeof} + +\begin{verbatim} +memory_size = a%sizeof() +\end{verbatim} + +\begin{description} +\item[Type:] Asynchronous. +\item[\bf On Entry] +\item[a] the sparse matrix\\ +Scope: {\bf local}\\ +% Type: {\bf required}\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \spdata. +\end{description} + +\begin{description} +\item[\bf On Return] +\item[Function value] The memory occupation in bytes. +\end{description} + + +\subsubsection*{get\_fmt --- Short description of the dynamic type} +\addcontentsline{toc}{subsubsection}{get\_fmt} + +\begin{verbatim} +write(*,*) a%get_fmt() +\end{verbatim} + +\begin{description} +\item[Type:] Asynchronous. +\item[\bf On Entry] +\item[a] the sparse matrix\\ +Scope: {\bf local}\\ +% Type: {\bf required}\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \spdata. +\end{description} + +\begin{description} +\item[\bf On Return] +\item[Function value] A short string describing the dynamic type of + the matrix. Predefined values include \verb|NULL|, \verb|COO|, + \verb|CSR| and \verb|CSC|. +\end{description} + +\subsubsection*{is\_bld, is\_upd, is\_asb --- Status check} +\addcontentsline{toc}{subsubsection}{is\_bld, is\_upd, is\_asb} + +\begin{verbatim} +if (a%is_bld()) then +if (a%is_upd()) then +if (a%is_asb()) then +\end{verbatim} + +\begin{description} +\item[Type:] Asynchronous. +\item[\bf On Entry] +\item[a] the sparse matrix\\ +Scope: {\bf local}\\ +% Type: {\bf required}\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \spdata. +\end{description} + +\begin{description} +\item[\bf On Return] +\item[Function value] A \verb|logical| value indicating whether the + matrix is in the Build, Update or Assembled state, respectively. +\end{description} + + +\subsubsection{Named Constants} +\label{sec:sp_constants} +\begin{description} +%% \item[psb\_nztotreq\_] Request to fetch the total number of nonzeroes +%% stored in a sparse matrix +%% \item[psb\_nzrowreq\_] Request to fetch the number of nonzeroes in a +%% given row in a sparse matrix +\item[psb\_dupl\_ovwrt\_] Duplicate coefficients should be overwritten + (i.e. ignore duplications) +\item[psb\_dupl\_add\_] Duplicate coefficients should be added; +\item[psb\_dupl\_err\_] Duplicate coefficients should trigger an error conditino +\item[psb\_upd\_dflt\_] Default update strategy for matrix coefficients; +\item[psb\_upd\_srch\_] Update strategy based on search into the data structure; +\item[psb\_upd\_perm\_] Update strategy based on additional + permutation data (see tools routine description). +\end{description} + + +\subsection{Dense Vector Data Structure} +\label{sec:spmat} +The \hypertarget{vdata}{{\tt psb\_vect\_type}} data structure +encapsulates the dense vectors in a way similar to sparse matrices. +The user will not, in general, access the vector components directly, +but rather via the routines of sec.~\ref{sec:toolsrout}. 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~\ref{fig:vectype} where \verb|T| is a placeholder for the +data type and precision variants +\begin{description} +\item[I] Integer; +\item[S] Single precision real; +\item[D] Double precision real; +\item[C] Single precision complex; +\item[Z] Double precision complex. +\end{description} +The actual data is contained in the polymorphic component \verb|a%a|; 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 \verb|psb_spasb| routine. +\begin{figure}[h!] + \begin{Sbox} + \begin{minipage}[tl]{0.85\textwidth} +\begin{verbatim} + 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 + +\end{verbatim} + \end{minipage} + \end{Sbox} + \setlength{\fboxsep}{8pt} + \begin{center} + \fbox{\TheSbox} + \end{center} + \caption{\label{fig:vectype} + The PSBLAS defined data type that + contains a dense vector..} +\end{figure} + +\subsubsection{Methods} +\subsubsection*{get\_nrows --- Get number of rows in a dense vector} +\addcontentsline{toc}{subsubsection}{v\_get\_nrows} + +\begin{verbatim} +nr = v%get_nrows() +\end{verbatim} + +\begin{description} +\item[Type:] Asynchronous. +\item[\bf On Entry] +\item[v] the dense vector\\ +Scope: {\bf local}\\ +% Type: {\bf required}\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \spdata. +\end{description} + +\begin{description} +\item[\bf On Return] +\item[Function value] The number of rows of sparse matrix \verb|a|. +\end{description} + + +\subsubsection*{get\_ncols --- Get number of columns in a sparse matrix} + +\subsubsection*{sizeof --- Get memory occupation in bytes +of a dense vector matrix} +\addcontentsline{toc}{subsubsection}{v\_sizeof} + +\begin{verbatim} +memory_size = v%sizeof() +\end{verbatim} + +\begin{description} +\item[Type:] Asynchronous. +\item[\bf On Entry] +\item[v] the dense vector\\ +Scope: {\bf local}\\ +% Type: {\bf required}\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \spdata. +\end{description} + +\begin{description} +\item[\bf On Return] +\item[Function value] The memory occupation in bytes. +\end{description} + + +\subsubsection*{get\_vect --- Get a copy of the vector contents} +\addcontentsline{toc}{subsubsection}{v\_get\_vect} + +\begin{verbatim} +extv = v%get_vect() +\end{verbatim} + +\begin{description} +\item[Type:] Asynchronous. +\item[\bf On Entry] +\item[v] the dense vector\\ +Scope: {\bf local}\\ +% Type: {\bf required}\\ +% Intent: {\bf in}.\\ +% Specified as: a structured data of type \spdata. +\end{description} + +\begin{description} +\item[\bf On Return] +\item[Function value] An allocatable array holding a copy of the dense + vector contents. +\end{description} + + +\subsection{Preconditioner data structure} +\label{sec:prec} +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 \hypertarget{precdata}{{\tt + psb\_prec\_type}} data structure reported in +figure~\ref{fig:prectype}. The \verb|psb_prec_type| +data type may contain a simple preconditioning matrix with the +associated communication descriptor.%% which may be different than the +%% system communication descriptor in the case of parallel +%% preconditioners like the Additive Schwarz one. Then the +%% \verb|psb_prec_type| may contain more than one preconditioning matrix +%% like in the case of Two-Level (in general Multi-Level) preconditioners. +%% The user can choose the type of preconditioner to be used by means of +%% the \verb|psb_precset| subroutine; once the type of preconditioning +%% method is specified, along with all the parameters that characterize +%% it, the preconditioner data structure can be built using the +%% \verb|psb_precbld| subroutine. +%% This data structure wants to be flexible enough to easily allow the +%% implementation of new kind of preconditioners. +The values contained in +the \verb|iprcparm| and \verb|rprcparm| define tha type of +preconditioner along with all the parameters related to it; thus, +\verb|iprcparm| and \verb|rprcparm| define how the other records have +to be interpreted. This data structure is the basis of more complex +preconditioning strategies, which are the subject of further +research. +\begin{figure}[h!] + \small + \begin{Sbox} + \begin{minipage}[tl]{0.9\textwidth} +\begin{verbatim} + + type psb_sprec_type + type(psb_sspmat_type), allocatable :: av(:) + real(psb_spk_), allocatable :: d(:) + type(psb_desc_type) :: desc_data + integer, allocatable :: iprcparm(:) + real(psb_spk_), allocatable :: rprcparm(:) + integer, allocatable :: perm(:), invperm(:) + integer :: prec, base_prec + end type psb_sprec_type + + type psb_dprec_type + type(psb_dspmat_type), allocatable :: av(:) + real(psb_dpk_), allocatable :: d(:) + type(psb_desc_type) :: desc_data + integer, allocatable :: iprcparm(:) + real(psb_dpk_), allocatable :: rprcparm(:) + integer, allocatable :: perm(:), invperm(:) + integer :: prec, base_prec + end type psb_dprec_type + + type psb_cprec_type + type(psb_cspmat_type), allocatable :: av(:) + complex(psb_spk_), allocatable :: d(:) + type(psb_desc_type) :: desc_data + integer, allocatable :: iprcparm(:) + real(psb_spk_), allocatable :: rprcparm(:) + integer, allocatable :: perm(:), invperm(:) + integer :: prec, base_prec + end type psb_cprec_type + + type psb_zprec_type + type(psb_zspmat_type), allocatable :: av(:) + complex(psb_dpk_), allocatable :: d(:) + type(psb_desc_type) :: desc_data + integer, allocatable :: iprcparm(:) + real(psb_dpk_), allocatable :: rprcparm(:) + integer, allocatable :: perm(:), invperm(:) + integer :: prec, base_prec + end type psb_zprec_type + +\end{verbatim} + \end{minipage} + \end{Sbox} + \setlength{\fboxsep}{8pt} + \begin{center} + \fbox{\TheSbox} + \end{center} + \caption{\label{fig:prectype}The PSBLAS defined data type that contains a preconditioner.} +\end{figure} + +%% \subsection{Named Constants} +%% \label{sec:prec_constants} +%% \begin{description} +%% \item[f\_ilu\_n\_] Incomplete LU factorization with $n$ levels of +%% fill-in; currently only $n=0$ is implemented; +%% \item[f\_slu\_] Sparse factorization using SuperLU; +%% \item[f\_umf\_] Sparse factorization using UMFPACK; +%% \item[add\_ml\_prec\_] Additive multilevel correction; +%% \item[mult\_ml\_prec\_] Multiplicative multilevel correction; +%% \item[pre\_smooth\_] Pre-smoothing in applying multiplicative +%% multilevel corrections; +%% \item[post\_smooth\_] Post-smoothing in applying multiplicative +%% multilevel corrections; +%% \item[smooth\_both\_] Two-sided (i.e. symmetric) smoothing in applying multiplicative +%% multilevel corrections; +%% \item[mat\_distr\_] Coarse matrix distributed among processes +%% \item[mat\_repl\_] Coarse matrix replicated among processes +%% \end{description} + + +\subsection{Data structure Methods} +\label{sec:dataquery} + + %%% Local Variables: %%% mode: latex diff --git a/docs/src/intro.tex b/docs/src/intro.tex index 4c99429d..f5bad6e1 100644 --- a/docs/src/intro.tex +++ b/docs/src/intro.tex @@ -11,10 +11,10 @@ dense matrix operations. The current implementation of PSBLAS addresses a distributed memory execution model operating with message passing. -The PSBLAS library version 3 is internally implemented in +The PSBLAS library version 3 is implemented in the Fortran~2003~\cite{metcalf} programming language, with reuse and/or - adaptation of some existing Fortran~77 software, and a handful of C - routines. + 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 @@ -103,7 +103,8 @@ further details on our communication layer see Sec.~\ref{sec:parenv}. \ifcase\pdfoutput \includegraphics[scale=0.65]{figures/psblas.eps} \or -\rotatebox{-90}{\includegraphics[scale=0.65]{figures/psblas}} +%\rotatebox{-90}{\includegraphics[scale=0.65]{figures/psblas}} +{\includegraphics[scale=0.65]{figures/psblas}} \fi \end{center} \caption{PSBLAS library components hierarchy.\label{fig:psblas}} @@ -148,7 +149,7 @@ 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 explicitly\footnote{In our prototype implementation we provide -sample scatter/gather routines.}, even though the resulting +sample scatter/gather routines.}, even though the resulting memory bottleneck would make this option unattractive in most cases. @@ -263,11 +264,11 @@ systems solution for block diagonal matrices; The following naming scheme has been adopted for all the symbols internally defined in the PSBLAS software package: \begin{itemize} -\item all the symbols (i.e. subroutine names, data types...) are +\item all symbols (i.e. subroutine names, data types...) are prefixed by \verb|psb_| -\item all the data type names are suffixed by \verb|_type| -\item all the constant values are suffixed by \verb|_| -\item all the subroutine names follow the rule \verb|psb_xxname| where +\item all data type names are suffixed by \verb|_type| +\item all constants are suffixed by \verb|_| +\item all top-level subroutine names follow the rule \verb|psb_xxname| where \verb|xx| can be either: \begin{itemize} \item \verb|ge|: the routine is related to dense data, @@ -280,7 +281,7 @@ internally defined in the PSBLAS software package: dense matrices, sparse matrices and communication descriptors respectively. Interface overloading allows the usage of the same subroutine - interfaces for both real and complex data. + names for both real and complex data. \end{itemize} In the description of the subroutines, arguments or argument entries are classified as: @@ -360,7 +361,7 @@ follows: \item Call the iterative method of choice, e.g. \verb|psb_bicgstab| \end{enumerate} This is the structure of the sample program -\verb|test/pargen/ppde90.f90|. +\verb|test/pargen/ppde.f90|. For a simulation in which the same discretization mesh is used over multiple time steps, the following structure may be more appropriate: diff --git a/test/fileread/df_sample.f90 b/test/fileread/df_sample.f90 index b0a69993..de33d123 100644 --- a/test/fileread/df_sample.f90 +++ b/test/fileread/df_sample.f90 @@ -141,7 +141,7 @@ program df_sample m_problem = aux_a%get_nrows() call psb_bcast(ictxt,m_problem) - call psb_mat_renum(psb_mat_renum_amd_,aux_a,info,perm) + call psb_mat_renum(psb_mat_renum_identity_,aux_a,info,perm) ! At this point aux_b may still be unallocated if (psb_size(aux_b,dim=1) == m_problem) then @@ -182,7 +182,7 @@ program df_sample ! switch over different partition types if (ipart == 0) then call psb_barrier(ictxt) - if (iam == psb_root_) write(psb_out_unit,'("Partition type: block")') + if (iam == psb_root_) write(psb_out_unit,'("Partition type: block vector")') allocate(ivg(m_problem),ipv(np)) do i=1,m_problem call part_block(i,m_problem,np,ipv,nv) @@ -193,7 +193,7 @@ program df_sample else if (ipart == 2) then if (iam == psb_root_) then - write(psb_out_unit,'("Partition type: graph")') + write(psb_out_unit,'("Partition type: graph vector")') write(psb_out_unit,'(" ")') ! write(psb_err_unit,'("Build type: graph")') call build_mtpart(aux_a,np) @@ -206,7 +206,7 @@ program df_sample & desc_a,b_col_glob,b_col,info,fmt=afmt,v=ivg) else - if (iam == psb_root_) write(psb_out_unit,'("Partition type: block")') + if (iam == psb_root_) write(psb_out_unit,'("Partition type: block subroutine")') call psb_matdist(aux_a, a, ictxt, & & desc_a,b_col_glob,b_col,info,fmt=afmt,parts=part_block) end if @@ -219,7 +219,8 @@ program df_sample call psb_geasb(r_col,desc_a,info) t2 = psb_wtime() - t1 - + write(fnout,'(a,i3.3,a)') 'amat-',iam,'.mtx' + call a%print(fname=fnout) call psb_amx(ictxt, t2) if (iam == psb_root_) then diff --git a/test/fileread/runs/dfs.inp b/test/fileread/runs/dfs.inp index c2521d76..bf3d1a1e 100644 --- a/test/fileread/runs/dfs.inp +++ b/test/fileread/runs/dfs.inp @@ -1,11 +1,11 @@ 11 Number of inputs -pde40.mtx This (and others) from: http://math.nist.gov/MatrixMarket/ or +pde40.mtx This (and others) from: http://math.nist.gov/MatrixMarket/ or NONE sherman3_b.mtx http://www.cise.ufl.edu/research/sparse/matrices/index.html MM File format: MM: Matrix Market HB: Harwell-Boeing. BICGSTAB Iterative method: BiCGSTAB CGS RGMRES BiCGSTABL BICG CG BJAC Preconditioner NONE DIAG BJAC CSR Storage format CSR COO JAD -0 IPART: Partition method 0: BLK 2: graph (with Metis) +3 IPART: Partition method 0: BLK 2: graph (with Metis) 2 ISTOPC 00800 ITMAX -1 ITRACE diff --git a/test/pargen/ppde.f90 b/test/pargen/ppde.f90 index 625c8b11..505074f1 100644 --- a/test/pargen/ppde.f90 +++ b/test/pargen/ppde.f90 @@ -148,7 +148,7 @@ program ppde !!$ call psb_cdcpy(desc_a,desc_b,info) !!$ call psb_set_debug_level(9999) -!!$ call psb_cdbldext(a,desc_a,2,desc_b,info,extype=psb_ovt_asov_) + call psb_cdbldext(a,desc_a,2,desc_b,info,extype=psb_ovt_asov_) if (info /= 0) then write(0,*) 'Error from bldext' call psb_abort(ictxt) @@ -573,7 +573,6 @@ contains element = element+1 endif - end do call psb_spins(element-1,irow,icol,val,a,desc_a,info) if(info /= psb_success_) exit diff --git a/test/pargen/spde.f90 b/test/pargen/spde.f90 index 416315c4..63963fa0 100644 --- a/test/pargen/spde.f90 +++ b/test/pargen/spde.f90 @@ -38,9 +38,9 @@ ! ! The PDE is a general second order equation in 3d ! -! b1 dd(u) b2 dd(u) b3 dd(u) a1 d(u) a2 d(u) a3 d(u) -! - ------ - ------ - ------ - ----- - ------ - ------ + a4 u = 0 -! dxdx dydy dzdz dx dy dz +! b1 dd(u) b2 dd(u) b3 dd(u) a1 d(u) a2 d(u) a3 d(u) +! - ------ - ------ - ------ + ----- + ------ + ------ + a4 u = 0 +! dxdx dydy dzdz dx dy dz ! ! with Dirichlet boundary conditions, on the unit cube 0<=x,y,z<=1. ! @@ -365,7 +365,7 @@ contains ! discretize the partial diferential equation ! ! b1 dd(u) b2 dd(u) b3 dd(u) a1 d(u) a2 d(u) a3 d(u) - ! - ------ - ------ - ------ - ----- - ------ - ------ + a4 u + ! - ------ - ------ - ------ + ----- + ------ + ------ + a4 u ! dxdx dydy dzdz dx dy dz ! ! with Dirichlet boundary conditions, on the unit cube 0<=x,y,z<=1. @@ -399,7 +399,7 @@ contains real(psb_spk_), allocatable :: val(:) ! deltah dimension of each grid cell ! deltat discretization time - real(psb_spk_) :: deltah, deltah2 + real(psb_spk_) :: deltah, sqdeltah, deltah2 real(psb_spk_),parameter :: rhs=0.0,one=1.0,zero=0.0 real(psb_dpk_) :: t0, t1, t2, t3, tasb, talc, ttot, tgen real(psb_spk_) :: a1, a2, a3, a4, b1, b2, b3 @@ -414,8 +414,9 @@ contains call psb_info(ictxt, iam, np) - deltah = 1.d0/(idim-1) - deltah2 = deltah*deltah + deltah = 1.0/(idim-1) + sqdeltah = deltah*deltah + deltah2 = 2.0* deltah ! initialize array descriptor and sparse matrix storage. provide an ! estimate of the number of non zeroes @@ -507,63 +508,66 @@ contains ! term depending on (x-1,y,z) ! if (ix == 1) then - val(element) = -b1(x,y,z)/deltah2-a1(x,y,z)/deltah + val(element) = -b1(x,y,z)/sqdeltah-a1(x,y,z)/deltah2 zt(k) = exp(-x**2-y**2-z**2)*(-val(element)) else - val(element) = -b1(x,y,z)/deltah2-a1(x,y,z)/deltah + val(element) = -b1(x,y,z)/sqdeltah-a1(x,y,z)/deltah2 icol(element) = (ix-2)*idim*idim+(iy-1)*idim+(iz) irow(element) = glob_row element = element+1 endif ! term depending on (x,y-1,z) if (iy == 1) then - val(element) = -b2(x,y,z)/deltah2-a2(x,y,z)/deltah + val(element) = -b2(x,y,z)/sqdeltah-a2(x,y,z)/deltah2 zt(k) = exp(-x**2-y**2-z**2)*exp(-x)*(-val(element)) else - val(element) = -b2(x,y,z)/deltah2-a2(x,y,z)/deltah + val(element) = -b2(x,y,z)/sqdeltah-a2(x,y,z)/deltah2 icol(element) = (ix-1)*idim*idim+(iy-2)*idim+(iz) irow(element) = glob_row element = element+1 endif ! term depending on (x,y,z-1) if (iz == 1) then - val(element)=-b3(x,y,z)/deltah2-a3(x,y,z)/deltah + val(element)=-b3(x,y,z)/sqdeltah-a3(x,y,z)/deltah2 zt(k) = exp(-x**2-y**2-z**2)*exp(-x)*(-val(element)) else - val(element)=-b3(x,y,z)/deltah2-a3(x,y,z)/deltah + val(element)=-b3(x,y,z)/sqdeltah-a3(x,y,z)/deltah2 icol(element) = (ix-1)*idim*idim+(iy-1)*idim+(iz-1) irow(element) = glob_row element = element+1 endif ! term depending on (x,y,z) - val(element)=(2*b1(x,y,z) + 2*b2(x,y,z) + 2*b3(x,y,z))/deltah2& - & + (a1(x,y,z) + a2(x,y,z) + a3(x,y,z)+ a4(x,y,z))/deltah + val(element)=(2*b1(x,y,z) + 2*b2(x,y,z) + 2*b3(x,y,z))/sqdeltah& + & +a4(x,y,z) icol(element) = (ix-1)*idim*idim+(iy-1)*idim+(iz) irow(element) = glob_row element = element+1 ! term depending on (x,y,z+1) if (iz == idim) then - val(element)=-b1(x,y,z)/deltah2 + val(element)=-b3(x,y,z)/sqdeltah+a3(x,y,z)/deltah2 zt(k) = exp(-x**2-y**2-z**2)*exp(-x)*(-val(element)) else - val(element)=-b1(x,y,z)/deltah2 + val(element)=-b3(x,y,z)/sqdeltah+a3(x,y,z)/deltah2 icol(element) = (ix-1)*idim*idim+(iy-1)*idim+(iz+1) irow(element) = glob_row element = element+1 endif ! term depending on (x,y+1,z) if (iy == idim) then - val(element)=-b2(x,y,z)/deltah2 + val(element)=-b2(x,y,z)/sqdeltah+a2(x,y,z)/deltah2 zt(k) = exp(-x**2-y**2-z**2)*exp(-x)*(-val(element)) else - val(element)=-b2(x,y,z)/deltah2 + val(element)=-b2(x,y,z)/sqdeltah+a2(x,y,z)/deltah2 icol(element) = (ix-1)*idim*idim+(iy)*idim+(iz) irow(element) = glob_row element = element+1 endif ! term depending on (x+1,y,z) - if (ix