PySDM_examples.Pyrcel.settings

 1from typing import Dict
 2
 3import numpy as np
 4from pystrict import strict
 5
 6from PySDM import Formulae
 7from PySDM.initialisation.impl.spectrum import Spectrum
 8
 9
10@strict
11class Settings:
12    def __init__(
13        self,
14        *,
15        dz: float,
16        n_sd_per_mode: tuple,
17        aerosol_modes_by_kappa: Dict[float, Spectrum],
18        vertical_velocity: float,
19        initial_temperature: float,
20        initial_pressure: float,
21        initial_relative_humidity: float,
22        displacement: float,
23        formulae: Formulae,
24    ):
25        self.formulae = formulae
26        self.n_sd_per_mode = n_sd_per_mode
27        self.aerosol_modes_by_kappa = aerosol_modes_by_kappa
28
29        const = self.formulae.constants
30        self.vertical_velocity = vertical_velocity
31        self.initial_pressure = initial_pressure
32        self.initial_temperature = initial_temperature
33        pv0 = initial_relative_humidity * formulae.saturation_vapour_pressure.pvs_water(
34            initial_temperature
35        )
36        self.initial_vapour_mixing_ratio = const.eps * pv0 / (initial_pressure - pv0)
37        self.t_max = displacement / vertical_velocity
38        self.timestep = dz / vertical_velocity
39        self.output_interval = self.timestep
40
41    @property
42    def initial_air_density(self):
43        return self.formulae.state_variable_triplet.rho_of_rhod_and_water_vapour_mixing_ratio(
44            rhod=self.formulae.trivia.p_d(
45                self.initial_pressure, self.initial_vapour_mixing_ratio
46            )
47            / self.initial_temperature
48            / self.formulae.constants.Rd,
49            water_vapour_mixing_ratio=self.initial_vapour_mixing_ratio,
50        )
51
52    @property
53    def nt(self) -> int:
54        nt = self.t_max / self.timestep
55        nt_int = round(nt)
56        np.testing.assert_almost_equal(nt, nt_int)
57        return nt_int
58
59    @property
60    def steps_per_output_interval(self) -> int:
61        return int(self.output_interval / self.timestep)
62
63    @property
64    def output_steps(self) -> np.ndarray:
65        return np.arange(0, self.nt + 1, self.steps_per_output_interval)
@strict
class Settings:
11@strict
12class Settings:
13    def __init__(
14        self,
15        *,
16        dz: float,
17        n_sd_per_mode: tuple,
18        aerosol_modes_by_kappa: Dict[float, Spectrum],
19        vertical_velocity: float,
20        initial_temperature: float,
21        initial_pressure: float,
22        initial_relative_humidity: float,
23        displacement: float,
24        formulae: Formulae,
25    ):
26        self.formulae = formulae
27        self.n_sd_per_mode = n_sd_per_mode
28        self.aerosol_modes_by_kappa = aerosol_modes_by_kappa
29
30        const = self.formulae.constants
31        self.vertical_velocity = vertical_velocity
32        self.initial_pressure = initial_pressure
33        self.initial_temperature = initial_temperature
34        pv0 = initial_relative_humidity * formulae.saturation_vapour_pressure.pvs_water(
35            initial_temperature
36        )
37        self.initial_vapour_mixing_ratio = const.eps * pv0 / (initial_pressure - pv0)
38        self.t_max = displacement / vertical_velocity
39        self.timestep = dz / vertical_velocity
40        self.output_interval = self.timestep
41
42    @property
43    def initial_air_density(self):
44        return self.formulae.state_variable_triplet.rho_of_rhod_and_water_vapour_mixing_ratio(
45            rhod=self.formulae.trivia.p_d(
46                self.initial_pressure, self.initial_vapour_mixing_ratio
47            )
48            / self.initial_temperature
49            / self.formulae.constants.Rd,
50            water_vapour_mixing_ratio=self.initial_vapour_mixing_ratio,
51        )
52
53    @property
54    def nt(self) -> int:
55        nt = self.t_max / self.timestep
56        nt_int = round(nt)
57        np.testing.assert_almost_equal(nt, nt_int)
58        return nt_int
59
60    @property
61    def steps_per_output_interval(self) -> int:
62        return int(self.output_interval / self.timestep)
63
64    @property
65    def output_steps(self) -> np.ndarray:
66        return np.arange(0, self.nt + 1, self.steps_per_output_interval)
Settings( *, dz: float, n_sd_per_mode: tuple, aerosol_modes_by_kappa: Dict[float, PySDM.initialisation.impl.spectrum.Spectrum], vertical_velocity: float, initial_temperature: float, initial_pressure: float, initial_relative_humidity: float, displacement: float, formulae: PySDM.formulae.Formulae)
13    def __init__(
14        self,
15        *,
16        dz: float,
17        n_sd_per_mode: tuple,
18        aerosol_modes_by_kappa: Dict[float, Spectrum],
19        vertical_velocity: float,
20        initial_temperature: float,
21        initial_pressure: float,
22        initial_relative_humidity: float,
23        displacement: float,
24        formulae: Formulae,
25    ):
26        self.formulae = formulae
27        self.n_sd_per_mode = n_sd_per_mode
28        self.aerosol_modes_by_kappa = aerosol_modes_by_kappa
29
30        const = self.formulae.constants
31        self.vertical_velocity = vertical_velocity
32        self.initial_pressure = initial_pressure
33        self.initial_temperature = initial_temperature
34        pv0 = initial_relative_humidity * formulae.saturation_vapour_pressure.pvs_water(
35            initial_temperature
36        )
37        self.initial_vapour_mixing_ratio = const.eps * pv0 / (initial_pressure - pv0)
38        self.t_max = displacement / vertical_velocity
39        self.timestep = dz / vertical_velocity
40        self.output_interval = self.timestep
formulae
n_sd_per_mode
aerosol_modes_by_kappa
vertical_velocity
initial_pressure
initial_temperature
initial_vapour_mixing_ratio
t_max
timestep
output_interval
initial_air_density
42    @property
43    def initial_air_density(self):
44        return self.formulae.state_variable_triplet.rho_of_rhod_and_water_vapour_mixing_ratio(
45            rhod=self.formulae.trivia.p_d(
46                self.initial_pressure, self.initial_vapour_mixing_ratio
47            )
48            / self.initial_temperature
49            / self.formulae.constants.Rd,
50            water_vapour_mixing_ratio=self.initial_vapour_mixing_ratio,
51        )
nt: int
53    @property
54    def nt(self) -> int:
55        nt = self.t_max / self.timestep
56        nt_int = round(nt)
57        np.testing.assert_almost_equal(nt, nt_int)
58        return nt_int
steps_per_output_interval: int
60    @property
61    def steps_per_output_interval(self) -> int:
62        return int(self.output_interval / self.timestep)
output_steps: numpy.ndarray
64    @property
65    def output_steps(self) -> np.ndarray:
66        return np.arange(0, self.nt + 1, self.steps_per_output_interval)