8namespace triqs_ctint::measures {
10 M_tau::M_tau(params_t
const ¶ms_, qmc_config_t
const &qmc_config_, container_set *results) : params(params_), qmc_config(qmc_config_) {
13 results->M_tau = block_gf<imtime, M_tau_target_t>{{params.beta, Fermion, params.n_tau}, params.gf_struct};
14 M_tau_.rebind(results->M_tau.value());
17 results->M_hartree = make_block_vector<M_tau_scalar_t>(params.gf_struct);
18 for (
auto &m : results->M_hartree.value()) M_hartree_.push_back(m);
27 for (
int b = 0; b < M_tau_.size(); ++b) {
30 foreach (qmc_config.dets[b], [&](c_t
const &c_i, cdag_t
const &cdag_j,
auto const &Ginv) {
32 if (c_i.tau == cdag_j.tau) {
33 M_hartree_[b](cdag_j.u, c_i.u) += Ginv * sign;
37 auto [s, dtau] = cyclic_difference(cdag_j.tau, c_i.tau);
40 M_tau_[b][closest_mesh_pt(dtau)](cdag_j.u, c_i.u) += Ginv * s * sign;
48 Z = mpi::all_reduce(Z, comm);
49 M_tau_ = mpi::all_reduce(M_tau_, comm);
50 double dtau = M_tau_[0].mesh().delta();
51 M_tau_ = M_tau_ / (-Z * dtau * params.beta);
52 for (
auto &m : M_hartree_) {
53 m = mpi::all_reduce(m, comm);
54 m = m / (-Z * params.beta);
58 for (
auto &M : M_tau_) {
60 M[params.n_tau - 1] *= 2.0;
void accumulate(mc_weight_t sign)
Accumulate M_tau using binning.
void collect_results(mpi::communicator const &comm)
Collect results and normalize.