登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
求助啊 。。。谁帮我改下程序啊
发帖
回复
618
阅读
0
回复
[
求助
]
求助啊 。。。谁帮我改下程序啊
离线
海聆羽
谁帮我改下程序啊 。。。万分感谢
UID :81280
注册:
2011-08-09
登录:
2013-01-14
发帖:
13
等级:
仿真新人
0楼
发表于: 2011-08-09 17:40:41
!******************************************************************************************************
FOv=!'So
! 二维 FDTD区域中设置一随时间为正弦周期变化的点波源
[pC$+NX
! 对于Ez的TM波(Hx.Hy.Ez一组) 设介质是无耗介质(自由空间)
)M,OfXa
! 在区域截断边界设为二阶Mur吸收边界,角点亦处理
Y l4^AR&
! 画出TM波情形是正玹变化点源辐射时的相位分布
^W`<gR
! language:Fortran90
"9ZID-~]
! 彭 欢 2011.6.1
0LPig[
!*******************************************************************************************************
wj*,U~syB
program FDTD2D
V, Z|tB^
implicit none
B -?6M6#
!********************************************************************************************************
"Q}#^h]F
! 定义变量
|'.*K]Yp
!********************************************************************************************************
[>+4^&
integer i,j,m,n !循环变量与时间步数
mC4zactv
real*8 Ez(0:200,0:200),Hx(0:200,0:200),Hy(0:200,0:200)
!*s?B L
real*8 Eac(4,2,0:1),Eab(1:199,1:4) !Eab吸收边界条件临时变量 Eac吸收边界条件角点临时变量
u!!Y=!y*<
real*8 CA,CB,CP,CQ !FDTD迭代公式系数
^!<U_;+
real*8 CM,CN,C1 !TM波Mur吸收边界条件系数
bx#>BK!
real*8 Omega,dt,dx,dy,delta !角频率
L6t+zIUc-~
integer Imax,Imin,Jmax,Jmin !FDTD 区域总边界(吸收边界)
6CV* Z\b
integer WL !数值波长
RJL2J]*S
real*8 Z !波阻抗
0ZT5bg_M
real*8,parameter:: C=3.0e+8 !光速
Fu SL}P
real*8,parameter:: Pi=3.14159263 !圆周率
;\a YlV-
real*8,parameter:: wavelength=0.01 !波长
:=}US}H$
real*8,parameter:: Epso=8.85e-12 !介电常数
\a 5U8shc
real*8,parameter:: Mu0=4*pi*1.e-7 !自由空间电磁参数:磁导率
wg7V-+@i
Qiua
write(*,*)"时间步数"
.R)D3NZp
read(*,*)n
G 3+.H
jlkmLcpf
!open(1,file='Ez.dat')
NO~*T?&
!********************************************************************************************************
; o?-yI&T*
! 参数赋初始值
Y#!UPhg<
!********************************************************************************************************
*i\Qo
Z=sqrt(Mu0/Epso) !自由空间中波阻抗为377
B( ]M&
WL=40
6DM$g=/'
dx=wavelength/WL
Vu)4dD!
dy=wavelength/WL
DwaBdN[!7
delta=dx
r;B8i!gD
dt=0.5*dx/C !需要满足Courant二维稳定性条件
p6]7&{>
Omega=2*Pi*(C/wavelength)
Ov};e
CA=1.
D2<fw#
CB=dt/Epso !由自有空间介质中电损耗与磁损耗分别为0,求出的迭代系数CA,CB,CP,CQ
sR(9IW-
CP=1.
.Obw|V-
CQ=dt/Mu0
gcE|#1>
Hx=0.
{E p0TVj`
Hy=0.
u5O+1sZ"6
Ez=0.
V[{6e
Imax=200
f* !j[U/r_
Imin=0
j K!Au
Jmax=200
yL%K4$z
Jmin=0
= 6tHsN23
Ez(100,100)=sin(Omega*dt) !设置一随时间为正弦周期变化的点波源
G,$PV e*
CM=(c*dt-dx)/(c*dt+dx)
sc|_Q/`\.
CN=c**2*Mu0*dt/(2*(c*dt+dx))/Z !吸收边界条件系数。注意:CN计算时候徐除以自由空间的波阻抗常数377
?{\nf7Y
C1=(c*dt-sqrt(2.)*delta)/(c*dt+sqrt(2.)*delta) !角点处理的系数
4zASMu
!*********************************************************************************************************
Wl;.%.]>
!
ks3`3q 7
! Ez的迭代
|S_T^'<W
!
ST2.:v;lb
!*********************************************************************************************************
FYOD Upn
do m=1,n
E4gYemuN
!*********************************************************************************************************
)i~cr2Hk
! 迭代求解电场Ez
s8QMewU
!*********************************************************************************************************
Q~814P8]
do i=Imin+1,Imax-1
`k=bL"T>\
do j=Jmin+1,Jmax-1
wAX1l*`
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
Ot:CPm@
end do
$k|g"9
enddo
8yRJD[/S
!*********************************************************************************************************
{p)",)td
! 迭代求解磁场Hx
J cg,#@
!*********************************************************************************************************
pwO>h>ik
!Ez(Imax,Jmax)
K)-U1JE7
do i=Imin,Imax
/,1D)0
do j=Jmin,Jmax-1
dI*pDDq#
Hx(i,j)=CP*Hx(i,j)-CQ*(Ez(i,j+1)-Ez(i,j))/dy !(见课本2-3-10式)求Hx
5j:0Yt
end do
I'\kFjc
end do
*Nw&_<\9Q
!*********************************************************************************************************
*n;!G8\
! 迭代求解磁场Hy
~1cnE:x;V
!*********************************************************************************************************
w ihH?~]
do i=Imin,Imax-1
3j,Q`+l/6d
do j=Jmin,Jmax
0T@ Zb={
Hy(i,j)=CP*Hy(i,j)+CQ*(Ez(i+1,j)-Ez(i,j))/dx !(见课本2-3-11式)求Hy
Yb:\a/ y
end do
flk=>h|
end do
_ 6O\W%it
7x#Ckep:I
!以上三式为二维情况FDTD电磁场的时间推进计算公式
@*}D$}aR'V
Ez(100,100)=sin(Omega*m*dt) !在(100,100)处加入正弦点波源
A&s:\3*Kh
!************************************************************************************************************
/4t j3B,
! 二阶Mur吸收边界
7bqBk,`9
!************************************************************************************************************
]NjX?XdX<
`o<' x.I
!************************************************************************************************************
aF)1Nm[
! y=0与y=200边界
&?VQ,+[<
!************************************************************************************************************
`%CtWJ(e
do i=Imin+1,Imax-1
c#a@n 4
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))
L~_9_9c
Eab(i,1)=Ez(i,Jmin+1)
4/mig0"N.
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))
+hvO^?4j
Eab(i,3)=Ez(i,Jmax-1)
OH;b"]
end do
Nqw&< x+
!************************************************************************************************************
9!T[Z/}T
! x=0与x=200边界
!O-T0O
!************************************************************************************************************
:/y1yM
do j=Jmin+1,Jmax-1
+cIUGFp}
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))
NZ;{t\
Eab(j,4)=Ez(1,j)
pcau}5 .
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))
Uh7v@YMC
Eab(j,2)=Ez(Imax-1,j)
&F\?
d_4T}%q
end do
;epV<{e$q4
!*************************************************************************************************************
1=#q5dZ]
! 吸收边界角点处
ElS 9?Q+
!*************************************************************************************************************
:{qv~&+C
Ez(Imin,Jmin)=Ez(Imin+1,Jmin+1)+C1*(Ez(Imin+1,Jmin+1)-Ez(Imin,Jmin))
j]*j}%hz
Ez(Imax,Jmin)=Ez(Imax-1,Jmin+1)+C1*(Ez(Imax-1,Jmin+1)-Ez(Imax,Jmin))
ZaeqOVp/j
Ez(Imax,Jmax)=Ez(Imax-1,Jmax-1)+C1*(Ez(Imax-1,Jmax-1)-Ez(Imax,Jmax))
*&?c(JU;<
Ez(Imax,Jmax)=Ez(Imin+1,Jmax-1)+C1*(Ez(Imin+1,Jmax-1))-Ez(Imax,Jmax)
Ae69>bkE0
WtViW=j'
!*********************************************************************************************************
j*F`"df
! 多文件输出
7w 37S
!*********************************************************************************************************
n9@ of
100 format(1350f16.5)
)p T?/J
if(m==300)THEN
,$;yY)x7U
XpmS{nb
OPEN(1,File='Ez300.dat')
{S,l_d+(
do j=Jmin,Jmax
Uu!f,L;ty
write(1,100) (Ez(i,j),i=Imin,Imax)
Of{/t1o?
end do
K)qF+Vb^j
close(1)
I"Ms-zs
8aO~/i:(.
elseif(m==500)then
(Q%'N3gk
OPEN(1,File='Ez500.dat')
1&^MfP}
do j=Jmin,Jmax
ojQI7 Uhw
write(1,100) (Ez(i,j),i=Imin,Imax)
_7IKzUn9g[
end do
P8^hBv*
close(1)
9;Itqe{8w
d*A*y ^OD
elseif(m==1000)then
.uyGYj-C
OPEN(1,File='Ez1000.dat')
4!+pc-}-
do j=Jmin,Jmax
A$#p%yb
write(1,100) (Ez(i,j),i=Imin,Imax)
=i_-F$pV
end do
a["2VY6Eq@
close(1)
1U^A56CN
j6>.n49_
elseif(m==3000)then
r`AuvwHPs[
OPEN(1,File='Ez3000.dat')
N-I5X2
do j=Jmin,Jmax
P`#Z9 HM4
write(1,100) (Ez(i,j),i=Imin,Imax)
t]$P 1*I
end do
}:u~K;O87
close(1)
`D`sr[3n
vk*=4}:
elseif(m==5000)then
*c%oN |
OPEN(1,File='Ez5000.dat')
Y2d;E.DH8
do j=Jmin,Jmax
Q -MQ9'
write(1,100) (Ez(i,j),i=Imin,Imax)
w=LP"bqlI
end do
f 1w~!O9
close(1)
(>`5z(X
8<.C3m 6h
elseif(m==6000)then
WcHgBbNe
OPEN(1,File='Ez6000.dat')
cgl*t+o&
do j=Jmin,Jmax
Jrg2/ee,*
write(1,100) (Ez(i,j),i=Imin,Imax)
L:_bg8eD#
end ..
1AG=%F|.
pY_s*0_
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
发帖
回复