电子云(ElectronCloud)
ElectronCloud 提供三种模式:
frozen对束流施加预设静止均匀电子圆盘产生的横向薄透镜踢角, 场采用自由空间解析式,或对宏电子采样后通过 PIC 求解一次。build_up在圆形真空室中跟踪受预设束流切片及外加磁场驱动的电子, 包括壁面初级电子产生、吸收及简化真二次发射;不对束流施加踢角。coupled加入电子云 PIC 自场和横向束流踢角, 在接地圆形真空室内使用已保存束流切片的真实粒子分布驱动电子。
build_up 属于外驱动低密度近似,不包含电子云自场、束流反作用或物理空间电荷饱和机制。
coupled 是首个准静态横向薄透镜耦合模型,尚未完成不稳定性阈值或平衡电子云密度的验证。
这三种模式需显式选择。
配置与执行
启用顶层 Electron cloud 配置块并定义命名配置。
每个 ElectronCloud 序列命令选择一个配置,同时给出自己的 Interaction length (m)。
该命令不将粒子输运过这一长度,实际输运需另行添加对应命令。
build_up 保留此必填字段以维持 API 兼容,但由于没有束流反作用,
它不改变电子积累动力学。
frozen 不要求 Slicer,因为预设场与纵向位置及时间无关。
命令保持 z_rel、dp、bunch.t0 和参考能量不变。
build_up 要求当前 z_rel SliceSet,并保持全部束流粒子坐标不变。
coupled 同样要求该 SliceSet,且只改变 px 和 py。
坐标约定见 注入与粒子生成(Injection)。
给定密度确定静态云或初始化动态云,不从束流强度或束团分组推算。
以下为输入片段,还需另行提供注入与输运:
{
"Electron cloud": {
"Enabled": true,
"Configurations": {
"round_cloud": {
"Mode": "frozen",
"Solver": "uniform_round_free_space",
"Electron density (1/m^3)": 1e12,
"Radius (m)": 0.01,
"Center X (m)": 0.0,
"Center Y (m)": 0.0
}
}
},
"Sequence": {
"cloud_at_ip": {
"Command": "ElectronCloud",
"S (m)": 10.0,
"Configuration": "round_cloud",
"Interaction length (m)": 1.0,
"Save fields": true,
"Save turns": [[0]]
}
}
}
Python 输入生成使用 PASS.para.schema.electron_cloud 中的
ElectronCloudConfig、ElectronCloudConfiguration 和 ElectronCloudItem,
通过 generate_input(..., electron_cloud=cloud_config) 传入顶层配置。
配置名称区分大小写;每个命令拥有独立的云状态与资源。
相同源参数与显式随机种子产生相同的初始宏电子样本。
省略种子或使用 JSON null 表示非确定性初始化;布尔值与非整数不属于合法整数种子。
配置参数
顶层块包含 Enabled``(布尔值,默认 ``false)和 Configurations
(名称到下列配置对象的映射)。关闭顶层开关时跳过配置及全部电子云操作。
JSON 字段 / Python 字段 |
默认值 |
含义 |
|---|---|---|
|
|
|
|
|
静态:自由空间解析场或 |
|
必填 |
圆盘内非负物理电子数密度;动态模式仅用其初始化云。 |
|
必填 |
均匀圆盘的正半径,动态模式为初始云半径;不是束流 RMS 尺寸。 |
|
|
电子云横向中心,单位为米。 |
|
|
静态 PIC 或初始动态云的源样本数,须为正整数,不改变物理密度。 |
|
|
云初始化和发射随机数的整数种子或 |
|
|
网格点数,均为至少 3 的整数;耦合模式要求至少 5 的奇数。 |
|
|
以原点为中心的网格完整宽度,须为正值。 |
|
|
PIC 沉积和插值采用 |
|
|
静态场计算区域的几何;动态模式要求 |
|
|
两种动态模式均必填的嵌套 |
网格和沉积参数用于静态 PIC、静态场诊断和耦合 PIC;build_up 不使用 PIC 网格。
耦合模式要求两个网格宽度均覆盖完整真空室直径,每轴网格间距不超过真空室半径的一半。
这是最低可分辨性检查,不是充分收敛条件。
圆形 Dirichlet 壁面由 Build up.Chamber radius (m) 定义。
JSON 字段 / Python 字段 |
默认值 |
含义 |
|---|---|---|
|
|
序列中薄透镜作用位置。 |
|
|
同一位置的可选整数顺序,遵循共享序列排序规则。 |
|
必填 |
当前束流 |
|
必填 |
静态或耦合束流踢角所代表的非负机器作用长度;积累动力学与该值无关。 |
|
|
两种动态模式均要求当前 |
|
|
当前命令的启用开关。 |
|
|
在指定圈保存静态场,或动态粒子状态和事件历史;耦合输出还包含最终云场。 |
|
|
|
所有数值配置必须有限。未知电子云字段会报错,因此未实现的动态模型参数不会被静默忽略。
静态云的场与动量约定
设电子密度 \(n_e\ge0\)、元电荷 \(e>0\)、电荷密度 \(\rho_e=-e n_e\)、云半径 \(a\),以及 \(\boldsymbol r=(x-x_c,y-y_c)\)。 由无限长均匀带电圆柱的高斯定律得到
电场在中心为零,方向指向中心;解析解同时包含圆盘外径向 \(1/r\) 的场。 选择 \(\phi(a)=0\) 作为势参考时,
二维自由空间势具有任意加法常数;该参考选择不影响踢角。
PASS 保存归一化横向机械动量 \(p_x=P_x/P_0\) 和 \(p_y=P_y/P_0\)。 在小角度、参考速度薄透镜近似下,命令施加
其中 \(q_b\) 带符号,\(P_0\) 为完整粒子的 SI 单位参考动量。 内部使用等价因子 \(\operatorname{sign}(q_b)L_{\mathrm{int}}/(\beta_0 c B\rho)\), 其中正值 \(B\rho=P_0/|q_b|\) 包含离子的电荷质量比归一化。 因此近轴电子云聚焦正电荷粒子、散焦电子束粒子。
该公式不含 \(1/\gamma_0^2\),因为静止电子云没有可抵消电力的预设纵向电流磁场。 同速自场中的相对论抵消属于 空间电荷效应(SpaceCharge) 的物理模型。 这里不是完整六维电磁积分:纵向电场、云磁场、电场做功,以及逐粒子速度修正均不在此近似内。
PIC 归一化与边界条件
PIC 在圆盘面积内均匀采样,各样本具有相等的非负电子数权重。 内部源长度 \(L_s=1\,\mathrm{m}\)、样本数 \(N_m\) 对应
共享 PIC 求解器沉积带符号电荷,输出积分密度 \(\widetilde\rho\)
(C/m2)、积分势 \(\widetilde\phi`(V m)和积分场
:math:\)widetilde E_x,widetilde E_y`(V)。ElectronCloud 将其除以
\(L_s\),得到 C/m3、V 和 V/m;仅最终束流踢角乘以独立的机器作用长度
\(L_{\mathrm{int}}\)。这两个长度都不是纵向切片宽度。
fft_free_space 采用开放边界场;fd_dirichlet 支持 横向场求解器
中的导体几何;dst_dirichlet 要求完整网格对齐矩形,采用 default
或完全匹配的矩形 aperture。Dirichlet 求解器使用零壁面势,必须提供有限边界。
其结果通常与自由空间解析圆柱具有真实的边界物理差异。
只有矩形计算区域和沉积电荷完全相同时,才应直接比较 FD 与 DST。
对于静态 PIC,完整源圆盘及沉积支撑域必须位于支持的场区域内; 无效几何会报错,不会裁掉源电荷。 此处 aperture 用于场计算域,不会执行束流粒子丢失;束流损失请配置输运元件的 孔径(Aperture) 属性。 自由空间解析场可作用于源圆盘外的粒子。PIC 要求粒子位于有效插值区域内, 不会用零场替代网格外粒子的场。
非凸多边形的源包含检查使用连续边线,因此能够发现小于网格单元的凹缺口。 对于矩形部分与端帽高度不等的非凸 racetrack,源包含检查使用每个曲线端 128 段的内接多边形。 这一保守检查可能拒绝极接近曲壁的合法源;此时需将源向内移动。
动态模型与物理时间
选择 Mode="build_up"、Solver="round_gaussian_beam" 并提供
Build up 对象。耦合 PIC 则选择 Mode="coupled"、
Solver="fd_dirichlet",使用相同嵌套对象。
顶层电子密度、圆盘半径与中心描述初始电子云,
整个初始圆盘必须严格位于圆形真空室内。
初始方向在三维空间各向同性,动能为给定单能值。
初始密度可以为零,之后由初级源产生电子。
from PASS.para.schema.electron_cloud import (
ElectronCloudBuildUpConfiguration, ElectronCloudConfiguration,
)
model = ElectronCloudConfiguration(
mode="build_up", solver="round_gaussian_beam",
electron_density=1e8, radius=0.01, n_macroparticles=512,
random_seed=20260926,
buildup=ElectronCloudBuildUpConfiguration(
chamber_radius=0.02, beam_sigma=0.002, max_time_step=5e-11,
primary_electrons_per_particle_per_m=1e-6,
secondary_yield_max=1.5,
),
)
JSON 字段 / Python 字段 |
默认值 |
含义 |
|---|---|---|
|
必填 |
以束流轴为中心的正圆形壁面半径。 |
|
必填 |
积累模式的正固定横向高斯 sigma;耦合模式为保持 schema 兼容仍要求填写,但其场与步长控制不使用此值。 |
|
必填 |
正积分步长上限;推进器还可进一步缩短。 |
|
|
束流局部坐标系中外加磁场的均匀部分 |
|
|
带符号有限正规四极磁场梯度;拒绝布尔值。 |
|
|
每电子的非负初始动能。 |
|
|
每真实束流粒子、每米的非负预设初级电子产额。 |
|
|
每个非零初级发射事件产生的宏电子样本数,须为正整数。 |
|
|
未经能量截断的真二次产额曲线峰值,非负;零表示吸收壁。 |
|
|
未截断曲线峰值处的入射动能,须为正值。 |
|
|
严格大于一的曲线形状参数。 |
|
|
正的初级发射能量和名义二次发射能量。 |
|
|
正整数粒子数上限;超过时报告错误,不丢弃电荷。 |
|
|
每个物理时间区间内允许的积分步数,须为正整数。 |
|
|
每粒子在单个积分步内允许的壁面事件数,须为正整数。 |
在同一圈、同一位置执行指定 Slicer,再调用云命令。
只支持连续 z_rel 区间,要求覆盖全部存活粒子且含粒子切片宽度为正;
零宽度空切片会被跳过。
命令消费已保存的切片归属和区间,不隐式重算或缩放。
区间 \([z_{\min},z_{\max}]\) 对应的物理通过时间和线电荷为
驱动器按这些时间合并排序全部束团区间;区间可以端点相接,但不能重叠。 重复圈和物理时间倒退会被拒绝。空切片仍以零束流场推进电子, 间隙内继续计算运动、外加磁场及壁面事件。 端点舍入容限不超过八个绝对时间 ULP 与较短切片时长的 \(10^{-12}\) 倍中的较小值。 若绝对端点相减得到的时长相对保存值 \(\Delta z/(\beta_0c)\) 的误差超过 \(10^{-6}\),则拒绝执行,避免很大的绝对时钟悄悄吞掉短束流脉冲。 第一个区间起点建立初始云时钟,允许负时间,不凭空补算未定义的过去。 每次调用在最后一个保存切片的后沿结束,不自动推进至环周期末端; 下次调用首先推进中间间隙。显式声明的空束团贡献其保存的空区间, 缺失桶位不会被隐式补造。
参考时间由输运命令推进,不由执行器的圈计数推进,因此多圈输入需要真实闭合输运路径。
必须使用 bunch.t0 与保存区间构造时间,不能用名义 z_center 或
harmonic_id 替代物理到达时间。
预设驱动与电子推进
在 build_up 的每个切片内,横向源是位于轴心、在壁面半径 \(R\) 截断的圆高斯,
sigma 为给定 \(\sigma_b\)。当前切片粒子数确定带符号线电荷;
跟踪束流的横向坐标不会改变源中心和尺寸。
在 \(0<r<R\) 内,
中心使用连续线性极限。分母保证 lambda_b 是真空室内包含的总线电荷。
由于轴对称,接地圆壁只改变静电势参考,不改变径向电场。
束流磁场与配置的外加磁场共同作用于电子。
两种动态模式均支持均匀外场与理想正规四极场叠加,在电子横向中点求值:
此外场属于局部电子云作用点,须显式配置,不从格架 Quadrupole 命令自动推断。
纯二极场使用 magnetic_gradient=0 和横向均匀磁场。
圆形真空室内的保守场强上界为 \(|\boldsymbol B_0|+|G|R\)。
模型沿纵向均匀,可以出现横向磁镜俘获,但不包含有限磁铁长度、
端部边缘场或纵向电子损失。
电子采用两个位置坐标和三个无量纲动量分量 \(\boldsymbol u=\boldsymbol P/(m_ec)=\gamma_e\boldsymbol v/c\), 其中 \(\gamma_e=\sqrt{1+|\boldsymbol u|^2}\)。 相对论 Boris 动量推进与对称半漂移组合;每个半漂移求首次圆壁交点, 在交点吸收或发射后继续推进剩余时间。不模拟不同云作用点之间的纵向电子输运。 Boris 方法参见 WarpX 粒子推进器文档。
时间步长上限还受到保守的束流振荡频率、回旋频率和横向位移估计限制。 这些限制不能替代分辨率研究:撞壁附近的力分裂误差和 Boris 相位误差仍依赖步长。 宏粒子数与发射统计还需独立检查收敛。 标准相对论 Boris 对相对论 \(\boldsymbol E\times\boldsymbol B\) 漂移也有已知限制,见 Higuera 与 Cary。
耦合 PIC 场与束流响应
coupled 使用保存切片的存活粒子横向坐标及归属。
每个束流宏粒子沉积线电荷 \(q_{\ell,j}=r_b Z_b e/\Delta z\),
其中 \(r_b\) 为真实粒子与宏粒子的数量比。
在保存的物理切片时间区间内,横向源分布保持固定,不再用高斯轮廓替代;
beam_sigma 对本模式的物理计算没有影响。
接地圆形 FD 求解器分别求束流场和云场。动态云粒子先沉积 \(q_{\ell,e,j}=-e w_j/L_s`(C/m),其中源长度 :math:`L_s\) 初始为 1 m。 除以网格面积后得到 C/m3 的密度,Poisson 直接给出 V 的电势与 V/m 的电场, 不再额外除以源长度。恢复的快照可以包含其他源长度;电子权重随该长度同比缩放时,物理场不变。 每个电子步先执行含壁面事件的半漂移,在中点重建云场, 使用 \(\boldsymbol E_b+\boldsymbol E_e\) 和 \(\boldsymbol B_{\mathrm{ext}}+\boldsymbol B_b\) 执行 Boris 更新, 再执行第二次半漂移。无束流间隙内仍推进云自场。 不包含云磁场或纵向电场。
对位于切片固定横向坐标的见证粒子,以中点求积累积时长 \(\Delta t_s\) 内的云场:
束流踢角只使用云场,不含束流自踢角或 \(1/\gamma_0^2\) 折减。
此操作只改变 px、py;x、y、z_rel、dp、
参考能量和 bunch.t0 均不变,切片内不推进束流源坐标。
作用长度缩放束流响应,不缩放电子数或电子物理时钟。
靠近圆壁时,沉积和插值将每个模板在有效内节点上重新归一化,保持沉积电荷。
此处理在壁面附近具有一阶误差,并非精确 Hamiltonian 或严格能量守恒的粒子—场离散。
步长受 max_time_step、外场与束流场的回旋频率估计、
云等离子体及网格加速度频率估计(\(\omega\Delta t\le0.2\)),
以及电子位移(\(v_\perp\Delta t\le0.2h\),\(h\) 为较小网格间距)限制。
这些控制不能证明收敛。得出物理结论前,应分别检查网格、宏电子与初级发射样本数、
随机种子、切片宽度和时间步长。
初级源与二次发射
每个切片前沿产生预设初级电子数 \(N_{\mathrm{primary}}=Y_p N_{\mathrm{slice}}L_s\), 使用沿壁面周向均匀采样、朝内发射的等权宏电子表示。 其中源长度 \(L_s\) 初始为 1 m,\(Y_p\) 单位为 1/m。 这一经验源不计算残余气体电离、同步光子输运或材料光电发射能谱。 初级产生集中在切片前沿,没有在整个切片时长内连续分布。 仅缩短电子积分步长无法消除这一源时间近似,还应检查 Slicer 宽度收敛。
设入射动能为 \(E_i\),\(x=E_i/E_{\max}\) 且 \(s>1\)。 未经截断的真二次曲线与实现的限制为
每个入射宏电子至多产生一个宏二次电子,其权重为 \(w_o=w_i\delta_{\mathrm{eff}}\),每电子能量为 \(E_o\); 权重为零表示吸收。这样同时限制单电子能量与加权总能量不超过入射能量, 并在低能端保守地抑制发射。 曲线使用 Furman 与 Pivi 式 31–32 的真二次形状,并非完整概率模型:未实现弹性反射、再扩散、角度相关材料产额及联合二次能谱。 宏粒子通过权重表示倍增,不采用整数分支。
初级和二次发射方向均服从相对于朝内法向的三维余弦分布: \(\mu=\cos\theta=\sqrt U\)、\(\phi=2\pi V\), 其中 \(U,V\) 为独立均匀随机数。 尽管只跟踪 x、y 位置,三个动量分量均保留;初始电子云方向则使用各向同性完整球面。
输出与状态
静态模式选定圈的 HDF5 诊断写入当前 PASS 运行目录下的
electron_cloud/<run_id>/beam<id>_<command>/turn_<turn>_call_<call>.h5。
运行标识包含新生成的唯一标识;调用编号区分同一圈的重复执行。
命令的 saved_fields 列出已写入路径。
所需场输出写入成功后才提交暂存的束流动量踢角。写入失败时束流动量保持不变,
重试会使用新的诊断文件名。文件格式标记为
PASS-electron-cloud-fields-1,包含:
数据集 |
单位 |
含义 |
|---|---|---|
|
m |
一维网格坐标轴。 |
|
C/m3 |
带符号的物理体电荷密度。 |
|
1/m3 |
物理电子数密度。 |
|
V |
静电势。 |
|
V/m |
横向电场。 |
|
m、m、1 |
PIC 源坐标与电子数权重;解析云不含这些数据集。 |
二维网格数组按 (y, x) 排列,各数据集属性注明单位。
文件 metadata_json 记录命令、束流、圈数、位置、作用长度、配置和踢角诊断;
PIC 源元数据含所代表的源长度与随机数状态。
执行后的 last_diagnostics 提供存活粒子数、最大电场与踢角以及逐束团记录。
解析势采用上文给出的势参考。解释结果时,应区分 PIC 采样噪声、导体壁面像场与力归一化误差。
两种动态模式采用相同的输出目录与选圈规则,保存
source/x,y,ux,uy,uz,weight 数组和源元数据;build_up 不保存云自场图。
耦合输出还包含最终真实云场的 grid 和 fields 数据集,
采用上表 SI 单位,并保存历史与最大踢角诊断。
ux,uy,uz 为无量纲动量。源元数据包含 source_length、物理 time、
last_turn、随机数状态及累计粒子数/能量计数器。
history_json 逐间隙或切片记录时间、束流粒子数、带符号线电荷、初级注入、
作用前后电子数、入射/发射电子数和步数。每条记录满足
累计壁面能量为全部代表电子的入射动能减发射动能,单位 eV,乘 \(e\) 可转换为焦耳。 计数和壁面能量对应保存的源长度;若代表机器长度 \(L\),可乘 \(L/L_s\) 换算。 这不是自洽的机器热负荷预测。配置的作用长度不缩放底层电子集合。
累计能量收支保存 initial_energy_ev、primary_energy_ev 和带符号
field_work_ev (Boris 力更新时的动能变化)。以 eV 为单位计算
\(K=\sum w(\gamma_e-1)m_ec^2\),满足
\(K_{\mathrm{final}}=K_{\mathrm{initial}}+K_{\mathrm{primary}}+W_{\mathrm{field}}-E_{\mathrm{wall}}\)。
该关系验证数值收支,不度量积分器的物理轨迹误差。
在耦合模式下,它也不证明准静态薄透镜近似中的束流、电子和场总能量守恒。
整个动态命令暂存电子状态、随机数状态及束流踢角,
全部演化和请求的输出成功后才一并提交;演化或输出失败时均保持不变。
命令提供 state_dict() / load_state_dict() 和
save_state(path) / load_state(path),保存自身源、配置标识和随机数状态,
从而可重复使用非确定性 PIC 样本,或带时间和动量的动态电子状态。
这些 API 是云快照,不是完整模拟重启:匹配的束流粒子、束流参考状态、圈数和其他集体效应状态
仍需分别处理。静态模式没有演化时钟,两种动态模式均恢复保存的物理时钟。
耦合快照沿用动态状态格式,校验模式与配置标识,并重建场资源而不保存缓存。
跟踪期间,动态电子数组驻留于所选 CPU 或 GPU 后端。 暂存状态拥有独立粒子数据;耦合模式通过串行调用复用固定网格、场分解和数值工作区。 读取公开云状态、写入源/场快照或捕获检查点时才构造经过校验的主机快照; GPU 上这会增加设备到主机的数据传输。输入字段与检查点格式保持不变。 标量诊断和发射采样仍可能引发主机与设备同步。 比较 CPU/GPU 性能时,应先完成编译和求解器初始化预热, 分别测量同步后的跟踪、初始化与快照输出耗时,并覆盖无碰壁和壁面发射负载; 少量电子使用 GPU 不一定更快。
耦合 GPU 执行结合固定次序沉积与确定性 cuDSS 求解。 高度聚集的单元使用固定归约树,因此与此前串行求和相比可能出现末位差异。 复现检查限定于相同代码、GPU 架构、SM 数量及软件栈, 不承诺跨设备一致,见 横向场求解器。
读取云快照只改变当前命令的源。跟踪入口从第 0 圈开始新运行, 这些组件 API 不提供整机重启流程。
可运行示例
example/07_electron_cloud 提供英文入门说明和六个串行单踢角算例:零密度、
解析密度与双倍密度、自由空间 PIC、矩形 FD 和矩形 DST。
显式探针粒子覆盖云内外区域。分析从作用前后分布快照读取踢角,与高斯定律比较,
检查密度正比关系、坐标和参考时间不变,并在相同边界条件下比较 FD/DST。
JSON、CSV 和科学绘图 PNG 输出位于 Git 忽略的
tests/codex/electron_cloud/example_output 目录。
example/08_electron_cloud_buildup 提供四个串行束团列算例:初始云吸收、
初级产生与吸收、初级产生与真二次发射,以及时间步长减半比较。
真实单圈 Drift 推进参考时钟,同时保持预设驱动束流分布不变。
分析检查粒子数/能量收支、时间连续性和束流坐标不变,
在 tests/codex/electron_cloud/buildup_example_output 保存 JSON、CSV 和电子数历史图。
时间步减半的差异作为分辨率比较报告,不表示物理饱和或统计收敛已被证明。