Skip to content
Snippets Groups Projects
  • Marco Matthies's avatar
    d353b955
    Change weather data representation · d353b955
    Marco Matthies authored
    `Weather` is now a type that stores the complete simulation data
    (previously it just stored the weather data for a single day).
    Weather data storage is now a struct-of-arrays, previously it was a
    dict-of-structs.
    
    Weather data can be accessed with functions such as `sunshine(weather,
    date)`.
    
    Missing weather input data for temperature (min/max/mean),
    precipitation, and evapotranspiration is now an error.  In the future,
    missing values could perhaps be imputed.
    
    `AgricultureModel` and `Weather` are now defined with `@kwdef`,
    allowing their constructors to be called with keyword arguments.
    d353b955
    History
    Change weather data representation
    Marco Matthies authored
    `Weather` is now a type that stores the complete simulation data
    (previously it just stored the weather data for a single day).
    Weather data storage is now a struct-of-arrays, previously it was a
    dict-of-structs.
    
    Weather data can be accessed with functions such as `sunshine(weather,
    date)`.
    
    Missing weather input data for temperature (min/max/mean),
    precipitation, and evapotranspiration is now an error.  In the future,
    missing values could perhaps be imputed.
    
    `AgricultureModel` and `Weather` are now defined with `@kwdef`,
    allowing their constructors to be called with keyword arguments.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
To find the state of this project's repository at the time of any of these versions, check out the tags.
CHANGELOG.md 9.55 KiB

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.6.1] - unreleased

Plan: add soil maps, update GIS documentation, add more regions

Added

  • user manual: documentation is now compiled to PDF (#91)

Changed

  • added soil map section to GIS docs

  • the Weather type now stores all weather information for the whole simulation as a "struct-of-arrays" and with a function interface, e.g. sunshine(weather, date) (previously, Weather was a struct that stored the weather data for one day only, and AgricultureModel had a field weather::Dict{Date,Weather}, making it a "dict-of-struct" data layout)

  • AgricultureModel and Weather are now defined with @kwdef, allowing for keyword arguments in their constructors

  • when reading weather data, we now throw an error when there are missing values for the fields min_temperature, max_temperature, mean_temperature, precipitation, and potential_evapotranspiration (in the future missing values could also be imputed)

Deprecated

Removed

Fixed

[0.6.0] - 13-01-2025

This point 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() and initialise() now take a params 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 for is_c4_plant, sowingdensity, and phase_before_harvest

Deprecated

Removed

  • crop.cropfile and crop.growthfile parameters -> user configuration is now done via crop.cropdirectory, names of ALMaSS input files are specified as constants in almass.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 for FarmPlots

  • @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, a Date, or a Tuple{Int64,Int64}
    • automatic conversion from Date or Tuple{Int64,Int64}
    • can use operators: ==, <, +, -, :
    • thisyear(), lastyear(), nextyear() functions and macros
  • 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