Up|<<Prev|Next>>


4.4 新たに次元・変数・属性を加える

既存の NetCDFファイルはかなりの変更を加えることが出来ます。すでに存在している次元・変数・属性などに新たに加えたり、名前を変更することも可能ですし、既存の属性は抹消することが出来ます。 次のコードのテンプレートは既存のファイルに新しい要素を加えるためのごく一般的な例です。

    NF_OPEN             ! 既存のNetCDFファイルを開く。
      ... 
    NF_REDEF            ! 定義モードに入る。
        ... 
      NF_DEF_DIM        ! (あれば)新しい次元を定義し、加える。
        ... 
      NF_DEF_VAR        ! (あれば)新しい変数を定義し、加える。
        ... 
      NF_PUT_ATT     
   ! (あれば)新しい属性を定義し、加える。
        ... 
    NF_ENDDEF           ! 定義をチェックし、定義モードから出る。
        ... 
      NF_PUT_VAR        ! 新しい変数に値を与える。
        ... 
    NF_CLOSE            ! NetCDFファイルを閉じる。

NetCDF ファイルは、まず、 NF_OPEN コールによって開きます。このコールによって、開かれたファイルはデータモードに入ります。このモードでは既存のデータ値にアクセスしたり変更を加えたりすることが出来ます。また、属性値も(大きくならない限りにおいては)変更できます。ただし、このモードでは何もたすことは出来ません。新しいNetCDF次元・変数・属性を加えるには NF_REDEF コールによって定義モードに入らなければなりません。定義モードでは、新しい次元を定義するためには NF_DEF_DIM コールを、新しい変数を加えるには NF_DEF_VAR コールを、そして古い変数や増大してしまった古い属性に新しい属性を与えるには NF_PUT_ATT ファミリーへコールします。

定義モードから出て、再びデータモードに入ることも出来ます。そこで、新しい定義に矛盾が無いか等をチェックし、ディスクに保存するには NF_ENDDEF コールをしてください。データモードに戻りたくなければ、単に NF_CLOSE コールをしてください。これは、最初に NF_ENDDEF コールをしたことと同義になります。

NF_ENDDEF コールがなされる前であれば、 NF_ABORT コールによって、定義モードで行なった全ての再定義を無効にしてNetCDFライブラリを元のステータスに戻せます。 また、この NF_ABORT コールを使って、 NF_ENDDEF コールが失敗した場合にNetCDFファイルを矛盾の無いステータスまで復帰させることが出来ます。定義モードから NF_CLOSE コールをしたら自動的に追従する NF_ENDDEF へのコールが失敗した際には、 NF_ABORT コールが自動的に呼び出され、NetCDFライブラリは閉じられ、元の矛盾の無いステータス(定義モードに入る前のステータス)に戻ります。

一つのプロセスは書き込み用に一時に最大一個のNetCDFファイルを開いていなければなりません。ライブラリは、統制の取れた NF_SYNC 関数の利用と NF_SHARE フラグを立てることによって同時に複数の読者に扱われることに大してのすポートに制限を設けています。もし、書き込むほうが定義モードに変更を加えれば(例:新しい変数、次元、属性)、 そのライブラリに対して読者が同時にアクセスすることを防ぐ制約を外部から加える必要があり、また、読者に対して次回のアクセスの前にNF_SYNC を呼び出すように注意を促す必要が出てきます。


Up|<<Prev|Next>>