@@ -23,9 +23,9 @@ namespace triqs_ctseg::measures {
23
23
four_point::four_point (params_t const &p, work_data_t const &wdata, configuration_t const &config, results_t &results)
24
24
: wdata{wdata}, config{config}, results{results} {
25
25
26
- beta = p.beta ;
27
- measure_g3w = p.measure_g3w ;
28
- measure_f3w = p.measure_f3w ;
26
+ beta = p.beta ;
27
+ measure_g3w = p.measure_g3w ;
28
+ measure_f3w = p.measure_f3w ;
29
29
30
30
auto g3w_vec = [&]() {
31
31
std::vector<gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4 >>> green_v;
@@ -39,7 +39,6 @@ namespace triqs_ctseg::measures {
39
39
return green_v;
40
40
};
41
41
42
- std::vector<std::string> block_names;
43
42
for (auto const &[bl_name, bl_size] : wdata.gf_struct ) block_names.push_back (bl_name);
44
43
auto bosonic_block_names = std::vector<std::string>{};
45
44
for (auto const &str1 : block_names)
@@ -162,12 +161,31 @@ namespace triqs_ctseg::measures {
162
161
if (measure_g3w) {
163
162
g3w = mpi::all_reduce (g3w, c);
164
163
g3w = g3w / (Z * beta);
165
- results.g3w = std::move (g3w);
164
+
165
+ std::vector<std::vector<gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4 >>>> g3w_vec (wdata.gf_struct .size (), std::vector<gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4 >>>(wdata.gf_struct .size ()));
166
+ for (int b1 : range (wdata.gf_struct .size ())) {
167
+ for (int b2 : range (wdata.gf_struct .size ())) {
168
+ g3w_vec[b1][b2] = g3w[b1 * wdata.gf_struct .size () + b2];
169
+ }
170
+ }
171
+
172
+ auto g3w_block = make_block2_gf (block_names, block_names, g3w_vec);
173
+ results.g3w = std::move (g3w_block);
166
174
}
175
+
167
176
if (measure_f3w) {
168
177
f3w = mpi::all_reduce (f3w, c);
169
178
f3w = f3w / (Z * beta);
170
- results.f3w = std::move (f3w);
179
+
180
+ std::vector<std::vector<gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4 >>>> f3w_vec (wdata.gf_struct .size (), std::vector<gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4 >>>(wdata.gf_struct .size ()));
181
+ for (int b1 : range (wdata.gf_struct .size ())) {
182
+ for (int b2 : range (wdata.gf_struct .size ())) {
183
+ f3w_vec[b1][b2] = f3w[b1 * wdata.gf_struct .size () + b2];
184
+ }
185
+ }
186
+
187
+ auto f3w_block = make_block2_gf (block_names, block_names, f3w_vec);
188
+ results.f3w = std::move (f3w_block);
171
189
}
172
190
173
191
}
0 commit comments