登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
Python的实现
发帖
回复
1
2
3
4
8481
阅读
33
回复
[
RFEDA原创
]
Python的实现
离线
samuelp
UID :63797
注册:
2010-07-23
登录:
2010-10-19
发帖:
28
等级:
仿真二级
20楼
发表于: 2010-07-30 17:01:55
fd2d_3.3.c平面波源:
1rr\l`
(RP"VEVR
from pylab import *
%<|w:z$vp
from enthought.mayavi import mlab
8._ A[{.f
|fx*F}1
NSTEPS = 115; NPML = 8
*CHLs^)
ddx = 0.01; dt = ddx/6.0e8; epsz = 8.8e-12
[MmOPm}@
T = 0; t0 = 20.0; spread = 8.0
pg\Ylk"T
zFy0SzF
IE = 60; ic = IE/2; ia = 7; ib = IE-ia-1
< sJ
JE = 60; jc = JE/2; ja = 7; jb = JE-ja-1
;+%(@C51GE
hrpql_9.
dz = zeros((IE,JE)); hx = zeros((IE,JE)); ihx = zeros((IE,JE))
9V]\,mD=
ez = zeros((IE,JE)); hy = zeros((IE,JE)); ihy = zeros((IE,JE))
N|n"JKw)
ga = ones((IE,JE))
_H:mBk,,
gi2 = ones(IE); gi3 = ones(IE); fi1= zeros(IE); fi2 = ones(IE); fi3 = ones(IE)
wic& $p/%
gj2 = ones(JE); gj3 = ones(JE); fj1= zeros(JE); fj2 = ones(JE); fj3 = ones(JE)
qRXb9c
TG\3T%gH/s
ez_inc = zeros(JE); ez_inc_low_m1 = 0.0; ez_inc_high_m1 = 0.0
28KS*5S
hx_inc = zeros(JE); ez_inc_low_m2 = 0.0; ez_inc_high_m2 = 0.0
vO85h
de?Bn+mvi.
xnum = NPML-arange(NPML)
H\OV7=8
r sf +dC
xn = 0.33*(xnum/float(NPML))**3
mHqw,28}
gi2[0:NPML] = 1.0/(1.0+xn); gi2[-1:-1-NPML:-1] = 1.0/(1.0+xn)
1LbJR'}
gi3[0:NPML] = (1.0-xn)/(1.0+xn); gi3[-1:-1-NPML:-1] = (1.0-xn)/(1.0+xn)
'N?,UtG R
gj2[0:NPML] = 1.0/(1.0+xn); gj2[-1:-1-NPML:-1] = 1.0/(1.0+xn)
VP|ga}(
gj3[0:NPML] = (1.0-xn)/(1.0+xn); gj3[-1:-1-NPML:-1] = (1.0-xn)/(1.0+xn)
sx ;7
X>Cl{.
xn = 0.25*((xnum-0.5)/float(NPML))**3
b~khb!]
fi1[0:NPML] = xn; fi1[-2:-2-NPML:-1] = xn
jG"n);WF
fi2[0:NPML] = 1.0/(1.0+xn); fi2[-2:-2-NPML:-1] = 1.0/(1.0+xn)
>4gGb)
fi3[0:NPML] = (1.0-xn)/(1.0+xn); fi3[-2:-2-NPML:-1] = (1.0-xn)/(1.0+xn)
R<}n?f\#JZ
fj1[0:NPML] = xn; fj1[-2:-2-NPML:-1] = xn
dqU bJc]
fj2[0:NPML] = 1.0/(1.0+xn); fj2[-2:-2-NPML:-1] = 1.0/(1.0+xn)
#{]X<et
fj3[0:NPML] = (1.0-xn)/(1.0+xn); fj3[-2:-2-NPML:-1] = (1.0-xn)/(1.0+xn)
K,7IBv,B[
K:!|xr(1d
for n in range(NSTEPS):
'eNcQJh
T += 1
UenB4
ez_inc[1:] += 0.5*(hx_inc[:-1]-hx_inc[1:])
9? xMsu-H
-6(u09mb_
ez_inc[0] = ez_inc_low_m2; ez_inc[JE-1] = ez_inc_high_m2
<r_L-
ez_inc_low_m2 = ez_inc_low_m1; ez_inc_high_m2 = ez_inc_high_m1
c$.h]&~dN
ez_inc_low_m1 = ez_inc[1]; ez_inc_high_m1 = ez_inc[JE-2]
j'#Y$d1.
A.aUWh
for i in range(1,IE):
YQb43Sh`
for j in range(1,JE):
0v%ZKvSID
dz[j] = gi3*gj3[j]*dz[j]+gi2*gj2[j]*0.5*(hy[j]-hy[i-1][j]-hx[j]+hx[j-1])
|Co ?uv i
i%m]<yElm
pulse = exp(-0.5*((t0-T)/spread)**2); ez_inc[3] = pulse;
:wn9bCom?M
I:4m]q b
for i in range(ia,ib+1):
|p"P+"#
dz[ja] += 0.5*hx_inc[ja-1]
iXp*G52
dz[jb] += -0.5*hx_inc[jb]
Ccmo(W+0
={[s)G
ez = ga*dz
`uz15])1<
czM Thm
for i in range(IE-1): ez[0] = 0.0; ez[-1] = 0.0
Q`nsL)J
for j in range(JE-1): ez[0][j] = 0.0; ez[-1][j] = 0.0
y\]~S2}G
UADD 7d
hx_inc[:-1] += 0.5*(ez_inc[:-1]-ez_inc[1:])
1wX0x.4d
FOB9J.w4
for i in range(IE):
[89qg+z
for j in range(JE-1):
o`hVI*D
curl_e = ez[j]-ez[j+1]; ihx[j] += fi1*curl_e
& 5!.!Z3
hx[j] = fj3[j]*hx[j]+fj2[j]*0.5*(curl_e+ihx[j])
H1`}3}"
!,f{I5/
for i in range(ia,ib+1):
W'l &rm@
hx[ja-1] += 0.5*ez_inc[ja]
j]uL9\>
hx[jb] += -0.5*ez_inc[jb]
Q/oe l'O*x
> YHwWf-
for i in range(IE-1):
xE$(I<:
for j in range(JE-1):
/%w9F
curl_e = ez[i+1][j]-ez[j]; ihy[j] += fj1[j]*curl_e
K:PPZ|
hy[j] = fi3*hy[j]+fi2*0.5*(curl_e+ihy[j])
(1`z16
gO kq>i_
for j in range(ja,jb+1):
xh$1Rwa
hy[ia-1][j] += -0.5*ez_inc[j]
g4(vgWOW`
hy[ib][j] += 0.5*ez_inc[j]
C5Fk>[fS
>7yOu!l
x, y = np.ogrid[0:IE,0:JE]
%:bTOw[4r
pl = mlab.surf(x, y, ez, warp_scale="auto")
M_-LI4>
4l0ON>W(
坚持到底就是胜利!
v%_5!SR
图片:fd2d_3.3.JPG
共
条评分
离线
samuelp
UID :63797
注册:
2010-07-23
登录:
2010-10-19
发帖:
28
等级:
仿真二级
21楼
发表于: 2010-08-02 18:01:51
fd2d_3.4.c中间存在圆柱介质:
~GJN@ka4%
GKiukX$'
from pylab import *
}CDk9Xk
from enthought.mayavi import mlab
hXn3,3f3oZ
:jEPu3E:
NSTEPS = 100; NPML = 8;
DNkWOY#{
ddx = 0.01; dt = ddx/6.0e8; epsz = 8.8e-12
uS+k^ #
T = 0; t0 = 25.0; spread = 8.0
Bfr'Zdw
F7MzCZvu
IE = 60; ic = IE/2; ia = 7; ib = IE-ia-1
_q?<at}y
JE = 60; jc = JE/2; ja = 7; jb = JE-ja-1
npp[@*~
-x`G2i
dz = zeros((IE,JE)); hx = zeros((IE,JE)); ihx = zeros((IE,JE))
s '?G H
ez = zeros((IE,JE)); hy = zeros((IE,JE)); ihy = zeros((IE,JE))
93O;+Z5J
ga = ones((IE,JE)); gb = zeros((IE,JE)); iz = zeros((IE,JE))
EE=3
gi2 = ones(IE); gi3 = ones(IE); fi1= zeros(IE); fi2 = ones(IE); fi3 = ones(IE)
g~S)aU\:,
gj2 = ones(JE); gj3 = ones(JE); fj1= zeros(JE); fj2 = ones(JE); fj3 = ones(JE)
BVw Wj-,
a%BeqSZh
ez_inc = zeros(JE); ez_inc_low_m1 = 0.0; ez_inc_high_m1 = 0.0
GiFXX
hx_inc = zeros(JE); ez_inc_low_m2 = 0.0; ez_inc_high_m2 = 0.0
N]N4^A'
re &E{
xnum = NPML-arange(NPML)
k(%QIJH
Ad$n4Ze
xn = 0.33*(xnum/float(NPML))**3
'b/<