命令管理模块说明

概述

main.py 是 PhyMLP Kit 工具包的命令行接口主模块,负责提供所有功能的统一入口。 它通过子命令系统组织不同的功能模块,用户可以通过 phymlp-kit 命令调用各种工具。

模块架构

模块详细说明

1. 训练与验证模块

1.1 train - 机器学习势训练

def _train_command(args):
    run = RUN()
    info = run.Read(args.train_input)
    run.Key_and_parament(info)
    bool_train = run.Bool_commands(run.train)
    train_dir, train_cmd = run.Train_commands(bool_train)
    run.Train(bool_train, train_dir, train_cmd)
    bool_calc = run.Bool_commands(run.calculate)
    run.Calculate_dir(bool_calc)
    run.Rewrite_lammps_in(bool_calc)
    run.Execute(bool_calc)

功能说明: - 读取训练配置文件(Inputfile.txt) - 解析训练参数和计算参数 - 执行机器学习势训练 - 运行指定的物性计算 - 输出训练结果和计算数据

使用示例: .. code-block:: bash

phymlp-kit train –train_input Inputfile.txt

相关类: - RUN:训练和计算的核心控制器 - PUBLIC:公共参数和工具类

1.2 init_phymlp - 初始势函数生成

功能说明: - 从 PhyMLP 安装目录复制初始势函数文件 - 支持不同复杂度级别的势函数(06-16.PhyMLP) - 为训练提供起点

使用示例: .. code-block:: bash

phymlp-kit init_phymlp –phymlp_load /path/to/phymlp –complexity 10.PhyMLP

实现原理: 通过 subprocess.run() 执行文件复制操作。

2. 数据转换模块

2.1 outcar2extxyz - OUTCAR 转 Extxyz

def extract_structures_from_outcar(outcar_path, output_path, step=1):
    # 从OUTCAR文件中提取结构信息并转换为Extxyz格式

功能说明: - 解析 VASP OUTCAR 文件 - 提取原子结构、能量、力等信息 - 转换为标准的 Extxyz 格式 - 支持步长控制(提取间隔)

使用示例: .. code-block:: bash

phymlp-kit outcar2extxyz –outcar2extxyz_input ./OUTCAR –step 5

相关函数: - extract_structures_from_outcar():OUTCAR 解析核心函数

2.2 cfg2extxyz - CFG 转 Extxyz

def parse_cfg_file(cfg_path):
    # 解析CFG格式文件

def write_extxyz(configs, output_path, type_map=None, float_fmt=".6f"):
    # 写入Extxyz格式

功能说明: - 解析 CFG(原子配置文件)格式 - 支持多元素体系 - 原子类型到元素符号的映射 - 转换为 Extxyz 格式

使用示例: .. code-block:: bash

phymlp-kit cfg2extxyz –cfg2extxyz_input ./train.cfg –elements W

2.3 dump_to_poscar - LAMMPS Dump 转 POSCAR

功能说明: - 将 LAMMPS 的 dump 文件转换为 VASP 的 POSCAR 格式 - 支持原子类型映射 - 批量转换目录中的所有 dump 文件

使用示例: .. code-block:: bash

phymlp-kit dump_to_poscar –input_file input.yaml

3. 数据集处理模块

3.1 split_set - 数据集分割

def split_extxyz_structures(input_file, train_file, val_file, val_ratio=0.1):
    # 将数据集分割为训练集和验证集

功能说明: - 随机分割 Extxyz 数据集 - 可指定验证集比例 - 保持数据分布的随机性

使用示例: .. code-block:: bash

phymlp-kit split_set –input_file full.extxyz –val_ratio 0.2

3.2 generate_kpath - KPATH 生成

功能说明: - 调用 VASPKIT 生成高对称点路径 - 用于能带计算 - 基于当前目录的 POSCAR 文件

使用示例: .. code-block:: bash

phymlp-kit generate_kpath –vaspkit_load /path/to/vaspkit

4. 自动训练集生成模块

4.1 from_mp_structures - Materials Project 结构获取

def _cmd_from_mp_structures(args):
    # 动态导入并执行from_mp_structures模块

功能说明: - 连接 Materials Project 数据库 - 基于元素和关键词搜索结构 - 下载 CIF 和 POSCAR 格式的结构文件 - API 密钥验证

配置文件: - 需要 input.yaml 配置文件 - 包含 API 密钥、元素列表等参数

4.2 deform_structures - 形变结构生成

功能说明: - 对原始结构进行晶格缩放 - 生成拉伸/压缩的结构 - 控制最大原子数和扩胞倍数

参数配置: .. code-block:: yaml

deformation:

max_atoms: 150 scaling_factors: [0.8, 0.9, 1.0, 1.1, 1.2] max_supercell: 4

4.3 perturb_structures - 微扰结构生成

功能说明: - 对结构进行随机微扰 - 包括晶格微扰和原子位置微扰 - 生成多样化的训练结构

参数配置: .. code-block:: yaml

perturbation:

n_structures: 100 cell_pert_fraction: 0.05 atom_pert_distance: 0.05

5. VASP 计算模块

5.1 setup_vasp - VASP 计算设置

功能说明: - 根据配置准备 VASP 计算目录 - 生成 INCAR、KPOINTS、POTCAR 等输入文件 - 批量处理多个结构

配置文件: .. code-block:: yaml

vasp_setup:

input_paths: [“./structures”] output_dir: “./vasp_calculations”

vasp:
incar_parameters:

ALGO: “normal” ENCUT: 400 ISMEAR: 1

5.2 submit_vasp - VASP 作业提交

功能说明: - 提交 VASP 计算作业到计算集群 - 支持 SLURM 作业调度系统 - 批量提交和作业状态监控

参数配置: .. code-block:: yaml

submission:
slurm_headers:
  • “#SBATCH -N 1”

  • “#SBATCH -n 32”

vasp_execution:
  • “srun –mpi=pmi2 vasp_std”

5.3 test_potcar - POTCAR 测试

功能说明: - 测试 POTCAR 文件生成功能 - 验证元素设置和赝势文件 - 调试配置问题

6. 数据分析模块

6.1 process_deform - 形变结果处理

功能说明: - 处理形变计算的结果文件 - 提取能量-体积数据 - 准备 Birch-Murnaghan 拟合数据

6.2 birch_murnaghan - Birch-Murnaghan 拟合

def _cmd_birch_murnaghan(args):
    # 执行Birch-Murnaghan状态方程拟合

功能说明: - 拟合能量-体积曲线到 Birch-Murnaghan 状态方程 - 获取体弹模量 B₀、导数 B₁ 等参数 - 生成拟合曲线和参数文件

拟合方程: .. math:

E(V) = E_0 + \frac{9V_0B_0}{16} \left\{ \left[ \left( \frac{V_0}{V} \right)^{2/3} - 1 \right]^3 B_1 + \left[ \left( \frac{V_0}{V} \right)^{2/3} - 1 \right]^2 \left[ 6 - 4 \left( \frac{V_0}{V} \right)^{2/3} \right] \right\}

6.3 exp_pv_structures - 实验 P-V 数据拟合

功能说明: - 拟合实验压力-体积数据 - 生成相应的结构文件 - 扩展训练数据集

6.4 generate_extxyz - Extxyz 数据集生成

功能说明: - 整合所有计算和拟合数据 - 生成统一的训练数据集 - 支持多种数据源

7. 工作流模块

7.1 full_workflow - 完整工作流

def _cmd_full_workflow(args):
    # 执行完整的工作流程

功能说明: - 自动化执行从结构获取到数据集生成的完整流程 - 可配置跳过特定步骤 - 批量处理大量体系

工作流程: 1. 从 Materials Project 获取结构 2. 生成形变和微扰结构 3. 设置并运行 VASP 计算 4. 处理计算结果并进行拟合 5. 生成最终的 Extxyz 数据集

使用示例: .. code-block:: bash

# 完整流程 phymlp-kit full_workflow –input_file input.yaml

# 跳过VASP提交(仅准备文件) phymlp-kit full_workflow –input_file input.yaml –skip_vasp_submit

配置系统

1. 配置文件类型

  • ``input.yaml``:自动训练集生成的 YAML 格式配置文件

  • ``Inputfile.txt``:训练和计算的键值对格式配置文件

2. 配置解析机制

  • YAML 配置:使用 PyYAML 库解析

  • 键值对配置:自定义解析器处理

  • 路径处理:支持相对路径和绝对路径

3. 动态模块导入

为了避免启动时依赖问题,采用动态导入策略:

def _cmd_from_mp_structures(args):
    try:
        # 动态添加路径
        sys.path.insert(0, auto_gen_dir)
        # 动态导入模块
        from from_mp_structures import main as from_mp_main
        from_mp_main(args.input_file)
    except ImportError as e:
        print(f"Error: Could not import from_mp_structures module: {e}")

错误处理机制

1. 导入错误处理

  • 动态导入失败时提供清晰的错误信息

  • 指导用户检查模块路径和依赖

2. 文件系统错误

  • 检查文件存在性和权限

  • 自动创建必要的目录结构

  • 路径规范化处理

3. 计算错误处理

  • VASP 计算失败检测

  • 作业提交状态监控

  • 计算结果验证

扩展与定制

1. 添加新命令

要添加新的子命令,需要:

  1. main() 函数中添加对应的子命令解析器

  2. 实现相应的处理函数

  3. 在主分发逻辑中添加调用

2. 模块扩展

  • 新功能模块应放置在 phymlp/auto_generate_set/ 目录下

  • 遵循统一的接口规范

  • 支持通过 YAML 配置文件

性能优化

1. 批量处理

  • 支持批量结构处理

  • 并行计算配置

  • 内存使用优化

2. 缓存机制

  • 材料数据缓存

  • 计算结果缓存

  • 避免重复计算

使用建议

1. 新手建议

  • trainoutcar2extxyz 命令开始

  • 使用默认配置进行测试

  • 逐步添加复杂功能

2. 高级用户

  • 自定义工作流

  • 批量处理多个体系

  • 结合其他计算工具

3. 开发人员

  • 理解模块间的依赖关系

  • 遵循现有的接口规范

  • 添加充分的错误处理

相关链接

更新日志

  • v1.0:初始版本,包含基本训练和转换功能

  • v1.1:添加自动训练集生成模块

  • v1.2:添加 VASP 计算和工作流管理

  • v1.3:添加数据分析和拟合功能