登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
这是网上下载的一维FDTD的C语言模拟程序,哪 ..
发帖
回复
1252
阅读
4
回复
[
求助
]
这是网上下载的一维FDTD的C语言模拟程序,哪位高手能帮我看下这几行代码
离线
wjxylazypig
UID :65748
注册:
2010-09-03
登录:
2019-04-05
发帖:
122
等级:
仿真二级
0楼
发表于: 2010-09-12 22:20:10
我在VS2008中调试,结果应该存放在fp文件中吧,但是我找不到这个文件,请帮我分析一下代码是否正确。
S>oQm
另,我刚刚学习用C语言写FDTD,请给点思路吧。非常感谢!
$0MP*TFWa
dm&vLQVS
#include <stdio.h>
}I\hOL
#include <stdlib.h>
G3&l|@5
#include <math.h>
0{PRv./`
#define NUM_of_ZAXIS 400
qdFYf/y
float gauss_pulse(float T,float t0,float spread);
k-b0Eogp]
int file_save(float* data,char* filename);
:/kz*X=<
void main()
<d\Lvo[
{
|oSx*Gh
float ex[NUM_of_ZAXIS],hy[NUM_of_ZAXIS];
Gn*vVZ@`x
float obj_parameters[NUM_of_ZAXIS][4]; /*模型参数设置 */
6_# >s1`R
float CA[NUM_of_ZAXIS],CB[NUM_of_ZAXIS],CP[NUM_of_ZAXIS],CQ[NUM_of_ZAXIS];
|\OG9{q
float ca,cb,cp,cq; /*真空时的参数*/
t9zF WdW
float var_ca,var_cb,var_cp,var_cq; /* */
kR0d]"dr
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; /*边界吸收参数*/
EfR3$sp
float Epsilon,Mu,Pi,C; /*介电系数 Epsilon 0,磁导系数 Mu 0*/
9(>l trA
float rel_epsz,rel_mu; /*相对介电系数,磁导系数*/
JPX5Jm()
float e_sigma,h_sigma; /*电导率,磁导率*/
5Y\wXqlY
?{"_9g9
float dt,ddz;
? D?XaRb
float source,T;
)PU?`yLTr
int pos_driv_source;
:{d?B$
int i,n,Nsteps;
>~kSe=Hsb4
int e_low,e_high;
Cku&s
|X6]#&g7
FILE* fp;
wh\J)pA1
:-=,([TJ
/*初始化各个变量 */
?vgHu
Pi=3.14159;
gt9{u"o
Epsilon=8.85e-12;
>!vb ;a!
Mu=4*Pi*1e-7;
cj:!uhZp7
{ L(Q|bB
C=pow( (float)(1/(Epsilon*Mu)),(float)(0.5));
APgP*,
g$\Z-!(
ddz=0.01;
RfMrGC^?
dt=ddz/(2*C);
e)[>E\u _
T=0;
M8 E8r
0~{&
// 采用 葛德彪书中 一维FDTD公式中的参数
szY=N7\S*
e_sigma=0;
d5zF9;[
h_sigma=0;
Z2]ySyt]
var_ca=0.5*e_sigma*dt/Epsilon;
:dtX^IT
var_cb=dt/Epsilon;
'Lw4jq
var_cp=0.5*h_sigma*dt/Mu;
1%YjY"j+
var_cq=dt/Mu;
j7vp@l6`L
fXPD^}?Ux4
ca=(1-var_ca)/(1+var_ca);
CV~\xYY
cb=var_cb/(1+var_ca);
do2~LmeW
cp=(1-var_cp)/(1+var_cp);
.cTK\
cq=var_cq/(1+var_cp);
f*VBSg[`
abq$OI
var_border=(C*dt-ddz)/(C*dt+ddz);
/N`l z>^~
?t&sT
ubn`w=w$
// 边界处 用来存数据的临时变量
A d0dg2Gw
ex_low_m1=0;
h]rF2 B
ex_low_m2=0;
KrhAObK
ex_high_m1=0;
'[ZRWwhr
ex_high_m2=0;
LV'@JFT-
ex_low_s1=0;
D2`tWRm0
ex_low_s2=0;
mr+J#
ex_high_s1=0;
vxxa,KR/y
ex_high_s2=0;
HeagT(rN'
asDq(J`sQ
// 上 ,下 边界位置
KB$s7S"=
e_low=20;
Cz2OGM*mz?
e_high=380;
S+Aq0B<
%=:*yf>}
pos_driv_source=200;
,7mRb-*p
w7H.&7rF
?qeBgkL(B^
for(i=0;i<NUM_of_ZAXIS;i++)
Y~qv 0O6K
{
g7*ii X
ex=0;
&95iGL28Q
hy=0;
YEZd8Y
obj_parameters[0]=1;
?NZKu6
obj_parameters[1]=1;
ps#+i
obj_parameters[2]=0;
.!ThqYo
obj_parameters[3]=0;
$td=h)S^`
CA=ca;
'sCj\N
CB=cb;
D{&0r.2F
CP=cp;
"x.|'
CQ=cq;
'1lr "}"Q+
}
0W|}5(C
Jl^Rz;bQ-
D:9/;9V
// 开始主循环
xS) njuq4
2 0Xqs,
Nsteps=1;
(o/HLmr@Y
A4,tv#z
while(Nsteps>0)
,O@xv
{
_`>F>aP
printf("Nsteps-->");
=v4;t'_^
scanf("%d",&Nsteps);
Th&* d;
IR (6
for(n=0;n<Nsteps;n++)
V0Cz!YM_3
{
j +j2_\
T+=1;
=)Cqjp
?*}^xXI/
// 计算 Ex
/P~@__XN
for(i=e_low+1;i<e_high;i++)
-_bHLoI
{
>^#OtFHuT)
// 采用葛德彪书中的一维FDTD 公式
lMu}|d
ex=CA*ex-CB*(hy-hy[i-1])/ddz;
i2ap]
}
stDrF1{
M <oy
if(T<200){
)P:r;a'
VJ`c/EVIt
ex[pos_driv_source]+=gauss_pulse(T,40,12);
pKf]&?FX
|kwBb>V
}
2\flTO2Ny
;}!hgyq
V6.xp{[
//Mur 边界吸收
@J~n$^ke
uqy b
ex_low_m2=ex_low_m1;
=9UR~-`d\
ex_low_m1=ex[e_low];
7tOOruiC
wD}ojA&DU
ex_low_s2=ex_low_s1;
W+[XNIg5
ex_low_s1=ex[e_low+1];
wN [mU
(U"Ub;[7
ex_high_m2=ex_high_m1;
~{,U%B
ex_high_m1=ex[e_high];
4Gl0h'!(
C WJGr:}&
ex_high_s2=ex_high_s1;
\Kph?l9Ww
ex_high_s1=ex[e_high-1];
\atztC{-L>
9o<}*L
SF.4["$
ex[e_low]=ex_low_s2+var_border*(ex[e_low+1]-ex_low_m2);
[|gh q
ex[e_high]=ex_high_s2+var_border*(ex[e_high-1]-ex_high_m2);
{shf\pm!o
GY@-}p~it
// 行波时延法
OI3UC=G
// ex[e_high]=0.5*(ex_high_m2+ex_high_s2);
bi:m;R
// ex[e_low]=0.5*(ex_low_m2+ex_low_s2);
2s{PE
LRO'o{4$E
// 计算 Hy
_jV(Gv'
vEJ2d&
for(i=e_low;i<e_high;i++)
$sDvE~f0n
{
mX78Av.z!
hy=CP*hy-CQ*(ex[i+1]-ex)/ddz;
!`8WNY?K
}
,wJ#0?
p`// *gl
}
usb.cE3z
5!2^|y4r
// 存储数据
=VMV^[&>
<eU28M?\
fp=fopen("Ex","w");
c+PT"/3
for(i=0;i<NUM_of_ZAXIS;i++)
<szD"p|K
6fvzTd},
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
离线
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文件中,由于没加后缀名称,看不到正常图标,打开时选记事本就行了。
共
条评分
继续!
发帖
回复