historygetattr.F90

Path: gtool/gtool_history/historygetattr.F90
Last Update: Tue Jun 02 00:17:21 +0900 2009

gtool4 netCDF データ中の属性の入力

Input attributes in gtool4 netCDF data

Authors:Yasuhiro MORIKAWA
Version:$Id: historygetattr.F90,v 1.2 2009-06-01 15:17:21 morikawa Exp $
Tag Name:$Name: gtool5-20090704 $
Copyright:Copyright (C) GFD Dennou Club, 2006. All rights reserved.
License:See COPYRIGHT

以下のサブルーチン, 関数は gtool_history から gtool_history_generic#HistoryGetAttr として提供されます.

Following subroutines and functions are provided as gtool_history_generic#HistoryGetAttr from gtool_history.

Methods

Included Modules

gtdata_types gtdata_generic dc_types dc_string dc_url dc_error dc_message dc_trace dc_present

Public Instance methods

Subroutine :
file :character(*), intent(in)
: netCDF ファイル名.
varname :character(*), intent(in)
: 変数名.
attrname :character(*), intent(in)
: 属性の名称.

"+" (プラス) を属性名の先頭につける場合には, 大域属性を取得します.

value :character(*), intent(out)
: 属性の値.
flag_mpi_split :logical, intent(in), optional
: MPI 使用時にこの引数に .true. を与えると, file 引数に "_rankXXXXXX" (X は [0-9] の数値で, ノード番号を指す) を付加したファイル名を各ノードで読み込みます. 例えば, file に "input.nc" を与えた場合. ノード 0 では "input_rank000000.nc", ノード 12 では "input_rank000012.nc" を読み込みます. デフォルトは .false. です.

When MPI is used, if ".true." is given, a filename that "_rankXXXXXX" (X is [0-9] that indicates node number) is added to file argument is loaded on each node. For example, "input.nc" is given to file, "input_rank000000.nc", "input_rank000012.nc" are loaded on node 0 and node 12. Default value is ".false.".

err :logical, intent(out), optional
: 例外処理用フラグ. デフォルトでは, この手続き内でエラーが 生じた場合, プログラムは強制終了します. 引数 err が与えられる場合, プログラムは強制終了せず, 代わりに err に .true. が代入されます.

Exception handling flag. By default, when error occur in this procedure, the program aborts. If this err argument is given, .true. is substituted to err and the program does not abort.

gtool4 データ内の変数の属性の取得

gtool4 データおよびそのデータ内の変数に設定されている属性を取得します。

属性名 attrname の先頭にプラス "+" を付加する 場合は、gtool4 データ自体の属性 (大域属性) として属性が取得されます。 この場合、varname は無視されますが、 その場合でも varname へはデータ内に存在する変数名を与えてください。

取得する属性が存在しない場合、以下の値が返ります。

character :"" (空文字)
real :netcdf_f77#NF_FILL_REAL
real(DP) :netcdf_f77#NF_FILL_REAL
integer :netcdf_f77#NF_FILL_INT

HistoryGetAttr は複数のサブルーチンの総称名です。value には いくつかの型を与えることが可能です。 下記のサブルーチンを参照ください。

[Source]

  subroutine HistoryGettAttrChar0( file, varname, attrname, value, flag_mpi_split, err )
    !
                        !
    !== gtool4 データ内の変数の属性の取得
    !
    ! gtool4 データおよびそのデータ内の変数に設定されている属性を取得します。
    !
    ! 属性名 *attrname* の先頭にプラス "<b><tt>+</tt></b>" を付加する
    ! 場合は、gtool4 データ自体の属性 (大域属性) として属性が取得されます。
    ! この場合、*varname* は無視されますが、
    ! その場合でも *varname* へはデータ内に存在する変数名を与えてください。
    !
    ! 取得する属性が存在しない場合、以下の値が返ります。
    !
    ! character :: "" (空文字)
    ! real      :: netcdf_f77#NF_FILL_REAL
    ! real(DP)  :: netcdf_f77#NF_FILL_REAL
    ! integer   :: netcdf_f77#NF_FILL_INT
    ! 
    ! *HistoryGetAttr* は複数のサブルーチンの総称名です。*value* には
    ! いくつかの型を与えることが可能です。
    ! 下記のサブルーチンを参照ください。
    !
                    
    !
    use gtdata_types, only: GT_VARIABLE
    use gtdata_generic, only: Get_Attr, Open, Close
    use dc_types, only: STRING, DP
    use dc_string, only: toChar, JoinChar
    use dc_url, only: GT_ATMARK, GT_COMMA, GT_EQUAL, UrlSplit, UrlMerge, GT_PLUS
    use dc_error, only: StoreError, DC_NOERR, NF_ENOTVAR, HST_EMPINOAXISDATA
    use dc_message, only: MessageNotify
    use dc_trace, only: BeginSub, EndSub
    use dc_present, only: present_and_true
    use dc_error, only: StoreError, DC_NOERR, GT_ENOTURL
    implicit none
    character(*), intent(in):: file
                                                  ! netCDF ファイル名.
                    
    character(*), intent(in):: varname
                                                  ! 変数名.
                    
    character(*), intent(in):: attrname
                                                  ! 属性の名称. 
                              !
                              ! "<b><tt>+</tt></b>" (プラス) 
                              ! を属性名の先頭につける場合には, 
                              ! 大域属性を取得します. 
                    
    character(*), intent(out):: value
                                                  ! 属性の値.
                              ! 
                    
    logical, intent(in), optional:: flag_mpi_split
                                                  ! MPI 使用時にこの引数に .true. を与えると, 
                              ! *file* 引数に "_rankXXXXXX" 
                              ! (X は [0-9] の数値で, ノード番号を指す) 
                              ! を付加したファイル名を各ノードで読み込みます. 
                              ! 例えば, *file* に "input.nc" を与えた場合. 
                              ! ノード 0 では "input_rank000000.nc", 
                              ! ノード 12 では "input_rank000012.nc"
                              ! を読み込みます. 
                              ! デフォルトは .false. です. 
                              !
                              ! When MPI is used, if ".true." is given, 
                              ! a filename that "_rankXXXXXX" 
                              ! (X is [0-9] that indicates node number) 
                              ! is added to *file* argument is loaded 
                              ! on each node. 
                              ! For example, "input.nc" is given to *file*, 
                              ! "input_rank000000.nc", "input_rank000012.nc"
                              ! are loaded on node 0 and node 12. 
                              ! Default value is ".false.".
                              ! 
                    
    logical, intent(out), optional:: err
                                                  ! 例外処理用フラグ. 
                              ! デフォルトでは, この手続き内でエラーが
                              ! 生じた場合, プログラムは強制終了します. 
                              ! 引数 *err* が与えられる場合, 
                              ! プログラムは強制終了せず, 代わりに
                              ! *err* に .true. が代入されます. 
                              !
                              ! Exception handling flag. 
                              ! By default, when error occur in 
                              ! this procedure, the program aborts. 
                              ! If this *err* argument is given, 
                              ! .true. is substituted to *err* and 
                              ! the program does not abort. 
                    
    type(GT_VARIABLE):: var
    character(STRING):: file_work, url
    integer:: stat
    character(STRING):: cause_c
    character(len = *), parameter:: subname = "HistoryGetAttrChar0"

    !

  continue
    call BeginSub(subname, 'file=<%c> varname=<%c> attrname=<%c>', c1=trim(file), c2=trim(varname), c3=trim(attrname) )
    stat = DC_NOERR
    cause_c = ''

    ! ファイル名の変更 (MPI 用)
    ! Change filename (for MPI)
    !
    file_work = file
    if ( present_and_true( flag_mpi_split ) ) file_work = file_rename_mpi( file_work )

    ! 変数 URL の作成
    ! Create variable URL
    !
    url = UrlMerge( file_work, varname )

    ! ファイルオープン
    ! File open
    !
    call Open( var, url, err = err )

    if ( present_and_true(err) ) then
      stat = GT_ENOTURL
      cause_c = url
      goto 999
    end if

    ! 属性の取得
    ! Get an attribute
    !
    call Get_Attr( var, attrname, value )

    ! ファイルオープン
    ! File open
    !
    call Close( var )

999 continue
    call StoreError(stat, subname, err, cause_c=cause_c)
    call EndSub(subname)
  end subroutine
Subroutine :
file :character(*), intent(in)
varname :character(*), intent(in)
attrname :character(*), intent(in)
value :real(DP), intent(out)
flag_mpi_split :logical, intent(in), optional
err :logical, intent(out), optional

[Source]

  subroutine HistoryGettAttrDouble0( file, varname, attrname, value, flag_mpi_split, err )
    !
                    
    !
    use gtdata_types, only: GT_VARIABLE
    use gtdata_generic, only: Get_Attr, Open, Close
    use dc_types, only: STRING, DP
    use dc_string, only: toChar, JoinChar
    use dc_url, only: GT_ATMARK, GT_COMMA, GT_EQUAL, UrlSplit, UrlMerge, GT_PLUS
    use dc_error, only: StoreError, DC_NOERR, NF_ENOTVAR, HST_EMPINOAXISDATA
    use dc_message, only: MessageNotify
    use dc_trace, only: BeginSub, EndSub
    use dc_present, only: present_and_true
    use dc_error, only: StoreError, DC_NOERR, GT_ENOTURL
    implicit none
    character(*), intent(in):: file
                    
    character(*), intent(in):: varname
                    
    character(*), intent(in):: attrname
                    
    real(DP), intent(out):: value
                    
    logical, intent(in), optional:: flag_mpi_split
                    
    logical, intent(out), optional:: err
                    
    type(GT_VARIABLE):: var
    character(STRING):: file_work, url
    integer:: stat
    character(STRING):: cause_c
    character(len = *), parameter:: subname = "HistoryGetAttrDouble0"

    !

  continue
    call BeginSub(subname, 'file=<%c> varname=<%c> attrname=<%c>', c1=trim(file), c2=trim(varname), c3=trim(attrname) )
    stat = DC_NOERR
    cause_c = ''

    ! ファイル名の変更 (MPI 用)
    ! Change filename (for MPI)
    !
    file_work = file
    if ( present_and_true( flag_mpi_split ) ) file_work = file_rename_mpi( file_work )

    ! 変数 URL の作成
    ! Create variable URL
    !
    url = UrlMerge( file_work, varname )

    ! ファイルオープン
    ! File open
    !
    call Open( var, url, err = err )

    if ( present_and_true(err) ) then
      stat = GT_ENOTURL
      cause_c = url
      goto 999
    end if

    ! 属性の取得
    ! Get an attribute
    !
    call Get_Attr( var, attrname, value )

    ! ファイルオープン
    ! File open
    !
    call Close( var )

999 continue
    call StoreError(stat, subname, err, cause_c=cause_c)
    call EndSub(subname)
  end subroutine
Subroutine :
file :character(*), intent(in)
varname :character(*), intent(in)
attrname :character(*), intent(in)
value :integer, intent(out)
flag_mpi_split :logical, intent(in), optional
err :logical, intent(out), optional

[Source]

  subroutine HistoryGettAttrInt0( file, varname, attrname, value, flag_mpi_split, err )
    !
                    
    !
    use gtdata_types, only: GT_VARIABLE
    use gtdata_generic, only: Get_Attr, Open, Close
    use dc_types, only: STRING, DP
    use dc_string, only: toChar, JoinChar
    use dc_url, only: GT_ATMARK, GT_COMMA, GT_EQUAL, UrlSplit, UrlMerge, GT_PLUS
    use dc_error, only: StoreError, DC_NOERR, NF_ENOTVAR, HST_EMPINOAXISDATA
    use dc_message, only: MessageNotify
    use dc_trace, only: BeginSub, EndSub
    use dc_present, only: present_and_true
    use dc_error, only: StoreError, DC_NOERR, GT_ENOTURL
    implicit none
    character(*), intent(in):: file
                    
    character(*), intent(in):: varname
                    
    character(*), intent(in):: attrname
                    
    integer, intent(out):: value
                    
    logical, intent(in), optional:: flag_mpi_split
                    
    logical, intent(out), optional:: err
                    
    type(GT_VARIABLE):: var
    character(STRING):: file_work, url
    integer:: stat
    character(STRING):: cause_c
    character(len = *), parameter:: subname = "HistoryGetAttrInt0"

    !

  continue
    call BeginSub(subname, 'file=<%c> varname=<%c> attrname=<%c>', c1=trim(file), c2=trim(varname), c3=trim(attrname) )
    stat = DC_NOERR
    cause_c = ''

    ! ファイル名の変更 (MPI 用)
    ! Change filename (for MPI)
    !
    file_work = file
    if ( present_and_true( flag_mpi_split ) ) file_work = file_rename_mpi( file_work )

    ! 変数 URL の作成
    ! Create variable URL
    !
    url = UrlMerge( file_work, varname )

    ! ファイルオープン
    ! File open
    !
    call Open( var, url, err = err )

    if ( present_and_true(err) ) then
      stat = GT_ENOTURL
      cause_c = url
      goto 999
    end if

    ! 属性の取得
    ! Get an attribute
    !
    call Get_Attr( var, attrname, value )

    ! ファイルオープン
    ! File open
    !
    call Close( var )

999 continue
    call StoreError(stat, subname, err, cause_c=cause_c)
    call EndSub(subname)
  end subroutine
Subroutine :
file :character(*), intent(in)
varname :character(*), intent(in)
attrname :character(*), intent(in)
value :real, intent(out)
flag_mpi_split :logical, intent(in), optional
err :logical, intent(out), optional

[Source]

  subroutine HistoryGettAttrReal0( file, varname, attrname, value, flag_mpi_split, err )
    !
                    
    !
    use gtdata_types, only: GT_VARIABLE
    use gtdata_generic, only: Get_Attr, Open, Close
    use dc_types, only: STRING, DP
    use dc_string, only: toChar, JoinChar
    use dc_url, only: GT_ATMARK, GT_COMMA, GT_EQUAL, UrlSplit, UrlMerge, GT_PLUS
    use dc_error, only: StoreError, DC_NOERR, NF_ENOTVAR, HST_EMPINOAXISDATA
    use dc_message, only: MessageNotify
    use dc_trace, only: BeginSub, EndSub
    use dc_present, only: present_and_true
    use dc_error, only: StoreError, DC_NOERR, GT_ENOTURL
    implicit none
    character(*), intent(in):: file
                    
    character(*), intent(in):: varname
                    
    character(*), intent(in):: attrname
                    
    real, intent(out):: value
                    
    logical, intent(in), optional:: flag_mpi_split
                    
    logical, intent(out), optional:: err
                    
    type(GT_VARIABLE):: var
    character(STRING):: file_work, url
    integer:: stat
    character(STRING):: cause_c
    character(len = *), parameter:: subname = "HistoryGetAttrReal0"

    !

  continue
    call BeginSub(subname, 'file=<%c> varname=<%c> attrname=<%c>', c1=trim(file), c2=trim(varname), c3=trim(attrname) )
    stat = DC_NOERR
    cause_c = ''

    ! ファイル名の変更 (MPI 用)
    ! Change filename (for MPI)
    !
    file_work = file
    if ( present_and_true( flag_mpi_split ) ) file_work = file_rename_mpi( file_work )

    ! 変数 URL の作成
    ! Create variable URL
    !
    url = UrlMerge( file_work, varname )

    ! ファイルオープン
    ! File open
    !
    call Open( var, url, err = err )

    if ( present_and_true(err) ) then
      stat = GT_ENOTURL
      cause_c = url
      goto 999
    end if

    ! 属性の取得
    ! Get an attribute
    !
    call Get_Attr( var, attrname, value )

    ! ファイルオープン
    ! File open
    !
    call Close( var )

999 continue
    call StoreError(stat, subname, err, cause_c=cause_c)
    call EndSub(subname)
  end subroutine

[Validate]