⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 one_dimensional_pml.m

📁 matlab 完全匹配层 matlab FDTD
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%% In The Name of God %%%%%%%%%%%%%%%%%%%%%%
% 
% Numerical Method in Electromagnetic
% Dr. M.S Abrishamian
% 
% Mohsen Bahrami Panah        8600374                11/12/86
% 
% Problem 11 ---------- *** One Dimensional Perfectly Matched Layer ***

    close all
    clear all
    clc
    clf
    whitebg([1 0.9 1])
    set(gcf,'Color',[1,0.9,0.9])
	IMAX = 100;         %  number of grid cells in z-direction
	NMAX = 130;         %  total number of time steps
 	PI = acos(-1.0);    %  ? = 3.1415
	C = 2.997925E8;     %  SPEED OF LIGHT
	E0 = 8.854223E-12;  %  ?0=PERMITTIVITY OF FREE SPACE
	U0 = 1.256640E-6;   %  ?0 =PERMEABLITY OF FEEE SPACE
    ETTA = sqrt(U0/E0);
    ER = 1;             %  RELATIVE PERMITTIVITY
    

% __________________________ Source Design _______________________________    
    
    TO = 40.0;          % CENTER OF GAUSSIAN PULSE
	SIGMA = 6;          % BANDWITH OF GAUSSIAN PULSE
    Loc = 50;           % Source Location
    
% __________________________ Grid parameters ______________________________

    DZ = 0.01;          %space increment
    DT = DZ/(C);        %time step size

% _____________________________ PML _______________________________________

    m = 3;             % variation
    R = 1e-10;          % reflecion coefficient
    Dpml = 10;         % PML Cells
    d = Dpml*DZ;
    SIGmax = -(m+1)*log(R)/(2*d*ETTA);
    SIG(1:Dpml) = SIGmax*(((1:Dpml)-0.5)./Dpml).^m;
    SIGm(1:Dpml) = (ETTA^2)*SIGmax*((1:Dpml)./Dpml).^m;

% _________________________________________________________________________
%     Coefficients for space region
      CA(1:IMAX) = 1;
      CB(1:IMAX) = DT/(E0*DZ);
      DA(1:IMAX) = 1;
      DB(1:IMAX) = DT/(U0*DZ);
      
      
%     Coefficients for PML region 
      T = Dpml;
      for m = 2:Dpml+1
          CA(m) = (1-SIG(T)*DT/(2*E0))/(1+SIG(T)*DT/(2*E0));
          CB(m) = (DT/(E0*DZ))/(1+SIG(T)*DT/(2*E0));
          T = T-1;
      end
      T = 1;
      for m = (IMAX-Dpml+1):IMAX
          CA(m) = (1-SIG(T)*DT/(2*E0))/(1+SIG(T)*DT/(2*E0));
          CB(m) = (DT/(E0*DZ))/(1+SIG(T)*DT/(2*E0));
          T = T+1;
      end
      
      T = Dpml;
      for m = 1:Dpml
          DA(m) = (1-SIGm(T)*DT/(2*U0))/(1+SIGm(T)*DT/(2*U0));
          DB(m) = (DT/(U0*DZ))/(1+SIGm(T)*DT/(2*U0));
          T = T-1;
      end
      T = 1;
      for m = (IMAX-Dpml+1):IMAX
          DA(m) = (1-SIGm(T)*DT/(2*U0))/(1+SIGm(T)*DT/(2*U0));
          DB(m) = (DT/(U0*DZ))/(1+SIGm(T)*DT/(2*U0));
          T = T+1;
      end
      
      
%     Illustrating the regions
      Z =  IMAX-Dpml;
      Z = [Z Z];
      X = [Dpml Dpml];
      Y = [-1.1 1.1];

% _________________________ << INITIALIZATION >> __________________________

	Ex = zeros(1,IMAX);
	Hy = zeros(1,IMAX);
    S = 100;

% ______________________ << TIME STEPING STARTS >> ________________________

	for N = 1 : NMAX
        
%                        <<   Excitation   >>
        if N<=S
            source = exp(-(N-TO)^2/(2*SIGMA^2));
            Ex(1,Loc) = source+Ex(1,Loc);
%             Hy(1,Loc) = Hy(1,Loc)+source/ETTA;
        end
        
%                      << Electric Field Update >>
        for I = 1 : IMAX-1
            Ex(1,I) = DA(1,I)*Ex(1,I) - DB(1,I)*(Hy(1,I+1) - Hy(1,I));
        end    
        
%                      << Magnetic Field Update >>
        for I = 2 : IMAX
            Hy(1,I) = CA(1,I)*Hy(1,I) - CB(1,I)*(Ex(1,I) - Ex(1,I-1));   % HY FIELD CALCULATION
        end     
        
        % getting picture at different instance
        fill([0;0;Dpml;Dpml;0],[-1.1;1.1;1.1;-1.1;-1.1],'c')
        hold on
        fill([IMAX-Dpml;IMAX-Dpml;IMAX;IMAX;IMAX-Dpml],[-1.1;1.1;1.1;-1.1;-1.1],'c')
        plot(1:IMAX,Ex,'m-',Z,Y,'b',X,Y,'b','linewidth',2);
        hold off
        title('\bf\it One Dimensional PML','color','b')
        ylabel('\bf\it Amplitude','color','b')
        axis([0,IMAX,-1.1,1.1]);
        text(.75*IMAX,1,['\bf\it t = ',num2str(N)],'color','m','fontsize',10,'BackgroundColor','c')
        text(Dpml/2,-0.6,'\bf PML','rotation',90,'color','b')
        text(IMAX-Dpml/2,-0.6,'\bf PML','rotation',90,'color','b')
        pause(0.01)
    end
% ________________________ END OF THE PROGRAM ___________________________

⌨️ 快捷键说明

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