Skip to content

AcresFieldWorkModel.h#

Acres/Source/Acres/AcresFieldWorkModel.h Generated

What field work leaves on the ground: the visible surface of tillage, drilling, spraying, tyres and the backhoe, from the same physical state the implement and tyre models use. Pure C++ in SI units, no Unreal types, so Tools/ImplementModel builds and tests it.

The farm runtime (AcresFarmRuntime.cpp) stores these results per 25 cm cell when a tool passes, the soil visuals (AcresSoilVisuals.cpp) turn them into relief (mesh vertices every 6.25 cm) and the field-work material (Tools/ACRE/Tools/make_field_work_materials.py) into per-pixel detail. The surface shape functions (TinePattern, DiscPattern, DrillPattern, TreadPattern, ClodHeight) are mirrored line for line in that material's HLSL, so the mesh and the shading agree; change both together.

Models and sources: - Clod size: fragmentation is finest at the optimum water content for tillage, the inflection point of the water retention curve (Dexter and Bird 2001, Soil Tillage Res. 57: 203-212), and coarsens on both sides, more in clay-rich soil (Ojeniyi and Dexter 1979); above the plastic limit wet fines shear into plastic slabs instead of crumbling. Faster tools shatter finer (kinetic energy of the soil wedge). - Oriented relief: a tine lifts a crescent of soil to both sides of its slot (Godwin and Spoor 1977); the furrow stays open in cohesive, plastic soil and collapses in dry friable soil. Disc gangs throw soil sideways and the packer roller levels it, leaving ring grooves as deep as the roller's sinkage. - Random roughness about 0.4 x the mean clod diameter (Zobeck and Onstad 1987 give chisel 25 mm, disc 19 mm, field cultivator 15 mm after one pass in a friable soil). - Bulking: the tilled layer rises by depth x (firm / loose dry density - 1) (mass conservation). - Soil colour: reflectance falls exponentially with water content (Lobell and Asner 2002, SSSAJ 66: 722-727); freshly turned moist soil is darker and dries at the potential evaporation rate. - Spray film: the applied volume per area, evaporating at the potential rate. - Tyre prints: R-1W chevron lugs at a pitch of about 0.14 x the tyre diameter, printed as deep as the sinkage allows up to the lug height. - Spoil: dug soil bulks by the swell of loose over in-place density and settles into a cone at its angle of repose.

TillageOptimumTheta#

Optimum water content for tillage of a soil library class (Dexter and Bird 2001): the inflection point of the van Genuchten curve, theta_r + (theta_s - theta_r) (1 + 1/m)^-m with m = 1 - 1/n.

Argument Description
ClassIndex Soil library index (AcresSoilModel.h, clamped).

Returns: Water content, m3/m3.

double TillageOptimumTheta(int ClassIndex);

TillageClodDiameterM#

Mean clod diameter after a tillage pass.

d = d_opt (1 + k D^2 (0.5 + 2 clay)) (1 + 1.5 max(0, LI)) (2.2 / v)^0.2 x pattern factor, with d_opt = 8 mm + 40 mm x clay fraction, D = (theta - theta_opt) / (theta_s - theta_r), k = 25 on the dry side and 15 on the wet side, LI the liquidity index and v the speed (at least 0.5 m/s). Discs cut and mix: 0.7 x; spoil lumps: 1.8 x. Clamped to 5-150 mm.

Argument Description
Pattern Tool pattern.
SpeedMps Tool speed, m/s.
ClassIndex Soil library index.
Theta Water content of the worked layer, m3/m3.

Returns: Diameter, m.

double TillageClodDiameterM(ETillagePattern Pattern, double SpeedMps, int ClassIndex, double Theta);

TillageSurface#

Visible surface of a tillage pass (see the file comment for the models).

Argument Description
Pattern Tool pattern.
DepthM Working depth, m.
SpeedMps Tool speed, m/s.
ClassIndex Soil library index.
Theta Water content of the worked layer, m3/m3.
DensityMgM3 Dry density before the pass, Mg/m3 (<= 0: the class's firm density).

Returns: The surface; all zero for ETillagePattern::None or a depth under 1 cm.

FTillageSurface TillageSurface(ETillagePattern Pattern, double DepthM, double SpeedMps, int ClassIndex, double Theta, double DensityMgM3 = 0);

SoilReflectanceRatio#

Relative soil reflectance at an effective saturation (Lobell and Asner 2002 exponential form): 0.45 + 0.55 exp(-2.5 Se), 1 when dry, about 0.5 when saturated.

Argument Description
Saturation Effective saturation, 0..1.

Returns: Reflectance relative to the dry soil, 0.45..1.

double SoilReflectanceRatio(double Saturation);

TurnedSoilSaturation#

Saturation of freshly turned soil's surface after it has been exposed for ElapsedS: the top 10 mm loses its water above the surrounding surface's at the potential evaporation rate.

Argument Description
TurnedSaturation Saturation when turned, 0..1.
SurfaceSaturation Saturation of the undisturbed surface now, 0..1 (the floor it dries to).
ThetaRange theta_s - theta_r of the class, m3/m3.
ElapsedS Time since the pass, s (farm time).
EvapMmDay Potential evaporation, mm/day.

Returns: Saturation now, 0..1.

double TurnedSoilSaturation(double TurnedSaturation, double SurfaceSaturation, double ThetaRange, double ElapsedS, double EvapMmDay);

SprayFilmM#

Spray film left on the surface, m of liquid: the applied depth minus the potential evaporation since.

Argument Description
AppliedM3M2 Applied volume per area, m3/m2 (150 L/ha = 1.5e-5).
ElapsedS Time since spraying, s (farm time).
EvapMmDay Potential evaporation, mm/day.

Returns: Film thickness, m (>= 0).

double SprayFilmM(double AppliedM3M2, double ElapsedS, double EvapMmDay);

EmergenceShare#

Share of the drilled rows covered by seedlings: 0 until 60 deg C day after sowing (soybean and small grains emerge at about 60-80 deg C day above a 10 deg C base), then rising linearly to 1 at 400 deg C day (a closed narrow row).

Argument Description
GddSinceSowing Degree days accumulated since the drill passed, deg C day.

Returns: 0..1.

double EmergenceShare(double GddSinceSowing);

TreadPitchM#

Lug pitch of an R-1W agricultural tyre (and of a utility tyre's tread blocks) along the circumference, m: about 0.14 x the diameter (a 1.8 m tractor tyre has about 23 chevron lugs a side).

double TreadPitchM(double TyreDiameterM);

TreadPrintDepthM#

Depth of the tread print in a rut, m: the sinkage minus the elastic rebound, up to the lug height (4 cm on an R-1W tyre, 2.5 cm below 1 m diameter), and nothing below 5 mm of sinkage.

double TreadPrintDepthM(double SinkageM, double TyreDiameterM);

SpoilVolumeM3#

Volume of spoil from dug soil, m3: the dug mass at the class's loose wet bulk density (swell over in-place soil).

Argument Description
DugKg Soil dug, kg (moist mass).
ClassIndex Soil library index.
Theta Water content, m3/m3.

Returns: Loose volume, m3.

double SpoilVolumeM3(double DugKg, int ClassIndex, double Theta);

SpoilConeRadiusM#

Base radius of a spoil cone of Volume at its angle of repose, m: r = (3 V / (pi tan phi))^(1/3).

Argument Description
VolumeM3 Loose volume, m3.
ReposeRad Angle of repose, rad (about 35 deg for moist loose soil).

Returns: Radius, m.

double SpoilConeRadiusM(double VolumeM3, double ReposeRad = 0.6108652381980153);

TinePattern#

Tine furrow height at a lateral distance from the nearest tine, m, relative to the tilled mean: a rounded V slot as wide as the failure crescent (tine width + 1.5 x depth, at most the spacing), ridges between.

Argument Description
DistanceM Lateral distance to the nearest tine centre, m (0..spacing / 2).
SpacingM Tine spacing across the implement, m.
RidgeM Ridge crest to furrow bottom, m.
CrescentM Width of the disturbed crescent at the surface, m.

Returns: Height, m (-0.6 RidgeM in the slot, +0.4 RidgeM on the crest).

double TinePattern(double DistanceM, double SpacingM, double RidgeM, double CrescentM);

DiscPattern#

Disc harrow surface at a lateral distance from the nearest packer roller ring, m: a groove GrooveM deep and a ring width wide pressed into the levelled tilth.

Argument Description
RingDistanceM Lateral distance to the nearest ring centre, m.
RingWidthM Ring width, m.
GrooveM Groove depth (roller sinkage), m.

Returns: Height, m (<= 0).

double DiscPattern(double RingDistanceM, double RingWidthM, double GrooveM);

DrillPattern#

Drill row surface at a lateral distance from the row centre, m: the double-disc opener's slot (2 cm wide, closed to a third of the sowing depth) in the press wheel's band, which is pressed down by the wheel's sinkage.

Argument Description
RowDistanceM Lateral distance to the row centre, m.
PressWidthM Press wheel width, m.
PressSinkageM Press wheel sinkage, m.
SowingDepthM Opener depth, m.

Returns: Height, m (<= 0).

double DrillPattern(double RowDistanceM, double PressWidthM, double PressSinkageM, double SowingDepthM);

TreadPattern#

Tread print of a chevron tyre in its rut, m.

Argument Description
LateralM Distance from the tyre centre line, m (signed).
AlongM Distance along the travel direction, m (any origin).
WidthM Tyre width, m.
PitchM Lug pitch, m.
PrintM Print depth, m.

Returns: Height, m (<= 0: -PrintM in a lug print, 0 between lugs and outside the tyre).

double TreadPattern(double LateralM, double AlongM, double WidthM, double PitchM, double PrintM);

ClodHeight#

Height of the clod field at a world point, m: rounded clods on a jittered grid with the given mean diameter (Voronoi bumps; the same hash in the material), zero mean over an area, amplitude about the random roughness.

Argument Description
ClodM Mean clod diameter, m.
RoughnessM Random roughness, m.

Returns: Height, m.

double ClodHeight(double XM, double YM, double ClodM, double RoughnessM);

ETillagePattern#

enum class ETillagePattern : int

Surface pattern a tillage pass leaves.

Value Description
None Untouched.
Tine Chisel plow or field cultivator: furrows at tine spacing with ridges between.
Disc Disc harrow with packer roller: levelled cloddy surface with roller ring grooves.
Spoil Backhoe spoil: loose heaped soil.

FTillageSurface#

struct FTillageSurface

The visible seedbed after a tillage pass.

Name Type Unit Default Description
RidgeM double m 0 Ridge crest to furrow bottom (tines) or residual ridge height (disc), m.
ClodM double m 0 Mean clod diameter, m.
RoughnessM double m 0 Random roughness (standard deviation of heights), m.
RiseM double m 0 Bulking rise of the tilled layer, m.
Saturation double 0 Effective saturation of the turned soil, 0..1 (sets how dark it looks).
PlasticShare double 0 0..1, how far the soil is into its plastic range (smeared, shiny furrow walls at 1).