Phenology

The Phenology model simulates the developmental progression of a plant through a series of defined growth stages based on progression to completion. It provides a central mechanism for managing crop stage transitions in APSIM Next Generation (APSIM NG).

Overview

In APSIM NG, the Phenology model manages the simulation of plant development by organizing the crop lifecycle into distinct phases. Each phase corresponds to a physiological process or stage in the crop’s development (e.g., emergence, flowering, maturity). The transition between phases is typically governed by progression to completion. In general, the progression is influenced by factors such as thermal time, photoperiod, and vernalisation.

This model tracks the current phase, calculates progression based on progression to completion in current phase, and allows transitions to be triggered either naturally (via progression to completion) or manually (via SetToStage). The phenology model plays a pivotal role in coordinating developmental processes with other sub-models like canopy, roots, and biomass.

Inputs

The Phenology model requires:

  • ThermalTime: A child function representing accumulated heat units.
  • Phase list: A sequence of IPhase child components, each representing a growth phase. The phase order in the model tree determines the progression sequence.
  • Sowing Event: Triggers initialization of phenological stages in the event of PlantSowing.

Methodology

The phenology progression is triggered by several events, primarily the DoPhenology event which is called at each day.

Commencing:

  • Initializes the phenology model
  • Obtains the list of phases
  • Resets state variables.

PlantSowing:

  • Resets state variable
  • Initialise phenology development using the first phase

DoPhenology:

This is the core event that updates the phenological development at daily timestamp. The phenology development is only proceeded when plant is alive from Plant model.

At each timestep, the Phenology model:

  • Check whether ThermalTime is available and more than 0. Throw an error if not.
  • Increments progress in the current phase using a DoTimeStep method.
  • Emits events when a phase ends or begins (e.g., PhaseChanged, PlantEmerged).
  • Handles special phase transitions like GotoPhase that may jump between stages.
  • Updates accumulated thermal time and phenological stage number (Stage).
  • Manages rewinding or fast-forwarding when the stage is reset.

Harvesting:

  • Set the end stage as the final phase (maturity) when harvesting occurs.

PlantEnding:

  • Clears internal state when the simulation ends, ensuring no residual data persists.

StartOfDay:

  • Reset daily tracking flags for new day.

Public Methods

Method Description
SetToStage(newStage) Moves the crop to a specific development stage (e.g. flowering).

SetToStage(newStage)

Sets the crop’s development (phenological) stage to a specified point, either moving forward or backward through its growth cycle. This method is used internally and in management scripts to simulate events like harvest, defoliation, or skipping to flowering.

Summary

This function is used to manually set the crop to a particular stage of development — for example, jumping directly to flowering, or rewinding after a grazing event. It ensures that internal growth stages, thermal time, and event signals stay biologically and numerically consistent.

Key Use Cases

  • After grazing or cutting (e.g., regrowth after defoliation)
  • During management overrides (e.g., skipping to flowering)
  • At harvest (to force crop to final stage)
  • In GotoPhase logic to jump stages dynamically

Behavior

  • Rewind (go backward)

    If the target stage is earlier than the current stage:

    • Resets earlier phases
    • Subtracts relevant thermal time
    • Only specific phase types can be rewound (others will cause an error)
  • Fast-forward (go forward)

    If the target stage is later than the current stage:

    • Skips forward through phases
    • Adds appropriate thermal time
    • Raises relevant events like PlantEmerged and PhaseChanged

Events

Events Listened For

These are signals or notifications that the function listens for from other parts of the simulation:

Event Purpose
Commencing Initializes phenology and clears state
PlantSowing Resets phenology and starts at sowing stage
DoPhenology Core timestep to update phenological development
StartOfDay Clears temporary stage-tracking flags for new day
Harvesting Sets phenology directly to final phase (maturity)
PlantEnding Clears internal state when simulation ends

Events Raised to

Event Purpose
PhaseChanged Indicates a new phase has started
PlantEmerged Signals that the emergence phase has been completed
StageWasReset Signals a manual reset of stage via SetToStage()
PostPhenology Raised after daily phenological timestep completes

Properties

Configurable and Reportable Properties

No configurable properties are available for this function.

Read-Only Reportable Properties

Property Type Description
StageNames List List of stage names in phenology
StageCodes List List of numerical stage codes
AccumulatedTT double Thermal time accumulated since sowing
AccumulatedEmergedTT double Thermal time accumulated since emergence
Emerged bool Whether the plant has emerged from soil surface
Stage double One-based stage number
CurrentPhaseName string Name of the current phase
CurrentStageName string Name of the current stage
FractionInCurrentPhase double Proportion completed in current phase
CurrentPhase object The current phase object
Zadok double Current Zadok stage number. Return 0 if child function zadok is missing
currentPhaseNumberIncrementedByPhaseTimeStep bool True if phase increments stage number by phase time step
PlantIsAlive bool True if the parent plant is alive

User Interface

Phenology can be added as a child of a Plant node in the APSIM NG model tree. Right-click the plant node, select “Add Model…”, and search for Phenology in the Filter Box.

Practical Example

No practical example is available for this function.

See Also