1 static char help[] = "Create a Plex Schwarz P surface with quads\n\n";
2
3 #include <petscdmplex.h>
4
main(int argc,char ** argv)5 int main(int argc, char **argv)
6 {
7 DM dm;
8 PetscInt extent[3] = {1, 1, 1}, refine = 0, layers = 0, three;
9 PetscReal thickness = 0.;
10 PetscBool distribute = PETSC_TRUE;
11 DMBoundaryType periodic[3] = {DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE};
12 DMPlexTPSType tps_type = DMPLEX_TPS_SCHWARZ_P;
13
14 PetscFunctionBeginUser;
15 PetscCall(PetscInitialize(&argc, &argv, NULL, help));
16 PetscOptionsBegin(PETSC_COMM_WORLD, NULL, "Schwarz P Example", NULL);
17 PetscCall(PetscOptionsIntArray("-extent", "Number of replicas for each of three dimensions", NULL, extent, (three = 3, &three), NULL));
18 PetscCall(PetscOptionsInt("-refine", "Number of refinements", NULL, refine, &refine, NULL));
19 PetscCall(PetscOptionsEnumArray("-periodic", "Periodicity in each of three dimensions", NULL, DMBoundaryTypes, (PetscEnum *)periodic, (three = 3, &three), NULL));
20 PetscCall(PetscOptionsBool("-distribute", "Distribute TPS manifold prior to refinement and extrusion", NULL, distribute, &distribute, NULL));
21 PetscCall(PetscOptionsInt("-layers", "Number of layers in volumetric extrusion (or zero to not extrude)", NULL, layers, &layers, NULL));
22 PetscCall(PetscOptionsReal("-thickness", "Thickness of volumetric extrusion", NULL, thickness, &thickness, NULL));
23 PetscCall(PetscOptionsEnum("-tps_type", "Type of triply-periodic surface", NULL, DMPlexTPSTypes, (PetscEnum)tps_type, (PetscEnum *)&tps_type, NULL));
24 PetscOptionsEnd();
25 PetscCall(DMPlexCreateTPSMesh(PETSC_COMM_WORLD, tps_type, extent, periodic, distribute, refine, layers, thickness, &dm));
26 PetscCall(PetscObjectSetName((PetscObject)dm, "TPS"));
27 PetscCall(DMViewFromOptions(dm, NULL, "-dm_view"));
28 PetscCall(DMDestroy(&dm));
29 PetscCall(PetscFinalize());
30 return 0;
31 }
32
33 /*TEST
34
35 test:
36 suffix: 0
37 args: -extent 1,2,3 -dm_view -refine 0
38 test:
39 suffix: 1
40 args: -extent 2,3,1 -dm_view -refine 1
41
42 test:
43 suffix: gyroid_0
44 args: -extent 1,2,3 -dm_view -refine 0 -tps_type gyroid
45 test:
46 suffix: gyroid_1
47 args: -extent 2,3,1 -dm_view -refine 1 -tps_type gyroid
48 test:
49 suffix: extrude_0
50 args: -extent 2,3,1 -dm_view -refine 0 -layers 3 -thickness .2
51 test:
52 suffix: extrude_1_dist
53 nsize: 2
54 args: -extent 2,1,1 -dm_view -refine 1 -layers 3 -thickness .2
55
56 TEST*/
57