2d_te.m

来自「二维波导中计算反射系数」· M 代码 · 共 198 行

M
198
字号
clear all;
clc;

dx=1.5e-2;
dy=dx;
dt=1.81e-11;       

%NX=52;
%NY=7;
for i=1:53
    for j=1:8
        ex(i,j)=0.0;
        D(i,j)=0.0;
        ey(i,j)=0.0;
        hz(i,j)=0.0;
    end
end
%initial field points

eps0=8.85e-12;
mu0=1.2566e-006;%H/m
c=3e8;%m/s
sigma=0.0; 

%free space parameter
m=1;
d=8;  % thickness of PML layer 
R0=1e-8;  %Page167
sigmax=log(R0).*(m+1).*eps0.*c;
sigmax=-0.8.*sigmax./(2.*8.*dx);
for i=1:9
    sigex(i)=sigmax.*(((d+1-0.5-i)/(d-0.5)).^m);
    sighz(i)=sigex(i);
    sigey(i)=sigmax.*(((d+1-i)/d).^m);
end
    sigex(9)=0.0;
    sighz(9)=0.0;
    epsr=1.0;

    for i=1:51                   
    epsrx(i)=1.0;
    epsry(i)=1.0;
end


%epsry(30)=2.5;   
%epsry(40)=2.5;
%for i=31:39
%    epsrx(i)=4.0;
%    epsry(i)=4.0;
%end

%Add the substrate


f=3e9;          %define the source: Gauss Pulse
tao=2./3e9;
tao=tao./dt;
for i=1:400
    if i<60
        source(i)=exp(-4.*pi.*((i-0.8.*tao).^2)./(tao.*tao));
    else source(i)=0.0;
    end
end 
%plot((1:400),source);

%main loop
for n=1:400
    %free space

    for i=10:43
        for j=3:6 %先不算PEC boundary
            ex(i,j) =  ex(i,j)+(hz(i,j)-hz(i,j-1)).*dt.*c./(dy*epsrx(i));
        end
    end
    for i=11:43
        for j=2:6
            ey(i,j) =  ey(i,j)-(hz(i,j)-hz(i-1,j)).*dt.*c./(dx*epsry(i));
        end
    end
    for i=10:43
        for j=2:6
            hz(i,j) =  hz(i,j)+((ex(i,j+1)-ex(i,j))-(ey(i+1,j)-ey(i,j))).*dt.*c/(dx);
        end
    end
    %pec boudary
    for i=2:51 %10:43
            ex(i,2)=0.0;
            ex(i,7)=0.0;
    end

    %pml boundary
    for i=2:10
        temp=sigey(i-1)*dt/(2*eps0);
        for j=2:6
            ey(i,j)=((1-temp)./(1+temp)).*ey(i,j)-(hz(i,j)-hz(i-1,j)).*dt.*c./(dx.*(1+temp));
        end
    end
    for i=44:52
        temp=sigey(52+1-i)*dt/(2*eps0);
        for j=2:6           
            ey(i,j)=((1-temp)./(1+temp)).*ey(i,j)-(hz(i,j)-hz(i-1,j)).*dt.*c./(dx.*(1+temp));
        end
    end
    %ey
    for i=2:9
        temp=sigex(i-1)*dt/(2*eps0);
        for j=3:6 %未算pec边界处ex值
            temp_D=D(i,j);
            D(i,j)=D(i,j)+(hz(i,j)-hz(i,j-1)).*dt.*c./(dy);  
            ex(i,j)=ex(i,j)+((1+temp).*D(i,j)-(1-temp).*temp_D);
        end
    end
    for i=44:51
        temp=sigex(52-i)*dt/(2*eps0);
        for j=3:6 %2:7
            temp_D=D(i,j);
            D(i,j)=D(i,j)+(hz(i,j)-hz(i,j-1)).*dt.*c./(dy);
            ex(i,j)=ex(i,j)+((1+temp).*D(i,j)-(1-temp).*temp_D);
        end
    end
    %ex
    
    for i=2:9 
        temp=sighz(i-1)*dt/(2*eps0);
        for j=2:6          
            hz(i,j)=((1-temp)./(1+temp)).*hz(i,j)+((ex(i,j+1)-ex(i,j))-(ey(i+1,j)-ey(i,j))).*dt.*c/(dx.*(1+temp));
        end
    end
    for i=44:51
        temp=sighz(52-i)*dt/(2*eps0);
        for j=2:6          
            hz(i,j)=((1-temp)./(1+temp)).*hz(i,j)+((ex(i,j+1)-ex(i,j))-(ey(i+1,j)-ey(i,j))).*dt.*c/(dx.*(1+temp));
        end
    end
    %hz
    
%    for i=2
%        for j=2:6
%            ey(i,j)=0.0;
%        end
%    end
%    for i=52
%       for j=2:6
%           ey(i,j)=0.0;
%       end
%   end
      

    %Add source
    if n<100
        for j=2:6
            ey(15,j)=source(n);
        end
    end
    %draw
    
   

    plot((1:53),ey(:,4));   %display
    xlim([1 50]);
    ylim([-1 1]);
    M(n)=getframe;

    
    %note
  notein(n)=ey(20,4);
%  notetotle(n)=ey(20,4);
end

 figure(2);plot((1:400),notein);
%figure(3);plot((1:400),notetotle);


%notere=notetotle-notein;
%figure(4);plot((1:400),notere);

%nf=2^15;
%df=1./(dt.*nf);
%ff=1:df:df*2^15;
%fin=fft(notein,nf);
%fin=abs(fin);
%plot(ff(1:3000),fin(1:3000));

%fre=fft(notere,nf);
%fre=abs(fre);
%plot(ff(1:3000),fre(1:3000));

%fco=fre./fin;
%figure(5);
%plot(ff(1:3000),fco(1:3000));

%figure(1);plot((1:500),note10);
%figure(2);plot((1:500),note20);
%figure(3);plot((1:500),note30);
%figure(4);plot((1:500),note40);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?