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 dynamics=( 15 Coalescence(collision_kernel=settings.kernel, adaptive=settings.adaptive), 16 ), 17 ) 18 attributes = {} 19 sampling = ConstantMultiplicity(settings.spectrum) 20 attributes["volume"], attributes["multiplicity"] = sampling.sample_deterministic( 21 settings.n_sd 22 ) 23 products = ( 24 ParticleVolumeVersusRadiusLogarithmSpectrum( 25 settings.radius_bins_edges, name="dv/dlnr" 26 ), 27 WallTime(), 28 ) 29 particulator = builder.build(attributes, products) 30 if hasattr(settings, "u_term") and "terminal velocity" in particulator.attributes: 31 particulator.attributes["terminal velocity"].approximation = settings.u_term( 32 particulator 33 ) 34 35 for observer in observers: 36 particulator.observers.append(observer) 37 38 vals = {} 39 particulator.products["wall time"].reset() 40 for step in settings.output_steps: 41 particulator.run(step - particulator.n_steps) 42 vals[step] = particulator.products["dv/dlnr"].get()[0] 43 vals[step][:] *= settings.rho 44 45 exec_time = particulator.products["wall time"].get() 46 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 dynamics=( 16 Coalescence(collision_kernel=settings.kernel, adaptive=settings.adaptive), 17 ), 18 ) 19 attributes = {} 20 sampling = ConstantMultiplicity(settings.spectrum) 21 attributes["volume"], attributes["multiplicity"] = sampling.sample_deterministic( 22 settings.n_sd 23 ) 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