登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
fdtd2d_tm_pml为何出现电磁场分量变成无限大的 ..
发帖
回复
1943
阅读
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波模式 但是出现了电磁场迅速增大的问题。请教下各位大侠,程序附如下
jkx>o?s)z
)gEE7Ex?
clear
3fhY+$tq
XQ]vJQYIR
%***********************************************************************
Ai1"UYk\\Y
% Fundamental constants
Rey+3*zUb
%***********************************************************************
Yr/$92(
&U7v=a
cc=2.99792458e8; %speed of light in free space
o6px1C:
muz=4.0*pi*1.0e-7; %permeability of free space
A{ ~D_q
epsz=1.0/(cc*cc*muz); %permittivity of free space
O{_t*sO9q*
X7huc*
freq=5.0e+9; %center frequency of source excitation
8Y.qP"s
lambda=cc/freq; %center wavelength of source excitation
}[;ZZm?
omega=2.0*pi*freq;
-0d9,,c
le\-h'D
%***********************************************************************
1hY| XZ%qd
% Grid parameters
m2\\!C]f
%***********************************************************************
L@{'J
\Q|-Npw
ie=100; %number of grid cells in x-direction
wn5OgXxG<
je=50; %number of grid cells in y-direction
S>0%jCjW
<rj'xv
ib=ie+1;
h(HpeN%`#
jb=je+1;
RJ'[m~yl5X
PPB/-F]rr
is=15; %location of z-directed hard source
|@iM(MM[?
js=je/2; %location of z-directed hard source
%-!%n=P
Jg;[k
dx=3.0e-3; %space increment of square lattice
l.o/H|
dt=dx/(2.0*cc); %time step
FC] *^B
yws'}{8
nmax=2; %total number of time steps
ng3ZK
|${4sUR
iebc=8; %thickness of left and right PML region
EL$DvJ~
jebc=8; %thickness of front and back PML region
~j'D%:[+VH
rmax=0.00001;
UHZ&7jfl
orderbc=2;
SYYx>1;8`
ibbc=iebc+1;
7]vmtlL
jbbc=jebc+1;
C P}fxDW
iefbc=ie+2*iebc;
e'.BTt58Y
jefbc=je+2*jebc;
iz# R)EB/g
ibfbc=iefbc+1;
`/PBZnj
jbfbc=jefbc+1;
fA6IW(_bi
G0UaE1n
%***********************************************************************
V|MHDMD=
% Material parameters
%6320 x
%***********************************************************************
y>y2,x+[
3p=Xv%xd
media=2;
\R<MQ# x
b!]O]dk#
eps=[1.0 1.0];
]ub"OsXC
sig=[0.0 1.0e+7];
R^.PKT2E
mur=[1.0 1.0];
k~8-Eu1
sim=[0.0 0.0];
BA c+T
1 %P-X!
%***********************************************************************
?>h ~"D#
% Wave excitation
t2o{=!$WH
%***********************************************************************
wuH*a3(
"Xv} l@
rtau=160.0e-12;
Vc(4d-d5
tau=rtau/dt;
^~H{I_Y
delay=3*tau;
X[o+Y@bc
-`PziGl@<
source=zeros(1,nmax);
ayA;6Qt
for n=1:7.0*tau
{s mk<NL
source(n)=sin(omega*(n-delay)*dt)*exp(-((n-delay)^2/tau^2));
9r].rzf9
end
[7I bT:ph
r >'tE7W9
%***********************************************************************
vTK%4=|1}!
% Field arrays
FMVAXOO
%***********************************************************************
O JcS%-~
ez=zeros(ie,je);
YRlf U5
hx=zeros(ie,jb); %fields in main grid
yjjq&Cn
hy=zeros(ib,je);
_ p\L,No
rkjnw@x\
ezxbcf=zeros(iefbc,jebc);
teJt.VA7)
ezybcf=zeros(iefbc,jebc);
&s+l/;3
hxbcf=zeros(iefbc,jebc); %fields in front pml
qLmzA@Cv
hybcf=zeros(ibfbc,jebc);
tn5%zJ#+
l;iU9<~
ezxbcb=zeros(iefbc,jebc);
N:<$]x>
ezybcb=zeros(iefbc,jebc);
idYB.]Y(
hxbcb=zeros(iefbc,jbbc); %fields in back pml
CT[9=wV)m%
hybcb=zeros(ibfbc,jebc);
TmG);B}
ty,oj33
ezxbcl=zeros(iebc,je);
]%Eh"
ezybcl=zeros(iebc,je);
.G[/4h :.
hxbcl=zeros(iebc,jb); %fields in left pml
V'&;r'#O
hybcl=zeros(iebc,je);
=xo0T 6
.yj@hpJM
ezxbcr=zeros(iebc,je);
irAXXg
ezybcr=zeros(iebc,je);
:*}Q/]N
hxbcr=zeros(iebc,jb); %fields in right pml
\_`qon$9
hybcr=zeros(ibbc,je);
( V4Ppg
]bY|>q
%***********************************************************************
Y"mFUW4
% Updating coefficients
OT 0c5x
%***********************************************************************
;;,7Jon2
j;3I` :
for i=1:media
kEDpF26!
eaf =dt*sig(i)/(2.0*epsz*eps(i));
s(=wG|
ca(i)=(1.0-eaf)/(1.0+eaf);
lcdhOjz!N
cb(i)=dt/epsz/eps(i)/dx/(1.0+eaf);
<N vw*yA
haf =dt*sim(i)/(2.0*muz*mur(i));
oVvA`}
da(i)=(1.0-haf)/(1.0+haf);
|8k1Bap`z
db(i)=dt/muz/mur(i)/dx/(1.0+haf);
sF {,n0<8
end
u"HGT=Nl
q6>eb
%***********************************************************************
L!cOg8Z
% Geometry specification (main grid)
e34>q:#5l
%***********************************************************************
62sl6WWS3
Iq+N0G<j
% Initialize entire main grid to free space
,.<mj !YE
caez(1:ie,1:je)=ca(1);
S~Gse+*
cbez(1:ie,1:je)=cb(1);
sUG!dwqqd
,&_H
dahx(1:ie,1:jb)=da(1);
KW .4 9
dbhx(1:ie,1:jb)=db(1);
5s[nE\oaG
zV&l^.
dahy(1:ib,1:je)=da(1);
{XOl &
dbhy(1:ib,1:je)=db(1);
gHe:o`
'0HOL)cIz
% Add metal cylinder
f7x2"&?vg
= QBvU)Ki
diam=20; % diameter of cylinder: 6 cm
=LaEEL
rad=diam/2.0; % radius of cylinder: 3 cm
l8oaDL\f
icenter=4*ie/5; % i-coordinate of cylinder's center
I\Op/`_=E
jcenter=je/2; % j-coordinate of cylinder's center
%+~\I\)1
;M3%t=KV
for i=1:ie
B->AY.&j
for j=1:je
Y*NzY*V\
dist2=(i-icenter)^2 + (j-jcenter)^2;
e(t}$Q=
if dist2 <= rad^2
$%~JG(
caez(i,j)=ca(2);
h$02#(RHJ
cbez(i,j)=cb(2);
wo@ T@Ve~
end
$:~;U xh=
end
'S_i6K
end
>&(#p@#
-uYxc=4Lh
%***********************************************************************
&*v\t\]
% Fill the PML regions
g6,D Bkv2
%***********************************************************************
4qid+ [B
P 2WAnm
delbc=iebc*dx;
TDH^x1P
sigmam=-log(rmax/100.0)*epsz*cc*(orderbc+1)/(2*delbc);
/.SG? 5t4
bcfactor=eps(1)*sigmam/(dx*(delbc^orderbc)*(orderbc+1));
17s~mqy
N9w"Lb
% FRONT region
yqx5_}
dahxbcf(1:iefbc,1)=1.0;
A8m06
dbhxbcf(1:iefbc,1)=0.0;
3uuIISK
for j=2:jebc
!eF(WbU0
y1=(jebc-j+1.5)*dx;
q/ljH_-
y2=(jebc-j+0.5)*dx;
\qG?'Iy
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
bT,_=7F
sigmays=sigmay*(muz/(epsz*eps(1)));
O <Rh[Aqn
da1=exp(-sigmays*dt/muz);
m Q9dF,
db1=(1-da1)/(sigmays*dx);
hP"2X"kz&
dahxbcf(1:iefbc,j)=da1;
lb_N"90p
dbhxbcf(1:iefbc,j)=db1;
iXMJ1\!q\|
end
` g]
sigmay=bcfactor*(0.5*dx)^(orderbc+1);
Lk(ESV;r
sigmays=sigmay*(muz/(epsz*eps(1)));
>bW=oTFz
da1=exp(-sigmays*dt/muz);
aZmN(AJ8v
db1=(1-da1)/(sigmays*dx);
{ M**a
dahx(1:ie,1)=da1;
WE) *~5
dbhx(1:ie,1)=db1;
)]P(!hW.
dahxbcl(1:iebc,1)=da1;
,CqWm9
dbhxbcl(1:iebc,1)=db1;
%66="1z0@
dahxbcr(1:iebc,1)=da1;
83vMj$P
dbhxbcr(1:iebc,1)=db1;
27SHj9I
Cab.a)o
for j=1:iebc
,';|CGI cP
y1=(jebc-j+1)*dx;
,\M77V
y2=(jebc-j)*dx;
: B^"V\WE
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
uBlPwb,V
ca1=exp(-sigmay*dt/(epsz*eps(1)));
3]*Kz*i
cb1=(1.0-ca1)/(sigmay*dx);
tpJA~!mG3
caezybcf(1:iefbc,j)=ca1;
;%e)t[5
cbezybcf(1:iefbc,j)=cb1;
2{=]Pf
caezxbcf(1:iefbc,j)=ca(1);
2^o7 ^S
cbezxbcf(1:iefbc,j)=cb(1);
d>p' A_
dahybcf(1:ibfbc,j)=da(1);
;iKLf~a a
dbhybcf(1:ibfbc,j)=db(1);
&aRL}#U
end
"Vp nr +6
flmQNrC.8
% BACK region
=~;~hZj
dahxbcb(1:iefbc,jbbc)=1.0;
4}H+hk8-
dbhxbcb(1:iefbc,jbbc)=0.0;
J0!V (
for j=2:jebc
GLf!i1Z
y1=(j-0.5)*dx;
eh9?GUr5
y2=(j-1.5)*dx;
Rl ]x:
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
-#ZLu.
sigmays=sigmay*(muz/(epsz*eps(1)));
H!IVbL`a{
da1=exp(-sigmays*dt/muz);
V9) /
db1=(1-da1)/(sigmays*dt);
#~ x7G
dahxbcb(1:iefbc,j)=da1;
@ VWED
dbhxbcb(1:iefbc,j)=db1;
q A .9X4NQ
end
u9"=t
sigmay=bcfactor*(0.5*dx)^(orderbc+1);
Q!+AiSTU
sigmays=sigmay*(muz/(epsz*eps(1)));
X)3(.L
da1=exp(-sigmays*dt/muz);
`DYhGk
db1=(1-da1)/(sigmays*dx);
l'"nU6B&
dahx(1:ie,jb)=da1;
GAj%o]}u
dbhy(1:ie,jb)=db1;
m'"r<]pB*4
dahxbcl(1:iebc,jb)=da1;
MJGT|u8O&
dbhxbcl(1:iebc,jb)=db1;
wMVUTm
dahxbcr(1:iebc,jb)=da1;
QY;(Ny/(y
dbhxbcr(1:iebc,jb)=db1;
23?u_?+4i
KfiSQ!{
for j=1:jebc
~(R=3
y1=j*dx;
EVPQe-
y2=(j-1)*dx;
*V2;ds.~
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
6}6Q:V|
ca1=exp(-sigmay*dt/(epsz*eps(1)));
l 2Sar1~1
cb1=(1-ca1)/(sigmay*dx);
'gf[Wjb,%
caezybcb(1:iefbc,j)=ca1;
5Y *4a%"
cbezybcb(1:iefbc,j)=cb1;
G0 )[(s
caezxbcb(1:iefbc,j)=ca(1);
!yd B,S
cbezxbcb(1:iefbc,j)=cb(1);
KqGb+N-@
dahybcb(1:ibfbc,j)=da(1);
~[Tcl
dbhybcb(1:ibfbc,j)=db(1);
HP8J\`
end
*Ypn@YpSp
F!X0Wo=
ga +, P
% LEFT region
<U3X4)r
dahybcl(1,1:je)=1.0;
I-R7+o
dbhybcl(1,1:je)=0.0;
P*&[9)d6
for i=2:iebc
AX v q~XE
x1=(iebc-i+1.5)*dx;
Vgj#-7bdyi
x2=(iebc-i+0.5)*dx;
B'yjMY![
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
JR]2Ray
sigmaxs=sigmax*(muz/(epsz*eps(1)));
bWo
da1=exp(-sigmaxs*dt/muz);
uMQI Aapb
db1=(1-da1)/(sigmaxs*dx);
:BPgDLL,
dahybcl(i,1:je)=da1;
:+"4_f0
dbhybcl(i,1:je)=db1;
7ui<2(W@0
dahybcf(i,1:jebc)=da1;
Ph=NH8
dbhybcf(i,1:jebc)=db1;
U6&`s%mIa
dahybcb(i,1:jebc)=da1;
,iyy2
dbhybcb(i,1:jebc)=db1;
!,`'VQw$
end
I/(U0`%
sigmax=bcfactor*(0.5*dx)^(orderbc+1);
:M"+
sigmaxs=sigmax*(muz/(epsz*eps(1)));
({E,}x
da1=exp(-sigmaxs*dt/muz);
> Z+*tq
db1=(1-da1)/(sigmaxs*dx);
% G=cKM
dahy(1,1:je)=da1;
3RtVFDIZA"
dbhy(1,1:je)=db1;
t<v.rb
dahybcf(ibbc,1:jebc)=da1;
:`N&BV
dbhybcf(ibbc,1:jebc)=db1;
;U(]#pW!t
dahybcb(ibbc,1:jebc)=da1;
{?`rGJ{f
dbhybcb(ibbc,1:jebc)=db1;
lq9|tt6Z
Ic0Sb7c
for i=1:iebc
0 P YYG
x1=(iebc-i+1)*dx;
eke[{%L
x2=(iebc-i)*dx;
z/J?!ee
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
jF?0,g
ca1=exp(-sigmax*dt/(epsz*eps(1)));
"&={E{pQ
cb1=(1-ca1)*(sigmax*dx);
HUx`RX0>
caezxbcl(i,1:je)=ca1;
,!{8@*!=s
cbezxbcl(i,1:je)=cb1;
TDo)8+.2z
caezxbcf(i,1:jebc)=ca1;
1?.CXqK
cbezxbcf(i,1:jebc)=cb1;
2_wpj;E
caezxbcb(i,1:jebc)=ca1;
')q0VaohC
cbezxbcb(i,1:jebc)=cb1;
J@-'IJ
q9vND[BQ
caezybcl(i,1:je)=ca(1);
ZN}`A7
cbezybcl(i,1:je)=cb(1);
F7<mm7BGZ
dahxbcl(i,2:je)=da(1);
T~xVHk1
dbhxbcl(i,2:je)=db(1);
6:2* <
end
3 `_/h' ~
O!"K'Bm
\Eh5g/,[
% RIGHT region
x"z\d,O%W
dahybcr(ibbc,1:je)=1.0;
%r[`HF>
dbhybcr(ibbc,1:je)=0.0;
B!+c74
for i=2:iebc
toY_1
x1=(i-0.5)*dx;
J2Dn
x2=(i-1.5)*dx;
GN|"RuQ
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
li%@HdA!
sigmaxs=sigmax*(muz/(epsz*eps(1)));
}uIQ@f`
da1=exp(-sigmaxs*dt/muz);
gkmof^
db1=(1-da1)/(sigmaxs*dx);
-- %XkO
dahybcr(i,1:je)=da1;
4#(/{6J
dbhybcr(i,1:je)=db1;
"pDU v^ie
dahybcf(iebc+ie+i,1:jebc)=da1;
2 ,nhs,FZ
dbhybcf(iebc+ie+i,1:jebc)=db1;
AZ!/{1 Az
dahybcb(iebc+ie+i,1:jebc)=da1;
Ar>B_*dr
dbhybcb(iebc+ie+i,1:jebc)=db1;
%G!!0V!
end
T:Cq}4k<
sigmax=bcfactor*(0.5*dx)^(orderbc+1);
8|Tqk,/pD
sigmaxs=sigmax*(muz/(epsz*eps(1)));
_#K|g#p5
da1=exp(-sigmaxs*dt/muz);
k1z`92"
db1=(1-da1)/(sigmaxs*dx);
Vo"G@W)lZ
dahy(ib,1:je)=da1;
ya2sS9^T[
dbhy(ib,1:je)=db1;
5, ;\zSz
dahybcf(iebc+ie+1,1:jebc)=da1;
4 ?BQ&d
dbhybcf(iebc+ie+1,1:jebc)=db1;
Tt~4'{Bc
dahybcb(iebc+ie+1,1:jebc)=da1;
$s_k/dM~&
dbhybcb(iebc+ie+1,1:jebc)=db1;
E{V?[HcWq
q?LOtN? o
for i=1:iebc
U '{PpZ
x1=i*dx;
3V]dl)en%
x2=(i-1)*dx;
~u*4k:2H
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
{qw'gJmX
ca1=exp(-sigmax*dt/(epsz*eps(1)));
Y7S1^'E 3
cb1=(1-ca1)/(sigmax*dx);
q_[y|ETJ]
caezxbcr(i,1:je)=ca1;
__}SHU0R
cbezxbcr(i,1:je)=cb1;
%f;v$rsZ
caezxbcf(iebc+ie+i,1:jebc)=ca1;
gxO~44"
cbezxbcf(iebc+ie+i,1:jebc)=cb1;
|.9PwD8~VD
caezxbcb(iebc+ie+i,1:jebc)=ca1;
.f$2-5q
cbezxbcb(iebc+ie+i,1:jebc)=cb1;
CG%bZco((
;l%xjMcU
caezybcr(i,1:je)=ca(1);
4S42h_9
cbezybcr(i,1:je)=cb(1);
a~yiLq
dahxbcr(i,2:je)=da(1);
!PIg,
dbhxbcr(i,2:je)=db(1);
Sd6O?&(
end
m@<,bZkl
%***********************************************************************
h?TIxo:6/
% Movie initialization
sO) H#G
%***********************************************************************
f hK<P_}
bg|$1ue
subplot(3,1,1),pcolor(hx');
boiP_*|M Y
shading flat;
2(d
caxis([-0.2 0.2]);
: ?f+*
axis([1 ie 1 jb]);
QI[WXxp
colorbar;
H{=]94
axis image;
h>V6}(~;.
axis off;
R_j.k3r4d
title(['Hx at time step = 0']);
ZW?h\0Hh
d>Tv?'o`q
subplot(3,1,2),pcolor(hy');
P 'h39XoZ
shading flat;
UI=v|<'-
caxis([-0.2 0.2]);
%sc w]oF
axis([1 ib 1 je]);
al#(<4sJ
colorbar;
]n4PM=hz
axis image;
l'l&Zqd
axis off;
/cClV"S*G
title(['Hy at time step = 0']);
2Ug_3ZuU
">7xSWR*4
subplot(3,1,3),pcolor(ez');
!Mw/j`*
shading flat;
p{oz}}
caxis([-80.0 80.0]);
3fLdceT
axis([1 ie 1 je]);
-|'@:cIZ
colorbar;
jW&*?6<
axis image;
ir'<H<t2
axis off;
/'8%=$2Kw
title(['Ez at time step = 0']);
L/fXP@u
^X_ ;ZLg.
rect=get(gcf,'Position');
FqJd
rect(1:2)=[0 0];
7s%D(;W_Mo
yPmo1|'X>d
M=moviein(nmax/4,gcf,rect);
| K|AUI
%***********************************************************************
\:h7,[e
% BEGIN TIME-STEPPING LOOP
9z4F/tUq
%***********************************************************************
npeL1zO-$
for n=1:nmax
1a9' *[
t!wbT79/
%***********************************************************************
\X %#-y
% Update electric fields (EZ) in main grid
>yc),]1~
%***********************************************************************
GQg 2!s(
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)-...
Vw;iE=L
(hx(1:ie,2:jb)-hx(1:ie,1:je)));
kt Z~r. +
ez(is,js)=source(n);
f IV"U
MVMJl ">
% update EZX in pml region
fKEDe>B5
D*@'%<?
"`K_5"F
% FTONT
HCr}|DxyK
ezxbcf(1:iefbc,1:jebc)=caezxbcf(1:iefbc,1:jebc).*ezxbcf(1:iefbc,1:jebc)+...
\@PMj"p|:
cbezxbcf(1:iefbc,1:jebc).*(hybcf(2:ibfbc,1:jebc)-hybcf(1:iefbc,1:jebc));
yuC"V'
=9,mt K~
% BACK
k|x mZA*
ezxbcb(1:iefbc,1:jebc)=caezxbcb(1:iefbc,1:jebc).*ezxbcb(1:iefbc,1:jebc)+...
YAR$6&
cbezxbcb(1:iefbc,1:jebc).*(hybcb(2:ibfbc,1:jebc)-hybcb(1:iefbc,1:jebc));
#>_t[9;
BUZ74
% LEFT
iM!V4Wih6
ezxbcl(1:iebc-1,1:je)=caezxbcl(1:iebc-1,1:je).*ezxbcl(1:iebc-1,1:je)+...
)T '?"guh`
cbezxbcl(1:iebc-1,1:je).*(hybcl(2:iebc,1:je)-hybcl(1:iebc-1,1:je));
CXn?~m&K
ezxbcl(iebc,1:je)=caezxbcl(iebc,1:je).*ezxbcl(iebc,1:je)+...
HpbwW=;V
cbezxbcl(iebc,1:je).*(hy(1,1:je)-hybcl(iebc,1:je));
7VfXE/
% RIGHT
At>e4t2@
ezxbcr(2:iebc,1:je)=caezxbcr(2:iebc,1:je).*ezxbcr(2:iebc,1:je)+...
eAO@B
cbezxbcr(2:iebc,1:je).*(hybcr(3:ibbc,1:je)-hybcr(2:iebc,1:je));
x=0Ak'1M
ezxbcr(1,1:je)=caezxbcr(1,1:je).*ezxbcr(1,1:je)+...
lLVD`)
cbezxbcr(1,1:je).*(hybcr(2,1:je)-hy(ib,1:je));
&K!0yR
2KXFXR
% update EZY in pml region
5[\g87\
@}jg5}
% FRONT
g&RhPrtl
ezybcf(1:iefbc,1:jebc-1)=caezybcf(1:iefbc,1:jebc-1).*ezybcf(1:iefbc,1:jebc-1)-...
^XyC[ G@[
cbezybcf(1:iefbc,1:jebc-1).*(hxbcf(1:iefbc,2:jebc)-hxbcf(1:iefbc,1:jebc-1));
6&+dpr&c~=
ezybcf(1:iebc,jebc)=caezybcf(1:iebc,jebc).*ezybcf(1:iebc,jebc)-...
"LYhYkI
cbezybcf(1:iebc,jebc).*(hxbcl(1:iebc,1)-hxbcf(1:iebc,jebc));
5<X"+`=9
ezybcf(iebc+1:iebc+ie,jebc)=caezybcf(iebc+1:iebc+ie,jebc).*ezybcf(iebc+1:iebc+ie,jebc)-...
0Runex[
cbezybcf(iebc+1:ie+iebc,jebc).*(hx(1:ie,1)-hxbcf(iebc+1:iebc+ie,jebc));
)j]f ]8
ezybcf(iebc+ie+1:iefbc,jebc)=caezybcf(iebc+ie+1:iefbc,jebc).*ezybcf(ie+iebc+1:iefbc,jebc)-...
HziQ%QR
cbezybcf(ie+iebc+1:iefbc,jebc).*(hxbcr(1:iebc,1)-hxbcf(iebc+ie+1:iefbc,jebc));
j^/<:e c.
,6y.wNb :F
% BACK
f`vWCb
ezybcb(1:iefbc,2:jebc)=caezybcb(1:iefbc,2:jebc).*ezybcb(1:iefbc,2:jebc)-...
tM@%EO
cbezybcb(1:iefbc,2:jebc).*(hxbcb(1:iefbc,3:jbbc)-hxbcb(1:iefbc,2:jebc));
}#Up:o]A!
ezybcb(1:iebc,1)=caezybcb(1:iebc,1).*ezybcb(1:iebc,1)-...
-DGuaUU
cbezybcb(1:iebc,1).*(hxbcb(1:iebc,2)-hxbcl(1:iebc,jb));
8F\'?7
ezybcb(iebc+1:iebc+ie,1)=caezybcb(iebc+1:iebc+ie,1).*ezybcb(iebc+1:iebc+ie,1)-...
"/O07l1Q<
cbezybcb(iebc+1:iebc+ie,1).*(hxbcb(iebc+1:iebc+ie,2)-hx(1:ie,jb));
/ !h<+
ezybcb(iebc+ie+1:iefbc,1)=caezybcb(iebc+ie+1:iefbc,1).*ezybcb(iebc+ie+1:iefbc,1)-...
4Tuh]5
cbezybcb(iebc+ie+1:iefbc,1).*(hxbcb(iebc+ie+1:iefbc,2)-hxbcr(1:iebc,jb));
rG-x 3>b
(|O(BxS
% LEFT
7.{+8#~nV
ezybcl(1:iebc,1:je)=caezybcl(1:iebc,1:je).*ezybcl(1:iebc,1:je)-...
\B 8 j9
cbezybcl(1:iebc,1:je).*(hxbcl(1:iebc,2:jb)-hxbcl(1:iebc,1:je));
k=t{o
Dt5AG
% RIGHT
eOVln1a
ezybcr(1:iebc,1:je)=caezybcr(1:iebc,1:je).*ezybcr(1:iebc,1:je)-...
k K/>,Eg
cbezybcr(1:iebc,1:je).*(hxbcr(1:iebc,2:jb)-hxbcr(1:iebc,1:je));
LB7$&.m'B
hRKJKQ@7
%***********************************************************************
pb<eg,
% Update electric fields (HX and HY) in main grid
J}Z\I Y,
%***********************************************************************
z__{6"^
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));
cl23y}J_?
5 3+C;]J
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));
kFQo[O]
3#fg 2
%update HX in pml region
%N\45nYU:
z xgDaT
% FRONT
@0:Eg 1-
hxbcf(1:iefbc,2:jebc)=dahxbcf(1:iefbc,2:jebc).*hxbcf(1:iefbc,2:jebc)-...
aa]|
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));
(CDh,ZN;|
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));
"kt7m
iMM9a;G+
% BACK
1Xcj=I-4
hxbcb(1:iefbc,2:jebc)=dahxbcb(1:iefbc,2:jebc).*hxbcb(1:iefbc,2:jebc)-...
r 'ioH"=
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));
oeVI 6-_S
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));
r"L:Mu
{niV63$m
% LEFT
9R+ qw
hxbcl(1:iebc,2:je)=dahxbcl(1:iebc,2:je).*hxbcl(1:iebc,2:je)-...
ty;a!yjC
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));
DbI)tDi5D
hxbcl(1:iebc,1)=dahxbcl(1:iebc,1).*hxbcl(1:iebc,1)-...
@B)5Ho
dbhxbcl(1:iebc,1).*(ezxbcl(1:iebc,1)+ezybcl(1:iebc,1)-ezxbcl(1:iebc,jebc)+ezybcl(1:iebc,jebc));
<YG 42,N
hxbcl(1:iebc,jb)=dahxbcl(1:iebc,jb).*hxbcl(1:iebc,jb)-...
O~J f"Ht
dbhxbcl(1:iebc,jb).*(ezxbcb(1:iebc,1)+ezybcb(1:iebc,1)-ezxbcl(1:iebc,je)-ezxbcl(1:iebc,je));
SP=8v0
}uD*\.
% RIGHT
N#OO{`":Z`
hxbcr(1:iebc,2:je)=dahxbcr(1:iebc,2:je).*hxbcr(1:iebc,2:je)-...
$W;r S7b
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));
d<]eJ{
hxbcr(1:iebc,1)=dahxbcr(1:iebc,1).*hxbcr(1:iebc,1)-...
;[C_ho
dbhxbcr(1:iebc,1).*(ezxbcr(1:iebc,1)+ezybcr(1:iebc,1)-ezxbcf(ie+iebc+1:iefbc,jebc)-ezybcf(ie+iebc+1:iefbc,jebc));
DBfq9%J _
hxbcr(1:iebc,jb)=dahxbcr(1:iebc,jb).*hxbcr(1:iebc,1)-...
gBgaVG
dbhxbcr(1:iebc,jb).*(ezxbcb(iebc+ie+1:iefbc,1)+ezybcb(iebc+ie+1:iefbc,1)-ezxbcr(1:iebc,je)-ezybcr(1:iebc,je));
_B&;z $
22d>\u+c
\= 6dF,V
%update HY in pml region
$*fEgU% c
'uqY%&U
% FRONT
M%13b$i~f
hybcf(2:iefbc,1:jebc)=dahybcf(2:iefbc,1:jebc).*hybcf(2:iefbc,1:jebc)+...
aE]RVyG@L
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));
6C_H0a/h&
UZJs!#P
% BACK
|Ntretz`\
hybcb(2:iefbc,1:jebc)=dahybcb(2:iefbc,1:jebc).*hybcb(2:iefbc,1:jebc)+...
^AwDZX
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));
tTq2AR|
^6UE/4x!y
% LEFT
nwJub$5
hybcl(2:iebc,1:je)=dahybcl(2:iebc,1:je).*hybcl(2:iebc,1:je)+...
[2!?pVI
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));
5p.#nc!;y
hy(1,1:je)=dahy(1,1:je).*hy(1,1:je)+...
F6{Q1DqI
dbhy(1,1:je).*(ez(1,1:je)-ezxbcl(iebc,1:je)-ezybcl(iebc,1:je));
% y` tDR
sEb*GF*.V
% RIGHT
BC%V<6JBu(
hybcr(2:iebc,1:je)=dahybcr(2:iebc,1:je).*hybcr(2:i ..
bT:;^eG"
:y~l?0b&8
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
附件:
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两位提供的建议,小弟静心调试得到了想要的结果。因是新人小弟到处怀疑可能出错的地方浪费的不少时间,回过头来才明白两位提供的建议真乃真知灼见,万分感谢。小弟也把修改后正确的程序贴上,希望也能对其他新人有所帮助。
a!Ht81gj
该程序为2D情况下pml吸收边界 自由空间电磁波的传输,中间虽然有一段写到加入圆形柱体,但所设参数和自由空间电磁参数一致,故而可以认为没有添加散射圆柱。
Yl0_?.1 z
clear
F{"4cyoou
ftwn<B
%***********************************************************************
cfA)Ui
% Fundamental constants
4vbtB2
%***********************************************************************
}D\i1/Y
o!>h Q#h
cc=2.99792458e8; %speed of light in free space
A/w7(
muz=4.0*pi*1.0e-7; %permeability of free space
=& =#G3f
epsz=1.0/(cc*cc*muz); %permittivity of free space
2 rx``,7Q
'n4$dv%q
freq=5.0e+9; %center frequency of source excitation
d\A!5/LG
lambda=cc/freq; %center wavelength of source excitation
El:&
omega=2.0*pi*freq;
nH7i)!cI~
)$7-CNWr~
%***********************************************************************
kKEs >a
% Grid parameters
"`&1"*
%***********************************************************************
pu?D^h9/
!,zRg5Wp4
ie=100; %number of grid cells in x-direction
>,)tRQS
je=100; %number of grid cells in y-direction
2u?k;"]V
EQ>] ~
ib=ie+1;
i"J`$u
jb=je+1;
QC^#ns&
TG@ W:>N(
is=ie/2; %location of z-directed hard source
iW,fKXuo&y
js=je/2; %location of z-directed hard source
)7}f.
/yNLFL"
dx=3.0e-3; %space increment of square lattice
=UMqa;\K
dt=dx/(2.0*cc); %time step
|v31weD8
5x/LHsr=m
nmax=3000; %total number of time steps
1xzOD@=dI
z}&JapJ
iebc=8; %thickness of left and right PML region
7\nR'MOZ
jebc=8; %thickness of front and back PML region
~gJJ@j 0n
rmax=0.00001;
qxW^\u!<
orderbc=2;
c6_i~0W56
ibbc=iebc+1;
Ir :y#
jbbc=jebc+1;
=#|K-X0d=
iefbc=ie+2*iebc;
4fa2_
jefbc=je+2*jebc;
T99\R%
ibfbc=iefbc+1;
yTwtGo&
jbfbc=jefbc+1;
}{(J*T
T.x"a$AU
%***********************************************************************
8ZPjzN>c6
% Material parameters
z)&ZoSXWc
%***********************************************************************
n+9rx]W,
T5b*Ia
media=2;
-J\R}9 lIm
1DT}_0{0Q
eps=[1.0 1.0];
I` +%ab
sig=[0.0 0.0];
0G}]d17ho
mur=[1.0 1.0];
C.Ty\@U
sim=[0.0 0.0];
na,i(m?l
}Z Nyd
%***********************************************************************
2~(\d\k
% Wave excitation
+(l(|lQy$
%***********************************************************************
>4&s7][Q|
0` \!O(jJ
source=zeros(1,nmax);
GB\1'
for n=1:nmax
eUeOyC
source(n)=90*sin(omega*n*dt);
CZ4Nw]dtR
end
k1HVvMD<
O{w'i|
%***********************************************************************
1K&l}/zUl
% Field arrays
{]V+C=`
%***********************************************************************
B(B77SOb
ez=zeros(ie,je);
lbUUf}
hx=zeros(ie,jb); %fields in main grid
UK!PMkX
hy=zeros(ib,je);
h}knn3"S
FvVR \a
ezxbcf=zeros(iefbc,jebc);
YR/%0^M'0
ezybcf=zeros(iefbc,jebc);
y $6~&X
hxbcf=zeros(iefbc,jebc); %fields in front pml
H". [&VP5Z
hybcf=zeros(ibfbc,jebc);
3;Ztm$8
CE;J`;
ezxbcb=zeros(iefbc,jebc);
g886RhCe
ezybcb=zeros(iefbc,jebc);
"yA=Tw
hxbcb=zeros(iefbc,jbbc); %fields in back pml
E/IoYuB
hybcb=zeros(ibfbc,jebc);
Cr#Z.
i^2-PKPg{
ezxbcl=zeros(iebc,je);
lPO+dm
ezybcl=zeros(iebc,je);
|];f?1
hxbcl=zeros(iebc,jb); %fields in left pml
*p Q'w
hybcl=zeros(iebc,je);
.qAlPe L:
;2%8tV$V
ezxbcr=zeros(iebc,je);
V4>qR{5
ezybcr=zeros(iebc,je);
.5K}R<
hxbcr=zeros(iebc,jb); %fields in right pml
0V[`zOO(o
hybcr=zeros(ibbc,je);
x}B_;&>&"_
0P7sMCYu
%***********************************************************************
Tw+V$:$$
% Updating coefficients
nXFPoR)T
%***********************************************************************
5%1a!MM M
2SV}mK U
for i=1:media
{$fd?| 9h
eaf =dt*sig(i)/(2.0*epsz*eps(i));
' zz^!@
ca(i)=(1.0-eaf)/(1.0+eaf);
sm9/sX!
cb(i)=dt/epsz/eps(i)/dx/(1.0+eaf);
bji^b@us_
haf =dt*sim(i)/(2.0*muz*mur(i));
ngI3.v/R
da(i)=(1.0-haf)/(1.0+haf);
7x5wT ?2W
db(i)=dt/muz/mur(i)/dx/(1.0+haf);
!Pf6UNN'
end
Wt 1]9{$
o~ J~-$T{
%***********************************************************************
n1J;)VyR
% Geometry specification (main grid)
o`+$h:zm@
%***********************************************************************
dDxb}dx8
[B+]F~}@
% Initialize entire main grid to free space
<2,NWn.
caez(1:ie,1:je)=ca(1);
;V)jC
cbez(1:ie,1:je)=cb(1);
N&jHU+{OU
2?)8s"Y
dahx(1:ie,1:jb)=da(1);
SQ0?M\D7
dbhx(1:ie,1:jb)=db(1);
QuWWa|g^.
N6UPD11}6
dahy(1:ib,1:je)=da(1);
y 13Y,cz~B
dbhy(1:ib,1:je)=db(1);
%]1.)j
o<Y[GW1pg
% Add metal cylinder
Y~"5HP|
J_eu(d[9
diam=20; % diameter of cylinder: 6 cm
}{y(&Oy3Y
rad=diam/2.0; % radius of cylinder: 3 cm
rGIf/=G^r
icenter=4*ie/5; % i-coordinate of cylinder's center
c]1\88
jcenter=je/2; % j-coordinate of cylinder's center
v{c,>]@
_6!@>`u~
for i=1:ie
V(c>1xLlz
for j=1:je
Kd;Iu\4hv
dist2=(i-icenter)^2 + (j-jcenter)^2;
5zi}OGtXv
if dist2 <= rad^2
poU1Q#+4p*
caez(i,j)=ca(2);
odsLFU(
cbez(i,j)=cb(2);
Z;M th#
end
" .<>(bE
end
Yx3ivjX.>
end
$LOwuvu>
"%E<%g
%***********************************************************************
UEeq@ot/ 4
% Fill the PML regions
}|u>b!7_.
%***********************************************************************
|D1:~z
rJ=r_v
delbc=iebc*dx;
>O$JS,
sigmam=-log(rmax/100.0)*epsz*cc*(orderbc+1)/(2*delbc);
$rV4JROb
bcfactor=eps(1)*sigmam/(dx*(delbc^orderbc)*(orderbc+1));
PL|zm5923
KJ#SE|
% FRONT region
3)0z( 30
dahxbcf(1:iefbc,1)=1.0;
e gdbv
dbhxbcf(1:iefbc,1)=0.0;
rm?C_
for j=2:jebc
tQWjNP~
y1=(jebc-j+1.5)*dx;
?(R!BB
y2=(jebc-j+0.5)*dx;
=;A>1g$
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
Fz.Ij'8.H
sigmays=sigmay*(muz/(epsz*eps(1)));
G<:gNWXd\
da1=exp(-sigmays*dt/muz);
qac8zt#2 C
db1=(1-da1)/(sigmays*dx);
(\M#Ay t)
dahxbcf(1:iefbc,j)=da1;
U!O"f
dbhxbcf(1:iefbc,j)=db1;
0i3Z7l]
end
[~{'"-3L0
sigmay=bcfactor*(0.5*dx)^(orderbc+1);
aGbHDo
sigmays=sigmay*(muz/(epsz*eps(1)));
v9"|VhZ
da1=exp(-sigmays*dt/muz);
57(5+Zme
db1=(1-da1)/(sigmays*dx);
cyTBp58
dahx(1:ie,1)=da1;
$eiW2@
dbhx(1:ie,1)=db1;
)j\9IdkU;y
dahxbcl(1:iebc,1)=da1;
W87kE?,
dbhxbcl(1:iebc,1)=db1;
d\-v+'d*+
dahxbcr(1:iebc,1)=da1;
E/@
dbhxbcr(1:iebc,1)=db1;
VKMgcfbHr/
z0T9tN!(
for j=1:iebc
F_d>@-<
y1=(jebc-j+1)*dx;
X+[h]A
y2=(jebc-j)*dx;
?XllPnuKt%
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
'PWX19
ca1=exp(-sigmay*dt/(epsz*eps(1)));
}Yargj_Gn
cb1=(1.0-ca1)/(sigmay*dx);
Dt:NBN
caezybcf(1:iefbc,j)=ca1;
S8k<}5
cbezybcf(1:iefbc,j)=cb1;
\&\U&^?
caezxbcf(1:iefbc,j)=ca(1);
Dn[u zY6
cbezxbcf(1:iefbc,j)=cb(1);
6]NaP_\0
dahybcf(1:ibfbc,j)=da(1);
LMHiiOs,
dbhybcf(1:ibfbc,j)=db(1);
)K!!Zq3;|
end
Hj97&C{Q^
?<efKs
% BACK region
6`WI S4
dahxbcb(1:iefbc,jbbc)=1.0;
K,5_{pj
dbhxbcb(1:iefbc,jbbc)=0.0;
Uu[dx}y
for j=2:jebc
tUT:vK`
y1=(j-0.5)*dx;
y&L Lx[8^
y2=(j-1.5)*dx;
`R m<1
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
u9u'!hAGH
sigmays=sigmay*(muz/(epsz*eps(1)));
a^g}Z7D'T
da1=exp(-sigmays*dt/muz);
J;*2[o.N
db1=(1-da1)/(sigmays*dx);
SQT]'
dahxbcb(1:iefbc,j)=da1;
e:+[}I)
dbhxbcb(1:iefbc,j)=db1;
L};P*{q2Z
end
^TEFKx}PX
sigmay=bcfactor*(0.5*dx)^(orderbc+1);
J b?x-%Za
sigmays=sigmay*(muz/(epsz*eps(1)));
/*e6('9s
da1=exp(-sigmays*dt/muz);
h!J|4Qa
db1=(1-da1)/(sigmays*dx);
5$ &',v(
dahx(1:ie,jb)=da1;
0iI|eE o
dbhx(1:ie,jb)=db1;
"h7Np/ m3
dahxbcl(1:iebc,jb)=da1;
&fe67#0r)
dbhxbcl(1:iebc,jb)=db1;
~FnuO!C
dahxbcr(1:iebc,jb)=da1;
^;'FC vd
dbhxbcr(1:iebc,jb)=db1;
pmc)$3u
WP5Vev9*+
for j=1:jebc
oS^g "hQ`\
y1=j*dx;
#`@5`;U>#
y2=(j-1)*dx;
p}p}!M|
sigmay=bcfactor*(y1^(orderbc+1)-y2^(orderbc+1));
oq9gFJG(
ca1=exp(-sigmay*dt/(epsz*eps(1)));
F60?%gg
cb1=(1-ca1)/(sigmay*dx);
6%Pvh- ~_
caezybcb(1:iefbc,j)=ca1;
QB"+B]rV
cbezybcb(1:iefbc,j)=cb1;
d]vom@iI
caezxbcb(1:iefbc,j)=ca(1);
3$4I
cbezxbcb(1:iefbc,j)=cb(1);
sB0m^Y'
dahybcb(1:ibfbc,j)=da(1);
#O N^6f2
dbhybcb(1:ibfbc,j)=db(1);
i hcSS Um
end
$6]1T>
WI1DL&*B@<
/HVxZ2bar
% LEFT region
^VsE2CX
dahybcl(1,1:je)=1.0;
a[jNT$8
dbhybcl(1,1:je)=0.0;
1v inO!
for i=2:iebc
q{l %k
x1=(iebc-i+1.5)*dx;
8Om4G]*|,
x2=(iebc-i+0.5)*dx;
x}~Z[ bx
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
!.{"Ttn;s
sigmaxs=sigmax*(muz/(epsz*eps(1)));
[&pMU)
da1=exp(-sigmaxs*dt/muz);
[&sabM`Ul
db1=(1-da1)/(sigmaxs*dx);
-ND1+`yD
dahybcl(i,1:je)=da1;
nT9Hw~f<j
dbhybcl(i,1:je)=db1;
VE))`?
dahybcf(i,1:jebc)=da1;
A"/|h].
dbhybcf(i,1:jebc)=db1;
J\hqK*/8
dahybcb(i,1:jebc)=da1;
V3<#_:;
dbhybcb(i,1:jebc)=db1;
vLpIVNA]]Y
end
Ac'pu,v
sigmax=bcfactor*(0.5*dx)^(orderbc+1);
9L>73P{_
sigmaxs=sigmax*(muz/(epsz*eps(1)));
7U:{=+oLR
da1=exp(-sigmaxs*dt/muz);
tuJ{IF
db1=(1-da1)/(sigmaxs*dx);
*^:s!F
dahy(1,1:je)=da1;
qNWSDZQ
dbhy(1,1:je)=db1;
4+:'$Nw
dahybcf(ibbc,1:jebc)=da1;
VV"w{#XKw
dbhybcf(ibbc,1:jebc)=db1;
i,2eoM)FB
dahybcb(ibbc,1:jebc)=da1;
"a-;?S&
dbhybcb(ibbc,1:jebc)=db1;
{g 4`>^;
K!(hj '0.
for i=1:iebc
Q%W>m0%
x1=(iebc-i+1)*dx;
C8%MKNPd
x2=(iebc-i)*dx;
F_@?'#m
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
JC#5CCz
ca1=exp(-sigmax*dt/(epsz*eps(1)));
iL|5}x5\
cb1=(1-ca1)/(sigmax*dx);
qwq5yt?
caezxbcl(i,1:je)=ca1;
|3BxNFe`%
cbezxbcl(i,1:je)=cb1;
S^iT&;,
caezxbcf(i,1:jebc)=ca1;
wW7# M
cbezxbcf(i,1:jebc)=cb1;
O~|Y#T
caezxbcb(i,1:jebc)=ca1;
O-!Q~;3][
cbezxbcb(i,1:jebc)=cb1;
<B!DwMk;.
_k#!^AJ}x
caezybcl(i,1:je)=ca(1);
UAGh2?q2
cbezybcl(i,1:je)=cb(1);
8WpZ"
dahxbcl(i,2:je)=da(1);
&aPR" X
dbhxbcl(i,2:je)=db(1);
[Pl''[
end
8On MtP
xy4P_
vs@u*4.Ut<
% RIGHT region
'4}8WYKQ
dahybcr(ibbc,1:je)=1.0;
R`M@;9I.@
dbhybcr(ibbc,1:je)=0.0;
\46*4?pP
for i=2:iebc
K%UjPzPWw
x1=(i-0.5)*dx;
ul]hvK{2
x2=(i-1.5)*dx;
4'"WD0
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
|>b;M,`OO
sigmaxs=sigmax*(muz/(epsz*eps(1)));
wli H3vA_
da1=exp(-sigmaxs*dt/muz);
9\uBX.]x
db1=(1-da1)/(sigmaxs*dx);
84coi
dahybcr(i,1:je)=da1;
SPm2I(at7
dbhybcr(i,1:je)=db1;
_<'?s>(U'
dahybcf(iebc+ie+i,1:jebc)=da1;
=s9*=5r 8
dbhybcf(iebc+ie+i,1:jebc)=db1;
?kS#g
dahybcb(iebc+ie+i,1:jebc)=da1;
yp)D"w4@
dbhybcb(iebc+ie+i,1:jebc)=db1;
^ywDa^;-
end
TLq^5,qG
sigmax=bcfactor*(0.5*dx)^(orderbc+1);
-/:K.SY,
sigmaxs=sigmax*(muz/(epsz*eps(1)));
%CQv&d2
da1=exp(-sigmaxs*dt/muz);
S R s
db1=(1-da1)/(sigmaxs*dx);
_k#GjAPM
dahy(ib,1:je)=da1;
gHFQs](G.
dbhy(ib,1:je)=db1;
e/x6{~ju^N
dahybcf(iebc+ie+1,1:jebc)=da1;
K^P&3H*(/n
dbhybcf(iebc+ie+1,1:jebc)=db1;
na@Go@q
dahybcb(iebc+ie+1,1:jebc)=da1;
M\RHFTB<C
dbhybcb(iebc+ie+1,1:jebc)=db1;
n<1*cL:8B
F<b/)<Bm=
for i=1:iebc
Hc-up.?v'v
x1=i*dx;
'7g]@Q7
x2=(i-1)*dx;
|uI~}pSG
sigmax=bcfactor*(x1^(orderbc+1)-x2^(orderbc+1));
o5:md :\
ca1=exp(-sigmax*dt/(epsz*eps(1)));
gAgF$H .
cb1=(1-ca1)/(sigmax*dx);
.)<l69ZD Z
caezxbcr(i,1:je)=ca1;
(gIFuOGi>
cbezxbcr(i,1:je)=cb1;
6{I6'+K~
caezxbcf(iebc+ie+i,1:jebc)=ca1;
<sSH^J4QqX
cbezxbcf(iebc+ie+i,1:jebc)=cb1;
Y$9x!kV
caezxbcb(iebc+ie+i,1:jebc)=ca1;
7g:Lj,Z4L
cbezxbcb(iebc+ie+i,1:jebc)=cb1;
O;|jLf_If
J>"qeR /
caezybcr(i,1:je)=ca(1);
\jb62Jp
cbezybcr(i,1:je)=cb(1);
cPkP/3I]h
dahxbcr(i,2:je)=da(1);
dptfIBYc+
dbhxbcr(i,2:je)=db(1);
Eqi;m,)
end
o#>Mf464I
%***********************************************************************
u>=\.d<
% Movie initialization
5!aI~(3<
%***********************************************************************
@>&b&uj7T
n@6vCdk.
m'M5O@?
G @EEh.s9
subplot(1,1,1),pcolor(ez');
0`Uw[Er&
shading flat;
^Jw=5ImG
caxis([-80.0 80.0]);
t{,e{oZx
axis([1 ie 1 je]);
pu_?)U
colorbar;
c}s#!|E0v
axis image;
5 Pf)&iG
axis off;
{$>.I
title(['Ez at time step=0']);
lMcO2006L
6Hfv'X5E`Z
rect=get(gcf,'Position');
S(/^_Y
rect(1:2)=[0 0];
#fk1'c2
nJ$2RN
M=moviein(nmax/4,gcf,rect);
q=*bcDu
%***********************************************************************
C~pQJ@bF0
% BEGIN TIME-STEPPING LOOP
O8Z+g{
%***********************************************************************
Yj'"Wg
for n=1:nmax
pH(X;OC9S
X ka+1c
%***********************************************************************
QEMT'Cs
% Update electric fields (EZ) in main grid
?f6SKC
%***********************************************************************
^XG$?2<U
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)-...
E)wf'x
(hx(1:ie,2:jb)-hx(1:ie,1:je)));
9W,%[
ez(is,js)=source(n);
=R ZPDu
VVcli*
% update EZX in pml region
XA;f.u
:yTr:FoF
9|Ylv:sR
% FTONT
qJ2Z5
ezxbcf(1:iefbc,1:jebc)=caezxbcf(1:iefbc,1:jebc).*ezxbcf(1:iefbc,1:jebc)+...
Z!*6;[]SfG
cbezxbcf(1:iefbc,1:jebc).*(hybcf(2:ibfbc,1:jebc)-hybcf(1:iefbc,1:jebc));
&[SFl{fx>-
<~aKwSF[wW
% BACK
%V#MUi1
ezxbcb(1:iefbc,1:jebc)=caezxbcb(1:iefbc,1:jebc).*ezxbcb(1:iefbc,1:jebc)+...
<"}t\pT]
cbezxbcb(1:iefbc,1:jebc).*(hybcb(2:ibfbc,1:jebc)-hybcb(1:iefbc,1:jebc));
XN{WxcZ
QO>';ul5
% LEFT
7]ySj<1
ezxbcl(1:iebc-1,1:je)=caezxbcl(1:iebc-1,1:je).*ezxbcl(1:iebc-1,1:je)+...
I8c:U2D
cbezxbcl(1:iebc-1,1:je).*(hybcl(2:iebc,1:je)-hybcl(1:iebc-1,1:je));
`\'V]9wS
ezxbcl(iebc,1:je)=caezxbcl(iebc,1:je).*ezxbcl(iebc,1:je)+...
{&L^|X
cbezxbcl(iebc,1:je).*(hy(1,1:je)-hybcl(iebc,1:je));
6:AEg
% RIGHT
P1)87P
ezxbcr(2:iebc,1:je)=caezxbcr(2:iebc,1:je).*ezxbcr(2:iebc,1:je)+...
%m [l/,2x
cbezxbcr(2:iebc,1:je).*(hybcr(3:ibbc,1:je)-hybcr(2:iebc,1:je));
F_I!qcEQ
ezxbcr(1,1:je)=caezxbcr(1,1:je).*ezxbcr(1,1:je)+...
ia-ht>F*;
cbezxbcr(1,1:je).*(hybcr(2,1:je)-hy(ib,1:je));
lnK
*.KVrS<B1
% update EZY in pml region
2R,8q0qR:
l]j;0 i
% FRONT
My Ky*wD
ezybcf(1:iefbc,1:jebc-1)=caezybcf(1:iefbc,1:jebc-1).*ezybcf(1:iefbc,1:jebc-1)-...
j-VwY/X
cbezybcf(1:iefbc,1:jebc-1).*(hxbcf(1:iefbc,2:jebc)-hxbcf(1:iefbc,1:jebc-1));
947;6a%$
ezybcf(1:iebc,jebc)=caezybcf(1:iebc,jebc).*ezybcf(1:iebc,jebc)-...
5z2("[8L&
cbezybcf(1:iebc,jebc).*(hxbcl(1:iebc,1)-hxbcf(1:iebc,jebc));
1OqVV?oz
ezybcf(iebc+1:iebc+ie,jebc)=caezybcf(iebc+1:iebc+ie,jebc).*ezybcf(iebc+1:iebc+ie,jebc)-...
u~>G8y)k9O
cbezybcf(iebc+1:ie+iebc,jebc).*(hx(1:ie,1)-hxbcf(iebc+1:iebc+ie,jebc));
T8%!l40v
ezybcf(iebc+ie+1:iefbc,jebc)=caezybcf(iebc+ie+1:iefbc,jebc).*ezybcf(ie+iebc+1:iefbc,jebc)-...
r^H,H'BohJ
cbezybcf(ie+iebc+1:iefbc,jebc).*(hxbcr(1:iebc,1)-hxbcf(iebc+ie+1:iefbc,jebc));
5<Uh2c
dp&G([
% BACK
!\'H{,G
ezybcb(1:iefbc,2:jebc)=caezybcb(1:iefbc,2:jebc).*ezybcb(1:iefbc,2:jebc)-...
5ArgM%
cbezybcb(1:iefbc,2:jebc).*(hxbcb(1:iefbc,3:jbbc)-hxbcb(1:iefbc,2:jebc));
Ni|MTE]~
ezybcb(1:iebc,1)=caezybcb(1:iebc,1).*ezybcb(1:iebc,1)-...
C%{2 sMJz
cbezybcb(1:iebc,1).*(hxbcb(1:iebc,2)-hxbcl(1:iebc,jb));
<P/odpmc
ezybcb(iebc+1:iebc+ie,1)=caezybcb(iebc+1:iebc+ie,1).*ezybcb(iebc+1:iebc+ie,1)-...
%nG>3.%
cbezybcb(iebc+1:iebc+ie,1).*(hxbcb(iebc+1:iebc+ie,2)-hx(1:ie,jb));
n-{ d7haOa
ezybcb(iebc+ie+1:iefbc,1)=caezybcb(iebc+ie+1:iefbc,1).*ezybcb(iebc+ie+1:iefbc,1)-...
C+"c^9[
cbezybcb(iebc+ie+1:iefbc,1).*(hxbcb(iebc+ie+1:iefbc,2)-hxbcr(1:iebc,jb));
HF"TS*
*$`N5;7'`
% LEFT
U$3DIJVI
ezybcl(1:iebc,1:je)=caezybcl(1:iebc,1:je).*ezybcl(1:iebc,1:je)-...
\m+=|
cbezybcl(1:iebc,1:je).*(hxbcl(1:iebc,2:jb)-hxbcl(1:iebc,1:je));
1Kr$JIcd
`)4v Q+A>
% RIGHT
4jGN:*kZ
ezybcr(1:iebc,1:je)=caezybcr(1:iebc,1:je).*ezybcr(1:iebc,1:je)-...
q+2A>:|
cbezybcr(1:iebc,1:je).*(hxbcr(1:iebc,2:jb)-hxbcr(1:iebc,1:je));
587;2
?k($Tc&Q
%***********************************************************************
=f [/Pv
% Update electric fields (HX and HY) in main grid
g^x=y
%***********************************************************************
g$zGiqzMK
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));
[zXC\)&!
-7'|&zP
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));
7U?#Xi5
E'98JZ5ga
%update HX in pml region
Ryh 0r
!Q5,Zhgr
% FRONT
&[ ],rT
hxbcf(1:iefbc,2:jebc)=dahxbcf(1:iefbc,2:jebc).*hxbcf(1:iefbc,2:jebc)-...
"C(yuVK1G
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));
|"S#uJW
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));
"6U@e0ht
nK)1.KVN
% BACK
>`/s+V
hxbcb(1:iefbc,2:jebc)=dahxbcb(1:iefbc,2:jebc).*hxbcb(1:iefbc,2:jebc)-...
l9OpaOVfJ
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));
`M{Ne:J
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));
#I*{_|}=
uqU&k@
% LEFT
D~Ef%!&
hxbcl(1:iebc,2:je)=dahxbcl(1:iebc,2:je).*hxbcl(1:iebc,2:je)-...
OU}eTc(FeC
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));
O[{/P:a
hxbcl(1:iebc,1)=dahxbcl(1:iebc,1).*hxbcl(1:iebc,1)-...
>B=s+}/ME
dbhxbcl(1:iebc,1).*(ezxbcl(1:iebc,1)+ezybcl(1:iebc,1)-ezxbcf(1:iebc,jebc)-ezybcf(1:iebc,jebc));
e+F$fQt>
hxbcl(1:iebc,jb)=dahxbcl(1:iebc,jb).*hxbcl(1:iebc,jb)-...
#sBL E
dbhxbcl(1:iebc,jb).*(ezxbcb(1:iebc,1)+ezybcb(1:iebc,1)-ezxbcl(1:iebc,je)-ezybcl(1:iebc,je));
D$>&K&
jSH.e?
% RIGHT
)?7/fF)@|
hxbcr(1:iebc,2:je)=dahxbcr(1:iebc,2:je).*hxbcr(1:iebc,2:je)-...
H9i7y,[*
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));
l'@!'
hxbcr(1:iebc,1)=dahxbcr(1:iebc,1).*hxbcr(1:iebc,1)-...
!]Qk?T~9-
dbhxbcr(1:iebc,1).*(ezxbcr(1:iebc,1)+ezybcr(1:iebc,1)-ezxbcf(ie+iebc+1:iefbc,jebc)-ezybcf(ie+iebc+1:iefbc,jebc));
5k9 vYW5k
hxbcr(1:iebc,jb)=dahxbcr(1:iebc,jb).*hxbcr(1:iebc,jb)-...
-iY-rzW
dbhxbcr(1:iebc,jb).*(ezxbcb(iebc+ie+1:iefbc,1)+ezybcb(iebc+ie+1:iefbc,1)-ezxbcr(1:iebc,je)-ezybcr(1:iebc,je));
nB5\ocJ
"'@D\e}
'o4`GkNh)
%update HY in pml region
4;3Vc%
V5i}^%QSs
% FRONT
NZa 7[}H
hybcf(2:iefbc,1:jebc)=dahybcf(2:iefbc,1:jebc).*hybcf(2:iefbc,1:jebc)+...
q5JQx**g
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));
*W`7JL,
d*VvQU8C
% BACK
x DNu'
hybcb(2:iefbc,1:jebc)=dahybcb(2:iefbc,1:jebc).*hybcb(2:iefbc,1:jebc)+...
= :zPT;K
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));
9v;HE{>
i+_=7(e
% LEFT
TJZ/lJU
hybcl(2:iebc,1:je)=dahybcl(2:iebc,1:je).*hybcl(2:iebc,1:je)+...
=:xX~,qmv
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));
9_F&G('V{a
hy(1,1:je)=dahy(1,1:je).*hy(1,1:je)+...
6({)O1Z
dbhy(1,1:je).*(ez(1,1:je)-ezxbcl(iebc,1:je)-ezybcl(iebc,1:je));
1]5k lJ
J\w4N",
% RIGHT
_+nk3-yQw
hybcr(2:iebc,1:je)=dahybcr(2:iebc,1:je).*hybcr(2:iebc,1:je)+...
7R m\#
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));
6 C O5:\
hy(ib,1:je)=dahy(ib,1:je).*hy(ib,1:je)+...
g|->W]q@;
dbhy(ib,1:je).*(ezxbcr(1,1:je)+ezybcr(1,1:je)-ez(ie,1:je));
Rm}5AJ
UNF\k1[
%***********************************************************************
`LLmdm 6i
% Visualize fields
/$]S'[5uF
%***********************************************************************
IVZUB*wv)b
:T?WN+3
if mod(n,4)==0;
lJ]QAO
m. p'LF
timestep=int2str(n);
6<>1,wbq
8_G6X\q};
subplot(1,1,1),pcolor(ez');
'q_ Z dw%
shading flat;
n4M Xa()P1
caxis([-80.0 80.0]);
2boyBz}=S
axis([1 ie 1 je]);
,x!r^YO=
colorbar;
DpeJx
axis image;
K3`!0(
axis off;
q }>3NCh
title(['Ez at time step = ',timestep]);
S.B?l_d^
_b>{:H&\
nn=n/4;
6-tIe_5
M(:,nn)=getframe(gcf,rect);
q_`j-!
maY.Z<lN
end;
R@s|bs?
VpAwvMw
%***********************************************************************
5h^BXX|Y*
% END TIME-STEPPING LOOP
T3<1{"&
%***********************************************************************
qyFeq])
oNw=O>v
end
iY?#R&
t 4zUj%F
movie(gcf,M,0,10,rect);
共
条评分
离线
alang
UID :41410
注册:
2009-09-11
登录:
2010-03-02
发帖:
77
等级:
仿真一级
4楼
发表于: 2010-02-07 11:50:14
xiexielouzhufenxianga
共
条评分
离线
runner
UID :3922
注册:
2007-07-17
登录:
2011-06-08
发帖:
67
等级:
仿真一级
5楼
发表于: 2010-05-26 21:48:53
太长了,没信心看完
共
条评分
离线
willi111
UID :44212
注册:
2009-10-17
登录:
2015-04-12
发帖:
74
等级:
仿真一级
6楼
发表于: 2012-06-29 20:08:45
真心感谢楼主,之前试ADE-CPML试了很长时间也没结果,一直有反射,很是没头绪,楼主的分裂场PML受教了,是一个很好的参考。
共
条评分
离线
dudu86
坚持,是最好的品质
UID :94035
注册:
2012-05-15
登录:
2013-10-24
发帖:
83
等级:
仿真一级
7楼
发表于: 2013-05-27 10:22:11
我想请教楼主怎么解决的发散问题呢,是PML的设置还是电、磁场分量的迭代公式呢?
共
条评分
坚持,是最好的品质!
发帖
回复