[petsc-users] Face Set not appearing when loading GMSH mesh to DMPlex
David Andrs
andrsd at gmail.com
Wed Sep 20 12:08:45 CDT 2023
Hi Anna,
I think you are looking at an output from a processor that does not have
the face set loaded.
If I load your mesh with a single MPI, I see:
DM Object: DM_0x84000000_0 1 MPI processes
type: plex
DM_0x84000000_0 in 3 dimensions:
Number of 0-cells per rank: 27499
Number of 1-cells per rank: 180922
Number of 2-cells per rank: 298443
Number of 3-cells per rank: 145019
Labels:
celltype: 4 strata with value/size (0 (27499), 6 (145019), 3 (298443), 1
(180922))
depth: 4 strata with value/size (0 (27499), 1 (180922), 2 (298443), 3
(145019))
Cell Sets: 1 strata with value/size (1 (145019))
Face Sets: 1 strata with value/size (101 (934))
Vertex Sets: 2 strata with value/size (101 (428), 1 (19092))
Which seems to match the gmsh script.
If I load your mesh with more MPIs, and print the DM via `DMView(dm,
PETSC_VIEWER_STDOUT_SELF);` then I can see that some MPI ranks do not have
it. I think this is expected behavior - only ranks that own the
elements attached to the face set will have the face set (or part of it)
defined. Similarly for vertex sets. At least that's how I understand it.
Are you after having the face sets and vertex sets on all ranks?
--
David
On Wed, Sep 20, 2023 at 6:17 AM Anna Dalklint via petsc-users <
petsc-users at mcs.anl.gov> wrote:
> Hello,
>
>
> I am trying to load a mesh, created via the gmsh api, into a DMPlex. The
> code is seen below:
>
> 6 gmsh::initialize();
> 7 elsize0 = 1.0;
> 8 double a = 20.0;
> 9 double b = 20.0;
> 10 double c = 10.0;
> 11 double d = 30.0;
> 12 double e = 70.0;
> 13
> 14 gmsh::model::geo::addPoint(0.0, 0.0, 0.0, elsize0, 1);
> 15 gmsh::model::geo::addPoint(a, 0.0, 0.0, elsize0, 2);
> 16 gmsh::model::geo::addPoint(0.0, d, 0.0, elsize0, 3);
> 17 gmsh::model::geo::addPoint(a, c, 0.0, elsize0, 4);
> 18 gmsh::model::geo::addPoint(e, d, 0.0, elsize0, 5);
> 19 gmsh::model::geo::addPoint(e, c, 0.0, elsize0, 6);
> 20 gmsh::model::geo::addPoint(a, 0.0, b, elsize0, 7);
> 21 gmsh::model::geo::addPoint(0.0, 0.0, b, elsize0, 8);
> 22 gmsh::model::geo::addPoint(0.0, d, b, elsize0, 9);
> 23 gmsh::model::geo::addPoint(e, d, b, elsize0, 10);
> 24 gmsh::model::geo::addPoint(e, c, b, elsize0, 11);
> 25 gmsh::model::geo::addPoint(a, c, b, elsize0, 12);
> 26
> 27 // Define lines connecting points
> 28 gmsh::model::geo::addLine(2, 1, 1);
> 29 gmsh::model::geo::addLine(1, 3, 2);
> 30 gmsh::model::geo::addLine(3, 5, 3);
> 31 gmsh::model::geo::addLine(5, 6, 4);
> 32 gmsh::model::geo::addLine(6, 4, 5);
> 33 gmsh::model::geo::addLine(4, 2, 6);
> 34 gmsh::model::geo::addLine(2, 7, 7);
> 35 gmsh::model::geo::addLine(7, 8, 8);
> 36 gmsh::model::geo::addLine(8, 1, 9);
> 37 gmsh::model::geo::addLine(8, 9, 10);
> 38 gmsh::model::geo::addLine(9, 3, 11);
> 39 gmsh::model::geo::addLine(9, 10, 12);
> 40 gmsh::model::geo::addLine(10, 11, 13);
> 41 gmsh::model::geo::addLine(11, 12, 14);
> 42 gmsh::model::geo::addLine(12, 7, 15);
> 43 gmsh::model::geo::addLine(12, 4, 16);
> 44 gmsh::model::geo::addLine(11, 6, 17);
> 45 gmsh::model::geo::addLine(10, 5, 18);
> 46
> 47 // Define surfaces through their boundaries
> 48 gmsh::model::geo::addCurveLoop({3, 4, 5, 6, 1, 2}, 1);
> 49 gmsh::model::geo::addPlaneSurface({1}, 1);
> 50 gmsh::model::geo::addCurveLoop({18, 4, -17, -13}, 2);
> 51 gmsh::model::geo::addPlaneSurface({2}, 2);
> 52 gmsh::model::geo::addCurveLoop({5, -16, -14, 17}, 3);
> 53 gmsh::model::geo::addPlaneSurface({3}, 3);
> 54 gmsh::model::geo::addCurveLoop({16, 6, 7, -15}, 4);
> 55 gmsh::model::geo::addPlaneSurface({4}, 4);
> 56 gmsh::model::geo::addCurveLoop({12, 13, 14, 15, 8, 10}, 5);
> 57 gmsh::model::geo::addPlaneSurface({5}, 5);
> 58 gmsh::model::geo::addCurveLoop({11, -2, -9, 10}, 6);
> 59 gmsh::model::geo::addPlaneSurface({6}, 6);
> 60 gmsh::model::geo::addCurveLoop({1, -9, -8, -7}, 7);
> 61 gmsh::model::geo::addPlaneSurface({7}, 7);
> 62 gmsh::model::geo::addCurveLoop({11, 3, -18, -12}, 8);
> 63 gmsh::model::geo::addPlaneSurface({8}, 8);
> 64
> 65 gmsh::model::geo::addSurfaceLoop({8, 1, 2, 3, 4, 7, 6, 5}, 1);
> 66 gmsh::model::geo::addVolume({1}, 1);
> 67
> 68 gmsh::model::geo::synchronize();
> 70
> 72 gmsh::model::addPhysicalGroup(3, {1}, 1);
> 74 gmsh::model::addPhysicalGroup(2, {7}, 101, "dir_y");
>
> 98 gmsh::option::setNumber("Mesh.Algorithm", 6);
> 99 gmsh::option::setNumber("Mesh.ElementOrder", 1);
> 100 gmsh::model::mesh::generate(3);
> 101 gmsh::write("filename.msh");
>
>
> The mesh is generated, but the Physical Group is not correctly loaded into
> the DMPlex. If I run a DMView on my dm, I get:
>
>
> 171 DM Object: Parallel Mesh 4 MPI processes
> 172 type: plex
> 173 Parallel Mesh in 3 dimensions:
> 174 Number of 0-cells per rank: 7138 7192 7328 7171
> 175 Number of 1-cells per rank: 45825 45992 46817 45824
> 176 Number of 2-cells per rank: 74791 74901 76203 74568
> 177 Number of 3-cells per rank: 36103 36100 36713 35914
> 178 Labels:
> 179 depth: 4 strata with value/size (0 (7138), 1 (45825), 2 (74791), 3
> (36103))
> 180 celltype: 4 strata with value/size (0 (7138), 1 (45825), 3 (74791),
> 6 (36103))
> 181 Cell Sets: 1 strata with value/size (1 (36103))
> 182 Face Sets: 0 strata with value/size ()
> 183 Vertex Sets: 1 strata with value/size (1 (5200))
>
>
> Why are the elements of the physicalGroup "dir_y" (Plane Surface 7) not
> loaded as a face set? If I change the Plane Surface to another surface,
> e.g. 8, it marks the elements as the correct face set. Another weird thing
> is that the number of vertices in the above Vertex set is not correct.
>
>
> I have tried changing the numbering of Plane Surface 7 (to e.g. 70) but
> the issue remains.
>
>
> I run the code with the -dm_plex_gmsh_mark_vertices and
> -dm_plex_gmsh_multiple_tags flags.
>
>
> Thank you,
> Anna
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20230920/4cb7ea1b/attachment.html>
More information about the petsc-users
mailing list