ACDipole
ACDipole 是零长度、单横向平面的激励元件,用于固定能量光学测量和规定的扫频实验。
幅度与频率使用相互独立的物理时间程序。所有 bunch 取样同一个波形;
圈数计数器和 harmonic_id 都不会重置波形相位。
物理约定
对于 Direction = x (垂直激励时将 \(x\) 换为 \(y\)),
Kick angle (rad) 指定有符号振幅 \(\theta\),Phase (rad) 指定
\(\phi_0\),Phase epoch (s) 指定 \(t_*\)。PASS 存储的是
\(p_x=P_x/P_0\),因此直接加上这个 kick,不再除以 \(1+\delta\)。
只有傍轴近似下的斜率增量才满足 \(\Delta x'\simeq\Delta p_x/(1+\delta)\)。
正 z 表示更早通过。实际 bunch 参考通过时刻 bunch.t0 和连续的束内相对
坐标 p.z 决定实际到达时间;名义束团槽位位置不进入这个公式。
Excitation mode 选择波形求值时间:real_z 使用粒子实际到达时刻,
ideal_z 使用理想参考粒子到达时刻。
该模型不改变位置、dp、参考能量和 bunch.t0。
它描述理想横向激励,不包含完整时变电磁场的纵向感应项,因此不声称是完整的六维辛映射。
在右手 \((x,y,s)\) 坐标系中沿 \(+s\) 运动时,洛伦兹力给出 \(\theta_x=-q\int B_y ds/P_0\) 和 \(\theta_y=+q\int B_x ds/P_0\), 其中 \(q\) 是有符号粒子电荷。这些公式在固定参考动量下将物理磁场积分转换为输入振幅。 加速过程中固定的归一化输入不等于 固定的实验室磁场;这类计算需要显式给出适当的归一化幅度程序。
输入接口
配置模型为 PASS.para.schema.elements.ACDipoleItem,名称由
Sequence.add(name, item) 提供。所有数值都必须有限。
Python 字段 |
JSON 键 |
类型 |
单位 |
默认值 |
含义 |
|---|---|---|---|---|---|
|
|
|
m |
必填 |
作用位置。 |
|
|
|
m |
|
必须为零。 |
|
|
|
— |
必填 |
激励横向平面。 |
|
|
|
— |
|
激励工作模式:使用粒子实际 z,或仅在计算波形时取 z = 0。 |
|
|
|
rad |
必填 |
有符号归一化动量振幅。 |
|
|
|
s |
|
幅度采样时刻及有效时间区间。 |
|
|
|
Hz |
必填 |
非负载波频率,允许为零。 |
|
|
|
s |
|
独立的频率采样时刻。 |
|
|
|
rad |
|
相位原点时刻的载波相位。 |
|
|
|
s |
|
频率积分的下限。 |
|
|
|
— |
|
启用激励。 |
|
|
|
粒子数 |
|
每个 CPU 批次的最大粒子数,必须为正整数。 |
|
|
|
— |
|
同一位置命令的显式顺序。 |
|
|
|
— |
|
标准横向损失孔径。 |
|
|
|
m / rad |
|
标准孔径尺寸。 |
激励工作模式
省略 excitation_mode``(JSON ``Excitation mode)与显式填写 real_z 等价,
保持旧输入的行为。仅接受 real_z 和 ideal_z;空字符串、未知值或显式
null 均报错。命令日志显示实际生效的模式。
ideal_z 仅在计算激励时将 z 视为零,不修改存储的粒子坐标。
每个束团每次通过本元件时使用自己的 bunch.t0,不对所有束团共用一个值,
也不改用测量得到的纵向质心。相位、幅度和踢动有效时间窗口使用同一求值时间,
因此同一束团的所有存活粒子获得相同的规定归一化动量增量。
频率仍对物理时间积分,不会因选择此模式而逐圈重置相位。
该模式消除纵向到达偏移对激励的直接影响,其中也包括束团纵向质心偏移; 其他束流动力学继续保留。字段名、取值和默认值与 激励器(Exciter) 一致。
时间表与相位
每个提供的时间数组都必须非空且严格递增。包含多个数值的数组必须具有等长的对应时间数组, 采样点之间采用线性插值。标量或只有一个数值的数组表示常量,也可以同时指定时间采样点。
提供 Kick time (s) 时,首尾采样点构成的闭区间之外 kick 为零。
两个端点仍有效;单时间点区间仅在该时刻有效。不提供 kick 时间表时,标量幅度连续有效。
real_z 下每个粒子按自己的到达时刻判断有效区间,因此一个 bunch 可以跨越边界;
ideal_z 下整束团按 bunch.t0 统一判断。
频率表在区间外保持端点值,相位在所有频率节点及幅度边界处连续。
LinearProgram 精确积分每个线性频率段。在某一段内若
\(f(t)=f_a+\dot f(t-t_a)\),则
使用 \(2\pi f(t)(t-t_*)\) 会产生错误的扫频相位。 实现分别保留参考时刻和粒子时间偏移,并在计算正弦前按周期约化相位。 输入程序是不可变快照,修改波形需要重建命令。这里没有需要在新运行开始时恢复的逐圈相位累加状态。
CPU 和 CUDA 的波形中间量使用 float64,粒子数组保持配置的存储精度。 分别保留微小偏移可以避免将其直接加到大时间原点时丢失信息,但不能消除浮点输入 或局部相位乘积的舍入。时间与频率应处于有实际物理意义的范围,不能假定任意数量级 都保留任意相位精度。
CPU 分块大小
默认 CPU chunk size = 65536 每个 NumPy 批次处理至多 65,536 个粒子。
显式设为 None 时整束一次处理。正整数限制每批粒子数,从而约束临时数组内存。修改此参数
不改变粒子映射,也不会创建工作线程或将 bunch 分配到多个 CPU 核心;GPU 执行不受影响。
在实际服务器上,应使用代表性的粒子数和波形,测试例如 16,384、65,536、262,144、
1,048,576 粒子每块,必要时测试更大的块,并与 None 比较。更大内存允许更大的
数组,但更大的块也可能超过 CPU 缓存容量并增加内存访问量。核数、内存带宽和
NUMA 数据位置是不同因素;分块大小参数本身不提供多核或 NUMA 调度。应依据目标
服务器上测得的吞吐量与峰值内存选择,而不是套用另一台机器的计时结果。
固定频率光学测量示例
固定能量环中设 \(f_{\rm rev}=\beta_0c/C\),并使用
\(f_{\rm ac}=q_d f_{\rm rev}\)。需要选择实际物理激励频率所在的支路:
给 \(q_d\) 加整数时,单个理想参考粒子的逐圈取样相同,但其他 bunch 以及
real_z 下不同到达时刻的粒子所见相位一般不同。
以下例子假设 \(f_{\rm rev}=10^6\) Hz,且参考粒子首次通过元件的时刻为 \(t=0\)。 实际使用时替换为所配置环的规定时钟和首次通过时刻。
from PASS.para.schema import ACDipoleItem
f_rev = 1.0e6
first_passage_time = 0.0
ac = ACDipoleItem(
s=0.0,
direction="x",
excitation_mode="real_z",
kick_angle=[0.0, 1.0e-6, 1.0e-6, 0.0],
kick_times=[first_passage_time + n / f_rev for n in (0, 2000, 6000, 8000)],
frequency=0.31 * f_rev,
phase=0.0,
phase_epoch=first_passage_time,
)
sequence.add("ac_x", ac)
省略 excitation_mode 的结果相同。设为 excitation_mode="ideal_z" 时,
每个束团内统一使用其参考粒子的波形值。
测量平台期应选择与束流 tune 分布有间隔的激励 tune。幅度升降时间(以圈计)应明显长于 该 tune 间隔的倒数。在将受迫轨迹用于线性光学分析前,应检查关断后的自由振荡残余和 响应的幅度依赖。实正弦激励包含两个旋转分量,受迫光学需要考虑双边带响应,不能直接等同于自由 betatron 运动。 受迫响应的解释依据 R. Miyamoto 等人的 Parametrization of the Driven Betatron Oscillation,Phys. Rev. ST Accel. Beams 11, 084002 (2008)。
扫频时,可以将标量频率替换为 frequency=[0.30*f_rev, 0.32*f_rev],并设置
frequency_times=[first_passage_time, first_passage_time + 8000/f_rev]。
幅度程序保持原样。扫过束流 tune 分布的实验与稳态光学测量平台期属于不同的激励过程。
与 MAD-X 的比较
MAD-X TRACK 中的 HACDIPOLE/VACDIPOLE 按圈取样,FREQ 的单位是周/圈。
匹配参考粒子的采样值时使用 \(f_{\rm ac}=\mathtt{FREQ}\,f_{\rm rev}\),
振幅归一化采用 \(\theta_0=0.3\,\mathtt{VOLT}/\mathtt{PC}`(``PC`\) 单位 GeV/c)。
初相取 \(\phi_0=2\pi\,\mathtt{LAG}\)。MAD-X 将 START 状态输出为第零圈,
然后在第一圈施加首次 kick。该对照应使 PASS 在物理时刻 \(t_n=n/f_{\rm rev}\)
取样,并使用 Phase epoch (s) = 0;仅凭 PASS 圈数计数器不能确定这个时间原点。
若 RAMP1 至 RAMP4 严格递增,可将其除以 \(f_{\rm rev}\) 后作为 kick
采样时刻,振幅取 \([0,\theta_0,\theta_0,0]\)。
PASS 默认使用各粒子的实际物理到达时刻(real_z),ideal_z 则将参考取样值应用于整束团。
两种模式都支持连续频率程序。
MAD-X PTC 的 AC dipole 约定不同,不属于上述 TRACK 对应关系。
逐圈幅度升降参数及 TRACK 与 PTC 的差异见
MAD-X AC dipole 手册源码。