<div dir="ltr"><div dir="ltr">On Tue, Mar 22, 2022 at 1:44 PM Marco Cisternino <<a href="mailto:marco.cisternino@optimad.it">marco.cisternino@optimad.it</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-GB" style="overflow-wrap: break-word;">
<div class="gmail-m_2029495879865394869WordSection1">
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">Thank you, Matt.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">I rechecked and the mean value of the solution is 1.0-15!!<br>
Clumsily,  I was checking an integral average and on an octree mesh it is not exactly the same.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">Thanks again!</span></p></div></div></blockquote><div><br></div><div>Great! I am happy everything is working.</div><div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-GB" style="overflow-wrap: break-word;"><div class="gmail-m_2029495879865394869WordSection1">
<p class="MsoNormal"><span style="font-family:"Mulish Medium"">Marco Cisternino</span><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif"><u></u> <u></u></span></p>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>>
<br>
<b>Sent:</b> martedì 22 marzo 2022 15:22<br>
<b>To:</b> Marco Cisternino <<a href="mailto:marco.cisternino@optimad.it" target="_blank">marco.cisternino@optimad.it</a>><br>
<b>Cc:</b> Barry Smith <<a href="mailto:bsmith@petsc.dev" target="_blank">bsmith@petsc.dev</a>>; <a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a><br>
<b>Subject:</b> Re: [petsc-users] Null space and preconditioners<u></u><u></u></span></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Tue, Mar 22, 2022 at 9:55 AM Marco Cisternino <<a href="mailto:marco.cisternino@optimad.it" target="_blank">marco.cisternino@optimad.it</a>> wrote:<u></u><u></u></p>
</div>
<div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">Thank you Barry!<br>
No, no reason for FGMRES (some old tests showed shorter wall-times relative to GMRES), I’m going to use GMRES.<br>
I tried GMRES with GAMG using PCSVD on the coarser level on real cases, larger than the toy case, I cannot get machine epsilon mean value of the solution, as in the toy case but about 10e-5, which is much better than before. The rest of GAMG is on default configuration.
 The mesh is much more complicated being an octree with immersed geometries. I get the same behaviour using GMRES+ASM+ILU as well.</span><u></u><u></u></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">This does not seem possible. Setting the null space will remove the mean value. Something is not configured correctly here. Can you show -ksp_view<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">for this solve?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">  Thanks,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">    Matt<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">I cannot really get why the solution is not at zero mean value. I’m using a rtol~1.0e-8 but I get the same mean value using rtol~1.o-6,
 I tried 1.0-12 too, but no improvement in the constant, definitely tiny but not zero.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">Thanks.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif"> </span><u></u><u></u></p>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Medium"">Marco Cisternino</span><u></u><u></u></p>
</div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif"> </span><u></u><u></u></p>
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Barry Smith <</span><a href="mailto:bsmith@petsc.dev" target="_blank"><span lang="EN-US">bsmith@petsc.dev</span></a><span lang="EN-US">>
<br>
<b>Sent:</b> lunedì 21 marzo 2022 19:49<br>
<b>To:</b> Marco Cisternino <</span><a href="mailto:marco.cisternino@optimad.it" target="_blank"><span lang="EN-US">marco.cisternino@optimad.it</span></a><span lang="EN-US">><br>
<b>Cc:</b> Mark Adams <</span><a href="mailto:mfadams@lbl.gov" target="_blank"><span lang="EN-US">mfadams@lbl.gov</span></a><span lang="EN-US">>;
</span><a href="mailto:petsc-users@mcs.anl.gov" target="_blank"><span lang="EN-US">petsc-users@mcs.anl.gov</span></a><span lang="EN-US"><br>
<b>Subject:</b> Re: [petsc-users] Null space and preconditioners</span><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<p class="MsoNormal">  Marco,<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">     I have confirmed your results. <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">     Urgg, it appears we do not have something well documented. The removal of the null space only works for left preconditioned solvers and FGMRES only works with right preconditioning.
 Here is the reasoning. <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">     The Krylov space for left preconditioning is built from [r, BAr, (BA)^2 r, ...] and the solution space is built from this basis. If A has a null space of n then the left preconditioned
 Krylov methods simply remove n from the "full" Krylov space after applying each B preconditioner and the resulting "reduced" Krylov space has no components in the n directions hence the solution built by GMRES naturally has no component in the n.  <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">     But with right preconditioning the Krylov space is [s ABs (AB)^2 s, ....] We would need to remove B^-1 n from the Krylov space so that (A B) B^-1 n = 0 In general we don't
 have any way of applying B^-1 to a vector so we cannot create the appropriate "reduced" Krylov space. <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">     If I run with GMRES (which defaults to left preconditioner) and the options <span style="font-size:10.5pt;font-family:Menlo,serif">./testPreconditioners -pc_type gamg -ksp_type
 gmres -ksp_monitor_true_residual -ksp_rtol 1.e-12 -ksp_view -mg_coarse_pc_type svd</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">  Then  it handles the null space correctly and the solution has <span style="font-size:10.5pt;font-family:Menlo,serif">Solution mean = 4.51028e-17</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Is there any reason to use FGMRES instead of GMRES? You just cannot use GMRES as the smoother inside GAMG if you use GMRES on the outside, but for pressure equations you don't want
 use such a strong smoother anyways.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  Barry<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  I feel we should add some information to the documentation on the removal of the null space to the user's manual when using right preconditioning and maybe even have an error
 check in the code so that people don't fall into this trap. But I am not sure exactly what to do. When the A and B are both symmetric I think special stuff happens that doesn't require providing a null space; but I am not sure. <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12pt"><u></u> <u></u></p>
<blockquote style="margin-top:5pt;margin-bottom:5pt">
<div>
<p class="MsoNormal">On Mar 21, 2022, at 12:41 PM, Marco Cisternino <<a href="mailto:marco.cisternino@optimad.it" target="_blank">marco.cisternino@optimad.it</a>> wrote:<u></u><u></u></p>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">Thank you, Mark.<br>
However, doing this with my toy code</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">mpirun -n 1 ./testpreconditioner -pc_type gamg -pc_gamg_use_parallel_coarse_grid_solver -mg_coarse_pc_type jacobi -mg_coarse_ksp_type
 cg</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">I get 16 inf elements. Do I miss anything?</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">Thanks again</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Medium"">Marco Cisternino</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif"> </span><u></u><u></u></p>
</div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm">
<div>
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span class="gmail-m_2029495879865394869gmail-m2296111341708461734apple-converted-space"><span lang="EN-US"> </span></span><span lang="EN-US">Mark Adams <</span><a href="mailto:mfadams@lbl.gov" target="_blank"><span lang="EN-US">mfadams@lbl.gov</span></a><span lang="EN-US">><span class="gmail-m_2029495879865394869gmail-m2296111341708461734apple-converted-space"> </span><br>
<b>Sent:</b><span class="gmail-m_2029495879865394869gmail-m2296111341708461734apple-converted-space"> </span>lunedì 21 marzo 2022 17:31<br>
<b>To:</b><span class="gmail-m_2029495879865394869gmail-m2296111341708461734apple-converted-space"> </span>Marco Cisternino <</span><a href="mailto:marco.cisternino@optimad.it" target="_blank"><span lang="EN-US">marco.cisternino@optimad.it</span></a><span lang="EN-US">><br>
<b>Cc:</b><span class="gmail-m_2029495879865394869gmail-m2296111341708461734apple-converted-space"> </span></span><a href="mailto:petsc-users@mcs.anl.gov" target="_blank"><span lang="EN-US">petsc-users@mcs.anl.gov</span></a><span lang="EN-US"><br>
<b>Subject:</b><span class="gmail-m_2029495879865394869gmail-m2296111341708461734apple-converted-space"> </span>Re: [petsc-users] Null space and preconditioners</span><u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">And for GAMG you can use:<u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">-pc_gamg_use_parallel_coarse_grid_solver -mg_coarse_pc_type jacobi -mg_coarse_ksp_type cg<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">Note if you are using more that one MPI process you can use 'lu' instead of 'jacobi'<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">If GAMG converges fast enough it can solve before the constant creeps in and works without cleaning in the KSP method.<u></u><u></u></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal">On Mon, Mar 21, 2022 at 12:06 PM Mark Adams <<a href="mailto:mfadams@lbl.gov" target="_blank">mfadams@lbl.gov</a>> wrote:<u></u><u></u></p>
</div>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<div>
<p class="MsoNormal">The solution for Neumann problems can "float away" if the constant is not controlled in some way because floating point errors can introduce it even if your RHS is exactly orthogonal
 to it.<u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">You should use a special coarse grid solver for GAMG but it seems to be working for you.<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">I have lost track of the simply way to have the KSP solver clean the constant out, which is what you want.<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">can someone help Marco?<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">Mark<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal">On Mon, Mar 21, 2022 at 8:18 AM Marco Cisternino <<a href="mailto:marco.cisternino@optimad.it" target="_blank">marco.cisternino@optimad.it</a>> wrote:<u></u><u></u></p>
</div>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">Good morning,</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">I’m observing an unexpected (to me) behaviour of my code.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">I tried to reduce the problem in a toy code here attached.<br>
The toy code archive contains a small main, a matrix and a rhs.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">The toy code solves the linear system and check the norms and the mean of the solution.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">The problem into the matrix and the rhs is the finite volume discretization of the pressure equation of an incompressible NS solver.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">It has been cooked as tiny as possible (16 cells!).</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">It is important to say that it is an elliptic problem with homogeneous Neumann boundary conditions only, for this reason the toy code
 sets a null space containing the constant.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">The unexpected (to me) behaviour is evident by launching the code using different preconditioners, using -pc-type <pctype><br>
I tested using PCNONE (“none”), PCGAMG (“gamg”) and PCILU (“ilu”). The default solver is KSPFGMRES.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">Using the three PC, I get 3 different solutions. It seems to me that they differ in the mean value, but GAMG is impressive.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">PCNONE gives me the zero mean solution I expected. What about the others?</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">Asking for residuals monitor, the ratio ||r||/||b|| shows convergence for PCNONE and PCILU (~10^-16), but it stalls for PCGAMG (~10^-4).</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">I cannot see why. Am I doing anything wrong or incorrectly thinking about the expected behaviour?</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">Generalizing to larger mesh the behaviour is similar.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif">Thank you for any help.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Light",serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Mulish Medium"">Marco Cisternino</span><u></u><u></u></p>
</div>
</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>