欢迎光临散文网 会员登陆 & 注册

二维无质量 Dirac 型粒子的相关代码

2022-11-10 21:27 作者:湛蓝色的彼岸花  | 我要投稿

二维无质量 Dirac 型粒子相关模拟。


L = 20; % Interval Length


N = 600; % 设置 N*N 格点


x = linspace(-L/2,L/2-L/N,N)'; % Coordinate vector


dx = x(2) - x(1); % Coordinate step


NT = 50000; % No. of time steps


TF = 50; T = linspace(0,TF,NT); % Time vector


dT = T(2)-T(1); % Time step

%**************************

% 设置势能

% 可按需调整

[X,Y]=meshgrid(x,x);

V=150; 

lth = 2;

Ub = V*heaviside(X).*heaviside(lth-X);

% Ub = V*exp(-X.^2/lth^2);

UVh = exp(-1i*Ub*dT/2);


% 动量相关

v0 = 10; % 无质量Dirac粒子的速度

e1 = ones(N,1); 

K = [2*pi*(-N/2:-1)/L,2*pi*(0:N/2-1)/L]; % 动量范围

Kx = kron(K,e1);

Ky = Kx';

Ka = sqrt(Kx.^2+Ky.^2);

ThK = angle(Kx+1i*Ky);

%**************************

% 初态设置

ao = 1.8;% 控制动量空间波包大小

% 动量中心

ko = 12;

Th = 0;

kxo = ko*cos(Th);

kyo = ko*sin(Th);


% 位矢中心

xo = -2.5;

yo = 0;


% first component in k space

psi01 = exp(-((Kx-kxo).^2+100*(Ky-kyo).^2)/(ao^2))...

    .*exp(-1i*(xo*Kx+yo*Ky)).*(cos(ThK)-1i*sin(ThK))/sqrt(2);

% second component

psi02 = exp(-((Kx-kxo).^2+100*(Ky-kyo).^2)/(ao^2))...

    .*exp(-1i*(xo*Kx+yo*Ky)).*1/sqrt(2);

% 位矢空间波函数,未归一

psi0 = [reshape( fftshift(ifft2(fftshift(psi01))),N*N,1 )...

    ;reshape( fftshift(ifft2( fftshift(psi02) )),N*N,1)];


psi0 = psi0/sqrt(psi0'*psi0); %归一化

% 初态的双分量位矢空间波函数

psi21 = reshape(psi0(1:end/2),N,N);

psi22 = reshape(psi0(0.5*end+1:end),[N,N]);

%**************************

% 时间演化和画图

%建立figure和axes

fig=figure;

fig.Position = [0 0 2000 1000];

ax = axes(fig);


h = 20e-5; % z轴相关尺度

xlim manual

ylim manual

zlim manual

%关于颜色

CO1=zeros(N,N,3);

CO1(:,:,1) = 0.2*ones(N,N);

CO1(:,:,3) = 0.75*ones(N,N);


CO2 = CO1;

CO2(:,:,3) = 1*ones(N,N);

%相位平面位置

Z0 = -1.5*h*ones(N,N);


for t = 1:NT

%时间演化,Strang 方法

    psi21 = full(UVh.*psi21);

    psi22 = full(UVh.*psi22);


    psik1 = fftshift(fft2(psi21));

    psik2 = fftshift(fft2(psi22));

    

    psik10 = psik1;

    psik1 = cos(Ka*v0*dT).*psik1-1i*exp(-1i*ThK).*sin(Ka*v0*dT).*psik2;

    psik2 = cos(Ka*v0*dT).*psik2-1i*exp(1i*ThK).*sin(Ka*v0*dT).*psik10;

    

    psi21 = full(ifft2(ifftshift(psik1)));

    psi22 = full(ifft2(ifftshift(psik2)));

    

    psi21 = full(UVh.*psi21);

    psi22 = full(UVh.*psi22);

%以上是一步(时间间隔为 dT)的时间演化


    % 每隔10步画图

    if rem(t,10)

        if t~=1

            continue

        end

    end


    rho1 = (abs(psi21).^2); % 第一个分量的密度

% rgb颜色,常数项是本底颜色,根号项凸显小振幅,一次和平方项给大振幅产生颜色渐变

    CO1(:,:,1) = 0.2*ones(N,N)+10*ones(N,N).*sqrt(rho1/h)./((1+50*rho1/h));

    CO1(:,:,2) = 15*ones(N,N).*rho1/h;

    CO1(:,:,3) = 0.75*ones(N,N)+ones(N,N).*rho1.^2/h^2;

    s01 = surf(ax,x,x,rho1+0.1*h,CO1,'FaceAlpha',0.4); 

    shading interp

    s01.EdgeColor = 'none';

    

    zlim(ax,[-1.5*h 2.1*h]);

    xlim(ax,[-0.5*L 0.5*L]);

    ylim(ax,[-0.5*L 0.5*L]);

    

    hold on

    rho2 = (abs(psi22).^2); % 第二个分量的密度

    CO2(:,:,1) = 0.2*ones(N,N)+10*ones(N,N).*sqrt(rho2/h)./((1+50*rho2/h));

    CO2(:,:,2) = 15*ones(N,N).*rho2/h;

    CO2(:,:,3) = 1*ones(N,N)+ones(N,N).*rho2.^2/h^2;

    s02 = surf(ax,x,x,-rho2-0.1*h,1-CO2,'FaceAlpha',0.4); 

    shading interp

    s02.EdgeColor = 'none';

    

    text(ax,-0.4*L,0.4*L,2.1*h,...

        ['$T=',num2str(dT*t,'%.2f'),'$'],...

        'Interpreter','latex','FontSize',20); %时间

    

    text(ax,0.35*L,0.35*L,2.05*h,'方势垒高 ','FontSize',20);

    text(ax,0.4*L,0.4*L,1.75*h,...

        ['$V=',num2str(V,'%.1f'),'$'],...

        'Interpreter','latex','FontSize',20);

        

%势能伪色图

    imagesc(ax,[-0.5*L,0.5*L],[-0.5*L,0.5*L],...

        h*Ub,'AlphaData',0.1);

    

%显示相位,阈值是0.0001*h,可按需调整

        phase1 = ...

        h*angle(psi21).*heaviside(rho1-0.0001*h);

        phase2 = ...

        h*angle(psi22).*heaviside(rho2-0.0001*h);


    Ph1 = surf(ax,x,x,-Z0,phase1,'FaceAlpha',0.3);

    shading interp

    Ph1.EdgeColor = 'none';

    

    Ph2 = surf(ax,x,x,Z0,phase2,'FaceAlpha',0.3);

    shading interp

    Ph2.EdgeColor = 'none';


    hold off

    % 颜色轴和三维视图设置

    colormap(hsv)

    caxis([-pi*h pi*h])

    pbaspect([1 1 0.5]);

    campos([-15 -32 2.2*h])

    camtarget([0 0 0.3*h])

    camva(20)

%立刻作图

    drawnow


end


二维无质量 Dirac 型粒子的相关代码的评论 (共 条)

分享到微博请遵守国家法律