工具模块 (utils)
本模块提供各种辅助工具和实用函数。
通用工具
工具模块
包含 TensorConverter 类用于张量与 Voigt 表示之间的转换,DataCollector 类用于收集模拟过程中的数据, 及一些常用的单位转换常量
- class thermoelasticsim.utils.utils.TensorConverter[源代码]
基类:
object
张量转换工具类,支持应力和应变张量的 Voigt 与 3x3 矩阵表示之间的相互转换。
Methods
from_voigt
(voigt, tensor_type)将 Voigt 表示的 6 元素向量转换为 3x3 的对称张量。
to_voigt
(tensor, tensor_type[, tol])将一个对称的 3x3 张量转换为 Voigt 表示的 6 元素向量。
- class thermoelasticsim.utils.utils.DataCollector(capacity=None, save_interval=1000, use_threading=False, output_file='trajectory.h5')[源代码]
基类:
object
数据收集器,用于记录和分析模拟轨迹
提供了系统状态的收集、统计和保存功能,支持异步数据处理和自动保存。
- 参数:
Methods
collect
(cell[, potential])收集完整的系统状态数据
将轨迹数据保存到 HDF5 文件
- class thermoelasticsim.utils.utils.NeighborList(cutoff, skin=0.3)[源代码]
基类:
object
邻居列表类,用于生成和维护原子的邻居列表
提供高效的邻居搜索和更新功能,支持周期性边界条件。
Methods
build
(cell)构建邻居列表
分析和打印邻居分布情况
返回邻居列表的统计信息
get_neighbors
(atom_index)获取指定原子的邻居列表。
判断是否需要更新邻居列表。
update
()更新邻居列表,如果需要的话。
优化器
分子动力学模拟优化器模块
提供多种优化算法用于原子结构优化,包括: - GradientDescentOptimizer: 带动量项的梯度下降 - BFGSOptimizer: 基于scipy.optimize.minimize的BFGS - LBFGSOptimizer: 改进的L-BFGS(有限内存BFGS)
- class thermoelasticsim.utils.optimizers.Optimizer[源代码]
基类:
object
优化器抽象基类,定义优化方法的接口
子类需要实现optimize()方法来执行具体的优化算法。
Methods
optimize
(cell, potential)执行优化算法
- class thermoelasticsim.utils.optimizers.GradientDescentOptimizer(maxiter=10000, tol=0.001, step_size=0.001, energy_tol=0.0001, beta=0.9)[源代码]
基类:
Optimizer
带动量项的梯度下降优化器
- 参数:
Methods
optimize
(cell, potential)执行带动量项的梯度下降优化
- class thermoelasticsim.utils.optimizers.BFGSOptimizer(tol=1e-06, maxiter=10000)[源代码]
基类:
Optimizer
BFGS准牛顿优化器
备注
使用scipy.optimize.minimize的BFGS实现 适用于中等规模系统优化
Methods
optimize
(cell, potential)执行 BFGS 优化
- class thermoelasticsim.utils.optimizers.CGOptimizer(tol=1e-06, maxiter=10000)[源代码]
基类:
Optimizer
共轭梯度优化器(分数坐标),对剪切后的浅谷更稳健。
- 参数:
Methods
optimize
(cell, potential)执行 CG 优化(变量为分数坐标)。
- class thermoelasticsim.utils.optimizers.LBFGSOptimizer(ftol=1e-08, gtol=1e-06, maxiter=1000, supercell_dims=None, **kwargs)[源代码]
基类:
Optimizer
L-BFGS优化器(有限内存BFGS)
该优化器能够处理两种模式: 1. 仅优化原子位置 (默认)。 2. 同时优化原子位置和晶胞形状 (完全弛豫)。
- 参数:
ftol (float, optional) -- 函数收敛阈值,默认1e-8
gtol (float, optional) -- 梯度收敛阈值,默认1e-6
maxiter (int, optional) -- 最大迭代步数,默认1000
**kwargs (dict, optional) -- 其他要传递给
scipy.optimize.minimize
的选项, 例如{'disp': True}
Methods
optimize
(cell, potential[, relax_cell])执行 L-BFGS 优化。
轨迹记录
轨迹存储和管理系统
基于H5MD (HDF5 for Molecular Dynamics) 标准的轨迹存储系统。 提供高效的数据压缩、并行I/O支持和丰富的元数据管理功能。
主要特性: - HDF5格式的高效存储 - 支持大规模轨迹数据 - 灵活的压缩选项 - 增量式写入支持 - 丰富的元数据记录
Author: Gilbert Young Created: 2025-08-15
- class thermoelasticsim.utils.trajectory.TrajectoryWriter(filename, mode='w', compression='gzip', compression_opts=4, chunk_size=100)[源代码]
基类:
object
H5MD格式轨迹文件写入器
遵循H5MD v1.1规范,提供高效的分子动力学轨迹存储。
- 参数:
示例
>>> writer = TrajectoryWriter('trajectory.h5', compression='gzip') >>> writer.initialize(n_atoms=100, n_frames_estimate=1000) >>> writer.write_frame(positions, box, time=0.0, step=0) >>> writer.close()
Methods
close
()关闭文件
initialize
(n_atoms[, n_frames_estimate, ...])初始化H5MD文件结构
open
()打开HDF5文件
write_frame
(positions[, box, time, step, ...])写入单帧数据
write_metadata
(metadata)写入额外的元数据
- write_frame(positions, box=None, time=None, step=None, velocities=None, forces=None, stress=None, energy=None, temperature=None, **kwargs)[源代码]
写入单帧数据
- 参数:
positions (np.ndarray) -- 原子位置 (n_atoms, 3)
box (np.ndarray, optional) -- 晶格矢量 (3, 3)
time (float, optional) -- 时间(ps)
step (int, optional) -- MD步数
velocities (np.ndarray, optional) -- 速度 (n_atoms, 3)
forces (np.ndarray, optional) -- 力 (n_atoms, 3)
stress (np.ndarray, optional) -- 应力张量 (3, 3)
energy (float, optional) -- 总能量
temperature (float, optional) -- 温度
**kwargs -- 其他观测量
- class thermoelasticsim.utils.trajectory.TrajectoryReader(filename, mode='r', cache_size=100)[源代码]
基类:
object
H5MD格式轨迹文件读取器
提供高效的轨迹数据读取和分析功能。
示例
>>> reader = TrajectoryReader('trajectory.h5') >>> reader.open() >>> for frame_idx in range(reader.n_frames): ... frame = reader.read_frame(frame_idx) ... process_frame(frame) >>> reader.close()
Methods
close
()关闭文件
获取元数据
获取轨迹概要信息
open
()打开HDF5文件
read_frame
(frame_idx)读取指定帧
read_frames
([start, stop, stride])批量读取多帧
- thermoelasticsim.utils.trajectory.save_trajectory(filename, positions_list, boxes_list=None, times=None, **kwargs)[源代码]
便捷函数:保存轨迹数据
- thermoelasticsim.utils.trajectory.load_trajectory(filename, start=0, stop=None, stride=1)[源代码]
便捷函数:加载轨迹数据
带轨迹记录的优化器扩展
为现有优化器添加轨迹记录功能,在优化过程中自动捕获原子位置、 晶格矢量、能量、应力等信息并保存到HDF5文件。
Author: Gilbert Young Created: 2025-08-15
- class thermoelasticsim.utils.trajectory_recorder.TrajectoryRecorder(output_file, record_interval=1, record_forces=True, record_stress=True, record_energy=True, compression='gzip', compression_opts=4)[源代码]
基类:
object
轨迹记录器
可以作为回调函数集成到优化器中,自动记录优化轨迹。
- 参数:
示例
>>> recorder = TrajectoryRecorder('optimization.h5') >>> optimizer = LBFGSOptimizerWithTrajectory(recorder=recorder) >>> optimizer.optimize(cell, potential)
Methods
finalize
()完成记录并关闭文件
initialize
(cell[, metadata])初始化记录器
record
(cell, potential[, step])记录当前状态
- __init__(output_file, record_interval=1, record_forces=True, record_stress=True, record_energy=True, compression='gzip', compression_opts=4)[源代码]
- class thermoelasticsim.utils.trajectory_recorder.LBFGSOptimizerWithTrajectory(recorder=None, trajectory_file=None, record_interval=1, **kwargs)[源代码]
-
带轨迹记录功能的L-BFGS优化器
在原有L-BFGS优化器基础上添加轨迹记录功能。
- 参数:
recorder (TrajectoryRecorder, optional) -- 轨迹记录器
trajectory_file (str, optional) -- 轨迹文件名(如果不提供recorder)
record_interval (int) -- 记录间隔
**kwargs -- 其他L-BFGS参数
Methods
optimize
(cell, potential[, relax_cell])执行优化并记录轨迹
- __init__(recorder=None, trajectory_file=None, record_interval=1, **kwargs)[源代码]
- 参数:
recorder (TrajectoryRecorder | None)
trajectory_file (str | None)
record_interval (int)
- thermoelasticsim.utils.trajectory_recorder.create_optimizer_with_trajectory(optimizer_type='L-BFGS', trajectory_file=None, record_interval=1, **optimizer_params)[源代码]
创建带轨迹记录的优化器
- class thermoelasticsim.utils.trajectory_recorder.DeformationTrajectoryRecorder(output_file)[源代码]
基类:
object
专门用于形变计算的轨迹记录器
记录形变过程中的完整信息,包括应变、应力、能量等。
Methods
finalize
()完成记录
initialize
(base_cell[, metadata])初始化
record_deformation
(cell, potential, strain, ...)记录形变状态
- 参数:
output_file (str)
可视化
可视化模块
包含 Visualizer 类,用于可视化晶胞结构和应力-应变关系
- class thermoelasticsim.utils.visualization.Visualizer[源代码]
基类:
object
晶体结构和数据可视化工具类
Methods
create_optimization_animation
(trajectory, ...)创建优化过程的动画
create_simulation_animation
(trajectory_data, ...)创建分子动力学模拟过程的动画
create_stress_strain_animation
(strain_data, ...)创建应力-应变关系的动画
plot_cell_structure
(cell_structure[, show])绘制晶体结构的 3D 图形
plot_deformation_stress_strain
(strains, ...)为特定变形方式绘制所有应力分量的响应图
plot_stress_strain_multiple
(strain_data, ...)绘制多个应力-应变关系图,每个应力分量对应一个子图
set_axes_equal
(ax)使3D坐标轴比例相同
- plot_stress_strain_multiple(strain_data, stress_data, show=True)[源代码]
绘制多个应力-应变关系图,每个应力分量对应一个子图
- 参数:
strain_data (numpy.ndarray) -- 应变数据,形状为 (N, 6)
stress_data (numpy.ndarray) -- 应力数据,形状为 (N, 6)
show (bool, optional) -- 是否立即显示图形,默认为 True
- 返回:
fig (matplotlib.figure.Figure) -- 绘制的图形对象
axes (numpy.ndarray) -- 子图对象数组
- plot_deformation_stress_strain(strains, stresses, mode_index, save_path, show=False)[源代码]
为特定变形方式绘制所有应力分量的响应图
- 参数:
strains (numpy.ndarray) -- 该变形方式下的应变数据
stresses (numpy.ndarray) -- 该变形方式下的应力数据
mode_index (int) -- 变形模式索引 (0-5)
save_path (str) -- 保存路径
show (bool, optional) -- 是否显示图像,默认为 False
- create_optimization_animation(trajectory, filename, title='Optimization', pbc=True, show=True)[源代码]
创建优化过程的动画
- create_stress_strain_animation(strain_data, stress_data, filename, show=True)[源代码]
创建应力-应变关系的动画
- 参数:
strain_data (numpy.ndarray) -- 应变数据,形状为 (N, 6)
stress_data (numpy.ndarray) -- 应力数据,形状为 (N, 6)
filename (str) -- 保存动画的文件名(支持 .gif, .mp4 等格式)
show (bool, optional) -- 是否立即显示动画,默认为 True
绘图配置
matplotlib字体配置模块
一劳永逸解决中文字体显示问题
- Usage:
import matplotlib.pyplot as plt from thermoelasticsim.utils.plot_config import setup_matplotlib setup_matplotlib() # 之后就可以正常使用中文
# 或者直接导入已配置的pyplot from thermoelasticsim.utils.plot_config import plt
Created: 2025-08-17