[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