Repository files navigation

ArchetypeBuildingModel.jl

DOIdocumentationlicense

A Julia module for aggregating building stock data into desired archetype building lumped-capacitance thermal models.

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 archetypebuildingweather.

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-02-06: Enabling investment modelling options for the aggregated building stock heating/cooling demand modelling requires revising the modelling approach, making it less suitable for modelling individual buildings. Future developments (and breaking changes) will take place in the forked ArBuMo repository for now, making this repository less likely to receive further updates.

Key contents

  1. archetype_definitions.json, a template for the Spine data structure required for defining the archetype buildings.
  2. process_archetype_buildings.jl, the main program file for archetype building processing using Spine Toolbox.
  3. process_archetype_buildings.json, the Spine Toolbox tool specification for the main program above.
  4. testscript.jl, a testing script/tutorial for using this module.
  5. testscript.ipynb, a testing notebook/tutorial for using the archetypebuildingweather sub-module.
  6. src/ArchetypeBuildingModel.jl, the main Julia module file.
  7. src/archetypebuildingweather/ contains the Python sub-module for automatic weather data processing.
  8. data/ contains data related to the automatic weather data processing.
  9. examples/ contains example definitions for building_fabrics, building_systems, and building_weather.
  10. figs/ contains automatically output diagnostic figures about the automatic weather data aggregation.

ArchetypeBuildingWeather.py

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:

  1. Load a shapefile defining the scope of weather data for atlite, and fetch the data.
  2. Assign the given weights to the shapefile, and include the optional raster data if defined.
  3. Downsample and normalize the weight raster generated above to match ERA5 resolution.
  4. Calculate the aggregated weather parameters required by ArchetypeBuildingModel.jl.

Installation

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:

  1. Create a conda environment with python 3.8, e.g. conda create -n toolboxatlite python=3.8 and activate it.
  2. Install Spine Toolbox from a local source via pip install -r requirements.txt in the Toolbox root folder.
  3. Install PYPSA/atlite via conda install -c conda-forge atlite
  4. Install the ArchetypeBuildingWeather.py sub-module via pip install -e . in the src/ folder.
  5. Install JupyterLab via conda install -c conda-forge jupyterlab.

Usage

This module is intended to be used as a part of a Spine Toolbox workflow, with the following rough steps:

  1. Create a Spine Datastore with building stock data processed by e.g. FinnishBuildingStockData.jl.
  2. Import archetype_definitions.json on top of the processed building stock data.
  3. Define the desired building_archetype objects, and connect them to the relevant building_fabrics, building_loads, building_scope, and building_system objects. (building_weather is optional, and will be automatically generated if missing.)
  4. Use the process_archetype_buildings.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 ArchetypeBuildingModel.jl, and testscript.ipynb for examples on how to use the ArchetypeBuildingWeather.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.

Documentation

Online documentation can be found here, but I haven't bothered to set up automatic workflow for keeping it up to date. Thus, for accessing the latest documentation, one has to build it locally.

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:

  1. Activate the documentation environment from the Julia Package manager
julia> ]
(ArchetypeBuildingModel) pkg> Activate documentation
(documentation) pkg> ]
julia>
  1. Run the documentation/make.jl script to build the documentation.
julia>include("documentation/make.jl")
  1. Open the newly built documentation/build/index.html to start browsing the documentation.

License

MIT, see LICENSE for more information.

How to cite

Please refer to the Cite this section of the ArchetypeBuildingModel.jl entry in VTT's Research Information Portal. If you are feeling especially generous, you can also consider citing the manuscript demonstrating ArchetypeBuildingModel.jl on the level of individual buildings.

Acknowledgements

AKA emblem 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.
EU emblem This project has received funding from the European Union’s Horizon 2020 research and innovation project Spine under grant agreement No 774629.
EU emblemThis work has been partially supported by EU project Mopo (2023-2026), which has received funding from European Climate, Infrastructure and Environment Executive Agency under the European Union’s HORIZON Research and Innovation Actions under grant agreement N°101095998.

About

A Julia module for aggregating building stock data into desired synthetic average archetype building lumped-capacitance thermal models.

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

ArchetypeBuildingModel.jl

DOIdocumentationlicense

A Julia module for aggregating building stock data into desired archetype building lumped-capacitance thermal models.

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 archetypebuildingweather.

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-02-06: Enabling investment modelling options for the aggregated building stock heating/cooling demand modelling requires revising the modelling approach, making it less suitable for modelling individual buildings. Future developments (and breaking changes) will take place in the forked ArBuMo repository for now, making this repository less likely to receive further updates.

Key contents

  1. archetype_definitions.json, a template for the Spine data structure required for defining the archetype buildings.
  2. process_archetype_buildings.jl, the main program file for archetype building processing using Spine Toolbox.
  3. process_archetype_buildings.json, the Spine Toolbox tool specification for the main program above.
  4. testscript.jl, a testing script/tutorial for using this module.
  5. testscript.ipynb, a testing notebook/tutorial for using the archetypebuildingweather sub-module.
  6. src/ArchetypeBuildingModel.jl, the main Julia module file.
  7. src/archetypebuildingweather/ contains the Python sub-module for automatic weather data processing.
  8. data/ contains data related to the automatic weather data processing.
  9. examples/ contains example definitions for building_fabrics, building_systems, and building_weather.
  10. figs/ contains automatically output diagnostic figures about the automatic weather data aggregation.

ArchetypeBuildingWeather.py

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:

  1. Load a shapefile defining the scope of weather data for atlite, and fetch the data.
  2. Assign the given weights to the shapefile, and include the optional raster data if defined.
  3. Downsample and normalize the weight raster generated above to match ERA5 resolution.
  4. Calculate the aggregated weather parameters required by ArchetypeBuildingModel.jl.

Installation

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:

  1. Create a conda environment with python 3.8, e.g. conda create -n toolboxatlite python=3.8 and activate it.
  2. Install Spine Toolbox from a local source via pip install -r requirements.txt in the Toolbox root folder.
  3. Install PYPSA/atlite via conda install -c conda-forge atlite
  4. Install the ArchetypeBuildingWeather.py sub-module via pip install -e . in the src/ folder.
  5. Install JupyterLab via conda install -c conda-forge jupyterlab.

Usage

This module is intended to be used as a part of a Spine Toolbox workflow, with the following rough steps:

  1. Create a Spine Datastore with building stock data processed by e.g. FinnishBuildingStockData.jl.
  2. Import archetype_definitions.json on top of the processed building stock data.
  3. Define the desired building_archetype objects, and connect them to the relevant building_fabrics, building_loads, building_scope, and building_system objects. (building_weather is optional, and will be automatically generated if missing.)
  4. Use the process_archetype_buildings.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 ArchetypeBuildingModel.jl, and testscript.ipynb for examples on how to use the ArchetypeBuildingWeather.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.

Documentation

Online documentation can be found here, but I haven't bothered to set up automatic workflow for keeping it up to date. Thus, for accessing the latest documentation, one has to build it locally.

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:

  1. Activate the documentation environment from the Julia Package manager
julia> ]
(ArchetypeBuildingModel) pkg> Activate documentation
(documentation) pkg> ]
julia>
  1. Run the documentation/make.jl script to build the documentation.
julia>include("documentation/make.jl")
  1. Open the newly built documentation/build/index.html to start browsing the documentation.

License

MIT, see LICENSE for more information.

How to cite

Please refer to the Cite this section of the ArchetypeBuildingModel.jl entry in VTT's Research Information Portal. If you are feeling especially generous, you can also consider citing the manuscript demonstrating ArchetypeBuildingModel.jl on the level of individual buildings.

Acknowledgements

AKA emblem 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.
EU emblem This project has received funding from the European Union’s Horizon 2020 research and innovation project Spine under grant agreement No 774629.
EU emblemThis work has been partially supported by EU project Mopo (2023-2026), which has received funding from European Climate, Infrastructure and Environment Executive Agency under the European Union’s HORIZON Research and Innovation Actions under grant agreement N°101095998.

About

A Julia module for aggregating building stock data into desired synthetic average archetype building lumped-capacitance thermal models.

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ArchetypeBuildingModel.jl

DOIdocumentationlicense

A Julia module for aggregating building stock data into desired archetype building lumped-capacitance thermal models.

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 archetypebuildingweather.

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-02-06: Enabling investment modelling options for the aggregated building stock heating/cooling demand modelling requires revising the modelling approach, making it less suitable for modelling individual buildings. Future developments (and breaking changes) will take place in the forked ArBuMo repository for now, making this repository less likely to receive further updates.

Key contents

  1. archetype_definitions.json, a template for the Spine data structure required for defining the archetype buildings.
  2. process_archetype_buildings.jl, the main program file for archetype building processing using Spine Toolbox.
  3. process_archetype_buildings.json, the Spine Toolbox tool specification for the main program above.
  4. testscript.jl, a testing script/tutorial for using this module.
  5. testscript.ipynb, a testing notebook/tutorial for using the archetypebuildingweather sub-module.
  6. src/ArchetypeBuildingModel.jl, the main Julia module file.
  7. src/archetypebuildingweather/ contains the Python sub-module for automatic weather data processing.
  8. data/ contains data related to the automatic weather data processing.
  9. examples/ contains example definitions for building_fabrics, building_systems, and building_weather.
  10. figs/ contains automatically output diagnostic figures about the automatic weather data aggregation.

ArchetypeBuildingWeather.py

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:

  1. Load a shapefile defining the scope of weather data for atlite, and fetch the data.
  2. Assign the given weights to the shapefile, and include the optional raster data if defined.
  3. Downsample and normalize the weight raster generated above to match ERA5 resolution.
  4. Calculate the aggregated weather parameters required by ArchetypeBuildingModel.jl.

Installation

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:

  1. Create a conda environment with python 3.8, e.g. conda create -n toolboxatlite python=3.8 and activate it.
  2. Install Spine Toolbox from a local source via pip install -r requirements.txt in the Toolbox root folder.
  3. Install PYPSA/atlite via conda install -c conda-forge atlite
  4. Install the ArchetypeBuildingWeather.py sub-module via pip install -e . in the src/ folder.
  5. Install JupyterLab via conda install -c conda-forge jupyterlab.

Usage

This module is intended to be used as a part of a Spine Toolbox workflow, with the following rough steps:

  1. Create a Spine Datastore with building stock data processed by e.g. FinnishBuildingStockData.jl.
  2. Import archetype_definitions.json on top of the processed building stock data.
  3. Define the desired building_archetype objects, and connect them to the relevant building_fabrics, building_loads, building_scope, and building_system objects. (building_weather is optional, and will be automatically generated if missing.)
  4. Use the process_archetype_buildings.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 ArchetypeBuildingModel.jl, and testscript.ipynb for examples on how to use the ArchetypeBuildingWeather.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.

Documentation

Online documentation can be found here, but I haven't bothered to set up automatic workflow for keeping it up to date. Thus, for accessing the latest documentation, one has to build it locally.

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:

  1. Activate the documentation environment from the Julia Package manager
julia> ]
(ArchetypeBuildingModel) pkg> Activate documentation
(documentation) pkg> ]
julia>
  1. Run the documentation/make.jl script to build the documentation.
julia>include("documentation/make.jl")
  1. Open the newly built documentation/build/index.html to start browsing the documentation.

License

MIT, see LICENSE for more information.

How to cite

Please refer to the Cite this section of the ArchetypeBuildingModel.jl entry in VTT's Research Information Portal. If you are feeling especially generous, you can also consider citing the manuscript demonstrating ArchetypeBuildingModel.jl on the level of individual buildings.

Acknowledgements

AKA emblem 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.
EU emblem This project has received funding from the European Union’s Horizon 2020 research and innovation project Spine under grant agreement No 774629.
EU emblemThis work has been partially supported by EU project Mopo (2023-2026), which has received funding from European Climate, Infrastructure and Environment Executive Agency under the European Union’s HORIZON Research and Innovation Actions under grant agreement N°101095998.

About

A Julia module for aggregating building stock data into desired synthetic average archetype building lumped-capacitance thermal models.

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ArchetypeBuildingModel.jl

DOIdocumentationlicense

A Julia module for aggregating building stock data into desired archetype building lumped-capacitance thermal models.

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 archetypebuildingweather.

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-02-06: Enabling investment modelling options for the aggregated building stock heating/cooling demand modelling requires revising the modelling approach, making it less suitable for modelling individual buildings. Future developments (and breaking changes) will take place in the forked ArBuMo repository for now, making this repository less likely to receive further updates.

Key contents

  1. archetype_definitions.json, a template for the Spine data structure required for defining the archetype buildings.
  2. process_archetype_buildings.jl, the main program file for archetype building processing using Spine Toolbox.
  3. process_archetype_buildings.json, the Spine Toolbox tool specification for the main program above.
  4. testscript.jl, a testing script/tutorial for using this module.
  5. testscript.ipynb, a testing notebook/tutorial for using the archetypebuildingweather sub-module.
  6. src/ArchetypeBuildingModel.jl, the main Julia module file.
  7. src/archetypebuildingweather/ contains the Python sub-module for automatic weather data processing.
  8. data/ contains data related to the automatic weather data processing.
  9. examples/ contains example definitions for building_fabrics, building_systems, and building_weather.
  10. figs/ contains automatically output diagnostic figures about the automatic weather data aggregation.

ArchetypeBuildingWeather.py

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:

  1. Load a shapefile defining the scope of weather data for atlite, and fetch the data.
  2. Assign the given weights to the shapefile, and include the optional raster data if defined.
  3. Downsample and normalize the weight raster generated above to match ERA5 resolution.
  4. Calculate the aggregated weather parameters required by ArchetypeBuildingModel.jl.

Installation

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:

  1. Create a conda environment with python 3.8, e.g. conda create -n toolboxatlite python=3.8 and activate it.
  2. Install Spine Toolbox from a local source via pip install -r requirements.txt in the Toolbox root folder.
  3. Install PYPSA/atlite via conda install -c conda-forge atlite
  4. Install the ArchetypeBuildingWeather.py sub-module via pip install -e . in the src/ folder.
  5. Install JupyterLab via conda install -c conda-forge jupyterlab.

Usage

This module is intended to be used as a part of a Spine Toolbox workflow, with the following rough steps:

  1. Create a Spine Datastore with building stock data processed by e.g. FinnishBuildingStockData.jl.
  2. Import archetype_definitions.json on top of the processed building stock data.
  3. Define the desired building_archetype objects, and connect them to the relevant building_fabrics, building_loads, building_scope, and building_system objects. (building_weather is optional, and will be automatically generated if missing.)
  4. Use the process_archetype_buildings.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 ArchetypeBuildingModel.jl, and testscript.ipynb for examples on how to use the ArchetypeBuildingWeather.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.

Documentation

Online documentation can be found here, but I haven't bothered to set up automatic workflow for keeping it up to date. Thus, for accessing the latest documentation, one has to build it locally.

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:

  1. Activate the documentation environment from the Julia Package manager
julia> ]
(ArchetypeBuildingModel) pkg> Activate documentation
(documentation) pkg> ]
julia>
  1. Run the documentation/make.jl script to build the documentation.
julia>include("documentation/make.jl")
  1. Open the newly built documentation/build/index.html to start browsing the documentation.

License

MIT, see LICENSE for more information.

How to cite

Please refer to the Cite this section of the ArchetypeBuildingModel.jl entry in VTT's Research Information Portal. If you are feeling especially generous, you can also consider citing the manuscript demonstrating ArchetypeBuildingModel.jl on the level of individual buildings.

Acknowledgements

AKA emblem 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.
EU emblem This project has received funding from the European Union’s Horizon 2020 research and innovation project Spine under grant agreement No 774629.
EU emblemThis work has been partially supported by EU project Mopo (2023-2026), which has received funding from European Climate, Infrastructure and Environment Executive Agency under the European Union’s HORIZON Research and Innovation Actions under grant agreement N°101095998.

About

A Julia module for aggregating building stock data into desired synthetic average archetype building lumped-capacitance thermal models.

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

ArchetypeBuildingModel.jl

DOIdocumentationlicense

A Julia module for aggregating building stock data into desired archetype building lumped-capacitance thermal models.

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 archetypebuildingweather.

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-02-06: Enabling investment modelling options for the aggregated building stock heating/cooling demand modelling requires revising the modelling approach, making it less suitable for modelling individual buildings. Future developments (and breaking changes) will take place in the forked ArBuMo repository for now, making this repository less likely to receive further updates.

Key contents

  1. archetype_definitions.json, a template for the Spine data structure required for defining the archetype buildings.
  2. process_archetype_buildings.jl, the main program file for archetype building processing using Spine Toolbox.
  3. process_archetype_buildings.json, the Spine Toolbox tool specification for the main program above.
  4. testscript.jl, a testing script/tutorial for using this module.
  5. testscript.ipynb, a testing notebook/tutorial for using the archetypebuildingweather sub-module.
  6. src/ArchetypeBuildingModel.jl, the main Julia module file.
  7. src/archetypebuildingweather/ contains the Python sub-module for automatic weather data processing.
  8. data/ contains data related to the automatic weather data processing.
  9. examples/ contains example definitions for building_fabrics, building_systems, and building_weather.
  10. figs/ contains automatically output diagnostic figures about the automatic weather data aggregation.

ArchetypeBuildingWeather.py

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:

  1. Load a shapefile defining the scope of weather data for atlite, and fetch the data.
  2. Assign the given weights to the shapefile, and include the optional raster data if defined.
  3. Downsample and normalize the weight raster generated above to match ERA5 resolution.
  4. Calculate the aggregated weather parameters required by ArchetypeBuildingModel.jl.

Installation

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:

  1. Create a conda environment with python 3.8, e.g. conda create -n toolboxatlite python=3.8 and activate it.
  2. Install Spine Toolbox from a local source via pip install -r requirements.txt in the Toolbox root folder.
  3. Install PYPSA/atlite via conda install -c conda-forge atlite
  4. Install the ArchetypeBuildingWeather.py sub-module via pip install -e . in the src/ folder.
  5. Install JupyterLab via conda install -c conda-forge jupyterlab.

Usage

This module is intended to be used as a part of a Spine Toolbox workflow, with the following rough steps:

  1. Create a Spine Datastore with building stock data processed by e.g. FinnishBuildingStockData.jl.
  2. Import archetype_definitions.json on top of the processed building stock data.
  3. Define the desired building_archetype objects, and connect them to the relevant building_fabrics, building_loads, building_scope, and building_system objects. (building_weather is optional, and will be automatically generated if missing.)
  4. Use the process_archetype_buildings.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 ArchetypeBuildingModel.jl, and testscript.ipynb for examples on how to use the ArchetypeBuildingWeather.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.

Documentation

Online documentation can be found here, but I haven't bothered to set up automatic workflow for keeping it up to date. Thus, for accessing the latest documentation, one has to build it locally.

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:

  1. Activate the documentation environment from the Julia Package manager
julia> ]
(ArchetypeBuildingModel) pkg> Activate documentation
(documentation) pkg> ]
julia>
  1. Run the documentation/make.jl script to build the documentation.
julia>include("documentation/make.jl")
  1. Open the newly built documentation/build/index.html to start browsing the documentation.

License

MIT, see LICENSE for more information.

How to cite

Please refer to the Cite this section of the ArchetypeBuildingModel.jl entry in VTT's Research Information Portal. If you are feeling especially generous, you can also consider citing the manuscript demonstrating ArchetypeBuildingModel.jl on the level of individual buildings.

Acknowledgements

AKA emblem 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.
EU emblem This project has received funding from the European Union’s Horizon 2020 research and innovation project Spine under grant agreement No 774629.
EU emblemThis work has been partially supported by EU project Mopo (2023-2026), which has received funding from European Climate, Infrastructure and Environment Executive Agency under the European Union’s HORIZON Research and Innovation Actions under grant agreement N°101095998.

About

A Julia module for aggregating building stock data into desired synthetic average archetype building lumped-capacitance thermal models.

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ArchetypeBuildingModel.jl

DOIdocumentationlicense

A Julia module for aggregating building stock data into desired archetype building lumped-capacitance thermal models.

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 archetypebuildingweather.

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-02-06: Enabling investment modelling options for the aggregated building stock heating/cooling demand modelling requires revising the modelling approach, making it less suitable for modelling individual buildings. Future developments (and breaking changes) will take place in the forked ArBuMo repository for now, making this repository less likely to receive further updates.

Key contents

  1. archetype_definitions.json, a template for the Spine data structure required for defining the archetype buildings.
  2. process_archetype_buildings.jl, the main program file for archetype building processing using Spine Toolbox.
  3. process_archetype_buildings.json, the Spine Toolbox tool specification for the main program above.
  4. testscript.jl, a testing script/tutorial for using this module.
  5. testscript.ipynb, a testing notebook/tutorial for using the archetypebuildingweather sub-module.
  6. src/ArchetypeBuildingModel.jl, the main Julia module file.
  7. src/archetypebuildingweather/ contains the Python sub-module for automatic weather data processing.
  8. data/ contains data related to the automatic weather data processing.
  9. examples/ contains example definitions for building_fabrics, building_systems, and building_weather.
  10. figs/ contains automatically output diagnostic figures about the automatic weather data aggregation.

ArchetypeBuildingWeather.py

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:

  1. Load a shapefile defining the scope of weather data for atlite, and fetch the data.
  2. Assign the given weights to the shapefile, and include the optional raster data if defined.
  3. Downsample and normalize the weight raster generated above to match ERA5 resolution.
  4. Calculate the aggregated weather parameters required by ArchetypeBuildingModel.jl.

Installation

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:

  1. Create a conda environment with python 3.8, e.g. conda create -n toolboxatlite python=3.8 and activate it.
  2. Install Spine Toolbox from a local source via pip install -r requirements.txt in the Toolbox root folder.
  3. Install PYPSA/atlite via conda install -c conda-forge atlite
  4. Install the ArchetypeBuildingWeather.py sub-module via pip install -e . in the src/ folder.
  5. Install JupyterLab via conda install -c conda-forge jupyterlab.

Usage

This module is intended to be used as a part of a Spine Toolbox workflow, with the following rough steps:

  1. Create a Spine Datastore with building stock data processed by e.g. FinnishBuildingStockData.jl.
  2. Import archetype_definitions.json on top of the processed building stock data.
  3. Define the desired building_archetype objects, and connect them to the relevant building_fabrics, building_loads, building_scope, and building_system objects. (building_weather is optional, and will be automatically generated if missing.)
  4. Use the process_archetype_buildings.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 ArchetypeBuildingModel.jl, and testscript.ipynb for examples on how to use the ArchetypeBuildingWeather.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.

Documentation

Online documentation can be found here, but I haven't bothered to set up automatic workflow for keeping it up to date. Thus, for accessing the latest documentation, one has to build it locally.

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:

  1. Activate the documentation environment from the Julia Package manager
julia> ]
(ArchetypeBuildingModel) pkg> Activate documentation
(documentation) pkg> ]
julia>
  1. Run the documentation/make.jl script to build the documentation.
julia>include("documentation/make.jl")
  1. Open the newly built documentation/build/index.html to start browsing the documentation.

License

MIT, see LICENSE for more information.

How to cite

Please refer to the Cite this section of the ArchetypeBuildingModel.jl entry in VTT's Research Information Portal. If you are feeling especially generous, you can also consider citing the manuscript demonstrating ArchetypeBuildingModel.jl on the level of individual buildings.

Acknowledgements

AKA emblem 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.
EU emblem This project has received funding from the European Union’s Horizon 2020 research and innovation project Spine under grant agreement No 774629.
EU emblemThis work has been partially supported by EU project Mopo (2023-2026), which has received funding from European Climate, Infrastructure and Environment Executive Agency under the European Union’s HORIZON Research and Innovation Actions under grant agreement N°101095998.

About

A Julia module for aggregating building stock data into desired synthetic average archetype building lumped-capacitance thermal models.

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ArchetypeBuildingModel.jl

DOIdocumentationlicense

A Julia module for aggregating building stock data into desired archetype building lumped-capacitance thermal models.

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 archetypebuildingweather.

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-02-06: Enabling investment modelling options for the aggregated building stock heating/cooling demand modelling requires revising the modelling approach, making it less suitable for modelling individual buildings. Future developments (and breaking changes) will take place in the forked ArBuMo repository for now, making this repository less likely to receive further updates.

Key contents

  1. archetype_definitions.json, a template for the Spine data structure required for defining the archetype buildings.
  2. process_archetype_buildings.jl, the main program file for archetype building processing using Spine Toolbox.
  3. process_archetype_buildings.json, the Spine Toolbox tool specification for the main program above.
  4. testscript.jl, a testing script/tutorial for using this module.
  5. testscript.ipynb, a testing notebook/tutorial for using the archetypebuildingweather sub-module.
  6. src/ArchetypeBuildingModel.jl, the main Julia module file.
  7. src/archetypebuildingweather/ contains the Python sub-module for automatic weather data processing.
  8. data/ contains data related to the automatic weather data processing.
  9. examples/ contains example definitions for building_fabrics, building_systems, and building_weather.
  10. figs/ contains automatically output diagnostic figures about the automatic weather data aggregation.

ArchetypeBuildingWeather.py

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:

  1. Load a shapefile defining the scope of weather data for atlite, and fetch the data.
  2. Assign the given weights to the shapefile, and include the optional raster data if defined.
  3. Downsample and normalize the weight raster generated above to match ERA5 resolution.
  4. Calculate the aggregated weather parameters required by ArchetypeBuildingModel.jl.

Installation

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:

  1. Create a conda environment with python 3.8, e.g. conda create -n toolboxatlite python=3.8 and activate it.
  2. Install Spine Toolbox from a local source via pip install -r requirements.txt in the Toolbox root folder.
  3. Install PYPSA/atlite via conda install -c conda-forge atlite
  4. Install the ArchetypeBuildingWeather.py sub-module via pip install -e . in the src/ folder.
  5. Install JupyterLab via conda install -c conda-forge jupyterlab.

Usage

This module is intended to be used as a part of a Spine Toolbox workflow, with the following rough steps:

  1. Create a Spine Datastore with building stock data processed by e.g. FinnishBuildingStockData.jl.
  2. Import archetype_definitions.json on top of the processed building stock data.
  3. Define the desired building_archetype objects, and connect them to the relevant building_fabrics, building_loads, building_scope, and building_system objects. (building_weather is optional, and will be automatically generated if missing.)
  4. Use the process_archetype_buildings.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 ArchetypeBuildingModel.jl, and testscript.ipynb for examples on how to use the ArchetypeBuildingWeather.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.

Documentation

Online documentation can be found here, but I haven't bothered to set up automatic workflow for keeping it up to date. Thus, for accessing the latest documentation, one has to build it locally.

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:

  1. Activate the documentation environment from the Julia Package manager
julia> ]
(ArchetypeBuildingModel) pkg> Activate documentation
(documentation) pkg> ]
julia>
  1. Run the documentation/make.jl script to build the documentation.
julia>include("documentation/make.jl")
  1. Open the newly built documentation/build/index.html to start browsing the documentation.

License

MIT, see LICENSE for more information.

How to cite

Please refer to the Cite this section of the ArchetypeBuildingModel.jl entry in VTT's Research Information Portal. If you are feeling especially generous, you can also consider citing the manuscript demonstrating ArchetypeBuildingModel.jl on the level of individual buildings.

Acknowledgements

AKA emblem 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.
EU emblem This project has received funding from the European Union’s Horizon 2020 research and innovation project Spine under grant agreement No 774629.
EU emblemThis work has been partially supported by EU project Mopo (2023-2026), which has received funding from European Climate, Infrastructure and Environment Executive Agency under the European Union’s HORIZON Research and Innovation Actions under grant agreement N°101095998.

About

A Julia module for aggregating building stock data into desired synthetic average archetype building lumped-capacitance thermal models.

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

ArchetypeBuildingModel.jl

DOIdocumentationlicense

A Julia module for aggregating building stock data into desired archetype building lumped-capacitance thermal models.

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 archetypebuildingweather.

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-02-06: Enabling investment modelling options for the aggregated building stock heating/cooling demand modelling requires revising the modelling approach, making it less suitable for modelling individual buildings. Future developments (and breaking changes) will take place in the forked ArBuMo repository for now, making this repository less likely to receive further updates.

Key contents

  1. archetype_definitions.json, a template for the Spine data structure required for defining the archetype buildings.
  2. process_archetype_buildings.jl, the main program file for archetype building processing using Spine Toolbox.
  3. process_archetype_buildings.json, the Spine Toolbox tool specification for the main program above.
  4. testscript.jl, a testing script/tutorial for using this module.
  5. testscript.ipynb, a testing notebook/tutorial for using the archetypebuildingweather sub-module.
  6. src/ArchetypeBuildingModel.jl, the main Julia module file.
  7. src/archetypebuildingweather/ contains the Python sub-module for automatic weather data processing.
  8. data/ contains data related to the automatic weather data processing.
  9. examples/ contains example definitions for building_fabrics, building_systems, and building_weather.
  10. figs/ contains automatically output diagnostic figures about the automatic weather data aggregation.

ArchetypeBuildingWeather.py

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:

  1. Load a shapefile defining the scope of weather data for atlite, and fetch the data.
  2. Assign the given weights to the shapefile, and include the optional raster data if defined.
  3. Downsample and normalize the weight raster generated above to match ERA5 resolution.
  4. Calculate the aggregated weather parameters required by ArchetypeBuildingModel.jl.

Installation

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:

  1. Create a conda environment with python 3.8, e.g. conda create -n toolboxatlite python=3.8 and activate it.
  2. Install Spine Toolbox from a local source via pip install -r requirements.txt in the Toolbox root folder.
  3. Install PYPSA/atlite via conda install -c conda-forge atlite
  4. Install the ArchetypeBuildingWeather.py sub-module via pip install -e . in the src/ folder.
  5. Install JupyterLab via conda install -c conda-forge jupyterlab.

Usage

This module is intended to be used as a part of a Spine Toolbox workflow, with the following rough steps:

  1. Create a Spine Datastore with building stock data processed by e.g. FinnishBuildingStockData.jl.
  2. Import archetype_definitions.json on top of the processed building stock data.
  3. Define the desired building_archetype objects, and connect them to the relevant building_fabrics, building_loads, building_scope, and building_system objects. (building_weather is optional, and will be automatically generated if missing.)
  4. Use the process_archetype_buildings.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 ArchetypeBuildingModel.jl, and testscript.ipynb for examples on how to use the ArchetypeBuildingWeather.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.

Documentation

Online documentation can be found here, but I haven't bothered to set up automatic workflow for keeping it up to date. Thus, for accessing the latest documentation, one has to build it locally.

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:

  1. Activate the documentation environment from the Julia Package manager
julia> ]
(ArchetypeBuildingModel) pkg> Activate documentation
(documentation) pkg> ]
julia>
  1. Run the documentation/make.jl script to build the documentation.
julia>include("documentation/make.jl")
  1. Open the newly built documentation/build/index.html to start browsing the documentation.

License

MIT, see LICENSE for more information.

How to cite

Please refer to the Cite this section of the ArchetypeBuildingModel.jl entry in VTT's Research Information Portal. If you are feeling especially generous, you can also consider citing the manuscript demonstrating ArchetypeBuildingModel.jl on the level of individual buildings.

Acknowledgements

AKA emblem 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.
EU emblem This project has received funding from the European Union’s Horizon 2020 research and innovation project Spine under grant agreement No 774629.
EU emblemThis work has been partially supported by EU project Mopo (2023-2026), which has received funding from European Climate, Infrastructure and Environment Executive Agency under the European Union’s HORIZON Research and Innovation Actions under grant agreement N°101095998.

About

A Julia module for aggregating building stock data into desired synthetic average archetype building lumped-capacitance thermal models.

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages