Main Page | Class Hierarchy | Class List | File List | Class Members | Related Pages

gaussbas.h

00001 // 00002 // gaussbas.h 00003 // 00004 // Copyright (C) 1996 Limit Point Systems, Inc. 00005 // 00006 // Author: Curtis Janssen <cljanss@limitpt.com> 00007 // Maintainer: LPS 00008 // 00009 // This file is part of the SC Toolkit. 00010 // 00011 // The SC Toolkit is free software; you can redistribute it and/or modify 00012 // it under the terms of the GNU Library General Public License as published by 00013 // the Free Software Foundation; either version 2, or (at your option) 00014 // any later version. 00015 // 00016 // The SC Toolkit is distributed in the hope that it will be useful, 00017 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 // GNU Library General Public License for more details. 00020 // 00021 // You should have received a copy of the GNU Library General Public License 00022 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to 00023 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 00024 // 00025 // The U.S. Government is granted a limited license as per AL 91-7. 00026 // 00027 00028 #ifndef _chemistry_qc_basis_gaussbas_h 00029 #define _chemistry_qc_basis_gaussbas_h 00030 00031 #ifdef __GNUC__ 00032 #pragma interface 00033 #endif 00034 00035 #include <vector> 00036 #include <iostream> 00037 00038 #include <util/state/state.h> 00039 #include <util/keyval/keyval.h> 00040 #include <math/scmat/matrix.h> 00041 #include <math/scmat/vector3.h> 00042 #include <chemistry/molecule/molecule.h> 00043 00044 namespace sc { 00045 00046 class GaussianShell; 00047 class BasisFileSet; 00048 class Integral; 00049 00050 class CartesianIter; 00051 class SphericalTransformIter; 00052 00114 class GaussianBasisSet: public SavableState 00115 { 00116 private: 00117 char* name_; 00118 GaussianShell** shell_; 00119 std::vector<int> shell_to_function_; 00120 std::vector<int> function_to_shell_; 00121 00122 Ref<Molecule> molecule_; 00123 00124 Ref<SCMatrixKit> matrixkit_; 00125 Ref<SCMatrixKit> so_matrixkit_; 00126 RefSCDimension basisdim_; 00127 00128 int ncenter_; 00129 00130 std::vector<int> shell_to_center_; 00131 std::vector<int> shell_to_primitive_; 00132 std::vector<int> center_to_shell_; 00133 std::vector<int> center_to_nshell_; 00134 std::vector<int> center_to_nbasis_; 00135 00136 int nshell_; 00137 int nbasis_; 00138 int nprim_; 00139 00140 void recursively_get_shell(int&,Ref<KeyVal>&, 00141 const char*,const char*,BasisFileSet&, 00142 int,int,int); 00143 00144 void init(Ref<Molecule>&,Ref<KeyVal>&, 00145 BasisFileSet&, 00146 int have_userkeyval, 00147 int pure); 00148 void init2(int skip_ghosts=0); 00149 00150 protected: 00151 GaussianBasisSet(const GaussianBasisSet&); 00152 virtual void set_matrixkit(const Ref<SCMatrixKit>&); 00153 00154 public: 00156 class ValueData { 00157 protected: 00158 CartesianIter **civec_; 00159 SphericalTransformIter **sivec_; 00160 int maxam_; 00161 public: 00162 ValueData(const Ref<GaussianBasisSet> &, const Ref<Integral> &); 00163 ~ValueData(); 00164 CartesianIter **civec() { return civec_; } 00165 SphericalTransformIter **sivec() { return sivec_; } 00166 }; 00167 00278 GaussianBasisSet(const Ref<KeyVal>&); 00279 GaussianBasisSet(StateIn&); 00280 virtual ~GaussianBasisSet(); 00281 00282 void save_data_state(StateOut&); 00283 00285 const char* name() const { return name_; } 00286 00288 Ref<Molecule> molecule() const { return molecule_; } 00290 Ref<SCMatrixKit> matrixkit() { return matrixkit_; } 00292 Ref<SCMatrixKit> so_matrixkit() { return so_matrixkit_; } 00294 RefSCDimension basisdim() { return basisdim_; } 00295 00297 int ncenter() const; 00299 int nshell() const { return nshell_; } 00301 int nshell_on_center(int icenter) const; 00304 int shell_on_center(int icenter, int shell) const; 00306 int shell_to_center(int ishell) const { return shell_to_center_[ishell]; } 00308 int shell_to_primitive(int ishell) const {return shell_to_primitive_[ishell]; } 00310 int nbasis() const { return nbasis_; } 00312 int nbasis_on_center(int icenter) const; 00314 int nprimitive() const { return nprim_; } 00315 00317 int max_nfunction_in_shell() const; 00320 int max_ncartesian_in_shell(int aminc=0) const; 00322 int max_nprimitive_in_shell() const; 00324 int max_angular_momentum() const; 00326 int max_ncontraction() const; 00329 int max_am_for_contraction(int con) const; 00331 int max_cartesian() const; 00332 00334 int shell_to_function(int i) const { return shell_to_function_[i]; } 00336 int function_to_shell(int i) const; 00337 00339 const GaussianShell& operator()(int i) const { return *shell_[i]; } 00341 GaussianShell& operator()(int i) { return *shell_[i]; } 00343 const GaussianShell& operator[](int i) const { return *shell_[i]; } 00345 GaussianShell& operator[](int i) { return *shell_[i]; } 00347 const GaussianShell& shell(int i) const { return *shell_[i]; } 00349 GaussianShell& shell(int i) { return *shell_[i]; } 00350 00352 const GaussianShell& operator()(int icenter,int ishell) const; 00354 GaussianShell& operator()(int icenter,int ishell); 00356 const GaussianShell& shell(int i,int j) const { return operator()(i,j); } 00358 GaussianShell& shell(int i,int j) { return operator()(i,j); } 00359 00362 double r(int icenter,int xyz) const; 00363 00366 int values(const SCVector3& r, ValueData *, double* basis_values) const; 00371 int grad_values(const SCVector3& r, ValueData *, 00372 double*g_values,double* basis_values=0) const; 00377 int hessian_values(const SCVector3& r, ValueData *, double *h_values, 00378 double*g_values=0,double* basis_values=0) const; 00381 int shell_values(const SCVector3& r, int sh, 00382 ValueData *, double* basis_values) const; 00386 int grad_shell_values(const SCVector3& r, int sh, 00387 ValueData *, 00388 double*g_values, double* basis_values=0) const; 00392 int hessian_shell_values(const SCVector3& r, int sh, 00393 ValueData *, double *h_values, 00394 double*g_values=0,double* basis_values=0) const; 00395 00397 int equiv(const Ref<GaussianBasisSet> &b); 00398 00400 void print_brief(std::ostream& =ExEnv::out0()) const; 00402 void print(std::ostream& =ExEnv::out0()) const; 00403 }; 00404 00405 } 00406 00407 #endif 00408 00409 // Local Variables: 00410 // mode: c++ 00411 // c-file-style: "CLJ" 00412 // End:

Generated at Sat Dec 18 15:14:21 2004 for MPQC 2.2.3 using the documentation package Doxygen 1.3.7-20040617.