Software for spatially-explicit simulation of forest dynamics

Light calculations

In order to calculate the amount of light a tree gets, SORTIE simulates taking a fisheye photograph over each tree to determine which parts of the sky are blocked by taller trees nearby. SORTIE determines how much light comes from different parts of the sky and takes this into account, so shading neighbors in different directions will have different impacts on the total amount of light a tree gets.

The fisheye photo can be taken at one of two positions - either at the top of the crown or at mid-crown. The major difference between the two is that when the photograph is taken at mid-crown, trees near the same height as the target tree will be included in the shading effects. This can make a big difference in even-age stands.

Sky Simulation

At the beginning of a run, if light behaviors are being used, the amount of light coming from each part of the sky for the plot's location is calculated. The sun's position in the sky is tracked throughout the growing season. Diffuse radiation, assumed to be isotropic (coming equally from all directions), is then added to the direct beam radiation. Below the minimum solar angle, it is assumed that no light comes from those portions of the sky because of the density of the surrounding forest. (It is wise not to set this angle too low - otherwise SORTIE must look very far away for shading neighbors.)

To determine the amount of sun coming from each portion of the sky, the sky is first divided into a hemispheric grid. For GLI calculations, the grid cells are equal-area segments of a user-settable resolution. For Sail Light calculations, the sky is divided into one-degree-sized grid cells. For each day in the growing season, the times of sunrise and sunset are calculated, and then the sun's position in the sky grid is tracked at 5-minute intervals throughout the day. (The equations are below.) At each solar position, the amount of direct beam radiation received from the sun at that position is calculated, taking into account atmospheric effects. Each sky segment keeps track of the total amount of direct beam radiation coming from it for the duration of the growing season.

The total amount of light in the sky is the amount of direct beam radiation plus the amount of diffuse radiation. Once the total amount of direct beam radiation is known, the amount of diffuse radiation is calculated accordingly and added equally to all portions of the sky. Each sky segment is then relativized to hold the percentage of total light coming from that segment.

Determining a tree's light index

For each timestep, SORTIE calculates the amount of light each tree receives by simulating a fisheye photograph. To "take" the photo, the model looks at the hemisphere of sky around and above a tree and determines which portions of it are blocked by neighboring trees. It then totals up how much light is left to reach the tree.

Only tree crowns block light in the model. Trunks do not shade. Because seedlings are modeled as sticks with no crowns, they don't shade either.

The first step in creating the simulated fisheye photo is to determine how far from the tree to search for shading neighbors. For GLI, this is done by comparing the height of the fisheye photo to the maximum possible tree height and determining how far away a tree of this height could be and still have its crown appear in the sky above the minimum solar angle. All trees within this search radius that are taller than the height of the fisheye photo (and thus can be "seen" by it) are added into the "photo." For Sail Light, the search distance is specified by the user.

To add a shading neighbor to the photo, the light behavior determines the amount and location of sky covered by its crown. In a GLI calculation, neighbor crowns are approximated as cylinders. In a Sail Light calculation, neighbor crowns are approximated as 2-D rectangles with a width equal to their crown diameter and a height equal to their crown height (or, as an added simplification, the behavior can assume the crowns of shading neighbors extend all the way to the ground).

The amount of radiation received from the portion of the sky blocked by the shading neighbor is multiplied by the light transmission coefficient for the neighbor's species. The effects of multiple neighbors blocking the same patch of sky are multiplicative.

Once all shading neighbors have been added to the fisheye photo, the amount of light that can still be seen from each region of the sky is totaled up into the appropriate index.

Sky Simulation Equations

All equations are from Iqbal, 1983.

At a given (solar) time, the sun's zenith angle is calculated by:

cos θ = sin δ sinφ + cos δ cos φ cos ω

and its azimuth angle is calculated by:

cos ψ = (sin α sin φ - sin δ )/cos α cos φ


  • θ = angle from zenith, in degrees
  • δ = solar declination, in degrees
  • φ = Plot Latitude, in decimal degrees parameter (from Plot)
  • α = the solar altitude (angle from horizon), in degrees
  • ω = the hour angle (solar time).

Azimuth here is south zero, east positive.

Solar declination is calculated by

δ = 0.006918 - 0.399912 cos Γ + 0.070257 sin Γ - 0.006758 cos 2Γ + 0.000907 sin 2Γ - 0.002697 cos 3Γ + 0.00148 sin 3Γ

where δ = solar declination in radians and Γ is the day angle, in radians.

The day angle is calculated by Γ = 2π (d - 1)/365 where Γ is the day angle in radians and d is the Julian day number (day of the year between 1 and 365).

So, once we finally have the azimuth and altitude angles for the sun's position in the sky, we can calculate the amount of direct beam radiation coming from it and add it to the appropriate grid cell. The direct beam radiation equation is

I = E0m*cos(θ )


  • I is the beam radiation
  • E0 is the earth's eccentricity
  • τ is the Clear Sky Transmission Coefficient parameter
  • m is the optical mass of the atmosphere
  • θ is the zenith angle of the sun.

Eccentricity is calculated by

E0 = 1.000110 + 0.034221 cos Γ + 0.001280 sin Γ + 0.000719 cos 2Γ + 0.000077 sin 2Γ

where Γ is the day angle (equation above).

Optical mass of the atmosphere is calculated by

m = sec(θ )

where θ is the zenith angle of the sun. SORTIE uses a numerical approximation method instead of the sec to correct at low altitudes.

This process is repeated for each day in the growing season. The growing season starts with the First Day of Growing Season parameter and ends with the Last Day of Growing Season parameter.

Snags in light calculations

Snags are standing dead trees (more in the tree life history stages topic). They can block light like live trees do. For SORTIE purposes, snag crowns are frozen in the shape they had when the tree died, but they transmit more and more light as they lose branches. SORTIE tracks a snag's age in order to replicate this decay. You define three snag age classes and a light transmission coefficient for each. For as long as a snag stands, it will block the light of neighboring trees, but to a lesser degree through time.

You don't have to include snags in light calculations. If you do not have any behaviors in your run that either create snags or directly work with them, then your run is classified as "snag-unaware" and snags will not be created. In this case, the snag parameters are not required. However, if your run is "snag-aware" and snags may be created, you must supply the snag light transmission parameters.