Class gtdata_generic
In: gtdata_generic.f90

GT_VARIABLE 型変数の手続総称宣言

ファイルの形式に依存しない多次元データである GT_VARIABLE 型変数 の操作に関する手続きの全てはここで総称宣言されて公開されます。

以降に一覧される手続は、第 1 引数が主な操作対象になるようなスタイルで 設計されています。 第 1 引数から gtool4 の手続であることがわかるので、 名前にわざわざ GT とはつけていません。

種類別手続き一覧

ASCII 順の手続き一覧は下記の "Methods" を参照してください。

変数の作成・初期化・終了

Create :変数の作成
Open :変数の初期化
Close :変数の終了処理

問い合わせ

Inquire :変数または属性に関する問い合わせ

データの入出力

Get :ファイル入力
Put, PutLine :ファイル出力

次元順序番号の問い合わせ・変更

Dimname_To_Dimord :次元相対名から次元順序番号の問い合わせ
Exch_dim :次元順序番号の交換

変数構成写像機能(リミット、次元の加除)

変数 (GT_VARIABLE 型) は順序の決まった次元集合をもちます。それぞれ の次元には決まった長さがあり、1から長さまでの番号で識別される格子から なっています。しかしながら、必要に応じて変数がもつ次元の順序を入れ替え たり、次元が存在しないようにみせかけたり、各々の次元の長さを変えたり格 子番号を付け替えたりできます。

Limit :入出力範囲を拘束
Add_Dim :変数に次元を追加
Del_Dim :変数から次元を隠蔽
Transform :2 つの変数の次元配置の共通化

入出力範囲限定機能(スライス)

Slice :入出力範囲を限定
Slice_Next :入出力範囲を移動
Get_Slice :変数入出力範囲限定情報を問い合わせ

属性関係

属性名は英字、数字、下線から構成されます。先頭の文字は英字または "+" でなければなりません。 "+" から始まる属性名は内部的に使用されるもの で、netCDF 実装では大域変数に対応します。

Attr_Rewind :変数属性列挙の初期化
Attr_Next :変数属性の列挙
Attr_True :変数属性を論理型として読み取り
Get_Attr :変数属性の読み取り
Put_Attr :変数属性の書き出し
Copy_Attr :属性のコピー
Del_Attr :変数属性の削除

その他

GTVarSearch :ファイルの中の変数名の列挙
GTVarSync :ファイル入出力の同期
GTDataTmpNam :変数名の自動作成
GTVarDel :ファイルの中の変数の削除 (作成中)
operator(.equivalent.) [#M000133] :同値判定

Methods

Add_dim   Add_member   Attr_Next   Attr_Rewind   Attr_True   Close   Copy_Attr   Copy_Attr   Create   Create   Create   Del_Attr   Del_dim   Dimname_to_Dimord   Exch_dim   GTDataTmpNam   GTVarSearch   GTVarSearch   GTVarSync   Get   Get   Get   Get   Get   Get   Get   Get   Get   Get   Get   Get   Get   Get   Get   Get   Get_Attr   Get_Attr   Get_Attr   Get_Attr   Get_Attr   Get_Attr   Get_Attr   Get_Attr   Get_Attr   Get_Attr   Get_Slice   Get_Slice   Inquire   Inquire   Inquire   Inquire   Limit   Limit   Open   Open   Put   Put   Put   Put   Put   Put   Put   Put   Put   Put   Put   Put   Put   Put   Put   Put   PutLine   Put_Attr   Put_Attr   Put_Attr   Put_Attr   Put_Attr   Slice   Slice   Slice   Slice_Next   Transform   operator(.equivalent.)  

Included Modules

gtdata_types dc_types

Public Instance methods

Add_dim( var, dimord, dimvar, err )
Subroutine :
var :type(GT_VARIABLE), intent(in)
dimord :integer, intent(in)
dimvar :type(GT_VARIABLE), intent(in)
err :logical, intent(out)

次元の追加

変数 vardimord 番目の位置に次元 dimvar を追加します。dimord 番目以降の次元は 1 つ後ろにずれます。 もし dimordvar の有効次元数よりも大きい場合、 (有効次元数 + 1) が与えられたものと見なされます。

エラーが生じた場合、メッセージを出力 してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

Original external subprogram is gtvaradddim.f90#GTVarAddDim

Add_member( var, member_url, [link_name] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
member_url :character(len = *), intent(in)
link_name :character(len = *), intent(in), optional

構造型変数の gt_structure_member 属性の追加

変数 var の gt_structure_member 属性 (gtool4 netCDF 規約 の 「4. 構造体変数」参照) に member_url の変数名部分を追加します。

Original external subprogram is gtvaraddmember.f90#GTVarAddMember

Attr_Next( var, name, [end] )
Subroutine :
var :type(GT_VARIABLE), intent(inout), target
name :character(len = *), intent(out)
end :logical, intent(out), optional

変数からの属性リスト取得

Attr_Rewind を参照してください。

Original external subprogram is gtvarattrsearch.f90#GTVarAttrNext

Attr_Rewind( var )
Subroutine :
var :type(GT_VARIABLE), intent(inout), target

変数からの属性リスト取得 (初期化用)

var から属性名のリストを取得するために利用するサブルーチンです。 このサブルーチンと Attr_Next によって属性リスト一覧を取得できます。

ある変数 var について全ての属性を列挙するためには、まず Attr_Rewind を呼んだ後、Attr_Next を呼びます。最初の呼び出しで 最初の属性が、次の呼び出しで次の属性の名前が得られます。最後の 属性のあとでは end == .true. となります。

以下のサンプルソースコードを参照ください。

     ! 属性一覧の取得
     use gt4f90io
     type(GT_VARIABLE):: var
     character(len = STRING):: attrname
     logical:: end

     call Attr_Rewind(var)
     do
         call Attr_Next(var, attrname, end)
         if (end) exit
         write(*,*) trim(attrname)
     enddo

Original external subprogram is gtvarattrsearch.f90#GTVarAttrRewind

Attr_True( var, name, [default] ) result(result)
Function :
result :logical
var :type(GT_VARIABLE), intent(in)
name :character(len = *), intent(in)
default :logical, intent(in), optional

論理型属性の入力

変数 var に付加されている属性 name の値を返します。 属性値が論理型属性の場合のみ用いることが出来ます。

以下の場合には .false. が返ります。

  • 属性の値が文字型で "", "0", "0.0", "0.", ".0", "FALSE", "false", ".FALSE.", ".false.", "F", "f", "0.0D0", "0.0d0" のいづれかであった場合
  • 属性の値が負の実数であった場合

属性の値が正常に取得できず、且つ default が与えられて いた場合、その値が返ります。default が与えられていなかった 場合には .false. が返ります。

Original external subprogram is gtvarattrtrue.f90#GTVarAttrTrue

Close( var, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(in), target
err :logical, intent(out), optional

変数の終了処理

変数 var の終了処理を行います。Open または Create されたものは プログラムの最後に必ずこのサブルーチンを用いて終了処理を行ってください。

終了処理の際にエラーが生じた場合、メッセージを出力してプログラムは 強制終了します。err を与えてある場合にはこの引数に .true. が返り、プログラムは終了しません。

Original external subprogram is gtvarclose.f90#GTVarClose

Copy_Attr( to, attrname, from, [err] )
Subroutine :
to :type(GT_VARIABLE), intent(inout)
attrname :character(len = *), intent(in)
from :type(GT_VARIABLE), intent(in)
err :logical, intent(out), optional

属性のコピー

変数 from の属性 attrname を 変数 to へコピーします。

属性のコピー時にエラーが生じた場合、メッセージを出力 してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

Copy_Attr は 2 つのサブルーチンの総称名であり、 他にも一括で変数の全ての属性をコピーする方法もあります。 下記のサブルーチンを参照ください。

Original external subprogram is gtvarcopyattr.f90#GTVarCopyAttr

Copy_Attr( to, from, [err], [global] )
Subroutine :
to :type(gt_variable), intent(inout)
from :type(gt_variable), intent(inout)
err :logical, intent(out), optional
global :logical, intent(in), optional

属性のコピー

変数 from の全ての属性を変数 to へコピーします。

デフォルトでは大域属性もコピーしますが、 global に .false. を与える場合、大域属性をコピーしません。

Copy_Attr は 2 つのサブルーチンの総称名であり、 他にも属性を指定してコピーする方法もあります。 上記のサブルーチンを参照ください。

Original external subprogram is gtvarcopyattrall.f90#GTVarCopyAttrAll

Create( var, url, [dims], [xtype], [long_name], [overwrite], [err] )
Subroutine :
var :type(GT_VARIABLE), intent(out)
url :character(len = *), intent(in)
dims(:) :type(GT_VARIABLE), intent(in), optional
xtype :character(len = *), intent(in), optional
long_name :character(len = *), intent(in), optional
overwrite :logical, intent(in), optional
err :logical, intent(out), optional

従属変数の作成

場所 url に次元 dims を持った変数つまり GT_VARIABLE 型 の実体を作成し、それを第 1 引数 var にセットします。 Open されたものと同様、第1引数 var は後で必ず Close されなければなりません。

xtype を省略すると "float" と みなされます。既存変数があるとき失敗しますが、 overwrite == .true. であれば上書きして続行します。 (まだ overwrite の動作は保障されていません)。 dims の省略は 0 次元変数の設定を意味します。

作成の際にエラーが生じた場合、メッセージを出力してプログラムは 強制終了します。err を与えてある場合にはこの引数に .true. が返り、プログラムは終了しません。

Original external subprogram is gtvarcreate.f90#GTVarCreate

Create( var, url, copyfrom, [copyvalue], [overwrite], [err] )
Subroutine :
var :type(GT_VARIABLE), intent(out)
url :character(len = *), intent(in)
copyfrom :type(GT_VARIABLE), intent(inout)
copyvalue :logical, intent(in), optional
overwrite :logical, intent(in), optional
err :logical, intent(out), optional

変数のコピー

変数 copyfrom と同じ次元、属性を持った変数を url に作成します。 必要ならば次元変数も複製されます。 copyvalue.true. に指定すると値も複製されます。 作成された変数の ID は var に返されます。

既存変数があるとき失敗しますが、 overwrite == .true. であれば上書きして続行します。 (まだ overwrite の動作は保障されていません)。

作成の際にエラーが生じた場合、メッセージを出力してプログラムは 強制終了します。err を与えてある場合にはこの引数に .true. が返り、プログラムは終了しません。

Original external subprogram is gtvarcreatecopy.f90#GTVarCreateCopyC

Create( var, url, length, [xtype], [long_name], [overwrite], [err] )
Subroutine :
var :type(GT_VARIABLE), intent(out)
url :character(len = *), intent(in)
length :integer, intent(in)
xtype :character(len = *), intent(in), optional
long_name :character(len = *), intent(in), optional
overwrite :logical, intent(in), optional
err :logical, intent(out), optional

独立変数 (次元) の作成

場所 url に長さ length の自分自身を次元とする変数つまり GT_VARIABLE 型 の実体を作成し、それを第 1 引数 var にセットします。 Open されたものと同様、第1引数 var は後で必ず Close されなければなりません。

長さ length == 0 を指定するとその変数は可変長次元となります。 型 xtype を省略すると "float" と みなされます。既存変数があるとき失敗しますが、 overwrite == .true. であれば上書きして続行します。 (まだ overwrite の動作は保障されていません)。 dims の省略は 0 次元変数の設定を意味します。

次元変数は自動生成されることが多いため、変数名部を欠く指定に対しては 名前を自動生成します。

作成の際にエラーが生じた場合、メッセージを出力してプログラムは 強制終了します。err を与えてある場合にはこの引数に .true. が返り、プログラムは終了しません。

Original external subprogram is gtvarcreated.f90#GTVarCreateD

Del_Attr( var, name, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
name :character(len = *), intent(in)
err :logical, intent(out), optional

属性の削除

変数 var の属性 name を削除します。

属性の削除時にエラーが生じた場合、メッセージを出力 してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

Original external subprogram is gtvardelattr.f90#GTVarDelAttr

Del_dim( var, dimord, err )
Subroutine :
var :type(gt_variable), intent(in)
dimord :integer, intent(in)
err :logical, intent(out)

次元の削除

変数 var の次元 dimord を削除します。 次元対応表の順位を下げ有効次元数をデクリメントするだけなので、 当該次元がすでに縮退していれば、この操作のあとでも入出力が可能です。

エラーが生じた場合、メッセージを出力 してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

Original external subprogram is gtvardeldim.f90#GTVarDelDim

Dimname_to_Dimord( var, name ) result(result)
Function :
result :integer
var :type(gt_variable), intent(in)
name :character(len = *), intent(in)

次元相対名から次元順序番号の問い合わせ

変数には複数の次元が所属します。次元は順序番号で識別されますが、 変数における次元の順序は入れ替えることもできるため、 変数に相対的短い名前で識別することが便利な場合もあります。 たとえば変数 filename?var に対して filename?var,dim=1 のような コンマ記法 (gtool4 netCDF 規約 の 「5.4 コンマ記法」参照) で用いられるものです。(NetCDF 変数 filename?varname に対する次元名 dimfilename?dim を指示するでしょうが、必ずしもそのような関係が成り立つとは限りません)

Dimname_to_Dimord 手続はこのような相対次元名から次元順序番号を与えます。 正当な番号は1以上であり、0以下の番号はエラーを示します。

Original external subprogram is gtdim_name2ord.f90#gtdim_name2ord

Exch_dim( var, dimord1, dimord2, [count_compact], err )
Subroutine :
var :type(GT_VARIABLE), intent(in)
dimord1 :integer, intent(in)
dimord2 :integer, intent(in)
count_compact :logical, intent(in), optional
err :logical, intent(out)

次元順序番号の交換

変数 var の次元順序番号 dimord1, dimord2 のそれぞれに 対応する次元を入れ替えます。

count_compact に .true. を渡すと、縮退した次元も含めて 動作します。

エラーが生じた場合、メッセージを出力 してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

Original external subprogram is gtvarexchdim.f90#GTVarExchDim

GTDataTmpNam( file, base, result )
Subroutine :
file :character(len = *), intent(in)
base :character(len = *), intent(in)
result :character(len = *), intent(out)

変数名の自動作成

ファイル名 file と変数名 base から file@base を 作成して result に返す。 file が空文字の場合は gtool.nc がファイル名として代用され、 base が空文字の場合は tmp が変数名として代用される。

Original external subprogram is gtdatatmpnam.f90#GTDataTmpNam

GTVarSearch( url, end )
Subroutine :
url :character(len = *), intent(out)
end :logical, intent(out)

変数探査サブルーチン

あるファイル名 urlBase に依存する変数すべてを取得するには、 まず GTVarSearch(urlBase) (下記のサブルーチン) を呼び出し、 その後無限ループの中で GTVarSearch(url, end) を呼び出します。 そうすることで url に1つ1つの変数名が返ります。 end が真になったとき、すべての変数名を探索し終えたことになります。

   use gt4f90io
   character(len = STRING) :: filename, varname
   logical                 :: end

   write(*,*) "Enter file name: "
   read(*,*) filename

   call GTVarSearch(filename)
   do
     call GTVarSearch(varname, end)
     if (end) exit
     write(*, *) trim(varname)
   enddo

Original external subprogram is gtvarsearch.f90#GTVarSearchNext

GTVarSearch( urlBase )
Subroutine :
urlBase :character(len = *), intent(in)

変数探査初期化サブルーチン

上記の GTVarSearch を参照してください。

Original external subprogram is gtvarsearch.f90#GTVarSearchInit

GTVarSync( [var], [stat] )
Subroutine :
var :type(GT_VARIABLE), intent(inout), optional
stat :integer, intent(out), optional

ファイル入出力の同期

変数 var に関するメモリ内のバッファと netCDF ファイルのディスク上の コピーとを同期します。var が与えられない場合、プログラム内で これまでに入出力した全てのファイルに関して同期がおこなわれます。

stat にはステータスが返ります。

Original external subprogram is gtvarsync.f90#GTVarSync

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:) :real(DP), pointer
: (out)
err :logical, intent(out), optional

ポインタ配列への数値データの入力

変数 var から value に数値データが入力されます。 value はポインタ配列であり、数値データのサイズに合わせた 配列サイズが自動的に割り付けられます。 Get は複数のサブルーチンの総称名であり、 1 ~ 7 次元のポインタを与えることが可能です。 また value に固定長配列を与えることが可能な手続きもあります。 下記を参照してください。

value が既に割り付けられており、且つ入力する数値データと配列 サイズが異なる場合、エラー (コード dc_error#GT_EBADALLOCATESIZE) を生じます。原則的には value を空状態にして与えることを 推奨します。不定状態で与えることは予期せぬ動作を招く可能性が あるため禁止します。

数値データ入力や上記の割り付けの際にエラーが生じた場合、メッセージ を出力してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

入力しようとするデータの型が引数の型と異なる場合、データは引数の 型に変換されます。 この変換は netCDF の機能を用いています。 詳しくは netCDF 日本語版マニュアル の 3.3 型変換 を参照してください。

This subroutine returns multi-dimensional data to argument "value". You need to provide GT_VARIABLE variable to argument "var". If you provide logical argument "err", .true. is returned instead of abort with messages when error is occurred.

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerDouble1

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:) :real, pointer
: (out)
err :logical, intent(out), optional

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerReal1

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:) :real(DP), pointer
: (out)
err :logical, intent(out), optional

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerDouble2

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:) :real, pointer
: (out)
err :logical, intent(out), optional

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerReal2

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:) :real(DP), pointer
: (out)
err :logical, intent(out), optional

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerDouble3

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:) :real, pointer
: (out)
err :logical, intent(out), optional

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerReal3

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:) :real(DP), pointer
: (out)
err :logical, intent(out), optional

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerDouble4

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:) :real, pointer
: (out)
err :logical, intent(out), optional

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerReal4

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:,:) :real(DP), pointer
: (out)
err :logical, intent(out), optional

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerDouble5

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:,:) :real, pointer
: (out)
err :logical, intent(out), optional

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerReal5

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:,:,:) :real(DP), pointer
: (out)
err :logical, intent(out), optional

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerDouble6

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:,:,:) :real, pointer
: (out)
err :logical, intent(out), optional

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerReal6

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:,:,:,:) :real(DP), pointer
: (out)
err :logical, intent(out), optional

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerDouble7

Get( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:,:,:,:) :real, pointer
: (out)
err :logical, intent(out), optional

Original external subprogram is gtvargetpointernum.f90#GTVarGetPointerReal7

Get( var, value, nvalue, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(*) :real(DP), intent(out)
nvalue :integer, intent(in)
err :logical, intent(out), optional

固定長配列への数値データの入力

変数 var から value に数値データが入力されます。 nvalue には配列長を代入する必要があります。

数値データ入力の際にエラーが生じた場合、メッセージを出力 してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

入力しようとするデータの型が引数の型と異なる場合、データは引数の 型に変換されます。 この変換は netCDF の機能を用いています。 詳しくは netCDF 日本語版マニュアル の 3.3 型変換 を参照してください。

Get は複数のサブルーチンの総称名であり、 value にポインタ型の配列を与えることも可能です。上記の サブルーチンを参照してください。

Original external subprogram is gtvargetnum.f90#GTVarGetDouble

Get( var, value, nvalue, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(*) :real, intent(out)
nvalue :integer, intent(in)
err :logical, intent(out), optional

Original external subprogram is gtvargetnum.f90#GTVarGetReal

Get_Attr( var, attrname, value, [default] )
Subroutine :
var :type(GT_VARIABLE), intent(in)
attrname :character(len = *), intent(in)
value :integer, intent(out)
default :integer, intent(in), optional

属性の入力

変数 var に付加されている属性 name の値を返します。 Get_Attr は複数のサブルーチンの総称名なので、 value には様々な型の変数 (ポインタも可能) を与えることが可能です。 以下のサブルーチンを参照してください。

属性の値が正常に取得できず、且つ default が与えられて いた場合、その値が返ります。 default が与えられない場合のデフォルトの値はそれぞれ以下の 通りです。

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

value がポインタの場合は、型に依らず空状態が返ります。

value にポインタを与えた場合、属性の値に応じて自動的に 割り付けが行われます。そのため、必ず空状態にしてから与えてください。

value に固定長配列を用意する場合 default が必須になりますが、 これは Fortran の言語仕様上ポインタ方式と引用仕様が同じであっては ならないからです。

Original external subprogram is gtvargetattr.f90#GTVarGetAttrI

Get_Attr( var, attrname, value, [default] )
Subroutine :
var :type(GT_VARIABLE), intent(in)
attrname :character(len = *), intent(in)
value :real(DP), intent(out)
default :real(DP), intent(in), optional

Original external subprogram is gtvargetattr.f90#GTVarGetAttrD

Get_Attr( var, attrname, value, [default] )
Subroutine :
var :type(GT_VARIABLE), intent(in)
attrname :character(len = *), intent(in)
value :real, intent(out)
default :real, intent(in), optional

Original external subprogram is gtvargetattr.f90#GTVarGetAttrR

Get_Attr( var, name, value )
Subroutine :
var :type(GT_VARIABLE), intent(in)
name :character(len = *), intent(in)
value(:) :integer, pointer
: (out)

Original external subprogram is gtvargetattr.f90#GTVarGetAttrIP

Get_Attr( var, name, value )
Subroutine :
var :type(GT_VARIABLE), intent(in)
name :character(len = *), intent(in)
value(:) :real(DP), pointer
: (out)

Original external subprogram is gtvargetattr.f90#GTVarGetAttrDP

Get_Attr( var, name, value )
Subroutine :
var :type(GT_VARIABLE), intent(in)
name :character(len = *), intent(in)
value(:) :real, pointer
: (out)

Original external subprogram is gtvargetattr.f90#GTVarGetAttrRP

Get_Attr( var, name, value, [default] )
Subroutine :
var :type(GT_VARIABLE), intent(in)
name :character(len = *), intent(in)
value :character(len = *), intent(out)
default :character(len = *), intent(in), optional

Original external subprogram is gtvargetattrsc.f90#GTVarGetAttrCC

Get_Attr( var, name, value, default )
Subroutine :
var :type(GT_VARIABLE), intent(in)
name :character(len = *), intent(in)
value(:) :real(DP), intent(out)
default :real(DP), intent(in)

Original external subprogram is gtvargetattr.f90#GTVarGetAttrDA

Get_Attr( var, name, value, default )
Subroutine :
var :type(GT_VARIABLE), intent(in)
name :character(len = *), intent(in)
value(:) :real, intent(out)
default :real, intent(in)

Original external subprogram is gtvargetattr.f90#GTVarGetAttrRA

Get_Attr( var, name, value, stat, default )
Subroutine :
var :type(GT_VARIABLE), intent(in)
name :character(len = *), intent(in)
value(:) :integer, intent(out)
stat :integer
default :integer, intent(in)

Original external subprogram is gtvargetattr.f90#GTVarGetAttrIA

Get_Slice( var, [start], [count], [stride] )
Subroutine :
var :type(GT_VARIABLE), intent(in)
start(:) :integer, intent(out), optional
count(:) :integer, intent(out), optional
stride(:) :integer, intent(out), optional

変数入出力範囲限定情報を取得 (全ての次元の情報を一括取得)

変数 var に関して、 Slice によって設定された入出力範囲の情報を取得します。 全次元の入出力範囲について一括取得するため、 あらかじめ Inquire(var, alldims) して次元の数を確保 しなければなりません。

start, count, stride に関しては Slice を参照してください。

Get_Slice は 2 つのサブルーチンの総称名であり、 他にもある1つの次元に関して情報を取得する 方法もあります。下記のサブルーチンを参照ください。

Original external subprogram is gtvargetsliceall.f90#GTVarGetSliceAll

Get_Slice( var, dimord, [start], [count], [stride], [count_compact] )
Subroutine :
var :type(gt_variable), intent(in)
dimord :integer, intent(in)
start :integer, intent(out), optional
count :integer, intent(out), optional
stride :integer, intent(out), optional
count_compact :logical, intent(in), optional

変数入出力範囲限定情報を取得

変数 vardimord 番目の次元に関して、 Slice によって設定された入出力範囲の情報を取得します。

start, count, stride に関しては Slice を参照してください。

count_compact に .true. に指定すると、縮退された次元も 含んで問い合わせを行います。

Get_Slice は 2 つのサブルーチンの総称名であり、 他にも変数の依存する全ての次元に関して一括で情報を取得する 方法もあります。上記のサブルーチンを参照ください。

Original external subprogram is gtvargetslice.f90#GTVarGetSlice

Inquire( var, [growable], [rank], [alldims], [allcount], [size], [xtype], [name], [url] )
Subroutine :
var :type(GT_VARIABLE), intent(in)
growable :logical, intent(out), optional
: 変数が次元変数である場合、 自動拡張可能か否かを返します。 次元変数でない場合は不定となります。
rank :integer, intent(out), optional
: コンパクト(縮退)次元を数えない、 次元の数
alldims :integer, intent(out), optional
: 縮退次元を含む全次元数。 dimord には基本的にこちらを 使います。
allcount :integer, intent(out), optional
: 変数が次元変数である場合、 総数を返します。 エラーの場合はゼロを返します。
size :integer, intent(out), optional
: 変数の入出力領域の大きさ。 (変数が依存する各次元の長 [格子点数]の積)
xtype :character(len=*), intent(out), optional
: 外部型の名前
name :character(len=*), intent(out), optional
: name は変数名の最小の単位を返します。 ファイル名を含まないため プログラム内での一意性は 保証されません。
url :character(len=*), intent(out), optional
: url はファイル名のついた変数名 を返します。 プログラム内で一意です。

変数に関する問い合わせ

変数 var に関する問い合わせを行います。

返り値となる引数の文字型の実引数の長さが足りないと、 結果が損なわれます。引数の文字列の長さとして dc_types#STRING を用いることを推奨します。

Inquire は複数のサブルーチンの総称名であり、 問い合わせ方法は複数用意されています。 下記のサブルーチンも参照してください。

他にも変数に関する問い合わせのための手続きとして Get_Slice, Dimname_to_Dimord があります。

Original external subprogram is gtvarinquire.f90#GTVarInquire

Inquire( var, allcount )
Subroutine :
var :type(GT_VARIABLE), intent(in)
allcount(:) :integer, intent(out)
: alldims 個必要

変数の依存する次元 (複数) の総数の問い合わせ

変数 var が依存する各次元の総数を返します。 allcount の配列のサイズは依存する次元の数だけ必要です。 依存する次元の数は上記の Inquirealldims で調べることが できます。

Original external subprogram is gtvarinquire.f90#GTVarInquire2

Inquire( var, attrname, [xtype] )
Subroutine :
var :type(GT_VARIABLE), intent(in)
attrname :character(len=*), intent(in)
xtype :character(len=*), intent(out), optional

変数の属性の型の問い合わせ

変数 var の属性 attrname の値の型を xtype に返します。

Original external subprogram is gtvarinquire.f90#GTVarInquireA

Inquire( var, dimord, [url], [allcount] )
Subroutine :
var :type(GT_VARIABLE), intent(in)
dimord :integer, intent(in)
url :character(len=*), intent(out), optional
allcount :integer, intent(out), optional

変数の次元に関する問い合わせ

変数 var の次元順序番号 dimord に対応する次元の URL url と総数 allcout を返します。

Original external subprogram is gtvarinquire.f90#GTVarInquireD

Limit( var, dimord, [start], [count], [stride], [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
dimord :integer, intent(in)
start :integer, intent(in) , optional
count :integer, intent(in) , optional
stride :integer, intent(in) , optional
err :logical, intent(out), optional

入出力範囲の拘束 (数値で指定)

変数 var 次元の入出力範囲を拘束します。 Limit を呼び出した後では Slice でその範囲の外に入出力範囲を 設定できなくなります。これにより、変数全体ではなく一部を Slice_Next サブルーチンを用いて走査できるようになります。

指定方法は、変数 vardimord 番目の次元を基点 start, 格子総数 count 間隔 stride に限定します。 このあとでは、スライス指定の第1格子は start 番目の格子を 指示することになり、スライス指定での格子数は count 個を 越えることができなくなり、スライス指定で間引きなしを指定すると stride 個ごとの指定を指示することになります。

エラーが生じた場合、メッセージを出力 してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

Limit は 2 つのサブルーチンの総称名であり、 他にも gtool4 netCDF 規約 の 「5.4 コンマ記法」を用いて指定することも可能です。 下記のサブルーチンを参照してください。

Original external subprogram is gtvarlimit.f90#GTVarLimit_iiii

Limit( var, string, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
string :character(len = *), intent(in)
err :logical, intent(out), optional

入出力範囲の拘束 (文字列で指定)

変数 var 次元の入出力範囲を拘束します。 Limit は 2 つのサブルーチンの総称名であり、 別の指定方法もあります。まずは上記のサブルーチンを参照してください。

指定方法は、stringgtool4 netCDF 規約 の 「5.4 コンマ記法」に述べられる範囲指定表現を用います。 凡例を以下に挙げます。

    <dim>=<lower>

    <dim>=<lower>:<upper>

    <dim>=<lower>:<upper>:<stride>

ここで、<dim> は次元番号または次元名であり、 <lower>, <upper> は座標値または "^" を前置した格子番号です。 <stride> は格子数です。

エラーが生じた場合、メッセージを出力 してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

Original external subprogram is gtvarlimit.f90#GTVarLimit

Open( var, source_var, dimord, [count_compact], [err] )
Subroutine :
var :type(GT_VARIABLE), intent(out)
source_var :type(GT_VARIABLE), intent(in)
dimord :integer, intent(in)
count_compact :logical, intent(in), optional
err :logical, intent(out), optional

gtool4 データのオープン

既に開かれた変数 source_vardimord 番目の次元にあたる変数を 開き var に格納します。順序 dimord は現在の入出力範囲が 幅1になっている (コンパクト化している) を飛ばした 順序であすが、count_compact.true.を指定すると すべての次元のなかの順序になります。

Open された変数は必ず Close されなければなりません。

dimord == 0 の場合は変数自体を再度開きます。これは参照カウンタを 増加させる手段です。

Open は 2 つのサブルーチンの総称名であり、 変数 URL を直接指定することで開くことも可能です。 下記のサブルーチンを参照ください。

補足

変数 URL にファイル名部を指定しない場合、gtool.nc であるとみなされます。

変数 URL にファイル名だけを指定した場合、開かれる変数は以下の規則 で選択されます。

  • 次元変数は選択されない
  • なるべく先に定義された変数が選択される

Original external subprogram is gtvaropenbydimord.f90#GTVarOpenByDimOrd

Open( var, url, [writable], [err] )
Subroutine :
var :type(GT_VARIABLE), intent(out)
url :character(*), intent(in)
writable :logical, intent(in), optional
err :logical, intent(out), optional

gtool4 データのオープン

url で識別される gtool 変数を開き、var に格納します。 writable.true. に指定すると書き込み可で開こうとします。 デフォルトは書き込み不可で開きます。 (まだ writable の動作は保障されていません)。

Open された変数は必ず Close されなければなりません。

エラーが発生した場合、引数 err が与えられる場合は err.true. となって返ります。 引数 err を与えなければプログラムは停止します。

Open は 2 つのサブルーチンの総称名であり、 ある変数の次元を指定することで開くことも可能です。 上記のサブルーチンを参照ください。

補足

上記の Open を参照してください。

Original external subprogram is gtvaropen.f90#GTVarOpen

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:) :real(DP), intent(in)
err :logical ,intent(out), optional

変数への数値データの出力

変数 var へ数値データ value が出力されます。

数値データ入力の際にエラーが生じた場合、メッセージを出力 してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

出力しようとするデータの型が var の型と異なる場合、データは var の 型に変換されます。 この変換は netCDF の機能を用いています。 詳しくは netCDF 日本語版マニュアル の 3.3 型変換 を参照してください。

Get は複数のサブルーチンの総称名であり、 value には 1 ~ 7 次元の配列を与えることも可能です。 下記のサブルーチンを参照してください。

Original external subprogram is gtvarputnum.f90#GTVarPutDouble1

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:) :real, intent(in)
err :logical ,intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutReal1

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:) :real(DP), intent(in)
err :logical ,intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutDouble2

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:) :real, intent(in)
err :logical ,intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutReal2

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:) :real(DP), intent(in)
err :logical ,intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutDouble3

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:) :real, intent(in)
err :logical ,intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutReal3

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:) :real(DP), intent(in)
err :logical ,intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutDouble4

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:) :real, intent(in)
err :logical ,intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutReal4

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:,:) :real(DP), intent(in)
err :logical ,intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutDouble5

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:,:) :real, intent(in)
err :logical ,intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutReal5

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:,:,:) :real(DP), intent(in)
err :logical ,intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutDouble6

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:,:,:) :real, intent(in)
err :logical ,intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutReal6

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:,:,:,:) :real(DP), intent(in)
err :logical ,intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutDouble7

Put( var, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
value(:,:,:,:,:,:,:) :real, intent(in)
err :logical ,intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutReal7

Put( var, value, nvalue, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(in)
value(nvalue) :real(DP), intent(in)
nvalue :integer, intent(in)
err :logical, intent(out), optional

変数への数値データの出力

変数 var へ数値データ value が出力されます。 nvalue には配列長を代入する必要があります。

数値データ出力の際にエラーが生じた場合、メッセージを出力 してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

出力しようとするデータの型が var の型と異なる場合、データは var の 型に変換されます。 この変換は netCDF の機能を用いています。 詳しくは netCDF 日本語版マニュアル の 3.3 型変換 を参照してください。

Get は複数のサブルーチンの総称名であり、 value に多次元配列を与えることも可能です。上記の サブルーチンを参照してください。

Original external subprogram is gtvarputnum.f90#GTVarPutDouble

Put( var, value, nvalue, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(in)
value(nvalue) :real, intent(in)
nvalue :integer, intent(in)
err :logical, intent(out), optional

Original external subprogram is gtvarputnum.f90#GTVarPutReal

PutLine( var, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
err :logical, intent(out), optional

変数の印字

変数 var の内容を出力します。

Get と書式つき WRITE 文をあわせたような機能で、 変数 var の内容を標準出力 (正確には * で識別される装置) に印字します。

エラーが生じた場合、メッセージを出力 してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

Original external subprogram is gtvarputline.f90#GTVarPutLine

Put_Attr( var, name, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
name :character(len = *), intent(in)
value :logical, intent(in)
err :logical, intent(out), optional

属性の付加

変数 var に, 属性名 name とその値 value を付加します。

Put_Attr は複数のサブルーチンの総称名なので、 value には様々な型の変数を与えることが可能です。 以下のサブルーチンを参照してください。

引数に xtype を持つものは、その引数に型を指定することで、 引数 value には文字型を与えても、 整数型、実数型 (単精度、倍精度) の値を付加することが可能です。 下記のサブルーチンを参照ください。

エラーが発生した場合、引数 err が与えられる場合は err.true. となって返ります。 引数 err を与えなければプログラムは停止します。

Original external subprogram is gtvarputattrchar.f90#GTVarPutAttrLogical

Put_Attr( var, name, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
name :character(len = *), intent(in)
value(:) :integer, intent(in)
err :logical, intent(out), optional

まずは上記の Put_Attr (または GTVarPutAttrChar および GTVarPutAttrReal) を参照してください。

value は配列を受け取るので、スカラーを書き出すには Fortran の配列構成子 (/ … /) を使ってください。 たとえば、スカラー a から長さ 1 の配列 (/a/) を作ることができます。

Original external subprogram is gtvarputattrchar.f90#GTVarPutAttrInt

Put_Attr( var, name, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
name :character(len = *), intent(in)
value(:) :real(DP), intent(in)
err :logical, intent(out), optional

まずは上記の Put_Attr (または GTVarPutAttrChar および GTVarPutAttrReal) を参照してください。

Original external subprogram is gtvarputattrchar.f90#GTVarPutAttrDouble

Put_Attr( var, name, value, [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
name :character(len = *), intent(in)
value(:) :real, intent(in)
err :logical, intent(out), optional

まずは上記の Put_Attr (または GTVarPutAttrChar および GTVarPutAttrReal) を参照してください。

Original external subprogram is gtvarputattrchar.f90#GTVarPutAttrReal

Put_Attr( var, name, value, [xtype], [err] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
name :character(len = *), intent(in)
value :character(len = *), intent(in)
xtype :character(len = *), intent(in), optional
err :logical, intent(out), optional

まずは上記の Put_Attr (または GTVarPutAttrChar) を参照してください。

xtype に型を指定することで、引数 value には文字型を与えても、 整数型、実数型 (単精度、倍精度) の値を付加することが可能です。

xtype には与える文字列として、以下のものが有効です。 これら以外の場合は文字型の値が与えられます。

整数型 :"INTEGER", "integer", "int"
実数型 (単精度) :"REAL", "real", "float"
実数型 (倍精度) :"DOUBLEPRECISION", "DOUBLE", "double"

Original external subprogram is gtvarputattrchar.f90#GTVarPutAttrChar

Slice( var, [compatible] )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
compatible :type(GT_VARIABLE), intent(in), optional

入出力範囲をおまかせ指示

変数 var の入出力範囲を「適当に」小さくします。 compatible を指定すると、その変数と全く同じ入出力範囲に に指定します。

Slice は複数のサブルーチンの総称名であり、 他にも文字列や番号で指定する方法があります。 以下のサブルーチンを参照してください。

Slice に関連する手続きとして、Get_SliceSlice_Next が あります。Get_Slice は設定された入出力範囲を取得します。 Slice_Next は入出力範囲を移動することによって、変数全体を読み取る ために利用するサブルーチンです。

Original external subprogram is gtvarsliceauto.f90#GTVarSliceAuto

Slice( var, dimord, [start], [count], [stride] )
Subroutine :
var :type(GT_VARIABLE), intent(in)
dimord :integer, intent(in)
start :integer, intent(in), optional
count :integer, intent(in), optional
stride :integer, intent(in), optional

入出力範囲を数値で指定

変数 var の入出力範囲を指定します。

変数 vardimord 番目の次元の入出力範囲を start から stride 個おきに count 個とします。start, count, stride のいずれを省略しても 1 が仮定されます。成功し たか否かを返す引数はありません。仮に指定できない範囲が指定さ た場合には、指定範囲を含むなるべく広い範囲を設定します。

Slice は複数のサブルーチンの総称名であり、 他にも文字列や番号で指定する方法があります。

Original external subprogram is gtvarslice.f90#GTVarSlice

Slice( var, string, err )
Subroutine :
var :type(GT_VARIABLE), intent(inout)
string :character(len = *), intent(in)
err :logical, intent(out)

入出力範囲を文字列で指定

変数 var の入出力範囲を、string に応じて指定します。 string には gtool4 netCDF 規約 の 「5.4 コンマ記法」に述べられる範囲指定表現を用います。 凡例を以下に挙げます。

    <dim>=<lower>

    <dim>=<lower>:<upper>

    <dim>=<lower>:<upper>:<stride>

ここで、<dim> は次元番号または次元名であり、 <lower>, <upper> は座標値または "^" を前置した格子番号です。 <stride> は格子数です。

現在 err は必ず .false. を返すことになっています。

Slice は複数のサブルーチンの総称名であり、 他にも文字列や番号で指定する方法があります。

Original external subprogram is gtvarslice.f90#GTVarSliceC

Slice_Next( var, [dimord], [err], [stat] )
Subroutine :
var :type(GT_VARIABLE), intent(in out)
dimord :integer, intent(in), optional
err :logical, intent(out), optional
stat :integer, intent(out), optional

入出力範囲を移動

変数 vardimord 番目の次元の start 値を stride * count 個だけ増やすことによって次元範囲を移動します。dimord を省略すると、どれかの次元についてこの操作を行います。成功した 場合 stat が 0 になリます。

いずれかの次元について start, stride 値が 1 になるような Slice を設定しておいて、Slice_Next を順次呼び出すと変数全体 を走査することができます。

入出力範囲を移動する際にエラーが生じた場合、メッセージを出力 してプログラムは 強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

Original external subprogram is gtvarslicenext.f90#GTVarSliceNext

Transform( var1, var2, [err] )
Subroutine :
var1 :type(GT_VARIABLE), intent(inout)
var2 :type(GT_VARIABLE), intent(inout)
err :logical, intent(out), optional

2 つの変数の次元配置の共通化

変数 var1 の次元構成が var2 の次元構成と同じになるように 範囲拘束を行います。過剰な次元が var1 にある場合、隠蔽 を行います。(追加もできるようにする予定です)。

エラーが生じた場合、メッセージを出力 してプログラムは強制終了します。err を与えてある場合には の引数に .true. が返り、プログラムは終了しません。

Original external subprogram is gtvarlimitbinary.f90#GTVarXformBinary

operator(.equivalent.)( var1, var2 ) result(result)
Function :
result :logical
var1 :type(GT_VARIABLE), intent(in)
var2 :type(GT_VARIABLE), intent(in)

GT_VARIABLE 型変数の同値判定

変数 var1, var2 を比較し、同値である場合は .true. を、 そうで無い場合は .false. を返します。

Original external subprogram is gtvarequivalent.f90#gtvarequivalent

[Validate]