Commit 3c8baba8 authored by Maier, Thomas's avatar Maier, Thomas
Browse files

Added PARTICLE_PARTICLE_SINGLET channel

parent b346599a
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -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:
+2 −1
Original line number Diff line number Diff line
@@ -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);