Skip to content

Commit ce84f6e

Browse files
authored
refactor: remove references to backend from freezing dynamic and move freezing unit test to tests/unit_tests/dynamics. closes #1154 (#1515)
1 parent 4db6819 commit ce84f6e

File tree

3 files changed

+47
-37
lines changed

3 files changed

+47
-37
lines changed

PySDM/dynamics/freezing.py

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22
immersion freezing using either singular or time-dependent formulation
33
"""
44

5-
from PySDM.backends.impl_common.freezing_attributes import (
6-
SingularAttributes,
7-
TimeDependentAttributes,
8-
)
95
from PySDM.physics.heterogeneous_ice_nucleation_rate import Null
106
from PySDM.dynamics.impl import register_dynamic
117

@@ -25,22 +21,24 @@ def __init__(self, *, singular=True, record_freezing_temperature=False, thaw=Fal
2521
def register(self, builder):
2622
self.particulator = builder.particulator
2723

28-
assert builder.formulae.particle_shape_and_density.supports_mixed_phase()
24+
assert (
25+
self.particulator.formulae.particle_shape_and_density.supports_mixed_phase()
26+
)
2927

3028
builder.request_attribute("signed water mass")
3129
if self.singular or self.record_freezing_temperature:
3230
builder.request_attribute("freezing temperature")
3331

3432
if not self.singular:
3533
assert not isinstance(
36-
builder.formulae.heterogeneous_ice_nucleation_rate, Null
34+
self.particulator.formulae.heterogeneous_ice_nucleation_rate, Null
3735
)
3836
builder.request_attribute("immersed surface area")
3937
self.rand = self.particulator.Storage.empty(
4038
self.particulator.n_sd, dtype=float
4139
)
4240
self.rng = self.particulator.Random(
43-
self.particulator.n_sd, self.particulator.backend.formulae.seed
41+
self.particulator.n_sd, self.particulator.formulae.seed
4442
)
4543

4644
def __call__(self):
@@ -54,39 +52,12 @@ def __call__(self):
5452
return
5553

5654
if self.singular:
57-
self.particulator.backend.freeze_singular(
58-
attributes=SingularAttributes(
59-
freezing_temperature=self.particulator.attributes[
60-
"freezing temperature"
61-
],
62-
signed_water_mass=self.particulator.attributes["signed water mass"],
63-
),
64-
temperature=self.particulator.environment["T"],
65-
relative_humidity=self.particulator.environment["RH"],
66-
cell=self.particulator.attributes["cell id"],
67-
thaw=self.thaw,
68-
)
55+
self.particulator.immersion_freezing_singular(thaw=self.thaw)
6956
else:
7057
self.rand.urand(self.rng)
71-
self.particulator.backend.freeze_time_dependent(
58+
self.particulator.immersion_freezing_time_dependent(
7259
rand=self.rand,
73-
attributes=TimeDependentAttributes(
74-
immersed_surface_area=self.particulator.attributes[
75-
"immersed surface area"
76-
],
77-
signed_water_mass=self.particulator.attributes["signed water mass"],
78-
),
79-
timestep=self.particulator.dt,
80-
cell=self.particulator.attributes["cell id"],
81-
a_w_ice=self.particulator.environment["a_w_ice"],
82-
temperature=self.particulator.environment["T"],
83-
relative_humidity=self.particulator.environment["RH"],
8460
record_freezing_temperature=self.record_freezing_temperature,
85-
freezing_temperature=(
86-
self.particulator.attributes["freezing temperature"]
87-
if self.record_freezing_temperature
88-
else None
89-
),
9061
thaw=self.thaw,
9162
)
9263

PySDM/particulator.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
import numpy as np
66

77
from PySDM.backends.impl_common.backend_methods import BackendMethods
8+
from PySDM.backends.impl_common.freezing_attributes import (
9+
SingularAttributes,
10+
TimeDependentAttributes,
11+
)
812
from PySDM.backends.impl_common.index import make_Index
913
from PySDM.backends.impl_common.indexed_storage import make_IndexedStorage
1014
from PySDM.backends.impl_common.pair_indicator import make_PairIndicator
@@ -479,3 +483,38 @@ def seeding(
479483
self.attributes.mark_updated("multiplicity")
480484
for key in self.attributes.get_extensive_attribute_keys():
481485
self.attributes.mark_updated(key)
486+
487+
def immersion_freezing_time_dependent(
488+
self, *, thaw: bool, record_freezing_temperature: bool, rand: Storage
489+
):
490+
self.backend.freeze_time_dependent(
491+
rand=rand,
492+
attributes=TimeDependentAttributes(
493+
immersed_surface_area=self.attributes["immersed surface area"],
494+
signed_water_mass=self.attributes["signed water mass"],
495+
),
496+
timestep=self.dt,
497+
cell=self.attributes["cell id"],
498+
a_w_ice=self.environment["a_w_ice"],
499+
temperature=self.environment["T"],
500+
relative_humidity=self.environment["RH"],
501+
record_freezing_temperature=record_freezing_temperature,
502+
freezing_temperature=(
503+
self.attributes["freezing temperature"]
504+
if record_freezing_temperature
505+
else None
506+
),
507+
thaw=thaw,
508+
)
509+
510+
def immersion_freezing_singular(self, *, thaw: bool):
511+
self.backend.freeze_singular(
512+
attributes=SingularAttributes(
513+
freezing_temperature=self.attributes["freezing temperature"],
514+
signed_water_mass=self.attributes["signed water mass"],
515+
),
516+
temperature=self.environment["T"],
517+
relative_humidity=self.environment["RH"],
518+
cell=self.attributes["cell id"],
519+
thaw=thaw,
520+
)

tests/unit_tests/backends/test_freezing_methods.py renamed to tests/unit_tests/dynamics/test_immersion_freezing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from PySDM.products import IceWaterContent
1111

1212

13-
class TestFreezingMethods:
13+
class TestImmersionFreezing:
1414
# TODO #599
1515
def test_record_freezing_temperature_on_time_dependent_freeze(self):
1616
pass

0 commit comments

Comments
 (0)