00001 #ifndef _psi_src_lib_libmints_basisset_h_
00002 #define _psi_src_lib_libmints_basisset_h_
00003
00004 #include <cstdio>
00005 #include <libchkpt/chkpt.hpp>
00006
00007 #include <libmints/molecule.h>
00008 #include <libmints/gshell.h>
00009 #include <libmints/sobasis.h>
00010 #include <libmints/integral.h>
00011
00012 #include <psi4-dec.h>
00013
00014 namespace psi {
00015
00024 class BasisSet
00025 {
00027 int nprimitives_;
00029 int nshells_;
00031 int nao_;
00033 int nbf_;
00035 int max_am_;
00037 int max_nprimitives_;
00039 int *shell_first_basis_function_;
00041 int *shell_first_ao_;
00043 int *shell_center_;
00045 int max_stability_index_;
00047 double **uso2ao_;
00048 shared_ptr<SimpleMatrix> simple_mat_uso2ao_;
00049 double **uso2bf_;
00050 shared_ptr<SimpleMatrix> simple_mat_uso2bf_;
00051
00053 bool puream_;
00054
00056 std::vector<shared_ptr<GaussianShell> > shells_;
00058 shared_ptr<Molecule> molecule_;
00060 shared_ptr<SOTransform> sotransform_;
00062 std::vector<SphericalTransform> sphericaltransforms_;
00063
00065 BasisSet();
00067 BasisSet& operator=(const BasisSet&);
00068
00070 void initialize_shells(shared_ptr<psi::Chkpt> chkpt, std::string& basiskey);
00071
00072 public:
00073
00079 BasisSet(shared_ptr<psi::Chkpt> chkpt, std::string basiskey = "");
00080
00082 BasisSet(const BasisSet&);
00084 ~BasisSet();
00085
00089 int nprimitive() const { return nprimitives_; }
00095 int max_nprimitive() const { return max_nprimitives_; }
00099 int nshell() const { return nshells_; }
00103 int nao() const { return nao_; }
00107 int nbf() const { return nbf_; }
00111 int max_am() const { return max_am_; }
00115 bool has_puream() const { return puream_; }
00119 shared_ptr<Molecule> molecule() const { return molecule_; }
00121 int max_stability_index() const { return max_stability_index_; }
00126 int shell_to_function(int i) const { return shell_first_ao_[i]; }
00131 int shell_to_basis_function(int i) const { return shell_first_basis_function_[i]; }
00132
00137 shared_ptr<GaussianShell> shell(int si) const;
00138
00143 SOTransformShell* so_transform(int i) { return sotransform_->aoshell(i); }
00144
00149 SphericalTransform& spherical_transform(int am) { return sphericaltransforms_[am]; }
00150
00152 void print(FILE *out = outfile) const;
00153
00157 const shared_ptr<SimpleMatrix> uso_to_ao() const { return simple_mat_uso2ao_; }
00158
00162 const shared_ptr<SimpleMatrix> uso_to_bf() const { return simple_mat_uso2bf_; }
00163
00170 static shared_ptr<BasisSet> zero_basis_set();
00171 };
00172
00173 }
00174
00175 #endif