✨ 长期致力于腔体失效、高能传输线、高功率质子加速器、CiADS、ESS研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
如需沟通交流,点击《获取方式


(1)基于传输矩阵差异最小化的超导腔失效再匹配算法:

在高功率质子直线加速器中,单个超导腔失效会导致下游束流相位失配,造成束流损失。提出一种新的再匹配方法,以失效前与再匹配后的束流传输矩阵差异最小化为优化目标,而非传统的最小化束流包络差异。定义6x6传输矩阵M(从失效腔出口到下游某参考点),优化变量为下游腔体的射频幅值和相位。遗传算法中,适应度函数f = ||M_before - M_after||_F(Frobenius范数)。在ESS(欧洲散裂中子源)超导直线加速器(2GeV)的仿真中,模拟第15号超导腔(频率704MHz,梯度20MV/m)失效,使用所提算法调整后续8个腔体的幅值和相位,在零流强匹配下,再匹配后的Twiss参数与失效前偏差小于2%。多粒子跟踪(10万个宏粒子)显示,再匹配后最大束流损失从失效初期的87%降至0.1%以下,束流发射度增长仅3%。该算法在单腔失效情况下均有效,仅当连续两个相邻腔失效时,需要调高下游腔体梯度上限至110%才能完全补偿。

(2)高能传输线上束流扫描与束损控制策略:

高能传输线(HEBT)中束流扫描装置(二极磁铁)的误差会导致束流在靶窗上产生局部热点。提出一种快速评估束损的扫描因子SF,定义为束流在靶窗上的电流密度峰值与平均值的比值乘以束流脉冲宽度。通过响应面法建立SF与二极铁剩磁、四极铁安装误差之间的二阶多项式模型。在CiADS(500MeV)HEBT设计中,偏转段采用消色散结构,二极铁剩余磁场控制在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_cavities=20, beam_energy=2000):
        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_idx+1, self.n)):
            new_voltages[idx] = abs(x[2*i])
            new_phases[idx] = x[2*i+1]
        M_new = self.transfer_matrix(fail_idx+1, self.n, new_voltages, new_phases)
        return norm(M_new - ref_M, 'fro')

    def optimize(self, fail_idx):
        ref_M = self.transfer_matrix(fail_idx+1, 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, disp=False)
        return result.x

class BeamScanner:
    def __init__(self, target_radius=200):
        self.R = target_radius

    def hollow_spiral_scan(self, t, T=1.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_bins=20):
        hist, _ = np.histogramdd(points, bins=n_bins)
        non_zero = hist[hist>0]
        peak = np.max(hist) / np.mean(hist)
        return peak

class HEBTDesign:
    def __init__(self, energy=500e6, current=5e-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_cavities=10)
    opt_vars = rematcher.optimize(fail_idx=4)
    print(f'Optimized voltages/phases: {opt_vars[:4]}')
    scanner = BeamScanner()
    t = np.linspace(0, 0.04, 1000)
    x_scan, y_scan = scanner.hollow_spiral_scan(t, T=0.04)
    uniform_ratio = scanner.uniform_metric(np.vstack([x_scan, y_scan]).T)
    print(f'Uniformity peak/mean ratio: {uniform_ratio:.2f}')

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐