Thank you Stefano for the help. I added the lines you indicated, but the error remains the same, here goes snes.view() + error
> SNES Object: 1 MPI processes > type: qn > SNES has not been set up so information may be incomplete > type is BROYDEN, restart type is DEFAULT, scale type is JACOBIAN > Stored subspace size: 10 > Using the single reduction variant. > maximum iterations=10000, maximum function evaluations=30000 > tolerances: relative=1e-08, absolute=1e-50, solution=1e-08 > total number of function evaluations=0 > norm schedule ALWAYS > SNESLineSearch Object: 1 MPI processes > type: basic > maxstep=1.000000e+08, minlambda=1.000000e-12 > tolerances: relative=1.000000e-08, absolute=1.000000e-15, lambda=1.000000e-08 > maximum iterations=1 > Traceback (most recent call last): > File "Twist.py", line 234, in <module> > snes.setUp() > File "PETSc/SNES.pyx", line 530, in petsc4py.PETSc.SNES.setUp > petsc4py.PETSc.Error: error code 83 On Tue, Oct 12, 2021 at 2:07 PM Stefano Zampini <stefano.zamp...@gmail.com> wrote: > > > Il giorno mar 12 ott 2021 alle ore 13:56 Nicolás Barnafi <nab...@gmail.com> > ha scritto: > >> Hello PETSc users, >> >> first email sent! >> I am creating a SNES solver using fenics, my example runs smoothly with >> 'newtonls', but gives a strange missing function error (error 83): >> >> > Dolphin swallows any useful error information returned from PETSc. You can > try using the below code snippet at the beginning of your script > > from petsc4py import PETSc > from dolfin import * > # Remove the dolfin error handler > PETSc.Sys.pushErrorHandler('python') > > > >> >> these are the relevant lines of code where I setup the solver: >> >> > problem = SNESProblem(Res, sol, bcs) >> > b = PETScVector() # same as b = PETSc.Vec() >> > J_mat = PETScMatrix() >> > snes = PETSc.SNES().create(MPI.COMM_WORLD) >> > snes.setFunction(problem.F, b.vec()) >> > snes.setJacobian(problem.J, J_mat.mat()) >> > # Set up fieldsplit >> > ksp = snes.ksp >> > ksp.setOperators(J_mat.mat()) >> > pc = ksp.pc >> > pc.setType('fieldsplit') >> > dofmap_s = V.sub(0).dofmap().dofs() >> > dofmap_p = V.sub(1).dofmap().dofs() >> > is_s = PETSc.IS().createGeneral(dofmap_s) >> > is_p = PETSc.IS().createGeneral(dofmap_p) >> > pc.setFieldSplitIS((None, is_s), (None, is_p)) >> > pc.setFromOptions() >> > snes.setFromOptions() >> > snes.setUp() >> >> > If it can be useful, this are the outputs of snes.view(), ksp.view() and >> pc.view(): >> >> > type: qn >> > SNES has not been set up so information may be incomplete >> > type is BROYDEN, restart type is DEFAULT, scale type is JACOBIAN >> > Stored subspace size: 10 >> > Using the single reduction variant. >> > maximum iterations=10000, maximum function evaluations=30000 >> > tolerances: relative=1e-08, absolute=1e-50, solution=1e-08 >> > total number of function evaluations=0 >> > norm schedule ALWAYS >> > SNESLineSearch Object: 4 MPI processes >> > type: basic >> > maxstep=1.000000e+08, minlambda=1.000000e-12 >> > tolerances: relative=1.000000e-08, absolute=1.000000e-15, >> lambda=1.000000e-08 >> > maximum iterations=1 >> > KSP Object: 4 MPI processes >> > type: gmres >> > restart=1000, using Modified Gram-Schmidt Orthogonalization >> > happy breakdown tolerance 1e-30 >> > maximum iterations=1000, initial guess is zero >> > tolerances: relative=1e-05, absolute=1e-50, divergence=10000. >> > left preconditioning >> > using UNPRECONDITIONED norm type for convergence test >> > PC Object: 4 MPI processes >> > type: fieldsplit >> > PC has not been set up so information may be incomplete >> > FieldSplit with Schur preconditioner, factorization FULL >> >> I know that PC is not setup, but if I do it before setting up the SNES, >> the error persists. Thanks in advance for your help. >> >> Best, >> Nicolas >> -- >> Nicolás Alejandro Barnafi Wittwer >> > > > -- > Stefano > -- Nicolás Alejandro Barnafi Wittwer