From 0a89e2dd9c3e1d27ea0fe1c24ca9f23d99101d15 Mon Sep 17 00:00:00 2001 From: isilber Date: Thu, 15 May 2025 16:38:31 +0000 Subject: [PATCH] DEV: add fluffines to P3 `hybrid == 1` consistent with P3 in E3SMv3 --- emc2/core/model.py | 2 +- emc2/simulator/__init__.py | 1 + emc2/simulator/lidar_moments.py | 6 ++++-- emc2/simulator/radar_moments.py | 6 ++++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/emc2/core/model.py b/emc2/core/model.py index b6301fd..c09688d 100644 --- a/emc2/core/model.py +++ b/emc2/core/model.py @@ -929,7 +929,7 @@ def __init__(self, file_path, time_range=None, load_processed=False, time_dim="t # set interpolator objects for essential bulk and single-particle quantities for key in ["A_tot_norm", "A_tot_eq_V_norm", "A_tot_Mie_norm", - "vt_m_weight", "Z", "ri_eff", "Dm_m_weight"]: + "vt_m_weight", "Z", "ri_eff", "Dm_m_weight", "rho_m_weight"]: self.interpobj["bulk"][key] = RegularGridInterpolator( (instrument.scat_table['p3_ice']["Fr"].values, instrument.scat_table['p3_ice']["rho_r"].values, diff --git a/emc2/simulator/__init__.py b/emc2/simulator/__init__.py index 44d9fa9..020f4ca 100644 --- a/emc2/simulator/__init__.py +++ b/emc2/simulator/__init__.py @@ -17,6 +17,7 @@ classification.lidar_emulate_cosp_phase classification.calculate_phase_ratio psd.calc_mu_lambda + psd.calc_and_set_psd_params psd.calc_velocity_nssl radar_moments.calc_total_reflectivity radar_moments.accumulate_attenuation diff --git a/emc2/simulator/lidar_moments.py b/emc2/simulator/lidar_moments.py index a32971f..003af94 100644 --- a/emc2/simulator/lidar_moments.py +++ b/emc2/simulator/lidar_moments.py @@ -406,11 +406,13 @@ def calc_lidar_bulk(instrument, model, is_conv, p_values, z_values, OD_from_sfc= A_interped = i_calc_kws["A_tot"](( i_calc_kws["Fr_in"], i_calc_kws["rho_r_in"], i_calc_kws["q_norm_in"])) A_hyd = np.tile(A_interped * i_calc_kws["Ni_ice"], (model.num_subcolumns, 1, 1)) - else: # using bulk r_eff, in which the eff. density is already implicitly incorporated + else: # using bulk r_eff and applying fluffiness rho_b = instrument.rho_i # bulk ice re_interped = model.interpobj["bulk"]["ri_eff"](( i_calc_kws["Fr_in"], i_calc_kws["rho_r_in"], i_calc_kws["q_norm_in"])) * 1e6 # um for now - re_array = np.tile(re_interped, (model.num_subcolumns, 1, 1)) + rhoi_eff_interped = model.interpobj["bulk"]["rho_m_weight"](( + i_calc_kws["Fr_in"], i_calc_kws["rho_r_in"], i_calc_kws["q_norm_in"])) + re_array = np.tile(re_interped * rhoi_eff_interped / rho_b, (model.num_subcolumns, 1, 1)) else: rho_b = instrument.rho_i # bulk ice rho_hyd = model.Rho_hyd[hyd_type] diff --git a/emc2/simulator/radar_moments.py b/emc2/simulator/radar_moments.py index 8be2089..0f45148 100644 --- a/emc2/simulator/radar_moments.py +++ b/emc2/simulator/radar_moments.py @@ -352,11 +352,13 @@ def calc_radar_bulk(instrument, model, is_conv, p_values, z_values, atm_ext, OD_ A_interped = i_calc_kws["A_tot"](( i_calc_kws["Fr_in"], i_calc_kws["rho_r_in"], i_calc_kws["q_norm_in"])) A_hyd = np.tile(A_interped * i_calc_kws["Ni_ice"], (model.num_subcolumns, 1, 1)) - else: # using bulk r_eff, in which the eff. density is already implicitly incorporated + else: # using bulk r_eff and applying fluffiness. rho_b = instrument.rho_i # bulk ice re_interped = model.interpobj["bulk"]["ri_eff"](( i_calc_kws["Fr_in"], i_calc_kws["rho_r_in"], i_calc_kws["q_norm_in"])) * 1e6 # um for now - re_array = np.tile(re_interped, (model.num_subcolumns, 1, 1)) + rhoi_eff_interped = model.interpobj["bulk"]["rho_m_weight"](( + i_calc_kws["Fr_in"], i_calc_kws["rho_r_in"], i_calc_kws["q_norm_in"])) + re_array = np.tile(re_interped * rhoi_eff_interped / rho_b, (model.num_subcolumns, 1, 1)) else: rho_b = instrument.rho_i.magnitude # bulk ice if model.Rho_hyd[hyd_type] == 'variable':