Actual source code: ex7.c
1: static char help[] = "Create a Plex sphere from quads and create a P1 section\n\n";
3: #include <petscdmplex.h>
5: static PetscErrorCode SetupSection(DM dm)
6: {
7: PetscSection s;
8: PetscInt vStart, vEnd, v;
10: PetscFunctionBeginUser;
11: PetscCall(DMPlexGetDepthStratum(dm, 0, &vStart, &vEnd));
12: PetscCall(PetscSectionCreate(PetscObjectComm((PetscObject)dm), &s));
13: PetscCall(PetscSectionSetNumFields(s, 1));
14: PetscCall(PetscSectionSetFieldComponents(s, 0, 1));
15: PetscCall(PetscSectionSetChart(s, vStart, vEnd));
16: for (v = vStart; v < vEnd; ++v) {
17: PetscCall(PetscSectionSetDof(s, v, 1));
18: PetscCall(PetscSectionSetFieldDof(s, v, 0, 1));
19: }
20: PetscCall(PetscSectionSetUp(s));
21: PetscCall(DMSetLocalSection(dm, s));
22: PetscCall(PetscSectionDestroy(&s));
23: PetscFunctionReturn(PETSC_SUCCESS);
24: }
26: int main(int argc, char **argv)
27: {
28: DM dm;
29: Vec u;
31: PetscFunctionBeginUser;
32: PetscCall(PetscInitialize(&argc, &argv, NULL, help));
33: PetscCall(DMCreate(PETSC_COMM_WORLD, &dm));
34: PetscCall(DMSetType(dm, DMPLEX));
35: PetscCall(DMSetFromOptions(dm));
36: PetscCall(PetscObjectSetName((PetscObject)dm, "Sphere"));
37: PetscCall(DMViewFromOptions(dm, NULL, "-dm_view"));
39: PetscCall(SetupSection(dm));
40: PetscCall(DMGetGlobalVector(dm, &u));
41: PetscCall(VecSet(u, 2));
42: PetscCall(VecViewFromOptions(u, NULL, "-vec_view"));
43: PetscCall(DMRestoreGlobalVector(dm, &u));
44: PetscCall(DMDestroy(&dm));
45: PetscCall(PetscFinalize());
46: return 0;
47: }
49: /*TEST
51: testset:
52: requires: !__float128
53: args: -dm_plex_shape sphere -dm_view
55: test:
56: suffix: 2d_quad
57: args: -dm_plex_simplex 0
59: test:
60: suffix: 2d_tri
61: args:
63: test:
64: suffix: 3d_tri
65: args: -dm_plex_dim 3
67: testset:
68: requires: !__float128
69: args: -dm_plex_shape sphere -petscpartitioner_type simple -dm_view
71: test:
72: suffix: 2d_quad_parallel
73: nsize: 2
74: args: -dm_plex_simplex 0
76: test:
77: suffix: 2d_tri_parallel
78: nsize: 2
80: test:
81: suffix: 3d_tri_parallel
82: nsize: 2
83: args: -dm_plex_dim 3
85: TEST*/