爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2824|回复: 3

[求助] 算假相当位温时出现很多缺测值

[复制链接]

新浪微博达人勋

发表于 2023-4-15 16:49:19 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 又又又加零 于 2023-4-15 18:44 编辑

在进行假相当位温的运算时,计算露点温度下的饱和水汽压es时出现了警告:

C:\Users\user\AppData\Local\Temp\ipykernel_6572\2629662609.py:11: RuntimeWarning: invalid value encountered in double_scalars
  cttd[i,j] = e0*((t0/ttd[i,j])**(cl/Rw))*(np.e**((L0+cl*t0)*(ttd[i,j]-t0)/(Rw*ttd[i,j]*t0)))
E:\Anaconda3\lib\site-packages\xarray\core\computation.py:771: RuntimeWarning: invalid value encountered in log
  result_data = func(*input_data)

我画的是剖面图,发现高层几乎全是缺测值,我想知道怎么才能避免呢?感觉算法没有什么问题,求指导

看了下警告应该是在计算 cttd[i,j] 的过程中可能 ttd[i,j] 的值为零或者负数;第二个是np.log()取对数时出现参数为负,导致了缺测。我看低层基本上都有计算值出来,高层出现很多缺测,不知道怎么解决。


将假相当位温的计算代码附上,希望有好心人指导下【已解决】

  1. #设置物理常数
  2. t0 = 273.16 #水的冰点时的绝对温度,单位K
  3. e0 = 6.1078 #273.16K时水面饱和水气压,单位hPa
  4. L0 = 2500.79 #273.16K时水的气化潜热,单位J/g
  5. cl = 2.3697 #水汽凝结潜热随温度变化率,单位J/(g*K)
  6. cpd = 1.0048 #干空气定压比热容,单位J/(g*K)
  7. Rd = 0.28704 #干空气比气体常数,单位J/(g*K)
  8. Rw = 0.4615 #水汽比气体常数,单位J/(g*K)

  9. nx = 23  #level
  10. ny = 41  #lon
  11. cttd,Ftd,tc,Lc,cetad,wc,cetase,Ltd,ttd,lew,ee = np.ones((11,nx,ny))
  12. for i in range(nx):
  13.     for j in range(ny):
  14.         
  15.         lew[i,j] = 6.112*(np.e**((17.67*tt[i,j])/(tt[i,j]+243.5)))  #用Tetens经验公式求饱和水气压es   
  16.         ee[i,j] = ((lew[i,j]*RRh[i,j])/100)/6.112
  17.         
  18.         ttd[i,j] = (243.5*(np.log(ee[i,j])))/(17.67-np.log(ee[i,j]))  #用Tetens经验公式反推露点温度td
  19.         
  20.         Ltd[i,j] = L0-cl*(ttd[i,j]-t0)  #求潜热
  21.                
  22.         cttd[i,j] = e0*((t0/ttd[i,j])**(cl/Rw))*(np.e**((L0+cl*t0)*(ttd[i,j]-t0)/(Rw*ttd[i,j]*t0)))  #求露点温度下饱和水汽压
  23.         Ftd[i,j] = (0.622*Ltd[i,j]/(cpd*ttd[i,j]))-1
  24.         
  25.         tc[i,j] = ttd[i,j]*Ftd[i,j]/(Ftd[i,j]+np.log(ttd[i,j]/tt[i,j]))  #求温度tc
  26.         
  27.         Lc[i,j] = L0-cl*(tc[i,j]-t0)  #求水汽潜热Lv
  28.         
  29.         cetad[i,j] = tt[i,j]*((1000.0/(pp[i]-cttd[i,j]))**(Rd/cpd))  #求干空气位温
  30.         wc[i,j] = 0.622*cttd[i,j]/(pp[i]-cttd[i,j])
  31.         
  32.         cetase[i,j] = cetad[i,j]*(np.e**(wc[i,j]*Lc[i,j]/(cpd*tc[i,j])))
复制代码





密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2023-4-15 18:37:50 | 显示全部楼层

回帖奖励 +5 金钱

印象里应该是求出来的水汽压值有负值,可以加上一个很小的数来解决,我看好多都是直接给水汽压加上1e-10 就可以了。你的原始资料如果有相对湿度,用相对湿度计算露点温度就不会出现这个问题。
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-4-15 18:37:36 | 显示全部楼层
解决了一个大乌龙,读错了一个数据
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-4-15 18:43:54 | 显示全部楼层
river 发表于 2023-4-15 18:37
印象里应该是求出来的水汽压值有负值,可以加上一个很小的数来解决,我看好多都是直接给水汽压加上1e-10 就 ...

非常谢谢您的帮助,学到了。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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