[petsc-users] PetscDSSetJacobianPreconditioner causing DIVERGED_LINE_SEARCH for multi-field problem
Sander Arens
Sander.Arens at UGent.be
Thu Mar 3 11:02:44 CST 2016
Ok, thanks for clearing that up!
On 3 March 2016 at 18:00, Matthew Knepley <knepley at gmail.com> wrote:
> On Thu, Mar 3, 2016 at 10:48 AM, Sander Arens <Sander.Arens at ugent.be>
> wrote:
>
>> So is the block size here refering to the dimension of the near-nullspace
>> or has it something to do with the coarsening?
>>
>> I would have thought to also see the block size in this part:
>>
>
> Dang, that is a problem. It should have the correct block size when FS
> pulls it out of the overall matrix. This should be
> passed down using the block size of the IS. Something has been broken
> here. I will put it on my list of things to look at.
>
> Thanks,
>
> Matt
>
>
>> Mat Object: 1 MPI processes
>> type: seqaij
>> rows=1701, cols=1701
>> total: nonzeros=109359, allocated nonzeros=109359
>> total number of mallocs used during MatSetValues calls
>> =0
>> has attached near null space
>> using I-node routines: found 567 nodes, limit used
>> is 5
>>
>> Thanks,
>> Sander
>>
>>
>> On 3 March 2016 at 17:29, Matthew Knepley <knepley at gmail.com> wrote:
>>
>>> You can see the block size in the output
>>>
>>> Mat Object: 1 MPI processes
>>> type: seqaij
>>> rows=12, cols=12, bs=6
>>> total: nonzeros=144, allocated nonzeros=144
>>> total number of mallocs used during MatSetValues
>>> calls =0
>>> using I-node routines: found 3 nodes, limit used
>>> is 5
>>> linear system matrix = precond matrix:
>>> Mat Object: 1 MPI processes
>>> type: seqaij
>>> rows=12, cols=12, bs=6
>>> total: nonzeros=144, allocated nonzeros=144
>>> total number of mallocs used during MatSetValues calls =0
>>> using I-node routines: found 3 nodes, limit used is 5
>>>
>>> Thanks,
>>>
>>> Matt
>>>
>>> On Thu, Mar 3, 2016 at 10:28 AM, Sander Arens <Sander.Arens at ugent.be>
>>> wrote:
>>>
>>>> Sure, here it is.
>>>>
>>>> Thanks,
>>>> Sander
>>>>
>>>> On 3 March 2016 at 15:33, Matthew Knepley <knepley at gmail.com> wrote:
>>>>
>>>>> On Thu, Mar 3, 2016 at 8:05 AM, Sander Arens <Sander.Arens at ugent.be>
>>>>> wrote:
>>>>>
>>>>>> Yes, the matrix is created by one of the assembly functions in Plex,
>>>>>> so that answers my question. I was confused by this because I couldn't see
>>>>>> this information when using -snes_view.
>>>>>>
>>>>>
>>>>> Hmm, then something is wrong because the block size should be printed
>>>>> for the matrix at the end of the solver in -snes_view, Can you
>>>>> send that to me?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Matt
>>>>>
>>>>>
>>>>>> Thanks for the helpful replies,
>>>>>> Sander
>>>>>>
>>>>>> On 3 March 2016 at 14:52, Matthew Knepley <knepley at gmail.com> wrote:
>>>>>>
>>>>>>> On Thu, Mar 3, 2016 at 7:49 AM, Sander Arens <Sander.Arens at ugent.be>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> And how can I do this? Because when I look at all the options with
>>>>>>>> -help I can strangely enough only find -fieldsplit_pressure_mat_block_size
>>>>>>>> and not -fieldsplit_displacement_mat_block_size.
>>>>>>>>
>>>>>>>
>>>>>>> Maybe I am missing something here. The matrix from which you
>>>>>>> calculate the preconditioner using GAMG must be created somewhere. Why
>>>>>>> is the block size not specified at creation time? If the matrix is
>>>>>>> created by one of the assembly functions in Plex, and the PetscSection has
>>>>>>> a number of field components, then the block size will already be
>>>>>>> set.
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Matt
>>>>>>>
>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Sander
>>>>>>>>
>>>>>>>> On 3 March 2016 at 14:21, Matthew Knepley <knepley at gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> On Thu, Mar 3, 2016 at 6:20 AM, Sander Arens <
>>>>>>>>> Sander.Arens at ugent.be> wrote:
>>>>>>>>>
>>>>>>>>>> Ok, I forgot to call SNESSetJacobian(snes, J, P, NULL, NULL) with
>>>>>>>>>> J != P, which caused to write the mass matrix into the (otherwise zero)
>>>>>>>>>> (1,1) block of the Jacobian and which was the reason for the linesearch to
>>>>>>>>>> fail.
>>>>>>>>>> However, after fixing that and trying to solve it with FieldSplit
>>>>>>>>>> with LU factorization for the (0,0) block it failed because there were zero
>>>>>>>>>> pivots for all rows.
>>>>>>>>>>
>>>>>>>>>> Anyway, I found out that attaching the mass matrix to the
>>>>>>>>>> Lagrange multiplier field also worked.
>>>>>>>>>>
>>>>>>>>>> Another related question for my elasticity problem: after
>>>>>>>>>> creating the rigid body modes with DMPlexCreateRigidBody and attaching it
>>>>>>>>>> to the displacement field, does the matrix block size of the (0,0) block
>>>>>>>>>> still have to be set for good performance with gamg? If so, how can I do
>>>>>>>>>> this?
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Yes, it should be enough to set the block size of the
>>>>>>>>> preconditioner matrix.
>>>>>>>>>
>>>>>>>>> Matt
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Sander
>>>>>>>>>>
>>>>>>>>>> On 2 March 2016 at 12:25, Matthew Knepley <knepley at gmail.com>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> On Wed, Mar 2, 2016 at 5:13 AM, Sander Arens <
>>>>>>>>>>> Sander.Arens at ugent.be> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi,
>>>>>>>>>>>>
>>>>>>>>>>>> I'm trying to set a mass matrix preconditioner for the Schur
>>>>>>>>>>>> complement of an incompressible finite elasticity problem. I tried using
>>>>>>>>>>>> the command PetscDSSetJacobianPreconditioner(prob, 1, 1, g0_pre_mass_pp,
>>>>>>>>>>>> NULL, NULL, NULL) (field 1 is the Lagrange multiplier field).
>>>>>>>>>>>> However, this causes a DIVERGED_LINE_SEARCH due to to Nan or
>>>>>>>>>>>> Inf in the function evaluation after Newton iteration 1. (Btw, I'm using
>>>>>>>>>>>> the next branch).
>>>>>>>>>>>>
>>>>>>>>>>>> Is this because I didn't use PetscDSSetJacobianPreconditioner
>>>>>>>>>>>> for the other blocks (which uses the Jacobian itself for preconditioning)?
>>>>>>>>>>>> If so, how can I tell Petsc to use the Jacobian for those blocks?
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> 1) I put that code in very recently, and do not even have
>>>>>>>>>>> sufficient test, so it may be buggy
>>>>>>>>>>>
>>>>>>>>>>> 2) If you are using FieldSplit, you can control which blocks
>>>>>>>>>>> come from A and which come from the preconditioner P
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/PC/PCFieldSplitSetDiagUseAmat.html#PCFieldSplitSetDiagUseAmat
>>>>>>>>>>>
>>>>>>>>>>> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/PC/PCFieldSplitSetOffDiagUseAmat.html#PCFieldSplitSetOffDiagUseAmat
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> I guess when using PetscDSSetJacobianPreconditioner the
>>>>>>>>>>>> preconditioner is recomputed at every Newton step, so for a constant mass
>>>>>>>>>>>> matrix this might not be ideal. How can I avoid recomputing this at every
>>>>>>>>>>>> Newton iteration?
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Maybe we need another flag like
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/SNESSetLagPreconditioner.html
>>>>>>>>>>>
>>>>>>>>>>> or we need to expand
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/SNESSetLagJacobian.html
>>>>>>>>>>>
>>>>>>>>>>> to separately cover the preconditioner matrix. However, both
>>>>>>>>>>> matrices are computed by one call so this would
>>>>>>>>>>> involve interface changes to user code, which we do not like to
>>>>>>>>>>> do. Right now it seems like a small optimization.
>>>>>>>>>>> I would want to wait and see whether it would really be
>>>>>>>>>>> maningful.
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>>
>>>>>>>>>>> Matt
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Sander
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> 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
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> 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
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> 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
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> 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
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> 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
>>>
>>
>>
>
>
> --
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20160303/21e42c79/attachment-0001.html>
More information about the petsc-users
mailing list