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文件模板对大家能有所帮助。