登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
帮小弟看个问题,是fdtd 二维TE波,mur吸收边 ..
发帖
回复
1528
阅读
4
回复
[
求助
]
帮小弟看个问题,是fdtd 二维TE波,mur吸收边界
离线
zangwuyun
好好学习
UID :67757
注册:
2010-10-15
登录:
2012-05-21
发帖:
28
等级:
仿真新人
0楼
发表于: 2010-11-10 12:27:35
#include <stdio.h>
VfkQc$/
#include <math.h>
NS){D7T
#include <fdtd.h>
79Ur1-]/
#include <string.h>
52.%f+Oa
#define IE 120
.\mkgAlyaM
#define JE 120
l`rO)7
P1dFoQz
void main(void)
9v?rNJs
{
m*vz
/*
z LZHVvL3
*葛德彪老师书中的4个参数:ca,cb,cp,cq, 放在结构体param0里面
[i8Ju
*/
~WKWx.ul
param param0;
qflOi8
/*
E'^ny4gL
*葛德彪老师书中的4个参数:ca,cb,cp,cq, 放在结构体param0里面
8f>v[SQ"
*/
<$Djags,F
abcs_2d_mur_te abcs_mur;
g5lK&-yu]
double hz[IE][JE],ex[IE][JE],ey[IE][JE];
eqk.+~^
double hz_last_time[IE][JE],ex_last_time[IE][JE],ey_last_time[IE][JE];
F0ylJ /E
/************************************************************************************************
@nOuFX4
* 源的设置
Xa_:B\ic
*/
{=6CL'_
/*
: $N43_Wb
*高斯源放置位置
K&BaGrR
*/
L b-xc]
int gauss_pulse_position_x = IE/2;
+zZ]Txb(
int gauss_pulse_position_y = JE/2;
iHeu<3O
/*
vQ8$C 3
*设置高斯脉冲源参数,极大值出现在x=12.0,脉冲宽度为6.0
z-^/<u1p
*/
ta0 ;:o?/d
double gauss_pulse_t0 = 12.0;
}fL ] }&
double gauss_pulse_width= 6.0;
vDCbD#.6
/*
qAi:F=> X
*设置正弦源参数,sinusoidal_frequency:正弦源的频率
DWupLJpk;c
*/
dpcU`$kt
double sinusoidal_frequency = 5.0e9;
uLr-!T
/*
\0.!al0
*设置源通用参数,pulse_source:源的大小;source_time:源的时间
J~)JsAXAI
*/
]T._TZ"
double pulse_source = 0;
? kCo/sW
int source_time =0;
5h6-aQU[
/************************************************************************************************/
!*PX-
/*
ce7$# # f
* 时间步数
T@mYHKu
*/
8@r>`c
int time_steps = 200;
%lGT|XrY
int n = 0,i = 0,j=0;
9qm'qx
/*
85BB{T;
* 设置边界
eN0lJ ~
*/
c3(0BSv
int left_boundary = 1;
zQoJ8i>
int right_boundary = IE-1;
m O"Rq5
int top_boundary = JE-1;
jJAr #|
int bottom_boundary = 1;
{v*X}`.h
/*
{EJ+
* 设置介电常数
"qoJIwl#q
*/
.p%V]Ka
fdtd_init();
aB{OXU}#
/*
p~OX1RBI
* 设置迭代方程参数ca,cb ,cp,cq
z`sW5K(A
*/
Kh{_BdN
init_param(¶m0);
)3^#CD
/*
:PNhX2F
* 设置边界方程的参数
,qj M1xkL$
*/
`d4;T|f+=
init_abcs_2d_mur_te(&abcs_mur);
K0\`0E^,
VVqpzDoXG
for(j = 0;j < JE ;j++)
&?# YjU"
{
FpZ5@
for(i = 0;i < IE; i++)
_ygdv\^Tet
{
GW2v&Ul7(
hz
[j] = 0.0;
[a7S?%>Bh
ex
[j] = 0.0;
Rp !Rzl<
ey
[j] = 0.0;
! q+>'Mt
}
I5E+=.T*ar
}
Y4N)yMSl"
* yGlX[
for(n=0;n < time_steps;n++)
c=<^pCa9t1
{
irMBd8WG
'![VA8
source_time += 1;
AmK g;9LS
/*
\O)u' Bu
* 放置高斯脉冲源
J9P\D!
*/
.}Hs'co
//pulse_source = Gauss_Pulse(source_time,gauss_pulse_t0,gauss_pulse_width);
vy5I#q(k
/*
p1s|JI
* 放置高斯脉冲源
@B9#Hrc
*/
\~.elKw<U
pulse_source = sinusoidal_source(sinusoidal_frequency,((double)source_time)*dt);
V o%GO9b;
hz[gauss_pulse_position_x][gauss_pulse_position_y] = pulse_source;
6C!TXV'
memcpy(hz_last_time,hz,sizeof(hz));
eBqF@'DQ
memcpy(ex_last_time,ex,sizeof(ex));
Mo\nY5
memcpy(ey_last_time,ey,sizeof(ey));
Hk?E0.
P_(<?0l
/*
3iw.yR
* 计算磁场
R)Dh; XA
*/
E//*bmww
for(j = bottom_boundary+1;j <= top_boundary-1;j++)
syk,e4:oA
{
lHO.pN`2
for(i = left_boundary+1;i <= right_boundary-1;i++)
:Yn{:%p
{
EUS^Gtc
hz
[j] = param0.cp*hz
[j] - param0.cq*((ey[i+1][j]- ey
[j])/dx - (ex
[j+1] - ex
[j])/dy);
0oo_m6ie&
}
GK&R.R]
}
1-PFM-
/*
!J(6E:,b#
* 计算电场
Kir|in)r0
*/
[Vj|fy4
for(j = bottom_boundary+1;j <= top_boundary;j++)
Vk%W4P"l
{
!X 0 (4^
for(i = left_boundary;i <= right_boundary;i++)
Qm4cuV-0{
{
mV}eMw
ex
[j] = param0.ca*ex
[j] + param0.cb*(hz
[j] - hz
[j-1])/dy;
/UtSZ(
}
'grb@+w(
}
:-~x~ah-
for(j = bottom_boundary;j <= top_boundary;j++)
4Y d$RP
{
p7[&H