📄 fdtd_antipodal_patch.m
字号:
Ceyhzdx(Bline_x_start:Bline_x_start+Bline_width,Bline_y_start:Bline_y_start+Bline_length-1,Height_first)=0;
% Microstrip Bowtie Line on patch
Cexe(Bline_x_start:Bline_x_start+Bline_width-1,Bline_y_start:Bline_y_start+Bline_length,Height)=0;
Cexhzdy(Bline_x_start:Bline_x_start+Bline_width-1,Bline_y_start:Bline_y_start+Bline_length,Height)=0;
Cexhydz(Bline_x_start:Bline_x_start+Bline_width-1,Bline_y_start:Bline_y_start+Bline_length,Height)=0;
Ceye(Bline_x_start:Bline_x_start+Bline_width,Bline_y_start:Bline_y_start+Bline_length-1,Height)=0;
Ceyhxdz(Bline_x_start:Bline_x_start+Bline_width,Bline_y_start:Bline_y_start+Bline_length-1,Height)=0;
Ceyhzdx(Bline_x_start:Bline_x_start+Bline_width,Bline_y_start:Bline_y_start+Bline_length-1,Height)=0;
% patch top
Cexe(Rec_top_x_start:Rec_top_x_start+Rec_top_x_width-1,Rec_top_y_start:Rec_top_y_start+Rec_top_y_length,Height)=0;
Cexhzdy(Rec_top_x_start:Rec_top_x_start+Rec_top_x_width-1,Rec_top_y_start:Rec_top_y_start+Rec_top_y_length,Height)=0;
Cexhydz(Rec_top_x_start:Rec_top_x_start+Rec_top_x_width-1,Rec_top_y_start:Rec_top_y_start+Rec_top_y_length,Height)=0;
Ceye(Rec_top_x_start:Rec_top_x_start+Rec_top_x_width,Rec_top_y_start:Rec_top_y_start+Rec_top_y_length-1,Height)=0;
Ceyhxdz(Rec_top_x_start:Rec_top_x_start+Rec_top_x_width,Rec_top_y_start:Rec_top_y_start+Rec_top_y_length-1,Height)=0;
Ceyhzdx(Rec_top_x_start:Rec_top_x_start+Rec_top_x_width,Rec_top_y_start:Rec_top_y_start+Rec_top_y_length-1,Height)=0;
% Patch bottom
Cexe(Rec_bottom_x_start:Rec_bottom_x_start+Rec_bottom_x_width-1,Rec_bottom_y_start:Rec_bottom_y_start+Rec_bottom_y_length,Height_first)=0;
Cexhzdy(Rec_bottom_x_start:Rec_bottom_x_start+Rec_bottom_x_width-1,Rec_bottom_y_start:Rec_bottom_y_start+Rec_bottom_y_length,Height_first)=0;
Cexhydz(Rec_bottom_x_start:Rec_bottom_x_start+Rec_bottom_x_width-1,Rec_bottom_y_start:Rec_bottom_y_start+Rec_bottom_y_length,Height_first)=0;
Ceye(Rec_bottom_x_start:Rec_bottom_x_start+Rec_bottom_x_width,Rec_bottom_y_start:Rec_bottom_y_start+Rec_bottom_y_length-1,Height_first)=0;
Ceyhxdz(Rec_bottom_x_start:Rec_bottom_x_start+Rec_bottom_x_width,Rec_bottom_y_start:Rec_bottom_y_start+Rec_bottom_y_length-1,Height_first)=0;
Ceyhzdx(Rec_bottom_x_start:Rec_bottom_x_start+Rec_bottom_x_width,Rec_bottom_y_start:Rec_bottom_y_start+Rec_bottom_y_length-1,Height_first)=0;
%--------------------------------------------------------------------------
% Set magnetic-field update coefficients
%--------------------------------------------------------------------------
Chxh(1:Sizex,1:Sizey-1,1:Sizez-1)=1;
Chxeydz(1:Sizex,1:Sizey-1,1:Sizez-1)=Cdtdsz/eta;
Chxezdy(1:Sizex,1:Sizey-1,1:Sizez-1)=Cdtdsy/eta;
Chyh(1:Sizex-1,1:Sizey,1:Sizez-1)=1;
Chyezdx(1:Sizex-1,1:Sizey,1:Sizez-1)=Cdtdsx/eta;
Chyexdz(1:Sizex-1,1:Sizey,1:Sizez-1)=Cdtdsz/eta;
Chzh(1:Sizex-1,1:Sizey-1,1:Sizez)=1;
Chzexdy(1:Sizex-1,1:Sizey-1,1:Sizez)=Cdtdsy/eta;
Chzeydx(1:Sizex-1,1:Sizey-1,1:Sizez)=Cdtdsx/eta;
%--------------------------------------------------------------------------
% Main Loop
%--------------------------------------------------------------------------
for Time=1:Tmax
%H field update
Hx(1:Sizex,1:Sizey-1,1:Sizez-1)=Chxh(1:Sizex,1:Sizey-1,1:Sizez-1).*Hx(1:Sizex,1:Sizey-1,1:Sizez-1)+Chxeydz(1:Sizex,1:Sizey-1,1:Sizez-1).*(Ey(1:Sizex,1:Sizey-1,2:Sizez)-Ey(1:Sizex,1:Sizey-1,1:Sizez-1))-Chxezdy(1:Sizex,1:Sizey-1,1:Sizez-1).*(Ez(1:Sizex,2:Sizey,1:Sizez-1)-Ez(1:Sizex,1:Sizey-1,1:Sizez-1));
Hy(1:Sizex-1,1:Sizey,1:Sizez-1)=Chyh(1:Sizex-1,1:Sizey,1:Sizez-1).*Hy(1:Sizex-1,1:Sizey,1:Sizez-1)+Chyezdx(1:Sizex-1,1:Sizey,1:Sizez-1).*(Ez(2:Sizex,1:Sizey,1:Sizez-1)-Ez(1:Sizex-1,1:Sizey,1:Sizez-1))-Chyexdz(1:Sizex-1,1:Sizey,1:Sizez-1).*(Ex(1:Sizex-1,1:Sizey,2:Sizez)-Ex(1:Sizex-1,1:Sizey,1:Sizez-1));
Hz(1:Sizex-1,1:Sizey-1,1:Sizez)=Chzh(1:Sizex-1,1:Sizey-1,1:Sizez).*Hz(1:Sizex-1,1:Sizey-1,1:Sizez)+Chzexdy(1:Sizex-1,1:Sizey-1,1:Sizez).*(Ex(1:Sizex-1,2:Sizey,1:Sizez)-Ex(1:Sizex-1,1:Sizey-1,1:Sizez))-Chzeydx(1:Sizex-1,1:Sizey-1,1:Sizez).*(Ey(2:Sizex,1:Sizey-1,1:Sizez)-Ey(1:Sizex-1,1:Sizey-1,1:Sizez));
Ex(1:Sizex-1,2:Sizey-1,2:Sizez-1)=Cexe(1:Sizex-1,2:Sizey-1,2:Sizez-1).*Ex(1:Sizex-1,2:Sizey-1,2:Sizez-1)+Cexhzdy(1:Sizex-1,2:Sizey-1,2:Sizez-1).*(Hz(1:Sizex-1,2:Sizey-1,2:Sizez-1)-Hz(1:Sizex-1,1:Sizey-2,2:Sizez-1))-Cexhydz(1:Sizex-1,2:Sizey-1,2:Sizez-1).*(Hy(1:Sizex-1,2:Sizey-1,2:Sizez-1)-Hy(1:Sizex-1,2:Sizey-1,1:Sizez-2));
Ey(2:Sizex-1,1:Sizey-1,2:Sizez-1)=Ceye(2:Sizex-1,1:Sizey-1,2:Sizez-1).*Ey(2:Sizex-1,1:Sizey-1,2:Sizez-1)+Ceyhxdz(2:Sizex-1,1:Sizey-1,2:Sizez-1).*(Hx(2:Sizex-1,1:Sizey-1,2:Sizez-1)-Hx(2:Sizex-1,1:Sizey-1,1:Sizez-2))-Ceyhzdx(2:Sizex-1,1:Sizey-1,2:Sizez-1).*(Hz(2:Sizex-1,1:Sizey-1,2:Sizez-1)-Hz(1:Sizex-2,1:Sizey-1,2:Sizez-1));
Ez(2:Sizex-1,2:Sizey-1,1:Sizez-1)=Ceze(2:Sizex-1,2:Sizey-1,1:Sizez-1).*Ez(2:Sizex-1,2:Sizey-1,1:Sizez-1)+Cezhydx(2:Sizex-1,2:Sizey-1,1:Sizez-1).*(Hy(2:Sizex-1,2:Sizey-1,1:Sizez-1)-Hy(1:Sizex-2,2:Sizey-1,1:Sizez-1))-Cezhxdy(2:Sizex-1,2:Sizey-1,1:Sizez-1).*(Hx(2:Sizex-1,2:Sizey-1,1:Sizez-1)-Hx(2:Sizex-1,1:Sizey-2,1:Sizez-1));
%----------------------------------------------------------------------
% ABC Update
%----------------------------------------------------------------------
% ABC at x0
i=1;
for j=1:Sizey-1
for k=1:Sizez
if k>Height_first && k<Height
Ey(i,j,k)=Eyx0(i,j,k)+abcDie_y*(Ey(i+1,j,k)-Ey(i,j,k));
elseif k==Height
Ey(i,j,k)=Eyx0(i,j,k)+abcAvg_y*(Ey(i+1,j,k)-Ey(i,j,k));
elseif k==Height_first
Ey(i,j,k)=Eyx0(i,j,k)+abcAvg_y*(Ey(i+1,j,k)-Ey(i,j,k));
else
Ey(i,j,k)=Eyx0(i,j,k)+abcAir_y*(Ey(i+1,j,k)-Ey(i,j,k));
end
Eyx0(i,j,k)=Ez(i+1,j,k);
end
end
for j=1:Sizey
for k=1:Sizez-1
if k>Height_first && k<Height
Ez(i,j,k)=Ezx0(i,j,k)+abcDie_z*(Ez(i+1,j,k)-Ez(i,j,k));
else
Ez(i,j,k)=Ezx0(i,j,k)+abcAir_z*(Ez(i+1,j,k)-Ez(i,j,k));
end
Ezx0(i,j,k)=Ez(i+1,j,k);
end
end
% AbC at x1
i=Sizex;
for j=1:Sizey-1
for k=1:Sizez
if k>Height_first && k<Height
Ey(i,j,k)=Eyx1(i,j,k)+abcDie_y*(Ey(i-1,j,k)-Ey(i,j,k));
elseif k==Height
Ey(i,j,k)=Eyx1(i,j,k)+abcAvg_y*(Ey(i-1,j,k)-Ey(i,j,k));
elseif k==Height_first
Ey(i,j,k)=Eyx1(i,j,k)+abcAvg_y*(Ey(i-1,j,k)-Ey(i,j,k));
else
Ey(i,j,k)=Eyx1(i,j,k)+abcAir_y*(Ey(i-1,j,k)-Ey(i,j,k));
end
Eyx1(i,j,k)=Ez(i-1,j,k);
end
end
for j=1:Sizey
for k=1:Sizez-1
if k>Height_first && k<Height
Ez(i,j,k)=Ezx1(i,j,k)+abcDie_z*(Ez(i-1,j,k)-Ez(i,j,k));
else
Ez(i,j,k)=Ezx1(i,j,k)+abcAir_z*(Ez(i-1,j,k)-Ez(i,j,k));
end
Ezx1(i,j,k)=Ez(i-1,j,k);
end
end
if Time<Switch_src
%------------------------------------------------------------------
% Ex nodes on y0 wall have special updates while the wall is
% acting as the source plane
%------------------------------------------------------------------
Ex(1:Sizex-1,1,2:Sizez-1)=Cexe(1:Sizex-1,1,2:Sizez-1).*Ex(1:Sizex-1,1,2:Sizez-1)+Cexhzdy(1:Sizex-1,1,2:Sizez-1).*(2*Hz(1:Sizex-1,1,2:Sizez-1))-Cexhydz(1:Sizex-1,1,2:Sizez-1).*(Hy(1:Sizex-1,1,2:Sizez-1)-Hy(1:Sizex-1,1,1:Sizez-2));
Ez(2:Sizex-1,1,1:Sizez-1)=Ceze(2:Sizex-1,1,1:Sizez-1).*Ez(2:Sizex-1,1,1:Sizez-1)+Cezhydx(2:Sizex-1,1,1:Sizez-1).*(Hy(2:Sizex-1,1,1:Sizez-1)-Hy(1:Sizex-2,1,1:Sizez-1))-Cezhxdy(2:Sizex-1,1,1:Sizez-1).*(2*Hx(2:Sizex-1,1,1:Sizez-1));
%***********************************************************************
% Differentiated Gaussian pulse excitation
%***********************************************************************
%arg=(Time-30)/20;
%Pulse=exp(-arg*arg);
Pulse=exp(-.5*(((Time*Cdtdsx)/PPW).^2.0));
Ez(Line_x_start:Line_x_start+Line_width,1,Height_first:Height-1)=Pulse;
else
% ABC at y0
j=1;
for i=1:Sizex-1
for k=1:Sizez
if k>Height_first && k<Height
Ex(i,j,k)=Exy0(i,j,k)+abcDie_x*(Ex(i,j+1,k)-Ex(i,j,k));
elseif k==Height
Ex(i,j,k)=Exy0(i,j,k)+abcAvg_x*(Ex(i,j+1,k)-Ex(i,j,k));
elseif k==Height_first
Ex(i,j,k)=Exy0(i,j,k)+abcAvg_x*(Ex(i,j+1,k)-Ex(i,j,k));
else
Ex(i,j,k)=Exy0(i,j,k)+abcAir_x*(Ex(i,j+1,k)-Ex(i,j,k));
end
Exy0(i,j,k)=Ex(i,j+1,k);
end
end
for i=1:Sizex
for k=1:Sizez-1
if k>Height_first && k<Height
Ez(i,j,k)=Ezy0(i,j,k)+abcDie_z*(Ez(i,j+1,k)-Ez(i,j,k));
else
Ez(i,j,k)=Ezy0(i,j,k)+abcAir_z*(Ez(i,j+1,k)-Ez(i,j,k));
end
Ezy0(i,j,k)=Ez(i,j+1,k);
end
end
end
% ABC at y1
j=Sizey;
for i=1:Sizex-1
for k=1:Sizez
if k>Height_first && k<Height
Ex(i,j,k)=Exy1(i,j,k)+abcDie_x*(Ex(i,j-1,k)-Ex(i,j,k));
elseif k==Height
Ex(i,j,k)=Exy1(i,j,k)+abcAvg_x*(Ex(i,j-1,k)-Ex(i,j,k));
elseif k==Height_first
Ex(i,j,k)=Exy1(i,j,k)+abcAvg_x*(Ex(i,j-1,k)-Ex(i,j,k));
else
Ex(i,j,k)=Exy1(i,j,k)+abcAir_x*(Ex(i,j-1,k)-Ex(i,j,k));
end
Exy1(i,j,k)=Ex(i,j-1,k);
end
end
for i=1:Sizex
for k=1:Sizez-1
if k>Height_first && k<Height
Ez(i,j,k)=Ezy1(i,j,k)+abcDie_z*(Ez(i,j-1,k)-Ez(i,j,k));
else
Ez(i,j,k)=Ezy1(i,j,k)+abcAir_z*(Ez(i,j-1,k)-Ez(i,j,k));
end
Ezy1(i,j,k)=Ez(i,j-1,k);
end
end
% ABC at z=1 (top)
k=Sizez;
for i=1:Sizex-1
for j=1:Sizey
Ex(i,j,k)=Exz1(i,j,k)+abcAir_x*(Ex(i,j,k-1)-Ex(i,j,k));
Exz1(i,j,k)=Ex(i,j,k-1);
end
end
for i=1:Sizex
for j=1:Sizey-1
Ey(i,j,k)=Eyz1(i,j,k)+abcAir_y*(Ey(i,j,k-1)-Ey(i,j,k));
Eyz1(i,j,k)=Ey(i,j,k-1);
end
end
% ABC at z=1 (bottom)
k=1;
for i=1:Sizex-1
for j=1:Sizey
Ex(i,j,k)=Exz0(i,j,k)+abcAir_x*(Ex(i,j,k+1)-Ex(i,j,k));
Exz0(i,j,k)=Ex(i,j,k+1);
end
end
for i=1:Sizex
for j=1:Sizey-1
Ey(i,j,k)=Eyz0(i,j,k)+abcAir_y*(Ey(i,j,k+1)-Ey(i,j,k));
Eyz0(i,j,k)=Ey(i,j,k+1);
end
end
%------------------------------------------------------------------
% Record the voltage
%------------------------------------------------------------------
Voltage=0;
for k=Height_first:Height-1
%Voltage=Voltage+Ez(Line_x_start+(Line_width)/2,Line_length-60,k);
Voltage=Voltage+Ez(Line_x_start+(Line_width)/2,25,k);
end
Voltage_patch(Time+1)=Voltage;
Time
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -