From 6da7b7a29ff721e3f07221281e2092e2af6312ab Mon Sep 17 00:00:00 2001 From: Mallory Row Date: Wed, 27 Oct 2021 13:42:45 +0000 Subject: [PATCH] Fix maps2d cloud variable information Refs: #82 --- ush/create_METplus_job_scripts.py | 17 +++++-- ush/plotting_scripts/maps2d_plot_util.py | 58 ++++++++++++++++------- ush/webpage.tar | Bin 11233280 -> 11233280 bytes 3 files changed, 53 insertions(+), 22 deletions(-) diff --git a/ush/create_METplus_job_scripts.py b/ush/create_METplus_job_scripts.py index c7b05fe..cb1b4fe 100644 --- a/ush/create_METplus_job_scripts.py +++ b/ush/create_METplus_job_scripts.py @@ -1456,8 +1456,10 @@ def create_job_scripts_maps(start_date_dt, end_date_dt, case, case_abbrev, 'USWRF': ['sfc_avg6hr', 'toa_avg6hr'], 'ALBDO': ['sfc_avg6hr'], 'SUNSD': ['sfc'], - 'TCDC': ['column_avg6hr', 'pbl_avg6hr', 'low_avg6hr', - 'mid_avg6hr', 'high_avg6hr', 'convective'], + 'TCDC': ['column_avg6hr', 'pbl_avg6hr', 'convective'], + 'LCDC': ['low_avg6hr'], + 'MCDC': ['mid_avg6hr'], + 'HCDC': ['high_avg6hr'], 'PRES': ['lowcloudbase_avg6hr', 'midcloudbase_avg6hr', 'highcloudbase_avg6hr', @@ -1515,8 +1517,10 @@ def create_job_scripts_maps(start_date_dt, end_date_dt, case, case_abbrev, 'ULWRF': ['sfc_avg6hr', 'toa_avg6hr'], 'DSWRF': ['sfc_avg6hr', 'toa_avg6hr'], 'USWRF': ['sfc_avg6hr', 'toa_avg6hr'], - 'TCDC': ['column_avg6hr', 'low_avg6hr', - 'mid_avg6hr', 'high_avg6hr']}, + 'TCDC': ['column_avg6hr'], + 'LCDC': ['low_avg6hr'], + 'MCDC': ['mid_avg6hr'], + 'HCDC': ['high_avg6hr']}, 'sfc': {'TMP': ['2mAGL']}, 'totcol': {'PWAT': ['column'], 'CWAT': ['column']}, @@ -1570,7 +1574,10 @@ def create_job_scripts_maps(start_date_dt, end_date_dt, case, case_abbrev, 'ULWRF': ['lw_sfc_up', 'lw_toa_up'], 'DSWRF': ['sw_sfc_down', 'sw_toa_down'], 'USWRF': ['sw_sfc_up', 'sw_toa_up'], - 'TCDC': ['cldt', 'cldl', 'cldm', 'cldh'], + 'TCDC': ['cldt'], + 'LCDC': ['cldl'], + 'MCDC': ['cldm'], + 'HCDC': ['cldh'], 'TMP': ['air'], 'PWAT': ['tpw'], 'CWAT': ['clwp'], diff --git a/ush/plotting_scripts/maps2d_plot_util.py b/ush/plotting_scripts/maps2d_plot_util.py index 0431f95..69886e6 100644 --- a/ush/plotting_scripts/maps2d_plot_util.py +++ b/ush/plotting_scripts/maps2d_plot_util.py @@ -152,7 +152,9 @@ def get_maps2d_plot_settings(var_name, var_level): formal_var_level = 'Surface' elif 'sigma' in var_level: var_GRIB_lvl_typ = '107' - formal_var_level = var_level.replace('sigma', '')+' Sigma Level' + formal_var_level = (var_level.split('_')[0] \ + .replace('sigma', '')+' Sigma Level') + var_level.replace('sigma', '')+' Sigma Level' elif 'msl' in var_level: var_GRIB_lvl_typ = '102' formal_var_level = 'Mean Sea Level Pressure' @@ -214,6 +216,18 @@ def get_maps2d_plot_settings(var_name, var_level): elif 'convective' in var_level: var_GRIB_lvl_typ = '244' formal_var_level = 'Convective Cloud Layer' + if '_' in var_level: + if 'range' in var_level.split('_')[1]: + formal_var_time_range = (', '+var_level.split('_')[1] \ + .replace('range','')+' range') + elif 'avg' in var_level.split('_')[1]: + formal_var_time_range = (', '+var_level.split('_')[1] \ + .replace('avg','')+' average') + elif 'accum' in var_level.split('_')[1]: + formal_var_time_range = (', '+var_level.split('_')[1] \ + .replace('accum','')+' accumulation') + else: #instanteous + formal_var_time_range = '' # Get settings if var_name == '4LFTX': #best (4 layer) lifted index (K) formal_var_name = 'Best (4-Layer) Lifted Index' @@ -481,6 +495,14 @@ def get_maps2d_plot_settings(var_name, var_level): print("ERROR: cannot find plot settings for "+var_name+" " +"at "+var_GRIB_lvl_typ) sys.exit(1) + elif var_name == 'HCDC': #high cloud cover (%) + formal_var_name = 'High Cloud Cover' + cmap = plt.cm.Blues + if var_GRIB_lvl_typ == '234': #high layer cloud layer + levels = np.array([0,10,20,30,40,50,60,80,100]) + levels_diff = np.array([-30,-20,-15,-10,-5,-2,0,2,5,10,15,20,30]) + var_scale = 1 + var_units = '%' elif var_name == 'HGT': #geopotential height (gpm) formal_var_name = 'Geopotential Height' cmap = plt.cm.cubehelix_r @@ -590,6 +612,14 @@ def get_maps2d_plot_settings(var_name, var_level): print("ERROR: cannot find plot settings for "+var_name+" " +"at "+var_GRIB_lvl_typ) sys.exit(1) + elif var_name == 'LCDC': #low cloud cover (%) + formal_var_name = 'Low Cloud Cover' + cmap = plt.cm.Blues + if var_GRIB_lvl_typ == '214': #low layer cloud layer + levels = np.array([0,10,20,30,40,50,60,80,100]) + levels_diff = np.array([-30,-20,-15,-10,-5,-2,0,2,5,10,15,20,30]) + var_scale = 1 + var_units = '%' elif var_name == 'LFTX': #lifted index (K) formal_var_name = 'Lifted Index' cmap = plt.cm.RdGy_r @@ -614,6 +644,14 @@ def get_maps2d_plot_settings(var_name, var_level): print("ERROR: cannot find plot settings for "+var_name+" " +"at "+var_GRIB_lvl_typ) sys.exit(1) + elif var_name == 'MCDC': #medium cloud cover (%) + formal_var_name = 'Medium Cloud Cover' + cmap = plt.cm.Blues + if var_GRIB_lvl_typ == '224': #medium layer cloud layer + levels = np.array([0,10,20,30,40,50,60,80,100]) + levels_diff = np.array([-30,-20,-15,-10,-5,-2,0,2,5,10,15,20,30]) + var_scale = 1 + var_units = '%' elif var_name == 'MSLET': #mean sea-level pressure (NAM reduction) (Pa) formal_var_name = 'Mean Sea Level Pressure (NAM Reduction)' cmap = plt.cm.rainbow @@ -907,21 +945,6 @@ def get_maps2d_plot_settings(var_name, var_level): levels_diff = np.array([-30,-20,-15,-10,-5,-2,0,2,5,10,15,20,30]) var_scale = 1 var_units = '%' - elif var_GRIB_lvl_typ == '214': #low layer cloud layer - levels = np.array([0,10,20,30,40,50,60,80,100]) - levels_diff = np.array([-30,-20,-15,-10,-5,-2,0,2,5,10,15,20,30]) - var_scale = 1 - var_units = '%' - elif var_GRIB_lvl_typ == '224': #mid layer cloud layer - levels = np.array([0,10,20,30,40,50,60,80,100]) - levels_diff = np.array([-30,-20,-15,-10,-5,-2,0,2,5,10,15,20,30]) - var_scale = 1 - var_units = '%' - elif var_GRIB_lvl_typ == '234': #high layer cloud layer - levels = np.array([0,10,20,30,40,50,60,80,100]) - levels_diff = np.array([-30,-20,-15,-10,-5,-2,0,2,5,10,15,20,30]) - var_scale = 1 - var_units = '%' elif var_GRIB_lvl_typ == '244': #convective layer cloud layer levels = np.array([0,10,20,30,40,50,60,80,100]) levels_diff = np.array([-30,-20,-15,-10,-5,-2,0,2,5,10,15,20,30]) @@ -1313,11 +1336,12 @@ def get_maps2d_plot_settings(var_name, var_level): sys.exit(1) if var_name in ['PRMSL', 'MSLET', 'HPBL']: var_info_title = ( - formal_var_name+' ('+var_units+')' + formal_var_name+' ('+var_units+')'+formal_var_time_range ) else: var_info_title = ( formal_var_level+' '+formal_var_name+' ('+var_units+')' + +formal_var_time_range ) return (var_info_title, levels, levels_diff, cmap, var_scale, formal_var_name) diff --git a/ush/webpage.tar b/ush/webpage.tar index b367febf5781f76c7ba1f5a9b1d29c50d86ac377..40f6d10d7ead42732854f126325e00158bbc9712 100644 GIT binary patch delta 21081 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 delta 20935 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