xref: /petsc/src/dm/impls/plex/tutorials/ex7.c (revision b122ec5aa1bd4469eb4e0673542fb7de3f411254)
1c4762a1bSJed Brown static char help[] = "Create a Plex sphere from quads and create a P1 section\n\n";
2c4762a1bSJed Brown 
3c4762a1bSJed Brown #include <petscdmplex.h>
4c4762a1bSJed Brown 
5c4762a1bSJed Brown static PetscErrorCode SetupSection(DM dm)
6c4762a1bSJed Brown {
7c4762a1bSJed Brown   PetscSection   s;
8c4762a1bSJed Brown   PetscInt       vStart, vEnd, v;
9c4762a1bSJed Brown 
10c4762a1bSJed Brown   PetscFunctionBeginUser;
115f80ce2aSJacob Faibussowitsch   CHKERRQ(DMPlexGetDepthStratum(dm, 0, &vStart, &vEnd));
125f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscSectionCreate(PetscObjectComm((PetscObject) dm), &s));
135f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscSectionSetNumFields(s, 1));
145f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscSectionSetFieldComponents(s, 0, 1));
155f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscSectionSetChart(s, vStart, vEnd));
16c4762a1bSJed Brown   for (v = vStart; v < vEnd; ++v) {
175f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscSectionSetDof(s, v, 1));
185f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscSectionSetFieldDof(s, v, 0, 1));
19c4762a1bSJed Brown   }
205f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscSectionSetUp(s));
215f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetLocalSection(dm, s));
225f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscSectionDestroy(&s));
23c4762a1bSJed Brown   PetscFunctionReturn(0);
24c4762a1bSJed Brown }
25c4762a1bSJed Brown 
26c4762a1bSJed Brown int main(int argc, char **argv)
27c4762a1bSJed Brown {
28c4762a1bSJed Brown   DM             dm;
29c4762a1bSJed Brown   Vec            u;
30c4762a1bSJed Brown 
31*b122ec5aSJacob Faibussowitsch   CHKERRQ(PetscInitialize(&argc, &argv, NULL,help));
325f80ce2aSJacob Faibussowitsch   CHKERRQ(DMCreate(PETSC_COMM_WORLD, &dm));
335f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetType(dm, DMPLEX));
345f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(dm));
355f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscObjectSetName((PetscObject) dm, "Sphere"));
365f80ce2aSJacob Faibussowitsch   CHKERRQ(DMViewFromOptions(dm, NULL, "-dm_view"));
3730602db0SMatthew G. Knepley 
385f80ce2aSJacob Faibussowitsch   CHKERRQ(SetupSection(dm));
395f80ce2aSJacob Faibussowitsch   CHKERRQ(DMGetGlobalVector(dm, &u));
405f80ce2aSJacob Faibussowitsch   CHKERRQ(VecSet(u, 2));
415f80ce2aSJacob Faibussowitsch   CHKERRQ(VecViewFromOptions(u, NULL, "-vec_view"));
425f80ce2aSJacob Faibussowitsch   CHKERRQ(DMRestoreGlobalVector(dm, &u));
435f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDestroy(&dm));
44*b122ec5aSJacob Faibussowitsch   CHKERRQ(PetscFinalize());
45*b122ec5aSJacob Faibussowitsch   return 0;
46c4762a1bSJed Brown }
47c4762a1bSJed Brown 
48c4762a1bSJed Brown /*TEST
49c4762a1bSJed Brown 
5030602db0SMatthew G. Knepley   testset:
51c4762a1bSJed Brown     requires: !__float128
5230602db0SMatthew G. Knepley     args: -dm_plex_shape sphere -dm_view
53c4762a1bSJed Brown 
54c4762a1bSJed Brown     test:
5530602db0SMatthew G. Knepley       suffix: 2d_quad
5630602db0SMatthew G. Knepley       args: -dm_plex_simplex 0
57c4762a1bSJed Brown 
58c4762a1bSJed Brown     test:
59c4762a1bSJed Brown       suffix: 2d_tri
6030602db0SMatthew G. Knepley       args:
61c4762a1bSJed Brown 
62c4762a1bSJed Brown     test:
63c4762a1bSJed Brown       suffix: 3d_tri
6430602db0SMatthew G. Knepley       args: -dm_plex_dim 3
6530602db0SMatthew G. Knepley 
6630602db0SMatthew G. Knepley   testset:
67c4762a1bSJed Brown     requires: !__float128
68e600fa54SMatthew G. Knepley     args: -dm_plex_shape sphere -petscpartitioner_type simple -dm_view
6930602db0SMatthew G. Knepley 
7030602db0SMatthew G. Knepley     test:
7130602db0SMatthew G. Knepley       suffix: 2d_quad_parallel
7230602db0SMatthew G. Knepley       nsize: 2
7330602db0SMatthew G. Knepley       args: -dm_plex_simplex 0
7430602db0SMatthew G. Knepley 
7530602db0SMatthew G. Knepley     test:
7630602db0SMatthew G. Knepley       suffix: 2d_tri_parallel
7730602db0SMatthew G. Knepley       nsize: 2
78c4762a1bSJed Brown 
79c4762a1bSJed Brown     test:
80c4762a1bSJed Brown       suffix: 3d_tri_parallel
81c4762a1bSJed Brown       nsize: 2
8230602db0SMatthew G. Knepley       args: -dm_plex_dim 3
83c4762a1bSJed Brown 
84c4762a1bSJed Brown TEST*/
85