File SecondOrderFock.h

Copyright

This code is licensed under the 3-clause BSD license.

Copyright ETH Zurich, Laboratory for Physical Chemistry, Reiher Group.

See LICENSE.txt for details.

namespace Scine
namespace Sparrow
namespace dftb
class SecondOrderFock : public Scine::Sparrow::dftb::ScfFock
#include <SecondOrderFock.h>

Implementation of FockMatrixCalculator for DFTB2, the SCC-DFTB.

It calculates the electronic contributions to the energy and their derivatives with respect to the nuclear cartesian coordinates.

Public Functions

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.

void initialize()

Initializes the gamma matrix G and the gamma matrix with the derivatives dG.

double calculateElectronicEnergy() const

Sums up the electronic contributions of the zeroth order Hamiltonian, the gamma matrix and the spin contribution.

void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::derivativeType::first> &derivatives) const

adds the derivatives for the first, second atomic and second full types.

void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::derivativeType::second_atomic> &derivatives) const
void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::derivativeType::second_full> &derivatives) const

Private Functions

void completeH()

completes the H matrix by adding the first order correction to H0.

void constructG(Utils::derivOrder order)
template<Utils::derivOrder O>
void constructG()
template<Utils::derivOrder O>
Utils::AutomaticDifferentiation::Value1DType<O> gamma(int a, int b) const

Return gamma and its derivative(s).

template<Utils::derivativeType O>
void addSecondOrderDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<O> &derivatives) const

Private Members

Eigen::MatrixXd G
Utils::MatrixWithDerivatives dG