【LAMMPS翻译系列】fix viscosity命令

fix viscosity命令使用Muller-Plathe算法,每N步交换模拟盒子中不同区域的两个粒子的动量。可用于计算流体的粘度。

使用语法

fix ID group-ID viscosity N vdim pdim Nbin keyword value ...
  • ID:fix命令的ID
  • group-ID:fix命令所起作用组的ID
  • viscosity:该fix命令的类型名
  • N:每N步交换动量
  • vdim = x or y or z  -- 要交换的动量分量所在的方向
  • pdim = x or y or z  -- 要交换的动量所在的方向
  • Nbin = 交换方向pdim上模拟盒子的层数
  • keyword = swap or target
      swap value = Nswap -- 每N步交换的粒子数
      vtarget value = V or INF -- 目标速度,用于选取交换粒子(velocity units)

使用举例

fix 1 all viscosity 100 x z 20
fix 1 all viscosity 50 x z 20 swap 2 vtarget 1.5

使用介绍

该命令是使用Muller-Plathe算法,每N步交换模拟盒子中不同区域的两个粒子的动量。这样做可以在体系中产生一个剪切速率曲线,从而可以用来计算流体的粘度。这个算法有时也被称为逆非平衡MD法(reverse NEMD)。之所以这样叫是因为一般的NEMD方法是通过对体系施加剪切速率曲线,然后对应力张量的非对角元素进行测量(正比于动量通量momentum flux),而Muller-Plathe法这是施加动量通量,剪切速率曲线则是体系响应的结果。

模拟盒子会沿着pdim所指定的方向被分为Nbin层,第1层是盒子在该方向的下边缘,第Nbin层是盒子在该方向的上边缘。每N步,Nswap对原子会按着下面的方式进行交换:

  • 只有在fix group中的原子才在被考虑的范围。
  • 第一层中在vdim方向具有正速度分量,并且速度大小接近于vtarget所设定V值的Nswap个原子被选定。类似地,中间层[下面有介绍]中在vdim方向具有负的速度分量,并且速度大小值接近于vtarget所设定V值的Nswap个原子也被选定。
  • 这两组原子是相互配对的,并对它们vdim方向的动量进行交换。
  • 假设他们的质量是相同的,那么这样做就实现了快速交换它们的动能。
  • 随着时间的推移,这种操作就会在体系中造成剪切速率曲线。
  • 通过使用其他命令对该剪切速率曲线进行测量,并将其写入到文件中,如下例所示。
fix f1 all ave/spatial 100 10 1000 z lower 0.05 vx &
    file tmp.profile units reduced
默认情况下,Nswap=1,vtarget=INF。使用可选关键字swap和vtarget可以修改其默认值。当vtarget=INF时,一个或多个具有最大正速度分量和负速度分量的原子会被选中。通过合适的设置参数Nswap、vtarget和交换频率N,可以在很大的范围内调节动量通量,动量交换值也能更大或更平滑。

上面提到的中间层是指第Nbin/2 + 1 层。假如Nbin=20,那么两个交换层就是第1层和第11层。在周期性边界条件下,这两层可以看成被相同的距离分隔,所以会产生对称的速度曲线。这也是为何Nbin只能取偶数的原因。

该fix命令也可以计算通过交换原子速度而带来的总动量的交换量,并将其输出。将该量除以时间和模拟盒子的截面积就可以得到动量通量。动量通量与剪切速度曲线斜率的比值正比于流体的粘度。更多细节可以参考Muller-Plathe的论文。

注意1:如果你的体系在动量通量的方向上是周期性的,那么这种流动会沿着两个方向进行。这就是说,某一个方向的有效热流量需要将总热流量除以2。LAMMPS在统计动能的时候并不会检查你的体系是否是周期性的,所以你必须根据你的体系自己确定这一点,并将其考虑到你的结果中。

注意2:在平衡后,如果你观察到的温度梯度不是线性的,那么可能的原因是你的能量交换过程太快了,从而产生了非线性的响应。在这种情况下,你计算的粘度可能就不准确,需要调整参数Nevery。

另外一种计算粘度的方法是使用NEMD方法进行模拟。这种方法会使用fix deform命令对模拟盒子进行变形,因此不能对一个带电荷的体系使用PPPM solver,这是因为PPPM目前还不支持非正交模拟盒子。但对于fix viscosity就不存在这个问题,因为该命令可以保证盒子的正交性。

Restart, fix_modify, output, run start/stop, minimize相关信息

  • 该fix的有关信息不会写入二进制重启动文件,fix_modify的选项与该fix没有关系。
  • 该fix命令会计算出一个能够被多种输出命令使用的全局标量。这个标量就是模拟盒子在pdim方向上最底层与中间层累积交换的动量。在fix命令定义的时候,该量被设置为0,然后每N步进行一次累积计算。该标量是动量单位=mass*velocity。该fix命令计算这个标量的值是“intensive”。
  • 该fix的参数不能用在run命令的start/stop关键字中。
  • 该fix在能量最小化时不起作用。

使用限制

该fix命令是MISC包的一部分,只有在编译LAMMPS的时候安装了这个包才可以使用该命令。

交换过程中的动量和动能都是保守的,即使所交换原子的能量不相等。因此你不需要对体系进行恒温。如果你要使用恒温,你最好只施加在非交换方向上。

虽然LAMMPS不会检查,但是你也不应该使用该fix命令来交换受约束分子( fix shake or fix rigid)如中原子的动能。因为这种约束会改变说交换的动量值。但是,你可以用在自由分子上。可以参考Maginn的文章。

在的模拟体系中,如果背景溶剂包含了数量巨大的颗粒或分子,你可以只交换溶剂颗粒的动能。

相关命令

fix ave/spatialfix thermal/conductivity

默认设置

swap=1, vtarget = INF.

参考文献

  1. (Muller-Plathe) Muller-Plathe, Phys Rev E, 59, 4894-4898 (1999).
  2. (Maginn) Kelkar, Rafferty, Maginn, Siepmann, Fluid Phase Equilibria, 260, 218-231 (2007).

标签: lammps, lammps翻译

相关文章推荐

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