7#include "./pert_order.hpp"
10namespace triqs_ctseg::measures {
12 pert_order::pert_order(std::function<
int()> get_order, std::optional<std::vector<double>> &hist_opt,
13 std::optional<double> &average_order_opt)
14 : get_order{get_order}, hist{hist_opt.emplace(4, 0.0)}, average_order{average_order_opt.emplace(0.0)} {}
18 void pert_order::accumulate(
double) {
19 auto order = get_order();
20 while (order >= hist.size()) hist.resize(2 * hist.size());
27 void pert_order::collect_results(mpi::communicator
const &c) {
28 N = mpi::all_reduce(N, c);
31 auto max_size = mpi::all_reduce(hist.size(), c, MPI_MAX);
32 hist.resize(max_size, 0.0);
35 hist = mpi::all_reduce(hist, c);
38 for (
int order : range(hist.size())) {
40 average_order += hist[order] * order;