<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Sep 3, 2017 at 1:02 PM, Zou, Ling <span dir="ltr"><<a href="mailto:ling.zou@inl.gov" target="_blank">ling.zou@inl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi All,<div><br></div><div>I wonder if there is a good example on how PETSc should work with mesh refinement. I have done some online search/PETSc-user email search, but did not find a good one.</div><div><br></div><div>Here is my case. Currently, assuming NO mesh refinement (so I know exactly the problem size, mesh connectivity, non-zero pattern of matrices, etc.)</div><div>In a transient simulation, my PETSc code looks like:</div><div><br></div><div>==============================<wbr>==============================<wbr>============</div><div>SetupVectors(); // unknown vec, old unknown, etc.</div><div>SetupResFunc(); // residual function, basically pointing to the discretized PDE</div><div>SetupMatrices(); // allocate memory for preconditioning matrix based on non-zero pattern (so it is mesh dependent)</div><div>                           // I also use finite differencing to get preconditioning matrix, so there is another MatFDColoring object associated with the matrix</div><div>for (int step = 0; step < max_step; step++)</div><div>{</div><div>  SNESSolve();</div><div>}</div><div>==============================<wbr>==============================<wbr>============<br></div><div><br></div><div>This setup works perfectly for my problems.</div><div>(I understand it is low efficient to use FD to get the preconditioning matrix, but it is not a priority to me at this moment).</div><div><br></div><div>However, now I would like to do some mesh refinement, so the previous setup would not work, because the problem size, non-zero pattern of the matrix and MatFDColoring change with mesh size (and connectivity).</div><div>I suppose my code should be changed like this:</div><div><br></div><div>==============================<wbr>==============================<wbr>============<br></div><div><div><div>SetupVectors();</div><div>SetupResFunc();</div><div>SetupMatrices();</div></div></div><div><br></div><div><div>for (int step = 0; step < max_step; step++)</div><div>{</div><div>  MeshRefinement(); // I will manage my mesh</div><div><br></div><div><div>  AdjustVectors();   // resize vector</div><div>  AdjustMatrices(); // resize matrix, re-allocate memory, adjust non-zero pattern, etc.</div></div><div><br></div><div>  SNESSolve();</div><div>}</div></div><div>==============================<wbr>==============================<wbr>============<br></div><div><br></div><div>The issue is that I understand one should not re-allocate memory to both PETSc vector and matrix dynamically during simulation, which has been discussed here:</div><div><a href="https://scicomp.stackexchange.com/questions/373/is-it-possible-to-dynamically-resize-a-sparse-matrix-in-the-petsc-library" target="_blank">https://scicomp.stackexchange.<wbr>com/questions/373/is-it-<wbr>possible-to-dynamically-<wbr>resize-a-sparse-matrix-in-the-<wbr>petsc-library</a><br></div><div><br></div><div>So, the final questions are:</div><div>1) Any good example on PETSc working with mesh refinement?</div><div>2) Any suggestion on my proposed code structure?</div></div></blockquote><div><br></div><div>1) No</div><div><br></div><div>2) Yes. We advocate using the DM to describe your data layout. This allows all Vec and Mats to be created automatically, and</div><div>also tells the solver (SNESSetDM, etc.) the sizes and potential decomposition.</div><div><br></div><div>We are working on a mesh adaptivity interface which will allow adaptivity to be used with all DM problems without any extra</div><div>code. We should have some examples with this soon.</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Best,</div><div><br></div><div>Ling</div><div><br></div><div><br></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><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.caam.rice.edu/~mk51/" target="_blank">http://www.caam.rice.edu/~mk51/</a><br></div></div></div>
</div></div>