C ''の部分を自分で埋めてプログラムを完成してください。 C PARAMETER文で定数Gを宣言する。 C 定数Gは重力加速度を表す。 PARAMETER (G=9.81) C PARAMETER文で定数DTとIMAXを宣言する。 C 定数DTは時間間隔、定数IMAXは時間積分の回数を表す。 PARAMETER (DT=0.01,IMAX=500) C 入力を求めるメッセージを標準出力に書き出す。 WRITE(6,*) 'U0, W0?' C READ文で入力値を読みこむ。 READ(5,*) U0,W0 C 水平速度U、鉛直速度W、水平座標X、鉛直座標Zに初期値を代入する。 C UにU0、WにW0、XとZに0.を代入する。 U = U0 W = W0 X = 0. Z = 0. C ファイルを開く。 C 機番は10以降の番号を指定する。 C STATUSは書き出しの場合は'UNKNOWN'を指定する。 C FORMはテキストファイルの場合は'FORMATTED'を指定する。 OPEN(10,FILE='output.txt',STATUS='UNKNOWN', + FORM='FORMATTED') C 水平座標Xと鉛直座標Zの初期値を機番10で指定されたファイルに書き出す。 C 機番10を指定する。 C 書式は'(1X,F9.3,1X,F9.3)'を指定する。 C '1X'は1文字の空白、 C 'F9.3'は全体が9ケタで小数点以下が3ケタの実数という意味である。 WRITE(10,'(1X,F9.3,1X,F9.3)') X,Z C ==== ここから1回目の時間積分 ==== C 差分化された運動方程式にしたがって、 C U+、W+、X+、Z+を計算する。 C ここでは、オイラー法によって、U、W、X、Zから、 C U+、W+、X+、Z+を計算する点に注意する。 UP = WP = XP = ZP = C U、W、X、Zの値をU-、W-、X-、Z-に、 C U+、W+、X+、Z+の値をU、W、X、Zに代入して、 C 時間ステップをひとつ進める。 UM = WM = XM = ZM = U = W = X = Z = C 水平座標Xと鉛直座標Zの値を機番10で指定されたファイルに書き出す。 C 機番10を指定する。 C 書式は'(1X,F9.3,1X,F9.3)'を指定する。 C '1X'は1文字の空白、 C 'F9.3'は全体が9ケタで小数点以下が3ケタの実数という意味である。 WRITE(10,'(1X,F9.3,1X,F9.3)') , C ==== ここまで1回目の時間積分 ==== C ==== ここから2回目以降の時間積分 ==== C ここから時間積分のためのDOループが始まる。 C (IMAX-1)回だけ反復する。 DO 11 I=1,IMAX-1 C 差分化された運動方程式にしたがって、 C U+、W+、X+、Z+を計算する。 C ここでは、リープフロッグ法を用いる点に注意する。 UP = WP = XP = ZP = C U、W、X、Zの値をU-、W-、X-、Z-に、 C U+、W+、X+、Z+の値をU、W、X、Zに代入して、 C 時間ステップをひとつ進める。 UM = WM = XM = ZM = U = W = X = Z = C 水平座標Xと鉛直座標Zの値を機番10で指定されたファイルに書き出す。 C 機番10を指定する。 C 書式は'(1X,F9.3,1X,F9.3)'を指定する。 C '1X'は1文字の空白、 C 'F9.3'は全体が9ケタで小数点以下が3ケタの実数という意味である。 WRITE(10,'(1X,F9.3,1X,F9.3)') , C ここでDOループ11が終了する。 11 CONTINUE C ==== ここまで2回目以降の時間積分 ==== C ファイルを閉じる。 CLOSE(10) STOP END