形变结构生成模块
概述
形变结构生成模块负责对基础晶体结构进行扩胞和晶格形变,生成用于训练机器学习势的体弹性数据集。该模块通过系统性地缩放晶格常数,生成一系列不同体积的晶体结构,为后续的第一性原理计算和状态方程拟合提供基础。
主要功能
智能扩胞: 自动计算最优扩胞倍数,控制原子数量
晶格形变: 按指定缩放因子缩放晶格体积
结构分类: 按化学式对生成的形变结构进行组织
批量处理: 支持批量处理多个 POSCAR 文件
核心函数
find_optimal_supercell 函数
函数签名: find_optimal_supercell(structure, max_atoms=150, max_supercell=4)
功能说明: 寻找最优的扩胞倍数,使原子数接近但不超过设定的最大值。优先考虑三个方向同时扩胞以保持晶体的各向同性。
参数:
- structure (pymatgen.Structure): 原始晶体结构对象
- max_atoms (int): 每个结构允许的最大原子数,默认 150
- max_supercell (int): 最大扩胞倍数,默认 4
返回值:
- list: 最优扩胞倍数列表,格式为 [scale_x, scale_y, scale_z]
create_supercell 函数
函数签名: create_supercell(structure, scaling_matrix)
功能说明: 根据指定的扩胞矩阵创建超胞结构。
参数:
- structure (pymatgen.Structure): 原始晶体结构
- scaling_matrix (list): 扩胞矩阵,格式为 [scale_x, scale_y, scale_z]
返回值:
- pymatgen.Structure: 扩胞后的超胞结构
scale_lattice 函数
函数签名: scale_lattice(structure, scale_factor)
功能说明: 按照指定的缩放因子缩放晶格常数,改变晶体体积。
参数:
- structure (pymatgen.Structure): 待缩放的结构
- scale_factor (float): 体积缩放因子(线性尺度)
返回值:
- pymatgen.Structure: 缩放后的晶体结构
process_structure_for_deformation 函数
函数签名: process_structure_for_deformation(poscar_path, output_base_dir, config)
功能说明: 处理单个 POSCAR 文件,执行完整的形变结构生成流程。
参数:
- poscar_path (str): 输入 POSCAR 文件的路径
- output_base_dir (str): 形变结构输出基目录
- config (dict): 配置参数字典
返回值:
- int: 为该结构生成的形变文件数量
处理流程: 1. 读取和验证 POSCAR 文件 2. 提取化学式并创建分类目录 3. 计算最优扩胞倍数 4. 创建超胞结构 5. 按缩放因子生成形变结构 6. 保存为 VASP 格式文件
main 函数
函数签名: main(config_file="input.yaml")
功能说明: 模块主函数,从配置文件加载参数,批量处理所有 POSCAR 文件。
参数:
- config_file (str): 配置文件路径,默认 “input.yaml”
返回值:
- None: 直接在控制台输出处理结果
执行流程: 1. 加载配置文件 2. 检查输入目录 3. 创建输出目录 4. 遍历所有 POSCAR 文件 5. 对每个文件调用 process_structure_for_deformation 6. 统计并输出处理结果
配置参数
路径配置
从配置文件中读取的关键路径参数:
paths.base_dir: 项目根目录paths.poscar_dir: 原始 POSCAR 文件目录paths.deform_dir: 形变结构输出目录
形变参数
控制形变生成的关键参数:
deformation.max_atoms: 每个结构最大原子数,默认 150deformation.max_supercell: 最大扩胞倍数,默认 4deformation.scaling_factors: 体积缩放因子列表,默认 [0.8, 0.9, 1.0, 1.1, 1.2]
文件命名规则
生成的形变结构按以下规则命名:
{原始文件名}_scaled_{缩放因子}.vasp
例如:Ni3Al_scaled_0.8.vasp, Ni3Al_scaled_1.2.vasp
目录组织结构
形变结构按化学式分层组织:
deform_dir/
├── Ni3Al/
│ ├── Ni3Al_mp-12345/
│ │ ├── Ni3Al_mp-12345_scaled_0.8.vasp
│ │ ├── Ni3Al_mp-12345_scaled_0.9.vasp
│ │ └── ...
│ └── Ni3Al_another/
│ └── ...
├── Fe/
└── ...
使用示例
命令行调用
phymlp-kit deform_structures --input_file config.yaml
Python 脚本调用
import deform_structures
# 直接运行
deform_structures.main("my_config.yaml")
# 或分步处理
from config import load_config
config = load_config("my_config.yaml")
# 处理单个结构
num_files = process_structure_for_deformation(
"path/to/POSCAR.vasp",
"output/deform",
config
)
依赖关系
Python 包: - pymatgen: 晶体结构操作 - numpy: 数值计算
文件依赖: - POSCAR 格式的晶体结构文件 - YAML 配置文件
模块依赖: - config: 配置管理模块 - utils: 工具函数模块
常见问题
Q1: 没有生成任何形变结构
可能原因: 1. 输入目录中没有 POSCAR 文件 2. POSCAR 文件格式错误 3. 配置中的缩放因子列表为空
解决方案:
1. 检查 paths.poscar_dir 路径和文件
2. 验证 POSCAR 文件格式
3. 确认 deformation.scaling_factors 配置
Q2: 生成的原子数超过限制
可能原因: 1. 原始结构原子数过多 2. 扩胞倍数设置过大
解决方案:
1. 调整 deformation.max_atoms 参数
2. 减小 deformation.max_supercell 值
3. 手动筛选原子数较少的结构
Q3: 化学式识别错误
可能原因: 1. 文件名不符合命名规范 2. 特殊字符处理问题
解决方案:
1. 确保文件名包含可识别的化学式
2. 使用 get_formula_from_filename 函数进行调试
相关模块
/phymlp/auto_generate_set/from_mp_structures - 从 Materials Project 获取原始结构
/phymlp/auto_generate_set/config - 配置管理模块
/phymlp/auto_generate_set/birch_murnaghan_fitting - 状态方程拟合模块