Statistiques
| Révision :

root / src / egrad_chamfre.f90 @ 4

Historique | Voir | Annoter | Télécharger (25,84 ko)

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