Psi4
erd_eri.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 psi4_libmints_erd_eri_h_
29 #define psi4_libmints_erd_eri_h_
30 
31 #ifdef USING_erd
32 
33 #include "psi4/libmints/twobody.h"
34 
35 typedef int F_INT;
36 typedef int F_BOOL;
37 
38 namespace psi{
39 
40 
41 class IntegralFactory;
42 class AOShellCombinationsIterator;
43 
44 class ERDTwoElectronInt : public TwoBodyAOInt
45 {
46 
47 
48 protected:
50  double *new_cc_1_;
52  double *new_cc_2_;
54  double *new_cc_3_;
56  double *new_cc_4_;
58  double *alpha_1_;
60  double *alpha_2_;
62  double *alpha_3_;
64  double *alpha_4_;
66  double *xyz_1_;
68  double *xyz_2_;
70  double *xyz_3_;
72  double *xyz_4_;
74  double *cc_;
76  double *alpha_;
77 
79  size_t d_buffer_size_;
81  size_t i_buffer_size_;
83  int *pgto_offsets_1_;
85  int *pgto_offsets_2_;
87  int *pgto_offsets_3_;
89  int *pgto_offsets_4_;
91  int *npgto_1_;
93  int *npgto_2_;
95  int *npgto_3_;
97  int *npgto_4_;
99  int *am_1_;
101  int *am_2_;
103  int *am_3_;
105  int *am_4_;
107  F_INT *iscratch_;
109  double *dscratch_;
111  F_INT buffer_offset_;
113  F_INT ccbeg_[4];
115  F_INT ccend_[4];
117  F_BOOL screen_;
119  F_BOOL spheric_;
121  bool has_puream_;
123  bool same_bs_;
124 
125  void normalize_basis();
126 public:
127  ERDTwoElectronInt(const IntegralFactory* integral, int deriv=0, bool use_shell_pairs=false);
128  virtual ~ERDTwoElectronInt();
129  void compute_scratch_size();
130  virtual size_t compute_shell(const psi::AOShellCombinationsIterator&);
131  virtual size_t compute_shell(int, int, int, int);
132  virtual size_t compute_shell_deriv1(int, int, int, int);
133  virtual size_t compute_shell_deriv2(int, int, int, int);
134 };
135 
136 class ERDERI : public ERDTwoElectronInt
137 {
138 public:
139  ERDERI(const IntegralFactory* integral, int deriv=0, bool use_shell_pairs=false);
140  virtual ~ERDERI();
141 };
142 
143 }//Namespace
144 #endif // USING_erd
145 #endif // header guard
Definition: integral.h:228