13 chiAB_tau::chiAB_tau(params_t
const ¶ms_, qmc_config_t &qmc_config_, container_set *results)
14 : params(params_), qmc_config(qmc_config_), tau_mesh{params_.beta, Boson, params_.n_tau_chi2} {
32 for (
auto [j, B] : enumerate(B_vec))
33 for (
auto &[coef_B, bl_pair_B, idx_pair_B] : B) {
35 auto [idx_cdag_B, idx_c_B] = idx_pair_B;
38 auto [bl_cdag_B, bl_c_B] = bl_pair_B;
40 for (
auto [i, A] : enumerate(A_vec))
41 for (
auto &[coef_A, bl_pair_A, idx_pair_A] : A) {
43 auto [idx_cdag_A, idx_c_A] = idx_pair_A;
46 auto [bl_cdag_A, bl_c_A] = bl_pair_A;
49 bool is_AABB = (bl_cdag_A == bl_c_A && bl_cdag_B == bl_c_B);
50 bool is_ABAB = (bl_cdag_A == bl_c_B && bl_cdag_B == bl_c_A);
51 bool is_AAAA = is_AABB && is_ABAB;
54 auto &det_1 = qmc_config.dets[bl_cdag_A];
55 auto &det_2 = is_AABB ? qmc_config.dets[bl_cdag_B] : qmc_config.dets[bl_c_A];
57 for (
auto tau : tau_mesh) {
58 auto tau_point = make_tau_t(
double(tau));
59 auto taup_point = tau_point;
65 if (tau.index() == params.n_tau_chi2 - 1) {
70 cdag_A.tau = tau_point;
75 chiAB_tau_[tau](i, j) += coef_A * coef_B * sign * det_1.try_insert2(0, 1, 0, 1, c_A, c_B, cdag_A, cdag_B);
77 chiAB_tau_[tau](i, j) += coef_A * coef_B * sign * det_1.try_insert(0, 0, c_A, cdag_A) * det_2.try_insert(0, 0, c_B, cdag_B);
79 chiAB_tau_[tau](i, j) -= coef_A * coef_B * sign * det_1.try_insert(0, 0, c_B, cdag_A) * det_2.try_insert(0, 0, c_A, cdag_B);
82 det_1.reject_last_try();
83 det_2.reject_last_try();