TOC PREV NEXT INDEX

Put your logo here!


7.14 マップされた配列の値を読む: NF_GET_VARM_ type


関数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(*),
CHARACTER*(*) text)
INTEGER FUNCTION NF _GET_VARM_INT1 (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER*1 i1vals(*))
INTEGER FUNCTION NF _GET_VARM_INT2 (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER*2 i2vals(*))
INTEGER FUNCTION NF _GET_VARM_INT (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER ivals(*))
INTEGER FUNCTION NF _GET_VARM_REAL (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
REAL rvals(*))
INTEGER FUNCTION NF _GET_VARM_DOUBLE(INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
DOUBLE dvals(*))
NCID 以前のNF_OPENまたはNF_CREATE呼び出しで返されたNetCDF ID
VARID 変数ID
START 最初にデータ値が読み取られる変数内のインデックスを指定する整数のベクトル。インデックスは1に相対的なので、変数の最初のデータ値のインデックスは(1, 1, …, 1)となります。STARTの要素は変数の次元と順番に対応していなければなりません。従って、記録変数の場合には、最後のインデックスがデータ値を読み込む開始記録番号となります。
COUNT 各次元に沿って幾つのインデックスが選定されるかを指定する整数ベクトル。例えば単一の値を読み取る場合には、count(1, 1, … , 1)と指定して下さい。countの要素は変数の次元に順番に対応します。よって、記録変数の場合にはcountの最後の要素が読み取る記録数の総計に対応します。
STRIDE 各次元で選定されたインデックスの間隔を示す整数ベクトル、もしくはゼロの値。ベクトルの要素は変数の次元に順番に対応します。値が1の場合には対応するNetCDF変数の隣接した値にアクセスします。値が2の場合には対応するNetCDF変数の値を一つおきにアクセスします。引数0(1, 1, …, 1)として扱われます。
IMAP NetCDF変数の次元と内部データ配列とのメモリ内構造間のマッピングを指定する整数ベクトル。IMAP(1)は最も早く変化するNetCDF変数の次元に対応する内部配列の要素と要素間の距離を示します。IMAP(N)は(NはNetCDF変数のランク)最も遅く変化するNetCDF変数の次元に対応する内部配列の要素と要素の間の距離を示します。この二つIMAPの要素間にある他の要素が他のNetCDF変数の次元に対応することは自明です。要素間の距離は要素の型独立の単位で指定されます。(隣接する位置にある内部メモリ間の距離は1であり、NetCDF2のように要素のバイト長ではありません。)
text, i1vals, i2vals, ivals,rvals, dvals 読み込まれるデータ値のかたまり。。データの型は呼び出された関数に適当な型でなければなりません。文字(CHARACTER)データを数値変数から、または数値データを文字変数から読み取ることは出来ません。数値データについては、データ型がNetCDF変数型と異なる場合には型変換が行われます。詳細は3.3節「型変換」(p.24)を参照して下さい。

エラー

エラーが発生していなければ、関数NF_GET_VARM_ typeNF_NOERRの値を返します。その他の場合は返されたステータスがエラーの発生を示します。エラーの原因としては:

・ 変数IDが指定されたNetCDFファイルでは有効ではない。
・ 指定されたSTART, COUNTSTRIDEでは範囲外のインデックスを生成してしまう。IMAPベクトルではエラーチェックができないことに注意してください。
・ 一つもしくはそれ以上の値が要求された型で表現し得る範囲外である。
・ 指定されたNetCDFがデータモードではなく定義モードになっている。
・ 指定されたNetCDF IDがオープンされた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)



Quadralay Corporation
http://www.webworks.com
Voice: (512) 719-3399
Fax: (512) 719-3606
sales@webworks.com
TOC PREV NEXT INDEX