Commit 36bf07f2 authored by gbalduzz's avatar gbalduzz
Browse files

declared model traits as variable template.

parent ad248549
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -517,7 +517,7 @@ void DcaData<Parameters>::initializeH0_and_H_i() {
      }
  }

  if (models::has_non_density_interaction<Lattice>::value) {
  if constexpr (models::has_non_density_interaction<Lattice>) {
    models::initializeNonDensityInteraction<Lattice>(get_non_density_interactions(), parameters_);
  }

+1 −1
Original line number Diff line number Diff line
@@ -157,7 +157,7 @@ protected:
  constexpr static int n_bands_ = Parameters::model_type::BANDS;

  constexpr static bool non_density_density_ =
      models::has_non_density_interaction<typename Parameters::lattice_type>::value;
      models::has_non_density_interaction<typename Parameters::lattice_type>;
  CachedNdft<Real, RDmn, WTpExtDmn, WTpExtPosDmn, linalg::CPU, non_density_density_> ndft_obj_;

  SpGreenFunction G_;
+8 −16
Original line number Diff line number Diff line
@@ -24,40 +24,32 @@ namespace models {
// dca::phys::models::

template <class Lattice>
struct has_non_density_interaction {
  constexpr static bool value = false;
};
static constexpr bool has_non_density_interaction = false;

template <class BaseLattice>
struct has_non_density_interaction<HundLattice<BaseLattice>> {
  constexpr static bool value = true;
};
static constexpr bool has_non_density_interaction<HundLattice<BaseLattice>> = true;

template <class BaseLattice>
struct has_non_density_interaction<FeAsLattice<BaseLattice>> {
  constexpr static bool value = true;
};
static constexpr bool has_non_density_interaction<FeAsLattice<BaseLattice>> = true;

template <class PointGroup>
struct has_non_density_interaction<TwoBandCu<PointGroup>> {
  constexpr static bool value = true;
};
static constexpr bool has_non_density_interaction<TwoBandCu<PointGroup>> = true;

template <class Lattice, class HType, class Parameters>
std::enable_if_t<has_non_density_interaction<Lattice>::value, void> initializeNonDensityInteraction(
std::enable_if_t<has_non_density_interaction<Lattice>> initializeNonDensityInteraction(
    HType& interaction, const Parameters& pars) {
  Lattice::initializeNonDensityInteraction(interaction, pars);
}

template <class Lattice, class HType, class Parameters>
std::enable_if_t<has_non_density_interaction<Lattice>::value, void> initializeNonDensityInteraction(
std::enable_if_t<has_non_density_interaction<Lattice>> initializeNonDensityInteraction(
    std::unique_ptr<HType>& interaction, const Parameters& pars) {
  interaction.reset(new HType);
  interaction = std::make_unique<HType>();
  Lattice::initializeNonDensityInteraction(*interaction, pars);
}

template <class Lattice, class HType, class Parameters>
typename std::enable_if_t<not has_non_density_interaction<Lattice>::value, void> initializeNonDensityInteraction(
std::enable_if_t<!has_non_density_interaction<Lattice>> initializeNonDensityInteraction(
    HType& /*interaction*/, const Parameters& /*pars*/) {}

}  // namespace models