登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
求救高手指导
发帖
回复
687
阅读
2
回复
[
求助
]
求救高手指导
离线
求学者是也
UID :41338
注册:
2009-09-10
登录:
2010-11-04
发帖:
125
等级:
仿真二级
0楼
发表于: 2009-09-21 17:59:50
这是我写的一个FDTD的程序(MATLAB,参考葛得彪、闫玉波的书籍)中关于UPML的部分的,我实在是不知道该如何去修改才能免去发散的情况了,
-<5H8P-
只好来这里求救,希望能有高手来救命了!!!
e pAC%a
感激不尽啊
M-5zsN
另外,附件附上我的整个的程序,有感兴趣的朋友请多指教
lW@i,1
&&n-$WEl
sigmax=5/(150*pi*dx*sqrt(1));%暂时这样设计
-PHqD
epsrmax=1.75;
GV SVNT}I
d=10; %吸收UPML层厚度
`"|u NVn
sig=zeros(ie,je,ke,3);
%最后的3分别用来表示x、y、z分量
i'0ol^~y6
epsr=ones(ie,je,ke,3);
^^( 4xHN
%%%%%%%先是构造PML层的本构参数
v?4MndR
epsr(itmin-1-d:itmin-1,jtmin-1-d:jtmax+1+d,ktmin-1-d:ktmax+1+d,2:3)=1;
3q1u9`4;
epsr(itmax+1:itmax+1+d,jtmin-1-d:jtmax+1+d,ktmin-1-d:ktmax+1+d,2:3)=1;
ptpu u=3"
for p=itmin-1-d:itmin-1
%垂直于x轴的sigma,epsr迭代
r)Iq47Uiw
sig(p,jtmin-1-d:jtmax+1+d,ktmin-1-d:ktmax+1+d,1)=sigmax*(p-itmin)^4/d^4;
_lG\_6oJ,
epsr(p,jtmin-1-d:jtmax+1+d,ktmin-1-d:ktmax+1+d,1)=1+(epsrmax-1)*(p-itmin)^4/d^4;
!%YV0O0
end
H{*R(S<I
for p=itmax+1:itmax+1+d
>c@1UEwkm
sig(p,jtmin-1-d:jtmax+1+d,ktmin-1-d:ktmax+1+d,1)=sigmax*(p-itmax)^4/d^4;
v:Z.8m8D
epsr(p,jtmin-1-d:jtmax+1+d,ktmin-1-d:ktmax+1+d,1)=1+(epsrmax-1)*(p-itmax)^4/d^4;
]m""ga
end
QLyBP!X-
b %I2ig
epsr(itmin-1-d:itmax+1+d,jtmin-1-d:jtmax+1+d,ktmin-1-d:ktmin-1,1:2)=1;
%垂直于z轴
u}KEH@yv
epsr(itmin-1-d:itmax+1+d,jtmin-1-d:jtmax+1+d,ktmax+1:ktmax+1+d,1:2)=1;
LwIX&\Ub
for k=ktmin-1-d:ktmin-1
-\fn \n
sig(itmin-1-d:itmax+1+d,jtmin-1-d:jtmax+1+d,k,3)=sigmax*(k-ktmin)^4/d^4;
CFx$r_!~
epsr(itmin-1-d:itmax+1+d,jtmin-1-d:jtmax+1+d,k,3)=1+(epsrmax-1)*(k-ktmin)^4/d^4;
rKW kT"
end
38O_PK
for k=ktmax+1:ktmax+1+d
l050n9#9p
sig(itmin-1-d:itmax+1+d,jtmin-1-d:jtmax+1+d,k,3)=sigmax*(k-ktmax)^4/d^4;
(cqVCys
epsr(itmin-1-d:itmax+1+d,jtmin-1-d:jtmax+1+d,k,3)=1+(epsrmax-1)*(k-ktmax)^4/d^4;
"npLl]XM
end
C9FQo7
eI*o9k$Qs
epsr(itmin-1-d:itmax+1+d,jtmin-1-d:jtmin-1,ktmin-1-d:ktmax+1+d,1)=1;
%垂直于y轴
'x!5fAy
epsr(itmin-1-d:itmax+1+d,jtmin-1-d:jtmin-1,ktmin-1-d:ktmax+1+d,3)=1;
XqTDLM&
epsr(itmin-1-d:itmax+1+d,jtmax+1:jtmax+1+d,ktmin-1-d:ktmax+1+d,3)=1;
].<B:]:,
epsr(itmin-1-d:itmax+1+d,jtmax+1:jtmax+1+d,ktmin-1-d:ktmax+1+d,1)=1;
Az>gaJ/_
for j=jtmin-1-d:jtmin-1
WT>2eMK[
sig(itmin-1-d:itmax+1+d,j,ktmin-1-d:ktmax+1+d,2)=sigmax*(j-jtmin)^4/d^4;
Wi(Ac8uh
epsr(itmin-1-d:itmax+1+d,j,ktmin-1-d:ktmax+1+d,2)=1+(epsrmax-1)*(j-jtmin)^4/d^4;
\LpR7D
end
QWV12t$v
for j=jtmax+1:jtmax+1+d
ln6Hr^@5
sig(itmin-1-d:itmax+1+d,j,ktmin-1-d:ktmax+1+d,2)=sigmax*(j-jtmax)^4/d^4;
QGQ>shIeZ
epsr(itmin-1-d:itmax+1+d,j,ktmin-1-d:ktmax+1+d,2)=1+(epsrmax-1)*(j-jtmax)^4/d^4;
S&YC"
end
r+%}XS%;h
%%%%%%%%%%棱边处理
')>&:~
epsr(itmin-1-d,jtmin-1-d,ktmin-1-d:ktmax+1+d,3)=1;
%;平行于z轴
|\MgE.N
sig(itmin-1-d,jtmin-1-d,ktmin-1-d:ktmax+1+d,3)=0;
T#e ;$\
epsr(itmin-1-d,jtmax+1+d,ktmin-1-d:ktmax+1+d,3)=1;
\4OX]{
sig(itmin-1-d,jtmax+1+d,ktmin-1-d:ktmax+1+d,3)=0;
/^<Uy3F[p
epsr(itmax+1+d,jtmax+1+d,ktmin-1-d:ktmax+1+d,3)=1;
[<M~6]
sig(itmax+1+d,jtmax+1+d,ktmin-1-d:ktmax+1+d,3)=0;
wR= WS',
epsr(itmax+1+d,jtmin-1-d,ktmin-1-d:ktmax+1+d,3)=1;
8/dx)*JCq
sig(itmax+1+d,jtmin-1-d,ktmin-1-d:ktmax+1+d,3)=0;
WD7IF+v
%平行于x轴
yk|<P\
epsr(itmin-1-d:itmax+1+d,jtmin-1-d,ktmax+1+d,1)=1;
kKqb:
sig(itmin-1-d:itmax+1+d,jtmin-1-d,ktmax+1+d,1)=0;
XNJPf) T
epsr(itmin-1-d:itmax+1+d,jtmax+1+d,ktmax+1+d,1)=1;
^xwnX=Np
sig(itmin-1-d:itmax+1+d,jtmax+1+d,ktmax+1+d,1)=0;
i#Y[I"'
epsr(itmin-1-d:itmax+1+d,jtmax+1+d,ktmin-1-d,1)=1;
[_h/DhC:+
sig(itmin-1-d:itmax+1+d,jtmax+1+d,ktmin-1-d,1)=0;
yy%'9E ldc
epsr(itmin-1-d:itmax+1+d,jtmin-1-d,ktmin-1-d,1)=1;
LJAqk2k
sig(itmin-1-d:itmax+1+d,jtmin-1-d,ktmin-1-d,1)=0;
|8m;}&r$
M &g1'zv?/
epsr(itmin-1-d,jtmin-1-d:jtmax+1+d,ktmin-1-d,2)=1;
%平行于y轴
x4C}AyR
sig(itmin-1-d,jtmin-1-d:jtmax+1+d,ktmin-1-d,2)=0;
cn$o$:tW
epsr(itmin-1-d,jtmin-1-d:jtmax+1+d,ktmax+1+d,2)=1;
>qBQfz:U>
sig(itmin-1-d,jtmin-1-d:jtmax+1+d,ktmax+1+d,2)=0;
?(4E le
epsr(itmax+1+d,jtmin-1-d:jtmax+1+d,ktmax+1+d,2)=1;
9=J+5V^qD<
sig(itmax+1+d,jtmin-1-d:jtmax+1+d,ktmax+1+d,2)=0;
#DI%l`B
epsr(itmax+1+d,jtmin-1-d:jtmax+1+d,ktmin-1-d,2)=1;
z"n7du}v
sig(itmax+1+d,jtmin-1-d:jtmax+1+d,ktmin-1-d,2)=0;
MM*B.y~TxZ
8(Ab NQ
D=zeros(ie,je,ke,3); %这是书中引入的几个量
pp#xN/V#a
B=zeros(ie,je,ke,3);
V9 dRn2- [
CA=zeros(ie,je,ke,3);
%CA CB 就是进行 D B的迭代式所用的系 数
{m)$ b
CB=zeros(ie,je,ke,3);
%因为 公式的形式一致所以可以共用
dC7YVs_,#
1webk;IM
DB=zeros(ie,je,ke,3); %
DB DC 还有下面的DA都是进 行 e 和 h 分量时所使用
1sqBBd"=PY
DC=zeros(ie,je,ke,3);
%的系数,但与书上不同 的是,分母中都没有相对介电、
Q=itmax-itmin+2+d;
% 磁电常数。这两个可以在迭代时分别引入
0 xUw}T6
for p=itmin-1-d:itmin-1
%CA CB DB DC 的1 2 3 分量对应的是公式上分子的x y z
c05kHB$O
for t=1:3;
%的分量。
oXef<- :
if t+2>3
%在使用这些系数是注意要对应于迭代公式的对应x y z 的系数
,u1Yn}
o=t-1;
75+#)hNa!P
else
%从这里开始进行系数的计算,往下的了两个循环也是。公
0#AS>K5
o=t+2;
%式都一致的,所以循环的内容也一样
ur,!-t(~t
end
gua +-##)
CA(p,:,:,t)=(epsr(p,:,:,t)/dt-sig(p,:,:,t)/2/epsz)./(epsr(p,:,:,t)/dt+sig(p,:,:,t)/2/epsz);
QU]&q`GE
CB(p,:,:,t)=1/(epsr(p,:,:,t)/dt+sig(p,:,:,t)/2/epsz);
<,r|*pkhp~
DB(p,:,:,t)=(epsr(p,:,:,t)/dt+sig(p,:,:,t)/2/epsz)./(epsr(p,:,:,o)/dt+...
}Ss]/_t
sig(p,:,:,o)/2/epsz);
s\k4<d5
DC(p,:,:,t)=(epsr(p,:,:,t)/dt-sig(p,:,:,t)/2/epsz)./(epsr(p,:,:,o)/dt+sig(p,:,:,o)/2/epsz);
\pXs&}%1,F
[\ M$a|K
CA(p+Q,:,:,t)=(epsr(p+Q,:,:,t)/dt-sig(p+Q,:,:,t)/2/epsz)./(epsr(p+Q,:,:,t)/dt+...
o"te7nBI
sig(p+Q,:,:,t)/2/epsz);
"B~c/%#PH
CB(p+Q,:,:,t)=1/(epsr(p+Q,:,:,t)/dt+sig(p+Q,:,:,t)/2/epsz);
4$);x/ a
DB(p+Q,:,:,t)=(epsr(p+Q,:,:,t)/dt+sig(p+Q,:,:,t)/2/epsz)./(epsr(p+Q,:,:,o)/dt+...
csceu+IA
sig(p+Q,:,:,o)/2/epsz);
g ni=S~u
DC(p+Q,:,:,t)=(epsr(p+Q,:,:,t)/dt-sig(p+Q,:,:,t)/2/epsz)./(epsr(p+Q,:,:,o)/dt+...
G% |$3
sig(p+Q,:,:,o)/2/epsz);
INi9`M.h
end
qgT~yDm
end
Ry@QJn I<
Q=jtmax-jtmin+2+d;
[z2XK4\e1T
for j=jtmin-1-d:jtmin-1
TN xl?5:
for t=1:3
;"}yVV/4
if t+2>3
raWs6b4Q
o=t-1;
tl 0_Sd
else
S_E-H.d"
o=t+2;
cBZKt
end
$2p=vi3
CA(:,j,:,t)=(epsr(:,j,:,t)/dt-sig(:,j,:,t)/2/epsz)./(epsr(:,j,:,t)/dt+sig(:,j,:,t)/2/epsz);
77FI&*q
CB(:,j,:,t)=1/(epsr(:,j,:,t)/dt+sig(:,j,:,t)/2/epsz);
#JmVq-)
DB(:,j,:,t)=(epsr(:,j,:,t)/dt+sig(:,j,:,t)/2/epsz)./(epsr(:,j,:,o)/dt+...
o$*aAgS+
sig(:,j,:,o)/2/epsz);
[Eeanl&x>
DC(:,j,:,t)=(epsr(:,j,:,t)/dt-sig(:,j,:,t)/2/epsz)./(epsr(:,j,:,o)/dt+sig(:,j,:,o)/2/epsz);
vD=>AAvG
CA(:,j+Q,:,t)=(epsr(:,j+Q,:,t)/dt-sig(:,j+Q,:,t)/2/epsz)./(epsr(:,j+Q,:,t)/dt+...
O%g Q
sig(:,j+Q,:,t)/2/epsz);
7#~v<M6
CB(:,j+Q,:,t)=1/(epsr(:,j+Q,:,t)/dt+sig(:,j+Q,:,t)/2/epsz);
'jw?XtG
DB(:,j+Q,:,t)=(epsr(:,j+Q,:,t)/dt+sig(:,j+Q,:,t)/2/epsz)./(epsr(:,j+Q,:,o)/dt+...
y9K U&