Skip to content

lin-qian123/difference_method_push

Repository files navigation

粒子推进算法比较:激光场中的电子运动

本项目实现和比较了多种粒子推进算法,包括3种专用粒子推进算法6种普通数值差分方法,用于模拟周期电磁场(激光场)中电子的运动,并与解析解进行对比。

算法分类

专用粒子推进算法

这些算法专门为带电粒子在电磁场中的运动设计,具有良好的物理守恒性质。

1. Boris 算法

Boris算法是等离子体物理和粒子模拟中最常用的算法之一。它是一个二阶精度的时间中心差分格式,具有以下特点:

  • 保持速度空间的旋转不变性
  • 完美的能量守恒
  • 计算效率高
  • 长期稳定性好
  • 推荐用于一般粒子模拟

2. Vay 算法

Vay算法是专门为相对论性粒子设计的推进算法,特别适合高能粒子模拟:

  • 精确保持时间中心差分格式
  • 精确计算洛伦兹因子
  • 在极端相对论区域表现更好
  • 避免了Boris算法在极高能情况下的误差累积

3. Higuera-Cary 算法

Higuera-Cary算法是另一个高精度的相对论性粒子推进算法:

  • 改进了Boris算法的相对论性处理
  • 在强场情况下精度更高
  • 完美的能量守恒性
  • 性能与Boris相当

普通数值差分方法

这些是通用的常微分方程数值解法,可应用于各种动力学系统(新增)。

4. Euler 方法(前向欧拉)

  • 最简单的一阶显式方法
  • 实现简单但精度低
  • ⚠️ 不适合长时间积分(能量误差大)

5. 四阶Runge-Kutta (RK4)

  • 经典的高精度显式方法
  • 四阶精度,广泛验证
  • 能量守恒较好
  • 计算量较大(每步4次函数评估)

6. Forward Difference(前向差分)

  • 与Euler方法本质相同
  • 强调离散化视角
  • ⚠️ 不适合长时间积分

7. Backward Difference(后向差分)

  • 隐式方法,数值稳定性好
  • 适合刚性问题
  • 需要迭代求解,计算量大
  • 精度仍然只有一阶

8. Crank-Nicolson 方法(隐式中点法)

  • 二阶精度,无条件稳定
  • 完美的能量守恒性
  • 需要迭代求解
  • 高精度模拟的良好选择

9. Leapfrog 方法(蛙跳法)

  • 速度和位置交错半步更新
  • 二阶精度,时间可逆
  • 能量守恒性好,计算效率高
  • 通用方法中的良好选择

物理问题设置

考虑平面波激光场: $$\mathbf{E} = E_0 \sin(\omega t - kz) \hat{x}$$ $$\mathbf{B} = \frac{E_0}{c} \sin(\omega t - kz) \hat{y}$$

其中:

  • $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  # 所有方法对比图(新增)
    └── ...

快速开始

1. 对比所有方法(推荐)

python compare_all_methods.py

这将运行所有9种方法并生成全面的对比分析:

  • 轨迹对比(专用算法 vs 普通方法)
  • 能量守恒性分析
  • 误差统计
  • 详细的可视化图表

2. 测试单一方法

python test_single_method.py

修改脚本中的 method 变量来测试不同方法:

method = 'Boris'  # 可选: Boris, Vay, Higuera-Cary, Euler, RK4, etc.

3. 原始对比程序

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% ⭐ 不推荐

推荐使用

✅ 一般粒子模拟(首选):

  • BorisHiguera-Cary: 完美能量守恒,高效,久经考验

✅ 高精度需求:

  • RK4: 四阶精度,能量守恒好
  • Crank-Nicolson: 完美能量守恒,无条件稳定

✅ 快速原型/教学:

  • Leapfrog: 简单高效,性能良好

❌ 不推荐:

  • Euler/Forward: 能量误差过大
  • Backward: 计算量大但精度不高

安装依赖

pip install -r requirements.txt

运行示例

# 运行算法比较
python comparison.py

# 生成可视化结果
python visualize.py

结果分析

程序会生成以下比较图表:

  1. 各算法的粒子轨迹对比
  2. 相对于解析解的位置误差演化
  3. 相对于解析解的速度误差演化
  4. 能量守恒性分析
  5. 不同时间步长下的精度对比

🆕 全面对比可视化工具(新增)

1. 完整对比程序 - compare_all_pushers.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)

2. 快速对比工具 - quick_compare.py

交互式选择特定方法进行快速对比。

python quick_compare.py

预设对比方案

  1. 粒子推进方法对比 (Boris, Vay, Higuera-Cary)
  2. 粒子推进 vs RK4
  3. 粒子推进 vs 传统方法
  4. 所有主要方法
  5. 自定义选择

3. 单方法详细可视化 - visualize_motion.py

对单个方法进行深入的可视化分析。

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 - 物理分析和结果解读

    • 各方法的物理特性
    • 关键观察点
    • 方法选择建议
    • 参考文献

参考文献

  1. Boris, J. P. (1970). "Relativistic plasma simulation-optimization of a hybrid code"
  2. Vay, J.-L. (2008). "Simulation of beams or plasmas crossing at relativistic velocity"
  3. Higuera, A. V., & Cary, J. R. (2017). "Structure-preserving second-order integration of relativistic charged particle trajectories in electromagnetic fields"

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published