[petsc-dev] DMPlex + P_1 FE interpolation

Matthew Knepley knepley at gmail.com
Sun Feb 9 23:20:34 CST 2020


On Sun, Feb 9, 2020 at 3:23 PM Pierre Jolivet <pierre.jolivet at enseeiht.fr>
wrote:

> Hello,
> I’ve a hard time answering the following DMPlex questions by just looking
> at some of the examples and manual.
> Considering two DMPlex dm and dma, as in
> petsc/src/dm/impls/plex/examples/tests/ex19.c, I’d like to interpolate a
> simple P_1 FE function from dm to dma.
> The DMCreateInterpolation call gives me:
> [0]PETSC ERROR: Invalid argument
> [0]PETSC ERROR: Number of fine indices 0 != 4 dual basis vecs
> […]
>

It looks like your fine grid has no discretization, since 0 is numFIndices
from

  ierr = DMPlexGetClosureIndices(dmf, fsection, globalFSection, cell,
&numFIndices, &findices, NULL);CHKERRQ(ierr);


> [0]PETSC ERROR: #1 DMPlexComputeInterpolatorGeneral() line 2508 in
> petsc/src/dm/impls/plex/plexfem.c
> [0]PETSC ERROR: #2 DMCreateInterpolation_Plex() line 7688 in
> petsc/src/dm/impls/plex/plex.c
> [0]PETSC ERROR: #3 DMCreateInterpolation() line 1139 in
> petsc/src/dm/interface/dm.c
> But the DMs look OK, don’t they, cf. below?
> So I have three simple questions:
> 1) are all tests at the bottom of ex19.c broken because of PRAgMaTIc or
> because of DMPlex currently not supporting some operations? (I’m not using
> PRAgMaTIc to do mesh adaptation, so I was hoping to not run into an error)
>

I don't think its broken.


> 2) is DMCreateInterpolation + MatInterpolate the correct way of
> transferring one Vec from a DMPlex onto another?
>

That is the intent.


> 3) if yes, by looking at the names of the arguments in
> DMPlexComputeInterpolatorGeneral, dmc and dmf, could you comment on the
> performance of this function for unrelated meshes, e.g., if both DMs are
> “fine” and not one coarse and the other fine (albeit non-nested), for
> simple P_k spaces.
>

In general, it is going to be horrible. Here is what it does: locate the
fine quadrature points in the coarse grid and interpolate to them. This
quadrature can have huge errors if it falls across multiple cells. This is
why the nested version works perfectly, and also why Patrick Farrell and
James Maddison have the Supermesh library, which makes a refinement of the
mesh until the quadrature is accurate everywhere. That way they guarantee
that at least the zeroth moment is preserved.

  Thanks,

    Matt


> Thanks in advance for your help,
> Pierre
>
> $ mpirun -n 1 ./ex19 -msh in.msh -init_dm_view ::ascii_info -adapt_dm_view
> ::ascii_info -mat_view ::ascii_info -do_L2 -petscspace_degree 1
> DM Object: DMinit 1 MPI processes
>   type: plex
> DMinit in 3 dimensions:
>   0-cells: 1331
>   1-cells: 7930
>   2-cells: 12600
>   3-cells: 6000
> Labels:
>   depth: 4 strata with value/size (0 (1331), 1 (7930), 2 (12600), 3 (6000))
>   Face Sets: 6 strata with value/size (4 (200), 1 (200), 5 (200), 2 (200),
> 3 (200), 6 (200))
>   Cell Sets: 1 strata with value/size (0 (6000))
> DM Object: DMadapt (adapt_) 1 MPI processes
>   type: plex
> DMadapt in 3 dimensions:
>   0-cells: 2905
>   1-cells: 18888
>   2-cells: 31368
>   3-cells: 15384
> Labels:
>   depth: 4 strata with value/size (0 (2905), 1 (18888), 2 (31368), 3
> (15384))
>   Face Sets: 6 strata with value/size (1 (200), 4 (200), 6 (200), 2 (200),
> 5 (200), 3 (200))
>   Cell Sets: 1 strata with value/size (0 (15384))
>
>
>

-- 
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-dev/attachments/20200210/b78eabc6/attachment.html>


More information about the petsc-dev mailing list