00001 00002 #ifdef __GNUC__ 00003 #pragma interface 00004 #endif 00005 00006 #ifndef _chemistry_qc_psi_psi_h 00007 #define _chemistry_qc_psi_psi_h 00008 00009 #include <chemistry/qc/wfn/wfn.h> 00010 #include <chemistry/qc/psi/psiinput.h> 00011 00012 class PsiWfn: public Wavefunction { 00013 protected: 00014 PSI_Input psi_in; 00015 void compute(); 00016 00017 virtual void write_input(int conv) = 0; 00018 virtual double read_energy() = 0; 00019 void write_basic_input(int conv, const char *wfn); 00020 public: 00021 PsiWfn(const Ref<KeyVal>&); 00022 PsiWfn(StateIn&); 00023 virtual ~PsiWfn(); 00024 void save_data_state(StateOut&); 00025 00026 double density(const SCVector3&); 00027 RefSymmSCMatrix density(); 00028 00029 void print(std::ostream&o=ExEnv::out()) const; 00030 00031 int spin_polarized(); 00032 int nelectron(); 00033 00034 int gradient_implemented() const; 00035 int value_implemented() const; 00036 }; 00037 00038 class PsiHF: public PsiWfn { 00039 protected: 00040 void write_input(int conv); 00041 double read_energy(); 00042 public: 00043 PsiHF(const Ref<KeyVal>&); 00044 PsiHF(StateIn&); 00045 ~PsiHF(); 00046 void save_data_state(StateOut&); 00047 }; 00048 00049 class PsiCCSD: public PsiWfn { 00050 protected: 00051 void write_input(int conv); 00052 double read_energy(); 00053 public: 00054 PsiCCSD(const Ref<KeyVal>&); 00055 PsiCCSD(StateIn&); 00056 ~PsiCCSD(); 00057 void save_data_state(StateOut&); 00058 }; 00059 00060 class PsiCCSD_T: public PsiWfn { 00061 protected: 00062 void write_input(int conv); 00063 double read_energy(); 00064 public: 00065 PsiCCSD_T(const Ref<KeyVal>&); 00066 PsiCCSD_T(StateIn&); 00067 ~PsiCCSD_T(); 00068 void save_data_state(StateOut&); 00069 }; 00070 00071 class PsiCCSDT: public PsiWfn { 00072 protected: 00073 void write_input(int conv); 00074 double read_energy(); 00075 public: 00076 PsiCCSDT(const Ref<KeyVal>&); 00077 PsiCCSDT(StateIn&); 00078 ~PsiCCSDT(); 00079 void save_data_state(StateOut&); 00080 int gradient_implemented() const; 00081 }; 00082 00083 class PsiCI: public PsiWfn { 00084 protected: 00085 void write_input(int conv); 00086 double read_energy(); 00087 public: 00088 PsiCI(const Ref<KeyVal>&); 00089 PsiCI(StateIn&); 00090 ~PsiCI(); 00091 void save_data_state(StateOut&); 00092 }; 00093 00094 #endif