Skip to main content
  1. Latest News/

Eradiate DISORT Release: v1.0.0

·4 mins

We are happy to announce the release of the first stable version of Eradiate’s new DISORT backend! It provides a new radiometric backend based on CDISORT, a C implementation of the well-established DISORT radiative transfer solver, allowing for much faster 1D radiative transfer computations with plane-parallel geometries.

Overview #

The new Eradiate DISORT backend uses CDISORT to provide a fast alternative to Eradiate’s Monte Carlo ray tracing backend for 1D plane-parallel geometries. CDISORT is a C rewrite of the original DISORT algorithm, written in Fortran, with important updates required to perform well when dealing with peaked phase functions such as the ones of clouds. The new backend provides a translation from the Eradiate configuration to CDISORT, orchestrates CDISORT runs, and formats the output in a convenient xarray DataTree. Within backend limitations (feature parity with the Monte Carlo backend is not complete yet), the output the DISORT backend should match Monte Carlo ray tracing results.

If you just want to get into it, check the documentation and the source code repository. For more detail, continue reading.

The motivation #

While we originally hadn’t foreseen the release of any other radiometric backend than Mitsuba, we ended up changing our mind after starting supporting the generation of large lookup tables, in particular for atmospheric correction of surface reflectance products of hyperspectral instruments. Such computations are heavy and, even given the strong simplifying assumptions, end up being slow with a general-purpose ray tracing engine such as Eradiate’s Mitsuba-based kernel.

After pondering our options, it turned out that the most efficient route was to provide integration of a 1D radiative transfer solver in Eradiate. We selected DISORT for its wide availability, and the many years of feedback and fixes it had benefited from; and more precisely, the C implementation shipped as part of libRadtran’s open release, CDISORT,1 which received additions that make it suitable for scattering in a cloudy atmosphere.

Licensing issues #

One major issue we had to work around is related to licensing: being part of libRadtran, CDISORT is released under the terms of the GNU General Public License (GPLv2), which is stronger than Eradiate’s LGPLv3 and notably prevents linking. In other words, Eradiate cannot depend on CDISORT.

To comply with the license terms, we therefore built a software stack that uses the reverse approach: our DISORT backend depends on Eradiate, which is possible by Eradiate’s license terms. The resulting stack is composed of the following elements:

  1. A set of bindings that expose CDISORT’s internals to Python and implements interoperability with NumPy and Dr.Jit. This is the nanodisort2 project.
  2. Eradiate, which we updated to serve data CDISORT needs to compute scattering.
  3. A backend package, which interfaces nanodisort and Eradiate, providing a user interface similar to Eradiate with its main radiometric kernel. This is the eradiate-disort3 project.

Nanodisort provides an intentionally minimal interface to CDISORT, with the intent of offloading any higher-level abstraction to eradiate-disort and the core of Eradiate.

Eradiate DISORT backend package dependencies and licensing
Eradiate DISORT backend package dependencies and licensing.

How does it work? #

Eradiate integration should be as painless as possible. We therefore published eradiate-disort to PyPI, and deployed a documentation website that includes both a user reference and progressive code examples demonstrating usage. We tried our best to make easy the porting of 1D simulations created for the Monte Carlo kernel to this backend.

What’s next? #

This is a first version: we plan to address as many of the limitations the backend currently has as we can in the future, e.g. by adding support for the pseudo-spherical correction or non-diffuse surface reflection.

Performance is also limited by the pre-processing, which happens outside of the radiometric backend: we are now in the process of improving this, both with better numerical methods and optimized implementation.

Finally, this first stable release demonstrates the utility of a backend architecture for Eradiate: we plan to formally support this in the medium term.


  1. Buras, R., Dowling, T. & Emde, C. New secondary-scattering correction in DISORT with increased efficiency for forward scattering. Journal of Quantitative Spectroscopy and Radiative Transfer 112, 2028–2034 (2011). DOI: 10.1016/j.jqsrt.2011.03.019 ↩︎

  2. github:eradiate/nanodisort ↩︎

  3. github:eradiate/eradiate-disort ↩︎