A C implementation of the Geometric Optic Radiative Transfer model as described by Ni et al. (1999). Models the BRDF and LIDAR returns of forests at optical wavelengths by calculating the viewed proportions of illuminated and shaded crown and ground, and their reflectance factors, for randomly located ellipsoids.
Version 2.0 of the model is a tidied version of the one that was originally used as the forward operator for data assimilation experiments described by Quaife et al. (2008). It is a broadly faithful implementation of the model described by Ni et al. (1999), but coupled to models for the leaf and soil optical properties.
Version 3.0 introduces the LIDAR routines following Ni-Meister et al. (2001). These changes have been made by Claude Opus 5.
- Calculates BRDFs for arbitrary view-illumination geometry and from 400nm to 2500nm.
- Calculates spectral albedo and absorption by the forest (e.g. fAPAR).
- Coupled to PROSPECT-D to (optionally) provide leaf optical properties.
- Soil reflectance using EOFs from Price (1990).
- Reads/writes LUTs of key intermediate variables to speed up some applications.
- Predicts full waveform lidar returns at nadir, following Ni-Meister et al. (2001), with the backscattering coefficients of Ni-Meister et al. (2018).
The following figure is a reproduction of Figure 5 from Ni et al. (1999) using the most recent version of the code.
Dr Tristan Quaife & Dr Wenge Ni-Meister
With the exception of the contents of the PROSPECT-D directory all code was written by Tristan based on the equations described in Ni et al. (1999) or, in the case of the KOpen probability routines, translated directly from Wenge's code.
Information about PROSPECT authorship can be found at http://teledetection.ipgp.jussieu.fr/prosail/
From version 2.0 onward, Claude Code has been used for various tasks, the most substantial of which is the addition of LIDAR predictions (see below).
usage: gortt [options] < angles.dat > output.dat
A list of [options] and brief description of the format of the angles.dat file can be found by typing:
gortt -u
By default GORT models the BRFs observed by a sensor viewing at the wavelengths and sun-sensor
geometry described in angles.dat. Scene elements (stand density, crown shape, leaf area index etc) are provided
via the command line options.
The following example calculates the reflectance for a forest with an LAI of 4.0 at wavelengths of 450nm, 600nm and 1000nm for a view zenith of 10 degrees, solar zenith of 30 degrees and relative azimuth of 20 degrees.
echo -en "1 4 450 600 800 1000\n10 0 30 20\n"|./gortt -LAI 4.0
-lidar predicts the lidar waveform of the canopy instead of its reflectance. The
instrument is assumed to be at nadir, so no view-illumination geometry is needed and
nothing is read from stdin; the normal output is suppressed.
./gortt -lidar -LAI 4.0
By default this writes the per-layer profile: the total nadir gap probability P(z),
its vertical derivative, the apparent foliage profile dlogP/dz and the canopy return
density, one row per canopy layer, with the ground return on the header line. Adding
-lidar_waveform instead bins the canopy and ground returns onto a uniform range grid
and convolves them with the transmitted pulse, which is what an instrument records:
./gortt -lidar -lidar_waveform -lidar_pulse 1.0 -lidar_binsize 0.15 -nlayers 60 -LAI 4.0
Each contribution is split linearly between the two range bins it falls between, so the
binning conserves the total returned energy and its mean height exactly, and the waveform
does not change shape with -lidar_binsize.
The lidar wavelength is set with -lidar_wl (default 1064nm) and feeds PROSPECT-D and
the Price soil model exactly as the reflectance calculation does. -nlayers sets the
number of canopy height layers the profile is reported on. It is a reporting grid only:
none of the quadratures in the model step with it, so the BRF does not move when it
changes.
The gap probabilities are the numerical core of the model, and the quadratures behind
them are independent of -nlayers. Three of the four are analytic over most of their
range; where one is not, the order is set by -nquad (default 1, already converged).
Two useful consequences:
- the between-crown gap probability at the ground has a closed form at every zenith
angle, and
gorttmatches it to 2.8e-14; gortt -Woutput is byte-identical for any two values of-nlayers.
figures/quadrature_convergence.py draws the evidence for both.
I have only ever tried installing on Linux platforms. As long as you have the standard development tools installed (specifically gcc, gfortran and make) it should just be a case of typing make. Note that currently the C bindings for the PROSPECT are throwing a number of warnings. As far as I can tell these are harmless.
Ni, W., Li, X., Woodcock, C. E., Roujean, J.-L., & Davis, R. E. (1997). Transmission of solar radiation in boreal conifer forests: Measurements and models. Journal of Geophysical Research, 102(D24), 29555-29566.
Ni, W., Li, X., Woodcock, C. E., Caetano, M. R., & Strahler, A. H. (1999). An analytical hybrid GORT model for bidirectional reflectance over discontinuous plant canopies. IEEE Transactions on Geoscience and Remote Sensing, 37(2), 987-999.
Ni-Meister, W., Jupp, D. L. B., & Dubayah, R. (2001). Modeling lidar waveforms in heterogeneous and discrete canopies. IEEE Transactions on Geoscience and Remote Sensing, 39(9), 1943-1958.
Ni-Meister, W., Yang, W., Lee, S., Strahler, A. H., & Zhao, F. (2018). Validating modeled lidar waveforms in forest canopies with airborne laser scanning data. Remote Sensing of Environment, 204, 229-243.
Price, J. C. (1990). On the information content of soil reflectance spectra. Remote Sensing of Environment, 33(2), 113-121.
Quaife, T., Lewis, P., De Kauwe, M., Williams, M., Law, B. E., Disney, M., & Bowyer, P. (2008). Assimilating canopy reflectance data into an ecosystem model with an Ensemble Kalman Filter. Remote Sensing of Environment, 112(4), 1347-1364.
