4. 原子模型构建与data文件工程化
在LAMMPS中,原子模型并不是“画”出来的,而是由晶格、取向、区域和原子类型四类信息共同定义出来的。真正进入计算之前,模型必须被写成一份结构完整、拓扑自洽的data文件。本节围绕这条主线展开:先确定晶格常数与取向,再用region与lattice联合建模,最后解析data文件格式、定义原子类型与质量,并生成和检查topology信息。
晶格常数与取向:模型的几何基准
晶格常数决定了原子间距和盒子尺寸的换算关系。以面心立方金属为例,若实验晶格常数为 a = 3.615 Å(示例值,铜的常见参考值),在LAMMPS中通常写成:
units metal
lattice fcc 3.615
这里的 3.615 是晶格常数,单位与 units metal 一致,为Å。取向则由晶格基矢决定。默认情况下,LAMMPS的fcc晶格以 [100]、[010]、[001] 为三个基矢方向。若需要 [110] 取向,可通过 orient 关键字指定:
lattice fcc 3.615 orient x 1 1 0 orient y 1 -1 0 orient z 0 0 1
取向改变后,晶格基矢不再与全局坐标轴对齐,但原子间相对位置关系保持不变。这一点在后续用region切割时非常关键:region定义的是全局坐标空间中的几何区域,而lattice定义的是原子在空间中的排布方式,两者必须配合使用。
region与lattice联合建模
region用于定义模拟盒子的几何边界或切割区域。常见写法如下:
region box block 0 20 0 20 0 20 units lattice
create_box 1 box
create_atoms 1 box
其中 units lattice 表示region的尺寸以晶格常数为单位。若晶格常数为3.615 Å,则 0 20 对应实际长度约72.3 Å。这种写法在需要精确控制原子层数时非常方便。若改用 units box,则region尺寸直接以长度单位给出,此时原子填充数量会随晶格常数变化而变化。
联合建模时,一个常见需求是构建带真空层的表面模型。例如:
region slab block 0 10 0 10 0 6 units lattice
region vacuum block 0 10 0 10 6 20 units lattice
create_box 1 slab
create_atoms 1 slab
这里先创建slab区域作为盒子,再在slab内填充原子,真空层通过盒子边界之外的空间自然形成。若需要更复杂的几何,比如纳米压痕的半球形压头区域,可以先用 region sphere 定义球形区域,再配合 create_atoms 的 region 参数将原子限制在特定区域内。
data文件格式解析
LAMMPS的data文件采用分节结构,每一节以标题行开始,后跟若干数据行。一个最小可用的data文件通常包含以下节:
| 节标题 | 作用 | 是否必需 |
|---|---|---|
| header | 原子数、原子类型数、盒子边界 | 必需 |
| Masses | 每种原子类型的质量 | 必需 |
| Atoms | 原子坐标、类型、电荷等 | 必需 |
| Velocities | 原子速度 | 可选 |
| Bonds/Angles/Dihedrals/Impropers | 拓扑连接信息 | 视力场而定 |
header节中,atoms 行给出原子总数,atom types 行给出原子类型数,xlo xhi、ylo yhi、zlo zhi 给出盒子边界。Atoms节的每一行格式取决于 atom_style。以 atomic 为例,每行依次为:原子ID、原子类型、x坐标、y坐标、z坐标。若使用 charge 样式,则还需在类型后插入电荷值。
原子类型与质量定义
原子类型是LAMMPS区分不同元素或不同化学环境的标识。在data文件中,Masses节必须为每一种原子类型指定质量:
Masses
1 63.546
2 26.982
这里类型1为铜,类型2为铝(示例值)。质量单位与 units 设置一致,metal 单位下为g/mol。若质量缺失或类型编号不连续,LAMMPS会在读取时直接报错。因此,在生成data文件后,应首先检查Masses节是否覆盖了所有原子类型。
topology信息生成与检查
对于分子体系或需要键合作用的力场,data文件还必须包含Bonds、Angles、Dihedrals、Impropers等拓扑节。这些节的结构通常为:第一行给出总数,后续每行给出拓扑ID、拓扑类型、参与原子ID列表。例如:
Bonds
1 1 1 2
2 1 2 3
表示第1个键类型为1,连接原子1和2;第2个键类型为1,连接原子2和3。拓扑信息必须与Atoms节中的原子ID严格对应,且不能出现重复键或悬空键。检查时可以从三个角度入手:一是原子ID是否连续且唯一;二是每条拓扑记录的原子ID是否都存在于Atoms节中;三是拓扑类型编号是否在对应的类型总数范围内。
一个实用的检查流程是:先用 read_data 读入文件,观察LAMMPS是否报错;再用 write_data 将当前系统重新写出,对比原子数和拓扑数是否一致。若两次输出的原子数不同,通常说明初始data文件存在重复原子或坐标越界问题。
在实际工程中,建议把晶格常数、取向、region尺寸和原子类型定义集中写在一个输入脚本中,先运行 create_atoms 生成初始构型,再用 write_data 输出data文件。这样得到的data文件天然满足LAMMPS的格式要求,也便于后续用脚本批量修改参数。若需要手动编辑data文件,务必保持各节之间的原子ID和类型编号一致,否则会在读取阶段直接失败。