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?
On Thu, Oct 31, 2024 at 8:32 AM Pierre Jolivet <pie...@joliv.et> wrote: > > > On 31 Oct 2024, at 12:41 PM, Mark Adams <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!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> 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> 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> 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!fgZ28yXAXjJBIqd4SxJehY7SSaYVe_YNHPW4QnnTewSSOxFsPPcBZFPv6Y2IT8PkI3SDEARmixD85cms_bElxqQ$ >> >> <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!fgZ28yXAXjJBIqd4SxJehY7SSaYVe_YNHPW4QnnTewSSOxFsPPcBZFPv6Y2IT8PkI3SDEARmixD85cmsTsohckA$ >> >> <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> 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 >> > >> >> 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!fgZ28yXAXjJBIqd4SxJehY7SSaYVe_YNHPW4QnnTewSSOxFsPPcBZFPv6Y2IT8PkI3SDEARmixD85cmswf1ygKo$ >> >> >> >> <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> 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> 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 >> >> > >> >> >>> 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> >> 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> >> >> 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 >> >> >>> > >> >> >>> >>>> 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 > > >