本项目实现和比较了多种粒子推进算法,包括3种专用粒子推进算法和6种普通数值差分方法,用于模拟周期电磁场(激光场)中电子的运动,并与解析解进行对比。
这些算法专门为带电粒子在电磁场中的运动设计,具有良好的物理守恒性质。
Boris算法是等离子体物理和粒子模拟中最常用的算法之一。它是一个二阶精度的时间中心差分格式,具有以下特点:
- 保持速度空间的旋转不变性
- 完美的能量守恒
- 计算效率高
- 长期稳定性好
- 推荐用于一般粒子模拟
Vay算法是专门为相对论性粒子设计的推进算法,特别适合高能粒子模拟:
- 精确保持时间中心差分格式
- 精确计算洛伦兹因子
- 在极端相对论区域表现更好
- 避免了Boris算法在极高能情况下的误差累积
Higuera-Cary算法是另一个高精度的相对论性粒子推进算法:
- 改进了Boris算法的相对论性处理
- 在强场情况下精度更高
- 完美的能量守恒性
- 性能与Boris相当
这些是通用的常微分方程数值解法,可应用于各种动力学系统(新增)。
- 最简单的一阶显式方法
- 实现简单但精度低
⚠️ 不适合长时间积分(能量误差大)
- 经典的高精度显式方法
- 四阶精度,广泛验证
- 能量守恒较好
- 计算量较大(每步4次函数评估)
- 与Euler方法本质相同
- 强调离散化视角
⚠️ 不适合长时间积分
- 隐式方法,数值稳定性好
- 适合刚性问题
- 需要迭代求解,计算量大
- 精度仍然只有一阶
- 二阶精度,无条件稳定
- 完美的能量守恒性
- 需要迭代求解
- 高精度模拟的良好选择
- 速度和位置交错半步更新
- 二阶精度,时间可逆
- 能量守恒性好,计算效率高
- 通用方法中的良好选择
考虑平面波激光场:
其中:
-
$E_0$ 是电场振幅 -
$\omega = 2\pi/T$ 是角频率 -
$k = \omega/c$ 是波数 -
$c$ 是光速
对于非相对论情况,存在解析解(见 analytical_solution.py)。
.
├── README.md # 项目说明
├── requirements.txt # Python依赖
├── particle_pusher.py # 专用粒子推进算法实现(Boris、Vay、Higuera-Cary)
├── standard_methods.py # 普通数值差分方法实现(新增)
├── analytical_solution.py # 解析解推导与实现
├── comparison.py # 原始算法比较程序
├── compare_all_methods.py # 所有方法全面对比(新增)
├── test_single_method.py # 单一方法详细测试(新增)
├── visualize.py # 可视化脚本
├── METHODS_COMPARISON.md # 方法对比详细说明文档(新增)
└── figure/ # 生成的图像
├── all_methods_comparison.png # 所有方法对比图(新增)
└── ...
python compare_all_methods.py这将运行所有9种方法并生成全面的对比分析:
- 轨迹对比(专用算法 vs 普通方法)
- 能量守恒性分析
- 误差统计
- 详细的可视化图表
python test_single_method.py修改脚本中的 method 变量来测试不同方法:
method = 'Boris' # 可选: Boris, Vay, Higuera-Cary, Euler, RK4, etc.python comparison.py仅对比三种专用粒子推进算法。
基于匀强磁场中5个回旋周期的测试(时间步长 T/100):
| 排名 | 方法 | 能量相对误差 | 评价 |
|---|---|---|---|
| 🥇 | Boris | 0.000000% | ⭐⭐⭐⭐⭐ 完美 |
| 🥇 | Higuera-Cary | 0.000000% | ⭐⭐⭐⭐⭐ 完美 |
| 🥇 | Crank-Nicolson | 0.000000% | ⭐⭐⭐⭐⭐ 完美 |
| 🥈 | RK4 | 0.000042% | ⭐⭐⭐⭐ 优秀 |
| 🥉 | Leapfrog | 0.388193% | ⭐⭐⭐⭐ 良好 |
| 4 | Vay | 38.577% | ⭐⭐ 需改进 |
| 5 | Backward | 85.970% | ⭐⭐ 较差 |
| 6 | Euler/Forward | 603.764% | ⭐ 不推荐 |
✅ 一般粒子模拟(首选):
- Boris 或 Higuera-Cary: 完美能量守恒,高效,久经考验
✅ 高精度需求:
- RK4: 四阶精度,能量守恒好
- Crank-Nicolson: 完美能量守恒,无条件稳定
✅ 快速原型/教学:
- Leapfrog: 简单高效,性能良好
❌ 不推荐:
- Euler/Forward: 能量误差过大
- Backward: 计算量大但精度不高
pip install -r requirements.txt# 运行算法比较
python comparison.py
# 生成可视化结果
python visualize.py程序会生成以下比较图表:
- 各算法的粒子轨迹对比
- 相对于解析解的位置误差演化
- 相对于解析解的速度误差演化
- 能量守恒性分析
- 不同时间步长下的精度对比
对比所有10种方法(粒子推进 + 传统差分),生成全面的对比图像。
# 默认参数运行
python compare_all_pushers.py
# 指定电场强度和模拟周期
python compare_all_pushers.py 1e14 8生成的图像(保存在 figure/ 目录):
-
comprehensive_main_comparison.png- 主要对比(12个子图)- 3D轨迹、z-x/x-y/y-z平面投影
- x/y/z位置演化、速度大小演化
- vx/vy速度演化、洛伦兹因子、动能演化
-
comprehensive_detailed_comparison.png- 详细对比- 左列:粒子推进方法(Boris, Vay, Higuera-Cary, Leapfrog)
- 右列:传统差分方法(Euler, RK4, Forward, Backward, Crank-Nicolson, Leapfrog)
-
comprehensive_phase_space.png- 相空间对比(所有方法的 x-vx) -
comprehensive_grouped_comparison.png- 速度空间对比(所有方法的 vx-vz)
多场强对比:程序可选择生成不同场强下的对比(10¹², 10¹³, 10¹⁴ V/m)
交互式选择特定方法进行快速对比。
python quick_compare.py预设对比方案:
- 粒子推进方法对比 (Boris, Vay, Higuera-Cary)
- 粒子推进 vs RK4
- 粒子推进 vs 传统方法
- 所有主要方法
- 自定义选择
对单个方法进行深入的可视化分析。
python visualize_motion.py生成每个方法的详细图像:
- 3D轨迹及多角度投影
- 位置、速度、能量随时间演化
- 相空间和速度空间分析
- 可选:生成动画(GIF)
所有对比工具都包含以下物理量的可视化:
| 类别 | 物理量 | 说明 |
|---|---|---|
| 轨迹 | 3D轨迹、z-x/x-y/y-z投影 | 粒子运动轨迹的完整视图 |
| 位置 | x, y, z 随时间 | 横向振荡和纵向漂移 |
| 速度 | vx, vy, vz, |v|/c | 速度分量和归一化速度大小 |
| 相对论量 | 洛伦兹因子 γ | 相对论效应强度 |
| 能量 | 动能 (keV) | 粒子从场中获得的能量 |
| 相空间 | x-vx, vx-vz | 相空间结构和稳定性 |
-
COMPARISON_TOOLS_GUIDE.md - 对比工具完整使用指南
- 工具功能详解
- 使用场景和示例
- 图像解读技巧
- 常见问题解答
-
COMPARISON_ANALYSIS.md - 物理分析和结果解读
- 各方法的物理特性
- 关键观察点
- 方法选择建议
- 参考文献
- Boris, J. P. (1970). "Relativistic plasma simulation-optimization of a hybrid code"
- Vay, J.-L. (2008). "Simulation of beams or plasmas crossing at relativistic velocity"
- Higuera, A. V., & Cary, J. R. (2017). "Structure-preserving second-order integration of relativistic charged particle trajectories in electromagnetic fields"