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