<div dir="ltr"><div dir="ltr">On Wed, Dec 4, 2024 at 4:44 AM Blauth, Sebastian <<a href="mailto:sebastian.blauth@itwm.fraunhofer.de">sebastian.blauth@itwm.fraunhofer.de</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="msg1592157364818809719"><div lang="DE" style="overflow-wrap: break-word;"><div class="m_-1173074726079899092WordSection1"><p class="MsoNormal">Hi everyone,<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><span lang="EN-US">I wanted to try nonlinear preconditioning for solving nonlinear systems. The problems arise from PDEs discretized with FEniCS and I have successfully implemented a wrapper for SNES. However, once I want to try nonlinear preconditioning by adding the option “-npc_snes_type newtonls” (or other solvers such as nrichardson), I get the error code 56.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">My approach looks something like this<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">from petsc4py import PETSc<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">snes = PETSc.SNES().create()<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">snes.setFunction(self.assemble_function, self.residual_petsc)<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">snes.setJacobian(self.assemble_jacobian, self.A_petsc, self.P_petsc)<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">snes.setFromOptions()<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">snes.solve(None, self.u.vector().vec())<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">snes.destroy()<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">I don’t think that my user defined functions are problematic. The code runs well with the options (just an example)<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">-snes_type newtonls<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">-snes_rtol 1e-6<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">-snes_monitor<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">-ksp_type gmres<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">-ksp_monitor_true_residual<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">-pc_type lu<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">-pc_factor_mat_solver_type mumps<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">-mat_mumps_icntl_24<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">Here, the gmres is just used to verify that the direct solver works as expected. Newton Krylov methods also work well.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">However, once I use<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">-snes_type nrichardson<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">-npc_snes_type newtonls<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">-npc_snes_max_it 4<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">(as discussed e.g. in <a href="https://urldefense.us/v3/__https://climatemodeling.org/*rmills/talks/PSU-ACM-seminar-2024.pdf__;fg!!G_uCfscf7eWS!ZpQxakVxVcyih0WUbW_MxFNHXR0tUbZAvis8z497q782yqbJraYBBCMst79xJm6nlGdBUqW3I2vIDAtJiUTR$" target="_blank">https://climatemodeling.org/~rmills/talks/PSU-ACM-seminar-2024.pdf</a>) I get the error message<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">File "/p/tv/blauths/cashocs/cashocs/nonlinear_solvers/snes.py", line 250, in solve<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">    snes.solve(None, self.u.vector().vec())<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">  File "petsc4py/PETSc/SNES.pyx", line 1555, in petsc4py.PETSc.SNES.solve<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">petsc4py.PETSc.Error: error code 56<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">I would be really grateful if someone could point me to the right direction on how to use nonlinear precondition with petsc4py.</span></p></div></div></div></blockquote><div><br></div><div>56 is PETSC_ERR_SUP, which means we hit an unsupported operation. petsc4py preserves the stack trace, so FEniCS should not be throwing it away (along with the error message). Maybe run in the debugger so we can see the error message and stack?</div><div><br></div><div>  Thanks,</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 class="msg1592157364818809719"><div lang="DE" style="overflow-wrap: break-word;"><div class="m_-1173074726079899092WordSection1"><p class="MsoNormal"><span lang="EN-US"><u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">Thanks a lot in advance,<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">Sebastian<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span>--<u></u><u></u></span></p><p class="MsoNormal"><span>Dr. Sebastian Blauth<u></u><u></u></span></p><p class="MsoNormal"><span>Fraunhofer-Institut für<u></u><u></u></span></p><p class="MsoNormal"><span>Techno- und Wirtschaftsmathematik ITWM<u></u><u></u></span></p><p class="MsoNormal"><span>Abteilung Transportvorgänge<u></u><u></u></span></p><p class="MsoNormal"><span>Fraunhofer-Platz 1, 67663 Kaiserslautern<u></u><u></u></span></p><p class="MsoNormal"><span>Telefon: +49 631 31600-4968<u></u><u></u></span></p><p class="MsoNormal"><span><a href="mailto:sebastian.blauth@itwm.fraunhofer.de" target="_blank"><span style="color:blue">sebastian.blauth@itwm.fraunhofer.de</span></a><u></u><u></u></span></p><p class="MsoNormal"><span><a href="https://urldefense.us/v3/__https://www.itwm.fraunhofer.de__;!!G_uCfscf7eWS!ZpQxakVxVcyih0WUbW_MxFNHXR0tUbZAvis8z497q782yqbJraYBBCMst79xJm6nlGdBUqW3I2vIDJ9nKGZK$" target="_blank"><span style="color:blue">https://www.itwm.fraunhofer.de</span></a><u></u><u></u></span></p><p class="MsoNormal"><u></u> <u></u></p></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!ZpQxakVxVcyih0WUbW_MxFNHXR0tUbZAvis8z497q782yqbJraYBBCMst79xJm6nlGdBUqW3I2vIDIJYMNfe$" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>