3. LAMMPS输入脚本结构精讲
LAMMPS 的输入脚本本质上是一份“按顺序执行的建模与仿真指令清单”。它不像很多图形软件那样把模型存成工程文件,而是用文本命令一步步把原子体系、力场、初始条件和输出搭起来。理解脚本结构,关键不是背命令,而是弄清每条命令在“建模—初始化—运行—输出”这条链上处于什么位置、影响什么对象。本节围绕 units、atom_style、boundary、newton 四个全局设定,read_data 与 create_atoms 两个建模入口,以及 velocity、fix nve 初始化和 thermo 输出控制展开。
全局设定:先定“度量衡”和“原子长什么样”
units 决定整份脚本使用哪套单位制,必须在建模命令之前设定。常用 units metal:长度 Å、能量 eV、时间 ps、质量 g/mol、温度 K、压强 bar。若误用 units real(长度 Å、能量 kcal/mol、时间 fs),同样的数值会得到完全不同的物理结果。因此单位制一旦确定,后续所有参数都必须与之匹配。
atom_style 决定每个原子携带哪些属性字段。做金属或简单液体用 atom_style atomic,只有坐标和类型;做带电体系用 atom_style charge,多出电荷字段;做分子或聚合物用 atom_style full,包含键、角、二面角等信息。它必须与数据文件或 create_atoms 提供的信息一致,否则读入时会报字段不匹配。
boundary 设定三个方向的边界条件,p 为周期性、f 为固定、s 为收缩包裹。例如 boundary p p f 表示 x、y 周期、z 方向固定,适合模拟表面或薄膜。边界条件直接决定原子能否跨越盒面、是否需要镜像,是后续 fix 选择的前提。
newton 控制牛顿第三定律在计算中的使用方式,newton on 让成对相互作用只算一次,效率更高,是多数场景的默认选择;某些特殊势或并行分解下才需要关闭。它属于性能与数值一致性层面的开关,通常放在脚本前部统一设定。
建模入口:read_data 与 create_atoms 的分工
建模入口决定原子从哪里来。read_data 从外部数据文件读入完整体系,文件里包含原子数、类型、盒子尺寸、坐标,若 atom_style 更复杂还包含键、角、电荷等。它适合已有结构文件(如用 Materials Studio、Atomsk 或脚本生成的晶格)的场景。典型写法:
read_data system.data
数据文件头部通常有 atoms、xlo xhi、ylo yhi、zlo zhi 等字段,随后是 Atoms 段,每行给出原子 ID、类型、坐标。若 atom_style 与文件字段数不一致,LAMMPS 会直接报错,因此两者必须同步。
create_atoms 则在脚本内直接生成原子,常用于规则晶格或简单填充。例如先定义盒子:
region box block 0 10 0 10 0 10
create_box 1 box
create_atoms 1 box
这里 create_box 声明盒子与原子类型数,create_atoms 在盒子内按指定样式放置原子。默认是 box 随机填充,也可用 lattice 配合 create_atoms 1 box 生成规则晶格。注意:read_data 与 create_atoms 不能同时用于同一批原子,否则会重复建模。
初始化:velocity 与 fix nve
原子有了坐标还不够,分子动力学需要初始速度。velocity 命令给原子组赋初速度,常用两种方式:一是按温度随机生成,二是按指定方向赋恒定速度。例如:
velocity all create 300.0 12345 dist gaussian
这表示给 all 组原子按 300 K 生成高斯分布速度,随机种子 12345。种子不同,速度分布不同,但统计性质一致。若做拉伸或冲击模拟,可用 velocity all set 0.0 0.0 0.01 给 z 方向一个恒定速度。
fix nve 是时间积分器,负责按牛顿方程更新位置和速度:
fix 1 all nve
它必须与 velocity 配合使用:velocity 给初速度,fix nve 在每一步推进。若只写 fix nve 而不给初速度,原子从静止开始,温度会从 0 逐渐升高,物理上也可行,但通常不是我们想要的初始状态。注意 fix nve 只做积分,不控温;若需要恒温,应改用 fix nvt 或 fix langevin。
thermo 输出控制:让运行过程可观察
thermo 控制屏幕输出频率,thermo_style 控制输出哪些字段。默认每 100 步输出一次,字段包括步数、温度、能量、压强等。常用写法:
thermo 100
thermo_style custom step temp pe ke etotal press vol
这样每 100 步打印一次步数、温度、势能、动能、总能量、压强和体积。若想输出到文件,用 thermo_modify 或 dump 命令。thermo 的数值是判断体系是否平衡、能量是否守恒的第一手依据:温度应在目标值附近波动,总能量在 NVE 下应基本守恒,若持续漂移则说明时间步长过大或势函数有问题。
一份可参考的最小脚本骨架
units metal
atom_style atomic
boundary p p p
newton on
read_data system.data
pair_style eam/alloy
pair_coeff * * Al99.eam.alloy Al
velocity all create 300.0 12345 dist gaussian
fix 1 all nve
thermo 100
thermo_style custom step temp pe ke etotal press vol
timestep 0.001
run 10000
这份骨架覆盖了本节全部核心命令。实际使用时,把 read_data 换成 create_box + create_atoms 即可切换到脚本内建模;把 fix nve 换成 fix nvt 即可做恒温模拟。理解每条命令在链上的位置,比记住命令本身更重要。