XRTM
About
XRTM (X Radiative Transfer Model) is a plane-parallel multi-layer scalar/vector radiative transfer model with support for absorption, emission, and multiple scattering. 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 C/C++ and Fortran 77/90 interfaces while the core library is coded in C. XRTM is free and open source software and is licensed under the GNU General Public License.
Status
March 27, 2012
Another XRTM beta release (version 0.91) is available for download.
April 1, 2011
The first XRTM beta release (version 0.90) is available for download.
June 17, 2010
The XRTM source code will be available for download soon.
The following is a list of some XRTM's more interesting features:
- Implements several types of solvers: 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], a Padé Approximation/Adding method [11], Doubling/Adding [12-14], successive orders of scattering [15-17], second order scattering with an analytical integration in optical thickness [18-19], and single scattering.
- 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 [20] along with the Nakajima-Tanaka TMS correction [21].
- Solar and line-of-sight beams are modeled through spherical media, the so called pseudo-spherical approximation [22]
- A generalized BRDF formulation [23] 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 [24].
- 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, and Fortran 90 interfaces are provided. Interfaces are generated automatically from a single interface specification so other interfaces, such as IDL, Matlab, Python, or whatever, may easily be added.
- 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.
The source code can be downloaded for Linux/Unix/MacOS as xrtm-0.91.tar.gz or for Windows as xrtm-0.91.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 a simple example program that calls XRTM and uses some of its basic features. A example exist for each of the language interfaces supported.
For bugs, comments, or suggestions please email Greg: gregm@atmos.colostate.edu.
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.