2016-08-27 53 views
0

我使用類似這樣的代碼 - Read in coordinate variables經緯度來讀取NetCDF文件的netCDF寫作維數組爲二維數組

call check(nf_inq_varid(ncid, LAT_NAME, lat_varid)) 
call check(nf_inq_varid(ncid, LON_NAME, lon_varid)) 

!讀取經度和緯度數據。

call check(nf_get_var(ncid, lat_varid, lats)) 
call check(nf_get_var(ncid, lon_varid, lons)) 

lats和lons都是1維fortran數組。

我的初始數據集是在地理座標中,我需要將其轉換爲旋轉的緯度網格,並使用此URL中的代碼Geographical to rotated lat lon grid

工作方式如下 對於每個地理緯度和經度,我都會得到一個旋轉的緯度。 同上旋轉經度。

數學

f(latitude_geo,longitude_geo) = latitude_rot 
f(latitude_geo,longitude_geo) = longitude_rot 

所以旋轉lat和經度陣列是二維陣列。我希望能夠使用nf_put_vara_real或nf_90_put_vara_real(f77或f90無關緊要)將旋轉的lat和lon數組寫回原始的netCDF文件。

我怎麼能做到這一點,因爲原始的經度和緯度數組是一維數組?是否有可能將原始的一維數組讀取爲二維數組?

回答

1

您的轉換創建了2維經度和緯度值,因此您需要將xy定義爲新的運行指標。

lon(lon) => lon(x,y) 
lat(lat) => lat(x,y) 

基本上,你描述的lonlat作爲變量,並xy作爲新的層面。這樣經度和緯度被映射到正確的網格點。

如果正確寫入NetCDF文件,它的內容應該是與此類似:

netcdf example { 
dimensions: 
     x = 360 ; 
     y = 180 ; 
variables: 
     float x(x): 
       x:long_name = "x-dimension" ; 

     float y(y): 
       y:long_name = "y-dimension" ; 

     float lon(y, x) ; 
       lon:long_name = "longitude" ; 
       lon:units = "degrees_east" ; 
       ... 

     float lat(y, x) ; 
       lat:long_name = "latitude" ; 
       lat:units = "degrees_north" ; 
       ... 

     float data(y, x) ; 
       data:long_name = "your data name" ; 
       ... 
} 

(通過ncdump -h example.nc輸出)