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
ZeroOrderMatricesCalculator.h
Go to the documentation of this file.
1 
8 #ifndef SPARROW_DFTB_ZEROORDERMATRICESCALCULATOR_H
9 #define SPARROW_DFTB_ZEROORDERMATRICESCALCULATOR_H
10 
11 #include "DFTBCommon.h"
14 #include <Eigen/Core>
15 
16 namespace Scine {
17 
18 namespace Utils {
19 enum class DerivativeOrder;
20 class DensityMatrix;
21 class AtomsOrbitalsIndexes;
22 } // namespace Utils
23 
24 namespace Sparrow {
25 
26 namespace dftb {
27 
33  public:
35  const Utils::AtomsOrbitalsIndexes& aoIndexes, const DFTBCommon::AtomicParameterContainer& atomicPar,
36  const DFTBCommon::DiatomicParameterContainer& diatomicPar,
37  const Utils::DensityMatrix& densityMatrix);
42  void initializeH0S();
44  void constructH0S(Utils::DerivativeOrder order);
45 
51  }
52  void calculateFockMatrix(Utils::DerivativeOrder /*order*/) {
53  }
54  // For DFTB0, overlapDerivativeMultiplier is the energy-weighted density matrix.
55  void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::Derivative::First>& derivatives,
56  const Eigen::MatrixXd& overlapDerivativeMultiplier) const;
57  void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::Derivative::SecondAtomic>& derivatives,
58  const Eigen::MatrixXd& overlapDerivativeMultiplier) const;
59  void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::Derivative::SecondFull>& derivatives,
60  const Eigen::MatrixXd& overlapDerivativeMultiplier) const;
61 
62  // Correspond to functions from OverlapCalculator
63  void calculateOverlap(Utils::DerivativeOrder highestRequiredOrder);
64  const Utils::MatrixWithDerivatives& getOverlap() const;
65  const Utils::MatrixWithDerivatives& getZeroOrderHamiltonian() const;
66  void resetOverlap();
67 
68  private:
69  template<Utils::DerivativeOrder O>
70  void constructH0S();
71  template<Utils::DerivativeOrder O>
72  void constructPartOfH0S();
73  template<Utils::Derivative O>
74  void addDerivativesImpl(Utils::AutomaticDifferentiation::DerivativeContainerType<O>& derivatives,
75  const Eigen::MatrixXd& overlapDerivativeMultiplier) const;
76 
77  Utils::MatrixWithDerivatives zeroOrderHamiltonian_;
79  const Utils::ElementTypeCollection& elements_;
80  const Utils::PositionCollection& positions_;
81  const Utils::AtomsOrbitalsIndexes& aoIndexes_;
82  const DFTBCommon::AtomicParameterContainer& atomicPar_;
83  const DFTBCommon::DiatomicParameterContainer& diatomicPar_;
84  const Utils::DensityMatrix& densityMatrix_;
85 };
86 
87 } // namespace dftb
88 
89 } // namespace Sparrow
90 } // namespace Scine
91 #endif // SPARROW_DFTB_ZEROORDERMATRICESCALCULATOR_H
void constructH0S(Utils::DerivativeOrder order)
Calculate the remaining parts of the Hamiltonian and overlap matrices.
Definition: ZeroOrderMatricesCalculator.cpp:75
void initializeFockCalculator()
Correspond to functions from ElectronicContributionCalculator Some of these functions do nothing to a...
Definition: ZeroOrderMatricesCalculator.h:50
This class calculates the matrices resulting from the zeroth order expansion of the DFT energy for th...
Definition: ZeroOrderMatricesCalculator.h:32
void initializeH0S()
Initializes the zeroth order corrected Hamiltonian and the overlap matrices. Furthermore, the one-center blocks are already pre-calculated, as they remain constant.
Definition: ZeroOrderMatricesCalculator.cpp:58