File NDDODipoleMomentCalculator.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 NDDODipoleMomentCalculator : public Scine::Sparrow::DipoleMomentCalculator
#include <NDDODipoleMomentCalculator.h>

Class resposible for the calculation of the dipole in the NDDO methods.

It must be able to calculate the dipole both with the NDDO approximation and with the use 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.

Public Functions

~NDDODipoleMomentCalculator()
Eigen::RowVector3d calculate() const

Calculates the molecular electrical dipole moment.

Return

An Eigen::Vector3d containing the dipole moment components in atomic units.

void useNDDOApproximation(bool useNDDOApprox)

Sets wether to use the NDDO dipole approximation or calculate the dipole from the dipole matrix.

Parameters
  • useNDDOApprox: The flag present in the method wrapper settings.

Public Static Functions

static std::unique_ptr<NDDODipoleMomentCalculator<NDDOMethod>> create(NDDOMethod &method, DipoleMatrixCalculator &dipoleMatrixCalculator)

Factory method for the NDDODipoleMomentCalculator class.

Return

An unique pointer to an instance of NDDODipoleMomentCalculator<NDDOMethod>

Parameters
  • method: An NDDO method, i.e. PM6Method, MNDOMethod, AM1Method,…

  • dipoleMatrixCalculator: An instance to the class calculating the dipole matrix.

Private Functions

Eigen::RowVector3d calculateWithNDDOApproximation(std::vector<double> atomicCharges, Utils::PositionCollection positions, Eigen::MatrixXd densityMatrix, Utils::ElementTypeCollection elements, std::vector<int> nrAOs, std::vector<double> chargeSeparationSP, std::vector<double> chargeSeparationPD) const
Eigen::RowVector3d calculateWithDipoleMatrix(std::vector<double> coreCharges, Utils::PositionCollection positions, Eigen::MatrixXd densityMatrix, Utils::DipoleMatrix dipoleMatrix, Eigen::MatrixXd overlapMatrix, Eigen::RowVector3d dipoleEvaluationCoordinate) const
NDDODipoleMomentCalculator(NDDOMethod &method, DipoleMatrixCalculator &dipoleMatrixCalculator)

Private Members

NDDOMethod &method_
DipoleMatrixCalculator &dipoleMatrixCalculator_
bool useNDDOApproximation_ = {true}