added: flag to HDF5 writer to avoid opening/closing the file between operations.
while closing/opening is necessary to ensure a non-corrupt file between time levels, this is very harmful for the performance in the HDF5toVTF converter git-svn-id: http://svn.sintef.no/trondheim/IFEM/trunk@1056 e10b68d5-8a6e-419e-a041-bce267b0401d
This commit is contained in:
@@ -154,7 +154,7 @@ int main (int argc, char** argv)
|
||||
<<"\nNumber of visualization points: "
|
||||
<< n[0] <<" "<< n[1] << " " << n[2] << std::endl;
|
||||
|
||||
HDF5Writer hdf(strtok(infile,"."),true);
|
||||
HDF5Writer hdf(strtok(infile,"."),true,true);
|
||||
XMLWriter xml(infile);
|
||||
xml.readInfo();
|
||||
|
||||
@@ -231,6 +231,7 @@ int main (int argc, char** argv)
|
||||
}
|
||||
if (!ok) return 3;
|
||||
}
|
||||
hdf.closeFile(levels,true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ class DataExporter
|
||||
//! \brief Default constructor.
|
||||
//! \param[in] dynWriters If \e true, delete the writers on destruction.
|
||||
DataExporter(bool dynWriters = false) : m_delete(dynWriters), m_level(-1) {}
|
||||
//! \brief The desctructor deletes the writers if \a dynWriters was \e true.
|
||||
//! \brief The destructor deletes the writers if \a dynWriters was \e true.
|
||||
~DataExporter();
|
||||
|
||||
//! \brief Registers an entry for storage.
|
||||
@@ -77,7 +77,7 @@ public:
|
||||
virtual int getLastTimeLevel() = 0;
|
||||
|
||||
virtual void openFile(int level) = 0;
|
||||
virtual void closeFile(int level) = 0;
|
||||
virtual void closeFile(int level, bool force=false) = 0;
|
||||
|
||||
virtual void writeVector(int level, const DataEntry& entry) = 0;
|
||||
virtual bool readVector(int level, const DataEntry& entry) = 0;
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
#endif
|
||||
|
||||
|
||||
HDF5Writer::HDF5Writer (const std::string& name, bool append)
|
||||
: DataWriter(name+".hdf5")
|
||||
HDF5Writer::HDF5Writer (const std::string& name, bool append, bool keepOpen)
|
||||
: DataWriter(name+".hdf5"), m_file(0), m_keepOpen(keepOpen)
|
||||
{
|
||||
#ifdef HAS_HDF5
|
||||
struct stat temp;
|
||||
@@ -60,6 +60,8 @@ int HDF5Writer::getLastTimeLevel ()
|
||||
|
||||
void HDF5Writer::openFile(int level)
|
||||
{
|
||||
if (m_file)
|
||||
return;
|
||||
#ifdef HAS_HDF5
|
||||
hid_t acc_tpl = H5P_DEFAULT;
|
||||
#ifdef PARALLEL_PETSC
|
||||
@@ -83,12 +85,15 @@ void HDF5Writer::openFile(int level)
|
||||
#endif
|
||||
}
|
||||
|
||||
void HDF5Writer::closeFile(int level)
|
||||
void HDF5Writer::closeFile(int level, bool force)
|
||||
{
|
||||
if (m_keepOpen && !force)
|
||||
return;
|
||||
#ifdef HAS_HDF5
|
||||
H5Fflush(m_file,H5F_SCOPE_GLOBAL);
|
||||
H5Fclose(m_file);
|
||||
m_flag = H5F_ACC_RDWR;
|
||||
m_file = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -11,13 +11,13 @@ class SIMbase;
|
||||
class HDF5Writer : public DataWriter
|
||||
{
|
||||
public:
|
||||
HDF5Writer(const std::string& name, bool append = false);
|
||||
HDF5Writer(const std::string& name, bool append = false, bool keepopen=false);
|
||||
virtual ~HDF5Writer() {}
|
||||
|
||||
virtual int getLastTimeLevel();
|
||||
|
||||
virtual void openFile(int level);
|
||||
virtual void closeFile(int level);
|
||||
virtual void closeFile(int level, bool force=false);
|
||||
|
||||
virtual void writeVector(int level, const DataEntry& entry);
|
||||
virtual bool readVector(int level, const DataEntry& entry);
|
||||
@@ -41,4 +41,5 @@ protected:
|
||||
|
||||
int m_file;
|
||||
unsigned int m_flag;
|
||||
bool m_keepOpen;
|
||||
};
|
||||
|
||||
@@ -41,7 +41,7 @@ void XMLWriter::openFile(int level)
|
||||
m_node = m_doc->InsertEndChild(element);
|
||||
}
|
||||
|
||||
void XMLWriter::closeFile(int level)
|
||||
void XMLWriter::closeFile(int level, bool close)
|
||||
{
|
||||
if (!m_doc || m_rank != 0)
|
||||
return;
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
const std::vector<Entry>& getEntries() const { return m_entry; }
|
||||
|
||||
virtual void openFile(int level);
|
||||
virtual void closeFile(int level);
|
||||
virtual void closeFile(int level, bool force=false);
|
||||
|
||||
virtual void writeVector(int level, const DataEntry& entry);
|
||||
virtual bool readVector(int level, const DataEntry& entry);
|
||||
|
||||
Reference in New Issue
Block a user