Merge branch 'development' into MixedI8

stopcriterion
Salvatore Filippone 6 years ago
commit be7fd2947c

@ -264,7 +264,7 @@ See also Sec.&nbsp;<A HREF="node33.html#sec:adding">7</A>.
<P>
<BIG CLASS="LARGE"><BIG CLASS="LARGE"></BIG></BIG>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="1392"></A>
<DIV ALIGN="CENTER"><A NAME="1395"></A>
<TABLE>
<CAPTION><STRONG>Table 2:</STRONG>
Parameters defining the multilevel cycle and the number of cycles to
@ -317,7 +317,7 @@ number <SPAN CLASS="MATH"><IMG
<P>
<BIG CLASS="LARGE"><BIG CLASS="LARGE"></BIG></BIG>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="1398"></A>
<DIV ALIGN="CENTER"><A NAME="1401"></A>
<TABLE>
<CAPTION><STRONG>Table 3:</STRONG>
Parameters defining the aggregation algorithm.
@ -436,7 +436,7 @@ of levels. </SPAN></TD>
<P>
<BIG CLASS="LARGE"><BIG CLASS="LARGE"></BIG></BIG>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="1402"></A>
<DIV ALIGN="CENTER"><A NAME="1405"></A>
<TABLE>
<CAPTION><STRONG>Table 4:</STRONG>
Parameters defining the aggregation algorithm (continued).
@ -503,7 +503,7 @@ the parameter <TT>ilev</TT>.</SPAN></TD>
<P>
<BIG CLASS="LARGE"><BIG CLASS="LARGE"></BIG></BIG>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="1407"></A>
<DIV ALIGN="CENTER"><A NAME="1410"></A>
<TABLE>
<CAPTION><STRONG>Table 5:</STRONG>
Parameters defining the coarse-space correction at the coarsest
@ -610,7 +610,7 @@ Note that <TT>UMF</TT> and <TT>SLU</TT> require the coarsest
<P>
<BIG CLASS="LARGE"><BIG CLASS="LARGE"></BIG></BIG>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="1409"></A>
<DIV ALIGN="CENTER"><A NAME="1412"></A>
<TABLE>
<CAPTION><STRONG>Table 6:</STRONG>
Parameters defining the coarse-space correction at the coarsest
@ -676,7 +676,7 @@ number <SPAN CLASS="MATH"><IMG
<P>
<BIG CLASS="LARGE"><BIG CLASS="LARGE"></BIG></BIG>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="1411"></A>
<DIV ALIGN="CENTER"><A NAME="1414"></A>
<TABLE>
<CAPTION><STRONG>Table 7:</STRONG>
Parameters defining the smoother or the details of the one-level preconditioner.
@ -803,7 +803,7 @@ Parameters defining the smoother or the details of the one-level preconditioner.
<P>
<BIG CLASS="LARGE"><BIG CLASS="LARGE"></BIG></BIG>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="1413"></A>
<DIV ALIGN="CENTER"><A NAME="1416"></A>
<TABLE>
<CAPTION><STRONG>Table 8:</STRONG>
Parameters defining the smoother or the details of the one-level preconditioner
@ -890,6 +890,20 @@ Parameters defining the smoother or the details of the one-level preconditioner
SRC="img83.png"
ALT="$p,t$"></SPAN>) factorization. </SMALL></TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=85><SMALL CLASS="SMALL"> <code>'MUMPS_LOC_GLOB'</code> </SMALL></TD>
<TD ALIGN="LEFT"><SMALL CLASS="SMALL"> <code>character(len=*)</code>
</SMALL></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=71><SMALL CLASS="SMALL"> <TT>LOCAL_SOLVER'</TT> </SMALL>
<P>
<SMALL CLASS="SMALL"><TT>GLOBAL_SOLVER'</TT>
</SMALL></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=62><SMALL CLASS="SMALL"> <TT>GLOBAL_SOLVER'</TT>
</SMALL></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=201><SMALL CLASS="SMALL"> Whether MUMPS should be used as a
distributed solver, or as a serial solver
acting only on the part of the matrix local
to each process. </SMALL></TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=85><SMALL CLASS="SMALL"> <code>'MUMPS_IPAR_ENTRY'</code> </SMALL></TD>
<TD ALIGN="LEFT"><SMALL CLASS="SMALL"> <code>integer</code>
</SMALL></TD>

@ -64,7 +64,7 @@ This method computes <!-- MATH
<SPAN CLASS="MATH"><IMG
WIDTH="112" HEIGHT="37" ALIGN="MIDDLE" BORDER="0"
SRC="img86.png"
ALT="$y = op(B^{-1})\, x$"></SPAN>, where <SPAN CLASS="MATH"><IMG
ALT="$y = op(B^{-1}) x$"></SPAN>, where <SPAN CLASS="MATH"><IMG
WIDTH="19" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img24.png"
ALT="$B$"></SPAN> is a previously built

@ -60,7 +60,7 @@ Mathematics Department, Macquarie University, Sydney.
The command line arguments were: <BR>
<STRONG>latex2html</STRONG> <TT>-local_icons -noaddress -dir ../../html userhtml.tex</TT>
<P>
The translation was initiated on 2018-10-21<BIG CLASS="LARGE"><BIG CLASS="LARGE"></BIG></BIG>
The translation was initiated on 2018-10-25<BIG CLASS="LARGE"><BIG CLASS="LARGE"></BIG></BIG>
<BR><HR>
</BODY>

@ -5804,7 +5804,7 @@ endstream
endobj
553 0 obj
<<
/Length 8810
/Length 10231
>>
stream
0 g 0 G
@ -5820,313 +5820,373 @@ q
0 g 0 G
0 g 0 G
q
1 0 0 1 8.269 146.165 cm
1 0 0 1 8.269 164.097 cm
[]0 d 0 J 0.398 w 0 0 m 577.037 0 l S
Q
q
1 0 0 1 8.269 134.01 cm
1 0 0 1 8.269 151.943 cm
[]0 d 0 J 0.398 w 0 0 m 0 11.955 l S
Q
1 0 0 1 -292.625 -715.095 cm
BT
/F45 9.9626 Tf 306.872 852.692 Td [(what)]TJ
/F45 9.9626 Tf 306.872 870.625 Td [(what)]TJ
ET
q
1 0 0 1 397.889 849.105 cm
1 0 0 1 397.889 867.038 cm
[]0 d 0 J 0.398 w 0 0 m 0 11.955 l S
Q
BT
/F42 9.9626 Tf 403.866 852.692 Td [(d)22(a)67(t)66(a)-377(type)]TJ
/F42 9.9626 Tf 403.866 870.625 Td [(d)22(a)67(t)66(a)-377(type)]TJ
ET
q
1 0 0 1 507.577 849.105 cm
1 0 0 1 507.577 867.038 cm
[]0 d 0 J 0.398 w 0 0 m 0 11.955 l S
Q
BT
/F45 9.9626 Tf 513.555 852.692 Td [(val)]TJ
/F45 9.9626 Tf 513.555 870.625 Td [(val)]TJ
ET
q
1 0 0 1 590.399 849.105 cm
1 0 0 1 590.399 867.038 cm
[]0 d 0 J 0.398 w 0 0 m 0 11.955 l S
Q
BT
/F42 9.9626 Tf 596.376 852.692 Td [(def)89(a)22(ul)67(t)]TJ
/F42 9.9626 Tf 596.376 870.625 Td [(def)89(a)22(ul)67(t)]TJ
ET
q
1 0 0 1 664.716 849.105 cm
1 0 0 1 664.716 867.038 cm
[]0 d 0 J 0.398 w 0 0 m 0 11.955 l S
Q
BT
/F42 9.9626 Tf 670.693 852.692 Td [(comments)]TJ
/F42 9.9626 Tf 670.693 870.625 Td [(comments)]TJ
ET
q
1 0 0 1 877.931 849.105 cm
1 0 0 1 877.931 867.038 cm
[]0 d 0 J 0.398 w 0 0 m 0 11.955 l S
Q
q
1 0 0 1 300.894 848.906 cm
1 0 0 1 300.894 866.839 cm
[]0 d 0 J 0.398 w 0 0 m 577.037 0 l S
Q
q
1 0 0 1 300.894 776.976 cm
1 0 0 1 300.894 794.908 cm
[]0 d 0 J 0.398 w 0 0 m 0 71.731 l S
Q
BT
/F45 9.9626 Tf 306.872 840.338 Td [('SUB_RESTR')]TJ
/F45 9.9626 Tf 306.872 858.271 Td [('SUB_RESTR')]TJ
ET
q
1 0 0 1 397.889 776.976 cm
1 0 0 1 397.889 794.908 cm
[]0 d 0 J 0.398 w 0 0 m 0 71.731 l S
Q
BT
/F45 9.9626 Tf 403.866 840.338 Td [(character\050len=*\051)]TJ
/F45 9.9626 Tf 403.866 858.271 Td [(character\050len=*\051)]TJ
ET
q
1 0 0 1 507.577 776.976 cm
1 0 0 1 507.577 794.908 cm
[]0 d 0 J 0.398 w 0 0 m 0 71.731 l S
Q
BT
/F45 9.9626 Tf 513.555 840.338 Td [('HALO')]TJ 0 -11.955 Td [('NONE')]TJ
/F45 9.9626 Tf 513.555 858.271 Td [('HALO')]TJ 0 -11.955 Td [('NONE')]TJ
ET
q
1 0 0 1 590.399 776.976 cm
1 0 0 1 590.399 794.908 cm
[]0 d 0 J 0.398 w 0 0 m 0 71.731 l S
Q
BT
/F45 9.9626 Tf 596.376 840.338 Td [('HALO')]TJ
/F45 9.9626 Tf 596.376 858.271 Td [('HALO')]TJ
ET
q
1 0 0 1 664.716 776.976 cm
1 0 0 1 664.716 794.908 cm
[]0 d 0 J 0.398 w 0 0 m 0 71.731 l S
Q
BT
/F15 9.9626 Tf 670.693 840.338 Td [(T)28(yp)-28(e)-733(of)-733(restriction)-733(op)-28(erator,)-833(for)-733(Additiv)28(e)]TJ 0 -11.955 Td [(Sc)28(h)28(w)27(arz)-271(only:)]TJ/F45 9.9626 Tf 63.303 0 Td [(HALO)]TJ/F15 9.9626 Tf 23.622 0 Td [(for)-271(taking)-271(in)28(to)-272(accoun)28(t)-271(the)]TJ -86.925 -11.955 Td [(o)28(v)28(e)-1(r)1(lap,)]TJ/F45 9.9626 Tf 37.388 0 Td [(NONE)]TJ/F15 9.9626 Tf 24.242 0 Td [(for)-333(neglecting)-334(it.)]TJ -61.63 -11.955 Td [(Note)-367(that)]TJ/F45 9.9626 Tf 46.337 0 Td [(HALO)]TJ/F15 9.9626 Tf 24.58 0 Td [(m)28(ust)-367(b)-28(e)-367(c)27(hosen)-367(for)-367(the)-367(classi-)]TJ -70.917 -11.956 Td [(cal)-399(Addditiv)28(e)-399(Sc)28(h)28(w)27(ar)1(z)-399(smo)-28(other)-399(and)-399(its)-399(RAS)]TJ 0 -11.955 Td [(v)56(arian)27(t.)]TJ
/F15 9.9626 Tf 670.693 858.271 Td [(T)28(yp)-28(e)-733(of)-733(restriction)-733(op)-28(erator,)-833(for)-733(Additiv)28(e)]TJ 0 -11.955 Td [(Sc)28(h)28(w)27(arz)-271(only:)]TJ/F45 9.9626 Tf 63.303 0 Td [(HALO)]TJ/F15 9.9626 Tf 23.622 0 Td [(for)-271(taking)-271(in)28(to)-272(accoun)28(t)-271(the)]TJ -86.925 -11.955 Td [(o)28(v)28(e)-1(r)1(lap,)]TJ/F45 9.9626 Tf 37.388 0 Td [(NONE)]TJ/F15 9.9626 Tf 24.242 0 Td [(for)-333(neglecting)-334(it.)]TJ -61.63 -11.956 Td [(Note)-367(that)]TJ/F45 9.9626 Tf 46.337 0 Td [(HALO)]TJ/F15 9.9626 Tf 24.58 0 Td [(m)28(ust)-367(b)-28(e)-367(c)27(hosen)-367(for)-367(the)-367(classi-)]TJ -70.917 -11.955 Td [(cal)-399(Addditiv)28(e)-399(Sc)28(h)28(w)27(ar)1(z)-399(smo)-28(other)-399(and)-399(its)-399(RAS)]TJ 0 -11.955 Td [(v)56(arian)27(t.)]TJ
ET
q
1 0 0 1 877.931 776.976 cm
1 0 0 1 877.931 794.908 cm
[]0 d 0 J 0.398 w 0 0 m 0 71.731 l S
Q
q
1 0 0 1 300.894 776.776 cm
1 0 0 1 300.894 794.709 cm
[]0 d 0 J 0.398 w 0 0 m 577.037 0 l S
Q
q
1 0 0 1 300.894 704.846 cm
1 0 0 1 300.894 722.779 cm
[]0 d 0 J 0.398 w 0 0 m 0 71.731 l S
Q
BT
/F45 9.9626 Tf 306.872 768.209 Td [('SUB_PROL')]TJ
/F45 9.9626 Tf 306.872 786.141 Td [('SUB_PROL')]TJ
ET
q
1 0 0 1 397.889 704.846 cm
1 0 0 1 397.889 722.779 cm
[]0 d 0 J 0.398 w 0 0 m 0 71.731 l S
Q
BT
/F45 9.9626 Tf 403.866 768.209 Td [(character\050len=*\051)]TJ
/F45 9.9626 Tf 403.866 786.141 Td [(character\050len=*\051)]TJ
ET
q
1 0 0 1 507.577 704.846 cm
1 0 0 1 507.577 722.779 cm
[]0 d 0 J 0.398 w 0 0 m 0 71.731 l S
Q
BT
/F45 9.9626 Tf 513.555 768.209 Td [('SUM')]TJ 0 -11.956 Td [('NONE')]TJ
/F45 9.9626 Tf 513.555 786.141 Td [('SUM')]TJ 0 -11.955 Td [('NONE')]TJ
ET
q
1 0 0 1 590.399 704.846 cm
1 0 0 1 590.399 722.779 cm
[]0 d 0 J 0.398 w 0 0 m 0 71.731 l S
Q
BT
/F45 9.9626 Tf 596.376 768.209 Td [('NONE')]TJ
/F45 9.9626 Tf 596.376 786.141 Td [('NONE')]TJ
ET
q
1 0 0 1 664.716 704.846 cm
1 0 0 1 664.716 722.779 cm
[]0 d 0 J 0.398 w 0 0 m 0 71.731 l S
Q
BT
/F15 9.9626 Tf 670.693 768.209 Td [(T)28(yp)-28(e)-534(of)-533(prolongation)-534(op)-27(erator,)-584(for)-534(Add)1(itiv)27(e)]TJ 0 -11.956 Td [(Sc)28(h)28(w)27(arz)-253(on)1(ly:)]TJ/F45 9.9626 Tf 63.028 0 Td [(SUM)]TJ/F15 9.9626 Tf 18.209 0 Td [(for)-253(adding)-252(the)-253(con)28(tributions)]TJ -81.237 -11.955 Td [(from)-333(the)-334(o)28(v)28(erlap,)]TJ/F45 9.9626 Tf 78.097 0 Td [(NONE)]TJ/F15 9.9626 Tf 24.242 0 Td [(for)-333(neglecting)-334(them.)]TJ -102.339 -11.955 Td [(Note)-322(that)]TJ/F45 9.9626 Tf 45.431 0 Td [(SUM)]TJ/F15 9.9626 Tf 18.896 0 Td [(m)28(ust)-322(b)-28(e)-321(c)27(hosen)-321(for)-322(the)-322(classical)]TJ -64.327 -11.955 Td [(Additiv)28(e)-436(S)1(c)27(h)28(w)28(arz)-436(smo)-27(other,)-461(and)]TJ/F45 9.9626 Tf 149.166 0 Td [(NONE)]TJ/F15 9.9626 Tf 25.258 0 Td [(for)-435(its)]TJ -174.424 -11.955 Td [(RAS)-333(v)55(arian)28(t.)]TJ
/F15 9.9626 Tf 670.693 786.141 Td [(T)28(yp)-28(e)-534(of)-533(prolongation)-534(op)-27(erator,)-584(for)-534(Add)1(itiv)27(e)]TJ 0 -11.955 Td [(Sc)28(h)28(w)27(arz)-253(on)1(ly:)]TJ/F45 9.9626 Tf 63.028 0 Td [(SUM)]TJ/F15 9.9626 Tf 18.209 0 Td [(for)-253(adding)-252(the)-253(con)28(tributions)]TJ -81.237 -11.955 Td [(from)-333(the)-334(o)28(v)28(erlap,)]TJ/F45 9.9626 Tf 78.097 0 Td [(NONE)]TJ/F15 9.9626 Tf 24.242 0 Td [(for)-333(neglecting)-334(them.)]TJ -102.339 -11.955 Td [(Note)-322(that)]TJ/F45 9.9626 Tf 45.431 0 Td [(SUM)]TJ/F15 9.9626 Tf 18.896 0 Td [(m)28(ust)-322(b)-28(e)-321(c)27(hosen)-321(for)-322(the)-322(classical)]TJ -64.327 -11.955 Td [(Additiv)28(e)-436(S)1(c)27(h)28(w)28(arz)-436(smo)-27(other,)-461(and)]TJ/F45 9.9626 Tf 149.166 0 Td [(NONE)]TJ/F15 9.9626 Tf 25.258 0 Td [(for)-435(its)]TJ -174.424 -11.956 Td [(RAS)-333(v)55(arian)28(t.)]TJ
ET
q
1 0 0 1 877.931 704.846 cm
1 0 0 1 877.931 722.779 cm
[]0 d 0 J 0.398 w 0 0 m 0 71.731 l S
Q
q
1 0 0 1 300.894 704.647 cm
1 0 0 1 300.894 722.58 cm
[]0 d 0 J 0.398 w 0 0 m 577.037 0 l S
Q
q
1 0 0 1 300.894 680.537 cm
1 0 0 1 300.894 698.47 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F45 9.9626 Tf 306.872 696.079 Td [('SUB_FILLIN')]TJ
/F45 9.9626 Tf 306.872 714.012 Td [('SUB_FILLIN')]TJ
ET
q
1 0 0 1 397.889 680.537 cm
1 0 0 1 397.889 698.47 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F45 9.9626 Tf 403.866 696.079 Td [(integer)]TJ
/F45 9.9626 Tf 403.866 714.012 Td [(integer)]TJ
ET
q
1 0 0 1 507.577 680.537 cm
1 0 0 1 507.577 698.47 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F15 9.9626 Tf 513.555 696.079 Td [(An)28(y)-333(in)27(teger)]TJ 0 -11.955 Td [(n)28(um)28(b)-28(er)]TJ/F25 9.9626 Tf 36.281 0 Td [(\025)]TJ/F15 9.9626 Tf 10.516 0 Td [(0)]TJ
/F15 9.9626 Tf 513.555 714.012 Td [(An)28(y)-333(in)27(teger)]TJ 0 -11.955 Td [(n)28(um)28(b)-28(er)]TJ/F25 9.9626 Tf 36.281 0 Td [(\025)]TJ/F15 9.9626 Tf 10.516 0 Td [(0)]TJ
ET
q
1 0 0 1 590.399 680.537 cm
1 0 0 1 590.399 698.47 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F15 9.9626 Tf 596.376 696.079 Td [(0)]TJ
/F15 9.9626 Tf 596.376 714.012 Td [(0)]TJ
ET
q
1 0 0 1 664.716 680.537 cm
1 0 0 1 664.716 698.47 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F15 9.9626 Tf 670.693 696.079 Td [(Fill-in)-389(lev)28(el)]TJ/F22 9.9626 Tf 53.553 0 Td [(p)]TJ/F15 9.9626 Tf 8.888 0 Td [(of)-389(the)-389(incomplete)-389(LU)-389(factoriza-)]TJ -62.441 -11.955 Td [(tions.)]TJ
/F15 9.9626 Tf 670.693 714.012 Td [(Fill-in)-389(lev)28(el)]TJ/F22 9.9626 Tf 53.553 0 Td [(p)]TJ/F15 9.9626 Tf 8.888 0 Td [(of)-389(the)-389(incomplete)-389(LU)-389(factoriza-)]TJ -62.441 -11.955 Td [(tions.)]TJ
ET
q
1 0 0 1 877.931 680.537 cm
1 0 0 1 877.931 698.47 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
q
1 0 0 1 300.894 680.338 cm
1 0 0 1 300.894 698.271 cm
[]0 d 0 J 0.398 w 0 0 m 577.037 0 l S
Q
q
1 0 0 1 300.894 656.228 cm
1 0 0 1 300.894 674.161 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F45 9.9626 Tf 306.872 671.77 Td [('SUB_ILUTHRS')]TJ
/F45 9.9626 Tf 306.872 689.703 Td [('SUB_ILUTHRS')]TJ
ET
q
1 0 0 1 397.889 656.228 cm
1 0 0 1 397.889 674.161 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F45 9.9626 Tf 403.866 671.77 Td [(real\050)]TJ/F18 9.9626 Tf 26.152 0 Td [(kind)]TJ
/F45 9.9626 Tf 403.866 689.703 Td [(real\050)]TJ/F18 9.9626 Tf 26.152 0 Td [(kind)]TJ
ET
q
1 0 0 1 448.96 671.97 cm
1 0 0 1 448.96 689.902 cm
[]0 d 0 J 0.398 w 0 0 m 3.055 0 l S
Q
BT
/F18 9.9626 Tf 452.015 671.77 Td [(p)51(ar)51(ameter)]TJ/F45 9.9626 Tf 44.354 0 Td [(\051)]TJ
/F18 9.9626 Tf 452.015 689.703 Td [(p)51(ar)51(ameter)]TJ/F45 9.9626 Tf 44.354 0 Td [(\051)]TJ
ET
q
1 0 0 1 507.577 656.228 cm
1 0 0 1 507.577 674.161 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F15 9.9626 Tf 513.555 671.77 Td [(An)28(y)-722(real)-722(n)28(um-)]TJ 0 -11.955 Td [(b)-28(er)]TJ/F25 9.9626 Tf 17.462 0 Td [(\025)]TJ/F15 9.9626 Tf 10.516 0 Td [(0)]TJ
/F15 9.9626 Tf 513.555 689.703 Td [(An)28(y)-722(real)-722(n)28(um-)]TJ 0 -11.955 Td [(b)-28(er)]TJ/F25 9.9626 Tf 17.462 0 Td [(\025)]TJ/F15 9.9626 Tf 10.516 0 Td [(0)]TJ
ET
q
1 0 0 1 590.399 656.228 cm
1 0 0 1 590.399 674.161 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F15 9.9626 Tf 596.376 671.77 Td [(0)]TJ
/F15 9.9626 Tf 596.376 689.703 Td [(0)]TJ
ET
q
1 0 0 1 664.716 656.228 cm
1 0 0 1 664.716 674.161 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F15 9.9626 Tf 670.693 671.77 Td [(Drop)-314(tolerance)]TJ/F22 9.9626 Tf 67.612 0 Td [(t)]TJ/F15 9.9626 Tf 6.726 0 Td [(in)-314(the)-314(ILU\050)]TJ/F22 9.9626 Tf 49.568 0 Td [(p;)-167(t)]TJ/F15 9.9626 Tf 13.038 0 Td [(\051)-314(factorization.)]TJ
/F15 9.9626 Tf 670.693 689.703 Td [(Drop)-314(tolerance)]TJ/F22 9.9626 Tf 67.612 0 Td [(t)]TJ/F15 9.9626 Tf 6.726 0 Td [(in)-314(the)-314(ILU\050)]TJ/F22 9.9626 Tf 49.568 0 Td [(p;)-167(t)]TJ/F15 9.9626 Tf 13.038 0 Td [(\051)-314(factorization.)]TJ
ET
q
1 0 0 1 877.931 656.228 cm
1 0 0 1 877.931 674.161 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
q
1 0 0 1 300.894 632.318 cm
1 0 0 1 300.894 638.296 cm
[]0 d 0 J 0.398 w 0 0 m 0 35.866 l S
Q
BT
/F45 9.9626 Tf 306.872 665.793 Td [('MUMPS_LOC_GLOB')]TJ
ET
q
1 0 0 1 397.889 638.296 cm
[]0 d 0 J 0.398 w 0 0 m 0 35.866 l S
Q
BT
/F45 9.9626 Tf 403.866 665.793 Td [(character\050len=*\051)]TJ
ET
q
1 0 0 1 507.577 638.296 cm
[]0 d 0 J 0.398 w 0 0 m 0 35.866 l S
Q
BT
/F45 9.9626 Tf 513.555 665.793 Td [(LOCAL)]TJ
ET
q
1 0 0 1 540.334 665.992 cm
[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S
Q
BT
/F45 9.9626 Tf 543.472 665.793 Td [(SOLVER')]TJ -29.917 -11.956 Td [(GLOBAL)]TJ
ET
q
1 0 0 1 545.564 654.037 cm
[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S
Q
BT
/F45 9.9626 Tf 548.703 653.837 Td [(SOLVER')]TJ
ET
q
1 0 0 1 590.399 638.296 cm
[]0 d 0 J 0.398 w 0 0 m 0 35.866 l S
Q
BT
/F45 9.9626 Tf 596.376 665.793 Td [(GLOBAL)]TJ
ET
q
1 0 0 1 628.386 665.992 cm
[]0 d 0 J 0.398 w 0 0 m 3.138 0 l S
Q
BT
/F45 9.9626 Tf 631.524 665.793 Td [(SOLVER')]TJ
ET
q
1 0 0 1 664.716 638.296 cm
[]0 d 0 J 0.398 w 0 0 m 0 35.866 l S
Q
BT
/F15 9.9626 Tf 670.693 665.793 Td [(Whether)-543(MUMPS)-543(should)-543(b)-28(e)-543(used)-543(as)-543(a)-543(dis-)]TJ 0 -11.956 Td [(tributed)-280(solv)28(er,)-290(or)-280(as)-280(a)-280(serial)-279(solv)27(er)-279(acting)-280(only)]TJ 0 -11.955 Td [(on)-283(the)-282(part)-283(of)-282(the)-283(matrix)-282(lo)-28(cal)-283(to)-282(eac)28(h)-283(pro)-28(cess.)]TJ
ET
q
1 0 0 1 877.931 638.296 cm
[]0 d 0 J 0.398 w 0 0 m 0 35.866 l S
Q
q
1 0 0 1 300.894 614.385 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F45 9.9626 Tf 306.872 647.86 Td [('MUMPS_IPAR_ENTRY')]TJ
/F45 9.9626 Tf 306.872 629.927 Td [('MUMPS_IPAR_ENTRY')]TJ
ET
q
1 0 0 1 397.889 632.318 cm
1 0 0 1 397.889 614.385 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F45 9.9626 Tf 403.866 647.86 Td [(integer)]TJ
/F45 9.9626 Tf 403.866 629.927 Td [(integer)]TJ
ET
q
1 0 0 1 507.577 632.318 cm
1 0 0 1 507.577 614.385 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F15 9.9626 Tf 513.555 647.86 Td [(An)28(y)-2333(in)28(teger)]TJ 0 -11.955 Td [(n)28(um)28(b)-28(er)]TJ
/F15 9.9626 Tf 513.555 629.927 Td [(An)28(y)-2333(in)28(teger)]TJ 0 -11.955 Td [(n)28(um)28(b)-28(er)]TJ
ET
q
1 0 0 1 590.399 632.318 cm
1 0 0 1 590.399 614.385 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F15 9.9626 Tf 596.376 647.86 Td [(0)]TJ
/F15 9.9626 Tf 596.376 629.927 Td [(0)]TJ
ET
q
1 0 0 1 664.716 632.318 cm
1 0 0 1 664.716 614.385 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F15 9.9626 Tf 670.693 647.86 Td [(Set)-490(an)-490(en)28(try)-490(in)-490(the)-490(MUMPS)-489(in)28(tege)-1(r)-489(con)27(trol)]TJ 0 -11.955 Td [(arra)28(y)83(,)-261(as)-243(c)28(hosen)-243(via)-243(the)]TJ/F45 9.9626 Tf 101.278 0 Td [(idx)]TJ/F15 9.9626 Tf 18.111 0 Td [(optional)-243(argumen)28(t.)]TJ
/F15 9.9626 Tf 670.693 629.927 Td [(Set)-490(an)-490(en)28(try)-490(in)-490(the)-490(MUMPS)-489(in)28(tege)-1(r)-489(con)27(trol)]TJ 0 -11.955 Td [(arra)28(y)83(,)-261(as)-243(c)28(hosen)-243(via)-243(the)]TJ/F45 9.9626 Tf 101.278 0 Td [(idx)]TJ/F15 9.9626 Tf 18.111 0 Td [(optional)-243(argumen)28(t.)]TJ
ET
q
1 0 0 1 877.931 632.318 cm
1 0 0 1 877.931 614.385 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
q
1 0 0 1 300.894 608.408 cm
1 0 0 1 300.894 590.475 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F45 9.9626 Tf 306.872 623.95 Td [('MUMPS_RPAR_ENTRY')]TJ
/F45 9.9626 Tf 306.872 606.017 Td [('MUMPS_RPAR_ENTRY')]TJ
ET
q
1 0 0 1 397.889 608.408 cm
1 0 0 1 397.889 590.475 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F45 9.9626 Tf 403.866 623.95 Td [(real)]TJ
/F45 9.9626 Tf 403.866 606.017 Td [(real)]TJ
ET
q
1 0 0 1 507.577 608.408 cm
1 0 0 1 507.577 590.475 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F15 9.9626 Tf 513.555 623.95 Td [(An)28(y)-722(real)-722(n)28(um-)]TJ 0 -11.956 Td [(b)-28(er)]TJ
/F15 9.9626 Tf 513.555 606.017 Td [(An)28(y)-722(real)-722(n)28(um-)]TJ 0 -11.955 Td [(b)-28(er)]TJ
ET
q
1 0 0 1 590.399 608.408 cm
1 0 0 1 590.399 590.475 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F15 9.9626 Tf 596.376 623.95 Td [(0)]TJ
/F15 9.9626 Tf 596.376 606.017 Td [(0)]TJ
ET
q
1 0 0 1 664.716 608.408 cm
1 0 0 1 664.716 590.475 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
BT
/F15 9.9626 Tf 670.693 623.95 Td [(Set)-289(an)-289(en)28(try)-289(in)-289(the)-289(MUMPS)-289(real)-289(con)27(trol)-289(arra)28(y)83(,)]TJ 0 -11.956 Td [(as)-333(c)27(hosen)-333(via)-333(the)]TJ/F45 9.9626 Tf 77.598 0 Td [(idx)]TJ/F15 9.9626 Tf 19.012 0 Td [(optional)-333(argumen)28(t.)]TJ
/F15 9.9626 Tf 670.693 606.017 Td [(Set)-289(an)-289(en)28(try)-289(in)-289(the)-289(MUMPS)-289(real)-289(con)27(trol)-289(arra)28(y)83(,)]TJ 0 -11.955 Td [(as)-333(c)27(hosen)-333(via)-333(the)]TJ/F45 9.9626 Tf 77.598 0 Td [(idx)]TJ/F15 9.9626 Tf 19.012 0 Td [(optional)-333(argumen)28(t.)]TJ
ET
q
1 0 0 1 877.931 608.408 cm
1 0 0 1 877.931 590.475 cm
[]0 d 0 J 0.398 w 0 0 m 0 23.91 l S
Q
q
1 0 0 1 300.894 608.209 cm
1 0 0 1 300.894 590.276 cm
[]0 d 0 J 0.398 w 0 0 m 577.037 0 l S
Q
0 g 0 G
BT
/F15 10.9091 Tf 348.852 576.913 Td [(T)83(able)-333(8:)-444(P)27(arameters)-333(de\014ning)-333(the)-334(smo)-27(other)-334(or)-333(the)-333(details)-334(of)-333(the)-333(one-lev)28(e)-1(l)-333(preconditioner)-333(\050con)28(tin)28(ued\051.)]TJ
/F15 10.9091 Tf 348.852 558.981 Td [(T)83(able)-333(8:)-444(P)27(arameters)-333(de\014ning)-333(the)-334(smo)-27(other)-334(or)-333(the)-333(details)-334(of)-333(the)-333(one-lev)28(e)-1(l)-333(preconditioner)-333(\050con)28(tin)28(ued\051.)]TJ
0 g 0 G
0 g 0 G
ET
@ -6714,7 +6774,7 @@ stream
>>
% 424 0 obj
<<
/D [552 0 R /XYZ -3912.705 615.536 null]
/D [552 0 R /XYZ -3930.637 615.536 null]
>>
% 551 0 obj
<<
@ -10251,8 +10311,8 @@ endobj
738 0 obj
<<
/Title (MultiLevel Domain Decomposition Parallel Preconditioners Package based on PSBLAS, V. 2.2) /Subject (MultiLevel Domain Decomposition Parallel Preconditioners Package) /Keywords (Parallel Numerical Software, Algebraic Multilevel Preconditioners, Sparse Iterative Solvers, PSBLAS, MPI) /Creator (pdfLaTeX) /Producer ($Id: userguide.tex 2008-04-08 Pasqua D'Ambra, Daniela di Serafino, Salvatore Filippone$) /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.18)/Keywords()
/CreationDate (D:20181021153342+01'00')
/ModDate (D:20181021153342+01'00')
/CreationDate (D:20181025183237+01'00')
/ModDate (D:20181025183237+01'00')
/Trapped /False
/PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017) kpathsea version 6.2.3)
>>
@ -10672,7 +10732,7 @@ endobj
/W [1 3 1]
/Root 737 0 R
/Info 738 0 R
/ID [<7C7041102538726DECD82A6877235425> <7C7041102538726DECD82A6877235425>]
/ID [<CB7DC88CB81B3B0B8E1F8A26D0F3DC6F> <CB7DC88CB81B3B0B8E1F8A26D0F3DC6F>]
/Length 3700
>>
stream
@ -10683,10 +10743,10 @@ stream
ÎÎW“ÎÎÎÎÎ Î!Î"Î#Î$Î%ÎÎ(ÎX^Î'€B€P a `  Î*Î+Î,Î-Î.Î/Î0Î1Î2Î3Î4Î)w~Î7Î6Î;Î5Œ<>Î8€MÎ:€IÎ=Î>Î?Î@ÎAÎBÎDÎFÎGÎHÎIÎJÎKÎPÎ<™ÉÎMÎCÎEÎL
ÎSÎTÎUÎVÎWÎXÎZÎ[ÎRÎ`ÎQ·²Î]ÎYÎ\ _ÎcÎaÐÅÎb€K999Q9x<>€Q99* 999
99 9 99 Ih9 99999999999999!9_9 b c9#9$9%9&9'9(9-9":9)9+€D€N€J€H€C€G9690919293949/9;9.«ù95€A9798999:€R9=9>9?9@9A9F9<Øò9B9C9D9I9J9H9L9G9K9N9O9P9Q9R9S9_9`9\9M9T9V9W9X9Y9Z9[³³J 9a9b9c³³9^³9]³Ûx³³³³ ³
³ ³ ³ ³³«•³³³³³³³³Íé³€S³³Û.³³³³!³çä³³#³$³'³"³%³*³+³,³-³.³/³0³)³3³(V³1³5³6³7³8³9³:³;³<³B³4$ ³=³>³?³@³A ³_³E³N³O³T³U³V³W³X³D³G³CCf³F€T³K³H³I³M³R³L³P³Q³[³S‹€³Y³Z³]³`³\£ª³^ ³aÇï³b³c#T     €U  *      
              ! "  % jH # ' * & ( - , 0 +¡» .€V 2 3 4 : 1¦û 5 = > < C ;¶Ð ? E G DËC F J O I M HÎ K Q NëG P T S W Rò» U€W [ Xùë Y \ ± ]û0QB€!€"€#€$€%€&€'€(€)€*€+€,€-½€.0€/C€0d€1Ÿ¦€2¾õ€3襀4O€5Š¡€6¨×€7ÇR€8î6€9 €:b^€;—¸€<ðr€=€X€Y€Z€[ M8ÀÀÀÀÀÀ À!À"À#À$À%À&À'À(À)À*À+À,À-À.À/À0À1À2À3À4À5À6À7À8À9À:À; J\ mT
³ ³ ³ ³³«•³³³³³³³³Íé³€S³³Û.³³³³!³çä³³#³$³'³"³%³*³+³,³-³.³/³0³)³3³(V³1³5³6³7³8³9³:³;³<³B³4$ ³=³>³?³@³A ³_³E³N³O³T³U³V³W³X³D³G³CCf³F€T³K³H³I³M³R³L³P³Q³[³S‹€³Y³Z³]³`³\£ª³^ ³aÇï³b³c     €U  *      
RG        ]k      ! "  %  # ' * &…­ ( - , 0 +§H .€V 2 3 4 : 1¬ˆ 5 = > < C ;¼] ? E G DÐÐ F J O I M HÓž K Q NðÔ P T S W RøH U€W [ Xÿx Y \> ] ½pˆ€!€"€#€$€%€&€'€(€)€*€+€,uk€-£€.½€/€0j€1¥3€2Ä‚€3î2€4T”€5<07>.€6®d€7Ì߀8óÀ9<12>€:€;<08>E€<õÿ€=€X€Y€Z€[ÀÀÀÀÀÀ À!À"À#À$À%À&À'À(À)À*À+À,À-À.À/À0À1À2À3À4À5À6À7À8À9À:À; 
endstream
endobj
startxref
617812
619233
%%EOF

@ -618,6 +618,13 @@ level (continued).\label{tab:p_coarse_1}}
& Any real number~$\ge 0$
& 0
& Drop tolerance $t$ in the ILU($p,t$) factorization. \\ %\hline
\verb|'MUMPS_LOC_GLOB'| & \verb|character(len=*)|
& \texttt{LOCAL\_SOLVER'} \par \texttt{GLOBAL\_SOLVER'}
& \texttt{GLOBAL\_SOLVER'}
& Whether MUMPS should be used as a
distributed solver, or as a serial solver
acting only on the part of the matrix local
to each process. \\ %\hline
\verb|'MUMPS_IPAR_ENTRY'| & \verb|integer|
& Any integer number
& 0

@ -82,25 +82,37 @@ subroutine c_mumps_solver_apply(alpha,sv,x,beta,y,desc_data,&
n_row = desc_data%get_local_rows()
n_col = desc_data%get_local_cols()
if (n_col <= size(work)) then
ww = work(1:n_col)
else
allocate(ww(n_col),stat=info)
! Running in local mode?
if (sv%ipar(1) == mld_local_solver_ ) then
gx = x
else if (sv%ipar(1) == mld_global_solver_ ) then
if (n_col <= size(work)) then
ww = work(1:n_col)
else
allocate(ww(n_col),stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/n_col,0,0,0,0/),&
& a_err='complex(psb_spk_)')
goto 9999
end if
end if
allocate(gx(nglob),stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/n_col,0,0,0,0/),&
call psb_errpush(info,name,i_err=(/nglob,0,0,0,0/),&
& a_err='complex(psb_spk_)')
goto 9999
end if
call psb_gather(gx, x, desc_data, info, root=0)
else
info=psb_err_internal_error_
call psb_errpush(info,name,&
& a_err='Invalid local/global solver in MUMPS')
goto 9999
end if
allocate(gx(nglob),stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/nglob,0,0,0,0/),&
& a_err='complex(psb_spk_)')
goto 9999
end if
call psb_gather(gx, x, desc_data, info, root=0)
select case(trans_)
case('N')
sv%id%icntl(9) = 1
@ -120,10 +132,13 @@ subroutine c_mumps_solver_apply(alpha,sv,x,beta,y,desc_data,&
sv%id%icntl(4)=-1
sv%id%job = 3
call cmumps(sv%id)
call psb_scatter(gx, ww, desc_data, info, root=0)
if (info == psb_success_) then
call psb_geaxpby(alpha,ww,beta,y,desc_data,info)
if (sv%ipar(1) == mld_local_solver_ ) then
call psb_geaxpby(alpha,gx,beta,y,desc_data,info)
else
call psb_scatter(gx, ww, desc_data, info, root=0)
if (info == psb_success_) then
call psb_geaxpby(alpha,ww,beta,y,desc_data,info)
end if
end if
if (info /= psb_success_) then
@ -132,9 +147,7 @@ subroutine c_mumps_solver_apply(alpha,sv,x,beta,y,desc_data,&
goto 9999
endif
if (nglob > size(work)) then
deallocate(ww)
endif
if (allocated(ww)) deallocate(ww)
call psb_erractionrestore(err_act)
return

@ -58,135 +58,145 @@
! Local variables
type(psb_cspmat_type) :: atmp
type(psb_c_coo_sparse_mat), target :: acoo
integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota, nglob, nglobrec, nzt, npr, npc
integer(psb_ipk_) :: ifrst, ibcheck
integer(psb_ipk_) :: ictxt, ictxt1, icomm, np, me, i, err_act, debug_unit, debug_level
character(len=20) :: name='c_mumps_solver_bld', ch_err
integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota, nglob, nglobrec, nzt, npr, npc
integer(psb_ipk_) :: ifrst, ibcheck
integer(psb_ipk_) :: ictxt, ictxt1, icomm, np, iam, me, i, err_act, debug_unit, debug_level
character(len=20) :: name='c_mumps_solver_bld', ch_err
#if defined(HAVE_MUMPS_) && !defined(LPK8)
info=psb_success_
call psb_erractionsave(err_act)
debug_unit = psb_get_debug_unit()
debug_level = psb_get_debug_level()
ictxt = desc_a%get_context()
if (sv%ipar(1) < 0 ) then
call psb_info(ictxt, me, np)
call psb_init(ictxt1,np=1,basectxt=ictxt,ids=(/me/))
call psb_get_mpicomm(ictxt1, icomm)
allocate(sv%local_ictxt,stat=info)
sv%local_ictxt = ictxt1
write(*,*)'mumps_bld: +++++>',icomm,ictxt1
call psb_info(ictxt1, me, np)
npr = np
else
call psb_get_mpicomm(ictxt,icomm)
write(*,*)'mumps_bld: +++++>',icomm,ictxt
call psb_info(ictxt, me, np)
npr = np
end if
npc = 1
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),' start'
! if (allocated(sv%id)) then
! call sv%free(info)
call psb_erractionsave(err_act)
debug_unit = psb_get_debug_unit()
debug_level = psb_get_debug_level()
ictxt = desc_a%get_context()
if (sv%ipar(1) == mld_local_solver_ ) then
call psb_info(ictxt, iam, np)
call psb_init(ictxt1,np=1,basectxt=ictxt,ids=(/iam/))
call psb_get_mpicomm(ictxt1, icomm)
allocate(sv%local_ictxt,stat=info)
sv%local_ictxt = ictxt1
write(*,*)'mumps_bld: +++++>',icomm,sv%local_ictxt
call psb_info(ictxt1, me, np)
npr = np
else if (sv%ipar(1) == mld_global_solver_ ) then
call psb_get_mpicomm(ictxt,icomm)
write(*,*)'mumps_bld: +++++>',icomm,ictxt
call psb_info(ictxt, iam, np)
me = iam
npr = np
else
info = psb_err_internal_error_
call psb_errpush(info,name,&
& a_err='Invalid local/global solver in MUMPS')
goto 9999
end if
npc = 1
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),' start'
! if (allocated(sv%id)) then
! call sv%free(info)
! deallocate(sv%id)
! end if
if(.not.allocated(sv%id)) then
allocate(sv%id,stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_dealloc_
call psb_errpush(info,name,a_err='mld_cmumps_default')
goto 9999
end if
! deallocate(sv%id)
! end if
if(.not.allocated(sv%id)) then
allocate(sv%id,stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_dealloc_
call psb_errpush(info,name,a_err='mld_dmumps_default')
goto 9999
end if
end if
sv%id%comm = icomm
sv%id%job = -1
sv%id%par = 1
call cmumps(sv%id)
!WARNING: CALLING cMUMPS WITH JOB=-1 DESTROY THE SETTING OF DEFAULT:TO FIX
if (allocated(sv%icntl)) then
do i=1,mld_mumps_icntl_size
if (allocated(sv%icntl(i)%item)) sv%id%icntl(i) = sv%icntl(i)%item
end do
end if
if (allocated(sv%rcntl)) then
do i=1,mld_mumps_rcntl_size
if (allocated(sv%rcntl(i)%item)) sv%id%cntl(i) = sv%rcntl(i)%item
end do
end if
sv%id%icntl(3)=sv%ipar(2)
nglob = desc_a%get_global_rows()
if (sv%ipar(1) < 0) then
nglobrec=desc_a%get_local_rows()
call a%csclip(c,info,jmax=a%get_nrows())
call c%cp_to(acoo)
nglob = c%get_nrows()
if (nglobrec /= nglob) then
write(*,*)'WARNING: MUMPS solver does not allow overlap in AS yet. A zero-overlap is used instead'
sv%id%comm = icomm
sv%id%job = -1
sv%id%par = 1
call cmumps(sv%id)
!WARNING: CALLING dMUMPS WITH JOB=-1 DESTROY THE SETTING OF DEFAULT:TO FIX
if (allocated(sv%icntl)) then
do i=1,mld_mumps_icntl_size
if (allocated(sv%icntl(i)%item)) then
!write(0,*) 'MUMPS_BLD: setting entry ',i,' to ', sv%icntl(i)%item
sv%id%icntl(i) = sv%icntl(i)%item
end if
else
call a%cp_to(acoo)
end if
nztota = acoo%get_nzeros()
end do
end if
if (allocated(sv%rcntl)) then
do i=1,mld_mumps_rcntl_size
if (allocated(sv%rcntl(i)%item)) sv%id%cntl(i) = sv%rcntl(i)%item
end do
end if
sv%id%icntl(3)=sv%ipar(2)
! switch to global numbering
if (sv%ipar(1) >= 0 ) then
call psb_loc_to_glob(acoo%ja(1:nztota), desc_a, info, iact='I')
call psb_loc_to_glob(acoo%ia(1:nztota), desc_a, info, iact='I')
nglob = desc_a%get_global_rows()
if (sv%ipar(1) == mld_local_solver_ ) then
nglobrec=desc_a%get_local_rows()
call a%csclip(c,info,jmax=a%get_nrows())
call c%cp_to(acoo)
nglob = c%get_nrows()
if (nglobrec /= nglob) then
write(*,*)'WARNING: MUMPS solver does not allow overlap in AS yet. '
write(*,*)'A zero-overlap is used instead'
end if
sv%id%irn_loc => acoo%ia
sv%id%jcn_loc => acoo%ja
sv%id%a_loc => acoo%val
sv%id%icntl(18) = 3
if(acoo%is_upper() .or. acoo%is_lower()) then
sv%id%sym = 2
else
sv%id%sym = 0
end if
sv%id%n = nglob
! there should be a better way for this
sv%id%nz_loc = acoo%get_nzeros()
sv%id%nz = acoo%get_nzeros()
sv%id%job = 4
!call psb_barrier(ictxt)
write(*,*)'calling mumps N,nz,nz_loc',sv%id%n,sv%id%nz,sv%id%nz_loc
call cmumps(sv%id)
!call psb_barrier(ictxt)
info = sv%id%infog(1)
if (info /= psb_success_) then
info=psb_err_from_subroutine_
ch_err='mld_cmumps_fact '
call psb_errpush(info,name,a_err=ch_err)
goto 9999
end if
nullify(sv%id%irn)
nullify(sv%id%jcn)
nullify(sv%id%a)
else
call a%cp_to(acoo)
end if
nztota = acoo%get_nzeros()
call acoo%free()
sv%built=.true.
! switch to global numbering
if (sv%ipar(1) == mld_global_solver_ ) then
call psb_loc_to_glob(acoo%ja(1:nztota), desc_a, info, iact='I')
call psb_loc_to_glob(acoo%ia(1:nztota), desc_a, info, iact='I')
end if
sv%id%irn_loc => acoo%ia
sv%id%jcn_loc => acoo%ja
sv%id%a_loc => acoo%val
sv%id%icntl(18) = 3
if(acoo%is_upper() .or. acoo%is_lower()) then
sv%id%sym = 2
else
sv%id%sym = 0
end if
sv%id%n = nglob
! there should be a better way for this
sv%id%nz_loc = acoo%get_nzeros()
sv%id%nz = acoo%get_nzeros()
sv%id%job = 4
!call psb_barrier(ictxt)
write(*,*)iam, ' calling mumps N,nz,nz_loc',sv%id%n,sv%id%nz,sv%id%nz_loc
call dmumps(sv%id)
!call psb_barrier(ictxt)
info = sv%id%infog(1)
if (info /= psb_success_) then
info=psb_err_from_subroutine_
ch_err='mld_dmumps_fact '
call psb_errpush(info,name,a_err=ch_err)
goto 9999
end if
nullify(sv%id%irn)
nullify(sv%id%jcn)
nullify(sv%id%a)
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),' end'
call acoo%free()
sv%built=.true.
call psb_erractionrestore(err_act)
return
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) iam,' ',trim(name),' end'
call psb_erractionrestore(err_act)
return
9999 continue
call psb_erractionrestore(err_act)
if (err_act == psb_act_abort_) then
call psb_error()
return
end if
call psb_erractionrestore(err_act)
if (err_act == psb_act_abort_) then
call psb_error()
return
end if
return
#else
write(psb_err_unit,*) "MUMPS Not Configured, fix make.inc and recompile "
write(psb_err_unit,*) "MUMPS Not Configured, fix make.inc and recompile "
#endif
end subroutine c_mumps_solver_bld
end subroutine c_mumps_solver_bld

@ -82,25 +82,37 @@ subroutine d_mumps_solver_apply(alpha,sv,x,beta,y,desc_data,&
n_row = desc_data%get_local_rows()
n_col = desc_data%get_local_cols()
if (n_col <= size(work)) then
ww = work(1:n_col)
else
allocate(ww(n_col),stat=info)
! Running in local mode?
if (sv%ipar(1) == mld_local_solver_ ) then
gx = x
else if (sv%ipar(1) == mld_global_solver_ ) then
if (n_col <= size(work)) then
ww = work(1:n_col)
else
allocate(ww(n_col),stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/n_col,0,0,0,0/),&
& a_err='real(psb_dpk_)')
goto 9999
end if
end if
allocate(gx(nglob),stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/n_col,0,0,0,0/),&
call psb_errpush(info,name,i_err=(/nglob,0,0,0,0/),&
& a_err='real(psb_dpk_)')
goto 9999
end if
call psb_gather(gx, x, desc_data, info, root=0)
else
info=psb_err_internal_error_
call psb_errpush(info,name,&
& a_err='Invalid local/global solver in MUMPS')
goto 9999
end if
allocate(gx(nglob),stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/nglob,0,0,0,0/),&
& a_err='real(psb_dpk_)')
goto 9999
end if
call psb_gather(gx, x, desc_data, info, root=0)
select case(trans_)
case('N')
sv%id%icntl(9) = 1
@ -120,10 +132,13 @@ subroutine d_mumps_solver_apply(alpha,sv,x,beta,y,desc_data,&
sv%id%icntl(4)=-1
sv%id%job = 3
call dmumps(sv%id)
call psb_scatter(gx, ww, desc_data, info, root=0)
if (info == psb_success_) then
call psb_geaxpby(alpha,ww,beta,y,desc_data,info)
if (sv%ipar(1) == mld_local_solver_ ) then
call psb_geaxpby(alpha,gx,beta,y,desc_data,info)
else
call psb_scatter(gx, ww, desc_data, info, root=0)
if (info == psb_success_) then
call psb_geaxpby(alpha,ww,beta,y,desc_data,info)
end if
end if
if (info /= psb_success_) then
@ -132,9 +147,7 @@ subroutine d_mumps_solver_apply(alpha,sv,x,beta,y,desc_data,&
goto 9999
endif
if (nglob > size(work)) then
deallocate(ww)
endif
if (allocated(ww)) deallocate(ww)
call psb_erractionrestore(err_act)
return

@ -58,135 +58,145 @@
! Local variables
type(psb_dspmat_type) :: atmp
type(psb_d_coo_sparse_mat), target :: acoo
integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota, nglob, nglobrec, nzt, npr, npc
integer(psb_ipk_) :: ifrst, ibcheck
integer(psb_ipk_) :: ictxt, ictxt1, icomm, np, me, i, err_act, debug_unit, debug_level
character(len=20) :: name='d_mumps_solver_bld', ch_err
integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota, nglob, nglobrec, nzt, npr, npc
integer(psb_ipk_) :: ifrst, ibcheck
integer(psb_ipk_) :: ictxt, ictxt1, icomm, np, iam, me, i, err_act, debug_unit, debug_level
character(len=20) :: name='d_mumps_solver_bld', ch_err
#if defined(HAVE_MUMPS_) && !defined(LPK8)
info=psb_success_
call psb_erractionsave(err_act)
debug_unit = psb_get_debug_unit()
debug_level = psb_get_debug_level()
ictxt = desc_a%get_context()
if (sv%ipar(1) < 0 ) then
call psb_info(ictxt, me, np)
call psb_init(ictxt1,np=1,basectxt=ictxt,ids=(/me/))
call psb_get_mpicomm(ictxt1, icomm)
allocate(sv%local_ictxt,stat=info)
sv%local_ictxt = ictxt1
write(*,*)'mumps_bld: +++++>',icomm,ictxt1
call psb_info(ictxt1, me, np)
npr = np
else
call psb_get_mpicomm(ictxt,icomm)
write(*,*)'mumps_bld: +++++>',icomm,ictxt
call psb_info(ictxt, me, np)
npr = np
end if
npc = 1
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),' start'
! if (allocated(sv%id)) then
! call sv%free(info)
call psb_erractionsave(err_act)
debug_unit = psb_get_debug_unit()
debug_level = psb_get_debug_level()
ictxt = desc_a%get_context()
if (sv%ipar(1) == mld_local_solver_ ) then
call psb_info(ictxt, iam, np)
call psb_init(ictxt1,np=1,basectxt=ictxt,ids=(/iam/))
call psb_get_mpicomm(ictxt1, icomm)
allocate(sv%local_ictxt,stat=info)
sv%local_ictxt = ictxt1
write(*,*)'mumps_bld: +++++>',icomm,sv%local_ictxt
call psb_info(ictxt1, me, np)
npr = np
else if (sv%ipar(1) == mld_global_solver_ ) then
call psb_get_mpicomm(ictxt,icomm)
write(*,*)'mumps_bld: +++++>',icomm,ictxt
call psb_info(ictxt, iam, np)
me = iam
npr = np
else
info = psb_err_internal_error_
call psb_errpush(info,name,&
& a_err='Invalid local/global solver in MUMPS')
goto 9999
end if
npc = 1
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),' start'
! if (allocated(sv%id)) then
! call sv%free(info)
! deallocate(sv%id)
! end if
if(.not.allocated(sv%id)) then
allocate(sv%id,stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_dealloc_
call psb_errpush(info,name,a_err='mld_dmumps_default')
goto 9999
end if
! deallocate(sv%id)
! end if
if(.not.allocated(sv%id)) then
allocate(sv%id,stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_dealloc_
call psb_errpush(info,name,a_err='mld_dmumps_default')
goto 9999
end if
end if
sv%id%comm = icomm
sv%id%job = -1
sv%id%par = 1
call dmumps(sv%id)
!WARNING: CALLING dMUMPS WITH JOB=-1 DESTROY THE SETTING OF DEFAULT:TO FIX
if (allocated(sv%icntl)) then
do i=1,mld_mumps_icntl_size
if (allocated(sv%icntl(i)%item)) sv%id%icntl(i) = sv%icntl(i)%item
end do
end if
if (allocated(sv%rcntl)) then
do i=1,mld_mumps_rcntl_size
if (allocated(sv%rcntl(i)%item)) sv%id%cntl(i) = sv%rcntl(i)%item
end do
end if
sv%id%icntl(3)=sv%ipar(2)
nglob = desc_a%get_global_rows()
if (sv%ipar(1) < 0) then
nglobrec=desc_a%get_local_rows()
call a%csclip(c,info,jmax=a%get_nrows())
call c%cp_to(acoo)
nglob = c%get_nrows()
if (nglobrec /= nglob) then
write(*,*)'WARNING: MUMPS solver does not allow overlap in AS yet. A zero-overlap is used instead'
sv%id%comm = icomm
sv%id%job = -1
sv%id%par = 1
call dmumps(sv%id)
!WARNING: CALLING dMUMPS WITH JOB=-1 DESTROY THE SETTING OF DEFAULT:TO FIX
if (allocated(sv%icntl)) then
do i=1,mld_mumps_icntl_size
if (allocated(sv%icntl(i)%item)) then
!write(0,*) 'MUMPS_BLD: setting entry ',i,' to ', sv%icntl(i)%item
sv%id%icntl(i) = sv%icntl(i)%item
end if
else
call a%cp_to(acoo)
end if
nztota = acoo%get_nzeros()
end do
end if
if (allocated(sv%rcntl)) then
do i=1,mld_mumps_rcntl_size
if (allocated(sv%rcntl(i)%item)) sv%id%cntl(i) = sv%rcntl(i)%item
end do
end if
sv%id%icntl(3)=sv%ipar(2)
! switch to global numbering
if (sv%ipar(1) >= 0 ) then
call psb_loc_to_glob(acoo%ja(1:nztota), desc_a, info, iact='I')
call psb_loc_to_glob(acoo%ia(1:nztota), desc_a, info, iact='I')
nglob = desc_a%get_global_rows()
if (sv%ipar(1) == mld_local_solver_ ) then
nglobrec=desc_a%get_local_rows()
call a%csclip(c,info,jmax=a%get_nrows())
call c%cp_to(acoo)
nglob = c%get_nrows()
if (nglobrec /= nglob) then
write(*,*)'WARNING: MUMPS solver does not allow overlap in AS yet. '
write(*,*)'A zero-overlap is used instead'
end if
sv%id%irn_loc => acoo%ia
sv%id%jcn_loc => acoo%ja
sv%id%a_loc => acoo%val
sv%id%icntl(18) = 3
if(acoo%is_upper() .or. acoo%is_lower()) then
sv%id%sym = 2
else
sv%id%sym = 0
end if
sv%id%n = nglob
! there should be a better way for this
sv%id%nz_loc = acoo%get_nzeros()
sv%id%nz = acoo%get_nzeros()
sv%id%job = 4
!call psb_barrier(ictxt)
write(*,*)'calling mumps N,nz,nz_loc',sv%id%n,sv%id%nz,sv%id%nz_loc
call dmumps(sv%id)
!call psb_barrier(ictxt)
info = sv%id%infog(1)
if (info /= psb_success_) then
info=psb_err_from_subroutine_
ch_err='mld_dmumps_fact '
call psb_errpush(info,name,a_err=ch_err)
goto 9999
end if
nullify(sv%id%irn)
nullify(sv%id%jcn)
nullify(sv%id%a)
else
call a%cp_to(acoo)
end if
nztota = acoo%get_nzeros()
call acoo%free()
sv%built=.true.
! switch to global numbering
if (sv%ipar(1) == mld_global_solver_ ) then
call psb_loc_to_glob(acoo%ja(1:nztota), desc_a, info, iact='I')
call psb_loc_to_glob(acoo%ia(1:nztota), desc_a, info, iact='I')
end if
sv%id%irn_loc => acoo%ia
sv%id%jcn_loc => acoo%ja
sv%id%a_loc => acoo%val
sv%id%icntl(18) = 3
if(acoo%is_upper() .or. acoo%is_lower()) then
sv%id%sym = 2
else
sv%id%sym = 0
end if
sv%id%n = nglob
! there should be a better way for this
sv%id%nz_loc = acoo%get_nzeros()
sv%id%nz = acoo%get_nzeros()
sv%id%job = 4
!call psb_barrier(ictxt)
write(*,*)iam, ' calling mumps N,nz,nz_loc',sv%id%n,sv%id%nz,sv%id%nz_loc
call dmumps(sv%id)
!call psb_barrier(ictxt)
info = sv%id%infog(1)
if (info /= psb_success_) then
info=psb_err_from_subroutine_
ch_err='mld_dmumps_fact '
call psb_errpush(info,name,a_err=ch_err)
goto 9999
end if
nullify(sv%id%irn)
nullify(sv%id%jcn)
nullify(sv%id%a)
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),' end'
call acoo%free()
sv%built=.true.
call psb_erractionrestore(err_act)
return
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) iam,' ',trim(name),' end'
call psb_erractionrestore(err_act)
return
9999 continue
call psb_erractionrestore(err_act)
if (err_act == psb_act_abort_) then
call psb_error()
return
end if
call psb_erractionrestore(err_act)
if (err_act == psb_act_abort_) then
call psb_error()
return
end if
return
#else
write(psb_err_unit,*) "MUMPS Not Configured, fix make.inc and recompile "
write(psb_err_unit,*) "MUMPS Not Configured, fix make.inc and recompile "
#endif
end subroutine d_mumps_solver_bld
end subroutine d_mumps_solver_bld

@ -82,25 +82,37 @@ subroutine s_mumps_solver_apply(alpha,sv,x,beta,y,desc_data,&
n_row = desc_data%get_local_rows()
n_col = desc_data%get_local_cols()
if (n_col <= size(work)) then
ww = work(1:n_col)
else
allocate(ww(n_col),stat=info)
! Running in local mode?
if (sv%ipar(1) == mld_local_solver_ ) then
gx = x
else if (sv%ipar(1) == mld_global_solver_ ) then
if (n_col <= size(work)) then
ww = work(1:n_col)
else
allocate(ww(n_col),stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/n_col,0,0,0,0/),&
& a_err='real(psb_spk_)')
goto 9999
end if
end if
allocate(gx(nglob),stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/n_col,0,0,0,0/),&
call psb_errpush(info,name,i_err=(/nglob,0,0,0,0/),&
& a_err='real(psb_spk_)')
goto 9999
end if
call psb_gather(gx, x, desc_data, info, root=0)
else
info=psb_err_internal_error_
call psb_errpush(info,name,&
& a_err='Invalid local/global solver in MUMPS')
goto 9999
end if
allocate(gx(nglob),stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/nglob,0,0,0,0/),&
& a_err='real(psb_spk_)')
goto 9999
end if
call psb_gather(gx, x, desc_data, info, root=0)
select case(trans_)
case('N')
sv%id%icntl(9) = 1
@ -120,10 +132,13 @@ subroutine s_mumps_solver_apply(alpha,sv,x,beta,y,desc_data,&
sv%id%icntl(4)=-1
sv%id%job = 3
call smumps(sv%id)
call psb_scatter(gx, ww, desc_data, info, root=0)
if (info == psb_success_) then
call psb_geaxpby(alpha,ww,beta,y,desc_data,info)
if (sv%ipar(1) == mld_local_solver_ ) then
call psb_geaxpby(alpha,gx,beta,y,desc_data,info)
else
call psb_scatter(gx, ww, desc_data, info, root=0)
if (info == psb_success_) then
call psb_geaxpby(alpha,ww,beta,y,desc_data,info)
end if
end if
if (info /= psb_success_) then
@ -132,9 +147,7 @@ subroutine s_mumps_solver_apply(alpha,sv,x,beta,y,desc_data,&
goto 9999
endif
if (nglob > size(work)) then
deallocate(ww)
endif
if (allocated(ww)) deallocate(ww)
call psb_erractionrestore(err_act)
return

@ -58,135 +58,145 @@
! Local variables
type(psb_sspmat_type) :: atmp
type(psb_s_coo_sparse_mat), target :: acoo
integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota, nglob, nglobrec, nzt, npr, npc
integer(psb_ipk_) :: ifrst, ibcheck
integer(psb_ipk_) :: ictxt, ictxt1, icomm, np, me, i, err_act, debug_unit, debug_level
character(len=20) :: name='s_mumps_solver_bld', ch_err
integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota, nglob, nglobrec, nzt, npr, npc
integer(psb_ipk_) :: ifrst, ibcheck
integer(psb_ipk_) :: ictxt, ictxt1, icomm, np, iam, me, i, err_act, debug_unit, debug_level
character(len=20) :: name='s_mumps_solver_bld', ch_err
#if defined(HAVE_MUMPS_) && !defined(LPK8)
info=psb_success_
call psb_erractionsave(err_act)
debug_unit = psb_get_debug_unit()
debug_level = psb_get_debug_level()
ictxt = desc_a%get_context()
if (sv%ipar(1) < 0 ) then
call psb_info(ictxt, me, np)
call psb_init(ictxt1,np=1,basectxt=ictxt,ids=(/me/))
call psb_get_mpicomm(ictxt1, icomm)
allocate(sv%local_ictxt,stat=info)
sv%local_ictxt = ictxt1
write(*,*)'mumps_bld: +++++>',icomm,ictxt1
call psb_info(ictxt1, me, np)
npr = np
else
call psb_get_mpicomm(ictxt,icomm)
write(*,*)'mumps_bld: +++++>',icomm,ictxt
call psb_info(ictxt, me, np)
npr = np
end if
npc = 1
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),' start'
! if (allocated(sv%id)) then
! call sv%free(info)
call psb_erractionsave(err_act)
debug_unit = psb_get_debug_unit()
debug_level = psb_get_debug_level()
ictxt = desc_a%get_context()
if (sv%ipar(1) == mld_local_solver_ ) then
call psb_info(ictxt, iam, np)
call psb_init(ictxt1,np=1,basectxt=ictxt,ids=(/iam/))
call psb_get_mpicomm(ictxt1, icomm)
allocate(sv%local_ictxt,stat=info)
sv%local_ictxt = ictxt1
write(*,*)'mumps_bld: +++++>',icomm,sv%local_ictxt
call psb_info(ictxt1, me, np)
npr = np
else if (sv%ipar(1) == mld_global_solver_ ) then
call psb_get_mpicomm(ictxt,icomm)
write(*,*)'mumps_bld: +++++>',icomm,ictxt
call psb_info(ictxt, iam, np)
me = iam
npr = np
else
info = psb_err_internal_error_
call psb_errpush(info,name,&
& a_err='Invalid local/global solver in MUMPS')
goto 9999
end if
npc = 1
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),' start'
! if (allocated(sv%id)) then
! call sv%free(info)
! deallocate(sv%id)
! end if
if(.not.allocated(sv%id)) then
allocate(sv%id,stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_dealloc_
call psb_errpush(info,name,a_err='mld_smumps_default')
goto 9999
end if
! deallocate(sv%id)
! end if
if(.not.allocated(sv%id)) then
allocate(sv%id,stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_dealloc_
call psb_errpush(info,name,a_err='mld_dmumps_default')
goto 9999
end if
end if
sv%id%comm = icomm
sv%id%job = -1
sv%id%par = 1
call smumps(sv%id)
!WARNING: CALLING sMUMPS WITH JOB=-1 DESTROY THE SETTING OF DEFAULT:TO FIX
if (allocated(sv%icntl)) then
do i=1,mld_mumps_icntl_size
if (allocated(sv%icntl(i)%item)) sv%id%icntl(i) = sv%icntl(i)%item
end do
end if
if (allocated(sv%rcntl)) then
do i=1,mld_mumps_rcntl_size
if (allocated(sv%rcntl(i)%item)) sv%id%cntl(i) = sv%rcntl(i)%item
end do
end if
sv%id%icntl(3)=sv%ipar(2)
nglob = desc_a%get_global_rows()
if (sv%ipar(1) < 0) then
nglobrec=desc_a%get_local_rows()
call a%csclip(c,info,jmax=a%get_nrows())
call c%cp_to(acoo)
nglob = c%get_nrows()
if (nglobrec /= nglob) then
write(*,*)'WARNING: MUMPS solver does not allow overlap in AS yet. A zero-overlap is used instead'
sv%id%comm = icomm
sv%id%job = -1
sv%id%par = 1
call smumps(sv%id)
!WARNING: CALLING dMUMPS WITH JOB=-1 DESTROY THE SETTING OF DEFAULT:TO FIX
if (allocated(sv%icntl)) then
do i=1,mld_mumps_icntl_size
if (allocated(sv%icntl(i)%item)) then
!write(0,*) 'MUMPS_BLD: setting entry ',i,' to ', sv%icntl(i)%item
sv%id%icntl(i) = sv%icntl(i)%item
end if
else
call a%cp_to(acoo)
end if
nztota = acoo%get_nzeros()
end do
end if
if (allocated(sv%rcntl)) then
do i=1,mld_mumps_rcntl_size
if (allocated(sv%rcntl(i)%item)) sv%id%cntl(i) = sv%rcntl(i)%item
end do
end if
sv%id%icntl(3)=sv%ipar(2)
! switch to global numbering
if (sv%ipar(1) >= 0 ) then
call psb_loc_to_glob(acoo%ja(1:nztota), desc_a, info, iact='I')
call psb_loc_to_glob(acoo%ia(1:nztota), desc_a, info, iact='I')
nglob = desc_a%get_global_rows()
if (sv%ipar(1) == mld_local_solver_ ) then
nglobrec=desc_a%get_local_rows()
call a%csclip(c,info,jmax=a%get_nrows())
call c%cp_to(acoo)
nglob = c%get_nrows()
if (nglobrec /= nglob) then
write(*,*)'WARNING: MUMPS solver does not allow overlap in AS yet. '
write(*,*)'A zero-overlap is used instead'
end if
sv%id%irn_loc => acoo%ia
sv%id%jcn_loc => acoo%ja
sv%id%a_loc => acoo%val
sv%id%icntl(18) = 3
if(acoo%is_upper() .or. acoo%is_lower()) then
sv%id%sym = 2
else
sv%id%sym = 0
end if
sv%id%n = nglob
! there should be a better way for this
sv%id%nz_loc = acoo%get_nzeros()
sv%id%nz = acoo%get_nzeros()
sv%id%job = 4
!call psb_barrier(ictxt)
write(*,*)'calling mumps N,nz,nz_loc',sv%id%n,sv%id%nz,sv%id%nz_loc
call smumps(sv%id)
!call psb_barrier(ictxt)
info = sv%id%infog(1)
if (info /= psb_success_) then
info=psb_err_from_subroutine_
ch_err='mld_smumps_fact '
call psb_errpush(info,name,a_err=ch_err)
goto 9999
end if
nullify(sv%id%irn)
nullify(sv%id%jcn)
nullify(sv%id%a)
else
call a%cp_to(acoo)
end if
nztota = acoo%get_nzeros()
call acoo%free()
sv%built=.true.
! switch to global numbering
if (sv%ipar(1) == mld_global_solver_ ) then
call psb_loc_to_glob(acoo%ja(1:nztota), desc_a, info, iact='I')
call psb_loc_to_glob(acoo%ia(1:nztota), desc_a, info, iact='I')
end if
sv%id%irn_loc => acoo%ia
sv%id%jcn_loc => acoo%ja
sv%id%a_loc => acoo%val
sv%id%icntl(18) = 3
if(acoo%is_upper() .or. acoo%is_lower()) then
sv%id%sym = 2
else
sv%id%sym = 0
end if
sv%id%n = nglob
! there should be a better way for this
sv%id%nz_loc = acoo%get_nzeros()
sv%id%nz = acoo%get_nzeros()
sv%id%job = 4
!call psb_barrier(ictxt)
write(*,*)iam, ' calling mumps N,nz,nz_loc',sv%id%n,sv%id%nz,sv%id%nz_loc
call dmumps(sv%id)
!call psb_barrier(ictxt)
info = sv%id%infog(1)
if (info /= psb_success_) then
info=psb_err_from_subroutine_
ch_err='mld_dmumps_fact '
call psb_errpush(info,name,a_err=ch_err)
goto 9999
end if
nullify(sv%id%irn)
nullify(sv%id%jcn)
nullify(sv%id%a)
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),' end'
call acoo%free()
sv%built=.true.
call psb_erractionrestore(err_act)
return
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) iam,' ',trim(name),' end'
call psb_erractionrestore(err_act)
return
9999 continue
call psb_erractionrestore(err_act)
if (err_act == psb_act_abort_) then
call psb_error()
return
end if
call psb_erractionrestore(err_act)
if (err_act == psb_act_abort_) then
call psb_error()
return
end if
return
#else
write(psb_err_unit,*) "MUMPS Not Configured, fix make.inc and recompile "
write(psb_err_unit,*) "MUMPS Not Configured, fix make.inc and recompile "
#endif
end subroutine s_mumps_solver_bld
end subroutine s_mumps_solver_bld

@ -82,25 +82,37 @@ subroutine z_mumps_solver_apply(alpha,sv,x,beta,y,desc_data,&
n_row = desc_data%get_local_rows()
n_col = desc_data%get_local_cols()
if (n_col <= size(work)) then
ww = work(1:n_col)
else
allocate(ww(n_col),stat=info)
! Running in local mode?
if (sv%ipar(1) == mld_local_solver_ ) then
gx = x
else if (sv%ipar(1) == mld_global_solver_ ) then
if (n_col <= size(work)) then
ww = work(1:n_col)
else
allocate(ww(n_col),stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/n_col,0,0,0,0/),&
& a_err='complex(psb_dpk_)')
goto 9999
end if
end if
allocate(gx(nglob),stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/n_col,0,0,0,0/),&
call psb_errpush(info,name,i_err=(/nglob,0,0,0,0/),&
& a_err='complex(psb_dpk_)')
goto 9999
end if
call psb_gather(gx, x, desc_data, info, root=0)
else
info=psb_err_internal_error_
call psb_errpush(info,name,&
& a_err='Invalid local/global solver in MUMPS')
goto 9999
end if
allocate(gx(nglob),stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/nglob,0,0,0,0/),&
& a_err='complex(psb_dpk_)')
goto 9999
end if
call psb_gather(gx, x, desc_data, info, root=0)
select case(trans_)
case('N')
sv%id%icntl(9) = 1
@ -120,10 +132,13 @@ subroutine z_mumps_solver_apply(alpha,sv,x,beta,y,desc_data,&
sv%id%icntl(4)=-1
sv%id%job = 3
call zmumps(sv%id)
call psb_scatter(gx, ww, desc_data, info, root=0)
if (info == psb_success_) then
call psb_geaxpby(alpha,ww,beta,y,desc_data,info)
if (sv%ipar(1) == mld_local_solver_ ) then
call psb_geaxpby(alpha,gx,beta,y,desc_data,info)
else
call psb_scatter(gx, ww, desc_data, info, root=0)
if (info == psb_success_) then
call psb_geaxpby(alpha,ww,beta,y,desc_data,info)
end if
end if
if (info /= psb_success_) then
@ -132,9 +147,7 @@ subroutine z_mumps_solver_apply(alpha,sv,x,beta,y,desc_data,&
goto 9999
endif
if (nglob > size(work)) then
deallocate(ww)
endif
if (allocated(ww)) deallocate(ww)
call psb_erractionrestore(err_act)
return

@ -58,135 +58,145 @@
! Local variables
type(psb_zspmat_type) :: atmp
type(psb_z_coo_sparse_mat), target :: acoo
integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota, nglob, nglobrec, nzt, npr, npc
integer(psb_ipk_) :: ifrst, ibcheck
integer(psb_ipk_) :: ictxt, ictxt1, icomm, np, me, i, err_act, debug_unit, debug_level
character(len=20) :: name='z_mumps_solver_bld', ch_err
integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota, nglob, nglobrec, nzt, npr, npc
integer(psb_ipk_) :: ifrst, ibcheck
integer(psb_ipk_) :: ictxt, ictxt1, icomm, np, iam, me, i, err_act, debug_unit, debug_level
character(len=20) :: name='z_mumps_solver_bld', ch_err
#if defined(HAVE_MUMPS_) && !defined(LPK8)
info=psb_success_
call psb_erractionsave(err_act)
debug_unit = psb_get_debug_unit()
debug_level = psb_get_debug_level()
ictxt = desc_a%get_context()
if (sv%ipar(1) < 0 ) then
call psb_info(ictxt, me, np)
call psb_init(ictxt1,np=1,basectxt=ictxt,ids=(/me/))
call psb_get_mpicomm(ictxt1, icomm)
allocate(sv%local_ictxt,stat=info)
sv%local_ictxt = ictxt1
write(*,*)'mumps_bld: +++++>',icomm,ictxt1
call psb_info(ictxt1, me, np)
npr = np
else
call psb_get_mpicomm(ictxt,icomm)
write(*,*)'mumps_bld: +++++>',icomm,ictxt
call psb_info(ictxt, me, np)
npr = np
end if
npc = 1
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),' start'
! if (allocated(sv%id)) then
! call sv%free(info)
call psb_erractionsave(err_act)
debug_unit = psb_get_debug_unit()
debug_level = psb_get_debug_level()
ictxt = desc_a%get_context()
if (sv%ipar(1) == mld_local_solver_ ) then
call psb_info(ictxt, iam, np)
call psb_init(ictxt1,np=1,basectxt=ictxt,ids=(/iam/))
call psb_get_mpicomm(ictxt1, icomm)
allocate(sv%local_ictxt,stat=info)
sv%local_ictxt = ictxt1
write(*,*)'mumps_bld: +++++>',icomm,sv%local_ictxt
call psb_info(ictxt1, me, np)
npr = np
else if (sv%ipar(1) == mld_global_solver_ ) then
call psb_get_mpicomm(ictxt,icomm)
write(*,*)'mumps_bld: +++++>',icomm,ictxt
call psb_info(ictxt, iam, np)
me = iam
npr = np
else
info = psb_err_internal_error_
call psb_errpush(info,name,&
& a_err='Invalid local/global solver in MUMPS')
goto 9999
end if
npc = 1
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),' start'
! if (allocated(sv%id)) then
! call sv%free(info)
! deallocate(sv%id)
! end if
if(.not.allocated(sv%id)) then
allocate(sv%id,stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_dealloc_
call psb_errpush(info,name,a_err='mld_zmumps_default')
goto 9999
end if
! deallocate(sv%id)
! end if
if(.not.allocated(sv%id)) then
allocate(sv%id,stat=info)
if (info /= psb_success_) then
info=psb_err_alloc_dealloc_
call psb_errpush(info,name,a_err='mld_dmumps_default')
goto 9999
end if
end if
sv%id%comm = icomm
sv%id%job = -1
sv%id%par = 1
call zmumps(sv%id)
!WARNING: CALLING zMUMPS WITH JOB=-1 DESTROY THE SETTING OF DEFAULT:TO FIX
if (allocated(sv%icntl)) then
do i=1,mld_mumps_icntl_size
if (allocated(sv%icntl(i)%item)) sv%id%icntl(i) = sv%icntl(i)%item
end do
end if
if (allocated(sv%rcntl)) then
do i=1,mld_mumps_rcntl_size
if (allocated(sv%rcntl(i)%item)) sv%id%cntl(i) = sv%rcntl(i)%item
end do
end if
sv%id%icntl(3)=sv%ipar(2)
nglob = desc_a%get_global_rows()
if (sv%ipar(1) < 0) then
nglobrec=desc_a%get_local_rows()
call a%csclip(c,info,jmax=a%get_nrows())
call c%cp_to(acoo)
nglob = c%get_nrows()
if (nglobrec /= nglob) then
write(*,*)'WARNING: MUMPS solver does not allow overlap in AS yet. A zero-overlap is used instead'
sv%id%comm = icomm
sv%id%job = -1
sv%id%par = 1
call zmumps(sv%id)
!WARNING: CALLING dMUMPS WITH JOB=-1 DESTROY THE SETTING OF DEFAULT:TO FIX
if (allocated(sv%icntl)) then
do i=1,mld_mumps_icntl_size
if (allocated(sv%icntl(i)%item)) then
!write(0,*) 'MUMPS_BLD: setting entry ',i,' to ', sv%icntl(i)%item
sv%id%icntl(i) = sv%icntl(i)%item
end if
else
call a%cp_to(acoo)
end if
nztota = acoo%get_nzeros()
end do
end if
if (allocated(sv%rcntl)) then
do i=1,mld_mumps_rcntl_size
if (allocated(sv%rcntl(i)%item)) sv%id%cntl(i) = sv%rcntl(i)%item
end do
end if
sv%id%icntl(3)=sv%ipar(2)
! switch to global numbering
if (sv%ipar(1) >= 0 ) then
call psb_loc_to_glob(acoo%ja(1:nztota), desc_a, info, iact='I')
call psb_loc_to_glob(acoo%ia(1:nztota), desc_a, info, iact='I')
nglob = desc_a%get_global_rows()
if (sv%ipar(1) == mld_local_solver_ ) then
nglobrec=desc_a%get_local_rows()
call a%csclip(c,info,jmax=a%get_nrows())
call c%cp_to(acoo)
nglob = c%get_nrows()
if (nglobrec /= nglob) then
write(*,*)'WARNING: MUMPS solver does not allow overlap in AS yet. '
write(*,*)'A zero-overlap is used instead'
end if
sv%id%irn_loc => acoo%ia
sv%id%jcn_loc => acoo%ja
sv%id%a_loc => acoo%val
sv%id%icntl(18) = 3
if(acoo%is_upper() .or. acoo%is_lower()) then
sv%id%sym = 2
else
sv%id%sym = 0
end if
sv%id%n = nglob
! there should be a better way for this
sv%id%nz_loc = acoo%get_nzeros()
sv%id%nz = acoo%get_nzeros()
sv%id%job = 4
!call psb_barrier(ictxt)
write(*,*)'calling mumps N,nz,nz_loc',sv%id%n,sv%id%nz,sv%id%nz_loc
call zmumps(sv%id)
!call psb_barrier(ictxt)
info = sv%id%infog(1)
if (info /= psb_success_) then
info=psb_err_from_subroutine_
ch_err='mld_zmumps_fact '
call psb_errpush(info,name,a_err=ch_err)
goto 9999
end if
nullify(sv%id%irn)
nullify(sv%id%jcn)
nullify(sv%id%a)
else
call a%cp_to(acoo)
end if
nztota = acoo%get_nzeros()
call acoo%free()
sv%built=.true.
! switch to global numbering
if (sv%ipar(1) == mld_global_solver_ ) then
call psb_loc_to_glob(acoo%ja(1:nztota), desc_a, info, iact='I')
call psb_loc_to_glob(acoo%ia(1:nztota), desc_a, info, iact='I')
end if
sv%id%irn_loc => acoo%ia
sv%id%jcn_loc => acoo%ja
sv%id%a_loc => acoo%val
sv%id%icntl(18) = 3
if(acoo%is_upper() .or. acoo%is_lower()) then
sv%id%sym = 2
else
sv%id%sym = 0
end if
sv%id%n = nglob
! there should be a better way for this
sv%id%nz_loc = acoo%get_nzeros()
sv%id%nz = acoo%get_nzeros()
sv%id%job = 4
!call psb_barrier(ictxt)
write(*,*)iam, ' calling mumps N,nz,nz_loc',sv%id%n,sv%id%nz,sv%id%nz_loc
call dmumps(sv%id)
!call psb_barrier(ictxt)
info = sv%id%infog(1)
if (info /= psb_success_) then
info=psb_err_from_subroutine_
ch_err='mld_dmumps_fact '
call psb_errpush(info,name,a_err=ch_err)
goto 9999
end if
nullify(sv%id%irn)
nullify(sv%id%jcn)
nullify(sv%id%a)
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),' end'
call acoo%free()
sv%built=.true.
call psb_erractionrestore(err_act)
return
if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) iam,' ',trim(name),' end'
call psb_erractionrestore(err_act)
return
9999 continue
call psb_erractionrestore(err_act)
if (err_act == psb_act_abort_) then
call psb_error()
return
end if
call psb_erractionrestore(err_act)
if (err_act == psb_act_abort_) then
call psb_error()
return
end if
return
#else
write(psb_err_unit,*) "MUMPS Not Configured, fix make.inc and recompile "
write(psb_err_unit,*) "MUMPS Not Configured, fix make.inc and recompile "
#endif
end subroutine z_mumps_solver_bld
end subroutine z_mumps_solver_bld

@ -286,15 +286,15 @@ module mld_base_prec_type
integer(psb_ipk_), parameter :: mld_coarse_iluthrs_ = 4
integer(psb_ipk_), parameter :: mld_solver_eps_ = 6
integer(psb_ipk_), parameter :: mld_rfpsz_ = 8
!
! Is the current solver local or global
!
integer(psb_ipk_), parameter :: mld_local_solver_ = 0
integer(psb_ipk_), parameter :: mld_global_solver_ = 1
!
! Entries for mumps
!
!parameter controling the sequential/parallel building of MUMPS
integer(psb_ipk_), parameter :: mld_as_sequential_ = 40
!parameter regulating the error printing of MUMPS
integer(psb_ipk_), parameter :: mld_mumps_print_err_ = 41
! Size of the control vectors
integer, parameter :: mld_mumps_icntl_size=40
integer, parameter :: mld_mumps_rcntl_size=15
@ -483,6 +483,10 @@ contains
val = mld_no_filter_mat_
case('OUTER_SWEEPS')
val = mld_outer_sweeps_
case('LOCAL_SOLVER')
val = mld_local_solver_
case('GLOBAL_SOLVER')
val = mld_global_solver_
case default
val = -1
end select

@ -291,7 +291,7 @@ contains
select case(psb_toupper(what))
#if defined(HAVE_MUMPS_)
case('MUMPS_AS_SEQUENTIAL')
case('MUMPS_LOC_GLOB')
sv%ipar(1)=val
case('MUMPS_PRINT_ERR')
sv%ipar(2)=val
@ -400,8 +400,9 @@ contains
! INSTANTIATION OF sv%id needed to set parmater but mpi communicator needed
! sv%id%job = -1
! sv%id%par=1
! call dmumps(sv%id)
sv%ipar(1)=2
! call dmumps(sv%id)
sv%ipar = 0
sv%ipar(1) = mld_global_solver_
!sv%ipar(10)=6
!sv%ipar(11)=0
!sv%ipar(12)=6

@ -291,7 +291,7 @@ contains
select case(psb_toupper(what))
#if defined(HAVE_MUMPS_)
case('MUMPS_AS_SEQUENTIAL')
case('MUMPS_LOC_GLOB')
sv%ipar(1)=val
case('MUMPS_PRINT_ERR')
sv%ipar(2)=val
@ -400,8 +400,9 @@ contains
! INSTANTIATION OF sv%id needed to set parmater but mpi communicator needed
! sv%id%job = -1
! sv%id%par=1
! call dmumps(sv%id)
sv%ipar(1)=2
! call dmumps(sv%id)
sv%ipar = 0
sv%ipar(1) = mld_global_solver_
!sv%ipar(10)=6
!sv%ipar(11)=0
!sv%ipar(12)=6

@ -291,7 +291,7 @@ contains
select case(psb_toupper(what))
#if defined(HAVE_MUMPS_)
case('MUMPS_AS_SEQUENTIAL')
case('MUMPS_LOC_GLOB')
sv%ipar(1)=val
case('MUMPS_PRINT_ERR')
sv%ipar(2)=val
@ -400,8 +400,9 @@ contains
! INSTANTIATION OF sv%id needed to set parmater but mpi communicator needed
! sv%id%job = -1
! sv%id%par=1
! call dmumps(sv%id)
sv%ipar(1)=2
! call dmumps(sv%id)
sv%ipar = 0
sv%ipar(1) = mld_global_solver_
!sv%ipar(10)=6
!sv%ipar(11)=0
!sv%ipar(12)=6

@ -291,7 +291,7 @@ contains
select case(psb_toupper(what))
#if defined(HAVE_MUMPS_)
case('MUMPS_AS_SEQUENTIAL')
case('MUMPS_LOC_GLOB')
sv%ipar(1)=val
case('MUMPS_PRINT_ERR')
sv%ipar(2)=val
@ -400,8 +400,9 @@ contains
! INSTANTIATION OF sv%id needed to set parmater but mpi communicator needed
! sv%id%job = -1
! sv%id%par=1
! call dmumps(sv%id)
sv%ipar(1)=2
! call dmumps(sv%id)
sv%ipar = 0
sv%ipar(1) = mld_global_solver_
!sv%ipar(10)=6
!sv%ipar(11)=0
!sv%ipar(12)=6

Loading…
Cancel
Save