⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dumphdf5.cpp

📁 pic 模拟程序!面向对象
💻 CPP
字号:
/* * DUMPHDF5.CPP * *  Implementation of dumpHDF5 class *  0.99 (KC, 11-9-97)  Replacing often used codes with funcitons */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include "dumpHDF5.h"#include <string>#include <txc_streams.h>#include "sptlrgn.h"#include "globalvars.h"#include <stdio.h>#include "plsmadev.h"#if defined(_MSC_VER)#ifdef OOPICPROextern "C" char theDumpFile[180];#elseextern "C" char* const volatile theDumpFile;#endifextern "C" char theRestoreFile[180];#else#ifdef OOPICPROextern char theDumpFile[180];#elseextern char* const volatile theDumpFile;#endifextern char theRestoreFile[180];#endifextern PlasmaDevice *theDevice;extern oopicList<SpatialRegion> *theRegions;using namespace std;
dumpHDF5::dumpHDF5(){#ifdef HAVE_HDF5#ifdef SCALAR_DOUBLE  h5Scalar = H5T_NATIVE_DOUBLE;#else  h5Scalar = H5T_NATIVE_FLOAT;#endif #endif //HAVE_HDF5  string temp = ".h5";  dumpFileName = theDumpFile;  //  dumpFileName = theDumpFile + temp;  dumpPeriod = 0;  datasetName = "Data";  mpiRankStr = "";  dumpIndexStr = "";  return;}dumpHDF5::~dumpHDF5(){}#ifdef HAVE_HDF5 void dumpHDF5::createFile(){  hid_t fileId;  fileId = H5Fcreate(dumpFileName.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);    H5Fclose(fileId);  return;} void dumpHDF5::setDumpIndex(int index){  //  strstream s;#ifdef HAVE_SSTREAM  stringstream s;#else  strstream s;#endif  s <<index<<ends;  dumpIndexStr = s.str();  dumpFileName = baseName + "_i" + dumpIndexStr;;  if(mpiRankStr.size() > 0)    dumpFileName = dumpFileName + "_p" + mpiRankStr;  dumpFileName += ".h5";  return;}void dumpHDF5::setMpiRank(int rank){  //  strstream s;#ifdef HAVE_SSTREAM  stringstream s;#else  strstream s;#endif  s <<rank<<ends;  mpiRankStr = s.str();  dumpFileName = baseName; + "_p" + mpiRankStr + ".h5";  if(dumpIndexStr.size() > 0)    dumpFileName = dumpFileName + "_i" + dumpIndexStr;  dumpFileName  = dumpFileName + "_p" + mpiRankStr + ".h5";  return;}void dumpHDF5::dumpH5(string baseName, int seqNumber, int rank){  //  strstream s;#ifdef HAVE_SSTREAM  stringstream s;#else  strstream s;#endif  dumpFileName = baseName;  //  cerr << "dump file name(HDF): "<< dumpFileName<<"\n";  hid_t fileId;   fileId = H5Fcreate(dumpFileName.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);      theDevice->dumpH5(*this);  H5Fclose(fileId);  return;}void dumpHDF5::readSimple(string dataPath,Scalar *data,int &dataLength){// data should be an unused pointer  hid_t fileId,datasetId,dataspaceId;  herr_t status;  fileId = H5Fopen(dumpFileName.c_str(), H5F_ACC_RDONLY, H5P_DEFAULT);  datasetId = H5Dopen(fileId,dataPath.c_str());  dataspaceId = H5Dget_space(datasetId );  int dataRank = H5Sget_simple_extent_ndims(dataspaceId);  hsize_t *sizes = new hsize_t[dataRank];  int res = H5Sget_simple_extent_dims(dataspaceId, sizes, NULL);  dataLength = 1;  for(int i=0;i<dataRank;i++)  {    dataLength = dataLength * sizes[i];  }  data = new Scalar[dataLength];  status = H5Dread(datasetId, h5Scalar,H5S_ALL, dataspaceId, H5P_DEFAULT, data);  status =    H5Sclose(dataspaceId);  status =    H5Dclose(datasetId);  delete [] sizes;  return;}void dumpHDF5::writeSimple(string dataPath,Scalar *data,int rank,int* size){// data is 1-D array of Scalars.// rank, size can describe a 2-D array of any dimension, but number of elements// should equal the number in 'data' hid_t fileId; // groupId,  hid_t datasetId,dataspaceId; herr_t status; fileId= H5Fopen(dumpFileName.c_str(), H5F_ACC_RDWR, H5P_DEFAULT);// set uip dimensions of dataspace hsize_t *dim = new hsize_t[rank]; for(int i=0;i<rank;i++)   dim[i] = size[i];  dataspaceId = H5Screate_simple(rank, dim, NULL); datasetId = H5Dcreate(fileId, dataPath.c_str(), h5Scalar, dataspaceId, H5P_DEFAULT); if(datasetId < 0){   status = H5Sclose(dataspaceId);   //  status = H5Dclose(datasetId);   status = H5Fclose(fileId);   return; }//write data to file status = H5Dwrite(datasetId, h5Scalar, H5S_ALL, dataspaceId, H5P_DEFAULT, data); status = H5Sclose(dataspaceId); status = H5Dclose(datasetId); status = H5Fclose(fileId); delete[] dim;  return;}void restoreHDF5(SpatialRegion * region,char* FileName)  throw(Oops){  //cerr << "\nentered restoreHDF5\n";  int seq = 0;  int mpiRank = 0;  dumpHDF5 restoreObj;  string name  = FileName;  restoreObj.setDumpFileName(name);  try{    region->restoreH5(restoreObj);  }  catch(Oops& oops2){
    oops2.prepend("dumpHDF5::restoreHDF5: Error: \n");//done
    throw oops2;
  }  return;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -