[petsc-users] DMPlex for cell centred finite volume

Nathan Collier nathaniel.collier at gmail.com
Tue Aug 27 06:27:50 CDT 2019


Here is a example of what I think you need:

https://github.com/TDycores-Project/toy-problems/blob/master/TracyProblem/Richards.c

It is written to solve Richard's equation using a simple two-point flux,
but it may be helpful to look at the setup and residual loop.

Nate


On Tue, Aug 27, 2019 at 6:55 AM Matthew Knepley via petsc-users <
petsc-users at mcs.anl.gov> wrote:

> On Tue, Aug 27, 2019 at 4:54 AM Edoardo alinovi <edoardo.alinovi at gmail.com>
> wrote:
>
>> Hello Matt,
>>
>> Thanks for your kind replay. Using DMplex and changing the data structure
>> is not a straightforward task as you can imagine. Up to now I am in the
>> preliminaries and I am trying to understand how to reuse most of all my
>> subroutines (I am using fortran) such as fluxes and coeffs assembly,
>> numerical schemes  and so o in order to avoid to rewrite all the code :p I
>> will start with your first two suggestions and see if it is  an affordable
>> task :)
>>
>> For the face value, I am not interested in Reimann solvers. Being
>> incompressible I am using Central difference, QUICK, SOU, Upwind or
>> TVD-family schemes, but maybe I can use my stuff to get it.
>>
>> I think I can be happy enough having the ghost cell centers available and
>> some way to deal with the BC (I guess this will be the most tricky part).
>> Basically I would like to use DMplex at low level just to have a support
>> for the parallel mesh management.
>> Have you got some example for P0 finite elements and overlap=1?
>>
>
> This is one group already using PETSc in exactly this way for a FV code.
>
> Maybe it would help if I gave a high-level overview of this usage pattern.
>
> 1) Hopefully replacing your current mesh topology/geometry with Plex is
> not hard. Let me know if you have any questions about this.
>
> 2) If you give overlap=1 on distribution, then support(face) for any
> regular face gives the two cells on either side. You
>     probably want to screen out faces between two ghost cells. There is a
> DMLabel for doing that.
>
> 3) A PetscSection just gives the data layout over a mesh. The idea here is
> to make it describe _exactly_ the layout you already have.
>     The DMGetGlobalVector() and DMGetLocalVector() should produce vectors
> in your existing order and you can reuse all your code.
>
>   Thanks,
>
>      Matt
>
>
>> Thank you! :)
>>
>> Il giorno mar 27 ago 2019 alle ore 09:33 Matthew Knepley <
>> knepley at gmail.com> ha scritto:
>>
>>> On Tue, Aug 27, 2019 at 4:07 AM Edoardo alinovi via petsc-users <
>>> petsc-users at mcs.anl.gov> wrote:
>>>
>>>> Hello PETSc users and developers,
>>>> I hope you are doing well! Today I have a general question about DMplex
>>>> to see if it can be usefull to me or not.
>>>>
>>>> I have my fancy finite volume solver (cell centered, incompressible NS)
>>>> which uses petsc as linear solver engine. Thanks to your suggestions so far
>>>> it is now running well :)
>>>>
>>>> I would like to see if I can do another step incapsulatng in petsc also
>>>> the mesh managment part. I think that Dmplex is the way to go since my code
>>>> is fully unstructured.
>>>>
>>>> I have red some papers and lectures by Matt around the web, but still I
>>>> have not found an answer to this question:
>>>> Can dmplex dial with cell centered data arrangement and provide some
>>>> support for basic operation (e. g. interpolation between partitions, face
>>>> value calculation etc)?
>>>>
>>>
>>> 1) Cell centered data
>>>
>>> Definitely yes. This is the same data layout as P0 finite elements. You
>>> just assign the PetscSection k dofs per cell.
>>>
>>> 2) Interpolation between partitions
>>>
>>> I assume you mean ghost values from other parallel partitions. You can
>>> do this by using overlap=1 in DMPlexDisrtibute().
>>>
>>> 3) Face value calculation
>>>
>>> You can do Riemann solves by looping over faces, grabbing values from
>>> the neighboring cells, doing the calculation, and
>>> updating cell values. We carry out this kind of computation in TS ex11.
>>> That example attempts to do everything, so it is
>>> messy, but we can help you understand what it is doing in any part that
>>> is unclear.
>>>
>>> 4) FV boundary conditions
>>>
>>> You can use DMPlexConstructGhostCells() to put artificial cells around
>>> the boundary that you use to prescribe fluxes.
>>>
>>>   Thanks,
>>>
>>>      Matt
>>>
>>>
>>>> Thank you very much!
>>>>
>>>> Edo
>>>>
>>>
>>>
>>> --
>>> 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/20190827/97249391/attachment.html>


More information about the petsc-users mailing list