Source code for rustmatrix.tmatrix_aux

"""Auxiliary constants and drop-shape relationships.

Direct port of ``pytmatrix.tmatrix_aux``. Wavelength presets (radar
bands), typical ``K_w^2`` factors, canned geometries for backscatter /
forward-scatter, and the Thurai/Pruppacher-Beard/Beard-Chuang drop
axis-ratio formulas.
"""

from __future__ import annotations

VERSION = "0.1.0"

# Typical radar wavelengths [mm] at different bands.
wl_S = 111.0
wl_C = 53.5
wl_X = 33.3
wl_Ku = 22.0
wl_Ka = 8.43
wl_W = 3.19

# Typical water dielectric factors |K_w|^2 at the above bands.
K_w_sqr = {
    wl_S: 0.93,
    wl_C: 0.93,
    wl_X: 0.93,
    wl_Ku: 0.93,
    wl_Ka: 0.92,
    wl_W: 0.75,
}

# Preset (thet0, thet, phi0, phi, alpha, beta) geometries.
geom_horiz_back = (90.0, 90.0, 0.0, 180.0, 0.0, 0.0)
geom_horiz_forw = (90.0, 90.0, 0.0, 0.0, 0.0, 0.0)
geom_vert_back = (0.0, 180.0, 0.0, 0.0, 0.0, 0.0)
geom_vert_forw = (180.0, 180.0, 0.0, 0.0, 0.0, 0.0)


# ---------- Drop shape relationships ----------
# All return vertical/horizontal axis ratio; pass 1/dsr(...) to Scatterer
# since Scatterer expects horizontal/vertical.


[docs] def dsr_thurai_2007(D_eq: float) -> float: """Thurai et al. (2007) equilibrium raindrop axis ratio (v/h). Parameters ---------- D_eq : float Equivalent (volume) diameter in mm. Returns ------- float Vertical / horizontal axis ratio (≤ 1 for flattened drops). Scatterer expects horizontal / vertical, so pass ``1.0 / dsr_thurai_2007(D)`` as ``axis_ratio``. References ---------- Thurai, M. et al. (2007). Drop shapes, model comparisons, and calculations of polarimetric radar parameters in rain. *J. Atmos. Oceanic Technol.*, 24, 1019–1032. """ if D_eq < 0.7: return 1.0 if D_eq < 1.5: return ( 1.173 - 0.5165 * D_eq + 0.4698 * D_eq ** 2 - 0.1317 * D_eq ** 3 - 8.5e-3 * D_eq ** 4 ) return ( 1.065 - 6.25e-2 * D_eq - 3.99e-3 * D_eq ** 2 + 7.66e-4 * D_eq ** 3 - 4.095e-5 * D_eq ** 4 )
[docs] def dsr_pb(D_eq: float) -> float: """Pruppacher & Beard linear drop-shape relation (v/h). Parameters ---------- D_eq : float Equivalent diameter in mm. Returns ------- float ``1.03 - 0.062 D``. Use ``1 / dsr_pb(D)`` as ``Scatterer.axis_ratio``. """ return 1.03 - 0.062 * D_eq
[docs] def dsr_bc(D_eq: float) -> float: """Beard & Chuang drop-shape relation (v/h). Parameters ---------- D_eq : float Equivalent diameter in mm. Returns ------- float Fourth-order polynomial fit to the Beard & Chuang (1987) equilibrium shapes. Use ``1 / dsr_bc(D)`` as ``Scatterer.axis_ratio``. """ return ( 1.0048 + 5.7e-04 * D_eq - 2.628e-02 * D_eq ** 2 + 3.682e-03 * D_eq ** 3 - 1.677e-04 * D_eq ** 4 )