分子动力学引擎 (md)
本模块实现了基于算符分离的分子动力学引擎。
接口定义
MD算符分离架构接口定义
本模块定义了基于刘维尔算符Trotter分解的MD架构接口。 设计思想:将复杂的MD积分分解为可组合的基础算符。
主要类: - MDComponent: MD组件基类 - Propagator: 算符传播子基类,对应exp(iL*dt) - IntegrationScheme: 积分方案基类,通过Trotter分解组合Propagator
参考文献: - Martyna et al., Mol. Phys. 87, 1117 (1996) - Tuckerman et al., J. Chem. Phys. 97, 1990 (1992)
Created: 2025-08-18
- class thermoelasticsim.md.interfaces.Propagator[源代码]
基类:
MDComponent
算符传播子基类
对应刘维尔算符exp(iL*dt)的数值实现。每个Propagator负责系统状态 在特定物理过程下的时间演化,如位置更新、速度更新、热浴演化等。
设计原则: 1. 单一职责:每个Propagator只负责一种物理过程 2. 无状态:不依赖外部状态,所有信息通过参数传递 3. 可组合性:可通过Trotter分解自由组合 4. 时间可逆:支持对称分解保证数值稳定性
典型实现: - PositionPropagator: exp(iL_r * dt) → r += v*dt - VelocityPropagator: exp(iL_v * dt) → v += F/m*dt - NoseHooverPropagator: 热浴变量演化 - BarostatPropagator: 压浴变量演化
Methods
propagate
(cell, dt, **kwargs)执行dt时间的演化
- class thermoelasticsim.md.interfaces.IntegrationScheme[源代码]
基类:
MDComponent
积分方案基类
通过Trotter分解组合多个Propagator实现完整的MD积分步骤。 负责将物理上耦合的演化过程分解为可计算的序列。
设计原则: 1. 对称性:优先使用对称分解保证时间可逆性 2. 物理正确:遵循相应系综的统计力学原理 3. 数值稳定:控制Trotter分解误差在可接受范围 4. 可扩展性:易于添加新的物理过程
常见分解模式: - NVE: exp(iL*dt) ≈ exp(iL_v*dt/2)·exp(iL_r*dt)·exp(iL_v*dt/2) - NVT: 恒温器包裹NVE核心的对称分解 - NPT: 多层嵌套的复杂对称分解
Methods
step
(cell, potential, dt)执行一个完整积分步
- class thermoelasticsim.md.interfaces.ThermostatInterface[源代码]
基类:
MDComponent
恒温器接口
定义恒温器的标准接口,用于向后兼容现有实现。 新的Nose-Hoover等实现应当使用Propagator架构。
Methods
apply
(cell, dt, potential)应用恒温器控制
- class thermoelasticsim.md.interfaces.BarostatInterface[源代码]
基类:
MDComponent
恒压器接口
定义恒压器的标准接口,用于向后兼容现有实现。 新的Parrinello-Rahman等实现应当使用Propagator架构。
Methods
apply
(cell, dt, potential)应用恒压器控制
传播子
基础算符传播子实现
本模块实现了分子动力学中的基础传播子,每个类对应一个基本的物理过程。 这些传播子可以通过Trotter分解组合成完整的积分方案。
已实现的传播子: - PositionPropagator: 位置演化 r += v*dt - VelocityPropagator: 速度演化 v += F/m*dt - ForcePropagator: 力计算 F = -∇U(r)
设计要点: 1. 每个传播子只负责一种物理过程 2. 严格遵循Velocity-Verlet算法的分解逻辑 3. 避免重复计算力(通过ForcePropagator分离) 4. 保持数值精度和时间可逆性
Created: 2025-08-18
- class thermoelasticsim.md.propagators.PositionPropagator[源代码]
基类:
Propagator
位置传播子: exp(iL_r * dt)
实现位置的时间演化:r(t+dt) = r(t) + v(t)*dt 这对应于哈密顿动力学中动量项对位置的作用。
物理意义: - 在恒定速度场中的自由传播 - 保持相空间体积(辛性质) - 与势能无关的纯几何演化
注意事项: - 必须处理周期性边界条件 - 不改变速度和力 - 时间可逆:propagate(dt)后propagate(-dt)应恢复原状
Methods
propagate
(cell, dt, **kwargs)执行位置更新
- class thermoelasticsim.md.propagators.VelocityPropagator[源代码]
基类:
Propagator
速度传播子: exp(iL_v * dt)
实现速度的时间演化:v(t+dt) = v(t) + F(t)/m*dt 这对应于哈密顿动力学中力项对动量的作用。
物理意义: - 在恒定力场中的匀加速运动 - 牛顿第二定律的直接数值实现 - 动能的改变源于势能梯度
关键设计: - 假设原子的力已经正确计算 - 不负责力的计算,只使用现有的atom.force - 这避免了在Velocity-Verlet中重复计算力的问题
Methods
propagate
(cell, dt, **kwargs)执行速度更新
- class thermoelasticsim.md.propagators.ForcePropagator(potential)[源代码]
基类:
Propagator
力计算传播子: F = -∇U(r)
负责计算系统中所有原子受到的力。严格来说这不是时间演化算符, 但将其统一到Propagator接口中有助于: 1. 明确力计算的时机 2. 避免在积分过程中重复计算 3. 保持代码的模块化和可测试性
设计要点: - 封装势函数的调用 - 确保力计算只在必要时进行 - 支持不同类型的势函数 - 处理力计算可能的异常
使用场景: - Velocity-Verlet中位置更新后的力计算 - 系统初始化时的初始力计算 - 势函数切换后的力重新计算
Methods
propagate
(cell, dt, **kwargs)计算并更新所有原子的力
- class thermoelasticsim.md.propagators.BerendsenThermostatPropagator(target_temperature, tau=None, mode='equilibration')[源代码]
基类:
Propagator
Berendsen恒温器传播子
实现Berendsen弱耦合恒温器,通过速度重新缩放维持目标温度。 这是一个后处理方法,不是真正的算符分离,但适合在现有框架中使用。
算法原理: - 计算当前系统温度 T_current - 根据目标温度计算缩放因子: λ = sqrt(1 + dt/τ * (T_target/T_current - 1)) - 对所有原子速度进行缩放: v_new = λ * v_old
优点: - 实现简单,计算开销小 - 快速收敛到目标温度 - 对系统动力学影响较小
缺点: - 不产生正确的正则系综分布 - 抑制温度涨落 - 不严格保守
适用场景: - 快速温度平衡 - 温度控制要求不严格的模拟 - 作为更复杂恒温器的预平衡步骤
Methods
获取Berendsen恒温器详细统计信息
propagate
(cell, dt, **kwargs)执行Berendsen温度调节
重置统计信息
- __init__(target_temperature, tau=None, mode='equilibration')[源代码]
初始化Berendsen恒温器
- 参数:
备注
根据MD恒温器研究报告建议: - 平衡阶段: τ_T = 0.1-1.0 ps,快速达到目标温度 - 生产阶段: τ_T = 2.0-10.0 ps,最小化动力学扰动 - 经验法则: τ_T ≈ 50-100 × dt,确保数值稳定性
- propagate(cell, dt, **kwargs)[源代码]
执行Berendsen温度调节
备注
该方法实现Berendsen恒温器的标准算法: 1. 计算当前系统瞬时温度 T_inst 2. 根据温度弛豫方程计算缩放因子: λ = sqrt(1 + dt/τ_T * (T_0/T_inst - 1)) 3. 对所有原子速度进行缩放: v_new = λ * v_old 4. 应用数值稳定性限制和统计监控
根据MD恒温器研究报告的理论指导,此算法虽然不产生严格的 正则系综,但适合于平衡阶段和快速温度收敛。
- get_statistics()[源代码]
获取Berendsen恒温器详细统计信息
- 返回:
包含统计信息的字典: - 'total_steps': 总调节步数 - 'average_scaling': 平均缩放因子 - 'max_scaling': 最大缩放因子 - 'min_scaling': 最小缩放因子 - 'target_temperature': 目标温度 (K) - 'tau': 时间常数 τ_T (fs) - 'mode': 运行模式 (equilibration/production) - 'limited_steps': 被ASE限制的步数 - 'upper_limited': 上限限制次数 - 'lower_limited': 下限限制次数 - 'limitation_rate': 限制比例 (%) - 'effective_coupling': 有效耦合强度评估
- 返回类型:
- class thermoelasticsim.md.propagators.AndersenThermostatPropagator(target_temperature, collision_frequency=None)[源代码]
基类:
Propagator
Andersen随机碰撞恒温器传播子
实现Andersen恒温器,通过随机碰撞维持目标温度。 每个原子在每个时间步都有一定概率与热浴发生碰撞, 碰撞时原子速度从Maxwell分布重新采样。
算法原理: - 每个时间步,每个原子有概率 P = ν*dt 发生碰撞 - 如果发生碰撞,从Maxwell分布重新采样该原子速度 - 碰撞是独立的,不影响系统其他原子
优点: - 产生正确的正则系综分布 - 理论基础严格,符合统计力学 - 实现简单,数值稳定 - 不抑制温度涨落
缺点: - 破坏动力学连续性 - 不保持相关函数 - 随机性强,不适合某些分析
适用场景: - 需要正确正则系综的模拟 - 平衡态性质计算 - 温度涨落重要的系统
Methods
获取Andersen恒温器详细统计信息
propagate
(cell, dt, **kwargs)执行Andersen随机碰撞(根据研究报告的标准算法)
重置统计信息
- __init__(target_temperature, collision_frequency=None)[源代码]
初始化Andersen恒温器
- 参数:
备注
根据MD恒温器研究报告(Lines 210-221): - 碰撞概率: P_collision = ν × Δt (系统级频率) - 典型ν范围: 10^-4 到 10^-1 fs⁻¹ - Maxwell-Boltzmann采样: σ = sqrt(k_B*T/m) - 严格产生正则(NVT)系综分布
- 抛出:
ValueError -- 如果target_temperature或collision_frequency为非正数
- 参数:
- propagate(cell, dt, **kwargs)[源代码]
执行Andersen随机碰撞(根据研究报告的标准算法)
备注
根据MD恒温器研究报告(Lines 159-187)的标准Andersen算法:
碰撞概率计算: P_collision = ν × Δt (系统级)
遵历所有原子,以概率P判断是否碰撞
如果碰撞,从麦克斯韦-玻尔兹曼分布重新采样速度
Maxwell分布: σ = sqrt(k_B*T/m),每个分量独立采样
关键改进: - 修复碰撞概率计算错误(系统级而非原子级) - 根据系统尺寸适应频率选择 - 使用正确的Maxwell-Boltzmann采样 - 监控实际碰撞率与期望值的匹配
- get_statistics()[源代码]
获取Andersen恒温器详细统计信息
- 返回:
包含统计信息的字典: - 'total_steps': 总步数 - 'total_collisions': 总碰撞次数 - 'collision_rate': 平均碰撞率 (次/步) - 'expected_rate': 理论碰撞率 (fs⁻¹) - 'target_temperature': 目标温度 (K) - 'effective_collision_frequency': 有效碰撞频率 (fs⁻¹) - 'base_collision_frequency': 用户设置或系统推荐的基础频率 (fs⁻¹) - 'recent_collisions': 最近100步的碰撞数 - 'system_size_initialized': 是否已根据系统尺寸初始化
- 返回类型:
- class thermoelasticsim.md.propagators.NoseHooverChainPropagator(target_temperature, tdamp=100.0, tchain=3, tloop=1)[源代码]
基类:
Propagator
Nose-Hoover链恒温器传播子 (高精度实现)
基于ASE和Martyna等人工作的严格实现,采用M个热浴变量的链式结构 和四阶Suzuki-Yoshida分解,确保数值稳定性和正确的正则系综采样。
关键特性: - 链式结构: M个热浴变量,默认M=3,保证遍历性 - 四阶精度: Suzuki-Yoshida分解,相比二阶显著提升长期稳定性 - 对称回文: 时间可逆的算符分离序列 - 正确Q参数: τ=50-100*dt,避免过强耦合导致的数值不稳定
物理原理: 基于扩展拉格朗日量方法,引入链式热浴变量{ζ_j, p_ζ,j}: - 第一个热浴直接与物理系统耦合 - 后续热浴控制前一个热浴的涨落 - 保证正则系综的严格采样
运动方程: dv_i/dt = F_i/m_i - (p_ζ,1/Q_1) * v_i dp_ζ,1/dt = Σ(m_i*v_i²) - N_f*k_B*T₀ - (p_ζ,2/Q_2)*p_ζ,1 dp_ζ,j/dt = (p_ζ,j-1²/Q_j-1) - k_B*T₀ - (p_ζ,j+1/Q_j+1)*p_ζ,j (j=2,...,M-1) dp_ζ,M/dt = (p_ζ,M-1²/Q_M-1) - k_B*T₀
参考文献: - Martyna, Klein, Tuckerman, J. Chem. Phys. 97, 2635 (1992) - ASE implementation: ase.md.nose_hoover_chain - Yoshida, Phys. Lett. A 150, 262 (1990) - 四阶分解方案
Methods
get_conserved_energy
(cell)计算扩展哈密顿量(守恒量)
获取详细统计信息
propagate
(cell, dt, **kwargs)执行Nose-Hoover链传播(四阶Suzuki-Yoshida)
重置统计信息
完全重置热浴状态
- __init__(target_temperature, tdamp=100.0, tchain=3, tloop=1)[源代码]
初始化Nose-Hoover链恒温器
- 参数:
- 抛出:
ValueError -- 如果参数设置不合理
- propagate(cell, dt, **kwargs)[源代码]
执行Nose-Hoover链传播(四阶Suzuki-Yoshida)
实现完整的NHC算符:exp(iL_NHC * dt) 采用三步四阶Suzuki-Yoshida分解保证高精度和长期稳定性。
算法流程:
对每个SY系数w_k:
对tloop次循环:
执行NHC_integration_loop(w_k * dt / tloop)
- 参数:
- 返回类型:
None
备注
这是NHC的核心方法,必须在NVE积分的两侧各调用一次: exp(iL_NHC * dt/2) * exp(iL_NVE * dt) * exp(iL_NHC * dt/2)
- thermoelasticsim.md.propagators.create_nve_propagators(potential)[源代码]
创建NVE积分所需的基础传播子
- 参数:
potential (Potential) -- 势函数对象
- 返回:
包含所有NVE传播子的字典: - 'position': PositionPropagator实例 - 'velocity': VelocityPropagator实例 - 'force': ForcePropagator实例
- 返回类型:
示例
>>> propagators = create_nve_propagators(eam_potential) >>> pos_prop = propagators['position'] >>> vel_prop = propagators['velocity'] >>> force_prop = propagators['force']
- class thermoelasticsim.md.propagators.LangevinThermostatPropagator(target_temperature, friction=1.0)[源代码]
基类:
Propagator
Langevin动力学恒温器传播子
基于Brunger-Brooks-Karplus (BBK)积分算法实现Langevin动力学恒温器。 该恒温器通过在牛顿运动方程中加入摩擦阻力项和随机力项来模拟系统与热浴的相互作用。
备注
理论基础
Langevin运动方程:
\[m_i \frac{d^2\mathbf{r}_i}{dt^2} = \mathbf{F}_i(\mathbf{r}) - \gamma m_i \frac{d\mathbf{r}_i}{dt} + \mathbf{R}_i(t)\]其中:
\(\mathbf{F}_i(\mathbf{r})\): 保守力
\(\gamma\): 摩擦系数(friction coefficient)
\(\mathbf{R}_i(t)\): 随机力,满足涨落-耗散定理
涨落-耗散定理保证热力学一致性:
\begin{align} \langle \mathbf{R}_i(t) \rangle &= 0 \\ \langle R_{i,\alpha}(t) R_{j,\beta}(t') \rangle &= 2m_i\gamma k_B T_0 \delta_{ij}\delta_{\alpha\beta}\delta(t-t') \end{align}BBK积分算法步骤
计算常数: \(c_1 = \exp(-\gamma dt), \quad \sigma = \sqrt{k_B T(1-c_1^2)/m}\)
半步速度更新: \(\mathbf{v}(t+dt/2) = \mathbf{v}(t) + \frac{1}{2}\mathbf{a}(t)dt\)
位置更新: \(\mathbf{r}(t+dt) = \mathbf{r}(t) + \mathbf{v}(t+dt/2)dt\)
计算新力: \(\mathbf{a}(t+dt) = \mathbf{F}(\mathbf{r}(t+dt))/m\)
最终速度更新: \(\mathbf{v}(t+dt) = c_1 \mathbf{v}_{\text{det}} + \sigma \boldsymbol{\xi}\)
参数选择建议
平衡阶段: \(\gamma \sim 1-10 \text{ ps}^{-1}\) (快速温度控制)
生产阶段: \(\gamma \sim 0.1-5 \text{ ps}^{-1}\) (保持动力学真实性)
过阻尼极限: \(\gamma \gg\) 系统振动频率(布朗动力学)
算法特性
严格正则系综: 产生正确的正则分布
物理一致性: 基于真实的系统-热浴耦合
参数灵活: 摩擦系数可调节耦合强度
涨落保持: 保留自然的热涨落
Methods
获取当前有效参数
获取Langevin恒温器详细统计信息
propagate
(cell, dt, **kwargs)执行Langevin恒温器传播(BBK算法的速度更新部分)
重置所有统计信息
set_friction
(new_friction)动态调整摩擦系数
- __init__(target_temperature, friction=1.0)[源代码]
初始化Langevin恒温器
- 参数:
- 抛出:
ValueError -- 如果target_temperature或friction为非正数
备注
摩擦系数的物理意义: - γ描述了系统与热浴的耦合强度 - 可理解为背景溶剂的粘性效应 - 与LAMMPS参数关系:damp = 1/γ - 与阻尼时间关系:τ_damp = 1/γ
- propagate(cell, dt, **kwargs)[源代码]
执行Langevin恒温器传播(BBK算法的速度更新部分)
注意:这个传播子只处理Langevin恒温器的速度更新部分, 即在标准速度-Verlet积分的基础上添加摩擦和随机力效应。
在完整的Langevin积分方案中,这个传播子应该在标准的 位置和力更新之后调用,用于最终的速度修正。
BBK算法的这一步骤: 1. 计算BBK常数:c1 = exp(-γ*dt), σ = sqrt(k_B*T*(1-c1²)/m) 2. 为每个原子生成高斯随机向量 3. 应用速度修正:v_new = c1*v_old + σ*random_vector
- 参数:
- 返回类型:
None
备注
该方法实现BBK算法中的随机-摩擦速度更新:
对每个原子,计算: - c1 = exp(-γ*dt):速度衰减因子 - σ = sqrt(k_B*T*(1-c1²)/m):随机力强度
生成高斯随机力并更新速度: v(t+dt) = c1*v_det(t+dt) + σ*R
这确保了涨落-耗散定理的满足,产生正确的正则系综。
- 抛出:
ValueError -- 如果dt <= 0
RuntimeError -- 如果温度计算或随机数生成失败
- 参数:
- 返回类型:
None
- get_statistics()[源代码]
获取Langevin恒温器详细统计信息
- 返回:
包含详细统计的字典: - 'total_steps': 总传播步数 - 'target_temperature': 目标温度 (K) - 'friction': 摩擦系数 (ps⁻¹) - 'damping_time': 阻尼时间 (ps) - 'coupling_strength': 耦合强度描述 - 'average_temperature': 平均温度 (K) - 'temperature_std': 温度标准差 (K) - 'temperature_error': 平均温度误差 (%) - 'average_friction_work': 平均摩擦做功 (eV) - 'average_random_work': 平均随机做功 (eV) - 'energy_balance': 摩擦做功与随机做功比值 - 'recent_temperatures': 最近100步的温度历史
- 返回类型:
- set_friction(new_friction)[源代码]
动态调整摩擦系数
- 参数:
new_friction (float) -- 新的摩擦系数 (ps⁻¹)
- 抛出:
ValueError -- 如果new_friction为非正数
- 返回类型:
None
备注
这允许在模拟过程中调整恒温器的耦合强度, 例如在平衡阶段使用大摩擦系数,在生产阶段使用小摩擦系数。
- thermoelasticsim.md.propagators.exprel(x)[源代码]
计算 (exp(x) - 1) / x,避免x接近0时的数值误差
- 参数:
x (np.ndarray) -- 输入数组
- 返回:
计算结果
- 返回类型:
np.ndarray
- class thermoelasticsim.md.propagators.MTKBarostatPropagator(target_temperature, target_pressure, pdamp, pchain=3, ploop=1)[源代码]
基类:
Propagator
MTK (Martyna-Tobias-Klein) 恒压器传播算符
实现基于Nose-Hoover链的各向同性恒压器,支持体积和晶格形状变化。 基于ASE实现和PRD文档的精确算符分离方法。
主要功能: 1. 压力控制的Nose-Hoover链 2. 晶格矩阵h和共轭动量P_g的演化 3. 矩阵指数精确计算 4. 对称Trotter分解确保时间可逆性
参考文献: - Martyna, Tobias, Klein. J. Chem. Phys. 101, 4177 (1994) - ASE源码: ase/md/nose_hoover_chain.py MTKBarostat类 - 四阶Suzuki-Yoshida分解方法
- 参数:
Methods
计算恒压器贡献的能量
get_current_pressure
(cell, potential)获取当前系统压力
获取恒压器统计信息
integrate_momenta
(cell, potential, dt)按MTK各向异性公式更新粒子动量(与恒压器耦合的半步)
propagate
(cell, dt[, potential])执行恒压器传播一个时间步dt
propagate_positions_and_cell
(cell, dt)使用矩阵指数精确传播粒子位置和晶格
- propagate(cell, dt, potential=None)[源代码]
执行恒压器传播一个时间步dt
基于对称Trotter分解的恒压器链积分,包含: 1. 恒压器链传播 (dt/2) 2. 晶格动量更新 3. 恒压器链传播 (dt/2)
- integrate_momenta(cell, potential, dt)[源代码]
按MTK各向异性公式更新粒子动量(与恒压器耦合的半步)
在特征基下: p' = p * exp(-kappa * dt / W) + dt * F * exprel(-kappa * dt / W) 其中 kappa = lambda_i + Tr(P_g)/(3N)
备注
此方法包含力贡献,因此无需外层的纯NVE速度半步。
必须在调用前后配合 _update_cell_momenta(dt/2) 和位置/晶格传播。
- propagate_positions_and_cell(cell, dt)[源代码]
使用矩阵指数精确传播粒子位置和晶格
这是MTK算法的核心:通过对P_g矩阵的对角化和指数积分, 实现原子位置和晶格矩阵的同步演化。
算法流程: 1. 对P_g进行特征值分解: P_g = U @ diag(λ) @ U.T 2. 在特征坐标系中精确积分: exp(λ*dt/W) 3. 变换回原坐标系
积分方案
积分方案实现
本模块实现了各种MD积分方案,通过Trotter分解组合基础传播子。 每个方案对应一个特定的统计力学系综。
已实现的方案: - NVEScheme: 微正则系综的Velocity-Verlet算法
设计要点: 1. 基于对称Trotter分解保证时间可逆性 2. 复用基础传播子,避免代码重复 3. 每个方案负责特定系综的物理正确性 4. 支持延迟初始化以处理循环依赖
Created: 2025-08-18
- class thermoelasticsim.md.schemes.NVEScheme[源代码]
-
微正则系综(NVE)的Velocity-Verlet积分方案
实现经典的Velocity-Verlet算法,采用算符分离的对称分解: exp(iL*dt) ≈ exp(iL_v*dt/2)·exp(iL_r*dt)·exp(iL_v*dt/2)
其中: - iL_v: 速度传播算符 (力对动量的作用) - iL_r: 位置传播算符 (动量对位置的作用)
算法步骤: 1. v(t+dt/2) = v(t) + F(t)/m * dt/2 [半步速度更新] 2. r(t+dt) = r(t) + v(t+dt/2) * dt [整步位置更新] 3. 计算新位置的力 F(t+dt) [力重新计算] 4. v(t+dt) = v(t+dt/2) + F(t+dt)/m * dt/2 [半步速度更新]
优点: - 二阶精度 O(dt²) - 辛积分器,长期稳定 - 时间可逆 - 能量守恒精度高
适用系统: - 保守哈密顿系统 - 不含耗散或随机过程 - 粒子数N、体积V、总能量E固定
Methods
获取积分统计信息
重置积分统计信息
step
(cell, potential, dt)执行一步Velocity-Verlet积分
- step(cell, potential, dt)[源代码]
执行一步Velocity-Verlet积分
- 参数:
- 返回类型:
None
备注
该方法严格按照Velocity-Verlet算法执行:
第一次半步速度更新:使用当前位置的力
整步位置更新:使用更新后的速度
力重新计算:在新位置处计算力
第二次半步速度更新:使用新位置的力
这确保了算法的对称性和时间可逆性。
- 抛出:
ValueError -- 如果dt <= 0
RuntimeError -- 如果势函数计算失败
- 参数:
- 返回类型:
None
- class thermoelasticsim.md.schemes.BerendsenNVTScheme(target_temperature, tau=100.0)[源代码]
-
Berendsen NVT积分方案
组合Velocity-Verlet积分和Berendsen恒温器,实现恒温正则系综模拟。 这是一个后处理方案:先进行标准NVE积分,然后应用温度调节。
算法步骤: 1. 执行标准Velocity-Verlet积分步骤(NVE部分) 2. 应用Berendsen恒温器调节温度(NVT部分)
特点: - 基于现有NVE传播子的模块化设计 - 快速温度收敛 - 实现简单,计算高效 - 适合温度平衡和预处理
限制: - 不产生严格的正则系综分布 - 抑制温度涨落 - 不适合精确的热力学采样
适用场景: - 系统温度平衡 - 恒温MD预处理 - 温度控制要求不严格的模拟
Methods
get_current_temperature
(cell)获取当前系统温度
获取积分和恒温器统计信息
重置所有统计信息
step
(cell, potential, dt)执行一步Berendsen NVT积分
- __init__(target_temperature, tau=100.0)[源代码]
初始化Berendsen NVT积分方案
- 参数:
- 抛出:
ValueError -- 如果target_temperature或tau为非正数
- step(cell, potential, dt)[源代码]
执行一步Berendsen NVT积分
- 参数:
- 返回类型:
None
备注
该方法执行两阶段积分:
NVE阶段:标准Velocity-Verlet积分 - 速度半步更新 - 位置整步更新 - 力重新计算 - 速度再次半步更新
NVT阶段:Berendsen温度调节 - 计算当前温度 - 计算速度缩放因子 - 调节所有原子速度
- 抛出:
ValueError -- 如果dt <= 0
RuntimeError -- 如果积分过程失败
- 参数:
- 返回类型:
None
- class thermoelasticsim.md.schemes.AndersenNVTScheme(target_temperature, collision_frequency=0.01)[源代码]
-
Andersen NVT积分方案
组合Velocity-Verlet积分和Andersen恒温器,实现随机碰撞正则系综模拟。 这是一个后处理方案:先进行标准NVE积分,然后应用随机碰撞调节。
算法步骤: 1. 执行标准Velocity-Verlet积分步骤(NVE部分) 2. 应用Andersen随机碰撞恒温器(NVT部分)
特点: - 产生正确的正则系综分布 - 理论基础严格,符合统计力学 - 温度涨落符合理论预期 - 实现简单,数值稳定
限制: - 破坏动力学连续性 - 不保持速度自相关函数 - 随机性较强,影响某些分析
适用场景: - 平衡态性质计算 - 需要正确温度涨落的模拟 - 热力学性质计算
Methods
获取碰撞统计信息的便利方法
get_current_temperature
(cell)获取当前系统温度
获取积分和恒温器统计信息
重置所有统计信息
step
(cell, potential, dt)执行一步Andersen NVT积分
- __init__(target_temperature, collision_frequency=0.01)[源代码]
初始化Andersen NVT积分方案
- 参数:
- 抛出:
ValueError -- 如果target_temperature或collision_frequency为非正数
- step(cell, potential, dt)[源代码]
执行一步Andersen NVT积分
- 参数:
- 返回类型:
None
备注
该方法执行两阶段积分:
NVE阶段:标准Velocity-Verlet积分 - 速度半步更新 - 位置整步更新 - 力重新计算 - 速度再次半步更新
NVT阶段:Andersen随机碰撞 - 为每个原子计算碰撞概率 - 随机选择碰撞原子 - 重新采样碰撞原子的Maxwell速度
- 抛出:
ValueError -- 如果dt <= 0
RuntimeError -- 如果积分过程失败
- 参数:
- 返回类型:
None
- class thermoelasticsim.md.schemes.NoseHooverNVTScheme(target_temperature, tdamp=100.0, tchain=3, tloop=1)[源代码]
-
Nose-Hoover NVT积分方案
实现真正的算符分离Nose-Hoover恒温器,组合Velocity-Verlet积分和Nose-Hoover算符分离。 与Berendsen和Andersen的后处理方案不同,这是严格的算符分离方法。
算法步骤(基于Suzuki-Trotter分解): 1. Nose-Hoover恒温器半步:exp(iL_NH*dt/2) 2. 标准Velocity-Verlet积分:exp(iL_v*dt/2)·exp(iL_r*dt)·exp(iL_v*dt/2) 3. Nose-Hoover恒温器半步:exp(iL_NH*dt/2)
特点: - 严格的算符分离,保持辛性质 - 产生正确的正则系综分布 - 时间可逆的确定性演化 - 热浴变量ξ的自洽演化
优点: - 理论基础严格 - 长时间数值稳定 - 动力学性质保持良好 - 温度涨落符合理论预期
缺点: - 参数调节较复杂(Q的选择) - 可能出现长周期振荡 - 对初始条件敏感
适用场景: - 需要严格正则系综的模拟 - 动力学性质计算 - 长时间平衡态模拟
Methods
get_current_temperature
(cell)获取当前系统温度
获取积分和恒温器统计信息
获取热浴变量状态的便利方法
重置所有统计信息
重置恒温器状态(包括热浴变量ξ)
step
(cell, potential, dt)执行一步Nose-Hoover NVT积分
- __init__(target_temperature, tdamp=100.0, tchain=3, tloop=1)[源代码]
初始化Nose-Hoover NVT积分方案
- 参数:
- 抛出:
ValueError -- 如果target_temperature为非正数或tdamp为非正数
- step(cell, potential, dt)[源代码]
执行一步Nose-Hoover NVT积分
- 参数:
- 返回类型:
None
备注
该方法执行严格的算符分离积分:
Nose-Hoover算符半步:处理热浴变量和速度摩擦
标准Velocity-Verlet积分: - 速度半步更新 - 位置整步更新 - 力重新计算 - 速度再次半步更新
Nose-Hoover算符再次半步:完成热浴变量演化
这种分解保证算法的时间可逆性和相空间体积保持。
- 抛出:
ValueError -- 如果dt == 0
RuntimeError -- 如果积分过程失败
- 参数:
- 返回类型:
None
- class thermoelasticsim.md.schemes.LangevinNVTScheme(target_temperature, friction=1.0)[源代码]
-
Langevin NVT积分方案
基于Brunger-Brooks-Karplus (BBK)积分算法实现Langevin动力学恒温器。 该方案组合Velocity-Verlet积分和Langevin恒温器,提供基于物理模型的随机恒温。
算法步骤(BBK积分):
标准Velocity-Verlet积分(NVE部分):
v(t+dt/2) = v(t) + F(t)/m * dt/2
r(t+dt) = r(t) + v(t+dt/2) * dt
F(t+dt) = -∇U(r(t+dt))
v_det(t+dt) = v(t+dt/2) + F(t+dt)/m * dt/2
Langevin恒温器修正(NVT部分):
计算BBK常数:c1 = exp(-γ*dt), σ = sqrt(k_B*T*(1-c1²)/m)
应用随机-摩擦修正:v(t+dt) = c1*v_det(t+dt) + σ*R
核心特点: - 基于涨落-耗散定理的严格恒温 - 同时包含摩擦阻力和随机力 - 数值稳定性好,无遍历性问题 - 特别适合生物分子和隐式溶剂系统
参数选择指南: - 平衡阶段:γ ~ 1-10 ps⁻¹(快速温度控制) - 生产阶段:γ ~ 0.1-5 ps⁻¹(保持动力学真实性) - 过阻尼极限:γ >> 系统振动频率(布朗动力学)
优点: - 严格的正则系综采样 - 无长周期振荡问题(vs Nose-Hoover) - 数值稳定性优秀 - 允许较大时间步长 - 物理模型清晰直观
缺点: - 随机性影响动力学性质 - 摩擦项系统性减慢运动 - 破坏速度自相关函数 - 非确定性演化
适用场景: - 生物分子模拟 - 隐式溶剂系统 - 需要鲁棒NVT采样 - 平衡和生产阶段模拟 - 高分子等弛豫时间长的体系
Methods
get_current_temperature
(cell)获取当前系统温度
获取能量平衡信息
获取积分和恒温器统计信息
获取恒温器参数的便利方法
重置所有统计信息
set_friction
(new_friction)动态调整摩擦系数
step
(cell, potential, dt)执行一步Langevin NVT积分(BBK算法)
- __init__(target_temperature, friction=1.0)[源代码]
初始化Langevin NVT积分方案
- 参数:
- 抛出:
ValueError -- 如果target_temperature或friction为非正数
- step(cell, potential, dt)[源代码]
执行一步Langevin NVT积分(BBK算法)
- 参数:
- 返回类型:
None
备注
该方法执行完整的BBK积分算法:
NVE阶段:标准Velocity-Verlet积分 - 半步速度更新(仅保守力) - 整步位置更新 - 力重新计算 - 半步速度更新(仅保守力)
NVT阶段:Langevin恒温器修正 - 计算BBK参数:c1, σ - 应用随机-摩擦速度修正 - 满足涨落-耗散定理
与其他恒温器的区别: - Berendsen: 速度缩放,不产生正确涨落 - Andersen: 随机重置,破坏动力学连续性更强 - Nose-Hoover: 确定性,但可能有长周期振荡 - Langevin: 连续随机修正,涨落-耗散平衡
- 抛出:
ValueError -- 如果dt <= 0
RuntimeError -- 如果积分过程失败
- 参数:
- 返回类型:
None
- get_statistics()[源代码]
获取积分和恒温器统计信息
- 返回:
包含完整统计的字典: - 'step_count': 已执行的积分步数 - 'total_time': 总积分时间 (fs) - 'average_dt': 平均时间步长 (fs) - 'target_temperature': 目标温度 (K) - 'friction': 摩擦系数 (ps⁻¹) - 'damping_time': 阻尼时间 (ps) - 'thermostat_stats': 恒温器详细统计
- 返回类型:
- set_friction(new_friction)[源代码]
动态调整摩擦系数
- 参数:
new_friction (float) -- 新的摩擦系数 (ps⁻¹)
- 抛出:
ValueError -- 如果new_friction为非正数
- 返回类型:
None
备注
这允许在模拟过程中调整恒温器的耦合强度。 典型用法: - 平衡阶段:使用大摩擦系数快速达到目标温度 - 生产阶段:使用小摩擦系数保持动力学真实性
- thermoelasticsim.md.schemes.create_nose_hoover_nvt_scheme(target_temperature, tdamp=100.0, tchain=3, tloop=1)[源代码]
创建标准的Nose-Hoover NVT积分方案
- 参数:
- 返回:
配置好的Nose-Hoover NVT积分方案实例
- 返回类型:
示例
>>> scheme = create_nose_hoover_nvt_scheme(300.0, tdamp=50.0) >>> for step in range(10000): ... scheme.step(cell, potential, dt=0.5) >>> stats = scheme.get_statistics() >>> nhc_vars = scheme.get_thermostat_variables() >>> print(f"热浴动量: {nhc_vars['p_zeta']}")
- thermoelasticsim.md.schemes.create_andersen_nvt_scheme(target_temperature, collision_frequency=0.01)[源代码]
创建标准的Andersen NVT积分方案
- 参数:
- 返回:
配置好的Andersen NVT积分方案实例
- 返回类型:
示例
>>> scheme = create_andersen_nvt_scheme(300.0, collision_frequency=0.02) >>> for step in range(10000): ... scheme.step(cell, potential, dt=0.5) >>> stats = scheme.get_statistics() >>> collision_stats = scheme.get_collision_statistics() >>> print(f"总碰撞次数: {collision_stats['total_collisions']}")
- thermoelasticsim.md.schemes.create_berendsen_nvt_scheme(target_temperature, tau=100.0)[源代码]
创建标准的Berendsen NVT积分方案
- 参数:
- 返回:
配置好的Berendsen NVT积分方案实例
- 返回类型:
示例
>>> scheme = create_berendsen_nvt_scheme(300.0, tau=50.0) >>> for step in range(10000): ... scheme.step(cell, potential, dt=0.5) >>> stats = scheme.get_statistics() >>> print(f"平均温度调节: {stats['thermostat_stats']['average_scaling']:.3f}")
- thermoelasticsim.md.schemes.create_langevin_nvt_scheme(target_temperature, friction=1.0)[源代码]
创建标准的Langevin NVT积分方案
基于BBK积分算法,提供基于物理模型的随机恒温。 结合摩擦阻力和随机力,通过涨落-耗散定理确保严格的正则系综采样。
- 参数:
- 返回:
配置好的Langevin NVT积分方案实例
- 返回类型:
示例
平衡阶段使用强耦合快速达到目标温度:
>>> # 强耦合快速平衡 >>> scheme = create_langevin_nvt_scheme(300.0, friction=5.0) # 强耦合 >>> for step in range(5000): # 快速平衡 ... scheme.step(cell, potential, dt=1.0)
生产阶段使用弱耦合保持动力学真实性:
>>> # 弱耦合生产模拟 >>> scheme.set_friction(0.5) # 切换到弱耦合 >>> for step in range(100000): # 长时间生产 ... scheme.step(cell, potential, dt=1.0) >>> stats = scheme.get_statistics() >>> print(f"平均温度: {stats['thermostat_stats']['average_temperature']:.1f} K") >>> print(f"能量平衡: {stats['thermostat_stats']['energy_balance']:.3f}")
备注
Langevin恒温器的优势:
严格正则系综: 基于涨落-耗散定理,确保正确的统计力学采样
数值稳定: 无Nose-Hoover的遍历性问题和长周期振荡
物理清晰: 明确的摩擦和随机力物理模型
参数灵活: 可动态调节耦合强度,适应不同模拟阶段
广泛适用: 特别适合生物分子和隐式溶剂系统
与其他恒温器的比较:
vs Berendsen: 产生正确涨落,不只是平均温度控制
vs Andersen: 连续随机修正,不是突然重置
vs Nose-Hoover: 随机而非确定性,避免长周期问题
参数选择建议:
快速平衡: γ = 5-10 ps⁻¹,快速达到热平衡
动力学研究: γ = 0.1-1 ps⁻¹,最小化对真实动力学的扰动
构象采样: γ = 1-5 ps⁻¹,平衡采样效率和动力学保真度
布朗动力学: γ > 10 ps⁻¹,主要由扩散控制
- thermoelasticsim.md.schemes.create_nve_scheme()[源代码]
创建标准的NVE积分方案
- 返回:
配置好的NVE积分方案实例
- 返回类型:
示例
>>> scheme = create_nve_scheme() >>> for step in range(1000): ... scheme.step(cell, potential, dt=0.5)
- class thermoelasticsim.md.schemes.MTKNPTScheme(target_temperature, target_pressure, tdamp, pdamp, tchain=3, pchain=3, tloop=1, ploop=1)[源代码]
-
MTK-NPT (等温等压)积分方案
实现基于Nose-Hoover链恒温器和MTK恒压器的完整NPT系综, 支持同时控制温度和压力,允许体积和晶格形状变化。
理论基础: 基于Martyna-Tobias-Klein扩展系统方法,将Nose-Hoover链恒温器 与各向同性恒压器相结合,确保产生正确的NPT系综分布。
算法实现: 采用对称Trotter分解,将复杂的耦合运动方程分解为:
- exp(iL*dt) ≈
exp(iL_baro*dt/2) · # 恒压器链传播 exp(iL_thermo*dt/2) · # 恒温器链传播 exp(iL_p_cell*dt/2) · # 晶格动量更新 exp(iL_p*dt/2) · # 粒子动量更新 exp(iL_q*dt) · # 粒子和晶格位置更新 exp(iL_p*dt/2) · # 粒子动量更新 exp(iL_p_cell*dt/2) · # 晶格动量更新 exp(iL_thermo*dt/2) · # 恒温器链传播 exp(iL_baro*dt/2) # 恒压器链传播
主要功能: 1. 温度控制: 保持系统平均动能对应目标温度 2. 压力控制: 调节体积使内部压力等于外压 3. 晶格变化: 支持各向同性体积和形状变化 4. 守恒量: 监控扩展哈密顿量的守恒性
适用场景: - 需要同时控制温度和压力的模拟 - 研究相变和密度变化 - 制备有限温平衡态结构 - 消除残余应力的系统弛豫
注意事项: - 比NVE和NVT积分需要更多计算时间 - 压力控制参数需要仔细调节 - 适中的时间步长确保数值稳定性
- 参数:
target_temperature (float) -- 目标温度 (K)
target_pressure (float) -- 目标压力 (GPa) - 自动转换为内部单位
tdamp (float) -- 温度阻尼时间 (fs),典型值50-100*dt
pdamp (float) -- 压力阻尼时间 (fs),典型值100-1000*dt
tchain (int, optional) -- 恒温器链长度,默认为3
pchain (int, optional) -- 恒压器链长度,默认为3
tloop (int, optional) -- 恒温器积分循环次数,默认为1
ploop (int, optional) -- 恒压器积分循环次数,默认为1
示例
>>> # 300K, 0.1GPa的NPT模拟 >>> scheme = MTKNPTScheme( ... target_temperature=300.0, ... target_pressure=0.1, # GPa ... tdamp=50.0, # fs ... pdamp=500.0 # fs ... ) >>> >>> # 运行10ps的NPT弛豫 >>> dt = 1.0 # fs >>> for step in range(10000): ... scheme.step(cell, potential, dt) ... ... if step % 1000 == 0: ... stats = scheme.get_statistics() ... print(f"T={stats['temperature']:.1f}K, " ... f"P={stats['pressure']:.3f}GPa")
Methods
get_current_state
(cell, potential)获取当前瞬时状态
获取系统统计信息
step
(cell, potential, dt)执行一个完整的MTK-NPT积分步
- __init__(target_temperature, target_pressure, tdamp, pdamp, tchain=3, pchain=3, tloop=1, ploop=1)[源代码]
- thermoelasticsim.md.schemes.create_mtk_npt_scheme(target_temperature, target_pressure, tdamp, pdamp, tchain=3, pchain=3)[源代码]
创建MTK-NPT积分方案
- 参数:
- 返回:
配置好的MTK-NPT积分方案
- 返回类型:
示例
>>> # 300K, 大气压的NPT系综 >>> scheme = create_mtk_npt_scheme( ... target_temperature=300.0, ... target_pressure=0.0001, # ~大气压 ... tdamp=50.0, ... pdamp=500.0 ... ) >>> >>> # 高压高温条件 >>> scheme_hp = create_mtk_npt_scheme( ... target_temperature=1000.0, ... target_pressure=10.0, # 10 GPa ... tdamp=100.0, ... pdamp=1000.0 ... )
恒温器
- class thermoelasticsim.md.thermostats.Thermostat(target_temperature)[源代码]
基类:
object
恒温器基类,定义恒温器的接口和通用属性
- 参数:
target_temperature (float) -- 目标温度,单位K
Methods
apply
(atoms, dt)应用恒温器,更新原子速度
get_kinetic_energy
(atoms)计算系统动能
get_temperature
(atoms)计算当前系统温度,扣除质心运动
record_state
(atoms, time)记录系统状态用于后续分析
remove_com_motion
(atoms)移除系统质心运动
- class thermoelasticsim.md.thermostats.BerendsenThermostat(target_temperature, tau)[源代码]
基类:
Thermostat
Berendsen 恒温器
通过速度缩放实现温度控制,使系统快速达到目标温度。 该方法不产生严格的正则系综,但具有良好的数值稳定性。
- 参数:
Methods
apply
(cell, dt, potential)应用 Berendsen 恒温器以控制系统温度。
get_kinetic_energy
(atoms)计算系统动能
get_temperature
(atoms)计算当前系统温度,扣除质心运动
record_state
(atoms, time)记录系统状态用于后续分析
remove_com_motion
(atoms)移除系统质心运动
- apply(cell, dt, potential)[源代码]
应用 Berendsen 恒温器以控制系统温度。
该恒温器通过以下缩放因子
\lambda
来调整原子速度:\[\begin{split}\\lambda = \\sqrt{1 + \\frac{\\Delta t}{\\tau} \\left(\\frac{T_{\\text{target}}}{T_{\\text{current}}} - 1\\right)}\end{split}\]其中: -
\Delta t
为时间步长dt
, -T_{\text{target}}
为目标温度target_temperature
, -T_{\text{current}}
为当前系统温度。然后通过
\lambda
缩放原子速度,以达到近似的温度控制。
- class thermoelasticsim.md.thermostats.AndersenThermostat(target_temperature, collision_frequency)[源代码]
基类:
Thermostat
Andersen 恒温器
通过随机碰撞来控制温度,实现符合正则系综的采样。 该方法适合平衡态采样,但由于速度随机化,动力学轨迹会被打断。
- 参数:
Methods
apply
(cell, dt, potential)应用 Andersen 恒温器以控制系统温度。
get_kinetic_energy
(atoms)计算系统动能
get_temperature
(atoms)计算当前系统温度,扣除质心运动
record_state
(atoms, time)记录系统状态用于后续分析
remove_com_motion
(atoms)移除系统质心运动
- apply(cell, dt, potential)[源代码]
应用 Andersen 恒温器以控制系统温度。
在每个时间步,针对每个原子,发生碰撞的概率为
p
:\[\begin{split}p = \\text{collision\\_frequency} \\times \\Delta t\end{split}\]若发生碰撞,则根据目标温度
T_{\text{target}}
的 Maxwell-Boltzmann 分布重新分配原子的速度:\[\begin{split}v_i = \\mathcal{N}(0, \\sigma)\end{split}\]其中
\sigma
为速度分布的标准差,定义为:\[\begin{split}\\sigma = \\sqrt{\\frac{k_B \\times T_{\\text{target}}}{m}}\end{split}\]其中
k_B
为玻尔兹曼常数,m
为原子质量。
- class thermoelasticsim.md.thermostats.NoseHooverThermostat(target_temperature, time_constant, Q=None)[源代码]
基类:
Thermostat
Nose-Hoover 恒温器 (Python直接实现版本)
使用Velocity-Verlet + Nose-Hoover对称分解的方式: 1. 半步更新xi 2. 半步速度缩放 3. 半步力更新速度 4. 更新位置 5. 调用potential.calculate_forces(cell)以更新力 6. 半步力更新速度 7. 半步速度缩放 8. 半步更新xi
Methods
apply
(cell, dt, potential)应用 Nose-Hoover 恒温器 (Velocity-Verlet 对称分解实现)
get_kinetic_energy
(atoms)计算系统动能
get_temperature
(atoms)计算当前系统温度,扣除质心运动
record_state
(atoms, time)记录系统状态用于后续分析
remove_com_motion
(atoms)移除系统质心运动
- class thermoelasticsim.md.thermostats.NoseHooverChainThermostat(target_temperature, time_constant, chain_length=3, Q=None)[源代码]
基类:
Thermostat
Nose-Hoover 链恒温器
通过多个热浴形成链来改善遍历性,适合复杂系统。 采用C++后端实现核心积分步骤。
- 参数:
target_temperature (float) -- 目标温度,单位K
time_constant (float) -- 时间常数,控制热浴耦合强度。 较大的time_constant意味着热浴链的响应较慢,温度调整更加平缓。 较小的time_constant则响应较快,但可能导致温度波动。
chain_length (int, optional) -- 链的长度,默认为3。 链长度增加可以改善相空间的遍历性,但会增加计算复杂度。
Q (numpy.ndarray, optional) -- 热浴质量参数数组,长度应等于
chain_length
。 如果未提供,将根据默认方式初始化。
Methods
apply
(atoms, dt)应用 Nose-Hoover 链恒温器
获取热浴链的当前状态
get_kinetic_energy
(atoms)计算系统动能
get_temperature
(atoms)计算当前系统温度,扣除质心运动
record_state
(atoms, time)记录系统状态用于后续分析
remove_com_motion
(atoms)移除系统质心运动
恒压器
- class thermoelasticsim.md.barostats.Barostat(target_pressure)[源代码]
基类:
object
恒压器基类,定义恒压器的接口
Methods
apply
(cell, potential, dt)应用恒压器,更新晶胞参数
calculate_internal_pressure
(stress_tensor)根据应力张量计算内部压力
record_state
(pressure, volume, stress_tensor)记录系统状态
- 参数:
target_pressure (ndarray)
- class thermoelasticsim.md.barostats.ParrinelloRahmanHooverBarostat(target_pressure, time_constant, compressibility=4.57e-05, W=None, Q=None, stress_calculator=None)[源代码]
基类:
Barostat
Parrinello-Rahman-Hoover 恒压器实现
- 参数:
target_pressure (np.ndarray) -- 目标压力张量 (3x3)
time_constant (float) -- 压力耦合时间常数,控制恒压器对压力波动的响应速度。较小的时间常数会使系统更快地达到目标压力,但可能导致数值不稳定。
compressibility (float, optional) -- 等温压缩系数,表示材料在恒温下的压缩程度。默认值为4.57e-5。较大的压缩系数会使系统更容易压缩。
W (float, optional) -- 晶胞质量参数,用于控制晶胞的动力学行为。默认为自动计算。调整此参数可以改变晶胞响应外界压力变化的惯性。
Q (np.ndarray, optional) -- 热浴质量参数数组 (9,),默认为 ones(9) * (time_constant^2)。调整此参数可以改变恒压器对不同方向应力的响应。
stress_calculator (StressCalculator) -- 应力张量计算器实例
Methods
apply
(cell, potential, dt)应用 Parrinello-Rahman-Hoover 恒压器,更新晶胞参数和原子速度
calculate_internal_pressure
(stress_tensor)根据应力张量计算内部压力
record_state
(pressure, volume, stress_tensor)记录系统状态
- __init__(target_pressure, time_constant, compressibility=4.57e-05, W=None, Q=None, stress_calculator=None)[源代码]
- class thermoelasticsim.md.barostats.BerendsenBarostat(target_pressure, tau_p, compressibility=4.57e-05)[源代码]
基类:
Barostat
Berendsen 恒压器实现
- 参数:
Methods
apply
(cell, dt, potential)应用 Berendsen 恒压器
calculate_internal_pressure
(stress_tensor)根据应力张量计算内部压力
record_state
(pressure, volume, stress_tensor)记录系统状态
- class thermoelasticsim.md.barostats.AndersenBarostat(target_pressure, mass, temperature)[源代码]
基类:
Barostat
Andersen 恒压器实现
- 参数:
Methods
apply
(cell, dt, potential)应用 Andersen 恒压器
calculate_internal_pressure
(stress_tensor)根据应力张量计算内部压力
record_state
(pressure, volume, stress_tensor)记录系统状态
MD模拟器
- class thermoelasticsim.md.md_simulator.MDSimulator(cell, potential, integrator, ensemble='NVE', thermostat=None, barostat=None)[源代码]
基类:
object
分子动力学模拟器,支持NVE、NVT和NPT系综
- 参数:
cell (Cell) -- 包含原子的晶胞对象
potential (Potential) -- 势能对象
integrator (Integrator) -- 积分器对象
ensemble (str) -- 系综类型: 'NVE', 'NVT', 或 'NPT'
thermostat (Optional[Dict] or Thermostat) -- 恒温器配置或对象
barostat (Optional[Barostat]) -- 恒压器对象
Methods
计算系统总能量
绘制压力演化图
绘制温度演化图
run
(steps, dt)运行分子动力学模拟
run_npt
(steps, dt)运行NPT系综模拟
run_nve
(steps, dt)运行NVE系综模拟
run_nvt
(steps, dt)运行NVT系综模拟