PySDM_examples.Shima_et_al_2009.tutorial_example

 1from PySDM.backends import CPU
 2from PySDM.builder import Builder
 3from PySDM.dynamics import Coalescence
 4from PySDM.environments import Box
 5from PySDM.initialisation.sampling.spectral_sampling import ConstantMultiplicity
 6from PySDM.products import ParticleVolumeVersusRadiusLogarithmSpectrum, WallTime
 7
 8
 9def run(settings, observers=()):
10    builder = Builder(
11        n_sd=settings.n_sd,
12        backend=CPU(formulae=settings.formulae),
13        environment=Box(dv=settings.dv, dt=settings.dt),
14    )
15    attributes = {}
16    sampling = ConstantMultiplicity(settings.spectrum)
17    attributes["volume"], attributes["multiplicity"] = sampling.sample_deterministic(
18        settings.n_sd
19    )
20    coalescence = Coalescence(
21        collision_kernel=settings.kernel, adaptive=settings.adaptive
22    )
23    builder.add_dynamic(coalescence)
24    products = (
25        ParticleVolumeVersusRadiusLogarithmSpectrum(
26            settings.radius_bins_edges, name="dv/dlnr"
27        ),
28        WallTime(),
29    )
30    particulator = builder.build(attributes, products)
31    if hasattr(settings, "u_term") and "terminal velocity" in particulator.attributes:
32        particulator.attributes["terminal velocity"].approximation = settings.u_term(
33            particulator
34        )
35
36    for observer in observers:
37        particulator.observers.append(observer)
38
39    vals = {}
40    particulator.products["wall time"].reset()
41    for step in settings.output_steps:
42        particulator.run(step - particulator.n_steps)
43        vals[step] = particulator.products["dv/dlnr"].get()[0]
44        vals[step][:] *= settings.rho
45
46    exec_time = particulator.products["wall time"].get()
47    return vals, exec_time
def run(settings, observers=()):
10def run(settings, observers=()):
11    builder = Builder(
12        n_sd=settings.n_sd,
13        backend=CPU(formulae=settings.formulae),
14        environment=Box(dv=settings.dv, dt=settings.dt),
15    )
16    attributes = {}
17    sampling = ConstantMultiplicity(settings.spectrum)
18    attributes["volume"], attributes["multiplicity"] = sampling.sample_deterministic(
19        settings.n_sd
20    )
21    coalescence = Coalescence(
22        collision_kernel=settings.kernel, adaptive=settings.adaptive
23    )
24    builder.add_dynamic(coalescence)
25    products = (
26        ParticleVolumeVersusRadiusLogarithmSpectrum(
27            settings.radius_bins_edges, name="dv/dlnr"
28        ),
29        WallTime(),
30    )
31    particulator = builder.build(attributes, products)
32    if hasattr(settings, "u_term") and "terminal velocity" in particulator.attributes:
33        particulator.attributes["terminal velocity"].approximation = settings.u_term(
34            particulator
35        )
36
37    for observer in observers:
38        particulator.observers.append(observer)
39
40    vals = {}
41    particulator.products["wall time"].reset()
42    for step in settings.output_steps:
43        particulator.run(step - particulator.n_steps)
44        vals[step] = particulator.products["dv/dlnr"].get()[0]
45        vals[step][:] *= settings.rho
46
47    exec_time = particulator.products["wall time"].get()
48    return vals, exec_time