osshftmpl.h
00001
00002 namespace sc {
00003
00004 class LocalOSSContribution {
00005 private:
00006 double * const gmat;
00007 double * const gmata;
00008 double * const gmatb;
00009
00010 double * const pmat;
00011 double * const pmata;
00012 double * const pmatb;
00013 public:
00014 LocalOSSContribution(double *g, double *p, double *ga, double *pa,
00015 double *gb, double *pb) :
00016 gmat(g), gmata(ga), gmatb(gb), pmat(p), pmata(pa), pmatb(pb) {}
00017 ~LocalOSSContribution() {}
00018
00019 void set_bound(double,double) {}
00020
00021 inline void cont1(int ij, int kl, double val) {
00022 gmat[ij] += val*pmat[kl];
00023 gmat[kl] += val*pmat[ij];
00024 }
00025
00026 inline void cont2(int ij, int kl, double val) {
00027 val *= 0.25;
00028 gmat[ij] -= val*pmat[kl];
00029 gmat[kl] -= val*pmat[ij];
00030
00031 gmata[ij] += val*pmata[kl];
00032 gmata[kl] += val*pmata[ij];
00033
00034 gmatb[ij] += val*pmatb[kl];
00035 gmatb[kl] += val*pmatb[ij];
00036
00037 val *= -3.0;
00038 gmatb[ij] += val*pmata[kl];
00039 gmatb[kl] += val*pmata[ij];
00040
00041 gmata[ij] += val*pmatb[kl];
00042 gmata[kl] += val*pmatb[ij];
00043 }
00044
00045 inline void cont3(int ij, int kl, double val) {
00046 val *= 0.5;
00047 gmat[ij] -= val*pmat[kl];
00048 gmat[kl] -= val*pmat[ij];
00049
00050 gmata[ij] += val*pmata[kl];
00051 gmata[kl] += val*pmata[ij];
00052
00053 gmatb[ij] += val*pmatb[kl];
00054 gmatb[kl] += val*pmatb[ij];
00055
00056 val *= -3.0;
00057 gmata[ij] += val*pmatb[kl];
00058 gmata[kl] += val*pmatb[ij];
00059
00060 gmatb[ij] += val*pmata[kl];
00061 gmatb[kl] += val*pmata[ij];
00062 }
00063
00064 inline void cont4(int ij, int kl, double val) {
00065 gmat[ij] += 0.75*val*pmat[kl];
00066 gmat[kl] += 0.75*val*pmat[ij];
00067
00068 gmata[ij] += 0.25*val*pmata[kl];
00069 gmata[kl] += 0.25*val*pmata[ij];
00070
00071 gmatb[ij] += 0.25*val*pmatb[kl];
00072 gmatb[kl] += 0.25*val*pmatb[ij];
00073
00074 gmata[ij] -= 0.75*val*pmatb[kl];
00075 gmata[kl] -= 0.75*val*pmatb[ij];
00076
00077 gmatb[ij] -= 0.75*val*pmata[kl];
00078 gmatb[kl] -= 0.75*val*pmata[ij];
00079 }
00080
00081 inline void cont5(int ij, int kl, double val) {
00082 val *= 0.5;
00083 gmat[ij] += val*pmat[kl];
00084 gmat[kl] += val*pmat[ij];
00085
00086 gmata[ij] += val*pmata[kl];
00087 gmata[kl] += val*pmata[ij];
00088
00089 gmatb[ij] += val*pmatb[kl];
00090 gmatb[kl] += val*pmatb[ij];
00091
00092 val *= -3.0;
00093 gmata[ij] += val*pmatb[kl];
00094 gmata[kl] += val*pmatb[ij];
00095
00096 gmatb[ij] += val*pmata[kl];
00097 gmatb[kl] += val*pmata[ij];
00098 }
00099 };
00100
00101 class LocalOSSEnergyContribution {
00102 private:
00103 double * const pmat;
00104 double * const pmata;
00105 double * const pmatb;
00106
00107 public:
00108 double ec;
00109 double ex;
00110
00111 void set_bound(double,double) {};
00112
00113 LocalOSSEnergyContribution(double *p, double *pa, double *pb) :
00114 pmat(p), pmata(pa), pmatb(pb) {
00115 ec=ex=0;
00116 }
00117 ~LocalOSSEnergyContribution() {}
00118
00119 inline void cont1(int ij, int kl, double val) {
00120 ec += val*pmat[ij]*pmat[kl];
00121 }
00122
00123 inline void cont2(int ij, int kl, double val) {
00124 ex -= 0.25*val*(pmat[ij]*pmat[kl] + pmata[ij]*pmata[kl] +
00125 pmatb[ij]*pmatb[kl]);
00126 ex += 0.75*val*(pmata[ij]*pmatb[kl] + pmatb[ij]*pmata[kl]);
00127 }
00128
00129 inline void cont3(int ij, int kl, double val) {
00130 ex -= 0.5*val*(pmat[ij]*pmat[kl] + pmata[ij]*pmata[kl] +
00131 pmatb[ij]*pmatb[kl]);
00132 ex += 1.5*val*(pmata[ij]*pmatb[kl] + pmatb[ij]*pmata[kl]);
00133 }
00134
00135 inline void cont4(int ij, int kl, double val) {
00136 ec += val*pmat[ij]*pmat[kl];
00137 ex -= 0.25*val*(pmat[ij]*pmat[kl] + pmata[ij]*pmata[kl] +
00138 pmatb[ij]*pmatb[kl]);
00139 ex += 0.75*val*(pmata[ij]*pmatb[kl] + pmatb[ij]*pmata[kl]);
00140 }
00141
00142 inline void cont5(int ij, int kl, double val) {
00143 ec += val*pmat[ij]*pmat[kl];
00144 ex -= 0.5*val*(pmat[ij]*pmat[kl] + pmata[ij]*pmata[kl] +
00145 pmatb[ij]*pmatb[kl]);
00146 ex += 1.5*val*(pmata[ij]*pmatb[kl] + pmatb[ij]*pmata[kl]);
00147 }
00148 };
00149
00150 class LocalOSSGradContribution {
00151 private:
00152 double * const pmat;
00153 double * const pmata;
00154 double * const pmatb;
00155
00156 public:
00157 LocalOSSGradContribution(double *p, double *pa, double *pb) :
00158 pmat(p), pmata(pa), pmatb(pb) {}
00159 ~LocalOSSGradContribution() {}
00160
00161 inline double cont1(int ij, int kl) {
00162 return pmat[ij]*pmat[kl] +
00163 0.5*(pmata[ij]*pmat[kl] + pmat[ij]*pmata[kl] +
00164 pmatb[ij]*pmat[kl] + pmat[ij]*pmatb[kl]) +
00165 0.25*(pmata[ij]*pmata[kl] + pmatb[ij]*pmatb[kl] +
00166 pmata[ij]*pmatb[kl] + pmatb[ij]*pmata[kl]);
00167 }
00168
00169 inline double cont2(int ij, int kl) {
00170 return pmat[ij]*pmat[kl] +
00171 0.5*(pmata[ij]*pmat[kl] + pmat[ij]*pmata[kl] +
00172 pmatb[ij]*pmat[kl] + pmat[ij]*pmatb[kl] +
00173 pmata[ij]*pmata[kl] + pmatb[ij]*pmatb[kl] -
00174 pmata[ij]*pmatb[kl] - pmatb[ij]*pmata[kl]);
00175 }
00176 };
00177
00178 }
00179
Generated at Thu Jul 29 19:53:51 2004 for MPQC
2.2.1 using the documentation package Doxygen
1.3.7.