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-2019 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 #include "psi4/pragma.h"
33 
34 namespace psi {
35 
41  int max_am1_;
42  int max_am2_;
43 
44  double **x_;
45  double **y_;
46  double **z_;
47 
48  // No default constructor
50  // No assignment operator
52 
53  public:
56  ObaraSaikaTwoCenterRecursion(int max_am1, int max_am2);
58 
60  double **x() const { return x_; }
62  double **y() const { return y_; }
64  double **z() const { return z_; }
65 
67  void compute(double PA[3], double PB[3], double gamma, int am1, int am2);
68 };
69 
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  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 nullptr; }
130  virtual double ***vy() const { return nullptr; }
131  virtual double ***vz() const { return nullptr; }
132 
133  virtual double ***vxx() const { return nullptr; }
134  virtual double ***vxy() const { return nullptr; }
135  virtual double ***vxz() const { return nullptr; }
136  virtual double ***vyy() const { return nullptr; }
137  virtual double ***vyz() const { return nullptr; }
138  virtual double ***vzz() const { return nullptr; }
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  protected:
152  double ***vx_;
153  double ***vy_;
154  double ***vz_;
155 
156  private:
157  // No default constructor();
159  // No assignment operator
161 
162  public:
163  ObaraSaikaTwoCenterVIDerivRecursion(int max_am1, int max_am2);
165 
166  double ***vx() const override { return vx_; }
167  double ***vy() const override { return vy_; }
168  double ***vz() const override { return vz_; }
169 
170  void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2) override;
171 };
172 
178  protected:
179  double ***vxx_;
180  double ***vxy_;
181  double ***vxz_;
182  double ***vyy_;
183  double ***vyz_;
184  double ***vzz_;
185 
186  private:
187  // No default constructor();
189  // No assignment operator
191 
192  public:
193  ObaraSaikaTwoCenterVIDeriv2Recursion(int max_am1, int max_am2);
195 
196  double ***vxx() const override { return vxx_; }
197  double ***vxy() const override { return vxy_; }
198  double ***vxz() const override { return vxz_; }
199  double ***vyy() const override { return vyy_; }
200  double ***vyz() const override { return vyz_; }
201  double ***vzz() const override { return vzz_; }
202 
203  void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2) override;
204 };
205 
211  protected:
212  double ***q_;
213  double ***x_;
214  double ***y_;
215  double ***z_;
216 
217  private:
218  // No default constructor
220  // No assignment operator
222 
223  public:
224  ObaraSaikaTwoCenterElectricField(int max_am1, int max_am2);
226 
227  // We could also add the getter for the q_ (potential ints here)
228  double ***x() const { return x_; }
229  double ***y() const { return y_; }
230  double ***z() const { return z_; }
231 
232  void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2) override;
233 };
234 
240  protected:
241  double ***exx_;
242  double ***eyy_;
243  double ***ezz_;
244  double ***exy_;
245  double ***exz_;
246  double ***eyz_;
247 
248  private:
249  // No default constructor
251  // No assignment operator
253 
254  public:
255  ObaraSaikaTwoCenterElectricFieldGradient(int max_am1, int max_am2);
257 
258  double ***ex() const { return x_; }
259  double ***ey() const { return y_; }
260  double ***ez() const { return z_; }
261 
262  void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2) override;
263 };
264 
270  protected:
271  int max_am1_;
272  int max_am2_;
273  int size_;
274 
275  double ***q_;
276  double ***x_;
277  double ***y_;
278  double ***z_;
279  double ***xx_;
280  double ***xy_;
281  double ***xz_;
282  double ***yy_;
283  double ***yz_;
284  double ***zz_;
285  double ***xxx_;
286  double ***xxy_;
287  double ***xxz_;
288  double ***xyy_;
289  double ***xyz_;
290  double ***xzz_;
291  double ***yyy_;
292  double ***yyz_;
293  double ***yzz_;
294  double ***zzz_;
295 
296  // Forms Fm(U) from A20 (OS 1986)
297  void calculate_f(double *F, int n, double t);
298 
299  private:
300  // No default constructor
302  // No assignment operator
304 
305  public:
308  ObaraSaikaTwoCenterEFPRecursion(int max_am1, int max_am2);
310 
312  double ***q() const { return q_; }
313  double ***x() const { return x_; }
314  double ***y() const { return y_; }
315  double ***z() const { return z_; }
316  double ***xx() const { return xx_; }
317  double ***yy() const { return yy_; }
318  double ***zz() const { return zz_; }
319  double ***xy() const { return xy_; }
320  double ***xz() const { return xz_; }
321  double ***yz() const { return yz_; }
322  double ***xxx() const { return xxx_; }
323  double ***yyy() const { return yyy_; }
324  double ***zzz() const { return zzz_; }
325  double ***xxy() const { return xxy_; }
326  double ***xxz() const { return xxz_; }
327  double ***xyy() const { return xyy_; }
328  double ***yyz() const { return yyz_; }
329  double ***xzz() const { return xzz_; }
330  double ***yzz() const { return yzz_; }
331  double ***xyz() const { return xyz_; }
332 
334  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
335 };
336 
341  int max_am1_;
342  int max_am2_;
343  int max_am3_;
344 
345  double ***x_;
346  double ***y_;
347  double ***z_;
348 
349  // No default constructor
351 
352  // No assignment operator
354 
355  public:
356  ObaraSaikaThreeCenterRecursion(int max_am1, int max_am2, int max_am3);
358 
360  double ***x() const { return x_; }
362  double ***y() const { return y_; }
364  double ***z() const { return z_; }
365 
367  void compute(double GA[3], double GB[3], double GC[3], double gammac, int amA, int amB, int amC);
368 };
369 
370 } // namespace psi
371 
372 #endif
int max_am1_
Definition: osrecur.h:105
virtual double *** vx() const
Definition: osrecur.h:129
double *** z_
Definition: osrecur.h:278
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:3314
ObaraSaikaTwoCenterEFPRecursion & operator=(const ObaraSaikaTwoCenterEFPRecursion &)
double *** exz_
Definition: osrecur.h:245
ObaraSaikaTwoCenterVIDeriv2Recursion & operator=(const ObaraSaikaTwoCenterVIDeriv2Recursion &)
double *** vz() const override
Definition: osrecur.h:168
virtual ~ObaraSaikaTwoCenterVIRecursion()
Definition: osrecur.cc:1345
double *** xz() const
Definition: osrecur.h:320
double *** vyy() const override
Definition: osrecur.h:199
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:1549
~ObaraSaikaTwoCenterRecursion()
Definition: osrecur.cc:1256
Obara and Saika recursion object for moment integrals. Currently not used by DipoleInt, hopefully soon. THIS CLASS HAS NOT BEEN TESTED!!!
Definition: osrecur.h:75
double *** vx() const override
Definition: osrecur.h:166
~ObaraSaikaTwoCenterMIRecursion()
Definition: osrecur.cc:90
double *** vy_
Definition: osrecur.h:153
void calculate_f(double *F, int n, double t)
Definition: osrecur.cc:1349
double *** y_
Definition: osrecur.h:346
~ObaraSaikaThreeCenterRecursion()
Definition: osrecur.cc:3308
double *** x_
Definition: osrecur.h:276
double *** z_
Definition: osrecur.h:215
int max_am2_
Definition: osrecur.h:272
int max_am1_
Definition: osrecur.h:341
double *** x() const
Returns the x recursion matrix.
Definition: osrecur.h:360
double *** xyz_
Definition: osrecur.h:289
double *** ezz_
Definition: osrecur.h:243
~ObaraSaikaTwoCenterElectricFieldGradient() override
Definition: osrecur.cc:2942
int size_
Definition: osrecur.h:107
double *** q_
Definition: osrecur.h:212
Obara and Saika recursion object for computing potential derivatives.
Definition: osrecur.h:150
double *** x_
Definition: osrecur.h:80
double *** vyy_
Definition: osrecur.h:182
double *** x_
Definition: osrecur.h:345
double *** vzz() const override
Definition: osrecur.h:201
double *** vxz_
Definition: osrecur.h:181
double *** xxz() const
Definition: osrecur.h:326
double *** zzz_
Definition: osrecur.h:294
double *** xxx_
Definition: osrecur.h:285
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:1387
double *** xyy() const
Definition: osrecur.h:327
double *** yyy_
Definition: osrecur.h:291
double *** y_
Definition: osrecur.h:214
double *** yzz_
Definition: osrecur.h:293
int zeta(const int a, const int m, const int n)
Definition: bend.cc:169
double *** y() const
Definition: osrecur.h:314
int max_am2_
Definition: osrecur.h:42
Obara and Saika recursion object for potential integrals, and electric derivatives thereof...
Definition: osrecur.h:269
int max_am1_
Definition: osrecur.h:76
double *** vzz_
Definition: osrecur.h:184
double ** y() const
Returns the y recursion matrix.
Definition: osrecur.h:62
double *** yyz_
Definition: osrecur.h:292
double *** vxz() const override
Definition: osrecur.h:198
~ObaraSaikaTwoCenterElectricField() override
Definition: osrecur.cc:2621
double *** yyz() const
Definition: osrecur.h:328
double ** x() const
Returns the x recursion matrix.
Definition: osrecur.h:60
virtual double *** vxy() const
Definition: osrecur.h:134
double ** y_
Definition: osrecur.h:45
void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2) override
Computes the potential integral 3D matrix using the data provided.
Definition: osrecur.cc:2951
~ObaraSaikaTwoCenterVIDerivRecursion() override
Definition: osrecur.cc:1724
double *** xxy_
Definition: osrecur.h:286
double *** x() const
Definition: osrecur.h:93
double *** yy() const
Definition: osrecur.h:317
double *** vi_
Definition: osrecur.h:109
Obara and Saika recursion object for computing electric field gradient integrals. ...
Definition: osrecur.h:239
virtual ~ObaraSaikaTwoCenterEFPRecursion()
Definition: osrecur.cc:200
double *** z_
Definition: osrecur.h:347
double *** zzz() const
Definition: osrecur.h:324
ObaraSaikaTwoCenterRecursion & operator=(const ObaraSaikaTwoCenterRecursion &)
double *** yz() const
Definition: osrecur.h:321
ObaraSaikaThreeCenterRecursion & operator=(const ObaraSaikaThreeCenterRecursion &)
double *** z() const
Returns the z recursion matrix.
Definition: osrecur.h:364
double *** x() const
Definition: osrecur.h:313
virtual double *** vxx() const
Definition: osrecur.h:133
double ** x_
Definition: osrecur.h:44
double *** yz_
Definition: osrecur.h:283
double *** xyy_
Definition: osrecur.h:288
virtual double *** vyy() const
Definition: osrecur.h:136
virtual double *** vzz() const
Definition: osrecur.h:138
virtual double *** vy() const
Definition: osrecur.h:130
void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2) override
Computes the potential integral 3D matrix using the data provided.
Definition: osrecur.cc:2053
double *** yzz() const
Definition: osrecur.h:330
double *** y_
Definition: osrecur.h:81
ObaraSaikaTwoCenterVIRecursion & operator=(const ObaraSaikaTwoCenterVIRecursion &)
double *** q() const
Returns the potential integral 3D matrix.
Definition: osrecur.h:312
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:1262
double *** zz() const
Definition: osrecur.h:318
virtual double *** vz() const
Definition: osrecur.h:131
double *** y() const
Definition: osrecur.h:229
void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2) override
Computes the potential integral 3D matrix using the data provided.
Definition: osrecur.cc:1730
double *** exy_
Definition: osrecur.h:244
void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2) override
Computes the potential integral 3D matrix using the data provided.
Definition: osrecur.cc:2627
double *** q_
Definition: osrecur.h:275
Obara and Saika recursion object for computing electric field integrals.
Definition: osrecur.h:210
ObaraSaikaTwoCenterMIRecursion & operator=(const ObaraSaikaTwoCenterMIRecursion &)
double *** xy_
Definition: osrecur.h:280
double *** vyz_
Definition: osrecur.h:183
double *** y_
Definition: osrecur.h:277
ObaraSaikaTwoCenterElectricField & operator=(const ObaraSaikaTwoCenterElectricField &)
double *** vxy_
Definition: osrecur.h:180
double *** vxy() const override
Definition: osrecur.h:197
double *** eyy_
Definition: osrecur.h:242
double *** vxx() const override
Definition: osrecur.h:196
double *** y() const
Returns the y recursion matrix.
Definition: osrecur.h:362
double *** xyz() const
Definition: osrecur.h:331
double *** vyz() const override
Definition: osrecur.h:200
void compute(double PA[3], double PB[3], double gamma, int am1, int am2)
Definition: osrecur.cc:96
double ** z_
Definition: osrecur.h:46
double *** ex() const
Definition: osrecur.h:258
int max_am2_
Definition: osrecur.h:342
Generic Obara and Saika recursion object.
Definition: osrecur.h:40
double *** xx_
Definition: osrecur.h:279
double *** x() const
Definition: osrecur.h:228
double *** eyz_
Definition: osrecur.h:246
double ** z() const
Returns the z recursion matrix.
Definition: osrecur.h:64
int max_am2_
Definition: osrecur.h:106
ObaraSaikaTwoCenterElectricFieldGradient & operator=(const ObaraSaikaTwoCenterElectricFieldGradient &)
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:263
int max_am2_
Definition: osrecur.h:77
double *** ey() const
Definition: osrecur.h:259
double *** z() const
Definition: osrecur.h:95
double *** yy_
Definition: osrecur.h:282
double *** vz_
Definition: osrecur.h:154
double *** zz_
Definition: osrecur.h:284
double *** xx() const
Definition: osrecur.h:316
double *** yyy() const
Definition: osrecur.h:323
double *** xy() const
Definition: osrecur.h:319
int max_am3_
Definition: osrecur.h:343
ObaraSaikaTwoCenterVIDerivRecursion & operator=(const ObaraSaikaTwoCenterVIDerivRecursion &)
void calculate_f(double *F, int n, double t)
Definition: osrecur.cc:225
Obara and Saika recursion object for potential integrals.
Definition: osrecur.h:103
int size_
Definition: osrecur.h:273
double *** xxx() const
Definition: osrecur.h:322
double *** vx_
Definition: osrecur.h:152
int max_am1_
Definition: osrecur.h:271
double *** xzz_
Definition: osrecur.h:290
double *** xz_
Definition: osrecur.h:281
double *** vi() const
Returns the potential integral 3D matrix.
Definition: osrecur.h:127
double *** x_
Definition: osrecur.h:213
double *** exx_
Definition: osrecur.h:241
int max_m_
Definition: osrecur.h:78
double *** vy() const override
Definition: osrecur.h:167
double *** xxz_
Definition: osrecur.h:287
int max_am1_
Definition: osrecur.h:41
double *** vxx_
Definition: osrecur.h:179
double *** ez() const
Definition: osrecur.h:260
virtual double *** vxz() const
Definition: osrecur.h:135
double *** z() const
Definition: osrecur.h:230
double *** xzz() const
Definition: osrecur.h:329
double *** y() const
Definition: osrecur.h:94
double *** xxy() const
Definition: osrecur.h:325
virtual double *** vyz() const
Definition: osrecur.h:137
~ObaraSaikaTwoCenterVIDeriv2Recursion() override
Definition: osrecur.cc:2044
Definition: osrecur.h:340
double *** z() const
Definition: osrecur.h:315