登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
一段一维FDTD程序的问题
发帖
回复
1543
阅读
8
回复
一段一维FDTD程序的问题
离线
learnerlcy
UID :43237
注册:
2009-10-07
登录:
2014-01-15
发帖:
55
等级:
仿真一级
0楼
发表于: 2009-11-14 22:09:41
这是一个叫DENIS的人写的一本书上面的例子,但是我在我的机子运行的结果就是不对,不知道哪里出了错,我是新手,望多多指教。
^:K3vC[h;c
JCz@s~f\y
/*1D FDTD simulation in free space*/
]Gpxhg
#include<math.h>
2]I4M[|&z
#include<stdlib.h>
&yGaCq;0
#include<stdio.h>
P.6nA^hXB
rE iKi
#define KE 200
%dJX-sm@
i#7DR>XF/
main()
L>MLi3{
{
LL] zT H0
float ex[KE], hy[KE];
09dK0H3(
int n, k, kc, ke, NSTEPS;
d1T,eJ}
float T;
I{ HN67O
float t0, spread, pulse;
&?VQ,+[<
FILE *fp; //, *fopen();
e@c0WlWa
nFE4qm
/*Initialize*/
'=[?~0(B
for (k=1; k<KE; k++)
>GQEqXs
{
MA;1;uI,
ex[k] = 0;
H:!7:
hy[k] = 0;
4/mig0"N.
}
0*%Z's\M"
=NOH:#iQ
kc = KE/2; //Center of the problem space
^9^WuSq
t0 = 40.0; //Center of the incident pulse
pV.Av
spread = 12; //Width of the incident pulse
"vXxv'0\f
T = 0;
k:*S&$S!E
NSTEPS = 1;
=Qh\D
!O-T0O
while(NSTEPS > 0)
y(Y!?X I
{
T^:UBjK6t{
printf("NSTEPS -->"); //NSTEPS is the number of times the main loop has executed
;} und*q
scanf("%d", &NSTEPS);
k9)jjR*XxG
printf("%d\n", NSTEPS);
K|Ld,bq
n = 0;
%T X@I$Ba
for (n=1; n<=NSTEPS; n++)
0.dgoq3u
{
Uh7v@YMC
T = T+1;
P9=?zh6G.
//Main FDTD Loop
;w:M`#2
/*Calculate the Ex field*/
xB_!>SqF1U
for ( k=1; k < KE; k++)
VGtC)mG8)
{
N e#WI'
ex[k] = ex[k]+ 0.5*( hy[k-1] - hy[k] );
1v,Us5s<"6
}
aD=a ,
//Put a Gaussian pulse in the middle
cU0s p
pulse = exp(-0.5*(pow((t0-T)/spread, 2.0 )));
S?RN?1
ex[kc] = pulse;
Xua+cVc\y
printf( " %5.1f %6.2f \n", t0 - T, ex[kc] );
~vs}.kb
//Calculate the Hy field
:80Z6F.k`
for (k=0; k<KE-1; k++)
EG0WoUX|
{
iOwx0GD.n
hy[k] = hy[k] +0.5* (ex[k] - ex[k+1] );
*&?c(JU;<
}
T;@;R%
}
O?U'!o=
//End of the Main loop
+# GQ,
//At the end of the calculation ,print out the Ex and Hy fields
8d?g]DEN)6
for (k=1; k<=KE; k++)
*\=.<|H Z
{
A6GE,FhsG
printf("%3d %6f %6.2f\n", k, ex[k], hy[k]);
SfgU`eF%B
}
<.pU,T/
n9@ of
//Write the E field out to a file "Ex"
s >e=?W
fp = fopen("Ex.dat","w");
)\sc83L
for (k=1; k<=KE; k++)
.7i` (F)
{
&n6$rBr%
fprintf(fp, "%d %6.2f \n",k, ex[k]);
Y3r%B9~
}
Of{/t1o?
fclose(fp);
%FXfqF9
+6UVn\9Q
//Write the H field out to a file "Hy"
ZX5 xF<os8
&nb ..
/3eKN
(rkyW z
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
离线
learnerlcy
UID :43237
注册:
2009-10-07
登录:
2014-01-15
发帖:
55
等级:
仿真一级
1楼
发表于: 2009-11-14 22:12:12
这是计算结果画的图
图片:untitled.jpg
共
条评分
离线
learnerlcy
UID :43237
注册:
2009-10-07
登录:
2014-01-15
发帖:
55
等级:
仿真一级
2楼
发表于: 2009-11-15 00:04:48
这个结果似乎是发散的啊~~不知道怎么弄才对啊?
共
条评分
离线
learnerlcy
UID :43237
注册:
2009-10-07
登录:
2014-01-15
发帖:
55
等级:
仿真一级
3楼
发表于: 2009-11-15 12:08:58
怎么没人回答我,急呀~这次我把C语言的代码文件给附上~希望哪位高手指教一二啊!
附件:
fdtd_1.1a.rar
(1 K) 下载次数:10
共
条评分
离线
kerving16
UID :48824
注册:
2009-12-14
登录:
2009-12-14
发帖:
3
等级:
旁观者
4楼
发表于: 2009-12-14 21:07:46
研究研究~~~~~~~~~~~
共
条评分
离线
gwzhao
方恨少
UID :17098
注册:
2008-08-24
登录:
2019-01-09
发帖:
1374
等级:
荣誉管理员
5楼
发表于: 2009-12-14 22:16:01
for ( k=1; k < KE; k++)
h. hjz?
{
0vs0*;F;
ex[k] = ex[k]+ 0.5*( hy[k] - hy[k-1] );
4cCF\&yU
}
F=@i6ERi
N:+ taz-
for (k=0; k<KE-1; k++)
),@f6](
{
Mxz,wfaH>
hy[k] = hy[k] +0.5* (ex[k+1] - ex[k] );
L x|',6S
}
共
条评分
逆流而上
离线
gwzhao
方恨少
UID :17098
注册:
2008-08-24
登录:
2019-01-09
发帖:
1374
等级:
荣誉管理员
6楼
发表于: 2009-12-14 22:16:26
你改一下,试试看行不行。
共
条评分
逆流而上
离线
alang
UID :41410
注册:
2009-09-11
登录:
2010-03-02
发帖:
77
等级:
仿真一级
7楼
发表于: 2010-02-07 10:49:17
xiexielouzhufenxianga
共
条评分
离线
learnerlcy
UID :43237
注册:
2009-10-07
登录:
2014-01-15
发帖:
55
等级:
仿真一级
8楼
发表于: 2010-03-17 23:22:43
回 5楼(gwzhao) 的帖子
谢谢啊,最近在忙别的事情,好久没来了~这个程序我已经解决掉了!谢谢你!
aH^{Vv$]M@
/*1D FDTD simulation in free space*/
z"qv
#include<math.h>
2YluJ:LN
#include<stdlib.h>
%09*l%,;
#include<stdio.h>
N1s.3`
qAORWc
#define KE 200
L6 kZ2-6
8 >dq=0:
main()
oB}K[3uB:t
{
iP,v=pS6
double ex[KE], hy[KE];
<vLdBfw&N
int n, k, kc, ke, NSTEPS;
~zj"OG"zOw
double T;
6d};|#}
double t0, spread, pulse;
26}u4W$
double ex_low_m1, ex_low_m2, ex_high_m1, ex_high_m2;
IadK@?X6j
FILE *fp;
\N yr=<c
IO6MK&R
//Initialize
O sB?1;:
for (k=0; k<KE; k++)
;x16shH
{
zM\IKo_"
ex[k] = 0;
pMDH
hy[k] = 0;
H}a)^90_
}
Mb~~A5
*@~`d*d
kc = KE/2; //Center of the problem space
a>?p.!BM
t0 = 40.0; //Center of the incident pulse
>*{:l,LH
spread = 25; //Width of the incident pulse
"Ac~2<V
T = 0;
kMqD iJ
NSTEPS = 50;
ysl8LK
//Initialize boundary conditions' variable
Vp\80D&
ex_low_m1 = 0;
IuDT=A
ex_low_m2 = 0;
EqoASu
ex_high_m1 = 0;
XUf7yD
ex_high_m2 = 0;
Eh {up
//Initialization finished
LVoyA/F
IY03"
while(NSTEPS > 0)
/t$*W\PL@
{
|[DV\23{G
printf("NSTEPS -->"); //NSTEPS is the number of times the main loop has executed
avVmY|I
scanf("%d", &NSTEPS);
bu_/R~&3{
printf("%d\n", NSTEPS);
7\f{'KL
n = 0;
J+0/ :00(
for (n=1; n<=NSTEPS; n++)
D| [/>x
{
_~:j3=1&