1c4762a1bSJed Brown 2c4762a1bSJed Brown static char help[] = "DMSwarm-PIC demonstator of inserting points into a cell DM \n\ 3c4762a1bSJed Brown Options: \n\ 4c4762a1bSJed Brown -mode {0,1} : 0 ==> DMDA, 1 ==> DMPLEX cell DM \n\ 5c4762a1bSJed Brown -dim {2,3} : spatial dimension\n"; 6c4762a1bSJed Brown 7c4762a1bSJed Brown #include <petsc.h> 8c4762a1bSJed Brown #include <petscdm.h> 9c4762a1bSJed Brown #include <petscdmda.h> 10c4762a1bSJed Brown #include <petscdmplex.h> 11c4762a1bSJed Brown #include <petscdmswarm.h> 12c4762a1bSJed Brown 13c4762a1bSJed Brown PetscErrorCode pic_insert_DMDA(PetscInt dim) 14c4762a1bSJed Brown { 15c4762a1bSJed Brown DM celldm = NULL,swarm; 16c4762a1bSJed Brown PetscInt dof,stencil_width; 17c4762a1bSJed Brown PetscReal min[3],max[3]; 18c4762a1bSJed Brown PetscInt ndir[3]; 19c4762a1bSJed Brown 20c4762a1bSJed Brown PetscFunctionBegin; 21c4762a1bSJed Brown /* Create the background cell DM */ 22c4762a1bSJed Brown dof = 1; 23c4762a1bSJed Brown stencil_width = 1; 24c4762a1bSJed Brown if (dim == 2) { 255f80ce2aSJacob Faibussowitsch CHKERRQ(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)); 26c4762a1bSJed Brown } 27c4762a1bSJed Brown if (dim == 3) { 285f80ce2aSJacob Faibussowitsch CHKERRQ(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)); 29c4762a1bSJed Brown } 30c4762a1bSJed Brown 315f80ce2aSJacob Faibussowitsch CHKERRQ(DMDASetElementType(celldm,DMDA_ELEMENT_Q1)); 325f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetFromOptions(celldm)); 335f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetUp(celldm)); 34c4762a1bSJed Brown 355f80ce2aSJacob Faibussowitsch CHKERRQ(DMDASetUniformCoordinates(celldm,0.0,2.0,0.0,1.0,0.0,1.5)); 36c4762a1bSJed Brown 37c4762a1bSJed Brown /* Create the DMSwarm */ 385f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreate(PETSC_COMM_WORLD,&swarm)); 395f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject)swarm,"Swarm")); 405f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetType(swarm,DMSWARM)); 415f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetDimension(swarm,dim)); 42c4762a1bSJed Brown 43c4762a1bSJed Brown /* Configure swarm to be of type PIC */ 445f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetType(swarm,DMSWARM_PIC)); 455f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetCellDM(swarm,celldm)); 46c4762a1bSJed Brown 47c4762a1bSJed Brown /* Register two scalar fields within the DMSwarm */ 485f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(swarm,"viscosity",1,PETSC_DOUBLE)); 495f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(swarm,"density",1,PETSC_DOUBLE)); 505f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmFinalizeFieldRegister(swarm)); 51c4762a1bSJed Brown 52c4762a1bSJed Brown /* Set initial local sizes of the DMSwarm with a buffer length of zero */ 535f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetLocalSizes(swarm,4,0)); 54c4762a1bSJed Brown 55c4762a1bSJed Brown /* Insert swarm coordinates cell-wise */ 565f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmInsertPointsUsingCellDM(swarm,DMSWARMPIC_LAYOUT_REGULAR,3)); 57c4762a1bSJed Brown min[0] = 0.5; max[0] = 0.7; 58c4762a1bSJed Brown min[1] = 0.5; max[1] = 0.8; 59c4762a1bSJed Brown min[2] = 0.5; max[2] = 0.9; 60c4762a1bSJed Brown ndir[0] = ndir[1] = ndir[2] = 30; 615f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetPointsUniformCoordinates(swarm,min,max,ndir,ADD_VALUES)); 62c4762a1bSJed Brown 63c4762a1bSJed Brown /* This should be dispatched from a regular DMView() */ 645f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmViewXDMF(swarm,"ex20.xmf")); 655f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(celldm,PETSC_VIEWER_STDOUT_WORLD)); 665f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(swarm,PETSC_VIEWER_STDOUT_WORLD)); 67c4762a1bSJed Brown 68c4762a1bSJed Brown { 69c4762a1bSJed Brown PetscInt npoints,*list; 70c4762a1bSJed Brown PetscMPIInt rank; 71c4762a1bSJed Brown 725f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 735f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSortGetAccess(swarm)); 745f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSortGetNumberOfPointsPerCell(swarm,0,&npoints)); 755f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSortGetPointsPerCell(swarm,rank,&npoints,&list)); 765f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree(list)); 775f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSortRestoreAccess(swarm)); 78c4762a1bSJed Brown } 795f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmMigrate(swarm,PETSC_FALSE)); 805f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&celldm)); 815f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&swarm)); 82c4762a1bSJed Brown PetscFunctionReturn(0); 83c4762a1bSJed Brown } 84c4762a1bSJed Brown 85c4762a1bSJed Brown PetscErrorCode pic_insert_DMPLEX_with_cell_list(PetscInt dim) 86c4762a1bSJed Brown { 87c4762a1bSJed Brown DM celldm = NULL,swarm,distributedMesh = NULL; 88c4762a1bSJed Brown const char *fieldnames[] = {"viscosity"}; 89c4762a1bSJed Brown 90c4762a1bSJed Brown PetscFunctionBegin; 91c4762a1bSJed Brown /* Create the background cell DM */ 92c4762a1bSJed Brown if (dim == 2) { 93c4762a1bSJed Brown PetscInt cells_per_dim[2],nx[2]; 94c4762a1bSJed Brown PetscInt n_tricells; 95c4762a1bSJed Brown PetscInt n_trivert; 96a4a685f2SJacob Faibussowitsch PetscInt *tricells; 97a4a685f2SJacob Faibussowitsch PetscReal *trivert,dx,dy; 98c4762a1bSJed Brown PetscInt ii,jj,cnt; 99c4762a1bSJed Brown 100c4762a1bSJed Brown cells_per_dim[0] = 4; 101c4762a1bSJed Brown cells_per_dim[1] = 4; 102c4762a1bSJed Brown n_tricells = cells_per_dim[0] * cells_per_dim[1] * 2; 103c4762a1bSJed Brown nx[0] = cells_per_dim[0] + 1; 104c4762a1bSJed Brown nx[1] = cells_per_dim[1] + 1; 105c4762a1bSJed Brown n_trivert = nx[0] * nx[1]; 106c4762a1bSJed Brown 1075f80ce2aSJacob Faibussowitsch CHKERRQ(PetscMalloc1(n_tricells*3,&tricells)); 1085f80ce2aSJacob Faibussowitsch CHKERRQ(PetscMalloc1(nx[0]*nx[1]*2,&trivert)); 109c4762a1bSJed Brown 110c4762a1bSJed Brown /* verts */ 111c4762a1bSJed Brown cnt = 0; 112c4762a1bSJed Brown dx = 2.0/((PetscReal)cells_per_dim[0]); 113c4762a1bSJed Brown dy = 1.0/((PetscReal)cells_per_dim[1]); 114c4762a1bSJed Brown for (jj=0; jj<nx[1]; jj++) { 115c4762a1bSJed Brown for (ii=0; ii<nx[0]; ii++) { 116c4762a1bSJed Brown trivert[2*cnt+0] = 0.0 + ii * dx; 117c4762a1bSJed Brown trivert[2*cnt+1] = 0.0 + jj * dy; 118c4762a1bSJed Brown cnt++; 119c4762a1bSJed Brown } 120c4762a1bSJed Brown } 121c4762a1bSJed Brown 122c4762a1bSJed Brown /* connectivity */ 123c4762a1bSJed Brown cnt = 0; 124c4762a1bSJed Brown for (jj=0; jj<cells_per_dim[1]; jj++) { 125c4762a1bSJed Brown for (ii=0; ii<cells_per_dim[0]; ii++) { 126c4762a1bSJed Brown PetscInt idx,idx0,idx1,idx2,idx3; 127c4762a1bSJed Brown 128c4762a1bSJed Brown idx = (ii) + (jj) * nx[0]; 129c4762a1bSJed Brown idx0 = idx; 130c4762a1bSJed Brown idx1 = idx0 + 1; 131c4762a1bSJed Brown idx2 = idx1 + nx[0]; 132c4762a1bSJed Brown idx3 = idx0 + nx[0]; 133c4762a1bSJed Brown 134c4762a1bSJed Brown tricells[3*cnt+0] = idx0; 135c4762a1bSJed Brown tricells[3*cnt+1] = idx1; 136c4762a1bSJed Brown tricells[3*cnt+2] = idx2; 137c4762a1bSJed Brown cnt++; 138c4762a1bSJed Brown 139c4762a1bSJed Brown tricells[3*cnt+0] = idx0; 140c4762a1bSJed Brown tricells[3*cnt+1] = idx2; 141c4762a1bSJed Brown tricells[3*cnt+2] = idx3; 142c4762a1bSJed Brown cnt++; 143c4762a1bSJed Brown } 144c4762a1bSJed Brown } 1455f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexCreateFromCellListPetsc(PETSC_COMM_WORLD,dim,n_tricells,n_trivert,3,PETSC_TRUE,tricells,dim,trivert,&celldm)); 1465f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree(trivert)); 1475f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree(tricells)); 148c4762a1bSJed Brown } 1492c71b3e2SJacob Faibussowitsch PetscCheckFalse(dim == 3,PETSC_COMM_WORLD,PETSC_ERR_SUP,"Only 2D PLEX example supported"); 150c4762a1bSJed Brown 151c4762a1bSJed Brown /* Distribute mesh over processes */ 1525f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexDistribute(celldm,0,NULL,&distributedMesh)); 153c4762a1bSJed Brown if (distributedMesh) { 1545f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&celldm)); 155c4762a1bSJed Brown celldm = distributedMesh; 156c4762a1bSJed Brown } 1575f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject)celldm,"Cells")); 1585f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetFromOptions(celldm)); 159c4762a1bSJed Brown { 160c4762a1bSJed Brown PetscInt numComp[] = {1}; 161c4762a1bSJed Brown PetscInt numDof[] = {1,0,0}; /* vert, edge, cell */ 162c4762a1bSJed Brown PetscInt numBC = 0; 163c4762a1bSJed Brown PetscSection section; 164c4762a1bSJed Brown 1655f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexCreateSection(celldm,NULL,numComp,numDof,numBC,NULL,NULL,NULL,NULL,§ion)); 1665f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetLocalSection(celldm,section)); 1675f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSectionDestroy(§ion)); 168c4762a1bSJed Brown } 1695f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetUp(celldm)); 170c4762a1bSJed Brown { 171c4762a1bSJed Brown PetscViewer viewer; 172c4762a1bSJed Brown 1735f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerCreate(PETSC_COMM_WORLD,&viewer)); 1745f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerSetType(viewer,PETSCVIEWERVTK)); 1755f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFileSetMode(viewer,FILE_MODE_WRITE)); 1765f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFileSetName(viewer,"ex20plex.vtk")); 1775f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(celldm,viewer)); 1785f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerDestroy(&viewer)); 179c4762a1bSJed Brown } 180c4762a1bSJed Brown 181c4762a1bSJed Brown /* Create the DMSwarm */ 1825f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreate(PETSC_COMM_WORLD,&swarm)); 1835f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject)swarm,"Swarm")); 1845f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetType(swarm,DMSWARM)); 1855f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetDimension(swarm,dim)); 186c4762a1bSJed Brown 1875f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetType(swarm,DMSWARM_PIC)); 1885f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetCellDM(swarm,celldm)); 189c4762a1bSJed Brown 190c4762a1bSJed Brown /* Register two scalar fields within the DMSwarm */ 1915f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(swarm,"viscosity",1,PETSC_DOUBLE)); 1925f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(swarm,"density",1,PETSC_DOUBLE)); 1935f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmFinalizeFieldRegister(swarm)); 194c4762a1bSJed Brown 195c4762a1bSJed Brown /* Set initial local sizes of the DMSwarm with a buffer length of zero */ 1965f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetLocalSizes(swarm,4,0)); 197c4762a1bSJed Brown 198c4762a1bSJed Brown /* Insert swarm coordinates cell-wise */ 1995f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmInsertPointsUsingCellDM(swarm,DMSWARMPIC_LAYOUT_SUBDIVISION,2)); 2005f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmViewFieldsXDMF(swarm,"ex20.xmf",1,fieldnames)); 2015f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(celldm,PETSC_VIEWER_STDOUT_WORLD)); 2025f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(swarm,PETSC_VIEWER_STDOUT_WORLD)); 2035f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&celldm)); 2045f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&swarm)); 205c4762a1bSJed Brown PetscFunctionReturn(0); 206c4762a1bSJed Brown } 207c4762a1bSJed Brown 208c4762a1bSJed Brown PetscErrorCode pic_insert_DMPLEX(PetscBool is_simplex,PetscInt dim) 209c4762a1bSJed Brown { 210c4762a1bSJed Brown DM celldm,swarm,distributedMesh = NULL; 211c4762a1bSJed Brown const char *fieldnames[] = {"viscosity","DMSwarm_rank"}; 212c4762a1bSJed Brown 213c4762a1bSJed Brown PetscFunctionBegin; 214c4762a1bSJed Brown 215c4762a1bSJed Brown /* Create the background cell DM */ 216c4762a1bSJed Brown { 217c4762a1bSJed Brown PetscInt faces[3] = {4, 2, 4}; 2185f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexCreateBoxMesh(PETSC_COMM_WORLD, dim, is_simplex, faces, NULL, NULL, NULL, PETSC_TRUE, &celldm)); 219c4762a1bSJed Brown } 220c4762a1bSJed Brown 221c4762a1bSJed Brown /* Distribute mesh over processes */ 2225f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexDistribute(celldm,0,NULL,&distributedMesh)); 223c4762a1bSJed Brown if (distributedMesh) { 2245f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&celldm)); 225c4762a1bSJed Brown celldm = distributedMesh; 226c4762a1bSJed Brown } 2275f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject)celldm,"Cells")); 2285f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetFromOptions(celldm)); 229c4762a1bSJed Brown { 230c4762a1bSJed Brown PetscInt numComp[] = {1}; 231c4762a1bSJed Brown PetscInt numDof[] = {1,0,0}; /* vert, edge, cell */ 232c4762a1bSJed Brown PetscInt numBC = 0; 233c4762a1bSJed Brown PetscSection section; 234c4762a1bSJed Brown 2355f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexCreateSection(celldm,NULL,numComp,numDof,numBC,NULL,NULL,NULL,NULL,§ion)); 2365f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetLocalSection(celldm,section)); 2375f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSectionDestroy(§ion)); 238c4762a1bSJed Brown } 2395f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetUp(celldm)); 240c4762a1bSJed Brown { 241c4762a1bSJed Brown PetscViewer viewer; 242c4762a1bSJed Brown 2435f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerCreate(PETSC_COMM_WORLD,&viewer)); 2445f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerSetType(viewer,PETSCVIEWERVTK)); 2455f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFileSetMode(viewer,FILE_MODE_WRITE)); 2465f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFileSetName(viewer,"ex20plex.vtk")); 2475f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(celldm,viewer)); 2485f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerDestroy(&viewer)); 249c4762a1bSJed Brown } 250c4762a1bSJed Brown 2515f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreate(PETSC_COMM_WORLD,&swarm)); 2525f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject)swarm,"Swarm")); 2535f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetType(swarm,DMSWARM)); 2545f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetDimension(swarm,dim)); 255c4762a1bSJed Brown 2565f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetType(swarm,DMSWARM_PIC)); 2575f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetCellDM(swarm,celldm)); 258c4762a1bSJed Brown 259c4762a1bSJed Brown /* Register two scalar fields within the DMSwarm */ 2605f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(swarm,"viscosity",1,PETSC_DOUBLE)); 2615f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(swarm,"density",1,PETSC_DOUBLE)); 2625f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmFinalizeFieldRegister(swarm)); 263c4762a1bSJed Brown 264c4762a1bSJed Brown /* Set initial local sizes of the DMSwarm with a buffer length of zero */ 2655f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetLocalSizes(swarm,4,0)); 266c4762a1bSJed Brown 267c4762a1bSJed Brown /* Insert swarm coordinates cell-wise */ 2685f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmInsertPointsUsingCellDM(swarm,DMSWARMPIC_LAYOUT_GAUSS,3)); 2695f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmViewFieldsXDMF(swarm,"ex20.xmf",2,fieldnames)); 2705f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(celldm,PETSC_VIEWER_STDOUT_WORLD)); 2715f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(swarm,PETSC_VIEWER_STDOUT_WORLD)); 2725f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&celldm)); 2735f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&swarm)); 274c4762a1bSJed Brown PetscFunctionReturn(0); 275c4762a1bSJed Brown } 276c4762a1bSJed Brown 277c4762a1bSJed Brown int main(int argc,char **args) 278c4762a1bSJed Brown { 279c4762a1bSJed Brown PetscInt mode = 0; 280c4762a1bSJed Brown PetscInt dim = 2; 281c4762a1bSJed Brown 282*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscInitialize(&argc,&args,(char*)0,help)); 2835f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-mode",&mode,NULL)); 2845f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-dim",&dim,NULL)); 285c4762a1bSJed Brown switch (mode) { 286c4762a1bSJed Brown case 0: 2875f80ce2aSJacob Faibussowitsch CHKERRQ(pic_insert_DMDA(dim)); 288c4762a1bSJed Brown break; 289c4762a1bSJed Brown case 1: 290c4762a1bSJed Brown /* tri / tet */ 2915f80ce2aSJacob Faibussowitsch CHKERRQ(pic_insert_DMPLEX(PETSC_TRUE,dim)); 292c4762a1bSJed Brown break; 293c4762a1bSJed Brown case 2: 294c4762a1bSJed Brown /* quad / hex */ 2955f80ce2aSJacob Faibussowitsch CHKERRQ(pic_insert_DMPLEX(PETSC_FALSE,dim)); 296c4762a1bSJed Brown break; 297c4762a1bSJed Brown default: 2985f80ce2aSJacob Faibussowitsch CHKERRQ(pic_insert_DMDA(dim)); 299c4762a1bSJed Brown break; 300c4762a1bSJed Brown } 301*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscFinalize()); 302*b122ec5aSJacob Faibussowitsch return 0; 303c4762a1bSJed Brown } 304c4762a1bSJed Brown 305c4762a1bSJed Brown /*TEST 306c4762a1bSJed Brown 307c4762a1bSJed Brown test: 308c4762a1bSJed Brown args: 309c4762a1bSJed Brown requires: !complex double 3107ed4f029SJed Brown filter: grep -v atomic 311c4762a1bSJed Brown filter_output: grep -v atomic 312c4762a1bSJed Brown 313c4762a1bSJed Brown test: 314c4762a1bSJed Brown suffix: 2 315c4762a1bSJed Brown requires: triangle double !complex 316c4762a1bSJed Brown args: -mode 1 3177ed4f029SJed Brown filter: grep -v atomic 318c4762a1bSJed Brown filter_output: grep -v atomic 319c4762a1bSJed Brown 320c4762a1bSJed Brown TEST*/ 321