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 __GNUG__
00029 #pragma interface
00030 #endif
00031
00032 #ifndef _chemistry_qc_mbptr12_singlerefinfo_h
00033 #define _chemistry_qc_mbptr12_singlerefinfo_h
00034
00035 #include <chemistry/qc/mbptr12/orbitalspace.h>
00036 #include <chemistry/qc/mbptr12/spin.h>
00037
00038 namespace sc {
00039
00040 class SCF;
00041
00045 class SingleRefInfo : virtual public SavableState {
00046 public:
00047 SingleRefInfo(StateIn&);
00049 SingleRefInfo(const Ref<SCF>& ref, unsigned int nfzc, unsigned int nfzv, bool delayed_initialization = false);
00050 ~SingleRefInfo();
00051
00052 void save_data_state(StateOut&);
00053 void initialize();
00054
00056 const Ref<SCF>& ref() const;
00058 bool spin_polarized() const;
00060 unsigned int nfzc() const;
00062 unsigned int nfzv() const;
00063
00065 const Ref<OrbitalSpace>& oso_space() const;
00066
00068
00070
00071 const Ref<OrbitalSpace>& orbs_sb() const;
00073 const Ref<OrbitalSpace>& orbs() const;
00075 const Ref<OrbitalSpace>& docc_sb() const;
00077 const Ref<OrbitalSpace>& docc() const;
00079 const Ref<OrbitalSpace>& docc_act() const;
00081 const Ref<OrbitalSpace>& socc() const;
00083 const Ref<OrbitalSpace>& uocc_sb() const;
00085 const Ref<OrbitalSpace>& uocc() const;
00087 const Ref<OrbitalSpace>& uocc_act() const;
00089
00091 const Ref<OrbitalSpace>& orbs_sb(SpinCase1 spin) const;
00093 const Ref<OrbitalSpace>& orbs(SpinCase1 spin) const;
00095 const Ref<OrbitalSpace>& occ_sb(SpinCase1 spin) const;
00097 const Ref<OrbitalSpace>& occ(SpinCase1 spin) const;
00099 const Ref<OrbitalSpace>& occ_act(SpinCase1 spin) const;
00101 const Ref<OrbitalSpace>& uocc_sb(SpinCase1 spin) const;
00103 const Ref<OrbitalSpace>& uocc(SpinCase1 spin) const;
00105 const Ref<OrbitalSpace>& uocc_act(SpinCase1 spin) const;
00106
00107 private:
00109 bool initialized_;
00111 Ref<SCF> ref_;
00113 unsigned int nfzc_;
00115 unsigned int nfzv_;
00116
00118 typedef struct {
00119 Ref<OrbitalSpace> orbs_sb_;
00120 Ref<OrbitalSpace> orbs_;
00121 Ref<OrbitalSpace> occ_sb_;
00122 Ref<OrbitalSpace> occ_;
00123 Ref<OrbitalSpace> occ_act_;
00124 Ref<OrbitalSpace> uocc_sb_;
00125 Ref<OrbitalSpace> uocc_;
00126 Ref<OrbitalSpace> uocc_act_;
00128 void init(SpinCase1 spin, const Ref<GaussianBasisSet>& bs,
00129 const Ref<Integral>& integral,
00130 const RefDiagSCMatrix& evals, const RefSCMatrix& evecs,
00131 const std::vector<double>& occs, unsigned int nfzc, unsigned int nfzv);
00132 } SpinSpaces;
00133
00135
00137 Ref<OrbitalSpace> orbs_sb_;
00138 Ref<OrbitalSpace> orbs_;
00139 Ref<OrbitalSpace> docc_sb_;
00140 Ref<OrbitalSpace> docc_;
00141 Ref<OrbitalSpace> docc_act_;
00142 Ref<OrbitalSpace> socc_;
00143 Ref<OrbitalSpace> uocc_sb_;
00144 Ref<OrbitalSpace> uocc_;
00145 Ref<OrbitalSpace> uocc_act_;
00146 SpinSpaces spinspaces_[NSpinCases1];
00147
00148
00150 void init_spinspecific_spaces();
00152 void init_spinindependent_spaces();
00153
00155 void throw_if_spin_polarized() const;
00156
00157 };
00158
00159 };
00160
00161 #endif
00162