FORTRAN771977年に標準化。if/then/else広まったFortran901991年に標準化。大幅な改訂Fortran95F90からのマイナーバージョンアップFortran90はFORTRAN77とは大きく違う。違う言語と考えるべき。計算速度が速いスーパーコンピューティングは速さが命。C/C++でもFortranと同じくらい速いコードは書けるが、遅いコードも書けてしまう。言語としての自由度が高いために、コンパイラが困る。最適化ができなくなる。Tran-slator数値計算ライブラリの抱負な蓄積。↑Legacyな人間は負の遺産。『FORTRAN77に何の不満もない。これでxx年やってきた。・・・時代に33年(2010-1977)遅れている。world.\n");}である。Fortran90/95ではこうなる。hello_worldこのようにほとんど同じである。nameとして宣言する。noneの意味は後述。Fortran90/95では標準入出力機能は言語に組み込まれている(ヘッダファイルをインクルードする必要はない(そもそもヘッダファイルというものがない))。行末にセミコロン不要。文字列はダブルクォーテーションマーク(")で囲む。(C言語と同じ)シングルクウォーテーションマーク(')でも同じ意味。ファイル名hello_world.f95として保存せよ。コマンドでファイルを確認せよ。hello_world.f95実行せよ。コンパイル&実行せよ。†まずはC言語の復習も兼ねて、線形合同法による乱数生成プログラムのC言語版を見てみよう。次にFortran90/95言語で同じことをするコードを見てみよう。random_numbermoduleはデータと関数をひとまとめにしたもの。コンパイル&実行せよ。以下全てFORTRAN66/77と誤解している。変数名は6文字までなんでしょう?・・・そんなことはありません。ソースコードは全部大文字で書くんでしょう?・・・それも可能ですが、わざわざそんな読みにくいことをする必要はありません。ソースコードは固定形式(7列目から72列目まで)なんでしょう?・・・そんなことはありません。構造体がないんでしょう?・・・あります。ポインタがないんでしょう?・・・あります。使う必要はありませんが。演算子を自分で定義することができなんでしょう?・・・できます。関数や演算子の多重定義ができなんでしょう?・・・できます。再帰呼び出しができなんでしょう?・・・できます。関数とデータをまとめてひとかたまりにする(クラス化する)ことなんてできないんでしょう?・・・できます。上のサンプルプログラムで使ったmoduleがそれです。情報の隠蔽(カプセル化)ができないんでしょう?・・・できます。バグの入りにくいコードを書くためには不可欠な機能である。上のサンプルプログラムにカプセル化を施したコードを下に示す。冒頭近くに3行ほど追加しただけである。諸君は既にJavaを知っているから、この3行の意味は明白であろう。数値演算や計算機シミュレーションに適した言語である。スーパーコンピュータ向けの言語としては最適。オブジェクト指向プログラミングや並列計算機への対応も意識された言語である。これらの意味を納得できるようになることが目標。部屋の中の温度場の分布から平均気温を求めよう。f(nx,ny,nz)で表す。nzは実行時まで不定とする。全ての格子点(i,j,k)上でのfの値を足して格子点の総数で割ればよいものとする。その平均値を返す関数を作ろう。↑Fortran90/95ではこう書ける。†このようにわずか4行で書ける。Fortran90/95言語にもともと含まれている関数である。上の関数をC言語で作れ。行列のかけ算のためにFortran90/95ではmatmulという組み込み関数が用意されている。行列の転置をとる組み込み関数transposeも用意されている。matmul(transpose(A),B)と一行で書ける。行列の足し算も簡単である。コンパイル&実行せよ。級数の最初の1000項の和を求めるプログラムも、式をそのまま書けばいい。Translation。コンパイル&実行せよ。上の例では第1行目から第1000項目までの和をとっていた。第50項目から第90行目までの和が欲しければ以下のようにすればよい。x(50:90)などは部分配列と呼ぶ。部分配列も含めてFortran90/95には配列を扱うための便利な機能が多数用意されている。配列機能については次回詳しく解説する。空間中に分布する磁場(3成分ベクトル場)の全磁気エネルギーはで与えられる。全磁気エネルギーはと書ける。sum(Bx**2+By**2+Bz**2)とわずか1行で書ける。配列のサイズ(nx,ny,nz)が実行時まで不定でもよい。†Fortran90/95のソースコードではアルファベットの大文字と小文字は区別しない。同じ文字列変数の中では当然区別される。