登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
能帮忙看看我这easy的程序么?为什么出来的 ..
发帖
回复
662
阅读
0
回复
[
求助
]
能帮忙看看我这easy的程序么?为什么出来的图总是发散的?
离线
lovie
lovie
UID :74467
注册:
2011-03-25
登录:
2011-05-30
发帖:
11
等级:
仿真新人
0楼
发表于: 2011-04-30 10:09:52
200步是达到10^57了 散的厉害
j yHa}OT
j<^!"_G]*?
u({^8: AYu
%定义几个常量
?|M-0{
c=3*10^8;
T@W:@,34
e0=8.854*10^(-12);
+<bj}"
u0=4*pi*10^(-7);
_pdKcE\X
un "I
deta_x=0.001;%定义空间网格长度,为1/20波长
_U~R
deta_y=0.001;
bDl:,7;
deta_z=0.001;
Jm4uj&}3
x_max=50;%定义总的网格数
MzvhE0ab
y_max=50;
lNe4e6
z_max=50;
C*Q7@+&
%定义时间步长
Y:\msq1xp
deta_t=1/c/sqrt((1/deta_x)^2+(1/deta_y)^2+(1/deta_z)^2);
Ca |}i+
%定义迭代的次数
3bRxV @0.
step=100;
5IU!BQU
%场量置零
s$fM,l:!
hx1=zeros(x_max+1,y_max,z_max);
)LP'4*
hx2=zeros(x_max+1,y_max,z_max);
o0r&w;!
hy1=zeros(x_max,y_max+1,z_max);
j^jC|
hy2=zeros(x_max,y_max+1,z_max);
ZKi&f,:
hz1=zeros(x_max,y_max,z_max+1);
do" m=y
hz2=zeros(x_max,y_max,z_max+1);
O,%UNjx9K
ez1=zeros(x_max+1,y_max+1,z_max);
O=Su E/q
ez2=zeros(x_max+1,y_max+1,z_max);
fJ}e
ex1=zeros(x_max,y_max+1,z_max+1);
5EtR>Pc
ex2=zeros(x_max,y_max+1,z_max+1);
U%vTmdOY
ey1=zeros(x_max+1,y_max,z_max+1);
S m(*<H
ey2=zeros(x_max+1,y_max,z_max+1);
Z %pc"
%定义电流源的位置
;.h /D4
source_x=25;
?b_E\8'q]
source_y=25;
+^7cS6"L
source_z=25;
J&6p/'UPZ
%定义观察点的位置
ILuQ.VhBVN
field_x=23;
'n|U
field_y=23;
5o6IpF0V
field_z=23;
FVXsu!R
%定义激励源
!8@yi"n
%时谐源
YnpN -Y%g
frequency=15*10^9;%波长为0.02
O*N:A[eW
omiga=2*pi*frequency;
? 2}%Rb39
%高斯源
S?v/diK ]J
t0=0.0667*10^(-9);
ed'[_T}T3t
tt=0.0667*10^(-9);
^; KCE
%定义保存结果的变量
"~Fg-{jM%
result=zeros(step,1,1);
Z `F[0-
%迭代开始
m=}h7&5 p
for t=1:1:step
Tg)F.):
t
U5"u h} 3
% current(t)=sin(omiga*t*deta_t);
O?vh]o
current(t)=exp(-4*pi*(t*deta_t-t0)^2/tt^2);
=1[_#Moc6
%ex的计算;
rxp|[>O<
for i=1:1:x_max
&N.pW=%,N
for j=2:1:y_max
TQB) A9
for k=2:1:z_max
Z=% j|xE_
if i==source_x&j==source_y&k==source_z%判断是不是源点
e;6:U85LS
ex2(i,j,k)=ex1(i,j,k)+deta_t/e0*((hz2(i,j,k)-hz2(i,j-1,k))/deta_y-(hy2(i,j,k)-hy2(i,j,k-1))/deta_z)-deta_t/e0*current(t);
-mJs0E*g
else
3,i j@P
ex2(i,j,k)=ex1(i,j,k)+deta_t/e0*((hz2(i,j,k)-hz2(i,j-1,k))/deta_y-(hy2(i,j,k)-hy2(i,j,k-1))/deta_z);
)WvKRp r
end
i9 aR#
end
SkDr4kds
end
!gI0"p?
end
o@A`AA9
Oti;wf G7o
%ey的计算;
cyNE}
for i=2:1:x_max
s_ZPo6p
for j=1:1:y_max
QGNKQ`~
for k=2:1:z_max
]t<=a6<P
if i==source_x&j==source_y&k==source_z%判断是不是源点
jI,[(Z>
ey2(i,j,k)=ey1(i,j,k)+deta_t/e0*((hx2(i,j,k)-hx2(i,j,k-1))/deta_z-(hz2(i,j,k)-hz2(i-1,j,k))/deta_x)-deta_t/e0*current(t);
->ZP.7
else
&r[f ;|o
ey2(i,j,k)=ey1(i,j,k)+deta_t/e0*((hx2(i,j,k)-hx2(i,j,k-1))/deta_z-(hz2(i,j,k)-hz2(i-1,j,k))/deta_x);
4Uny.C]
end
;Tbo \Wp9
end
Mmz; uy_
end
!$Uo$?gC
end
vU%o5y:
%ez的计算;
U)dcemQY
for i=2:1:x_max
#ed|0
for j=2:1:y_max
e"866vc,
for k=1:1:z_max
]*NYuEgc
if i==source_x&j==source_y&k==source_z%判断是不是源点
2*snMA
ez2(i,j,k)=ez1(i,j,k)+deta_t/e0*((hy2(i,j,k)-hy2(i-1,j,k))/deta_x-(hx2(i,j,k)-hx2(i,j-1,k))/deta_y)-deta_t/e0*current(t);
1V,@uY)s
else
8cO?VH,nk
ez2(i,j,k)=ez1(i,j,k)+deta_t/e0*((hy2(i,j,k)-hy2(i-1,j,k))/deta_x-(hx2(i,j,k)-hx2(i,j-1,k))/deta_y);
Hec8pL
end
YI0l&'7
end
hT^&