静电偏转器(ElSeparator)

PASS.commands.element.elseparator.ElSeparator 描述具有循环束无场区、 薄隔板、有场区和高压电极的静电偏转元件,注册命令为 ElSeparator。 CPU/GPU 对正长度使用相对论均匀静电场解析本体映射和硬边电势匹配, 对零长度使用按各粒子入口纵向速度计算的一次等效冲量。进入有场区本身不代表损失;通过 ES 的存活粒子继续进入下游晶格, 由后续实际孔径决定是否以及在哪里损失。

以下接口中的字段用于 PASS.para.schema.elements.ElSeparatorItem 配置类; 元件名称由 Sequence.add(name, item) 的序列键给出,不是配置类字段。

输入参数

Python 配置字段

JSON 键

类型

单位

默认值

说明

s

S (m)

float

m

必填

元件出口或零长度作用点的纵向位置。

length

Length (m)

float

m

0.0

非负给定长度,不随倾角缩放。

voltage

V (V)

float | None

V

None

有符号极板间电压差,与 VL 二选一;非零 V 要求正长度。

voltage_length

VL (V m)

float | None

V m

None

有符号电压差沿纵向的积分,支持正长度和零长度。

gap

Gap (m)

float

m

必填

正的电极净间隙。

septum_position

Septum position (m)

float

m

必填

沿 u 方向靠循环束无场区的表面 d。

septum_thickness

Septum thickness (m)

float

m

0.0

非负有效材料厚度。

tilt

Tilt (rad)

float

rad

0.0

按上述投影与冲量公式定义的倾角。

aperture_type

Aperture type

str

—

'off'

已有真空孔径几何。

aperture_value

Aperture value

list

m / rad

[]

已有真空孔径几何。

num_slices

Num slices

int

1

1

严格正整数,设置内部 SC 调度;孤立解析本体不依赖细分。

space_charge

Space charge

ElementSpaceCharge | None

—

None

可选内部 SC 配置,要求正长度。

输入配置

根据所模拟装置指定 V 或 VL、间隙和隔板几何。以下人为示例采用手动多边形, 规定 -0.05 < x < 0.0201、|y| < 0.02,内部 septum 仍吸收粒子。 使用时应替换为装置对应的数值;每次通过使用同一个给定强度输入。

{
  "Command": "ElSeparator",
  "S (m)": 1.0,
  "Length (m)": 1.0,
  "V (V)": 1000.0,
  "Gap (m)": 0.01,
  "Septum position (m)": 0.01,
  "Septum thickness (m)": 0.0001,
  "Tilt (rad)": 0.0,
  "Num slices": 16,
  "Aperture type": "polygon",
  "Aperture value": [[-0.05, -0.02], [0.0201, -0.02], [0.0201, 0.02], [-0.05, 0.02]]
}

对这个 1 m 元件,把 V (V) 替换为 "VL (V m)": 1000.0,积分强度相同。 若还把 Length (m) 改为 0,则在 S=1 m 处使用薄模型:对截面内有场区的 存活粒子施加相同输入积分强度对应的等效冲量,但不产生有限长度模型的横向位移和飞行时间。 例如 (x,y)=(0.005,0) 存活且不受场,(0.01005,0) 在 septum 材料内损失, (0.015,0) 通过入口检查并受到电场冲量。

注入时序见 多圈注入与横向涂抹。在 ES 出口给定的新粒子从该平面 开始跟踪。Injection 生成或加载坐标,不额外施加几何接受截断; 粒子随后实际通过 ElSeparator 时,由该元件按有限长度或薄模型计算偏转和损失。

长度、倾角和时间

Length (m) 是用户给定的纵向跟踪长度 L。S (m) 是出口,入口为 S-L。 Tilt (rad) 是绕纵向轴的横截面旋转,不是元件轴线的俯仰或偏航。 传播、场积分、损失位置和参考时间均不乘除 cos(tilt)。 水平、垂直和倾斜 ES 使用同一套实现。

沿用当前 PASS 的倾角约定,只计算临时几何坐标:

\[u=x\cos\theta-y\sin\theta,\qquad v=x\sin\theta+y\cos\theta.\]

粒子数组始终保存在束流坐标系。局部法向冲量直接分解为

\[\Delta p_x=K_u\cos\theta,\qquad \Delta p_y=-K_u\sin\theta.\]

tilt=0 对应水平,tilt=+/-pi/2 对应垂直;电压及电荷符号决定偏转极性。 倾角加 pi 会反转几何法向。隔板位置的正负不再单独决定有场侧。

每个参考传播子段 ds(包括空束团)更新

\[t_0\leftarrow t_0+\frac{ds}{\beta_0 c},\qquad z_{\mathrm{rel}}=\beta_0c(t_0-t_i).\]

设计参考时钟保持无场参考通过时间约定;有场粒子的实际飞行时间由电场解析映射计算, 循环束无场区则使用标准漂移, 没有额外倾角时间修正或到达修正状态。零长度实例在所在截面检查几何与动量, 对有场区内的存活粒子施加 VL 冲量,再检查冲量后的动量有效性。 x、y、z 和参考时间均不变。它不能判断被省略的真实长度内部的碰撞; 要分辨这些轨迹和损失位置,应使用有限长度模型。 Num slices 不会重复薄冲量,内部空间电荷仍要求正长度。

几何和电压

记 d 为 Septum position (m),t 为 Septum thickness (m), g 为 Gap (m),高压电极内表面为 uc=d+t+g。 这些位置相对于参考轨道,不是环的几何中心。对于任意局部 v,各区域为:

  • 循环束无场区:u < d;

  • septum 材料区:d <= u <= d+t;

  • 有场区:d+t < u < uc;

  • 高压电极材料区:u >= uc。

电极表面属于吸收材料边界。 厚度为零的隔板仍是闭合平面,接触或穿越都会判损。 这是有效材料吸收模型,不是离散丝阵列或多重散射模拟。

入口接触判定允许坐标存储和旋转的舍入误差:离材料表面不超过 4*epsilon*(abs(x*cos(tilt))+abs(y*sin(tilt))) 时视为接触, epsilon 为粒子数据类型的机器精度。这避免零厚度 septum 上的粒子因浮点误差漏判。 未来直线交点仍使用输入的实际表面位置,不平移材料边界。

电极和有场区理想化为覆盖任意局部 v。另一侧管壁及横向净空由独立真空孔径描述, 可用手动多边形给出沿 v 对称的限制。这假设模拟接受范围处于电极的有效覆盖范围, 不模拟有限高度的边缘场。多边形是外部接受边界,不能代替内部 septum 材料。 Aperture type: off 只关闭外围真空孔径检查,不关闭电极碰撞判定。

V (V) 定义为隔板电势减去高压电极电势。 VL (V m) 是该电压差沿纵向的积分,不是积分电场:

\[V=\phi_{\mathrm{septum}}-\phi_{\mathrm{HV}},\qquad VL=\int V(s)\,ds,\qquad \int E_u(s)\,ds=\frac{VL}{g}.\]

有限长度均匀场模型中,输入 V 时 Eu=V/g、VL=V*L;输入 VL 时 Eu=VL/(g*L)。 零长度模型中,VL 是独立输入的真实装置积分强度,不因跟踪长度为零而变为零。 零长度的等效归一化冲量为

\[K_u=\operatorname{sgn}(q)\frac{VL/g}{\beta_0 c B\rho} \frac{A}{p_s},\qquad A=\sqrt{\gamma_0^{-2}+\beta_0^2(1+\delta)^2},\qquad p_s=\sqrt{(1+\delta)^2-p_x^2-p_y^2}.\]

其中 beta0*c*ps/A 是入口纵向速度。集中冲量期间冻结用于计算冲量的入口状态, 保持 dp 不变,因此它不是有限电极的完整映射。PASS 保存 px=Px/P0、py=Py/P0, 冲量是归一化机械动量增量,不是角度;不要再额外除以 (1+delta)。 有限长度采用下述能量自洽的映射。

PASS 保存正的参考刚度幅值,冲量显式包含电荷符号。 每次执行读取当前束团的 beta 和刚度,RF 通过 set_reference_energy 更新这些量。因此加速过程中恒定电压不意味着恒定归一化冲量。

V 与 VL 必须恰好有一个非 null,零值合法,同时给出或均未给出都会报错。 零长度时非零 V 报错并提示改用 VL;V=0 可用于纯几何检查。 两种输入都必须给出 Gap 和 Septum position。 旧 Voltage (V)、电极高度/中心及 EX/EY/EXL/EYL 字段均不接受。 零强度时仍检查材料和真空孔径。

传播与碰撞

septum 和外部无场区电势为零。记 uf=d+t,有场区本体电势为 Phi=-Eu*(u-uf),高压电极电势为 -V。令 W=energy/(P0*c)、mu=mc/P0、 k=q*Eu/(P0*c)。入口将机械能改为 W+k*(u-uf),出口减去 k*(u-uf), 横向动量和坐标在边界匹配中不变。这表示理想零宽度纵向边缘冲量, 不是实测边缘场分布。

均匀本体中 ps、pv 不变。对正向距离 ds,令 a=k*ds/ps,解析映射为

\[ \begin{align}\begin{aligned}p_{u,2}=p_{u,1}\cosh a+W_1\sinh a,\qquad W_2=W_1\cosh a+p_{u,1}\sinh a,\\u_2=u_1+\frac{W_2-W_1}{k},\qquad v_2=v_1+\frac{p_v}{p_s}ds,\qquad c\Delta t=\frac{p_{u,2}-p_{u,1}}{k},\\\delta_2=\sqrt{W_2^2-\mu^2}-1,\qquad z_2=z_1+ds-\beta_0c\Delta t.\end{aligned}\end{align} \]

实现使用稳定增量和零场极限,避免直接相减接近的双曲函数。 接近零时使用短级数是浮点求值方法,不是近轴物理近似。 没有其它改变能量的作用时,穿过完整静态元件的存活粒子恢复入口机械能。 若在入口或出口不能保持正向纵向动量,则在该边界移出正向跟踪; 这种情况不代表撞上材料。

入口、出口匹配各执行一次,不在内部切片或 SC 节点重复执行。 中心 SC 回调在前半本体片之后执行,边界回调在整片之后执行; 两者都获得对应的设计参考时刻和束流坐标系中的机械动量。 循环束无场区的存活粒子也参与 SC。位置和权重见 元件切片与内部空间电荷。 无内部 SC 时一次解析本体传播即可,Num slices 不改变外场结果; 有 SC 时仍需检验分裂集体映射的收敛。

电极交点由本体能量与位置关系求解,保留两个动量分支以覆盖转向和擦边接触。 真空管壁采用解析曲线的保守区间界限寻找首次接触,线性函数和坐标极值包含 区间内转向点,椭圆界限覆盖整个区间,因此不会仅因两个端点都在孔径内而漏掉 非凸孔径的中途越界。候选接触区间在纵向缩小到 1e-12*max(1, 子段长度) 米,同时使用按几何尺度缩放的 64 倍双精度 epsilon 容差。 在擦边情况下,空间容差可能对应更大的纵向接触位置不确定度。 损失位置仍存储在现有 float32 数组。无场运动继续使用解析直线交点。

粒子停在首次接触处,保留该点的机械状态;在本体内损失的粒子不再接受出口匹配。 后续调用保留首次损失记录,材料与管壁竞争最早接触。 已有孔径 off、default、rectangle、circle、ellipse、rectcircle、rectellipse、 racetrack、octagon、polygon 均保留,孔径位于束流坐标系。 Tilt 旋转电极和电场,不旋转单独输入的真空室。

如果手动输入的多边形先在局部坐标中定义,需要逐个顶点转换到束流坐标:

\[x=u\cos\theta+v\sin\theta,\qquad y=-u\sin\theta+v\cos\theta.\]

顶点应按边界顺序输入,不需要重复首点闭合。自交、非相邻边接触、重复顶点及 孔径尺寸格式错误,在 schema 校验和完整输入预检中都会报错。

Tilt=0 时高压电极位于 +x 一侧,Tilt=pi 时布局反向。 改变电压符号只改变受力方向,不改变电极几何。

漂移与近似范围

ES 与 漂移节(Drift) 共享 CPU 漂移因子及 CUDA 内联漂移函数。 令 T=px^2+py^2、ps=sqrt((1+delta)^2-T),定义

\[A=\sqrt{\gamma_0^{-2}+(1-\gamma_0^{-2})(1+\delta)^2}, \qquad \frac{\Delta z}{ds}= \frac{\delta(2+\delta)\gamma_0^{-2}-T}{p_s(p_s+A)}.\]

该有理化形式保留单精度中的微小纵向滑移。 非正总动量、非正纵向动量和非有限纵向动量判为无效; 不再人为抬高正的纵向动量。跟踪不会折叠存储的 z 坐标。

有限长度映射在给定的理想均匀本体和硬边模型内不作小角度展开, 精度仍受浮点运算和碰撞定位容差限制。它没有三维边缘场图、有限高度场、 离散丝结构、材料散射或次级粒子。薄模型还省略实际本体轨迹、能量交换和通过时间变化, 集中冲量期间冻结入口纵向速度,不宣称它是有限硬边模型的严格 L 趋零极限。

CPU 和 CUDA 实现在同一源文件中。GPU 的解析场轨迹和曲线碰撞界限使用双精度, 粒子数组保持选定的 float32 或 float64 存储。内部 SC 节点写回粒子状态, 每个元件按设备和数据类型缓存编译内核,不原地旋转坐标数组。

没有内部 SC 节点时,厚元件 GPU 跟踪将入口、本体和出口合并为一次内核调用。 场外粒子使用精确直线轨迹和连续的材料、孔径检查,并在存储舍入后再次检查终点。 存活的场外轨迹若进入间隙,必先接触吸收电极。场内粒子保留解析硬边各阶段及 各阶段对应的存储精度舍入。存在内部 SC 节点时仍分段跟踪,使空间电荷冲量作用于中间状态。