Skip to content
Snippets Groups Projects
ADIOS1Reader.cpp 3.18 KiB
Newer Older
 * Distributed under the OSI-approved Apache License, Version 2.0.  See
 * accompanying file Copyright.txt for details.
 *
 *
 *  Created on: Feb 27, 2017
 *      Author: Norbert Podhorszki pnorbert@ornl.gov
#include "ADIOS1Reader.tcc"
#include "adios2/helper/adiosFunctions.h" // CSVToVector

namespace adios2
ADIOS1Reader::ADIOS1Reader(IO &io, const std::string &name, const Mode openMode,
                           MPI_Comm mpiComm)
pnorbert's avatar
pnorbert committed
: Engine("ADIOS1Reader", io, name, openMode, mpiComm),
  m_ADIOS1(name, mpiComm, io.m_DebugMode)
    m_EndMessage = " in call to IO Open ADIOS1Reader " + m_Name + "\n";

pnorbert's avatar
pnorbert committed
    m_ADIOS1.Open(); // adios_read_init_method(m_ReadMethod, mpiComm, "");
    m_ADIOS1.GenerateVariables(io);
pnorbert's avatar
pnorbert committed
    /* m_ADIOS1 deconstructor does close and finalize */
pnorbert's avatar
pnorbert committed
AdvanceStatus ADIOS1Reader::BeginStep(AdvanceMode mode, const float timeout_sec)
pnorbert's avatar
pnorbert committed
    return m_ADIOS1.AdvanceStep(mode, timeout_sec);
pnorbert's avatar
pnorbert committed
// PRIVATE

#define declare_type(T)                                                        \
pnorbert's avatar
pnorbert committed
    void ADIOS1Reader::DoGetSync(Variable<T> &variable, T *values)             \
    {                                                                          \
pnorbert's avatar
pnorbert committed
        m_ADIOS1.ScheduleReadCommon(variable.m_Name, variable.m_Start,         \
                                    variable.m_Count, variable.m_StepStart,    \
                                    variable.m_StepCount,                      \
                                    variable.m_ReadAsLocalValue,               \
                                    variable.m_ReadAsJoined, (void *)values);  \
pnorbert's avatar
pnorbert committed
        m_ADIOS1.PerformReads();                                               \
    }                                                                          \
    void ADIOS1Reader::DoGetDeferred(Variable<T> &variable, T *values)         \
pnorbert's avatar
pnorbert committed
        m_ADIOS1.ScheduleReadCommon(variable.m_Name, variable.m_Start,         \
                                    variable.m_Count, variable.m_StepStart,    \
                                    variable.m_StepCount,                      \
                                    variable.m_ReadAsLocalValue,               \
                                    variable.m_ReadAsJoined, (void *)values);  \
ADIOS2_FOREACH_TYPE_1ARG(declare_type)
#undef declare_type
pnorbert's avatar
pnorbert committed
void ADIOS1Reader::PerformGets() { m_ADIOS1.PerformReads(); }
pnorbert's avatar
pnorbert committed
void ADIOS1Reader::EndStep() { m_ADIOS1.ReleaseStep(); }
pnorbert's avatar
pnorbert committed
void ADIOS1Reader::Close(const int transportIndex) { m_ADIOS1.Close(); }

// PRIVATE
William F Godoy's avatar
William F Godoy committed
    if (m_DebugMode)
        if (m_OpenMode != Mode::Read)
            throw std::invalid_argument(
                "ERROR: ADIOS1Reader only supports OpenMode::r (read) access "
                "mode " +
                m_EndMessage);
        }
    InitTransports();
pnorbert's avatar
pnorbert committed
    m_ADIOS1.InitParameters(m_IO.m_Parameters);
pnorbert's avatar
pnorbert committed
    m_ADIOS1.InitTransports(m_IO.m_TransportsParameters);
} // end namespace