1145b44c9SPierre Jolivet static char help[] = "DMSwarm-PIC demonstrator of inserting points into a cell DM \n\
2c4762a1bSJed Brown Options: \n\
3c4762a1bSJed Brown -mode {0,1} : 0 ==> DMDA, 1 ==> DMPLEX cell DM \n\
4c4762a1bSJed Brown -dim {2,3} : spatial dimension\n";
5c4762a1bSJed Brown
6c4762a1bSJed Brown #include <petsc.h>
7c4762a1bSJed Brown #include <petscdm.h>
8c4762a1bSJed Brown #include <petscdmda.h>
9c4762a1bSJed Brown #include <petscdmplex.h>
10c4762a1bSJed Brown #include <petscdmswarm.h>
11c4762a1bSJed Brown
pic_insert_DMDA(PetscInt dim)12d71ae5a4SJacob Faibussowitsch PetscErrorCode pic_insert_DMDA(PetscInt dim)
13d71ae5a4SJacob Faibussowitsch {
14c4762a1bSJed Brown DM celldm = NULL, swarm;
15c4762a1bSJed Brown PetscInt dof, stencil_width;
16c4762a1bSJed Brown PetscReal min[3], max[3];
17c4762a1bSJed Brown PetscInt ndir[3];
18c4762a1bSJed Brown
19c4762a1bSJed Brown PetscFunctionBegin;
20c4762a1bSJed Brown /* Create the background cell DM */
21c4762a1bSJed Brown dof = 1;
22c4762a1bSJed Brown stencil_width = 1;
2348a46eb9SPierre Jolivet if (dim == 2) PetscCall(DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DMDA_STENCIL_BOX, 25, 13, PETSC_DECIDE, PETSC_DECIDE, dof, stencil_width, NULL, NULL, &celldm));
2448a46eb9SPierre Jolivet if (dim == 3) PetscCall(DMDACreate3d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DMDA_STENCIL_BOX, 25, 13, 19, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, dof, stencil_width, NULL, NULL, NULL, &celldm));
25c4762a1bSJed Brown
269566063dSJacob Faibussowitsch PetscCall(DMDASetElementType(celldm, DMDA_ELEMENT_Q1));
27*19307e5cSMatthew G. Knepley PetscCall(PetscObjectSetName((PetscObject)celldm, "Cell DM"));
289566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(celldm));
299566063dSJacob Faibussowitsch PetscCall(DMSetUp(celldm));
30c4762a1bSJed Brown
319566063dSJacob Faibussowitsch PetscCall(DMDASetUniformCoordinates(celldm, 0.0, 2.0, 0.0, 1.0, 0.0, 1.5));
32c4762a1bSJed Brown
33c4762a1bSJed Brown /* Create the DMSwarm */
349566063dSJacob Faibussowitsch PetscCall(DMCreate(PETSC_COMM_WORLD, &swarm));
359566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)swarm, "Swarm"));
369566063dSJacob Faibussowitsch PetscCall(DMSetType(swarm, DMSWARM));
379566063dSJacob Faibussowitsch PetscCall(DMSetDimension(swarm, dim));
38c4762a1bSJed Brown
39c4762a1bSJed Brown /* Configure swarm to be of type PIC */
409566063dSJacob Faibussowitsch PetscCall(DMSwarmSetType(swarm, DMSWARM_PIC));
419566063dSJacob Faibussowitsch PetscCall(DMSwarmSetCellDM(swarm, celldm));
42c4762a1bSJed Brown
43c4762a1bSJed Brown /* Register two scalar fields within the DMSwarm */
449566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(swarm, "viscosity", 1, PETSC_DOUBLE));
459566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(swarm, "density", 1, PETSC_DOUBLE));
469566063dSJacob Faibussowitsch PetscCall(DMSwarmFinalizeFieldRegister(swarm));
47c4762a1bSJed Brown
48c4762a1bSJed Brown /* Set initial local sizes of the DMSwarm with a buffer length of zero */
499566063dSJacob Faibussowitsch PetscCall(DMSwarmSetLocalSizes(swarm, 4, 0));
50c4762a1bSJed Brown
51c4762a1bSJed Brown /* Insert swarm coordinates cell-wise */
529566063dSJacob Faibussowitsch PetscCall(DMSwarmInsertPointsUsingCellDM(swarm, DMSWARMPIC_LAYOUT_REGULAR, 3));
539371c9d4SSatish Balay min[0] = 0.5;
549371c9d4SSatish Balay max[0] = 0.7;
559371c9d4SSatish Balay min[1] = 0.5;
569371c9d4SSatish Balay max[1] = 0.8;
579371c9d4SSatish Balay min[2] = 0.5;
589371c9d4SSatish Balay max[2] = 0.9;
59c4762a1bSJed Brown ndir[0] = ndir[1] = ndir[2] = 30;
609566063dSJacob Faibussowitsch PetscCall(DMSwarmSetPointsUniformCoordinates(swarm, min, max, ndir, ADD_VALUES));
61c4762a1bSJed Brown
62c4762a1bSJed Brown /* This should be dispatched from a regular DMView() */
639566063dSJacob Faibussowitsch PetscCall(DMSwarmViewXDMF(swarm, "ex20.xmf"));
649566063dSJacob Faibussowitsch PetscCall(DMView(celldm, PETSC_VIEWER_STDOUT_WORLD));
659566063dSJacob Faibussowitsch PetscCall(DMView(swarm, PETSC_VIEWER_STDOUT_WORLD));
66c4762a1bSJed Brown
67c4762a1bSJed Brown {
68c4762a1bSJed Brown PetscInt npoints, *list;
69c4762a1bSJed Brown PetscMPIInt rank;
70c4762a1bSJed Brown
719566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
729566063dSJacob Faibussowitsch PetscCall(DMSwarmSortGetAccess(swarm));
739566063dSJacob Faibussowitsch PetscCall(DMSwarmSortGetNumberOfPointsPerCell(swarm, 0, &npoints));
749566063dSJacob Faibussowitsch PetscCall(DMSwarmSortGetPointsPerCell(swarm, rank, &npoints, &list));
75fe11354eSMatthew G. Knepley PetscCall(DMSwarmSortRestorePointsPerCell(swarm, rank, &npoints, &list));
769566063dSJacob Faibussowitsch PetscCall(DMSwarmSortRestoreAccess(swarm));
77c4762a1bSJed Brown }
789566063dSJacob Faibussowitsch PetscCall(DMSwarmMigrate(swarm, PETSC_FALSE));
799566063dSJacob Faibussowitsch PetscCall(DMDestroy(&celldm));
809566063dSJacob Faibussowitsch PetscCall(DMDestroy(&swarm));
813ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
82c4762a1bSJed Brown }
83c4762a1bSJed Brown
pic_insert_DMPLEX_with_cell_list(PetscInt dim)84d71ae5a4SJacob Faibussowitsch PetscErrorCode pic_insert_DMPLEX_with_cell_list(PetscInt dim)
85d71ae5a4SJacob Faibussowitsch {
86c4762a1bSJed Brown DM celldm = NULL, swarm, distributedMesh = NULL;
87c4762a1bSJed Brown const char *fieldnames[] = {"viscosity"};
88c4762a1bSJed Brown
89c4762a1bSJed Brown PetscFunctionBegin;
90c4762a1bSJed Brown /* Create the background cell DM */
91c4762a1bSJed Brown if (dim == 2) {
92c4762a1bSJed Brown PetscInt cells_per_dim[2], nx[2];
93c4762a1bSJed Brown PetscInt n_tricells;
94c4762a1bSJed Brown PetscInt n_trivert;
95a4a685f2SJacob Faibussowitsch PetscInt *tricells;
96a4a685f2SJacob Faibussowitsch PetscReal *trivert, dx, dy;
97c4762a1bSJed Brown PetscInt ii, jj, cnt;
98c4762a1bSJed Brown
99c4762a1bSJed Brown cells_per_dim[0] = 4;
100c4762a1bSJed Brown cells_per_dim[1] = 4;
101c4762a1bSJed Brown n_tricells = cells_per_dim[0] * cells_per_dim[1] * 2;
102c4762a1bSJed Brown nx[0] = cells_per_dim[0] + 1;
103c4762a1bSJed Brown nx[1] = cells_per_dim[1] + 1;
104c4762a1bSJed Brown n_trivert = nx[0] * nx[1];
105c4762a1bSJed Brown
1069566063dSJacob Faibussowitsch PetscCall(PetscMalloc1(n_tricells * 3, &tricells));
1079566063dSJacob Faibussowitsch PetscCall(PetscMalloc1(nx[0] * nx[1] * 2, &trivert));
108c4762a1bSJed Brown
109c4762a1bSJed Brown /* verts */
110c4762a1bSJed Brown cnt = 0;
111c4762a1bSJed Brown dx = 2.0 / ((PetscReal)cells_per_dim[0]);
112c4762a1bSJed Brown dy = 1.0 / ((PetscReal)cells_per_dim[1]);
113c4762a1bSJed Brown for (jj = 0; jj < nx[1]; jj++) {
114c4762a1bSJed Brown for (ii = 0; ii < nx[0]; ii++) {
115c4762a1bSJed Brown trivert[2 * cnt + 0] = 0.0 + ii * dx;
116c4762a1bSJed Brown trivert[2 * cnt + 1] = 0.0 + jj * dy;
117c4762a1bSJed Brown cnt++;
118c4762a1bSJed Brown }
119c4762a1bSJed Brown }
120c4762a1bSJed Brown
121c4762a1bSJed Brown /* connectivity */
122c4762a1bSJed Brown cnt = 0;
123c4762a1bSJed Brown for (jj = 0; jj < cells_per_dim[1]; jj++) {
124c4762a1bSJed Brown for (ii = 0; ii < cells_per_dim[0]; ii++) {
125c4762a1bSJed Brown PetscInt idx, idx0, idx1, idx2, idx3;
126c4762a1bSJed Brown
127c4762a1bSJed Brown idx = (ii) + (jj)*nx[0];
128c4762a1bSJed Brown idx0 = idx;
129c4762a1bSJed Brown idx1 = idx0 + 1;
130c4762a1bSJed Brown idx2 = idx1 + nx[0];
131c4762a1bSJed Brown idx3 = idx0 + nx[0];
132c4762a1bSJed Brown
133c4762a1bSJed Brown tricells[3 * cnt + 0] = idx0;
134c4762a1bSJed Brown tricells[3 * cnt + 1] = idx1;
135c4762a1bSJed Brown tricells[3 * cnt + 2] = idx2;
136c4762a1bSJed Brown cnt++;
137c4762a1bSJed Brown
138c4762a1bSJed Brown tricells[3 * cnt + 0] = idx0;
139c4762a1bSJed Brown tricells[3 * cnt + 1] = idx2;
140c4762a1bSJed Brown tricells[3 * cnt + 2] = idx3;
141c4762a1bSJed Brown cnt++;
142c4762a1bSJed Brown }
143c4762a1bSJed Brown }
1449566063dSJacob Faibussowitsch PetscCall(DMPlexCreateFromCellListPetsc(PETSC_COMM_WORLD, dim, n_tricells, n_trivert, 3, PETSC_TRUE, tricells, dim, trivert, &celldm));
1459566063dSJacob Faibussowitsch PetscCall(PetscFree(trivert));
1469566063dSJacob Faibussowitsch PetscCall(PetscFree(tricells));
147c4762a1bSJed Brown }
14808401ef6SPierre Jolivet PetscCheck(dim != 3, PETSC_COMM_WORLD, PETSC_ERR_SUP, "Only 2D PLEX example supported");
149c4762a1bSJed Brown
150c4762a1bSJed Brown /* Distribute mesh over processes */
1519566063dSJacob Faibussowitsch PetscCall(DMPlexDistribute(celldm, 0, NULL, &distributedMesh));
152c4762a1bSJed Brown if (distributedMesh) {
1539566063dSJacob Faibussowitsch PetscCall(DMDestroy(&celldm));
154c4762a1bSJed Brown celldm = distributedMesh;
155c4762a1bSJed Brown }
1569566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)celldm, "Cells"));
1579566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(celldm));
158c4762a1bSJed Brown {
159c4762a1bSJed Brown PetscInt numComp[] = {1};
160c4762a1bSJed Brown PetscInt numDof[] = {1, 0, 0}; /* vert, edge, cell */
161c4762a1bSJed Brown PetscInt numBC = 0;
162c4762a1bSJed Brown PetscSection section;
163c4762a1bSJed Brown
1649566063dSJacob Faibussowitsch PetscCall(DMPlexCreateSection(celldm, NULL, numComp, numDof, numBC, NULL, NULL, NULL, NULL, §ion));
1659566063dSJacob Faibussowitsch PetscCall(DMSetLocalSection(celldm, section));
1669566063dSJacob Faibussowitsch PetscCall(PetscSectionDestroy(§ion));
167c4762a1bSJed Brown }
1689566063dSJacob Faibussowitsch PetscCall(DMSetUp(celldm));
169c4762a1bSJed Brown {
170c4762a1bSJed Brown PetscViewer viewer;
171c4762a1bSJed Brown
1729566063dSJacob Faibussowitsch PetscCall(PetscViewerCreate(PETSC_COMM_WORLD, &viewer));
1739566063dSJacob Faibussowitsch PetscCall(PetscViewerSetType(viewer, PETSCVIEWERVTK));
1749566063dSJacob Faibussowitsch PetscCall(PetscViewerFileSetMode(viewer, FILE_MODE_WRITE));
1759566063dSJacob Faibussowitsch PetscCall(PetscViewerFileSetName(viewer, "ex20plex.vtk"));
1769566063dSJacob Faibussowitsch PetscCall(DMView(celldm, viewer));
1779566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&viewer));
178c4762a1bSJed Brown }
179c4762a1bSJed Brown
180c4762a1bSJed Brown /* Create the DMSwarm */
1819566063dSJacob Faibussowitsch PetscCall(DMCreate(PETSC_COMM_WORLD, &swarm));
1829566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)swarm, "Swarm"));
1839566063dSJacob Faibussowitsch PetscCall(DMSetType(swarm, DMSWARM));
1849566063dSJacob Faibussowitsch PetscCall(DMSetDimension(swarm, dim));
185c4762a1bSJed Brown
1869566063dSJacob Faibussowitsch PetscCall(DMSwarmSetType(swarm, DMSWARM_PIC));
1879566063dSJacob Faibussowitsch PetscCall(DMSwarmSetCellDM(swarm, celldm));
188c4762a1bSJed Brown
189c4762a1bSJed Brown /* Register two scalar fields within the DMSwarm */
1909566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(swarm, "viscosity", 1, PETSC_DOUBLE));
1919566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(swarm, "density", 1, PETSC_DOUBLE));
1929566063dSJacob Faibussowitsch PetscCall(DMSwarmFinalizeFieldRegister(swarm));
193c4762a1bSJed Brown
194c4762a1bSJed Brown /* Set initial local sizes of the DMSwarm with a buffer length of zero */
1959566063dSJacob Faibussowitsch PetscCall(DMSwarmSetLocalSizes(swarm, 4, 0));
196c4762a1bSJed Brown
197c4762a1bSJed Brown /* Insert swarm coordinates cell-wise */
1989566063dSJacob Faibussowitsch PetscCall(DMSwarmInsertPointsUsingCellDM(swarm, DMSWARMPIC_LAYOUT_SUBDIVISION, 2));
1999566063dSJacob Faibussowitsch PetscCall(DMSwarmViewFieldsXDMF(swarm, "ex20.xmf", 1, fieldnames));
2009566063dSJacob Faibussowitsch PetscCall(DMView(celldm, PETSC_VIEWER_STDOUT_WORLD));
2019566063dSJacob Faibussowitsch PetscCall(DMView(swarm, PETSC_VIEWER_STDOUT_WORLD));
2029566063dSJacob Faibussowitsch PetscCall(DMDestroy(&celldm));
2039566063dSJacob Faibussowitsch PetscCall(DMDestroy(&swarm));
2043ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
205c4762a1bSJed Brown }
206c4762a1bSJed Brown
pic_insert_DMPLEX(PetscBool is_simplex,PetscInt dim)207d71ae5a4SJacob Faibussowitsch PetscErrorCode pic_insert_DMPLEX(PetscBool is_simplex, PetscInt dim)
208d71ae5a4SJacob Faibussowitsch {
209c4762a1bSJed Brown DM celldm, swarm, distributedMesh = NULL;
210c4762a1bSJed Brown const char *fieldnames[] = {"viscosity", "DMSwarm_rank"};
211c4762a1bSJed Brown
212c4762a1bSJed Brown PetscFunctionBegin;
213c4762a1bSJed Brown /* Create the background cell DM */
214c4762a1bSJed Brown {
215c4762a1bSJed Brown PetscInt faces[3] = {4, 2, 4};
21642108689Sksagiyam PetscCall(DMPlexCreateBoxMesh(PETSC_COMM_WORLD, dim, is_simplex, faces, NULL, NULL, NULL, PETSC_TRUE, 0, PETSC_TRUE, &celldm));
217c4762a1bSJed Brown }
218c4762a1bSJed Brown
219c4762a1bSJed Brown /* Distribute mesh over processes */
2209566063dSJacob Faibussowitsch PetscCall(DMPlexDistribute(celldm, 0, NULL, &distributedMesh));
221c4762a1bSJed Brown if (distributedMesh) {
2229566063dSJacob Faibussowitsch PetscCall(DMDestroy(&celldm));
223c4762a1bSJed Brown celldm = distributedMesh;
224c4762a1bSJed Brown }
2259566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)celldm, "Cells"));
2269566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(celldm));
227c4762a1bSJed Brown {
228c4762a1bSJed Brown PetscInt numComp[] = {1};
229c4762a1bSJed Brown PetscInt numDof[] = {1, 0, 0}; /* vert, edge, cell */
230c4762a1bSJed Brown PetscInt numBC = 0;
231c4762a1bSJed Brown PetscSection section;
232c4762a1bSJed Brown
2339566063dSJacob Faibussowitsch PetscCall(DMPlexCreateSection(celldm, NULL, numComp, numDof, numBC, NULL, NULL, NULL, NULL, §ion));
2349566063dSJacob Faibussowitsch PetscCall(DMSetLocalSection(celldm, section));
2359566063dSJacob Faibussowitsch PetscCall(PetscSectionDestroy(§ion));
236c4762a1bSJed Brown }
2379566063dSJacob Faibussowitsch PetscCall(DMSetUp(celldm));
238c4762a1bSJed Brown {
239c4762a1bSJed Brown PetscViewer viewer;
240c4762a1bSJed Brown
2419566063dSJacob Faibussowitsch PetscCall(PetscViewerCreate(PETSC_COMM_WORLD, &viewer));
2429566063dSJacob Faibussowitsch PetscCall(PetscViewerSetType(viewer, PETSCVIEWERVTK));
2439566063dSJacob Faibussowitsch PetscCall(PetscViewerFileSetMode(viewer, FILE_MODE_WRITE));
2449566063dSJacob Faibussowitsch PetscCall(PetscViewerFileSetName(viewer, "ex20plex.vtk"));
2459566063dSJacob Faibussowitsch PetscCall(DMView(celldm, viewer));
2469566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&viewer));
247c4762a1bSJed Brown }
248c4762a1bSJed Brown
2499566063dSJacob Faibussowitsch PetscCall(DMCreate(PETSC_COMM_WORLD, &swarm));
2509566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)swarm, "Swarm"));
2519566063dSJacob Faibussowitsch PetscCall(DMSetType(swarm, DMSWARM));
2529566063dSJacob Faibussowitsch PetscCall(DMSetDimension(swarm, dim));
253c4762a1bSJed Brown
2549566063dSJacob Faibussowitsch PetscCall(DMSwarmSetType(swarm, DMSWARM_PIC));
2559566063dSJacob Faibussowitsch PetscCall(DMSwarmSetCellDM(swarm, celldm));
256c4762a1bSJed Brown
257c4762a1bSJed Brown /* Register two scalar fields within the DMSwarm */
2589566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(swarm, "viscosity", 1, PETSC_DOUBLE));
2599566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(swarm, "density", 1, PETSC_DOUBLE));
2609566063dSJacob Faibussowitsch PetscCall(DMSwarmFinalizeFieldRegister(swarm));
261c4762a1bSJed Brown
262c4762a1bSJed Brown /* Set initial local sizes of the DMSwarm with a buffer length of zero */
2639566063dSJacob Faibussowitsch PetscCall(DMSwarmSetLocalSizes(swarm, 4, 0));
264c4762a1bSJed Brown
265c4762a1bSJed Brown /* Insert swarm coordinates cell-wise */
2669566063dSJacob Faibussowitsch PetscCall(DMSwarmInsertPointsUsingCellDM(swarm, DMSWARMPIC_LAYOUT_GAUSS, 3));
2679566063dSJacob Faibussowitsch PetscCall(DMSwarmViewFieldsXDMF(swarm, "ex20.xmf", 2, fieldnames));
2689566063dSJacob Faibussowitsch PetscCall(DMView(celldm, PETSC_VIEWER_STDOUT_WORLD));
2699566063dSJacob Faibussowitsch PetscCall(DMView(swarm, PETSC_VIEWER_STDOUT_WORLD));
2709566063dSJacob Faibussowitsch PetscCall(DMDestroy(&celldm));
2719566063dSJacob Faibussowitsch PetscCall(DMDestroy(&swarm));
2723ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
273c4762a1bSJed Brown }
274c4762a1bSJed Brown
main(int argc,char ** args)275d71ae5a4SJacob Faibussowitsch int main(int argc, char **args)
276d71ae5a4SJacob Faibussowitsch {
277c4762a1bSJed Brown PetscInt mode = 0;
278c4762a1bSJed Brown PetscInt dim = 2;
279c4762a1bSJed Brown
280327415f7SBarry Smith PetscFunctionBeginUser;
281c8025a54SPierre Jolivet PetscCall(PetscInitialize(&argc, &args, NULL, help));
2829566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetInt(NULL, NULL, "-mode", &mode, NULL));
2839566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetInt(NULL, NULL, "-dim", &dim, NULL));
284c4762a1bSJed Brown switch (mode) {
285d71ae5a4SJacob Faibussowitsch case 0:
286d71ae5a4SJacob Faibussowitsch PetscCall(pic_insert_DMDA(dim));
287d71ae5a4SJacob Faibussowitsch break;
288c4762a1bSJed Brown case 1:
289c4762a1bSJed Brown /* tri / tet */
2909566063dSJacob Faibussowitsch PetscCall(pic_insert_DMPLEX(PETSC_TRUE, dim));
291c4762a1bSJed Brown break;
292c4762a1bSJed Brown case 2:
293c4762a1bSJed Brown /* quad / hex */
2949566063dSJacob Faibussowitsch PetscCall(pic_insert_DMPLEX(PETSC_FALSE, dim));
295c4762a1bSJed Brown break;
296d71ae5a4SJacob Faibussowitsch default:
297d71ae5a4SJacob Faibussowitsch PetscCall(pic_insert_DMDA(dim));
298d71ae5a4SJacob Faibussowitsch break;
299c4762a1bSJed Brown }
3009566063dSJacob Faibussowitsch PetscCall(PetscFinalize());
301b122ec5aSJacob Faibussowitsch return 0;
302c4762a1bSJed Brown }
303c4762a1bSJed Brown
304c4762a1bSJed Brown /*TEST
305c4762a1bSJed Brown
306c4762a1bSJed Brown test:
307c4762a1bSJed Brown args:
308c4762a1bSJed Brown requires: !complex double
3097ed4f029SJed Brown filter: grep -v atomic
310c4762a1bSJed Brown filter_output: grep -v atomic
311c4762a1bSJed Brown
312c4762a1bSJed Brown test:
313c4762a1bSJed Brown suffix: 2
314c4762a1bSJed Brown requires: triangle double !complex
315c4762a1bSJed Brown args: -mode 1
3167ed4f029SJed Brown filter: grep -v atomic
317c4762a1bSJed Brown filter_output: grep -v atomic
318c4762a1bSJed Brown
319c4762a1bSJed Brown TEST*/
320