登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
求助!Sullivan书中程序FD1D_2.2.c有个地方没懂
发帖
回复
812
阅读
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在这里又怎么解释?求各位指教,小弟初学,先谢过了。
8zOoVO
Pl>BTo>p'
# include <math.h>
dN8@ 0AMSf
# include <stdlib.h>
cE|Z=}4I7
# include <stdio.h>
O/?Lk*r
LNA5!E
# define KE 200 /* KE is the number of cells to be used */
9{A[n}
void main ()
!xIK<H{*
{
-msfiO
float dx[KE], ex[KE], hy[KE], ix[KE];
*-zOQ=Y
float ga[KE],gb[KE];
I}Fv4wlZG
]]EOCGZ"
int n,m,k,kc,ke,kstart,NSTEPS;
<\9M+
float T,ddx,dt,epsz,epsilon,sigma;
T3JM8
float t0,spread,pi,pulse;
ytWTJ>L
C:?mOM#_
FILE *fp;
Wubvvm8U
e"){B
float ex_low_m1,ex_low_m2,ex_high_m1,ex_high_m2;
\\Z{[{OZ
float real_pt[5][KE],imag_pt[5][KE];
&e-MOM2&
float freq[5],arg[5],ampn[5][KE],phasen[5][KE];
wWaJ%z>3y
float real_in[5],imag_in[5],amp_in[5],phase_in[5];
K[.*8
// float mag[KE];
5>S<9A|Q
&&Uc%vIN
pi = 3.14159;
mh4<.6>5
kc = KE/2; /* Center of the problem space*/
=vpXYj
ddx = .01; /* Cell size */
VJ8"Q
dt = ddx/6e8; /* Time steps */
>" z$p@7
epsz = 8.8e-12;
%6%QE'D
60iMfcT
printf (" %6.4f %10.5e \n",ddx,dt);
M9t`w-@_w
f4b`*KGf
/*Initialize to free space */
~"Q24I
RRasX;zK
for (k = 0; k <KE; k++)
J%:D%=9 )
{
)6t=Bel
ga[k] = 1.;
(59u<F
gb[k] = 0.;
&nRbI:R
ex[k] = 0;
\i2S'AblYq
dx[k] = 0;
e2}5< 7
hy[k] = 0;
=B/Ac0Y
ix[k] = 0;
~+HZQv3Y
// mag[k] = 0;
M%vZcP
{SQ#n@Q&$
for (m=0; m<=2; m++)
JM&:dzyIP
{
cD6T4
real_pt[m][k] = 0; /* Real and imaginary parts of Fourier Transform */
k*U(ln
imag_pt[m][k] = 0;
fx"~WeVcO
ampn[m][k] = 0; /* Amplitude and phase of the Fourier Transforms */
H2cY},
phasen[m][k] =0;
/}ADV2sF
}
ZQVr]/W^r
}
C<T)'^7z
){sn!5=
for ( m=0; m<=2; m++)
3jJd)C R
{
bMrR
real_in[m] = 0; /* Fourier Trans of input pulse */
TA~FP#.
imag_in[m] = 0;
]bui"-tlK
}
d,"6s=4(q
pSPVY2qKX
ex_low_m1=0;
`1hM3N.nO
ex_low_m2=0;
&|LP>'H;
ex_high_m1=0;
gQ0W>\xz
ex_high_m2=0;
|E(`9
-!ARVf *
/* Parameters for the Fourier Transform */
_[kZ:#
KiaQ^[/q
freq[0] = 100.e6;
: U Yn
freq[1] = 200.e6;
<*vWcCS1
freq[2] = 500.e6;
=8p *Ijs
?kF_C,k/>N
for (n=0; n<=2; n++)
s (hJ *
{
M?nYplC
arg[n] = 2*pi*freq[n]*dt;
iVQ)hsW/
printf ("%2d %6.2f %7.5f \n",n,freq[n]*1e-6,arg[n]);
X`+8rO[
}
)M:pg%
c:@lR/oe"
printf ("Dielectric starts at -->");
xc&&UKd
scanf ("%d",&kstart);
pAm L
printf ("Epsilon -->");
n6 VX0R
scanf ("%f",&epsilon);
.O1Kwu
printf ("Conductivity -->");
v!~ ;QO
scanf ("%f",&sigma);
`nvm>u~[Hq
printf ("%d %6.2f %6.2f \n",kstart,epsilon,sigma);
F s{}bQyQ
`\]gNn'Q
/* Initialize the parameters */
mT3'kUZ}]
fPj*qi
for (k=kstart; k<KE; k++)
Or2J
{
.Z2zv*
ga[k] = 1./(epsilon+sigma*dt/epsz);
"L)=Y7Dx
gb[k] = sigma*dt/epsz;
jW!x!8=
}
k/`WfSM\.
=_@Q+N*]|(
for (k=1; k<KE; k++)
gWK N C
{
i+Fk
printf ("%2d ga[k]=%4.2f gb[k]=%4.2f\n",k,ga[k],gb[k]);
Rr!oT?6J?
}
DEFh&n
RoY"Haa
/* These parameters specify the input pulse */
,5 ylrE
+Y9n@`
t0=50.0; /* Center of the incident pulse */
03$lg DQ
spread=10.0; /* Width of the incident pulse */
Tl%n|pc
w%NT 0J
T=0;
Di^7@}kQS
NSTEPS=1;
W3h{5\d!
while ( NSTEPS>0)
g3h:oQCS
{
Ed^F_Gg#
/* Main part of the program */
vp_$Ft-R
s7(I
printf ("NSTEPS --> "); /* NSTEPS is the number of times the */
H+O^e l
scanf (" %d", &NSTEPS); /* main loop has executed */
X^%E"{!nU
printf (" %d \n",NSTEPS);
x392uS$#
w<o#/J9
h88IP:bo
for (n=1; n<=NSTEPS; n++)
G#f(oGn :
{
`SN?4;N0
T=T+1; /* T keeps track of the total number */
\U\k$ (
/* of times the main loop is executed */
B'U;i5u4'
/* Main FDTD Loop */
}vof| (Yh
o<f#Zi
/* Calculate the Dx field */
<8?jn*$;\
KD*q|?Z
for (k=1; k<KE; k++)
qbunP!
{
NA<6s]Cs.
dx[k] = dx[k] +.5*(hy[k-1]-hy[k]);
C>0='@LB@r
}
$1ZFkw
qUuvM
/* Initialize with a Guassian pulse */
LL}b]B[
M,WC+")Z=
pulse = exp(-.5*(pow( (t0-T)/spread,2.0) ));
!vQDPLBL
dx[5] = dx[5] + pulse;
Kd%>:E*
printf ("%5.1f %6.2f %6.2f\n",T,pulse,dx[5]);
OM1pyt
mz<wYV*
/* Calculate Ex from Dx */
k@RIM(^t
efnj5|JSV
for ( k=1; k<KE;k++)
&l| :1
{
g0&Rl
ex[k] = ga[k]*(dx[k] - ix[k]);
-AX[vTB
ix[k] = ix[k] + gb[k]*ex[k];
1oVjx_I5y
}
E~| XY9U36
:{tj5P!S
/* Calculate the Fourier transform of Ex. */
zB@@Gs>
for ( k=0;k<KE;k++)
<M,A:u\qSQ
{
\.AI;^)X@]
for (m=0;m<=2;m++)
Ze:Y"49S+>
{
`JrvD
real_pt[m][k] = real_pt[m][k] + cos(arg[m]*T)*ex[k];
f[;l7
imag_pt[m][k] = imag_pt[m][k] - sin(arg[m]*T)*ex[k];
ud@7%%
}
>RL|W}tI4
}
wRLj>nc
KJ]ejb$
/* Fourier Transform of the input pulse */
{zj<nu
h=`1sfz
if (T<100)
>8>}o4Q/X
{
uV'w0`$y
for (m=0; m<=2; m++)
HHMv%H]M
{
;^cc-bLvF
real_in[m] = real_in[m] + cos (arg[m]*T)*ex[10];
.:(N1n'>1
imag_in[m] = imag_in[m] - sin (arg[m]*T)*ex[10];
tG"lI/
}
="Edt+a)t
}
[ ]LiL;A&
uJX(s6["=
V1= (^{p8
/*Absorbing Boundary Conditions*/
,2y" \_
cz6\qSh\,
ex[0] = ex_low_m2;
H5'Le{
ex_low_m2 = ex_low_m1;
F,l%SQCyj
ex_low_m1 = ex[1];
YJ[Jo3M@j0
}ippi6b:r
ex[KE-1] = ex_high_m2;
r!,/~~mT
ex_high_m2 = ex_high_m1;
rcyq+wY #
ex_high_m1 = ex[KE-2];
5(}Qg9%
{+.ai8
/* Calculate the Hy field */
U(t_uc5q
~ ""?:
for ( k=0; k<KE-1; k++)
g0n 5&X
{
zV<vwIUrr
hy[k] = hy[k] + .5*(ex[k]-ex[k+1]);
*\5o0~~8J
}
5uJ{#Zd
}
n!>#o1Qr
?{bAyh/
/* End of the Main FDTD Loop */
SA'c}gP
B<A=U r
/* At the end of the calculation,print out
dreEe s`|
the Ex and Hy fields */
$ [NC$*N7
kl90w
for (k=0; k<KE; k++)
%!_%%p,f
{
RgQ;fYS
printf ("%2d %6.2f %6.2f \n",k,dx[k],ex[k]);
1}$GVb%i
}
/t<C_lLM
HN j6Iw
/* Write the E field out ot a file "Ex" */
3"pl="[*
fp=fopen( "Ex","w");
lbg^ 2|o~~
for (k=0;k<KE;k++)
(XDK&]U
{
$kM8E@x2
fprintf (fp," %6.3f \n",ex[k]);
=C[2"Y4JK0
}
&\_cU?0d
fclose(fp);
Ub%sw&QG(9
'r2VWavT
/* Calculate the amplitude and phase of each frequency */
6'^Gh B
_H(:$=$Q
/* Amplitude and phase of the input pulse */
VSJ08Ngi
for ( m=0; m<=2; m++)
G^ 2a<?Di
{
Wz^M*=,
amp_in[m] = sqrt (pow (imag_in[m],2) + pow(real_in[m],2));
)U':NV2
phase_in[m] = atan2 (imag_in[m],real_in[m]);
ZGHh!Ds;
df$VC
printf ( "%d Input Pulse : %8.4f %8.4f %8.4f %7.2f \n",
nYF *f
m,real_in[m],imag_in[m],amp_in[m],(180.0/pi)*phase_in[m]);
w'-J24>=
nYv`{0S+m
for ( k=0; k<KE; k++)
\XUG-\$p
{
FlPPz
ampn[m][k] = (1./amp_in[m])*sqrt( pow(real_pt[m][k],2.)
yN Bb(!u
  ..
|,G=k,?_p
1D pRm(
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
离线
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,做福利也变换也没什么意义了。
共
条评分
继续!
发帖
回复