1 static char help[] = "PETSc Annual Meeting 2025: Meshing Tutorial.\n\n\n";
2
3 #include <petsc.h>
4
CreateMesh(MPI_Comm comm,DM * dm)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 }
14
main(int argc,char ** argv)15 int main(int argc, char **argv)
16 {
17 DM dm;
18
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 }
26
27 /*TEST
28
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
35
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
42
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
49
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
56
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
63
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
70
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
77
78 # Show the 3-sphere
79 test:
80 suffix: 7
81 args: -dm_view -dm_plex_shape sphere -dm_plex_dim 3
82
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
91
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
100
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
110
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
121
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
128
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
136
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
144
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
154
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
165
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
173
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
180
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
188
189 TEST*/
190