【LAMMPS翻译系列】fix thermal/conductivity命令
fix thermal/conductivity命令使用Muller-Plathe算法,每N步交换模拟盒子中不同区域的两个颗粒的动能。可用于计算热导。
使用语法
fix ID group-ID thermal/conductivity N edim Nbin keyword value ...
- ID:fix命令的ID
- group-ID:fix命令所起作用组的ID
- thermal/conductivity:该fix命令的类型名
- N:每N步交换动能
- edim = x or y or z ——动能交换的方向
- Nbin = 交换方向edim上模拟盒子的层数
- keyword = swap 交换的原子数
使用举例
fix 1 all thermal/conductivity 100 z 20 fix 1 all thermal/conductivity 50 z 20 swap 2
使用介绍
该命令是使用Muller-Plathe算法,每N步交换模拟盒子中不同区域的两个颗粒的动能。这样做可以在体系中产生一个温度梯度,从而可以用来计算流体的热导。这个算法有时也被称为逆非平衡MD法(reverse NEMD)。之所以这样叫是因为一般的NEMD方法是通过对体系施加温度梯度,进而产生热流,然后对热流进行测量,而Muller-Plathe法这是施加热流,温度梯度则是体系响应的结果。
参考命令compute heat/flux了解如何使用Green-Kubo方法计算热导。
模拟盒子会沿着edim所指定的方向被分为Nbin层,第1层是盒子在该方向的下边缘,第Nbin层是盒子在该方向的上边缘。每N步,Nswap对原子会按着下面的方式进行交换:
- 只有在fix group中的原子才在被考虑的范围。
- 第1层中最热的Nswap个原子和中间层[下面有介绍]中最冷的Nswap个原子会被选中。
- 这两组原子是相互配对的,并对它们的速度进行交换。
- 假设他们的质量是相同的,那么这样做就实现了快速交换它们的动能。
- 随着时间的推移,这种做法就会在体系中造成温度梯度。
- 通过使用其他命令对温度进行测量,并将沿着edim方向的温度曲线写入到文件中,如下例所示。
compute ke all ke/atom variable temp atom c_ke/1.5 fix 3 all ave/spatial 10 100 1000 z lower 0.05 v_temp & file tmp.profile units reduced
默认情况下,Nswap=1。使用可选关键字swap可以修改这个默认值。通过合适的设置参数Nswap和交换频率N,可以在很大的范围内调节热流量,动能交换值也能更大或更平滑。
上面提到的中间层是指第Nbin/2 + 1 层。假如Nbin=20,那么两个交换层就是第1层和第11层。在周期性边界条件下,这两层可以看成被相同的距离分隔,所以会产生对称的温度曲线。这也是为何Nbin只能取偶数的原因。
该fix命令也可以计算通过交换原子而带来的总动能的交换量,并将其输出。将该量除以时间和模拟盒子的截面积就可以得到热流。热流与温度曲线斜率的比值正比于流体的热导。更多细节可以参考Muller-Plathe的论文。
注意1:如果你的体系在热流的方向是周期性的,那么这种流动会沿着两个方向进行。这就是说,某一个方向的有效热流量需要将总热流量除以2。LAMMPS在统计动能的时候并不会检查你的体系是否是周期性的,所以你必须根据你的体系自己确定这一点,并将其考虑到你的结果中。
注意2:在平衡后,如果你观察到的温度梯度不是线性的,那么可能的原因是你的能量交换过程太快了,从而产生了非线性的响应。在这种情况下,你计算的热导可能就不准确,需要调整参数Nevery。
Restart, fix_modify, output, run start/stop, minimize相关信息
- 该fix的有关信息不会写入二进制重启动文件,fix_modify的选项与该fix没有关系。
- 该fix命令会计算出一个能够被多种输出命令使用的全局标量。这个标量就是模拟盒子在edim方向上最底层与中间层累积交换的动能。在fix命令定义的时候,该量被设置为0,然后每N步进行一次累积计算。该标量是能量单位。该fix命令计算这个标量的值是“intensive”。
- 该fix的参数不能用在run命令的start/stop关键字中。
- 该fix在能量最小化时不起作用。
使用限制
该fix命令是MISC包的一部分,只有在编译LAMMPS的时候安装了这个包才可以使用该命令。
交换过程中的动量和动能都是保守的,即使所交换原子的能量不相等。因此你不需要对体系进行恒温。如果你要使用恒温,你最好只施加在非交换方向上。
虽然LAMMPS不会检查,但是你也不应该使用该fix命令来交换受约束分子( fix shake or fix rigid)如中原子的动能。因为这种约束会改变说交换的动量值。但是,你可以用在自由分子上。可以参考Zhang的文章。
在的模拟体系中,如果背景溶剂包含了数量巨大的颗粒或分子,你可以只交换溶剂颗粒的动能。
相关命令
fix ave/spatial, fix viscosity, compute heat/flux
默认设置
swap=1。
参考文献
- (Muller-Plathe) Muller-Plathe, J Chem Phys, 106, 6082 (1997).
- (Zhang) Zhang, Lussetti, de Souza, Muller-Plathe, J Phys Chem B, 109, 15060-15067 (2005).
仅有一条评论
老师您好!抱歉打扰您了,请问一下关于这一块该:fix命令也可以计算通过交换原子而带来的总动能的交换量,并将其输出。将该量除以时间和模拟盒子的截面积就可以得到热流。热流与温度曲线斜率的比值正比于流体的热导。
这个交换原子而带来的总动能的交换量怎么求呢,或者说thermal/conductivity就是总能量的交换量吗,那我要怎么样输出得到这个值呢?