XRTM (X Radiative Transfer Model) is a plane-parallel multi-layer scalar/vector radiative transfer model with support for absorption, emission, and multiple scattering with the option for solar and/or thermal sources. In addition to the radiances or Stokes vector elements, XRTM can analytically generate derivatives of these quantities with respect to model inputs. XRTM implements several different radiative transfer solvers, is coded with speed in mind, and provides interfaces for C, C++, Fortran 77, Fortran 90, IDL, and Python, while the core library is coded in C. XRTM is free and open source software and is licensed under the GNU General Public License.
January 31, 2020
Version 0.92 is available for download with many new features and IDL and Python interfaces.
The following is a list of some XRTM's more interesting features:
- Implements several types of solutions: an Eigenmatrix/Adding approach [1-4], the Eigenmatrix/BVP technique (a.k.a. Discrete Ordinate Method) [5-8], a variant of the Eigenmatrix/BVP Method with a matrix exponential formulation [9-10], Doubling/Adding [11-13], a Padé Approximation/Adding method [14-15], successive orders of scattering [16-18], second order scattering with an analytical integration in optical thickness [19-20], dedicated 2-stream [21-23], 4-stream , and 6-stream  solutions, and single scattering.
- Supports both solar and thermal sources in addition to top-of-atmosphere and bottom-of-atmosphere isotropic illumination. Both the classical and Green's function particular solutions for the solar source are implemented.
- Capable of simultaneously generating radiances and analytic derivatives of the radiances with respect to model inputs. Derivatives can be calculated with either forward accumulation (tangent linear) or backward accumulation (adjoint of the tangent linear). Any number of derivatives may be calculated in a single call.
- Scalar and vector transport are implemented as one code and in a manor in which scalar transport is as efficient as a dedicated scalar code.
- Delta-M scaling  along with the Nakajima-Tanaka TMS correction .
- Solar and line-of-sight beams are modeled through spherical media, the so called pseudo-spherical approximation .
- A generalized BRDF formulation  with several kernels while additional kernels are easily added.
- Results may be generated for any number of view angles and/or levels simultaneously.
- Intermediate quantities are saved as much as possible to minimize the calculations in subsequent calls with minor changes to inputs, such as changing the scattering properties in one layer of a multilayer atmosphere .
- The model is thread safe ... multiple instances of the model can be called safely in shared memory multi-processor environments.
- As much as possible, matrix computations have been isolated to BLAS calls, either directly or indirectly through LAPACK calls. This results in a considerable performance benefit when linked with hardware optimized BLAS libraries.
- The core model is implemented in C while C, C++, Fortran 77, Fortran 90, IDL and Python interfaces are provided. Interfaces are generated automatically from a single interface specification using bindx2 so other interfaces may easily be added. (Think Matlab or Julia.)
- The model compiles and has been tested on Linux/Unix, MacOS, and Windows (Cygwin, MinGW, or Visual Studio).
- Comes with an extensive test suite that tests all possible features, inputs, and usage scenarios.
See the following implementation table for supported options and outputs for each solution. See the documentation to decode the solution and option names.
The source code can be downloaded for Linux/Unix/MacOS as xrtm-0.92.tar.gz or for Windows as xrtm-0.92.zip.
Alternatively, the XRTM git repository may also be accesed on github.
See the user manual for documentation on how to compile the library and link it to your programs.
The XRTM manual can be read online as an HTML document or may be downloaded as a PDF. Alternatively, the XRTM distribution comes with both the HTML and PDF forms of this documentation in the "doc/" subdirectory.
The "examples/" subdirectory contains simple example programs that call XRTM and use some of its basic features. An example exist for each of the language interfaces supported.
For bugs, comments, or suggestions please email Greg McGarragh: email@example.com.
Bug reports are greatly appreciated! If you would like to report a bug please include sample code that reproduces the bug, along with the inputs and expected outputs.