优游注册

WRF后处理 | 降雨量的绘制
你的位置:优游注册 > 关于优游注册 >
WRF后处理 | 降雨量的绘制
发布日期:2024-07-22 05:43    点击次数:111

WRF输出数据降雨量来自于三个变量:RAINC: ACCUMULATED TOTAL CUMULUS PRECIPITATIONRAINNC: ACCUMULATED TOTAL GRID SCALE PRECIPITATIONRAINSH: ACCUMULATED SHALLOW CUMULUS PRECIPITATION

RAINC: 积云深对流过程产生的累积降水量,也就是模式中的积云对流参数化方案导致的降雨( cu_physics)。对于高分辨率的模拟,比如dx<5km,通常会将积云对流参数化方案关闭,此时RAINC为0。RANNC: 此类降雨来源于云微物理参数化方案(mp_physics),如大尺度抬升过程产生的凝结等微物理过程降水,也就是非对流产生的降水。RAINSH: 积云对流参数化方案主要是反映深对流的降水过程,但是一些积云对流参数化方案,能够支持浅对流导致的降水,此时总降水还需要加上RAINSH。WRF中支持浅对流的参数化方案(cu_physics)有以下几种:KF,SAS,G3,BMJ,Tiedtke。WRF中也有独立于深对流过程的浅对流方案,通过namelist中设置shcu_physics。一般情况下,浅对流产生的降水量较小。

此外,固态降水例如雪(SNOWC/SNOWNC)、霰(GRAUPELC/GRAUPELNC)等降水,它们是降水的不同相态,已经都包含在RAINC/RAINNC中,不需要额外添加。

总结为一句话:总降水=RAINNC + RAINC + RAINSH,其中RAINC和RAINSH根据物理参数化方案的设置可能为0。

需要注意的是,降雨是个累积量,而不是瞬时值,在wrfout中如果需要得到模拟起止日期内的降雨,需要将最后一个时刻的降雨量减去第一个时刻的降雨量.

图片

import numpy as npfrom netCDF4 import Datasetfrom wrf import (getvar, to_np) import matplotlib.pyplot as pltimport cartopy.crs as ccrsfrom cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTERfrom cartopy.io.shapereader import BasicReaderimport matplotlib.ticker as mticker# 读取数据f='E:\BaiduSyncdisk\Code\python\WRF\Data\wrfout_d01_2020-06-11_06_00_00'ncfile = Dataset(f)R = to_np(getvar(ncfile,"RAINC"))+to_np(getvar(ncfile,"RAINNC"))+to_np(getvar(ncfile,"RAINSH"))lon = np.array(ncfile['XLONG'])[0,:,:]lat = np.array(ncfile['XLAT'])[0,:,:]# shape文件读取countries=BasicReader(r'E:\BaiduSyncdisk\Code\Data\shape数据\国界\国家矢量.shp')ten=BasicReader(r'E:\BaiduSyncdisk\Code\Data\shape数据\九段线\九段线.shp')province=BasicReader(r'E:\BaiduSyncdisk\Code\Data\shape数据\2023年省级\2023年省级.shp')# 颜色条设置rgb = ([237, 237, 237],[209, 209, 209],[173, 173, 173],[131, 131, 131],        [93 , 93 , 93],[151, 198, 223],[111, 176, 214],[49 , 129, 189],        [26 , 104, 174],[8  , 79 , 153],[62 , 168, 91],[110, 193, 115],        [154, 214, 149],[192, 230, 185],[223, 242, 217],[255, 255, 164],        [255, 243, 0],[255, 183, 0],[255, 123, 0],[255, 62 , 0],        [255, 2  , 0],[196, 0  , 0],[136, 0  , 0],)clors = np.array(rgb)/255.clevs = [0.1, 1,  2,  5, 7.5, 10, 13, 16, 20, 25, 30, 35, 40, 50, 60,         70, 80, 90, 100, 125, 150, 175, 200, 250          ]# 画图fig = plt.figure(figsize=(10, 10))ax = fig.add_subplot(111, projection=ccrs.PlateCarree())contour = ax.contourf(lon,lat, R, clevs, colors=clors, transform=ccrs.PlateCarree())cb_cf = fig.colorbar(contour, ax=ax,ticks=clevs, shrink=.65)ax.add_geometries(countries.geometries(),linewidth=.5,edgecolor='black',crs=ccrs.PlateCarree(),facecolor='none') ax.add_geometries(ten.geometries(),linewidth=.5,edgecolor='black',crs=ccrs.PlateCarree(),facecolor='none') ax.add_geometries(province.geometries(),linewidth=.5,edgecolor='black',crs=ccrs.PlateCarree(),facecolor='none') ax.set_extent([60,140,10,60],crs=ccrs.PlateCarree()) # 小范围g1=ax.gridlines(draw_labels=True,linewidth=1,color='none',alpha=0.5,linestyle='--',x_inline=False,y_inline=False)g1.top_labels=Falseg1.right_labels=Falseg1.xformatter=LONGITUDE_FORMATTERg1.yformatter=LATITUDE_FORMATTERg1.rotate_labels=Falseg1.xlocator = mticker.FixedLocator(np.arange(60,140,10))g1.ylocator = mticker.FixedLocator(np.arange(10,60,5))g1.xlabel_style={'size':17}g1.ylabel_style={'size':17}

参考资料:

https://blog.csdn.net/islandowner2017/article/details/119719854

https://www.heywhale.com/mw/project/6284b478901f1de4da8c8169 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。