From cc5b9bde10290ea413e66f4f16989583f78c28c2 Mon Sep 17 00:00:00 2001
From: Marco Matthies <71844+marcom@users.noreply.github.com>
Date: Wed, 4 Dec 2024 22:04:14 +0100
Subject: [PATCH] ALMaSS crop model: add sowingdensity column to
 crop_data_general.csv

Currently the sowingdensity column is still treated as type `String`,
as there is an entry of "35/80".  Once this entry is clarified, the
type should probably be `Float64`.
---
 data/crops/almass/crop_data_general.csv      | 56 ++++++++++----------
 src/crop/almass.jl                           |  4 +-
 test/cropparams-almass/crop_data_general.csv | 56 ++++++++++----------
 3 files changed, 59 insertions(+), 57 deletions(-)

diff --git a/data/crops/almass/crop_data_general.csv b/data/crops/almass/crop_data_general.csv
index 0d1a6cd..9af4722 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,biomass_scale,is_c4_plant
-"spring rape",NA,NA,NA,NA,NA,"grain",1.071,false
-"winter rape","20 August","25 August",NA,NA,NA,"grain",1.071,false
-"winter wheat","15 October","31 October",NA,NA,0,"grain",1.0,false
-"spring wheat",NA,NA,NA,NA,NA,"grain",1.0,false
-"winter barley","15 September","30 September",NA,NA,0,"grain",0.857,false
-"spring barley","1 March","10 April",NA,NA,0,"grain",0.857,false
-"undersown spring barley",NA,NA,NA,NA,0,"grain",0.857,false
-"winter rye","23 September","15 October",NA,NA,NA,"grain",0.857,false
-"triticale","25 September","10 October",NA,NA,NA,"grain",1.0,false
-"oats",NA,NA,NA,NA,NA,"grain",0.857,false
-"maize","15 April","30 April",NA,NA,8,"grain",1.0,true
-"potatoes",NA,NA,NA,NA,4,"root",0.857,false
-"carrots",NA,NA,NA,NA,NA,"root",0.7857,false
-"beet","15 March","10 May",NA,NA,NA,"root",0.857,false
-"sunflower","25 March","15 April",NA,NA,NA,"other",1.0,false
-"lucerne",NA,NA,NA,NA,NA,"legumes",1.2,false
-"peas/beans","15 February","15 March",NA,NA,5,"legumes",0.857,false
-"silage clover/grass",NA,NA,NA,NA,NA,"legumes",1.1,false
-"fodder/clover",NA,NA,NA,NA,NA,"legumes",1.2,false
-"lawn",NA,NA,NA,NA,NA,"grass",0.5,false
-"permanent grassland (grazed)",NA,NA,NA,NA,NA,"grass",1.1,false
-"permanent grassland (seeded)",NA,NA,NA,NA,NA,"grass",1.1,false
-"permanent grassland (low yield)",NA,NA,NA,NA,NA,"grass",1.0,false
-"permanent set-aside",NA,NA,NA,NA,NA,"semi-natural",0.7857,false
-"natural grass",NA,NA,NA,NA,NA,"semi-natural",0.567,false
-"no growth",NA,NA,NA,NA,NA,"semi-natural",0.0,false
-"heath",NA,NA,NA,NA,NA,"semi-natural",0.567,false
+name,minsowdate,maxsowdate,minharvestdate,maxharvestdate,mingrowthtemp,group,biomass_scale,is_c4_plant,sowingdensity
+spring rape,NA,NA,NA,NA,NA,grain,1.071,false,75
+winter rape,20 August,25 August,NA,NA,NA,grain,1.071,false,75
+winter wheat,15 October,31 October,NA,NA,0,grain,1.0,false,400
+spring wheat,NA,NA,NA,NA,NA,grain,1.0,false,475
+winter barley,15 September,30 September,NA,NA,0,grain,0.857,false,340
+spring barley,1 March,10 April,NA,NA,0,grain,0.857,false,360
+undersown spring barley,NA,NA,NA,NA,0,grain,0.857,false,NA
+winter rye,23 September,15 October,NA,NA,NA,grain,0.857,false,290
+triticale,25 September,10 October,NA,NA,NA,grain,1.0,false,320
+oats,NA,NA,NA,NA,NA,grain,0.857,false,385
+maize,15 April,30 April,NA,NA,8,grain,1.0,true,13
+potatoes,NA,NA,NA,NA,4,root,0.857,false,5
+carrots,NA,NA,NA,NA,NA,root,0.7857,false,160
+beet,15 March,10 May,NA,NA,NA,root,0.857,false,16
+sunflower,25 March,15 April,NA,NA,NA,other,1.0,false,8
+lucerne,NA,NA,NA,NA,NA,legumes,1.2,false,NA
+peas/beans,15 February,15 March,NA,NA,5,legumes,0.857,false,35/80
+silage clover/grass,NA,NA,NA,NA,NA,legumes,1.1,false,NA
+fodder/clover,NA,NA,NA,NA,NA,legumes,1.2,false,NA
+lawn,NA,NA,NA,NA,NA,grass,0.5,false,NA
+permanent grassland (grazed),NA,NA,NA,NA,NA,grass,1.1,false,NA
+permanent grassland (seeded),NA,NA,NA,NA,NA,grass,1.1,false,NA
+permanent grassland (low yield),NA,NA,NA,NA,NA,grass,1.0,false,NA
+permanent set-aside,NA,NA,NA,NA,NA,semi-natural,0.7857,false,NA
+natural grass,NA,NA,NA,NA,NA,semi-natural,0.567,false,NA
+no growth,NA,NA,NA,NA,NA,semi-natural,0.0,false,NA
+heath,NA,NA,NA,NA,NA,semi-natural,0.567,false,NA
diff --git a/src/crop/almass.jl b/src/crop/almass.jl
index b2680c4..e3472a4 100644
--- a/src/crop/almass.jl
+++ b/src/crop/almass.jl
@@ -366,8 +366,10 @@ Parse a CSV file containing the required parameter values for each crop
 """
 function readcropparameters(cropdirectory::String)
     @debug "Reading crop parameters"
+    # TODO: using String as type for last column in cropdata (this is
+    # the sowingdensity column) until the 35/80 entry is resolved
     cropdata = CSV.File(joinpath(cropdirectory, CROPFILE), missingstring="NA",
-                        types=[String,AnnualDate,AnnualDate,AnnualDate,AnnualDate,Float64,String,Float64,Bool])
+                        types=[String,AnnualDate,AnnualDate,AnnualDate,AnnualDate,Float64,String,Float64,Bool,String])
     growthdata = CSV.File(joinpath(cropdirectory, GROWTHFILE), missingstring="NA",
                           types=[Int,String,String,GrowthPhase,String,
                                  Float64,Float64,Float64,Float64])
diff --git a/test/cropparams-almass/crop_data_general.csv b/test/cropparams-almass/crop_data_general.csv
index 0d1a6cd..9af4722 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,biomass_scale,is_c4_plant
-"spring rape",NA,NA,NA,NA,NA,"grain",1.071,false
-"winter rape","20 August","25 August",NA,NA,NA,"grain",1.071,false
-"winter wheat","15 October","31 October",NA,NA,0,"grain",1.0,false
-"spring wheat",NA,NA,NA,NA,NA,"grain",1.0,false
-"winter barley","15 September","30 September",NA,NA,0,"grain",0.857,false
-"spring barley","1 March","10 April",NA,NA,0,"grain",0.857,false
-"undersown spring barley",NA,NA,NA,NA,0,"grain",0.857,false
-"winter rye","23 September","15 October",NA,NA,NA,"grain",0.857,false
-"triticale","25 September","10 October",NA,NA,NA,"grain",1.0,false
-"oats",NA,NA,NA,NA,NA,"grain",0.857,false
-"maize","15 April","30 April",NA,NA,8,"grain",1.0,true
-"potatoes",NA,NA,NA,NA,4,"root",0.857,false
-"carrots",NA,NA,NA,NA,NA,"root",0.7857,false
-"beet","15 March","10 May",NA,NA,NA,"root",0.857,false
-"sunflower","25 March","15 April",NA,NA,NA,"other",1.0,false
-"lucerne",NA,NA,NA,NA,NA,"legumes",1.2,false
-"peas/beans","15 February","15 March",NA,NA,5,"legumes",0.857,false
-"silage clover/grass",NA,NA,NA,NA,NA,"legumes",1.1,false
-"fodder/clover",NA,NA,NA,NA,NA,"legumes",1.2,false
-"lawn",NA,NA,NA,NA,NA,"grass",0.5,false
-"permanent grassland (grazed)",NA,NA,NA,NA,NA,"grass",1.1,false
-"permanent grassland (seeded)",NA,NA,NA,NA,NA,"grass",1.1,false
-"permanent grassland (low yield)",NA,NA,NA,NA,NA,"grass",1.0,false
-"permanent set-aside",NA,NA,NA,NA,NA,"semi-natural",0.7857,false
-"natural grass",NA,NA,NA,NA,NA,"semi-natural",0.567,false
-"no growth",NA,NA,NA,NA,NA,"semi-natural",0.0,false
-"heath",NA,NA,NA,NA,NA,"semi-natural",0.567,false
+name,minsowdate,maxsowdate,minharvestdate,maxharvestdate,mingrowthtemp,group,biomass_scale,is_c4_plant,sowingdensity
+spring rape,NA,NA,NA,NA,NA,grain,1.071,false,75
+winter rape,20 August,25 August,NA,NA,NA,grain,1.071,false,75
+winter wheat,15 October,31 October,NA,NA,0,grain,1.0,false,400
+spring wheat,NA,NA,NA,NA,NA,grain,1.0,false,475
+winter barley,15 September,30 September,NA,NA,0,grain,0.857,false,340
+spring barley,1 March,10 April,NA,NA,0,grain,0.857,false,360
+undersown spring barley,NA,NA,NA,NA,0,grain,0.857,false,NA
+winter rye,23 September,15 October,NA,NA,NA,grain,0.857,false,290
+triticale,25 September,10 October,NA,NA,NA,grain,1.0,false,320
+oats,NA,NA,NA,NA,NA,grain,0.857,false,385
+maize,15 April,30 April,NA,NA,8,grain,1.0,true,13
+potatoes,NA,NA,NA,NA,4,root,0.857,false,5
+carrots,NA,NA,NA,NA,NA,root,0.7857,false,160
+beet,15 March,10 May,NA,NA,NA,root,0.857,false,16
+sunflower,25 March,15 April,NA,NA,NA,other,1.0,false,8
+lucerne,NA,NA,NA,NA,NA,legumes,1.2,false,NA
+peas/beans,15 February,15 March,NA,NA,5,legumes,0.857,false,35/80
+silage clover/grass,NA,NA,NA,NA,NA,legumes,1.1,false,NA
+fodder/clover,NA,NA,NA,NA,NA,legumes,1.2,false,NA
+lawn,NA,NA,NA,NA,NA,grass,0.5,false,NA
+permanent grassland (grazed),NA,NA,NA,NA,NA,grass,1.1,false,NA
+permanent grassland (seeded),NA,NA,NA,NA,NA,grass,1.1,false,NA
+permanent grassland (low yield),NA,NA,NA,NA,NA,grass,1.0,false,NA
+permanent set-aside,NA,NA,NA,NA,NA,semi-natural,0.7857,false,NA
+natural grass,NA,NA,NA,NA,NA,semi-natural,0.567,false,NA
+no growth,NA,NA,NA,NA,NA,semi-natural,0.0,false,NA
+heath,NA,NA,NA,NA,NA,semi-natural,0.567,false,NA
-- 
GitLab