1c4762a1bSJed Brown 2c4762a1bSJed Brown static char help[] = "Tests DMSwarm\n\n"; 3c4762a1bSJed Brown 4c4762a1bSJed Brown #include <petscdm.h> 5c4762a1bSJed Brown #include <petscdmda.h> 6c4762a1bSJed Brown #include <petscdmswarm.h> 7c4762a1bSJed Brown 8c4762a1bSJed Brown PETSC_EXTERN PetscErrorCode DMSwarmCollect_General(DM,PetscErrorCode (*)(DM,void*,PetscInt*,PetscInt**),size_t,void*,PetscInt*); 9c4762a1bSJed Brown PETSC_EXTERN PetscErrorCode DMSwarmCollect_DMDABoundingBox(DM,PetscInt*); 10c4762a1bSJed Brown 11c4762a1bSJed Brown PetscErrorCode ex1_1(void) 12c4762a1bSJed Brown { 13c4762a1bSJed Brown DM dms; 14c4762a1bSJed Brown Vec x; 15c4762a1bSJed Brown PetscMPIInt rank,size; 16c4762a1bSJed Brown PetscInt p; 17c4762a1bSJed Brown 18362febeeSStefano Zampini PetscFunctionBegin; 19*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); 20*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 212c71b3e2SJacob Faibussowitsch PetscCheckFalse((size > 1) && (size != 4),PETSC_COMM_WORLD,PETSC_ERR_SUP,"Must be run wuth 4 MPI ranks"); 22c4762a1bSJed Brown 23*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreate(PETSC_COMM_WORLD,&dms)); 24*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetType(dms,DMSWARM)); 25c4762a1bSJed Brown 26*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmInitializeFieldRegister(dms)); 27*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(dms,"viscosity",1,PETSC_REAL)); 28*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(dms,"strain",1,PETSC_REAL)); 29*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmFinalizeFieldRegister(dms)); 30*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetLocalSizes(dms,5+rank,4)); 31*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(dms,PETSC_VIEWER_STDOUT_WORLD)); 32c4762a1bSJed Brown 33c4762a1bSJed Brown { 34c4762a1bSJed Brown PetscReal *array; 35*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"viscosity",NULL,NULL,(void**)&array)); 36c4762a1bSJed Brown for (p=0; p<5+rank; p++) { 37c4762a1bSJed Brown array[p] = 11.1 + p*0.1 + rank*100.0; 38c4762a1bSJed Brown } 39*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"viscosity",NULL,NULL,(void**)&array)); 40c4762a1bSJed Brown } 41c4762a1bSJed Brown 42c4762a1bSJed Brown { 43c4762a1bSJed Brown PetscReal *array; 44*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"strain",NULL,NULL,(void**)&array)); 45c4762a1bSJed Brown for (p=0; p<5+rank; p++) { 46c4762a1bSJed Brown array[p] = 2.0e-2 + p*0.001 + rank*1.0; 47c4762a1bSJed Brown } 48*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"strain",NULL,NULL,(void**)&array)); 49c4762a1bSJed Brown } 50c4762a1bSJed Brown 51*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmCreateGlobalVectorFromField(dms,"viscosity",&x)); 52*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmDestroyGlobalVectorFromField(dms,"viscosity",&x)); 53c4762a1bSJed Brown 54*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmVectorDefineField(dms,"strain")); 55*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreateGlobalVector(dms,&x)); 56*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&x)); 57c4762a1bSJed Brown 58c4762a1bSJed Brown { 59c4762a1bSJed Brown PetscInt *rankval; 60c4762a1bSJed Brown PetscInt npoints[2],npoints_orig[2]; 61c4762a1bSJed Brown 62*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dms,&npoints_orig[0])); 63*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetSize(dms,&npoints_orig[1])); 64*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"DMSwarm_rank",NULL,NULL,(void**)&rankval)); 65c4762a1bSJed Brown if ((rank == 0) && (size > 1)) { 66c4762a1bSJed Brown rankval[0] = 1; 67c4762a1bSJed Brown rankval[3] = 1; 68c4762a1bSJed Brown } 69c4762a1bSJed Brown if (rank == 3) { 70c4762a1bSJed Brown rankval[2] = 1; 71c4762a1bSJed Brown } 72*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"DMSwarm_rank",NULL,NULL,(void**)&rankval)); 73*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmMigrate(dms,PETSC_TRUE)); 74*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dms,&npoints[0])); 75*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetSize(dms,&npoints[1])); 76*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 77*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD,"rank[%d] before(%D,%D) after(%D,%D)\n",rank,npoints_orig[0],npoints_orig[1],npoints[0],npoints[1])); 78*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 79*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 80c4762a1bSJed Brown } 81c4762a1bSJed Brown { 82*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmCreateGlobalVectorFromField(dms,"viscosity",&x)); 83*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecView(x,PETSC_VIEWER_STDOUT_WORLD)); 84*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmDestroyGlobalVectorFromField(dms,"viscosity",&x)); 85c4762a1bSJed Brown } 86c4762a1bSJed Brown { 87*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmCreateGlobalVectorFromField(dms,"strain",&x)); 88*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecView(x,PETSC_VIEWER_STDOUT_WORLD)); 89*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmDestroyGlobalVectorFromField(dms,"strain",&x)); 90c4762a1bSJed Brown } 91c4762a1bSJed Brown 92*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dms)); 93c4762a1bSJed Brown PetscFunctionReturn(0); 94c4762a1bSJed Brown } 95c4762a1bSJed Brown 96c4762a1bSJed Brown PetscErrorCode ex1_2(void) 97c4762a1bSJed Brown { 98c4762a1bSJed Brown DM dms; 99c4762a1bSJed Brown Vec x; 100c4762a1bSJed Brown PetscMPIInt rank,size; 101c4762a1bSJed Brown PetscInt p; 102c4762a1bSJed Brown 103362febeeSStefano Zampini PetscFunctionBegin; 104*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); 105*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 106*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreate(PETSC_COMM_WORLD,&dms)); 107*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetType(dms,DMSWARM)); 108*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmInitializeFieldRegister(dms)); 109c4762a1bSJed Brown 110*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(dms,"viscosity",1,PETSC_REAL)); 111*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(dms,"strain",1,PETSC_REAL)); 112*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmFinalizeFieldRegister(dms)); 113*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetLocalSizes(dms,5+rank,4)); 114*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(dms,PETSC_VIEWER_STDOUT_WORLD)); 115c4762a1bSJed Brown { 116c4762a1bSJed Brown PetscReal *array; 117*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"viscosity",NULL,NULL,(void**)&array)); 118c4762a1bSJed Brown for (p=0; p<5+rank; p++) { 119c4762a1bSJed Brown array[p] = 11.1 + p*0.1 + rank*100.0; 120c4762a1bSJed Brown } 121*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"viscosity",NULL,NULL,(void**)&array)); 122c4762a1bSJed Brown } 123c4762a1bSJed Brown { 124c4762a1bSJed Brown PetscReal *array; 125*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"strain",NULL,NULL,(void**)&array)); 126c4762a1bSJed Brown for (p=0; p<5+rank; p++) { 127c4762a1bSJed Brown array[p] = 2.0e-2 + p*0.001 + rank*1.0; 128c4762a1bSJed Brown } 129*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"strain",NULL,NULL,(void**)&array)); 130c4762a1bSJed Brown } 131c4762a1bSJed Brown { 132c4762a1bSJed Brown PetscInt *rankval; 133c4762a1bSJed Brown PetscInt npoints[2],npoints_orig[2]; 134c4762a1bSJed Brown 135*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dms,&npoints_orig[0])); 136*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetSize(dms,&npoints_orig[1])); 137*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 138*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD,"rank[%d] before(%D,%D)\n",rank,npoints_orig[0],npoints_orig[1])); 139*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 140*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 141c4762a1bSJed Brown 142*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"DMSwarm_rank",NULL,NULL,(void**)&rankval)); 143c4762a1bSJed Brown 144c4762a1bSJed Brown if (rank == 1) { 145c4762a1bSJed Brown rankval[0] = -1; 146c4762a1bSJed Brown } 147c4762a1bSJed Brown if (rank == 2) { 148c4762a1bSJed Brown rankval[1] = -1; 149c4762a1bSJed Brown } 150c4762a1bSJed Brown if (rank == 3) { 151c4762a1bSJed Brown rankval[3] = -1; 152c4762a1bSJed Brown rankval[4] = -1; 153c4762a1bSJed Brown } 154*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"DMSwarm_rank",NULL,NULL,(void**)&rankval)); 155*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmCollectViewCreate(dms)); 156*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dms,&npoints[0])); 157*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetSize(dms,&npoints[1])); 158*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 159*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD,"rank[%d] after(%D,%D)\n",rank,npoints[0],npoints[1])); 160*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 161*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 162c4762a1bSJed Brown 163*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmCreateGlobalVectorFromField(dms,"viscosity",&x)); 164*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecView(x,PETSC_VIEWER_STDOUT_WORLD)); 165*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmDestroyGlobalVectorFromField(dms,"viscosity",&x)); 166c4762a1bSJed Brown 167*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmCollectViewDestroy(dms)); 168*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dms,&npoints[0])); 169*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetSize(dms,&npoints[1])); 170*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 171*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD,"rank[%d] after_v(%D,%D)\n",rank,npoints[0],npoints[1])); 172*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 173*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 174c4762a1bSJed Brown 175*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmCreateGlobalVectorFromField(dms,"viscosity",&x)); 176*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecView(x,PETSC_VIEWER_STDOUT_WORLD)); 177*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmDestroyGlobalVectorFromField(dms,"viscosity",&x)); 178c4762a1bSJed Brown } 179*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dms)); 180c4762a1bSJed Brown PetscFunctionReturn(0); 181c4762a1bSJed Brown } 182c4762a1bSJed Brown 183c4762a1bSJed Brown /* 184c4762a1bSJed Brown splot "c-rank0.gp","c-rank1.gp","c-rank2.gp","c-rank3.gp" 185c4762a1bSJed Brown */ 186c4762a1bSJed Brown PetscErrorCode ex1_3(void) 187c4762a1bSJed Brown { 188c4762a1bSJed Brown DM dms; 189c4762a1bSJed Brown PetscMPIInt rank,size; 190c4762a1bSJed Brown PetscInt is,js,ni,nj,overlap; 191c4762a1bSJed Brown DM dmcell; 192c4762a1bSJed Brown 193362febeeSStefano Zampini PetscFunctionBegin; 194*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); 195*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 196c4762a1bSJed Brown overlap = 2; 197*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDACreate2d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_BOX,13,13,PETSC_DECIDE,PETSC_DECIDE,1,overlap,NULL,NULL,&dmcell)); 198*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetFromOptions(dmcell)); 199*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetUp(dmcell)); 200*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDASetUniformCoordinates(dmcell,-1.0,1.0,-1.0,1.0,-1.0,1.0)); 201*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDAGetCorners(dmcell,&is,&js,NULL,&ni,&nj,NULL)); 202*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreate(PETSC_COMM_WORLD,&dms)); 203*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetType(dms,DMSWARM)); 204*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetCellDM(dms,dmcell)); 205c4762a1bSJed Brown 206c4762a1bSJed Brown /* load in data types */ 207*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmInitializeFieldRegister(dms)); 208*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(dms,"viscosity",1,PETSC_REAL)); 209*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(dms,"coorx",1,PETSC_REAL)); 210*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(dms,"coory",1,PETSC_REAL)); 211*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmFinalizeFieldRegister(dms)); 212*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetLocalSizes(dms,ni*nj*4,4)); 213*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(dms,PETSC_VIEWER_STDOUT_WORLD)); 214c4762a1bSJed Brown 215c4762a1bSJed Brown /* set values within the swarm */ 216c4762a1bSJed Brown { 217c4762a1bSJed Brown PetscReal *array_x,*array_y; 218c4762a1bSJed Brown PetscInt npoints,i,j,cnt; 219c4762a1bSJed Brown DMDACoor2d **LA_coor; 220c4762a1bSJed Brown Vec coor; 221c4762a1bSJed Brown DM dmcellcdm; 222c4762a1bSJed Brown 223*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetCoordinateDM(dmcell,&dmcellcdm)); 224*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetCoordinates(dmcell,&coor)); 225*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDAVecGetArray(dmcellcdm,coor,&LA_coor)); 226*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dms,&npoints)); 227*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"coorx",NULL,NULL,(void**)&array_x)); 228*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"coory",NULL,NULL,(void**)&array_y)); 229c4762a1bSJed Brown cnt = 0; 230c4762a1bSJed Brown for (j=js; j<js+nj; j++) { 231c4762a1bSJed Brown for (i=is; i<is+ni; i++) { 232c4762a1bSJed Brown PetscReal xp,yp; 233c4762a1bSJed Brown xp = PetscRealPart(LA_coor[j][i].x); 234c4762a1bSJed Brown yp = PetscRealPart(LA_coor[j][i].y); 235c4762a1bSJed Brown array_x[4*cnt+0] = xp - 0.05; if (array_x[4*cnt+0] < -1.0) { array_x[4*cnt+0] = -1.0+1.0e-12; } 236c4762a1bSJed Brown array_x[4*cnt+1] = xp + 0.05; if (array_x[4*cnt+1] > 1.0) { array_x[4*cnt+1] = 1.0-1.0e-12; } 237c4762a1bSJed Brown array_x[4*cnt+2] = xp - 0.05; if (array_x[4*cnt+2] < -1.0) { array_x[4*cnt+2] = -1.0+1.0e-12; } 238c4762a1bSJed Brown array_x[4*cnt+3] = xp + 0.05; if (array_x[4*cnt+3] > 1.0) { array_x[4*cnt+3] = 1.0-1.0e-12; } 239c4762a1bSJed Brown 240c4762a1bSJed Brown array_y[4*cnt+0] = yp - 0.05; if (array_y[4*cnt+0] < -1.0) { array_y[4*cnt+0] = -1.0+1.0e-12; } 241c4762a1bSJed Brown array_y[4*cnt+1] = yp - 0.05; if (array_y[4*cnt+1] < -1.0) { array_y[4*cnt+1] = -1.0+1.0e-12; } 242c4762a1bSJed Brown array_y[4*cnt+2] = yp + 0.05; if (array_y[4*cnt+2] > 1.0) { array_y[4*cnt+2] = 1.0-1.0e-12; } 243c4762a1bSJed Brown array_y[4*cnt+3] = yp + 0.05; if (array_y[4*cnt+3] > 1.0) { array_y[4*cnt+3] = 1.0-1.0e-12; } 244c4762a1bSJed Brown cnt++; 245c4762a1bSJed Brown } 246c4762a1bSJed Brown } 247*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"coory",NULL,NULL,(void**)&array_y)); 248*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"coorx",NULL,NULL,(void**)&array_x)); 249*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDAVecRestoreArray(dmcellcdm,coor,&LA_coor)); 250c4762a1bSJed Brown } 251c4762a1bSJed Brown { 252c4762a1bSJed Brown PetscInt npoints[2],npoints_orig[2],ng; 253c4762a1bSJed Brown 254*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dms,&npoints_orig[0])); 255*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetSize(dms,&npoints_orig[1])); 256*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 257*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD,"rank[%d] before(%D,%D)\n",rank,npoints_orig[0],npoints_orig[1])); 258*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 259*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 260*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmCollect_DMDABoundingBox(dms,&ng)); 261c4762a1bSJed Brown 262*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dms,&npoints[0])); 263*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetSize(dms,&npoints[1])); 264*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 265*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD,"rank[%d] after(%D,%D)\n",rank,npoints[0],npoints[1])); 266*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 267*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 268c4762a1bSJed Brown } 269c4762a1bSJed Brown { 270c4762a1bSJed Brown PetscReal *array_x,*array_y; 271c4762a1bSJed Brown PetscInt npoints,p; 272c4762a1bSJed Brown FILE *fp = NULL; 273c4762a1bSJed Brown char name[PETSC_MAX_PATH_LEN]; 274c4762a1bSJed Brown 275*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSNPrintf(name,PETSC_MAX_PATH_LEN-1,"c-rank%d.gp",rank)); 276c4762a1bSJed Brown fp = fopen(name,"w"); 2772c71b3e2SJacob Faibussowitsch PetscCheckFalse(!fp,PETSC_COMM_SELF,PETSC_ERR_FILE_OPEN,"Cannot open file %s",name); 278*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dms,&npoints)); 279*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"coorx",NULL,NULL,(void**)&array_x)); 280*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"coory",NULL,NULL,(void**)&array_y)); 281c4762a1bSJed Brown for (p=0; p<npoints; p++) { 282c4762a1bSJed Brown fprintf(fp,"%+1.4e %+1.4e %1.4e\n",array_x[p],array_y[p],(double)rank); 283c4762a1bSJed Brown } 284*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"coory",NULL,NULL,(void**)&array_y)); 285*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"coorx",NULL,NULL,(void**)&array_x)); 286c4762a1bSJed Brown fclose(fp); 287c4762a1bSJed Brown } 288*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dmcell)); 289*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dms)); 290c4762a1bSJed Brown PetscFunctionReturn(0); 291c4762a1bSJed Brown } 292c4762a1bSJed Brown 293c4762a1bSJed Brown typedef struct { 294c4762a1bSJed Brown PetscReal cx[2]; 295c4762a1bSJed Brown PetscReal radius; 296c4762a1bSJed Brown } CollectZoneCtx; 297c4762a1bSJed Brown 298c4762a1bSJed Brown PetscErrorCode collect_zone(DM dm,void *ctx,PetscInt *nfound,PetscInt **foundlist) 299c4762a1bSJed Brown { 300c4762a1bSJed Brown CollectZoneCtx *zone = (CollectZoneCtx*)ctx; 301c4762a1bSJed Brown PetscInt p,npoints; 302c4762a1bSJed Brown PetscReal *array_x,*array_y,r2; 303c4762a1bSJed Brown PetscInt p2collect,*plist; 304c4762a1bSJed Brown PetscMPIInt rank; 305c4762a1bSJed Brown 306362febeeSStefano Zampini PetscFunctionBegin; 307*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 308*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dm,&npoints)); 309*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dm,"coorx",NULL,NULL,(void**)&array_x)); 310*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dm,"coory",NULL,NULL,(void**)&array_y)); 311c4762a1bSJed Brown 312c4762a1bSJed Brown r2 = zone->radius * zone->radius; 313c4762a1bSJed Brown p2collect = 0; 314c4762a1bSJed Brown for (p=0; p<npoints; p++) { 315c4762a1bSJed Brown PetscReal sep2; 316c4762a1bSJed Brown 317c4762a1bSJed Brown sep2 = (array_x[p] - zone->cx[0])*(array_x[p] - zone->cx[0]); 318c4762a1bSJed Brown sep2 += (array_y[p] - zone->cx[1])*(array_y[p] - zone->cx[1]); 319c4762a1bSJed Brown if (sep2 < r2) { 320c4762a1bSJed Brown p2collect++; 321c4762a1bSJed Brown } 322c4762a1bSJed Brown } 323c4762a1bSJed Brown 324*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscMalloc1(p2collect+1,&plist)); 325c4762a1bSJed Brown p2collect = 0; 326c4762a1bSJed Brown for (p=0; p<npoints; p++) { 327c4762a1bSJed Brown PetscReal sep2; 328c4762a1bSJed Brown 329c4762a1bSJed Brown sep2 = (array_x[p] - zone->cx[0])*(array_x[p] - zone->cx[0]); 330c4762a1bSJed Brown sep2 += (array_y[p] - zone->cx[1])*(array_y[p] - zone->cx[1]); 331c4762a1bSJed Brown if (sep2 < r2) { 332c4762a1bSJed Brown plist[p2collect] = p; 333c4762a1bSJed Brown p2collect++; 334c4762a1bSJed Brown } 335c4762a1bSJed Brown } 336*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dm,"coory",NULL,NULL,(void**)&array_y)); 337*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dm,"coorx",NULL,NULL,(void**)&array_x)); 338c4762a1bSJed Brown 339c4762a1bSJed Brown *nfound = p2collect; 340c4762a1bSJed Brown *foundlist = plist; 341c4762a1bSJed Brown PetscFunctionReturn(0); 342c4762a1bSJed Brown } 343c4762a1bSJed Brown 344c4762a1bSJed Brown PetscErrorCode ex1_4(void) 345c4762a1bSJed Brown { 346c4762a1bSJed Brown DM dms; 347c4762a1bSJed Brown PetscMPIInt rank,size; 348c4762a1bSJed Brown PetscInt is,js,ni,nj,overlap,nn; 349c4762a1bSJed Brown DM dmcell; 350c4762a1bSJed Brown CollectZoneCtx *zone; 351c4762a1bSJed Brown PetscReal dx; 352c4762a1bSJed Brown 353362febeeSStefano Zampini PetscFunctionBegin; 354*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); 355*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 356c4762a1bSJed Brown nn = 101; 357c4762a1bSJed Brown dx = 2.0/ (PetscReal)(nn-1); 358c4762a1bSJed Brown overlap = 0; 359*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDACreate2d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_BOX,nn,nn,PETSC_DECIDE,PETSC_DECIDE,1,overlap,NULL,NULL,&dmcell)); 360*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetFromOptions(dmcell)); 361*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetUp(dmcell)); 362*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDASetUniformCoordinates(dmcell,-1.0,1.0,-1.0,1.0,-1.0,1.0)); 363*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDAGetCorners(dmcell,&is,&js,NULL,&ni,&nj,NULL)); 364*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreate(PETSC_COMM_WORLD,&dms)); 365*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetType(dms,DMSWARM)); 366c4762a1bSJed Brown 367c4762a1bSJed Brown /* load in data types */ 368*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmInitializeFieldRegister(dms)); 369*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(dms,"viscosity",1,PETSC_REAL)); 370*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(dms,"coorx",1,PETSC_REAL)); 371*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRegisterPetscDatatypeField(dms,"coory",1,PETSC_REAL)); 372*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmFinalizeFieldRegister(dms)); 373*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmSetLocalSizes(dms,ni*nj*4,4)); 374*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(dms,PETSC_VIEWER_STDOUT_WORLD)); 375c4762a1bSJed Brown 376c4762a1bSJed Brown /* set values within the swarm */ 377c4762a1bSJed Brown { 378c4762a1bSJed Brown PetscReal *array_x,*array_y; 379c4762a1bSJed Brown PetscInt npoints,i,j,cnt; 380c4762a1bSJed Brown DMDACoor2d **LA_coor; 381c4762a1bSJed Brown Vec coor; 382c4762a1bSJed Brown DM dmcellcdm; 383c4762a1bSJed Brown 384*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetCoordinateDM(dmcell,&dmcellcdm)); 385*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetCoordinates(dmcell,&coor)); 386*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDAVecGetArray(dmcellcdm,coor,&LA_coor)); 387*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dms,&npoints)); 388*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"coorx",NULL,NULL,(void**)&array_x)); 389*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"coory",NULL,NULL,(void**)&array_y)); 390c4762a1bSJed Brown cnt = 0; 391c4762a1bSJed Brown for (j=js; j<js+nj; j++) { 392c4762a1bSJed Brown for (i=is; i<is+ni; i++) { 393c4762a1bSJed Brown PetscReal xp,yp; 394c4762a1bSJed Brown 395c4762a1bSJed Brown xp = PetscRealPart(LA_coor[j][i].x); 396c4762a1bSJed Brown yp = PetscRealPart(LA_coor[j][i].y); 397c4762a1bSJed Brown array_x[4*cnt+0] = xp - dx*0.1; /*if (array_x[4*cnt+0] < -1.0) { array_x[4*cnt+0] = -1.0+1.0e-12; }*/ 398c4762a1bSJed Brown array_x[4*cnt+1] = xp + dx*0.1; /*if (array_x[4*cnt+1] > 1.0) { array_x[4*cnt+1] = 1.0-1.0e-12; }*/ 399c4762a1bSJed Brown array_x[4*cnt+2] = xp - dx*0.1; /*if (array_x[4*cnt+2] < -1.0) { array_x[4*cnt+2] = -1.0+1.0e-12; }*/ 400c4762a1bSJed Brown array_x[4*cnt+3] = xp + dx*0.1; /*if (array_x[4*cnt+3] > 1.0) { array_x[4*cnt+3] = 1.0-1.0e-12; }*/ 401c4762a1bSJed Brown array_y[4*cnt+0] = yp - dx*0.1; /*if (array_y[4*cnt+0] < -1.0) { array_y[4*cnt+0] = -1.0+1.0e-12; }*/ 402c4762a1bSJed Brown array_y[4*cnt+1] = yp - dx*0.1; /*if (array_y[4*cnt+1] < -1.0) { array_y[4*cnt+1] = -1.0+1.0e-12; }*/ 403c4762a1bSJed Brown array_y[4*cnt+2] = yp + dx*0.1; /*if (array_y[4*cnt+2] > 1.0) { array_y[4*cnt+2] = 1.0-1.0e-12; }*/ 404c4762a1bSJed Brown array_y[4*cnt+3] = yp + dx*0.1; /*if (array_y[4*cnt+3] > 1.0) { array_y[4*cnt+3] = 1.0-1.0e-12; }*/ 405c4762a1bSJed Brown cnt++; 406c4762a1bSJed Brown } 407c4762a1bSJed Brown } 408*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"coory",NULL,NULL,(void**)&array_y)); 409*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"coorx",NULL,NULL,(void**)&array_x)); 410*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDAVecRestoreArray(dmcellcdm,coor,&LA_coor)); 411c4762a1bSJed Brown } 412*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscMalloc1(1,&zone)); 413c4762a1bSJed Brown if (size == 4) { 414c4762a1bSJed Brown if (rank == 0) { 415c4762a1bSJed Brown zone->cx[0] = 0.5; 416c4762a1bSJed Brown zone->cx[1] = 0.5; 417c4762a1bSJed Brown zone->radius = 0.3; 418c4762a1bSJed Brown } 419c4762a1bSJed Brown if (rank == 1) { 420c4762a1bSJed Brown zone->cx[0] = -0.5; 421c4762a1bSJed Brown zone->cx[1] = 0.5; 422c4762a1bSJed Brown zone->radius = 0.25; 423c4762a1bSJed Brown } 424c4762a1bSJed Brown if (rank == 2) { 425c4762a1bSJed Brown zone->cx[0] = 0.5; 426c4762a1bSJed Brown zone->cx[1] = -0.5; 427c4762a1bSJed Brown zone->radius = 0.2; 428c4762a1bSJed Brown } 429c4762a1bSJed Brown if (rank == 3) { 430c4762a1bSJed Brown zone->cx[0] = -0.5; 431c4762a1bSJed Brown zone->cx[1] = -0.5; 432c4762a1bSJed Brown zone->radius = 0.1; 433c4762a1bSJed Brown } 434c4762a1bSJed Brown } else { 435c4762a1bSJed Brown if (rank == 0) { 436c4762a1bSJed Brown zone->cx[0] = 0.5; 437c4762a1bSJed Brown zone->cx[1] = 0.5; 438c4762a1bSJed Brown zone->radius = 0.8; 439c4762a1bSJed Brown } else { 440c4762a1bSJed Brown zone->cx[0] = 10.0; 441c4762a1bSJed Brown zone->cx[1] = 10.0; 442c4762a1bSJed Brown zone->radius = 0.0; 443c4762a1bSJed Brown } 444c4762a1bSJed Brown } 445c4762a1bSJed Brown { 446c4762a1bSJed Brown PetscInt npoints[2],npoints_orig[2],ng; 447c4762a1bSJed Brown 448*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dms,&npoints_orig[0])); 449*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetSize(dms,&npoints_orig[1])); 450*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 451*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD,"rank[%d] before(%D,%D)\n",rank,npoints_orig[0],npoints_orig[1])); 452*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 453*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 454*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmCollect_General(dms,collect_zone,sizeof(CollectZoneCtx),zone,&ng)); 455*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dms,&npoints[0])); 456*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetSize(dms,&npoints[1])); 457*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 458*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD,"rank[%d] after(%D,%D)\n",rank,npoints[0],npoints[1])); 459*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 460*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 461c4762a1bSJed Brown } 462c4762a1bSJed Brown { 463c4762a1bSJed Brown PetscReal *array_x,*array_y; 464c4762a1bSJed Brown PetscInt npoints,p; 465c4762a1bSJed Brown FILE *fp = NULL; 466c4762a1bSJed Brown char name[PETSC_MAX_PATH_LEN]; 467c4762a1bSJed Brown 468*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSNPrintf(name,PETSC_MAX_PATH_LEN-1,"c-rank%d.gp",rank)); 469c4762a1bSJed Brown fp = fopen(name,"w"); 4702c71b3e2SJacob Faibussowitsch PetscCheckFalse(!fp,PETSC_COMM_SELF,PETSC_ERR_FILE_OPEN,"Cannot open file %s",name); 471*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetLocalSize(dms,&npoints)); 472*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"coorx",NULL,NULL,(void**)&array_x)); 473*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmGetField(dms,"coory",NULL,NULL,(void**)&array_y)); 474c4762a1bSJed Brown for (p=0; p<npoints; p++) { 475c4762a1bSJed Brown fprintf(fp,"%+1.4e %+1.4e %1.4e\n",array_x[p],array_y[p],(double)rank); 476c4762a1bSJed Brown } 477*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"coory",NULL,NULL,(void**)&array_y)); 478*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSwarmRestoreField(dms,"coorx",NULL,NULL,(void**)&array_x)); 479c4762a1bSJed Brown fclose(fp); 480c4762a1bSJed Brown } 481*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dmcell)); 482*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dms)); 483*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree(zone)); 484c4762a1bSJed Brown PetscFunctionReturn(0); 485c4762a1bSJed Brown } 486c4762a1bSJed Brown 487c4762a1bSJed Brown int main(int argc,char **argv) 488c4762a1bSJed Brown { 489c4762a1bSJed Brown PetscErrorCode ierr; 490c4762a1bSJed Brown PetscInt test_mode = 4; 491c4762a1bSJed Brown 492c4762a1bSJed Brown ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; 493*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-test_mode",&test_mode,NULL)); 494c4762a1bSJed Brown if (test_mode == 1) { 495*5f80ce2aSJacob Faibussowitsch CHKERRQ(ex1_1()); 496c4762a1bSJed Brown } else if (test_mode == 2) { 497*5f80ce2aSJacob Faibussowitsch CHKERRQ(ex1_2()); 498c4762a1bSJed Brown } else if (test_mode == 3) { 499*5f80ce2aSJacob Faibussowitsch CHKERRQ(ex1_3()); 500c4762a1bSJed Brown } else if (test_mode == 4) { 501*5f80ce2aSJacob Faibussowitsch CHKERRQ(ex1_4()); 502c4762a1bSJed Brown } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_USER,"Unknown test_mode value, should be 1,2,3,4"); 503c4762a1bSJed Brown ierr = PetscFinalize(); 504c4762a1bSJed Brown return ierr; 505c4762a1bSJed Brown } 506c4762a1bSJed Brown 507c4762a1bSJed Brown /*TEST 508c4762a1bSJed Brown 509c4762a1bSJed Brown build: 510c4762a1bSJed Brown requires: !complex double 511c4762a1bSJed Brown 512c4762a1bSJed Brown test: 513c4762a1bSJed Brown args: -test_mode 1 514c4762a1bSJed Brown filter: grep -v atomic 515c4762a1bSJed Brown filter_output: grep -v atomic 516c4762a1bSJed Brown 517c4762a1bSJed Brown test: 518c4762a1bSJed Brown suffix: 2 519c4762a1bSJed Brown args: -test_mode 2 520c4762a1bSJed Brown filter: grep -v atomic 521c4762a1bSJed Brown filter_output: grep -v atomic 522c4762a1bSJed Brown 523c4762a1bSJed Brown test: 524c4762a1bSJed Brown suffix: 3 525c4762a1bSJed Brown args: -test_mode 3 526c4762a1bSJed Brown filter: grep -v atomic 527c4762a1bSJed Brown filter_output: grep -v atomic 528c4762a1bSJed Brown TODO: broken 529c4762a1bSJed Brown 530c4762a1bSJed Brown test: 531c4762a1bSJed Brown suffix: 4 532c4762a1bSJed Brown args: -test_mode 4 533c4762a1bSJed Brown filter: grep -v atomic 534c4762a1bSJed Brown filter_output: grep -v atomic 535c4762a1bSJed Brown 536c4762a1bSJed Brown test: 537c4762a1bSJed Brown suffix: 5 538c4762a1bSJed Brown nsize: 4 539c4762a1bSJed Brown args: -test_mode 1 540c4762a1bSJed Brown filter: grep -v atomic 541c4762a1bSJed Brown filter_output: grep -v atomic 542c4762a1bSJed Brown 543c4762a1bSJed Brown test: 544c4762a1bSJed Brown suffix: 6 545c4762a1bSJed Brown nsize: 4 546c4762a1bSJed Brown args: -test_mode 2 547c4762a1bSJed Brown filter: grep -v atomic 548c4762a1bSJed Brown filter_output: grep -v atomic 549c4762a1bSJed Brown 550c4762a1bSJed Brown test: 551c4762a1bSJed Brown suffix: 7 552c4762a1bSJed Brown nsize: 4 553c4762a1bSJed Brown args: -test_mode 3 554c4762a1bSJed Brown filter: grep -v atomic 555c4762a1bSJed Brown filter_output: grep -v atomic 556c4762a1bSJed Brown TODO: broken 557c4762a1bSJed Brown 558c4762a1bSJed Brown test: 559c4762a1bSJed Brown suffix: 8 560c4762a1bSJed Brown nsize: 4 561c4762a1bSJed Brown args: -test_mode 4 562c4762a1bSJed Brown filter: grep -v atomic 563c4762a1bSJed Brown filter_output: grep -v atomic 564c4762a1bSJed Brown 565c4762a1bSJed Brown TEST*/ 566