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-2018 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  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  int max_am1_;
75  int max_am2_;
76  int max_m_;
77 
78  double ***x_;
79  double ***y_;
80  double ***z_;
81 
82  // No default constructor
84  // No assignment operator
86 
87  public:
88  ObaraSaikaTwoCenterMIRecursion(int max_am1, int max_am2, int max_m);
90 
91  double ***x() const { return x_; }
92  double ***y() const { return y_; }
93  double ***z() const { return z_; }
94  void compute(double PA[3], double PB[3], double gamma, int am1, int am2);
95 };
96 
102  protected:
103  int max_am1_;
104  int max_am2_;
105  int size_;
106 
107  double ***vi_;
108 
109  // Forms Fm(U) from A20 (OS 1986)
110  void calculate_f(double *F, int n, double t);
111 
112  private:
113  // No default constructor
115  // No assignment operator
117 
118  public:
121  ObaraSaikaTwoCenterVIRecursion(int max_am1, int max_am2);
123 
125  double ***vi() const { return vi_; }
126 
127  virtual double ***vx() const { return nullptr; }
128  virtual double ***vy() const { return nullptr; }
129  virtual double ***vz() const { return nullptr; }
130 
131  virtual double ***vxx() const { return nullptr; }
132  virtual double ***vxy() const { return nullptr; }
133  virtual double ***vxz() const { return nullptr; }
134  virtual double ***vyy() const { return nullptr; }
135  virtual double ***vyz() const { return nullptr; }
136  virtual double ***vzz() const { return nullptr; }
137 
139  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
141  virtual void compute_erf(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2, double zetam);
142 };
143 
149  protected:
150  double ***vx_;
151  double ***vy_;
152  double ***vz_;
153 
154  private:
155  // No default constructor();
157  // No assignment operator
159 
160  public:
161  ObaraSaikaTwoCenterVIDerivRecursion(int max_am1, int max_am2);
163 
164  double ***vx() const { return vx_; }
165  double ***vy() const { return vy_; }
166  double ***vz() const { return vz_; }
167 
168  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
169 };
170 
176  protected:
177  double ***vxx_;
178  double ***vxy_;
179  double ***vxz_;
180  double ***vyy_;
181  double ***vyz_;
182  double ***vzz_;
183 
184  private:
185  // No default constructor();
187  // No assignment operator
189 
190  public:
191  ObaraSaikaTwoCenterVIDeriv2Recursion(int max_am1, int max_am2);
193 
194  double ***vxx() const { return vxx_; }
195  double ***vxy() const { return vxy_; }
196  double ***vxz() const { return vxz_; }
197  double ***vyy() const { return vyy_; }
198  double ***vyz() const { return vyz_; }
199  double ***vzz() const { return vzz_; }
200 
201  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
202 };
203 
209  protected:
210  double ***q_;
211  double ***x_;
212  double ***y_;
213  double ***z_;
214 
215  private:
216  // No default constructor
218  // No assignment operator
220 
221  public:
222  ObaraSaikaTwoCenterElectricField(int max_am1, int max_am2);
224 
225  // We could also add the getter for the q_ (potential ints here)
226  double ***x() const { return x_; }
227  double ***y() const { return y_; }
228  double ***z() const { return z_; }
229 
230  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
231 };
232 
238  protected:
239  double ***exx_;
240  double ***eyy_;
241  double ***ezz_;
242  double ***exy_;
243  double ***exz_;
244  double ***eyz_;
245 
246  private:
247  // No default constructor
249  // No assignment operator
251 
252  public:
253  ObaraSaikaTwoCenterElectricFieldGradient(int max_am1, int max_am2);
255 
256  double ***ex() const { return x_; }
257  double ***ey() const { return y_; }
258  double ***ez() const { return z_; }
259 
260  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
261 };
262 
268  protected:
269  int max_am1_;
270  int max_am2_;
271  int size_;
272 
273  double ***q_;
274  double ***x_;
275  double ***y_;
276  double ***z_;
277  double ***xx_;
278  double ***xy_;
279  double ***xz_;
280  double ***yy_;
281  double ***yz_;
282  double ***zz_;
283  double ***xxx_;
284  double ***xxy_;
285  double ***xxz_;
286  double ***xyy_;
287  double ***xyz_;
288  double ***xzz_;
289  double ***yyy_;
290  double ***yyz_;
291  double ***yzz_;
292  double ***zzz_;
293 
294  // Forms Fm(U) from A20 (OS 1986)
295  void calculate_f(double *F, int n, double t);
296 
297  private:
298  // No default constructor
300  // No assignment operator
302 
303  public:
306  ObaraSaikaTwoCenterEFPRecursion(int max_am1, int max_am2);
308 
310  double ***q() const { return q_; }
311  double ***x() const { return x_; }
312  double ***y() const { return y_; }
313  double ***z() const { return z_; }
314  double ***xx() const { return xx_; }
315  double ***yy() const { return yy_; }
316  double ***zz() const { return zz_; }
317  double ***xy() const { return xy_; }
318  double ***xz() const { return xz_; }
319  double ***yz() const { return yz_; }
320  double ***xxx() const { return xxx_; }
321  double ***yyy() const { return yyy_; }
322  double ***zzz() const { return zzz_; }
323  double ***xxy() const { return xxy_; }
324  double ***xxz() const { return xxz_; }
325  double ***xyy() const { return xyy_; }
326  double ***yyz() const { return yyz_; }
327  double ***xzz() const { return xzz_; }
328  double ***yzz() const { return yzz_; }
329  double ***xyz() const { return xyz_; }
330 
332  virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
333 };
334 
339  int max_am1_;
340  int max_am2_;
341  int max_am3_;
342 
343  double ***x_;
344  double ***y_;
345  double ***z_;
346 
347  // No default constructor
349 
350  // No assignment operator
352 
353  public:
354  ObaraSaikaThreeCenterRecursion(int max_am1, int max_am2, int max_am3);
356 
358  double ***x() const { return x_; }
360  double ***y() const { return y_; }
362  double ***z() const { return z_; }
363 
365  void compute(double GA[3], double GB[3], double GC[3], double gammac, int amA, int amB, int amC);
366 };
367 
368 } // namespace psi
369 
370 #endif
int max_am1_
Definition: osrecur.h:103
virtual double *** vx() const
Definition: osrecur.h:127
double *** z_
Definition: osrecur.h:276
double *** z_
Definition: osrecur.h:80
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:243
ObaraSaikaTwoCenterVIDeriv2Recursion & operator=(const ObaraSaikaTwoCenterVIDeriv2Recursion &)
virtual ~ObaraSaikaTwoCenterVIRecursion()
Definition: osrecur.cc:1345
double *** vxz() const
Definition: osrecur.h:196
double *** xz() const
Definition: osrecur.h:318
virtual ~ObaraSaikaTwoCenterElectricFieldGradient()
Definition: osrecur.cc:2942
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:73
~ObaraSaikaTwoCenterMIRecursion()
Definition: osrecur.cc:90
double *** vy_
Definition: osrecur.h:151
void calculate_f(double *F, int n, double t)
Definition: osrecur.cc:1349
double *** y_
Definition: osrecur.h:344
~ObaraSaikaThreeCenterRecursion()
Definition: osrecur.cc:3308
double *** x_
Definition: osrecur.h:274
double *** vy() const
Definition: osrecur.h:165
double *** z_
Definition: osrecur.h:213
int max_am2_
Definition: osrecur.h:270
int max_am1_
Definition: osrecur.h:339
double *** x() const
Returns the x recursion matrix.
Definition: osrecur.h:358
double *** xyz_
Definition: osrecur.h:287
double *** ezz_
Definition: osrecur.h:241
int size_
Definition: osrecur.h:105
double *** q_
Definition: osrecur.h:210
Obara and Saika recursion object for computing potential derivatives.
Definition: osrecur.h:148
double *** x_
Definition: osrecur.h:78
double *** vyy_
Definition: osrecur.h:180
double *** x_
Definition: osrecur.h:343
double *** vxz_
Definition: osrecur.h:179
double *** xxz() const
Definition: osrecur.h:324
double *** zzz_
Definition: osrecur.h:292
double *** xxx_
Definition: osrecur.h:283
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:2627
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:325
double *** yyy_
Definition: osrecur.h:289
double *** y_
Definition: osrecur.h:212
double *** yzz_
Definition: osrecur.h:291
int zeta(const int a, const int m, const int n)
Definition: bend.cc:169
double *** y() const
Definition: osrecur.h:312
int max_am2_
Definition: osrecur.h:40
Obara and Saika recursion object for potential integrals, and electric derivatives thereof...
Definition: osrecur.h:267
int max_am1_
Definition: osrecur.h:74
double *** vzz_
Definition: osrecur.h:182
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:2053
double *** yyz_
Definition: osrecur.h:290
double *** yyz() const
Definition: osrecur.h:326
double ** x() const
Returns the x recursion matrix.
Definition: osrecur.h:58
double *** vxx() const
Definition: osrecur.h:194
virtual double *** vxy() const
Definition: osrecur.h:132
double ** y_
Definition: osrecur.h:43
double *** xxy_
Definition: osrecur.h:284
double *** x() const
Definition: osrecur.h:91
double *** yy() const
Definition: osrecur.h:315
double *** vi_
Definition: osrecur.h:107
Obara and Saika recursion object for computing electric field gradient integrals. ...
Definition: osrecur.h:237
virtual ~ObaraSaikaTwoCenterEFPRecursion()
Definition: osrecur.cc:200
double *** z_
Definition: osrecur.h:345
double *** zzz() const
Definition: osrecur.h:322
ObaraSaikaTwoCenterRecursion & operator=(const ObaraSaikaTwoCenterRecursion &)
double *** yz() const
Definition: osrecur.h:319
double *** vx() const
Definition: osrecur.h:164
ObaraSaikaThreeCenterRecursion & operator=(const ObaraSaikaThreeCenterRecursion &)
double *** z() const
Returns the z recursion matrix.
Definition: osrecur.h:362
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:2951
double *** x() const
Definition: osrecur.h:311
virtual double *** vxx() const
Definition: osrecur.h:131
double ** x_
Definition: osrecur.h:42
double *** yz_
Definition: osrecur.h:281
double *** xyy_
Definition: osrecur.h:286
virtual double *** vyy() const
Definition: osrecur.h:134
virtual double *** vzz() const
Definition: osrecur.h:136
virtual double *** vy() const
Definition: osrecur.h:128
double *** vzz() const
Definition: osrecur.h:199
double *** yzz() const
Definition: osrecur.h:328
double *** y_
Definition: osrecur.h:79
ObaraSaikaTwoCenterVIRecursion & operator=(const ObaraSaikaTwoCenterVIRecursion &)
double *** q() const
Returns the potential integral 3D matrix.
Definition: osrecur.h:310
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:316
virtual double *** vz() const
Definition: osrecur.h:129
double *** y() const
Definition: osrecur.h:227
double *** exy_
Definition: osrecur.h:242
double *** q_
Definition: osrecur.h:273
Obara and Saika recursion object for computing electric field integrals.
Definition: osrecur.h:208
virtual ~ObaraSaikaTwoCenterVIDerivRecursion()
Definition: osrecur.cc:1724
ObaraSaikaTwoCenterMIRecursion & operator=(const ObaraSaikaTwoCenterMIRecursion &)
double *** xy_
Definition: osrecur.h:278
double *** vyz_
Definition: osrecur.h:181
double *** y_
Definition: osrecur.h:275
ObaraSaikaTwoCenterElectricField & operator=(const ObaraSaikaTwoCenterElectricField &)
double *** vxy_
Definition: osrecur.h:178
double *** eyy_
Definition: osrecur.h:240
double *** y() const
Returns the y recursion matrix.
Definition: osrecur.h:360
double *** xyz() const
Definition: osrecur.h:329
void compute(double PA[3], double PB[3], double gamma, int am1, int am2)
Definition: osrecur.cc:96
double ** z_
Definition: osrecur.h:44
double *** ex() const
Definition: osrecur.h:256
int max_am2_
Definition: osrecur.h:340
Generic Obara and Saika recursion object.
Definition: osrecur.h:38
double *** xx_
Definition: osrecur.h:277
double *** x() const
Definition: osrecur.h:226
double *** eyz_
Definition: osrecur.h:244
double ** z() const
Returns the z recursion matrix.
Definition: osrecur.h:62
int max_am2_
Definition: osrecur.h:104
ObaraSaikaTwoCenterElectricFieldGradient & operator=(const ObaraSaikaTwoCenterElectricFieldGradient &)
double *** vyz() const
Definition: osrecur.h:198
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:75
double *** vxy() const
Definition: osrecur.h:195
double *** ey() const
Definition: osrecur.h:257
double *** z() const
Definition: osrecur.h:93
double *** yy_
Definition: osrecur.h:280
double *** vz_
Definition: osrecur.h:152
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:1730
double *** zz_
Definition: osrecur.h:282
double *** xx() const
Definition: osrecur.h:314
virtual ~ObaraSaikaTwoCenterElectricField()
Definition: osrecur.cc:2621
double *** yyy() const
Definition: osrecur.h:321
double *** xy() const
Definition: osrecur.h:317
int max_am3_
Definition: osrecur.h:341
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:101
double *** vyy() const
Definition: osrecur.h:197
int size_
Definition: osrecur.h:271
virtual ~ObaraSaikaTwoCenterVIDeriv2Recursion()
Definition: osrecur.cc:2044
double *** xxx() const
Definition: osrecur.h:320
double *** vx_
Definition: osrecur.h:150
int max_am1_
Definition: osrecur.h:269
double *** xzz_
Definition: osrecur.h:288
double *** xz_
Definition: osrecur.h:279
double *** vi() const
Returns the potential integral 3D matrix.
Definition: osrecur.h:125
double *** x_
Definition: osrecur.h:211
double *** exx_
Definition: osrecur.h:239
int max_m_
Definition: osrecur.h:76
double *** xxz_
Definition: osrecur.h:285
int max_am1_
Definition: osrecur.h:39
double *** vxx_
Definition: osrecur.h:177
double *** ez() const
Definition: osrecur.h:258
virtual double *** vxz() const
Definition: osrecur.h:133
double *** z() const
Definition: osrecur.h:228
double *** xzz() const
Definition: osrecur.h:327
double *** y() const
Definition: osrecur.h:92
double *** xxy() const
Definition: osrecur.h:323
virtual double *** vyz() const
Definition: osrecur.h:135
Definition: osrecur.h:338
double *** z() const
Definition: osrecur.h:313
double *** vz() const
Definition: osrecur.h:166