Fortran 標準コーディングルール

2005年12月1日改訂


目次

1.はじめに
2.スタイルルール(推奨リスト)
3.Fortran90の機能を生かして
4.禁止事項
5.現段階では規定していないが重要なもの
付録 気象予報モデル・データ同化プログラムのためのコメント
参考文献
変更履歴


1.はじめに

 ヨーロッパや米国の気象機関では、プログラムのソースコードを理解しやすく 管理しやすいものにし、またソースコードの交換を容易にするため、プログラミ ングルールが作成されている。日本でもこれらを参考にして、気象庁数値予報課 と気象研究所気候研究部・予報研究部が中心となって日本版標準コーディングル ールを作成している。その目的は、プログラミング・スタイルを統一することに より、可読性と移植性を高め、維持管理を容易にすることである。この目的に賛 同する開発担当者は、このルールに従いプログラムを作成し、同時にこのルール を改善するよう努力してほしい。

 このプログラミングルールではFortran90 の使用を前提としている。Fortran 90 は、 FORTRAN77 と互換性を保ちながら様々な機能を付加したもので、従来と比 較して多くの点で改良されている。最新の JIS 規格は Fortran 95 であるが、 Fortran 90 しか使えない環境が依然多い状況であると思われるので、Fortran 95 の新機能は当面使わないことを推奨する。

 対象とするプログラムとして、気象予報モデルとデータ同化モデルを想定して はいるが、高速で実行する必要がある大規模プログラムを多人数で共同開発する 場合には、異分野でも役に立つと考えている。

 一部のルールについては断定的に記述していない部分がある。今後 Fortran 90 についてより多くの経験をつむことにより、今後の改訂版では追加・削除・変更 されることを了解していただきたい。

2.スタイルルール(推奨リスト)

3.Fortran90の機能を生かして

3.1 モジュールの使い方

3.1.1 モジュールの3つの使用方法

 モジュールは Fortran90 の新しい機能のうち、最も重要な機能の1つである。 しかし、これを乱用すると分かりにくいプログラムになってしまう。(例えば、 モジュールの共有変数の値は、そのモジュール外のいろいろなサブルーチンから 自由に変更可能であるが、その自由を認めると、その共有変数がどこでどういう タイミングで変更されるのか理解が難しいプログラムになってしまう。)
 そこで、プログラムを分かりやすいものにするため、モジュールの使用方法を 以下の3つの類型に限定する。

3.1.2 定数参照型モジュール

 いろいろなサブルーチンで使用する定数を、定数参照型モジュールにまとめ る。include と異なり、use prm, only : imax などと使用したいパラメータ だけ use できる。また、この場合、prm に imax の宣言がなければコンパイ ル時にエラーが発生してくれて、親切である。

 定数参照型モジュール内の定数の値は、コンパイル時に読み込まれるので、コ ンパイラが最適化を行いやすくなる。実行時に値を変更することは、もちろんで きない。

3.1.3 変数参照型モジュール

 いろいろなサブルーチンで使用する変数を、変数参照型モジュールにまとめる ことができる。

 変数参照型モジュール内の共有変数の値の設定・変更は、同じモジュール内の サブルーチンでしか行ってはいけない。外部からは値を参照するのみにする。

 変数参照型モジュールの共有変数は、プログラム実行時に最初に一度だけ値を 設定し、それ以後変更しないのが理想である。値の変更がある変数については、 変数参照型モジュールではなく、引数でサブルーチンに渡す方がプログラムが分 かりやすくなる場合が多いであろう。

3.1.4 パッケージ型モジュール

 パッケージ型モジュール内の共有変数や局所サブルーチンにはprivate 属性を つけ、モジュール内でのみ使用し外部から直接使用しないようにする。外部との やりとりは、初期化サブルーチンと実行サブルーチンだけを通じて行う。

 初期化サブルーチンで共有変数の初期値の設定を行う。

 実行サブルーチンはパッケージ型モジュール内に1個もしくは複数個あり、パ ッケージ型モジュールのメインの部分である。引数を通じて外部からデータを入 力し、計算を行い、引数を通じて外部に必要なデータを出力する。

 パッケージ型モジュール内でのみ使用する予報変数をモジュール内の共有変数 にし、外部から隠蔽する。パッケージ型モジュール内でのみ使用するサブルーチ ンを局所サブルーチンにし、これも外部から隠蔽する。初期化サブルーチンと実 行サブルーチンのインターフェースのみを外部に公開する。

 このようにして個々のモジュールの独立性を高めることにより、プログラム全 体の構造が分かりやすくなり、多人数で大規模なプログラムの共同開発を行うこ とが容易になる。

3.1.5 モジュールの階層構造

 上の階層のモジュールが下の階層のモジュールをuseし使用する形になる。コン パイル時には、下の階層のモジュールから順にコンパイルしなければいけない。
 サブルーチンはモジュールに属するようにする。サブルーチンの属するモジュ ールを use してからでないとそのサブルーチンを使用できなくなるが、コンパ イラがコンパイル時に引数の型が一致しているかどうかチェックを行ってくれる というメリットがある。これによりデバッグが容易になる。

3.2 動的割り付け

 サブルーチン内のワーク的変数を動的にメモリに割り付けることにより、プロ グラム作成者はワーク的変数の管理から開放され、メモリを有効利用することが できる。また実行時に配列の大きさを変更できるので、解像度に依存しないプロ グラムが作成できる。

 上の例で、自動配列は自動的にサブルーチンの初めにメモリに割り付けられ、 サブルーチンの終わりにメモリを解放する。allocatable 配列では、allocate 文、deallocate 文で明示的に行う。

 自動配列はメモリのスタック領域を使用する場合が多く、ヒープ領域を使用す る場合が多いallocatable 配列より自動配列の方が割付を高速に行えることが多 い。しかし、使用可能なスタックのサイズに制限がある場合があり、自動配列で 使用できるメモリが制限される場合がある。(OS・コンパイラによる。)

4.禁止事項

4.1 記憶列結合

4.2 新機能のうち冗長なもの

4.3 冗長な旧機能

4.4 廃止予定事項

4.5 その他

5.現段階では規定していないが重要なもの

付録 気象予報モデル・データ同化プログラムのためのコメント

 ここでは、一般的に禁止あるいは非推奨事項とはしないが、気象予報モデル・ データ同化プログラムのために特記すべき事項を記述する。「5.現段階では 規定しない」事項にも言及している。

参考文献


変更履歴(誤字脱字の修正等は含まれません)


本ルールは気象庁の数値モデル開発に携わる有志によりとりまとめられたものである。