激发态与非绝热动力学工具
VASPBERRY与Hefei-NAMD的环境、输入、并行提交和已验证范围。
阅读本篇目录
各章节保留原指南中的版本、平台、操作示例与适用边界;章节日期不同,使用时按所列版本核对。全部软件分项
环境与使用说明#
6.14 VASPBERRY#
VASPBERRY读取VASP的WAVECAR,计算Berry曲率、Chern数、二维Z₂,以及投影自旋拓扑量;Python工具可继续做Hall积分、PROCAR投影分析和绘图。普通WAVECAR工作流不需要重编VASP或Wannier90。它与基于Wannier模型的WannierTools使用不同输入,可以分别使用和交叉验证。
版本、编译环境与精度#
| 版本 | 平台/构建 | 编译器、MPI和数学库 | 程序路径 |
|---|---|---|---|
| 1.6.3 | 通用CPU串行;login01小任务 | oneAPI2024.2,ifx2024.2.1;MKL2024.2 LP64 sequential;GNU Make4.3源码构建,不加AVX512限定 | /public/software/vaspberry/1.6.3/oneapi-2024.2/serial |
| 1.6.3 | 8173m CPU MPI;AVX512 | oneAPI2024.2,mpiifx;IntelMPI2021.13;同套MKL LP64 sequential;追加-xCORE-AVX512 |
/public/software/vaspberry/1.6.3/oneapi-2024.2/8173m |
固定官方标签v1.6.3、提交1d5d752da08b30aa53712cbdfc4278b6b51f7f21。构建保留上游-fpp -O2 -extend-source -assume byterecl和-qmkl=sequential:
make -j32 ifx BUILD_DIR=build-serial
make -j32 ifx-mpi BUILD_DIR=build-8173m FFLAGS=-xCORE-AVX512
主Fortran与三个include取自同一固定提交,未修改科学源码、阈值或添加fast-math。计算主要使用REAL8/COMPLEX16,支持的WAVECAR系数按COMPLEX*8格式读入后依照上游转换。没有另部署单精度或混合精度程序,也没有原生CUDA/OpenACC/OpenMP加速版。GPU VASP可以负责前置DFT计算,VASPBERRY后处理仍使用CPU。
依赖复用/public/toolkit/oneapi/2024.2的compiler/2024.2、mpi/2021.13、mkl/2024.2。原生程序必须使用LP64接口,不用ILP64或默认八字节整数。MPI须用同套Intelmpiexec.hydra,不能由HPC-X/Open MPI的mpirun启动。
Python独立环境为/public/toolkit/miniconda3/envs/vaspberry-1.6.3:Python3.11.16、NumPy2.3.5、Matplotlib3.11.2,供分析和非交互绘图。Conda从TUNA conda-forge创建,pip命令显式使用-i https://pypi.tuna.tsinghua.edu.cn/simple;NumPy/Matplotlib使用官方wheel,不能把wheel内BLAS误写成原生Fortran链接MKL。完整传递依赖见版本根目录manifests/pip-freeze.log,构建/输入哈希和验证记录在管理员维护记录。
加载及入口#
module load vaspberry/1.6.3
vaspberry --help
vaspberry-post --help
vaspberry-kubo --help
vaspberry-transport --help
默认module指向通用串行配置;vaspberry/1.6.3-8173m提供目标MPI配置。vaspberry始终是串行入口,vaspberry_mpi是AVX512 MPI入口;不要在P100节点的Haswell CPU上直接运行目标AVX512程序。VASPBERRY_BIN随module选择串行或MPI的真实程序,VASPBERRY_ROOT是版本根目录。配套脚本、官方文档和示例位于$VASPBERRY_ROOT/share。
小型串行后处理在login01独立结果目录运行,例如下述MoS₂式占据子空间曲率;1:18只是示例,必须按自己的体系修改:
vaspberry --task kubo --wavecar /自己的路径/WAVECAR --bands 1:18
1.6.3中--bands N是单带,--bands FIRST:LAST是子空间迹;--per-band 1请求各隔离单带。旧--bundle/-kubo_bundle命令不能继续使用。新CSV需要完整数据覆盖、有限数和终态PASS,文件存在或进程返回0不等于结果可用。
MPI提交和Python分析#
公共模板:/public/slurm_scripts/{hs_user,tc_user}/vaspberry/1.6.3/8173m/sub_vaspberry_1.6.3_8173m.sh,可由yskit复制。模板使用56 MPI×1 CPU,OMP/MKL/OPENBLAS各1,无GPU申请;读取当前目录WAVECAR,结果写入独立的vaspberry-<作业号>目录。
sbatch sub_vaspberry_1.6.3_8173m.sh
提交前修改末尾--task和--bands,核对体系、采样和能带间隙。每个计算用新结果目录,避免上游固定输出名冲突。仅增加MPI进程不会补充WAVECAR中的k点;MPI速度受k点数量、内存和共享存储I/O影响。
Python前端使用一个analysis.ini:
[run]
wavecar = WAVECAR
binary = /public/software/vaspberry/1.6.3/bin/vaspberry_mpi
output = results-hall
mesh = 12 12
energy_reference = unchanged VASP eigenvalue zero
mpi_procs = 56
mpi_launcher = /public/toolkit/oneapi/2024.2/mpi/2021.13/bin/mpiexec.hydra
[hall]
mu = -1.3 -0.9 9
reference = -1.1
temperatures = 0
上面的网格/化学势仅来自官方Bi示例,不能作为任意材料默认值。INI路径相对INI文件所在目录。可以在login01轻量检查:vaspberry-post check analysis.ini。大型计算在56核Slurm分配中只启动一次Python前端,用vaspberry-post run analysis.ini替换原模板的mkdir/cd及末尾原生MPI命令;保留提交目录、资源和线程设置,由mpi_procs=56使Python启动原生MPI阶段。不要再用mpirun -n 56 vaspberry-post ...。
完成后在login01绘图:
vaspberry-post plot results-hall
保留run.json、native/PAIRS.csv、pairs/pairs.npz和对应JSON,数值Hall表位于hall/;绘图输出在figures/。Python积分和绘图不自动成为MPI或GPU任务。
输入和物理适用范围#
- 原生读取器支持完整复数RTAG45200;自动byte/word RECL只处理布局,不自动兼容其他系数格式、损坏文件或Git LFS指针。CPU/GPU VASP输出都须核对实际格式,不能仅按版本号判断。
- Chern/输运BZ积分需要完整网格。k路径能给路径曲率,不能代替全BZ积分。
- 官方二维Z₂针对非磁、时间反演对称绝缘体:完整unshifted偶数Nx/Ny≥4的Nx×Ny×1网格、ISYM=-1及SOC自旋波函数;ISYM=0不能视为等价设置。
- 原生spin-chern/spin-kubo还需要同次计算的匹配OUTCAR,以确定SAXIS到Cartesian自旋坐标。PROCAR分组投影与自旋Chern、常规自旋Hall响应是不同量。
- WAVECAR Kubo使用canonical momentum,不含完整PAW/nonlocal/SOC速度修正。保留现有矩阵导入工具,但没有为现有VASP追加完整算符producer源码插桩;文档中的5.4.4专用producer范围不能外推到所有6.x/GPU/hybrid/MPI变体。
- 安装验收不替代用户材料的k网格、能带窗和算符收敛检查。
验收状态#
两套原生构建、LP64 sequential MKL/Intel MPI链接、真实双rank通信、MoS₂曲率/pairs/布局及无效输入拒绝、Bi144点Z₂=1与串行/MPI场对照通过;同指令集官方自旋测试、正式通用/AVX512自旋数值对照、118项选取Python回归、Bi Hall完整分析及PNG/PDF/SVG通过。login01普通用户串行曲率与管理节点结果一致,三个Python入口、隔离入口、默认module/版本切换/卸载和绘图通过。历史归档跨编译器的归一化曲率差约1.19e-12Ų、通量差约1.95e-14rad,按网格面积核对单位;首次检查和差异调查保留,未修改科学源码/物理阈值。同参数自旋byte检查使用未公开的验证专用串行程序,正式部署仍仅两套。
8173m目标Slurm作业899已完成:56MPI×1CPU、MPI真实通信、MoS₂完整曲率CSV及Bi二维Z₂场/奇偶与管理节点参考核对通过。安装、交付和目标复验均已完成。
6.15 Hefei-NAMD#
Hefei-NAMD用于基于电子结构轨迹的非绝热动力学和表面跃迁计算。它是合肥团队的科学程序,与通常用于经典分子动力学的NAMD软件不是同一个项目。公共部署采用原始作者仓库和DEV仓库的固定提交;仓库没有正式版本标签,下面的日期是本集群的快照标识。
| 快照 | 平台 | 程序与功能 | 编译环境 | 安装路径 |
|---|---|---|---|---|
| original 2024.05.21 | 通用x86 CPU,串行 | namd:FSSH、WAVECAR耦合计算 |
oneAPI2023.2、ifort2021.10.0,-assume byterecl -O2 |
/public/software/hefei-namd/original/2024.05.21/oneapi-2023.2/serial |
| original 2024.05.21 | 通用x86 CPU,串行 | dish:DISH,读取实数文本耦合 |
同上,未启用原始OpenMP指令 | /public/software/hefei-namd/original/2024.05.21/oneapi-2023.2/serial |
| original 2024.05.21 | 通用x86 CPU,串行 | namdk:独立FSSH积分分支,实数文本耦合 |
同上,用户已采用I/O及状态修补 | /public/software/hefei-namd/original/2024.05.21/oneapi-2023.2/serial |
| DEV 2023.03.29 | 8173m,CPU MPI | hfnamd:FSSH/DISH,样本组或轨迹并行 |
mpiifort/ifort2021.10.0、Intel MPI2021.10、oneMKL2023.2 LP64 | /public/software/hefei-namd/dev/2023.03.29/oneapi-2023.2/8173m |
原始提交为b7c8fc5a27e89b85fbcd7ba67c41b38a99085d4e,DEV提交为308d694f49f8af6c9141aa33baac56ea52624e94。原始三个目录分别make -j1,通过命令行明确指定FC=ifort -assume byterecl和FFLAGS=-O2,避免namd的Makefile中后面的gfortran定义覆盖编译器。DEV采用上游linux/Makefile,FC=mpiifort -assume byterecl,FFLAGS=-O3 -xCORE-AVX512 -qopenmp -traceback -check bounds,保留ENABLEMPI/ENABLEMKL;链接上游LP64 mkl_intel_thread和匹配的Intel MPI,运行时限制MKL为1线程。
Fortran模块依赖不完整,构建使用make -j1。用户已采用最小源码修补:namd补齐末行已传播波函数;namdk selected Dij/DijR/DijI按NSW分配,每个样本整体初始化psi_a/pop_a,runSH上界改为NAMDTIME-1。相关目录使用make -r -B -j1完整重编,禁用GNU make内建Modula2 .mod→.o规则;生产编译器、-O2和积分方法保持原配置。4个已确认源码文件有上游/修补后哈希,51个其他锁定文件未变。另有仅用于验收的-check bounds -traceback -fpe0构建,不作为生产默认。原始程序不依赖MKL或MPI;DEV有AVX512目标指令,部署面向8173m,不应在P100节点的Haswell CPU上运行此目标程序。DEV轨迹循环中的!!$OMP是注释,-qopenmp与运行库链接不代表这些循环已实现OpenMP加速;本次生产模板采用MPI。
精度保持上游selected_real_kind(10)主要计算和selected_real_kind(5)存储波函数系数,一般对应双精度计算与单精度WAVECAR系数。没有额外部署single/mixed/double变体,也没有原生GPU版。GPU VASP可以承担前置电子结构计算,后续Hefei-NAMD仍使用CPU;不需要为安装这个程序重新编译既有VASP、DeePMD-kit或Wannier90。
加载程序与查看安装内容#
module load hefei-namd/2024.05.21
namd --help
dish --help
namdk --help
hefei-namd-tools --list
默认module load hefei-namd也是original快照;DEV使用module load hefei-namd/dev-2023.03.29。两个module属于同一软件族,切换时用module swap hefei-namd hefei-namd/dev-2023.03.29。它们加载匹配的oneapi/2023.2,并把独立Python环境加入PATH,卸载后恢复环境。
HEFEI_NAMD_ROOT指向当前分支版本根目录,HEFEI_NAMD_SHARE指向当前分支的公共资料;HEFEI_NAMD_TOOLS指向原始Python模板目录。原始文档/教学示例位于original/2024.05.21/share/doc,DEV官方例子位于dev/2023.03.29/share/examples。示例不包含重新分发的POTCAR,用户须使用自己的合法输入。
包装入口为上面的原始版本bin/namd、bin/dish、bin/namdk和DEV版本bin/hfnamd;真实二进制在表中prefix的bin目录。原生程序本身没有通用--version/--help命令,公共包装入口提供帮助,正常无参数运行仍从当前目录读取inp。module和原始入口设置Intel运行时FORT_FMT_NO_WRAP_MARGIN=true,防止列表输出自动折行造成NumPy逐行读取失败;这只调整文本输出格式,不改科学计算。Intel列表输出说明。
输入准备与分支差异#
推荐流程为:完成MD轨迹 → 选取快照 → 每帧电子结构计算 → 整理耦合和能量 → 准备动力学输入 → 计算/统计。XDATCAR提取工具只生成结构,不能替代每帧的VASP计算:
module load hefei-namd/2024.05.21
hefei-namd-extract-xdatcar XDATCAR --output run
默认使用所有帧,编号位数按提取后的帧数确定;可用--start/--stop/--stride/--digits调整。输出目录必须是新目录;工具不覆盖已有结果,也不填写或调整inp。原始namd在读取WAVECAR时按len(str(NSW))生成编号,因此NSW=2000对应run/0001/WAVECAR,NSW=9对应run/1/WAVECAR。抽帧后需由用户核对有效时间间隔和POTIM。
| 程序 | 耦合输入 | 文本数据行数约定 | namelist开关与注意事项 |
|---|---|---|---|
原始namd |
新计算从每帧WAVECAR生成COUPCAR、NATXT/EIGTXT;支持复用缓存 | NATXT/EIGTXT各NSW-1行 |
输入项是LCPEXT,不是输出说明中的LCPTXT;要直接读取文本,须有COUPCAR文件或空占位文件 |
原始dish |
实数NATXT/EIGTXT,另需DEPHTIME | 各NSW行,内部轨迹循环另有NSW-1约定 |
LCPEXT=.TRUE.,需COUPCAR空占位文件;不能直接从WAVECAR计算耦合 |
DEV hfnamd |
实数NATXT/EIGTXT;DISH另需DEPHTIME | 各NSW行;DISH耦合复制周期涉及NSW-2 |
LCPTXT=.TRUE.;不读取WAVECAR/二进制COUPCAR,初始时刻至少2以满足插值前帧 |
原始namdk |
当前启用实数NATXT路径;代码中的复数读入调用未启用 | NSW行读取/分配已匹配并通过边界复验 | LCPEXT=.TRUE.且保留COUPCAR占位文件;完整t0与传播输出已验收、入口已开放;不推断任意k/SOC支持 |
原始namdk应满足NAMDTIME < NSW及NAMDTINI + NAMDTIME - 1 <= NSW,确保插值前后帧和内部数组范围有效。其PSICT复数采用实部/虚部格式,每个时间点分为两条物理记录;不能直接按每个物理行理解一个时间点。
INICON提供NSAMPLE组初始时刻与初始能带;BMIN/BMAX、总能带数和NATXT/EIGTXT列数须匹配。不同初始时刻对应不同输出后缀;并行时相同初始时刻会发生同名文件覆盖,准备输入时必须避免。
原始namd的耦合读入实际使用第一k点、第一自旋;RTAG45200单精度系数路径已验证,不据此保证Γ压缩、RTAG45210、SOC、自旋器或任意k点文件都适用。同一文本矩阵在不同分支的内部读取顺序不同,后续积分也按对应约定实现;转换时应结合具体算法检查时间步、能带范围、方向及符号,不要盲目再次转置。原始输出的NATXT是尚未除以2*POTIM的重叠差;原始积分初始化和DEV读取都会进行对应缩放,不能把已缩放数据重复除以2dt。COUPCAR是编译器/格式相关缓存,不应跨分支直接复用。
8173m提交与MPI进程使用#
CPU8173m为独占计费节点,模板统一使用56个MPI进程、每进程1个CPU,共56核。两类模板已同步到核时/套餐用户目录:
/public/slurm_scripts/hs_user/hefei-namd/dev-2023.03.29/8173m/sub_hefei_namd_dev_fssh_8173m.sh
/public/slurm_scripts/hs_user/hefei-namd/dev-2023.03.29/8173m/sub_hefei_namd_dev_dish_8173m.sh
/public/slurm_scripts/tc_user/hefei-namd/dev-2023.03.29/8173m/sub_hefei_namd_dev_fssh_8173m.sh
/public/slurm_scripts/tc_user/hefei-namd/dev-2023.03.29/8173m/sub_hefei_namd_dev_dish_8173m.sh
可以在yskit菜单1选择用户类型、hefei-namd、版本和8173m,再复制模板到当前算例目录。核对资源和科学输入后sbatch提交;只写%j.out,没有单独#SBATCH --error。
- FSSH:
inp设置ALGO="FSSH"、NPAR=56,并提供至少56组独立初始条件(NSAMPLE>=56)。程序实际使用min(NPAR, MPI进程数, NSAMPLE)个样本组,每组根进程计算,因此只有1个样本时即使启动56MPI也不会得到56路样本计算。不要为凑进程而重复同一个初始时刻。 - DISH:
inp设置ALGO="DISH"、NPAR=1,把同一样本的NTRAJ条轨迹分配到56MPI进程;轨迹数至少56,通常更大,由用户按统计收敛需求决定。需要能带顺序匹配的DEPHTIME矩阵。 OMP_NUM_THREADS/MKL_NUM_THREADS/OPENBLAS_NUM_THREADS均为1,使用匹配的Intelmpiexec.hydra,不能换成HPC-X/OpenMPI启动器。模板在启动前通过hefei-namd-preflight只读检查资源分配和输出重名风险,不会修改科学输入。- 当前生产模板验证目标为单节点56MPI。多节点、其他CPU或其他MPI/OpenMP组合需另行验证,不能单纯增加节点数便认为已获得相应性能。
原始namd/dish/namdk是串行程序,小型准备/后处理可在login01运行;不要在同一目录mpirun -n56 namd、dish或namdk,那是重复运行串行程序且会覆盖结果。较大的批量原始任务应先设计每个进程独立输入/输出目录,不提供虚假的MPI模板。
独立Python环境与后处理#
| 环境路径 | Python | 核心包 | 用途 |
|---|---|---|---|
/public/toolkit/miniconda3/envs/hefei-namd-2024.05.21 |
3.11.16 | NumPy1.26.4、SciPy1.13.1、Matplotlib3.11.2、ASE3.26.0 | 三个Python3模板、能量/布居图与轨迹结构提取 |
SciPy保持1.13.1是为了原始Dephase.py使用的cumtrapz接口;没有给其他软件的Conda环境安装或替换这些包。Conda使用清华conda-forge,pip使用显式-i https://pypi.tuna.tsinghua.edu.cn/simple,核心版本及完整包清单均入安装记录。
module load hefei-namd/2024.05.21
hefei-namd-tools --copy Dephase.py
# 检查energy.dat为逐时刻、逐能带的eV数据,并确认脚本中的dt。
python Dephase.py
Dephase.py生成DISH所需DEPHTIME;poen_fssh.py统计跃迁布居/平均能量并生成kpoen.png,应编辑nsw/prefix/nproc/bmin/bmax/namdTime/potim,注意其中带切片是Python的0开始、右端不包含;tdksen.py读取PROCAR投影并生成ksen_wht.png,需用户填写真实Efermi和原子/自旋/k点索引。后两个脚本是体系相关模板,不能未经编辑直接用于任意轨迹;tdksen.py原始的Efermi退出提示是要求填写参数。
旧scripts/nac.py、spatial_localization_fssh.py含Python2语法,仅保留参考,未安装Python2、未迁移科学算法。默认没有安装mpi4py、Numba、TensorFlow/PyTorch或CUDA后处理链;不要据独立Python环境推断这些扩展可用。
验收状态与已确认限制#
管理节点完成:原始namd官方短例与dish零耦合参考,已知旋转系数的归一化/耦合检查,真实RTAG45200 WAVECAR首k点能量与相同帧零耦合;DEV在1/2/4MPI下的解析布居和有符号振幅、Trotter和MKL积分、确定性输出一致性、DISH实际分配/归约以及官方FSSH/DISH短例;三个Python后处理/ASE结构往返均通过。login01普通用户运行相同串行/Python数值、默认module/切换/卸载、独立Python入口、模板复制与轨迹提取也通过。
随机跃迁使用时钟/进程相关随机种子,验收检查有限值、归一化与非平凡总体变化,不能要求不同MPI进程数的随机轨迹逐字节相同。原始真实WAVECAR测试使用两份相同帧,验证读取与零耦合,不代表已验证用户体系的真实AIMD动力学或科学收敛。
已采用修补复验:namd官方例全部20行波函数范数通过,末行约1.00000348、前19行与修补前零差;NAMDTIME=1和零耦合参考通过。namdk原forrtl408输入开启边界/浮点异常检查后退出0,非零耦合有符号幅度误差约3.2×10⁻¹⁵、NSW128/NAMDTIME127窗口通过;官方11带三个不同初始能带的全部20行(包含t0)均有完整有限波函数和归一化布居,生产与检查构建的格式化幅度一致。此前有效传播行结果保持一致。回归检查在修补前能复现旧样本状态残留和末尾额外步浮点异常,在修补后通过;NAMDTIME=1不再执行额外跃迁。login01普通用户通过实际公共namdk入口、module默认/切换/卸载复验。
8173m目标作业900已完成:ccn001-8173m单节点56MPI×1CPU,56样本组解析Trotter/MKL幅度、实际DISH轨迹归约及官方FSSH/DISH归一化通过,二进制hash一致。目标DEV验收完成;原始源码修补状态仍以单独记录为准。
用户已采用的全部最小源码修补已实施并验收:namd末行波函数完整保存,namdk耦合数组按NSW分配、每个样本完整初始化波函数/布居,跃迁范围与传播/输出统一到NAMDTIME-1。管理节点及login01普通用户通过边界和浮点异常检查、完整初态、不同初始能带、官方11带全部20行输出及非零耦合解析参考。namdk公共入口已开放;4个已确认源码文件修改、51个其他固定文件哈希未变。dish/DEV、依赖及已有56核脚本保持原配置。
公共详细说明为/public/software/hefei-namd/README.md,已应用补丁为/public/software/hefei-namd/manifests/original-io-fixes.patch;已应用状态补丁为/public/software/hefei-namd/manifests/namdk-initial-and-terminal-state.patch,完整已采用补丁为/public/software/hefei-namd/manifests/all-adopted-original-fixes.patch。构建/源锁定/依赖/hash/验收记录为管理员维护记录。续接安装应先读该目录STATUS.md与progress.json,不要重复建环境、编译或提交900。