Mach module

author: young

The functions in this module calculate the rate at which machinery can be used, the cost incurred, and the timeliness of certain jobs.

The model has been designed to accommodate a range of machine options. Inputs that are dependent on machine size are grouped into their own input sheet, this section can be duplicated as many times as necessary to represent different machine sizes and/ or amount of machinery. The model user can then select which machine option they want in the analysis. The user inputs the desired machinery option in property input section. If the user wants to test the impact of different machine options they can alter the input using a saa sensitivity variable.

All machine option inputs (located in Universal.xlsx) are calibrated to represent cropping on a standard LMU. In GSW it is the loamy sand, with granite outcropping where Wandoo (white gum) is a common tree. To allow for the differences between the calibration and the actual LMUs there are LMU adjustment factors in Property.xlsx.

To reduce space and complexity the model currently only represents machinery activities for seeding and harvest (all other machinery usage is directly converted to a cost linked with another activity). Therefore the hours of machinery use outside of seeding and harvest are not tracked. Hence, machinery use outside of seeding and harvest does not incur any variable depreciation cost. To minimise this error, the rate of variable depreciation can be increased slightly.

Crops and pasture can be sown dry (i.e. seeding occurs before the opening rains that trigger the commencement of the growing season) or wet (seeding occurs after the opening rains) [MFMC]. Dry seeding can be useful in weather-years with a late start to the growing season, maximising the growing season and water utilisation because the crop can germinate as soon as the first rains come. Dry seeding begins on a date specified by the user, and can be performed until the opening rains. Wet seeding occurs a set number of days after the opening rains to allow time for weed germination and application of a knockdown spray. Wet seeding can only occur during a proportion of the time because some of the time it is either too dry or too wet to seed. The timeliness of sowing can have a large impact on crop yields. AFO accounts for this using a yield penalty (see yield penalty function for more info).

AFO also represents the ability to hire contract workers to complete harvest and seeding. This can be useful for large operations, farms with poor machinery or farms with poor labour availability.

AfoLogic.Mach.chem_app_cost_ha()

Chemical application cost per hectare.

The cost of spraying per hectare is calculated based on the time to spray a hectare (see spray_time_ha) and the cost to spray per hour. Spraying cost per hour includes tractor costs and sprayer costs. Tractor costs consist of fuel, oil, grease and r&m. Sprayer costs consist of just repairs and maintenance.

Typically, all spraying is done at the same speed and the rate of application is simply controlled by the chemical concentration in the spray. Thus, the cost of spraying is the same for all chemicals and on all LMUs.

AfoLogic.Mach.f_contract_harv_rate()

Grain harvested per hr by contractor (t/hr).

AfoLogic.Mach.f_contract_harvest_cost(r_vals)

Cost of contract harvest in each cashflow period ($/hr).

AfoLogic.Mach.f_contract_seed_cost(r_vals)

Contract seeding cost in each cashflow period. Currently, contract cost is the same for all lmus and crops.

AfoLogic.Mach.f_contractseeding_occurs()

This function just sets the period when contract seeding must occur (period when wet seeding begins). Contract seeding is not hooked up to yield penalty because if you’re going to hire someone you will hire them at the optimum time. Contract seeding is hooked up to poc so this param stops the model having late seeding (contract seeding must occur in the first seeding period).

AfoLogic.Mach.f_fix_dep()

Fixed depreciation on machinery

Fixed depreciation captures obsolescence costs and is incurred every year independent of equipment uses. It is simply calculated based on the total clearing sale value of equipment and the fixed rate of depreciation.

AfoLogic.Mach.f_harv_rate_period()

Harv rate (t/hr) in each harvest period for each crop.

Tonnes harvested per hour in each period for each crop is calculated from the harvest rate per hectare (see harv_time_ha) and the average crop yield. The rate is then set to 0 if a crop can not be harvested in a period. Note, harv_time_ha includes a factor that accounts for the time when grain is not being harvested due to moving paddocks or waiting for the chaser bin.

Harvesting can begin on different dates depending on the crop. For example, in Western Australia the harvest of canola often begins before cereals [Ros11]. To represent this AFO represents harvest in multiple periods determined by the user. Each crop has an inputted harvest start date which determines the harvest period for that crop. There is no penalty for late harvesting, however, to capture the timeliness of completion, harvest can only occur in the dedicated harvest periods.

AfoLogic.Mach.f_harvest_cost(r_vals)

Cost of harvest in each cashflow period ($/hr).

The cost of harvesting for one hour is the same for each crop. However, the tonnes harvested per hour varies for different crops resulting in a different harvest cost per tonne. Harvest cost includes fuel, oil, grease and r&m. Oil, grease repairs and maintenance are calculated as a factor of fuel cost.

AfoLogic.Mach.f_harvest_dep()

Average variable dep for harvesting $/hr.

Variable depreciation is use depreciation and is dependent on the number of hours the equipment is used. The harvest activity is represented in hours so the variable depreciation is simply the rate of depreciation per hour of seeding.

The rate of depreciation per hour is calculated based ‘typical’ scenario, which simplifies the calibration process. The user enters the percentage of depreciation incurred for harvesting x hectares of crop. This is converted to a dollar cost per hour based on the harvest rate and the machinery value.

AfoLogic.Mach.f_hay_making_cost()

Cost to make hay ($/t).

Typically, hay making is completed by contract workers and generally hay is not a large component of a farming system. Therefore, currently contract hay making is the only option represented in AFO. There is a cost for mowing ($/ha), baling ($/t) and carting ($/t).

Note: Currently it is assumed that hay is allocated into the same cashflow periods in all seasons.

AfoLogic.Mach.f_insurance(r_vals)

Cost of insurance for all machinery.

Machinery insurance cost is calculated as a percentage of the total machinery value. The cost is incurred on day 1.

AfoLogic.Mach.f_mach_params(params, r_vals)
AfoLogic.Mach.f_max_harv_hours()

Maximum hours that can be spent harvesting in a given period per crop gear compliment.

Grain moisture content can often exceed the accepted threshold during the harvesting period, particularly overnight and early in the morning due to higher humidity and overnight dew [Aba93]. Growers without drying facilities must wait until the grain moisture is acceptable resulting in a restricted number of harvest hours per day. To capture this the model has a user defined input that controls the maximum number of harvest hours per day per harvester.

AfoLogic.Mach.f_overall_seed_rate(r_vals)

Hectares of each crop that can be sown per day on each LMU.

Seeding rate per day is a product of the hours seeding can occur per day and the seeding rate per hectare. Seeding rate per hectare for each crop on each LMU is calculated by adjusting the LMU seeding rate (see f_seed_time_lmus) by a crop adjustment factor. Note, f_seed_time_lmus includes a factor that accounts for the time when seed is not being put in the ground due to moving paddocks or filling up.

AfoLogic.Mach.f_poc_grazing_days()

Grazing days provided by wet seeding activity (days/ha sown in each mach period/feed period).

This section represents the grazing achieved on crop paddocks before seeding since the previous node. The longer seeding is delayed the more grazing is achieved. The calculations also account for a gap between when pasture germinates (the pasture break) and when seeding can begin (the seeding break). Dry seeding doesn’t provide any grazing, so the calculations are only done using the wet seeding days. The calculations allow for destocking a certain number of days before seeding (termed the defer period) to allow the pasture leaf area to increase so that the knock down spray is effective.

Grazing days is the sum of the area grazed multiplied by the number of days of grazing. As such it is dependent on both the area that is being grazed and the duration of grazing. The number of grazing days is calculated for each seeding decision variable in each machinery period (p5). However, the number of grazing days must be calculated for each feed period (p6) so that the feed supply will align with the feed demand of the animals (that are calculated for feed periods).

The grazing days associated with the seeding decision variable (per hectare sown) is made up of two parts: A ‘rectangular’ component which represents the area being grazed each day from the break of season or the start of the most recent season period up until the destocking date for the beginning of the machine period. The rectangle component must consider the season period because poc only exists when a crop phase has been selected. In the prior season period if the model is waiting to make a landuse decision it can select a temporary pasture (a2) which provides feed. Therefore, to aviod double counting poc is only provided in the current season period. This doesnt effect the triangle component below because the triangle component is based on the current p5 which has to be in the current season period. A ‘triangle’ component which represents the grazing during the seeding period. The area grazed each day diminishes associated with destocking the area that is soon to be sown. For example, at the start of the period all area can be grazed but by the end of the period once all the area has been destocked no grazing can occur. These 2 components must then be allocated to the feed periods.

‘Rectangular’ component: The base of the rectangle is defined by the later of the break, the start of the season period and the start of the feed period through to the earlier of the end of the feed period or the start of the machine period.

Triangular component: The base of the triangle starts at the latter of the start of the feed period, the break of season and the start of the machinery period minus the defer period. It ends at the earlier of the end of the feed period and the end of the machinery period minus the defer period. This triangular component is then allocated to the feed periods and this is calculated using a height at the start and a height at the end to calculate an average height. The average ‘height’ is the average area grazed per day for that feed period, when multiplied by the number of days is the number of grazing days for that feed period. The height at the start is 100% of the area to be sown reduced by (1 / the length of the machinery period) for each day after the start of the machinery period. This reduction is to represent that the definition of the decision variable is 1 hectare sown, spread evenly over the seeding period, so if the seeding period is 10 days long one tenth of the area is sown each day. The end height is the area per day multiplied by the number of days prior to the end of the machinery period.

The above returns the number of grazing days provided by ‘1ha of seeding in each machine period spread across the duration of the machine period’, which can then just be multiplied by the rate of seeding and the number of days seeded in each period to get the total number of grazing days. This last step happens in pyomo.

The assumption is that; seeding is done evenly throughout a given period. In reality this is wrong e.g. if a period is 5 days long but the farmer only has to sow 20ha they will do it on the first day of the period not 4ha each day of the period. Therefore, the calculation slightly overestimates the amount of grazing achieved.

See poc section in google doc for diagram.

AfoLogic.Mach.f_seed_days()

Determines the max number of seeding days in each p5 period (basically just the length of p5). f_sow_prov in the phase module determines what crops/pastures can sown in each p5 period.

AfoLogic.Mach.f_seed_time_lmus()

Time taken to direct drill 1ha of the base crop on each lmu.

Seeding rate is calculated from speed travelled, seeder width and seeding efficiency (efficiency is to account for overlap, turning around and filling up time). The caluculation also includes a factor that accounts for the time when seed is not being put in the ground due to moving paddocks or filling up.

Seeding rate can vary for each LMU due to varying speeds associated with more or less force being required to pull the seeding equipment through the soil. The rate inputs are set for the base LMU and then adjusted by a user defined LMU factor.

AfoLogic.Mach.f_seeding_cost(r_vals)

Combines all the machinery costs required to seed 1 hectare of each crop and allocates the cost to a cashflow period.

Total machinery cost of seeding includes tractor costs (see tractor_cost_seeding) and seeder maintenance (see maint_cost_seeder).

AfoLogic.Mach.f_seeding_dep()

Average variable dep for seeding $/ha.

Variable depreciation is use depreciation and is dependent on the number of hours the equipment is used. Seeding depreciation is calculated based on the time taken to sow 1ha of each crop on each LMU and the rate of depreciation per hour of seeding.

The rate of depreciation per hour is calculated based ‘typical’ scenario, which simplifies the calibration process. The user enters the percentage of depreciation incurred for sowing x hectares of crop. This is converted to a dollar cost per hour based on the seeding rate and the machinery value.

AfoLogic.Mach.f_seeding_gear_clearing_value()
AfoLogic.Mach.f_sowing_timeliness_penalty(r_vals)

Calculates the biomass penalty in each mach period due to wet sowing timeliness- kg/ha/period/crop.

The timelines of sowing can have a large impact on crop biomass. AFO accounts for this using a biomass penalty.

Late sowing receives a biomass reduction because the crop has less time to mature (e.g. shorter growing season) and grain filling often occurs during hotter, drier conditions [HLT+19, TS92]. The user can specify the length of time after the beginning of wet seeding that no penalty applies, after that a penalty is applied. The biomass reduction is cumulative per day, so the longer sowing is delayed the larger the biomass reduction.

Biomass penalty reduces grain available to sell and reduces stubble production.

The assumption is that seeding is done evenly throughout a given period. In reality this is wrong e.g. if a period is 5 days long but the farmer only has to sow 20ha they will do it on the first day of the period not 4ha each day of the period. Therefore, the calculation overestimates the biomass penalty.

Note

There are also risks associated with dry sowing such as less effective weed control (i.e. crops germinate at the same time as the weeds so you miss out on a knock down spray opportunity), poor crop emergence (if opening rains are spasmodic patchy crop germination is possible and early crop vigour may be absent without adequate follow up rain) and increased chance of frost [MFMC]. These risks are represented in the model via the biomass inputs because dry sown crop are separate landuses.

AfoLogic.Mach.f_stubble_cost_ha()

Tractor cost to handle stubble for 1 ha.

Stubble handling cost per hectare includes tractor costs and rack costs. Tractor costs consist of fuel, oil, grease and r&m. Rack costs consist of just repairs and maintenance. This cost is adjusted for rotation phase and LMU cost in Phase.py.

AfoLogic.Mach.f_total_clearing_value()
AfoLogic.Mach.fert_app_cost_ha()

Fertiliser application cost part 1: Application cost per hectare.

The cost of applying fertilising is calculated in two parts. Part 1 is the cost per hectare for each fertiliser which represents the time taken spreading fertiliser in the paddock (see time_ha) and the cost of fertilising per hour (see spreader_cost_hr)

AfoLogic.Mach.fert_app_cost_t()

Fertiliser application cost part 2: time required per tonne.

The cost of applying fertilising is calculated in two parts. Part 2 is the cost per tonne for each fertiliser which represents the time taken driving to and from the paddock and filling up (see time_cubic) and the cost of fertilising per hour (see spreader_cost_hr)

AfoLogic.Mach.fuel_price()

Price of fuel including rebate.

AfoLogic.Mach.fuel_use_seeding()

Fuel use L/ha used by tractor to seed on each lmu.

AfoLogic.Mach.harv_time_ha()

Harvest rate for each crop (hr/ha).

Harvest rate is calculated as a product of harvesting speed (for the base crop), header width and field efficiency (overlap, turning and reduced speed when unloading). Harvest rate is assumed to be the same on all LMUs however, it does vary for different crops because harvest biomass impacts harvest speed.

The calculation includes a factor that accounts for the time when grain is not being harvested due to moving paddocks or waiting for the chaser bin.

Note: Has to be kept as a separate function because it is used in multiple places.

AfoLogic.Mach.harvest_gear_clearing_value()
AfoLogic.Mach.maint_cost_seeder()

Cost to repair and maintain air seeder ($/ha).

The seeder cost can vary depending on the LMU because different soil types wear out the cropping gear at different rates. The cost inputs are set for the base LMU and then adjusted by a user defined LMU factor.

AfoLogic.Mach.spray_time_ha()

Time taken to spray 1ha.

This is dependent on the sprayer width, speed and field efficiency (accounts for overlap, filling up time and turing).

AfoLogic.Mach.spreader_cost_hr()

Cost to spread each fertiliser for one hour.

Spreading cost per hour includes tractor costs and spreader costs. Tractor costs consist of fuel, oil, grease and r&m. Spreader costs consist of just repairs and maintenance.

Used to determine both fertiliser application cost per hour and per ha.

AfoLogic.Mach.sup_mach_cost()

Cost of machinery to feed 1t of each grain to sheep.

The task of feeding the supplement has a cost reflecting the fuel, and machine repairs and maintenance. This is a variable cost incurred for each tonne of supplement fed. The cost is calculated simply from inputs which state the litres required and repairs and maintenance cost to feed 1 tonne of each supplement.

Note

This method of calculating the cost is satisfactory, but it could be improved by linking the cost of feeding to the distance travelled which is controlled by the rate of feeding (g/hd), sheep numbers and the stocking rate (ie lower stocking rate means sheep are spread over a larger area). Rate of feeding could be calculated from the tonnes for feed fed (activity), the frequency of feeding (input) and the number of sheep (activity). Then somehow adjusted for the spread of sheep over the property using the stocking rate. Or maybe it could be calculated more like the labour required.

AfoLogic.Mach.time_cubic()

Time taken to fill up spreader and drive to and from paddock.

This represents the time driving to and from the paddock and filling up. This is dependent on the the density of the fertiliser (e.g. more time would be required filling and traveling to spread 1 tonne of a lower density fertiliser).

AfoLogic.Mach.time_ha()

Time taken to fertilise 1ha.

This is dependent on the spread width (e.g. lighter fertilisers have a narrower spread meaning more distance must be travelled to cover 1 ha in fertiliser)

AfoLogic.Mach.tractor_cost_seeding()

Cost of running a tractor for seeding.

Tractor costs includes fuel, oil, grease and r&m. Oil, grease, repairs and maintenance are calculated as a factor of fuel cost (see fuel used function for calculation of fuel used for seeding).