Kindfield
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Enumerations
Enumerator
Properties
Friends
Pages
src
basisfunctions
gaussian
integrals
gaussiankineticintegral.cpp
Go to the documentation of this file.
1
#include "
gaussiankineticintegral.h
"
2
3
#include "
math/vector3.h
"
4
#include <
math/hermiteexpansioncoefficient.h
>
5
#include <
basisfunctions/gaussian/integrals/gaussianoverlapintegral.h
>
6
#include <
basisfunctions/gaussian/gaussianprimitiveorbital.h
>
7
8
GaussianKineticIntegral::GaussianKineticIntegral
(
int
angularMomentumMax) :
9
m_overlapIntegral(angularMomentumMax + 2)
10
{
11
}
12
13
void
GaussianKineticIntegral::set
(
const
Vector3
& corePositionA,
const
Vector3
& corePositionB,
14
const
GaussianPrimitiveOrbital
& primitiveA,
const
GaussianPrimitiveOrbital
& primitiveB)
15
{
16
m_exponentB
= primitiveB.
exponent
();
17
m_exponentSum
= primitiveA.
exponent
() + primitiveB.
exponent
();
18
m_overlapIntegral
.
set
(corePositionA, corePositionB, primitiveA, primitiveB,
true
);
19
}
20
21
double
GaussianKineticIntegral::kineticIntegral
(
int
dim,
int
iA,
int
iB) {
22
double
b =
m_exponentB
;
23
double
S_iA_iBnn =
m_overlapIntegral
.
overlapIntegral
(dim, iA, iB + 2);
24
double
S_iA_iB =
m_overlapIntegral
.
overlapIntegral
(dim, iA, iB);
25
double
S_iA_iBpp;
26
if
(iB - 2 >= 0) {
27
S_iA_iBpp=
m_overlapIntegral
.
overlapIntegral
(dim, iA, iB - 2);
28
}
else
{
29
S_iA_iBpp = 0;
30
}
31
return
4 * b * b * S_iA_iBnn - 2*b * (2*iB + 1) * S_iA_iB + iB * (iB - 1) * S_iA_iBpp;
32
}
33
34
double
GaussianKineticIntegral::kineticIntegral
(
const
GaussianPrimitiveOrbital
& primitiveA,
35
const
GaussianPrimitiveOrbital
& primitiveB) {
36
return
kineticIntegral
(primitiveA.
xExponent
(), primitiveA.
yExponent
(), primitiveA.
zExponent
(),
37
primitiveB.
xExponent
(), primitiveB.
yExponent
(), primitiveB.
zExponent
());
38
}
39
40
double
GaussianKineticIntegral::kineticIntegral
(
int
iA,
int
jA,
int
kA,
int
iB,
int
jB,
int
kB) {
41
double
T_iA_iB =
kineticIntegral
(0, iA, iB);
42
double
T_jA_jB =
kineticIntegral
(1, jA, jB);
43
double
T_kA_kB =
kineticIntegral
(2, kA, kB);
44
45
double
S_iA_iB =
m_overlapIntegral
.
overlapIntegral
(0, iA, iB);
46
double
S_jA_jB =
m_overlapIntegral
.
overlapIntegral
(1, jA, jB);
47
double
S_kA_kB =
m_overlapIntegral
.
overlapIntegral
(2, kA, kB);
48
49
double
result = T_iA_iB * S_jA_jB * S_kA_kB + S_iA_iB * T_jA_jB * S_kA_kB + S_iA_iB * S_jA_jB * T_kA_kB;
50
result *= -0.5;
51
return
result;
// TODO: Is there an error in the slides here?
52
}
Generated on Sun Jun 22 2014 14:02:46 for Kindfield by
1.8.4