A Julia module for aggregating building stock data into desired synthetic average archetype building lumped-capacitance thermal models for large-scale energy system modelling purposes.
The goal of this module is to aggregate building stock data into arbitrary
simplified lumped-capacitance thermal models representing the flexible
heating/cooling demand of the underlying building stock for large-scale
energy system models like Backbone
or SpineOpt.
Requires building stock data processed by e.g. FinnishBuildingStockData.jl or similar,
as well as archetype building definitions according to the template provided in archetype_definitions.json
as input.
For automatic weather data processing, this module uses the Python sub-module ArBuWe
.
ArBuMo.jl is a fork of ArchetypeBuildingModel.jl for further developments, as implementing investment modelling options requires reformulating the building stock heating/cooling demand modelling as well as the lumped-capacitance thermal models.
Important
2024-08-16: The FlexiB project funding this research is ending, making it unlikely that this module will receive see further active development.
2024-04-12: The Backbone and SpineOpt are currently broken, as the simplest investment formulation requires new features to be implemented in both models. SpineOpt will likely receive a working interface first, but I'm unable to estimate when that will be for now.
archetype_definitions.json
, a template for the Spine data structure required for defining the archetype buildings.run_ArBuMo.jl
, the main program file for archetype building processing using Spine Toolbox.run_ArBuMo.json
, the Spine Toolbox tool specification for the main program above.testscript.jl
, a testing script/tutorial for using this module.testscript.ipynb
, a testing notebook/tutorial for using theArBuWe
sub-module.src/ArBuMo.jl
, the main Julia module file.src/ArBuWe/
contains the Python sub-module for automatic weather data processing.data/
contains data related to the automatic weather data processing.examples/
contains example definitions forbuilding_fabrics
,building_systems
, and obsoletebuilding_weather
.figs/
contains automatically output diagnostic figures about the automatic weather data aggregation.
A Python sub-module for processing weather data.
This package contains the necessary functions for aggregating ERA5 weather data
using PyPSA/atlite
for large geographical
areas described using a shapefile, a set of weights connected to the
shapefile, and an optional raster data file also used for weighting.
Essentially, the operating workflow of the module goes as follows:
- Load a shapefile defining the scope of weather data for
atlite
, and fetch the data. - Assign the given weights to the shapefile, and include the optional raster data if defined.
- Downsample and normalize the weight raster generated above to match ERA5 resolution.
- Estimate the aggregated steady-state raw heating/cooling demand for the indoor air node for each archetype building and heating/cooling set-point.
- Calculate aggregated weather parameters required for
ArBuMo.jl
for estimating the final total heating/cooling demand when accounting for thermal mass dynamics.
Unfortunately, this module has quite complicated dependencies due to
SpineInterface.jl
and
PYPSA/atlite
needing to operate using a
single python environment accessible via PyCall
.
Thus, it needs quite a specific python environment to be set up and linked with
SpineInterface.jl
.
Here's a rough sketch of how I got it working:
- Create a conda environment with python 3.8, e.g.
conda create -n toolboxatlite python=3.8
and activate it. - Install Spine Toolbox from a local source via
pip install -r requirements.txt
in the Toolbox root folder. - Install
PYPSA/atlite
viaconda install -c conda-forge atlite
- Install the
ArBuWe.py
sub-module viapip install -e .
in thesrc/
folder. - Install JupyterLab via
conda install -c conda-forge jupyterlab
.
This module is intended to be used as a part of a Spine Toolbox workflow, with the following rough steps:
- Create a Spine Datastore with building stock data processed by e.g. FinnishBuildingStockData.jl.
- Import
archetype_definitions.json
on top of the processed building stock data. - Define the desired
building_archetype
objects, and connect them to the relevantbuilding_fabrics
,building_loads
,building_scope
, andbuilding_system
objects. - Use the
run_ArBuMo.json
tool to process the data and definitions into the desired energy system model input.
In case you need to familiarize yourself with the inner workings of this module,
see testscript.jl
for examples on how to use the ArBuMo.jl
,
and testscript.ipynb
for examples on how to use the ArBuWe.py
sub-module.
Note that it is recommended to store the relevant geographical information system (GIS)
data used via the module within the data/
folder in the repository for the moment.
Note
As this module is still a work in progress, I haven't bothered to set up online documentation yet.
In order to build and read the documentation locally, start a Julia REPL from the root folder of this module and perform the following steps:
- Activate the
documentation
environment from the Julia Package manager
julia> ]
(ArBuMo) pkg> activate documentation
(documentation) pkg> ]
julia>
- Run the
documentation/make.jl
script to build the documentation.
julia> include("documentation/make.jl")
- Open the newly built
documentation/build/index.html
to start browsing the documentation.
MIT, see LICENSE
for more information.
TBD
This module was built for the Research Council of Finland project "Integration of building flexibility into future energy systems (FlexiB)" under grant agreement No 332421. |