root / src / egrad_chamfre.f90 @ 2
Historique | Voir | Annoter | Télécharger (24,8 ko)
1 |
!*************############### Attention ###############************* |
---|---|
2 |
!(a) Two parameters aa and br(3,3) must be provided in main program |
3 |
!(b) At first, z=0 for the outmost surface |
4 |
!(c) The units of all parameters are not atomic units, but angstrom, eV etc. |
5 |
!(d) Before using this routine, you must confirm that the energy is CONSISTENT with its derivative. |
6 |
! This check of consistency is VERY IMPORTANT for energy conservation in MD. |
7 |
!!! |
8 |
!! xa, ya,za present the positions of atoms. v is the energy of the system. dvdr present the force along the x,y,z directions. |
9 |
!! |
10 |
subroutine egrad_chamfre(Nat,V,Geom,Grad) |
11 |
! WAS xa,ya,za,v,dvdr) |
12 |
|
13 |
|
14 |
use Path_module, only : Lat_a,Lat_b,Lat_c,order,orderinv,renum |
15 |
use Io_module |
16 |
|
17 |
|
18 |
IMPLICIT NONE |
19 |
|
20 |
INTEGER(KINT), INTENT(IN) :: Nat |
21 |
REAL(KREAL), INTENT(OUT) :: V,grad(Nat*3) |
22 |
REAL(KREAL), INTENT(IN) :: Geom(Nat,3) |
23 |
|
24 |
! Bohr --> Angstr |
25 |
real(KREAL), parameter :: BOHR = 0.52917726D+00 |
26 |
|
27 |
!! PFL 2010 Nov. 28 -> |
28 |
! for now I keep this old F77 scheme. This has to be replaced by ALLOCATABLE |
29 |
! things |
30 |
! <- PFL 2010 Nov 28. |
31 |
REAL(KREAL) :: xa(100),ya(100),za(100),dvdr(100,3) |
32 |
REAL(KREAL) :: rshort,rlong,zshort,zlong |
33 |
REAL(KREAL), SAVE :: rnc,rnn,rhh,rch,rnh,ann(100),anc(100),anh(100),ach(100),ahh(100),a(100) |
34 |
REAL(KREAL) :: dv(100,10,3),df(100,10,3) |
35 |
REAL(KREAL) :: px(9000),py(9000),pz(9000),tmp,temp,rtemp,yf |
36 |
INTEGER(KINT) :: ka(9000),kx(9000),ky(9000),itx,ity,nf(100),mf(100,500) |
37 |
REAL(KREAL) :: xi(3),xj(3),xk(3),rij,rik,rjk,rji,rki,er,eb |
38 |
REAL(KREAL) :: fcut,tf,bodij,bodji,bod,cost,gtheta,dgdt,xt,t1,t2,t3 |
39 |
REAL(KREAL) :: zi,fcut2 |
40 |
INTEGER(KINT) :: np,nq,nh,nc |
41 |
INTEGER(KINT) :: i, j, nn, m, n, mid, n1, im, jm, n2,n3,n4, iat |
42 |
LOGICAL, SAVE :: First=.TRUE. |
43 |
LOGICAL :: debug, FExist |
44 |
|
45 |
common/zdis/zshort,zlong |
46 |
common/rdistanc/rshort,rlong |
47 |
|
48 |
|
49 |
INTERFACE |
50 |
function valid(string) result (isValid) |
51 |
CHARACTER(*), intent(in) :: string |
52 |
logical :: isValid |
53 |
END function VALID |
54 |
|
55 |
END INTERFACE |
56 |
|
57 |
!********************************************** |
58 |
|
59 |
|
60 |
debug=valid('egrad_chamfre') |
61 |
|
62 |
if (debug) Call Header('Entering Egrad_chamfre') |
63 |
|
64 |
v=0.0;dvdr=0.0 |
65 |
!******prepare the parameters of REBO potential |
66 |
!rshort=3.5 |
67 |
!rlong=3.9 |
68 |
zshort=3.5 |
69 |
zlong=4.5 |
70 |
|
71 |
rnn=3.2 !! to adjust |
72 |
rnc=3.5 !! to adjust |
73 |
rnh=3.0 !! to adjust |
74 |
rch=3.2 !! to adjust |
75 |
rhh=3.2 !! to adjust |
76 |
|
77 |
!rph=rlong |
78 |
|
79 |
if (First) THEN |
80 |
First=.FALSE. |
81 |
INQUIRE(FILE="parameter.dat",EXIST=FExist) |
82 |
if (.NOT.Fexist) THEN |
83 |
WRITE(*,*) "!!!!!!!!!!!! ERROR !!!!!!!!!!!!!!!!" |
84 |
WRITE(*,*) "!! egrad_chamfre !!!!" |
85 |
WRITE(*,*) "The file parameter.dat does not exists." |
86 |
WRITE(*,*) "!! egrad_chamfre !!!!" |
87 |
WRITE(*,*) "!!!!!!!!!!!! ERROR !!!!!!!!!!!!!!!!" |
88 |
STOP |
89 |
END IF |
90 |
open(1,file="parameter.dat") |
91 |
do i=1,5 !Ni-Ni |
92 |
read(1,*)ann(i) |
93 |
enddo |
94 |
|
95 |
do i=1,5 !Ni-C |
96 |
read(1,*)anc(i) |
97 |
enddo |
98 |
|
99 |
do i=1,5 !Ni-H |
100 |
read(1,*)anh(i) |
101 |
enddo |
102 |
|
103 |
do i=1,5 !H-H |
104 |
read(1,*)ahh(i) |
105 |
enddo |
106 |
do i=1,5 !C-H |
107 |
read(1,*)ach(i) |
108 |
enddo |
109 |
!********LONG INTERACTION ********** |
110 |
!do i=1,2 |
111 |
!read(1,*)a(i) |
112 |
!enddo |
113 |
close(1) |
114 |
END IF |
115 |
!************************************ |
116 |
np=45 |
117 |
nh=4 |
118 |
nc=1 |
119 |
nq=np+nh+nc |
120 |
!************************************ |
121 |
|
122 |
DO I=1,Nat |
123 |
Iat=Order(I) |
124 |
xa(I)=Geom(Iat,1) |
125 |
ya(I)=Geom(Iat,2) |
126 |
za(I)=Geom(Iat,3) |
127 |
END DO |
128 |
|
129 |
px=0.0;py=0.0;pz=0.0 |
130 |
nn=0 |
131 |
do m=-1,1 |
132 |
do n=-1,1 |
133 |
do i=1,nq |
134 |
if(m==0.and.n==0.and.i==1)mid=nn |
135 |
nn=nn+1 |
136 |
px(nn)=xa(i)+m*lat_a(1)+n*lat_b(1) |
137 |
py(nn)=ya(i)+m*lat_a(2)+n*lat_b(2) |
138 |
pz(nn)=za(i) |
139 |
ka(nn)=i;kx(nn)=m;ky(nn)=n |
140 |
enddo |
141 |
enddo |
142 |
enddo |
143 |
!***********************xyz file required for MS input |
144 |
open(123,file="111.xyz",ACCESS='APPEND') |
145 |
write(123,*)nn |
146 |
write(123,*) |
147 |
do i=1,nn |
148 |
if(ka(i)<(np+1))then |
149 |
write(123,10)'Ni',px(i),py(i),pz(i) |
150 |
elseif (ka(i)<np+5) then |
151 |
write(123,10)'H',px(i),py(i),pz(i) |
152 |
else |
153 |
write(123,10)'C',px(i),py(i),pz(i) |
154 |
10 format(a6,3f15.8) |
155 |
endif |
156 |
enddo |
157 |
close(123) |
158 |
!****************************************** |
159 |
do i=1,nq |
160 |
tmp=px(i);px(i)=px(i+mid);px(i+mid)=tmp |
161 |
tmp=py(i);py(i)=py(i+mid);py(i+mid)=tmp |
162 |
tmp=pz(i);pz(i)=pz(i+mid);pz(i+mid)=tmp |
163 |
itx=kx(i);kx(i)=kx(i+mid);kx(i+mid)=itx |
164 |
ity=ky(i);ky(i)=ky(i+mid);ky(i+mid)=ity |
165 |
enddo |
166 |
mid=0 |
167 |
!****************************************** |
168 |
nf=0;mf=0 |
169 |
do i=1,nq |
170 |
nf(i)=0 |
171 |
do j=1,nn |
172 |
temp=sqrt((px(i)-px(j))**2+(py(i)-py(j))**2+(pz(i)-pz(j))**2) |
173 |
! |
174 |
!rtemp=rlong |
175 |
if (ka(i+mid)<np+1.and.ka(j+mid)<np+1)then ! Ni-Ni |
176 |
|
177 |
rtemp=rnn |
178 |
endif |
179 |
if (ka(i+mid)<np+1.and.ka(j+mid)>np.and.ka(j+mid)<np+5)then ! Ni-H |
180 |
|
181 |
rtemp=rnh |
182 |
endif |
183 |
if (ka(i+mid)<np+1.and.ka(j+mid)>np+4) then ! Ni-C |
184 |
|
185 |
rtemp=rnc |
186 |
endif |
187 |
if (ka(i+mid)>np.and.ka(i+mid)<np+5.and.ka(j+mid)>np+4) then ! H-C |
188 |
|
189 |
rtemp=rch |
190 |
endif |
191 |
if (ka(i+mid)>np.and.ka(i+mid)<np+5.and.ka(j+mid)>np.and.ka(j+mid)<np+5)then ! H-H |
192 |
|
193 |
rtemp=rhh |
194 |
endif |
195 |
if (ka(i+mid)>np.and.ka(i+mid)<np+5.and.ka(j+mid)<np+1) then ! H-Ni |
196 |
|
197 |
rtemp=rnh |
198 |
endif |
199 |
if (ka(i+mid)>np+4.and.ka(j+mid)<np+1) then ! C-Ni |
200 |
|
201 |
rtemp=rnc |
202 |
endif |
203 |
if (ka(i+mid)>np+4.and.ka(j+mid)>np.and.ka(j+mid)<np+5) then ! C-H |
204 |
|
205 |
rtemp=rch |
206 |
endif |
207 |
|
208 |
if(temp>0.1.and.temp<rtemp)then |
209 |
nf(i)=nf(i)+1 |
210 |
mf(i,nf(i))=j |
211 |
endif |
212 |
! |
213 |
enddo |
214 |
!write(*,*)nf(i) |
215 |
enddo |
216 |
!************************************** |
217 |
!stop |
218 |
|
219 |
!*************************************Starting to calculate the sum |
220 |
yf=0.0;dvdr=0.0 |
221 |
do i=1,nq |
222 |
er=0.0;eb=0.0 |
223 |
dv=0.0;df=0.0 |
224 |
do j=1,nf(i) |
225 |
|
226 |
xi(1)=px(i); xi(2)=py(i); xi(3)=pz(i) |
227 |
xj(1)=px(mf(i,j));xj(2)=py(mf(i,j));xj(3)=pz(mf(i,j)) |
228 |
rij=sqrt((xj(1)-xi(1))**2.0+(xj(2)-xi(2))**2.0+(xj(3)-xi(3))**2.0) |
229 |
n1=ka(i)/(np+1);n2=ka(mf(i,j))/(np+1) !!! Ni 46 H 50 C |
230 |
n3=ka(i)/(np+5);n4=ka(mf(i,j))/(np+5) |
231 |
|
232 |
!**********************************Ni-Ni interaction |
233 |
! ********** |
234 |
if(n1==0.and.n3==0.and.n2==0.and.n4==0)then !Ni-Ni |
235 |
call fctNiNi(rnn,rij,fcut) |
236 |
call dfcutNiNi(rnn,rij,tf) |
237 |
eb=eb+ann(5)*exp(-2.0*ann(1)*(rij/ann(3)-1.0))*fcut |
238 |
er=er+ann(4)*exp(-1.0*ann(2)*(rij/ann(3)-1.0))*fcut |
239 |
|
240 |
!Calculation of FORCE |
241 |
do im=1,3 |
242 |
dv(i,1,im)=dv(i,1,im)+ann(4)*exp(-1.0*ann(2)*(rij/ann(3)-1.0))*fcut*(-ann(2)/ann(3))*(xi(im)-xj(im))/rij |
243 |
dv(i,2,im)=dv(i,2,im)+ann(5)*exp(-2.0*ann(1)*(rij/ann(3)-1.0))*fcut |
244 |
dv(i,3,im)=dv(i,3,im)+ann(5)*exp(-2.0*ann(1)*(rij/ann(3)-1.0))*fcut*(-2.0*ann(1)/ann(3))*(xi(im)-xj(im))/rij |
245 |
dv(ka(mf(i+mid,j)),1,im)=dv(ka(mf(i+mid,j)),1,im)+ann(4)*exp(-1.0*ann(2)*(rij/ann(3)-1.0))*fcut*(-ann(2)/ann(3))*(xj(im)-xi(im))/rij |
246 |
dv(ka(mf(i+mid,j)),2,im)=dv(ka(mf(i+mid,j)),2,im)+ann(5)*exp(-2.0*ann(1)*(rij/ann(3)-1.0))*fcut |
247 |
dv(ka(mf(i+mid,j)),3,im)=dv(ka(mf(i+mid,j)),3,im)+ann(5)*exp(-2.0*ann(1)*(rij/ann(3)-1.0))*fcut*(-2.0*ann(1)/ann(3))*(xj(im)-xi(im))/rij |
248 |
|
249 |
df(i,1,im)=df(i,1,im)+ann(4)*exp(-1.0*ann(2)*(rij/ann(3)-1.0))*tf*(xi(im)-xj(im))/rij |
250 |
df(i,2,im)=df(i,2,im)+ann(5)*exp(-2.0*ann(1)*(rij/ann(3)-1.0))*fcut |
251 |
df(i,3,im)=df(i,3,im)+ann(5)*exp(-2.0*ann(1)*(rij/ann(3)-1.0))*tf*(xi(im)-xj(im))/rij |
252 |
df(ka(mf(i+mid,j)),1,im)=df(ka(mf(i+mid,j)),1,im)+ann(4)*exp(-1.0*ann(2)*(rij/ann(3)-1.0))*tf*(xj(im)-xi(im))/rij |
253 |
df(ka(mf(i+mid,j)),2,im)=df(ka(mf(i+mid,j)),2,im)+ann(5)*exp(-2.0*ann(1)*(rij/ann(3)-1.0))*fcut |
254 |
df(ka(mf(i+mid,j)),3,im)=df(ka(mf(i+mid,j)),3,im)+ann(5)*exp(-2.0*ann(1)*(rij/ann(3)-1.0))*tf*(xj(im)-xi(im))/rij |
255 |
enddo |
256 |
! |
257 |
endif |
258 |
|
259 |
!**********************************Ni-H interaction |
260 |
! ********** |
261 |
if(n1==0.and.n3==0.and.n2==1.and.n4==0)then !Ni-H |
262 |
call fctNiH(rnh,rij,fcut) |
263 |
call dfcutNiH(rnh,rij,tf) |
264 |
eb=eb+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut |
265 |
er=er+anh(4)*exp(-1.0*anh(2)*(rij/anh(3)-1.0))*fcut |
266 |
|
267 |
!Calculation of FORCE |
268 |
do im=1,3 |
269 |
dv(i,1,im)=dv(i,1,im)+anh(4)*exp(-1.0*anh(2)*(rij/anh(3)-1.0))*fcut*(-anh(2)/anh(3))*(xi(im)-xj(im))/rij |
270 |
dv(i,2,im)=dv(i,2,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut |
271 |
dv(i,3,im)=dv(i,3,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut*(-2.0*anh(1)/anh(3))*(xi(im)-xj(im))/rij |
272 |
dv(ka(mf(i+mid,j)),1,im)=dv(ka(mf(i+mid,j)),1,im)+anh(4)*exp(-1.0*anh(2)*(rij/anh(3)-1.0))*fcut*(-anh(2)/anh(3))*(xj(im)-xi(im))/rij |
273 |
dv(ka(mf(i+mid,j)),2,im)=dv(ka(mf(i+mid,j)),2,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut |
274 |
dv(ka(mf(i+mid,j)),3,im)=dv(ka(mf(i+mid,j)),3,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut*(-2.0*anh(1)/anh(3))*(xj(im)-xi(im))/rij |
275 |
|
276 |
df(i,1,im)=df(i,1,im)+anh(4)*exp(-1.0*anh(2)*(rij/anh(3)-1.0))*tf*(xi(im)-xj(im))/rij |
277 |
df(i,2,im)=df(i,2,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut |
278 |
df(i,3,im)=df(i,3,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*tf*(xi(im)-xj(im))/rij |
279 |
df(ka(mf(i+mid,j)),1,im)=df(ka(mf(i+mid,j)),1,im)+anh(4)*exp(-1.0*anh(2)*(rij/anh(3)-1.0))*tf*(xj(im)-xi(im))/rij |
280 |
df(ka(mf(i+mid,j)),2,im)=df(ka(mf(i+mid,j)),2,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut |
281 |
df(ka(mf(i+mid,j)),3,im)=df(ka(mf(i+mid,j)),3,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*tf*(xj(im)-xi(im))/rij |
282 |
enddo |
283 |
! |
284 |
! |
285 |
endif |
286 |
|
287 |
!**********************************Ni-C interaction |
288 |
! ********** |
289 |
if(n1==0.and.n3==0.and.n2==1.and.n4==1)then !Ni-C |
290 |
call fctNiC(rnc,rij,fcut) |
291 |
call dfcutNiC(rnc,rij,tf) |
292 |
eb=eb+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut |
293 |
er=er+anc(4)*exp(-1.0*anc(2)*(rij/anc(3)-1.0))*fcut |
294 |
|
295 |
!Calculation of FORCE |
296 |
do im=1,3 |
297 |
dv(i,1,im)=dv(i,1,im)+anc(4)*exp(-1.0*anc(2)*(rij/anc(3)-1.0))*fcut*(-anc(2)/anc(3))*(xi(im)-xj(im))/rij |
298 |
dv(i,2,im)=dv(i,2,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut |
299 |
dv(i,3,im)=dv(i,3,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut*(-2.0*anc(1)/anc(3))*(xi(im)-xj(im))/rij |
300 |
dv(ka(mf(i+mid,j)),1,im)=dv(ka(mf(i+mid,j)),1,im)+anc(4)*exp(-1.0*anc(2)*(rij/anc(3)-1.0))*fcut*(-anc(2)/anc(3))*(xj(im)-xi(im))/rij |
301 |
dv(ka(mf(i+mid,j)),2,im)=dv(ka(mf(i+mid,j)),2,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut |
302 |
dv(ka(mf(i+mid,j)),3,im)=dv(ka(mf(i+mid,j)),3,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut*(-2.0*anc(1)/anc(3))*(xj(im)-xi(im))/rij |
303 |
|
304 |
df(i,1,im)=df(i,1,im)+anc(4)*exp(-1.0*anc(2)*(rij/anc(3)-1.0))*tf*(xi(im)-xj(im))/rij |
305 |
df(i,2,im)=df(i,2,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut |
306 |
df(i,3,im)=df(i,3,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*tf*(xi(im)-xj(im))/rij |
307 |
df(ka(mf(i+mid,j)),1,im)=df(ka(mf(i+mid,j)),1,im)+anc(4)*exp(-1.0*anc(2)*(rij/anc(3)-1.0))*tf*(xj(im)-xi(im))/rij |
308 |
df(ka(mf(i+mid,j)),2,im)=df(ka(mf(i+mid,j)),2,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut |
309 |
df(ka(mf(i+mid,j)),3,im)=df(ka(mf(i+mid,j)),3,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*tf*(xj(im)-xi(im))/rij |
310 |
enddo |
311 |
! |
312 |
endif |
313 |
!!**********************************H-Ni interaction |
314 |
! ********** |
315 |
if(n1==1.and.n3==0.and.n2==0.and.n4==0)then ! H-Ni |
316 |
call fctNiH(rnh,rij,fcut) |
317 |
call dfcutNiH(rnh,rij,tf) |
318 |
eb=eb+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut |
319 |
er=er+anh(4)*exp(-1.0*anh(2)*(rij/anh(3)-1.0))*fcut |
320 |
|
321 |
!Calculation of FORCE |
322 |
do im=1,3 |
323 |
dv(i,1,im)=dv(i,1,im)+anh(4)*exp(-1.0*anh(2)*(rij/anh(3)-1.0))*fcut*(-anh(2)/anh(3))*(xi(im)-xj(im))/rij |
324 |
dv(i,2,im)=dv(i,2,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut |
325 |
dv(i,3,im)=dv(i,3,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut*(-2.0*anh(1)/anh(3))*(xi(im)-xj(im))/rij |
326 |
dv(ka(mf(i+mid,j)),1,im)=dv(ka(mf(i+mid,j)),1,im)+anh(4)*exp(-1.0*anh(2)*(rij/anh(3)-1.0))*fcut*(-anh(2)/anh(3))*(xj(im)-xi(im))/rij |
327 |
dv(ka(mf(i+mid,j)),2,im)=dv(ka(mf(i+mid,j)),2,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut |
328 |
dv(ka(mf(i+mid,j)),3,im)=dv(ka(mf(i+mid,j)),3,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut*(-2.0*anh(1)/anh(3))*(xj(im)-xi(im))/rij |
329 |
|
330 |
df(i,1,im)=df(i,1,im)+anh(4)*exp(-1.0*anh(2)*(rij/anh(3)-1.0))*tf*(xi(im)-xj(im))/rij |
331 |
df(i,2,im)=df(i,2,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut |
332 |
df(i,3,im)=df(i,3,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*tf*(xi(im)-xj(im))/rij |
333 |
df(ka(mf(i+mid,j)),1,im)=df(ka(mf(i+mid,j)),1,im)+anh(4)*exp(-1.0*anh(2)*(rij/anh(3)-1.0))*tf*(xj(im)-xi(im))/rij |
334 |
df(ka(mf(i+mid,j)),2,im)=df(ka(mf(i+mid,j)),2,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*fcut |
335 |
df(ka(mf(i+mid,j)),3,im)=df(ka(mf(i+mid,j)),3,im)+anh(5)*exp(-2.0*anh(1)*(rij/anh(3)-1.0))*tf*(xj(im)-xi(im))/rij |
336 |
enddo |
337 |
! |
338 |
endif |
339 |
!!**********************************H-H interaction |
340 |
! ********** |
341 |
if(n1==1.and.n3==0.and.n2==1.and.n4==0)then !H-H |
342 |
call fctHH(rhh,rij,fcut) |
343 |
call dfcutHH(rhh,rij,tf) |
344 |
eb=eb+ahh(5)*exp(-2.0*ahh(1)*(rij/ahh(3)-1.0))*fcut |
345 |
er=er+ahh(4)*exp(-1.0*ahh(2)*(rij/ahh(3)-1.0))*fcut |
346 |
|
347 |
!Calculation of FORCE |
348 |
do im=1,3 |
349 |
dv(i,1,im)=dv(i,1,im)+ahh(4)*exp(-1.0*ahh(2)*(rij/ahh(3)-1.0))*fcut*(-ahh(2)/ahh(3))*(xi(im)-xj(im))/rij |
350 |
dv(i,2,im)=dv(i,2,im)+ahh(5)*exp(-2.0*ahh(1)*(rij/ahh(3)-1.0))*fcut |
351 |
dv(i,3,im)=dv(i,3,im)+ahh(5)*exp(-2.0*ahh(1)*(rij/ahh(3)-1.0))*fcut*(-2.0*ahh(1)/ahh(3))*(xi(im)-xj(im))/rij |
352 |
dv(ka(mf(i+mid,j)),1,im)=dv(ka(mf(i+mid,j)),1,im)+ahh(4)*exp(-1.0*ahh(2)*(rij/ahh(3)-1.0))*fcut*(-ahh(2)/ahh(3))*(xj(im)-xi(im))/rij |
353 |
dv(ka(mf(i+mid,j)),2,im)=dv(ka(mf(i+mid,j)),2,im)+ahh(5)*exp(-2.0*ahh(1)*(rij/ahh(3)-1.0))*fcut |
354 |
dv(ka(mf(i+mid,j)),3,im)=dv(ka(mf(i+mid,j)),3,im)+ahh(5)*exp(-2.0*ahh(1)*(rij/ahh(3)-1.0))*fcut*(-2.0*ahh(1)/ahh(3))*(xj(im)-xi(im))/rij |
355 |
|
356 |
df(i,1,im)=df(i,1,im)+ahh(4)*exp(-1.0*ahh(2)*(rij/ahh(3)-1.0))*tf*(xi(im)-xj(im))/rij |
357 |
df(i,2,im)=df(i,2,im)+ahh(5)*exp(-2.0*ahh(1)*(rij/ahh(3)-1.0))*fcut |
358 |
df(i,3,im)=df(i,3,im)+ahh(5)*exp(-2.0*ahh(1)*(rij/ahh(3)-1.0))*tf*(xi(im)-xj(im))/rij |
359 |
df(ka(mf(i+mid,j)),1,im)=df(ka(mf(i+mid,j)),1,im)+ahh(4)*exp(-1.0*ahh(2)*(rij/ahh(3)-1.0))*tf*(xj(im)-xi(im))/rij |
360 |
df(ka(mf(i+mid,j)),2,im)=df(ka(mf(i+mid,j)),2,im)+ahh(5)*exp(-2.0*ahh(1)*(rij/ahh(3)-1.0))*fcut |
361 |
df(ka(mf(i+mid,j)),3,im)=df(ka(mf(i+mid,j)),3,im)+ahh(5)*exp(-2.0*ahh(1)*(rij/ahh(3)-1.0))*tf*(xj(im)-xi(im))/rij |
362 |
enddo |
363 |
! |
364 |
endif |
365 |
|
366 |
|
367 |
!!**********************************H-C interaction |
368 |
! ********** |
369 |
if(n1==1.and.n3==0.and.n2==1.and.n4==1)then !H-C |
370 |
call fctCH(rch,rij,fcut) |
371 |
call dfcutCH(rch,rij,tf) |
372 |
eb=eb+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut |
373 |
er=er+ach(4)*exp(-1.0*ach(2)*(rij/ach(3)-1.0))*fcut |
374 |
|
375 |
!Calculation of FORCE |
376 |
do im=1,3 |
377 |
dv(i,1,im)=dv(i,1,im)+ach(4)*exp(-1.0*ach(2)*(rij/ach(3)-1.0))*fcut*(-ach(2)/ach(3))*(xi(im)-xj(im))/rij |
378 |
dv(i,2,im)=dv(i,2,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut |
379 |
dv(i,3,im)=dv(i,3,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut*(-2.0*ach(1)/ach(3))*(xi(im)-xj(im))/rij |
380 |
dv(ka(mf(i+mid,j)),1,im)=dv(ka(mf(i+mid,j)),1,im)+ach(4)*exp(-1.0*ach(2)*(rij/ach(3)-1.0))*fcut*(-ach(2)/ach(3))*(xj(im)-xi(im))/rij |
381 |
dv(ka(mf(i+mid,j)),2,im)=dv(ka(mf(i+mid,j)),2,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut |
382 |
dv(ka(mf(i+mid,j)),3,im)=dv(ka(mf(i+mid,j)),3,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut*(-2.0*ach(1)/ach(3))*(xj(im)-xi(im))/rij |
383 |
|
384 |
df(i,1,im)=df(i,1,im)+ach(4)*exp(-1.0*ach(2)*(rij/ach(3)-1.0))*tf*(xi(im)-xj(im))/rij |
385 |
df(i,2,im)=df(i,2,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut |
386 |
df(i,3,im)=df(i,3,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*tf*(xi(im)-xj(im))/rij |
387 |
df(ka(mf(i+mid,j)),1,im)=df(ka(mf(i+mid,j)),1,im)+ach(4)*exp(-1.0*ach(2)*(rij/ach(3)-1.0))*tf*(xj(im)-xi(im))/rij |
388 |
df(ka(mf(i+mid,j)),2,im)=df(ka(mf(i+mid,j)),2,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut |
389 |
df(ka(mf(i+mid,j)),3,im)=df(ka(mf(i+mid,j)),3,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*tf*(xj(im)-xi(im))/rij |
390 |
enddo |
391 |
! |
392 |
endif |
393 |
!!**********************************C-Ni interaction |
394 |
! ********** |
395 |
if(n1==1.and.n3==1.and.n2==0.and.n4==0)then !C-Ni |
396 |
call fctNiC(rnc,rij,fcut) |
397 |
call dfcutNiC(rnc,rij,tf) |
398 |
eb=eb+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut |
399 |
er=er+anc(4)*exp(-1.0*anc(2)*(rij/anc(3)-1.0))*fcut |
400 |
|
401 |
!Calculation of FORCE |
402 |
do im=1,3 |
403 |
dv(i,1,im)=dv(i,1,im)+anc(4)*exp(-1.0*anc(2)*(rij/anc(3)-1.0))*fcut*(-anc(2)/anc(3))*(xi(im)-xj(im))/rij |
404 |
dv(i,2,im)=dv(i,2,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut |
405 |
dv(i,3,im)=dv(i,3,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut*(-2.0*anc(1)/anc(3))*(xi(im)-xj(im))/rij |
406 |
dv(ka(mf(i+mid,j)),1,im)=dv(ka(mf(i+mid,j)),1,im)+anc(4)*exp(-1.0*anc(2)*(rij/anc(3)-1.0))*fcut*(-anc(2)/anc(3))*(xj(im)-xi(im))/rij |
407 |
dv(ka(mf(i+mid,j)),2,im)=dv(ka(mf(i+mid,j)),2,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut |
408 |
dv(ka(mf(i+mid,j)),3,im)=dv(ka(mf(i+mid,j)),3,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut*(-2.0*anc(1)/anc(3))*(xj(im)-xi(im))/rij |
409 |
|
410 |
df(i,1,im)=df(i,1,im)+anc(4)*exp(-1.0*anc(2)*(rij/anc(3)-1.0))*tf*(xi(im)-xj(im))/rij |
411 |
df(i,2,im)=df(i,2,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut |
412 |
df(i,3,im)=df(i,3,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*tf*(xi(im)-xj(im))/rij |
413 |
df(ka(mf(i+mid,j)),1,im)=df(ka(mf(i+mid,j)),1,im)+anc(4)*exp(-1.0*anc(2)*(rij/anc(3)-1.0))*tf*(xj(im)-xi(im))/rij |
414 |
df(ka(mf(i+mid,j)),2,im)=df(ka(mf(i+mid,j)),2,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*fcut |
415 |
df(ka(mf(i+mid,j)),3,im)=df(ka(mf(i+mid,j)),3,im)+anc(5)*exp(-2.0*anc(1)*(rij/anc(3)-1.0))*tf*(xj(im)-xi(im))/rij |
416 |
enddo |
417 |
! |
418 |
|
419 |
endif |
420 |
!!**********************************C-H interaction |
421 |
! ********** |
422 |
if(n1==1.and.n3==1.and.n2==1.and.n4==0)then !C-H |
423 |
call fctCH(rch,rij,fcut) |
424 |
call dfcutCH(rch,rij,tf) |
425 |
eb=eb+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut |
426 |
er=er+ach(4)*exp(-1.0*ach(2)*(rij/ach(3)-1.0))*fcut |
427 |
|
428 |
|
429 |
!Calculation of FORCE |
430 |
do im=1,3 |
431 |
dv(i,1,im)=dv(i,1,im)+ach(4)*exp(-1.0*ach(2)*(rij/ach(3)-1.0))*fcut*(-ach(2)/ach(3))*(xi(im)-xj(im))/rij |
432 |
dv(i,2,im)=dv(i,2,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut |
433 |
dv(i,3,im)=dv(i,3,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut*(-2.0*ach(1)/ach(3))*(xi(im)-xj(im))/rij |
434 |
dv(ka(mf(i+mid,j)),1,im)=dv(ka(mf(i+mid,j)),1,im)+ach(4)*exp(-1.0*ach(2)*(rij/ach(3)-1.0))*fcut*(-ach(2)/ach(3))*(xj(im)-xi(im))/rij |
435 |
dv(ka(mf(i+mid,j)),2,im)=dv(ka(mf(i+mid,j)),2,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut |
436 |
dv(ka(mf(i+mid,j)),3,im)=dv(ka(mf(i+mid,j)),3,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut*(-2.0*ach(1)/ach(3))*(xj(im)-xi(im))/rij |
437 |
|
438 |
df(i,1,im)=df(i,1,im)+ach(4)*exp(-1.0*ach(2)*(rij/ach(3)-1.0))*tf*(xi(im)-xj(im))/rij |
439 |
df(i,2,im)=df(i,2,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut |
440 |
df(i,3,im)=df(i,3,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*tf*(xi(im)-xj(im))/rij |
441 |
df(ka(mf(i+mid,j)),1,im)=df(ka(mf(i+mid,j)),1,im)+ach(4)*exp(-1.0*ach(2)*(rij/ach(3)-1.0))*tf*(xj(im)-xi(im))/rij |
442 |
df(ka(mf(i+mid,j)),2,im)=df(ka(mf(i+mid,j)),2,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*fcut |
443 |
df(ka(mf(i+mid,j)),3,im)=df(ka(mf(i+mid,j)),3,im)+ach(5)*exp(-2.0*ach(1)*(rij/ach(3)-1.0))*tf*(xj(im)-xi(im))/rij |
444 |
enddo |
445 |
! |
446 |
|
447 |
endif |
448 |
!!***************************ONE end**************** |
449 |
|
450 |
enddo |
451 |
!!******** CALCULATION ENERGY |
452 |
! |
453 |
yf=yf+er-sqrt(eb) |
454 |
!!********* |
455 |
do im=1,3 |
456 |
dvdr(i,im)=dvdr(i,im)+dv(i,1,im)-0.5/(dv(i,2,im))**0.5*dv(i,3,im) |
457 |
dvdr(i,im)=dvdr(i,im)+df(i,1,im)-0.5/(df(i,2,im))**0.5*df(i,3,im) |
458 |
do j=1,nf(i+mid) |
459 |
jm=ka(mf(i+mid,j)) |
460 |
dvdr(jm,im)=dvdr(jm,im)+dv(jm,1,im)-0.5/(dv(i,2,im))**0.5*dv(jm,3,im) |
461 |
dvdr(jm,im)=dvdr(jm,im)+df(jm,1,im)-0.5/(df(i,2,im))**0.5*df(jm,3,im) |
462 |
enddo |
463 |
enddo |
464 |
! |
465 |
enddo |
466 |
!!*****************************TWO ENDS************************** |
467 |
!***************************************Long-ranged interaction |
468 |
!do i=nq-4,nq |
469 |
! zi=pz(i+mid) !-0.3*aa*br(3,3) |
470 |
! call fct2(zshort,zlong,zi,fcut2) |
471 |
! call dfcut2(zshort,zlong,zi,tf) |
472 |
! yf=yf+fcut2*(a(6)-a(7)/zi**2.0) |
473 |
|
474 |
! dvdr(i,3)=dvdr(i,3)+fcut2*(a(7)*2.0/zi**3.0)+tf*(a(6)-a(7)/zi**2.0) |
475 |
|
476 |
!enddo |
477 |
!******************************************************************* |
478 |
v=yf |
479 |
do im=1,3 |
480 |
do jm=1,nq |
481 |
dvdr(jm,im)=dvdr(jm,im) |
482 |
enddo |
483 |
enddo |
484 |
|
485 |
!PFL: We convert dvdr into Grad |
486 |
do jm=1,nq |
487 |
Iat=Jm |
488 |
if (renum) Iat=order(jm) |
489 |
Grad(3*Iat-2:3*Iat)=dvdr(jm,1:3) |
490 |
enddo |
491 |
|
492 |
if (debug) WRITE(*,*) "EGRAD_CHAMFRE, E=",V |
493 |
|
494 |
if (debug) call Header('Egrad_chamfre OVER') |
495 |
|
496 |
!********************************************ENDENDENDENDENDENDENDEND |
497 |
return |
498 |
end subroutine egrad_chamfre |
499 |
|
500 |
!****************************************** |
501 |
!**********PARAMETERS********************** |
502 |
subroutine fctNiNi(r2,r,fcut) |
503 |
|
504 |
IMPLICIT NONE |
505 |
integer, parameter :: KINT = kind(1) |
506 |
integer, parameter :: KREAL = kind(1.0d0) |
507 |
|
508 |
REAL(KREAL) :: r2,r,fcut,r1,pi |
509 |
pi=4.0*atan(1.0) |
510 |
r1=r2-0.5 |
511 |
|
512 |
if(r<=r1)then |
513 |
fcut=1.0 |
514 |
endif |
515 |
if(r>r1.and.r<=r2)then |
516 |
fcut=(1.0+cos(pi*(r-r1)/(r2-r1)))/2.0 |
517 |
endif |
518 |
if(r>r2)then |
519 |
fcut=0.0 |
520 |
endif |
521 |
return |
522 |
end subroutine fctNiNi |
523 |
!!************ |
524 |
subroutine dfcutNiNi(r2,r,df) |
525 |
IMPLICIT NONE |
526 |
integer, parameter :: KINT = kind(1) |
527 |
integer, parameter :: KREAL = kind(1.0d0) |
528 |
REAL(KREAL) :: r, r2,df,pi,r1 |
529 |
pi=4.0*atan(1.0) |
530 |
r1=r2-0.5 |
531 |
|
532 |
if(r<=r1)then |
533 |
df=0.0 |
534 |
endif |
535 |
if(r>r1.and.r<=r2)then |
536 |
df=-pi/2.0/(r2-r1)*sin(pi*(r-r1)/(r2-r1)) |
537 |
endif |
538 |
if(r>r2)then |
539 |
df=0.0 |
540 |
endif |
541 |
return |
542 |
end subroutine dfcutNiNi |
543 |
|
544 |
|
545 |
!!************ |
546 |
subroutine fctNiH(r2,r,fcut) |
547 |
IMPLICIT NONE |
548 |
integer, parameter :: KINT = kind(1) |
549 |
integer, parameter :: KREAL = kind(1.0d0) |
550 |
|
551 |
REAL(KREAL) ::r2,r,fcut |
552 |
REAL(KREAL) ::rshort,rlong,r1,pi |
553 |
|
554 |
rshort=2.7 |
555 |
rlong=3.0 |
556 |
pi=4.0*atan(1.0) |
557 |
r1=rshort |
558 |
r2=rlong |
559 |
if(r<=r1)then |
560 |
fcut=1.0 |
561 |
endif |
562 |
if(r>r1.and.r<=r2)then |
563 |
fcut=(1.0+cos(pi*(r-r1)/(r2-r1)))/2.0 |
564 |
endif |
565 |
if(r>r2)then |
566 |
fcut=0.0 |
567 |
endif |
568 |
return |
569 |
end subroutine fctNiH |
570 |
!!********** |
571 |
|
572 |
subroutine dfcutNiH(r2,r,df) |
573 |
|
574 |
|
575 |
IMPLICIT NONE |
576 |
integer, parameter :: KINT = kind(1) |
577 |
integer, parameter :: KREAL = kind(1.0d0) |
578 |
|
579 |
|
580 |
REAL(KREAL) ::r2,r,df |
581 |
REAL(KREAL) ::rshort,rlong,r1,pi |
582 |
|
583 |
rshort=2.7 |
584 |
rlong=3.0 |
585 |
pi=4.0*atan(1.0) |
586 |
r1=rshort |
587 |
r2=rlong |
588 |
if(r<=r1)then |
589 |
df=0.0 |
590 |
endif |
591 |
if(r>r1.and.r<=r2)then |
592 |
df=-pi/2.0/(r2-r1)*sin(pi*(r-r1)/(r2-r1)) |
593 |
endif |
594 |
if(r>r2)then |
595 |
df=0.0 |
596 |
endif |
597 |
return |
598 |
end subroutine dfcutNiH |
599 |
|
600 |
!!************ |
601 |
subroutine fctNiC(r2,r,fcut) |
602 |
|
603 |
IMPLICIT NONE |
604 |
integer, parameter :: KINT = kind(1) |
605 |
integer, parameter :: KREAL = kind(1.0d0) |
606 |
|
607 |
|
608 |
REAL(KREAL) ::r2,r,fcut |
609 |
REAL(KREAL) ::rshort,rlong,r1,pi |
610 |
|
611 |
rshort=3.2 |
612 |
rlong=3.5 |
613 |
pi=4.0*atan(1.0) |
614 |
r1=rshort |
615 |
r2=rlong |
616 |
if(r<=r1)then |
617 |
fcut=1.0 |
618 |
endif |
619 |
if(r>r1.and.r<=r2)then |
620 |
fcut=(1.0+cos(pi*(r-r1)/(r2-r1)))/2.0 |
621 |
endif |
622 |
if(r>r2)then |
623 |
fcut=0.0 |
624 |
endif |
625 |
return |
626 |
end subroutine fctNiC |
627 |
|
628 |
!!*********** |
629 |
subroutine dfcutNiC(r2,r,df) |
630 |
|
631 |
IMPLICIT NONE |
632 |
integer, parameter :: KINT = kind(1) |
633 |
integer, parameter :: KREAL = kind(1.0d0) |
634 |
|
635 |
|
636 |
REAL(KREAL) ::r2,r,df |
637 |
REAL(KREAL) ::rshort,rlong,r1,pi |
638 |
|
639 |
rshort=3.2 |
640 |
rlong=3.5 |
641 |
pi=4.0*atan(1.0) |
642 |
r1=rshort |
643 |
r2=rlong |
644 |
if(r<=r1)then |
645 |
df=0.0 |
646 |
endif |
647 |
if(r>r1.and.r<=r2)then |
648 |
df=-pi/2.0/(r2-r1)*sin(pi*(r-r1)/(r2-r1)) |
649 |
endif |
650 |
if(r>r2)then |
651 |
df=0.0 |
652 |
endif |
653 |
return |
654 |
end subroutine dfcutNiC |
655 |
|
656 |
!!************ |
657 |
subroutine fctCH(r2,r,fcut) |
658 |
|
659 |
|
660 |
IMPLICIT NONE |
661 |
integer, parameter :: KINT = kind(1) |
662 |
integer, parameter :: KREAL = kind(1.0d0) |
663 |
|
664 |
|
665 |
REAL(KREAL) ::r2,r,fcut |
666 |
REAL(KREAL) ::rshort,rlong,r1,pi |
667 |
|
668 |
rshort=2.1 |
669 |
rlong=3.2 |
670 |
pi=4.0*atan(1.0) |
671 |
r1=rshort |
672 |
r2=rlong |
673 |
if(r<=r1)then |
674 |
fcut=1.0 |
675 |
endif |
676 |
if(r>r1.and.r<=r2)then |
677 |
fcut=(1.0+cos(pi*(r-r1)/(r2-r1)))/2.0 |
678 |
endif |
679 |
if(r>r2)then |
680 |
fcut=0.0 |
681 |
endif |
682 |
return |
683 |
end subroutine fctCH |
684 |
!!***************** |
685 |
|
686 |
subroutine dfcutCH(r2,r,df) |
687 |
|
688 |
|
689 |
IMPLICIT NONE |
690 |
integer, parameter :: KINT = kind(1) |
691 |
integer, parameter :: KREAL = kind(1.0d0) |
692 |
|
693 |
|
694 |
REAL(KREAL) ::r2,r,df |
695 |
REAL(KREAL) ::rshort,rlong,r1,pi |
696 |
|
697 |
rshort=2.1 |
698 |
rlong=3.2 |
699 |
pi=4.0*atan(1.0) |
700 |
r1=rshort |
701 |
r2=rlong |
702 |
if(r<=r1)then |
703 |
df=0.0 |
704 |
endif |
705 |
if(r>r1.and.r<=r2)then |
706 |
df=-pi/2.0/(r2-r1)*sin(pi*(r-r1)/(r2-r1)) |
707 |
endif |
708 |
if(r>r2)then |
709 |
df=0.0 |
710 |
endif |
711 |
return |
712 |
end subroutine dfcutCH |
713 |
!!************ |
714 |
subroutine fctHH(r2,r,fcut) |
715 |
|
716 |
IMPLICIT NONE |
717 |
integer, parameter :: KINT = kind(1) |
718 |
integer, parameter :: KREAL = kind(1.0d0) |
719 |
|
720 |
|
721 |
REAL(KREAL) ::r2,r,fcut,r1,pi |
722 |
pi=4.0*atan(1.0) |
723 |
r1=r2-1.1 |
724 |
if(r<=r1)then |
725 |
fcut=1.0 |
726 |
endif |
727 |
if(r>r1.and.r<=r2)then |
728 |
fcut=(1.0+cos(pi*(r-r1)/(r2-r1)))/2.0 |
729 |
endif |
730 |
if(r>r2)then |
731 |
fcut=0.0 |
732 |
endif |
733 |
return |
734 |
end subroutine fctHH |
735 |
!!************ |
736 |
subroutine dfcutHH(r2,r,df) |
737 |
|
738 |
|
739 |
IMPLICIT NONE |
740 |
integer, parameter :: KINT = kind(1) |
741 |
integer, parameter :: KREAL = kind(1.0d0) |
742 |
|
743 |
|
744 |
REAL(KREAL) ::r2,r,df,r1,pi |
745 |
pi=4.0*atan(1.0) |
746 |
r1=r2-1.1 |
747 |
if(r<=r1)then |
748 |
df=0.0 |
749 |
endif |
750 |
if(r>r1.and.r<=r2)then |
751 |
df=-pi/2.0/(r2-r1)*sin(pi*(r-r1)/(r2-r1)) |
752 |
endif |
753 |
if(r>r2)then |
754 |
df=0.0 |
755 |
endif |
756 |
return |
757 |
end subroutine dfcutHH |
758 |
|
759 |
!!*********************LONG INTERACTION |
760 |
|
761 |
subroutine dfcut2(zshort,zlong,r,df) |
762 |
|
763 |
|
764 |
IMPLICIT NONE |
765 |
integer, parameter :: KINT = kind(1) |
766 |
integer, parameter :: KREAL = kind(1.0d0) |
767 |
|
768 |
|
769 |
REAL(KREAL) ::zshort,zlong,r,df,pi, r1, r2 |
770 |
|
771 |
pi=4.0*atan(1.0) |
772 |
|
773 |
r1=zshort |
774 |
r2=zlong |
775 |
|
776 |
if(r<=r1)then |
777 |
df=0.0 |
778 |
endif |
779 |
if(r>r1.and.r<=r2)then |
780 |
df=pi/2.0/(r2-r1)*sin(pi*(r-r1)/(r2-r1)) |
781 |
endif |
782 |
if(r>r2)then |
783 |
df=0.0 |
784 |
endif |
785 |
|
786 |
return |
787 |
end subroutine dfcut2 |
788 |
|
789 |
subroutine fct2(zshort,zlong,r,fcut) |
790 |
|
791 |
IMPLICIT NONE |
792 |
integer, parameter :: KINT = kind(1) |
793 |
integer, parameter :: KREAL = kind(1.0d0) |
794 |
|
795 |
|
796 |
REAL(KREAL) ::zshort,zlong,r,fcut,pi,r1,r2 |
797 |
|
798 |
pi=4.0*atan(1.0) |
799 |
|
800 |
r1=zshort |
801 |
r2=zlong |
802 |
|
803 |
if(r<=r1)then |
804 |
fcut=0.0 |
805 |
endif |
806 |
if(r>r1.and.r<=r2)then |
807 |
fcut=1.0-(1.0+cos(pi*(r-r1)/(r2-r1)))/2.0 |
808 |
endif |
809 |
if(r>r2)then |
810 |
fcut=1.0 |
811 |
endif |
812 |
|
813 |
return |
814 |
end subroutine fct2 |
815 |
|