登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
fdtd2d_tm_pml为何出现电磁场分量变成无限大的 ..
发帖
回复
1942
阅读
7
回复
[
求助
]
fdtd2d_tm_pml为何出现电磁场分量变成无限大的问题
离线
juventus
UID :20795
注册:
2008-11-05
登录:
2012-06-06
发帖:
18
等级:
仿真新人
0楼
发表于: 2009-08-24 22:40:51
我根据Susan C.Hagness的书所附的2D关于TE波的pml边界吸收的程序 简单改写为TM波模式 但是出现了电磁场迅速增大的问题。请教下各位大侠,程序附如下
#u8*CA9
]{|fYt_-
clear
L2CW'Hd
P?q G
%***********************************************************************
h-r6PY=i
% Fundamental constants
'f-
%***********************************************************************
8Wdkztp/S
GB<R7J
cc=2.99792458e8; %speed of light in free space
wi\z>'R
muz=4.0*pi*1.0e-7; %permeability of free space
;48P vw>g}
epsz=1.0/(cc*cc*muz); %permittivity of free space
:3a&Pb*PL
C~ZE95g
freq=5.0e+9; %center frequency of source excitation
VLh%XoQx[
lambda=cc/freq; %center wavelength of source excitation
r7Nu>[r5
omega=2.0*pi*freq;
J 16=!q()
?CH?kP
%***********************************************************************
09
% Grid parameters
Z!wD~C"D73
%***********************************************************************
u}Ei_ O<z
u?q&K|
ie=100; %number of grid cells in x-direction
v78&[
je=50; %number of grid cells in y-direction
2;~KL-h0TK
G%2P
ib=ie+1;
i^je.,Bi
jb=je+1;
*I:mw8t
LKqRvPnh
is=15; %location of z-directed hard source
KU+( YF$1
js=je/2; %location of z-directed hard source
6RH/V:YY
`0yb?Nk `:
dx=3.0e-3; %space increment of square lattice
R]CZw;zS_
dt=dx/(2.0*cc); %time step
3%XG@OgP
UG6M9
nmax=2; %total number of time steps
TkA9tFi
UUl*f!& o
iebc=8; %thickness of left and right PML region
]KsGkAG
jebc=8; %thickness of front and back PML region
HjV\lcK:v
rmax=0.00001;
5\VxXiy0
orderbc=2;
>4Iv[ D1
ibbc=iebc+1;
_kh>Z
jbbc=jebc+1;
d2ohW|
iefbc=ie+2*iebc;
dO+kPC
jefbc=je+2*jebc;
Qn*6D
ibfbc=iefbc+1;
j,}4TDWa
jbfbc=jefbc+1;
w'd.;
Tc:sldtCk
%***********************************************************************
q1UBKhpnH
% Material parameters
)j\r,9<K+5
%***********************************************************************
<E"*)Oi
0HjJaML
media=2;
,MRvuw0P
gC0;2
eps=[1.0 1.0];
pw!@Q?R
sig=[0.0 1.0e+7];
b 1cd&e
mur=[1.0 1.0];
HH7[tGF
sim=[0.0 0.0];
!@( M_Z'
Mz93
%***********************************************************************
/;DjJpwf0
% Wave excitation
^ b@!dS
%***********************************************************************
.Nc_n5D6
#`vVgGZ&
rtau=160.0e-12;
H;qJH1EdD
tau=rtau/dt;
mLJDxh'B
delay=3*tau;
}bp.OV-+
<p09oZ{6
source=zeros(1,nmax);
gTnS[
for n=1:7.0*tau
Im6U_JsNZh
source(n)=sin(omega*(n-delay)*dt)*exp(-((n-delay)^2/tau^2));
&1=g A.ZR
end
t7&Dwmck9
^dh=M5xz)
%***********************************************************************
)R~a;?T_c0
% Field arrays
rxs8De
%***********************************************************************
AhR0zg
ez=zeros(ie,je);
!Pw$48cg
hx=zeros(ie,jb); %fields in main grid
#L\o;p(
hy=zeros(ib,je);
V+46R ]
A9t8`|1"%H
ezxbcf=zeros(iefbc,jebc);
~*,Wj?~+7
ezybcf=zeros(iefbc,jebc);
^eobp.U
hxbcf=zeros(iefbc,jebc); %fields in front pml
b]w[*<f?
hybcf=zeros(ibfbc,jebc);
qT$)Rb&
;t|,nz4kJ
ezxbcb=zeros(iefbc,jebc);
5.dl>,
ezybcb=zeros(iefbc,jebc);
s047"Q
hxbcb=zeros(iefbc,jbbc); %fields in back pml
4j^bpfb,
hybcb=zeros(ibfbc,jebc);
lr0M<5d=p
O~atNrHD
ezxbcl=zeros(iebc,je);
7x(v?
ezybcl=zeros(iebc,je);
Si]X rub
hxbcl=zeros(iebc,jb); %fields in left pml
bH,M,xIL2
hybcl=zeros(iebc,je);
J B(<.E2
'aZASPn[
ezxbcr=zeros(iebc,je);
lM$t!2pRB
ezybcr=zeros(iebc,je);
Wa<-AZnh
hxbcr=zeros(iebc,jb); %fields in right pml
HJ",Sle
hybcr=zeros(ibbc,je);
U:\p$ hL9
a}dw9wU!:
%***********************************************************************
R1Yqz $#
% Updating coefficients
ncj!KyU
%***********************************************************************
UG # X/%p
j$mz3Yk
for i=1:media
W6i3Psjsw
eaf =dt*sig(i)/(2.0*epsz*eps(i));
~TM>"eB b
ca(i)=(1.0-eaf)/(1.0+eaf);
$cu]_gu
cb(i)=dt/epsz/eps(i)/dx/(1.0+eaf);
L ?Cjo4xS
haf =dt*sim(i)/(2.0*muz*mur(i));
vbaC+AiX
da(i)=(1.0-haf)/(1.0+haf);
djfU:$!j&
db(i)=dt/muz/mur(i)/dx/(1.0+haf);
#n#HzbT
end
i&*<lff
i(Vm!Y82
%***********************************************************************
5#2jq<D
% Geometry specification (main grid)
_Z$?^gn
%***********************************************************************
%0zS
']h IfOD"r
% Initialize entire main grid to free space
;t!9]1
caez(1:ie,1:je)=ca(1);
ki#bPgT
cbez(1:ie,1:je)=cb(1);
:]-$dEu&
.lr5!Stb
dahx(1:ie,1:jb)=da(1);
T0Q51Q
dbhx(1:ie,1:jb)=db(1);
c;^A)_/
B$j' /e-Zk
dahy(1:ib,1:je)=da(1);
QvJZkGX
dbhy(1:ib,1:je)=db(1);
%4/xH9
tpZ->)1
% Add metal cylinder
"[.ne)/MC
d#8e~
diam=20; % diameter of cylinder: 6 cm
O+b6lg)q
rad=diam/2.0; % radius of cylinder: 3 cm
7O$ &
icenter=4*ie/5; % i-coordinate of cylinder's center
^7^2D2[
jcenter=je/2; % j-coordinate of cylinder's center
qlvwK&W<QM
.`+yo0O:
for i=1:ie
e[8UH =`|
for j=1:je
gH'3 dS!{
dist2=(i-icenter)^2 + (j-jcenter)^2;
{Zl4C;c
if dist2 <= rad^2
=ajLa/m'
caez(i,j)=ca(2);
`O n(v
cbez(i,j)=cb(2);
\%4|t,en
end
d' OGVN
end
_A3X6
end
JnHNkCaU
x,uBJ
%***********************************************************************
abSq2*5K
% Fill the PML regions
Tyd h9I
%***********************************************************************
L;lk.~V4T
\Z'/+}^h
delbc=iebc*dx;
`I#`:hj
sigmam=-log(rmax/100.0)*epsz*cc*(orderbc+1)/(2*delbc);
( OXY^iq
bcfactor=eps(1)*sigmam/(dx*(delbc^orderbc)*(orderbc+1));
.)t(:)*b
u>}zm_
% FRONT region
xW0Z'==
dahxbcf(1:iefbc,1)=1.0;
z<h|#@\
dbhxbcf(1:iefbc,1)=0.0;
p&O8qAaO
for j=2:jebc
-=sf}4A
y1=(jebc-j+1.5)*dx;
Gk 6fO
y2=(jebc-j+0.5)*dx;
[zx|eG<&-
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
xEC2@J
sigmays=sigmay*(muz/(epsz*eps(1)));
mw"}8y
da1=exp(-sigmays*dt/muz);
j.B>v\b_3
db1=(1-da1)/(sigmays*dx);
x=vK EyS@
dahxbcf(1:iefbc,j)=da1;
^vW$XRnt
dbhxbcf(1:iefbc,j)=db1;
N6q5`Ry
end
j/' g$
sigmay=bcfactor*(0.5*dx)^(orderbc+1);
uQ^hV%|"
sigmays=sigmay*(muz/(epsz*eps(1)));
ThiN9! Y
da1=exp(-sigmays*dt/muz);
lvPpCAXY
db1=(1-da1)/(sigmays*dx);
b}}y=zO|$
dahx(1:ie,1)=da1;
y;r"+bS8
dbhx(1:ie,1)=db1;
r,"7%1I
dahxbcl(1:iebc,1)=da1;
6%UY1Q.?
dbhxbcl(1:iebc,1)=db1;
zb?kpd}r
dahxbcr(1:iebc,1)=da1;
bs P6\'\4
dbhxbcr(1:iebc,1)=db1;
B\/7^{i5
dk8y>uLr_
for j=1:iebc
DyIV/
y1=(jebc-j+1)*dx;
L20rv:W$h
y2=(jebc-j)*dx;
AA2ui%
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
Z'e\_C
ca1=exp(-sigmay*dt/(epsz*eps(1)));
%Co b(C&}
cb1=(1.0-ca1)/(sigmay*dx);
Pa[?L:E
caezybcf(1:iefbc,j)=ca1;
|@ *3^'
cbezybcf(1:iefbc,j)=cb1;
zhjJ>d%w
caezxbcf(1:iefbc,j)=ca(1);
Rf?%Tv0\
cbezxbcf(1:iefbc,j)=cb(1);
PF67z]<o
dahybcf(1:ibfbc,j)=da(1);
@.1Qs`pt
dbhybcf(1:ibfbc,j)=db(1);
|,{+;:
end
T\fudmj&
P8IRH#ED
% BACK region
7PA=)a\
dahxbcb(1:iefbc,jbbc)=1.0;
+[_gyLN<5b
dbhxbcb(1:iefbc,jbbc)=0.0;
&1~Re.*B
for j=2:jebc
v4D!7t&v"
y1=(j-0.5)*dx;
j3LNnZY
y2=(j-1.5)*dx;
7N6zqjIB
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
@2?=3Wf
sigmays=sigmay*(muz/(epsz*eps(1)));
RyE_|]I62u
da1=exp(-sigmays*dt/muz);
}H; ]k-)
db1=(1-da1)/(sigmays*dt);
hwp/jO:7\
dahxbcb(1:iefbc,j)=da1;
61kO1,Uz*
dbhxbcb(1:iefbc,j)=db1;
?;fv!'?%
end
%; qY'+
sigmay=bcfactor*(0.5*dx)^(orderbc+1);
soDfi-2o3
sigmays=sigmay*(muz/(epsz*eps(1)));
kR_E6Fl
da1=exp(-sigmays*dt/muz);
1 0V+OIC
db1=(1-da1)/(sigmays*dx);
%uW<
dahx(1:ie,jb)=da1;
f)WPOTEY
dbhy(1:ie,jb)=db1;
IQ#So]9~Y
dahxbcl(1:iebc,jb)=da1;
sv@}x[L
dbhxbcl(1:iebc,jb)=db1;
v3Eo@,-
dahxbcr(1:iebc,jb)=da1;
I'P!,Y/>
dbhxbcr(1:iebc,jb)=db1;
$sM]BE:
m8p4U-*j
for j=1:jebc
|]I#CdO
y1=j*dx;
^T=5zqRD
y2=(j-1)*dx;
%$^$'6\77
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
7;~2e
ca1=exp(-sigmay*dt/(epsz*eps(1)));
wAPO{3
cb1=(1-ca1)/(sigmay*dx);
%bN"bxv^
caezybcb(1:iefbc,j)=ca1;
=g1 D;
cbezybcb(1:iefbc,j)=cb1;
m[{nm95QZ
caezxbcb(1:iefbc,j)=ca(1);
=\*S'Ded
cbezxbcb(1:iefbc,j)=cb(1);
b\H/-7<
dahybcb(1:ibfbc,j)=da(1);
U24V55ZnI
dbhybcb(1:ibfbc,j)=db(1);
hY)YX,f=S
end
i;gw=Be
<x ^IwS
dr}O+7_7%-
% LEFT region
O$YJku
dahybcl(1,1:je)=1.0;
I)qKS@
dbhybcl(1,1:je)=0.0;
/]P%b K6B
for i=2:iebc
3huzz<n3
x1=(iebc-i+1.5)*dx;
*pmoLiuB>
x2=(iebc-i+0.5)*dx;
?|\0)wrRf
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
H)-L%l|9
sigmaxs=sigmax*(muz/(epsz*eps(1)));
u)wu=z8
da1=exp(-sigmaxs*dt/muz);
P^i6MZ?
db1=(1-da1)/(sigmaxs*dx);
_ak.G=
dahybcl(i,1:je)=da1;
3~#Z E;>#
dbhybcl(i,1:je)=db1;
`>$gy/N
dahybcf(i,1:jebc)=da1;
`Nc`xO?
dbhybcf(i,1:jebc)=db1;
:+kg4v&r
dahybcb(i,1:jebc)=da1;
Be'?#Qe
dbhybcb(i,1:jebc)=db1;
'cWlY3%t
end
8s\8`2=
sigmax=bcfactor*(0.5*dx)^(orderbc+1);
\;4L~_2$q
sigmaxs=sigmax*(muz/(epsz*eps(1)));
EG8%~k+R
da1=exp(-sigmaxs*dt/muz);
o<9yaQ;
db1=(1-da1)/(sigmaxs*dx);
] `b<"
dahy(1,1:je)=da1;
q_OY sg
dbhy(1,1:je)=db1;
3^uL`ETm@
dahybcf(ibbc,1:jebc)=da1;
,K"r:)\
dbhybcf(ibbc,1:jebc)=db1;
1==P.d(
dahybcb(ibbc,1:jebc)=da1;
vy>];!Cu
dbhybcb(ibbc,1:jebc)=db1;
?Yynd
e/g<<f-
for i=1:iebc
vY8WqG]
x1=(iebc-i+1)*dx;
s:qxAUi\/
x2=(iebc-i)*dx;
'` BjRg57]
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
e)fJd*P
ca1=exp(-sigmax*dt/(epsz*eps(1)));
yHV^a0e7EH
cb1=(1-ca1)*(sigmax*dx);
v]UU&Jq8U
caezxbcl(i,1:je)=ca1;
5pN08+
cbezxbcl(i,1:je)=cb1;
&VtWSq-)
caezxbcf(i,1:jebc)=ca1;
QH~8 aE_i
cbezxbcf(i,1:jebc)=cb1;
8,Q.t7v
caezxbcb(i,1:jebc)=ca1;
6z%&A]6k:
cbezxbcb(i,1:jebc)=cb1;
Cz$Hk;3\6
=l?"=HF
caezybcl(i,1:je)=ca(1);
z[$9B#P
cbezybcl(i,1:je)=cb(1);
|yId6v
dahxbcl(i,2:je)=da(1);
&D&5UdN x
dbhxbcl(i,2:je)=db(1);
sk%:Sp
end
9phD5b~j
\!' {-J
PEwW*4Xo
% RIGHT region
(<AM+|
dahybcr(ibbc,1:je)=1.0;
'w |s*5
dbhybcr(ibbc,1:je)=0.0;
,i$(yx?
for i=2:iebc
!pFKC)
x1=(i-0.5)*dx;
s\3Z?zm8
x2=(i-1.5)*dx;
S{`!9Pii
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
hoSU`X
sigmaxs=sigmax*(muz/(epsz*eps(1)));
%3@RZe
da1=exp(-sigmaxs*dt/muz);
'6Z/-V4k
db1=(1-da1)/(sigmaxs*dx);
D; 35@gtj
dahybcr(i,1:je)=da1;
:a^,Ei-&
dbhybcr(i,1:je)=db1;
=":V WHf
dahybcf(iebc+ie+i,1:jebc)=da1;
k*UR#z(I
dbhybcf(iebc+ie+i,1:jebc)=db1;
w$<fSe7
dahybcb(iebc+ie+i,1:jebc)=da1;
aF4V|?+
dbhybcb(iebc+ie+i,1:jebc)=db1;
sL[(cX?;2
end
Br.$L
sigmax=bcfactor*(0.5*dx)^(orderbc+1);
'piF_5(@
sigmaxs=sigmax*(muz/(epsz*eps(1)));
/i]=ndAk
da1=exp(-sigmaxs*dt/muz);
1dgN10
db1=(1-da1)/(sigmaxs*dx);
cvLcre% >A
dahy(ib,1:je)=da1;
BR0p0%
dbhy(ib,1:je)=db1;
aGzdur
dahybcf(iebc+ie+1,1:jebc)=da1;
bju,p"J1-E
dbhybcf(iebc+ie+1,1:jebc)=db1;
w1!\L_::Y
dahybcb(iebc+ie+1,1:jebc)=da1;
"l2N_xX;
dbhybcb(iebc+ie+1,1:jebc)=db1;
s"^YW+HMb
.tHv4.ob
for i=1:iebc
d9e H}#OY
x1=i*dx;
SUFaHHk@/b
x2=(i-1)*dx;
]P ?#lO6
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
uzn))/"
ca1=exp(-sigmax*dt/(epsz*eps(1)));
~?8x0
cb1=(1-ca1)/(sigmax*dx);
BOl$UJ|K
caezxbcr(i,1:je)=ca1;
?RjKP3P
cbezxbcr(i,1:je)=cb1;
~ @"Qm;} "
caezxbcf(iebc+ie+i,1:jebc)=ca1;
(L6]uNOG
cbezxbcf(iebc+ie+i,1:jebc)=cb1;
)*QTxN
caezxbcb(iebc+ie+i,1:jebc)=ca1;
J Wyoh|
cbezxbcb(iebc+ie+i,1:jebc)=cb1;
%+OPas8C
pa> 2JF*
caezybcr(i,1:je)=ca(1);
T;pn -
cbezybcr(i,1:je)=cb(1);
cE8 _keR~
dahxbcr(i,2:je)=da(1);
(k HQKQmq
dbhxbcr(i,2:je)=db(1);
tZ{q\+h
end
PFn[[~5V
%***********************************************************************
}Us$y0W\
% Movie initialization
4 >tYMyLt0
%***********************************************************************
y7L4jO9h
l?<z1Acd&
subplot(3,1,1),pcolor(hx');
a0W\?
shading flat;
9p'J(`
caxis([-0.2 0.2]);
Dp |FyP_w
axis([1 ie 1 jb]);
25@j2K (
colorbar;
{zN_l!
axis image;
/WgW e
axis off;
50hh0!1
title(['Hx at time step = 0']);
ob5nk^y
C- Rie[
subplot(3,1,2),pcolor(hy');
dGW7,B~
shading flat;
fvfVBk#
caxis([-0.2 0.2]);
wdDHRW0Y
axis([1 ib 1 je]);
%L|bF"K5;
colorbar;
>\x 39B
axis image;
=X'7V}Q}
axis off;
DczF0Ow
title(['Hy at time step = 0']);
M[N.H9
eu|q {p
subplot(3,1,3),pcolor(ez');
iBW6<2@oZF
shading flat;
J0W).mD_H
caxis([-80.0 80.0]);
"@?kxRn!
axis([1 ie 1 je]);
cTx/Y&\9
colorbar;
s^@Cq=
axis image;
(eE}W~Z
axis off;
cZT.vA#
title(['Ez at time step = 0']);
M@@O50~
S&) >w5*]U
rect=get(gcf,'Position');
+7OT`e %q
rect(1:2)=[0 0];
fhWD>;%F%
:%oj'm44!
M=moviein(nmax/4,gcf,rect);
"fJ|DE&@<i
%***********************************************************************
0lh6b3tdP
% BEGIN TIME-STEPPING LOOP
>^HTghgRD
%***********************************************************************
8mddI
for n=1:nmax
]+7c1MB(5
V/%;:ul.
%***********************************************************************
",_
% Update electric fields (EZ) in main grid
oT{yttSNo
%***********************************************************************
RYaofW
ez(1:ie,1:je)=caez(1:ie,1:je).*ez(1:ie,1:je)+cbez(1:ie,1:je).*(hy(2:ib,1:je)-hy(1:ie,1:je)-...
;7*@Gf}R
(hx(1:ie,2:jb)-hx(1:ie,1:je)));
0! %}
ez(is,js)=source(n);
)#Bfd(F
s""8V_,;
% update EZX in pml region
rM.<Gi05Qe
F;@&uXYgc
]}y'3aW
% FTONT
[ [CXMbD`*
ezxbcf(1:iefbc,1:jebc)=caezxbcf(1:iefbc,1:jebc).*ezxbcf(1:iefbc,1:jebc)+...
bu9&sQ;
cbezxbcf(1:iefbc,1:jebc).*(hybcf(2:ibfbc,1:jebc)-hybcf(1:iefbc,1:jebc));
o@;_(knb
bj{f[nZ d
% BACK
$zi\ /Yw
ezxbcb(1:iefbc,1:jebc)=caezxbcb(1:iefbc,1:jebc).*ezxbcb(1:iefbc,1:jebc)+...
WfO$q^'?DP
cbezxbcb(1:iefbc,1:jebc).*(hybcb(2:ibfbc,1:jebc)-hybcb(1:iefbc,1:jebc));
Xe+FMbBco
6u;(R0n
% LEFT
s\R?@
ezxbcl(1:iebc-1,1:je)=caezxbcl(1:iebc-1,1:je).*ezxbcl(1:iebc-1,1:je)+...
}"k(kH
cbezxbcl(1:iebc-1,1:je).*(hybcl(2:iebc,1:je)-hybcl(1:iebc-1,1:je));
MX\-)e#
ezxbcl(iebc,1:je)=caezxbcl(iebc,1:je).*ezxbcl(iebc,1:je)+...
DK%eFCo<~
cbezxbcl(iebc,1:je).*(hy(1,1:je)-hybcl(iebc,1:je));
T bWZw
% RIGHT
EIm\!'R]
ezxbcr(2:iebc,1:je)=caezxbcr(2:iebc,1:je).*ezxbcr(2:iebc,1:je)+...
e1Hx"7ew_
cbezxbcr(2:iebc,1:je).*(hybcr(3:ibbc,1:je)-hybcr(2:iebc,1:je));
1R9/AP
ezxbcr(1,1:je)=caezxbcr(1,1:je).*ezxbcr(1,1:je)+...
1=.kH[R
cbezxbcr(1,1:je).*(hybcr(2,1:je)-hy(ib,1:je));
XjU; oh4:.
;mlIWn
% update EZY in pml region
S,%HW87
XePBA J
% FRONT
D*,H%xA
ezybcf(1:iefbc,1:jebc-1)=caezybcf(1:iefbc,1:jebc-1).*ezybcf(1:iefbc,1:jebc-1)-...
hDsORh!i
cbezybcf(1:iefbc,1:jebc-1).*(hxbcf(1:iefbc,2:jebc)-hxbcf(1:iefbc,1:jebc-1));
RVnYe='
ezybcf(1:iebc,jebc)=caezybcf(1:iebc,jebc).*ezybcf(1:iebc,jebc)-...
(B#|3o
cbezybcf(1:iebc,jebc).*(hxbcl(1:iebc,1)-hxbcf(1:iebc,jebc));
T,>e\
ezybcf(iebc+1:iebc+ie,jebc)=caezybcf(iebc+1:iebc+ie,jebc).*ezybcf(iebc+1:iebc+ie,jebc)-...
#9Z-Hd<
cbezybcf(iebc+1:ie+iebc,jebc).*(hx(1:ie,1)-hxbcf(iebc+1:iebc+ie,jebc));
r%n[PK^(
ezybcf(iebc+ie+1:iefbc,jebc)=caezybcf(iebc+ie+1:iefbc,jebc).*ezybcf(ie+iebc+1:iefbc,jebc)-...
k({8C`&tK/
cbezybcf(ie+iebc+1:iefbc,jebc).*(hxbcr(1:iebc,1)-hxbcf(iebc+ie+1:iefbc,jebc));
YfKty0
$0t %}DE
% BACK
v%[mt`I
ezybcb(1:iefbc,2:jebc)=caezybcb(1:iefbc,2:jebc).*ezybcb(1:iefbc,2:jebc)-...
t57b)5{FM
cbezybcb(1:iefbc,2:jebc).*(hxbcb(1:iefbc,3:jbbc)-hxbcb(1:iefbc,2:jebc));
(J*0/7 eX
ezybcb(1:iebc,1)=caezybcb(1:iebc,1).*ezybcb(1:iebc,1)-...
6'zy"UkH
cbezybcb(1:iebc,1).*(hxbcb(1:iebc,2)-hxbcl(1:iebc,jb));
V.1sZYA9
ezybcb(iebc+1:iebc+ie,1)=caezybcb(iebc+1:iebc+ie,1).*ezybcb(iebc+1:iebc+ie,1)-...
_jz=BRO$
cbezybcb(iebc+1:iebc+ie,1).*(hxbcb(iebc+1:iebc+ie,2)-hx(1:ie,jb));
.5xM7,
ezybcb(iebc+ie+1:iefbc,1)=caezybcb(iebc+ie+1:iefbc,1).*ezybcb(iebc+ie+1:iefbc,1)-...
l?[DO?m+R
cbezybcb(iebc+ie+1:iefbc,1).*(hxbcb(iebc+ie+1:iefbc,2)-hxbcr(1:iebc,jb));
bHnQLJ
?#m5$CFp
% LEFT
{5JXg9um
ezybcl(1:iebc,1:je)=caezybcl(1:iebc,1:je).*ezybcl(1:iebc,1:je)-...
Xv:IbM> Qc
cbezybcl(1:iebc,1:je).*(hxbcl(1:iebc,2:jb)-hxbcl(1:iebc,1:je));
cj *4XYu
uX[ "w|
% RIGHT
d]]qy
ezybcr(1:iebc,1:je)=caezybcr(1:iebc,1:je).*ezybcr(1:iebc,1:je)-...
"Wp<^s sMo
cbezybcr(1:iebc,1:je).*(hxbcr(1:iebc,2:jb)-hxbcr(1:iebc,1:je));
HV(Kz
Y)`+u#` R
%***********************************************************************
?Dm&A$r
% Update electric fields (HX and HY) in main grid
p'*UM%@SIY
%***********************************************************************
|z%,W/Ef
hx(1:ie,2:je)=dahx(1:ie,2:je).*hx(1:ie,2:je)-dbhx(1:ie,2:je).*(ez(1:ie,2:je)-ez(1:ie,1:je-1));
UsTPNQj
K~]jXo^M
hy(2:ie,1:je)=dahy(2:ie,1:je).*hy(2:ie,1:je)+dbhy(2:ie,1:je).*(ez(2:ie,1:je)-ez(1:ie-1,1:je));
d,)L, J
j^.P=;
%update HX in pml region
0bE_iu>f'
6X7_QBC)
% FRONT
?x@khzk
hxbcf(1:iefbc,2:jebc)=dahxbcf(1:iefbc,2:jebc).*hxbcf(1:iefbc,2:jebc)-...
)[1m$>
dbhybcf(1:iefbc,2:jebc).*(ezxbcf(1:iefbc,2:jebc)+ezybcf(1:iefbc,2:jebc)-ezxbcf(1:iefbc,1:jebc-1)-ezybcf(1:iefbc,1:jebc-1));
=j0V/=
hx(1:ie,1)=dahx(1:ie,1).*hx(1:ie,1)-dbhx(1:ie,1).*(ez(1:ie,1)-ezxbcf(iebc+1:iebc+ie,jebc)-ezybcf(iebc+1:iebc+ie,jebc));
LHb{9x
1yu!:8=ee
% BACK
xcig'4L
hxbcb(1:iefbc,2:jebc)=dahxbcb(1:iefbc,2:jebc).*hxbcb(1:iefbc,2:jebc)-...
_,^sI%
dbhxbcb(1:iefbc,2:jebc).*(ezxbcb(1:iefbc,2:jebc)+ezybcb(1:iefbc,2:jebc)-ezxbcb(1:iefbc,1:jebc-1)-ezybcb(1:iefbc,1:jebc-1));
@4i DN
hx(1:ie,jb)=dahx(1:ie,jb).*hx(1:ie,jb)-dbhx(1:ie,jb).*(ezxbcb(iebc+1:iebc+ie,1)+ezybcb(iebc+1:iebc+ie,1)-ez(1:ie,je));
d\v _!7
_*9Zp1r
% LEFT
*u}):8=&R
hxbcl(1:iebc,2:je)=dahxbcl(1:iebc,2:je).*hxbcl(1:iebc,2:je)-...
EB#z\
dbhxbcl(1:iebc,2:je).*(ezxbcl(1:iebc,2:je)+ezybcl(1:iebc,2:je)-ezxbcl(1:iebc,1:je-1)-ezybcl(1:iebc,1:je-1));
/Q!F/HY3ZS
hxbcl(1:iebc,1)=dahxbcl(1:iebc,1).*hxbcl(1:iebc,1)-...
_MU'he^W
dbhxbcl(1:iebc,1).*(ezxbcl(1:iebc,1)+ezybcl(1:iebc,1)-ezxbcl(1:iebc,jebc)+ezybcl(1:iebc,jebc));
4jpF^&y7u^
hxbcl(1:iebc,jb)=dahxbcl(1:iebc,jb).*hxbcl(1:iebc,jb)-...
;IT^SHym
dbhxbcl(1:iebc,jb).*(ezxbcb(1:iebc,1)+ezybcb(1:iebc,1)-ezxbcl(1:iebc,je)-ezxbcl(1:iebc,je));
RjDFc:bB
5+UiAc$
% RIGHT
RY'y%6Z]ZO
hxbcr(1:iebc,2:je)=dahxbcr(1:iebc,2:je).*hxbcr(1:iebc,2:je)-...
Ut+m m\7
dbhxbcr(1:iebc,2:je).*(ezxbcr(1:iebc,2:je)+ezybcr(1:iebc,2:je)-ezxbcl(1:iebc,1:je-1)-ezybcl(1:iebc,1:je-1));
fHigLL0B
hxbcr(1:iebc,1)=dahxbcr(1:iebc,1).*hxbcr(1:iebc,1)-...
)~`zjVx_
dbhxbcr(1:iebc,1).*(ezxbcr(1:iebc,1)+ezybcr(1:iebc,1)-ezxbcf(ie+iebc+1:iefbc,jebc)-ezybcf(ie+iebc+1:iefbc,jebc));
Ssj'1[%
hxbcr(1:iebc,jb)=dahxbcr(1:iebc,jb).*hxbcr(1:iebc,1)-...
jK =[
dbhxbcr(1:iebc,jb).*(ezxbcb(iebc+ie+1:iefbc,1)+ezybcb(iebc+ie+1:iefbc,1)-ezxbcr(1:iebc,je)-ezybcr(1:iebc,je));
1}6pq2
ew(6;}+^/
<L J$GiU
%update HY in pml region
;VuIQ*@m"
i"'k|TGW^
% FRONT
6voK{C4J
hybcf(2:iefbc,1:jebc)=dahybcf(2:iefbc,1:jebc).*hybcf(2:iefbc,1:jebc)+...
4g 1h:I/
dbhybcf(2:iefbc,1:jebc).*(ezxbcf(2:iefbc,1:jebc)+ezybcf(2:iefbc,1:jebc)-ezxbcf(1:iefbc-1,1:jebc)-ezybcf(1:iefbc-1,1:jebc));
j- A|\:
(\}IOCNS
% BACK
Z|W=.RdA;
hybcb(2:iefbc,1:jebc)=dahybcb(2:iefbc,1:jebc).*hybcb(2:iefbc,1:jebc)+...
x\jHk}Buj
dbhybcb(2:iefbc,1:jebc).*(ezxbcb(2:iefbc,1:jebc)+ezybcb(2:iefbc,1:jebc)-ezxbcb(1:iefbc-1,1:jebc)-ezybcb(1:iefbc-1,1:jebc));
,w6?} N
^{s)`j'I*
% LEFT
Pc3u`Q L?
hybcl(2:iebc,1:je)=dahybcl(2:iebc,1:je).*hybcl(2:iebc,1:je)+...
_VlNZ/V
dbhybcl(2:iebc,1:je).*(ezxbcl(2:iebc,1:je)+ezybcl(2:iebc,1:je)-ezxbcl(1:iebc-1,1:je)-ezybcl(1:iebc-1,1:je));
i`Tne3)
hy(1,1:je)=dahy(1,1:je).*hy(1,1:je)+...
,'!&Z *
dbhy(1,1:je).*(ez(1,1:je)-ezxbcl(iebc,1:je)-ezybcl(iebc,1:je));
$H#&.IjY
vl#/8]0!
% RIGHT
;[xDc>&("Q
hybcr(2:iebc,1:je)=dahybcr(2:iebc,1:je).*hybcr(2:i ..
ql#K72s
U0rz 4fxc
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
附件:
tm模式pml中指数差分公式.doc
(29 K) 下载次数:14
共
条评分
离线
yuyeliuxu
UID :21110
注册:
2008-11-10
登录:
2009-10-09
发帖:
31
等级:
仿真一级
1楼
发表于: 2009-08-26 14:25:13
发散问题一般是程序中的方程编写出错,你可以看看是那个地方先开始发散的,问题就在那
共
1
条评分
gwzhao
技术分
+1
积极参与讨论+技术分 论坛感谢您的参与
2009-08-26
离线
gwzhao
方恨少
UID :17098
注册:
2008-08-24
登录:
2019-01-09
发帖:
1374
等级:
荣誉管理员
2楼
发表于: 2009-08-26 17:29:52
发散还是比较容易调试出来的,自己定下心来调调看吧。
共
条评分
逆流而上
离线
juventus
UID :20795
注册:
2008-11-05
登录:
2012-06-06
发帖:
18
等级:
仿真新人
3楼
发表于: 2009-08-28 09:32:36
感谢yuyeliuxu和gwzhao两位提供的建议,小弟静心调试得到了想要的结果。因是新人小弟到处怀疑可能出错的地方浪费的不少时间,回过头来才明白两位提供的建议真乃真知灼见,万分感谢。小弟也把修改后正确的程序贴上,希望也能对其他新人有所帮助。
f61~%@fE
该程序为2D情况下pml吸收边界 自由空间电磁波的传输,中间虽然有一段写到加入圆形柱体,但所设参数和自由空间电磁参数一致,故而可以认为没有添加散射圆柱。
XjL( V1
clear
% #|S
-Xx,"[sN\w
%***********************************************************************
yKq;EcVx
% Fundamental constants
R'&^)_
%***********************************************************************
q-p4k`]
vChkSY([
cc=2.99792458e8; %speed of light in free space
O+(Z`,^
muz=4.0*pi*1.0e-7; %permeability of free space
w[loV
epsz=1.0/(cc*cc*muz); %permittivity of free space
|h8C}P&Z
{9Y@?
freq=5.0e+9; %center frequency of source excitation
ca$D|3
lambda=cc/freq; %center wavelength of source excitation
,ad~6.Z_)
omega=2.0*pi*freq;
?c(f6p?%
gl00$}C
%***********************************************************************
$D8KEkW
% Grid parameters
Pq;1EI
%***********************************************************************
Y|KX:9Y@
NOo&5@z;H
ie=100; %number of grid cells in x-direction
Bxz{rR0XV
je=100; %number of grid cells in y-direction
2<YHo{0BLS
0p&:9|'z
ib=ie+1;
jhK&Z7;
jb=je+1;
l,pq;>c9a
&\K,kS [.r
is=ie/2; %location of z-directed hard source
p5>TL!4M
js=je/2; %location of z-directed hard source
Sd}fse
3^wJ4=^
dx=3.0e-3; %space increment of square lattice
, lT8gQ|u
dt=dx/(2.0*cc); %time step
"RZ)pav?
l&5| =
nmax=3000; %total number of time steps
tz._*n83
:P;#Y7}Y$
iebc=8; %thickness of left and right PML region
h jWRU#
jebc=8; %thickness of front and back PML region
V?5QpBKI
rmax=0.00001;
(w4#?_
orderbc=2;
dYk)RX`}7!
ibbc=iebc+1;
T%-F,i
jbbc=jebc+1;
Q >)?_O(
iefbc=ie+2*iebc;
Vs\)w>JF
jefbc=je+2*jebc;
2.?:[1g!
ibfbc=iefbc+1;
u.$.RkNMQ
jbfbc=jefbc+1;
o]PSyVg
Y~gpi L3u
%***********************************************************************
aD24)?db-
% Material parameters
>aN@)=h}
%***********************************************************************
.r[J} O"
<&b ~(f
media=2;
@q[-,EA9
rTW1'@E
eps=[1.0 1.0];
kMN z5P
sig=[0.0 0.0];
v#=WdaNz
mur=[1.0 1.0];
I-&/]<5y
sim=[0.0 0.0];
CK'Cf{S
xLq+njH E
%***********************************************************************
<N+l"Re#]
% Wave excitation
OjyS ?YY)b
%***********************************************************************
e Hd{'J<
Br1JZHgA
source=zeros(1,nmax);
ojtc Kw
for n=1:nmax
B_c(3n-"
source(n)=90*sin(omega*n*dt);
Ay"x<JB{U2
end
nolTvqMT
=@w};e#D
%***********************************************************************
wp.'M?6`L
% Field arrays
;cxYX/fJ
%***********************************************************************
,Sghi&Ky
ez=zeros(ie,je);
<$,iYx
hx=zeros(ie,jb); %fields in main grid
%+xh
hy=zeros(ib,je);
nPvR
B>YrDJUN
ezxbcf=zeros(iefbc,jebc);
%D e<H*
ezybcf=zeros(iefbc,jebc);
DCP"
hxbcf=zeros(iefbc,jebc); %fields in front pml
|I85]'K9a
hybcf=zeros(ibfbc,jebc);
;2#H M^Mu
.Uha %~%
ezxbcb=zeros(iefbc,jebc);
nLdI>c9R
ezybcb=zeros(iefbc,jebc);
>(:KEA
hxbcb=zeros(iefbc,jbbc); %fields in back pml
)1lYfJ
hybcb=zeros(ibfbc,jebc);
9FH=Jp
}5zH3MPQH
ezxbcl=zeros(iebc,je);
N[dhNK"
ezybcl=zeros(iebc,je);
?HZ+fS,-
hxbcl=zeros(iebc,jb); %fields in left pml
E2!;W8M
hybcl=zeros(iebc,je);
>SSF:hI"J
SYa!IL-B
ezxbcr=zeros(iebc,je);
3Mr)oM<Q
ezybcr=zeros(iebc,je);
;y4 "wBX
hxbcr=zeros(iebc,jb); %fields in right pml
ikyvst>O
hybcr=zeros(ibbc,je);
Z+I[
@ iao"&
%***********************************************************************
9~Q.[ A
% Updating coefficients
tGv4 S\
%***********************************************************************
(p^q3\
;t[<!
for i=1:media
_U#ue
eaf =dt*sig(i)/(2.0*epsz*eps(i));
8%vk"h:u:
ca(i)=(1.0-eaf)/(1.0+eaf);
]*I&104{
cb(i)=dt/epsz/eps(i)/dx/(1.0+eaf);
aHwrFkn
haf =dt*sim(i)/(2.0*muz*mur(i));
Il*wVNrZI
da(i)=(1.0-haf)/(1.0+haf);
yZdM4`
db(i)=dt/muz/mur(i)/dx/(1.0+haf);
{IqbO>|"O_
end
B5J=q("P
#UI@<0P)
%***********************************************************************
rw8db'
% Geometry specification (main grid)
w9i1ag
%***********************************************************************
|/YT.c%
*gVRMSrx4
% Initialize entire main grid to free space
3 T&m
caez(1:ie,1:je)=ca(1);
vF1]L]z:?
cbez(1:ie,1:je)=cb(1);
83)2c a
jNrGsIY$
dahx(1:ie,1:jb)=da(1);
M6y:ze
dbhx(1:ie,1:jb)=db(1);
YX@[z 5*
>E[cl\5$E
dahy(1:ib,1:je)=da(1);
=(.HO:#
dbhy(1:ib,1:je)=db(1);
MLId3#Q
,#D&*
% Add metal cylinder
PlTY^N6Hn
]e)<CE2
diam=20; % diameter of cylinder: 6 cm
>(~;V;
rad=diam/2.0; % radius of cylinder: 3 cm
U*[/F)!
icenter=4*ie/5; % i-coordinate of cylinder's center
gQ,PG
jcenter=je/2; % j-coordinate of cylinder's center
pPeS4$Y
;]vE"M x$
for i=1:ie
hZc$`V=R
for j=1:je
vY}/CBmg
dist2=(i-icenter)^2 + (j-jcenter)^2;
AGS?<6W-
if dist2 <= rad^2
U1J?o#(
caez(i,j)=ca(2);
QTtcGU
cbez(i,j)=cb(2);
W}a&L
end
o}Dy\UfU
end
umSbxEZU@
end
),dXaP[
J?u@' "u
%***********************************************************************
o;_v'
% Fill the PML regions
*%\z#Bje@
%***********************************************************************
Xxp<qIEm
F0+ u#/#
delbc=iebc*dx;
D]Bvjh
sigmam=-log(rmax/100.0)*epsz*cc*(orderbc+1)/(2*delbc);
j`='SzVloW
bcfactor=eps(1)*sigmam/(dx*(delbc^orderbc)*(orderbc+1));
`NyvJt^<
l#V"14y
% FRONT region
lUUeM\
dahxbcf(1:iefbc,1)=1.0;
$>]7NT P
dbhxbcf(1:iefbc,1)=0.0;
b2r@vZ]D
for j=2:jebc
gtVI>D'(W
y1=(jebc-j+1.5)*dx;
cZ%weQa#N)
y2=(jebc-j+0.5)*dx;
W@JmG`Sy
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
W32bBzhL
sigmays=sigmay*(muz/(epsz*eps(1)));
W?5^cEF
da1=exp(-sigmays*dt/muz);
;r"YZs&Xd
db1=(1-da1)/(sigmays*dx);
V!a\:%#^Y
dahxbcf(1:iefbc,j)=da1;
$IUT5Gia`
dbhxbcf(1:iefbc,j)=db1;
>Vn;1 |w
end
%Nzg~ZPbmT
sigmay=bcfactor*(0.5*dx)^(orderbc+1);
b jZcWYT
sigmays=sigmay*(muz/(epsz*eps(1)));
j<Lj1P3
da1=exp(-sigmays*dt/muz);
9ZeTS~i
db1=(1-da1)/(sigmays*dx);
7M=`Z{=9
dahx(1:ie,1)=da1;
]'EtLFv)
dbhx(1:ie,1)=db1;
q.g<g u]
dahxbcl(1:iebc,1)=da1;
[8(e`6xePb
dbhxbcl(1:iebc,1)=db1;
BC9rsb
dahxbcr(1:iebc,1)=da1;
A +e ={-*
dbhxbcr(1:iebc,1)=db1;
!#5RP5,,Y
q}U^H
for j=1:iebc
|!aMj8i2
y1=(jebc-j+1)*dx;
NoV)}fX$X8
y2=(jebc-j)*dx;
y4w{8;Mh
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
Wg3y y8vIW
ca1=exp(-sigmay*dt/(epsz*eps(1)));
'Oyz/P(p
cb1=(1.0-ca1)/(sigmay*dx);
{%)bxk6
caezybcf(1:iefbc,j)=ca1;
~(~fuDT~O
cbezybcf(1:iefbc,j)=cb1;
jyb/aov
caezxbcf(1:iefbc,j)=ca(1);
:1PT`:Y
cbezxbcf(1:iefbc,j)=cb(1);
4 B"tz!
dahybcf(1:ibfbc,j)=da(1);
_qR1M):yJ
dbhybcf(1:ibfbc,j)=db(1);
))K3pKyb
end
>RG }u
Uw8O"}U8
% BACK region
Rjqeuyj:
dahxbcb(1:iefbc,jbbc)=1.0;
n? e&I>1W
dbhxbcb(1:iefbc,jbbc)=0.0;
WSz#g2a
for j=2:jebc
n{s `XyH
y1=(j-0.5)*dx;
p-POg%|&<
y2=(j-1.5)*dx;
}te\) Yk.N
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
O-[ lL"T
sigmays=sigmay*(muz/(epsz*eps(1)));
Eaf6rjD
da1=exp(-sigmays*dt/muz);
N,0l5fD~T
db1=(1-da1)/(sigmays*dx);
_DnZ=&=MA
dahxbcb(1:iefbc,j)=da1;
,_,Z<X/
dbhxbcb(1:iefbc,j)=db1;
0 XxU1w8\V
end
8J-$+ ;
sigmay=bcfactor*(0.5*dx)^(orderbc+1);
d9^ uEz(
sigmays=sigmay*(muz/(epsz*eps(1)));
t:B~P,r
da1=exp(-sigmays*dt/muz);
\dO9nwa?
db1=(1-da1)/(sigmays*dx);
.bE+dA6:v
dahx(1:ie,jb)=da1;
_WO*N9Iz
dbhx(1:ie,jb)=db1;
Km7HB!=<
dahxbcl(1:iebc,jb)=da1;
2Z;wU]
dbhxbcl(1:iebc,jb)=db1;
g <S&sYF5
dahxbcr(1:iebc,jb)=da1;
q+<X*yC
dbhxbcr(1:iebc,jb)=db1;
H`odQkZ!
e <2?O
for j=1:jebc
P1tc*2Z
y1=j*dx;
FH:^<^M
y2=(j-1)*dx;
\ bNN]=
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
mxt fKPb
ca1=exp(-sigmay*dt/(epsz*eps(1)));
O~sv^
cb1=(1-ca1)/(sigmay*dx);
.-2i9Bh6
caezybcb(1:iefbc,j)=ca1;
wQ]!Y?I
cbezybcb(1:iefbc,j)=cb1;
3 (Bd`=9
caezxbcb(1:iefbc,j)=ca(1);
6g06s @kz
cbezxbcb(1:iefbc,j)=cb(1);
MHar9)$}
dahybcb(1:ibfbc,j)=da(1);
BV_rk^}Ur
dbhybcb(1:ibfbc,j)=db(1);
I-<U u2
end
;;#28nV
{=};<;_F
\ t4:(Jp 3
% LEFT region
=8:m:Y&|`G
dahybcl(1,1:je)=1.0;
~IrrX,mp:
dbhybcl(1,1:je)=0.0;
b|F4E{{D^
for i=2:iebc
*Y'nDv6_P
x1=(iebc-i+1.5)*dx;
"O@L IR7
x2=(iebc-i+0.5)*dx;
TN!8J=sx.
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
.;nU" a3'
sigmaxs=sigmax*(muz/(epsz*eps(1)));
qYjR
da1=exp(-sigmaxs*dt/muz);
X <QSi
db1=(1-da1)/(sigmaxs*dx);
BSU%.tmI
dahybcl(i,1:je)=da1;
.H;[s
dbhybcl(i,1:je)=db1;
$3.hZx>
dahybcf(i,1:jebc)=da1;
[HNWM/ff7+
dbhybcf(i,1:jebc)=db1;
H809gm3(Z
dahybcb(i,1:jebc)=da1;
O_-Lm4g?4
dbhybcb(i,1:jebc)=db1;
{6}H}_(]
end
EMK>7 aks
sigmax=bcfactor*(0.5*dx)^(orderbc+1);
)lB 3U
sigmaxs=sigmax*(muz/(epsz*eps(1)));
u~[=5r
da1=exp(-sigmaxs*dt/muz);
{-?^j{O0.
db1=(1-da1)/(sigmaxs*dx);
+$_.${uwV
dahy(1,1:je)=da1;
Fb8~2N"3
dbhy(1,1:je)=db1;
y8~/EyY|^
dahybcf(ibbc,1:jebc)=da1;
pYXusS7S
dbhybcf(ibbc,1:jebc)=db1;
IXQxjqd^
dahybcb(ibbc,1:jebc)=da1;
j'xk[bM
dbhybcb(ibbc,1:jebc)=db1;
l6kq P
p@`]9tLP(K
for i=1:iebc
M`m-@z
x1=(iebc-i+1)*dx;
CG!7BP\
x2=(iebc-i)*dx;
aS2Mx~
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
1dsMmD[O
ca1=exp(-sigmax*dt/(epsz*eps(1)));
~%.<rc0
cb1=(1-ca1)/(sigmax*dx);
@ ={Hx$zL
caezxbcl(i,1:je)=ca1;
B}OM:0
cbezxbcl(i,1:je)=cb1;
b9 Gq';o
caezxbcf(i,1:jebc)=ca1;
Cf&.hod
cbezxbcf(i,1:jebc)=cb1;
i"4&UJu1;
caezxbcb(i,1:jebc)=ca1;
.eZsKc-@
cbezxbcb(i,1:jebc)=cb1;
p0r:U<&
?7?hDw_Nk
caezybcl(i,1:je)=ca(1);
4n}tDHvd
cbezybcl(i,1:je)=cb(1);
<d`ksZ+
dahxbcl(i,2:je)=da(1);
fm u;Pb]r
dbhxbcl(i,2:je)=db(1);
816OV
end
"~:AsZ"7
%t.L;G
aFfd!a"n
% RIGHT region
4xYW?s(
dahybcr(ibbc,1:je)=1.0;
;&K +x@
dbhybcr(ibbc,1:je)=0.0;
E$8D^Zt
for i=2:iebc
V1h&{D\"
x1=(i-0.5)*dx;
P84uEDY
x2=(i-1.5)*dx;
}hoyjzv]L
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
lPBWpHX
sigmaxs=sigmax*(muz/(epsz*eps(1)));
~d.Z.AD
da1=exp(-sigmaxs*dt/muz);
;kE|Vx
db1=(1-da1)/(sigmaxs*dx);
N?Nu'
dahybcr(i,1:je)=da1;
_/\U
dbhybcr(i,1:je)=db1;
p$S\l] ,
dahybcf(iebc+ie+i,1:jebc)=da1;
_{k-&I
dbhybcf(iebc+ie+i,1:jebc)=db1;
f$2DV:wuC
dahybcb(iebc+ie+i,1:jebc)=da1;
]i)g!J8f-
dbhybcb(iebc+ie+i,1:jebc)=db1;
ZYMacTeJjg
end
v-utDQT3
sigmax=bcfactor*(0.5*dx)^(orderbc+1);
RkMs!M
sigmaxs=sigmax*(muz/(epsz*eps(1)));
|<2g^ZK)
da1=exp(-sigmaxs*dt/muz);
@Q%9b )\\
db1=(1-da1)/(sigmaxs*dx);
O~udlVn<6
dahy(ib,1:je)=da1;
t5M"M{V
dbhy(ib,1:je)=db1;
9P7^*f:E
dahybcf(iebc+ie+1,1:jebc)=da1;
?D?ldg
dbhybcf(iebc+ie+1,1:jebc)=db1;
*h V$\CLT.
dahybcb(iebc+ie+1,1:jebc)=da1;
;1[a*z<l&s
dbhybcb(iebc+ie+1,1:jebc)=db1;
lL<LJ :L
+m>)q4e
for i=1:iebc
:svKE.7{
x1=i*dx;
Sy0-tK4
x2=(i-1)*dx;
S A\_U::T
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
{0Jpf[.f
ca1=exp(-sigmax*dt/(epsz*eps(1)));
cxig <W
cb1=(1-ca1)/(sigmax*dx);
z&Kh$ $)[
caezxbcr(i,1:je)=ca1;
6[k7e!&
cbezxbcr(i,1:je)=cb1;
ahmxbv3f=5
caezxbcf(iebc+ie+i,1:jebc)=ca1;
QNcbl8@
cbezxbcf(iebc+ie+i,1:jebc)=cb1;
%p}xW V .
caezxbcb(iebc+ie+i,1:jebc)=ca1;
cAQ_/>
cbezxbcb(iebc+ie+i,1:jebc)=cb1;
={k_ (8]
O,_k.EH
caezybcr(i,1:je)=ca(1);
K @h94Ni6
cbezybcr(i,1:je)=cb(1);
PJn|
dahxbcr(i,2:je)=da(1);
}b/Xui9Q
dbhxbcr(i,2:je)=db(1);
v~AD7k2{8
end
4R&e5!
%***********************************************************************
tVr^1Y
% Movie initialization
Evy_I+l
%***********************************************************************
;/R \!E
o ?`LZd:{
'mm~+hp
<KEVA?0>
subplot(1,1,1),pcolor(ez');
d cG)ql4d
shading flat;
6=3;(2u[C"
caxis([-80.0 80.0]);
Bgf'Hm%r
axis([1 ie 1 je]);
r=4vN=:
colorbar;
ph~d%/^jI
axis image;
dhCrcYn
axis off;
wN2D{Jj
title(['Ez at time step=0']);
/DGEI&}&:u
QZ2a1f'G
rect=get(gcf,'Position');
h{/lW#[
rect(1:2)=[0 0];
"wj~KbT}&
nqC@dHP
M=moviein(nmax/4,gcf,rect);
dUc([&
%***********************************************************************
9?Q0O\&uP
% BEGIN TIME-STEPPING LOOP
,\'E<O2T
%***********************************************************************
Cb i;CF\{
for n=1:nmax
i~i ?M)
Qk?J4 B
%***********************************************************************
%uQOAe55
% Update electric fields (EZ) in main grid
i0g/'ZP
%***********************************************************************
fI"OzIJV
ez(1:ie,1:je)=caez(1:ie,1:je).*ez(1:ie,1:je)+cbez(1:ie,1:je).*(hy(2:ib,1:je)-hy(1:ie,1:je)-...
iL8:I)z
(hx(1:ie,2:jb)-hx(1:ie,1:je)));
& oj$h
ez(is,js)=source(n);
HvJ-P#
V: P
% update EZX in pml region
v:zKn[;o
E! mxa
=`/GBT$
% FTONT
7Rl/F1G o}
ezxbcf(1:iefbc,1:jebc)=caezxbcf(1:iefbc,1:jebc).*ezxbcf(1:iefbc,1:jebc)+...
BRF4p:
cbezxbcf(1:iefbc,1:jebc).*(hybcf(2:ibfbc,1:jebc)-hybcf(1:iefbc,1:jebc));
@E%fAC
X(qs]:
% BACK
iM +p{/bN
ezxbcb(1:iefbc,1:jebc)=caezxbcb(1:iefbc,1:jebc).*ezxbcb(1:iefbc,1:jebc)+...
[t+qYe8
cbezxbcb(1:iefbc,1:jebc).*(hybcb(2:ibfbc,1:jebc)-hybcb(1:iefbc,1:jebc));
xv9G%
30<3DA_P
% LEFT
dCO7"/IHW
ezxbcl(1:iebc-1,1:je)=caezxbcl(1:iebc-1,1:je).*ezxbcl(1:iebc-1,1:je)+...
L5n /eg:Q
cbezxbcl(1:iebc-1,1:je).*(hybcl(2:iebc,1:je)-hybcl(1:iebc-1,1:je));
DP08$Iq
ezxbcl(iebc,1:je)=caezxbcl(iebc,1:je).*ezxbcl(iebc,1:je)+...
N/8_0]Gf
cbezxbcl(iebc,1:je).*(hy(1,1:je)-hybcl(iebc,1:je));
yo]8QO]97
% RIGHT
SS7C|*-Zd
ezxbcr(2:iebc,1:je)=caezxbcr(2:iebc,1:je).*ezxbcr(2:iebc,1:je)+...
E, ;'n
cbezxbcr(2:iebc,1:je).*(hybcr(3:ibbc,1:je)-hybcr(2:iebc,1:je));
5$%CRm
ezxbcr(1,1:je)=caezxbcr(1,1:je).*ezxbcr(1,1:je)+...
.&;:X )
cbezxbcr(1,1:je).*(hybcr(2,1:je)-hy(ib,1:je));
is6d:p
nV>=n,+s"
% update EZY in pml region
sUN9E4
K/|qn)
% FRONT
|l673FcJ
ezybcf(1:iefbc,1:jebc-1)=caezybcf(1:iefbc,1:jebc-1).*ezybcf(1:iefbc,1:jebc-1)-...
<I.{meDg
cbezybcf(1:iefbc,1:jebc-1).*(hxbcf(1:iefbc,2:jebc)-hxbcf(1:iefbc,1:jebc-1));
a8cX{6
ezybcf(1:iebc,jebc)=caezybcf(1:iebc,jebc).*ezybcf(1:iebc,jebc)-...
3&5AbIZ
cbezybcf(1:iebc,jebc).*(hxbcl(1:iebc,1)-hxbcf(1:iebc,jebc));
x>[f+Tc
ezybcf(iebc+1:iebc+ie,jebc)=caezybcf(iebc+1:iebc+ie,jebc).*ezybcf(iebc+1:iebc+ie,jebc)-...
6bd{3@
cbezybcf(iebc+1:ie+iebc,jebc).*(hx(1:ie,1)-hxbcf(iebc+1:iebc+ie,jebc));
n{E9p3i
ezybcf(iebc+ie+1:iefbc,jebc)=caezybcf(iebc+ie+1:iefbc,jebc).*ezybcf(ie+iebc+1:iefbc,jebc)-...
Cg&:+
cbezybcf(ie+iebc+1:iefbc,jebc).*(hxbcr(1:iebc,1)-hxbcf(iebc+ie+1:iefbc,jebc));
CQI\/oaO
jFGY`9Zw0
% BACK
m?]= =9
ezybcb(1:iefbc,2:jebc)=caezybcb(1:iefbc,2:jebc).*ezybcb(1:iefbc,2:jebc)-...
oG' 'my#3
cbezybcb(1:iefbc,2:jebc).*(hxbcb(1:iefbc,3:jbbc)-hxbcb(1:iefbc,2:jebc));
9ve)+Lk
ezybcb(1:iebc,1)=caezybcb(1:iebc,1).*ezybcb(1:iebc,1)-...
G4QsR7
cbezybcb(1:iebc,1).*(hxbcb(1:iebc,2)-hxbcl(1:iebc,jb));
^#&PTq>
ezybcb(iebc+1:iebc+ie,1)=caezybcb(iebc+1:iebc+ie,1).*ezybcb(iebc+1:iebc+ie,1)-...
~'t+X
cbezybcb(iebc+1:iebc+ie,1).*(hxbcb(iebc+1:iebc+ie,2)-hx(1:ie,jb));
17S<6j#H5
ezybcb(iebc+ie+1:iefbc,1)=caezybcb(iebc+ie+1:iefbc,1).*ezybcb(iebc+ie+1:iefbc,1)-...
~5 e 1&
cbezybcb(iebc+ie+1:iefbc,1).*(hxbcb(iebc+ie+1:iefbc,2)-hxbcr(1:iebc,jb));
G[s/M\l
*ez7Q
% LEFT
]6;oS-4gu?
ezybcl(1:iebc,1:je)=caezybcl(1:iebc,1:je).*ezybcl(1:iebc,1:je)-...
x_OZdI
cbezybcl(1:iebc,1:je).*(hxbcl(1:iebc,2:jb)-hxbcl(1:iebc,1:je));
&n9srs
0uhIJc'2
% RIGHT
VCc57Bo
ezybcr(1:iebc,1:je)=caezybcr(1:iebc,1:je).*ezybcr(1:iebc,1:je)-...
B5MEE
cbezybcr(1:iebc,1:je).*(hxbcr(1:iebc,2:jb)-hxbcr(1:iebc,1:je));
"xp>Vj
8rM1kOCf
%***********************************************************************
'OvyQ/T
% Update electric fields (HX and HY) in main grid
v0,&wdi
%***********************************************************************
*@[N~:z/
hx(1:ie,2:je)=dahx(1:ie,2:je).*hx(1:ie,2:je)-dbhx(1:ie,2:je).*(ez(1:ie,2:je)-ez(1:ie,1:je-1));
2X|nPhNi
0&2eiMKG?n
hy(2:ie,1:je)=dahy(2:ie,1:je).*hy(2:ie,1:je)+dbhy(2:ie,1:je).*(ez(2:ie,1:je)-ez(1:ie-1,1:je));
a.B<W9$`
Ahrtl6@AS
%update HX in pml region
U'Fc\M5l/l
z[*Y%o8-r
% FRONT
aKk0kC
hxbcf(1:iefbc,2:jebc)=dahxbcf(1:iefbc,2:jebc).*hxbcf(1:iefbc,2:jebc)-...
MVZ9x%
dbhxbcf(1:iefbc,2:jebc).*(ezxbcf(1:iefbc,2:jebc)+ezybcf(1:iefbc,2:jebc)-ezxbcf(1:iefbc,1:jebc-1)-ezybcf(1:iefbc,1:jebc-1));
[K#pU:lTH
hx(1:ie,1)=dahx(1:ie,1).*hx(1:ie,1)-dbhx(1:ie,1).*(ez(1:ie,1)-ezxbcf(iebc+1:iebc+ie,jebc)-ezybcf(iebc+1:iebc+ie,jebc));
U_1N*XK6$
apd"p{
% BACK
c%x.cbu>
hxbcb(1:iefbc,2:jebc)=dahxbcb(1:iefbc,2:jebc).*hxbcb(1:iefbc,2:jebc)-...
am#(ms
dbhxbcb(1:iefbc,2:jebc).*(ezxbcb(1:iefbc,2:jebc)+ezybcb(1:iefbc,2:jebc)-ezxbcb(1:iefbc,1:jebc-1)-ezybcb(1:iefbc,1:jebc-1));
zZI7p[A[3
hx(1:ie,jb)=dahx(1:ie,jb).*hx(1:ie,jb)-dbhx(1:ie,jb).*(ezxbcb(iebc+1:iebc+ie,1)+ezybcb(iebc+1:iebc+ie,1)-ez(1:ie,je));
0=c:O
7,,#f&jP
% LEFT
cDqj&:$e
hxbcl(1:iebc,2:je)=dahxbcl(1:iebc,2:je).*hxbcl(1:iebc,2:je)-...
xT;j_'9U;
dbhxbcl(1:iebc,2:je).*(ezxbcl(1:iebc,2:je)+ezybcl(1:iebc,2:je)-ezxbcl(1:iebc,1:je-1)-ezybcl(1:iebc,1:je-1));
?J's>q^X
hxbcl(1:iebc,1)=dahxbcl(1:iebc,1).*hxbcl(1:iebc,1)-...
06fs,!Q@
dbhxbcl(1:iebc,1).*(ezxbcl(1:iebc,1)+ezybcl(1:iebc,1)-ezxbcf(1:iebc,jebc)-ezybcf(1:iebc,jebc));
xqLIs:*
hxbcl(1:iebc,jb)=dahxbcl(1:iebc,jb).*hxbcl(1:iebc,jb)-...
GL8 N!,
dbhxbcl(1:iebc,jb).*(ezxbcb(1:iebc,1)+ezybcb(1:iebc,1)-ezxbcl(1:iebc,je)-ezybcl(1:iebc,je));
!)h?2#V8;
p^i]{"sjbU
% RIGHT
/<it2=
hxbcr(1:iebc,2:je)=dahxbcr(1:iebc,2:je).*hxbcr(1:iebc,2:je)-...
Cswa5l`af
dbhxbcr(1:iebc,2:je).*(ezxbcr(1:iebc,2:je)+ezybcr(1:iebc,2:je)-ezxbcr(1:iebc,1:je-1)-ezybcr(1:iebc,1:je-1));
KSy.
hxbcr(1:iebc,1)=dahxbcr(1:iebc,1).*hxbcr(1:iebc,1)-...
iYl$25k/1
dbhxbcr(1:iebc,1).*(ezxbcr(1:iebc,1)+ezybcr(1:iebc,1)-ezxbcf(ie+iebc+1:iefbc,jebc)-ezybcf(ie+iebc+1:iefbc,jebc));
4Vrx9 sA1
hxbcr(1:iebc,jb)=dahxbcr(1:iebc,jb).*hxbcr(1:iebc,jb)-...
\'Ewn8Qv8
dbhxbcr(1:iebc,jb).*(ezxbcb(iebc+ie+1:iefbc,1)+ezybcb(iebc+ie+1:iefbc,1)-ezxbcr(1:iebc,je)-ezybcr(1:iebc,je));
&$hT27A>k
b%M|R%)]
q<!KtI4
%update HY in pml region
&{(8EvuDd
~ZXAW~a}
% FRONT
ybgAyJ{J<
hybcf(2:iefbc,1:jebc)=dahybcf(2:iefbc,1:jebc).*hybcf(2:iefbc,1:jebc)+...
jN^09T49
dbhybcf(2:iefbc,1:jebc).*(ezxbcf(2:iefbc,1:jebc)+ezybcf(2:iefbc,1:jebc)-ezxbcf(1:iefbc-1,1:jebc)-ezybcf(1:iefbc-1,1:jebc));
)0xEI
=[G)
% BACK
uq_h8JH$
hybcb(2:iefbc,1:jebc)=dahybcb(2:iefbc,1:jebc).*hybcb(2:iefbc,1:jebc)+...
4Q FX
dbhybcb(2:iefbc,1:jebc).*(ezxbcb(2:iefbc,1:jebc)+ezybcb(2:iefbc,1:jebc)-ezxbcb(1:iefbc-1,1:jebc)-ezybcb(1:iefbc-1,1:jebc));
Mq2[^l!qu
nO7#m~
% LEFT
XqK\'8]\Mw
hybcl(2:iebc,1:je)=dahybcl(2:iebc,1:je).*hybcl(2:iebc,1:je)+...
TLiA>`r=
dbhybcl(2:iebc,1:je).*(ezxbcl(2:iebc,1:je)+ezybcl(2:iebc,1:je)-ezxbcl(1:iebc-1,1:je)-ezybcl(1:iebc-1,1:je));
`-[+(+["
hy(1,1:je)=dahy(1,1:je).*hy(1,1:je)+...
]z_C7Y"4BR
dbhy(1,1:je).*(ez(1,1:je)-ezxbcl(iebc,1:je)-ezybcl(iebc,1:je));
>m&r,z
?L~Z]+-
% RIGHT
Il,^/qvIY
hybcr(2:iebc,1:je)=dahybcr(2:iebc,1:je).*hybcr(2:iebc,1:je)+...
Zfn390 _
dbhybcr(2:iebc,1:je).*(ezxbcr(2:iebc,1:je)+ezybcr(2:iebc,1:je)-ezxbcr(1:iebc-1,1:je)-ezybcr(1:iebc-1,1:je));
d*TpHLm
hy(ib,1:je)=dahy(ib,1:je).*hy(ib,1:je)+...
UONW3}-
dbhy(ib,1:je).*(ezxbcr(1,1:je)+ezybcr(1,1:je)-ez(ie,1:je));
7+^4v(s
\qh -fW; #
%***********************************************************************
!%_H1jk
% Visualize fields
hr] :bR
%***********************************************************************
ViG4tb
,-[dr|.
if mod(n,4)==0;
MOEB{~v`;
B[rxV
timestep=int2str(n);
:g[G&Ds8
$6]7>:8mz
subplot(1,1,1),pcolor(ez');
wc5OK0|
shading flat;
)wwQv2E
caxis([-80.0 80.0]);
!.ot&EbE
axis([1 ie 1 je]);
%7oB[2
colorbar;
7VwLyy
axis image;
^"d!(npw
axis off;
#Ua+P(1q
title(['Ez at time step = ',timestep]);
uY;2tZldf=
<