登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
一个关于二维FDTD的问题。
发帖
回复
1123
阅读
3
回复
一个关于二维FDTD的问题。
离线
learnerlcy
UID :43237
注册:
2009-10-07
登录:
2014-01-15
发帖:
55
等级:
仿真一级
0楼
发表于: 2010-04-20 09:20:06
大家好,我是一个新手,我在学习FDTD,下面是一本书上的一个程序运行的结果,附上图,但是我看不出这是哪里出了错。
E#8_hT]5
程序如下:
1] j^d
#include "fdtd2d.h"
> @+#
int main(void)
a5a1'IVq
{
7F9;Su3.
double ga[IE][JE], dz[IE][JE], ez[IE][JE], hx[IE][JE], hy[IE][JE];
3L>d!qD
double ddx, dt, T, epsz, pi, epsilon, sigma, eaf;
tRteyNA
double t0, spread, pulse;
"A;s56 }'&
int i, j, ic, jc, l, n, nsteps;
P.cO6+jGR
FILE *fp, *fopen();
V$(/0mQV(
ic = IE/2;
ryg4hHspl
jc = JE/2;
u,eZ6
ddx = 0.001;
pYt/378w
dt = ddx/6e8;
[(|^O>k8c
epsz = 8.8e-12;
6UlF5pom
pi = 3.14159;
u_LY\'n
for ( j=0; j<JE; j++ )
fD{II+T
{
{b1UX9y
printf("%2d", j);
lyyX<=E{)
for( i=0; i<IE; i++ )
r0\?WoF2C
{
(= 9wo
dz
[j] = 0.;
[![ G7H%f
ez
[j] = 0.;
MAnp{
hx
[j] = 0.;
/PXioiGcs
hy
[j] = 0.;
)Vg2Jix,]
ga
[j] = 1.0;
]*3:DU
printf( "%5.2", ga
[j] );
rnO0-h-;
}
D{cZxI
printf ("\n");
yyP'Z~0
}
`}gdN};
t0 = 20.;
1* ^'\W.
spread = 6.0;
1}}>Un`U5,
T = 0;
M;KA]fmc
nsteps = 1;
/Wu |)tx
while(nsteps > 0)
]dG\j^e|
{
\3aTaT?..
printf("nsteps--->");
Hd%!Nt\u
scanf("%d", &nsteps);
KXf<$\+zO
printf("%d \n", nsteps);
@uM EXP
for ( n=1; n<=nsteps; n++ )
^/dS>_gtHv
{
%&+TbDE+T
T = T + 1;
Fnb2.R'+
//start of the main FDTD loop
vZu~LW@1
'tm$q/&
//put a gaussian pulse in the middle
B_k2u
pulse = exp( -0.5*(pow((t0-T)/spread, 2.0)));
VYaSB?`/
dz[ic][jc] = pulse;
o>F*Itr{
//calculate the Dz field
<'+ %\
for ( j=1; j<IE; j++ )
.wy$-sG81
{
FW#P*}#
for ( i=1; i<IE; i++)
]GX \|1L
{
*P!s{i
dz
[j] = dz
[j] + 0.5 * ( hy
[j] - hy[i-1][j] - hx
[j] + hx
[j-1] );
&cu!Hx
}
l}rS{+:wK
}
>.<ooWw
//calculate the Ez field
(e9fm|n!)|
for ( j=1; j<IE; j++ )
G 4qy*.
{
+}aC-&
for ( i=1; i<IE; i++)
B[F-gq-
{
}"_j0ax
ez
[j] = ga
[j]*dz
[j];
O4L#jBa+
}
9JnY$e<&
}
S@xXq{j
//calculate the Hx field
!8R@@,_v
for ( j=1; j<IE; j++ )
J[@um:
{
;Lo&}U3F,!
for ( i=1; i<IE; i++)
O>c$sL0g
{
q+ pOrGh
hx
[j] = hx
[j] + 0.5 * ( ez
[j] - ez
[j+1] );
+@<KC
}
,O]l~)sr|
}
>$H|:{D
//calculate the Hx field
]6&$|2H?Ni
for ( j=1; j<IE; j++ )
gg^1b77hT
{
tHh HrMxO
for ( i=1; i<IE; i++)
\?Mf _
{
{q3:Z{#>7
hy
[j] = hy
[j] + 0.5 * ( ez[i+1][j] - ez
[j+1] );
/(?@mnq_
}
|cDszoT /
}
d-B7["z,
}
bA@P}M)X
//----end of the main FDTD loop
_w(ln9
for ( j=1; j < jc; j++ )
\NK-L."[
{
Wto;bd
printf( "%2d", j );
\.#p_U5In
for ( i=1; i < ic; i++ )
?WpenUWk
{
fP[& a9l
printf ( "%5.2f", ez[2*i][2*j]);
;AIc?Cg
}
!MVj=(
printf("\n");
l&W;b6L
}
bk<FL6z z
printf( "T = %5.0f \n", T );
>MG(qi
//Write the E field out to a file " ..
A6{b?aQ
@I-Lv5
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
图片:1.JPG
共
条评分
离线
gwzhao
方恨少
UID :17098
注册:
2008-08-24
登录:
2019-01-09
发帖:
1374
等级:
荣誉管理员
1楼
发表于: 2010-04-20 09:43:21
递推公式错了吧。
"Z=5gj
dz[j] = dz[j] + 0.5 * ( hy[j] - hy[i-1][j] - hx[j] + hx[j-1] );
U_G gCI)
到底是1D的,还是2D的,你写写好啊。
共
条评分
逆流而上
离线
xiaobestlc
UID :38453
注册:
2009-07-31
登录:
2011-03-20
发帖:
29
等级:
仿真一级
2楼
发表于: 2010-04-25 23:36:43
数组的维数就不对,循环貌似也有问题,竟然还能运行不报错。。。
mLV[uhq
RT,请教楼主,你用C编的程序,那个图是用什么软件画的啊?
共
条评分
离线
learnerlcy
UID :43237
注册:
2009-10-07
登录:
2014-01-15
发帖:
55
等级:
仿真一级
3楼
发表于: 2010-05-22 22:54:44
图是用MATLAB画的~
共
条评分
发帖
回复