/* * 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; } }