PySDM_examples.deJong_Azimi.simulation_0D
1from collections import namedtuple 2 3import numpy as np 4 5from PySDM.backends import CPU 6from PySDM.particulator import Particulator 7from PySDM.dynamics import Coalescence 8from PySDM.environments import Box 9from PySDM.initialisation.sampling.spectral_sampling import ConstantMultiplicity 10from PySDM.products.size_spectral import ( 11 ParticleVolumeVersusRadiusLogarithmSpectrum, 12 VolumeFirstMoment, 13 VolumeSecondMoment, 14 ZerothMoment, 15) 16 17 18def run_box(settings, backend_class=CPU): 19 environment = Box( 20 dv=settings.dv, 21 dt=settings.dt, 22 backend=backend_class(settings.formulae), 23 ) 24 25 environment["rhod"] = settings.rhod 26 attributes = {} 27 attributes["volume"], attributes["multiplicity"] = ConstantMultiplicity( 28 settings.spectrum 29 ).sample_deterministic(settings.n_sd) 30 products = ( 31 ParticleVolumeVersusRadiusLogarithmSpectrum( 32 radius_bins_edges=settings.radius_bins_edges, name="dv/dlnr" 33 ), 34 ZerothMoment(name="M0"), 35 VolumeFirstMoment(name="M1"), 36 VolumeSecondMoment(name="M2"), 37 ) 38 particulator = Particulator( 39 n_sd=settings.n_sd, 40 environment=environment, 41 dynamics=[ 42 Coalescence( 43 collision_kernel=settings.kernel, 44 coalescence_efficiency=settings.coal_eff, 45 adaptive=settings.adaptive, 46 ) 47 ], 48 attributes=attributes, 49 products=products, 50 ) 51 52 y = np.ndarray((len(settings.steps), len(settings.radius_bins_edges) - 1)) 53 mom = np.ndarray((len(settings.steps), 3)) 54 for i, step in enumerate(settings.steps): 55 particulator.run(step - particulator.n_steps) 56 y[i] = particulator.products["dv/dlnr"].get()[0] 57 (mom[i, 0],) = particulator.products["M0"].get() 58 (mom[i, 1],) = particulator.products["M1"].get() 59 (mom[i, 2],) = particulator.products["M2"].get() 60 61 return namedtuple("_", ("radius_bins_left_edges", "dv_dlnr", "moments"))( 62 radius_bins_left_edges=settings.radius_bins_edges[:-1], dv_dlnr=y, moments=mom 63 )
def
run_box( settings, backend_class=functools.partial(<function _cached_backend>, backend_class=<class 'PySDM.backends.Numba'>)):
19def run_box(settings, backend_class=CPU): 20 environment = Box( 21 dv=settings.dv, 22 dt=settings.dt, 23 backend=backend_class(settings.formulae), 24 ) 25 26 environment["rhod"] = settings.rhod 27 attributes = {} 28 attributes["volume"], attributes["multiplicity"] = ConstantMultiplicity( 29 settings.spectrum 30 ).sample_deterministic(settings.n_sd) 31 products = ( 32 ParticleVolumeVersusRadiusLogarithmSpectrum( 33 radius_bins_edges=settings.radius_bins_edges, name="dv/dlnr" 34 ), 35 ZerothMoment(name="M0"), 36 VolumeFirstMoment(name="M1"), 37 VolumeSecondMoment(name="M2"), 38 ) 39 particulator = Particulator( 40 n_sd=settings.n_sd, 41 environment=environment, 42 dynamics=[ 43 Coalescence( 44 collision_kernel=settings.kernel, 45 coalescence_efficiency=settings.coal_eff, 46 adaptive=settings.adaptive, 47 ) 48 ], 49 attributes=attributes, 50 products=products, 51 ) 52 53 y = np.ndarray((len(settings.steps), len(settings.radius_bins_edges) - 1)) 54 mom = np.ndarray((len(settings.steps), 3)) 55 for i, step in enumerate(settings.steps): 56 particulator.run(step - particulator.n_steps) 57 y[i] = particulator.products["dv/dlnr"].get()[0] 58 (mom[i, 0],) = particulator.products["M0"].get() 59 (mom[i, 1],) = particulator.products["M1"].get() 60 (mom[i, 2],) = particulator.products["M2"].get() 61 62 return namedtuple("_", ("radius_bins_left_edges", "dv_dlnr", "moments"))( 63 radius_bins_left_edges=settings.radius_bins_edges[:-1], dv_dlnr=y, moments=mom 64 )