File NDDODipoleMatrixCalculator.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
template<class NDDOMethod>
class NDDODipoleMatrixCalculator : public Scine::Sparrow::DipoleMatrixCalculator
#include <NDDODipoleMatrixCalculator.h>

Class responsible for the calculation of the dipole matrix.

Template Parameters
  • NDDOMethod: An NDDO method, must derive from Utils::SCFMethod and must have the method getInitializer(). getInitializer must return a valid NDDOInitializer instance. This class is responsible for the calculation of the dipole matrix in both atomic and molecular orbital basis. The dipole matrix in atomic orbital basis is calculated by explicitly integrating in closed form or using the highly efficient Obara-Saika scheme the dipole integral <|r|>. The dipole matrix in atomic orbital basis is then transformed in molecular orbital basis by D_{MO} = C^T * D_{AO} * C in restricted formalism, D_{MO} = C_^T * D_{AO} * C_ + C_^T * D_{AO} * C_ in unrestricted formalism.

Public Functions

~NDDODipoleMatrixCalculator()
const Utils::DipoleMatrix &getAODipoleMatrix() const

Getter for the dipole matrix in AO.

Utils::DipoleMatrix getMODipoleMatrix() const

Getter for the dipole matrix in MO.

The dipole matrix in MO basis is transformed from the one in AO basis with every call to this function.

Return

The dipole matrix in MO basis.

void setAODipoleMatrix(Utils::DipoleMatrix dipoleMatrix)

Setter for the dipole matrix in AO basis.

void fillDipoleMatrix(const Eigen::RowVector3d &dipoleEvaluationCoordinate)

Calculates the dipole matrix in AO basis.

Parameters
  • dipoleEvaluationCoordinate: The coordinates to consider as the origin for the dipole calculation.

void initialize()

Initializes the matrices and invalidates the current dipole matrix.

void setIntegralMethod(const IntegralMethod &IntegralMethod)

Sets the dipole integral calculation method.

Parameters
  • IntegralMethod: Either calculates is from the evaluation of a closed form formula, or with the Obara-Saika recursive algorithm.

bool isValid() const

Return the validity status of the dipole matrix.

void invalidate()

Invalidates the underlying dipole matrices and forces a new calculation.

Public Static Functions

static std::unique_ptr<NDDODipoleMatrixCalculator<NDDOMethod>> create(NDDOMethod &method)

Private Functions

NDDODipoleMatrixCalculator(NDDOMethod &method)
Utils::DipoleMatrix calculateMODipoleMatrixRestricted() const
Utils::DipoleMatrix calculateMODipoleMatrixUnrestricted() const

Private Members

int nAOs_
const Utils::AtomsOrbitalsIndexes &aoIndexes_
const Utils::ElementTypeCollection &elementTypes_
const Utils::PositionCollection &positions_
const nddo::ElementParameters &elementParameters_
const Eigen::MatrixXd &overlapMatrix_
const Utils::MolecularOrbitals &molecularOrbitals_
Utils::DipoleMatrix dipoleMatrix_
int nAtoms_
IntegralMethod integralMethod_ = {IntegralMethod::ObaraSaika}
bool valid_