登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
求助!Sullivan书中程序FD1D_2.2.c有个地方没懂
发帖
回复
810
阅读
2
回复
[
求助
]
求助!Sullivan书中程序FD1D_2.2.c有个地方没懂
离线
lawrencelsq
UID :100451
注册:
2012-10-15
登录:
2012-11-30
发帖:
3
等级:
旁观者
0楼
发表于: 2012-10-15 17:50:19
程序中在对Ex进行傅里叶变换之后那段对入射脉冲作傅里叶变换的if语句有什么意义?为什么乘的是ex[10]而不是加入脉冲的位置的ex[5]?T<100在这里又怎么解释?求各位指教,小弟初学,先谢过了。
m^ tFi7c
C|}iCB
# include <math.h>
xI($Uu}S
# include <stdlib.h>
`f*Q$Ulqx
# include <stdio.h>
Q9Kve3u-i
_j< K=){
# define KE 200 /* KE is the number of cells to be used */
YoBPLS`K
void main ()
'VzP};
{
kXi6lh
float dx[KE], ex[KE], hy[KE], ix[KE];
gG*X^Uo
float ga[KE],gb[KE];
ihIVUu-M
tt0f-:#
int n,m,k,kc,ke,kstart,NSTEPS;
Z0Vl+
float T,ddx,dt,epsz,epsilon,sigma;
Y@N,qHtz
float t0,spread,pi,pulse;
d@XV:ae
qI#;j%V
FILE *fp;
+@p% p
2O.i\cH
float ex_low_m1,ex_low_m2,ex_high_m1,ex_high_m2;
;" dV"W
float real_pt[5][KE],imag_pt[5][KE];
#xX5,r0
float freq[5],arg[5],ampn[5][KE],phasen[5][KE];
i{`FmrPO~
float real_in[5],imag_in[5],amp_in[5],phase_in[5];
-* WXMzr
// float mag[KE];
}\\KYyjY
+l9!Fl{MK\
pi = 3.14159;
mID"^NOi#
kc = KE/2; /* Center of the problem space*/
n1ly y0%u
ddx = .01; /* Cell size */
c'%-jG)\
dt = ddx/6e8; /* Time steps */
s$Z _48
epsz = 8.8e-12;
BD_Iz A<wK
~Y|*`C_)
printf (" %6.4f %10.5e \n",ddx,dt);
@mw5~ +
k <=//r
/*Initialize to free space */
4dO~C
;7?kl>5]
for (k = 0; k <KE; k++)
|wiqGzAr{
{
/s@o Z{h
ga[k] = 1.;
i rU 6D
gb[k] = 0.;
5=v}W:^v.
ex[k] = 0;
"alyfyBu'M
dx[k] = 0;
nD`w/0hT<
hy[k] = 0;
{^CY..3 A
ix[k] = 0;
"Zl5<
// mag[k] = 0;
|iE50,
= \'}g?
for (m=0; m<=2; m++)
Sjvdirr
{
b{L/4bu
real_pt[m][k] = 0; /* Real and imaginary parts of Fourier Transform */
. 1KhBgy^K
imag_pt[m][k] = 0;
Tn*9lj4
ampn[m][k] = 0; /* Amplitude and phase of the Fourier Transforms */
jL%x7?*U0
phasen[m][k] =0;
nbm&wa[
}
&PYK8}pBk3
}
ADDSCY=,
8ZM&(Lz7u
for ( m=0; m<=2; m++)
v"b+$*
{
G,o6292hj
real_in[m] = 0; /* Fourier Trans of input pulse */
*AO,^R&e.
imag_in[m] = 0;
Z>)Bp/-
}
FbS|~Rp~
Y9uC&/_C
ex_low_m1=0;
gtk7)Uh
ex_low_m2=0;
Fl kcU `j
ex_high_m1=0;
oU056
ex_high_m2=0;
$8UUzk
&O9 |#YUq
/* Parameters for the Fourier Transform */
Cs9.&Y
kCR_tn 4
freq[0] = 100.e6;
V@zg}C|e
freq[1] = 200.e6;
6-z%633DL
freq[2] = 500.e6;
/{+y2.{j
9 Vkb>yFX'
for (n=0; n<=2; n++)
i~I%D%;
{
:Av#j@#
arg[n] = 2*pi*freq[n]*dt;
M+U9R@
printf ("%2d %6.2f %7.5f \n",n,freq[n]*1e-6,arg[n]);
M?Dfu .t
}
L ^q""[
A mNW0.}
printf ("Dielectric starts at -->");
q"\Z-D0B4
scanf ("%d",&kstart);
ok!L.ac
printf ("Epsilon -->");
NidIVbT.A
scanf ("%f",&epsilon);
*5%d XixN
printf ("Conductivity -->");
-I8=T]_D
scanf ("%f",&sigma);
a%kQl^I4
printf ("%d %6.2f %6.2f \n",kstart,epsilon,sigma);
2% L LSa
"e.jZcN*
/* Initialize the parameters */
`UD/}j@
(7*%K&x
for (k=kstart; k<KE; k++)
b\yXbyjZ3.
{
1_9<3,7
ga[k] = 1./(epsilon+sigma*dt/epsz);
&;^YBW :I
gb[k] = sigma*dt/epsz;
&dM. d!
}
uJzG|$;
N5Q[n d
for (k=1; k<KE; k++)
Z/k:~%|E
{
% tS,}ze
printf ("%2d ga[k]=%4.2f gb[k]=%4.2f\n",k,ga[k],gb[k]);
/t+f{VX$
}
AL9chYP}/
/N =b\-]
/* These parameters specify the input pulse */
@ [:ZS+1
%zG;Q@
t0=50.0; /* Center of the incident pulse */
D{GfLib"U
spread=10.0; /* Width of the incident pulse */
RL!Oi|8
d,+Hd2o^X
T=0;
2bJQTk _S
NSTEPS=1;
y0sR6TY)f
while ( NSTEPS>0)
'u *DA|HC
{
#M9~L[nFS
/* Main part of the program */
0?s|i :
"W6uV!
printf ("NSTEPS --> "); /* NSTEPS is the number of times the */
?9e_gV{&;
scanf (" %d", &NSTEPS); /* main loop has executed */
ULs\+U
printf (" %d \n",NSTEPS);
$xzAv{
OI|[roMK
i3tg6o4C
for (n=1; n<=NSTEPS; n++)
_zY#U9
{
'@o;-'b
T=T+1; /* T keeps track of the total number */
cG[l!Z
/* of times the main loop is executed */
uatm/o^~,
/* Main FDTD Loop */
idLWe9gC
f(/lLgI(
/* Calculate the Dx field */
_ TiuY
zQcL|(N
for (k=1; k<KE; k++)
e7^mmm
{
SIBtmm1W
dx[k] = dx[k] +.5*(hy[k-1]-hy[k]);
`=4r+
}
l3Xfc2~ 2
&XIt5<$~R
/* Initialize with a Guassian pulse */
]~9tYn
o_XflzC
pulse = exp(-.5*(pow( (t0-T)/spread,2.0) ));
th
dx[5] = dx[5] + pulse;
HVi'eNgo
printf ("%5.1f %6.2f %6.2f\n",T,pulse,dx[5]);
?qPo=~y01
ck:T,F{}
/* Calculate Ex from Dx */
GWZ }7ake
KaPAa:Q
for ( k=1; k<KE;k++)
+O8%Hm
{
azCf
ex[k] = ga[k]*(dx[k] - ix[k]);
{m4b(t`xw
ix[k] = ix[k] + gb[k]*ex[k];
BF\XEm?!
}
,]bhy p
q ?|,O;?
/* Calculate the Fourier transform of Ex. */
JZ)RGSG i
for ( k=0;k<KE;k++)
NCiW^#b
{
MI/MhkS ?
for (m=0;m<=2;m++)
dG@%jD)
{
%Qmn-uZ
real_pt[m][k] = real_pt[m][k] + cos(arg[m]*T)*ex[k];
Lt u'W22
imag_pt[m][k] = imag_pt[m][k] - sin(arg[m]*T)*ex[k];
z06r6
}
CyJEY-
}
Si_ _8D
kjIAep0rT
/* Fourier Transform of the input pulse */
LhA*F[6$M
nCUg,;_=
if (T<100)
}JF13beU
{
9B{k , 1
for (m=0; m<=2; m++)
%'bM){
{
GZEc l'h*
real_in[m] = real_in[m] + cos (arg[m]*T)*ex[10];
=$u! 59_dE
imag_in[m] = imag_in[m] - sin (arg[m]*T)*ex[10];
*:Y%HAy*
}
8[a=OP
}
<^VJy5>
1Ir21un
bGN:=Y'
/*Absorbing Boundary Conditions*/
j]{_s"O
WffQ :L?
ex[0] = ex_low_m2;
abuh`H#
ex_low_m2 = ex_low_m1;
(l\1n;s*B
ex_low_m1 = ex[1];
PRx8I .
xcd#&
ex[KE-1] = ex_high_m2;
`.E[}W
ex_high_m2 = ex_high_m1;
:0Bq^G"ge
ex_high_m1 = ex[KE-2];
Njxv4cc
t_o['F
/* Calculate the Hy field */
WA5 kg\
d(\%Os
for ( k=0; k<KE-1; k++)
tI`Q /a5@
{
\d6C%S!
hy[k] = hy[k] + .5*(ex[k]-ex[k+1]);
x3hB5p$q
}
t>L;kRujVJ
}
W<bGDh
vmU@^2JSJ
/* End of the Main FDTD Loop */
h?AS{`.1
)F}F_Y
/* At the end of the calculation,print out
CNih6R
the Ex and Hy fields */
qyZ" %Kz
|z9*GY6RU
for (k=0; k<KE; k++)
C_( *>!Z%
{
Yrb{ByO&
printf ("%2d %6.2f %6.2f \n",k,dx[k],ex[k]);
O9G[j=U
}
%aHB"vi6
fa-IhB1!K
/* Write the E field out ot a file "Ex" */
)Q=_0;#;k
fp=fopen( "Ex","w");
V\>K]mwD
for (k=0;k<KE;k++)
B;M?,<%FRU
{
/z4$gb7Y
fprintf (fp," %6.3f \n",ex[k]);
),0g~'I~D
}
YJ^] u}
fclose(fp);
tRs [ YK
7r7YNn/?
/* Calculate the amplitude and phase of each frequency */
SzAJ2:qhl
B}n,b#,*
/* Amplitude and phase of the input pulse */
rNrxaRQ
for ( m=0; m<=2; m++)
)P%ZA)l%_o
{
P2NQHX
amp_in[m] = sqrt (pow (imag_in[m],2) + pow(real_in[m],2));
u8'Zl8g
phase_in[m] = atan2 (imag_in[m],real_in[m]);
!<j'Ea
{o)L c6T8s
printf ( "%d Input Pulse : %8.4f %8.4f %8.4f %7.2f \n",
^UciW
m,real_in[m],imag_in[m],amp_in[m],(180.0/pi)*phase_in[m]);
ERUz3mjA/
;!=G
for ( k=0; k<KE; k++)
/$ w%Q-p
{
VyXKZ%\dQ/
ampn[m][k] = (1./amp_in[m])*sqrt( pow(real_pt[m][k],2.)
)mg:_K
  ..
y<?kzt
ojafy}
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
离线
lawrencelsq
UID :100451
注册:
2012-10-15
登录:
2012-11-30
发帖:
3
等级:
旁观者
1楼
发表于: 2012-10-15 18:16:25
没人么 求大神们指教啊
共
条评分
离线
lx84
呵呵
UID :30566
注册:
2009-04-22
登录:
2020-09-16
发帖:
866
等级:
积极交流六级
2楼
发表于: 2012-10-15 18:55:46
在自由空间内在那个观察点傅里叶变换对结果都没有影响;关键事在你做傅里叶变换的时间段内必须有完整的时域波形;这个T<100;也就是说100步内在x=10观察点形成了完整波形,这不影响最后结果;当然你也可以用T<NSTEPS;只不过100步以后都是0,做福利也变换也没什么意义了。
共
条评分
继续!
发帖
回复