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 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)); 279566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(celldm)); 289566063dSJacob Faibussowitsch PetscCall(DMSetUp(celldm)); 29c4762a1bSJed Brown 309566063dSJacob Faibussowitsch PetscCall(DMDASetUniformCoordinates(celldm, 0.0, 2.0, 0.0, 1.0, 0.0, 1.5)); 31c4762a1bSJed Brown 32c4762a1bSJed Brown /* Create the DMSwarm */ 339566063dSJacob Faibussowitsch PetscCall(DMCreate(PETSC_COMM_WORLD, &swarm)); 349566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)swarm, "Swarm")); 359566063dSJacob Faibussowitsch PetscCall(DMSetType(swarm, DMSWARM)); 369566063dSJacob Faibussowitsch PetscCall(DMSetDimension(swarm, dim)); 37c4762a1bSJed Brown 38c4762a1bSJed Brown /* Configure swarm to be of type PIC */ 399566063dSJacob Faibussowitsch PetscCall(DMSwarmSetType(swarm, DMSWARM_PIC)); 409566063dSJacob Faibussowitsch PetscCall(DMSwarmSetCellDM(swarm, celldm)); 41c4762a1bSJed Brown 42c4762a1bSJed Brown /* Register two scalar fields within the DMSwarm */ 439566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(swarm, "viscosity", 1, PETSC_DOUBLE)); 449566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(swarm, "density", 1, PETSC_DOUBLE)); 459566063dSJacob Faibussowitsch PetscCall(DMSwarmFinalizeFieldRegister(swarm)); 46c4762a1bSJed Brown 47c4762a1bSJed Brown /* Set initial local sizes of the DMSwarm with a buffer length of zero */ 489566063dSJacob Faibussowitsch PetscCall(DMSwarmSetLocalSizes(swarm, 4, 0)); 49c4762a1bSJed Brown 50c4762a1bSJed Brown /* Insert swarm coordinates cell-wise */ 519566063dSJacob Faibussowitsch PetscCall(DMSwarmInsertPointsUsingCellDM(swarm, DMSWARMPIC_LAYOUT_REGULAR, 3)); 529371c9d4SSatish Balay min[0] = 0.5; 539371c9d4SSatish Balay max[0] = 0.7; 549371c9d4SSatish Balay min[1] = 0.5; 559371c9d4SSatish Balay max[1] = 0.8; 569371c9d4SSatish Balay min[2] = 0.5; 579371c9d4SSatish Balay max[2] = 0.9; 58c4762a1bSJed Brown ndir[0] = ndir[1] = ndir[2] = 30; 599566063dSJacob Faibussowitsch PetscCall(DMSwarmSetPointsUniformCoordinates(swarm, min, max, ndir, ADD_VALUES)); 60c4762a1bSJed Brown 61c4762a1bSJed Brown /* This should be dispatched from a regular DMView() */ 629566063dSJacob Faibussowitsch PetscCall(DMSwarmViewXDMF(swarm, "ex20.xmf")); 639566063dSJacob Faibussowitsch PetscCall(DMView(celldm, PETSC_VIEWER_STDOUT_WORLD)); 649566063dSJacob Faibussowitsch PetscCall(DMView(swarm, PETSC_VIEWER_STDOUT_WORLD)); 65c4762a1bSJed Brown 66c4762a1bSJed Brown { 67c4762a1bSJed Brown PetscInt npoints, *list; 68c4762a1bSJed Brown PetscMPIInt rank; 69c4762a1bSJed Brown 709566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank)); 719566063dSJacob Faibussowitsch PetscCall(DMSwarmSortGetAccess(swarm)); 729566063dSJacob Faibussowitsch PetscCall(DMSwarmSortGetNumberOfPointsPerCell(swarm, 0, &npoints)); 739566063dSJacob Faibussowitsch PetscCall(DMSwarmSortGetPointsPerCell(swarm, rank, &npoints, &list)); 749566063dSJacob Faibussowitsch PetscCall(PetscFree(list)); 759566063dSJacob Faibussowitsch PetscCall(DMSwarmSortRestoreAccess(swarm)); 76c4762a1bSJed Brown } 779566063dSJacob Faibussowitsch PetscCall(DMSwarmMigrate(swarm, PETSC_FALSE)); 789566063dSJacob Faibussowitsch PetscCall(DMDestroy(&celldm)); 799566063dSJacob Faibussowitsch PetscCall(DMDestroy(&swarm)); 803ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 81c4762a1bSJed Brown } 82c4762a1bSJed Brown 83d71ae5a4SJacob Faibussowitsch PetscErrorCode pic_insert_DMPLEX_with_cell_list(PetscInt dim) 84d71ae5a4SJacob Faibussowitsch { 85c4762a1bSJed Brown DM celldm = NULL, swarm, distributedMesh = NULL; 86c4762a1bSJed Brown const char *fieldnames[] = {"viscosity"}; 87c4762a1bSJed Brown 88c4762a1bSJed Brown PetscFunctionBegin; 89c4762a1bSJed Brown /* Create the background cell DM */ 90c4762a1bSJed Brown if (dim == 2) { 91c4762a1bSJed Brown PetscInt cells_per_dim[2], nx[2]; 92c4762a1bSJed Brown PetscInt n_tricells; 93c4762a1bSJed Brown PetscInt n_trivert; 94a4a685f2SJacob Faibussowitsch PetscInt *tricells; 95a4a685f2SJacob Faibussowitsch PetscReal *trivert, dx, dy; 96c4762a1bSJed Brown PetscInt ii, jj, cnt; 97c4762a1bSJed Brown 98c4762a1bSJed Brown cells_per_dim[0] = 4; 99c4762a1bSJed Brown cells_per_dim[1] = 4; 100c4762a1bSJed Brown n_tricells = cells_per_dim[0] * cells_per_dim[1] * 2; 101c4762a1bSJed Brown nx[0] = cells_per_dim[0] + 1; 102c4762a1bSJed Brown nx[1] = cells_per_dim[1] + 1; 103c4762a1bSJed Brown n_trivert = nx[0] * nx[1]; 104c4762a1bSJed Brown 1059566063dSJacob Faibussowitsch PetscCall(PetscMalloc1(n_tricells * 3, &tricells)); 1069566063dSJacob Faibussowitsch PetscCall(PetscMalloc1(nx[0] * nx[1] * 2, &trivert)); 107c4762a1bSJed Brown 108c4762a1bSJed Brown /* verts */ 109c4762a1bSJed Brown cnt = 0; 110c4762a1bSJed Brown dx = 2.0 / ((PetscReal)cells_per_dim[0]); 111c4762a1bSJed Brown dy = 1.0 / ((PetscReal)cells_per_dim[1]); 112c4762a1bSJed Brown for (jj = 0; jj < nx[1]; jj++) { 113c4762a1bSJed Brown for (ii = 0; ii < nx[0]; ii++) { 114c4762a1bSJed Brown trivert[2 * cnt + 0] = 0.0 + ii * dx; 115c4762a1bSJed Brown trivert[2 * cnt + 1] = 0.0 + jj * dy; 116c4762a1bSJed Brown cnt++; 117c4762a1bSJed Brown } 118c4762a1bSJed Brown } 119c4762a1bSJed Brown 120c4762a1bSJed Brown /* connectivity */ 121c4762a1bSJed Brown cnt = 0; 122c4762a1bSJed Brown for (jj = 0; jj < cells_per_dim[1]; jj++) { 123c4762a1bSJed Brown for (ii = 0; ii < cells_per_dim[0]; ii++) { 124c4762a1bSJed Brown PetscInt idx, idx0, idx1, idx2, idx3; 125c4762a1bSJed Brown 126c4762a1bSJed Brown idx = (ii) + (jj)*nx[0]; 127c4762a1bSJed Brown idx0 = idx; 128c4762a1bSJed Brown idx1 = idx0 + 1; 129c4762a1bSJed Brown idx2 = idx1 + nx[0]; 130c4762a1bSJed Brown idx3 = idx0 + nx[0]; 131c4762a1bSJed Brown 132c4762a1bSJed Brown tricells[3 * cnt + 0] = idx0; 133c4762a1bSJed Brown tricells[3 * cnt + 1] = idx1; 134c4762a1bSJed Brown tricells[3 * cnt + 2] = idx2; 135c4762a1bSJed Brown cnt++; 136c4762a1bSJed Brown 137c4762a1bSJed Brown tricells[3 * cnt + 0] = idx0; 138c4762a1bSJed Brown tricells[3 * cnt + 1] = idx2; 139c4762a1bSJed Brown tricells[3 * cnt + 2] = idx3; 140c4762a1bSJed Brown cnt++; 141c4762a1bSJed Brown } 142c4762a1bSJed Brown } 1439566063dSJacob Faibussowitsch PetscCall(DMPlexCreateFromCellListPetsc(PETSC_COMM_WORLD, dim, n_tricells, n_trivert, 3, PETSC_TRUE, tricells, dim, trivert, &celldm)); 1449566063dSJacob Faibussowitsch PetscCall(PetscFree(trivert)); 1459566063dSJacob Faibussowitsch PetscCall(PetscFree(tricells)); 146c4762a1bSJed Brown } 14708401ef6SPierre Jolivet PetscCheck(dim != 3, PETSC_COMM_WORLD, PETSC_ERR_SUP, "Only 2D PLEX example supported"); 148c4762a1bSJed Brown 149c4762a1bSJed Brown /* Distribute mesh over processes */ 1509566063dSJacob Faibussowitsch PetscCall(DMPlexDistribute(celldm, 0, NULL, &distributedMesh)); 151c4762a1bSJed Brown if (distributedMesh) { 1529566063dSJacob Faibussowitsch PetscCall(DMDestroy(&celldm)); 153c4762a1bSJed Brown celldm = distributedMesh; 154c4762a1bSJed Brown } 1559566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)celldm, "Cells")); 1569566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(celldm)); 157c4762a1bSJed Brown { 158c4762a1bSJed Brown PetscInt numComp[] = {1}; 159c4762a1bSJed Brown PetscInt numDof[] = {1, 0, 0}; /* vert, edge, cell */ 160c4762a1bSJed Brown PetscInt numBC = 0; 161c4762a1bSJed Brown PetscSection section; 162c4762a1bSJed Brown 1639566063dSJacob Faibussowitsch PetscCall(DMPlexCreateSection(celldm, NULL, numComp, numDof, numBC, NULL, NULL, NULL, NULL, §ion)); 1649566063dSJacob Faibussowitsch PetscCall(DMSetLocalSection(celldm, section)); 1659566063dSJacob Faibussowitsch PetscCall(PetscSectionDestroy(§ion)); 166c4762a1bSJed Brown } 1679566063dSJacob Faibussowitsch PetscCall(DMSetUp(celldm)); 168c4762a1bSJed Brown { 169c4762a1bSJed Brown PetscViewer viewer; 170c4762a1bSJed Brown 1719566063dSJacob Faibussowitsch PetscCall(PetscViewerCreate(PETSC_COMM_WORLD, &viewer)); 1729566063dSJacob Faibussowitsch PetscCall(PetscViewerSetType(viewer, PETSCVIEWERVTK)); 1739566063dSJacob Faibussowitsch PetscCall(PetscViewerFileSetMode(viewer, FILE_MODE_WRITE)); 1749566063dSJacob Faibussowitsch PetscCall(PetscViewerFileSetName(viewer, "ex20plex.vtk")); 1759566063dSJacob Faibussowitsch PetscCall(DMView(celldm, viewer)); 1769566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&viewer)); 177c4762a1bSJed Brown } 178c4762a1bSJed Brown 179c4762a1bSJed Brown /* Create the DMSwarm */ 1809566063dSJacob Faibussowitsch PetscCall(DMCreate(PETSC_COMM_WORLD, &swarm)); 1819566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)swarm, "Swarm")); 1829566063dSJacob Faibussowitsch PetscCall(DMSetType(swarm, DMSWARM)); 1839566063dSJacob Faibussowitsch PetscCall(DMSetDimension(swarm, dim)); 184c4762a1bSJed Brown 1859566063dSJacob Faibussowitsch PetscCall(DMSwarmSetType(swarm, DMSWARM_PIC)); 1869566063dSJacob Faibussowitsch PetscCall(DMSwarmSetCellDM(swarm, celldm)); 187c4762a1bSJed Brown 188c4762a1bSJed Brown /* Register two scalar fields within the DMSwarm */ 1899566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(swarm, "viscosity", 1, PETSC_DOUBLE)); 1909566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(swarm, "density", 1, PETSC_DOUBLE)); 1919566063dSJacob Faibussowitsch PetscCall(DMSwarmFinalizeFieldRegister(swarm)); 192c4762a1bSJed Brown 193c4762a1bSJed Brown /* Set initial local sizes of the DMSwarm with a buffer length of zero */ 1949566063dSJacob Faibussowitsch PetscCall(DMSwarmSetLocalSizes(swarm, 4, 0)); 195c4762a1bSJed Brown 196c4762a1bSJed Brown /* Insert swarm coordinates cell-wise */ 1979566063dSJacob Faibussowitsch PetscCall(DMSwarmInsertPointsUsingCellDM(swarm, DMSWARMPIC_LAYOUT_SUBDIVISION, 2)); 1989566063dSJacob Faibussowitsch PetscCall(DMSwarmViewFieldsXDMF(swarm, "ex20.xmf", 1, fieldnames)); 1999566063dSJacob Faibussowitsch PetscCall(DMView(celldm, PETSC_VIEWER_STDOUT_WORLD)); 2009566063dSJacob Faibussowitsch PetscCall(DMView(swarm, PETSC_VIEWER_STDOUT_WORLD)); 2019566063dSJacob Faibussowitsch PetscCall(DMDestroy(&celldm)); 2029566063dSJacob Faibussowitsch PetscCall(DMDestroy(&swarm)); 2033ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 204c4762a1bSJed Brown } 205c4762a1bSJed Brown 206d71ae5a4SJacob Faibussowitsch PetscErrorCode pic_insert_DMPLEX(PetscBool is_simplex, PetscInt dim) 207d71ae5a4SJacob Faibussowitsch { 208c4762a1bSJed Brown DM celldm, swarm, distributedMesh = NULL; 209c4762a1bSJed Brown const char *fieldnames[] = {"viscosity", "DMSwarm_rank"}; 210c4762a1bSJed Brown 211c4762a1bSJed Brown PetscFunctionBegin; 212c4762a1bSJed Brown /* Create the background cell DM */ 213c4762a1bSJed Brown { 214c4762a1bSJed Brown PetscInt faces[3] = {4, 2, 4}; 215*42108689Sksagiyam PetscCall(DMPlexCreateBoxMesh(PETSC_COMM_WORLD, dim, is_simplex, faces, NULL, NULL, NULL, PETSC_TRUE, 0, PETSC_TRUE, &celldm)); 216c4762a1bSJed Brown } 217c4762a1bSJed Brown 218c4762a1bSJed Brown /* Distribute mesh over processes */ 2199566063dSJacob Faibussowitsch PetscCall(DMPlexDistribute(celldm, 0, NULL, &distributedMesh)); 220c4762a1bSJed Brown if (distributedMesh) { 2219566063dSJacob Faibussowitsch PetscCall(DMDestroy(&celldm)); 222c4762a1bSJed Brown celldm = distributedMesh; 223c4762a1bSJed Brown } 2249566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)celldm, "Cells")); 2259566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(celldm)); 226c4762a1bSJed Brown { 227c4762a1bSJed Brown PetscInt numComp[] = {1}; 228c4762a1bSJed Brown PetscInt numDof[] = {1, 0, 0}; /* vert, edge, cell */ 229c4762a1bSJed Brown PetscInt numBC = 0; 230c4762a1bSJed Brown PetscSection section; 231c4762a1bSJed Brown 2329566063dSJacob Faibussowitsch PetscCall(DMPlexCreateSection(celldm, NULL, numComp, numDof, numBC, NULL, NULL, NULL, NULL, §ion)); 2339566063dSJacob Faibussowitsch PetscCall(DMSetLocalSection(celldm, section)); 2349566063dSJacob Faibussowitsch PetscCall(PetscSectionDestroy(§ion)); 235c4762a1bSJed Brown } 2369566063dSJacob Faibussowitsch PetscCall(DMSetUp(celldm)); 237c4762a1bSJed Brown { 238c4762a1bSJed Brown PetscViewer viewer; 239c4762a1bSJed Brown 2409566063dSJacob Faibussowitsch PetscCall(PetscViewerCreate(PETSC_COMM_WORLD, &viewer)); 2419566063dSJacob Faibussowitsch PetscCall(PetscViewerSetType(viewer, PETSCVIEWERVTK)); 2429566063dSJacob Faibussowitsch PetscCall(PetscViewerFileSetMode(viewer, FILE_MODE_WRITE)); 2439566063dSJacob Faibussowitsch PetscCall(PetscViewerFileSetName(viewer, "ex20plex.vtk")); 2449566063dSJacob Faibussowitsch PetscCall(DMView(celldm, viewer)); 2459566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&viewer)); 246c4762a1bSJed Brown } 247c4762a1bSJed Brown 2489566063dSJacob Faibussowitsch PetscCall(DMCreate(PETSC_COMM_WORLD, &swarm)); 2499566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)swarm, "Swarm")); 2509566063dSJacob Faibussowitsch PetscCall(DMSetType(swarm, DMSWARM)); 2519566063dSJacob Faibussowitsch PetscCall(DMSetDimension(swarm, dim)); 252c4762a1bSJed Brown 2539566063dSJacob Faibussowitsch PetscCall(DMSwarmSetType(swarm, DMSWARM_PIC)); 2549566063dSJacob Faibussowitsch PetscCall(DMSwarmSetCellDM(swarm, celldm)); 255c4762a1bSJed Brown 256c4762a1bSJed Brown /* Register two scalar fields within the DMSwarm */ 2579566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(swarm, "viscosity", 1, PETSC_DOUBLE)); 2589566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(swarm, "density", 1, PETSC_DOUBLE)); 2599566063dSJacob Faibussowitsch PetscCall(DMSwarmFinalizeFieldRegister(swarm)); 260c4762a1bSJed Brown 261c4762a1bSJed Brown /* Set initial local sizes of the DMSwarm with a buffer length of zero */ 2629566063dSJacob Faibussowitsch PetscCall(DMSwarmSetLocalSizes(swarm, 4, 0)); 263c4762a1bSJed Brown 264c4762a1bSJed Brown /* Insert swarm coordinates cell-wise */ 2659566063dSJacob Faibussowitsch PetscCall(DMSwarmInsertPointsUsingCellDM(swarm, DMSWARMPIC_LAYOUT_GAUSS, 3)); 2669566063dSJacob Faibussowitsch PetscCall(DMSwarmViewFieldsXDMF(swarm, "ex20.xmf", 2, fieldnames)); 2679566063dSJacob Faibussowitsch PetscCall(DMView(celldm, PETSC_VIEWER_STDOUT_WORLD)); 2689566063dSJacob Faibussowitsch PetscCall(DMView(swarm, PETSC_VIEWER_STDOUT_WORLD)); 2699566063dSJacob Faibussowitsch PetscCall(DMDestroy(&celldm)); 2709566063dSJacob Faibussowitsch PetscCall(DMDestroy(&swarm)); 2713ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 272c4762a1bSJed Brown } 273c4762a1bSJed Brown 274d71ae5a4SJacob Faibussowitsch int main(int argc, char **args) 275d71ae5a4SJacob Faibussowitsch { 276c4762a1bSJed Brown PetscInt mode = 0; 277c4762a1bSJed Brown PetscInt dim = 2; 278c4762a1bSJed Brown 279327415f7SBarry Smith PetscFunctionBeginUser; 2809566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &args, (char *)0, help)); 2819566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetInt(NULL, NULL, "-mode", &mode, NULL)); 2829566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetInt(NULL, NULL, "-dim", &dim, NULL)); 283c4762a1bSJed Brown switch (mode) { 284d71ae5a4SJacob Faibussowitsch case 0: 285d71ae5a4SJacob Faibussowitsch PetscCall(pic_insert_DMDA(dim)); 286d71ae5a4SJacob Faibussowitsch break; 287c4762a1bSJed Brown case 1: 288c4762a1bSJed Brown /* tri / tet */ 2899566063dSJacob Faibussowitsch PetscCall(pic_insert_DMPLEX(PETSC_TRUE, dim)); 290c4762a1bSJed Brown break; 291c4762a1bSJed Brown case 2: 292c4762a1bSJed Brown /* quad / hex */ 2939566063dSJacob Faibussowitsch PetscCall(pic_insert_DMPLEX(PETSC_FALSE, dim)); 294c4762a1bSJed Brown break; 295d71ae5a4SJacob Faibussowitsch default: 296d71ae5a4SJacob Faibussowitsch PetscCall(pic_insert_DMDA(dim)); 297d71ae5a4SJacob Faibussowitsch break; 298c4762a1bSJed Brown } 2999566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 300b122ec5aSJacob Faibussowitsch return 0; 301c4762a1bSJed Brown } 302c4762a1bSJed Brown 303c4762a1bSJed Brown /*TEST 304c4762a1bSJed Brown 305c4762a1bSJed Brown test: 306c4762a1bSJed Brown args: 307c4762a1bSJed Brown requires: !complex double 3087ed4f029SJed Brown filter: grep -v atomic 309c4762a1bSJed Brown filter_output: grep -v atomic 310c4762a1bSJed Brown 311c4762a1bSJed Brown test: 312c4762a1bSJed Brown suffix: 2 313c4762a1bSJed Brown requires: triangle double !complex 314c4762a1bSJed Brown args: -mode 1 3157ed4f029SJed Brown filter: grep -v atomic 316c4762a1bSJed Brown filter_output: grep -v atomic 317c4762a1bSJed Brown 318c4762a1bSJed Brown TEST*/ 319