! -----------------------------------------------|
! FDTD2d-mur2.f90 |
! |
! FDTD法による直交座標系(x,y)における |
! パラボラミラーによる電磁波の反射の数値計算 |
! |
! |
! プログラム作成:駒田寛 2010年4月 |
! -----------------------------------------------|
!=== 1. setup ==================================================================
! 宇野先生の本で「 setup 」となっている部分とほぼ同じである
!---1. setup 目次-------------------------------------------------------
! 1-0. 配列宣言
! 1-1.空間、時間に対して定数であるものの設定
! 1-2.空間に対して変数、時間に対して定数であるものの設定
! 1-3.時間に対して変数であるものの初期値設定
! 1-4. メモデータ作成(本にはない)
!---1. setup 目次 ここまで---------------------------------------------
!--- 1-0.配列宣言------------------------------------------
implicit none
REAL CEZ(1001,1001),CEZLX(1001,1001),CEZLY(1001,1001)
REAL CHXLY(1001,1001),CHYLX(1001,1001)
REAL MEDIUM(1001,1001)
REAL C(1001,1001) !導電率
REAL EZDUM(1001,1001) !仮座標でのEZ
REAL DA(1001,1001)
INTEGER NX
INTEGER NY
REAL PAI
REAL E
REAL MU
REAL F
REAL W
REAL DT
REAL DX,DY
REAL THETA
REAL THETA1,THETA2,THETA3,THETA4
REAL CV0 !真空中の光速(シーブイゼロ)
REAL CV(1001,1001) !媒質中の光速
INTEGER K !時間ステップ数格納用
INTEGER J !Y方向ステップ数格納用
INTEGER AI !X方向ステップ数格納用
INTEGER JDUM !仮座標用変数
INTEGER AIDUM !仮座標用変数
REAL HX(1001,1001),HY(1001,1001)
REAL EZ(1001,1001)
REAL EZ_MON_1(10000)
REAL EZ_MON_2(10000)
REAL EZX1(4,1001),EZX2(4,1001)
REAL EZY1(1001,4),EZY2(1001,4)
INTEGER KNOWN(1001,1001)
INTEGER MIRROR(1001)
INTEGER HORN_UP(1001)
INTEGER HORN_DOWN(1001)
INTEGER IT
INTEGER ITMAX
REAL T
REAL C1,C2,C3
!本のCXD,CXX,CXFYDをそれぞれC1,C2,C3と置いた。
!2次元ではCXFZDはない。
REAL AMPEZ(1001,1001)
!--- 1-0.配列宣言 ここまで-----------------------------------------------
!--- 1-1.空間、時間に対して定数(物理定数も含む)であるものの設定----------
!変数 ITMAX 以外。
! x,y方向の分割数+1の値
NX=1001 ! 吸収境界の座標はX,Yともに1,1001とする
NY=1001
!円周率
PAI = 3.141592654e0
!真空中の誘電率 [F/m]
E = 8.8541878e-12
!真空中の透磁率 [H/m]
MU = 4 * PAI * 1.0e-7
!調べる電磁波の周波数[Hz]
F = 15.0e+9
!電磁波の角周波数 [rad/s]
W = F * 2 * PAI
!時間ステップ[s]
DT = 1.0e-12
! 注1 最適時間ステップの計算がEXCELおよびメモ帳にある
!X方向のセルサイズ[m]
DX = 1.0e-3
!Y方向のセルサイズ [m]
DY = 1.0e-3
! 注2 最適セルサイズの計算がEXCELおよびメモ帳にある
!座標回転用角度[degree](実際 マイナス ダミー)
THETA = 225.0e0
THETA1 = cos(THETA*PAI/180)
THETA2 = -sin(THETA*PAI/180)
THETA3 = sin(THETA*PAI/180)
THETA4 = cos(THETA*PAI/180)
CV0 = 1/(E*MU)**0.5e0 !真空中の光速
C1 = (CV0*DT-DX)/(CV0*DT+DX)
C2 = 2*DX/(CV0*DT+DX)
C3 = DX*( (CV0*DT)**2 ) / ( 2* ((DY)**2) *(CV0*DT+DX) )
!変数は用意してあるが本プログラムでは常にDX=DYとする。
ITMAX = 5000; !全ステップ回数
!画面での確認、ファイルへの出力
OPEN(1101,FILE='20100421_01_2ramda_SET_DATA_CONST.txt',STATUS='unknown')
WRITE(6,'(a)')'以下をSET_DATA_1ファイルに出力します'
WRITE(6,'(a30,e10.5)')'X方向のセルサイズ [m]=',DX
WRITE(1101,'(a30,e10.5)')'X方向のセルサイズ [m]=',DX
WRITE(6,'(a30,e10.5)')'Y方向のセルサイズ [m]=',DY
WRITE(1101,'(a30,e10.5)')'X方向のセルサイズ [m]=',DX
WRITE(6,'(a30,e10.5)')'時間ステップ[s]=',DT
WRITE(1101,'(a30,e10.5)')'時間ステップ[s]=',DT
WRITE(6,'(a30,e10.5)')'1秒当たりのステップ回数 =',1/DT
WRITE(1101,'(a30,e10.5)')'1秒当たりのステップ回数 =',1/DT
WRITE(6,'(a30,e10.5)')'真空中の誘電率 [F/m]=',E
WRITE(1101,'(a30,e10.5)')'真空中の誘電率 [F/m]=',E
WRITE(6,'(a30,e10.5)')'調べる電磁波の周波数[Hz]=',F
WRITE(1101,'(a30,e10.5)')'調べる電磁波の周波数[Hz]=',F
WRITE(6,'(a30,e10.5)')'1周期当たりのステップ回数 =',1/DT/F
WRITE(1101,'(a30,e10.5)')'1周期当たりのステップ回数 =',1/DT/F
WRITE(6,'(a30,e10.5)')'真空中の透磁率 [H/m]=',MU
WRITE(1101,'(a30,e10.5)')'真空中の透磁率 [H/m]=',MU
WRITE(6,'(a30,i5)')'X方向の分割数+1の値 =',NX
WRITE(1101,'(a30,i5)')'X方向の分割数+1の値 =',NX
WRITE(6,'(a30,i5)')'Y方向の分割数+1の値 =',NY
WRITE(1101,'(a30,i5)')'Y方向の分割数+1の値 =',NY
WRITE(6,'(a30,e10.5)')'円周率 =',PAI
WRITE(1101,'(a30,e10.5)')'円周率 =',PAI
WRITE(6,'(a30,e10.5)')'電磁波の角周波数 [rad/s] =',W
WRITE(1101,'(a30,e10.5)')'電磁波の角周波数 [rad/s] =',W
WRITE(6,'(a30,e10.5)')'真空中の光速[m/s] =',CV0
WRITE(1101,'(a30,e10.5)')'真空中の光速[m/s] =',CV0
WRITE(6,'(a30,e10.5)')'全ステップ回数 =',ITMAX
WRITE(1101,'(a30,e10.5)')'全ステップ回数 =',ITMAX
CLOSE(1101)
WRITE(6,'(a)')'何かキーを押してください'
pause
!--- 1-1.空間、時間に対して定数であるものの設定 ここまで-------------------
!--- 1-2.空間的には変数、時間的には定数であるものの設定--------------------
! 1-1に該当するものもあるが、揺れ動くものはすべてこちらにした。
! KNOWN(AI,J)を除く。
!--- 1-2-1. 仮設定 -----------------------------------------------------
DO 6010 J=1 , NY
DO 6010 AI=1 , NX
CEZLX(AI,J)=0.0e0 !EZを求める式に使用する係数
CEZLY(AI,J)=0.0e0 !EZを求める式に使用する係数
CHXLY(AI,J)=0.0e0 !HXを求める式に使用する係数
CHYLX(AI,J)=0.0e0 !HYを求める式に使用する係数
CEZ(AI,J)=0.0e0 !EZを求める式に使用する係数
C(AI,J)=0.0e0 !導電率
!金属部分については電界=0として別の場所で表現する。
!電界を隣の値から求めるときにCを使うが
!金属部分についてはそれをやらないので値は関係ない
!(0のままでも良い)。
EZDUM(AI,J)=1.0e0 !仮座標でのEZ
6010 CONTINUE
!ホーンの形を決める配列HORN_UP(AI)の初期化
DO AI=1,NX
HORN_UP(AI)=0
ENDDO
!ホーンの形を決める配列HORN_DOWN(AI)の初期化
DO AI=1,NX
HORN_DOWN(AI)=0
ENDDO
!ホーンの形を決める配列HORN_UP(AI)を計算で決定する
DO AI=451,551
HORN_UP(AI)=INT(0.2*AI+410.8)
ENDDO
!ホーンの形を決める配列HORN_DOWN(AI)を計算で決定する
DO AI=451,551
HORN_DOWN(AI)=INT(-0.2*AI+591.2)
ENDDO
!仮座標でのホーン部EZの設定(設定領域は 251<=AI,J<=751 とする)
DO AI=451,551
EZDUM(AI,HORN_UP(AI))=0.0e0
EZDUM(AI,HORN_DOWN(AI))=0.0e0
ENDDO
!--- 1-2-1. 仮設定 ここまで--------------------------------------------
!--- 1-2-2. 本設定 ----------------------------------------------------
!その他のパラメータの設定
DO 6020 J=1, NY
DO 6020 AI=1, NX
MEDIUM(AI,J)=1.0e0 !比誘電率(今回は誘電体はない)
CV(AI,J) = 1/(MEDIUM(AI,J)*E*MU)**0.5e0 !媒質中の光速 [m/s]
DA(AI,J)=C(AI,J)*DT/(2 * E * MEDIUM(AI,J)) ! 導電率0の部分では0になる
CEZ(AI,J)=(1 -DA(AI,J))/(1+DA(AI,J)) ! 導電率0の部分では1になる
CEZLX(AI,J)=DT/E/MEDIUM(AI,J)/(1+DA(AI,J))/DX
CEZLY(AI,J)=DT/E/MEDIUM(AI,J)/(1+DA(AI,J))/DY
CHXLY(AI,J)=DT/MU/DY
!P13(1.31)にある。磁性体があれば比誘電率を掛けた値をMUとして用いる
CHYLX(AI,J)=DT/MU/DX !同上
6020 CONTINUE
!ミラーの形を決める配列MIRROR(AI)の初期化
DO AI=1,NX
MIRROR(AI)=0
ENDDO
!ミラーの形を決める配列MIRROR(AI)を計算で決定する
DO AI=201,401
MIRROR(AI)=INT( ((AI-501)**2)/800+301 )
ENDDO
!--- 1-2-2. 本設定 ここまで ------------------------------------------
!--- 1-2.空間的には変数、時間的には定数であるものの設定 ここまで-----------
!--- 1-3.時間に対して変数であるものの初期値設定----------------------------
!--- 1-3-1.電磁場の初期値の設定 ----------------------------------------
!現時点での値
DO J=1 , NY
DO AI=1 , NX
HX(AI,J)=0.0e0 !磁場のX成分(0とする、以下同様)
HY(AI,J)=0.0e0 !磁場のY成分
EZ(AI,J)=0.0e0 !電場のZ成分
ENDDO
ENDDO
!過去の値1
!AI=1,NXの辺とその隣の辺(計4本の線)の1ターン、2ターン前のEZ
DO AI=1 , 4
DO J=1 , NY
EZX1(AI,J)=0.0e0
EZX2(AI,J)=0.0e0
ENDDO
ENDDO
!過去の値2
!J=1,NYの辺とその隣の辺(計4本の線)の1ターン、2ターン前のEZ
DO J=1 , 4
DO AI=1 , NX
EZY1(AI,J)=0.0e0
EZY2(AI,J)=0.0e0
ENDDO
ENDDO
!--- 1-3-1.電磁場の初期値の設定 ここまで--------------------------------
!--- 1-3-2.1ポイントモニタ用配列 EZ_MON の初期化-----------------------
DO K=1,10000
EZ_MON_1(K)=0.0e-0
EZ_MON_2(K)=0.0e-0
ENDDO
!--- 1-3-2.1ポイントモニタ用配列 EZ_MON の初期化 ここまで-------------
!--- 1-3-3. 経過時間 T の初期化 ----------------------------------------
T=0
!--- 1-3-3. 経過時間 T の初期化 ここまで-------------------------------
!--- 1-3.時間に対して変数であるものの初期値設定 ここまで------------------
!--- 1-4. メモデータを作る(本にはない)--------------------------------------
OPEN(1421,FILE='20100421_01_2ramda_SET_DATA_C.txt',STATUS='unknown')
WRITE(6,'(a)')'導電率C(AI,J)ファイルを作成します '
! WRITE(1421,'(a)')'導電率C(AI,J) ' matlabの関係で書かない
DO AI=1,NX,1
WRITE(1421,501) (C(AI,J),J=1,NY,1)
501 FORMAT( e10.2, 1000(2X, e10.2) )
ENDDO
CLOSE(1421)
WRITE(6,'(a)')'何かキーを押してください'
pause
!--- 1-4. メモデータを作る ここまで--------------------------------------
!=== 1. setup ここまで ======================================================
!=== 2. メインループ ========================================================
!--- 2-1. メインループの始まり--------------------------------------------
DO 6130 IT=1,ITMAX ! 計算のスタート
! 経過時間=(IT)*DT
!--- 2-1. メインループの始まり ここまで------------------------------------
!--- 2-2. 電磁場のEZの計算(本では 「 CALL E-field 」)---------------------
!(P15にある)
!AI,Jともに内側を全てスキャン
!---2-2-1. 本体の計算 --------------------------------------------------
DO J=2,NY-1
DO AI=2,NX-1
EZ(AI,J)=CEZ(AI,J)*EZ(AI,J)+CEZLX(AI,J)*(HY(AI,J)-HY(AI-1,J)) &
& -CEZLY(AI,J)*(HX(AI,J)-HX(AI,J-1))
ENDDO
ENDDO
!---2-2-1. 本体の計算 ここまで------------------------------------------
!--- 2-2-2. 境界(内部)の設定(本には明記されていない)------------------
!ホーン部(ダミー図形を(501,501)を中心としてTHETA度回転した図形を描く)
DO AIDUM=451,551
AI = INT( (AIDUM-501)*THETA1 +(HORN_UP(AIDUM)-501)*THETA2 +501 )
J = INT( (AIDUM-501)*THETA3 +(HORN_UP(AIDUM)-501)*THETA4 +501 )
EZ(AI,J)=0.0e0
AI = INT( (AIDUM-501)*THETA1 +(HORN_UP(AIDUM)+1-501)*THETA2 +501 )
J = INT( (AIDUM-501)*THETA3 +(HORN_UP(AIDUM)+1-501)*THETA4 +501 )
EZ(AI,J)=0.0e0
AI = INT( (AIDUM-501)*THETA1 +(HORN_DOWN(AIDUM)-501)*THETA2 +501 )
J = INT( (AIDUM-501)*THETA3 +(HORN_DOWN(AIDUM)-501)*THETA4 +501 )
EZ(AI,J)=0.0e0
AI = INT( (AIDUM-501)*THETA1 +(HORN_DOWN(AIDUM)-1-501)*THETA2 +501 )
J = INT( (AIDUM-501)*THETA3 +(HORN_DOWN(AIDUM)-1-501)*THETA4 +501 )
EZ(AI,J)=0.0e0
ENDDO
!波源((461,501)を(501,501)を中心としてTHETA度回転した点にとる)
AI = INT( (461-501)*THETA1 +(501-501)*THETA2 +501 )
J = INT( (461-501)*THETA3 +(501-501)*THETA4 +501 )
EZ(AI,J)=1.0e0*sin(W*T) ! 各ターンでSIN波波源を設定している
!パラボラ
! DO AI=201,401
! EZ(AI,MIRROR(AI))=0.0e0
! ! 電場が0となるように各ターンで修正する
! ENDDO
!--- 2-2-2. 境界(内部)の設定 ここまで -------------------------------
!--- 2-2. CALL E-field ここまで-------------------------------------------
!--- 2-3. 境界(周辺)の設定(本では「 CALL A.B.C. 」)---------------------
!吸収境界条件(P60)
!4辺のすぐ近くに誘電体はないとして式を立てる
!---2-3-1. AI=1,NXの辺での計算 ----------------------------------------
!本体の計算
J=2
EZ(1,J)=EZX1(2,J)+C1*(EZ(2,J)-EZX1(1,J))
EZ(NX,J)=EZX1(3,J)+C1*(EZ(NX-1,J)-EZX1(4,J))
J=NY-1
EZ(1,J)=EZX1(2,J)+C1*(EZ(2,J)-EZX1(1,J))
EZ(NX,J)=EZX1(3,J)+C1*(EZ(NX-1,J)-EZX1(4,J))
DO J=3,NY-2
EZ(1,J)=-EZX2(2,J)+C1*(EZ(2,J)+EZX2(1,J)) &
& +C2*(EZX1(1,J)+EZX1(2,J)) &
& +C3*(EZX1(1,J+1)-2.0e-0*EZX1(1,J)+EZX1(1,J-1) &
& +EZX1(2,J+1)-2.0e-0*EZX1(2,J)+EZX1(2,J-1))
EZ(NX,J)=-EZX2(3,J)+C1*(EZ(NX-1,J)+EZX2(4,J)) &
& +C2*(EZX1(4,J)+EZX1(3,J)) &
& +C3*(EZX1(4,J+1)-2.0e-0*EZX1(4,J)+EZX1(4,J-1) &
& +EZX1(3,J+1)-2.0e-0*EZX1(3,J)+EZX1(3,J-1))
ENDDO
!過去の値の更新
DO J=2,NY-1
EZX2(1,J)=EZX1(1,J)
EZX2(2,J)=EZX1(2,J)
EZX2(3,J)=EZX1(3,J)
EZX2(4,J)=EZX1(4,J)
EZX1(1,J)=EZ(1,J)
EZX1(2,J)=EZ(2,J)
EZX1(3,J)=EZ(NX-1,J)
EZX1(4,J)=EZ(NX,J)
ENDDO
!---2-3-1. AI=1,NXの辺での計算 ここまで-------------------------------
!---2-3-2. J=1,NYの辺での計算 ----------------------------------------
!本体の計算
AI=2
EZ(AI,1)=EZY1(AI,2)+C1*(EZ(AI,2)-EZY1(AI,1))
EZ(AI,NY)=EZY1(AI,3)+C1*(EZ(AI,NY-1)-EZY1(AI,4))
AI=NX-1
EZ(AI,1)=EZY1(AI,2)+C1*(EZ(AI,2)-EZY1(AI,1))
EZ(AI,NY)=EZY1(AI,3)+C1*(EZ(AI,NY-1)-EZY1(AI,4))
DO AI=3,NX-2
EZ(AI,1)=-EZY2(AI,2)+C1*(EZ(AI,2)+EZY2(AI,1)) &
& +C2*(EZY1(AI,1)+EZY1(AI,2)) &
& +C3*(EZY1(AI+1,1)-2.0e-0*EZY1(AI,1)+EZY1(AI-1,1) &
& +EZY1(AI+1,2)-2.0e-0*EZY1(AI,2)+EZY1(AI-1,2))
EZ(AI,NY)=-EZY2(AI,3)+C1*(EZ(AI,NY-1)+EZY2(AI,4)) &
& +C2*(EZY1(AI,4)+EZY1(AI,3)) &
& +C3*(EZY1(AI+1,4)-2.0e-0*EZY1(AI,4)+EZY1(AI-1,4) &
& +EZY1(AI+1,3)-2.0e-0*EZY1(AI,3)+EZY1(AI-1,3))
ENDDO
!過去の値の更新
DO AI=2,NX-1
EZY2(AI,1)=EZY1(AI,1)
EZY2(AI,2)=EZY1(AI,2)
EZY2(AI,3)=EZY1(AI,3)
EZY2(AI,4)=EZY1(AI,4)
EZY1(AI,1)=EZ(AI,1)
EZY1(AI,2)=EZ(AI,2)
EZY1(AI,3)=EZ(AI,NY-1)
EZY1(AI,4)=EZ(AI,NY)
ENDDO
!--- 2-3. 境界(周辺)の設定(本では「 CALL A.B.C. 」) ここまで------------
!--- 2-4. 半時間ステップだけ時間を進める------------------------------------
T=T+DT/2
! WRITE(6,'(a,e15.7)')'T=',T !画面での確認
!--- 2-4. 半時間ステップだけ時間を進める ここまで---------------------------
! --- 2-5. 電磁場の磁場成分HX,HYの計算(「 CALL H-field 」)----------------
!--- 2-5-1. 境界(内部)の設定(本には明示していない)------------------
! HX(AI,300)=-EZ(AI,300)/120/PAI
!真空中の特性インピ-ダンスを用いて磁場も決定している(?)
!波源部分の磁界
! 進行方向のわかった波では付けると精度は上がるはずだが
! 点波源ではいらないはずである
!--- 2-5-1. 境界(内部)の設定 ここまで--------------------------------
!--- 2-5-2. 本体の計算 -------------------------------------------------
!HXの計算(P15)
DO J=1,NY-1
DO AI=2,NX-1
HX(AI,J)=HX(AI,J)-CHXLY(AI,J)*(EZ(AI,J+1)-EZ(AI,J))
ENDDO
ENDDO
!HYの計算
DO J=2,NY-1
DO AI=1,NX-1
HY(AI,J)=HY(AI,J)+CHYLX(AI,J)*(EZ(AI+1,J)-EZ(AI,J))
ENDDO
ENDDO
!--- 2-5-2. 本体の計算 ここまで----------------------------------------
!--- 2-5. 電磁場の磁場成分HX,HYの計算(「 CALL H-field 」) ここまで-------
WRITE(6,*)'IT=',IT ! ターン数の画面表示
!--- 2-6. 振幅データの作成(本にはない)--------------------------------------
IF((ITMAX-IT).LT.100) THEN
DO 6120 J=1,NY
DO 6120 AI=1,NX
! ラスト100ターンでの最大値を取る
IF(ABS(EZ(AI,J)).GE.AMPEZ(AI,J)) THEN
AMPEZ(AI,J)=ABS(EZ(AI,J)) ! AMPEZ(AI,J)=EZの振幅
ENDIF
6120 CONTINUE
ENDIF
!--- 2-6. 振幅データの作成 ここまで----------------------------------------
!--- 2-7. 半時間ステップだけ時間を進める------------------------------------
T=T+DT/2
!--- 2-7. 半時間ステップだけ時間を進める ここまで---------------------------
!--- 2-8. 各ステップ終了時のEZ(AI,J)を 1000 3000 ファイルに出力 ----------
!オプション
!計算結果出力ファイル 1000 3000 を開く
!(各ステップの結果を全ポイント記録するために開いておく)
!(3次元配列は事実上ムリ)
IF(IT==1000)then
OPEN(14,FILE='20100421_01_2ramda_1000_DATA.txt',STATUS='unknown')
! WRITE(14,'(a,2x,i4)')'IT=',IT matlabの関係で書かない
DO AI=1,NX,1 !間引きせずに書き込む
WRITE(14,504) (EZ(AI,J),J=1,NY,1)
504 FORMAT( e10.2, 1000(2X, e10.2) )
ENDDO
CLOSE(14)
ENDIF
IF(IT==3000)then
OPEN(15,FILE='20100421_01_2ramda_3000_DATA.txt',STATUS='unknown')
! WRITE(15,'(a,2x,i4)')'IT=',IT
DO AI=1,NX,1 !間引きせずに書き込む
WRITE(15,504) (EZ(AI,J),J=1,NY,1)
ENDDO
CLOSE(15)
ENDIF
!--- 2-8. 各ステップ終了時のEZ(AI,J)を 1000 3000 ファイルに出力
! ここまで --------------------------------------
!---2-9. 1ポイントモニター ------------------------------------------------
!1点でのEZ(AI,J)の値をすべての時間ステップで記録する
!適切な全体のステップ数を求めるのが目的
!記録(800,500)でのEZをモニターする
EZ_MON_1(IT)=EZ(800,500)
! EZ_MON_2(IT)=EZ(499,499)
!---2-9. 1ポイントモニター ここまで---------------------------------------
!--- 2-10. メインループの終わり-------------------------------------------
6130 CONTINUE
!--- 2-10. メインループの終わり ここまで----------------------------------
!=== 2. メインループ ここまで ================================================
!=== 3. ファイル出力(本にはない) ==============================================
!--- 3-1. AMPEZ(AI,J)の出力 -----------------------------------------------
!計算結果出力ファイル OUTPUT_AMPEZ_DATA を開く
OPEN(16,FILE='20100421_01_2ramda_OUTPUT_AMPEZ_DATA.txt',STATUS='unknown')
!算出されたEZ振幅マップAMPEZ(AI,J)を出力する
WRITE(6,'(a)')'AMPEZ(AI,J)を出力します'
! WRITE(16,'(a)')'AMPEZ(AI,J)' matlab処理の関係で書かない
DO AI=1,NX,1 !間引きせずに書き込む
WRITE(16,505) (AMPEZ(AI,J),J=1,NY,1)
505 FORMAT( e10.2, 1000(2X, e10.2) )
ENDDO
CLOSE(16) ! OUTPUT_AMPEZ_DATA ファイルを閉じる
!--- 3-1. AMPEZ(AI,J)の出力 ここまで---------------------------------------
!--- 3-2. 最後のEZ(AI,J)の出力 -----------------------------------------------
!計算結果出力ファイル OUTPUT_AMPEZ_DATA を開く
OPEN(17,FILE='20100421_01_2ramda_OUTPUT_LAST_EZ_DATA.txt',STATUS='unknown')
!算出されたEZ振幅マップAMPEZ(AI,J)を出力する
WRITE(6,'(a)')'最後のEZ(AI,J)を出力します'
! WRITE(16,'(a)')'AMPEZ(AI,J)' matlab処理の関係で書かない
DO AI=1,NX,1 !間引きせずに書き込む
WRITE(17,508) (EZ(AI,J),J=1,NY,1)
508 FORMAT( e10.2, 1000(2X, e10.2) )
ENDDO
CLOSE(17) ! LAST_EZ_DATA ファイルを閉じる
!--- 3-2. 最後のEZ(AI,J)の出力 ここまで---------------------------------------
!--- 3-3. EZ_MON_1(10000)の出力 ---------------------------------------------
!計算結果出力ファイル OUTPUT_EZ_MON_1_DATA を開く
OPEN(18,FILE='20100421_01_2ramda_OUTPUT_EZ_MON_1_DATA.txt',STATUS='unknown')
!EZ_MON(10000)を出力する
WRITE(6,'(a)')'EZ_MON_1(10000)を出力します'
! WRITE(18,'(a)')'EZ_MON_1(10000)' matlab処理の関係で書かない
DO K=1,ITMAX
WRITE(18,'(i4)') K
WRITE(18,506) EZ_MON_1(K)
506 FORMAT( e10.2 )
ENDDO
CLOSE(18) ! OUTPUT_EZ_MON_1_DATA ファイルを閉じる
!--- 3-3. EZ_MON_1(10000)の出力 ここまで-------------------------------------
!=== 3. AMPEZ(AI,J)のファイル出力(本にはない) ここまで ======================
Pause
STOP
END
! 全プログラム終了