<div dir="ltr"><div>Its inherent, physical problem for this particular case is a rigid body (whose dof is represented using a reference point) attached to a deformable body along an interface (hence many faces). The sparsity pattern for a deformable body follows the traditional FEM sparsity pattern. So I need to supplement that sparsity pattern to account for the constraint off diagonal terms. I am doing it currently after DMCreateMatrix via call to MatSetValues but that's of course not ideal. I also tried doing it by first calling  DMSetMatrixPreallocateOnly but that caused problems later on as probably the number of new values exceeded the preallocated limit for that row. <a name="DMSetMatrixPreallocateOnly"></a>If you have some additional pointers that would be really helpful.</div><div><br></div><div>Thanks</div><div>Ashish<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Oct 6, 2020 at 1:59 PM Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@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"><div dir="ltr">On Tue, Oct 6, 2020 at 4:08 PM Ashish Patel <<a href="mailto:ashish.patel@onscale.com" target="_blank">ashish.patel@onscale.com</a>> wrote:<br></div><div class="gmail_quote"><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"><div>Hi Matt,</div><div><br></div><div>Yes I do create the section myself. There are many faces which are constrained by a single reference point. So even if I create an extra dof at one of the faces I would have to get access to rows/columns of other distant faces which does not exist in the adjacency relationship.</div></div></blockquote><div><br></div><div>Okay, so these dogs do not obey the FEM sparsity pattern. Is it inherent to the method, or do you just do this for convenience? It might</div><div>be easier to constrain one face at a time, but I would need to understand more. If you cannot do that, you would also have to override</div><div>the sparsity pattern. I can easily give you a hook to do this if you want.</div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt</div><div> </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"><div>Thanks</div><div>Ashish<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Oct 6, 2020 at 12:47 PM Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@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"><div dir="ltr">On Fri, Oct 2, 2020 at 7:16 PM Ashish Patel <<a href="mailto:ashish.patel@onscale.com" target="_blank">ashish.patel@onscale.com</a>> wrote:<br></div><div class="gmail_quote"><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"><div>Dear PETSc users,</div><div><br></div><div>I am trying to assemble a matrix for a finite element problem where the degree of freedom (dof) on a surface is constrained via a reference node which also exists in the DM but is not connected  with any other point in the mesh. To apply the constraint I want to be able to set matrix values in the rows belonging to dofs of reference nodes and columns belonging to dofs of surface nodes and vice versa. But since the two points are not connected topologically I cannot just use DMPlexMatSetClosure to do that. I am currently trying to use DMPlexAddConeSize on all the constrained surface points followed by a call to DMPlexInsertCone wherein I add the reference node to the cone of surface point before setting up the PetscSection. Is this the right approach?</div></div></blockquote><div><br></div><div>No. You are changing the topology, which is not what you want I think. I think you just want to associate extra dof with the face. You can</div><div>do this by just altering the PetscSection you use. Do you create the Section yourself now?</div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt</div><div> </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"><div> I am currently getting following message<br></div><div><br></div><div>New nonzero at (8952,28311) caused a malloc<br>Use MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE) to turn off this check</div><div><br></div><div>I could set the suggested option to get rid of the error but was wondering if I am missing something.<br></div><div><br></div><div>Thanks</div><div>Ashish<br></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div>