PySDM_examples.Luettmer_homogeneous_freezing.commons

commons for homogeneous freezing notebooks

 1"""commons for homogeneous freezing notebooks"""
 2
 3from PySDM_examples.Luettmer_homogeneous_freezing.settings import Settings
 4from PySDM_examples.Luettmer_homogeneous_freezing.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    cmn = {"override_jit_flags": {"parallel": False}}
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            **cmn,
39        ),
40        "KoopMurray2016": CPU(
41            formulae=Formulae(
42                particle_shape_and_density="MixedPhaseSpheres",
43                homogeneous_ice_nucleation_rate="KoopMurray2016",
44                saturation_vapour_pressure="MurphyKoop2005",
45            ),
46            **cmn,
47        ),
48        "Spichtinger2023": CPU(
49            formulae=Formulae(
50                particle_shape_and_density="MixedPhaseSpheres",
51                homogeneous_ice_nucleation_rate="Koop_Correction",
52                saturation_vapour_pressure="MurphyKoop2005",
53            ),
54            **cmn,
55        ),
56        "Koop2000": CPU(
57            formulae=Formulae(
58                particle_shape_and_density="MixedPhaseSpheres",
59                homogeneous_ice_nucleation_rate="Koop2000",
60                saturation_vapour_pressure="MurphyKoop2005",
61            ),
62            **cmn,
63        ),
64        "KoopMurray2016_DWA": CPU(
65            formulae=Formulae(
66                particle_shape_and_density="MixedPhaseSpheres",
67                homogeneous_ice_nucleation_rate="KoopMurray2016_DWA",
68                saturation_vapour_pressure="MurphyKoop2005",
69            ),
70            **cmn,
71        ),
72    }
73    return backends
74
75
76def hom_pure_droplet_freezing_standard_setup():
77    standard = {
78        "n_sd": int(1e3),
79        "w_updraft": 1.0 * si.meter / si.second,
80        "T0": 245 * si.kelvin,
81        "dz": 1.0 * si.meter,
82        "n_ccn": 750 / si.cm**3,
83        "r_ccn": 15 * si.nanometer,
84        "type_droplet_distribution": "monodisperse",
85        "RH_0": 0.995,
86        "p0": 500 * si.hectopascals,
87        "deposition_enable": True,
88        "number_of_ensemble_runs": 1,
89        "silent": True,
90    }
91    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    cmn = {"override_jit_flags": {"parallel": False}}
32    backends = {
33        "threshold": CPU(
34            formulae=Formulae(
35                particle_shape_and_density="MixedPhaseSpheres",
36                homogeneous_ice_nucleation_rate="Null",
37                saturation_vapour_pressure="MurphyKoop2005",
38            ),
39            **cmn,
40        ),
41        "KoopMurray2016": CPU(
42            formulae=Formulae(
43                particle_shape_and_density="MixedPhaseSpheres",
44                homogeneous_ice_nucleation_rate="KoopMurray2016",
45                saturation_vapour_pressure="MurphyKoop2005",
46            ),
47            **cmn,
48        ),
49        "Spichtinger2023": CPU(
50            formulae=Formulae(
51                particle_shape_and_density="MixedPhaseSpheres",
52                homogeneous_ice_nucleation_rate="Koop_Correction",
53                saturation_vapour_pressure="MurphyKoop2005",
54            ),
55            **cmn,
56        ),
57        "Koop2000": CPU(
58            formulae=Formulae(
59                particle_shape_and_density="MixedPhaseSpheres",
60                homogeneous_ice_nucleation_rate="Koop2000",
61                saturation_vapour_pressure="MurphyKoop2005",
62            ),
63            **cmn,
64        ),
65        "KoopMurray2016_DWA": CPU(
66            formulae=Formulae(
67                particle_shape_and_density="MixedPhaseSpheres",
68                homogeneous_ice_nucleation_rate="KoopMurray2016_DWA",
69                saturation_vapour_pressure="MurphyKoop2005",
70            ),
71            **cmn,
72        ),
73    }
74    return backends
def hom_pure_droplet_freezing_standard_setup():
77def hom_pure_droplet_freezing_standard_setup():
78    standard = {
79        "n_sd": int(1e3),
80        "w_updraft": 1.0 * si.meter / si.second,
81        "T0": 245 * si.kelvin,
82        "dz": 1.0 * si.meter,
83        "n_ccn": 750 / si.cm**3,
84        "r_ccn": 15 * si.nanometer,
85        "type_droplet_distribution": "monodisperse",
86        "RH_0": 0.995,
87        "p0": 500 * si.hectopascals,
88        "deposition_enable": True,
89        "number_of_ensemble_runs": 1,
90        "silent": True,
91    }
92    return standard