[petsc-users] Question about DMPLEX/P4EST with different Sections

Matthew Knepley knepley at gmail.com
Thu Mar 19 17:07:09 CDT 2020


On Fri, Mar 13, 2020 at 9:45 AM Berend van Wachem <berend.vanwachem at ovgu.de>
wrote:

> Dear Matt,
>
> Thanks for your response. My understanding of the DM and DMClone is the
> same - and I have tested this with a DMPLEX DM without problems.
>
> However, for some reason, I cannot change/set the section of a P4EST dm.
> In the attached example code, I get an error in line 140, where I try to
> create a new section from the cloned P4EST DM. Is it not possible to
> create/set a section on a P4EST DM? Or maybe I am doing something else
> wrong? Do you suggest a workaround?
>

Hi Berend,

Sorry I am behind. The problem on line 140 is that you call a DMPlex
function (DMPlexCreateSection)
with a DMForest object. That is illegal. You can, however, call that
function using the Plex you get from
a Forest using DMConvert(DMForestClone, DMPLEX, &plexClone). I will get
your code running as soon
as I can, but after you create the Section, attaching it should be fine.

  Thanks,

     Matt


> Many thanks, Berend.
>
>
> On 2020-03-13 00:19, Matthew Knepley wrote:
> > On Thu, Mar 12, 2020 at 7:40 AM Berend van Wachem
> > <berend.vanwachem at ovgu.de <mailto:berend.vanwachem at ovgu.de>> wrote:
> >
> >     Dear All,
> >
> >     I have started to use DMPLEX with P4EST for a computational fluid
> >     dynamics application. I am solving a coupled system of 4 discretised
> >     equations (for 3 velocity components and one pressure) on a mesh.
> >     However, next to these 4 variables, I also have a few single field
> >     variables (such as density and viscosity) defined over the mesh,
> >     which I
> >     don't solve for (they should not be part of the matrix with
> unknowns).
> >     Most of these variables are at the cell centers, but in a few cases,
> it
> >     want to define them at cell faces.
> >
> >     With just DMPLEX, I solve this by:
> >
> >     DMPlexCreateMesh, so I get an initial DM
> >     DMPlexCreateSection, indicating the need for 4 variables
> >     DMSetLocalSection
> >     DMCreateGlobalVector (and Matrix), so I get an Unknown vector, a RHS
> >     vector, and a matrix for the 4 variables.
> >
> >     To get a vector for a single variable at the cell center or the cell
> >     face, I clone the original DM, I define a new Section on it, and then
> >     create the vector from that which I need (e.g. for density,
> >     viscosity or
> >     a velocity at the cell face).
> >
> >     Then I loop over the mesh, and with MatSetValuesLocal, I set the
> >     coefficients. After that, I solve the system for multiple timesteps
> >     (sequential solves) and get the solution vector with the 4 variables
> >     after each solve.
> >
> >     So-far, this works fine with DMPLEX. However, now I want to use
> P4EST,
> >     and I have difficulty defining a variable vector other than the
> >     original 4.
> >
> >     I have changed the code structure:
> >
> >     DMPlexCreateMesh, so I get an initial DM
> >     DMPlexCreateSection, indicating the need for 4 variables
> >     DMSetLocalSection
> >     DMForestSetBaseDM(DM, DMForest) to create a DMForest
> >     DMCreateGlobalVector (and Matrix), so I get a Unknown vector, a RHS
> >     vector, and a matrix for the 4 variables
> >
> >     then I perform multiple time-steps,
> >         DMForestTemplate(DMForest ->  DMForestPost)
> >         Adapt DMForestPost
> >         DMCreateGlovalVector(DMForestPost, RefinedUnknownVector)
> >         DMForestTransferVec(UnknownVector , RefinedUnknownVector)
> >         DMForestPost -> DMForest
> >     and then DMConvert(DMForest,DMPLEX,DM)
> >     and I can solve the system as usual. That also seems to work.
> >
> >     But my conceptual question: how can I convert the other variable
> >     vectors
> >     (obtained with a different section on the same DM) such as density
> and
> >     viscosity and faceVelocity within this framework?
> >
> >
> > Here is my current thinking about DMs. A DM is a function space
> > overlaying a topology. Much to my dismay, we
> > do not have a topology object, so it hides inside DM. DMClone() creates
> > a shallow copy of the topology. We use
> > this to have any number of data layouts through PetscSection, laying
> > over the same underlying topology.
> >
> > So for each layout you have, make a separate clone. Then things like
> > TransferVec() will respond to the layout in
> > that clone. Certainly it works this way in Plex. I admit to not having
> > tried this for TransferVec(), but let me know if
> > you have any problems.
> >
> > BTW, I usually use a dm for the solution, which I give to the solver,
> > say SNESSetDM(snes, dm), and then clone
> > it as dmAux which has the layout for all the auxiliary fields that are
> > not involved in the solve. The Plex examples
> > all use this form.
> >
> >    Thanks,
> >
> >       Matt
> >
> >     The DMForest has the same Section as the original DM and will thus
> have
> >     the space for exactly 4 variables per cell. I tried pushing another
> >     section on the DMForest and DMForestPost, but that does not seem to
> >     work. Please find attached a working example with code to do this,
> >     but I
> >     get the error:
> >
> >     PETSC ERROR: PetscSectionGetChart() line 513 in
> >     /usr/local/petsc-3.12.4/src/vec/is/section/interface/section.c Wrong
> >     type of object: Parameter # 1
> >
> >     So, I is there a way to DMForestTransferVec my other vectors from one
> >     DMForest to DMForestPost. How can I do this?
> >
> >     Many thanks for your help!
> >
> >     Best wishes, Berend.
> >
> >
> >
> > --
> > What most experimenters take for granted before they begin their
> > experiments is infinitely more interesting than any results to which
> > their experiments lead.
> > -- Norbert Wiener
> >
> > https://www.cse.buffalo.edu/~knepley/ <
> http://www.cse.buffalo.edu/~knepley/>
>


-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20200319/a73f72f5/attachment-0001.html>


More information about the petsc-users mailing list