22#include "chi_from_gg2.hpp"
24using namespace nda::clef;
44template <> g2_iw_t chi0_from_gg2<Channel_t::PH>(g_iw_cvt g, g2_iw_cvt g2) {
45 double beta = g.mesh().beta();
46 auto chi0 = make_gf(g2.mesh(), g2.target());
48 chi0(Omega, n, np)(a, b, c, d)
49 << -beta * kronecker(n, np) * g(n)(d, a) * g(Omega + n)(b, c);
54template <> g2_iw_t chi_from_gg2<Channel_t::PH>(g_iw_cvt g, g2_iw_cvt g2) {
55 double beta = g.mesh().beta();
56 auto chi = make_gf(g2.mesh(), g2.target());
58 chi(Omega, n, np)(a, b, c, d)
59 << g2(Omega, n, np)(a, b, c, d) -
60 beta * kronecker(Omega) * g(n)(b, a) * g(np)(d, c);
65chi2_tau_t chi0_tau_from_g_tau_PH(g_tau_cvt g_tau) {
67 int nb = g_tau.target().shape()[0];
68 double beta = g_tau.mesh().beta();
69 int ntau = g_tau.mesh().size();
71 chi2_tau_t chi0_tau{{beta, Boson, ntau}, {nb, nb, nb, nb}};
73 chi0_tau(tau)(a, b, c, d) << g_tau(tau)(d, a) * g_tau(beta - tau)(b, c);
81template <> g2_iw_t chi0_from_gg2<Channel_t::PP>(g_iw_cvt g, g2_iw_cvt g2) {
82 double beta = g.mesh().beta();
83 auto chi0 = make_gf(g2.mesh(), g2.target());
85 chi0(Omega, n, np)(a, b, c, d)
86 << -beta * kronecker(n, np) * g(n)(d, a) * g(Omega - n)(b, c);
91template <> g2_iw_t chi_from_gg2<Channel_t::PP>(g_iw_cvt g, g2_iw_cvt g2) {
92 double beta = g.mesh().beta();
93 auto chi = make_gf(g2.mesh(), g2.target());
95 chi(Omega, n, np)(a, b, c, d)
96 << g2(Omega, n, np)(a, b, c, d) -
97 beta * kronecker(n + np, Omega) * g(n)(b, a) * g(np)(d, c);
106g2_iw_t chi0_from_gg2_PH(g_iw_vt g, g2_iw_vt g2) {
return chi0_from_gg2<Channel_t::PH>(g, g2); }
107g2_iw_t chi0_from_gg2_PP(g_iw_vt g, g2_iw_vt g2) {
return chi0_from_gg2<Channel_t::PP>(g, g2); }
109g2_iw_t chi_from_gg2_PH(g_iw_vt g, g2_iw_vt g2) {
return chi_from_gg2<Channel_t::PH>(g, g2); }
110g2_iw_t chi_from_gg2_PP(g_iw_vt g, g2_iw_vt g2) {
return chi_from_gg2<Channel_t::PP>(g, g2); }