Makes sense. Thanks again ! On Mon, 23 Jan 2023, 16:28 Jose E. Roman, <[email protected]> wrote:
> Here is the explanation. With shift-and-invert, two main things must be > done at STSetUp: 1) build the matrix A-sigma*B, (2) factorize it. Normally > this is done at the beginning of EPSSolve. Before that you can set PC > options, but the problem is that MUMPS options belong to Mat, not PC, so > step 1) must be done beforehand. But you cannot call PCSetUp because you > have not yet configured MUMPS options. Around version 3.12 we split the > implementation of STSetUp so that 1) and 2) can be done separately. > STGetOperator is what triggers 1). > > Jose > > > > El 23 ene 2023, a las 13:13, Quentin Chevalier < > [email protected]> escribió: > > > > Many thanks Jose, it works beautifully ! > > > > I'm at a loss as to why, but thanks for the quick fix ! > > > > Quentin > > > > > > > > Quentin CHEVALIER – IA parcours recherche > > > > LadHyX - Ecole polytechnique > > > > __________ > > > > > > > > On Sun, 22 Jan 2023 at 10:58, Jose E. Roman <[email protected]> wrote: > >> > >> You have to call ST.getOperator() as is done in this C example: > >> > https://slepc.upv.es/documentation/current/src/eps/tutorials/ex43.c.html > >> > >> Jose > >> > >> > >>> El 22 ene 2023, a las 10:40, Quentin Chevalier < > [email protected]> escribió: > >>> > >>> Hello PETSc users, > >>> > >>> 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 > https://mumps-solver.org/doc/userguide_5.5.1.pdf, I figured the fix would > be to increase ICNTL(14). > >>> > >>> 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". > >>> > >>> Here's the code snippet that is failing : > >>> # Solver > >>> EPS = SLEPc.EPS().create(COMM_WORLD) > >>> EPS.setOperators(-A,M) # Solve Ax=sigma*Mx > >>> EPS.setProblemType(SLEPc.EPS.ProblemType.PGNHEP) # Specify that A is > not hermitian, but M is semi-definite > >>> EPS.setWhichEigenpairs(EPS.Which.TARGET_MAGNITUDE) # Find eigenvalues > close to sigma > >>> EPS.setTarget(sigma) > >>> EPS.setDimensions(2,10) # Find k eigenvalues only with max number of > Lanczos vectors > >>> EPS.setTolerances(1e-9,100) # Set absolute tolerance and number of > iterations > >>> # Spectral transform > >>> ST = EPS.getST(); ST.setType('sinvert') > >>> # Krylov subspace > >>> KSP = ST.getKSP() > >>> KSP.setTolerances(rtol=1e-6, atol=1e-9, max_it=100) > >>> # Krylov subspace > >>> KSP.setType('preonly') > >>> # Preconditioner > >>> PC = KSP.getPC(); PC.setType('lu') > >>> PC.setFactorSolverType('mumps') > >>> KSP.setFromOptions() > >>> EPS.setFromOptions() > >>> PC.getFactorMatrix().setMumpsIcntl(14,50) > >>> print(f"Solver launch for sig={sigma:.1f}...",flush=True) > >>> EPS.solve() > >>> n=EPS.getConverged() > >>> > >>> For context, matrix A is complex, size 500k x 500k but AIJ sparse, and > I'm running this code on 36 nodes. > >>> > >>> 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. > >>> > >>> Cheers, > >>> > >>> Quentin > >> > >
