Source code for radarx.fundamentals.attenuation

"""
Attenuation and Scattering Coefficients
=======================================

Functions related to absorption, scattering, and extinction for spherical particles.

References
----------
- Doviak and Zrnic (1993). Doppler Radar and Weather Observations.
- Battan (1973). Radar Observations of the Atmosphere.

.. autosummary::
   :nosignatures:
   :toctree: generated/

   {}
"""

__all__ = [
    "absorption_coefficient",
    "extinction_coefficient",
    "k_complex",
    "scattering_coefficient",
]

__doc__ = __doc__.format("\n   ".join(__all__))

import numpy as np


[docs] def k_complex(m): """ Complex dielectric factor used in scattering calculations. Parameters ---------- m : complex Complex refractive index of the medium. Returns ------- complex Dielectric factor. """ return (m**2 - 1) / (m**2 + 2)
[docs] def absorption_coefficient(diameter, wavelength, m): """ Absorption coefficient Qa for a spherical particle. Parameters ---------- diameter : float or array-like Particle diameter [m] wavelength : float Radar wavelength [m] m : complex Complex refractive index Returns ------- float or array-like Absorption coefficient (unitless) """ Km_im = np.imag(-1 * k_complex(m)) return (np.pi**2 * np.asarray(diameter) ** 3 / wavelength) * Km_im
[docs] def scattering_coefficient(diameter, wavelength, m): """ Scattering coefficient Qs for a spherical particle. Parameters ---------- diameter : float or array-like Particle diameter [m] wavelength : float Radar wavelength [m] m : complex Complex refractive index Returns ------- float or array-like Scattering coefficient (unitless) """ Km_abs = np.abs(k_complex(m)) return (2 * np.pi**5 * np.asarray(diameter) ** 6 / (3 * wavelength**4)) * ( Km_abs**2 )
[docs] def extinction_coefficient(diameter, wavelength, m): """ Extinction coefficient Qe (absorption + scattering). Parameters ---------- diameter : float or array-like Particle diameter [m] wavelength : float Radar wavelength [m] m : complex Complex refractive index Returns ------- float or array-like Extinction coefficient (unitless) """ Qa = absorption_coefficient(diameter, wavelength, m) Qs = scattering_coefficient(diameter, wavelength, m) return Qa + Qs