登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
求助啊 。。。谁帮我改下程序啊
发帖
回复
619
阅读
0
回复
[
求助
]
求助啊 。。。谁帮我改下程序啊
离线
海聆羽
谁帮我改下程序啊 。。。万分感谢
UID :81280
注册:
2011-08-09
登录:
2013-01-14
发帖:
13
等级:
仿真新人
0楼
发表于: 2011-08-09 17:40:41
!******************************************************************************************************
hikun2
! 二维 FDTD区域中设置一随时间为正弦周期变化的点波源
lPH]fWt<
! 对于Ez的TM波(Hx.Hy.Ez一组) 设介质是无耗介质(自由空间)
+J2=\YO
! 在区域截断边界设为二阶Mur吸收边界,角点亦处理
J<2N~$
! 画出TM波情形是正玹变化点源辐射时的相位分布
iH2|w
! language:Fortran90
\K=Jd#9c
! 彭 欢 2011.6.1
2neiUNT
!*******************************************************************************************************
e>[QF+e)y
program FDTD2D
B*{CcQ<5
implicit none
<H.Ml>q:r
!********************************************************************************************************
CzgLgh;:T
! 定义变量
F[lHG,g-
!********************************************************************************************************
^U52 *6
integer i,j,m,n !循环变量与时间步数
d%<Uh(+:
real*8 Ez(0:200,0:200),Hx(0:200,0:200),Hy(0:200,0:200)
U;_;_
real*8 Eac(4,2,0:1),Eab(1:199,1:4) !Eab吸收边界条件临时变量 Eac吸收边界条件角点临时变量
plca`
real*8 CA,CB,CP,CQ !FDTD迭代公式系数
_$\T;m>'A
real*8 CM,CN,C1 !TM波Mur吸收边界条件系数
i<l)To -
real*8 Omega,dt,dx,dy,delta !角频率
Gh j[nsoC~
integer Imax,Imin,Jmax,Jmin !FDTD 区域总边界(吸收边界)
,,?t>|3
integer WL !数值波长
qz 'a.]{=
real*8 Z !波阻抗
KF.?b]
real*8,parameter:: C=3.0e+8 !光速
j%lW+[%
real*8,parameter:: Pi=3.14159263 !圆周率
_\[Zr.y
real*8,parameter:: wavelength=0.01 !波长
1.+MX(w
real*8,parameter:: Epso=8.85e-12 !介电常数
`'~|DG}a
real*8,parameter:: Mu0=4*pi*1.e-7 !自由空间电磁参数:磁导率
3E#acnqn*
B!:(*lF
write(*,*)"时间步数"
q o'1Pknz
read(*,*)n
}Vt5].TA
=T1i(M#
!open(1,file='Ez.dat')
wi!Ml4Sb
!********************************************************************************************************
7w9) ^
! 参数赋初始值
1\1o65en
!********************************************************************************************************
[p(Y|~
Z=sqrt(Mu0/Epso) !自由空间中波阻抗为377
+f+\uObi:
WL=40
8u>E(Vmpu
dx=wavelength/WL
{w2<;YXj!
dy=wavelength/WL
f@yST z;u
delta=dx
DpA)Z??
dt=0.5*dx/C !需要满足Courant二维稳定性条件
:Z<-J`
Omega=2*Pi*(C/wavelength)
-" DI,o
CA=1.
Vry#
CB=dt/Epso !由自有空间介质中电损耗与磁损耗分别为0,求出的迭代系数CA,CB,CP,CQ
{W0@lMrD
CP=1.
TOQvZ?_
CQ=dt/Mu0
A2xORG&FD
Hx=0.
+s`n]1HC
Hy=0.
%f@]-
Ez=0.
# H4dmnV
Imax=200
X{)M}WO+r
Imin=0
b*$^8%
Jmax=200
CEwG#fZ
Jmin=0
)%*uMuF
Ez(100,100)=sin(Omega*dt) !设置一随时间为正弦周期变化的点波源
Ls9G:>'rR
CM=(c*dt-dx)/(c*dt+dx)
>8ePx,+!
CN=c**2*Mu0*dt/(2*(c*dt+dx))/Z !吸收边界条件系数。注意:CN计算时候徐除以自由空间的波阻抗常数377
_c[t.\-`]
C1=(c*dt-sqrt(2.)*delta)/(c*dt+sqrt(2.)*delta) !角点处理的系数
9khD7v
!*********************************************************************************************************
uvT]MgT
!
$v+g3+7
! Ez的迭代
K]RkKMT,
!
)+{'p0
!*********************************************************************************************************
2lQ'rnqS)
do m=1,n
&cZD{Z
!*********************************************************************************************************
^K3{6}]
! 迭代求解电场Ez
zdr?1=
!*********************************************************************************************************
xX}vxhN
do i=Imin+1,Imax-1
x ha!.&DO
do j=Jmin+1,Jmax-1
K2&pTA~OR
Ez(i,j)=CA*Ez(i,j)+CB*((Hy(i,j)-Hy(i-1,j))/dx-(Hx(i,j)-Hx(i,j-1))/dy) !(见课本2-3-12式)求Ez
x;ujR<
end do
tL D.e
enddo
/q8n_NR
!*********************************************************************************************************
MLUq"f~ N
! 迭代求解磁场Hx
zF{5!b
!*********************************************************************************************************
hF6EOCY6D
!Ez(Imax,Jmax)
J|s4c`=
do i=Imin,Imax
&DgIykqN
do j=Jmin,Jmax-1
*NDzU%X8
Hx(i,j)=CP*Hx(i,j)-CQ*(Ez(i,j+1)-Ez(i,j))/dy !(见课本2-3-10式)求Hx
/<GygRs
end do
Q+S>nL!*#1
end do
3dXyKi
!*********************************************************************************************************
<MY_{o8d
! 迭代求解磁场Hy
@}#$<6|
!*********************************************************************************************************
(d_{+O"
do i=Imin,Imax-1
C0'Tua'
do j=Jmin,Jmax
fuQ?@F
Hy(i,j)=CP*Hy(i,j)+CQ*(Ez(i+1,j)-Ez(i,j))/dx !(见课本2-3-11式)求Hy
t0/fF'GZD
end do
y>|7'M*+
end do
Rf7py )
V]IS(U(
!以上三式为二维情况FDTD电磁场的时间推进计算公式
^G15]Pyw
Ez(100,100)=sin(Omega*m*dt) !在(100,100)处加入正弦点波源
N1_nBQF )
!************************************************************************************************************
UeE&rA]
! 二阶Mur吸收边界
HZR~r:_ i
!************************************************************************************************************
\ ddbqg?`
"",V\m
!************************************************************************************************************
fY\QI =
! y=0与y=200边界
JrO2"S
!************************************************************************************************************
O0wD"V^W
do i=Imin+1,Imax-1
xZBmQ:s',S
Ez(i,Jmin)=Eab(i,1)+CM*(Ez(i,Jmin+1)-Ez(i,Jmin))+CN*(Hy(i,Jmin)-Hy(i-1,Jmin)+Hy(i,Jmin+1)-Hy(i-1,Jmin+1))
PZQ}G*p3
Eab(i,1)=Ez(i,Jmin+1)
Krz[ f
Ez(i,Jmax)=Eab(i,3)+CM*(Ez(i,Jmax-1)-Ez(i,Jmax))+CN*(Hy(i,Jmax)-Hy(i-1,Jmax)+Hy(i,Jmax-1)-Hy(i-1,Jmax-1))
NFsMc0{
Eab(i,3)=Ez(i,Jmax-1)
%A?Ym33
end do
Si!W@Jm
!************************************************************************************************************
w+ bMDp
! x=0与x=200边界
7|\[ipVX:3
!************************************************************************************************************
+,If|5>(
do j=Jmin+1,Jmax-1
C%l~qf1n
Ez(Imin,j)=Eab(j,4)+CM*(Ez(Imin+1,j)-Ez(Imin,j))-CN*(Hx(Imin,j)-Hx(Imin,j-1)+Hx(Imin+1,j)-Hx(Imin+1,j-1))
Rom|Bqo;
Eab(j,4)=Ez(1,j)
!qT.D:!@zF
Ez(Imax,j)=Eab(j,2)+CM*(Ez(Imax-1,j)-Ez(Imax,j))-CN*(Hx(Imax,j)-Hx(Imax,j-1)+Hx(Imax-1,j)-Hx(Imax-1,j-1))
pS9CtQqvgy
Eab(j,2)=Ez(Imax-1,j)
4u A;--j
)t0t*xu#
end do
/8lGP!z
!*************************************************************************************************************
tFXG4+$D
! 吸收边界角点处
A-uEZj_RD=
!*************************************************************************************************************
5WY..60K,
Ez(Imin,Jmin)=Ez(Imin+1,Jmin+1)+C1*(Ez(Imin+1,Jmin+1)-Ez(Imin,Jmin))
~,.Agx
Ez(Imax,Jmin)=Ez(Imax-1,Jmin+1)+C1*(Ez(Imax-1,Jmin+1)-Ez(Imax,Jmin))
"h\{PoG
Ez(Imax,Jmax)=Ez(Imax-1,Jmax-1)+C1*(Ez(Imax-1,Jmax-1)-Ez(Imax,Jmax))
(m})V0/`
Ez(Imax,Jmax)=Ez(Imin+1,Jmax-1)+C1*(Ez(Imin+1,Jmax-1))-Ez(Imax,Jmax)
wC;N*0Th
s\_ ,aI
!*********************************************************************************************************
Z3=t"
! 多文件输出
Bx2E9/S3
!*********************************************************************************************************
^qGH77#z
100 format(1350f16.5)
tPc '#.
if(m==300)THEN
db4Ol=
_<&IpT{w+
OPEN(1,File='Ez300.dat')
3Cq17A 9
do j=Jmin,Jmax
dX` _Y
write(1,100) (Ez(i,j),i=Imin,Imax)
s+9q:
end do
8&B{bS
close(1)
&!a[rvtZ+
@:X~^K.
elseif(m==500)then
EPW Iu)A
OPEN(1,File='Ez500.dat')
Rax}r
do j=Jmin,Jmax
[[ HXOPaV
write(1,100) (Ez(i,j),i=Imin,Imax)
h$y1"!N(
end do
76(&O
close(1)
$GPenQ~},
vV,H@WK
elseif(m==1000)then
:U^a0s%B
OPEN(1,File='Ez1000.dat')
IYb@@Jzo
do j=Jmin,Jmax
5YJLR;
write(1,100) (Ez(i,j),i=Imin,Imax)
<5G*#0gw
end do
>i-cR4=LL{
close(1)
RR*<txdN
mbU[fHyV
elseif(m==3000)then
e$fxC-sZ
OPEN(1,File='Ez3000.dat')
J8~3LE )G
do j=Jmin,Jmax
s9zdg"c'
write(1,100) (Ez(i,j),i=Imin,Imax)
Ay/ "2pDZ
end do
UPA))Iv>
close(1)
Z'hW;^e%_z
0(h *<g:
elseif(m==5000)then
t :sKvJ
OPEN(1,File='Ez5000.dat')
Jcy
do j=Jmin,Jmax
{])F%Q_#cD
write(1,100) (Ez(i,j),i=Imin,Imax)
oe# :EfT
end do
UeX3cD
close(1)
j8YMod=
P.=&:ay7?
elseif(m==6000)then
0l!@bj
OPEN(1,File='Ez6000.dat')
_z#zF[%
do j=Jmin,Jmax
rV54-K;`0
write(1,100) (Ez(i,j),i=Imin,Imax)
+kmPQdO;*/
end ..
[?yOJU%`
RV.*_FG
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
发帖
回复