LoginSignup
0
0

fortranでは「singletonブジェクト指向プログラミング」がよい。fortran moduleの使い方を2種類に限定すること

Posted at

fortran ではシングルトン−オブジェクト指向プログラミングを志向すべきであり、
そのクラス=インスタンスにmoduleを使うことになる。
「プログラムの核心はモジュール内サブルーチン(メソッド)にある。モジュール内サブルーチンは他のモジュールのモジュール変数(+ファイル読み込みデータ)からモジュール内のモジュール変数をallocateして作ること」である。

この考え方で言えばモジュールには主に2種類の使い方しかない。

その1:複数のサブルーチンを取りまとめる。

複数のサブルーチンがcall-caller treeで結びついているときにその親玉(複数ありえる)を中心に一つのモジュールに入れる。publicな関数を指定する。原則的にモジュール変数はつかわないこと(サブルーチンの間のデータのやり取りが見えなくなる)。useしてcallすることで(基本的に必ずonlyをつける)、コンパイラが呼び出し側との間の変数の整合性チェックができる(optional変数、名前結合などでは必須)。

その2:出力変数をモジュール変数とする。

サブルーチンを複数含んでおり、サブルーチンの出力変数をモジュール変数とする場合。この場合、サブルーチンの出力はモジュール変数で返す。サブルーチンは入力引数のみを取りモジュール内の出力変数を書くことになる。出力変数はprotectすること。他のモジュールの変数を見るときにはuse onlyする。

そもそもfortranで書けるのはここまで。大きなプログラムをfortranで書くべきでない。

(その3:typeの取りまとめなど)

そもそもtypeは極力使わないのがよいと考えているが私はpointer arrayを作る方法(原子ごとに長さの違う配列をつくるなど)がtypeの配列を作る以外に思いつかないのでしかたなく用いている。
https://github.com/tkotani/ecalj/blob/master/SRC/subroutines/m_struc_def.f90
(type s_specは消したいがまだ消せてない)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0