lammps

编写in文件

计算设置

设置单位制

设置单位制的语法为units <style>

1
2
3
4
5
6
#描述分子体系
units real
#描述金属
units metal
#描述简单液体
units lj

设置模拟维度

即你模拟的是三维还是二维,语法为dimension <N>

1
2
3
4
#二维
dimension 2
#三维
dimension 3

设置边界条件

即取对象的一部分,然后加上周期性边界条件来代替无限大的对象,这个区域通常被被称为模拟盒子,最常用的形状是长方形(编程比较容易处理)。设置边界条件在分子动力学模拟中优先级很高,所以第三条命令要写边界条件,语法为boundary <x><y><z>

名词解释
  1. 周期性边界条件:当豆子从屏幕右侧消失时,它会立刻从左侧重新出现;同样,从上边掉出屏幕的豆子会从下边冒出来。系统没有真正的”边缘”,任何一个方向都像闭合的环。
  2. 固定边界条件:边界的墙是固定的,系统有明确的“终点”,固定边界 = “不能越界”,就像被锁在房间里一样,所有的运动、碰撞都只能在规定范围内发生。
  3. 缩放边界条件:盒子的边界会扩张或缩小,如分子动力学模拟中的恒压系统(NPT系综):系统压力变化时,盒子体积会自动伸缩以维持目标压力。拉伸/压缩材料模拟:模拟外力作用下的形变时,盒子的边界会按比例改变。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #写一个参数时,如 p 就表示该方向上两个边界都是周期性
    #周期性边界条件p
    boundary p p p
    #固定边界条件f
    boundary f f f
    #缩放边界条件s
    boundary s s s
    #写两个参数,表示在 x 和 z 方向上是周期性边界,在 y 方向下面是 f,上面是 s
    boundary p fs p

建立邻居列表

任何一个粒子都受到周围粒子的合力(截断半径r_c内),而在r_c外的粒子的力可以忽略不计。所以要找到对他有作用力的邻居,neighbor的语法是neighbor <skin><style>

1
2
3
neighbor 3 bin
#skin 可以理解为设立一个“缓冲区“。想象你是个教练,要看哪些学生离你够近,可以听你讲话。你定了个范围,比如“3米以内的人算近邻”。但学生可能在跑动,下一秒有人就从 3.1 米跑进来了。如果你每秒都重新数一遍,太累了。于是你干脆说:“我把范围多加一点,比如 3 米 + 0.5 米。”这多出来的 0.5 米,就是 skin
#style 指的是建立邻居列表的方法,最常用的就是 bin 方法。这个方法 的具体含义可以查看分子动力学教材。入门只需要知道 bin 在大多数情况下都是 最快的,用它就没错了

设置邻居列表更新频率

即neigh_modify命令

1
2
neigh_modify every 1 delay 0 check yes
#当需要更新而未更新时就会出现 Dangerous builds。当算完之后 LAMMPS 输出的 Dangerous builds 不为零,那么你就要修改 neigh_modify 命令了,或者加大 skin 的值。这条命令使用比较复杂,需要根据模拟经验和具体的模拟测试确定最优值。对于新手,可以直接使用以上设置

针对模拟对象设置

设置原子类型

不同的对象粒子所具有的属性是不同的。对于某个对象,粒子不需要的属性 就不需要设置,以节省内存加速计算。比如研究对象是分子(如水分子),那么 构成分子的粒子(style 为 full)就需要具有以下属性:粒子编号,粒子所属分子 的编号,粒子类别(atom type),带电量,x 坐标,y 坐标,z 坐标。如果研究对 象是惰性气体(如氩)或金属单质(如铁),那么粒子(style 为 atomic)的属性 就是:粒子编号,粒子类别,x 坐标,y 坐标,z 坐标。LAMMPS 中内置了相当 多的原子类型可以查看手册寻找自己需要的类型。这里要说的是 atom style 和 atom type 中文翻译都一样,具体是啥意思。简单来说 atom style 定义了大类, atom type 定义了大类中的小类。比如一个水分子中,所有粒子的 atom_style 都是 full,但是在这个 style 下,又区分为氧原子 type 和氢原子 type。一个模拟中可以 由多个 type,但是只能有一个 style。atom_style 定义好后就约束了 data 文件中具 体内容。atom_style 的语法是atom_style <style>

1
2
3
4
#研究对象为分子
atom_style full
#研究对象为惰性气体或金属单质
atom_style atomic

定义非键结相互作用

不同的力场有不同 的 pair_style,模拟中要根据对象选择合适的 pair_style。LAMMPS 集成了目前几 乎所有的 pair_style。模拟时只需要根据对象进行选择即可。pair_style 对于绝大多数模拟都需要定义。不同的 pair_style 具有不同的语法,具体可查阅手册。pair_style 中一般会定义截断半径的大小。以最简单的包含范德华的 pair_style 为例,其语法是pair_style lj/cut <cutoff>

定义键结力

1
2
3
4
5
6
7
8
9
10
11
12
#计算两个粒子通过化学键的作用,这条命令是可选的,根据不同的对象可定。
bond_style <style>
#计算相邻三个粒子的作用,这条命令是可选的,根据不同的对象可定。
angle_style <style>
#计算相邻四个粒子的作用,这条命令是可选的,根据不同的对象可定。
dihedral_style <style>
#计算相邻三个粒子的作用,这条命令是可选的,根据不同的对象可定。
improper_style <style>
#这条命令是可选的,当有键结作用出现时, 设定有键结相互作用的粒子之间是否还具有 pair 相互作用。一般来说,是没有的,所以这条命令一般写作:
special_bonds lj/coul 0.0 0.0 0.5
#当有静电作用出现时, 需要加上,这条命令是可选的
kspace_style <style> <value>

定义对象的几何模型

读取data文件

read_data

定义对象的物理模型

pair_coeff命令

根据定义的 pair_style 和粒子 type 的个数来决定 pair_coeff 的内容和条数。具体书写时可查看手册中对应的 pair_style 的例子。如 pair_style 是 lj/cut,粒子 type 个数为 2,则该命令写为

1
2
3
pair_coeff 1 1 0.1553 3.166 9.0  
pair_coeff 1 2 0.1423 3.125 9.0
pair_coeff 2 2 0.2753 3.196 9.0

bond_coeff命令

根据定义的 bond_style 和 bond type 的个数来决定 bond_coeff 的内容和条数。具体书写时可查看手册中对应的 bond_style 的例子。

angle_coeff命令

根据定义的 angle_style 和 angle type 的个数来决 定 angle_coeff 的内容和条数。具体书写时可查看手册中对应的 angle_style 的例子

dihedral_coeff命令

根据定义的 dihedral_style 和 dihedral type 的个数来决定 dihedral_coeff 的内容和条数。具体书写时可查看手册中对应的 dihedral_style 的例子

improper_coeff命令

根据定义的 improper_style 和 improper type 的个数来决定 improper_coeff 的内容和条数。具体书写时可查看手册中对应的 improper_style 的例子

定义分组信息

group命令

弛豫

thermo命令

控制多少步输出一次,若不设置则只会在第一步和最后一步输出。语法为thermo <N>

1
2
#10000步输出一次
thermo 10000

thermo_style命令

控制究竟要输出哪些全局量。 具体能够输出哪里量可查阅手册 thermo_style 命令描述。如果不设置该条命令, 那么 LAMMPS 就会输出默认信息。其语法是thermo_style <style> <args>

minimize

这条命令是可选的。如果你的几何模型和物理模 型都设置正确,那么可以不用这条命令。这条命令执行的是能量最小化。所以如果你发现 你的体系中能量超级大,压强超级大而运行出错,那么你可以试试能量最小化命令,一般使用下面这些参数设置就能实现你的目的

1
minimize 0.0 1.0e-8 1000 100000

compute

该命令是 LAMMPS 中极其重要的一类命令。当 你需要计算某个量时你就可以考虑使用 compute 命令。LAMMPS 提供了丰富的 compute 命令,具体使用时,根据你的需求,查阅手册看 LAMMPS 中有没有实 现你需要的功能的 compute。compute 和 dump 一样可以针对某个 group 的粒子进 行计算。一个 in 文件中可以有多个 compute,但每个 compute 的 id 不能重复。 计算出来的值可以被很多命令使用,如 dump,fix 等。最常用的就是计算温度, 如compute myT all temp

velocity

velocity 命令有不少功能,最常用的功能就是根据 目标温度创建粒子的初始速度。最常用的形式为 velocity all create 300.0 4928459 rot yes dist gaussian

timestep

该命令设定求解牛顿差分方程中∆t的大小。不同 体系会要求不同大小的∆t。时间步长的选取原则是,要足够小以准确捕捉体系中最 快的动力学过程,又要足够大以节省计算时间。通常你的时间步长大小参考文献设置就行了。或按照下面举的例子进行设置,就没啥问题了

1
#一般来说分子体系会要求∆t = 1fs。简单液体体系可  放宽至∆t = 5fs。晶体体系可以是∆t = 2fs。反应力场 reaxff 体系会要求更小的时  间步,∆t = 0.10.5fs

fix

fix 是 LAMMPS 中另一类极其重要的命令。其实现功 能就是对某个组的粒子施加某种操作。最重要的功能就是用来更新某个组的粒子 的速度和位置,因此每个 in 文件中都必然会有 fix 命令。我们通常所说的系综就 是通过 fix 命令实现。如 fix nve 实现 nve 系综,fix nvt 实现 nvt 系综,fix npt 实 现 npt 系综

1
fix nve 或 fix nvt 或 fix npt 当做更新原子位置和速度的命令,  fix nve 直接根据牛二进行更新,fix nvt 在更新的时候会对速度进行干涉以达到设  定的温度,fix npt 会对速度和位置同时进行干涉以达到设定的温度和压强。至于  nvt 和 nve 下体积变不变取决于你的边界条件

run

这个命令最常用的就是你要 run 多 少步。在弛豫阶段一般会 run 1ns 的长度,通常是 1000000 步。这里可以控制采 用什么算法对牛二进行求解。采用默认的就行,也就是说你不用额外设置,直接 run 就行了。花里胡哨的没啥用,默认的往往是最好的。其设置是 run 1000000

write_restart

这个命令可以写出 restart 文件,以便后续从这个 点接着算。restart 文件是一个二进制文件。使用这条命令是个好的习惯,可以让 你省很多事,又不会额外增加计算量。其语法是 write_restart <filename>

1
2
#生成一个名为restart.equ的文件
write_restart restart.equ

lammps
http://example.com/2025/10/14/lammps/
作者
BaiQiu
发布于
2025年10月14日
许可协议