xref: /petsc/src/dm/impls/plex/tutorials/ex13.c (revision b7f5c0552e8084366e38178a868f823e9aa0bcbd)
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