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 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 psi4_libmints_erd_eri_h_
30 #define psi4_libmints_erd_eri_h_
31 
32 #ifdef USING_erd
33 
34 #include "psi4/libmints/twobody.h"
35 
36 typedef int F_INT;
37 typedef int F_BOOL;
38 
39 namespace psi{
40 
41 
42 class IntegralFactory;
43 class AOShellCombinationsIterator;
44 
45 class ERDTwoElectronInt : public TwoBodyAOInt
46 {
47 
48 
49 protected:
51  double *new_cc_1_;
53  double *new_cc_2_;
55  double *new_cc_3_;
57  double *new_cc_4_;
59  double *alpha_1_;
61  double *alpha_2_;
63  double *alpha_3_;
65  double *alpha_4_;
67  double *xyz_1_;
69  double *xyz_2_;
71  double *xyz_3_;
73  double *xyz_4_;
75  double *cc_;
77  double *alpha_;
78 
80  size_t d_buffer_size_;
82  size_t i_buffer_size_;
84  int *pgto_offsets_1_;
86  int *pgto_offsets_2_;
88  int *pgto_offsets_3_;
90  int *pgto_offsets_4_;
92  int *npgto_1_;
94  int *npgto_2_;
96  int *npgto_3_;
98  int *npgto_4_;
100  int *am_1_;
102  int *am_2_;
104  int *am_3_;
106  int *am_4_;
108  F_INT *iscratch_;
110  double *dscratch_;
112  F_INT buffer_offset_;
114  F_INT ccbeg_[4];
116  F_INT ccend_[4];
118  F_BOOL screen_;
120  F_BOOL spheric_;
122  bool has_puream_;
124  bool same_bs_;
125 
126  void normalize_basis();
127 public:
128  ERDTwoElectronInt(const IntegralFactory* integral, int deriv=0, bool use_shell_pairs=false);
129  virtual ~ERDTwoElectronInt();
130  void compute_scratch_size();
131  virtual size_t compute_shell(const psi::AOShellCombinationsIterator&);
132  virtual size_t compute_shell(int, int, int, int);
133  virtual size_t compute_shell_deriv1(int, int, int, int);
134  virtual size_t compute_shell_deriv2(int, int, int, int);
135 };
136 
137 class ERDERI : public ERDTwoElectronInt
138 {
139 public:
140  ERDERI(const IntegralFactory* integral, int deriv=0, bool use_shell_pairs=false);
141  virtual ~ERDERI();
142 };
143 
144 }//Namespace
145 #endif // USING_erd
146 #endif // header guard
Definition: integral.h:227