[petsc-users] On QN + Fieldsplit

Nicolás Barnafi nabw91 at gmail.com
Tue Oct 12 09:27:37 CDT 2021


Thank you for the support. I rewrote the initialization in a simpler way,
now it works as expected:

> dofmap_s = V.sub(0).dofmap().dofs(); is_s =
PETSc.IS().createGeneral(dofmap_s)
> dofmap_p = V.sub(1).dofmap().dofs(); is_p =
PETSc.IS().createGeneral(dofmap_p)
> snes = PETSc.SNES().create(MPI.COMM_WORLD)
> snes.setFunction(problem.F, b.vec()); snes.setJacobian(problem.J,
J_mat.mat())
> pc = snes.ksp.getPC()
> pc.setType('fieldsplit')
> pc.setFieldSplitIS((None, is_s), (None, is_p))
> snes.setFromOptions()
> snes.solve(None, problem.u.vector().vec())

Apparently trying to setup the solver's internals is not recommended. As a
side note, I tried also setting up the KSP using 'SNESSetKSP', but this
solution is not so good as giving the command 'snes_ksp_ew' does nothing,
even though it gets correctly read as shown by snes.view().

Thanks for the help!
Best,
Nicolas

On Tue, Oct 12, 2021 at 4:23 PM Matthew Knepley <knepley at gmail.com> wrote:

> I looked over every place we use that error code. I do not think it is
> coming from PETSc, but rather from petsc4py. However, something
> is eating the error message, and I think Stefano indicated. My first step
> would be to get the FEniCS folks to display the error message.
>
> Another option is to just run it in Firedrake since I think we can see the
> stack properly there.
>
>   Thanks,
>
>      Matt
>
> On Tue, Oct 12, 2021 at 8:37 AM Nicolás Barnafi <nabw91 at gmail.com> wrote:
>
>> 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.zampini at gmail.com> wrote:
>>
>>>
>>>
>>> Il giorno mar 12 ott 2021 alle ore 13:56 Nicolás Barnafi <
>>> nabw91 at 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
>>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which their
> experiments lead.
> -- Norbert Wiener
>
> https://www.cse.buffalo.edu/~knepley/
> <http://www.cse.buffalo.edu/~knepley/>
>


-- 
Nicolás Alejandro Barnafi Wittwer
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20211012/7b3f7cd6/attachment.html>


More information about the petsc-users mailing list