【LAMMPS翻译系列】temper命令
temper命令使用一个体系的多个拷贝,运行并行调整计算[parallel tempering](或叫拷贝交换模拟[replica exchange simulation])。
使用语法
temper N M temp fix-ID seed1 seed2 index
- N = 运行过程总步数
- M = 每M个时间步尝试进行temper交换
- temp = 每个拷贝的初始温度值
- fix-ID = 运行过程中用于控制温度的fix命令的ID
- seed1 = 随机数,用于决定交换哪两个拷贝的温度
- seed2 = 随机数,决定Metropolis交换的Boltzmann因子
- index = [可选] 重启动时每个拷贝要使用的温度
使用举例
temper 100000 100 $t tempfix 0 58728 temper 40000 100 $t tempfix 0 32285 $w
使用介绍
该命令使用一个体系的多个拷贝[replica],运行并行调整[parallel tempering]计算(或叫拷贝交换模拟[replica exchange simulation])。至少需要指定2个拷贝。每一个拷贝会在一个处理区[partition]上运行。一个处理区可以由一个或多个处理器[processor]构成。处理器分区是在运行程序时,通过命令行参数-partition设置的。如果你安装了MPI,那么你可以运行拷贝数多于处理器数的模拟。比如说你实际上只有1个或2个处理器,但因为你安装了MPI,你就可以运行10个拷贝的模拟。当然,这样做的效率显然低于在一个或多个处理器上只运行1个拷贝。
每个拷贝可以通过fix-ID所指定的fix命令控制在不同的温度。可以使用的fix命令的类型有 nvt, temp/berendsen, langevin and temp/rescale。期望温度可以由fix命令的temp参数设置。通常会在fix命令之前,将temp设置为一个变量,这样做可以将不同处理区设置为不同的温度。下面是一个使用例子:
variable t world 300.0 310.0 320.0 330.0 fix myfix all nvt $t $t 100.0 temper 100000 100 $t myfix 3847 58382
这里定义了4个温度,并将它们分配到不同处理区上的拷贝,再使用temper命令在这些拷贝间进行调整[tempering]。
参数N设置了temper模拟过程总的时间步数,参数M设置临近拷贝间进行温度交换的时间步频率。如果将参数seed1设置为0,程序会在奇数和偶数对间尝试进行交换;如果将seed1设置为非零,那么所要尝试进行交换的拷贝是相对随机的,seed1为该随机过程的种子数。[之所以说是尝试进行交换,是因为并不是每一次交换都会进行。] 只有当交换过程满足Boltzmann-weighted Metropolis criterion(使用seed2作为随机数种子),交换才会进行。
在temper模拟运行的过程中,每个拷贝都会产生一个log文件和一个screen文件。默认情况下,这些文件的文件名是log.lammps.M和screen.M,其中M是拷贝的编号,从0到N-1,其中N是拷贝数。
主log文件和screen文件会按着设置的热力学输出频率,输出每个拷贝的温度信息。下面的例子是16个拷贝的模拟输出:
Running on 16 partitions of processors Step T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 T15 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 500 1 0 3 2 5 4 6 7 8 9 10 11 12 13 14 15 1000 2 0 4 1 5 3 6 7 8 9 10 11 12 14 13 15 1500 2 1 4 0 5 3 6 7 9 8 10 11 12 14 13 15 2000 2 1 3 0 6 4 5 7 10 8 9 11 12 14 13 15 2500 2 1 3 0 6 4 5 7 11 8 9 10 12 14 13 15 ...
这些列的标题从T0到TN-1,表示将要分配给不同拷贝的温度值。这些列中的数字代表分配给相应拷贝的温度值。举个例子,第4列(T3)、时间步为2500步时对应的数字是0,它的意思是将第4个拷贝温度设为0,也就是最低的温度值。你可以通过对比第N列的屏幕输出和文件log.lammps.N或screen.N中的相应数据验证这一点。
temper命令中最后一个参数index是可选的,用于重启动temper模拟。index的值代表在写入重启动文件所对应的那个时间步,每个拷贝的温度值。很明显,该参数必须是变量,这样才能保证每个处理区都能够读入正确的值。并且要将该变量设置为log文件中在重启动前一步,代表每个拷贝温度的N个数值。比如,在一个包括5个拷贝的模拟中,如果log文件中有下面的输出:
500000 2 4 0 1 3
那么,将变量设置为
variable w world 2 4 0 1 3
这个变量$w就可以用作temper命令的最后一个参数,用来重启动这个temper计算。
已有 2 条评论
楼主你好!说实话真的太佩服你了,对于我这种菜鸟级别的初学者,您的文章真的帮助很大,捐钱我也心服口服,只为支持楼主的辛苦工作!希望楼主要好好坚持办下去,我会经常来逛的,也希望多与楼主交流,学习!再次表示感激!!
另外,temper命令在索引中好像还没添加超链接,if命令页面找不到。
谢谢支持!也谢谢你的反馈,我会尽快修正。