PySDM_examples.Bieli_et_al_2022.simulation

 1import PySDM.products.size_spectral.arbitrary_moment as am
 2from PySDM.backends import CPU
 3from PySDM.builder import Builder
 4from PySDM.dynamics import Collision
 5from PySDM.environments import Box
 6from PySDM.initialisation.sampling.spectral_sampling import ConstantMultiplicity
 7
 8
 9def make_core(settings, coal_eff):
10    backend = CPU
11    collision = Collision(
12        collision_kernel=settings.kernel,
13        coalescence_efficiency=coal_eff,
14        breakup_efficiency=settings.break_eff,
15        fragmentation_function=settings.fragmentation,
16        adaptive=settings.adaptive,
17    )
18    builder = Builder(
19        n_sd=settings.n_sd,
20        backend=backend(settings.formulae),
21        environment=Box(dv=settings.dv, dt=settings.dt),
22        dynamics=[collision],
23    )
24    builder.particulator.environment["rhod"] = 1.0
25    attributes = {}
26    attributes["volume"], attributes["multiplicity"] = ConstantMultiplicity(
27        settings.spectrum
28    ).sample_deterministic(settings.n_sd)
29    common_args = {
30        "attr": "volume",
31        "attr_unit": "m^3",
32        "skip_division_by_m0": True,
33        "skip_division_by_dv": True,
34    }
35    products = tuple(
36        am.make_arbitrary_moment_product(rank=rank, **common_args)(name=f"M{rank}")
37        for rank in range(3)
38    )
39    return builder.build(attributes, products)
def make_core(settings, coal_eff):
10def make_core(settings, coal_eff):
11    backend = CPU
12    collision = Collision(
13        collision_kernel=settings.kernel,
14        coalescence_efficiency=coal_eff,
15        breakup_efficiency=settings.break_eff,
16        fragmentation_function=settings.fragmentation,
17        adaptive=settings.adaptive,
18    )
19    builder = Builder(
20        n_sd=settings.n_sd,
21        backend=backend(settings.formulae),
22        environment=Box(dv=settings.dv, dt=settings.dt),
23        dynamics=[collision],
24    )
25    builder.particulator.environment["rhod"] = 1.0
26    attributes = {}
27    attributes["volume"], attributes["multiplicity"] = ConstantMultiplicity(
28        settings.spectrum
29    ).sample_deterministic(settings.n_sd)
30    common_args = {
31        "attr": "volume",
32        "attr_unit": "m^3",
33        "skip_division_by_m0": True,
34        "skip_division_by_dv": True,
35    }
36    products = tuple(
37        am.make_arbitrary_moment_product(rank=rank, **common_args)(name=f"M{rank}")
38        for rank in range(3)
39    )
40    return builder.build(attributes, products)