登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
发个FDTD程序 大家共享
发帖
回复
1
2
8142
阅读
14
回复
[
求助
]
发个FDTD程序 大家共享
离线
dearlxf520
UID :4992
注册:
2007-09-17
登录:
2007-09-26
发帖:
19
等级:
仿真新人
0楼
发表于: 2007-09-24 13:26:10
1-D:
=+sIX3
function FDTD_debug
:Jsz"vCg&s
KWuj_.;
%constants
TckR_0LNV
c_0 = 3E8; % Speed of light in free space
?T%K +
Nz = 100; % Number of cells in z-direction
;^H+ |&$>
Nt = 200; % Number of time steps
lDX&v$
N = Nz; % Global number of cells
.of:#~
5M.n'*
E = zeros(Nz,1); % E component
~"4 vd 3
E2 = zeros(Nz,1);
tV}ajs
E1 = zeros(Nz,1);
tRrY)eElS
Es = zeros(Nz,Nz); % Es is the output for surf function
bZ@53
%H = zeros(Nz,1); % H component
%imBGh
pulse = 0; % Pulse
}s)&/~6
;0_J7
%to be set
4Xb}I;rM
mu_0 = 4.0*pi*1.0e-7; % Permeability of free space
7.1E mJ
eps_0 = 1.0/(c_0*c_0*mu_0); % Permittivty of free space
+/UXy2VRt$
C,e$g
c_ref = c_0; % Reference velocity
N=?kEX O
eps_ref = eps_0;
tEs[zo+DR-
mu_ref = mu_0;
(A<sFw?
L|xen*O
f_0 = 10e9; % Excitation frequency
$8yGY
f_ref = f_0; % Reference frequency
C9;X6
}SvWC8
omega_0 = 2.0*pi*f_0; % Excitation circular frequency
<cS7L0h
omega_ref = omega_0;
y2hFUq
%JH_Nw.P
lambda_ref = c_ref/f_ref; % Reference wavelength
kG7,1teMk
Y`_X@Q
Dx_ref = lambda_ref/20; % Reference cells width
,8 -_=*
Dz = Dx_ref;
..]X<
nDz = Dz/Dx_ref;
(,9cCnvmYU
JX,#W!d
Z = Nz*Dz;
#WmAkzvq
r = 1; % Normalized time step
N(/<qv
Dt_ref = r*Dx_ref/c_ref; % Reference time step
4a50w:Jy]
Dt = Dt_ref;
R{y{
[q{Txe
% Source position
48NXj\L[y
Nz_Source = 0.5*Nz;
ua>~$`@gX
N_Source = Nz_Source;
TOF62,
?)QBJ9F
for n = 1:Nt-1
b0x0CMf
t = Dt_ref*r*(n-1); % Actual time
W%Nu]9T
G#n)|p
%Source function series
9^*YYK}%
Source_type = 1;
)KhVUFS1
switch Source_type
j I@$h_n
case 1 % modified source function
F3|pS:
ncycles = 2;
adPU)k_j:
if t < ncycles*2.0*pi/(omega_0)
~I^[rP~
pulse = -0.5*( 1.0 - cos(omega_0*t/ncycles) ) * sin(omega_0*t);
nKJ7K8)
else
bRe *(
pulse = 0;
_eeX]xSSl
end
nVA'O
case 2 % sigle cos source function
?D 9#dGK
if t < 2.0*pi/(omega_0)
yacGJz^f=
pulse = 8*c_0^2*Dt_ref^2*mu_ref*omega_0*cos(omega_0*t);
3EX&.OL!
else
Gqb-3ngH
pulse = 0;
GYmB xX87
end
`V2j[Fz
case 3 % Gaussian pulse
T@.m^|~
if t < Dt_ref*r*50
h_"/@6
pulse = -40*c_0*(t-t*25/(n-1))*exp(-(t-t*25/(n-1))^2/2/(50/2.3548)^2/(t/(n-1))^2);
&UH z
else
DH*|>m&
pulse = 0;
uB"m!dL
end
I{ZPv"9j^
end
]p.f*]
E2(N_Source) = E2(N_Source) - r*pulse;
,$ret@.H
E1 = E2;
{+mkXp])R
E2 = E;
L"<Eov6
;pK"N:|
m = 2:Nz-1;
CKw)J}z
E(m) = r^2*(E2(m+1) - 2*E2(m) + E2(m-1)) + 2*E2(m) - E1(m);
Lk+1r8
5kZ yiC*
%Boundary
*K)53QKlE
E(1) = 0; E(Nz) = 0; % Dirichlet
#IA(*oM
%E(1) = E(2);E(Nz) = E(Nz-1); % Neumann
!0+Ex F
%E(Nz) = E2(Nz-1) + (r-1)/(r+1)*(E(Nz-1)-E2(Nz)); % Mur ABC @ right side z = Nz
yj9gN}+
%E(1) = E2(2) + (r-1)/(r+1)*(E(2)-E2(1)); % Mur ABC @ left side z = 0
uKzz/Y{
~7lvY+k)<
%display
5F?g6?j{
%choice***********************************************
fT~<C {
display = 3; % choice: '1' = line plot; '2' = imagesc; '3' = surf
qz SI cI
switch display
}H^^v[4
case 1
BV:,bS
i = 1:Nz;
5i&V ~G
plot(i, E(i));
KA2B3\
axis([0 Nz -4 4]);
?kefRev<#h
case 2
v@SrEmg
A = rot90(E);
Zul32]1r
imagesc(A);
3goJ(XI
case 3
lY?d*qED
i = 1:Nz;
]}c=U@D,9
for j = 1:Nz
y_r6T XnGL
Es(i,j) = E(i);
+ zPg`/
end
rqo<Xt`
Es = rot90(Es);
DYl{{L8@
j = 1:Nz;
+JVfnTd
surf(i,j,Es);
0R%58,R
axis([0 Nz 0 Nz -4 4])
,gD i)]
otherwise
O:R{4Q*5
A = rot90(E);
X;RI7{fW%X
imagesc(A);
!+l, m8Hly
end
&NnMz9
pause(0.005);
AtYYu
end
=Bx~'RYl1d
}'- )
2D:
r\`m[Q
function FDTD_2D_Yee_2D_TM_final
Z%Kj^ M
:UciFIa
%constants
KgSxF#
c_0 = 3E8; % Speed of light in free space
w;_=$L'H&G
mu_0 = 4.0*pi*1.0e-7; % Permeability of free space
H:Le^WS
eps_0 = 1.0/(c_0*c_0*mu_0); % Permittivty of free space
\OH:xW~
!IU*Ayg
%to be set
4(IP
Nx = 100; % Number of cells in x-direction
@SXgaWr
Ny = 100; % Number of cells in y-direction
yp/*@8%_E
Nt = 500; % Number of time steps
[i _x 1
r2w7lf66!
c_ref = c_0; % Reference velocity
y9<Fv|Ric
eps_ref = eps_0;
fXj
mu_ref = mu_0;
5}ah%
$Yc9><i
f_0 = 10e9; % Excitation frequency
w:v:znQrW
f_ref = f_0; % Reference frequency
XPKcF I=
}hxYsI"d
omega_0 = 2.0*pi*f_0; % Excitation circular frequency
+(0eOO'\M
omega_ref = omega_0;
B\yid@e
wl9icrR>
lambda_ref = c_ref/f_ref; % Reference wavelength
GK+w1%6)
V:18]:
Dx_ref = lambda_ref/20; % Reference cells width
Vo[4\h#$
Dy_ref = lambda_ref/20;
HS9U.G>
k9]n/
X = Nx*Dx_ref;
KG@hjO
Y = Ny*Dy_ref;
(""&$BJQ|
eH6cBX#P.
r = 0.5; % Normalized factor
RqR X
Dt_ref = r/c_ref*Dx_ref; % Reference time step
(z{xd
Dt = Dt_ref;
e+U o-CO
V-0Y~T
% initialization
;{RQ+ZX'[
Ez0 = zeros(Nx, Ny);
K~R{q+
Ez1 = zeros(Nx, Ny);
.+sIjd
Hx0 = zeros(Nx, Ny);
8qveKS]vZ
Hx1 = zeros(Nx, Ny);
\)*qW[C$a
Hy0 = zeros(Nx, Ny);
%3wK.tR
Hy1 = zeros(Nx, Ny);
hrK^oa_[W
uDR(^T{g#
% Source position
;C'*Ui
Nx_Source = int16(0.5*(Nx+1));
pm+[,u!i
Ny_Source = int16(0.5*(Nx+1));
,*US) &x
C4,W[L]4"
pulse = 0;
;7}*Xr|
&/p9+gd
for n = 1:Nt % Sources' definitions
[PT}!X7h
t = Dt_ref*r*n; % Actual time
E:AXnnGKO
Source_type = 1; % Choice of source type
X@rAe37h+
NG ~sE&,7
switch Source_type
KC'{>rt7
case 1 % Modified source function
va\cE*,@ns
ncycles = 1;
7JbrIdDl|
if t < ncycles*2.0*pi/(omega_0)
Sj\8$QIXC
pulse = -0.5*( 1.0 - cos(omega_0*t/ncycles) ) * sin(omega_0*t);
, {^g}d8
else
p{U ro!J,K
pulse = 0;
xp= ]J UQ
end
2\n6XAQ*
case 2 % Sigle cos source function
:v`o="
if t < 2.0*pi/(omega_0)
umk[\}Ip+P
pulse = 8*c_0^2*Dt_ref^2*mu_ref*omega_0*cos(omega_0*t);
.vg;K@{
else
Flsf5 Tr0
pulse = 0;
ZC"p^~U_e[
end
H`sV\'`!}
case 3 % Gaussian pulse
e8Jd*AKjb
if t < Dt_ref*r*50
\TjsXy=:)
pulse = -40*c_0*(t-t*25/(n-1))*exp(-(t-t*25/(n-1))^2/2/(50/2.3548)^2/(t/(n-1))^2);
"Z <1Msz
else
8I%1 `V
pulse = 0;
ynhH5P|6,
end
5n<Efi]j
otherwise % For debug
i{.!1i:
pulse = 1;
G9;WO*
end
kN)P-![
Ez0(Nx_Source,Ny_Source) = Ez0(Nx_Source,Ny_Source) - r*pulse;
U<$ |ET'
_:J! |'
CHy = Dt_ref/mu_ref/Dx_ref; % Coefficients used below
gwyz)CUkL
CHx = Dt_ref/mu_ref/Dy_ref;
6B=J*8 Hs
CEzHy = Dt_ref/eps_ref/Dx_ref;
Ad[-YT
CEzHx = Dt_ref/eps_ref/Dy_ref;
w5p+Yx=q
d}1R<Q;F
for i = 2:Nx
;-59#S&?tB
% H update
nL9m{$Zv
Hx1(i,1:Ny-1) = Hx0(i,1:Ny-1) - CHx.*(Ez0(i,2:Ny)-Ez0(i,1:Ny-1));
5^qI6 U
end
dXZV1e1b
for i = 1:Nx-1
+NQw^!0qy
Hy1(i,2:Ny) = Hy0(i,2:Ny) + CHy.*(Ez0(i+1,2:Ny)-Ez0(i,2:Ny));
z?7pn}-
end
\7RP6o
tlE+G@|^
% Boundary conditions **************************************
wml`3$"cf
boundary = 3; % Choice: '1'=Mur ABC; '2'=Dirichlet; '3'=Neumann
&W1c#]q@r
switch boundary
IsI\T8yfc
case 1 % For H Mur ABC
`3~w#?+=*
Hx1(1,1:Ny-1) = Hx0(2, 1:Ny-1) + (r-1)/(r+1).*(Hx1(2, 1:Ny-1)-Hx0(1,1:Ny-1)); % Mur ABC @ left side x = 0
rc"yEI-``"
Hx1(1:Nx, Ny) = Hx0(1:Nx,Ny-1) + (r-1)/(r+1).*(Hx1(1:Nx,Ny-1)-Hx0(1:Nx, Ny)); % Mur ABC @ left side y = Ny
5bk5EE`
Hy1(1:Nx-1,1) = Hy0(1:Nx-1, 2) + (r-1)/(r+1).*(Hy1(1:Nx-1, 2)-Hy0(1:Nx-1,1)); % Mur ABC @ left side y = 0
,Ao8QN
Hy1(Nx, 1:Ny) = Hy0(Nx-1,1:Ny) + (r-1)/(r+1).*(Hy1(Nx-1,1:Ny)-Hy0(Nx, 1:Ny)); % Mur ABC @ left side x = Nx
mU;TB%#)
case 2 % Dirichlet
<Fi/!
&@yW<<
Hx1(1:Nx, 1) = 0;
E$gcd#rT
Hx1(1:Nx,Ny) = 0;
_|3n h;-m
Hx1(1, 1:Ny) = 0;
8@ b83
Hx1(Nx,1:Ny) = 0;
f -bVcWI
E=7~\7TE
Hy1(1:Nx, 1) = 0;
nCt:n}+C7
Hy1(1:Nx,Ny) = 0;
US-P>yF
Hy1(1, 1:Ny) = 0;
HA| YLj?|g
Hy1(Nx,1:Ny) = 0;
>k"/:g^t
case 3 % Neumann
o}<}zTU
Hx1(1, 1:Ny-1) = Hx0(1, 1:Ny-1);
k@^)>J^
Hx1(Nx,1:Ny-1) = Hx1(Nx,1:Ny-1);
@X:P`?("^
Hx1(1:Nx, Ny) = Hx0(1:Nx, Ny);
QM O OJA
Hx1(1:Nx, 1) = Hx1(1:Nx, 1);
%A04'dj`zQ
WL<Cj_N_{H
Hy1(1:Nx-1, 1) = Hy0(1:Nx-1, 1);
{{j?3O //
Hy1(1:Nx-1,Ny) = Hy0(1:Nx-1,Ny);
P'[w9'B
Hy1(Nx, 1:Ny) = Hy0(Nx, 1:Ny);
1Nv_;p.{
Hy1(1, 1:Ny) = Hy0(1, 1:Ny);
C]82Mt
bEbnZ<kz*
end
bUt?VR}P(
for i = 2:Nx
|+%K89W
% E update
RV-7y^[]^
Ez1(i,2:Ny) = Ez0(i,2:Ny) + CEzHy.*(Hy1(i,2:Ny)-Hy1(i-1,2:Ny)) - CEzHx.*(Hx1(i,2:Ny)-Hx1(i,1:Ny-1));
-3A#a_fu
end
5TqX;=B
switch boundary
q*8^938
case 1 % For E Mur ABC
!ce:S!P
Ez1(1,1:Ny) = Ez0(2,1:Ny) + (r-1)/(r+1).*(Ez1(2,1:Ny)-Ez0(1,1:Ny)); % Mur ABC @ right side x = 0
CtS*"c,j
Ez1(1:Nx,1) = Ez0(1:Nx,2) + (r-1)/(r+1).*(Ez1(1:Nx,2)-Ez0(1:Nx,1)); % Mur ABC @ right side y = 0
\xwE4K
case 2 % Dirichlet
Ygr1 S(=
Ez1(1, 1:Ny) = 0;
[/xw5rO%
Ez1(1:Nx, 1) = 0;
r/SV.` k
Ez1(Nx,1:Ny) = 0;
A~u-Iv(U
Ez1(1:Nx,Ny) = 0;
G}d@^9FkE
case 3 % Neumann
52=?! JM
Ez1(1, 1:Ny) = Ez0(1, 1:Ny);
s#>Bwn&b)
Ez1(Nx,1:Ny) = Ez0(Nx,1:Ny);
pno]Bld'z
Ez1(1:Nx, 1) = Ez0(1:Nx, 1);
5P [b/.n
Ez1(1:Nx,Ny) = Ez0(1:Nx,Ny);
>zVj+
end
zmF_-Q`c
Hx0 = Hx1;
y]yp8Bs+
Hy0 = Hy1;
wjDLsf,
Ez0 = Ez1;
$3k5hDA0e
F.zn:y X5
% Display*********************************************
Mz_*`lRN
i = 1:Nx;
SnRk` 5t
j = 1:Ny;
Srg`Tt]
display = 1; % Choice: '1' = Ez, '2' = Hx, '3' = Hy, 'Otherwise' = three components
> -OQk"o
switch display
?"\X46Gz;
case 1
HsO4C)/
surf(i,j,Ez0);
a~jM^b;VN
axis([0 Nx 0 Ny -0.03 0.03]);
q,A; d^g
set(gca, 'XTick',[1 Nx/4 Nx/2 3*Nx/4 Nx],'FontSize',8);
w|7<y8#qC
set(gca, 'XTickLabel',[0 X/4 X/2 3*X/4 X],'FontSize',8);
rfku]A$
xlabel('x in m');
>d%;+2
set(gca, 'YTick',[1 Ny/4 Ny/2 3*Ny/4 Ny],'FontSize',8);
=y.? =`"
set(gca, 'YTickLabel',[0 Y/4 Y/2 3*Y/4 Y],'FontSize',8);
sz9C':`W
ylabel('y in m');
Tapj7/0`
zlabel('Amplitude of Ez');
u6j\@U6 I
case 2
2Ck'A0d
surf(i,j,Hx0);
l@Uo4b^4x
axis([0 Nx 0 Ny -1e-4 1e-4]);
g)nsP
set(gca, 'XTick',[1 Nx/4 Nx/2 3*Nx/4 Nx],'FontSize',8);
SjgjGJw
set(gca, 'XTickLabel',[0 X/4 X/2 3*X/4 X],'FontSize',8);
.-Yhpw>f
xlabel('x in m');
kWZ?86!
set(gca, 'YTick',[1 Ny/4 Ny/2 3*Ny/4 Ny],'FontSize',8);
8bd&XieE
set(gca, 'YTickLabel',[0 Y/4 Y/2 3*Y/4 Y],'FontSize',8);
]lV\D8#
ylabel('y in m');
\4zb9CxOZ
zlabel('Amplitude of Hx');
!lpKZG
case 3
hE@s~~JYd
surf(i,j,Hy0);
;Sl]8IZ
axis([0 Nx 0 Ny -1e-4 1e-4]);
U=QfInB
set(gca, 'XTick',[1 Nx/4 Nx/2 3*Nx/4 Nx],'FontSize',8);
vau0Jn%=ck
set(gca, 'XTickLabel',[0 X/4 X/2 3*X/4 X],'FontSize',8);
{@ ygq-TZ
xlabel('x in m');
c0h:Vqk-
set(gca, 'YTick',[1 Ny/4 Ny/2 3*Ny/4 Ny],'FontSize',8);
kqdF)Wa am
set(gca, 'YTickLabel',[0 Y/4 Y/2 3*Y/4 Y],'FontSize',8);
K=nW|^
ylabel('y in m');
/Sy:/BQ
zlabel('Amplitude of Hy');
J0K25w
otherwise
=wE1j
subplot(2,2,1);
lB3@jF
surf(i,j,Ez0);
oP vk ^H
title('Ex');
]rU$0)VN
axis([0 Nx 0 Ny -0.03 0.03]);
?(rJ
set(gca, 'XTick',[1 Nx/4 Nx/2 3*Nx/4 Nx],'FontSize',8);
HE6kt6
set(gca, 'XTickLabel',[0 X/4 X/2 3*X/4 X],'FontSize',8);
HuzHXn)
xlabel('x in m');
{kVhht]X
set(gca, 'YTick',[1 Ny/4 Ny/2 3*Ny/4 Ny],'FontSize',8);
>LS*G qjq
set(gca, 'YTickLabel',[0 Y/4 Y/2 3*Y/4 Y],'FontSize',8);
i^`]TOP
ylabel('y in m');
>..C^8 "
zlabel('Amplitude of Ez');
2?J[D7
XpS].P9
subplot(2,2,2);
`0'Bg2'
surf(i,j,Hx0);
AT$eTZ]M
title('Hx');
*PEk+e
axis([0 Nx 0 Ny -1e-4 1e-4]);
&