T-matrix interface

The Python interface is pyarts3.arts.tmatrix. available() reports whether the backend was built; extended_precision() identifies the selected variant. fixed computes a particle and evaluates its amplitude and phase matrices at one illumination/scattering geometry. fixed_batch computes one particle and evaluates a matrix of geometries, returning a list of fixed results in row order. Each row contains incident zenith, scattered zenith, incident azimuth, scattered azimuth, alpha and beta, all in degrees. random computes a randomly oriented size distribution, defaulting to an effectively monodisperse particle. These functions calculate individual optical results. Use ParticleHabit.tmatrix below to prepare a habit for scattering species.

Units and polarization

Angles are in degrees. For fixed particles and the default and power-law size distributions, use a common length unit for radius and wavelength. Metres give SI outputs. radius_ratio=1 selects volume-equivalent radius; other positive values select surface-area-equivalent radius for these shapes. shape=-1 means spheroid, with horizontal/rotational axis ratio; shape=-2 means cylinder, with diameter/length ratio.

The fixed result contains a complex 2 by 2 Jones amplitude matrix (length), a Muelmat phase matrix (length squared), and orientation-averaged extinction and scattering cross sections (length squared). The Jones matrix is not a Specmat, which represents a complex 4 by 4 Mueller matrix. The amplitude-to-Mueller conversion preserves the ARTS2 Stokes convention.

Random results contain MuelmatVector phase matrices in the scattering-plane basis at equally spaced scattering angles from 0 to 180 degrees. They are dimensionless, with the first element integrating to \(4\pi\) over solid angle. Multiply by scattering / (4*pi) to obtain differential scattering cross sections. The nonzero elements are F11, F22, F33, F44, symmetric F12, and antisymmetric F34, following the original solver convention.

Results remain valid after subsequent calls.

See T-matrix particle scattering for the physical definitions and normalization. Build configuration and implementation notes are in T-matrix implementation and validation.

Using particles as scattering species

ParticleHabit.tmatrix generates a totally randomly oriented habit in memory. Supply temperature and frequency grids, volume-equivalent diameters in metres, a complex refractive-index matrix with axes (temperature, frequency), and material density in kg/m³. The refractive index uses a nonnegative imaginary part. Shape and aspect-ratio conventions match the direct T-matrix interface.

For example, a single-size ice population can be set up as follows:

import numpy as np
import pyarts3 as pa

A = pa.arts
density = 917.0
habit = A.ParticleHabit.tmatrix(
    t_grid=[250.0, 280.0],
    f_grid=[229e9, 231e9],
    diameters=[200e-6],
    refractive_index=np.full((2, 2), 1.78 + 0.01j),
    density=density,
    aspect_ratio=1.5,
    angles=181,
)
number = A.ScatteringSpeciesProperty(
    "ice", A.ParticulateProperty.NumberDensity)
psd = A.MonodispersePSD(number, 250.0, 280.0)
ws = pa.Workspace()
ws.scat_species = [A.ScatteringHabit(
    habit, psd, density * np.pi / 6, 3.0)]

The constant refractive index above is illustrative; supply the material model appropriate to the calculation. Set the number property in the atmosphere to the particle number density in m⁻³. The explicit mass-size relation uses volume-equivalent diameter: mass equals density * pi / 6 * diameter**3. MonodispersePSD requires exactly one diameter; habits containing several sizes can be combined with the other ARTS PSDs.

The factory computes each particle size separately. ScatteringHabit then applies the atmospheric PSD and interpolates the stored optical properties; it does not rerun T-matrix during bulk-property evaluation. Choose the sampling grids to resolve changes in the optical properties. angles sets an equally spaced scattering-angle grid from 0 to 180 degrees.

The generated data already have physical cross-section units, including forward and backscatter matrices. No additional phase normalization is needed before passing the habit to ScatteringHabit. The factory describes totally random orientations; it does not generate aligned or azimuthally random particle populations.