Skip to content
Snippets Groups Projects
IO_ascii.cpp 1.63 KiB
Newer Older
/*
 * IO_ADIOS2.cpp
 *
 *  Created on: Feb 2017
 *      Author: Norbert Podhorszki
 */

#include <iostream>
#include <iomanip>
#include <fstream>

#include "IO.h"

static std::ofstream of;
static std::streambuf *buf;

IO::IO( std::string output_basename, MPI_Comm comm )
{
    m_outputfilename = output_basename;

    if (m_outputfilename == "cout")
    {
        buf = std::cout.rdbuf();
    }
    else
    {
        int rank;
        MPI_Comm_rank( comm, &rank );
        std::string rs = std::to_string(rank);
        of.open(output_basename + rs + ".txt");
        buf = of.rdbuf();
    }
}

IO::~IO()
{
    if (m_outputfilename != "cout")
    {
        of.close();
    }
}

void IO::write( int step, std::shared_ptr<HeatTransfer> ht, std::shared_ptr<Settings> s, MPI_Comm comm)
{
    std::ostream out(buf);
    if( step == 1)
    {
        out << "rank=" << s->rank
                  << " size=" << s->ndx << "x" << s->ndy
                  << " offsets=" << s->offsx << ":" << s->offsy
                  << " step=" << step << std::endl;
        out << " time   row   columns " << s->offsy << "..." << s->offsy+s->ndy-1 << std::endl;
        out << "        ";
        for (int j = 1; j <= s->ndy; ++j) {
            out <<  std::setw(9) << s->offsy+j-1;
        }
        out << "\n--------------------------------------------------------------\n";
    }
    else
    {
        out << std::endl;
    }

    for (int i = 1; i <= s->ndx; ++i)
    {
        out <<  std::setw(5) << step << std::setw(5) << s->offsx+i-1;
        for (int j = 1; j <= s->ndy; ++j)
        {
            out <<  std::setw(9) << ht->T(i,j);
        }
        out << std::endl;
    }

}