Scine::Sparrow  5.0.0
Library for fast and agile quantum chemical calculations with semiempirical methods.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
OrderedInput.h
Go to the documentation of this file.
1 
8 #ifndef SPARROW_ORDEREDINPUT_H
9 #define SPARROW_ORDEREDINPUT_H
10 
12 
13 namespace Scine {
14 namespace Sparrow {
15 namespace detail {
21  protected:
22  RestrictedBase() = default;
23  RestrictedBase(const std::vector<int>& /*orderMap*/) {
24  }
25 };
32  auto isBeta() const -> const Eigen::Matrix<bool, -1, 1>& {
33  return isBeta_;
34  }
35  auto isBeta() -> Eigen::Matrix<bool, -1, 1>& {
36  return isBeta_;
37  }
38 
39  protected:
40  UnrestrictedBase() = default;
41 
42  UnrestrictedBase(const std::vector<int>& orderMap) {
43  assert(!orderMap.empty());
44  int nTransitions = orderMap.size();
45  Eigen::Matrix<bool, -1, 1> unorderedIsBeta = Eigen::Matrix<bool, -1, 1>::Constant(nTransitions, false);
46  // Same number of alpha and beta transitions
47  unorderedIsBeta.tail(nTransitions / 2).array() = true;
48 
49  TimeDependentUtils::transformOrder(unorderedIsBeta, isBeta_, orderMap, TimeDependentUtils::Direction::To);
50  }
51 
52  private:
53  Eigen::Matrix<bool, Eigen::Dynamic, 1> isBeta_;
54 };
55 } // namespace detail
56 
68 template<Utils::Reference restrictedness>
70  : public std::conditional<restrictedness == Utils::Reference::Restricted, detail::RestrictedBase, detail::UnrestrictedBase>::type {
71  public:
72  using Base =
73  typename std::conditional<restrictedness == Utils::Reference::Restricted, detail::RestrictedBase, detail::UnrestrictedBase>::type;
74  OrderedInput() = default;
76  const Utils::SpinAdaptedContainer<restrictedness, std::vector<Utils::Excitation>>& excitations,
77  const Eigen::MatrixXd& transitionCharges, const std::vector<int>& orderMap)
78  : Base(orderMap) {
79  TimeDependentUtils::transformOrder(TimeDependentUtils::flatten(energyDifferenceVector), energyDifferences_,
80  orderMap, TimeDependentUtils::Direction::To);
81  TimeDependentUtils::transformOrder(TimeDependentUtils::flatten(excitations), excitations_, orderMap,
82  TimeDependentUtils::Direction::To);
83  TimeDependentUtils::transformOrder(transitionCharges, transitionCharges_, orderMap, TimeDependentUtils::Direction::To);
84  }
85 
86  auto energyDifferences() const -> const Eigen::VectorXd& {
87  return energyDifferences_;
88  }
89  auto energyDifferences() -> Eigen::VectorXd& {
90  return energyDifferences_;
91  }
92  auto excitations() const -> const std::vector<Utils::Excitation>& {
93  return excitations_;
94  }
95  auto excitations() -> std::vector<Utils::Excitation>& {
96  return excitations_;
97  }
98  auto transitionCharges() const -> const Eigen::MatrixXd& {
99  return transitionCharges_;
100  }
101  auto transitionCharges() -> Eigen::MatrixXd& {
102  return transitionCharges_;
103  }
104 
105  private:
106  Eigen::VectorXd energyDifferences_;
107  std::vector<Utils::Excitation> excitations_;
108  Eigen::MatrixXd transitionCharges_;
109 };
110 } // namespace Sparrow
111 } // namespace Scine
112 
113 #endif // SPARROW_ORDEREDINPUT_H
Ordered input for the TDDFTB eigenvalue solver. Contains quantities in increasing energetic order...
Definition: OrderedInput.h:69
static void transformOrder(const Eigen::MatrixBase< Derived > &toTransform, const Eigen::MatrixBase< DerivedResult > &result, const std::vector< int > &orderVector, Direction direction)
Transforms a vector or matrix from one ordering to another, or back.
Definition: TimeDependentUtils.h:512
static auto flatten(const Utils::SpinAdaptedContainer< Utils::Reference::Restricted, Eigen::VectorXd > &in) -> Eigen::VectorXd
Transforms the SpinAdaptedContainer to a Eigen::VectorXd by extracting its &quot;restricted&quot; member...
Definition: TimeDependentUtils.h:215
Result of the pruning procedure. Unrestricted specialization. Has an additional &quot;isBeta&quot; bool vector...
Definition: OrderedInput.h:31
Result of the pruning procedure. Restricted specialization. Note: all quantities are sorted in increa...
Definition: OrderedInput.h:20