File LCAOMethod.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 LCAOMethod : public Scine::Utils::SinglePointMethod
#include <LCAOMethod.h>

Base class describing a method based on a LCAO ansatz.

Subclassed by Scine::Utils::SCFMethod

Getters and setters for matrices

const Eigen::MatrixXd &getOverlapMatrix() const
void setOverlapMatrix(const Eigen::MatrixXd &S)
const SpinAdaptedMatrix &getFockMatrix() const
void setFockMatrix(SpinAdaptedMatrix F)
const DensityMatrix &getDensityMatrix() const
void setDensityMatrix(DensityMatrix P)
MolecularOrbitals &getMolecularOrbitals()
const MolecularOrbitals &getMolecularOrbitals() const
void setMolecularOrbitals(MolecularOrbitals C)
const Eigen::MatrixXd &getEnergyWeightedDensityMatrix() const
void setEnergyWeightedDensityMatrix(const Eigen::MatrixXd &W)

Public Functions

LCAOMethod(bool unrestrictedCalculationPossible, Utils::derivOrder maximalOrder, bool orthogonalBasisSet = false)
virtual ~LCAOMethod()
virtual void initialize()

Initialize the method after the parameters have been set or loaded.

void calculate(Utils::derivativeType d)

Performs one single-point calculation of the energy.

Parameters
  • derivativesOrder: which derivative to calculate up to, if possible.

void calculateDensityIndependentQuantities(Utils::derivativeType d = Utils::derivativeType::first)
void assembleFockMatrix()
void computeEnergyAndDerivatives(Utils::derivativeType d = Utils::derivativeType::first)
bool basisSetIsOrthogonal() const

Return

true if the basis set is orthogonal and the electronic structure is optimized in a normal eigenvalue problem, false if it is a generalized eigenvalue problem.

int getNumberElectrons() const
int getNumberAtomicOrbitals() const
void setMolecularCharge(int c)
int getMolecularCharge() const
void setSpinMultiplicity(int s)
int spinMultiplicity() const
void setUnrestrictedCalculation(bool b)
bool unrestrictedCalculationRunning() const
bool unrestrictedCalculationPossible() const
double getElectronicEnergy() const
double getRepulsionEnergy() const
double getHomoLumoGap() const

Get the HOMO-LUMO gap (Unit: Hartree).

const AtomsOrbitalsIndexes &getAtomsOrbitalsIndexesHolder() const

Returns a const reference to the object containing information about which atoms have how many orbitals and what their indexes are.

const SingleParticleEnergies &getSingleParticleEnergies() const

Returns a const reference to the object containing information about single-particle energies.

const LcaoUtil::ElectronicOccupation &getElectronicOccupation() const

Returns a const reference to the object containing information about the electronic occupation.

void setElectronicOccupationGenerator(std::unique_ptr<LcaoUtil::ElectronicOccupationGenerator> &&electronicOccupationSetter)

Set how the electronic occupation is to be set. By default, the Aufbau principle is used.

void verifyPesValidity()
void calculateDensity()

Protected Functions

void resizeLCAOMethodMatrices()

Resets the size of the different matrices. To be called during initialization of the specific method.

void calculateOccupation()
void calculateEnergyWeightedDensity()
void calculateBondOrderMatrix()
void calculateAtomicCharges()

Protected Attributes

Eigen::MatrixXd overlapMatrix_
Eigen::MatrixXd energyWeightedDensityMatrix_
SpinAdaptedMatrix fockMatrix_
MolecularOrbitals eigenvectorMatrix_
DensityMatrix densityMatrix_
int nAOs_
int nElectrons_ = 0
int nElectronsForUnchargedSpecies_ = 0
SingleParticleEnergies singleParticleEnergies_
AtomsOrbitalsIndexes aoIndexes_
LcaoUtil::ElectronicOccupation occupation_
int molecularCharge_ = 0
bool unrestrictedCalculationPossible_
bool unrestrictedCalculationRunning_ = false
int spinMultiplicity_ = 1
std::vector<double> coreCharges_
std::unique_ptr<LcaoUtil::ElectronicOccupationGenerator> electronicOccupationGenerator_
std::shared_ptr<StructureDependentInitializer> initializer_
std::shared_ptr<RepulsionCalculator> rep_
std::shared_ptr<OverlapCalculator> overlapCalculator_
std::shared_ptr<ElectronicContributionCalculator> electronicPart_
double electronicEnergy_
double repulsionEnergy_

Private Functions

void verifyChargeValidity()
void verifyMultiplicityValidity()
void verifyUnrestrictedValidity()
void calculateOccupationAndDensity()
template<Utils::derivativeType O>
void calculateDerivatives(Utils::AutomaticDifferentiation::DerivativeContainerType<O> &derivatives)

Private Members

const bool basisSetIsOrthogonal_