Commit b97afaff authored by gbalduzz's avatar gbalduzz
Browse files

Merge remote-tracking branch 'origin/master' into gpu_trunk2

parents 7ae71330 d510f6f1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4,5 +4,5 @@ If the DCA++ code contributes to your research, we kindly ask to acknowledge thi

Urs R. Hähner, Gonzalo Alvarez, Thomas A. Maier, Raffaele Solcà, Peter Staar, Michael S. Summers, and Thomas C. Schulthess,
*DCA++: A software framework to solve correlated electron problems with modern quantum cluster methods,*
Comput. Phys. Commun (2019),
Comput. Phys. Commun. (2019),
10.1016/j.cpc.2019.01.006.
+2 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include "dca/linalg/util/allocators/allocators.hpp"
#include "dca/linalg/device_type.hpp"
#include "dca/linalg/util/copy.hpp"
#include "dca/linalg/util/memory.hpp"
#include "dca/linalg/util/stream_functions.hpp"

namespace dca {
@@ -290,6 +291,7 @@ Matrix<ScalarType, device_name>::Matrix(const std::string& name, std::pair<int,
  assert(capacity_.first >= capacity.first && capacity_.second >= capacity.second);

  data_ = Allocator::allocate(nrElements(capacity_));
  util::Memory<device_name>::setToZero(data_, nrElements(capacity_));
}

template <typename ScalarType, DeviceType device_name>
+17 −15
Original line number Diff line number Diff line
@@ -396,10 +396,12 @@ double TpAccumulator<Parameters, linalg::CPU>::updateG4() {

  switch (mode_) {
    case PARTICLE_HOLE_MAGNETIC:
      // Note: sums over spin indices are implied.
      //
      // G4(k1, k2, k_ex) = 1/2 (s1 * s2) <c^+(k1 + k_ex, s1) c(k1, s1)
      //                    c^+(k2, s2) c(k2 + k_ex, s2)>
      //                     = 1/2 (s1 * s2) <G(k1, k1 + k_ex, s1) G(k2 + k_ex, k2, s2) - (s1 ==s2)
      //                       G(k2 + k_ex, k1 + k_ex, s1) G(k1, k2, s1)>
      //                  = 1/2 (s1 * s2) <G(k1, k1 + k_ex, s1) G(k2 + k_ex, k2, s2) -
      //                    (s1 == s2) G(k2 + k_ex, k1 + k_ex, s1) G(k1, k2, s1)>.
      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)
@@ -425,7 +427,7 @@ double TpAccumulator<Parameters, linalg::CPU>::updateG4() {
    case PARTICLE_HOLE_CHARGE:
      // G4(k1, k2, k_ex) += 1/2  <c^+(k1 + k_ex, s1) c(k1, s1) c^+(k2, s2) c(k2 + k_ex, s2)> =
      //                  = 1/2 <G(k1, k1 + k_ex, s1) G(k2 + k_ex, k2, s2) -
      //                  (s1 ==s2) G(k2 + k_ex, k1 + k_ex, s1) G(k1, k2, s1)>
      //                    (s1 == s2) G(k2 + k_ex, k1 + k_ex, s1) G(k1, k2, s1)>.
      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)
@@ -450,8 +452,8 @@ double TpAccumulator<Parameters, linalg::CPU>::updateG4() {
      break;

    case PARTICLE_HOLE_TRANSVERSE:
      // G4 = 1/2 \sum_s <c^+(k1 + k_ex, s) c(k1, -s) c^+(k2, -s) c(k2 + k_ex, s)>
      //    = -1/2 \sum_s G( k2 + k_ex, k1 + k_ex, s) G4(k1, k2, -s)
      // G4 = 1/2 <c^+(k1 + k_ex, s) c(k1, -s) c^+(k2, -s) c(k2 + k_ex, s)>
      //    = -1/2 G(k2 + k_ex, k1 + k_ex, s) G(k1, k2, -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)
@@ -473,8 +475,8 @@ double TpAccumulator<Parameters, linalg::CPU>::updateG4() {
      break;

    case PARTICLE_PARTICLE_UP_DOWN:
      // G4 = 1/2 \sum_s <c^+(k_ex-k1, s) c^+(k1, -s) c(k2, -s) c(k_ex-k2, s)>
      //    = 1/2 \sum_s G(k_ex-k2, k_ex-k1, s) G4(k2, k1, -s)
      // 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)
@@ -544,9 +546,9 @@ void TpAccumulator<Parameters, linalg::CPU>::updateG4SpinDifference(
    const bool cross_legs) {
  // This function performs the following update for each band:
  //
  // G4(k1, k2, w1, w2) += alpha * (G(up, k1_a, k2_a, w1_a, w2_a) * G(up, k1_b, k2_b, w1_b, w2_b)
  //                       + sign * G(down, k1_a, k2_a, w1_a, w2_a) * G(down, k1_b, k2_b, w1_b,
  //                       w2_b)
  // G4(k1, k2, w1, w2) += alpha * (G(up, k1_a, k2_a, w1_a, w2_a)
  //                       + sign * G(down,k1_a, k2_a, w1_a, w2_a)) *
  //                          (G(up,k1_b,k2_b,w1_b,w2_b) + sign * G(down,k1_b,k2_b,w1_b,w2_b))
  if (n_bands_ == 1) {
      *G4_ptr += alpha * (getGSingleband(0, k1_a, k2_a, w1_a, w2_a) +
			  Complex(sign) * getGSingleband(1, k1_a, k2_a, w1_a, w2_a)) *
+1 −1
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ void CMakeOptions::print() {
            << "DCA_WITH_SINGLE_PRECISION_MEASUREMENTS = " << dca_with_single_precision_measurements
            << "\n"
            << "DCA_WITH_MEMORY_SAVINGS = " << CMakeOptions::dca_with_memory_savings << "\n"
            << "DCA_WITH_MANAGED_MEMORY = " << CMakeOptions::dca_with_memory_savings << "\n"
            << "DCA_WITH_MANAGED_MEMORY = " << CMakeOptions::dca_with_managed_memory << "\n"
            << "\n"
            << "DCA_WITH_QMC_BIT = " << CMakeOptions::dca_with_qmc_bit << "\n"
            << std::endl;
+2 −2
Original line number Diff line number Diff line
@@ -5,8 +5,8 @@
// See LICENSE for terms of usage.
// See CITATION.md for citation guidelines, if DCA++ is used for scientific publications.
//
// Author: Raffaele Solca' (rasolca@itp.phys.ethz.ch)
//         Giovanni Balduzzi (gbalduzz@itp.phys.ethz.ch)
// Author: Giovanni Balduzzi (gbalduzz@itp.phys.ethz.ch)
//         Raffaele Solca' (rasolca@itp.phys.ethz.ch)
//
// This file implements laset_gpu.hpp.

Loading