47namespace triqs::mc_tools {
99 static constexpr MCSignType default_initial_sign = std::numeric_limits<double>::infinity();
123 mpi::communicator
comm = mpi::communicator{};
174 mc_generic(
const std::string &rng_name,
int rng_seed,
int verbosity_lvl)
175 : rng_(rng_name, rng_seed), moves_(rng_), report_(&std::cout, verbosity_lvl), verbosity_lvl_(verbosity_lvl) {}
184 [[nodiscard]] MCSignType
get_sign()
const {
return sign_; }
194 template <
typename T>
void add_move(T &&m, std::string name,
double weight = 1.0) { moves_.add(std::forward<T>(m), name, weight); }
206 template <
typename T>
auto add_measure(T &&m, std::string name,
bool enable_timer =
true,
bool enable_report =
false) {
207 return measures_.insert(std::forward<T>(m), name, enable_timer, enable_report);
216 template <
typename T>
void add_measure_aux(std::shared_ptr<T>
const &m_ptr) { measures_aux_.emplace_back(m_ptr); }
234 int run(run_param_t
const ¶ms);
245 int warmup(run_param_t
const ¶ms);
271 int run(std::int64_t ncycles, std::int64_t cycle_length, std::function<
bool()> stop_callback,
bool enable_measures,
272 mpi::communicator c = mpi::communicator{},
bool enable_calibration =
false);
285 int warmup(std::int64_t ncycles, std::int64_t cycle_length, std::function<
bool()> stop_callback, MCSignType initial_sign,
286 mpi::communicator c = mpi::communicator{});
290 int warmup(std::int64_t ncycles, std::int64_t cycle_length, std::function<
bool()> stop_callback, mpi::communicator c = mpi::communicator{});
302 int accumulate(std::int64_t ncycles, std::int64_t cycle_length, std::function<
bool()> stop_callback, mpi::communicator c = mpi::communicator{});
316 int warmup_and_accumulate(std::int64_t ncycles_warmup, std::int64_t ncycles_acc, std::int64_t cycle_length, std::function<
bool()> stop_callback,
317 MCSignType initial_sign, mpi::communicator c = mpi::communicator{});
321 int warmup_and_accumulate(std::int64_t ncycles_warmup, std::int64_t ncycles_acc, std::int64_t cycle_length, std::function<
bool()> stop_callback,
322 mpi::communicator c = mpi::communicator{});
334 [[nodiscard]] std::map<std::string, double>
get_acceptance_rates()
const {
return moves_.get_acceptance_rates(); }
337 [[nodiscard]]
double get_percent()
const {
return percentage_done_; }
358 [[nodiscard]]
double get_warmup_time()
const {
return static_cast<double>(warmup_timer_); }
380 auto gr = g.create_group(name);
382 h5_write(gr,
"measures", mc.measures_);
383 h5_write(gr,
"number_cycle_done", mc.ncycles_done_);
384 h5_write(gr,
"number_measure_done", mc.nmeasures_done_);
399 auto gr = g.open_group(name);
400 h5_read(gr,
"moves", mc.moves_);
401 h5_read(gr,
"measures", mc.measures_);
402 h5_read(gr,
"number_cycle_done", mc.ncycles_done_);
403 h5_read(gr,
"number_measure_done", mc.nmeasures_done_);
409 void print_sim_info(run_param_t
const ¶ms, std::int64_t cycle_counter);
412 void metropolis_step();
416 void after_cycle_duties(run_param_t
const ¶ms);
419 void do_measurements();
425 std::vector<measure_aux> measures_aux_;
431 std::int64_t nmeasures_done_{0};
432 std::int64_t ncycles_done_{0};
433 double percentage_done_{0};
434 std::int64_t config_id_{0};
435 int verbosity_lvl_{0};
Output stream with a configurable verbosity level.
Accumulating wall-clock timer based on std::chrono::high_resolution_clock.
mc_phase
Phase of a Monte Carlo simulation.
Provides type erasure for auxiliary MC measurements.
Provides a set of MC measurements.
Provides a set of MC moves.
Provides a type erased random number generator.
Verbosity-controlled output stream and an auto-indenting std::ostream.
A wall-clock timer that accumulates elapsed seconds across start/stop intervals.
Small helpers that format wall-clock timestamps and durations for human-readable logs.