From 648d92b564bd6b8a83b1981a68ab3bd7b1737595 Mon Sep 17 00:00:00 2001 From: tomrink <rink@ssec.wisc.edu> Date: Wed, 7 Jun 2023 13:56:47 -0500 Subject: [PATCH] snapshot... --- modules/util/util.py | 154 ++++++++++++++++++------------------------- 1 file changed, 64 insertions(+), 90 deletions(-) diff --git a/modules/util/util.py b/modules/util/util.py index 60d6cb5c..93ae51c3 100644 --- a/modules/util/util.py +++ b/modules/util/util.py @@ -432,11 +432,6 @@ def make_times(dt_str_0, dt_str_1=None, format_code='%Y-%m-%d_%H:%M', num_steps= return dt_obj_s, ts_s -def make_histogram(values, edges): - h = np.histogram(values, bins=edges) - return h - - def normalize(data, param, mean_std_dict, copy=True): if mean_std_dict.get(param) is None: @@ -460,23 +455,6 @@ def normalize(data, param, mean_std_dict, copy=True): return data -def add_noise(data, noise_scale=0.01, seed=None, copy=True): - if copy: - data = data.copy() - - shape = data.shape - data = data.flatten() - - if seed is not None: - np.random.seed(seed) - rnd = np.random.normal(loc=0, scale=noise_scale, size=data.size) - data += rnd - - data = np.reshape(data, shape) - - return data - - def denormalize(data, param, mean_std_dict, copy=True): if copy: data = data.copy() @@ -542,18 +520,17 @@ def descale(data, param, mean_std_dict, copy=True): return data -def scale2(data, lo, hi, copy=True): +def add_noise(data, noise_scale=0.01, seed=None, copy=True): if copy: data = data.copy() shape = data.shape data = data.flatten() - data -= lo - data /= (hi - lo) - - not_valid = np.isnan(data) - data[not_valid] = 0 + if seed is not None: + np.random.seed(seed) + rnd = np.random.normal(loc=0, scale=noise_scale, size=data.size) + data += rnd data = np.reshape(data, shape) @@ -704,6 +681,65 @@ def concat_dict_s(t_dct_0, t_dct_1): return t_dct_0 +rho_water = 1000000.0 # g m^-3 +rho_ice = 917000.0 # g m^-3 + +# real(kind=real4), parameter:: Rho_Water = 1.0 !g / m ^ 3 +# real(kind=real4), parameter:: Rho_Ice = 0.917 !g / m ^ 3 +# +# !--- compute +# cloud +# water +# path +# if (Iphase == 0) then +# Cwp_Dcomp(Elem_Idx, Line_Idx) = 0.55 * Tau * Reff * Rho_Water +# Lwp_Dcomp(Elem_Idx, Line_Idx) = 0.55 * Tau * Reff * Rho_Water +# else +# Cwp_Dcomp(Elem_Idx, Line_Idx) = 0.667 * Tau * Reff * Rho_Ice +# Iwp_Dcomp(Elem_Idx, Line_Idx) = 0.667 * Tau * Reff * Rho_Ice +# endif + + +def compute_lwc_iwc(iphase, reff, opd, geo_dz): + xy_shape = iphase.shape + + iphase = iphase.flatten() + keep_0 = np.invert(np.isnan(iphase)) + + reff = reff.flatten() + keep_1 = np.invert(np.isnan(reff)) + + opd = opd.flatten() + keep_2 = np.invert(np.isnan(opd)) + + geo_dz = geo_dz.flatten() + keep_3 = np.logical_and(np.invert(np.isnan(geo_dz)), geo_dz > 1.0) + + keep = keep_0 & keep_1 & keep_2 & keep_3 + + lwp_dcomp = np.zeros(reff.shape[0]) + iwp_dcomp = np.zeros(reff.shape[0]) + lwp_dcomp[:] = np.nan + iwp_dcomp[:] = np.nan + + ice = iphase == 1 & keep + no_ice = iphase != 1 & keep + + # compute ice/liquid water path, g m-2 + reff *= 1.0e-06 # convert microns to meters + + iwp_dcomp[ice] = 0.667 * opd[ice] * rho_ice * reff[ice] + lwp_dcomp[no_ice] = 0.55 * opd[no_ice] * rho_water * reff[no_ice] + + iwp_dcomp /= geo_dz + lwp_dcomp /= geo_dz + + lwp_dcomp = lwp_dcomp.reshape(xy_shape) + iwp_dcomp = iwp_dcomp.reshape(xy_shape) + + return lwp_dcomp, iwp_dcomp + + # Example GOES file to retrieve GEOS parameters in MetPy form (CONUS) exmp_file_conus = '/Users/tomrink/data/OR_ABI-L1b-RadC-M6C14_G16_s20193140811215_e20193140813588_c20193140814070.nc' # Full Disk @@ -802,68 +838,6 @@ def make_for_full_domain_predict(h5f, name_list=None, satellite='GOES16', domain return grd_dct, ll, cc -# rho_water = 1. -# rho_ice = 0.917 - -rho_water = 1000000.0 # g m^-3 -rho_ice = 917000.0 # g m^-3 - -# real(kind=real4), parameter:: Rho_Water = 1.0 !g / m ^ 3 -# real(kind=real4), parameter:: Rho_Ice = 0.917 !g / m ^ 3 -# -# !--- compute -# cloud -# water -# path -# if (Iphase == 0) then -# Cwp_Dcomp(Elem_Idx, Line_Idx) = 0.55 * Tau * Reff * Rho_Water -# Lwp_Dcomp(Elem_Idx, Line_Idx) = 0.55 * Tau * Reff * Rho_Water -# else -# Cwp_Dcomp(Elem_Idx, Line_Idx) = 0.667 * Tau * Reff * Rho_Ice -# Iwp_Dcomp(Elem_Idx, Line_Idx) = 0.667 * Tau * Reff * Rho_Ice -# endif - - -def compute_lwc_iwc(iphase, reff, opd, geo_dz): - xy_shape = iphase.shape - - iphase = iphase.flatten() - keep_0 = np.invert(np.isnan(iphase)) - - reff = reff.flatten() - keep_1 = np.invert(np.isnan(reff)) - - opd = opd.flatten() - keep_2 = np.invert(np.isnan(opd)) - - geo_dz = geo_dz.flatten() - keep_3 = np.logical_and(np.invert(np.isnan(geo_dz)), geo_dz > 1.0) - - keep = keep_0 & keep_1 & keep_2 & keep_3 - - lwp_dcomp = np.zeros(reff.shape[0]) - iwp_dcomp = np.zeros(reff.shape[0]) - lwp_dcomp[:] = np.nan - iwp_dcomp[:] = np.nan - - ice = iphase == 1 & keep - no_ice = iphase != 1 & keep - - # compute ice/liquid water path, g m-2 - reff *= 1.0e-06 # convert microns to meters - - iwp_dcomp[ice] = 0.667 * opd[ice] * rho_ice * reff[ice] - lwp_dcomp[no_ice] = 0.55 * opd[no_ice] * rho_water * reff[no_ice] - - iwp_dcomp /= geo_dz - lwp_dcomp /= geo_dz - - lwp_dcomp = lwp_dcomp.reshape(xy_shape) - iwp_dcomp = iwp_dcomp.reshape(xy_shape) - - return lwp_dcomp, iwp_dcomp - - def make_for_full_domain_predict_viirs_clavrx(h5f, name_list=None, res_fac=1, day_night='DAY', use_dnb=False): w_x = 16 w_y = 16 -- GitLab