Defining New Biomes
The biome concept
Biomes are large-scale ecosystems that occupy subcontinental to continental areas (or occur as complexes of smaller patches) and integrate characteristic plant and animal communities. They are shaped by macroclimate, soils, water availability, and disturbance regimes, and are generally recognizable by their vegetation physiognomy (dominant life forms and structure).
The biome concept has deep roots in both ecology and biogeography. Its foundations include:
- Precursors: early ideas such as formation (Grisebach, 1838), life zones (Merriam, 1894), and Schimper’s climatic template (1898).
- Climatic and edaphic zonality: macroclimate and soils as primary drivers of global vegetation patterns (Schimper, Dokuchaev, Walter).
- Physiognomy: vegetation form and structure as a unifying comparative tool across regions.
- Functional and evolutionary perspectives: biomes as dynamic entities assembled by ecological processes and evolutionary history, acting as “theatres of evolution” where species and traits are filtered and reshaped.
Biomes in the model
In the model, biomes are defined through a few driving elements:
- The dominant PFT
- The subdominant PFT
- The dominant woody type (may equal the dominant PFT)
- The dominant grassy type
Along with key environmental variables:
- GDD0 and GDD5
- Temperature of the coldest month (TCM)
- Absolute minimum temperature (Tmin)
Defining your own biomes
You can define any rule base that links PFTs to a biome. The only requirement is a PFT. First, define the biome types themselves: give each a name and a numeric value (useful for encoding outputs and plotting).
struct Savanna <: AbstractBiome
value::Int
Savanna() = new(6)
end
struct TropicalEvergreenForest <: AbstractBiome
value::Int
TropicalEvergreenForest() = new(7)
end
struct TemperateDeciduousForest <: AbstractBiome
value::Int
TemperateDeciduousForest() = new(8)
end
````
In the example below, we assign:
* Savanna when the dominant PFT is C4,
* Tropical Evergreen Forest if the PFT is TropicalEvergreen,
* Temperate Deciduous Forest for Temperate Deciduous.
Otherwise, we fall back to the default `Biome.assign_biome` logic.
julia function mybiomeassign(pft::AbstractPFT; subpft, wdom, gdd0, gdd5, tcm, tmin, pftlist, pftstates, gdom)
if get_characteristic(pft, :c4)
return Savanna()
elseif get_characteristic(pft, :name) == "TropicalEvergreen"
return TropicalEvergreenForest()
elseif get_characteristic(pft, :name) == "TemperateDeciduous"
return TemperateDeciduousForest()
else
# Fallback to the package's default biome assignment
return Biome.assign_biome(pft;
subpft=subpft, wdom=wdom,
gdd0=gdd0, gdd5=gdd5,
tcm=tcm, tmin=tmin,
pftlist=pftlist,
pftstates=pftstates, gdom=gdom)
endend ```