news 2026/5/3 14:42:49

VASP+PHONOPY+pypolymlpj计算不同温度下声子谱,附批处理脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VASP+PHONOPY+pypolymlpj计算不同温度下声子谱,附批处理脚本

新版phonopy(>2.31)集成了与pypolymlp和 symfc结合进行机器学习势-自洽谐波近似(MLP-SSCHA) 计算的功能,可通过少量DFT计算进行势函数生成并产生有限温度下的力常数,并以此获得有限温度下的声子谱。

教程参考:

http://phonopy.github.io/phonopy/mlp-sscha.html

软件安装

    #建议新建环境conda install pypolymlp -c conda-forge -yconda activate polymlpconda install -c conda-forge symfc phonopy seekpath -y

    准备工作

    准备原胞结构,并进行扩胞与结构产生,其中 --rd 1000 为将产生的目标超胞数量,这里1000仅为测试,如需准确结果可增加。

      phonopy --pa auto --rd 1000 -c POSCAR --dim 222 --amin 0.03 --amax 1.5

      对产生的1000个结构进行VASP精度统一的自洽计算,计算完成后,使用phonopy读取计算所产生的vasprun.xml文件

      其中,{001..120}为生成势所选择的计算文件,可通过人为手动更改使用数据集的大小,最好依据此来测试不同计算数据量下生成的有限温度力常数的声子谱的收敛性。

        phonopy --sp -f vasprun_xmls/vasprun-{001..120}.xml

        处理完成后,将产生phonopy_params.yaml文件,将其压缩为phonopy_params.yaml.xz

          xz phonopy_params.yaml

          如果需要测试不同数据计算量对声子谱的影响,可在phonopy_params.yaml.xz文件后加数据范围比如重命名为phonopy_params.yaml-120.xz。

          本文教程使用全部1000个计算数据进行示例,所以省去区分。

          使用已压缩好的数据集进行训练生成

            phonopy-load phonopy_params.yaml.xz --pypolymlp --mlp-params="ntrain=100, ntest=20"

            将产生polymlp.yaml文件

            有限温度力常数

            对于指定温度如300K,生成该温度下的力常数命令为,其中--sscha 10 对应迭代次数,--rd-temperature 300 对应温度,--rd 1000对应数据量大小。

              phonopy-load phonopy_params.yaml.xz --pypolymlp --sscha 10 --rd-temperature 300 --rd 1000

              将包含十次迭代和十个力常数的产生

              需注意SSCHA free energy是否收敛

              对于生成的十次迭代所产生的力常数,可依次计算其声子谱

                for i in {1..10}; do phonopy-load phonopy_sscha_fc_$i.yaml.xz --band auto --band-points 101 -s -p; mv band.yaml band-$i.yaml; done

                最后将每次迭代的声子谱汇总绘制在一起

                  phonopy-bandplot band-{1..10}.yaml --legend -o band_cov_300K.pdf

                  0K和300K下声子谱对比

                  不同温度下声子谱对比

                  批处理脚本

                  #!/bin/bash
                  # 文件名: run_sscha_temperature.sh
                  # 功能: 计算300-1000K每50K的温度依赖力常数并导出能带数据

                  # 检查必要文件
                  if [ ! -f "polymlp.yaml" ]; then
                  echo "错误:未找到 polymlp.yaml,请先完成MLP训练!"
                  exit 1
                  fi

                  if [ ! -f "phonopy_params.yaml.xz" ]; then
                  echo "错误:未找到 phonopy_params.yaml.xz!"
                  exit 1
                  fi

                  # 创建结果汇总目录
                  mkdir -p results
                  echo "开始计算温度范围:300K 到 1000K,步长 50K"
                  echo "============================================"

                  # 循环温度
                  for T in $(seq 300 50 1000); do
                  echo "正在处理: ${T}K ..."

                  # 为每个温度创建独立工作目录
                  WORKDIR="T${T}K"
                  mkdir -p ${WORKDIR}

                  # 复制必要文件进去
                  cp phonopy_params.yaml.xz ${WORKDIR}/
                  cp polymlp.yaml ${WORKDIR}/
                  [ -f "phonopy_disp.yaml" ] && cp phonopy_disp.yaml ${WORKDIR}/

                  # 进入工作目录
                  cd ${WORKDIR}

                  # 1. 运行 SSCHA 计算(10次迭代,1000个随机位移)
                  phonopy-load phonopy_params.yaml.xz \
                  --pypolymlp \
                  --sscha 10 \
                  --rd-temperature ${T} \
                  --rd 1000 > sscha_${T}K.log 2>&1

                  # 检查是否成功生成最终力常数
                  if [ ! -f "phonopy_sscha_fc_10.yaml.xz" ]; then
                  echo " 警告: ${T}K 计算可能失败,检查 ${WORKDIR}/sscha_${T}K.log"
                  cd ..
                  continue
                  fi

                  # 2. 为最终力常数计算能带结构(-s保存,-p绘图)
                  for i in {1..10}; do
                  if [ -f "phonopy_sscha_fc_${i}.yaml.xz" ]; then
                  phonopy-load phonopy_sscha_fc_${i}.yaml.xz --band auto --band-points 101 -s -p > pdf_${T}_${i}K.log 2>&1
                  phonopy-bandplot --gnuplot > phono.txt
                  cp band.yaml band_${T}K_iter${i}.yaml
                  cp band.pdf band_${T}K_iter${i}.pdf
                  cp phono.txt band_${T}K_iter${i}.txt
                  fi
                  done

                  # 保存所有结果到汇总目录(文件名带温度标记)
                  if [ -f "phonopy_sscha_fc_10.yaml.xz" ]; then
                  cp phonopy_sscha_fc_10.yaml.xz ../results/phonopy_sscha_fc_${T}K.yaml.xz
                  # cp band.yaml ../results/band_${T}K.yaml
                  phonopy-bandplot band-{1..10}.yaml --legend --gnuplot >phoon_${T}.txt
                  [ -f "phoon_${T}.txt" ] && cp phoon_${T}.txt ../results/phono_${T}K.txt
                  phonopy-bandplot band-{1..10}.yaml --legend -o band_${T}.pdf
                  [ -f "band_${T}.pdf" ] && cp band_${T}.pdf ../results/band_${T}K_sscha_cov.pdf
                  [ -f "band.pdf" ] && cp band.pdf ../results/band_${T}K.pdf
                  fi

                  # 返回上级目录
                  cd ..
                  echo " ${T}K 完成: results/phonopy_sscha_fc_${T}K.yaml.xz"
                  done

                  echo "============================================"
                  echo "全部完成!结果保存在 ./results/ 目录:"
                  ls -lh results/

                  phonopy-bandplot 0k/band.yaml aresults/band_*.yaml --legend -o ../phono-T.pdf

                  版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
                  网站建设 2026/5/1 18:42:13

                  基于JavaWeb的网上书城网站的设计与实现 开题报告(2)

                  目录 研究背景与意义系统功能模块技术选型数据库设计示例系统特色预期成果 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 研究背景与意义 随着电子商务的快速发展,网上书城成为用户购书的重…

                  作者头像 李华
                  网站建设 2026/5/1 9:27:09

                  【读书笔记】《演讲的本质》

                  MIT传奇教授Patrick Winston的演讲课:如何在关键时刻让人真正听你说话 一个残酷的事实 90%的人不是不会说话,而是一开口就让人走神。他们逻辑完整,内容正确,PPT精美,但台下的人却在想:中午吃什么?手机有没有消息?这人什么时候讲完? Patric…

                  作者头像 李华
                  网站建设 2026/5/1 18:49:49

                  基于Simulink的根轨迹法控制器设计与仿真建模示例

                  目录 手把手教你学Simulink 一、引言:为什么工程师仍要学“根轨迹法”? 二、理论基础:根轨迹法核心思想 1. 闭环特征方程 2. 根轨迹绘制法则(简要) 三、示例系统:位置伺服系统 1. 被控对象传递函数 四、MATLAB 中绘制根轨迹 步骤1:定义系统并绘图 步骤2:分析根…

                  作者头像 李华
                  网站建设 2026/5/1 9:23:19

                  day73(2.1)——leetcode面试经典150

                  127. 单词接龙 127. 单词接龙 这个跟昨天的题还是有点不一样的,这个如果按照昨天的方法,会超时,因为时间已经到了50000 题目: 题解: class Solution {public int ladderLength(String beginWord, String endWord, …

                  作者头像 李华