<div dir="ltr"><div dir="ltr">On Sun, Nov 17, 2019 at 12:15 PM Smith, Barry F. via petsc-dev <<a href="mailto:petsc-dev@mcs.anl.gov">petsc-dev@mcs.anl.gov</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"><br>
<br>
> On Nov 14, 2019, at 12:30 PM, Faibussowitsch, Jacob via petsc-dev <<a href="mailto:petsc-dev@mcs.anl.gov" target="_blank">petsc-dev@mcs.anl.gov</a>> wrote:<br>
> <br>
> Hello,<br>
> <br>
> So I am trying to make a simple 5 pt stencil finite difference laplacian operator (<a href="https://akmitra.public.iastate.edu/aero361/design_web/Laplace.pdf" rel="noreferrer" target="_blank">https://akmitra.public.iastate.edu/aero361/design_web/Laplace.pdf</a>) work on a dmplex mesh, but all of the examples that I have found in ksp/examples/tutorials all use DMDA. The only way that I have managed to get the KSP to even run is by creating the operator matrix myself by hand. The workflow for the working implementation is as follows:<br>
> <br>
> DMPlexMakeBoxMesh -> KSPCreate -> KSPsetDM -> KSPDeactiveDM -> Make the matrix by hand ->  KSPSetOperator(matrix) -> KSPSetComputeRHS -> Solve<br>
> <br>
> Given that I tether KSP to the DM by KSPSetDM, but then immediately deactivate it (because then it complains about mallocs), this doesn’t work when reading in an actual unstructured mesh. Does KSP just not support dmplex?<br>
<br>
   Nothing to do with KSP supporting DMPLEX. <br>
<br>
   For a given DMDA the matrix structure is completely determined when using finite differences, thus DMDA can always create an empty sparse matrix ready for KSP. Then one can either fill in the sparse matrix (as do many of the examples) with values for a particular PDE or have the MatFDColoring code compute the matrix entries from the provided RHS function.<br>
<br>
   For DMPLEX the flex object itself does not have enough information to create a sparse matrix; it would be ill-defined since the matrix depends on the finite element space, boundary conditions etc. So it would really be DMPLEX + PETSCFE and a bunch of stuff to fully define the matrix. <br>
<br>
   See for example snes/examples/tutorials/ex12.c this is a way over complicated with lots of options, but it is one of the most basic for use DMPLEX for a PDE.  See SetupDiscretization() for how it creates the FE and DS objects.<br></blockquote><div><br></div><div>Barry is right, also about ex12 being too complicated for this kind of a question. So I made ex13, which is the same thing, but</div><div>with far fewer variants, so its easier to see what is happening.</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">
> <br>
> Best,<br>
> <br>
> Jacob<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>