File ScfFock.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 ScfFock : public ElectronicContributionCalculator
#include <ScfFock.h>

Implementation of FockMatrixCalculator for SCF-type DFTB methods.

Subclassed by Scine::Sparrow::dftb::SecondOrderFock, Scine::Sparrow::dftb::ThirdOrderFock

Public Functions

ScfFock(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)
void initialize()
void calculateDensityDependentPart(Utils::derivOrder order)
void calculateDensityIndependentPart(Utils::derivOrder order)
Utils::SpinAdaptedMatrix getMatrix() const
void finalize(Utils::derivOrder order)
void addDensityDependentElectronicContribution(std::shared_ptr<Utils::AdditiveElectronicContribution> contribution)

This function adds an additive electronic contribution to the Hamiltonian that will be evaluated each SCF iteration.

void addDensityIndependentElectronicContribution(std::shared_ptr<Utils::AdditiveElectronicContribution> contribution)

This function adds an additive electronic contribution to the Hamiltonian that will be evaluated once per single-point calculation.

Protected Functions

int getNumberAtoms() const
void populationAnalysis()
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

Protected Attributes

ZeroOrderMatricesCalculator &zeroOrderMatricesCalculator_
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_
SDFTB spinDFTB
Eigen::MatrixXd HXoverS_
Eigen::MatrixXd H0_
Eigen::MatrixXd correctionToFock
std::vector<std::shared_ptr<Utils::AdditiveElectronicContribution>> densityDependentContributions_
std::vector<std::shared_ptr<Utils::AdditiveElectronicContribution>> densityIndependentContributions_

Private Functions

virtual void completeH() = 0
virtual void constructG(Utils::derivOrder order) = 0