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