void writePlotFile (const std::string& dir, const MultiFab& mf, const Geometry& geom) { // // Only let 64 CPUs be writing at any one time. // VisMF::SetNOutFiles(64); // // Only the I/O processor makes the directory if it doesn't already exist. // if (ParallelDescriptor::IOProcessor()) if (!BoxLib::UtilCreateDirectory(dir, 0755)) BoxLib::CreateDirectoryFailed(dir); // // Force other processors to wait till directory is built. // ParallelDescriptor::Barrier(); std::string HeaderFileName = dir + "/Header"; VisMF::IO_Buffer io_buffer(VisMF::IO_Buffer_Size); std::ofstream HeaderFile; HeaderFile.rdbuf()->pubsetbuf(io_buffer.dataPtr(), io_buffer.size()); if (ParallelDescriptor::IOProcessor()) { // // Only the IOProcessor() writes to the header file. // HeaderFile.open(HeaderFileName.c_str(), std::ios::out|std::ios::trunc|std::ios::binary); if (!HeaderFile.good()) BoxLib::FileOpenFailed(HeaderFileName); HeaderFile << "NavierStokes-V1.1\n"; HeaderFile << mf.nComp() << '\n'; for (int ivar = 1; ivar <= mf.nComp(); ivar++) { HeaderFile << "Variable " << ivar << "\n"; } HeaderFile << BL_SPACEDIM << '\n'; HeaderFile << 0 << '\n'; HeaderFile << 0 << '\n'; for (int i = 0; i < BL_SPACEDIM; i++) HeaderFile << geom.ProbLo(i) << ' '; HeaderFile << '\n'; for (int i = 0; i < BL_SPACEDIM; i++) HeaderFile << geom.ProbHi(i) << ' '; HeaderFile << '\n'; HeaderFile << '\n'; HeaderFile << geom.Domain() << ' '; HeaderFile << '\n'; HeaderFile << 0 << ' '; HeaderFile << '\n'; for (int k = 0; k < BL_SPACEDIM; k++) HeaderFile << geom.CellSize()[k] << ' '; HeaderFile << '\n'; HeaderFile << geom.Coord() << '\n'; HeaderFile << "0\n"; } // Build the directory to hold the MultiFab at this level. // The name is relative to the directory containing the Header file. // static const std::string BaseName = "/Cell"; std::string Level = BoxLib::Concatenate("Level_", 0, 1); // // Now for the full pathname of that directory. // std::string FullPath = dir; if (!FullPath.empty() && FullPath[FullPath.length()-1] != '/') FullPath += '/'; FullPath += Level; // // Only the I/O processor makes the directory if it doesn't already exist. // if (ParallelDescriptor::IOProcessor()) if (!BoxLib::UtilCreateDirectory(FullPath, 0755)) BoxLib::CreateDirectoryFailed(FullPath); // // Force other processors to wait till directory is built. // ParallelDescriptor::Barrier(); if (ParallelDescriptor::IOProcessor()) { HeaderFile << 0 << ' ' << mf.boxArray().size() << ' ' << 0 << '\n'; HeaderFile << 0 << '\n'; for (int i = 0; i < mf.boxArray().size(); ++i) { RealBox loc = RealBox(mf.boxArray()[i],geom.CellSize(),geom.ProbLo()); for (int n = 0; n < BL_SPACEDIM; n++) HeaderFile << loc.lo(n) << ' ' << loc.hi(n) << '\n'; } std::string PathNameInHeader = Level; PathNameInHeader += BaseName; HeaderFile << PathNameInHeader << '\n'; } // // Use the Full pathname when naming the MultiFab. // std::string TheFullPath = FullPath; TheFullPath += BaseName; VisMF::Write(mf,TheFullPath); }
void BoxLib::WriteGenericPlotfileHeader (std::ostream &HeaderFile, int nlevels, const Array<BoxArray> &bArray, const Array<std::string> &varnames, const Array<Geometry> &geom, Real time, const Array<int> &level_steps, const Array<IntVect> &ref_ratio, const std::string &versionName, const std::string &levelPrefix, const std::string &mfPrefix) { BL_PROFILE("WriteGenericPlotfileHeader()"); BL_ASSERT(nlevels <= bArray.size()); BL_ASSERT(nlevels <= geom.size()); BL_ASSERT(nlevels <= ref_ratio.size()+1); BL_ASSERT(nlevels <= level_steps.size()); int finest_level(nlevels - 1); HeaderFile.precision(17); VisMF::IO_Buffer io_buffer(VisMF::IO_Buffer_Size); HeaderFile.rdbuf()->pubsetbuf(io_buffer.dataPtr(), io_buffer.size()); // ---- this is the generic plot file type name HeaderFile << versionName << '\n'; HeaderFile << varnames.size() << '\n'; for (int ivar = 0; ivar < varnames.size(); ++ivar) { HeaderFile << varnames[ivar] << "\n"; } HeaderFile << BL_SPACEDIM << '\n'; HeaderFile << time << '\n'; HeaderFile << finest_level << '\n'; for (int i = 0; i < BL_SPACEDIM; ++i) { HeaderFile << Geometry::ProbLo(i) << ' '; } HeaderFile << '\n'; for (int i = 0; i < BL_SPACEDIM; ++i) { HeaderFile << Geometry::ProbHi(i) << ' '; } HeaderFile << '\n'; for (int i = 0; i < finest_level; ++i) { HeaderFile << ref_ratio[i][0] << ' '; } HeaderFile << '\n'; for (int i = 0; i <= finest_level; ++i) { HeaderFile << geom[i].Domain() << ' '; } HeaderFile << '\n'; for (int i = 0; i <= finest_level; ++i) { HeaderFile << level_steps[i] << ' '; } HeaderFile << '\n'; for (int i = 0; i <= finest_level; ++i) { for (int k = 0; k < BL_SPACEDIM; ++k) { HeaderFile << geom[i].CellSize()[k] << ' '; } HeaderFile << '\n'; } HeaderFile << (int) Geometry::Coord() << '\n'; HeaderFile << "0\n"; for (int level = 0; level <= finest_level; ++level) { HeaderFile << level << ' ' << bArray[level].size() << ' ' << time << '\n'; HeaderFile << level_steps[level] << '\n'; for (int i = 0; i < bArray[level].size(); ++i) { const Box &b(bArray[level][i]); RealBox loc = RealBox(b, geom[level].CellSize(), geom[level].ProbLo()); for (int n = 0; n < BL_SPACEDIM; ++n) { HeaderFile << loc.lo(n) << ' ' << loc.hi(n) << '\n'; } } HeaderFile << MultiFabHeaderPath(level, levelPrefix, mfPrefix) << '\n'; } }
/** * Get info from a "url" file -- a media stream file. * This should really get more metainfo, but I'll leave that * to later. * * @param filename .url file to process * @param pmp3 MP3FILE structure that must be filled * @returns TRUE if file should be added to db, FALSE otherwise */ int scan_get_urlinfo(char *filename, MP3FILE *pmp3) { IOHANDLE hfile; char *head, *tail; char linebuffer[256]; uint32_t len; DPRINTF(E_DBG,L_SCAN,"Getting URL file info\n"); if(!(hfile = io_new())) { DPRINTF(E_LOG,L_SCAN,"Can't create file handle\n"); return FALSE; } if(!io_open(hfile,"file://%U?ascii=1",filename)) { DPRINTF(E_WARN,L_SCAN,"Could not open %s for reading: %s\n",filename, io_errstr(hfile)); io_dispose(hfile); return FALSE; } io_buffer(hfile); len = sizeof(linebuffer); if(!io_readline(hfile,(unsigned char *)linebuffer,&len)) { DPRINTF(E_WARN,L_SCAN,"Error reading from file %s: %s",filename,io_errstr(hfile)); io_close(hfile); io_dispose(hfile); return FALSE; } while((linebuffer[strlen(linebuffer)-1] == '\n') || (linebuffer[strlen(linebuffer)-1] == '\r')) { linebuffer[strlen(linebuffer)-1] = '\0'; } head=linebuffer; tail=strchr(head,','); if(!tail) { DPRINTF(E_LOG,L_SCAN,"Badly formatted .url file - must be bitrate,descr,url\n"); io_close(hfile); io_dispose(hfile); return FALSE; } pmp3->bitrate=atoi(head); head=++tail; tail=strchr(head,','); if(!tail) { DPRINTF(E_LOG,L_SCAN,"Badly formatted .url file - must be bitrate,descr,url\n"); io_close(hfile); io_dispose(hfile); return FALSE; } *tail++='\0'; pmp3->title=strdup(head); pmp3->url=strdup(tail); io_close(hfile); io_dispose(hfile); DPRINTF(E_DBG,L_SCAN," Title: %s\n",pmp3->title); DPRINTF(E_DBG,L_SCAN," Bitrate: %d\n",pmp3->bitrate); DPRINTF(E_DBG,L_SCAN," URL: %s\n",pmp3->url); return TRUE; }
int main (int argc, char* argv[]) { if (argc == 1) PrintUsage(argv[0]); BoxLib::Initialize(argc,argv); ParmParse pp; if (pp.contains("help")) PrintUsage(argv[0]); std::string iFile; pp.query("infile", iFile); // Input File if (iFile.empty() && ParallelDescriptor::IOProcessor()) BoxLib::Abort("You must specify `infile'"); int nCrsRatio = pp.countval("crsratio"); if (nCrsRatio == 0) BoxLib::Abort("You must specify `crsratio'"); Array<int> crsRatio(nCrsRatio); for (int n = 0; n < nCrsRatio; n++) pp.get("crsratio", crsRatio[n], n); //------------------------------------// // Open the Grid File and Read Header // //------------------------------------// std::ifstream is; VisMF::IO_Buffer io_buffer(VisMF::IO_Buffer_Size); is.rdbuf()->pubsetbuf(io_buffer.dataPtr(), io_buffer.size()); is.open(iFile.c_str(), std::ios::in); if (is.fail()) BoxLib::FileOpenFailed(iFile); int nRefLevels; is >> nRefLevels; if (nCrsRatio != nRefLevels) BoxLib::Abort("nCrsRatio != nRefLevels"); std::cout << nRefLevels << std::endl; //----------------------------------------------------// // Loop Through Refined Levels and Generate MultiFabs // //----------------------------------------------------// int nGrds; for (int lev = 0; lev < nRefLevels; lev++) { is >> nGrds; std::cout << nGrds << std::endl; Box inBox; for (int bx=0; bx < nGrds; bx++) { is >> inBox; inBox.coarsen(crsRatio[lev]); std::cout << inBox << std::endl; } } BoxLib::Finalize(); return 0; }
void SMC::writePlotFile (int istep) { const std::string& dir = BoxLib::Concatenate("plt",istep,5); MultiFab mf(U.boxArray(), nplot, 0); #ifdef _OPENMP #pragma omp parallel #endif for (MFIter mfi(mf); mfi.isValid(); ++mfi) { const Box& bx = mfi.tilebox(); make_plot_3d(bx.loVect(), bx.hiVect(), BL_TO_FORTRAN_3D(mf[mfi]), BL_TO_FORTRAN_3D( U[mfi])); } // // Only let 64 CPUs be writing at any one time. // VisMF::SetNOutFiles(64); // // Only the I/O processor makes the directory if it doesn't already exist. // if (ParallelDescriptor::IOProcessor()) if (!BoxLib::UtilCreateDirectory(dir, 0755)) BoxLib::CreateDirectoryFailed(dir); // // Force other processors to wait till directory is built. // ParallelDescriptor::Barrier(); std::string HeaderFileName = dir + "/Header"; VisMF::IO_Buffer io_buffer(VisMF::IO_Buffer_Size); std::ofstream HeaderFile; HeaderFile.rdbuf()->pubsetbuf(io_buffer.dataPtr(), io_buffer.size()); if (ParallelDescriptor::IOProcessor()) { // // Only the IOProcessor() writes to the header file. // HeaderFile.open(HeaderFileName.c_str(), std::ios::out|std::ios::trunc|std::ios::binary); if (!HeaderFile.good()) BoxLib::FileOpenFailed(HeaderFileName); HeaderFile << "NavierStokes-V1.1\n"; HeaderFile << mf.nComp() << '\n'; // For now, set this manually HeaderFile << "rho" << "\n"; HeaderFile << "vx" << "\n"; HeaderFile << "vy" << "\n"; HeaderFile << "vz" << "\n"; HeaderFile << "T" << "\n"; HeaderFile << "Y(H2)" << "\n"; HeaderFile << "Y(O2)" << "\n"; HeaderFile << "Y(H2O)" << "\n"; HeaderFile << "Y(H)" << "\n"; HeaderFile << "Y(O)" << "\n"; HeaderFile << "Y(OH)" << "\n"; HeaderFile << "Y(HO2)" << "\n"; HeaderFile << "Y(H2O2)" << "\n"; HeaderFile << "Y(N2)" << "\n"; HeaderFile << BL_SPACEDIM << '\n'; HeaderFile << t << '\n'; HeaderFile << 0 << '\n'; for (int i = 0; i < BL_SPACEDIM; i++) HeaderFile << geom.ProbLo(i) << ' '; HeaderFile << '\n'; for (int i = 0; i < BL_SPACEDIM; i++) HeaderFile << geom.ProbHi(i) << ' '; HeaderFile << '\n'; HeaderFile << '\n'; HeaderFile << geom.Domain() << ' '; HeaderFile << '\n'; HeaderFile << 0 << ' '; HeaderFile << '\n'; for (int k = 0; k < BL_SPACEDIM; k++) HeaderFile << geom.CellSize()[k] << ' '; HeaderFile << '\n'; HeaderFile << geom.Coord() << '\n'; HeaderFile << "0\n"; } // Build the directory to hold the MultiFab at this level. // The name is relative to the directory containing the Header file. // static const std::string BaseName = "/Cell"; std::string Level = BoxLib::Concatenate("Level_", 0, 1); // // Now for the full pathname of that directory. // std::string FullPath = dir; if (!FullPath.empty() && FullPath[FullPath.length()-1] != '/') FullPath += '/'; FullPath += Level; // // Only the I/O processor makes the directory if it doesn't already exist. // if (ParallelDescriptor::IOProcessor()) if (!BoxLib::UtilCreateDirectory(FullPath, 0755)) BoxLib::CreateDirectoryFailed(FullPath); // // Force other processors to wait till directory is built. // ParallelDescriptor::Barrier(); if (ParallelDescriptor::IOProcessor()) { HeaderFile << 0 << ' ' << mf.boxArray().size() << ' ' << 0 << '\n'; HeaderFile << 0 << '\n'; for (int i = 0; i < mf.boxArray().size(); ++i) { RealBox loc = RealBox(mf.boxArray()[i],geom.CellSize(),geom.ProbLo()); for (int n = 0; n < BL_SPACEDIM; n++) HeaderFile << loc.lo(n) << ' ' << loc.hi(n) << '\n'; } std::string PathNameInHeader = Level; PathNameInHeader += BaseName; HeaderFile << PathNameInHeader << '\n'; } // // Use the Full pathname when naming the MultiFab. // std::string TheFullPath = FullPath; TheFullPath += BaseName; VisMF::Write(mf,TheFullPath); }