diff --git a/tests/lbpm_random_pp.cpp b/tests/lbpm_random_pp.cpp index 52b4f8f1..53c18eb1 100644 --- a/tests/lbpm_random_pp.cpp +++ b/tests/lbpm_random_pp.cpp @@ -12,93 +12,6 @@ #include #include -inline void GenerateResidual(char *ID, int Nx, int Ny, int Nz, double Saturation) -{ - //....................................................................... - int i,j,k,n,Number,N; - int x,y,z,ii,jj,kk; - int sizeX,sizeY,sizeZ; - int *SizeX, *SizeY, *SizeZ; - -#ifdef NORANDOM - srand(10009); -#else - srand(time(NULL)); -#endif -// float bin; - //....................................................................... - N = Nx*Ny*Nz; - - int bin, binCount; - ifstream Dist("BlobSize.in"); - Dist >> binCount; -// printf("Number of blob sizes: %i \n",binCount); - SizeX = new int [binCount]; - SizeY = new int [binCount]; - SizeZ = new int [binCount]; - for (bin=0; bin> SizeX[bin]; - Dist >> SizeY[bin]; - Dist >> SizeZ[bin]; - // printf("Blob %i dimension: %i x %i x %i \n",bin, SizeX[bin], SizeY[bin], SizeZ[bin]); - } - Dist.close(); - //....................................................................... -// cout << "Generating blocks... " << endl; - // Count for the total number of oil nodes - int count = 0; - // Count the total number of non-solid nodes - int total = 0; - for (i=0;i> binCount; + int *SizeX, *SizeY, *SizeZ; +// printf("Number of blob sizes: %i \n",binCount); + SizeX = new int [binCount]; + SizeY = new int [binCount]; + SizeZ = new int [binCount]; + for (bin=0; bin> SizeX[bin]; + Dist >> SizeY[bin]; + Dist >> SizeZ[bin]; + // printf("Blob %i dimension: %i x %i x %i \n",bin, SizeX[bin], SizeY[bin], SizeZ[bin]); + } + Dist.close(); // Generate the residual NWP if (rank==0) printf("Initializing with NWP saturation = %f \n",Saturation); - GenerateResidual(id,nx,ny,nz,Saturation); + // GenerateResidual(id,nx,ny,nz,Saturation); + + int x,y,z; + int sizeX,sizeY,sizeZ; + int ii,jj,kk; + int Nx = nx; + int Ny = ny; + int Nz = nz; + float sat = 0.f; + int Number = 0; // number of features + while (sat < Saturation){ + if (rank==0){ + Number++; + // Randomly generate a point in the domain + x = (Nx-2)*nprocx*float(rand())/float(RAND_MAX); + y = (Ny-2)*nprocy*float(rand())/float(RAND_MAX); + z = (Nz-2)*nprocz*float(rand())/float(RAND_MAX); + + bin = int(floor(binCount*float(rand())/float(RAND_MAX))); + sizeX = SizeX[bin]; + sizeY = SizeY[bin]; + sizeZ = SizeZ[bin]; + } + MPI_Bcast(&x,1,MPI_INT,0,MPI_COMM_WORLD); + MPI_Bcast(&y,1,MPI_INT,0,MPI_COMM_WORLD); + MPI_Bcast(&z,1,MPI_INT,0,MPI_COMM_WORLD); + MPI_Bcast(&sizeX,1,MPI_INT,0,MPI_COMM_WORLD); + MPI_Bcast(&sizeY,1,MPI_INT,0,MPI_COMM_WORLD); + MPI_Bcast(&sizeZ,1,MPI_INT,0,MPI_COMM_WORLD); + + //if (rank==0) printf("Broadcast block at %i,%i,%i \n",x,y,z); + + for (k=z;knprocx*(Nx-2)) ii-=nprocx*(Nx-2); + if (jj>nprocy*(Ny-2)) jj-=nprocy*(Ny-2); + if (kk>nprocz*(Nz-2)) kk-=nprocz*(Nz-2); + + // Check if this is in the subdomain + if (ii < (iproc+1)*(Nx-2) && jj < (jproc+1)*(Ny-2) && kk < (kproc+1)*(Nz-2) && + ii > iproc*(Nx-2) && jj > jproc*(Ny-2) && kk > kproc*(Nz-2) ){ + + // Map from global to local coordinates + ii -= iproc*(Nx-2); + jj -= jproc*(Ny-2); + kk -= kproc*(Nz-2); + + n = kk*Nx*Ny+jj*Nx+ii; + + if (id[n] == 2){ + id[n] = 1; + //count++; + } + + } + } + } + } + count = 0; + for (int k=1; k