Scine::Sparrow  5.0.0
Library for fast and agile quantum chemical calculations with semiempirical methods.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
GTODipoleMatrixBlock.h
Go to the documentation of this file.
1 
8 #ifndef SPARROW_GTODIPOLEMATRIXBLOCK_H
9 #define SPARROW_GTODIPOLEMATRIXBLOCK_H
10 
14 #include <Utils/Typenames.h>
15 #include <Eigen/Core>
16 #include <array>
17 
18 namespace Scine {
19 
20 namespace Utils {
21 class GtoExpansion;
22 } // namespace Utils
23 
24 namespace Sparrow {
25 
31  public:
32  using oneDimensionalArray = std::array<double, 3>;
33  using twoDimensionalArray = std::array<oneDimensionalArray, 3>;
34  using threeDimensionalArray = std::array<twoDimensionalArray, 3>;
35 
40 
44  void setIntegralMethod(IntegralMethod method);
48  void initialize(const Eigen::RowVector3d& Ra, const Eigen::RowVector3d& Rb,
49  const Eigen::RowVector3d& dipoleEvaluationCoordinate, double expA, double expB,
50  const Utils::GtoExpansion& gtoA, const Utils::GtoExpansion& gtoB);
51 
55  std::array<Eigen::MatrixXd, 3> createSTOBlock(const Utils::GtoExpansion& gtoA, const Utils::GtoExpansion& gtoB,
56  const Eigen::RowVector3d& Ra, const Eigen::RowVector3d& Rb,
57  const Eigen::Vector3d& Rab, const Eigen::Vector3d& dipoleEvaluationCoordinate);
58 
59  private:
60  void dOrbitalsFromSixCartesianToFiveRealSolidHarmonics();
61  static double getNormalizationFactorAndCoefficient(int GaussTypeFunctionIndexA, int GaussTypeFunctionIndexB,
62  const Utils::GtoExpansion& gtoA, const Utils::GtoExpansion& gtoB,
63  double expCoefficientS_00, const Eigen::Vector3d& Rab);
64  void calculateAnalyticalDipoleIntegrals(int GaussTypeFunctionIndexA, int GaussTypeFunctionIndexB,
65  const Utils::GtoExpansion& gtoA, const Utils::GtoExpansion& gtoB,
66  const Eigen::RowVector3d& Ra, const Eigen::RowVector3d& Rb,
67  const Eigen::Vector3d& dipoleEvaluationCoordinate);
68  void calculateSingleGTFPair(int GaussTypeFunctionIndexA, int GaussTypeFunctionIndexB, const Utils::GtoExpansion& gtoA,
69  const Utils::GtoExpansion& gtoB, const Eigen::RowVector3d& Ra, const Eigen::RowVector3d& Rb,
70  const Eigen::Vector3d& Rab, const Eigen::Vector3d& dipoleEvaluationCoordinate);
71  void calculateSingleGTFPairIntegralOverShell(const Utils::GtoExpansion& gtoA, const Utils::GtoExpansion& gtoB,
72  double exponentSum);
73  void createBlockForOneGTFOverShell(double normalizedCoefficientPrefactor);
74 
75  int startAOonA_;
76  int startAOonB_;
77  int orbitalShellSizeA_;
78  int orbitalShellSizeB_;
79  std::array<Eigen::Matrix<double, 6, 6>, 3> dipoleComponentsBlocks_;
80  std::array<nddo::AngularMomentum, 10> AOMomenta_;
81  std::array<int, 10> AOIndexes_;
82  oneDimensionalArray PminusA_;
83  oneDimensionalArray PminusB_;
84  oneDimensionalArray PminusC_;
85  threeDimensionalArray overlapIntegral_;
86  threeDimensionalArray dipoleIntegral_;
87  IntegralMethod method_;
88 };
89 
90 } // namespace Sparrow
91 } // namespace Scine
92 
93 #endif // SPARROW_GTODIPOLEMATRIXBLOCK_H
Class responsible for calculating a block of the dipole matrix in GTO ao basis. The basis must be one...
Definition: GTODipoleMatrixBlock.h:30
void setIntegralMethod(IntegralMethod method)
Definition: GTODipoleMatrixBlock.cpp:228
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.
Definition: GTODipoleMatrixBlock.cpp:232
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.
Definition: GTODipoleMatrixBlock.cpp:180
GTODipoleMatrixBlock()
Constructor. It initializes the angular momenta and the orbital AO indices.
Definition: GTODipoleMatrixBlock.cpp:20