Skip to content
Snippets Groups Projects
  • wgodoy's avatar
    16aa78c9
    Modified file transports to enable write loop in size > 2Gb · 16aa78c9
    wgodoy authored
    Checking std::ios_base::failure exceptions
    IOChrono is off by default, each owner turns it on explicitly
    Modified FileDescriptor and FilePointer destructors
    Added Tests BPWriteRead for stdio and fstream
    Removed IO AddTransport with vector (shoud have been there?) to enable
    AddTransport in Tests
    16aa78c9
    History
    Modified file transports to enable write loop in size > 2Gb
    wgodoy authored
    Checking std::ios_base::failure exceptions
    IOChrono is off by default, each owner turns it on explicitly
    Modified FileDescriptor and FilePointer destructors
    Added Tests BPWriteRead for stdio and fstream
    Removed IO AddTransport with vector (shoud have been there?) to enable
    AddTransport in Tests
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
helloBPWriter_nompi.cpp 2.24 KiB
/*
 * Distributed under the OSI-approved Apache License, Version 2.0.  See
 * accompanying file Copyright.txt for details.
 *
 * helloBPWriter_nompi.cpp sequential non-mpi version of helloBPWriter
 *
 *  Created on: Jan 9, 2017
 *      Author: William F Godoy godoywf@ornl.gov
 */

#include <ios>       //std::ios_base::failure
#include <iostream>  //std::cout
#include <stdexcept> //std::invalid_argument std::exception
#include <vector>

#include <adios2.h>

int main(int argc, char *argv[])
{
    /** Application variable */
    std::vector<float> myFloats = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    const std::size_t Nx = myFloats.size();

    try
    {
        /** ADIOS class factory of IO class objects, DebugON is recommended */
        adios2::ADIOS adios(adios2::DebugON);

        /*** IO class object: settings and factory of Settings: Variables,
         * Parameters, Transports, and Execution: Engines */
        adios2::IO &bpIO = adios.DeclareIO("BPFile_N2N");
        bpIO.AddTransport("File", {{"Library", "stdio"}});

        /** global array: name, { shape (total dimensions) }, { start (local) },
         * { count (local) }, all are constant dimensions */
        adios2::Variable<float> &bpFloats = bpIO.DefineVariable<float>(
            "bpFloats", {}, {}, {Nx}, adios2::ConstantDims);

        /** Engine derived class, spawned to start IO operations */
        auto bpWriter = bpIO.Open("myVector.bp", adios2::OpenMode::Write);

        if (!bpWriter)
        {
            throw std::ios_base::failure(
                "ERROR: bpWriter not created at Open\n");
        }

        /** Write variable for buffering */
        bpWriter->Write<float>(bpFloats, myFloats.data());

        /** Create bp file, engine becomes unreachable after this*/
        bpWriter->Close();
    }
    catch (std::invalid_argument &e)
    {
        std::cout << "Invalid argument exception, STOPPING PROGRAM\n";
        std::cout << e.what() << "\n";
    }
    catch (std::ios_base::failure &e)
    {
        std::cout << "IO System base failure exception, STOPPING PROGRAM\n";
        std::cout << e.what() << "\n";
    }
    catch (std::exception &e)
    {
        std::cout << "Exception, STOPPING PROGRAM from rank\n";
        std::cout << e.what() << "\n";
    }

    return 0;
}