PySDM_examples.Abade_and_Albuquerque_2024.settings

 1from pystrict import strict
 2
 3from PySDM import Formulae
 4from PySDM.physics import si
 5from PySDM.initialisation.spectra import Lognormal
 6
 7
 8@strict
 9class Settings:
10    def __init__(
11        self,
12        *,
13        n_sd: int,
14        timestep: float,
15        enable_immersion_freezing: bool = True,
16        enable_vapour_deposition_on_ice: bool = True,
17        inp_frac: float = 0.1,
18    ):
19        self.n_sd = n_sd
20        self.timestep = timestep
21        self.enable_immersion_freezing = enable_immersion_freezing
22        self.enable_vapour_deposition_on_ice = enable_vapour_deposition_on_ice
23
24        self.initial_total_pressure = 1000 * si.hPa  # note: not given in the paper
25
26        # parameters from the paper
27        self.formulae = Formulae(
28            constants={
29                "bulk_phase_partitioning_exponent": 0.1,
30                "NIEMAND_A": -0.517,
31                "NIEMAND_B": 8.934,
32            },
33            bulk_phase_partitioning="KaulEtAl2015",
34            particle_shape_and_density="MixedPhaseSpheres",
35            diffusion_coordinate="WaterMassLogarithm",
36            freezing_temperature_spectrum="Niemand_et_al_2012",
37        )
38        self.initial_water_vapour_mixing_ratio = 1.5 * si.g / si.kg
39        self.parcel_linear_extent = 100 * si.m
40        self.updraft = 0.5 * si.m / si.s
41        self.freezing_inp_frac = inp_frac
42        self.freezing_inp_dry_radius = 0.5 * si.um
43
44        thd_0 = self.formulae.state_variable_triplet.th_dry(
45            th_std=269 * si.K,
46            water_vapour_mixing_ratio=self.initial_water_vapour_mixing_ratio,
47        )
48        rhod_0 = self.formulae.state_variable_triplet.rho_d(
49            p=self.initial_total_pressure,
50            water_vapour_mixing_ratio=self.initial_water_vapour_mixing_ratio,
51            theta_std=thd_0,
52        )
53
54        self.mass_of_dry_air = rhod_0 * self.formulae.trivia.volume(
55            radius=self.parcel_linear_extent
56        )
57        self.soluble_aerosol = Lognormal(
58            norm_factor=200
59            / si.mg
60            * self.mass_of_dry_air,  # note: assuming per mg of dry air
61            m_mode=75 * si.nm,
62            s_geom=1.6,
63        )
64        self.kappa = 0.6
65        self.initial_temperature = self.formulae.state_variable_triplet.T(
66            rhod=rhod_0, thd=thd_0
67        )
@strict
class Settings:
 9@strict
10class Settings:
11    def __init__(
12        self,
13        *,
14        n_sd: int,
15        timestep: float,
16        enable_immersion_freezing: bool = True,
17        enable_vapour_deposition_on_ice: bool = True,
18        inp_frac: float = 0.1,
19    ):
20        self.n_sd = n_sd
21        self.timestep = timestep
22        self.enable_immersion_freezing = enable_immersion_freezing
23        self.enable_vapour_deposition_on_ice = enable_vapour_deposition_on_ice
24
25        self.initial_total_pressure = 1000 * si.hPa  # note: not given in the paper
26
27        # parameters from the paper
28        self.formulae = Formulae(
29            constants={
30                "bulk_phase_partitioning_exponent": 0.1,
31                "NIEMAND_A": -0.517,
32                "NIEMAND_B": 8.934,
33            },
34            bulk_phase_partitioning="KaulEtAl2015",
35            particle_shape_and_density="MixedPhaseSpheres",
36            diffusion_coordinate="WaterMassLogarithm",
37            freezing_temperature_spectrum="Niemand_et_al_2012",
38        )
39        self.initial_water_vapour_mixing_ratio = 1.5 * si.g / si.kg
40        self.parcel_linear_extent = 100 * si.m
41        self.updraft = 0.5 * si.m / si.s
42        self.freezing_inp_frac = inp_frac
43        self.freezing_inp_dry_radius = 0.5 * si.um
44
45        thd_0 = self.formulae.state_variable_triplet.th_dry(
46            th_std=269 * si.K,
47            water_vapour_mixing_ratio=self.initial_water_vapour_mixing_ratio,
48        )
49        rhod_0 = self.formulae.state_variable_triplet.rho_d(
50            p=self.initial_total_pressure,
51            water_vapour_mixing_ratio=self.initial_water_vapour_mixing_ratio,
52            theta_std=thd_0,
53        )
54
55        self.mass_of_dry_air = rhod_0 * self.formulae.trivia.volume(
56            radius=self.parcel_linear_extent
57        )
58        self.soluble_aerosol = Lognormal(
59            norm_factor=200
60            / si.mg
61            * self.mass_of_dry_air,  # note: assuming per mg of dry air
62            m_mode=75 * si.nm,
63            s_geom=1.6,
64        )
65        self.kappa = 0.6
66        self.initial_temperature = self.formulae.state_variable_triplet.T(
67            rhod=rhod_0, thd=thd_0
68        )
Settings( *, n_sd: int, timestep: float, enable_immersion_freezing: bool = True, enable_vapour_deposition_on_ice: bool = True, inp_frac: float = 0.1)
11    def __init__(
12        self,
13        *,
14        n_sd: int,
15        timestep: float,
16        enable_immersion_freezing: bool = True,
17        enable_vapour_deposition_on_ice: bool = True,
18        inp_frac: float = 0.1,
19    ):
20        self.n_sd = n_sd
21        self.timestep = timestep
22        self.enable_immersion_freezing = enable_immersion_freezing
23        self.enable_vapour_deposition_on_ice = enable_vapour_deposition_on_ice
24
25        self.initial_total_pressure = 1000 * si.hPa  # note: not given in the paper
26
27        # parameters from the paper
28        self.formulae = Formulae(
29            constants={
30                "bulk_phase_partitioning_exponent": 0.1,
31                "NIEMAND_A": -0.517,
32                "NIEMAND_B": 8.934,
33            },
34            bulk_phase_partitioning="KaulEtAl2015",
35            particle_shape_and_density="MixedPhaseSpheres",
36            diffusion_coordinate="WaterMassLogarithm",
37            freezing_temperature_spectrum="Niemand_et_al_2012",
38        )
39        self.initial_water_vapour_mixing_ratio = 1.5 * si.g / si.kg
40        self.parcel_linear_extent = 100 * si.m
41        self.updraft = 0.5 * si.m / si.s
42        self.freezing_inp_frac = inp_frac
43        self.freezing_inp_dry_radius = 0.5 * si.um
44
45        thd_0 = self.formulae.state_variable_triplet.th_dry(
46            th_std=269 * si.K,
47            water_vapour_mixing_ratio=self.initial_water_vapour_mixing_ratio,
48        )
49        rhod_0 = self.formulae.state_variable_triplet.rho_d(
50            p=self.initial_total_pressure,
51            water_vapour_mixing_ratio=self.initial_water_vapour_mixing_ratio,
52            theta_std=thd_0,
53        )
54
55        self.mass_of_dry_air = rhod_0 * self.formulae.trivia.volume(
56            radius=self.parcel_linear_extent
57        )
58        self.soluble_aerosol = Lognormal(
59            norm_factor=200
60            / si.mg
61            * self.mass_of_dry_air,  # note: assuming per mg of dry air
62            m_mode=75 * si.nm,
63            s_geom=1.6,
64        )
65        self.kappa = 0.6
66        self.initial_temperature = self.formulae.state_variable_triplet.T(
67            rhod=rhod_0, thd=thd_0
68        )
n_sd
timestep
enable_immersion_freezing
enable_vapour_deposition_on_ice
initial_total_pressure
formulae
initial_water_vapour_mixing_ratio
parcel_linear_extent
updraft
freezing_inp_frac
freezing_inp_dry_radius
mass_of_dry_air
soluble_aerosol
kappa
initial_temperature