TDEP从Si的DFT轨迹准备数据
准备Si64多温度NVT输入,保留真实速度,转换坐标、力、能量和应力,明确训练与测试数据。
阅读本篇目录
本专题用鸢算科技集群实际完成的Si多温度DFT数据,演示TDEP输入准备、二至四阶力常数拟合、声子、自由能和热导。版本为TDEP 25.03,固定提交d38f435,采用ifx/icx 2024.2.1、Intel MPI 2021.13、顺序MKL、FFTW 3.3.11和HDF5 1.14.6;使用 tdep/25.03-8173m CPU模块。前置DFT使用VASP 6.6.1 GPU/HDF5构建,NVHPC 25.3、CUDA 12.8,分别在P100和V100 16G上运行。
下载实际输入、数值、8张图与操作脚本,保存为 tdep-silicon.zip:
python3 -m zipfile -e tdep-silicon.zip .
cd tdep-silicon-practical-wave285
bash preview.sh
ls preview/figures
预览只读 reference/数值,不启动DFT。需要从随包自有数值输入运行原生拟合及后处理时,用下面三个短命令;这也不重跑VASP:
bash prepare.sh
bash calculate.sh
bash extract.sh
原生结果在 work/,提取表格在 results/data/。本包为小型单进程CPU示例;正式大拟合和热导请用Slurm分配CPU资源。VASP程序、POTCAR和原始全文电子输出不随包分发。
1 先确定数据要怎样使用#
流程是:生成理想原胞/超胞 → 准备各温度初速度 → Slurm运行DFT MD → 检查轨迹 → 转换TDEP输入 → 按独立轨迹或独立构型留出测试集 → 拟合与画图。

本例晶格常数5.43 Å,Si64采用常规8原子胞的2×2×2复制,晶胞边长10.86 Å。300、600、900 K各两条80步NVT轨迹,时间步0.5 fs,总长40 fs,使用不同初速度种子11和29;去掉质心运动后按189个动能自由度设定初温。POSCAR中包含真实初速度。
40 fs用于示范完整文件流程和训练误差判断,不足以说明已热平衡或覆盖长时间涨落。正式研究应先平衡,再延长采样、检查相关时间及相应结构/温度条件。
2 准备VASP输入#
下面是300 K、seed11的实际Si64完整INCAR:
SYSTEM=Si64-300K-seed11
ENCUT=450
PREC=Accurate
EDIFF=1E-6
IBRION=0
NSW=80
POTIM=0.5
MDALGO=2
SMASS=0
TEBEG=300
TEEND=300
ISIF=2
ISYM=0
NBANDS=160
KPAR=1
ISPIN=1
ISMEAR=0
SIGMA=0.05
ALGO=Normal
NELM=160
LREAL=.FALSE.
LASPH=.TRUE.
LWAVE=.FALSE.
LCHARG=.FALSE.
电子KPOINTS:
Si64 electronic mesh
0
Gamma
1 1 1
0 0 0
用于TDEP识别结构的2原子原胞 infile.ucposcar:
Si
1.0000000000000000
0.0000000000000000 2.7149999999999999 2.7149999999999999
2.7149999999999999 0.0000000000000000 2.7149999999999999
2.7149999999999999 2.7149999999999999 0.0000000000000000
Si
2
Direct
0.0000000000000000 0.0000000000000000 -0.0000000000000000
0.2500000000000000 0.2500000000000000 0.2500000000000000
**原胞不代替MD超胞。**实际64原子POSCAR、理想 infile.ssposcar与全部初速度已放在下载包 inputs/DFT-inputs/Si64-300K-seed11/,请完整复制。ISIF=2、固定晶胞适合这组定容例;没有进行随温度的晶胞/体积优化。
cp -r inputs/DFT-inputs/Si64-300K-seed11 Si300
cd Si300
# 准备有授权的Si PBE POTCAR
例如本例P100使用单卡、一个MPI进程,提交脚本可写为:
cat > submit.sh <<'SH'
#!/bin/bash
#SBATCH --job-name=Si-TDEP
#SBATCH --partition=gpu-8p100-hs
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --gres=gpu:p100-16g:1
#SBATCH --mem=12G
#SBATCH --time=00:40:00
#SBATCH --output=slurm-%j.log
set -eo pipefail
source /etc/profile
module load vasp/6.6.1-p100-hdf5
ulimit -s unlimited
export OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1
mpirun --bind-to none -np 1 vasp_std > vasp.log 2>&1
SH
bash -n submit.sh
sbatch submit.sh
tail OSZICAR
按上面的顺序生成并检查脚本,再提交。套餐用户应按自己可用的分区与节点资源调整;换V100时同时更换模块、GPU类型与分区,不能只改其中一项。
前置DFT为450 eV、EDIFF=1E-6、160能带、Gamma 1×1×1。不同温度保持这些设置一致;比较时不要把原先16原子、2×2×2电子网格的数据无说明地混入Si64模型。

温度会围绕设定值振荡。右图为包含Nosé虚拟自由度的扩展能量,不是只看势能;写TDEP统计输入时则使用物理总能 电子自由能+原子动能,不把恒温器虚拟能量加进去。
3 转换成TDEP五类输入#
将下载包中的 convert.sh、convert.py放到包含自己 vasprun.xml、infile.ucposcar和 infile.ssposcar的MD目录:
bash convert.sh 300
ls tdep-data
head tdep-data/infile.meta
head tdep-data/infile.forces
转换器从第21帧开始每隔2帧取一次,本例得到30帧,间隔1 fs。它只读已完成的XML,不运行VASP。更长轨迹需要按平衡时间与相关性调整选择;脚本中的0.5 fs和定胞假设也应与您自己的计算相同。
| 文件 | 本例含义 |
|---|---|
| infile.ucposcar | 2原子理想原胞 |
| infile.ssposcar | 与MD原子顺序一致的64原子理想超胞 |
| infile.positions | 每帧64行分数坐标,按原子顺序排列 |
| infile.forces | 同帧同原子的Cartesian力,eV/Å |
| infile.stat | 帧号、fs时间、物理总能、势能、动能、K温度、GPa压力和应力 |
| infile.meta | 原子数、构型数、选帧后的时间间隔fs、目标温度K |
本例meta为:
64
30
1.0
300
转换器将VASP kbar压缩为正的应力乘0.1得到GPa;不能直接复制ASE常用的拉伸为正应力而不变号。坐标、力和统计必须使用同一组帧。
4 补充独立构型并留出测试集#
本例另用 canonical_configuration生成300/600/900 K经典构型,并对每温度12个构型实际计算DFT静态力。每温度取前10个参与拟合,后2个始终保留作独立测试;还保留seed29的整条MD轨迹。
module load tdep/25.03-8173m
canonical_configuration -t 300 -n 4 --mindist 1.8
ls contcar_conf*
此命令需在已有原胞、超胞和二阶力常数的目录使用,完整例位于 work/post300/canonical-classical/。生成器写出的构型含速度;用于静态力标签时保留这些速度作构型来源记录,NSW=0不会因此变成MD。
下一篇:拟合与独立力误差。