登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
大家帮忙看看我这个UPML有耗介质的迭代方程 ..
发帖
回复
3156
阅读
1
回复
[
求助
]
大家帮忙看看我这个UPML有耗介质的迭代方程写的对吗(代码已贴出)?
离线
xiaoyuan
UID :53338
注册:
2010-02-28
登录:
2015-12-05
发帖:
156
等级:
仿真二级
0楼
发表于: 2010-08-29 06:12:32
小弟初学者,我基于论坛里Program author: Keely J. Willis, Graduate Student UW Computational Electromagnetics Laboratory
uij^tN%
Director: Susan C. Hagness编的真空UPML代码的基础上改编成UPML连接有耗介质的代码,但是一旦我把sigma赋值后,比如让sigma=0.5,结果就不对,非常小(10的负一百多次方),而且幅值是一直增大的趋势。但当把sigma赋成0时,结果看上去似乎就合理。不知道为什么,想请各位有经验的高手给点建议或找找原因。 谢谢大家!!
:\His{%
sAL ]N][Y
下面是我的迭代方程。其中磁场迭代方程我没有动它,和源代码一样。电场迭代方程我是基于talflove的书第二版第七章7.10节的公式。
31G0B_T
"W(Ae="60
%
Update magnetic field
S\&3t}_
<TRhn z
bstore=bx;
3+>n!8x ;A
bx(2:ie_tot,:,:)=D1hx(2:ie_tot,:,:).* bx(2:ie_tot,:,:)-...
qclc--fsE
D2hx(2:ie_tot,:,:).*((ez(2:ie_tot,2:jh_tot,:)-ez(2:ie_tot,1:je_tot,:))-...
IyyBW2
(ey(2:ie_tot,:,2:kh_tot)-ey(2:ie_tot,:,1:ke_tot)))./delta;
U"p</Q
&gY) x{
hx(2:ie_tot,:,:)= D3hx(2:ie_tot,:,:).*hx(2:ie_tot,:,:)+...
&EQhk9j
D4hx(2:ie_tot,:,:).*(D5hx(2:ie_tot,:,:).*bx(2:ie_tot,:,:)-...
Z}dK6h5+'
D6hx(2:ie_tot,:,:).*bstore(2:ie_tot,:,:));
#H>{>0q
)&7.E
bstore=by;
qVE0[ve
by(:,2:je_tot,:)=D1hy(:,2:je_tot,:).* by(:,2:je_tot,:)-...
~RuX2u-2&u
D2hy(:,2:je_tot,:).*((ex(:,2:je_tot,2:kh_tot)-ex(:,2:je_tot,1:ke_tot))-...
Kh(`6 f
(ez(2:ih_tot,2:je_tot,:)-ez(1:ie_tot,2:je_tot,:)))./delta;
6,3o_"J!
d)YlD]I
hy(:,2:je_tot,:)= D3hy(:,2:je_tot,:).*hy(:,2:je_tot,:)+...
f;zNNx< ;
D4hy(:,2:je_tot,:).*(D5hy(:,2:je_tot,:).*by(:,2:je_tot,:)-...
M[YFyM(
D6hy(:,2:je_tot,:).*bstore(:,2:je_tot,:));
gK[;"R)4o@
qEST[S V
bstore=bz;
Zg(Y$ h\
bz(:,:,2:ke_tot)=D1hz(:,:,2:ke_tot).* bz(:,:,2:ke_tot)-...
&9#m]Mz
D2hz(:,:,2:ke_tot).*((ey(2:ih_tot,:,2:ke_tot)-ey(1:ie_tot,:,2:ke_tot))-...
?s^3o{!<W
(ex(:,2:jh_tot,2:ke_tot)-ex(:,1:je_tot,2:ke_tot)))./delta;
3$k#bC
CPP~,E_
hz(:,:,2:ke_tot)= D3hz(:,:,2:ke_tot).*hz(:,:,2:ke_tot)+...
H,X|-B
D4hz(:,:,2:ke_tot).*(D5hz(:,:,2:ke_tot).*bz(:,:,2:ke_tot)-...
_q27 3QG/"
D6hz(:,:,2:ke_tot).*bstore(:,:,2:ke_tot));
WxGD*%
EaO@I.[
% Update electric field
Kg$RT?q-C6
qMNWw\k
p1store=px1;
!`Rh2g*o9
:V)jm`)#+
px1(:,2:je_tot,2:ke_tot)=C1ex(:,2:je_tot,2:ke_tot).* px1(:,2:je_tot,2:ke_tot)+...
@9gZH_ur>E
C2ex(:,2:je_tot,2:ke_tot).*((hz(:,2:je_tot,2:ke_tot)-hz(:,1:je_tot-1,2:ke_tot))-...
;X,u
( hy(:,2:je_tot,2:ke_tot)-hy(:,2:je_tot,1:ke_tot-1)))./delta;
V;XKvH
\7/yWd{N$
p2store=px2;
0d9z8y
:BF ? r
px2(:,2:je_tot,2:ke_tot)=C3ex(:,2:je_tot,2:ke_tot).* px2(:,2:je_tot,2:ke_tot)+...
==5F[UX
C4ex(:,2:je_tot,2:ke_tot).*( px1(:,2:je_tot,2:ke_tot)-...
%7)=k}4
p1store(:,2:je_tot,2:ke_tot));
Pj-INc96
{G:y?q'z
ex(:,2:je_tot,2:ke_tot)=C5ex(:,2:je_tot,2:ke_tot).* ex(:,2:je_tot,2:ke_tot)+...
!=,4tg`
C6ex(:,2:je_tot,2:ke_tot).*(C7ex(:,2:je_tot,2:ke_tot).* px2(:,2:je_tot,2:ke_tot)-...
cj8cV|8@
C8ex(:,2:je_tot,2:ke_tot).*p2store(:,2:je_tot,2:ke_tot));
k k3^m1
K}R+~<bIY
p1store=py1;
D%YgS$p[M$
.9qK88fU R
py1(2:ie_tot,:,2:ke_tot)=C1ey(2:ie_tot,:,2:ke_tot).* py1(2:ie_tot,:,2:ke_tot)+...
fo@^=-4A-
C2ey(2:ie_tot,:,2:ke_tot).*((hx(2:ie_tot,:,2:ke_tot)-hx(2:ie_tot,:,1:ke_tot-1))-...
M`Er&nQs
( hz(2:ie_tot,:,2:ke_tot)-hz(1:ie_tot-1,:,2:ke_tot)))./delta;
5XZ!yYB?
s3Vb2C*
p2store=py2;
'+cI W(F?
~hLan&T
py2(2:ie_tot,:,2:ke_tot)=C3ey(2:ie_tot,:,2:ke_tot).* py2(2:ie_tot,:,2:ke_tot)+...
ijF_ KP'
C4ey(2:ie_tot,:,2:ke_tot).*( py1(2:ie_tot,:,2:ke_tot)-...
EMW6'
p1store(2:ie_tot,:,2:ke_tot));
~y!'\d>q<
LSJ?;Zg(=z
ey(2:ie_tot,:,2:ke_tot)=C5ey(2:ie_tot,:,2:ke_tot).* ey(2:ie_tot,:,2:ke_tot)+...
)S)L9('IxT
C6ey(2:ie_tot,:,2:ke_tot).*(C7ey(2:ie_tot,:,2:ke_tot).* py2(2:ie_tot,:,2:ke_tot)-...
~t`s&t'c|
C8ey(2:ie_tot,:,2:ke_tot).*p2store(2:ie_tot,:,2:ke_tot));
3`HK^((o
-Ks>s
p1store=pz1;
LmF ,en5
aKbmj
pz1(2:ie_tot,2:je_tot,:)=C1ez(2:ie_tot,2:je_tot,:).* pz1(2:ie_tot,2:je_tot,:)+...
C|$qVh>
C2ez(2:ie_tot,2:je_tot,:).*((hy(2:ie_tot,2:je_tot,:)-hy(1:ie_tot-1,2:je_tot,:))-...
\WCQ>c?~
( hx(2:ie_tot,2:je_tot,:)-hx(2:ie_tot,1:je_tot-1,:)))./delta;
!.]JiT'o
p2store=pz2;
)#}>,,S
Z .6dL
pz2(2:ie_tot,2:je_tot,:)=C3ez(2:ie_tot,2:je_tot,:).* pz2(2:ie_tot,2:je_tot,:)+...
Dsg>~J'
C4ez(2:ie_tot,2:je_tot,:).*( pz1(2:ie_tot,2:je_tot,:)-...
8-#%l~dr
p1store(2:ie_tot,2:je_tot,:));
_8VP'S=
dw bR,K
pz2(is,js,ks:ks+1)=pz2(is,js,ks:ks+1)+exp(-((n-4.5*tau/dt)^2/(tau/dt)^2));
@LKQ-<dZG
BPba3G9H
ez(2:ie_tot,2:je_tot,:)=C5ez(2:ie_tot,2:je_tot,:).* ez(2:ie_tot,2:je_tot,:)+...
;<AcW.jx
C6ez(2:ie_tot,2:je_tot,:).*(C7ez(2:ie_tot,2:je_tot,:).* pz2(2:ie_tot,2:je_tot,:)-...
2@D`^]]
C8ez(2:ie_tot,2:je_tot,:).*p2store(2:ie_tot,2:je_tot,:));
QOF@DvQ
*glZb;_
以下是全部代码:希望各位能帮忙看看哪里不对。
DZ8|20b
(注明:我在给迭代系数赋值时是一部分一部分慢慢赋值,并没有像原代码那样一起赋值,所以有点冗长,但是我目前是想找出这个代码哪里有毛病。所以优化问题先放一边,希望大家能理解,如果对代码有不清楚的地方,回复我。我会每天都上论坛给予解释。谢谢!)
*x"80UXL
%t9C
(说明:(其实大家不用在意这个)为了方便大家理解,我的UPML层,想象中是整体向内缩减了0.25个网格长度。如果把网格坐标定为1,2,3...一直到61(60个格子),那pml层的坐标就是从1.25,2.25,3.25.... 一直到11.25和 从50.75,51.75....一直到60.75。大家可以想象一下。 (原来可能是从1,2,3...到11,51,52,53.....到61 我就是将每个方向的pml的范围将两头向中间压缩了0.25个网格长。)
'-;[8:y.
n{;j
_>;Wz7
%***********************************************************************
KQdIG9O+6
% Fundamental constants
p~qe/
%***********************************************************************
9Eyx Ob
g>@JGzMLP
cc=2.99792458e8;
pN%&`]Wev
muz=4.0*pi*1.0e-7;
0M_oFx
epsz=1.0/(cc*cc*muz);
!+T1kMP+l
etaz=sqrt(muz/epsz);
0mY Y:?v
sigma_e=0.0; %大家run一下程序就知道当将此处sigma_e的值改为比如0.5,结果就不太对。为什么??
zH8E,)
K9lgDk"i
&_ekA44E
%***********************************************************************
<\aeC2~M
% Material parameters
,^#Jw`w^
%***********************************************************************
Eah6"j!B8n
Sjpx G@k
mur=1.0;
,fVD`RR(W?
epsr=80;
_!\d?]Ya
freq=20000;
u/zBz*zh
eta=etaz*sqrt(mur/epsr); %
HGDrH
du3f'=q6|
c=1/sqrt(epsr*epsz*muz*mur);
#<im?
%***********************************************************************
X W)TI
% Grid parameters
!_<6}:ZB
%
IHl q27O
% Each grid size variable name describes the number of sampled points
)h!cOEt
% for a particular field component in the direction of that component.
d8j1L/e
% Additionally, the variable names indicate the region of the grid
}htjT/Nm
% for which the dimension is relevant. For example, ie_tot is the
g`7XE
% number of sample points of Ex along the x-axis in the total
"s*-dZO
% computational grid, and jh_bc is the number of sample points of Hy
#o.e (C
% along the y-axis in the y-normal UPML regions.
~Iu! B Y
%
!>8~R2
%***********************************************************************
*T|B'80
k_al*iM>H
`2s!%/
%是一个三维立方体空间,60*60*60(已经包括了厚度为10的upml层)
`FP?9R6Y
6o3 bq|
0B NLTRv
ie=40; % Size of main grid
CLb6XnkcA\
je=40;
\N>-+r
ke=40;
'y8{,R4C
ih=ie+1;
'X`Z1L/
jh=je+1;
/0h *(nL
kh=ke+1;
*z=_sD?1
3FEJ 9ZyG
upml=10; % Thickness of PML boundaries
l>?c AB[
ih_bc=upml+1;
_FLEz|%~
jh_bc=upml+1;
d2 ^}ooE
kh_bc=upml+1;
}'X=&3m
c?p^!zG
ie_tot=ie+2*upml; % Size of total computational domain
\oQ]=dDCd%
je_tot=je+2*upml;
U2oCSo5:3N
ke_tot=ke+2*upml;
ie}OZM
ih_tot=ie_tot+1;
Y?T{>"_W
jh_tot=je_tot+1;
^URCnJ67Se
kh_tot=ke_tot+1;
^u/%zL
GF'wDi}
pxs = 11;
y7R#PkQ~
pys = 11;
(!os&/",
pzs = 11;
Hd|l6/[xz
(B7G'h.?
pxe = 51;
$`=p]
pye = 51;
5gszAvOO
pze = 51;
--$o$EP`
m7 =$*1k
is=round(ih_tot/2); % Location of z-directed current source
fV(3RG
js=round(jh_tot/2);
sGvbL-S-f:
ks=round(ke_tot/2);
I$n=>s
S2~cAhR|M
%***********************************************************************
jcH@*c=%e
% Fundamental grid parameters
)xGAe#E~j
%***********************************************************************
8sG3<$Z^
V|7YRa@
delta= 83.794539403718844;
FqKJids-
dt=0.9./sqrt(3.0./delta./delta)./c;
pMc6p0
%dt=delta*sqrt(epsr*mur)/(2.0*cc);
^E !v D
%dt=delta*0.5/c;
AKNx~!%2
nmax=200;
`+JFvn!
v0^9"V:y
%***********************************************************************
&J[a.:..
% Differentiated Gaussian pulse excitation
\u3\ TJ
%***********************************************************************
::L2zVq5V
wucdXj{%
rtau=50.0e-12;
=BsV`p7rU
%tau=rtau/dt;
4JSPD#%f
tau = 20*delta/2/c;
KaGUpHw
ndelay=3*tau;
|m19fg3u
J0=-1.0*epsz;
7p&jSOY
^ k^y|\UtZ
%***********************************************************************
?0tg}0|
% Initialize field arrays
^?69|,
%***********************************************************************
bdUPo+
-+9[X*VCc
ex =zeros(ie_tot,jh_tot,kh_tot);
s:`i~hjq
px1=zeros(ie_tot,jh_tot,kh_tot);
2EY"[xK|
px2=zeros(ie_tot,jh_tot,kh_tot);
_B4&Fb.
?Cq7_rq
ey= zeros(ih_tot,je_tot,kh_tot);
I-7LT?r
py1=zeros(ih_tot,je_tot,kh_tot);
A]1Nm3@
py2=zeros(ih_tot,je_tot,kh_tot);
o<2GtF1"o
7\u+%i;YZ
ez= zeros(ih_tot,jh_tot,ke_tot);
l?Y^3x}j
pz1=zeros(ih_tot,jh_tot,ke_tot);
/Y Kd [RQ
pz2=zeros(ih_tot,jh_tot,ke_tot);
ZSMed(//b
@u3`lhUcT
hx=zeros(ih_tot,je_tot,ke_tot);
'[F:uA
hy=zeros(ie_tot,jh_tot,ke_tot);
+)Te)^&v%
hz=zeros(ie_tot,je_tot,kh_tot);
k_=SDm a
bx=zeros(ih_tot,je_tot,ke_tot);
&4'<