MPQC  2.3.1
sobasis.h
1 //
2 // sobasis.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_sobasis_h
29 #define _chemistry_qc_basis_sobasis_h
30 
31 #ifdef __GNUC__
32 #pragma interface
33 #endif
34 
35 #include <chemistry/qc/basis/basis.h>
36 
37 namespace sc {
38 
42  public:
44  double coef;
46  int aofunc;
48  int sofunc;
50  int irrep;
51 };
52 
57  public:
59  int aoshell;
61  int nfunc;
67  void add_func(int irrep, double coef, int aofunc, int sofunc);
68 };
69 
73 class SOTransform {
74  public:
75  int naoshell_allocated;
77  int naoshell;
80  SOTransform();
81  ~SOTransform();
82  void set_naoshell(int n);
84  void add_transform(int aoshell, int irrep,
85  double coef, int aofunc, int sofunc);
86 };
87 
90 class SOBasis : public RefCount {
91  protected:
92  Ref<GaussianBasisSet> basis_;
93  int nshell_;
94  int nirrep_;
95  int *ncomp_;
96  int **nfunc_;
97  int *naofunc_;
98  int **funcoff_;
99 
100  int *nfunc_in_irrep_;
101  int *func_;
102  int *irrep_;
103  int *func_within_irrep_;
104 
105  SOTransform *trans_;
106 
107  public:
110  ~SOBasis();
111 
113  int nshell() const { return nshell_; }
115  int nirrep() const { return nirrep_; }
116  int ncomponent(int iirrep) const { return ncomp_[iirrep]; }
118  int nfunction_in_irrep(int irrep) const { return nfunc_in_irrep_[irrep]; }
120  int function_offset_for_irrep(int irrep) const;
122  int nfunction(int ishell) const;
125  int naofunction(int ishell) const { return naofunc_[ishell]; }
127  int nfunction(int ishell, int iirrep) const;
130  int max_nfunction_in_shell() const;
134  int function_offset_within_shell(int ishell, int iirrep) const;
135 
138  int function(int ishell);
139 
141  int irrep(int ishell, int ifunc) const;
143  int function_within_irrep(int ishell, int ifunc) const;
144 
146  const SOTransform &trans(int i) const { return trans_[i]; }
147 
148  void print(std::ostream &o=ExEnv::out0()) const;
149 };
150 
151 
152 inline int
153 SOBasis::function(int ishell)
154 {
155  return func_[ishell];
156 }
157 
158 inline int
159 SOBasis::irrep(int ishell, int ifunc) const
160 {
161  return irrep_[func_[ishell]+ifunc];
162 }
163 
164 inline int
166 {
167  int r = 0;
168  for (int i=0; i<irrep; i++) {
169  r += nfunc_in_irrep_[i];
170  }
171  return r;
172 }
173 
174 inline int
175 SOBasis::function_within_irrep(int ishell, int ifunc) const
176 {
177  return func_within_irrep_[func_[ishell]+ifunc];
178 }
179 
180 inline int
181 SOBasis::nfunction(int ishell, int iirrep) const
182 {
183  return nfunc_[ishell][iirrep];
184 }
185 
186 inline int
187 SOBasis::function_offset_within_shell(int ishell, int iirrep) const
188 {
189  return funcoff_[ishell][iirrep];
190 }
191 
192 }
193 
194 #endif
195 
196 // Local Variables:
197 // mode: c++
198 // c-file-style: "CLJ"
199 // End:
sc::SOTransformShell::aoshell
int aoshell
The number of the AO shell from which these functions come.
Definition: sobasis.h:59
sc::SOBasis::naofunction
int naofunction(int ishell) const
Return the number of functions in the AO shell that make up the given SO shell.
Definition: sobasis.h:125
sc::SOBasis::function_offset_within_shell
int function_offset_within_shell(int ishell, int iirrep) const
Normally, SO shell numbering starts at zero within each irrep.
Definition: sobasis.h:187
sc::SOTransformFunction::irrep
int irrep
The SO function's irrep.
Definition: sobasis.h:50
sc::SOTransformShell::nfunc
int nfunc
The number of AO/SO function pairs contributing.
Definition: sobasis.h:61
sc::SOBasis::function_offset_for_irrep
int function_offset_for_irrep(int irrep) const
Return the offset for the first function of the given irrep.
Definition: sobasis.h:165
sc::SOTransform::naoshell
int naoshell
The number of AO shells that make up this SO shell.
Definition: sobasis.h:77
sc::Ref< GaussianBasisSet >
sc::SOBasis::nfunction_in_irrep
int nfunction_in_irrep(int irrep) const
Return the number of functions in the given irrep.
Definition: sobasis.h:118
sc::SOTransform::add_transform
void add_transform(int aoshell, int irrep, double coef, int aofunc, int sofunc)
Adds another term to the transform.
sc::SOBasis::irrep
int irrep(int ishell, int ifunc) const
Convert SO shell and function number within shell to irrep.
Definition: sobasis.h:159
sc::SOTransform::aoshell
SOTransformShell * aoshell
The SOTransformShell object for each AO.
Definition: sobasis.h:79
sc::SOTransformFunction::aofunc
int aofunc
The AO function number.
Definition: sobasis.h:46
sc::SOBasis::function_within_irrep
int function_within_irrep(int ishell, int ifunc) const
Convert SO shell and function number to number within irrep.
Definition: sobasis.h:175
sc::SOBasis::function
int function(int ishell)
Convert the SO shell number to the overall number of the first function within that shell.
Definition: sobasis.h:153
sc::SOTransformFunction
SOTransformShell describes how an AO function contributes to an SO function in a particular SO shell.
Definition: sobasis.h:41
sc::SOTransform
SOTransform maintains a list of AO shells that are be used to compute the SO.
Definition: sobasis.h:73
sc::SOTransformShell
SOTransformShell maintains a list of AO functions contribute to an SO function in a particular SO she...
Definition: sobasis.h:56
sc::SOBasis::nfunction
int nfunction(int ishell) const
Return the number of functions in the given shell.
sc::SOBasis::nshell
int nshell() const
Return the number of shells.
Definition: sobasis.h:113
sc::SOBasis::trans
const SOTransform & trans(int i) const
Return the SOTransform object for the given shell.
Definition: sobasis.h:146
sc::SOBasis::nirrep
int nirrep() const
Return the number of irreps.
Definition: sobasis.h:115
sc::SOTransformShell::func
SOTransformFunction * func
The array of SOTransformFunction objects describing the transform.
Definition: sobasis.h:63
sc::SOTransformFunction::sofunc
int sofunc
The SO function number.
Definition: sobasis.h:48
sc::SOBasis::SOBasis
SOBasis(const Ref< GaussianBasisSet > &, const Ref< Integral > &)
Create an SOBasis object given a GaussianBasisSet and Integral objects.
sc::ExEnv::out0
static std::ostream & out0()
Return an ostream that writes from node 0.
sc::SOBasis
A SOBasis object describes the transformation from an atomic orbital basis to a symmetry orbital basi...
Definition: sobasis.h:90
sc::SOTransformShell::add_func
void add_func(int irrep, double coef, int aofunc, int sofunc)
Add another function to the transform.
sc::RefCount
The base class for all reference counted objects.
Definition: ref.h:194
sc::SOBasis::max_nfunction_in_shell
int max_nfunction_in_shell() const
Returns the maximum number of functions in a shell (summed over all irreps)
sc::SOTransformFunction::coef
double coef
The coefficient of the AO.
Definition: sobasis.h:44

Generated at Sun Jan 26 2020 23:33:04 for MPQC 2.3.1 using the documentation package Doxygen 1.8.16.