|
psiwfn.h00001 00002 #ifdef __GNUC__ 00003 #pragma interface 00004 #endif 00005 00006 #ifndef _chemistry_qc_psi_psiwfn_h 00007 #define _chemistry_qc_psi_psiwfn_h 00008 00009 #include <chemistry/qc/wfn/wfn.h> 00010 #include <chemistry/qc/psi/psiexenv.h> 00011 00012 namespace sc { 00013 00015 00020 class PsiWavefunction: public Wavefunction { 00021 00022 Ref<PsiExEnv> exenv_; 00023 00024 int* read_occ(const Ref<KeyVal> &keyval, const char *name, int nirrep); 00025 00026 protected: 00027 int nirrep_; 00028 int *docc_; 00029 int *socc_; 00030 int *frozen_docc_; 00031 int *frozen_uocc_; 00032 int multp_; 00033 int charge_; 00034 char *memory_; 00036 virtual void write_input(int conv) =0; 00037 00038 public: 00053 PsiWavefunction(const Ref<KeyVal>&); 00054 PsiWavefunction(StateIn&); 00055 ~PsiWavefunction(); 00056 00057 void save_data_state(StateOut&); 00058 00061 virtual void write_basic_input(int conv); 00062 void compute(); 00063 void print(std::ostream&o=ExEnv::out0()) const; 00064 RefSymmSCMatrix density(); 00065 int nelectron(); 00066 00068 Ref<PsiExEnv> get_psi_exenv() const { return exenv_; }; 00070 Ref<PsiInput> get_psi_input() const { return exenv_->get_psi_input(); }; 00071 }; 00072 00075 00076 class PsiSCF: public PsiWavefunction { 00077 public: 00078 PsiSCF(const Ref<KeyVal>&); 00079 PsiSCF(StateIn&); 00080 ~PsiSCF(); 00081 void save_data_state(StateOut&); 00082 00083 enum RefType {rhf, hsoshf, uhf}; 00085 virtual PsiSCF::RefType reftype() const =0; 00086 }; 00087 00090 00091 class PsiCLHF: public PsiSCF { 00092 protected: 00093 void write_input(int conv); 00094 public: 00095 PsiCLHF(const Ref<KeyVal>&); 00096 PsiCLHF(StateIn&); 00097 ~PsiCLHF(); 00098 00099 void write_basic_input(int conv); 00100 int spin_polarized() { return 0;}; 00101 int gradient_implemented() const { return 1;}; 00102 PsiSCF::RefType reftype() const { return rhf;}; 00103 }; 00104 00107 00108 class PsiHSOSHF: public PsiSCF { 00109 protected: 00110 void write_input(int conv); 00111 public: 00112 PsiHSOSHF(const Ref<KeyVal>&); 00113 PsiHSOSHF(StateIn&); 00114 ~PsiHSOSHF(); 00115 00116 void write_basic_input(int conv); 00117 int spin_polarized() { return 0;}; 00118 int gradient_implemented() const { return 1;}; 00119 PsiSCF::RefType reftype() const { return hsoshf;}; 00120 }; 00121 00124 00125 class PsiUHF: public PsiSCF { 00126 protected: 00127 void write_input(int conv); 00128 public: 00129 PsiUHF(const Ref<KeyVal>&); 00130 PsiUHF(StateIn&); 00131 ~PsiUHF(); 00132 00133 void write_basic_input(int conv); 00134 int spin_polarized() { return 1;}; 00135 int gradient_implemented() const { return 1;}; 00136 PsiSCF::RefType reftype() const { return uhf;}; 00137 }; 00138 00141 00142 class PsiCCSD: public PsiWavefunction { 00143 Ref<PsiSCF> reference_; 00144 protected: 00145 void write_input(int conv); 00146 public: 00147 PsiCCSD(const Ref<KeyVal>&); 00148 PsiCCSD(StateIn&); 00149 ~PsiCCSD(); 00150 void save_data_state(StateOut&); 00151 int spin_polarized() { return reference_->spin_polarized();}; 00152 int gradient_implemented() const; 00153 }; 00154 00157 00158 class PsiCCSD_T: public PsiWavefunction { 00159 Ref<PsiSCF> reference_; 00160 protected: 00161 void write_input(int conv); 00162 public: 00163 PsiCCSD_T(const Ref<KeyVal>&); 00164 PsiCCSD_T(StateIn&); 00165 ~PsiCCSD_T(); 00166 00167 void save_data_state(StateOut&); 00168 int spin_polarized() { return reference_->spin_polarized();}; 00169 int gradient_implemented() const; 00170 }; 00171 00172 } 00173 00174 #endif Generated at Fri Jan 10 08:14:09 2003 for MPQC 2.1.3 using the documentation package Doxygen 1.2.14. |