2005/02/07 森川靖大
gt4_history モジュールは、数値モデルの結果を gtool4 形式で出力するためのインターフェースです。 おもに時間積分の結果を等時間間隔で出力することを念頭においてます。 このモジュールを用いれば、Fortran90 で書かれたプログラムの計算結果を gtool4 データ形式で出力することが簡単に実現できます。
なお、Fortran77 用のインターフェースとして、 HSPACKも用意しています。
以下の use 文を Fortran 90プログラムの先頭に入れて下さい。 下記の gt4_history モジュール内のサブルーチン と構造型変数が利用できるようになります。
use gt4_history
【出力用】 HistoryCreate [gtool4 データ出力用初期設定] HistoryAddVaribale [変数定義] HistoryCopyVaribale [変数定義 (別ファイルの変数コピー)] HistoryPut [変数出力] HistoryAddAttr [変数に属性付加] HistoryClose [終了処理] HistorySetTime [時刻指定] 【入力用】 HistoryGet [変数入力 (固定長配列用)] HistoryGetPointer [変数入力 (ポインタ配列)]
gt4_history モジュールでは、gtool4 netCDF データの入出力用の構造型変数 GT_HISTORYを用意しています。
type GT_HISTORY type(GT_VARIABLE), pointer:: dimvars(:) =>null() ! 次元変数 ID配列 logical, pointer:: dim_value_written(:) =>null() integer :: unlimited_index ! 無制限次元の添字 real :: origin, interval real :: newest, oldest type(GT_VARIABLE), pointer:: vars(:) =>null() ! 変数 ID 配列 integer, pointer :: growable_indices(:) =>null() ! 各変数の無制限次元の添字 integer, pointer :: count(:) =>null() end type例えば、Fortran 90 で以下のように定義します。 この構造型変数の利用法に関しては HistoryCreate を始めとする以下のサブルーチンを参照して下さい。
type(GT_HISTORY) :: hst_psi, hst_temp
gt4_history モジュールでは、gtool4 netCDF データの軸情報を格納するための構造型変数として GT_HISTORY_AXISを用意しています。
type GT_HISTORY_AXIS character(len = token) :: name ! 次元変数名 integer :: length ! 次元長 (配列サイズ) character(len = string):: longname ! 次元変数の記述的名称 character(len = string):: units ! 次元変数の単位 character(len = token) :: xtype ! 次元変数の型 end type例えば、Fortran 90 で以下のように定義、設定します。 この構造型変数の利用法に関しては HistoryCreate を参照して下さい。
type(GT_HISTORY_AXIS) :: axes(3) : : axes(1)%name = 'x' ; axes(1)%length = 3 ; axes(1)%longname = 'east' axes(1)%units = 'm' ; axes(1)%xtype = 'float' axes(2)%name = 'y' ; axes(2)%length = 6 ; axes(2)%longname = 'north' axes(2)%units = 'm' ; axes(2)%xtype = 'float' axes(3)%name = 't' ; axes(3)%length = 0 ; axes(3)%longname = 'time' axes(3)%units = 's' ; axes(3)%xtype = 'float'
gt4_history モジュールでは、gtool4 netCDF データの変数情報を格納するための構造型変数として GT_HISTORY_VARINFOを用意しています。
type GT_HISTORY_VARINFO character(len = token) :: name ! 変数名 character(len = token), pointer :: dims(:) ! 依存する次元 character(len = string) :: longname ! 変数の記述的名称 character(len = string) :: units ! 変数の単位 character(len = token) :: xtype ! 変数の型 end type例えば、Fortran 90 で以下のように定義、設定します。 この構造型変数の利用法に関しては HistoryAddVariable を参照して下さい。
type(GT_HISTORY_VARINFO) :: varinfo : : allocate( varinfo%dims(3) ) varinfo%name = 'u' varinfo%dims = (/'x', 'y', 'time'/) varinfo%longname = 'any quantity' varinfo%units = 'non-dimensional' varinfo%xtype = 'float'
gt4_history モジュールでは、gtool4 netCDF データの変数の属性情報を格納するための構造型変数として GT_HISTORY_ATTRを用意しています。
type GT_HISTORY_ATTR character(token) :: attrname ! 属性の名前 character(token) :: attrtype ! 属性の値の型 logical :: array = .false. ! 属性の値が配列かどうか character(string) :: cvalue ! 属性の値 (文字型変数) integer :: ivalue ! 属性の値 (整数型変数) real :: rvalue ! 属性の値 (単精度実数型変数) real(8) :: dvalue ! 属性の値 (倍精度実数型変数) logical :: lvalue ! 属性の値 (論理型変数) integer ,pointer:: iarray(:) =>null() ! 属性の値 (整数型配列) real ,pointer:: rarray(:) =>null() ! 属性の値 (単精度実数型配列) real(8) ,pointer:: darray(:) =>null() ! 属性の値 (倍精度実数型配列) end typeattrname には属性の名前を、attrtype には属性の型を与えます。 それ以下の変数にはそれぞれ attrtype に与えられた型に応じて 値を与えます。
attrtype array 有効になる変数 character, char, c
cvalue
integer, int, i
.false.
(デフォルト)ivalue
integer, int, i
.true.
iarray(:)
real, float, r, f
.false.
(デフォルト)rvalue
real, float, r, f
.true.
rarray(:)
double, dble, d
.false.
(デフォルト)dvalue
double, dble, d
.true.
darray(:)
logical, l
lvalue
iarray(:)
とivalue
のような配列と変数の 両方がある場合、論理変数array
が.true.
ならば 配列の方が優先されます。また、attrtype と対応しない変数には値を代入する必要はありません。 また、代入したとしても無効です。
定義、設定の例を以下に示します。 この構造型変数の利用法に関しては HistoryAddAttr を参照して下さい。
type(GT_HISTORY_ATTR) :: attrs(3) : : attrs(1)%attrname = 'topology' attrs(1)%attrtype = 'char' attrs(1)%cvalue = 'circular' attrs(2)%attrname = 'modulo' attrs(2)%attrtype = 'float' attrs(2)%rvalue = 360.0 attrs(3)%attrname = 'gt_graph_contours_levels' attrs(3)%attrtype = 'double' allocate( attrs(3)%rarray(5) ) attrs(3)%array = .true. attrs(3)%rarray = (/996.0, 1000.0, 1004.0, 1008.0, 1012.0/) : :