! -----------------------------------------------| ! 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 ! 全プログラム終了