2
c $Id: smd_leapf_shake.F,v 1.1 2008-04-18 17:48:13 marat Exp $
5
subroutine smd_leapf_shake(natms,
26
double precision tstep
28
double precision mass(natms)
31
double precision consdist(ntcons)
32
double precision ncc(natms,3),nvv(natms,3),dcc(natms,3)
33
double precision nrij(ntcons,3),orij(ntcons,3)
34
double precision fff(natms,3)
35
double precision vvv(natms,3)
36
double precision ccc(natms,3)
38
integer i,j,it,maxit,iatm1,iatm2
40
double precision force,rma,rmb
41
double precision tmpvx,tmpvy,tmpvz
42
double precision tstepsq,rtstep,tol,mxdiff
43
double precision nrijsq,dijsq,diffsq,dotprod
58
orij(i,1)=ccc(iatm1,1)-ccc(iatm2,1)
59
orij(i,2)=ccc(iatm1,2)-ccc(iatm2,2)
60
orij(i,3)=ccc(iatm1,3)-ccc(iatm2,3)
61
write(40,*) consdist(i)
65
call smd_lat_rebox(ntcons,orij)
73
nvv(i,1)=vvv(i,1)+fff(i,1)*tstep/mass(i)
74
nvv(i,2)=vvv(i,2)+fff(i,2)*tstep/mass(i)
75
nvv(i,3)=vvv(i,3)+fff(i,3)*tstep/mass(i)
77
ccc(i,1)=ncc(i,1)+tstep*nvv(i,1)
78
ccc(i,2)=ncc(i,2)+tstep*nvv(i,2)
79
ccc(i,3)=ncc(i,3)+tstep*nvv(i,3)
91
nrij(j,1)=ccc(iatm1,1)-ccc(iatm2,1)
92
nrij(j,2)=ccc(iatm1,2)-ccc(iatm2,2)
93
nrij(j,3)=ccc(iatm1,3)-ccc(iatm2,3)
96
write(50,*) i,nrij(1,1), nrij(1,2),nrij(1,3)
98
call smd_lat_rebox(ntcons,nrij)
99
write(50,*) i,nrij(1,1), nrij(1,2),nrij(1,3)
112
nrijsq=nrij(j,1)**2+nrij(j,2)**2+nrij(j,3)**2
115
mxdiff=max(mxdiff,abs(diffsq)/consdist(j))
117
dotprod=orij(j,1)*nrij(j,1)
118
$ +orij(j,2)*nrij(j,2)
119
$ +orij(j,3)*nrij(j,3)
121
rma= tstepsq/mass(iatm1)
122
rmb=-tstepsq/mass(iatm2)
123
force=diffsq/(-2.0*(rma-rmb)*dotprod)
125
dcc(iatm1,1)=dcc(iatm1,1)-rma*orij(j,1)*force
126
dcc(iatm1,2)=dcc(iatm1,2)-rma*orij(j,2)*force
127
dcc(iatm1,3)=dcc(iatm1,3)-rma*orij(j,3)*force
128
dcc(iatm2,1)=dcc(iatm2,1)-rmb*orij(j,1)*force
129
dcc(iatm2,2)=dcc(iatm2,2)-rmb*orij(j,2)*force
130
dcc(iatm2,3)=dcc(iatm2,3)-rmb*orij(j,3)*force
132
write(50,*) i,dotprod,diffsq
141
ccc(iatm1,1)=ccc(iatm1,1)+0.5*dcc(iatm1,1)
142
ccc(iatm1,2)=ccc(iatm1,2)+0.5*dcc(iatm1,2)
143
ccc(iatm1,3)=ccc(iatm1,3)+0.5*dcc(iatm1,3)
144
ccc(iatm2,1)=ccc(iatm2,1)+0.5*dcc(iatm2,1)
145
ccc(iatm2,2)=ccc(iatm2,2)+0.5*dcc(iatm2,2)
146
ccc(iatm2,3)=ccc(iatm2,3)+0.5*dcc(iatm2,3)
152
if(mxdiff.lt.tol)goto 100
160
nvv(i,1)=(ccc(i,1)-ncc(i,1))*rtstep
161
nvv(i,2)=(ccc(i,2)-ncc(i,2))*rtstep
162
nvv(i,3)=(ccc(i,3)-ncc(i,3))*rtstep
164
tmpvx=0.5*(nvv(i,1)+vvv(i,1))
165
tmpvy=0.5*(nvv(i,2)+vvv(i,2))
166
tmpvz=0.5*(nvv(i,3)+vvv(i,3))
168
ekin=ekin+mass(i)*(tmpvx**2+tmpvy**2+tmpvz**2)
170
fff(i,1)=(nvv(i,1)-vvv(i,1))*mass(i)*rtstep
171
fff(i,2)=(nvv(i,2)-vvv(i,2))*mass(i)*rtstep
172
fff(i,3)=(nvv(i,3)-vvv(i,3))*mass(i)*rtstep
178
write(30,*) fff(i,1),vvv(i,1),ncc(i,1)