1b7f5c055SJed Brown static char help[] = "Create a Plex Schwarz P surface with quads\n\n";
2b7f5c055SJed Brown
3b7f5c055SJed Brown #include <petscdmplex.h>
4b7f5c055SJed Brown
main(int argc,char ** argv)5*d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
6*d71ae5a4SJacob Faibussowitsch {
7b7f5c055SJed Brown DM dm;
8b7f5c055SJed Brown PetscInt extent[3] = {1, 1, 1}, refine = 0, layers = 0, three;
9b7f5c055SJed Brown PetscReal thickness = 0.;
101436d7faSJed Brown PetscBool distribute = PETSC_TRUE;
11b7f5c055SJed Brown DMBoundaryType periodic[3] = {DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE};
12b7f5c055SJed Brown DMPlexTPSType tps_type = DMPLEX_TPS_SCHWARZ_P;
13b7f5c055SJed Brown
14327415f7SBarry Smith PetscFunctionBeginUser;
159566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help));
16d0609cedSBarry Smith PetscOptionsBegin(PETSC_COMM_WORLD, NULL, "Schwarz P Example", NULL);
179566063dSJacob Faibussowitsch PetscCall(PetscOptionsIntArray("-extent", "Number of replicas for each of three dimensions", NULL, extent, (three = 3, &three), NULL));
189566063dSJacob Faibussowitsch PetscCall(PetscOptionsInt("-refine", "Number of refinements", NULL, refine, &refine, NULL));
199566063dSJacob Faibussowitsch PetscCall(PetscOptionsEnumArray("-periodic", "Periodicity in each of three dimensions", NULL, DMBoundaryTypes, (PetscEnum *)periodic, (three = 3, &three), NULL));
209566063dSJacob Faibussowitsch PetscCall(PetscOptionsBool("-distribute", "Distribute TPS manifold prior to refinement and extrusion", NULL, distribute, &distribute, NULL));
219566063dSJacob Faibussowitsch PetscCall(PetscOptionsInt("-layers", "Number of layers in volumetric extrusion (or zero to not extrude)", NULL, layers, &layers, NULL));
229566063dSJacob Faibussowitsch PetscCall(PetscOptionsReal("-thickness", "Thickness of volumetric extrusion", NULL, thickness, &thickness, NULL));
239566063dSJacob Faibussowitsch PetscCall(PetscOptionsEnum("-tps_type", "Type of triply-periodic surface", NULL, DMPlexTPSTypes, (PetscEnum)tps_type, (PetscEnum *)&tps_type, NULL));
24d0609cedSBarry Smith PetscOptionsEnd();
259566063dSJacob Faibussowitsch PetscCall(DMPlexCreateTPSMesh(PETSC_COMM_WORLD, tps_type, extent, periodic, distribute, refine, layers, thickness, &dm));
269566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)dm, "TPS"));
279566063dSJacob Faibussowitsch PetscCall(DMViewFromOptions(dm, NULL, "-dm_view"));
289566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm));
299566063dSJacob Faibussowitsch PetscCall(PetscFinalize());
30b122ec5aSJacob Faibussowitsch return 0;
31b7f5c055SJed Brown }
32b7f5c055SJed Brown
33b7f5c055SJed Brown /*TEST
34b7f5c055SJed Brown
35b7f5c055SJed Brown test:
36b7f5c055SJed Brown suffix: 0
37b7f5c055SJed Brown args: -extent 1,2,3 -dm_view -refine 0
38b7f5c055SJed Brown test:
39b7f5c055SJed Brown suffix: 1
40b7f5c055SJed Brown args: -extent 2,3,1 -dm_view -refine 1
41b7f5c055SJed Brown
42b7f5c055SJed Brown test:
43b7f5c055SJed Brown suffix: gyroid_0
44b7f5c055SJed Brown args: -extent 1,2,3 -dm_view -refine 0 -tps_type gyroid
45b7f5c055SJed Brown test:
46b7f5c055SJed Brown suffix: gyroid_1
47b7f5c055SJed Brown args: -extent 2,3,1 -dm_view -refine 1 -tps_type gyroid
48b7f5c055SJed Brown test:
49b7f5c055SJed Brown suffix: extrude_0
50b7f5c055SJed Brown args: -extent 2,3,1 -dm_view -refine 0 -layers 3 -thickness .2
511436d7faSJed Brown test:
521436d7faSJed Brown suffix: extrude_1_dist
531436d7faSJed Brown nsize: 2
541436d7faSJed Brown args: -extent 2,1,1 -dm_view -refine 1 -layers 3 -thickness .2
55b7f5c055SJed Brown
56b7f5c055SJed Brown TEST*/
57