Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ADIOS1Writer.cpp 2.53 KiB
/*
 * Distributed under the OSI-approved Apache License, Version 2.0.  See
 * accompanying file Copyright.txt for details.
 *
 * ADIOS1Writer.cpp
 * Class to write files using old adios 1.x library.
 * It requires adios 1.x installed
 *
 *  Created on: Mar 27, 2017
 *      Author: Norbert Podhorszki pnorbert@ornl.gov
 */

#include "ADIOS1Writer.h"

#include "adios2/helper/adiosFunctions.h"

// Enable compatibility with ADIOS 1.10 adios_declare_group signature
#if !ADIOS_VERSION_GE(1, 11, 0)
#define adios_stat_default adios_flag_yes
#endif

namespace adios2
{

ADIOS1Writer::ADIOS1Writer(IO &io, const std::string &name, const Mode mode,
                           MPI_Comm mpiComm)
: Engine("ADIOS1Writer", io, name, mode, mpiComm),
  m_ADIOS1(io.m_Name, name, mpiComm, io.m_DebugMode)
{
    m_EndMessage = " in call to ADIOS1Writer " + m_Name + " Open\n";
    Init();
}

StepStatus ADIOS1Writer::BeginStep(StepMode mode, const float timeoutSeconds)
{
    return StepStatus::OK;
}

/* PutDeferred = PutSync, so nothing to be done in PerformPuts */
void ADIOS1Writer::PerformPuts() {}

void ADIOS1Writer::EndStep() { m_ADIOS1.Advance(); }

void ADIOS1Writer::Close(const int transportIndex) { m_ADIOS1.Close(); }

// PRIVATE
void ADIOS1Writer::Init()
{
    InitParameters();
    InitTransports();
    m_ADIOS1.Open(m_OpenMode);
}

#define declare_type(T)                                                        \
    void ADIOS1Writer::DoPutSync(Variable<T> &variable, const T *values)       \
    {                                                                          \
        m_ADIOS1.WriteVariable(variable.m_Name, variable.m_ShapeID,            \
                               variable.m_Count, variable.m_Shape,             \
                               variable.m_Start, values);                      \
    }                                                                          \
    void ADIOS1Writer::DoPutDeferred(Variable<T> &variable, const T *values)   \
    {                                                                          \
        m_ADIOS1.WriteVariable(variable.m_Name, variable.m_ShapeID,            \
                               variable.m_Count, variable.m_Shape,             \
                               variable.m_Start, values);                      \
    }
ADIOS2_FOREACH_TYPE_1ARG(declare_type)
#undef declare_type

void ADIOS1Writer::InitParameters()
{
    m_ADIOS1.InitParameters(m_IO.m_Parameters);
}

void ADIOS1Writer::InitTransports()
{
    m_ADIOS1.InitTransports(m_IO.m_TransportsParameters);
}

} // end namespace adios2