Slurp

1 The APSIM Slurp Model

The model has been developed using the Plant Modelling Framework (PMF) of Brown et al., 2014. This new framework provides a library of plant organ and process submodels that can be coupled, at runtime, to construct a model in much the same way that models can be coupled to construct a simulation.This means that dynamic composition of lower level process and organ classes(e.g.photosynthesis, leaf) into larger constructions(e.g.maize, wheat, sorghum) can be achieved by the model developer without additional coding.

SLURP: the Sound of a crop using water

This model has been built using the Plant Modelling Framework (PMF) of Brown et al., 2014 to provide a simple representation of crops. It is usefull for water and nitrogen balance studies where the focus is on soil processes and a very simple crop is adequate. The model does not predict crop growth, development or yields. It simply takes up water and nitrogen. .

SLURP has no phenology so the behaviour of the SLURP is the same throughout its ontology (with the exception of root depth being able to increase). SLURP consists of 2 organs:

  1. Leaf which ls represented with a Simpleleaf class and provides a Water uptake demand to the soil arbitrator.
  2. Root which extracts water and nitrogen from the soil for plant growth

Inclusion in APSIM simulations

A Slurp crop is included in a simulation the same as any other APSIM crop

  • The Slurp object needs to be dragged or copied from the Crop folder in the tool box into the field of your simulation.
  • It is then planted with a sowing rule
Slurp.Sow(cultivar: StaticCrop, population: 1, depth: 10, rowSpacing: 150);
  • Note that SLURP has no notion of population or rowSpacing but these parameters are required by the Sow method so filler values are provided
  • depth in the Sow arguement is the depth that the crop is sown at. While this has no effect on emergence in SLURP it sets the depth that the root system is initialised at. For static crops this depth should be set to the rooting depth that is expected as roots will not grow during the simulation

Altering Slurp properties during runs

In some cases users will wish to change properties of Slurp while the simulation is running. This can be done using a the set method in a manager script.

object LAIResetValue = leaflai;
zone.Set("Slurp.Leaf.LAIFunction.Value()", LAIResetValue);
object HeightResetValue = CoverToday * MaximumHeight;
zone.Set("Slurp.Leaf.HeightFunction.Value()", HeightResetValue);

The model is constructed from the following list of software components. Details of the implementation and model parameterisation are provided in the following sections.

1.1 Plant Model Components

Component Name Component Type
Phenology Models.PMF.Phen.Phenology
Arbitrator Models.PMF.OrganArbitrator
Root Models.PMF.Organs.Root
Leaf Models.PMF.Organs.SimpleLeaf
MortalityRate Models.Functions.Constant
SeedMortalityRate Models.Functions.Constant

1.2 Cultivars

Cultivar Name Alternative Name(s)
StaticCrop StaticCrop
StaticTree StaticTree
Pasture Pasture
Lucerne Lucerne

1.3 Child Components

1.3.1 Phenology

The phenological development is simulated as the progression through a series of developmental phases, each bound by distinct growth stage.

1.3.2 Arbitrator

The Arbitrator class determines the allocation of dry matter (DM) and Nitrogen between each of the organs in the crop model. Each organ can have up to three different pools of biomass:

  • Structural biomass which is essential for growth and remains within the organ once it is allocated there.
  • Metabolic biomass which generally remains within an organ but is able to be re allocated when the organ senesces and may be retranslocated when demand is high relative to supply.
  • Storage biomass which is partitioned to organs when supply is high relative to demand and is available for retranslocation to other organs whenever supply from uptake, fixation, or re allocation is lower than demand.

The process followed for biomass arbitration is shown in the figure below. Arbitration calculations are triggered by a series of events (shown below) that are raised every day. For these calculations, at each step the Arbitrator exchange information with each organ, so the basic computations of demand and supply are done at the organ level, using their specific parameters.

  1. doPotentialPlantGrowth. When this event occurs, each organ class executes code to determine their potential growth, biomass supplies and demands. In addition to demands for structural, non structural and metabolic biomass (DM and N) each organ may have the following biomass supplies:
  • Fixation supply. From photosynthesis (DM) or symbiotic fixation (N)
  • Uptake supply. Typically uptake of N from the soil by the roots but could also be uptake by other organs (eg foliage application of N).
  • Retranslocation supply. Storage biomass that may be moved from organs to meet demands of other organs.
  • Reallocation supply. Biomass that can be moved from senescing organs to meet the demands of other organs.
  1. doPotentialPlantPartitioning. On this event the Arbitrator first executes the DoDMSetup() method to gather the DM supplies and demands from each organ, these values are computed at the organ level. It then executes the DoPotentialDMAllocation() method which works out how much biomass each organ would be allocated assuming N supply is not limiting and sends these allocations to the organs. Each organ then uses their potential DM allocation to determine their N demand (how much N is needed to produce that much DM) and the arbitrator calls DoNSetup() to gather the N supplies and demands from each organ and begin N arbitration. Firstly DoNReallocation() is called to redistribute N that the plant has available from senescing organs. After this step any unmet N demand is considered as plant demand for N uptake from the soil (N Uptake Demand).
  2. doNutrientArbitration. When this event occurs, the soil arbitrator gets the N uptake demands from each plant (where multiple plants are growing in competition) and their potential uptake from the soil and determines how much of their demand that the soil is able to provide. This value is then passed back to each plant instance as their Nuptake and doNUptakeAllocation() is called to distribute this N between organs.
  3. doActualPlantPartitioning. On this event the arbitrator call DoNRetranslocation() and DoNFixation() to satisfy any unmet N demands from these sources. Finally, DoActualDMAllocation is called where DM allocations to each organ are reduced if the N allocation is insufficient to achieve the organs minimum N concentration and final allocations are sent to organs.

1.3.3 Root

The root model calculates root growth in terms of rooting depth, biomass accumulation and subsequent root length density in each soil layer.

1.3.4 Leaf

This organ is simulated using a SimpleLeaf organ type. It provides the core functions of intercepting radiation, producing biomass through photosynthesis, and determining the plant's transpiration demand. The model also calculates the growth, senescence, and detachment of leaves. SimpleLeaf does not distinguish leaf cohorts by age or position in the canopy.

Radiation interception and transpiration demand are computed by the MicroClimate model. This model takes into account competition between different plants when more than one is present in the simulation. The values of canopy Cover, LAI, and plant Height (as defined below) are passed daily by SimpleLeaf to the MicroClimate model. MicroClimate uses an implementation of the Beer Lambert equation to compute light interception and the Penman Monteith equation to calculate potential evapotranspiration. These values are then given back to SimpleLeaf which uses them to calculate photosynthesis and soil water demand.

SimpleLeaf has two options to define the canopy: the user can either supply a function describing LAI or a function describing canopy cover directly. From either of these functions SimpleLeaf can obtain the other property using the Beer Lambert equation with the specified value of extinction coefficient. The effect of growth rate on transpiration is captured by the Fractional Growth Rate (FRGR) function, which is passed to the MicroClimate model.

1.3.5 MortalityRate

A constant function (name=value)

1.3.6 SeedMortalityRate

A constant function (name=value)

2 Interface

2.1 Slurp

Properties (Outputs)

Name Description Units Type Settable?
Structure IStructure True
AboveGround IBiomass True
AboveGroundHarvestable IBiomass False
SowingData SowingParameters True
CultivarNames String False
SowingDate datetime True
Population /m2 double True
IsAlive boolean True
IsEmerged boolean False
IsReadyForHarvesting boolean False
DaysAfterSowing d int32 False
CoverGreen - double False
CoverTotal - double False
LAI m2/m2 double False
WaterUptake double False
NitrogenUptake double False

Links (Dependencies)

Name Type IsOptional?
summary ISummary False
clock IClock False
mortalityRate IFunction False
seedMortalityRate IFunction False
Phenology Phenology False
Arbitrator IArbitrator True
structure Structure True
Leaf ICanopy True
Root IRoot True

Events published

Name Type
Sowing Void Sowing (Object sender, EventArgs e)
PlantSowing Void PlantSowing (Object sender, SowingParameters e)
Harvesting Void Harvesting (Object sender, EventArgs e)
PostHarvesting Void PostHarvesting (Object sender, HarvestingParameters e)
PlantEnding Void PlantEnding (Object sender, EventArgs e)
Flowering Void Flowering (Object sender, EventArgs e)
StartPodDevelopment Void StartPodDevelopment (Object sender, EventArgs e)

Methods (callable from manager)

Name Description
Sow void Sow(String cultivar, double population, double depth, double rowSpacing, double maxCover, double budNumber, double rowConfig, double seeds, int32 tillering, double ftn)Sow the crop with the specified parameters.
Harvest void Harvest(boolean removeBiomassFromOrgans)Harvest the crop.
EndCrop void EndCrop()
ReducePopulation void ReducePopulation(double newPlantPopulation)Reduce the plant population.
AddCultivar void AddCultivar(Cultivar cultivar)Add a cultivar.

2.2 SowingParameters

Parameters which control how a plant is sown.

Properties (Outputs)

Name Description Units Type Settable?
Cultivar String True
Population /m2 double True
Seeds double True
Depth mm double True
RowSpacing mm double True
MaxCover double True
BudNumber double True
SkipType double True
SkipRow double True
SkipPlant double True
SkipDensityScale double True
TilleringMethod int32 True
FTN double True

2.3 Phenology

The phenological development is simulated as the progression through a series of developmental phases, each bound by distinct growth stage.

Properties (Outputs)

Name Description Units Type Settable?
Structure IStructure True
StageNames String False
StageCodes int32 False
AccumulatedTT double True
AccumulatedEmergedTT double True
Emerged boolean False
Stage double True
CurrentPhaseName String False
CurrentStageName String False
FractionInCurrentPhase double False
CurrentPhase IPhase False
Zadok double False

Links (Dependencies)

Name Type IsOptional?
plant Plant False
thermalTime IFunction False
zadok ZadokPMFWheat True
age Age True

Events published

Name Type
PhaseChanged Void PhaseChanged (Object sender, PhaseChangedType e)
StageWasReset Void StageWasReset (Object sender, StageSetType e)
PlantEmerged Void PlantEmerged (Object sender, EventArgs e)
PostPhenology Void PostPhenology (Object sender, EventArgs e)

Methods (callable from manager)

Name Description
IndexFromPhaseName int32 IndexFromPhaseName(String name)Look for a particular phase and return it's index or -1 if not found.
StartStagePhaseIndex int32 StartStagePhaseIndex(String stageName)Look for a particular stage and return it's index or -1 if not found.
EndStagePhaseIndex int32 EndStagePhaseIndex(String stageName)Look for a particular stage and return it's index or -1 if not found.
SetToEndStage void SetToEndStage()
SetToStage void SetToStage(String newStage)A function that resets phenology to a specified stage
SetToStage void SetToStage(double newStage)A function that resets phenology to a specified stage
SetAge void SetAge(double newAge)Allows setting of age if phenology has an age child
OnStartDayOf boolean OnStartDayOf(String stageName)A utility function to return true if the simulation is on the first day of the specified stage.
InPhase boolean InPhase(String phaseName)A utility function to return true if the simulation is currently in the specified phase.
Between boolean Between(int32 startPhaseIndex, int32 endPhaseIndex)A utility function to return true if the simulation is currently between the specified start and end stages.
Between boolean Between(String start, String end)A utility function to return true if the simulation is currently between the specified start and end stages.
Beyond boolean Beyond(String start)A utility function to return true if the simulation is at or past the specified startstage.
BeyondPhase boolean BeyondPhase(int32 phaseIndex)A utility function to return true if the simulation is at or past the specified startstage.
BeforePhase boolean BeforePhase(int32 phaseIndex)A utility function to return true if the simulation is before the specified phaseIndex.
PhaseStartingWith IPhase PhaseStartingWith(String start)A utility function to return the phenological phase that starts with the specified start stage name.
PhaseBetweenStages boolean PhaseBetweenStages(String startStage, String endStage, IPhase checkPhase)Helper function to check if a particular phase is present between specifice start and end stages.
ResetCampVernParams void ResetCampVernParams(FinalLeafNumberSet overRideFLNParams)Resets the Vrn expression parameters for the CAMP model
OnCreated void OnCreated()
SetEmergenceDate void SetEmergenceDate(String emergenceDate)Force emergence on the date called if emergence has not occurred already
SetGerminationDate void SetGerminationDate(String germinationDate)Force germination on the date called if germination has not occurred already
GetPhaseTable DataTable GetPhaseTable()

3 References

Brown, Hamish E., Huth, Neil I., Holzworth, Dean P., Teixeira, Edmar I., Zyskowski, Rob F., Hargreaves, John N. G., Moot, Derrick J., 2014. Plant Modelling Framework: Software for building and running crop models on the APSIM platform. Environmental Modelling and Software 62, 385-398.