- 积分
- 66
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-6-30
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
各位ncl大神们,我有一个ERA-Intrim的相对湿度文件,其信息为:
Variable: r
Type: short
Total Size: 784370400 bytes
392185200 values
Number of Dimensions: 4
Dimensions and sizes: [time | 365] x [level | 37] x [latitude | 121] x [longitude | 240]
Coordinates:
time: [973008..981744]
level: [1..1000]
latitude: [90..-90]
longitude: [ 0..358.5]
Number Of Attributes: 7
scale_factor : 0.003077844391537395
add_offset : 79.43179447471586
_FillValue : -32767
missing_value : -32767
units : %
long_name : Relative humidity
standard_name : relative_humidity
我现在想将之用双线性插值法linint2_points插值到中国区域的探空站点上,并且为每一个站点每一天生成一个txt文件,每一个txt文件为某一站点每一天的37层的相对湿度数据,其ncl代码为:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
begin
nf = addfile("~/program/Data/rh.2011.00.nc","r") ;以只读方式读取文件
lon = nf->longitude(:) ;将文件中的longtitude坐标变量赋值给变量lon,经度
latori = nf->latitude(:) ;将文件中的latitude坐标变量赋值给变量latori,纬度
;将latori变量按递增的方式赋值给变量lat
;将原始纬度数组按从小到大的顺序重新排序
lat = new(121, float) ;创建一个容量为121,元素类型为float的数组
do i = 0,120
lat(i) = latori(120-i)
end do
level = nf->level(:) ;将文件中的levelis变量赋值给变量level
r = short2flt(nf->r(:,:,:,:)) ;将文件中所有范围的r变量赋值给变量r
;读取文本文件中的第1、4、5列赋值给变量station、lon1和lat1
stationPara = "~/program/StationPara.ini"
row = numAsciiRow(stationPara) ;获取文本文件中的行数
lon1 = new(row,"float")
lat1 = new(row,"float")
obs = asciiread(stationPara,-1,"string")
delim = ","
station = str_get_field(obs,1,delim) ;用以文件命名
lon1 = stringtofloat(str_get_field(obs,4,delim))
lat1 = stringtofloat(str_get_field(obs,5,delim))
;进行双线性插值计算
newR = linint2_points(lon,lat,r,True,lon1,lat1,0)
;获取nc数据中的时间,转换成年、月、日,用以文件命名
time = nf->time
utc_date = cd_calendar(time,0)
year = tointeger(utc_date(:,0))
month = tointeger(utc_date(:,1))
day = tointeger(utc_date(:,2))
;将newt写成文本文
;按时间、站点输出文本文件
Time = nf->time(:)
TSize = dimsizes(Time) ;天数
lon1Size = dimsizes(lon1) ;站点数
levelSize = dimsizes(level) ;层数
do i = 0,TSize-1
do j = 0,lon1Size-1
interpolationR = newR(i,:,j)
flipLevel = new(levelSize,"float") ;存放翻转后level数组
flipInterpolationR = new(levelSize,"float") ;存放翻转后interpolationR数组
result = new(levelSize,"string") ;存放数组flipLevel、flipInterpolationR相连的数组
do k = 0,levelSize-1
flipLevel(k) = level(levelSize-1-k)
flipInterpolationR(k) = interpolationR(levelSize-1-k)
result(k) = sprintf("%8.2f ",flipLevel(k))+sprintf("%8.2f ",flipInterpolationR(k))
end do
fName =station(j)+"_"+year(i)+"_"+month(i)+"_"+day(i)+".txt"
asciiwrite(fName,result)
end do
end do
end
但插值出来的结果跟探空数据相差特别大,并且连变化趋势都不一致,我怀疑是插值除了问题,但不知如何解决,往各位大神不吝赐教。
并且,还发现一个问题,那就是如果取网格不同的经纬度范围,所取的经纬度范围远远超过所需插值的探空站点经纬度边界,但插值出来的结果不一样,不知怎么回事,往大神指教
|
|