File GTODipoleMatrixBlock.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
class GTODipoleMatrixBlock
#include <GTODipoleMatrixBlock.h>

Class responsible for calculating a block of the dipole matrix in GTO ao basis.

The basis must be one of the STO-nG type.

Public Types

using oneDimensionalArray = std::array<double, 3>
using twoDimensionalArray = std::array<oneDimensionalArray, 3>
using threeDimensionalArray = std::array<twoDimensionalArray, 3>

Public Functions

GTODipoleMatrixBlock()

Constructor.

It initializes the angular momenta and the orbital AO indices.

void setIntegralMethod(IntegralMethod method)

Sets the integral method to either Obara-Saika or analytical.

void initialize(const Eigen::RowVector3d &Ra, const Eigen::RowVector3d &Rb, const Eigen::RowVector3d &dipoleEvaluationCoordinate, double expA, double expB, const Utils::GTOExpansion &gtoA, const Utils::GTOExpansion &gtoB)

Initializes the data structures used throughout the calculation.

std::array<Eigen::MatrixXd, 3> createSTOBlock(const Utils::GTOExpansion &gtoA, const Utils::GTOExpansion &gtoB, const Eigen::RowVector3d &Ra, const Eigen::RowVector3d &Rb, const Eigen::Vector3d &Rab, const Eigen::Vector3d &dipoleEvaluationCoordinate)

Calculates a block of the dipole matrix.

Private Functions

void dOrbitalsFromSixCartesianToFiveRealSolidHarmonics()
void calculateAnalyticalDipoleIntegrals(int GaussTypeFunctionIndexA, int GaussTypeFunctionIndexB, const Utils::GTOExpansion &gtoA, const Utils::GTOExpansion &gtoB, const Eigen::RowVector3d &Ra, const Eigen::RowVector3d &Rb, const Eigen::Vector3d &dipoleEvaluationCoordinate)
void calculateSingleGTFPair(int GaussTypeFunctionIndexA, int GaussTypeFunctionIndexB, const Utils::GTOExpansion &gtoA, const Utils::GTOExpansion &gtoB, const Eigen::RowVector3d &Ra, const Eigen::RowVector3d &Rb, const Eigen::Vector3d &Rab, const Eigen::Vector3d &dipoleEvaluationCoordinate)
void calculateSingleGTFPairIntegralOverShell(const Utils::GTOExpansion &gtoA, const Utils::GTOExpansion &gtoB, double exponentSum)
void createBlockForOneGTFOverShell(double normalizedCoefficientPrefactor)

Private Members

int startAOonA_
int startAOonB_
int orbitalShellSizeA_
int orbitalShellSizeB_
std::array<Eigen::Matrix<double, 6, 6>, 3> dipoleComponentsBlocks_
std::array<nddo::AngularMomentum, 10> AOMomenta_
std::array<int, 10> AOIndexes_
oneDimensionalArray PminusA_
oneDimensionalArray PminusB_
oneDimensionalArray PminusC_
threeDimensionalArray overlapIntegral_
threeDimensionalArray dipoleIntegral_
IntegralMethod method_

Private Static Functions

static double getNormalizationFactorAndCoefficient(int GaussTypeFunctionIndexA, int GaussTypeFunctionIndexB, const Utils::GTOExpansion &gtoA, const Utils::GTOExpansion &gtoB, double expCoefficientS_00, const Eigen::Vector3d &Rab)