0

コードは、この答えは機能します新しい次元を追加しますが、それは私がやりたいことをしません。

私の問題をさらに説明するために、次の定義があります。時間(無制限)、緯度、経度、レベルとして 4 つの次元と 1 つの可変ジオポテンシャルの高さです。私がやりたいことは、ディメンション dimz_Z を既存の可変ジオポテンシャルの高さに追加することです。

現在、上記のコードの答えは、netCDF ファイルが ncdump でどのように見えるかです。

float hgt(time, level, lat, lon) 

しかし、ncks の出力から以下に示すように、dimz_Z 次元が欠落しています。

hgt dimension 0: time, size = 1 NC_DOUBLE, chunksize = 1 (Record coordinate is time)
hgt dimension 1: level, size = 1 NC_FLOAT, chunksize = 1 (Coordinate is level)
hgt dimension 2: lat, size = 23 NC_FLOAT, chunksize = 23 (Coordinate is lat)
hgt dimension 3: lon, size = 21 NC_FLOAT, chunksize = 21 (Coordinate is lon)

定義には表示されますが、スタンドアロンのディメンションとして表示され、hgt のディメンションの一部ではありません。

 dimz_Z: type NC_FLOAT, 1 dimension, 0 attributes, compressed? no, chunked? no, packed? no
 dimz_Z size (RAM) = 483*sizeof(NC_FLOAT) = 483*4 = 1932 bytes
 dimz_Z dimension 0: dimz_Z, size = 483 NC_FLOAT (Coordinate is dimz_Z)

これはファイルの出力です

time[0]=1879032 level[0]=1000 lat[0]=60 lon[0]=50 hgt[0]=53 m
time[0]=1879032 level[0]=1000 lat[0]=60 lon[1]=52.5 hgt[1]=55 m

私が欲しいのは次のとおりです

time[0]=1879032 level[0]=1000 lat[0]=60 lon[0]=50 dimz_Z[0]=0 hgt[0]=53 m
time[0]=1879032 level[0]=1000 lat[0]=60 lon[1]=52.5 dimz_Z[0]=0 hgt[1]=55 m

私が友人から言われたのは、この次元を既存の変数に追加することはできないということです。代わりに、Fortran では、変数 hgt を 5 次元変数としてもう一度定義し、値をもう一度入力する必要があります。それは正しいですか、それとも代替手段はありますか? Fortran 77 netcdf API を使用しています。

4

1 に答える 1

1

あなたの友人は正しいです。ただし、考慮できるオプションがいくつか残っています。プログラミングに関しては、ほとんどの場合、オプションがあります。

  1. 最初の netcdf ファイルから新しい netcdf ファイルを作成し、新しいファイルで変数を定義して余分な次元を持たせます。あなたはそれをfortranで行うことができます
  2. netcdf 処理ツール (nco) を使用して、必要なプロパティを持つ新しい変数を作成し、他の変数を削除します。
于 2016-08-24T13:46:06.063 に答える