LAMMPS 专题

LAMMPS 合金组成与元素映射

Cu–Ni实际输入、type与元素映射反转、五种组成、GPU/Kokkos和ASE结构导出。

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

下载完整输入、势文件、实际结果与绘图脚本,在一个新目录解压后,先查看已有结果:

bash run.sh

得到 analysis/ 和 figures/。重新计算时先核对 submit.slurm 的分区适合自己的账户,然后:

sbatch submit.slurm

模板申请1个CPU核、1个P100,顺序计算76个小体系条件,再分析自己的结果。直接运行 bash run.sh compute 或文中的 lmp 命令时,必须已经处于分配好的计算资源中。已有 work/analysis/figures 时请另解压一份;只有 work 而没有分析/图目录时可用 bash run.sh analyze 继续后处理。

本例使用LAMMPS 30Sep2026,GCC 13.3、OpenMPI 5.0.10、CUDA 12.8;GPU包Mixed Precision,Kokkos 5.2.1双精度。已链接PLUMED 2.9.4,本文没有施加偏置。后处理使用ASE 3.29环境的NumPy与Matplotlib。普通CPU计算路径在同一P100计算资源上完成,不是Intel Xeon 8173M性能测试。

1. 先明确原子类型与元素#

pair_coeff 中的元素名按LAMMPS类型编号依次排列。下面的 Ni Cu 表示type 1是Ni、type 2是Cu;势文件头部自己的元素排列不要求与类型编号相同。

本例用FCC常规晶胞沿三方向各重复3次,共108原子,固定晶格常数3.57 Å。前54个原子ID替换为Cu,其余54个为Ni。这样可以精确检查组成和元素映射,它是按ID确定的有序有限结构,不是随机合金采样。

实际Cu–Ni与Al–Cu原子类型及结构

2. Cu–Ni完整输入#

inputs/cuni-composition-0p5-cpu/in.lammps:

newton on
units metal
atom_style atomic
boundary p p p
lattice fcc 3.57
region box block 0 3 0 3 0 3
create_box 2 box
create_atoms 1 box
group copper id <= 54
set group copper type 2
pair_style eam/alloy
pair_coeff * * potentials/CuNi.eam.alloy Ni Cu
neighbor 0.5 bin
neigh_modify every 1 delay 0 check yes
compute pea all pe/atom
compute pesum all reduce sum c_pea
thermo 1
thermo_style custom step atoms pe vol press c_pesum
thermo_modify norm no format float %.16g
run 0
write_dump all custom final.dump id type mass x y z fx fy fz c_pea modify sort id format float %.16g
print "$(pe:%.16g) $(vol:%.16g) $(press:%.16g) $(c_pesum:%.16g)" file energy.dat screen no

group copper id <= 54 选中54个原子,再通过 set group copper type 2 指定Cu。run 0只评价当前结构的能量、力和压力,不推进MD,因此没有积分fix的提示在这里是正常的。thermo_modify norm no 保留全胞能量;除以108才是每原子能量。

先完成本篇开头的整套提交最方便。需要单独运行这份输入时,在已经分配好的计算资源中执行:

module purge
module load lammps/30Sep2026-p100-gpu
cd inputs/cuni-composition-0p5-cpu
cp -r ../../potentials .
lmp -in in.lammps
cat energy.dat

energy.dat四列依次为全胞势能eV、体积ų、压力bar、逐原子势能求和eV。输入里的势文件路径相对当前计算目录,不要只复制 in.lammps 却漏掉 potentials/。

3. 更改编号时必须同步更改映射#

下载包中的 inputs/cuni-mapping-0-cpu/in.lammps 重新建立同一个物理结构,然后交换类型编号:

group oldone type 1
group oldtwo type 2
set group oldone type 2
set group oldtwo type 1
pair_style eam/alloy
pair_coeff * * potentials/CuNi.eam.alloy Cu Ni

现在type 1为Cu,type 2为Ni。两个组先定义再交换,避免第二次操作把已经改过类型的原子一起选进去。元素实际位置与质量保持原样,只改变编号;本例两份普通路径输入得到相同的能量、力与压力。只交换 Ni Cu 而不交换原子类型,会更改真实的元素分布。

势文件自带质量为Ni 58.689、Cu 63.546,程序按元素映射读取;不要把原子质量和编号随意对换。

4. 五种组成的实际结果#

所有组成都保持相同的3.57 Å晶胞,不做原子或晶胞优化。以下端元参照也取自同一个晶胞:

ΔE = E(x) − [(1−x)E(Ni) + xE(Cu)],所有能量按每原子表示。

Cu原子分数 Cu/Ni原子数 势能 eV/atom 同胞端元参照差 meV/atom
0.00 0/108 -4.43930914 0.00000
0.25 27/81 -4.18498987 27.64196
0.50 54/54 -3.94873625 37.21827
0.75 81/27 -3.73101151 28.26570
1.00 108/0 -3.53259990 0.00000

两种有限合金的组成能量与同胞参照

这条曲线只说明在给定势、坐标和固定晶胞下怎么整理组成数据。端元没有各自充分松弛,也没有构型/振动熵,不能直接称为平衡混合焓、混合自由能或相图。正式物性计算应先选择合适相、结构优化方式和构型采样方案。

在包根目录查看生成的表格:

head analysis/composition.csv
head analysis/backend-errors.csv

5. GPU/Kokkos怎么选#

Cu–Ni的 eam/alloy 在本例分别实际使用普通路径、eam/alloy/gpu和eam/alloy/kk。GPU包输入配套 package gpu 1 neigh no、newton off;Kokkos配套原子样式和积分器。不要只给所有命令机械地加相同后缀。完整输入都在 inputs/,整套脚本自动切换模块。

6. 用ASE导出可视化结构#

回到包根目录,读取已有的50%Cu原生dump并输出扩展XYZ:

module purge
module load ase/3.29.0
python - <<'PY'
from ase.io import read, write
a = read('reference/cases/cuni-composition-0p5-cpu/final.dump',
         format='lammps-dump-text', specorder=['Ni', 'Cu'])
write('alloy-export.xyz', a)
print(a.get_chemical_formula(), len(a))
PY

本例得到 Cu54Ni54 108。specorder按该份输入的类型顺序填写;对编号反转的case要改成 ['Cu', 'Ni']。重算后的结构从自己的 work/cases/ 读取,不要仍指向已有 reference/。导出的XYZ可交给OVITO等工具查看。

继续查看ADP与MEAM的Kokkos实操和能量、力与压力的独立检查。三种EAM文件格式的区别见已有格式教程。LAMMPS官方EAM命令及下载包势文件头保留具体作者和引用。

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

查看配图

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

100%查看原图 ↗