GPUMD专题

GPUMD QTB 与末态数据检查

Cu和Ar量子热浴操作、温度含义、更新阶段差异和末态原生静态重算。

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

QTB是量子热浴的近似方法,使用带有量子能谱的有色随机力,引入零点能等核量子贡献。它不是精确量子动力学,也不能靠短轨迹自动给出收敛量子热力学量。本篇先讲如何实际运行,再解释输出温度与普通NVT为何不同。

Cu和Ar的QTB温度及真实速度样本

1. NVT-QTB完整输入#

共同准备完成后,在计算资源中执行:

bash run.sh cu-nvt-qtb
grep -A 8 'Use NVT' work/cu-nvt-qtb/run.log

cu-nvt-qtb / run.in

potential potential.txt
time_step 1
ensemble nvt_qtb 300 300 100 f_max 20 N_f 64
dump_thermo 100
dump_xyz 1000 trajectory.xyz precision double mass velocity force potential virial unwrapped_position
dump_restart 20000
run 20000

300是热浴目标温度K;100是按步数计的摩擦耦合参数;f_max 20 的频率单位为ps⁻¹,N_f 64 设置滤波频率点数。这些参数用于当前Cu/Ar操作例子,正式应用需按最高振动频率、滤波分辨率及耦合强度检查。不能把20ps⁻¹直接照搬给含O–H等高频振动的体系。

2. NPT-QTB写法不同#

cu-npt-qtb / run.in

potential potential.txt
time_step 1
ensemble npt_qtb iso 0 0 temp 300 300 tperiod 100 pperiod 2000 f_max 20 N_f 64
dump_thermo 100
dump_xyz 1000 trajectory.xyz precision double mass velocity force potential virial unwrapped_position
dump_restart 20000
run 20000

它组合QTB与MTTK/Parrinello–Rahman控压。Ar的完整对应输入也在资料包中:

展开Ar两种QTB输入

ar-nvt-qtb / run.in

potential potential.txt
time_step 2
ensemble nvt_qtb 120 120 100 f_max 20 N_f 64
dump_thermo 100
dump_xyz 1000 trajectory.xyz precision double mass velocity force potential virial unwrapped_position
dump_restart 10000
run 10000

ar-npt-qtb / run.in

potential potential.txt
time_step 2
ensemble npt_qtb iso 0 0 temp 120 120 tperiod 100 pperiod 2000 f_max 20 N_f 64
dump_thermo 100
dump_xyz 1000 trajectory.xyz precision double mass velocity force potential virial unwrapped_position
dump_restart 10000
run 10000

3. 为什么不是一直等于300K或120K#

普通经典温度按动能计算;QTB的核量子零点能贡献也进入运动,因此输出动能温度可以高于热浴目标,不能为了把曲线压回目标值,再叠加经典速度重标度。

材料 算法 设定温度/K 本次后10ps动能温度均值/K
CU nvt-bdp 300 298.54
CU nvt-qtb 300 360.75
CU npt-qtb 300 358.25
AR nvt-bdp 120 117.66
AR nvt-qtb 120 136.33
AR npt-qtb 120 135.13

这些是本次20ps轨迹后半段的描述性均值,不是收敛核量子修正或精度评估。正式QTB还要考虑零点能泄漏、模式间交换、参数和采样收敛。官方QTB说明给出了方法和本版本语法。

4. 同一输出步,不一定处在同一更新阶段#

某些算法先计算并缓存thermo,再调整速度或晶胞。thermo.out 的动能与最终轨迹速度重构出的动能,因此未必是同一个更新时刻。Berendsen本版的最后重标度满足 K_after=K_cached×[1+(T_target/T_cached−1)/T_coup],本例也按这个关系核对,而不是把二者有差异直接当成错误。

同一末态静态重算与原先缓存热力学量的差别

例如本次Cu NVT-BDP最后一步,按最终速度重新计算的动能与缓存动能相差 -0.114791 eV;这反映更新阶段,不是能量守恒误差。NVT任务本来也会与热浴交换能量。

5. 用末态重算对齐构型和数值#

资料包会将每个 restart.xyz 作为新的静态输入,采用零时间步NVE导出;不再施加控温或控压。生成文件在 work/条件名/post-static/:

cat work/cu-nvt-bdp/post-static/run.in
tail -n 1 work/cu-nvt-bdp/post-static/thermo.out
head -n 2 work/cu-nvt-bdp/post-static/snapshot.xyz

其完整控制输入为:

potential potential.txt
time_step 0
ensemble nve
dump_thermo 1
dump_xyz 1 snapshot.xyz precision double mass velocity force potential virial
run 1

analyze.sh work common 会先调用原生GPUMD完成尚未生成的末态导出,再独立求和核对:质量与速度得到动能,动能得到温度,动能张量与virial除以体积得到压力。Ar还使用独立逐对LJ求和验证相同末态的能量、力和virial。

本版未固定分组的这些算例中,thermo温度使用3N的定义;单位换算按本版原生常数处理,并以SI换算交叉核对其舍入差异。不要随意套用其他程序的自由度或速度单位。这里的 precision double 只控制输出位数,不能改变势内部的数值精度。

资料包与完整运行#

下载完整输入、真实参考数据、末态重算与绘图脚本,解压后进入目录。先重画随包结果:

bash analyze.sh

输出为 reference/analysis/ 下的CSV、数值摘要和 reference/figures/ 中的图片。原生末态重算结果已经随包,分析会先核对其输入,再处理数据。

新解压目录提交准备加一个Cu NVT-BDP实例:

sbatch run.slurm

提交完整46条件、两个材料准备流程和依赖分析:

bash submit.sh

只生成脚本检查,用 bash submit.sh --dry-run。整套完成后:

bash analyze.sh work common

这一步对每个重启末态做零步静态导出,再独立分析和画图,应在已分配的计算资源内执行;生成的分析作业已包含这些命令。只运行单例时,先直接查看其 thermo.out、trajectory.xyz、restart.xyz,统一分析需要46条件齐全。

run.slurm 默认一张P100、一个CPU核、gpu-8p100-hs;套餐用户按权限改为例如 gpu-8p100-tc。整套提交还需修改 submit.py 中的partition。bash prepare.sh 和 bash run.sh 条件名 是已有任务资源内的入口,不在登录或管理节点直接运行。prepare.sh 只在新目录建立 common/cu、common/ar,已有common/work/jobs保留;重跑整套请重新解压。单进程启动,不使用mpirun。

固定环境:GPUMD5.9.1、GCC13.3、CUDA12.9,模块 gpumd/5.9.1-p100;该构建含PLUMED2.10.1和NetCDF-C4.10.1,本批没有施加偏置。分析使用ASE3.29.0环境中的NumPy/Matplotlib。20ps结果用于操作与数值关系参考,正式材料研究仍需检查准备时长、模型、尺寸、时间步和采样;不据此给出收敛热力学量、相界或性能排名。

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

查看配图

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

100%查看原图 ↗