7#include "swap_spin_lines.hpp"
11namespace triqs_ctseg::moves {
13 double swap_spin_lines::attempt() {
15 LOG(
"\n =================== ATTEMPT SWAP SPIN LINES ================ \n");
19 auto &jl = config.Jperp_list;
21 if (jl.empty() or jl.size() == 1) {
22 LOG(
"Nothing to swap!");
26 first_line_idx = rng(jl.size());
27 second_line_idx = rng(jl.size() - 1);
28 if (second_line_idx >= first_line_idx) ++second_line_idx;
30 auto &l1 = jl[first_line_idx];
31 auto &l2 = jl[second_line_idx];
36 real(wdata.Jperp(
double(l1.tau_Sminus - l1.tau_Splus))(0, 0)) *
37 real(wdata.Jperp(
double(l2.tau_Sminus - l2.tau_Splus))(0, 0));
40 real(wdata.Jperp(
double(l1.tau_Sminus - l2.tau_Splus))(0, 0)) *
41 real(wdata.Jperp(
double(l2.tau_Sminus - l1.tau_Splus))(0, 0));
43 double trace_ratio = J_future / J_current;
47 double det_ratio = 1.0;
51 double prop_ratio = 1.0;
53 LOG(
"trace_ratio = {}, prop_ratio = {}, det_ratio = {}", trace_ratio, prop_ratio, det_ratio);
55 double prod = trace_ratio * det_ratio * prop_ratio;
56 return (std::isfinite(prod) ? prod : 1);
61 double swap_spin_lines::accept() {
63 LOG(
"\n - - - - - ====> ACCEPT - - - - - - - - - - -\n");
65 auto &jl = config.Jperp_list;
66 auto &l1 = jl[first_line_idx];
67 auto &l2 = jl[second_line_idx];
70 std::swap(l1.tau_Splus, l2.tau_Splus);
73 if constexpr (print_logs or ctseg_debug) check_invariant(config, wdata);
74 LOG(
"Configuration is {}", config);
80 void swap_spin_lines::reject() { LOG(
"\n - - - - - ====> REJECT - - - - - - - - - - -\n"); }