QMCPACK
WalkerLogManager.h
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////////////////
2 // This file is distributed under the University of Illinois/NCSA Open Source License.
3 // See LICENSE file in top directory for details.
4 //
5 // Copyright (c) 2024 QMCPACK developers.
6 //
7 // File developed by: Jaron T. Krogel, krogeljt@ornl.gov, Oak Ridge National Laboratory
8 //
9 // File created by: Jaron T. Krogel, krogeljt@ornl.gov, Oak Ridge National Laboratory
10 //////////////////////////////////////////////////////////////////////////////////////
11 
12 
13 #ifndef QMCPLUSPLUS_WALKERLOGMANAGER_H
14 #define QMCPLUSPLUS_WALKERLOGMANAGER_H
15 
16 #include "WalkerLogCollector.h"
18 
19 namespace qmcplusplus
20 {
21 
22 
23 struct WalkerLogInput;
24 
25 
26 /** Driver-level resource for walker log collection.
27  *
28  * This class manages the HDF file (open/close/write).
29  * Walker buffer data from all crowd-level WalkerLogCollectors are written
30  * to the HDF file at the end of each MC block.
31  *
32  * Just prior to the write, this class examines the distribution of walker
33  * energies on its rank for each MC step in the MC block, identifies the
34  * minimum/maximum/median energy walkers and buffers their full data
35  * (including per-particle information) for the write.
36  * This data corresponds to walker information at specific quantiles of the
37  * energy distribution.
38  * See WalkerLogManager::writeBuffers()
39  *
40  * Writing per-particle information for all walkers is optional, as is
41  * writing data for the minimum/maximum/median energy walkers.
42  * Scalar "property" data for each walker is always written.
43  */
45 {
46 private:
47  /// file prefix for the current driver
48  std::string file_root;
50  /// output state
52  /// access to HDF file
53  std::unique_ptr<hdf_archive> hdf_file;
54  /// whether walker quantity data ("data_layout") has been recorded in HDF
56 
57  /// whether to write per-particle data for all walkers
59  /// whether to write full data for the minimum energy walker at each step
61  /// whether to write full data for the maximum energy walker at each step
63  /// whether to write full data for the median energy walker at each step
65 
66  /// used to sort energy information for identifying walkers by energy quantile
67  std::vector<std::tuple<size_t, WLog::Real, size_t, size_t>> energy_order;
68 
69  /// buffer containing integer properties for the minimum energy walkers
71  /// buffer containing real-valued properties for the minimum energy walkers
73  /// buffer containing per-particle properties for the minimum energy walkers
75 
76  /// buffer containing integer properties for the maximum energy walkers
78  /// buffer containing real-valued properties for the maximum energy walkers
80  /// buffer containing per-particle properties for the maximum energy walkers
82 
83  /// buffer containing integer properties for the median energy walkers
85  /// buffer containing real-valued properties for the median energy walkers
87  /// buffer containing per-particle properties for the median energy walkers
89 
91 
92 public:
93  WalkerLogManager(WalkerLogInput& inp, bool allow_logs, std::string series_root, Communicate* comm = 0);
94 
95  /// create a WalkerLogCollector
96  std::unique_ptr<WalkerLogCollector> makeCollector() const;
97 
98  /// open the logs file and check consistency of the collectors at the start of a run
99  void startRun(RefVector<WalkerLogCollector>&& collectors);
100 
101  /// close the logs file at the end of a run
102  void stopRun();
103 
104  /// collect min/max/median walker data and write buffered walker log data to file
105  void writeBuffers();
106 
107 private:
108  /// check consistency of walker buffer row sizes
109  void checkCollectors(const RefVector<WalkerLogCollector>& collectors) const;
110 
111  /// open the logs file
112  void openFile(const RefVector<WalkerLogCollector>& collectors);
113 
114  /// close the logs file
115  void closeFile();
116 
117  /// open the logs file (HDF format)
118  void openHDFFile(const RefVector<WalkerLogCollector>& collectors);
119 
120  /// write data buffers to the logs file (HDF format)
121  void writeBuffersHDF();
122 
123  /// close the logs file (HDF format)
124  void closeHDFFile();
125 };
126 
127 
128 } // namespace qmcplusplus
129 
130 #endif
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
void closeHDFFile()
close the logs file (HDF format)
RefVector< WalkerLogCollector > collectors_in_run_
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
void checkCollectors(const RefVector< WalkerLogCollector > &collectors) const
check consistency of walker buffer row sizes
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::vector< std::tuple< size_t, WLog::Real, size_t, size_t > > energy_order
used to sort energy information for identifying walkers by energy quantile
void startRun(RefVector< WalkerLogCollector > &&collectors)
open the logs file and check consistency of the collectors at the start of a run
WalkerLogBuffer< WLog::Int > wmed_property_int_buffer
buffer containing integer properties for the median energy walkers
void stopRun()
close the logs file at the end of a run
bool write_max_data
whether to write full data for the maximum energy walker at each step
void writeBuffersHDF()
write data buffers to the logs file (HDF format)
Driver-level resource for walker log collection.
Wrapping information on parallelism.
Definition: Communicate.h:68
void openFile(const RefVector< WalkerLogCollector > &collectors)
open the logs file
void writeBuffers()
collect min/max/median walker data and write buffered walker log data to file
void closeFile()
close the logs file
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
std::vector< std::reference_wrapper< T > > RefVector
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
Helper struct holding data transferred from WalkerLogManager to WalkerLogCollector following input re...
void openHDFFile(const RefVector< WalkerLogCollector > &collectors)
open the logs file (HDF format)
WalkerLogManager(WalkerLogInput &inp, bool allow_logs, std::string series_root, Communicate *comm=0)
std::unique_ptr< WalkerLogCollector > makeCollector() const
create a WalkerLogCollector
Native representation for walker logs input.