1c4762a1bSJed Brown static char help[] = "Tests DMSwarm\n\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown #include <petscdm.h> 4c4762a1bSJed Brown #include <petscdmda.h> 5c4762a1bSJed Brown #include <petscdmswarm.h> 6c4762a1bSJed Brown 7c4762a1bSJed Brown PETSC_EXTERN PetscErrorCode DMSwarmCollect_General(DM, PetscErrorCode (*)(DM, void *, PetscInt *, PetscInt **), size_t, void *, PetscInt *); 8c4762a1bSJed Brown PETSC_EXTERN PetscErrorCode DMSwarmCollect_DMDABoundingBox(DM, PetscInt *); 9c4762a1bSJed Brown 10d71ae5a4SJacob Faibussowitsch PetscErrorCode ex1_1(void) 11d71ae5a4SJacob Faibussowitsch { 12c4762a1bSJed Brown DM dms; 13c4762a1bSJed Brown Vec x; 14c4762a1bSJed Brown PetscMPIInt rank, size; 15c4762a1bSJed Brown PetscInt p; 16c4762a1bSJed Brown 17362febeeSStefano Zampini PetscFunctionBegin; 189566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size)); 199566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank)); 20d5b43468SJose E. Roman PetscCheck(!(size > 1) || !(size != 4), PETSC_COMM_WORLD, PETSC_ERR_SUP, "Must be run with 4 MPI ranks"); 21c4762a1bSJed Brown 229566063dSJacob Faibussowitsch PetscCall(DMCreate(PETSC_COMM_WORLD, &dms)); 239566063dSJacob Faibussowitsch PetscCall(DMSetType(dms, DMSWARM)); 246a5217c0SMatthew G. Knepley PetscCall(PetscObjectSetName((PetscObject)dms, "Particles")); 25c4762a1bSJed Brown 269566063dSJacob Faibussowitsch PetscCall(DMSwarmInitializeFieldRegister(dms)); 279566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(dms, "viscosity", 1, PETSC_REAL)); 289566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(dms, "strain", 1, PETSC_REAL)); 299566063dSJacob Faibussowitsch PetscCall(DMSwarmFinalizeFieldRegister(dms)); 309566063dSJacob Faibussowitsch PetscCall(DMSwarmSetLocalSizes(dms, 5 + rank, 4)); 319566063dSJacob Faibussowitsch PetscCall(DMView(dms, PETSC_VIEWER_STDOUT_WORLD)); 32c4762a1bSJed Brown 33c4762a1bSJed Brown { 34c4762a1bSJed Brown PetscReal *array; 359566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "viscosity", NULL, NULL, (void **)&array)); 36ad540459SPierre Jolivet for (p = 0; p < 5 + rank; p++) array[p] = 11.1 + p * 0.1 + rank * 100.0; 379566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "viscosity", NULL, NULL, (void **)&array)); 38c4762a1bSJed Brown } 39c4762a1bSJed Brown 40c4762a1bSJed Brown { 41c4762a1bSJed Brown PetscReal *array; 429566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "strain", NULL, NULL, (void **)&array)); 43ad540459SPierre Jolivet for (p = 0; p < 5 + rank; p++) array[p] = 2.0e-2 + p * 0.001 + rank * 1.0; 449566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "strain", NULL, NULL, (void **)&array)); 45c4762a1bSJed Brown } 46c4762a1bSJed Brown 479566063dSJacob Faibussowitsch PetscCall(DMSwarmCreateGlobalVectorFromField(dms, "viscosity", &x)); 489566063dSJacob Faibussowitsch PetscCall(DMSwarmDestroyGlobalVectorFromField(dms, "viscosity", &x)); 49c4762a1bSJed Brown 509566063dSJacob Faibussowitsch PetscCall(DMSwarmVectorDefineField(dms, "strain")); 519566063dSJacob Faibussowitsch PetscCall(DMCreateGlobalVector(dms, &x)); 529566063dSJacob Faibussowitsch PetscCall(VecDestroy(&x)); 53c4762a1bSJed Brown 54c4762a1bSJed Brown { 55c4762a1bSJed Brown PetscInt *rankval; 56c4762a1bSJed Brown PetscInt npoints[2], npoints_orig[2]; 57c4762a1bSJed Brown 589566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dms, &npoints_orig[0])); 599566063dSJacob Faibussowitsch PetscCall(DMSwarmGetSize(dms, &npoints_orig[1])); 609566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "DMSwarm_rank", NULL, NULL, (void **)&rankval)); 61c4762a1bSJed Brown if ((rank == 0) && (size > 1)) { 62c4762a1bSJed Brown rankval[0] = 1; 63c4762a1bSJed Brown rankval[3] = 1; 64c4762a1bSJed Brown } 65ad540459SPierre Jolivet if (rank == 3) rankval[2] = 1; 669566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "DMSwarm_rank", NULL, NULL, (void **)&rankval)); 679566063dSJacob Faibussowitsch PetscCall(DMSwarmMigrate(dms, PETSC_TRUE)); 689566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dms, &npoints[0])); 699566063dSJacob Faibussowitsch PetscCall(DMSwarmGetSize(dms, &npoints[1])); 709566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 7163a3b9bcSJacob Faibussowitsch PetscCall(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD, "rank[%d] before(%" PetscInt_FMT ",%" PetscInt_FMT ") after(%" PetscInt_FMT ",%" PetscInt_FMT ")\n", rank, npoints_orig[0], npoints_orig[1], npoints[0], npoints[1])); 729566063dSJacob Faibussowitsch PetscCall(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 739566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 74c4762a1bSJed Brown } 75c4762a1bSJed Brown { 769566063dSJacob Faibussowitsch PetscCall(DMSwarmCreateGlobalVectorFromField(dms, "viscosity", &x)); 779566063dSJacob Faibussowitsch PetscCall(VecView(x, PETSC_VIEWER_STDOUT_WORLD)); 789566063dSJacob Faibussowitsch PetscCall(DMSwarmDestroyGlobalVectorFromField(dms, "viscosity", &x)); 79c4762a1bSJed Brown } 80c4762a1bSJed Brown { 819566063dSJacob Faibussowitsch PetscCall(DMSwarmCreateGlobalVectorFromField(dms, "strain", &x)); 829566063dSJacob Faibussowitsch PetscCall(VecView(x, PETSC_VIEWER_STDOUT_WORLD)); 839566063dSJacob Faibussowitsch PetscCall(DMSwarmDestroyGlobalVectorFromField(dms, "strain", &x)); 84c4762a1bSJed Brown } 85c4762a1bSJed Brown 869566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dms)); 873ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 88c4762a1bSJed Brown } 89c4762a1bSJed Brown 90d71ae5a4SJacob Faibussowitsch PetscErrorCode ex1_2(void) 91d71ae5a4SJacob Faibussowitsch { 92c4762a1bSJed Brown DM dms; 93c4762a1bSJed Brown Vec x; 94c4762a1bSJed Brown PetscMPIInt rank, size; 95c4762a1bSJed Brown PetscInt p; 96c4762a1bSJed Brown 97362febeeSStefano Zampini PetscFunctionBegin; 989566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size)); 999566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank)); 1009566063dSJacob Faibussowitsch PetscCall(DMCreate(PETSC_COMM_WORLD, &dms)); 1019566063dSJacob Faibussowitsch PetscCall(DMSetType(dms, DMSWARM)); 1026a5217c0SMatthew G. Knepley PetscCall(PetscObjectSetName((PetscObject)dms, "Particles")); 1039566063dSJacob Faibussowitsch PetscCall(DMSwarmInitializeFieldRegister(dms)); 104c4762a1bSJed Brown 1059566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(dms, "viscosity", 1, PETSC_REAL)); 1069566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(dms, "strain", 1, PETSC_REAL)); 1079566063dSJacob Faibussowitsch PetscCall(DMSwarmFinalizeFieldRegister(dms)); 1089566063dSJacob Faibussowitsch PetscCall(DMSwarmSetLocalSizes(dms, 5 + rank, 4)); 1099566063dSJacob Faibussowitsch PetscCall(DMView(dms, PETSC_VIEWER_STDOUT_WORLD)); 110c4762a1bSJed Brown { 111c4762a1bSJed Brown PetscReal *array; 1129566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "viscosity", NULL, NULL, (void **)&array)); 113ad540459SPierre Jolivet for (p = 0; p < 5 + rank; p++) array[p] = 11.1 + p * 0.1 + rank * 100.0; 1149566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "viscosity", NULL, NULL, (void **)&array)); 115c4762a1bSJed Brown } 116c4762a1bSJed Brown { 117c4762a1bSJed Brown PetscReal *array; 1189566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "strain", NULL, NULL, (void **)&array)); 119ad540459SPierre Jolivet for (p = 0; p < 5 + rank; p++) array[p] = 2.0e-2 + p * 0.001 + rank * 1.0; 1209566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "strain", NULL, NULL, (void **)&array)); 121c4762a1bSJed Brown } 122c4762a1bSJed Brown { 123c4762a1bSJed Brown PetscInt *rankval; 124c4762a1bSJed Brown PetscInt npoints[2], npoints_orig[2]; 125c4762a1bSJed Brown 1269566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dms, &npoints_orig[0])); 1279566063dSJacob Faibussowitsch PetscCall(DMSwarmGetSize(dms, &npoints_orig[1])); 1289566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 12963a3b9bcSJacob Faibussowitsch PetscCall(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD, "rank[%d] before(%" PetscInt_FMT ",%" PetscInt_FMT ")\n", rank, npoints_orig[0], npoints_orig[1])); 1309566063dSJacob Faibussowitsch PetscCall(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 1319566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 132c4762a1bSJed Brown 1339566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "DMSwarm_rank", NULL, NULL, (void **)&rankval)); 134c4762a1bSJed Brown 135ad540459SPierre Jolivet if (rank == 1) rankval[0] = -1; 136ad540459SPierre Jolivet if (rank == 2) rankval[1] = -1; 137c4762a1bSJed Brown if (rank == 3) { 138c4762a1bSJed Brown rankval[3] = -1; 139c4762a1bSJed Brown rankval[4] = -1; 140c4762a1bSJed Brown } 1419566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "DMSwarm_rank", NULL, NULL, (void **)&rankval)); 1429566063dSJacob Faibussowitsch PetscCall(DMSwarmCollectViewCreate(dms)); 1439566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dms, &npoints[0])); 1449566063dSJacob Faibussowitsch PetscCall(DMSwarmGetSize(dms, &npoints[1])); 1459566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 14663a3b9bcSJacob Faibussowitsch PetscCall(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD, "rank[%d] after(%" PetscInt_FMT ",%" PetscInt_FMT ")\n", rank, npoints[0], npoints[1])); 1479566063dSJacob Faibussowitsch PetscCall(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 1489566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 149c4762a1bSJed Brown 1509566063dSJacob Faibussowitsch PetscCall(DMSwarmCreateGlobalVectorFromField(dms, "viscosity", &x)); 1519566063dSJacob Faibussowitsch PetscCall(VecView(x, PETSC_VIEWER_STDOUT_WORLD)); 1529566063dSJacob Faibussowitsch PetscCall(DMSwarmDestroyGlobalVectorFromField(dms, "viscosity", &x)); 153c4762a1bSJed Brown 1549566063dSJacob Faibussowitsch PetscCall(DMSwarmCollectViewDestroy(dms)); 1559566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dms, &npoints[0])); 1569566063dSJacob Faibussowitsch PetscCall(DMSwarmGetSize(dms, &npoints[1])); 1579566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 15863a3b9bcSJacob Faibussowitsch PetscCall(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD, "rank[%d] after_v(%" PetscInt_FMT ",%" PetscInt_FMT ")\n", rank, npoints[0], npoints[1])); 1599566063dSJacob Faibussowitsch PetscCall(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 1609566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 161c4762a1bSJed Brown 1629566063dSJacob Faibussowitsch PetscCall(DMSwarmCreateGlobalVectorFromField(dms, "viscosity", &x)); 1639566063dSJacob Faibussowitsch PetscCall(VecView(x, PETSC_VIEWER_STDOUT_WORLD)); 1649566063dSJacob Faibussowitsch PetscCall(DMSwarmDestroyGlobalVectorFromField(dms, "viscosity", &x)); 165c4762a1bSJed Brown } 1669566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dms)); 1673ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 168c4762a1bSJed Brown } 169c4762a1bSJed Brown 170c4762a1bSJed Brown /* 171c4762a1bSJed Brown splot "c-rank0.gp","c-rank1.gp","c-rank2.gp","c-rank3.gp" 172c4762a1bSJed Brown */ 173d71ae5a4SJacob Faibussowitsch PetscErrorCode ex1_3(void) 174d71ae5a4SJacob Faibussowitsch { 175c4762a1bSJed Brown DM dms; 176c4762a1bSJed Brown PetscMPIInt rank, size; 177c4762a1bSJed Brown PetscInt is, js, ni, nj, overlap; 178c4762a1bSJed Brown DM dmcell; 179c4762a1bSJed Brown 180362febeeSStefano Zampini PetscFunctionBegin; 1819566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size)); 1829566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank)); 183c4762a1bSJed Brown overlap = 2; 1849566063dSJacob Faibussowitsch PetscCall(DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DMDA_STENCIL_BOX, 13, 13, PETSC_DECIDE, PETSC_DECIDE, 1, overlap, NULL, NULL, &dmcell)); 1859566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(dmcell)); 1869566063dSJacob Faibussowitsch PetscCall(DMSetUp(dmcell)); 1879566063dSJacob Faibussowitsch PetscCall(DMDASetUniformCoordinates(dmcell, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0)); 1889566063dSJacob Faibussowitsch PetscCall(DMDAGetCorners(dmcell, &is, &js, NULL, &ni, &nj, NULL)); 1899566063dSJacob Faibussowitsch PetscCall(DMCreate(PETSC_COMM_WORLD, &dms)); 1909566063dSJacob Faibussowitsch PetscCall(DMSetType(dms, DMSWARM)); 1916a5217c0SMatthew G. Knepley PetscCall(PetscObjectSetName((PetscObject)dms, "Particles")); 1929566063dSJacob Faibussowitsch PetscCall(DMSwarmSetCellDM(dms, dmcell)); 193c4762a1bSJed Brown 194c4762a1bSJed Brown /* load in data types */ 1959566063dSJacob Faibussowitsch PetscCall(DMSwarmInitializeFieldRegister(dms)); 1969566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(dms, "viscosity", 1, PETSC_REAL)); 1979566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(dms, "coorx", 1, PETSC_REAL)); 1989566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(dms, "coory", 1, PETSC_REAL)); 1999566063dSJacob Faibussowitsch PetscCall(DMSwarmFinalizeFieldRegister(dms)); 2009566063dSJacob Faibussowitsch PetscCall(DMSwarmSetLocalSizes(dms, ni * nj * 4, 4)); 2019566063dSJacob Faibussowitsch PetscCall(DMView(dms, PETSC_VIEWER_STDOUT_WORLD)); 202c4762a1bSJed Brown 203c4762a1bSJed Brown /* set values within the swarm */ 204c4762a1bSJed Brown { 205c4762a1bSJed Brown PetscReal *array_x, *array_y; 206c4762a1bSJed Brown PetscInt npoints, i, j, cnt; 207c4762a1bSJed Brown DMDACoor2d **LA_coor; 208c4762a1bSJed Brown Vec coor; 209c4762a1bSJed Brown DM dmcellcdm; 210c4762a1bSJed Brown 2119566063dSJacob Faibussowitsch PetscCall(DMGetCoordinateDM(dmcell, &dmcellcdm)); 2129566063dSJacob Faibussowitsch PetscCall(DMGetCoordinates(dmcell, &coor)); 2139566063dSJacob Faibussowitsch PetscCall(DMDAVecGetArray(dmcellcdm, coor, &LA_coor)); 2149566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dms, &npoints)); 2159566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "coorx", NULL, NULL, (void **)&array_x)); 2169566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "coory", NULL, NULL, (void **)&array_y)); 217c4762a1bSJed Brown cnt = 0; 218c4762a1bSJed Brown for (j = js; j < js + nj; j++) { 219c4762a1bSJed Brown for (i = is; i < is + ni; i++) { 220c4762a1bSJed Brown PetscReal xp, yp; 221c4762a1bSJed Brown xp = PetscRealPart(LA_coor[j][i].x); 222c4762a1bSJed Brown yp = PetscRealPart(LA_coor[j][i].y); 2239371c9d4SSatish Balay array_x[4 * cnt + 0] = xp - 0.05; 224ad540459SPierre Jolivet if (array_x[4 * cnt + 0] < -1.0) array_x[4 * cnt + 0] = -1.0 + 1.0e-12; 2259371c9d4SSatish Balay array_x[4 * cnt + 1] = xp + 0.05; 226ad540459SPierre Jolivet if (array_x[4 * cnt + 1] > 1.0) array_x[4 * cnt + 1] = 1.0 - 1.0e-12; 2279371c9d4SSatish Balay array_x[4 * cnt + 2] = xp - 0.05; 228ad540459SPierre Jolivet if (array_x[4 * cnt + 2] < -1.0) array_x[4 * cnt + 2] = -1.0 + 1.0e-12; 2299371c9d4SSatish Balay array_x[4 * cnt + 3] = xp + 0.05; 230ad540459SPierre Jolivet if (array_x[4 * cnt + 3] > 1.0) array_x[4 * cnt + 3] = 1.0 - 1.0e-12; 231c4762a1bSJed Brown 2329371c9d4SSatish Balay array_y[4 * cnt + 0] = yp - 0.05; 233ad540459SPierre Jolivet if (array_y[4 * cnt + 0] < -1.0) array_y[4 * cnt + 0] = -1.0 + 1.0e-12; 2349371c9d4SSatish Balay array_y[4 * cnt + 1] = yp - 0.05; 235ad540459SPierre Jolivet if (array_y[4 * cnt + 1] < -1.0) array_y[4 * cnt + 1] = -1.0 + 1.0e-12; 2369371c9d4SSatish Balay array_y[4 * cnt + 2] = yp + 0.05; 237ad540459SPierre Jolivet if (array_y[4 * cnt + 2] > 1.0) array_y[4 * cnt + 2] = 1.0 - 1.0e-12; 2389371c9d4SSatish Balay array_y[4 * cnt + 3] = yp + 0.05; 239ad540459SPierre Jolivet if (array_y[4 * cnt + 3] > 1.0) array_y[4 * cnt + 3] = 1.0 - 1.0e-12; 240c4762a1bSJed Brown cnt++; 241c4762a1bSJed Brown } 242c4762a1bSJed Brown } 2439566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "coory", NULL, NULL, (void **)&array_y)); 2449566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "coorx", NULL, NULL, (void **)&array_x)); 2459566063dSJacob Faibussowitsch PetscCall(DMDAVecRestoreArray(dmcellcdm, coor, &LA_coor)); 246c4762a1bSJed Brown } 247c4762a1bSJed Brown { 248c4762a1bSJed Brown PetscInt npoints[2], npoints_orig[2], ng; 249c4762a1bSJed Brown 2509566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dms, &npoints_orig[0])); 2519566063dSJacob Faibussowitsch PetscCall(DMSwarmGetSize(dms, &npoints_orig[1])); 2529566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 25363a3b9bcSJacob Faibussowitsch PetscCall(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD, "rank[%d] before(%" PetscInt_FMT ",%" PetscInt_FMT ")\n", rank, npoints_orig[0], npoints_orig[1])); 2549566063dSJacob Faibussowitsch PetscCall(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 2559566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 2569566063dSJacob Faibussowitsch PetscCall(DMSwarmCollect_DMDABoundingBox(dms, &ng)); 257c4762a1bSJed Brown 2589566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dms, &npoints[0])); 2599566063dSJacob Faibussowitsch PetscCall(DMSwarmGetSize(dms, &npoints[1])); 2609566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 26163a3b9bcSJacob Faibussowitsch PetscCall(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD, "rank[%d] after(%" PetscInt_FMT ",%" PetscInt_FMT ")\n", rank, npoints[0], npoints[1])); 2629566063dSJacob Faibussowitsch PetscCall(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 2639566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 264c4762a1bSJed Brown } 265c4762a1bSJed Brown { 266c4762a1bSJed Brown PetscReal *array_x, *array_y; 267c4762a1bSJed Brown PetscInt npoints, p; 268c4762a1bSJed Brown FILE *fp = NULL; 269c4762a1bSJed Brown char name[PETSC_MAX_PATH_LEN]; 270c4762a1bSJed Brown 2719566063dSJacob Faibussowitsch PetscCall(PetscSNPrintf(name, PETSC_MAX_PATH_LEN - 1, "c-rank%d.gp", rank)); 272c4762a1bSJed Brown fp = fopen(name, "w"); 27328b400f6SJacob Faibussowitsch PetscCheck(fp, PETSC_COMM_SELF, PETSC_ERR_FILE_OPEN, "Cannot open file %s", name); 2749566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dms, &npoints)); 2759566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "coorx", NULL, NULL, (void **)&array_x)); 2769566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "coory", NULL, NULL, (void **)&array_y)); 277ad540459SPierre Jolivet for (p = 0; p < npoints; p++) fprintf(fp, "%+1.4e %+1.4e %1.4e\n", array_x[p], array_y[p], (double)rank); 2789566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "coory", NULL, NULL, (void **)&array_y)); 2799566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "coorx", NULL, NULL, (void **)&array_x)); 280c4762a1bSJed Brown fclose(fp); 281c4762a1bSJed Brown } 2829566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dmcell)); 2839566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dms)); 2843ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 285c4762a1bSJed Brown } 286c4762a1bSJed Brown 287c4762a1bSJed Brown typedef struct { 288c4762a1bSJed Brown PetscReal cx[2]; 289c4762a1bSJed Brown PetscReal radius; 290c4762a1bSJed Brown } CollectZoneCtx; 291c4762a1bSJed Brown 292d71ae5a4SJacob Faibussowitsch PetscErrorCode collect_zone(DM dm, void *ctx, PetscInt *nfound, PetscInt **foundlist) 293d71ae5a4SJacob Faibussowitsch { 294c4762a1bSJed Brown CollectZoneCtx *zone = (CollectZoneCtx *)ctx; 295c4762a1bSJed Brown PetscInt p, npoints; 296c4762a1bSJed Brown PetscReal *array_x, *array_y, r2; 297c4762a1bSJed Brown PetscInt p2collect, *plist; 298c4762a1bSJed Brown PetscMPIInt rank; 299c4762a1bSJed Brown 300362febeeSStefano Zampini PetscFunctionBegin; 3019566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank)); 3029566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dm, &npoints)); 3039566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dm, "coorx", NULL, NULL, (void **)&array_x)); 3049566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dm, "coory", NULL, NULL, (void **)&array_y)); 305c4762a1bSJed Brown 306c4762a1bSJed Brown r2 = zone->radius * zone->radius; 307c4762a1bSJed Brown p2collect = 0; 308c4762a1bSJed Brown for (p = 0; p < npoints; p++) { 309c4762a1bSJed Brown PetscReal sep2; 310c4762a1bSJed Brown 311c4762a1bSJed Brown sep2 = (array_x[p] - zone->cx[0]) * (array_x[p] - zone->cx[0]); 312c4762a1bSJed Brown sep2 += (array_y[p] - zone->cx[1]) * (array_y[p] - zone->cx[1]); 313ad540459SPierre Jolivet if (sep2 < r2) p2collect++; 314c4762a1bSJed Brown } 315c4762a1bSJed Brown 3169566063dSJacob Faibussowitsch PetscCall(PetscMalloc1(p2collect + 1, &plist)); 317c4762a1bSJed Brown p2collect = 0; 318c4762a1bSJed Brown for (p = 0; p < npoints; p++) { 319c4762a1bSJed Brown PetscReal sep2; 320c4762a1bSJed Brown 321c4762a1bSJed Brown sep2 = (array_x[p] - zone->cx[0]) * (array_x[p] - zone->cx[0]); 322c4762a1bSJed Brown sep2 += (array_y[p] - zone->cx[1]) * (array_y[p] - zone->cx[1]); 323c4762a1bSJed Brown if (sep2 < r2) { 324c4762a1bSJed Brown plist[p2collect] = p; 325c4762a1bSJed Brown p2collect++; 326c4762a1bSJed Brown } 327c4762a1bSJed Brown } 3289566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dm, "coory", NULL, NULL, (void **)&array_y)); 3299566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dm, "coorx", NULL, NULL, (void **)&array_x)); 330c4762a1bSJed Brown 331c4762a1bSJed Brown *nfound = p2collect; 332c4762a1bSJed Brown *foundlist = plist; 3333ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 334c4762a1bSJed Brown } 335c4762a1bSJed Brown 336d71ae5a4SJacob Faibussowitsch PetscErrorCode ex1_4(void) 337d71ae5a4SJacob Faibussowitsch { 338c4762a1bSJed Brown DM dms; 339c4762a1bSJed Brown PetscMPIInt rank, size; 340c4762a1bSJed Brown PetscInt is, js, ni, nj, overlap, nn; 341c4762a1bSJed Brown DM dmcell; 342c4762a1bSJed Brown CollectZoneCtx *zone; 343c4762a1bSJed Brown PetscReal dx; 344c4762a1bSJed Brown 345362febeeSStefano Zampini PetscFunctionBegin; 3469566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size)); 3479566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank)); 348c4762a1bSJed Brown nn = 101; 349c4762a1bSJed Brown dx = 2.0 / (PetscReal)(nn - 1); 350c4762a1bSJed Brown overlap = 0; 3519566063dSJacob Faibussowitsch PetscCall(DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DMDA_STENCIL_BOX, nn, nn, PETSC_DECIDE, PETSC_DECIDE, 1, overlap, NULL, NULL, &dmcell)); 3529566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(dmcell)); 3539566063dSJacob Faibussowitsch PetscCall(DMSetUp(dmcell)); 3549566063dSJacob Faibussowitsch PetscCall(DMDASetUniformCoordinates(dmcell, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0)); 3559566063dSJacob Faibussowitsch PetscCall(DMDAGetCorners(dmcell, &is, &js, NULL, &ni, &nj, NULL)); 3569566063dSJacob Faibussowitsch PetscCall(DMCreate(PETSC_COMM_WORLD, &dms)); 3579566063dSJacob Faibussowitsch PetscCall(DMSetType(dms, DMSWARM)); 3586a5217c0SMatthew G. Knepley PetscCall(PetscObjectSetName((PetscObject)dms, "Particles")); 359c4762a1bSJed Brown 360c4762a1bSJed Brown /* load in data types */ 3619566063dSJacob Faibussowitsch PetscCall(DMSwarmInitializeFieldRegister(dms)); 3629566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(dms, "viscosity", 1, PETSC_REAL)); 3639566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(dms, "coorx", 1, PETSC_REAL)); 3649566063dSJacob Faibussowitsch PetscCall(DMSwarmRegisterPetscDatatypeField(dms, "coory", 1, PETSC_REAL)); 3659566063dSJacob Faibussowitsch PetscCall(DMSwarmFinalizeFieldRegister(dms)); 3669566063dSJacob Faibussowitsch PetscCall(DMSwarmSetLocalSizes(dms, ni * nj * 4, 4)); 3679566063dSJacob Faibussowitsch PetscCall(DMView(dms, PETSC_VIEWER_STDOUT_WORLD)); 368c4762a1bSJed Brown 369c4762a1bSJed Brown /* set values within the swarm */ 370c4762a1bSJed Brown { 371c4762a1bSJed Brown PetscReal *array_x, *array_y; 372c4762a1bSJed Brown PetscInt npoints, i, j, cnt; 373c4762a1bSJed Brown DMDACoor2d **LA_coor; 374c4762a1bSJed Brown Vec coor; 375c4762a1bSJed Brown DM dmcellcdm; 376c4762a1bSJed Brown 3779566063dSJacob Faibussowitsch PetscCall(DMGetCoordinateDM(dmcell, &dmcellcdm)); 3789566063dSJacob Faibussowitsch PetscCall(DMGetCoordinates(dmcell, &coor)); 3799566063dSJacob Faibussowitsch PetscCall(DMDAVecGetArray(dmcellcdm, coor, &LA_coor)); 3809566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dms, &npoints)); 3819566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "coorx", NULL, NULL, (void **)&array_x)); 3829566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "coory", NULL, NULL, (void **)&array_y)); 383c4762a1bSJed Brown cnt = 0; 384c4762a1bSJed Brown for (j = js; j < js + nj; j++) { 385c4762a1bSJed Brown for (i = is; i < is + ni; i++) { 386c4762a1bSJed Brown PetscReal xp, yp; 387c4762a1bSJed Brown 388c4762a1bSJed Brown xp = PetscRealPart(LA_coor[j][i].x); 389c4762a1bSJed Brown yp = PetscRealPart(LA_coor[j][i].y); 390ad540459SPierre Jolivet 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;*/ 391c4762a1bSJed 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; }*/ 392ad540459SPierre Jolivet 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;*/ 393c4762a1bSJed 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; }*/ 394ad540459SPierre Jolivet 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;*/ 395ad540459SPierre Jolivet 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;*/ 396c4762a1bSJed 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; }*/ 397c4762a1bSJed 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; }*/ 398c4762a1bSJed Brown cnt++; 399c4762a1bSJed Brown } 400c4762a1bSJed Brown } 4019566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "coory", NULL, NULL, (void **)&array_y)); 4029566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "coorx", NULL, NULL, (void **)&array_x)); 4039566063dSJacob Faibussowitsch PetscCall(DMDAVecRestoreArray(dmcellcdm, coor, &LA_coor)); 404c4762a1bSJed Brown } 4059566063dSJacob Faibussowitsch PetscCall(PetscMalloc1(1, &zone)); 406c4762a1bSJed Brown if (size == 4) { 407c4762a1bSJed Brown if (rank == 0) { 408c4762a1bSJed Brown zone->cx[0] = 0.5; 409c4762a1bSJed Brown zone->cx[1] = 0.5; 410c4762a1bSJed Brown zone->radius = 0.3; 411c4762a1bSJed Brown } 412c4762a1bSJed Brown if (rank == 1) { 413c4762a1bSJed Brown zone->cx[0] = -0.5; 414c4762a1bSJed Brown zone->cx[1] = 0.5; 415c4762a1bSJed Brown zone->radius = 0.25; 416c4762a1bSJed Brown } 417c4762a1bSJed Brown if (rank == 2) { 418c4762a1bSJed Brown zone->cx[0] = 0.5; 419c4762a1bSJed Brown zone->cx[1] = -0.5; 420c4762a1bSJed Brown zone->radius = 0.2; 421c4762a1bSJed Brown } 422c4762a1bSJed Brown if (rank == 3) { 423c4762a1bSJed Brown zone->cx[0] = -0.5; 424c4762a1bSJed Brown zone->cx[1] = -0.5; 425c4762a1bSJed Brown zone->radius = 0.1; 426c4762a1bSJed Brown } 427c4762a1bSJed Brown } else { 428c4762a1bSJed Brown if (rank == 0) { 429c4762a1bSJed Brown zone->cx[0] = 0.5; 430c4762a1bSJed Brown zone->cx[1] = 0.5; 431c4762a1bSJed Brown zone->radius = 0.8; 432c4762a1bSJed Brown } else { 433c4762a1bSJed Brown zone->cx[0] = 10.0; 434c4762a1bSJed Brown zone->cx[1] = 10.0; 435c4762a1bSJed Brown zone->radius = 0.0; 436c4762a1bSJed Brown } 437c4762a1bSJed Brown } 438c4762a1bSJed Brown { 439c4762a1bSJed Brown PetscInt npoints[2], npoints_orig[2], ng; 440c4762a1bSJed Brown 4419566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dms, &npoints_orig[0])); 4429566063dSJacob Faibussowitsch PetscCall(DMSwarmGetSize(dms, &npoints_orig[1])); 4439566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 44463a3b9bcSJacob Faibussowitsch PetscCall(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD, "rank[%d] before(%" PetscInt_FMT ",%" PetscInt_FMT ")\n", rank, npoints_orig[0], npoints_orig[1])); 4459566063dSJacob Faibussowitsch PetscCall(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 4469566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 4479566063dSJacob Faibussowitsch PetscCall(DMSwarmCollect_General(dms, collect_zone, sizeof(CollectZoneCtx), zone, &ng)); 4489566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dms, &npoints[0])); 4499566063dSJacob Faibussowitsch PetscCall(DMSwarmGetSize(dms, &npoints[1])); 4509566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 45163a3b9bcSJacob Faibussowitsch PetscCall(PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD, "rank[%d] after(%" PetscInt_FMT ",%" PetscInt_FMT ")\n", rank, npoints[0], npoints[1])); 4529566063dSJacob Faibussowitsch PetscCall(PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD)); 4539566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD)); 454c4762a1bSJed Brown } 455c4762a1bSJed Brown { 456c4762a1bSJed Brown PetscReal *array_x, *array_y; 457c4762a1bSJed Brown PetscInt npoints, p; 458c4762a1bSJed Brown FILE *fp = NULL; 459c4762a1bSJed Brown char name[PETSC_MAX_PATH_LEN]; 460c4762a1bSJed Brown 4619566063dSJacob Faibussowitsch PetscCall(PetscSNPrintf(name, PETSC_MAX_PATH_LEN - 1, "c-rank%d.gp", rank)); 462c4762a1bSJed Brown fp = fopen(name, "w"); 46328b400f6SJacob Faibussowitsch PetscCheck(fp, PETSC_COMM_SELF, PETSC_ERR_FILE_OPEN, "Cannot open file %s", name); 4649566063dSJacob Faibussowitsch PetscCall(DMSwarmGetLocalSize(dms, &npoints)); 4659566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "coorx", NULL, NULL, (void **)&array_x)); 4669566063dSJacob Faibussowitsch PetscCall(DMSwarmGetField(dms, "coory", NULL, NULL, (void **)&array_y)); 467ad540459SPierre Jolivet for (p = 0; p < npoints; p++) fprintf(fp, "%+1.4e %+1.4e %1.4e\n", array_x[p], array_y[p], (double)rank); 4689566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "coory", NULL, NULL, (void **)&array_y)); 4699566063dSJacob Faibussowitsch PetscCall(DMSwarmRestoreField(dms, "coorx", NULL, NULL, (void **)&array_x)); 470c4762a1bSJed Brown fclose(fp); 471c4762a1bSJed Brown } 4729566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dmcell)); 4739566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dms)); 4749566063dSJacob Faibussowitsch PetscCall(PetscFree(zone)); 4753ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 476c4762a1bSJed Brown } 477c4762a1bSJed Brown 478d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv) 479d71ae5a4SJacob Faibussowitsch { 480c4762a1bSJed Brown PetscInt test_mode = 4; 481c4762a1bSJed Brown 482327415f7SBarry Smith PetscFunctionBeginUser; 483*c8025a54SPierre Jolivet PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 4849566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetInt(NULL, NULL, "-test_mode", &test_mode, NULL)); 485c4762a1bSJed Brown if (test_mode == 1) { 4869566063dSJacob Faibussowitsch PetscCall(ex1_1()); 487c4762a1bSJed Brown } else if (test_mode == 2) { 4889566063dSJacob Faibussowitsch PetscCall(ex1_2()); 489c4762a1bSJed Brown } else if (test_mode == 3) { 4909566063dSJacob Faibussowitsch PetscCall(ex1_3()); 491c4762a1bSJed Brown } else if (test_mode == 4) { 4929566063dSJacob Faibussowitsch PetscCall(ex1_4()); 493c4762a1bSJed Brown } else SETERRQ(PETSC_COMM_SELF, PETSC_ERR_USER, "Unknown test_mode value, should be 1,2,3,4"); 4949566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 495b122ec5aSJacob Faibussowitsch return 0; 496c4762a1bSJed Brown } 497c4762a1bSJed Brown 498c4762a1bSJed Brown /*TEST 499c4762a1bSJed Brown 500c4762a1bSJed Brown build: 501c4762a1bSJed Brown requires: !complex double 502c4762a1bSJed Brown 503c4762a1bSJed Brown test: 504c4762a1bSJed Brown args: -test_mode 1 505c4762a1bSJed Brown filter: grep -v atomic 506c4762a1bSJed Brown filter_output: grep -v atomic 507c4762a1bSJed Brown 508c4762a1bSJed Brown test: 509c4762a1bSJed Brown suffix: 2 510c4762a1bSJed Brown args: -test_mode 2 511c4762a1bSJed Brown filter: grep -v atomic 512c4762a1bSJed Brown filter_output: grep -v atomic 513c4762a1bSJed Brown 514c4762a1bSJed Brown test: 515c4762a1bSJed Brown suffix: 3 516c4762a1bSJed Brown args: -test_mode 3 517c4762a1bSJed Brown filter: grep -v atomic 518c4762a1bSJed Brown filter_output: grep -v atomic 519c4762a1bSJed Brown TODO: broken 520c4762a1bSJed Brown 521c4762a1bSJed Brown test: 522c4762a1bSJed Brown suffix: 4 523c4762a1bSJed Brown args: -test_mode 4 524c4762a1bSJed Brown filter: grep -v atomic 525c4762a1bSJed Brown filter_output: grep -v atomic 526c4762a1bSJed Brown 527c4762a1bSJed Brown test: 528c4762a1bSJed Brown suffix: 5 529c4762a1bSJed Brown nsize: 4 530c4762a1bSJed Brown args: -test_mode 1 531c4762a1bSJed Brown filter: grep -v atomic 532c4762a1bSJed Brown filter_output: grep -v atomic 533c4762a1bSJed Brown 534c4762a1bSJed Brown test: 535c4762a1bSJed Brown suffix: 6 536c4762a1bSJed Brown nsize: 4 537c4762a1bSJed Brown args: -test_mode 2 538c4762a1bSJed Brown filter: grep -v atomic 539c4762a1bSJed Brown filter_output: grep -v atomic 540c4762a1bSJed Brown 541c4762a1bSJed Brown test: 542c4762a1bSJed Brown suffix: 7 543c4762a1bSJed Brown nsize: 4 544c4762a1bSJed Brown args: -test_mode 3 545c4762a1bSJed Brown filter: grep -v atomic 546c4762a1bSJed Brown filter_output: grep -v atomic 547c4762a1bSJed Brown TODO: broken 548c4762a1bSJed Brown 549c4762a1bSJed Brown test: 550c4762a1bSJed Brown suffix: 8 551c4762a1bSJed Brown nsize: 4 552c4762a1bSJed Brown args: -test_mode 4 553c4762a1bSJed Brown filter: grep -v atomic 554c4762a1bSJed Brown filter_output: grep -v atomic 555c4762a1bSJed Brown 556c4762a1bSJed Brown TEST*/ 557