File ElectronicContributionCalculator.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

This header file contains functions that allow for common notation for common things that can be done at a different degree of derivatives.

This header contains alias definitions defining which classes to use for the different degrees of derivatives.

namespace Utils
class ElectronicContributionCalculator
#include <ElectronicContributionCalculator.h>

Interface for the computation of the Fock matrix.

TODO: Separate for non-SCF and SCF specializations?

Public Functions

virtual ~ElectronicContributionCalculator()
virtual void initialize() = 0

Reinitialize after a change in the elements.

virtual void calculateDensityIndependentPart(Utils::derivOrder order) = 0

This function will be called only once per single-point calculation.

virtual void calculateDensityDependentPart(Utils::derivOrder order) = 0

This function will be called once per SCF iteration.

virtual void finalize(Utils::derivOrder order) = 0

This function will be called after the last iteration has run.

virtual void addDensityDependentElectronicContribution(std::shared_ptr<AdditiveElectronicContribution> contribution) = 0

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

virtual void addDensityIndependentElectronicContribution(std::shared_ptr<AdditiveElectronicContribution> contribution) = 0

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

virtual SpinAdaptedMatrix getMatrix() const = 0
virtual double calculateElectronicEnergy() const = 0
virtual void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::derivativeType::first> &derivatives) const = 0
virtual void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::derivativeType::second_atomic> &derivatives) const = 0
virtual void addDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<Utils::derivativeType::second_full> &derivatives) const = 0