🔧 工作流脚本
工作流脚本用于批量准备 DFT、MD 和 NEP 数据处理任务。
工作流脚本只准备目录、输入文件和链接,不替用户提交计算。
脚本位置: Scripts/workflow/
交互入口
普通用户优先使用交互菜单:
选择:
菜单如下(菜单文字保持程序实际输出):
+---------------------------------------------------------+
| WORKFLOW TOOLS |
+---------------------------------------------------------+
| 301) SCF batch pretreatment |
| 302) MD sample batch pretreatment (gpumd) |
| 303) MD sample batch pretreatment (lmp) |
+---------------------------------------------------------+
| 000) Return to the main menu |
+---------------------------------------------------------+
Input the function number:
| 菜单 | 工作流 | 适用场景 |
|---|---|---|
| 301 | SCF 批处理预处理(SCF batch pretreatment) | 为多个结构准备 DFT 单点目录 |
| 302 | GPUMD MD 采样批处理预处理 | 为 GPUMD 采样准备多个目录 |
| 303 | LAMMPS MD 采样批处理预处理 | 为 LAMMPS 采样准备多个目录 |
1. 准备 DFT 单点计算
本节先说明输入文件和单点目录的准备。
请在专用工作目录中操作,并把原始结构另行保存。脚本会在当前目录创建
struct_fp/、struct_md/、计算目录和 presub.sh 等内容。
VASP 单点预处理(301 -> 1)
输入可以是多个 .vasp 文件,或一个 extxyz 文件:
也可以是:
脚本按以下顺序选择输入:
- 有一个或多个
.vasp时优先处理.vasp; .vasp和.xyz同时存在时给出提示,只处理.vasp;- 没有
.vasp且只有一个.xyz时,将该 extxyz 转成 POSCAR; - 没有
.vasp且有多个.xyz时,让用户选择文件。
运行菜单:
所有结构只有一种元素集合时,输出保持原来的平铺结构:
current directory/
├── struct_fp/
│ ├── POSCAR_1.vasp
│ └── ...
├── fp/
├── <prefix>_1/
├── <prefix>_2/
└── presub.sh
对于 extxyz 输入,POSCAR 的元素顺序沿用整个轨迹中元素首次出现的顺序。
如果所有结构的元素集合相同,就沿用原来的平铺目录,
并共用 fp/POTCAR。元素集合相同但原子比例不同的结构仍属于同一组。如果
存在多个元素集合,POSCAR 会按元素顺序放入 struct_fp/<元素顺序>/,各计算
目录链接到对应的 fp/POTCAR_<元素顺序>:
struct_fp/
├── Al_O/POSCAR_1.vasp
└── Al_O_Te_Bi/POSCAR_2.vasp
fp/
├── INCAR
├── POTCAR_Al_O
└── POTCAR_Al_O_Te_Bi
<prefix>_1/POTCAR -> ../fp/POTCAR_Al_O
<prefix>_1/KPOINTS -> ../fp/KPOINTS
<prefix>_2/POTCAR -> ../fp/POTCAR_Al_O_Te_Bi
<prefix>_2/KPOINTS -> ../fp/KPOINTS
请根据程序列出的名称把各组 POTCAR 放入 fp/,并确保 POTCAR 中元素的顺序
与 POSCAR 头部一致。所有组共用 fp/INCAR,每个计算目录都会链接到
../fp/KPOINTS。显式指定 k 点时,请在 fp/ 中提供该文件。如果目标文件
不存在,链接会悬空,VASP 会按 KPOINTS 文件缺失处理并使用 KSPACING。
输入的 prefix 会成为计算目录前缀,之后用 out2xyz 提取结果时,目录名会
写入 extxyz 的 config_type。
CP2K 单点预处理(301 -> 2)
先准备 extxyz 文件和模板。模板必须从 pos.xyz 读取坐标,参考模板为
Scripts/workflow/cp2k_template.inp。通过菜单运行:
交互输入为:
例如:
脚本为每个结构创建 <prefix>_<index>/,并写入 input.inp 和 pos.xyz。
源码用户也可以直接调用脚本。下面的相对路径要求从 GPUMDkit 仓库根目录运行, 并将输入文件名改为实际数据路径;也可以在数据目录中使用脚本的绝对路径。 通过 Conda 安装的用户优先使用上面的菜单。
2. 准备 MD 采样目录
GPUMD(302)
把 .vasp 文件或一个 extxyz 文件放在专用工作目录中。输入选择规则与 VASP
预处理相同:.vasp 优先;没有 .vasp 且有多个 .xyz 时会让用户选择。
典型输入:
或:
运行后通常得到:
current directory/
├── struct_md/
│ ├── model_1.xyz
│ └── ...
├── md/
├── sample_1/
├── sample_2/
└── presub.sh
准备结束后,把已确认的 nep.txt 和每个样本对应的 run_*.in 放入 md/。
例如 run_1.in 链接到 sample_1/run.in,run_2.in 链接到
sample_2/run.in。
LAMMPS(303)
把 .vasp 文件或一个 extxyz 文件放在专用工作目录中;两种格式同时存在时
优先处理 .vasp。
运行后会在 struct_md/ 中创建 LAMMPS data 文件,并创建样本目录、md/
和 presub.sh:
current directory/
├── struct_md/
│ ├── lammps_1.data
│ └── ...
├── md/
├── sample_1/
├── sample_2/
└── presub.sh
准备结束后,把已确认的 lmprun.in 和 nep.txt 放入 md/。
3. 运行前确认与结果检查
在按自己的执行流程提交前,逐项检查:
- 输入结构数量、原子和 type 顺序、晶胞以及生成目录数量;
fp/中的INCAR、POTCAR、KPOINTS,或md/中的nep.txt、run_*.in、lmprun.in;- 每个样本目录的符号链接和文件名;
presub.sh中的可执行文件、资源和调度设置。
presub.sh 是脚本模板,运行前请检查可执行文件和调度设置。
先检查生成目录和链接,再由项目自己的执行流程运行。完成后检查退出状态、
日志、温度、能量、压力、晶胞和轨迹,确认没有失败或不完整的样本。
4. 后处理与下一步
DFT 结果完成并经过检查后,使用与 DFT 程序相符的转换入口:
VASP 结果:
如果 OUTCAR 包含完整的 BORN EFFECTIVE CHARGES 数据块,并且需要保留逐原子的
BEC 标签,可以使用:
CP2K 日志与结构文件:先进入 CP2K 结果根目录,再运行以下命令。它会递归扫描当前目录下的 .log 及配套 .xyz/.inp,成功转换后写入当前目录的 cp2k_exyz.xyz,并用 Logfile.txt 记录处理情况。
VASP 的 -out2xyz/菜单 101 和带 BEC 的 -out2xyz_bec 会在当前目录生成
NEPdataset/train.xyz;Python 版 -out2exyz 会在当前目录写入 train.xyz。
请根据转换入口继续使用实际生成的文件,并保留原始 DFT 输出。随后可用分析和采样工具
检查生成的 extxyz,并记录被排除的目录。
主动学习式流程
需要开展 NEP 数据迭代时,按“MD 轨迹 → 几何筛选 → NepTrain FPS → DFT → 转换 → 数据集检查”的顺序操作,各阶段的检查要点见 主动学习工作流。
使用建议
- 工作流脚本和集群、模板及软件版本有关,正式批量处理前先用少量结构检查。
- 保留模板和原始结构,并在继续前检查生成目录、链接和文件名。