7.12 値の配列を読む: NF_GET_VARA_ type
関数NF_GET_VARA_ typeのファミリーはオープンされたNetCDFファイルの変数から値の配列を読み取ります。配列は隅の位置と各辺の長さを表わすベクトルを与えて指定します。値は最初の次元が最も早く変化するように、次々と読み込まれます。
用法
INTEGER FUNCTION NF_GET_VARA_TEXT(INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
CHARACTER*(*) text)
INTEGER FUNCTION NF_GET_VARA_INT1(INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER*1 i1vals(*))
INTEGER FUNCTION NF_GET_VARA_INT2(INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER*2 i2vals(*))
INTEGER FUNCTION NF_GET_VARA_INT (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER ivals(*))
INTEGER FUNCTION NF_GET_VARA_REAL(INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
REAL rvals(*))
INTEGER FUNCTION NF_GET_VARA_DOUBLE(INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
DOUBLE dvals(*))
NCID 以前のNF_OPEN または NF_CREATE呼び出しで返されたNetCDF ID VARID 変数ID START 最初にデータ値が読み取られる変数内のインデックスを指定する整数のベクトル。インデックスは1に相対的なので、変数の最初のデータ値のインデックスは(1, 1, …, 1)となります。START の長さは指定された変数の次元と一致していなければなりません。START の要素は変数の次元と順番に対応していなければなりません。従って、記録変数の場合には、最後のインデックスがデータ値を読み込む開始記録番号となります。 COUNT 読み込まれるデータのかたまりの各次元に沿った辺の長さを指定する整数のベクトル。単一のデータ値を読み込む場合には、COUNTを(1, 1, …, 1)と指定します。COUNT の長さは指定された変数の次元の数と一致します。 COUNTの要素は変数の次元に順番に対応します。従って、記録変数の場合には、COUNTの最後の要素が書き込む記録数の総計に対応します。 text, i1vals, i2vals, ivals,rvals, dvals 読み込まれるデータ値のかたまり。。データの型は呼び出された関数に適当な型でなければなりません。文字(CHARACTER)データを数値変数から、または数値データを文字変数から読み取ることは出来ません。数値データについては、データ型がNetCDF変数型と異なる場合には型変換が行われます。 (詳細については3.3節「型変換」(p.24)を参照して下さい。
エラー
エラーが発生していなければ、関数NF_GET_VARA_ typeはNF_NOERRの値を返します。それ以外の場合は、返されたステータスがエラーを示します。エラーの原因としては:
・ 変数IDが指定されたNetCDFファイルに対して有効ではない。
・ 指定された隅のインデックスが指定された変数のランクの範囲外であった。例えば、負のインデックス、もしくは対応する次元の長さよりも大きいインデックスなどを与えるとエラーが発生する。
・ 指定された縁の長さを指定された隅に加えると、参照すべきデータ値が指定された変数のランクの範囲外になってしまう。例えば、指定された次元長よりも大きい縁の長さから隅のインデックスを引くとエラーを生じる。
・ 値の一つもしくはそれ以上が望まれる型で表現できる値の範囲外になってしまう。
・ 指定されたNetCDFファイルがデータモードではなく定義モードになっている。
・ 指定されたNetCDF IDがオープンされたNetCDFファイルを参照しない。
例
この例ではNF_GET_VARA_DOUBLEを使用して、既存のNetCDFファイルfoo.ncの変数rhの値をすべて読み取ります。簡潔にするためにこの例では、変数rhの次元がlon, latとtimeであり、lon値は10個、lat値は5個、そしてtime値が3個あることを既知とします。
INCLUDE 'netcdf.inc'
…
PARAMETER (NDIMS=3) ! 次元の数
PARAMETER (TIMES=3, LATS=5, LONS=10) ! 次元長
INTEGER STATUS, NCID
INTEGER RHID ! 変数ID
INTEGER START(NDIMS), COUNT(NDIMS)
DOUBLE RHVALS(LONS, LATS, TIMES)
DATA START /1, 1, 1/ ! 最初の値から開始
DATA COUNT /LONS, LATS, TIMES/ ! すべての値を取得
…
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_VARA_DOUBLE (NCID, RHID, START, COUNT, RHVALS)
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 |