[petsc-users] Rigid body nullspace for Stokes operator

Jed Brown jed at jedbrown.org
Tue Oct 29 22:03:30 CDT 2024


And to be clear, we recommend using fieldsplit Schur to separate the pressure and velocity part (there are many examples). Applying AMG directly to the saddle point problem will not be a good solver because the heuristics assume positivity and do not preserve inf-sup stability (nor do standard smoothers).

Mark Adams <mfadams at lbl.gov> writes:

> This is linear elasticity and there are 6 "null" vectors (if you removed
> Dirichlet boundary conditions these are eigenvectors with zero eigenvalue):
> 3 translations, x, y, z, and three rotatiions xx, yy ,zz.
> x = (1,0,0,1,0,0,1,0 ...)
> and xx is something like (0, z_1, -y_1, 0, z_2, -y_2, ...) where z_1 is the
> z coordinate of the first vertex, etc.
>
> Mark
>
> On Tue, Oct 29, 2024 at 3:47 PM Amneet Bhalla <mail2amneet at gmail.com> wrote:
>
>> Hi Mark,
>>
>> Thanks! I am not sure how to construct null space and zero energy modes
>> manually for this operator. Is there some theory or documentation I can
>> follow to figure out what the null space and zero energy modes look like
>> for this operator? Once I know what these are in symbolic form, I think I
>> should be able to construct them manually.
>>
>> Best,
>> --Amneet
>>
>> On Tue, Oct 29, 2024 at 7:35 AM Mark Adams <mfadams at lbl.gov> wrote:
>>
>>> Oh my mistake. You are using staggered grids. So you don't have a block
>>> size that hypre would use for the "nodal" methods.
>>> I'm not sure what you are doing exactly, but try hypre and you could
>>> create the null space, zero energy modes, manually, attach to the matrix
>>> and try GAMG.
>>> You can run with '-info :pc' and grep on GAMG to see if GAMG is picking
>>> the null space up (send this output if you can't figure it out).
>>>
>>> Thanks,
>>> Mark
>>>
>>> On Tue, Oct 29, 2024 at 9:28 AM Mark Adams <mfadams at lbl.gov> wrote:
>>>
>>>> This coordinate interface is just a shortcut for vertex based
>>>> discretizations with 3 dof per vertex, etc. (maybe works in 2D).
>>>> You will need to construct the null space vectors manually and attach it
>>>> to the matrix. Used by GAMG.
>>>>
>>>> Note, for hypre you want to use the "nodal" options and it does not use
>>>> these null space vectors. That is probably the way you want to go.
>>>> eg: -pc_hypre_boomeramg_nodal_coarsen
>>>>
>>>> I would run with hypre boomerang and -help and grep on nodal to see all
>>>> the "nodal" options and use them.
>>>>
>>>> Thanks,
>>>> Mark
>>>>
>>>>
>>>> On Mon, Oct 28, 2024 at 8:06 PM Amneet Bhalla <mail2amneet at gmail.com>
>>>> wrote:
>>>>
>>>>> Hi Folks,
>>>>>
>>>>> I am trying to solve the momentum equation in a projection
>>>>> preconditioner using GAMG or Hypre solver. The equation looks like for
>>>>> velocity variable *v* looks like:
>>>>>
>>>>>
>>>>>  [image: Screenshot 2024-10-28 at 4.15.17 PM.png]
>>>>>
>>>>> Here, μ is spatially varying dynamic viscosity and λ is spatially
>>>>> varying bulk viscosity. I understand that I need to specify rigid body
>>>>> nullspace modes to the multigrid solver in order to accelerate its
>>>>> convergence. Looking into this routine MatNullSpaceCreateRigidBody() (
>>>>> https://urldefense.us/v3/__https://petsc.org/release/manualpages/Mat/MatNullSpaceCreateRigidBody/__;!!G_uCfscf7eWS!bVR6duCoDqPhZrWS-sm1c5qxsFPjZMhdT86AqLpPzWgVy5qoRhd4_Jue2LJOIS6LRrtV2cHGrqger1Yvb-Y5f-0$ 
>>>>> <https://urldefense.us/v3/__https://petsc.org/release/manualpages/Mat/MatNullSpaceCreateRigidBody/__;!!G_uCfscf7eWS!eKqgIJjCdMzIU76f7X65AmGxrU_-lC7W02BMWafJ77DNf_IuQk6O1X3qU1x9Ez8NJ20vZEL-mF6T1yNmDnwv0eWa2w$>),
>>>>> I see that I need to provide the coordinates of each node. I am using
>>>>> staggered grid discretization. Do I need to provide coordinates of
>>>>> staggered grid locations?
>>>>>
>>>>> Thanks,
>>>>> --
>>>>> --Amneet
>>>>>
>>>>>
>>>>>
>>>>>
>>
>> --
>> --Amneet
>>
>>
>>
>>


More information about the petsc-users mailing list