OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
LBalWriter.cpp
Go to the documentation of this file.
1 #include "LBalWriter.h"
2 
3 #include "OPALconfig.h"
5 #include "Utilities/Util.h"
6 #include "Utilities/Timer.h"
8 
9 #ifdef ENABLE_AMR
11 #endif
12 
13 LBalWriter::LBalWriter(const std::string& fname, bool restart)
14  : SDDSWriter(fname, restart)
15 { }
16 
17 
19 
20  if (this->hasColumns()) {
21  return;
22  }
23 
24  columns_m.addColumn("t", "double", "ns", "Time");
25 
26  for (int p = 0; p < Ippl::getNodes(); ++p) {
27  std::stringstream tmp1;
28  tmp1 << "\"processor-" << p << "\"";
29 
30  std::stringstream tmp2;
31  tmp2 << "Number of particles of processor " << p;
32 
33  columns_m.addColumn(tmp1.str(), "long", "1", tmp2.str());
34  }
35 
36 #ifdef ENABLE_AMR
37  if ( AmrPartBunch* amrbeam = dynamic_cast<AmrPartBunch*>(beam) ) {
38 
39  int nLevel = (amrbeam->getAmrObject())->maxLevel() + 1;
40 
41  for (int lev = 0; lev < nLevel; ++lev) {
42  std::stringstream tmp1;
43  tmp1 << "\"level-" << lev << "\"";
44 
45  std::stringstream tmp2;
46  tmp2 << "Number of particles at level " << lev;
47  columns_m.addColumn(tmp1.str(), "long", "1", tmp2.str());
48  }
49  }
50 #endif
51 
52  if ( mode_m == std::ios::app )
53  return;
54 
55  OPALTimer::Timer simtimer;
56 
57  std::string dateStr(simtimer.date());
58  std::string timeStr(simtimer.time());
59 
60  std::stringstream ss;
61  ss << "Processor statistics '"
62  << OpalData::getInstance()->getInputFn() << "' "
63  << dateStr << "" << timeStr;
64 
65  this->addDescription(ss.str(), "lbal parameters");
66 
67  this->addDefaultParameters();
68 
69 
70  this->addInfo("ascii", 1);
71 }
72 
73 
75 
77 
78 #ifdef ENABLE_AMR
79  if ( AmrPartBunch* amrbeam = dynamic_cast<AmrPartBunch*>(beam) ) {
80  amrbeam->gatherLevelStatistics();
81  }
82 #endif
83 
84  if ( Ippl::myNode() != 0 )
85  return;
86 
87 
88  this->fillHeader(beam);
89 
90  this->open();
91 
92  this->writeHeader();
93 
94  columns_m.addColumnValue("t", beam->getT() * 1e9); // 1
95 
96  size_t nProcs = Ippl::getNodes();
97  for (size_t p = 0; p < nProcs; ++ p) {
98  std::stringstream ss;
99  ss << "\"processor-" << p << "\"";
100  columns_m.addColumnValue(ss.str(), beam->getLoadBalance(p));
101  }
102 
103 #ifdef ENABLE_AMR
104  if ( AmrPartBunch* amrbeam = dynamic_cast<AmrPartBunch*>(beam) ) {
105  int nLevel = (amrbeam->getAmrObject())->maxLevel() + 1;
106  for (int lev = 0; lev < nLevel; ++lev) {
107  std::stringstream ss;
108  ss << "\"level-" << lev << "\"";
109  columns_m.addColumnValue(ss.str(), amrbeam->getLevelStatistics(lev));
110  }
111  }
112 #endif
113 
114  this->writeRow();
115 
116  this->close();
117 }
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
void gatherLoadBalanceStatistics()
void write(PartBunchBase< double, 3 > *beam) override
Definition: LBalWriter.cpp:74
void fillHeader(PartBunchBase< double, 3 > *beam)
Definition: LBalWriter.cpp:18
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
LBalWriter(const std::string &fname, bool restart)
Definition: LBalWriter.cpp:13
std::string getInputFn()
get opals input filename
Definition: OpalData.cpp:713
void addColumnValue(const std::string &name, const T &val)
Definition: SDDSColumnSet.h:46
std::ios_base::openmode mode_m
First write to the statistics output file.
Definition: SDDSWriter.h:107
std::string time() const
Return time.
Definition: Timer.cpp:42
size_t getLoadBalance(int p) const
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
void addInfo(const std::string &mode, const size_t &no_row_counts)
Definition: SDDSWriter.h:168