Hefei-NAMD的FSSH电子布居
准备inp与INICON,运行原版FSSH,比较电子子步并提取实际布居、振幅和平均能量。
阅读本篇目录
本专题用鸢算科技集群实际计算的Si64轨迹、128个快照波函数和非绝热动力学,演示从准备文件到读取布居和画图的操作。原版为2024.05.21固定提交b7c8fc5,DEV为2023.03.29固定提交308d694;两者是代码快照日期,不是正式版本标签。原版使用ifort 2021.10 / Intel oneAPI 2023.2,DEV配套Intel MPI 2021.10与MKL 2023.2、AVX512。
下载完整输入、实际数值、8张图与操作脚本,保存为 hefei-namd.zip:
python3 -m zipfile -e hefei-namd.zip .
cd hefei-namd-silicon-practical-wave286
bash preview.sh
ls preview/figures
预览读取已有数值。希望自己运行原生后处理时,依次执行:
bash prepare.sh
bash calculate.sh
bash extract.sh
输入复制到 work/,原生结果也在其中,CSV与独立提取结果在 results/。本包的小型CPU后处理不重新运行VASP;实际DFT输入另放 inputs/DFT-inputs/,新的DFT需要自己的授权程序和势文件,并经Slurm提交。DEV需要支持AVX512的CPU,正式生产请申请相应CPU资源。
1 进入准备好的输入目录#
bash prepare.sh
cd work/dynamics/Si64-300K-seed11/namd-FSSH-1000
cp ../../../double-NAC/Si64-300K-seed11/NATXT .
cp ../../../double-NAC/Si64-300K-seed11/EIGTXT .
cat inp
cat INICON
若已执行过公共流程的 prepare.sh,不要再执行一次;直接进入现有目录。以下原版输入是本例真实设置:
&NAMDPARA
BMIN=1, BMAX=12
NSW=32, POTIM=0.5, TEMP=300
NSAMPLE=4, NAMDTIME=20, NELM=1000, NTRAJ=4000
LHOLE=.FALSE.
NBANDS=12, LCPEXT=.TRUE.
LSHP=.TRUE.
/
INICON:
2 6
3 6
4 6
5 6
每行是“初始帧号、局部初始能带”,均从1开始。四行分别从所选轨迹第2、3、4、5帧出发,局部6即原VASP第130带。NSAMPLE=4对应四行,NAMDTIME=20对应20个输出时刻,显示时间跨度9.5 fs。它不是20条独立核轨迹。
2 运行原版程序#
module load hefei-namd/2024.05.21
export OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1
namd > native.log 2>&1
tail native.log
ls SHPROP.* PSICT.*
head -n 2 SHPROP.2
这段是已获分配CPU资源后的程序命令。串行原版不用为它申请多张GPU;GPU用于前置VASP波函数计算,NAMD传播是CPU步骤。下载包的完整四轨迹、七方法复跑由 bash calculate.sh完成;若已手工运行一个目录,请保留结果,另用干净包运行全套,避免覆盖。
LCPEXT=.TRUE.读取文本耦合;本例同时放空 COUPCAR以适配当前原版文件打开方式。LHOLE=.FALSE.是电子例,不能按空穴文案解释。NTRAJ=4000是每个初时刻的跳跃统计轨迹数。
3 分清跳跃布居与量子振幅#
SHPROP每行依次为时间、布居加权平均能量、12态跳跃布居;PSICT是复振幅,|c_i|²是量子布居。有限随机跳跃集合和量子布居不要求逐点相同。
原版第一行打印0.5 fs但对应初始态。下载包提取器减去第一行时间,以初态为0,避免将所有结果错移半个MD步:
python - <<'PY'
import numpy as np
a=np.loadtxt('SHPROP.2')
print('elapsed fs, population sum, original band130')
print(np.column_stack([a[:,0]-a[0,0], a[:,2:].sum(1), a[:,7]]))
PY
a[:,7]为第8列,即前两列之后的第6个局部能带。能带映射不清楚时,先对照INICON和前一篇表格。
4 增加电子子步,看数值变化#
本例保持同一核轨迹与耦合,分别运行 NELM=1000和2000。NAMD的NELM是每个核时间间隔内的电子传播子步数,和VASP的SCF迭代上限没有关系。

四条轨迹中,1000子步最大量子范数误差约2.435×10⁻⁵,2000时约6.080×10⁻⁶;与独立DOP853传播的最大量子布居差分别约2.42×10⁻⁵和6.80×10⁻⁶。
原版循环实际传播NELM−1个内步,所以19个核间隔对应实际积分时长9.4905与9.49525 fs,输出网格仍标9.5 fs。独立对照采用同样有效时钟。比较随机SHPROP时,还存在随机统计波动,不能把两次不同抽样的差值全归因于积分子步。
5 统一提取全部结果#
回到包根目录,在已完成整套计算后:
bash extract.sh
head results/data/Si64-300K-seed11-namd-FSSH-1000-population.csv
ls results/data/*quantum.csv
平均CSV是四个初始时刻的平均,各列明确写原始能带编号。核轨迹独立性和不同初始时刻不是同一个统计层级,温度/种子比较见DISH篇。