Commit 65607fb7 authored by gbalduzz's avatar gbalduzz
Browse files

changed sign of J interaction in the FeAs model.

parent ed382de2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
1;// Copyright (C) 2018 ETH Zurich
;// Copyright (C) 2018 ETH Zurich
// Copyright (C) 2018 UT-Battelle, LLC
// All rights reserved.
//
+51 −63
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@

#include "dca/function/domains.hpp"
#include "dca/function/function.hpp"
#include "dca/phys/domains/cluster/symmetries/point_groups/2d/2d_square.hpp"
#include "dca/phys/models/analytic_hamiltonians/bilayer_lattice.hpp"
#include "dca/phys/models/analytic_hamiltonians/cluster_shape_type.hpp"

@@ -56,9 +57,6 @@ public:
  static void initializeNonDensityInteraction(
      func::function<double, func::dmn_variadic<Nu, Nu, Nu, Nu, RDmn>>& non_density_interaction,
      const parameters_type& parameters);

  static int transformationSignofK(int b1, int b2, int s);
  static int transformationSignofR(int b1, int b2, int s);
};

template <typename PointGroupType>
@@ -72,7 +70,6 @@ void FeAsLattice<PointGroupType>::initialize_H_0(
  if (SpinDmn::dmn_size() != 2)
    throw std::logic_error("Spin domain size must be 2.");

  const auto& k_vecs = KDmn::get_elements();
  const auto t1 = parameters.get_t1();
  const auto t2 = parameters.get_t2();
  const auto t3 = parameters.get_t3();
@@ -98,13 +95,13 @@ void FeAsLattice<PointGroupType>::initialize_H_0(
      H_0(1, s, 0, s, k_ind) = val_01;
    }
  }
}

template <typename PointGroupType>
template <typename BandDmn, typename SpinDmn, typename RDmn, typename parameters_type>
void FeAsLattice<PointGroupType>::initialize_H_interaction(
    func::function<double, func::dmn_variadic<func::dmn_variadic<BandDmn, SpinDmn>,
                                                func::dmn_variadic<BandDmn, SpinDmn>, RDmn>> &
          H_interaction,
                                              func::dmn_variadic<BandDmn, SpinDmn>, RDmn>>& H_interaction,
    const parameters_type& parameters) {
  if (BandDmn::dmn_size() != BANDS)
    throw std::logic_error("Bilayer lattice has two bands.");
@@ -121,13 +118,13 @@ void FeAsLattice<PointGroupType>::initialize_H_0(
    for (int b2 = 0; b2 < BANDS; ++b2)
      for (int s1 = 0; s1 < 2; ++s1)
        for (int s2 = 0; s2 < 2; s2++) {
            // Coulomb repulsion and contribution from S*S interaction.
          // Coulomb repulsion and contribution from -J S_z*S_z interaction.
          if (b1 == b2 and s1 != s2)
            H_interaction(b1, s1, b2, s2, origin) = U;
          else if (b1 != b2 and s1 == s2)
              H_interaction(b1, s1, b2, s2, origin) = V + J;
            else if (b1 != b2 and s1 != s2)
            H_interaction(b1, s1, b2, s2, origin) = V - J;
          else if (b1 != b2 and s1 != s2)
            H_interaction(b1, s1, b2, s2, origin) = V + J;
        }
}

@@ -145,23 +142,14 @@ void FeAsLattice<PointGroupType>::initialize_H_0(
    for (int b2 = 0; b2 < BANDS; b2++) {
      if (b1 == b2)
        continue;
        // spin-flip interaction equivalent to  S^+S^- and S^-S^+ interactions.
        non_density_interaction(nu(b1, up), nu(b2, up), nu(b2, down), nu(b1, down), 0) = -J;
      // spin-flip interaction coming from the -J * S_b1^+S_b2^- Hamiltonian term.
      // Note: a factor of -1 comes from rearranging the fermion operators.
      non_density_interaction(nu(b1, up), nu(b2, up), nu(b2, down), nu(b1, down), 0) = J;
    }
}

  template <typename PointGroupType>
  int FeAsLattice<PointGroupType>::transformationSignofR(int b1, int b2, int s) {
    return 1;
  }

  template <typename PointGroupType>
  int FeAsLattice<PointGroupType>::transformationSignofK(int b1, int b2, int s) {
    return 1;
  }

}  // namespace models
}  // namespace models
}  // namespace phys
}  // namespace dca

#endif  // DCA_PHYS_MODELS_ANALYTIC_HAMILTONIANS_FE_AS_LATTICE_HPP
+4 −4
Original line number Diff line number Diff line
@@ -32,16 +32,16 @@ public:
  // t3: next-nearest-neighbour, same orbital.
  // t4: next-nearest-neighbour, opposite orbital.
  double get_t1() const {
    return std::array<double, 4>{t1_, t2_, t3_, t4_};
    return t1_;
  }
  double get_t2() const {
    return std::array<double, 4>{t1_, t2_, t3_, t4_};
    return t2_;
  }
  double get_t3() const {
    return std::array<double, 4>{t1_, t2_, t3_, t4_};
    return t3_;
  }
  double get_t4() const {
    return std::array<double, 4>{t1_, t2_, t3_, t4_};
    return t4_;
  }

  // On-site, same orbital repulsion.