Loading source/adios2/engine/hdf5/HDF5ReaderP.cpp +42 −55 Original line number Diff line number Diff line Loading @@ -29,7 +29,11 @@ HDF5ReaderP::HDF5ReaderP(IO &io, const std::string &name, const Mode openMode, Init(); } HDF5ReaderP::~HDF5ReaderP() { DoClose(); } HDF5ReaderP::~HDF5ReaderP() { if (IsValid()) DoClose(); } bool HDF5ReaderP::IsValid() { Loading Loading @@ -257,7 +261,6 @@ void HDF5ReaderP::UseHDFRead(Variable<T> &variable, T *data, hid_t h5Type) StepStatus HDF5ReaderP::BeginStep(StepMode mode, const float timeoutSeconds) { m_InStreamMode = true; int ts = m_H5File.GetNumAdiosSteps(); if (m_StreamAt >= ts) Loading @@ -266,6 +269,21 @@ StepStatus HDF5ReaderP::BeginStep(StepMode mode, const float timeoutSeconds) return StepStatus::EndOfStream; } if (m_DeferredStack.size() > 0) { // EndStep was not called! return StepStatus::NotReady; } if (m_InStreamMode && (m_StreamAt == m_IO.m_EngineStep)) { // EndStep() was not called after BeginStep() // otherwise m_StreamAt would have been increated by 1 return StepStatus::OtherError; } m_InStreamMode = true; m_IO.m_ReadStreaming = true; m_IO.m_EngineStep = m_StreamAt; Loading @@ -286,43 +304,33 @@ void HDF5ReaderP::EndStep() void HDF5ReaderP::PerformGets() { // looks this this is not enforced to be specific to stream mode!! if (!m_InStreamMode) { #define declare_type(T) \ for (std::string variableName : m_DeferredStack) \ { \ Variable<T> *var = m_IO.InquireVariable<T>(variableName); \ if (var != nullptr) \ { \ hid_t h5Type = m_H5File.GetHDF5Type<T>(); \ UseHDFRead(*var, var->GetData(), h5Type); \ break; \ } \ } ADIOS2_FOREACH_TYPE_1ARG(declare_type) #undef declare_type // throw std::runtime_error( // "PerformGets() needs to follow stream read sequeuences."); return; } #define declare_type(T) \ for (std::string variableName : m_DeferredStack) \ { \ const std::string type = m_IO.InquireVariableType(variableName); \ if (type == helper::GetType<T>()) \ { \ Variable<T> *var = m_IO.InquireVariable<T>(variableName); \ if (var != nullptr) \ { \ if (m_InStreamMode) \ { \ var->m_StepsStart = m_StreamAt; \ var->m_StepsCount = 1; \ } \ hid_t h5Type = m_H5File.GetHDF5Type<T>(); \ UseHDFRead(*var, var->GetData(), h5Type); \ break; \ } \ } \ } ADIOS2_FOREACH_TYPE_1ARG(declare_type) #undef declare_type // // clear the list here so only read the variables once // (other functions like EndStep() will call PerformToGet() also) // m_DeferredStack.clear(); } Loading Loading @@ -354,32 +362,11 @@ ADIOS2_FOREACH_TYPE_1ARG(declare_type) void HDF5ReaderP::DoClose(const int transportIndex) { // printf("ReaderP::DoClose() %lu\n", m_DeferredStack.size()); if (m_DeferredStack.size() > 0) { if (m_InStreamMode) { PerformGets(); } else { #define declare_type(T) \ for (std::string variableName : m_DeferredStack) \ { \ Variable<T> *var = m_IO.InquireVariable<T>(variableName); \ if (var != nullptr) \ { \ hid_t h5Type = m_H5File.GetHDF5Type<T>(); \ UseHDFRead(*var, var->GetData(), h5Type); \ break; \ } \ } ADIOS2_FOREACH_TYPE_1ARG(declare_type) #undef declare_type m_DeferredStack.clear(); } } /* */ EndStep(); /* */ m_H5File.Close(); } Loading source/adios2/engine/hdf5/HDF5ReaderP.tcc +1 −1 Original line number Diff line number Diff line Loading @@ -102,7 +102,7 @@ template <class T> std::vector<typename Variable<T>::Info> HDF5ReaderP::GetBlocksInfo(const Variable<T> &variable, const size_t step) const { BlocksInfoCommon(variable); return BlocksInfoCommon(variable); } } // end namespace engine Loading Loading
source/adios2/engine/hdf5/HDF5ReaderP.cpp +42 −55 Original line number Diff line number Diff line Loading @@ -29,7 +29,11 @@ HDF5ReaderP::HDF5ReaderP(IO &io, const std::string &name, const Mode openMode, Init(); } HDF5ReaderP::~HDF5ReaderP() { DoClose(); } HDF5ReaderP::~HDF5ReaderP() { if (IsValid()) DoClose(); } bool HDF5ReaderP::IsValid() { Loading Loading @@ -257,7 +261,6 @@ void HDF5ReaderP::UseHDFRead(Variable<T> &variable, T *data, hid_t h5Type) StepStatus HDF5ReaderP::BeginStep(StepMode mode, const float timeoutSeconds) { m_InStreamMode = true; int ts = m_H5File.GetNumAdiosSteps(); if (m_StreamAt >= ts) Loading @@ -266,6 +269,21 @@ StepStatus HDF5ReaderP::BeginStep(StepMode mode, const float timeoutSeconds) return StepStatus::EndOfStream; } if (m_DeferredStack.size() > 0) { // EndStep was not called! return StepStatus::NotReady; } if (m_InStreamMode && (m_StreamAt == m_IO.m_EngineStep)) { // EndStep() was not called after BeginStep() // otherwise m_StreamAt would have been increated by 1 return StepStatus::OtherError; } m_InStreamMode = true; m_IO.m_ReadStreaming = true; m_IO.m_EngineStep = m_StreamAt; Loading @@ -286,43 +304,33 @@ void HDF5ReaderP::EndStep() void HDF5ReaderP::PerformGets() { // looks this this is not enforced to be specific to stream mode!! if (!m_InStreamMode) { #define declare_type(T) \ for (std::string variableName : m_DeferredStack) \ { \ Variable<T> *var = m_IO.InquireVariable<T>(variableName); \ if (var != nullptr) \ { \ hid_t h5Type = m_H5File.GetHDF5Type<T>(); \ UseHDFRead(*var, var->GetData(), h5Type); \ break; \ } \ } ADIOS2_FOREACH_TYPE_1ARG(declare_type) #undef declare_type // throw std::runtime_error( // "PerformGets() needs to follow stream read sequeuences."); return; } #define declare_type(T) \ for (std::string variableName : m_DeferredStack) \ { \ const std::string type = m_IO.InquireVariableType(variableName); \ if (type == helper::GetType<T>()) \ { \ Variable<T> *var = m_IO.InquireVariable<T>(variableName); \ if (var != nullptr) \ { \ if (m_InStreamMode) \ { \ var->m_StepsStart = m_StreamAt; \ var->m_StepsCount = 1; \ } \ hid_t h5Type = m_H5File.GetHDF5Type<T>(); \ UseHDFRead(*var, var->GetData(), h5Type); \ break; \ } \ } \ } ADIOS2_FOREACH_TYPE_1ARG(declare_type) #undef declare_type // // clear the list here so only read the variables once // (other functions like EndStep() will call PerformToGet() also) // m_DeferredStack.clear(); } Loading Loading @@ -354,32 +362,11 @@ ADIOS2_FOREACH_TYPE_1ARG(declare_type) void HDF5ReaderP::DoClose(const int transportIndex) { // printf("ReaderP::DoClose() %lu\n", m_DeferredStack.size()); if (m_DeferredStack.size() > 0) { if (m_InStreamMode) { PerformGets(); } else { #define declare_type(T) \ for (std::string variableName : m_DeferredStack) \ { \ Variable<T> *var = m_IO.InquireVariable<T>(variableName); \ if (var != nullptr) \ { \ hid_t h5Type = m_H5File.GetHDF5Type<T>(); \ UseHDFRead(*var, var->GetData(), h5Type); \ break; \ } \ } ADIOS2_FOREACH_TYPE_1ARG(declare_type) #undef declare_type m_DeferredStack.clear(); } } /* */ EndStep(); /* */ m_H5File.Close(); } Loading
source/adios2/engine/hdf5/HDF5ReaderP.tcc +1 −1 Original line number Diff line number Diff line Loading @@ -102,7 +102,7 @@ template <class T> std::vector<typename Variable<T>::Info> HDF5ReaderP::GetBlocksInfo(const Variable<T> &variable, const size_t step) const { BlocksInfoCommon(variable); return BlocksInfoCommon(variable); } } // end namespace engine Loading