PySDM-examples 2.39__py3-none-any.whl → 2.41__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. PySDM_examples/Abdul_Razzak_Ghan_2000/aerosol.py +19 -6
  2. PySDM_examples/Abdul_Razzak_Ghan_2000/run_ARG_parcel.py +4 -4
  3. PySDM_examples/Alpert_and_Knopf_2016/__init__.py +1 -0
  4. PySDM_examples/Arabas_and_Shima_2017/__init__.py +1 -0
  5. PySDM_examples/Arabas_et_al_2015/settings.py +1 -4
  6. PySDM_examples/Arabas_et_al_2023/__init__.py +1 -0
  7. PySDM_examples/Arabas_et_al_2023/plots.py +5 -3
  8. PySDM_examples/Bartman_et_al_2021/label.py +5 -5
  9. PySDM_examples/Berry_1967/__init__.py +1 -0
  10. PySDM_examples/Bieli_et_al_2022/__init__.py +1 -0
  11. PySDM_examples/Bolot_et_al_2013/__init__.py +1 -0
  12. PySDM_examples/Ervens_and_Feingold_2012/__init__.py +1 -0
  13. PySDM_examples/Ervens_and_Feingold_2012/settings.py +1 -3
  14. PySDM_examples/Kreidenweis_et_al_2003/settings.py +7 -5
  15. PySDM_examples/Lowe_et_al_2019/aerosol.py +21 -9
  16. PySDM_examples/Lowe_et_al_2019/aerosol_code.py +34 -16
  17. PySDM_examples/Merlivat_and_Nief_1967/__init__.py +1 -0
  18. PySDM_examples/Niedermeier_et_al_2014/__init__.py +1 -0
  19. PySDM_examples/Niedermeier_et_al_2014/simulation.py +5 -3
  20. PySDM_examples/Pierchala_et_al_2022/__init__.py +1 -0
  21. PySDM_examples/Pyrcel/profile_plotter.py +5 -5
  22. PySDM_examples/Shipway_and_Hill_2012/settings.py +6 -6
  23. PySDM_examples/Singer_Ward/aerosol.py +16 -8
  24. PySDM_examples/Srivastava_1982/__init__.py +1 -0
  25. PySDM_examples/Srivastava_1982/example.py +4 -4
  26. PySDM_examples/Srivastava_1982/simulation.py +3 -3
  27. PySDM_examples/Szumowski_et_al_1998/gui_viewer.py +9 -7
  28. PySDM_examples/Szumowski_et_al_1998/simulation.py +5 -5
  29. PySDM_examples/Van_Hook_1968/__init__.py +1 -0
  30. PySDM_examples/__init__.py +1 -0
  31. PySDM_examples/deJong_Mackay_et_al_2023/__init__.py +1 -0
  32. PySDM_examples/utils/__init__.py +1 -0
  33. PySDM_examples/utils/notebook_vars.py +1 -0
  34. {PySDM_examples-2.39.dist-info → PySDM_examples-2.41.dist-info}/METADATA +4 -2
  35. {PySDM_examples-2.39.dist-info → PySDM_examples-2.41.dist-info}/RECORD +37 -37
  36. {PySDM_examples-2.39.dist-info → PySDM_examples-2.41.dist-info}/WHEEL +0 -0
  37. {PySDM_examples-2.39.dist-info → PySDM_examples-2.41.dist-info}/top_level.txt +0 -0
@@ -16,6 +16,7 @@ CONSTANTS_ARG = {
16
16
  class AerosolARG(DryAerosolMixture):
17
17
  def __init__(
18
18
  self,
19
+ water_molar_volume: float,
19
20
  M2_sol: float = 0,
20
21
  M2_N: float = 100 / si.cm**3,
21
22
  M2_rad: float = 50 * si.nm,
@@ -35,13 +36,19 @@ class AerosolARG(DryAerosolMixture):
35
36
  )
36
37
  self.modes = (
37
38
  {
38
- "kappa": self.kappa({"(NH4)2SO4": 1.0, "insoluble": 0.0}),
39
+ "kappa": self.kappa(
40
+ mass_fractions={"(NH4)2SO4": 1.0, "insoluble": 0.0},
41
+ water_molar_volume=water_molar_volume,
42
+ ),
39
43
  "spectrum": spectra.Lognormal(
40
44
  norm_factor=100.0 / si.cm**3, m_mode=50.0 * si.nm, s_geom=2.0
41
45
  ),
42
46
  },
43
47
  {
44
- "kappa": self.kappa({"(NH4)2SO4": M2_sol, "insoluble": (1 - M2_sol)}),
48
+ "kappa": self.kappa(
49
+ mass_fractions={"(NH4)2SO4": M2_sol, "insoluble": (1 - M2_sol)},
50
+ water_molar_volume=water_molar_volume,
51
+ ),
45
52
  "spectrum": spectra.Lognormal(
46
53
  norm_factor=M2_N, m_mode=M2_rad, s_geom=2.0
47
54
  ),
@@ -51,7 +58,7 @@ class AerosolARG(DryAerosolMixture):
51
58
 
52
59
  @strict
53
60
  class AerosolWhitby(DryAerosolMixture):
54
- def __init__(self):
61
+ def __init__(self, water_molar_volume: float):
55
62
  nuclei = {"(NH4)2SO4": 1.0}
56
63
  accum = {"(NH4)2SO4": 1.0}
57
64
  coarse = {"(NH4)2SO4": 1.0}
@@ -69,19 +76,25 @@ class AerosolWhitby(DryAerosolMixture):
69
76
  )
70
77
  self.modes = (
71
78
  {
72
- "kappa": self.kappa(nuclei),
79
+ "kappa": self.kappa(
80
+ mass_fractions=nuclei, water_molar_volume=water_molar_volume
81
+ ),
73
82
  "spectrum": spectra.Lognormal(
74
83
  norm_factor=1000.0 / si.cm**3, m_mode=0.008 * si.um, s_geom=1.6
75
84
  ),
76
85
  },
77
86
  {
78
- "kappa": self.kappa(accum),
87
+ "kappa": self.kappa(
88
+ mass_fractions=accum, water_molar_volume=water_molar_volume
89
+ ),
79
90
  "spectrum": spectra.Lognormal(
80
91
  norm_factor=800 / si.cm**3, m_mode=0.034 * si.um, s_geom=2.1
81
92
  ),
82
93
  },
83
94
  {
84
- "kappa": self.kappa(coarse),
95
+ "kappa": self.kappa(
96
+ mass_fractions=coarse, water_molar_volume=water_molar_volume
97
+ ),
85
98
  "spectrum": spectra.Lognormal(
86
99
  norm_factor=0.72 / si.cm**3, m_mode=0.46 * si.um, s_geom=2.2
87
100
  ),
@@ -6,7 +6,6 @@ from PySDM_examples.Abdul_Razzak_Ghan_2000.aerosol import CONSTANTS_ARG, Aerosol
6
6
  from PySDM import Builder, Formulae
7
7
  from PySDM import products as PySDM_products
8
8
  from PySDM.backends import CPU
9
- from PySDM.backends.impl_numba.test_helpers import scipy_ode_condensation_solver
10
9
  from PySDM.dynamics import AmbientThermodynamics, Condensation
11
10
  from PySDM.environments import Parcel
12
11
  from PySDM.initialisation import equilibrate_wet_radii
@@ -47,10 +46,12 @@ def run_parcel(
47
46
  T0=T0,
48
47
  )
49
48
 
50
- aerosol = AerosolARG(M2_sol=sol2, M2_N=N2, M2_rad=rad2)
49
+ aerosol = AerosolARG(
50
+ M2_sol=sol2, M2_N=N2, M2_rad=rad2, water_molar_volume=const.Mv / const.rho_w
51
+ )
51
52
  n_sd = n_sd_per_mode * len(aerosol.modes)
52
53
 
53
- builder = Builder(backend=CPU(), n_sd=n_sd, environment=env)
54
+ builder = Builder(backend=CPU(formulae), n_sd=n_sd, environment=env)
54
55
  builder.add_dynamic(AmbientThermodynamics())
55
56
  builder.add_dynamic(Condensation())
56
57
  builder.request_attribute("critical supersaturation")
@@ -79,7 +80,6 @@ def run_parcel(
79
80
  attributes["volume"] = builder.formulae.trivia.volume(radius=r_wet)
80
81
 
81
82
  particulator = builder.build(attributes, products=products)
82
- scipy_ode_condensation_solver.patch_particulator(particulator)
83
83
 
84
84
  output = {product.name: [] for product in particulator.products.values()}
85
85
  output_attributes = {
@@ -2,6 +2,7 @@
2
2
  box-environment example based on
3
3
  [Alpert & Knopf 2016 (Atmos. Chem. Phys. 16)](https://doi.org/10.5194/acp-16-2083-2016)
4
4
  """
5
+
5
6
  # pylint: disable=invalid-name
6
7
  from .simulation import Simulation, simulation
7
8
  from .table_1 import Table1
@@ -2,4 +2,5 @@
2
2
  condensation-evaportaion parcel example based on
3
3
  [Arabas and Shima 2017 (Nonlin. Processes Geophys. 24)](https://doi.org/10.5194/npg-24-535-2017)
4
4
  """
5
+
5
6
  # pylint: disable=invalid-name
@@ -28,10 +28,7 @@ class Settings(StratoCumulus):
28
28
  def __init__(
29
29
  self,
30
30
  formulae=None,
31
- rhod_w_max: float = 0.6
32
- * si.metres
33
- / si.seconds
34
- * (si.kilogram / si.metre**3),
31
+ rhod_w_max: float = 0.6 * si.metres / si.seconds * (si.kilogram / si.metre**3),
35
32
  ):
36
33
  super().__init__(formulae or Formulae(), rhod_w_max=rhod_w_max)
37
34
 
@@ -2,6 +2,7 @@
2
2
  box-model and 2D prescribed-flow immersion-freezing examples based on
3
3
  [Arabas et al. 2023](https://arxiv.org/abs/2308.05015)
4
4
  """
5
+
5
6
  from .make_particulator import make_particulator
6
7
  from .plots import make_freezing_spec_plot, make_pdf_plot, make_temperature_plot
7
8
  from .run_simulation import run_simulation
@@ -28,9 +28,11 @@ def make_temperature_plot(data):
28
28
  xy2.plot(
29
29
  datum["t"],
30
30
  np.asarray(datum["qi"]) / qi_unit, # marker='.',
31
- label=f"Monte-Carlo ({labels[v['singular']]})"
32
- if not plotted[v["singular"]]
33
- else "",
31
+ label=(
32
+ f"Monte-Carlo ({labels[v['singular']]})"
33
+ if not plotted[v["singular"]]
34
+ else ""
35
+ ),
34
36
  color=colors[v["singular"]],
35
37
  )
36
38
  plotted[v["singular"]] = True
@@ -1,11 +1,11 @@
1
1
  def label(settings):
2
2
  lbl = str(
3
3
  {
4
- k.replace("condensation_", ""): f"{v:.1e}"
5
- if isinstance(v, float)
6
- else str(v).zfill(2)
7
- if isinstance(v, int)
8
- else v
4
+ k.replace("condensation_", ""): (
5
+ f"{v:.1e}"
6
+ if isinstance(v, float)
7
+ else str(v).zfill(2) if isinstance(v, int) else v
8
+ )
9
9
  for k, v in settings.items()
10
10
  }
11
11
  )
@@ -2,4 +2,5 @@
2
2
  box-model coalescence-only example based on
3
3
  [Berry 1967 (J. Atmos. Sci. 24)](https://doi.org/10.1175/1520-0469(1967)024%3C0688:CDGBC%3E2.0.CO;2)
4
4
  """
5
+
5
6
  # pylint: disable=invalid-name
@@ -1,4 +1,5 @@
1
1
  """
2
2
  collision-only box-model example from [Bieli et al. 2022](https://doi.org/10.1029/2022MS002994)
3
3
  """
4
+
4
5
  # pylint: disable=invalid-name
@@ -2,4 +2,5 @@
2
2
  figures from Bolot et al. 2013 (Atmos. Chem. Phys. 13)
3
3
  https://doi.org/10.5194/acp-13-7903-2013
4
4
  """
5
+
5
6
  # pylint: disable=invalid-name
@@ -2,4 +2,5 @@
2
2
  aerosol distribution from
3
3
  [Ervens and Feingold 2012 (Atmos. Chem. Phys. 12)](https://doi.org/10.5194/acp-12-5807-2012)
4
4
  """
5
+
5
6
  # pylint: disable=invalid-name
@@ -7,8 +7,6 @@ def sampled_ccn_diameter_number_concentration_spectrum(
7
7
  n_sd: int = 11, size_range: tuple = (0.02 * si.um, 2 * si.um)
8
8
  ):
9
9
  return Logarithmic(
10
- spectrum=Lognormal(
11
- s_geom=1.4, m_mode=0.04 * si.um, norm_factor=100 / si.cm**3
12
- ),
10
+ spectrum=Lognormal(s_geom=1.4, m_mode=0.04 * si.um, norm_factor=100 / si.cm**3),
13
11
  size_range=size_range,
14
12
  ).sample(n_sd)
@@ -70,11 +70,13 @@ class Settings:
70
70
 
71
71
  self.starting_amounts = {
72
72
  "moles_"
73
- + k: self.formulae.trivia.volume(self.r_dry)
74
- * self.DRY_RHO
75
- / self.dry_molar_mass
76
- if k in ("N_mIII", "S_VI")
77
- else np.zeros(self.n_sd)
73
+ + k: (
74
+ self.formulae.trivia.volume(self.r_dry)
75
+ * self.DRY_RHO
76
+ / self.dry_molar_mass
77
+ if k in ("N_mIII", "S_VI")
78
+ else np.zeros(self.n_sd)
79
+ )
78
80
  for k in AQUEOUS_COMPOUNDS
79
81
  }
80
82
 
@@ -8,7 +8,9 @@ from PySDM.physics import si
8
8
 
9
9
  @strict
10
10
  class AerosolMarine(DryAerosolMixture):
11
- def __init__(self, Forg: float = 0.2, Acc_N2: float = 134):
11
+ def __init__(
12
+ self, water_molar_volume: float, Forg: float = 0.2, Acc_N2: float = 134
13
+ ):
12
14
  Aitken = {
13
15
  "palmitic": Forg,
14
16
  "(NH4)2SO4": (1 - Forg),
@@ -48,7 +50,7 @@ class AerosolMarine(DryAerosolMixture):
48
50
  self.modes = (
49
51
  {
50
52
  "f_org": 1 - self.f_soluble_volume(Aitken),
51
- "kappa": self.kappa(Aitken),
53
+ "kappa": self.kappa(Aitken, water_molar_volume=water_molar_volume),
52
54
  "nu_org": self.nu_org(Aitken),
53
55
  "spectrum": spectra.Lognormal(
54
56
  norm_factor=226 / si.cm**3, m_mode=19.6 * si.nm, s_geom=1.71
@@ -56,7 +58,9 @@ class AerosolMarine(DryAerosolMixture):
56
58
  },
57
59
  {
58
60
  "f_org": 1 - self.f_soluble_volume(Accumulation),
59
- "kappa": self.kappa(Accumulation),
61
+ "kappa": self.kappa(
62
+ Accumulation, water_molar_volume=water_molar_volume
63
+ ),
60
64
  "nu_org": self.nu_org(Accumulation),
61
65
  "spectrum": spectra.Lognormal(
62
66
  norm_factor=Acc_N2 / si.cm**3, m_mode=69.5 * si.nm, s_geom=1.7
@@ -69,7 +73,9 @@ class AerosolMarine(DryAerosolMixture):
69
73
 
70
74
  @strict
71
75
  class AerosolBoreal(DryAerosolMixture):
72
- def __init__(self, Forg: float = 0.668, Acc_N2: float = 540):
76
+ def __init__(
77
+ self, water_molar_volume: float, Forg: float = 0.668, Acc_N2: float = 540
78
+ ):
73
79
  # note: SOA1 or SOA2 unclear from the paper
74
80
  Aitken = {
75
81
  "SOA1": Forg,
@@ -116,7 +122,7 @@ class AerosolBoreal(DryAerosolMixture):
116
122
  self.modes = (
117
123
  {
118
124
  "f_org": 1 - self.f_soluble_volume(Aitken),
119
- "kappa": self.kappa(Aitken),
125
+ "kappa": self.kappa(Aitken, water_molar_volume=water_molar_volume),
120
126
  "nu_org": self.nu_org(Aitken),
121
127
  "spectrum": spectra.Lognormal(
122
128
  norm_factor=1110 / si.cm**3, m_mode=22.7 * si.nm, s_geom=1.75
@@ -124,7 +130,9 @@ class AerosolBoreal(DryAerosolMixture):
124
130
  },
125
131
  {
126
132
  "f_org": 1 - self.f_soluble_volume(Accumulation),
127
- "kappa": self.kappa(Accumulation),
133
+ "kappa": self.kappa(
134
+ Accumulation, water_molar_volume=water_molar_volume
135
+ ),
128
136
  "nu_org": self.nu_org(Accumulation),
129
137
  "spectrum": spectra.Lognormal(
130
138
  norm_factor=Acc_N2 / si.cm**3,
@@ -139,7 +147,9 @@ class AerosolBoreal(DryAerosolMixture):
139
147
 
140
148
  @strict
141
149
  class AerosolNascent(DryAerosolMixture):
142
- def __init__(self, Acc_Forg: float = 0.3, Acc_N2: float = 30):
150
+ def __init__(
151
+ self, water_molar_volume: float, Acc_Forg: float = 0.3, Acc_N2: float = 30
152
+ ):
143
153
  Ultrafine = {
144
154
  "SOA1": 0.52,
145
155
  "SOA2": 0,
@@ -178,7 +188,7 @@ class AerosolNascent(DryAerosolMixture):
178
188
  self.modes = (
179
189
  {
180
190
  "f_org": 1 - self.f_soluble_volume(Ultrafine),
181
- "kappa": self.kappa(Ultrafine),
191
+ "kappa": self.kappa(Ultrafine, water_molar_volume=water_molar_volume),
182
192
  "nu_org": self.nu_org(Ultrafine),
183
193
  "spectrum": spectra.Lognormal(
184
194
  norm_factor=2000 / si.cm**3, m_mode=11.5 * si.nm, s_geom=1.71
@@ -186,7 +196,9 @@ class AerosolNascent(DryAerosolMixture):
186
196
  },
187
197
  {
188
198
  "f_org": 1 - self.f_soluble_volume(Accumulation),
189
- "kappa": self.kappa(Accumulation),
199
+ "kappa": self.kappa(
200
+ Accumulation, water_molar_volume=water_molar_volume
201
+ ),
190
202
  "nu_org": self.nu_org(Accumulation),
191
203
  "spectrum": spectra.Lognormal(
192
204
  norm_factor=Acc_N2 / si.cm**3, m_mode=100 * si.nm, s_geom=1.70
@@ -19,7 +19,9 @@ class AerosolMarine(DryAerosolMixture):
19
19
  # NMODE = [1 1];
20
20
  # DENSITY = [1.841, 1.78, 1.77, 0.852, 1.5, 2., 2.65, 2.165]; %[gcm-3]
21
21
 
22
- def __init__(self, Forg: float = 0.2, Acc_N2: float = 137):
22
+ def __init__(
23
+ self, water_molar_volume: float, Forg: float = 0.2, Acc_N2: float = 137
24
+ ):
23
25
  Aitken = {
24
26
  "palmitic": Forg,
25
27
  "(NH4)2SO4": (1 - Forg),
@@ -59,7 +61,9 @@ class AerosolMarine(DryAerosolMixture):
59
61
  self.modes = (
60
62
  {
61
63
  "f_org": 1 - self.f_soluble_volume(Aitken),
62
- "kappa": self.kappa(Aitken),
64
+ "kappa": self.kappa(
65
+ mass_fractions=Aitken, water_molar_volume=water_molar_volume
66
+ ),
63
67
  "nu_org": self.nu_org(Aitken),
64
68
  "spectrum": spectra.Lognormal(
65
69
  norm_factor=223 / si.cm**3, m_mode=19.6 * si.nm, s_geom=1.68
@@ -67,7 +71,9 @@ class AerosolMarine(DryAerosolMixture):
67
71
  },
68
72
  {
69
73
  "f_org": 1 - self.f_soluble_volume(Accumulation),
70
- "kappa": self.kappa(Accumulation),
74
+ "kappa": self.kappa(
75
+ mass_fractions=Accumulation, water_molar_volume=water_molar_volume
76
+ ),
71
77
  "nu_org": self.nu_org(Accumulation),
72
78
  "spectrum": spectra.Lognormal(
73
79
  norm_factor=Acc_N2 / si.cm**3, m_mode=69.5 * si.nm, s_geom=1.68
@@ -100,9 +106,11 @@ class AerosolBoreal(DryAerosolMixture):
100
106
  # DENSITY = [1.841, 1.78, 1.77, 1.5, 1.5, 2., 2.65, 2.165]; %[gcm-3]
101
107
  # DENSITY = [1.72, 1.78, 1.77, 1.2, 1.4, 2., 2.65, 2.165]; %[gcm-3]
102
108
 
103
- def __init__(self, Forg: float = 0.668, Acc_N2: float = 540):
104
- # TODO #604: SOA1 or SOA2 unclear from the paper
105
- # TODO #604: CAN'T FIND WHERE NH4NO3 PROPERTIES ARE DEFINED IN ICPM
109
+ def __init__(
110
+ self, water_molar_volume: float, Forg: float = 0.668, Acc_N2: float = 540
111
+ ):
112
+ # TODO #1247: SOA1 or SOA2 unclear from the paper
113
+ # TODO #1247: CAN'T FIND WHERE NH4NO3 PROPERTIES ARE DEFINED IN ICPM
106
114
  INORG_MASS_RATIO = 0.1515 / 0.1559
107
115
  Aitken = {
108
116
  "SOA1": Forg,
@@ -129,8 +137,8 @@ class AerosolBoreal(DryAerosolMixture):
129
137
  * si.gram
130
138
  / si.mole,
131
139
  "NH4NO3": Substance.from_formula("NH4NO3").mass * si.gram / si.mole,
132
- "SOA1": 190 * si.g / si.mole, # TODO #604: 190 OR 200?
133
- "SOA2": 368.4 * si.g / si.mole, # TODO #604: 368.4 OR 200?
140
+ "SOA1": 190 * si.g / si.mole, # TODO #1247: 190 OR 200?
141
+ "SOA2": 368.4 * si.g / si.mole, # TODO #1247: 368.4 OR 200?
134
142
  },
135
143
  densities={
136
144
  "SOA1": 1.2 * si.g / si.cm**3,
@@ -149,7 +157,9 @@ class AerosolBoreal(DryAerosolMixture):
149
157
  self.modes = (
150
158
  {
151
159
  "f_org": 1 - self.f_soluble_volume(Aitken),
152
- "kappa": self.kappa(Aitken),
160
+ "kappa": self.kappa(
161
+ mass_fractions=Aitken, water_molar_volume=water_molar_volume
162
+ ),
153
163
  "nu_org": self.nu_org(Aitken),
154
164
  "spectrum": spectra.Lognormal(
155
165
  norm_factor=1110 / si.cm**3, m_mode=22.65 * si.nm, s_geom=1.75
@@ -157,7 +167,9 @@ class AerosolBoreal(DryAerosolMixture):
157
167
  },
158
168
  {
159
169
  "f_org": 1 - self.f_soluble_volume(Accumulation),
160
- "kappa": self.kappa(Accumulation),
170
+ "kappa": self.kappa(
171
+ mass_fractions=Accumulation, water_molar_volume=water_molar_volume
172
+ ),
161
173
  "nu_org": self.nu_org(Accumulation),
162
174
  "spectrum": spectra.Lognormal(
163
175
  norm_factor=Acc_N2 / si.cm**3,
@@ -184,8 +196,10 @@ class AerosolNascent(DryAerosolMixture):
184
196
 
185
197
  # DENSITY = [1.841, 1.78, 1.77, 1.2, 1.24, 2., 2.65, 2.165]; %[gcm-3]
186
198
 
187
- def __init__(self, Acc_Forg: float = 0.3, Acc_N2: float = 30):
188
- # TODO #604: CAN'T FIND WHEN PHI IS MULTIPLIED FOR KÖHLER B IN ICPM CODE
199
+ def __init__(
200
+ self, water_molar_volume: float, Acc_Forg: float = 0.3, Acc_N2: float = 30
201
+ ):
202
+ # TODO #1247: CAN'T FIND WHEN PHI IS MULTIPLIED FOR KÖHLER B IN ICPM CODE
189
203
  Ultrafine = {
190
204
  "SOA1": 0.52,
191
205
  "SOA2": 0,
@@ -203,8 +217,8 @@ class AerosolNascent(DryAerosolMixture):
203
217
  "(NH4)2SO4": 3,
204
218
  },
205
219
  molar_masses={
206
- "SOA1": 190 * si.g / si.mole, # TODO #604: 190 OR 200?
207
- "SOA2": 368.4 * si.g / si.mole, # TODO #604: 368.4 OR 200?
220
+ "SOA1": 190 * si.g / si.mole, # TODO #1247: 190 OR 200?
221
+ "SOA2": 368.4 * si.g / si.mole, # TODO #1247: 368.4 OR 200?
208
222
  "(NH4)2SO4": Substance.from_formula("(NH4)2SO4").mass
209
223
  * si.gram
210
224
  / si.mole,
@@ -224,7 +238,9 @@ class AerosolNascent(DryAerosolMixture):
224
238
  self.modes = (
225
239
  {
226
240
  "f_org": 1 - self.f_soluble_volume(Ultrafine),
227
- "kappa": self.kappa(Ultrafine),
241
+ "kappa": self.kappa(
242
+ mass_fractions=Ultrafine, water_molar_volume=water_molar_volume
243
+ ),
228
244
  "nu_org": self.nu_org(Ultrafine),
229
245
  "spectrum": spectra.Lognormal(
230
246
  norm_factor=2000 / si.cm**3, m_mode=11.5 * si.nm, s_geom=1.71
@@ -232,7 +248,9 @@ class AerosolNascent(DryAerosolMixture):
232
248
  },
233
249
  {
234
250
  "f_org": 1 - self.f_soluble_volume(Accumulation),
235
- "kappa": self.kappa(Accumulation),
251
+ "kappa": self.kappa(
252
+ mass_fractions=Accumulation, water_molar_volume=water_molar_volume
253
+ ),
236
254
  "nu_org": self.nu_org(Accumulation),
237
255
  "spectrum": spectra.Lognormal(
238
256
  norm_factor=Acc_N2 / si.cm**3, m_mode=100 * si.nm, s_geom=1.703
@@ -2,4 +2,5 @@
2
2
  figure from Merlivat and Nief 1967 (Tellus)
3
3
  https://doi.org/10.3402/tellusa.v19i1.9756
4
4
  """
5
+
5
6
  # pylint: disable=invalid-name
@@ -1,3 +1,4 @@
1
1
  """ based on [Niedermeier et al. 2014](https://doi.org/10.1002/2013GL058684) """
2
+
2
3
  from .settings import Settings
3
4
  from .simulation import Simulation
@@ -68,9 +68,11 @@ class Simulation(BasicSimulation):
68
68
  data[:-1],
69
69
  np.full(
70
70
  settings.in_sampling_n,
71
- data[-1]
72
- if attribute != "multiplicity"
73
- else data[-1] / settings.in_sampling_n,
71
+ (
72
+ data[-1]
73
+ if attribute != "multiplicity"
74
+ else data[-1] / settings.in_sampling_n
75
+ ),
74
76
  ),
75
77
  )
76
78
  )
@@ -2,4 +2,5 @@
2
2
  based on Pierchala et al. 2022 (Geochim. Cosmochim. Acta)
3
3
  https://doi.org/10.1016/j.gca.2022.01.020
4
4
  """
5
+
5
6
  # pylint: disable=invalid-name
@@ -57,11 +57,11 @@ class ProfilePlotter:
57
57
  settings.formulae.trivia.radius(volume=np.asarray(volume)) / si.um,
58
58
  output["products"]["z"],
59
59
  color="magenta" if drop_id < settings.n_sd_per_mode[0] else "blue",
60
- label="mode 1"
61
- if drop_id == 0
62
- else "mode 2"
63
- if drop_id == settings.n_sd_per_mode[0]
64
- else "",
60
+ label=(
61
+ "mode 1"
62
+ if drop_id == 0
63
+ else "mode 2" if drop_id == settings.n_sd_per_mode[0] else ""
64
+ ),
65
65
  )
66
66
  axR.legend(loc="upper right")
67
67
  axR.set_xlabel("Droplet radius [μm]")
@@ -1,9 +1,9 @@
1
1
  from typing import Iterable
2
2
 
3
3
  import numpy as np
4
+ from numdifftools import Derivative
4
5
  from scipy.integrate import solve_ivp
5
6
  from scipy.interpolate import interp1d
6
- from scipy.misc import derivative
7
7
 
8
8
  from PySDM import Formulae
9
9
  from PySDM.dynamics import condensation
@@ -60,8 +60,8 @@ class Settings:
60
60
  self.t_max = t_max
61
61
 
62
62
  t_1 = 600 * si.s
63
- self.rho_times_w = (
64
- lambda t: rho_times_w_1 * np.sin(np.pi * t / t_1) if t < t_1 else 0
63
+ self.rho_times_w = lambda t: (
64
+ rho_times_w_1 * np.sin(np.pi * t / t_1) if t < t_1 else 0
65
65
  )
66
66
  apprx_w1 = rho_times_w_1 / self.formulae.constants.rho_STP
67
67
  self.particle_reservoir_depth = (
@@ -106,9 +106,9 @@ class Settings:
106
106
  water_vapour_mixing_ratio = self.water_vapour_mixing_ratio(
107
107
  z_above_reservoir
108
108
  )
109
- d_water_vapour_mixing_ratio__dz = derivative(
110
- self.water_vapour_mixing_ratio, z_above_reservoir
111
- )
109
+ d_water_vapour_mixing_ratio__dz = Derivative(
110
+ self.water_vapour_mixing_ratio
111
+ )(z_above_reservoir)
112
112
  T = self.formulae.state_variable_triplet.T(
113
113
  rhod[0], self.thd(z_above_reservoir)
114
114
  )
@@ -8,7 +8,7 @@ from PySDM.physics import si
8
8
 
9
9
  @strict
10
10
  class AerosolBetaCaryophylleneDark(DryAerosolMixture):
11
- def __init__(self, Forg: float = 0.8, N: float = 400):
11
+ def __init__(self, water_molar_volume: float, Forg: float = 0.8, N: float = 400):
12
12
  mode = {
13
13
  "(NH4)2SO4": (1 - Forg),
14
14
  "bcary_dark": Forg,
@@ -38,7 +38,9 @@ class AerosolBetaCaryophylleneDark(DryAerosolMixture):
38
38
  self.modes = (
39
39
  {
40
40
  "f_org": 1 - self.f_soluble_volume(mode),
41
- "kappa": self.kappa(mode),
41
+ "kappa": self.kappa(
42
+ mass_fractions=mode, water_molar_volume=water_molar_volume
43
+ ),
42
44
  "nu_org": self.nu_org(mode),
43
45
  "spectrum": spectra.Lognormal(
44
46
  norm_factor=N / si.cm**3, m_mode=50.0 * si.nm, s_geom=1.75
@@ -50,7 +52,7 @@ class AerosolBetaCaryophylleneDark(DryAerosolMixture):
50
52
 
51
53
 
52
54
  class AerosolBetaCaryophylleneLight(DryAerosolMixture):
53
- def __init__(self, Forg: float = 0.8, N: float = 400):
55
+ def __init__(self, water_molar_volume: float, Forg: float = 0.8, N: float = 400):
54
56
  mode = {
55
57
  "(NH4)2SO4": (1 - Forg),
56
58
  "bcary_light": Forg,
@@ -80,7 +82,9 @@ class AerosolBetaCaryophylleneLight(DryAerosolMixture):
80
82
  self.modes = (
81
83
  {
82
84
  "f_org": 1 - self.f_soluble_volume(mode),
83
- "kappa": self.kappa(mode),
85
+ "kappa": self.kappa(
86
+ mass_fractions=mode, water_molar_volume=water_molar_volume
87
+ ),
84
88
  "nu_org": self.nu_org(mode),
85
89
  "spectrum": spectra.Lognormal(
86
90
  norm_factor=N / si.cm**3, m_mode=50.0 * si.nm, s_geom=1.75
@@ -93,7 +97,7 @@ class AerosolBetaCaryophylleneLight(DryAerosolMixture):
93
97
 
94
98
  @strict
95
99
  class AerosolAlphaPineneDark(DryAerosolMixture):
96
- def __init__(self, Forg: float = 0.8, N: float = 400):
100
+ def __init__(self, water_molar_volume: float, Forg: float = 0.8, N: float = 400):
97
101
  mode = {
98
102
  "(NH4)2SO4": (1 - Forg),
99
103
  "apinene_dark": Forg,
@@ -123,7 +127,9 @@ class AerosolAlphaPineneDark(DryAerosolMixture):
123
127
  self.modes = (
124
128
  {
125
129
  "f_org": 1 - self.f_soluble_volume(mode),
126
- "kappa": self.kappa(mode),
130
+ "kappa": self.kappa(
131
+ mass_fractions=mode, water_molar_volume=water_molar_volume
132
+ ),
127
133
  "nu_org": self.nu_org(mode),
128
134
  "spectrum": spectra.Lognormal(
129
135
  norm_factor=N / si.cm**3, m_mode=50.0 * si.nm, s_geom=1.75
@@ -136,7 +142,7 @@ class AerosolAlphaPineneDark(DryAerosolMixture):
136
142
 
137
143
  @strict
138
144
  class AerosolAlphaPineneLight(DryAerosolMixture):
139
- def __init__(self, Forg: float = 0.8, N: float = 400):
145
+ def __init__(self, water_molar_volume: float, Forg: float = 0.8, N: float = 400):
140
146
  mode = {
141
147
  "(NH4)2SO4": (1 - Forg),
142
148
  "apinene_light": Forg,
@@ -166,7 +172,9 @@ class AerosolAlphaPineneLight(DryAerosolMixture):
166
172
  self.modes = (
167
173
  {
168
174
  "f_org": 1 - self.f_soluble_volume(mode),
169
- "kappa": self.kappa(mode),
175
+ "kappa": self.kappa(
176
+ mass_fractions=mode, water_molar_volume=water_molar_volume
177
+ ),
170
178
  "nu_org": self.nu_org(mode),
171
179
  "spectrum": spectra.Lognormal(
172
180
  norm_factor=N / si.cm**3, m_mode=50.0 * si.nm, s_geom=1.75
@@ -2,6 +2,7 @@
2
2
  box-model examples feat. analytic solution for breakup from
3
3
  [Srivastava 1982 (JAS)](https://doi.org/10.1175/1520-0469(1982)039%3C1317:ASMOPC%3E2.0.CO;2)
4
4
  """
5
+
5
6
  from .equations import Equations, EquationsHelpers
6
7
  from .example import (
7
8
  add_to_plot_simulation_results,
@@ -137,10 +137,10 @@ def get_breakup_coalescence_analytic_results(equations, settings, m0, x, x_log):
137
137
 
138
138
  def get_analytic_results(equations, settings, mean_mass, mean_mass_ratio):
139
139
  res = {}
140
- res[
141
- SimProducts.Computed.mean_drop_volume_total_volume_ratio.name
142
- ] = compute_drop_volume_total_volume_ratio(
143
- mean_volume=mean_mass / settings.rho, total_volume=settings.total_volume
140
+ res[SimProducts.Computed.mean_drop_volume_total_volume_ratio.name] = (
141
+ compute_drop_volume_total_volume_ratio(
142
+ mean_volume=mean_mass / settings.rho, total_volume=settings.total_volume
143
+ )
144
144
  )
145
145
  res[SimProducts.PySDM.total_numer.name] = equations.M / mean_mass_ratio
146
146
  return res
@@ -70,9 +70,9 @@ class Simulation:
70
70
  if step != 0:
71
71
  particulator.run(steps=1)
72
72
  for prod in self.settings.prods:
73
- self.simulation_res[n_sd][prod][seed][
74
- step
75
- ] = particulator.products[prod].get()
73
+ self.simulation_res[n_sd][prod][seed][step] = (
74
+ particulator.products[prod].get()
75
+ )
76
76
 
77
77
  np.testing.assert_allclose(
78
78
  actual=self.simulation_res[n_sd][
@@ -93,13 +93,15 @@ class GUIViewer:
93
93
  self.spectrumPlots[key] = (
94
94
  _SpectrumPlot(r_bins, self.settings.spectrum_per_mass_of_dry_air)
95
95
  if key == "size"
96
- else _TemperaturePlot(
97
- self.settings.T_bins_edges, self.settings.formulae
98
- )
99
- if key == "temperature"
100
- else _TerminalVelocityPlot(
101
- self.settings.terminal_velocity_radius_bin_edges,
102
- self.settings.formulae,
96
+ else (
97
+ _TemperaturePlot(
98
+ self.settings.T_bins_edges, self.settings.formulae
99
+ )
100
+ if key == "temperature"
101
+ else _TerminalVelocityPlot(
102
+ self.settings.terminal_velocity_radius_bin_edges,
103
+ self.settings.formulae,
104
+ )
103
105
  )
104
106
  )
105
107
  clear_output()
@@ -162,11 +162,11 @@ class Simulation:
162
162
  )
163
163
 
164
164
  if self.settings.freezing_singular:
165
- attributes[
166
- "freezing temperature"
167
- ] = formulae.freezing_temperature_spectrum.invcdf(
168
- np.random.random(immersed_surface_area.size), # TODO #599: seed
169
- immersed_surface_area,
165
+ attributes["freezing temperature"] = (
166
+ formulae.freezing_temperature_spectrum.invcdf(
167
+ np.random.random(immersed_surface_area.size), # TODO #599: seed
168
+ immersed_surface_area,
169
+ )
170
170
  )
171
171
  else:
172
172
  attributes["immersed surface area"] = immersed_surface_area
@@ -2,4 +2,5 @@
2
2
  figure from Van Hook 1968 (J. Phys. Chem.)
3
3
  https://doi.org/10.1021/j100850a028
4
4
  """
5
+
5
6
  # pylint: disable=invalid-name
@@ -2,6 +2,7 @@
2
2
  PySDM_examples package includes common Python modules used in PySDM smoke tests
3
3
  and in example notebooks (but the package wheels do not include the notebooks)
4
4
  """
5
+
5
6
  from importlib.metadata import PackageNotFoundError, version
6
7
 
7
8
  try:
@@ -2,6 +2,7 @@
2
2
  box- and single-column breakup-focused examples from
3
3
  [de Jong et al. 2023](https://doi.org/10.5194/gmd-16-4193-2023)
4
4
  """
5
+
5
6
  # pylint: disable=invalid-name
6
7
  from .plot_rates import plot_ax, plot_zeros_ax
7
8
  from .settings1D import Settings1D
@@ -1,6 +1,7 @@
1
1
  """
2
2
  reusable commons for examples
3
3
  """
4
+
4
5
  from .basic_simulation import BasicSimulation
5
6
  from .dummy_controller import DummyController
6
7
  from .notebook_vars import notebook_vars
@@ -1,4 +1,5 @@
1
1
  """ helper routines for use in smoke tests """
2
+
2
3
  from pathlib import Path
3
4
 
4
5
  import nbformat
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PySDM-examples
3
- Version: 2.39
3
+ Version: 2.41
4
4
  Summary: PySDM usage examples reproducing results from literature and depicting how to use PySDM from Python Jupyter notebooks
5
5
  Home-page: https://github.com/open-atmos/PySDM
6
6
  Author: https://github.com/open-atmos/PySDM/graphs/contributors
@@ -12,12 +12,14 @@ Project-URL: Source, https://github.com/open-atmos/PySDM/tree/main/examples
12
12
  Platform: UNKNOWN
13
13
  Description-Content-Type: text/markdown
14
14
  Requires-Dist: PySDM
15
+ Requires-Dist: PyMPDATA
15
16
  Requires-Dist: open-atmos-jupyter-utils
16
17
  Requires-Dist: pystrict
18
+ Requires-Dist: matplotlib
17
19
  Requires-Dist: joblib
18
20
  Requires-Dist: ipywidgets
19
21
  Requires-Dist: seaborn
20
- Requires-Dist: ghapi
22
+ Requires-Dist: numdifftools
21
23
  Requires-Dist: pyvinecopulib
22
24
  Requires-Dist: vtk
23
25
  Provides-Extra: tests
@@ -1,75 +1,75 @@
1
- PySDM_examples/__init__.py,sha256=MQ7MlkaF_WPwhzoaaZrTB4OLY8iesN2iWD-1RV-T2j4,339
1
+ PySDM_examples/__init__.py,sha256=Ht8EcJquTq4qeSaDJ4qFG8SNWA4qMfhfTyGcO415i3A,340
2
2
  PySDM_examples/Abdul_Razzak_Ghan_2000/__init__.py,sha256=t568yvoJqJgyyhR69eBjs2y8gj4SIgofowulmiWbz9U,165
3
- PySDM_examples/Abdul_Razzak_Ghan_2000/aerosol.py,sha256=n6mffeceJ0ls4aW16YMlTX_HCwy5W8GAROTuF_IxvwY,2841
3
+ PySDM_examples/Abdul_Razzak_Ghan_2000/aerosol.py,sha256=BHZL7DILM2WGK5v251N0pHd_bdk8V1PnhSpItkPh1HI,3405
4
4
  PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_ARG2000_paper.py,sha256=MRyurAnXq5ESE8gA5rzMsVx1ZhwcOz76o2xPRAcTPMQ,11585
5
5
  PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_CloudMicrophysics_ARG.py,sha256=6vuCL55D2KnUutnqZvdv1Wnpgt0rz4BTFELKzOQP1uo,11547
6
- PySDM_examples/Abdul_Razzak_Ghan_2000/run_ARG_parcel.py,sha256=BKBMy_QxLOg0sEt05vz13BaYVKxXuV4jG-2NaIqy3Hc,5485
7
- PySDM_examples/Alpert_and_Knopf_2016/__init__.py,sha256=7LPh9TVrxIsUu_n_xAdJHqkXstHyNCeBK0Lqkf6wdoM,263
6
+ PySDM_examples/Abdul_Razzak_Ghan_2000/run_ARG_parcel.py,sha256=kd1IH1XhhS6x-6wkdAHK4R6aIIgI_UXcYo1dDtivbOU,5402
7
+ PySDM_examples/Alpert_and_Knopf_2016/__init__.py,sha256=NIqxh_uW0b83mrhYojbd1sMh6-lpz8wf8uuhtNtr0mU,264
8
8
  PySDM_examples/Alpert_and_Knopf_2016/simulation.py,sha256=KfXJ3Q2D1EG5EgvNfMc5HymzmpGNJ8f74hqkrR7KYAQ,10113
9
9
  PySDM_examples/Alpert_and_Knopf_2016/table.py,sha256=z3d4Pms0nwe4Jb10FilOtNcE4cpUx3zGtDSeStH1l6o,228
10
10
  PySDM_examples/Alpert_and_Knopf_2016/table_1.py,sha256=edJfFNqOYwZvOL4nKM5Ir5kFppDqbfz4hPUESqCnNaI,3792
11
11
  PySDM_examples/Alpert_and_Knopf_2016/table_2.py,sha256=oxeB_UNLWzrSHKoWOot-kAe5X_i9n18SKDOh7fF9KkQ,1857
12
- PySDM_examples/Arabas_and_Shima_2017/__init__.py,sha256=zap8wLAO5OwLNGGZF2E1FWd4X4viYCHDB29Inh7i2-Q,185
12
+ PySDM_examples/Arabas_and_Shima_2017/__init__.py,sha256=hR7OQjmlyxwzrO61gQsfJaatHYI8BJBdwGSmgBZn8HI,186
13
13
  PySDM_examples/Arabas_and_Shima_2017/example.py,sha256=dWzGbRCkdwjWethxtdEjn6IjEssFrmW37sEK8y36Q3I,253
14
14
  PySDM_examples/Arabas_and_Shima_2017/settings.py,sha256=RxPoFAZ7K9EL9B8dVwj41wngTnCVPaFu5tOgFm_K8gU,2383
15
15
  PySDM_examples/Arabas_and_Shima_2017/simulation.py,sha256=p8zb3-dC0er8d5o7CKSlaM9lAgIzFwO7LqovvuQUrdk,3965
16
16
  PySDM_examples/Arabas_et_al_2015/__init__.py,sha256=uPSOIkvpr_UnLacbdQ5DYGW6k59JqvMVTKSuz6ff7bQ,244
17
17
  PySDM_examples/Arabas_et_al_2015/example.py,sha256=YB-ABtUByHQnv0jTGJvROhxNX_aQnM_PgoilG7mSEmQ,828
18
18
  PySDM_examples/Arabas_et_al_2015/example_benchmark.py,sha256=iUn5qGO0dB_s0DcYlOtllFURbRa6X9H9HW9AkaiHFoc,2343
19
- PySDM_examples/Arabas_et_al_2015/settings.py,sha256=OFEanJVLKj7EE3mZGCKtFRr7M84zkYt0jthMOwVXgfo,1623
19
+ PySDM_examples/Arabas_et_al_2015/settings.py,sha256=HNMezPT8SK2bZlcLdoxoFAzczkz836fX0vRIb5XjntM,1599
20
20
  PySDM_examples/Arabas_et_al_2015/spin_up.py,sha256=OxISF9coJpQ3x-lUnyIkPbHsQ46U37ouQM_ijibZ1Zo,837
21
- PySDM_examples/Arabas_et_al_2023/__init__.py,sha256=v9P3lzVSv4KauX_uIGNoqaKNroj8joXCGzITXBakUaE,306
21
+ PySDM_examples/Arabas_et_al_2023/__init__.py,sha256=zZzcM2x30oOKy8BXBtsDFHnrbemEj9lfBdproC_ccpM,307
22
22
  PySDM_examples/Arabas_et_al_2023/commons.py,sha256=BEg1kqBX0626TYTWAaJdMrOAspHdgkPkPoDm2cR8ZXk,574
23
23
  PySDM_examples/Arabas_et_al_2023/curved_text.py,sha256=DoUvIuHkZ8xrgyXwdwEjUZLMeFseyOG7HfPS78CRNnY,5338
24
24
  PySDM_examples/Arabas_et_al_2023/frozen_fraction.py,sha256=8ok3PbeXMwn87hCQt5tsNcHMCbYZHdW7dnCL-Fcx3LQ,783
25
25
  PySDM_examples/Arabas_et_al_2023/make_particulator.py,sha256=sPjM5wkljDajIh0XAWH8N22OBublwvnzknAv3rfIydI,2025
26
- PySDM_examples/Arabas_et_al_2023/plots.py,sha256=UEDAcWTEQ0U5yxBd4-sJNgkp46WzEUZNZ0SlThlCvS4,5007
26
+ PySDM_examples/Arabas_et_al_2023/plots.py,sha256=fw7E3bkFiXLkB6QR8nK4qCMVDxW46B77LE-KpdepK_Q,5047
27
27
  PySDM_examples/Arabas_et_al_2023/run_simulation.py,sha256=LsZt0l4GMg9td2NwlyIo5agGiuiunkFRJ6rRVPuqfSs,1353
28
28
  PySDM_examples/Bartman_2020_MasterThesis/__init__.py,sha256=la2o79L6WLPueZ3EI5ThGtNRuSkXvKQwJJmvrNhhHa8,136
29
29
  PySDM_examples/Bartman_2020_MasterThesis/fig_4_adaptive_sdm.py,sha256=bbXDRKH7ekiwEd8dgNRcavlWzoQGfZvXKL_qOT6TtWU,2337
30
30
  PySDM_examples/Bartman_2020_MasterThesis/fig_5_SCIPY_VS_ADAPTIVE.py,sha256=CJ4oXcQe8LGxBoD352dyYQICTWkxPvfUVAhBVf5Uxls,4192
31
31
  PySDM_examples/Bartman_et_al_2021/__init__.py,sha256=G-GE8actgWv5-0x49DPJmAPR88e0ddlDGqIzzo5RQHU,88
32
- PySDM_examples/Bartman_et_al_2021/label.py,sha256=RGsSa-8AEzPbCU-YW_cZsOAkKnuqT67wuO7xYG3779c,507
33
- PySDM_examples/Berry_1967/__init__.py,sha256=t8YiMrYS6v_T0dGXmEhxauCQ8kvBABjgQ5U3wFTc2NY,184
32
+ PySDM_examples/Bartman_et_al_2021/label.py,sha256=sHaZcODS8lrKxWha9Zd-VALHHqFTr_PsUrMPRunTxzA,523
33
+ PySDM_examples/Berry_1967/__init__.py,sha256=WK67_TDhxgbKgiZWsdthnKvFcchvpJ8WuNcIP2b1cXY,185
34
34
  PySDM_examples/Berry_1967/example.py,sha256=r0WlZ0R4Y4RiDIsLlq3RG_R9YSvCSrizWGjg3mh0WgQ,2506
35
35
  PySDM_examples/Berry_1967/example_fig_6.py,sha256=wD11VB2Ocn-83jkLp55H5xquojdIw_-KdYtii5ZtkJY,3104
36
36
  PySDM_examples/Berry_1967/settings.py,sha256=9VmVS4zBTGQff-xBdxb9AjUB9iNNm-qMznURH0ESfwE,1617
37
37
  PySDM_examples/Berry_1967/spectrum_plotter.py,sha256=WEEaryYBDydStKyx6H915LVTxeFFKj0pmpdVotktjI4,1023
38
- PySDM_examples/Bieli_et_al_2022/__init__.py,sha256=74DQZDe3vAi5xmgsPBDS7SS8xRI_98_znPzwXitCWCs,139
38
+ PySDM_examples/Bieli_et_al_2022/__init__.py,sha256=YdI2papu13HSfH973XxfrwGZkP_nbiXO4lgGHime_7M,141
39
39
  PySDM_examples/Bieli_et_al_2022/settings.py,sha256=qJxoGChzqta-c_O2yv4E3wEM4yoECa2dyhKmE8AGrtI,1679
40
40
  PySDM_examples/Bieli_et_al_2022/simulation.py,sha256=i-EEZvt37VuUXOEzbFBy7YrJez7_YHiI-gCtsPj_EbM,1304
41
- PySDM_examples/Bolot_et_al_2013/__init__.py,sha256=67DJlNlh37-EAj38-LyIBe9tNsgPGI0ks8ZSkt4c5iU,135
41
+ PySDM_examples/Bolot_et_al_2013/__init__.py,sha256=6yZ-PdTBwwN9f4HqOe-E0m-CyM47mgg2E4ezVKVELF4,136
42
42
  PySDM_examples/Bulenok_2023_MasterThesis/__init__.py,sha256=GPHWvxMGulWIaSH7CQlESd2jNTRJeMcXRqjzzJ-AAf8,164
43
43
  PySDM_examples/Bulenok_2023_MasterThesis/setups.py,sha256=UVTp0oBMblcR46J29aylfZ6g6-8jlhXCb90ODdcfaSE,3424
44
44
  PySDM_examples/Bulenok_2023_MasterThesis/utils.py,sha256=Y0OXKd8D2vJ0vAstl_f68St39MRY89sMqaK1ASo-h1w,8019
45
- PySDM_examples/Ervens_and_Feingold_2012/__init__.py,sha256=cpE8Gj0BAeNWjKH6pGcVAgQ_3bFGHTG-pcm4gwmF2gc,158
46
- PySDM_examples/Ervens_and_Feingold_2012/settings.py,sha256=s5eHSjK4Y0QIB4hwm8ODkElHjLorK0F6GUy5KZOPmIc,464
45
+ PySDM_examples/Ervens_and_Feingold_2012/__init__.py,sha256=F9Q-77npT6TyIK1vdNS4RPeBb8g4mFBUYz5qg4pj2wo,159
46
+ PySDM_examples/Ervens_and_Feingold_2012/settings.py,sha256=DtkcDqkcO2WAkH63P1RQ19cejn0oAamdsZefN3y0Gy8,442
47
47
  PySDM_examples/Grabowski_and_Pawlowska_2023/__init__.py,sha256=_UWULcA_8_vA7zYlW_QuyS4SYe5827jyZBum-ZrGwGk,225
48
48
  PySDM_examples/Grabowski_and_Pawlowska_2023/settings.py,sha256=nErcGLTGJTai32jpRhrhpxoJ4Acwh1ccrwGBpQQjGcY,3273
49
49
  PySDM_examples/Grabowski_and_Pawlowska_2023/simulation.py,sha256=uXH0zfr4M4XZ81u5GNVFLlbQTSHoA15ScxdwR43X6w8,4515
50
50
  PySDM_examples/Graf_et_al_2019/__init__.py,sha256=nT6uOv3PODePRUzFoyOfH_eOCjJkg5z9qS3tXy3USPc,140
51
51
  PySDM_examples/Jaruga_and_Pawlowska_2018/__init__.py,sha256=VJz_xFOhVvnqYHKbAPRnZQ3Vky6JEOZxBx8kV0kHIcg,161
52
52
  PySDM_examples/Kreidenweis_et_al_2003/__init__.py,sha256=9QbrxhPe0QJxboGKeqHhq9rrvQ5VUcjTpqWgWsxnM1E,225
53
- PySDM_examples/Kreidenweis_et_al_2003/settings.py,sha256=70cH8qdhxGR2WrkptbSQJIzszJIxNJuAIAewJzp7g5o,2788
53
+ PySDM_examples/Kreidenweis_et_al_2003/settings.py,sha256=iS7rZINn4EyxSsy_0CvQeGAz6ZyB-don1OCY7q_M21c,2836
54
54
  PySDM_examples/Kreidenweis_et_al_2003/simulation.py,sha256=UeU6SLhNAYNXVkw14PvPaM1efKmXYUzqkvpYI6L4ODs,4624
55
55
  PySDM_examples/Lowe_et_al_2019/__init__.py,sha256=JpFMpZWcBOXcQnYSXNoe4cc0giQJwJAm27dOewsR3wE,236
56
- PySDM_examples/Lowe_et_al_2019/aerosol.py,sha256=mtATQA5paEMf_Wo_RJf2D52Q7Mo8T2SjIqG9FGSF6pQ,6356
57
- PySDM_examples/Lowe_et_al_2019/aerosol_code.py,sha256=_HRzqJLst8bo9PBl_uNlb60LrSk0WB_0TYiI-JJmemw,8985
56
+ PySDM_examples/Lowe_et_al_2019/aerosol.py,sha256=8h0e1QAo4CQyyKokYScfuiWbKVJuLHfJir_r3_KAnNk,6827
57
+ PySDM_examples/Lowe_et_al_2019/aerosol_code.py,sha256=HqjEfWwsdKFnrCvRNpyUrfX4JGJLdS53AbHTJ0NgyzQ,9667
58
58
  PySDM_examples/Lowe_et_al_2019/plot_helper.py,sha256=Uc35rjIMvigpadiWhKvyNj6b9xauVKss17TkaO58fRQ,6450
59
59
  PySDM_examples/Lowe_et_al_2019/settings.py,sha256=J-tFTXjCMer0UJZT3o8xkyEcMWSYzZ6jLtahvaqiHYE,3096
60
60
  PySDM_examples/Lowe_et_al_2019/simulation.py,sha256=zy1RITIcYUhkgI8Cqcu13P6WTQ4NMjtNmTjKW_Xa7jQ,5143
61
- PySDM_examples/Merlivat_and_Nief_1967/__init__.py,sha256=Zjh0KimgWCpzQa6hrYhI_ByEJAFpCat9Dd4x9syHpsc,126
61
+ PySDM_examples/Merlivat_and_Nief_1967/__init__.py,sha256=bbjcqXvQxmMwZIRTAOGWwFGkKGnQeGsi7x9kI-VdQpQ,127
62
62
  PySDM_examples/Morrison_and_Grabowski_2007/__init__.py,sha256=sae2OEASd-sh-f0U_8ObIGitWGiXAPXrr7aTn950xoM,181
63
63
  PySDM_examples/Morrison_and_Grabowski_2007/common.py,sha256=aOSCsXSCRPLEgV2LThpmAdF_gGANPAypUDxwGe5C2Do,5221
64
64
  PySDM_examples/Morrison_and_Grabowski_2007/cumulus.py,sha256=kyypwfFdYqY_QyoPr88ScvNb53rMTPvseRL7KVad9Fo,4490
65
65
  PySDM_examples/Morrison_and_Grabowski_2007/strato_cumulus.py,sha256=NsYP-AOHcY-HDvhg1dWAHWVFZzlaxpDoQJNbrSphdUg,1139
66
- PySDM_examples/Niedermeier_et_al_2014/__init__.py,sha256=Buya98WtrA4u9YWx4okx5018wSKmFbLTTyql63xQCVs,147
66
+ PySDM_examples/Niedermeier_et_al_2014/__init__.py,sha256=Oy4G3rNeJtEvLy6F7vznxKL3vLYhPdhp2SoP4YyoPUQ,148
67
67
  PySDM_examples/Niedermeier_et_al_2014/settings.py,sha256=fNNORJlWJjKIJDou-UMj3D9EQvxhwa3at5wvemoQhi4,1614
68
- PySDM_examples/Niedermeier_et_al_2014/simulation.py,sha256=mG3OOF3b1M3OfmARL5i7vvAQk4ENXo099DBo-Iqgm8M,3344
69
- PySDM_examples/Pierchala_et_al_2022/__init__.py,sha256=KWD7hYVy3zIFrdxmPk7FhPurgbEbAxus-C7vLnwhFro,139
68
+ PySDM_examples/Niedermeier_et_al_2014/simulation.py,sha256=F1DKol-ujtJ5PaNKyKATquuTgHwces2it4jXDu-4dho,3408
69
+ PySDM_examples/Pierchala_et_al_2022/__init__.py,sha256=vPjlbuWAJ7karsAxnZi2QoJTvduugqCcvDgPe1aPxMA,140
70
70
  PySDM_examples/Pierchala_et_al_2022/commons.py,sha256=qqdQkEoURw7ewSCmsDz62lXDk20BQ_9xDmvxwOvznSg,1016
71
71
  PySDM_examples/Pyrcel/__init__.py,sha256=Hzj0Dq23fGz_QPHd9Fse76MG1LPJqk_Lpd2qzXCN8RY,208
72
- PySDM_examples/Pyrcel/profile_plotter.py,sha256=ijrzwnwpLXEYF_94xImyliQoV_mF56FrlKaw4XD9iXg,2180
72
+ PySDM_examples/Pyrcel/profile_plotter.py,sha256=Yquz_ylj8W6KGecFY162PB4z7few2wldxJs5x7YyuW8,2196
73
73
  PySDM_examples/Pyrcel/settings.py,sha256=Kg-7_pN1Ah7P_Zc6Vg1mbk-oWZTDcDYM-qGec1BPsEI,2147
74
74
  PySDM_examples/Pyrcel/simulation.py,sha256=73Ao6u7F6e-pIrUhcYy7ZI3fVhDYg1TVSKbogv2uAVc,3774
75
75
  PySDM_examples/Pyrcel/tutorial_settings.py,sha256=C6Vxo-HAaxnRYTLv4yxjZC4qwTU7yuWvQR4ey6SDZ_s,2096
@@ -86,48 +86,48 @@ PySDM_examples/Shima_et_al_2009/tutorial_settings.py,sha256=nTe_rKAIPpXwnh52mDBr
86
86
  PySDM_examples/Shipway_and_Hill_2012/__init__.py,sha256=fVgTFoG-sHDYawCJhZdUrqqziLBiJKExw3_tAQeXQ5o,247
87
87
  PySDM_examples/Shipway_and_Hill_2012/mpdata_1d.py,sha256=GfbGXQFAVJ2rYnkhwKKESRLPDfJJeL0Qs1h1pZUjlWo,1907
88
88
  PySDM_examples/Shipway_and_Hill_2012/plot.py,sha256=Q6lnGWE3oSDKV_F1qKUIihhbYABQ3S1A1qg7Q2rXwn4,3606
89
- PySDM_examples/Shipway_and_Hill_2012/settings.py,sha256=j3YQ6Pba4lE6TQDJkWW0rId-zQgkn-fbXrTIgX9whRY,6097
89
+ PySDM_examples/Shipway_and_Hill_2012/settings.py,sha256=350S9UiiRRDE240R6Q-XGKbF6n3-ImAzroeTtvrXvaI,6099
90
90
  PySDM_examples/Shipway_and_Hill_2012/simulation.py,sha256=jXEuytNmngdFaGIJSm0diauN11X1-EbW5Pbec7zptFY,9727
91
91
  PySDM_examples/Singer_Ward/__init__.py,sha256=wLus4IEzXkeOKCR3Dn2tM9PqNW9X7tjBiMymLvBow-c,31
92
- PySDM_examples/Singer_Ward/aerosol.py,sha256=Cu6o2bnitj_PDaLGoEXCWcml-2QrY8d3FLKN37WQbVk,5329
93
- PySDM_examples/Srivastava_1982/__init__.py,sha256=2m9a7s2gzNh4-dI3mwUfF9jEL4QK09m5vp3M45yFyug,508
92
+ PySDM_examples/Singer_Ward/aerosol.py,sha256=H7TcvI94Wc-IvhTMFshFaJRJY3eUjihAlSdNxVKZzL0,5805
93
+ PySDM_examples/Srivastava_1982/__init__.py,sha256=u7RxFGW08DIfwKU2yHpEQiiNlfz7F3GyYR4TV9LA7Ww,509
94
94
  PySDM_examples/Srivastava_1982/equations.py,sha256=RQHvXbznreupzhOdfSQpc859DUNhThjPEKt7sXTeEAw,3262
95
- PySDM_examples/Srivastava_1982/example.py,sha256=yIgZ60BeYhI7QRMmoe9l_Utc98wnWQ-4CCAL5hSIioU,8566
95
+ PySDM_examples/Srivastava_1982/example.py,sha256=fGaLDvqz4BBLLG8NqHB2D2aAYFPOJhEg1r5DBPUntB8,8576
96
96
  PySDM_examples/Srivastava_1982/settings.py,sha256=f5R-MyEKEw4Lbfix_4eyjiP9o_SqabM4IOH1fvQ3jjA,2275
97
- PySDM_examples/Srivastava_1982/simulation.py,sha256=SbQSclTWZ_8eX8Ct2OoNx6GRWCQVloHv-9iKAj0jbjk,3034
97
+ PySDM_examples/Srivastava_1982/simulation.py,sha256=V1ofPcEAI2wrxYptZxo8ibe32nekGeZvhL6jrcg2izc,3036
98
98
  PySDM_examples/Szumowski_et_al_1998/__init__.py,sha256=L9UucV9lyb08Hkzs1zYI9cxmN7mcogIFNsYgmnUpfY8,315
99
99
  PySDM_examples/Szumowski_et_al_1998/fields.py,sha256=tcR2MAB7azOLF955-ACHJU6v7aJxxpDXVdSIMQTbHEg,1584
100
100
  PySDM_examples/Szumowski_et_al_1998/gui.py,sha256=Vjt_ahdSl74NEjbZ-WxhK9eU3H2bqifjibPp6hy2DME,1309
101
101
  PySDM_examples/Szumowski_et_al_1998/gui_controller.py,sha256=AsP78e9bcGSP81kfDet_5fxpthlHsjDyJxHknvN2EgI,4283
102
102
  PySDM_examples/Szumowski_et_al_1998/gui_settings.py,sha256=3-Ox7GBHbEe30_znfry_UqAVU6ZTvJsCSRwMIw6_cJI,14400
103
- PySDM_examples/Szumowski_et_al_1998/gui_viewer.py,sha256=qnqE-Seh6rXieV_YGpBWXRY2O-KZMR_TTsZO3Xq5d_E,13088
103
+ PySDM_examples/Szumowski_et_al_1998/gui_viewer.py,sha256=JZFAfD9FXHS5msVYAzccoF5rhHlb6hdwY28Q6lAdJD4,13164
104
104
  PySDM_examples/Szumowski_et_al_1998/make_default_product_collection.py,sha256=L7aUMbg0CVGGZXti8btqIh6UkKKkD-WblwN0EqURcLI,4666
105
105
  PySDM_examples/Szumowski_et_al_1998/mpdata_2d.py,sha256=41F3D4Kx_Um01wqOlkDSu8gzbwy47OewK535PK-Ii54,4137
106
106
  PySDM_examples/Szumowski_et_al_1998/plots.py,sha256=fzeluxlLF9VbSMmcu2wvd9WPl3ApIuA0jouwOh6rJHA,7001
107
- PySDM_examples/Szumowski_et_al_1998/simulation.py,sha256=HepfGl5HrBCk0nRQxdwL1EkAAoPcywuQ9UR5qCwfxcM,9927
107
+ PySDM_examples/Szumowski_et_al_1998/simulation.py,sha256=bEkYxTiP8S7MYzz2SlPLqeOGLiGibs4uaE7lTOBD8AA,9941
108
108
  PySDM_examples/Szumowski_et_al_1998/sounding.py,sha256=vk3KHRPrBbZpz6QCqj2RtWyEpl_N7jSMR-zoDWM_ZVQ,1440
109
109
  PySDM_examples/Szumowski_et_al_1998/storage.py,sha256=NaGoujCRLubSEbhLA0QZDaSkATpJuF09HCnGdWQzcxQ,2579
110
- PySDM_examples/Van_Hook_1968/__init__.py,sha256=KUZAyoCgL4Mg2dKI9u-Aw58PXoUrWQsN7J4Sz8L-72M,118
110
+ PySDM_examples/Van_Hook_1968/__init__.py,sha256=nTGyMcf6D4l6Ib0hMwyx4es1nX5dpuPbM9AYEleaIPE,119
111
111
  PySDM_examples/Yang_et_al_2018/__init__.py,sha256=zY7OnJ0d5eyWh3j0VvuHJMYOum9jY596-Ek2po0efmE,227
112
112
  PySDM_examples/Yang_et_al_2018/settings.py,sha256=J62kB5pEThmMcWSLsLKgcv0Pii6VLPDbfz6HPgs7O9o,2185
113
113
  PySDM_examples/Yang_et_al_2018/simulation.py,sha256=sG2kO_l66ec5XRYIDygB6_493jqKh6fF2hc_TyAh8z8,3928
114
- PySDM_examples/deJong_Mackay_et_al_2023/__init__.py,sha256=3LiuVu6tWH-xu3v59GqlxD7Map3Eq4ul1SlEW6zw3aI,500
114
+ PySDM_examples/deJong_Mackay_et_al_2023/__init__.py,sha256=dxlC4ZYZDCfV5Zo2ichuMqE_ZrkrdyIsru8wijKJXyU,502
115
115
  PySDM_examples/deJong_Mackay_et_al_2023/plot_rates.py,sha256=6BJ9V4uaJu-6nPfkLqwevDEIXvo_stRok8unhBPbCHY,2421
116
116
  PySDM_examples/deJong_Mackay_et_al_2023/settings1D.py,sha256=2I0tK_GgWkQn2ZQjZdX4iUUPpOtL1dV8dOlEyaZ3rKQ,2951
117
117
  PySDM_examples/deJong_Mackay_et_al_2023/settings_0D.py,sha256=ksclyxZ0sZNeLS-QZC7Dop6feEmQA1KBIZNuhvxcMxs,1918
118
118
  PySDM_examples/deJong_Mackay_et_al_2023/simulation1D.py,sha256=xDA7I3EBoeAw_sHfp7MuBzoDrCbkF4wOKDR2BRePZxk,2430
119
119
  PySDM_examples/deJong_Mackay_et_al_2023/simulation_0D.py,sha256=EceMIsvm41kG_UocPCAW4lped1J3sBNqf4CLDf-f9CU,4522
120
120
  PySDM_examples/deJong_Mackay_et_al_2023/simulation_ss.py,sha256=fYE5LRPbt5qIYC3NaXhC-qsq9GDETBxmXf2Ih3ezFyw,5864
121
- PySDM_examples/utils/__init__.py,sha256=l5g2Dp3DYUFqm-UMtUaKQkxQnV-_vIv7qz2iqh14uyc,257
121
+ PySDM_examples/utils/__init__.py,sha256=MayUnfhdnjWwc5Ept-yYfCS_tuSR8yqe-RdBl8FO3Xk,258
122
122
  PySDM_examples/utils/basic_simulation.py,sha256=4EdgD0p8EKNNcqYYVSlGm1MG2ac7_6heQdwS-kp-Tmw,698
123
123
  PySDM_examples/utils/dummy_controller.py,sha256=f1AjVNXPnDhhD15GkBFtJthDf7jZivDrppj79guYc_w,741
124
- PySDM_examples/utils/notebook_vars.py,sha256=iT8xwGpnkivmFm3AOEDqomcwIf9rz14UHn_A-cBQHyc,1276
124
+ PySDM_examples/utils/notebook_vars.py,sha256=isvt3euX_v1pxOlWPQ720_1O3YrJoVPEmifIvucQjCo,1277
125
125
  PySDM_examples/utils/progbar_controller.py,sha256=IXk7rkXUOBKP7EQe6zLHUpnCPwtE2LuEeho5lxdsewA,470
126
126
  PySDM_examples/utils/read_vtk_1d.py,sha256=7_3sagEbX_FxqFuGkFWdwQapd1-9echFghU8TSNvGuw,966
127
127
  PySDM_examples/utils/widgets/__init__.py,sha256=U67WZ2YDcXSocMraI7pzcMxCfcxzXNqehDzoG6ogsh4,519
128
128
  PySDM_examples/utils/widgets/freezer.py,sha256=tFlZWShXUzA2X0cxgeE44N1g9kD33q3KQWZBqkgBP0A,407
129
129
  PySDM_examples/utils/widgets/progbar_updater.py,sha256=3uhG32QkAiSM3dTV7DoROJl7fAUNA6ZsJEIKSg3tdmk,267
130
- PySDM_examples-2.39.dist-info/METADATA,sha256=aiRIxT1XgspsGfO6yrahNW5We1hKyMzzmKktshX9R1g,30431
131
- PySDM_examples-2.39.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
132
- PySDM_examples-2.39.dist-info/top_level.txt,sha256=axw2inuuYKPWkQhzBYtkZJTPDlo5LrpGLOA0iSAf9v0,15
133
- PySDM_examples-2.39.dist-info/RECORD,,
130
+ PySDM_examples-2.41.dist-info/METADATA,sha256=JEge5iOnR-32BkTOp6EmumVHYLQdQtvv7LUO9y9dJyg,30488
131
+ PySDM_examples-2.41.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
132
+ PySDM_examples-2.41.dist-info/top_level.txt,sha256=axw2inuuYKPWkQhzBYtkZJTPDlo5LrpGLOA0iSAf9v0,15
133
+ PySDM_examples-2.41.dist-info/RECORD,,