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
