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 #ifndef _chemistry_qc_scf_tbgrad_h
00029 #define _chemistry_qc_scf_tbgrad_h
00030
00031 #ifdef __GNUC__
00032 #pragma interface
00033 #endif
00034
00035 #include <util/group/thread.h>
00036
00037 namespace sc {
00038
00039 template<class T>
00040 class TBGrad : public Thread {
00041 protected:
00042 T& contribution;
00043 double exchange_fraction;
00044
00045 public:
00046 TBGrad(T&t, double ex = 1.0) : contribution(t), exchange_fraction(ex) {}
00047 virtual ~TBGrad() {}
00048
00049 inline void set_scale(double& coulombscale, double& exchangescale,
00050 int i, int j, int k, int l) const
00051 {
00052 double scale = 1.0;
00053
00054 if ((i!=k)||(j!=l))
00055 scale *= 2.0;
00056
00057 if (i!=j)
00058 scale *= 2.0;
00059
00060 coulombscale = 0.5*scale;
00061 exchangescale = -0.25*scale * exchange_fraction;
00062
00063 if (k!=l)
00064 coulombscale *= 2.0;
00065
00066 if ((k!=l)&&(i==j))
00067 exchangescale *= 2.0;
00068 }
00069 };
00070
00071 }
00072
00073 #endif
00074
00075
00076
00077
00078