[petsc-users] DMPlex filter with Face Sets

Thibault Bridel-Bertomeu thibault.bridelbertomeu at gmail.com
Sat Jan 15 06:07:23 CST 2022


Le ven. 14 janv. 2022 à 15:52, Matthew Knepley <knepley at gmail.com> a écrit :

> On Fri, Jan 14, 2022 at 9:48 AM Lawrence Mitchell <wencel at gmail.com>
> wrote:
>
>> > On 14 Jan 2022, at 14:12, Matthew Knepley <knepley at gmail.com> wrote:
>> >
>> > On Fri, Jan 14, 2022 at 9:07 AM Thibault Bridel-Bertomeu <
>> thibault.bridelbertomeu at gmail.com> wrote:
>> > Also, if we still consider my example with Solid and Fluid, let's image
>> we call DMPlexFilter twice. We then get two new DMs with Solid in one and
>> Fluid in the other one.
>> >
>> > The labels will be communicated, so fluidDM will still know Wall,
>> Inlet, Freestream and Outlet and on the other hand, solidDM will still know
>> Wall and Insulation : those two domain share the Wall stratum of the Face
>> Sets.
>> >
>> > Can I extract data at the Wall label from the solidDM and transfer it
>> to the Wall label of the fluidDM ?
>> >
>> > Yes, conceptually here is how that would work. You iterate over the
>> label, extracting the values you want. You map those points
>> > to points in the original mesh using the subpointMap, and then map them
>> again using the subpointMap from the fluidDM down to it.
>> > Now you can insert the values using the section in the fluidDM. I think
>> the easiest way to do this is to setup a VecScatter (or PetscSF)
>> > from one boundary to the other. Then you would just stick in the two
>> vectors and call VecScatterBegin/End()
>> >
>> > If this turns out to be useful, this construction is something we could
>> easily automate in the library.
>>
>> I've needed this too, I think I have some code lying around, let me see
>> if I can port it into DMPlexFilter..
>
>
Hi Lawrence,

Thank you so much, that would be great ! Would you mind sending the
original snippet of code, maybe I can figure it out ?


>
> I did the initial implementation for the label filtering. It is here
>
>   https://gitlab.com/petsc/petsc/-/merge_requests/4717
>
> Thibault, can you try it on your example? I will not have time to code up
> a nice test until I get home from this conference.
>

Hi Matt,

Thank you for the quick mod.
It works well, the labels are passed down to the filtered DMPlex as we can
see in the example below :

// Overall plex :

DM Object: CoupledPhysics_Plex 1 MPI processes

  type: plex

CoupledPhysics_Plex in 2 dimensions:

  Number of 0-cells per rank: 1409

  Number of 1-cells per rank: 4084

  Number of 2-cells per rank: 2676

Labels:

  celltype: 3 strata with value/size (0 (1409), 3 (2676), 1 (4084))

  depth: 3 strata with value/size (0 (1409), 1 (4084), 2 (2676))

  Cell Sets: 2 strata with value/size (1 (924), 2 (1752))

  Solid: 1 strata with value/size (1 (924))

  Fluid: 1 strata with value/size (2 (1752))

  Face Sets: 5 strata with value/size (4 (60), 3 (40), 7 (20), 5 (40), 6
(20))

  Insulation: 1 strata with value/size (4 (60))

  Wall: 1 strata with value/size (3 (40))

  Outlet: 1 strata with value/size (7 (20))

  Freestream: 1 strata with value/size (5 (40))

  Inlet: 1 strata with value/size (6 (20))


// Fluid plex :

DM Object: 1 MPI processes

  type: plex

DM_0x12471c2f0_1 in 2 dimensions:

  Number of 0-cells per rank: 937

  Number of 1-cells per rank: 2688

  Number of 2-cells per rank: 1752

Labels:

  celltype: 3 strata with value/size (0 (937), 1 (2688), 3 (1752))

  depth: 3 strata with value/size (0 (937), 1 (2688), 2 (1752))

  Cell Sets: 1 strata with value/size (2 (1752))

  Solid: 0 strata with value/size ()

  Fluid: 1 strata with value/size (2 (1752))

  Face Sets: 4 strata with value/size (3 (40), 7 (20), 5 (40), 6 (20))

  Insulation: 0 strata with value/size ()

  Wall: 1 strata with value/size (3 (40))

  Outlet: 1 strata with value/size (7 (20))

  Freestream: 1 strata with value/size (5 (40))

  Inlet: 1 strata with value/size (6 (20))


// Solid plex :

DM Object: 1 MPI processes

  type: plex

DM_0x12471c2f0_2 in 2 dimensions:

  Number of 0-cells per rank: 513

  Number of 1-cells per rank: 1436

  Number of 2-cells per rank: 924

Labels:

  celltype: 3 strata with value/size (0 (513), 1 (1436), 3 (924))

  depth: 3 strata with value/size (0 (513), 1 (1436), 2 (924))

  Cell Sets: 1 strata with value/size (1 (924))

  Solid: 1 strata with value/size (1 (924))

  Fluid: 0 strata with value/size ()

  Face Sets: 2 strata with value/size (4 (60), 3 (40))

  Insulation: 1 strata with value/size (4 (60))

  Wall: 1 strata with value/size (3 (40))

  Outlet: 0 strata with value/size ()

  Freestream: 0 strata with value/size ()
  Inlet: 0 strata with value/size ()

I think it would be perfect if the 0-sized labels were also completely
filtered out. Is that something that you could add to the
DMPlexFliterLabels_Internal function ?
By the way, I believe there is a typo in the name of the function, it
should read "F*il*ter".

Thanks again !!
Thibault

  Thanks,
>
>      Matt
>
>
>> Lawrence
>
>
>
> --
> 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/20220115/e7d04863/attachment-0001.html>


More information about the petsc-users mailing list