【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/spatial, fix thermal/conductivity默认设置
swap=1, vtarget = INF.参考文献
- (Muller-Plathe) Muller-Plathe, Phys Rev E, 59, 4894-4898 (1999).
- (Maginn) Kelkar, Rafferty, Maginn, Siepmann, Fluid Phase Equilibria, 260, 218-231 (2007).