<div dir="ltr"><div dir="ltr">On Mon, Oct 27, 2025 at 11:48 AM SCOTTO Alexandre <<a href="mailto:alexandre.scotto@irt-saintexupery.com">alexandre.scotto@irt-saintexupery.com</a>> wrote:</div><div class="gmail_quote gmail_quote_container"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="msg8276296404745482153">
<div lang="EN-US">
<div class="m_8276296404745482153WordSection1">
<p class="MsoNormal"><span lang="FR" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Hello Matthew,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="FR" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">I was indeed wondering if there was a clean way to match a given set of options to a specific KSP instance. Does the following makes sense:<u></u><u></u></span></p>
<p class="m_8276296404745482153MsoListParagraph"><u></u><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><span>1.<span style="font:7pt "Times New Roman"">
</span></span></span><u></u><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Associate a given a KSP instance a unique string, e.g.
</span><span style="font-size:11pt;font-family:Calibri,sans-serif;color:black">“toto”</span><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"> and call
</span><span style="font-size:11pt;font-family:Calibri,sans-serif;color:black">ksp_1.setOptionsPrefix(“toto”)</span><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u><u></u></span></p>
<p class="m_8276296404745482153MsoListParagraph"><u></u><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><span>2.<span style="font:7pt "Times New Roman"">
</span></span></span><u></u><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Create an option database with corresponding prefix:
</span><span style="font-size:11pt;font-family:Calibri,sans-serif;color:black">options = Options(“toto_ksp_”)</span><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u><u></u></span></p>
<p class="m_8276296404745482153MsoListParagraph"><u></u><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><span>3.<span style="font:7pt "Times New Roman"">
</span></span></span><u></u><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Then a call to
</span><span style="font-size:11pt;font-family:Calibri,sans-serif;color:black">ksp_1.setFromOptions()</span><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"> will only consider entrees in the option database starting with
</span><span style="font-size:11pt;font-family:Calibri,sans-serif;color:black">“toto”</span></p></div></div></div></blockquote><div><br></div><div>Yes, that is how it works, although you would need</div><div><br></div><div> <span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14.6667px">sp_1.setOptionsPrefix(“toto_”)</span></div><div><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14.6667px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14.6667px"> Thanks,</span></div><div><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14.6667px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14.6667px"> Matt</span></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 class="msg8276296404745482153"><div lang="EN-US"><div class="m_8276296404745482153WordSection1">
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Regards,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Alexandre.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span lang="FR" style="font-size:11pt;font-family:Calibri,sans-serif">De :</span></b><span lang="FR" style="font-size:11pt;font-family:Calibri,sans-serif"> Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>>
<br>
<b>Envoyé :</b> lundi 27 octobre 2025 11:27<br>
<b>À :</b> SCOTTO Alexandre <<a href="mailto:alexandre.scotto@irt-saintexupery.com" target="_blank">alexandre.scotto@irt-saintexupery.com</a>><br>
<b>Cc :</b> <a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a><br>
<b>Objet :</b> Re: [petsc-users] Options database in petsc4py<u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Mon, Oct 27, 2025 at 10:24 AM SCOTTO Alexandre via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.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-left:4.8pt;margin-right:0cm">
<div>
<div>
<div>
<p class="MsoNormal">Dear PETSc Community,<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">In my developments, I am managing possibly several KSP solvers with options handled by the Options database. During my tests, I encountered the following behavior:<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><b>Code</b>:<u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span style="font-family:"Courier New";background:silver">options = PETSc.Options("ksp_")</span><u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span style="font-family:"Courier New";background:silver">options.setValue("atol", 7e-8)</span><u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span style="font-family:"Courier New";background:silver">options.view()</span><u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span style="font-family:"Courier New";background:silver"> </span><u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span style="font-family:"Courier New";background:silver">options.clear()</span><u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span style="font-family:"Courier New";background:silver">options.view()</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><b>Output</b>:<u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span style="font-family:"Courier New";background:silver">#PETSc Option Table entries:</span><u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span lang="FR" style="font-family:"Courier New";background:silver">-ksp_atol 7e-08 # (source: code)</span><u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span style="font-family:"Courier New";background:silver">#End of PETSc Option Table entries</span><u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span style="font-family:"Courier New";background:silver"> </span><u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span style="font-family:"Courier New";background:silver">#PETSc Option Table entries:</span><u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span style="font-family:"Courier New";background:silver">-ksp_atol 7e-08 # (source: code)</span><u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span style="font-family:"Courier New";background:silver">#End of PETSc Option Table entries</span><u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
<span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal">It seems that the
<span style="font-family:"Courier New";background:silver">clear()</span> method does not really clear the Option database. To ensure that the several KSP I deal with are set with their own options (without getting options from a KSP previously set), the only
way I found was to explicitly call the <span style="font-family:"Courier New";background:silver">
delValue()</span> method for all the option keys passed:<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="m_8276296404745482153m-5483869375695487431msolistparagraph">1.<span style="font-size:7pt">
</span>Iterate over a dictionary of options and use <span style="font-family:"Courier New";background:silver">
setValue(name, value)</span><u></u><u></u></p>
<p class="m_8276296404745482153m-5483869375695487431msolistparagraph">2.<span style="font-size:7pt">
</span>Set the KSP with option database: <span style="font-family:"Courier New";background:silver">
KSP.setFromOptions()</span><u></u><u></u></p>
<p class="m_8276296404745482153m-5483869375695487431msolistparagraph">3.<span style="font-size:7pt">
</span>Iterate over a the keys of the dictionary and <span style="font-family:"Courier New"">
use <span style="background:silver">delValue(name)</span></span> to effectively clear the option database.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">Does it seem normal to you, is there something I am missing out?<u></u><u></u></p>
</div>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">That for pointing out this bug.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">However, I don't think I would manage options this way. We normally give each separate solver a new _prefix_, meaning a string that prefaces all its options. That way they do not collide.<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-left:4.8pt;margin-right:0cm">
<div>
<div>
<div>
<p class="MsoNormal">Regards,<u></u><u></u></p>
<p class="MsoNormal">Alexandre Scotto.<u></u><u></u></p>
</div>
</div>
</div>
</blockquote>
</div>
<div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal"><span class="m_8276296404745482153gmailsignatureprefix">-- </span><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="https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!YMkD_E3cPBzKrGzS-WVqigVxG6DXZlQPuvqu6tLu_iC00xlFN2GbMAeTOK-jzVRPXE3L68ICKFUq6Gif_7Bl$" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div></blockquote></div><div><br clear="all"></div><div><br></div><span class="gmail_signature_prefix">-- </span><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="https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!YMkD_E3cPBzKrGzS-WVqigVxG6DXZlQPuvqu6tLu_iC00xlFN2GbMAeTOK-jzVRPXE3L68ICKFUq6Gif_7Bl$" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>