MPQC  3.0.0-alpha
sointegral.h
1 //
2 // sointegral.h --- definition of the Integral class
3 //
4 // Copyright (C) 1998 Limit Point Systems, Inc.
5 //
6 // Author: Curtis Janssen <cljanss@limitpt.com>
7 // Maintainer: LPS
8 //
9 // This file is part of the SC Toolkit.
10 //
11 // The SC Toolkit is free software; you can redistribute it and/or modify
12 // it under the terms of the GNU Library General Public License as published by
13 // the Free Software Foundation; either version 2, or (at your option)
14 // any later version.
15 //
16 // The SC Toolkit 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 Library General Public License for more details.
20 //
21 // You should have received a copy of the GNU Library General Public License
22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24 //
25 // The U.S. Government is granted a limited license as per AL 91-7.
26 //
27 
28 #ifndef _chemistry_qc_basis_sointegral_h
29 #define _chemistry_qc_basis_sointegral_h
30 
31 #include <chemistry/qc/basis/integral.h>
32 #include <chemistry/qc/basis/tbint.h>
33 #include <chemistry/qc/basis/sobasis.h>
34 
35 namespace sc {
36 
39 class OneBodySOInt : public RefCount {
40  protected:
41  Ref<OneBodyInt> ob_;
42 
43  Ref<SOBasis> b1_;
44  Ref<SOBasis> b2_;
45 
46  double *buffer_;
47 
48  int only_totally_symmetric_;
49  public:
51  virtual ~OneBodySOInt();
52 
53  Ref<SOBasis> basis() const;
54  Ref<SOBasis> basis1() const;
55  Ref<SOBasis> basis2() const;
56 
58  const double * buffer() const { return buffer_; }
59 
63  virtual void compute_shell(int so_shell1, int so_shell2);
64 
65  // an index of -1 for a shell indicates any shell
66  //virtual int log2_shell_bound(int= -1,int= -1) = 0;
67 
68  virtual void reinitialize();
69 
70  int only_totally_symmetric() const { return only_totally_symmetric_; }
71  void set_only_totally_symmetric(int i) { only_totally_symmetric_ = i; }
72 };
73 
74 
77 class OneBodySODerivInt : public RefCount {
78  protected:
80 
81  Ref<SOBasis> b1_;
82  Ref<SOBasis> b2_;
83 
84  double *buffer_;
85 
86  int only_totally_symmetric_;
87  public:
89  virtual ~OneBodySODerivInt();
90 
91  Ref<SOBasis> basis() const;
92  Ref<SOBasis> basis1() const;
93  Ref<SOBasis> basis2() const;
94 
96  const double * buffer() const { return buffer_; }
97 
101  virtual void compute_shell(int so_shell1, int so_shell2);
102 
103  // an index of -1 for a shell indicates any shell
104  //virtual int log2_shell_bound(int= -1,int= -1) = 0;
105 
106  virtual void reinitialize();
107 
108  int only_totally_symmetric() const { return only_totally_symmetric_; }
109  void set_only_totally_symmetric(int i) { only_totally_symmetric_ = i; }
110 };
111 
114 class TwoBodySOInt : public RefCount {
115  protected:
116  Ref<TwoBodyInt> tb_;
117 
118  Ref<SOBasis> b1_;
119  Ref<SOBasis> b2_;
120  Ref<SOBasis> b3_;
121  Ref<SOBasis> b4_;
122 
123  double *buffer_;
124 
125  int redundant_;
126  int only_totally_symmetric_;
127  public:
128  TwoBodySOInt(const Ref<TwoBodyInt> &);
129  virtual ~TwoBodySOInt();
130 
131  Ref<SOBasis> basis() const;
132  Ref<SOBasis> basis1() const;
133  Ref<SOBasis> basis2() const;
134  Ref<SOBasis> basis3() const;
135  Ref<SOBasis> basis4() const;
136 
138  const double * buffer() const { return buffer_; }
139 
145  virtual void compute_shell(int so_shell1, int so_shell2, int so_shell3, int so_shell4);
146 
147  // an index of -1 for a shell indicates any shell
148  //virtual int log2_shell_bound(int= -1,int= -1,int= -1,int= -1) = 0;
149 
150  // if redundant is true, then keep redundant integrals in buffer_. The
151  // default is true.
152  int redundant() const { return redundant_; }
153  // cannot do nonredundant at the moment
154  //void set_redundant(int i) { redundant_ = i; }
155 
156  int only_totally_symmetric() const { return only_totally_symmetric_; }
157  void set_only_totally_symmetric(int i) { only_totally_symmetric_ = i; }
158 };
159 
162 class TwoBodySODerivInt : public RefCount {
163  protected:
165 
166  Ref<SOBasis> b1_;
167  Ref<SOBasis> b2_;
168  Ref<SOBasis> b3_;
169  Ref<SOBasis> b4_;
170 
171  double *buffer_;
172 
173  int redundant_;
174  int only_totally_symmetric_;
175  public:
177  virtual ~TwoBodySODerivInt();
178 
179  Ref<SOBasis> basis() const;
180  Ref<SOBasis> basis1() const;
181  Ref<SOBasis> basis2() const;
182  Ref<SOBasis> basis3() const;
183  Ref<SOBasis> basis4() const;
184 
186  const double * buffer() const { return buffer_; }
187 
193  virtual void compute_shell(int so_shell1, int so_shell2, int so_shell3, int so_shell4);
194 
195  // an index of -1 for a shell indicates any shell
196  //virtual int log2_shell_bound(int= -1,int= -1,int= -1,int= -1) = 0;
197 
198  // if redundant is true, then keep redundant integrals in buffer_. The
199  // default is true.
200  int redundant() const { return redundant_; }
201  // cannot do nonredundant at the moment
202  //void set_redundant(int i) { redundant_ = i; }
203 
204  int only_totally_symmetric() const { return only_totally_symmetric_; }
205  void set_only_totally_symmetric(int i) { only_totally_symmetric_ = i; }
206 };
207 
208 }
209 
210 #endif
211 
212 // Local Variables:
213 // mode: c++
214 // c-file-style: "CLJ"
215 // End:
sc::OneBodySOInt
OneBodySOInt computes two-center one-electron integrals in a symmetry-adapted basis.
Definition: sointegral.h:39
sc::OneBodySOInt::compute_shell
virtual void compute_shell(int so_shell1, int so_shell2)
computes an SO shell doublet of integrals
sc::TwoBodySODerivInt
TwoBodySODerivInt computes four-center two-electron derivative integrals in a symmetry-adapted basis.
Definition: sointegral.h:162
sc::Ref
A template class that maintains references counts.
Definition: ref.h:361
sc::OneBodySOInt::buffer
const double * buffer() const
TODO document OneBodySOInt::buffer()
Definition: sointegral.h:58
sc::OneBodySODerivInt::compute_shell
virtual void compute_shell(int so_shell1, int so_shell2)
computes an SO shell doublet of integrals
sc::OneBodySODerivInt
OneBodySODerivInt computes two-center one-electron integrals in a symmetry-adapted basis.
Definition: sointegral.h:77
sc::TwoBodySODerivInt::buffer
const double * buffer() const
TODO document TwoBodySODerivInt::buffer()
Definition: sointegral.h:186
sc::TwoBodySOInt::compute_shell
virtual void compute_shell(int so_shell1, int so_shell2, int so_shell3, int so_shell4)
computes an SO shell quartet of integrals
sc::TwoBodySOInt::buffer
const double * buffer() const
TODO document TwoBodySOInt::buffer()
Definition: sointegral.h:138
sc::RefCount
The base class for all reference counted objects.
Definition: ref.h:192
sc::OneBodySODerivInt::buffer
const double * buffer() const
TODO document OneBodySODerivInt::buffer()
Definition: sointegral.h:96
sc::TwoBodySOInt
TwoBodySOInt computes four-center two-electron integrals in a symmetry-adapted basis.
Definition: sointegral.h:114
sc::TwoBodySODerivInt::compute_shell
virtual void compute_shell(int so_shell1, int so_shell2, int so_shell3, int so_shell4)
computes an SO shell quartet of derivative integrals
sc
Contains all MPQC code up to version 3.
Definition: mpqcin.h:14

Generated at Sun Jan 26 2020 23:23:57 for MPQC 3.0.0-alpha using the documentation package Doxygen 1.8.16.