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.