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”

返回值: - dictNone: 配置字典,如果创建了默认配置则返回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

  • *.dat

  • npt.*

  • *.txt

注意事项

  1. 原子类型映射: 必须正确设置原子类型到元素符号的映射

  2. 盒子边界: 仅支持正交盒子(orthogonal box)

  3. 坐标格式: 仅支持笛卡尔坐标

  4. 时间步: 每个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转换器