CHANGELOG.md

Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.0.0] - in planning
Aim: 4 species, 2 crop growth models, farm model, GAEC scenarios, experimental analysis
Plan: decouple CairoMakie (#81), fix & test ALMaSS, set up first experiments
[0.8.0] - unreleased
This minor release adds the first butterfly model (marbled white), and adds grassland management.
Added
-
Marbled white (Melanargia galathea) species model with associated data outputs
-
implemented management of extensive and intensive grassland in the farm model (new parameters:
farm.extensivegrassland
,farm.mowingthreshold
,farm.mowingperiod
) -
added
cropgroup()
functions -
added macros for weather functions (
@humidity()
,@maxtemp()
, etc.)
Changed
-
Skylark model parameters can be set via configuration file
-
Skylark model validation completed
-
ALMaSS grassland data expanded to allow continued growth after mowing
-
crop rotation on all fields can now be set via parameter
farm.croprotation
-
the model now attempts to fix misclassifications in the land cover map if the
world.fixlandcover
parameter istrue
-
DataOutputs can now be passed a string with an AnnualDate instead of a frequency to specify on which date they should be run
-
the
world.mapdirectory
parameter has been split up intoworld.mapdirectory
andworld.region
Deprecated
Removed
Fixed
-
fixed post-mowing grass growth in ALMaSS
-
fixed
isvalidstart()
bug inalmass.jl
-
fixed a bug in
initpopulations!()
-
interpolated missing weather data in Eichsfeld
[0.7.1] - 17-6-2025
Added
- AquaCrop can now estimate crop height from dry biomass using the
rational function regression
y = a * (x/x0)^b / (c + (x/x0)^b)
with parameters fitted for maize, winter wheat, winter barley, and winter rapeseed. AquaCrop by itself does not model plant height.
[0.7.0] - 14-03-2025
This minor release adds support for the AquaCrop crop model.
Added
-
Add AquaCrop crop model
-
Simple linear crop height estimation for AquaCrop plants from biomass (AquaCrop does not model plant height)
-
Read soil type map, controlled with the setting "world.soiltypesmap"
-
Landscape
Pixel
s store their soil type (enum SoilType
) -
FarmPlot
s store the most common soil type of their landscapePixel
s (AquaCrop needs the soil type as an input parameter).
Changed
- Allow multiple crop models to be used in one simulation. The settings "crop.cropmodel" and "crop.cropdirectory" are now comma-separated lists of crop models and their data directories.
Deprecated
Removed
Fixed
[0.6.1] - 14-03-2025
Added
-
user manual: documentation is now compiled to PDF (#91)
-
added soil maps to region data, but not used yet
-
added
mean_cloud_cover
andpotential_evapotranspiration
fields to weather data csv files
Changed
-
added soil map section to GIS docs
-
Changed weather internal representation to struct-of-arrays (previously a dict-of-struct representation). The
Weather
type now stores all weather information for the whole simulation, with a function interface, e.g.sunshine(weather, date)
. -
When reading weather data, we now throw an error when there are missing days or any missing values for the fields
min_temperature
,max_temperature
,mean_temperature
,precipitation
, andpotential_evapotranspiration
. In the future missing values could also be imputed. -
The script for weather data extraction at
data/regions/auxiliary/extract_weather_data.R
has been reworked to always return an output row for each day in the date range, even if the day is missing in the original data source. It now also accepts the stations to download as command-line arguments. Therenv
lockfile for the R environment used to run the script can be found atdata/regions/auxiliary/renv.lock
.
Deprecated
Removed
Fixed
[0.6.0] - 13-01-2025
This minor release re-implements the ALMaSS crop model
Added
-
crop.cropdirectory
parameter specifies folder in which all crop data files for the selected crop model can be found.
Changed
-
preprocessparameters()
checks whether the map and crop directories are reachable from the current working directory. If not, it checks whether it can be reached from the package directory. This makes running simulations easier when Persefone has been installed as a package. -
simulate()
andinitialise()
now take aparams
keyword argument that can be used to override parameters from other input sources -
The ALMaSS crop data config file
data/crops/almass/crop_data_general.csv
now has extra columns foris_c4_plant
,sowingdensity
, andphase_before_harvest
Deprecated
Removed
-
crop.cropfile
andcrop.growthfile
parameters -> user configuration is now done viacrop.cropdirectory
, names of ALMaSS input files are specified as constants inalmass.jl
Fixed
- The implementation of the ALMaSS vegetation model in Persefone has been completely rewritten, hopefully more faithfully reproducing the logic in ALMaSS. The resulting plant heights are now more realistic and do not produce the extreme plant heights seen previously (which was due to an erroneous interpretation of the ALMaSS growth curves).
[0.5.5] - 09-08-2024
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 forFarmPlot
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
Skylark data analysis and new internal utility functions
Added
-
AnnualDate
type and associated functions for working with recurring dates (#101)- can be constructed from two
Int64
, aDate
, or aTuple{Int64,Int64}
- automatic conversion from
Date
orTuple{Int64,Int64}
- can use operators:
==
,<
,+
,-
,:
-
thisyear()
,lastyear()
,nextyear()
functions and macros
- can be constructed from two
-
new file
core/utils.jl
for utility functions that fit in no other file -
irregular data logging using
record!()
/@record()
(#103) -
data outputs & visualisation for the skylark model (#97)
-
randn()
function and macro to sample from a vector using a normal distribution -
make install
to download and install Julia and package dependencies (on Linux, #67) -
weather file for the Thüringer Becken
Changed
-
moved random number functions and macros from
input.jl
toutils.jl
-
expanded weather data for Jena to 1990-2023
-
Non-breeding skylarks only search for neighbours to follow once (-> huge performance improvement!)
Fixed
- bug fixes in the skylark model
[0.5.3] - 31-07-2024
Switchable crop models
Added
-
Support for switchable crop models (#70), crop models can be set with the
cropmodel
setting in the[crop]
section ofparameters.toml
. -
New submodules
ALMaSS
for the ALMaSS crop model, andSimpleCrop
for testing switchable crop models.
Changed
-
All functionality specific to the ALMaSS crop model has been moved to the submodule
ALMaSS
. -
Due to switchable crop models, some types are now parametric:
AgricultureModel{Tcroptype,Tcropstate}
andFarmPlot{Tcropstate}
. -
FarmPlot{Tcropstate}
now only stores basic information about which pixels are part of the farm plot, all crop-specific information is now stored in the fieldcropstate
. Many functions acting on aFarmPlot
now mostly forward to functions of the same name acting on thecropstate
field of aFarmPlot
. -
The type of
height
inALMaSS.CropState
andALMaSS.CropCurveParams
is now a unitful number::Length{Float64}
. -
Both crop models
ALMaSS
andSimpleCrop
now also support the functionscropcover
andcropyield
in addition tocroptype
,cropname
,cropheight
. -
cropheight
now returns a unitful number::Length{Float64}
, and returns height0cm
if the landscape at that position is not aFarmPlot
.