登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
这是网上下载的一维FDTD的C语言模拟程序,哪 ..
发帖
回复
1250
阅读
4
回复
[
求助
]
这是网上下载的一维FDTD的C语言模拟程序,哪位高手能帮我看下这几行代码
离线
wjxylazypig
UID :65748
注册:
2010-09-03
登录:
2019-04-05
发帖:
122
等级:
仿真二级
0楼
发表于: 2010-09-12 22:20:10
我在VS2008中调试,结果应该存放在fp文件中吧,但是我找不到这个文件,请帮我分析一下代码是否正确。
r+C4<-dT
另,我刚刚学习用C语言写FDTD,请给点思路吧。非常感谢!
W..*!UGl
LEPLoF3,
#include <stdio.h>
@ !su7
#include <stdlib.h>
Wjl2S+Cc
#include <math.h>
q`r| DcN~
#define NUM_of_ZAXIS 400
tNr'@ls
float gauss_pulse(float T,float t0,float spread);
)1#/@cU
int file_save(float* data,char* filename);
p=nbsS~":
void main()
$aJ6i7C,j}
{
,3_Sf?
float ex[NUM_of_ZAXIS],hy[NUM_of_ZAXIS];
8]`#ax 5
float obj_parameters[NUM_of_ZAXIS][4]; /*模型参数设置 */
vq(#Ih2
float CA[NUM_of_ZAXIS],CB[NUM_of_ZAXIS],CP[NUM_of_ZAXIS],CQ[NUM_of_ZAXIS];
a_P|KRl
float ca,cb,cp,cq; /*真空时的参数*/
;G8H'gM07
float var_ca,var_cb,var_cp,var_cq; /* */
"!zJQl@
float var_border,ex_low_m1,ex_low_m2,ex_high_m1,ex_high_m2, ex_low_s1,ex_low_s2,ex_high_s1,ex_high_s2; /*边界吸收参数*/
$k0(iFzR1
float Epsilon,Mu,Pi,C; /*介电系数 Epsilon 0,磁导系数 Mu 0*/
hJ xL|5Uo
float rel_epsz,rel_mu; /*相对介电系数,磁导系数*/
LJ <pE;`d
float e_sigma,h_sigma; /*电导率,磁导率*/
E} XmZxHV
.8s-)I
float dt,ddz;
]P wS3:x
float source,T;
3E;@.jD
int pos_driv_source;
!i-t6f
int i,n,Nsteps;
8&8!(\xv
int e_low,e_high;
(CIcM3|9C
f:+/=MW
FILE* fp;
7OmT^jV2
\78^ O
/*初始化各个变量 */
7s6+I_n
Pi=3.14159;
ZAfuW^r
Epsilon=8.85e-12;
_N|%i J5
Mu=4*Pi*1e-7;
ZS=H1
-W^{)%4g
C=pow( (float)(1/(Epsilon*Mu)),(float)(0.5));
1Zc=QJw@
^,I2@OS
ddz=0.01;
N\__a~'0p
dt=ddz/(2*C);
EP@u4F
T=0;
KX9IC5pR
r craf4%
// 采用 葛德彪书中 一维FDTD公式中的参数
_[&V9Jt
e_sigma=0;
J.h` 0$!
h_sigma=0;
FCNYfjB%
var_ca=0.5*e_sigma*dt/Epsilon;
Lp:VU-S
var_cb=dt/Epsilon;
N2s"$Ttq
var_cp=0.5*h_sigma*dt/Mu;
7d>w]R,Z
var_cq=dt/Mu;
K' `qR
<}[ !k<
ca=(1-var_ca)/(1+var_ca);
I[|Y 2i
cb=var_cb/(1+var_ca);
BkB_?^Nv8
cp=(1-var_cp)/(1+var_cp);
B,%6sa~I
cq=var_cq/(1+var_cp);
&2u |7U.
]'Eg2(wy
var_border=(C*dt-ddz)/(C*dt+ddz);
z[J=WI
9Zl4NV&B
7<]&pSt=
// 边界处 用来存数据的临时变量
*B!Ox}CI.L
ex_low_m1=0;
J8S$YRZ_
ex_low_m2=0;
-y!Dg6A
ex_high_m1=0;
KDEyVYO:
ex_high_m2=0;
(.!9
ex_low_s1=0;
3@x[M?$
ex_low_s2=0;
K Ha,6X
ex_high_s1=0;
DlCN
ex_high_s2=0;
p3 5)K5V
gBV4IQ
// 上 ,下 边界位置
j;}-x1R
e_low=20;
&q|vvF<G
e_high=380;
`uPO+2
I-!7 EC2{!
pos_driv_source=200;
Xk|a%%O*H
=I'iD0eR
]_B<K5
for(i=0;i<NUM_of_ZAXIS;i++)
gnN>Rl 5_
{
'{cND
ex=0;
KtAEM;g
hy=0;
_$T !><)y
obj_parameters[0]=1;
_Ml?cT/J.O
obj_parameters[1]=1;
cG0)F%?X?
obj_parameters[2]=0;
y]{b4e
obj_parameters[3]=0;
a7_Q8iMe
CA=ca;
90+Vw`Gz=
CB=cb;
4S4MQ
CP=cp;
Hz,Gn9:p
CQ=cq;
=AaF$R
}
}*!L~B!
/>Zfx. Aj6
dY$nw
// 开始主循环
^3sv2wh^|8
5u9 lKno
Nsteps=1;
OcF_x/#
)OQm,5F1
while(Nsteps>0)
f1SKOq
{
E^n!h06~G
printf("Nsteps-->");
5KB Z-,
scanf("%d",&Nsteps);
z<t2yh(DF
9-j-nx @)
for(n=0;n<Nsteps;n++)
Nz{qu}dt
{
'uz o[>p
T+=1;
FP{=b/
Jityb}Z"
// 计算 Ex
oD2! [&
for(i=e_low+1;i<e_high;i++)
81#x/&E]
{
7C2Xy>d~
// 采用葛德彪书中的一维FDTD 公式
-+qg
ex=CA*ex-CB*(hy-hy[i-1])/ddz;
zuMz6#aCC8
}
4avkyFj!h
WM$Z?CN%KB
if(T<200){
=dKk #*
-H\j-k
ex[pos_driv_source]+=gauss_pulse(T,40,12);
"7(@I^'t6
B2BG*xa
}
nF3Sfw,
b+AxTe("
N-}OmcO]e
//Mur 边界吸收
9-A@2&J1
M?gZKdj
ex_low_m2=ex_low_m1;
3M^`6W[;
ex_low_m1=ex[e_low];
6>)KiigZ\
H-WNu+
ex_low_s2=ex_low_s1;
.Xxxz Wyk
ex_low_s1=ex[e_low+1];
(7~vOWs:[
REX/:sB<
ex_high_m2=ex_high_m1;
kd p*6ynD
ex_high_m1=ex[e_high];
yYaYuf
e \kR/<L
ex_high_s2=ex_high_s1;
oe9S$C;$'
ex_high_s1=ex[e_high-1];
I2z7}*<u
H?ue!5R#L
sdewz(xskj
ex[e_low]=ex_low_s2+var_border*(ex[e_low+1]-ex_low_m2);
Jx&+e,OST
ex[e_high]=ex_high_s2+var_border*(ex[e_high-1]-ex_high_m2);
>Zf*u;/dW$
]YDqmIW
// 行波时延法
HW6Cz>WxOW
// ex[e_high]=0.5*(ex_high_m2+ex_high_s2);
>qI:
// ex[e_low]=0.5*(ex_low_m2+ex_low_s2);
~Ty6]A
Jju?v2y`
// 计算 Hy
X5tV Xd
O1]XoUH<
for(i=e_low;i<e_high;i++)
<dk9n}y<,
{
!C.{nOfyv
hy=CP*hy-CQ*(ex[i+1]-ex)/ddz;
G<*h,'B
}
OBP iLCq
KkHlMwv
}
L\<J|87p?
0ENqK2
// 存储数据
YGq-AB
AWmJm)
fp=fopen("Ex","w");
0*u X2*
for(i=0;i<NUM_of_ZAXIS;i++)
abV,]x&.0
E~Y%x/oX
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
离线
wjxylazypig
UID :65748
注册:
2010-09-03
登录:
2019-04-05
发帖:
122
等级:
仿真二级
1楼
发表于: 2010-09-13 09:06:52
版主帮我看看吧。
共
条评分
离线
lx84
呵呵
UID :30566
注册:
2009-04-22
登录:
2020-09-16
发帖:
866
等级:
积极交流六级
2楼
发表于: 2010-10-05 00:16:38
楼主的C有待加强啊。
共
条评分
继续!
离线
wjxylazypig
UID :65748
注册:
2010-09-03
登录:
2019-04-05
发帖:
122
等级:
仿真二级
3楼
发表于: 2010-10-05 11:19:06
回 2楼(lx84) 的帖子
期待能帮助解决问题的回复。感谢。
共
条评分
离线
lx84
呵呵
UID :30566
注册:
2009-04-22
登录:
2020-09-16
发帖:
866
等级:
积极交流六级
4楼
发表于: 2010-10-08 18:21:02
数据,保存在同文件夹,Ex.Hy文件中,由于没加后缀名称,看不到正常图标,打开时选记事本就行了。
共
条评分
继续!
发帖
回复