関数 NF_GET_VARM_ type のファミリーは開かれたNetCDFファイルのNetCDF変数からマップされた配列断面を読みます。 マップされた配列断面は隅・縁の長さ・ ストライドベクトル・インデックスマッピングベクトル を与えることによって指定されます。 インデックスマッピングベクトルとはNetCDF変数と内部データ配列のメモリ内構造との間のマッピングを指定する整数ベクトルです。データ配列に関しては順番や長さなどについていかなる仮定もされません。
INTEGER FUNCTION NF _GET_VARM_TEXT (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER FUNCTION NF _GET_VARM_INT1 (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER FUNCTION NF _GET_VARM_INT2 (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER FUNCTION NF _GET_VARM_INT (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER FUNCTION NF _GET_VARM_REAL (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER FUNCTION NF _GET_VARM_DOUBLE(INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
最初にデータ値が読み取られる変数内のインデックスを指定する整数のベクトル。インデックスは1に相対的なので、変数の最初のデータ値のインデックスは (1, 1, ..., 1) となります。 START の要素は変数の次元と順番に対応していなければなりません。従って、 記録変数の場合には、最後のインデックスがデータ値を読み込む開始記録番号となります 。 |
|
各次元に沿って幾つのインデックスが選定されるかを指定する整数ベクトル。 例えば単一の値を読み取る場合には、 count を (1, 1, ... , 1) と指定すればよい。 count の要素は変数の次元に順番に対応する。よって、記録変数の場合には count の最後の要素が読み取る記録数の総計に対応する。 |
|
各次元で選定されたインデックスの間隔を示す整数ベクトル、もしくはゼロの値。ベクトルの要素は変数の次元に順番に対応する。値が1の場合には対応するNetCDF 変数の隣接した値にアクセスする。 値が2の場合には対応するNetCDF変数の値を一つおきにアクセスする。 引数 0 は (1, 1, ..., 1) として扱われる。 |
|
NetCDF変数の次元と内部データ配列とのメモリ内構造間のマッピングを指定する整数ベクトル。IMAP(1)は最も早く変化するNetCDF変数の次元に対応する内部配列の要素と要素間の距離を示します。 IMAP(N)は(N はNetCDF変数のランク)最も遅く変化するNetCDF変数の次元に対応する内部配列の要素と要素の間の距離を示します。この二つIMAP の要素間にある他の要素が他のNetCDF変数の次元に対応することは自明です。要素間の距離は要素の型独立の単位で指定されます。(隣接する位置にある内部メモリ間の距離は1であり、NetCDF2のように要素のバイト長ではありません。) ). |
|
読み込まれるデータ値の塊。。データの型は呼び出された関数に適当な型でなければなりません。 文字(CHARACTER) データを数値変数から、又は数値データを文字変数から読み取ることは出来ません。数値データについては、データ型がNetCDF変数型と異なる場合には型変換が行われます。 詳細は型変換を参照のこと。 |
次の IMAP ベクトルは 2x3x4のNetCDF変数と同じ形の内部配列を自明な形でマップします。
REAL A(2,3,4) ! same shape as NetCDF変数と同じ形
INTEGER IMAP(3)
DATA IMAP /1, 2, 6/ ! NetCDF次元 要素間距離
! ---------------- ----------------------
! 最も早く変化する 1
! 中間 2 (=IMAP(1)*2)
! 最も遅く変化する 6 (=IMAP(2)*3)
上記の IMAP ベクトルと NF_GET_VARM_REAL とを使用た場合と、単に NF_GET_VAR_REALを使用した場合とでは同じ結果が得られます。
この例では NF_GET_VARM_REAL を使用してFORTRAN 宣言文 REAL RH(4,6) (次元のサイズと順番に注目)で表わされたNetCDF変数 rh を移項します。
INCLUDE 'netcdf.inc'
...
PARAMETER (NDIM=2) ! NetCDF変数のランク
INTEGER NCID ! NetCDFデータセットID
INTEGER STATUS ! 返しコード
INTEGER RHID ! 変数ID
INTEGER START(NDIM) ! NetCDF 変数スタート地点
INTEGER COUNT(NDIM) ! 内部配列のサイズ
INTEGER STRIDE(NDIM) ! NetCDF変数の部分サンプル間隔
INTEGER IMAP(NDIM) ! 内部配列の要素間距離
REAL RH(6,4) ! NetCDF変数の次元が置換されている点に注意
DATA START /1, 1/ ! 最初のNetCDF変数要素から開始
DATA COUNT /4, 6/ ! NetCDF変数全体; 順番はNetCDF変数に対応
! -- 内部配列ではない
DATA STRIDE /1, 1/ ! NetCDF要素を全てサンプル
DATA IMAP /6, 1/ ! 置換していなければ /1, 4/
...
STATUS = NF_OPEN('foo.nc', NF_NOWRITE, NCID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
...
STATUS = NF_INQ_VARID(NCID, 'rh', RHID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
...
STATUS = NF_GET_VARM_REAL(NCID, RHID, START, COUNT, STRIDE, IMAP, RH)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
関数 NF_GET_VARM_REAL を使用したこの別の例では、NetCDF変数の点を一つおきにアクセスして同じNetCDF変数を移項すると同時に部分サンプルします。
INCLUDE 'netcdf.inc'
...
PARAMETER (NDIM=2) ! NetCDF変数のランク
INTEGER NCID ! NetCDFデータセットID
INTEGER STATUS ! 返しコード
INTEGER RHID ! 変数ID
INTEGER START(NDIM) ! NetCDF変数のスタート地点
INTEGER COUNT(NDIM) ! 内部配列のサイズ
INTEGER STRIDE(NDIM) ! NetCDF変数の部分サンプル間隔
INTEGER IMAP(NDIM) ! 内部配列の要素間距離
REAL RH(3,2) ! (部分サンプルされた)次元の置換に注意
DATA START /1, 1/ ! 最初のNetCDF変数の値から開始
DATA COUNT /2, 3/ ! (部分サンプルされた)次元の順番はNetCDF変数に
!対応している -- 内部配列ではない
DATA STRIDE /2, 2/ ! NetCDF要素を一つおきにサンプル
DATA IMAP /3, 1/ ! 置換していなければ `1, 2'
...
STATUS = NF_OPEN('foo.nc', NF_NOWRITE, NCID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
...
STATUS = NF_INQ_VARID(NCID, 'rh', RHID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
...
STATUS = NF_GET_VARM_REAL(NCID, RHID, START, COUNT, STRIDE, IMAP, RH)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)