lammps教程:in文件结构详解以及一个比较实用的in文件模板

lammps软件只是一个求解器,没有可视化的前处理和后处理软件,所有的命令只能通过代码的方式输入到求解器进行求解计算。

所有的命令都被写到一个称为“in”的文件里,对于初学者来说,熟悉in文件的编写是一个难点。

in文件其实就是一个文本文档,也没有要求文件名或者后缀名中必须带有“in”字样,用任何文件名均可运行。

in文件里的代码是按照编写的顺序进行解释执行,对于大部分命令行来说,前后顺序影响并不是很大,但是,对于一些命令,在执行过程中需要某个参数,则这个参数的定义和计算必须写在命令执行之前。

例如,对晶体使用fix deform命令进行拉伸时,应变速率代码必须写到fix deform命令行的前面。

lammps命令非常丰富,官方给出的说明手册就达2000多页,我们也不可能记住和使用所有的命令。

对于某一个研究方向来说,常用的命令可能也就那么几十个,只要我们掌握这几十个命令基本上能够满足模拟要求。

in文件按照模块,大体可以分为三类:

(1)模拟环境参数设置

这一部分主要设置一些模拟参数,比如模拟体系的单位(units)、边界条件(boundary)、原子类型(atom_style)、邻居列表的定义(neighbor)、时间步长(timestep)等。

(2)体系模型的建立

这一部分的功能就是建立体系的原子模型,通常有两种方式。

第一种方式是使用lammps自带的建模命令建模,比如使用region命令划分区域,create_box命令生成模拟盒子,lattcie确定原子晶格常数,create_atoms生成原子。

使用命令行建模比较抽象,建模过程不是“所见即所得”,为了验证所建模型是否符合要求,可以在建模代码的后面使用write_data命令把模型保持为data文件,在lammps中运行in文件,用ovito观察一下模型是否正确。

第二种建模方式是使用其他软件进行可视化的建模,例如Material studio、Atomsk等软件,建模完成后转换为lammps可以识别data文件,使用read_data命令读入到lammps中。

(3)力场的设置

模型建好之后,需要设置力场参数,也就是常说的势函数设置。

力场的设置分两步,首先设置力场类型,如pair_style、bond_style、angle_style、dihedral_style、improper_style。

之后,设置与之相对于的参数,分别使用pair_coeff、bond_coeff、angle_coeff、dihedral_coeff、improper_coeff。

(4)能量最小化

在正式模拟之前,一般都需要进行能量最小化,消除模型不合理的结构。

能量最小化要在温度初始化之前进行,min_style确定能量最小化类型,minimize命令设置相关参数。

(5)温度初始化

能量最小化之后,就可以进行温度初始化。体系的温度是根据原子的速度计算得到的,因此,温度初始化也就是对原子进行速度初始化。

使用velocity命令按照设定的规律随机设定原子速度,使体系温度设定为一个固定值。

(6)弛豫

在npt、nvt等系综下,对体系进行充分的弛豫,使体系的能量达到最低,获得平衡态的结构。

前面这6部分是模拟准备过程,到此为止,体系已经达到平衡,可以进行下一步模拟。

这6部分的代码在大部分的模拟中都是通用的。

(7)具体模拟设置

这一部分代码与模拟的具体内容有关,比如拉伸、剪切、结晶、吸附等等。设置输出轨迹文件、热力学数据等等,便于后期统计分析。

对于不同的模拟过程,lammps模拟in文件可能会有区别,总体结构类似,大部分代码是重复的。

下面分享一个in文件模板,大家可以根据自己的科研课题修改使用。

#in文件模板
#----------1 模拟参数--------------------
units metal
boundary p p p
atom_style atomic
timestep 0.001
neighbor 2.0 bin
neigh_modify delay 0 every 5 check yes
#----------2 体系模型的建立----------------
variable xbox index 100
variable ybox index 100
variable zbox index 100
region simulationbox block 0 ${xbox} 0 ${ybox} 0 ${zbox} units box
create_box 1 simulationbox
lattice fcc 3.61
region cu block ${xstbox} ${xtbox} ${ystbox} ${ytbox} ${zstbox} ${ztbox} units box
create_atoms 1 region cu
mass 1 64
#输出原子初始结构
write_data test.data
#----------3 力场的设置-------
pair_style eam/fs
pair_coeff * * Cu.eam.fs Cu
#----------4 能量最小化-------
thermo 100
thermo_style custom step press pe temp ke
dump 1 all atom 100 mini.lammpstrj
min_style cg
minimize 1e-15 1e-15 5000 5000
undump 1
reset_timestep 0
#-----------5 温度初始化--------
velocity all create 300 321456 rot yes dist gaussian
#-----------6 弛豫-------------
thermo 100
thermo_style custom step press pe temp ke
dump 1 all atom 100 mini.lammpstrj
fix 1 all nvt temp 300 300 0.1
run 10000
unfix 1
undump 1
reset_timestep 0
#-------7 具体模拟设置-------
thermo 100
thermo_style custom step press pe temp ke
dump 1 all atom 100 mini.lammpstrj
fix 1 all npt temp 300 300 1 y 0 0 1 z 0 0 1 drag 1
variable srate equal 1.0e10
variable srate1 equal "-v_srate / 1.0e12"
fix 2 all deform 1 x erate ${srate1} units box remap x
run 100000

总结一个适合自己的in文件模板,可以极大地提高代码编写效率,毕竟重复的代码就不用再编写了,希望这个in文件模板对大家能有所帮助。

上一篇
下一篇