Psi4
osrecur.h
Go to the documentation of this file.
1 /*
2  * @BEGIN LICENSE
3  *
4  * Psi4: an open-source quantum chemistry software package
5  *
6  * Copyright (c) 2007-2017 The Psi4 Developers.
7  *
8  * The copyrights for code used from other parties are included in
9  * the corresponding files.
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation; either version 2 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License along
22  * with this program; if not, write to the Free Software Foundation, Inc.,
23  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24  *
25  * @END LICENSE
26  */
27 
28 #ifndef _psi_src_lib_libmints_osrecur_h
29 #define _psi_src_lib_libmints_osrecur_h
30 
31 namespace psi {
32 
38 {
39  int max_am1_;
40  int max_am2_;
41 
42  double **x_;
43  double **y_;
44  double **z_;
45 
46  // No default constructor
48  // No assignment operator
50 
51 public:
54  ObaraSaikaTwoCenterRecursion(int max_am1, int max_am2);
56 
58  double **x() const { return x_; }
60  double **y() const { return y_; }
62  double **z() const { return z_; }
63 
65  void compute(double PA[3], double PB[3], double gamma, int am1, int am2);
66 };
67 
74 {
75  int max_am1_;
76  int max_am2_;
77  int max_m_;
78 
79  double ***x_;
80  double ***y_;
81  double ***z_;
82 
83  // No default constructor
85  // No assignment operator
87 
88 public:
89  ObaraSaikaTwoCenterMIRecursion(int max_am1, int max_am2, int max_m);
91 
92  double ***x() const { return x_; }
93  double ***y() const { return y_; }
94  double ***z() const { return z_; }
95  void compute(double PA[3], double PB[3], double gamma, int am1, int am2);
96 };
97 
103 {
104 protected:
105  int max_am1_;
106  int max_am2_;
107  int size_;
108 
109  double ***vi_;
110 
111  // Forms Fm(U) from A20 (OS 1986)
112  void calculate_f(double *F, int n, double t);
113 
114 private:
115  // No default constructor
117  // No assignment operator
119 
120 public:
123  ObaraSaikaTwoCenterVIRecursion(int max_am1, int max_am2);
125 
127  double ***vi() const { return vi_; }
128 
129  virtual double ***vx() const { return 0; }
130  virtual double ***vy() const { return 0; }
131  virtual double ***vz() const { return 0; }
132 
133  virtual double ***vxx() const { return 0; }
134  virtual double ***vxy() const { return 0; }
135  virtual double ***vxz() const { return 0; }
136  virtual double ***vyy() const { return 0; }
137  virtual double ***vyz() const { return 0; }
138  virtual double ***vzz() const { return 0; }
139 
141  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
143  virtual void compute_erf(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2, double zetam);
144 };
145 
151 {
152 protected:
153  double ***vx_;
154  double ***vy_;
155  double ***vz_;
156 
157 private:
158  // No default constructor();
160  // No assignment operator
162 
163 public:
164  ObaraSaikaTwoCenterVIDerivRecursion(int max_am1, int max_am2);
166 
167  double ***vx() const { return vx_; }
168  double ***vy() const { return vy_; }
169  double ***vz() const { return vz_; }
170 
171  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
172 };
173 
179 {
180 protected:
181  double ***vxx_;
182  double ***vxy_;
183  double ***vxz_;
184  double ***vyy_;
185  double ***vyz_;
186  double ***vzz_;
187 
188 private:
189  // No default constructor();
191  // No assignment operator
193 
194 public:
195  ObaraSaikaTwoCenterVIDeriv2Recursion(int max_am1, int max_am2);
197 
198  double ***vxx() const { return vxx_; }
199  double ***vxy() const { return vxy_; }
200  double ***vxz() const { return vxz_; }
201  double ***vyy() const { return vyy_; }
202  double ***vyz() const { return vyz_; }
203  double ***vzz() const { return vzz_; }
204 
205  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
206 };
207 
213 {
214 protected:
215  double ***q_;
216  double ***x_;
217  double ***y_;
218  double ***z_;
219 
220 private:
221  // No default constructor
223  // No assignment operator
225 
226 public:
227  ObaraSaikaTwoCenterElectricField(int max_am1, int max_am2);
229 
230  // We could also add the getter for the q_ (potential ints here)
231  double ***x() const { return x_; }
232  double ***y() const { return y_; }
233  double ***z() const { return z_; }
234 
235  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
236 };
237 
243 {
244 protected:
245  double ***exx_;
246  double ***eyy_;
247  double ***ezz_;
248  double ***exy_;
249  double ***exz_;
250  double ***eyz_;
251 
252 private:
253  // No default constructor
255  // No assignment operator
257 
258 public:
259  ObaraSaikaTwoCenterElectricFieldGradient(int max_am1, int max_am2);
261 
262  double ***ex() const { return x_; }
263  double ***ey() const { return y_; }
264  double ***ez() const { return z_; }
265 
266  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
267 };
268 
269 
275 {
276 protected:
277  int max_am1_;
278  int max_am2_;
279  int size_;
280 
281  double*** q_;
282  double*** x_;
283  double*** y_;
284  double*** z_;
285  double*** xx_;
286  double*** xy_;
287  double*** xz_;
288  double*** yy_;
289  double*** yz_;
290  double*** zz_;
291  double*** xxx_;
292  double*** xxy_;
293  double*** xxz_;
294  double*** xyy_;
295  double*** xyz_;
296  double*** xzz_;
297  double*** yyy_;
298  double*** yyz_;
299  double*** yzz_;
300  double*** zzz_;
301 
302  // Forms Fm(U) from A20 (OS 1986)
303  void calculate_f(double *F, int n, double t);
304 
305 private:
306  // No default constructor
308  // No assignment operator
310 
311 public:
314  ObaraSaikaTwoCenterEFPRecursion(int max_am1, int max_am2);
316 
318  double*** q () const { return q_; }
319  double*** x () const { return x_; }
320  double*** y () const { return y_; }
321  double*** z () const { return z_; }
322  double*** xx () const { return xx_; }
323  double*** yy () const { return yy_; }
324  double*** zz () const { return zz_; }
325  double*** xy () const { return xy_; }
326  double*** xz () const { return xz_; }
327  double*** yz () const { return yz_; }
328  double*** xxx() const { return xxx_; }
329  double*** yyy() const { return yyy_; }
330  double*** zzz() const { return zzz_; }
331  double*** xxy() const { return xxy_; }
332  double*** xxz() const { return xxz_; }
333  double*** xyy() const { return xyy_; }
334  double*** yyz() const { return yyz_; }
335  double*** xzz() const { return xzz_; }
336  double*** yzz() const { return yzz_; }
337  double*** xyz() const { return xyz_; }
338 
340  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
341 
342 };
343 
344 
349 {
350  int max_am1_;
351  int max_am2_;
352  int max_am3_;
353 
354  double ***x_;
355  double ***y_;
356  double ***z_;
357 
358  // No default constructor
360 
361  // No assignment operator
363 
364 public:
365  ObaraSaikaThreeCenterRecursion(int max_am1, int max_am2, int max_am3);
367 
369  double ***x() const { return x_; }
371  double ***y() const { return y_; }
373  double ***z() const { return z_; }
374 
376  void compute(double GA[3],
377  double GB[3],
378  double GC[3],
379  double gammac,
380  int amA, int amB, int amC);
381 };
382 
383 }
384 
385 #endif
int max_am1_
Definition: osrecur.h:105
virtual double *** vx() const
Definition: osrecur.h:129
double *** z_
Definition: osrecur.h:284
double *** z_
Definition: osrecur.h:81
void compute(double GA[3], double GB[3], double GC[3], double gammac, int amA, int amB, int amC)
Computes the recursion matrices for the data provided.
Definition: osrecur.cc:2418
ObaraSaikaTwoCenterEFPRecursion & operator=(const ObaraSaikaTwoCenterEFPRecursion &)
double *** exz_
Definition: osrecur.h:249
ObaraSaikaTwoCenterVIDeriv2Recursion & operator=(const ObaraSaikaTwoCenterVIDeriv2Recursion &)
virtual ~ObaraSaikaTwoCenterVIRecursion()
Definition: osrecur.cc:932
double *** vxz() const
Definition: osrecur.h:200
double *** xz() const
Definition: osrecur.h:326
virtual ~ObaraSaikaTwoCenterElectricFieldGradient()
Definition: osrecur.cc:2168
virtual void compute_erf(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2, double zetam)
Computes the Ewald potential integral with modified zeta -> zetam 3D matrix using the data provided...
Definition: osrecur.cc:1130
~ObaraSaikaTwoCenterRecursion()
Definition: osrecur.cc:842
Obara and Saika recursion object for moment integrals. Currently not used by DipoleInt, hopefully soon. THIS CLASS HAS NOT BEEN TESTED!!!
Definition: osrecur.h:73
~ObaraSaikaTwoCenterMIRecursion()
Definition: osrecur.cc:94
double *** vy_
Definition: osrecur.h:154
void calculate_f(double *F, int n, double t)
Definition: osrecur.cc:939
double *** y_
Definition: osrecur.h:355
~ObaraSaikaThreeCenterRecursion()
Definition: osrecur.cc:2411
double *** x_
Definition: osrecur.h:282
double *** vy() const
Definition: osrecur.h:168
double *** z_
Definition: osrecur.h:218
int max_am2_
Definition: osrecur.h:278
int max_am1_
Definition: osrecur.h:350
double *** x() const
Returns the x recursion matrix.
Definition: osrecur.h:369
double *** xyz_
Definition: osrecur.h:295
double *** ezz_
Definition: osrecur.h:247
int size_
Definition: osrecur.h:107
double *** q_
Definition: osrecur.h:215
Obara and Saika recursion object for computing potential derivatives.
Definition: osrecur.h:150
double *** x_
Definition: osrecur.h:79
double *** vyy_
Definition: osrecur.h:184
double *** x_
Definition: osrecur.h:354
double *** vxz_
Definition: osrecur.h:183
double *** xxz() const
Definition: osrecur.h:332
double *** zzz_
Definition: osrecur.h:300
double *** xxx_
Definition: osrecur.h:291
virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2)
Computes the potential integral 3D matrix using the data provided.
Definition: osrecur.cc:1926
virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2)
Computes the potential integral 3D matrix using the data provided.
Definition: osrecur.cc:980
double *** xyy() const
Definition: osrecur.h:333
double *** yyy_
Definition: osrecur.h:297
double *** y_
Definition: osrecur.h:217
double *** yzz_
Definition: osrecur.h:299
int zeta(const int a, const int m, const int n)
Definition: bend.cc:169
double *** y() const
Definition: osrecur.h:320
int max_am2_
Definition: osrecur.h:40
Obara and Saika recursion object for potential integrals, and electric derivatives thereof...
Definition: osrecur.h:274
int max_am1_
Definition: osrecur.h:75
double *** vzz_
Definition: osrecur.h:186
double ** y() const
Returns the y recursion matrix.
Definition: osrecur.h:60
virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2)
Computes the potential integral 3D matrix using the data provided.
Definition: osrecur.cc:1551
double *** yyz_
Definition: osrecur.h:298
double *** yyz() const
Definition: osrecur.h:334
double ** x() const
Returns the x recursion matrix.
Definition: osrecur.h:58
double *** vxx() const
Definition: osrecur.h:198
virtual double *** vxy() const
Definition: osrecur.h:134
double ** y_
Definition: osrecur.h:43
double *** xxy_
Definition: osrecur.h:292
double *** x() const
Definition: osrecur.h:92
double *** yy() const
Definition: osrecur.h:323
double *** vi_
Definition: osrecur.h:109
Obara and Saika recursion object for computing electric field gradient integrals. ...
Definition: osrecur.h:242
virtual ~ObaraSaikaTwoCenterEFPRecursion()
Definition: osrecur.cc:204
double *** z_
Definition: osrecur.h:356
double *** zzz() const
Definition: osrecur.h:330
ObaraSaikaTwoCenterRecursion & operator=(const ObaraSaikaTwoCenterRecursion &)
double *** yz() const
Definition: osrecur.h:327
double *** vx() const
Definition: osrecur.h:167
ObaraSaikaThreeCenterRecursion & operator=(const ObaraSaikaThreeCenterRecursion &)
double *** z() const
Returns the z recursion matrix.
Definition: osrecur.h:373
virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2)
Computes the potential integral 3D matrix using the data provided.
Definition: osrecur.cc:2178
double *** x() const
Definition: osrecur.h:319
virtual double *** vxx() const
Definition: osrecur.h:133
double ** x_
Definition: osrecur.h:42
double *** yz_
Definition: osrecur.h:289
double *** xyy_
Definition: osrecur.h:294
virtual double *** vyy() const
Definition: osrecur.h:136
virtual double *** vzz() const
Definition: osrecur.h:138
virtual double *** vy() const
Definition: osrecur.h:130
double *** vzz() const
Definition: osrecur.h:203
double *** yzz() const
Definition: osrecur.h:336
double *** y_
Definition: osrecur.h:80
ObaraSaikaTwoCenterVIRecursion & operator=(const ObaraSaikaTwoCenterVIRecursion &)
double *** q() const
Returns the potential integral 3D matrix.
Definition: osrecur.h:318
void compute(double PA[3], double PB[3], double gamma, int am1, int am2)
Computes the recursion matrices for the data provided.
Definition: osrecur.cc:849
double *** zz() const
Definition: osrecur.h:324
virtual double *** vz() const
Definition: osrecur.h:131
double *** y() const
Definition: osrecur.h:232
double *** exy_
Definition: osrecur.h:248
double *** q_
Definition: osrecur.h:281
Obara and Saika recursion object for computing electric field integrals.
Definition: osrecur.h:212
virtual ~ObaraSaikaTwoCenterVIDerivRecursion()
Definition: osrecur.cc:1293
ObaraSaikaTwoCenterMIRecursion & operator=(const ObaraSaikaTwoCenterMIRecursion &)
double *** xy_
Definition: osrecur.h:286
double *** vyz_
Definition: osrecur.h:185
double *** y_
Definition: osrecur.h:283
ObaraSaikaTwoCenterElectricField & operator=(const ObaraSaikaTwoCenterElectricField &)
double *** vxy_
Definition: osrecur.h:182
double *** eyy_
Definition: osrecur.h:246
double *** y() const
Returns the y recursion matrix.
Definition: osrecur.h:371
double *** xyz() const
Definition: osrecur.h:337
void compute(double PA[3], double PB[3], double gamma, int am1, int am2)
Definition: osrecur.cc:101
double ** z_
Definition: osrecur.h:44
double *** ex() const
Definition: osrecur.h:262
int max_am2_
Definition: osrecur.h:351
Generic Obara and Saika recursion object.
Definition: osrecur.h:37
double *** xx_
Definition: osrecur.h:285
double *** x() const
Definition: osrecur.h:231
double *** eyz_
Definition: osrecur.h:250
double ** z() const
Returns the z recursion matrix.
Definition: osrecur.h:62
int max_am2_
Definition: osrecur.h:106
ObaraSaikaTwoCenterElectricFieldGradient & operator=(const ObaraSaikaTwoCenterElectricFieldGradient &)
double *** vyz() const
Definition: osrecur.h:202
virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2)
Computes the potential integral 3D matrix using the data provided.
Definition: osrecur.cc:271
int max_am2_
Definition: osrecur.h:76
double *** vxy() const
Definition: osrecur.h:199
double *** ey() const
Definition: osrecur.h:263
double *** z() const
Definition: osrecur.h:94
double *** yy_
Definition: osrecur.h:288
double *** vz_
Definition: osrecur.h:155
virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2)
Computes the potential integral 3D matrix using the data provided.
Definition: osrecur.cc:1300
double *** zz_
Definition: osrecur.h:290
double *** xx() const
Definition: osrecur.h:322
virtual ~ObaraSaikaTwoCenterElectricField()
Definition: osrecur.cc:1919
double *** yyy() const
Definition: osrecur.h:329
double *** xy() const
Definition: osrecur.h:325
int max_am3_
Definition: osrecur.h:352
ObaraSaikaTwoCenterVIDerivRecursion & operator=(const ObaraSaikaTwoCenterVIDerivRecursion &)
void calculate_f(double *F, int n, double t)
Definition: osrecur.cc:230
Obara and Saika recursion object for potential integrals.
Definition: osrecur.h:102
double *** vyy() const
Definition: osrecur.h:201
int size_
Definition: osrecur.h:279
virtual ~ObaraSaikaTwoCenterVIDeriv2Recursion()
Definition: osrecur.cc:1541
double *** xxx() const
Definition: osrecur.h:328
double *** vx_
Definition: osrecur.h:153
int max_am1_
Definition: osrecur.h:277
double *** xzz_
Definition: osrecur.h:296
double *** xz_
Definition: osrecur.h:287
double *** vi() const
Returns the potential integral 3D matrix.
Definition: osrecur.h:127
double *** x_
Definition: osrecur.h:216
double *** exx_
Definition: osrecur.h:245
int max_m_
Definition: osrecur.h:77
double *** xxz_
Definition: osrecur.h:293
int max_am1_
Definition: osrecur.h:39
double *** vxx_
Definition: osrecur.h:181
double *** ez() const
Definition: osrecur.h:264
virtual double *** vxz() const
Definition: osrecur.h:135
double *** z() const
Definition: osrecur.h:233
double *** xzz() const
Definition: osrecur.h:335
double *** y() const
Definition: osrecur.h:93
double *** xxy() const
Definition: osrecur.h:331
virtual double *** vyz() const
Definition: osrecur.h:137
Definition: osrecur.h:348
double *** z() const
Definition: osrecur.h:321
double *** vz() const
Definition: osrecur.h:169