OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
GridLBalWriter.cpp
Go to the documentation of this file.
1 #include "GridLBalWriter.h"
2 
3 #include "Utilities/Timer.h"
4 
5 #include <sstream>
6 
8 
9 GridLBalWriter::GridLBalWriter(const std::string& fname, bool restart)
10  : SDDSWriter(fname, restart)
11 { }
12 
13 
15 
16  if (this->hasColumns()) {
17  return;
18  }
19 
20  columns_m.addColumn("t", "double", "ns", "Time");
21 
22  AmrPartBunch* amrbeam = dynamic_cast<AmrPartBunch*>(beam);
23 
24  if ( !amrbeam )
25  throw OpalException("GridLBalWriter::fillHeader()",
26  "Can not write grid load balancing for non-AMR runs.");
27  int nLevel = (amrbeam->getAmrObject())->maxLevel() + 1;
28 
29  for (int lev = 0; lev < nLevel; ++lev) {
30  std::stringstream tmp1;
31  tmp1 << "\"level-" << lev << "\"";
32 
33  std::stringstream tmp2;
34  tmp2 << "Number of boxes at level " << lev;
35 
36  columns_m.addColumn(tmp1.str(), "long", "1", tmp2.str());
37  }
38 
39  for (int p = 0; p < Ippl::getNodes(); ++p) {
40  std::stringstream tmp1;
41  tmp1 << "\"processor-" << p << "\"";
42 
43  std::stringstream tmp2;
44  tmp2 << "Number of grid points per processor " << p;
45 
46  columns_m.addColumn(tmp1.str(), "long", "1", tmp2.str());
47  }
48 
49  if ( mode_m == std::ios::app )
50  return;
51 
52  OPALTimer::Timer simtimer;
53 
54  std::string dateStr(simtimer.date());
55  std::string timeStr(simtimer.time());
56 
57  std::stringstream ss;
58  ss << "Grid load balancing statistics '"
59  << OpalData::getInstance()->getInputFn() << "' "
60  << dateStr << "" << timeStr;
61 
62  this->addDescription(ss.str(), "grid lbal parameters");
63 
64  this->addDefaultParameters();
65 
66  this->addInfo("ascii", 1);
67 }
68 
69 
71  AmrPartBunch* amrbeam = dynamic_cast<AmrPartBunch*>(beam);
72 
73  if ( !amrbeam )
74  throw OpalException("GridLBalWriter::write()",
75  "Can not write grid load balancing for non-AMR runs.");
76 
77  std::map<int, long> gridPtsPerCore;
78  std::vector<int> gridsPerLevel;
79 
80  amrbeam->getAmrObject()->getGridStatistics(gridPtsPerCore, gridsPerLevel);
81 
82  if ( Ippl::myNode() != 0 )
83  return;
84 
85  this->fillHeader(beam);
86 
87  this->open();
88 
89  this->writeHeader();
90 
91  columns_m.addColumnValue("t", beam->getT() * 1e9); // 1
92 
93  int nLevel = (amrbeam->getAmrObject())->maxLevel() + 1;
94 
95  for (int lev = 0; lev < nLevel; ++lev) {
96  std::stringstream ss;
97  ss << "\"level-" << lev << "\"";
98  // we need to cast due to boost::variant
99  columns_m.addColumnValue(ss.str(), toString(gridsPerLevel[lev]));
100  }
101 
102  int nProcs = Ippl::getNodes();
103  for (int p = 0; p < nProcs; ++p) {
104  std::stringstream ss;
105  ss << "\"processor-" << p << "\"";
106  // we need to cast due to boost::variant
107  columns_m.addColumnValue(ss.str(), toString(gridPtsPerCore[p]));
108  }
109 
110  this->writeRow();
111 
112  this->close();
113 }
static int getNodes()
Definition: IpplInfo.cpp:773
double getT() const
bool hasColumns() const
Definition: SDDSWriter.h:190
void writeHeader()
Write SDDS header.
Definition: SDDSWriter.cpp:130
void writeRow()
Definition: SDDSWriter.h:175
The base class for all OPAL exceptions.
Definition: OpalException.h:28
static int myNode()
Definition: IpplInfo.cpp:794
void close()
Definition: SDDSWriter.cpp:123
void addDescription(const std::string &text, const std::string &content)
Definition: SDDSWriter.h:147
SDDSColumnSet columns_m
Definition: SDDSWriter.h:109
std::string date() const
Return date.
Definition: Timer.cpp:35
static OpalData * getInstance()
Definition: OpalData.cpp:209
void fillHeader(PartBunchBase< double, 3 > *beam)
GridLBalWriter(const std::string &fname, bool restart)
std::string getInputFn()
get opals input filename
Definition: OpalData.cpp:713
void addColumnValue(const std::string &name, const T &val)
Definition: SDDSColumnSet.h:46
void write(PartBunchBase< double, 3 > *beam) override
std::ios_base::openmode mode_m
First write to the statistics output file.
Definition: SDDSWriter.h:107
const AmrObject * getAmrObject() const
Definition: AmrPartBunch.h:62
std::string toString(const T &val)
Definition: SDDSWriter.h:181
std::string time() const
Return time.
Definition: Timer.cpp:42
void addColumn(const std::string &name, const std::string &type, const std::string &unit, const std::string &desc, std::ios_base::fmtflags flags=std::ios_base::scientific, unsigned short precision=15)
void open()
Definition: SDDSWriter.cpp:113
void addDefaultParameters()
Definition: SDDSWriter.cpp:190
virtual void getGridStatistics(std::map< int, long > &gridPtsPerCore, std::vector< int > &gridsPerLevel) const =0
void addInfo(const std::string &mode, const size_t &no_row_counts)
Definition: SDDSWriter.h:168