From 734724e4074688bf6d9da5f29ea41704b95a2515 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 11 May 2021 09:50:41 +0200 Subject: [PATCH] Update docs for release --- docs/amg4psblas_1.0-guide.pdf | Bin 1831463 -> 1830538 bytes docs/html/index.html | 6 +- docs/html/userhtml.css | 50 ++-- docs/html/userhtml.html | 6 +- docs/html/userhtml0x.png | Bin 905 -> 892 bytes docs/html/userhtml1x.png | Bin 2101 -> 2060 bytes docs/html/userhtmlli1.html | 4 +- docs/html/userhtmlli2.html | 4 +- docs/html/userhtmlli3.html | 4 +- docs/html/userhtmlli4.html | 37 ++- docs/html/userhtmlli5.html | 6 +- docs/html/userhtmlse1.html | 4 +- docs/html/userhtmlse2.html | 4 +- docs/html/userhtmlse3.html | 4 +- docs/html/userhtmlse4.html | 36 +-- docs/html/userhtmlse5.html | 4 +- docs/html/userhtmlse6.html | 54 ++-- docs/html/userhtmlse7.html | 4 +- docs/html/userhtmlse8.html | 226 +++++++-------- docs/html/userhtmlse9.html | 8 +- docs/html/userhtmlsu1.html | 4 +- docs/html/userhtmlsu10.html | 30 +- docs/html/userhtmlsu11.html | 54 ++-- docs/html/userhtmlsu12.html | 54 ++-- docs/html/userhtmlsu13.html | 54 ++-- docs/html/userhtmlsu14.html | 14 +- docs/html/userhtmlsu15.html | 38 +-- docs/html/userhtmlsu16.html | 78 ++--- docs/html/userhtmlsu2.html | 4 +- docs/html/userhtmlsu3.html | 25 +- docs/html/userhtmlsu4.html | 4 +- docs/html/userhtmlsu5.html | 4 +- docs/html/userhtmlsu6.html | 181 ++++++------ docs/html/userhtmlsu7.html | 109 ++++--- docs/html/userhtmlsu8.html | 34 +-- docs/html/userhtmlsu9.html | 518 +++++++++++++++++----------------- docs/src/license.tex | 4 +- docs/src/userguide.tex | 2 +- docs/src/userhtml.tex | 2 +- 39 files changed, 827 insertions(+), 847 deletions(-) diff --git a/docs/amg4psblas_1.0-guide.pdf b/docs/amg4psblas_1.0-guide.pdf index efadc6b51a21601352f722dc91e4fa0606ed4986..cc332a19d998047dd5aa11da2b02771679d2142d 100644 GIT binary patch delta 40686 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

PEoC^ouu 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 t5d3Njovq)80v8I%gGIQMu}Pf - - + + @@ -31,7 +31,7 @@ class="cmr-12">University of Rome Tor-Vergata and IAC-CNR
Software version: 1.0
April 12, 2021 +class="cmr-12">May 11th, 2021 diff --git a/docs/html/userhtml.css b/docs/html/userhtml.css index 02a4674d..a5ede259 100644 --- a/docs/html/userhtml.css +++ b/docs/html/userhtml.css @@ -13,33 +13,35 @@ .cmbx-12{font-size:109%; font-weight: bold;} .cmbx-12{ font-weight: bold;} .cmbx-12{ font-weight: bold;} -.cmtt-12{font-size:109%;font-family: monospace;} -.cmtt-12{font-family: monospace;} -.cmtt-12{font-family: monospace;} +.cmtt-12{font-size:109%;font-family: monospace,monospace;} +.cmtt-12{font-family: monospace,monospace;} +.cmtt-12{font-family: monospace,monospace;} .cmcsc-10x-x-120{font-size:109%;} .cmr-8{font-size:72%;} .cmmi-12{font-size:109%;font-style: italic;} .cmmi-8{font-size:72%;font-style: italic;} .cmsy-10x-x-120{font-size:109%;} .cmsy-8{font-size:72%;} +.tctt-1200{font-size:109%;font-family: monospace,monospace;} .cmmi-10x-x-109{font-style: italic;} .cmsy-10x-x-109{} -.cmtt-10x-x-109{font-family: monospace;} -.cmtt-10x-x-109{font-family: monospace;} -.cmtt-10x-x-109{font-family: monospace;} +.cmtt-10x-x-109{font-family: monospace,monospace;} +.cmtt-10x-x-109{font-family: monospace,monospace;} +.cmtt-10x-x-109{font-family: monospace,monospace;} .cmcsc-10x-x-109{} -.cmtt-10{font-size:90%;font-family: monospace;} -.cmtt-10{font-family: monospace;} -.cmtt-10{font-family: monospace;} +.cmtt-10{font-size:90%;font-family: monospace,monospace;} +.cmtt-10{font-family: monospace,monospace;} +.cmtt-10{font-family: monospace,monospace;} .cmbx-10x-x-109{ font-weight: bold;} .cmbx-10x-x-109{ font-weight: bold;} .cmbx-10x-x-109{ font-weight: bold;} .cmcsc-10{font-size:90%;} .small-caps{font-variant: small-caps; } -p.noindent { text-indent: 0em } -td p.noindent { text-indent: 0em; margin-top:0em; } -p.nopar { text-indent: 0em; } -p.indent{ text-indent: 1.5em } +p{margin-top:0;margin-bottom:0} +p.indent{text-indent:0;} +p + p{margin-top:1em;} +p + div, p + pre {margin-top:1em;} +div + p, pre + p {margin-top:1em;} @media print {div.crosslinks {visibility:hidden;}} a img { border-top: 0; border-left: 0; border-right: 0; } center { margin-top:1em; margin-bottom:1em; } @@ -62,7 +64,7 @@ div.obeylines-v p { margin-top:0; margin-bottom:0; } td.displaylines {text-align:center; white-space:nowrap;} .centerline {text-align:center;} .rightline {text-align:right;} -div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; } +pre.verbatim {font-family: monospace,monospace; text-align:left; clear:both; } .fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } div.fbox {display:table} div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } @@ -95,18 +97,16 @@ td.td01{ padding-left:0pt; padding-right:5pt; } td.td10{ padding-left:5pt; padding-right:0pt; } td.td11{ padding-left:5pt; padding-right:5pt; } table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } -.hline hr, .cline hr{ height : 1px; margin:0px; } +.hline hr, .cline hr{ height : 0px; margin:0px; } +.hline td, .cline td{ padding: 0; } +.hline hr, .cline hr{border:none;border-top:1px solid black;} .tabbing-right {text-align:right;} -span.TEX {letter-spacing: -0.125em; } -span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} -a span.TEX span.E {text-decoration: none; } -span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;} -span.LATEX span.TEX{ position:relative; left: -0.4em; } div.float, div.figure {margin-left: auto; margin-right: auto;} div.float img {text-align:center;} div.figure img {text-align:center;} -.marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;} -.marginpar p{margin-top:0.4em; margin-bottom:0.4em;} +.marginpar,.reversemarginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;} +.marginpar p,.reversemarginpar p{margin-top:0.4em; margin-bottom:0.4em;} +.reversemarginpar{float:left;} table.equation {width:100%;} .equation td{text-align:center; } td.equation { margin-top:1em; margin-bottom:1em; } @@ -149,10 +149,10 @@ div.abstract {width:100%;} .Ovalbox-thick { padding-left:3pt; padding-right:3pt; border:solid thick; } .shadowbox { padding-left:3pt; padding-right:3pt; border:solid thin; border-right:solid thick; border-bottom:solid thick; } .doublebox { padding-left:3pt; padding-right:3pt; border-style:double; border:solid thick; } -.figure img.graphics {margin-left:10%;} +.rotatebox{display: inline-block;} .lstlisting .label{margin-right:0.5em; } -div.lstlisting{font-family: monospace; white-space: nowrap; margin-top:0.5em; margin-bottom:0.5em; } -div.lstinputlisting{ font-family: monospace; white-space: nowrap; } +div.lstlisting{font-family: monospace,monospace; white-space: nowrap; margin-top:0.5em; margin-bottom:0.5em; } +div.lstinputlisting{ font-family: monospace,monospace; white-space: nowrap; } .lstinputlisting .label{margin-right:0.5em;} #TBL-1 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-1{border-collapse:collapse;} diff --git a/docs/html/userhtml.html b/docs/html/userhtml.html index 96d69556..876b4291 100644 --- a/docs/html/userhtml.html +++ b/docs/html/userhtml.html @@ -3,8 +3,8 @@ - - + + @@ -31,7 +31,7 @@ class="cmr-12">University of Rome Tor-Vergata and IAC-CNR
Software version: 1.0
April 12, 2021 +class="cmr-12">May 11th, 2021 diff --git a/docs/html/userhtml0x.png b/docs/html/userhtml0x.png index 96c5cb9beb75e4e632a48b47125e66cf3a369f55..f004430adb9751a9610cd765fec671d3449e8614 100644 GIT binary patch delta 862 zcmV-k1EKth2mA(*7YY^#1^@s6g+LL6ks%m=E=fc|R9Fe^nDI?pF%XAePzOM;LAn7I z8^8usouG6BqD~OO2G9v2x&ds^CL1&xkY0gA=c>-A1hzJxy(8|}CvN&1G11Nac0l(_qU zqNK6lkGN>RWbrqo6XGF(k0m}ACk>Q|uu)vpU3pJ*PB29%Gw7nEkua0w!gm@$?+s~Z z#8iYbgD*-Nde`s(_|7$gj-H#h{~7DFfjpE(^I@A}Ty##trcu|#Z9JaXT%dCr^|T$t zb-o~bf{&Ha?gEK2X@-x2L-HgI@v;4X$TG3<$${}hU5D`)UciTSdFmrKVHdTr`qsm1 zWzNBNPLfWSEq;iw?75+D%GUX{5ou)JVDI5N&Emk_$aVsK5qQd%)lnouecPpHiU@o} zC$mM?AlAD==#$_zG~qiw7Z`?mhVD($)i+}?e)_47r)jo)1JcmSP^KcBt=b|p z$^E*Vu}EvIQ`hOLk6$8cT`bCP+k9Jl5s+n*Q%4NLKzAi)=Fb zPi?4Y_?+FG#GYdFmqLSDk7qP;!9M*}qqJZ;ZmaXlF}A@e1esGyh3-4+-e+#K)LKGX zlZLXl$R~Cnp~?jU#YBjljW=k2RM#m>KZN3NAQ#roQLbNh(+b)75R%$zf`hBxD2TUw40~AHi zeOU_F_6gE>QXva}&!hu7f!NiM zFb1P2YHbKE9oY(lFY8aA9ww&2_wr0R2FOTO|?Y%(oRTcnNgYfzNw|3c6J%>14!9lg^4jNdnD-1ruPk zA>`)ca-F#+;>X=?$&az}w1Z-^1U~i;v2-nvy|!rQL_mSwG;QYX@$*sZ5V8QvZ6TT-i==tIr6 z_^qlQb|=z^B$IFXi81R^oQhX(5gGn1qtLIR=Dn&xrNV5>*OIry_=b0c^L^X4S%@Gg zWwiSn`@`3AEk!|-=vdLAR`p|JvmRq)Op*^Vj~<@6D-{TOb#;;{Jac7#wUmdRm+G;@ z&yADvec8Uw=Y}@ZQo(2d$xJIao{UM-J(8h)g>0&@tP7GawMhJc zf1i0wliu5!UKdwIIR!*kQPVFApcu3WIfFouFGdKo7B`dm2nh1le38v+4S`Lh)lli- z5oM;Z$4#X50Mx@iN_l#d(|X{UVH0H*fqU?p`~}DbB-Ei%jfMaK002ovPDHLkV1f?3 Bt2Y1u diff --git a/docs/html/userhtml1x.png b/docs/html/userhtml1x.png index 4c10c20075b681e0d62521cc8482758089c58c31..20f909a776854ab70e034e7242792bd12175c9e3 100644 GIT binary patch delta 2025 zcmVzd6=ZM+ zI29zg1Dpyl?f}oEfY@|EzMs&y(du^hw0pNVw|L)-PSTU~{y#}8*t@^K|6zvRvcTTn z-i0K3F5f)aEy<=W&6MoAKW$S#TIr9Z*^vV2;L&Or6_bv~Du1_I(seR+T|9QjPfxvQ%q{JfMb7IxY09$q)pghB@2W2b$rZmbPh|94 z6+SpAH!9~U2aLO@f2G2_H!7DZ-&DYH<>I?2^gTbVH3kppn*OQU&@j)-bbd)&Yo90U zq4Uk_)J|zLc7N_M*TNyQ^+vW+kGU2Ooh)OZuReUO3uDkY@*3B|VMEjRyuj0QTx(t~ zFMMnE_gvSEt5^r-L*v-vu7$(a$U$K~Clr1|Ce~ee?z**Tt<+g_j#X^aw)!TQMQeKd zLTifbs(EYKNb5Hm-y!J|g%OT|^X#-LIO3R%gOf>6&wm3?pSqR=5zjn~1pPE9=!0K! zMDCcTzSenDAyIfRu}(POdcdPf9NH>Q80L7R2{M`nwE+5-5d?up9THi!ZE%vUbK;tQ z%0pBC-|!+Ien1i zKhCS+BM)R!v!0k~U*iNVe3sUGp2mXxR971(V}EV)c&Z#wJnFwaUA>|Mg7ll66+Aw z@GLgitx}+Wp!+utT^IfofhJnW&R7NF2M(UE6CJ|1`tQ_0pWgza`R9w~y-kM_-HpZu zK!20%(7R^qFtf)`v>CL~0eMq+sSfr(OOaW-CcnmzmyLKG7**#M!AgA5vUDZ7)JCJk z_aYTf4rfQKROD@gMVCST7+cPH8;`MGKmgbnUmg?|l=Hf0@f!Y|Q@ys<&shQ}tF`>V;vz2w`1 z&Q0>H^hML60$d*(jS}DC#8mK{s&KXAnnhCLaFq5bsAdgF#uV~?I_BVECr=@qN^)o$ zk92NH`!7vmV==&w9W@U^8xmc)4(6pRDWP2?ulTa#K2 z$0MUCJW0xFT*D)6c`%Bi1$M?P% zg_BGSUbHwlmt{zwBqT`)Of~@$lue*1aWvE)L<{2(q$e^Id^j0v-iE?y$En3J79u- z59r2U{@)dQk}T+nT{(^6%{ONS2_JBNpn4@dbAg-}Hy!@$W54~YHh-ru^Yc#<>ZIa7P|4lmAZQ%)Y=n)j?XByN?JR+Yi8^Npg zPXlocw#7fJg*LpF^cF7lll5R73F^M4erYo%z92il1Ud=mT@@v3&>xI=N;a&q9*@E9XJZGWz!U2rX0V_b#1cz#!7 zvmeUbJyv{oo<82uhSpMz-Gt0v`cE3uOy-0gPyMEyE8Q7s58BnubFRB@9oT2~Ly?U} zi|~ven#s!{ry?(|0S)tzCsz_ctdMtuJV`bX-;Unwrf00000NkvXX Hu0mjfqcz}c delta 2067 zcmV+u2<-Qa5Va7HIe+I#L_t(|0qvUYk<~U7hS{AhfNVN|4#=hgNC!(&L7;n70QsFC33LFdAh0tjfV_{;YmQ`J+t=6LxtI9NXeFI5oi9nY?;d^r{Q24n`xSws zqob#?=#Fx8bH6M*Y-TlNiGkJDHg>?O!^)NdoAAfJDy}u$~4<@eb#@xfo z*G>6@%=%9K(JdaH~m86mwEm=>)^cz`djnIUU;uz{da^zPop#Pj~Qp3=yO9?vRVD>fQSCH z)+ro5zR!H{-+zldn)4`W-SnTJ3vQ^{f7V2{h*jppzZh56B2Mq)I+?e&xACRs^_(@W zPd)tDbjx)2!eNK~fCu}%9&)YNSa#c9x(0m~54pEJoBAR~;-8cY$=Oe@(-~Ls?Gz)) z&syJU(@81DVmO70ffNt(!ih{XFLaV@zBqpz6Dpp2nSak4-kZTP;EO~=`AuWVkSuhg z4;{_M(wOAiK748lR$~g&Ho$}5$YW1Yq?)6jW?lA$I1net>O9&hy!BZ>Ycxd?c^M0Q zP+_arYHaS{k3L{SJY;HH&^qS)$5I!2VK2Bi_dwBzPk3n(Fz}OjJD2& z^o)vY=6{+0ZGA9S>rV1n>pHH5A5nKb4l?-i zGSW3Ka#7PnM`kFlTg52roVC7-qKQs07LfcRVKq*3He$0WG)^amb!pCtg|ebZH6JWK z>lo^#%SBNHTzCriBFbxSdkVaHM90=5+0XuJ{dKEV=z&(`YhtFaKbrQy*^jL=dXyFqw`yz@w1cf-3r5+ib$=g7 zlAk@Eshz6vB=K6Y{-nk&u?wJ=*l`$j0r}W;xa_<)s-~eu$7}-$7SLNQY)PjX-zn?<9zcLM4BAU$mM3-!FqFmBe|NqH&E;c`!F@JK{pIb_%rHDCk4 z!LX^Y`x4VfON#j;JNOXA`c7PYDt~z@`bW|0+q{t<7$hI0gZIQPAJ~+m>>OBUEApH^ zOPBN5XTz2ISQ|sF$=2EHn@3r0MxS=|x^vBW^dg9C9>X&^#jP?6NS7aH&vT%-^1;qv4 zG6c@^^eJ0&bfC}px_^gOd}_v~sZF}DtM&U{mp<{~BmB0X7&M>lH6|{#y>Z_9X&}eb zK66NMs9_Is^u-#sEAT}9aoqg#M3BKg4m)CqZq_P(GRpSEJXxm?G0)w%e)siyeZAJ* z+Gp#-=4?AQI7ZFytl5XDxp3_5U)`s;YTZdOlAQgn^?E+3zJHIh)6%~T=rp15G5)sJ z;$})9Jb^w_BOoN^rs%v#b9&!Z>jQpUJ%o3UJ|Fg)w&r16dX}p1$u|=ldZ@`YHY6uU z?~N!rr&_vw)OVd+K7HIzI@O2lUFlzQy5`|)EH>4JVzgL&A4~a?z^w@My@x^Pee-(; z3Ibo^xXJrk^M4MA%nI{IV9mp*m@Zb|i*8IMmq*u2HNJq_iNa&yxgj}uUKE6NvPNLf zBd}zB^Hp|fxUB_#SK~ik_?hC*ykPu7$t~Hue`fmHtr0kc2rN?Hi+}tfviY{;i!Hw| xayxQ+`g1t{Y(4a-EA|!E2<&GBmZ Abstract - - + + diff --git a/docs/html/userhtmlli2.html b/docs/html/userhtmlli2.html index 02c13fb5..1d6a77b7 100644 --- a/docs/html/userhtmlli2.html +++ b/docs/html/userhtmlli2.html @@ -3,8 +3,8 @@ Contents - - + + diff --git a/docs/html/userhtmlli3.html b/docs/html/userhtmlli3.html index a102ce70..e358a8db 100644 --- a/docs/html/userhtmlli3.html +++ b/docs/html/userhtmlli3.html @@ -3,8 +3,8 @@ Contributors - - + + diff --git a/docs/html/userhtmlli4.html b/docs/html/userhtmlli4.html index dba92584..2a339025 100644 --- a/docs/html/userhtmlli4.html +++ b/docs/html/userhtmlli4.html @@ -3,8 +3,8 @@ Citing AMG4PSBLAS - - + + @@ -32,24 +32,23 @@ class="cmr-12">When use the library, please cite the following: -

+
 @article{DDF2021,
- 
       author = {D’Ambra, Pasqua and Durastante, Fabio and Filippone, Salvatore}, - 
       title = {{{AMG Preconditioners for Linear Solvers towards Extreme Scale}}, - 
       journal = {arXiv e-preprints}, - 
       eprint = {2006.16147v3}, - 
       archivePrefix = {arXiv}, - 
       year={2021} - 
     } - 

@Misc{psctoolkit-web-page, - 
       author = {D’Ambra, Pasqua and Durastante, Fabio and Filippone, Salvatore}, - 
       title =  {{PSCToolkit} {W}eb page}, - 
       url =    {https://psctoolkit.github.io/}, - 
       howpublished = {\url{https://psctoolkit.github.io/}}, - 
       year = {2021} - 
     } -
+       author = {D’Ambra, Pasqua and Durastante, Fabio and Filippone, Salvatore}, +       title = {{{AMG Preconditioners for Linear Solvers towards Extreme Scale}}, +       journal = {arXiv e-preprints}, +       eprint = {2006.16147v3}, +       archivePrefix = {arXiv}, +       year={2021} +     } +@Misc{psctoolkit-web-page, +       author = {D’Ambra, Pasqua and Durastante, Fabio and Filippone, Salvatore}, +       title =  {{PSCToolkit} {W}eb page}, +       url =    {https://psctoolkit.github.io/}, +       howpublished = {\url{https://psctoolkit.github.io/}}, +       year = {2021} +     } +

diff --git a/docs/html/userhtmlli5.html b/docs/html/userhtmlli5.html index fbb1075a..d712d8cf 100644 --- a/docs/html/userhtmlli5.html +++ b/docs/html/userhtmlli5.html @@ -3,8 +3,8 @@ References - - + + @@ -211,7 +211,7 @@ class="cmr-12"> Pothen, Distributed-memory parallel algorithms for matching and coloring, in PCO11 New Trends in Parallel Computing and Optimization, +class="cmr-12">, in PCO’11 New Trends in Parallel Computing and Optimization, IEEE International Symposium on Parallel and Distributed Processing General Overview - - + + diff --git a/docs/html/userhtmlse2.html b/docs/html/userhtmlse2.html index 02fa5af2..03862797 100644 --- a/docs/html/userhtmlse2.html +++ b/docs/html/userhtmlse2.html @@ -3,8 +3,8 @@ Code Distribution - - + + diff --git a/docs/html/userhtmlse3.html b/docs/html/userhtmlse3.html index c806825f..3184abfd 100644 --- a/docs/html/userhtmlse3.html +++ b/docs/html/userhtmlse3.html @@ -3,8 +3,8 @@ Configuring and Building AMG4PSBLAS - - + + diff --git a/docs/html/userhtmlse4.html b/docs/html/userhtmlse4.html index c981fd8d..0a78b57d 100644 --- a/docs/html/userhtmlse4.html +++ b/docs/html/userhtmlse4.html @@ -3,8 +3,8 @@ Getting Started - - + + @@ -243,7 +243,7 @@ class="cmcsc-10x-x-109">type e

string g

der




No preconditioner No preconditioner

NONE

Considered to use the PSBLAS Krylov solvers with no preconditioner.




Diagonal Diagonal

DIAGL1-JACOBI

Diagonal preconditioner. For any zero diagonal entry of the matrix to be preconditioned, the corresponding entry @@ -309,7 +309,7 @@ of the preconditioner is set to 1.




Gauss-Seidel Gauss-Seidel

GSL1-GS

Hybrid Gauss-Seidel (forward), that is, global block Jacobi with Gauss-Seidel as local solver.




Symmetrized Gauss-SeidelSymmetrized Gauss-Seidel

FBGSL1-FBGS

Symmetrized hybrid Gauss-Seidel, that is, forward Gauss-Seidel followed by backward Gauss-Seidel.




Block Jacobi Block Jacobi

BJACL1-BJAC

Block-Jacobi with ILU(0) on the local blocks.




Additive Schwarz Additive Schwarz

AS

Additive Schwarz (AS), with overlap 1 and ILU(0) on the local blocks.




Multilevel Multilevel

ML

V-cycle with one hybrid forward Gauss-Seidel (GS) sweep as pre-smoother and one hybrid backward diff --git a/docs/html/userhtmlse5.html b/docs/html/userhtmlse5.html index d4546966..a7e1fb0e 100644 --- a/docs/html/userhtmlse5.html +++ b/docs/html/userhtmlse5.html @@ -3,8 +3,8 @@ User Interface - - + + diff --git a/docs/html/userhtmlse6.html b/docs/html/userhtmlse6.html index 947c0d37..01eb6d6c 100644 --- a/docs/html/userhtmlse6.html +++ b/docs/html/userhtmlse6.html @@ -3,8 +3,8 @@ Adding new smoother and solver objects to AMG4PSBLAS - - + + @@ -170,33 +170,33 @@ cellspacing="0" cellpadding="0" >

smoother smoother

class(amg_x_base_smoother_type)

The user-defined new smoother to be employed in the preconditioner.

solver solver

class(amg_x_base_solver_type)

The user-defined new solver to be employed in the preconditioner.

pass it as follows: -


  ! sparse matrix and preconditioner - 
  type(psb_dspmat_type) :: a - 
  type(amg_dprec_type)  :: prec - 
  type(amg_d_tlu_solver_type) :: tlusv - 

...... - 
  ! - 
  !  prepare the preconditioner: an ML with defaults, but with TLU solver at - 
  !  intermediate levels. All other parameters are at default values. - 
  ! - 
  call prec%init(’ML’,       info) - 
  call prec%hierarchy_build(a,desc_a,info) - 
  nlv = prec%get_nlevs() - 
  call prec%set(tlusv,   info,ilev=1,ilmax=max(1,nlv-1)) - 
  call prec%smoothers_build(a,desc_a,info) - 
-
+
+  ! sparse matrix and preconditioner
+  type(psb_dspmat_type) :: a
+  type(amg_dprec_type)  :: prec
+  type(amg_d_tlu_solver_type) :: tlusv
+......
+  !
+  !  prepare the preconditioner: an ML with defaults, but with TLU solver at
+  !  intermediate levels. All other parameters are at default values.
+  !
+  call prec%init(’ML’,       info)
+  call prec%hierarchy_build(a,desc_a,info)
+  nlv = prec%get_nlevs()
+  call prec%set(tlusv,   info,ilev=1,ilmax=max(1,nlv-1))
+  call prec%smoothers_build(a,desc_a,info)
+

diff --git a/docs/html/userhtmlse7.html b/docs/html/userhtmlse7.html index 8c41cbde..df4dc649 100644 --- a/docs/html/userhtmlse7.html +++ b/docs/html/userhtmlse7.html @@ -3,8 +3,8 @@ Error Handling - - + + diff --git a/docs/html/userhtmlse8.html b/docs/html/userhtmlse8.html index 4e50b15d..76b8561f 100644 --- a/docs/html/userhtmlse8.html +++ b/docs/html/userhtmlse8.html @@ -3,8 +3,8 @@ License - - + + @@ -36,42 +36,37 @@ class="cmr-12">AMG4PSBLAS is freely distributable under the following copyright -


                           AMG4PSBLAS  version 1.0 - 
              Algebraic MultiGrid Preconditioners Package - 
             based on PSBLAS (Parallel Sparse BLAS version 3.7) - 

  (C) Copyright 2021 - 

  Pasqua D’Ambra         IAC-CNR, IT - 
  Fabio Durastante       University of Pisa and IAC-CNR, IT - 
  Salvatore Filippone    University of Rome Tor-Vergata and IAC-CNR, IT - 

  Redistribution and use in source and binary forms, with or without - 
  modification, are permitted provided that the following conditions - 
  are met: - 
    1. Redistributions of source code must retain the above copyright - 
       notice, this list of conditions and the following disclaimer. - 
    2. Redistributions in binary form must reproduce the above copyright - 
       notice, this list of conditions, and the following disclaimer in the - 
       documentation and/or other materials provided with the distribution. - 
    3. The name of the MLD2P4 group or the names of its contributors may - 
       not be used to endorse or promote products derived from this - 
       software without specific written permission. - 

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

@@ -83,46 +78,39 @@ class="cmr-12">abide by its terms: -



                           MLD2P4  version 2.2 - 
  MultiLevel Domain Decomposition Parallel Preconditioners Package - 
             based on PSBLAS (Parallel Sparse BLAS version 3.5) - 

  (C) Copyright 2008-2018 - 

      Salvatore Filippone - 
      Pasqua D’Ambra - 
      Daniela di Serafino - 


  Redistribution and use in source and binary forms, with or without - 
  modification, are permitted provided that the following conditions - 
  are met: - 
    1. Redistributions of source code must retain the above copyright - 
       notice, this list of conditions and the following disclaimer. - 
    2. Redistributions in binary form must reproduce the above copyright - 
       notice, this list of conditions, and the following disclaimer in the - 
       documentation and/or other materials provided with the distribution. - 
    3. The name of the MLD2P4 group or the names of its contributors may - 
       not be used to endorse or promote products derived from this - 
       software without specific written permission. - 

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

AMG4PSBLAS is distributed together with (a small part) of the graph-matching +class="cmr-12">AMG4PSBLAS is distributed together with (a small part of) the graph-matching @@ -133,54 +121,54 @@ class="cmr-12">[9]. Per the license requirements, we reproduce the relative part +class="cmr-12">. Per the license requirements, we reproduce the relevant part here. -

+
 // ***********************************************************************
- 
// - 
//        MatchboxP: A C++ library for approximate weighted matching - 
//               Mahantesh Halappanavar (hala@pnnl.gov) - 
//               Pacific Northwest National Laboratory - 
// - 
// *********************************************************************** - 
// - 
//       Copyright (2021) Battelle Memorial Institute - 
//                      All rights reserved. - 
// - 
// Redistribution and use in source and binary forms, with or without - 
// modification, are permitted provided that the following conditions - 
// are met: - 
// - 
// 1. Redistributions of source code must retain the above copyright - 
// notice, this list of conditions and the following disclaimer. - 
// - 
// 2. Redistributions in binary form must reproduce the above copyright - 
// notice, this list of conditions and the following disclaimer in the - 
// documentation and/or other materials provided with the distribution. - 
// - 
// 3. Neither the name of the copyright holder nor the names of its - 
// contributors may be used to endorse or promote products derived from - 
// this software without specific prior written permission. - 
// - 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - 
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - 
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - 
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - 
// COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - 
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - 
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - 
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - 
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - 
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - 
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - 
// POSSIBILITY OF SUCH DAMAGE. - 
// - 
// ************************************************************************ -
+// +//        MatchboxP: A C++ library for approximate weighted matching +//               Mahantesh Halappanavar (hala@pnnl.gov) +//               Pacific Northwest National Laboratory +// +// *********************************************************************** +// +//       Copyright (2021) Battelle Memorial Institute +//                      All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +// ************************************************************************ +

diff --git a/docs/html/userhtmlse9.html b/docs/html/userhtmlse9.html index dc508773..3db740b8 100644 --- a/docs/html/userhtmlse9.html +++ b/docs/html/userhtmlse9.html @@ -3,8 +3,8 @@ Contributor Covenant Code of Conduct - - + + @@ -91,7 +91,7 @@ class="cmr-12">Trolling, insulting or derogatory comments, and personal or polit class="cmr-12">Public or private harassment

  • Publishing others private information, such as a physical or email address, +class="cmr-12">Publishing others’ private information, such as a physical or email address, without their explicit permission
  • @@ -234,7 +234,7 @@ class="cmr-12">_of_conduct .html. Community Impact Guidelines were inspired by Mozillas code of conduct +class="cmr-12">. Community Impact Guidelines were inspired by Mozilla’s code of conduct enforcement ladder. For answers to common questions about this code of conduct, see Prerequisites - - + + diff --git a/docs/html/userhtmlsu10.html b/docs/html/userhtmlsu10.html index 86ef89f6..00a465ed 100644 --- a/docs/html/userhtmlsu10.html +++ b/docs/html/userhtmlsu10.html @@ -3,8 +3,8 @@ Method hierarchy_build - - + + @@ -68,9 +68,9 @@ cellspacing="0" cellpadding="0" >

    a a

    type(in).

    The sparse matrix structure containing the local part of the matrix 20].

    desc_adesc_a

    type(in).

    The communication descriptor of a20].

    info info

    integer,out).

    Error code. If no error, 0 is returned. See Section 7 for details. diff --git a/docs/html/userhtmlsu11.html b/docs/html/userhtmlsu11.html index 67cc3b6e..08501195 100644 --- a/docs/html/userhtmlsu11.html +++ b/docs/html/userhtmlsu11.html @@ -3,8 +3,8 @@ Method smoothers_build - - + + @@ -82,9 +82,9 @@ cellspacing="0" cellpadding="0" >

    a a

    type(in).

    The sparse matrix structure containing the local part of the matrix 20].

    desc_adesc_a

    type(in).

    The communication descriptor of a20].

    info info

    integer,out).

    Error code. If no error, 0 is returned. See Section 7 for details.

    amold amold

    class( optional.

    The desired dynamic type for internal matrix components; this 20].

    vmold vmold

    class( optional.

    The desired dynamic type for internal vector components; this allows e.g. running on GPUs.

    imold imold

    class( optional.

    The desired dynamic type for internal integer vector components; this allows e.g. running on GPUs. diff --git a/docs/html/userhtmlsu12.html b/docs/html/userhtmlsu12.html index a29d4019..32e905c0 100644 --- a/docs/html/userhtmlsu12.html +++ b/docs/html/userhtmlsu12.html @@ -3,8 +3,8 @@ Method build - - + + @@ -90,9 +90,9 @@ cellspacing="0" cellpadding="0" >

    a a

    type(in).

    The sparse matrix structure containing the local part of the matrix 20].

    desc_adesc_a

    type(in).

    The communication descriptor of a20].

    info info

    integer,out).

    Error code. If no error, 0 is returned. See Section 7 for details.

    amold amold

    class( optional.

    The desired dynamic type for internal matrix components; this 20].

    vmold vmold

    class( optional.

    The desired dynamic type for internal vector components; this allows e.g. running on GPUs.

    imold imold

    class( optional.

    The desired dynamic type for internal integer vector components; this allows e.g. running on GPUs.

    The method can be used to build multilevel preconditioners too. diff --git a/docs/html/userhtmlsu13.html b/docs/html/userhtmlsu13.html index 0a54ef74..6f194dd5 100644 --- a/docs/html/userhtmlsu13.html +++ b/docs/html/userhtmlsu13.html @@ -3,8 +3,8 @@ Method apply - - + + @@ -96,9 +96,9 @@ cellspacing="0" cellpadding="0" >

    x x

    type(kind_parameter), dimension(:), intent(in)—.

    The local part of the vector x, single/double precision version of AMG4PSBLAS under use.

    y y

    type(kind_parameter), dimension(:), intent(out)—.

    The local part of the vector y, single/double precision version of AMG4PSBLAS under use.

    desc_adesc_a

    type(in).

    The communication descriptor associated to the matrix to be preconditioned.

    info info

    integer,out).

    Error code. If no error, 0 is returned. See Section 7 for details.

    trans trans

    character((in).

    If trans -1).

    work work

    type(kind_parameter), dimension(:), optional, target—.

    Workspace. Its size should be at least 4, single/double precision version of AMG4PSBLAS under use. diff --git a/docs/html/userhtmlsu14.html b/docs/html/userhtmlsu14.html index bb0aa353..9dab129c 100644 --- a/docs/html/userhtmlsu14.html +++ b/docs/html/userhtmlsu14.html @@ -3,8 +3,8 @@ Method free - - + + @@ -57,9 +57,9 @@ cellspacing="0" cellpadding="0" >

    info info

    integer,out).

    Error code. If no error, 0 is returned. See Section for details. diff --git a/docs/html/userhtmlsu15.html b/docs/html/userhtmlsu15.html index 12056e79..8c3cfa76 100644 --- a/docs/html/userhtmlsu15.html +++ b/docs/html/userhtmlsu15.html @@ -3,8 +3,8 @@ Method descr - - + + @@ -75,9 +75,9 @@ cellspacing="0" cellpadding="0" >

    info info

    integer,out).

    Error code. If no error, 0 is returned. See Section 7 for details.

    iout iout

    integer, optional.

    The id of the file where the preconditioner description will be printed; the default is the standard output.

    root root

    integer, optional.

    The id of the process where the preconditioner description will be printed; the default is psb_root_.

    verbosity verbosity

    integer, optional.

    The verbosity level of the description. Default value is 0. For a distributed multilevel preconditioner the size of the coarsematrices on every process. diff --git a/docs/html/userhtmlsu16.html b/docs/html/userhtmlsu16.html index 6f922637..6b6ab93f 100644 --- a/docs/html/userhtmlsu16.html +++ b/docs/html/userhtmlsu16.html @@ -3,8 +3,8 @@ Auxiliary Methods - - + + @@ -77,9 +77,9 @@ cellspacing="0" cellpadding="0" >

    info info

    integer,out).

    Error code. If no error, 0 is returned. See Section 7 for details.

    amold amold

    class( optional.

    The desired dynamic type for internal matrix components; this 20].

    pout pout

    type(out).

    The copy of the preconditioner data structure. Note that x , single/double precision version of AMG4PSBLAS under use.

    info info

    integer,out).

    Error code. If no error, 0 is returned. See Section 7 for details.

    global global

    logical, optional.

    Whether the global or local preconditioner memory occupation is false.. Return memory footprint in bytes. @@ -333,9 +333,9 @@ cellspacing="0" cellpadding="0" >

    info info

    integer,out).

    Error code. If no error, 0 is returned. See Section 7 for details.

    vmold vmold

    class( optional.

    The desired dynamic type for internal vector components; this allows e.g. running on GPUs.

    info info

    integer,out).

    Error code. If no error, 0 is returned. See Section 7 for details. diff --git a/docs/html/userhtmlsu2.html b/docs/html/userhtmlsu2.html index 082299c8..bccb1ca7 100644 --- a/docs/html/userhtmlsu2.html +++ b/docs/html/userhtmlsu2.html @@ -3,8 +3,8 @@ Optional third party libraries - - + + diff --git a/docs/html/userhtmlsu3.html b/docs/html/userhtmlsu3.html index efa45195..98612f6f 100644 --- a/docs/html/userhtmlsu3.html +++ b/docs/html/userhtmlsu3.html @@ -3,8 +3,8 @@ Configuration options - - + + @@ -42,9 +42,9 @@ class="cmr-12">As a minimal example consider the following: -

    +
     ./configure --with-psblas=PSB-INSTALL-DIR
    -
    +

    which assumes that the various MPI compilers and support libraries are available in  ‘--prefix=$HOME$HOME’. 
    might be configured with: -

    +
     ./configure --with-psblas=/opt/psblas-3.7/ \
    - 
    --with-umfpackincdir=/usr/include/suitesparse/ -
    +--with-umfpackincdir=/usr/include/suitesparse/ +

    Once the configure script has completed execution, it will have generated the file To build the library the user will now enter -

    +
     make
    -
    +

    followed (optionally) by -

    +
     make install
    -
    +

    diff --git a/docs/html/userhtmlsu4.html b/docs/html/userhtmlsu4.html index ffe106f5..8146ab12 100644 --- a/docs/html/userhtmlsu4.html +++ b/docs/html/userhtmlsu4.html @@ -3,8 +3,8 @@ Bug reporting - - + + diff --git a/docs/html/userhtmlsu5.html b/docs/html/userhtmlsu5.html index 4c715b88..34dcb5bc 100644 --- a/docs/html/userhtmlsu5.html +++ b/docs/html/userhtmlsu5.html @@ -3,8 +3,8 @@ Example and test programs - - + + diff --git a/docs/html/userhtmlsu6.html b/docs/html/userhtmlsu6.html index 9c5fa760..c0eb1e37 100644 --- a/docs/html/userhtmlsu6.html +++ b/docs/html/userhtmlsu6.html @@ -3,8 +3,8 @@ Examples - - + + @@ -131,59 +131,58 @@ class="cmr-12">. -

    +
       use psb_base_mod
    - 
      use amg_prec_mod - 
      use psb_krylov_mod - 
    ... ... - 
    ! - 
    ! sparse matrix - 
      type(psb_dspmat_type) :: A - 
    ! sparse matrix descriptor - 
      type(psb_desc_type)   :: desc_A - 
    ! preconditioner - 
      type(amg_dprec_type)  :: P - 
    ! right-hand side and solution vectors - 
      type(psb_d_vect_type) :: b, x - 
    ... ... - 
    ! - 
    ! initialize the parallel environment - 
      call psb_init(ctxt) - 
      call psb_info(ctxt,iam,np) - 
    ... ... - 
    ! - 
    ! read and assemble the spd matrix A and the right-hand side b - 
    ! using PSBLAS routines for sparse matrix / vector management - 
    ... ... - 
    ! - 
    ! initialize the default multilevel preconditioner, i.e. V-cycle - 
    ! with basic smoothed aggregation, 1 hybrid forward/backward - 
    ! GS sweep as pre/post-smoother and UMFPACK as coarsest-level - 
    ! solver - 
      call P%init(’ML’,info) - 
    ! - 
    ! build the preconditioner - 
      call P%hierarchy_build(A,desc_A,info) - 
      call P%smoothers_build(A,desc_A,info) - 

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

    @@ -292,19 +291,19 @@ class="cmr-12">.

    -

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


    Listing 2: setup of a multilevel preconditioner based on the default decoup

    -

    +
     ... ...
    - 
    ! build a W-cycle preconditioner with 2 hybrid Gauss-Seidel sweeps - 
    ! as pre- and post-smoother, a distributed coarsest - 
    ! matrix, and MUMPS as coarsest-level solver - 
      call P%init(’ML’,info) - 
      call P%set(’PAR_AGGR_ALG’,’COUPLED’,info) - 
    call P%set(’AGGR_TYPE’,’MATCHBOXP’,info) - 
    call P%set(’AGGR_SIZE’,8,info) - 
      call P%set(’ML_CYCLE’,’WCYCLE’,info) - 
      call P%set(’SMOOTHER_TYPE’,’FBGS’,info) - 
      call P%set(’SMOOTHER_SWEEPS’,2,info) - 
      call P%set(’COARSE_SOLVE’,’KRM’,info) - 
      call P%hierarchy_build(A,desc_A,info) - 
      call P%smoothers_build(A,desc_A,info) - 
    ... ... -
    +! build a W-cycle preconditioner with 2 hybrid Gauss-Seidel sweeps +! as pre- and post-smoother, a distributed coarsest +! matrix, and MUMPS as coarsest-level solver +  call P%init(’ML’,info) +  call P%set(’PAR_AGGR_ALG’,’COUPLED’,info) +call P%set(’AGGR_TYPE’,’MATCHBOXP’,info) +call P%set(’AGGR_SIZE’,8,info) +  call P%set(’ML_CYCLE’,’WCYCLE’,info) +  call P%set(’SMOOTHER_TYPE’,’FBGS’,info) +  call P%set(’SMOOTHER_SWEEPS’,2,info) +  call P%set(’COARSE_SOLVE’,’KRM’,info) +  call P%hierarchy_build(A,desc_A,info) +  call P%smoothers_build(A,desc_A,info) +... ... +


    Listing 3:

    -

    +
     ... ...
    - 
    ! set RAS with overlap 2 and ILU(0) on the local blocks - 
      call P%init(’AS’,info) - 
      call P%set(’SUB_OVR’,2,info) - 
      call P%bld(A,desc_A,info) - 
    ... ... - 
    ! solve Ax=b with preconditioned BiCGSTAB - 
      call psb_krylov(’BICGSTAB’,A,P,b,x,tol,desc_A,info) -
    +! set RAS with overlap 2 and ILU(0) on the local blocks +  call P%init(’AS’,info) +  call P%set(’SUB_OVR’,2,info) +  call P%bld(A,desc_A,info) +... ... +! solve Ax=b with preconditioned BiCGSTAB +  call psb_krylov(’BICGSTAB’,A,P,b,x,tol,desc_A,info) +


    Listing 4: GPU example - - + + @@ -52,24 +52,23 @@ class="cmr-12">variables:

    -

    +
     program amg_dexample_gpu
    - 
      use psb_base_mod - 
      use amg_prec_mod - 
      use psb_krylov_mod - 
      use psb_util_mod - 
      use psb_gpu_mod - 
      use data_input - 
      use amg_d_pde_mod - 
      implicit none - 
      ....... - 
      ! GPU variables - 
      type(psb_d_hlg_sparse_mat) :: agmold - 
      type(psb_d_vect_gpu)       :: vgmold - 
      type(psb_i_vect_gpu)       :: igmold - 

      -
    +  use psb_base_mod +  use amg_prec_mod +  use psb_krylov_mod +  use psb_util_mod +  use psb_gpu_mod +  use data_input +  use amg_d_pde_mod +  implicit none +  ....... +  ! GPU variables +  type(psb_d_hlg_sparse_mat) :: agmold +  type(psb_d_vect_gpu)       :: vgmold +  type(psb_i_vect_gpu)       :: igmold +  +


    Listing 5: guides).

    -

    +
       call psb_init(ctxt)
    - 
      call psb_info(ctxt,iam,np) - 
      ! - 
      ! BEWARE: if you have NGPUS  per node, the default is to - 
      ! attach to mod(IAM,NGPUS) - 
      ! - 
      call psb_gpu_init(ictxt) - 
      ...... - 
      t1 = psb_wtime() - 
      call prec%smoothers_build(a,desc_a,info, amold=agmold, vmold=vgmold, imold=igmold) - 

      -
    +  call psb_info(ctxt,iam,np) +  ! +  ! BEWARE: if you have NGPUS  per node, the default is to +  ! attach to mod(IAM,NGPUS) +  ! +  call psb_gpu_init(ictxt) +  ...... +  t1 = psb_wtime() +  call prec%smoothers_build(a,desc_a,info, amold=agmold, vmold=vgmold, imold=igmold) +  +


    Listing 6: GPU environment

    -

    +
       call desc_a%cnv(mold=igmold)
    - 
      call a%cscnv(info,mold=agmold) - 
      call psb_geasb(x,desc_a,info,mold=vgmold) - 
      call psb_geasb(b,desc_a,info,mold=vgmold) - 

      ! - 
      ! iterative method parameters - 
      ! - 
      call psb_barrier(ctxt) - 
      call prec%allocate_wrk(info) - 
      t1 = psb_wtime() - 
      call psb_krylov(s_choice%kmethd,a,prec,b,x,s_choice%eps,& - 
           & desc_a,info,itmax=s_choice%itmax,iter=iter,err=err,itrace=s_choice%itrace,& - 
           & istop=s_choice%istopc,irst=s_choice%irst) - 
      call prec%deallocate_wrk(info) - 
      call psb_barrier(ctxt) - 
      tslv = psb_wtime() - t1 - 

      ...... - 
      call psb_gpu_exit() - 
      call psb_exit(ctxt) - 
      stop - 

      -
    +  call a%cscnv(info,mold=agmold) +  call psb_geasb(x,desc_a,info,mold=vgmold) +  call psb_geasb(b,desc_a,info,mold=vgmold) +  ! +  ! iterative method parameters +  ! +  call psb_barrier(ctxt) +  call prec%allocate_wrk(info) +  t1 = psb_wtime() +  call psb_krylov(s_choice%kmethd,a,prec,b,x,s_choice%eps,& +       & desc_a,info,itmax=s_choice%itmax,iter=iter,err=err,itrace=s_choice%itrace,& +       & istop=s_choice%istopc,irst=s_choice%irst) +  call prec%deallocate_wrk(info) +  call psb_barrier(ctxt) +  tslv = psb_wtime() - t1 +  ...... +  call psb_gpu_exit() +  call psb_exit(ctxt) +  stop +  +


    Listing 7: Method init - - + + @@ -54,9 +54,9 @@ cellspacing="0" cellpadding="0" >

    contxt contxt

    type(in).

    The communication context.

    ptype ptype

    character(in) .

    The type of preconditioner. Its values are specified in Table 1.

    Note that strings are case insensitive.

    info info

    integer,out).

    Error code. If no error, 0 is returned. See Section 7 for details.

    diff --git a/docs/html/userhtmlsu9.html b/docs/html/userhtmlsu9.html index adf16539..c276983a 100644 --- a/docs/html/userhtmlsu9.html +++ b/docs/html/userhtmlsu9.html @@ -3,8 +3,8 @@ Method set - - + + @@ -79,9 +79,9 @@ cellspacing="0" cellpadding="0" >

    what what

    character(len=*).

    The parameter to be set. It can be specified through its name; the 8.

    val   

    integer or in).

    The value of the parameter to be set. The list of allowed values and len=*), it is also treated as case insensitive.

    info info

    integer,out).

    Error code. If no error, 0 is returned. See Section 7 for details.

    ilev ilev

    integer,in).

    For the multilevel preconditioner, the level at which the 8).

    ilmax ilmax

    integer,in).

    For the multilevel preconditioner, when both ilev The levels are numbered in increasing order starting from the fin one, i.e., level 1 is the finest level.

    pos pos

    character(in).

    Whether the other arguments apply only to the pre-smoother not concern the smoothers, class="cmtt-12">pos is ignored.

    idx idx

    integer,in).

    An auxiliary input argument that can be passed to the underlying






    what a type e

    val val

    dfault t

    cnts






    ML_CYCLE

    character(len=*) =*)

    VCYCLE

    ADD

    VCYCLE

    Multilevel cycle: V-cycle, W-cycle, K-cycle, and additive composition.






    CYCLE_SWEEPS

    integer integer

    Any integer

    number 1

    1 ≥ 1

    1

    Number of multilevel cycles.







    Table 2:




    what a type e

    val val

    dfault t

    cnts






    MIN_COARSE_SIZE_PER_PROCESS

    integer integer

    Any number

    > 0

    200 > 0

    200

    Coarse size threshold per process. The aggregation stops if the global number of variables of the computed coarsest matrix @@ -736,17 +736,17 @@ multiplied by the number of processes (see Note).






    MIN_COARSE_SIZE

    integer integer

    Any number

    > 0

    -1 > 0

    -1

    Coarse size threshold. The aggregation stops if the global number of variables of the computed coarsest matrix is lower @@ -759,17 +759,17 @@ class="cmtt-10x-x-109">MIN_COARSE_SIZE_PER_PROCESS.






    MIN_CR_RATIO

    real real

    Any number

    > 1

    1.5 > 1

    1.5

    Minimum coarsening ratio. The aggregation stops if the ratio between the global matrix dimensions at @@ -777,23 +777,23 @@ two consecutive levels is lower than or equal to this threshold (see Note).






    MAX_LEVS

    integer integer

    Any integer

    number > 1

    20 > 1

    20

    Maximum number of levels. The aggregation stops if the number of levels reaches this value (see Note).






    PAR_AGGR_ALG

    character(len=*) =*)

    ’DEC’, ’SYMDEC’, ’COUPLED’ ’COUPLED’

    ’DEC’ ’DEC’

    Parallel aggregation algorithm.

    the SYMDEC option applies decoupled @@ -821,7 +821,7 @@ class="cmmi-10x-x-109">AT .






    AGGR_TYPE

    character(len=*) =*)

    SOC1, MATCHBOXP

    SOC1

    Type of aggregation algorithm: currently, for the decoupled aggregation we implement two @@ -862,13 +862,13 @@ package [9].






    AGGR_SIZE

    integer integer

    Any integer

    power of 2, with @@ -876,8 +876,8 @@ with class="cmtt-10x-x-109">aggr_size -2

    4

    4

    Maximum size of aggregates when the coupled aggregation based on matching is applied. For aggressive coarsening @@ -889,7 +889,7 @@ and ’MATCHBOXP’






    AGGR_PROL

    character(len=*) =*)

    SMOOTHED, UNSMOOTHED

    SMOOTHED

    Prolongator used by the aggregation algorithm: smoothed or unsmoothed (i.e., tentative prolongator).






    Note. The aggregation algorithm stops when at least one of the following criteria is met: the coarse size threshold,
    the minimum coarsening ratio, or the maximum number of levels is reached.
    Therefore, the actual number of levels may be smaller than the specified maximum number of levels.





    @@ -964,7 +964,7 @@ id="TBL-6-3">




    what a type e

    val val

    dfault t

    cnts






    AGGR_ORD

    character(len=*) =*)

    ’NATURAL’

    ’DEGREE’ ’DEGREE’

    ’NATURAL’ ’NATURAL’

    Initial ordering of indices for the decoupled aggregation algorithm: either natural ordering or sorted by @@ -1022,7 +1022,7 @@ descending degrees of the nodes in the matrix graph.






    AGGR_THRESH

    real(kind_parameter) )

    Any real

    number  [0,1]

    0.01 ,1]

    0.01

    The threshold θ in the strength of connection algorithm. See also the note at the bottom of this table.






    AGGR_FILTER

    character(len=*) =*)

    ’FILTER’

    ’NOFILTER’ ’NOFILTER’

    ’NOFILTER’ ’NOFILTER’

    Matrix used in computing the smoothed prolongator: filtered or unfiltered.






    Note. Different thresholds at different levels, such as those used in [33, Section 5.1], can be easily set by invoking the rou-
    tine set with the parameter ilev.






    Table 4:




    what a type e

    val val

    dfault t

    cnts






    COARSE_MAT

    character(len=*) =*)

    DIST

    REPL

    REPL

    Coarsest matrix layout: distributed among the processes or replicated on each of them.






    COARSE_SOLVE

    character(len=*) =*)

    MUMPSL1-FBGS

    See Note.’

    See Note.

    Solver used at the coarsest level: sequential LU from MUMPS, UMFPACK, or SuperLU (plus triangular solve); distributed LU from @@ -1261,7 +1261,7 @@ UMFPACK and SuperLU_Dist are available only in double precision.






    COARSE_SUBSOLVE

    character(len=*) =*)

    ILU

    AINV

    See Note.’

    See Note.

    Solver for the diagonal blocks of the coarsest matrix, in case the block Jacobi solver is chosen as coarsest-level solver: ILU(






    Note. Defaults for COARSE_SOLVE and COARSE_SUBSOLVE are chosen in the following order:
    single precision version – MUMPS if installed, then SLU if installed, ILU otherwise;
    double precision version – UMF if installed, then MUMPS if installed, then SLU if installed, ILU otherwise.





    what a type e

    val val

    dfault t

    cts






    COARSE_SWEEPS

    integer integer

    Any integer

    number > -0

    10

    10

    Number of sweeps when JACOBI, GS or BJAC is chosen as coarsest-level solver.






    COARSE_FILLIN

    integer integer

    Any integer

    number -0

    0

    0

    Fill-in level p of the ILU factorizations and first fill-in for the approximate inverses.






    COARSE_ILUTHRS

    real(kind_parameter) )

    Any real

    number -0

    0

    0

    Drop tolerance t in the ILU(p,t) factorization and first drop-tolerance for the approximate inverses.






    Note. Further options for coarse solvers are contained in Table 6.
    For a first use it is suggested to use the default options obtained by simply selecting the solver type.





    @@ -1499,7 +1499,7 @@ id="TBL-8-3">




    what a type e

    val val

    dfault t

    cnts






    BJAC_STOP

    character(len=*) =*)

    FALSE

    TRUE

    FALSE

    Select whether to use a stopping criterion for the Block-Jacobi method used as a coarse solver.






    BJAC_TRACE

    character(len=*) =*)

    FALSE

    TRUE

    FALSE

    Select whether to print a trace for the calculated residual for the Block-Jacobi method used as a coarse solver.






    BJAC_ITRACE

    integer integer

    Any integer

    > 0

    -1 > 0

    -1

    Number of iterations after which a trace is to be printed.






    BJAC_RESCHECK

    integer integer

    Any integer

    > 0

    -1 > 0

    -1

    Number of iterations after which a residual is to be calculated.






    BJAC_STOPTOL

    real(kind_parameter) )

    Any real

    < 1

    0 < 1

    0

    Tolerance for the stopping criterion on the residual.






    KRM_METHOD

    character(len=*) =*)

    CG

    RGMRES

    FCG

    A string that defines the iterative method to be used when employing a Krylov method 20] for further information.






    KRM_KPREC

    character(len=*) =*)

    Table 1 1

    BJAC

    The one-level preconditioners from the Table 1 can be used for the coarse Krylov solver.






    KRM_SUB_SOLVE

    character(len=*) =*)

    Table 5 5

    ILU

    Solver for the diagonal blocks of the coarsest matrix preconditioner, in case the block Jacobi solver is chosen @@ -1777,7 +1777,7 @@ The same caveat from Table 5 applies here.






    KRM_GLOBAL

    character(len=*) =*)

    TRUE, FALSE

    FALSE

    Choose between a global Krylov solver, all unknowns on a single node, or a distributed one. The default choice is the distributed solver.






    KRM_EPS

    real(kind_parameter) )

    Real < 1 < 1

    10-6 6

    The stopping tolerance.






    KRM_IRST

    integer integer

    Integer

    1

    30 ≥ 1

    30

    An integer specifying the restart parameter. This is employed for the BiCGSTABL or RGMRES methods, otherwise it is ignored.






    KRM_ISTOPC

    integer integer

    Integers -1,2,3

    2

    2

    If 1 then the method uses the normwise backward error in the infinity norm; if 20] guide for the details.






    KRM_ITMAX

    integer integer

    Integer

    1

    40 ≥ 1

    40

    The maximum number of iterations to perform.






    KRM_ITRACE

    integer integer

    Integer

    0

    -1 ≥ 0

    -1

    If > 0 print out an informational message about convergence @@ -1899,23 +1899,23 @@ class="cmtt-10x-x-109">’ iterations. If = 0 print a message in case of convergence failure.






    KRM_FILLIN

    integer integer

    Integer

    0

    0 ≥ 0

    0

    Fill-in level p of the ILU factorizations and first fill-in for the approximate inverses.






    @@ -1950,7 +1950,7 @@ id="TBL-9-3">




    what a type e

    val val

    dfault t

    cnts






    SMOOTHER_TYPE

    character(len=*) =*)

    JACOBIL1-FBGS

    FBGS

    Type of smoother used in the multilevel -point-Jacobi and Additive Schwarz. class="cmr-10">It is ignored by one-level preconditioners.






    SUB_SOLVE

    character(len=*) =*)

    JACOBI

    AINV

    GS and and Additive Schwarz one-level preconditioners preconditioners

    The local solver to be used with the . See class="cmr-10">Note for details on hybrid Gauss-Seidel.






    SMOOTHER_SWEEPS

    integer integer

    Any integer

    number 00

    1 1

    Number of sweeps of the smoother or , class="cmr-10">respectively.






    SUB_OVR

    integer integer

    Any integer

    number 00

    1 1

    Number of overlap layers, for Additive Schwarz only.







    Table 7:




    what a type e

    val val

    dfault t

    cnts






    SUB_RESTR

    character(len=*) =*)

    HALO

    NONE

    HALO

    Type of restriction operator, for Additive classical Addditive Schwarz smoother and class="cmr-10">its RAS variant.






    SUB_PROL

    character(len=*) =*)

    SUM

    NONE

    NONE

    Type of prolongation operator, for Additive for its RAS variant.






    SUB_FILLIN

    integer integer

    Any integer

    number 0 0

    0 0

    Fill-in level p of the incomplete LU class="cmr-10">factorizations.






    SUB_ILUTHRS

    real(kind_parameter) )

    Any real number 0 0

    0 0

    Drop tolerance t ) class="cmr-10">factorization.






    MUMPS_LOC_GLOB

    character(len=*) =*)

    LOCAL_SOLVER

    GLOBAL_SOLVER

    GLOBAL_SOLVER

    Whether MUMPS should be used as a only on the part of the matrix local to each class="cmr-10">process.






    MUMPS_IPAR_ENTRY

    integer integer

    Any integer number number

    0 0

    Set an entry in the MUMPS integer control optional class="cmr-10">argument.






    MUMPS_RPAR_ENTRY

    real real

    Any real number Any real number

    0 0

    Set an entry in the MUMPS real control optional class="cmr-10">argument.







    Table 8: