<div dir="ltr"><div dir="ltr">On Tue, Dec 7, 2021 at 12:54 PM Samuel Estes <<a href="mailto:samuelestes91@gmail.com">samuelestes91@gmail.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">Hi,<div><br></div><div>I have a code implementing a finite element method with an adaptive grid. Rather than destroying the PETSc objects (the Jacobian matrix and RHS residual vector) every time the code refines the grid, we want to (over-)allocate some "padding" for these objects so that we only destroy/create new PETSc objects when the number of new nodes exceeds the padding. In order to solve the linear system with padding, we just fill the matrix with ones on the diagonal and fill the residual with zeros for the padded parts.</div><div><br></div><div>Is this a reasonable way to do things?</div></div></blockquote><div><br></div><div>It can be. You have to be careful that the 1 on the diagonal is not too much different in magnitude from the other rows.</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'm sure that this problem has come up before but I haven't found anything about it. I would like to know what other solutions people have come up with when using PETSc for adaptive problems since PETSc does not support dynamic reallocation of objects (i.e. I don't think you are allowed to change the size of a PETSc matrix).</div></div></blockquote><div><br></div><div>What I do is just rebuild the structures when the mesh changes. I am mostly looking at implicit things, so the solver and mesh adaptation cost swamp allocation and copying.</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>If this problem has come up before, can you please point me to a link to the discussion?</div></div></blockquote><div><br></div><div>I can't recall having it before, but maybe Satish can remember.</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>In particular, I'm curious if there is any way to solve the padded linear system without having to fill in values for the unused parts of the system. The linear solver obviously complains if there are rows of the matrix without any values, I'm just wondering if it's possible to get the linear solver to ignore them?</div></div></blockquote><div><br></div><div>Actually, we do have a thing that does something similar right now. SNESVI_RS "freezes" the rows of the Jacobian associated with active constraints, We could do this</div><div>same freezing with your rows I think. However, that is as much copying and allocation as just eliminating those rows, so maybe it does not buy you much.</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><br></div><div>Sam</div></div></blockquote></div>-- <br><div dir="ltr" class="gmail_signature"><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>