我刚刚开始使用 dl_poly classic 进行分子动力学模拟。它会生成一个 HISTORY 文件,该文件记录应用边界条件后的轨迹。现在,在这里我不明白,我应该如何使用折叠轨迹计算扩散率。其次,在 dl_poly 中有一种方法可以展开轨迹,可能是使用他们可能已经编写的一些计数器(即在不更改源代码的情况下进行操作)。
但是,根据此处基于问题的答案之一,我编写了一个代码来展开折叠轨迹(我试图通过我自己编写的用于模拟氩液而不是 dl_poly 的程序来验证这一点) -
open(unit=11,file='test.out',status='unknown')
rx(:,1) = x(:,1)
do j=2,tsteps
do i=1,nm
tmp1 = x(i,j-1) - x(i,j) + boxl/2.d0
tmp1 = tmp1 - boxL*floor(tmp1/boxL)
tmp2 = boxL/2.d0 - tmp1
rx(i,j) = rx(i,j-1) + tmp2
write(11,*) i,j,x(i,j),ox(i,j),rx(i,j),ox(i,j)-rx(i,j)
end do
end do
在上面的程序中,x(i,j)是折叠坐标,ox(i,j)是已经存在的展开坐标(这是我编写的模拟程序的输出),rx(i,j)是我从 展开的坐标x(i,j),i对应于粒子并且j对应于时间步长。
我在使用上述程序时面临的问题是,在某些情况下,我得到的实际展开坐标与实际展开坐标(即 和 之间+boxl)存在 差异-boxlox(i,j)rx(i,j)
这是我用来写下这个逻辑的答案,但我也可能写错了。