<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Sat, Jan 12, 2019 at 2:47 AM Manav Bhatia via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.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">While looking through some examples I see that both PetscDSSetJacobian and DMPlexSNESComputeJacobianFEM are being used to set the functions to evaluate the Jacobian contributions on each rank. <br></blockquote><div><br></div><div>Let me say first that we do not support DG. We have plans to do this, but it does not currently work.</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">
This is my understanding after studying these (please correct if I am wrong): <br>
<br>
— The PetscDSSetJacobian (and its corresponding residual routine) does not seem to have the concept of an element. Instead, it provides the derivatives of solution at a point and requires that the coefficients for each form g_0, g_1, … be evaluated. Then, PETSc combines that in the background. <br></blockquote><div><br></div><div>Yes, this is true. Here is the idea: DS abstracts the problem itself, without regard to discretization.The division is not exactly what you expect currently, but I think it is the correct one. You are solving the weak form of the problem, which is definitely different than the strong form, so the DS assumes a weak form for the specification, but independent of the bases involved.</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">
— DMPlexSNESComputeJacobianFEM is a method that calls PetscDSSetJacobian to compute the Jacobian. <br></blockquote><div><br></div><div>Yes.</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">
If this is correct, I am a bit confused about the following: <br>
<br>
— For a DG solve, I can see that PetscDSSetRiemannSolver can be used to compute the convective flux at the interface of two elements. However, I don’t see how the Jacobian contribution of this flux can be computed and added to the system Jacobian. <br></blockquote><div><br></div><div>That is really only designed for FV. You are right that we could repurpose it to support DG. That was not how I was going to proceed. Instead I have a branch that fixes boundary integration so that all interface integrals get 2-sided information. This would allow all the facets integrals that you want with proper transforms, etc. However, I would also have to put in support for geometric quantities needed for DG penalization. That is simple, I know, but everything takes time.</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">
— A more conventional FEM assembly iterates over elements, then over the quadrature points, where the shape functions and their derivatives are initialized and used for computation of residual and Jacobian. Is it possible to follow this procedure in PETSc with DMPlex/DMForest and still use multigrid? Is there an example that demonstrates this? <br></blockquote><div><br></div><div>Yes, that is how all the FEM examples work. For instance, you can look at SNES ex12 or ex17 or ex62 or ex77. They iterates over batches</div><div>of cells, then projectbasis function to the quad points, evaluate user point functions on the quad points, and then take the inner product with test functions. After the element matrix is computed, it is set into the global Jacobian.</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">
— Is there some form of an index for elements that exist on the local processor that can be used to iterate on local elements? <br></blockquote><div><br></div><div>We just use local point number to iterate over cells.</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">
I have tried to look, but could not find a document that outlines these concepts. Is there one that exists and I have missed it? <br></blockquote><div><br></div><div>There ia a manual chapter on the low-level organization, but nothing on the traversal because I am still experimenting.</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">
I would greatly appreciate some direction. <br>
<br>
Regards,<br>
Manav<br>
<br>
<br>
<br>
<br>
> On Jan 11, 2019, at 10:03 PM, Manav Bhatia <<a href="mailto:bhatiamanav@gmail.com" target="_blank">bhatiamanav@gmail.com</a>> wrote:<br>
> <br>
> Hi,<br>
> <br>
>   I am interested in setting up a high-order DG FEM solution with PETSc on an octree mesh with adaptivity and geometric multigrid preconditioning. Is there an example that demonstrates this with either DMForest or DMPlex. <br>
> <br>
> Thanks,<br>
> Manav<br>
> <br>
> <br>
<br>
</blockquote></div><br clear="all"><div><br></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>