登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
一个关于二维FDTD的问题。
发帖
回复
1124
阅读
3
回复
一个关于二维FDTD的问题。
离线
learnerlcy
UID :43237
注册:
2009-10-07
登录:
2014-01-15
发帖:
55
等级:
仿真一级
0楼
发表于: 2010-04-20 09:20:06
大家好,我是一个新手,我在学习FDTD,下面是一本书上的一个程序运行的结果,附上图,但是我看不出这是哪里出了错。
TXmS$q
程序如下:
v}6iI}r
#include "fdtd2d.h"
)x7n-|y6
int main(void)
31a,i2Q4
{
p>`rTaeZg
double ga[IE][JE], dz[IE][JE], ez[IE][JE], hx[IE][JE], hy[IE][JE];
[3G{NC|'
double ddx, dt, T, epsz, pi, epsilon, sigma, eaf;
,UMr_ e{|
double t0, spread, pulse;
2URGd#{VQ
int i, j, ic, jc, l, n, nsteps;
M% \T5
FILE *fp, *fopen();
&,k!,<IF
ic = IE/2;
%- 540V{q
jc = JE/2;
J8alqs7
ddx = 0.001;
bGH#s {'5
dt = ddx/6e8;
4SJ aAeIZ
epsz = 8.8e-12;
1N8] ~j
pi = 3.14159;
jU j\<aW
for ( j=0; j<JE; j++ )
@@Ybg6.+*
{
7@fS2mu
printf("%2d", j);
D4!;*2t
for( i=0; i<IE; i++ )
A_zCSRF,
{
1+;bd'Ie
dz
[j] = 0.;
Q+T#J9Y
ez
[j] = 0.;
fd&Fn=!
hx
[j] = 0.;
q()o|V
hy
[j] = 0.;
iY,C0=n5Y
ga
[j] = 1.0;
/GIGE##1F
printf( "%5.2", ga
[j] );
|l; Ot=C=
}
B>^6tdz
printf ("\n");
PN l/}'
}
Uz^N6q
t0 = 20.;
T>& q8'lD
spread = 6.0;
9j>2C
T = 0;
CUI3^;&S
nsteps = 1;
]`&_!T
while(nsteps > 0)
K {' atc
{
@-!P1]V|
printf("nsteps--->");
Fvl\.
scanf("%d", &nsteps);
@|anu&Hm
printf("%d \n", nsteps);
5qtk#FB
for ( n=1; n<=nsteps; n++ )
S{+t>en
{
.[O{,r
T = T + 1;
l/'GbuECm
//start of the main FDTD loop
1'E=R0`pA
wf\"&xwh?
//put a gaussian pulse in the middle
E(r_mF7:
pulse = exp( -0.5*(pow((t0-T)/spread, 2.0)));
j#5a&Z
dz[ic][jc] = pulse;
x|~8?i$%
//calculate the Dz field
]!B0= XP
for ( j=1; j<IE; j++ )
$vegU]-R
{
@*YF!LdU{M
for ( i=1; i<IE; i++)
L@S\ rImw
{
j~-N2b6z
dz
[j] = dz
[j] + 0.5 * ( hy
[j] - hy[i-1][j] - hx
[j] + hx
[j-1] );
"/Qz?1>l+
}
2X@9o4_4q
}
?s^qWA
//calculate the Ez field
~v;I>ij
for ( j=1; j<IE; j++ )
o72r `2
{
?Ij(B}D
for ( i=1; i<IE; i++)
.`OU\LA
{
JY,$B-l
ez
[j] = ga
[j]*dz
[j];
dw"Es;^
}
Ek)drt7cy
}
>&PM'k
//calculate the Hx field
OTXZdAv
for ( j=1; j<IE; j++ )
kXwAw]ogN
{
%} `` :
for ( i=1; i<IE; i++)
*-nO,K>y`
{
1!v{#w{u7
hx
[j] = hx
[j] + 0.5 * ( ez
[j] - ez
[j+1] );
3x+lf4"
}
P51M?3&=l
}
@Lnv
//calculate the Hx field
r N$0qo
for ( j=1; j<IE; j++ )
d?*]/ZiR
{
zr.\7\v
for ( i=1; i<IE; i++)
j&d5tgLB
{
w \b+OW
hy
[j] = hy
[j] + 0.5 * ( ez[i+1][j] - ez
[j+1] );
v1OVrk>s>
}
PAYw:/(P
}
0~qc,-)3
}
,eyh%k*hz
//----end of the main FDTD loop
S0^a)#D &
for ( j=1; j < jc; j++ )
_Vr- bpAf
{
#DUfEZ
printf( "%2d", j );
zEI+)|4?r
for ( i=1; i < ic; i++ )
^^N|:80
{
{cXr!N^K
printf ( "%5.2f", ez[2*i][2*j]);
"JB4Uaa
}
5qz,FKx5
printf("\n");
zC2:c"E I
}
lx:$EJ
printf( "T = %5.0f \n", T );
)zr*Ecz
//Write the E field out to a file " ..
DhyR
[Yt{h9
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
图片:1.JPG
共
条评分
离线
gwzhao
方恨少
UID :17098
注册:
2008-08-24
登录:
2019-01-09
发帖:
1374
等级:
荣誉管理员
1楼
发表于: 2010-04-20 09:43:21
递推公式错了吧。
i~';1 .g
dz[j] = dz[j] + 0.5 * ( hy[j] - hy[i-1][j] - hx[j] + hx[j-1] );
!&:=sA
到底是1D的,还是2D的,你写写好啊。
共
条评分
逆流而上
离线
xiaobestlc
UID :38453
注册:
2009-07-31
登录:
2011-03-20
发帖:
29
等级:
仿真一级
2楼
发表于: 2010-04-25 23:36:43
数组的维数就不对,循环貌似也有问题,竟然还能运行不报错。。。
f[o~d`z
RT,请教楼主,你用C编的程序,那个图是用什么软件画的啊?
共
条评分
离线
learnerlcy
UID :43237
注册:
2009-10-07
登录:
2014-01-15
发帖:
55
等级:
仿真一级
3楼
发表于: 2010-05-22 22:54:44
图是用MATLAB画的~
共
条评分
发帖
回复