Merge branch 'master' into fix_building_fec

This commit is contained in:
lisazeyen 2024-09-09 18:32:09 +02:00 committed by GitHub
commit d9c872031c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
48 changed files with 1799 additions and 1004 deletions

92
.github/workflows/codeql.yml vendored Normal file
View File

@ -0,0 +1,92 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: ["master"]
pull_request:
branches: ["master"]
schedule:
- cron: '23 18 * * 5'
jobs:
analyze:
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
# required for all workflows
security-events: write
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
- language: python
build-mode: none
# CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if: matrix.build-mode == 'manual'
shell: bash
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"

View File

@ -6,7 +6,7 @@ cff-version: 1.1.0
message: "If you use this package, please cite it in the following way."
title: "PyPSA-Eur: An open sector-coupled optimisation model of the European energy system"
repository: https://github.com/pypsa/pypsa-eur
version: 0.11.0
version: 0.12.0
license: MIT
authors:
- family-names: Brown
@ -36,3 +36,17 @@ authors:
- family-names: Hörsch
given-names: Jonas
orcid: https://orcid.org/0000-0001-9438-767X
- family-names: Schledorn
given-names: Amos
- family-names: Schauß
given-names: Caspar
- family-names: van Greevenbroek
given-names: Koen
- family-names: Millinger
given-names: Markus
- family-names: Glaum
given-names: Philipp
- family-names: Xiong
given-names: Bobby
- family-names: Seibold
given-names: Toni

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: CC0-1.0
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#top-level-configuration
version: 0.11.0
version: 0.12.0
tutorial: false
logging:
@ -42,7 +42,7 @@ scenario:
ll:
- vopt
clusters:
- 38
- 39
- 128
- 256
opts:
@ -56,7 +56,7 @@ scenario:
- 2050
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#countries
countries: ['AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'ME', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK']
countries: ['AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'ME', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK', 'XK']
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#snapshots
snapshots:
@ -155,7 +155,7 @@ renewable:
resource:
method: wind
turbine: Vestas_V112_3MW
smooth: true
smooth: false
add_cutout_windspeed: true
capacity_per_sqkm: 3
# correction_factor: 0.93
@ -175,7 +175,7 @@ renewable:
resource:
method: wind
turbine: NREL_ReferenceTurbine_2020ATB_5.5MW
smooth: true
smooth: false
add_cutout_windspeed: true
capacity_per_sqkm: 2
correction_factor: 0.8855
@ -192,7 +192,7 @@ renewable:
resource:
method: wind
turbine: NREL_ReferenceTurbine_2020ATB_5.5MW
smooth: true
smooth: false
add_cutout_windspeed: true
capacity_per_sqkm: 2
correction_factor: 0.8855
@ -209,7 +209,7 @@ renewable:
resource:
method: wind
turbine: NREL_ReferenceTurbine_5MW_offshore
smooth: true
smooth: false
add_cutout_windspeed: true
# ScholzPhd Tab 4.3.1: 10MW/km^2
capacity_per_sqkm: 2
@ -449,19 +449,23 @@ sector:
2045: 0.8
2050: 1.0
district_heating_loss: 0.15
# check these numbers!
forward_temperature:
default: 90
DK: 70
SE: 70
NO: 70
FI: 70
return_temperature:
default: 50
DK: 40
SE: 40
NO: 40
FI: 40
supply_temperature_approximation:
max_forward_temperature:
FR: 110
DK: 75
DE: 109
CZ: 130
FI: 115
PL: 130
SE: 102
IT: 90
min_forward_temperature:
DE: 82
return_temperature:
DE: 58
lower_threshold_ambient_temperature: 0
upper_threshold_ambient_temperature: 10
rolling_window_ambient_temperature: 72
heat_source_cooling: 6 #K
heat_pump_cop_approximation:
refrigerant: ammonia
@ -583,7 +587,9 @@ sector:
resistive_heaters: true
oil_boilers: false
biomass_boiler: true
overdimension_individual_heating: 1.1 #to cover demand peaks bigger than data
overdimension_heat_generators:
decentral: 1.1 #to cover demand peaks bigger than data
central: 1.0
chp: true
micro_chp: false
solar_thermal: true
@ -791,6 +797,7 @@ industry:
MWh_MeOH_per_tMeOH: 5.528
hotmaps_locate_missing: false
reference_year: 2019
oil_refining_emissions: 0.013
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#costs
@ -1071,6 +1078,8 @@ plotting:
gas pipeline new: '#a87c62'
# oil
oil: '#c9c9c9'
oil primary: '#d2d2d2'
oil refining: '#e6e6e6'
imported oil: '#a3a3a3'
oil boiler: '#adadad'
residential rural oil boiler: '#a9a9a9'
@ -1114,6 +1123,7 @@ plotting:
services rural biomass boiler: '#c6cf98'
services urban decentral biomass boiler: '#dde5b5'
biomass to liquid: '#32CD32'
unsustainable solid biomass: '#998622'
unsustainable bioliquids: '#32CD32'
electrobiofuels: 'red'
BioSNG: '#123456'

View File

@ -15,7 +15,7 @@ scenario:
ll:
- vopt
clusters:
- 39
- 41
- 128
- 256
opts:
@ -26,7 +26,7 @@ scenario:
- ''
# TODO add Turkey (TR)
countries: ['AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'ME', 'MD', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK', 'UA']
countries: ['AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'ME', 'MD', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK', 'UA', 'XK']
electricity:
custom_powerplants: true

37
data/ammonia_plants.csv Normal file
View File

@ -0,0 +1,37 @@
"Plant","Ammonia [kt/a]","Urea [kt/a]","AN [kt/a]","UAN [kt/a]","CAN [kt/a]","Nitrogen fertilisers [kt/a]","MAP [kt/a]","Country","Latitude","Longitude","Date","Source","Comment"
"Yara Sluiskil","1700","1300",,,,,,"Netherlands","51.27186","3.84896","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"OCI Geleen","550",,,,,,,"Netherlands","50.99738","5.78497","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"CF Fertilisers Billingham","590",,,,,,,"United Kingdom","53.28149","-2.79744","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/; https://www.cfindustries.com/what-we-do/ammonia-productiont",
"Yara Tertre","420",,,,,,,"Belgium","50.47842","3.80285","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"BASF Antwerp","650",,,,,,,"Belgium","51.35583","4.27811","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"Yara Gonfreville","400",,,,,,,"France","49.47982","0.19587","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"Borealis Rouen",,,,,,,,"France","49.41916","1.02584","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"BASF Ludwigshafen","880",,,,,,,"Germany","49.51171","8.42009","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"SKW","1300",,,,,,,"Germany","51.87746","12.5858","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"Yara Brunsbuettel","750",,,,,,,"Germany","53.91152","9.20982","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"Yara Porsgrunn","500",,,,,,,"Norway","59.12444","9.61922","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"Fertiberia Puertollano","400","250",,"200",,,,"Spain","38.67276","-4.0608","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/; https://www.icis.com/explore/resources/news/2021/10/25/10698264/spain-s-fertiberia-urea-ammonia-plants-in-palos-to-remain-shut-on-gas-prices/",
"Fertiberia Huelva","200","130",,,,,,"Spain","37.22572","-6.94742","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/; https://www.icis.com/explore/resources/news/2021/10/25/10698264/spain-s-fertiberia-urea-ammonia-plants-in-palos-to-remain-shut-on-gas-prices/",
"Yara Ferrara","600","600",,,,,,"Italy","44.86206","11.57922","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"Petrokemija",,"500",,,,,,"Croatia","45.46977","16.78944","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"Neochim","450",,"710",,,,,"Bulgaria","42.20514","25.61547","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"Agopolychim",,,"400","800",,,"300","Bulgaria","43.20652","27.65983","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/; https://ammoniaenergy.org/articles/agropolychim-investing-in-ammonia-distribution-from-bulgaria/","no own ammonia plant"
"Azomures","1600",,,,,,,"Romania","46.76187","24.42361","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/","Total for ammonia, AN, NPK, UAN, Urea"
"Nitrogenmuvek","497",,,,"1300",,,"Hungary","47.16691","18.12844","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"DUSLO","530",,,,,,,"Slovakia","48.18705","17.9301","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"Grupa Azoty","524","375",,,,,,"Poland","51.45179","21.98174","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"Anwil",,,,,,"965",,"Poland","52.70438","18.96606","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"Achema","1100","785","651","1300","540",,,"Lithuania","55.081","24.32377","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"Lifosa",,,,,,"3241",,"Lithuania","55.27567","24.01652","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
"Unknown (Linz)",,,,,,,,"Austria","48.28749","14.32369","15-08-2024",,"most likely location"
"Unknown (Kothla-Järve)",,,,,,,,"Estonia","59.39984","27.25401","15-08-2024",,"most likely location"
"Unknown (Oulu)",,,,,,,,"Finland","65.0033","25.43731","15-08-2024",,"most likely location"
"Unknown (Ptolemaida)",,,,,,,,"Greece","40.50701","21.71414","15-08-2024",,"most likely location"
"Unknown (Sabac)",,,,,,,,"Serbia","44.76298","19.68426","15-08-2024",,"most likely location"
"Unknown (Lugano)",,,,,,,,"Switzerland","46.02709","8.9641","15-08-2024",,"most likely location"
"Rivneazot","420",,"540","300","470 ",,,"Ukraine","50.70502","26.1630","28-08-2024","https://interfax.com/newsroom/top-stories/100959/; https://interfax.com/newsroom/top-stories/103386/; https://gmk.center/en/news/ostchem-plants-produced-520-6-thousand-tons-of-fertilizers-in-q1/; http://www.ostchem.com/en/o-kompanii/proizvodstvo/rovno",
"Stirol (Horlivka)","1470","940 ","693",,,,,"Ukraine","48.29697","38.10412","28-08-2024","http://ostchem.com/en/o-kompanii/proizvodstvo/stirol",
"Severodonetsk Azot","1020","390","550",,,,,"Ukraine","48.94185","38.47399","28-08-2024",,
"Odessa Port Plant ","1160","942",,,,,,"Ukraine","46.49460","30.73222","28-08-2024","https://www.spfu.gov.ua/userfiles/files/OPP_Teaser_Eng.pdf",
"Cherkazy Azot","963",,"970","500",,,,"Ukraine","49.38241","32.05719","28-08-2024","https://gmk.center/en/news/ostchem-plants-produced-520-6-thousand-tons-of-fertilizers-in-q1/https://gmk.center/en/news/ostchem-plants-produced-520-6-thousand-tons-of-fertilizers-in-q1/; http://ostchem.com/en/o-kompanii/proizvodstvo/azot",
"DneproAZOT","660",,,,,,,"Ukraine","48.49004","34.66667","28-08-2024","https://www.alfalaval.com/media/stories/fertilizers/increased-plant-capacity-and-reduced-maintenance-at-fertilizer-plant/",
1 Plant Ammonia [kt/a] Urea [kt/a] AN [kt/a] UAN [kt/a] CAN [kt/a] Nitrogen fertilisers [kt/a] MAP [kt/a] Country Latitude Longitude Date Source Comment
2 Yara Sluiskil 1700 1300 Netherlands 51.27186 3.84896 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
3 OCI Geleen 550 Netherlands 50.99738 5.78497 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
4 CF Fertilisers Billingham 590 United Kingdom 53.28149 -2.79744 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/; https://www.cfindustries.com/what-we-do/ammonia-productiont
5 Yara Tertre 420 Belgium 50.47842 3.80285 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
6 BASF Antwerp 650 Belgium 51.35583 4.27811 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
7 Yara Gonfreville 400 France 49.47982 0.19587 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
8 Borealis Rouen France 49.41916 1.02584 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
9 BASF Ludwigshafen 880 Germany 49.51171 8.42009 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
10 SKW 1300 Germany 51.87746 12.5858 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
11 Yara Brunsbuettel 750 Germany 53.91152 9.20982 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
12 Yara Porsgrunn 500 Norway 59.12444 9.61922 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
13 Fertiberia Puertollano 400 250 200 Spain 38.67276 -4.0608 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/; https://www.icis.com/explore/resources/news/2021/10/25/10698264/spain-s-fertiberia-urea-ammonia-plants-in-palos-to-remain-shut-on-gas-prices/
14 Fertiberia Huelva 200 130 Spain 37.22572 -6.94742 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/; https://www.icis.com/explore/resources/news/2021/10/25/10698264/spain-s-fertiberia-urea-ammonia-plants-in-palos-to-remain-shut-on-gas-prices/
15 Yara Ferrara 600 600 Italy 44.86206 11.57922 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
16 Petrokemija 500 Croatia 45.46977 16.78944 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
17 Neochim 450 710 Bulgaria 42.20514 25.61547 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
18 Agopolychim 400 800 300 Bulgaria 43.20652 27.65983 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/; https://ammoniaenergy.org/articles/agropolychim-investing-in-ammonia-distribution-from-bulgaria/ no own ammonia plant
19 Azomures 1600 Romania 46.76187 24.42361 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/ Total for ammonia, AN, NPK, UAN, Urea
20 Nitrogenmuvek 497 1300 Hungary 47.16691 18.12844 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
21 DUSLO 530 Slovakia 48.18705 17.9301 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
22 Grupa Azoty 524 375 Poland 51.45179 21.98174 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
23 Anwil 965 Poland 52.70438 18.96606 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
24 Achema 1100 785 651 1300 540 Lithuania 55.081 24.32377 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
25 Lifosa 3241 Lithuania 55.27567 24.01652 13-01-2023 https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/
26 Unknown (Linz) Austria 48.28749 14.32369 15-08-2024 most likely location
27 Unknown (Kothla-Järve) Estonia 59.39984 27.25401 15-08-2024 most likely location
28 Unknown (Oulu) Finland 65.0033 25.43731 15-08-2024 most likely location
29 Unknown (Ptolemaida) Greece 40.50701 21.71414 15-08-2024 most likely location
30 Unknown (Sabac) Serbia 44.76298 19.68426 15-08-2024 most likely location
31 Unknown (Lugano) Switzerland 46.02709 8.9641 15-08-2024 most likely location
32 Rivneazot 420 540 300 470 Ukraine 50.70502 26.1630 28-08-2024 https://interfax.com/newsroom/top-stories/100959/; https://interfax.com/newsroom/top-stories/103386/; https://gmk.center/en/news/ostchem-plants-produced-520-6-thousand-tons-of-fertilizers-in-q1/; http://www.ostchem.com/en/o-kompanii/proizvodstvo/rovno
33 Stirol (Horlivka) 1470 940 693 Ukraine 48.29697 38.10412 28-08-2024 http://ostchem.com/en/o-kompanii/proizvodstvo/stirol
34 Severodonetsk Azot 1020 390 550 Ukraine 48.94185 38.47399 28-08-2024
35 Odessa Port Plant 1160 942 Ukraine 46.49460 30.73222 28-08-2024 https://www.spfu.gov.ua/userfiles/files/OPP_Teaser_Eng.pdf
36 Cherkazy Azot 963 970 500 Ukraine 49.38241 32.05719 28-08-2024 https://gmk.center/en/news/ostchem-plants-produced-520-6-thousand-tons-of-fertilizers-in-q1/https://gmk.center/en/news/ostchem-plants-produced-520-6-thousand-tons-of-fertilizers-in-q1/; http://ostchem.com/en/o-kompanii/proizvodstvo/azot
37 DneproAZOT 660 Ukraine 48.49004 34.66667 28-08-2024 https://www.alfalaval.com/media/stories/fertilizers/increased-plant-capacity-and-reduced-maintenance-at-fertilizer-plant/

View File

@ -0,0 +1,26 @@
"Company","Site","Cement [kt/a]","Country","Latitude","Longitude","Date","Source","Comment"
"Titan Cementarnica USJE AD","Skopje",910,"MK",41.96816,21.45604,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"Colacem Albania Sh.p.k","Balldre plant, Lezhe",500,"AL",41.83689,19.63339,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"Fushe Kruje Cement Factory, Sh.p.k.","Elbasan cement plant",300,"AL",41.12184,20.04347,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"Fushe Kruje Cement Factory, Sh.p.k.","Fushe Kruje plant",1330,"AL",40.46403,19.49948,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"Antea Cement Sh.A","Boka e Kuqe, Burizane",1500,"AL",41.54838,19.72574,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"Beocinska Fabrika Cementa","Beocin",2000,"RS",45.20952,19.71043,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"Holcim (Srbija) a.d.","Novi Popovac",1400,"RS",43.90633,21.50378,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"Titan Cementara Kosjerić Ltd.","Kosjeric",750,"RS",44.0125,19.88831,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"Sharrcem Sh.p.k.","Hani i Elezit,",850,"XK",42.14704,21.29863,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"Fabrika Cementa Lukavac d.d.","Lukavac",800,"BA",44.52596,18.52811,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"Tvornica Cementa Kakanj d.d. ","Kakanj",400,"BA",44.11922,18.10897,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"Lafarge Ciment Moldova SA","Rezina",1400,"MD",47.79094,28.9553,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"ZAO Rybnitsa Cement Comple","Rybnitsa",1100,"MD",47.78115,29.02078,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"ChAO Nikolayevtsemen","Mykolayiv",900,"UA",46.94555,32.06641,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information; https://cemark.ua/en/zavodi/prat-mikolajivcement ",
"OAO KyivCement ","Kyiv",175,"UA",50.38525,30.55205,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://www.dyckerhoff.com.ua/en/dyckerhoff-cement-ukraine ",
"OAO YuGCement ","Mykolayiv",1250,"UA",46.98512,31.9317,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information, https://www.dyckerhoff.com.ua/en/yug-cemen",
"OOO Cement","Odessa",550,"UA",46.50818,30.67422,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://se.ua/en/projects/llc-cement-odessa-cement-plant/ ",
"Overin Ltd","Amvrosievka",800,"UA",47.83453,38.46961,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information","assumed equal split"
"Overin Ltd","Kamenskoye",800,"UA",48.51783,34.63382,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information","assumed equal split"
"Overin Ltd","Kriviy Rih",800,"UA",47.87454,33.43586,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information","assumed equal split"
"PAO Eurocement Ukraine","Balakleya, Kharkivs'ka",1000,"UA",49.49314,36.74926,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://www.globalcement.com/news/item/13733-update-on-ukraine-february-2022 ",
"PAO Ivano-Frankovsktsement","Ivano-Frankivsk ",3600,"UA",48.97709,24.71227,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
"PAO Kramatorkiy Tsementnyi Zavod PUSHKA ","Kramatorsk, Donets'ka",138,"UA",48.72802,37.54362,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://www.cemnet.com/News/story/144668/pushka-ups-cement-production-56-6p-per-cent-to138-400t-in-q1.html ",
"PAO Podolsk Cement","Khmel'nyts'ka Oblast' ",2050,"UA",48.7461,26.64664,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://cemark.ua/en/zavodi/at-podilskiy-cement ",
"PAO Volyn'Cement","Volyn'ska Oblast'",2000,"UA",50.54731,26.25774,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://www.dyckerhoff.com.ua/volyn-cement ",
1 Company Site Cement [kt/a] Country Latitude Longitude Date Source Comment
2 Titan Cementarnica USJE AD Skopje 910 MK 41.96816 21.45604 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
3 Colacem Albania Sh.p.k Balldre plant, Lezhe 500 AL 41.83689 19.63339 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
4 Fushe Kruje Cement Factory, Sh.p.k. Elbasan cement plant 300 AL 41.12184 20.04347 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
5 Fushe Kruje Cement Factory, Sh.p.k. Fushe Kruje plant 1330 AL 40.46403 19.49948 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
6 Antea Cement Sh.A Boka e Kuqe, Burizane 1500 AL 41.54838 19.72574 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
7 Beocinska Fabrika Cementa Beocin 2000 RS 45.20952 19.71043 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
8 Holcim (Srbija) a.d. Novi Popovac 1400 RS 43.90633 21.50378 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
9 Titan Cementara Kosjerić Ltd. Kosjeric 750 RS 44.0125 19.88831 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
10 Sharrcem Sh.p.k. Hani i Elezit, 850 XK 42.14704 21.29863 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
11 Fabrika Cementa Lukavac d.d. Lukavac 800 BA 44.52596 18.52811 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
12 Tvornica Cementa Kakanj d.d. Kakanj 400 BA 44.11922 18.10897 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
13 Lafarge Ciment Moldova SA Rezina 1400 MD 47.79094 28.9553 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
14 ZAO Rybnitsa Cement Comple Rybnitsa 1100 MD 47.78115 29.02078 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
15 ChAO Nikolayevtsemen Mykolayiv 900 UA 46.94555 32.06641 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information; https://cemark.ua/en/zavodi/prat-mikolajivcement
16 OAO KyivCement Kyiv 175 UA 50.38525 30.55205 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://www.dyckerhoff.com.ua/en/dyckerhoff-cement-ukraine
17 OAO YuGCement Mykolayiv 1250 UA 46.98512 31.9317 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information, https://www.dyckerhoff.com.ua/en/yug-cemen
18 OOO Cement Odessa 550 UA 46.50818 30.67422 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://se.ua/en/projects/llc-cement-odessa-cement-plant/
19 Overin Ltd Amvrosievka 800 UA 47.83453 38.46961 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information assumed equal split
20 Overin Ltd Kamenskoye 800 UA 48.51783 34.63382 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information assumed equal split
21 Overin Ltd Kriviy Rih 800 UA 47.87454 33.43586 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information assumed equal split
22 PAO Eurocement Ukraine Balakleya, Kharkivs'ka 1000 UA 49.49314 36.74926 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://www.globalcement.com/news/item/13733-update-on-ukraine-february-2022
23 PAO Ivano-Frankovsktsement Ivano-Frankivsk 3600 UA 48.97709 24.71227 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information
24 PAO Kramatorkiy Tsementnyi Zavod PUSHKA Kramatorsk, Donets'ka 138 UA 48.72802 37.54362 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://www.cemnet.com/News/story/144668/pushka-ups-cement-production-56-6p-per-cent-to138-400t-in-q1.html
25 PAO Podolsk Cement Khmel'nyts'ka Oblast' 2050 UA 48.7461 26.64664 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://cemark.ua/en/zavodi/at-podilskiy-cement
26 PAO Volyn'Cement Volyn'ska Oblast' 2000 UA 50.54731 26.25774 28-08-2024 https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://www.dyckerhoff.com.ua/volyn-cement

View File

@ -25,7 +25,7 @@ SE,50.4,
GB,2,
BY,70,
EE,52,5406
KO,3,207
XK,3,207
RO,23,9962
SK,54,15000
NL,4,9800

1 country share to satisfy heat demand (residential) in percent capacity[MWth]
25 GB 2
26 BY 70
27 EE 52 5406
28 KO XK 3 207
29 RO 23 9962
30 SK 54 15000
31 NL 4 9800

View File

@ -29,6 +29,7 @@ PL,1615,1584,1275,1356,1364,1378,1517,1290,1230,1296,1249,1438,1294,1478,1446,15
PT,114,114,102,113,86,110,95,79,94,96,107,103,99,109,80,131,106,93,93,97,78,106,104,115,103,98,103,97,112,110,115,116,106,109,109,109,99,139,107,102,89,90,95,104,99,108,85,89,75,87,104,96,104,85,66,88,62,82,96,90,90,78,87,97,103,90,91,91,84,96,80,101,100,81,79,87,79,96,81,72,78,98,75
RO,931,939,801,813,874,851,839,815,799,780,736,811,883,948,822,968,810,789,826,731,744,826,890,867,873,706,791,776,858,792,787,798,838,782,752,855,772,836,780,880,801,811,763,807,917,815,882,827,710,700,846,801,848,701,806,869,842,805,740,710,760,721,844,754,799,780,684,695,695,757,793,781,709,662,681,721,720,690,624,648,740,973,611
RS,292,305,246,274,285,276,265,263,261,239,222,252,273,300,249,313,248,249,254,231,226,270,283,271,274,233,253,243,267,254,251,246,272,242,243,265,233,265,241,273,251,255,244,253,275,256,268,254,231,220,275,243,263,223,250,270,259,250,237,217,234,217,262,238,265,247,217,214,222,229,251,244,214,192,222,223,232,211,197,212,234,306,192
XK,292,305,246,274,285,276,265,263,261,239,222,252,273,300,249,313,248,249,254,231,226,270,283,271,274,233,253,243,267,254,251,246,272,242,243,265,233,265,241,273,251,255,244,253,275,256,268,254,231,220,275,243,263,223,250,270,259,250,237,217,234,217,262,238,265,247,217,214,222,229,251,244,214,192,222,223,232,211,197,212,234,306,192
SK,221,219,199,207,209,201,212,202,189,189,178,210,195,217,208,228,192,193,185,185,178,208,213,211,219,179,187,192,203,200,192,188,195,178,178,197,188,204,193,215,191,190,180,193,212,198,207,187,172,173,202,186,191,171,186,204,193,184,177,162,184,174,190,184,191,182,163,161,170,188,175,179,174,142,161,170,176,157,152,158,180,231,150
SI,81,77,66,74,72,71,72,69,61,65,61,72,67,73,69,78,65,66,62,61,59,75,75,73,73,62,65,67,71,69,67,68,71,62,61,69,62,71,68,74,67,65,65,69,73,71,71,63,59,58,70,61,63,55,61,71,63,62,62,54,59,55,65,63,67,61,54,57,57,65,58,59,59,46,55,57,58,53,52,53,61,77,51
SE,4509,4537,3713,3939,4134,4059,4374,3918,3633,4015,3891,4219,3560,3919,4426,4488,3950,4223,3662,3988,3814,4451,4260,4021,4358,4613,3929,4280,4255,4254,4043,3806,3975,3634,3625,4238,4132,4314,4246,4287,4301,3913,3840,3819,4588,4139,4376,3931,3476,3446,3785,3695,3893,3991,3916,4073,3757,3950,3781,3446,3898,3778,3755,3769,3632,3561,3606,3590,3806,4397,3474,3935,3675,3452,3421,3635,3693,3705,3689,3247,3807,5084,3769

1 name 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023
29 PT 114 114 102 113 86 110 95 79 94 96 107 103 99 109 80 131 106 93 93 97 78 106 104 115 103 98 103 97 112 110 115 116 106 109 109 109 99 139 107 102 89 90 95 104 99 108 85 89 75 87 104 96 104 85 66 88 62 82 96 90 90 78 87 97 103 90 91 91 84 96 80 101 100 81 79 87 79 96 81 72 78 98 75
30 RO 931 939 801 813 874 851 839 815 799 780 736 811 883 948 822 968 810 789 826 731 744 826 890 867 873 706 791 776 858 792 787 798 838 782 752 855 772 836 780 880 801 811 763 807 917 815 882 827 710 700 846 801 848 701 806 869 842 805 740 710 760 721 844 754 799 780 684 695 695 757 793 781 709 662 681 721 720 690 624 648 740 973 611
31 RS 292 305 246 274 285 276 265 263 261 239 222 252 273 300 249 313 248 249 254 231 226 270 283 271 274 233 253 243 267 254 251 246 272 242 243 265 233 265 241 273 251 255 244 253 275 256 268 254 231 220 275 243 263 223 250 270 259 250 237 217 234 217 262 238 265 247 217 214 222 229 251 244 214 192 222 223 232 211 197 212 234 306 192
32 XK 292 305 246 274 285 276 265 263 261 239 222 252 273 300 249 313 248 249 254 231 226 270 283 271 274 233 253 243 267 254 251 246 272 242 243 265 233 265 241 273 251 255 244 253 275 256 268 254 231 220 275 243 263 223 250 270 259 250 237 217 234 217 262 238 265 247 217 214 222 229 251 244 214 192 222 223 232 211 197 212 234 306 192
33 SK 221 219 199 207 209 201 212 202 189 189 178 210 195 217 208 228 192 193 185 185 178 208 213 211 219 179 187 192 203 200 192 188 195 178 178 197 188 204 193 215 191 190 180 193 212 198 207 187 172 173 202 186 191 171 186 204 193 184 177 162 184 174 190 184 191 182 163 161 170 188 175 179 174 142 161 170 176 157 152 158 180 231 150
34 SI 81 77 66 74 72 71 72 69 61 65 61 72 67 73 69 78 65 66 62 61 59 75 75 73 73 62 65 67 71 69 67 68 71 62 61 69 62 71 68 74 67 65 65 69 73 71 71 63 59 58 70 61 63 55 61 71 63 62 62 54 59 55 65 63 67 61 54 57 57 65 58 59 59 46 55 57 58 53 52 53 61 77 51
35 SE 4509 4537 3713 3939 4134 4059 4374 3918 3633 4015 3891 4219 3560 3919 4426 4488 3950 4223 3662 3988 3814 4451 4260 4021 4358 4613 3929 4280 4255 4254 4043 3806 3975 3634 3625 4238 4132 4314 4246 4287 4301 3913 3840 3819 4588 4139 4376 3931 3476 3446 3785 3695 3893 3991 3916 4073 3757 3950 3781 3446 3898 3778 3755 3769 3632 3561 3606 3590 3806 4397 3474 3935 3675 3452 3421 3635 3693 3705 3689 3247 3807 5084 3769

View File

@ -29,6 +29,7 @@ PL,19040.141287526196,13600.003649707409,4232.940272903036,6263.550300160282,117
PT,17389.910347609384,7956.13238827081,8339.728858321132,2075.556471824434,3081.9400195534536,5428.965709165979,13519.093138173732,8266.183051247071,2305.611210847845,4751.414112923152,8372.129135066036,5969.31083523099,2397.6586063764958,3916.9962424030286,9654.699566273128,9603.363148222781,4163.162870337118,9179.465624121007,12131.854156488425,23406.646477036124,10635.077955993413,11029.404714084018,16475.917880350513,12087.55769685171,9804.492049893286,26178.184180984652,5669.820254013018,7559.528320921835,15405.930172416956,11163.387795923936,7088.025310785357,10191.330496756716,7128.069257230898,9335.631563569985,5236.13128329125,4572.251664471752,32605.577182903042,149323.86523586328,34294.81803755196,6061.11721308257,5836.654497517657,4843.7020037722705,7814.782411245904,9395.759000250582,14057.157961109715,8192.288977642056,7655.760207241933,9203.645337709624,7637.7450966202805,7971.812432879156,7421.37678917759,2935.2871895485287,6329.939163930326,8820.796560748415,8944.109217212255,14719.27363438586,11050.779819799696,8379.75073967695,5590.525909815882,10485.131539563748,20476.028147427794,7715.162648805314,11939.81827695821,5116.2596877306005,3047.0903835389504,9273.489011971804,5135.313604526994,3331.418010762715,6338.048693933388,12105.616460835923,7097.468638389797,3348.213951094401,11773.920694867731,13465.586888738457,4379.602415677836,11394.463621230614,3104.8789319036796,7216.150544702967,6653.765864361187,5720.580737490315,6685.493238874142,8486.079863634486,8329.192253601708
RO,46545.50823036229,35517.718755954746,12007.97895282227,19448.903832688356,20440.973051620913,15132.394486734484,21523.767710605425,32075.68337603852,20312.088233477134,14653.654680967496,19346.344374357534,19295.50358149612,27702.617554877004,24644.67023787785,52797.882559506776,42262.7162454671,34689.01143849651,42583.74114324521,28973.147767939397,36882.64868179707,29063.471368254675,39575.626278602576,31898.858414072816,36283.98261870408,42207.50410750205,41714.957670180156,43270.313090823794,40474.54716426176,53565.91349208634,74865.02611452111,48190.11154819992,57257.26135564704,46523.80416861758,44300.83791323246,54901.1701096736,47361.27151969814,49156.09266449866,56461.30009557872,56062.45724028393,58506.511677323855,48499.732173446595,45901.64074770707,33171.12855766741,38310.49272614435,39377.41586450999,28638.803870927226,29424.553978129992,39429.14347226504,39300.73151290347,27525.04968129815,47095.77682827757,30948.90232192865,32939.14262154816,30155.99148400138,35067.04977301419,35592.25066656211,45790.67404045973,42596.77718301701,39223.35618808953,25767.93476452563,30963.38609617001,30034.908201595936,23323.05819720473,28517.276888551194,41560.85308154171,43999.15897330077,21427.19650317167,25084.131072037453,18450.764512377853,38182.39266803458,20422.517191285966,14090.243196787245,21998.55223596247,30809.187151501046,22071.90474198888,31906.454754357772,20763.073093214778,25620.747974742615,19248.368008063957,23289.011422937554,26669.846131314298,27207.74766143675,29386.08741874402
RS,12898.821957973714,11760.375115749226,5762.823681912337,10868.645457667955,6851.647476795101,6489.091511565737,8016.427124526303,11096.059611708006,8784.092785314235,6844.044739629848,5968.673897869134,7450.873145908507,8457.218084424714,10466.134979346216,18700.932768467817,18783.264457747777,9647.157790116991,14650.396388121844,12360.14810912279,11640.673528541236,8882.446980807292,14762.619600006037,18399.930168952076,13646.806400326906,14489.119148714197,14104.804002759012,15462.34970923992,10894.228431882033,15095.088711819322,17853.281396922546,12916.46431873845,14207.379133135786,14418.834370720482,12752.5957180177,15544.588217112372,15820.904121022999,13534.055257847373,15215.146639151637,12996.626380040323,13029.919161637963,10196.668003968522,10284.440766030819,7022.693160251435,8401.249663323453,8435.803252725058,10265.915943082338,8623.546341166757,7782.429841191159,9309.259412625106,4849.32865233776,9480.40891035497,8237.330612702019,6688.9341497267815,7113.796951355988,8945.392918392941,11391.406447517316,8770.78174795334,7797.074404297926,11205.567652241964,7490.638744688466,6890.626375097134,8721.152535625733,6986.899718851523,10014.515393386338,11863.685949406314,12576.12226693591,6930.903954576986,6933.68818306879,8436.351253425808,11680.836931112251,5673.257881932308,4512.930178739657,6094.8735580904795,11616.485592765608,8423.704814584986,9582.260510301834,6280.960312130538,10196.683253538626,5869.428152205924,6637.126459584064,8223.324863109141,9163.49600405833,11744.973584261521
XK,12898.821957973714,11760.375115749226,5762.823681912337,10868.645457667955,6851.647476795101,6489.091511565737,8016.427124526303,11096.059611708006,8784.092785314235,6844.044739629848,5968.673897869134,7450.873145908507,8457.218084424714,10466.134979346216,18700.932768467817,18783.264457747777,9647.157790116991,14650.396388121844,12360.14810912279,11640.673528541236,8882.446980807292,14762.619600006037,18399.930168952076,13646.806400326906,14489.119148714197,14104.804002759012,15462.34970923992,10894.228431882033,15095.088711819322,17853.281396922546,12916.46431873845,14207.379133135786,14418.834370720482,12752.5957180177,15544.588217112372,15820.904121022999,13534.055257847373,15215.146639151637,12996.626380040323,13029.919161637963,10196.668003968522,10284.440766030819,7022.693160251435,8401.249663323453,8435.803252725058,10265.915943082338,8623.546341166757,7782.429841191159,9309.259412625106,4849.32865233776,9480.40891035497,8237.330612702019,6688.9341497267815,7113.796951355988,8945.392918392941,11391.406447517316,8770.78174795334,7797.074404297926,11205.567652241964,7490.638744688466,6890.626375097134,8721.152535625733,6986.899718851523,10014.515393386338,11863.685949406314,12576.12226693591,6930.903954576986,6933.68818306879,8436.351253425808,11680.836931112251,5673.257881932308,4512.930178739657,6094.8735580904795,11616.485592765608,8423.704814584986,9582.260510301834,6280.960312130538,10196.683253538626,5869.428152205924,6637.126459584064,8223.324863109141,9163.49600405833,11744.973584261521
SK,10526.703178382486,6581.841291454129,2779.6437301689157,6043.293021386589,8068.711762338472,4716.572547513843,4263.788112757618,7436.446538154413,5733.7942336519345,5091.94458281141,6885.47211985414,6956.591212284293,7116.928783228905,4573.269245439668,8169.130903254093,6799.092645889461,7190.199390340817,8819.311158887818,6679.080394471699,8681.76846617681,6714.688996801623,8780.135433744465,9674.052829336924,7510.89080672348,12315.672504913706,11551.288938768861,10658.095118642217,7760.467099195778,7334.701885838525,11743.053621084162,9101.455526104724,11252.254293590808,7089.2297957961755,11692.575497480175,11870.620362608648,8320.411050776946,12664.612697391287,10840.053026355938,9544.145158945727,8285.851845920657,6554.955003499832,6014.385824757616,5119.229272436076,5566.197178944401,8283.751441606055,4576.739002618681,5529.727054286627,4884.285979430572,7030.767074231632,6380.185010419688,6092.06334940043,4789.6919845964085,3988.728835990378,6100.445127127096,6174.336930810738,5839.492530664778,6739.897695678873,6073.547495791424,6239.663814901599,5985.626769812626,5946.910319392802,5350.4706690989715,2897.742723724252,3812.447551889599,5110.734824948982,5466.7571969447445,3822.1224333717755,4189.745228198809,3608.9397299109723,8925.718578619328,5520.297117401385,2338.023634704523,3634.014208205775,5079.021357670912,3789.3939110245783,3599.858750509022,4222.707040620564,3096.1701009538024,2158.8092391216674,4542.203594136759,4220.210061470592,2961.7796555712353,3705.0055429796116
SI,8932.252857660058,6769.672897729603,3971.443731895907,6727.0196008878875,5996.060296331706,4552.96378417224,7787.375795346372,9548.071392837826,4890.204133819321,7094.028640574649,11752.798116380785,9378.602450871665,7169.30972105447,8221.267552376507,10568.142173580174,7705.119699907013,8559.440940655051,9496.2682906945,10641.418485889739,13644.09405840664,8756.865265119286,10877.994032024846,13095.473005855994,10408.222250010325,17110.767148034232,13257.44359305617,10163.420442559087,10743.809603872312,11213.570708968457,12419.028940460184,8518.188189494229,14975.496301661744,10217.449212514946,10521.007791805137,10759.209828867228,9699.803414833696,14530.647692616923,14530.715084460895,12439.143395173185,11990.046930204517,9001.647305603035,10111.423546501868,6824.172499114327,10267.968760960974,10233.709492652128,9562.175707725224,11231.941186997657,8178.692540046128,8568.526412713521,8103.883097000008,9639.895318751553,9157.43571368136,6814.50158997294,8089.913064615838,8170.645053083449,10765.044719853075,6713.170108103339,8936.8362631332,9542.147586182518,8964.110093884974,8653.114721452737,8353.75428643612,4558.589088593759,9432.405903987477,6927.92152111369,7408.760392367348,5834.871486466167,9336.912851251047,8839.494837985663,10766.693939731143,5073.937522450624,6475.598951785893,9482.419717110955,13414.771212079502,5906.5584945059145,9942.151265372298,7696.092255607837,9521.835825354157,8476.124990692872,6361.010018809483,7504.908031281684,6349.444363482254,12494.86342976942
SE,97729.33612275522,104893.13349064675,152164.30605691054,147567.81837152236,172633.569885874,142454.06079467706,109264.12507808255,145966.80578917114,158733.59492028368,161670.6171803483,134822.12256461562,136958.6213484757,175679.6273876132,133962.36617697845,126787.36233921513,130861.49290945902,151133.2982760823,140247.52694114187,130508.52271890236,137421.63579450184,164132.0529341604,142467.57286064525,135886.87305352974,163762.3962091317,161128.38161511483,148196.28633931337,167892.87677861055,132017.696130452,105953.99289036485,119407.22923207263,147139.6039546916,151309.55114963037,164893.61323375857,137608.18237925606,149284.78771947857,108749.15747050248,131859.531763871,117290.48017785426,131751.97960784068,111117.27409251402,110551.615114603,81550.1135393761,114677.940027603,102356.46697333359,128977.80283219383,94483.98267503879,114937.96457142044,93256.91327642264,96751.29026217168,91074.34139788701,87931.96567208324,96560.83822983531,116746.94389793588,64626.25905820224,75156.91767736348,51489.37512699482,74729.26978432719,134673.01513808029,110440.65771030058,149033.9827088587,143576.83069821307,93040.02354987273,64075.160200006496,102493.08906248632,106664.82884715112,90351.43771324471,94801.81222609026,92445.93458012305,88919.20770998915,108111.72872590217,127440.80298482065,124444.06618883039,98961.91573013023,87913.90602563386,115956.48217115598,95526.84265190935,103459.08985036932,86058.90377748368,99040.9103276256,110493.22773914765,94182.7249029169,169752.66741900297,99896.09236620825

1 name 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023
29 PT 17389.910347609384 7956.13238827081 8339.728858321132 2075.556471824434 3081.9400195534536 5428.965709165979 13519.093138173732 8266.183051247071 2305.611210847845 4751.414112923152 8372.129135066036 5969.31083523099 2397.6586063764958 3916.9962424030286 9654.699566273128 9603.363148222781 4163.162870337118 9179.465624121007 12131.854156488425 23406.646477036124 10635.077955993413 11029.404714084018 16475.917880350513 12087.55769685171 9804.492049893286 26178.184180984652 5669.820254013018 7559.528320921835 15405.930172416956 11163.387795923936 7088.025310785357 10191.330496756716 7128.069257230898 9335.631563569985 5236.13128329125 4572.251664471752 32605.577182903042 149323.86523586328 34294.81803755196 6061.11721308257 5836.654497517657 4843.7020037722705 7814.782411245904 9395.759000250582 14057.157961109715 8192.288977642056 7655.760207241933 9203.645337709624 7637.7450966202805 7971.812432879156 7421.37678917759 2935.2871895485287 6329.939163930326 8820.796560748415 8944.109217212255 14719.27363438586 11050.779819799696 8379.75073967695 5590.525909815882 10485.131539563748 20476.028147427794 7715.162648805314 11939.81827695821 5116.2596877306005 3047.0903835389504 9273.489011971804 5135.313604526994 3331.418010762715 6338.048693933388 12105.616460835923 7097.468638389797 3348.213951094401 11773.920694867731 13465.586888738457 4379.602415677836 11394.463621230614 3104.8789319036796 7216.150544702967 6653.765864361187 5720.580737490315 6685.493238874142 8486.079863634486 8329.192253601708
30 RO 46545.50823036229 35517.718755954746 12007.97895282227 19448.903832688356 20440.973051620913 15132.394486734484 21523.767710605425 32075.68337603852 20312.088233477134 14653.654680967496 19346.344374357534 19295.50358149612 27702.617554877004 24644.67023787785 52797.882559506776 42262.7162454671 34689.01143849651 42583.74114324521 28973.147767939397 36882.64868179707 29063.471368254675 39575.626278602576 31898.858414072816 36283.98261870408 42207.50410750205 41714.957670180156 43270.313090823794 40474.54716426176 53565.91349208634 74865.02611452111 48190.11154819992 57257.26135564704 46523.80416861758 44300.83791323246 54901.1701096736 47361.27151969814 49156.09266449866 56461.30009557872 56062.45724028393 58506.511677323855 48499.732173446595 45901.64074770707 33171.12855766741 38310.49272614435 39377.41586450999 28638.803870927226 29424.553978129992 39429.14347226504 39300.73151290347 27525.04968129815 47095.77682827757 30948.90232192865 32939.14262154816 30155.99148400138 35067.04977301419 35592.25066656211 45790.67404045973 42596.77718301701 39223.35618808953 25767.93476452563 30963.38609617001 30034.908201595936 23323.05819720473 28517.276888551194 41560.85308154171 43999.15897330077 21427.19650317167 25084.131072037453 18450.764512377853 38182.39266803458 20422.517191285966 14090.243196787245 21998.55223596247 30809.187151501046 22071.90474198888 31906.454754357772 20763.073093214778 25620.747974742615 19248.368008063957 23289.011422937554 26669.846131314298 27207.74766143675 29386.08741874402
31 RS 12898.821957973714 11760.375115749226 5762.823681912337 10868.645457667955 6851.647476795101 6489.091511565737 8016.427124526303 11096.059611708006 8784.092785314235 6844.044739629848 5968.673897869134 7450.873145908507 8457.218084424714 10466.134979346216 18700.932768467817 18783.264457747777 9647.157790116991 14650.396388121844 12360.14810912279 11640.673528541236 8882.446980807292 14762.619600006037 18399.930168952076 13646.806400326906 14489.119148714197 14104.804002759012 15462.34970923992 10894.228431882033 15095.088711819322 17853.281396922546 12916.46431873845 14207.379133135786 14418.834370720482 12752.5957180177 15544.588217112372 15820.904121022999 13534.055257847373 15215.146639151637 12996.626380040323 13029.919161637963 10196.668003968522 10284.440766030819 7022.693160251435 8401.249663323453 8435.803252725058 10265.915943082338 8623.546341166757 7782.429841191159 9309.259412625106 4849.32865233776 9480.40891035497 8237.330612702019 6688.9341497267815 7113.796951355988 8945.392918392941 11391.406447517316 8770.78174795334 7797.074404297926 11205.567652241964 7490.638744688466 6890.626375097134 8721.152535625733 6986.899718851523 10014.515393386338 11863.685949406314 12576.12226693591 6930.903954576986 6933.68818306879 8436.351253425808 11680.836931112251 5673.257881932308 4512.930178739657 6094.8735580904795 11616.485592765608 8423.704814584986 9582.260510301834 6280.960312130538 10196.683253538626 5869.428152205924 6637.126459584064 8223.324863109141 9163.49600405833 11744.973584261521
32 XK 12898.821957973714 11760.375115749226 5762.823681912337 10868.645457667955 6851.647476795101 6489.091511565737 8016.427124526303 11096.059611708006 8784.092785314235 6844.044739629848 5968.673897869134 7450.873145908507 8457.218084424714 10466.134979346216 18700.932768467817 18783.264457747777 9647.157790116991 14650.396388121844 12360.14810912279 11640.673528541236 8882.446980807292 14762.619600006037 18399.930168952076 13646.806400326906 14489.119148714197 14104.804002759012 15462.34970923992 10894.228431882033 15095.088711819322 17853.281396922546 12916.46431873845 14207.379133135786 14418.834370720482 12752.5957180177 15544.588217112372 15820.904121022999 13534.055257847373 15215.146639151637 12996.626380040323 13029.919161637963 10196.668003968522 10284.440766030819 7022.693160251435 8401.249663323453 8435.803252725058 10265.915943082338 8623.546341166757 7782.429841191159 9309.259412625106 4849.32865233776 9480.40891035497 8237.330612702019 6688.9341497267815 7113.796951355988 8945.392918392941 11391.406447517316 8770.78174795334 7797.074404297926 11205.567652241964 7490.638744688466 6890.626375097134 8721.152535625733 6986.899718851523 10014.515393386338 11863.685949406314 12576.12226693591 6930.903954576986 6933.68818306879 8436.351253425808 11680.836931112251 5673.257881932308 4512.930178739657 6094.8735580904795 11616.485592765608 8423.704814584986 9582.260510301834 6280.960312130538 10196.683253538626 5869.428152205924 6637.126459584064 8223.324863109141 9163.49600405833 11744.973584261521
33 SK 10526.703178382486 6581.841291454129 2779.6437301689157 6043.293021386589 8068.711762338472 4716.572547513843 4263.788112757618 7436.446538154413 5733.7942336519345 5091.94458281141 6885.47211985414 6956.591212284293 7116.928783228905 4573.269245439668 8169.130903254093 6799.092645889461 7190.199390340817 8819.311158887818 6679.080394471699 8681.76846617681 6714.688996801623 8780.135433744465 9674.052829336924 7510.89080672348 12315.672504913706 11551.288938768861 10658.095118642217 7760.467099195778 7334.701885838525 11743.053621084162 9101.455526104724 11252.254293590808 7089.2297957961755 11692.575497480175 11870.620362608648 8320.411050776946 12664.612697391287 10840.053026355938 9544.145158945727 8285.851845920657 6554.955003499832 6014.385824757616 5119.229272436076 5566.197178944401 8283.751441606055 4576.739002618681 5529.727054286627 4884.285979430572 7030.767074231632 6380.185010419688 6092.06334940043 4789.6919845964085 3988.728835990378 6100.445127127096 6174.336930810738 5839.492530664778 6739.897695678873 6073.547495791424 6239.663814901599 5985.626769812626 5946.910319392802 5350.4706690989715 2897.742723724252 3812.447551889599 5110.734824948982 5466.7571969447445 3822.1224333717755 4189.745228198809 3608.9397299109723 8925.718578619328 5520.297117401385 2338.023634704523 3634.014208205775 5079.021357670912 3789.3939110245783 3599.858750509022 4222.707040620564 3096.1701009538024 2158.8092391216674 4542.203594136759 4220.210061470592 2961.7796555712353 3705.0055429796116
34 SI 8932.252857660058 6769.672897729603 3971.443731895907 6727.0196008878875 5996.060296331706 4552.96378417224 7787.375795346372 9548.071392837826 4890.204133819321 7094.028640574649 11752.798116380785 9378.602450871665 7169.30972105447 8221.267552376507 10568.142173580174 7705.119699907013 8559.440940655051 9496.2682906945 10641.418485889739 13644.09405840664 8756.865265119286 10877.994032024846 13095.473005855994 10408.222250010325 17110.767148034232 13257.44359305617 10163.420442559087 10743.809603872312 11213.570708968457 12419.028940460184 8518.188189494229 14975.496301661744 10217.449212514946 10521.007791805137 10759.209828867228 9699.803414833696 14530.647692616923 14530.715084460895 12439.143395173185 11990.046930204517 9001.647305603035 10111.423546501868 6824.172499114327 10267.968760960974 10233.709492652128 9562.175707725224 11231.941186997657 8178.692540046128 8568.526412713521 8103.883097000008 9639.895318751553 9157.43571368136 6814.50158997294 8089.913064615838 8170.645053083449 10765.044719853075 6713.170108103339 8936.8362631332 9542.147586182518 8964.110093884974 8653.114721452737 8353.75428643612 4558.589088593759 9432.405903987477 6927.92152111369 7408.760392367348 5834.871486466167 9336.912851251047 8839.494837985663 10766.693939731143 5073.937522450624 6475.598951785893 9482.419717110955 13414.771212079502 5906.5584945059145 9942.151265372298 7696.092255607837 9521.835825354157 8476.124990692872 6361.010018809483 7504.908031281684 6349.444363482254 12494.86342976942
35 SE 97729.33612275522 104893.13349064675 152164.30605691054 147567.81837152236 172633.569885874 142454.06079467706 109264.12507808255 145966.80578917114 158733.59492028368 161670.6171803483 134822.12256461562 136958.6213484757 175679.6273876132 133962.36617697845 126787.36233921513 130861.49290945902 151133.2982760823 140247.52694114187 130508.52271890236 137421.63579450184 164132.0529341604 142467.57286064525 135886.87305352974 163762.3962091317 161128.38161511483 148196.28633931337 167892.87677861055 132017.696130452 105953.99289036485 119407.22923207263 147139.6039546916 151309.55114963037 164893.61323375857 137608.18237925606 149284.78771947857 108749.15747050248 131859.531763871 117290.48017785426 131751.97960784068 111117.27409251402 110551.615114603 81550.1135393761 114677.940027603 102356.46697333359 128977.80283219383 94483.98267503879 114937.96457142044 93256.91327642264 96751.29026217168 91074.34139788701 87931.96567208324 96560.83822983531 116746.94389793588 64626.25905820224 75156.91767736348 51489.37512699482 74729.26978432719 134673.01513808029 110440.65771030058 149033.9827088587 143576.83069821307 93040.02354987273 64075.160200006496 102493.08906248632 106664.82884715112 90351.43771324471 94801.81222609026 92445.93458012305 88919.20770998915 108111.72872590217 127440.80298482065 124444.06618883039 98961.91573013023 87913.90602563386 115956.48217115598 95526.84265190935 103459.08985036932 86058.90377748368 99040.9103276256 110493.22773914765 94182.7249029169 169752.66741900297 99896.09236620825

View File

@ -28,4 +28,5 @@ United Kingdom,160.49,1.26,7.39,13.81,0.81,0.21
Norway,,,,,2.91,0.334
Switzerland,,,,,1,0.849
Serbia,,,,,,
Kosovo,,,,,,
Bosnia Herzegovina,,,,,,

1 gas boiler coal boiler oil boiler resistive heater air heat pump ground heat pump
28 Norway 2.91 0.334
29 Switzerland 1 0.849
30 Serbia
31 Kosovo
32 Bosnia Herzegovina

15
data/refineries-noneu.csv Normal file
View File

@ -0,0 +1,15 @@
"Site","Capacity [bbl/day]","Country","Latitude","Longitude","Date","Source","Comment"
"Modrica",1,"BA",44.95978,18.31294,"29-08-2024","https://modricaoil.com/Content/Read/onama?lang=en-US","the only one"
"OKTA, Skopje",1,"MK",42.0022,21.65532,"29-08-2024","https://en.wikipedia.org/wiki/OKTA","the only one"
"Ballsh",20000,"AL",40.60468,19.75231,"29-08-2024","https://www.trade.gov/country-commercial-guides/albania-oil-and-gas",
"Fier",10000,"AL",40.70095,19.54698,"29-08-2024","https://www.trade.gov/country-commercial-guides/albania-oil-and-gas",
"Elbasan",5000,"AL",41.08621,20.00762,"29-08-2024","https://www.trade.gov/country-commercial-guides/albania-oil-and-gas",
"Pančevo",96000,"RS",44.83051,20.68127,"29-08-2024","https://en.wikipedia.org/wiki/Naftna_Industrija_Srbije",
"Novi Sad",52000,"RS",45.27559,19.86733,"29-08-2024","https://en.wikipedia.org/wiki/Naftna_Industrija_Srbije",
"Halychyna Refinery (Pryvat), Drohobych",40000,"UA",49.34,23.4851,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries",
"Kherson Refinery (Alliance)",36000,"UA",46.65946,32.57479,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries",
"Kremenchuk Refinery (Ukrtatnafta)",368500,"UA",49.15299,33.4327,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries",
"LINOS Refinery, Lysychansk Oil Refinery (TNK-BP)",320000,"UA",48.84876,38.29979,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries",
"Lviv Oil Research & Refinery",18000,"UA",49.80662,24.04376,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries","capacity estimated based on number of employees"
"Naftokhimik Prykarpattya (Pryvat) Nadvirna",39000,"UA",48.62873,24.59924,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries",
"Odesa Refinery (LUKOIL)",70000,"UA",46.51189,30.68805,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries",
1 Site Capacity [bbl/day] Country Latitude Longitude Date Source Comment
2 Modrica 1 BA 44.95978 18.31294 29-08-2024 https://modricaoil.com/Content/Read/onama?lang=en-US the only one
3 OKTA, Skopje 1 MK 42.0022 21.65532 29-08-2024 https://en.wikipedia.org/wiki/OKTA the only one
4 Ballsh 20000 AL 40.60468 19.75231 29-08-2024 https://www.trade.gov/country-commercial-guides/albania-oil-and-gas
5 Fier 10000 AL 40.70095 19.54698 29-08-2024 https://www.trade.gov/country-commercial-guides/albania-oil-and-gas
6 Elbasan 5000 AL 41.08621 20.00762 29-08-2024 https://www.trade.gov/country-commercial-guides/albania-oil-and-gas
7 Pančevo 96000 RS 44.83051 20.68127 29-08-2024 https://en.wikipedia.org/wiki/Naftna_Industrija_Srbije
8 Novi Sad 52000 RS 45.27559 19.86733 29-08-2024 https://en.wikipedia.org/wiki/Naftna_Industrija_Srbije
9 Halychyna Refinery (Pryvat), Drohobych 40000 UA 49.34 23.4851 29-08-2024 https://en.wikipedia.org/wiki/List_of_oil_refineries
10 Kherson Refinery (Alliance) 36000 UA 46.65946 32.57479 29-08-2024 https://en.wikipedia.org/wiki/List_of_oil_refineries
11 Kremenchuk Refinery (Ukrtatnafta) 368500 UA 49.15299 33.4327 29-08-2024 https://en.wikipedia.org/wiki/List_of_oil_refineries
12 LINOS Refinery, Lysychansk Oil Refinery (TNK-BP) 320000 UA 48.84876 38.29979 29-08-2024 https://en.wikipedia.org/wiki/List_of_oil_refineries
13 Lviv Oil Research & Refinery 18000 UA 49.80662 24.04376 29-08-2024 https://en.wikipedia.org/wiki/List_of_oil_refineries capacity estimated based on number of employees
14 Naftokhimik Prykarpattya (Pryvat) Nadvirna 39000 UA 48.62873 24.59924 29-08-2024 https://en.wikipedia.org/wiki/List_of_oil_refineries
15 Odesa Refinery (LUKOIL) 70000 UA 46.51189 30.68805 29-08-2024 https://en.wikipedia.org/wiki/List_of_oil_refineries

View File

@ -10,3 +10,9 @@ DC40plus,Dörpen/West,Klostermansfeld/Sachsen-Anhalt,2000.0,426,confirmed,2037,T
DC41,Alfstedt/Niedersachsen,Hüffenhardt/Baden-Württemberg,2000.0,607,confirmed,2037,True,"{""url"":""https://data.netzausbau.de/2037-2023/NEP/NEP_2037_2045_Bestaetigung.pdf"", ""status"":""confirmed"", ""origin"":""NEP"",""version"":2024,""location0"":""Alfstedt/Niedersachsen"",""location1"":""Hüffenhardt/Baden-Württemberg""",9.0666915,53.5499782,9.0827453,49.2908862
DC42,Sahms/Schleswig-Holstein,Böblingen/Baden-Württemberg,2000.0,737,confirmed,2037,True,"{""url"":""https://data.netzausbau.de/2037-2023/NEP/NEP_2037_2045_Bestaetigung.pdf"", ""status"":""confirmed"", ""origin"":""NEP"",""version"":2024,""location0"":""Sahms/Schleswig-Holstein"",""location1"":""Böblingen/Baden-Württemberg""",10.5331297,53.5252973,9.0113444,48.684969
DC42plus,Sahms/Schleswig-Holstein,Trennfeld/Bayern,2000.0,546,confirmed,2037,True,"{""url"":""https://data.netzausbau.de/2037-2023/NEP/NEP_2037_2045_Bestaetigung.pdf"", ""status"":""confirmed"", ""origin"":""NEP"",""version"":2024,""location0"":""Sahms/Schleswig-Holstein"",""location1"":""Trennfeld/Bayern""",10.5331297,53.5252973,9.6151453,49.7950676
DC1,Emden Ost,Osterath,2000,297,in_permitting,2027,True,"{url:https://www.netzentwicklungsplan.de/sites/default/files/2024-04/NEP_2037_2045_V2023_Anhang_2E_Aktualisierung_April_2024_%28komprimiert%29.pdf,TYNDP 2022:132,""location0"":""Emden Ost"",""location1"":""Osterath""",7.2492328,53.3655941,6.6207151,51.2690922
DC2,Osterath,Philippsburg,2000,299,in_permitting,2026,False,"{url:https://www.netzentwicklungsplan.de/sites/default/files/2024-04/NEP_2037_2045_V2023_Anhang_2E_Aktualisierung_April_2024_%28komprimiert%29.pdf,TYNDP 2022: 254,""location0"":""Osterath"",""location1"":""Philippsburg""",6.6207151,51.2690922,7.5514555,48.9953996
DC3,Brunsbüttel,Großgartach,2000,694,in_permitting,2028,True,"{url:https://www.netzentwicklungsplan.de/sites/default/files/2024-04/NEP_2037_2045_V2023_Anhang_2E_Aktualisierung_April_2024_%28komprimiert%29.pdf,TYNDP 2022: 235,""location0"":""Brunsbüttel"",""location1"":""Großgartach""",9.1395423,53.8972549,9.1258701,49.1425406
DC4,Wilster ,Bergrheinfeld,2000,540,in_permitting,2028,True,"{url:https://www.netzentwicklungsplan.de/sites/default/files/2024-04/NEP_2037_2045_V2023_Anhang_2E_Aktualisierung_April_2024_%28komprimiert%29.pdf,TYNDP 2022: 235,""location0"":""Wilster "",""location1"":""Bergrheinfeld""",9.3741366,53.9233519,10.1810033,50.0082136
DC5,Wolmirstedt,Isar/Bayern,2000,539,in_permitting,2027,True,"{url:https://www.netzentwicklungsplan.de/sites/default/files/2024-04/NEP_2037_2045_V2023_Anhang_2E_Aktualisierung_April_2024_%28komprimiert%29.pdf,TYNDP 2022: 130, name:SuedOstLink,""location0"":""Wolmirstedt"",""location1"":""Isar/Bayern""",11.6267388,52.2484924,11.5745421,47.6691308
DC20,Klein Rogahn,Isar/Bayern,2000,759,in_permitting,2030,False,"{url:https://www.netzentwicklungsplan.de/sites/default/files/2024-04/NEP_2037_2045_V2023_Anhang_2E_Aktualisierung_April_2024_%28komprimiert%29.pdf, name:SuedOstLink+,""location0"":""Klein Rogahn"",""location1"":""Isar/Bayern""",11.3482229,53.6044461,11.5745421,47.6691308

1 bus0 bus1 p_nom length project_status build_year underground tags x0 y0 x1 y1
10 DC41 Alfstedt/Niedersachsen Hüffenhardt/Baden-Württemberg 2000.0 607 confirmed 2037 True {"url":"https://data.netzausbau.de/2037-2023/NEP/NEP_2037_2045_Bestaetigung.pdf", "status":"confirmed", "origin":"NEP","version":2024,"location0":"Alfstedt/Niedersachsen","location1":"Hüffenhardt/Baden-Württemberg" 9.0666915 53.5499782 9.0827453 49.2908862
11 DC42 Sahms/Schleswig-Holstein Böblingen/Baden-Württemberg 2000.0 737 confirmed 2037 True {"url":"https://data.netzausbau.de/2037-2023/NEP/NEP_2037_2045_Bestaetigung.pdf", "status":"confirmed", "origin":"NEP","version":2024,"location0":"Sahms/Schleswig-Holstein","location1":"Böblingen/Baden-Württemberg" 10.5331297 53.5252973 9.0113444 48.684969
12 DC42plus Sahms/Schleswig-Holstein Trennfeld/Bayern 2000.0 546 confirmed 2037 True {"url":"https://data.netzausbau.de/2037-2023/NEP/NEP_2037_2045_Bestaetigung.pdf", "status":"confirmed", "origin":"NEP","version":2024,"location0":"Sahms/Schleswig-Holstein","location1":"Trennfeld/Bayern" 10.5331297 53.5252973 9.6151453 49.7950676
13 DC1 Emden Ost Osterath 2000 297 in_permitting 2027 True {url:https://www.netzentwicklungsplan.de/sites/default/files/2024-04/NEP_2037_2045_V2023_Anhang_2E_Aktualisierung_April_2024_%28komprimiert%29.pdf,TYNDP 2022:132,"location0":"Emden Ost","location1":"Osterath" 7.2492328 53.3655941 6.6207151 51.2690922
14 DC2 Osterath Philippsburg 2000 299 in_permitting 2026 False {url:https://www.netzentwicklungsplan.de/sites/default/files/2024-04/NEP_2037_2045_V2023_Anhang_2E_Aktualisierung_April_2024_%28komprimiert%29.pdf,TYNDP 2022: 254,"location0":"Osterath","location1":"Philippsburg" 6.6207151 51.2690922 7.5514555 48.9953996
15 DC3 Brunsbüttel Großgartach 2000 694 in_permitting 2028 True {url:https://www.netzentwicklungsplan.de/sites/default/files/2024-04/NEP_2037_2045_V2023_Anhang_2E_Aktualisierung_April_2024_%28komprimiert%29.pdf,TYNDP 2022: 235,"location0":"Brunsbüttel","location1":"Großgartach" 9.1395423 53.8972549 9.1258701 49.1425406
16 DC4 Wilster Bergrheinfeld 2000 540 in_permitting 2028 True {url:https://www.netzentwicklungsplan.de/sites/default/files/2024-04/NEP_2037_2045_V2023_Anhang_2E_Aktualisierung_April_2024_%28komprimiert%29.pdf,TYNDP 2022: 235,"location0":"Wilster ","location1":"Bergrheinfeld" 9.3741366 53.9233519 10.1810033 50.0082136
17 DC5 Wolmirstedt Isar/Bayern 2000 539 in_permitting 2027 True {url:https://www.netzentwicklungsplan.de/sites/default/files/2024-04/NEP_2037_2045_V2023_Anhang_2E_Aktualisierung_April_2024_%28komprimiert%29.pdf,TYNDP 2022: 130, name:SuedOstLink,"location0":"Wolmirstedt","location1":"Isar/Bayern" 11.6267388 52.2484924 11.5745421 47.6691308
18 DC20 Klein Rogahn Isar/Bayern 2000 759 in_permitting 2030 False {url:https://www.netzentwicklungsplan.de/sites/default/files/2024-04/NEP_2037_2045_V2023_Anhang_2E_Aktualisierung_April_2024_%28komprimiert%29.pdf, name:SuedOstLink+,"location0":"Klein Rogahn","location1":"Isar/Bayern" 11.3482229 53.6044461 11.5745421 47.6691308

View File

@ -92,9 +92,9 @@ author = "Tom Brown (KIT, TUB, FIAS), Jonas Hoersch (KIT, FIAS), Fabian Hofmann
# built documents.
#
# The short X.Y version.
version = "0.11"
version = "0.12"
# The full version, including alpha/beta/rc tags.
release = "0.11.0"
release = "0.12.0"
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View File

@ -4,7 +4,7 @@ nprocesses,--,int,"Number of parallel processes in cutout preparation"
show_progress,bool,true/false,"Whether progressbar for atlite conversion processes should be shown. False saves time."
cutouts,,,
-- {name},--,"Convention is to name cutouts like ``<region>-<year>-<source>`` (e.g. ``europe-2013-sarah3-era5``).","Name of the cutout netcdf file. The user may specify multiple cutouts under configuration ``atlite: cutouts:``. Reference is used in configuration ``renewable: {technology}: cutout:``. The cutout ``base`` may be used to automatically calculate temporal and spatial bounds of the network."
-- -- module,--,"Subset of {'era5','sarah'}","Source of the reanalysis weather dataset (e.g. `ERA5 <https://www.ecmwf.int/en/forecasts/datasets/reanalysis-datasets/era5>`_ or `SARAH-2 <https://wui.cmsaf.eu/safira/action/viewDoiDetails?acronym=SARAH_V002>`_)"
-- -- module,--,"Subset of {'era5','sarah'}","Source of the reanalysis weather dataset (e.g. `ERA5 <https://www.ecmwf.int/en/forecasts/datasets/reanalysis-datasets/era5>`_ or `SARAH-3 <https://wui.cmsaf.eu/safira/action/viewDoiDetails?acronym=SARAH_V002>`_)"
-- -- x,°,"Float interval within [-180, 180]","Range of longitudes to download weather data for. If not defined, it defaults to the spatial bounds of all bus shapes."
-- -- y,°,"Float interval within [-90, 90]","Range of latitudes to download weather data for. If not defined, it defaults to the spatial bounds of all bus shapes."
-- -- dx,°,"Larger than 0.25","Grid resolution for longitude"

1 Unit Values Description
4 show_progress bool true/false Whether progressbar for atlite conversion processes should be shown. False saves time.
5 cutouts
6 -- {name} -- Convention is to name cutouts like ``<region>-<year>-<source>`` (e.g. ``europe-2013-sarah3-era5``). Name of the cutout netcdf file. The user may specify multiple cutouts under configuration ``atlite: cutouts:``. Reference is used in configuration ``renewable: {technology}: cutout:``. The cutout ``base`` may be used to automatically calculate temporal and spatial bounds of the network.
7 -- -- module -- Subset of {'era5','sarah'} Source of the reanalysis weather dataset (e.g. `ERA5 <https://www.ecmwf.int/en/forecasts/datasets/reanalysis-datasets/era5>`_ or `SARAH-2 <https://wui.cmsaf.eu/safira/action/viewDoiDetails?acronym=SARAH_V002>`_) Source of the reanalysis weather dataset (e.g. `ERA5 <https://www.ecmwf.int/en/forecasts/datasets/reanalysis-datasets/era5>`_ or `SARAH-3 <https://wui.cmsaf.eu/safira/action/viewDoiDetails?acronym=SARAH_V002>`_)
8 -- -- x ° Float interval within [-180, 180] Range of longitudes to download weather data for. If not defined, it defaults to the spatial bounds of all bus shapes.
9 -- -- y ° Float interval within [-90, 90] Range of latitudes to download weather data for. If not defined, it defaults to the spatial bounds of all bus shapes.
10 -- -- dx ° Larger than 0.25 Grid resolution for longitude

View File

@ -1,2 +1,2 @@
,Unit,Values,Description
countries,--,"Subset of {'AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'ME', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK'}","European countries defined by their `Two-letter country codes (ISO 3166-1) <https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>`_ which should be included in the energy system model."
countries,--,"Subset of {'AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'ME', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK', 'XK'}","European countries defined by their `Two-letter country codes (ISO 3166-1) <https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>`_ which should be included in the energy system model."

1 Unit Values Description
2 countries -- Subset of {'AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'ME', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK'} Subset of {'AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'ME', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK', 'XK'} European countries defined by their `Two-letter country codes (ISO 3166-1) <https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>`_ which should be included in the energy system model.

View File

@ -35,3 +35,4 @@ MWh_CH4_per_tMeOH,MWhCH4/tMeOH,float,"The energy amount of methane needed to pro
MWh_MeOH_per_tMeOH,LHV,float,"The energy amount per ton of methanol. From `DECHEMA (2017) <https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf>`_, page 74."
hotmaps_locate_missing,--,"{true,false}",Locate industrial sites without valid locations based on city and countries.
reference_year,year,YYYY,The year used as the baseline for industrial energy demand and production. Data extracted from `JRC-IDEES 2015 <https://data.jrc.ec.europa.eu/dataset/jrc-10110-10001>`_
oil_refining_emissions,tCO2/MWh,float,"The emissions from oil fuel processing (e.g. oil in petrochemical refinieries). The default value of 0.013 tCO2/MWh is based on DE statistics for 2019; the EU value is very similar."

1 Unit Values Description
35 MWh_MeOH_per_tMeOH LHV float The energy amount per ton of methanol. From `DECHEMA (2017) <https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf>`_, page 74.
36 hotmaps_locate_missing -- {true,false} Locate industrial sites without valid locations based on city and countries.
37 reference_year year YYYY The year used as the baseline for industrial energy demand and production. Data extracted from `JRC-IDEES 2015 <https://data.jrc.ec.europa.eu/dataset/jrc-10110-10001>`_
38 oil_refining_emissions tCO2/MWh float The emissions from oil fuel processing (e.g. oil in petrochemical refinieries). The default value of 0.013 tCO2/MWh is based on DE statistics for 2019; the EU value is very similar.

View File

@ -9,8 +9,13 @@ district_heating,--,,`prepare_sector_network.py <https://github.com/PyPSA/pypsa-
-- potential,--,float,maximum fraction of urban demand which can be supplied by district heating
-- progress,--,Dictionary with planning horizons as keys., Increase of today's district heating demand to potential maximum district heating share. Progress = 0 means today's district heating share. Progress = 1 means maximum fraction of urban demand is supplied by district heating
-- district_heating_loss,--,float,Share increase in district heat demand in urban central due to heat losses
-- forward_temperature,°C,Dictionary with country codes as keys. One key must be 'default'.,Forward temperature in district heating
-- return_temperature,°C,Dictionary with country codes as keys. One key must be 'default'.,Return temperature in district heating. Must be lower than forward temperature
-- supply_temperature_approximation,,,
-- -- max_forward_temperature,°C,Dictionary with country codes as keys. One key must be 'default'., Max. forward temperature in district heating (if ambient temperature lower-or-equal `lower_threshold_ambient_temperature`)
-- -- min_forward_temperature,°C,Dictionary with country codes as keys. One key must be 'default'., Min. forward temperature in district heating (if ambient temperature higher-or-equal `upper_threshold_ambient_temperature`)
-- -- return_temperature,°C,Dictionary with country codes as keys. One key must be 'default'.,Return temperature in district heating. Must be lower than forward temperature
-- -- lower_threshold_ambient_temperature,°C,float, Assume `max_forward_temperature` if ambient temperature is below this threshold
-- -- upper_threshold_ambient_temperature,°C,float, Assume `min_forward_temperature` if ambient temperature is above this threshold
-- -- rolling_window_ambient_temperature, h, int, Rolling window size for averaging ambient temperature when approximating supply temperature
-- heat_source_cooling,K,float,Cooling of heat source for heat pumps
-- heat_pump_cop_approximation,,,
-- -- refrigerant,--,"{ammonia, isobutane}",Heat pump refrigerant assumed for COP approximation
@ -84,7 +89,9 @@ boilers,--,"{true, false}",Add option for transforming gas into heat using gas b
resistive_heaters,--,"{true, false}",Add option for transforming electricity into heat using resistive heaters (independently from gas boilers)
oil_boilers,--,"{true, false}",Add option for transforming oil into heat using boilers
biomass_boiler,--,"{true, false}",Add option for transforming biomass into heat using boilers
overdimension_individual_heating,--,float,Add option for overdimensioning individual heating systems by a certain factor. This allows them to cover heat demand peaks e.g. 10% higher than those in the data with a setting of 1.1.
overdimension_heat_generators,,,Add option for overdimensioning heating systems by a certain factor. This allows them to cover heat demand peaks e.g. 10% higher than those in the data with a setting of 1.1.
-- decentral,--,float,The factor for overdimensioning (increasing CAPEX) decentral heating systems
-- central,--,float,The factor for overdimensioning (increasing CAPEX) central heating systems
chp,--,"{true, false}",Add option for using Combined Heat and Power (CHP)
micro_chp,--,"{true, false}",Add option for using Combined Heat and Power (CHP) for decentral areas.
solar_thermal,--,"{true, false}",Add option for using solar thermal to generate heat.

1 Unit Values Description
9 -- potential -- float maximum fraction of urban demand which can be supplied by district heating
10 -- progress -- Dictionary with planning horizons as keys. Increase of today's district heating demand to potential maximum district heating share. Progress = 0 means today's district heating share. Progress = 1 means maximum fraction of urban demand is supplied by district heating
11 -- district_heating_loss -- float Share increase in district heat demand in urban central due to heat losses
12 -- forward_temperature -- supply_temperature_approximation °C Dictionary with country codes as keys. One key must be 'default'. Forward temperature in district heating
13 -- return_temperature -- -- max_forward_temperature °C Dictionary with country codes as keys. One key must be 'default'. Return temperature in district heating. Must be lower than forward temperature Max. forward temperature in district heating (if ambient temperature lower-or-equal `lower_threshold_ambient_temperature`)
14 -- -- min_forward_temperature °C Dictionary with country codes as keys. One key must be 'default'. Min. forward temperature in district heating (if ambient temperature higher-or-equal `upper_threshold_ambient_temperature`)
15 -- -- return_temperature °C Dictionary with country codes as keys. One key must be 'default'. Return temperature in district heating. Must be lower than forward temperature
16 -- -- lower_threshold_ambient_temperature °C float Assume `max_forward_temperature` if ambient temperature is below this threshold
17 -- -- upper_threshold_ambient_temperature °C float Assume `min_forward_temperature` if ambient temperature is above this threshold
18 -- -- rolling_window_ambient_temperature h int Rolling window size for averaging ambient temperature when approximating supply temperature
19 -- heat_source_cooling K float Cooling of heat source for heat pumps
20 -- heat_pump_cop_approximation
21 -- -- refrigerant -- {ammonia, isobutane} Heat pump refrigerant assumed for COP approximation
89 resistive_heaters -- {true, false} Add option for transforming electricity into heat using resistive heaters (independently from gas boilers)
90 oil_boilers -- {true, false} Add option for transforming oil into heat using boilers
91 biomass_boiler -- {true, false} Add option for transforming biomass into heat using boilers
92 overdimension_individual_heating overdimension_heat_generators -- float Add option for overdimensioning individual heating systems by a certain factor. This allows them to cover heat demand peaks e.g. 10% higher than those in the data with a setting of 1.1. Add option for overdimensioning heating systems by a certain factor. This allows them to cover heat demand peaks e.g. 10% higher than those in the data with a setting of 1.1.
93 -- decentral -- float The factor for overdimensioning (increasing CAPEX) decentral heating systems
94 -- central -- float The factor for overdimensioning (increasing CAPEX) central heating systems
95 chp -- {true, false} Add option for using Combined Heat and Power (CHP)
96 micro_chp -- {true, false} Add option for using Combined Heat and Power (CHP) for decentral areas.
97 solar_thermal -- {true, false} Add option for using solar thermal to generate heat.

View File

@ -1,5 +1,5 @@
,Unit,Values,Description
cutout,--,"Should be a folder listed in the configuration ``atlite: cutouts:`` (e.g. 'europe-2013-sarah3-era5') or reference an existing folder in the directory ``cutouts``. Source module can be ERA5 or SARAH-2.","Specifies the directory where the relevant weather data ist stored that is specified at ``atlite/cutouts`` configuration. Both ``sarah`` and ``era5`` work."
cutout,--,"Should be a folder listed in the configuration ``atlite: cutouts:`` (e.g. 'europe-2013-sarah3-era5') or reference an existing folder in the directory ``cutouts``. Source module can be ERA5 and/or SARAH-3.","Specifies the directory where the relevant weather data ist stored that is specified at ``atlite/cutouts`` configuration. Both ``sarah`` and ``era5`` work."
resource,,,
-- method,--,"Must be 'pv'","A superordinate technology type."
-- panel,--,"One of {'Csi', 'CdTe', 'KANENA'} as defined in `atlite <https://github.com/PyPSA/atlite/tree/master/atlite/resources/solarpanel>`_ . Can be a string or a dictionary with years as keys which denote the year another turbine model becomes available.","Specifies the solar panel technology and its characteristic attributes."

1 Unit Values Description
2 cutout -- Should be a folder listed in the configuration ``atlite: cutouts:`` (e.g. 'europe-2013-sarah3-era5') or reference an existing folder in the directory ``cutouts``. Source module can be ERA5 or SARAH-2. Should be a folder listed in the configuration ``atlite: cutouts:`` (e.g. 'europe-2013-sarah3-era5') or reference an existing folder in the directory ``cutouts``. Source module can be ERA5 and/or SARAH-3. Specifies the directory where the relevant weather data ist stored that is specified at ``atlite/cutouts`` configuration. Both ``sarah`` and ``era5`` work.
3 resource
4 -- method -- Must be 'pv' A superordinate technology type.
5 -- panel -- One of {'Csi', 'CdTe', 'KANENA'} as defined in `atlite <https://github.com/PyPSA/atlite/tree/master/atlite/resources/solarpanel>`_ . Can be a string or a dictionary with years as keys which denote the year another turbine model becomes available. Specifies the solar panel technology and its characteristic attributes.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

After

Width:  |  Height:  |  Size: 122 KiB

View File

@ -41,6 +41,17 @@ Rule ``build_cutout``
.. automodule:: build_cutout
Rule ``clean_osm_data``
=============================
.. automodule:: clean_osm_data
Rule ``build_osm_network``
=============================
.. automodule:: build_osm_network
.. _base:
Rule ``base_network``
@ -48,6 +59,12 @@ Rule ``base_network``
.. automodule:: base_network
Rule ``build_transmission_projects``
====================================
.. automodule:: build_transmission_projects
.. _shapes:
Rule ``build_shapes``
@ -55,6 +72,10 @@ Rule ``build_shapes``
.. automodule:: build_shapes
Rule ``build_gdp_pop_non_nuts3``
=============================
.. automodule:: build_gdp_pop_non_nuts3
.. _powerplants:

View File

@ -8,103 +8,278 @@
Release Notes
##########################################
Upcoming Release
================
.. Upcoming Release
* Updated district heating supply temperatures based on `Euroheat's DHC Market Outlook 2024<https://api.euroheat.org/uploads/Market_Outlook_2024_beeecd62d4.pdf>`__ and `AGFW-Hauptbericht 2022 <https://www.agfw.de/securedl/sdl-eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE3MjU2MjI2MTUsImV4cCI6MTcyNTcxMjYxNSwidXNlciI6MCwiZ3JvdXBzIjpbMCwtMV0sImZpbGUiOiJmaWxlYWRtaW4vdXNlcl91cGxvYWQvWmFobGVuX3VuZF9TdGF0aXN0aWtlbi9IYXVwdGJlcmljaHRfMjAyMi9BR0ZXX0hhdXB0YmVyaWNodF8yMDIyLnBkZiIsInBhZ2UiOjQzNn0.Bhma3PKg9uJnC57Ixi2p9STW5-II9VXPTDXS544M208/AGFW_Hauptbericht_2022.pdf>`__. `min_forward_temperature` and `return_temperature` (not given by Euroheat) are extrapolated based on German values.
* Made the overdimensioning factor for heating systems specific for central/decentral heating, defaults to no overdimensionining for central heating and no changes to decentral heating compared to previous version.
* bugfix: The carrier of stores was silently overwritten by their bus_carrier as a side effect when building the co2 constraints
* bugfix: The oil generator was incorrectly dropped when the config `oil_refining_emissions` was greater than zero. This was the default behaviour in 0.12.0.
PyPSA-Eur 0.12.0 (30th August 2024)
===================================
**Data Updates and Extensions**
* Switch to OpenStreetMap (OSM) data for modelling the high-voltage transmission
grid. The new OSM-based grid is is now the default. The previous ENTSO-E grid
data is now deprecated. It can still be used by setting ``electricity:
base_network: entsoegridkit``. The new default setting "osm-prebuilt"
downloads the latest prebuilt snapshots from Zenodo. The setting "osm-raw"
retrieves and cleans the raw OSM data and subsequently builds the network.
(https://github.com/PyPSA/pypsa-eur/pull/1079)
* Update energy balances from JRC-IDEES-2015 to `JRC-IDEES-2021
<https://publications.jrc.ec.europa.eu/repository/handle/JRC137809>`__. The
reference year was changed from 2015 to 2019.
(https://github.com/PyPSA/pypsa-eur/pull/1167)
* Updated pre-built `weather data cutouts
<https://zenodo.org/records/12791128>`__. These are now merged cutouts with
solar irradiation from the new SARAH-3 dataset while taking all other
variables from ERA5. Cutouts are now available for multiple years (2010, 2013,
2019, and 2023). The overall download size was cut in half.
(https://github.com/PyPSA/pypsa-eur/pull/1176)
* Included data from the `Global Steel Plant Tracker
<https://globalenergymonitor.org/projects/global-steel-plant-tracker/>`__
provided by Global Energy Monitor. The data includes among other attributes
the locations, ages, operating status, relining dates, manufacturing process
and capacities of steel plants in Europe. This data is used as a spatial
distribution key for the steel production, which is now separated by process
type (EAF, DRI + EAF, integrated).
(https://github.com/PyPSA/pypsa-eur/pull/1241)
* Added data on the locations and capacities of ammonia plants in Europe. This
data is used as a spatial distribution key for the ammonia demand. The data
manually collected with sources noted in ``data/ammonia_plants.csv``.
(https://github.com/PyPSA/pypsa-eur/pull/1241)
* Added data on the locations and capacities of cement plants in Europe that are
not included in the Hotmaps industrial database. The data sourced from the
`USGS 2019 Minerals Yearbooks
<https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information>`__
of specific countries is used as a spatial distribution key for the cement
demand. The data is stored in ``data/cement-plants-noneu.csv``.
(https://github.com/PyPSA/pypsa-eur/pull/1241)
* Added data on the locations and capacities of refineries in Europe that are
not included in the Hotmaps industrial database. The data is mostly sourced
from the `Wikipedia list of oil refineries
<https://en.wikipedia.org/wiki/List_of_oil_refineries>`__. The data is stored
in ``data/refineries-noneu.csv``.
(https://github.com/PyPSA/pypsa-eur/pull/1241)
* Retrieve share of urban population from `World Bank API
<https://data.worldbank.org/indicator/SP.URB.TOTL.IN.ZS>`__. The data
originates from the United Nations Population Division. Previously, a file
``data/urban_percent.csv`` with an undocumented source was used.
(https://github.com/PyPSA/pypsa-eur/pull/1248)
* Updated Global Energy Monitor's Europe Gas Tracker to May 2024 version.
(https://github.com/PyPSA/pypsa-eur/pull/1235)
* Updated country-specific Energy Availability Factors (EAFs) for nuclear power
plants based on `IAEA 2021-2023 reported country averages
<https://pris.iaea.org/PRIS/WorldStatistics/ThreeYrsEnergyAvailabilityFactor.aspx>`__.
(https://github.com/PyPSA/pypsa-eur/pull/1236)
* Update GEM Europe Gas Tracker to May 2024 version.
* Updated technology-data to v0.9.2, with added methanol and biomass
assumptions.
* Add investment period dependent CO2 sequestration potentials
* Updated EEZ shapes to v12. This data is now automatically retrieved and was
removed from the data bundle. (https://github.com/PyPSA/pypsa-eur/pull/1188,
https://github.com/PyPSA/pypsa-eur/pull/1210)
* Add option to produce hydrogen from solid biomass (flag ``solid biomass to hydrogen``), combined with carbon capture
* The country shapes from Naturalearth are now automatically retrieved and are
removed from the data bundle. (https://github.com/PyPSA/pypsa-eur/pull/1190)
* Fixed PDF encoding in ``build_biomass_transport_costs`` with update of tabula-py and jpype1
**New Features**
* More modular and flexible handling of transmission projects. One can now add new transmission projects in a subfolder of `data/transmission projects` similar to the files in the template folder. After adding the new files and updating the config section `transmission_projects:`, transmission projects will be included if they are not duplicates of existing lines or other projects.
* Improved biomass representation:
* Add option to apply a gaussian kernel density smoothing to wind turbine power curves.
* Added unsustainable biomass potentials for solid, gaseous, and liquid biomass
based on current consumption levels from Eurostat energy balances. The
potentials can be phased-out and/or substituted by the phase-in of sustainable
biomass types using the config parameters ``biomass:
share_unsustainable_use_retained`` and ``biomass:
share_sustainable_potential_available``.
(https://github.com/PyPSA/pypsa-eur/pull/1139)
* Update JRC-IDEES-2015 to `JRC-IDEES-2021 <https://publications.jrc.ec.europa.eu/repository/handle/JRC137809>`__. The reference year is changed from 2015 to 2019.
* Added energy penalty for BECC applications.
(https://github.com/PyPSA/pypsa-eur/pull/1130)
* Added option to use country-specific district heating forward and return temperatures. Defaults to lower temperatures in Scandinavia.
* Added option to enable the import of solid biomass.
(https://github.com/PyPSA/pypsa-eur/pull/1194)
* Added unsustainable biomass potentials for solid, gaseous, and liquid biomass. The potentials can be phased-out and/or
substituted by the phase-in of sustainable biomass types using the config parameters
``biomass: share_unsustainable_use_retained`` and ``biomass: share_sustainable_potential_available``.
* Added option to produce electrobiofuels from solid biomass and hydrogen. This
process combined BtL and Fischer-Tropsch to efficiently use the available
biogenic carbon. (https://github.com/PyPSA/pypsa-eur/pull/1193)
* The rule ``prepare_links_p_nom`` was removed since it was outdated and not used.
* Added option to split municipal solid waste from solid biomass.
(https://github.com/PyPSA/pypsa-eur/pull/1195,
https://github.com/PyPSA/pypsa-eur/pull/1134)
* Changed heat pump COP approximation for central heating to be based on `Jensen et al. (2018) <https://backend.orbit.dtu.dk/ws/portalfiles/portal/151965635/MAIN_Final.pdf>`__ and a default forward temperature of 90C. This is more realistic for district heating than the previously used approximation method.
* Added option to produce hydrogen from solid biomass with or without carbon
capture. (https://github.com/PyPSA/pypsa-eur/pull/1213)
* split solid biomass potentials into solid biomass and municipal solid waste. Add option to use municipal solid waste. This option is only activated in combination with the flag ``waste_to_energy``
* Improved district heating representation:
* Add option to import solid biomass
* Added option to use country-specific district heating forward and return
temperatures. Defaults to lower temperatures in Scandinavia.
(https://github.com/PyPSA/pypsa-eur/pull/1180)
* Add option to produce electrobiofuels (flag ``electrobiofuels``) from solid biomass and hydrogen, as a combination of BtL and Fischer-Tropsch to make more use of the biogenic carbon
* Made central heating supply temperatures dynamic based on an adaptation of a
reference curve from Pieper et al. (2019)
(https://www.sciencedirect.com/science/article/pii/S0360544219305857?via%3Dihub).
(https://github.com/PyPSA/pypsa-eur/pull/1206/)
* Add flag ``sector: fossil_fuels`` in config to remove the option of importing fossil fuels
* Changed heat pump COP approximation for central heating to be based on
`Jensen et al. (2018)
<https://backend.orbit.dtu.dk/ws/portalfiles/portal/151965635/MAIN_Final.pdf>`__
and a default forward temperature of 90C. This is more realistic for
district heating than the previously used approximation method.
(https://github.com/PyPSA/pypsa-eur/pull/1176)
* Renamed the carrier of batteries in BEVs from `battery storage` to `EV battery` and the corresponding bus carrier from `Li ion` to `EV battery`. This is to avoid confusion with stationary battery storage.
* Added option for various power-to-X processes to specify their share of waste
heat that can be used in district heating. The default was changed from 100%
to 25%. (https://github.com/PyPSA/pypsa-eur/pull/1141)
* Changed default assumptions about waste heat usage from PtX and fuel cells in district heating.
The default value for the link efficiency scaling factor was changed from 100% to 25%.
It can be set to other values in the configuration ``sector: use_TECHNOLOGY_waste_heat``.
* In simplifying polygons in :mod:`build_shapes` default to no tolerance.
* Set non-zero capital_cost for methanol stores to avoid unrealistic storage sizes
* Set p_nom = p_nom_min for generators with baseyear == grouping_year in add_existing_baseyear. This has no effect on the optimization but helps n.statistics to correctly report already installed capacities.
* Reverted outdated hotfix for doubled renewable capacity in myopic optimization.
* Added option to specify emissions fuel processing (e.g. oil in petrochemical
refinieries) with setting ``industry: oil_refining_emissions:``.
* Added Enhanced Geothermal Systems for generation of electricity and district heat.
Cost and available capacity assumptions based on `Aghahosseini et al. (2020)
<https://www.sciencedirect.com/science/article/pii/S0306261920312551>`__.
See configuration ``sector: enhanced_geothermal`` for details; by default switched off.
* Partially revert https://github.com/PyPSA/pypsa-eur/pull/967 to return to old grouping year logic (which was mostly correct)
* Represent Kosovo (XK) as separate country.
(https://github.com/PyPSA/pypsa-eur/pull/1249)
* Bugfix: Correctly read in threshold capacity below which to remove components from previous planning horizons in :mod:`add_brownfield`.
* Add option to specify carbon sequestration potentials per investment period.
(https://github.com/PyPSA/pypsa-eur/pull/1228)
* For countries not contained in the NUTS3-specific datasets (i.e. MD and UA), the mapping of GDP per capita and population per bus region used to spatially distribute electricity demand is now endogenised in a new rule :mod:`build_gdp_ppp_non_nuts3`. https://github.com/PyPSA/pypsa-eur/pull/1146
* Add option to completely eliminate the use of fossil fuels.
(https://github.com/PyPSA/pypsa-eur/pull/1187)
* The databundle has been updated to release v0.3.0, which includes raw GDP and population data for countries outside the NUTS system (UA, MD). https://github.com/PyPSA/pypsa-eur/pull/1146
* Added more modular and flexible handling of planned transmission reinforcement
projects (e.g. TYNDP). See configuration settings ``transmission_projects:``.
(https://github.com/PyPSA/pypsa-eur/pull/1085)
* Updated filtering in :mod:`determine_availability_matrix_MD_UA.py` to improve speed. https://github.com/PyPSA/pypsa-eur/pull/1146
* Bugfix: Impose minimum value of zero for district heating progress between current and future market share in :mod:`build_district_heat_share`.
* The ``{scope}`` wildcard was removed, since its outputs were not used.
* Enable parallelism in :mod:`determine_availability_matrix_MD_UA.py` and remove plots. This requires the use of temporary files.
* Added new major feature to create the base_network from OpenStreetMap (OSM) data (PR https://github.com/PyPSA/pypsa-eur/pull/1079). Note that a heuristics based cleaning process is used for lines and links where electrical parameters are incomplete, missing, or ambiguous. Through ``electricity["base_network"]``, the base network can be set to "entsoegridkit" (now deprecated), "osm-prebuilt" (default, downloads the latest prebuilt snapshot based on OSM data from Zenodo), or "osm-raw" which retrieves (once) and cleans the raw OSM data and subsequently builds the network. Note that this process may take a few minutes.
* Updated pre-built `weather data cutouts
<https://zenodo.org/records/12791128>`__. These are now merged cutouts with
solar irradiation from the new SARAH-3 dataset while taking all other
variables from ERA5. Cutouts are now available for multiple years (2010, 2013,
2019, and 2023).
* Added option to smooth wind turbine power curves with a Gaussian kernel density.
(https://github.com/PyPSA/pypsa-eur/pull/1209).
* Added option ``solving: curtailment_mode``` which fixes the dispatch profiles
of generators with time-varying p_max_pu by setting ``p_min_pu = p_max_pu``
and adds an auxiliary curtailment generator with negative sign (to absorb
excess power) at every AC bus. This can speed up the solving process as the
curtailment decision is aggregated into a single generator per region.
(https://github.com/PyPSA/pypsa-eur/pull/1177)
* Added capital costs to all liquid carbonaceous fuel stores.
(https://github.com/PyPSA/pypsa-eur/pull/1234)
**Breaking Changes**
* Due to memory issues, the feature ``n.shapes`` is temporarily disabled.
(https://github.com/PyPSA/pypsa-eur/pull/1238)
* Renamed the carrier of batteries in BEVs from `battery storage` to `EV
battery` and the corresponding bus carrier from `Li ion` to `EV battery`. This
is to avoid confusion with stationary battery storage.
(https://github.com/PyPSA/pypsa-eur/pull/1116)
**Changes**
* Powerplants can now be assigned to all buses, not just substations.
(https://github.com/PyPSA/pypsa-eur/pull/1239)
* Avoid adding existing gas pipelines repeatedly for different planning
horizons.
(https://github.com/PyPSA/pypsa-eur/pull/1162https://github.com/PyPSA/pypsa-eur/pull/1162)
* Move custom busmaps to
``data/busmaps/elec_s{simpl}_{clusters}_{base_network}.csv``. This allows for
different busmaps depending on the base network.
(https://github.com/PyPSA/pypsa-eur/pull/1231)
* For countries not contained in the NUTS3-specific datasets (i.e. MD and UA),
the mapping of GDP per capita and population per bus region used to spatially
distribute electricity demand is now endogenised in a new rule
:mod:`build_gdp_ppp_non_nuts3`. The databundle has been updated accordingly.
(https://github.com/PyPSA/pypsa-eur/pull/1146)
* Enable parallelism in :mod:`determine_availability_matrix_MD_UA.py` and remove
plots. This requires the use of temporary files.
(https://github.com/PyPSA/pypsa-eur/pull/1170)
* In :mod:`base_network`, replace own voronoi polygon calculation function with
Geopandas `gdf.voronoi_polygons` method.
(https://github.com/PyPSA/pypsa-eur/pull/1172)
* In simplifying polygons in :mod:`build_shapes` default to no tolerance.
(https://github.com/PyPSA/pypsa-eur/pull/1137)
* Updated filtering in :mod:`determine_availability_matrix_MD_UA.py` to improve
speed. (https://github.com/PyPSA/pypsa-eur/pull/1146)
* Removed unused data files and rules.
(https://github.com/PyPSA/pypsa-eur/pull/1246,
https://github.com/PyPSA/pypsa-eur/pull/1203)
* The ``{scope}`` wildcard was removed, since its outputs were not used.
(https://github.com/PyPSA/pypsa-eur/pull/1171)
* Unify how the oil bus is added.
* Set ``p_nom = p_nom_min`` for generators with ``baseyear == grouping_year`` in
:mod:`add_existing_baseyear`. This has no effect on the optimization but helps
to correctly report already installed capacities using ``n.statistics()``.
* Cutouts are no longer marked as ``protected()``.
(https://github.com/PyPSA/pypsa-eur/pull/1220)
**Bugfixes and Compatibility**
* Bugfix in :mod:`simplify_network` for spatially resolving Corsica.
(https://github.com/PyPSA/pypsa-eur/pull/1215)
* Bugfix for running without spatial resolution.
(https://github.com/PyPSA/pypsa-eur/pull/1183)
* Bugfix: Impose minimum value of zero for district heating progress between
current and future market share in :mod:`build_district_heat_share`.
(https://github.com/PyPSA/pypsa-eur/pull/1168)
* Bugfix: Correctly read in threshold capacity below which to remove components
from previous planning horizons in :mod:`add_brownfield`.
* Bugfix for passing function arguments in rule :mod:`solve_operations_network`.
* Bugfix avoiding infinity values in the intermediate industry sector ratios.
(https://github.com/PyPSA/pypsa-eur/pull/1227)
* Bugfix: Add floating wind to cost update function in
:mod:`prepare_sector_network`. (https://github.com/PyPSA/pypsa-eur/pull/1106)
* Fixed PDF encoding in ``build_biomass_transport_costs``.
(https://github.com/PyPSA/pypsa-eur/pull/1219)
* Dropped ``pycountry`` dependency in favour of ``country_converter``.
(https://github.com/PyPSA/pypsa-eur/pull/1188)
* Use temporary mirror for broken link to Eurostat energy balances (April 2023).
(https://github.com/PyPSA/pypsa-eur/pull/1147)
* Compatibility with geopandas 1.0+.
(https://github.com/PyPSA/pypsa-eur/pull/1136)
* Compatibility with snakemake 8.14+.
(https://github.com/PyPSA/pypsa-eur/pull/1112)
* Address various deprecations.
* Move custom busmaps to ```data/busmaps/elec_s{simpl}_{clusters}_{base_network}.csv``` (if enabled). This allows for different busmaps depending on the base network and scenario.
PyPSA-Eur 0.11.0 (25th May 2024)
=====================================

View File

@ -19,13 +19,43 @@ Rule ``retrieve_databundle``
.. automodule:: retrieve_databundle
Rule ``retrieve_eurostat_data``
===============================
.. automodule:: retrieve_eurostat_data
Rule ``retrieve_jrc_idees``
===============================
.. automodule:: retrieve_jrc_idees
Rule ``retrieve_eurostat_household_data``
=========================================
.. automodule:: retrieve_eurostat_household_data
Rule ``retrieve_gas_infrastructure_data``
=========================================
.. automodule:: retrieve_gas_infrastructure_data
Rule ``retrieve_osm_data``
=========================================
.. automodule:: retrieve_osm_data
Rule ``retrieve_cutout``
============================
.. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.6382570.svg
:target: https://doi.org/10.5281/zenodo.6382570
Cutouts are spatio-temporal subsets of the European weather data from the `ECMWF ERA5 <https://software.ecmwf.int/wiki/display/CKB/ERA5+data+documentation>`__ reanalysis dataset and the `CMSAF SARAH-2 <https://wui.cmsaf.eu/safira/action/viewDoiDetails?acronym=SARAH_V002>`__ solar surface radiation dataset for the year 2013.
Cutouts are spatio-temporal subsets of the European weather data from the `ECMWF ERA5 <https://software.ecmwf.int/wiki/display/CKB/ERA5+data+documentation>`__ reanalysis dataset and the `CMSAF SARAH-3 <https://wui.cmsaf.eu/safira/action/viewDoiDetails?acronym=SARAH_V002>`__ solar surface radiation dataset for the year 2013, 2019 or 2023.
They have been prepared by and are for use with the `atlite <https://github.com/PyPSA/atlite>`__ tool. You can either generate them yourself using the ``build_cutouts`` rule or retrieve them directly from `zenodo <https://doi.org/10.5281/zenodo.6382570>`__ through the rule ``retrieve_cutout``.
The :ref:`tutorial` uses a smaller cutout than required for the full model (30 MB), which is also automatically downloaded.
@ -47,7 +77,7 @@ The :ref:`tutorial` uses a smaller cutout than required for the full model (30 M
**Outputs**
- ``cutouts/{cutout}``: weather data from either the `ERA5 <https://www.ecmwf.int/en/forecasts/datasets/reanalysis-datasets/era5>`__ reanalysis weather dataset or `SARAH-2 <https://wui.cmsaf.eu/safira/action/viewProduktSearch>`__ satellite-based historic weather data.
- ``cutouts/{cutout}``: weather data from either the `ERA5 <https://www.ecmwf.int/en/forecasts/datasets/reanalysis-datasets/era5>`__ reanalysis weather dataset and/or `SARAH-3 <https://wui.cmsaf.eu/safira/action/viewProduktSearch>`__ satellite-based historic weather data.
.. seealso::
For details see :mod:`build_cutout` and read the `atlite documentation <https://atlite.readthedocs.io>`__.

View File

@ -43,6 +43,11 @@ Rule ``build_biomass_potentials``
.. automodule:: build_biomass_potentials
Rule ``build_egs_potentials``
==============================================================================
.. automodule:: build_egs_potentials
Rule ``build_biomass_transport_costs``
==============================================================================
@ -58,6 +63,11 @@ Rule ``build_cop_profiles``
.. automodule:: build_cop_profiles
Rule ``build_central_heating_temperature_profiles``
==============================================================================
.. automodule:: build_central_heating_temperature_profiles
Rule ``build_energy_totals``
==============================================================================

View File

@ -80,7 +80,7 @@ adapt the required range of coordinates to the selection of countries.
We can also decide which weather data source should be used to calculate
potentials and capacity factor time-series for each carrier. For example, we may
want to use the ERA-5 dataset for solar and not the default SARAH-2 dataset.
want to use the ERA-5 dataset for solar and not the default SARAH-3 dataset.
.. literalinclude:: ../config/test/config.electricity.yaml
:language: yaml
@ -132,88 +132,98 @@ This triggers a workflow of multiple preceding jobs that depend on each rule's i
graph[bgcolor=white, margin=0];
node[shape=box, style=rounded, fontname=sans, fontsize=10, penwidth=2];
edge[penwidth=2, color=grey];
0[label = "solve_network", color = "0.21 0.6 0.85", style="rounded"];
1[label = "prepare_network\nll: copt\nopts: ", color = "0.51 0.6 0.85", style="rounded"];
2[label = "add_extra_components", color = "0.43 0.6 0.85", style="rounded"];
3[label = "cluster_network\nclusters: 6", color = "0.17 0.6 0.85", style="rounded"];
4[label = "simplify_network\nsimpl: ", color = "0.49 0.6 0.85", style="rounded"];
5[label = "add_electricity", color = "0.26 0.6 0.85", style="rounded"];
6[label = "build_renewable_profiles\ntechnology: solar", color = "0.02 0.6 0.85", style="rounded"];
7[label = "base_network", color = "0.35 0.6 0.85", style="rounded"];
8[label = "build_shapes", color = "0.62 0.6 0.85", style="rounded"];
9[label = "retrieve_databundle", color = "0.24 0.6 0.85", style="rounded"];
10[label = "retrieve_cutout\ncutout: be-03-2013-era5", color = "0.36 0.6 0.85", style="rounded"];
11[label = "build_renewable_profiles\ntechnology: solar-hsat", color = "0.02 0.6 0.85", style="rounded"];
12[label = "build_renewable_profiles\ntechnology: onwind", color = "0.02 0.6 0.85", style="rounded"];
13[label = "build_renewable_profiles\ntechnology: offwind-ac", color = "0.02 0.6 0.85", style="rounded"];
14[label = "build_ship_raster", color = "0.08 0.6 0.85", style="rounded"];
15[label = "retrieve_ship_raster", color = "0.28 0.6 0.85", style="rounded"];
16[label = "build_renewable_profiles\ntechnology: offwind-dc", color = "0.02 0.6 0.85", style="rounded"];
17[label = "build_renewable_profiles\ntechnology: offwind-float", color = "0.02 0.6 0.85", style="rounded"];
18[label = "build_line_rating", color = "0.07 0.6 0.85", style="rounded"];
19[label = "retrieve_cost_data\nyear: 2030", color = "0.47 0.6 0.85", style="rounded"];
20[label = "build_powerplants", color = "0.11 0.6 0.85", style="rounded"];
21[label = "build_electricity_demand", color = "0.05 0.6 0.85", style="rounded"];
22[label = "retrieve_electricity_demand", color = "0.58 0.6 0.85", style="rounded"];
23[label = "retrieve_synthetic_electricity_demand", color = "0.11 0.6 0.85", style="rounded"];
0[label = "solve_network", color = "0.16 0.6 0.85", style="rounded"];
1[label = "prepare_network\nll: copt\nopts: ", color = "0.40 0.6 0.85", style="rounded"];
2[label = "add_extra_components", color = "0.03 0.6 0.85", style="rounded"];
3[label = "cluster_network\nclusters: 6", color = "0.26 0.6 0.85", style="rounded"];
4[label = "simplify_network\nsimpl: ", color = "0.17 0.6 0.85", style="rounded"];
5[label = "add_electricity", color = "0.39 0.6 0.85", style="rounded"];
6[label = "build_renewable_profiles\ntechnology: solar", color = "0.13 0.6 0.85", style="rounded"];
7[label = "base_network", color = "0.01 0.6 0.85", style="rounded"];
8[label = "retrieve_osm_prebuilt", color = "0.27 0.6 0.85", style="rounded"];
9[label = "build_shapes", color = "0.18 0.6 0.85", style="rounded"];
10[label = "retrieve_naturalearth_countries", color = "0.41 0.6 0.85", style="rounded"];
11[label = "retrieve_eez", color = "0.14 0.6 0.85", style="rounded"];
12[label = "retrieve_databundle", color = "0.38 0.6 0.85", style="rounded"];
13[label = "retrieve_cutout\ncutout: be-03-2013-era5", color = "0.51 0.6 0.85", style="rounded"];
14[label = "build_renewable_profiles\ntechnology: solar-hsat", color = "0.13 0.6 0.85", style="rounded"];
15[label = "build_renewable_profiles\ntechnology: onwind", color = "0.13 0.6 0.85", style="rounded"];
16[label = "build_renewable_profiles\ntechnology: offwind-ac", color = "0.13 0.6 0.85", style="rounded"];
17[label = "build_ship_raster", color = "0.16 0.6 0.85", style="rounded"];
18[label = "retrieve_ship_raster", color = "0.53 0.6 0.85", style="rounded"];
19[label = "build_renewable_profiles\ntechnology: offwind-dc", color = "0.13 0.6 0.85", style="rounded"];
20[label = "build_renewable_profiles\ntechnology: offwind-float", color = "0.13 0.6 0.85", style="rounded"];
21[label = "build_line_rating", color = "0.46 0.6 0.85", style="rounded"];
22[label = "build_transmission_projects", color = "0.29 0.6 0.85", style="rounded"];
23[label = "retrieve_cost_data\nyear: 2030", color = "0.11 0.6 0.85", style="rounded"];
24[label = "build_powerplants", color = "0.18 0.6 0.85", style="rounded"];
25[label = "build_electricity_demand", color = "0.30 0.6 0.85", style="rounded"];
26[label = "retrieve_electricity_demand", color = "0.13 0.6 0.85", style="rounded"];
27[label = "retrieve_synthetic_electricity_demand", color = "0.43 0.6 0.85", style="rounded"];
1 -> 0
2 -> 1
19 -> 1
23 -> 1
3 -> 2
19 -> 2
23 -> 2
4 -> 3
19 -> 3
23 -> 3
5 -> 4
19 -> 4
23 -> 4
7 -> 4
6 -> 5
11 -> 5
12 -> 5
13 -> 5
14 -> 5
15 -> 5
16 -> 5
17 -> 5
7 -> 5
18 -> 5
19 -> 5
20 -> 5
7 -> 5
21 -> 5
8 -> 5
22 -> 5
23 -> 5
24 -> 5
25 -> 5
9 -> 5
7 -> 6
12 -> 6
9 -> 6
8 -> 6
10 -> 6
13 -> 6
8 -> 7
9 -> 8
7 -> 11
9 -> 11
8 -> 11
10 -> 11
7 -> 12
9 -> 12
8 -> 12
10 -> 12
7 -> 13
9 -> 13
14 -> 13
8 -> 13
10 -> 13
15 -> 14
10 -> 14
9 -> 7
10 -> 9
11 -> 9
12 -> 9
7 -> 14
12 -> 14
9 -> 14
13 -> 14
7 -> 15
12 -> 15
9 -> 15
13 -> 15
7 -> 16
12 -> 16
17 -> 16
9 -> 16
14 -> 16
8 -> 16
10 -> 16
7 -> 17
9 -> 17
14 -> 17
8 -> 17
10 -> 17
7 -> 18
10 -> 18
13 -> 16
18 -> 17
13 -> 17
7 -> 19
12 -> 19
17 -> 19
9 -> 19
13 -> 19
7 -> 20
22 -> 21
23 -> 21
12 -> 20
17 -> 20
9 -> 20
13 -> 20
7 -> 21
13 -> 21
7 -> 22
9 -> 22
7 -> 24
26 -> 25
27 -> 25
}
|
@ -235,17 +245,21 @@ In the terminal, this will show up as a list of jobs to be run:
build_renewable_profiles 6
build_shapes 1
build_ship_raster 1
build_transmission_projects 1
cluster_network 1
prepare_network 1
retrieve_cost_data 1
retrieve_cutout 1
retrieve_databundle 1
retrieve_eez 1
retrieve_electricity_demand 1
retrieve_naturalearth_countries 1
retrieve_osm_prebuilt 1
retrieve_ship_raster 1
retrieve_synthetic_electricity_demand 1
simplify_network 1
solve_network 1
total 24
total 28
``snakemake`` then runs these jobs in the correct order.

View File

@ -74,6 +74,7 @@ which were already included in the electricity-only tutorial:
base_network 1
build_ammonia_production 1
build_biomass_potentials 1
build_central_heating_temperature_profiles 1
build_clustered_population_layouts 1
build_cop_profiles 1
build_daily_heat_demand 1
@ -102,8 +103,9 @@ which were already included in the electricity-only tutorial:
build_ship_raster 1
build_shipping_demand 1
build_simplified_population_layouts 1
build_solar_thermal_profiles 3
build_temperature_profiles 3
build_solar_thermal_profiles 1
build_temperature_profiles 1
build_transmission_projects 1
build_transport_demand 1
cluster_gas_network 1
cluster_network 1
@ -118,16 +120,23 @@ which were already included in the electricity-only tutorial:
retrieve_cost_data 1
retrieve_cutout 1
retrieve_databundle 1
retrieve_eez 1
retrieve_electricity_demand 1
retrieve_eurostat_data 1
retrieve_eurostat_household_data 1
retrieve_gas_infrastructure_data 1
retrieve_gem_europe_gas_tracker 1
retrieve_gem_steel_plant_tracker 1
retrieve_jrc_idees 1
retrieve_naturalearth_countries 1
retrieve_osm_prebuilt 1
retrieve_ship_raster 1
retrieve_synthetic_electricity_demand 1
retrieve_worldbank_urban_population 1
simplify_network 1
solve_sector_network 1
time_aggregation 1
total 69
total 74
This covers the retrieval of additional raw data from online resources and
preprocessing data about the transport, industry, and heating sectors as well as
@ -146,264 +155,266 @@ successfully.
graph[bgcolor=white, margin=0];
node[shape=box, style=rounded, fontname=sans, fontsize=10, penwidth=2];
edge[penwidth=2, color=grey];
0[label = "all", color = "0.28 0.6 0.85", style="rounded"];
1[label = "plot_summary", color = "0.60 0.6 0.85", style="rounded"];
0[label = "all", color = "0.22 0.6 0.85", style="rounded"];
1[label = "plot_summary", color = "0.11 0.6 0.85", style="rounded"];
2[label = "make_summary", color = "0.30 0.6 0.85", style="rounded"];
3[label = "solve_sector_network", color = "0.36 0.6 0.85", style="rounded"];
4[label = "prepare_sector_network\nsector_opts: ", color = "0.22 0.6 0.85", style="rounded"];
5[label = "build_renewable_profiles\ntechnology: offwind-ac", color = "0.20 0.6 0.85", style="rounded"];
6[label = "base_network", color = "0.00 0.6 0.85", style="rounded"];
7[label = "build_shapes", color = "0.25 0.6 0.85", style="rounded"];
8[label = "retrieve_databundle", color = "0.06 0.6 0.85", style="rounded"];
9[label = "build_ship_raster", color = "0.06 0.6 0.85", style="rounded"];
10[label = "retrieve_ship_raster", color = "0.27 0.6 0.85", style="rounded"];
11[label = "retrieve_cutout\ncutout: be-03-2013-era5", color = "0.26 0.6 0.85", style="rounded"];
12[label = "build_renewable_profiles\ntechnology: offwind-dc", color = "0.20 0.6 0.85", style="rounded"];
13[label = "build_renewable_profiles\ntechnology: offwind-float", color = "0.20 0.6 0.85", style="rounded"];
14[label = "cluster_gas_network", color = "0.37 0.6 0.85", style="rounded"];
15[label = "build_gas_network", color = "0.44 0.6 0.85", style="rounded"];
16[label = "retrieve_gas_infrastructure_data", color = "0.43 0.6 0.85", style="rounded"];
17[label = "cluster_network\nclusters: 5", color = "0.08 0.6 0.85", style="rounded"];
18[label = "simplify_network\nsimpl: ", color = "0.01 0.6 0.85", style="rounded"];
19[label = "add_electricity", color = "0.53 0.6 0.85", style="rounded"];
20[label = "build_renewable_profiles\ntechnology: solar", color = "0.20 0.6 0.85", style="rounded"];
21[label = "build_renewable_profiles\ntechnology: solar-hsat", color = "0.20 0.6 0.85", style="rounded"];
22[label = "build_renewable_profiles\ntechnology: onwind", color = "0.20 0.6 0.85", style="rounded"];
23[label = "retrieve_cost_data\nyear: 2030", color = "0.11 0.6 0.85", style="rounded"];
24[label = "build_powerplants", color = "0.62 0.6 0.85", style="rounded"];
25[label = "build_electricity_demand", color = "0.66 0.6 0.85", style="rounded"];
26[label = "retrieve_electricity_demand", color = "0.20 0.6 0.85", style="rounded"];
27[label = "retrieve_synthetic_electricity_demand", color = "0.52 0.6 0.85", style="rounded"];
28[label = "build_gas_input_locations", color = "0.21 0.6 0.85", style="rounded"];
29[label = "time_aggregation", color = "0.58 0.6 0.85", style="rounded"];
30[label = "prepare_network\nll: v1.5\nopts: ", color = "0.61 0.6 0.85", style="rounded"];
31[label = "add_extra_components", color = "0.59 0.6 0.85", style="rounded"];
32[label = "build_hourly_heat_demand", color = "0.48 0.6 0.85", style="rounded"];
33[label = "build_daily_heat_demand\nscope: total", color = "0.12 0.6 0.85", style="rounded"];
34[label = "build_population_layouts", color = "0.62 0.6 0.85", style="rounded"];
35[label = "build_solar_thermal_profiles\nscope: total", color = "0.23 0.6 0.85", style="rounded"];
36[label = "retrieve_eurostat_data", color = "0.45 0.6 0.85", style="rounded"];
37[label = "build_population_weighted_energy_totals\nkind: energy", color = "0.22 0.6 0.85", style="rounded"];
38[label = "build_energy_totals", color = "0.65 0.6 0.85", style="rounded"];
39[label = "retrieve_eurostat_household_data", color = "0.36 0.6 0.85", style="rounded"];
40[label = "build_clustered_population_layouts", color = "0.02 0.6 0.85", style="rounded"];
41[label = "build_population_weighted_energy_totals\nkind: heat", color = "0.22 0.6 0.85", style="rounded"];
42[label = "build_heat_totals", color = "0.53 0.6 0.85", style="rounded"];
43[label = "build_shipping_demand", color = "0.17 0.6 0.85", style="rounded"];
44[label = "build_transport_demand", color = "0.49 0.6 0.85", style="rounded"];
45[label = "build_temperature_profiles\nscope: total", color = "0.32 0.6 0.85", style="rounded"];
46[label = "build_biomass_potentials\nplanning_horizons: 2030", color = "0.34 0.6 0.85", style="rounded"];
47[label = "build_salt_cavern_potentials", color = "0.55 0.6 0.85", style="rounded"];
48[label = "build_simplified_population_layouts", color = "0.46 0.6 0.85", style="rounded"];
49[label = "build_industrial_energy_demand_per_node", color = "0.14 0.6 0.85", style="rounded"];
50[label = "build_industry_sector_ratios_intermediate\nplanning_horizons: 2030", color = "0.27 0.6 0.85", style="rounded"];
51[label = "build_industry_sector_ratios", color = "0.11 0.6 0.85", style="rounded"];
52[label = "build_ammonia_production", color = "0.25 0.6 0.85", style="rounded"];
53[label = "build_industrial_energy_demand_per_country_today", color = "0.44 0.6 0.85", style="rounded"];
54[label = "build_industrial_production_per_country", color = "0.18 0.6 0.85", style="rounded"];
55[label = "build_industrial_production_per_node", color = "0.41 0.6 0.85", style="rounded"];
56[label = "build_industrial_distribution_key", color = "0.04 0.6 0.85", style="rounded"];
57[label = "build_industrial_production_per_country_tomorrow\nplanning_horizons: 2030", color = "0.09 0.6 0.85", style="rounded"];
58[label = "build_industrial_energy_demand_per_node_today", color = "0.46 0.6 0.85", style="rounded"];
59[label = "build_district_heat_share\nplanning_horizons: 2030", color = "0.39 0.6 0.85", style="rounded"];
60[label = "build_temperature_profiles\nscope: rural", color = "0.32 0.6 0.85", style="rounded"];
61[label = "build_temperature_profiles\nscope: urban", color = "0.32 0.6 0.85", style="rounded"];
62[label = "build_cop_profiles", color = "0.55 0.6 0.85", style="rounded"];
63[label = "build_solar_thermal_profiles\nscope: urban", color = "0.23 0.6 0.85", style="rounded"];
64[label = "build_solar_thermal_profiles\nscope: rural", color = "0.23 0.6 0.85", style="rounded"];
65[label = "plot_power_network_clustered", color = "0.41 0.6 0.85", style="rounded"];
66[label = "plot_power_network", color = "0.40 0.6 0.85", style="rounded"];
67[label = "plot_hydrogen_network", color = "0.42 0.6 0.85", style="rounded"];
68[label = "plot_gas_network", color = "0.32 0.6 0.85", style="rounded"];
3[label = "solve_sector_network", color = "0.42 0.6 0.85", style="rounded"];
4[label = "prepare_sector_network\nsector_opts: ", color = "0.45 0.6 0.85", style="rounded"];
5[label = "build_renewable_profiles\ntechnology: offwind-ac", color = "0.44 0.6 0.85", style="rounded"];
6[label = "base_network", color = "0.26 0.6 0.85", style="rounded"];
7[label = "retrieve_osm_prebuilt", color = "0.01 0.6 0.85", style="rounded"];
8[label = "build_shapes", color = "0.50 0.6 0.85", style="rounded"];
9[label = "retrieve_naturalearth_countries", color = "0.09 0.6 0.85", style="rounded"];
10[label = "retrieve_eez", color = "0.52 0.6 0.85", style="rounded"];
11[label = "retrieve_databundle", color = "0.00 0.6 0.85", style="rounded"];
12[label = "build_ship_raster", color = "0.29 0.6 0.85", style="rounded"];
13[label = "retrieve_ship_raster", color = "0.13 0.6 0.85", style="rounded"];
14[label = "retrieve_cutout\ncutout: be-03-2013-era5", color = "0.06 0.6 0.85", style="rounded"];
15[label = "build_renewable_profiles\ntechnology: offwind-dc", color = "0.44 0.6 0.85", style="rounded"];
16[label = "build_renewable_profiles\ntechnology: offwind-float", color = "0.44 0.6 0.85", style="rounded"];
17[label = "cluster_gas_network", color = "0.48 0.6 0.85", style="rounded"];
18[label = "build_gas_network", color = "0.59 0.6 0.85", style="rounded"];
19[label = "retrieve_gas_infrastructure_data", color = "0.14 0.6 0.85", style="rounded"];
20[label = "cluster_network\nclusters: 5", color = "0.08 0.6 0.85", style="rounded"];
21[label = "simplify_network\nsimpl: ", color = "0.25 0.6 0.85", style="rounded"];
22[label = "add_electricity", color = "0.46 0.6 0.85", style="rounded"];
23[label = "build_renewable_profiles\ntechnology: solar", color = "0.44 0.6 0.85", style="rounded"];
24[label = "build_renewable_profiles\ntechnology: solar-hsat", color = "0.44 0.6 0.85", style="rounded"];
25[label = "build_renewable_profiles\ntechnology: onwind", color = "0.44 0.6 0.85", style="rounded"];
26[label = "build_transmission_projects", color = "0.63 0.6 0.85", style="rounded"];
27[label = "retrieve_cost_data\nyear: 2030", color = "0.05 0.6 0.85", style="rounded"];
28[label = "build_powerplants", color = "0.43 0.6 0.85", style="rounded"];
29[label = "build_electricity_demand", color = "0.39 0.6 0.85", style="rounded"];
30[label = "retrieve_electricity_demand", color = "0.62 0.6 0.85", style="rounded"];
31[label = "retrieve_synthetic_electricity_demand", color = "0.31 0.6 0.85", style="rounded"];
32[label = "build_gas_input_locations", color = "0.45 0.6 0.85", style="rounded"];
33[label = "retrieve_gem_europe_gas_tracker", color = "0.33 0.6 0.85", style="rounded"];
34[label = "time_aggregation", color = "0.60 0.6 0.85", style="rounded"];
35[label = "prepare_network\nll: v1.5\nopts: ", color = "0.23 0.6 0.85", style="rounded"];
36[label = "add_extra_components", color = "0.36 0.6 0.85", style="rounded"];
37[label = "build_hourly_heat_demand", color = "0.15 0.6 0.85", style="rounded"];
38[label = "build_daily_heat_demand", color = "0.57 0.6 0.85", style="rounded"];
39[label = "build_population_layouts", color = "0.47 0.6 0.85", style="rounded"];
40[label = "retrieve_worldbank_urban_population", color = "0.19 0.6 0.85", style="rounded"];
41[label = "build_solar_thermal_profiles", color = "0.11 0.6 0.85", style="rounded"];
42[label = "retrieve_eurostat_data", color = "0.04 0.6 0.85", style="rounded"];
43[label = "build_population_weighted_energy_totals\nkind: energy", color = "0.04 0.6 0.85", style="rounded"];
44[label = "build_energy_totals", color = "0.30 0.6 0.85", style="rounded"];
45[label = "retrieve_jrc_idees", color = "0.02 0.6 0.85", style="rounded"];
46[label = "retrieve_eurostat_household_data", color = "0.49 0.6 0.85", style="rounded"];
47[label = "build_clustered_population_layouts", color = "0.19 0.6 0.85", style="rounded"];
48[label = "build_population_weighted_energy_totals\nkind: heat", color = "0.04 0.6 0.85", style="rounded"];
49[label = "build_heat_totals", color = "0.08 0.6 0.85", style="rounded"];
50[label = "build_shipping_demand", color = "0.52 0.6 0.85", style="rounded"];
51[label = "build_transport_demand", color = "0.16 0.6 0.85", style="rounded"];
52[label = "build_temperature_profiles", color = "0.58 0.6 0.85", style="rounded"];
53[label = "build_biomass_potentials\nplanning_horizons: 2030", color = "0.55 0.6 0.85", style="rounded"];
54[label = "build_salt_cavern_potentials", color = "0.28 0.6 0.85", style="rounded"];
55[label = "build_simplified_population_layouts", color = "0.14 0.6 0.85", style="rounded"];
56[label = "build_industrial_energy_demand_per_node", color = "0.24 0.6 0.85", style="rounded"];
57[label = "build_industry_sector_ratios_intermediate\nplanning_horizons: 2030", color = "0.60 0.6 0.85", style="rounded"];
58[label = "build_industry_sector_ratios", color = "0.26 0.6 0.85", style="rounded"];
59[label = "build_ammonia_production", color = "0.16 0.6 0.85", style="rounded"];
60[label = "build_industrial_energy_demand_per_country_today", color = "0.18 0.6 0.85", style="rounded"];
61[label = "build_industrial_production_per_country", color = "0.61 0.6 0.85", style="rounded"];
62[label = "build_industrial_production_per_node", color = "0.65 0.6 0.85", style="rounded"];
63[label = "build_industrial_distribution_key", color = "0.31 0.6 0.85", style="rounded"];
64[label = "retrieve_gem_steel_plant_tracker", color = "0.27 0.6 0.85", style="rounded"];
65[label = "build_industrial_production_per_country_tomorrow\nplanning_horizons: 2030", color = "0.09 0.6 0.85", style="rounded"];
66[label = "build_industrial_energy_demand_per_node_today", color = "0.40 0.6 0.85", style="rounded"];
67[label = "build_district_heat_share\nplanning_horizons: 2030", color = "0.07 0.6 0.85", style="rounded"];
68[label = "build_cop_profiles", color = "0.38 0.6 0.85", style="rounded"];
69[label = "build_central_heating_temperature_profiles", color = "0.55 0.6 0.85", style="rounded"];
70[label = "plot_power_network_clustered", color = "0.20 0.6 0.85", style="rounded"];
71[label = "plot_power_network", color = "0.53 0.6 0.85", style="rounded"];
72[label = "plot_hydrogen_network", color = "0.64 0.6 0.85", style="rounded"];
73[label = "plot_gas_network", color = "0.28 0.6 0.85", style="rounded"];
1 -> 0
2 -> 1
36 -> 1
8 -> 1
42 -> 1
11 -> 1
3 -> 2
23 -> 2
65 -> 2
66 -> 2
67 -> 2
68 -> 2
27 -> 2
70 -> 2
71 -> 2
72 -> 2
73 -> 2
4 -> 3
5 -> 4
12 -> 4
13 -> 4
14 -> 4
28 -> 4
29 -> 4
30 -> 4
36 -> 4
37 -> 4
41 -> 4
43 -> 4
44 -> 4
38 -> 4
8 -> 4
46 -> 4
23 -> 4
47 -> 4
18 -> 4
15 -> 4
16 -> 4
17 -> 4
40 -> 4
48 -> 4
49 -> 4
32 -> 4
59 -> 4
45 -> 4
60 -> 4
61 -> 4
62 -> 4
34 -> 4
35 -> 4
63 -> 4
64 -> 4
42 -> 4
43 -> 4
48 -> 4
50 -> 4
51 -> 4
44 -> 4
11 -> 4
53 -> 4
27 -> 4
54 -> 4
21 -> 4
20 -> 4
47 -> 4
55 -> 4
56 -> 4
37 -> 4
67 -> 4
52 -> 4
68 -> 4
41 -> 4
6 -> 5
8 -> 5
9 -> 5
7 -> 5
11 -> 5
12 -> 5
8 -> 5
14 -> 5
7 -> 6
8 -> 7
10 -> 9
11 -> 9
6 -> 12
8 -> 12
9 -> 12
7 -> 12
11 -> 12
6 -> 13
8 -> 13
9 -> 13
7 -> 13
11 -> 13
15 -> 14
17 -> 14
16 -> 15
8 -> 6
9 -> 8
10 -> 8
11 -> 8
13 -> 12
14 -> 12
6 -> 15
11 -> 15
12 -> 15
8 -> 15
14 -> 15
6 -> 16
11 -> 16
12 -> 16
8 -> 16
14 -> 16
18 -> 17
23 -> 17
20 -> 17
19 -> 18
23 -> 18
6 -> 18
20 -> 19
21 -> 19
22 -> 19
5 -> 19
12 -> 19
13 -> 19
6 -> 19
23 -> 19
24 -> 19
25 -> 19
7 -> 19
6 -> 20
8 -> 20
7 -> 20
11 -> 20
21 -> 20
27 -> 20
22 -> 21
27 -> 21
6 -> 21
8 -> 21
7 -> 21
11 -> 21
23 -> 22
24 -> 22
25 -> 22
5 -> 22
15 -> 22
16 -> 22
6 -> 22
26 -> 22
27 -> 22
28 -> 22
29 -> 22
8 -> 22
7 -> 22
11 -> 22
6 -> 23
11 -> 23
8 -> 23
14 -> 23
6 -> 24
26 -> 25
27 -> 25
16 -> 28
17 -> 28
11 -> 24
8 -> 24
14 -> 24
6 -> 25
11 -> 25
8 -> 25
14 -> 25
6 -> 26
8 -> 26
6 -> 28
30 -> 29
32 -> 29
35 -> 29
31 -> 30
23 -> 30
17 -> 31
23 -> 31
31 -> 29
33 -> 32
34 -> 33
17 -> 33
11 -> 33
7 -> 34
11 -> 34
34 -> 35
17 -> 35
11 -> 35
19 -> 32
20 -> 32
35 -> 34
37 -> 34
41 -> 34
36 -> 35
27 -> 35
20 -> 36
27 -> 36
38 -> 37
40 -> 37
7 -> 38
8 -> 38
36 -> 38
39 -> 38
34 -> 40
17 -> 40
11 -> 40
42 -> 41
40 -> 41
38 -> 42
7 -> 43
17 -> 43
38 -> 43
40 -> 44
37 -> 44
38 -> 44
20 -> 38
14 -> 38
8 -> 39
40 -> 39
14 -> 39
39 -> 41
20 -> 41
14 -> 41
44 -> 43
47 -> 43
8 -> 44
11 -> 44
45 -> 44
34 -> 45
17 -> 45
11 -> 45
8 -> 46
17 -> 46
7 -> 46
8 -> 47
17 -> 47
34 -> 48
18 -> 48
11 -> 48
50 -> 49
55 -> 49
58 -> 49
51 -> 50
53 -> 50
54 -> 50
42 -> 44
46 -> 44
39 -> 47
20 -> 47
14 -> 47
49 -> 48
47 -> 48
44 -> 49
8 -> 50
20 -> 50
44 -> 50
47 -> 51
43 -> 51
44 -> 51
11 -> 51
52 -> 51
8 -> 51
8 -> 52
39 -> 52
20 -> 52
14 -> 52
42 -> 53
11 -> 53
20 -> 53
8 -> 53
54 -> 53
52 -> 54
8 -> 54
36 -> 54
56 -> 55
57 -> 55
17 -> 56
40 -> 56
54 -> 57
56 -> 58
53 -> 58
38 -> 59
40 -> 59
34 -> 60
17 -> 60
11 -> 60
34 -> 61
17 -> 61
11 -> 61
45 -> 62
60 -> 62
61 -> 62
34 -> 63
17 -> 63
11 -> 63
34 -> 64
17 -> 64
11 -> 64
17 -> 65
3 -> 66
17 -> 66
3 -> 67
17 -> 67
3 -> 68
17 -> 68
11 -> 54
20 -> 54
39 -> 55
21 -> 55
14 -> 55
57 -> 56
62 -> 56
66 -> 56
58 -> 57
60 -> 57
61 -> 57
59 -> 58
45 -> 58
44 -> 60
45 -> 60
61 -> 60
59 -> 61
45 -> 61
42 -> 61
63 -> 62
65 -> 62
20 -> 63
47 -> 63
64 -> 63
61 -> 65
63 -> 66
60 -> 66
44 -> 67
47 -> 67
69 -> 68
52 -> 68
20 -> 68
52 -> 69
20 -> 69
20 -> 70
3 -> 71
20 -> 71
3 -> 72
20 -> 72
3 -> 73
20 -> 73
}
|

View File

@ -2,468 +2,9 @@
#
# SPDX-License-Identifier: CC0-1.0
name: pypsa-eur
name: pypsa-eur-20240812
channels:
- http://conda.anaconda.org/gurobi
- conda-forge
- bioconda
- gurobi
- defaults
dependencies:
- _libgcc_mutex=0.1
- _openmp_mutex=4.5
- affine=2.4.0
- alsa-lib=1.2.11
- ampl-mp=3.1.0
- amply=0.1.6
- appdirs=1.4.4
- argparse-dataclass=2.0.0
- asttokens=2.4.1
- atk-1.0=2.38.0
- atlite=0.2.12
- attr=2.5.1
- attrs=23.2.0
- aws-c-auth=0.7.22
- aws-c-cal=0.6.14
- aws-c-common=0.9.19
- aws-c-compression=0.2.18
- aws-c-event-stream=0.4.2
- aws-c-http=0.8.1
- aws-c-io=0.14.8
- aws-c-mqtt=0.10.4
- aws-c-s3=0.5.9
- aws-c-sdkutils=0.1.16
- aws-checksums=0.1.18
- aws-crt-cpp=0.26.9
- aws-sdk-cpp=1.11.329
- azure-core-cpp=1.11.1
- azure-identity-cpp=1.6.0
- azure-storage-blobs-cpp=12.10.0
- azure-storage-common-cpp=12.5.0
- beautifulsoup4=4.12.3
- blosc=1.21.5
- bokeh=3.4.1
- bottleneck=1.3.8
- branca=0.7.2
- brotli=1.1.0
- brotli-bin=1.1.0
- brotli-python=1.1.0
- bzip2=1.0.8
- c-ares=1.28.1
- c-blosc2=2.14.4
- ca-certificates=2024.2.2
- cads-api-client=1.0.3
- cairo=1.18.0
- cartopy=0.23.0
- cdsapi=0.7.0
- certifi=2024.2.2
- cffi=1.16.0
- cfgv=3.3.1
- cfitsio=4.4.0
- cftime=1.6.3
- charset-normalizer=3.3.2
- click=8.1.7
- click-plugins=1.1.1
- cligj=0.7.2
- cloudpickle=3.0.0
- coin-or-cbc=2.10.10
- coin-or-cgl=0.60.7
- coin-or-clp=1.17.8
- coin-or-osi=0.108.10
- coin-or-utils=2.11.11
- coincbc=2.10.10
- colorama=0.4.6
- conda-inject=1.3.1
- configargparse=1.7
- connection_pool=0.0.3
- contourpy=1.2.1
- country_converter=1.2
- cppad=20240000.4
- cycler=0.12.1
- cytoolz=0.12.3
- dask=2024.5.1
- dask-core=2024.5.1
- dask-expr=1.1.1
- datrie=0.8.2
- dbus=1.13.6
- decorator=5.1.1
- deprecation=2.1.0
- descartes=1.1.0
- distlib=0.3.8
- distributed=2024.5.1
- distro=1.9.0
- docutils=0.21.2
- dpath=2.1.6
- entsoe-py=0.6.7
- et_xmlfile=1.1.0
- exceptiongroup=1.2.0
- executing=2.0.1
- expat=2.6.2
- filelock=3.14.0
- fiona=1.9.6
- fmt=10.2.1
- folium=0.16.0
- font-ttf-dejavu-sans-mono=2.37
- font-ttf-inconsolata=3.000
- font-ttf-source-code-pro=2.038
- font-ttf-ubuntu=0.83
- fontconfig=2.14.2
- fonts-conda-ecosystem=1
- fonts-conda-forge=1
- fonttools=4.52.1
- freetype=2.12.1
- freexl=2.0.0
- fribidi=1.0.10
- fsspec=2024.5.0
- gdal=3.8.5
- gdk-pixbuf=2.42.12
- geographiclib=2.0
- geojson-rewind=1.1.0
- geopandas=0.14.4
- geopandas-base=0.14.4
- geopy=2.4.1
- geos=3.12.1
- geotiff=1.7.3
- gettext=0.22.5
- gettext-tools=0.22.5
- gflags=2.2.2
- giflib=5.2.2
- gitdb=4.0.11
- gitpython=3.1.43
- glib=2.80.2
- glib-tools=2.80.2
- glog=0.7.0
- glpk=5.0
- gmp=6.3.0
- graphite2=1.3.13
- graphviz=11.0.0
- gst-plugins-base=1.24.3
- gstreamer=1.24.3
- gtk2=2.24.33
- gts=0.7.6
- gurobi=11.0.2
- harfbuzz=8.5.0
- hdf4=4.2.15
- hdf5=1.14.3
- humanfriendly=10.0
- icu=73.2
- identify=2.5.36
- idna=3.7
- immutables=0.20
- importlib-metadata=7.1.0
- importlib_metadata=7.1.0
- importlib_resources=6.4.0
- iniconfig=2.0.0
- ipopt=3.14.16
- ipython=8.24.0
- jedi=0.19.1
- jinja2=3.1.4
- joblib=1.4.2
- json-c=0.17
- jsonschema=4.22.0
- jsonschema-specifications=2023.12.1
- jupyter_core=5.7.2
- kealib=1.5.3
- keyutils=1.6.1
- kiwisolver=1.4.5
- krb5=1.21.2
- lame=3.100
- lcms2=2.16
- ld_impl_linux-64=2.40
- lerc=4.0.0
- libabseil=20240116.2
- libaec=1.1.3
- libarchive=3.7.4
- libarrow=16.1.0
- libarrow-acero=16.1.0
- libarrow-dataset=16.1.0
- libarrow-substrait=16.1.0
- libasprintf=0.22.5
- libasprintf-devel=0.22.5
- libblas=3.9.0
- libboost-headers=1.85.0
- libbrotlicommon=1.1.0
- libbrotlidec=1.1.0
- libbrotlienc=1.1.0
- libcap=2.69
- libcblas=3.9.0
- libclang-cpp15=15.0.7
- libclang13=18.1.5
- libcrc32c=1.1.2
- libcups=2.3.3
- libcurl=8.8.0
- libdeflate=1.20
- libedit=3.1.20191231
- libev=4.33
- libevent=2.1.12
- libexpat=2.6.2
- libffi=3.4.2
- libflac=1.4.3
- libgcc-ng=13.2.0
- libgcrypt=1.10.3
- libgd=2.3.3
- libgdal=3.8.5
- libgettextpo=0.22.5
- libgettextpo-devel=0.22.5
- libgfortran-ng=13.2.0
- libgfortran5=13.2.0
- libglib=2.80.2
- libgomp=13.2.0
- libgoogle-cloud=2.24.0
- libgoogle-cloud-storage=2.24.0
- libgpg-error=1.49
- libgrpc=1.62.2
- libhwloc=2.9.3
- libiconv=1.17
- libjpeg-turbo=3.0.0
- libkml=1.3.0
- liblapack=3.9.0
- liblapacke=3.9.0
- libllvm15=15.0.7
- libllvm18=18.1.6
- libnetcdf=4.9.2
- libnghttp2=1.58.0
- libnsl=2.0.1
- libogg=1.3.4
- libopenblas=0.3.27
- libopus=1.3.1
- libparquet=16.1.0
- libpng=1.6.43
- libpq=16.3
- libprotobuf=4.25.3
- libre2-11=2023.09.01
- librsvg=2.58.0
- librttopo=1.1.0
- libscotch=7.0.4
- libsndfile=1.2.2
- libspatialindex=1.9.3
- libspatialite=5.1.0
- libspral=2024.01.18
- libsqlite=3.45.3
- libssh2=1.11.0
- libstdcxx-ng=13.2.0
- libsystemd0=255
- libthrift=0.19.0
- libtiff=4.6.0
- libutf8proc=2.8.0
- libuuid=2.38.1
- libvorbis=1.3.7
- libwebp=1.4.0
- libwebp-base=1.4.0
- libxcb=1.15
- libxcrypt=4.4.36
- libxkbcommon=1.7.0
- libxml2=2.12.7
- libxslt=1.1.39
- libzip=1.10.1
- libzlib=1.2.13
- linopy=0.3.9
- locket=1.0.0
- lxml=5.2.2
- lz4=4.3.3
- lz4-c=1.9.4
- lzo=2.10
- mapclassify=2.6.1
- markupsafe=2.1.5
- matplotlib=3.8.4
- matplotlib-base=3.8.4
- matplotlib-inline=0.1.7
- memory_profiler=0.61.0
- metis=5.1.0
- minizip=4.0.5
- mpfr=4.2.1
- mpg123=1.32.6
- msgpack-python=1.0.8
- multiurl=0.3.1
- mumps-include=5.7.1
- mumps-seq=5.7.1
- munkres=1.1.4
- mysql-common=8.3.0
- mysql-libs=8.3.0
- nbformat=5.10.4
- ncurses=6.5
- netcdf4=1.6.5
- networkx=3.3
- nodeenv=1.8.0
- nomkl=1.0
- nspr=4.35
- nss=3.100
- numexpr=2.9.0
- numpy=1.26.4
- openjdk=22.0.1
- openjpeg=2.5.2
- openpyxl=3.1.2
- openssl=3.3.0
- orc=2.0.1
- packaging=24.0
- pandas=2.2.2
- pango=1.52.2
- parso=0.8.4
- partd=1.4.2
- patsy=0.5.6
- pcre2=10.43
- pexpect=4.9.0
- pickleshare=0.7.5
- pillow=10.3.0
- pip=24.0
- pixman=0.43.2
- pkgutil-resolve-name=1.3.10
- plac=1.4.3
- platformdirs=4.2.2
- pluggy=1.5.0
- ply=3.11
- poppler=24.04.0
- poppler-data=0.4.12
- postgresql=16.3
- powerplantmatching=0.5.15
- pre-commit=3.7.1
- progressbar2=4.4.2
- proj=9.4.0
- prompt-toolkit=3.0.42
- psutil=5.9.8
- pthread-stubs=0.4
- ptyprocess=0.7.0
- pulp=2.8.0
- pulseaudio-client=17.0
- pure_eval=0.2.2
- py-cpuinfo=9.0.0
- pyarrow=16.1.0
- pyarrow-core=16.1.0
- pyarrow-hotfix=0.6
- pycountry=22.3.5
- pycparser=2.22
- pygments=2.18.0
- pyomo=6.6.1
- pyparsing=3.1.2
- pyproj=3.6.1
- pypsa=0.29.0
- pyqt=5.15.9
- pyqt5-sip=12.12.2
- pyscipopt=5.0.1
- pyshp=2.3.1
- pysocks=1.7.1
- pytables=3.9.2
- pytest=8.2.1
- python=3.11.9
- python-dateutil=2.9.0
- python-fastjsonschema=2.19.1
- python-tzdata=2024.1
- python-utils=3.8.2
- python_abi=3.11
- pytz=2024.1
- pyxlsb=1.0.10
- pyyaml=6.0.1
- qt-main=5.15.8
- rasterio=1.3.10
- re2=2023.09.01
- readline=8.2
- referencing=0.35.1
- requests=2.32.2
- reretry=0.11.8
- rioxarray=0.15.5
- rpds-py=0.18.1
- rtree=1.2.0
- s2n=1.4.15
- scikit-learn=1.5.0
- scip=9.0.1
- scipy=1.13.1
- scotch=7.0.4
- seaborn=0.13.2
- seaborn-base=0.13.2
- setuptools=70.0.0
- setuptools-scm=8.1.0
- setuptools_scm=8.1.0
- shapely=2.0.4
- sip=6.7.12
- six=1.16.0
- smart_open=7.0.4
- smmap=5.0.0
- snakemake-interface-common=1.17.2
- snakemake-interface-executor-plugins=9.1.1
- snakemake-interface-report-plugins=1.0.0
- snakemake-interface-storage-plugins=3.2.2
- snakemake-minimal=8.11.6
- snappy=1.2.0
- snuggs=1.4.7
- sortedcontainers=2.4.0
- soupsieve=2.5
- spdlog=1.13.0
- sqlite=3.45.3
- stack_data=0.6.2
- statsmodels=0.14.2
- stopit=1.1.2
- jpype1=1.5.0
- tabulate=0.9.0
- tbb=2021.11.0
- tblib=3.0.0
- threadpoolctl=3.5.0
- throttler=1.2.2
- tiledb=2.23.0
- tk=8.6.13
- toml=0.10.2
- tomli=2.0.1
- toolz=0.12.1
- toposort=1.10
- tornado=6.4
- tqdm=4.66.4
- traitlets=5.14.3
- typing-extensions=4.11.0
- typing_extensions=4.11.0
- tzcode=2024a
- tzdata=2024a
- ukkonen=1.0.1
- unidecode=1.3.8
- unixodbc=2.3.12
- uriparser=0.9.8
- urllib3=2.2.1
- validators=0.28.2
- virtualenv=20.26.2
- wcwidth=0.2.13
- wheel=0.43.0
- wrapt=1.16.0
- xarray=2024.5.0
- xcb-util=0.4.0
- xcb-util-image=0.4.0
- xcb-util-keysyms=0.4.0
- xcb-util-renderutil=0.3.9
- xcb-util-wm=0.4.1
- xerces-c=3.2.5
- xkeyboard-config=2.41
- xlrd=2.0.1
- xorg-fixesproto=5.0
- xorg-inputproto=2.3.2
- xorg-kbproto=1.0.7
- xorg-libice=1.1.1
- xorg-libsm=1.2.4
- xorg-libx11=1.8.9
- xorg-libxau=1.0.11
- xorg-libxdmcp=1.1.3
- xorg-libxext=1.3.4
- xorg-libxfixes=5.0.3
- xorg-libxi=1.7.10
- xorg-libxrender=0.9.11
- xorg-libxt=1.3.0
- xorg-libxtst=1.2.3
- xorg-recordproto=1.14.2
- xorg-renderproto=0.11.1
- xorg-xextproto=7.3.0
- xorg-xf86vidmodeproto=2.3.1
- xorg-xproto=7.0.31
- xyzservices=2024.4.0
- xz=5.2.6
- yaml=0.2.5
- yte=1.5.4
- zict=3.0.0
- zipp=3.17.0
- zlib=1.2.13
- zlib-ng=2.0.7
- zstd=1.5.6
- pip:
- highspy==1.5.3
- oauthlib==3.2.2
- requests-oauthlib==1.3.1
- snakemake-executor-plugin-cluster-generic==1.0.9
- snakemake-executor-plugin-slurm==0.5.1
- snakemake-executor-plugin-slurm-jobstep==0.2.1
- snakemake-storage-plugin-http==0.2.3
- tsam==2.3.1
- tabula-py=2.9.3
prefix: /home/fneum/miniconda3/envs/pypsa-eur-20240812

79
rules/build_sector.smk Normal file → Executable file
View File

@ -212,17 +212,72 @@ rule build_temperature_profiles:
"../scripts/build_temperature_profiles.py"
rule build_central_heating_temperature_profiles:
params:
max_forward_temperature_central_heating=config_provider(
"sector",
"district_heating",
"supply_temperature_approximation",
"max_forward_temperature",
),
min_forward_temperature_central_heating=config_provider(
"sector",
"district_heating",
"supply_temperature_approximation",
"min_forward_temperature",
),
return_temperature_central_heating=config_provider(
"sector",
"district_heating",
"supply_temperature_approximation",
"return_temperature",
),
snapshots=config_provider("snapshots"),
lower_threshold_ambient_temperature=config_provider(
"sector",
"district_heating",
"supply_temperature_approximation",
"lower_threshold_ambient_temperature",
),
upper_threshold_ambient_temperature=config_provider(
"sector",
"district_heating",
"supply_temperature_approximation",
"upper_threshold_ambient_temperature",
),
rolling_window_ambient_temperature=config_provider(
"sector",
"district_heating",
"supply_temperature_approximation",
"rolling_window_ambient_temperature",
),
input:
temp_air_total=resources("temp_air_total_elec_s{simpl}_{clusters}.nc"),
regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"),
output:
central_heating_forward_temperature_profiles=resources(
"central_heating_forward_temperature_profiles_elec_s{simpl}_{clusters}.nc"
),
central_heating_return_temperature_profiles=resources(
"central_heating_return_temperature_profiles_elec_s{simpl}_{clusters}.nc"
),
resources:
mem_mb=20000,
log:
logs("build_central_heating_temperature_profiles_s{simpl}_{clusters}.log"),
benchmark:
benchmarks("build_central_heating_temperature_profiles/s{simpl}_{clusters}")
conda:
"../envs/environment.yaml"
script:
"../scripts/build_central_heating_temperature_profiles/run.py"
rule build_cop_profiles:
params:
heat_pump_sink_T_decentral_heating=config_provider(
"sector", "heat_pump_sink_T_individual_heating"
),
forward_temperature_central_heating=config_provider(
"sector", "district_heating", "forward_temperature"
),
return_temperature_central_heating=config_provider(
"sector", "district_heating", "return_temperature"
),
heat_source_cooling_central_heating=config_provider(
"sector", "district_heating", "heat_source_cooling"
),
@ -232,6 +287,12 @@ rule build_cop_profiles:
heat_pump_sources=config_provider("sector", "heat_pump_sources"),
snapshots=config_provider("snapshots"),
input:
central_heating_forward_temperature_profiles=resources(
"central_heating_forward_temperature_profiles_elec_s{simpl}_{clusters}.nc"
),
central_heating_return_temperature_profiles=resources(
"central_heating_return_temperature_profiles_elec_s{simpl}_{clusters}.nc"
),
temp_soil_total=resources("temp_soil_total_elec_s{simpl}_{clusters}.nc"),
temp_air_total=resources("temp_air_total_elec_s{simpl}_{clusters}.nc"),
regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"),
@ -576,10 +637,14 @@ rule build_industrial_distribution_key:
input:
regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"),
clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"),
hotmaps_industrial_database=storage(
hotmaps=storage(
"https://gitlab.com/hotmaps/industrial_sites/industrial_sites_Industrial_Database/-/raw/master/data/Industrial_Database.csv",
keep_local=True,
),
gem_gspt="data/gem/Global-Steel-Plant-Tracker-April-2024-Standard-Copy-V1.xlsx",
ammonia="data/ammonia_plants.csv",
cement_supplement="data/cement-plants-noneu.csv",
refineries_supplement="data/refineries-noneu.csv",
output:
industrial_distribution_key=resources(
"industrial_distribution_key_elec_s{simpl}_{clusters}.csv"

View File

@ -312,10 +312,25 @@ if config["enable"]["retrieve"]:
run:
import requests
response = requests.get(
"https://globalenergymonitor.org/wp-content/uploads/2024/05/Europe-Gas-Tracker-2024-05.xlsx",
headers={"User-Agent": "Mozilla/5.0"},
)
# mirror of https://globalenergymonitor.org/wp-content/uploads/2024/05/Europe-Gas-Tracker-2024-05.xlsx
url = "https://tubcloud.tu-berlin.de/s/LMBJQCsN6Ez5cN2/download/Europe-Gas-Tracker-2024-05.xlsx"
response = requests.get(url)
with open(output[0], "wb") as f:
f.write(response.content)
if config["enable"]["retrieve"]:
rule retrieve_gem_steel_plant_tracker:
output:
"data/gem/Global-Steel-Plant-Tracker-April-2024-Standard-Copy-V1.xlsx",
run:
import requests
# mirror or https://globalenergymonitor.org/wp-content/uploads/2024/04/Global-Steel-Plant-Tracker-April-2024-Standard-Copy-V1.xlsx
url = "https://tubcloud.tu-berlin.de/s/Aqebo3rrQZWKGsG/download/Global-Steel-Plant-Tracker-April-2024-Standard-Copy-V1.xlsx"
response = requests.get(url)
with open(output[0], "wb") as f:
f.write(response.content)

View File

@ -41,6 +41,13 @@ rule solve_network:
rule solve_operations_network:
params:
options=config_provider("solving", "options"),
solving=config_provider("solving"),
foresight=config_provider("foresight"),
planning_horizons=config_provider("scenario", "planning_horizons"),
co2_sequestration_potential=config_provider(
"sector", "co2_sequestration_potential", default=200
),
custom_extra_functionality=input_custom_extra_functionality,
input:
network=RESULTS + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc",
output:

View File

@ -507,7 +507,8 @@ def generate_periodic_profiles(dt_index, nodes, weekly_profile, localize=None):
week_df = pd.DataFrame(index=dt_index, columns=nodes)
for node in nodes:
timezone = pytz.timezone(pytz.country_timezones[node[:2]][0])
ct = node[:2] if node[:2] != "XK" else "RS"
timezone = pytz.timezone(pytz.country_timezones[ct][0])
tz_dt_index = dt_index.tz_convert(timezone)
week_df[node] = [24 * dt.weekday() + dt.hour for dt in tz_dt_index]
week_df[node] = week_df[node].map(weekly_profile)

20
scripts/build_biomass_potentials.py Normal file → Executable file
View File

@ -88,9 +88,11 @@ def build_nuts_population_data(year=2013):
pop = pd.concat([pop, pd.concat(swiss)]).to_frame("total")
# add missing manually
pop["AL"] = 2893
pop["BA"] = 3871
pop["RS"] = 7210
pop["AL"] = 2778
pop["BA"] = 3234
pop["RS"] = 6664
pop["ME"] = 617
pop["XK"] = 1587
pop["ct"] = pop.index.str[:2]
@ -149,10 +151,6 @@ def enspreso_biomass_potentials(year=2020, scenario="ENS_Low"):
bio = dff.groupby(["NUTS2", "commodity"]).potential.sum().unstack()
# currently Serbia and Kosovo not split, so aggregate
bio.loc["RS"] += bio.loc["XK"]
bio.drop("XK", inplace=True)
return bio
@ -199,7 +197,7 @@ def build_nuts2_shapes():
)
countries = gpd.read_file(snakemake.input.country_shapes).set_index("name")
missing_iso2 = countries.index.intersection(["AL", "RS", "BA"])
missing_iso2 = countries.index.intersection(["AL", "RS", "XK", "BA"])
missing = countries.loc[missing_iso2]
nuts2.rename(index={"ME00": "ME", "MK00": "MK"}, inplace=True)
@ -332,7 +330,7 @@ def add_unsustainable_potentials(df):
)
share_sus = params.get("share_sustainable_potential_available").get(investment_year)
df *= share_sus
df.loc[df_wo_ch.index] *= share_sus
df = df.join(df_wo_ch.filter(like="unsustainable")).fillna(0)
@ -347,8 +345,8 @@ if __name__ == "__main__":
snakemake = mock_snakemake(
"build_biomass_potentials",
simpl="",
clusters="37",
planning_horizons=2020,
clusters="38",
planning_horizons=2050,
)
configure_logging(snakemake)

View File

@ -0,0 +1,227 @@
# -*- coding: utf-8 -*-
# SPDX-FileCopyrightText: : 2020-2024 The PyPSA-Eur Authors
#
# SPDX-License-Identifier: MIT
import pandas as pd
import xarray as xr
class CentralHeatingTemperatureApproximator:
"""
A class to approximate central heating temperatures based on ambient
temperature.
Attributes
----------
ambient_temperature : xr.DataArray
The ambient temperature data.
max_forward_temperature : xr.DataArray
The maximum forward temperature.
min_forward_temperature : xr.DataArray
The minimum forward temperature.
fixed_return_temperature : xr.DataArray
The fixed return temperature.
lower_threshold_ambient_temperature : float
Forward temperature is `max_forward_temperature` for ambient temperatures lower-or-equal this threshold.
upper_threshold_ambient_temperature : float
Forward temperature is `min_forward_temperature` for ambient temperatures higher-or-equal this threshold.
"""
def __init__(
self,
ambient_temperature: xr.DataArray,
max_forward_temperature: float,
min_forward_temperature: float,
fixed_return_temperature: float,
lower_threshold_ambient_temperature: float,
upper_threshold_ambient_temperature: float,
rolling_window_ambient_temperature: int,
) -> None:
"""
Initialize the CentralHeatingTemperatureApproximator.
Parameters
----------
ambient_temperature : xr.DataArray
The ambient temperature data.
max_forward_temperature : xr.DataArray
The maximum forward temperature.
min_forward_temperature : xr.DataArray
The minimum forward temperature.
fixed_return_temperature : xr.DataArray
The fixed return temperature.
lower_threshold_ambient_temperature : float
Forward temperature is `max_forward_temperature` for ambient temperatures lower-or-equal this threshold.
upper_threshold_ambient_temperature : float
Forward temperature is `min_forward_temperature` for ambient temperatures higher-or-equal this threshold.
rolling_window_ambient_temperature : int
Rolling window size for averaging ambient temperature.
"""
if any(max_forward_temperature < min_forward_temperature):
raise ValueError(
"max_forward_temperature must be greater than min_forward_temperature"
)
if any(min_forward_temperature < fixed_return_temperature):
raise ValueError(
"min_forward_temperature must be greater than fixed_return_temperature"
)
self._ambient_temperature = ambient_temperature
self.max_forward_temperature = max_forward_temperature
self.min_forward_temperature = min_forward_temperature
self.fixed_return_temperature = fixed_return_temperature
self.lower_threshold_ambient_temperature = lower_threshold_ambient_temperature
self.upper_threshold_ambient_temperature = upper_threshold_ambient_temperature
self.rolling_window_ambient_temperature = rolling_window_ambient_temperature
def ambient_temperature_rolling_mean(self) -> xr.DataArray:
"""
Property to get ambient temperature.
Returns
-------
xr.DataArray
Rolling mean of ambient temperature input.
"""
# bfill to avoid NAs in the beginning
return (
self._ambient_temperature.rolling(
time=self.rolling_window_ambient_temperature
)
.mean(skip_na=True)
.bfill(dim="time")
)
@property
def forward_temperature(self) -> xr.DataArray:
"""
Property to get dynamic forward temperature.
Returns
-------
xr.DataArray
Dynamic forward temperatures
"""
return self._approximate_forward_temperature()
@property
def return_temperature(self) -> float:
"""
Property to get return temperature.
Returns
-------
float
Return temperature.
"""
return self._approximate_return_temperature()
def _approximate_forward_temperature(self) -> xr.DataArray:
"""
Approximate dynamic forward temperature based on reference curve. Adapted from [Pieper et al. (2019)](https://doi.org/10.1016/j.energy.2019.03.165).
Returns
-------
xr.DataArray
Dynamic forward temperatures.
"""
forward_temperature = xr.where(
self.ambient_temperature_rolling_mean()
<= self.lower_threshold_ambient_temperature,
self.max_forward_temperature,
xr.where(
self.ambient_temperature_rolling_mean()
>= self.upper_threshold_ambient_temperature,
self.min_forward_temperature,
self.min_forward_temperature
+ (self.max_forward_temperature - self.min_forward_temperature)
* (
self.upper_threshold_ambient_temperature
- self.ambient_temperature_rolling_mean()
)
/ (
self.upper_threshold_ambient_temperature
- self.lower_threshold_ambient_temperature
),
),
)
return forward_temperature
def _approximate_return_temperature(self) -> float:
"""
Approximate return temperature.
Returns
-------
float
Return temperature.
"""
return self.fixed_return_temperature
@property
def forward_temperature(self) -> xr.DataArray:
"""
Property to get dynamic forward temperature.
Returns
-------
xr.DataArray
Dynamic forward temperatures.
"""
return self._approximate_forward_temperature()
@property
def return_temperature(self) -> float:
"""
Property to get return temperature.
Returns
-------
float
Return temperature.
"""
return self._approximate_return_temperature()
def _approximate_forward_temperature(self) -> xr.DataArray:
"""
Approximate dynamic forward temperature.
Returns
-------
xr.DataArray
Dynamic forward temperatures.
"""
forward_temperature = xr.where(
self.ambient_temperature_rolling_mean()
<= self.lower_threshold_ambient_temperature,
self.max_forward_temperature,
xr.where(
self.ambient_temperature_rolling_mean()
>= self.upper_threshold_ambient_temperature,
self.min_forward_temperature,
self.min_forward_temperature
+ (self.max_forward_temperature - self.min_forward_temperature)
* (
self.upper_threshold_ambient_temperature
- self.ambient_temperature_rolling_mean()
)
/ (
self.upper_threshold_ambient_temperature
- self.lower_threshold_ambient_temperature
),
),
)
return forward_temperature
def _approximate_return_temperature(self) -> float:
"""
Approximate return temperature.
Returns
-------
float
Return temperature.
"""
return self.fixed_return_temperature

View File

@ -0,0 +1,192 @@
# -*- coding: utf-8 -*-
# SPDX-FileCopyrightText: : 2020-2024 The PyPSA-Eur Authors
#
# SPDX-License-Identifier: MIT
"""
Approximate district heating forward and return temperature profiles based on
ambient temperature. The method is based on a reference curve from Pieper et
al. 2019, where for ambient temperatures below 0C, the highest possible forward
temperature is assumed and vice versa for temperatures above 10C. Between these
threshold levels, forward temperatures are linearly interpolated.
By default, `max_forward_temperature` from Euroheat DHC Market Outlook 2024 is used; `min_forward_temperature` and `return_temperature` for Germany is used from AGFW-Hauptbericht 2022.
`min_forward_temperature` and `return_temperature` for other countries are extrapolated based on the ratio between `max_forward_temperature` and `min_forward_temperature` and `return_temperature` for those countries not missing (by default only Germany).
Relevant Settings
-----------------
.. code:: yaml
sector:
district_heating:
max_forward_temperature:
min_forward_temperature:
return_temperature:
Inputs
------
- `resources/<run_name>/temp_air_total`: Air temperature
Outputs
-------
- `resources/<run_name>/central_heating_temperature_profiles.nc`:
References
----------
- Pieper, et al. (2019): "Assessment of a combination of three heat sources for heat pumps to supply district heating" (https://doi.org/10.1016/j.energy.2019.03.165).
- AGFW (2022): "Hauptbericht 2022" (https://www.agfw.de/zahlen-und-statistiken/agfw-hauptbericht)
"""
import sys
import geopandas as gpd
import numpy as np
import pandas as pd
import xarray as xr
from _helpers import set_scenario_config
from central_heating_temperature_approximator import (
CentralHeatingTemperatureApproximator,
)
def extrapolate_missing_supply_temperatures_by_country(
extrapolate_from: dict, extrapolate_to: dict
) -> xr.DataArray:
"""
Extrapolates missing supply temperatures by country.
Parameters:
extrapolate_from (dict): A dictionary containing supply temperatures to extrapolate from. Should contain all countries.
extrapolate_to (dict): A dictionary containing supply temperatures to extrapolate to. Where `country` is present, average ratio between `extrapolate_to[country]` and `extrapolate_from[country]` is applied to all countries for which `country` is not present in `extrapolate_from.keys()` to infer ratio for extrapolation.
Returns:
xr.DataArray: A DataArray containing the extrapolated supply temperatures.
"""
if not all([key in extrapolate_from.keys() for key in extrapolate_to.keys()]):
raise ValueError(
"Not all countries in extrapolate_to are present in extrapolate_from."
)
# average ratio between extrapolate_from and extrapolate_to for those countries that are in both dictionaries
extrapolation_ratio = np.mean(
[extrapolate_to[key] / extrapolate_from[key] for key in extrapolate_to.keys()]
)
# apply extrapolation ratio to all keys missing in extrapolate_to
return {
key: (
extrapolate_to[key]
if key in extrapolate_to.keys()
else extrapolate_from[key] * extrapolation_ratio
)
for key in extrapolate_from.keys()
}
def get_country_from_node_name(node_name: str) -> str:
"""
Extracts the country code from a given node name.
Parameters:
node_name (str): The name of the node.
Returns:
str: The country code extracted from the node name.
"""
return node_name[:2]
def map_temperature_dict_to_onshore_regions(
supply_temperature_by_country: dict,
regions_onshore: pd.Index,
) -> xr.DataArray:
"""
Map dictionary of temperatures to onshore regions.
Missing values are replaced by the mean of all values.
Parameters:
----------
supply_temperature_by_country : dictionary
Dictionary with temperatures as values and country keys as keys.
regions_onshore : pd.Index
Names of onshore regions
Returns:
-------
xr.DataArray
The dictionary values mapped to onshore regions with onshore regions as coordinates.
"""
return xr.DataArray(
[
(
supply_temperature_by_country[get_country_from_node_name(node_name)]
if get_country_from_node_name(node_name)
in supply_temperature_by_country.keys()
else np.mean(list(supply_temperature_by_country.values()))
)
for node_name in regions_onshore.values
],
dims=["name"],
coords={"name": regions_onshore},
)
if __name__ == "__main__":
if "snakemake" not in globals():
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_cop_profiles",
simpl="",
clusters=48,
)
set_scenario_config(snakemake)
max_forward_temperature = snakemake.params.max_forward_temperature_central_heating
min_forward_temperature = extrapolate_missing_supply_temperatures_by_country(
extrapolate_from=max_forward_temperature,
extrapolate_to=snakemake.params.min_forward_temperature_central_heating,
)
return_temperature = extrapolate_missing_supply_temperatures_by_country(
extrapolate_from=max_forward_temperature,
extrapolate_to=snakemake.params.return_temperature_central_heating,
)
# map forward and return temperatures specified on country-level to onshore regions
regions_onshore = gpd.read_file(snakemake.input.regions_onshore)["name"]
snapshots = pd.date_range(freq="h", **snakemake.params.snapshots)
max_forward_temperature_central_heating_by_node_and_time: xr.DataArray = (
map_temperature_dict_to_onshore_regions(
supply_temperature_by_country=max_forward_temperature,
regions_onshore=regions_onshore,
)
)
min_forward_temperature_central_heating_by_node_and_time: xr.DataArray = (
map_temperature_dict_to_onshore_regions(
supply_temperature_by_country=min_forward_temperature,
regions_onshore=regions_onshore,
)
)
return_temperature_central_heating_by_node_and_time: xr.DataArray = (
map_temperature_dict_to_onshore_regions(
supply_temperature_by_country=return_temperature,
regions_onshore=regions_onshore,
)
)
central_heating_temperature_approximator = CentralHeatingTemperatureApproximator(
ambient_temperature=xr.open_dataarray(snakemake.input.temp_air_total),
max_forward_temperature=max_forward_temperature_central_heating_by_node_and_time,
min_forward_temperature=min_forward_temperature_central_heating_by_node_and_time,
fixed_return_temperature=return_temperature_central_heating_by_node_and_time,
lower_threshold_ambient_temperature=snakemake.params.lower_threshold_ambient_temperature,
upper_threshold_ambient_temperature=snakemake.params.upper_threshold_ambient_temperature,
rolling_window_ambient_temperature=snakemake.params.rolling_window_ambient_temperature,
)
central_heating_temperature_approximator.forward_temperature.to_netcdf(
snakemake.output.central_heating_forward_temperature_profiles
)
central_heating_temperature_approximator.return_temperature.to_netcdf(
snakemake.output.central_heating_return_temperature_profiles
)

View File

@ -53,47 +53,6 @@ from DecentralHeatingCopApproximator import DecentralHeatingCopApproximator
from scripts.definitions.heat_system_type import HeatSystemType
def map_temperature_dict_to_onshore_regions(
supply_temperature_by_country: dict,
regions_onshore: pd.Index,
snapshots: pd.DatetimeIndex,
) -> xr.DataArray:
"""
Map dictionary of temperatures to onshore regions.
Parameters:
----------
supply_temperature_by_country : dictionary
Dictionary with temperatures as values and country keys as keys. One key must be named "default"
regions_onshore : pd.Index
Names of onshore regions
snapshots : pd.DatetimeIndex
Time stamps
Returns:
-------
xr.DataArray
The dictionary values mapped to onshore regions with onshore regions as coordinates.
"""
return xr.DataArray(
[
[
(
supply_temperature_by_country[get_country_from_node_name(node_name)]
if get_country_from_node_name(node_name)
in supply_temperature_by_country.keys()
else supply_temperature_by_country["default"]
)
for node_name in regions_onshore.values
]
# pass both nodes and snapshots as dimensions to preserve correct data structure
for _ in snapshots
],
dims=["time", "name"],
coords={"time": snapshots, "name": regions_onshore},
)
def get_cop(
heat_system_type: str,
heat_source: str,
@ -154,20 +113,13 @@ if __name__ == "__main__":
# map forward and return temperatures specified on country-level to onshore regions
regions_onshore = gpd.read_file(snakemake.input.regions_onshore)["name"]
snapshots = pd.date_range(freq="h", **snakemake.params.snapshots)
forward_temperature_central_heating_by_node_and_time: xr.DataArray = (
map_temperature_dict_to_onshore_regions(
supply_temperature_by_country=snakemake.params.forward_temperature_central_heating,
regions_onshore=regions_onshore,
snapshots=snapshots,
)
central_heating_forward_temperature: xr.DataArray = xr.open_dataarray(
snakemake.input.central_heating_forward_temperature_profiles
)
return_temperature_central_heating_by_node_and_time: xr.DataArray = (
map_temperature_dict_to_onshore_regions(
supply_temperature_by_country=snakemake.params.return_temperature_central_heating,
regions_onshore=regions_onshore,
snapshots=snapshots,
)
central_heating_return_temperature: xr.DataArray = xr.open_dataarray(
snakemake.input.central_heating_return_temperature_profiles
)
cop_all_system_types = []
for heat_system_type, heat_sources in snakemake.params.heat_pump_sources.items():
cop_this_system_type = []
@ -179,8 +131,8 @@ if __name__ == "__main__":
heat_system_type=heat_system_type,
heat_source=heat_source,
source_inlet_temperature_celsius=source_inlet_temperature_celsius,
forward_temperature_by_node_and_time=forward_temperature_central_heating_by_node_and_time,
return_temperature_by_node_and_time=return_temperature_central_heating_by_node_and_time,
forward_temperature_by_node_and_time=central_heating_forward_temperature,
return_temperature_by_node_and_time=central_heating_return_temperature,
)
cop_this_system_type.append(cop_da)
cop_all_system_types.append(

View File

@ -37,7 +37,7 @@ Outputs
-------
- ``cutouts/{cutout}``: weather data from either the `ERA5 <https://www.ecmwf.int/en/forecasts/datasets/reanalysis-datasets/era5>`_
reanalysis weather dataset or `SARAH-2 <https://wui.cmsaf.eu/safira/action/viewProduktSearch>`_
reanalysis weather dataset or `SARAH-3 <https://wui.cmsaf.eu/safira/action/viewProduktSearch>`_
satellite-based historic weather data with the following structure:
**ERA5 cutout:**
@ -80,7 +80,7 @@ Outputs
.. image:: img/era5.png
:scale: 40 %
A **SARAH-2 cutout** can be used to amend the fields ``temperature``, ``influx_toa``, ``influx_direct``, ``albedo``,
A **SARAH-3 cutout** can be used to amend the fields ``temperature``, ``influx_toa``, ``influx_direct``, ``albedo``,
``influx_diffuse`` of ERA5 using satellite-based radiation observations.
.. image:: img/sarah.png

View File

@ -192,9 +192,9 @@ def manual_adjustment(load, fn_load, countries):
if "ME" in load:
load["BA"] = load.HR * (11.0 / 16.2)
if ("KV" not in load or load.KV.isnull().values.all()) and "KV" in countries:
if "XK" not in load and "XK" in countries:
if "RS" in load:
load["KV"] = load["RS"] * (4.8 / 27.0)
load["XK"] = load["RS"] * (4.8 / 27.0)
copy_timeslice(load, "GR", "2015-08-11 21:00", "2015-08-15 20:00", Delta(weeks=1))
copy_timeslice(load, "AT", "2018-12-31 22:00", "2019-01-01 22:00", Delta(days=2))
@ -311,8 +311,8 @@ if __name__ == "__main__":
logger.info("Supplement missing data with synthetic data.")
fn = snakemake.input.synthetic
synthetic_load = pd.read_csv(fn, index_col=0, parse_dates=True)
# "UA" does not appear in synthetic load data
countries = list(set(countries) - set(["UA", "MD"]))
# UA, MD, XK do not appear in synthetic load data
countries = list(set(countries) - set(["UA", "MD", "XK"]))
synthetic_load = synthetic_load.loc[snapshots, countries]
load = load.combine_first(synthetic_load)

View File

@ -1147,7 +1147,7 @@ def build_co2_totals(
co2 = eea_co2.reindex(countries)
for ct in pd.Index(countries).intersection(
["BA", "RS", "AL", "ME", "MK", "UA", "MD"]
["BA", "RS", "XK", "AL", "ME", "MK", "UA", "MD"]
):
mappings = {
"electricity": (ct, "+", "Electricity & heat generation", np.nan),
@ -1500,10 +1500,10 @@ def update_residential_from_eurostat(energy: pd.DataFrame) -> pd.DataFrame:
for nrg_name, (code, siec) in nrg_type.items():
# Select energy balance type, rename columns and countries to match IDEES data,
# convert TJ to TWh, and drop XK data already since included in RS data
# convert TJ to TWh
col_to_rename = {"geo": "country", "TIME_PERIOD": "year", "OBS_VALUE": nrg_name}
idx_to_rename = {v: k for k, v in idees_rename.items()}
drop_geo = ["EU27_2020", "EA20", "XK"]
drop_geo = ["EU27_2020", "EA20"]
nrg_data = eurostat_households.query(
"nrg_bal == @code and siec == @siec and geo not in @drop_geo and OBS_VALUE > 0"
).copy()

View File

@ -82,7 +82,7 @@ def get_eia_annual_hydro_generation(fn, countries, capacities=False):
countries=["Czechia", "Slovakia"], start=1980, end=1992
),
"Former Serbia and Montenegro": dict(
countries=["Serbia", "Montenegro"], start=1992, end=2005
countries=["Serbia", "Montenegro", "Kosovo"], start=1992, end=2005
),
"Former Yugoslavia": dict(
countries=[
@ -90,6 +90,7 @@ def get_eia_annual_hydro_generation(fn, countries, capacities=False):
"Croatia",
"Bosnia and Herzegovina",
"Serbia",
"Kosovo",
"Montenegro",
"North Macedonia",
],
@ -111,9 +112,8 @@ def get_eia_annual_hydro_generation(fn, countries, capacities=False):
)
df.loc["Germany"] = df.filter(like="Germany", axis=0).sum()
df.loc["Serbia"] += df.loc["Kosovo"].fillna(0.0)
df = df.loc[~df.index.str.contains("Former")]
df.drop(["Europe", "Germany, West", "Germany, East", "Kosovo"], inplace=True)
df.drop(["Europe", "Germany, West", "Germany, East"], inplace=True)
df.index = cc.convert(df.index, to="iso2")
df.index.name = "countries"
@ -122,6 +122,8 @@ def get_eia_annual_hydro_generation(fn, countries, capacities=False):
factor = 1e3 if capacities else 1e6
df = df.T[countries] * factor
df.ffill(axis=0, inplace=True)
return df
@ -129,7 +131,7 @@ def correct_eia_stats_by_capacity(eia_stats, fn, countries, baseyear=2019):
cap = get_eia_annual_hydro_generation(fn, countries, capacities=True)
ratio = cap / cap.loc[baseyear]
eia_stats_corrected = eia_stats / ratio
to_keep = ["AL", "AT", "CH", "DE", "GB", "NL", "RS", "RO", "SK"]
to_keep = ["AL", "AT", "CH", "DE", "GB", "NL", "RS", "XK", "RO", "SK"]
to_correct = eia_stats_corrected.columns.difference(to_keep)
eia_stats.loc[:, to_correct] = eia_stats_corrected.loc[:, to_correct]

View File

@ -100,7 +100,7 @@ def prepare_hotmaps_database(regions):
"""
Load hotmaps database of industrial sites and map onto bus regions.
"""
df = pd.read_csv(snakemake.input.hotmaps_industrial_database, sep=";", index_col=0)
df = pd.read_csv(snakemake.input.hotmaps, sep=";", index_col=0)
df[["srid", "coordinates"]] = df.geom.str.split(";", expand=True)
@ -133,7 +133,97 @@ def prepare_hotmaps_database(regions):
return gdf
def build_nodal_distribution_key(hotmaps, regions, countries):
def prepare_gem_database(regions):
"""
Load GEM database of steel plants and map onto bus regions.
"""
df = pd.read_excel(
snakemake.input.gem_gspt,
sheet_name="Steel Plants",
na_values=["N/A", "unknown", ">0"],
).query("Region == 'Europe'")
df["Retired Date"] = pd.to_numeric(
df["Retired Date"].combine_first(df["Idled Date"]), errors="coerce"
)
df["Start date"] = pd.to_numeric(
df["Start date"].str.split("-").str[0], errors="coerce"
)
latlon = (
df["Coordinates"]
.str.split(", ", expand=True)
.rename(columns={0: "lat", 1: "lon"})
)
geometry = gpd.points_from_xy(latlon["lon"], latlon["lat"])
gdf = gpd.GeoDataFrame(df, geometry=geometry, crs="EPSG:4326")
gdf = gpd.sjoin(gdf, regions, how="inner", predicate="within")
gdf.rename(columns={"name": "bus"}, inplace=True)
gdf["country"] = gdf.bus.str[:2]
return gdf
def prepare_ammonia_database(regions):
"""
Load ammonia database of plants and map onto bus regions.
"""
df = pd.read_csv(snakemake.input.ammonia, index_col=0)
geometry = gpd.points_from_xy(df.Longitude, df.Latitude)
gdf = gpd.GeoDataFrame(df, geometry=geometry, crs="EPSG:4326")
gdf = gpd.sjoin(gdf, regions, how="inner", predicate="within")
gdf.rename(columns={"name": "bus"}, inplace=True)
gdf["country"] = gdf.bus.str[:2]
return gdf
def prepare_cement_supplement(regions):
"""
Load supplementary cement plants from non-EU-(NO-CH) and map onto bus
regions.
"""
df = pd.read_csv(snakemake.input.cement_supplement, index_col=0)
geometry = gpd.points_from_xy(df.Longitude, df.Latitude)
gdf = gpd.GeoDataFrame(df, geometry=geometry, crs="EPSG:4326")
gdf = gpd.sjoin(gdf, regions, how="inner", predicate="within")
gdf.rename(columns={"name": "bus"}, inplace=True)
gdf["country"] = gdf.bus.str[:2]
return gdf
def prepare_refineries_supplement(regions):
"""
Load supplementary refineries from non-EU-(NO-CH) and map onto bus regions.
"""
df = pd.read_csv(snakemake.input.refineries_supplement, index_col=0)
geometry = gpd.points_from_xy(df.Longitude, df.Latitude)
gdf = gpd.GeoDataFrame(df, geometry=geometry, crs="EPSG:4326")
gdf = gpd.sjoin(gdf, regions, how="inner", predicate="within")
gdf.rename(columns={"name": "bus"}, inplace=True)
gdf["country"] = gdf.bus.str[:2]
return gdf
def build_nodal_distribution_key(
hotmaps, gem, ammonia, cement, refineries, regions, countries
):
"""
Build nodal distribution keys for each sector.
"""
@ -158,15 +248,137 @@ def build_nodal_distribution_key(hotmaps, regions, countries):
if emissions.sum() == 0:
key = pd.Series(1 / len(facilities), facilities.index)
else:
# BEWARE: this is a strong assumption
emissions = emissions.fillna(emissions.mean())
# assume 20% quantile for missing values
emissions = emissions.fillna(emissions.quantile(0.2))
key = emissions / emissions.sum()
key = key.groupby(facilities.bus).sum().reindex(regions_ct, fill_value=0.0)
elif sector == "Cement" and country in cement.country.unique():
facilities = cement.query("country == @country")
production = facilities["Cement [kt/a]"]
if production.sum() == 0:
key = pd.Series(1 / len(facilities), facilities.index)
else:
key = production / production.sum()
key = key.groupby(facilities.bus).sum().reindex(regions_ct, fill_value=0.0)
elif sector == "Refineries" and country in refineries.country.unique():
facilities = refineries.query("country == @country")
production = facilities["Capacity [bbl/day]"]
if production.sum() == 0:
key = pd.Series(1 / len(facilities), facilities.index)
else:
key = production / production.sum()
key = key.groupby(facilities.bus).sum().reindex(regions_ct, fill_value=0.0)
else:
key = keys.loc[regions_ct, "population"]
keys.loc[regions_ct, sector] = key
# add specific steel subsectors
steel_processes = ["EAF", "DRI + EAF", "Integrated steelworks"]
for process, country in product(steel_processes, countries):
regions_ct = regions.index[regions.index.str.contains(country)]
facilities = gem.query("country == @country")
if process == "EAF":
status_list = [
"construction",
"operating",
"operating pre-retirement",
"retired",
]
capacities = facilities.loc[
facilities["Capacity operating status"].isin(status_list)
& (
facilities["Retired Date"].isna()
| facilities["Retired Date"].gt(2025)
),
"Nominal EAF steel capacity (ttpa)",
].dropna()
elif process == "DRI + EAF":
status_list = [
"construction",
"operating",
"operating pre-retirement",
"retired",
"announced",
]
sel = [
"Nominal BOF steel capacity (ttpa)",
"Nominal OHF steel capacity (ttpa)",
"Nominal iron capacity (ttpa)",
]
status_filter = facilities["Capacity operating status"].isin(status_list)
retirement_filter = facilities["Retired Date"].isna() | facilities[
"Retired Date"
].gt(2030)
start_filter = (
facilities["Start date"].isna()
& ~facilities["Capacity operating status"].eq("announced")
) | facilities["Start date"].le(2030)
capacities = (
facilities.loc[status_filter & retirement_filter & start_filter, sel]
.sum(axis=1)
.dropna()
)
elif process == "Integrated steelworks":
status_list = [
"construction",
"operating",
"operating pre-retirement",
"retired",
]
sel = [
"Nominal BOF steel capacity (ttpa)",
"Nominal OHF steel capacity (ttpa)",
]
capacities = (
facilities.loc[
facilities["Capacity operating status"].isin(status_list)
& (
facilities["Retired Date"].isna()
| facilities["Retired Date"].gt(2025)
),
sel,
]
.sum(axis=1)
.dropna()
)
else:
raise ValueError(f"Unknown process {process}")
if not capacities.empty:
if capacities.sum() == 0:
key = pd.Series(1 / len(capacities), capacities.index)
else:
key = capacities / capacities.sum()
buses = facilities.loc[capacities.index, "bus"]
key = key.groupby(buses).sum().reindex(regions_ct, fill_value=0.0)
else:
key = keys.loc[regions_ct, "population"]
keys.loc[regions_ct, process] = key
# add ammonia
for country in countries:
regions_ct = regions.index[regions.index.str.contains(country)]
facilities = ammonia.query("country == @country")
if not facilities.empty:
production = facilities["Ammonia [kt/a]"]
if production.sum() == 0:
key = pd.Series(1 / len(facilities), facilities.index)
else:
# assume 50% of the minimum production for missing values
production = production.fillna(0.5 * facilities["Ammonia [kt/a]"].min())
key = production / production.sum()
key = key.groupby(facilities.bus).sum().reindex(regions_ct, fill_value=0.0)
else:
key = 0.0
keys.loc[regions_ct, "Ammonia"] = key
return keys
@ -188,6 +400,16 @@ if __name__ == "__main__":
hotmaps = prepare_hotmaps_database(regions)
keys = build_nodal_distribution_key(hotmaps, regions, countries)
gem = prepare_gem_database(regions)
ammonia = prepare_ammonia_database(regions)
cement = prepare_cement_supplement(regions)
refineries = prepare_refineries_supplement(regions)
keys = build_nodal_distribution_key(
hotmaps, gem, ammonia, cement, refineries, regions, countries
)
keys.to_csv(snakemake.output.industrial_distribution_key)

View File

@ -33,10 +33,10 @@ from _helpers import set_scenario_config
# map JRC/our sectors to hotmaps sector, where mapping exist
sector_mapping = {
"Electric arc": "Iron and steel",
"Integrated steelworks": "Iron and steel",
"DRI + Electric arc": "Iron and steel",
"Ammonia": "Chemical industry",
"Electric arc": "EAF",
"Integrated steelworks": "Integrated steelworks",
"DRI + Electric arc": "DRI + EAF",
"Ammonia": "Ammonia",
"Basic chemicals (without ammonia)": "Chemical industry",
"Other chemicals": "Chemical industry",
"Pharmaceutical products etc.": "Chemical industry",

View File

@ -345,5 +345,7 @@ if __name__ == "__main__":
separate_basic_chemicals(demand, year)
demand.fillna(0.0, inplace=True)
fn = snakemake.output.industrial_production_per_country
demand.to_csv(fn, float_format="%.2f")

View File

@ -32,10 +32,10 @@ from _helpers import set_scenario_config
# map JRC/our sectors to hotmaps sector, where mapping exist
sector_mapping = {
"Electric arc": "Iron and steel",
"Integrated steelworks": "Iron and steel",
"DRI + Electric arc": "Iron and steel",
"Ammonia": "Chemical industry",
"Electric arc": "EAF",
"Integrated steelworks": "Integrated steelworks",
"DRI + Electric arc": "DRI + EAF",
"Ammonia": "Ammonia",
"HVC": "Chemical industry",
"HVC (mechanical recycling)": "Chemical industry",
"HVC (chemical recycling)": "Chemical industry",

View File

@ -20,8 +20,6 @@ logger = logging.getLogger(__name__)
cc = coco.CountryConverter()
coco.logging.getLogger().setLevel(coco.logging.CRITICAL)
if __name__ == "__main__":
if "snakemake" not in globals():
from _helpers import mock_snakemake
@ -32,6 +30,7 @@ if __name__ == "__main__":
configure_logging(snakemake)
set_scenario_config(snakemake)
coco.logging.getLogger().setLevel(coco.logging.CRITICAL)
cutout = atlite.Cutout(snakemake.input.cutout)
@ -56,6 +55,8 @@ if __name__ == "__main__":
urban_fraction = (
urban_fraction.query("iso2 in @countries").set_index("iso2")["2019"].div(100)
)
if "XK" in countries:
urban_fraction["XK"] = urban_fraction["RS"]
# population in each grid cell
pop_cells = pd.Series(I.dot(nuts3["pop"]))

View File

@ -198,6 +198,7 @@ def prepare_building_stock_data():
"Iceland": "IS",
"Montenegro": "ME",
"Serbia": "RS",
"Kosovo": "XK",
"Albania": "AL",
"United Kingdom": "GB",
"Bosnia and Herzegovina": "BA",
@ -1073,6 +1074,7 @@ if __name__ == "__main__":
"AL": ["BG", "RO", "GR"],
"BA": ["HR"],
"RS": ["BG", "RO", "HR", "HU"],
"KV": ["RS"],
"MK": ["BG", "GR"],
"ME": ["BA", "AL", "RS", "HR"],
"CH": ["SE", "DE"],

View File

@ -106,8 +106,6 @@ def _simplify_polys(polys, minarea=0.1, tolerance=None, filterremote=True):
def countries(naturalearth, country_list):
if "RS" in country_list:
country_list.append("KV")
df = gpd.read_file(naturalearth)
@ -116,15 +114,12 @@ def countries(naturalearth, country_list):
df[x].where(lambda s: s != "-99") for x in ("ISO_A2", "WB_A2", "ADM0_A3")
)
df["name"] = reduce(lambda x, y: x.fillna(y), fieldnames, next(fieldnames)).str[:2]
df.replace({"name": {"KV": "XK"}}, inplace=True)
df = df.loc[
df.name.isin(country_list) & ((df["scalerank"] == 0) | (df["scalerank"] == 5))
]
s = df.set_index("name")["geometry"].map(_simplify_polys).set_crs(df.crs)
if "RS" in country_list:
s["RS"] = s["RS"].union(s.pop("KV"))
# cleanup shape union
s["RS"] = Polygon(s["RS"].exterior.coords)
return s
@ -195,7 +190,9 @@ def nuts3(country_shapes, nuts3, nuts3pop, nuts3gdp, ch_cantons, ch_popgdp):
df = df.join(pd.DataFrame(dict(pop=pop, gdp=gdp)))
df["country"] = df.index.to_series().str[:2].replace(dict(UK="GB", EL="GR"))
df["country"] = (
df.index.to_series().str[:2].replace(dict(UK="GB", EL="GR", KV="XK"))
)
excludenuts = pd.Index(
(
@ -217,13 +214,18 @@ def nuts3(country_shapes, nuts3, nuts3pop, nuts3gdp, ch_cantons, ch_popgdp):
"FR9",
)
)
excludecountry = pd.Index(("MT", "TR", "LI", "IS", "CY", "KV"))
excludecountry = pd.Index(("MT", "TR", "LI", "IS", "CY"))
df = df.loc[df.index.difference(excludenuts)]
df = df.loc[~df.country.isin(excludecountry)]
manual = gpd.GeoDataFrame(
[["BA1", "BA", 3871.0], ["RS1", "RS", 7210.0], ["AL1", "AL", 2893.0]],
[
["BA1", "BA", 3234.0],
["RS1", "RS", 6664.0],
["AL1", "AL", 2778.0],
["XK1", "XK", 1587.0],
],
columns=["NUTS_ID", "country", "pop"],
geometry=gpd.GeoSeries(),
crs=df.crs,
@ -234,7 +236,7 @@ def nuts3(country_shapes, nuts3, nuts3pop, nuts3gdp, ch_cantons, ch_popgdp):
df = pd.concat([df, manual], sort=False)
df.loc["ME000", "pop"] = 650.0
df.loc["ME000", "pop"] = 617.0
return df

142
scripts/prepare_sector_network.py Normal file → Executable file
View File

@ -63,7 +63,8 @@ def define_spatial(nodes, options):
if options.get("biomass_spatial", options["biomass_transport"]):
spatial.biomass.nodes = nodes + " solid biomass"
spatial.biomass.bioliquids = nodes + " bioliquids"
spatial.biomass.nodes_unsustainable = nodes + " unsustainable solid biomass"
spatial.biomass.bioliquids = nodes + " unsustainable bioliquids"
spatial.biomass.locations = nodes
spatial.biomass.industry = nodes + " solid biomass for industry"
spatial.biomass.industry_cc = nodes + " solid biomass for industry CC"
@ -71,6 +72,7 @@ def define_spatial(nodes, options):
spatial.msw.locations = nodes
else:
spatial.biomass.nodes = ["EU solid biomass"]
spatial.biomass.nodes_unsustainable = ["EU unsustainable solid biomass"]
spatial.biomass.bioliquids = ["EU unsustainable bioliquids"]
spatial.biomass.locations = ["EU"]
spatial.biomass.industry = ["solid biomass for industry"]
@ -281,7 +283,7 @@ def co2_emissions_year(
eurostat = build_eurostat(input_eurostat, countries)
# this only affects the estimation of CO2 emissions for BA, RS, AL, ME, MK
# this only affects the estimation of CO2 emissions for BA, RS, AL, ME, MK, XK
eurostat_co2 = build_eurostat_co2(eurostat, year)
co2_totals = build_co2_totals(countries, eea_co2, eurostat_co2)
@ -573,12 +575,43 @@ def add_carrier_buses(n, carrier, nodes=None):
fossils = ["coal", "gas", "oil", "lignite"]
if options.get("fossil_fuels", True) and carrier in fossils:
suffix = ""
if carrier == "oil" and cf_industry["oil_refining_emissions"] > 0:
n.madd(
"Bus",
nodes + " primary",
location=location,
carrier=carrier + " primary",
unit=unit,
)
n.madd(
"Link",
nodes + " refining",
bus0=nodes + " primary",
bus1=nodes,
bus2="co2 atmosphere",
location=location,
carrier=carrier + " refining",
p_nom=1e6,
efficiency=1
- (
cf_industry["oil_refining_emissions"]
/ costs.at[carrier, "CO2 intensity"]
),
efficiency2=cf_industry["oil_refining_emissions"],
)
suffix = " primary"
n.madd(
"Generator",
nodes,
bus=nodes,
nodes + suffix,
bus=nodes + suffix,
p_nom_extendable=True,
carrier=carrier,
carrier=carrier + suffix,
marginal_cost=costs.at[carrier, "fuel"],
)
@ -1849,8 +1882,6 @@ def add_heat(n: pypsa.Network, costs: pd.DataFrame, cop: xr.DataArray):
heat_demand = build_heat_demand(n)
overdim_factor = options["overdimension_individual_heating"]
district_heat_info = pd.read_csv(snakemake.input.district_heat_share, index_col=0)
dist_fraction = district_heat_info["district fraction of node"]
urban_fraction = district_heat_info["urban fraction"]
@ -1879,6 +1910,9 @@ def add_heat(n: pypsa.Network, costs: pd.DataFrame, cop: xr.DataArray):
HeatSystem
): # this loops through all heat systems defined in _entities.HeatSystem
overdim_factor = options["overdimension_heat_generators"][
heat_system.central_or_decentral
]
if heat_system == HeatSystem.URBAN_CENTRAL:
nodes = dist_fraction.index[dist_fraction > 0]
else:
@ -2329,8 +2363,7 @@ def add_biomass(n, costs):
if (
options["municipal_solid_waste"]
and not options["industry"]
and cf_industry["waste_to_energy"]
or cf_industry["waste_to_energy_cc"]
and not (cf_industry["waste_to_energy"] or cf_industry["waste_to_energy_cc"])
):
logger.warning(
"Flag municipal_solid_waste can be only used with industry "
@ -2350,12 +2383,9 @@ def add_biomass(n, costs):
carrier="municipal solid waste",
)
e_max_pu = np.array(
len(spatial.msw.nodes) * [[1] * (len(n.snapshots) - 1) + [0]]
).T
e_max_pu = pd.DataFrame(
e_max_pu, index=n.snapshots, columns=spatial.msw.nodes
).astype(float)
e_max_pu = pd.DataFrame(1, index=n.snapshots, columns=spatial.msw.nodes)
e_max_pu.iloc[-1] = 0
n.madd(
"Store",
spatial.msw.nodes,
@ -2470,14 +2500,23 @@ def add_biomass(n, costs):
e_max_pu=e_max_pu,
)
e_max_pu = pd.DataFrame(1, index=n.snapshots, columns=spatial.biomass.nodes)
n.madd(
"Bus",
spatial.biomass.nodes_unsustainable,
location=spatial.biomass.locations,
carrier="unsustainable solid biomass",
unit="MWh_LHV",
)
e_max_pu = pd.DataFrame(
1, index=n.snapshots, columns=spatial.biomass.nodes_unsustainable
)
e_max_pu.iloc[-1] = 0
n.madd(
"Store",
spatial.biomass.nodes,
suffix=" unsustainable",
bus=spatial.biomass.nodes,
spatial.biomass.nodes_unsustainable,
bus=spatial.biomass.nodes_unsustainable,
carrier="unsustainable solid biomass",
e_nom=unsustainable_solid_biomass_potentials_spatial,
marginal_cost=costs.at["fuelwood", "fuel"],
@ -2486,6 +2525,16 @@ def add_biomass(n, costs):
e_max_pu=e_max_pu,
)
n.madd(
"Link",
spatial.biomass.nodes_unsustainable,
bus0=spatial.biomass.nodes_unsustainable,
bus1=spatial.biomass.nodes,
carrier="unsustainable solid biomass",
efficiency=1,
p_nom=unsustainable_solid_biomass_potentials_spatial,
)
n.madd(
"Bus",
spatial.biomass.bioliquids,
@ -2502,7 +2551,6 @@ def add_biomass(n, costs):
n.madd(
"Store",
spatial.biomass.bioliquids,
suffix=" unsustainable",
bus=spatial.biomass.bioliquids,
carrier="unsustainable bioliquids",
e_nom=unsustainable_liquid_biofuel_potentials_spatial,
@ -2512,6 +2560,8 @@ def add_biomass(n, costs):
e_max_pu=e_max_pu,
)
add_carrier_buses(n, "oil")
n.madd(
"Link",
spatial.biomass.bioliquids,
@ -2600,13 +2650,15 @@ def add_biomass(n, costs):
if options["municipal_solid_waste"]:
n.madd(
"Link",
biomass_transport.index,
bus0=biomass_transport.bus0 + " municipal solid waste",
bus1=biomass_transport.bus1 + " municipal solid waste",
biomass_transport.index + " municipal solid waste",
bus0=biomass_transport.bus0.values + " municipal solid waste",
bus1=biomass_transport.bus1.values + " municipal solid waste",
p_nom_extendable=False,
p_nom=5e4,
length=biomass_transport.length.values,
marginal_cost=biomass_transport.costs * biomass_transport.length.values,
marginal_cost=(
biomass_transport.costs * biomass_transport.length
).values,
carrier="municipal solid waste transport",
)
@ -2638,6 +2690,32 @@ def add_biomass(n, costs):
constant=biomass_potentials["solid biomass"].sum(),
type="operational_limit",
)
if biomass_potentials["unsustainable solid biomass"].sum() > 0:
n.madd(
"Generator",
spatial.biomass.nodes_unsustainable,
bus=spatial.biomass.nodes_unsustainable,
carrier="unsustainable solid biomass",
p_nom=10000,
marginal_cost=costs.at["fuelwood", "fuel"]
+ bus_transport_costs * average_distance,
)
# Set last snapshot of e_max_pu for unsustainable solid biomass to 1 to make operational limit work
unsus_stores_idx = n.stores.query(
"carrier == 'unsustainable solid biomass'"
).index
unsus_stores_idx = unsus_stores_idx.intersection(
n.stores_t.e_max_pu.columns
)
n.stores_t.e_max_pu.loc[n.snapshots[-1], unsus_stores_idx] = 1
n.add(
"GlobalConstraint",
"unsustainable biomass limit",
carrier_attribute="unsustainable solid biomass",
sense="==",
constant=biomass_potentials["unsustainable solid biomass"].sum(),
type="operational_limit",
)
if options["municipal_solid_waste"]:
# Add municipal solid waste
@ -2729,7 +2807,9 @@ def add_biomass(n, costs):
efficiency=costs.at["biomass boiler", "efficiency"],
capital_cost=costs.at["biomass boiler", "efficiency"]
* costs.at["biomass boiler", "fixed"]
* options["overdimension_individual_heating"],
* options["overdimension_heat_generators"][
HeatSystem(name).central_or_decentral
],
marginal_cost=costs.at["biomass boiler", "pelletizing cost"],
lifetime=costs.at["biomass boiler", "lifetime"],
)
@ -3251,7 +3331,9 @@ def add_industry(n, costs):
efficiency2=costs.at["oil", "CO2 intensity"],
capital_cost=costs.at["decentral oil boiler", "efficiency"]
* costs.at["decentral oil boiler", "fixed"]
* options["overdimension_individual_heating"],
* options["overdimension_heat_generators"][
heat_system.central_or_decentral
],
lifetime=costs.at["decentral oil boiler", "lifetime"],
)
@ -3354,9 +3436,13 @@ def add_industry(n, costs):
spatial.msw.locations,
bus0=spatial.msw.nodes,
bus1=non_sequestered_hvc_locations,
bus2="co2 atmosphere",
carrier="municipal solid waste",
p_nom_extendable=True,
efficiency=1.0,
efficiency2=-costs.at[
"oil", "CO2 intensity"
], # because msw is co2 neutral and will be burned in waste CHP or decomposed as oil
)
n.madd(
@ -4252,10 +4338,10 @@ if __name__ == "__main__":
"prepare_sector_network",
simpl="",
opts="",
clusters="37",
clusters="38",
ll="vopt",
sector_opts="",
planning_horizons="2050",
planning_horizons="2030",
)
configure_logging(snakemake)

View File

@ -330,8 +330,8 @@ def add_carbon_constraint(n, snapshots):
continue
# stores
n.stores["carrier"] = n.stores.bus.map(n.buses.carrier)
stores = n.stores.query("carrier in @emissions.index and not e_cyclic")
bus_carrier = n.stores.bus.map(n.buses.carrier)
stores = n.stores[bus_carrier.isin(emissions.index) & ~n.stores.e_cyclic]
if not stores.empty:
last = n.snapshot_weightings.reset_index().groupby("period").last()
last_i = last.set_index([last.index, last.timestep]).index
@ -356,8 +356,8 @@ def add_carbon_budget_constraint(n, snapshots):
continue
# stores
n.stores["carrier"] = n.stores.bus.map(n.buses.carrier)
stores = n.stores.query("carrier in @emissions.index and not e_cyclic")
bus_carrier = n.stores.bus.map(n.buses.carrier)
stores = n.stores[bus_carrier.isin(emissions.index) & ~n.stores.e_cyclic]
if not stores.empty:
last = n.snapshot_weightings.reset_index().groupby("period").last()
last_i = last.set_index([last.index, last.timestep]).index
@ -1000,8 +1000,8 @@ def add_co2_atmosphere_constraint(n, snapshots):
continue
# stores
n.stores["carrier"] = n.stores.bus.map(n.buses.carrier)
stores = n.stores.query("carrier in @emissions.index and not e_cyclic")
bus_carrier = n.stores.bus.map(n.buses.carrier)
stores = n.stores[bus_carrier.isin(emissions.index) & ~n.stores.e_cyclic]
if not stores.empty:
last_i = snapshots[-1]
lhs = n.model["Store-e"].loc[last_i, stores.index]
@ -1055,8 +1055,8 @@ def extra_functionality(n, snapshots):
if config["sector"]["enhanced_geothermal"]["enable"]:
add_flexible_egs_constraint(n)
if snakemake.params.custom_extra_functionality:
source_path = snakemake.params.custom_extra_functionality
if n.params.custom_extra_functionality:
source_path = n.params.custom_extra_functionality
assert os.path.exists(source_path), f"{source_path} does not exist"
sys.path.append(os.path.dirname(source_path))
module_name = os.path.splitext(os.path.basename(source_path))[0]
@ -1065,7 +1065,7 @@ def extra_functionality(n, snapshots):
custom_extra_functionality(n, snapshots, snakemake)
def solve_network(n, config, solving, **kwargs):
def solve_network(n, config, params, solving, **kwargs):
set_of_options = solving["solver"]["options"]
cf_solving = solving["options"]
@ -1093,6 +1093,7 @@ def solve_network(n, config, solving, **kwargs):
# add to network for extra_functionality
n.config = config
n.params = params
if rolling_horizon and snakemake.rule == "solve_operations_network":
kwargs["horizon"] = cf_solving.get("horizon", 365)
@ -1165,6 +1166,7 @@ if __name__ == "__main__":
n = solve_network(
n,
config=snakemake.config,
params=snakemake.params,
solving=snakemake.params.solving,
log_fn=snakemake.log.solver,
)

View File

@ -49,7 +49,13 @@ if __name__ == "__main__":
n.optimize.fix_optimal_capacities()
n = prepare_network(n, solve_opts, config=snakemake.config)
n = solve_network(n, config=snakemake.config, log_fn=snakemake.log.solver)
n = solve_network(
n,
config=snakemake.config,
params=snakemake.params,
solving=snakemake.params.solving,
log_fn=snakemake.log.solver,
)
n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards)))
n.export_to_netcdf(snakemake.output[0])