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 #ifdef __GNUC__
00029 #pragma interface
00030 #endif
00031
00032 #ifndef _chemistry_qc_psi_psicc_h
00033 #define _chemistry_qc_psi_psicc_h
00034
00035 #include <chemistry/qc/psi/psiwfn.h>
00036 #include <chemistry/qc/mbptr12/spin.h>
00037
00038 namespace sc {
00039
00042
00043 class PsiCC : public PsiCorrWavefunction {
00044 RefSCMatrix T1_[NSpinCases1];
00045 RefSCMatrix T2_[NSpinCases2];
00046 RefSCMatrix Tau2_[NSpinCases2];
00047 RefSCMatrix Lambda1_[NSpinCases1];
00048 RefSCMatrix Lambda2_[NSpinCases2];
00049
00050 protected:
00051
00052 static const bool use_sparsemap_only_ = false;
00053
00055 static bool test_t2_phases_;
00056 static void do_test_t2_phases() {
00057 test_t2_phases_ = true;
00058 }
00059
00061 RefSCMatrix T1(SpinCase1 spin, const std::string& L);
00063 RefSCMatrix T2(SpinCase2 spin, const std::string& L);
00064
00066 RefSCMatrix
00067 transform_T1(
00068 const SparseMOIndexMap& occ_act_map,
00069 const SparseMOIndexMap& vir_act_map,
00070 const RefSCMatrix& T1,
00071 const Ref<SCMatrixKit>& kit = SCMatrixKit::default_matrixkit()) const;
00073 RefSCMatrix
00074 transform_T2(
00075 const SparseMOIndexMap& occ1_act_map,
00076 const SparseMOIndexMap& occ2_act_map,
00077 const SparseMOIndexMap& vir1_act_map,
00078 const SparseMOIndexMap& vir2_act_map,
00079 const RefSCMatrix& T2,
00080 const Ref<SCMatrixKit>& kit = SCMatrixKit::default_matrixkit()) const;
00082 RefSCMatrix
00083 transform_T1(
00084 const RefSCMatrix& occ_act_tform,
00085 const RefSCMatrix& vir_act_tform,
00086 const RefSCMatrix& T1,
00087 const Ref<SCMatrixKit>& kit = SCMatrixKit::default_matrixkit()) const;
00089 RefSCMatrix
00090 transform_T2(
00091 const RefSCMatrix& occ1_act_tform,
00092 const RefSCMatrix& occ2_act_tform,
00093 const RefSCMatrix& vir1_act_tform,
00094 const RefSCMatrix& vir2_act_tform,
00095 const RefSCMatrix& T2,
00096 const Ref<SCMatrixKit>& kit = SCMatrixKit::default_matrixkit()) const;
00098 void compare_T2(const RefSCMatrix& T2, const RefSCMatrix& T2_ref, SpinCase2 spin12,
00099 unsigned int no1, unsigned int no2, unsigned int nv1,
00100 unsigned int nv2, double zero = 1e-8) const;
00101
00103 void dpd_start();
00105 void dpd_stop();
00106
00107 public:
00108 PsiCC(const Ref<KeyVal>&);
00109 PsiCC(StateIn&);
00110 ~PsiCC();
00111 void save_data_state(StateOut&);
00112
00114 virtual const RefSCMatrix& T1(SpinCase1 spin1);
00116 virtual const RefSCMatrix& T2(SpinCase2 spin2);
00118 virtual const RefSCMatrix& Tau2(SpinCase2 spin2);
00120 virtual const RefSCMatrix& Lambda1(SpinCase1 spin1);
00122 virtual const RefSCMatrix& Lambda2(SpinCase2 spin2);
00123 };
00124
00127
00128 class PsiCCSD : public PsiCC {
00129 protected:
00130 void write_input(int conv);
00131 public:
00132 PsiCCSD(const Ref<KeyVal>&);
00133 PsiCCSD(StateIn&);
00134 ~PsiCCSD();
00135 void save_data_state(StateOut&);
00136 int gradient_implemented() const;
00137 };
00138
00141
00142 class PsiCCSD_T : public PsiCC {
00143 protected:
00144 void write_input(int conv);
00145 public:
00146 PsiCCSD_T(const Ref<KeyVal>&);
00147 PsiCCSD_T(StateIn&);
00148 ~PsiCCSD_T();
00149
00150 void save_data_state(StateOut&);
00151 int gradient_implemented() const;
00152 };
00153
00154 }
00155
00156 #endif