void LibIO_Demo_FPrintf_FScanf(void) { u32 printCharCount; LibFileIoClass ioFile("Test_DeleteMe.txt", "w+b"); ioFile.FileOpen(); ASSERT_CHK( rc, LibIO_FPrintf(printCharCount, ioFile.fp, "123 %d %d\n", 33, 44) ); DUMPD(printCharCount); rewind(ioFile.fp); char tempStr[10]; u32 scanCount; ASSERT_CHK( rc, LibIO_FScanf(scanCount, ioFile.fp, "%s", tempStr) ); DUMPD(scanCount); DUMPS(tempStr); ASSERT_CHK( rc, LibIO_FScanf(scanCount, ioFile.fp, "%s", tempStr) ); DUMPD(scanCount); DUMPS(tempStr); ASSERT_CHK( rc, LibIO_FScanf(scanCount, ioFile.fp, "%s", tempStr) ); DUMPD(scanCount); DUMPS(tempStr); rc = LibIO_FScanf(scanCount, ioFile.fp, "%s", tempStr); LibError_PrintErrorMessage(rc); }
void SharePlugin::shareUrl(const QUrl& url) { NetworkPackage package(PACKAGE_TYPE_SHARE_REQUEST); if(url.isLocalFile()) { QSharedPointer<QIODevice> ioFile(new QFile(url.toLocalFile())); package.setPayload(ioFile, ioFile->size()); package.set<QString>(QStringLiteral("filename"), QUrl(url).fileName()); } else { package.set<QString>(QStringLiteral("url"), url.toString()); } sendPackage(package); }
int main(int argc, char *argv[]) { if (argc != 2) { cout << "Usage: setup outfilename" << endl; return(-1); } string filename = argv[1]; vector<Cparticle> ps; Cparticle p; cout << "Creating box with sides: rmax = ["<<RMAX[0]<<" "<<RMAX[1]<<"] rmin = ["<<RMIN[0]<<" "<<RMIN[1]<<"]"<<endl; cout << "Reynolds Number = "<<REYNOLDS_NUMBER<<endl; cout << "Density = "<<DENS<<endl; cout << "number of particles on side = "<<NX<<endl; cout << "alpha = "<<ALPHA<<endl; cout << "viscosity = "<<VISCOSITY<<endl; cout << "maxtime = "<<MAXTIME<<endl; cout << "term vel (3d) is "<<(2.0/9.0)*(DEM_DENS-DENS)*9.81*pow(DEM_RADIUS,2)/(VISCOSITY*DENS)<<endl; cout << "term vel (2d) is "<<(1.0/3.0)*(DEM_DENS-DENS)*9.81*pow(DEM_RADIUS,2)/(VISCOSITY*DENS)<<endl; double tsc = Nsph::courantCondition(H,2*SPSOUND); double tsv = Nsph::viscDiffusionCondition(H,VISCOSITY); cout <<"simulation will take "<<int((MAXTIME/tsc)+1)<<" steps according to Courant condition, "<<int((MAXTIME/tsv)+1)<<" steps according to visc diffusion condition"<<endl; p.tag = ps.size()+1; p.r[0] = (RMAX[0]-RMIN[0])/2; p.r[1] = (RMAX[1]-RMIN[1])/2; p.r[2] = (RMAX[2]-RMIN[2])/2; p.dens = DEM_DENS; p.h = DEM_RADIUS/2; p.mass = (4.0/3.0)*PI*pow(DEM_RADIUS,3)*DEM_DENS; p.v = 0.0; p.vhat = p.v; p.iam = dem; ps.push_back(p); const double totalDEMVol = p.mass/p.dens; //const double totalDEMVol = 0; const double newLiqDens = DENS*((RMAX[1]-RMIN[1])*(RMAX[0]-RMIN[0])*2*DEM_RADIUS-totalDEMVol)/((RMAX[1]-RMIN[1])*(RMAX[0]-RMIN[0])*2*DEM_RADIUS); cout << "after adding dem particles, new liquid density is "<<newLiqDens<<endl; for (int i=0;i<NX;i++) { cout << "\rParticle ("<<i<<","<<"0"<<"). Generation "<<((i+2)*(NY+4))/double((NX+4)*(NY+4))*100<<"\% complete"<<flush; for (int j=0;j<NY;j++) { for (int k=0;k<NZ;k++) { p.tag = ps.size()+1; p.r = (i+0.5)*PSEP+RMIN[0],(j+0.5)*PSEP+RMIN[1],(k+0.5)*PSEP+RMIN[2]; p.dens = newLiqDens; p.mass = pow(PSEP,NDIM)*newLiqDens; p.h = HFAC*pow(p.mass/p.dens,1.0/NDIM); p.v = 0.0; p.vhat = p.v; p.iam = sph; p.alpha = ALPHA; ps.push_back(p); } } } cout << "Total number of particles = " << ps.size() << endl; CglobalVars globals; vector<vector<double> > vprocDomain(globals.mpiSize); vector<Array<int,NDIM> > vprocNeighbrs(globals.mpiSize); vector<particleContainer > vps; vectInt split; split = 1,1,1; particleContainer pps; for (int i=0;i<ps.size();i++) { pps.push_back(ps[i]); } Nmisc::splitDomain(pps,split,vps,vprocDomain,vprocNeighbrs); cout << "Opening files for writing..."<<endl; Cio_data_vtk ioFile(filename.c_str(),&globals); cout << "Calculating Output stuff.."<<endl; //sph.calcOutputVars(); //customOutput.calcOutput(0,&customSim,&ioFile); cout << "Writing Restart data to file..."<<endl; int nProc = product(split); for (int i=0;i<nProc;i++) { globals.mpiRank = i; for (int j=0;j<NDIM*2;j++) globals.procDomain[j] = vprocDomain[i][j]; globals.procNeighbrs = vprocNeighbrs[i]; ioFile.setFilename(filename.c_str(),&globals); ioFile.writeGlobals(0,&globals); ioFile.writeRestart(0,vps[i],&globals); ioFile.writeDomain(0,&globals); globals.mpiRank = 0; } }
int main(int argc, char *argv[]) { if (argc != 2) { cout << "Usage: setup outfilename" << endl; return(-1); } string filename = argv[1]; vector<Cparticle> ps; Cparticle p; cout << "Creating box with sides: rmax = ["<<BMAX[0]<<" "<<BMAX[1]<<"] rmin = ["<<BMIN[0]<<" "<<BMIN[1]<<"]"<<endl; cout << "Particle Separation = "<<PSEP<<endl; cout << "Reynolds Number = "<<REYNOLDS_NUMBER<<endl; cout << "Density = "<<DENS<<endl; cout << "number of particles on side = "<<NX<<endl; cout << "alpha = "<<ALPHA<<endl; cout << "viscosity = "<<VISCOSITY<<endl; cout << "maxtime = "<<MAXTIME<<endl; double tsc = Nsph::courantCondition(H,2*SPSOUND); double tsv = Nsph::viscDiffusionCondition(H,VISCOSITY); cout <<"simulation will take "<<int((MAXTIME/tsc)+1)<<" steps according to Courant condition, "<<int((MAXTIME/tsv)+1)<<" steps according to visc diffusion condition"<<endl; //do boundaries here vect points[5]; points[0] = BMIN[0],BMAX[1]; points[1] = BMIN[0],BMIN[1]; points[2] = BMAX[0],BMIN[1]; points[3] = BMAX[0],BMAX[1]; points[4] = BMIN[0],BMAX[1]; vect normals[5]; normals[0] = 1,0; normals[1] = 0,1; normals[2] = -1,0; normals[3] = 0,-1; normals[4] = 1,0; bool concave[5]; concave[0] = true; concave[1] = true; concave[2] = true; concave[3] = true; concave[4] = true; Nmisc::boundaryLine(ps,points,normals,concave,5,boundary); cout << "Total number of boundary particles = " << ps.size() << endl; //do fluid here for (int i=2;i<=NX;i++) { cout << "\rParticle ("<<i<<","<<"0"<<"). Generation "<<((i+2)*(NY+4))/double((NX+4)*(NY+4))*100<<"\% complete"<<flush; for (int j=2;j<=NY;j++) { p.r = i*PSEP+BMIN[0],j*PSEP+BMIN[1]; p.tag = ps.size()+1; p.dens = DENS; p.mass = PSEP*PSEP*DENS; p.h = H; p.v = 0,0; p.iam = sph; ps.push_back(p); } } cout << "Total number of particles = " << ps.size() << endl; CglobalVars globals; vector<vector<double> > vprocDomain(globals.mpiSize); vector<Array<int,NDIM> > vprocNeighbrs(globals.mpiSize); vector<particleContainer > vps; vectInt split; split = 1,1; particleContainer pps; for (int i=0;i<ps.size();i++) { pps.push_back(ps[i]); } Nmisc::splitDomain(pps,split,vps,vprocDomain,vprocNeighbrs); //CdataLL *data = new CdataLL(ps,globals); //CsphIncompress sph(data); //CcustomOutput customOutput(data); //CcustomSim customSim(data,globals.time); cout << "Opening files for writing..."<<endl; Cio_data_vtk ioFile(filename.c_str(),&globals); cout << "Writing Restart data to file..."<<endl; int nProc = product(split); for (int i=0;i<nProc;i++) { globals.mpiRank = i; for (int j=0;j<NDIM*2;j++) globals.procDomain[j] = vprocDomain[i][j]; globals.procNeighbrs = vprocNeighbrs[i]; ioFile.setFilename(filename.c_str(),&globals); ioFile.writeGlobals(0,&globals); ioFile.writeRestart(0,vps[i],&globals); ioFile.writeDomain(0,&globals); globals.mpiRank = 0; } }
int main(int argc, char *argv[]) { if (argc != 2) { cout << "Usage: setup outfilename" << endl; return(-1); } string filename = argv[1]; vector<Cparticle> ps; Cparticle p; cout << "Creating length with sides: rmax = ["<<RMAX[0]<<"] rmin = ["<<RMIN[0]<<"]"<<endl; cout << "Reynolds Number = "<<REYNOLDS_NUMBER<<endl; cout << "Density = "<<DENS<<endl; cout << "number of particles on side = "<<NX<<endl; cout << "alpha = "<<ALPHA<<endl; cout << "viscosity = "<<VISCOSITY<<endl; cout << "maxtime = "<<MAXTIME<<endl; double tsc = Nsph::courantCondition(H,2*SPSOUND); double tsv = Nsph::viscDiffusionCondition(H,VISCOSITY); cout <<"simulation will take "<<int((MAXTIME/tsc)+1)<<" steps according to Courant condition, "<<int((MAXTIME/tsv)+1)<<" steps according to visc diffusion condition"<<endl; gsl_rng *rng = gsl_rng_alloc(gsl_rng_ranlxd1); gsl_rng_set(rng,1); int numBound1,numBound2; if (PERIODIC[0]) { numBound1 = 1; numBound2 = 0; } else { numBound1 = 4; numBound2 = 4; } for (int i=1-numBound1;i<=NX+numBound2-1;i++) { cout << "\rParticle ("<<i<<","<<"0"<<"). Generation "<<((i+2)*(NY+4))/double((NX+4)*(NY+4))*100<<"\% complete"<<flush; p.tag = ps.size()+1; if (PERIODIC[0]) { p.r[0] = (i+0.5)*PSEP+RMIN[0]; } else { p.r[0] = i*PSEP+RMIN[0]; } p.dens = DENS; p.mass = PSEP*DENS; p.mass += gsl_ran_gaussian(rng,0.2*p.mass); p.h = H; p.v = 0,0; //p.v = -p.r[1]*BOX_GLOB_ANGVEL,p.r[0]*BOX_GLOB_ANGVEL; //const vect middle = (RMAX[0]-RMIN[0])/2.0 + RMIN[0]; //const vect size = (RMAX[0]-RMIN[0])/7.0; //const double sigma = (RMAX[0]-RMIN[0])/14.0; //if (all(p.r>=middle)&&all(p.r<=middle+size)) { // p.v = sin(2.0*PI*(1.0/size)*(p.r-middle)); //} else { // p.v = 0; //} //if (all(p.r>RMIN[0])&&all(p.r<RMAX[0])) { // p.v = 0.1*exp(-len2(p.r-middle)/(2.0*pow(sigma,2))); //p.v = 0.1*sin(2.0*PI*3.0*p.r); //} else { // p.v = 0.0; //} if ((i<=0)&&(!PERIODIC[0])) { p.iam = sphBoundary; p.norm1[0] = -i*PSEP; p.norm1[1] = 0; p.dist = len(p.norm1); if (p.dist==0) { p.norm1[0] = 1.0; } else { p.norm1 = p.norm1/p.dist; } } else if ((i>=NX)&&(!PERIODIC[0])) { p.iam = sphBoundary; p.norm1[0] = (NX-i)*PSEP; p.norm1[1] = 0; p.dist = len(p.norm1); if (p.dist==0) { p.norm1[0] = -1.0; } else { p.norm1 = p.norm1/p.dist; } } else { p.iam = sph; p.v[0] = 0.1*sin(PI*p.r[0]/PSEP); p.v[0] += 0.1*sin(10.0*PI*p.r[0]/(RMAX[0]-RMIN[0])); cout << "p.v = "<<p.v<<endl; } p.alpha = ALPHA; ps.push_back(p); } cout << "Total number of particles = " << ps.size() << endl; CglobalVars globals; vector<vector<double> > vprocDomain(globals.mpiSize); vector<Array<int,NDIM> > vprocNeighbrs(globals.mpiSize); vector<particleContainer > vps; vectInt split; split = 1; particleContainer pps; for (int i=0;i<ps.size();i++) { pps.push_back(ps[i]); } Nmisc::splitDomain(pps,split,vps,vprocDomain,vprocNeighbrs); //CdataLL *data = new CdataLL(ps,globals); //CsphIncompress sph(data); //CcustomOutput customOutput(data); //CcustomSim customSim(data,globals.time); cout << "Opening files for writing..."<<endl; Cio_data_vtk ioFile(filename.c_str(),&globals); cout << "Calculating Output stuff.."<<endl; //sph.calcOutputVars(); //customOutput.calcOutput(0,&customSim,&ioFile); cout << "Writing Restart data to file..."<<endl; int nProc = product(split); for (int i=0;i<nProc;i++) { globals.mpiRank = i; ioFile.setFilename(filename.c_str(),&globals); ioFile.writeGlobals(0,&globals); ioFile.writeRestart(0,vps[i],&globals); globals.mpiRank = 0; } cout << "Writing Global data to file..."<<endl; //ioFile.writeGlobals(0,&globals); ioFile.writeDomain(0,vprocDomain,vprocNeighbrs); //Write restart file for John /*ofstream fo("restartJohn.dat"); fo <<"h = "<<H<<" mass = "<<ps[0].mass<<" dens = "<<ps[0].dens<<" psep = "<<PSEP<<" Re = "<<REYNOLDS_NUMBER<<" kinematic viscosity = "<<VISCOSITY<<" n = "<<ps.size()<<endl; fo <<"r_x r_y v_x v_y flag(0=fluid,1=boundary)"<<endl; for (int i=0;i<ps.size();i++) { fo << ps[i].r[0]<<' '<<ps[i].r[1]<<' '<<ps[i].v[0]<<' '<<ps[i].v[1]<<' '<<ps[i].iam<<endl; }*/ }
int main(int argc, char *argv[]) { if (argc != 2) { cout << "Usage: setup outfilename" << endl; return(-1); } string filename = argv[1]; vector<Cparticle> ps; Cparticle p; cout << "Creating box with sides: rmax = ["<<BMAX[0]<<" "<<BMAX[1]<<"] rmin = ["<<BMIN[0]<<" "<<BMIN[1]<<"]"<<endl; cout << "Reynolds Number = "<<REYNOLDS_NUMBER<<endl; cout << "Density = "<<DENS<<endl; cout << "number of particles on side = "<<NX<<endl; cout << "alpha = "<<ALPHA<<endl; cout << "viscosity = "<<VISCOSITY<<endl; cout << "maxtime = "<<MAXTIME<<endl; cout << "term vel (3d) is "<<(2.0/9.0)*(DEM_DENS-DENS)*9.81*pow(DEM_RADIUS,2)/(VISCOSITY*DENS)<<endl; cout << "term vel (2d) is "<<(1.0/3.0)*(DEM_DENS-DENS)*9.81*pow(DEM_RADIUS,2)/(VISCOSITY*DENS)<<endl; //cout << "term vel is "<<(1.0/6.0)*(DEM_DENS-DENS)*9.81*pow(DEM_RADIUS,1)/(VISCOSITY*DENS)<<endl; double tsc = Nsph::courantCondition(H,2*SPSOUND); double tsv = Nsph::viscDiffusionCondition(H,VISCOSITY); cout <<"simulation will take "<<int((MAXTIME/tsc)+1)<<" steps according to Courant condition, "<<int((MAXTIME/tsv)+1)<<" steps according to visc diffusion condition"<<endl; Nmisc::boundaryCylinder(ps,CYLINDER_ORIGIN,CYLINDER_RADIUS,CYLINDER_HEIGHT); vect origin = CYLINDER_ORIGIN; origin[2] += 1.5*PSEP; Nmisc::sphCylinder(ps,origin); p.tag = ps.size()+1; p.r = CYLINDER_ORIGIN; p.r[2] = CYLINDER_HEIGHT; p.dens = DEM_DENS; p.h = DEM_RADIUS/2; p.mass = (4.0/3.0)*PI*pow(DEM_RADIUS,3)*DEM_DENS; p.v = 0.0; p.vhat = p.v; p.iam = dem; ps.push_back(p); cout << "Total number of particles = " << ps.size() << endl; CglobalVars globals; vector<vector<double> > vprocDomain(globals.mpiSize); vector<Array<int,NDIM> > vprocNeighbrs(globals.mpiSize); vector<particleContainer > vps; vectInt split; split = 1,1,1; particleContainer pps; for (int i=0;i<ps.size();i++) { pps.push_back(ps[i]); } Nmisc::splitDomain(pps,split,vps,vprocDomain,vprocNeighbrs); cout << "Opening files for writing..."<<endl; Cio_data_vtk ioFile(filename.c_str(),&globals); cout << "Calculating Output stuff.."<<endl; //sph.calcOutputVars(); //customOutput.calcOutput(0,&customSim,&ioFile); cout << "Writing Restart data to file..."<<endl; int nProc = product(split); for (int i=0;i<nProc;i++) { globals.mpiRank = i; ioFile.setFilename(filename.c_str(),&globals); ioFile.writeGlobals(0,&globals); ioFile.writeRestart(0,vps[i],&globals); globals.mpiRank = 0; } cout << "Writing Global data to file..."<<endl; //ioFile.writeGlobals(0,&globals); ioFile.writeDomain(0,vprocDomain,vprocNeighbrs); }
int main(int argc, char *argv[]) { if (argc != 2) { cout << "Usage: setup outfilename" << endl; return(-1); } string filename = argv[1]; vector<Cparticle> ps; Cparticle p; cout << "Creating box with sides: rmax = ["<<BMAX[0]<<" "<<BMAX[1]<<"] rmin = ["<<BMIN[0]<<" "<<BMIN[1]<<"]"<<endl; cout << "Reynolds Number = "<<REYNOLDS_NUMBER<<endl; cout << "Density = "<<DENS<<endl; cout << "speed of sound = "<<SPSOUND<<endl; cout << "prb = "<<PRB<<endl; cout << "number of particles on side = "<<NX<<endl; cout << "max num partilces = "<<MAX_NUM_PARTICLES_PER_CPU<<endl; cout << "sph boundary density is "<<SPHBOUNDARYDENS<<endl; cout << "VMAX is "<<VMAX<<endl; cout << "PSEP = "<<PSEP<<endl; cout << "p.mass = "<<pow(PSEP,NDIM)*DENS<<endl; cout << "alpha = "<<ALPHA<<endl; cout << "viscosity = "<<VISCOSITY<<endl; cout << "maxtime = "<<MAXTIME<<endl; cout << "term vel (3d) is "<<VREF<<endl; cout << "term vel (stokes) is "<<(2.0/9.0)*(DEM_DENS-DENS)*9.81*pow(DEM_RADIUS,2)/(VISCOSITY*DENS)<<endl; cout << "vmax = "<<VMAX<<endl; cout << "fluid RE = "<<VMAX*L/VISCOSITY<<endl; cout << "test = "<<(sqrt(8*pow(1.0/40.0,3)*1000*(7000)*9.81/18)/1000)<<endl; cout << "DEM_RADIUS = "<<DEM_RADIUS<<endl; cout << "gamma must be less than" <<2.0*sqrt(DEM_K*DEM_MIN_REDUCED_MASS)<<endl; double tsc = Nsph::courantCondition(H,2*SPSOUND); double tsv = Nsph::viscDiffusionCondition(H,VISCOSITY); double tdem = Nsph::demCondition(); double liqtdem = Nsph::liqDemCondition(); cout <<"dem contact = "<<50*tdem<<endl; cout <<"liq dem ts= "<<20.0*liqtdem<<endl; cout <<"fluid cfl= "<<tsc<<endl; cout <<"simulation will take "<<int((MAXTIME/tsc)+1)<<" steps according to Courant condition, "<<int((MAXTIME/tsv)+1)<<" steps according to visc diffusion condition"<<int((MAXTIME/tdem)+1)<<" steps according to the DEM condition"<<int((MAXTIME/liqtdem)+1)<<" steps according to the LIQ DEM condition"<<endl; #ifdef SPHBOUNDARY const int Z_LIM = -2; #else const int Z_LIM = 0; #endif for (int i=0;i<NX;i++) { cout << "\rParticle ("<<i<<","<<"0"<<"). Generation "<<((i+2)*(NY+4))/double((NX+4)*(NY+4))*100<<"\% complete"<<flush; for (int j=0;j<NY;j++) { for (int k=Z_LIM;k<=NZ;k++) { p.tag = ps.size()+1; #ifdef GHOST_BOUNDARY if (k%2==0) { p.r = (i+0.5)*PSEP+RMIN[0],(j+0.5)*PSEP+RMIN[1],(k+0.5)*PSEP+RMIN[2]; } else { p.r = (i)*PSEP+RMIN[0],(j)*PSEP+RMIN[1],(k+0.5)*PSEP+RMIN[2]; } #else if (k%2==0) { p.r = (i+0.5)*PSEP+RMIN[0],(j+0.5)*PSEP+RMIN[1],k*PSEP+RMIN[2]; } else { p.r = (i)*PSEP+RMIN[0],(j)*PSEP+RMIN[1],k*PSEP+RMIN[2]; } #endif p.dens = DENS; p.mass = pow(PSEP,NDIM)*DENS; p.h = HFAC*pow(p.mass/p.dens,1.0/NDIM); p.v = 0.0; p.vhat = p.v; #ifndef GHOST_BOUNDARY if (k<=0) { #ifdef SPHBOUNDARY p.iam = sphBoundary; p.dens = SPHBOUNDARYDENS; #else p.iam = boundary; #endif p.norm1 = 0,0,1; p.norm3 = 0,1,0; p.norm2 = 0; } else { p.iam = sph; p.norm1 = 0; p.norm3 = 0; } #endif ps.push_back(p); } } } int numSPH = ps.size(); CglobalVars globals; globals.procNeighbrs = 0; globals.procNeighbrs(1,1,1) = -1; for (int j=0;j<NDIM;j++) { if (!PERIODIC[j]) { globals.procDomain[2*j] = RMIN[j]-0.25*(RMAX[j]-RMIN[j]); } else { globals.procDomain[2*j] = RMIN[j]; } if (!PERIODIC[j]) { globals.procDomain[2*j+1] = RMAX[j]+0.25*(RMAX[j]-RMIN[j]); } else { globals.procDomain[2*j+1] = RMAX[j]; } } MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &(globals.mpiSize)); MPI_Comm_rank(MPI_COMM_WORLD, &(globals.mpiRank)); ps.reserve(MAX_NUM_PARTICLES_PER_CPU); cout <<"creating new data structure"<<endl; CdataLL *data = new CdataLL(ps,globals,true); cout <<"adding dem particles"<<endl; #ifdef MANY_PARTICLES double min[3]; double max[3]; for (int i=0;i<3;i++) { if (i==2) { #ifdef IN_WATER min[i] = RMIN[i] + (RMAX[i]-RMIN[i])/2 - PSEP; max[i] = WMAX - 2.0*PSEP; #else min[i] = WMAX+PSEP; max[i] = WMAX+PSEP+(RMAX[i]-RMIN[i])/4; #endif } else { #ifdef SMALL_BLOCK min[i] = RMIN[i]+(RMAX[i]-RMIN[i])/4.0; max[i] = RMAX[i]-(RMAX[i]-RMIN[i])/4.0; #else min[i] = RMIN[i]; max[i] = RMAX[i]; #endif } } #ifdef GRID_OF_DEM cout <<"adding block with min = "<<min[0]<<" "<<min[1]<<" "<<min[2]<<" and max = "<<max[0]<<" "<<max[1]<<" "<<max[2]<<endl; Nmisc::addGridDEMparticles(ps,min,max,POROSITY); #ifdef GRID_OF_DEM_PERT for (vector<Cparticle>::iterator i=ps.begin();i!=ps.end();i++) { if (i->iam==dem) { i->r[2] -= DEM_RADIUS*0.25*(1-cos(i->r[0]*2.0*PI/L))*(1-cos(i->r[1]*2.0*PI/L)); } } #endif #else Nmisc::addRandomDEMparticles(data,min,max,POROSITY); #endif #else p.tag = ps.size()+1; p.r[0] = (RMAX[0]-RMIN[0])/2; p.r[1] = (RMAX[1]-RMIN[1])/2; #ifdef IN_WATER p.r[2] = WMAX*0.8; #else p.r[2] = WMAX+(RMAX[2]-RMIN[2])/8.0; #endif p.dens = DEM_DENS; p.h = DEM_RADIUS; p.mass = DEM_VOL*DEM_DENS; p.v = 0.0; p.vhat = p.v; p.iam = dem; ps.push_back(p); #endif const double totalDEMVol = (ps.size()-numSPH)*(4.0/3.0)*PI*pow(DEM_RADIUS,3); const double newLiqDens = DENS; //const double newLiqDens = DENS*((RMAX[1]-RMIN[1])*(RMAX[0]-RMIN[0])*(WMAX-RMIN[2])-totalDEMVol)/((RMAX[1]-RMIN[1])*(RMAX[0]-RMIN[0])*(WMAX-RMIN[2])); cout << "porosity = "<<1.0-totalDEMVol/((RMAX[0]-RMIN[0])*(RMAX[1]-RMIN[1])*(WMAX-RMIN[2]))<<endl; //cout << "after adding dem particles, new liquid density is "<<newLiqDens<<endl; /* #ifdef IN_WATER for (vector<Cparticle>::iterator i=ps.begin();i!=ps.end();i++) { if (i->iam==sph) { i->dens = newLiqDens; i->mass = pow(PSEP,NDIM)*newLiqDens; } } #endif */ cout << "Total number of particles = " << ps.size() << endl; vector<vector<double> > vprocDomain(globals.mpiSize); vector<Array<int,NDIM> > vprocNeighbrs(globals.mpiSize); vector<particleContainer > vps; vectInt split; split = 1,1,1; particleContainer pps; for (int i=0;i<ps.size();i++) { pps.push_back(ps[i]); } Nmisc::splitDomain(pps,split,vps,vprocDomain,vprocNeighbrs); cout << "Opening files for writing..."<<endl; Cio_data_vtk ioFile(filename.c_str(),&globals); cout << "Calculating Output stuff.."<<endl; //sph.calcOutputVars(); //customOutput.calcOutput(0,&customSim,&ioFile); cout << "Writing Restart data to file..."<<endl; int nProc = product(split); for (int i=0;i<nProc;i++) { globals.mpiRank = i; for (int j=0;j<NDIM*2;j++) globals.procDomain[j] = vprocDomain[i][j]; globals.procNeighbrs = vprocNeighbrs[i]; ioFile.setFilename(filename.c_str(),&globals); ioFile.writeGlobals(0,&globals); ioFile.writeRestart(0,vps[i],&globals); ioFile.writeDomain(0,&globals); globals.mpiRank = 0; } //ioFile.writeGlobals(0,&globals); //ioFile.writeDomain(0,vprocDomain,vprocNeighbrs); }
int main(int argc, char *argv[]) { if (argc != 2) { cout << "Usage: setup outfilename" << endl; return(-1); } string filename = argv[1]; vector<Cparticle> ps; Cparticle p; cout << "Creating box with sides: rmax = ["<<RMAX[0]<<" "<<RMAX[1]<<"] rmin = ["<<RMIN[0]<<" "<<RMIN[1]<<"]"<<endl; cout << "Reynolds Number = "<<REYNOLDS_NUMBER<<endl; cout << "Density = "<<DENS<<endl; cout << "number of particles on side = "<<NX<<endl; cout << "alpha = "<<ALPHA<<endl; cout << "viscosity = "<<VISCOSITY<<endl; cout << "maxtime = "<<MAXTIME<<endl; double tsc = Nsph::courantCondition(H,2*SPSOUND); double tsv = Nsph::viscDiffusionCondition(H,VISCOSITY); cout <<"simulation will take "<<int((MAXTIME/tsc)+1)<<" steps according to Courant condition, "<<int((MAXTIME/tsv)+1)<<" steps according to visc diffusion condition"<<endl; for (int i=-3;i<=NX+3;i++) { cout << "\rParticle ("<<i<<","<<"0"<<"). Generation "<<((i+2)*(NY+4))/double((NX+4)*(NY+4))*100<<"\% complete"<<flush; for (int j=-3;j<=NY+3;j++) { p.tag = ps.size()+1; p.r = (i+0.5)*PSEP+RMIN[0],(j+0.5)*PSEP+RMIN[1]; p.dens = DENS; p.mass = PSEP*PSEP*DENS; p.h = H; if ((j<=0)||(j>=NY)||(i<=0)||(i>=NX)) { p.v = 0,0; p.iam = sphBoundary; } else { p.v = 0.25*(p.r[1]-0.5),0.25*(0.5-p.r[0]); p.iam = sph; } p.alpha = ALPHA; ps.push_back(p); } } cout << "Total number of particles = " << ps.size() << endl; CglobalVars globals; vector<vector<double> > vprocDomain(globals.mpiSize); vector<Array<int,NDIM> > vprocNeighbrs(globals.mpiSize); vector<particleContainer > vps; vectInt split; split = 1,1; particleContainer pps; for (int i=0;i<ps.size();i++) { pps.push_back(ps[i]); } Nmisc::splitDomain(pps,split,vps,vprocDomain,vprocNeighbrs); //CdataLL *data = new CdataLL(ps,globals); //CsphIncompress sph(data); //CcustomOutput customOutput(data); //CcustomSim customSim(data,globals.time); cout << "Opening files for writing..."<<endl; Cio_data_vtk ioFile(filename.c_str(),&globals); cout << "Calculating Output stuff.."<<endl; //sph.calcOutputVars(); //customOutput.calcOutput(0,&customSim,&ioFile); cout << "Writing Restart data to file..."<<endl; int nProc = product(split); for (int i=0;i<nProc;i++) { globals.mpiRank = i; ioFile.setFilename(filename.c_str(),&globals); ioFile.writeGlobals(0,&globals); ioFile.writeRestart(0,vps[i],&globals); globals.mpiRank = 0; } cout << "Writing Global data to file..."<<endl; //ioFile.writeGlobals(0,&globals); ioFile.writeDomain(0,vprocDomain,vprocNeighbrs); //Write restart file for John /*ofstream fo("restartJohn.dat"); fo <<"h = "<<H<<" mass = "<<ps[0].mass<<" dens = "<<ps[0].dens<<" psep = "<<PSEP<<" Re = "<<REYNOLDS_NUMBER<<" kinematic viscosity = "<<VISCOSITY<<" n = "<<ps.size()<<endl; fo <<"r_x r_y v_x v_y flag(0=fluid,1=boundary)"<<endl; for (int i=0;i<ps.size();i++) { fo << ps[i].r[0]<<' '<<ps[i].r[1]<<' '<<ps[i].v[0]<<' '<<ps[i].v[1]<<' '<<ps[i].iam<<endl; }*/ }
int main(int argc, char *argv[]) { if (argc != 2) { cout << "Usage: setup outfilename" << endl; return(-1); } string filename = argv[1]; vector<Cparticle> ps; Cparticle p; cout << "Creating box with sides: rmax = ["<<RMAX[0]<<" "<<RMAX[1]<<"] rmin = ["<<RMIN[0]<<" "<<RMIN[1]<<"]"<<endl; cout << "Reynolds Number = "<<REYNOLDS_NUMBER<<endl; cout << "Density = "<<DENS<<endl; cout << "number of particles on side = "<<NX<<endl; cout << "alpha = "<<ALPHA<<endl; cout << "viscosity = "<<VISCOSITY<<endl; cout << "maxtime = "<<MAXTIME<<endl; double tsc = Nsph::courantCondition(H,2*SPSOUND); double tsv = Nsph::viscDiffusionCondition(H,VISCOSITY); cout <<"simulation will take "<<int((MAXTIME/tsc)+1)<<" steps according to Courant condition, "<<int((MAXTIME/tsv)+1)<<" steps according to visc diffusion condition"<<endl; gsl_rng *rng = gsl_rng_alloc(gsl_rng_ranlxd1); gsl_rng_set(rng,1); //gsl_rng_set(rng,time(NULL)); for (int i=0;i<NX;i++) { cout << "\rParticle ("<<i<<","<<"0"<<"). Generation "<<((i+2)*(NY+4))/double((NX+4)*(NY+4))*100<<"\% complete"<<flush; for (int j=0;j<NY;j++) { p.tag = ps.size()+1; p.r = (i+0.5)*PSEP+RMIN[0],(j+0.5)*PSEP+RMIN[1]; p.dens = DENS; p.mass = PSEP*PSEP*DENS; p.h = H; p.v = -VREF*cos(2.0*PI*p.r[0])*sin(2.0*PI*p.r[1]),VREF*sin(2.0*PI*p.r[0])*cos(2.0*PI*p.r[1]); p.v[0] += gsl_ran_gaussian(rng,VREF/20); p.v[1] += gsl_ran_gaussian(rng,VREF/20); p.v[2] += gsl_ran_gaussian(rng,VREF/20); p.vhat = p.v; p.iam = sph; ps.push_back(p); } } cout << "Total number of particles = " << ps.size() << endl; CglobalVars globals; vector<vector<double> > vprocDomain(globals.mpiSize); vector<Array<int,NDIM> > vprocNeighbrs(globals.mpiSize); vector<particleContainer > vps; vectInt split; split = 1,1; particleContainer pps; for (int i=0;i<ps.size();i++) { pps.push_back(ps[i]); } Nmisc::splitDomain(pps,split,vps,vprocDomain,vprocNeighbrs); cout << "Opening files for writing..."<<endl; Cio_data_vtk ioFile(filename.c_str(),&globals); cout << "Writing Restart data to file..."<<endl; int nProc = product(split); for (int i=0;i<nProc;i++) { globals.mpiRank = i; for (int j=0;j<NDIM*2;j++) globals.procDomain[j] = vprocDomain[i][j]; globals.procNeighbrs = vprocNeighbrs[i]; ioFile.setFilename(filename.c_str(),&globals); ioFile.writeGlobals(0,&globals); ioFile.writeRestart(0,vps[i],&globals); ioFile.writeDomain(0,&globals); globals.mpiRank = 0; } }
int main(int argc, char *argv[]) { if (argc != 2) { cout << "Usage: setup outfilename" << endl; return(-1); } string filename = argv[1]; vector<Cparticle> ps; Cparticle p; cout << "Creating box with sides: rmax = ["<<BMAX[0]<<" "<<BMAX[1]<<"] rmin = ["<<BMIN[0]<<" "<<BMIN[1]<<"]"<<endl; cout << "Reynolds Number = "<<REYNOLDS_NUMBER<<endl; cout << "Density = "<<DENS<<endl; cout << "speed of sound = "<<SPSOUND<<endl; cout << "prb = "<<PRB<<endl; cout << "number of particles on side = "<<NX<<endl; cout << "max num partilces = "<<MAX_NUM_PARTICLES_PER_CPU<<endl; cout << "sph boundary density is "<<SPHBOUNDARYDENS<<endl; cout << "VMAX is "<<VMAX<<endl; cout << "PSEP = "<<PSEP<<endl; cout << "alpha = "<<ALPHA<<endl; cout << "viscosity = "<<VISCOSITY<<endl; cout << "maxtime = "<<MAXTIME<<endl; cout << "term vel (3d) is "<<VREF<<endl; cout << "term vel (stokes) is "<<(2.0/9.0)*(DEM_DENS-DENS)*9.81*pow(DEM_RADIUS,2)/(VISCOSITY*DENS)<<endl; cout << "DEM_RADIUS = "<<DEM_RADIUS<<endl; cout << "Other dens = "<<D2<<endl; cout << "dens drop= "<<DENS_DROP[0]<<endl; double tsc = Nsph::courantCondition(H,2*SPSOUND); double tsv = Nsph::viscDiffusionCondition(H,VISCOSITY); double tdem = Nsph::demCondition(); cout <<"dem ts = "<<tdem<<endl; cout <<"simulation will take "<<int((MAXTIME/tsc)+1)<<" steps according to Courant condition, "<<int((MAXTIME/tsv)+1)<<" steps according to visc diffusion condition"<<int((MAXTIME/tdem)+1)<<" steps according to the DEM condition"<<endl; for (int i=0;i<NX;i++) { cout << "\rParticle ("<<i<<","<<"0"<<"). Generation "<<((i+2)*(NY+4))/double((NX+4)*(NY+4))*100<<"\% complete"<<flush; for (int j=0;j<NY;j++) { for (int k=0;k<NZ;k++) { p.tag = ps.size()+1; p.r = (i+0.5)*PSEP+RMIN[0],(j+0.5)*PSEP+RMIN[1],(k+0.5)*PSEP+RMIN[2]; if (p.tag==11) cout <<p.r<<endl; p.dens = DENS; p.mass = pow(PSEP,NDIM)*DENS; p.h = HFAC*pow(p.mass/p.dens,1.0/NDIM); p.v = 0.0; p.vhat = p.v; ps.push_back(p); } } } int numSPH = ps.size(); CglobalVars globals; globals.procNeighbrs = 0; globals.procNeighbrs(1,1,1) = -1; for (int j=0;j<NDIM;j++) { if (!PERIODIC[j]) { globals.procDomain[2*j] = RMIN[j]-0.25*(RMAX[j]-RMIN[j]); } else { globals.procDomain[2*j] = RMIN[j]; } if (!PERIODIC[j]) { globals.procDomain[2*j+1] = RMAX[j]+0.25*(RMAX[j]-RMIN[j]); } else { globals.procDomain[2*j+1] = RMAX[j]; } } MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &(globals.mpiSize)); MPI_Comm_rank(MPI_COMM_WORLD, &(globals.mpiRank)); ps.reserve(MAX_NUM_PARTICLES_PER_CPU); cout <<"creating new data structure"<<endl; CdataLL *data = new CdataLL(ps,globals,true); cout <<"adding dem particles"<<endl; #ifdef MANY_PARTICLES double min[3]; double max[3]; for (int i=0;i<3;i++) { if (i==2) { min[i] = RMIN[i]; max[i] = RMAX[i]; } else { min[i] = RMIN[i]; max[i] = RMAX[i]; } } #ifdef GRID_OF_DEM Nmisc::addGridDEMparticles(ps,min,max,POROSITY); #else Nmisc::addRandomDEMparticles(data,min,max,POROSITY); #endif #else p.tag = ps.size()+1; p.r[0] = (RMAX[0]-RMIN[0])/2; p.r[1] = (RMAX[1]-RMIN[1])/2; p.r[2] = RMAX[2]-4.0*PSEP; p.dens = DEM_DENS; p.h = DEM_RADIUS; p.mass = DEM_VOL*DEM_DENS; p.v = 0.0; p.vhat = p.v; p.iam = dem; ps.push_back(p); #endif const double totalDEMVol = (ps.size()-numSPH)*(4.0/3.0)*PI*pow(DEM_RADIUS,3); //const double newLiqDens = DENS; const double newLiqDens = DENS*((RMAX[1]-RMIN[1])*(RMAX[0]-RMIN[0])*(RMAX[2]-RMIN[2])-totalDEMVol)/((RMAX[1]-RMIN[1])*(RMAX[0]-RMIN[0])*(RMAX[2]-RMIN[2])); cout << "porosity = "<<1.0-totalDEMVol/((RMAX[0]-RMIN[0])*(RMAX[1]-RMIN[1])*(RMAX[2]-RMIN[2]))<<endl; cout << "after adding dem particles, new liquid density is "<<newLiqDens<<endl; for (vector<Cparticle>::iterator i=ps.begin();i!=ps.end();i++) { if (i->iam==sph) { i->dens = newLiqDens; i->mass = pow(PSEP,NDIM)*newLiqDens; } } cout << "Total number of particles = " << ps.size() << endl; vector<vector<double> > vprocDomain(globals.mpiSize); vector<Array<int,NDIM> > vprocNeighbrs(globals.mpiSize); vector<particleContainer > vps; vectInt split; split = 1,1,1; particleContainer pps; for (int i=0;i<ps.size();i++) { pps.push_back(ps[i]); } Nmisc::splitDomain(pps,split,vps,vprocDomain,vprocNeighbrs); cout << "Opening files for writing..."<<endl; Cio_data_vtk ioFile(filename.c_str(),&globals); cout << "Calculating Output stuff.."<<endl; //sph.calcOutputVars(); //customOutput.calcOutput(0,&customSim,&ioFile); cout << "Writing Restart data to file..."<<endl; int nProc = product(split); for (int i=0;i<nProc;i++) { globals.mpiRank = i; for (int j=0;j<NDIM*2;j++) globals.procDomain[j] = vprocDomain[i][j]; globals.procNeighbrs = vprocNeighbrs[i]; ioFile.setFilename(filename.c_str(),&globals); ioFile.writeGlobals(0,&globals); ioFile.writeRestart(0,vps[i],&globals); ioFile.writeDomain(0,&globals); globals.mpiRank = 0; } //ioFile.writeGlobals(0,&globals); //ioFile.writeDomain(0,vprocDomain,vprocNeighbrs); }
int main(int argc, char *argv[]) { if (argc != 2) { cout << "Usage: setup outfilename" << endl; return(-1); } string filename = argv[1]; vector<Cparticle> ps; Cparticle p; cout << "Creating box with sides: rmax = ["<<RMAX[0]<<" "<<RMAX[1]<<"] rmin = ["<<RMIN[0]<<" "<<RMIN[1]<<"]"<<endl; cout << "Reynolds Number = "<<REYNOLDS_NUMBER<<endl; cout << "Density = "<<DENS<<endl; cout << "number of particles on side = "<<NX<<endl; cout << "alpha = "<<ALPHA<<endl; cout << "viscosity = "<<VISCOSITY<<endl; cout << "maxtime = "<<MAXTIME<<endl; double tsc = Nsph::courantCondition(H,2*SPSOUND); double tsv = Nsph::viscDiffusionCondition(H,VISCOSITY); cout <<"simulation will take "<<int((MAXTIME/tsc)+1)<<" steps according to Courant condition, "<<int((MAXTIME/tsv)+1)<<" steps according to visc diffusion condition"<<endl; for (int i=0;i<NX;i++) { cout << "\rParticle ("<<i<<","<<"0"<<"). Generation "<<((i+2)*(NY+4))/double((NX+4)*(NY+4))*100<<"\% complete"<<flush; for (int j=-3;j<=NY+3;j++) { p.tag = ps.size()+1; p.r = i*PSEP+RMIN[0],j*PSEP+RMIN[1]; p.dens = DENS; p.mass = PSEP*PSEP*DENS; p.h = H; p.v = 0,0; p.vhat = p.v; if (j<=0) { p.iam = sphBoundary; p.norm1[0] = 0; p.norm1[1] = -j*PSEP; p.dist = len(p.norm1); if (p.dist==0) { p.norm1[1] = 1.0; } else { p.norm1 = p.norm1/p.dist; } p.v[0] = WALL_SPEED; p.vhat = p.v; } else if (j>=NY) { p.iam = sphBoundary; p.norm1[0] = 0; p.norm1[1] = (NY-j)*PSEP; p.dist = len(p.norm1); if (p.dist==0) { p.norm1[1] = -1.0; } else { p.norm1 = p.norm1/p.dist; } } else { p.iam = sph; //p.v[0] += gsl_cheb_eval(csX,p.r[0]); //p.v[1] += gsl_cheb_eval(csY,p.r[1]); } p.alpha = ALPHA; ps.push_back(p); } } cout << "Total number of particles = " << ps.size() << endl; CglobalVars globals; vector<vector<double> > vprocDomain(globals.mpiSize); vector<Array<int,NDIM> > vprocNeighbrs(globals.mpiSize); vector<particleContainer > vps; vectInt split; split = 1,1; particleContainer pps; for (int i=0;i<ps.size();i++) { pps.push_back(ps[i]); } Nmisc::splitDomain(pps,split,vps,vprocDomain,vprocNeighbrs); //CdataLL *data = new CdataLL(ps,globals); //CsphIncompress sph(data); //CcustomOutput customOutput(data); //CcustomSim customSim(data,globals.time); cout << "Opening files for writing..."<<endl; Cio_data_vtk ioFile(filename.c_str(),&globals); cout << "Calculating Output stuff.."<<endl; //sph.calcOutputVars(); //customOutput.calcOutput(0,&customSim,&ioFile); cout << "Writing Restart data to file..."<<endl; int nProc = product(split); for (int i=0;i<nProc;i++) { globals.mpiRank = i; ioFile.setFilename(filename.c_str(),&globals); ioFile.writeGlobals(0,&globals); ioFile.writeRestart(0,vps[i],&globals); globals.mpiRank = 0; } cout << "Writing Global data to file..."<<endl; //ioFile.writeGlobals(0,&globals); ioFile.writeDomain(0,vprocDomain,vprocNeighbrs); }
int main(int argc, char *argv[]) { if (argc != 2) { cout << "Usage: setup outfilename" << endl; return(-1); } string filename = argv[1]; vector<Cparticle> ps; Cparticle p; cout << "Creating box with sides: rmax = ["<<BMAX[0]<<" "<<BMAX[1]<<"] rmin = ["<<BMIN[0]<<" "<<BMIN[1]<<"]"<<endl; cout << "Reynolds Number = "<<REYNOLDS_NUMBER<<endl; cout << "Density = "<<DENS<<endl; cout << "speed of sound = "<<SPSOUND<<endl; cout << "prb = "<<PRB<<endl; cout << "number of particles on side = "<<NX<<endl; cout << "max num partilces = "<<MAX_NUM_PARTICLES_PER_CPU<<endl; cout << "this run will need "<<MAX_NUM_PARTICLES_PER_CPU*sizeof(Cparticle)<<" bytes"<<endl; cout <<"inlet vel is "<<INFLOW_VEL<<endl; cout << "PSEP = "<<PSEP<<endl; cout << "alpha = "<<ALPHA<<endl; cout << "viscosity = "<<VISCOSITY<<endl; cout << "maxtime = "<<MAXTIME<<endl; cout << "term vel (3d) is "<<(2.0/9.0)*(DEM_DENS-DENS)*9.81*pow(DEM_RADIUS,2)/(VISCOSITY*DENS)<<endl; cout << "term vel (2d) is "<<(1.0/3.0)*(DEM_DENS-DENS)*9.81*pow(DEM_RADIUS,2)/(VISCOSITY*DENS)<<endl; //cout << "term vel is "<<(1.0/6.0)*(DEM_DENS-DENS)*9.81*pow(DEM_RADIUS,1)/(VISCOSITY*DENS)<<endl; cout << "gamma must be less than" <<2.0*sqrt(DEM_K*DEM_MIN_REDUCED_MASS)<<endl; #ifdef LUBRICATION cout << "k must be greater than" <<pow(0.5*LUB_GAMMA,2)/DEM_MIN_REDUCED_MASS<<endl; #else cout << "k must be greater than" <<pow(0.5*DEM_GAMMA,2)/DEM_MIN_REDUCED_MASS<<endl; #endif cout << "Konmr ="<<Konmr<<endl; cout << "gammaOnmr = "<<gammaOnmr<<endl; cout << "K = "<<DEM_K<<endl; #ifdef LUBRICATION cout << "GAMMA = "<<LUB_GAMMA<<endl; #else cout << "GAMMA = "<<DEM_GAMMA<<endl; #endif cout <<"THETS ="<<THETS<<endl; cout <<"DEM_TIMESTEP="<<DEM_TIMESTEP<<endl; cout <<"CR = "<<CR<<endl; double tsc = Nsph::courantCondition(H,2*SPSOUND); double tsv = Nsph::viscDiffusionCondition(H,VISCOSITY); double tdem = Nsph::demCondition(); #ifdef LUBRICATION cout <<"coeff of restitution = "<<exp(-tdem*0.5*LUB_GAMMA/DEM_MIN_REDUCED_MASS)<<endl; #else cout <<"coeff of restitution = "<<exp(-tdem*0.5*DEM_GAMMA/DEM_MIN_REDUCED_MASS)<<endl; #endif double liqtdem = Nsph::liqDemCondition(); cout <<"dem ts = "<<tdem<<endl; cout <<"liq dem ts = "<<liqtdem<<endl; cout <<"simulation will take "<<int((MAXTIME/tsc)+1)<<" steps according to Courant condition, "<<int((MAXTIME/tsv)+1)<<" steps according to visc diffusion condition"<<int((MAXTIME/tdem)+1)<<" steps according to the DEM condition"<<int((MAXTIME/liqtdem)+1)<<" steps according to the LIQ DEM condition"<<endl; cout <<"reduced mass = "<<DEM_MIN_REDUCED_MASS<<endl; cout <<" tdem = "<< (1.0/50.0)*PI*sqrt(DEM_MIN_REDUCED_MASS)/sqrt(DEM_K-pow(0.5*DEM_GAMMA,2)/DEM_MIN_REDUCED_MASS) << endl; cout <<"particle reynolds number = "<<2.0*DEM_RADIUS*INFLOW_VEL/VISCOSITY<<endl; vect normal = 0.0; normal[2] = 1.0; Nmisc::boundaryCircle(ps,CYLINDER_ORIGIN,INLET_RADIUS,CYLINDER_RADIUS,normal); vect newOrigin = CYLINDER_ORIGIN; const double newHeight = CYLINDER_HEIGHT - BFAC*PSEP; newOrigin[2] += BFAC*PSEP; cout <<"adding cylinder at origin"<<newOrigin<<endl; Nmisc::boundaryCylinderNoTopBottom(ps,newOrigin,CYLINDER_RADIUS,newHeight); newOrigin[2] = CYLINDER_ORIGIN[2]-INLET_HEIGHT; cout <<"adding cylinder at origin"<<newOrigin<<endl; Nmisc::boundaryCylinderNoTopBottom(ps,newOrigin,INLET_RADIUS,INLET_HEIGHT); newOrigin[2] = CYLINDER_ORIGIN[2]+CYLINDER_HEIGHT; normal[2] = -1.0; cout <<"adding cylinder at origin"<<newOrigin<<endl; Nmisc::boundaryCircle(ps,newOrigin,INLET_RADIUS,CYLINDER_RADIUS,normal); newOrigin[2] += PSEP; cout <<"adding cylinder at origin"<<newOrigin<<endl; Nmisc::boundaryCylinderNoTopBottom(ps,newOrigin,INLET_RADIUS,INLET_HEIGHT); //demPorousCylinder(ps,CYLINDER_ORIGIN,CYLINDER_RADIUS,DEM_DISK_HEIGHT,DEM_DISK_POROSITY); newOrigin[2] = CYLINDER_ORIGIN[2]+CYLINDER_HEIGHT-DEM_DISK_HEIGHT; //demPorousCylinder(ps,newOrigin,CYLINDER_RADIUS,DEM_DISK_HEIGHT,0.5); CglobalVars globals; globals.procNeighbrs = -1; for (int j=0; j<NDIM; j++) { globals.procDomain[2*j] = RMIN[j]-0.25*(RMAX[j]-RMIN[j]); globals.procDomain[2*j+1] = RMAX[j]+0.25*(RMAX[j]-RMIN[j]); } MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &(globals.mpiSize)); MPI_Comm_rank(MPI_COMM_WORLD, &(globals.mpiRank)); ps.reserve(MAX_NUM_PARTICLES_PER_CPU); cout <<"creating new data structure"<<endl; CdataLL *data = new CdataLL(ps,globals,true); #ifdef LIQ_DEM cout <<"adding dem particles"<<endl; cout <<"going to add "<<NDEM<<" dem particles at random locations...."<<endl; newOrigin[2] = CYLINDER_ORIGIN[2]+DEM_DISK_HEIGHT+2.0*DEM_RADIUS; cout <<"adding cylinder at origin"<<newOrigin<<endl; Nmisc::addRandomDEMparticlesCyl(data,newOrigin,CYLINDER_RADIUS-2.0*DEM_RADIUS,CYLINDER_HEIGHT-4.0*DEM_RADIUS-2*DEM_DISK_HEIGHT,NDEM); #endif //newOrigin = CYLINDER_ORIGIN; //origin[2] += 1.6*PSEP; //Nmisc::sphCylinder(ps,origin); #ifdef WET_START const double totalDEMVol = NDEM*(4.0/3.0)*PI*pow(DEM_RADIUS,3); //const double newLiqDens = DENS; const double liqVol = PI*pow(CYLINDER_RADIUS,2)*CYLINDER_HEIGHT*0.90; //const double newLiqDens = DENS*(liqVol-totalDEMVol)/(liqVol); const double newLiqDens = DENS; cout << "porosity = "<<1.0-totalDEMVol/(liqVol)<<endl; cout << "after adding dem particles, new liquid density is "<<newLiqDens<<endl; cout <<"adding liquid particles"<<endl; for (int i=0; i<2*NX+3; i++) { cout << "\rParticle ("<<i<<","<<"0"<<"). Generation "<<((i+2)*(NY+4))/double((NX+4)*(NY+4))*100<<"\% complete"<<flush; for (int j=0; j<2*NY+3; j++) { for (int k=0; k<=NZ; k++) { p.tag = ps.size()+1; p.r = (i)*PSEP+BMIN[0],j*PSEP+BMIN[1],(k+1)*PSEP+CYLINDER_ORIGIN[2]; if ((p.r[2]<CYLINDER_ORIGIN[2])||(p.r[0]*p.r[0]+p.r[1]*p.r[1]>pow(CYLINDER_RADIUS-PSEP,2))) continue; p.dens = newLiqDens; p.mass = pow(PSEP,NDIM)*newLiqDens; p.h = HFAC*pow(p.mass/p.dens,1.0/NDIM); p.v = 0.0; p.vhat = p.v; p.iam = sph; ps.push_back(p); } } } for (int k=0; k<int(INLET_HEIGHT/PSEP)+1; k++) { vect tmp = CYLINDER_ORIGIN; tmp[2] -= INLET_HEIGHT-k*PSEP; if (k<4) { myBoundaryCircle(ps,tmp,0,int((INLET_RADIUS-1.4*PSEP)/PSEP)*PSEP,sphBoundary); } else { myBoundaryCircle(ps,tmp,0,int((INLET_RADIUS-1.4*PSEP)/PSEP)*PSEP,sph); } } #endif /* p.tag = ps.size()+1; p.r = CYLINDER_ORIGIN; p.r[2] = CYLINDER_HEIGHT; p.dens = DEM_DENS; p.h = DEM_RADIUS/2; p.mass = (4.0/3.0)*PI*pow(DEM_RADIUS,3)*DEM_DENS; p.v = 0.0; p.vhat = p.v; p.iam = dem; //ps.push_back(p); */ cout << "Total number of particles = " << ps.size() << endl; //CglobalVars globals; vector<vector<double> > vprocDomain(globals.mpiSize); vector<Array<int,NDIM> > vprocNeighbrs(globals.mpiSize); vector<particleContainer > vps; vectInt split; split = NCPU_X,NCPU_Y,NCPU_Z; particleContainer pps; for (int i=0; i<ps.size(); i++) { pps.push_back(ps[i]); } Nmisc::splitDomain(pps,split,vps,vprocDomain,vprocNeighbrs); cout << "Opening files for writing..."<<endl; Cio_data_vtk ioFile(filename.c_str(),&globals); cout << "Calculating Output stuff.."<<endl; //sph.calcOutputVars(); //customOutput.calcOutput(0,&customSim,&ioFile); cout << "Writing Restart data to file..."<<endl; int nProc = product(split); for (int i=0; i<nProc; i++) { globals.mpiRank = i; for (int j=0; j<NDIM*2; j++) globals.procDomain[j] = vprocDomain[i][j]; globals.procNeighbrs = vprocNeighbrs[i]; ioFile.setFilename(filename.c_str(),&globals); ioFile.writeGlobals(0,&globals); ioFile.writeRestart(0,vps[i],&globals); ioFile.writeDomain(0,&globals); globals.mpiRank = 0; } //ioFile.writeGlobals(0,&globals); //ioFile.writeDomain(0,vprocDomain,vprocNeighbrs); }