Loading...
 

iLand News

Release iLand 2.1

Wednesday 23 of July, 2025

iLand Release 2.1: Forest Management, Deadwood, and More


This document summarizes the major changes and new features introduced in iLand version 2.1 since version 2.0 (July 2024). This release focuses on three key areas: a powerful new forest management library, enhanced deadwood dynamics, and various other improvements.

New Forest Management Library (abe-lib)


(c30858ae). See abe-library

A major addition in this release is the abe-lib JavaScript library, which provides a flexible and powerful way to define and execute complex forest management activities. This library is designed to be used within the ABE (Agent-Based Extension) module and allows for the creation of sophisticated silvicultural treatment programs (STPs).

Key Features

  • Modular Design: The library is organized into modules for different types of activities, including harvest, thinning, and planting.
  • Customizable Activities: Users can create custom activities by combining and parameterizing the provided functions.
  • Signal-Based Scheduling: Activities can be scheduled based on time, specific events, or signals emitted by other activities, allowing for dynamic and adaptive management plans.
  • Patch-Based Operations: The library includes powerful tools for selecting and managing patches of forest based on various criteria.

Getting Started


To use the new library, you can include it in your ABE scripts. Here are some examples of how to use abe-lib to create STPs:

Example: Clearcut and Plant

// Define a clearcut harvest activity
const ClearcutHarvest = lib.harvest.clearcut();

// Define a planting activity
const ClearCutPlanting = lib.planting.general({species: 'piab'});

// Create an STP that combines the two activities
lib.createSTP('Clearcut', ClearcutHarvest, ClearCutPlanting);


Example: Structured Thinning and Target DBH Harvest

// Define a selective thinning activity
const StructureThinning = lib.thinning.selectiveThinning({mode: 'dynamic'});

// Define a target DBH harvest activity
const StructureHarvest = lib.harvest.targetDBH({
dbhList: {
"fasy": 65, "frex": 60, "piab": 45, "quro": 75, "pisy": 45,
"lade": 65, "qupe": 75, "psme": 65, "abal": 45, "acps": 60, "pini": 45
}
});

// Create the STP
lib.createSTP('Structure', StructureThinning, StructureHarvest);

Available Modules

  • lib.harvest: Provides functions for various harvesting methods, including clearcut, femel, and target DBH harvest.
  • lib.thinning: Includes functions for selective thinning, such as negative selection and dynamic thinning.
  • lib.planting: Offers tools for planting specific species in selected areas.
  • lib.selectOptimalPatches: A powerful tool for selecting patches based on user-defined criteria, such as max_light.


For more detailed examples, please refer to the abe-lib/example-use.js file.

Deadwood Dynamics


(4a7d19a5) dead trees

This release introduces significant enhancements to the modeling of deadwood, allowing for individual tracking of dead trees in addition to the existing cohort/pool-based approach. This provides more detailed insights into the quantity, quality (decay class), dimension, and species of snags and downed stems, which is particularly useful for habitat quality assessments.

Trees enter the individual tracking system when their DBH at the time of death exceeds model.settings.soil.swdDBHSingle (cm). When such trees die, their biomass is separated into SWD pools (branches, foliage, fine- and coarse roots), while the stem biomass is tracked as a standing snag. If the cause of death is wind or management (e.g., cutting), the stem is immediately considered downed.

DeadTreeList Object


The DeadTreeList class in the ABE JavaScript API provides a powerful way to access, query, and analyze individual deadwood elements.

Example: Working with Deadwood

// Create a new DeadTreeList object
var deadwood = new DeadTreeList();

// Load snags from resource unit 5
var numLoaded = deadwood.loadFromRU(5, "Snags");

// Load downed woody debris (DWD) from resource unit 10
deadwood.loadFromRU(10, "DWD", true);

// Get the total count of deadwood items
console.log("Total deadwood count: " + deadwood.count);

// Filter for snags with a volume greater than 0.5
var remaining = deadwood.filter("type == 'snag' && volume > 0.5");

// Calculate the mean DBH of DWD
var meanDbhDWD = deadwood.mean("dbh", "type == 'dwd'");

// Calculate the total carbon in snags
var totalCarbonSnags = deadwood.sum("carbon", "type == 'snag'");

Snag Variables


The following variables are available for individual dead trees:

  • snag: true if the tree is a standing dead tree, false if downed (DWD).
  • species: Species (alpha-numeric code).
  • volume: Tree volume (m³) at the time of death (remains constant, set to 0 for decay class = 5).
  • decayClass: Class 1 to 5 (1 least decayed, 5 most decayed), based on the proportion of remaining stem biomass.
  • biomass: Remaining stem biomass (kg).
  • remaining: Proportion of biomass remaining relative to biomass at the time of death.
  • yearsStanding: Years standing since death.
  • yearsDowned: Number of years the stem has been on the ground. The total years since death is yearsStanding + yearsDowned.

Decay Classes


Each snag (standing or lying) is assigned a decay class (I to V) based on its remaining biomass. These classes are for output and analysis and do not directly affect model processes. Classification thresholds can be customized in the project file using the model.settings.soil.decayClassThresholds key (e.g., 0.2, 0.4, 0.7, 0.9 for classes V, IV, III, II, I respectively).

Carbon Tracking (Technical Details)

  • Snags: Snags are categorized into SWD (below threshold, other compartments) and individual snags. Decay occurs in both pools and individual snags, with total carbon in SWD calculated by summing both.
  • Downed Woody Debris (DWD): When an individual snag falls, all its biomass is transferred to the Yr soil pool, and its decay is subsequently handled by standard ICBM processes. Individual DWD snags still retain a "biomass" value, but this is solely for estimating DWD decay and decay classes, existing outside the closed carbon cycle.

New Outputs


New model outputs related to deadwood have been added, including:

  • Carbon Flow: The carbonflow output now includes information on snag decomposition and downed deadwood.
  • Development Stage: The devstage output now includes a deadwoodShare property.
  • SVD Indicators: The SVD indicator output now includes factors for large standing deadwood and downed deadwood.
  • User Interface: The user interface now includes an option to visualize standing and lying deadwood on the map.

GeoTIFF Support


(9afc3b57)

iLand now seamlessly integrates with GeoTIFF files for reading and writing most GIS data. This significantly enhances interoperability with other geospatial tools and workflows.

Key Features

  • Direct GeoTIFF Reading/Writing: iLand can now directly read and write GeoTIFF files, eliminating the need for intermediate conversions.
  • ESRI ASCII Compatibility: Continued support for ESRI ASCII grid files.
  • Automatic Data Type Detection: The SVD module has been extended to automatically detect data types where possible.
  • Improved NA Value Handling: Enhanced handling of NoData (NA) values compared to previous versions.

macOS Support


(909c1658)

iLand now officially supports macOS, including ARM-based M1/M2 processors, alongside Windows and Linux. This expands iLand's accessibility to a wider range of users and computing environments.

Key Changes

  • Cross-Platform Compatibility: iLand can now be built and run on macOS, leveraging Qt 6.8 for a consistent user experience.
  • Apple Silicon (ARM) Support: Optimized builds are available for Apple Silicon (M1/M2) processors, ensuring native performance.
  • Unified Development: The codebase has been adapted to support all three major operating systems, streamlining future development and maintenance.

Other Changes

  • Bark Beetle Module: The bark beetle module has been updated to consider the proximity of attractive deadwood when calculating infestation risk.
  • Fire Module: The fire module now includes a more detailed calculation of combustible fuel, including contributions from the forest floor and deadwood. The new calcCombustibleFuel function calculates the total combustible fuel (kg/ha), and sets the reference variables for forest floor and deadwood. This allows for a more realistic fire behavior simulation. (e2caeb6a)
  • User Interface: The user interface now includes an option to visualize standing and lying deadwood on the map.

Minor Changes and Bug Fixes

  • 709f9909: Fixed a libpng warning about incorrect sRGB profiles.
  • c7d60c3d: Fixed compilation errors after a merge.
  • 5053ea66: Revised error messages for the snapshot grid.
  • a1791e8a: Clarified an error message when reading climate data.
  • 33ce54e6: Improved the consistency of debug output documentation.
  • 8c494505: Removed "avgProbDensity" from the debug output for Establishment.
  • f415c3e0: Added a "Save as..." button in the SettingsDialog.
  • 0b1897bf: Fixed an issue with landscape setup without a stand grid.
  • 71bd1ed7: Clarified an error message when an environmentGrid value is not found.
  • 306a041f: Added a check for a valid species_index when loading a snapshot.
  • bff022b9: Updated ecoviz output to binary mode.
  • d883affb: Fixed a bug in the tending operation where local grids were not properly cleared.
  • 5edcd951: Introduced a "TreeNoHarvest" flag to spare habitat trees from management.
  • 2353448c: Fixed a crash in the settings dialog.
  • ca2faaed: Added an IBP indicator for Biodiversity Potential to the SVD Indicator output.
  • ce39b4a9: Corrected the model name in the startup text of ilandc.
  • 3382c3ff: Fixed a crash in SVDIndicatorOut when totalCarbon is enabled but the iLand carbon cycle is not.
  • befd40aa: Fixed a crash with chained signals in ABE.
  • 81c7972f: Fixed an error in the encoding of the direction of external seeds.
  • d4498b70: Updated FonStudio to build with Qt 6.8.
  • 46421a86: Fixed issues with chained signals in ABE.
  • 209a36b2: Added an option to view the log and STP of a specific stand.
  • cc8a62ba: Fixed an error in custom thinning.
  • 80c22016: Added the ability to include parameters when sending signals in ABE.
  • 909c1658: Added build capabilities for MacOS/ARM/M1-2020.
  • 06bdd3c9: Updated FonStudio to compile with Qt 6.8.
  • c30858ae: Added the abe-lib to the iLand resources.
  • c1bd76d5: Fixed a crash related to invalid XML project files.
  • e30dfaa3: Added carbon outputs for year 0.
  • 7e892396: Initialized the paint area with white to prevent visual artifacts.
  • 55a89ff7: Added the FreeImage library for Windows builds.
  • b6724ad9: Added a filter to the saplingdetails output.
  • aeb5ce1d: Turned off precompiled headers to resolve compilation errors.
  • 98856db8: Updated the reading of colors for species.
  • 9afc3b57: Added GeoTIFF support to iLand.
  • 40e421fd: Improved the performance of the establishment module.
  • 068cdad6: Improved the performance of external seed dispersal.
  • 5b0702c4: Improved the handling of exceptions in multi-threaded code.
  • 5a9e25c1: Fixed crashes with exceptions from GeoTIFF code.
  • 0d71b6fd: Added GeoTIFF support to iLand.
  • 598c34e6: Added the FreeImage library.
  • 4021c874: Updated the ecoviz output to PDB 3.0.
  • 794a7c5a: Fixed compiler warnings.
  • aa9cf570: Fixed file path selection in the settings editor.
  • 625e63ff: Minor fixes to the project description text wrap and labels.
  • 64d6c269: Updated iLandc messages to link to GitHub commits.