LAMMPS 专题

LAMMPS 镍双晶与晶界建模

用Atomsk建立两种晶向,拼接周期双晶、处理重叠,再用GPU松弛并保留真实结构与能量。

更新于 2026-11-11约 6 分钟阅读按任务与环境选择适用配置
阅读本篇目录

本篇跑通 Atomsk 定向建晶 → 拼接双晶 → 处理过近原子 → GPU 松弛 → 结构输出。采用 Ni 的 Σ5(310)[001] 对称倾斜晶界;所有结构和结果来自鸢算科技集群真实运行。下一篇继续提取面积归一化晶界能,并用 OVITO 检查取向。

1. 下载与建立模型#

下载两篇共用的完整输入、势函数、真实输出与绘图包:

python3 -m zipfile -e lammps-Ni-bicrystal-wave554-dcb5133a1057.zip Ni-bicrystal
cd Ni-bicrystal
bash build.sh

这一阶段在登录节点以一个 CPU 线程调用 Atomsk,再组装结构,不提交 GPU 松弛。

ls work/models
head -n 16 work/models/GB-shift0.0-prune1.4.data

2. 两种晶向与周期界面#

Ni 晶格常数取 a=3.52 Å,两个晶体的模拟坐标为:

晶粒 x 轴晶向 y 轴晶向 z 轴晶向
A [1−30] [310] [001]
B [130] [−310] [001]

y 垂直于晶界,z 为公共 [001] 倾斜轴。考虑立方晶体对称等价后,理想最小错取向角为 36.86989765°;不能只把两个带符号基向量的几何夹角直接当作晶体错取向角。

脚本实际调用:

atomsk --create fcc 3.52 Ni orient [1-30] [310] [001] -duplicate 4 8 4 A.lmp
atomsk --create fcc 3.52 Ni orient [130] [-310] [001] -duplicate 4 8 4 B.lmp

Atomsk 采用该 FCC 晶向的最小正交周期,x、y 原生周期约为 5.56560868 Å。复制后每份完整定向晶体有 1280 原子,盒长为 22.26243473×44.52486946×14.08 Å。

组装时选择 A 的下半个 y 区域、B 的上半个 y 区域,使用三方向周期边界。因此不仅 y 中部有一个界面,y 的周期接缝还形成另一个界面;后面能量归一化要除以两份面积。

3. 相对平移和过近原子#

初始结构比较两种 B 晶粒的相对 x 平移:0、半个原生 x 周期,后者约为 2.78280434 Å。平移后按周期边界回卷,不改变晶胞。

随后检查跨晶粒原子间的最小镜像距离。对每个 A 原子,如果有距离小于指定阈值的 B 原子,就删除相应 B 原子,A 原子保留。本例比较 1.4 Å 和 1.8 Å 两个阈值。

这两个阈值在每一种平移下均删除相同的 32 个 B 原子,得到相同的 1248 原子数据文件。程序保留这个对照与别名,只对同一结构计算一次。不要把“四组输入参数”误当作四个独立晶界结构。

另外保留完整 A、B 两个完美周期晶体作为参考。最终是四个独立初始结构:完美 A、完美 B、两种平移的双晶。

实际双晶在松弛前后的局部结构

图中仅投影 z 范围前 3.52 Å 的原子,以便看清排列。FCC 原子按最初所属晶粒标为蓝/橙,灰色为 OVITO PTM 的 Other 局部环境;这两种彩色是初始粒子来源标签,不是假定晶界不会发生局部重构。

4. 提交 GPU 松弛#

bash run.sh

完整对照需要 P100 和 V100 16G 两个分区权限。两份 Slurm 分配分别执行四个结构的松弛;每份用 1 GPU、2 个申请的 CPU 核心、1 MPI、1 OpenMP 线程。之后还有一个 V100 16G 作业,对相同 P100 末态做静态单点和能量差分。所有 GPU 计算都经普通账号 Slurm;排除 TC 分区成员与 V100 32G。

作业号保存在 work/SUBMISSIONS.json 与 work/CROSS-SUBMISSION.json。终端中断后先检查这些文件和 squeue,不要重复提交。新一轮完整计算使用新解压目录。

cat work/p100-GB-shift0.0-prune1.4/in.lmp

本例实际输入如下:

units metal
atom_style atomic
boundary p p p
read_data ../models/GB-shift0.0-prune1.4.data
pair_style eam
pair_coeff * * ../Ni_u3.eam
neighbor 2.0 bin
neigh_modify every 1 delay 0 check yes
compute e all pe/atom
compute Esum all reduce sum c_e
variable ff atom fx*fx+fy*fy+fz*fz
variable af atom sqrt(v_ff)
compute Fsum all reduce sum v_ff
compute Fmax all reduce max v_af
variable Fn equal sqrt(c_Fsum)
thermo 100
thermo_style custom step atoms pe c_Esum c_Fmax v_Fn lx ly lz vol pxx pyy pzz
thermo_modify norm no format float %.16g
dump di all custom 1 initial.dump id type x y z fx fy fz c_e
dump_modify di sort id format float %.16g
run 0
undump di
print "initial $(pe:%.16g) $(c_Fmax:%.16g) $(v_Fn:%.16g) $(vol:%.16g)" append properties.dat screen no
min_style cg
min_modify dmax 0.05
minimize 0 0.002 8000 80000
dump df all custom 1 final.dump id type x y z fx fy fz c_e
dump_modify df sort id format float %.16g
run 0
undump df
print "final $(pe:%.16g) $(c_Fmax:%.16g) $(v_Fn:%.16g) $(vol:%.16g)" append properties.dat screen no
write_data final.data nocoeff

使用 Ni_u3.eam 经典势,固定晶胞,仅优化原子位置。min_style cg 与 min_modify dmax 0.05 控制共轭梯度松弛,力范数目标 0.002 eV/Å,最多 8000 次迭代、80000 次能量/力计算。这里没有 MD,也没有有限温度自由能。

5. 查看松弛结果#

head -n 9 tables/bicrystal-energies.csv

原生CG输出的能量降低与残余力

标记点是原生日志实际保存的输出,连线只是连接这些稀疏采样点,不代表保存了每一次 CG 迭代。P100 两种平移分别降低约 11.099361、23.503879 eV,末态力范数约 0.001313、0.001919 eV/Å。两种初态最终非常接近,不应把起始能量较高直接理解为最终晶界一定更高能。

本例使用 Atomsk 0.13.1,GFortran 13.3;LAMMPS 30Sep2026,GCC 13.3、CUDA 12.8、OpenMPI 5.0.10、Kokkos 5.2.1。势函数来源为 Foiles 等的 Ni EAM,Phys. Rev. B 33, 7983 (1986)。这一小胞示例不等于完成了相对平移、原子密度、晶胞厚度和全部重构结构的搜索。

参考:Atomsk 双晶教程、定向建晶命令。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗