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)
 
std::unique_ptr< WalkerLogCollectormakeCollector () const
 create a WalkerLogCollector More...
 
void startRun (RefVector< 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 ()
 collect min/max/median walker data and write buffered walker log data to file More...
 

Private Member Functions

void checkCollectors (const RefVector< WalkerLogCollector > &collectors) const
 check consistency of walker buffer row sizes More...
 
void openFile (const RefVector< WalkerLogCollector > &collectors)
 open the logs file More...
 
void closeFile ()
 close the logs file More...
 
void openHDFFile (const RefVector< WalkerLogCollector > &collectors)
 open the logs file (HDF format) More...
 
void writeBuffersHDF ()
 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
 
WalkerLogState state
 output state More...
 
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...
 
RefVector< WalkerLogCollectorcollectors_in_run_
 

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 file_root
file prefix for the current driver
bool write_min_data
whether to write full data for the minimum energy walker at each step
bool verbose
controls verbosity of log file writes
bool write_med_data
whether to write full data for the median energy walker at each step
int step_period
period between MC steps for data collection
bool registered_hdf
whether walker quantity data ("data_layout") has been recorded in HDF
std::ostream & app_log()
Definition: OutputManager.h:65
WalkerLogBuffer< WLog::Int > wmed_property_int_buffer
buffer containing integer properties for the median energy walkers
bool write_max_data
whether to write full data for the maximum energy walker at each step
std::string label
label for this data in HDF file
bool logs_active
whether logs are active in the current driver
WalkerLogBuffer< WLog::Real > wmed_property_real_buffer
buffer containing real-valued properties for the median energy walkers
WalkerLogBuffer< WLog::Real > wmax_particle_real_buffer
buffer containing per-particle properties for the maximum energy walkers
WalkerLogState state
output state
unsigned int getWorkerId()
WalkerLogBuffer< WLog::Real > wmax_property_real_buffer
buffer containing real-valued properties for the maximum energy walkers
WalkerLogBuffer< WLog::Real > wmin_property_real_buffer
buffer containing real-valued properties for the minimum energy walkers
bool write_particle_data
whether to write per-particle data for all walkers
WalkerLogBuffer< WLog::Int > wmax_property_int_buffer
buffer containing integer 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 > wmed_particle_real_buffer
buffer containing per-particle properties for the median energy walkers

Member Function Documentation

◆ checkCollectors()

void checkCollectors ( const RefVector< WalkerLogCollector > &  collectors) const
private

check consistency of walker buffer row sizes

Definition at line 212 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().

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

◆ closeFile()

void closeFile ( )
private

close the logs file

Definition at line 247 of file WalkerLogManager.cpp.

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

Referenced by WalkerLogManager::stopRun().

248 {
249  if (state.verbose)
250  app_log() << "WalkerLogManager::closeFile " << std::endl;
251  closeHDFFile();
252 }
void closeHDFFile()
close the logs file (HDF format)
bool verbose
controls verbosity of log file writes
std::ostream & app_log()
Definition: OutputManager.h:65
WalkerLogState state
output state

◆ closeHDFFile()

void closeHDFFile ( )
private

close the logs file (HDF format)

Definition at line 355 of file WalkerLogManager.cpp.

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

Referenced by WalkerLogManager::closeFile().

356 {
357  if (state.verbose)
358  app_log() << "WalkerLogManager::closeHDFFile " << std::endl;
359  hdf_file.reset();
360 }
bool verbose
controls verbosity of log file writes
std::ostream & app_log()
Definition: OutputManager.h:65
WalkerLogState state
output state
std::unique_ptr< hdf_archive > hdf_file
access to HDF file

◆ makeCollector()

std::unique_ptr< WalkerLogCollector > makeCollector ( ) const

create a WalkerLogCollector

Definition at line 71 of file WalkerLogManager.cpp.

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

Referenced by VMCBatched::run(), and DMCBatched::run().

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

◆ openFile()

void openFile ( const RefVector< WalkerLogCollector > &  collectors)
private

open the logs file

Definition at line 239 of file WalkerLogManager.cpp.

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

Referenced by WalkerLogManager::startRun().

240 {
241  if (state.verbose)
242  app_log() << "WalkerLogManager::openFile " << std::endl;
243  openHDFFile(collectors);
244 }
bool verbose
controls verbosity of log file writes
std::ostream & app_log()
Definition: OutputManager.h:65
WalkerLogState state
output state
void openHDFFile(const RefVector< WalkerLogCollector > &collectors)
open the logs file (HDF format)

◆ openHDFFile()

void openHDFFile ( const RefVector< WalkerLogCollector > &  collectors)
private

open the logs file (HDF format)

Definition at line 255 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().

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

◆ startRun()

void startRun ( RefVector< WalkerLogCollector > &&  collectors)

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

Definition at line 79 of file WalkerLogManager.cpp.

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

Referenced by VMCBatched::run(), and DMCBatched::run().

80 {
81  collectors_in_run_ = std::move(collectors);
82  if (!state.logs_active)
83  return; // no-op for driver if logs are inactive
84  if (collectors_in_run_.empty())
85  throw std::runtime_error("BUG collectors are empty but walker logs are active");
86  if (state.verbose)
87  app_log() << "WalkerLogManager::startRun " << std::endl;
88  // check data size consistency among the log collector buffers
90  // open the logs file
92 }
RefVector< WalkerLogCollector > collectors_in_run_
void checkCollectors(const RefVector< WalkerLogCollector > &collectors) const
check consistency of walker buffer row sizes
bool verbose
controls verbosity of log file writes
std::ostream & app_log()
Definition: OutputManager.h:65
bool logs_active
whether logs are active in the current driver
void openFile(const RefVector< WalkerLogCollector > &collectors)
open the logs file
WalkerLogState state
output state

◆ stopRun()

void stopRun ( )

close the logs file at the end of a run

Definition at line 95 of file WalkerLogManager.cpp.

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

Referenced by VMCBatched::run(), and DMCBatched::run().

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

◆ writeBuffers()

void writeBuffers ( )

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(), WalkerLogCollector::checkBuffers(), WalkerLogManager::collectors_in_run_, WalkerLogCollector::energies, WalkerLogManager::energy_order, WalkerLogState::logs_active, qmcplusplus::n, WalkerLogBuffer< T >::resetBuffer(), WalkerLogManager::state, WalkerLogCollector::steps, 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().

Referenced by VMCBatched::run(), and DMCBatched::run().

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

◆ writeBuffersHDF()

void writeBuffersHDF ( )
private

write data buffers to the logs file (HDF format)

Definition at line 291 of file WalkerLogManager.cpp.

References qmcplusplus::app_log(), WalkerLogManager::collectors_in_run_, 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().

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

Member Data Documentation

◆ collectors_in_run_

◆ 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 67 of file WalkerLogManager.h.

Referenced by WalkerLogManager::writeBuffers().

◆ file_root

std::string file_root
private

file prefix for the current driver

Definition at line 48 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 55 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 81 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 77 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 79 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 88 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 84 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 86 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 74 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 70 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 72 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 62 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 64 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 60 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 58 of file WalkerLogManager.h.

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


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