[TEST]UPSTREAM: Pick some source changes from 48080d0a97
* Sync new folder structure
This commit is contained in:
173
AMSS_NCKU_source/Monitor/monitor.C
Normal file
173
AMSS_NCKU_source/Monitor/monitor.C
Normal file
@@ -0,0 +1,173 @@
|
||||
|
||||
#ifdef newc
|
||||
#include <cstdio>
|
||||
using namespace std;
|
||||
#else
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
#include "unistd.h"
|
||||
|
||||
#include "monitor.h"
|
||||
#include "parameters.h"
|
||||
#include "misc.h"
|
||||
|
||||
monitor::monitor(const char fname[], int myrank, string head)
|
||||
{
|
||||
I_Print = (myrank == 0);
|
||||
|
||||
if (I_Print)
|
||||
{
|
||||
map<string, string>::iterator iter;
|
||||
iter = parameters::str_par.find("output dir");
|
||||
if (iter != parameters::str_par.end())
|
||||
{
|
||||
out_dir = iter->second;
|
||||
}
|
||||
else
|
||||
{
|
||||
// read parameter from file
|
||||
const int LEN = 256;
|
||||
char pline[LEN];
|
||||
string str, sgrp, skey, sval;
|
||||
int sind;
|
||||
|
||||
char pname[50];
|
||||
{
|
||||
map<string, string>::iterator iter = parameters::str_par.find("inputpar");
|
||||
if (iter != parameters::str_par.end())
|
||||
{
|
||||
strcpy(pname, (iter->second).c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "Error inputpar" << endl;
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
ifstream inf(pname, ifstream::in);
|
||||
if (!inf.good())
|
||||
{
|
||||
cout << "Can not open parameter file " << pname << endl;
|
||||
MPI_Abort(MPI_COMM_WORLD, 1);
|
||||
}
|
||||
|
||||
for (int i = 1; inf.good(); i++)
|
||||
{
|
||||
inf.getline(pline, LEN);
|
||||
str = pline;
|
||||
|
||||
int status = misc::parse_parts(str, sgrp, skey, sval, sind);
|
||||
if (status == -1)
|
||||
{
|
||||
cout << "error reading parameter file " << pname << " in line " << i << endl;
|
||||
MPI_Abort(MPI_COMM_WORLD, 1);
|
||||
}
|
||||
else if (status == 0)
|
||||
continue;
|
||||
|
||||
if (sgrp == "ABE")
|
||||
{
|
||||
if (skey == "output dir")
|
||||
out_dir = sval;
|
||||
}
|
||||
}
|
||||
inf.close();
|
||||
|
||||
parameters::str_par.insert(map<string, string>::value_type("output dir", out_dir));
|
||||
}
|
||||
// considering checkpoint run
|
||||
char filename[50];
|
||||
sprintf(filename, "%s/%s", out_dir.c_str(), fname);
|
||||
int i = 1;
|
||||
while ((access(filename, F_OK)) != -1)
|
||||
{
|
||||
sprintf(filename, "%s/%d_%s", out_dir.c_str(), i, fname);
|
||||
i++;
|
||||
}
|
||||
|
||||
outfile.open(filename, ios::trunc);
|
||||
|
||||
time_t tnow;
|
||||
time(&tnow);
|
||||
struct tm *loc_time;
|
||||
loc_time = localtime(&tnow);
|
||||
|
||||
outfile << "# File created on " << asctime(loc_time);
|
||||
outfile << "#" << endl;
|
||||
outfile.setf(ios::left);
|
||||
outfile << head << endl;
|
||||
}
|
||||
}
|
||||
|
||||
monitor::monitor(const char fname[], int myrank, const int out_rank, string head)
|
||||
{
|
||||
I_Print = (myrank == out_rank);
|
||||
|
||||
if (I_Print)
|
||||
{
|
||||
// considering checkpoint run
|
||||
char filename[50];
|
||||
sprintf(filename, "%s/%s", out_dir.c_str(), fname);
|
||||
int i = 1;
|
||||
while ((access(filename, F_OK)) != -1)
|
||||
{
|
||||
sprintf(filename, "%s/%d_%s", out_dir.c_str(), i, fname);
|
||||
i++;
|
||||
}
|
||||
|
||||
outfile.open(filename, ios::trunc);
|
||||
|
||||
time_t tnow;
|
||||
time(&tnow);
|
||||
struct tm *loc_time;
|
||||
loc_time = localtime(&tnow);
|
||||
|
||||
outfile << "# File created on " << asctime(loc_time);
|
||||
outfile << "#" << endl;
|
||||
outfile.setf(ios::left);
|
||||
outfile << head << endl;
|
||||
}
|
||||
}
|
||||
monitor::~monitor()
|
||||
{
|
||||
if (I_Print)
|
||||
outfile.close();
|
||||
}
|
||||
void monitor::writefile(double time, int NN, double *DDAT)
|
||||
{
|
||||
if (I_Print)
|
||||
{
|
||||
outfile << setprecision(8);
|
||||
outfile << setw(14) << time;
|
||||
for (int countlm = 0; countlm < NN; countlm++)
|
||||
{
|
||||
outfile << " " << setw(15) << DDAT[countlm];
|
||||
}
|
||||
outfile << endl;
|
||||
flush(outfile);
|
||||
}
|
||||
}
|
||||
void monitor::writefile(double time, int NN, double *DDAT1, double *DDAT2)
|
||||
{
|
||||
if (I_Print)
|
||||
{
|
||||
outfile << setprecision(8);
|
||||
outfile << setw(14) << time;
|
||||
for (int countlm = 0; countlm < NN; countlm++)
|
||||
{
|
||||
outfile << " " << setw(15) << DDAT1[countlm]
|
||||
<< " " << setw(15) << DDAT2[countlm];
|
||||
}
|
||||
outfile << endl;
|
||||
flush(outfile);
|
||||
}
|
||||
}
|
||||
void monitor::print_message(string head)
|
||||
{
|
||||
if (I_Print)
|
||||
{
|
||||
outfile << head << endl;
|
||||
flush(outfile);
|
||||
}
|
||||
}
|
||||
45
AMSS_NCKU_source/Monitor/monitor.h
Normal file
45
AMSS_NCKU_source/Monitor/monitor.h
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
#ifndef MONITOR_H
|
||||
#define MONITOR_H
|
||||
|
||||
#ifdef newc
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <strstream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <cstdlib>
|
||||
#include <cstdio>
|
||||
using namespace std;
|
||||
#else
|
||||
#include <iostream.h>
|
||||
#include <iomanip.h>
|
||||
#include <strstream>
|
||||
#include <fstream.h>
|
||||
#include <string.h>
|
||||
#endif
|
||||
#include <time.h>
|
||||
|
||||
#include <mpi.h>
|
||||
|
||||
class monitor
|
||||
{
|
||||
|
||||
public:
|
||||
string out_dir;
|
||||
ofstream outfile;
|
||||
|
||||
bool I_Print;
|
||||
|
||||
public:
|
||||
monitor(const char fname[], int myrank, string head);
|
||||
monitor(const char fname[], int myrank, const int out_rank, string head);
|
||||
|
||||
~monitor();
|
||||
|
||||
void writefile(double time, int NN, double *DDAT);
|
||||
void writefile(double time, int NN, double *DDAT1, double *DDAT2);
|
||||
void print_message(string head);
|
||||
};
|
||||
|
||||
#endif /* MONITOR */
|
||||
Reference in New Issue
Block a user