【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命令的类型有 nvttemp/berendsenlangevin 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计算。

使用限制

要使用该命令,在编译lammps时,需要安装REPLICA包。

相关命令

variableprdneb

标签: lammps, lammps翻译

相关文章推荐

添加新评论 (无需注册,可直接评论)

已有 2 条评论

  1. 上善若水nudt

    楼主你好!说实话真的太佩服你了,对于我这种菜鸟级别的初学者,您的文章真的帮助很大,捐钱我也心服口服,只为支持楼主的辛苦工作!希望楼主要好好坚持办下去,我会经常来逛的,也希望多与楼主交流,学习!再次表示感激!!
    另外,temper命令在索引中好像还没添加超链接,if命令页面找不到。

    1. 谢谢支持!也谢谢你的反馈,我会尽快修正。