3.3 激光驱动电子束的粒子单元模拟
粒子单元代码通过将模拟域划分为网格(单元格)来模拟粒子在电磁场中的运动,同时保持粒子作为自由运动的实体。本章用于性能研究的示例模拟了如何将非常高能量的激光脉冲射入氢气中,并且在其尾流场中加速以产生几乎以光速传播的电子束,并且不需要相当大的常规粒子加速器来加速电子束。
图3-3展示了实际模拟通过离散时间步长的过程,其中每一步涉及四个阶段。首先计算所有粒子在电场(E)和磁场(B)作用下的洛伦兹力(F)。接下来,粒子沿着洛伦兹力方向移动。这些移动的带电粒子产生电流(J),计算产生的电流大小。最后,产生的电流会影响原有电场和磁场,每次开始前都需要重新计算电场和磁场。选择合适的模拟时间步长的持续时间,使得在一个时间步长内粒子移动的距离不超过一个单元大小。
PCIonGPU源于一个高中生在HZDR实习期间的概念证明。它是单个GPU CUDA实现,比任何其他PCI代码都要快。从那时起,人们将这个应用移植到多GPU上,并且代码从CUDA C变成了C++ 11。使用本章之前讲述的优化步骤,程序总性能得到进一步提升。PIConGPU功能已经封装成库,可供其他应用调用,使得其他粒子网格模拟的开发者从中受益。