ShengBTE RTA 与迭代 BTE
实际比较RTA、GMRES和旧迭代,展示停止容差、迭代序列与热导张量读取。
阅读本篇目录
RTA给每个声子模一个独立弛豫时间;迭代BTE进一步处理模间耦合。二者不是把同一列寿命换个名字。先固定力常数、温度、q网格和同位素,再比较求解方法。

1. 三种设置#
# RTA
convergence=.FALSE.
# ShengBTE2.1.0的改进迭代(GMRES)
convergence=.TRUE.
improved_iteration=.TRUE.
# 旧Omini–Sparavigna迭代
convergence=.TRUE.
improved_iteration=.FALSE.
这些放在CONTROL的flags组;eps、maxiter 放在parameters组。2.1.0默认启用改进迭代,不能把旧版本的默认行为直接套过来。不同散射条件下旧迭代可能更慢甚至不稳定,不保证它总能代替GMRES。
2. 运行并查看文件#
在已分配CPU资源中:
bash run.sh si-q6-300K-gmres
cat work/si-q6-300K-gmres/BTE.KappaTensorVsT_RTA
cat work/si-q6-300K-gmres/BTE.KappaTensorVsT_CONV
cat work/si-q6-300K-gmres/T300K/BTE.kappa_scalar
总文件第一列是温度,随后九项是热导张量,单位W/(m·K);CONV末列还给迭代步数。温度目录的 BTE.kappa_scalar 第一列为迭代编号,第二列为张量对角元均值。RTA只保留第0步,不能误读成“计算没开始”。
3. 同一模型的实际对照#
| 条件 | 最终热导迹/3,W/(m·K) | 迭代步数 |
|---|---|---|
| rta | 84.42905383 | 0 |
| gmres | 85.98450502 | 10 |
| legacy | 85.98449352 | 11 |
| gmres-tight | 85.98450512 | 14 |
| legacy-tight | 85.98450511 | 17 |
这里q=6、300K、天然同位素完全相同。常规对照用eps=10⁻⁷;tight条件再收紧到10⁻¹⁰。后两种算法的最终结果相符到本次数值检查精度,但仍不说明力常数和q网格已收敛。
4. 怎样使用停止容差#
程序日志的relative change比较相邻两步热导张量。相邻步变化小不等于最终误差已经同样小,尤其是收敛缓慢时。应比较更严格eps后的结果、观察迭代序列,并单独检查q网格和展宽。
不同文件打印精度也不同:总张量文件经过有限位数舍入,温度目录可保留更多数字。不要拿两种格式的末尾数字差异解释成物理效应。本例分析按实际打印位数处理舍入,并从完整q网格的速度和散射率独立重建RTA。
资料包与运行入口#
下载力常数、25组完整输入、实际输出及全部分析画图脚本。解压后先检查输入、重画随包参考:
bash check-inputs.sh
bash analyze.sh
完整重新计算25组BTE后处理,在新解压目录提交:
sbatch run.slurm
只算一个q=6、300K RTA条件用 sbatch single.slurm,可编辑其中的条件名。模板遵守CPU分区整节点56核申请规则;这些小例实际使用1个MPI进程、1个计算线程,旨在学习输入和物理结果。大体系需要另按规模调整并行设置,不能用这些小例作性能推荐。
已经获得CPU计算资源时,可以直接调用 bash run.sh 条件名;不要把普通登录节点当计算节点。整套完成后:
bash analyze.sh work
图片在 work/figures/,数值摘要在 work/analysis/RESULTS.json。单例可直接看其 BTE.* 文件,统一分析需要25组完整结果。脚本不会覆盖已有work目录,重新计算请重新解压。
环境:ShengBTE2.1.0,GCC/GFortran13.3、Open MPI5.0.10、MKL2024.2 GF_LP64 sequential,模块 shengbte/2.1.0-8173m;此构建需要AVX-512 CPU,不能直接放到P100主机的旧CPU上运行。输入检查使用hiPhive1.5和Phonopy4.8.3,脚本分别加载对应环境,无需把所有依赖混装进同一Python。
力常数来自本集群已有的真实ABACUS Si16位移计算,本批只重新求解和分析BTE,没有新做DFT。三阶模型范围3Å,电子参数、超胞和q网格仍有有限性;本专题是操作与数值检查参考,不将结果当作收敛的硅材料热导率或CPU性能数据。