git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@2553 f3b2605a-c512-4ea7-a41b-209d697bcdaa

This commit is contained in:
sjplimp
2009-02-06 16:39:43 +00:00
parent 8102195ee1
commit 6f9c18174f
73 changed files with 10980 additions and 0 deletions

311
lib/reax/reax_reac.F Normal file
View File

@ -0,0 +1,311 @@
**********************************************************************
* *
* 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. *
* *
**********************************************************************
**********************************************************************
* *
* 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 encalc
**********************************************************************
#include "cbka.blk"
#include "cbkc.blk"
#include "cbkcha.blk"
#include "cbkconst.blk"
#include "cbkd.blk"
#include "cbkdcell.blk"
#include "cbkenergies.blk"
#include "cellcoord.blk"
#include "control.blk"
#include "small.blk"
**********************************************************************
* *
* Calculate energy and first derivatives *
* *
**********************************************************************
c$$$ if (ndebug.eq.1) then
c$$$C open (65,file='fort.65',status='unknown',access='append')
c$$$ write (65,*) 'In encalc'
c$$$ call timer(65)
c$$$ close (65)
c$$$ end if
estrc=0.0
do i1=1,na
do i2=1,3
d(i2,i1)=0.0
estrain(i1)=0.0
end do
end do
eb=zero
ea=zero
elp=zero
emol=zero
ev=zero
ehb=zero
ecoa=zero
epen=zero
et=zero
eco=zero
eres=zero
eradbo=zero
efi=zero
if(Lvirial.eq.1) then
do k1 = 1,6
virial(k1) = zero
end do
endif
if (Latomvirial.eq.1) then
do i1=1,na
do i2=1,6
atomvirial(i2,i1)=0.0
end do
end do
endif
call boncor
call lonpar
call covbon
call ovcor
call srtang !Determine valency angles
call srttor !Determine torsion angles
call srtoop !Determine out of plane angles
call srthb !Determine hydrogen bonds
call calval
call valang
* call oopang
call torang
call hbond
!print *, 'called hbond'
!print *, nchaud
call nonbon
call efield
call restraint
c
c Use this to print out fort.73-style energies
c It only works correctly in serial mode
c
c write (6,'(i8,1x,14(f21.10,1x))')mdstep+nprevrun,eb,ea,elp,
c $emol,ev+epen,ecoa,ehb,et,eco,ew,ep,ech,efi
estrc=eb+ea+elp+ev+ecoa+emol+epen+et+ehb+eco+ew+ep+ncha2*ech+efi
if (estrc.gt.zero) return
if (estrc.le.zero) then
goto 10
else
write (*,*)mdstep
write (92,*)eb,ea,elp,ev,ecoa,emol,epen,eoop,et,eco,ew,
$ep,ech,eres,eradbo
stop 'Energy not a number'
end if
10 continue
return
end
**********************************************************************
**********************************************************************
subroutine init
**********************************************************************
#include "cbka.blk"
#include "cbkatomcoord.blk"
#include "cbkc.blk"
#include "cbkcha.blk"
#include "cbkconst.blk"
#include "cbkdcell.blk"
#include "cbkdistan.blk"
#include "cbkenergies.blk"
#include "cbkia.blk"
#include "cbkimove.blk"
#include "cbkinit.blk"
#include "cbktregime.blk"
#include "cellcoord.blk"
#include "control.blk"
#include "opt.blk"
#include "small.blk"
**********************************************************************
c$$$ if (ndebug.eq.1) then
c$$$C open (65,file='fort.65',status='unknown',access='append')
c$$$ write (65,*) 'In init'
c$$$ call timer(65)
c$$$ close (65)
c$$$ end if
**********************************************************************
* *
* Initialize variables *
* *
**********************************************************************
convmd=4.184*1.0d26
pi=3.14159265
avognr=6.0221367d23
rdndgr=180.0/pi
dgrrdn=1.0/rdndgr
rgasc=8.314510
caljou=4.184
xjouca=1.0/caljou
ech=zero
zero=0.0
one=1.0
two=2.0
three=3.0
half=one/two
nzero=0
none=1
ntwo=2
nthree=3
invt=0
ndata2=0
iheatf=0
nradcount=0
itemp=1
xinh=zero
ifieldx=0
ifieldy=0
ifieldz=0
mdstep=0
kx=0
ky=0
kz=0
nit=0
nbon=0
angle(1)=90.0
angle(2)=90.0
angle(3)=90.0
axiss(1)=zero
axiss(2)=zero
axiss(3)=zero
do i1=1,nat
id(i1,1)=0
id(i1,2)=0
id(i1,3)=0
end do
icgeo=0
sumhe=zero
ustime=zero
systime=zero
vpmax=zero
vpmin=zero
dseed=0
iagain=0
do i1=1,nat
do i2=1,mbond+3
ia(i1,i2)=0
iag(i1,i2)=0
end do
end do
ioldchg=0
na=0
nrestra=0
nrestrav=0
nrestrat=0
nrestram=0
tset=tsetor
tm11=axis(1)
tm21=zero
tm31=zero
tm22=axis(2)
tm32=zero
tm33=axis(3)
qruid='NORMAL RUN'
c$$$ do i1=1,nat
c$$$ imove(i1)=1
c$$$ end do
**********************************************************************
* *
* Write file headers *
* *
**********************************************************************
Cc open (71,file='fort.71',status='unknown',access='append')
c write (71,10)
c close (71)
Cc open (73,file='fort.73',status='unknown',access='append')
c write (73,20)
c close (73)
c if (ntrc.gt.0) then
Cc open (75,file='fort.75',status='unknown',access='append')
c write (75,30)
c close (75)
c end if
c if (nmethod.eq.4) then
Cc open (59,file='fort.59',status='unknown',access='append')
c write (59,40)
c close (59)
c end if
return
**********************************************************************
* *
* Format part *
* *
**********************************************************************
10 format (' Iter. Nmol Epot Ekin Etot ',
$' T(K) Eaver(block) Eaver(total) Taver Tmax ',
$' Pres(MPa) sdev(Epot) sdev(Eaver) Tset Timestep',
$' RMSG Totaltime')
20 format (' Iter. Ebond Eatom Elp Emol',
$' Eval Ecoa Ehbo Etors Econj',
$' Evdw Ecoul Echarge Efield')
30 format (' Iter. Tsys Tzone1 Tset1 Tzone2 Tset2')
40 format (' Iter. a b c px',
$'(MPa) py(MPa) pz(MPa) pset(MPa) Volume ')
end
**********************************************************************
************************************************************************
subroutine timer(nunit)
************************************************************************
#include "cbka.blk"
#include "cbkinit.blk"
real timear
real tarray(2)
#ifdef _IBM
call dtime_(tarray,timear)
#else
call dtime(tarray,timear)
#endif
ustime=ustime+tarray(1)
systime=systime+tarray(2)
write (nunit,100)ustime,systime,ustime+systime
return
100 format ('User time:',f20.4,' System time:',f20.4,
$' Total time:',f20.4)
end
************************************************************************
************************************************************************