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
SDFTB.h
Go to the documentation of this file.
1 
8 #ifndef SSPARROW_DFTB_H
9 #define SSPARROW_DFTB_H
10 
14 #include <Eigen/Core>
15 #include <memory>
16 #include <vector>
17 
18 namespace Scine {
19 namespace Utils {
20 class MatrixWithDerivatives;
21 class SpinAdaptedMatrix;
22 } // namespace Utils
23 namespace Sparrow {
24 
25 namespace dftb {
26 class SKAtom;
27 class DFTBCommon;
28 
29 class SDFTB {
30  public:
31  explicit SDFTB(const Utils::ElementTypeCollection& elements, const std::vector<std::unique_ptr<SKAtom>>& atomicParameters);
32 
33  ~SDFTB() = default;
34  void spinPopulationAnalysis(const Eigen::MatrixXd& densityMatrixUp, const Eigen::MatrixXd& densityMatrixDn,
35  const Eigen::MatrixXd& overlapMatrix);
36 
37  void initialize(int nAtoms, int nAOs, Utils::AtomsOrbitalsIndexes indexes);
38  void calculateSpinContribution();
39  void constructSpinHamiltonians(Utils::SpinAdaptedMatrix& H, const Eigen::MatrixXd& overlap) const;
40  double spinEnergyContribution() const;
41  template<Utils::Derivative O>
42  void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<O>& derivativesContainer,
43  const Utils::MatrixWithDerivatives& overlapDeriv, const Eigen::MatrixXd& pUp,
44  const Eigen::MatrixXd& pDn) const;
45 
46  private:
47  void spinPopulationAnalysis(const Eigen::MatrixXd& densityMatrix, const Eigen::MatrixXd& overlapMatrix,
48  std::vector<double>& population);
49 
50  int nAtoms_;
51  int nAOs_;
52  std::vector<double> pup, // spinup P vector (in case of spin-polarized calculation)
53  pdn, // spindown P vector (in case of spin-polarized calculation)
54  pdif; // difference P vector (in case of spin-polarized calculation)
55  const std::vector<std::unique_ptr<SKAtom>>& atomParameters; // parameters for atoms
56  Utils::AtomsOrbitalsIndexes aoIndexes_;
57  Eigen::MatrixXd spinContribution_;
58  const Utils::ElementTypeCollection& elementTypes_;
59 };
60 
61 } // namespace dftb
62 
63 } // namespace Sparrow
64 } // namespace Scine
65 #endif // SSPARROW_DFTB_H
Definition: SDFTB.h:29