[次] [性急過ぎる ] [トップ ] [内容 ] [インデックス ] [ netCDFホームページ ] [ユニ‐データホームページ]

FortranのためのNetCDFユーザーのガイド

アペンディクスDNetCDF 2FORTRAN遷移ガイド


概観、の、FORTRANインタフェース変更

NetCDFバージョン3は、netCDFライブラリの完全なリライトを含む。それは、前のバージョンと比較して2倍ほぼ速い。netCDFファイルフォーマットは、変わらない。従って、バージョン3によって書かれたファイルは、逆もまた同じであるがバージョン2コードによって読まれ得る。

コアライブラリは、今書き込まれるANSI C .あなたは、このバージョンをコンパイルするためのANSI Cコンパイラを持っていなければならない。netCDF-2に使われたよりFORTRANインタフェースが異なる手法を使うCインタフェースの上で層にされる。

ライブラリを書き直すことは、いくらかの有意の利益を提供する改良されたC、及び、FORTRANインターフェースを実行する機会を提供した:

バージョン2を使うプログラムを書き直すことは、必要ではないFORTRANインタフェース、 ( なぜなら、netCDF-3ライブラリがaを含むからだ ) 後方への互換性のインタフェース ( 全ての古いファンクション、globals、及び、行動をサポートする ) 。我々は、新しいインタフェースの利益が新しいnetCDFアプリケーションにそれを使う動機であろうことを願っている。増加する‐に古いアプリケーションを新しいインターフェースに変換することは、可能である ( netCDF-2コールを一致するnetCDF-3コールものと一度に交換して ) 。

netCDFのインプリメントの他の変更は、改良された可搬性、保守性、及び、大部分のプラットホームでのパフォーマンスに帰着する。I/O、及び、タイプ層のクリーンな分離は、プラットホーム‐特定の最適化を促進する。新しいライブラリは、販売者‐供給されたことをもはや使わないXDRライブラリ ( netCDFを使い、そして、大部分の場合に著しくデータアクセスをスピードアップするプログラムを連結することを単純化する ) 。

新しいものFORTRANインタフェース

第1、ここに例がある、の、netCDF-2インタフェースを使うFORTRANコード:



!あらゆるタイプ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 )
上の例は、ファンクション名、データタイプ変換、及び、エラーの扱いの変更を例証する ( 下のセクションで詳細に論じられて ) 。

規定を指定するファンクション

netCDF-3 Cライブラリは、netCDFプログラムを更に読みやすくすることを意図している新しいネーミング規定を使う。例えば、変数を改名するためのファンクションの名前は、今であるNF_RENAME_VAR前のものの代りにNCVRENしなさい

netCDF-3全てFORTRANファンクション名前は、始まる、に関して、NF_接頭辞。名前の第2の部分は、動詞、似た物である達する置かれるINQ ( のために、尋ねる ) 、〜もしくは、開きなさい。名前の第3の部分は、典型的に動詞のオブジェクトである:例えば薄暗くなるバール、〜もしくは、次元、変数、または、属性を扱うファンクションのためのATT。変数のために、1つのキャラクタ変更子は、様々なI/Oオペレーションを区別するために、付加される、に、バール:

変数、及び、属性のファンクションのための名前の終りで、最終弁論のタイプを示すコンポーネントがある:テキストINT1INT2INT真の、〜もしくは、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_ERANGE1以上の値が再び‐人前へ出せる値の範囲が無いならば、エラーは、返される。しかし、他の値は、適切に変換される。

タイプ変換における精度の単なる損失がエラーを返さないことに注目しなさい。このように、あなたは、倍精度値を読んだかどうか、に、INTEGER、例えば、エラーなしは、生じる。倍精度値の大きさが再び‐人前へ出せるものを越えない限りは。変動する、のあなたのプラットホームでのINTEGERs。同様に、あなたは、大きい整数を読んだかどうか、に、全てのビットのその仮数における整数、精度のこの損失を表すことができないREALは、エラーに帰着しないであろう。あなたがそのような精度損失を回避することを望むならば、外部のタイプのあなたが互換性がある精度を持つ内部のタイプを使うことを確認するためにあなたがアクセスする変数を照合しなさい。

新しいインタフェースは、小さい整数を表すことを意図している8ビットバイトの配置からのテキストストリングを表すことを意図しているキャラクタの配置を区別する。そのインタフェースは、内部のタイプを支えるテキストストリングのためのものであるCHARACTER、及び、INT1そして、1バイト整数。

エラーの扱い

新しいインタフェースは、netCDF-2と異ってエラーを扱う。古いインタフェースにおいて、デフォルト行動、いつエラーが検出されたかは、エラーメッセージ、及び、出口をプリントすることであった。エラーのコントロールを扱えさせるためにあなたがそうしなければならなかったファンクションをNCPOPTと呼ぶ、そうすれば、あなたは、あなたがエラーの原因を決定するために、値をテストしなければならなかった、の、返されたエラーパラメータ。

新しいインタフェースにおいて、ファンクションは、整数状態 ( 成功または失敗ばかりでなくエラーの原因もを示す ) を返す。そのライブラリは、決して何でもプリントしようとしないであろう、そして、それは、決して何でもプリントしようとしないであろう、出口を呼ぶ ( あなたがnetCDFバージョン2つの互換性のファンクションを使っていない限りは ) 。あなたは、ファンクションリターン状態をチェックし、そして、自分でこれをしなければならないであろう。我々は、netCDFが使われる環境について仮定の数を減少させるのと同様に、きれいにパラレル ( マルチプロセッサ ) 実行をサポートすることのためにこれらのglobalsを消去した。新しい行動は、netCDFをそれら自身のGUIインタフェースを持つアプリケーションにおける隠された層として使うために更に良いサポートをするべきである。

NCLONGそして、NF_INT

どこで、netCDF-2インタフェースは、使用したか32ビット整数、新しいインタフェース使用と一致する外部のデータタイプを確認するためのNCLONGNF_INT、その代りに。NCLONGは、同じ価値を持つために、定義される、〜同じくらい、それ以外の後方への互換性のためのNF_INTは、新しいコードに使われるべきでない。64ビット整数のために長く使用する新しい64ビットプラットフォームに関して、この名前衝突によって引き起こされた混乱を減少させたい。まだ64ビット整数と一致するnetCDFの外部のデータタイプがないことに注目しなさい。

何が、欠けているか?

ファンクション一致がない、に、バージョン2インタフェースからのNCTLENファンクション。内部の、そして外部のタイプ、及び、新しいタイプ‐変換インタフェースの分離、作る、NCTLENする不必要な。ユーザーの読取り以来、に、そして、生来のタイプから書く、生来のタイプのために必要とされるスペースの知識は、全くどのくらいのスペースを値に割当てるかを決定するのに十分である。

前のライブラリにおいて、netCDFオブジェクトのために使われるキャラクタがCDL制限と互換性があったかどうかチェックすることができなかった。さてncdumpそしてユーティリティをncgenするそれ、使用CDLは、文字数字両用のキャラクタのみ、「_」を可能にするそして- names.において、この制限は、新しい次元、変数、及び、attributes. Previouslyの創造のためのライブラリによって同じく強化される、あまり制限的でない名前を持つ現存するコンポーネントは、まだ働くであろう問題ない。

他の変更

netCDF-2ファンクションと全く一致しないnetCDF-3に2つの新しいファンクションがある: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_VARMnetCDFにおいてバージョン‐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に

FORTRANインタフェース変更の概観
新しいFORTRANインタフェース
規定を指定するファンクション
タイプ変換
エラーの扱い
NCLONG、及び、NF_INT
何が、欠けているか?
他の変更

FortranのためのNetCDFユーザーのガイド- 1997年6月5日
[次] [性急過ぎる ] [トップ ] [内容 ] [インデックス ] [ netCDFホームページ ] [ユニ‐データホームページ]