diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f83a1c5fda67604cae4b9fb4ab401035a1ef555..83e12b936bec4a2582675551b2d56c38c2c58a9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,13 +12,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.6.0] - in planning -*Plan: integrate AquaCrop (#79), set up first experiments* +*Plan: decouple CairoMakie (#81), fix & test ALMaSS, set up first experiments* --- -## [0.5.5] - unreleased +## [0.5.5] - 09-08-2024 -*Plan: basic farm model (#16), decouple CairoMakie (#81)* +**This point release implements the first basic farm model** + +### Added + +- basic farm model that assigns a crop rotation to each field, sowing and harvesting when appropriate + +- new parameters: `farm.farmmodel`, `farm.setaside`, `farm.fieldoutfreq` + +- visualisation of cropped area and crop growth over time + +- `farm.setaside` setting to configure what proportion of land farmers let lie fallow + +- `isharvestable()` function for `FarmPlot`s + +- `@areaof` macro to calculate the area of a given number of landscape pixels + +- `data/farm/standard_gross_margins.csv` from KTBL data + +### Changed + +- expanded & adapted general crop data and crop growth curve tables + +### Fixed + +- bug fixes in the ALMaSS crop model ## [0.5.4] - 08-08-2024 diff --git a/Project.toml b/Project.toml index 131a5138c023ccfa4197c963415e0bba04a32288..b34a8e3bb74ffe2a863e273a054352ef359724ac 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "Persefone" uuid = "039acd1d-2a07-4b33-b082-83a1ff0fd136" authors = ["Daniel Vedder <daniel.vedder@idiv.de>"] -version = "0.5.4" +version = "0.5.5" [deps] ArgParse = "c7e460c6-2fb9-53a9-8c5b-16f535851c63" diff --git a/data/crops/almass/almass_crop_growth_curves.csv b/data/crops/almass/almass_crop_growth_curves.csv index 9fbba748596a09735a3b25a00e909def1e375c71..7896a334f06c0d4ccf338fd422b365c3b1cade52 100644 --- a/data/crops/almass/almass_crop_growth_curves.csv +++ b/data/crops/almass/almass_crop_growth_curves.csv @@ -1,650 +1,650 @@ curve_id,crop_name,nutrient_status,growth_phase,point_type,GDD,LAI_total,LAI_green,height -1,spring barley,high,janfirst,slope,99999.0,0.0,0.0,0.0 -1,spring barley,high,sow,start,-1.0,0.0,0.0,0.0 -1,spring barley,high,sow,slope,83.0,0.005466667,0.005466667,0.066666667 -1,spring barley,high,sow,slope,158.0,0.01,0.009866667,0.066666667 -1,spring barley,high,sow,slope,233.0,0.018266667,0.0184,0.106666667 -1,spring barley,high,sow,slope,308.0,0.033378378,0.033378378,0.081081081 -1,spring barley,high,sow,slope,382.0,0.0,0.0,0.060773481 -1,spring barley,high,sow,slope,563.0,0.0,0.0,0.154639175 -1,spring barley,high,sow,slope,660.0,0.0,0.0,0.066666667 -1,spring barley,high,sow,slope,675.0,0.0,0.0,0.138095238 -1,spring barley,high,sow,slope,885.0,0.0,-0.016233766,-0.029220779 -1,spring barley,high,sow,slope,1193.0,0.0,0.0,-0.035830619 -1,spring barley,high,sow,slope,1500.0,0.0,0.0,-0.000609143 -1,spring barley,high,marchfirst,slope,99999.0,0.0,0.0,0.0 -1,spring barley,high,harvest1,start,-1.0,0.3,0.0,10.0 -1,spring barley,high,harvest2,slope,99999.0,0.0,0.0,0.0 -101,spring barley,low,janfirst,slope,99999.0,0.0,0.0,0.0 -101,spring barley,low,sow,start,-1.0,0.0,0.0,0.0 -101,spring barley,low,sow,slope,83.0,0.003333333,0.003333333,0.066666667 -101,spring barley,low,sow,slope,158.0,0.006,0.006,0.066666667 -101,spring barley,low,sow,slope,233.0,0.010933333,0.010933333,0.194666667 -101,spring barley,low,sow,slope,308.0,0.009932886,0.009932886,0.195973154 -101,spring barley,low,sow,slope,457.0,0.0,0.0,0.195180723 -101,spring barley,low,sow,slope,540.0,0.0,0.0,0.0 -101,spring barley,low,sow,slope,623.0,0.0,0.0,-1.333333333 -101,spring barley,low,sow,slope,638.0,0.0,-0.006160164,0.0 -101,spring barley,low,sow,slope,1125.0,0.0,0.0,-0.000505694 -101,spring barley,low,marchfirst,slope,99999.0,0.0,0.0,0.0 -101,spring barley,low,harvest1,start,-1.0,0.2,0.0,10.0 -101,spring barley,low,harvest2,slope,99999.0,0.0,0.0,0.0 -4,winter wheat,high,janfirst,slope,99999.0,0.0,0.0,0.0 -4,winter wheat,high,sow,start,-1.0,0.0,0.0,0.0 -4,winter wheat,high,sow,slope,83.0,0.002304147,0.002304147,0.055299539 -4,winter wheat,high,sow,slope,300.0,0.0,0.0,0.0 -4,winter wheat,high,marchfirst,slope,0.0,0.0,0.0,0.0 -4,winter wheat,high,marchfirst,slope,107.0,0.006666667,0.006666667,0.0 -4,winter wheat,high,marchfirst,slope,182.0,0.016,0.016,0.172 -4,winter wheat,high,marchfirst,slope,257.0,0.036363636,0.036363636,0.172727273 -4,winter wheat,high,marchfirst,slope,334.0,0.0,0.0,0.17593985 -4,winter wheat,high,marchfirst,slope,600.0,0.0,0.0,0.0 -4,winter wheat,high,marchfirst,slope,1087.0,0.0,-0.016722408,0.0 -4,winter wheat,high,marchfirst,slope,1386.0,0.0,0.0,-0.000861955 -4,winter wheat,high,harvest1,start,-1.0,0.3,0.0,10.0 -4,winter wheat,high,harvest2,slope,99999.0,0.0,0.0,0.0 -104,winter wheat,low,janfirst,slope,99999.0,0.0,0.0,0.0 -104,winter wheat,low,sow,start,-1.0,0.0,0.0,0.0 -104,winter wheat,low,sow,slope,83.0,0.003225806,0.003225806,0.055299539 -104,winter wheat,low,sow,slope,300.0,0.0,0.0,0.0 -104,winter wheat,low,marchfirst,slope,0.0,0.0,0.0,0.0 -104,winter wheat,low,marchfirst,slope,107.0,0.002666667,0.002666667,0.0 -104,winter wheat,low,marchfirst,slope,182.0,0.010666667,0.010666667,0.149333333 -104,winter wheat,low,marchfirst,slope,257.0,0.012295082,0.012295082,0.151639344 -104,winter wheat,low,marchfirst,slope,379.0,0.0,0.0,0.150678733 -104,winter wheat,low,marchfirst,slope,600.0,0.0,0.0,0.0 -104,winter wheat,low,marchfirst,slope,750.0,0.0,-0.005,0.0 -104,winter wheat,low,marchfirst,slope,1350.0,0.0,0.0,-0.000658902 -104,winter wheat,low,harvest1,start,-1.0,0.42,0.0,10.0 -104,winter wheat,low,harvest2,slope,99999.0,0.0,0.0,0.0 -13,undersown spring barley,high,janfirst,slope,99999.0,0.0,0.0,0.0 -13,undersown spring barley,high,sow,start,-1.0,0.0,0.0,0.0 -13,undersown spring barley,high,sow,slope,83.0,0.005466667,0.005466667,0.066666667 -13,undersown spring barley,high,sow,slope,158.0,0.01,0.009866667,0.066666667 -13,undersown spring barley,high,sow,slope,233.0,0.018266667,0.0184,0.212 -13,undersown spring barley,high,sow,slope,308.0,0.033378378,0.033378378,0.213513514 -13,undersown spring barley,high,sow,slope,382.0,0.0,0.0,0.21160221 -13,undersown spring barley,high,sow,slope,563.0,0.0,0.0,0.0 -13,undersown spring barley,high,sow,slope,660.0,0.0,0.0,-1.333333333 -13,undersown spring barley,high,sow,slope,675.0,0.0,0.0,0.0 -13,undersown spring barley,high,sow,slope,885.0,0.0,-0.016233766,0.0 -13,undersown spring barley,high,sow,slope,1193.0,0.0,0.0,-0.000607251 -13,undersown spring barley,high,marchfirst,slope,99999.0,0.0,0.0,0.0 -13,undersown spring barley,high,harvest1,start,-1.0,0.275,0.165,5.0 -13,undersown spring barley,high,harvest1,slope,0.0,0.005625,0.003375,0.1 -13,undersown spring barley,high,harvest1,slope,40.0,0.002857143,0.005714286,0.0 -13,undersown spring barley,high,harvest1,slope,75.0,0.012,0.012,0.013333333 -13,undersown spring barley,high,harvest1,slope,150.0,0.022666667,0.024,0.08 -13,undersown spring barley,high,harvest1,slope,225.0,0.040909091,0.040909091,0.068181818 -13,undersown spring barley,high,harvest1,slope,269.0,0.0,0.0,0.08203125 -13,undersown spring barley,high,harvest1,slope,525.0,-5.03e-05,-5.03e-05,-0.000402115 -13,undersown spring barley,high,harvest2,start,-1.0,0.5,0.5,10.0 -13,undersown spring barley,high,harvest2,slope,0.0,0.008,0.008,0.133333333 -13,undersown spring barley,high,harvest2,slope,75.0,0.018666667,0.018666667,0.08 -13,undersown spring barley,high,harvest2,slope,150.0,0.04,0.04,0.04 -13,undersown spring barley,high,harvest2,slope,225.0,0.0,0.0,0.07 -13,undersown spring barley,high,harvest2,slope,525.0,-5.03e-05,-5.03e-05,-0.000402115 -113,undersown spring barley,low,janfirst,slope,99999.0,0.0,0.0,0.0 -113,undersown spring barley,low,sow,start,-1.0,0.0,0.0,0.0 -113,undersown spring barley,low,sow,slope,83.0,0.003333333,0.003333333,0.066666667 -113,undersown spring barley,low,sow,slope,158.0,0.006,0.006,0.066666667 -113,undersown spring barley,low,sow,slope,233.0,0.010933333,0.010933333,0.194666667 -113,undersown spring barley,low,sow,slope,308.0,0.009932886,0.009932886,0.195973154 -113,undersown spring barley,low,sow,slope,457.0,0.0,0.0,0.195180723 -113,undersown spring barley,low,sow,slope,540.0,0.0,0.0,0.0 -113,undersown spring barley,low,sow,slope,623.0,0.0,0.0,-1.333333333 -113,undersown spring barley,low,sow,slope,638.0,0.0,-0.006160164,0.0 -113,undersown spring barley,low,sow,slope,1125.0,0.0,0.0,-0.000505694 -113,undersown spring barley,low,marchfirst,slope,99999.0,0.0,0.0,0.0 -113,undersown spring barley,low,harvest1,start,-1.0,0.7,0.5,9.0 -113,undersown spring barley,low,harvest1,slope,0.0,0.0,0.001333333,0.0 -113,undersown spring barley,low,harvest1,slope,75.0,0.017333333,0.018666667,0.013333333 -113,undersown spring barley,low,harvest1,slope,150.0,0.04,0.04,0.08 -113,undersown spring barley,low,harvest1,slope,225.0,0.0,0.0,0.08 -113,undersown spring barley,low,harvest1,slope,525.0,0.0,-5.03e-05,-0.000402115 -113,undersown spring barley,low,harvest2,start,-1.0,0.5,0.5,10.0 -113,undersown spring barley,low,harvest2,slope,0.0,0.008,0.008,0.133333333 -113,undersown spring barley,low,harvest2,slope,75.0,0.018666667,0.018666667,0.0 -113,undersown spring barley,low,harvest2,slope,150.0,0.04,0.04,0.08 -113,undersown spring barley,low,harvest2,slope,225.0,0.0,0.0,0.08 -113,undersown spring barley,low,harvest2,slope,525.0,-5.03e-05,-5.03e-05,-0.000402115 -30,peas/beans,high,janfirst,slope,99999.0,0.0,0.0,0.0 -30,peas/beans,high,sow,start,-1.0,0.0,0.0,0.0 -30,peas/beans,high,sow,slope,113.0,0.001069519,0.001069519,0.064171123 -30,peas/beans,high,sow,slope,300.0,0.012,0.012,0.186666667 -30,peas/beans,high,sow,slope,375.0,0.037333333,0.037333333,0.2 -30,peas/beans,high,sow,slope,450.0,0.06875,0.06875,0.1875 -30,peas/beans,high,sow,slope,466.0,0.0,0.0,0.192513369 -30,peas/beans,high,sow,slope,653.0,-0.005952381,-0.011904762,-0.130952381 -30,peas/beans,high,sow,slope,1073.0,0.0,0.0,-0.000252714 -30,peas/beans,high,marchfirst,slope,99999.0,0.0,0.0,0.0 -30,peas/beans,high,harvest1,start,-1.0,0.2,0.0,5.0 -30,peas/beans,high,harvest2,slope,99999.0,0.0,0.0,0.0 -21,spring rape,high,janfirst,slope,99999.0,0.0,0.0,0.0 -21,spring rape,high,sow,start,-1.0,0.0,0.0,0.0 -21,spring rape,high,sow,slope,105.0,0.005333333,0.005333333,0.04 -21,spring rape,high,sow,slope,180.0,0.010666667,0.010666667,0.026666667 -21,spring rape,high,sow,slope,255.0,0.018666667,0.018666667,0.066666667 -21,spring rape,high,sow,slope,330.0,0.034285714,0.034285714,0.171428571 -21,spring rape,high,sow,slope,400.0,0.0,0.0,0.453781513 -21,spring rape,high,sow,slope,638.0,0.0,0.0,0.0 -21,spring rape,high,sow,slope,1121.0,0.0,-0.028901734,0.0 -21,spring rape,high,sow,slope,1294.0,0.0,0.0,-0.001317056 -21,spring rape,high,marchfirst,slope,99999.0,0.0,0.0,0.0 -21,spring rape,high,harvest1,start,-1.0,0.1,0.0,10.0 -21,spring rape,high,harvest2,slope,99999.0,0.0,0.0,0.0 -121,spring rape,low,janfirst,slope,99999.0,0.0,0.0,0.0 -121,spring rape,low,sow,start,-1.0,0.0,0.0,0.0 -121,spring rape,low,sow,slope,105.0,0.002666667,0.002666667,0.04 -121,spring rape,low,sow,slope,180.0,0.005333333,0.005333333,0.026666667 -121,spring rape,low,sow,slope,255.0,0.009333333,0.009333333,0.053333333 -121,spring rape,low,sow,slope,330.0,0.017346939,0.017346939,0.163265306 -121,spring rape,low,sow,slope,428.0,0.0,0.0,0.357142857 -121,spring rape,low,sow,slope,638.0,0.0,0.0,0.0 -121,spring rape,low,sow,slope,900.0,0.0,-0.00887574,0.0 -121,spring rape,low,sow,slope,1238.0,0.0,0.0,-0.001012545 -121,spring rape,low,marchfirst,slope,99999.0,0.0,0.0,0.0 -121,spring rape,low,harvest1,start,-1.0,0.1,0.0,10.0 -121,spring rape,low,harvest2,slope,99999.0,0.0,0.0,0.0 -22,winter rape,high,janfirst,slope,99999.0,0.0,0.0,0.0 -22,winter rape,high,sow,start,-1.0,0.0,0.0,0.0 -22,winter rape,high,sow,slope,105.0,0.004,0.004,0.04 -22,winter rape,high,sow,slope,180.0,0.004,0.004,0.026666667 -22,winter rape,high,sow,slope,255.0,0.0075,0.0075,0.058333333 -22,winter rape,high,sow,slope,375.0,0.002222222,0.002222222,0.013333333 -22,winter rape,high,sow,slope,600.0,0.0,0.0,0.0 -22,winter rape,high,marchfirst,slope,0.0,0.0,0.0,0.0 -22,winter rape,high,marchfirst,slope,92.0,0.013333333,0.013333333,0.106666667 -22,winter rape,high,marchfirst,slope,167.0,0.029850746,0.029850746,0.388059701 -22,winter rape,high,marchfirst,slope,234.0,0.0,0.0,0.435146444 -22,winter rape,high,marchfirst,slope,473.0,0.0,0.0,0.0 -22,winter rape,high,marchfirst,slope,869.0,0.0,-0.009960159,0.0 -22,winter rape,high,marchfirst,slope,1371.0,0.0,0.0,-0.001520866 -22,winter rape,high,harvest1,start,-1.0,0.1,0.0,10.0 -22,winter rape,high,harvest2,slope,99999.0,0.0,0.0,0.0 -122,winter rape,low,janfirst,slope,99999.0,0.0,0.0,0.0 -122,winter rape,low,sow,start,-1.0,0.0,0.0,0.0 -122,winter rape,low,sow,slope,105.0,0.002666667,0.002666667,0.04 -122,winter rape,low,sow,slope,180.0,0.005333333,0.005333333,0.026666667 -122,winter rape,low,sow,slope,255.0,0.011666667,0.011666667,0.041666667 -122,winter rape,low,sow,slope,375.0,0.002222222,0.002222222,0.017777778 -122,winter rape,low,sow,slope,600.0,-2.52e-05,-2.52e-05,-0.000140846 -122,winter rape,low,marchfirst,slope,0.0,0.0,0.0,0.0 -122,winter rape,low,marchfirst,slope,107.0,0.004,0.004,0.106666667 -122,winter rape,low,marchfirst,slope,182.0,0.014634146,0.014634146,0.329268293 -122,winter rape,low,marchfirst,slope,264.0,0.0,0.0,0.334821429 -122,winter rape,low,marchfirst,slope,488.0,0.0,0.0,0.0 -122,winter rape,low,marchfirst,slope,713.0,0.0,-0.005714286,0.0 -122,winter rape,low,marchfirst,slope,1238.0,0.0,0.0,-0.001215055 -122,winter rape,low,harvest1,start,-1.0,0.1,0.0,10.0 -122,winter rape,low,harvest2,slope,99999.0,0.0,0.0,0.0 -41,carrots,high,janfirst,slope,99999.0,0.0,0.0,0.0 -41,carrots,high,sow,start,-1.0,0.0,0.0,0.0 -41,carrots,high,sow,slope,225.0,0.000266667,0.000266667,0.026666667 -41,carrots,high,sow,slope,300.0,0.001066667,0.001066667,0.026666667 -41,carrots,high,sow,slope,375.0,0.002,0.002,0.026666667 -41,carrots,high,sow,slope,450.0,0.003333333,0.003333333,0.026666667 -41,carrots,high,sow,slope,525.0,0.009333333,0.009333333,0.053333333 -41,carrots,high,sow,slope,600.0,0.005333333,0.005333333,0.053333333 -41,carrots,high,sow,slope,750.0,0.01,0.01,0.016666667 -41,carrots,high,sow,slope,1050.0,-5.05e-05,-5.05e-05,-0.000252655 -41,carrots,high,marchfirst,slope,99999.0,0.0,0.0,0.0 -41,carrots,high,harvest1,start,-1.0,0.0,0.0,0.0 -41,carrots,high,harvest2,slope,99999.0,0.0,0.0,0.0 -141,carrots,low,janfirst,slope,99999.0,0.0,0.0,0.0 -141,carrots,low,sow,start,-1.0,0.0,0.0,0.0 -141,carrots,low,sow,slope,225.0,0.000266667,0.000266667,0.026666667 -141,carrots,low,sow,slope,300.0,0.001066667,0.001066667,0.026666667 -141,carrots,low,sow,slope,375.0,0.002,0.002,0.026666667 -141,carrots,low,sow,slope,450.0,0.003333333,0.004666667,0.026666667 -141,carrots,low,sow,slope,525.0,0.008,0.006666667,0.04 -141,carrots,low,sow,slope,600.0,0.004,0.004,0.046666667 -141,carrots,low,sow,slope,750.0,0.004333333,0.004333333,0.013333333 -141,carrots,low,sow,slope,1050.0,-3.03e-05,-3.03e-05,-0.000222337 -141,carrots,low,marchfirst,slope,99999.0,0.0,0.0,0.0 -141,carrots,low,harvest1,start,-1.0,0.0,0.0,0.0 -141,carrots,low,harvest2,slope,99999.0,0.0,0.0,0.0 -5,winter rye,high,janfirst,slope,99999.0,0.0,0.0,0.0 -5,winter rye,high,sow,start,-1.0,0.0,0.0,0.0 -5,winter rye,high,sow,slope,83.0,0.002304147,0.002304147,0.069124424 -5,winter rye,high,sow,slope,300.0,0.0,0.0,0.0 -5,winter rye,high,marchfirst,slope,0.0,0.0,0.0,0.0 -5,winter rye,high,marchfirst,slope,107.0,0.014666667,0.014666667,0.066666667 -5,winter rye,high,marchfirst,slope,182.0,0.050746269,0.050746269,0.298507463 -5,winter rye,high,marchfirst,slope,249.0,0.0,0.0,0.234741784 -5,winter rye,high,marchfirst,slope,675.0,0.0,0.0,0.0 -5,winter rye,high,marchfirst,slope,1082.0,-0.006920415,-0.017301038,0.0 -5,winter rye,high,marchfirst,slope,1371.0,0.0,0.0,-0.001419475 -5,winter rye,high,harvest1,start,-1.0,0.3,0.0,10.0 -5,winter rye,high,harvest2,slope,99999.0,0.0,0.0,0.0 -105,winter rye,low,janfirst,slope,99999.0,0.0,0.0,0.0 -105,winter rye,low,sow,start,-1.0,0.0,0.0,0.0 -105,winter rye,low,sow,slope,83.0,0.002304147,0.002304147,0.069124424 -105,winter rye,low,sow,slope,300.0,-5.02e-06,-5.02e-06,-0.000150453 -105,winter rye,low,marchfirst,slope,0.0,0.0,0.0,0.0 -105,winter rye,low,marchfirst,slope,107.0,0.006666667,0.006666667,0.066666667 -105,winter rye,low,marchfirst,slope,182.0,0.024390244,0.024390244,0.243902439 -105,winter rye,low,marchfirst,slope,264.0,0.0,0.0,0.194647202 -105,winter rye,low,marchfirst,slope,675.0,0.0,0.0,0.0 -105,winter rye,low,marchfirst,slope,750.0,0.0,-0.005,0.0 -105,winter rye,low,marchfirst,slope,1350.0,0.0,0.0,-0.001216434 -105,winter rye,low,harvest1,start,-1.0,0.2,0.0,10.0 -105,winter rye,low,harvest2,slope,99999.0,0.0,0.0,0.0 -7,triticale,high,janfirst,slope,99999.0,0.0,0.0,0.0 -7,triticale,high,sow,start,-1.0,0.0,0.0,0.0 -7,triticale,high,sow,slope,83.0,0.002304147,0.002304147,0.046082949 -7,triticale,high,sow,slope,300.0,0.0,0.0,0.0 -7,triticale,high,marchfirst,slope,0.0,0.0,0.0,0.0 -7,triticale,high,marchfirst,slope,107.0,0.009333333,0.009333333,0.066666667 -7,triticale,high,marchfirst,slope,182.0,0.026666667,0.026666667,0.133333333 -7,triticale,high,marchfirst,slope,257.0,0.048648649,0.048648649,0.27027027 -7,triticale,high,marchfirst,slope,294.0,0.0,0.0,0.196850394 -7,triticale,high,marchfirst,slope,675.0,0.0,0.0,0.073710074 -7,triticale,high,marchfirst,slope,1082.0,0.0,-0.017301038,0.0 -7,triticale,high,marchfirst,slope,1371.0,0.0,0.0,-0.001419475 -7,triticale,high,harvest1,start,-1.0,0.3,0.0,10.0 -7,triticale,high,harvest2,slope,99999.0,0.0,0.0,0.0 -107,triticale,low,janfirst,slope,99999.0,0.0,0.0,0.0 -107,triticale,low,sow,start,-1.0,0.0,0.0,0.0 -107,triticale,low,sow,slope,83.0,0.002304147,0.002304147,0.046082949 -107,triticale,low,sow,slope,300.0,0.0,0.0,0.0 -107,triticale,low,marchfirst,slope,0.0,0.0,0.0,0.0 -107,triticale,low,marchfirst,slope,107.0,0.005333333,0.005333333,0.066666667 -107,triticale,low,marchfirst,slope,182.0,0.009756098,0.009756098,0.097560976 -107,triticale,low,marchfirst,slope,264.0,0.029545455,0.029545455,0.272727273 -107,triticale,low,marchfirst,slope,308.0,0.0,0.0,0.177111717 -107,triticale,low,marchfirst,slope,675.0,0.0,0.0,0.0 -107,triticale,low,marchfirst,slope,750.0,0.0,-0.005,0.0 -107,triticale,low,marchfirst,slope,1350.0,0.0,0.0,-0.001013695 -107,triticale,low,harvest1,start,-1.0,0.2,0.0,10.0 -107,triticale,low,harvest2,slope,99999.0,0.0,0.0,0.0 -2,winter barley,high,janfirst,slope,99999.0,0.0,0.0,0.0 -2,winter barley,high,sow,start,-1.0,0.0,0.0,0.0 -2,winter barley,high,sow,slope,83.0,0.002304147,0.002304147,0.046082949 -2,winter barley,high,sow,slope,300.0,0.0,0.0,0.0 -2,winter barley,high,marchfirst,slope,0.0,0.0,0.0,0.0 -2,winter barley,high,marchfirst,slope,107.0,0.014666667,0.014666667,0.133333333 -2,winter barley,high,marchfirst,slope,182.0,0.050746269,0.050746269,0.298507463 -2,winter barley,high,marchfirst,slope,249.0,0.0,0.0,0.18115942 -2,winter barley,high,marchfirst,slope,525.0,0.0,0.0,0.0 -2,winter barley,high,marchfirst,slope,715.0,0.0,-0.01754386,0.0 -2,winter barley,high,marchfirst,slope,1000.0,0.0,0.0,-0.0009091 -2,winter barley,high,harvest1,start,-1.0,0.3,0.0,10.0 -2,winter barley,high,harvest2,slope,99999.0,0.0,0.0,0.0 -102,winter barley,low,janfirst,slope,99999.0,0.0,0.0,0.0 -102,winter barley,low,sow,start,-1.0,0.0,0.0,0.0 -102,winter barley,low,sow,slope,83.0,0.002304147,0.002304147,0.046082949 -102,winter barley,low,sow,slope,300.0,0.0,0.0,0.0 -102,winter barley,low,marchfirst,slope,0.0,0.0,0.0,0.0 -102,winter barley,low,marchfirst,slope,107.0,0.006666667,0.006666667,0.133333333 -102,winter barley,low,marchfirst,slope,182.0,0.024390244,0.024390244,0.243902439 -102,winter barley,low,marchfirst,slope,264.0,0.0,0.0,0.153256705 -102,winter barley,low,marchfirst,slope,525.0,0.0,0.0,0.0 -102,winter barley,low,marchfirst,slope,638.0,0.0,-0.008902077,0.0 -102,winter barley,low,marchfirst,slope,975.0,0.0,0.0,-0.000807885 -102,winter barley,low,harvest1,start,-1.0,0.2,0.0,10.0 -102,winter barley,low,harvest2,slope,99999.0,0.0,0.0,0.0 -3,spring wheat,high,janfirst,slope,99999.0,0.0,0.0,0.0 -3,spring wheat,high,sow,start,-1.0,0.0,0.0,0.0 -3,spring wheat,high,sow,slope,83.0,0.004,0.004,0.066666667 -3,spring wheat,high,sow,slope,158.0,0.006666667,0.006666667,0.066666667 -3,spring wheat,high,sow,slope,233.0,0.010666667,0.010666667,0.173333333 -3,spring wheat,high,sow,slope,308.0,0.017333333,0.017333333,0.173333333 -3,spring wheat,high,sow,slope,383.0,0.028,0.028,0.173333333 -3,spring wheat,high,sow,slope,458.0,0.0,0.0,0.174657534 -3,spring wheat,high,sow,slope,750.0,0.0,0.0,0.0 -3,spring wheat,high,sow,slope,900.0,0.0,-0.014792899,0.0 -3,spring wheat,high,sow,slope,1238.0,0.0,0.0,-0.001012545 -3,spring wheat,high,marchfirst,slope,99999.0,0.0,0.0,0.0 -3,spring wheat,high,harvest1,start,-1.0,0.3,0.0,10.0 -3,spring wheat,high,harvest2,slope,99999.0,0.0,0.0,0.0 -103,spring wheat,low,janfirst,slope,99999.0,0.0,0.0,0.0 -103,spring wheat,low,sow,start,-1.0,0.0,0.0,0.0 -103,spring wheat,low,sow,slope,83.0,0.002666667,0.002666667,0.066666667 -103,spring wheat,low,sow,slope,158.0,0.004,0.004,0.066666667 -103,spring wheat,low,sow,slope,233.0,0.006666667,0.006666667,0.16 -103,spring wheat,low,sow,slope,308.0,0.009333333,0.009333333,0.16 -103,spring wheat,low,sow,slope,383.0,0.017333333,0.017333333,0.16 -103,spring wheat,low,sow,slope,458.0,0.0,0.0,0.150684932 -103,spring wheat,low,sow,slope,750.0,0.0,0.0,0.0 -103,spring wheat,low,sow,slope,788.0,0.0,-0.007281553,0.0 -103,spring wheat,low,sow,slope,1200.0,0.0,0.0,-0.00091094 -103,spring wheat,low,marchfirst,slope,99999.0,0.0,0.0,0.0 -103,spring wheat,low,harvest1,start,-1.0,0.2,0.0,10.0 -103,spring wheat,low,harvest2,slope,99999.0,0.0,0.0,0.0 -21,spring rape,high,janfirst,slope,99999.0,0.0,0.0,0.0 -21,spring rape,high,sow,start,-1.0,0.0,0.0,0.0 -21,spring rape,high,sow,slope,113.0,0.001785714,0.001785714,0.107142857 -21,spring rape,high,sow,slope,225.0,0.010666667,0.010666667,0.106666667 -21,spring rape,high,sow,slope,300.0,0.02,0.02,0.133333333 -21,spring rape,high,sow,slope,375.0,0.033333333,0.033333333,0.186666667 -21,spring rape,high,sow,slope,450.0,0.0,0.0,0.177339901 -21,spring rape,high,sow,slope,653.0,0.0,0.0,0.0 -21,spring rape,high,sow,slope,1050.0,0.0,-0.014792899,0.0 -21,spring rape,high,sow,slope,1388.0,0.0,0.0,-0.000811269 -21,spring rape,high,marchfirst,slope,99999.0,0.0,0.0,0.0 -21,spring rape,high,harvest1,start,-1.0,0.2,0.0,10.0 -21,spring rape,high,harvest2,slope,99999.0,0.0,0.0,0.0 -60,beet,high,janfirst,slope,99999.0,0.0,0.0,0.0 -60,beet,high,sow,start,-1.0,0.0,0.0,0.0 -60,beet,high,sow,slope,150.0,0.005,0.005,0.033333333 -60,beet,high,sow,slope,210.0,0.005555556,0.005555556,0.088888889 -60,beet,high,sow,slope,300.0,0.010666667,0.010666667,0.066666667 -60,beet,high,sow,slope,375.0,0.017333333,0.017333333,0.066666667 -60,beet,high,sow,slope,450.0,0.028,0.028,0.066666667 -60,beet,high,sow,slope,525.0,0.0,0.0,0.066666667 -60,beet,high,sow,slope,825.0,0.0,-5.04e-05,-0.000453748 -60,beet,high,marchfirst,slope,99999.0,0.0,0.0,0.0 -60,beet,high,harvest1,start,-1.0,0.0,0.0,0.0 -60,beet,high,harvest2,slope,99999.0,0.0,0.0,0.0 -160,beet,low,janfirst,slope,99999.0,0.0,0.0,0.0 -160,beet,low,sow,start,-1.0,0.0,0.0,0.0 -160,beet,low,sow,slope,150.0,0.001666667,0.001666667,0.033333333 -160,beet,low,sow,slope,210.0,0.004444444,0.004444444,0.088888889 -160,beet,low,sow,slope,300.0,0.006666667,0.006666667,0.066666667 -160,beet,low,sow,slope,375.0,0.009333333,0.009333333,0.066666667 -160,beet,low,sow,slope,450.0,0.017333333,0.017333333,0.066666667 -160,beet,low,sow,slope,525.0,0.0,0.0,0.066666667 -160,beet,low,sow,slope,750.0,0.0,-3.02e-05,-0.000403027 -160,beet,low,marchfirst,slope,99999.0,0.0,0.0,0.0 -160,beet,low,harvest1,start,-1.0,0.0,0.0,0.0 -160,beet,low,harvest2,slope,99999.0,0.0,0.0,0.0 -8,maize,high,janfirst,slope,99999.0,0.0,0.0,0.0 -8,maize,high,sow,start,-1.0,0.0,0.0,0.0 -8,maize,high,sow,slope,150.0,0.001587302,0.001587302,0.095238095 -8,maize,high,sow,slope,465.0,0.006666667,0.006666667,0.166666667 -8,maize,high,sow,slope,525.0,0.012,0.012,0.133333333 -8,maize,high,sow,slope,600.0,0.03047619,0.03047619,0.476190476 -8,maize,high,sow,slope,705.0,0.0,0.0,0.512820513 -8,maize,high,sow,slope,900.0,0.0,0.0,0.0 -8,maize,high,sow,slope,1356.0,0.0,-0.008726003,0.0 -8,maize,high,sow,slope,1929.0,0.0,0.0,-0.00203936 -8,maize,high,marchfirst,slope,99999.0,0.0,0.0,0.0 -8,maize,high,harvest1,start,-1.0,0.2,0.0,10.0 -8,maize,high,harvest2,slope,99999.0,0.0,0.0,0.0 -108,maize,low,janfirst,slope,99999.0,0.0,0.0,0.0 -108,maize,low,sow,start,-1.0,0.0,0.0,0.0 -108,maize,low,sow,slope,150.0,0.001269841,0.001269841,0.079365079 -108,maize,low,sow,slope,465.0,0.003333333,0.003333333,0.15 -108,maize,low,sow,slope,525.0,0.006666667,0.006666667,0.12 -108,maize,low,sow,slope,600.0,0.018095238,0.018095238,0.352380952 -108,maize,low,sow,slope,705.0,0.0,0.0,0.41025641 -108,maize,low,sow,slope,900.0,0.0,0.0,0.0 -108,maize,low,sow,slope,1275.0,0.0,-0.005,0.0 -108,maize,low,sow,slope,1875.0,0.0,0.0,-0.00163059 -108,maize,low,marchfirst,slope,99999.0,0.0,0.0,0.0 -108,maize,low,harvest1,start,-1.0,0.2,0.0,10.0 -108,maize,low,harvest2,slope,99999.0,0.0,0.0,0.0 -26,permanent grassland (grazed),high,janfirst,start,-1.0,3.0,1.0,30.0 -26,permanent grassland (grazed),high,janfirst,slope,0.0,-0.005,-0.0025,-0.05 -26,permanent grassland (grazed),high,janfirst,slope,200.0,-2e-05,-5.01e-06,-0.000200403 -26,permanent grassland (grazed),high,sow,slope,99999.0,0.0,0.0,0.0 -26,permanent grassland (grazed),high,marchfirst,slope,0.0,0.0,0.0,-0.044247788 -26,permanent grassland (grazed),high,marchfirst,slope,113.0,0.008928571,0.008928571,0.026785714 -26,permanent grassland (grazed),high,marchfirst,slope,225.0,0.013333333,0.02,0.026666667 -26,permanent grassland (grazed),high,marchfirst,slope,300.0,0.012,0.025333333,0.066666667 -26,permanent grassland (grazed),high,marchfirst,slope,375.0,8.89e-05,8.89e-05,0.04 -26,permanent grassland (grazed),high,marchfirst,slope,1500.0,-5.08e-05,-5.08e-05,-0.000710667 -26,permanent grassland (grazed),high,harvest1,slope,99999.0,0.0,0.0,0.0 -26,permanent grassland (grazed),high,harvest2,slope,99999.0,0.0,0.0,0.0 -27,permanent grassland (seeded),high,janfirst,start,-1.0,1.5,1.0,10.0 -27,permanent grassland (seeded),high,sow,slope,99999.0,0.0,0.0,0.0 -27,permanent grassland (seeded),high,marchfirst,slope,0.0,0.0,0.0,0.0 -27,permanent grassland (seeded),high,marchfirst,slope,107.0,0.0,0.004651163,0.0 -27,permanent grassland (seeded),high,marchfirst,slope,150.0,0.006666667,0.010666667,0.12 -27,permanent grassland (seeded),high,marchfirst,slope,225.0,0.022666667,0.022666667,0.12 -27,permanent grassland (seeded),high,marchfirst,slope,300.0,0.040625,0.040625,0.28125 -27,permanent grassland (seeded),high,marchfirst,slope,332.0,0.0,0.0,0.098939929 -27,permanent grassland (seeded),high,marchfirst,slope,615.0,0.0,0.0,0.0 -27,permanent grassland (seeded),high,marchfirst,slope,825.0,0.0,0.0,0.0 -27,permanent grassland (seeded),high,marchfirst,slope,1050.0,0.0,-0.016666667,0.0 -27,permanent grassland (seeded),high,marchfirst,slope,1350.0,-5.07e-05,0.0,-0.000658902 -27,permanent grassland (seeded),high,harvest1,start,-1.0,0.5,0.0,10.0 -27,permanent grassland (seeded),high,harvest2,slope,99999.0,0.0,0.0,0.0 -28,NA,high,janfirst,start,-1.0,1.5,1.0,10.0 -28,NA,high,sow,slope,99999.0,0.0,0.0,0.0 -28,NA,high,marchfirst,slope,0.0,0.0,0.0,0.0 -28,NA,high,marchfirst,slope,107.0,0.0,0.004651163,0.0 -28,NA,high,marchfirst,slope,150.0,0.006666667,0.010666667,0.08 -28,NA,high,marchfirst,slope,225.0,0.020408163,0.020408163,0.081632653 -28,NA,high,marchfirst,slope,274.0,-3.01e-05,-3.01e-05,-0.000200552 -28,NA,high,harvest1,slope,99999.0,0.0,0.0,0.0 -28,NA,high,harvest2,slope,99999.0,0.0,0.0,0.0 -29,fodder/clover,high,janfirst,start,-1.0,1.5,1.0,10.0 -29,fodder/clover,high,sow,slope,99999.0,0.0,0.0,0.0 -29,fodder/clover,high,marchfirst,slope,0.0,0.0,0.0,0.0 -29,fodder/clover,high,marchfirst,slope,107.0,-0.006976744,0.004651163,0.0 -29,fodder/clover,high,marchfirst,slope,150.0,0.010666667,0.010666667,0.12 -29,fodder/clover,high,marchfirst,slope,225.0,0.022666667,0.022666667,0.12 -29,fodder/clover,high,marchfirst,slope,300.0,0.040625,0.040625,0.28125 -29,fodder/clover,high,marchfirst,slope,332.0,0.0,0.0,0.083333333 -29,fodder/clover,high,marchfirst,slope,488.0,-5.02e-05,-5.02e-05,-0.000502457 -29,fodder/clover,high,harvest1,start,-1.0,0.5,0.5,10.0 -29,fodder/clover,high,harvest1,slope,0.0,0.016666667,0.016666667,0.333333333 -29,fodder/clover,high,harvest1,slope,30.0,0.006666667,0.006666667,0.0 -29,fodder/clover,high,harvest1,slope,75.0,0.012,0.012,0.0 -29,fodder/clover,high,harvest1,slope,150.0,0.026666667,0.026666667,0.12 -29,fodder/clover,high,harvest1,slope,225.0,0.043333333,0.043333333,0.1 -29,fodder/clover,high,harvest1,slope,255.0,0.0,0.0,0.120171674 -29,fodder/clover,high,harvest1,slope,488.0,-5.02e-05,-5.02e-05,-0.000502457 -29,fodder/clover,high,harvest2,slope,99999.0,0.0,0.0,0.0 -65,silage clover/grass,high,janfirst,slope,0.0,-1.5e-05,-1e-05,-0.000100001 -65,silage clover/grass,high,sow,slope,99999.0,0.0,0.0,0.0 -65,silage clover/grass,high,marchfirst,slope,0.0,0.0,0.0,0.0 -65,silage clover/grass,high,marchfirst,slope,107.0,0.0,0.004651163,0.0 -65,silage clover/grass,high,marchfirst,slope,150.0,0.006666667,0.010666667,0.12 -65,silage clover/grass,high,marchfirst,slope,225.0,0.022666667,0.022666667,0.12 -65,silage clover/grass,high,marchfirst,slope,300.0,0.040625,0.040625,0.28125 -65,silage clover/grass,high,marchfirst,slope,332.0,0.0,0.0,0.083333333 -65,silage clover/grass,high,marchfirst,slope,488.0,-5.02e-05,-5.02e-05,-0.000502457 -65,silage clover/grass,high,harvest1,start,-1.0,0.5,0.5,10.0 -65,silage clover/grass,high,harvest1,slope,0.0,0.016666667,0.016666667,0.333333333 -65,silage clover/grass,high,harvest1,slope,30.0,0.006666667,0.006666667,0.0 -65,silage clover/grass,high,harvest1,slope,75.0,0.012,0.012,0.0 -65,silage clover/grass,high,harvest1,slope,150.0,0.026666667,0.026666667,0.12 -65,silage clover/grass,high,harvest1,slope,225.0,0.043333333,0.043333333,0.1 -65,silage clover/grass,high,harvest1,slope,255.0,0.0,0.0,0.120171674 -65,silage clover/grass,high,harvest1,slope,488.0,-5.02e-05,-5.02e-05,-0.000502457 -65,silage clover/grass,high,harvest2,slope,99999.0,0.0,0.0,0.0 -165,silage clover/grass,low,janfirst,slope,0.0,-1.5e-05,-1e-05,-0.000100001 -165,silage clover/grass,low,sow,slope,99999.0,0.0,0.0,0.0 -165,silage clover/grass,low,marchfirst,slope,0.0,0.0,0.0,0.0 -165,silage clover/grass,low,marchfirst,slope,107.0,0.0,0.004651163,0.0 -165,silage clover/grass,low,marchfirst,slope,150.0,0.001333333,0.005333333,0.08 -165,silage clover/grass,low,marchfirst,slope,225.0,0.010666667,0.010666667,0.08 -165,silage clover/grass,low,marchfirst,slope,300.0,0.021333333,0.021333333,0.08 -165,silage clover/grass,low,marchfirst,slope,375.0,0.0,0.0,0.08 -165,silage clover/grass,low,marchfirst,slope,525.0,-4.02e-05,-4.02e-05,-0.000402115 -165,silage clover/grass,low,harvest1,start,-1.0,0.5,0.5,10.0 -165,silage clover/grass,low,harvest1,slope,0.0,0.016666667,0.016666667,0.333333333 -165,silage clover/grass,low,harvest1,slope,30.0,0.004444444,0.004444444,0.0 -165,silage clover/grass,low,harvest1,slope,75.0,0.006666667,0.006666667,0.0 -165,silage clover/grass,low,harvest1,slope,150.0,0.012,0.012,0.08 -165,silage clover/grass,low,harvest1,slope,225.0,0.025333333,0.025333333,0.08 -165,silage clover/grass,low,harvest1,slope,300.0,0.0,0.0,0.08 -165,silage clover/grass,low,harvest1,slope,525.0,-4.02e-05,-4.02e-05,-0.000402115 -165,silage clover/grass,low,harvest2,start,-1.0,0.0,0.0,0.0 -90,natural grass,high,janfirst,start,-1.0,4.83,0.0,70.25454545 -90,natural grass,high,janfirst,slope,105.0,-9.81e-06,0.0,-0.000142697 -90,natural grass,high,sow,slope,99999.0,0.0,0.0,0.0 -90,natural grass,high,marchfirst,slope,0.0,0.002249135,0.003460208,0.03271469 -90,natural grass,high,marchfirst,slope,289.0,0.001231527,0.0,0.017913121 -90,natural grass,high,marchfirst,slope,695.0,0.001552795,-0.00310559,0.02258611 -90,natural grass,high,marchfirst,slope,1017.0,0.0,0.0,0.0 -90,natural grass,high,marchfirst,slope,2619.0,-0.003988095,0.0,-0.058008658 -90,natural grass,high,marchfirst,slope,2787.0,0.0,0.0,0.0 -90,natural grass,high,harvest1,start,-1.0,1.0,0.0,10.0 -90,natural grass,high,harvest1,slope,0.0,0.012110727,0.003460208,0.19188424 -90,natural grass,high,harvest1,slope,289.0,0.001231527,0.0,0.017913121 -90,natural grass,high,harvest1,slope,695.0,0.001552795,-0.00310559,0.02258611 -90,natural grass,high,harvest1,slope,1017.0,0.0,0.0,0.0 -90,natural grass,high,harvest1,slope,2619.0,-0.003988095,0.0,-0.058008658 -90,natural grass,high,harvest1,slope,2787.0,0.0,0.0,0.0 -90,natural grass,high,harvest2,slope,99999.0,0.0,0.0,0.0 -91,no growth,high,janfirst,slope,99999.0,0.0,0.0,0.0 -91,no growth,high,sow,slope,99999.0,0.0,0.0,0.0 -91,no growth,high,marchfirst,slope,99999.0,0.0,0.0,0.0 -91,no growth,high,harvest1,slope,99999.0,0.0,0.0,0.0 -91,no growth,high,harvest2,slope,99999.0,0.0,0.0,0.0 -92,permanent set-aside,high,janfirst,start,-1.0,2.55024,0.8,30.0 -92,permanent set-aside,high,janfirst,slope,105.0,-5.18e-06,0.0,5.01e-05 -92,permanent set-aside,high,sow,slope,99999.0,0.0,0.0,0.0 -92,permanent set-aside,high,marchfirst,slope,0.0,0.002101038,0.000941176,0.017301038 -92,permanent set-aside,high,marchfirst,slope,289.0,0.000650246,0.001970443,0.017241379 -92,permanent set-aside,high,marchfirst,slope,695.0,0.0,0.0,0.02484472 -92,permanent set-aside,high,marchfirst,slope,1017.0,-0.000220824,0.0,-0.006242197 -92,permanent set-aside,high,marchfirst,slope,2619.0,0.0,-0.003571429,-0.05952381 -92,permanent set-aside,high,marchfirst,slope,2787.0,-2.62e-05,-1.03e-05,-0.000308604 -92,permanent set-aside,high,harvest1,start,-1.0,0.6,0.4,15.0 -92,permanent set-aside,high,harvest1,slope,0.0,0.006145329,0.001384083,0.069204152 -92,permanent set-aside,high,harvest1,slope,289.0,0.000650246,0.001970443,0.007389163 -92,permanent set-aside,high,harvest1,slope,695.0,0.000819876,0.0,0.01242236 -92,permanent set-aside,high,harvest1,slope,1017.0,0.0,0.0,0.0 -92,permanent set-aside,high,harvest1,slope,2619.0,-0.002105714,-0.003571429,-0.029761905 -92,permanent set-aside,high,harvest1,slope,2787.0,0.0,-1.03e-05,0.0 -92,permanent set-aside,high,harvest2,slope,99999.0,0.0,0.0,0.0 -6,oats,high,janfirst,slope,99999.0,0.0,0.0,0.0 -6,oats,high,sow,slope,0.0,0.0,0.0,0.0 -6,oats,high,sow,slope,83.0,0.005466667,0.005466667,0.066666667 -6,oats,high,sow,slope,158.0,0.01,0.009866667,0.093333333 -6,oats,high,sow,slope,233.0,0.018266667,0.0184,0.306666667 -6,oats,high,sow,slope,308.0,0.033378378,0.033378378,0.540540541 -6,oats,high,sow,slope,382.0,0.0,0.0,0.359116022 -6,oats,high,sow,slope,563.0,0.0,0.0,0.0 -6,oats,high,sow,slope,660.0,0.0,0.0,0.0 -6,oats,high,sow,slope,675.0,0.0,0.0,0.0 -6,oats,high,sow,slope,938.0,-0.011450382,-0.019083969,0.0 -6,oats,high,sow,slope,1200.0,0.0,0.0,0.0 -6,oats,high,marchfirst,slope,99999.0,0.0,0.0,0.0 -6,oats,high,harvest1,start,-1.0,0.3,0.0,10.0 -6,oats,high,harvest2,slope,99999.0,0.0,0.0,0.0 -106,oats,low,janfirst,slope,99999.0,0.0,0.0,0.0 -106,oats,low,sow,slope,0.0,0.0,0.0,0.0 -106,oats,low,sow,slope,83.0,0.003333333,0.003333333,0.066666667 -106,oats,low,sow,slope,158.0,0.006,0.006,0.093333333 -106,oats,low,sow,slope,233.0,0.010933333,0.010933333,0.306666667 -106,oats,low,sow,slope,308.0,0.009932886,0.009932886,0.268456376 -106,oats,low,sow,slope,457.0,0.0,0.0,0.662650602 -106,oats,low,sow,slope,540.0,0.0,0.0,0.0 -106,oats,low,sow,slope,623.0,0.0,0.0,0.0 -106,oats,low,sow,slope,675.0,-0.00307377,-0.006147541,0.0 -106,oats,low,sow,slope,1163.0,0.0,0.0,0.0 -106,oats,low,marchfirst,slope,99999.0,0.0,0.0,0.0 -106,oats,low,harvest1,start,-1.0,0.3,0.0,10.0 -106,oats,low,harvest2,slope,99999.0,0.0,0.0,0.0 -50,potatoes,high,janfirst,slope,99999.0,0.0,0.0,0.0 -50,potatoes,high,sow,slope,0.0,0.0,0.0,0.0 -50,potatoes,high,sow,slope,225.0,0.006666667,0.006666667,0.133333333 -50,potatoes,high,sow,slope,300.0,0.002666667,0.002666667,0.133333333 -50,potatoes,high,sow,slope,375.0,0.004,0.004,0.133333333 -50,potatoes,high,sow,slope,450.0,0.005333333,0.005333333,0.133333333 -50,potatoes,high,sow,slope,525.0,0.009333333,0.009333333,0.133333333 -50,potatoes,high,sow,slope,600.0,0.012,0.012,0.0 -50,potatoes,high,sow,slope,675.0,0.0,0.0,0.0 -50,potatoes,high,sow,slope,938.0,-0.016666667,-0.02,-0.266666667 -50,potatoes,high,sow,slope,1088.0,0.0,0.0,0.0 -50,potatoes,high,marchfirst,slope,99999.0,0.0,0.0,0.0 -50,potatoes,high,harvest1,start,-1.0,0.0,0.0,0.0 -50,potatoes,high,harvest2,slope,99999.0,0.0,0.0,0.0 -150,potatoes,low,janfirst,slope,99999.0,0.0,0.0,0.0 -150,potatoes,low,sow,slope,0.0,0.0,0.0,0.0 -150,potatoes,low,sow,slope,225.0,0.008,0.008,0.133333333 -150,potatoes,low,sow,slope,300.0,0.005333333,0.005333333,0.133333333 -150,potatoes,low,sow,slope,375.0,0.006666667,0.006666667,0.133333333 -150,potatoes,low,sow,slope,450.0,0.009333333,0.009333333,0.133333333 -150,potatoes,low,sow,slope,525.0,0.014666667,0.014666667,0.133333333 -150,potatoes,low,sow,slope,600.0,0.022666667,0.022666667,0.133333333 -150,potatoes,low,sow,slope,675.0,0.0,0.0,0.0 -150,potatoes,low,sow,slope,1200.0,-0.017777778,-0.022222222,-0.222222222 -150,potatoes,low,sow,slope,1425.0,0.0,0.0,0.0 -150,potatoes,low,marchfirst,slope,99999.0,0.0,0.0,0.0 -150,potatoes,low,harvest1,start,-1.0,0.0,0.0,0.0 -150,potatoes,low,harvest2,slope,99999.0,0.0,0.0,0.0 -99,NA,high,janfirst,start,-1.0,1.0,1.0,10.0 -99,NA,high,sow,slope,99999.0,0.0,0.0,0.0 -99,NA,high,marchfirst,start,-1.0,1.1,1.0,10.0 -99,NA,high,marchfirst,slope,64.0,0.038461538,0.038461538,0.0 -99,NA,high,marchfirst,slope,90.0,0.022222222,0.022222222,0.0 -99,NA,high,marchfirst,slope,135.0,0.022222222,0.022222222,0.0 -99,NA,high,marchfirst,slope,180.0,0.0,0.0,0.0 -99,NA,high,marchfirst,slope,199.0,0.0,0.0,0.0 -99,NA,high,marchfirst,slope,308.0,0.0,0.0,0.0 -99,NA,high,marchfirst,slope,413.0,-0.007633588,-0.007633588,0.0 -99,NA,high,marchfirst,slope,675.0,-0.004444444,-0.004444444,0.0 -99,NA,high,marchfirst,slope,900.0,-9.08e-06,-9.08e-06,0.0 -99,NA,high,harvest1,start,-1.0,1.2,0.2,10.0 -99,NA,high,harvest1,slope,0.0,0.019642857,0.0,0.0 -99,NA,high,harvest1,slope,140.0,0.020833333,0.0,0.0 -99,NA,high,harvest1,slope,188.0,0.0,0.0,0.0 -99,NA,high,harvest1,slope,207.0,0.0,0.0,0.0 -99,NA,high,harvest1,slope,769.0,-0.013333333,0.0,0.0 -99,NA,high,harvest1,slope,844.0,-1.01e-05,0.0,0.0 -99,NA,high,harvest2,slope,99999.0,0.0,0.0,0.0 -112,heath,low,janfirst,start,-1.0,3.1878,1.0,46.368 -112,heath,low,janfirst,slope,105.0,-6.47e-06,0.0,-9.42e-05 -112,heath,low,sow,slope,99999.0,0.0,0.0,0.0 -112,heath,low,marchfirst,start,-1.0,2.541,0.66,36.96 -112,heath,low,marchfirst,slope,0.0,0.007958478,0.001176471,0.016608997 -112,heath,low,marchfirst,slope,289.0,0.000812808,0.002463054,0.01182266 -112,heath,low,marchfirst,slope,695.0,0.0,0.0,0.0 -112,heath,low,marchfirst,slope,1017.0,-0.00027603,0.0,-0.004014981 -112,heath,low,marchfirst,slope,2619.0,0.0,0.0,0.0 -112,heath,low,marchfirst,slope,2787.0,-3.28e-05,-2.06e-05,-0.000476978 -112,heath,low,harvest1,start,-1.0,0.66,0.5,10.0 -112,heath,low,harvest1,slope,0.0,0.00799308,0.001730104,0.114878893 -112,heath,low,harvest1,slope,289.0,0.000812808,0.002463054,0.01182266 -112,heath,low,harvest1,slope,695.0,0.001024845,0.0,0.014906832 -112,heath,low,harvest1,slope,1017.0,0.0,0.0,0.0 -112,heath,low,harvest1,slope,2619.0,-0.002632143,0.0,-0.038285714 -112,heath,low,harvest1,slope,2787.0,0.0,-2.06e-05,0.0 -112,heath,low,harvest2,slope,99999.0,0.0,0.0,0.0 -94,lawn,high,janfirst,start,-1.0,2.415,0.0,35.12727273 -94,lawn,high,janfirst,slope,105.0,-4.91e-06,0.0,-7.13e-05 -94,lawn,high,janfirst,slope,0.0,-2.5e-06,0.0,0.5 -94,lawn,high,sow,slope,99999.0,0.0,0.0,0.0 -94,lawn,high,marchfirst,start,-1.0,1.925,0.0,28.0 -94,lawn,high,marchfirst,slope,0.0,0.000865052,0.0,0.012582573 -94,lawn,high,marchfirst,slope,289.0,0.000615764,-0.001231527,0.008956561 -94,lawn,high,marchfirst,slope,695.0,0.0,0.0,0.0 -94,lawn,high,marchfirst,slope,1017.0,-0.000209114,0.0,-0.003041652 -94,lawn,high,marchfirst,slope,2619.0,0.0,0.0,0.0 -94,lawn,high,marchfirst,slope,2787.0,-2.48e-05,0.0,0.513973303 -94,lawn,high,harvest1,start,-1.0,0.5,0.0,5.0 -94,lawn,high,harvest1,slope,0.0,0.006055363,0.001730104,0.09594212 -94,lawn,high,harvest1,slope,289.0,0.000615764,0.0,0.008956561 -94,lawn,high,harvest1,slope,695.0,0.000776398,-0.001552795,0.011293055 -94,lawn,high,harvest1,slope,1017.0,0.0,0.0,0.0 -94,lawn,high,harvest1,slope,2619.0,-0.001994048,0.0,-0.029004329 -94,lawn,high,harvest1,slope,2787.0,0.0,0.0,0.0 -94,lawn,high,harvest1,slope,0.0,-2.5e-06,0.0,0.5 -94,lawn,high,harvest2,slope,99999.0,0.0,0.0,0.0 -25,permanent grassland (low yield),high,janfirst,start,-1.0,3.0,1.0,20.0 -25,permanent grassland (low yield),high,janfirst,slope,0.0,-0.005,-0.0025,-0.025 -25,permanent grassland (low yield),high,janfirst,slope,200.0,-2e-05,-5.01e-06,-0.000150302 -25,permanent grassland (low yield),high,sow,slope,99999.0,0.0,0.0,0.0 -25,permanent grassland (low yield),high,marchfirst,slope,0.0,0.0,0.0,-0.026548673 -25,permanent grassland (low yield),high,marchfirst,slope,113.0,0.008928571,0.008928571,0.053571429 -25,permanent grassland (low yield),high,marchfirst,slope,225.0,0.013333333,0.02,0.026666667 -25,permanent grassland (low yield),high,marchfirst,slope,300.0,0.012,0.025333333,0.066666667 -25,permanent grassland (low yield),high,marchfirst,slope,375.0,8.89e-05,8.89e-05,0.031111111 -25,permanent grassland (low yield),high,marchfirst,slope,1500.0,-5.08e-05,-5.08e-05,-0.000609143 -25,permanent grassland (low yield),high,harvest1,slope,99999.0,0.0,0.0,0.0 -25,permanent grassland (low yield),high,harvest2,slope,99999.0,0.0,0.0,0.0 -70,lucerne,high,janfirst,slope,99999.0,0.0,0.0,0.0 -70,lucerne,high,sow,start,-1.0,0.0,0.0,0.0 -70,lucerne,high,sow,slope,107.0,-0.006976744,0.004651163,0.0 -70,lucerne,high,sow,slope,150.0,0.010666667,0.010666667,0.12 -70,lucerne,high,sow,slope,225.0,0.022666667,0.022666667,0.12 -70,lucerne,high,sow,slope,300.0,0.040625,0.040625,0.28125 -70,lucerne,high,sow,slope,332.0,0.0,0.0,0.083333333 -70,lucerne,high,sow,slope,488.0,-5.02457e-05,-5.02457e-05,-0.000502457 -70,lucerne,high,marchfirst,slope,99999.0,0.0,0.0,0.0 -70,lucerne,high,harvest1,start,-1.0,0.5,0.5,10.0 -70,lucerne,high,harvest1,slope,0.0,0.016666667,0.016666667,0.333333333 -70,lucerne,high,harvest1,slope,30.0,0.006666667,0.006666667,0.0 -70,lucerne,high,harvest1,slope,75.0,0.012,0.012,0.0 -70,lucerne,high,harvest1,slope,150.0,0.026666667,0.026666667,0.12 -70,lucerne,high,harvest1,slope,225.0,0.043333333,0.043333333,0.1 -70,lucerne,high,harvest1,slope,255.0,0.0,0.0,0.120171674 -70,lucerne,high,harvest1,slope,488.0,-5.02457e-05,-5.02457e-05,-0.000502457 -70,lucerne,high,harvest2,slope,99999.0,0.0,0.0,0.0 +1,spring barley,high,janfirst,slope,99999,0,0,0 +1,spring barley,high,sow,start,-1,0,0,0 +1,spring barley,high,sow,slope,83,0.005466667,0.005466667,0.066666667 +1,spring barley,high,sow,slope,158,0.01,0.009866667,0.066666667 +1,spring barley,high,sow,slope,233,0.018266667,0.0184,0.106666667 +1,spring barley,high,sow,slope,308,0.033378378,0.033378378,0.081081081 +1,spring barley,high,sow,slope,382,0,0,0.060773481 +1,spring barley,high,sow,slope,563,0,0,0.154639175 +1,spring barley,high,sow,slope,660,0,0,0.066666667 +1,spring barley,high,sow,slope,675,0,0,0.138095238 +1,spring barley,high,sow,slope,885,0,-0.016233766,-0.029220779 +1,spring barley,high,sow,slope,1193,0,0,-0.035830619 +1,spring barley,high,sow,slope,1500,0,0,-0.000609143 +1,spring barley,high,marchfirst,slope,99999,0,0,0 +1,spring barley,high,harvest1,start,-1,0.3,0,10 +1,spring barley,high,harvest2,slope,99999,0,0,0 +101,spring barley,low,janfirst,slope,99999,0,0,0 +101,spring barley,low,sow,start,-1,0,0,0 +101,spring barley,low,sow,slope,83,0.003333333,0.003333333,0.066666667 +101,spring barley,low,sow,slope,158,0.006,0.006,0.066666667 +101,spring barley,low,sow,slope,233,0.010933333,0.010933333,0.194666667 +101,spring barley,low,sow,slope,308,0.009932886,0.009932886,0.195973154 +101,spring barley,low,sow,slope,457,0,0,0.195180723 +101,spring barley,low,sow,slope,540,0,0,0 +101,spring barley,low,sow,slope,623,0,0,-1.333333333 +101,spring barley,low,sow,slope,638,0,-0.006160164,0 +101,spring barley,low,sow,slope,1125,0,0,-0.000505694 +101,spring barley,low,marchfirst,slope,99999,0,0,0 +101,spring barley,low,harvest1,start,-1,0.2,0,10 +101,spring barley,low,harvest2,slope,99999,0,0,0 +4,winter wheat,high,janfirst,slope,99999,0,0,0 +4,winter wheat,high,sow,start,-1,0,0,0 +4,winter wheat,high,sow,slope,83,0.002304147,0.002304147,0.055299539 +4,winter wheat,high,sow,slope,300,0,0,0 +4,winter wheat,high,marchfirst,slope,0,0,0,0 +4,winter wheat,high,marchfirst,slope,107,0.006666667,0.006666667,0 +4,winter wheat,high,marchfirst,slope,182,0.016,0.016,0.172 +4,winter wheat,high,marchfirst,slope,257,0.036363636,0.036363636,0.172727273 +4,winter wheat,high,marchfirst,slope,334,0,0,0.17593985 +4,winter wheat,high,marchfirst,slope,600,0,0,0 +4,winter wheat,high,marchfirst,slope,1087,0,-0.016722408,0 +4,winter wheat,high,marchfirst,slope,1386,0,0,-0.000861955 +4,winter wheat,high,harvest1,start,-1,0.3,0,10 +4,winter wheat,high,harvest2,slope,99999,0,0,0 +104,winter wheat,low,janfirst,slope,99999,0,0,0 +104,winter wheat,low,sow,start,-1,0,0,0 +104,winter wheat,low,sow,slope,83,0.003225806,0.003225806,0.055299539 +104,winter wheat,low,sow,slope,300,0,0,0 +104,winter wheat,low,marchfirst,slope,0,0,0,0 +104,winter wheat,low,marchfirst,slope,107,0.002666667,0.002666667,0 +104,winter wheat,low,marchfirst,slope,182,0.010666667,0.010666667,0.149333333 +104,winter wheat,low,marchfirst,slope,257,0.012295082,0.012295082,0.151639344 +104,winter wheat,low,marchfirst,slope,379,0,0,0.150678733 +104,winter wheat,low,marchfirst,slope,600,0,0,0 +104,winter wheat,low,marchfirst,slope,750,0,-0.005,0 +104,winter wheat,low,marchfirst,slope,1350,0,0,-0.000658902 +104,winter wheat,low,harvest1,start,-1,0.42,0,10 +104,winter wheat,low,harvest2,slope,99999,0,0,0 +13,undersown spring barley,high,janfirst,slope,99999,0,0,0 +13,undersown spring barley,high,sow,start,-1,0,0,0 +13,undersown spring barley,high,sow,slope,83,0.005466667,0.005466667,0.066666667 +13,undersown spring barley,high,sow,slope,158,0.01,0.009866667,0.066666667 +13,undersown spring barley,high,sow,slope,233,0.018266667,0.0184,0.212 +13,undersown spring barley,high,sow,slope,308,0.033378378,0.033378378,0.213513514 +13,undersown spring barley,high,sow,slope,382,0,0,0.21160221 +13,undersown spring barley,high,sow,slope,563,0,0,0 +13,undersown spring barley,high,sow,slope,660,0,0,-1.333333333 +13,undersown spring barley,high,sow,slope,675,0,0,0 +13,undersown spring barley,high,sow,slope,885,0,-0.016233766,0 +13,undersown spring barley,high,sow,slope,1193,0,0,-0.000607251 +13,undersown spring barley,high,marchfirst,slope,99999,0,0,0 +13,undersown spring barley,high,harvest1,start,-1,0.275,0.165,5 +13,undersown spring barley,high,harvest1,slope,0,0.005625,0.003375,0.1 +13,undersown spring barley,high,harvest1,slope,40,0.002857143,0.005714286,0 +13,undersown spring barley,high,harvest1,slope,75,0.012,0.012,0.013333333 +13,undersown spring barley,high,harvest1,slope,150,0.022666667,0.024,0.08 +13,undersown spring barley,high,harvest1,slope,225,0.040909091,0.040909091,0.068181818 +13,undersown spring barley,high,harvest1,slope,269,0,0,0.08203125 +13,undersown spring barley,high,harvest1,slope,525,-0.0000503,-0.0000503,-0.000402115 +13,undersown spring barley,high,harvest2,start,-1,0.5,0.5,10 +13,undersown spring barley,high,harvest2,slope,0,0.008,0.008,0.133333333 +13,undersown spring barley,high,harvest2,slope,75,0.018666667,0.018666667,0.08 +13,undersown spring barley,high,harvest2,slope,150,0.04,0.04,0.04 +13,undersown spring barley,high,harvest2,slope,225,0,0,0.07 +13,undersown spring barley,high,harvest2,slope,525,-0.0000503,-0.0000503,-0.000402115 +113,undersown spring barley,low,janfirst,slope,99999,0,0,0 +113,undersown spring barley,low,sow,start,-1,0,0,0 +113,undersown spring barley,low,sow,slope,83,0.003333333,0.003333333,0.066666667 +113,undersown spring barley,low,sow,slope,158,0.006,0.006,0.066666667 +113,undersown spring barley,low,sow,slope,233,0.010933333,0.010933333,0.194666667 +113,undersown spring barley,low,sow,slope,308,0.009932886,0.009932886,0.195973154 +113,undersown spring barley,low,sow,slope,457,0,0,0.195180723 +113,undersown spring barley,low,sow,slope,540,0,0,0 +113,undersown spring barley,low,sow,slope,623,0,0,-1.333333333 +113,undersown spring barley,low,sow,slope,638,0,-0.006160164,0 +113,undersown spring barley,low,sow,slope,1125,0,0,-0.000505694 +113,undersown spring barley,low,marchfirst,slope,99999,0,0,0 +113,undersown spring barley,low,harvest1,start,-1,0.7,0.5,9 +113,undersown spring barley,low,harvest1,slope,0,0,0.001333333,0 +113,undersown spring barley,low,harvest1,slope,75,0.017333333,0.018666667,0.013333333 +113,undersown spring barley,low,harvest1,slope,150,0.04,0.04,0.08 +113,undersown spring barley,low,harvest1,slope,225,0,0,0.08 +113,undersown spring barley,low,harvest1,slope,525,0,-0.0000503,-0.000402115 +113,undersown spring barley,low,harvest2,start,-1,0.5,0.5,10 +113,undersown spring barley,low,harvest2,slope,0,0.008,0.008,0.133333333 +113,undersown spring barley,low,harvest2,slope,75,0.018666667,0.018666667,0 +113,undersown spring barley,low,harvest2,slope,150,0.04,0.04,0.08 +113,undersown spring barley,low,harvest2,slope,225,0,0,0.08 +113,undersown spring barley,low,harvest2,slope,525,-0.0000503,-0.0000503,-0.000402115 +30,peas/beans,high,janfirst,slope,99999,0,0,0 +30,peas/beans,high,sow,start,-1,0,0,0 +30,peas/beans,high,sow,slope,113,0.001069519,0.001069519,0.064171123 +30,peas/beans,high,sow,slope,300,0.012,0.012,0.186666667 +30,peas/beans,high,sow,slope,375,0.037333333,0.037333333,0.2 +30,peas/beans,high,sow,slope,450,0.06875,0.06875,0.1875 +30,peas/beans,high,sow,slope,466,0,0,0.192513369 +30,peas/beans,high,sow,slope,653,-0.005952381,-0.011904762,-0.130952381 +30,peas/beans,high,sow,slope,1073,0,0,-0.000252714 +30,peas/beans,high,marchfirst,slope,99999,0,0,0 +30,peas/beans,high,harvest1,start,-1,0.2,0,5 +30,peas/beans,high,harvest2,slope,99999,0,0,0 +21,spring rape,high,janfirst,slope,99999,0,0,0 +21,spring rape,high,sow,start,-1,0,0,0 +21,spring rape,high,sow,slope,105,0.005333333,0.005333333,0.04 +21,spring rape,high,sow,slope,180,0.010666667,0.010666667,0.026666667 +21,spring rape,high,sow,slope,255,0.018666667,0.018666667,0.066666667 +21,spring rape,high,sow,slope,330,0.034285714,0.034285714,0.171428571 +21,spring rape,high,sow,slope,400,0,0,0.453781513 +21,spring rape,high,sow,slope,638,0,0,0 +21,spring rape,high,sow,slope,1121,0,-0.028901734,0 +21,spring rape,high,sow,slope,1294,0,0,-0.001317056 +21,spring rape,high,marchfirst,slope,99999,0,0,0 +21,spring rape,high,harvest1,start,-1,0.1,0,10 +21,spring rape,high,harvest2,slope,99999,0,0,0 +121,spring rape,low,janfirst,slope,99999,0,0,0 +121,spring rape,low,sow,start,-1,0,0,0 +121,spring rape,low,sow,slope,105,0.002666667,0.002666667,0.04 +121,spring rape,low,sow,slope,180,0.005333333,0.005333333,0.026666667 +121,spring rape,low,sow,slope,255,0.009333333,0.009333333,0.053333333 +121,spring rape,low,sow,slope,330,0.017346939,0.017346939,0.163265306 +121,spring rape,low,sow,slope,428,0,0,0.357142857 +121,spring rape,low,sow,slope,638,0,0,0 +121,spring rape,low,sow,slope,900,0,-0.00887574,0 +121,spring rape,low,sow,slope,1238,0,0,-0.001012545 +121,spring rape,low,marchfirst,slope,99999,0,0,0 +121,spring rape,low,harvest1,start,-1,0.1,0,10 +121,spring rape,low,harvest2,slope,99999,0,0,0 +22,winter rape,high,janfirst,slope,99999,0,0,0 +22,winter rape,high,sow,start,-1,0,0,0 +22,winter rape,high,sow,slope,105,0.004,0.004,0.04 +22,winter rape,high,sow,slope,180,0.004,0.004,0.026666667 +22,winter rape,high,sow,slope,255,0.0075,0.0075,0.058333333 +22,winter rape,high,sow,slope,375,0.002222222,0.002222222,0.013333333 +22,winter rape,high,sow,slope,600,0,0,0 +22,winter rape,high,marchfirst,slope,0,0,0,0 +22,winter rape,high,marchfirst,slope,92,0.013333333,0.013333333,0.106666667 +22,winter rape,high,marchfirst,slope,167,0.029850746,0.029850746,0.388059701 +22,winter rape,high,marchfirst,slope,234,0,0,0.435146444 +22,winter rape,high,marchfirst,slope,473,0,0,0 +22,winter rape,high,marchfirst,slope,869,0,-0.009960159,0 +22,winter rape,high,marchfirst,slope,1371,0,0,-0.001520866 +22,winter rape,high,harvest1,start,-1,0.1,0,10 +22,winter rape,high,harvest2,slope,99999,0,0,0 +122,winter rape,low,janfirst,slope,99999,0,0,0 +122,winter rape,low,sow,start,-1,0,0,0 +122,winter rape,low,sow,slope,105,0.002666667,0.002666667,0.04 +122,winter rape,low,sow,slope,180,0.005333333,0.005333333,0.026666667 +122,winter rape,low,sow,slope,255,0.011666667,0.011666667,0.041666667 +122,winter rape,low,sow,slope,375,0.002222222,0.002222222,0.017777778 +122,winter rape,low,sow,slope,600,-0.0000252,-0.0000252,-0.000140846 +122,winter rape,low,marchfirst,slope,0,0,0,0 +122,winter rape,low,marchfirst,slope,107,0.004,0.004,0.106666667 +122,winter rape,low,marchfirst,slope,182,0.014634146,0.014634146,0.329268293 +122,winter rape,low,marchfirst,slope,264,0,0,0.334821429 +122,winter rape,low,marchfirst,slope,488,0,0,0 +122,winter rape,low,marchfirst,slope,713,0,-0.005714286,0 +122,winter rape,low,marchfirst,slope,1238,0,0,-0.001215055 +122,winter rape,low,harvest1,start,-1,0.1,0,10 +122,winter rape,low,harvest2,slope,99999,0,0,0 +41,carrots,high,janfirst,slope,99999,0,0,0 +41,carrots,high,sow,start,-1,0,0,0 +41,carrots,high,sow,slope,225,0.000266667,0.000266667,0.026666667 +41,carrots,high,sow,slope,300,0.001066667,0.001066667,0.026666667 +41,carrots,high,sow,slope,375,0.002,0.002,0.026666667 +41,carrots,high,sow,slope,450,0.003333333,0.003333333,0.026666667 +41,carrots,high,sow,slope,525,0.009333333,0.009333333,0.053333333 +41,carrots,high,sow,slope,600,0.005333333,0.005333333,0.053333333 +41,carrots,high,sow,slope,750,0.01,0.01,0.016666667 +41,carrots,high,sow,slope,1050,-0.0000505,-0.0000505,-0.000252655 +41,carrots,high,marchfirst,slope,99999,0,0,0 +41,carrots,high,harvest1,start,-1,0,0,0 +41,carrots,high,harvest2,slope,99999,0,0,0 +141,carrots,low,janfirst,slope,99999,0,0,0 +141,carrots,low,sow,start,-1,0,0,0 +141,carrots,low,sow,slope,225,0.000266667,0.000266667,0.026666667 +141,carrots,low,sow,slope,300,0.001066667,0.001066667,0.026666667 +141,carrots,low,sow,slope,375,0.002,0.002,0.026666667 +141,carrots,low,sow,slope,450,0.003333333,0.004666667,0.026666667 +141,carrots,low,sow,slope,525,0.008,0.006666667,0.04 +141,carrots,low,sow,slope,600,0.004,0.004,0.046666667 +141,carrots,low,sow,slope,750,0.004333333,0.004333333,0.013333333 +141,carrots,low,sow,slope,1050,-0.0000303,-0.0000303,-0.000222337 +141,carrots,low,marchfirst,slope,99999,0,0,0 +141,carrots,low,harvest1,start,-1,0,0,0 +141,carrots,low,harvest2,slope,99999,0,0,0 +5,winter rye,high,janfirst,slope,99999,0,0,0 +5,winter rye,high,sow,start,-1,0,0,0 +5,winter rye,high,sow,slope,83,0.002304147,0.002304147,0.069124424 +5,winter rye,high,sow,slope,300,0,0,0 +5,winter rye,high,marchfirst,slope,0,0,0,0 +5,winter rye,high,marchfirst,slope,107,0.014666667,0.014666667,0.066666667 +5,winter rye,high,marchfirst,slope,182,0.050746269,0.050746269,0.298507463 +5,winter rye,high,marchfirst,slope,249,0,0,0.234741784 +5,winter rye,high,marchfirst,slope,675,0,0,0 +5,winter rye,high,marchfirst,slope,1082,-0.006920415,-0.017301038,0 +5,winter rye,high,marchfirst,slope,1371,0,0,-0.001419475 +5,winter rye,high,harvest1,start,-1,0.3,0,10 +5,winter rye,high,harvest2,slope,99999,0,0,0 +105,winter rye,low,janfirst,slope,99999,0,0,0 +105,winter rye,low,sow,start,-1,0,0,0 +105,winter rye,low,sow,slope,83,0.002304147,0.002304147,0.069124424 +105,winter rye,low,sow,slope,300,-0.00000502,-0.00000502,-0.000150453 +105,winter rye,low,marchfirst,slope,0,0,0,0 +105,winter rye,low,marchfirst,slope,107,0.006666667,0.006666667,0.066666667 +105,winter rye,low,marchfirst,slope,182,0.024390244,0.024390244,0.243902439 +105,winter rye,low,marchfirst,slope,264,0,0,0.194647202 +105,winter rye,low,marchfirst,slope,675,0,0,0 +105,winter rye,low,marchfirst,slope,750,0,-0.005,0 +105,winter rye,low,marchfirst,slope,1350,0,0,-0.001216434 +105,winter rye,low,harvest1,start,-1,0.2,0,10 +105,winter rye,low,harvest2,slope,99999,0,0,0 +7,triticale,high,janfirst,slope,99999,0,0,0 +7,triticale,high,sow,start,-1,0,0,0 +7,triticale,high,sow,slope,83,0.002304147,0.002304147,0.046082949 +7,triticale,high,sow,slope,300,0,0,0 +7,triticale,high,marchfirst,slope,0,0,0,0 +7,triticale,high,marchfirst,slope,107,0.009333333,0.009333333,0.066666667 +7,triticale,high,marchfirst,slope,182,0.026666667,0.026666667,0.133333333 +7,triticale,high,marchfirst,slope,257,0.048648649,0.048648649,0.27027027 +7,triticale,high,marchfirst,slope,294,0,0,0.196850394 +7,triticale,high,marchfirst,slope,675,0,0,0.073710074 +7,triticale,high,marchfirst,slope,1082,0,-0.017301038,0 +7,triticale,high,marchfirst,slope,1371,0,0,-0.001419475 +7,triticale,high,harvest1,start,-1,0.3,0,10 +7,triticale,high,harvest2,slope,99999,0,0,0 +107,triticale,low,janfirst,slope,99999,0,0,0 +107,triticale,low,sow,start,-1,0,0,0 +107,triticale,low,sow,slope,83,0.002304147,0.002304147,0.046082949 +107,triticale,low,sow,slope,300,0,0,0 +107,triticale,low,marchfirst,slope,0,0,0,0 +107,triticale,low,marchfirst,slope,107,0.005333333,0.005333333,0.066666667 +107,triticale,low,marchfirst,slope,182,0.009756098,0.009756098,0.097560976 +107,triticale,low,marchfirst,slope,264,0.029545455,0.029545455,0.272727273 +107,triticale,low,marchfirst,slope,308,0,0,0.177111717 +107,triticale,low,marchfirst,slope,675,0,0,0 +107,triticale,low,marchfirst,slope,750,0,-0.005,0 +107,triticale,low,marchfirst,slope,1350,0,0,-0.001013695 +107,triticale,low,harvest1,start,-1,0.2,0,10 +107,triticale,low,harvest2,slope,99999,0,0,0 +2,winter barley,high,janfirst,slope,99999,0,0,0 +2,winter barley,high,sow,start,-1,0,0,0 +2,winter barley,high,sow,slope,83,0.002304147,0.002304147,0.046082949 +2,winter barley,high,sow,slope,300,0,0,0 +2,winter barley,high,marchfirst,slope,0,0,0,0 +2,winter barley,high,marchfirst,slope,107,0.014666667,0.014666667,0.133333333 +2,winter barley,high,marchfirst,slope,182,0.050746269,0.050746269,0.298507463 +2,winter barley,high,marchfirst,slope,249,0,0,0.18115942 +2,winter barley,high,marchfirst,slope,525,0,0,0 +2,winter barley,high,marchfirst,slope,715,0,-0.01754386,0 +2,winter barley,high,marchfirst,slope,1000,0,0,-0.0009091 +2,winter barley,high,harvest1,start,-1,0.3,0,10 +2,winter barley,high,harvest2,slope,99999,0,0,0 +102,winter barley,low,janfirst,slope,99999,0,0,0 +102,winter barley,low,sow,start,-1,0,0,0 +102,winter barley,low,sow,slope,83,0.002304147,0.002304147,0.046082949 +102,winter barley,low,sow,slope,300,0,0,0 +102,winter barley,low,marchfirst,slope,0,0,0,0 +102,winter barley,low,marchfirst,slope,107,0.006666667,0.006666667,0.133333333 +102,winter barley,low,marchfirst,slope,182,0.024390244,0.024390244,0.243902439 +102,winter barley,low,marchfirst,slope,264,0,0,0.153256705 +102,winter barley,low,marchfirst,slope,525,0,0,0 +102,winter barley,low,marchfirst,slope,638,0,-0.008902077,0 +102,winter barley,low,marchfirst,slope,975,0,0,-0.000807885 +102,winter barley,low,harvest1,start,-1,0.2,0,10 +102,winter barley,low,harvest2,slope,99999,0,0,0 +3,spring wheat,high,janfirst,slope,99999,0,0,0 +3,spring wheat,high,sow,start,-1,0,0,0 +3,spring wheat,high,sow,slope,83,0.004,0.004,0.066666667 +3,spring wheat,high,sow,slope,158,0.006666667,0.006666667,0.066666667 +3,spring wheat,high,sow,slope,233,0.010666667,0.010666667,0.173333333 +3,spring wheat,high,sow,slope,308,0.017333333,0.017333333,0.173333333 +3,spring wheat,high,sow,slope,383,0.028,0.028,0.173333333 +3,spring wheat,high,sow,slope,458,0,0,0.174657534 +3,spring wheat,high,sow,slope,750,0,0,0 +3,spring wheat,high,sow,slope,900,0,-0.014792899,0 +3,spring wheat,high,sow,slope,1238,0,0,-0.001012545 +3,spring wheat,high,marchfirst,slope,99999,0,0,0 +3,spring wheat,high,harvest1,start,-1,0.3,0,10 +3,spring wheat,high,harvest2,slope,99999,0,0,0 +103,spring wheat,low,janfirst,slope,99999,0,0,0 +103,spring wheat,low,sow,start,-1,0,0,0 +103,spring wheat,low,sow,slope,83,0.002666667,0.002666667,0.066666667 +103,spring wheat,low,sow,slope,158,0.004,0.004,0.066666667 +103,spring wheat,low,sow,slope,233,0.006666667,0.006666667,0.16 +103,spring wheat,low,sow,slope,308,0.009333333,0.009333333,0.16 +103,spring wheat,low,sow,slope,383,0.017333333,0.017333333,0.16 +103,spring wheat,low,sow,slope,458,0,0,0.150684932 +103,spring wheat,low,sow,slope,750,0,0,0 +103,spring wheat,low,sow,slope,788,0,-0.007281553,0 +103,spring wheat,low,sow,slope,1200,0,0,-0.00091094 +103,spring wheat,low,marchfirst,slope,99999,0,0,0 +103,spring wheat,low,harvest1,start,-1,0.2,0,10 +103,spring wheat,low,harvest2,slope,99999,0,0,0 +21,spring rape,high,janfirst,slope,99999,0,0,0 +21,spring rape,high,sow,start,-1,0,0,0 +21,spring rape,high,sow,slope,113,0.001785714,0.001785714,0.107142857 +21,spring rape,high,sow,slope,225,0.010666667,0.010666667,0.106666667 +21,spring rape,high,sow,slope,300,0.02,0.02,0.133333333 +21,spring rape,high,sow,slope,375,0.033333333,0.033333333,0.186666667 +21,spring rape,high,sow,slope,450,0,0,0.177339901 +21,spring rape,high,sow,slope,653,0,0,0 +21,spring rape,high,sow,slope,1050,0,-0.014792899,0 +21,spring rape,high,sow,slope,1388,0,0,-0.000811269 +21,spring rape,high,marchfirst,slope,99999,0,0,0 +21,spring rape,high,harvest1,start,-1,0.2,0,10 +21,spring rape,high,harvest2,slope,99999,0,0,0 +60,beet,high,janfirst,slope,99999,0,0,0 +60,beet,high,sow,start,-1,0,0,0 +60,beet,high,sow,slope,150,0.005,0.005,0.033333333 +60,beet,high,sow,slope,210,0.005555556,0.005555556,0.088888889 +60,beet,high,sow,slope,300,0.010666667,0.010666667,0.066666667 +60,beet,high,sow,slope,375,0.017333333,0.017333333,0.066666667 +60,beet,high,sow,slope,450,0.028,0.028,0.066666667 +60,beet,high,sow,slope,525,0,0,0.066666667 +60,beet,high,sow,slope,825,0,-0.0000504,-0.000453748 +60,beet,high,marchfirst,slope,99999,0,0,0 +60,beet,high,harvest1,start,-1,0,0,0 +60,beet,high,harvest2,slope,99999,0,0,0 +160,beet,low,janfirst,slope,99999,0,0,0 +160,beet,low,sow,start,-1,0,0,0 +160,beet,low,sow,slope,150,0.001666667,0.001666667,0.033333333 +160,beet,low,sow,slope,210,0.004444444,0.004444444,0.088888889 +160,beet,low,sow,slope,300,0.006666667,0.006666667,0.066666667 +160,beet,low,sow,slope,375,0.009333333,0.009333333,0.066666667 +160,beet,low,sow,slope,450,0.017333333,0.017333333,0.066666667 +160,beet,low,sow,slope,525,0,0,0.066666667 +160,beet,low,sow,slope,750,0,-0.0000302,-0.000403027 +160,beet,low,marchfirst,slope,99999,0,0,0 +160,beet,low,harvest1,start,-1,0,0,0 +160,beet,low,harvest2,slope,99999,0,0,0 +8,maize,high,janfirst,slope,99999,0,0,0 +8,maize,high,sow,start,-1,0,0,0 +8,maize,high,sow,slope,150,0.001587302,0.001587302,0.095238095 +8,maize,high,sow,slope,465,0.006666667,0.006666667,0.166666667 +8,maize,high,sow,slope,525,0.012,0.012,0.133333333 +8,maize,high,sow,slope,600,0.03047619,0.03047619,0.476190476 +8,maize,high,sow,slope,705,0,0,0.512820513 +8,maize,high,sow,slope,900,0,0,0 +8,maize,high,sow,slope,1356,0,-0.008726003,0 +8,maize,high,sow,slope,1929,0,0,-0.00203936 +8,maize,high,marchfirst,slope,99999,0,0,0 +8,maize,high,harvest1,start,-1,0.2,0,10 +8,maize,high,harvest2,slope,99999,0,0,0 +108,maize,low,janfirst,slope,99999,0,0,0 +108,maize,low,sow,start,-1,0,0,0 +108,maize,low,sow,slope,150,0.001269841,0.001269841,0.079365079 +108,maize,low,sow,slope,465,0.003333333,0.003333333,0.15 +108,maize,low,sow,slope,525,0.006666667,0.006666667,0.12 +108,maize,low,sow,slope,600,0.018095238,0.018095238,0.352380952 +108,maize,low,sow,slope,705,0,0,0.41025641 +108,maize,low,sow,slope,900,0,0,0 +108,maize,low,sow,slope,1275,0,-0.005,0 +108,maize,low,sow,slope,1875,0,0,-0.00163059 +108,maize,low,marchfirst,slope,99999,0,0,0 +108,maize,low,harvest1,start,-1,0.2,0,10 +108,maize,low,harvest2,slope,99999,0,0,0 +26,permanent grassland (grazed),high,janfirst,start,-1,3,1,30 +26,permanent grassland (grazed),high,janfirst,slope,0,-0.005,-0.0025,-0.05 +26,permanent grassland (grazed),high,janfirst,slope,200,-0.00002,-0.00000501,-0.000200403 +26,permanent grassland (grazed),high,sow,slope,99999,0,0,0 +26,permanent grassland (grazed),high,marchfirst,slope,0,0,0,-0.044247788 +26,permanent grassland (grazed),high,marchfirst,slope,113,0.008928571,0.008928571,0.026785714 +26,permanent grassland (grazed),high,marchfirst,slope,225,0.013333333,0.02,0.026666667 +26,permanent grassland (grazed),high,marchfirst,slope,300,0.012,0.025333333,0.066666667 +26,permanent grassland (grazed),high,marchfirst,slope,375,0.0000889,0.0000889,0.04 +26,permanent grassland (grazed),high,marchfirst,slope,1500,-0.0000508,-0.0000508,-0.000710667 +26,permanent grassland (grazed),high,harvest1,slope,99999,0,0,0 +26,permanent grassland (grazed),high,harvest2,slope,99999,0,0,0 +27,permanent grassland (seeded),high,janfirst,start,-1,1.5,1,10 +27,permanent grassland (seeded),high,sow,slope,99999,0,0,0 +27,permanent grassland (seeded),high,marchfirst,slope,0,0,0,0 +27,permanent grassland (seeded),high,marchfirst,slope,107,0,0.004651163,0 +27,permanent grassland (seeded),high,marchfirst,slope,150,0.006666667,0.010666667,0.12 +27,permanent grassland (seeded),high,marchfirst,slope,225,0.022666667,0.022666667,0.12 +27,permanent grassland (seeded),high,marchfirst,slope,300,0.040625,0.040625,0.28125 +27,permanent grassland (seeded),high,marchfirst,slope,332,0,0,0.098939929 +27,permanent grassland (seeded),high,marchfirst,slope,615,0,0,0 +27,permanent grassland (seeded),high,marchfirst,slope,825,0,0,0 +27,permanent grassland (seeded),high,marchfirst,slope,1050,0,-0.016666667,0 +27,permanent grassland (seeded),high,marchfirst,slope,1350,-0.0000507,0,-0.000658902 +27,permanent grassland (seeded),high,harvest1,start,-1,0.5,0,10 +27,permanent grassland (seeded),high,harvest2,slope,99999,0,0,0 +28,NA,high,janfirst,start,-1,1.5,1,10 +28,NA,high,sow,slope,99999,0,0,0 +28,NA,high,marchfirst,slope,0,0,0,0 +28,NA,high,marchfirst,slope,107,0,0.004651163,0 +28,NA,high,marchfirst,slope,150,0.006666667,0.010666667,0.08 +28,NA,high,marchfirst,slope,225,0.020408163,0.020408163,0.081632653 +28,NA,high,marchfirst,slope,274,-0.0000301,-0.0000301,-0.000200552 +28,NA,high,harvest1,slope,99999,0,0,0 +28,NA,high,harvest2,slope,99999,0,0,0 +29,fodder/clover,high,janfirst,start,-1,1.5,1,10 +29,fodder/clover,high,sow,slope,99999,0,0,0 +29,fodder/clover,high,marchfirst,slope,0,0,0,0 +29,fodder/clover,high,marchfirst,slope,107,-0.006976744,0.004651163,0 +29,fodder/clover,high,marchfirst,slope,150,0.010666667,0.010666667,0.12 +29,fodder/clover,high,marchfirst,slope,225,0.022666667,0.022666667,0.12 +29,fodder/clover,high,marchfirst,slope,300,0.040625,0.040625,0.28125 +29,fodder/clover,high,marchfirst,slope,332,0,0,0.083333333 +29,fodder/clover,high,marchfirst,slope,488,-0.0000502,-0.0000502,-0.000502457 +29,fodder/clover,high,harvest1,start,-1,0.5,0.5,10 +29,fodder/clover,high,harvest1,slope,0,0.016666667,0.016666667,0.333333333 +29,fodder/clover,high,harvest1,slope,30,0.006666667,0.006666667,0 +29,fodder/clover,high,harvest1,slope,75,0.012,0.012,0 +29,fodder/clover,high,harvest1,slope,150,0.026666667,0.026666667,0.12 +29,fodder/clover,high,harvest1,slope,225,0.043333333,0.043333333,0.1 +29,fodder/clover,high,harvest1,slope,255,0,0,0.120171674 +29,fodder/clover,high,harvest1,slope,488,-0.0000502,-0.0000502,-0.000502457 +29,fodder/clover,high,harvest2,slope,99999,0,0,0 +65,silage clover/grass,high,janfirst,slope,0,-0.000015,-0.00001,-0.000100001 +65,silage clover/grass,high,sow,slope,99999,0,0,0 +65,silage clover/grass,high,marchfirst,slope,0,0,0,0 +65,silage clover/grass,high,marchfirst,slope,107,0,0.004651163,0 +65,silage clover/grass,high,marchfirst,slope,150,0.006666667,0.010666667,0.12 +65,silage clover/grass,high,marchfirst,slope,225,0.022666667,0.022666667,0.12 +65,silage clover/grass,high,marchfirst,slope,300,0.040625,0.040625,0.28125 +65,silage clover/grass,high,marchfirst,slope,332,0,0,0.083333333 +65,silage clover/grass,high,marchfirst,slope,488,-0.0000502,-0.0000502,-0.000502457 +65,silage clover/grass,high,harvest1,start,-1,0.5,0.5,10 +65,silage clover/grass,high,harvest1,slope,0,0.016666667,0.016666667,0.333333333 +65,silage clover/grass,high,harvest1,slope,30,0.006666667,0.006666667,0 +65,silage clover/grass,high,harvest1,slope,75,0.012,0.012,0 +65,silage clover/grass,high,harvest1,slope,150,0.026666667,0.026666667,0.12 +65,silage clover/grass,high,harvest1,slope,225,0.043333333,0.043333333,0.1 +65,silage clover/grass,high,harvest1,slope,255,0,0,0.120171674 +65,silage clover/grass,high,harvest1,slope,488,-0.0000502,-0.0000502,-0.000502457 +65,silage clover/grass,high,harvest2,slope,99999,0,0,0 +165,silage clover/grass,low,janfirst,slope,0,-0.000015,-0.00001,-0.000100001 +165,silage clover/grass,low,sow,slope,99999,0,0,0 +165,silage clover/grass,low,marchfirst,slope,0,0,0,0 +165,silage clover/grass,low,marchfirst,slope,107,0,0.004651163,0 +165,silage clover/grass,low,marchfirst,slope,150,0.001333333,0.005333333,0.08 +165,silage clover/grass,low,marchfirst,slope,225,0.010666667,0.010666667,0.08 +165,silage clover/grass,low,marchfirst,slope,300,0.021333333,0.021333333,0.08 +165,silage clover/grass,low,marchfirst,slope,375,0,0,0.08 +165,silage clover/grass,low,marchfirst,slope,525,-0.0000402,-0.0000402,-0.000402115 +165,silage clover/grass,low,harvest1,start,-1,0.5,0.5,10 +165,silage clover/grass,low,harvest1,slope,0,0.016666667,0.016666667,0.333333333 +165,silage clover/grass,low,harvest1,slope,30,0.004444444,0.004444444,0 +165,silage clover/grass,low,harvest1,slope,75,0.006666667,0.006666667,0 +165,silage clover/grass,low,harvest1,slope,150,0.012,0.012,0.08 +165,silage clover/grass,low,harvest1,slope,225,0.025333333,0.025333333,0.08 +165,silage clover/grass,low,harvest1,slope,300,0,0,0.08 +165,silage clover/grass,low,harvest1,slope,525,-0.0000402,-0.0000402,-0.000402115 +165,silage clover/grass,low,harvest2,start,-1,0,0,0 +90,natural grass,high,janfirst,start,-1,4.83,0,70.25454545 +90,natural grass,high,janfirst,slope,105,-0.00000981,0,-0.000142697 +90,natural grass,high,sow,slope,99999,0,0,0 +90,natural grass,high,marchfirst,slope,0,0.002249135,0.003460208,0.03271469 +90,natural grass,high,marchfirst,slope,289,0.001231527,0,0.017913121 +90,natural grass,high,marchfirst,slope,695,0.001552795,-0.00310559,0.02258611 +90,natural grass,high,marchfirst,slope,1017,0,0,0 +90,natural grass,high,marchfirst,slope,2619,-0.003988095,0,-0.058008658 +90,natural grass,high,marchfirst,slope,2787,0,0,0 +90,natural grass,high,harvest1,start,-1,1,0,10 +90,natural grass,high,harvest1,slope,0,0.012110727,0.003460208,0.19188424 +90,natural grass,high,harvest1,slope,289,0.001231527,0,0.017913121 +90,natural grass,high,harvest1,slope,695,0.001552795,-0.00310559,0.02258611 +90,natural grass,high,harvest1,slope,1017,0,0,0 +90,natural grass,high,harvest1,slope,2619,-0.003988095,0,-0.058008658 +90,natural grass,high,harvest1,slope,2787,0,0,0 +90,natural grass,high,harvest2,slope,99999,0,0,0 +91,no growth,high,janfirst,slope,99999,0,0,0 +91,no growth,high,sow,slope,99999,0,0,0 +91,no growth,high,marchfirst,slope,99999,0,0,0 +91,no growth,high,harvest1,slope,99999,0,0,0 +91,no growth,high,harvest2,slope,99999,0,0,0 +92,permanent set-aside,high,janfirst,start,-1,2.55024,0.8,30 +92,permanent set-aside,high,janfirst,slope,105,-0.00000518,0,0.0000501 +92,permanent set-aside,high,sow,slope,99999,0,0,0 +92,permanent set-aside,high,marchfirst,slope,0,0.002101038,0.000941176,0.017301038 +92,permanent set-aside,high,marchfirst,slope,289,0.000650246,0.001970443,0.017241379 +92,permanent set-aside,high,marchfirst,slope,695,0,0,0.02484472 +92,permanent set-aside,high,marchfirst,slope,1017,-0.000220824,0,-0.006242197 +92,permanent set-aside,high,marchfirst,slope,2619,0,-0.003571429,-0.05952381 +92,permanent set-aside,high,marchfirst,slope,2787,-0.0000262,-0.0000103,-0.000308604 +92,permanent set-aside,high,harvest1,start,-1,0.6,0.4,15 +92,permanent set-aside,high,harvest1,slope,0,0.006145329,0.001384083,0.069204152 +92,permanent set-aside,high,harvest1,slope,289,0.000650246,0.001970443,0.007389163 +92,permanent set-aside,high,harvest1,slope,695,0.000819876,0,0.01242236 +92,permanent set-aside,high,harvest1,slope,1017,0,0,0 +92,permanent set-aside,high,harvest1,slope,2619,-0.002105714,-0.003571429,-0.029761905 +92,permanent set-aside,high,harvest1,slope,2787,0,-0.0000103,0 +92,permanent set-aside,high,harvest2,slope,99999,0,0,0 +6,oats,high,janfirst,slope,99999,0,0,0 +6,oats,high,sow,slope,0,0,0,0 +6,oats,high,sow,slope,83,0.005466667,0.005466667,0.066666667 +6,oats,high,sow,slope,158,0.01,0.009866667,0.093333333 +6,oats,high,sow,slope,233,0.018266667,0.0184,0.306666667 +6,oats,high,sow,slope,308,0.033378378,0.033378378,0.540540541 +6,oats,high,sow,slope,382,0,0,0.359116022 +6,oats,high,sow,slope,563,0,0,0 +6,oats,high,sow,slope,660,0,0,0 +6,oats,high,sow,slope,675,0,0,0 +6,oats,high,sow,slope,938,-0.011450382,-0.019083969,0 +6,oats,high,sow,slope,1200,0,0,0 +6,oats,high,marchfirst,slope,99999,0,0,0 +6,oats,high,harvest1,start,-1,0.3,0,10 +6,oats,high,harvest2,slope,99999,0,0,0 +106,oats,low,janfirst,slope,99999,0,0,0 +106,oats,low,sow,slope,0,0,0,0 +106,oats,low,sow,slope,83,0.003333333,0.003333333,0.066666667 +106,oats,low,sow,slope,158,0.006,0.006,0.093333333 +106,oats,low,sow,slope,233,0.010933333,0.010933333,0.306666667 +106,oats,low,sow,slope,308,0.009932886,0.009932886,0.268456376 +106,oats,low,sow,slope,457,0,0,0.662650602 +106,oats,low,sow,slope,540,0,0,0 +106,oats,low,sow,slope,623,0,0,0 +106,oats,low,sow,slope,675,-0.00307377,-0.006147541,0 +106,oats,low,sow,slope,1163,0,0,0 +106,oats,low,marchfirst,slope,99999,0,0,0 +106,oats,low,harvest1,start,-1,0.3,0,10 +106,oats,low,harvest2,slope,99999,0,0,0 +50,potatoes,high,janfirst,slope,99999,0,0,0 +50,potatoes,high,sow,slope,0,0,0,0 +50,potatoes,high,sow,slope,225,0.006666667,0.006666667,0.133333333 +50,potatoes,high,sow,slope,300,0.002666667,0.002666667,0.133333333 +50,potatoes,high,sow,slope,375,0.004,0.004,0.133333333 +50,potatoes,high,sow,slope,450,0.005333333,0.005333333,0.133333333 +50,potatoes,high,sow,slope,525,0.009333333,0.009333333,0.133333333 +50,potatoes,high,sow,slope,600,0.012,0.012,0 +50,potatoes,high,sow,slope,675,0,0,0 +50,potatoes,high,sow,slope,938,-0.016666667,-0.02,-0.266666667 +50,potatoes,high,sow,slope,1088,0,0,0 +50,potatoes,high,marchfirst,slope,99999,0,0,0 +50,potatoes,high,harvest1,start,-1,0,0,0 +50,potatoes,high,harvest2,slope,99999,0,0,0 +150,potatoes,low,janfirst,slope,99999,0,0,0 +150,potatoes,low,sow,slope,0,0,0,0 +150,potatoes,low,sow,slope,225,0.008,0.008,0.133333333 +150,potatoes,low,sow,slope,300,0.005333333,0.005333333,0.133333333 +150,potatoes,low,sow,slope,375,0.006666667,0.006666667,0.133333333 +150,potatoes,low,sow,slope,450,0.009333333,0.009333333,0.133333333 +150,potatoes,low,sow,slope,525,0.014666667,0.014666667,0.133333333 +150,potatoes,low,sow,slope,600,0.022666667,0.022666667,0.133333333 +150,potatoes,low,sow,slope,675,0,0,0 +150,potatoes,low,sow,slope,1200,-0.017777778,-0.022222222,-0.222222222 +150,potatoes,low,sow,slope,1425,0,0,0 +150,potatoes,low,marchfirst,slope,99999,0,0,0 +150,potatoes,low,harvest1,start,-1,0,0,0 +150,potatoes,low,harvest2,slope,99999,0,0,0 +99,weeds,high,janfirst,start,-1,1,1,10 +99,weeds,high,sow,slope,99999,0,0,0 +99,weeds,high,marchfirst,start,-1,1.1,1,10 +99,weeds,high,marchfirst,slope,64,0.038461538,0.038461538,0 +99,weeds,high,marchfirst,slope,90,0.022222222,0.022222222,0 +99,weeds,high,marchfirst,slope,135,0.022222222,0.022222222,0 +99,weeds,high,marchfirst,slope,180,0,0,0 +99,weeds,high,marchfirst,slope,199,0,0,0 +99,weeds,high,marchfirst,slope,308,0,0,0 +99,weeds,high,marchfirst,slope,413,-0.007633588,-0.007633588,0 +99,weeds,high,marchfirst,slope,675,-0.004444444,-0.004444444,0 +99,weeds,high,marchfirst,slope,900,-0.00000908,-0.00000908,0 +99,weeds,high,harvest1,start,-1,1.2,0.2,10 +99,weeds,high,harvest1,slope,0,0.019642857,0,0 +99,weeds,high,harvest1,slope,140,0.020833333,0,0 +99,weeds,high,harvest1,slope,188,0,0,0 +99,weeds,high,harvest1,slope,207,0,0,0 +99,weeds,high,harvest1,slope,769,-0.013333333,0,0 +99,weeds,high,harvest1,slope,844,-0.0000101,0,0 +99,weeds,high,harvest2,slope,99999,0,0,0 +112,heath,low,janfirst,start,-1,3.1878,1,46.368 +112,heath,low,janfirst,slope,105,-0.00000647,0,-0.0000942 +112,heath,low,sow,slope,99999,0,0,0 +112,heath,low,marchfirst,start,-1,2.541,0.66,36.96 +112,heath,low,marchfirst,slope,0,0.007958478,0.001176471,0.016608997 +112,heath,low,marchfirst,slope,289,0.000812808,0.002463054,0.01182266 +112,heath,low,marchfirst,slope,695,0,0,0 +112,heath,low,marchfirst,slope,1017,-0.00027603,0,-0.004014981 +112,heath,low,marchfirst,slope,2619,0,0,0 +112,heath,low,marchfirst,slope,2787,-0.0000328,-0.0000206,-0.000476978 +112,heath,low,harvest1,start,-1,0.66,0.5,10 +112,heath,low,harvest1,slope,0,0.00799308,0.001730104,0.114878893 +112,heath,low,harvest1,slope,289,0.000812808,0.002463054,0.01182266 +112,heath,low,harvest1,slope,695,0.001024845,0,0.014906832 +112,heath,low,harvest1,slope,1017,0,0,0 +112,heath,low,harvest1,slope,2619,-0.002632143,0,-0.038285714 +112,heath,low,harvest1,slope,2787,0,-0.0000206,0 +112,heath,low,harvest2,slope,99999,0,0,0 +94,lawn,high,janfirst,start,-1,2.415,0,35.12727273 +94,lawn,high,janfirst,slope,105,-0.00000491,0,-0.0000713 +94,lawn,high,janfirst,slope,0,-0.0000025,0,0.5 +94,lawn,high,sow,slope,99999,0,0,0 +94,lawn,high,marchfirst,start,-1,1.925,0,28 +94,lawn,high,marchfirst,slope,0,0.000865052,0,0.012582573 +94,lawn,high,marchfirst,slope,289,0.000615764,-0.001231527,0.008956561 +94,lawn,high,marchfirst,slope,695,0,0,0 +94,lawn,high,marchfirst,slope,1017,-0.000209114,0,-0.003041652 +94,lawn,high,marchfirst,slope,2619,0,0,0 +94,lawn,high,marchfirst,slope,2787,-0.0000248,0,0.513973303 +94,lawn,high,harvest1,start,-1,0.5,0,5 +94,lawn,high,harvest1,slope,0,0.006055363,0.001730104,0.09594212 +94,lawn,high,harvest1,slope,289,0.000615764,0,0.008956561 +94,lawn,high,harvest1,slope,695,0.000776398,-0.001552795,0.011293055 +94,lawn,high,harvest1,slope,1017,0,0,0 +94,lawn,high,harvest1,slope,2619,-0.001994048,0,-0.029004329 +94,lawn,high,harvest1,slope,2787,0,0,0 +94,lawn,high,harvest1,slope,0,-0.0000025,0,0.5 +94,lawn,high,harvest2,slope,99999,0,0,0 +25,permanent grassland (low yield),high,janfirst,start,-1,3,1,20 +25,permanent grassland (low yield),high,janfirst,slope,0,-0.005,-0.0025,-0.025 +25,permanent grassland (low yield),high,janfirst,slope,200,-0.00002,-0.00000501,-0.000150302 +25,permanent grassland (low yield),high,sow,slope,99999,0,0,0 +25,permanent grassland (low yield),high,marchfirst,slope,0,0,0,-0.026548673 +25,permanent grassland (low yield),high,marchfirst,slope,113,0.008928571,0.008928571,0.053571429 +25,permanent grassland (low yield),high,marchfirst,slope,225,0.013333333,0.02,0.026666667 +25,permanent grassland (low yield),high,marchfirst,slope,300,0.012,0.025333333,0.066666667 +25,permanent grassland (low yield),high,marchfirst,slope,375,0.0000889,0.0000889,0.031111111 +25,permanent grassland (low yield),high,marchfirst,slope,1500,-0.0000508,-0.0000508,-0.000609143 +25,permanent grassland (low yield),high,harvest1,slope,99999,0,0,0 +25,permanent grassland (low yield),high,harvest2,slope,99999,0,0,0 +70,lucerne,high,janfirst,slope,99999,0,0,0 +70,lucerne,high,sow,start,-1,0,0,0 +70,lucerne,high,sow,slope,107,-0.006976744,0.004651163,0 +70,lucerne,high,sow,slope,150,0.010666667,0.010666667,0.12 +70,lucerne,high,sow,slope,225,0.022666667,0.022666667,0.12 +70,lucerne,high,sow,slope,300,0.040625,0.040625,0.28125 +70,lucerne,high,sow,slope,332,0,0,0.083333333 +70,lucerne,high,sow,slope,488,-0.0000502457,-0.0000502457,-0.000502457 +70,lucerne,high,marchfirst,slope,99999,0,0,0 +70,lucerne,high,harvest1,start,-1,0.5,0.5,10 +70,lucerne,high,harvest1,slope,0,0.016666667,0.016666667,0.333333333 +70,lucerne,high,harvest1,slope,30,0.006666667,0.006666667,0 +70,lucerne,high,harvest1,slope,75,0.012,0.012,0 +70,lucerne,high,harvest1,slope,150,0.026666667,0.026666667,0.12 +70,lucerne,high,harvest1,slope,225,0.043333333,0.043333333,0.1 +70,lucerne,high,harvest1,slope,255,0,0,0.120171674 +70,lucerne,high,harvest1,slope,488,-0.0000502457,-0.0000502457,-0.000502457 +70,lucerne,high,harvest2,slope,99999,0,0,0 diff --git a/data/crops/almass/crop_data_general.csv b/data/crops/almass/crop_data_general.csv index 806fdd7a87078e676dad57951561db6a6d45a7a8..c779dec5fa35c5777bb5363b88a81dbd8556bddc 100644 --- a/data/crops/almass/crop_data_general.csv +++ b/data/crops/almass/crop_data_general.csv @@ -6,7 +6,7 @@ name,minsowdate,maxsowdate,minharvestdate,maxharvestdate,mingrowthtemp,group "winter barley","15 September","30 September",NA,NA,0,"grain" "spring barley","1 March","10 April",NA,NA,0,"grain" "undersown spring barley",NA,NA,NA,NA,0,"grain" -"winter rye","23 September","15 October",NA,NA,NA,NA,"grain" +"winter rye","23 September","15 October",NA,NA,NA,"grain" "triticale","25 September","10 October",NA,NA,NA,"grain" "oats",NA,NA,NA,NA,NA,"grain" "maize","15 April","30 April",NA,NA,8,"grain" diff --git a/data/farm/standard_gross_margins.csv b/data/farm/standard_gross_margins.csv new file mode 100644 index 0000000000000000000000000000000000000000..4d44815ddf9327c5d5458033953ec0b6b17e56f7 --- /dev/null +++ b/data/farm/standard_gross_margins.csv @@ -0,0 +1,309 @@ +Category,Region,Year,SGM,Yield,Price,Value,Arable_Aid,Total_Output,Variable_Costs +Wheat,Germany,2022,1777,80.9,28.67,2319, ,2319,542 +Wheat,Germany,2021,1077,78.6,18.87,1484, ,1484,407 +Wheat,Germany,2020,824,74.2,16.1,1195, ,1195,371 +Wheat,Germany,2019,772,67.5,17.73,1197, ,1197,425 +Wheat,Germany,2018,699,76.7,14.77,1132, ,1132,433 +Wheat,Germany,2017,690,76.7,14.51,1113, ,1113,423 +Wheat,Germany,2016,691,81.2,14.45,1174, ,1174,483 +Wheat,Germany,2015,865,86.5,15.81,1368, ,1368,502 +Wheat,Germany,2014,915,80.1,17.53,1405, ,1405,490 +Wheat,Germany,2013,1216,73.9,23.01,1700, ,1700,484 +Wheat,Germany,2012,803,70.4,18.57,1308, ,1308,505 +Wheat,Germany,2011,1047,72.3,20.67,1494, ,1494,447 +Wheat,Germany,2010,397,77.9,10.75,837, ,837,440 +Wheat,Germany,2009,654,80.6,14.7,1186, ,1186,531 +Wheat,Germany,2008,1088,68.8,21.41,1473, ,1473,386 +Wheat,Germany,2007,561,71.3,12.8,912, ,912,351 +Wheat,Germany,2006,349,73.9,9.52,704, ,704,355 +Wheat,Germany,2005,759,81,9.3,753,347,1100,341 +Wheat,Germany,2004,845,64.9,12.73,826,346,1173,327 +Wheat,Germany,2003,746,68.4,10.51,719,346,1065,319 +Wheat,Germany,2002,839,78,10.7,835,346,1181,342 +Wheat,Germany,2001,831,72.3,11.38,822,323,1145,314 +Durum wheat ,Germany,2022,1397,55.1,31.2,1719, ,1719,323 +Durum wheat ,Germany,2021,647,53.8,19.64,1057, ,1057,410 +Durum wheat ,Germany,2020,483,49.2,17.61,849, ,849,366 +Durum wheat ,Germany,2019,502,45.8,19.32,867, ,867,365 +Durum wheat ,Germany,2018,528,57.5,17.16,967, ,967,439 +Durum wheat ,Germany,2017,456,53.3,16.67,871, ,871,415 +Durum wheat ,Germany,2016,357,46.5,16.74,763, ,763,406 +Durum wheat ,Germany,2015,743,65.3,19.04,1218, ,1218,475 +Durum wheat ,Germany,2014,696,61.3,19,1141, ,1141,445 +Durum wheat ,Germany,2013,767,49.2,24.83,1197, ,1197,430 +Durum wheat ,Germany,2012,541,47.3,20.83,966, ,966,424 +Durum wheat ,Germany,2011,871,53.1,24.2,1259, ,1259,389 +Durum wheat ,Germany,2010,362,58,13.51,768, ,768,406 +Durum wheat ,Germany,2009,404,59.8,15.2,891, ,891,486 +Durum wheat ,Germany,2008,958,50.1,26.38,1295, ,1295,337 +Durum wheat ,Germany,2007,356,52.9,13.13,681, ,681,324 +Durum wheat ,Germany,2006,423,49.3,15.37,743, ,743,320 +Durum wheat ,Germany,2005,727,61.1,11.96,716,347,1063,336 +Durum wheat ,Germany,2004,725,47.2,14.67,679,346,1025,300 +Durum wheat ,Germany,2003,853,53.1,15.57,810,346,1157,304 +Durum wheat ,Germany,2002,848,51.1,15.74,788,346,1134,286 +Durum wheat ,Germany,2001,709,50.3,13.8,681,323,1004,295 +Rye ,Germany,2022,909,52.7,24.69,1301, ,1301,393 +Rye ,Germany,2021,468,55.2,15.15,836, ,836,369 +Rye ,Germany,2020,339,50.9,13.85,691, ,691,352 +Rye ,Germany,2019,350,42.1,17.02,702, ,702,352 +Rye ,Germany,2018,338,50.9,14.34,715, ,715,377 +Rye ,Germany,2017,318,55.6,12.95,706, ,706,387 +Rye ,Germany,2016,296,56.6,12.64,701, ,701,405 +Rye ,Germany,2015,375,61.2,13.39,803, ,803,428 +Rye ,Germany,2014,426,59.8,14.48,849, ,849,423 +Rye ,Germany,2013,617,54.7,19.51,1046, ,1046,429 +Rye ,Germany,2012,440,41.1,20.86,840, ,840,401 +Rye ,Germany,2011,462,46.3,18.61,844, ,844,382 +Rye ,Germany,2010,100,57,8.85,494, ,494,394 +Rye ,Germany,2009,225,50.8,13.1,652, ,652,427 +Rye ,Germany,2008,500,40.2,20.68,815, ,815,314 +Rye ,Germany,2007,318,49.1,13.11,631, ,631,313 +Rye ,Germany,2006,185,50.9,9.51,474, ,474,290 +Rye ,Germany,2005,517,61.3,7.89,474,347,820,303 +Rye ,Germany,2004,526,42.9,10.91,459,346,805,279 +Rye ,Germany,2003,491,50.3,8.78,433,346,779,288 +Rye ,Germany,2002,621,61.1,9.63,576,346,923,302 +Rye ,Germany,2001,543,49,9.91,476,323,799,256 +Barley ,Germany,2022,1368,67,26.81,1796, ,1796,428 +Barley ,Germany,2021,784,64.1,17.33,1109, ,1109,325 +Barley ,Germany,2020,644,66.8,14.92,996, ,996,352 +Barley ,Germany,2019,656,57.7,17.99,1039, ,1039,383 +Barley ,Germany,2018,634,68.5,14.9,1021, ,1021,386 +Barley ,Germany,2017,520,66,13.59,897, ,897,377 +Barley ,Germany,2016,572,71.1,13.93,990, ,990,418 +Barley ,Germany,2015,643,72.8,14.74,1073, ,1073,430 +Barley ,Germany,2014,689,65.4,16.72,1093, ,1093,404 +Barley ,Germany,2013,915,62.7,20.91,1311, ,1311,396 +Barley ,Germany,2012,662,54.7,19.15,1048, ,1048,386 +Barley ,Germany,2011,762,62.1,18.12,1126, ,1126,364 +Barley ,Germany,2010,269,64.9,9.44,613, ,613,344 +Barley ,Germany,2009,465,61.4,14.41,884, ,884,419 +Barley ,Germany,2008,843,52.2,21.81,1139, ,1139,296 +Barley ,Germany,2007,492,57.1,13.41,766, ,766,274 +Barley ,Germany,2006,299,58.3,9.82,572, ,572,273 +Barley ,Germany,2005,685,64.6,9.48,612,347,959,273 +Barley ,Germany,2004,691,51,11.64,594,346,940,250 +Barley ,Germany,2003,620,54.2,9.68,525,346,872,251 +Barley ,Germany,2002,739,62.3,10.58,660,346,1006,267 +Barley ,Germany,2001,718,57.2,11.08,634,323,956,238 +Oats,Germany,2022,606,42.5,21.58,917, ,917,311 +Oats,Germany,2021,499,45.1,16.51,745, ,745,246 +Oats,Germany,2020,456,40.6,15.81,641, ,641,185 +Oats,Germany,2019,502,40.7,17.42,710, ,710,208 +Oats,Germany,2018,428,44.3,14.53,643, ,643,215 +Oats,Germany,2017,434,46,14.12,649, ,649,215 +Oats,Germany,2016,404,44.9,14.11,634, ,634,230 +Oats,Germany,2015,485,50.3,14.4,724, ,724,240 +Oats,Germany,2014,513,47.6,15.82,753, ,753,240 +Oats,Germany,2013,795,51.5,20.43,1053, ,1053,258 +Oats,Germany,2012,584,43.5,18.88,822, ,822,238 +Oats,Germany,2011,524,42,17.47,734, ,734,210 +Oats,Germany,2010,265,50.2,9.67,486, ,486,221 +Oats,Germany,2009,375,43.8,14.03,614, ,614,239 +Oats,Germany,2008,609,40.6,19.74,801, ,801,191 +Oats,Germany,2007,411,44.7,13.38,598, ,598,186 +Oats,Germany,2006,246,45.3,9.3,422, ,422,176 +Oats,Germany,2005,633,51.3,8.86,455,347,802,168 +Oats,Germany,2004,636,45.3,9.99,453,346,800,164 +Oats,Germany,2003,590,43.3,9.15,396,346,743,152 +Oats,Germany,2002,712,48.6,10.9,530,346,876,164 +Oats,Germany,2001,699,45.7,11.61,531,323,854,155 +Grain maize ,Germany,2022,2007,103.6,26.99,2796, ,2796,790 +Grain maize ,Germany,2021,1187,93,19.03,1771, ,1771,583 +Grain maize ,Germany,2020,725,88.1,16.38,1400, ,1400,674 +Grain maize ,Germany,2019,640,81.4,17.02,1344, ,1344,704 +Grain maize ,Germany,2018,846,105.3,15.5,1583, ,1583,738 +Grain maize ,Germany,2017,737,96.5,15.47,1448, ,1448,711 +Grain maize ,Germany,2016,596,88.8,15.88,1368, ,1368,771 +Grain maize ,Germany,2015,692,107.6,14.59,1523, ,1523,831 +Grain maize ,Germany,2014,826,89.1,18.45,1595, ,1595,769 +Grain maize ,Germany,2013,1474,105.5,22.46,2298, ,2298,824 +Grain maize ,Germany,2012,1225,107.2,19.56,2034, ,2034,809 +Grain maize ,Germany,2011,1069,90.9,20.37,1796, ,1796,728 +Grain maize ,Germany,2010,487,98.6,12.59,1204, ,1204,717 +Grain maize ,Germany,2009,376,99.1,12.4,1192, ,1192,816 +Grain maize ,Germany,2008,1225,94.9,20.58,1894, ,1894,669 +Grain maize ,Germany,2007,538,80.7,14.55,1139, ,1139,601 +Grain maize ,Germany,2006,412,92.7,11.17,1004, ,1004,592 +Grain maize ,Germany,2005,715,91.3,10.63,941,347,1288,573 +Grain maize ,Germany,2004,862,74.5,14.27,1031,346,1378,516 +Grain maize ,Germany,2003,773,93.9,10.97,999,346,1346,573 +Grain maize ,Germany,2002,681,78.5,11.33,863,346,1210,529 +Grain maize ,Germany,2001,554,76.5,10.29,763,323,1086,532 +Potatoes ,Germany,2022,6416,437.9,18.38,8050, ,8050,1634 +Potatoes ,Germany,2021,7049,428.3,19.96,8548, ,8548,1498 +Potatoes ,Germany,2020,7224,390.3,22.14,8643, ,8643,1419 +Potatoes ,Germany,2019,8325,353.8,28.33,10023, ,10023,1698 +Potatoes ,Germany,2018,4160,467.9,11.88,5561, ,5561,1400 +Potatoes ,Germany,2017,6882,444.2,19.02,8448, ,8448,1567 +Potatoes ,Germany,2016,5882,438.1,16.35,7163, ,7163,1280 +Potatoes ,Germany,2015,2619,474.2,7.72,3662, ,3662,1043 +Potatoes ,Germany,2014,8036,398.3,24.01,9562, ,9562,1526 +Potatoes ,Germany,2013,7332,447.5,19.53,8739, ,8739,1407 +Potatoes ,Germany,2012,3896,457.6,11.02,5041, ,5041,1145 +Potatoes ,Germany,2011,7683,398.8,22.63,9026, ,9026,1343 +Potatoes ,Germany,2010,4019,442.6,11.42,5055, ,5055,1036 +Potatoes ,Germany,2009,3927,437.4,11.51,5032, ,5032,1105 +Potatoes ,Germany,2008,7138,324,29.46,9354, ,9354,2216 +Potatoes ,Germany,2007,6718,365.3,22.21,8113, ,8113,1396 +Potatoes ,Germany,2006,3317,419.3,10.1,4234, ,4234,918 +Potatoes ,Germany,2005,663,329.5,4.57,1507, ,1507,844 +Potatoes ,Germany,2004,2005,288.8,10.12,2923, ,2923,917 +Potatoes ,Germany,2003,1682,391.2,6.5,2544, ,2544,862 +Potatoes ,Germany,2002,2684,361.7,10.14,3668, ,3668,984 +Potatoes ,Germany,2001,1184,386.4,5.07,1959, ,1959,774 +Sugar beets ,Germany,2022,1903,817.7,3.34,2731, ,2731,828 +Sugar beets ,Germany,2021,1793,741.5,3.5,2595, ,2595,803 +Sugar beets ,Germany,2020,1551,724.4,2.92,2115, ,2115,564 +Sugar beets ,Germany,2019,1119,632.8,3.13,1981, ,1981,862 +Sugar beets ,Germany,2018,1585,837.5,3.02,2529, ,2529,944 +Sugar beets ,Germany,2017,1898,762.3,3.6,2744, ,2744,847 +Sugar beets ,Germany,2016,1450,721.7,3.3,2382, ,2382,931 +Sugar beets ,Germany,2015,1795,798.6,3.45,2755, ,2755,960 +Sugar beets ,Germany,2014,1932,638.8,4.35,2779, ,2779,846 +Sugar beets ,Germany,2013,2013,688.5,4.35,2995, ,2995,982 +Sugar beets ,Germany,2012,1446,628.7,3.7,2326, ,2326,880 +Sugar beets ,Germany,2011,1053,616.3,2.98,1837, ,1837,783 +Sugar beets ,Germany,2010,1230,675.6,2.98,2013, ,2013,783 +Sugar beets ,Germany,2009,877,622.9,2.78,1732, ,1732,855 +Sugar beets ,Germany,2008,1161,624.3,2.98,1860, ,1860,699 +Sugar beets ,Germany,2007,1258,577.3,3.29,1899, ,1899,642 +Sugar beets ,Germany,2006,2330,601.8,4.9,2949, ,2949,619 +Sugar beets ,Germany,2005,2409,616.5,4.9,3021, ,3021,612 +Sugar beets ,Germany,2004,2001,532.2,4.91,2613, ,2613,612 +Sugar beets ,Germany,2003,2207,605.6,4.68,2834, ,2834,628 +Sugar beets ,Germany,2002,1909,550.1,4.57,2514, ,2514,605 +Sugar beets ,Germany,2001,2065,605,4.41,2668, ,2668,603 +Temporary grass,Germany,2022,544,88,7.41,652, ,652,107 +Temporary grass,Germany,2021,431,71.3,7.4,527, ,527,96 +Temporary grass,Germany,2020,272,62.7,8.2,463, ,463,190 +Temporary grass,Germany,2019,174,50.6,8.2,373, ,373,200 +Temporary grass,Germany,2018,222,76.1,6.8,466, ,466,244 +Temporary grass,Germany,2017,227,75.5,6.8,462, ,462,235 +Temporary grass,Germany,2016,180,80.6,6.8,493, ,493,314 +Temporary grass,Germany,2015,167,80.6,6.8,493, ,493,327 +Temporary grass,Germany,2014,174,80.8,6.8,495, ,495,321 +Temporary grass,Germany,2013,125,84.7,6.8,518, ,518,393 +Temporary grass,Germany,2012,140,79.6,6.8,487, ,487,347 +Temporary grass,Germany,2011,200,77.1,6.8,472, ,472,272 +Temporary grass,Germany,2010,211,77.4,6.5,453, ,453,242 +Temporary grass,Germany,2009,137,80.7,6.5,472, ,472,335 +Temporary grass,Germany,2008,262,85.4,7.1,546, ,546,284 +Temporary grass,Germany,2007,234,72.2,7.1,461, ,461,228 +Temporary grass,Germany,2006,266,86.1,6.5,504, ,504,238 +Temporary grass,Germany,2005,143,90.9,4.5,368, ,368,225 +Temporary grass,Germany,2004,367,67.9,9,550, ,550,183 +Temporary grass,Germany,2003,178,93.9,4.8,406, ,406,228 +Temporary grass,Germany,2002,203,91.3,4.8,394, ,394,191 +Temporary grass,Germany,2001,192,88.2,4.8,381, ,381,189 +Silage maize,Germany,2022,784,401.5,3.2,1285, ,1285,501 +Silage maize,Germany,2021,728,360.3,3.2,1153, ,1153,425 +Silage maize,Germany,2020,457,390,2.8,928, ,928,471 +Silage maize,Germany,2019,318,352.9,2.8,840, ,840,522 +Silage maize,Germany,2018,587,474.6,2.8,1130, ,1130,542 +Silage maize,Germany,2017,492,430.8,2.8,1025, ,1025,534 +Silage maize,Germany,2016,449,413.6,2.8,984, ,984,535 +Silage maize,Germany,2015,556,473.3,2.8,1126, ,1126,570 +Silage maize,Germany,2014,404,389.7,2.8,927, ,927,524 +Silage maize,Germany,2013,550,464.3,2.8,1105, ,1105,555 +Silage maize,Germany,2012,572,476.1,2.8,1133, ,1133,561 +Silage maize,Germany,2011,466,393.8,2.8,937, ,937,471 +Silage maize,Germany,2010,583,445,2.8,1059, ,1059,476 +Silage maize,Germany,2009,527,451.4,2.8,1074, ,1074,548 +Silage maize,Germany,2008,796,469.8,3.1,1238, ,1238,442 +Silage maize,Germany,2007,643,394,3.1,1038, ,1038,395 +Silage maize,Germany,2006,703,454.3,2.8,1081, ,1081,378 +Silage maize,Germany,2005,418,438.4,2.1,783, ,783,365 +Silage maize,Germany,2004,1009,378.5,4.2,1351, ,1351,342 +Silage maize,Germany,2003,448,454.3,2.1,811, ,811,363 +Silage maize,Germany,2002,367,443.3,1.9,716, ,716,349 +Silage maize,Germany,2001,360,449.7,1.9,726, ,726,366 +Rape,Germany,2022,1920,35,72,2520, ,2520,600 +Rape,Germany,2021,930,36.8,36.84,1354, ,1354,423 +Rape,Germany,2020,772,33,35.8,1181, ,1181,409 +Rape,Germany,2019,524,29.9,34.62,1036, ,1036,512 +Rape,Germany,2018,566,32.6,33.52,1093, ,1093,527 +Rape,Germany,2017,746,34.5,36.88,1273, ,1273,526 +Rape,Germany,2016,768,39,34.46,1344, ,1344,576 +Rape,Germany,2015,821,44.7,31.82,1422, ,1422,600 +Rape,Germany,2014,805,39.4,35.36,1393, ,1393,588 +Rape,Germany,2013,1059,36.9,44.89,1657, ,1657,598 +Rape,Germany,2012,730,29.2,43.21,1263, ,1263,533 +Rape,Germany,2011,1076,38.9,41.1,1599, ,1599,524 +Rape,Germany,2010,607,42.8,25.85,1106, ,1106,500 +Rape,Germany,2009,773,37.6,36.65,1378, ,1378,605 +Rape,Germany,2008,800,33.9,36.62,1243, ,1243,443 +Rape,Germany,2007,493,36.9,24.2,894, ,894,400 +Rape,Germany,2006,392,37.2,20.21,751, ,751,359 +Rape,Germany,2005,758,40.6,18.77,763,347,1109,351 +Rape,Germany,2004,746,28.7,24.5,703,346,1050,303 +Rape,Germany,2003,673,29.2,21.33,624,346,970,298 +Rape,Germany,2002,895,36.1,21.45,774,437,1212,317 +Rape,Germany,2001,798,33,18.59,614,494,1108,309 +Sunflower ,Germany,2022,860,26.1,49.27,1286, ,1286,426 +Sunflower ,Germany,2021,261,20.6,31,639, ,639,378 +Sunflower ,Germany,2020,211,20.5,29.42,591, ,591,380 +Sunflower ,Germany,2019,143,18.2,29.16,520, ,520,378 +Sunflower ,Germany,2018,352,21.9,34.34,737, ,737,385 +Sunflower ,Germany,2017,345,21.4,34.54,724, ,724,380 +Sunflower ,Germany,2016,205,19.2,31.92,601, ,601,396 +Sunflower ,Germany,2015,210,23,31.02,699, ,699,490 +Sunflower ,Germany,2014,259,21,35.4,729, ,729,469 +Sunflower ,Germany,2013,492,23.8,41.53,969, ,969,476 +Sunflower ,Germany,2012,253,19.8,36.21,703, ,703,450 +Sunflower ,Germany,2011,339,18.9,36.07,668, ,668,329 +Sunflower ,Germany,2010,171,24.1,20.86,493, ,493,321 +Sunflower ,Germany,2009,407,19.6,40.1,770, ,770,363 +Sunflower ,Germany,2008,304,26.5,23.42,608, ,608,304 +Sunflower ,Germany,2007,135,19.3,21.76,412, ,412,276 +Sunflower ,Germany,2006,263,24.7,21.76,527, ,527,264 +Sunflower ,Germany,2005,451,22.1,16.43,356,347,702,251 +Sunflower ,Germany,2004,455,19.8,18.84,366,346,712,257 +Sunflower ,Germany,2003,570,19.9,24.44,477,346,823,253 +Sunflower ,Germany,2002,736,26.5,21.82,567,437,1005,268 +Sunflower ,Germany,2001,713,25.3,19.41,482,494,976,263 +Soya ,Germany,2022,1253,31.2,58.97,1840, ,1840,587 +Soya ,Germany,2021,627,26.8,45.78,1227, ,1227,599 +Soya ,Germany,2020,421,32.5,20.43,651, ,651,229 +Soya ,Germany,2019,250,29.1,19.57,558, ,558,308 +Soya ,Germany,2018,300,40.7,16.22,647, ,647,347 +Soya ,Germany,2017,259,39.7,15.57,606, ,606,347 +Soya ,Germany,2016,151,35.4,15.16,526, ,526,375 +Soya ,Germany,2015,406,42.7,19.75,826, ,826,420 +Soya ,Germany,2014,333,36.3,19.94,709, ,709,376 +Soya ,Germany,2013,519,38.9,24.01,915, ,915,396 +Soya ,Germany,2012,188,35.6,17.31,604, ,604,416 +Soya ,Germany,2011,101,30.6,15.95,473, ,473,372 +Soya ,Germany,2010,82,39.5,11.39,436, ,436,355 +Soya ,Germany,2009,262,34.5,17.5,586,54,640,377 +Soya ,Germany,2008,349,35.3,17.71,606, ,660,312 +Soya ,Germany,2007,145,32.6,11.77,372, ,426,281 +Soya ,Germany,2006,112,38,9.87,364, ,418,305 +Soya ,Germany,2005,487,41.3,9.99,400,399,799,312 +Soya ,Germany,2004,518,28.8,13.76,384,399,783,265 +Soya ,Germany,2003,467,27.8,12.07,325,399,724,257 +Soya ,Germany,2002,548,34.1,13.03,431,399,830,281 +Soya ,Germany,2001,456,28.9,13,364,399,763,307 +Pasture and meadows,Germany,2022,367,77.9,8.73,680, ,680,313 +Pasture and meadows,Germany,2021,347,58.5,7.95,462, ,462,115 +Pasture and meadows,Germany,2020,320,57.5,7.38,425, ,425,104 +Pasture and meadows,Germany,2019,252,49.2,7.38,363, ,363,111 +Pasture and meadows,Germany,2018,299,68.2,6.12,417, ,417,118 +Pasture and meadows,Germany,2017,304,68.3,6.12,418, ,418,114 +Pasture and meadows,Germany,2016,298,72.6,6.12,444, ,444,146 +Pasture and meadows,Germany,2015,291,72.6,6.12,444, ,444,153 +Pasture and meadows,Germany,2014,314,75.8,6.12,464, ,464,150 +Pasture and meadows,Germany,2013,311,80.1,6.12,490, ,490,179 +Pasture and meadows,Germany,2012,300,76.3,6.12,467, ,467,168 +Pasture and meadows,Germany,2011,304,75.4,6.12,462, ,462,158 +Pasture and meadows,Germany,2010,330,80.8,5.85,473, ,473,143 +Pasture and meadows,Germany,2009,264,79.1,5.85,463, ,463,199 +Pasture and meadows,Germany,2008,364,83,6.39,531, ,531,167 +Pasture and meadows,Germany,2007,381,78,6.39,499, ,499,118 +Pasture and meadows,Germany,2006,357,84,5.85,491, ,491,134 +Pasture and meadows,Germany,2005,217,82.1,4.05,333, ,333,115 +Pasture and meadows,Germany,2004,438,64.6,8.1,523, ,523,85 +Pasture and meadows,Germany,2003,254,85.8,4.32,371, ,371,117 +Pasture and meadows,Germany,2002,245,81.6,4.32,353, ,353,108 +Pasture and meadows,Germany,2001,244,82.6,4.32,357, ,357,113 diff --git a/docs/notebook-almass-vegetation.jl b/docs/notebook-almass-vegetation.jl new file mode 100644 index 0000000000000000000000000000000000000000..aa6bac47831f0449f1ce4c738023a4978fd9c33f --- /dev/null +++ b/docs/notebook-almass-vegetation.jl @@ -0,0 +1,1425 @@ +### A Pluto.jl notebook ### +# v0.19.45 + +using Markdown +using InteractiveUtils + +# ╔═╡ 1ce4cf02-4d80-11ef-0759-99876c2c9002 +begin + using PlutoUI, Unitful, Plots + using Unitful: MJ, m, d + TableOfContents() +end + +# ╔═╡ 26ad42b4-ec55-4c43-b45a-59fe99e8a067 +md""" +# ALMaSS vegetation model + +Based on the information in ALMaSSVegetationModelling.pdf (https://git.idiv.de/persefone/persefone-model/-/blob/master/docs/ALMaSSVegetationModelling.pdf). +""" + +# ╔═╡ eef634af-2157-4f6d-96de-d01ebb3a80a2 +md""" +## TODO + +- calculation of LAI-green from temperature (using growth curves and GDD) + - at the moment daily avg temperature has no effect on LAI-green and hence no + effect on accumulated dry matter + +""" + +# ╔═╡ 6e2001c5-69cc-4830-8426-a35990c1a03d +md""" +## Open questions + +- meaning of: radiation vs normal radiation? +- units of incoming daily radiation? maybe: MJ/m^2/day +""" + +# ╔═╡ 01331c5a-00bd-4504-85ac-d7aec1a0c14d +md""" + +## Variables used in the model + +- `ε`: radiation use efficiency (g/MJ) +- `ϕ`: fraction of incoming light intercepted by crop canopy (0 to 1, no units) + - `ϕ(LAI_green(d))`, where `LAI_green(d)` is the green leaf area index (m^2/m^2) +- `f(T)`: effect of temperature `T` (K or °C) on dry matter growth (no units) +- `R(d)`: incoming global radiation (MJ/m^2) +- `p(d)`: effect of fertiliser (no units) + +- `LAI_green(d)` is taken from empirical curves, taking into account `gdd`, + `LAI_total` also includes dead leaves +- `gdd`: growing-degree-days (unit "K days"), + - `gdd(n)=sum(max(0, (max_or_avg_temp(d) - min_growth_temp) for d = 1:n)` + +""" + +# ╔═╡ f3e009e2-c565-41dc-b35d-096400e867c3 +md""" +## Accumulated dry matter: W +""" + +# ╔═╡ 6534f518-9465-4bd2-9f74-51a12bdc412f +md""" +## Growing-degree days: GDD +""" + +# ╔═╡ 1488ab39-d9f7-48a6-a22c-8ad4a90e17f5 +""" + gdd(n): growing-degree days (d K, day Kelvin) +""" +function gdd(n::Integer; + avg_daily_temperature = d -> 14.0u"°C", + min_growth_temperature = 10.0u"°C") + # TODO: check if formula is correct + g = sum(max(0.0u"K", avg_daily_temperature(d) - min_growth_temperature) + for d = 1:n) + return g * 1.0u"d" +end + +# ╔═╡ c489e5c3-24b1-48c8-b587-7e75154722ef +let + x = range(1, 15) + # artificial avg daily temperature data + avgT = (0.5 * sin.(x).^2 .+ 9.8) * u"°C" + min_growth_temperature = 10.0u"°C" + y_gdd = ustrip.(gdd.(x; avg_daily_temperature = d -> avgT[d])) + y_avgT = ustrip.(avgT) + y_minT = [ustrip(min_growth_temperature) for _ in eachindex(x)] + p1 = plot(x, y_gdd; + title="Growing-degree days (GDD)", + label="GDD (day K)", + xlabel="Day number", + xticks=x, + ylabel="Growing-degree days (day K)", + color=:green, + legend=:topleft, + marker=:circle) + plot!(twinx(), x, [y_minT y_avgT]; + label=["Min growth temperature" "Daily avg temperature"], + ylabel="Daily average temperature (°C)", + legend=:topright, + marker=[:none :circle]) +end + +# ╔═╡ 38158dbc-a702-4c86-8cda-6e08c631a22a +md""" +## Fraction of intercepted light: ϕ +""" + +# ╔═╡ 5800ddc2-4fcb-452b-901f-7eb510aea4f5 +""" + ϕ(LAI_green): fraction of intercepted light (no units, 0 to 1) + +Arguments: + - `LAI_green`: leaf area index of green leaves (green leaf cover m^2 / ground area m^2) +""" +function ϕ(LAI_green) + """ + k: extinction coefficient (no units), set to k = 0.4 in general + """ + k = 0.4u"m^2/m^2" + + 1 - exp(-k * LAI_green) +end + +# ╔═╡ 41411efa-5ff7-4e79-b6ee-d932b506758c +let + x = range(0, 10, length=100) + y = ϕ.(x) + plot(x, y; + title="Fraction of light intercepted by green leaves", + label="fraction of intercepted light ϕ", + xlabel="LAI-Green, green leaf area index (leaf cover m^2 / area m^2)", + ylabel="Fraction intercepted light (no units)") +end + +# ╔═╡ 1bef060e-f0cc-4359-941b-9b1e06895fd7 +md""" +## Incoming daily solar radiation: R +""" + +# ╔═╡ 551ee825-d63c-420c-980c-2d1bbf12dec0 +""" + R_Odum(d): normal daily global radiation (MJ m^-2) in Ødum, Denmark + +Arguments: +- `d`: day of the year (1 to 365, no units) +""" +function R_Odum(d::Real) + # Fourier series approx. for Ødum, Denmark + ω = 2π / 365 + b₀ = 9.478 + b₁ = -9.221 + b₂ = 1.458 + b₃ = 0.653 + b₄ = -0.421 + + return (b₀ + + b₁ * cos(ω * d) + + b₂ * sin(ω * d) + + b₃ * cos(2 * ω * d) + + b₄ * sin(2 * ω * d)) * u"MJ/m^2" +end + +# ╔═╡ 5dbf2aac-0cf0-4a15-b1cb-d804eed52a4f +""" + W(n): accumulated dry matter at day `n` (g/m^2) + + W(n :: Integer; + biomass_per_light_energy :: Real, # (g/MJ) + daily_avg_temperature :: Function{d::Int -> T(d)::Real}, # (°C) + LAI_green :: Function{d::Int -> L(d)::Real}, # (no unit) + temperature_scaling :: Function{T -> f(T)}, # (no unit) + fertiliser_scaling :: Function{d -> p(d)}, # (no unit) + incoming_radiation :: Function{d -> R(d)}) # (MJ/m^2) + +Formula used: + `W(n) = sum(ε * ϕ(L(d)) * f(T(d)) * R(d) * p(d) for d = 1:n)` + +Arguments +- `biomass_per_light_energy`, `ε` +- `daily_avg_temperature`, `T(d)` +- `LAI_green`, `L(d)` +- `temperature_scaling`, `f(T)` +- `fertiliser_scaling`, `p(d)` + +Formula from pdf: + `W(n) = sum(ε * ϕ * f(T) * R(d) for d = 1:n)` +""" +function W(n::Integer; + biomass_per_light_energy = 1.4u"g/MJ", # ε + daily_avg_temperature = d -> 15u"°C", # T(d) + LAI_green = d -> 5.0u"m^2/m^2", # L(d) + temperature_scaling = T -> 1.0, # f(T) + fertiliser_scaling = d -> 1.0, # p(d) + incoming_radiation = R_Odum) # R(d) + ε = biomass_per_light_energy + T = daily_avg_temperature + L = LAI_green + f = temperature_scaling + p = fertiliser_scaling + R = incoming_radiation + sum(ε * ϕ(L(d)) * f(T(d)) * R(d) * p(d) for d = 1:n) +end + +# ╔═╡ 3d3fba49-beb0-4521-b787-b3a5455796e0 +# ╠═╡ disabled = true +#=╠═╡ +let + x = range(1, 365, length=365) + + # artificial data for daily avg temperature + T(d) = (cos(d * 2π/365 + 0.9π) .* 8 .+ 10) * u"°C" + yT = ustrip.(T.(x)) + + function L(d) + # TODO: assumes 1 <= d <= 365 + L_start = 0.01 + L_level = 8.0 + L_end = 0.01 + d_rampup = 75 + d_level = 150 + d_rampdown = 220 + d_end = 250 + return if 0 <= d < d_rampup + L_start + elseif d_rampup <= d < d_level + L_start + (d - d_rampup) * (L_level - L_start) / (d_level - d_rampup) + elseif d_level <= d < d_rampdown + L_start + L_level + elseif d_rampdown <= d < d_end + L_start + L_level - (d - d_rampdown) * (L_level - L_end) / (d_end - d_rampdown) + elseif d_end <= d <= 365 + return L_end + else + error("Illegal day $d, has to be 0 <= d <= 365") + end * u"m^2/m^2" + end + yL = L.(x) + + y = W.(Int.(x); + daily_avg_temperature = T, + incoming_radiation = R_Odum, + ) + p1 = plot(x, y; + title="Accumulated dry matter: W", + label="Dry matter in g / m^2", + xlabel="Day of the year (1 to 365)", + ylabel="Accumulated dry matter" + ) + p1 = plot!(twinx(), yT; + label="Daily avg temp (°C)", + color="red", + ylabel="Daily avg temperature (°C)", + ) + p2 = plot(x, yL; + title = "Green leaf area index (LAI-green)", + label = "LAI-green", + xlabel="Day of the year (1 to 365)", + ylabel="LAI-green", + #marker = :circle, + ) + plot(p1, p2; layout=(2,1), size=(600,600)) +end + ╠═╡ =# + +# ╔═╡ 08624eb0-465b-411d-9706-104382aef0ff +let + x = range(1, 365, length=365) + y = R_Odum.(x) + plot(x, y; + title="Fourier series approximation to\n" * + "incoming daily radiation in Ødum, Denmark", + label="R: radiation in MJ m^-2", + xlabel="Day of the year (1 to 365)", + ylabel="Incoming daily radiation") +end + +# ╔═╡ 2cf7ef76-1f47-48b0-9d85-0f967d15d537 + + +# ╔═╡ 00000000-0000-0000-0000-000000000001 +PLUTO_PROJECT_TOML_CONTENTS = """ +[deps] +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8" +Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[compat] +Plots = "~1.40.4" +PlutoUI = "~0.7.59" +Unitful = "~1.21.0" +""" + +# ╔═╡ 00000000-0000-0000-0000-000000000002 +PLUTO_MANIFEST_TOML_CONTENTS = """ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.10.4" +manifest_format = "2.0" +project_hash = "3997c5570c6910da9b4b35c84f95ad83ce6a683d" + +[[deps.AbstractPlutoDingetjes]] +deps = ["Pkg"] +git-tree-sha1 = "6e1d2a35f2f90a4bc7c2ed98079b2ba09c35b83a" +uuid = "6e696c72-6542-2067-7265-42206c756150" +version = "1.3.2" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.BitFlags]] +git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d" +uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" +version = "0.1.9" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9e2a6b69137e6969bab0152632dcb3bc108c8bdd" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+1" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "a2f1c8c668c8e3cb4cca4e57a8efdb09067bb3fd" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.18.0+2" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "bce6804e5e6044c6daab27bb533d1295e4a2e759" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.6" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "b5278586822443594ff615963b0c09755771b3e0" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.26.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.5" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] +git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.10.0" + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" + + [deps.ColorVectorSpace.weakdeps] + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "362a287c3aa50601b0bc359053d5c2468f0e7ce0" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.11" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.16.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "ea32b83ca4fefa1768dc84e504cc0a94fb1ab8d1" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.4.2" + +[[deps.Contour]] +git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.6.3" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.20" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.Dbus_jll]] +deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "fc173b380865f70627d7dd1190dc2fce6cc105af" +uuid = "ee1fde0b-3d02-5ea6-8484-8dfef6360eab" +version = "1.14.10+0" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.EpollShim_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8e9441ee83492030ace98f9789a654a6d0b1f643" +uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43" +version = "0.0.20230411+0" + +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.10" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.6.2+0" + +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.1" + +[[deps.FFMPEG_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "466d45dc38e15794ec7d5d63ec03d776a9aff36e" +uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" +version = "4.4.4+1" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.5" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] +git-tree-sha1 = "db16beca600632c95fc8aca29890d83788dd8b23" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.96+0" + +[[deps.Format]] +git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" +uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" +version = "1.3.7" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "5c1d8ae0efc6c2e7b1fc502cbe25def8f661b7bc" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.13.2+0" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1ed150b39aebcc805c26b93a8d0122c940f64ce2" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.14+0" + +[[deps.GLFW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll", "libdecor_jll", "xkbcommon_jll"] +git-tree-sha1 = "3f74912a156096bd8fdbef211eff66ab446e7297" +uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" +version = "3.4.0+0" + +[[deps.GR]] +deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "UUIDs", "p7zip_jll"] +git-tree-sha1 = "3437ade7073682993e092ca570ad68a2aba26983" +uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" +version = "0.73.3" + +[[deps.GR_jll]] +deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "FreeType2_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "a96d5c713e6aa28c242b0d25c1347e258d6541ab" +uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" +version = "0.73.3+0" + +[[deps.Gettext_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" +uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" +version = "0.21.0+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "7c82e6a6cd34e9d935e9aa4051b66c6ff3af59ba" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.80.2+0" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" +version = "1.0.2" + +[[deps.HTTP]] +deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "d1d712be3164d61d1fb98e7ce9bcbc6cc06b45ed" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "1.10.8" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] +git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "2.8.1+1" + +[[deps.Hyperscript]] +deps = ["Test"] +git-tree-sha1 = "179267cfa5e712760cd43dcae385d7ea90cc25a4" +uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91" +version = "0.0.5" + +[[deps.HypertextLiteral]] +deps = ["Tricks"] +git-tree-sha1 = "7134810b1afce04bbc1045ca1985fbe81ce17653" +uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2" +version = "0.9.5" + +[[deps.IOCapture]] +deps = ["Logging", "Random"] +git-tree-sha1 = "b6d6bfdd7ce25b0f9b2f6b3dd56b2673a66c8770" +uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" +version = "0.2.5" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.JLFzf]] +deps = ["Pipe", "REPL", "Random", "fzf_jll"] +git-tree-sha1 = "a53ebe394b71470c7f97c2e7e170d51df21b17af" +uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" +version = "0.1.7" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.5.0" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c84a835e1a09b289ffcd2271bf2a337bbdda6637" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "3.0.3+0" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.2+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "3.0.0+1" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d986ce2d884d49126836ea94ed5bfb0f12679713" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "15.0.7+0" + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "70c5da094887fd2cae843b8db33920bac4b6f07d" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.2+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.1" + +[[deps.Latexify]] +deps = ["Format", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"] +git-tree-sha1 = "ce5f5621cac23a86011836badfedf664a612cee4" +uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" +version = "0.16.5" + + [deps.Latexify.extensions] + DataFramesExt = "DataFrames" + SparseArraysExt = "SparseArrays" + SymEngineExt = "SymEngine" + + [deps.Latexify.weakdeps] + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.4.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.2+1" + +[[deps.Libgcrypt_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"] +git-tree-sha1 = "9fd170c4bbfd8b935fdc5f8b7aa33532c991a673" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.8.11+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.6.0+0" + +[[deps.Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "fbb1f2bef882392312feb1ede3615ddc1e9b99ed" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.49.0+0" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.17.0+0" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.40.1+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "2da088d113af58221c52828a80378e16be7d037a" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.5.1+1" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "5ee6203157c120d79034c748a2acba45b82b8807" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.40.1+0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.28" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.0.3" + +[[deps.MIMEs]] +git-tree-sha1 = "65f28ad4b594aebe22157d6fac869786a255b7eb" +uuid = "6c6e2e6c-3030-632d-7369-2d6c69616d65" +version = "0.1.4" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.13" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.9" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+1" + +[[deps.Measures]] +git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" +uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" +version = "0.3.2" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.1.10" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.23+4" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+2" + +[[deps.OpenSSL]] +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4" +uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" +version = "1.4.3" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a028ee3cb5641cccc4c24e90c36b0a4f7707bdf5" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.0.14+0" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.2+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.3" + +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.42.0+1" + +[[deps.Pango_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "cb5a2ab6763464ae0f19c86c56c63d4a2b0f5bda" +uuid = "36c8627f-9965-5494-a995-c6b170f724f3" +version = "1.52.2+0" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.1" + +[[deps.Pipe]] +git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d" +uuid = "b98c9c47-44ae-5843-9183-064241ee97a0" +version = "1.3.0" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "35621f10a7531bc8fa58f74610b1bfb70a3cfc6b" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.43.4+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.10.0" + +[[deps.PlotThemes]] +deps = ["PlotUtils", "Statistics"] +git-tree-sha1 = "1f03a2d339f42dca4a4da149c7e15e9b896ad899" +uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" +version = "3.1.0" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "Statistics"] +git-tree-sha1 = "7b1a9df27f072ac4c9c7cbe5efb198489258d1f5" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.4.1" + +[[deps.Plots]] +deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "PrecompileTools", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "UnitfulLatexify", "Unzip"] +git-tree-sha1 = "442e1e7ac27dd5ff8825c3fa62fbd1e86397974b" +uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +version = "1.40.4" + + [deps.Plots.extensions] + FileIOExt = "FileIO" + GeometryBasicsExt = "GeometryBasics" + IJuliaExt = "IJulia" + ImageInTerminalExt = "ImageInTerminal" + UnitfulExt = "Unitful" + + [deps.Plots.weakdeps] + FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" + GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.PlutoUI]] +deps = ["AbstractPlutoDingetjes", "Base64", "ColorTypes", "Dates", "FixedPointNumbers", "Hyperscript", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "MIMEs", "Markdown", "Random", "Reexport", "URIs", "UUIDs"] +git-tree-sha1 = "ab55ee1510ad2af0ff674dbcced5e94921f867a9" +uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8" +version = "0.7.59" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.3" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.Qt6Base_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Vulkan_Loader_jll", "Xorg_libSM_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_cursor_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "libinput_jll", "xkbcommon_jll"] +git-tree-sha1 = "37b7bb7aabf9a085e0044307e1717436117f2b3b" +uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" +version = "6.5.3+1" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.RecipesPipeline]] +deps = ["Dates", "NaNMath", "PlotUtils", "PrecompileTools", "RecipesBase"] +git-tree-sha1 = "45cf9fd0ca5839d06ef333c8201714e888486342" +uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" +version = "0.6.12" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.1" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.2.1" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[deps.SimpleBufferStream]] +git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" +uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" +version = "1.1.0" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.1" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.10.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.3" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.2.1+1" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "e84b3a11b9bece70d14cce63406bbc79ed3464d2" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.11.2" + +[[deps.Tricks]] +git-tree-sha1 = "7822b97e99a1672bfb1b49b668a6d46d58d8cbcb" +uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775" +version = "0.1.9" + +[[deps.URIs]] +git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.5.1" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.Unitful]] +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "d95fe458f26209c66a187b1114df96fd70839efd" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.21.0" + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + InverseFunctionsUnitfulExt = "InverseFunctions" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.UnitfulLatexify]] +deps = ["LaTeXStrings", "Latexify", "Unitful"] +git-tree-sha1 = "e2d817cc500e960fdbafcf988ac8436ba3208bfd" +uuid = "45397f5d-5981-4c77-b2b3-fc36d6e9b728" +version = "1.6.3" + +[[deps.Unzip]] +git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" +uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" +version = "0.2.0" + +[[deps.Vulkan_Loader_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Wayland_jll", "Xorg_libX11_jll", "Xorg_libXrandr_jll", "xkbcommon_jll"] +git-tree-sha1 = "2f0486047a07670caad3a81a075d2e518acc5c59" +uuid = "a44049a8-05dd-5a78-86c9-5fde0876e88c" +version = "1.3.243+0" + +[[deps.Wayland_jll]] +deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "7558e29847e99bc3f04d6569e82d0f5c54460703" +uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" +version = "1.21.0+1" + +[[deps.Wayland_protocols_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "93f43ab61b16ddfb2fd3bb13b3ce241cafb0e6c9" +uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" +version = "1.31.0+0" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "d9717ce3518dc68a99e6b96300813760d887a01d" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.13.1+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "a54ee957f4c86b526460a720dbc882fa5edcbefc" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.41+0" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "ac88fb95ae6447c8dda6a5503f3bafd496ae8632" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.4.6+0" + +[[deps.Xorg_libICE_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "326b4fea307b0b39892b3e85fa451692eda8d46c" +uuid = "f67eecfb-183a-506d-b269-f58e52b52d7c" +version = "1.1.1+0" + +[[deps.Xorg_libSM_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libICE_jll"] +git-tree-sha1 = "3796722887072218eabafb494a13c963209754ce" +uuid = "c834827a-8449-5923-a945-d239c165b7dd" +version = "1.2.4+0" + +[[deps.Xorg_libX11_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "afead5aba5aa507ad5a3bf01f58f82c8d1403495" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.6+0" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.11+0" + +[[deps.Xorg_libXcursor_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" +uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" +version = "1.2.0+4" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.4+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "d2d1a5c49fae4ba39983f63de6afcbea47194e85" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.6+0" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "5.0.3+4" + +[[deps.Xorg_libXi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] +git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" +uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" +version = "1.7.10+4" + +[[deps.Xorg_libXinerama_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] +git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" +uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" +version = "1.1.4+4" + +[[deps.Xorg_libXrandr_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" +uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" +version = "1.5.2+4" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "47e45cd78224c53109495b3e324df0c37bb61fbe" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.11+0" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.1+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "bcd466676fef0878338c61e655629fa7bbc69d8e" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.17.0+0" + +[[deps.Xorg_libxkbfile_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "730eeca102434283c50ccf7d1ecdadf521a765a4" +uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" +version = "1.1.2+0" + +[[deps.Xorg_xcb_util_cursor_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_jll", "Xorg_xcb_util_renderutil_jll"] +git-tree-sha1 = "04341cb870f29dcd5e39055f895c39d016e18ccd" +uuid = "e920d4aa-a673-5f3a-b3d7-f755a4d47c43" +version = "0.1.4+0" + +[[deps.Xorg_xcb_util_image_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" +uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] +git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" +uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_keysyms_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" +uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_renderutil_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" +uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" +version = "0.3.9+1" + +[[deps.Xorg_xcb_util_wm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" +uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" +version = "0.4.1+1" + +[[deps.Xorg_xkbcomp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] +git-tree-sha1 = "330f955bc41bb8f5270a369c473fc4a5a4e4d3cb" +uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" +version = "1.4.6+0" + +[[deps.Xorg_xkeyboard_config_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"] +git-tree-sha1 = "691634e5453ad362044e2ad653e79f3ee3bb98c3" +uuid = "33bec58e-1273-512f-9401-5d533626f822" +version = "2.39.0+0" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.5.0+0" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e678132f07ddb5bfa46857f0d7620fb9be675d3b" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.6+0" + +[[deps.eudev_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "gperf_jll"] +git-tree-sha1 = "431b678a28ebb559d224c0b6b6d01afce87c51ba" +uuid = "35ca27e7-8b34-5b7f-bca9-bdc33f59eb06" +version = "3.2.9+0" + +[[deps.fzf_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a68c9655fbe6dfcab3d972808f1aafec151ce3f8" +uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" +version = "0.43.0+0" + +[[deps.gperf_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3516a5630f741c9eecb3720b1ec9d8edc3ecc033" +uuid = "1a1c6b14-54f6-533d-8383-74cd7377aa70" +version = "3.1.1+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1827acba325fdcdf1d2647fc8d5301dd9ba43a9d" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.9.0+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.1+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.8.0+1" + +[[deps.libdecor_jll]] +deps = ["Artifacts", "Dbus_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pango_jll", "Wayland_jll", "xkbcommon_jll"] +git-tree-sha1 = "9bf7903af251d2050b467f76bdbe57ce541f7f4f" +uuid = "1183f4f0-6f2a-5f1a-908b-139f9cdfea6f" +version = "0.2.2+0" + +[[deps.libevdev_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "141fe65dc3efabb0b1d5ba74e91f6ad26f84cc22" +uuid = "2db6ffa8-e38f-5e21-84af-90c45d0032cc" +version = "1.11.0+0" + +[[deps.libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.2+0" + +[[deps.libinput_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "eudev_jll", "libevdev_jll", "mtdev_jll"] +git-tree-sha1 = "ad50e5b90f222cfe78aa3d5183a20a12de1322ce" +uuid = "36db933b-70db-51c0-b978-0f229ee0e533" +version = "1.18.0+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "d7015d2e18a5fd9a4f47de711837e980519781a4" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.43+1" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "490376214c4721cdaca654041f635213c6165cb3" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+2" + +[[deps.mtdev_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "814e154bdb7be91d78b6802843f76b6ece642f11" +uuid = "009596ad-96f7-51b1-9f1b-5ce2d5e8a71e" +version = "1.1.6+0" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.52.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+2" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2021.5.5+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "3.5.0+0" + +[[deps.xkbcommon_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] +git-tree-sha1 = "9c304562909ab2bab0262639bd4f444d7bc2be37" +uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" +version = "1.4.1+1" +""" + +# ╔═╡ Cell order: +# ╟─26ad42b4-ec55-4c43-b45a-59fe99e8a067 +# ╟─eef634af-2157-4f6d-96de-d01ebb3a80a2 +# ╟─6e2001c5-69cc-4830-8426-a35990c1a03d +# ╟─01331c5a-00bd-4504-85ac-d7aec1a0c14d +# ╠═1ce4cf02-4d80-11ef-0759-99876c2c9002 +# ╟─f3e009e2-c565-41dc-b35d-096400e867c3 +# ╠═5dbf2aac-0cf0-4a15-b1cb-d804eed52a4f +# ╠═3d3fba49-beb0-4521-b787-b3a5455796e0 +# ╟─6534f518-9465-4bd2-9f74-51a12bdc412f +# ╠═1488ab39-d9f7-48a6-a22c-8ad4a90e17f5 +# ╠═c489e5c3-24b1-48c8-b587-7e75154722ef +# ╟─38158dbc-a702-4c86-8cda-6e08c631a22a +# ╠═5800ddc2-4fcb-452b-901f-7eb510aea4f5 +# ╠═41411efa-5ff7-4e79-b6ee-d932b506758c +# ╟─1bef060e-f0cc-4359-941b-9b1e06895fd7 +# ╠═551ee825-d63c-420c-980c-2d1bbf12dec0 +# ╠═08624eb0-465b-411d-9706-104382aef0ff +# ╠═2cf7ef76-1f47-48b0-9d85-0f967d15d537 +# ╟─00000000-0000-0000-0000-000000000001 +# ╟─00000000-0000-0000-0000-000000000002 diff --git a/src/Persefone.jl b/src/Persefone.jl index 96606884cbb3cacc9c2213399a02f584ec8de1c4..f5aa7b43f3baebe84b6d0b7b38548b558522f12a 100644 --- a/src/Persefone.jl +++ b/src/Persefone.jl @@ -95,6 +95,8 @@ export @walk, @follow, @destroynest, + @sow, + @harvest, #functions simulate, simulate!, @@ -147,6 +149,7 @@ include("crop/almass.jl") include("crop/simplecrop.jl") include("farm/farm.jl") +include("farm/farmdata.jl") include("nature/insects.jl") include("nature/energy.jl") diff --git a/src/analysis/makieplots.jl b/src/analysis/makieplots.jl index fd92184ef022a3e6d32e76153034a7ff72cd2bf7..70ba8ce93fbeab50d95d77cec4c3be01d910ebe5 100644 --- a/src/analysis/makieplots.jl +++ b/src/analysis/makieplots.jl @@ -59,9 +59,9 @@ function populationtrends(model::SimulationModel) update_theme!(palette=(color=cgrad(:seaborn_bright, ncolors),), cycle=[:color]) f = Figure() dates = @param(core.startdate):@param(core.enddate) - axlimits = (1, length(dates), 0, maximum(pops[!,:Abundance])) + axlimits = (1, length(dates), 0, maximum(pops[!,:Abundance])*1.1) ax = Axis(f[1,1], xlabel="Date", ylabel="Population size", - limits=axlimits, xticks=gettickmarks(dates)) + limits=axlimits, xticks=datetickmarks(dates)) for s in @param(nature.targetspecies) points = @select!(@subset(pops, :Species .== s), :Abundance) iszero(size(points)[1]) && continue @@ -84,7 +84,7 @@ function skylarkpopulation(model::SimulationModel) dates = @param(core.startdate):@param(core.enddate) axlimits = (1, length(dates), 0, maximum(pops[!,:TotalAbundance])) ax = Axis(f[1,1], xlabel="Date", ylabel="Population size", - limits=axlimits, xticks=gettickmarks(dates)) + limits=axlimits, xticks=datetickmarks(dates)) lines!(f[1,1], Vector{Float32}(pops.TotalAbundance), linewidth=3, label="Total abundance") lines!(f[1,1], Vector{Float32}(pops.Mating), linewidth=3, label="Mating") lines!(f[1,1], Vector{Float32}(pops.Breeding), linewidth=3, label="Breeding") @@ -126,12 +126,45 @@ function skylarkstats(model::SimulationModel) end """ - gettickmarks(dates) + croptrends(model) + +Plot a dual line graph of cropped area and average plant height per crop over time. +Returns a Makie figure object. +""" +function croptrends(model::SimulationModel) + cropdata = @data("fields") + f = Figure(size=(1200,1000)) + dates = @param(core.startdate):@param(core.enddate) + # plot cropped area over time + axlimitsarea = (1, length(dates), 0, maximum(cropdata[!,:Area])*1.1) + ax1 = Axis(f[1,1], xlabel="Date", ylabel="Cropped area (ha)", + limits=axlimitsarea, xticks=datetickmarks(dates)) + for c in unique(cropdata.Crop) + points = @select!(@subset(cropdata, :Crop .== c), :Area) + (iszero(size(points)[1]) || iszero(sum(points.Area))) && continue + lines!(f[1,1], Vector{Float32}(points.Area), linewidth=3, label=c) + end + axislegend("Crop"; position=:rt) + # plot average crop height over time + axlimitsheight = (1, length(dates), 0, maximum(cropdata[!,:Height])*1.1) + ax2 = Axis(f[2,1], xlabel="Date", ylabel="Average plant height (cm)", + limits=axlimitsheight, xticks=datetickmarks(dates)) + for c in unique(cropdata.Crop) + points = @select!(@subset(cropdata, :Crop .== c), :Height) + (iszero(size(points)[1]) || iszero(sum(points.Height))) && c != "no growth" && continue + lines!(f[2,1], Vector{Float32}(points.Height), linewidth=3, label=c) + end + axislegend("Crop"; position=:rt) + f +end + +""" + datetickmarks(dates) Given a vector of dates, construct a selection to use as tick mark locations. Helper function for `[populationtrends](@ref)` """ -function gettickmarks(dates) +function datetickmarks(dates) ticks = (Int[], String[]) for i in 1:length(dates) if Day(dates[i]) == Day(1) @@ -147,5 +180,3 @@ function gettickmarks(dates) end #XXX add animation with record()? https://docs.makie.org/stable/explanations/animation/ - -#TODO causes of mortality, nesting habitats, territory sizes diff --git a/src/core/output.jl b/src/core/output.jl index 40dad75cc22facf77c859cb0d5fafa33a17c0a8e..4b3fd9712dba0b15a4d3bc97c324446368522479 100644 --- a/src/core/output.jl +++ b/src/core/output.jl @@ -257,7 +257,7 @@ function visualiseoutput(model::SimulationModel) #XXX remove this? (#81) CairoMakie.activate!() # make sure we're using Cairo for o in keys(model.dataoutputs) output = model.dataoutputs[o] - isnothing(output.plotfunction) && continue + (output.frequency == "never" || isnothing(output.plotfunction)) && continue figure = output.plotfunction(model) isnothing(figure) ? continue : save(joinpath(@param(core.outdir), o*"."*@param(core.figureformat)), figure) diff --git a/src/core/utils.jl b/src/core/utils.jl index ddffe480275f34dc7980a58753a2e05f7faf53cb..607cafd909b4756c8e41c20058c0c9725798f73e 100644 --- a/src/core/utils.jl +++ b/src/core/utils.jl @@ -46,6 +46,12 @@ end # Allows writing `(August, 2)` instead of `AnnualDate(August, 2)` where an AnnualDate is expected. AnnualDate(ad::Tuple{Int64,Int64}) = AnnualDate(ad...) Base.convert(::Type{AnnualDate}, ad::Tuple{Int64,Int64}) = AnnualDate(ad) +Base.convert(::Type{Tuple{Int64,Int64}}, ad::AnnualDate) = (ad.month, ad.day) + +# allow creating AnnualDates from a string of the format "8 August" +AnnualDate(ad::String) = AnnualDate(Date(ad, dateformat"d U")) +Base.convert(::Type{AnnualDate}, ad::String) = AnnualDate(ad) +Base.tryparse(::Type{AnnualDate}, ad::String) = AnnualDate(ad) # allow creating AnnualDates from a string of the format "8 August" AnnualDate(ad::String) = AnnualDate(Date(ad, dateformat"d U")) @@ -56,6 +62,7 @@ AnnualDate(date::Date) = AnnualDate(month(date), day(date)) Base.convert(::Type{AnnualDate}, ad::Date) = AnnualDate(ad) Dates.month(ad::AnnualDate) = ad.month Dates.day(ad::AnnualDate) = ad.day +Dates.monthday(ad::AnnualDate) = (ad.month, ad.day) Date(year::Int64, ad::AnnualDate) = Date(year, ad.month, ad.day) # Comparison between AnnualDates and with Dates @@ -162,7 +169,34 @@ A utility function to make sure that a number is within a given set of bounds. Returns `max`/`min` if `x` is greater/less than this. """ function bounds(x::Number; max::Number=Inf, min::Number=0) + if unit(x) != NoUnits + max = max*unit(x) + min = min*unit(x) + end x > max ? max : x < min ? min : x end + +""" + cycle!(vector, n=1) + +Move the first element of the vector to the end, repeat n times. +""" +function cycle!(v::AbstractVector, n::Int64=1) + for i in 1:n + push!(v, v[1]) + deleteat!(v, 1) + end + v +end + +""" + @areaof(npixels) + +Calculate the area of a given number of landscape pixels, knowing the resolution of the +world map (requires the `model` object to be available). +""" +macro areaof(npixels) + :($(esc(npixels)) * $(esc(:model)).settings["world.mapresolution"]^2) +end diff --git a/src/crop/almass.jl b/src/crop/almass.jl index 5ac4c53ed22c13ab66fe9125577659fd3879b838..eb7db59037c188e707de12c30e65eb43c0aacf49 100644 --- a/src/crop/almass.jl +++ b/src/crop/almass.jl @@ -3,11 +3,16 @@ ### This file is responsible for managing the crop growth modules. ### -#TODO write tests for input functions +#FIXME Looking at fields.pdf in the Persefone output, crop maturity is not recognised +# properly, so most crops (except maize) are never planted. At the same time, maize never +# seems to start growing. + +#TODO write tests to compare our output to the output of the original ALMaSS algorithm module ALMaSS using Persefone: + AnnualDate, Management, Length, cm, @@ -22,7 +27,11 @@ import Persefone: cropname, cropheight, cropcover, - cropyield + cropyield, + sow!, + harvest!, + isharvestable, + bounds using Dates: Date, month, monthday using CSV: CSV @@ -57,15 +66,17 @@ The type struct for all crops. Currently follows the crop growth model as implemented in ALMaSS. """ struct CropType + #FIXME this needs thinking about. The sowing and harvest dates belong in the farm model, + # not here. Also, we need to harmonise crops across the crop growth models. name::String - minsowdate::Union{Missing,Date} - maxsowdate::Union{Missing,Date} - minharvestdate::Union{Missing,Date} - maxharvestdate::Union{Missing,Date} + group::String + minsowdate::Union{Missing,AnnualDate} + maxsowdate::Union{Missing,AnnualDate} + minharvestdate::Union{Missing,AnnualDate} + maxharvestdate::Union{Missing,AnnualDate} mingrowthtemp::Union{Missing,Float64} highnutrientgrowth::Union{Missing,CropCurveParams} lownutrientgrowth::Union{Missing,CropCurveParams} - #issowable::Union{Function,Bool} end cropname(ct::CropType) = ct.name @@ -85,7 +96,8 @@ mutable struct CropState LAItotal::Float64 LAIgreen::Float64 #biomass::Float64 #XXX I need to figure out how to calculate this - events::Vector{Management} + mature::Bool #TODO how do we determine this? + events::Vector{Management} #FIXME does this do anything? end croptype(cs::CropState) = cs.croptype @@ -93,6 +105,7 @@ cropname(cs::CropState) = cropname(croptype(cs)) cropheight(cs::CropState) = cs.height cropcover(cs::CropState) = 0.0 # TODO: related to LAItotal, LAIgreen? cropyield(cs::CropState) = 0.0 # TODO: units? needs biomass? +isharvestable(cs::CropState) = cs.mature """ Base.tryparse(type, str) @@ -100,7 +113,7 @@ cropyield(cs::CropState) = 0.0 # TODO: units? needs biomass? Extend `tryparse` to allow parsing GrowthPhase values. (Needed to read in the CSV parameter file.) """ -function Base.tryparse(type::Type{GrowthPhase}, str::String) +function Base.tryparse(::Type{GrowthPhase}, str::String) str == "janfirst" ? janfirst : str == "sow" ? sow : str == "marchfirst" ? marchfirst : @@ -146,8 +159,8 @@ Parse a CSV file containing the required parameter values for each crop """ function readcropparameters(generalcropfile::String, growthfile::String) @debug "Reading crop parameters" - cropdata = CSV.File(generalcropfile, missingstring="NA", dateformat="d U", - types=[String,Date,Date,Date,Date,Float64]) + cropdata = CSV.File(generalcropfile, missingstring="NA", + types=[String,AnnualDate,AnnualDate,AnnualDate,AnnualDate,Float64,String]) growthdata = CSV.File(growthfile, missingstring="NA", types=[Int,String,String,GrowthPhase,String, Float64,Float64,Float64,Float64]) @@ -159,7 +172,10 @@ function readcropparameters(generalcropfile::String, growthfile::String) filter(x -> x.nutrient_status=="high")) lownuts = buildgrowthcurve(cropgrowthdata |> filter(x -> x.nutrient_status=="low")) - croptypes[crop.name] = CropType(crop.name, crop.minsowdate, crop.maxsowdate, + # TODO: set crop group temporarily until there is a column in + # the csv file + crop_group = "CROP_GROUP_NOT_SET" + croptypes[crop.name] = CropType(crop.name, crop_group, crop.minsowdate, crop.maxsowdate, crop.minharvestdate, crop.maxharvestdate, crop.mingrowthtemp, highnuts, lownuts) end @@ -172,6 +188,14 @@ end Update a farm plot by one day. """ function stepagent!(cs::CropState, model::SimulationModel) + # update the phase on key dates + if monthday(model.date) == (1, 1) + cs.phase = ALMaSS.janfirst + cs.growingdegreedays = 0.0 + elseif monthday(model.date) == (3, 1) + cs.phase = ALMaSS.marchfirst + cs.growingdegreedays = 0.0 + end # update growing degree days # if no crop-specific base temperature is given, default to 5°C # (https://www.eea.europa.eu/publications/europes-changing-climate-hazards-1/heat-and-cold/heat-and-cold-2014-mean) @@ -179,11 +203,8 @@ function stepagent!(cs::CropState, model::SimulationModel) ismissing(basetemp) && (basetemp = 5.0) gdd = (maxtemp(model)+mintemp(model))/2 - basetemp gdd > 0 && (cs.growingdegreedays += gdd) - # update the phase on key dates - monthday(model.date) == (1,1) && (cs.phase = ALMaSS.janfirst) - monthday(model.date) == (3,1) && (cs.phase = ALMaSS.marchfirst) # update crop growth - growcrop!(cs, model) + growcrop!(cs, gdd, model) end @@ -195,9 +216,16 @@ end Change the cropstate to sow the specified crop. """ function sow!(cs::CropState, model::SimulationModel, cropname::String) - #XXX test if the crop is sowable? + !ismissing(cs.croptype.minsowdate) && model.date < cs.croptype.minsowdate && + @warn "$(model.date) is earlier than the minimum sowing date for $(cropname)." cs.croptype = model.crops[cropname] cs.phase = ALMaSS.sow + cs.growingdegreedays = 0.0 + cs.height = 0.0cm + cs.LAItotal = 0.0 + cs.LAIgreen = 0.0 + cs.mature = false + cs.events = Vector{Management}() end """ @@ -209,6 +237,8 @@ function harvest!(cs::CropState, model::SimulationModel) cs.phase in [ALMaSS.harvest1, ALMaSS.harvest2] ? cs.phase = ALMaSS.harvest2 : cs.phase = ALMaSS.harvest1 + cs.growingdegreedays = 0.0 + cs.mature = false # height & LAI will be automatically adjusted by the growth function #TODO calculate and return yield end @@ -218,19 +248,21 @@ end #TODO till!() """ - growcrop!(cropstate, model) + growcrop!(cropstate, gdd, model) Apply the relevant crop growth model to update the plants crop state on this farm plot. Implements the ALMaSS crop growth model by Topping -et al. +et al. (see `ALMaSS/Landscape/plant.cpp:PlantGrowthData::FindDiff()` and +`ALMaSS/Landscape/elements.cpp:VegElement::DoDevelopment()`). """ -function growcrop!(cs::CropState, model::SimulationModel) +function growcrop!(cs::CropState, gdd::Float64, model::SimulationModel) fertiliser in cs.events ? curve = cs.croptype.lownutrientgrowth : curve = cs.croptype.highnutrientgrowth - points = curve.GDD[cs.phase] + points = curve.GDD[cs.phase] #FIXME what if the curve is empty? for p in 1:length(points) if points[p] == 99999 + !(cs.phase in (janfirst, sow)) && (cs.mature = true) #FIXME only in the last phase? return # the marker that there is no further growth this phase elseif points[p] == -1 # the marker to set all variables to specified values cs.height = curve.height[cs.phase][p] @@ -241,9 +273,14 @@ function growcrop!(cs::CropState, model::SimulationModel) gdd = cs.growingdegreedays # figure out which is the correct slope value to use for growth if p == length(points) || gdd < points[p+1] - cs.height += curve.height[cs.phase][p] - cs.LAItotal += curve.LAItotal[cs.phase][p] - cs.LAIgreen += curve.LAIgreen[cs.phase][p] + #FIXME it appears to me from the ALMaSS source code that the curve value + # for the day is multiplied with that day's growingdegreedays to give the + # diff, which is then added to the previous values. However, this results + # in values that are staggeringly too large. I'm not quite sure what the + # issue is here... + cs.height += bounds(curve.height[cs.phase][p]*gdd) + cs.LAItotal += bounds(curve.LAItotal[cs.phase][p]*gdd) + cs.LAIgreen += bounds(curve.LAIgreen[cs.phase][p]*gdd) return end #XXX To be precise, we ought to figure out if one or more inflection diff --git a/src/crop/cropmodels.jl b/src/crop/cropmodels.jl index bbbd92529424792d327ff7f5e3d55cfd0dfc5b6b..8653a1439e8d0a5dcfe14b09c326ef9a4a0a3bad 100644 --- a/src/crop/cropmodels.jl +++ b/src/crop/cropmodels.jl @@ -18,7 +18,8 @@ function initcropmodel(cropmodel::AbstractString, cropfile::AbstractString, grow Tcroptype = SimpleCrop.CropType Tcropstate = SimpleCrop.CropState crops_almass = ALMaSS.readcropparameters(cropfile, growthfile) - crops = Dict(name => SimpleCrop.CropType(ct.name) for (name, ct) in crops_almass) + crops = Dict(name => SimpleCrop.CropType(ct.name, ct.group, ct.minsowdate, ct.maxsowdate) + for (name, ct) in crops_almass) else error("initcropmodel: no implementation for crop model '$cropmodel'") end @@ -31,14 +32,12 @@ end Initialise the farm plots in the simulation model. """ function initfields!(model::SimulationModel) - n = 0 convertid = Dict{Int64,Int64}() width, height = size(model.landscape) for x in 1:width for y in 1:height # for each pixel, we need to extract the field ID given by the map input - # file, and convert it into the internal object ID used by Agents.jl, - # creating a new agent object if necessary + # file, and convert it into an internal object ID for `model.farmplots` rawid = model.landscape[x,y].fieldid (ismissing(rawid)) && continue if rawid in keys(convertid) @@ -46,38 +45,37 @@ function initfields!(model::SimulationModel) model.landscape[x,y].fieldid = objectid push!(model.farmplots[objectid].pixels, (x,y)) else - cropstate = make_cropstate(model, @param(crop.cropmodel)) - fp = FarmPlot( - length(model.farmplots) + 1, - [(x, y)], - cropstate - ) + cropstate = makecropstate(model) + fp = FarmPlot(length(model.farmplots) + 1, [(x, y)], -1, cropstate) push!(model.farmplots, fp) model.landscape[x,y].fieldid = fp.id convertid[rawid] = fp.id - n += 1 end end end - @info "Initialised $n farm plots." + @info "Initialised $(length(model.farmplots)) farm plots." end -# internal utility function -function make_cropstate(model::SimulationModel, cropmodel::AbstractString) - if cropmodel == "almass" +""" + makecropstate(model, cropmodel) + +An internal utility function to initialise one instance of the configured crop growth model. +""" +function makecropstate(model::SimulationModel) + if @param(crop.cropmodel) == "almass" phase = (month(model.date) < 3 ? ALMaSS.janfirst : ALMaSS.marchfirst) cs = ALMaSS.CropState( model.crops["natural grass"], phase, - 0.0, 0.0m, 0.0, 0.0, Vector{Management}() + 0.0, 0.0cm, 0.0, 0.0, false, Vector{Management}() ) - elseif cropmodel == "simple" + elseif @param(crop.cropmodel) == "simple" cs = SimpleCrop.CropState( model.crops["natural grass"], 0.0m ) else - error("Unhandled crop model '$cropmodel' in make_cropstate") + Base.error("Unhandled crop model '$(@param(crop.cropmodel))' in makecropstate().") end return cs end diff --git a/src/crop/farmplot.jl b/src/crop/farmplot.jl index ebe7c84af97495f27f15d03e2dc583c9d4c9549c..ecd4baf5a26aa927bc836dedffdf27f09af0b152 100644 --- a/src/crop/farmplot.jl +++ b/src/crop/farmplot.jl @@ -3,10 +3,16 @@ ### This file contains code for the fields that farmers manage. ### +""" + FarmPlot + +A struct representing a single field, on which a crop can be grown. +""" mutable struct FarmPlot{T} <: ModelAgent const id::Int64 pixels::Vector{Tuple{Int64, Int64}} - cropstate :: T + farmer::Int64 + cropstate::T end croptype(f::FarmPlot{T}) where {T} = croptype(f.cropstate) @@ -14,6 +20,7 @@ cropname(f::FarmPlot{T}) where {T} = cropname(croptype(f)) cropheight(f::FarmPlot{T}) where {T} = cropheight(f.cropstate) cropcover(f::FarmPlot{T}) where {T} = cropcover(f.cropstate) cropyield(f::FarmPlot{T}) where {T} = cropyield(f.cropstate) +isharvestable(f::FarmPlot{T}) where {T} = isharvestable(f.cropstate) """ stepagent!(farmplot, model) @@ -30,9 +37,9 @@ end Sow the specified crop on the farmplot. """ function sow!(farmplot::FarmPlot, model::SimulationModel, cropname::String) - #XXX test if the crop is sowable? createevent!(model, farmplot.pixels, sowing) sow!(farmplot.cropstate, model, cropname) + @debug "Farmer $(farmplot.farmer) sowed $(cropname) on farmplot $(farmplot.id)." end """ @@ -43,22 +50,55 @@ Harvest the crop of this farmplot. function harvest!(farmplot::FarmPlot{T}, model::SimulationModel) where T createevent!(model, farmplot.pixels, harvesting) harvest!(farmplot.cropstate, model) # TODO: multiply with area to return units of `g` + @debug "Farmer $(farmplot.farmer) harvested $(cropname(farmplot)) from farmplot $(farmplot.id)." +end + +""" + @sow(cropname) + +Sow the named crop on the current field. Requires the variables `field` and `model`. +""" +macro sow(cropname) + :(sow!($(esc(:field)), $(esc(:model)), $(esc(cropname)))) +end + +""" + @harvest() + +Harvest the current field. Requires the variables `field` and `model`. +""" +macro harvest() + :(harvest!($(esc(:field)), $(esc(:model)))) end ## UTILITY FUNCTIONS +""" + isgrassland(farmplot, model) + +Classify a farmplot as grassland or not (i.e., is the landcover of >80% of its pixels grass?) +""" +function isgrassland(farmplot::FarmPlot, model::SimulationModel) + proportiongrass = count(pos -> landcover(pos, model) == grass, farmplot.pixels) / + length(farmplot.pixels) + if proportiongrass > 0.8 + return true + elseif proportiongrass > 0.2 + @warn "Unclear classification: farm plot $(farmplot.id) has $(proportiongrass*100)% grass." + proportiongrass >= 0.5 && return true + end + return false +end + """ averagefieldsize(model) Calculate the average field size in hectares for the model landscape. """ function averagefieldsize(model::SimulationModel) - conversionfactor = 100 #our pixels are currently 10x10m, so 100 pixels per hectare - sizes::Vector{Float64} = [] - for fp in model.farmplots - push!(sizes, size(fp.pixels)[1]/conversionfactor) - end - round(sum(sizes)/size(sizes)[1], digits=2) + area_sum = sum(@areaof(length(fp.pixels)) for fp in model.farmplots; init=0.0u"m^2") + area_avg = area_sum / length(model.farmplots) + return area_avg |> ha end """ diff --git a/src/crop/simplecrop.jl b/src/crop/simplecrop.jl index 6bfe858364cf472af1a49b87cf0a8f455dfd5b8c..348d9448561f693d1e1f951d33b9b7781ea2187a 100644 --- a/src/crop/simplecrop.jl +++ b/src/crop/simplecrop.jl @@ -1,6 +1,7 @@ module SimpleCrop using Persefone: + AnnualDate, FarmPlot, Length, cm, @@ -12,10 +13,19 @@ import Persefone: cropname, cropheight, cropcover, - cropyield + cropyield, + sow!, + harvest!, + isharvestable +using Unitful: @u_str + +# TODO: alternatively just use ALMaSS.CropType ? struct CropType name::String + group::String + minsowdate::Union{Missing,AnnualDate} + maxsowdate::Union{Missing,AnnualDate} end cropname(ct::CropType) = ct.name @@ -30,7 +40,7 @@ cropname(cs::CropState) = cropname(croptype(cs)) cropheight(cs::CropState) = cs.height cropcover(cs::CropState) = 0.0 cropyield(cs::CropState) = 0.0 # TODO: units? - +isharvestable(cs::CropState) = true """ stepagent!(farmplot, model) @@ -50,7 +60,7 @@ Change the cropstate to sow the specified crop. """ function sow!(cs::CropState, model::SimulationModel, cropname::String) cs.croptype = model.crops[cropname] - cs.height = 0cm + cs.height = 0.0cm end """ @@ -62,8 +72,8 @@ function harvest!(cs::CropState, model::SimulationModel) # TODO: set cs.croptype ? # TODO: this 1.0g/cm/m^2 height_to_yield factor should be a param # for every crop type - yield = cs.height * 1.0g/cm/m^2 - cs.height = 0cm + yield = cs.height * 1.0u"g/cm/m^2" + cs.height = 5.0cm return yield end diff --git a/src/farm/farm.jl b/src/farm/farm.jl index 6d7b1588f33e54cb67e14a5fe86f4153e4379c15..3bc3109e4efc086672a26681f147c3deb78065ce 100644 --- a/src/farm/farm.jl +++ b/src/farm/farm.jl @@ -1,37 +1,130 @@ ### Persefone.jl - a model of agricultural landscapes and ecosystems in Europe. ### ### This file is responsible for managing the farm module(s). -### +### + + +## GENERIC TYPES AND FUNCTIONS + +"This is the agent type for the farm ABM." +abstract type Farmer <: ModelAgent end + +stepagent!(f::Farmer, model::SimulationModel) = + @error "Farmer type $(typeof(f)) has no stepagent!() method." """ - Farmer + initfarms!(model) -This is the agent type for the farm ABM. (Not yet implemented.) +Initialise the model with a set of farm agents, depending on the configured farm model. """ -mutable struct Farmer <: ModelAgent - #XXX make this into an abstract type and create subtypes for different - # farm submodels? (#69) +function initfarms!(model::SimulationModel) + if @param(farm.farmmodel) == "BasicFarmer" + initbasicfarms!(model) + else + Base.error("Farm model $(@param(farm.farmmodel)) doesn't exist.") + end +end + + +## BASIC FARM MODEL + +#XXX Initially, we're only working with a single simple crop rotation. +# Later on, we need to figure out how to integrate several. +const CROPROTATION = ["winter rape", "winter wheat", "maize", "winter barley"] + +#FIXME Currently, this is specific to the ALMaSS model. We need to figure out how to generalise it. + +""" + BasicFarmer + +The BasicFarmer type simply applies a set crop rotation to his fields and keeps track of income. +""" +mutable struct BasicFarmer <: Farmer const id::Int64 - # TODO: hardcoded ALMaSS crop model - fields::Vector{FarmPlot{ALMaSS.CropState}} - croprotation::Vector{ALMaSS.CropType} - #TODO add AES + # farmplots owned by this farmer and their associated crop rotations and next sowing date + fields::Vector{Int64} + croprotations::Dict{Int64, Vector{String}} + sowdates::Dict{Int64, AnnualDate} + totalincome::Float64 # accumulated income XXX split up by year? end """ stepagent!(farmer, model) -Update a farmer by one day. +Update a farmer by one day. Cycle through all fields and see what management is needed. """ -function stepagent!(farmer::Farmer, model::SimulationModel) - #TODO +function stepagent!(farmer::BasicFarmer, model::SimulationModel) + for f in farmer.fields + field = model.farmplots[f] + ctype = croptype(field) + if ctype.group != "semi-natural" && isharvestable(field) + @harvest() + #XXX later: calculate income based on yield and annual price + if ctype.group != "grass" + @sow("no growth") + cycle!(farmer.croprotations[f]) # advance the crop rotation + nextcrop = model.crops[farmer.croprotations[f][1]] + if ! (ismissing(nextcrop.minsowdate) || ismissing(nextcrop.maxsowdate)) + farmer.sowdates[f] = @rand(nextcrop.minsowdate:nextcrop.maxsowdate) + else + @warn "minsowdate and/or maxsowdate is `missing` for crop \"$(ctype.name)\", not assigning sowdates" + end + end + elseif cropname(field) == "no growth" && model.date == farmer.sowdates[f] + # if a field has been harvested, check if the next crop can be sown + @sow(farmer.croprotations[f][1]) + end + end end """ - initfarms!(model) + initbasicfarms!(model) -Initialise the model with a set of farm agents. +Initialise the basic farm model. All fields are controlled by a single farmer actor +and are assigned as grassland, set-aside, or arable land with a crop rotation. """ -function initfarms!(model::SimulationModel) - #TODO +function initbasicfarms!(model::SimulationModel) + farmer = BasicFarmer(1, collect(1:length(model.farmplots)), Dict(), Dict(), 0) + model.farmers = [farmer] + setasides = findsetasides(farmer, model) + for field in model.farmplots + field.farmer = farmer.id + if isgrassland(field, model) + @sow("permanent grassland (grazed)") + farmer.croprotations[field.id] = ["permanent grassland (grazed)"] + elseif field.id in setasides + @sow("permanent set-aside") + farmer.croprotations[field.id] = ["permanent set-aside"] + else + @sow("no growth") # assign each arable field a crop rotation, cycled randomly + farmer.croprotations[field.id] = cycle!(deepcopy(CROPROTATION), @rand(0:3)) + nextcrop = model.crops[farmer.croprotations[field.id][1]] + farmer.sowdates[field.id] = @rand(nextcrop.minsowdate:nextcrop.maxsowdate) + end + end + initfarmdata(model) +end + +""" + findsetasides(farmer, model) + +Return a vector of field IDs that this farmer should keep fallow to satisfy the configured +set-aside rules. +""" +function findsetasides(farmer::BasicFarmer, model::SimulationModel) + @param(farm.setaside) == 0 && return [] + croparea = @areaof(sum(f -> isgrassland(f, model) ? 0 : length(f.pixels), + model.farmplots[farmer.fields])) + setasidearea = 0m² + setasides = [] + for f in keys(farmer.fields) #XXX should be sorted smallest-largest for highest efficiency + field = model.farmplots[f] + isgrassland(field, model) && continue + push!(setasides, f) + setasidearea += @areaof(length(field.pixels)) + if setasidearea >= croparea*@param(farm.setaside) + @debug "Farmer $(farmer.id) has set aside $(setasidearea |> ha)." + return setasides + end + end end diff --git a/src/farm/farmdata.jl b/src/farm/farmdata.jl new file mode 100644 index 0000000000000000000000000000000000000000..945d9ef90e3c126c70e1f35458a4d437b6441b84 --- /dev/null +++ b/src/farm/farmdata.jl @@ -0,0 +1,41 @@ +### Persefone.jl - a model of agricultural landscapes and ecosystems in Europe. +### +### This file handles the data output of the farm submodel. +### + +""" + initfarmdata() + +Create output files for each data group collected by the farm model. +""" +function initfarmdata(model::SimulationModel) + newdataoutput!(model, "fields", ["Date", "Crop", "Area", "Height"], + @param(farm.fieldoutfreq), savefielddata, croptrends) + #XXX add later: income per year +end + +""" + savefielddata(model) + +Return a data table (to be printed to `fields.csv`), giving the current +date, and the area and average of each crop in the landscape. May be called +never, daily, monthly, yearly, or at the end of a simulation, depending on +the parameter `farm.fieldoutfreq`. +""" +function savefielddata(model::SimulationModel) + croparea = Dict(c => 0.0 for c in keys(model.crops)) + cropheights = Dict(c => [0.0, 0.0] for c in keys(model.crops)) + for f in model.farmplots + c = cropname(f) + croparea[c] += ustrip(ha, @areaof(length(f.pixels))) # total area with this crop + cropheights[c][1] += 1 # number of fields with this crop + cropheights[c][2] += ustrip(cm, cropheight(f)) # summed height of the plants of this crop + end + data = [] + for p in keys(croparea) + averageheight = cropheights[p][2] == 0 ? 0 : + round(cropheights[p][2]/cropheights[p][1], digits=2) + push!(data, [model.date, p, croparea[p], averageheight]) + end + data +end diff --git a/src/nature/ecologicaldata.jl b/src/nature/ecologicaldata.jl index 3a1e53803bd7623d2620dd3773b08213af607852..15527ca69f0f1894d479151abdd96b173dc8d513 100644 --- a/src/nature/ecologicaldata.jl +++ b/src/nature/ecologicaldata.jl @@ -69,7 +69,7 @@ function initskylarkdata(model::SimulationModel) newdataoutput!(model, "skylark_abundance", ["Date", "TotalAbundance", "Mating", "Breeding", "Nonbreeding", "Juvenile", "Migrants"], - "daily", skylarkabundance, skylarkpopulation) + @param(nature.popoutfreq), skylarkabundance, skylarkpopulation) # newdataoutput!(model, "skylark_territories", ["Date", "ID", "X", "Y"], # skylarkterritories, "monthly") #TODO add plotting function newdataoutput!(model, "skylark_breeding", diff --git a/src/nature/populations.jl b/src/nature/populations.jl index 2f45c71759ce2ff5de1e653cdde9aeac51898da2..144f0462fc612ffc14c1e4b4f075350aaf4fa362 100644 --- a/src/nature/populations.jl +++ b/src/nature/populations.jl @@ -84,7 +84,7 @@ function initpopulation!(species::Type, p::PopInitParams, model::SimulationModel lastn = 0 width, height = size(model.landscape) if p.indarea > 0m² - pixelsperind = Int(round(p.indarea / @param(world.mapresolution)^2)) + pixelsperind = Int(round(p.indarea / @areaof(1))) end while n == 0 || n < p.popsize for x in @shuffle!(Vector(1:width)) @@ -160,7 +160,7 @@ return the size as a plain number. function territorysize(a::Union{Animal,Int64}, model::SimulationModel, units::Unitful.Units=ha, stripunits::Bool=false) a isa Int && (a = @animal(a)) - size = length(a.territory) * @param(world.mapresolution)^2 |> Float64 + size = length(a.territory) * @areaof(1) |> Float64 stripunits ? ustrip(units, size) : size |> units end diff --git a/src/nature/species/skylark.jl b/src/nature/species/skylark.jl index ac582dc0aeed8f0af845d884d88583ce88053f56..feaa063a7be5e538c88895f2bef913bc8d06e965 100644 --- a/src/nature/species/skylark.jl +++ b/src/nature/species/skylark.jl @@ -319,7 +319,7 @@ function findterritory(skylark::Skylark, model::SimulationModel) (isoccupied(model, "Skylark", c)) && continue push!(territory, c) quality = foragequality(skylark, model, c) - effectivesize += @param(world.mapresolution)^2*quality + effectivesize += @areaof(quality) (quality > 0) && (constrained = false) #XXX check for nesting habitats? end diff --git a/src/parameters.toml b/src/parameters.toml index ee391ab5ee1c8a41e0263595061da7c649384d6f..484c1a9b02d4245f7e48b40ccfdf9de1f5221895 100644 --- a/src/parameters.toml +++ b/src/parameters.toml @@ -15,12 +15,12 @@ csvoutput = true # save collected data in CSV files visualise = true # generate result graphs storedata = true # keep collected data in memory figureformat = "pdf" # file format to use for graphical output -loglevel = "info" # verbosity level: "debug", "info", "warn" +loglevel = "debug" # verbosity level: "debug", "info", "warn" processors = 2 # number of processors to use on parallel runs seed = 2 # seed value for the RNG (0 -> random value) -startdate = 2022-01-01 # first day of the simulation -enddate = 2022-12-31 # last day of the simulation -#enddate = 2022-03-31 # last day of the simulation (test value) +startdate = 2021-01-01 # first day of the simulation +enddate = 2023-12-31 # last day of the simulation +#enddate = 2022-01-02 # last day of the simulation (test value) [world] mapdirectory = "data/regions/jena-small" # the directory in which all geographic data are stored @@ -30,13 +30,18 @@ farmfieldsmap = "fields.tif" # name of the field geometry map in the map directo weatherfile = "weather.csv" # name of the weather data file in the map directory [farm] -farmmodel = "FieldManager" # which version of the farm model to use (not yet implemented) - +farmmodel = "BasicFarmer" # which version of the farm model to use +setaside = 0.04 # proportion of farm area set aside as fallow +fieldoutfreq = "daily" # output frequency for crop/field data, daily/monthly/yearly/end/never + [nature] #targetspecies = ["Wolpertinger", "Wyvern"] # list of target species to simulate - example species -targetspecies = ["Skylark"] # list of target species to simulate -popoutfreq = "daily" # output frequency population-level data, daily/monthly/yearly/end/never -indoutfreq = "end" # output frequency individual-level data, daily/monthly/yearly/end/never +targetspecies = [] # XXX disable all species for farm model testing +#targetspecies = ["Skylark"] # list of target species to simulate +popoutfreq = "never" # output frequency population-level data, daily/monthly/yearly/end/never +indoutfreq = "never" # output frequency individual-level data, daily/monthly/yearly/end/never +#popoutfreq = "daily" # output frequency population-level data, daily/monthly/yearly/end/never +#indoutfreq = "end" # output frequency individual-level data, daily/monthly/yearly/end/never insectmodel = ["season", "habitat", "pesticides", "weather"] # factors affecting insect growth [crop] diff --git a/test/crop_data_general.csv b/test/crop_data_general.csv index 4fd822472b0c862113bf47269bda7d9e875ad3cd..c779dec5fa35c5777bb5363b88a81dbd8556bddc 100644 --- a/test/crop_data_general.csv +++ b/test/crop_data_general.csv @@ -1,21 +1,28 @@ -name,minsowdate,maxsowdate,minharvestdate,maxharvestdate,mingrowthtemp -"winter barley","15 September","30 September",NA,NA,0 -"spring barley","1 March","10 April",NA,NA,0 -"peas/beans",NA,NA,NA,NA,5 -"spring rape",NA,NA,NA,NA,NA -"winter rape",NA,NA,NA,NA,NA -"winter rye",NA,NA,NA,NA,NA -"winter wheat","15 October","31 October",NA,NA,0 -"beet",NA,NA,NA,NA,NA -"maize",NA,NA,NA,NA,8 -"permanent grassland (grazed)",NA,NA,NA,NA,NA -"permanent grassland (seeded)",NA,NA,NA,NA,NA -"fodder/clover",NA,NA,NA,NA,NA -"natural grass",NA,NA,NA,NA,NA -"potatoes",NA,NA,NA,NA,4 -"undersown spring barley",NA,NA,NA,NA,0 -"carrots",NA,NA,NA,NA,NA -"oats",NA,NA,NA,NA,NA -"permanent set-aside",NA,NA,NA,NA,NA -"lucerne",NA,NA,NA,NA,NA -"triticale","25 September","10 October",NA,NA,NA +name,minsowdate,maxsowdate,minharvestdate,maxharvestdate,mingrowthtemp,group +"spring rape",NA,NA,NA,NA,NA,"grain" +"winter rape","20 August","25 August",NA,NA,NA,"grain" +"winter wheat","15 October","31 October",NA,NA,0,"grain" +"spring wheat",NA,NA,NA,NA,NA,"grain" +"winter barley","15 September","30 September",NA,NA,0,"grain" +"spring barley","1 March","10 April",NA,NA,0,"grain" +"undersown spring barley",NA,NA,NA,NA,0,"grain" +"winter rye","23 September","15 October",NA,NA,NA,"grain" +"triticale","25 September","10 October",NA,NA,NA,"grain" +"oats",NA,NA,NA,NA,NA,"grain" +"maize","15 April","30 April",NA,NA,8,"grain" +"potatoes",NA,NA,NA,NA,4,"root" +"carrots",NA,NA,NA,NA,NA,"root" +"beet","15 March","10 May",NA,NA,NA,"root" +"sunflower","25 March","15 April",NA,NA,NA,"other" +"lucerne",NA,NA,NA,NA,NA,"legumes" +"peas/beans","15 February","15 March",NA,NA,5,"legumes" +"silage clover/grass",NA,NA,NA,NA,NA,"legumes" +"fodder/clover",NA,NA,NA,NA,NA,"legumes" +"lawn",NA,NA,NA,NA,NA,"grass" +"permanent grassland (grazed)",NA,NA,NA,NA,NA,"grass" +"permanent grassland (seeded)",NA,NA,NA,NA,NA,"grass" +"permanent grassland (low yield)",NA,NA,NA,NA,NA,"grass" +"permanent set-aside",NA,NA,NA,NA,NA,"semi-natural" +"natural grass",NA,NA,NA,NA,NA,"semi-natural" +"no growth",NA,NA,NA,NA,NA,"semi-natural" +"heath",NA,NA,NA,NA,NA,"semi-natural" diff --git a/test/crop_tests.jl b/test/crop_tests.jl index 91469250561ef844d1fd99969b6442701c8133e2..9632b1d59549eea5decd4909982b54e16fce2eb4 100644 --- a/test/crop_tests.jl +++ b/test/crop_tests.jl @@ -19,10 +19,15 @@ const TESTPARAM_SIMPLECROP = joinpath(pkgdir(Persefone), "test", "test_parameter end @testset "Submodule ALMaSS" begin - ct = Ps.ALMaSS.CropType("olive tree", missing, missing, missing, missing, missing, - missing, missing) - fp = FarmPlot(0, [(0,0)], - Ps.ALMaSS.CropState(ct, Ps.ALMaSS.janfirst, 0.0, 0.0m, 0.0, 0.0, Ps.Management[])) + ct = Ps.ALMaSS.CropType("olive tree", "no_crop_group", + missing, missing, missing, missing, missing, missing, missing) + id = 0 + pixels = [(0, 0)] + farmer = 0 + mature = false + events = Ps.Management[] + fp = FarmPlot(id, pixels, farmer, + Ps.ALMaSS.CropState(ct, Ps.ALMaSS.janfirst, 0.0, 0.0m, 0.0, 0.0, mature, events)) @test fp isa FarmPlot @test fp isa FarmPlot{Ps.ALMaSS.CropState} @test croptype(fp) isa Ps.ALMaSS.CropType @@ -33,8 +38,11 @@ end end @testset "Submodule SimpleCrop" begin - ct = Ps.SimpleCrop.CropType("olive tree") - fp = FarmPlot(0, [(0,0)], Ps.SimpleCrop.CropState(ct, 0.0cm)) + ct = Ps.SimpleCrop.CropType("olive tree", "no_crop_group", AnnualDate(4, 1), AnnualDate(5, 1)) + id = 0 + pixels = [(0, 0)] + farmer = 0 + fp = FarmPlot(id, pixels, farmer, Ps.SimpleCrop.CropState(ct, 0.0cm)) @test fp isa FarmPlot @test fp isa FarmPlot{Ps.SimpleCrop.CropState} @test croptype(fp) isa Ps.SimpleCrop.CropType diff --git a/test/landscape_tests.jl b/test/landscape_tests.jl index d80afb2ab09ac9a712dae6697d78b2955f170d27..9aa3cb3b96c7a60ea039c767096511070611f8a2 100644 --- a/test/landscape_tests.jl +++ b/test/landscape_tests.jl @@ -14,7 +14,7 @@ @test Ps.landcover((400,400), model) == Ps.grass @test Ps.landcover((800,800), model) == Ps.agriculture @test Ps.landcover((1100,1100), model) == Ps.builtup - @test Ps.averagefieldsize(model) == 5.37 + @test isapprox(Ps.averagefieldsize(model), 5.374u"ha"; atol=1e-3u"ha") @test count(f -> ismissing(f.fieldid), model.landscape) == 1685573 @test length(Ps.farmplot((800,800), model).pixels) == 4049 end diff --git a/test/nature_tests.jl b/test/nature_tests.jl index c78b7277f543f2c8bde9da3e02445ee7342e6487..b0d7e3cde16ebc6cfee39735454bb6cc8cfc1a90 100644 --- a/test/nature_tests.jl +++ b/test/nature_tests.jl @@ -49,10 +49,10 @@ end) # end eval model = inittestmodel() model.landscape[6,6] = Pixel(Ps.agriculture, 1, [], [], []) fp = Ps.FarmPlot( - 1, [(6,6)], + 1, [(6,6)], 1, Ps.ALMaSS.CropState( model.crops["winter wheat"], Ps.ALMaSS.janfirst, - 0.0, 0.0m, 0.0, 0.0, Vector{Ps.Management}() + 0.0, 0.0m, 0.0, 0.0, false, Vector{Ps.Management}() ) ) push!(model.farmplots, fp) diff --git a/test/runtests.jl b/test/runtests.jl index 4ee512ea3a25baea82eb68774c3267bf3befac3f..7fb635a5c663fc831d963786a07cf353b8961e15 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -20,7 +20,7 @@ const Ps = Persefone const TESTPARAMETERS = joinpath(pkgdir(Persefone), "test/test_parameters.toml") const TESTSETTINGS = Ps.getsettings(TESTPARAMETERS) -import Unitful: cm, m, km, ha, mg, g, kg, Length, Area, Mass +import Unitful: @u_str, cm, m, km, ha, mg, g, kg, Length, Area, Mass const m² = m^2 const km² = km^2 diff --git a/test/simulation_tests.jl b/test/simulation_tests.jl index a6f31eb8623a6af20eb1098727d921194691a5fe..fce2f2b2e05cef391a9295ed9a0db25ce2d523a0 100644 --- a/test/simulation_tests.jl +++ b/test/simulation_tests.jl @@ -10,7 +10,7 @@ @test typeof(model.landscape) == Matrix{Pixel} @test typeof(model.dataoutputs) == Dict{String,DataOutput} @test typeof(model.logger) == TeeLogger{Tuple{ConsoleLogger, ConsoleLogger}} - @test length(model.dataoutputs) == 5 + @test length(model.dataoutputs) == 6 @test model.events == Vector{FarmEvent}() @test Ps.nagents(model) == 2092+0+321 # farmplots+farmers+animals end diff --git a/test/test_parameters.toml b/test/test_parameters.toml index 0a8e4055b6ce3cd1c578beb3866dc30f37e28c57..089712ee2f4ab8c4ecd7da50ed97fc7dc4ca74be 100644 --- a/test/test_parameters.toml +++ b/test/test_parameters.toml @@ -28,7 +28,9 @@ farmfieldsmap = "fields_jena.tif" # location of the field geometry map weatherfile = "weather_jena.csv" # location of the weather data file [farm] -farmmodel = "FieldManager" # which version of the farm model to use (not yet implemented) +farmmodel = "BasicFarmer" # which version of the farm model to use +setaside = 0.04 # proportion of farm area set aside as fallow +fieldoutfreq = "daily" # output frequency for crop/field data, daily/monthly/yearly/end/never [nature] targetspecies = ["Wolpertinger", "Wyvern"] # list of target species to simulate - example species diff --git a/test/test_parameters_almass.toml b/test/test_parameters_almass.toml index 1308029ee9b7b387064752b0c0e3a70174798c77..159e59d2cb484a8f51da325c3bbbad1ae0af9e48 100644 --- a/test/test_parameters_almass.toml +++ b/test/test_parameters_almass.toml @@ -28,7 +28,9 @@ farmfieldsmap = "fields_jena.tif" # location of the field geometry map weatherfile = "weather_jena.csv" # location of the weather data file [farm] -farmmodel = "FieldManager" # which version of the farm model to use (not yet implemented) +farmmodel = "BasicFarmer" # which version of the farm model to use +setaside = 0.04 # proportion of farm area set aside as fallow +fieldoutfreq = "daily" # output frequency for crop/field data, daily/monthly/yearly/end/never [nature] targetspecies = ["Wolpertinger", "Wyvern"] # list of target species to simulate - example species diff --git a/test/test_parameters_simplecrop.toml b/test/test_parameters_simplecrop.toml index fc199a8c8664b0d900e131d9b5b159dc006ee502..b7c08f1008786b06a0fc391437efd294bad8fdd2 100644 --- a/test/test_parameters_simplecrop.toml +++ b/test/test_parameters_simplecrop.toml @@ -28,7 +28,9 @@ farmfieldsmap = "fields_jena.tif" # location of the field geometry map weatherfile = "weather_jena.csv" # location of the weather data file [farm] -farmmodel = "FieldManager" # which version of the farm model to use (not yet implemented) +farmmodel = "BasicFarmer" # which version of the farm model to use +setaside = 0.04 # proportion of farm area set aside as fallow +fieldoutfreq = "daily" # output frequency for crop/field data, daily/monthly/yearly/end/never [nature] targetspecies = ["Wolpertinger", "Wyvern"] # list of target species to simulate - example species