22#include "freq_conv.hpp"
24using namespace nda::clef;
46g_iw_t block_iw_AB_to_matrix_valued(b_g_iw_vt bg_AB) {
49 for(
auto bidx : range(bg_AB.size()) ) {
50 auto g_AB = bg_AB(bidx);
51 n += g_AB.target_shape()[0];
54 gf<imfreq, matrix_valued> g{bg_AB(0).mesh(), {n, n}};
58 for(
auto bidx : range(bg_AB.size()) ) {
59 auto g_AB = bg_AB(bidx);
60 int size = g_AB.target_shape()[0];
62 g.data()(range::all, range(idx, idx+size), range(idx, idx+size))
63 = g_AB.data()(range::all, range::all, range::all);
98void block_3nu_AABB_to_tensor_valued(b_g2_iw_vt bg2_AABB, g2_iw_vt g2) {
108 g2(n1, n2, n3)(a, b, c, d) << kronecker(a,b) * kronecker(c,d) *
109 bg2_AABB(a, c)(n1, n2, n3)(0, 0, 0, 0);
116 g2(n1, n2, n3)(a, b, c, d) << g2(n1, n2, n3)(a, b, c, d) +
117 kronecker(a,d) * kronecker(b,c) * (1 - kronecker(a, c)) *
118 -g2(n1, n1 - n2 + n3, n3)(a, d, c, b);
124void get_magnetic_component(g2_iw_vt g2, g2_iw_vt g2_m) {
125 g2_m(n1, n2, n3) << g2(n1, n2, n3)(0, 0, 0, 0) - g2(n1, n2, n3)(0, 0, 1, 1);
131template <>
void from_3nu<Channel_t::PH>(g2_iw_vt g2_ch, g2_iw_cvt g2) {
132 g2_ch(w, n, np) << g2(n, n + w, np + w);
138template <>
void from_3nu<Channel_t::PH_bar>(g2_iw_vt g2_ch, g2_iw_cvt g2) {
139 g2_ch(w, n, np) << g2(n, np, np + w);
145template <>
void from_3nu<Channel_t::PP>(g2_iw_vt g2_ch, g2_iw_cvt g2) {
146 g2_ch(w, n, np) << g2(n, np, w - np);
149void from_3nu_PH(g2_iw_vt g2_ch, g2_iw_vt g2) { from_3nu<Channel_t::PH>(g2_ch, g2); }
150void from_3nu_PH_bar(g2_iw_vt g2_ch, g2_iw_vt g2) { from_3nu<Channel_t::PH_bar>(g2_ch, g2); }
151void from_3nu_PP(g2_iw_vt g2_ch, g2_iw_vt g2) { from_3nu<Channel_t::PP>(g2_ch, g2); }