fcode-bungy.fを例にプログラムの構成と当面必要な文法を列挙する。
program fcodebungyは、最終行にあるend文と対にして使用される。 プログラムの始まりと終わりを示す。プログラムは通常、7カラム目以降-72カラム目 内に書くようにする。(自由書式形式が可能な場合もあるが、ここでは、伝統的 スタイルにて話を進める。)
implicit double precision (a-h,o-z)は、アルファベット文字のaからhとoからzの文字で始まる変数を倍精度実数と して使用することを示す。
implicit integer (i-n)は、iからnの文字で始まる変数を整数で使用することを示す。
parameter (nx=1000)あらかじめ定数を設定したい場合に使用し、プログラムが動作している間に 設定された数を変更しなくてもよいときに使用する。
integer i,nstep integer method変数
i,nstep,method
の3つを整数として使用すること宣言している。
dimension z(nx),v(nx),f(nx)1次元配列z,v,fの3つを使用することを宣言すると同時にその配列の 大きさnxを指定する。ここでは、その大きさは1000なっており、あらかじめ大きさ が確定している必要がある。nxの代わりに、 1000と書いても同じであるが、このようにしておけば、変更する場合に 何箇所も修正しないで済むので便利である。また、以下のように倍精度まで1行で 指定することもできる。
real*8 z(nx),v(nx),f(nx)8バイト(倍精度)の配列としてあらわに指定することができる。
open(unit=11,file='f-data.in')必要なデータをファイルから読み込んだり、計算したデータを書き込んだり するために必要なファイルを宣言している。ここでは、プログラムを読んで ゆくと(unit=11)は入力に、(unit=16)は、出力に使われている。
read(11,*) nstepファイル(装置番号11)から変数nstepを読み込んでいる。
write(06,*)' Finish to read the data, now !'モニター画面(装置番号06)に書き出している。ここでは、プログラムの制御 がここまで進んだことを知らせる意味があり、文字列を出力している。
g=9.80d0 z(1)=height等号の記号=は「代入」を意味している。(等しいという意味はないので注意が 必要である。) 1行目は、
g
という変数名の変数に倍精度数値9.80d0
を代入している。
裸で(倍精度)実数値を用いるときは、このようにd0
を付けて記述する。
2行目は、配列z
の1つ目のデータ格納場所にheight
に入っている
データを代入している。
if( n .gt. nx )then 実行文1 endif
3つの場合に、場合わけをして違う動作をするようにプログラムミングするには
if( n .eq. 100 )then 実行文1 elseif( n .eq. 200 )then 実行文2 else 実行文3 endifのようにする。elseifやelseとそれに伴う実行文は、省略することができる。 ifやelseifの次に現れている()の中には、条件文を書く。上記の場合は、 等しいかどうかを調べる条件文であり、
if( n .lt. 1 )then 実行文1 endifの場合は、1より小さいかどうかを調べる条件文である。
999 continuecontinue文は、何もしないことを実行する実行文である。fcode-bungy.fでは プログラムの終りの方で使用している。必ずしも必要ではないが、文番号を 付けるときに用いると動作の前後関係がはっきり分かるので、プログラムの 構造が分かりやすくなり、よく使用されるが、最近ではあまり使用されない 傾向にある。また、何もすることがなくても、文法上実行文が必要な 場合にも使用することができる。
do i=2,nstep . (必要な実行文を入れる) . enddoなどと使われている。ここでは、まず、iに2を入れて、実行文を実行し、 enddoに来たら、最初のdoのところへもどりiに1だけ大きい整数を入れて、 実行文を実行する。doのカウンタiがnstepまで同様な実行を繰り返し終えた らこのdoループの実行は終わりである。doループの中にさらにdoループが あるものや、doループの中にifプロックがあるものなど、ifブロックと doループを組み合わせることで、いろいろな計算が可能となる。