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
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
>