diff --git a/src/Persefone.jl b/src/Persefone.jl index eeb8ec0694a6abdf7b4896505679611e03bcbbc8..ad32aef3a8e66814209fc56b7ab69397b74c40c8 100644 --- a/src/Persefone.jl +++ b/src/Persefone.jl @@ -144,6 +144,7 @@ include("world/landscape.jl") include("world/weather.jl") include("crop/farmplot.jl") +include("crop/cropmodels.jl") include("crop/almass.jl") include("crop/simplecrop.jl") diff --git a/src/core/simulation.jl b/src/core/simulation.jl index 0a18828b688d6af0eaca99f03215e84bc4c46b9b..b3e4cf0153b5f1747037aa24f021b95b87bbf40f 100644 --- a/src/core/simulation.jl +++ b/src/core/simulation.jl @@ -117,23 +117,9 @@ function initmodel(settings::Dict{String, Any}) settings["world.weatherfile"]), settings["core.startdate"], settings["core.enddate"]) - - # TODO: make this switching on cropmodel simpler - if settings["crop.cropmodel"] == "almass" - Tcroptype = ALMaSS.CropType - Tcropstate = ALMaSS.CropState - crops = ALMaSS.readcropparameters(settings["crop.cropfile"], - settings["crop.growthfile"]) - elseif settings["crop.cropmodel"] == "simple" - Tcroptype = SimpleCrop.CropType - Tcropstate = SimpleCrop.CropState - crops_almass = ALMaSS.readcropparameters(settings["crop.cropfile"], + crops, Tcroptype, Tcropstate = initcropmodel(settings["crop.cropmodel"], + settings["crop.cropfile"], settings["crop.growthfile"]) - crops = Dict(name => SimpleCrop.CropType(ct.name) for (name, ct) in crops_almass) - else - error("Init for crop model \"$(settings["crop.cropmodel"])\" not implemented") - end - farmers = Vector{Farmer}() farmplots = Vector{FarmPlot{Tcropstate}}() model = AgricultureModel{Tcroptype,Tcropstate}( @@ -154,14 +140,7 @@ function initmodel(settings::Dict{String, Any}) ) saveinputfiles(model) - if settings["crop.cropmodel"] == "almass" - ALMaSS.initfields!(model) - elseif settings["crop.cropmodel"] == "simple" - SimpleCrop.initfields!(model) - else - error("initfields! for crop model \"$(settings["crop.cropmodel"])\" not implemented") - end - + initfields!(model, settings["crop.cropmodel"]) initfarms!(model) initnature!(model) model diff --git a/src/crop/cropmodels.jl b/src/crop/cropmodels.jl new file mode 100644 index 0000000000000000000000000000000000000000..6b47594555aa9cedcea5e964b2d61600e53ad977 --- /dev/null +++ b/src/crop/cropmodels.jl @@ -0,0 +1,30 @@ +### Persefone.jl - a model of agricultural landscapes and ecosystems in Europe. +### +### Crop model helper functions. +### + +function initcropmodel(cropmodel::AbstractString, cropfile::AbstractString, growthfile::AbstractString) + if cropmodel == "almass" + Tcroptype = ALMaSS.CropType + Tcropstate = ALMaSS.CropState + crops = ALMaSS.readcropparameters(cropfile, growthfile) + elseif cropmodel == "simple" + 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) + else + error("initcropmodel: no implementation for crop model '$cropmodel'") + end + return crops, Tcroptype, Tcropstate +end + +function initfields!(model::SimulationModel, cropmodel::AbstractString) + if cropmodel == "almass" + ALMaSS.initfields!(model) + elseif cropmodel == "simple" + SimpleCrop.initfields!(model) + else + error("initfields! for crop model '$cropmodel'") + end +end