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 template<class T>
00038 class TBGrad : public Thread {
00039 protected:
00040 T& contribution;
00041 double exchange_fraction;
00042
00043 public:
00044 TBGrad(T&t, double ex = 1.0) : contribution(t), exchange_fraction(ex) {}
00045 virtual ~TBGrad() {}
00046
00047 inline void set_scale(double& coulombscale, double& exchangescale,
00048 int i, int j, int k, int l) const
00049 {
00050 double scale = 1.0;
00051
00052 if ((i!=k)||(j!=l))
00053 scale *= 2.0;
00054
00055 if (i!=j)
00056 scale *= 2.0;
00057
00058 coulombscale = 0.5*scale;
00059 exchangescale = -0.25*scale * exchange_fraction;
00060
00061 if (k!=l)
00062 coulombscale *= 2.0;
00063
00064 if ((k!=l)&&(i==j))
00065 exchangescale *= 2.0;
00066 }
00067 };
00068
00069 #endif
00070
00071
00072
00073
00074