関数 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(*),
INTEGER FUNCTION NF _PUT_VARM_INT1 (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER FUNCTION NF _PUT_VARM_INT2 (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER FUNCTION NF _PUT_VARM_INT (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER FUNCTION NF _PUT_VARM_REAL (INTEGER NCID, INTEGER VARID,
INTEGER START(*), INTEGER COUNT(*),
INTEGER STRIDE(*), INTEGER IMAP(*),
INTEGER FUNCTION NF _PUT_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 の最後の要素が書き込む記録数の総計に対応します。 |
|
NetCDF変数の各次元に対してのサンプリング間隔を指定する整数のベクトル。 ストライドベクトルの要素はNetCDF変数の次元に順番に対応します。(STRIDE(1) はNetCDF変数の次元の中で最も早く変化する次元のサンプリング間隔を与えます。)サンプリング間隔は型独立の要素の単位 で示されています。(値が1の場合には対応する次元に沿って隣接するNetCDF変数をアクセスし、値が2の場合には対応する次元の1つおきの値にアクセスします。 |
|
NetCDF変数と内部データ配列のメモリ内構造間のマッピングを指定する整数ベクトル。インデックスマッピングベクトルの要素はNetCDF変数の次元と順番に対応します。(IMAP(1)はNetCDF変数の次元のうち、最も早く変化する次元に対応する内部配列の要素間の距離を与えます。)要素間の距離は要素の単位で示されます。(メモリ内で隣接している位置にある内部要素間の距離は1であり、NetCDF 2の場合のように要素のバイト長ではありません。) |
|
書き込まれるデータ値。データの型は呼び出された関数に適当な型でなければなりません。 文字(CHARACTER) データを数値変数に、又は数値データを文字変数に入れることは出来ません。数値データについては、データ型がNetCDF変数型と異なる場合には型変換が行われます。 (詳細については型変換を参照してください。) |
エラーが発生していない場合には関数 NF_PUT_VARM_ type は NF_NOERR の値を返します。それ以外の場合には、返されたステータスがエラーが発生したことを示します。エラーの原因としては:
以下の 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)