Materials Project结构获取模块

概述

Materials Project结构获取模块用于从Materials Project数据库中检索和下载晶体结构数据。该模块支持批量下载体相结构和表面结构,并自动进行格式转换和元素排序,为后续的机器学习势训练提供高质量的初始结构数据。

主要功能

  • Materials Project API访问: 通过API密钥访问Materials Project数据库

  • 多元素组合检索: 自动生成所有可能的元素组合进行搜索

  • 体相结构下载: 下载材料的体相晶体结构

  • 表面结构生成: 自动生成对称性不同的表面结构

  • 格式转换: 将结构转换为CIF和POSCAR格式

  • 元素排序: 自动对POSCAR文件中的元素进行排序和合并

核心函数

write_poscar_grouped_by_element 函数

函数签名: write_poscar_grouped_by_element(structure, filepath)

功能说明: 将晶体结构按元素种类排序并写入POSCAR文件,合并相同的元素行。

参数: - structure (pymatgen.Structure): 输入的晶体结构对象 - filepath (str): 输出POSCAR文件路径

处理流程: 1. 对结构中的原子按元素种类排序 2. 统计每种元素的数量 3. 生成合并后的元素符号行和数量行 4. 写入格式化的POSCAR文件

copy_user_poscars 函数

函数签名: copy_user_poscars(source_dir, target_dir, elements)

功能说明: 复制用户自定义的POSCAR文件到目标目录,并检查文件是否包含指定元素。

参数: - source_dir (str): 用户自定义POSCAR源目录 - target_dir (str): 目标目录 - elements (list): 需要检查的元素列表

返回值: - int: 复制的文件数量

search_with_retry 函数

函数签名: search_with_retry(mpr, chemsys, max_retries=3, delay=5)

功能说明: 带重试机制的Materials Project搜索函数,处理网络连接问题。

参数: - mpr (MPRester): Materials Project客户端对象 - chemsys (str): 化学体系字符串(如”Fe-O”) - max_retries (int): 最大重试次数,默认3 - delay (int): 重试延迟时间(秒),默认5

返回值: - list: 搜索到的材料文档列表

get_available_surface_structures 函数

函数签名: get_available_surface_structures(mpr, material_id)

功能说明: 从Materials Project获取材料的表面结构数据。

参数: - mpr (MPRester): Materials Project客户端对象 - material_id (str): 材料ID(如”mp-12345”)

返回值: - list: 表面结构对象列表

generate_basic_surfaces 函数

函数签名: generate_basic_surfaces(material_id, mpr)

功能说明: 当Materials Project没有表面结构数据时,自动生成基本的表面结构。

参数: - material_id (str): 材料ID - mpr (MPRester): Materials Project客户端对象

返回值: - list: 生成的表面结构列表

生成方法: 使用pymatgen的SlabGenerator生成对称性不同的米勒指数表面

main 函数

函数签名: main(config_file="input.yaml")

功能说明: 模块主函数,执行完整的Materials Project结构获取流程。

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

执行流程: 1. 加载配置文件 2. 创建目录结构 3. 遍历所有元素组合 4. 下载体相和表面结构 5. 转换为CIF和POSCAR格式 6. 复制用户自定义POSCAR文件 7. 生成总结报告

配置参数

主要配置参数位于配置文件中:

# API配置
api:
  key: "your_materials_project_api_key"  # Materials Project API密钥

# 元素列表
elements: ["Fe", "Ni", "Cr"]  # 要搜索的元素

# 用户自定义POSCAR配置
user_poscar:
  enabled: true  # 是否启用用户自定义POSCAR
  source_dir: "./user_structures"  # 用户自定义结构源目录

目录结构

模块运行后创建以下目录结构:

materials_project/
├── base/
│   ├── dir_CIF/
│   │   └── [化学式]/
│   │       └── [材料]-[mp_id].cif
│   └── dir_POSCAR/
│       └── [化学式]/
│           └── [材料]-[mp_id].vasp
├── surface/
│   ├── dir_CIF/
│   └── dir_POSCAR/
├── user_poscar/
│   └── dir_POSCAR/
└── summary.txt

文件名格式

生成的POSCAR文件遵循以下命名规则:

  • 体相结构: {formula}-{material_id}.vasp 例如: Fe2O3-mp-12345.vasp

  • 表面结构: {formula}-{material_id}_surface_{index}.vasp 例如: Fe2O3-mp-12345_surface_1.vasp

使用方式

命令行调用

# 通过phymlp-kit调用
phymlp-kit from_mp_structures --input_file config.yaml

Python脚本调用

import from_mp_structures

# 直接运行
from_mp_structures.main("my_config.yaml")

# 或分步处理
from config import load_config
config = load_config("my_config.yaml")
API_KEY = config['api']['key']
elements = config['elements']

API密钥获取

  1. 访问 https://materialsproject.org

  2. 注册账户并登录

  3. 在个人设置中生成API密钥

  4. 在配置文件中配置API密钥

输出文件说明

  1. summary.txt: 总结文件 - 格式:化学式 | 基础结构数量 | 表面结构数量

  2. CIF文件: 晶体信息文件 - 用于结构可视化和分析

  3. POSCAR文件: VASP输入文件 - 已按元素排序和合并 - 可直接用于第一性原理计算

依赖关系

  • Python包: - mp-api: Materials Project API客户端 - pymatgen: 材料结构处理 - requests: HTTP请求库

  • 外部依赖: - 有效的Materials Project API密钥 - 互联网连接

常见问题

Q1: API密钥无效或过期

解决方案: 1. 检查API密钥是否正确配置 2. 在Materials Project网站上重新生成API密钥 3. 确认账户是否有效

Q2: 网络连接失败

解决方案: 1. 检查网络连接 2. 函数内置重试机制会自动重试 3. 调整配置文件中的网络参数

Q3: 元素组合太多导致超时

解决方案: 1. 减少元素列表中的元素数量 2. 分批处理不同的元素组合 3. 增加网络请求的超时时间

Q4: 表面结构生成失败

解决方案: 1. 检查pymatgen的surface模块是否可用 2. 简化表面生成参数 3. 使用已有的表面结构数据

注意事项

  1. API限制: Materials Project API有使用限制,请合理使用

  2. 文件组织: 结构按化学式组织,便于管理和查找

  3. 格式兼容: 生成的POSCAR文件已优化格式,兼容VASP

  4. 数据更新: Materials Project数据库定期更新,结构可能变化

相关模块

  • /phymlp/auto_generate_set/config - 配置管理模块

  • /phymlp/auto_generate_set/deform_structures - 形变结构生成

  • /phymlp/auto_generate_set/perturb_structures - 微扰结构生成