- 积分
- 0
- 注册时间
- 2007-3-28
- 仿真币
-
- 最后登录
- 1970-1-1
|
模型是这样的: 在一个边长为35的正方体晶格中心有一个大离子,其表面吸附有10个小离子,大离子半径为5,小离子半径为0.5,晶格其他空间内随机分布1000个溶剂粒子,半径为0.5. 它们间的约束条件为小离子-小离子之间的距离应大于1.122462,大离子-溶剂粒子之间距离大于5.622462,溶剂粒子-溶剂粒子之间距离大于1.122462.以下是我编的程序(其中一部分). 调试后出现的问题是它们之间的约束不正确. 谁帮我看一下,好吗? 谢谢!
g=1.122462
nparticle=1000 !1000个溶剂粒子
r(1)=(4.5+g)*(4.5+g) !5.622462
r(2)=g*g
r(3)=g*g
xbox=35 !晶格尺寸
ybox=35
zbox=35
x(1)=0
y(1)=0
z(1)=0
count=1
C 小离子在球面上的坐标
call seed(RND$TIMESEED)
do 200, i=1,10
count=count+1
Call random(ran)
Call random(rand)
x(count)=5.5*sin(3.1415926*ran)*cos(2*3.1415926*rand)
y(count)=5.5*sin(3.1415926*ran)*sin(2*3.1415926*rand)
z(count)=5.5*cos(3.1415926*ran)
200 continue
C 溶剂粒子在晶格中随机分布
count=11
do 100, i=1, nparticle
count=count+1
Call random(ran)
x(count)=35*ran
Call random(ran)
y(count)=35*ran
Call random(ran)
z(count)=35*ran
100 continue
n=count
C 开始约束距离
do s=3,11
140 do k=2,s-1
d4=(x(s)-x(k))**2+(y(s)-y(k))**2+(z(s)-z(k))**2
if (d4.le.r(2)) then
Call random(ran)
Call random(rand)
x(s)=5.5*sin(3.1415926*ran)*cos(2*3.1415926*rand)
y(s)=5.5*sin(3.1415926*ran)*sin(2*3.1415926*rand)
z(s)=5.5*cos(3.1415926*ran)
goto 140
else
endif
enddo
enddo
do i=12,n
170 do k=2,i-1
d2=(x(i)-x(k))**2+(y(i)-y(k))**2+(z(i)-z(k))**2
d1=(x(i)-x(1))**2+(y(i)-y(1))**2+(z(i)-z(1))**2
if ((d2.le.r(2)).AND.(d1.le.r(1))) then
Call random(ran)
x(i)=35*ran
Call random(ran)
y(i)=35*ran
Call random(ran)
z(i)=35*ran
goto 170
else
endif
enddo
enddo
C 将系统坐标原点置于原子所在区域的中心
do 190, i=12,n
x(i)=x(i)-17.5
y(i)=y(i)-17.5
z(i)=z(i)-17.5
190 continue
C 输出距离,发现距离还是没有约束好
do i=1,n
rxi=x(i)
ryi=y(i)
rzi=z(i)
do j=i+1, n
xr=rxi-x(j)
yr=ryi-y(j)
zr=rzi-z(j)
rij_2=xr*xr+yr*yr+zr*zr
rij = sqrt(rij_2)
if(rij_2.le.r(2)) then !(这边我输出距离时发现没有约束)
write(*,*)rij_2,i,j
pause 'n'
endif
enddo
enddo |
|