FortranのためのNetCDFユーザーのガイド
コアライブラリは、今書き込まれるANSI C .あなたは、このバージョンをコンパイルするためのANSI Cコンパイラを持っていなければならない。netCDF-2に使われたよりFORTRANインタフェースが異なる手法を使うCインタフェースの上で層にされる。
ライブラリを書き直すことは、いくらかの有意の利益を提供する改良されたC、及び、FORTRANインターフェースを実行する機会を提供した:
netCDFのインプリメントの他の変更は、改良された可搬性、保守性、及び、大部分のプラットホームでのパフォーマンスに帰着する。I/O、及び、タイプ層のクリーンな分離は、プラットホーム‐特定の最適化を促進する。新しいライブラリは、販売者‐供給されたことをもはや使わないXDRライブラリ ( netCDFを使い、そして、大部分の場合に著しくデータアクセスをスピードアップするプログラムを連結することを単純化する ) 。
!あらゆるタイプDOUBLE PRECISION DBUF ( NDATA )
REAL RBUF ( NDATA ) の値のためにバッファの大きい十分な量を使う
... .
等価 ( RBUF、DBUF )
、...。
INT XTYPE、現実のタイプのデータINT STATUSを保持するために、エラー状態のために!現実のデータタイプコールNCVINQ (
NCID、VARID、...、XTYPE、... ) を得る
... .
!その時データコールNCVGT (
NCID、VARID、スタート、カウント、DBUF、状態 ) IF ( STATUS .NE. NCNOERR )
を得る、プリント*は、データ、エラーコード='、状態を得ることができない!エラーとの取引
... .
ENDIF、かどうか ( XTYPE .EQ.
NCDOUBLE ) それからDANALYZE ( DBUF ) をELSEIF ( XTYPE .EQ. NCFLOAT ) その時コールRANALYZE (
RBUF ) と呼ぶ、
... .
ENDIF
ここでいかにあなたが新しいnetCDF-3と共にこれを扱うであろうかであるFORTRANインタフェース:
!私は、私の分析DOUBLE PRECISION DBUF ( NDATA )
INT STATUSのためにダブルを使うことを望む!従って、私は、ダブルとしてデータを得るファンクションを使う。
状態=
NF_GET_VARA_DOUBLE ( NCID、VARID、スタート、カウント、DBUF ) IF ( STATUS .NE. NF_NOERR )
、そして、プリント*は、データを得ることができない'、NF_STRERROR ( STATUS ) !エラーとの取引
...
.
ENDIFコールDANALYZE ( DBUF )
上の例は、ファンクション名、データタイプ変換、及び、エラーの扱いの変更を例証する (
下のセクションで詳細に論じられて ) 。
NF_RENAME_VAR
前のものの代りにNCVRENしなさい
。
netCDF-3全てFORTRANファンクション名前は、始まる、に関して、NF_
接頭辞。名前の第2の部分は、動詞、似た物である達する
、置かれる
INQ
( のために、尋ねる ) 、〜もしくは、開きなさい
。名前の第3の部分は、典型的に動詞のオブジェクトである:例えば薄暗くなる
バール
、〜もしくは、次元、変数、または、属性を扱うファンクションのためのATT
。変数のために、1つのキャラクタ変更子は、様々なI/Oオペレーションを区別するために、付加される、に、バール
:
バール
全体の変数アクセス
VAR1
1つの値アクセス
VARA
アレイ、または、アレイセクションアクセス
VARS
値のサブ‐サンプルへのstrid‐されたアクセス
VARM
メモリにおいて接触していない値にアクセスをマップした
テキスト
INT1
INT2
INT
真の
、〜もしくは、2倍になりなさい
。ファンクション名のこの部分は、あなたがあなたのプログラムに使っているデータ容器のタイプを示す:キャラクタストリング、1バイト整数等。
同じく、全て、大衆におけるPARAMETER名FORTRANインタフェース、接頭辞で始まる、NF_
。例えば、PARAMETER、である、以前は、MAXNCNAM
は、今であるNF_MAX_NAME
そして、前者FILFLOAT
は、今であるNF_FILL_FLOAT
。
以前に言及されたように、全ての古い名前は、まだ後方への互換性のためにサポートされる。
外部の数値タイプ、もしくは、外部の数値タイプへの変換が必要であるならば、それは、ライブラリによって扱われる。新しい外部のタイプが自然の一致する内部のタイプ ( 例えば ) がない満員のデータのために加えられるであろうとき、内部のデータタイプからの外部のデータ表現のこの自動変換、及び、分離は、netCDFバージョン4において更に重要になるであろう、11ビット値の配置。
ターゲットタイプが変換された値を表すことが可能ではないならば、1つの数値タイプから別のものに変わることは、エラーに帰着するかもしれない。(
netCDF-2においてそのようなオーバフローは、XDR層においてただ起こることができる。 ) 例えば、aREALは、データを外面に格納された状態に保つことができないかもしれない、〜同じくらい、NF_DOUBLE
( IEEE浮動少数点番号 )
。一連の値にアクセスしているとき、NF_ERANGE
1以上の値が再び‐人前へ出せる値の範囲が無いならば、エラーは、返される。しかし、他の値は、適切に変換される。
タイプ変換における精度の単なる損失がエラーを返さないことに注目しなさい。このように、あなたは、倍精度値を読んだかどうか、に、INTEGER、例えば、エラーなしは、生じる。倍精度値の大きさが再び‐人前へ出せるものを越えない限りは。変動する、のあなたのプラットホームでのINTEGERs。同様に、あなたは、大きい整数を読んだかどうか、に、全てのビットのその仮数における整数、精度のこの損失を表すことができないREALは、エラーに帰着しないであろう。あなたがそのような精度損失を回避することを望むならば、外部のタイプのあなたが互換性がある精度を持つ内部のタイプを使うことを確認するためにあなたがアクセスする変数を照合しなさい。
新しいインタフェースは、小さい整数を表すことを意図している8ビットバイトの配置からのテキストストリングを表すことを意図しているキャラクタの配置を区別する。そのインタフェースは、内部のタイプを支えるテキストストリングのためのものであるCHARACTER、及び、INT1そして、1バイト整数。
新しいインタフェースにおいて、ファンクションは、整数状態 ( 成功または失敗ばかりでなくエラーの原因もを示す ) を返す。そのライブラリは、決して何でもプリントしようとしないであろう、そして、それは、決して何でもプリントしようとしないであろう、出口
を呼ぶ
( あなたがnetCDFバージョン2つの互換性のファンクションを使っていない限りは )
。あなたは、ファンクションリターン状態をチェックし、そして、自分でこれをしなければならないであろう。我々は、netCDFが使われる環境について仮定の数を減少させるのと同様に、きれいにパラレル
( マルチプロセッサ )
実行をサポートすることのためにこれらのglobalsを消去した。新しい行動は、netCDFをそれら自身のGUIインタフェースを持つアプリケーションにおける隠された層として使うために更に良いサポートをするべきである。
NCLONG
そして、NF_INT
NCLONG
NF_INT
、その代りに。NCLONG
は、同じ価値を持つために、定義される、〜同じくらい、それ以外の後方への互換性のためのNF_INT
は、新しいコードに使われるべきでない。64ビット整数のために長く使用する新しい64ビットプラットフォームに関して、この名前衝突によって引き起こされた混乱を減少させたい。まだ64ビット整数と一致するnetCDFの外部のデータタイプがないことに注目しなさい。
NCTLEN
ファンクション。内部の、そして外部のタイプ、及び、新しいタイプ‐変換インタフェースの分離、作る、NCTLENする
不必要な。ユーザーの読取り以来、に、そして、生来のタイプから書く、生来のタイプのために必要とされるスペースの知識は、全くどのくらいのスペースを値に割当てるかを決定するのに十分である。
前のライブラリにおいて、netCDFオブジェクトのために使われるキャラクタがCDL制限と互換性があったかどうかチェックすることができなかった。さてncdumpそしてユーティリティをncgenするそれ、使用CDLは、文字数字両用のキャラクタのみ、「_
」を可能にするそして-
names.において、この制限は、新しい次元、変数、及び、attributes.
Previouslyの創造のためのライブラリによって同じく強化される、あまり制限的でない名前を持つ現存するコンポーネントは、まだ働くであろう問題ない。
NF_INQ_LIBVERS
そして、NF_STRERRORに
。使用中のnetCDFライブラリのバージョンは、ストリングとして返されるNF_INQ_LIBVERS
.netCDFファンクションコールによって返された状態と一致するエラーメッセージは、ストリングとして返される、によって、NF_STRERRORに
機能しなさい。
新しい、NF_SHARE
フラグは、利用可能である、使用のために、で、NF_OPEN
、〜もしくは、アクセスのデフォルトバッファリングを抑制するために、NF_CREATE
は、呼ぶ。使用、の、NF_SHARE
netCDF
dataset方法への同時に起こるアクセスのために、あなたが呼ぶ必要はないNF_SYNC
全てのアクセスの後では、そのディスク最新情報は、確認するために、同期である。それは、付属のデータへの変更がによって属性の値のように自動的に増殖させられないノートにとって重要である、使用する、の、NF_SHARE
は、だらりと垂れる。使用、の、NF_SYNC
ファンクションがまだこの目的のために必要とされる。
バージョン2インタフェースは、1つの問合せファンクションを持っていた、名前、タイプ、及び、変数の形を得るためのNCVINQ
。同様に、1つの問合せファンクションのみが、次元、属性、または、netCDF
datasetに関する情報を得ることに利用可能であった。あなたのみがこの情報のサブセットを必要としたとき、あなた、持つ、供給する、必要とされない情報のためのplaceholdersとしてのダミー引数。新しいインタフェース、含む、追加の、ファンクションを尋ねる、戻る、各アイテム、従って、別々に、エラーは、引数を誤算することからあまり可能性がない。
前のインプリメントは、エラーを返した、0‐貴重なカウントコンポーネントは、指定されたNCVPT
、そして、NCVGT
は、呼ぶ。この制限は、解除された。従って、今それは、機能する、で、NF_PUT_VAR
、そして、NF_GET_VAR
、アクセスされたデータなしに帰着して、ファミリーは、0‐貴重なカウントコンポーネントと共に呼ばれるかもしれない。これが無益なように思われるかもしれないが、それは、いくらかのプログラムを単純化する、に、ない、0‐貴重なカウントを特別なケースのように扱う。
同じ次元がncvardefにおいて変数の形を指定する際1回以上使われたとき、前のインプリメントは、エラーを返した。この制限は、netCDF-3インプリメントにおいて緩和される。なぜなら、2度同じ次元を使うことが意味をなす所で、オート‐相関行列が良い例であるからだ。
新しいインタフェースにおいて、ユニット、のために、IMAP
引数、に、NF_PUT_VARM
、そして、NF_GET_VARM
netCDFにおいてバージョン‐2がアクセスインタフェースをマップしたので、ファンクションのファミリーは、今バイトではなく所望の内部のタイプのデータエレメントの数に関している。
下記は、一致するnetCDF-3ファンクションのnetCDF-2ファンクション名、及び、名前のテーブルである。netCDF-2ファンクションのパラメータリストのために、netCDF-2 User Guideを見なさい。
NCABOR
| NF_ABORT
|
NCACPY
| NF_COPY_ATT
|
NCADEL
| NF_DEL_ATT
|
NCAGT
| NF_GET_ATT_DOUBLE、NF_GET_ATT_REALなNF_GET_ATT_INT、NF_GET_ATT_INT1、NF_GET_ATT_INT2
|
NCAGTC
| NF_GET_ATT_TEXT
|
NCAINQ
| NF_INQ_ATT、NF_INQ_ATTID、NF_INQ_ATTLEN、NF_INQ_ATTTYPE
|
NCANAM
| NF_INQ_ATTNAME
|
NCAPT
| NF_PUT_ATT_DOUBLE、NF_PUT_ATT_REALなNF_PUT_ATT_INT、NF_PUT_ATT_INT1、NF_PUT_ATT_INT2
|
NCAPTC
| NF_PUT_ATT_TEXT
|
NCARENする
| NF_RENAME_ATT
|
NCCLOS
| NF_CLOSE
|
NCCRE
| NF_CREATE
|
NCDDEF
| NF_DEF_DIM
|
NCDID
| NF_INQ_DIMID
|
NCDINQ
| NF_INQ_DIM、NF_INQ_DIMLEN、NF_INQ_DIMNAME
|
NCDRENする
| NF_RENAME_DIM
|
NCENDF
| NF_ENDDEF
|
NCGOPT
| ( 何も )
|
NCINQ
| NF_INQ、NF_INQ_NATTS、NF_INQ_NDIMS、NF_INQ_NVARS、NF_INQ_UNLIMDIM
|
NCOPN
| NF_OPENする
|
NCPOPT
| ( 何も )
|
NCREDF
| NF_REDEF
|
NCSFIL
| NF_SET_FILL
|
NCSNC
| NF_SYNC
|
NCTLENする
| ( 何も )
|
NCVDEF
| NF_DEF_VAR
|
NCVG1C
| NF_GET_VAR1_TEXT
|
NCVGGC
| NF_GET_VARM_TEXT、NF_GET_VARS_TEXT
|
NCVGT
| NF_GET_VARA_DOUBLE、NF_GET_VARA_REALなNF_GET_VARA_INT、NF_GET_VARA_INT1、NF_GET_VARA_INT2
|
NCVGT1
| NF_GET_VAR1_DOUBLE、NF_GET_VAR1_REALなNF_GET_VAR1_INT、NF_GET_VAR1_INT1、NF_GET_VAR1_INT2
|
NCVGTC
| NF_GET_VARA_TEXT
|
NCVGTG
| NF_GET_VARM_DOUBLE、NF_GET_VARM_REALなNF_GET_VARM_INT、NF_GET_VARM_INT1、NF_GET_VARM_INT2、NF_GET_VARS_DOUBLE、NF_GET_VARS_REALなNF_GET_VARS_INT、NF_GET_VARS_INT1、NF_GET_VARS_INT2
|
NCVID
| NF_INQ_VARID
|
NCVINQ
| NF_INQ_VAR、NF_INQ_VARDIMID、NF_INQ_VARNAME、NF_INQ_VARNATTS、NF_INQ_VARNDIMS、NF_INQ_VARTYPE
|
NCVP1C
| NF_PUT_VAR1_TEXT
|
NCVPGC
| NF_PUT_VARM_TEXT、NF_PUT_VARS_TEXT
|
NCVPT
| NF_PUT_VARA_DOUBLE、NF_PUT_VARA_REALなNF_PUT_VARA_INT、NF_PUT_VARA_INT1、NF_PUT_VARA_INT2
|
NCVPT1
| NF_PUT_VAR1_DOUBLE、NF_PUT_VAR1_REALなNF_PUT_VAR1_INT、NF_PUT_VAR1_INT1、NF_PUT_VAR1_INT2
|
NCVPTC
| NF_PUT_VARA_TEXT
|
NCVPTG
| NF_PUT_VARM_DOUBLE、NF_PUT_VARM_REALなNF_PUT_VARM_INT、NF_PUT_VARM_INT1、NF_PUT_VARM_INT2、NF_PUT_VARS_DOUBLE、NF_PUT_VARS_REALなNF_PUT_VARS_INT、NF_PUT_VARS_INT1、NF_PUT_VARS_INT2
|
NCVRENする
| NF_RENAME_VAR
|
( 何も )
| NF_INQ_LIBVERS
|
( 何も )
| NF_STRERRORに |