> On 31 Oct 2024, at 2:47 PM, Mark Adams <mfad...@lbl.gov> wrote:
> 
> Interesting. I have seen hypre do fine on elasticity, but do you know if 
> boomeramg (classical) uses these vectors or is there a smoothed aggregation 
> solver in hypre?

I’m not sure it is precisely “standard” smoothed aggregation, see bottom 
paragraph of 
https://urldefense.us/v3/__https://hypre.readthedocs.io/en/latest/solvers-boomeramg.html*amg-for-systems-of-pdes__;Iw!!G_uCfscf7eWS!fdj4AzKhAcDmM1x_ZQ8gxqWeX6BAKY9urnvATMpT7hC8lw77ak7tqxqXGIX3PMg2wYA5PGu7EzyCW0yzixutBg$
 
I’ve never made it to work, but I know some do.
A while back, Stefano gave me this pointer as well: 
https://urldefense.us/v3/__https://github.com/mfem/mfem/blob/17955e114020af340e9a06a66ebef43e05012d9c/linalg/hypre.cpp*L5245__;Iw!!G_uCfscf7eWS!fdj4AzKhAcDmM1x_ZQ8gxqWeX6BAKY9urnvATMpT7hC8lw77ak7tqxqXGIX3PMg2wYA5PGu7EzyCW0wVEi33Pw$
 

Thanks,
Pierre

> On Thu, Oct 31, 2024 at 8:32 AM Pierre Jolivet <pie...@joliv.et 
> <mailto:pie...@joliv.et>> wrote:
>> 
>> 
>>> On 31 Oct 2024, at 12:41 PM, Mark Adams <mfad...@lbl.gov 
>>> <mailto:mfad...@lbl.gov>> wrote:
>>> 
>>> Just note, GAMG uses these near null space vectors but hypre does not as 
>>> far as I know.
>> 
>> They do: 
>> https://urldefense.us/v3/__https://petsc.org/release/src/ksp/pc/impls/hypre/hypre.c.html*line266__;Iw!!G_uCfscf7eWS!fdj4AzKhAcDmM1x_ZQ8gxqWeX6BAKY9urnvATMpT7hC8lw77ak7tqxqXGIX3PMg2wYA5PGu7EzyCW0wJINgbAg$
>>   
>> <https://urldefense.us/v3/__https://petsc.org/release/src/ksp/pc/impls/hypre/hypre.c.html*line266__;Iw!!G_uCfscf7eWS!fgZ28yXAXjJBIqd4SxJehY7SSaYVe_YNHPW4QnnTewSSOxFsPPcBZFPv6Y2IT8PkI3SDEARmixD85cmswwWL0Vk$>
>> 
>> Thanks,
>> Pierre
>> 
>>> Hypre does do elasticity so I would just stick with hypre if you just want 
>>> to solve your problem (and move on)
>>> 
>>> On Thu, Oct 31, 2024 at 1:01 AM Jed Brown <j...@jedbrown.org 
>>> <mailto:j...@jedbrown.org>> wrote:
>>>> There is MatSetNearNullSpace, which is used to ensure an approximation 
>>>> property in coarse levels of multigrid. That should always be set when 
>>>> dealing with problems like this, regardless of boundary conditions. 
>>>> Separately, there is MatSetNullSpace, which you should only use if you are 
>>>> solving a singular system with that null space.
>>>> 
>>>> Note that you need at least three non-colinear points to constrain the 
>>>> null space so if you, for example, have a Dirichlet condition at only one 
>>>> point or along one straight line, there will still be a null space.
>>>> 
>>>> Amneet Bhalla <mail2amn...@gmail.com <mailto:mail2amn...@gmail.com>> 
>>>> writes:
>>>> 
>>>> > I think Mark mentioned this earlier, but I want to make sure that the 
>>>> > rigid
>>>> > body null vectors should be specified only when Neumann boundary 
>>>> > conditions
>>>> > are used on all boundaries of the domain, correct? Alternatively, if a
>>>> > Dirichlet boundary condition is used (on any part of the domain boundary)
>>>> > then there is no null space, i.e., the operator is a full rank matrix?
>>>> >
>>>> > If the above is true, then I think I do not need to specify the rigid 
>>>> > body
>>>> > null modes because I am using Dirichlet boundary conditions for the
>>>> > velocity solver.
>>>> >
>>>> > On Wed, Oct 30, 2024 at 12:28 PM Jed Brown <j...@jedbrown.org 
>>>> > <mailto:j...@jedbrown.org>> wrote:
>>>> >
>>>> >> Yes to 6 null vectors in 3D, 3 null vectors in 2D. The center of mass 
>>>> >> does
>>>> >> not need to be identified because you can algebraically orthogonalize
>>>> >> (lines 411-420 here).
>>>> >>
>>>> >>
>>>> >> https://urldefense.us/v3/__https://gitlab.com/petsc/petsc/-/blob/main/src/dm/impls/plex/plexfem.c?ref_type=heads*L377-425__;Iw!!G_uCfscf7eWS!fdj4AzKhAcDmM1x_ZQ8gxqWeX6BAKY9urnvATMpT7hC8lw77ak7tqxqXGIX3PMg2wYA5PGu7EzyCW0wNnvPLMA$
>>>> >>   
>>>> >> <https://urldefense.us/v3/__https://gitlab.com/petsc/petsc/-/blob/main/src/dm/impls/plex/plexfem.c?ref_type=heads*L377-425__;Iw!!G_uCfscf7eWS!b0T54ExhpyMjL9O-B63FmKcfUHpYoH0-ixjUnroOoB0PZPSEVH2-LEMb_Yw57sybhA0rknBisFM2erfwfjN2syg$>
>>>> >>
>>>> >> See also this implementation with raw coordinates. GAMG orthogonalizes
>>>> >> within each aggregate (in a later phase of the algorithm) so global
>>>> >> orthogonalization is not necessary.
>>>> >>
>>>> >>
>>>> >> https://urldefense.us/v3/__https://gitlab.com/petsc/petsc/-/blob/main/src/ksp/pc/impls/gamg/agg.c?ref_type=heads*L387__;Iw!!G_uCfscf7eWS!fdj4AzKhAcDmM1x_ZQ8gxqWeX6BAKY9urnvATMpT7hC8lw77ak7tqxqXGIX3PMg2wYA5PGu7EzyCW0yNqXfRKQ$
>>>> >>   
>>>> >> <https://urldefense.us/v3/__https://gitlab.com/petsc/petsc/-/blob/main/src/ksp/pc/impls/gamg/agg.c?ref_type=heads*L387__;Iw!!G_uCfscf7eWS!b0T54ExhpyMjL9O-B63FmKcfUHpYoH0-ixjUnroOoB0PZPSEVH2-LEMb_Yw57sybhA0rknBisFM2erfw3-yhJ68$>
>>>> >>
>>>> >> Amneet Bhalla <mail2amn...@gmail.com <mailto:mail2amn...@gmail.com>> 
>>>> >> writes:
>>>> >>
>>>> >> > I think the nullspace for the velocity operator is of the form
>>>> >> >
>>>> >> > vnull = U + ω × r
>>>> >> > in which U is a rigid body velocity and ω is the rigid body rotational
>>>> >> > velocity, and r is the radius vector from the center of mass. I 
>>>> >> > believe I
>>>> >> > need to construct 6 nullspace vectors in 3D and 3 nullspace vectors in
>>>> >> 2D.
>>>> >> > Sounds correct? Also does the center of mass coordinates matter when
>>>> >> > defining r?
>>>> >> >
>>>> >> > On Wed, Oct 30, 2024 at 7:53 AM Amneet Bhalla <mail2amn...@gmail.com 
>>>> >> > <mailto:mail2amn...@gmail.com>>
>>>> >> wrote:
>>>> >> >
>>>> >> >> @Mark: Is there some document/paper that I can follow to check the
>>>> >> algebra
>>>> >> >> of these zero eigenvectors/null space modes?
>>>> >> >>
>>>> >> >> @Jed : We use a projection method preconditioner to solve the coupled
>>>> >> >> velocity pressure system as described here (
>>>> >> >> https://urldefense.us/v3/__https://www.sciencedirect.com/science/article/pii/S0021999123004205__;!!G_uCfscf7eWS!fdj4AzKhAcDmM1x_ZQ8gxqWeX6BAKY9urnvATMpT7hC8lw77ak7tqxqXGIX3PMg2wYA5PGu7EzyCW0xFZnni7g$
>>>> >> >>   
>>>> >> >> <https://urldefense.us/v3/__https://www.sciencedirect.com/science/article/pii/S0021999123004205__;!!G_uCfscf7eWS!b0T54ExhpyMjL9O-B63FmKcfUHpYoH0-ixjUnroOoB0PZPSEVH2-LEMb_Yw57sybhA0rknBisFM2erfwvAPghoI$>).
>>>> >> It
>>>> >> >> is an approximation of the Schur complement. As a part of projection
>>>> >> >> preconditioner, we need to solve just the momentum equation 
>>>> >> >> separately
>>>> >> >> without considering the pressure part.
>>>> >> >>
>>>> >> >> On Tue, Oct 29, 2024 at 8:03 PM Jed Brown <j...@jedbrown.org 
>>>> >> >> <mailto:j...@jedbrown.org>> wrote:
>>>> >> >>
>>>> >> >>> 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 <mfad...@lbl.gov <mailto:mfad...@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 
>>>> >> >>> > <mail2amn...@gmail.com <mailto:mail2amn...@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 <mfad...@lbl.gov 
>>>> >> >>> >> <mailto:mfad...@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 <mfad...@lbl.gov 
>>>> >> >>> >>> <mailto:mfad...@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 <
>>>> >> mail2amn...@gmail.com <mailto:mail2amn...@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
>>>> >> >>> >>
>>>> >> >>> >>
>>>> >> >>> >>
>>>> >> >>> >>
>>>> >> >>>
>>>> >> >>
>>>> >> >>
>>>> >> >> --
>>>> >> >> --Amneet
>>>> >> >>
>>>> >> >>
>>>> >> >>
>>>> >> >>
>>>> >> >
>>>> >> > --
>>>> >> > --Amneet
>>>> >>
>>>> >
>>>> >
>>>> > -- 
>>>> > --Amneet
>> 

Reply via email to