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.
- Initializes the phenology model
- Obtains the list of phases
- Resets state variables.
- Resets state variable
- Initialise phenology development using the first phase
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.
- Set the end stage as the final phase (maturity) when harvesting occurs.
- Clears internal state when the simulation ends, ensuring no residual data persists.
- 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
andPhaseChanged
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
- Source code: Phenology.cs on GitHub