登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
三维pml matlab 程序,有问题,大侠帮忙啊,急 ..
发帖
回复
1
2
3756
阅读
10
回复
[
已解决
]
三维pml matlab 程序,有问题,大侠帮忙啊,急!
离线
sn1029
UID :18655
注册:
2008-10-07
登录:
2009-10-21
发帖:
9
等级:
旁观者
0楼
发表于: 2008-10-21 12:33:26
经过进一步检验,这是修改之后的程序,不过仍存在问题:1、激励源的加法,我的激励源修改后分别加到两个分量上,但距离源点几个网格后仍产生毛刺,说明源的加入还是有问题;2、我的程序是把自由空间和pml层一起做了运算和迭代,其实边角问题已经不存在,不需要考虑了(二维已经验证了),这样编程的好处是缩短程序,全域统一编程。
i`!>zl+D
现在的程序仍有毛刺,请高手帮我改正,万分感激!!!谢谢!!
PD-*rG `
clear
Lv>O BHD
c=3e8;
Dt'bbX'edw
muz=4*pi*1e-7;
W A#y&
epsz=1/(c*c*muz);
$kxu-
f=1e+9;
j$P`/-N
lambda=c/f;
$,nidK!"
omega=2*pi*f;
Ru$%gh>v
ds=lambda/12;
K!v\r"N
dt=ds/(2*c);
xN!In-v[j;
muz=4*pi*1e-7;
#d$lN}8
R0=1e-5;
r>6FJ:Tx
K#R|GEwr
%************************************************
<jh=W9.N_
ie=50; %x向空间步
CxrsP.
je=50; %y向空间步
3s#/d,+
ke=50; %z向空间步
*1*i5c
ib=ie+1;
E=ObfN"ge
jb=je+1;
mJsU7bD`
kb=ke+1;
X#ud_+6x
is=25; %激励源x向位置
nd{k D>a
js=25; %激励源y向位置
hwSxdT6
ks=25; %激励源z向位置
43*;" w=
iebc=8; %左、右PML层层数
2|${2u`$&y
jebc=8; %上、下PML层层数
Tzfk_h3hE
kebc=8; %前、后PML层层数
]<u%jTQREd
ibbc=iebc+1;
Tz7|OV_W$
jbbc=jebc+1;
i4)]lWnd
kbbc=kebc+1;
_TbvQY
nmax=100; %时间步
hcR^?
dlta=6; %观测点距激励源步数
LKg9{0Y:
)gk tI!
%Lp#2?*
%************************************************
J$S*QCo
Exy=zeros(ie,jb,kb);
p\tA&>3-
Exz=zeros(ie,jb,kb);
)4n]n:FjN
Eyx=zeros(ib,je,kb);
Q'aVdJN,
Eyz=zeros(ib,je,kb);
C-H6l6,
Ezx=zeros(ib,jb,ke);
tQ)l4Y 8
Ezy=zeros(ib,jb,ke);
l7(p~+o?h>
Hxy=zeros(ib,je,ke);
[=>[ 2Ty
Hxz=zeros(ib,je,ke);
4H`B]Zt7
Hyx=zeros(ie,jb,ke);
XLlJ|xhY-K
Hyz=zeros(ie,jb,ke);
;33SUgX
Hzx=zeros(ie,je,kb);
oz l>Au
Hzy=zeros(ie,je,kb);
-#r=
dlMjy$/T
H5be 5
fid1=fopen('m1.txt','wt');
sc z8`%
fid2=fopen('m2.txt','wt');
CUj$ <ay=
%************************************************
GYV%RD #
sigxmax=-log(R0)/(2*iebc*ds)*3*epsz*c; %x向最大电导率
',I$`h
sigymax=-log(R0)/(2*jebc*ds)*3*epsz*c; %y向最大电导率
xo{z4W
sigzmax=-log(R0)/(2*kebc*ds)*3*epsz*c;
VI)hA ^S
fBKN?]BdN
pAyUQe;X#
for i=1:ib %x向网格节点处电导率分布
8L*#zaSAf
if i<=iebc
DKG;up0
sigx(i)=sigxmax*((iebc+1-i)/iebc)^2; %左侧PML层
/`7G 7pQ+
elseif i>=ib-iebc+1 %右侧PML层
`*cJc6
sigx(i)=sigxmax*((i-ib+iebc)/iebc)^2;
)ZpMB
else
5[P^O6'
sigx(i)=0; %中间自由空间
BfQ#5
end
_OB^ywHn.
cax(i)=(1-(dt*sigx(i))/(2*epsz))/(1+(dt*sigx(i))/(2*epsz));
v1 f^gde
cbx(i)=(dt/epsz/ds)/(1+(dt*sigx(i))/(2*epsz));
U :8cz=#
Iv?1XI=
end
{T3wOi
for i=1:ie %x方向网格边中点处电导率分布
afjEN y1
if i<=iebc
@Suww@<
sigxh(i)=sigxmax*((iebc+1-i-0.5)/iebc)^2; %左侧PML层
6ciA|J'MR
elseif i>=ie-iebc+1 %右侧PML层
jK2gc^"t
sigxh(i)=sigxmax*((i-ie+iebc-0.5)/iebc)^2;
fF.+{-.
else
Rd|^C$6
sigxh(i)=0; %中间自由空间
y4Nam87;/?
end
^%qQ)>I=j
roux(i)=muz*sigxh(i)/epsz; %磁导率
3Q_)Xs r`
cpx(i)=(1-(dt*roux(i))/(2*muz))/(1+(dt*roux(i))/(2*muz));
M+7jJ?n
cqx(i)=(dt/muz/ds)/(1+(dt*roux(i))/(2*muz));
u89Q2\z~"M
end
H h%|}*f_,
@`HW0Y_:
x/%/MFK)>8
|C7=$DgwY
for j=1:jb %y方向网格节点处电导率分布
S0;s 7X#c
if j<=jebc
?Xqkf>
sigy(j)=sigymax*((jebc+1-j)/jebc)^2; %下侧PML层
Qi|k,1A0
elseif j>=jb-jebc+1 %上侧PML层
f5'vjWJ30
sigy(j)=sigymax*((j-jb+jebc)/jebc)^2;
z/i&Lpr:
else
5w</Ga
sigy(j)=0; %中间自由空间
kuv+ TN
end
cZAf?,>u
cay(j)=(1-(dt*sigy(j))/(2*epsz))/(1+(dt*sigy(j))/(2*epsz));
BuS[(
cby(j)=(dt/epsz/ds)/(1+(dt*sigy(j))/(2*epsz));
+aOX{1w
end
P} Y .
for j=1:je %y方向网格边中点处电导率分布
]F"@+_E
if j<=jebc
*+ +}ll6
sigyh(j)=sigymax*((jebc+1-j-0.5)/jebc)^2; %下侧PML层
LKst QP!I
elseif j>=je-jebc+1 %上侧PML层
J n'SGR
sigyh(j)=sigymax*((j-je+jebc-0.5)/jebc)^2;
\Lm`jU(:l
else
8aW<lu
sigyh(j)=0; %中间自由空间
PsN_c[+
end
O*c<m,
rouy(j)=muz*sigyh(j)/epsz; %磁导率
)yS8(F0
cpy(j)=(1-(dt*rouy(j))/(2*muz))/(1+(dt*rouy(j))/(2*muz));
l$C Y gm
cqy(j)=(dt/muz/ds)/(1+(dt*rouy(j))/(2*muz));
!~Kg_*IT
end
~P"o_b6,k
;V84Dy#b
9M@,BXOt
"nU] 2
for k=1:kb %z方向网格节点处电导率分布
n{"a0O
if k<=kebc
w+hpi5OH
sigz(k)=sigzmax*((kebc+1-k)/kebc)^2; %前侧PML层
c=p!2jJ1K~
elseif k>=kb-kebc+1 %后侧PML层
@Z Dd(xB&
sigz(k)=sigzmax*((k-kb+kebc)/kebc)^2;
]i8t
else
TmJXkR.5
sigz(k)=0; %中间自由空间
mH )i
end
Z5[g[Q
caz(k)=(1-(dt*sigz(k))/(2*epsz))/(1+(dt*sigz(k))/(2*epsz));
{}BAQ9|q
cbz(k)=(dt/epsz/ds)/(1+(dt*sigz(k))/(2*epsz));
@R ;&P