lammps/lib/reax/reax_charges.F

86 lines
3.6 KiB
Fortran

**********************************************************************
* *
* REAXFF Reactive force field program *
* *
* Developed and written by Adri van Duin, duin@wag.caltech.edu *
* *
* Copyright (c) 2001-2010 California Institute of Technology *
* *
* This is an open-source program. Feel free to modify its *
* contents. Please keep me informed of any useful modification *
* or addition that you made. Please do not distribute this *
* program to others; if people are interested in obtaining *
* a copy of this program let them contact me first. *
* *
**********************************************************************
************************************************************************
subroutine taper(r,r2)
************************************************************************
#include "cbka.blk"
#include "cbkconst.blk"
#include "cbkenergies.blk"
#include "cbkinit.blk"
#include "cbknonbon.blk"
************************************************************************
* *
* Taper function for Coulomb interaction *
* *
************************************************************************
r3=r2*r
SW=SWC7*R3*R3*R+SWC6*R3*R3+SWC5*R3*R2+SWC4*R2*R2+SWC3*R3+SWC2*R2+
$SWC1*R+SWC0
SW1=7.0D0*SWC7*R3*R3+6.0D0*SWC6*R3*R2+5.0D0*SWC5*R2*R2+
$4.0D0*SWC4*R3+THREE*SWC3*R2+TWO*SWC2*R+SWC1
return
end
************************************************************************
************************************************************************
subroutine tap7th
************************************************************************
#include "cbka.blk"
#include "cbkc.blk"
#include "cbkconst.blk"
#include "cbkd.blk"
#include "cbkff.blk"
#include "cbkh.blk"
#include "control.blk"
************************************************************************
* *
* 7th order taper function setup *
* *
************************************************************************
c$$$ if (ndebug.eq.1) then
c$$$C open (65,file='fort.65',status='unknown',access='append')
c$$$ write (65,*) 'In tap7th'
c$$$ call timer(65)
c$$$ close (65)
c$$$ end if
D1=SWB-SWA
D7=D1**7.0D0
SWA2=SWA*SWA
SWA3=SWA2*SWA
SWB2=SWB*SWB
SWB3=SWB2*SWB
************************************************************************
* 7th order taper function *
************************************************************************
SWC7= 20.0D0/D7
SWC6= -70.0D0*(SWA+SWB)/D7
SWC5= 84.0D0*(SWA2+3.0D0*SWA*SWB+SWB2)/D7
SWC4= -35.0D0*(SWA3+9.0D0*SWA2*SWB+9.0D0*SWA*SWB2+SWB3)/D7
SWC3= 140.0D0*(SWA3*SWB+3.0D0*SWA2*SWB2+SWA*SWB3)/D7
SWC2=-210.0D0*(SWA3*SWB2+SWA2*SWB3)/D7
SWC1= 140.0D0*SWA3*SWB3/D7
SWC0=(-35.0D0*SWA3*SWB2*SWB2+21.0D0*SWA2*SWB3*SWB2+
$7.0D0*SWA*SWB3*SWB3+SWB3*SWB3*SWB)/D7
return
END