4.4 新たに次元・変数・属性を加える
既存のNetCDFファイルには変更を加えることができます。すでに存在している次元・変数・属性などを新たに加えたり、名前を変更することも可能ですし、既存の属性は抹消することができます。次のコードのテンプレートは既存のファイルに新しい要素を加えるためのごく一般的な例です。
nc_open /* 既存のNetCDFファイルをオープンする */
…
nc_redef /* 定義モードに入る */
…
nc_def_dim /* (あれば)新しい次元を定義し、加える。*/
…
nc_def_var /* (あれば)新しい変数を定義し、加える。*/
…
nc_put_att /* (あれば)新しい属性を定義し、加える。*/
…
nc_enddef /* 定義をチェックし、定義モードから出る。*/
…
nc_put_var /* 新しい変数に値を与える。*/
…
nc_close /* NetCDFファイルをクローズする。*/
NetCDFファイルは、まず、nc_openを呼び出すことによってオープンします。この呼び出しによって、オープンされたファイルはデータモード(data mode)に入ります。このモードでは既存のデータ値にアクセスしたり変更を加えたりすることができます。また、属性値も(大きくならない限りにおいては)変更できます。ただし、このモードでは何もたすことはできません。新しいNetCDF次元・変数・属性を加えるにはnc_redefを呼び出して定義モード(define mode)に入らなければなりません。定義モードでは、新しい次元を定義するためにはnc_def_dimを、新しい変数を加えるにはnc_def_varを、そして古い変数や増大してしまった古い属性に新しい属性を与えるにはnc_put_attファミリーを呼び出します。
定義モードから出て、再びデータモードに入ることもできます。そこで、新しい定義に矛盾が無いか等をチェックし、ディスクに保存するにはnc_enddefを呼び出してください。データモードに戻りたくなければ、単にnc_closeを呼び出してください。これは、最初にnc_enddefを呼び出したことと同義になります。
nc_enddefが呼び出される前であれば、nc_abortを呼び出すことによって、定義モードで行なったすべての再定義を無効にしてNetCDFライブラリを元のステータスに戻せます。また、このnc_abortを呼び出すことによって、nc_enddefの呼び出しが失敗した場合にNetCDFファイルを矛盾の無いステータスまで復帰させることができます。定義モードからnc_closeを呼び出したら自動的に追従するnc_enddefへの呼び出しが失敗した際には、nc_abortが自動的に呼び出され、NetCDFライブラリはクローズされ、元の矛盾の無い状態(定義モードに入る前の状態)に戻ります。
一つのプロセスは書き込み用に一時に最大一個のNetCDFファイルを開いていなければなりません。ライブラリは、統制の取れたnc_sync関数の利用とNC_SHAREフラグを立てることによって、同時に単一の書き込みと複数の読み込み用に扱われることに対して限定されたサポートをしています。もし、書き込み側が定義モードに変更を加えれば(例:新しい変数、次元、属性)、そのライブラリに対して読み込み側に対し同時にアクセスすることを防ぐ制約を外部から加える必要があり、また、読み込み側に対して次回のアクセスの前にnc_syncを呼び出すように注意を促す必要が出てきます。
Quadralay Corporation http://www.webworks.com Voice: (512) 719-3399 Fax: (512) 719-3606 sales@webworks.com |