[petsc-users] PetscDSSetJacobianPreconditioner causing DIVERGED_LINE_SEARCH for multi-field problem

Matthew Knepley knepley at gmail.com
Thu Mar 3 07:52:12 CST 2016


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20160303/ffb7b7bd/attachment.html>


More information about the petsc-users mailing list