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