00001
00008 #ifndef HARPAVEC_H
00009 #define HARPAVEC_H
00010
00011 enum OPER_TYPE {REAL_OPER,IMAG_OPER};
00012
00013 #include "halocorb.h"
00014 #include "haatgroup.h"
00015 #include "hamatdb.h"
00016
00017 class HaRPAvec
00019 {
00020 public:
00021 HaRPAvec();
00022 HaRPAvec(HaQCMod & qc_mod);
00023 HaRPAvec(const HaLocExcit & excit,HaQCMod & qc_mod);
00024 virtual ~HaRPAvec();
00025
00026 int GetNBfunc() const;
00027
00028 bool Print_info(ostream &sout, const int level) const;
00029
00030 int GetNumOccMO() const;
00031 int GetNumVacMO() const;
00032
00033
00034 int SetFromLocExcit(const HaLocExcit & excit);
00035
00036
00037 int SetFromAOMat(const HaMat_double & aomat,
00038 const OPER_TYPE optyp=REAL_OPER );
00039
00040
00041 int SetFromLOGrpMat(const HaString& gid1,const HaString& gid2,
00042 const HaMat_double & fmloc,
00043 const OPER_TYPE optyp=REAL_OPER);
00044
00045
00046
00047 friend double
00048 SProd(const HaRPAvec & left, const HaRPAvec & right);
00049
00050
00051 friend HaMat_double
00052 SProd(const vector<HaRPAvec> & left, const vector<HaRPAvec> & right);
00053
00054 friend HaVec_double
00055 SProd(const HaRPAvec & RPAv, const vector<HaRPAvec> & RPAv_arr);
00056
00057
00058
00059 friend double dot2(const HaRPAvec & left, const HaRPAvec & right);
00060
00061 friend HaVec_double
00062 dot2(const vector<HaRPAvec> & left, const vector<HaRPAvec> & right);
00063
00064 friend double norm2(const HaRPAvec & RPAv);
00065 friend HaVec_double norm2(const vector<HaRPAvec> & RPAv_arr);
00066
00067 friend class HaRPAHam;
00068 friend class HaRPAResolv;
00069
00070
00071 friend HaRPAvec
00072 operator*(const double factor, const HaRPAvec & RPAv);
00073
00074 friend vector<HaRPAvec>
00075 operator*(const HaVec_double & vfactor, const vector<HaRPAvec> & RPAv_arr);
00076
00077
00078 friend HaRPAvec
00079 operator+(HaRPAvec & left, HaRPAvec & right);
00080
00081 friend vector<HaRPAvec>
00082 operator+(vector<HaRPAvec> & left, vector<HaRPAvec> & right);
00083
00084 friend vector<HaRPAvec>
00085 operator-(vector<HaRPAvec> & left, vector<HaRPAvec> & right);
00086
00087 HaRPAvec &
00088 operator+=(HaRPAvec & rpav);
00089
00090 friend vector<HaRPAvec> &
00091 operator+=(vector<HaRPAvec> & left, vector<HaRPAvec> & right);
00092
00093 HaRPAvec &
00094 operator-=(HaRPAvec & rpav);
00095
00096 friend vector<HaRPAvec> &
00097 operator-=(vector<HaRPAvec> & left, vector<HaRPAvec> & right);
00098
00099 HaQCMod* GetpHost();
00100
00101 const bool Get_AO_dens(HaMat_double & dens, const int imat);
00102
00103 HaMat_double Z_mat;
00104 HaMat_double Y_mat;
00105
00106 HaGrpOperID id;
00107
00108 protected:
00109
00110 HaQCMod* phost;
00111
00112 };
00113
00114
00115
00116
00117 #endif