該代碼是這個答案確實工作Add a new dimension,但它沒有做我想做的事情。如何在NetCDF中爲現有變量添加新維度?
爲了進一步說明我的問題 - 我有以下定義 時間(無限),緯度,經度,水平爲四維和一個變量位勢高度。我想要做的是將dimz_Z添加到現有的變量位勢高度。
現在在這裏上面代碼中的答案是netCDF文件看起來像一個ncdump
float hgt(time, level, lat, lon)
但是從NCU的輸出下面看到的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重新定義爲五維變量,並將這些值重新整理一遍。這是正確的還是有其他選擇? 我正在使用Fortran 77 netcdf API。
你的朋友是對的。 – cmaster
是不是dimz_Z只是解開的lon/lat網格(21 * 23 = 483)?爲什麼要在文件中平均數據量?我很確定你想要做別的事情。你確定你只是不想添加一個具有實際高度的變量嗎?這不是一個Fortran問題... – RussF
@RussF - 它是我係統中的垂直座標。我有lat,lon和eta。讓它三維 – gansub