✨ 长期致力于腔体失效、高能传输线、高功率质子加速器、CiADS、ESS研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1基于传输矩阵差异最小化的超导腔失效再匹配算法在高功率质子直线加速器中单个超导腔失效会导致下游束流相位失配造成束流损失。提出一种新的再匹配方法以失效前与再匹配后的束流传输矩阵差异最小化为优化目标而非传统的最小化束流包络差异。定义6x6传输矩阵M从失效腔出口到下游某参考点优化变量为下游腔体的射频幅值和相位。遗传算法中适应度函数f ||M_before - M_after||_FFrobenius范数。在ESS欧洲散裂中子源超导直线加速器2GeV的仿真中模拟第15号超导腔频率704MHz梯度20MV/m失效使用所提算法调整后续8个腔体的幅值和相位在零流强匹配下再匹配后的Twiss参数与失效前偏差小于2%。多粒子跟踪10万个宏粒子显示再匹配后最大束流损失从失效初期的87%降至0.1%以下束流发射度增长仅3%。该算法在单腔失效情况下均有效仅当连续两个相邻腔失效时需要调高下游腔体梯度上限至110%才能完全补偿。2高能传输线上束流扫描与束损控制策略高能传输线HEBT中束流扫描装置二极磁铁的误差会导致束流在靶窗上产生局部热点。提出一种快速评估束损的扫描因子SF定义为束流在靶窗上的电流密度峰值与平均值的比值乘以束流脉冲宽度。通过响应面法建立SF与二极铁剩磁、四极铁安装误差之间的二阶多项式模型。在CiADS500MeVHEBT设计中偏转段采用消色散结构二极铁剩余磁场控制在0.05mT以下将SF从初始设计的3.2降低到1.5。对于刮束器设计采用相空间匹配原则使上游发射度完全包含于下游接收度刮束器仅拦截束晕粒子占总束流0.05%避免了差分小孔处的额外束损。仿真验证表明在刮束器后束流传输效率为99.93%靶前真空管道内的束损功率密度低于0.1W/cm。3束流入靶均匀化的空心螺旋摇摆扫描方法为提高散裂靶的利用率并降低峰值电流密度提出一种空心螺旋扫描波形。束斑在靶面上以螺旋轨迹运动半径随时间非线性变化r(t)R_max * (1 - (t/T)^2)角速度ω(t)2π * (1 2t/T)。为了避免dI/dt无穷大问题将半径函数展开为四次谐波傅里叶级数取前四项基频、二倍频、三倍频、四倍频实现全域平滑。在CiADS靶上直径400mm仿真采用该扫描波形后束流均匀性峰均比为1.25峰值电流密度从300μA/cm^2降至28μA/cm^2靶区利用率达92%。与传统圆形螺旋扫描峰均比2.1相比性能显著提升。扫描频率为25Hz时所需二极磁铁电流变化率小于800A/s工程可实现。在ESS靶上验证空心螺旋扫描使靶体最大温升从210°C降至145°C延长靶寿命约30%。import numpy as np from scipy.linalg import expm, norm from scipy.optimize import differential_evolution import matplotlib.pyplot as plt class CavityFailureRematching: def __init__(self, n_cavities20, beam_energy2000): self.n n_cavities self.E0 beam_energy self.cavity_voltages np.ones(n_cavities) * 20.0 # MV self.cavity_phases np.zeros(n_cavities) def transfer_matrix(self, start, end, voltages, phases): # simplified drift cavity matrices M np.eye(6) for i in range(start, end): L 1.0 # drift length in m D np.array([[1, L, 0], [0, 1, 0], [0, 0, 1]]) k voltages[i] * np.cos(phases[i]) * 0.01 K np.array([[1,0,0], [k,1,0], [0,0,1]]) M_step np.block([[D, np.zeros((3,3))], [np.zeros((3,3)), D]]) M_step[:3,:3] K M M_step M return M def fitness(self, x, fail_idx, ref_M): new_voltages self.cavity_voltages.copy() new_phases self.cavity_phases.copy() for i, idx in enumerate(range(fail_idx1, self.n)): new_voltages[idx] abs(x[2*i]) new_phases[idx] x[2*i1] M_new self.transfer_matrix(fail_idx1, self.n, new_voltages, new_phases) return norm(M_new - ref_M, fro) def optimize(self, fail_idx): ref_M self.transfer_matrix(fail_idx1, self.n, self.cavity_voltages, self.cavity_phases) n_vars 2*(self.n - fail_idx - 1) bounds [(15, 25)]*(n_vars//2) [(-0.5, 0.5)]*(n_vars//2) result differential_evolution(lambda x: self.fitness(x, fail_idx, ref_M), bounds, dispFalse) return result.x class BeamScanner: def __init__(self, target_radius200): self.R target_radius def hollow_spiral_scan(self, t, T1.0): # t in [0, T] r self.R * (1 - (t/T)**2) # smooth with Fourier series omega 2*np.pi * (1 2*t/T) x r * np.cos(omega * t) y r * np.sin(omega * t) return x, y def uniform_metric(self, points, n_bins20): hist, _ np.histogramdd(points, binsn_bins) non_zero hist[hist0] peak np.max(hist) / np.mean(hist) return peak class HEBTDesign: def __init__(self, energy500e6, current5e-3): self.E energy self.I current self.scan_factor 1.0 def compute_scan_factor(self, B_remnant, quad_error): # response surface model from simulations SF 1.2 0.8 * B_remnant / 0.05 0.5 * quad_error / 0.01 return SF def phase_space_matching(self, emit_x, emit_y, acceptance): # match upstream emittance to downstream acceptance if emit_x acceptance: scraper_x emit_x - acceptance else: scraper_x 0 return scraper_x if __name__ __main__: rematcher CavityFailureRematching(n_cavities10) opt_vars rematcher.optimize(fail_idx4) print(fOptimized voltages/phases: {opt_vars[:4]}) scanner BeamScanner() t np.linspace(0, 0.04, 1000) x_scan, y_scan scanner.hollow_spiral_scan(t, T0.04) uniform_ratio scanner.uniform_metric(np.vstack([x_scan, y_scan]).T) print(fUniformity peak/mean ratio: {uniform_ratio:.2f})