PySDM 2.43__py3-none-any.whl → 2.45__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.
- PySDM/backends/impl_numba/methods/terminal_velocity_methods.py +20 -0
- PySDM/backends/impl_thrust_rtc/methods/terminal_velocity_methods.py +24 -0
- PySDM/dynamics/terminal_velocity/__init__.py +1 -0
- PySDM/dynamics/terminal_velocity/power_series.py +30 -0
- PySDM/environments/kinematic_1d.py +28 -13
- PySDM/formulae.py +2 -1
- PySDM/initialisation/sampling/spatial_sampling.py +12 -3
- PySDM/initialisation/sampling/spectral_sampling.py +2 -1
- PySDM/physics/constants_defaults.py +10 -0
- PySDM/physics/diffusion_kinetics/__init__.py +2 -0
- PySDM/physics/diffusion_kinetics/grabowski_et_al_2011.py +9 -0
- PySDM/physics/diffusion_kinetics/jensen_and_nugent_2017.py +14 -0
- PySDM/physics/diffusion_kinetics/pruppacher_and_klett_2005.py +8 -0
- PySDM/physics/diffusion_thermics/__init__.py +1 -0
- PySDM/physics/diffusion_thermics/grabowski_et_al_2011.py +23 -0
- PySDM/physics/impl/fake_unit_registry.py +2 -0
- PySDM/physics/trivia.py +4 -0
- PySDM/products/condensation/peak_supersaturation.py +4 -0
- PySDM/products/housekeeping/__init__.py +1 -2
- PySDM/products/parcel/__init__.py +1 -0
- PySDM/products/size_spectral/__init__.py +1 -0
- PySDM/products/size_spectral/arbitrary_moment.py +4 -0
- {PySDM-2.43.dist-info → PySDM-2.45.dist-info}/METADATA +2 -2
- {PySDM-2.43.dist-info → PySDM-2.45.dist-info}/RECORD +28 -24
- /PySDM/products/{housekeeping → parcel}/parcel_displacement.py +0 -0
- {PySDM-2.43.dist-info → PySDM-2.45.dist-info}/LICENSE +0 -0
- {PySDM-2.43.dist-info → PySDM-2.45.dist-info}/WHEEL +0 -0
- {PySDM-2.43.dist-info → PySDM-2.45.dist-info}/top_level.txt +0 -0
|
@@ -46,3 +46,23 @@ class TerminalVelocityMethods(BackendMethods):
|
|
|
46
46
|
self.terminal_velocity_body(
|
|
47
47
|
values=values, radius=radius, k1=k1, k2=k2, k3=k3, r1=r1, r2=r2
|
|
48
48
|
)
|
|
49
|
+
|
|
50
|
+
@cached_property
|
|
51
|
+
def power_series_body(self):
|
|
52
|
+
@numba.njit(**{**conf.JIT_FLAGS, "fastmath": self.formulae.fastmath})
|
|
53
|
+
def power_series_body(*, values, radius, num_terms, prefactors, powers):
|
|
54
|
+
for i in numba.prange(len(values)): # pylint: disable=not-an-iterable
|
|
55
|
+
values[i] = 0.0
|
|
56
|
+
for j in range(num_terms):
|
|
57
|
+
values[i] = values[i] + prefactors[j] * radius[i] ** (powers[j] * 3)
|
|
58
|
+
|
|
59
|
+
return power_series_body
|
|
60
|
+
|
|
61
|
+
def power_series(self, *, values, radius, num_terms, prefactors, powers):
|
|
62
|
+
self.power_series_body(
|
|
63
|
+
values=values,
|
|
64
|
+
radius=radius,
|
|
65
|
+
num_terms=num_terms,
|
|
66
|
+
prefactors=prefactors,
|
|
67
|
+
powers=powers,
|
|
68
|
+
)
|
|
@@ -131,3 +131,27 @@ class TerminalVelocityMethods(ThrustRTCBackendMethods):
|
|
|
131
131
|
self.__interpolation_body.launch_n(
|
|
132
132
|
len(radius), (output.data, radius.data, factor_device, b.data, c.data)
|
|
133
133
|
)
|
|
134
|
+
|
|
135
|
+
@cached_property
|
|
136
|
+
def __power_series_body(self):
|
|
137
|
+
# TODO #599 r<0
|
|
138
|
+
return trtc.For(
|
|
139
|
+
("output", "radius", "num_terms", "prefactors", "powers"),
|
|
140
|
+
"i",
|
|
141
|
+
"""
|
|
142
|
+
output[i] = 0.0
|
|
143
|
+
int kmax = num_terms
|
|
144
|
+
for (auto k = 0; k < kmax; k+=1) {
|
|
145
|
+
auto sumterm = prefactors[k] * pow(radius[i], 3*powers[k])
|
|
146
|
+
output[i] = output[i] + sumterm
|
|
147
|
+
""",
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
@nice_thrust(**NICE_THRUST_FLAGS)
|
|
151
|
+
def power_series(self, *, values, radius, num_terms, prefactors, powers):
|
|
152
|
+
prefactors = self._get_floating_point(prefactors)
|
|
153
|
+
powers = self._get_floating_point(powers)
|
|
154
|
+
num_terms = self._get_floating_point(num_terms)
|
|
155
|
+
self.__power_series_body.launch_n(
|
|
156
|
+
values.size(), (values, radius, num_terms, prefactors, powers)
|
|
157
|
+
)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Power series expression
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
from PySDM.physics import constants as const
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class PowerSeries: # pylint: disable=too-few-public-methods
|
|
11
|
+
def __init__(self, particulator, *, prefactors=None, powers=None):
|
|
12
|
+
si = const.si
|
|
13
|
+
self.particulator = particulator
|
|
14
|
+
prefactors = prefactors or [2.0e-1 * si.m / si.s / np.sqrt(si.m)]
|
|
15
|
+
self.prefactors = np.array(prefactors)
|
|
16
|
+
powers = powers or [1 / 6]
|
|
17
|
+
self.powers = np.array(powers)
|
|
18
|
+
for i, p in enumerate(self.powers):
|
|
19
|
+
self.prefactors[i] *= (4 / 3 * const.PI) ** (p)
|
|
20
|
+
self.prefactors[i] /= (1 * si.um**3) ** (p)
|
|
21
|
+
assert len(self.prefactors) == len(self.powers)
|
|
22
|
+
|
|
23
|
+
def __call__(self, output, radius):
|
|
24
|
+
self.particulator.backend.power_series(
|
|
25
|
+
values=output.data,
|
|
26
|
+
radius=radius.data,
|
|
27
|
+
num_terms=len(self.powers),
|
|
28
|
+
prefactors=self.prefactors,
|
|
29
|
+
powers=self.powers,
|
|
30
|
+
)
|
|
@@ -32,7 +32,13 @@ class Kinematic1D(Moist):
|
|
|
32
32
|
return self.thd0
|
|
33
33
|
|
|
34
34
|
def init_attributes(
|
|
35
|
-
self,
|
|
35
|
+
self,
|
|
36
|
+
*,
|
|
37
|
+
spatial_discretisation,
|
|
38
|
+
spectral_discretisation,
|
|
39
|
+
kappa,
|
|
40
|
+
z_part=None,
|
|
41
|
+
collisions_only=False
|
|
36
42
|
):
|
|
37
43
|
super().sync()
|
|
38
44
|
self.notify()
|
|
@@ -43,6 +49,7 @@ class Kinematic1D(Moist):
|
|
|
43
49
|
backend=self.particulator.backend,
|
|
44
50
|
grid=self.mesh.grid,
|
|
45
51
|
n_sd=self.particulator.n_sd,
|
|
52
|
+
z_part=z_part,
|
|
46
53
|
)
|
|
47
54
|
(
|
|
48
55
|
attributes["cell id"],
|
|
@@ -50,24 +57,32 @@ class Kinematic1D(Moist):
|
|
|
50
57
|
attributes["position in cell"],
|
|
51
58
|
) = self.mesh.cellular_attributes(positions)
|
|
52
59
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
if collisions_only:
|
|
61
|
+
v_wet, n_per_kg = spectral_discretisation.sample(
|
|
62
|
+
backend=self.particulator.backend, n_sd=self.particulator.n_sd
|
|
63
|
+
)
|
|
64
|
+
# attributes["dry volume"] = v_wet
|
|
65
|
+
attributes["volume"] = v_wet
|
|
66
|
+
# attributes["kappa times dry volume"] = attributes["dry volume"] * kappa
|
|
67
|
+
else:
|
|
68
|
+
r_dry, n_per_kg = spectral_discretisation.sample(
|
|
69
|
+
backend=self.particulator.backend, n_sd=self.particulator.n_sd
|
|
70
|
+
)
|
|
71
|
+
attributes["dry volume"] = self.formulae.trivia.volume(radius=r_dry)
|
|
72
|
+
attributes["kappa times dry volume"] = attributes["dry volume"] * kappa
|
|
73
|
+
r_wet = equilibrate_wet_radii(
|
|
74
|
+
r_dry=r_dry,
|
|
75
|
+
environment=self,
|
|
76
|
+
cell_id=attributes["cell id"],
|
|
77
|
+
kappa_times_dry_volume=attributes["kappa times dry volume"],
|
|
78
|
+
)
|
|
79
|
+
attributes["volume"] = self.formulae.trivia.volume(radius=r_wet)
|
|
64
80
|
|
|
65
81
|
rhod = self["rhod"].to_ndarray()
|
|
66
82
|
cell_id = attributes["cell id"]
|
|
67
83
|
domain_volume = np.prod(np.array(self.mesh.size))
|
|
68
84
|
|
|
69
85
|
attributes["multiplicity"] = n_per_kg * rhod[cell_id] * domain_volume
|
|
70
|
-
attributes["volume"] = self.formulae.trivia.volume(radius=r_wet)
|
|
71
86
|
|
|
72
87
|
return attributes
|
|
73
88
|
|
PySDM/formulae.py
CHANGED
|
@@ -19,7 +19,7 @@ from numba.core.errors import NumbaExperimentalFeatureWarning
|
|
|
19
19
|
|
|
20
20
|
from PySDM import physics
|
|
21
21
|
from PySDM.backends.impl_numba import conf
|
|
22
|
-
from PySDM.dynamics.terminal_velocity import GunnKinzer1949, RogersYau
|
|
22
|
+
from PySDM.dynamics.terminal_velocity import GunnKinzer1949, PowerSeries, RogersYau
|
|
23
23
|
from PySDM.dynamics.terminal_velocity.gunn_and_kinzer import TpDependent
|
|
24
24
|
|
|
25
25
|
|
|
@@ -124,6 +124,7 @@ class Formulae: # pylint: disable=too-few-public-methods,too-many-instance-attr
|
|
|
124
124
|
"GunnKinzer1949": GunnKinzer1949,
|
|
125
125
|
"RogersYau": RogersYau,
|
|
126
126
|
"TpDependent": TpDependent,
|
|
127
|
+
"PowerSeries": PowerSeries,
|
|
127
128
|
}[terminal_velocity]
|
|
128
129
|
|
|
129
130
|
def __str__(self):
|
|
@@ -8,7 +8,7 @@ spatial sampling logic (i.e., physical x-y-z coordinates)
|
|
|
8
8
|
|
|
9
9
|
class Pseudorandom: # pylint: disable=too-few-public-methods
|
|
10
10
|
@staticmethod
|
|
11
|
-
def sample(*, backend, grid, n_sd):
|
|
11
|
+
def sample(*, backend, grid, n_sd, z_part=None):
|
|
12
12
|
dimension = len(grid)
|
|
13
13
|
n_elements = dimension * n_sd
|
|
14
14
|
|
|
@@ -16,6 +16,15 @@ class Pseudorandom: # pylint: disable=too-few-public-methods
|
|
|
16
16
|
backend.Random(seed=backend.formulae.seed, size=n_elements)(storage)
|
|
17
17
|
positions = storage.to_ndarray().reshape(dimension, n_sd)
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
if z_part is None:
|
|
20
|
+
for dim in range(dimension):
|
|
21
|
+
positions[dim, :] *= grid[dim]
|
|
22
|
+
else:
|
|
23
|
+
assert dimension == 1
|
|
24
|
+
iz_min = int(grid[0] * z_part[0])
|
|
25
|
+
iz_max = int(grid[0] * z_part[1])
|
|
26
|
+
for dim in range(dimension):
|
|
27
|
+
positions[dim, :] *= iz_max - iz_min
|
|
28
|
+
positions[dim, :] += iz_min
|
|
29
|
+
|
|
21
30
|
return positions
|
|
@@ -55,7 +55,8 @@ class DeterministicSpectralSampling(
|
|
|
55
55
|
diff = abs(1 - np.sum(y_float) / spectrum.norm_factor)
|
|
56
56
|
if diff > self.error_threshold:
|
|
57
57
|
raise ValueError(
|
|
58
|
-
f"{100
|
|
58
|
+
f"{diff * 100:.3g}% error in total real-droplet number due to sampling "
|
|
59
|
+
f"({len(x)} samples)"
|
|
59
60
|
)
|
|
60
61
|
|
|
61
62
|
return x, y_float
|
|
@@ -321,6 +321,16 @@ CRAIG_1961_INTERCEPT_COEFF = 10 * PER_MILLE
|
|
|
321
321
|
""" [Bohren 1987](https://doi.org/10.1119/1.15109) """
|
|
322
322
|
asymmetry_g = 0.85 # forward scattering from cloud droplets
|
|
323
323
|
|
|
324
|
+
""" TODO #1266 """
|
|
325
|
+
diffussion_thermics_D_G11_A = 1e-5 * si.m**2 / si.s
|
|
326
|
+
diffussion_thermics_D_G11_B = 0.15 / si.K
|
|
327
|
+
diffussion_thermics_D_G11_C = -1.9
|
|
328
|
+
|
|
329
|
+
diffussion_thermics_K_G11_A = 1.5e-11 * si.W / si.m / si.K**4
|
|
330
|
+
diffussion_thermics_K_G11_B = -4.8e-8 * si.W / si.m / si.K**3
|
|
331
|
+
diffussion_thermics_K_G11_C = 1e-4 * si.W / si.m / si.K**2
|
|
332
|
+
diffussion_thermics_K_G11_D = -3.9e-4 * si.W / si.m / si.K
|
|
333
|
+
|
|
324
334
|
|
|
325
335
|
def compute_derived_values(c: dict):
|
|
326
336
|
c["eps"] = c["Mv"] / c["Md"]
|
|
@@ -5,3 +5,5 @@ Formulae for handling transition-régime corrections in condensational growth/ev
|
|
|
5
5
|
from .fuchs_sutugin import FuchsSutugin
|
|
6
6
|
from .lowe_et_al_2019 import LoweEtAl2019
|
|
7
7
|
from .neglect import Neglect
|
|
8
|
+
from .grabowski_et_al_2011 import GrabowskiEtAl2011
|
|
9
|
+
from .jensen_and_nugent_2017 import JensenAndNugent2017
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""
|
|
2
|
+
as in [Jensen and Nugent 2017](https://doi.org/10.1175/JAS-D-15-0370.1)
|
|
3
|
+
(which refers to [Grabowski et al. (2011)](https://doi.org/10.1016/j.atmosres.2010.10.020)
|
|
4
|
+
but uses different gas constant, typo?)
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
from .grabowski_et_al_2011 import GrabowskiEtAl2011
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class JensenAndNugent2017(GrabowskiEtAl2011):
|
|
12
|
+
@staticmethod
|
|
13
|
+
def lambdaD(const, D, T):
|
|
14
|
+
return D / np.sqrt(2 * const.Rd * T)
|
|
@@ -19,3 +19,11 @@ class PruppacherKlett:
|
|
|
19
19
|
return D / (
|
|
20
20
|
(r / (r + const.dv_pk05)) + 2 * np.sqrt(const.PI) * lmbd / r / const.MAC
|
|
21
21
|
)
|
|
22
|
+
|
|
23
|
+
@staticmethod
|
|
24
|
+
def lambdaK(_, T, p): # pylint: disable=unused-argument
|
|
25
|
+
return -1
|
|
26
|
+
|
|
27
|
+
@staticmethod
|
|
28
|
+
def K(const, K, r, lmbd): # pylint: disable=unused-argument
|
|
29
|
+
return K # TODO #1266
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""
|
|
2
|
+
as in [Grabowski et al. (2011)](https://doi.org/10.1016/j.atmosres.2010.10.020)
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class GrabowskiEtAl2011:
|
|
7
|
+
def __init__(self, _):
|
|
8
|
+
pass
|
|
9
|
+
|
|
10
|
+
@staticmethod
|
|
11
|
+
def D(const, T, p): # pylint: disable=unused-argument
|
|
12
|
+
return const.diffussion_thermics_D_G11_A * (
|
|
13
|
+
const.diffussion_thermics_D_G11_B * T + const.diffussion_thermics_D_G11_C
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
@staticmethod
|
|
17
|
+
def K(const, T, p): # pylint: disable=unused-argument
|
|
18
|
+
return (
|
|
19
|
+
const.diffussion_thermics_K_G11_A * T**3
|
|
20
|
+
+ const.diffussion_thermics_K_G11_B * T**2
|
|
21
|
+
+ const.diffussion_thermics_K_G11_C * T
|
|
22
|
+
+ const.diffussion_thermics_K_G11_D
|
|
23
|
+
)
|
|
@@ -26,6 +26,7 @@ class FakeUnitRegistry: # pylint: disable=too-few-public-methods
|
|
|
26
26
|
"litre",
|
|
27
27
|
"hour",
|
|
28
28
|
"newton",
|
|
29
|
+
"watt",
|
|
29
30
|
):
|
|
30
31
|
self.__setattr__(prefix + unit, _fake(si.__getattr__(prefix + unit)))
|
|
31
32
|
self.__setattr__(
|
|
@@ -48,5 +49,6 @@ class FakeUnitRegistry: # pylint: disable=too-few-public-methods
|
|
|
48
49
|
"h",
|
|
49
50
|
"bar",
|
|
50
51
|
"N",
|
|
52
|
+
"W",
|
|
51
53
|
):
|
|
52
54
|
self.__setattr__(prefix + unit, _fake(si.__getattr__(prefix + unit)))
|
PySDM/physics/trivia.py
CHANGED
|
@@ -19,6 +19,10 @@ class PeakSupersaturation(Product):
|
|
|
19
19
|
def register(self, builder):
|
|
20
20
|
super().register(builder)
|
|
21
21
|
self.particulator.observers.append(self)
|
|
22
|
+
|
|
23
|
+
assert (
|
|
24
|
+
"Condensation" in self.particulator.dynamics
|
|
25
|
+
), "It seems the Condensation dynamic was not added when building particulator"
|
|
22
26
|
self.condensation = self.particulator.dynamics["Condensation"]
|
|
23
27
|
self.RH_max = np.full_like(self.buffer, np.nan)
|
|
24
28
|
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"""
|
|
2
|
-
Housekeeping products: time,
|
|
2
|
+
Housekeeping products: time, super-particle count, wall-time timers...
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from .dynamic_wall_time import DynamicWallTime
|
|
6
|
-
from .parcel_displacement import ParcelDisplacement
|
|
7
6
|
from .super_droplet_count_per_gridbox import SuperDropletCountPerGridbox
|
|
8
7
|
from .time import Time
|
|
9
8
|
from .timers import CPUTime, WallTime
|
|
@@ -32,6 +32,10 @@ VolumeFirstMoment = make_arbitrary_moment_product(
|
|
|
32
32
|
rank=1, attr="volume", attr_unit="m^3"
|
|
33
33
|
)
|
|
34
34
|
|
|
35
|
+
VolumeSecondMoment = make_arbitrary_moment_product(
|
|
36
|
+
rank=2, attr="volume", attr_unit="m^3"
|
|
37
|
+
)
|
|
38
|
+
|
|
35
39
|
RadiusSixthMoment = make_arbitrary_moment_product(rank=6, attr="radius", attr_unit="m")
|
|
36
40
|
|
|
37
41
|
RadiusFirstMoment = make_arbitrary_moment_product(rank=1, attr="radius", attr_unit="m")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PySDM
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.45
|
|
4
4
|
Summary: Pythonic particle-based (super-droplet) warm-rain/aqueous-chemistry cloud microphysics package with box, parcel & 1D/2D prescribed-flow examples in Python, Julia and Matlab
|
|
5
5
|
Home-page: https://github.com/open-atmos/PySDM
|
|
6
6
|
Author: https://github.com/open-atmos/PySDM/graphs/contributors
|
|
@@ -34,7 +34,7 @@ Provides-Extra: tests
|
|
|
34
34
|
Requires-Dist: matplotlib ; extra == 'tests'
|
|
35
35
|
Requires-Dist: pytest ; extra == 'tests'
|
|
36
36
|
Requires-Dist: pytest-timeout ; extra == 'tests'
|
|
37
|
-
Requires-Dist: PyPartMC ==1.0
|
|
37
|
+
Requires-Dist: PyPartMC ==1.1.0 ; extra == 'tests'
|
|
38
38
|
Requires-Dist: pyrcel ; extra == 'tests'
|
|
39
39
|
Requires-Dist: jupyter-core <5.0.0 ; extra == 'tests'
|
|
40
40
|
Requires-Dist: ipywidgets !=8.0.3 ; extra == 'tests'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
PySDM/__init__.py,sha256=-jFr7iN9cgzKvlcRdCA3NLAxMc_1NHyQR4uk0ZfF_A0,1640
|
|
2
2
|
PySDM/builder.py,sha256=3xwlnz2HijK4FHYm1YlkxPE02udj-WbZULZcq-iXaSk,5682
|
|
3
|
-
PySDM/formulae.py,sha256=
|
|
3
|
+
PySDM/formulae.py,sha256=9B2C4k2Z8okXtZr_yDY5vbtXWChBVMoXXXUQO70rXtk,10846
|
|
4
4
|
PySDM/particulator.py,sha256=yh3QThCYsqIIoEHrUsmB8aIhh5iWL7T87C6or_xcyG4,16591
|
|
5
5
|
PySDM/attributes/__init__.py,sha256=wR9DAJL3beWY_9IyDsbSjLV9BqJrOXdNScVCYy-Qtw8,55
|
|
6
6
|
PySDM/attributes/chemistry/__init__.py,sha256=sv9kFUXgcZjbjmrQKK8sgdgqM05MPxAw73Euj0O3n40,223
|
|
@@ -76,7 +76,7 @@ PySDM/backends/impl_numba/methods/isotope_methods.py,sha256=_kP669HfXYXilO3pvrk3
|
|
|
76
76
|
PySDM/backends/impl_numba/methods/moments_methods.py,sha256=p2y3TrLsCmmycGEadr9AyZZ5_Je7ZH_GMYVMhp1t0TE,5020
|
|
77
77
|
PySDM/backends/impl_numba/methods/pair_methods.py,sha256=zAWINfSc9S2lrPNLkBQCdpqL-u_pCl2NH20mS2fR81U,5578
|
|
78
78
|
PySDM/backends/impl_numba/methods/physics_methods.py,sha256=BdumMJMUh7NLxKscUhdCI_DlLZsSOwRu5kOEdMVFhQs,4982
|
|
79
|
-
PySDM/backends/impl_numba/methods/terminal_velocity_methods.py,sha256=
|
|
79
|
+
PySDM/backends/impl_numba/methods/terminal_velocity_methods.py,sha256=19_JrUDk1V9zdnh-ZeBa0Z4EpM5YsfzURTaHpPRiyfA,2563
|
|
80
80
|
PySDM/backends/impl_numba/test_helpers/__init__.py,sha256=8_cw4HYZE6jatsdpVWJHbbS2HwXWisbMpjFsos6JBqk,94
|
|
81
81
|
PySDM/backends/impl_numba/test_helpers/scipy_ode_condensation_solver.py,sha256=6O7Xrpd7vcnJJjKwfHnDTYWc4Lzd_SLl1Cc2Rzkx9Pg,8400
|
|
82
82
|
PySDM/backends/impl_thrust_rtc/__init__.py,sha256=iGWQO2nSMkX79is4W85b1MCM3oUE9miA20qI28wUvNM,36
|
|
@@ -95,7 +95,7 @@ PySDM/backends/impl_thrust_rtc/methods/isotope_methods.py,sha256=BHLS4yTlTVnrRea
|
|
|
95
95
|
PySDM/backends/impl_thrust_rtc/methods/moments_methods.py,sha256=Rav3lhqwtNo1omRl_Wq0oU9e37sYJH2ZdEGZHNlaPrI,8006
|
|
96
96
|
PySDM/backends/impl_thrust_rtc/methods/pair_methods.py,sha256=1QfyDh0cHB61umoEphMT37QcuHngTu7a-0tebGTbNz0,6997
|
|
97
97
|
PySDM/backends/impl_thrust_rtc/methods/physics_methods.py,sha256=0BB-p5L9NQQnlE2IkMW40YldWq97FsWZYzQ6VzpePk8,5715
|
|
98
|
-
PySDM/backends/impl_thrust_rtc/methods/terminal_velocity_methods.py,sha256=
|
|
98
|
+
PySDM/backends/impl_thrust_rtc/methods/terminal_velocity_methods.py,sha256=yjrMlNjzkvgElFd41WzbVxiyHpwhWgvhZFtH4Xb1ppM,5150
|
|
99
99
|
PySDM/backends/impl_thrust_rtc/methods/thrust_rtc_backend_methods.py,sha256=ZuHeSImR8--2RRmHTNITE2v_7PzbeCgC4zyL0hMsI6E,811
|
|
100
100
|
PySDM/backends/impl_thrust_rtc/test_helpers/__init__.py,sha256=c-QZ2cI70jcZ8Yvb1ZHunobGypXHTxeaTAjuGM7qe_0,145
|
|
101
101
|
PySDM/backends/impl_thrust_rtc/test_helpers/cpp2python.py,sha256=ThtAUqJ_Hqqsa0nVZvBvTrFOoiX95PaNWKzfpwvl6Cs,6048
|
|
@@ -149,12 +149,13 @@ PySDM/dynamics/impl/__init__.py,sha256=wQgfxtwzlaBeOY61t-6DQ-nXdrOh2VU2J4FBo_hzy
|
|
|
149
149
|
PySDM/dynamics/impl/chemistry_utils.py,sha256=TylQxynIO7sgTwr_RO0LTcGP3-LO8vMAE98Uj2BJVyY,5243
|
|
150
150
|
PySDM/dynamics/impl/random_generator_optimizer.py,sha256=lMlQn6jVNPKsCcZeroph_o-aZbinEx7BkKAsxWbh7ms,1515
|
|
151
151
|
PySDM/dynamics/impl/random_generator_optimizer_nopair.py,sha256=MF_aGZqgEdV_x8JSu9G0Wv0xJ4lX6DcSeNWmbnkCnw8,1059
|
|
152
|
-
PySDM/dynamics/terminal_velocity/__init__.py,sha256=
|
|
152
|
+
PySDM/dynamics/terminal_velocity/__init__.py,sha256=uvxTCpUx_DMAVwLUvhcGKwo0_l8OVK7SaFD5HbKeulk,261
|
|
153
153
|
PySDM/dynamics/terminal_velocity/gunn_and_kinzer.py,sha256=ykbZFHne_oOyBw5ABmdi633RZDmoOj1YKsb5T1bdAbQ,6400
|
|
154
|
+
PySDM/dynamics/terminal_velocity/power_series.py,sha256=Fyqop4Y74s_qO-jPYUWe_-xYRjKV9Fs-GC6bImlzv5E,981
|
|
154
155
|
PySDM/dynamics/terminal_velocity/rogers_and_yau.py,sha256=ZzG03esNoLayyHIYT2lUdKV2sOKNd9BhME96YCNXRUs,1033
|
|
155
156
|
PySDM/environments/__init__.py,sha256=t9Pxa2ZdEcfh6siHPrcA1LbAMNNd0uoA2jdi5XoBxNg,246
|
|
156
157
|
PySDM/environments/box.py,sha256=ai9j3lkOS001jIo1L-PvZ-cSFxsomD_Na4xshDKbE7c,1014
|
|
157
|
-
PySDM/environments/kinematic_1d.py,sha256=
|
|
158
|
+
PySDM/environments/kinematic_1d.py,sha256=kTZD3IdxUr-3Mk9RwC3lLH23DKaguphvw5S8_tMohDI,3257
|
|
158
159
|
PySDM/environments/kinematic_2d.py,sha256=Pn4vIFB6jlAVBQGFnidHF8j5n_kZ0QhmGcazFqmxAZs,3341
|
|
159
160
|
PySDM/environments/parcel.py,sha256=Me_9tRV8cxBcT4RcMeAYTVGzx77aSqPpViiTOwwyujY,4825
|
|
160
161
|
PySDM/environments/impl/__init__.py,sha256=VLo3BCKoh2ITc5eMudK17HzmktSn74d-bCdjq9xbhRo,68
|
|
@@ -179,8 +180,8 @@ PySDM/initialisation/aerosol_composition/dry_aerosol.py,sha256=FxFqPyR7Fhg1mi5lY
|
|
|
179
180
|
PySDM/initialisation/impl/__init__.py,sha256=vejuF9ebIGXb7l9zEiBBbNjs1Qct1KZuZRPLh8w3SJE,125
|
|
180
181
|
PySDM/initialisation/impl/spectrum.py,sha256=mnhodIKZUReelgxgT3GwT8FH9LnyaUigmr1GaQIJkv8,1138
|
|
181
182
|
PySDM/initialisation/sampling/__init__.py,sha256=zVwv6m1lrC4moviau-rL-tdGNL1pjx9KujEfEAmLe-Y,42
|
|
182
|
-
PySDM/initialisation/sampling/spatial_sampling.py,sha256=
|
|
183
|
-
PySDM/initialisation/sampling/spectral_sampling.py,sha256
|
|
183
|
+
PySDM/initialisation/sampling/spatial_sampling.py,sha256=HPDEEjTN_CWU9KX2Fw_7wMMKzQRMqi1tKVhzZ1KLcWY,1000
|
|
184
|
+
PySDM/initialisation/sampling/spectral_sampling.py,sha256=9Nd38R06EnbPLnpucu8occ-u1qmCGO6xD6PSSx8PYZY,4358
|
|
184
185
|
PySDM/initialisation/sampling/spectro_glacial_sampling.py,sha256=Wtq-NvZGX3-hFzRe_2LI2Ab8vi1BAcHNtdrC5gk3Rfo,1662
|
|
185
186
|
PySDM/initialisation/spectra/__init__.py,sha256=jU86INl3-p7HPOroJ5kGy7k43U4bxbXkfvffmvlIHz0,309
|
|
186
187
|
PySDM/initialisation/spectra/exponential.py,sha256=bF61am70p4KJsU910SamlY_PO-rXVs9yErKXQIZ2LGE,364
|
|
@@ -191,18 +192,21 @@ PySDM/initialisation/spectra/sum.py,sha256=SaxepweOdCozWlUkxCfr6Udo-KjGKWXgrdS0a
|
|
|
191
192
|
PySDM/initialisation/spectra/top_hat.py,sha256=xmBr_IrctsnguPNgX-jR7JnQnQl1qzIaEyz75fvAJho,563
|
|
192
193
|
PySDM/physics/__init__.py,sha256=FLer5MXgu69MztiUN91rpVVRV75SX-_YCRZohTF3y-U,1745
|
|
193
194
|
PySDM/physics/constants.py,sha256=wrIR-prH5ougsrL7jmpaIdmdmGZ5BejjmIEf5yFQpZs,1293
|
|
194
|
-
PySDM/physics/constants_defaults.py,sha256=
|
|
195
|
+
PySDM/physics/constants_defaults.py,sha256=kha03ZhX3ZewG1L6CaHQJsWJhoxeOO8WU8V2J1NvQAc,10892
|
|
195
196
|
PySDM/physics/dimensional_analysis.py,sha256=6_myMgc_eKhcbuNr7RqiQGj0OKNQ1TNqEMRb6Kzsqj0,688
|
|
196
|
-
PySDM/physics/trivia.py,sha256=
|
|
197
|
+
PySDM/physics/trivia.py,sha256=8fWqTP2G2jbnuK9xqpAIo-gfZ5ORx7In-b7AEUFAhBQ,3762
|
|
197
198
|
PySDM/physics/condensation_coordinate/__init__.py,sha256=LlSg1TLiLRQ46tfsKA1Khg7SaVPd2wg-MF0Syk5O7ng,151
|
|
198
199
|
PySDM/physics/condensation_coordinate/volume.py,sha256=DvkuOTHEq_vLFnJMjfEr0K0OUxTvcBBgFPlBb606sk8,410
|
|
199
200
|
PySDM/physics/condensation_coordinate/volume_logarithm.py,sha256=92xFq-qSIN8llu9HM59DQvbwawzbeRBIZ5hi7KEs7gc,512
|
|
200
|
-
PySDM/physics/diffusion_kinetics/__init__.py,sha256=
|
|
201
|
+
PySDM/physics/diffusion_kinetics/__init__.py,sha256=CWyIRClhDMzTLeNORHbg1izb-aGz00T6yORefVjwMsY,318
|
|
201
202
|
PySDM/physics/diffusion_kinetics/fuchs_sutugin.py,sha256=6HSMZoyKzCa1Vl-CkIOFJalGNnQB5Cl5MFFVsRtibFc,1025
|
|
203
|
+
PySDM/physics/diffusion_kinetics/grabowski_et_al_2011.py,sha256=_-bvXLcSfjPH2KEnRpSxyxG0olGi-hxkV2-nLBN4SwE,197
|
|
204
|
+
PySDM/physics/diffusion_kinetics/jensen_and_nugent_2017.py,sha256=YVUVyLhwjs_i1LQ40ULXZri2--t41I0otzTEGj4UJQ0,424
|
|
202
205
|
PySDM/physics/diffusion_kinetics/lowe_et_al_2019.py,sha256=mIR5jH00SNurVzKEgWk0e3-KKq65NbFqTHo3ZBDqzjY,621
|
|
203
206
|
PySDM/physics/diffusion_kinetics/neglect.py,sha256=QCiLZwQo7VW29dftNuwQjLdOePz0kZSvjepGmqr_Ar8,500
|
|
204
|
-
PySDM/physics/diffusion_kinetics/pruppacher_and_klett_2005.py,sha256=
|
|
205
|
-
PySDM/physics/diffusion_thermics/__init__.py,sha256=
|
|
207
|
+
PySDM/physics/diffusion_kinetics/pruppacher_and_klett_2005.py,sha256=1GVoKpZ9sw5se-uxvnyjcOc4khLJ64hYTPoztMM5nz0,686
|
|
208
|
+
PySDM/physics/diffusion_thermics/__init__.py,sha256=0m8nbzap79JQDOa6NOKaKX6issZi76KoBib9qxDV65Q,279
|
|
209
|
+
PySDM/physics/diffusion_thermics/grabowski_et_al_2011.py,sha256=_JRfeYa_Bo9ylYbGPWKPVaNGJUNm5M4YJL4cm6c5zoI,695
|
|
206
210
|
PySDM/physics/diffusion_thermics/lowe_et_al_2019.py,sha256=JkzhyHQwRHgui3M_fh3-QqXPlzjgtNrfHrcYFzAtl4Y,452
|
|
207
211
|
PySDM/physics/diffusion_thermics/neglect.py,sha256=m_yXkbDMb_bnMlfQR2qjteTQ9cmbE3E6tDRC3M2DtUM,312
|
|
208
212
|
PySDM/physics/diffusion_thermics/seinfeld_and_pandis_2010.py,sha256=Efz20-SZzbapGaxXlywj26BtGU3zATDMk9FkbYA9MTw,316
|
|
@@ -233,7 +237,7 @@ PySDM/physics/hygroscopicity/__init__.py,sha256=Iu3uM5NzjY9RCffhguD_hHrRy4DoVlz-
|
|
|
233
237
|
PySDM/physics/hygroscopicity/kappa_koehler.py,sha256=cTuuShyG7v9PbTTjRc9Xp6Wua_5YZS6XycTMXOwb6Ok,606
|
|
234
238
|
PySDM/physics/hygroscopicity/kappa_koehler_leading_terms.py,sha256=PzKLb9fPeR1jH872jtY5unNKGrmpLrFquXaT9WkCFu0,712
|
|
235
239
|
PySDM/physics/impl/__init__.py,sha256=M0WoRoBIUk2fXAL2GKv4AS8QTIcOJQ5fzE1x53X1YHI,154
|
|
236
|
-
PySDM/physics/impl/fake_unit_registry.py,sha256=
|
|
240
|
+
PySDM/physics/impl/fake_unit_registry.py,sha256=3Iv5vbMde_pTncJVQO51lzmnqGR1905oOjIPVG-NlFk,1728
|
|
237
241
|
PySDM/physics/impl/flag.py,sha256=zjTKmfWEKY60AiNUWbxLVy3DBzXFMy-YaMxKnUjMap8,192
|
|
238
242
|
PySDM/physics/isotope_equilibrium_fractionation_factors/__init__.py,sha256=BNh6k8VAqAX8BKH0LsVVTH1662wpvpIoGfbXbT5XQSg,681
|
|
239
243
|
PySDM/physics/isotope_equilibrium_fractionation_factors/barkan_and_luz_2005.py,sha256=W_GaRPlA905UpoS4OYG7uIrBxSAb5UXwK2TyBZd-gHY,350
|
|
@@ -311,7 +315,7 @@ PySDM/products/condensation/__init__.py,sha256=4Trl0rt4f2j3XFnBMooMDIPaq2pjl86hF
|
|
|
311
315
|
PySDM/products/condensation/activable_fraction.py,sha256=YoGJH7jTL2P6NH9-9E4og8ZUGb0sHpZTRs9pj1MZcxM,891
|
|
312
316
|
PySDM/products/condensation/condensation_timestep.py,sha256=7vi2V0BwVXZDngVwY2u-zFpgN42_Dd_ykYg_NhjYyj0,1540
|
|
313
317
|
PySDM/products/condensation/event_rates.py,sha256=-djWcPHbsO2V0tv9NoGp98y1MU-qHjFyceGm1I75P98,1812
|
|
314
|
-
PySDM/products/condensation/peak_supersaturation.py,sha256=
|
|
318
|
+
PySDM/products/condensation/peak_supersaturation.py,sha256=e0AwMjooCueuQ3YLrUZ6AxahGQLJdh5ocOE1SVMYyaE,1274
|
|
315
319
|
PySDM/products/displacement/__init__.py,sha256=dHAXQ2b7jmQVMYdWkIuGjGz56EU0UyJMRDyKV0meo1w,315
|
|
316
320
|
PySDM/products/displacement/averaged_terminal_velocity.py,sha256=h2JBUmYkTeyGwGdVJoGsYeY0XJStg2pwGcuDpZVT-mk,1172
|
|
317
321
|
PySDM/products/displacement/flow_velocity_component.py,sha256=I5K8gpKeMDYlCeIYuwF3W7hGsHHSKLp-my-OPcwYb0k,1383
|
|
@@ -323,9 +327,8 @@ PySDM/products/freezing/freezable_specific_concentration.py,sha256=I4RJMBFCVDvDj
|
|
|
323
327
|
PySDM/products/freezing/frozen_particle_concentration.py,sha256=8SpNQXOGQb1sIcnZWBwoR1kWNh1CgkbMJsuy48gwB9c,1460
|
|
324
328
|
PySDM/products/freezing/ice_nuclei_concentration.py,sha256=iAd_-TMc3Q9Q6PQTkvYMhxYi6HofI7VFRJopGAhPWLY,1277
|
|
325
329
|
PySDM/products/freezing/total_unfrozen_immersed_surface_area.py,sha256=0qMCsERyDMwcXg41SQQgSgDbwqjtQtoxSlozaIIkQkU,744
|
|
326
|
-
PySDM/products/housekeeping/__init__.py,sha256=
|
|
330
|
+
PySDM/products/housekeeping/__init__.py,sha256=S4q5D5NgTtDMD94uyAVMP5omVCzMQY2i6hRz_4taGDs,261
|
|
327
331
|
PySDM/products/housekeeping/dynamic_wall_time.py,sha256=lcpeMNTjwjAvO0uLpawLSo0YPxvoQeQp9CEDttRWPkg,643
|
|
328
|
-
PySDM/products/housekeeping/parcel_displacement.py,sha256=zDklDrFT2EBUw2uyxm1R7Ud301lN0D6uIwRzhJuqeQ4,653
|
|
329
332
|
PySDM/products/housekeeping/super_droplet_count_per_gridbox.py,sha256=4aWPrPOSU7NUUZ0zXsBJDJvQ4id9mn84EIlBoMuExz4,996
|
|
330
333
|
PySDM/products/housekeeping/time.py,sha256=LvGhRNtCHtZGO8Anfc_Vo_xtA34T3w41HvtBhwEyeAk,457
|
|
331
334
|
PySDM/products/housekeeping/timers.py,sha256=bgaQNhqI6KuMDLUqDCCZNIAs4Ldvxf6okyv7Mm-t59Q,1085
|
|
@@ -340,10 +343,11 @@ PySDM/products/impl/spectrum_moment_product.py,sha256=0QUUBJyzbNmnGTgv1Ol9dtf2av
|
|
|
340
343
|
PySDM/products/optical/__init__.py,sha256=jBNQ2aUR6hUfZZtZPt9UR5866EeOdgtMU-FjlXZ6x_U,123
|
|
341
344
|
PySDM/products/optical/cloud_albedo.py,sha256=aW8_Rz7lFBoXMar45ub2iIcEidBt5Rc8X84KX__M_d8,315
|
|
342
345
|
PySDM/products/optical/cloud_optical_depth.py,sha256=Vm0WPCWbCTG305XTP-denNzgIkqyLojfTW-2a3rbsy4,391
|
|
343
|
-
PySDM/products/parcel/__init__.py,sha256=
|
|
346
|
+
PySDM/products/parcel/__init__.py,sha256=SfVQ25TE48njgj0TyQ9VJ1OG8LGXVqxFBA-mgfbb0S0,157
|
|
344
347
|
PySDM/products/parcel/cloud_water_path.py,sha256=J9FQ6m7pfGa6cyV5CzXcDPKhlN0iuwQj4O8YCXAC-ho,1823
|
|
345
|
-
PySDM/products/
|
|
346
|
-
PySDM/products/size_spectral/
|
|
348
|
+
PySDM/products/parcel/parcel_displacement.py,sha256=zDklDrFT2EBUw2uyxm1R7Ud301lN0D6uIwRzhJuqeQ4,653
|
|
349
|
+
PySDM/products/size_spectral/__init__.py,sha256=8B4wiFGoyXbAjR09eRWpCCeVT14ZMooh7VLBQ1Pjl7g,1594
|
|
350
|
+
PySDM/products/size_spectral/arbitrary_moment.py,sha256=YukqGvkYuKzWbDkaDCbsgcaM-siXY80iN3zRwMbgXIA,1208
|
|
347
351
|
PySDM/products/size_spectral/cloud_water_content.py,sha256=iZNIhF02jQzlHa4dGTMRosGrq_jhf-F9-gwN1AYKHD4,2522
|
|
348
352
|
PySDM/products/size_spectral/effective_radius.py,sha256=Fm7WWNvLKG0arBp8fqXmlhkbWNb1SblJ-PbMOZKRNJw,1878
|
|
349
353
|
PySDM/products/size_spectral/effective_radius_activated.py,sha256=WzqRNMxpFvcezzz92IhWlZFIFnQdKbL5Jho2F7jCauk,1351
|
|
@@ -360,8 +364,8 @@ PySDM/products/size_spectral/size_standard_deviation.py,sha256=ikW_BefV27gwUlDPo
|
|
|
360
364
|
PySDM/products/size_spectral/total_particle_concentration.py,sha256=stDEn67KGhxEkrOC4CCfCFVgjtQPMphZTfJ1Vy_H5aw,454
|
|
361
365
|
PySDM/products/size_spectral/total_particle_specific_concentration.py,sha256=z6SfknIoXgT2XbVeuswrwBew9yTlmbW7qWFRmD4rqUg,460
|
|
362
366
|
PySDM/products/size_spectral/water_mixing_ratio.py,sha256=i2g2s8Hj_ZTmggZvXuGRWnqyxutSknncY8Imzw_Vfhk,1301
|
|
363
|
-
PySDM-2.
|
|
364
|
-
PySDM-2.
|
|
365
|
-
PySDM-2.
|
|
366
|
-
PySDM-2.
|
|
367
|
-
PySDM-2.
|
|
367
|
+
PySDM-2.45.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
368
|
+
PySDM-2.45.dist-info/METADATA,sha256=8azh6MqIvPeMTMBcvLKqPIOH5pi-ETHBMnqzXfm-GDM,45361
|
|
369
|
+
PySDM-2.45.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
370
|
+
PySDM-2.45.dist-info/top_level.txt,sha256=6NYaDAhUnaYMD7ebD_dQ7HlhiJS7NMuKEXb0ck7Wcsg,6
|
|
371
|
+
PySDM-2.45.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|