lammps
编写in文件
计算设置
设置单位制
设置单位制的语法为units <style>
1 | |
设置模拟维度
即你模拟的是三维还是二维,语法为dimension <N>
1 | |
设置边界条件
即取对象的一部分,然后加上周期性边界条件来代替无限大的对象,这个区域通常被被称为模拟盒子,最常用的形状是长方形(编程比较容易处理)。设置边界条件在分子动力学模拟中优先级很高,所以第三条命令要写边界条件,语法为boundary <x><y><z>
名词解释
- 周期性边界条件:当豆子从屏幕右侧消失时,它会立刻从左侧重新出现;同样,从上边掉出屏幕的豆子会从下边冒出来。系统没有真正的”边缘”,任何一个方向都像闭合的环。
- 固定边界条件:边界的墙是固定的,系统有明确的“终点”,固定边界 = “不能越界”,就像被锁在房间里一样,所有的运动、碰撞都只能在规定范围内发生。
- 缩放边界条件:盒子的边界会扩张或缩小,如分子动力学模拟中的恒压系统(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 | |
设置邻居列表更新频率
即neigh_modify命令
1 | |
针对模拟对象设置
设置原子类型
不同的对象粒子所具有的属性是不同的。对于某个对象,粒子不需要的属性 就不需要设置,以节省内存加速计算。比如研究对象是分子(如水分子),那么 构成分子的粒子(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 | |
定义非键结相互作用
不同的力场有不同 的 pair_style,模拟中要根据对象选择合适的 pair_style。LAMMPS 集成了目前几 乎所有的 pair_style。模拟时只需要根据对象进行选择即可。pair_style 对于绝大多数模拟都需要定义。不同的 pair_style 具有不同的语法,具体可查阅手册。pair_style 中一般会定义截断半径的大小。以最简单的包含范德华的 pair_style 为例,其语法是pair_style lj/cut <cutoff>
定义键结力
1 | |
定义对象的几何模型
读取data文件
read_data
定义对象的物理模型
pair_coeff命令
根据定义的 pair_style 和粒子 type 的个数来决定 pair_coeff 的内容和条数。具体书写时可查看手册中对应的 pair_style 的例子。如 pair_style 是 lj/cut,粒子 type 个数为 2,则该命令写为
1 | |
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 | |
thermo_style命令
控制究竟要输出哪些全局量。 具体能够输出哪里量可查阅手册 thermo_style 命令描述。如果不设置该条命令, 那么 LAMMPS 就会输出默认信息。其语法是thermo_style <style> <args>
minimize
这条命令是可选的。如果你的几何模型和物理模 型都设置正确,那么可以不用这条命令。这条命令执行的是能量最小化。所以如果你发现 你的体系中能量超级大,压强超级大而运行出错,那么你可以试试能量最小化命令,一般使用下面这些参数设置就能实现你的目的
1 | |
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 | |
fix
fix 是 LAMMPS 中另一类极其重要的命令。其实现功 能就是对某个组的粒子施加某种操作。最重要的功能就是用来更新某个组的粒子 的速度和位置,因此每个 in 文件中都必然会有 fix 命令。我们通常所说的系综就 是通过 fix 命令实现。如 fix nve 实现 nve 系综,fix nvt 实现 nvt 系综,fix npt 实 现 npt 系综
1 | |
run
这个命令最常用的就是你要 run 多 少步。在弛豫阶段一般会 run 1ns 的长度,通常是 1000000 步。这里可以控制采 用什么算法对牛二进行求解。采用默认的就行,也就是说你不用额外设置,直接 run 就行了。花里胡哨的没啥用,默认的往往是最好的。其设置是 run 1000000
write_restart
这个命令可以写出 restart 文件,以便后续从这个 点接着算。restart 文件是一个二进制文件。使用这条命令是个好的习惯,可以让 你省很多事,又不会额外增加计算量。其语法是 write_restart <filename>
1 | |