/* * Distributed under the OSI-approved Apache License, Version 2.0. See * accompanying file Copyright.txt for details. * * ADIOS1Reader.cpp * * Created on: Feb 27, 2017 * Author: Norbert Podhorszki pnorbert@ornl.gov */ #include "ADIOS1Reader.h" #include "ADIOS1Reader.tcc" #include <adios_error.h> #include "adios2/helper/adiosFunctions.h" // CSVToVector namespace adios2 { ADIOS1Reader::ADIOS1Reader(IO &io, const std::string &name, const Mode mode, MPI_Comm mpiComm) : Engine("ADIOS1Reader", io, name, mode, mpiComm), m_ADIOS1(name, mpiComm, io.m_DebugMode) { m_EndMessage = " in call to IO Open ADIOS1Reader " + m_Name + "\n"; Init(); m_ADIOS1.Open(io); } ADIOS1Reader::~ADIOS1Reader() { /* m_ADIOS1 deconstructor does close and finalize */ } StepStatus ADIOS1Reader::BeginStep(const StepMode mode, const float timeoutSeconds) { return m_ADIOS1.AdvanceStep(m_IO, mode, timeoutSeconds); } // PRIVATE #define declare_type(T) \ void ADIOS1Reader::DoGetSync(Variable<T> &variable, T *values) \ { \ m_ADIOS1.ScheduleReadCommon(variable.m_Name, variable.m_Start, \ variable.m_Count, variable.m_StepsStart, \ variable.m_StepsCount, \ variable.m_ReadAsLocalValue, \ variable.m_ReadAsJoined, (void *)values); \ m_ADIOS1.PerformReads(); \ } \ void ADIOS1Reader::DoGetDeferred(Variable<T> &variable, T *values) \ { \ m_ADIOS1.ScheduleReadCommon(variable.m_Name, variable.m_Start, \ variable.m_Count, variable.m_StepsStart, \ variable.m_StepsCount, \ variable.m_ReadAsLocalValue, \ variable.m_ReadAsJoined, (void *)values); \ } ADIOS2_FOREACH_TYPE_1ARG(declare_type) #undef declare_type void ADIOS1Reader::PerformGets() { m_ADIOS1.PerformReads(); } void ADIOS1Reader::EndStep() { m_ADIOS1.ReleaseStep(); } void ADIOS1Reader::Close(const int transportIndex) { m_ADIOS1.Close(); } // PRIVATE void ADIOS1Reader::Init() { if (m_DebugMode) { if (m_OpenMode != Mode::Read) { throw std::invalid_argument( "ERROR: ADIOS1Reader only supports OpenMode::r (read) access " "mode " + m_EndMessage); } } InitParameters(); InitTransports(); } void ADIOS1Reader::InitParameters() { m_ADIOS1.InitParameters(m_IO.m_Parameters); } void ADIOS1Reader::InitTransports() { m_ADIOS1.InitTransports(m_IO.m_TransportsParameters); } } // end namespace adios2