[petsc-users] Question about DMPLEX/P4EST with different Sections
Matthew Knepley
knepley at gmail.com
Thu Mar 19 17:39:53 CDT 2020
Okay this runs for me.
Thanks,
Matt
On Thu, Mar 19, 2020 at 6:07 PM Matthew Knepley <knepley at gmail.com> wrote:
> 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/>
>
--
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/680b2442/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dmplexp4est.c
Type: application/octet-stream
Size: 7713 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20200319/680b2442/attachment.obj>
More information about the petsc-users
mailing list