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
Local2c2eIntegralCalculator.h
Go to the documentation of this file.
1 
8 #ifndef SPARROW_LOCAL2C2EINTEGRALCALCULATOR_H
9 #define SPARROW_LOCAL2C2EINTEGRALCALCULATOR_H
10 
12 #include "multipoleTypes.h"
13 #include <array>
14 #include <list>
15 
16 namespace Scine {
17 namespace Sparrow {
18 
19 namespace nddo {
20 
21 namespace multipole {
22 class ChargeSeparationParameter;
23 class KlopmanParameter;
24 
32  public:
38  struct LocalTerm {
39  double f;
40  MultipolePair p1, p2;
41  Multipole m1, m2;
42  };
43 
45  using LocalTerms = std::list<LocalTerm>;
47  using LocalTermArray = std::array<std::array<LocalTerms, 40>, 40>;
48 
50  template<Utils::DerivativeOrder O>
51  Utils::AutomaticDifferentiation::Value1DType<O> static getIntegral(
52  GeneralTypes::twoElIntegral_t t1, GeneralTypes::twoElIntegral_t t2, double R, const ChargeSeparationParameter& D1,
53  const ChargeSeparationParameter& d2, const KlopmanParameter& rho1, const KlopmanParameter& rho2);
54 
67  template<Utils::DerivativeOrder O>
68  Utils::AutomaticDifferentiation::Value1DType<O> static getIntegral(int t1, int t2, double R,
69  const ChargeSeparationParameter& D1,
70  const ChargeSeparationParameter& d2,
71  const KlopmanParameter& rho1,
72  const KlopmanParameter& rho2);
73 
74  private:
76  static LocalTermArray setUpTerms();
80  static std::list<std::pair<double, Multipole>> getMultipoles(GeneralTypes::twoElIntegral_t t, bool hasD);
81 };
82 
83 } // namespace multipole
84 
85 } // namespace nddo
86 
87 } // namespace Sparrow
88 } // namespace Scine
89 #endif // SPARROW_LOCAL2C2EINTEGRALCALCULATOR_H
std::list< LocalTerm > LocalTerms
Each charge distribution might be expanded in more than just one multipole (so, more than one LocalTe...
Definition: Local2c2eIntegralCalculator.h:45
std::array< std::array< LocalTerms, 40 >, 40 > LocalTermArray
There are 40 possible charge distributions.
Definition: Local2c2eIntegralCalculator.h:47
This class is the container for the Klopman-Ohno parameters used for the evaluation of the multipoles...
Definition: KlopmanParameter.h:29
static Utils::AutomaticDifferentiation::Value1DType< O > getIntegral(GeneralTypes::twoElIntegral_t t1, GeneralTypes::twoElIntegral_t t2, double R, const ChargeSeparationParameter &D1, const ChargeSeparationParameter &d2, const KlopmanParameter &rho1, const KlopmanParameter &rho2)
Wrapper around the next overload. It enables the reference of the twoElIntegral_t without the need to...
This class is responsible for the calculation of the 2-center-2-electron integrals in the local coord...
Definition: Local2c2eIntegralCalculator.h:31
Charge separation D of semi-empirical models. It describes the separation between two charges of oppo...
Definition: ChargeSeparationParameter.h:29
Struct defining an interaction between two multipoles. It consists of a prefactor, f, the charge distributions and the corresponding multipoles. It thus uniquely defines an interaction.
Definition: Local2c2eIntegralCalculator.h:38