爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 18724|回复: 110

[经验总结] Python【探空订正】效果

  [复制链接]
发表于 2023-6-16 00:48:30 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 付亚男 于 2026-9-9 10:12 编辑

       MICAPS的交互探空有一个很实用的效果——修正抬升点。对于早晨08时的探空,可以通过将地面温度和露点加以订正,考察午后的对流潜势。另外在近地面是稳定层结时,通过将抬升点提高到稳定层结以上,可以考察高架对流发生的可能性。
       MetPy提供了一个功能丰富的绘制探空图的函数:Advanced Sounding — MetPy 1.5 (unidata.github.io)
其本质就是在图上绘制各种线条(温度廓线、露点廓线、状态曲线等),各种点(LCL、LFC、EL)以及填色区(CAPE和CIN)。那么实现MICAPS的交互探空功能,其实就是在原图上取一个新的抬升点、计算一条新的状态曲线以及LCL和LFC,填上新的CAPE和CIN颜色。
       了解了原理,就很容易实现了。

Figure 2023-06-16 003750.png

       上面这张图就是绘制的效果,红线和绿线分别是温度廓线和露点廓线。
       黑色实线是基于1000 hPa抬升的状态曲线,对应的LFC高度以黑色实心点标注,CAPE以半透明红色进行填色。
       黑色虚线是基于900 hPa抬升的状态曲线,对应的LFC高度以黑色空心点标注,CAPE为斜线填充区域。
       为了方便考察LFC距离抬升点的位置,把抬升点以短横线标注出来,红色基于1000 hPa,蓝色基于900 hPa。


       这张探空取自一个比较典型的高架对流的探空:最不稳定层在900-875 hPa,这一层次CAPE大约是1200 J/kg, 地面约为500 J/kg;CIN在这一层次为0;从这一层次抬升,只需要抬升很短的距离,就可以到达LFC,从而出现自由对流,而从地面抬升,需要抬升约3000 m才能出现自由对流;当然之所以判断对流是高架的,还有一点在这里没有展示,就是地面图中这个位置附近没有明显的辐合特征。


       代码不复杂,按照上面的思路,很容易实现。设置回复可见以便更多人可以看到。测试数据是自己写的npy,一并给出。


  1. # -*- coding: utf-8 -*-
  2. '''
  3. Author       : fuyanan
  4. Created on   : Thu Jun 15 11:32:54 2023
  5. Description  :

  6.     two parcel profiles from different levels in one T-lnP
  7.    
  8. '''

  9. # %%

  10. import numpy as np
  11. from metpy import calc
  12. from metpy.units import units
  13. from metpy.plots import SkewT
  14. import matplotlib.pyplot as plt
  15. import proplot as pplt

  16. # %%

  17. npyf = np.load(r'E:/python/testdata/ForTlnP.npy')
  18. pressure = npyf[0]*units('hPa')
  19. temperature = npyf[1]*units('K')
  20. relative_humidity = npyf[2]*units('%')
  21. dewpoint = calc.dewpoint_from_relative_humidity(temperature, relative_humidity)

  22. # %%

  23. def PlotProfile(skew, pressure, temperature, dewpoint, order):

  24.     # plot parcel profile
  25.     parcel_prof = calc.parcel_profile(
  26.         pressure, temperature[0], dewpoint[0],
  27.         ).to('degC')
  28.     skew.plot(
  29.         pressure,
  30.         parcel_prof,
  31.         linewidth = 1,
  32.         linestyle = '-'if order==0 else '--',
  33.         color='k',
  34.         )

  35.     # plot LFC
  36.     lfc_pressure,  lfc_temperature = calc.lfc(
  37.         pressure, temperature, dewpoint, parcel_prof, dewpoint[0],
  38.         )
  39.     skew.plot(
  40.         lfc_pressure,
  41.         lfc_temperature,
  42.         'ko',
  43.         markerfacecolor = 'k' if order==0 else 'none',
  44.         markeredgecolor = 'k',
  45.         markersize = 4,
  46.         )


  47.     # shade cape
  48.     skew.shade_cape(
  49.         pressure,
  50.         temperature,
  51.         parcel_prof,
  52.         facecolor = 'red' if order==0 else 'w',
  53.         hatch = None if order==0 else '/////',
  54.         )

  55.     # plot root
  56.     skew.plot(
  57.         pressure[0],
  58.         temperature[0].to('degC'),
  59.         marker = '_',
  60.         markersize = 8,
  61.         markeredgecolor = 'r' if order==0 else 'b',
  62.         )

  63.     return None


  64. def TlnP_DoubleParcel(pressure, temperature, dewpoint, second_level):

  65.     fig = plt.figure(figsize=(6, 4.8),facecolor='w')
  66.     skew = SkewT(fig, rotation=30)

  67.     skew.plot(pressure, temperature, 'r', lw=1)
  68.     skew.plot(pressure, dewpoint, 'g', lw=1)
  69.     skew.ax.set_ylim(1050, 100)
  70.     skew.ax.set_xlim(-50, 40)

  71.     PlotProfile(
  72.         skew,
  73.         pressure,
  74.         temperature,
  75.         dewpoint,
  76.         order=0,
  77.         )

  78.     PlotProfile(
  79.         skew,
  80.         pressure[pressure<=second_level],
  81.         temperature[pressure<=second_level],
  82.         dewpoint[pressure<=second_level],
  83.         order=1,
  84.         )

  85.     skew.ax.set_xlabel(r'Temperature ($^\circ$C)')
  86.     skew.ax.set_ylabel(r'Pressure (hPa)')

  87.     plt.tight_layout()

  88.     return None

  89. # %%

  90. TlnP_DoubleParcel(pressure, temperature, dewpoint, second_level=900*units('hPa'))

复制代码





ForTlnP.npy (1016 Bytes, 下载次数: 91)
密码修改失败请联系微信:mofangbao
发表于 2023-6-16 08:39:54 | 显示全部楼层
好东西,学习了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

发表于 2023-6-16 09:51:34 | 显示全部楼层
{:eb511:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

发表于 2023-6-16 10:11:28 | 显示全部楼层
感谢分享!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

发表于 2023-6-16 11:05:22 | 显示全部楼层
设置回复可见以便更多人可以看到
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

发表于 2023-6-16 11:23:59 | 显示全部楼层
谢谢,学习了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

发表于 2023-6-16 13:22:50 | 显示全部楼层
{:eb348:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

发表于 2023-6-16 15:48:44 | 显示全部楼层
{:5_213:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

发表于 2023-6-16 21:09:54 | 显示全部楼层
胖爷威武~
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

发表于 2023-6-17 09:23:45 | 显示全部楼层
考察午后的对流潜势?有相关的文章么
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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