gtool4/Fortran 90 リファレンス - ライブラリ概観
2000年11月27日 豊田英司
gtgraph, gtdata ライブラリは独自のオブジェクト指向スタイルで記述されています。
クラスは構造型として表現されます。
メソッドはサブルーチンで、名前の衝突を避けるために総称宣言されています。
動的多相性はスーパークラスをサブクラス構造型へのポインタ群をまとめた構造型とすることで実現しています。
実例を示しましょう。
データアクセスをするには必ず変数を開かなくてはなりません。変数を開くというのを Fortran ではどう書くかというと、たとえば
use gtool type(GT_VARIABLE):: var type(VARYING_STRING):: filename ... filename = "gtool.nc" call Open(var, filename)
のようになります。ある gtool 変数というのは type(GT_VARIABLE) 型の (Fortran の) 変数であらわされます。これを Open というサブルーチンに突っ込むと、変数が開かれるわけです。ではこの Open の実体はどこにあるかというと、gtdata_generic モジュールにその手がかりが書かれています。
! 一部省略があります
interface open
subroutine GTVarOpen(var, url, writable, err)
type(GT_VARIABLE), intent(inout):: var
type(VARYING_STRING), intent(in):: url
logical, intent(in), optional:: writable
logical, intent(out), optional:: err
end subroutine
subroutine GTVarOpenByDimOrd(dimvar, var, dimord, ount_compact, err)
type(GT_VARIABLE), intent(inout):: dimvar
type(GT_VARIABLE), intent(in):: var
integer, intent(in):: dimord
logical, intent(in), optional:: count_compact
logical, intent(out), optional:: err
end subroutine
end interface
ここで open というインターフェイスは GTVarOpen と GTVarOpenByDimOrd という2つのサブルーチンが提供するのであるといっています。上の例をコンパイルすると、単に Open と書いてあるところでコンパイラが引数リストに合う GTVarOpen を選択してくれるのです。GTVarOpen については別に書いたのでそちらを見てくださいね。
Fortran 90 言語では Open のような interface 文に書かれている名前を総称名、GTVarOpen などのような本当の名前を個別名といいます。引数の型の違うサブルーチンは同じ総称名を持つことができます。同様に、引数の型の違う関数は同じ総称名を持つことができます。gtool4/Fortran 90 ではこの総称名というメカニズムを使って多数のサブルーチンや引数を整理しています。
動的多相性をポインタで実現するアイデアは V.K.Decyk et al. (1998) から得たものです(自分で思いついたのかもしれないが今や経緯が思い出せない)。これによって gtgraph 層はすべて GT_DEVICE と GT_OBJECT の操作であるかのように利用できますし、gtdata 層はすべて GT_VARIABLE の操作であるかのように利用できます。
ライブラリのユーザが目にする可能性のある構造型は以下のとおりです。
| パッケージ | 型名 | 内容 |
|---|---|---|
| gtgraph | GT_DEVICE | 図形出力デバイス |
| GT_OBJECT | GT_FRAME, GT_FIGURE, GT_CONTOURS, GT_LINE, GT_AXIS, GT_VARIABLE を包含する「もの」 | |
| GT_FRAME | 枠 (印刷時のページや画面表示時のウィンドウをあらわす) | |
| GT_FIGURE | 図 | |
| GT_CONTOURS | 等値線群 | |
| GT_LINE | 線グラフ | |
| GT_AXIS | 座標軸 | |
| gtdata | GT_VARIABLE | 変数 (ユーザ向けのインターフェイス、現状では AN_VARIABLE しか包含していないが、拡張される予定) |
| an | AN_VARIABLE | netCDF 変数 |
| gr | GR_VARIABLE | GrADS 格子点形式の変数 (サポート予定) |
| dc-isovst | STRING_LIST | 可変長の文字列の可変長のリスト |
| VARYING_STRING | 可変長の文字列 |
| 総称名 | 関数結果の型 空欄は サブルーチン |
機能 |
|---|---|---|
| Attr_Next | 変数属性の列挙 | |
| Attr_Rewind | 変数属性列挙の初期化 | |
| Attr_True | logical | 変数属性を論理型として読み取り |
| Bind | オブジェクト(第二引数)をオブジェクト(第一引数)の一部にする | |
| Clear | 初期化 | |
| Close | Open したものの終了処理 | |
| Del | 変数の削除 (実装予定) | |
| Del_Attr | 変数属性の削除 | |
| Get, Get_Line | ファイル入力 | |
| Get_Attr | 変数属性の読み取り | |
| Inquire | 変数または属性の外部型の問い合わせ | |
| Load | オブジェクトを変数から読み取る | |
| Name | VARYING_STRING | ファイル名を含まない変数名 |
| Open | 初期化、Close をしなければならない | |
| Option | オブジェクトに何らかのメッセージを伝える | |
| Put_Attr | 変数属性の書き出し | |
| Put, Put_Line | ファイル出力 | |
| Save | オブジェクトを変数に保存 | |
| Type | VARYING_STRING | オブジェクトとしての変数の種別 |
| URL | VARYING_STRING | Open に使える変数名 |
直接リファレンスをみてください。
(ここに列挙の予定)