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 file is part of Psi4.
12  *
13  * Psi4 is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU Lesser General Public License as published by
15  * the Free Software Foundation, version 3.
16  *
17  * Psi4 is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  * GNU Lesser General Public License for more details.
21  *
22  * You should have received a copy of the GNU Lesser General Public License along
23  * with Psi4; if not, write to the Free Software Foundation, Inc.,
24  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25  *
26  * @END LICENSE
27  */
28 
29 #ifndef _psi_src_lib_libmints_osrecur_h
30 #define _psi_src_lib_libmints_osrecur_h
31 
32 namespace psi {
33 
39 {
40  int max_am1_;
41  int max_am2_;
42 
43  double **x_;
44  double **y_;
45  double **z_;
46 
47  // No default constructor
49  // No assignment operator
51 
52 public:
55  ObaraSaikaTwoCenterRecursion(int max_am1, int max_am2);
57 
59  double **x() const { return x_; }
61  double **y() const { return y_; }
63  double **z() const { return z_; }
64 
66  void compute(double PA[3], double PB[3], double gamma, int am1, int am2);
67 };
68 
75 {
76  int max_am1_;
77  int max_am2_;
78  int max_m_;
79 
80  double ***x_;
81  double ***y_;
82  double ***z_;
83 
84  // No default constructor
86  // No assignment operator
88 
89 public:
90  ObaraSaikaTwoCenterMIRecursion(int max_am1, int max_am2, int max_m);
92 
93  double ***x() const { return x_; }
94  double ***y() const { return y_; }
95  double ***z() const { return z_; }
96  void compute(double PA[3], double PB[3], double gamma, int am1, int am2);
97 };
98 
104 {
105 protected:
106  int max_am1_;
107  int max_am2_;
108  int size_;
109 
110  double ***vi_;
111 
112  // Forms Fm(U) from A20 (OS 1986)
113  void calculate_f(double *F, int n, double t);
114 
115 private:
116  // No default constructor
118  // No assignment operator
120 
121 public:
124  ObaraSaikaTwoCenterVIRecursion(int max_am1, int max_am2);
126 
128  double ***vi() const { return vi_; }
129 
130  virtual double ***vx() const { return 0; }
131  virtual double ***vy() const { return 0; }
132  virtual double ***vz() const { return 0; }
133 
134  virtual double ***vxx() const { return 0; }
135  virtual double ***vxy() const { return 0; }
136  virtual double ***vxz() const { return 0; }
137  virtual double ***vyy() const { return 0; }
138  virtual double ***vyz() const { return 0; }
139  virtual double ***vzz() const { return 0; }
140 
142  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
144  virtual void compute_erf(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2, double zetam);
145 };
146 
152 {
153 protected:
154  double ***vx_;
155  double ***vy_;
156  double ***vz_;
157 
158 private:
159  // No default constructor();
161  // No assignment operator
163 
164 public:
165  ObaraSaikaTwoCenterVIDerivRecursion(int max_am1, int max_am2);
167 
168  double ***vx() const { return vx_; }
169  double ***vy() const { return vy_; }
170  double ***vz() const { return vz_; }
171 
172  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
173 };
174 
180 {
181 protected:
182  double ***vxx_;
183  double ***vxy_;
184  double ***vxz_;
185  double ***vyy_;
186  double ***vyz_;
187  double ***vzz_;
188 
189 private:
190  // No default constructor();
192  // No assignment operator
194 
195 public:
196  ObaraSaikaTwoCenterVIDeriv2Recursion(int max_am1, int max_am2);
198 
199  double ***vxx() const { return vxx_; }
200  double ***vxy() const { return vxy_; }
201  double ***vxz() const { return vxz_; }
202  double ***vyy() const { return vyy_; }
203  double ***vyz() const { return vyz_; }
204  double ***vzz() const { return vzz_; }
205 
206  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
207 };
208 
214 {
215 protected:
216  double ***q_;
217  double ***x_;
218  double ***y_;
219  double ***z_;
220 
221 private:
222  // No default constructor
224  // No assignment operator
226 
227 public:
228  ObaraSaikaTwoCenterElectricField(int max_am1, int max_am2);
230 
231  // We could also add the getter for the q_ (potential ints here)
232  double ***x() const { return x_; }
233  double ***y() const { return y_; }
234  double ***z() const { return z_; }
235 
236  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
237 };
238 
244 {
245 protected:
246  double ***exx_;
247  double ***eyy_;
248  double ***ezz_;
249  double ***exy_;
250  double ***exz_;
251  double ***eyz_;
252 
253 private:
254  // No default constructor
256  // No assignment operator
258 
259 public:
260  ObaraSaikaTwoCenterElectricFieldGradient(int max_am1, int max_am2);
262 
263  double ***ex() const { return x_; }
264  double ***ey() const { return y_; }
265  double ***ez() const { return z_; }
266 
267  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
268 };
269 
270 
276 {
277 protected:
278  int max_am1_;
279  int max_am2_;
280  int size_;
281 
282  double*** q_;
283  double*** x_;
284  double*** y_;
285  double*** z_;
286  double*** xx_;
287  double*** xy_;
288  double*** xz_;
289  double*** yy_;
290  double*** yz_;
291  double*** zz_;
292  double*** xxx_;
293  double*** xxy_;
294  double*** xxz_;
295  double*** xyy_;
296  double*** xyz_;
297  double*** xzz_;
298  double*** yyy_;
299  double*** yyz_;
300  double*** yzz_;
301  double*** zzz_;
302 
303  // Forms Fm(U) from A20 (OS 1986)
304  void calculate_f(double *F, int n, double t);
305 
306 private:
307  // No default constructor
309  // No assignment operator
311 
312 public:
315  ObaraSaikaTwoCenterEFPRecursion(int max_am1, int max_am2);
317 
319  double*** q () const { return q_; }
320  double*** x () const { return x_; }
321  double*** y () const { return y_; }
322  double*** z () const { return z_; }
323  double*** xx () const { return xx_; }
324  double*** yy () const { return yy_; }
325  double*** zz () const { return zz_; }
326  double*** xy () const { return xy_; }
327  double*** xz () const { return xz_; }
328  double*** yz () const { return yz_; }
329  double*** xxx() const { return xxx_; }
330  double*** yyy() const { return yyy_; }
331  double*** zzz() const { return zzz_; }
332  double*** xxy() const { return xxy_; }
333  double*** xxz() const { return xxz_; }
334  double*** xyy() const { return xyy_; }
335  double*** yyz() const { return yyz_; }
336  double*** xzz() const { return xzz_; }
337  double*** yzz() const { return yzz_; }
338  double*** xyz() const { return xyz_; }
339 
341  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
342 
343 };
344 
345 
350 {
351  int max_am1_;
352  int max_am2_;
353  int max_am3_;
354 
355  double ***x_;
356  double ***y_;
357  double ***z_;
358 
359  // No default constructor
361 
362  // No assignment operator
364 
365 public:
366  ObaraSaikaThreeCenterRecursion(int max_am1, int max_am2, int max_am3);
368 
370  double ***x() const { return x_; }
372  double ***y() const { return y_; }
374  double ***z() const { return z_; }
375 
377  void compute(double GA[3],
378  double GB[3],
379  double GC[3],
380  double gammac,
381  int amA, int amB, int amC);
382 };
383 
384 }
385 
386 #endif
int max_am1_
Definition: osrecur.h:106
virtual double *** vx() const
Definition: osrecur.h:130
double *** z_
Definition: osrecur.h:285
double *** z_
Definition: osrecur.h:82
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:2419
ObaraSaikaTwoCenterEFPRecursion & operator=(const ObaraSaikaTwoCenterEFPRecursion &)
double *** exz_
Definition: osrecur.h:250
ObaraSaikaTwoCenterVIDeriv2Recursion & operator=(const ObaraSaikaTwoCenterVIDeriv2Recursion &)
virtual ~ObaraSaikaTwoCenterVIRecursion()
Definition: osrecur.cc:933
double *** vxz() const
Definition: osrecur.h:201
double *** xz() const
Definition: osrecur.h:327
virtual ~ObaraSaikaTwoCenterElectricFieldGradient()
Definition: osrecur.cc:2169
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:1131
~ObaraSaikaTwoCenterRecursion()
Definition: osrecur.cc:843
Obara and Saika recursion object for moment integrals. Currently not used by DipoleInt, hopefully soon. THIS CLASS HAS NOT BEEN TESTED!!!
Definition: osrecur.h:74
~ObaraSaikaTwoCenterMIRecursion()
Definition: osrecur.cc:95
double *** vy_
Definition: osrecur.h:155
void calculate_f(double *F, int n, double t)
Definition: osrecur.cc:940
double *** y_
Definition: osrecur.h:356
~ObaraSaikaThreeCenterRecursion()
Definition: osrecur.cc:2412
double *** x_
Definition: osrecur.h:283
double *** vy() const
Definition: osrecur.h:169
double *** z_
Definition: osrecur.h:219
int max_am2_
Definition: osrecur.h:279
int max_am1_
Definition: osrecur.h:351
double *** x() const
Returns the x recursion matrix.
Definition: osrecur.h:370
double *** xyz_
Definition: osrecur.h:296
double *** ezz_
Definition: osrecur.h:248
int size_
Definition: osrecur.h:108
double *** q_
Definition: osrecur.h:216
Obara and Saika recursion object for computing potential derivatives.
Definition: osrecur.h:151
double *** x_
Definition: osrecur.h:80
double *** vyy_
Definition: osrecur.h:185
double *** x_
Definition: osrecur.h:355
double *** vxz_
Definition: osrecur.h:184
double *** xxz() const
Definition: osrecur.h:333
double *** zzz_
Definition: osrecur.h:301
double *** xxx_
Definition: osrecur.h:292
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:1927
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:981
double *** xyy() const
Definition: osrecur.h:334
double *** yyy_
Definition: osrecur.h:298
double *** y_
Definition: osrecur.h:218
double *** yzz_
Definition: osrecur.h:300
int zeta(const int a, const int m, const int n)
Definition: bend.cc:169
double *** y() const
Definition: osrecur.h:321
int max_am2_
Definition: osrecur.h:41
Obara and Saika recursion object for potential integrals, and electric derivatives thereof...
Definition: osrecur.h:275
int max_am1_
Definition: osrecur.h:76
double *** vzz_
Definition: osrecur.h:187
double ** y() const
Returns the y recursion matrix.
Definition: osrecur.h:61
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:1552
double *** yyz_
Definition: osrecur.h:299
double *** yyz() const
Definition: osrecur.h:335
double ** x() const
Returns the x recursion matrix.
Definition: osrecur.h:59
double *** vxx() const
Definition: osrecur.h:199
virtual double *** vxy() const
Definition: osrecur.h:135
double ** y_
Definition: osrecur.h:44
double *** xxy_
Definition: osrecur.h:293
double *** x() const
Definition: osrecur.h:93
double *** yy() const
Definition: osrecur.h:324
double *** vi_
Definition: osrecur.h:110
Obara and Saika recursion object for computing electric field gradient integrals. ...
Definition: osrecur.h:243
virtual ~ObaraSaikaTwoCenterEFPRecursion()
Definition: osrecur.cc:205
double *** z_
Definition: osrecur.h:357
double *** zzz() const
Definition: osrecur.h:331
ObaraSaikaTwoCenterRecursion & operator=(const ObaraSaikaTwoCenterRecursion &)
double *** yz() const
Definition: osrecur.h:328
double *** vx() const
Definition: osrecur.h:168
ObaraSaikaThreeCenterRecursion & operator=(const ObaraSaikaThreeCenterRecursion &)
double *** z() const
Returns the z recursion matrix.
Definition: osrecur.h:374
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:2179
double *** x() const
Definition: osrecur.h:320
virtual double *** vxx() const
Definition: osrecur.h:134
double ** x_
Definition: osrecur.h:43
double *** yz_
Definition: osrecur.h:290
double *** xyy_
Definition: osrecur.h:295
virtual double *** vyy() const
Definition: osrecur.h:137
virtual double *** vzz() const
Definition: osrecur.h:139
virtual double *** vy() const
Definition: osrecur.h:131
double *** vzz() const
Definition: osrecur.h:204
double *** yzz() const
Definition: osrecur.h:337
double *** y_
Definition: osrecur.h:81
ObaraSaikaTwoCenterVIRecursion & operator=(const ObaraSaikaTwoCenterVIRecursion &)
double *** q() const
Returns the potential integral 3D matrix.
Definition: osrecur.h:319
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:850
double *** zz() const
Definition: osrecur.h:325
virtual double *** vz() const
Definition: osrecur.h:132
double *** y() const
Definition: osrecur.h:233
double *** exy_
Definition: osrecur.h:249
double *** q_
Definition: osrecur.h:282
Obara and Saika recursion object for computing electric field integrals.
Definition: osrecur.h:213
virtual ~ObaraSaikaTwoCenterVIDerivRecursion()
Definition: osrecur.cc:1294
ObaraSaikaTwoCenterMIRecursion & operator=(const ObaraSaikaTwoCenterMIRecursion &)
double *** xy_
Definition: osrecur.h:287
double *** vyz_
Definition: osrecur.h:186
double *** y_
Definition: osrecur.h:284
ObaraSaikaTwoCenterElectricField & operator=(const ObaraSaikaTwoCenterElectricField &)
double *** vxy_
Definition: osrecur.h:183
double *** eyy_
Definition: osrecur.h:247
double *** y() const
Returns the y recursion matrix.
Definition: osrecur.h:372
double *** xyz() const
Definition: osrecur.h:338
void compute(double PA[3], double PB[3], double gamma, int am1, int am2)
Definition: osrecur.cc:102
double ** z_
Definition: osrecur.h:45
double *** ex() const
Definition: osrecur.h:263
int max_am2_
Definition: osrecur.h:352
Generic Obara and Saika recursion object.
Definition: osrecur.h:38
double *** xx_
Definition: osrecur.h:286
double *** x() const
Definition: osrecur.h:232
double *** eyz_
Definition: osrecur.h:251
double ** z() const
Returns the z recursion matrix.
Definition: osrecur.h:63
int max_am2_
Definition: osrecur.h:107
ObaraSaikaTwoCenterElectricFieldGradient & operator=(const ObaraSaikaTwoCenterElectricFieldGradient &)
double *** vyz() const
Definition: osrecur.h:203
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:272
int max_am2_
Definition: osrecur.h:77
double *** vxy() const
Definition: osrecur.h:200
double *** ey() const
Definition: osrecur.h:264
double *** z() const
Definition: osrecur.h:95
double *** yy_
Definition: osrecur.h:289
double *** vz_
Definition: osrecur.h:156
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:1301
double *** zz_
Definition: osrecur.h:291
double *** xx() const
Definition: osrecur.h:323
virtual ~ObaraSaikaTwoCenterElectricField()
Definition: osrecur.cc:1920
double *** yyy() const
Definition: osrecur.h:330
double *** xy() const
Definition: osrecur.h:326
int max_am3_
Definition: osrecur.h:353
ObaraSaikaTwoCenterVIDerivRecursion & operator=(const ObaraSaikaTwoCenterVIDerivRecursion &)
void calculate_f(double *F, int n, double t)
Definition: osrecur.cc:231
Obara and Saika recursion object for potential integrals.
Definition: osrecur.h:103
double *** vyy() const
Definition: osrecur.h:202
int size_
Definition: osrecur.h:280
virtual ~ObaraSaikaTwoCenterVIDeriv2Recursion()
Definition: osrecur.cc:1542
double *** xxx() const
Definition: osrecur.h:329
double *** vx_
Definition: osrecur.h:154
int max_am1_
Definition: osrecur.h:278
double *** xzz_
Definition: osrecur.h:297
double *** xz_
Definition: osrecur.h:288
double *** vi() const
Returns the potential integral 3D matrix.
Definition: osrecur.h:128
double *** x_
Definition: osrecur.h:217
double *** exx_
Definition: osrecur.h:246
int max_m_
Definition: osrecur.h:78
double *** xxz_
Definition: osrecur.h:294
int max_am1_
Definition: osrecur.h:40
double *** vxx_
Definition: osrecur.h:182
double *** ez() const
Definition: osrecur.h:265
virtual double *** vxz() const
Definition: osrecur.h:136
double *** z() const
Definition: osrecur.h:234
double *** xzz() const
Definition: osrecur.h:336
double *** y() const
Definition: osrecur.h:94
double *** xxy() const
Definition: osrecur.h:332
virtual double *** vyz() const
Definition: osrecur.h:138
Definition: osrecur.h:349
double *** z() const
Definition: osrecur.h:322
double *** vz() const
Definition: osrecur.h:170