Skip to content

Commit

Permalink
change g3w to follow block2_gf
Browse files Browse the repository at this point in the history
  • Loading branch information
mili1247 committed Nov 27, 2024
1 parent 76c3d9d commit 83360af
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 10 deletions.
30 changes: 24 additions & 6 deletions c++/triqs_ctseg/measures/four_point.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ namespace triqs_ctseg::measures {
four_point::four_point(params_t const &p, work_data_t const &wdata, configuration_t const &config, results_t &results)
: wdata{wdata}, config{config}, results{results} {

beta = p.beta;
measure_g3w = p.measure_g3w;
measure_f3w = p.measure_f3w;
beta = p.beta;
measure_g3w = p.measure_g3w;
measure_f3w = p.measure_f3w;

auto g3w_vec = [&]() {
std::vector<gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4>>> green_v;
Expand All @@ -39,7 +39,6 @@ namespace triqs_ctseg::measures {
return green_v;
};

std::vector<std::string> block_names;
for (auto const &[bl_name, bl_size] : wdata.gf_struct) block_names.push_back(bl_name);
auto bosonic_block_names = std::vector<std::string>{};
for (auto const &str1 : block_names)
Expand Down Expand Up @@ -162,12 +161,31 @@ namespace triqs_ctseg::measures {
if (measure_g3w) {
g3w = mpi::all_reduce(g3w, c);
g3w = g3w / (Z * beta);
results.g3w = std::move(g3w);

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()));
for (int b1 : range(wdata.gf_struct.size())) {
for (int b2 : range(wdata.gf_struct.size())) {
g3w_vec[b1][b2] = g3w[b1 * wdata.gf_struct.size() + b2];
}
}

auto g3w_block = make_block2_gf(block_names, block_names, g3w_vec);
results.g3w = std::move(g3w_block);
}

if (measure_f3w) {
f3w = mpi::all_reduce(f3w, c);
f3w = f3w / (Z * beta);
results.f3w = std::move(f3w);

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()));
for (int b1 : range(wdata.gf_struct.size())) {
for (int b2 : range(wdata.gf_struct.size())) {
f3w_vec[b1][b2] = f3w[b1 * wdata.gf_struct.size() + b2];
}
}

auto f3w_block = make_block2_gf(block_names, block_names, f3w_vec);
results.f3w = std::move(f3w_block);
}

}
Expand Down
1 change: 1 addition & 0 deletions c++/triqs_ctseg/measures/four_point.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ namespace triqs_ctseg::measures {
bool measure_f3w;
int n_w_fermionic;
int n_w_bosonic;
std::vector<std::string> block_names;
std::vector<array<dcomplex, 4>> Mw_vector, nMw_vector;
vector<dcomplex> y_exp_ini, y_exp_inc, x_exp_ini, x_exp_inc;
vector<int> y_inner_index, x_inner_index;
Expand Down
4 changes: 2 additions & 2 deletions c++/triqs_ctseg/results.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,10 @@ namespace triqs_ctseg {
std::optional<nda::vector<double>> state_hist;

/// Four-point correlation function
std::optional<block_gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4>>> g3w;
std::optional<block2_gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4>>> g3w;

/// Four-point correlation function improved estimator
std::optional<block_gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4>>> f3w;
std::optional<block2_gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4>>> f3w;

/// Average sign
double average_sign;
Expand Down
4 changes: 2 additions & 2 deletions python/triqs_ctseg/solver_core_desc.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,12 @@
doc = r"""State histogram""")

c.add_member(c_name = "g3w",
c_type = "std::optional<block_gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4>>>",
c_type = "std::optional<block2_gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4>>>",
read_only= True,
doc = r"""Four-point correlation function""")

c.add_member(c_name = "f3w",
c_type = "std::optional<block_gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4>>>",
c_type = "std::optional<block2_gf<prod<imfreq, imfreq, imfreq>, tensor_valued<4>>>",
read_only= True,
doc = r"""Four-point correlation function improved estimator""")

Expand Down

0 comments on commit 83360af

Please sign in to comment.