Module 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)

Expand source code
"""
liquid water mixing ratio (per mass of dry air) computed from particle sizes
 (optionally restricted to a given size range)
"""

import numpy as np

from PySDM.products.impl.moment_product import MomentProduct


class WaterMixingRatio(MomentProduct):
    def __init__(self, radius_range=None, name=None, unit="dimensionless"):
        self.radius_range = radius_range or (0, np.inf)
        self.volume_range = None
        super().__init__(unit=unit, name=name)

    def register(self, builder):
        super().register(builder)
        self.volume_range = self.formulae.trivia.volume(np.asarray(self.radius_range))
        self.radius_range = None

    def _impl(self, **kwargs):  # TODO #217
        self._download_moment_to_buffer(
            attr="volume", rank=0, filter_range=self.volume_range, filter_attr="volume"
        )
        conc = self.buffer.copy()

        self._download_moment_to_buffer(
            attr="volume", rank=1, filter_range=self.volume_range, filter_attr="volume"
        )
        result = self.buffer.copy()
        result[:] *= self.formulae.constants.rho_w
        result[:] *= conc
        result[:] /= self.particulator.mesh.dv

        self._download_to_buffer(self.particulator.environment["rhod"])
        result[:] /= self.buffer
        return result

Classes

class WaterMixingRatio (radius_range=None, name=None, unit='dimensionless')

Helper class that provides a standard way to create an ABC using inheritance.

Expand source code
class WaterMixingRatio(MomentProduct):
    def __init__(self, radius_range=None, name=None, unit="dimensionless"):
        self.radius_range = radius_range or (0, np.inf)
        self.volume_range = None
        super().__init__(unit=unit, name=name)

    def register(self, builder):
        super().register(builder)
        self.volume_range = self.formulae.trivia.volume(np.asarray(self.radius_range))
        self.radius_range = None

    def _impl(self, **kwargs):  # TODO #217
        self._download_moment_to_buffer(
            attr="volume", rank=0, filter_range=self.volume_range, filter_attr="volume"
        )
        conc = self.buffer.copy()

        self._download_moment_to_buffer(
            attr="volume", rank=1, filter_range=self.volume_range, filter_attr="volume"
        )
        result = self.buffer.copy()
        result[:] *= self.formulae.constants.rho_w
        result[:] *= conc
        result[:] /= self.particulator.mesh.dv

        self._download_to_buffer(self.particulator.environment["rhod"])
        result[:] /= self.buffer
        return result

Ancestors

Inherited members