00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
#ifndef _chemistry_qc_basis_sobasis_h
00029
#define _chemistry_qc_basis_sobasis_h
00030
00031
#ifdef __GNUC__
00032
#pragma interface
00033
#endif
00034
00035
#include <chemistry/qc/basis/basis.h>
00036
00037
namespace sc {
00038
00041 class SOTransformFunction {
00042
public:
00044 double coef;
00046 int aofunc;
00048 int sofunc;
00050 int irrep;
00051 };
00052
00056 class SOTransformShell {
00057
public:
00059 int aoshell;
00061 int nfunc;
00063 SOTransformFunction *
func;
00064
SOTransformShell();
00065 ~
SOTransformShell();
00067
void add_func(
int irrep,
double coef,
int aofunc,
int sofunc);
00068 };
00069
00073 class SOTransform {
00074
public:
00075
int naoshell_allocated;
00077 int naoshell;
00079 SOTransformShell *
aoshell;
00080
SOTransform();
00081 ~
SOTransform();
00082
void set_naoshell(
int n);
00084
void add_transform(
int aoshell,
int irrep,
00085
double coef,
int aofunc,
int sofunc);
00086 };
00087
00090 class SOBasis :
public RefCount {
00091
protected:
00092
Ref<GaussianBasisSet> basis_;
00093
int nshell_;
00094
int nirrep_;
00095
int *ncomp_;
00096
int **nfunc_;
00097
int *naofunc_;
00098
int **funcoff_;
00099
00100
int *nfunc_in_irrep_;
00101
int *func_;
00102
int *irrep_;
00103
int *func_within_irrep_;
00104
00105
SOTransform *trans_;
00106
00107
public:
00109
SOBasis(
const Ref<GaussianBasisSet> &,
const Ref<Integral>&);
00110 ~
SOBasis();
00111
00113 int nshell()
const {
return nshell_; }
00115 int nirrep()
const {
return nirrep_; }
00116
int ncomponent(
int iirrep)
const {
return ncomp_[iirrep]; }
00118 int nfunction_in_irrep(
int irrep)
const {
return nfunc_in_irrep_[irrep]; }
00120
int function_offset_for_irrep(
int irrep)
const;
00122
int nfunction(
int ishell)
const;
00125 int naofunction(
int ishell)
const {
return naofunc_[ishell]; }
00127
int nfunction(
int ishell,
int iirrep)
const;
00130
int max_nfunction_in_shell() const;
00134
int function_offset_within_shell(
int ishell,
int iirrep) const;
00135
00138
int function(
int ishell);
00139
00141
int irrep(
int ishell,
int ifunc) const;
00143
int function_within_irrep(
int ishell,
int ifunc) const;
00144
00146 const
SOTransform &trans(
int i)
const {
return trans_[i]; }
00147
00148
void print(std::ostream &o=ExEnv::out0())
const;
00149 };
00150
00151
00152
inline int
00153 SOBasis::function(
int ishell)
00154 {
00155
return func_[ishell];
00156 }
00157
00158
inline int
00159 SOBasis::irrep(
int ishell,
int ifunc)
const
00160
{
00161
return irrep_[func_[ishell]+ifunc];
00162 }
00163
00164
inline int
00165 SOBasis::function_offset_for_irrep(
int irrep)
const
00166
{
00167
int r = 0;
00168
for (
int i=0; i<irrep; i++) {
00169 r += nfunc_in_irrep_[i];
00170 }
00171
return r;
00172 }
00173
00174
inline int
00175 SOBasis::function_within_irrep(
int ishell,
int ifunc)
const
00176
{
00177
return func_within_irrep_[func_[ishell]+ifunc];
00178 }
00179
00180
inline int
00181 SOBasis::nfunction(
int ishell,
int iirrep)
const
00182
{
00183
return nfunc_[ishell][iirrep];
00184 }
00185
00186
inline int
00187 SOBasis::function_offset_within_shell(
int ishell,
int iirrep)
const
00188
{
00189
return funcoff_[ishell][iirrep];
00190 }
00191
00192 }
00193
00194
#endif
00195
00196
00197
00198
00199