fix命令简述及列表总结
LAMMPS中对模拟原子和盒子的操作基本上都需要利用fix命令来实现。fix本义为修理,该命令除了实现基本的NVE,NPT等系综的求解,而且还可以实现改变原子受力,增加约束,沉积原子和模拟盒子变形等操作,掌握fix命令对利用LAMMPS进行分子动力学模拟是非常重要的。
fix 命令介绍
基本语法
fix ID group-ID style args
ID:用户指定的fix的的名字
group-ID:fix命令应用到一组原子的名字
style:fix命令的类型,根据需要选择
args:特定类型的参数
举例
fix 1 all nve
fix 3 all nvt temp 300.0 300.0 0.01
fix mine top setforce 0.0 0.0 0.0
说明
-
设置一个fix命令并应用到一组原子上。在LAMMPS中,fix可以是任何在最小化或时间步中应用到系统上的一个“操作”。例如,利用fix命令可以按照系综分布对原子的位置和速度进行更新,控制系统的温度,给特定的原子施加力,计算诊断等等。在LAMMPS中目前有上百个fix的类型,并且新的fix类型也在不断增加。
-
fix在一个时间步中可能在不同的阶段起作用,如果两个fix在时间步的同一个阶段起作用,这两个fix会按照in文件中的顺序依次执行。
-
fix的名字ID只能包括字母,数字和下划线。
-
利用unfix命令可以删除一个fix。unfix是唯一关闭fix命令的方法。指定一个新的相似类型的fix并不会使第一个fix命令失去效果。例如,在一个in文件中,同时使用了fix nve命令和fix nvt命令,系统中的原子将进行两次速度和位置的更新。
-
再次指定一个与原有fix的类型和ID完全相同的fix会把第一个fix删除。这样编程就相当于使用了unfix命令之后,再使用fix命令。注意,如果这样编程,新的fix也将不具备原有fix的由fix_modify指定的其他变化。
-
利用fix_modify可以改变某些fix中的参数设置。
-
某些fix命令会把系统当前的状态放到restart文件中,这样用户就可以使用restart命令或write_restart命令以当前状态重启仿真。
- fix命令会在时间步中的不同过程中执行相关的操作。如果有2个或多个fix命令作用于时间步中的同一过程,它们会按着在输入脚本中定义的顺序依次被激活。
-
fix命令也会产生一些计算变量,用户可以访问这些计算变量。fix产生的变量有三种类型,全局的(global),每个原子(per-atom)的或局部的(local),每种类型的变量都有可能是标量,向量或矩阵。其访问方法如下表所示:
f_ID |
标量,或整个向量和矩阵 |
f_ID[I] |
向量中的第I个元素或矩阵中的第I列 |
f_ID[I][J] |
矩阵中的一个元素 |
fix 命令列表
在LAMMPS官方文件中,每一种fix都有专门的介绍,以下表格仅简单列出每种fix的作用,在具体使用时,需要参考manual文件进行使用。
fix命令类型 |
简要说明 |
adapt |
在模拟进行时改变模拟的参数 |
addforce |
给每个原子施加一个力 |
append/atoms |
模拟中在晶格点上增加原子 |
atom/swap |
按蒙特卡洛算法交换原子 |
aveforce |
为每个原子施加一个平均力 |
ave/atom |
计算单原子的时间平均量 |
ave/chunk |
计算一块体系的时间平均量 |
ave/correlate |
计算输出时间相关性 |
ave/histo |
计算输出时间平均的直方图 |
ave/time |
计算输出全局量的时间平均 |
balance |
进行动态平衡各个核的原子数 |
bond/break |
在模拟中打断键合 |
bond/create |
在模拟中创建键合 |
bond/swap |
蒙特卡洛算法交换键合 |
box/relax |
在能量最小化过程中驰豫盒子 |
deform |
在模拟中改变盒子的大小和形状 |
deposit |
在体系表面沉积新的原子 |
drag |
按设定的方向拖动一组原子 |
dt/reset |
基于速度和力重置时间步 |
efield |
为体系引入一个电场 |
ehex |
增加热量传递的算法 |
enforce2d |
为每个原子施加一个平均力 |
evaporate |
周期性的移出模拟中的原子 |
external |
返回外部调用程序 |
freeze |
粗粒化模拟时冻结一组原子 |
gcmc |
巨正则蒙特卡模拟 |
gld |
广义郎之万几积分器 |
gravity |
粗粒化模拟中施加重力 |
halt |
按照设定的条件终止模拟 |
heat |
不改变系统动量增加系统的热量 |
indent |
纳米压痕模拟 |
latte |
密度泛函程序LATTE的调用 |
langevin |
郎之万热浴控温 |
lineforce |
限制原子按照直线运动 |
momentum |
使一组原子的(角)动量为零 |
move |
按照预先设定的方式移动原子 |
msst |
多尺度振动积分 |
neb |
扭结弹性带计算最小能垒路径 |
nph |
Nose/hoover恒NPH系统积分 |
nphug |
恒压Hugoniostat积分 |
npt |
恒温恒压系综模拟 |
nve |
微正则系综模拟 |
nvt |
正则系综模拟 |
oneway |
限制原子按一个方向移动 |
orient/bcc |
移动BCC晶格的晶界 |
orient/fcc |
移动FCC晶格的晶界 |
planeforce |
限制原子在一个平面上移动 |
poems |
限制一团原子按照相互耦合的刚体运动 |
pour |
在粗粒化模拟中添加原子或分子 |
press/berendsen |
Berendsen恒压模拟 |
|
在模拟中打印文字或变量 |
property/atom |
自定义每个原子的属性 |
qeq/comb |
利用库伦势平衡电荷 |
reax/bonds |
导出Reaxff势函数的键合信息 |
restrain |
限制键长,键角和二面角 |
rigid |
限制一组原子像刚体一样运动 |
setforce |
设定每个原子的力 |
shake |
键长键角的摇动约束 |
spring |
在一组原子上施加简谐力 |
srd |
多粒子碰撞动力学模拟 |
store/force |
储存每个原子的受力 |
store/state |
储存每个原子的运动状态 |
temp/berendsen |
Berendsen热浴温度控制 |
temp/csld |
郎之万正则采样热浴温控 |
temp/csvr |
哈密顿正则采样温控 |
temp/rescale |
按比例缩放速度温控 |
tfmc |
力偏蒙特卡洛算法 |
thermal/conductivity |
热传导率计算 |
tmd |
定向的分子动力学模拟 |
ttm |
电子原子耦合的双温度模型 |
tune/kspace |
自动调节倒易空间的参数 |
vector |
每N步累积全局的向量 |
viscosity |
粘度计算 |
viscous |
粗粒化模拟的粘滞阻尼 |
wall/lj126 |
设置以L-J势作用的墙 |
wall/lj126 |
设置反射墙 |
注意: fix命令的ID只能包含字母、数字和下划线。
fix命令所施加的约束可以被unfix命令删去。
注意:使用unfix命令是唯一用来关闭fix命令所施加的约束的方法。如果只是指定一种新的类似的fix命令并不会关闭之前的fix命令。这对于进行积分的fix命令特别重要。举例来说,如果你先定义了fix nvt命令,然后又定义了fix nve命令,这样做并不会将先定义的NVT时间积分取消掉,而是这两个时间积分同时进行。
如果你在定义一个新的fix命令时,所使用的ID和类型名与某个已经定义的fix命令完全相同,那么先前定义的那个fix命令就会被删除掉,而新的fix命令会被创建,所使用的参数也是重新定义的。这样做就好像是在定义这个新的fix命令之前,先使用unfix命令取消了旧fix命令,除了说它们所作用的顺序会因着定义的位置不同而有所差异。另外需要注意的是,这种重新定义fix命令也会将先前使用fix_modify命令定义的,与旧fix命令相关的其他任何改变都清除掉。
fix_modify命令可以用来重置fix命令定义的某些设置。具体细节可以参考特定类型的fix命令。
有些fix命令会在写二进制重启动文件(restart命令或write_restart命令)时保存其内部状态。这些fix命令会在重启动该模拟时继续对计算过程起作用。参考read_restart命令,了解在读入重启动文件的输入脚本中,如何重新指定fix命令。参考具体类型的fix命令,了解哪些命令会被写入到重启动文件中。