VASP任务提交和管理模块

本模块用于批量提交、监控和管理VASP计算任务,支持SLURM作业系统。

模块概述

该模块提供了一组函数,用于:

  1. 自动发现和验证VASP计算目录

  2. 批量提交SLURM作业

  3. 监控作业运行状态

  4. 检查计算完成情况和结果

主要函数说明

check_job_status(job_id)

检查作业状态。

参数: - job_id: 作业ID(字符串或数字)

返回: - 作业状态字符串:’RUNNING’、’COMPLETED’ 或 ‘UNKNOWN’

作用: 使用squeue命令查询指定作业的当前状态。

check_calculation_success(calc_dir)

检查计算是否成功完成。

参数: - calc_dir: 计算目录路径

返回: - 布尔值,表示计算是否成功完成

作用: 通过检查OUTCAR文件中是否存在”Total CPU time used”标记来判断计算是否正常结束。

submit_job(calc_dir)

提交单个作业。

参数: - calc_dir: 计算目录路径

返回: - 作业ID(字符串)或None(提交失败时)

作用: 在指定计算目录中执行sbatch命令提交SLURM作业。

get_running_jobs()

获取当前运行的作业列表。

参数: - 无参数

返回: - 当前用户运行的作业ID列表

作用: 查询当前用户在SLURM系统中所有正在运行的作业。

discover_vasp_calc_dirs(vasp_dir)

自动发现vasp_calculations目录下的所有计算目录。

参数: - vasp_dir: VASP计算根目录路径

返回: - 有效计算目录的路径列表

作用: 扫描目录结构,识别包含完整VASP输入文件(POSCAR、INCAR、submit.sh)的计算目录。

submit_vasp_calculations(config_file=”input.yaml”)

批量提交VASP计算。

参数: - config_file: 配置文件路径(默认”input.yaml”)

返回: - 无返回值

作用: 主控制函数,管理整个批量提交流程:发现计算、提交作业、监控状态、处理结果。

工作流程

  1. 目录发现:扫描``materials_project/vasp_calculations/``目录下的所有子目录

  2. 状态检查:检查哪些计算已经完成,哪些需要提交

  3. 批量提交:根据最大批处理数量限制提交作业

  4. 状态监控:定期检查作业运行状态

  5. 结果验证:确认计算成功完成

配置参数说明

配置文件需要包含以下提交相关参数:

vasp:
    submission:
        max_batch_size: 50     # 最大同时运行作业数
        check_interval: 300    # 状态检查间隔(秒)

输出信息

模块会提供详细的运行状态信息:

正在扫描VASP计算目录...
发现计算类别: BaTiO3
  ✓ 有效计算目录: BaTiO3_mp-2998_supercell
=== 第1轮提交 ===
当前运行作业: 0/50
可提交 50 个新作业
  ✓ 已提交作业: 123456 - BaTiO3/BaTiO3_mp-2998_supercell

使用示例

# 直接运行模块
python vasp_submit.py

# 或在Python代码中调用
from vasp_submit import submit_vasp_calculations
submit_vasp_calculations("input.yaml")

注意事项

  1. 需要SLURM作业系统环境

  2. 需要先运行vasp_setup.py生成计算目录

  3. 提交脚本(submit.sh)需要针对具体的HPC环境配置

  4. 最大批处理数量应根据队列资源合理设置

  5. 计算完成判断基于OUTCAR文件中的特定标记