root / src / egrad_chamfre.f90 @ 7
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 |