blob: 806f44f7439e493d07bfb16c0084729a07ae7588 [file] [log] [blame]
/*
* WriteXY.cc
*
* Created on: Dec 16, 2013
* Author: cferenba
*
* Copyright (c) 2012, Los Alamos National Security, LLC.
* All rights reserved.
* Use of this source code is governed by a BSD-style open-source
* license; see top-level LICENSE file for full license text.
*/
#include "WriteXY.hh"
#include <fstream>
#include <iomanip>
#include "Parallel.hh"
#include "Mesh.hh"
using namespace std;
WriteXY::WriteXY(Mesh* m) : mesh(m) {}
WriteXY::~WriteXY() {}
void WriteXY::write(
const string& basename,
const double* zr,
const double* ze,
const double* zp) {
using Parallel::numpe;
using Parallel::mype;
const int numz = mesh->numz;
int gnumz = numz;
Parallel::globalSum(gnumz);
gnumz = (mype == 0 ? gnumz : 0);
vector<int> penumz(mype == 0 ? numpe : 0);
Parallel::gather(numz, &penumz[0]);
vector<double> gzr(gnumz), gze(gnumz), gzp(gnumz);
Parallel::gatherv(&zr[0], numz, &gzr[0], &penumz[0]);
Parallel::gatherv(&ze[0], numz, &gze[0], &penumz[0]);
Parallel::gatherv(&zp[0], numz, &gzp[0], &penumz[0]);
if (mype == 0) {
string xyname = basename + ".xy";
ofstream ofs(xyname.c_str());
ofs << scientific << setprecision(8);
ofs << "# zr" << endl;
for (int z = 0; z < gnumz; ++z) {
ofs << setw(5) << (z + 1) << setw(18) << gzr[z] << endl;
}
ofs << "# ze" << endl;
for (int z = 0; z < gnumz; ++z) {
ofs << setw(5) << (z + 1) << setw(18) << gze[z] << endl;
}
ofs << "# zp" << endl;
for (int z = 0; z < gnumz; ++z) {
ofs << setw(5) << (z + 1) << setw(18) << gzp[z] << endl;
}
ofs.close();
} // if mype
}