Kindfield
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Friends Pages
Public Member Functions | Public Attributes | List of all members
HydrogenMolecule Class Reference

Deprecated test class for Hydrogen molecule system. More...

#include <hydrogenmolecule.h>

Inheritance diagram for HydrogenMolecule:
Inheritance graph
[legend]
Collaboration diagram for HydrogenMolecule:
Collaboration graph
[legend]

Public Member Functions

 HydrogenMolecule (double distance=1.4)
 
virtual ~HydrogenMolecule ()
 
virtual double coupledIntegral (int p, int q, int r, int s)
 
virtual double kineticIntegral (int p, int q)
 HartreeSolver::kineticIntegral is the solution of the the integral $$ | -{1}{2} ^2 | $$. More...
 
virtual double nuclearAttractionIntegral (int p, int q)
 HartreeSolver::kineticIntegral is the solution of the the integral $$ | -{1}{2} ^2 | $$. More...
 
virtual double overlapIntegral (int p, int q)
 
virtual uint nBasisFunctions ()
 
virtual uint nParticles ()
 
double boysFunction (double arg)
 
virtual double additionalEnergyTerms ()
 
double uncoupledIntegral (int p, int q)
 
- Public Member Functions inherited from ElectronSystem
 ElectronSystem ()
 
virtual uint nParticlesUp ()
 
virtual uint nParticlesDown ()
 
void setNParticlesDown (uint nParticlesDown)
 

Public Attributes

mat R
 
rowvec alpha
 
const double powPi5over2 = pow(M_PI, 5./2.)
 

Detailed Description

Deprecated test class for Hydrogen molecule system.

Deprecated:

Definition at line 11 of file hydrogenmolecule.h.

Constructor & Destructor Documentation

HydrogenMolecule::HydrogenMolecule ( double  distance = 1.4)

Definition at line 11 of file hydrogenmolecule.cpp.

12 {
13 
14  alpha = zeros<rowvec>(4);
15  alpha(0) = 13.00773;
16  alpha(1) = 1.962079;
17  alpha(2) = 0.444529;
18  alpha(3) = 0.1219492;
19 
20  R = zeros(2,3);
21 
22  R(1,0) = distance;
23 }
HydrogenMolecule::~HydrogenMolecule ( )
virtual

Definition at line 25 of file hydrogenmolecule.cpp.

26 {
27 }

Member Function Documentation

double HydrogenMolecule::additionalEnergyTerms ( )
virtual

Implements ElectronSystem.

Definition at line 53 of file hydrogenmolecule.cpp.

53  {
54  return 1/sqrt(dot(R.row(0) - R.row(1),R.row(0)- R.row(1)));
55 }
double HydrogenMolecule::boysFunction ( double  arg)

Definition at line 57 of file hydrogenmolecule.cpp.

57  {
58 
59  if (arg < 1.0E-6){
60  return 1.0;
61  }
62 
63  else{
64  arg = sqrt(arg);
65  double f = 1.0/arg * erf(arg) *sqrt(acos(-1))/2.0;
66  return f;
67  }
68 
69 }
double HydrogenMolecule::coupledIntegral ( int  p,
int  q,
int  r,
int  s 
)
virtual

Implements ElectronSystem.

Definition at line 29 of file hydrogenmolecule.cpp.

29  {
30  int pIndex = p % nOrbitalsPerNuclei;
31  int qIndex = q % nOrbitalsPerNuclei;
32  int rIndex = r % nOrbitalsPerNuclei;
33  int sIndex = s % nOrbitalsPerNuclei;
34 
35  int Rp = p / nOrbitalsPerNuclei;
36  int Rq = q / nOrbitalsPerNuclei;
37  int Rr = r / nOrbitalsPerNuclei;
38  int Rs = s / nOrbitalsPerNuclei;
39 
40  double A = alpha[pIndex] + alpha[qIndex];
41  double B = alpha[rIndex] + alpha[sIndex];
42 
43  rowvec Ra = (alpha[pIndex]*R.row(Rp) + alpha[qIndex]*R.row(Rq))/A;
44  rowvec Rb = (alpha[rIndex]*R.row(Rr) + alpha[sIndex]*R.row(Rs))/B;
45 
46 
47  double t = (A*B/(A + B))*dot(Ra-Rb,Ra-Rb);
48 
49  double arg = 2*sqrt(A*B/(acos(-1)*(A+B)))*boysFunction(t)*overlapIntegral(p,q)*overlapIntegral(s,r);
50  return arg;
51 }
double HydrogenMolecule::kineticIntegral ( int  p,
int  q 
)
virtual

HartreeSolver::kineticIntegral is the solution of the the integral $$ | -{1}{2} ^2 | $$.

Parameters
p
q
Returns

Definition at line 78 of file hydrogenmolecule.cpp.

78  {
79  int pIndex = p % nOrbitalsPerNuclei;
80  int qIndex = q % nOrbitalsPerNuclei;
81 
82  double ap = alpha(pIndex);
83  double aq = alpha(qIndex);
84 
85  double factor = ap*aq/(ap+aq);
86 
87  int RpIndex = p / nOrbitalsPerNuclei;
88  int RqIndex = q / nOrbitalsPerNuclei;
89 
90  rowvec Rp = R.row(RpIndex);
91  rowvec Rq = R.row(RqIndex);
92 
93  double Rpq = dot(Rp-Rq,Rp-Rq);
94  double expTerm = exp(-factor*Rpq);
95  double kin = 0.5*factor*(6-4*factor*Rpq)*pow(acos(-1)/(ap+aq),3.0/2.0)*expTerm;
96 
97  return kin;
98 }
uint HydrogenMolecule::nBasisFunctions ( )
inlinevirtual

Implements ElectronSystem.

Definition at line 47 of file hydrogenmolecule.h.

48 {
49  return nNuclei * nOrbitalsPerNuclei;
50 }
uint HydrogenMolecule::nParticles ( )
inlinevirtual

Implements ElectronSystem.

Definition at line 43 of file hydrogenmolecule.h.

43  {
44  return 2;
45 }
double HydrogenMolecule::nuclearAttractionIntegral ( int  p,
int  q 
)
virtual

HartreeSolver::kineticIntegral is the solution of the the integral $$ | -{1}{2} ^2 | $$.

Parameters
p
q
Returns

Definition at line 107 of file hydrogenmolecule.cpp.

107  {
108  int pIndex = p % nOrbitalsPerNuclei;
109  int qIndex = q % nOrbitalsPerNuclei;
110 
111  double ap = alpha(pIndex);
112  double aq = alpha(qIndex);
113 
114  double factor = 1.0/(ap+aq);
115 
116  int Rp = p / nOrbitalsPerNuclei;
117  int Rq = q / nOrbitalsPerNuclei;
118  int Z = 1;
119 
120  double Rpq =dot(R.row(Rp)-R.row(Rq),R.row(Rp)-R.row(Rq));
121  double expTerm = exp(-ap*aq*factor*Rpq);
122 
123  rowvec Rmc = (ap*R.row(Rp) + aq*R.row(Rq))*factor;
124 
125 
126  double F0p = boysFunction(1.0/factor*dot(Rmc-R.row(0),Rmc-R.row(0)));
127  double F0q = boysFunction(1.0/factor*dot(Rmc-R.row(1),Rmc-R.row(1)));
128 
129  double nucAtt = -2*Z*factor*acos(-1)*expTerm*(F0p+F0q);
130 
131  return nucAtt;
132 }
double HydrogenMolecule::overlapIntegral ( int  p,
int  q 
)
virtual

Implements ElectronSystem.

Definition at line 134 of file hydrogenmolecule.cpp.

134  {
135  int pIndex = p % nOrbitalsPerNuclei;
136  int qIndex = q % nOrbitalsPerNuclei;
137 
138  double ap = alpha(pIndex);
139  double aq = alpha(qIndex);
140 
141  double factor = 1.0/(ap+aq);
142 
143  int RpIndex = p / nOrbitalsPerNuclei;
144  int RqIndex = q / nOrbitalsPerNuclei;
145 
146  rowvec Rp = R.row(RpIndex);
147  rowvec Rq = R.row(RqIndex);
148 
149  double Rpq = dot(Rp-Rq,Rp-Rq);
150  double expTerm = exp(-ap*aq*factor*Rpq);
151  double overlap = pow(acos(-1)*factor,3.0/2.0)*expTerm;
152 
153  return overlap;
154 }
double HydrogenMolecule::uncoupledIntegral ( int  p,
int  q 
)
virtual

Implements ElectronSystem.

Definition at line 157 of file hydrogenmolecule.cpp.

158 {
159  return kineticIntegral(p,q) + nuclearAttractionIntegral(p,q);
160 }

Member Data Documentation

rowvec HydrogenMolecule::alpha

Definition at line 27 of file hydrogenmolecule.h.

const double HydrogenMolecule::powPi5over2 = pow(M_PI, 5./2.)

Definition at line 30 of file hydrogenmolecule.h.

mat HydrogenMolecule::R

Definition at line 25 of file hydrogenmolecule.h.


The documentation for this class was generated from the following files: