<div dir="ltr">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.<div>x = (1,0,0,1,0,0,1,0 ...)</div><div>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.</div><div><br></div><div>Mark</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Oct 29, 2024 at 3:47 PM Amneet Bhalla <<a href="mailto:mail2amneet@gmail.com">mail2amneet@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi Mark, <div><br></div><div>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.</div><div><br></div><div>Best,</div><div>--Amneet </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Oct 29, 2024 at 7:35 AM Mark Adams <<a href="mailto:mfadams@lbl.gov" target="_blank">mfadams@lbl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Oh my mistake. You are using staggered grids. So you don't have a block size that hypre would use for the "nodal" methods.<div>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.</div><div>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).</div><div><br></div><div>Thanks,</div><div>Mark</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Oct 29, 2024 at 9:28 AM Mark Adams <<a href="mailto:mfadams@lbl.gov" target="_blank">mfadams@lbl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">This coordinate interface is just a shortcut for vertex based discretizations with 3 dof per vertex, etc. (maybe works in 2D).<div>You will need to construct the null space vectors manually and attach it to the matrix. Used by GAMG.</div><div><br></div><div>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.</div><div>eg: <span style="color:rgb(102,102,102)">-pc_hypre_boomeramg_nodal_coarsen</span></div><div><span style="color:rgb(102,102,102)"><br></span></div><div><span style="color:rgb(102,102,102)">I would run with hypre boomerang and -help and grep on nodal to see all the "nodal" options and use them.</span></div><div><span style="color:rgb(102,102,102)"><br></span></div><div><span style="color:rgb(102,102,102)">Thanks,</span></div><div><span style="color:rgb(102,102,102)">Mark</span></div><div> </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Oct 28, 2024 at 8:06 PM Amneet Bhalla <<a href="mailto:mail2amneet@gmail.com" target="_blank">mail2amneet@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi Folks,<div><br></div><div>I am trying to solve the momentum equation in a projection preconditioner using GAMG or Hypre solver. The equation looks like for velocity variable <i><span><span style="font-style:italic">v</span></span></i> looks like:</div><div><br></div><br><div> <img src="cid:ii_m2tn1esj1" alt="Screenshot 2024-10-28 at 4.15.17 PM.png" width="542" height="72"><br><div><br></div><div>Here, <span><span style="font-style:italic">μ</span></span> is spatially varying dynamic viscosity and <span><span style="font-style:italic">λ</span></span> 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() (<a href="https://urldefense.us/v3/__https://petsc.org/release/manualpages/Mat/MatNullSpaceCreateRigidBody/__;!!G_uCfscf7eWS!eKqgIJjCdMzIU76f7X65AmGxrU_-lC7W02BMWafJ77DNf_IuQk6O1X3qU1x9Ez8NJ20vZEL-mF6T1yNmDnwv0eWa2w$" target="_blank">https://petsc.org/release/manualpages/Mat/MatNullSpaceCreateRigidBody/</a>), 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?</div><div><br></div><div>Thanks, </div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>--Amneet <br><br></div><div><br></div><div><br></div></div></div></div></div>
</blockquote></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>--Amneet <br><br></div><div><br></div><div><br></div></div></div>
</blockquote></div>