![]()
|
uhftmpl.h00001 00002 namespace sc { 00003 00004 class LocalUHFContribution { 00005 private: 00006 double * const gmata; 00007 double * const gmatb; 00008 double * const pmata; 00009 double * const pmatb; 00010 00011 public: 00012 LocalUHFContribution(double *ga, double *pa, double *gb, double *pb) : 00013 gmata(ga), gmatb(gb), pmata(pa), pmatb(pb) {} 00014 ~LocalUHFContribution() {} 00015 00016 void set_bound(double,double) {}; 00017 00018 inline void cont1(int ij, int kl, double val) { 00019 gmata[ij] += val*(pmata[kl]+pmatb[kl]); 00020 gmata[kl] += val*(pmata[ij]+pmatb[ij]); 00021 00022 gmatb[ij] += val*(pmata[kl]+pmatb[kl]); 00023 gmatb[kl] += val*(pmata[ij]+pmatb[ij]); 00024 } 00025 00026 inline void cont2(int ij, int kl, double val) { 00027 val *= 0.5; 00028 gmata[ij] -= val*pmata[kl]; 00029 gmata[kl] -= val*pmata[ij]; 00030 00031 gmatb[ij] -= val*pmatb[kl]; 00032 gmatb[kl] -= val*pmatb[ij]; 00033 } 00034 00035 inline void cont3(int ij, int kl, double val) { 00036 gmata[ij] -= val*pmata[kl]; 00037 gmata[kl] -= val*pmata[ij]; 00038 00039 gmatb[ij] -= val*pmatb[kl]; 00040 gmatb[kl] -= val*pmatb[ij]; 00041 } 00042 00043 inline void cont4(int ij, int kl, double val) { 00044 cont1(ij,kl,val); 00045 cont2(ij,kl,val); 00046 } 00047 00048 inline void cont5(int ij, int kl, double val) { 00049 cont1(ij,kl,val); 00050 cont3(ij,kl,val); 00051 } 00052 }; 00053 00054 class LocalUHFEnergyContribution { 00055 private: 00056 double * const pmata; 00057 double * const pmatb; 00058 00059 public: 00060 double ec; 00061 double ex; 00062 00063 LocalUHFEnergyContribution(double *a, double *b) : pmata(a), pmatb(b) { 00064 ec=ex=0; 00065 } 00066 00067 ~LocalUHFEnergyContribution() {} 00068 00069 void set_bound(double,double) {}; 00070 00071 inline void cont1(int ij, int kl, double val) { 00072 ec += val*(pmata[ij]+pmatb[ij])*(pmata[kl]+pmatb[kl]); 00073 } 00074 00075 inline void cont2(int ij, int kl, double val) { 00076 ex -= 0.5*val*(pmata[ij]*pmata[kl]+pmatb[ij]*pmatb[kl]); 00077 } 00078 00079 inline void cont3(int ij, int kl, double val) { 00080 ex -= val*(pmata[ij]*pmata[kl]+pmatb[ij]*pmatb[kl]); 00081 } 00082 00083 inline void cont4(int ij, int kl, double val) { 00084 cont1(ij,kl,val); 00085 cont2(ij,kl,val); 00086 } 00087 00088 inline void cont5(int ij, int kl, double val) { 00089 cont1(ij,kl,val); 00090 cont3(ij,kl,val); 00091 } 00092 }; 00093 00094 class LocalUHFGradContribution { 00095 private: 00096 double * const pmata; 00097 double * const pmatb; 00098 00099 public: 00100 LocalUHFGradContribution(double *a, double *b) : pmata(a), pmatb(b) {} 00101 ~LocalUHFGradContribution() {} 00102 00103 inline double cont1(int ij, int kl) { 00104 return (pmata[ij]*pmata[kl])+(pmatb[ij]*pmatb[kl]) + 00105 (pmata[ij]*pmatb[kl])+(pmatb[ij]*pmata[kl]); 00106 } 00107 00108 inline double cont2(int ij, int kl) { 00109 return 2*((pmata[ij]*pmata[kl])+(pmatb[ij]*pmatb[kl])); 00110 } 00111 }; 00112 00113 } Generated at Fri Jan 10 08:14:10 2003 for MPQC 2.1.3 using the documentation package Doxygen 1.2.14. |