|

氢离子在托卡马克装置的轨迹模拟

目录
    本文上次更新于 1556 天前,其内容可能已经过时,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

    系统:Windows 10 专业版 1903
    matlab版本:Windows版 2018a

    使用说明

    详细的推导过程见这篇文章, 程序需要用到这篇文章中的 Tokamak_Magnetic.m 程序 , Plot_Plasma_Shape.m 为画圆截面等离子形状, Orbit_Boris.m 为模拟氢离子在托卡马克装置的运动。更改初始位置和速度即可模拟粒子运动轨迹,采用的Boris方法,程序运行比较久(几十分钟到几个小时),这跟你取的初始位置和速度有关,也可以减少程序中的n。

    程序

    Plot_Plasma_Shape.m

    function Plot_Plasma_Shape(R0,a)
    [u,v]=meshgrid(0:2*pi/50:2*pi,0:2*pi/50:1.5*pi);
    X=(R0+a.*cos(u)).*cos(v); Y=(R0+a.*cos(u)).*sin(v);
    Z=a*sin(u); mesh(X,Y,Z);axis equal;hidden off;colormap([0 1 1]);
    xlabel('x');ylabel('y');zlabel('z');axis tight;
    set(gca,'FontSize',20);
    end

    Orbit_Boris.m

    tic;clc;clear
    %choice=1,托卡马克(采用HL-2M)中氢离子运动,2:磁镜中氢离子运动
    %需要注意初始位置和速度,r0:初始位置,v0:初始速度
    %dt:时间步长,n:步数
    choice=2;
    if choice ==2
            c0=2e-7;R=0.2;I=1e6;L=2;
    end
    dt=1e-10;n=70000;
    q=1.6e-19;m=1.6726231e-27;
    r0=[0 2.2 0];v0=[0.5e7 sqrt(3)/2*1e7 0 ];
    %r0=[0 0.00075 -1];v0=[0 sqrt(2)/2*1e6 sqrt(2)/2*1e5];磁镜
    r(1,:)=r0;x=r(1,1);y=r(1,2);z=r(1,3);v(1,:)=v0;
    %Boris算法实现步骤
    for i=1:n
        v_minus=v(i,:);
        switch choice
            case 1
                [Bx,By,Bz]=Tokamak_Magnetic(r(i,1),r(i,2),r(i,3),3);   %3:HL-2M
                %如果能准备的给出安全因子的分布的表达式,速度可能会提高百倍。
               %[Bx,By,Bz]=Tokamak_Magnetic_S(r(i,1),r(i,2),r(i,3));
            case 2
                [Bx1,By1,Bz1]=magnetic(c0,R,I,r(i,1),r(i,2),r(i,3)+L/2);
                [Bx2,By2,Bz2]=magnetic(c0,R,I,r(i,1),r(i,2),r(i,3)-L/2);
                Bx=Bx1+Bx2;By=By1+By2;Bz=Bz1+Bz2;
        end
        B=[Bx By Bz];
        T=0.5*q*dt./m*B;
        S=2/(1+norm(T)^2)*T;
        v_zero=v_minus+cross(v_minus,T);
        v_plus=v_minus+cross(v_zero,S);
        v(i+1,:)=v_plus;
        r(i+1,:)=r(i,:)+v(i+1,:)*dt;
        p(i)=i;
    end
    
    %作图
    figure(1)
    plot3(r(:,1),r(:,2),r(:,3));hold on;
    time=datestr(now,30);
    if choice ==1
        R0=1.78;a=0.65; 
        Plot_Plasma_Shape(R0,a)
        savefig([num2str(r0),'_',num2str(v0),'_',time,'_','.fig']);
        figure(2);R0=1.78;b=sqrt(r(:,1).^2+r(:,2).^2);
        plot(b,r(:,3));
        xlabel('rho');ylabel('z');set(gca,'FontSize',20);
        axis equal
        savefig([num2str(r0),'_',num2str(v0),'_',time,'_r_z_','.fig']);
    end
    if choice==2
        savefig([num2str(r0),'_',num2str(v0),'_mirror_',time,'_.fig']);
    end
    % figure(3)  %能量守恒较好
    % p(i+1)=i+1;
    % plot(p*dt,sqrt(v(:,1).^2+v(:,2).^2+v(:,3).^2));
    %set(gca,'FontSize',20);xlabel('t');ylabel('v');
    toc

    通行粒子轨迹和极向投影(模拟的HL-2M中的氢离子)

    捕获粒子及其极向投影

    源码

    欢迎转载,不需注明出处,就说是你写的

    如果在这个过程中遇到了其它问题,欢迎在评论区留言,如果你已解决,也欢迎把具体的解决方法留在评论区,以供后来者参考
    ×

    感谢您的支持,请扫码打赏

    微信打赏 支付宝打赏
    guest
    3 评论
    内联反馈
    查看所有评论
    Goudsmit

    感谢作者,我真的很喜欢您最后那一句话

    Goudsmit

    噩耗来了,2023版好像运行不了了