登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
这是网上下载的一维FDTD的C语言模拟程序,哪 ..
发帖
回复
1251
阅读
4
回复
[
求助
]
这是网上下载的一维FDTD的C语言模拟程序,哪位高手能帮我看下这几行代码
离线
wjxylazypig
UID :65748
注册:
2010-09-03
登录:
2019-04-05
发帖:
122
等级:
仿真二级
0楼
发表于: 2010-09-12 22:20:10
我在VS2008中调试,结果应该存放在fp文件中吧,但是我找不到这个文件,请帮我分析一下代码是否正确。
s2f6;Yc
另,我刚刚学习用C语言写FDTD,请给点思路吧。非常感谢!
FH3^@@Y%
VsU*yG a
#include <stdio.h>
simD<&p
#include <stdlib.h>
Ty&Ok*
#include <math.h>
Nh^ lC
#define NUM_of_ZAXIS 400
2K:Rrn/cR
float gauss_pulse(float T,float t0,float spread);
|7CFm
int file_save(float* data,char* filename);
Sgp1p}
void main()
u=QG%O#B
{
3*(w=;y
float ex[NUM_of_ZAXIS],hy[NUM_of_ZAXIS];
2#jBh
float obj_parameters[NUM_of_ZAXIS][4]; /*模型参数设置 */
Uf,fd
float CA[NUM_of_ZAXIS],CB[NUM_of_ZAXIS],CP[NUM_of_ZAXIS],CQ[NUM_of_ZAXIS];
<Jc :a?ICe
float ca,cb,cp,cq; /*真空时的参数*/
@LyCP4
float var_ca,var_cb,var_cp,var_cq; /* */
kO3N.t@n
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; /*边界吸收参数*/
y|b&Rup
float Epsilon,Mu,Pi,C; /*介电系数 Epsilon 0,磁导系数 Mu 0*/
(J6>]MZ#)
float rel_epsz,rel_mu; /*相对介电系数,磁导系数*/
e'l@M$^
float e_sigma,h_sigma; /*电导率,磁导率*/
#r,LV}*qg
E\Qm09Dj`<
float dt,ddz;
UwtL vd
float source,T;
x*#9\*@EI
int pos_driv_source;
0PP5qeqN2n
int i,n,Nsteps;
9cqq"-$G`
int e_low,e_high;
UG !+&ii|
)lhPl
FILE* fp;
zk++#rB
DS|HN
/*初始化各个变量 */
0Z4o3r[
Pi=3.14159;
e)M)q!nG
Epsilon=8.85e-12;
uN;]Fv@Z
Mu=4*Pi*1e-7;
~bD'QMk
"/kTEp
C=pow( (float)(1/(Epsilon*Mu)),(float)(0.5));
w}rsboU
dje}CbZ
ddz=0.01;
.P:mYC
dt=ddz/(2*C);
1F,>siuh ,
T=0;
Bj`ZH~T
dbsD\\,2%N
// 采用 葛德彪书中 一维FDTD公式中的参数
VN/v]
e_sigma=0;
Z#vU~1W
h_sigma=0;
^yFtL(x,
var_ca=0.5*e_sigma*dt/Epsilon;
WU+OS(
var_cb=dt/Epsilon;
9aoGptgN
var_cp=0.5*h_sigma*dt/Mu;
)` z{T
var_cq=dt/Mu;
o4t6NDa
X,mqQ7+
ca=(1-var_ca)/(1+var_ca);
^[g7B"`K5
cb=var_cb/(1+var_ca);
S x0QPX
cp=(1-var_cp)/(1+var_cp);
dX;Q\ ]"
cq=var_cq/(1+var_cp);
B:]%Iu|
rtn.^HF
var_border=(C*dt-ddz)/(C*dt+ddz);
s(0"r.
eEmuE H@X
zL@FN sYVM
// 边界处 用来存数据的临时变量
I]iTD
ex_low_m1=0;
y[A%EMd
ex_low_m2=0;
pNNvg,hS8
ex_high_m1=0;
uGz>AW8a3
ex_high_m2=0;
&_dM2lj{
ex_low_s1=0;
;oM7H*WC
ex_low_s2=0;
b haYbiX?
ex_high_s1=0;
s&)>gE\
ex_high_s2=0;
1yd}F`{8UF
Y;"rJxHD
// 上 ,下 边界位置
^Q9!DF m
e_low=20;
E[a|.lnV
e_high=380;
|*5HNP
5fvY#6;
pos_driv_source=200;
^rh{
%] #XI r
(x!Tb2mlk
for(i=0;i<NUM_of_ZAXIS;i++)
<|>7?#s2=
{
CzfGb4
ex=0;
:vXlni7N[M
hy=0;
U][\|8i
obj_parameters[0]=1;
-d)+G%{
obj_parameters[1]=1;
?,z/+/:
obj_parameters[2]=0;
/'QfLW>6
obj_parameters[3]=0;
Yc3Rq4I'G
CA=ca;
w!--K9
CB=cb;
?}ly`Js
CP=cp;
;7*R ;/
CQ=cq;
vrX@T?>
}
/v-:ca)7mI
> }fw7 X
We)l_>G
// 开始主循环
z@Uf@~+U
_j sJS<21
Nsteps=1;
FQe82tfV+
(N^tg8 Z<
while(Nsteps>0)
lO/?e!$
{
b^^ .$Gu
printf("Nsteps-->");
5DS'22GW`
scanf("%d",&Nsteps);
3aUWQP2
,a'Y^[4k?
for(n=0;n<Nsteps;n++)
~\khwNA
{
2H9;4>ss
T+=1;
$2/v8
"n%0L4J
// 计算 Ex
)aAKxC7w
for(i=e_low+1;i<e_high;i++)
UlQS]f~
{
COc t d
// 采用葛德彪书中的一维FDTD 公式
vw)lD9-"
ex=CA*ex-CB*(hy-hy[i-1])/ddz;
:lE_hY
}
Me2qOc^Z-
FNR<=M
if(T<200){
sLze/D_M*
(RU\a]Ry
ex[pos_driv_source]+=gauss_pulse(T,40,12);
Kd!.sB/%
U#6<80Ke
}
yOswqhz
T=,A p a
f >$V:e([
//Mur 边界吸收
&rfl(&\oUi
C )J@`E
ex_low_m2=ex_low_m1;
EWC{896,
ex_low_m1=ex[e_low];
3R& FzLs
V.|#2gC]t
ex_low_s2=ex_low_s1;
%3Tz%>n
ex_low_s1=ex[e_low+1];
9D[Jn}E:
YT~h1<se
ex_high_m2=ex_high_m1;
=;(y5c
ex_high_m1=ex[e_high];
c-oIP~,
%CIRN}
ex_high_s2=ex_high_s1;
7'zXf)!
ex_high_s1=ex[e_high-1];
3L^]J}|
4GqwY"ja
O6"S=o&
ex[e_low]=ex_low_s2+var_border*(ex[e_low+1]-ex_low_m2);
;!(GwgllD
ex[e_high]=ex_high_s2+var_border*(ex[e_high-1]-ex_high_m2);
/C
Wy.^1M/n>~
// 行波时延法
)%wNVW 0C
// ex[e_high]=0.5*(ex_high_m2+ex_high_s2);
gGE&}EoLU
// ex[e_low]=0.5*(ex_low_m2+ex_low_s2);
AlA:MO]NM
g T{WH67u
// 计算 Hy
y Q-{ CJ,
;ZoEqMv
for(i=e_low;i<e_high;i++)
lPZYd8
{
7CDp$7v2
hy=CP*hy-CQ*(ex[i+1]-ex)/ddz;
"I,=L;p
}
FH)_L1n
s"JD,gm$
}
Pr'Ij
hl$X.O
// 存储数据
]x5+v0
!hjA
fp=fopen("Ex","w");
4A)@,t9+
for(i=0;i<NUM_of_ZAXIS;i++)
y8j6ttQv=t
F[)5A5+:Y
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
离线
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文件中,由于没加后缀名称,看不到正常图标,打开时选记事本就行了。
共
条评分
继续!
发帖
回复