LAMMPS转POSCAR模块
概述
LAMMPS转POSCAR模块是一个用于将LAMMPS的dump文件转换为VASP POSCAR格式的工具。该模块支持批量处理、自动文件检测和灵活的原子类型映射,为分子动力学模拟结果的后续分析提供便利。
主要功能
文件格式转换: 将LAMMPS dump文件转换为VASP POSCAR格式
批量处理: 支持目录批量转换和单文件转换
原子类型映射: 自定义LAMMPS原子类型到元素符号的映射
智能检测: 自动检测LAMMPS dump文件格式
配置驱动: 支持YAML配置文件管理转换任务
核心类与方法
LammpsToPoscarConverter 类
主转换器类,提供完整的转换功能。
初始化: .. code-block:: python
converter = LammpsToPoscarConverter()
set_atom_types_mapping 方法
函数签名: set_atom_types_mapping(type_mapping)
功能说明: 设置LAMMPS原子类型到元素符号的映射关系。
参数:
- type_mapping (dict): 原子类型映射字典,格式为 {原子类型编号: ‘元素符号’}
示例: .. code-block:: python
- converter.set_atom_types_mapping({
1: ‘Fe’, 2: ‘Ni’, 3: ‘Cr’
})
read_dump_file 方法
函数签名: read_dump_file(file_path)
功能说明: 读取LAMMPS dump文件并解析其中的结构信息。
参数:
- file_path (str): LAMMPS dump文件路径
返回值:
- dict: 包含结构信息的字典,包含以下键:
timestep: 时间步数
num_atoms: 原子总数
box_bounds: 模拟盒子边界
atoms: 原子坐标、类型等信息列表
calculate_lattice_vectors 方法
函数签名: calculate_lattice_vectors(box_bounds)
功能说明: 从LAMMPS的盒子边界信息计算晶格矢量。
参数:
- box_bounds (list): 盒子边界列表,每个元素为 [min, max] 对
返回值:
- list: 晶格矢量列表,格式为 [[x,0,0], [0,y,0], [0,0,z]]
sort_atoms_by_type 方法
函数签名: sort_atoms_by_type(atoms)
功能说明: 按原子类型对原子进行分类和排序。
参数:
- atoms (list): 原子数据列表
返回值:
- defaultdict: 按原子类型分组的原子坐标字典
convert_to_poscar 方法
函数签名: convert_to_poscar(data, output_file)
功能说明: 将解析的数据转换为POSCAR格式并保存。
参数:
- data (dict): read_dump_file返回的结构数据
- output_file (str): 输出POSCAR文件路径
is_lammps_dump_file 方法
函数签名: is_lammps_dump_file(file_path)
功能说明: 检查文件是否为有效的LAMMPS dump文件。
参数:
- file_path (str): 待检查文件路径
返回值:
- bool: 如果是LAMMPS dump文件返回True,否则False
find_dump_files 方法
函数签名: find_dump_files(directory_path)
功能说明: 查找目录中的所有LAMMPS dump文件。
参数:
- directory_path (str): 要搜索的目录路径
返回值:
- list: 找到的dump文件路径列表
process_input 方法
函数签名: process_input(input_path, output_dir=None)
功能说明: 智能处理输入,自动识别是文件还是目录。
参数:
- input_path (str): 输入路径(文件或目录)
- output_dir (str, 可选): 输出目录,默认为输入目录
process_single_file 方法
函数签名: process_single_file(input_file, output_dir=None)
功能说明: 处理单个LAMMPS dump文件。
参数:
- input_file (str): 输入dump文件路径
- output_dir (str, 可选): 输出目录
process_directory 方法
函数签名: process_directory(directory_path, output_dir=None)
功能说明: 批量处理目录中的所有dump文件。
参数:
- directory_path (str): 输入目录路径
- output_dir (str, 可选): 输出目录
工具函数
load_config 函数
函数签名: load_config(config_file="input.yaml")
功能说明: 从YAML文件加载配置信息。如果配置文件不存在,会自动创建默认配置。
参数:
- config_file (str): 配置文件路径,默认 “input.yaml”
返回值:
- dict 或 None: 配置字典,如果创建了默认配置则返回None
convert_single_file 函数
函数签名: convert_single_file(input_file, output_file, atom_type_mapping=None)
功能说明: 兼容性接口,转换单个文件。
参数:
- input_file (str): 输入文件路径
- output_file (str): 输出文件路径
- atom_type_mapping (dict, 可选): 原子类型映射
process_directory 函数
函数签名: process_directory(directory_path, output_dir=None)
功能说明: 兼容性接口,批量处理目录。
参数:
- directory_path (str): 输入目录路径
- output_dir (str, 可选): 输出目录
parse_arguments 函数
函数签名: parse_arguments()
功能说明: 解析命令行参数。
返回值:
- argparse.Namespace: 解析后的参数对象
create_default_config 函数
函数签名: create_default_config(config_file="input.yaml")
功能说明: 创建默认配置文件。
参数:
- config_file (str): 配置文件路径
配置文件结构
配置文件采用YAML格式,包含以下主要部分:
# 原子类型映射
atom_type_mapping:
1: 'Fe' # 类型1对应铁元素
2: 'Ni' # 类型2对应镍元素
3: 'Cr' # 类型3对应铬元素
# 转换任务列表
conversion_tasks:
- input_path: './md_simulation' # 输入路径(文件或目录)
output_dir: './output_poscar' # 输出目录
description: '批量转换MD模拟结果' # 任务描述
输出文件命名
转换生成的POSCAR文件按以下规则命名:
POSCAR_{原始文件名}.vasp
例如,输入文件 npt.dump 会生成 POSCAR_npt.vasp。
使用方式
命令行使用
# 使用默认配置文件
phymlp-kit dump_to_poscar --input_file config.yaml
# 创建默认配置文件
phymlp-kit dump_to_poscar --create_config
# 指定自定义配置文件
phymlp-kit dump_to_poscar --input_file my_config.yaml
Python脚本调用
import dump_to_poscar
# 方式1:直接运行(使用命令行参数)
dump_to_poscar.main()
# 方式2:指定配置文件运行
dump_to_poscar.run_with_config("my_config.yaml")
# 方式3:使用转换器对象
converter = dump_to_poscar.LammpsToPoscarConverter()
converter.set_atom_types_mapping({1: 'Fe', 2: 'Ni'})
converter.process_directory("./md_results", "./poscar_output")
支持的文件格式
模块会自动检测以下扩展名的文件:
*.dump*.lammpstrj*.lmp*.datnpt.**.txt
注意事项
原子类型映射: 必须正确设置原子类型到元素符号的映射
盒子边界: 仅支持正交盒子(orthogonal box)
坐标格式: 仅支持笛卡尔坐标
时间步: 每个dump文件只转换一个时间步的结构
常见问题
Q1: 转换后的POSCAR元素符号不正确
解决方案: 检查配置文件中的 atom_type_mapping 是否正确设置了原子类型编号与元素符号的对应关系。
Q2: 没有找到任何dump文件
解决方案:
1. 确认文件扩展名是否被支持
2. 使用 is_lammps_dump_file 方法检查文件格式
3. 检查文件内容是否包含 “ITEM: TIMESTEP” 和 “ITEM: NUMBER OF ATOMS” 关键字
Q3: 盒子边界转换错误
解决方案: 目前仅支持正交盒子(orthogonal box)。对于非正交盒子,需要先进行坐标变换。
依赖关系
Python包: - PyYAML: YAML配置文件解析 - argparse: 命令行参数解析
文件格式: - LAMMPS dump文件格式 - VASP POSCAR文件格式
相关模块
/phymlp/auto_generate_set/config - 配置管理模块
/phymlp/converters/cfg2extxyz - CFG到EXTXYZ转换器
/phymlp/converters/outcar_converter - OUTCAR转换器