QMCPACK
WalkerLogManager Class Reference

Driver-level resource for walker log collection. More...

+ Collaboration diagram for WalkerLogManager:

Public Member Functions

 WalkerLogManager (WalkerLogInput &inp, bool allow_logs, std::string series_root, Communicate *comm=0)
 
WalkerLogCollectormakeCollector ()
 create a WalkerLogCollector (legacy drivers only, "cloning" style) More...
 
void startRun (std::vector< WalkerLogCollector *> &collectors)
 open the logs file and check consistency of the collectors at the start of a run More...
 
void stopRun ()
 close the logs file at the end of a run More...
 
void writeBuffers (std::vector< WalkerLogCollector *> &collectors)
 collect min/max/median walker data and write buffered walker log data to file More...
 

Public Attributes

WalkerLogState state
 

Private Member Functions

void checkCollectors (std::vector< WalkerLogCollector *> &collectors)
 check consistency of walker buffer row sizes More...
 
void openFile (std::vector< WalkerLogCollector *> &collectors)
 open the logs file More...
 
void closeFile ()
 close the logs file More...
 
void openHDFFile (std::vector< WalkerLogCollector *> &collectors)
 open the logs file (HDF format) More...
 
void writeBuffersHDF (std::vector< WalkerLogCollector *> &collectors)
 write data buffers to the logs file (HDF format) More...
 
void closeHDFFile ()
 close the logs file (HDF format) More...
 

Private Attributes

std::string file_root
 file prefix for the current driver More...
 
Communicatecommunicator
 
std::unique_ptr< hdf_archivehdf_file
 access to HDF file More...
 
bool registered_hdf
 whether walker quantity data ("data_layout") has been recorded in HDF More...
 
bool write_particle_data
 whether to write per-particle data for all walkers More...
 
bool write_min_data
 whether to write full data for the minimum energy walker at each step More...
 
bool write_max_data
 whether to write full data for the maximum energy walker at each step More...
 
bool write_med_data
 whether to write full data for the median energy walker at each step More...
 
std::vector< std::tuple< size_t, WLog::Real, size_t, size_t > > energy_order
 used to sort energy information for identifying walkers by energy quantile More...
 
WalkerLogBuffer< WLog::Intwmin_property_int_buffer
 buffer containing integer properties for the minimum energy walkers More...
 
WalkerLogBuffer< WLog::Realwmin_property_real_buffer
 buffer containing real-valued properties for the minimum energy walkers More...
 
WalkerLogBuffer< WLog::Realwmin_particle_real_buffer
 buffer containing per-particle properties for the minimum energy walkers More...
 
WalkerLogBuffer< WLog::Intwmax_property_int_buffer
 buffer containing integer properties for the maximum energy walkers More...
 
WalkerLogBuffer< WLog::Realwmax_property_real_buffer
 buffer containing real-valued properties for the maximum energy walkers More...
 
WalkerLogBuffer< WLog::Realwmax_particle_real_buffer
 buffer containing per-particle properties for the maximum energy walkers More...
 
WalkerLogBuffer< WLog::Intwmed_property_int_buffer
 buffer containing integer properties for the median energy walkers More...
 
WalkerLogBuffer< WLog::Realwmed_property_real_buffer
 buffer containing real-valued properties for the median energy walkers More...
 
WalkerLogBuffer< WLog::Realwmed_particle_real_buffer
 buffer containing per-particle properties for the median energy walkers More...
 

Detailed Description

Driver-level resource for walker log collection.

This class manages the HDF file (open/close/write). Walker buffer data from all crowd-level WalkerLogCollectors are written to the HDF file at the end of each MC block.

Just prior to the write, this class examines the distribution of walker energies on its rank for each MC step in the MC block, identifies the minimum/maximum/median energy walkers and buffers their full data (including per-particle information) for the write. This data corresponds to walker information at specific quantiles of the energy distribution. See WalkerLogManager::writeBuffers()

Writing per-particle information for all walkers is optional, as is writing data for the minimum/maximum/median energy walkers. Scalar "property" data for each walker is always written.

Definition at line 44 of file WalkerLogManager.h.

Constructor & Destructor Documentation

◆ WalkerLogManager()

WalkerLogManager ( WalkerLogInput inp,
bool  allow_logs,
std::string  series_root,
Communicate comm = 0 
)

Definition at line 21 of file WalkerLogManager.cpp.

References qmcplusplus::app_log(), qmcplusplus::comm, WalkerLogManager::communicator, WalkerLogManager::file_root, InputSection::get(), qmcplusplus::Concurrency::getWorkerId(), WalkerLogBuffer< T >::label, WalkerLogState::logs_active, WalkerLogInput::present, WalkerLogManager::registered_hdf, WalkerLogManager::state, WalkerLogState::step_period, WalkerLogState::verbose, WalkerLogManager::wmax_particle_real_buffer, WalkerLogManager::wmax_property_int_buffer, WalkerLogManager::wmax_property_real_buffer, WalkerLogManager::wmed_particle_real_buffer, WalkerLogManager::wmed_property_int_buffer, WalkerLogManager::wmed_property_real_buffer, WalkerLogManager::wmin_particle_real_buffer, WalkerLogManager::wmin_property_int_buffer, WalkerLogManager::wmin_property_real_buffer, WalkerLogManager::write_max_data, WalkerLogManager::write_med_data, WalkerLogManager::write_min_data, and WalkerLogManager::write_particle_data.

22 {
24  file_root = series_root;
25  bool driver_allows_logs = allow_logs; // driver allows logs or not
26 
27  bool logs_requested = inp.present; // xml input present or not
28  // determine whether walker logs will be active
29  state.logs_active = logs_requested && driver_allows_logs;
30 
31  if (state.logs_active)
32  {
33  if (Concurrency::getWorkerId() == 0)
34  {
35  app_log() << "\n WalkerLogManager::put() " << std::endl;
36  app_log() << " logs requested : " << logs_requested << std::endl;
37  app_log() << " driver allows logs : " << driver_allows_logs << std::endl;
38  app_log() << " logs active : " << state.logs_active << std::endl;
39  app_log() << std::endl;
40  }
41  // retrieve input data
42  state.step_period = inp.get<int>("step_period");
43  state.verbose = inp.get<bool>("verbose");
44  bool quantiles = inp.get<bool>("quantiles");
45  write_particle_data = inp.get<bool>("particle");
46  write_min_data = inp.get<bool>("min") && quantiles;
47  write_max_data = inp.get<bool>("max") && quantiles;
48  write_med_data = inp.get<bool>("median") && quantiles;
49  }
50 
51  // label min energy walker buffers for HDF file write
52  wmin_property_int_buffer.label = "wmin_property_int";
53  wmin_property_real_buffer.label = "wmin_property_real";
54  wmin_particle_real_buffer.label = "wmin_particle_real";
55 
56  // label max energy walker buffers for HDF file write
57  wmax_property_int_buffer.label = "wmax_property_int";
58  wmax_property_real_buffer.label = "wmax_property_real";
59  wmax_particle_real_buffer.label = "wmax_particle_real";
60 
61  // label median energy walker buffers for HDF file write
62  wmed_property_int_buffer.label = "wmed_property_int";
63  wmed_property_real_buffer.label = "wmed_property_real";
64  wmed_particle_real_buffer.label = "wmed_particle_real";
65 
66  // walker quantity information ("data_layout") has not be put in the HDF file yet
67  registered_hdf = false;
68 }
std::string label
label for this data in HDF file
WalkerLogBuffer< WLog::Real > wmax_particle_real_buffer
buffer containing per-particle properties for the maximum energy walkers
WalkerLogBuffer< WLog::Int > wmin_property_int_buffer
buffer containing integer properties for the minimum energy walkers
unsigned int getWorkerId()
WalkerLogBuffer< WLog::Real > wmin_particle_real_buffer
buffer containing per-particle properties for the minimum energy walkers
std::string file_root
file prefix for the current driver
WalkerLogBuffer< WLog::Real > wmin_property_real_buffer
buffer containing real-valued properties for the minimum energy walkers
bool logs_active
whether logs are active in the current driver
WalkerLogBuffer< WLog::Int > wmax_property_int_buffer
buffer containing integer properties for the maximum energy walkers
WalkerLogBuffer< WLog::Real > wmax_property_real_buffer
buffer containing real-valued properties for the maximum energy walkers
WalkerLogBuffer< WLog::Real > wmed_property_real_buffer
buffer containing real-valued properties for the median energy walkers
bool verbose
controls verbosity of log file writes
int step_period
period between MC steps for data collection
bool write_particle_data
whether to write per-particle data for all walkers
bool write_med_data
whether to write full data for the median energy walker at each step
bool registered_hdf
whether walker quantity data ("data_layout") has been recorded in HDF
bool write_max_data
whether to write full data for the maximum energy walker at each step
std::ostream & app_log()
Definition: OutputManager.h:65
WalkerLogBuffer< WLog::Real > wmed_particle_real_buffer
buffer containing per-particle properties for the median energy walkers
bool write_min_data
whether to write full data for the minimum energy walker at each step
WalkerLogBuffer< WLog::Int > wmed_property_int_buffer
buffer containing integer properties for the median energy walkers

Member Function Documentation

◆ checkCollectors()

void checkCollectors ( std::vector< WalkerLogCollector *> &  collectors)
private

check consistency of walker buffer row sizes

Definition at line 208 of file WalkerLogManager.cpp.

References qmcplusplus::app_log(), WalkerLogBuffer< T >::sameAs(), WalkerLogManager::state, WalkerLogState::verbose, WalkerLogCollector::walker_particle_real_buffer, WalkerLogCollector::walker_property_int_buffer, and WalkerLogCollector::walker_property_real_buffer.

Referenced by WalkerLogManager::startRun().

209 {
210  if (state.verbose)
211  app_log() << "WalkerLogManager::checkCollectors" << std::endl;
212  if (collectors.size() > 0)
213  {
214  bool all_same = true;
215  WalkerLogCollector& ref = *collectors[0];
216  for (int i = 0; i < collectors.size(); ++i)
217  {
218  WalkerLogCollector& tc = *collectors[i];
219  all_same &= tc.walker_property_int_buffer.sameAs(ref.walker_property_int_buffer);
220  all_same &= tc.walker_property_real_buffer.sameAs(ref.walker_property_real_buffer);
221  all_same &= tc.walker_particle_real_buffer.sameAs(ref.walker_particle_real_buffer);
222  }
223  if (!all_same)
224  {
225  throw std::runtime_error(
226  "WalkerLogManager::checkCollectors log buffer widths of collectors do not match\n contiguous write is "
227  "impossible\n this was first caused by collectors contributing array logs from identical, but "
228  "differently named, particlesets such as e, e2, e3 ... (fixed)\n please check the WalkerLogManager "
229  "summaries printed above");
230  }
231  }
232 }
bool verbose
controls verbosity of log file writes
std::ostream & app_log()
Definition: OutputManager.h:65

◆ closeFile()

void closeFile ( )
private

close the logs file

Definition at line 243 of file WalkerLogManager.cpp.

References qmcplusplus::app_log(), WalkerLogManager::closeHDFFile(), WalkerLogManager::state, and WalkerLogState::verbose.

Referenced by WalkerLogManager::stopRun().

244 {
245  if (state.verbose)
246  app_log() << "WalkerLogManager::closeFile " << std::endl;
247  closeHDFFile();
248 }
bool verbose
controls verbosity of log file writes
std::ostream & app_log()
Definition: OutputManager.h:65
void closeHDFFile()
close the logs file (HDF format)

◆ closeHDFFile()

void closeHDFFile ( )
private

close the logs file (HDF format)

Definition at line 350 of file WalkerLogManager.cpp.

References qmcplusplus::app_log(), WalkerLogManager::hdf_file, WalkerLogManager::state, and WalkerLogState::verbose.

Referenced by WalkerLogManager::closeFile().

351 {
352  if (state.verbose)
353  app_log() << "WalkerLogManager::closeHDFFile " << std::endl;
354  hdf_file.reset();
355 }
std::unique_ptr< hdf_archive > hdf_file
access to HDF file
bool verbose
controls verbosity of log file writes
std::ostream & app_log()
Definition: OutputManager.h:65

◆ makeCollector()

WalkerLogCollector * makeCollector ( )

create a WalkerLogCollector (legacy drivers only, "cloning" style)

Definition at line 71 of file WalkerLogManager.cpp.

References qmcplusplus::app_log(), WalkerLogManager::state, and WalkerLogState::verbose.

72 {
73  if (state.verbose)
74  app_log() << "WalkerLogManager::makeCollector " << std::endl;
75  WalkerLogCollector* tc = new WalkerLogCollector(state);
76  return tc;
77 }
bool verbose
controls verbosity of log file writes
std::ostream & app_log()
Definition: OutputManager.h:65

◆ openFile()

void openFile ( std::vector< WalkerLogCollector *> &  collectors)
private

open the logs file

Definition at line 235 of file WalkerLogManager.cpp.

References qmcplusplus::app_log(), WalkerLogManager::openHDFFile(), WalkerLogManager::state, and WalkerLogState::verbose.

Referenced by WalkerLogManager::startRun().

236 {
237  if (state.verbose)
238  app_log() << "WalkerLogManager::openFile " << std::endl;
239  openHDFFile(collectors);
240 }
void openHDFFile(std::vector< WalkerLogCollector *> &collectors)
open the logs file (HDF format)
bool verbose
controls verbosity of log file writes
std::ostream & app_log()
Definition: OutputManager.h:65

◆ openHDFFile()

void openHDFFile ( std::vector< WalkerLogCollector *> &  collectors)
private

open the logs file (HDF format)

Definition at line 251 of file WalkerLogManager.cpp.

References qmcplusplus::app_log(), WalkerLogManager::communicator, WalkerLogManager::file_root, WalkerLogManager::hdf_file, qmcplusplus::rank, Communicate::rank(), Communicate::size(), WalkerLogManager::state, and WalkerLogState::verbose.

Referenced by WalkerLogManager::openFile().

252 {
253  if (state.verbose)
254  app_log() << "WalkerLogManager::openHDFFile " << std::endl;
255  if (collectors.size() == 0)
256  throw std::runtime_error("WalkerLogManager::openHDFFile no log collectors exist, cannot open file");
257  // each rank opens a wlogs.h5 file
258  int nprocs = communicator->size();
259  int rank = communicator->rank();
260  std::array<char, 32> ptoken;
261  std::string file_name = file_root;
262  if (nprocs > 1)
263  { // extend the file name to include processor/rank information
264  int length{0};
265  if (nprocs > 10000)
266  length = std::snprintf(ptoken.data(), ptoken.size(), ".p%05d", rank);
267  else if (nprocs > 1000)
268  length = std::snprintf(ptoken.data(), ptoken.size(), ".p%04d", rank);
269  else
270  length = std::snprintf(ptoken.data(), ptoken.size(), ".p%03d", rank);
271  if (length < 0)
272  throw std::runtime_error("Error generating filename");
273  file_name.append(ptoken.data(), length);
274  }
275  file_name += ".wlogs.h5";
276  if (state.verbose)
277  app_log() << "WalkerLogManager::openHDFFile opening logs hdf file " << file_name << std::endl;
278  // create the hdf archive
279  hdf_file = std::make_unique<hdf_archive>();
280  // open the file
281  bool successful = hdf_file->create(file_name);
282  if (!successful)
283  throw std::runtime_error("WalkerLogManager::openHDFFile failed to open hdf file " + file_name);
284 }
std::string file_root
file prefix for the current driver
std::unique_ptr< hdf_archive > hdf_file
access to HDF file
bool verbose
controls verbosity of log file writes
int rank() const
return the rank
Definition: Communicate.h:116
int size() const
return the number of tasks
Definition: Communicate.h:118
std::ostream & app_log()
Definition: OutputManager.h:65

◆ startRun()

void startRun ( std::vector< WalkerLogCollector *> &  collectors)

open the logs file and check consistency of the collectors at the start of a run

Definition at line 80 of file WalkerLogManager.cpp.

References qmcplusplus::app_log(), WalkerLogManager::checkCollectors(), WalkerLogState::logs_active, WalkerLogManager::openFile(), WalkerLogManager::state, and WalkerLogState::verbose.

81 {
82  if (!state.logs_active)
83  return; // no-op for driver if logs are inactive
84  if (state.verbose)
85  app_log() << "WalkerLogManager::startRun " << std::endl;
86  // transfer step_period, verbosity, etc settings to log collectors
87  for (auto& tc : collectors)
88  tc->state = state;
89  // check data size consistency among the log collector buffers
90  checkCollectors(collectors);
91  // open the logs file
92  openFile(collectors);
93 }
void openFile(std::vector< WalkerLogCollector *> &collectors)
open the logs file
bool logs_active
whether logs are active in the current driver
void checkCollectors(std::vector< WalkerLogCollector *> &collectors)
check consistency of walker buffer row sizes
bool verbose
controls verbosity of log file writes
std::ostream & app_log()
Definition: OutputManager.h:65

◆ stopRun()

void stopRun ( )

close the logs file at the end of a run

Definition at line 96 of file WalkerLogManager.cpp.

References qmcplusplus::app_log(), WalkerLogManager::closeFile(), WalkerLogState::logs_active, WalkerLogManager::state, and WalkerLogState::verbose.

97 {
98  if (!state.logs_active)
99  return; // no-op for driver if logs are inactive
100  if (state.verbose)
101  app_log() << "WalkerLogManager::stopRun " << std::endl;
102  // close the logs file
103  closeFile();
104 }
bool logs_active
whether logs are active in the current driver
bool verbose
controls verbosity of log file writes
void closeFile()
close the logs file
std::ostream & app_log()
Definition: OutputManager.h:65

◆ writeBuffers()

void writeBuffers ( std::vector< WalkerLogCollector *> &  collectors)

collect min/max/median walker data and write buffered walker log data to file

Definition at line 107 of file WalkerLogManager.cpp.

References WalkerLogBuffer< T >::addRow(), qmcplusplus::app_log(), WalkerLogManager::energy_order, WalkerLogState::logs_active, qmcplusplus::n, WalkerLogBuffer< T >::resetBuffer(), WalkerLogManager::state, WalkerLogState::verbose, WalkerLogManager::wmax_particle_real_buffer, WalkerLogManager::wmax_property_int_buffer, WalkerLogManager::wmax_property_real_buffer, WalkerLogManager::wmed_particle_real_buffer, WalkerLogManager::wmed_property_int_buffer, WalkerLogManager::wmed_property_real_buffer, WalkerLogManager::wmin_particle_real_buffer, WalkerLogManager::wmin_property_int_buffer, WalkerLogManager::wmin_property_real_buffer, WalkerLogManager::write_max_data, WalkerLogManager::write_med_data, WalkerLogManager::write_min_data, and WalkerLogManager::writeBuffersHDF().

108 {
109  if (!state.logs_active)
110  return; // no-op for driver if logs are inactive
111  if (state.verbose)
112  app_log() << "WalkerLogManager::writeBuffers " << std::endl;
113 
114  if (write_min_data)
115  { // resize min energy walker buffers to zero rows
119  }
120  if (write_max_data)
121  { // resize max energy walker buffers to zero rows
125  }
126  if (write_med_data)
127  { // resize median energy walker buffers to zero rows
131  }
132 
133  // collect energy information and extract info from min/max/median energy walkers
135  {
136  // gather per energy and step data for all walker throughout the MC block
137  for (size_t c = 0; c < collectors.size(); ++c)
138  {
139  auto& tc = *collectors[c];
140  tc.checkBuffers();
141  for (size_t r = 0; r < tc.energies.size(); ++r)
142  energy_order.push_back(std::make_tuple(tc.steps[r], tc.energies[r], c, r));
143  }
144  // sort the data by step and energy to enable selection of min/max/median energy walker data
145  std::sort(energy_order.begin(), energy_order.end());
146  // select out the min/max/median energy walker data and store in rank-level buffers
147  size_t n = 0;
148  size_t n1, n2;
149  size_t prev_step;
150  for (auto& v : energy_order)
151  {
152  auto step = std::get<0>(v);
153  if (n == 0)
154  {
155  n1 = n;
156  prev_step = step;
157  }
158  if (step != prev_step || n == energy_order.size() - 1)
159  {
160  // for a given step, find data for min/max/median energy walkers
161  // n1/n2 are indices of the first/last data in energy_order for this step
162  if (step != prev_step)
163  n2 = n - 1;
164  if (n == energy_order.size() - 1)
165  n2 = n;
166  auto nmin = n1; // index of minimum energy walker for this step
167  auto nmax = n2; // index of maximum energy walker for this step
168  auto nmed = (n1 + n2) / 2; // index of median energy walker for this step
169  size_t c, r;
170  if (write_min_data)
171  { // cache data for minimum energy walker
172  c = std::get<2>(energy_order[nmin]);
173  r = std::get<3>(energy_order[nmin]);
174  wmin_property_int_buffer.addRow(collectors[c]->walker_property_int_buffer, r);
175  wmin_property_real_buffer.addRow(collectors[c]->walker_property_real_buffer, r);
176  wmin_particle_real_buffer.addRow(collectors[c]->walker_particle_real_buffer, r);
177  }
178  if (write_max_data)
179  { // cache data for maximum energy walker
180  c = std::get<2>(energy_order[nmax]);
181  r = std::get<3>(energy_order[nmax]);
182  wmax_property_int_buffer.addRow(collectors[c]->walker_property_int_buffer, r);
183  wmax_property_real_buffer.addRow(collectors[c]->walker_property_real_buffer, r);
184  wmax_particle_real_buffer.addRow(collectors[c]->walker_particle_real_buffer, r);
185  }
186  if (write_med_data)
187  { // cache data for median energy walker
188  c = std::get<2>(energy_order[nmed]);
189  r = std::get<3>(energy_order[nmed]);
190  wmed_property_int_buffer.addRow(collectors[c]->walker_property_int_buffer, r);
191  wmed_property_real_buffer.addRow(collectors[c]->walker_property_real_buffer, r);
192  wmed_particle_real_buffer.addRow(collectors[c]->walker_particle_real_buffer, r);
193  }
194  // reset pointers
195  n1 = n;
196  prev_step = step;
197  }
198  n++;
199  }
200  energy_order.resize(0);
201  }
202 
203  // write buffer data to file
204  writeBuffersHDF(collectors);
205 }
void writeBuffersHDF(std::vector< WalkerLogCollector *> &collectors)
write data buffers to the logs file (HDF format)
WalkerLogBuffer< WLog::Real > wmax_particle_real_buffer
buffer containing per-particle properties for the maximum energy walkers
WalkerLogBuffer< WLog::Int > wmin_property_int_buffer
buffer containing integer properties for the minimum energy walkers
WalkerLogBuffer< WLog::Real > wmin_particle_real_buffer
buffer containing per-particle properties for the minimum energy walkers
void resetBuffer()
resize the buffer to zero
WalkerLogBuffer< WLog::Real > wmin_property_real_buffer
buffer containing real-valued properties for the minimum energy walkers
bool logs_active
whether logs are active in the current driver
WalkerLogBuffer< WLog::Int > wmax_property_int_buffer
buffer containing integer properties for the maximum energy walkers
WalkerLogBuffer< WLog::Real > wmax_property_real_buffer
buffer containing real-valued properties for the maximum energy walkers
WalkerLogBuffer< WLog::Real > wmed_property_real_buffer
buffer containing real-valued properties for the median energy walkers
bool verbose
controls verbosity of log file writes
std::vector< std::tuple< size_t, WLog::Real, size_t, size_t > > energy_order
used to sort energy information for identifying walkers by energy quantile
bool write_med_data
whether to write full data for the median energy walker at each step
void addRow(WalkerLogBuffer< T > other, size_t i)
add a data row from another buffer to this one
bool write_max_data
whether to write full data for the maximum energy walker at each step
std::ostream & app_log()
Definition: OutputManager.h:65
WalkerLogBuffer< WLog::Real > wmed_particle_real_buffer
buffer containing per-particle properties for the median energy walkers
bool write_min_data
whether to write full data for the minimum energy walker at each step
WalkerLogBuffer< WLog::Int > wmed_property_int_buffer
buffer containing integer properties for the median energy walkers

◆ writeBuffersHDF()

void writeBuffersHDF ( std::vector< WalkerLogCollector *> &  collectors)
private

write data buffers to the logs file (HDF format)

Definition at line 287 of file WalkerLogManager.cpp.

References qmcplusplus::app_log(), WalkerLogManager::hdf_file, WalkerLogBuffer< T >::hdf_file_pointer, WalkerLogManager::registered_hdf, WalkerLogBuffer< T >::registerHDFData(), WalkerLogManager::state, WalkerLogState::verbose, WalkerLogCollector::walker_particle_real_buffer, WalkerLogCollector::walker_property_int_buffer, WalkerLogCollector::walker_property_real_buffer, WalkerLogManager::wmax_particle_real_buffer, WalkerLogManager::wmax_property_int_buffer, WalkerLogManager::wmax_property_real_buffer, WalkerLogManager::wmed_particle_real_buffer, WalkerLogManager::wmed_property_int_buffer, WalkerLogManager::wmed_property_real_buffer, WalkerLogManager::wmin_particle_real_buffer, WalkerLogManager::wmin_property_int_buffer, WalkerLogManager::wmin_property_real_buffer, WalkerLogManager::write_max_data, WalkerLogManager::write_med_data, WalkerLogManager::write_min_data, WalkerLogManager::write_particle_data, and WalkerLogBuffer< T >::writeHDF().

Referenced by WalkerLogManager::writeBuffers().

288 {
289  if (state.verbose)
290  app_log() << "WalkerLogManager::writeBuffersHDF " << std::endl;
291  WalkerLogCollector& tc_lead = *collectors[0];
292  if (!registered_hdf)
293  { // write walker quantity information ("data_layout") for each buffer in the HDF file
294  // create data_layout for all-walker buffers
295  tc_lead.walker_property_int_buffer.registerHDFData(*hdf_file);
296  tc_lead.walker_property_real_buffer.registerHDFData(*hdf_file);
298  tc_lead.walker_particle_real_buffer.registerHDFData(*hdf_file);
299  if (write_min_data)
300  { // create data_layout for min energy walker buffers
304  }
305  if (write_max_data)
306  { // create data_layout for max energy walker buffers
310  }
311  if (write_med_data)
312  { // create data_layout for median energy walker buffers
316  }
317  // walker quantity information ("data_layout") has now been added to HDF, do not repeat
318  registered_hdf = true;
319  }
320  // write data for all-walker buffers to HDF
321  for (int ip = 0; ip < collectors.size(); ++ip)
322  {
323  WalkerLogCollector& tc = *collectors[ip];
324  tc.walker_property_int_buffer.writeHDF(*hdf_file, tc_lead.walker_property_int_buffer.hdf_file_pointer);
325  tc.walker_property_real_buffer.writeHDF(*hdf_file, tc_lead.walker_property_real_buffer.hdf_file_pointer);
327  tc.walker_particle_real_buffer.writeHDF(*hdf_file, tc_lead.walker_particle_real_buffer.hdf_file_pointer);
328  }
329  if (write_min_data)
330  { // write data for min energy walker buffers to HDF
334  }
335  if (write_max_data)
336  { // write data for max energy walker buffers to HDF
340  }
341  if (write_med_data)
342  { // write data for median energy walker buffers to HDF
346  }
347 }
WalkerLogBuffer< WLog::Real > wmax_particle_real_buffer
buffer containing per-particle properties for the maximum energy walkers
WalkerLogBuffer< WLog::Int > wmin_property_int_buffer
buffer containing integer properties for the minimum energy walkers
WalkerLogBuffer< WLog::Real > wmin_particle_real_buffer
buffer containing per-particle properties for the minimum energy walkers
WalkerLogBuffer< WLog::Real > wmin_property_real_buffer
buffer containing real-valued properties for the minimum energy walkers
WalkerLogBuffer< WLog::Int > wmax_property_int_buffer
buffer containing integer properties for the maximum energy walkers
WalkerLogBuffer< WLog::Real > wmax_property_real_buffer
buffer containing real-valued properties for the maximum energy walkers
WalkerLogBuffer< WLog::Real > wmed_property_real_buffer
buffer containing real-valued properties for the median energy walkers
std::unique_ptr< hdf_archive > hdf_file
access to HDF file
bool verbose
controls verbosity of log file writes
void writeHDF(hdf_archive &f)
write the buffer data into the HDF file
bool write_particle_data
whether to write per-particle data for all walkers
bool write_med_data
whether to write full data for the median energy walker at each step
void registerHDFData(hdf_archive &f)
write the data_layout for all walker quantities in the HDF file
bool registered_hdf
whether walker quantity data ("data_layout") has been recorded in HDF
bool write_max_data
whether to write full data for the maximum energy walker at each step
std::ostream & app_log()
Definition: OutputManager.h:65
WalkerLogBuffer< WLog::Real > wmed_particle_real_buffer
buffer containing per-particle properties for the median energy walkers
bool write_min_data
whether to write full data for the minimum energy walker at each step
WalkerLogBuffer< WLog::Int > wmed_property_int_buffer
buffer containing integer properties for the median energy walkers

Member Data Documentation

◆ communicator

Communicate* communicator
private

◆ energy_order

std::vector<std::tuple<size_t, WLog::Real, size_t, size_t> > energy_order
private

used to sort energy information for identifying walkers by energy quantile

Definition at line 68 of file WalkerLogManager.h.

Referenced by WalkerLogManager::writeBuffers().

◆ file_root

std::string file_root
private

file prefix for the current driver

Definition at line 51 of file WalkerLogManager.h.

Referenced by WalkerLogManager::openHDFFile(), and WalkerLogManager::WalkerLogManager().

◆ hdf_file

std::unique_ptr<hdf_archive> hdf_file
private

◆ registered_hdf

bool registered_hdf
private

whether walker quantity data ("data_layout") has been recorded in HDF

Definition at line 56 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), and WalkerLogManager::writeBuffersHDF().

◆ state

◆ wmax_particle_real_buffer

WalkerLogBuffer<WLog::Real> wmax_particle_real_buffer
private

buffer containing per-particle properties for the maximum energy walkers

Definition at line 82 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), WalkerLogManager::writeBuffers(), and WalkerLogManager::writeBuffersHDF().

◆ wmax_property_int_buffer

WalkerLogBuffer<WLog::Int> wmax_property_int_buffer
private

buffer containing integer properties for the maximum energy walkers

Definition at line 78 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), WalkerLogManager::writeBuffers(), and WalkerLogManager::writeBuffersHDF().

◆ wmax_property_real_buffer

WalkerLogBuffer<WLog::Real> wmax_property_real_buffer
private

buffer containing real-valued properties for the maximum energy walkers

Definition at line 80 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), WalkerLogManager::writeBuffers(), and WalkerLogManager::writeBuffersHDF().

◆ wmed_particle_real_buffer

WalkerLogBuffer<WLog::Real> wmed_particle_real_buffer
private

buffer containing per-particle properties for the median energy walkers

Definition at line 89 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), WalkerLogManager::writeBuffers(), and WalkerLogManager::writeBuffersHDF().

◆ wmed_property_int_buffer

WalkerLogBuffer<WLog::Int> wmed_property_int_buffer
private

buffer containing integer properties for the median energy walkers

Definition at line 85 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), WalkerLogManager::writeBuffers(), and WalkerLogManager::writeBuffersHDF().

◆ wmed_property_real_buffer

WalkerLogBuffer<WLog::Real> wmed_property_real_buffer
private

buffer containing real-valued properties for the median energy walkers

Definition at line 87 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), WalkerLogManager::writeBuffers(), and WalkerLogManager::writeBuffersHDF().

◆ wmin_particle_real_buffer

WalkerLogBuffer<WLog::Real> wmin_particle_real_buffer
private

buffer containing per-particle properties for the minimum energy walkers

Definition at line 75 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), WalkerLogManager::writeBuffers(), and WalkerLogManager::writeBuffersHDF().

◆ wmin_property_int_buffer

WalkerLogBuffer<WLog::Int> wmin_property_int_buffer
private

buffer containing integer properties for the minimum energy walkers

Definition at line 71 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), WalkerLogManager::writeBuffers(), and WalkerLogManager::writeBuffersHDF().

◆ wmin_property_real_buffer

WalkerLogBuffer<WLog::Real> wmin_property_real_buffer
private

buffer containing real-valued properties for the minimum energy walkers

Definition at line 73 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), WalkerLogManager::writeBuffers(), and WalkerLogManager::writeBuffersHDF().

◆ write_max_data

bool write_max_data
private

whether to write full data for the maximum energy walker at each step

Definition at line 63 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), WalkerLogManager::writeBuffers(), and WalkerLogManager::writeBuffersHDF().

◆ write_med_data

bool write_med_data
private

whether to write full data for the median energy walker at each step

Definition at line 65 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), WalkerLogManager::writeBuffers(), and WalkerLogManager::writeBuffersHDF().

◆ write_min_data

bool write_min_data
private

whether to write full data for the minimum energy walker at each step

Definition at line 61 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), WalkerLogManager::writeBuffers(), and WalkerLogManager::writeBuffersHDF().

◆ write_particle_data

bool write_particle_data
private

whether to write per-particle data for all walkers

Definition at line 59 of file WalkerLogManager.h.

Referenced by WalkerLogManager::WalkerLogManager(), and WalkerLogManager::writeBuffersHDF().


The documentation for this class was generated from the following files: