LAMMPS 专题

LAMMPS 镍晶体拉伸实操

建立500原子FCC镍,先最小化与控温,再沿y方向加载,输出应力、应变和完整轨迹。

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

本篇用 500 原子 FCC Ni 跑通 建立晶胞 → 能量最小化 → 控温预热 → 拉伸 → 分析与作图。所有曲线和结构来自鸢算科技集群实际运行。先学会固定横向尺寸的做法,再到横向控压篇比较边界条件,数据分析篇解释应力、应变和结构结果。

1. 下载,然后运行#

下载三篇共用的输入、势函数、脚本、真实输出与绘图包。上传到自己的工作目录后:

python3 -m zipfile -e lammps-Ni-tension-wave544-546-078bd09327d9.zip Ni-tension
cd Ni-tension
bash run.sh

run.sh 建立 work/fixed 与 work/transverse,经普通账号 Slurm 提交计算,等待结束,再生成 tables/*.csv 和 figures/*.png。完整对照需要 P100 与 V100 16G 两个分区权限;两张卡分别处理各自的八个小算例。每份分配只用 1 张 GPU、1 个 MPI 进程、1 个 OpenMP 线程,申请 2 个 CPU 核心。同一张卡上的案例按顺序执行,不是八个程序同时抢一张卡。

另一个 V100 16G 作业只对 12 个已保存快照做能量差分,不继续动力学。GPU 计算都经 Slurm;脚本自动排除 TC 分区成员与 V100 32G 节点。登录节点只进行单线程分析和绘图。

作业号保存在 work/SUBMISSIONS.json 和 work/FD-SUBMISSION.json。终端中断不代表已提交作业自动取消;先看这些文件和 squeue。已有 work 时脚本会停止,重新计算请用新解压目录。

2. 模型和时间设置#

项目 本例设置
晶体 FCC Ni,a=3.52 Å,5×5×5 常规胞,共 500 原子
初始盒长 x、y、z 均为 17.6 Å,三方向周期
势函数 Ni_u3.eam,Foiles 等,Phys. Rev. B 33, 7983 (1986)
温度 100 K,温控阻尼 0.1 ps
时间步 0.001 ps,即 1 fs
预热 1000 步,即 1 ps
拉伸 4000 步,即 4 ps,每 200 步保存一帧,共 21 帧
工程应变率 0.005 和 0.015 ps⁻¹,分别为 5×10⁹ 和 1.5×10¹⁰ s⁻¹
随机种子 56001、56002

这是一套快速学习操作的小晶体与短时间设置。应变率远高于一般宏观实验;两种速率在相同 4 ps 后分别达到 2% 和 6% 工程应变。比较速率时应在共同应变区间比较,不能把两个不同终点的应力差全归因于速率。

本例最小化只改变原子位置,不优化晶胞;a=3.52 Å 是输入值。因此初始应力不必为零。三方向周期也意味着它不是带自由表面的拉伸试样。

同一500原子镍晶胞的初始与加载后结构

图中蓝色表示 OVITO 自适应 CNA 判定的 FCC 局部环境;本次初末快照均为 500/500 FCC。晶胞变长不等于已经屈服,也不能据此把 6% 时的应力叫作材料极限强度。

3. 看完整 LAMMPS 输入#

cat work/fixed/p100-rate0.005-seed56001/in.lmp

这份实际输入为:

units metal
atom_style atomic
boundary p p p
lattice fcc 3.52
region cell block 0 5 0 5 0 5
create_box 1 cell
create_atoms 1 box
mass 1 58.71
pair_style eam
pair_coeff * * ../Ni_u3.eam
neighbor 2.0 bin
neigh_modify every 1 delay 0 check yes
min_style cg
minimize 0 0.002 2000 20000
velocity all create 100 56001 mom yes rot no dist gaussian
timestep 0.001
fix bath all nvt temp 100 100 0.1
thermo 200
thermo_style custom step atoms temp pe ke etotal
thermo_modify norm no format float %.16g
run 1000
unfix bath
reset_timestep 0
fix bath all nvt temp 100 100 0.1
fix load all deform 0 y erate 0.005 remap x units box
compute full all stress/atom bath_temp
compute conf all stress/atom NULL pair
compute kinetic all ke/atom
variable strain equal ly/17.6-1
thermo_style custom step atoms temp pe ke etotal pxx pyy pzz pxy pxz pyz lx ly lz vol v_strain
thermo_modify norm no format float %.16g
dump tr all custom 200 tension.dump id type x y z vx vy vz fx fy fz c_full[1] c_full[2] c_full[3] c_full[4] c_full[5] c_full[6] c_conf[1] c_conf[2] c_conf[3] c_conf[4] c_conf[5] c_conf[6] c_kinetic
dump_modify tr sort id format float %.16g
print BEGIN_TENSION
run 4000
write_data final.data nocoeff

关键设置:

  • minimize 0 0.002 ... 先做固定晶胞的原子松弛;这里不使用 fix box/relax。
  • velocity ... create 100 产生初始热速度;先运行 1000 步 NVT 温控预热,再把加载阶段步数归零。
  • fix load all deform 0 y erate 0.005 remap x units box 沿 y 施加工程应变。这里的 0 是本版支持的形变更新顺序选择:积分位置后、计算力前更新晶胞;不是“运行零步”,加载仍有 4000 步。使用本例指定的 LAMMPS 30Sep2026 模块。
  • remap x 随晶胞重映射坐标,不给存储速度额外叠加仿射流动速度。本例使用普通温度,不再用 temp/deform 重复扣除并不存在于速度中的流动分量。
  • 温控器名字叫 nvt,但 y 盒长由外部持续改变,整个加载过程不是平衡态定容系综。x、z 长度固定,横向应力会发展。
  • thermo_modify norm no 保持输出为整个 500 原子体系的总能量;看每原子能量时再除以 500。

4. 先查看结果,再决定下一步#

head -n 4 tables/p100-rate0.005-seed56001.csv
bash analyze.sh work

后一个命令重新分析已完成轨迹,不提交新的动力学。两种 GPU、两种种子、两种速率和两种边界条件共 16 条原生轨迹。本次 P100、seed56001、固定横向尺寸的末帧为:

速率 /ps 工程应变 总 Cauchy 应力 σyy /GPa σxx /GPa σzz /GPa
0.005 0.02 3.564659 2.066110 2.064867
0.015 0.06 11.345214 6.702386 6.682005

固定横向尺寸与横向控压下的应力应变曲线

图中实线为 P100、虚线为 V100 16G,浅色为另一个随机种子;部分曲线几乎重叠。线段连接每 0.2 ps 的实际输出点,不是拟合出来的光滑材料本构。

本例使用 LAMMPS 30Sep2026,GCC 13.3、CUDA 12.8、OpenMPI 5.0.10 与 Kokkos 5.2.1;结构分析为 OVITO Python 3.16.1,表格与绘图使用现有 ASE 3.29.0 环境中的 NumPy、Matplotlib。Ni EAM 模型不包含显式电子或磁性自由度。

参考:LAMMPS fix deform、temp/deform 与坐标重映射的关系。

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

查看配图

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

100%查看原图 ↗