PySDM_examples.featured.Luettmer_et_al_2026.commons
commons for homogeneous freezing notebooks
1"""commons for homogeneous freezing notebooks""" 2 3from PySDM_examples.featured.Luettmer_et_al_2026.settings import Settings 4from PySDM_examples.featured.Luettmer_et_al_2026.simulation import Simulation 5from PySDM import Formulae 6from PySDM.physics.constants import si 7from PySDM.backends import CPU 8 9formulae = Formulae( 10 particle_shape_and_density="MixedPhaseSpheres", 11) 12 13 14def run_simulations(setting): 15 16 simulation = { 17 "settings": setting, 18 "ensemble_member_outputs": [], 19 } 20 for _ in range(setting["number_of_ensemble_runs"]): 21 model_setup = Settings(**simulation["settings"]) 22 model_setup.formulae.seed += 1 23 model = Simulation(model_setup) 24 simulation["ensemble_member_outputs"].append(model.run()) 25 26 return simulation 27 28 29def hom_pure_droplet_freezing_backend(): 30 backends = { 31 "threshold": CPU( 32 formulae=Formulae( 33 particle_shape_and_density="MixedPhaseSpheres", 34 homogeneous_ice_nucleation_rate="Null", 35 saturation_vapour_pressure="MurphyKoop2005", 36 ), 37 ), 38 "KoopMurray2016": CPU( 39 formulae=Formulae( 40 particle_shape_and_density="MixedPhaseSpheres", 41 homogeneous_ice_nucleation_rate="KoopMurray2016", 42 saturation_vapour_pressure="MurphyKoop2005", 43 ), 44 ), 45 "Spichtinger2023": CPU( 46 formulae=Formulae( 47 particle_shape_and_density="MixedPhaseSpheres", 48 homogeneous_ice_nucleation_rate="Koop_Correction", 49 saturation_vapour_pressure="MurphyKoop2005", 50 ), 51 ), 52 "Koop2000": CPU( 53 formulae=Formulae( 54 particle_shape_and_density="MixedPhaseSpheres", 55 homogeneous_ice_nucleation_rate="Koop2000", 56 saturation_vapour_pressure="MurphyKoop2005", 57 ), 58 ), 59 "KoopMurray2016_DWA": CPU( 60 formulae=Formulae( 61 particle_shape_and_density="MixedPhaseSpheres", 62 homogeneous_ice_nucleation_rate="KoopMurray2016_DWA", 63 saturation_vapour_pressure="MurphyKoop2005", 64 ), 65 ), 66 } 67 return backends 68 69 70def hom_pure_droplet_freezing_standard_setup(): 71 standard = { 72 "n_sd": int(1e3), 73 "w_updraft": 1.0 * si.meter / si.second, 74 "T0": 245 * si.kelvin, 75 "dz": 1.0 * si.meter, 76 "n_ccn": 750 / si.cm**3, 77 "r_ccn": 15 * si.nanometer, 78 "type_droplet_distribution": "monodisperse", 79 "RH_0": 0.995, 80 "p0": 500 * si.hectopascals, 81 "deposition_enable": True, 82 "number_of_ensemble_runs": 1, 83 "silent": True, 84 } 85 return standard
formulae =
<PySDM.formulae.Formulae object>
def
run_simulations(setting):
15def run_simulations(setting): 16 17 simulation = { 18 "settings": setting, 19 "ensemble_member_outputs": [], 20 } 21 for _ in range(setting["number_of_ensemble_runs"]): 22 model_setup = Settings(**simulation["settings"]) 23 model_setup.formulae.seed += 1 24 model = Simulation(model_setup) 25 simulation["ensemble_member_outputs"].append(model.run()) 26 27 return simulation
def
hom_pure_droplet_freezing_backend():
30def hom_pure_droplet_freezing_backend(): 31 backends = { 32 "threshold": CPU( 33 formulae=Formulae( 34 particle_shape_and_density="MixedPhaseSpheres", 35 homogeneous_ice_nucleation_rate="Null", 36 saturation_vapour_pressure="MurphyKoop2005", 37 ), 38 ), 39 "KoopMurray2016": CPU( 40 formulae=Formulae( 41 particle_shape_and_density="MixedPhaseSpheres", 42 homogeneous_ice_nucleation_rate="KoopMurray2016", 43 saturation_vapour_pressure="MurphyKoop2005", 44 ), 45 ), 46 "Spichtinger2023": CPU( 47 formulae=Formulae( 48 particle_shape_and_density="MixedPhaseSpheres", 49 homogeneous_ice_nucleation_rate="Koop_Correction", 50 saturation_vapour_pressure="MurphyKoop2005", 51 ), 52 ), 53 "Koop2000": CPU( 54 formulae=Formulae( 55 particle_shape_and_density="MixedPhaseSpheres", 56 homogeneous_ice_nucleation_rate="Koop2000", 57 saturation_vapour_pressure="MurphyKoop2005", 58 ), 59 ), 60 "KoopMurray2016_DWA": CPU( 61 formulae=Formulae( 62 particle_shape_and_density="MixedPhaseSpheres", 63 homogeneous_ice_nucleation_rate="KoopMurray2016_DWA", 64 saturation_vapour_pressure="MurphyKoop2005", 65 ), 66 ), 67 } 68 return backends
def
hom_pure_droplet_freezing_standard_setup():
71def hom_pure_droplet_freezing_standard_setup(): 72 standard = { 73 "n_sd": int(1e3), 74 "w_updraft": 1.0 * si.meter / si.second, 75 "T0": 245 * si.kelvin, 76 "dz": 1.0 * si.meter, 77 "n_ccn": 750 / si.cm**3, 78 "r_ccn": 15 * si.nanometer, 79 "type_droplet_distribution": "monodisperse", 80 "RH_0": 0.995, 81 "p0": 500 * si.hectopascals, 82 "deposition_enable": True, 83 "number_of_ensemble_runs": 1, 84 "silent": True, 85 } 86 return standard