MPQC 2.3.1

- Main Page
- Related Pages
- Classes
- Files

- File List

tchftmpl.h
1
2 namespace sc {
3
4 class LocalTCContribution {
5 private:
6 double * const gmata;
7 double * const gmatb;
8 double * const kmata;
9 double * const kmatb;
10
11 double * const pmata;
12 double * const pmatb;
13 double * const opmata;
14 double * const opmatb;
15 public:
16 LocalTCContribution(double *ga, double *pa, double *gb, double *pb,
17 double *ka, double *opa, double *kb, double *opb) :
18 gmata(ga), gmatb(gb), kmata(ka), kmatb(kb),
19 pmata(pa), pmatb(pb), opmata(opa), opmatb(opb) {}
20 ~LocalTCContribution() {}
21
22 void set_bound(double,double) {}
23
24 inline void cont1(int ij, int kl, double val) {
25 gmata[ij] += val*pmata[kl];
26 gmata[kl] += val*pmata[ij];
27
28 gmatb[ij] += val*pmatb[kl];
29 gmatb[kl] += val*pmatb[ij];
30 }
31
32 inline void cont2(int ij, int kl, double val) {
33 val *= 0.25;
34 gmata[ij] -= val*pmata[kl];
35 gmata[kl] -= val*pmata[ij];
36
37 gmatb[ij] -= val*pmatb[kl];
38 gmatb[kl] -= val*pmatb[ij];
39
40 kmata[ij] += val*opmata[kl];
41 kmata[kl] += val*opmata[ij];
42
43 kmatb[ij] += val*opmatb[kl];
44 kmatb[kl] += val*opmatb[ij];
45 }
46
47 inline void cont3(int ij, int kl, double val) {
48 val *= 0.5;
49 gmata[ij] -= val*pmata[kl];
50 gmata[kl] -= val*pmata[ij];
51
52 gmatb[ij] -= val*pmatb[kl];
53 gmatb[kl] -= val*pmatb[ij];
54
55 kmata[ij] += val*opmata[kl];
56 kmata[kl] += val*opmata[ij];
57
58 kmatb[ij] += val*opmatb[kl];
59 kmatb[kl] += val*opmatb[ij];
60 }
61
62 inline void cont4(int ij, int kl, double val) {
63 gmata[ij] += 0.75*val*pmata[kl];
64 gmata[kl] += 0.75*val*pmata[ij];
65
66 gmatb[ij] += 0.75*val*pmatb[kl];
67 gmatb[kl] += 0.75*val*pmatb[ij];
68
69 kmata[ij] += 0.25*val*opmata[kl];
70 kmata[kl] += 0.25*val*opmata[ij];
71
72 kmatb[ij] += 0.25*val*opmatb[kl];
73 kmatb[kl] += 0.25*val*opmatb[ij];
74 }
75
76 inline void cont5(int ij, int kl, double val) {
77 val *= 0.5;
78 gmata[ij] += val*pmata[kl];
79 gmata[kl] += val*pmata[ij];
80
81 gmatb[ij] += val*pmatb[kl];
82 gmatb[kl] += val*pmatb[ij];
83
84 kmata[ij] += val*opmata[kl];
85 kmata[kl] += val*opmata[ij];
86
87 kmatb[ij] += val*opmatb[kl];
88 kmatb[kl] += val*opmatb[ij];
89 }
90 };
91
92 class LocalTCEnergyContribution {
93 private:
94 double * const pmata;
95 double * const pmatb;
96 double * const opmata;
97 double * const opmatb;
98
99 public:
100 double eca;
101 double exa;
102 double ecb;
103 double exb;
104 double ecab;
105 double exab;
106
107 LocalTCEnergyContribution(double *pa, double *pb, double *opa, double *opb) :
108 pmata(pa), pmatb(pb), opmata(opa), opmatb(opb) {
109 exa=eca=0;
110 exb=ecb=0;
111 exab=ecab=0;
112 }
113 ~LocalTCEnergyContribution() {}
114
115 void set_bound(double,double) {};
116
117 inline void cont1(int ij, int kl, double val) {
118 eca += val*pmata[ij]*pmata[kl];
119 ecb += val*pmatb[ij]*pmatb[kl];
120 ecab += val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);
121 }
122
123 inline void cont2(int ij, int kl, double val) {
124 exa -= 0.25*val*pmata[ij]*pmata[kl];
125 exb -= 0.25*val*pmatb[ij]*pmatb[kl];
126 exab -= 0.25*val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);
127 }
128
129 inline void cont3(int ij, int kl, double val) {
130 exa -= 0.5*val*pmata[ij]*pmata[kl];
131 exb -= 0.5*val*pmatb[ij]*pmatb[kl];
132 exab -= 0.5*val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);
133 }
134
135 inline void cont4(int ij, int kl, double val) {
136 eca += val*pmata[ij]*pmata[kl];
137 ecb += val*pmatb[ij]*pmatb[kl];
138 ecab += val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);
139
140 exa -= 0.25*val*pmata[ij]*pmata[kl];
141 exb -= 0.25*val*pmatb[ij]*pmatb[kl];
142 exab -= 0.25*val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);
143 }
144
145 inline void cont5(int ij, int kl, double val) {
146 eca += val*pmata[ij]*pmata[kl];
147 ecb += val*pmatb[ij]*pmatb[kl];
148 ecab += val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);
149
150 exa -= 0.5*val*pmata[ij]*pmata[kl];
151 exb -= 0.5*val*pmatb[ij]*pmatb[kl];
152 exab -= 0.5*val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);
153 }
154 };
155
156 class LocalTCGradContribution {
157 private:
158 double * const pmat;
159 double * const pmata;
160 double * const pmatb;
161 double c1sq;
162 double c2sq;
163 double c1c2;
164
165 public:
166 LocalTCGradContribution(double *p, double *pa, double *pb,
167 double c1, double c2) :
168 pmat(p), pmata(pa), pmatb(pb)
169 {
170 c1sq = c1*c1;
171 c2sq = c2*c2;
172 c1c2 = c1*c2;
173 }
174 ~LocalTCGradContribution() {}
175
176 inline double cont1(int ij, int kl) {
177 return pmat[ij]*pmat[kl] +
178 c1sq*(pmata[ij]*pmat[kl] + pmat[ij]*pmata[kl]) +
179 c2sq*(pmatb[ij]*pmat[kl] + pmat[ij]*pmatb[kl]) +
180 0.5*c1sq*pmata[ij]*pmata[kl] +
181 0.5*c2sq*pmatb[ij]*pmatb[kl];
182 }
183
184 inline double cont2(int ij, int kl) {
185 return pmat[ij]*pmat[kl] +
186 c1sq*(pmata[ij]*pmat[kl] + pmat[ij]*pmata[kl]) +
187 c2sq*(pmatb[ij]*pmat[kl] + pmat[ij]*pmatb[kl]) -
188 c1c2*(pmata[ij]*pmatb[kl] + pmatb[ij]*pmata[kl]);
189 }
190 };
191
192 }