xref: /petsc/src/dm/impls/plex/tutorials/ex7.c (revision 31d78bcd2b98084dc1368b20eb1129c8b9fb39fe)
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 
SetupSection(DM dm)5d71ae5a4SJacob Faibussowitsch static PetscErrorCode SetupSection(DM dm)
6d71ae5a4SJacob Faibussowitsch {
7c4762a1bSJed Brown   PetscSection s;
8c4762a1bSJed Brown   PetscInt     vStart, vEnd, v;
9c4762a1bSJed Brown 
10c4762a1bSJed Brown   PetscFunctionBeginUser;
119566063dSJacob Faibussowitsch   PetscCall(DMPlexGetDepthStratum(dm, 0, &vStart, &vEnd));
129566063dSJacob Faibussowitsch   PetscCall(PetscSectionCreate(PetscObjectComm((PetscObject)dm), &s));
139566063dSJacob Faibussowitsch   PetscCall(PetscSectionSetNumFields(s, 1));
149566063dSJacob Faibussowitsch   PetscCall(PetscSectionSetFieldComponents(s, 0, 1));
159566063dSJacob Faibussowitsch   PetscCall(PetscSectionSetChart(s, vStart, vEnd));
16c4762a1bSJed Brown   for (v = vStart; v < vEnd; ++v) {
179566063dSJacob Faibussowitsch     PetscCall(PetscSectionSetDof(s, v, 1));
189566063dSJacob Faibussowitsch     PetscCall(PetscSectionSetFieldDof(s, v, 0, 1));
19c4762a1bSJed Brown   }
209566063dSJacob Faibussowitsch   PetscCall(PetscSectionSetUp(s));
219566063dSJacob Faibussowitsch   PetscCall(DMSetLocalSection(dm, s));
229566063dSJacob Faibussowitsch   PetscCall(PetscSectionDestroy(&s));
23*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
24c4762a1bSJed Brown }
25c4762a1bSJed Brown 
main(int argc,char ** argv)26d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
27d71ae5a4SJacob Faibussowitsch {
28c4762a1bSJed Brown   DM  dm;
29c4762a1bSJed Brown   Vec u;
30c4762a1bSJed Brown 
31327415f7SBarry Smith   PetscFunctionBeginUser;
329566063dSJacob Faibussowitsch   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
339566063dSJacob Faibussowitsch   PetscCall(DMCreate(PETSC_COMM_WORLD, &dm));
349566063dSJacob Faibussowitsch   PetscCall(DMSetType(dm, DMPLEX));
359566063dSJacob Faibussowitsch   PetscCall(DMSetFromOptions(dm));
369566063dSJacob Faibussowitsch   PetscCall(PetscObjectSetName((PetscObject)dm, "Sphere"));
379566063dSJacob Faibussowitsch   PetscCall(DMViewFromOptions(dm, NULL, "-dm_view"));
3830602db0SMatthew G. Knepley 
399566063dSJacob Faibussowitsch   PetscCall(SetupSection(dm));
409566063dSJacob Faibussowitsch   PetscCall(DMGetGlobalVector(dm, &u));
419566063dSJacob Faibussowitsch   PetscCall(VecSet(u, 2));
429566063dSJacob Faibussowitsch   PetscCall(VecViewFromOptions(u, NULL, "-vec_view"));
439566063dSJacob Faibussowitsch   PetscCall(DMRestoreGlobalVector(dm, &u));
449566063dSJacob Faibussowitsch   PetscCall(DMDestroy(&dm));
459566063dSJacob Faibussowitsch   PetscCall(PetscFinalize());
46b122ec5aSJacob Faibussowitsch   return 0;
47c4762a1bSJed Brown }
48c4762a1bSJed Brown 
49c4762a1bSJed Brown /*TEST
50c4762a1bSJed Brown 
5130602db0SMatthew G. Knepley   testset:
52c4762a1bSJed Brown     requires: !__float128
5330602db0SMatthew G. Knepley     args: -dm_plex_shape sphere -dm_view
54c4762a1bSJed Brown 
55c4762a1bSJed Brown     test:
5630602db0SMatthew G. Knepley       suffix: 2d_quad
5730602db0SMatthew G. Knepley       args: -dm_plex_simplex 0
58c4762a1bSJed Brown 
59c4762a1bSJed Brown     test:
60c4762a1bSJed Brown       suffix: 2d_tri
6130602db0SMatthew G. Knepley       args:
62c4762a1bSJed Brown 
63c4762a1bSJed Brown     test:
64c4762a1bSJed Brown       suffix: 3d_tri
6530602db0SMatthew G. Knepley       args: -dm_plex_dim 3
6630602db0SMatthew G. Knepley 
6730602db0SMatthew G. Knepley   testset:
68c4762a1bSJed Brown     requires: !__float128
69e600fa54SMatthew G. Knepley     args: -dm_plex_shape sphere -petscpartitioner_type simple -dm_view
7030602db0SMatthew G. Knepley 
7130602db0SMatthew G. Knepley     test:
7230602db0SMatthew G. Knepley       suffix: 2d_quad_parallel
7330602db0SMatthew G. Knepley       nsize: 2
7430602db0SMatthew G. Knepley       args: -dm_plex_simplex 0
7530602db0SMatthew G. Knepley 
7630602db0SMatthew G. Knepley     test:
7730602db0SMatthew G. Knepley       suffix: 2d_tri_parallel
7830602db0SMatthew G. Knepley       nsize: 2
79c4762a1bSJed Brown 
80c4762a1bSJed Brown     test:
81c4762a1bSJed Brown       suffix: 3d_tri_parallel
82c4762a1bSJed Brown       nsize: 2
8330602db0SMatthew G. Knepley       args: -dm_plex_dim 3
84c4762a1bSJed Brown 
85c4762a1bSJed Brown TEST*/
86