TOC PREV NEXT INDEX

Put your logo here!


7.9 マップされた配列の値を書き込む: NF_PUT_VARM_ type


関数NF_PUT_VARM_ typeのファミリーはマップされた配列断面の値をオープンされたNetCDFファイルの変数に書き込んでいきます。マップされた配列断面は隅の位置・カウントのベクトル・ ストライドベクトル・ インデックスマッピングベクトルを与えることによって指定されます。インデックスマッピングベクトルとは整数のベクトルで、NetCDF変数の次元と内部データ配列のメモリ内構造間のマッピングを指定するベクトルです。データ配列に関する次元の順番や長さに関する仮定は一切なされません。NetCDFファイルはデータモードになっていなければなりません。

用法
INTEGER FUNCTION NF _PUT_VARM_TEXT (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
CHARACTER*(*) TEXT)
INTEGER FUNCTION NF _PUT_VARM_INT1 (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER*1 I1VALS(*))
INTEGER FUNCTION NF _PUT_VARM_INT2 (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER*2 I2VALS(*))
INTEGER FUNCTION NF _PUT_VARM_INT (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER IVALS(*))
INTEGER FUNCTION NF _PUT_VARM_REAL (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
REAL RVALS(*))
INTEGER FUNCTION NF _PUT_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 NetCDF変数の各次元に対してのサンプリング間隔を指定する整数のベクトル。 ストライドベクトルの要素はNetCDF変数の次元に順番に対応します。(STRIDE(1) はNetCDF変数の次元の中で最も早く変化する次元のサンプリング間隔を与えます。)サンプリング間隔は型独立の要素の単位 で示されています。(値が1の場合には対応する次元に沿って隣接するNetCDF変数をアクセスし、値が2の場合には対応する次元の1つおきの値にアクセスします。)
IMAP NetCDF変数と内部データ配列のメモリ内構造間のマッピングを指定する整数ベクトル。インデックスマッピングベクトルの要素はNetCDF変数の次元と順番に対応します。(IMAP(1)はNetCDF変数の次元のうち、最も早く変化する次元に対応する内部配列の要素間の距離を与えます。)要素間の距離は要素の単位で示されます。(メモリ内で隣接している位置にある内部要素間の距離は1であり、NetCDF 2の場合のように要素のバイト長ではありません。)
TEXT, I1VALS, I2VALS, IVALS,RVALS, DVALS 書き込まれるデータ値。データの型は呼び出された関数に適当な型でなければなりません。文字(CHARACTER)データを数値変数に、または数値データを文字変数に入れることは出来ません。数値データについては、データ型がNetCDF変数型と異なる場合には型変換が行われます。 (詳細については3.3節「型変換」(p.24)を参照してください。)

エラー

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

・ 変数IDが指定されたNetCDFファイルに対して有効ではない。
・ 指定された START, COUNT 及び STRIDE では範囲外のインデックスを生じてしまう。IMAPベクトルにおいてはエラーチェックができないことに注意してください。
・ 指定された値のうち、少なくとも一つが変数の外部データ型で表現可能な値の範囲外である。
・ 指定されたNetCDFファイルがデータモードではなく定義モードになっている。
・ 指定されたNetCDF IDがオープンされたNetCDFファイルを参照しない。

以下の IMAPベクトルは2x3x4 NetCDF変数と同じ形の内部配列を簡潔な方法でマップします。

REAL A(2,3,4) ! NetCDF変数と同じ形
INTEGER IMAP(3)
DATA IMAP /1, 2, 6/ ! NetCDF次元 要素間距離
! ---------------- ----------------------
! 最も早く変化 1
! 中間 2 (=IMAP(1)*2)
! 最も遅く変化 6 (=IMAP(2)*3)

上記の例で IMAP ベクトルとあわせて NF_PUT_VARM_REAL 使用すると、単にNF_PUT_VAR_REALを使用した場合と同じ結果が得られます。

この例では NF_PUT_VARM_REAL を使用して、転置された内部配列から、NetCDF変数rhを書きます。変数 rh は FORTRAN宣言文 REAL RH(4,6) で定義されています。(次元の大きさに注意してください。)

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_WRITE, 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_PUT_VARM_REAL(NCID, RHID, START, COUNT, STRIDE, IMAP, RH)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)

この例では NF_PUT_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_WRITE, 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_PUT_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