!**************************************************************************** ! 初期化 !**************************************************************************** subroutine init use consts use fdtd implicit none integer :: id print *,'**** INIT ****' write(1,*) '**** INIT ****' ! ******** 波源情報 ******** call input ! ******** 波源情報 ******** freq=2.45d9 ! 周波数 [Hz] ! ******** 格子数 ******** nx=75 ny=75 ! ******** タイムステップ、格子間隔 ******** ! Courant の安定条件 ! v dt < 1/sqrt((1/dx)**2+(1/dy)**2+(1/dz)**2) ! v dt < dx/sqrt(3) when dx=dy=dz dx=50.0d-3/10.0d0 dy=dx dt=1.0d0/freq/80.0d0 if(dt.gt.1.0d0/sqrt((1.0d0/dx)**2+(1.0d0/dy)**2)/c) then print *,'Sub(init): Courant stability condition must be satisfied' print *,'dt = ',dt print *,'dt < ',1.0d0/sqrt((1.0d0/dx)**2+(1.0d0/dy)**2)/c stop end if write(1,*) 'dt=',dt ! ******** 媒質定数設定 ******** nmedia=2 ! 1: 真空 eps(1)=epsilon0 mu(1)=mu0 sig(1)=0.0d0 ! 2: PEC,PMC (これは別のルーチンで処理する) ! ******** フィールド更新係数 ******** ! 1: 真空 cex0=1.0d0 cey0=1.0d0 cexry0=(dt/epsilon0)/dy ceyrx0=(dt/epsilon0)/dx chzry0=(dt/mu0)/dy chzrx0=(dt/mu0)/dx ! 3以上: 一般の媒質 do id=3,nmedia cex(id)=(1.0d0-((sig(id)*dt)/(2.0d0*eps(id)))) & /(1.0d0+((sig(id)*dt)/(2.0d0*eps(id)))) cey(id)=(1.0d0-((sig(id)*dt)/(2.0d0*eps(id)))) & /(1.0d0+((sig(id)*dt)/(2.0d0*eps(id)))) cexry(id)=(dt/eps(id))/(1.0d0+((sig(id)*dt)/(2.0d0*eps(id))))/dy ceyrx(id)=(dt/eps(id))/(1.0d0+((sig(id)*dt)/(2.0d0*eps(id))))/dx chzry(id)=(dt/mu(id))/dy chzrx(id)=(dt/mu(id))/dx end do ! ******** 吸収境界条件の更新定数 ******** mur1_cx=(c*dt-dx)/(c*dt+dx) mur1_cy=(c*dt-dy)/(c*dt+dy) ! ******** 物体のモデリング ******** call modeling return end subroutine !---------------------------------------------------------------------------- ! ファイル入力 !---------------------------------------------------------------------------- subroutine input use fdtd implicit none character(72) :: text open(10,file='input.dat') read(10,*) text,ntime close(10) ! パラメータ確認 write(1,*) 'TIME STEP=',ntime return end subroutine !---------------------------------------------------------------------------- ! 物体のモデリング !---------------------------------------------------------------------------- subroutine modeling use fdtd implicit none integer :: i,j ! すべて真空 (=1) に初期化する do i=1,nx do j=1,ny media_id(i,j)=1 end do end do return end subroutine ! ! End of file !