Stock

The Stock component in Apsim is taken from the Stock component in a CSIRO sister product to Apsim called AusFarm.
AusFarm is produced by the GrazPlan Decision Support Software group in CSIRO (Division of Plant Industry).
GrazPlan Official Website

The Ausfarm-Stock (Stock) component is used in APSIM to graze APSIM-Plant derived crops, such as Lucerne, Lablab and Wheat.

The Ausfarm-Supplement (Supplement) component can also be used as a supplementary feed source for stock.

Management operations can be carried out such as buying and selling of stock, supplementary feeding and moving stock to another paddock.

Currently the paddock sizes are fixed at one hectare.

To use Stock in an APSIM simulation, three companion APSIMUI components are required

·         StockScienceConverter,

·         StockHerbageConverter and

·         FarmwiseSequencer.

e.g.

When Supplement is used, its companion SupplementScienceConverter is also required. e.g.

All of these components are found in the APSIMUI Standard Toolbox in the Animals Folder. e.g.

A sample simulation (Wether_Lucerne_Supplement) of grazing wethers on lucerne with supplementary feeding of wheat is provided under theNew menu.

APSIMUI components

Stock

The Stockcomponent initialises with default properties and no animals.

StockScienceConverter

The StockScienceConverter initialises with the values specified in its properties grid. e.g.

StockHerbageConverter

The StockHerbageConverter initialises with the values specified in its properties grid. e.g.

FarmwiseSequencer

The FarmwiseSequencer initialises with properties specified in its INI file. These properties translate APSIM events to Ausfarm events and should only be altered after consultation with the SEG.

Supplement

Supplement initialises with the values specified in its properties grid. e.g.

The supplement store properties define the initial values of each supplement being used in the simulation. e.g.

SupplementScienceConverter

The SupplementScienceConverter initialises with values specified in its properties grid. e.g.

Pre-defined management rules of stock (cattle and sheep) and supplement feeding are found in the Stock folder under the Management folder in the Standard Toolbox. e.g.

Pre-defined cattle management rules for buying, selling and moving stock.

Pre-defined sheep management rules for buying and selling stock.

Pre-defined supplement management rules for buying, mixing and feeding stock.

Stock Component Description

See the “Stock Component Description” pdf (also comes with your AusFarm Installation
Drivers for the Stock Component

Environmental information

The Stock component implements alternative interfaces to obtain weather data;
I have only provided the APSIM-compatible interface here.

Property Type Units Permitted number of values Description
time record Exactly 1 Current time step in standard format.
latitude double deg Exactly 1 Latitude (south is negative).
daylength double hr Exactly 1 Day length including civil twilight.
maxt double oC Exactly 1 Maximum air temperature.
mint double oC Exactly 1 Minimum air temperature.
rain double mm Exactly 1 Precipitation in all forms other than snow.
wind double m/s Exactly 1 Average wind speed
waterlog double Zero or more Waterlogging index for each paddock.

Note: The first six of these drivers will cause no difficulty.

The wind driver is used in computing the energy requirement to maintain body temperature under cold conditions;
it can be set to (say) a constant 2.0 m/s if wind speed data are not available.

The waterlog driver is an index that describes the degree of waterlogging of the soil (which is modelled as affecting the time spent grazing);
it is optional and can be ignored in your context.

Paddock information

Property Type Units Permitted number of values Description
area double ha Zero or more Area of each paddock.
slope double deg Zero or more Slope of each paddock

In the Stock component, each group of animals is taken to reside in a paddock.

The list of valid paddock names is obtained by looking for the components that have the area property and then obtaining the names of these components, i.e. a paddock is defined as any entity with an area.
If no component in the simulation has the area property, then the Stock component sets itself up with a single “paddock” that has the null string for its name, an area of 1.0 ha and zero slope.

The slope values are used to compute the energy cost associated with movement.

The usual configuration is to have the paddock components/systems at the same level in the component tree as the Stock component.

Herbage information (plant2stock)
At each time step, the Stock component requests the plant2stock driving property. Each value of plant2stock is allocated to one of the paddocks by parsing the name of the component sending it. The herbage present in each paddock is then summarised before being used in the computations of animal intake. In the case where no paddocks have been identified, all the “plant” components that provide plant2stock are allocated to the null paddock.

Once the intake rates of all animals have been computed, the rates for all animals in a paddock are summed and then allocated between the components in that paddock that provided a value for the plant2stock driver. Each such component is then sent a remove_herbage event that contains the rate of herbage removal for that plant component.

The plant2stock driving property is a record with six fields:

Field Type Units Description
herbage array of records Mass and quality of the herbage on offer. The herbage is split into a number of pools that are distinguished by their DM digestibility; each of these pools is described by one element of the array. The fields of the sub-records are set out below.
propn_green double Proportion of the total herbage mass that is green
legume double Proportion of the total herbage mass that is legume. Usually 0.0 or 1.0
select_factor double Species-specific effect on the relationship between digestibility and voluntary intake. Typical values are 0.0 for C3 grasses and legumes and 0.16 for C4 grasses.
seed array of records Mass and quality of unripe and ripe seeds (elements 1 and 2, respectively). The fields of the sub-records are the same as for the herbage field.
seed_class array of integer4 “Equivalent digestibility class” for unripe and ripe seeds (elements 1 and 2, respectively). Valid values are 1-6 or 0, where 1 denotes that seeds will be selected at the same time as 80% digestible herbage, 2 corresponds to 70% herbage, etc. A zero value denotes that seeds are not grazed.

Both plant2stock:herbage and plant2stock:seed have array of records as a field.
The fields of the sub-records in them, are:

Field Type Units Description
dm double kg/ha Mass (dry matter basis) of the herbage or seed pool
dmd double Dry matter digestibility (0-1, not percentage)
cp_conc double kg/kg Crude protein concentration. Can be estimated as 6.25 x N
p_conc double kg/kg Phosphorus concentration. Can reasonably be estimated by assuming a fixed N:P ratio.
s_conc double kg/kg Sulphur concentration. Can reasonably be estimated by assuming a fixed N:S ratio.
prot_dg double kg/kg Protein degradability. In the absence of better information, can be estimated as dmd +0.10
ash_alk double mol/kg Ash alkalinity.
height_ratio double An index of the bulk density of the herbage. The height ratio for herbage should be computed as 100/(0.03 xBD), where BD is the herbage bulk density in g/m 3 . This value should be set to 1.0 for seed pools.

One way to obtain a distribution of herbage mass into DMD classes is given on page 32 of the technical paper on GrazFeed that can be found at

GrazFeed Technical Paper

 

Supplementary feed information (supp2stock)

At each time step, the Stock component requests the supp2stock driving property. This driving property is optional. The supp2stock property returns the amount and quality of supplementary feed that is present in each paddock. All animals resident in a paddock can access the corresponding quantity of supplementary feed (it is allocated between them in proportion to their maximum intake rate).  To provide this property, include the Supplement component in the simulation.

The supp2stock driving property is an array of records.  Each sub-record has the following fields:

Field Type Units Description
paddock string Name of a paddock
amount double kg Amount of supplementary feed present in the paddock
roughage boolean TRUE i.f.f. the feed is a roughage.
dm_content double kg/kg Dry matter content of the feed.
dmd double Dry matter digestibility of the feed (not including any portion that passes the gut undamaged).
me_content double MJ/kg Metabolizable energy content of the feed.
cp_conc double kg/kg Crude protein content of the feed.
prot_dg double kg/kg Protein degradability of the feed.
p_conc double kg/kg Phosphorus content of the feed.
s_conc double kg/kg Sulphur content of the feed.
ee_conc double kg/kg Ether-extractable content of the feed.
adip2cp double kg/kg Proportion of crude protein that is insoluble in acid detergent.
ash_alk double mol/kg Ash alkalinity of the feed.
max_passage double kg/kg Maximum proportion of the feed that will pass undamaged through the gut of ruminants.

DDML definitions

This is for the programmers:

plant2stock:

<type>
  <field name = "herbage" array="T">
    <element>
      <field name="dm" unit="kg/ha" kind="double"/>
      <field name="dmd" unit="-" kind="double"/>
      <field name="cp_conc" unit="kg/kg" kind="double"/>
      <field name="p_conc" unit="kg/kg" kind="double"/>
      <field name="s_conc" unit="kg/kg" kind="double"/>
      <field name="prot_dg" unit="kg/kg" kind="double"/>
      <field name="ash_alk" unit="mol/kg" kind="double"/>
      <field name="height_ratio" unit="-" kind="double"/>
    </element>
  </field>
  <field name="propn_green" unit="-" kind="double"/>
  <field name="legume" unit="-" kind="double"/>
  <field name="select_factor" unit="-" kind="double"/>
  <field name = "seed" array="T">
    <element>
      <field name="dm" unit="kg/ha" kind="double"/>
      <field name="dmd" unit="-" kind="double"/>
      <field name="cp_conc" unit="kg/kg" kind="double"/>
      <field name="p_conc" unit="kg/kg" kind="double"/>
      <field name="s_conc" unit="kg/kg" kind="double"/>
      <field name="prot_dg" unit="kg/kg" kind="double"/>
      <field name="ash_alk" unit="mol/kg" kind="double"/>
      <field name="height_ratio" unit="-" kind="double"/>
    </element>
  </field>
  <field name = "seed_class" unit="-" kind="integer4" array="T"/>
</type>

supp2stock:

<type array="T">
  <element>
    <field name="paddock" kind="string"/>
    <field name="amount" unit="kg" kind="double"/>
    <field name="roughage" kind="boolean"/>
    <field name="dm_content" unit="kg/kg" kind="double"/>
    <field name="dmd" unit="-" kind="double"/>'
    <field name="me_content" unit="MJ/kg" kind="double"/>
    <field name="cp_conc" unit="kg/kg" kind="double"/>
    <field name="prot_dg" unit="kg/kg" kind="double"/>
    <field name="p_conc" unit="kg/kg" kind="double"/>
    <field name="s_conc" unit="kg/kg" kind="double"/>
    <field name="ee_conc" unit="kg/kg" kind="double"/>
    <field name="adip2cp" unit="kg/kg" kind="double"/>
    <field name="ash_alk" unit="mol/kg" kind="double"/>
    <field name="max_passage" unit="kg/kg" kind="double"/>
  </element>
</type>