gt4f90io リファレンスマニュアル

gt4_history

【gtool4 データ入出力用 F90 インターフェース】

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
  •    [変数入力 (ポインタ配列)]

    構造体

    GT_HISTORY

    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

    GT_HISTORY_AXIS

    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'

    GT_HISTORY_VARINFO

    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'

    GT_HISTORY_ATTR

    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 type

    attrname には属性の名前を、attrtype には属性の型を与えます。 それ以下の変数にはそれぞれ attrtype に与えられた型に応じて 値を与えます。

    attrtypearray有効になる変数
    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/)
             :                 :