<div dir="ltr">Hello PETSc users,<br><br><div>I'm getting an INFOG(1)=-9 and INFO(2)=27 error on an eigenvalue code based on dolfinx run in a docker container. Based on <a href="https://mumps-solver.org/doc/userguide_5.5.1.pdf">https://mumps-solver.org/doc/userguide_5.5.1.pdf</a>, I figured the fix would be to increase ICNTL(14).</div><div><br></div><div>I'm coding in python through the petsc4py/slepc4py wrapper. I found a Mat.setMumpsIcntl method but I can't seem to place it properly and always obtain another error : "Operation done in wrong order and the like".<br></div><div><br></div><div>Here's the code snippet that is failing :<div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Droid Sans Mono","monospace",monospace;font-weight:normal;font-size:14px;line-height:19px;white-space:pre"><div><span style="color:rgb(106,153,85)"># Solver</span></div><div><span style="color:rgb(79,193,255)">EPS</span><span style="color:rgb(212,212,212)"> = SLEPc</span><span style="color:rgb(212,212,212)">.EPS().create(COMM_WORLD</span><span style="color:rgb(212,212,212)">)</span></div><div><span style="color:rgb(79,193,255)">EPS</span><span style="color:rgb(212,212,212)">.setOperators(-A</span><span style="color:rgb(212,212,212)">,M</span><span style="color:rgb(212,212,212)">) </span><span style="color:rgb(106,153,85)"># Solve Ax=sigma*Mx</span></div><div><span style="color:rgb(79,193,255)">EPS</span><span style="color:rgb(212,212,212)">.setProblemType(<span style="color:rgb(212,212,212)">SLEPc</span><span style="color:rgb(212,212,212)"></span></span><span style="color:rgb(212,212,212)">.EPS.ProblemType.PGNHEP) </span><span style="color:rgb(106,153,85)"># Specify that A is not hermitian, but M is semi-definite</span></div><div><span style="color:rgb(79,193,255)">EPS</span><span style="color:rgb(212,212,212)">.setWhichEigenpairs(</span><span style="color:rgb(79,193,255)">EPS</span><span style="color:rgb(212,212,212)">.Which.TARGET_MAGNITUDE) </span><span style="color:rgb(106,153,85)"># Find eigenvalues close to sigma</span></div><div><span style="color:rgb(79,193,255)">EPS</span><span style="color:rgb(212,212,212)">.setTarget(</span><span style="color:rgb(156,220,254)">sigma</span><span style="color:rgb(212,212,212)">)</span><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Droid Sans Mono","monospace",monospace;font-weight:normal;font-size:14px;line-height:19px;white-space:pre"><div></div><div><span style="color:rgb(156,220,254)">EPS</span><span style="color:rgb(212,212,212)">.setDimensions(</span>2<span style="color:rgb(212,212,212)">,</span><span style="color:rgb(181,206,168)">10</span><span style="color:rgb(212,212,212)">) </span><span style="color:rgb(106,153,85)"># Find k eigenvalues only with max number of Lanczos vectors</span></div><div><span style="color:rgb(156,220,254)">EPS</span><span style="color:rgb(212,212,212)">.setTolerances(1e-9</span><span style="color:rgb(212,212,212)">,100</span><span style="color:rgb(212,212,212)">) </span><span style="color:rgb(106,153,85)"># Set absolute tolerance and number of iterations</span></div></div></div><span style="color:rgb(106,153,85)"># Spectral transform</span><div><span style="color:rgb(79,193,255)">ST</span><span style="color:rgb(212,212,212)"> = </span><span style="color:rgb(79,193,255)">EPS</span><span style="color:rgb(212,212,212)">.getST(); </span><span style="color:rgb(79,193,255)">ST</span><span style="color:rgb(212,212,212)">.setType(</span><span style="color:rgb(206,145,120)">'sinvert'</span><span style="color:rgb(212,212,212)">)</span></div><div><span style="color:rgb(106,153,85)"># Krylov subspace</span></div><div><span style="color:rgb(79,193,255)">KSP</span><span style="color:rgb(212,212,212)"> = </span><span style="color:rgb(79,193,255)">ST</span><span style="color:rgb(212,212,212)">.getKSP()</span><div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Droid Sans Mono","monospace",monospace;font-weight:normal;font-size:14px;line-height:19px;white-space:pre"><div><span style="color:rgb(212,212,212)"></span></div></div></div><div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Droid Sans Mono","monospace",monospace;font-weight:normal;font-size:14px;line-height:19px;white-space:pre"><div></div><div><span style="color:rgb(156,220,254)">KSP</span><span style="color:rgb(212,212,212)">.setTolerances(</span><span style="color:rgb(156,220,254)">rtol</span><span style="color:rgb(212,212,212)">=1e-6</span><span style="color:rgb(212,212,212)">, </span><span style="color:rgb(156,220,254)">atol</span><span style="color:rgb(212,212,212)">=1e-9</span><span style="color:rgb(212,212,212)">, </span><span style="color:rgb(156,220,254)">max_it</span><span style="color:rgb(212,212,212)">=</span><span style="color:rgb(156,220,254)">100</span><span style="color:rgb(212,212,212)">)</span></div><div><span style="color:rgb(106,153,85)"># Krylov subspace</span></div><div><span style="color:rgb(156,220,254)">KSP</span><span style="color:rgb(212,212,212)">.setType(</span><span style="color:rgb(206,145,120)">'preonly'</span><span style="color:rgb(212,212,212)">)</span></div><div><span style="color:rgb(106,153,85)"># Preconditioner</span></div><div><span style="color:rgb(79,193,255)">PC</span><span style="color:rgb(212,212,212)"> = </span><span style="color:rgb(156,220,254)">KSP</span><span style="color:rgb(212,212,212)">.getPC(); </span><span style="color:rgb(79,193,255)">PC</span><span style="color:rgb(212,212,212)">.setType(</span><span style="color:rgb(206,145,120)">'lu'</span><span style="color:rgb(212,212,212)">)</span></div><div><span style="color:rgb(79,193,255)">PC</span><span style="color:rgb(212,212,212)">.setFactorSolverType(</span><span style="color:rgb(206,145,120)">'mumps'</span><span style="color:rgb(212,212,212)">)</span></div><div><span style="color:rgb(156,220,254)">KSP</span><span style="color:rgb(212,212,212)">.setFromOptions()</span></div></div></div></div><div><span style="color:rgb(79,193,255)">EPS</span><span style="color:rgb(212,212,212)">.setFromOptions()</span><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Droid Sans Mono","monospace",monospace;font-weight:normal;font-size:14px;line-height:19px;white-space:pre"><div></div><div><span style="color:rgb(79,193,255)">PC</span><span style="color:rgb(212,212,212)">.getFactorMatrix().setMumpsIcntl(</span><span style="color:rgb(181,206,168)">14</span><span style="color:rgb(212,212,212)">,</span><span style="color:rgb(181,206,168)">50</span><span style="color:rgb(212,212,212)">)</span></div></div></div><div><span style="color:rgb(220,220,170)">print</span><span style="color:rgb(212,212,212)">(</span><span style="color:rgb(86,156,214)">f</span><span style="color:rgb(206,145,120)">"Solver launch for sig=</span><span style="color:rgb(86,156,214)">{</span><span style="color:rgb(156,220,254)">sigma</span><span style="color:rgb(86,156,214)">:.1f}</span><span style="color:rgb(206,145,120)">..."</span><span style="color:rgb(212,212,212)">,</span><span style="color:rgb(156,220,254)">flush</span><span style="color:rgb(212,212,212)">=</span><span style="color:rgb(86,156,214)">True</span><span style="color:rgb(212,212,212)">)</span></div><div><span style="color:rgb(79,193,255)">EPS</span><span style="color:rgb(212,212,212)">.solve()</span></div><div><span style="color:rgb(156,220,254)">n</span><span style="color:rgb(212,212,212)">=</span><span style="color:rgb(79,193,255)">EPS</span><span style="color:rgb(212,212,212)">.getConverged()</span></div></div></div><div><br></div><div>For context, matrix A is complex, size 500k x 500k but AIJ sparse, and I'm running this code on 36 nodes.</div><div><br></div><div>I'd appreciate any insight on how to fix this issue, it's not clear to me what the order of operations should be. Funnily enough, it's very shift-dependent.<br></div><div><br></div><div>Cheers,<br></div><div><br></div>Quentin</div>