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
SecondOrderFock.h
Go to the documentation of this file.
1 
8 #ifndef SPARROW_DFTB_SECONDORDERFOCK_H
9 #define SPARROW_DFTB_SECONDORDERFOCK_H
10 
11 #include "DFTBCommon.h"
12 #include "ScfFock.h"
14 #include <Utils/Typenames.h>
15 #include <Eigen/Core>
16 
17 namespace Scine {
18 namespace Sparrow {
19 
20 namespace dftb {
21 
27 class SecondOrderFock : public ScfFock {
28  public:
30  explicit SecondOrderFock(ZeroOrderMatricesCalculator& matricesCalculator, const Utils::ElementTypeCollection& elements,
31  const Utils::PositionCollection& positions, const DFTBCommon::AtomicParameterContainer& atomicPar,
32  const DFTBCommon::DiatomicParameterContainer& diatomicPar, const Utils::DensityMatrix& densityMatrix,
33  const Eigen::MatrixXd& energyWeightedDensityMatrix, std::vector<double>& atomicCharges,
34  const std::vector<double>& coreCharges, const Utils::AtomsOrbitalsIndexes& aoIndexes,
35  const Eigen::MatrixXd& overlapMatrix, const bool& unrestrictedCalculationRunning);
36 
38  void initialize() override;
41  double calculateElectronicEnergy() const override;
43  void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::Derivative::First>& derivatives) const override;
44  void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::Derivative::SecondAtomic>& derivatives) const override;
45  void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::Derivative::SecondFull>& derivatives) const override;
46 
48  template<Utils::DerivativeOrder O>
49  Utils::AutomaticDifferentiation::Value1DType<O> gamma(int a, int b) const;
50 
51  protected:
52  private:
54  void completeH() override;
55  void constructG(Utils::DerivativeOrder order) override;
56  template<Utils::DerivativeOrder O>
57  void constructG();
58  template<Utils::Derivative O>
59  void addSecondOrderDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<O>& derivatives) const;
60 
61  Eigen::MatrixXd G; // Gamma matrix
62  Utils::MatrixWithDerivatives dG; // Derivative of G matrix elements
63 };
64 
65 } // namespace dftb
66 
67 } // namespace Sparrow
68 } // namespace Scine
69 #endif // SPARROW_DFTB_SECONDORDERFOCK_H
void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType< Utils::Derivative::First > &derivatives) const override
adds the derivatives for the first, second atomic and second full types.
void initialize() override
Initializes the gamma matrix G and the gamma matrix with the derivatives dG.
Definition: SecondOrderFock.cpp:36
SecondOrderFock(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 calling the ScfFock constructor.
Definition: SecondOrderFock.cpp:24
This class calculates the matrices resulting from the zeroth order expansion of the DFT energy for th...
Definition: ZeroOrderMatricesCalculator.h:32
Implementation of FockMatrixCalculator for DFTB2, the SCC-DFTB. It calculates the electronic contribu...
Definition: SecondOrderFock.h:27
double calculateElectronicEnergy() const override
Sums up the electronic contributions of the zeroth order Hamiltonian, the gamma matrix and the spin c...
Definition: SecondOrderFock.cpp:187
Utils::AutomaticDifferentiation::Value1DType< O > gamma(int a, int b) const
Definition: ScfFock.h:33