爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 35230|回复: 20

[源代码] python3读取fnl 1*1资料双线性水平插值到格点,垂直对数插值到43层

[复制链接]
发表于 2018-8-13 13:43:49 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 Lucian 于 2018-8-14 10:54 编辑

python3在ubuntu中读取fnl 1*1资料中的温度和相对湿度,把相对湿度转化成ppmv。双线性水平插值到指定经纬度,垂直对数插值到rttov9.3计算radiance的43层
  1. import numpy as np
  2. from scipy import interpolate
  3. import pygrib

  4. def rh2q_ppmv(RH,P,T):
  5.     '''Conversion reletive humidity to lnq in ppmv
  6.        RH-%, P-hPa, T-K'''
  7.     t = T-273.15
  8.     if T <=233.15:
  9.         e_s=6.1078*np.exp(21.8746*(t)/(T-7.66))
  10.     elif T>=258.15:
  11.         e_s=6.1078*np.exp(17.269*(t)/(T-35.86))
  12.     else:
  13.         e_s_water=e_s=6.1078*np.exp(17.269*(t)/(T-35.86))
  14.         e_s_ice=6.1078*np.exp(21.8746*(t)/(T-7.66))
  15.         e_s=0.002*((80+2*t)*e_s_water-(30+2*t)*e_s_ice)
  16.    
  17.     e = RH/100*e_s # hPa   
  18.     q_ppmv = 1000000*e/P
  19.     return q_ppmv

  20. # 指定fnl资料路径
  21. grbs = pygrib.open('/home/xxxxx/Documents/fnl/fnl_20180110_00_00.grib2')
  22. grbs.seek(0)

  23. #for key in grbs:
  24.     #print(key)

  25. Temperatures = grbs.select(name='Temperature')[:] # 读取31层温度
  26. RHs = grbs.select(name='Relative humidity')[:] # 读取31层相对湿度

  27. lats, lons = Temperatures[0].latlons() # 读取经纬度
  28. lats, lons = lats[:,0], lons[0,:] # 压缩经纬度到一维

  29. # fnl资料里31层气压值
  30. fnl_P_levels_hpa = [1.0, 2.0, 3.0, 5.0, 7.0, 10.0, 20.0, 30.0, 50.0, 70.0, 100.0, 150.0, 200.0, 250.0, 300.0, 350.0, 400.0, 450.0, 500.0, 550.0, 600.0, 650.0, 700.0, 750.0, 800.0, 850.0, 900.0, 925.0, 950.0, 975.0, 1000.0]
  31. fnl_lnP_levels_hpa = np.log(fnl_P_levels_hpa) # 取对数

  32. fnl_Vertical_T = []
  33. fnl_Vertical_RH = []
  34. fnl_Vertical_q_ppmv = []
  35. for key in range(31):
  36.     fx = interpolate.interp2d(lons, lats, Temperatures[key].values, kind='linear')
  37.     T = fx(120.5,25.5)# 将fnl31层温度插值到120.5经度,北纬25.5度   
  38.     fx = interpolate.interp2d(lons, lats, RHs[key].values, kind='linear')
  39.     RH = fx(120.5,25.5)# 将fnl31层相对湿度插值到120.5经度,北纬25.5度

  40.     q_ppmv_cal = rh2q_ppmv(RH,fnl_P_levels_hpa[key],T)
  41.     fnl_Vertical_T.append(float(T))
  42.     fnl_Vertical_RH.append(float(RH))
  43.     fnl_Vertical_q_ppmv.append(float(q_ppmv_cal))
  44.    
  45. #print(fnl_Vertical_q_ppmv)

  46. rttov93_P_levels = [0.1, 0.29, 0.69, 1.42, 2.611, 4.407, 6.95, 10.37, 14.81, 20.4, 27.26, 35.51, 45.29, 56.73, 69.97, 85.18, 102.05, 122.04, 143.84, 167.95, 194.36, 222.94, 253.71, 286.6, 321.5, 358.28, 396.81, 436.95, 478.54, 521.46, 565.54, 610.6, 656.43, 702.73, 749.12, 795.09, 839.95, 882.8, 922.46, 957.44, 985.88, 1005.43, 1013.25]
  47. rttov93_lnP_levels = np.log(rttov93_P_levels) # 取对数

  48. fx = interpolate.interp1d(fnl_lnP_levels_hpa, fnl_Vertical_T, kind='linear', fill_value='extrapolate' )
  49. rttov93_Vertical_T = fx(rttov93_lnP_levels) # 温度插值

  50. fx = interpolate.interp1d(fnl_lnP_levels_hpa, fnl_Vertical_q_ppmv, kind='linear', fill_value='extrapolate' )
  51. rttov93_Vertical_q_ppmv = fx(rttov93_lnP_levels) # q_ppmv插值
  52. rttov93_Vertical_lnq_output = np.log(rttov93_Vertical_q_ppmv/1000) # 转化成rttov93的存储格式
  53. # 插值结果
  54. print(rttov93_Vertical_T)
  55. print(rttov93_Vertical_lnq_output)
复制代码




密码修改失败请联系微信:mofangbao
 楼主| 发表于 2018-8-13 13:47:05 | 显示全部楼层
本帖最后由 Lucian 于 2018-8-19 10:19 编辑

二楼占楼自用
密码修改失败请联系微信:mofangbao
发表于 2018-8-13 13:59:24 | 显示全部楼层
学习了,感谢楼主!
密码修改失败请联系微信:mofangbao
发表于 2018-8-14 10:00:33 | 显示全部楼层
{:5_275:}zan
密码修改失败请联系微信:mofangbao
发表于 2018-8-14 10:39:42 | 显示全部楼层
给楼主点赞,分享要大赞!
密码修改失败请联系微信:mofangbao
发表于 2018-8-14 13:25:31 | 显示全部楼层
{:5_231:}{:5_231:}{:5_231:}{:5_231:}{:5_231:}
密码修改失败请联系微信:mofangbao
发表于 2018-8-14 14:48:56 | 显示全部楼层
python可以读grib数据啊??!!!学习学习!!一直以为不能读grib
密码修改失败请联系微信:mofangbao
发表于 2018-8-14 17:01:41 | 显示全部楼层
感谢分享!收藏,学习~
密码修改失败请联系微信:mofangbao
发表于 2018-8-18 21:54:59 | 显示全部楼层
pygrib 在windows下安装不上,请各位指教
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2018-8-19 10:20:06 | 显示全部楼层
本帖最后由 Lucian 于 2018-8-19 10:23 编辑
python游 发表于 2018-8-18 21:54
pygrib 在windows下安装不上,请各位指教

老哥我的贴子是ubuntu,linux的一种,windows安装pygrib百度有教程的
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表