Skip to content

LAMMPS 动力学矩阵对角化:Γ 点声子模式判断与势函数稳定性分析

目录

  1. 引言
  2. 超算互联网软件与环境
  3. 理论目标与判据
  4. 本教程目录与文件说明
  5. 本地准备
  6. 登录超算与上传文件
  7. 提交 LAMMPS 作业
  8. 登录节点后处理:对角化 dynamical matrix
  9. 同步结果回本地
  10. 本地可视化
  11. 三案例完整输入包与对比
  12. 如何判断模型不稳定与势函数不稳定
  13. 关键代码片段
  14. 总结

1.引言

晶体结构的动力学稳定性是材料计算研究的基础,传统完整声子色散计算算力消耗较大,本次实践,我们将详细介绍如何在超算互联网利用 LAMMPS 的 dynamical_matrix 命令与 Python 后处理,对晶体在 Γ 点的声子模式进行快速稳定性筛查。此次实践的目标并非一次性得到完整声子色散,而是用最小成本判定在当前势函数下,参考结构在 Γ 点附近是否局域稳定。 这套流程适用于势函数验收、初始结构检查、缺陷模型预筛选,以及在大规模非零 q 点计算前进行低成本的 sanity check。

2. 超算互联网软件与环境配置

目前,超算互联网提供预编译的LAMMPS 15Jun2023版本,支持一键购买使用。本文实验测试使用intelmpi2018编译的LAMMPS版本: https://www.scnet.cn/ui/mall/detail/goods?id=1734565365902864386&resource=APP_SOFTWARE 您可以通过“我的商品”,在“应用软件”中找到或者搜索该版本商品,点击“命令行”,即可选择区域中心、命令行快速使用软件。

软件默认安装在家目录的apprepo下,环境变量默认放在软件scripts目录下的env.sh中,通过修改case文件夹的脚本文件得到我们的脚本文件。 1.png 应用软件默认装在家目录的 apprepo 下,环境脚本位于软件目录的 scripts/env.sh 中。实际提交脚本就是在官方 case 脚本基础上,替换输入文件名和分区参数后得到的。

3. 理论目标与判据

LAMMPS 的 dynamical_matrix 命令可以在给定平衡结构上,通过有限位移生成 Γ 点的动力学矩阵。Python 对这个矩阵做对称化和对角化之后,可以得到本征值、本征矢和对应的 Γ 点模式频率。 仅有 3 个接近 0 的声学平移模、其余模式全为正频时,可判定该结构在当前势函数下至少在 Γ 点局域稳定。 除 3 个平移模之外仍存在明显负频光学模时,可判定该结构在当前势函数下在 Γ 点局域不稳定。 1–3 模本身明显偏离 0 时,应优先检查是否真正松弛到机械平衡、模型构型是否正确、元素映射是否一致,以及数值噪声是否过大。 Γ 点稳定不等于全布里渊区稳定。若软模在 X、M、R、L 等非零 q 点,Γ 点仍可能全部为正。

因此,本教程的定位很明确:它是“Γ 点稳定性快速筛查流程”,不是完整声子色散流程。若要进一步判断区边界软模,需要扩展到超胞与 phonopy。

4. 本教程目录与文件说明

本文主示例的工作目录中的关键文件如下: 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:在平衡结构上叠加本征矢箭头,输出俯视图和侧视图。

5. 本地准备

以下命令在本地 Windows PowerShell 中执行。首先定义密钥路径和工作目录,便于后续统一调用 ssh/scp。

shell
$key  = 'C:\path\to\your\ssh_key.txt'
$work = 'C:\path\to\your\lammps_project'
cd $work

然后生成 LAMMPS 的输入结构文件 sic_8atom.data:

shell
python .\make_sic_8atom_data.py

若需一次性打包提交所需文件,可执行下面的压缩命令:

shell
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,可直接复用。

6. 登录超算与上传文件

先用 ssh 连到 cancon 集群,再创建远端工作目录。

shell
ssh -p <port> -i $key<username>@<hostname>

登录后,在远端 bash 中执行:

shell
mkdir -p /path/to/working_directory/
cd /path/to/working_directory/
pwd
exit

回到本地 PowerShell,把压缩包上传到家目录:

shell
scp -P  <port>  -i $key `
  "$work\lammps_tersoff_sic_gamma_submit_bundle.zip" `
<username>@<hostname>:/path/to/working_directory/

然后再次登录远端并解压到工作目录:

shell
ssh -p <port> -i $key<username>@<hostname>

登录后,在远端 bash 中执行:

shell
cd /path/to/working_directory/
unzip -o ../lammps_tersoff_sic_gamma_submit_bundle.zip
ls -l
exit

7. 提交 LAMMPS 作业

再次登录远端,进入工作目录并提交作业。

shell
ssh -p <port> -i $key<username>@<hostname>

登录后,在远端 bash 中执行:

shell
cd /path/to/working_directory/
sbatch submit_lmp_sic_gamma.sh
squeue -u yourname
exit

作业号返回后,可进一步查询作业状态。例如:

shell
ssh -p <port> -i $key<username>@<hostname>
  "sacct -j 111257576 --format=JobID,JobName%24,Partition,State,Elapsed"

2.png

8. 登录节点后处理:对角化 dynamical matrix

当 sbatch 作业完成后,在登录节点执行 Python 后处理。命令如下:

shell
ssh -p <port> -i $key<username>@<hostname>

登录后,在远端 bash 中执行:

shell
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:对角化命令行输出留档。 3.png

9. 同步结果回本地

为了在本地继续画图和写报告,把结果文件同步回本地工作目录。下面命令仍在本地 PowerShell 中执行。

shell
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

10. 本地可视化

取得 csv、本征矢和松弛后结构后,即可在本地继续画图。先生成总频谱图:

shell
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 号声学平移模的俯视/侧视图。

3.png 改进后的 Γ 点模式频谱图。左侧是完整模式频谱,中间是声学区放大,右侧是平滑包络。

4.png 在平衡结构上叠加本征矢箭头的模式图。每个模式同时给出俯视图和侧视图,颜色按原子种类区分。

11. 三案例对比

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。 5.png 三案例对比图:稳定基准、结构扰动和势函数修改对应的 Γ 点稳定性结果。

11.1 Case A:稳定基准

结构:sic_8atom_relaxed.data 势函数:SiC_1989.tersoff 输入脚本:in.lmp 提交脚本:submit.sh 预期结果:Gamma locally stable within tolerance,0 虚频。

11.2 Case B:结构扰动

结构:sic_distorted.data 势函数:SiC_1989.tersoff 结构生成脚本:create_distorted.py 输入脚本:in.lmp 提交脚本:submit.sh 预期结果:Gamma unstable,7 虚频,最小频率约 -405 THz。 物理含义:标准势函数未变,但输入结构偏离局域极小值,因此虚频来自结构不稳定或模型未充分弛豫。

11.3 Case C:势函数修改

结构:sic_8atom_relaxed.data 势函数:SiC_modified.tersoff 输入脚本:in.lmp 提交脚本:submit.sh 预期结果:Gamma unstable,9 虚频,最小频率约 -161 THz。 物理含义:结构本身保持正确,但势函数参数被修改,虚频来自势函数曲率被破坏。

三案例的对比意义如下:Case A 给出稳定基准;Case B 用于证明结构未弛豫或模型初态错误时会出现虚频;Case C 用于证明即使结构正确,势函数参数失真也会导致虚频。

12. 如何判断模型不稳定与势函数不稳定

这是本文最关键的解释部分。很多时候“出现负频”并不等于“势函数一定坏了”,也不等于“模型一定写错了”。需要把几种情况分开看。 情况 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 个近零声学模,没有额外的虚频光学模。

13. 关键代码片段

下面只展示最关键的代码部分,完整脚本仍以工作目录中的原文件为准。

13.1 结构生成脚本的核心

shell
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"])

13.2 LAMMPS 输入脚本的核心

shell
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

13.3 sbatch 脚本的核心

shell
#!/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.lammps

13.4 对角化和画图命令的核心

shell
python3 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

14. 总结

本文整理了一套从超算互联网提交 LAMMPS,到在登录节点对角化动力学矩阵,再到本地生成模式频谱图和本征矢箭头图的完整 Γ 点稳定性筛查流程。文中命令与目录路径已给出完整示例,可直接据此重复稳定基准、结构扰动和势函数修改三类案例。 在此基础上,可继续扩展到非 Γ 点软模、高对称路径声子色散、DOS/PDOS,或缺陷附近的局域软模分析。当前文档所覆盖的内容,已足以完成 Γ 点局域稳定性判断与三案例对比。

希望本篇文章能够给您在使用LAMMPS上有一定的借鉴意义。