PySDM.products.size_spectral.water_mixing_ratio
liquid water mixing ratio (per mass of dry air) computed from particle sizes (optionally restricted to a given size range)
1""" 2liquid water mixing ratio (per mass of dry air) computed from particle sizes 3 (optionally restricted to a given size range) 4""" 5 6import numpy as np 7 8from PySDM.products.impl import MomentProduct, register_product 9 10 11@register_product() 12class WaterMixingRatio(MomentProduct): 13 def __init__(self, radius_range=None, name=None, unit="dimensionless"): 14 self.radius_range = radius_range or (0, np.inf) 15 self.signed_mass_range = None 16 super().__init__(unit=unit, name=name) 17 18 def register(self, builder): 19 super().register(builder) 20 self.signed_mass_range = ( 21 self.formulae.particle_shape_and_density.radius_to_mass( 22 np.asarray(self.radius_range) 23 ) 24 ) 25 self.radius_range = None 26 27 def _impl(self, **kwargs): # TODO #217 28 self._download_moment_to_buffer( 29 attr="water mass", 30 rank=0, 31 filter_range=self.signed_mass_range, 32 filter_attr="signed water mass", 33 ) 34 conc = self.buffer.copy() 35 36 self._download_moment_to_buffer( 37 attr="water mass", 38 rank=1, 39 filter_range=self.signed_mass_range, 40 filter_attr="signed water mass", 41 ) 42 result = self.buffer.copy() 43 result[:] *= conc 44 result[:] /= self.particulator.mesh.dv 45 46 self._download_to_buffer(self.particulator.environment["rhod"]) 47 result[:] /= self.buffer 48 return result
12@register_product() 13class WaterMixingRatio(MomentProduct): 14 def __init__(self, radius_range=None, name=None, unit="dimensionless"): 15 self.radius_range = radius_range or (0, np.inf) 16 self.signed_mass_range = None 17 super().__init__(unit=unit, name=name) 18 19 def register(self, builder): 20 super().register(builder) 21 self.signed_mass_range = ( 22 self.formulae.particle_shape_and_density.radius_to_mass( 23 np.asarray(self.radius_range) 24 ) 25 ) 26 self.radius_range = None 27 28 def _impl(self, **kwargs): # TODO #217 29 self._download_moment_to_buffer( 30 attr="water mass", 31 rank=0, 32 filter_range=self.signed_mass_range, 33 filter_attr="signed water mass", 34 ) 35 conc = self.buffer.copy() 36 37 self._download_moment_to_buffer( 38 attr="water mass", 39 rank=1, 40 filter_range=self.signed_mass_range, 41 filter_attr="signed water mass", 42 ) 43 result = self.buffer.copy() 44 result[:] *= conc 45 result[:] /= self.particulator.mesh.dv 46 47 self._download_to_buffer(self.particulator.environment["rhod"]) 48 result[:] /= self.buffer 49 return result
Helper class that provides a standard way to create an ABC using inheritance.
def
register(self, builder):
19 def register(self, builder): 20 super().register(builder) 21 self.signed_mass_range = ( 22 self.formulae.particle_shape_and_density.radius_to_mass( 23 np.asarray(self.radius_range) 24 ) 25 ) 26 self.radius_range = None
Register a virtual subclass of an ABC.
Returns the subclass, to allow usage as a class decorator.