Skip to content

Commit 1ed9e0c

Browse files
slayootluettm
andauthored
mixed-phase moments: new test and filtering attr name fix (#1536)
Co-authored-by: Tim Luettmer <tluettm@uni-mainz.de> Co-authored-by: Tim Lüttmer <154344756+tluettm@users.noreply.github.com>
1 parent a7b9f4d commit 1ed9e0c

File tree

5 files changed

+26
-18
lines changed

5 files changed

+26
-18
lines changed

PySDM/particulator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ def moments(
317317
moment_0,
318318
moments,
319319
specs: dict,
320-
attr_name="water mass",
320+
attr_name="signed water mass",
321321
attr_range=(-np.inf, np.inf),
322322
weighting_attribute="water mass",
323323
weighting_rank=0,

PySDM/products/impl/moment_product.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def _download_moment_to_buffer(
2727
*,
2828
attr,
2929
rank,
30-
filter_attr="water mass",
30+
filter_attr="signed water mass",
3131
filter_range=(-np.inf, np.inf),
3232
weighting_attribute="water mass",
3333
weighting_rank=0,

PySDM/products/size_spectral/mean_radius.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,14 @@ def _impl(self, **kwargs):
2727
attr="volume",
2828
rank=1 / 3,
2929
filter_range=(
30-
self.formulae.trivia.volume(self.radius_range[0]),
31-
self.formulae.trivia.volume(self.radius_range[1]),
30+
self.formulae.particle_shape_and_density.radius_to_mass(
31+
self.radius_range[0]
32+
),
33+
self.formulae.particle_shape_and_density.radius_to_mass(
34+
self.radius_range[1]
35+
),
3236
),
33-
filter_attr="volume",
37+
filter_attr="signed water mass",
3438
)
3539
self.buffer[:] /= self.formulae.constants.PI_4_3 ** (1 / 3)
3640
return self.buffer

PySDM/products/size_spectral/water_mixing_ratio.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,30 +12,32 @@
1212
class WaterMixingRatio(MomentProduct):
1313
def __init__(self, radius_range=None, name=None, unit="dimensionless"):
1414
self.radius_range = radius_range or (0, np.inf)
15-
self.mass_range = None
15+
self.signed_mass_range = None
1616
super().__init__(unit=unit, name=name)
1717

1818
def register(self, builder):
1919
super().register(builder)
20-
self.mass_range = self.formulae.particle_shape_and_density.radius_to_mass(
21-
np.asarray(self.radius_range)
20+
self.signed_mass_range = (
21+
self.formulae.particle_shape_and_density.radius_to_mass(
22+
np.asarray(self.radius_range)
23+
)
2224
)
2325
self.radius_range = None
2426

2527
def _impl(self, **kwargs): # TODO #217
2628
self._download_moment_to_buffer(
2729
attr="water mass",
2830
rank=0,
29-
filter_range=self.mass_range,
30-
filter_attr="water mass",
31+
filter_range=self.signed_mass_range,
32+
filter_attr="signed water mass",
3133
)
3234
conc = self.buffer.copy()
3335

3436
self._download_moment_to_buffer(
3537
attr="water mass",
3638
rank=1,
37-
filter_range=self.mass_range,
38-
filter_attr="water mass",
39+
filter_range=self.signed_mass_range,
40+
filter_attr="signed water mass",
3941
)
4042
result = self.buffer.copy()
4143
result[:] *= conc

tests/unit_tests/products/test_mixed_phase_moments.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,14 @@ def test_mixed_phase_moments(particle_mass, backend_class):
6666
r_t = particulator.products["r_all"].get()[0]
6767

6868
# assert
69-
assert lwc >= 0
70-
assert iwc >= 0
71-
assert twc >= 0
72-
assert lwc + iwc == twc
73-
assert n_w + n_i == n_t
74-
7569
assert np.isfinite([lwc, iwc, twc]).all()
7670
assert np.isfinite([n_w, n_i, n_t]).all()
7771
assert np.isfinite([r_w, r_i, r_t]).all()
72+
73+
if any(particle_mass > 0):
74+
assert all(product > 0 for product in (lwc, n_w, r_w))
75+
if any(particle_mass < 0):
76+
assert all(product > 0 for product in (iwc, n_i, r_i))
77+
assert twc > 0
78+
assert lwc + iwc == twc
79+
assert n_w + n_i == n_t

0 commit comments

Comments
 (0)