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
ThirdOrderFock.h
Go to the documentation of this file.
1 
8 #ifndef SPARROW_DFTB_THIRDORDERFOCK_H
9 #define SPARROW_DFTB_THIRDORDERFOCK_H
10 
11 #include "DFTBCommon.h"
12 #include "ScfFock.h"
14 #include <Eigen/Core>
15 #include <vector>
16 
17 namespace Scine {
18 namespace Sparrow {
19 
20 namespace dftb {
21 
26 class ThirdOrderFock : public ScfFock {
27  public:
29  explicit ThirdOrderFock(ZeroOrderMatricesCalculator& matricesCalculator, const Utils::ElementTypeCollection& elements,
30  const Utils::PositionCollection& positions, const DFTBCommon::AtomicParameterContainer& atomicPar,
31  const DFTBCommon::DiatomicParameterContainer& diatomicPar, const Utils::DensityMatrix& densityMatrix,
32  const Eigen::MatrixXd& energyWeightedDensityMatrix, std::vector<double>& atomicCharges,
33  const std::vector<double>& coreCharges, const Utils::AtomsOrbitalsIndexes& aoIndexes,
34  const Eigen::MatrixXd& overlapMatrix, const bool& unrestrictedCalculationRunning);
35 
37  void initialize() override;
39  double calculateElectronicEnergy() const override;
41  void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::Derivative::First>& derivatives) const override;
42  void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::Derivative::SecondAtomic>& derivatives) const override;
43  void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::Derivative::SecondFull>& derivatives) const override;
44  Eigen::MatrixXd getGammaMatrix() const;
45 
46  protected:
47  private:
48  void completeH() override;
49  void constructG(Utils::DerivativeOrder order) override;
50  template<Utils::DerivativeOrder O>
51  void constructG();
52  template<Utils::DerivativeOrder O>
53  void gammah(int a, int b, Utils::AutomaticDifferentiation::Value1DType<O>& gamma,
54  Utils::AutomaticDifferentiation::Value1DType<O>& Gab, Utils::AutomaticDifferentiation::Value1DType<O>& Gba) const;
55  template<Utils::DerivativeOrder O>
56  void hFactor(double Ua, double Ub, const Utils::AutomaticDifferentiation::Value1DType<O>& R,
57  Utils::AutomaticDifferentiation::Value1DType<O>& h, Utils::AutomaticDifferentiation::Value1DType<O>& dhdU) const;
58  template<Utils::Derivative O>
59  void addThirdOrderDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<O>& derivatives) const;
60 
61  Eigen::MatrixXd g; // gamma matrix
62  Eigen::MatrixXd G; // Gamma matrix
63  Utils::MatrixWithDerivatives dG; // Derivative of G matrix elements
64  Utils::MatrixWithDerivatives dg; // Derivative of gamma matrix elements, dgab/dRb
65  const double zeta;
66 };
67 
68 } // namespace dftb
69 
70 } // namespace Sparrow
71 } // namespace Scine
72 #endif // SPARROW_DFTB_THIRDORDERFOCK_H
ThirdOrderFock(ZeroOrderMatricesCalculator &matricesCalculator, const Utils::ElementTypeCollection &elements, const Utils::PositionCollection &positions, const DFTBCommon::AtomicParameterContainer &atomicPar, const DFTBCommon::DiatomicParameterContainer &diatomicPar, const Utils::DensityMatrix &densityMatrix, const Eigen::MatrixXd &energyWeightedDensityMatrix, std::vector< double > &atomicCharges, const std::vector< double > &coreCharges, const Utils::AtomsOrbitalsIndexes &aoIndexes, const Eigen::MatrixXd &overlapMatrix, const bool &unrestrictedCalculationRunning)
Constructor, calls the ScfFock constructor and sets zeta to 4.0.
Definition: ThirdOrderFock.cpp:23
void initialize() override
Calls ScfFock::initialize() and initializes the gamma, Gamma and the matrices containing the derivati...
Definition: ThirdOrderFock.cpp:36
void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType< Utils::Derivative::First > &derivatives) const override
calculates automatically the derivatives of the energy with respect to the nuclear cartesian coordina...
Definition: ThirdOrderFock.cpp:198
This class calculates the matrices resulting from the zeroth order expansion of the DFT energy for th...
Definition: ZeroOrderMatricesCalculator.h:32
double calculateElectronicEnergy() const override
Sums up the electronic energy contributions of the zeroth, first and second order Hamiltonian correct...
Definition: ThirdOrderFock.cpp:242
Implementation of FockMatrixCalculator for DFTB3. It calculates the electronic contributions to the e...
Definition: ThirdOrderFock.h:26
Definition: ScfFock.h:33