From 6b0bb42a79903eff2267e9797ea87a1fcb55a573 Mon Sep 17 00:00:00 2001
From: Marco Matthies <71844+marcom@users.noreply.github.com>
Date: Mon, 2 Dec 2024 11:51:34 +0100
Subject: [PATCH] ALMaSS: properly get biomass_scale factor for each crop

---
 data/crops/almass/crop_data_general.csv      | 56 ++++++++++----------
 src/crop/almass.jl                           |  8 +--
 test/crop_tests.jl                           |  2 +-
 test/cropparams-almass/crop_data_general.csv | 56 ++++++++++----------
 4 files changed, 61 insertions(+), 61 deletions(-)

diff --git a/data/crops/almass/crop_data_general.csv b/data/crops/almass/crop_data_general.csv
index c779dec..edf3da7 100644
--- a/data/crops/almass/crop_data_general.csv
+++ b/data/crops/almass/crop_data_general.csv
@@ -1,28 +1,28 @@
-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"
+name,minsowdate,maxsowdate,minharvestdate,maxharvestdate,mingrowthtemp,group,biomass_scale
+"spring rape",NA,NA,NA,NA,NA,"grain",1.071
+"winter rape","20 August","25 August",NA,NA,NA,"grain",1.071
+"winter wheat","15 October","31 October",NA,NA,0,"grain",1.0
+"spring wheat",NA,NA,NA,NA,NA,"grain",1.0
+"winter barley","15 September","30 September",NA,NA,0,"grain",0.857
+"spring barley","1 March","10 April",NA,NA,0,"grain",0.857
+"undersown spring barley",NA,NA,NA,NA,0,"grain",0.857
+"winter rye","23 September","15 October",NA,NA,NA,"grain",0.857
+"triticale","25 September","10 October",NA,NA,NA,"grain",1.0
+"oats",NA,NA,NA,NA,NA,"grain",0.857
+"maize","15 April","30 April",NA,NA,8,"grain",1.0
+"potatoes",NA,NA,NA,NA,4,"root",0.857
+"carrots",NA,NA,NA,NA,NA,"root",0.7857
+"beet","15 March","10 May",NA,NA,NA,"root",0.857
+"sunflower","25 March","15 April",NA,NA,NA,"other",1.0
+"lucerne",NA,NA,NA,NA,NA,"legumes",1.2
+"peas/beans","15 February","15 March",NA,NA,5,"legumes",0.857
+"silage clover/grass",NA,NA,NA,NA,NA,"legumes",1.1
+"fodder/clover",NA,NA,NA,NA,NA,"legumes",1.2
+"lawn",NA,NA,NA,NA,NA,"grass",0.5
+"permanent grassland (grazed)",NA,NA,NA,NA,NA,"grass",1.1
+"permanent grassland (seeded)",NA,NA,NA,NA,NA,"grass",1.1
+"permanent grassland (low yield)",NA,NA,NA,NA,NA,"grass",1.0
+"permanent set-aside",NA,NA,NA,NA,NA,"semi-natural",0.7857
+"natural grass",NA,NA,NA,NA,NA,"semi-natural",0.567
+"no growth",NA,NA,NA,NA,NA,"semi-natural",0.0
+"heath",NA,NA,NA,NA,NA,"semi-natural",0.567
diff --git a/src/crop/almass.jl b/src/crop/almass.jl
index 8c215c9..243f10b 100644
--- a/src/crop/almass.jl
+++ b/src/crop/almass.jl
@@ -114,6 +114,7 @@ struct CropType
     mingrowthtemp::Union{Missing,Float64}
     highnutrientgrowth::Union{Missing,CropCurveParams}
     lownutrientgrowth::Union{Missing,CropCurveParams}
+    biomass_scale::Float64
 end
 
 cropname(ct::CropType) = ct.name
@@ -366,7 +367,7 @@ Parse a CSV file containing the required parameter values for each crop
 function readcropparameters(cropdirectory::String)
     @debug "Reading crop parameters"
     cropdata = CSV.File(joinpath(cropdirectory, CROPFILE), missingstring="NA",
-                        types=[String,AnnualDate,AnnualDate,AnnualDate,AnnualDate,Float64,String])
+                        types=[String,AnnualDate,AnnualDate,AnnualDate,AnnualDate,Float64,String,Float64])
     growthdata = CSV.File(joinpath(cropdirectory, GROWTHFILE), missingstring="NA",
                           types=[Int,String,String,GrowthPhase,String,
                                  Float64,Float64,Float64,Float64])
@@ -387,7 +388,7 @@ function readcropparameters(cropdirectory::String)
         is_c4_plant = occursin("maize", lowercase(crop.name))
         croptypes[crop.name] = CropType(crop.name, crop_group, is_c4_plant, crop.minsowdate,
                                         crop.maxsowdate, crop.minharvestdate, crop.maxharvestdate,
-                                        crop.mingrowthtemp, highnuts, lownuts)
+                                        crop.mingrowthtemp, highnuts, lownuts, crop.biomass_scale)
     end
     croptypes
 end
@@ -761,8 +762,7 @@ function recalculate_bugs_n_stuff!(cs::CropState, model::SimulationModel)
     if cs.LAtotal >= cs.oldLAtotal
         # we are in positive growth so grow depending on our equation
 
-        # TODO: biomass_scale
-        biomass_scale = 1.0
+        biomass_scale = cs.croptype.biomass_scale
         cs.newgrowth = useful_veg_cover * glrad * radconv * biomass_scale
 
         # TODO: ignoring farm intensity
diff --git a/test/crop_tests.jl b/test/crop_tests.jl
index 38ae55a..028a4cf 100644
--- a/test/crop_tests.jl
+++ b/test/crop_tests.jl
@@ -20,7 +20,7 @@ end
 
 @testset "Submodule ALMaSS" begin
     ct = Ps.ALMaSS.CropType("olive tree", "no_crop_group", false,
-                            missing, missing, missing, missing, missing, missing, missing)
+                            missing, missing, missing, missing, missing, missing, missing, 1.0)
     id = 0
     pixels = [(0, 0)]
     farmer = 0
diff --git a/test/cropparams-almass/crop_data_general.csv b/test/cropparams-almass/crop_data_general.csv
index c779dec..edf3da7 100644
--- a/test/cropparams-almass/crop_data_general.csv
+++ b/test/cropparams-almass/crop_data_general.csv
@@ -1,28 +1,28 @@
-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"
+name,minsowdate,maxsowdate,minharvestdate,maxharvestdate,mingrowthtemp,group,biomass_scale
+"spring rape",NA,NA,NA,NA,NA,"grain",1.071
+"winter rape","20 August","25 August",NA,NA,NA,"grain",1.071
+"winter wheat","15 October","31 October",NA,NA,0,"grain",1.0
+"spring wheat",NA,NA,NA,NA,NA,"grain",1.0
+"winter barley","15 September","30 September",NA,NA,0,"grain",0.857
+"spring barley","1 March","10 April",NA,NA,0,"grain",0.857
+"undersown spring barley",NA,NA,NA,NA,0,"grain",0.857
+"winter rye","23 September","15 October",NA,NA,NA,"grain",0.857
+"triticale","25 September","10 October",NA,NA,NA,"grain",1.0
+"oats",NA,NA,NA,NA,NA,"grain",0.857
+"maize","15 April","30 April",NA,NA,8,"grain",1.0
+"potatoes",NA,NA,NA,NA,4,"root",0.857
+"carrots",NA,NA,NA,NA,NA,"root",0.7857
+"beet","15 March","10 May",NA,NA,NA,"root",0.857
+"sunflower","25 March","15 April",NA,NA,NA,"other",1.0
+"lucerne",NA,NA,NA,NA,NA,"legumes",1.2
+"peas/beans","15 February","15 March",NA,NA,5,"legumes",0.857
+"silage clover/grass",NA,NA,NA,NA,NA,"legumes",1.1
+"fodder/clover",NA,NA,NA,NA,NA,"legumes",1.2
+"lawn",NA,NA,NA,NA,NA,"grass",0.5
+"permanent grassland (grazed)",NA,NA,NA,NA,NA,"grass",1.1
+"permanent grassland (seeded)",NA,NA,NA,NA,NA,"grass",1.1
+"permanent grassland (low yield)",NA,NA,NA,NA,NA,"grass",1.0
+"permanent set-aside",NA,NA,NA,NA,NA,"semi-natural",0.7857
+"natural grass",NA,NA,NA,NA,NA,"semi-natural",0.567
+"no growth",NA,NA,NA,NA,NA,"semi-natural",0.0
+"heath",NA,NA,NA,NA,NA,"semi-natural",0.567
-- 
GitLab