FortranのためのNetCDFユーザーのガイド
BNFを使って、そのフォーマットが最初に正式に提示される文法表記法。文法において、任意のコンポーネントは、中括弧 (
[ and ] ) の間に囲まれている。コメントは、` //
'キャラクターに従う。非ターミナルは、小文字にあり、そして、ターミナルは、大文字にある。ゼロのシーケンス、または、実体の更に多くの出来事は、[実体...
]
表示される`。
NC_BYTE 1 NC_CHAR 1 NC_SHORT 2 NC_INT 4 NC_FLOAT 4 NC_DOUBLE
8
コールに関して、に、NF_OPEN ( 、〜もしくは、NF_ENDDEF )
、変数の配置によるスキャンは、上のvar_arrayを表示し、そして、recsizeすると推定するための「レコード」変数のvsizeフィールドを合計する。
右からレコード変数のために最も左の ( レコード ) 次元を飛ばす、そして、結果を各変数のための製品アレイに格納する左まで変数のために次元長さの製品を形成しなさい。例えば:
変数を記録しないでください:
次元の長さ:[ 5 3 2 7 ]、製品、[ 210 42 14 7
]
変数を記録しなさい:
次元の長さ:[ 0 2 9 4 ]、製品、[ 0 72 36 4
]
この点で、4の次の倍数に切り上げられたとき、最も左の製品は、上の文法において変数サイズ、vsizeである。例えば、上の非レコード変数において、vsizeフィールドの値は、212である
( 210 4の倍数に切り上げられる ) 。レコード変数のために、これが既に4の倍数であるので、vsizeの値は、ほんの72である。
coordに一連の所望のデータ値の座標でさせ、そして、相殺されて、所望の結果にしなさい。それから、オフセットは、単にcoord、及び、製品ベクトル、掛けるサイズの内積に加えられた所望の変数
( その、フィールドを始める ) の最初のデータ値のファイルオフセットである ( 変数のための各データのバイトで )
。最終的に、その変数がレコード変数、レコード番号、` coord[0]
'、及び、レコードサイズの製品がrecsizeすることであるかどうかは、最終のオフセット値をもたらすために、加えられる。
偽りの‐Cコードにおいて、ここにオフセットの計算がある:
innerProduct += product[i]のために ( innerProduct = i = 0 ; i <
var.rank ; i++ ) 、* coord[i]は、= var.beginを相殺した;
offset += external_sizeof *
innerProduct if ( IS_RECVAR ( var ) ) offset += coord[0] * recsize ;
.
従って、データを得るために、以下を評価しなさい ( 外部の表現において ) 。
lseek ( fd、オフセット、SEEK_SET ) ;
read ( fd、buf、external_sizeof )
;
特別なケース:ちょうど1つのレコード変数がある所で、我々は、各々が示す制限を落とす、並べられた4バイトである、それほどこの場合、レコードパディングがない。
netcdfは、移す{ }
これあなたがCDL表現からそれを生成するために`
ncgen -b empty.cdl
'を使うことによって証明するかもしれないように、空のnetCDFファイルは、32バイトを持っている。それは、4バイト「魔法数」 (
それがnetCDFバージョン1ファイルであると確認する )
によって始まる:'C'、'D'、'F'、'\001'。下記は、レコード、空の一連の次元、空の一連のグローバルな属性の数、及び、空の一連の変数を表す7
32ビット整数ゼロである。
下記は、Unixコマンドを使うビッグエンディアンマシン上で作られたファイルの ( 編集される ) ダンプである
od -xcs
empty.nc
ファイルの各16バイト部分は、4行によって表示される。最初のラインは、16進においてバイトを示す。第2のラインは、キャラクタとしてバイトを示す。第3のラインは、各一群の署名された16ビット整数と解釈された2バイトを示す。第4のライン
( 人間によって加えられる ) は、netCDFコンポーネント、及び、値に関してバイトの解釈を提示する。
4344 4601 0000 0000 0000 0000 0000 0000 C D F 001 \0 \0 \0 \0 \0 \0
\0 \0 \0 \0 \0 \0 17220 17921 00000 00000 00000 00000 00000 00000 [ magic number
] [ 0 records ] [ 0 dimensions ( ABSENT ) ]
0000 0000 0000 0000 0000 0000
0000 0000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 00000 00000 00000
00000 00000 00000 00000 00000 [ 0 global atts ( ABSENT ) ] [ 0 variables (
ABSENT ) ]
僅かにあまりささいでない例としてCDLを考察する
netcdfの小さい{次元:
= 5を薄暗くしなさい;
変数:
短いvx ( dim ) ;
データ:
vx
= 3、1、4、1、5 ;
}
92バイトnetCDFファイルと一致する。下記は、このファイルの編集されたダンプである:
4344 4601 0000 0000 0000 000a 0000 0001 C D F 001 \0 \0 \0 \0 \0 \0
\0 \n \0 \0 \0 001 17220 17921 00000 00000 00000 00010 00000 00001 [ magic
number ] [ 0 records ] [ NC_DIMENSION ] [ 1 dimension ]
0000 0003 6469
6d00 0000 0005 0000 0000 \0 \0 \0 003 d i m \0 \0 \0 \0 005 \0 \0 \0 \0 00000
00003 25705 27904 00000 00005 00000 00000 [ 3 char name =「dim」] [ size = 5 ] [ 0
global atts
0000 0000 0000 000b 0000 0001 0000 0002 \0 \0 \0 \0 \0 \0 \0
013 \0 \0 \0 001 \0 \0 \0 002 00000 00000 00000 00011 00000 00001 00000 00002 (
ABSENT ) ] [ NC_VARIABLE ] [ 1 variable ] [ 2 char name =
7678 0000 0000
0001 0000 0000 0000 0000 v x \0 \0 \0 \0 \0 001 \0 \0 \0 \0 \0 \0 \0 \0 30328
00000 00000 00001 00000 00000 00000 00000「vx」] [ 1 dimension ] [ with ID 0 ] [ 0
attributes
0000 0000 0000 0003 0000 000c 0000 0050 \0 \0 \0 \0 \0 \0 \0
003 \0 \0 \0 \f \0 \0 \0 P 00000 00000 00000 00003 00000 00012 00000 00080 (
ABSENT ) ] [ type NC_SHORT ] [ size 12 bytes ] [ offset : 80 ]
0003 0001
0004 0001 0005 8001 \0 003 \0 001 \0 004 \0 001 \0 005 200 001 00003 00001 00004
00001 00005 -32767 [ 3 ] [ 1 ] [ 4 ] [ 1 ] [ 5 ] [ fill ]