Actual source code: ex2.c

  1: static char help[] = "PETSc Annual Meeting 2025: Meshing Tutorial.\n\n\n";

  3: #include <petsc.h>

  5: static PetscErrorCode CreateMesh(MPI_Comm comm, DM *dm)
  6: {
  7:   PetscFunctionBeginUser;
  8:   PetscCall(DMCreate(comm, dm));
  9:   PetscCall(DMSetType(*dm, DMPLEX));
 10:   PetscCall(DMSetFromOptions(*dm));
 11:   PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
 12:   PetscFunctionReturn(PETSC_SUCCESS);
 13: }

 15: int main(int argc, char **argv)
 16: {
 17:   DM dm;

 19:   PetscFunctionBeginUser;
 20:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
 21:   PetscCall(CreateMesh(PETSC_COMM_WORLD, &dm));
 22:   PetscCall(DMDestroy(&dm));
 23:   PetscCall(PetscFinalize());
 24:   return PETSC_SUCCESS;
 25: }

 27: /*TEST

 29:   # Draw a square with X, use with -draw_pause -1
 30:   test:
 31:     suffix: 0
 32:     requires: triangle x
 33:     args: -dm_view draw -draw_pause 0
 34:     output_file: output/empty.out

 36:   # Draw a square with PyVista
 37:   test:
 38:     suffix: 1
 39:     requires: triangle pyvista
 40:     args: -dm_view pyvista
 41:     output_file: output/empty.out

 43:   # Refine the square
 44:   test:
 45:     suffix: 2
 46:     requires: triangle pyvista
 47:     args: -dm_view pyvista -dm_refine 1
 48:     output_file: output/empty.out

 50:   # Refine the square three times
 51:   test:
 52:     suffix: 3
 53:     requires: triangle pyvista
 54:     args: -dm_view pyvista -dm_refine 3
 55:     output_file: output/empty.out

 57:   # Refine the cube three times
 58:   test:
 59:     suffix: 4
 60:     requires: ctetgen pyvista
 61:     args: -dm_view pyvista -dm_plex_dim 3 -dm_refine 3
 62:     output_file: output/empty.out

 64:   # Draw a sphere with PyVista (all we get is an icosahedron)
 65:   test:
 66:     suffix: 5
 67:     requires: pyvista
 68:     args: -dm_view pyvista -dm_plex_shape sphere
 69:     output_file: output/empty.out

 71:   # Refine the sphere three times
 72:   test:
 73:     suffix: 6
 74:     requires: pyvista
 75:     args: -dm_view pyvista -dm_plex_shape sphere -dm_refine 3
 76:     output_file: output/empty.out

 78:   # Show the 3-sphere
 79:   test:
 80:     suffix: 7
 81:     args: -dm_view -dm_plex_shape sphere -dm_plex_dim 3

 83:   # Extrude the sphere
 84:   test:
 85:     suffix: 8
 86:     requires: pyvista
 87:     args: -dm_view pyvista -dm_plex_shape sphere -dm_refine 1 \
 88:           -dm_plex_transform_type extrude -dm_plex_transform_extrude_layers 3 \
 89:             -dm_plex_transform_extrude_use_tensor 0 -dm_plex_transform_extrude_thickness 0.3
 90:     output_file: output/empty.out

 92:   # Extrude the sphere with cutaway
 93:   test:
 94:     suffix: 9
 95:     requires: pyvista
 96:     args: -dm_view pyvista -view_pyvista_clip 1.,0.,0. -dm_plex_shape sphere -dm_refine 1 \
 97:           -dm_plex_transform_type extrude -dm_plex_transform_extrude_layers 3 \
 98:             -dm_plex_transform_extrude_use_tensor 0 -dm_plex_transform_extrude_thickness 0.3
 99:     output_file: output/empty.out

101:   # Extrude the refined sphere
102:   test:
103:     suffix: 10
104:     requires: pyvista
105:     args: -dm_view pyvista -view_pyvista_clip 1.,0.,0. -dm_plex_shape sphere -dm_refine 3 \
106:           -dm_plex_option_phases ext_ \
107:             -ext_dm_refine 1 -ext_dm_plex_transform_type extrude -ext_dm_plex_transform_extrude_layers 3 \
108:               -ext_dm_plex_transform_extrude_use_tensor 0 -ext_dm_plex_transform_extrude_thickness 0.5
109:     output_file: output/empty.out

111:   # Extrude the refined sphere
112:   test:
113:     suffix: 11
114:     requires: pyvista
115:     args: -dm_view pyvista -view_pyvista_clip 1.,0.,0. -dm_plex_shape sphere -dm_refine 3 \
116:           -dm_plex_option_phases ext_,ref_ \
117:             -ext_dm_refine 1 -ext_dm_plex_transform_type extrude -ext_dm_plex_transform_extrude_layers 3 \
118:               -ext_dm_plex_transform_extrude_use_tensor 0 -ext_dm_plex_transform_extrude_thickness 0.5 \
119:             -ref_dm_refine 1
120:     output_file: output/empty.out

122:   # Refine the Schwartz surface
123:   test:
124:     suffix: 12
125:     requires: pyvista
126:     args: -dm_view pyvista -dm_plex_shape schwarz_p -dm_plex_tps_extent 3,2 -dm_plex_tps_refine 2
127:     output_file: output/empty.out

129:   # Refine and extrude the Schwartz surface with given thickness
130:   test:
131:     suffix: 13
132:     requires: pyvista
133:     args: -dm_view pyvista -dm_plex_shape schwarz_p -dm_plex_tps_extent 3,2,2 -dm_plex_tps_refine 3 \
134:             -dm_plex_tps_thickness 0.4 -dm_plex_tps_layers 3
135:     output_file: output/empty.out

137:   # Filter the square
138:   test:
139:     suffix: 14
140:     requires: triangle pyvista
141:     args: -dm_view pyvista -dm_refine 1 \
142:           -dm_plex_transform_type transform_filter -dm_plex_transform_active filter_cells -dm_plex_label_filter_cells 0,1,2
143:     output_file: output/empty.out

145:   # Filter a cap on the sphere
146:   test:
147:     suffix: 15
148:     requires: pyvista
149:     args: -dm_view pyvista -dm_plex_shape sphere -dm_refine 4 \
150:           -dm_plex_option_phases filt_ \
151:             -filt_dm_refine 1 -filt_dm_plex_transform_type transform_filter \
152:               -filt_dm_plex_transform_active filter_cells -dm_plex_label_filter_cells 0
153:     output_file: output/empty.out

155:   # Filter the sphere minus a cap
156:   test:
157:     suffix: 16
158:     requires: pyvista
159:     args: -dm_view pyvista -dm_plex_shape sphere -dm_refine 4 \
160:           -dm_plex_option_phases filt_ \
161:             -filt_dm_refine 1 -filt_dm_plex_transform_type transform_filter \
162:               -filt_dm_plex_transform_active filter_cells \
163:               -dm_plex_label_filter_cells 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
164:     output_file: output/empty.out

166:   # Convert sphere to quads
167:   test:
168:     suffix: 17
169:     requires: pyvista
170:     args: -dm_view pyvista -dm_plex_shape sphere -dm_refine 3 \
171:           -dm_plex_option_phases conv_ -conv_dm_refine 1 -conv_dm_plex_transform_type refine_tobox
172:     output_file: output/empty.out

174:   # Load and refine the nozzle
175:   test:
176:     suffix: 18
177:     requires: pyvista egads datafilespath
178:     args: -dm_view pyvista -dm_plex_filename /Users/knepley/PETSc4/petsc/petsc-dev/share/petsc/datafiles/meshes/nozzle.stp -dm_refine 3
179:     output_file: output/empty.out

181:   # Load and refine the nozzle, and convert to quads
182:   test:
183:     suffix: 19
184:     requires: pyvista egads datafilespath
185:     args: -dm_view pyvista -dm_plex_filename /Users/knepley/PETSc4/petsc/petsc-dev/share/petsc/datafiles/meshes/nozzle.stp -dm_refine 3 \
186:           -dm_plex_option_phases conv_ -conv_dm_refine 1 -conv_dm_plex_transform_type refine_tobox
187:     output_file: output/empty.out

189: TEST*/