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