1 // 2 // tbgrad.h --- definition of the abstract two-electron gradient builder 3 // 4 // Copyright (C) 1996 Limit Point Systems, Inc. 5 // 6 // Author: Edward Seidl <seidl@janed.com> 7 // Maintainer: LPS 8 // 9 // This file is part of the SC Toolkit. 10 // 11 // The SC Toolkit is free software; you can redistribute it and/or modify 12 // it under the terms of the GNU Library General Public License as published by 13 // the Free Software Foundation; either version 2, or (at your option) 14 // any later version. 15 // 16 // The SC Toolkit is distributed in the hope that it will be useful, 17 // but WITHOUT ANY WARRANTY; without even the implied warranty of 18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 // GNU Library General Public License for more details. 20 // 21 // You should have received a copy of the GNU Library General Public License 22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to 23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 24 // 25 // The U.S. Government is granted a limited license as per AL 91-7. 26 // 27 28 #ifndef _chemistry_qc_scf_tbgrad_h 29 #define _chemistry_qc_scf_tbgrad_h 30 31 #ifdef __GNUC__ 32 #pragma interface 33 #endif 34 35 #include <util/group/thread.h> 36 37 namespace sc { 38 39 template<class T> 40 class TBGrad : public Thread { 41 protected: 42 T& contribution; 43 double exchange_fraction; 44 45 public: contribution(t)46 TBGrad(T&t, double ex = 1.0) : contribution(t), exchange_fraction(ex) {} ~TBGrad()47 virtual ~TBGrad() {} 48 set_scale(double & coulombscale,double & exchangescale,int i,int j,int k,int l)49 inline void set_scale(double& coulombscale, double& exchangescale, 50 int i, int j, int k, int l) const 51 { 52 double scale = 1.0; 53 54 if ((i!=k)||(j!=l)) 55 scale *= 2.0; 56 57 if (i!=j) 58 scale *= 2.0; 59 60 coulombscale = 0.5*scale; 61 exchangescale = -0.25*scale * exchange_fraction; 62 63 if (k!=l) 64 coulombscale *= 2.0; 65 66 if ((k!=l)&&(i==j)) 67 exchangescale *= 2.0; 68 } 69 }; 70 71 } 72 73 #endif 74 75 // Local Variables: 76 // mode: c++ 77 // c-file-style: "ETS" 78 // End: 79