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
NDDODipoleMatrixCalculator.h
Go to the documentation of this file.
1 
8 #ifndef SPARROW_DIPOLEMATRTIXCALCULATOR_H
9 #define SPARROW_DIPOLEMATRTIXCALCULATOR_H
10 
14 #include <Eigen/Core>
15 #include <memory>
16 #include <vector>
17 
18 namespace Scine {
19 namespace Utils {
20 class AtomsOrbitalsIndexes;
21 class MolecularOrbitals;
22 } // namespace Utils
23 
24 namespace Sparrow {
25 namespace nddo {
26 class ElementParameters;
27 } // namespace nddo
28 
43 template<class NDDOMethod>
45  public:
46  static std::unique_ptr<NDDODipoleMatrixCalculator<NDDOMethod>> create(NDDOMethod& method);
47 
52  const Utils::DipoleMatrix& getAODipoleMatrix() const final;
62  void setAODipoleMatrix(Utils::DipoleMatrix dipoleMatrix) final;
67  void fillDipoleMatrix(const Eigen::RowVector3d& dipoleEvaluationCoordinate) final;
71  void initialize() final;
77  void setIntegralMethod(const IntegralMethod& IntegralMethod) final;
81  bool isValid() const final;
85  void invalidate() final;
86 
87  private:
88  explicit NDDODipoleMatrixCalculator(NDDOMethod& method);
89  Utils::DipoleMatrix calculateMODipoleMatrixRestricted() const;
90  Utils::DipoleMatrix calculateMODipoleMatrixUnrestricted() const;
91  int nAOs_;
92  const Utils::AtomsOrbitalsIndexes& aoIndexes_;
93  const Utils::ElementTypeCollection& elementTypes_;
94  const Utils::PositionCollection& positions_;
95  const nddo::ElementParameters& elementParameters_;
96  const Eigen::MatrixXd& overlapMatrix_;
97  const Utils::MolecularOrbitals& molecularOrbitals_;
98  Utils::DipoleMatrix dipoleMatrix_;
99  int nAtoms_;
100  IntegralMethod integralMethod_{IntegralMethod::ObaraSaika};
101  bool valid_;
102 };
103 
104 } // namespace Sparrow
105 } // namespace Scine
106 
107 #endif // SPARROW_DIPOLEMATRTIXCALCULATOR_H
void initialize() final
Initializes the matrices and invalidates the current dipole matrix.
Definition: NDDODipoleMatrixCalculator.cpp:30
bool isValid() const final
Return the validity status of the dipole matrix.
Definition: NDDODipoleMatrixCalculator.cpp:77
Definition: ElementParameters.h:26
void invalidate() final
Invalidates the underlying dipole matrices and forces a new calculation.
Definition: NDDODipoleMatrixCalculator.cpp:107
Class responsible for the calculation of the dipole matrix.
Definition: NDDODipoleMatrixCalculator.h:44
Interface for the calculation of the dipole matrix in semiempirical methods.
Definition: DipoleMatrixCalculator.h:34
void fillDipoleMatrix(const Eigen::RowVector3d &dipoleEvaluationCoordinate) final
Calculates the dipole matrix in AO basis.
Definition: NDDODipoleMatrixCalculator.cpp:43
const Utils::DipoleMatrix & getAODipoleMatrix() const final
Getter for the dipole matrix in AO.
Definition: NDDODipoleMatrixCalculator.cpp:66
Utils::DipoleMatrix getMODipoleMatrix() const final
Getter for the dipole matrix in MO. The dipole matrix in MO basis is transformed from the one in AO b...
Definition: NDDODipoleMatrixCalculator.cpp:99
void setAODipoleMatrix(Utils::DipoleMatrix dipoleMatrix) final
Setter for the dipole matrix in AO basis.
Definition: NDDODipoleMatrixCalculator.cpp:71
void setIntegralMethod(const IntegralMethod &IntegralMethod) final
Sets the dipole integral calculation method.
Definition: NDDODipoleMatrixCalculator.cpp:37