高性能计算服务
>
软件专区
>
最佳实践
>
LAMMPS 动力学矩阵对角化:Γ 点声子模式判断与势函数稳定性分析
晶体结构的动力学稳定性是材料计算研究的基础,传统完整声子色散计算算力消耗较大,本次实践,我们将详细介绍如何在超算互联网利用 LAMMPS 的 dynamical_matrix 命令与 Python 后处理,对晶体在 Γ 点的声子模式进行快速稳定性筛查。此次实践的目标并非一次性得到完整声子色散,而是用最小成本判定在当前势函数下,参考结构在 Γ 点附近是否局域稳定。 这套流程适用于势函数验收、初始结构检查、缺陷模型预筛选,以及在大规模非零 q 点计算前进行低成本的 sanity check。
目前,超算互联网提供预编译的LAMMPS 15Jun2023版本,支持一键购买使用。本文实验测试使用intelmpi2018编译的LAMMPS版本: https://www.scnet.cn/ui/mall/detail/goods?id=1734565365902864386&resource=APP_SOFTWARE 您可以通过“我的商品”,在“应用软件”中找到或者搜索该版本商品,点击“命令行”,即可选择区域中心、命令行快速使用软件。
软件默认安装在家目录的apprepo下,环境变量默认放在软件scripts目录下的env.sh中,通过修改case文件夹的脚本文件得到我们的脚本文件。
应用软件默认装在家目录的 apprepo 下,环境脚本位于软件目录的 scripts/env.sh 中。实际提交脚本就是在官方 case 脚本基础上,替换输入文件名和分区参数后得到的。
LAMMPS 的 dynamical_matrix 命令可以在给定平衡结构上,通过有限位移生成 Γ 点的动力学矩阵。Python 对这个矩阵做对称化和对角化之后,可以得到本征值、本征矢和对应的 Γ 点模式频率。 仅有 3 个接近 0 的声学平移模、其余模式全为正频时,可判定该结构在当前势函数下至少在 Γ 点局域稳定。 除 3 个平移模之外仍存在明显负频光学模时,可判定该结构在当前势函数下在 Γ 点局域不稳定。 1–3 模本身明显偏离 0 时,应优先检查是否真正松弛到机械平衡、模型构型是否正确、元素映射是否一致,以及数值噪声是否过大。 Γ 点稳定不等于全布里渊区稳定。若软模在 X、M、R、L 等非零 q 点,Γ 点仍可能全部为正。
因此,本教程的定位很明确:它是“Γ 点稳定性快速筛查流程”,不是完整声子色散流程。若要进一步判断区边界软模,需要扩展到超胞与 phonopy。
本文主示例的工作目录中的关键文件如下: SiC_1989.tersoff:SiC 的 Tersoff 势文件。 make_sic_8atom_data.py:生成 8 原子 zincblende SiC 晶胞的 LAMMPS data 文件。 in.sic_tersoff_gamma_dynmat.lmp:LAMMPS 输入脚本,负责松弛结构并输出 gamma.dyn。 submit_lmp_sic_gamma.sh:用于 sbatch 提交的批处理脚本。 diag_gamma_dynmat.py:读取 gamma.dyn,重建并对角化动力学矩阵。 plot_gamma_modes_pretty.py:生成较美观的 Γ 点模式频谱图。 plot_gamma_mode_vectors.py:在平衡结构上叠加本征矢箭头,输出俯视图和侧视图。
以下命令在本地 Windows PowerShell 中执行。首先定义密钥路径和工作目录,便于后续统一调用 ssh/scp。
$key = 'C:\path\to\your\ssh_key.txt'
$work = 'C:\path\to\your\lammps_project'
cd $work然后生成 LAMMPS 的输入结构文件 sic_8atom.data:
python .\make_sic_8atom_data.py若需一次性打包提交所需文件,可执行下面的压缩命令:
Compress-Archive `
-Path .\SiC_1989.tersoff,
.\make_sic_8atom_data.py,
.\diag_gamma_dynmat.py,
.\in.sic_tersoff_gamma_dynmat.lmp,
.\submit_lmp_sic_gamma.sh,
.\plot_gamma_modes_pretty.py,
.\plot_gamma_mode_vectors.py,
.\sic_8atom.data `
-DestinationPath .\lammps_tersoff_sic_gamma_submit_bundle.zip `
-Force
若已存在现成的 lammps_tersoff_sic_gamma_submit_bundle.zip,可直接复用。先用 ssh 连到 cancon 集群,再创建远端工作目录。
ssh -p <port> -i $key<username>@<hostname>登录后,在远端 bash 中执行:
mkdir -p /path/to/working_directory/
cd /path/to/working_directory/
pwd
exit回到本地 PowerShell,把压缩包上传到家目录:
scp -P <port> -i $key `
"$work\lammps_tersoff_sic_gamma_submit_bundle.zip" `
<username>@<hostname>:/path/to/working_directory/然后再次登录远端并解压到工作目录:
ssh -p <port> -i $key<username>@<hostname>登录后,在远端 bash 中执行:
cd /path/to/working_directory/
unzip -o ../lammps_tersoff_sic_gamma_submit_bundle.zip
ls -l
exit再次登录远端,进入工作目录并提交作业。
ssh -p <port> -i $key<username>@<hostname>登录后,在远端 bash 中执行:
cd /path/to/working_directory/
sbatch submit_lmp_sic_gamma.sh
squeue -u yourname
exit作业号返回后,可进一步查询作业状态。例如:
ssh -p <port> -i $key<username>@<hostname>
"sacct -j 111257576 --format=JobID,JobName%24,Partition,State,Elapsed"
当 sbatch 作业完成后,在登录节点执行 Python 后处理。命令如下:
ssh -p <port> -i $key<username>@<hostname>登录后,在远端 bash 中执行:
cd /path/to/working_directory/
module load python/3.8.10
which python3
python3 --version
python3 diag_gamma_dynmat.py gamma.dyn --output-prefix gamma | tee gamma_diag.out
ls -l gamma*
exit执行后会生成如下关键文件: gamma_modes.csv:模式编号、本征值、带符号频率、分类标签。 gamma_report.txt:判据摘要,包括 unstable_mode_count 和 judgement。 gamma_eigenvectors.npy:本征矢矩阵,用于后续模式箭头图。 gamma_dynmat_sym.npy:对称化后的动力学矩阵。 gamma_diag.out:对角化命令行输出留档。 
为了在本地继续画图和写报告,把结果文件同步回本地工作目录。下面命令仍在本地 PowerShell 中执行。
cd $work
scp -P <port> -i <private_key_path> `
<user>@<remote_host>:/home/<user>/<work_dir>/gamma_modes.csv `
./gamma_modes_local.csv
scp -P <port> -i <private_key_path> `
<user>@<remote_host>:/home/<user>/<work_dir>/gamma_report.txt `
./gamma_report_local.txt
scp -P <port> -i <private_key_path> `
<user>@<remote_host>:/home/<user>/<work_dir>/gamma_eigenvectors.npy `
./gamma_eigenvectors.npy
scp -P <port> -i <private_key_path> `
<user>@<remote_host>:/home/<user>/<work_dir>/sic_8atom_relaxed.data `
./sic_8atom_relaxed.data取得 csv、本征矢和松弛后结构后,即可在本地继续画图。先生成总频谱图:
cd $work
python .\plot_gamma_modes_pretty.py .\gamma_modes_cancon.csv --prefix .\gamma_modes_cancon
若需显式查看 1、2、3 号模式,可直接指定模式编号:
python .\plot_gamma_mode_vectors.py `
.\gamma_modes_cancon.csv `
.\gamma_eigenvectors.npy `
.\sic_8atom_relaxed.data `
--modes 1 2 3 `
--prefix .\gamma_modes_cancon_123上面三条命令执行后,典型输出文件如下: gamma_modes_cancon_pretty.png:三栏布局的 Γ 点模式频谱图。 gamma_modes_cancon_mode_vectors.png:最软内部模式的俯视/侧视本征矢箭头图。 gamma_modes_cancon_123_mode_vectors.png:1–3 号声学平移模的俯视/侧视图。
改进后的 Γ 点模式频谱图。左侧是完整模式频谱,中间是声学区放大,右侧是平滑包络。
在平衡结构上叠加本征矢箭头的模式图。每个模式同时给出俯视图和侧视图,颜色按原子种类区分。
Case A:稳定基准。弛豫后的 3C-SiC 结构 + 标准 Tersoff 势,预期结果为 Gamma STABLE,0 虚频。 Case B:结构扰动。随机位移约 0.3 Å 的扰动结构 + 标准 Tersoff 势,预期结果为 Gamma UNSTABLE,7 虚频,最小频率约 -405 THz。 Case C:势函数修改。弛豫后的 3C-SiC 结构 + 修改后的 Tersoff 势,预期结果为 Gamma UNSTABLE,9 虚频,最小频率约 -161 THz。
三案例对比图:稳定基准、结构扰动和势函数修改对应的 Γ 点稳定性结果。
结构:sic_8atom_relaxed.data 势函数:SiC_1989.tersoff 输入脚本:in.lmp 提交脚本:submit.sh 预期结果:Gamma locally stable within tolerance,0 虚频。
结构:sic_distorted.data 势函数:SiC_1989.tersoff 结构生成脚本:create_distorted.py 输入脚本:in.lmp 提交脚本:submit.sh 预期结果:Gamma unstable,7 虚频,最小频率约 -405 THz。 物理含义:标准势函数未变,但输入结构偏离局域极小值,因此虚频来自结构不稳定或模型未充分弛豫。
结构:sic_8atom_relaxed.data 势函数:SiC_modified.tersoff 输入脚本:in.lmp 提交脚本:submit.sh 预期结果:Gamma unstable,9 虚频,最小频率约 -161 THz。 物理含义:结构本身保持正确,但势函数参数被修改,虚频来自势函数曲率被破坏。
三案例的对比意义如下:Case A 给出稳定基准;Case B 用于证明结构未弛豫或模型初态错误时会出现虚频;Case C 用于证明即使结构正确,势函数参数失真也会导致虚频。
这是本文最关键的解释部分。很多时候“出现负频”并不等于“势函数一定坏了”,也不等于“模型一定写错了”。需要把几种情况分开看。 情况 A:只有 1–3 号模式接近 0,其他都为正。结论是当前结构在当前势函数下 Γ 点局域稳定。 情况 B:除了 1–3 号模式之外,还有明显的负频光学模。结论是当前结构在当前势函数下 Γ 点局域不稳定。此时要么结构本身不是局域极小值,要么势函数在这一相空间区域给出了错误的曲率。 情况 C:1–3 号模式本身也明显偏离 0。优先检查松弛是否充分、残余力和残余应力是否足够小、原子类型与 pair_coeff 元素顺序是否对应、晶格常数和初始结构是否正确。 情况 D:Γ 点全部稳定但体系仍怀疑不稳时,不能直接下结论,因为软模可能位于区边界。此时需要做 2x2x2 或更大超胞,或者切换到 phonopy 跑高对称路径与 DOS。 情况 E:缺陷体系、表面、畸变相或高对称参考相。此时出现局域软模反而可能是有物理意义的,比如偏心、八面体转动、局域重构,而不是单纯的数值错误。
对于“势函数不稳定”和“计算模型不稳定”的区分,可以用下面的经验规则:如果换更严格松弛、更小位移步长、更可靠初始结构之后,负频仍稳定存在,那么更像是结构本身或势函数的真实局域不稳定;如果一换松弛精度或修正元素映射之后负频就消失,更像是模型设置问题。 本教程中的 SiC/Tersoff 例子最终得到的结论是:Gamma locally stable within tolerance,也就是只有 3 个近零声学模,没有额外的虚频光学模。
下面只展示最关键的代码部分,完整脚本仍以工作目录中的原文件为准。
from ase.build import bulk
from ase.io import write
atoms = bulk("SiC", "zincblende", a=4.3596, cubic=True)
write("sic_8atom.data", atoms, format="lammps-data", atom_style="atomic", specorder=["Si", "C"])read_data sic_8atom.data
pair_style tersoff
pair_coeff * * SiC_1989.tersoff Si C
fix boxrelax all box/relax iso 0.0 vmax 0.001
minimize 1.0e-12 1.0e-12 5000 50000
unfix boxrelax
minimize 1.0e-14 1.0e-14 5000 50000
write_data sic_8atom_relaxed.data
dynamical_matrix all eskm 1.0e-6 file gamma.dyn#!/bin/bash
#SBATCH -J lammps
#SBATCH -p kshcnormal
#SBATCH -N 1
#SBATCH --ntasks-per-node=32
module purge
source /public/home/bcyyy/apprepo/lammps/15Jun2023-hpcx_gcc7.3.1/scripts/env.sh
srun --mpi=pmix_v3 lmp_mpi -in in.sic_tersoff_gamma_dynmat.lmp > log.lammpspython3 diag_gamma_dynmat.py gamma.dyn --output-prefix gamma
python plot_gamma_modes_pretty.py gamma_modes_cancon.csv --prefix gamma_modes_cancon
python plot_gamma_mode_vectors.py gamma_modes_cancon.csv gamma_eigenvectors.npy sic_8atom_relaxed.data --prefix gamma_modes_cancon本文整理了一套从超算互联网提交 LAMMPS,到在登录节点对角化动力学矩阵,再到本地生成模式频谱图和本征矢箭头图的完整 Γ 点稳定性筛查流程。文中命令与目录路径已给出完整示例,可直接据此重复稳定基准、结构扰动和势函数修改三类案例。 在此基础上,可继续扩展到非 Γ 点软模、高对称路径声子色散、DOS/PDOS,或缺陷附近的局域软模分析。当前文档所覆盖的内容,已足以完成 Γ 点局域稳定性判断与三案例对比。
希望本篇文章能够给您在使用LAMMPS上有一定的借鉴意义。