Loading include/dca/phys/dca_step/cluster_solver/shared_tools/accumulation/tp/tp_accumulator.hpp +28 −0 Original line number Diff line number Diff line Loading @@ -491,6 +491,34 @@ double TpAccumulator<Parameters, linalg::CPU>::updateG4() { } } flops += n_loops * 2 * flops_update_atomic; break; case PARTICLE_PARTICLE_SINGLET: // G4 = 1/2 <c^+(k_ex-k1, s) c^+(k1, -s) c(k2, -s) c(k_ex-k2, s)> // = 1/2 G(k_ex-k2, k_ex-k1, s) G(k2, k1, -s). for (int w_ex_idx = 0; w_ex_idx < exchange_frq.size(); ++w_ex_idx) { const int w_ex = exchange_frq[w_ex_idx]; for (int w2 = 0; w2 < WTpDmn::dmn_size(); ++w2) for (int w1 = 0; w1 < WTpDmn::dmn_size(); ++w1) for (int k_ex_idx = 0; k_ex_idx < exchange_mom.size(); ++k_ex_idx) { const int k_ex = exchange_mom[k_ex_idx]; for (int k2 = 0; k2 < KDmn::dmn_size(); ++k2) for (int k1 = 0; k1 < KDmn::dmn_size(); ++k1) { Complex* const G4_ptr = &(*G4_)(0, 0, 0, 0, k1, k2, k_ex_idx, w1, w2, w_ex_idx); for (int s = 0; s < 2; ++s) { updateG4Atomic(G4_ptr, s, k1, k2, w1, w2, !s, q_minus_k(k1, k_ex), q_minus_k(k2, k_ex), w_ex_minus_w(w1, w_ex), w_ex_minus_w(w2, w_ex), sign_over_2, false); updateG4Atomic(G4_ptr, s, k1, q_minus_k(k2, k_ex), w1, w_ex_minus_w(w2, w_ex), !s, q_minus_k(k1, k_ex), k2, w_ex_minus_w(w1, w_ex), w2, sign_over_2, false); } } } } flops += n_loops * 2 * flops_update_atomic; break; default: Loading include/dca/phys/four_point_type.hpp +2 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,8 @@ enum FourPointType : int { PARTICLE_HOLE_TRANSVERSE, PARTICLE_HOLE_MAGNETIC, PARTICLE_HOLE_CHARGE, PARTICLE_PARTICLE_UP_DOWN PARTICLE_PARTICLE_UP_DOWN, PARTICLE_PARTICLE_SINGLET }; FourPointType stringToFourPointType(const std::string& name); Loading Loading
include/dca/phys/dca_step/cluster_solver/shared_tools/accumulation/tp/tp_accumulator.hpp +28 −0 Original line number Diff line number Diff line Loading @@ -491,6 +491,34 @@ double TpAccumulator<Parameters, linalg::CPU>::updateG4() { } } flops += n_loops * 2 * flops_update_atomic; break; case PARTICLE_PARTICLE_SINGLET: // G4 = 1/2 <c^+(k_ex-k1, s) c^+(k1, -s) c(k2, -s) c(k_ex-k2, s)> // = 1/2 G(k_ex-k2, k_ex-k1, s) G(k2, k1, -s). for (int w_ex_idx = 0; w_ex_idx < exchange_frq.size(); ++w_ex_idx) { const int w_ex = exchange_frq[w_ex_idx]; for (int w2 = 0; w2 < WTpDmn::dmn_size(); ++w2) for (int w1 = 0; w1 < WTpDmn::dmn_size(); ++w1) for (int k_ex_idx = 0; k_ex_idx < exchange_mom.size(); ++k_ex_idx) { const int k_ex = exchange_mom[k_ex_idx]; for (int k2 = 0; k2 < KDmn::dmn_size(); ++k2) for (int k1 = 0; k1 < KDmn::dmn_size(); ++k1) { Complex* const G4_ptr = &(*G4_)(0, 0, 0, 0, k1, k2, k_ex_idx, w1, w2, w_ex_idx); for (int s = 0; s < 2; ++s) { updateG4Atomic(G4_ptr, s, k1, k2, w1, w2, !s, q_minus_k(k1, k_ex), q_minus_k(k2, k_ex), w_ex_minus_w(w1, w_ex), w_ex_minus_w(w2, w_ex), sign_over_2, false); updateG4Atomic(G4_ptr, s, k1, q_minus_k(k2, k_ex), w1, w_ex_minus_w(w2, w_ex), !s, q_minus_k(k1, k_ex), k2, w_ex_minus_w(w1, w_ex), w2, sign_over_2, false); } } } } flops += n_loops * 2 * flops_update_atomic; break; default: Loading
include/dca/phys/four_point_type.hpp +2 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,8 @@ enum FourPointType : int { PARTICLE_HOLE_TRANSVERSE, PARTICLE_HOLE_MAGNETIC, PARTICLE_HOLE_CHARGE, PARTICLE_PARTICLE_UP_DOWN PARTICLE_PARTICLE_UP_DOWN, PARTICLE_PARTICLE_SINGLET }; FourPointType stringToFourPointType(const std::string& name); Loading