merge master
This commit is contained in:
commit
3986856282
109
.github/workflows/ci.yaml
vendored
Normal file
109
.github/workflows/ci.yaml
vendored
Normal file
@ -0,0 +1,109 @@
|
||||
# SPDX-FileCopyrightText: : 2021 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
name: CI
|
||||
|
||||
# Caching method based on and described by:
|
||||
# epassaro (2021): https://dev.to/epassaro/caching-anaconda-environments-in-github-actions-5hde
|
||||
# and code in GitHub repo: https://github.com/epassaro/cache-conda-envs
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
schedule:
|
||||
- cron: "0 5 * * TUE"
|
||||
|
||||
env:
|
||||
CONDA_CACHE_NUMBER: 1 # Change this value to manually reset the environment cache
|
||||
DATA_CACHE_NUMBER: 1
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
# Matrix required to handle caching with Mambaforge
|
||||
- os: ubuntu-latest
|
||||
label: ubuntu-latest
|
||||
prefix: /usr/share/miniconda3/envs/pypsa-eur
|
||||
|
||||
# - os: macos-latest
|
||||
# label: macos-latest
|
||||
# prefix: /Users/runner/miniconda3/envs/pypsa-eur
|
||||
|
||||
# - os: windows-latest
|
||||
# label: windows-latest
|
||||
# prefix: C:\Miniconda3\envs\pypsa-eur
|
||||
|
||||
name: ${{ matrix.label }}
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Clone pypsa-eur and technology-data repositories
|
||||
run: |
|
||||
git clone https://github.com/pypsa/pypsa-eur ../pypsa-eur
|
||||
git clone https://github.com/pypsa/technology-data ../technology-data
|
||||
cp ../pypsa-eur/test/config.test1.yaml ../pypsa-eur/config.yaml
|
||||
|
||||
- name: Setup secrets
|
||||
run: |
|
||||
echo -ne "url: ${CDSAPI_URL}\nkey: ${CDSAPI_TOKEN}\n" > ~/.cdsapirc
|
||||
|
||||
- name: Add solver to environment
|
||||
run: |
|
||||
echo -e " - coincbc\n - ipopt<3.13.3" >> ../pypsa-eur/envs/environment.yaml
|
||||
|
||||
- name: Setup Mambaforge
|
||||
uses: conda-incubator/setup-miniconda@v2
|
||||
with:
|
||||
miniforge-variant: Mambaforge
|
||||
miniforge-version: latest
|
||||
activate-environment: pypsa-eur
|
||||
use-mamba: true
|
||||
|
||||
- name: Set cache dates
|
||||
run: |
|
||||
echo "DATE=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
||||
echo "WEEK=$(date +'%Y%U')" >> $GITHUB_ENV
|
||||
|
||||
- name: Cache data and cutouts folders
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
data
|
||||
../pypsa-eur/cutouts
|
||||
../pypsa-eur/data
|
||||
key: data-cutouts-${{ env.WEEK }}-${{ env.DATA_CACHE_NUMBER }}
|
||||
|
||||
- name: Create environment cache
|
||||
uses: actions/cache@v2
|
||||
id: cache
|
||||
with:
|
||||
path: ${{ matrix.prefix }}
|
||||
key: ${{ matrix.label }}-conda-${{ env.DATE }}-${{ env.CONDA_CACHE_NUMBER }}
|
||||
|
||||
- name: Update environment due to outdated or unavailable cache
|
||||
run: mamba env update -n pypsa-eur -f ../pypsa-eur/envs/environment.yaml
|
||||
if: steps.cache.outputs.cache-hit != 'true'
|
||||
|
||||
- name: Test snakemake workflow
|
||||
run: |
|
||||
conda activate pypsa-eur
|
||||
conda list
|
||||
cp test/config.overnight.yaml config.yaml
|
||||
snakemake -call
|
||||
cp test/config.myopic.yaml config.yaml
|
||||
snakemake -call
|
27
README.md
27
README.md
@ -7,19 +7,8 @@
|
||||
|
||||
# PyPSA-Eur-Sec: A Sector-Coupled Open Optimisation Model of the European Energy System
|
||||
|
||||
|
||||
|
||||
**WARNING**: This model is under construction and contains serious problems that
|
||||
distort the results. See the github repository
|
||||
[issues](https://github.com/PyPSA/pypsa-eur-sec/issues) for some of the problems
|
||||
(please feel free to help or make suggestions). There is neither a full
|
||||
documentation nor a paper yet, but we hope to have a preprint out by the end of 2021.
|
||||
You can find out more about the model capabilities in [a recent
|
||||
presentation at EMP-E](https://nworbmot.org/energy/brown-empe.pdf) or the
|
||||
following [preprint with a description of the industry
|
||||
sector](https://arxiv.org/abs/2109.09563). We cannot support this model if you
|
||||
choose to use it.
|
||||
|
||||
PyPSA-Eur-Sec is an open model dataset of the European energy system at the
|
||||
transmission network level that covers the full ENTSO-E area.
|
||||
|
||||
PyPSA-Eur-Sec builds on the electricity generation and transmission
|
||||
model [PyPSA-Eur](https://github.com/PyPSA/pypsa-eur) to add demand
|
||||
@ -28,6 +17,18 @@ heating, biomass, industry and industrial feedstocks, agriculture,
|
||||
forestry and fishing. This completes the energy system and includes
|
||||
all greenhouse gas emitters except waste management and land use.
|
||||
|
||||
**WARNING**: PyPSA-Eur-Sec is under active development and has several
|
||||
[limitations](https://pypsa-eur-sec.readthedocs.io/en/latest/limitations.html) which
|
||||
you should understand before using the model. The github repository
|
||||
[issues](https://github.com/PyPSA/pypsa-eur-sec/issues) collects known
|
||||
topics we are working on (please feel free to help or make suggestions). There is neither a full
|
||||
documentation nor a paper yet, but we hope to have a preprint out by mid-2022.
|
||||
You can find out more about the model capabilities in [a recent
|
||||
presentation at EMP-E](https://nworbmot.org/energy/brown-empe.pdf) or the
|
||||
following [paper in Joule with a description of the industry
|
||||
sector](https://arxiv.org/abs/2109.09563). We cannot support this model if you
|
||||
choose to use it.
|
||||
|
||||
Please see the [documentation](https://pypsa-eur-sec.readthedocs.io/)
|
||||
for installation instructions and other useful information about the snakemake workflow.
|
||||
|
||||
|
62
Snakefile
62
Snakefile
@ -45,18 +45,22 @@ rule prepare_sector_networks:
|
||||
**config['scenario'])
|
||||
|
||||
datafiles = [
|
||||
"eea/UNFCCC_v23.csv",
|
||||
"switzerland-sfoe/switzerland-new_format.csv",
|
||||
"nuts/NUTS_RG_10M_2013_4326_LEVL_2.geojson",
|
||||
"myb1-2017-nitro.xls",
|
||||
"Industrial_Database.csv",
|
||||
"emobility/KFZ__count",
|
||||
"emobility/Pkw__count",
|
||||
"data/eea/UNFCCC_v23.csv",
|
||||
"data/switzerland-sfoe/switzerland-new_format.csv",
|
||||
"data/nuts/NUTS_RG_10M_2013_4326_LEVL_2.geojson",
|
||||
"data/myb1-2017-nitro.xls",
|
||||
"data/Industrial_Database.csv",
|
||||
"data/emobility/KFZ__count",
|
||||
"data/emobility/Pkw__count",
|
||||
"data/h2_salt_caverns_GWh_per_sqkm.geojson",
|
||||
directory("data/eurostat-energy_balances-june_2016_edition"),
|
||||
directory("data/eurostat-energy_balances-may_2018_edition"),
|
||||
directory("data/jrc-idees-2015"),
|
||||
]
|
||||
|
||||
if config.get('retrieve_sector_databundle', True):
|
||||
rule retrieve_sector_databundle:
|
||||
output: expand('data/{file}', file=datafiles)
|
||||
output: *datafiles
|
||||
log: "logs/retrieve_sector_databundle.log"
|
||||
script: 'scripts/retrieve_sector_databundle.py'
|
||||
|
||||
@ -252,9 +256,9 @@ rule build_biomass_potentials:
|
||||
enspreso_biomass=HTTP.remote("https://cidportal.jrc.ec.europa.eu/ftp/jrc-opendata/ENSPRESO/ENSPRESO_BIOMASS.xlsx", keep_local=True),
|
||||
nuts2="data/nuts/NUTS_RG_10M_2013_4326_LEVL_2.geojson", # https://gisco-services.ec.europa.eu/distribution/v2/nuts/download/#nuts21
|
||||
regions_onshore=pypsaeur("resources/regions_onshore_elec_s{simpl}_{clusters}.geojson"),
|
||||
nuts3_population="../pypsa-eur/data/bundle/nama_10r_3popgdp.tsv.gz",
|
||||
swiss_cantons="../pypsa-eur/data/bundle/ch_cantons.csv",
|
||||
swiss_population="../pypsa-eur/data/bundle/je-e-21.03.02.xls",
|
||||
nuts3_population=pypsaeur("data/bundle/nama_10r_3popgdp.tsv.gz"),
|
||||
swiss_cantons=pypsaeur("data/bundle/ch_cantons.csv"),
|
||||
swiss_population=pypsaeur("data/bundle/je-e-21.03.02.xls"),
|
||||
country_shapes=pypsaeur('resources/country_shapes.geojson')
|
||||
output:
|
||||
biomass_potentials_all='resources/biomass_potentials_all_s{simpl}_{clusters}.csv',
|
||||
@ -427,15 +431,45 @@ else:
|
||||
build_retro_cost_output = {}
|
||||
|
||||
|
||||
rule build_population_weighted_energy_totals:
|
||||
input:
|
||||
energy_totals='resources/energy_totals.csv',
|
||||
clustered_pop_layout="resources/pop_layout_elec_s{simpl}_{clusters}.csv"
|
||||
output: "resources/pop_weighted_energy_totals_s{simpl}_{clusters}.csv"
|
||||
threads: 1
|
||||
resources: mem_mb=2000
|
||||
script: "scripts/build_population_weighted_energy_totals.py"
|
||||
|
||||
|
||||
rule build_transport_demand:
|
||||
input:
|
||||
clustered_pop_layout="resources/pop_layout_elec_s{simpl}_{clusters}.csv",
|
||||
pop_weighted_energy_totals="resources/pop_weighted_energy_totals_s{simpl}_{clusters}.csv",
|
||||
transport_data='resources/transport_data.csv',
|
||||
traffic_data_KFZ="data/emobility/KFZ__count",
|
||||
traffic_data_Pkw="data/emobility/Pkw__count",
|
||||
temp_air_total="resources/temp_air_total_elec_s{simpl}_{clusters}.nc",
|
||||
output:
|
||||
transport_demand="resources/transport_demand_s{simpl}_{clusters}.csv",
|
||||
transport_data="resources/transport_data_s{simpl}_{clusters}.csv",
|
||||
avail_profile="resources/avail_profile_s{simpl}_{clusters}.csv",
|
||||
dsm_profile="resources/dsm_profile_s{simpl}_{clusters}.csv"
|
||||
threads: 1
|
||||
resources: mem_mb=2000
|
||||
script: "scripts/build_transport_demand.py"
|
||||
|
||||
|
||||
rule prepare_sector_network:
|
||||
input:
|
||||
overrides="data/override_component_attrs",
|
||||
network=pypsaeur('networks/elec_s{simpl}_{clusters}_ec_lv{lv}_{opts}.nc'),
|
||||
energy_totals_name='resources/energy_totals.csv',
|
||||
pop_weighted_energy_totals="resources/pop_weighted_energy_totals_s{simpl}_{clusters}.csv",
|
||||
transport_demand="resources/transport_demand_s{simpl}_{clusters}.csv",
|
||||
transport_data="resources/transport_data_s{simpl}_{clusters}.csv",
|
||||
avail_profile="resources/avail_profile_s{simpl}_{clusters}.csv",
|
||||
dsm_profile="resources/dsm_profile_s{simpl}_{clusters}.csv",
|
||||
co2_totals_name='resources/co2_totals.csv',
|
||||
transport_name='resources/transport_data.csv',
|
||||
traffic_data_KFZ="data/emobility/KFZ__count",
|
||||
traffic_data_Pkw="data/emobility/Pkw__count",
|
||||
biomass_potentials='resources/biomass_potentials_s{simpl}_{clusters}.csv',
|
||||
heat_profile="data/heat_load_profile_BDEW.csv",
|
||||
costs=CDIR + "costs_{planning_horizons}.csv",
|
||||
|
595
config.co2seq.yaml
Normal file
595
config.co2seq.yaml
Normal file
@ -0,0 +1,595 @@
|
||||
version: 0.6.0
|
||||
|
||||
logging_level: INFO
|
||||
|
||||
results_dir: results/
|
||||
summary_dir: results
|
||||
costs_dir: ../technology-data/outputs/
|
||||
run: 20211218-181-co2seq # use this to keep track of runs with different settings
|
||||
foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented)
|
||||
# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below
|
||||
|
||||
scenario:
|
||||
simpl: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt"
|
||||
- 1.5
|
||||
clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred
|
||||
- 181
|
||||
opts: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
sector_opts: # this is where the main scenario settings are
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq50
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq100
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq200
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq400
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq600
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq800
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq1000
|
||||
# to really understand the options here, look in scripts/prepare_sector_network.py
|
||||
# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
|
||||
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
|
||||
# xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours
|
||||
# single letters are sectors: T for land transport, H for building heating,
|
||||
# B for biomass supply, I for industry, shipping and aviation,
|
||||
# A for agriculture, forestry and fishing
|
||||
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
|
||||
# solar+p3 multiplies the available installable potential by factor 3
|
||||
# co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2
|
||||
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
|
||||
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
|
||||
# emissions throughout the transition path in the timeframe determined by the
|
||||
# planning_horizons), be:beta decay; ex:exponential decay
|
||||
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
|
||||
# decay with initial growth rate 0
|
||||
planning_horizons: # investment years for myopic and perfect; or costs year for overnight
|
||||
- 2030
|
||||
# for example, set to [2020, 2030, 2040, 2050] for myopic foresight
|
||||
|
||||
# CO2 budget as a fraction of 1990 emissions
|
||||
# this is over-ridden if CO2Lx is set in sector_opts
|
||||
# this is also over-ridden if cb is set in sector_opts
|
||||
co2_budget:
|
||||
2020: 0.7011648746
|
||||
2025: 0.5241935484
|
||||
2030: 0.2970430108
|
||||
2035: 0.1500896057
|
||||
2040: 0.0712365591
|
||||
2045: 0.0322580645
|
||||
2050: 0
|
||||
|
||||
# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec
|
||||
snapshots:
|
||||
# arguments to pd.date_range
|
||||
start: "2013-01-01"
|
||||
end: "2014-01-01"
|
||||
closed: left # end is not inclusive
|
||||
|
||||
atlite:
|
||||
cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc
|
||||
|
||||
# this information is NOT used but needed as an argument for
|
||||
# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py
|
||||
electricity:
|
||||
max_hours:
|
||||
battery: 6
|
||||
H2: 168
|
||||
|
||||
# regulate what components with which carriers are kept from PyPSA-Eur;
|
||||
# some technologies are removed because they are implemented differently
|
||||
# (e.g. battery or H2 storage) or have different year-dependent costs
|
||||
# in PyPSA-Eur-Sec
|
||||
pypsa_eur:
|
||||
Bus:
|
||||
- AC
|
||||
Link:
|
||||
- DC
|
||||
Generator:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
StorageUnit:
|
||||
- PHS
|
||||
- hydro
|
||||
Store: []
|
||||
|
||||
|
||||
energy:
|
||||
energy_totals_year: 2011
|
||||
base_emissions_year: 1990
|
||||
eurostat_report_year: 2016
|
||||
emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)"
|
||||
|
||||
biomass:
|
||||
year: 2030
|
||||
scenario: ENS_Med
|
||||
classes:
|
||||
solid biomass:
|
||||
- Agricultural waste
|
||||
- Fuelwood residues
|
||||
- Secondary Forestry residues - woodchips
|
||||
- Sawdust
|
||||
- Residues from landscape care
|
||||
- Municipal waste
|
||||
not included:
|
||||
- Sugar from sugar beet
|
||||
- Rape seed
|
||||
- "Sunflower, soya seed "
|
||||
- Bioethanol barley, wheat, grain maize, oats, other cereals and rye
|
||||
- Miscanthus, switchgrass, RCG
|
||||
- Willow
|
||||
- Poplar
|
||||
- FuelwoodRW
|
||||
- C&P_RW
|
||||
biogas:
|
||||
- Manure solid, liquid
|
||||
- Sludge
|
||||
|
||||
|
||||
solar_thermal:
|
||||
clearsky_model: simple # should be "simple" or "enhanced"?
|
||||
orientation:
|
||||
slope: 45.
|
||||
azimuth: 180.
|
||||
|
||||
# only relevant for foresight = myopic or perfect
|
||||
existing_capacities:
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019]
|
||||
threshold_capacity: 10
|
||||
conventional_carriers:
|
||||
- lignite
|
||||
- coal
|
||||
- oil
|
||||
- uranium
|
||||
|
||||
|
||||
sector:
|
||||
district_heating:
|
||||
potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating
|
||||
# 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
|
||||
progress: 1
|
||||
# 2020: 0.0
|
||||
# 2030: 0.3
|
||||
# 2040: 0.6
|
||||
# 2050: 1.0
|
||||
district_heating_loss: 0.15
|
||||
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
|
||||
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
|
||||
transport_heating_deadband_upper: 20.
|
||||
transport_heating_deadband_lower: 15.
|
||||
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
|
||||
ICE_upper_degree_factor: 1.6
|
||||
EV_lower_degree_factor: 0.98
|
||||
EV_upper_degree_factor: 0.63
|
||||
bev_dsm: true #turns on EV battery
|
||||
bev_availability: 0.5 #How many cars do smart charging
|
||||
bev_energy: 0.05 #average battery size in MWh
|
||||
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
|
||||
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
|
||||
bev_charge_rate: 0.011 #3-phase charger with 11 kW
|
||||
bev_avail_max: 0.95
|
||||
bev_avail_mean: 0.8
|
||||
v2g: true #allows feed-in to grid from EV battery
|
||||
#what is not EV or FCEV is oil-fuelled ICE
|
||||
land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs
|
||||
# 2020: 0
|
||||
# 2030: 0.05
|
||||
# 2040: 0.1
|
||||
# 2050: 0.15
|
||||
land_transport_electric_share: 0.85 # 1 means all EVs
|
||||
# 2020: 0
|
||||
# 2030: 0.25
|
||||
# 2040: 0.6
|
||||
# 2050: 0.85
|
||||
transport_fuel_cell_efficiency: 0.5
|
||||
transport_internal_combustion_efficiency: 0.3
|
||||
agriculture_machinery_electric_share: 0
|
||||
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
|
||||
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
|
||||
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||
shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands
|
||||
shipping_hydrogen_share: 1 # 1 means all hydrogen FC
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.15
|
||||
# 2040: 0.3
|
||||
# 2045: 0.6
|
||||
# 2050: 1
|
||||
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
|
||||
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
|
||||
# this can represent e.g. building renovation, building demolition, or if
|
||||
# the factor is negative: increasing floor area, increased thermal comfort, population growth
|
||||
reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand
|
||||
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
|
||||
# 2020: 0.10 # this results in a space heat demand reduction of 10%
|
||||
# 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
|
||||
# 2030: 0.09
|
||||
# 2035: 0.11
|
||||
# 2040: 0.16
|
||||
# 2045: 0.21
|
||||
# 2050: 0.29
|
||||
retrofitting : # co-optimises building renovation to reduce space heat demand
|
||||
retro_endogen: false # co-optimise space heat savings
|
||||
cost_factor: 1.0 # weight costs for building renovation
|
||||
interest_rate: 0.04 # for investment in building components
|
||||
annualise_cost: true # annualise the investment costs
|
||||
tax_weighting: false # weight costs depending on taxes in countries
|
||||
construction_index: true # weight costs depending on labour/material costs per country
|
||||
tes: true
|
||||
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
|
||||
decentral: 3
|
||||
central: 180
|
||||
boilers: true
|
||||
oil_boilers: false
|
||||
chp: true
|
||||
micro_chp: false
|
||||
solar_thermal: true
|
||||
solar_cf_correction: 0.788457 # = >>> 1/1.2683
|
||||
marginal_cost_storage: 0. #1e-4
|
||||
methanation: true
|
||||
helmeth: false
|
||||
dac: true
|
||||
co2_vent: false
|
||||
SMR: true
|
||||
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
|
||||
co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2
|
||||
co2_network: false
|
||||
cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture
|
||||
hydrogen_underground_storage: true
|
||||
hydrogen_underground_storage_locations:
|
||||
# - onshore # more than 50 km from sea
|
||||
- nearshore # within 50 km of sea
|
||||
# - offshore
|
||||
use_fischer_tropsch_waste_heat: true
|
||||
use_fuel_cell_waste_heat: true
|
||||
electricity_distribution_grid: true
|
||||
electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
electricity_grid_connection: true # only applies to onshore wind and utility PV
|
||||
H2_network: true
|
||||
gas_network: false
|
||||
H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes
|
||||
# according to hydrogen backbone strategy (April, 2020) p.15
|
||||
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
||||
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
||||
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
||||
gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
||||
gas_distribution_grid: true
|
||||
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
biomass_transport: false # biomass transport between nodes
|
||||
conventional_generation: # generator : carrier
|
||||
OCGT: gas
|
||||
|
||||
|
||||
industry:
|
||||
St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6
|
||||
# 2020: 0.6
|
||||
# 2025: 0.55
|
||||
# 2030: 0.5
|
||||
# 2035: 0.45
|
||||
# 2040: 0.4
|
||||
# 2045: 0.35
|
||||
# 2050: 0.3
|
||||
DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.2
|
||||
# 2040: 0.4
|
||||
# 2045: 0.7
|
||||
# 2050: 1
|
||||
H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279
|
||||
elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf
|
||||
Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4
|
||||
# 2020: 0.4
|
||||
# 2025: 0.375
|
||||
# 2030: 0.35
|
||||
# 2035: 0.325
|
||||
# 2040: 0.3
|
||||
# 2045: 0.25
|
||||
# 2050: 0.2
|
||||
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
|
||||
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
|
||||
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)
|
||||
MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
|
||||
NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
|
||||
petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
|
||||
HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route
|
||||
HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling
|
||||
HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling
|
||||
HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX
|
||||
MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756.
|
||||
MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking
|
||||
chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43
|
||||
MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43
|
||||
MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process
|
||||
methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62
|
||||
MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65
|
||||
MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65
|
||||
hotmaps_locate_missing: false
|
||||
reference_year: 2015
|
||||
# references:
|
||||
# DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf
|
||||
# Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050
|
||||
|
||||
costs:
|
||||
lifetime: 25 #default lifetime
|
||||
# From a Lion Hirth paper, also reflects average of Noothout et al 2016
|
||||
discountrate: 0.07
|
||||
# [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501
|
||||
USD2013_to_EUR2013: 0.7532
|
||||
|
||||
# Marginal and capital costs can be overwritten
|
||||
# capital_cost:
|
||||
# onwind: 500
|
||||
marginal_cost:
|
||||
solar: 0.01
|
||||
onwind: 0.015
|
||||
offwind: 0.015
|
||||
hydro: 0.
|
||||
H2: 0.
|
||||
battery: 0.
|
||||
|
||||
emission_prices: # only used with the option Ep (emission prices)
|
||||
co2: 0.
|
||||
|
||||
lines:
|
||||
length_factor: 1.25 #to estimate offwind connection costs
|
||||
|
||||
|
||||
solving:
|
||||
#tmpdir: "path/to/tmp"
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
clip_p_max_pu: 1.e-2
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
skip_iterations: true
|
||||
track_iterations: false
|
||||
min_iterations: 4
|
||||
max_iterations: 6
|
||||
keep_shadowprices:
|
||||
- Bus
|
||||
- Line
|
||||
- Link
|
||||
- Transformer
|
||||
- GlobalConstraint
|
||||
- Generator
|
||||
- Store
|
||||
- StorageUnit
|
||||
solver:
|
||||
name: gurobi
|
||||
threads: 4
|
||||
method: 2 # barrier
|
||||
crossover: 0
|
||||
BarConvTol: 1.e-4
|
||||
Seed: 123
|
||||
AggFill: 0
|
||||
PreDual: 0
|
||||
GURO_PAR_BARDENSETHRESH: 200
|
||||
#FeasibilityTol: 1.e-6
|
||||
|
||||
#name: cplex
|
||||
#threads: 4
|
||||
#lpmethod: 4 # barrier
|
||||
#solutiontype: 2 # non basic solution, ie no crossover
|
||||
#barrier_convergetol: 1.e-5
|
||||
#feasopt_tolerance: 1.e-6
|
||||
mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
|
||||
|
||||
plotting:
|
||||
map:
|
||||
boundaries: [-11, 30, 34, 71]
|
||||
color_geomap:
|
||||
ocean: white
|
||||
land: white
|
||||
costs_max: 1000
|
||||
costs_threshold: 1
|
||||
energy_max: 20000
|
||||
energy_min: -20000
|
||||
energy_threshold: 50
|
||||
vre_techs:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
renewable_storage_techs:
|
||||
- PHS
|
||||
- hydro
|
||||
conv_techs:
|
||||
- OCGT
|
||||
- CCGT
|
||||
- Nuclear
|
||||
- Coal
|
||||
storage_techs:
|
||||
- hydro+PHS
|
||||
- battery
|
||||
- H2
|
||||
load_carriers:
|
||||
- AC load
|
||||
AC_carriers:
|
||||
- AC line
|
||||
- AC transformer
|
||||
link_carriers:
|
||||
- DC line
|
||||
- Converter AC-DC
|
||||
heat_links:
|
||||
- heat pump
|
||||
- resistive heater
|
||||
- CHP heat
|
||||
- CHP electric
|
||||
- gas boiler
|
||||
- central heat pump
|
||||
- central resistive heater
|
||||
- central CHP heat
|
||||
- central CHP electric
|
||||
- central gas boiler
|
||||
heat_generators:
|
||||
- gas boiler
|
||||
- central gas boiler
|
||||
- solar thermal collector
|
||||
- central solar thermal collector
|
||||
tech_colors:
|
||||
# wind
|
||||
onwind: "#235ebc"
|
||||
onshore wind: "#235ebc"
|
||||
offwind: "#6895dd"
|
||||
offshore wind: "#6895dd"
|
||||
offwind-ac: "#6895dd"
|
||||
offshore wind (AC): "#6895dd"
|
||||
offwind-dc: "#74c6f2"
|
||||
offshore wind (DC): "#74c6f2"
|
||||
# water
|
||||
hydro: '#298c81'
|
||||
hydro reservoir: '#298c81'
|
||||
ror: '#3dbfb0'
|
||||
run of river: '#3dbfb0'
|
||||
hydroelectricity: '#298c81'
|
||||
PHS: '#51dbcc'
|
||||
wave: '#a7d4cf'
|
||||
# solar
|
||||
solar: "#f9d002"
|
||||
solar PV: "#f9d002"
|
||||
solar thermal: '#ffbf2b'
|
||||
solar rooftop: '#ffea80'
|
||||
# gas
|
||||
OCGT: '#e0986c'
|
||||
OCGT marginal: '#e0986c'
|
||||
OCGT-heat: '#e0986c'
|
||||
gas boiler: '#db6a25'
|
||||
gas boilers: '#db6a25'
|
||||
gas boiler marginal: '#db6a25'
|
||||
gas: '#e05b09'
|
||||
natural gas: '#e05b09'
|
||||
CCGT: '#a85522'
|
||||
CCGT marginal: '#a85522'
|
||||
gas for industry co2 to atmosphere: '#692e0a'
|
||||
gas for industry co2 to stored: '#8a3400'
|
||||
gas for industry: '#853403'
|
||||
gas for industry CC: '#692e0a'
|
||||
gas pipeline: '#ebbca0'
|
||||
# oil
|
||||
oil: '#c9c9c9'
|
||||
oil boiler: '#adadad'
|
||||
agriculture machinery oil: '#949494'
|
||||
shipping oil: "#808080"
|
||||
land transport oil: '#afafaf'
|
||||
# nuclear
|
||||
Nuclear: '#ff8c00'
|
||||
Nuclear marginal: '#ff8c00'
|
||||
nuclear: '#ff8c00'
|
||||
uranium: '#ff8c00'
|
||||
# coal
|
||||
Coal: '#545454'
|
||||
coal: '#545454'
|
||||
Coal marginal: '#545454'
|
||||
Lignite: '#826837'
|
||||
lignite: '#826837'
|
||||
Lignite marginal: '#826837'
|
||||
# biomass
|
||||
biogas: '#e3d37d'
|
||||
solid biomass: '#baa741'
|
||||
solid biomass transport: '#baa741'
|
||||
solid biomass for industry: '#7a6d26'
|
||||
solid biomass for industry CC: '#47411c'
|
||||
solid biomass for industry co2 from atmosphere: '#736412'
|
||||
solid biomass for industry co2 to stored: '#47411c'
|
||||
# power transmission
|
||||
lines: '#6c9459'
|
||||
transmission lines: '#6c9459'
|
||||
electricity distribution grid: '#97ad8c'
|
||||
# electricity demand
|
||||
Electric load: '#110d63'
|
||||
electric demand: '#110d63'
|
||||
electricity: '#110d63'
|
||||
industry electricity: '#2d2a66'
|
||||
industry new electricity: '#2d2a66'
|
||||
agriculture electricity: '#494778'
|
||||
# battery + EVs
|
||||
battery: '#ace37f'
|
||||
battery storage: '#ace37f'
|
||||
home battery: '#80c944'
|
||||
home battery storage: '#80c944'
|
||||
BEV charger: '#baf238'
|
||||
V2G: '#e5ffa8'
|
||||
land transport EV: '#baf238'
|
||||
Li ion: '#baf238'
|
||||
# hot water storage
|
||||
water tanks: '#e69487'
|
||||
hot water storage: '#e69487'
|
||||
hot water charging: '#e69487'
|
||||
hot water discharging: '#e69487'
|
||||
# heat demand
|
||||
Heat load: '#cc1f1f'
|
||||
heat: '#cc1f1f'
|
||||
heat demand: '#cc1f1f'
|
||||
rural heat: '#ff5c5c'
|
||||
central heat: '#cc1f1f'
|
||||
decentral heat: '#750606'
|
||||
low-temperature heat for industry: '#8f2727'
|
||||
process heat: '#ff0000'
|
||||
agriculture heat: '#d9a5a5'
|
||||
# heat supply
|
||||
heat pumps: '#2fb537'
|
||||
heat pump: '#2fb537'
|
||||
air heat pump: '#36eb41'
|
||||
ground heat pump: '#2fb537'
|
||||
Ambient: '#98eb9d'
|
||||
CHP: '#8a5751'
|
||||
CHP CC: '#634643'
|
||||
CHP heat: '#8a5751'
|
||||
CHP electric: '#8a5751'
|
||||
district heating: '#e8beac'
|
||||
resistive heater: '#c78536'
|
||||
retrofitting: '#8487e8'
|
||||
building retrofitting: '#8487e8'
|
||||
# hydrogen
|
||||
H2 for industry: "#f073da"
|
||||
H2 for shipping: "#ebaee0"
|
||||
H2: '#bf13a0'
|
||||
SMR: '#870c71'
|
||||
SMR CC: '#4f1745'
|
||||
H2 liquefaction: '#d647bd'
|
||||
hydrogen storage: '#bf13a0'
|
||||
land transport fuel cell: '#6b3161'
|
||||
H2 pipeline: '#f081dc'
|
||||
H2 Fuel Cell: '#c251ae'
|
||||
H2 Electrolysis: '#ff29d9'
|
||||
# syngas
|
||||
Sabatier: '#9850ad'
|
||||
methanation: '#c44ce6'
|
||||
helmeth: '#e899ff'
|
||||
# synfuels
|
||||
Fischer-Tropsch: '#25c49a'
|
||||
kerosene for aviation: '#a1ffe6'
|
||||
naphtha for industry: '#57ebc4'
|
||||
# co2
|
||||
CC: '#9e132c'
|
||||
CO2 sequestration: '#9e132c'
|
||||
DAC: '#ff5270'
|
||||
co2 stored: '#f2385a'
|
||||
co2: '#f29dae'
|
||||
co2 vent: '#ffd4dc'
|
||||
CO2 pipeline: '#f5627f'
|
||||
# emissions
|
||||
process emissions CC: '#000000'
|
||||
process emissions: '#222222'
|
||||
process emissions to stored: '#444444'
|
||||
process emissions to atmosphere: '#888888'
|
||||
oil emissions: '#aaaaaa'
|
||||
shipping oil emissions: "#555555"
|
||||
land transport oil emissions: '#777777'
|
||||
agriculture machinery oil emissions: '#333333'
|
||||
# other
|
||||
shipping: '#03a2ff'
|
||||
power-to-heat: '#cc1f1f'
|
||||
power-to-gas: '#c44ce6'
|
||||
power-to-liquid: '#25c49a'
|
||||
gas-to-power/heat: '#ee8340'
|
594
config.cost.yaml
Normal file
594
config.cost.yaml
Normal file
@ -0,0 +1,594 @@
|
||||
version: 0.6.0
|
||||
|
||||
logging_level: INFO
|
||||
|
||||
results_dir: results/
|
||||
summary_dir: results
|
||||
costs_dir: ../technology-data/outputs/
|
||||
run: 20211218-181-cost # use this to keep track of runs with different settings
|
||||
foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented)
|
||||
# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below
|
||||
|
||||
scenario:
|
||||
simpl: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt"
|
||||
- 1.5
|
||||
clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred
|
||||
- 181
|
||||
opts: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
sector_opts: # this is where the main scenario settings are
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5-solar-c0.75
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5-wind-c0.75
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5-Electrolysis-c0.75
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5-SMR-c0.75
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5-battery-c0.75
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5-DAC-c0.75
|
||||
# to really understand the options here, look in scripts/prepare_sector_network.py
|
||||
# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
|
||||
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
|
||||
# xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours
|
||||
# single letters are sectors: T for land transport, H for building heating,
|
||||
# B for biomass supply, I for industry, shipping and aviation,
|
||||
# A for agriculture, forestry and fishing
|
||||
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
|
||||
# solar+p3 multiplies the available installable potential by factor 3
|
||||
# co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2
|
||||
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
|
||||
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
|
||||
# emissions throughout the transition path in the timeframe determined by the
|
||||
# planning_horizons), be:beta decay; ex:exponential decay
|
||||
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
|
||||
# decay with initial growth rate 0
|
||||
planning_horizons: # investment years for myopic and perfect; or costs year for overnight
|
||||
- 2030
|
||||
# for example, set to [2020, 2030, 2040, 2050] for myopic foresight
|
||||
|
||||
# CO2 budget as a fraction of 1990 emissions
|
||||
# this is over-ridden if CO2Lx is set in sector_opts
|
||||
# this is also over-ridden if cb is set in sector_opts
|
||||
co2_budget:
|
||||
2020: 0.7011648746
|
||||
2025: 0.5241935484
|
||||
2030: 0.2970430108
|
||||
2035: 0.1500896057
|
||||
2040: 0.0712365591
|
||||
2045: 0.0322580645
|
||||
2050: 0
|
||||
|
||||
# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec
|
||||
snapshots:
|
||||
# arguments to pd.date_range
|
||||
start: "2013-01-01"
|
||||
end: "2014-01-01"
|
||||
closed: left # end is not inclusive
|
||||
|
||||
atlite:
|
||||
cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc
|
||||
|
||||
# this information is NOT used but needed as an argument for
|
||||
# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py
|
||||
electricity:
|
||||
max_hours:
|
||||
battery: 6
|
||||
H2: 168
|
||||
|
||||
# regulate what components with which carriers are kept from PyPSA-Eur;
|
||||
# some technologies are removed because they are implemented differently
|
||||
# (e.g. battery or H2 storage) or have different year-dependent costs
|
||||
# in PyPSA-Eur-Sec
|
||||
pypsa_eur:
|
||||
Bus:
|
||||
- AC
|
||||
Link:
|
||||
- DC
|
||||
Generator:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
StorageUnit:
|
||||
- PHS
|
||||
- hydro
|
||||
Store: []
|
||||
|
||||
|
||||
energy:
|
||||
energy_totals_year: 2011
|
||||
base_emissions_year: 1990
|
||||
eurostat_report_year: 2016
|
||||
emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)"
|
||||
|
||||
biomass:
|
||||
year: 2030
|
||||
scenario: ENS_Med
|
||||
classes:
|
||||
solid biomass:
|
||||
- Agricultural waste
|
||||
- Fuelwood residues
|
||||
- Secondary Forestry residues - woodchips
|
||||
- Sawdust
|
||||
- Residues from landscape care
|
||||
- Municipal waste
|
||||
not included:
|
||||
- Sugar from sugar beet
|
||||
- Rape seed
|
||||
- "Sunflower, soya seed "
|
||||
- Bioethanol barley, wheat, grain maize, oats, other cereals and rye
|
||||
- Miscanthus, switchgrass, RCG
|
||||
- Willow
|
||||
- Poplar
|
||||
- FuelwoodRW
|
||||
- C&P_RW
|
||||
biogas:
|
||||
- Manure solid, liquid
|
||||
- Sludge
|
||||
|
||||
|
||||
solar_thermal:
|
||||
clearsky_model: simple # should be "simple" or "enhanced"?
|
||||
orientation:
|
||||
slope: 45.
|
||||
azimuth: 180.
|
||||
|
||||
# only relevant for foresight = myopic or perfect
|
||||
existing_capacities:
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019]
|
||||
threshold_capacity: 10
|
||||
conventional_carriers:
|
||||
- lignite
|
||||
- coal
|
||||
- oil
|
||||
- uranium
|
||||
|
||||
|
||||
sector:
|
||||
district_heating:
|
||||
potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating
|
||||
# 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
|
||||
progress: 1
|
||||
# 2020: 0.0
|
||||
# 2030: 0.3
|
||||
# 2040: 0.6
|
||||
# 2050: 1.0
|
||||
district_heating_loss: 0.15
|
||||
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
|
||||
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
|
||||
transport_heating_deadband_upper: 20.
|
||||
transport_heating_deadband_lower: 15.
|
||||
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
|
||||
ICE_upper_degree_factor: 1.6
|
||||
EV_lower_degree_factor: 0.98
|
||||
EV_upper_degree_factor: 0.63
|
||||
bev_dsm: true #turns on EV battery
|
||||
bev_availability: 0.5 #How many cars do smart charging
|
||||
bev_energy: 0.05 #average battery size in MWh
|
||||
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
|
||||
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
|
||||
bev_charge_rate: 0.011 #3-phase charger with 11 kW
|
||||
bev_avail_max: 0.95
|
||||
bev_avail_mean: 0.8
|
||||
v2g: true #allows feed-in to grid from EV battery
|
||||
#what is not EV or FCEV is oil-fuelled ICE
|
||||
land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs
|
||||
# 2020: 0
|
||||
# 2030: 0.05
|
||||
# 2040: 0.1
|
||||
# 2050: 0.15
|
||||
land_transport_electric_share: 0.85 # 1 means all EVs
|
||||
# 2020: 0
|
||||
# 2030: 0.25
|
||||
# 2040: 0.6
|
||||
# 2050: 0.85
|
||||
transport_fuel_cell_efficiency: 0.5
|
||||
transport_internal_combustion_efficiency: 0.3
|
||||
agriculture_machinery_electric_share: 0
|
||||
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
|
||||
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
|
||||
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||
shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands
|
||||
shipping_hydrogen_share: 1 # 1 means all hydrogen FC
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.15
|
||||
# 2040: 0.3
|
||||
# 2045: 0.6
|
||||
# 2050: 1
|
||||
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
|
||||
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
|
||||
# this can represent e.g. building renovation, building demolition, or if
|
||||
# the factor is negative: increasing floor area, increased thermal comfort, population growth
|
||||
reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand
|
||||
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
|
||||
# 2020: 0.10 # this results in a space heat demand reduction of 10%
|
||||
# 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
|
||||
# 2030: 0.09
|
||||
# 2035: 0.11
|
||||
# 2040: 0.16
|
||||
# 2045: 0.21
|
||||
# 2050: 0.29
|
||||
retrofitting : # co-optimises building renovation to reduce space heat demand
|
||||
retro_endogen: false # co-optimise space heat savings
|
||||
cost_factor: 1.0 # weight costs for building renovation
|
||||
interest_rate: 0.04 # for investment in building components
|
||||
annualise_cost: true # annualise the investment costs
|
||||
tax_weighting: false # weight costs depending on taxes in countries
|
||||
construction_index: true # weight costs depending on labour/material costs per country
|
||||
tes: true
|
||||
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
|
||||
decentral: 3
|
||||
central: 180
|
||||
boilers: true
|
||||
oil_boilers: false
|
||||
chp: true
|
||||
micro_chp: false
|
||||
solar_thermal: true
|
||||
solar_cf_correction: 0.788457 # = >>> 1/1.2683
|
||||
marginal_cost_storage: 0. #1e-4
|
||||
methanation: true
|
||||
helmeth: false
|
||||
dac: true
|
||||
co2_vent: false
|
||||
SMR: true
|
||||
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
|
||||
co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2
|
||||
co2_network: false
|
||||
cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture
|
||||
hydrogen_underground_storage: true
|
||||
hydrogen_underground_storage_locations:
|
||||
# - onshore # more than 50 km from sea
|
||||
- nearshore # within 50 km of sea
|
||||
# - offshore
|
||||
use_fischer_tropsch_waste_heat: true
|
||||
use_fuel_cell_waste_heat: true
|
||||
electricity_distribution_grid: true
|
||||
electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
electricity_grid_connection: true # only applies to onshore wind and utility PV
|
||||
H2_network: true
|
||||
gas_network: false
|
||||
H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes
|
||||
# according to hydrogen backbone strategy (April, 2020) p.15
|
||||
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
||||
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
||||
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
||||
gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
||||
gas_distribution_grid: true
|
||||
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
biomass_transport: false # biomass transport between nodes
|
||||
conventional_generation: # generator : carrier
|
||||
OCGT: gas
|
||||
|
||||
|
||||
industry:
|
||||
St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6
|
||||
# 2020: 0.6
|
||||
# 2025: 0.55
|
||||
# 2030: 0.5
|
||||
# 2035: 0.45
|
||||
# 2040: 0.4
|
||||
# 2045: 0.35
|
||||
# 2050: 0.3
|
||||
DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.2
|
||||
# 2040: 0.4
|
||||
# 2045: 0.7
|
||||
# 2050: 1
|
||||
H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279
|
||||
elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf
|
||||
Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4
|
||||
# 2020: 0.4
|
||||
# 2025: 0.375
|
||||
# 2030: 0.35
|
||||
# 2035: 0.325
|
||||
# 2040: 0.3
|
||||
# 2045: 0.25
|
||||
# 2050: 0.2
|
||||
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
|
||||
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
|
||||
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)
|
||||
MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
|
||||
NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
|
||||
petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
|
||||
HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route
|
||||
HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling
|
||||
HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling
|
||||
HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX
|
||||
MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756.
|
||||
MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking
|
||||
chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43
|
||||
MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43
|
||||
MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process
|
||||
methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62
|
||||
MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65
|
||||
MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65
|
||||
hotmaps_locate_missing: false
|
||||
reference_year: 2015
|
||||
# references:
|
||||
# DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf
|
||||
# Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050
|
||||
|
||||
costs:
|
||||
lifetime: 25 #default lifetime
|
||||
# From a Lion Hirth paper, also reflects average of Noothout et al 2016
|
||||
discountrate: 0.07
|
||||
# [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501
|
||||
USD2013_to_EUR2013: 0.7532
|
||||
|
||||
# Marginal and capital costs can be overwritten
|
||||
# capital_cost:
|
||||
# onwind: 500
|
||||
marginal_cost:
|
||||
solar: 0.01
|
||||
onwind: 0.015
|
||||
offwind: 0.015
|
||||
hydro: 0.
|
||||
H2: 0.
|
||||
battery: 0.
|
||||
|
||||
emission_prices: # only used with the option Ep (emission prices)
|
||||
co2: 0.
|
||||
|
||||
lines:
|
||||
length_factor: 1.25 #to estimate offwind connection costs
|
||||
|
||||
|
||||
solving:
|
||||
#tmpdir: "path/to/tmp"
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
clip_p_max_pu: 1.e-2
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
skip_iterations: true
|
||||
track_iterations: false
|
||||
min_iterations: 4
|
||||
max_iterations: 6
|
||||
keep_shadowprices:
|
||||
- Bus
|
||||
- Line
|
||||
- Link
|
||||
- Transformer
|
||||
- GlobalConstraint
|
||||
- Generator
|
||||
- Store
|
||||
- StorageUnit
|
||||
solver:
|
||||
name: gurobi
|
||||
threads: 4
|
||||
method: 2 # barrier
|
||||
crossover: 0
|
||||
BarConvTol: 1.e-4
|
||||
Seed: 123
|
||||
AggFill: 0
|
||||
PreDual: 0
|
||||
GURO_PAR_BARDENSETHRESH: 200
|
||||
#FeasibilityTol: 1.e-6
|
||||
|
||||
#name: cplex
|
||||
#threads: 4
|
||||
#lpmethod: 4 # barrier
|
||||
#solutiontype: 2 # non basic solution, ie no crossover
|
||||
#barrier_convergetol: 1.e-5
|
||||
#feasopt_tolerance: 1.e-6
|
||||
mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
|
||||
|
||||
plotting:
|
||||
map:
|
||||
boundaries: [-11, 30, 34, 71]
|
||||
color_geomap:
|
||||
ocean: white
|
||||
land: white
|
||||
costs_max: 1000
|
||||
costs_threshold: 1
|
||||
energy_max: 20000
|
||||
energy_min: -20000
|
||||
energy_threshold: 50
|
||||
vre_techs:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
renewable_storage_techs:
|
||||
- PHS
|
||||
- hydro
|
||||
conv_techs:
|
||||
- OCGT
|
||||
- CCGT
|
||||
- Nuclear
|
||||
- Coal
|
||||
storage_techs:
|
||||
- hydro+PHS
|
||||
- battery
|
||||
- H2
|
||||
load_carriers:
|
||||
- AC load
|
||||
AC_carriers:
|
||||
- AC line
|
||||
- AC transformer
|
||||
link_carriers:
|
||||
- DC line
|
||||
- Converter AC-DC
|
||||
heat_links:
|
||||
- heat pump
|
||||
- resistive heater
|
||||
- CHP heat
|
||||
- CHP electric
|
||||
- gas boiler
|
||||
- central heat pump
|
||||
- central resistive heater
|
||||
- central CHP heat
|
||||
- central CHP electric
|
||||
- central gas boiler
|
||||
heat_generators:
|
||||
- gas boiler
|
||||
- central gas boiler
|
||||
- solar thermal collector
|
||||
- central solar thermal collector
|
||||
tech_colors:
|
||||
# wind
|
||||
onwind: "#235ebc"
|
||||
onshore wind: "#235ebc"
|
||||
offwind: "#6895dd"
|
||||
offshore wind: "#6895dd"
|
||||
offwind-ac: "#6895dd"
|
||||
offshore wind (AC): "#6895dd"
|
||||
offwind-dc: "#74c6f2"
|
||||
offshore wind (DC): "#74c6f2"
|
||||
# water
|
||||
hydro: '#298c81'
|
||||
hydro reservoir: '#298c81'
|
||||
ror: '#3dbfb0'
|
||||
run of river: '#3dbfb0'
|
||||
hydroelectricity: '#298c81'
|
||||
PHS: '#51dbcc'
|
||||
wave: '#a7d4cf'
|
||||
# solar
|
||||
solar: "#f9d002"
|
||||
solar PV: "#f9d002"
|
||||
solar thermal: '#ffbf2b'
|
||||
solar rooftop: '#ffea80'
|
||||
# gas
|
||||
OCGT: '#e0986c'
|
||||
OCGT marginal: '#e0986c'
|
||||
OCGT-heat: '#e0986c'
|
||||
gas boiler: '#db6a25'
|
||||
gas boilers: '#db6a25'
|
||||
gas boiler marginal: '#db6a25'
|
||||
gas: '#e05b09'
|
||||
natural gas: '#e05b09'
|
||||
CCGT: '#a85522'
|
||||
CCGT marginal: '#a85522'
|
||||
gas for industry co2 to atmosphere: '#692e0a'
|
||||
gas for industry co2 to stored: '#8a3400'
|
||||
gas for industry: '#853403'
|
||||
gas for industry CC: '#692e0a'
|
||||
gas pipeline: '#ebbca0'
|
||||
# oil
|
||||
oil: '#c9c9c9'
|
||||
oil boiler: '#adadad'
|
||||
agriculture machinery oil: '#949494'
|
||||
shipping oil: "#808080"
|
||||
land transport oil: '#afafaf'
|
||||
# nuclear
|
||||
Nuclear: '#ff8c00'
|
||||
Nuclear marginal: '#ff8c00'
|
||||
nuclear: '#ff8c00'
|
||||
uranium: '#ff8c00'
|
||||
# coal
|
||||
Coal: '#545454'
|
||||
coal: '#545454'
|
||||
Coal marginal: '#545454'
|
||||
Lignite: '#826837'
|
||||
lignite: '#826837'
|
||||
Lignite marginal: '#826837'
|
||||
# biomass
|
||||
biogas: '#e3d37d'
|
||||
solid biomass: '#baa741'
|
||||
solid biomass transport: '#baa741'
|
||||
solid biomass for industry: '#7a6d26'
|
||||
solid biomass for industry CC: '#47411c'
|
||||
solid biomass for industry co2 from atmosphere: '#736412'
|
||||
solid biomass for industry co2 to stored: '#47411c'
|
||||
# power transmission
|
||||
lines: '#6c9459'
|
||||
transmission lines: '#6c9459'
|
||||
electricity distribution grid: '#97ad8c'
|
||||
# electricity demand
|
||||
Electric load: '#110d63'
|
||||
electric demand: '#110d63'
|
||||
electricity: '#110d63'
|
||||
industry electricity: '#2d2a66'
|
||||
industry new electricity: '#2d2a66'
|
||||
agriculture electricity: '#494778'
|
||||
# battery + EVs
|
||||
battery: '#ace37f'
|
||||
battery storage: '#ace37f'
|
||||
home battery: '#80c944'
|
||||
home battery storage: '#80c944'
|
||||
BEV charger: '#baf238'
|
||||
V2G: '#e5ffa8'
|
||||
land transport EV: '#baf238'
|
||||
Li ion: '#baf238'
|
||||
# hot water storage
|
||||
water tanks: '#e69487'
|
||||
hot water storage: '#e69487'
|
||||
hot water charging: '#e69487'
|
||||
hot water discharging: '#e69487'
|
||||
# heat demand
|
||||
Heat load: '#cc1f1f'
|
||||
heat: '#cc1f1f'
|
||||
heat demand: '#cc1f1f'
|
||||
rural heat: '#ff5c5c'
|
||||
central heat: '#cc1f1f'
|
||||
decentral heat: '#750606'
|
||||
low-temperature heat for industry: '#8f2727'
|
||||
process heat: '#ff0000'
|
||||
agriculture heat: '#d9a5a5'
|
||||
# heat supply
|
||||
heat pumps: '#2fb537'
|
||||
heat pump: '#2fb537'
|
||||
air heat pump: '#36eb41'
|
||||
ground heat pump: '#2fb537'
|
||||
Ambient: '#98eb9d'
|
||||
CHP: '#8a5751'
|
||||
CHP CC: '#634643'
|
||||
CHP heat: '#8a5751'
|
||||
CHP electric: '#8a5751'
|
||||
district heating: '#e8beac'
|
||||
resistive heater: '#c78536'
|
||||
retrofitting: '#8487e8'
|
||||
building retrofitting: '#8487e8'
|
||||
# hydrogen
|
||||
H2 for industry: "#f073da"
|
||||
H2 for shipping: "#ebaee0"
|
||||
H2: '#bf13a0'
|
||||
SMR: '#870c71'
|
||||
SMR CC: '#4f1745'
|
||||
H2 liquefaction: '#d647bd'
|
||||
hydrogen storage: '#bf13a0'
|
||||
land transport fuel cell: '#6b3161'
|
||||
H2 pipeline: '#f081dc'
|
||||
H2 Fuel Cell: '#c251ae'
|
||||
H2 Electrolysis: '#ff29d9'
|
||||
# syngas
|
||||
Sabatier: '#9850ad'
|
||||
methanation: '#c44ce6'
|
||||
helmeth: '#e899ff'
|
||||
# synfuels
|
||||
Fischer-Tropsch: '#25c49a'
|
||||
kerosene for aviation: '#a1ffe6'
|
||||
naphtha for industry: '#57ebc4'
|
||||
# co2
|
||||
CC: '#9e132c'
|
||||
CO2 sequestration: '#9e132c'
|
||||
DAC: '#ff5270'
|
||||
co2 stored: '#f2385a'
|
||||
co2: '#f29dae'
|
||||
co2 vent: '#ffd4dc'
|
||||
CO2 pipeline: '#f5627f'
|
||||
# emissions
|
||||
process emissions CC: '#000000'
|
||||
process emissions: '#222222'
|
||||
process emissions to stored: '#444444'
|
||||
process emissions to atmosphere: '#888888'
|
||||
oil emissions: '#aaaaaa'
|
||||
shipping oil emissions: "#555555"
|
||||
land transport oil emissions: '#777777'
|
||||
agriculture machinery oil emissions: '#333333'
|
||||
# other
|
||||
shipping: '#03a2ff'
|
||||
power-to-heat: '#cc1f1f'
|
||||
power-to-gas: '#c44ce6'
|
||||
power-to-liquid: '#25c49a'
|
||||
gas-to-power/heat: '#ee8340'
|
592
config.decentral.yaml
Normal file
592
config.decentral.yaml
Normal file
@ -0,0 +1,592 @@
|
||||
version: 0.6.0
|
||||
|
||||
logging_level: INFO
|
||||
|
||||
results_dir: results/
|
||||
summary_dir: results
|
||||
costs_dir: ../technology-data/outputs/
|
||||
run: 20211218-181-decentral # use this to keep track of runs with different settings
|
||||
foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented)
|
||||
# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below
|
||||
|
||||
scenario:
|
||||
simpl: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt"
|
||||
- opt
|
||||
clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred
|
||||
- 181
|
||||
opts: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
sector_opts: # this is where the main scenario settings are
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-decentral
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-decentral-noH2network
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-decentral-onwind+p0
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-decentral-noH2network-onwind+p0
|
||||
# to really understand the options here, look in scripts/prepare_sector_network.py
|
||||
# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
|
||||
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
|
||||
# xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours
|
||||
# single letters are sectors: T for land transport, H for building heating,
|
||||
# B for biomass supply, I for industry, shipping and aviation,
|
||||
# A for agriculture, forestry and fishing
|
||||
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
|
||||
# solar+p3 multiplies the available installable potential by factor 3
|
||||
# co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2
|
||||
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
|
||||
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
|
||||
# emissions throughout the transition path in the timeframe determined by the
|
||||
# planning_horizons), be:beta decay; ex:exponential decay
|
||||
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
|
||||
# decay with initial growth rate 0
|
||||
planning_horizons: # investment years for myopic and perfect; or costs year for overnight
|
||||
- 2030
|
||||
# for example, set to [2020, 2030, 2040, 2050] for myopic foresight
|
||||
|
||||
# CO2 budget as a fraction of 1990 emissions
|
||||
# this is over-ridden if CO2Lx is set in sector_opts
|
||||
# this is also over-ridden if cb is set in sector_opts
|
||||
co2_budget:
|
||||
2020: 0.7011648746
|
||||
2025: 0.5241935484
|
||||
2030: 0.2970430108
|
||||
2035: 0.1500896057
|
||||
2040: 0.0712365591
|
||||
2045: 0.0322580645
|
||||
2050: 0
|
||||
|
||||
# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec
|
||||
snapshots:
|
||||
# arguments to pd.date_range
|
||||
start: "2013-01-01"
|
||||
end: "2014-01-01"
|
||||
closed: left # end is not inclusive
|
||||
|
||||
atlite:
|
||||
cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc
|
||||
|
||||
# this information is NOT used but needed as an argument for
|
||||
# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py
|
||||
electricity:
|
||||
max_hours:
|
||||
battery: 6
|
||||
H2: 168
|
||||
|
||||
# regulate what components with which carriers are kept from PyPSA-Eur;
|
||||
# some technologies are removed because they are implemented differently
|
||||
# (e.g. battery or H2 storage) or have different year-dependent costs
|
||||
# in PyPSA-Eur-Sec
|
||||
pypsa_eur:
|
||||
Bus:
|
||||
- AC
|
||||
Link:
|
||||
- DC
|
||||
Generator:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
StorageUnit:
|
||||
- PHS
|
||||
- hydro
|
||||
Store: []
|
||||
|
||||
|
||||
energy:
|
||||
energy_totals_year: 2011
|
||||
base_emissions_year: 1990
|
||||
eurostat_report_year: 2016
|
||||
emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)"
|
||||
|
||||
biomass:
|
||||
year: 2030
|
||||
scenario: ENS_Med
|
||||
classes:
|
||||
solid biomass:
|
||||
- Agricultural waste
|
||||
- Fuelwood residues
|
||||
- Secondary Forestry residues - woodchips
|
||||
- Sawdust
|
||||
- Residues from landscape care
|
||||
- Municipal waste
|
||||
not included:
|
||||
- Sugar from sugar beet
|
||||
- Rape seed
|
||||
- "Sunflower, soya seed "
|
||||
- Bioethanol barley, wheat, grain maize, oats, other cereals and rye
|
||||
- Miscanthus, switchgrass, RCG
|
||||
- Willow
|
||||
- Poplar
|
||||
- FuelwoodRW
|
||||
- C&P_RW
|
||||
biogas:
|
||||
- Manure solid, liquid
|
||||
- Sludge
|
||||
|
||||
|
||||
solar_thermal:
|
||||
clearsky_model: simple # should be "simple" or "enhanced"?
|
||||
orientation:
|
||||
slope: 45.
|
||||
azimuth: 180.
|
||||
|
||||
# only relevant for foresight = myopic or perfect
|
||||
existing_capacities:
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019]
|
||||
threshold_capacity: 10
|
||||
conventional_carriers:
|
||||
- lignite
|
||||
- coal
|
||||
- oil
|
||||
- uranium
|
||||
|
||||
|
||||
sector:
|
||||
district_heating:
|
||||
potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating
|
||||
# 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
|
||||
progress: 1
|
||||
# 2020: 0.0
|
||||
# 2030: 0.3
|
||||
# 2040: 0.6
|
||||
# 2050: 1.0
|
||||
district_heating_loss: 0.15
|
||||
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
|
||||
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
|
||||
transport_heating_deadband_upper: 20.
|
||||
transport_heating_deadband_lower: 15.
|
||||
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
|
||||
ICE_upper_degree_factor: 1.6
|
||||
EV_lower_degree_factor: 0.98
|
||||
EV_upper_degree_factor: 0.63
|
||||
bev_dsm: true #turns on EV battery
|
||||
bev_availability: 0.5 #How many cars do smart charging
|
||||
bev_energy: 0.05 #average battery size in MWh
|
||||
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
|
||||
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
|
||||
bev_charge_rate: 0.011 #3-phase charger with 11 kW
|
||||
bev_avail_max: 0.95
|
||||
bev_avail_mean: 0.8
|
||||
v2g: true #allows feed-in to grid from EV battery
|
||||
#what is not EV or FCEV is oil-fuelled ICE
|
||||
land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs
|
||||
# 2020: 0
|
||||
# 2030: 0.05
|
||||
# 2040: 0.1
|
||||
# 2050: 0.15
|
||||
land_transport_electric_share: 0.85 # 1 means all EVs
|
||||
# 2020: 0
|
||||
# 2030: 0.25
|
||||
# 2040: 0.6
|
||||
# 2050: 0.85
|
||||
transport_fuel_cell_efficiency: 0.5
|
||||
transport_internal_combustion_efficiency: 0.3
|
||||
agriculture_machinery_electric_share: 0
|
||||
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
|
||||
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
|
||||
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||
shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands
|
||||
shipping_hydrogen_share: 1 # 1 means all hydrogen FC
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.15
|
||||
# 2040: 0.3
|
||||
# 2045: 0.6
|
||||
# 2050: 1
|
||||
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
|
||||
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
|
||||
# this can represent e.g. building renovation, building demolition, or if
|
||||
# the factor is negative: increasing floor area, increased thermal comfort, population growth
|
||||
reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand
|
||||
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
|
||||
# 2020: 0.10 # this results in a space heat demand reduction of 10%
|
||||
# 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
|
||||
# 2030: 0.09
|
||||
# 2035: 0.11
|
||||
# 2040: 0.16
|
||||
# 2045: 0.21
|
||||
# 2050: 0.29
|
||||
retrofitting : # co-optimises building renovation to reduce space heat demand
|
||||
retro_endogen: false # co-optimise space heat savings
|
||||
cost_factor: 1.0 # weight costs for building renovation
|
||||
interest_rate: 0.04 # for investment in building components
|
||||
annualise_cost: true # annualise the investment costs
|
||||
tax_weighting: false # weight costs depending on taxes in countries
|
||||
construction_index: true # weight costs depending on labour/material costs per country
|
||||
tes: true
|
||||
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
|
||||
decentral: 3
|
||||
central: 180
|
||||
boilers: true
|
||||
oil_boilers: false
|
||||
chp: true
|
||||
micro_chp: false
|
||||
solar_thermal: true
|
||||
solar_cf_correction: 0.788457 # = >>> 1/1.2683
|
||||
marginal_cost_storage: 0. #1e-4
|
||||
methanation: true
|
||||
helmeth: false
|
||||
dac: true
|
||||
co2_vent: false
|
||||
SMR: true
|
||||
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
|
||||
co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2
|
||||
co2_network: false
|
||||
cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture
|
||||
hydrogen_underground_storage: true
|
||||
hydrogen_underground_storage_locations:
|
||||
# - onshore # more than 50 km from sea
|
||||
- nearshore # within 50 km of sea
|
||||
# - offshore
|
||||
use_fischer_tropsch_waste_heat: true
|
||||
use_fuel_cell_waste_heat: true
|
||||
electricity_distribution_grid: true
|
||||
electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
electricity_grid_connection: true # only applies to onshore wind and utility PV
|
||||
H2_network: true
|
||||
gas_network: false
|
||||
H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes
|
||||
# according to hydrogen backbone strategy (April, 2020) p.15
|
||||
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
||||
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
||||
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
||||
gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
||||
gas_distribution_grid: true
|
||||
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
biomass_transport: false # biomass transport between nodes
|
||||
conventional_generation: # generator : carrier
|
||||
OCGT: gas
|
||||
|
||||
|
||||
industry:
|
||||
St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6
|
||||
# 2020: 0.6
|
||||
# 2025: 0.55
|
||||
# 2030: 0.5
|
||||
# 2035: 0.45
|
||||
# 2040: 0.4
|
||||
# 2045: 0.35
|
||||
# 2050: 0.3
|
||||
DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.2
|
||||
# 2040: 0.4
|
||||
# 2045: 0.7
|
||||
# 2050: 1
|
||||
H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279
|
||||
elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf
|
||||
Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4
|
||||
# 2020: 0.4
|
||||
# 2025: 0.375
|
||||
# 2030: 0.35
|
||||
# 2035: 0.325
|
||||
# 2040: 0.3
|
||||
# 2045: 0.25
|
||||
# 2050: 0.2
|
||||
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
|
||||
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
|
||||
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)
|
||||
MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
|
||||
NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
|
||||
petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
|
||||
HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route
|
||||
HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling
|
||||
HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling
|
||||
HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX
|
||||
MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756.
|
||||
MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking
|
||||
chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43
|
||||
MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43
|
||||
MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process
|
||||
methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62
|
||||
MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65
|
||||
MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65
|
||||
hotmaps_locate_missing: false
|
||||
reference_year: 2015
|
||||
# references:
|
||||
# DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf
|
||||
# Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050
|
||||
|
||||
costs:
|
||||
lifetime: 25 #default lifetime
|
||||
# From a Lion Hirth paper, also reflects average of Noothout et al 2016
|
||||
discountrate: 0.07
|
||||
# [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501
|
||||
USD2013_to_EUR2013: 0.7532
|
||||
|
||||
# Marginal and capital costs can be overwritten
|
||||
# capital_cost:
|
||||
# onwind: 500
|
||||
marginal_cost:
|
||||
solar: 0.01
|
||||
onwind: 0.015
|
||||
offwind: 0.015
|
||||
hydro: 0.
|
||||
H2: 0.
|
||||
battery: 0.
|
||||
|
||||
emission_prices: # only used with the option Ep (emission prices)
|
||||
co2: 0.
|
||||
|
||||
lines:
|
||||
length_factor: 1.25 #to estimate offwind connection costs
|
||||
|
||||
|
||||
solving:
|
||||
#tmpdir: "path/to/tmp"
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
clip_p_max_pu: 1.e-2
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
skip_iterations: true
|
||||
track_iterations: false
|
||||
min_iterations: 4
|
||||
max_iterations: 6
|
||||
keep_shadowprices:
|
||||
- Bus
|
||||
- Line
|
||||
- Link
|
||||
- Transformer
|
||||
- GlobalConstraint
|
||||
- Generator
|
||||
- Store
|
||||
- StorageUnit
|
||||
solver:
|
||||
name: gurobi
|
||||
threads: 4
|
||||
method: 2 # barrier
|
||||
crossover: 0
|
||||
BarConvTol: 1.e-4
|
||||
Seed: 123
|
||||
AggFill: 0
|
||||
PreDual: 0
|
||||
GURO_PAR_BARDENSETHRESH: 200
|
||||
#FeasibilityTol: 1.e-6
|
||||
|
||||
#name: cplex
|
||||
#threads: 4
|
||||
#lpmethod: 4 # barrier
|
||||
#solutiontype: 2 # non basic solution, ie no crossover
|
||||
#barrier_convergetol: 1.e-5
|
||||
#feasopt_tolerance: 1.e-6
|
||||
mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
|
||||
|
||||
plotting:
|
||||
map:
|
||||
boundaries: [-11, 30, 34, 71]
|
||||
color_geomap:
|
||||
ocean: white
|
||||
land: white
|
||||
costs_max: 1000
|
||||
costs_threshold: 1
|
||||
energy_max: 20000
|
||||
energy_min: -20000
|
||||
energy_threshold: 50
|
||||
vre_techs:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
renewable_storage_techs:
|
||||
- PHS
|
||||
- hydro
|
||||
conv_techs:
|
||||
- OCGT
|
||||
- CCGT
|
||||
- Nuclear
|
||||
- Coal
|
||||
storage_techs:
|
||||
- hydro+PHS
|
||||
- battery
|
||||
- H2
|
||||
load_carriers:
|
||||
- AC load
|
||||
AC_carriers:
|
||||
- AC line
|
||||
- AC transformer
|
||||
link_carriers:
|
||||
- DC line
|
||||
- Converter AC-DC
|
||||
heat_links:
|
||||
- heat pump
|
||||
- resistive heater
|
||||
- CHP heat
|
||||
- CHP electric
|
||||
- gas boiler
|
||||
- central heat pump
|
||||
- central resistive heater
|
||||
- central CHP heat
|
||||
- central CHP electric
|
||||
- central gas boiler
|
||||
heat_generators:
|
||||
- gas boiler
|
||||
- central gas boiler
|
||||
- solar thermal collector
|
||||
- central solar thermal collector
|
||||
tech_colors:
|
||||
# wind
|
||||
onwind: "#235ebc"
|
||||
onshore wind: "#235ebc"
|
||||
offwind: "#6895dd"
|
||||
offshore wind: "#6895dd"
|
||||
offwind-ac: "#6895dd"
|
||||
offshore wind (AC): "#6895dd"
|
||||
offwind-dc: "#74c6f2"
|
||||
offshore wind (DC): "#74c6f2"
|
||||
# water
|
||||
hydro: '#298c81'
|
||||
hydro reservoir: '#298c81'
|
||||
ror: '#3dbfb0'
|
||||
run of river: '#3dbfb0'
|
||||
hydroelectricity: '#298c81'
|
||||
PHS: '#51dbcc'
|
||||
wave: '#a7d4cf'
|
||||
# solar
|
||||
solar: "#f9d002"
|
||||
solar PV: "#f9d002"
|
||||
solar thermal: '#ffbf2b'
|
||||
solar rooftop: '#ffea80'
|
||||
# gas
|
||||
OCGT: '#e0986c'
|
||||
OCGT marginal: '#e0986c'
|
||||
OCGT-heat: '#e0986c'
|
||||
gas boiler: '#db6a25'
|
||||
gas boilers: '#db6a25'
|
||||
gas boiler marginal: '#db6a25'
|
||||
gas: '#e05b09'
|
||||
natural gas: '#e05b09'
|
||||
CCGT: '#a85522'
|
||||
CCGT marginal: '#a85522'
|
||||
gas for industry co2 to atmosphere: '#692e0a'
|
||||
gas for industry co2 to stored: '#8a3400'
|
||||
gas for industry: '#853403'
|
||||
gas for industry CC: '#692e0a'
|
||||
gas pipeline: '#ebbca0'
|
||||
# oil
|
||||
oil: '#c9c9c9'
|
||||
oil boiler: '#adadad'
|
||||
agriculture machinery oil: '#949494'
|
||||
shipping oil: "#808080"
|
||||
land transport oil: '#afafaf'
|
||||
# nuclear
|
||||
Nuclear: '#ff8c00'
|
||||
Nuclear marginal: '#ff8c00'
|
||||
nuclear: '#ff8c00'
|
||||
uranium: '#ff8c00'
|
||||
# coal
|
||||
Coal: '#545454'
|
||||
coal: '#545454'
|
||||
Coal marginal: '#545454'
|
||||
Lignite: '#826837'
|
||||
lignite: '#826837'
|
||||
Lignite marginal: '#826837'
|
||||
# biomass
|
||||
biogas: '#e3d37d'
|
||||
solid biomass: '#baa741'
|
||||
solid biomass transport: '#baa741'
|
||||
solid biomass for industry: '#7a6d26'
|
||||
solid biomass for industry CC: '#47411c'
|
||||
solid biomass for industry co2 from atmosphere: '#736412'
|
||||
solid biomass for industry co2 to stored: '#47411c'
|
||||
# power transmission
|
||||
lines: '#6c9459'
|
||||
transmission lines: '#6c9459'
|
||||
electricity distribution grid: '#97ad8c'
|
||||
# electricity demand
|
||||
Electric load: '#110d63'
|
||||
electric demand: '#110d63'
|
||||
electricity: '#110d63'
|
||||
industry electricity: '#2d2a66'
|
||||
industry new electricity: '#2d2a66'
|
||||
agriculture electricity: '#494778'
|
||||
# battery + EVs
|
||||
battery: '#ace37f'
|
||||
battery storage: '#ace37f'
|
||||
home battery: '#80c944'
|
||||
home battery storage: '#80c944'
|
||||
BEV charger: '#baf238'
|
||||
V2G: '#e5ffa8'
|
||||
land transport EV: '#baf238'
|
||||
Li ion: '#baf238'
|
||||
# hot water storage
|
||||
water tanks: '#e69487'
|
||||
hot water storage: '#e69487'
|
||||
hot water charging: '#e69487'
|
||||
hot water discharging: '#e69487'
|
||||
# heat demand
|
||||
Heat load: '#cc1f1f'
|
||||
heat: '#cc1f1f'
|
||||
heat demand: '#cc1f1f'
|
||||
rural heat: '#ff5c5c'
|
||||
central heat: '#cc1f1f'
|
||||
decentral heat: '#750606'
|
||||
low-temperature heat for industry: '#8f2727'
|
||||
process heat: '#ff0000'
|
||||
agriculture heat: '#d9a5a5'
|
||||
# heat supply
|
||||
heat pumps: '#2fb537'
|
||||
heat pump: '#2fb537'
|
||||
air heat pump: '#36eb41'
|
||||
ground heat pump: '#2fb537'
|
||||
Ambient: '#98eb9d'
|
||||
CHP: '#8a5751'
|
||||
CHP CC: '#634643'
|
||||
CHP heat: '#8a5751'
|
||||
CHP electric: '#8a5751'
|
||||
district heating: '#e8beac'
|
||||
resistive heater: '#c78536'
|
||||
retrofitting: '#8487e8'
|
||||
building retrofitting: '#8487e8'
|
||||
# hydrogen
|
||||
H2 for industry: "#f073da"
|
||||
H2 for shipping: "#ebaee0"
|
||||
H2: '#bf13a0'
|
||||
SMR: '#870c71'
|
||||
SMR CC: '#4f1745'
|
||||
H2 liquefaction: '#d647bd'
|
||||
hydrogen storage: '#bf13a0'
|
||||
land transport fuel cell: '#6b3161'
|
||||
H2 pipeline: '#f081dc'
|
||||
H2 Fuel Cell: '#c251ae'
|
||||
H2 Electrolysis: '#ff29d9'
|
||||
# syngas
|
||||
Sabatier: '#9850ad'
|
||||
methanation: '#c44ce6'
|
||||
helmeth: '#e899ff'
|
||||
# synfuels
|
||||
Fischer-Tropsch: '#25c49a'
|
||||
kerosene for aviation: '#a1ffe6'
|
||||
naphtha for industry: '#57ebc4'
|
||||
# co2
|
||||
CC: '#9e132c'
|
||||
CO2 sequestration: '#9e132c'
|
||||
DAC: '#ff5270'
|
||||
co2 stored: '#f2385a'
|
||||
co2: '#f29dae'
|
||||
co2 vent: '#ffd4dc'
|
||||
CO2 pipeline: '#f5627f'
|
||||
# emissions
|
||||
process emissions CC: '#000000'
|
||||
process emissions: '#222222'
|
||||
process emissions to stored: '#444444'
|
||||
process emissions to atmosphere: '#888888'
|
||||
oil emissions: '#aaaaaa'
|
||||
shipping oil emissions: "#555555"
|
||||
land transport oil emissions: '#777777'
|
||||
agriculture machinery oil emissions: '#333333'
|
||||
# other
|
||||
shipping: '#03a2ff'
|
||||
power-to-heat: '#cc1f1f'
|
||||
power-to-gas: '#c44ce6'
|
||||
power-to-liquid: '#25c49a'
|
||||
gas-to-power/heat: '#ee8340'
|
@ -134,7 +134,7 @@ solar_thermal:
|
||||
|
||||
# only relevant for foresight = myopic or perfect
|
||||
existing_capacities:
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019]
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2020, 2025, 2030]
|
||||
threshold_capacity: 10
|
||||
conventional_carriers:
|
||||
- lignite
|
||||
@ -232,6 +232,7 @@ sector:
|
||||
marginal_cost_storage: 0. #1e-4
|
||||
methanation: true
|
||||
helmeth: true
|
||||
coal_cc: false
|
||||
dac: true
|
||||
co2_vent: true
|
||||
SMR: true
|
||||
@ -388,6 +389,9 @@ plotting:
|
||||
color_geomap:
|
||||
ocean: white
|
||||
land: white
|
||||
eu_node_location:
|
||||
x: -5.5
|
||||
y: 46.
|
||||
costs_max: 1000
|
||||
costs_threshold: 1
|
||||
energy_max: 20000
|
||||
|
590
config.gas.yaml
Normal file
590
config.gas.yaml
Normal file
@ -0,0 +1,590 @@
|
||||
version: 0.6.0
|
||||
|
||||
logging_level: INFO
|
||||
|
||||
results_dir: results/
|
||||
summary_dir: results
|
||||
costs_dir: ../technology-data/outputs/
|
||||
run: 20211218-181-gas # use this to keep track of runs with different settings
|
||||
foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented)
|
||||
# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below
|
||||
|
||||
scenario:
|
||||
simpl: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt"
|
||||
- 1.0
|
||||
- 1.5
|
||||
clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred
|
||||
- 181
|
||||
opts: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
sector_opts: # this is where the main scenario settings are
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10
|
||||
# to really understand the options here, look in scripts/prepare_sector_network.py
|
||||
# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
|
||||
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
|
||||
# xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours
|
||||
# single letters are sectors: T for land transport, H for building heating,
|
||||
# B for biomass supply, I for industry, shipping and aviation,
|
||||
# A for agriculture, forestry and fishing
|
||||
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
|
||||
# solar+p3 multiplies the available installable potential by factor 3
|
||||
# co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2
|
||||
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
|
||||
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
|
||||
# emissions throughout the transition path in the timeframe determined by the
|
||||
# planning_horizons), be:beta decay; ex:exponential decay
|
||||
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
|
||||
# decay with initial growth rate 0
|
||||
planning_horizons: # investment years for myopic and perfect; or costs year for overnight
|
||||
- 2030
|
||||
# for example, set to [2020, 2030, 2040, 2050] for myopic foresight
|
||||
|
||||
# CO2 budget as a fraction of 1990 emissions
|
||||
# this is over-ridden if CO2Lx is set in sector_opts
|
||||
# this is also over-ridden if cb is set in sector_opts
|
||||
co2_budget:
|
||||
2020: 0.7011648746
|
||||
2025: 0.5241935484
|
||||
2030: 0.2970430108
|
||||
2035: 0.1500896057
|
||||
2040: 0.0712365591
|
||||
2045: 0.0322580645
|
||||
2050: 0
|
||||
|
||||
# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec
|
||||
snapshots:
|
||||
# arguments to pd.date_range
|
||||
start: "2013-01-01"
|
||||
end: "2014-01-01"
|
||||
closed: left # end is not inclusive
|
||||
|
||||
atlite:
|
||||
cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc
|
||||
|
||||
# this information is NOT used but needed as an argument for
|
||||
# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py
|
||||
electricity:
|
||||
max_hours:
|
||||
battery: 6
|
||||
H2: 168
|
||||
|
||||
# regulate what components with which carriers are kept from PyPSA-Eur;
|
||||
# some technologies are removed because they are implemented differently
|
||||
# (e.g. battery or H2 storage) or have different year-dependent costs
|
||||
# in PyPSA-Eur-Sec
|
||||
pypsa_eur:
|
||||
Bus:
|
||||
- AC
|
||||
Link:
|
||||
- DC
|
||||
Generator:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
StorageUnit:
|
||||
- PHS
|
||||
- hydro
|
||||
Store: []
|
||||
|
||||
|
||||
energy:
|
||||
energy_totals_year: 2011
|
||||
base_emissions_year: 1990
|
||||
eurostat_report_year: 2016
|
||||
emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)"
|
||||
|
||||
biomass:
|
||||
year: 2030
|
||||
scenario: ENS_Med
|
||||
classes:
|
||||
solid biomass:
|
||||
- Agricultural waste
|
||||
- Fuelwood residues
|
||||
- Secondary Forestry residues - woodchips
|
||||
- Sawdust
|
||||
- Residues from landscape care
|
||||
- Municipal waste
|
||||
not included:
|
||||
- Sugar from sugar beet
|
||||
- Rape seed
|
||||
- "Sunflower, soya seed "
|
||||
- Bioethanol barley, wheat, grain maize, oats, other cereals and rye
|
||||
- Miscanthus, switchgrass, RCG
|
||||
- Willow
|
||||
- Poplar
|
||||
- FuelwoodRW
|
||||
- C&P_RW
|
||||
biogas:
|
||||
- Manure solid, liquid
|
||||
- Sludge
|
||||
|
||||
|
||||
solar_thermal:
|
||||
clearsky_model: simple # should be "simple" or "enhanced"?
|
||||
orientation:
|
||||
slope: 45.
|
||||
azimuth: 180.
|
||||
|
||||
# only relevant for foresight = myopic or perfect
|
||||
existing_capacities:
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019]
|
||||
threshold_capacity: 10
|
||||
conventional_carriers:
|
||||
- lignite
|
||||
- coal
|
||||
- oil
|
||||
- uranium
|
||||
|
||||
|
||||
sector:
|
||||
district_heating:
|
||||
potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating
|
||||
# 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
|
||||
progress: 1
|
||||
# 2020: 0.0
|
||||
# 2030: 0.3
|
||||
# 2040: 0.6
|
||||
# 2050: 1.0
|
||||
district_heating_loss: 0.15
|
||||
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
|
||||
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
|
||||
transport_heating_deadband_upper: 20.
|
||||
transport_heating_deadband_lower: 15.
|
||||
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
|
||||
ICE_upper_degree_factor: 1.6
|
||||
EV_lower_degree_factor: 0.98
|
||||
EV_upper_degree_factor: 0.63
|
||||
bev_dsm: true #turns on EV battery
|
||||
bev_availability: 0.5 #How many cars do smart charging
|
||||
bev_energy: 0.05 #average battery size in MWh
|
||||
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
|
||||
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
|
||||
bev_charge_rate: 0.011 #3-phase charger with 11 kW
|
||||
bev_avail_max: 0.95
|
||||
bev_avail_mean: 0.8
|
||||
v2g: true #allows feed-in to grid from EV battery
|
||||
#what is not EV or FCEV is oil-fuelled ICE
|
||||
land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs
|
||||
# 2020: 0
|
||||
# 2030: 0.05
|
||||
# 2040: 0.1
|
||||
# 2050: 0.15
|
||||
land_transport_electric_share: 0.85 # 1 means all EVs
|
||||
# 2020: 0
|
||||
# 2030: 0.25
|
||||
# 2040: 0.6
|
||||
# 2050: 0.85
|
||||
transport_fuel_cell_efficiency: 0.5
|
||||
transport_internal_combustion_efficiency: 0.3
|
||||
agriculture_machinery_electric_share: 0
|
||||
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
|
||||
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
|
||||
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||
shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands
|
||||
shipping_hydrogen_share: 1 # 1 means all hydrogen FC
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.15
|
||||
# 2040: 0.3
|
||||
# 2045: 0.6
|
||||
# 2050: 1
|
||||
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
|
||||
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
|
||||
# this can represent e.g. building renovation, building demolition, or if
|
||||
# the factor is negative: increasing floor area, increased thermal comfort, population growth
|
||||
reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand
|
||||
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
|
||||
# 2020: 0.10 # this results in a space heat demand reduction of 10%
|
||||
# 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
|
||||
# 2030: 0.09
|
||||
# 2035: 0.11
|
||||
# 2040: 0.16
|
||||
# 2045: 0.21
|
||||
# 2050: 0.29
|
||||
retrofitting : # co-optimises building renovation to reduce space heat demand
|
||||
retro_endogen: false # co-optimise space heat savings
|
||||
cost_factor: 1.0 # weight costs for building renovation
|
||||
interest_rate: 0.04 # for investment in building components
|
||||
annualise_cost: true # annualise the investment costs
|
||||
tax_weighting: false # weight costs depending on taxes in countries
|
||||
construction_index: true # weight costs depending on labour/material costs per country
|
||||
tes: true
|
||||
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
|
||||
decentral: 3
|
||||
central: 180
|
||||
boilers: true
|
||||
oil_boilers: false
|
||||
chp: true
|
||||
micro_chp: false
|
||||
solar_thermal: true
|
||||
solar_cf_correction: 0.788457 # = >>> 1/1.2683
|
||||
marginal_cost_storage: 0. #1e-4
|
||||
methanation: true
|
||||
helmeth: false
|
||||
dac: true
|
||||
co2_vent: false
|
||||
SMR: true
|
||||
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
|
||||
co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2
|
||||
co2_network: false
|
||||
cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture
|
||||
hydrogen_underground_storage: true
|
||||
hydrogen_underground_storage_locations:
|
||||
# - onshore # more than 50 km from sea
|
||||
- nearshore # within 50 km of sea
|
||||
# - offshore
|
||||
use_fischer_tropsch_waste_heat: true
|
||||
use_fuel_cell_waste_heat: true
|
||||
electricity_distribution_grid: true
|
||||
electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
electricity_grid_connection: true # only applies to onshore wind and utility PV
|
||||
H2_network: true
|
||||
gas_network: true
|
||||
H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes
|
||||
# according to hydrogen backbone strategy (April, 2020) p.15
|
||||
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
||||
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
||||
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
||||
gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
||||
gas_distribution_grid: true
|
||||
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
biomass_transport: false # biomass transport between nodes
|
||||
conventional_generation: # generator : carrier
|
||||
OCGT: gas
|
||||
|
||||
|
||||
industry:
|
||||
St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6
|
||||
# 2020: 0.6
|
||||
# 2025: 0.55
|
||||
# 2030: 0.5
|
||||
# 2035: 0.45
|
||||
# 2040: 0.4
|
||||
# 2045: 0.35
|
||||
# 2050: 0.3
|
||||
DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.2
|
||||
# 2040: 0.4
|
||||
# 2045: 0.7
|
||||
# 2050: 1
|
||||
H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279
|
||||
elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf
|
||||
Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4
|
||||
# 2020: 0.4
|
||||
# 2025: 0.375
|
||||
# 2030: 0.35
|
||||
# 2035: 0.325
|
||||
# 2040: 0.3
|
||||
# 2045: 0.25
|
||||
# 2050: 0.2
|
||||
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
|
||||
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
|
||||
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)
|
||||
MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
|
||||
NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
|
||||
petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
|
||||
HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route
|
||||
HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling
|
||||
HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling
|
||||
HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX
|
||||
MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756.
|
||||
MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking
|
||||
chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43
|
||||
MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43
|
||||
MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process
|
||||
methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62
|
||||
MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65
|
||||
MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65
|
||||
hotmaps_locate_missing: false
|
||||
reference_year: 2015
|
||||
# references:
|
||||
# DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf
|
||||
# Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050
|
||||
|
||||
costs:
|
||||
lifetime: 25 #default lifetime
|
||||
# From a Lion Hirth paper, also reflects average of Noothout et al 2016
|
||||
discountrate: 0.07
|
||||
# [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501
|
||||
USD2013_to_EUR2013: 0.7532
|
||||
|
||||
# Marginal and capital costs can be overwritten
|
||||
# capital_cost:
|
||||
# onwind: 500
|
||||
marginal_cost:
|
||||
solar: 0.01
|
||||
onwind: 0.015
|
||||
offwind: 0.015
|
||||
hydro: 0.
|
||||
H2: 0.
|
||||
battery: 0.
|
||||
|
||||
emission_prices: # only used with the option Ep (emission prices)
|
||||
co2: 0.
|
||||
|
||||
lines:
|
||||
length_factor: 1.25 #to estimate offwind connection costs
|
||||
|
||||
|
||||
solving:
|
||||
#tmpdir: "path/to/tmp"
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
clip_p_max_pu: 1.e-2
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
skip_iterations: true
|
||||
track_iterations: false
|
||||
min_iterations: 4
|
||||
max_iterations: 6
|
||||
keep_shadowprices:
|
||||
- Bus
|
||||
- Line
|
||||
- Link
|
||||
- Transformer
|
||||
- GlobalConstraint
|
||||
- Generator
|
||||
- Store
|
||||
- StorageUnit
|
||||
solver:
|
||||
name: gurobi
|
||||
threads: 4
|
||||
method: 2 # barrier
|
||||
crossover: 0
|
||||
BarConvTol: 1.e-4
|
||||
Seed: 123
|
||||
AggFill: 0
|
||||
PreDual: 0
|
||||
GURO_PAR_BARDENSETHRESH: 200
|
||||
#FeasibilityTol: 1.e-6
|
||||
|
||||
#name: cplex
|
||||
#threads: 4
|
||||
#lpmethod: 4 # barrier
|
||||
#solutiontype: 2 # non basic solution, ie no crossover
|
||||
#barrier_convergetol: 1.e-5
|
||||
#feasopt_tolerance: 1.e-6
|
||||
mem: 170000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
|
||||
|
||||
plotting:
|
||||
map:
|
||||
boundaries: [-11, 30, 34, 71]
|
||||
color_geomap:
|
||||
ocean: white
|
||||
land: white
|
||||
costs_max: 1000
|
||||
costs_threshold: 1
|
||||
energy_max: 20000
|
||||
energy_min: -20000
|
||||
energy_threshold: 50
|
||||
vre_techs:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
renewable_storage_techs:
|
||||
- PHS
|
||||
- hydro
|
||||
conv_techs:
|
||||
- OCGT
|
||||
- CCGT
|
||||
- Nuclear
|
||||
- Coal
|
||||
storage_techs:
|
||||
- hydro+PHS
|
||||
- battery
|
||||
- H2
|
||||
load_carriers:
|
||||
- AC load
|
||||
AC_carriers:
|
||||
- AC line
|
||||
- AC transformer
|
||||
link_carriers:
|
||||
- DC line
|
||||
- Converter AC-DC
|
||||
heat_links:
|
||||
- heat pump
|
||||
- resistive heater
|
||||
- CHP heat
|
||||
- CHP electric
|
||||
- gas boiler
|
||||
- central heat pump
|
||||
- central resistive heater
|
||||
- central CHP heat
|
||||
- central CHP electric
|
||||
- central gas boiler
|
||||
heat_generators:
|
||||
- gas boiler
|
||||
- central gas boiler
|
||||
- solar thermal collector
|
||||
- central solar thermal collector
|
||||
tech_colors:
|
||||
# wind
|
||||
onwind: "#235ebc"
|
||||
onshore wind: "#235ebc"
|
||||
offwind: "#6895dd"
|
||||
offshore wind: "#6895dd"
|
||||
offwind-ac: "#6895dd"
|
||||
offshore wind (AC): "#6895dd"
|
||||
offwind-dc: "#74c6f2"
|
||||
offshore wind (DC): "#74c6f2"
|
||||
# water
|
||||
hydro: '#298c81'
|
||||
hydro reservoir: '#298c81'
|
||||
ror: '#3dbfb0'
|
||||
run of river: '#3dbfb0'
|
||||
hydroelectricity: '#298c81'
|
||||
PHS: '#51dbcc'
|
||||
wave: '#a7d4cf'
|
||||
# solar
|
||||
solar: "#f9d002"
|
||||
solar PV: "#f9d002"
|
||||
solar thermal: '#ffbf2b'
|
||||
solar rooftop: '#ffea80'
|
||||
# gas
|
||||
OCGT: '#e0986c'
|
||||
OCGT marginal: '#e0986c'
|
||||
OCGT-heat: '#e0986c'
|
||||
gas boiler: '#db6a25'
|
||||
gas boilers: '#db6a25'
|
||||
gas boiler marginal: '#db6a25'
|
||||
gas: '#e05b09'
|
||||
natural gas: '#e05b09'
|
||||
CCGT: '#a85522'
|
||||
CCGT marginal: '#a85522'
|
||||
gas for industry co2 to atmosphere: '#692e0a'
|
||||
gas for industry co2 to stored: '#8a3400'
|
||||
gas for industry: '#853403'
|
||||
gas for industry CC: '#692e0a'
|
||||
gas pipeline: '#ebbca0'
|
||||
# oil
|
||||
oil: '#c9c9c9'
|
||||
oil boiler: '#adadad'
|
||||
agriculture machinery oil: '#949494'
|
||||
shipping oil: "#808080"
|
||||
land transport oil: '#afafaf'
|
||||
# nuclear
|
||||
Nuclear: '#ff8c00'
|
||||
Nuclear marginal: '#ff8c00'
|
||||
nuclear: '#ff8c00'
|
||||
uranium: '#ff8c00'
|
||||
# coal
|
||||
Coal: '#545454'
|
||||
coal: '#545454'
|
||||
Coal marginal: '#545454'
|
||||
Lignite: '#826837'
|
||||
lignite: '#826837'
|
||||
Lignite marginal: '#826837'
|
||||
# biomass
|
||||
biogas: '#e3d37d'
|
||||
solid biomass: '#baa741'
|
||||
solid biomass transport: '#baa741'
|
||||
solid biomass for industry: '#7a6d26'
|
||||
solid biomass for industry CC: '#47411c'
|
||||
solid biomass for industry co2 from atmosphere: '#736412'
|
||||
solid biomass for industry co2 to stored: '#47411c'
|
||||
# power transmission
|
||||
lines: '#6c9459'
|
||||
transmission lines: '#6c9459'
|
||||
electricity distribution grid: '#97ad8c'
|
||||
# electricity demand
|
||||
Electric load: '#110d63'
|
||||
electric demand: '#110d63'
|
||||
electricity: '#110d63'
|
||||
industry electricity: '#2d2a66'
|
||||
industry new electricity: '#2d2a66'
|
||||
agriculture electricity: '#494778'
|
||||
# battery + EVs
|
||||
battery: '#ace37f'
|
||||
battery storage: '#ace37f'
|
||||
home battery: '#80c944'
|
||||
home battery storage: '#80c944'
|
||||
BEV charger: '#baf238'
|
||||
V2G: '#e5ffa8'
|
||||
land transport EV: '#baf238'
|
||||
Li ion: '#baf238'
|
||||
# hot water storage
|
||||
water tanks: '#e69487'
|
||||
hot water storage: '#e69487'
|
||||
hot water charging: '#e69487'
|
||||
hot water discharging: '#e69487'
|
||||
# heat demand
|
||||
Heat load: '#cc1f1f'
|
||||
heat: '#cc1f1f'
|
||||
heat demand: '#cc1f1f'
|
||||
rural heat: '#ff5c5c'
|
||||
central heat: '#cc1f1f'
|
||||
decentral heat: '#750606'
|
||||
low-temperature heat for industry: '#8f2727'
|
||||
process heat: '#ff0000'
|
||||
agriculture heat: '#d9a5a5'
|
||||
# heat supply
|
||||
heat pumps: '#2fb537'
|
||||
heat pump: '#2fb537'
|
||||
air heat pump: '#36eb41'
|
||||
ground heat pump: '#2fb537'
|
||||
Ambient: '#98eb9d'
|
||||
CHP: '#8a5751'
|
||||
CHP CC: '#634643'
|
||||
CHP heat: '#8a5751'
|
||||
CHP electric: '#8a5751'
|
||||
district heating: '#e8beac'
|
||||
resistive heater: '#c78536'
|
||||
retrofitting: '#8487e8'
|
||||
building retrofitting: '#8487e8'
|
||||
# hydrogen
|
||||
H2 for industry: "#f073da"
|
||||
H2 for shipping: "#ebaee0"
|
||||
H2: '#bf13a0'
|
||||
SMR: '#870c71'
|
||||
SMR CC: '#4f1745'
|
||||
H2 liquefaction: '#d647bd'
|
||||
hydrogen storage: '#bf13a0'
|
||||
land transport fuel cell: '#6b3161'
|
||||
H2 pipeline: '#f081dc'
|
||||
H2 Fuel Cell: '#c251ae'
|
||||
H2 Electrolysis: '#ff29d9'
|
||||
# syngas
|
||||
Sabatier: '#9850ad'
|
||||
methanation: '#c44ce6'
|
||||
helmeth: '#e899ff'
|
||||
# synfuels
|
||||
Fischer-Tropsch: '#25c49a'
|
||||
kerosene for aviation: '#a1ffe6'
|
||||
naphtha for industry: '#57ebc4'
|
||||
# co2
|
||||
CC: '#9e132c'
|
||||
CO2 sequestration: '#9e132c'
|
||||
DAC: '#ff5270'
|
||||
co2 stored: '#f2385a'
|
||||
co2: '#f29dae'
|
||||
co2 vent: '#ffd4dc'
|
||||
CO2 pipeline: '#f5627f'
|
||||
# emissions
|
||||
process emissions CC: '#000000'
|
||||
process emissions: '#222222'
|
||||
process emissions to stored: '#444444'
|
||||
process emissions to atmosphere: '#888888'
|
||||
oil emissions: '#aaaaaa'
|
||||
shipping oil emissions: "#555555"
|
||||
land transport oil emissions: '#777777'
|
||||
agriculture machinery oil emissions: '#333333'
|
||||
# other
|
||||
shipping: '#03a2ff'
|
||||
power-to-heat: '#cc1f1f'
|
||||
power-to-gas: '#c44ce6'
|
||||
power-to-liquid: '#25c49a'
|
||||
gas-to-power/heat: '#ee8340'
|
596
config.h2.yaml
Normal file
596
config.h2.yaml
Normal file
@ -0,0 +1,596 @@
|
||||
version: 0.6.0
|
||||
|
||||
logging_level: INFO
|
||||
|
||||
results_dir: results/
|
||||
summary_dir: results
|
||||
costs_dir: ../technology-data/outputs/
|
||||
run: 20211218-181-h2 # use this to keep track of runs with different settings
|
||||
foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented)
|
||||
# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below
|
||||
|
||||
scenario:
|
||||
simpl: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt"
|
||||
- 1.0
|
||||
#- 1.25
|
||||
- opt
|
||||
clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred
|
||||
- 181
|
||||
opts: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
sector_opts: # this is where the main scenario settings are
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-noH2network
|
||||
#- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-noH2network-onwind+p0.25
|
||||
#- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.25
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-noH2network-onwind+p0
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0
|
||||
# to really understand the options here, look in scripts/prepare_sector_network.py
|
||||
# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
|
||||
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
|
||||
# xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours
|
||||
# single letters are sectors: T for land transport, H for building heating,
|
||||
# B for biomass supply, I for industry, shipping and aviation,
|
||||
# A for agriculture, forestry and fishing
|
||||
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
|
||||
# solar+p3 multiplies the available installable potential by factor 3
|
||||
# co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2
|
||||
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
|
||||
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
|
||||
# emissions throughout the transition path in the timeframe determined by the
|
||||
# planning_horizons), be:beta decay; ex:exponential decay
|
||||
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
|
||||
# decay with initial growth rate 0
|
||||
planning_horizons: # investment years for myopic and perfect; or costs year for overnight
|
||||
- 2030
|
||||
# for example, set to [2020, 2030, 2040, 2050] for myopic foresight
|
||||
|
||||
# CO2 budget as a fraction of 1990 emissions
|
||||
# this is over-ridden if CO2Lx is set in sector_opts
|
||||
# this is also over-ridden if cb is set in sector_opts
|
||||
co2_budget:
|
||||
2020: 0.7011648746
|
||||
2025: 0.5241935484
|
||||
2030: 0.2970430108
|
||||
2035: 0.1500896057
|
||||
2040: 0.0712365591
|
||||
2045: 0.0322580645
|
||||
2050: 0
|
||||
|
||||
# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec
|
||||
snapshots:
|
||||
# arguments to pd.date_range
|
||||
start: "2013-01-01"
|
||||
end: "2014-01-01"
|
||||
closed: left # end is not inclusive
|
||||
|
||||
atlite:
|
||||
cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc
|
||||
|
||||
# this information is NOT used but needed as an argument for
|
||||
# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py
|
||||
electricity:
|
||||
max_hours:
|
||||
battery: 6
|
||||
H2: 168
|
||||
|
||||
# regulate what components with which carriers are kept from PyPSA-Eur;
|
||||
# some technologies are removed because they are implemented differently
|
||||
# (e.g. battery or H2 storage) or have different year-dependent costs
|
||||
# in PyPSA-Eur-Sec
|
||||
pypsa_eur:
|
||||
Bus:
|
||||
- AC
|
||||
Link:
|
||||
- DC
|
||||
Generator:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
StorageUnit:
|
||||
- PHS
|
||||
- hydro
|
||||
Store: []
|
||||
|
||||
|
||||
energy:
|
||||
energy_totals_year: 2011
|
||||
base_emissions_year: 1990
|
||||
eurostat_report_year: 2016
|
||||
emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)"
|
||||
|
||||
biomass:
|
||||
year: 2030
|
||||
scenario: ENS_Med
|
||||
classes:
|
||||
solid biomass:
|
||||
- Agricultural waste
|
||||
- Fuelwood residues
|
||||
- Secondary Forestry residues - woodchips
|
||||
- Sawdust
|
||||
- Residues from landscape care
|
||||
- Municipal waste
|
||||
not included:
|
||||
- Sugar from sugar beet
|
||||
- Rape seed
|
||||
- "Sunflower, soya seed "
|
||||
- Bioethanol barley, wheat, grain maize, oats, other cereals and rye
|
||||
- Miscanthus, switchgrass, RCG
|
||||
- Willow
|
||||
- Poplar
|
||||
- FuelwoodRW
|
||||
- C&P_RW
|
||||
biogas:
|
||||
- Manure solid, liquid
|
||||
- Sludge
|
||||
|
||||
|
||||
solar_thermal:
|
||||
clearsky_model: simple # should be "simple" or "enhanced"?
|
||||
orientation:
|
||||
slope: 45.
|
||||
azimuth: 180.
|
||||
|
||||
# only relevant for foresight = myopic or perfect
|
||||
existing_capacities:
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019]
|
||||
threshold_capacity: 10
|
||||
conventional_carriers:
|
||||
- lignite
|
||||
- coal
|
||||
- oil
|
||||
- uranium
|
||||
|
||||
|
||||
sector:
|
||||
district_heating:
|
||||
potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating
|
||||
# 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
|
||||
progress: 1
|
||||
# 2020: 0.0
|
||||
# 2030: 0.3
|
||||
# 2040: 0.6
|
||||
# 2050: 1.0
|
||||
district_heating_loss: 0.15
|
||||
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
|
||||
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
|
||||
transport_heating_deadband_upper: 20.
|
||||
transport_heating_deadband_lower: 15.
|
||||
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
|
||||
ICE_upper_degree_factor: 1.6
|
||||
EV_lower_degree_factor: 0.98
|
||||
EV_upper_degree_factor: 0.63
|
||||
bev_dsm: true #turns on EV battery
|
||||
bev_availability: 0.5 #How many cars do smart charging
|
||||
bev_energy: 0.05 #average battery size in MWh
|
||||
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
|
||||
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
|
||||
bev_charge_rate: 0.011 #3-phase charger with 11 kW
|
||||
bev_avail_max: 0.95
|
||||
bev_avail_mean: 0.8
|
||||
v2g: true #allows feed-in to grid from EV battery
|
||||
#what is not EV or FCEV is oil-fuelled ICE
|
||||
land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs
|
||||
# 2020: 0
|
||||
# 2030: 0.05
|
||||
# 2040: 0.1
|
||||
# 2050: 0.15
|
||||
land_transport_electric_share: 0.85 # 1 means all EVs
|
||||
# 2020: 0
|
||||
# 2030: 0.25
|
||||
# 2040: 0.6
|
||||
# 2050: 0.85
|
||||
transport_fuel_cell_efficiency: 0.5
|
||||
transport_internal_combustion_efficiency: 0.3
|
||||
agriculture_machinery_electric_share: 0
|
||||
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
|
||||
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
|
||||
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||
shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands
|
||||
shipping_hydrogen_share: 1 # 1 means all hydrogen FC
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.15
|
||||
# 2040: 0.3
|
||||
# 2045: 0.6
|
||||
# 2050: 1
|
||||
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
|
||||
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
|
||||
# this can represent e.g. building renovation, building demolition, or if
|
||||
# the factor is negative: increasing floor area, increased thermal comfort, population growth
|
||||
reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand
|
||||
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
|
||||
# 2020: 0.10 # this results in a space heat demand reduction of 10%
|
||||
# 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
|
||||
# 2030: 0.09
|
||||
# 2035: 0.11
|
||||
# 2040: 0.16
|
||||
# 2045: 0.21
|
||||
# 2050: 0.29
|
||||
retrofitting : # co-optimises building renovation to reduce space heat demand
|
||||
retro_endogen: false # co-optimise space heat savings
|
||||
cost_factor: 1.0 # weight costs for building renovation
|
||||
interest_rate: 0.04 # for investment in building components
|
||||
annualise_cost: true # annualise the investment costs
|
||||
tax_weighting: false # weight costs depending on taxes in countries
|
||||
construction_index: true # weight costs depending on labour/material costs per country
|
||||
tes: true
|
||||
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
|
||||
decentral: 3
|
||||
central: 180
|
||||
boilers: true
|
||||
oil_boilers: false
|
||||
chp: true
|
||||
micro_chp: false
|
||||
solar_thermal: true
|
||||
solar_cf_correction: 0.788457 # = >>> 1/1.2683
|
||||
marginal_cost_storage: 0. #1e-4
|
||||
methanation: true
|
||||
helmeth: false
|
||||
dac: true
|
||||
co2_vent: false
|
||||
SMR: true
|
||||
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
|
||||
co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2
|
||||
co2_network: false
|
||||
cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture
|
||||
hydrogen_underground_storage: true
|
||||
hydrogen_underground_storage_locations:
|
||||
# - onshore # more than 50 km from sea
|
||||
- nearshore # within 50 km of sea
|
||||
# - offshore
|
||||
use_fischer_tropsch_waste_heat: true
|
||||
use_fuel_cell_waste_heat: true
|
||||
electricity_distribution_grid: true
|
||||
electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
electricity_grid_connection: true # only applies to onshore wind and utility PV
|
||||
H2_network: true
|
||||
gas_network: false
|
||||
H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes
|
||||
# according to hydrogen backbone strategy (April, 2020) p.15
|
||||
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
||||
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
||||
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
||||
gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
||||
gas_distribution_grid: true
|
||||
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
biomass_transport: false # biomass transport between nodes
|
||||
conventional_generation: # generator : carrier
|
||||
OCGT: gas
|
||||
|
||||
|
||||
industry:
|
||||
St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6
|
||||
# 2020: 0.6
|
||||
# 2025: 0.55
|
||||
# 2030: 0.5
|
||||
# 2035: 0.45
|
||||
# 2040: 0.4
|
||||
# 2045: 0.35
|
||||
# 2050: 0.3
|
||||
DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.2
|
||||
# 2040: 0.4
|
||||
# 2045: 0.7
|
||||
# 2050: 1
|
||||
H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279
|
||||
elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf
|
||||
Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4
|
||||
# 2020: 0.4
|
||||
# 2025: 0.375
|
||||
# 2030: 0.35
|
||||
# 2035: 0.325
|
||||
# 2040: 0.3
|
||||
# 2045: 0.25
|
||||
# 2050: 0.2
|
||||
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
|
||||
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
|
||||
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)
|
||||
MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
|
||||
NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
|
||||
petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
|
||||
HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route
|
||||
HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling
|
||||
HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling
|
||||
HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX
|
||||
MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756.
|
||||
MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking
|
||||
chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43
|
||||
MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43
|
||||
MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process
|
||||
methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62
|
||||
MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65
|
||||
MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65
|
||||
hotmaps_locate_missing: false
|
||||
reference_year: 2015
|
||||
# references:
|
||||
# DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf
|
||||
# Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050
|
||||
|
||||
costs:
|
||||
lifetime: 25 #default lifetime
|
||||
# From a Lion Hirth paper, also reflects average of Noothout et al 2016
|
||||
discountrate: 0.07
|
||||
# [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501
|
||||
USD2013_to_EUR2013: 0.7532
|
||||
|
||||
# Marginal and capital costs can be overwritten
|
||||
# capital_cost:
|
||||
# onwind: 500
|
||||
marginal_cost:
|
||||
solar: 0.01
|
||||
onwind: 0.015
|
||||
offwind: 0.015
|
||||
hydro: 0.
|
||||
H2: 0.
|
||||
battery: 0.
|
||||
|
||||
emission_prices: # only used with the option Ep (emission prices)
|
||||
co2: 0.
|
||||
|
||||
lines:
|
||||
length_factor: 1.25 #to estimate offwind connection costs
|
||||
|
||||
|
||||
solving:
|
||||
#tmpdir: "path/to/tmp"
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
clip_p_max_pu: 1.e-2
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
skip_iterations: true
|
||||
track_iterations: false
|
||||
min_iterations: 4
|
||||
max_iterations: 6
|
||||
keep_shadowprices:
|
||||
- Bus
|
||||
- Line
|
||||
- Link
|
||||
- Transformer
|
||||
- GlobalConstraint
|
||||
- Generator
|
||||
- Store
|
||||
- StorageUnit
|
||||
solver:
|
||||
name: gurobi
|
||||
threads: 4
|
||||
method: 2 # barrier
|
||||
crossover: 0
|
||||
BarConvTol: 1.e-4
|
||||
Seed: 123
|
||||
AggFill: 0
|
||||
PreDual: 0
|
||||
GURO_PAR_BARDENSETHRESH: 200
|
||||
#FeasibilityTol: 1.e-6
|
||||
|
||||
#name: cplex
|
||||
#threads: 4
|
||||
#lpmethod: 4 # barrier
|
||||
#solutiontype: 2 # non basic solution, ie no crossover
|
||||
#barrier_convergetol: 1.e-5
|
||||
#feasopt_tolerance: 1.e-6
|
||||
mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
|
||||
|
||||
plotting:
|
||||
map:
|
||||
boundaries: [-11, 30, 34, 71]
|
||||
color_geomap:
|
||||
ocean: white
|
||||
land: white
|
||||
costs_max: 1000
|
||||
costs_threshold: 1
|
||||
energy_max: 20000
|
||||
energy_min: -20000
|
||||
energy_threshold: 50
|
||||
vre_techs:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
renewable_storage_techs:
|
||||
- PHS
|
||||
- hydro
|
||||
conv_techs:
|
||||
- OCGT
|
||||
- CCGT
|
||||
- Nuclear
|
||||
- Coal
|
||||
storage_techs:
|
||||
- hydro+PHS
|
||||
- battery
|
||||
- H2
|
||||
load_carriers:
|
||||
- AC load
|
||||
AC_carriers:
|
||||
- AC line
|
||||
- AC transformer
|
||||
link_carriers:
|
||||
- DC line
|
||||
- Converter AC-DC
|
||||
heat_links:
|
||||
- heat pump
|
||||
- resistive heater
|
||||
- CHP heat
|
||||
- CHP electric
|
||||
- gas boiler
|
||||
- central heat pump
|
||||
- central resistive heater
|
||||
- central CHP heat
|
||||
- central CHP electric
|
||||
- central gas boiler
|
||||
heat_generators:
|
||||
- gas boiler
|
||||
- central gas boiler
|
||||
- solar thermal collector
|
||||
- central solar thermal collector
|
||||
tech_colors:
|
||||
# wind
|
||||
onwind: "#235ebc"
|
||||
onshore wind: "#235ebc"
|
||||
offwind: "#6895dd"
|
||||
offshore wind: "#6895dd"
|
||||
offwind-ac: "#6895dd"
|
||||
offshore wind (AC): "#6895dd"
|
||||
offwind-dc: "#74c6f2"
|
||||
offshore wind (DC): "#74c6f2"
|
||||
# water
|
||||
hydro: '#298c81'
|
||||
hydro reservoir: '#298c81'
|
||||
ror: '#3dbfb0'
|
||||
run of river: '#3dbfb0'
|
||||
hydroelectricity: '#298c81'
|
||||
PHS: '#51dbcc'
|
||||
wave: '#a7d4cf'
|
||||
# solar
|
||||
solar: "#f9d002"
|
||||
solar PV: "#f9d002"
|
||||
solar thermal: '#ffbf2b'
|
||||
solar rooftop: '#ffea80'
|
||||
# gas
|
||||
OCGT: '#e0986c'
|
||||
OCGT marginal: '#e0986c'
|
||||
OCGT-heat: '#e0986c'
|
||||
gas boiler: '#db6a25'
|
||||
gas boilers: '#db6a25'
|
||||
gas boiler marginal: '#db6a25'
|
||||
gas: '#e05b09'
|
||||
natural gas: '#e05b09'
|
||||
CCGT: '#a85522'
|
||||
CCGT marginal: '#a85522'
|
||||
gas for industry co2 to atmosphere: '#692e0a'
|
||||
gas for industry co2 to stored: '#8a3400'
|
||||
gas for industry: '#853403'
|
||||
gas for industry CC: '#692e0a'
|
||||
gas pipeline: '#ebbca0'
|
||||
# oil
|
||||
oil: '#c9c9c9'
|
||||
oil boiler: '#adadad'
|
||||
agriculture machinery oil: '#949494'
|
||||
shipping oil: "#808080"
|
||||
land transport oil: '#afafaf'
|
||||
# nuclear
|
||||
Nuclear: '#ff8c00'
|
||||
Nuclear marginal: '#ff8c00'
|
||||
nuclear: '#ff8c00'
|
||||
uranium: '#ff8c00'
|
||||
# coal
|
||||
Coal: '#545454'
|
||||
coal: '#545454'
|
||||
Coal marginal: '#545454'
|
||||
Lignite: '#826837'
|
||||
lignite: '#826837'
|
||||
Lignite marginal: '#826837'
|
||||
# biomass
|
||||
biogas: '#e3d37d'
|
||||
solid biomass: '#baa741'
|
||||
solid biomass transport: '#baa741'
|
||||
solid biomass for industry: '#7a6d26'
|
||||
solid biomass for industry CC: '#47411c'
|
||||
solid biomass for industry co2 from atmosphere: '#736412'
|
||||
solid biomass for industry co2 to stored: '#47411c'
|
||||
# power transmission
|
||||
lines: '#6c9459'
|
||||
transmission lines: '#6c9459'
|
||||
electricity distribution grid: '#97ad8c'
|
||||
# electricity demand
|
||||
Electric load: '#110d63'
|
||||
electric demand: '#110d63'
|
||||
electricity: '#110d63'
|
||||
industry electricity: '#2d2a66'
|
||||
industry new electricity: '#2d2a66'
|
||||
agriculture electricity: '#494778'
|
||||
# battery + EVs
|
||||
battery: '#ace37f'
|
||||
battery storage: '#ace37f'
|
||||
home battery: '#80c944'
|
||||
home battery storage: '#80c944'
|
||||
BEV charger: '#baf238'
|
||||
V2G: '#e5ffa8'
|
||||
land transport EV: '#baf238'
|
||||
Li ion: '#baf238'
|
||||
# hot water storage
|
||||
water tanks: '#e69487'
|
||||
hot water storage: '#e69487'
|
||||
hot water charging: '#e69487'
|
||||
hot water discharging: '#e69487'
|
||||
# heat demand
|
||||
Heat load: '#cc1f1f'
|
||||
heat: '#cc1f1f'
|
||||
heat demand: '#cc1f1f'
|
||||
rural heat: '#ff5c5c'
|
||||
central heat: '#cc1f1f'
|
||||
decentral heat: '#750606'
|
||||
low-temperature heat for industry: '#8f2727'
|
||||
process heat: '#ff0000'
|
||||
agriculture heat: '#d9a5a5'
|
||||
# heat supply
|
||||
heat pumps: '#2fb537'
|
||||
heat pump: '#2fb537'
|
||||
air heat pump: '#36eb41'
|
||||
ground heat pump: '#2fb537'
|
||||
Ambient: '#98eb9d'
|
||||
CHP: '#8a5751'
|
||||
CHP CC: '#634643'
|
||||
CHP heat: '#8a5751'
|
||||
CHP electric: '#8a5751'
|
||||
district heating: '#e8beac'
|
||||
resistive heater: '#c78536'
|
||||
retrofitting: '#8487e8'
|
||||
building retrofitting: '#8487e8'
|
||||
# hydrogen
|
||||
H2 for industry: "#f073da"
|
||||
H2 for shipping: "#ebaee0"
|
||||
H2: '#bf13a0'
|
||||
SMR: '#870c71'
|
||||
SMR CC: '#4f1745'
|
||||
H2 liquefaction: '#d647bd'
|
||||
hydrogen storage: '#bf13a0'
|
||||
land transport fuel cell: '#6b3161'
|
||||
H2 pipeline: '#f081dc'
|
||||
H2 Fuel Cell: '#c251ae'
|
||||
H2 Electrolysis: '#ff29d9'
|
||||
# syngas
|
||||
Sabatier: '#9850ad'
|
||||
methanation: '#c44ce6'
|
||||
helmeth: '#e899ff'
|
||||
# synfuels
|
||||
Fischer-Tropsch: '#25c49a'
|
||||
kerosene for aviation: '#a1ffe6'
|
||||
naphtha for industry: '#57ebc4'
|
||||
# co2
|
||||
CC: '#9e132c'
|
||||
CO2 sequestration: '#9e132c'
|
||||
DAC: '#ff5270'
|
||||
co2 stored: '#f2385a'
|
||||
co2: '#f29dae'
|
||||
co2 vent: '#ffd4dc'
|
||||
CO2 pipeline: '#f5627f'
|
||||
# emissions
|
||||
process emissions CC: '#000000'
|
||||
process emissions: '#222222'
|
||||
process emissions to stored: '#444444'
|
||||
process emissions to atmosphere: '#888888'
|
||||
oil emissions: '#aaaaaa'
|
||||
shipping oil emissions: "#555555"
|
||||
land transport oil emissions: '#777777'
|
||||
agriculture machinery oil emissions: '#333333'
|
||||
# other
|
||||
shipping: '#03a2ff'
|
||||
power-to-heat: '#cc1f1f'
|
||||
power-to-gas: '#c44ce6'
|
||||
power-to-liquid: '#25c49a'
|
||||
gas-to-power/heat: '#ee8340'
|
626
config.import.yaml
Normal file
626
config.import.yaml
Normal file
@ -0,0 +1,626 @@
|
||||
version: 0.6.0
|
||||
|
||||
logging_level: INFO
|
||||
|
||||
results_dir: results/
|
||||
summary_dir: results
|
||||
costs_dir: ../technology-data/outputs/
|
||||
run: 20211218-181-import # use this to keep track of runs with different settings
|
||||
foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented)
|
||||
# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below
|
||||
|
||||
scenario:
|
||||
simpl: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt"
|
||||
- 1.5
|
||||
clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred
|
||||
- 181
|
||||
opts: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
sector_opts: # this is where the main scenario settings are
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-import
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10
|
||||
# to really understand the options here, look in scripts/prepare_sector_network.py
|
||||
# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
|
||||
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
|
||||
# xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours
|
||||
# single letters are sectors: T for land transport, H for building heating,
|
||||
# B for biomass supply, I for industry, shipping and aviation,
|
||||
# A for agriculture, forestry and fishing
|
||||
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
|
||||
# solar+p3 multiplies the available installable potential by factor 3
|
||||
# co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2
|
||||
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
|
||||
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
|
||||
# emissions throughout the transition path in the timeframe determined by the
|
||||
# planning_horizons), be:beta decay; ex:exponential decay
|
||||
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
|
||||
# decay with initial growth rate 0
|
||||
planning_horizons: [2030] # investment years for myopic and perfect; or costs year for overnight
|
||||
# for example, set to [2020, 2030, 2040, 2050] for myopic foresight
|
||||
|
||||
# CO2 budget as a fraction of 1990 emissions
|
||||
# this is over-ridden if CO2Lx is set in sector_opts
|
||||
# this is also over-ridden if cb is set in sector_opts
|
||||
co2_budget:
|
||||
2020: 0.7011648746
|
||||
2025: 0.5241935484
|
||||
2030: 0.2970430108
|
||||
2035: 0.1500896057
|
||||
2040: 0.0712365591
|
||||
2045: 0.0322580645
|
||||
2050: 0
|
||||
|
||||
# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec
|
||||
snapshots:
|
||||
# arguments to pd.date_range
|
||||
start: "2013-01-01"
|
||||
end: "2014-01-01"
|
||||
closed: left # end is not inclusive
|
||||
|
||||
atlite:
|
||||
cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc
|
||||
|
||||
# this information is NOT used but needed as an argument for
|
||||
# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py
|
||||
electricity:
|
||||
max_hours:
|
||||
battery: 6
|
||||
H2: 168
|
||||
|
||||
# regulate what components with which carriers are kept from PyPSA-Eur;
|
||||
# some technologies are removed because they are implemented differently
|
||||
# (e.g. battery or H2 storage) or have different year-dependent costs
|
||||
# in PyPSA-Eur-Sec
|
||||
pypsa_eur:
|
||||
Bus:
|
||||
- AC
|
||||
Link:
|
||||
- DC
|
||||
Generator:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
StorageUnit:
|
||||
- PHS
|
||||
- hydro
|
||||
Store: []
|
||||
|
||||
|
||||
energy:
|
||||
energy_totals_year: 2011
|
||||
base_emissions_year: 1990
|
||||
eurostat_report_year: 2016
|
||||
emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)"
|
||||
|
||||
biomass:
|
||||
year: 2030
|
||||
scenario: ENS_Med
|
||||
classes:
|
||||
solid biomass:
|
||||
- Agricultural waste
|
||||
- Fuelwood residues
|
||||
- Secondary Forestry residues - woodchips
|
||||
- Sawdust
|
||||
- Residues from landscape care
|
||||
- Municipal waste
|
||||
not included:
|
||||
- Sugar from sugar beet
|
||||
- Rape seed
|
||||
- "Sunflower, soya seed "
|
||||
- Bioethanol barley, wheat, grain maize, oats, other cereals and rye
|
||||
- Miscanthus, switchgrass, RCG
|
||||
- Willow
|
||||
- Poplar
|
||||
- FuelwoodRW
|
||||
- C&P_RW
|
||||
biogas:
|
||||
- Manure solid, liquid
|
||||
- Sludge
|
||||
|
||||
|
||||
solar_thermal:
|
||||
clearsky_model: simple # should be "simple" or "enhanced"?
|
||||
orientation:
|
||||
slope: 45.
|
||||
azimuth: 180.
|
||||
|
||||
# only relevant for foresight = myopic or perfect
|
||||
existing_capacities:
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019]
|
||||
threshold_capacity: 10
|
||||
conventional_carriers:
|
||||
- lignite
|
||||
- coal
|
||||
- oil
|
||||
- uranium
|
||||
|
||||
|
||||
sector:
|
||||
district_heating:
|
||||
potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating
|
||||
# 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
|
||||
progress: 1
|
||||
# 2020: 0.0
|
||||
# 2030: 0.3
|
||||
# 2040: 0.6
|
||||
# 2050: 1.0
|
||||
district_heating_loss: 0.15
|
||||
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
|
||||
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
|
||||
transport_heating_deadband_upper: 20.
|
||||
transport_heating_deadband_lower: 15.
|
||||
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
|
||||
ICE_upper_degree_factor: 1.6
|
||||
EV_lower_degree_factor: 0.98
|
||||
EV_upper_degree_factor: 0.63
|
||||
bev_dsm: true #turns on EV battery
|
||||
bev_availability: 0.5 #How many cars do smart charging
|
||||
bev_energy: 0.05 #average battery size in MWh
|
||||
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
|
||||
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
|
||||
bev_charge_rate: 0.011 #3-phase charger with 11 kW
|
||||
bev_avail_max: 0.95
|
||||
bev_avail_mean: 0.8
|
||||
v2g: true #allows feed-in to grid from EV battery
|
||||
#what is not EV or FCEV is oil-fuelled ICE
|
||||
land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs
|
||||
# 2020: 0
|
||||
# 2030: 0.05
|
||||
# 2040: 0.1
|
||||
# 2050: 0.15
|
||||
land_transport_electric_share: 0.85 # 1 means all EVs
|
||||
# 2020: 0
|
||||
# 2030: 0.25
|
||||
# 2040: 0.6
|
||||
# 2050: 0.85
|
||||
transport_fuel_cell_efficiency: 0.5
|
||||
transport_internal_combustion_efficiency: 0.3
|
||||
agriculture_machinery_electric_share: 0
|
||||
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
|
||||
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
|
||||
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||
shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands
|
||||
shipping_hydrogen_share: 1 # 1 means all hydrogen FC
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.15
|
||||
# 2040: 0.3
|
||||
# 2045: 0.6
|
||||
# 2050: 1
|
||||
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
|
||||
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
|
||||
# this can represent e.g. building renovation, building demolition, or if
|
||||
# the factor is negative: increasing floor area, increased thermal comfort, population growth
|
||||
reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand
|
||||
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
|
||||
# 2020: 0.10 # this results in a space heat demand reduction of 10%
|
||||
# 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
|
||||
# 2030: 0.09
|
||||
# 2035: 0.11
|
||||
# 2040: 0.16
|
||||
# 2045: 0.21
|
||||
# 2050: 0.29
|
||||
retrofitting : # co-optimises building renovation to reduce space heat demand
|
||||
retro_endogen: false # co-optimise space heat savings
|
||||
cost_factor: 1.0 # weight costs for building renovation
|
||||
interest_rate: 0.04 # for investment in building components
|
||||
annualise_cost: true # annualise the investment costs
|
||||
tax_weighting: false # weight costs depending on taxes in countries
|
||||
construction_index: true # weight costs depending on labour/material costs per country
|
||||
tes: true
|
||||
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
|
||||
decentral: 3
|
||||
central: 180
|
||||
boilers: true
|
||||
oil_boilers: false
|
||||
chp: true
|
||||
micro_chp: false
|
||||
solar_thermal: true
|
||||
solar_cf_correction: 0.788457 # = >>> 1/1.2683
|
||||
marginal_cost_storage: 0. #1e-4
|
||||
methanation: true
|
||||
helmeth: false
|
||||
dac: true
|
||||
co2_vent: false
|
||||
SMR: true
|
||||
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
|
||||
co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2
|
||||
co2_network: false
|
||||
cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture
|
||||
hydrogen_underground_storage: true
|
||||
hydrogen_underground_storage_locations:
|
||||
# - onshore # more than 50 km from sea
|
||||
- nearshore # within 50 km of sea
|
||||
# - offshore
|
||||
use_fischer_tropsch_waste_heat: true
|
||||
use_fuel_cell_waste_heat: true
|
||||
electricity_distribution_grid: true
|
||||
electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
electricity_grid_connection: true # only applies to onshore wind and utility PV
|
||||
H2_network: true
|
||||
gas_network: false
|
||||
H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes
|
||||
# according to hydrogen backbone strategy (April, 2020) p.15
|
||||
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
||||
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
||||
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
||||
gas_network_connectivity_upgrade: 3 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
||||
gas_distribution_grid: true
|
||||
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
biomass_transport: false # biomass transport between nodes
|
||||
conventional_generation: # generator : carrier
|
||||
OCGT: gas
|
||||
import:
|
||||
capacity_boost: 2
|
||||
options:
|
||||
- pipeline-h2
|
||||
- shipping-lh2
|
||||
- shipping-lch4
|
||||
- shipping-ftfuel
|
||||
- hvdc
|
||||
# limit: 100 # TWh
|
||||
|
||||
|
||||
industry:
|
||||
St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6
|
||||
# 2020: 0.6
|
||||
# 2025: 0.55
|
||||
# 2030: 0.5
|
||||
# 2035: 0.45
|
||||
# 2040: 0.4
|
||||
# 2045: 0.35
|
||||
# 2050: 0.3
|
||||
DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.2
|
||||
# 2040: 0.4
|
||||
# 2045: 0.7
|
||||
# 2050: 1
|
||||
H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279
|
||||
elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf
|
||||
Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4
|
||||
# 2020: 0.4
|
||||
# 2025: 0.375
|
||||
# 2030: 0.35
|
||||
# 2035: 0.325
|
||||
# 2040: 0.3
|
||||
# 2045: 0.25
|
||||
# 2050: 0.2
|
||||
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
|
||||
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
|
||||
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)
|
||||
MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
|
||||
NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
|
||||
petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
|
||||
HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route
|
||||
HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling
|
||||
HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling
|
||||
HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX
|
||||
MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756.
|
||||
MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking
|
||||
chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43
|
||||
MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43
|
||||
MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process
|
||||
methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62
|
||||
MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65
|
||||
MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65
|
||||
hotmaps_locate_missing: false
|
||||
reference_year: 2015
|
||||
# references:
|
||||
# DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf
|
||||
# Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050
|
||||
import:
|
||||
capacity_boost: 2
|
||||
options:
|
||||
- pipeline-h2
|
||||
- shipping-lh2
|
||||
- shipping-lch4
|
||||
- shipping-ftfuel
|
||||
- hvdc
|
||||
# limit: 100 # TWh
|
||||
|
||||
costs:
|
||||
lifetime: 25 #default lifetime
|
||||
# From a Lion Hirth paper, also reflects average of Noothout et al 2016
|
||||
discountrate: 0.07
|
||||
# [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501
|
||||
USD2013_to_EUR2013: 0.7532
|
||||
|
||||
# Marginal and capital costs can be overwritten
|
||||
# capital_cost:
|
||||
# onwind: 500
|
||||
marginal_cost:
|
||||
solar: 0.01
|
||||
onwind: 0.015
|
||||
offwind: 0.015
|
||||
hydro: 0.
|
||||
H2: 0.
|
||||
battery: 0.
|
||||
|
||||
emission_prices: # only used with the option Ep (emission prices)
|
||||
co2: 0.
|
||||
|
||||
lines:
|
||||
length_factor: 1.25 #to estimate offwind connection costs
|
||||
|
||||
|
||||
solving:
|
||||
#tmpdir: "path/to/tmp"
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
clip_p_max_pu: 1.e-2
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
skip_iterations: true
|
||||
track_iterations: false
|
||||
min_iterations: 4
|
||||
max_iterations: 6
|
||||
keep_shadowprices:
|
||||
- Bus
|
||||
- Line
|
||||
- Link
|
||||
- Transformer
|
||||
- GlobalConstraint
|
||||
- Generator
|
||||
- Store
|
||||
- StorageUnit
|
||||
solver:
|
||||
name: gurobi
|
||||
threads: 8
|
||||
method: 2 # barrier
|
||||
crossover: 0
|
||||
BarConvTol: 1.e-4
|
||||
Seed: 123
|
||||
AggFill: 0
|
||||
PreDual: 0
|
||||
GURO_PAR_BARDENSETHRESH: 200
|
||||
#FeasibilityTol: 1.e-6
|
||||
|
||||
#name: cplex
|
||||
#threads: 4
|
||||
#lpmethod: 4 # barrier
|
||||
#solutiontype: 2 # non basic solution, ie no crossover
|
||||
#barrier_convergetol: 1.e-5
|
||||
#feasopt_tolerance: 1.e-6
|
||||
mem: 160000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
|
||||
|
||||
plotting:
|
||||
map:
|
||||
boundaries: [-11, 30, 34, 71]
|
||||
color_geomap:
|
||||
ocean: white
|
||||
land: white
|
||||
costs_max: 1000
|
||||
costs_threshold: 1
|
||||
energy_max: 20000
|
||||
energy_min: -20000
|
||||
energy_threshold: 50
|
||||
vre_techs:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
renewable_storage_techs:
|
||||
- PHS
|
||||
- hydro
|
||||
conv_techs:
|
||||
- OCGT
|
||||
- CCGT
|
||||
- Nuclear
|
||||
- Coal
|
||||
storage_techs:
|
||||
- hydro+PHS
|
||||
- battery
|
||||
- H2
|
||||
load_carriers:
|
||||
- AC load
|
||||
AC_carriers:
|
||||
- AC line
|
||||
- AC transformer
|
||||
link_carriers:
|
||||
- DC line
|
||||
- Converter AC-DC
|
||||
heat_links:
|
||||
- heat pump
|
||||
- resistive heater
|
||||
- CHP heat
|
||||
- CHP electric
|
||||
- gas boiler
|
||||
- central heat pump
|
||||
- central resistive heater
|
||||
- central CHP heat
|
||||
- central CHP electric
|
||||
- central gas boiler
|
||||
heat_generators:
|
||||
- gas boiler
|
||||
- central gas boiler
|
||||
- solar thermal collector
|
||||
- central solar thermal collector
|
||||
tech_colors:
|
||||
# wind
|
||||
onwind: "#235ebc"
|
||||
onshore wind: "#235ebc"
|
||||
offwind: "#6895dd"
|
||||
offshore wind: "#6895dd"
|
||||
offwind-ac: "#6895dd"
|
||||
offshore wind (AC): "#6895dd"
|
||||
offwind-dc: "#74c6f2"
|
||||
offshore wind (DC): "#74c6f2"
|
||||
# water
|
||||
hydro: '#298c81'
|
||||
hydro reservoir: '#298c81'
|
||||
ror: '#3dbfb0'
|
||||
run of river: '#3dbfb0'
|
||||
hydroelectricity: '#298c81'
|
||||
PHS: '#51dbcc'
|
||||
wave: '#a7d4cf'
|
||||
# solar
|
||||
solar: "#f9d002"
|
||||
solar PV: "#f9d002"
|
||||
solar thermal: '#ffbf2b'
|
||||
solar rooftop: '#ffea80'
|
||||
# gas
|
||||
OCGT: '#e0986c'
|
||||
OCGT marginal: '#e0986c'
|
||||
OCGT-heat: '#e0986c'
|
||||
gas boiler: '#db6a25'
|
||||
gas boilers: '#db6a25'
|
||||
gas boiler marginal: '#db6a25'
|
||||
gas: '#e05b09'
|
||||
fossil gas: '#e05b09'
|
||||
natural gas: '#e05b09'
|
||||
CCGT: '#a85522'
|
||||
CCGT marginal: '#a85522'
|
||||
gas for industry co2 to atmosphere: '#692e0a'
|
||||
gas for industry co2 to stored: '#8a3400'
|
||||
gas for industry: '#853403'
|
||||
gas for industry CC: '#692e0a'
|
||||
gas pipeline: '#ebbca0'
|
||||
gas pipeline new: '#a87c62'
|
||||
# oil
|
||||
oil: '#c9c9c9'
|
||||
oil boiler: '#adadad'
|
||||
agriculture machinery oil: '#949494'
|
||||
shipping oil: "#808080"
|
||||
land transport oil: '#afafaf'
|
||||
# nuclear
|
||||
Nuclear: '#ff8c00'
|
||||
Nuclear marginal: '#ff8c00'
|
||||
nuclear: '#ff8c00'
|
||||
uranium: '#ff8c00'
|
||||
# coal
|
||||
Coal: '#545454'
|
||||
coal: '#545454'
|
||||
Coal marginal: '#545454'
|
||||
solid: '#545454'
|
||||
Lignite: '#826837'
|
||||
lignite: '#826837'
|
||||
Lignite marginal: '#826837'
|
||||
# biomass
|
||||
biogas: '#e3d37d'
|
||||
biomass: '#baa741'
|
||||
solid biomass: '#baa741'
|
||||
solid biomass transport: '#baa741'
|
||||
solid biomass for industry: '#7a6d26'
|
||||
solid biomass for industry CC: '#47411c'
|
||||
solid biomass for industry co2 from atmosphere: '#736412'
|
||||
solid biomass for industry co2 to stored: '#47411c'
|
||||
# power transmission
|
||||
lines: '#6c9459'
|
||||
transmission lines: '#6c9459'
|
||||
electricity distribution grid: '#97ad8c'
|
||||
# electricity demand
|
||||
Electric load: '#110d63'
|
||||
electric demand: '#110d63'
|
||||
electricity: '#110d63'
|
||||
industry electricity: '#2d2a66'
|
||||
industry new electricity: '#2d2a66'
|
||||
agriculture electricity: '#494778'
|
||||
# battery + EVs
|
||||
battery: '#ace37f'
|
||||
battery storage: '#ace37f'
|
||||
home battery: '#80c944'
|
||||
home battery storage: '#80c944'
|
||||
BEV charger: '#baf238'
|
||||
V2G: '#e5ffa8'
|
||||
land transport EV: '#baf238'
|
||||
Li ion: '#baf238'
|
||||
# hot water storage
|
||||
water tanks: '#e69487'
|
||||
hot water storage: '#e69487'
|
||||
hot water charging: '#e69487'
|
||||
hot water discharging: '#e69487'
|
||||
# heat demand
|
||||
Heat load: '#cc1f1f'
|
||||
heat: '#cc1f1f'
|
||||
heat demand: '#cc1f1f'
|
||||
rural heat: '#ff5c5c'
|
||||
central heat: '#cc1f1f'
|
||||
decentral heat: '#750606'
|
||||
low-temperature heat for industry: '#8f2727'
|
||||
process heat: '#ff0000'
|
||||
agriculture heat: '#d9a5a5'
|
||||
# heat supply
|
||||
heat pumps: '#2fb537'
|
||||
heat pump: '#2fb537'
|
||||
air heat pump: '#36eb41'
|
||||
ground heat pump: '#2fb537'
|
||||
Ambient: '#98eb9d'
|
||||
CHP: '#8a5751'
|
||||
CHP CC: '#634643'
|
||||
CHP heat: '#8a5751'
|
||||
CHP electric: '#8a5751'
|
||||
district heating: '#e8beac'
|
||||
resistive heater: '#d8f9b8'
|
||||
retrofitting: '#8487e8'
|
||||
building retrofitting: '#8487e8'
|
||||
# hydrogen
|
||||
H2 for industry: "#f073da"
|
||||
H2 for shipping: "#ebaee0"
|
||||
H2: '#bf13a0'
|
||||
hydrogen: '#bf13a0'
|
||||
SMR: '#870c71'
|
||||
SMR CC: '#4f1745'
|
||||
H2 liquefaction: '#d647bd'
|
||||
hydrogen storage: '#bf13a0'
|
||||
H2 storage: '#bf13a0'
|
||||
land transport fuel cell: '#6b3161'
|
||||
H2 pipeline: '#f081dc'
|
||||
H2 pipeline retrofitted: '#ba99b5'
|
||||
H2 Fuel Cell: '#c251ae'
|
||||
H2 Electrolysis: '#ff29d9'
|
||||
# syngas
|
||||
Sabatier: '#9850ad'
|
||||
methanation: '#c44ce6'
|
||||
methane: '#c44ce6'
|
||||
helmeth: '#e899ff'
|
||||
# synfuels
|
||||
Fischer-Tropsch: '#25c49a'
|
||||
liquid: '#25c49a'
|
||||
kerosene for aviation: '#a1ffe6'
|
||||
naphtha for industry: '#57ebc4'
|
||||
# co2
|
||||
CC: '#f29dae'
|
||||
CCS: '#f29dae'
|
||||
CO2 sequestration: '#f29dae'
|
||||
DAC: '#ff5270'
|
||||
co2 stored: '#f2385a'
|
||||
co2: '#f29dae'
|
||||
co2 vent: '#ffd4dc'
|
||||
CO2 pipeline: '#f5627f'
|
||||
# emissions
|
||||
process emissions CC: '#000000'
|
||||
process emissions: '#222222'
|
||||
process emissions to stored: '#444444'
|
||||
process emissions to atmosphere: '#888888'
|
||||
oil emissions: '#aaaaaa'
|
||||
shipping oil emissions: "#555555"
|
||||
land transport oil emissions: '#777777'
|
||||
agriculture machinery oil emissions: '#333333'
|
||||
# other
|
||||
shipping: '#03a2ff'
|
||||
power-to-heat: '#2fb537'
|
||||
power-to-gas: '#c44ce6'
|
||||
power-to-H2: '#ff29d9'
|
||||
power-to-liquid: '#25c49a'
|
||||
gas-to-power/heat: '#ee8340'
|
||||
waste: '#e3d37d'
|
||||
other: '#000000'
|
||||
import pipeline-h2: '#fff6e0'
|
||||
import shipping-lh2: '#ebe1ca'
|
||||
import shipping-lch4: '#d6cbb2'
|
||||
import shipping-ftfuel: '#bdb093'
|
||||
import hvdc: '#91856a'
|
||||
|
594
config.lv.yaml
Normal file
594
config.lv.yaml
Normal file
@ -0,0 +1,594 @@
|
||||
version: 0.6.0
|
||||
|
||||
logging_level: INFO
|
||||
|
||||
results_dir: results/
|
||||
summary_dir: results
|
||||
costs_dir: ../technology-data/outputs/
|
||||
run: 20211218-181-lv # use this to keep track of runs with different settings
|
||||
foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented)
|
||||
# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below
|
||||
|
||||
scenario:
|
||||
simpl: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt"
|
||||
- 1.0
|
||||
- 1.125
|
||||
- 1.25
|
||||
- 1.5
|
||||
- 1.75
|
||||
- 2.0
|
||||
clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred
|
||||
- 181
|
||||
opts: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
sector_opts: # this is where the main scenario settings are
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10
|
||||
# to really understand the options here, look in scripts/prepare_sector_network.py
|
||||
# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
|
||||
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
|
||||
# xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours
|
||||
# single letters are sectors: T for land transport, H for building heating,
|
||||
# B for biomass supply, I for industry, shipping and aviation,
|
||||
# A for agriculture, forestry and fishing
|
||||
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
|
||||
# solar+p3 multiplies the available installable potential by factor 3
|
||||
# co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2
|
||||
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
|
||||
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
|
||||
# emissions throughout the transition path in the timeframe determined by the
|
||||
# planning_horizons), be:beta decay; ex:exponential decay
|
||||
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
|
||||
# decay with initial growth rate 0
|
||||
planning_horizons: # investment years for myopic and perfect; or costs year for overnight
|
||||
- 2030
|
||||
# for example, set to [2020, 2030, 2040, 2050] for myopic foresight
|
||||
|
||||
# CO2 budget as a fraction of 1990 emissions
|
||||
# this is over-ridden if CO2Lx is set in sector_opts
|
||||
# this is also over-ridden if cb is set in sector_opts
|
||||
co2_budget:
|
||||
2020: 0.7011648746
|
||||
2025: 0.5241935484
|
||||
2030: 0.2970430108
|
||||
2035: 0.1500896057
|
||||
2040: 0.0712365591
|
||||
2045: 0.0322580645
|
||||
2050: 0
|
||||
|
||||
# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec
|
||||
snapshots:
|
||||
# arguments to pd.date_range
|
||||
start: "2013-01-01"
|
||||
end: "2014-01-01"
|
||||
closed: left # end is not inclusive
|
||||
|
||||
atlite:
|
||||
cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc
|
||||
|
||||
# this information is NOT used but needed as an argument for
|
||||
# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py
|
||||
electricity:
|
||||
max_hours:
|
||||
battery: 6
|
||||
H2: 168
|
||||
|
||||
# regulate what components with which carriers are kept from PyPSA-Eur;
|
||||
# some technologies are removed because they are implemented differently
|
||||
# (e.g. battery or H2 storage) or have different year-dependent costs
|
||||
# in PyPSA-Eur-Sec
|
||||
pypsa_eur:
|
||||
Bus:
|
||||
- AC
|
||||
Link:
|
||||
- DC
|
||||
Generator:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
StorageUnit:
|
||||
- PHS
|
||||
- hydro
|
||||
Store: []
|
||||
|
||||
|
||||
energy:
|
||||
energy_totals_year: 2011
|
||||
base_emissions_year: 1990
|
||||
eurostat_report_year: 2016
|
||||
emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)"
|
||||
|
||||
biomass:
|
||||
year: 2030
|
||||
scenario: ENS_Med
|
||||
classes:
|
||||
solid biomass:
|
||||
- Agricultural waste
|
||||
- Fuelwood residues
|
||||
- Secondary Forestry residues - woodchips
|
||||
- Sawdust
|
||||
- Residues from landscape care
|
||||
- Municipal waste
|
||||
not included:
|
||||
- Sugar from sugar beet
|
||||
- Rape seed
|
||||
- "Sunflower, soya seed "
|
||||
- Bioethanol barley, wheat, grain maize, oats, other cereals and rye
|
||||
- Miscanthus, switchgrass, RCG
|
||||
- Willow
|
||||
- Poplar
|
||||
- FuelwoodRW
|
||||
- C&P_RW
|
||||
biogas:
|
||||
- Manure solid, liquid
|
||||
- Sludge
|
||||
|
||||
|
||||
solar_thermal:
|
||||
clearsky_model: simple # should be "simple" or "enhanced"?
|
||||
orientation:
|
||||
slope: 45.
|
||||
azimuth: 180.
|
||||
|
||||
# only relevant for foresight = myopic or perfect
|
||||
existing_capacities:
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019]
|
||||
threshold_capacity: 10
|
||||
conventional_carriers:
|
||||
- lignite
|
||||
- coal
|
||||
- oil
|
||||
- uranium
|
||||
|
||||
|
||||
sector:
|
||||
district_heating:
|
||||
potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating
|
||||
# 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
|
||||
progress: 1
|
||||
# 2020: 0.0
|
||||
# 2030: 0.3
|
||||
# 2040: 0.6
|
||||
# 2050: 1.0
|
||||
district_heating_loss: 0.15
|
||||
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
|
||||
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
|
||||
transport_heating_deadband_upper: 20.
|
||||
transport_heating_deadband_lower: 15.
|
||||
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
|
||||
ICE_upper_degree_factor: 1.6
|
||||
EV_lower_degree_factor: 0.98
|
||||
EV_upper_degree_factor: 0.63
|
||||
bev_dsm: true #turns on EV battery
|
||||
bev_availability: 0.5 #How many cars do smart charging
|
||||
bev_energy: 0.05 #average battery size in MWh
|
||||
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
|
||||
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
|
||||
bev_charge_rate: 0.011 #3-phase charger with 11 kW
|
||||
bev_avail_max: 0.95
|
||||
bev_avail_mean: 0.8
|
||||
v2g: true #allows feed-in to grid from EV battery
|
||||
#what is not EV or FCEV is oil-fuelled ICE
|
||||
land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs
|
||||
# 2020: 0
|
||||
# 2030: 0.05
|
||||
# 2040: 0.1
|
||||
# 2050: 0.15
|
||||
land_transport_electric_share: 0.85 # 1 means all EVs
|
||||
# 2020: 0
|
||||
# 2030: 0.25
|
||||
# 2040: 0.6
|
||||
# 2050: 0.85
|
||||
transport_fuel_cell_efficiency: 0.5
|
||||
transport_internal_combustion_efficiency: 0.3
|
||||
agriculture_machinery_electric_share: 0
|
||||
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
|
||||
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
|
||||
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||
shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands
|
||||
shipping_hydrogen_share: 1 # 1 means all hydrogen FC
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.15
|
||||
# 2040: 0.3
|
||||
# 2045: 0.6
|
||||
# 2050: 1
|
||||
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
|
||||
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
|
||||
# this can represent e.g. building renovation, building demolition, or if
|
||||
# the factor is negative: increasing floor area, increased thermal comfort, population growth
|
||||
reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand
|
||||
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
|
||||
# 2020: 0.10 # this results in a space heat demand reduction of 10%
|
||||
# 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
|
||||
# 2030: 0.09
|
||||
# 2035: 0.11
|
||||
# 2040: 0.16
|
||||
# 2045: 0.21
|
||||
# 2050: 0.29
|
||||
retrofitting : # co-optimises building renovation to reduce space heat demand
|
||||
retro_endogen: false # co-optimise space heat savings
|
||||
cost_factor: 1.0 # weight costs for building renovation
|
||||
interest_rate: 0.04 # for investment in building components
|
||||
annualise_cost: true # annualise the investment costs
|
||||
tax_weighting: false # weight costs depending on taxes in countries
|
||||
construction_index: true # weight costs depending on labour/material costs per country
|
||||
tes: true
|
||||
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
|
||||
decentral: 3
|
||||
central: 180
|
||||
boilers: true
|
||||
oil_boilers: false
|
||||
chp: true
|
||||
micro_chp: false
|
||||
solar_thermal: true
|
||||
solar_cf_correction: 0.788457 # = >>> 1/1.2683
|
||||
marginal_cost_storage: 0. #1e-4
|
||||
methanation: true
|
||||
helmeth: false
|
||||
dac: true
|
||||
co2_vent: false
|
||||
SMR: true
|
||||
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
|
||||
co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2
|
||||
co2_network: false
|
||||
cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture
|
||||
hydrogen_underground_storage: true
|
||||
hydrogen_underground_storage_locations:
|
||||
# - onshore # more than 50 km from sea
|
||||
- nearshore # within 50 km of sea
|
||||
# - offshore
|
||||
use_fischer_tropsch_waste_heat: true
|
||||
use_fuel_cell_waste_heat: true
|
||||
electricity_distribution_grid: true
|
||||
electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
electricity_grid_connection: true # only applies to onshore wind and utility PV
|
||||
H2_network: true
|
||||
gas_network: false
|
||||
H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes
|
||||
# according to hydrogen backbone strategy (April, 2020) p.15
|
||||
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
||||
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
||||
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
||||
gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
||||
gas_distribution_grid: true
|
||||
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
biomass_transport: false # biomass transport between nodes
|
||||
conventional_generation: # generator : carrier
|
||||
OCGT: gas
|
||||
|
||||
|
||||
industry:
|
||||
St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6
|
||||
# 2020: 0.6
|
||||
# 2025: 0.55
|
||||
# 2030: 0.5
|
||||
# 2035: 0.45
|
||||
# 2040: 0.4
|
||||
# 2045: 0.35
|
||||
# 2050: 0.3
|
||||
DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.2
|
||||
# 2040: 0.4
|
||||
# 2045: 0.7
|
||||
# 2050: 1
|
||||
H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279
|
||||
elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf
|
||||
Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4
|
||||
# 2020: 0.4
|
||||
# 2025: 0.375
|
||||
# 2030: 0.35
|
||||
# 2035: 0.325
|
||||
# 2040: 0.3
|
||||
# 2045: 0.25
|
||||
# 2050: 0.2
|
||||
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
|
||||
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
|
||||
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)
|
||||
MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
|
||||
NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
|
||||
petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
|
||||
HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route
|
||||
HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling
|
||||
HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling
|
||||
HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX
|
||||
MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756.
|
||||
MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking
|
||||
chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43
|
||||
MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43
|
||||
MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process
|
||||
methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62
|
||||
MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65
|
||||
MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65
|
||||
hotmaps_locate_missing: false
|
||||
reference_year: 2015
|
||||
# references:
|
||||
# DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf
|
||||
# Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050
|
||||
|
||||
costs:
|
||||
lifetime: 25 #default lifetime
|
||||
# From a Lion Hirth paper, also reflects average of Noothout et al 2016
|
||||
discountrate: 0.07
|
||||
# [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501
|
||||
USD2013_to_EUR2013: 0.7532
|
||||
|
||||
# Marginal and capital costs can be overwritten
|
||||
# capital_cost:
|
||||
# onwind: 500
|
||||
marginal_cost:
|
||||
solar: 0.01
|
||||
onwind: 0.015
|
||||
offwind: 0.015
|
||||
hydro: 0.
|
||||
H2: 0.
|
||||
battery: 0.
|
||||
|
||||
emission_prices: # only used with the option Ep (emission prices)
|
||||
co2: 0.
|
||||
|
||||
lines:
|
||||
length_factor: 1.25 #to estimate offwind connection costs
|
||||
|
||||
|
||||
solving:
|
||||
#tmpdir: "path/to/tmp"
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
clip_p_max_pu: 1.e-2
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
skip_iterations: true
|
||||
track_iterations: false
|
||||
min_iterations: 4
|
||||
max_iterations: 6
|
||||
keep_shadowprices:
|
||||
- Bus
|
||||
- Line
|
||||
- Link
|
||||
- Transformer
|
||||
- GlobalConstraint
|
||||
- Generator
|
||||
- Store
|
||||
- StorageUnit
|
||||
solver:
|
||||
name: gurobi
|
||||
threads: 4
|
||||
method: 2 # barrier
|
||||
crossover: 0
|
||||
BarConvTol: 1.e-4
|
||||
Seed: 123
|
||||
AggFill: 0
|
||||
PreDual: 0
|
||||
GURO_PAR_BARDENSETHRESH: 200
|
||||
#FeasibilityTol: 1.e-6
|
||||
|
||||
#name: cplex
|
||||
#threads: 4
|
||||
#lpmethod: 4 # barrier
|
||||
#solutiontype: 2 # non basic solution, ie no crossover
|
||||
#barrier_convergetol: 1.e-5
|
||||
#feasopt_tolerance: 1.e-6
|
||||
mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
|
||||
|
||||
plotting:
|
||||
map:
|
||||
boundaries: [-11, 30, 34, 71]
|
||||
color_geomap:
|
||||
ocean: white
|
||||
land: white
|
||||
costs_max: 1000
|
||||
costs_threshold: 1
|
||||
energy_max: 20000
|
||||
energy_min: -20000
|
||||
energy_threshold: 50
|
||||
vre_techs:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
renewable_storage_techs:
|
||||
- PHS
|
||||
- hydro
|
||||
conv_techs:
|
||||
- OCGT
|
||||
- CCGT
|
||||
- Nuclear
|
||||
- Coal
|
||||
storage_techs:
|
||||
- hydro+PHS
|
||||
- battery
|
||||
- H2
|
||||
load_carriers:
|
||||
- AC load
|
||||
AC_carriers:
|
||||
- AC line
|
||||
- AC transformer
|
||||
link_carriers:
|
||||
- DC line
|
||||
- Converter AC-DC
|
||||
heat_links:
|
||||
- heat pump
|
||||
- resistive heater
|
||||
- CHP heat
|
||||
- CHP electric
|
||||
- gas boiler
|
||||
- central heat pump
|
||||
- central resistive heater
|
||||
- central CHP heat
|
||||
- central CHP electric
|
||||
- central gas boiler
|
||||
heat_generators:
|
||||
- gas boiler
|
||||
- central gas boiler
|
||||
- solar thermal collector
|
||||
- central solar thermal collector
|
||||
tech_colors:
|
||||
# wind
|
||||
onwind: "#235ebc"
|
||||
onshore wind: "#235ebc"
|
||||
offwind: "#6895dd"
|
||||
offshore wind: "#6895dd"
|
||||
offwind-ac: "#6895dd"
|
||||
offshore wind (AC): "#6895dd"
|
||||
offwind-dc: "#74c6f2"
|
||||
offshore wind (DC): "#74c6f2"
|
||||
# water
|
||||
hydro: '#298c81'
|
||||
hydro reservoir: '#298c81'
|
||||
ror: '#3dbfb0'
|
||||
run of river: '#3dbfb0'
|
||||
hydroelectricity: '#298c81'
|
||||
PHS: '#51dbcc'
|
||||
wave: '#a7d4cf'
|
||||
# solar
|
||||
solar: "#f9d002"
|
||||
solar PV: "#f9d002"
|
||||
solar thermal: '#ffbf2b'
|
||||
solar rooftop: '#ffea80'
|
||||
# gas
|
||||
OCGT: '#e0986c'
|
||||
OCGT marginal: '#e0986c'
|
||||
OCGT-heat: '#e0986c'
|
||||
gas boiler: '#db6a25'
|
||||
gas boilers: '#db6a25'
|
||||
gas boiler marginal: '#db6a25'
|
||||
gas: '#e05b09'
|
||||
natural gas: '#e05b09'
|
||||
CCGT: '#a85522'
|
||||
CCGT marginal: '#a85522'
|
||||
gas for industry co2 to atmosphere: '#692e0a'
|
||||
gas for industry co2 to stored: '#8a3400'
|
||||
gas for industry: '#853403'
|
||||
gas for industry CC: '#692e0a'
|
||||
gas pipeline: '#ebbca0'
|
||||
# oil
|
||||
oil: '#c9c9c9'
|
||||
oil boiler: '#adadad'
|
||||
agriculture machinery oil: '#949494'
|
||||
shipping oil: "#808080"
|
||||
land transport oil: '#afafaf'
|
||||
# nuclear
|
||||
Nuclear: '#ff8c00'
|
||||
Nuclear marginal: '#ff8c00'
|
||||
nuclear: '#ff8c00'
|
||||
uranium: '#ff8c00'
|
||||
# coal
|
||||
Coal: '#545454'
|
||||
coal: '#545454'
|
||||
Coal marginal: '#545454'
|
||||
Lignite: '#826837'
|
||||
lignite: '#826837'
|
||||
Lignite marginal: '#826837'
|
||||
# biomass
|
||||
biogas: '#e3d37d'
|
||||
solid biomass: '#baa741'
|
||||
solid biomass transport: '#baa741'
|
||||
solid biomass for industry: '#7a6d26'
|
||||
solid biomass for industry CC: '#47411c'
|
||||
solid biomass for industry co2 from atmosphere: '#736412'
|
||||
solid biomass for industry co2 to stored: '#47411c'
|
||||
# power transmission
|
||||
lines: '#6c9459'
|
||||
transmission lines: '#6c9459'
|
||||
electricity distribution grid: '#97ad8c'
|
||||
# electricity demand
|
||||
Electric load: '#110d63'
|
||||
electric demand: '#110d63'
|
||||
electricity: '#110d63'
|
||||
industry electricity: '#2d2a66'
|
||||
industry new electricity: '#2d2a66'
|
||||
agriculture electricity: '#494778'
|
||||
# battery + EVs
|
||||
battery: '#ace37f'
|
||||
battery storage: '#ace37f'
|
||||
home battery: '#80c944'
|
||||
home battery storage: '#80c944'
|
||||
BEV charger: '#baf238'
|
||||
V2G: '#e5ffa8'
|
||||
land transport EV: '#baf238'
|
||||
Li ion: '#baf238'
|
||||
# hot water storage
|
||||
water tanks: '#e69487'
|
||||
hot water storage: '#e69487'
|
||||
hot water charging: '#e69487'
|
||||
hot water discharging: '#e69487'
|
||||
# heat demand
|
||||
Heat load: '#cc1f1f'
|
||||
heat: '#cc1f1f'
|
||||
heat demand: '#cc1f1f'
|
||||
rural heat: '#ff5c5c'
|
||||
central heat: '#cc1f1f'
|
||||
decentral heat: '#750606'
|
||||
low-temperature heat for industry: '#8f2727'
|
||||
process heat: '#ff0000'
|
||||
agriculture heat: '#d9a5a5'
|
||||
# heat supply
|
||||
heat pumps: '#2fb537'
|
||||
heat pump: '#2fb537'
|
||||
air heat pump: '#36eb41'
|
||||
ground heat pump: '#2fb537'
|
||||
Ambient: '#98eb9d'
|
||||
CHP: '#8a5751'
|
||||
CHP CC: '#634643'
|
||||
CHP heat: '#8a5751'
|
||||
CHP electric: '#8a5751'
|
||||
district heating: '#e8beac'
|
||||
resistive heater: '#c78536'
|
||||
retrofitting: '#8487e8'
|
||||
building retrofitting: '#8487e8'
|
||||
# hydrogen
|
||||
H2 for industry: "#f073da"
|
||||
H2 for shipping: "#ebaee0"
|
||||
H2: '#bf13a0'
|
||||
SMR: '#870c71'
|
||||
SMR CC: '#4f1745'
|
||||
H2 liquefaction: '#d647bd'
|
||||
hydrogen storage: '#bf13a0'
|
||||
land transport fuel cell: '#6b3161'
|
||||
H2 pipeline: '#f081dc'
|
||||
H2 Fuel Cell: '#c251ae'
|
||||
H2 Electrolysis: '#ff29d9'
|
||||
# syngas
|
||||
Sabatier: '#9850ad'
|
||||
methanation: '#c44ce6'
|
||||
helmeth: '#e899ff'
|
||||
# synfuels
|
||||
Fischer-Tropsch: '#25c49a'
|
||||
kerosene for aviation: '#a1ffe6'
|
||||
naphtha for industry: '#57ebc4'
|
||||
# co2
|
||||
CC: '#9e132c'
|
||||
CO2 sequestration: '#9e132c'
|
||||
DAC: '#ff5270'
|
||||
co2 stored: '#f2385a'
|
||||
co2: '#f29dae'
|
||||
co2 vent: '#ffd4dc'
|
||||
CO2 pipeline: '#f5627f'
|
||||
# emissions
|
||||
process emissions CC: '#000000'
|
||||
process emissions: '#222222'
|
||||
process emissions to stored: '#444444'
|
||||
process emissions to atmosphere: '#888888'
|
||||
oil emissions: '#aaaaaa'
|
||||
shipping oil emissions: "#555555"
|
||||
land transport oil emissions: '#777777'
|
||||
agriculture machinery oil emissions: '#333333'
|
||||
# other
|
||||
shipping: '#03a2ff'
|
||||
power-to-heat: '#cc1f1f'
|
||||
power-to-gas: '#c44ce6'
|
||||
power-to-liquid: '#25c49a'
|
||||
gas-to-power/heat: '#ee8340'
|
594
config.onw.yaml
Normal file
594
config.onw.yaml
Normal file
@ -0,0 +1,594 @@
|
||||
version: 0.6.0
|
||||
|
||||
logging_level: INFO
|
||||
|
||||
results_dir: results/
|
||||
summary_dir: results
|
||||
costs_dir: ../technology-data/outputs/
|
||||
run: 20211218-181-onw # use this to keep track of runs with different settings
|
||||
foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented)
|
||||
# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below
|
||||
|
||||
scenario:
|
||||
simpl: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt"
|
||||
- 1.25
|
||||
clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred
|
||||
- 181
|
||||
opts: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
sector_opts: # this is where the main scenario settings are
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.125
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.25
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.75
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p1
|
||||
# to really understand the options here, look in scripts/prepare_sector_network.py
|
||||
# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
|
||||
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
|
||||
# xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours
|
||||
# single letters are sectors: T for land transport, H for building heating,
|
||||
# B for biomass supply, I for industry, shipping and aviation,
|
||||
# A for agriculture, forestry and fishing
|
||||
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
|
||||
# solar+p3 multiplies the available installable potential by factor 3
|
||||
# co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2
|
||||
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
|
||||
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
|
||||
# emissions throughout the transition path in the timeframe determined by the
|
||||
# planning_horizons), be:beta decay; ex:exponential decay
|
||||
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
|
||||
# decay with initial growth rate 0
|
||||
planning_horizons: # investment years for myopic and perfect; or costs year for overnight
|
||||
- 2030
|
||||
# for example, set to [2020, 2030, 2040, 2050] for myopic foresight
|
||||
|
||||
# CO2 budget as a fraction of 1990 emissions
|
||||
# this is over-ridden if CO2Lx is set in sector_opts
|
||||
# this is also over-ridden if cb is set in sector_opts
|
||||
co2_budget:
|
||||
2020: 0.7011648746
|
||||
2025: 0.5241935484
|
||||
2030: 0.2970430108
|
||||
2035: 0.1500896057
|
||||
2040: 0.0712365591
|
||||
2045: 0.0322580645
|
||||
2050: 0
|
||||
|
||||
# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec
|
||||
snapshots:
|
||||
# arguments to pd.date_range
|
||||
start: "2013-01-01"
|
||||
end: "2014-01-01"
|
||||
closed: left # end is not inclusive
|
||||
|
||||
atlite:
|
||||
cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc
|
||||
|
||||
# this information is NOT used but needed as an argument for
|
||||
# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py
|
||||
electricity:
|
||||
max_hours:
|
||||
battery: 6
|
||||
H2: 168
|
||||
|
||||
# regulate what components with which carriers are kept from PyPSA-Eur;
|
||||
# some technologies are removed because they are implemented differently
|
||||
# (e.g. battery or H2 storage) or have different year-dependent costs
|
||||
# in PyPSA-Eur-Sec
|
||||
pypsa_eur:
|
||||
Bus:
|
||||
- AC
|
||||
Link:
|
||||
- DC
|
||||
Generator:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
StorageUnit:
|
||||
- PHS
|
||||
- hydro
|
||||
Store: []
|
||||
|
||||
|
||||
energy:
|
||||
energy_totals_year: 2011
|
||||
base_emissions_year: 1990
|
||||
eurostat_report_year: 2016
|
||||
emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)"
|
||||
|
||||
biomass:
|
||||
year: 2030
|
||||
scenario: ENS_Med
|
||||
classes:
|
||||
solid biomass:
|
||||
- Agricultural waste
|
||||
- Fuelwood residues
|
||||
- Secondary Forestry residues - woodchips
|
||||
- Sawdust
|
||||
- Residues from landscape care
|
||||
- Municipal waste
|
||||
not included:
|
||||
- Sugar from sugar beet
|
||||
- Rape seed
|
||||
- "Sunflower, soya seed "
|
||||
- Bioethanol barley, wheat, grain maize, oats, other cereals and rye
|
||||
- Miscanthus, switchgrass, RCG
|
||||
- Willow
|
||||
- Poplar
|
||||
- FuelwoodRW
|
||||
- C&P_RW
|
||||
biogas:
|
||||
- Manure solid, liquid
|
||||
- Sludge
|
||||
|
||||
|
||||
solar_thermal:
|
||||
clearsky_model: simple # should be "simple" or "enhanced"?
|
||||
orientation:
|
||||
slope: 45.
|
||||
azimuth: 180.
|
||||
|
||||
# only relevant for foresight = myopic or perfect
|
||||
existing_capacities:
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019]
|
||||
threshold_capacity: 10
|
||||
conventional_carriers:
|
||||
- lignite
|
||||
- coal
|
||||
- oil
|
||||
- uranium
|
||||
|
||||
|
||||
sector:
|
||||
district_heating:
|
||||
potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating
|
||||
# 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
|
||||
progress: 1
|
||||
# 2020: 0.0
|
||||
# 2030: 0.3
|
||||
# 2040: 0.6
|
||||
# 2050: 1.0
|
||||
district_heating_loss: 0.15
|
||||
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
|
||||
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
|
||||
transport_heating_deadband_upper: 20.
|
||||
transport_heating_deadband_lower: 15.
|
||||
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
|
||||
ICE_upper_degree_factor: 1.6
|
||||
EV_lower_degree_factor: 0.98
|
||||
EV_upper_degree_factor: 0.63
|
||||
bev_dsm: true #turns on EV battery
|
||||
bev_availability: 0.5 #How many cars do smart charging
|
||||
bev_energy: 0.05 #average battery size in MWh
|
||||
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
|
||||
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
|
||||
bev_charge_rate: 0.011 #3-phase charger with 11 kW
|
||||
bev_avail_max: 0.95
|
||||
bev_avail_mean: 0.8
|
||||
v2g: true #allows feed-in to grid from EV battery
|
||||
#what is not EV or FCEV is oil-fuelled ICE
|
||||
land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs
|
||||
# 2020: 0
|
||||
# 2030: 0.05
|
||||
# 2040: 0.1
|
||||
# 2050: 0.15
|
||||
land_transport_electric_share: 0.85 # 1 means all EVs
|
||||
# 2020: 0
|
||||
# 2030: 0.25
|
||||
# 2040: 0.6
|
||||
# 2050: 0.85
|
||||
transport_fuel_cell_efficiency: 0.5
|
||||
transport_internal_combustion_efficiency: 0.3
|
||||
agriculture_machinery_electric_share: 0
|
||||
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
|
||||
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
|
||||
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||
shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands
|
||||
shipping_hydrogen_share: 1 # 1 means all hydrogen FC
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.15
|
||||
# 2040: 0.3
|
||||
# 2045: 0.6
|
||||
# 2050: 1
|
||||
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
|
||||
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
|
||||
# this can represent e.g. building renovation, building demolition, or if
|
||||
# the factor is negative: increasing floor area, increased thermal comfort, population growth
|
||||
reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand
|
||||
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
|
||||
# 2020: 0.10 # this results in a space heat demand reduction of 10%
|
||||
# 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
|
||||
# 2030: 0.09
|
||||
# 2035: 0.11
|
||||
# 2040: 0.16
|
||||
# 2045: 0.21
|
||||
# 2050: 0.29
|
||||
retrofitting : # co-optimises building renovation to reduce space heat demand
|
||||
retro_endogen: false # co-optimise space heat savings
|
||||
cost_factor: 1.0 # weight costs for building renovation
|
||||
interest_rate: 0.04 # for investment in building components
|
||||
annualise_cost: true # annualise the investment costs
|
||||
tax_weighting: false # weight costs depending on taxes in countries
|
||||
construction_index: true # weight costs depending on labour/material costs per country
|
||||
tes: true
|
||||
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
|
||||
decentral: 3
|
||||
central: 180
|
||||
boilers: true
|
||||
oil_boilers: false
|
||||
chp: true
|
||||
micro_chp: false
|
||||
solar_thermal: true
|
||||
solar_cf_correction: 0.788457 # = >>> 1/1.2683
|
||||
marginal_cost_storage: 0. #1e-4
|
||||
methanation: true
|
||||
helmeth: false
|
||||
dac: true
|
||||
co2_vent: false
|
||||
SMR: true
|
||||
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
|
||||
co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2
|
||||
co2_network: false
|
||||
cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture
|
||||
hydrogen_underground_storage: true
|
||||
hydrogen_underground_storage_locations:
|
||||
# - onshore # more than 50 km from sea
|
||||
- nearshore # within 50 km of sea
|
||||
# - offshore
|
||||
use_fischer_tropsch_waste_heat: true
|
||||
use_fuel_cell_waste_heat: true
|
||||
electricity_distribution_grid: true
|
||||
electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
electricity_grid_connection: true # only applies to onshore wind and utility PV
|
||||
H2_network: true
|
||||
gas_network: false
|
||||
H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes
|
||||
# according to hydrogen backbone strategy (April, 2020) p.15
|
||||
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
||||
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
||||
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
||||
gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
||||
gas_distribution_grid: true
|
||||
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
biomass_transport: false # biomass transport between nodes
|
||||
conventional_generation: # generator : carrier
|
||||
OCGT: gas
|
||||
|
||||
|
||||
industry:
|
||||
St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6
|
||||
# 2020: 0.6
|
||||
# 2025: 0.55
|
||||
# 2030: 0.5
|
||||
# 2035: 0.45
|
||||
# 2040: 0.4
|
||||
# 2045: 0.35
|
||||
# 2050: 0.3
|
||||
DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.2
|
||||
# 2040: 0.4
|
||||
# 2045: 0.7
|
||||
# 2050: 1
|
||||
H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279
|
||||
elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf
|
||||
Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4
|
||||
# 2020: 0.4
|
||||
# 2025: 0.375
|
||||
# 2030: 0.35
|
||||
# 2035: 0.325
|
||||
# 2040: 0.3
|
||||
# 2045: 0.25
|
||||
# 2050: 0.2
|
||||
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
|
||||
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
|
||||
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)
|
||||
MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
|
||||
NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
|
||||
petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
|
||||
HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route
|
||||
HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling
|
||||
HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling
|
||||
HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX
|
||||
MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756.
|
||||
MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking
|
||||
chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43
|
||||
MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43
|
||||
MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process
|
||||
methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62
|
||||
MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65
|
||||
MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65
|
||||
hotmaps_locate_missing: false
|
||||
reference_year: 2015
|
||||
# references:
|
||||
# DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf
|
||||
# Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050
|
||||
|
||||
costs:
|
||||
lifetime: 25 #default lifetime
|
||||
# From a Lion Hirth paper, also reflects average of Noothout et al 2016
|
||||
discountrate: 0.07
|
||||
# [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501
|
||||
USD2013_to_EUR2013: 0.7532
|
||||
|
||||
# Marginal and capital costs can be overwritten
|
||||
# capital_cost:
|
||||
# onwind: 500
|
||||
marginal_cost:
|
||||
solar: 0.01
|
||||
onwind: 0.015
|
||||
offwind: 0.015
|
||||
hydro: 0.
|
||||
H2: 0.
|
||||
battery: 0.
|
||||
|
||||
emission_prices: # only used with the option Ep (emission prices)
|
||||
co2: 0.
|
||||
|
||||
lines:
|
||||
length_factor: 1.25 #to estimate offwind connection costs
|
||||
|
||||
|
||||
solving:
|
||||
#tmpdir: "path/to/tmp"
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
clip_p_max_pu: 1.e-2
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
skip_iterations: true
|
||||
track_iterations: false
|
||||
min_iterations: 4
|
||||
max_iterations: 6
|
||||
keep_shadowprices:
|
||||
- Bus
|
||||
- Line
|
||||
- Link
|
||||
- Transformer
|
||||
- GlobalConstraint
|
||||
- Generator
|
||||
- Store
|
||||
- StorageUnit
|
||||
solver:
|
||||
name: gurobi
|
||||
threads: 4
|
||||
method: 2 # barrier
|
||||
crossover: 0
|
||||
BarConvTol: 1.e-4
|
||||
Seed: 123
|
||||
AggFill: 0
|
||||
PreDual: 0
|
||||
GURO_PAR_BARDENSETHRESH: 200
|
||||
#FeasibilityTol: 1.e-6
|
||||
|
||||
#name: cplex
|
||||
#threads: 4
|
||||
#lpmethod: 4 # barrier
|
||||
#solutiontype: 2 # non basic solution, ie no crossover
|
||||
#barrier_convergetol: 1.e-5
|
||||
#feasopt_tolerance: 1.e-6
|
||||
mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
|
||||
|
||||
plotting:
|
||||
map:
|
||||
boundaries: [-11, 30, 34, 71]
|
||||
color_geomap:
|
||||
ocean: white
|
||||
land: white
|
||||
costs_max: 1000
|
||||
costs_threshold: 1
|
||||
energy_max: 20000
|
||||
energy_min: -20000
|
||||
energy_threshold: 50
|
||||
vre_techs:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
renewable_storage_techs:
|
||||
- PHS
|
||||
- hydro
|
||||
conv_techs:
|
||||
- OCGT
|
||||
- CCGT
|
||||
- Nuclear
|
||||
- Coal
|
||||
storage_techs:
|
||||
- hydro+PHS
|
||||
- battery
|
||||
- H2
|
||||
load_carriers:
|
||||
- AC load
|
||||
AC_carriers:
|
||||
- AC line
|
||||
- AC transformer
|
||||
link_carriers:
|
||||
- DC line
|
||||
- Converter AC-DC
|
||||
heat_links:
|
||||
- heat pump
|
||||
- resistive heater
|
||||
- CHP heat
|
||||
- CHP electric
|
||||
- gas boiler
|
||||
- central heat pump
|
||||
- central resistive heater
|
||||
- central CHP heat
|
||||
- central CHP electric
|
||||
- central gas boiler
|
||||
heat_generators:
|
||||
- gas boiler
|
||||
- central gas boiler
|
||||
- solar thermal collector
|
||||
- central solar thermal collector
|
||||
tech_colors:
|
||||
# wind
|
||||
onwind: "#235ebc"
|
||||
onshore wind: "#235ebc"
|
||||
offwind: "#6895dd"
|
||||
offshore wind: "#6895dd"
|
||||
offwind-ac: "#6895dd"
|
||||
offshore wind (AC): "#6895dd"
|
||||
offwind-dc: "#74c6f2"
|
||||
offshore wind (DC): "#74c6f2"
|
||||
# water
|
||||
hydro: '#298c81'
|
||||
hydro reservoir: '#298c81'
|
||||
ror: '#3dbfb0'
|
||||
run of river: '#3dbfb0'
|
||||
hydroelectricity: '#298c81'
|
||||
PHS: '#51dbcc'
|
||||
wave: '#a7d4cf'
|
||||
# solar
|
||||
solar: "#f9d002"
|
||||
solar PV: "#f9d002"
|
||||
solar thermal: '#ffbf2b'
|
||||
solar rooftop: '#ffea80'
|
||||
# gas
|
||||
OCGT: '#e0986c'
|
||||
OCGT marginal: '#e0986c'
|
||||
OCGT-heat: '#e0986c'
|
||||
gas boiler: '#db6a25'
|
||||
gas boilers: '#db6a25'
|
||||
gas boiler marginal: '#db6a25'
|
||||
gas: '#e05b09'
|
||||
natural gas: '#e05b09'
|
||||
CCGT: '#a85522'
|
||||
CCGT marginal: '#a85522'
|
||||
gas for industry co2 to atmosphere: '#692e0a'
|
||||
gas for industry co2 to stored: '#8a3400'
|
||||
gas for industry: '#853403'
|
||||
gas for industry CC: '#692e0a'
|
||||
gas pipeline: '#ebbca0'
|
||||
# oil
|
||||
oil: '#c9c9c9'
|
||||
oil boiler: '#adadad'
|
||||
agriculture machinery oil: '#949494'
|
||||
shipping oil: "#808080"
|
||||
land transport oil: '#afafaf'
|
||||
# nuclear
|
||||
Nuclear: '#ff8c00'
|
||||
Nuclear marginal: '#ff8c00'
|
||||
nuclear: '#ff8c00'
|
||||
uranium: '#ff8c00'
|
||||
# coal
|
||||
Coal: '#545454'
|
||||
coal: '#545454'
|
||||
Coal marginal: '#545454'
|
||||
Lignite: '#826837'
|
||||
lignite: '#826837'
|
||||
Lignite marginal: '#826837'
|
||||
# biomass
|
||||
biogas: '#e3d37d'
|
||||
solid biomass: '#baa741'
|
||||
solid biomass transport: '#baa741'
|
||||
solid biomass for industry: '#7a6d26'
|
||||
solid biomass for industry CC: '#47411c'
|
||||
solid biomass for industry co2 from atmosphere: '#736412'
|
||||
solid biomass for industry co2 to stored: '#47411c'
|
||||
# power transmission
|
||||
lines: '#6c9459'
|
||||
transmission lines: '#6c9459'
|
||||
electricity distribution grid: '#97ad8c'
|
||||
# electricity demand
|
||||
Electric load: '#110d63'
|
||||
electric demand: '#110d63'
|
||||
electricity: '#110d63'
|
||||
industry electricity: '#2d2a66'
|
||||
industry new electricity: '#2d2a66'
|
||||
agriculture electricity: '#494778'
|
||||
# battery + EVs
|
||||
battery: '#ace37f'
|
||||
battery storage: '#ace37f'
|
||||
home battery: '#80c944'
|
||||
home battery storage: '#80c944'
|
||||
BEV charger: '#baf238'
|
||||
V2G: '#e5ffa8'
|
||||
land transport EV: '#baf238'
|
||||
Li ion: '#baf238'
|
||||
# hot water storage
|
||||
water tanks: '#e69487'
|
||||
hot water storage: '#e69487'
|
||||
hot water charging: '#e69487'
|
||||
hot water discharging: '#e69487'
|
||||
# heat demand
|
||||
Heat load: '#cc1f1f'
|
||||
heat: '#cc1f1f'
|
||||
heat demand: '#cc1f1f'
|
||||
rural heat: '#ff5c5c'
|
||||
central heat: '#cc1f1f'
|
||||
decentral heat: '#750606'
|
||||
low-temperature heat for industry: '#8f2727'
|
||||
process heat: '#ff0000'
|
||||
agriculture heat: '#d9a5a5'
|
||||
# heat supply
|
||||
heat pumps: '#2fb537'
|
||||
heat pump: '#2fb537'
|
||||
air heat pump: '#36eb41'
|
||||
ground heat pump: '#2fb537'
|
||||
Ambient: '#98eb9d'
|
||||
CHP: '#8a5751'
|
||||
CHP CC: '#634643'
|
||||
CHP heat: '#8a5751'
|
||||
CHP electric: '#8a5751'
|
||||
district heating: '#e8beac'
|
||||
resistive heater: '#c78536'
|
||||
retrofitting: '#8487e8'
|
||||
building retrofitting: '#8487e8'
|
||||
# hydrogen
|
||||
H2 for industry: "#f073da"
|
||||
H2 for shipping: "#ebaee0"
|
||||
H2: '#bf13a0'
|
||||
SMR: '#870c71'
|
||||
SMR CC: '#4f1745'
|
||||
H2 liquefaction: '#d647bd'
|
||||
hydrogen storage: '#bf13a0'
|
||||
land transport fuel cell: '#6b3161'
|
||||
H2 pipeline: '#f081dc'
|
||||
H2 Fuel Cell: '#c251ae'
|
||||
H2 Electrolysis: '#ff29d9'
|
||||
# syngas
|
||||
Sabatier: '#9850ad'
|
||||
methanation: '#c44ce6'
|
||||
helmeth: '#e899ff'
|
||||
# synfuels
|
||||
Fischer-Tropsch: '#25c49a'
|
||||
kerosene for aviation: '#a1ffe6'
|
||||
naphtha for industry: '#57ebc4'
|
||||
# co2
|
||||
CC: '#9e132c'
|
||||
CO2 sequestration: '#9e132c'
|
||||
DAC: '#ff5270'
|
||||
co2 stored: '#f2385a'
|
||||
co2: '#f29dae'
|
||||
co2 vent: '#ffd4dc'
|
||||
CO2 pipeline: '#f5627f'
|
||||
# emissions
|
||||
process emissions CC: '#000000'
|
||||
process emissions: '#222222'
|
||||
process emissions to stored: '#444444'
|
||||
process emissions to atmosphere: '#888888'
|
||||
oil emissions: '#aaaaaa'
|
||||
shipping oil emissions: "#555555"
|
||||
land transport oil emissions: '#777777'
|
||||
agriculture machinery oil emissions: '#333333'
|
||||
# other
|
||||
shipping: '#03a2ff'
|
||||
power-to-heat: '#cc1f1f'
|
||||
power-to-gas: '#c44ce6'
|
||||
power-to-liquid: '#25c49a'
|
||||
gas-to-power/heat: '#ee8340'
|
593
config.spatial.yaml
Normal file
593
config.spatial.yaml
Normal file
@ -0,0 +1,593 @@
|
||||
version: 0.6.0
|
||||
|
||||
logging_level: INFO
|
||||
|
||||
results_dir: results/
|
||||
summary_dir: results
|
||||
costs_dir: ../technology-data/outputs/
|
||||
run: 20211218-spatial # use this to keep track of runs with different settings
|
||||
foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented)
|
||||
# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below
|
||||
|
||||
scenario:
|
||||
simpl: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt"
|
||||
- 1.5
|
||||
clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred
|
||||
- 37
|
||||
- 50
|
||||
- 100
|
||||
- 150
|
||||
- 181
|
||||
opts: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
sector_opts: # this is where the main scenario settings are
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5
|
||||
# to really understand the options here, look in scripts/prepare_sector_network.py
|
||||
# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
|
||||
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
|
||||
# xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours
|
||||
# single letters are sectors: T for land transport, H for building heating,
|
||||
# B for biomass supply, I for industry, shipping and aviation,
|
||||
# A for agriculture, forestry and fishing
|
||||
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
|
||||
# solar+p3 multiplies the available installable potential by factor 3
|
||||
# co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2
|
||||
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
|
||||
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
|
||||
# emissions throughout the transition path in the timeframe determined by the
|
||||
# planning_horizons), be:beta decay; ex:exponential decay
|
||||
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
|
||||
# decay with initial growth rate 0
|
||||
planning_horizons: # investment years for myopic and perfect; or costs year for overnight
|
||||
- 2030
|
||||
# for example, set to [2020, 2030, 2040, 2050] for myopic foresight
|
||||
|
||||
# CO2 budget as a fraction of 1990 emissions
|
||||
# this is over-ridden if CO2Lx is set in sector_opts
|
||||
# this is also over-ridden if cb is set in sector_opts
|
||||
co2_budget:
|
||||
2020: 0.7011648746
|
||||
2025: 0.5241935484
|
||||
2030: 0.2970430108
|
||||
2035: 0.1500896057
|
||||
2040: 0.0712365591
|
||||
2045: 0.0322580645
|
||||
2050: 0
|
||||
|
||||
# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec
|
||||
snapshots:
|
||||
# arguments to pd.date_range
|
||||
start: "2013-01-01"
|
||||
end: "2014-01-01"
|
||||
closed: left # end is not inclusive
|
||||
|
||||
atlite:
|
||||
cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc
|
||||
|
||||
# this information is NOT used but needed as an argument for
|
||||
# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py
|
||||
electricity:
|
||||
max_hours:
|
||||
battery: 6
|
||||
H2: 168
|
||||
|
||||
# regulate what components with which carriers are kept from PyPSA-Eur;
|
||||
# some technologies are removed because they are implemented differently
|
||||
# (e.g. battery or H2 storage) or have different year-dependent costs
|
||||
# in PyPSA-Eur-Sec
|
||||
pypsa_eur:
|
||||
Bus:
|
||||
- AC
|
||||
Link:
|
||||
- DC
|
||||
Generator:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
StorageUnit:
|
||||
- PHS
|
||||
- hydro
|
||||
Store: []
|
||||
|
||||
|
||||
energy:
|
||||
energy_totals_year: 2011
|
||||
base_emissions_year: 1990
|
||||
eurostat_report_year: 2016
|
||||
emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)"
|
||||
|
||||
biomass:
|
||||
year: 2030
|
||||
scenario: ENS_Med
|
||||
classes:
|
||||
solid biomass:
|
||||
- Agricultural waste
|
||||
- Fuelwood residues
|
||||
- Secondary Forestry residues - woodchips
|
||||
- Sawdust
|
||||
- Residues from landscape care
|
||||
- Municipal waste
|
||||
not included:
|
||||
- Sugar from sugar beet
|
||||
- Rape seed
|
||||
- "Sunflower, soya seed "
|
||||
- Bioethanol barley, wheat, grain maize, oats, other cereals and rye
|
||||
- Miscanthus, switchgrass, RCG
|
||||
- Willow
|
||||
- Poplar
|
||||
- FuelwoodRW
|
||||
- C&P_RW
|
||||
biogas:
|
||||
- Manure solid, liquid
|
||||
- Sludge
|
||||
|
||||
|
||||
solar_thermal:
|
||||
clearsky_model: simple # should be "simple" or "enhanced"?
|
||||
orientation:
|
||||
slope: 45.
|
||||
azimuth: 180.
|
||||
|
||||
# only relevant for foresight = myopic or perfect
|
||||
existing_capacities:
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019]
|
||||
threshold_capacity: 10
|
||||
conventional_carriers:
|
||||
- lignite
|
||||
- coal
|
||||
- oil
|
||||
- uranium
|
||||
|
||||
|
||||
sector:
|
||||
district_heating:
|
||||
potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating
|
||||
# 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
|
||||
progress: 1
|
||||
# 2020: 0.0
|
||||
# 2030: 0.3
|
||||
# 2040: 0.6
|
||||
# 2050: 1.0
|
||||
district_heating_loss: 0.15
|
||||
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
|
||||
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
|
||||
transport_heating_deadband_upper: 20.
|
||||
transport_heating_deadband_lower: 15.
|
||||
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
|
||||
ICE_upper_degree_factor: 1.6
|
||||
EV_lower_degree_factor: 0.98
|
||||
EV_upper_degree_factor: 0.63
|
||||
bev_dsm: true #turns on EV battery
|
||||
bev_availability: 0.5 #How many cars do smart charging
|
||||
bev_energy: 0.05 #average battery size in MWh
|
||||
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
|
||||
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
|
||||
bev_charge_rate: 0.011 #3-phase charger with 11 kW
|
||||
bev_avail_max: 0.95
|
||||
bev_avail_mean: 0.8
|
||||
v2g: true #allows feed-in to grid from EV battery
|
||||
#what is not EV or FCEV is oil-fuelled ICE
|
||||
land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs
|
||||
# 2020: 0
|
||||
# 2030: 0.05
|
||||
# 2040: 0.1
|
||||
# 2050: 0.15
|
||||
land_transport_electric_share: 0.85 # 1 means all EVs
|
||||
# 2020: 0
|
||||
# 2030: 0.25
|
||||
# 2040: 0.6
|
||||
# 2050: 0.85
|
||||
transport_fuel_cell_efficiency: 0.5
|
||||
transport_internal_combustion_efficiency: 0.3
|
||||
agriculture_machinery_electric_share: 0
|
||||
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
|
||||
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
|
||||
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||
shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands
|
||||
shipping_hydrogen_share: 1 # 1 means all hydrogen FC
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.15
|
||||
# 2040: 0.3
|
||||
# 2045: 0.6
|
||||
# 2050: 1
|
||||
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
|
||||
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
|
||||
# this can represent e.g. building renovation, building demolition, or if
|
||||
# the factor is negative: increasing floor area, increased thermal comfort, population growth
|
||||
reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand
|
||||
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
|
||||
# 2020: 0.10 # this results in a space heat demand reduction of 10%
|
||||
# 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
|
||||
# 2030: 0.09
|
||||
# 2035: 0.11
|
||||
# 2040: 0.16
|
||||
# 2045: 0.21
|
||||
# 2050: 0.29
|
||||
retrofitting : # co-optimises building renovation to reduce space heat demand
|
||||
retro_endogen: false # co-optimise space heat savings
|
||||
cost_factor: 1.0 # weight costs for building renovation
|
||||
interest_rate: 0.04 # for investment in building components
|
||||
annualise_cost: true # annualise the investment costs
|
||||
tax_weighting: false # weight costs depending on taxes in countries
|
||||
construction_index: true # weight costs depending on labour/material costs per country
|
||||
tes: true
|
||||
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
|
||||
decentral: 3
|
||||
central: 180
|
||||
boilers: true
|
||||
oil_boilers: false
|
||||
chp: true
|
||||
micro_chp: false
|
||||
solar_thermal: true
|
||||
solar_cf_correction: 0.788457 # = >>> 1/1.2683
|
||||
marginal_cost_storage: 0. #1e-4
|
||||
methanation: true
|
||||
helmeth: false
|
||||
dac: true
|
||||
co2_vent: false
|
||||
SMR: true
|
||||
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
|
||||
co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2
|
||||
co2_network: false
|
||||
cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture
|
||||
hydrogen_underground_storage: true
|
||||
hydrogen_underground_storage_locations:
|
||||
# - onshore # more than 50 km from sea
|
||||
- nearshore # within 50 km of sea
|
||||
# - offshore
|
||||
use_fischer_tropsch_waste_heat: true
|
||||
use_fuel_cell_waste_heat: true
|
||||
electricity_distribution_grid: true
|
||||
electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
electricity_grid_connection: true # only applies to onshore wind and utility PV
|
||||
H2_network: true
|
||||
gas_network: false
|
||||
H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes
|
||||
# according to hydrogen backbone strategy (April, 2020) p.15
|
||||
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
||||
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
||||
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
||||
gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
||||
gas_distribution_grid: true
|
||||
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
biomass_transport: false # biomass transport between nodes
|
||||
conventional_generation: # generator : carrier
|
||||
OCGT: gas
|
||||
|
||||
|
||||
industry:
|
||||
St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6
|
||||
# 2020: 0.6
|
||||
# 2025: 0.55
|
||||
# 2030: 0.5
|
||||
# 2035: 0.45
|
||||
# 2040: 0.4
|
||||
# 2045: 0.35
|
||||
# 2050: 0.3
|
||||
DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.2
|
||||
# 2040: 0.4
|
||||
# 2045: 0.7
|
||||
# 2050: 1
|
||||
H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279
|
||||
elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf
|
||||
Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4
|
||||
# 2020: 0.4
|
||||
# 2025: 0.375
|
||||
# 2030: 0.35
|
||||
# 2035: 0.325
|
||||
# 2040: 0.3
|
||||
# 2045: 0.25
|
||||
# 2050: 0.2
|
||||
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
|
||||
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
|
||||
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)
|
||||
MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
|
||||
NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
|
||||
petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
|
||||
HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route
|
||||
HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling
|
||||
HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling
|
||||
HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX
|
||||
MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756.
|
||||
MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking
|
||||
chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43
|
||||
MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43
|
||||
MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process
|
||||
methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62
|
||||
MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65
|
||||
MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65
|
||||
hotmaps_locate_missing: false
|
||||
reference_year: 2015
|
||||
# references:
|
||||
# DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf
|
||||
# Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050
|
||||
|
||||
costs:
|
||||
lifetime: 25 #default lifetime
|
||||
# From a Lion Hirth paper, also reflects average of Noothout et al 2016
|
||||
discountrate: 0.07
|
||||
# [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501
|
||||
USD2013_to_EUR2013: 0.7532
|
||||
|
||||
# Marginal and capital costs can be overwritten
|
||||
# capital_cost:
|
||||
# onwind: 500
|
||||
marginal_cost:
|
||||
solar: 0.01
|
||||
onwind: 0.015
|
||||
offwind: 0.015
|
||||
hydro: 0.
|
||||
H2: 0.
|
||||
battery: 0.
|
||||
|
||||
emission_prices: # only used with the option Ep (emission prices)
|
||||
co2: 0.
|
||||
|
||||
lines:
|
||||
length_factor: 1.25 #to estimate offwind connection costs
|
||||
|
||||
|
||||
solving:
|
||||
#tmpdir: "path/to/tmp"
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
clip_p_max_pu: 1.e-2
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
skip_iterations: true
|
||||
track_iterations: false
|
||||
min_iterations: 4
|
||||
max_iterations: 6
|
||||
keep_shadowprices:
|
||||
- Bus
|
||||
- Line
|
||||
- Link
|
||||
- Transformer
|
||||
- GlobalConstraint
|
||||
- Generator
|
||||
- Store
|
||||
- StorageUnit
|
||||
solver:
|
||||
name: gurobi
|
||||
threads: 4
|
||||
method: 2 # barrier
|
||||
crossover: 0
|
||||
BarConvTol: 1.e-4
|
||||
Seed: 123
|
||||
AggFill: 0
|
||||
PreDual: 0
|
||||
GURO_PAR_BARDENSETHRESH: 200
|
||||
#FeasibilityTol: 1.e-6
|
||||
|
||||
#name: cplex
|
||||
#threads: 4
|
||||
#lpmethod: 4 # barrier
|
||||
#solutiontype: 2 # non basic solution, ie no crossover
|
||||
#barrier_convergetol: 1.e-5
|
||||
#feasopt_tolerance: 1.e-6
|
||||
mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
|
||||
|
||||
plotting:
|
||||
map:
|
||||
boundaries: [-11, 30, 34, 71]
|
||||
color_geomap:
|
||||
ocean: white
|
||||
land: white
|
||||
costs_max: 1000
|
||||
costs_threshold: 1
|
||||
energy_max: 20000
|
||||
energy_min: -20000
|
||||
energy_threshold: 50
|
||||
vre_techs:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
renewable_storage_techs:
|
||||
- PHS
|
||||
- hydro
|
||||
conv_techs:
|
||||
- OCGT
|
||||
- CCGT
|
||||
- Nuclear
|
||||
- Coal
|
||||
storage_techs:
|
||||
- hydro+PHS
|
||||
- battery
|
||||
- H2
|
||||
load_carriers:
|
||||
- AC load
|
||||
AC_carriers:
|
||||
- AC line
|
||||
- AC transformer
|
||||
link_carriers:
|
||||
- DC line
|
||||
- Converter AC-DC
|
||||
heat_links:
|
||||
- heat pump
|
||||
- resistive heater
|
||||
- CHP heat
|
||||
- CHP electric
|
||||
- gas boiler
|
||||
- central heat pump
|
||||
- central resistive heater
|
||||
- central CHP heat
|
||||
- central CHP electric
|
||||
- central gas boiler
|
||||
heat_generators:
|
||||
- gas boiler
|
||||
- central gas boiler
|
||||
- solar thermal collector
|
||||
- central solar thermal collector
|
||||
tech_colors:
|
||||
# wind
|
||||
onwind: "#235ebc"
|
||||
onshore wind: "#235ebc"
|
||||
offwind: "#6895dd"
|
||||
offshore wind: "#6895dd"
|
||||
offwind-ac: "#6895dd"
|
||||
offshore wind (AC): "#6895dd"
|
||||
offwind-dc: "#74c6f2"
|
||||
offshore wind (DC): "#74c6f2"
|
||||
# water
|
||||
hydro: '#298c81'
|
||||
hydro reservoir: '#298c81'
|
||||
ror: '#3dbfb0'
|
||||
run of river: '#3dbfb0'
|
||||
hydroelectricity: '#298c81'
|
||||
PHS: '#51dbcc'
|
||||
wave: '#a7d4cf'
|
||||
# solar
|
||||
solar: "#f9d002"
|
||||
solar PV: "#f9d002"
|
||||
solar thermal: '#ffbf2b'
|
||||
solar rooftop: '#ffea80'
|
||||
# gas
|
||||
OCGT: '#e0986c'
|
||||
OCGT marginal: '#e0986c'
|
||||
OCGT-heat: '#e0986c'
|
||||
gas boiler: '#db6a25'
|
||||
gas boilers: '#db6a25'
|
||||
gas boiler marginal: '#db6a25'
|
||||
gas: '#e05b09'
|
||||
natural gas: '#e05b09'
|
||||
CCGT: '#a85522'
|
||||
CCGT marginal: '#a85522'
|
||||
gas for industry co2 to atmosphere: '#692e0a'
|
||||
gas for industry co2 to stored: '#8a3400'
|
||||
gas for industry: '#853403'
|
||||
gas for industry CC: '#692e0a'
|
||||
gas pipeline: '#ebbca0'
|
||||
# oil
|
||||
oil: '#c9c9c9'
|
||||
oil boiler: '#adadad'
|
||||
agriculture machinery oil: '#949494'
|
||||
shipping oil: "#808080"
|
||||
land transport oil: '#afafaf'
|
||||
# nuclear
|
||||
Nuclear: '#ff8c00'
|
||||
Nuclear marginal: '#ff8c00'
|
||||
nuclear: '#ff8c00'
|
||||
uranium: '#ff8c00'
|
||||
# coal
|
||||
Coal: '#545454'
|
||||
coal: '#545454'
|
||||
Coal marginal: '#545454'
|
||||
Lignite: '#826837'
|
||||
lignite: '#826837'
|
||||
Lignite marginal: '#826837'
|
||||
# biomass
|
||||
biogas: '#e3d37d'
|
||||
solid biomass: '#baa741'
|
||||
solid biomass transport: '#baa741'
|
||||
solid biomass for industry: '#7a6d26'
|
||||
solid biomass for industry CC: '#47411c'
|
||||
solid biomass for industry co2 from atmosphere: '#736412'
|
||||
solid biomass for industry co2 to stored: '#47411c'
|
||||
# power transmission
|
||||
lines: '#6c9459'
|
||||
transmission lines: '#6c9459'
|
||||
electricity distribution grid: '#97ad8c'
|
||||
# electricity demand
|
||||
Electric load: '#110d63'
|
||||
electric demand: '#110d63'
|
||||
electricity: '#110d63'
|
||||
industry electricity: '#2d2a66'
|
||||
industry new electricity: '#2d2a66'
|
||||
agriculture electricity: '#494778'
|
||||
# battery + EVs
|
||||
battery: '#ace37f'
|
||||
battery storage: '#ace37f'
|
||||
home battery: '#80c944'
|
||||
home battery storage: '#80c944'
|
||||
BEV charger: '#baf238'
|
||||
V2G: '#e5ffa8'
|
||||
land transport EV: '#baf238'
|
||||
Li ion: '#baf238'
|
||||
# hot water storage
|
||||
water tanks: '#e69487'
|
||||
hot water storage: '#e69487'
|
||||
hot water charging: '#e69487'
|
||||
hot water discharging: '#e69487'
|
||||
# heat demand
|
||||
Heat load: '#cc1f1f'
|
||||
heat: '#cc1f1f'
|
||||
heat demand: '#cc1f1f'
|
||||
rural heat: '#ff5c5c'
|
||||
central heat: '#cc1f1f'
|
||||
decentral heat: '#750606'
|
||||
low-temperature heat for industry: '#8f2727'
|
||||
process heat: '#ff0000'
|
||||
agriculture heat: '#d9a5a5'
|
||||
# heat supply
|
||||
heat pumps: '#2fb537'
|
||||
heat pump: '#2fb537'
|
||||
air heat pump: '#36eb41'
|
||||
ground heat pump: '#2fb537'
|
||||
Ambient: '#98eb9d'
|
||||
CHP: '#8a5751'
|
||||
CHP CC: '#634643'
|
||||
CHP heat: '#8a5751'
|
||||
CHP electric: '#8a5751'
|
||||
district heating: '#e8beac'
|
||||
resistive heater: '#c78536'
|
||||
retrofitting: '#8487e8'
|
||||
building retrofitting: '#8487e8'
|
||||
# hydrogen
|
||||
H2 for industry: "#f073da"
|
||||
H2 for shipping: "#ebaee0"
|
||||
H2: '#bf13a0'
|
||||
SMR: '#870c71'
|
||||
SMR CC: '#4f1745'
|
||||
H2 liquefaction: '#d647bd'
|
||||
hydrogen storage: '#bf13a0'
|
||||
land transport fuel cell: '#6b3161'
|
||||
H2 pipeline: '#f081dc'
|
||||
H2 Fuel Cell: '#c251ae'
|
||||
H2 Electrolysis: '#ff29d9'
|
||||
# syngas
|
||||
Sabatier: '#9850ad'
|
||||
methanation: '#c44ce6'
|
||||
helmeth: '#e899ff'
|
||||
# synfuels
|
||||
Fischer-Tropsch: '#25c49a'
|
||||
kerosene for aviation: '#a1ffe6'
|
||||
naphtha for industry: '#57ebc4'
|
||||
# co2
|
||||
CC: '#9e132c'
|
||||
CO2 sequestration: '#9e132c'
|
||||
DAC: '#ff5270'
|
||||
co2 stored: '#f2385a'
|
||||
co2: '#f29dae'
|
||||
co2 vent: '#ffd4dc'
|
||||
CO2 pipeline: '#f5627f'
|
||||
# emissions
|
||||
process emissions CC: '#000000'
|
||||
process emissions: '#222222'
|
||||
process emissions to stored: '#444444'
|
||||
process emissions to atmosphere: '#888888'
|
||||
oil emissions: '#aaaaaa'
|
||||
shipping oil emissions: "#555555"
|
||||
land transport oil emissions: '#777777'
|
||||
agriculture machinery oil emissions: '#333333'
|
||||
# other
|
||||
shipping: '#03a2ff'
|
||||
power-to-heat: '#cc1f1f'
|
||||
power-to-gas: '#c44ce6'
|
||||
power-to-liquid: '#25c49a'
|
||||
gas-to-power/heat: '#ee8340'
|
590
config.temporal.yaml
Normal file
590
config.temporal.yaml
Normal file
@ -0,0 +1,590 @@
|
||||
version: 0.6.0
|
||||
|
||||
logging_level: INFO
|
||||
|
||||
results_dir: results/
|
||||
summary_dir: results
|
||||
costs_dir: ../technology-data/outputs/
|
||||
run: 20211218-181-temporal # use this to keep track of runs with different settings
|
||||
foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented)
|
||||
# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below
|
||||
|
||||
scenario:
|
||||
simpl: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt"
|
||||
- 1.5
|
||||
clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred
|
||||
- 181
|
||||
opts: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
sector_opts: # this is where the main scenario settings are
|
||||
- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5
|
||||
- Co2L0-4H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5
|
||||
# to really understand the options here, look in scripts/prepare_sector_network.py
|
||||
# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
|
||||
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
|
||||
# xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours
|
||||
# single letters are sectors: T for land transport, H for building heating,
|
||||
# B for biomass supply, I for industry, shipping and aviation,
|
||||
# A for agriculture, forestry and fishing
|
||||
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
|
||||
# solar+p3 multiplies the available installable potential by factor 3
|
||||
# co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2
|
||||
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
|
||||
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
|
||||
# emissions throughout the transition path in the timeframe determined by the
|
||||
# planning_horizons), be:beta decay; ex:exponential decay
|
||||
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
|
||||
# decay with initial growth rate 0
|
||||
planning_horizons: # investment years for myopic and perfect; or costs year for overnight
|
||||
- 2030
|
||||
# for example, set to [2020, 2030, 2040, 2050] for myopic foresight
|
||||
|
||||
# CO2 budget as a fraction of 1990 emissions
|
||||
# this is over-ridden if CO2Lx is set in sector_opts
|
||||
# this is also over-ridden if cb is set in sector_opts
|
||||
co2_budget:
|
||||
2020: 0.7011648746
|
||||
2025: 0.5241935484
|
||||
2030: 0.2970430108
|
||||
2035: 0.1500896057
|
||||
2040: 0.0712365591
|
||||
2045: 0.0322580645
|
||||
2050: 0
|
||||
|
||||
# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec
|
||||
snapshots:
|
||||
# arguments to pd.date_range
|
||||
start: "2013-01-01"
|
||||
end: "2014-01-01"
|
||||
closed: left # end is not inclusive
|
||||
|
||||
atlite:
|
||||
cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc
|
||||
|
||||
# this information is NOT used but needed as an argument for
|
||||
# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py
|
||||
electricity:
|
||||
max_hours:
|
||||
battery: 6
|
||||
H2: 168
|
||||
|
||||
# regulate what components with which carriers are kept from PyPSA-Eur;
|
||||
# some technologies are removed because they are implemented differently
|
||||
# (e.g. battery or H2 storage) or have different year-dependent costs
|
||||
# in PyPSA-Eur-Sec
|
||||
pypsa_eur:
|
||||
Bus:
|
||||
- AC
|
||||
Link:
|
||||
- DC
|
||||
Generator:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
StorageUnit:
|
||||
- PHS
|
||||
- hydro
|
||||
Store: []
|
||||
|
||||
|
||||
energy:
|
||||
energy_totals_year: 2011
|
||||
base_emissions_year: 1990
|
||||
eurostat_report_year: 2016
|
||||
emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)"
|
||||
|
||||
biomass:
|
||||
year: 2030
|
||||
scenario: ENS_Med
|
||||
classes:
|
||||
solid biomass:
|
||||
- Agricultural waste
|
||||
- Fuelwood residues
|
||||
- Secondary Forestry residues - woodchips
|
||||
- Sawdust
|
||||
- Residues from landscape care
|
||||
- Municipal waste
|
||||
not included:
|
||||
- Sugar from sugar beet
|
||||
- Rape seed
|
||||
- "Sunflower, soya seed "
|
||||
- Bioethanol barley, wheat, grain maize, oats, other cereals and rye
|
||||
- Miscanthus, switchgrass, RCG
|
||||
- Willow
|
||||
- Poplar
|
||||
- FuelwoodRW
|
||||
- C&P_RW
|
||||
biogas:
|
||||
- Manure solid, liquid
|
||||
- Sludge
|
||||
|
||||
|
||||
solar_thermal:
|
||||
clearsky_model: simple # should be "simple" or "enhanced"?
|
||||
orientation:
|
||||
slope: 45.
|
||||
azimuth: 180.
|
||||
|
||||
# only relevant for foresight = myopic or perfect
|
||||
existing_capacities:
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019]
|
||||
threshold_capacity: 10
|
||||
conventional_carriers:
|
||||
- lignite
|
||||
- coal
|
||||
- oil
|
||||
- uranium
|
||||
|
||||
|
||||
sector:
|
||||
district_heating:
|
||||
potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating
|
||||
# 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
|
||||
progress: 1
|
||||
# 2020: 0.0
|
||||
# 2030: 0.3
|
||||
# 2040: 0.6
|
||||
# 2050: 1.0
|
||||
district_heating_loss: 0.15
|
||||
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
|
||||
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
|
||||
transport_heating_deadband_upper: 20.
|
||||
transport_heating_deadband_lower: 15.
|
||||
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
|
||||
ICE_upper_degree_factor: 1.6
|
||||
EV_lower_degree_factor: 0.98
|
||||
EV_upper_degree_factor: 0.63
|
||||
bev_dsm: true #turns on EV battery
|
||||
bev_availability: 0.5 #How many cars do smart charging
|
||||
bev_energy: 0.05 #average battery size in MWh
|
||||
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
|
||||
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
|
||||
bev_charge_rate: 0.011 #3-phase charger with 11 kW
|
||||
bev_avail_max: 0.95
|
||||
bev_avail_mean: 0.8
|
||||
v2g: true #allows feed-in to grid from EV battery
|
||||
#what is not EV or FCEV is oil-fuelled ICE
|
||||
land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs
|
||||
# 2020: 0
|
||||
# 2030: 0.05
|
||||
# 2040: 0.1
|
||||
# 2050: 0.15
|
||||
land_transport_electric_share: 0.85 # 1 means all EVs
|
||||
# 2020: 0
|
||||
# 2030: 0.25
|
||||
# 2040: 0.6
|
||||
# 2050: 0.85
|
||||
transport_fuel_cell_efficiency: 0.5
|
||||
transport_internal_combustion_efficiency: 0.3
|
||||
agriculture_machinery_electric_share: 0
|
||||
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
|
||||
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
|
||||
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||
shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands
|
||||
shipping_hydrogen_share: 1 # 1 means all hydrogen FC
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.15
|
||||
# 2040: 0.3
|
||||
# 2045: 0.6
|
||||
# 2050: 1
|
||||
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
|
||||
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
|
||||
# this can represent e.g. building renovation, building demolition, or if
|
||||
# the factor is negative: increasing floor area, increased thermal comfort, population growth
|
||||
reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand
|
||||
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
|
||||
# 2020: 0.10 # this results in a space heat demand reduction of 10%
|
||||
# 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
|
||||
# 2030: 0.09
|
||||
# 2035: 0.11
|
||||
# 2040: 0.16
|
||||
# 2045: 0.21
|
||||
# 2050: 0.29
|
||||
retrofitting : # co-optimises building renovation to reduce space heat demand
|
||||
retro_endogen: false # co-optimise space heat savings
|
||||
cost_factor: 1.0 # weight costs for building renovation
|
||||
interest_rate: 0.04 # for investment in building components
|
||||
annualise_cost: true # annualise the investment costs
|
||||
tax_weighting: false # weight costs depending on taxes in countries
|
||||
construction_index: true # weight costs depending on labour/material costs per country
|
||||
tes: true
|
||||
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
|
||||
decentral: 3
|
||||
central: 180
|
||||
boilers: true
|
||||
oil_boilers: false
|
||||
chp: true
|
||||
micro_chp: false
|
||||
solar_thermal: true
|
||||
solar_cf_correction: 0.788457 # = >>> 1/1.2683
|
||||
marginal_cost_storage: 0. #1e-4
|
||||
methanation: true
|
||||
helmeth: false
|
||||
dac: true
|
||||
co2_vent: false
|
||||
SMR: true
|
||||
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
|
||||
co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2
|
||||
co2_network: false
|
||||
cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture
|
||||
hydrogen_underground_storage: true
|
||||
hydrogen_underground_storage_locations:
|
||||
# - onshore # more than 50 km from sea
|
||||
- nearshore # within 50 km of sea
|
||||
# - offshore
|
||||
use_fischer_tropsch_waste_heat: true
|
||||
use_fuel_cell_waste_heat: true
|
||||
electricity_distribution_grid: true
|
||||
electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
electricity_grid_connection: true # only applies to onshore wind and utility PV
|
||||
H2_network: true
|
||||
gas_network: false
|
||||
H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes
|
||||
# according to hydrogen backbone strategy (April, 2020) p.15
|
||||
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
||||
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
||||
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
||||
gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
||||
gas_distribution_grid: true
|
||||
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
biomass_transport: false # biomass transport between nodes
|
||||
conventional_generation: # generator : carrier
|
||||
OCGT: gas
|
||||
|
||||
|
||||
industry:
|
||||
St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6
|
||||
# 2020: 0.6
|
||||
# 2025: 0.55
|
||||
# 2030: 0.5
|
||||
# 2035: 0.45
|
||||
# 2040: 0.4
|
||||
# 2045: 0.35
|
||||
# 2050: 0.3
|
||||
DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.2
|
||||
# 2040: 0.4
|
||||
# 2045: 0.7
|
||||
# 2050: 1
|
||||
H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279
|
||||
elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf
|
||||
Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4
|
||||
# 2020: 0.4
|
||||
# 2025: 0.375
|
||||
# 2030: 0.35
|
||||
# 2035: 0.325
|
||||
# 2040: 0.3
|
||||
# 2045: 0.25
|
||||
# 2050: 0.2
|
||||
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
|
||||
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
|
||||
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)
|
||||
MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
|
||||
NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
|
||||
petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
|
||||
HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route
|
||||
HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling
|
||||
HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling
|
||||
HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX
|
||||
MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756.
|
||||
MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking
|
||||
chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43
|
||||
MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43
|
||||
MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process
|
||||
methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62
|
||||
MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65
|
||||
MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65
|
||||
hotmaps_locate_missing: false
|
||||
reference_year: 2015
|
||||
# references:
|
||||
# DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf
|
||||
# Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050
|
||||
|
||||
costs:
|
||||
lifetime: 25 #default lifetime
|
||||
# From a Lion Hirth paper, also reflects average of Noothout et al 2016
|
||||
discountrate: 0.07
|
||||
# [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501
|
||||
USD2013_to_EUR2013: 0.7532
|
||||
|
||||
# Marginal and capital costs can be overwritten
|
||||
# capital_cost:
|
||||
# onwind: 500
|
||||
marginal_cost:
|
||||
solar: 0.01
|
||||
onwind: 0.015
|
||||
offwind: 0.015
|
||||
hydro: 0.
|
||||
H2: 0.
|
||||
battery: 0.
|
||||
|
||||
emission_prices: # only used with the option Ep (emission prices)
|
||||
co2: 0.
|
||||
|
||||
lines:
|
||||
length_factor: 1.25 #to estimate offwind connection costs
|
||||
|
||||
|
||||
solving:
|
||||
#tmpdir: "path/to/tmp"
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
clip_p_max_pu: 1.e-2
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
skip_iterations: true
|
||||
track_iterations: false
|
||||
min_iterations: 4
|
||||
max_iterations: 6
|
||||
keep_shadowprices:
|
||||
- Bus
|
||||
- Line
|
||||
- Link
|
||||
- Transformer
|
||||
- GlobalConstraint
|
||||
- Generator
|
||||
- Store
|
||||
- StorageUnit
|
||||
solver:
|
||||
name: gurobi
|
||||
threads: 4
|
||||
method: 2 # barrier
|
||||
crossover: 0
|
||||
BarConvTol: 1.e-4
|
||||
Seed: 123
|
||||
AggFill: 0
|
||||
PreDual: 0
|
||||
GURO_PAR_BARDENSETHRESH: 200
|
||||
#FeasibilityTol: 1.e-6
|
||||
|
||||
#name: cplex
|
||||
#threads: 4
|
||||
#lpmethod: 4 # barrier
|
||||
#solutiontype: 2 # non basic solution, ie no crossover
|
||||
#barrier_convergetol: 1.e-5
|
||||
#feasopt_tolerance: 1.e-6
|
||||
mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
|
||||
|
||||
plotting:
|
||||
map:
|
||||
boundaries: [-11, 30, 34, 71]
|
||||
color_geomap:
|
||||
ocean: white
|
||||
land: white
|
||||
costs_max: 1000
|
||||
costs_threshold: 1
|
||||
energy_max: 20000
|
||||
energy_min: -20000
|
||||
energy_threshold: 50
|
||||
vre_techs:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
renewable_storage_techs:
|
||||
- PHS
|
||||
- hydro
|
||||
conv_techs:
|
||||
- OCGT
|
||||
- CCGT
|
||||
- Nuclear
|
||||
- Coal
|
||||
storage_techs:
|
||||
- hydro+PHS
|
||||
- battery
|
||||
- H2
|
||||
load_carriers:
|
||||
- AC load
|
||||
AC_carriers:
|
||||
- AC line
|
||||
- AC transformer
|
||||
link_carriers:
|
||||
- DC line
|
||||
- Converter AC-DC
|
||||
heat_links:
|
||||
- heat pump
|
||||
- resistive heater
|
||||
- CHP heat
|
||||
- CHP electric
|
||||
- gas boiler
|
||||
- central heat pump
|
||||
- central resistive heater
|
||||
- central CHP heat
|
||||
- central CHP electric
|
||||
- central gas boiler
|
||||
heat_generators:
|
||||
- gas boiler
|
||||
- central gas boiler
|
||||
- solar thermal collector
|
||||
- central solar thermal collector
|
||||
tech_colors:
|
||||
# wind
|
||||
onwind: "#235ebc"
|
||||
onshore wind: "#235ebc"
|
||||
offwind: "#6895dd"
|
||||
offshore wind: "#6895dd"
|
||||
offwind-ac: "#6895dd"
|
||||
offshore wind (AC): "#6895dd"
|
||||
offwind-dc: "#74c6f2"
|
||||
offshore wind (DC): "#74c6f2"
|
||||
# water
|
||||
hydro: '#298c81'
|
||||
hydro reservoir: '#298c81'
|
||||
ror: '#3dbfb0'
|
||||
run of river: '#3dbfb0'
|
||||
hydroelectricity: '#298c81'
|
||||
PHS: '#51dbcc'
|
||||
wave: '#a7d4cf'
|
||||
# solar
|
||||
solar: "#f9d002"
|
||||
solar PV: "#f9d002"
|
||||
solar thermal: '#ffbf2b'
|
||||
solar rooftop: '#ffea80'
|
||||
# gas
|
||||
OCGT: '#e0986c'
|
||||
OCGT marginal: '#e0986c'
|
||||
OCGT-heat: '#e0986c'
|
||||
gas boiler: '#db6a25'
|
||||
gas boilers: '#db6a25'
|
||||
gas boiler marginal: '#db6a25'
|
||||
gas: '#e05b09'
|
||||
natural gas: '#e05b09'
|
||||
CCGT: '#a85522'
|
||||
CCGT marginal: '#a85522'
|
||||
gas for industry co2 to atmosphere: '#692e0a'
|
||||
gas for industry co2 to stored: '#8a3400'
|
||||
gas for industry: '#853403'
|
||||
gas for industry CC: '#692e0a'
|
||||
gas pipeline: '#ebbca0'
|
||||
# oil
|
||||
oil: '#c9c9c9'
|
||||
oil boiler: '#adadad'
|
||||
agriculture machinery oil: '#949494'
|
||||
shipping oil: "#808080"
|
||||
land transport oil: '#afafaf'
|
||||
# nuclear
|
||||
Nuclear: '#ff8c00'
|
||||
Nuclear marginal: '#ff8c00'
|
||||
nuclear: '#ff8c00'
|
||||
uranium: '#ff8c00'
|
||||
# coal
|
||||
Coal: '#545454'
|
||||
coal: '#545454'
|
||||
Coal marginal: '#545454'
|
||||
Lignite: '#826837'
|
||||
lignite: '#826837'
|
||||
Lignite marginal: '#826837'
|
||||
# biomass
|
||||
biogas: '#e3d37d'
|
||||
solid biomass: '#baa741'
|
||||
solid biomass transport: '#baa741'
|
||||
solid biomass for industry: '#7a6d26'
|
||||
solid biomass for industry CC: '#47411c'
|
||||
solid biomass for industry co2 from atmosphere: '#736412'
|
||||
solid biomass for industry co2 to stored: '#47411c'
|
||||
# power transmission
|
||||
lines: '#6c9459'
|
||||
transmission lines: '#6c9459'
|
||||
electricity distribution grid: '#97ad8c'
|
||||
# electricity demand
|
||||
Electric load: '#110d63'
|
||||
electric demand: '#110d63'
|
||||
electricity: '#110d63'
|
||||
industry electricity: '#2d2a66'
|
||||
industry new electricity: '#2d2a66'
|
||||
agriculture electricity: '#494778'
|
||||
# battery + EVs
|
||||
battery: '#ace37f'
|
||||
battery storage: '#ace37f'
|
||||
home battery: '#80c944'
|
||||
home battery storage: '#80c944'
|
||||
BEV charger: '#baf238'
|
||||
V2G: '#e5ffa8'
|
||||
land transport EV: '#baf238'
|
||||
Li ion: '#baf238'
|
||||
# hot water storage
|
||||
water tanks: '#e69487'
|
||||
hot water storage: '#e69487'
|
||||
hot water charging: '#e69487'
|
||||
hot water discharging: '#e69487'
|
||||
# heat demand
|
||||
Heat load: '#cc1f1f'
|
||||
heat: '#cc1f1f'
|
||||
heat demand: '#cc1f1f'
|
||||
rural heat: '#ff5c5c'
|
||||
central heat: '#cc1f1f'
|
||||
decentral heat: '#750606'
|
||||
low-temperature heat for industry: '#8f2727'
|
||||
process heat: '#ff0000'
|
||||
agriculture heat: '#d9a5a5'
|
||||
# heat supply
|
||||
heat pumps: '#2fb537'
|
||||
heat pump: '#2fb537'
|
||||
air heat pump: '#36eb41'
|
||||
ground heat pump: '#2fb537'
|
||||
Ambient: '#98eb9d'
|
||||
CHP: '#8a5751'
|
||||
CHP CC: '#634643'
|
||||
CHP heat: '#8a5751'
|
||||
CHP electric: '#8a5751'
|
||||
district heating: '#e8beac'
|
||||
resistive heater: '#c78536'
|
||||
retrofitting: '#8487e8'
|
||||
building retrofitting: '#8487e8'
|
||||
# hydrogen
|
||||
H2 for industry: "#f073da"
|
||||
H2 for shipping: "#ebaee0"
|
||||
H2: '#bf13a0'
|
||||
SMR: '#870c71'
|
||||
SMR CC: '#4f1745'
|
||||
H2 liquefaction: '#d647bd'
|
||||
hydrogen storage: '#bf13a0'
|
||||
land transport fuel cell: '#6b3161'
|
||||
H2 pipeline: '#f081dc'
|
||||
H2 Fuel Cell: '#c251ae'
|
||||
H2 Electrolysis: '#ff29d9'
|
||||
# syngas
|
||||
Sabatier: '#9850ad'
|
||||
methanation: '#c44ce6'
|
||||
helmeth: '#e899ff'
|
||||
# synfuels
|
||||
Fischer-Tropsch: '#25c49a'
|
||||
kerosene for aviation: '#a1ffe6'
|
||||
naphtha for industry: '#57ebc4'
|
||||
# co2
|
||||
CC: '#9e132c'
|
||||
CO2 sequestration: '#9e132c'
|
||||
DAC: '#ff5270'
|
||||
co2 stored: '#f2385a'
|
||||
co2: '#f29dae'
|
||||
co2 vent: '#ffd4dc'
|
||||
CO2 pipeline: '#f5627f'
|
||||
# emissions
|
||||
process emissions CC: '#000000'
|
||||
process emissions: '#222222'
|
||||
process emissions to stored: '#444444'
|
||||
process emissions to atmosphere: '#888888'
|
||||
oil emissions: '#aaaaaa'
|
||||
shipping oil emissions: "#555555"
|
||||
land transport oil emissions: '#777777'
|
||||
agriculture machinery oil emissions: '#333333'
|
||||
# other
|
||||
shipping: '#03a2ff'
|
||||
power-to-heat: '#cc1f1f'
|
||||
power-to-gas: '#c44ce6'
|
||||
power-to-liquid: '#25c49a'
|
||||
gas-to-power/heat: '#ee8340'
|
@ -1,3 +1,4 @@
|
||||
attribute,type,unit,default,description,status
|
||||
build_year,integer,year,n/a,build year,Input (optional)
|
||||
lifetime,float,years,n/a,lifetime,Input (optional)
|
||||
carrier,string,n/a,n/a,carrier,Input (optional)
|
||||
lifetime,float,years,inf,lifetime,Input (optional)
|
||||
build_year,int,year ,0,build year,Input (optional)
|
||||
|
|
@ -2,12 +2,12 @@ attribute,type,unit,default,description,status
|
||||
bus2,string,n/a,n/a,2nd bus,Input (optional)
|
||||
bus3,string,n/a,n/a,3rd bus,Input (optional)
|
||||
bus4,string,n/a,n/a,4th bus,Input (optional)
|
||||
efficiency2,static or series,per unit,1.,2nd bus efficiency,Input (optional)
|
||||
efficiency3,static or series,per unit,1.,3rd bus efficiency,Input (optional)
|
||||
efficiency4,static or series,per unit,1.,4th bus efficiency,Input (optional)
|
||||
p2,series,MW,0.,2nd bus output,Output
|
||||
p3,series,MW,0.,3rd bus output,Output
|
||||
p4,series,MW,0.,4th bus output,Output
|
||||
build_year,integer,year,n/a,build year,Input (optional)
|
||||
lifetime,float,years,n/a,lifetime,Input (optional)
|
||||
efficiency2,static or series,per unit,1,2nd bus efficiency,Input (optional)
|
||||
efficiency3,static or series,per unit,1,3rd bus efficiency,Input (optional)
|
||||
efficiency4,static or series,per unit,1,4th bus efficiency,Input (optional)
|
||||
p2,series,MW,0,2nd bus output,Output
|
||||
p3,series,MW,0,3rd bus output,Output
|
||||
p4,series,MW,0,4th bus output,Output
|
||||
carrier,string,n/a,n/a,carrier,Input (optional)
|
||||
lifetime,float,years,inf,lifetime,Input (optional)
|
||||
build_year,int,year ,0,build year,Input (optional)
|
||||
|
|
@ -1,4 +1,4 @@
|
||||
attribute,type,unit,default,description,status
|
||||
build_year,integer,year,n/a,build year,Input (optional)
|
||||
lifetime,float,years,n/a,lifetime,Input (optional)
|
||||
carrier,string,n/a,n/a,carrier,Input (optional)
|
||||
lifetime,float,years,inf,lifetime,Input (optional)
|
||||
build_year,int,year ,0,build year,Input (optional)
|
||||
|
|
@ -29,10 +29,21 @@ heating, biomass, industry and industrial feedstocks. This completes
|
||||
the energy system and includes all greenhouse gas emitters except
|
||||
waste management, agriculture, forestry and land use.
|
||||
|
||||
|
||||
**WARNING**: PyPSA-Eur-Sec is under active development and has several
|
||||
`limitations <https://pypsa-eur-sec.readthedocs.io/en/latest/limitations.html>`_ which
|
||||
you should understand before using the model. The github repository
|
||||
`issues <https://github.com/PyPSA/pypsa-eur-sec/issues>`_ collects known
|
||||
topics we are working on (please feel free to help or make suggestions). There is neither a full
|
||||
documentation nor a paper yet, but we hope to have a preprint out by mid-2022.
|
||||
We cannot support this model if you
|
||||
choose to use it.
|
||||
|
||||
|
||||
.. note::
|
||||
More about the current model capabilities and preliminary results
|
||||
can be found in `a recent presentation at EMP-E <https://nworbmot.org/energy/brown-empe.pdf>`_
|
||||
and the the following `preprint with a description of the industry sector <https://arxiv.org/abs/2109.09563>`_.
|
||||
and the following `paper in Joule with a description of the industry sector <https://arxiv.org/abs/2109.09563>`_.
|
||||
|
||||
This diagram gives an overview of the sectors and the links between
|
||||
them:
|
||||
@ -131,6 +142,7 @@ Documentation
|
||||
**References**
|
||||
|
||||
* :doc:`release_notes`
|
||||
* :doc:`limitations`
|
||||
|
||||
.. toctree::
|
||||
:hidden:
|
||||
@ -138,18 +150,7 @@ Documentation
|
||||
:caption: References
|
||||
|
||||
release_notes
|
||||
|
||||
|
||||
Warnings
|
||||
========
|
||||
|
||||
**WARNING**: This model is under construction and contains serious
|
||||
problems that distort the results. See the github repository
|
||||
`issues <https://github.com/PyPSA/pypsa-eur-sec/issues>`_ for some of
|
||||
the problems (please feel free to help or make suggestions). There is
|
||||
neither documentation nor a paper yet, but we hope to have a preprint
|
||||
out by summer 2020. We cannot support this model if you choose to use
|
||||
it.
|
||||
limitations
|
||||
|
||||
|
||||
Licence
|
||||
|
@ -68,14 +68,14 @@ Data requirements
|
||||
=================
|
||||
|
||||
Small data files are included directly in the git repository, while
|
||||
larger ones are archived in a data bundle on zenodo (`10.5281/zenodo.5546517 <https://doi.org/10.5281/zenodo.5546517>`_).
|
||||
larger ones are archived in a data bundle on zenodo (`10.5281/zenodo.5824485 <https://doi.org/10.5281/zenodo.5824485>`_).
|
||||
The data bundle's size is around 640 MB.
|
||||
|
||||
To download and extract the data bundle on the command line:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
projects/pypsa-eur-sec/data % wget "https://zenodo.org/record/5546517/files/pypsa-eur-sec-data-bundle.tar.gz"
|
||||
projects/pypsa-eur-sec/data % wget "https://zenodo.org/record/5824485/files/pypsa-eur-sec-data-bundle.tar.gz"
|
||||
projects/pypsa-eur-sec/data % tar -xvzf pypsa-eur-sec-data-bundle.tar.gz
|
||||
|
||||
|
||||
|
61
doc/limitations.rst
Normal file
61
doc/limitations.rst
Normal file
@ -0,0 +1,61 @@
|
||||
##########################################
|
||||
Limitations
|
||||
##########################################
|
||||
|
||||
While the benefit of an openly available, functional and partially validated
|
||||
model of the European energy system is high, many approximations have
|
||||
been made due to missing data.
|
||||
The limitations of the dataset are listed below,
|
||||
both as a warning to the user and as an encouragement to assist in
|
||||
improving the approximations.
|
||||
|
||||
This list of limitations is incomplete and will be added to over time.
|
||||
|
||||
See also the `GitHub repository issues <https://github.com/PyPSA/pypsa-eur-sec/issues>`_.
|
||||
|
||||
- **Electricity transmission network topology:**
|
||||
The grid data is based on a map of the ENTSO-E area that is known
|
||||
to contain small distortions to improve readability. Since the exact impedances
|
||||
of the lines are unknown, approximations based on line lengths and standard
|
||||
line parameters were made that ignore specific conductoring choices for
|
||||
particular lines. There is no openly available data on busbar configurations, switch
|
||||
locations, transformers or reactive power compensation assets.
|
||||
|
||||
- **Assignment of electricity demand to transmission nodes:**
|
||||
Using Voronoi cells to aggregate load and generator data to transmission
|
||||
network substations ignores the topology of the underlying distribution network,
|
||||
meaning that assets may be connected to the wrong substation.
|
||||
|
||||
- **Incomplete information on existing assets:** Approximations have
|
||||
been made for missing data, including: existing distribution grid
|
||||
capacities and costs, existing space and water heating supply,
|
||||
existing industry facilities, existing transport vehicle fleets.
|
||||
|
||||
- **Exogenous pathways for transformation of transport and industry:**
|
||||
To avoid penny-switching the transformation of transport and
|
||||
industry away from fossil fuels is determined exogenously.
|
||||
|
||||
- **Energy demand distribution within countries:**
|
||||
Assumptions
|
||||
have been made about the distribution of demand in each country proportional to
|
||||
population and GDP that may not reflect local circumstances.
|
||||
Openly available
|
||||
data on load time series may not correspond to the true vertical load and is
|
||||
not spatially disaggregated; assuming, as we have done, that the load time series
|
||||
shape is the same at each node within each country ignores local differences.
|
||||
|
||||
- **Hydro-electric power plants:**
|
||||
The database of hydro-electric power plants does not include plant-specific
|
||||
energy storage information, so that blanket values based on country storage
|
||||
totals have been used. Inflow time series are based on country-wide approximations,
|
||||
ignoring local topography and basin drainage; in principle a full
|
||||
hydrological model should be used.
|
||||
|
||||
- **International interactions:**
|
||||
Border connections and power flows to Russia,
|
||||
Belarus, Ukraine, Turkey and Morocco have not been taken into account;
|
||||
islands which are not connected to the main European system, such as Malta,
|
||||
Crete and Cyprus, are also excluded from the model.
|
||||
|
||||
- **Demand sufficiency:** Further measures of demand reduction may be
|
||||
possible beyond the assumptions made here.
|
@ -24,7 +24,7 @@ incorporates retrofitting options to hydrogen.
|
||||
* New rule ``build_gas_input_locations`` compiles the LNG import capacities
|
||||
(including planned projects from gem.wiki), pipeline entry capacities and
|
||||
local production capacities for each region of the model. These are the
|
||||
regions where fossil gas can eventually enter the model.
|
||||
regions where fossil gas can eventually enter the model.
|
||||
|
||||
* New rule ``cluster_gas_network`` that clusters the gas transmission network
|
||||
data to the model resolution. Cross-regional pipeline capacities are aggregated
|
||||
@ -47,8 +47,8 @@ incorporates retrofitting options to hydrogen.
|
||||
H2_retrofit_capacity_per_CH4`` units are made available as hydrogen pipeline
|
||||
capacity in the corresponding corridor. These repurposed hydrogen pipelines
|
||||
have lower costs than new hydrogen pipelines. Both new and repurposed pipelines
|
||||
can be built simultaneously. The retrofitting option ``sector: H2_retrofit:`` also works
|
||||
with a copperplated methane infrastructure, i.e. when ``sector: gas_network: false``.
|
||||
can be built simultaneously. The retrofitting option ``sector: H2_retrofit:`` also works
|
||||
with a copperplated methane infrastructure, i.e. when ``sector: gas_network: false``.
|
||||
|
||||
* New hydrogen pipelines can now be built where there are already power or gas
|
||||
transmission routes. Previously, only the electricity transmission routes were
|
||||
@ -56,12 +56,16 @@ incorporates retrofitting options to hydrogen.
|
||||
|
||||
**New features and functionality**
|
||||
|
||||
* Units are assigned to the buses. These only provide a better understanding. The specifications of the units are not taken into account in the optimisation, which means that no automatic conversion of units takes place.
|
||||
|
||||
* Option ``retrieve_sector_databundle`` to automatically retrieve and extract data bundle.
|
||||
|
||||
* Add regionalised hydrogen salt cavern storage potentials from `Technical Potential of Salt Caverns for Hydrogen Storage in Europe <https://doi.org/10.20944/preprints201910.0187.v1>`_.
|
||||
|
||||
* Add option to sweep the global CO2 sequestration potentials with keyword ``seq200`` in the ``{sector_opts}`` wildcard (for limit of 200 Mt CO2).
|
||||
|
||||
* Updated `data bundle <https://zenodo.org/record/5824485/files/pypsa-eur-sec-data-bundle.tar.gz>`_ that includes the hydrogan salt cavern storage potentials.
|
||||
|
||||
**Bugfixes**
|
||||
|
||||
* The CO2 sequestration limit implemented as GlobalConstraint (introduced in the previous version)
|
||||
@ -82,7 +86,7 @@ besides many performance improvements.
|
||||
|
||||
This release is known to work with `PyPSA-Eur
|
||||
<https://github.com/PyPSA/pypsa-eur>`_ Version 0.4.0, `Technology Data
|
||||
<https://github.com/PyPSA/technology-data>`_ Version 0.3.0 and
|
||||
<https://github.com/PyPSA/technology-data>`_ Version 0.3.0 and
|
||||
`PyPSA <https://github.com/PyPSA/PyPSA>`_ Version 0.18.0.
|
||||
|
||||
Please note that the data bundle has also been updated.
|
||||
@ -200,19 +204,19 @@ Please note that the data bundle has also been updated.
|
||||
A function ``helper.override_component_attrs`` was added that loads this data
|
||||
and can pass the overridden component attributes into ``pypsa.Network()``.
|
||||
|
||||
* Add various parameters to ``config.default.yaml`` which were previously hardcoded inside the scripts
|
||||
* Add various parameters to ``config.default.yaml`` which were previously hardcoded inside the scripts
|
||||
(e.g. energy reference years, BEV settings, solar thermal collector models, geomap colours).
|
||||
|
||||
* Removed stale industry demand rules ``build_industrial_energy_demand_per_country``
|
||||
and ``build_industrial_demand``. These are superseded with more regionally resolved rules.
|
||||
|
||||
* Use simpler and shorter ``gdf.sjoin()`` function to allocate industrial sites
|
||||
from the Hotmaps database to onshore regions.
|
||||
from the Hotmaps database to onshore regions.
|
||||
This change also fixes a bug:
|
||||
The previous version allocated sites to the closest bus,
|
||||
but at country borders (where Voronoi cells are distorted by the borders),
|
||||
this had resulted in e.g. a Spanish site close to the French border
|
||||
being wrongly allocated to the French bus if the bus center was closer.
|
||||
being wrongly allocated to the French bus if the bus center was closer.
|
||||
|
||||
* Retrofitting rule is now only triggered if endogeneously optimised.
|
||||
|
||||
@ -223,7 +227,7 @@ Please note that the data bundle has also been updated.
|
||||
* Improve legibility of ``config.default.yaml`` and remove unused options.
|
||||
|
||||
* Use the country-specific time zone mappings from ``pytz`` rather than a manual mapping.
|
||||
|
||||
|
||||
* A function ``add_carrier_buses()`` was added to the ``prepare_network`` rule to reduce code duplication.
|
||||
|
||||
* In the ``prepare_network`` rule the cost and potential adjustment was moved into an
|
||||
@ -433,4 +437,4 @@ To make a new release of the data bundle, make an archive of the files in ``data
|
||||
|
||||
.. code:: bash
|
||||
|
||||
data % tar pczf pypsa-eur-sec-data-bundle.tar.gz eea/UNFCCC_v23.csv switzerland-sfoe biomass eurostat-energy_balances-* jrc-idees-2015 emobility WindWaveWEC_GLTB.xlsx myb1-2017-nitro.xls Industrial_Database.csv retro/tabula-calculator-calcsetbuilding.csv nuts/NUTS_RG_10M_2013_4326_LEVL_2.geojson
|
||||
data % tar pczf pypsa-eur-sec-data-bundle.tar.gz eea/UNFCCC_v23.csv switzerland-sfoe biomass eurostat-energy_balances-* jrc-idees-2015 emobility WindWaveWEC_GLTB.xlsx myb1-2017-nitro.xls Industrial_Database.csv retro/tabula-calculator-calcsetbuilding.csv nuts/NUTS_RG_10M_2013_4326_LEVL_2.geojson h2_salt_caverns_GWh_per_sqkm.geojson
|
||||
|
@ -8,15 +8,22 @@ idx = pd.IndexSlice
|
||||
|
||||
import pypsa
|
||||
import yaml
|
||||
import numpy as np
|
||||
|
||||
from add_existing_baseyear import add_build_year_to_new_assets
|
||||
from helper import override_component_attrs
|
||||
from solve_network import basename
|
||||
|
||||
|
||||
def add_brownfield(n, n_p, year):
|
||||
|
||||
print("adding brownfield")
|
||||
|
||||
# electric transmission grid set optimised capacities of previous as minimum
|
||||
n.lines.s_nom_min = n_p.lines.s_nom_opt
|
||||
dc_i = n.links[n.links.carrier=="DC"].index
|
||||
n.links.loc[dc_i, "p_nom_min"] = n_p.links.loc[dc_i, "p_nom_opt"]
|
||||
|
||||
for c in n_p.iterate_components(["Link", "Generator", "Store"]):
|
||||
|
||||
attr = "e" if c.name == "Store" else "p"
|
||||
@ -25,7 +32,7 @@ def add_brownfield(n, n_p, year):
|
||||
# CO2 or global EU values since these are already in n
|
||||
n_p.mremove(
|
||||
c.name,
|
||||
c.df.index[c.df.lifetime.isna()]
|
||||
c.df.index[c.df.lifetime==np.inf]
|
||||
)
|
||||
|
||||
# remove assets whose build_year + lifetime < year
|
||||
@ -44,7 +51,7 @@ def add_brownfield(n, n_p, year):
|
||||
)]
|
||||
|
||||
threshold = snakemake.config['existing_capacities']['threshold_capacity']
|
||||
|
||||
|
||||
if not chp_heat.empty:
|
||||
threshold_chp_heat = (threshold
|
||||
* c.df.efficiency[chp_heat.str.replace("heat", "electric")].values
|
||||
@ -55,7 +62,7 @@ def add_brownfield(n, n_p, year):
|
||||
c.name,
|
||||
chp_heat[c.df.loc[chp_heat, attr + "_nom_opt"] < threshold_chp_heat]
|
||||
)
|
||||
|
||||
|
||||
n_p.mremove(
|
||||
c.name,
|
||||
c.df.index[c.df[attr + "_nom_extendable"] & ~c.df.index.isin(chp_heat) & (c.df[attr + "_nom_opt"] < threshold)]
|
||||
@ -75,16 +82,44 @@ def add_brownfield(n, n_p, year):
|
||||
for tattr in n.component_attrs[c.name].index[selection]:
|
||||
n.import_series_from_dataframe(c.pnl[tattr], c.name, tattr)
|
||||
|
||||
# deal with gas network
|
||||
pipe_carrier = ['gas pipeline']
|
||||
if snakemake.config["sector"]['H2_retrofit']:
|
||||
# drop capacities of previous year to avoid duplicating
|
||||
to_drop = n.links.carrier.isin(pipe_carrier) & (n.links.build_year!=year)
|
||||
n.mremove("Link", n.links.loc[to_drop].index)
|
||||
|
||||
# subtract the already retrofitted from today's gas grid capacity
|
||||
h2_retrofitted_fixed_i = n.links[(n.links.carrier=='H2 pipeline retrofitted') & (n.links.build_year!=year)].index
|
||||
gas_pipes_i = n.links[n.links.carrier.isin(pipe_carrier)].index
|
||||
CH4_per_H2 = 1 / snakemake.config["sector"]["H2_retrofit_capacity_per_CH4"]
|
||||
fr = "H2 pipeline retrofitted"
|
||||
to = "gas pipeline"
|
||||
# today's pipe capacity
|
||||
pipe_capacity = n.links.loc[gas_pipes_i, 'p_nom']
|
||||
# already retrofitted capacity from gas -> H2
|
||||
already_retrofitted = (n.links.loc[h2_retrofitted_fixed_i, 'p_nom']
|
||||
.rename(lambda x: basename(x).replace(fr, to)).groupby(level=0).sum())
|
||||
remaining_capacity = pipe_capacity - CH4_per_H2 * already_retrofitted.reindex(index=pipe_capacity.index).fillna(0)
|
||||
n.links.loc[gas_pipes_i, "p_nom"] = remaining_capacity
|
||||
else:
|
||||
new_pipes = n.links.carrier.isin(pipe_carrier) & (n.links.build_year==year)
|
||||
n.links.loc[new_pipes, "p_nom"] = 0.
|
||||
n.links.loc[new_pipes, "p_nom_min"] = 0.
|
||||
|
||||
|
||||
|
||||
#%%
|
||||
if __name__ == "__main__":
|
||||
if 'snakemake' not in globals():
|
||||
from helper import mock_snakemake
|
||||
snakemake = mock_snakemake(
|
||||
'add_brownfield',
|
||||
simpl='',
|
||||
clusters=48,
|
||||
clusters="37",
|
||||
opts="",
|
||||
lv=1.0,
|
||||
sector_opts='Co2L0-168H-T-H-B-I-solar3-dist1',
|
||||
sector_opts='168H-T-H-B-I-solar+p3-dist1',
|
||||
planning_horizons=2030,
|
||||
)
|
||||
|
||||
|
@ -12,9 +12,11 @@ import xarray as xr
|
||||
import pypsa
|
||||
import yaml
|
||||
|
||||
from prepare_sector_network import prepare_costs
|
||||
from prepare_sector_network import prepare_costs, define_spatial
|
||||
from helper import override_component_attrs
|
||||
|
||||
from types import SimpleNamespace
|
||||
spatial = SimpleNamespace()
|
||||
|
||||
def add_build_year_to_new_assets(n, baseyear):
|
||||
"""
|
||||
@ -28,7 +30,7 @@ def add_build_year_to_new_assets(n, baseyear):
|
||||
# Give assets with lifetimes and no build year the build year baseyear
|
||||
for c in n.iterate_components(["Link", "Generator", "Store"]):
|
||||
|
||||
assets = c.df.index[~c.df.lifetime.isna() & c.df.build_year==0]
|
||||
assets = c.df.index[(c.df.lifetime!=np.inf) & (c.df.build_year==0)]
|
||||
c.df.loc[assets, "build_year"] = baseyear
|
||||
|
||||
# add -baseyear to name
|
||||
@ -153,13 +155,13 @@ def add_power_capacities_installed_before_baseyear(n, grouping_years, costs, bas
|
||||
df_agg.Fueltype = df_agg.Fueltype.map(rename_fuel)
|
||||
|
||||
# assign clustered bus
|
||||
busmap_s = pd.read_csv(snakemake.input.busmap_s, index_col=0, squeeze=True)
|
||||
busmap = pd.read_csv(snakemake.input.busmap, index_col=0, squeeze=True)
|
||||
busmap_s = pd.read_csv(snakemake.input.busmap_s, index_col=0).squeeze()
|
||||
busmap = pd.read_csv(snakemake.input.busmap, index_col=0).squeeze()
|
||||
|
||||
inv_busmap = {}
|
||||
for k, v in busmap.iteritems():
|
||||
inv_busmap[v] = inv_busmap.get(v, []) + [k]
|
||||
|
||||
|
||||
clustermaps = busmap_s.map(busmap)
|
||||
clustermaps.index = clustermaps.index.astype(int)
|
||||
|
||||
@ -197,10 +199,15 @@ def add_power_capacities_installed_before_baseyear(n, grouping_years, costs, bas
|
||||
capacity = capacity[capacity > snakemake.config['existing_capacities']['threshold_capacity']]
|
||||
|
||||
if generator in ['solar', 'onwind', 'offwind']:
|
||||
|
||||
|
||||
suffix = '-ac' if generator == 'offwind' else ''
|
||||
name_suffix = f' {generator}{suffix}-{baseyear}'
|
||||
|
||||
# to consider electricity grid connection costs or a split between
|
||||
# solar utility and rooftop as well, rather take cost assumptions
|
||||
# from existing network than from the cost database
|
||||
capital_cost = n.generators.loc[n.generators.carrier==generator+suffix, "capital_cost"].mean()
|
||||
|
||||
if 'm' in snakemake.wildcards.clusters:
|
||||
|
||||
for ind in capacity.index:
|
||||
@ -213,14 +220,14 @@ def add_power_capacities_installed_before_baseyear(n, grouping_years, costs, bas
|
||||
|
||||
p_max_pu = n.generators_t.p_max_pu[[i + name_suffix for i in inv_ind]]
|
||||
p_max_pu.columns=[i + name_suffix for i in inv_ind ]
|
||||
|
||||
|
||||
n.madd("Generator",
|
||||
[i + name_suffix for i in inv_ind],
|
||||
bus=ind,
|
||||
carrier=generator,
|
||||
p_nom=capacity[ind] / len(inv_ind), # split among regions in a country
|
||||
marginal_cost=costs.at[generator,'VOM'],
|
||||
capital_cost=costs.at[generator,'fixed'],
|
||||
capital_cost=capital_cost,
|
||||
efficiency=costs.at[generator, 'efficiency'],
|
||||
p_max_pu=p_max_pu,
|
||||
build_year=grouping_year,
|
||||
@ -238,7 +245,7 @@ def add_power_capacities_installed_before_baseyear(n, grouping_years, costs, bas
|
||||
carrier=generator,
|
||||
p_nom=capacity,
|
||||
marginal_cost=costs.at[generator, 'VOM'],
|
||||
capital_cost=costs.at[generator, 'fixed'],
|
||||
capital_cost=capital_cost,
|
||||
efficiency=costs.at[generator, 'efficiency'],
|
||||
p_max_pu=p_max_pu.rename(columns=n.generators.bus),
|
||||
build_year=grouping_year,
|
||||
@ -246,11 +253,14 @@ def add_power_capacities_installed_before_baseyear(n, grouping_years, costs, bas
|
||||
)
|
||||
|
||||
else:
|
||||
bus0 = vars(spatial)[carrier[generator]].nodes
|
||||
if "EU" not in vars(spatial)[carrier[generator]].locations:
|
||||
bus0 = bus0.intersection(capacity.index + " gas")
|
||||
|
||||
n.madd("Link",
|
||||
capacity.index,
|
||||
suffix= " " + generator +"-" + str(grouping_year),
|
||||
bus0="EU " + carrier[generator],
|
||||
bus0=bus0,
|
||||
bus1=capacity.index,
|
||||
bus2="co2 atmosphere",
|
||||
carrier=generator,
|
||||
@ -399,10 +409,11 @@ def add_heating_capacities_installed_before_baseyear(n, baseyear, grouping_years
|
||||
lifetime=costs.at[costs_name, 'lifetime']
|
||||
)
|
||||
|
||||
|
||||
n.madd("Link",
|
||||
nodes[name],
|
||||
suffix= f" {name} gas boiler-{grouping_year}",
|
||||
bus0="EU gas",
|
||||
bus0=spatial.gas.nodes,
|
||||
bus1=nodes[name] + " " + name + " heat",
|
||||
bus2="co2 atmosphere",
|
||||
carrier=name + " gas boiler",
|
||||
@ -417,7 +428,7 @@ def add_heating_capacities_installed_before_baseyear(n, baseyear, grouping_years
|
||||
n.madd("Link",
|
||||
nodes[name],
|
||||
suffix=f" {name} oil boiler-{grouping_year}",
|
||||
bus0="EU oil",
|
||||
bus0=spatial.oil.nodes,
|
||||
bus1=nodes[name] + " " + name + " heat",
|
||||
bus2="co2 atmosphere",
|
||||
carrier=name + " oil boiler",
|
||||
@ -436,17 +447,17 @@ def add_heating_capacities_installed_before_baseyear(n, baseyear, grouping_years
|
||||
threshold = snakemake.config['existing_capacities']['threshold_capacity']
|
||||
n.mremove("Link", [index for index in n.links.index.to_list() if str(grouping_year) in index and n.links.p_nom[index] < threshold])
|
||||
|
||||
|
||||
#%%
|
||||
if __name__ == "__main__":
|
||||
if 'snakemake' not in globals():
|
||||
from helper import mock_snakemake
|
||||
snakemake = mock_snakemake(
|
||||
'add_existing_baseyear',
|
||||
simpl='',
|
||||
clusters=45,
|
||||
clusters="37",
|
||||
lv=1.0,
|
||||
opts='',
|
||||
sector_opts='Co2L0-168H-T-H-B-I-solar+p3-dist1',
|
||||
sector_opts='168H-T-H-B-I-solar+p3-dist1',
|
||||
planning_horizons=2020,
|
||||
)
|
||||
|
||||
@ -459,7 +470,8 @@ if __name__ == "__main__":
|
||||
|
||||
overrides = override_component_attrs(snakemake.input.overrides)
|
||||
n = pypsa.Network(snakemake.input.network, override_component_attrs=overrides)
|
||||
|
||||
# define spatial resolution of carriers
|
||||
spatial = define_spatial(n.buses[n.buses.carrier=="AC"].index, options)
|
||||
add_build_year_to_new_assets(n, baseyear)
|
||||
|
||||
Nyears = n.snapshot_weightings.generators.sum() / 8760.
|
||||
@ -471,7 +483,7 @@ if __name__ == "__main__":
|
||||
snakemake.config['costs']['lifetime']
|
||||
)
|
||||
|
||||
grouping_years=snakemake.config['existing_capacities']['grouping_years']
|
||||
grouping_years = snakemake.config['existing_capacities']['grouping_years']
|
||||
add_power_capacities_installed_before_baseyear(n, grouping_years, costs, baseyear)
|
||||
|
||||
if "H" in opts:
|
||||
|
@ -144,10 +144,12 @@ def build_nuts2_shapes():
|
||||
nuts2 = gpd.GeoDataFrame(gpd.read_file(snakemake.input.nuts2).set_index('id').geometry)
|
||||
|
||||
countries = gpd.read_file(snakemake.input.country_shapes).set_index('name')
|
||||
missing = countries.loc[["AL", "RS", "BA"]]
|
||||
missing_iso2 = countries.index.intersection(["AL", "RS", "BA"])
|
||||
missing = countries.loc[missing_iso2]
|
||||
|
||||
nuts2.rename(index={"ME00": "ME", "MK00": "MK"}, inplace=True)
|
||||
|
||||
return nuts2.append(missing)
|
||||
return pd.concat([nuts2, missing])
|
||||
|
||||
|
||||
def area(gdf):
|
||||
|
@ -26,7 +26,7 @@ def build_gas_input_locations(lng_fn, planned_lng_fn, entry_fn, prod_fn, countri
|
||||
planned_lng = pd.read_csv(planned_lng_fn)
|
||||
planned_lng.geometry = planned_lng.geometry.apply(wkt.loads)
|
||||
planned_lng = gpd.GeoDataFrame(planned_lng, crs=4326)
|
||||
lng = lng.append(planned_lng, ignore_index=True)
|
||||
lng = pd.concat([lng, planned_lng], ignore_index=True)
|
||||
|
||||
# Entry points from outside the model scope
|
||||
entry = read_scigrid_gas(entry_fn)
|
||||
|
@ -115,14 +115,14 @@ def get_energy_ratio(country):
|
||||
# estimate physical output, energy consumption in the sector and country
|
||||
fn = f"{eurostat_dir}/{eb_names[country]}.XLSX"
|
||||
df = pd.read_excel(fn, sheet_name='2016', index_col=2,
|
||||
header=0, skiprows=1, squeeze=True)
|
||||
header=0, skiprows=1).squeeze('columns')
|
||||
e_country = df.loc[eb_sectors.keys(
|
||||
), 'Total all products'].rename(eb_sectors)
|
||||
|
||||
fn = f'{jrc_dir}/JRC-IDEES-2015_Industry_EU28.xlsx'
|
||||
|
||||
df = pd.read_excel(fn, sheet_name='Ind_Summary',
|
||||
index_col=0, header=0, squeeze=True)
|
||||
index_col=0, header=0).squeeze('columns')
|
||||
|
||||
assert df.index[48] == "by sector"
|
||||
year_i = df.columns.get_loc(year)
|
||||
@ -142,7 +142,7 @@ def industry_production_per_country(country):
|
||||
fn = f'{jrc_dir}/JRC-IDEES-2015_Industry_{jrc_country}.xlsx'
|
||||
sheet = sub_sheet_name_dict[sector]
|
||||
df = pd.read_excel(fn, sheet_name=sheet,
|
||||
index_col=0, header=0, squeeze=True)
|
||||
index_col=0, header=0).squeeze('columns')
|
||||
|
||||
year_i = df.columns.get_loc(year)
|
||||
df = df.iloc[find_physical_output(df), year_i]
|
||||
|
@ -78,12 +78,11 @@ def load_idees_data(sector, country="EU28"):
|
||||
sheet_name=list(sheets.values()),
|
||||
index_col=0,
|
||||
header=0,
|
||||
squeeze=True,
|
||||
usecols=usecols,
|
||||
)
|
||||
|
||||
for k, v in sheets.items():
|
||||
idees[k] = idees.pop(v)
|
||||
idees[k] = idees.pop(v).squeeze()
|
||||
|
||||
return idees
|
||||
|
||||
|
@ -33,7 +33,7 @@ if __name__ == '__main__':
|
||||
|
||||
urban_fraction = pd.read_csv(snakemake.input.urban_percent,
|
||||
header=None, index_col=0,
|
||||
names=['fraction'], squeeze=True) / 100.
|
||||
names=['fraction']).squeeze() / 100.
|
||||
|
||||
# fill missing Balkans values
|
||||
missing = ["AL", "ME", "MK"]
|
||||
|
22
scripts/build_population_weighted_energy_totals.py
Normal file
22
scripts/build_population_weighted_energy_totals.py
Normal file
@ -0,0 +1,22 @@
|
||||
"""Build population-weighted energy totals."""
|
||||
|
||||
import pandas as pd
|
||||
|
||||
if __name__ == '__main__':
|
||||
if 'snakemake' not in globals():
|
||||
from helper import mock_snakemake
|
||||
snakemake = mock_snakemake(
|
||||
'build_population_weighted_energy_totals',
|
||||
simpl='',
|
||||
clusters=48,
|
||||
)
|
||||
|
||||
pop_layout = pd.read_csv(snakemake.input.clustered_pop_layout, index_col=0)
|
||||
|
||||
energy_totals = pd.read_csv(snakemake.input.energy_totals, index_col=0)
|
||||
|
||||
nodal_energy_totals = energy_totals.loc[pop_layout.ct].fillna(0.)
|
||||
nodal_energy_totals.index = pop_layout.index
|
||||
nodal_energy_totals = nodal_energy_totals.multiply(pop_layout.fraction, axis=0)
|
||||
|
||||
nodal_energy_totals.to_csv(snakemake.output[0])
|
201
scripts/build_transport_demand.py
Normal file
201
scripts/build_transport_demand.py
Normal file
@ -0,0 +1,201 @@
|
||||
"""Build transport demand."""
|
||||
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
import xarray as xr
|
||||
from helper import generate_periodic_profiles
|
||||
|
||||
|
||||
def build_nodal_transport_data(fn, pop_layout):
|
||||
|
||||
transport_data = pd.read_csv(fn, index_col=0)
|
||||
|
||||
nodal_transport_data = transport_data.loc[pop_layout.ct].fillna(0.0)
|
||||
nodal_transport_data.index = pop_layout.index
|
||||
nodal_transport_data["number cars"] = (
|
||||
pop_layout["fraction"] * nodal_transport_data["number cars"]
|
||||
)
|
||||
nodal_transport_data.loc[
|
||||
nodal_transport_data["average fuel efficiency"] == 0.0,
|
||||
"average fuel efficiency",
|
||||
] = transport_data["average fuel efficiency"].mean()
|
||||
|
||||
return nodal_transport_data
|
||||
|
||||
|
||||
def build_transport_demand(traffic_fn, airtemp_fn, nodes, nodal_transport_data):
|
||||
|
||||
## Get overall demand curve for all vehicles
|
||||
|
||||
traffic = pd.read_csv(
|
||||
traffic_fn, skiprows=2, usecols=["count"], squeeze=True
|
||||
)
|
||||
|
||||
transport_shape = generate_periodic_profiles(
|
||||
dt_index=snapshots,
|
||||
nodes=nodes,
|
||||
weekly_profile=traffic.values,
|
||||
)
|
||||
transport_shape = transport_shape / transport_shape.sum()
|
||||
|
||||
# electric motors are more efficient, so alter transport demand
|
||||
|
||||
plug_to_wheels_eta = options["bev_plug_to_wheel_efficiency"]
|
||||
battery_to_wheels_eta = plug_to_wheels_eta * options["bev_charge_efficiency"]
|
||||
|
||||
efficiency_gain = (
|
||||
nodal_transport_data["average fuel efficiency"] / battery_to_wheels_eta
|
||||
)
|
||||
|
||||
# get heating demand for correction to demand time series
|
||||
temperature = xr.open_dataarray(airtemp_fn).to_pandas()
|
||||
|
||||
# correction factors for vehicle heating
|
||||
dd_ICE = transport_degree_factor(
|
||||
temperature,
|
||||
options["transport_heating_deadband_lower"],
|
||||
options["transport_heating_deadband_upper"],
|
||||
options["ICE_lower_degree_factor"],
|
||||
options["ICE_upper_degree_factor"],
|
||||
)
|
||||
|
||||
dd_EV = transport_degree_factor(
|
||||
temperature,
|
||||
options["transport_heating_deadband_lower"],
|
||||
options["transport_heating_deadband_upper"],
|
||||
options["EV_lower_degree_factor"],
|
||||
options["EV_upper_degree_factor"],
|
||||
)
|
||||
|
||||
# divide out the heating/cooling demand from ICE totals
|
||||
# and multiply back in the heating/cooling demand for EVs
|
||||
ice_correction = (transport_shape * (1 + dd_ICE)).sum() / transport_shape.sum()
|
||||
|
||||
energy_totals_transport = (
|
||||
pop_weighted_energy_totals["total road"]
|
||||
+ pop_weighted_energy_totals["total rail"]
|
||||
- pop_weighted_energy_totals["electricity rail"]
|
||||
)
|
||||
|
||||
transport = (
|
||||
(transport_shape.multiply(energy_totals_transport) * 1e6 * Nyears)
|
||||
.divide(efficiency_gain * ice_correction)
|
||||
.multiply(1 + dd_EV)
|
||||
)
|
||||
|
||||
return transport
|
||||
|
||||
|
||||
def transport_degree_factor(
|
||||
temperature,
|
||||
deadband_lower=15,
|
||||
deadband_upper=20,
|
||||
lower_degree_factor=0.5,
|
||||
upper_degree_factor=1.6,
|
||||
):
|
||||
"""
|
||||
Work out how much energy demand in vehicles increases due to heating and cooling.
|
||||
There is a deadband where there is no increase.
|
||||
Degree factors are % increase in demand compared to no heating/cooling fuel consumption.
|
||||
Returns per unit increase in demand for each place and time
|
||||
"""
|
||||
|
||||
dd = temperature.copy()
|
||||
|
||||
dd[(temperature > deadband_lower) & (temperature < deadband_upper)] = 0.0
|
||||
|
||||
dT_lower = deadband_lower - temperature[temperature < deadband_lower]
|
||||
dd[temperature < deadband_lower] = lower_degree_factor / 100 * dT_lower
|
||||
|
||||
dT_upper = temperature[temperature > deadband_upper] - deadband_upper
|
||||
dd[temperature > deadband_upper] = upper_degree_factor / 100 * dT_upper
|
||||
|
||||
return dd
|
||||
|
||||
|
||||
def bev_availability_profile(fn, snapshots, nodes, options):
|
||||
"""
|
||||
Derive plugged-in availability for passenger electric vehicles.
|
||||
"""
|
||||
|
||||
traffic = pd.read_csv(fn, skiprows=2, usecols=["count"], squeeze=True)
|
||||
|
||||
avail_max = options["bev_avail_max"]
|
||||
avail_mean = options["bev_avail_mean"]
|
||||
|
||||
avail = avail_max - (avail_max - avail_mean) * (traffic - traffic.min()) / (
|
||||
traffic.mean() - traffic.min()
|
||||
)
|
||||
|
||||
avail_profile = generate_periodic_profiles(
|
||||
dt_index=snapshots,
|
||||
nodes=nodes,
|
||||
weekly_profile=avail.values,
|
||||
)
|
||||
|
||||
return avail_profile
|
||||
|
||||
|
||||
def bev_dsm_profile(snapshots, nodes, options):
|
||||
|
||||
dsm_week = np.zeros((24 * 7,))
|
||||
|
||||
dsm_week[(np.arange(0, 7, 1) * 24 + options["bev_dsm_restriction_time"])] = options[
|
||||
"bev_dsm_restriction_value"
|
||||
]
|
||||
|
||||
dsm_profile = generate_periodic_profiles(
|
||||
dt_index=snapshots,
|
||||
nodes=nodes,
|
||||
weekly_profile=dsm_week,
|
||||
)
|
||||
|
||||
return dsm_profile
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if "snakemake" not in globals():
|
||||
from helper import mock_snakemake
|
||||
|
||||
snakemake = mock_snakemake(
|
||||
"build_transport_demand",
|
||||
simpl="",
|
||||
clusters=48,
|
||||
)
|
||||
|
||||
pop_layout = pd.read_csv(snakemake.input.clustered_pop_layout, index_col=0)
|
||||
|
||||
nodes = pop_layout.index
|
||||
|
||||
pop_weighted_energy_totals = pd.read_csv(
|
||||
snakemake.input.pop_weighted_energy_totals, index_col=0
|
||||
)
|
||||
|
||||
options = snakemake.config["sector"]
|
||||
|
||||
snapshots = pd.date_range(freq='h', **snakemake.config["snapshots"], tz="UTC")
|
||||
|
||||
Nyears = 1
|
||||
|
||||
nodal_transport_data = build_nodal_transport_data(
|
||||
snakemake.input.transport_data,
|
||||
pop_layout
|
||||
)
|
||||
|
||||
transport_demand = build_transport_demand(
|
||||
snakemake.input.traffic_data_KFZ,
|
||||
snakemake.input.temp_air_total,
|
||||
nodes, nodal_transport_data
|
||||
)
|
||||
|
||||
avail_profile = bev_availability_profile(
|
||||
snakemake.input.traffic_data_Pkw,
|
||||
snapshots, nodes, options
|
||||
)
|
||||
|
||||
dsm_profile = bev_dsm_profile(snapshots, nodes, options)
|
||||
|
||||
nodal_transport_data.to_csv(snakemake.output.transport_data)
|
||||
transport_demand.to_csv(snakemake.output.transport_demand)
|
||||
avail_profile.to_csv(snakemake.output.avail_profile)
|
||||
dsm_profile.to_csv(snakemake.output.dsm_profile)
|
@ -1,5 +1,6 @@
|
||||
|
||||
from shutil import copy
|
||||
import yaml
|
||||
|
||||
files = {
|
||||
"config.yaml": "config.yaml",
|
||||
@ -14,5 +15,16 @@ if __name__ == '__main__':
|
||||
from helper import mock_snakemake
|
||||
snakemake = mock_snakemake('copy_config')
|
||||
|
||||
basepath = snakemake.config['summary_dir'] + '/' + snakemake.config['run'] + '/configs/'
|
||||
|
||||
for f, name in files.items():
|
||||
copy(f,snakemake.config['summary_dir'] + '/' + snakemake.config['run'] + '/configs/' + name)
|
||||
copy(f, basepath + name)
|
||||
|
||||
with open(basepath + 'config.snakemake.yaml', 'w') as yaml_file:
|
||||
yaml.dump(
|
||||
snakemake.config,
|
||||
yaml_file,
|
||||
default_flow_style=False,
|
||||
allow_unicode=True,
|
||||
sort_keys=False
|
||||
)
|
@ -1,4 +1,5 @@
|
||||
import os
|
||||
import pytz
|
||||
import pandas as pd
|
||||
from pathlib import Path
|
||||
from pypsa.descriptors import Dict
|
||||
@ -55,6 +56,7 @@ def mock_snakemake(rulename, **wildcards):
|
||||
import os
|
||||
from pypsa.descriptors import Dict
|
||||
from snakemake.script import Snakemake
|
||||
from packaging.version import Version, parse
|
||||
|
||||
script_dir = Path(__file__).parent.resolve()
|
||||
assert Path.cwd().resolve() == script_dir, \
|
||||
@ -64,7 +66,8 @@ def mock_snakemake(rulename, **wildcards):
|
||||
if os.path.exists(p):
|
||||
snakefile = p
|
||||
break
|
||||
workflow = sm.Workflow(snakefile)
|
||||
kwargs = dict(rerun_triggers=[]) if parse(sm.__version__) > Version("7.7.0") else {}
|
||||
workflow = sm.Workflow(snakefile, overwrite_configfiles=[], **kwargs)
|
||||
workflow.include(snakefile)
|
||||
workflow.global_resources = {}
|
||||
rule = workflow.get_rule(rulename)
|
||||
@ -98,4 +101,25 @@ def progress_retrieve(url, file):
|
||||
def dlProgress(count, blockSize, totalSize):
|
||||
pbar.update( int(count * blockSize * 100 / totalSize) )
|
||||
|
||||
urllib.request.urlretrieve(url, file, reporthook=dlProgress)
|
||||
urllib.request.urlretrieve(url, file, reporthook=dlProgress)
|
||||
|
||||
|
||||
def generate_periodic_profiles(dt_index, nodes, weekly_profile, localize=None):
|
||||
"""
|
||||
Give a 24*7 long list of weekly hourly profiles, generate this for each
|
||||
country for the period dt_index, taking account of time zones and summer time.
|
||||
"""
|
||||
|
||||
weekly_profile = pd.Series(weekly_profile, range(24*7))
|
||||
|
||||
week_df = pd.DataFrame(index=dt_index, columns=nodes)
|
||||
|
||||
for node in nodes:
|
||||
timezone = pytz.timezone(pytz.country_timezones[node[:2]][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)
|
||||
|
||||
week_df = week_df.tz_localize(localize)
|
||||
|
||||
return week_df
|
@ -154,7 +154,9 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator
|
||||
costs = costs.stack() # .sort_index()
|
||||
|
||||
# hack because impossible to drop buses...
|
||||
n.buses.loc["EU gas", ["x", "y"]] = n.buses.loc["DE0 0", ["x", "y"]]
|
||||
eu_location = snakemake.config["plotting"].get("eu_node_location", dict(x=-5.5, y=46))
|
||||
n.buses.loc["EU gas", "x"] = eu_location["x"]
|
||||
n.buses.loc["EU gas", "y"] = eu_location["y"]
|
||||
|
||||
n.links.drop(n.links.index[(n.links.carrier != "DC") & (
|
||||
n.links.carrier != "B2B")], inplace=True)
|
||||
@ -287,6 +289,26 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator
|
||||
bbox_inches="tight"
|
||||
)
|
||||
|
||||
def group_pipes(df, drop_direction=False):
|
||||
"""Group pipes which connect same buses and return overall capacity.
|
||||
"""
|
||||
if drop_direction:
|
||||
positive_order = df.bus0 < df.bus1
|
||||
df_p = df[positive_order]
|
||||
swap_buses = {"bus0": "bus1", "bus1": "bus0"}
|
||||
df_n = df[~positive_order].rename(columns=swap_buses)
|
||||
df = pd.concat([df_p, df_n])
|
||||
|
||||
# there are pipes for each investment period rename to AC buses name for plotting
|
||||
df.index = df.apply(
|
||||
lambda x: f"H2 pipeline {x.bus0.replace(' H2', '')} -> {x.bus1.replace(' H2', '')}",
|
||||
axis=1
|
||||
)
|
||||
# group pipe lines connecting the same buses and rename them for plotting
|
||||
pipe_capacity = df["p_nom_opt"].groupby(level=0).sum()
|
||||
|
||||
return pipe_capacity
|
||||
|
||||
|
||||
def plot_h2_map(network, regions):
|
||||
|
||||
@ -305,7 +327,7 @@ def plot_h2_map(network, regions):
|
||||
bus_size_factor = 1e5
|
||||
linewidth_factor = 1e4
|
||||
# MW below which not drawn
|
||||
line_lower_threshold = 1e3
|
||||
line_lower_threshold = 1e2
|
||||
|
||||
# Drop non-electric buses so they don't clutter the plot
|
||||
n.buses.drop(n.buses.index[n.buses.carrier != "AC"], inplace=True)
|
||||
@ -318,12 +340,14 @@ def plot_h2_map(network, regions):
|
||||
|
||||
# make a fake MultiIndex so that area is correct for legend
|
||||
bus_sizes.rename(index=lambda x: x.replace(" H2", ""), level=0, inplace=True)
|
||||
|
||||
# drop all links which are not H2 pipelines
|
||||
n.links.drop(n.links.index[~n.links.carrier.str.contains("H2 pipeline")], inplace=True)
|
||||
|
||||
h2_new = n.links.loc[n.links.carrier=="H2 pipeline"]
|
||||
|
||||
h2_retro = n.links.loc[n.links.carrier=='H2 pipeline retrofitted']
|
||||
# sum capacitiy for pipelines from different investment periods
|
||||
h2_new = group_pipes(h2_new)
|
||||
h2_retro = group_pipes(h2_retro, drop_direction=True).reindex(h2_new.index).fillna(0)
|
||||
|
||||
if not h2_retro.empty:
|
||||
|
||||
@ -354,6 +378,9 @@ def plot_h2_map(network, regions):
|
||||
h2_total = h2_new
|
||||
|
||||
link_widths_total = h2_total / linewidth_factor
|
||||
|
||||
n.links.rename(index=lambda x: x.split("-2")[0], inplace=True)
|
||||
n.links = n.links.groupby(level=0).first()
|
||||
link_widths_total = link_widths_total.reindex(n.links.index).fillna(0.)
|
||||
link_widths_total[n.links.p_nom_opt < line_lower_threshold] = 0.
|
||||
|
||||
@ -498,7 +525,7 @@ def plot_ch4_map(network):
|
||||
# Drop non-electric buses so they don't clutter the plot
|
||||
n.buses.drop(n.buses.index[n.buses.carrier != "AC"], inplace=True)
|
||||
|
||||
fossil_gas_i = n.generators[n.generators.carrier=="gas"].index
|
||||
fossil_gas_i = n.generators[n.generators.carrier=="gas"].index
|
||||
fossil_gas = n.generators_t.p.loc[:,fossil_gas_i].mul(n.snapshot_weightings.generators, axis=0).sum().groupby(n.generators.loc[fossil_gas_i,"bus"]).sum() / bus_size_factor
|
||||
fossil_gas.rename(index=lambda x: x.replace(" gas", ""), inplace=True)
|
||||
fossil_gas = fossil_gas.reindex(n.buses.index).fillna(0)
|
||||
@ -523,10 +550,10 @@ def plot_ch4_map(network):
|
||||
to_remove = n.links.index[~n.links.carrier.str.contains("gas pipeline")]
|
||||
n.links.drop(to_remove, inplace=True)
|
||||
|
||||
link_widths_rem = n.links.p_nom_opt / linewidth_factor
|
||||
link_widths_rem = n.links.p_nom_opt / linewidth_factor
|
||||
link_widths_rem[n.links.p_nom_opt < line_lower_threshold] = 0.
|
||||
|
||||
link_widths_orig = n.links.p_nom / linewidth_factor
|
||||
link_widths_orig = n.links.p_nom / linewidth_factor
|
||||
link_widths_orig[n.links.p_nom < line_lower_threshold] = 0.
|
||||
|
||||
max_usage = n.links_t.p0.abs().max(axis=0)
|
||||
@ -561,8 +588,7 @@ def plot_ch4_map(network):
|
||||
link_colors=pipe_colors['gas pipeline (2020)'],
|
||||
link_widths=link_widths_orig,
|
||||
branch_components=["Link"],
|
||||
ax=ax,
|
||||
geomap=True,
|
||||
ax=ax,
|
||||
**map_opts
|
||||
)
|
||||
|
||||
@ -682,7 +708,9 @@ def plot_map_without(network):
|
||||
|
||||
# hack because impossible to drop buses...
|
||||
if "EU gas" in n.buses.index:
|
||||
n.buses.loc["EU gas", ["x", "y"]] = n.buses.loc["DE0 0", ["x", "y"]]
|
||||
eu_location = snakemake.config["plotting"].get("eu_node_location", dict(x=-5.5, y=46))
|
||||
n.buses.loc["EU gas", "x"] = eu_location["x"]
|
||||
n.buses.loc["EU gas", "y"] = eu_location["y"]
|
||||
|
||||
to_drop = n.links.index[(n.links.carrier != "DC") & (n.links.carrier != "B2B")]
|
||||
n.links.drop(to_drop, inplace=True)
|
||||
@ -865,11 +893,11 @@ if __name__ == "__main__":
|
||||
snakemake = mock_snakemake(
|
||||
'plot_network',
|
||||
simpl='',
|
||||
clusters=45,
|
||||
lv=1.5,
|
||||
clusters="45",
|
||||
lv=1.0,
|
||||
opts='',
|
||||
sector_opts='Co2L0-168H-T-H-B-I-solar+p3-dist1',
|
||||
planning_horizons=2030,
|
||||
sector_opts='168H-T-H-B-I-A-solar+p3-dist1',
|
||||
planning_horizons="2050",
|
||||
)
|
||||
|
||||
overrides = override_component_attrs(snakemake.input.overrides)
|
||||
|
@ -3,7 +3,6 @@
|
||||
import pypsa
|
||||
import re
|
||||
import os
|
||||
import pytz
|
||||
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
@ -15,7 +14,7 @@ from scipy.stats import beta
|
||||
from vresutils.costdata import annuity
|
||||
|
||||
from build_energy_totals import build_eea_co2, build_eurostat_co2, build_co2_totals
|
||||
from helper import override_component_attrs
|
||||
from helper import override_component_attrs, generate_periodic_profiles
|
||||
|
||||
from networkx.algorithms.connectivity.edge_augmentation import k_edge_augmentation
|
||||
from networkx.algorithms import complement
|
||||
@ -28,7 +27,7 @@ from types import SimpleNamespace
|
||||
spatial = SimpleNamespace()
|
||||
|
||||
|
||||
def define_spatial(nodes):
|
||||
def define_spatial(nodes, options):
|
||||
"""
|
||||
Namespace for spatial
|
||||
|
||||
@ -38,7 +37,6 @@ def define_spatial(nodes):
|
||||
"""
|
||||
|
||||
global spatial
|
||||
global options
|
||||
|
||||
spatial.nodes = nodes
|
||||
|
||||
@ -73,7 +71,7 @@ def define_spatial(nodes):
|
||||
spatial.co2.vents = ["co2 vent"]
|
||||
|
||||
spatial.co2.df = pd.DataFrame(vars(spatial.co2), index=nodes)
|
||||
|
||||
|
||||
# gas
|
||||
|
||||
spatial.gas = SimpleNamespace()
|
||||
@ -95,6 +93,28 @@ def define_spatial(nodes):
|
||||
|
||||
spatial.gas.df = pd.DataFrame(vars(spatial.gas), index=nodes)
|
||||
|
||||
# oil
|
||||
spatial.oil = SimpleNamespace()
|
||||
spatial.oil.nodes = ["EU oil"]
|
||||
spatial.oil.locations = ["EU"]
|
||||
|
||||
# uranium
|
||||
spatial.uranium = SimpleNamespace()
|
||||
spatial.uranium.nodes = ["EU uranium"]
|
||||
spatial.uranium.locations = ["EU"]
|
||||
|
||||
# coal
|
||||
spatial.coal = SimpleNamespace()
|
||||
spatial.coal.nodes = ["EU coal"]
|
||||
spatial.coal.locations = ["EU"]
|
||||
|
||||
# lignite
|
||||
spatial.lignite = SimpleNamespace()
|
||||
spatial.lignite.nodes = ["EU lignite"]
|
||||
spatial.lignite.locations = ["EU"]
|
||||
|
||||
return spatial
|
||||
|
||||
|
||||
from types import SimpleNamespace
|
||||
spatial = SimpleNamespace()
|
||||
@ -252,6 +272,7 @@ def create_network_topology(n, prefix, carriers=["DC"], connector=" -> ", bidire
|
||||
|
||||
ln_attrs = ["bus0", "bus1", "length"]
|
||||
lk_attrs = ["bus0", "bus1", "length", "underwater_fraction"]
|
||||
lk_attrs = n.links.columns.intersection(lk_attrs)
|
||||
|
||||
candidates = pd.concat([
|
||||
n.lines[ln_attrs],
|
||||
@ -278,7 +299,7 @@ def create_network_topology(n, prefix, carriers=["DC"], connector=" -> ", bidire
|
||||
topo_reverse = topo.copy()
|
||||
topo_reverse.rename(columns=swap_buses, inplace=True)
|
||||
topo_reverse.index = topo_reverse.apply(make_index, axis=1)
|
||||
topo = topo.append(topo_reverse)
|
||||
topo = pd.concat([topo, topo_reverse])
|
||||
|
||||
return topo
|
||||
|
||||
@ -352,7 +373,8 @@ def add_carrier_buses(n, carrier, nodes=None):
|
||||
"""
|
||||
|
||||
if nodes is None:
|
||||
nodes = ["EU " + carrier]
|
||||
nodes = vars(spatial)[carrier].nodes
|
||||
location = vars(spatial)[carrier].locations
|
||||
|
||||
# skip if carrier already exists
|
||||
if carrier in n.carriers.index:
|
||||
@ -363,10 +385,13 @@ def add_carrier_buses(n, carrier, nodes=None):
|
||||
|
||||
n.add("Carrier", carrier)
|
||||
|
||||
unit = "MWh_LHV" if carrier == "gas" else "MWh_th"
|
||||
|
||||
n.madd("Bus",
|
||||
nodes,
|
||||
location=nodes.str.replace(" " + carrier, ""),
|
||||
carrier=carrier
|
||||
location=location,
|
||||
carrier=carrier,
|
||||
unit=unit
|
||||
)
|
||||
|
||||
#capital cost could be corrected to e.g. 0.2 EUR/kWh * annuity and O&M
|
||||
@ -417,6 +442,7 @@ def patch_electricity_network(n):
|
||||
update_wind_solar_costs(n, costs)
|
||||
n.loads["carrier"] = "electricity"
|
||||
n.buses["location"] = n.buses.index
|
||||
n.buses["unit"] = "MWh_el"
|
||||
# remove trailing white space of load index until new PyPSA version after v0.18.
|
||||
n.loads.rename(lambda x: x.strip(), inplace=True)
|
||||
n.loads_t.p_set.rename(lambda x: x.strip(), axis=1, inplace=True)
|
||||
@ -433,7 +459,8 @@ def add_co2_tracking(n, options):
|
||||
n.add("Bus",
|
||||
"co2 atmosphere",
|
||||
location="EU",
|
||||
carrier="co2"
|
||||
carrier="co2",
|
||||
unit="t_co2"
|
||||
)
|
||||
|
||||
# can also be negative
|
||||
@ -449,7 +476,8 @@ def add_co2_tracking(n, options):
|
||||
n.madd("Bus",
|
||||
spatial.co2.nodes,
|
||||
location=spatial.co2.locations,
|
||||
carrier="co2 stored"
|
||||
carrier="co2 stored",
|
||||
unit="t_co2"
|
||||
)
|
||||
|
||||
n.madd("Store",
|
||||
@ -565,27 +593,6 @@ def average_every_nhours(n, offset):
|
||||
return m
|
||||
|
||||
|
||||
def generate_periodic_profiles(dt_index, nodes, weekly_profile, localize=None):
|
||||
"""
|
||||
Give a 24*7 long list of weekly hourly profiles, generate this for each
|
||||
country for the period dt_index, taking account of time zones and summer time.
|
||||
"""
|
||||
|
||||
weekly_profile = pd.Series(weekly_profile, range(24*7))
|
||||
|
||||
week_df = pd.DataFrame(index=dt_index, columns=nodes)
|
||||
|
||||
for node in nodes:
|
||||
timezone = pytz.timezone(pytz.country_timezones[node[:2]][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)
|
||||
|
||||
week_df = week_df.tz_localize(localize)
|
||||
|
||||
return week_df
|
||||
|
||||
|
||||
def cycling_shift(df, steps=1):
|
||||
"""Cyclic shift on index of pd.Series|pd.DataFrame by number of steps"""
|
||||
df = df.copy()
|
||||
@ -594,179 +601,6 @@ def cycling_shift(df, steps=1):
|
||||
return df
|
||||
|
||||
|
||||
def transport_degree_factor(
|
||||
temperature,
|
||||
deadband_lower=15,
|
||||
deadband_upper=20,
|
||||
lower_degree_factor=0.5,
|
||||
upper_degree_factor=1.6):
|
||||
"""
|
||||
Work out how much energy demand in vehicles increases due to heating and cooling.
|
||||
There is a deadband where there is no increase.
|
||||
Degree factors are % increase in demand compared to no heating/cooling fuel consumption.
|
||||
Returns per unit increase in demand for each place and time
|
||||
"""
|
||||
|
||||
dd = temperature.copy()
|
||||
|
||||
dd[(temperature > deadband_lower) & (temperature < deadband_upper)] = 0.
|
||||
|
||||
dT_lower = deadband_lower - temperature[temperature < deadband_lower]
|
||||
dd[temperature < deadband_lower] = lower_degree_factor / 100 * dT_lower
|
||||
|
||||
dT_upper = temperature[temperature > deadband_upper] - deadband_upper
|
||||
dd[temperature > deadband_upper] = upper_degree_factor / 100 * dT_upper
|
||||
|
||||
return dd
|
||||
|
||||
|
||||
# TODO separate sectors and move into own rules
|
||||
def prepare_data(n):
|
||||
|
||||
|
||||
##############
|
||||
#Heating
|
||||
##############
|
||||
|
||||
|
||||
ashp_cop = xr.open_dataarray(snakemake.input.cop_air_total).to_pandas().reindex(index=n.snapshots)
|
||||
gshp_cop = xr.open_dataarray(snakemake.input.cop_soil_total).to_pandas().reindex(index=n.snapshots)
|
||||
|
||||
solar_thermal = xr.open_dataarray(snakemake.input.solar_thermal_total).to_pandas().reindex(index=n.snapshots)
|
||||
# 1e3 converts from W/m^2 to MW/(1000m^2) = kW/m^2
|
||||
solar_thermal = options['solar_cf_correction'] * solar_thermal / 1e3
|
||||
|
||||
energy_totals = pd.read_csv(snakemake.input.energy_totals_name, index_col=0)
|
||||
|
||||
nodal_energy_totals = energy_totals.loc[pop_layout.ct].fillna(0.)
|
||||
nodal_energy_totals.index = pop_layout.index
|
||||
# district heat share not weighted by population
|
||||
district_heat_share = nodal_energy_totals["district heat share"].round(2)
|
||||
nodal_energy_totals = nodal_energy_totals.multiply(pop_layout.fraction, axis=0)
|
||||
|
||||
# copy forward the daily average heat demand into each hour, so it can be multipled by the intraday profile
|
||||
daily_space_heat_demand = xr.open_dataarray(snakemake.input.heat_demand_total).to_pandas().reindex(index=n.snapshots, method="ffill")
|
||||
|
||||
intraday_profiles = pd.read_csv(snakemake.input.heat_profile, index_col=0)
|
||||
|
||||
sectors = ["residential", "services"]
|
||||
uses = ["water", "space"]
|
||||
|
||||
heat_demand = {}
|
||||
electric_heat_supply = {}
|
||||
for sector, use in product(sectors, uses):
|
||||
weekday = list(intraday_profiles[f"{sector} {use} weekday"])
|
||||
weekend = list(intraday_profiles[f"{sector} {use} weekend"])
|
||||
weekly_profile = weekday * 5 + weekend * 2
|
||||
intraday_year_profile = generate_periodic_profiles(
|
||||
daily_space_heat_demand.index.tz_localize("UTC"),
|
||||
nodes=daily_space_heat_demand.columns,
|
||||
weekly_profile=weekly_profile
|
||||
)
|
||||
|
||||
if use == "space":
|
||||
heat_demand_shape = daily_space_heat_demand * intraday_year_profile
|
||||
else:
|
||||
heat_demand_shape = intraday_year_profile
|
||||
|
||||
heat_demand[f"{sector} {use}"] = (heat_demand_shape/heat_demand_shape.sum()).multiply(nodal_energy_totals[f"total {sector} {use}"]) * 1e6
|
||||
electric_heat_supply[f"{sector} {use}"] = (heat_demand_shape/heat_demand_shape.sum()).multiply(nodal_energy_totals[f"electricity {sector} {use}"]) * 1e6
|
||||
|
||||
heat_demand = pd.concat(heat_demand, axis=1)
|
||||
electric_heat_supply = pd.concat(electric_heat_supply, axis=1)
|
||||
|
||||
# subtract from electricity load since heat demand already in heat_demand
|
||||
electric_nodes = n.loads.index[n.loads.carrier == "electricity"]
|
||||
n.loads_t.p_set[electric_nodes] = n.loads_t.p_set[electric_nodes] - electric_heat_supply.groupby(level=1, axis=1).sum()[electric_nodes]
|
||||
|
||||
##############
|
||||
#Transport
|
||||
##############
|
||||
|
||||
## Get overall demand curve for all vehicles
|
||||
|
||||
traffic = pd.read_csv(snakemake.input.traffic_data_KFZ, skiprows=2, usecols=["count"], squeeze=True)
|
||||
|
||||
#Generate profiles
|
||||
transport_shape = generate_periodic_profiles(
|
||||
dt_index=n.snapshots.tz_localize("UTC"),
|
||||
nodes=pop_layout.index,
|
||||
weekly_profile=traffic.values
|
||||
)
|
||||
transport_shape = transport_shape / transport_shape.sum()
|
||||
|
||||
transport_data = pd.read_csv(snakemake.input.transport_name, index_col=0)
|
||||
|
||||
nodal_transport_data = transport_data.loc[pop_layout.ct].fillna(0.)
|
||||
nodal_transport_data.index = pop_layout.index
|
||||
nodal_transport_data["number cars"] = pop_layout["fraction"] * nodal_transport_data["number cars"]
|
||||
nodal_transport_data.loc[nodal_transport_data["average fuel efficiency"] == 0., "average fuel efficiency"] = transport_data["average fuel efficiency"].mean()
|
||||
|
||||
|
||||
# electric motors are more efficient, so alter transport demand
|
||||
|
||||
plug_to_wheels_eta = options.get("bev_plug_to_wheel_efficiency", 0.2)
|
||||
battery_to_wheels_eta = plug_to_wheels_eta * options.get("bev_charge_efficiency", 0.9)
|
||||
|
||||
efficiency_gain = nodal_transport_data["average fuel efficiency"] / battery_to_wheels_eta
|
||||
|
||||
#get heating demand for correction to demand time series
|
||||
temperature = xr.open_dataarray(snakemake.input.temp_air_total).to_pandas()
|
||||
|
||||
# correction factors for vehicle heating
|
||||
dd_ICE = transport_degree_factor(
|
||||
temperature,
|
||||
options['transport_heating_deadband_lower'],
|
||||
options['transport_heating_deadband_upper'],
|
||||
options['ICE_lower_degree_factor'],
|
||||
options['ICE_upper_degree_factor']
|
||||
)
|
||||
|
||||
dd_EV = transport_degree_factor(
|
||||
temperature,
|
||||
options['transport_heating_deadband_lower'],
|
||||
options['transport_heating_deadband_upper'],
|
||||
options['EV_lower_degree_factor'],
|
||||
options['EV_upper_degree_factor']
|
||||
)
|
||||
|
||||
# divide out the heating/cooling demand from ICE totals
|
||||
# and multiply back in the heating/cooling demand for EVs
|
||||
ice_correction = (transport_shape * (1 + dd_ICE)).sum() / transport_shape.sum()
|
||||
|
||||
energy_totals_transport = nodal_energy_totals["total road"] + nodal_energy_totals["total rail"] - nodal_energy_totals["electricity rail"]
|
||||
|
||||
transport = (transport_shape.multiply(energy_totals_transport) * 1e6 * Nyears).divide(efficiency_gain * ice_correction).multiply(1 + dd_EV)
|
||||
|
||||
## derive plugged-in availability for PKW's (cars)
|
||||
|
||||
traffic = pd.read_csv(snakemake.input.traffic_data_Pkw, skiprows=2, usecols=["count"], squeeze=True)
|
||||
|
||||
avail_max = options.get("bev_avail_max", 0.95)
|
||||
avail_mean = options.get("bev_avail_mean", 0.8)
|
||||
|
||||
avail = avail_max - (avail_max - avail_mean) * (traffic - traffic.min()) / (traffic.mean() - traffic.min())
|
||||
|
||||
avail_profile = generate_periodic_profiles(
|
||||
dt_index=n.snapshots.tz_localize("UTC"),
|
||||
nodes=pop_layout.index,
|
||||
weekly_profile=avail.values
|
||||
)
|
||||
|
||||
dsm_week = np.zeros((24*7,))
|
||||
|
||||
dsm_week[(np.arange(0,7,1) * 24 + options['bev_dsm_restriction_time'])] = options['bev_dsm_restriction_value']
|
||||
|
||||
dsm_profile = generate_periodic_profiles(
|
||||
dt_index=n.snapshots.tz_localize("UTC"),
|
||||
nodes=pop_layout.index,
|
||||
weekly_profile=dsm_week
|
||||
)
|
||||
|
||||
|
||||
return nodal_energy_totals, heat_demand, ashp_cop, gshp_cop, solar_thermal, transport, avail_profile, dsm_profile, nodal_transport_data, district_heat_share
|
||||
|
||||
|
||||
# TODO checkout PyPSA-Eur script
|
||||
def prepare_costs(cost_file, USD_to_EUR, discount_rate, Nyears, lifetime):
|
||||
|
||||
@ -806,10 +640,8 @@ def add_generation(n, costs):
|
||||
|
||||
for generator, carrier in conventionals.items():
|
||||
|
||||
if carrier == 'gas':
|
||||
carrier_nodes = spatial.gas.nodes
|
||||
else:
|
||||
carrier_nodes = ["EU " + carrier]
|
||||
|
||||
carrier_nodes = vars(spatial)[carrier].nodes
|
||||
|
||||
add_carrier_buses(n, carrier, carrier_nodes)
|
||||
|
||||
@ -877,7 +709,8 @@ def insert_electricity_distribution_grid(n, costs):
|
||||
n.madd("Bus",
|
||||
nodes + " low voltage",
|
||||
location=nodes,
|
||||
carrier="low voltage"
|
||||
carrier="low voltage",
|
||||
unit="MWh_el"
|
||||
)
|
||||
|
||||
n.madd("Link",
|
||||
@ -944,7 +777,8 @@ def insert_electricity_distribution_grid(n, costs):
|
||||
n.madd("Bus",
|
||||
nodes + " home battery",
|
||||
location=nodes,
|
||||
carrier="home battery"
|
||||
carrier="home battery",
|
||||
unit="MWh_el"
|
||||
)
|
||||
|
||||
n.madd("Store",
|
||||
@ -1019,7 +853,8 @@ def add_storage_and_grids(n, costs):
|
||||
n.madd("Bus",
|
||||
nodes + " H2",
|
||||
location=nodes,
|
||||
carrier="H2"
|
||||
carrier="H2",
|
||||
unit="MWh_LHV"
|
||||
)
|
||||
|
||||
n.madd("Link",
|
||||
@ -1045,18 +880,20 @@ def add_storage_and_grids(n, costs):
|
||||
)
|
||||
|
||||
cavern_types = snakemake.config["sector"]["hydrogen_underground_storage_locations"]
|
||||
h2_caverns = pd.read_csv(snakemake.input.h2_cavern, index_col=0)[cavern_types].sum(axis=1)
|
||||
h2_caverns = pd.read_csv(snakemake.input.h2_cavern, index_col=0)
|
||||
|
||||
# only use sites with at least 2 TWh potential
|
||||
h2_caverns = h2_caverns[h2_caverns > 2]
|
||||
|
||||
# convert TWh to MWh
|
||||
h2_caverns = h2_caverns * 1e6
|
||||
if not h2_caverns.empty and options['hydrogen_underground_storage']:
|
||||
|
||||
# clip at 1000 TWh for one location
|
||||
h2_caverns.clip(upper=1e9, inplace=True)
|
||||
h2_caverns = h2_caverns[cavern_types].sum(axis=1)
|
||||
|
||||
if options['hydrogen_underground_storage']:
|
||||
# only use sites with at least 2 TWh potential
|
||||
h2_caverns = h2_caverns[h2_caverns > 2]
|
||||
|
||||
# convert TWh to MWh
|
||||
h2_caverns = h2_caverns * 1e6
|
||||
|
||||
# clip at 1000 TWh for one location
|
||||
h2_caverns.clip(upper=1e9, inplace=True)
|
||||
|
||||
logger.info("Add hydrogen underground storage")
|
||||
|
||||
@ -1069,7 +906,8 @@ def add_storage_and_grids(n, costs):
|
||||
e_nom_max=h2_caverns.values,
|
||||
e_cyclic=True,
|
||||
carrier="H2 Store",
|
||||
capital_cost=h2_capital_cost
|
||||
capital_cost=h2_capital_cost,
|
||||
lifetime=costs.at["hydrogen storage underground", "lifetime"]
|
||||
)
|
||||
|
||||
# hydrogen stored overground (where not already underground)
|
||||
@ -1119,7 +957,7 @@ def add_storage_and_grids(n, costs):
|
||||
carrier="gas pipeline",
|
||||
lifetime=costs.at['CH4 (g) pipeline', 'lifetime']
|
||||
)
|
||||
|
||||
|
||||
# remove fossil generators where there is neither
|
||||
# production, LNG terminal, nor entry-point beyond system scope
|
||||
|
||||
@ -1154,24 +992,27 @@ def add_storage_and_grids(n, costs):
|
||||
|
||||
# apply k_edge_augmentation weighted by length of complement edges
|
||||
k_edge = options.get("gas_network_connectivity_upgrade", 3)
|
||||
augmentation = k_edge_augmentation(G, k_edge, avail=complement_edges.values)
|
||||
new_gas_pipes = pd.DataFrame(augmentation, columns=["bus0", "bus1"])
|
||||
new_gas_pipes["length"] = new_gas_pipes.apply(haversine, axis=1)
|
||||
augmentation = list(k_edge_augmentation(G, k_edge, avail=complement_edges.values))
|
||||
|
||||
new_gas_pipes.index = new_gas_pipes.apply(
|
||||
lambda x: f"gas pipeline new {x.bus0} <-> {x.bus1}", axis=1)
|
||||
if augmentation:
|
||||
|
||||
n.madd("Link",
|
||||
new_gas_pipes.index,
|
||||
bus0=new_gas_pipes.bus0 + " gas",
|
||||
bus1=new_gas_pipes.bus1 + " gas",
|
||||
p_min_pu=-1, # new gas pipes are bidirectional
|
||||
p_nom_extendable=True,
|
||||
length=new_gas_pipes.length,
|
||||
capital_cost=new_gas_pipes.length * costs.at['CH4 (g) pipeline', 'fixed'],
|
||||
carrier="gas pipeline new",
|
||||
lifetime=costs.at['CH4 (g) pipeline', 'lifetime']
|
||||
)
|
||||
new_gas_pipes = pd.DataFrame(augmentation, columns=["bus0", "bus1"])
|
||||
new_gas_pipes["length"] = new_gas_pipes.apply(haversine, axis=1)
|
||||
|
||||
new_gas_pipes.index = new_gas_pipes.apply(
|
||||
lambda x: f"gas pipeline new {x.bus0} <-> {x.bus1}", axis=1)
|
||||
|
||||
n.madd("Link",
|
||||
new_gas_pipes.index,
|
||||
bus0=new_gas_pipes.bus0 + " gas",
|
||||
bus1=new_gas_pipes.bus1 + " gas",
|
||||
p_min_pu=-1, # new gas pipes are bidirectional
|
||||
p_nom_extendable=True,
|
||||
length=new_gas_pipes.length,
|
||||
capital_cost=new_gas_pipes.length * costs.at['CH4 (g) pipeline', 'fixed'],
|
||||
carrier="gas pipeline new",
|
||||
lifetime=costs.at['CH4 (g) pipeline', 'lifetime']
|
||||
)
|
||||
|
||||
if options["H2_retrofit"]:
|
||||
|
||||
@ -1219,7 +1060,8 @@ def add_storage_and_grids(n, costs):
|
||||
n.madd("Bus",
|
||||
nodes + " battery",
|
||||
location=nodes,
|
||||
carrier="battery"
|
||||
carrier="battery",
|
||||
unit="MWh_el"
|
||||
)
|
||||
|
||||
n.madd("Store",
|
||||
@ -1286,6 +1128,24 @@ def add_storage_and_grids(n, costs):
|
||||
lifetime=costs.at['helmeth', 'lifetime']
|
||||
)
|
||||
|
||||
if options.get('coal_cc'):
|
||||
|
||||
n.madd("Link",
|
||||
spatial.nodes,
|
||||
suffix=" coal CC",
|
||||
bus0=spatial.coal.nodes,
|
||||
bus1=spatial.nodes,
|
||||
bus2="co2 atmosphere",
|
||||
bus3="co2 stored",
|
||||
marginal_cost=costs.at['coal', 'efficiency'] * costs.at['coal', 'VOM'], #NB: VOM is per MWel
|
||||
capital_cost=costs.at['coal', 'efficiency'] * costs.at['coal', 'fixed'] + costs.at['biomass CHP capture', 'fixed'] * costs.at['coal', 'CO2 intensity'], #NB: fixed cost is per MWel
|
||||
p_nom_extendable=True,
|
||||
carrier="coal",
|
||||
efficiency=costs.at['coal', 'efficiency'],
|
||||
efficiency2=costs.at['coal', 'CO2 intensity'] * (1 - costs.at['biomass CHP capture','capture_rate']),
|
||||
efficiency3=costs.at['coal', 'CO2 intensity'] * costs.at['biomass CHP capture','capture_rate'],
|
||||
lifetime=costs.at['coal','lifetime']
|
||||
)
|
||||
|
||||
if options['SMR']:
|
||||
|
||||
@ -1324,6 +1184,11 @@ def add_land_transport(n, costs):
|
||||
|
||||
logger.info("Add land transport")
|
||||
|
||||
transport = pd.read_csv(snakemake.input.transport_demand, index_col=0, parse_dates=True)
|
||||
number_cars = pd.read_csv(snakemake.input.transport_data, index_col=0)["number cars"]
|
||||
avail_profile = pd.read_csv(snakemake.input.avail_profile, index_col=0, parse_dates=True)
|
||||
dsm_profile = pd.read_csv(snakemake.input.dsm_profile, index_col=0, parse_dates=True)
|
||||
|
||||
fuel_cell_share = get(options["land_transport_fuel_cell_share"], investment_year)
|
||||
electric_share = get(options["land_transport_electric_share"], investment_year)
|
||||
ice_share = 1 - fuel_cell_share - electric_share
|
||||
@ -1344,7 +1209,8 @@ def add_land_transport(n, costs):
|
||||
nodes,
|
||||
location=nodes,
|
||||
suffix=" EV battery",
|
||||
carrier="Li ion"
|
||||
carrier="Li ion",
|
||||
unit="MWh_el"
|
||||
)
|
||||
|
||||
p_set = electric_share * (transport[nodes] + cycling_shift(transport[nodes], 1) + cycling_shift(transport[nodes], 2)) / 3
|
||||
@ -1357,8 +1223,7 @@ def add_land_transport(n, costs):
|
||||
p_set=p_set
|
||||
)
|
||||
|
||||
|
||||
p_nom = nodal_transport_data["number cars"] * options.get("bev_charge_rate", 0.011) * electric_share
|
||||
p_nom = number_cars * options.get("bev_charge_rate", 0.011) * electric_share
|
||||
|
||||
n.madd("Link",
|
||||
nodes,
|
||||
@ -1390,7 +1255,7 @@ def add_land_transport(n, costs):
|
||||
|
||||
if electric_share > 0 and options["bev_dsm"]:
|
||||
|
||||
e_nom = nodal_transport_data["number cars"] * options.get("bev_energy", 0.05) * options["bev_availability"] * electric_share
|
||||
e_nom = number_cars * options.get("bev_energy", 0.05) * options["bev_availability"] * electric_share
|
||||
|
||||
n.madd("Store",
|
||||
nodes,
|
||||
@ -1415,11 +1280,12 @@ def add_land_transport(n, costs):
|
||||
|
||||
if ice_share > 0:
|
||||
|
||||
if "EU oil" not in n.buses.index:
|
||||
n.add("Bus",
|
||||
"EU oil",
|
||||
location="EU",
|
||||
carrier="oil"
|
||||
if "oil" not in n.buses.carrier.unique():
|
||||
n.madd("Bus",
|
||||
spatial.oil.nodes,
|
||||
location=spatial.oil.locations,
|
||||
carrier="oil",
|
||||
unit="MWh_LHV"
|
||||
)
|
||||
|
||||
ice_efficiency = options['transport_internal_combustion_efficiency']
|
||||
@ -1427,7 +1293,7 @@ def add_land_transport(n, costs):
|
||||
n.madd("Load",
|
||||
nodes,
|
||||
suffix=" land transport oil",
|
||||
bus="EU oil",
|
||||
bus=spatial.oil.nodes,
|
||||
carrier="land transport oil",
|
||||
p_set=ice_share / ice_efficiency * transport[nodes]
|
||||
)
|
||||
@ -1442,12 +1308,53 @@ def add_land_transport(n, costs):
|
||||
)
|
||||
|
||||
|
||||
def build_heat_demand(n):
|
||||
|
||||
# copy forward the daily average heat demand into each hour, so it can be multipled by the intraday profile
|
||||
daily_space_heat_demand = xr.open_dataarray(snakemake.input.heat_demand_total).to_pandas().reindex(index=n.snapshots, method="ffill")
|
||||
|
||||
intraday_profiles = pd.read_csv(snakemake.input.heat_profile, index_col=0)
|
||||
|
||||
sectors = ["residential", "services"]
|
||||
uses = ["water", "space"]
|
||||
|
||||
heat_demand = {}
|
||||
electric_heat_supply = {}
|
||||
for sector, use in product(sectors, uses):
|
||||
weekday = list(intraday_profiles[f"{sector} {use} weekday"])
|
||||
weekend = list(intraday_profiles[f"{sector} {use} weekend"])
|
||||
weekly_profile = weekday * 5 + weekend * 2
|
||||
intraday_year_profile = generate_periodic_profiles(
|
||||
daily_space_heat_demand.index.tz_localize("UTC"),
|
||||
nodes=daily_space_heat_demand.columns,
|
||||
weekly_profile=weekly_profile
|
||||
)
|
||||
|
||||
if use == "space":
|
||||
heat_demand_shape = daily_space_heat_demand * intraday_year_profile
|
||||
else:
|
||||
heat_demand_shape = intraday_year_profile
|
||||
|
||||
heat_demand[f"{sector} {use}"] = (heat_demand_shape/heat_demand_shape.sum()).multiply(pop_weighted_energy_totals[f"total {sector} {use}"]) * 1e6
|
||||
electric_heat_supply[f"{sector} {use}"] = (heat_demand_shape/heat_demand_shape.sum()).multiply(pop_weighted_energy_totals[f"electricity {sector} {use}"]) * 1e6
|
||||
|
||||
heat_demand = pd.concat(heat_demand, axis=1)
|
||||
electric_heat_supply = pd.concat(electric_heat_supply, axis=1)
|
||||
|
||||
# subtract from electricity load since heat demand already in heat_demand
|
||||
electric_nodes = n.loads.index[n.loads.carrier == "electricity"]
|
||||
n.loads_t.p_set[electric_nodes] = n.loads_t.p_set[electric_nodes] - electric_heat_supply.groupby(level=1, axis=1).sum()[electric_nodes]
|
||||
|
||||
return heat_demand
|
||||
|
||||
|
||||
def add_heat(n, costs):
|
||||
|
||||
logger.info("Add heat sector")
|
||||
|
||||
sectors = ["residential", "services"]
|
||||
|
||||
heat_demand = build_heat_demand(n)
|
||||
|
||||
nodes, dist_fraction, urban_fraction = create_nodes_for_heat_sector()
|
||||
|
||||
@ -1468,6 +1375,15 @@ def add_heat(n, costs):
|
||||
"urban central"
|
||||
]
|
||||
|
||||
cop = {
|
||||
"air": xr.open_dataarray(snakemake.input.cop_air_total).to_pandas().reindex(index=n.snapshots),
|
||||
"ground": xr.open_dataarray(snakemake.input.cop_soil_total).to_pandas().reindex(index=n.snapshots)
|
||||
}
|
||||
|
||||
solar_thermal = xr.open_dataarray(snakemake.input.solar_thermal_total).to_pandas().reindex(index=n.snapshots)
|
||||
# 1e3 converts from W/m^2 to MW/(1000m^2) = kW/m^2
|
||||
solar_thermal = options['solar_cf_correction'] * solar_thermal / 1e3
|
||||
|
||||
for name in heat_systems:
|
||||
|
||||
name_type = "central" if name == "urban central" else "decentral"
|
||||
@ -1477,7 +1393,8 @@ def add_heat(n, costs):
|
||||
n.madd("Bus",
|
||||
nodes[name] + f" {name} heat",
|
||||
location=nodes[name],
|
||||
carrier=name + " heat"
|
||||
carrier=name + " heat",
|
||||
unit="MWh_th"
|
||||
)
|
||||
|
||||
## Add heat load
|
||||
@ -1513,7 +1430,6 @@ def add_heat(n, costs):
|
||||
heat_pump_type = "air" if "urban" in name else "ground"
|
||||
|
||||
costs_name = f"{name_type} {heat_pump_type}-sourced heat pump"
|
||||
cop = {"air" : ashp_cop, "ground" : gshp_cop}
|
||||
efficiency = cop[heat_pump_type][nodes[name]] if options["time_dep_hp_cop"] else costs.at[costs_name, 'efficiency']
|
||||
|
||||
n.madd("Link",
|
||||
@ -1535,7 +1451,8 @@ def add_heat(n, costs):
|
||||
n.madd("Bus",
|
||||
nodes[name] + f" {name} water tanks",
|
||||
location=nodes[name],
|
||||
carrier=name + " water tanks"
|
||||
carrier=name + " water tanks",
|
||||
unit="MWh_th"
|
||||
)
|
||||
|
||||
n.madd("Link",
|
||||
@ -1792,6 +1709,8 @@ def create_nodes_for_heat_sector():
|
||||
nodes[sector + " rural"] = pop_layout.index
|
||||
nodes[sector + " urban decentral"] = pop_layout.index
|
||||
|
||||
district_heat_share = pop_weighted_energy_totals["district heat share"]
|
||||
|
||||
# maximum potential of urban demand covered by district heating
|
||||
central_fraction = options['district_heating']["potential"]
|
||||
# district heating share at each node
|
||||
@ -1838,13 +1757,15 @@ def add_biomass(n, costs):
|
||||
n.madd("Bus",
|
||||
spatial.gas.biogas,
|
||||
location=spatial.gas.locations,
|
||||
carrier="biogas"
|
||||
carrier="biogas",
|
||||
unit="MWh_LHV"
|
||||
)
|
||||
|
||||
n.madd("Bus",
|
||||
spatial.biomass.nodes,
|
||||
location=spatial.biomass.locations,
|
||||
carrier="solid biomass"
|
||||
carrier="solid biomass",
|
||||
unit="MWh_LHV"
|
||||
)
|
||||
|
||||
n.madd("Store",
|
||||
@ -1882,8 +1803,7 @@ def add_biomass(n, costs):
|
||||
transport_costs = pd.read_csv(
|
||||
snakemake.input.biomass_transport_costs,
|
||||
index_col=0,
|
||||
squeeze=True
|
||||
)
|
||||
).squeeze()
|
||||
|
||||
# add biomass transport
|
||||
biomass_transport = create_network_topology(n, "biomass transport ", bidirectional=False)
|
||||
@ -1956,7 +1876,8 @@ def add_industry(n, costs):
|
||||
n.madd("Bus",
|
||||
spatial.biomass.industry,
|
||||
location=spatial.biomass.locations,
|
||||
carrier="solid biomass for industry"
|
||||
carrier="solid biomass for industry",
|
||||
unit="MWh_LHV"
|
||||
)
|
||||
|
||||
if options["biomass_transport"]:
|
||||
@ -1998,7 +1919,8 @@ def add_industry(n, costs):
|
||||
n.madd("Bus",
|
||||
spatial.gas.industry,
|
||||
location=spatial.gas.locations,
|
||||
carrier="gas for industry")
|
||||
carrier="gas for industry",
|
||||
unit="MWh_LHV")
|
||||
|
||||
gas_demand = industrial_demand.loc[nodes, "methane"] / 8760.
|
||||
|
||||
@ -2054,7 +1976,8 @@ def add_industry(n, costs):
|
||||
nodes,
|
||||
suffix=" H2 liquid",
|
||||
carrier="H2 liquid",
|
||||
location=nodes
|
||||
location=nodes,
|
||||
unit="MWh_LHV"
|
||||
)
|
||||
|
||||
n.madd("Link",
|
||||
@ -2075,7 +1998,7 @@ def add_industry(n, costs):
|
||||
all_navigation = ["total international navigation", "total domestic navigation"]
|
||||
efficiency = options['shipping_average_efficiency'] / costs.at["fuel cell", "efficiency"]
|
||||
shipping_hydrogen_share = get(options['shipping_hydrogen_share'], investment_year)
|
||||
p_set = shipping_hydrogen_share * nodal_energy_totals.loc[nodes, all_navigation].sum(axis=1) * 1e6 * efficiency / 8760
|
||||
p_set = shipping_hydrogen_share * pop_weighted_energy_totals.loc[nodes, all_navigation].sum(axis=1) * 1e6 * efficiency / 8760
|
||||
|
||||
n.madd("Load",
|
||||
nodes,
|
||||
@ -2089,17 +2012,17 @@ def add_industry(n, costs):
|
||||
|
||||
shipping_oil_share = 1 - shipping_hydrogen_share
|
||||
|
||||
p_set = shipping_oil_share * nodal_energy_totals.loc[nodes, all_navigation].sum(axis=1) * 1e6 / 8760.
|
||||
p_set = shipping_oil_share * pop_weighted_energy_totals.loc[nodes, all_navigation].sum(axis=1) * 1e6 / 8760.
|
||||
|
||||
n.madd("Load",
|
||||
nodes,
|
||||
suffix=" shipping oil",
|
||||
bus="EU oil",
|
||||
bus=spatial.oil.nodes,
|
||||
carrier="shipping oil",
|
||||
p_set=p_set
|
||||
)
|
||||
|
||||
co2 = shipping_oil_share * nodal_energy_totals.loc[nodes, all_navigation].sum().sum() * 1e6 / 8760 * costs.at["oil", "CO2 intensity"]
|
||||
co2 = shipping_oil_share * pop_weighted_energy_totals.loc[nodes, all_navigation].sum().sum() * 1e6 / 8760 * costs.at["oil", "CO2 intensity"]
|
||||
|
||||
n.add("Load",
|
||||
"shipping oil emissions",
|
||||
@ -2108,30 +2031,30 @@ def add_industry(n, costs):
|
||||
p_set=-co2
|
||||
)
|
||||
|
||||
if "EU oil" not in n.buses.index:
|
||||
|
||||
n.add("Bus",
|
||||
"EU oil",
|
||||
location="EU",
|
||||
carrier="oil"
|
||||
if "oil" not in n.buses.carrier.unique():
|
||||
n.madd("Bus",
|
||||
spatial.oil.nodes,
|
||||
location=spatial.oil.locations,
|
||||
carrier="oil",
|
||||
unit="MWh_LHV"
|
||||
)
|
||||
|
||||
if "EU oil Store" not in n.stores.index:
|
||||
if "oil" not in n.stores.carrier.unique():
|
||||
|
||||
#could correct to e.g. 0.001 EUR/kWh * annuity and O&M
|
||||
n.add("Store",
|
||||
"EU oil Store",
|
||||
bus="EU oil",
|
||||
n.madd("Store",
|
||||
[oil_bus + " Store" for oil_bus in spatial.oil.nodes],
|
||||
bus=spatial.oil.nodes,
|
||||
e_nom_extendable=True,
|
||||
e_cyclic=True,
|
||||
carrier="oil",
|
||||
)
|
||||
|
||||
if "EU oil" not in n.generators.index:
|
||||
if "oil" not in n.generators.carrier.unique():
|
||||
|
||||
n.add("Generator",
|
||||
"EU oil",
|
||||
bus="EU oil",
|
||||
n.madd("Generator",
|
||||
spatial.oil.nodes,
|
||||
bus=spatial.oil.nodes,
|
||||
p_nom_extendable=True,
|
||||
carrier="oil",
|
||||
marginal_cost=costs.at["oil", 'fuel']
|
||||
@ -2146,7 +2069,7 @@ def add_industry(n, costs):
|
||||
n.madd("Link",
|
||||
nodes_heat[name] + f" {name} oil boiler",
|
||||
p_nom_extendable=True,
|
||||
bus0="EU oil",
|
||||
bus0=spatial.oil.nodes,
|
||||
bus1=nodes_heat[name] + f" {name} heat",
|
||||
bus2="co2 atmosphere",
|
||||
carrier=f"{name} oil boiler",
|
||||
@ -2159,7 +2082,7 @@ def add_industry(n, costs):
|
||||
n.madd("Link",
|
||||
nodes + " Fischer-Tropsch",
|
||||
bus0=nodes + " H2",
|
||||
bus1="EU oil",
|
||||
bus1=spatial.oil.nodes,
|
||||
bus2=spatial.co2.nodes,
|
||||
carrier="Fischer-Tropsch",
|
||||
efficiency=costs.at["Fischer-Tropsch", 'efficiency'],
|
||||
@ -2169,19 +2092,19 @@ def add_industry(n, costs):
|
||||
lifetime=costs.at['Fischer-Tropsch', 'lifetime']
|
||||
)
|
||||
|
||||
n.add("Load",
|
||||
"naphtha for industry",
|
||||
bus="EU oil",
|
||||
n.madd("Load",
|
||||
["naphtha for industry"],
|
||||
bus=spatial.oil.nodes,
|
||||
carrier="naphtha for industry",
|
||||
p_set=industrial_demand.loc[nodes, "naphtha"].sum() / 8760
|
||||
)
|
||||
|
||||
all_aviation = ["total international aviation", "total domestic aviation"]
|
||||
p_set = nodal_energy_totals.loc[nodes, all_aviation].sum(axis=1).sum() * 1e6 / 8760
|
||||
p_set = pop_weighted_energy_totals.loc[nodes, all_aviation].sum(axis=1).sum() * 1e6 / 8760
|
||||
|
||||
n.add("Load",
|
||||
"kerosene for aviation",
|
||||
bus="EU oil",
|
||||
n.madd("Load",
|
||||
["kerosene for aviation"],
|
||||
bus=spatial.oil.nodes,
|
||||
carrier="kerosene for aviation",
|
||||
p_set=p_set
|
||||
)
|
||||
@ -2227,7 +2150,8 @@ def add_industry(n, costs):
|
||||
n.add("Bus",
|
||||
"process emissions",
|
||||
location="EU",
|
||||
carrier="process emissions"
|
||||
carrier="process emissions",
|
||||
unit="t_co2"
|
||||
)
|
||||
|
||||
# this should be process emissions fossil+feedstock
|
||||
@ -2297,7 +2221,7 @@ def add_agriculture(n, costs):
|
||||
suffix=" agriculture electricity",
|
||||
bus=nodes,
|
||||
carrier='agriculture electricity',
|
||||
p_set=nodal_energy_totals.loc[nodes, "total agriculture electricity"] * 1e6 / 8760
|
||||
p_set=pop_weighted_energy_totals.loc[nodes, "total agriculture electricity"] * 1e6 / 8760
|
||||
)
|
||||
|
||||
# heat
|
||||
@ -2307,7 +2231,7 @@ def add_agriculture(n, costs):
|
||||
suffix=" agriculture heat",
|
||||
bus=nodes + " services rural heat",
|
||||
carrier="agriculture heat",
|
||||
p_set=nodal_energy_totals.loc[nodes, "total agriculture heat"] * 1e6 / 8760
|
||||
p_set=pop_weighted_energy_totals.loc[nodes, "total agriculture heat"] * 1e6 / 8760
|
||||
)
|
||||
|
||||
# machinery
|
||||
@ -2316,7 +2240,7 @@ def add_agriculture(n, costs):
|
||||
assert electric_share <= 1.
|
||||
ice_share = 1 - electric_share
|
||||
|
||||
machinery_nodal_energy = nodal_energy_totals.loc[nodes, "total agriculture machinery"]
|
||||
machinery_nodal_energy = pop_weighted_energy_totals.loc[nodes, "total agriculture machinery"]
|
||||
|
||||
if electric_share > 0:
|
||||
|
||||
@ -2332,9 +2256,9 @@ def add_agriculture(n, costs):
|
||||
|
||||
if ice_share > 0:
|
||||
|
||||
n.add("Load",
|
||||
"agriculture machinery oil",
|
||||
bus="EU oil",
|
||||
n.madd("Load",
|
||||
["agriculture machinery oil"],
|
||||
bus=spatial.oil.nodes,
|
||||
carrier="agriculture machinery oil",
|
||||
p_set=ice_share * machinery_nodal_energy.sum() * 1e6 / 8760
|
||||
)
|
||||
@ -2357,7 +2281,7 @@ def decentral(n):
|
||||
|
||||
def remove_h2_network(n):
|
||||
|
||||
n.links.drop(n.links.index[n.links.carrier == "H2 pipeline"], inplace=True)
|
||||
n.links.drop(n.links.index[n.links.carrier.str.contains("H2 pipeline")], inplace=True)
|
||||
|
||||
if "EU H2 Store" in n.stores.index:
|
||||
n.stores.drop("EU H2 Store", inplace=True)
|
||||
@ -2411,7 +2335,7 @@ if __name__ == "__main__":
|
||||
simpl='',
|
||||
opts="",
|
||||
clusters="37",
|
||||
lv=1.0,
|
||||
lv=1.5,
|
||||
sector_opts='Co2L0-168H-T-H-B-I-solar3-dist1',
|
||||
planning_horizons="2020",
|
||||
)
|
||||
@ -2436,9 +2360,11 @@ if __name__ == "__main__":
|
||||
Nyears,
|
||||
snakemake.config['costs']['lifetime'])
|
||||
|
||||
pop_weighted_energy_totals = pd.read_csv(snakemake.input.pop_weighted_energy_totals, index_col=0)
|
||||
|
||||
patch_electricity_network(n)
|
||||
|
||||
define_spatial(pop_layout.index)
|
||||
spatial = define_spatial(pop_layout.index, options)
|
||||
|
||||
if snakemake.config["foresight"] == 'myopic':
|
||||
|
||||
@ -2466,8 +2392,6 @@ if __name__ == "__main__":
|
||||
if o == "biomasstransport":
|
||||
options["biomass_transport"] = True
|
||||
|
||||
nodal_energy_totals, heat_demand, ashp_cop, gshp_cop, solar_thermal, transport, avail_profile, dsm_profile, nodal_transport_data, district_heat_share = prepare_data(n)
|
||||
|
||||
if "nodistrict" in opts:
|
||||
options["district_heating"]["progress"] = 0.0
|
||||
|
||||
@ -2515,7 +2439,7 @@ if __name__ == "__main__":
|
||||
fn = snakemake.config['results_dir'] + snakemake.config['run'] + '/csvs/carbon_budget_distribution.csv'
|
||||
if not os.path.exists(fn):
|
||||
build_carbon_budget(o, fn)
|
||||
co2_cap = pd.read_csv(fn, index_col=0, squeeze=True)
|
||||
co2_cap = pd.read_csv(fn, index_col=0).squeeze()
|
||||
limit = co2_cap[investment_year]
|
||||
break
|
||||
for o in opts:
|
||||
|
@ -19,7 +19,7 @@ from _helpers import progress_retrieve, configure_logging
|
||||
if __name__ == "__main__":
|
||||
configure_logging(snakemake)
|
||||
|
||||
url = "https://zenodo.org/record/5546517/files/pypsa-eur-sec-data-bundle.tar.gz"
|
||||
url = "https://zenodo.org/record/5824485/files/pypsa-eur-sec-data-bundle.tar.gz"
|
||||
|
||||
tarball_fn = Path("sector-bundle.tar.gz")
|
||||
to_fn = Path("data")
|
||||
|
@ -33,14 +33,14 @@ def _add_land_use_constraint(n):
|
||||
existing = n.generators.loc[n.generators.carrier==carrier,"p_nom"].groupby(n.generators.bus.map(n.buses.location)).sum()
|
||||
existing.index += " " + carrier + "-" + snakemake.wildcards.planning_horizons
|
||||
n.generators.loc[existing.index,"p_nom_max"] -= existing
|
||||
|
||||
|
||||
n.generators.p_nom_max.clip(lower=0, inplace=True)
|
||||
|
||||
|
||||
def _add_land_use_constraint_m(n):
|
||||
# if generators clustering is lower than network clustering, land_use accounting is at generators clusters
|
||||
|
||||
planning_horizons = snakemake.config["scenario"]["planning_horizons"]
|
||||
planning_horizons = snakemake.config["scenario"]["planning_horizons"]
|
||||
grouping_years = snakemake.config["existing_capacities"]["grouping_years"]
|
||||
current_horizon = snakemake.wildcards.planning_horizons
|
||||
|
||||
@ -48,9 +48,9 @@ def _add_land_use_constraint_m(n):
|
||||
|
||||
existing = n.generators.loc[n.generators.carrier==carrier,"p_nom"]
|
||||
ind = list(set([i.split(sep=" ")[0] + ' ' + i.split(sep=" ")[1] for i in existing.index]))
|
||||
|
||||
|
||||
previous_years = [
|
||||
str(y) for y in
|
||||
str(y) for y in
|
||||
planning_horizons + grouping_years
|
||||
if y < int(snakemake.wildcards.planning_horizons)
|
||||
]
|
||||
@ -59,13 +59,13 @@ def _add_land_use_constraint_m(n):
|
||||
ind2 = [i for i in ind if i + " " + carrier + "-" + p_year in existing.index]
|
||||
sel_current = [i + " " + carrier + "-" + current_horizon for i in ind2]
|
||||
sel_p_year = [i + " " + carrier + "-" + p_year for i in ind2]
|
||||
n.generators.loc[sel_current, "p_nom_max"] -= existing.loc[sel_p_year].rename(lambda x: x[:-4] + current_horizon)
|
||||
|
||||
n.generators.loc[sel_current, "p_nom_max"] -= existing.loc[sel_p_year].rename(lambda x: x[:-4] + current_horizon)
|
||||
|
||||
n.generators.p_nom_max.clip(lower=0, inplace=True)
|
||||
|
||||
|
||||
def prepare_network(n, solve_opts=None):
|
||||
|
||||
|
||||
if 'clip_p_max_pu' in solve_opts:
|
||||
for df in (n.generators_t.p_max_pu, n.generators_t.p_min_pu, n.storage_units_t.inflow):
|
||||
df.where(df>solve_opts['clip_p_max_pu'], other=0., inplace=True)
|
||||
@ -185,40 +185,43 @@ def add_chp_constraints(n):
|
||||
|
||||
define_constraints(n, lhs, "<=", 0, 'chplink', 'backpressure')
|
||||
|
||||
def basename(x):
|
||||
return x.split("-2")[0]
|
||||
|
||||
def add_pipe_retrofit_constraint(n):
|
||||
"""Add constraint for retrofitting existing CH4 pipelines to H2 pipelines."""
|
||||
|
||||
gas_pipes_i = n.links[n.links.carrier=="gas pipeline"].index
|
||||
h2_retrofitted_i = n.links[n.links.carrier=='H2 pipeline retrofitted'].index
|
||||
gas_pipes_i = n.links.query("carrier == 'gas pipeline' and p_nom_extendable").index
|
||||
h2_retrofitted_i = n.links.query("carrier == 'H2 pipeline retrofitted' and p_nom_extendable").index
|
||||
|
||||
if h2_retrofitted_i.empty or gas_pipes_i.empty: return
|
||||
|
||||
link_p_nom = get_var(n, "Link", "p_nom")
|
||||
|
||||
pipe_capacity = n.links.loc[gas_pipes_i, 'p_nom']
|
||||
|
||||
CH4_per_H2 = 1 / n.config["sector"]["H2_retrofit_capacity_per_CH4"]
|
||||
|
||||
fr = "H2 pipeline retrofitted"
|
||||
to = "gas pipeline"
|
||||
|
||||
pipe_capacity = n.links.loc[gas_pipes_i, 'p_nom'].rename(basename)
|
||||
|
||||
lhs = linexpr(
|
||||
(CH4_per_H2, link_p_nom.loc[h2_retrofitted_i].rename(index=lambda x: x.replace(fr, to))),
|
||||
(1, link_p_nom.loc[gas_pipes_i])
|
||||
)
|
||||
|
||||
lhs.rename(basename, inplace=True)
|
||||
define_constraints(n, lhs, "=", pipe_capacity, 'Link', 'pipe_retrofit')
|
||||
|
||||
|
||||
def add_co2_sequestration_limit(n, sns):
|
||||
|
||||
|
||||
co2_stores = n.stores.loc[n.stores.carrier=='co2 stored'].index
|
||||
|
||||
if co2_stores.empty or ('Store', 'e') not in n.variables.index:
|
||||
return
|
||||
|
||||
|
||||
vars_final_co2_stored = get_var(n, 'Store', 'e').loc[sns[-1], co2_stores]
|
||||
|
||||
|
||||
lhs = linexpr((1, vars_final_co2_stored)).sum()
|
||||
|
||||
limit = n.config["sector"].get("co2_sequestration_potential", 200) * 1e6
|
||||
@ -226,7 +229,7 @@ def add_co2_sequestration_limit(n, sns):
|
||||
if not "seq" in o: continue
|
||||
limit = float(o[o.find("seq")+3:])
|
||||
break
|
||||
|
||||
|
||||
name = 'co2_sequestration_limit'
|
||||
sense = "<="
|
||||
|
||||
@ -258,7 +261,7 @@ def solve_network(n, config, opts='', **kwargs):
|
||||
|
||||
if cf_solving.get('skip_iterations', False):
|
||||
network_lopf(n, solver_name=solver_name, solver_options=solver_options,
|
||||
extra_functionality=extra_functionality,
|
||||
extra_functionality=extra_functionality,
|
||||
keep_shadowprices=keep_shadowprices, **kwargs)
|
||||
else:
|
||||
ilopf(n, solver_name=solver_name, solver_options=solver_options,
|
||||
@ -277,10 +280,11 @@ if __name__ == "__main__":
|
||||
snakemake = mock_snakemake(
|
||||
'solve_network',
|
||||
simpl='',
|
||||
clusters=48,
|
||||
opts="",
|
||||
clusters="37",
|
||||
lv=1.0,
|
||||
sector_opts='Co2L0-168H-T-H-B-I-solar3-dist1',
|
||||
planning_horizons=2050,
|
||||
sector_opts='168H-T-H-B-I-A-solar+p3-dist1',
|
||||
planning_horizons="2030",
|
||||
)
|
||||
|
||||
logging.basicConfig(filename=snakemake.log.python,
|
||||
@ -288,6 +292,7 @@ if __name__ == "__main__":
|
||||
|
||||
tmpdir = snakemake.config['solving'].get('tmpdir')
|
||||
if tmpdir is not None:
|
||||
from pathlib import Path
|
||||
Path(tmpdir).mkdir(parents=True, exist_ok=True)
|
||||
opts = snakemake.wildcards.opts.split('-')
|
||||
solve_opts = snakemake.config['solving']['options']
|
||||
|
607
test/config.myopic.yaml
Normal file
607
test/config.myopic.yaml
Normal file
@ -0,0 +1,607 @@
|
||||
version: 0.6.0
|
||||
|
||||
logging_level: INFO
|
||||
|
||||
retrieve_sector_databundle: true
|
||||
|
||||
results_dir: results/
|
||||
summary_dir: results
|
||||
costs_dir: ../technology-data/outputs/
|
||||
run: test-myopic # use this to keep track of runs with different settings
|
||||
foresight: myopic # options are overnight, myopic, perfect (perfect is not yet implemented)
|
||||
# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below
|
||||
|
||||
scenario:
|
||||
simpl: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt"
|
||||
- 1.5
|
||||
clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred
|
||||
- 5
|
||||
opts: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
sector_opts: # this is where the main scenario settings are
|
||||
- 191H-T-H-B-I-A-solar+p3-dist1
|
||||
# to really understand the options here, look in scripts/prepare_sector_network.py
|
||||
# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
|
||||
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
|
||||
# xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours
|
||||
# single letters are sectors: T for land transport, H for building heating,
|
||||
# B for biomass supply, I for industry, shipping and aviation,
|
||||
# A for agriculture, forestry and fishing
|
||||
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
|
||||
# solar+p3 multiplies the available installable potential by factor 3
|
||||
# co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2
|
||||
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
|
||||
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
|
||||
# emissions throughout the transition path in the timeframe determined by the
|
||||
# planning_horizons), be:beta decay; ex:exponential decay
|
||||
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
|
||||
# decay with initial growth rate 0
|
||||
planning_horizons: # investment years for myopic and perfect; or costs year for overnight
|
||||
- 2030
|
||||
- 2040
|
||||
- 2050
|
||||
# for example, set to [2020, 2030, 2040, 2050] for myopic foresight
|
||||
|
||||
# CO2 budget as a fraction of 1990 emissions
|
||||
# this is over-ridden if CO2Lx is set in sector_opts
|
||||
# this is also over-ridden if cb is set in sector_opts
|
||||
co2_budget:
|
||||
2020: 0.7011648746
|
||||
2025: 0.5241935484
|
||||
2030: 0.2970430108
|
||||
2035: 0.1500896057
|
||||
2040: 0.0712365591
|
||||
2045: 0.0322580645
|
||||
2050: 0
|
||||
|
||||
# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec
|
||||
snapshots:
|
||||
# arguments to pd.date_range
|
||||
start: "2013-03-01"
|
||||
end: "2013-04-01"
|
||||
closed: left # end is not inclusive
|
||||
|
||||
atlite:
|
||||
cutout: ../pypsa-eur/cutouts/be-03-2013-era5.nc
|
||||
|
||||
# this information is NOT used but needed as an argument for
|
||||
# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py
|
||||
electricity:
|
||||
max_hours:
|
||||
battery: 6
|
||||
H2: 168
|
||||
|
||||
# regulate what components with which carriers are kept from PyPSA-Eur;
|
||||
# some technologies are removed because they are implemented differently
|
||||
# (e.g. battery or H2 storage) or have different year-dependent costs
|
||||
# in PyPSA-Eur-Sec
|
||||
pypsa_eur:
|
||||
Bus:
|
||||
- AC
|
||||
Link:
|
||||
- DC
|
||||
Generator:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
StorageUnit:
|
||||
- PHS
|
||||
- hydro
|
||||
Store: []
|
||||
|
||||
|
||||
energy:
|
||||
energy_totals_year: 2011
|
||||
base_emissions_year: 1990
|
||||
eurostat_report_year: 2016
|
||||
emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)"
|
||||
|
||||
biomass:
|
||||
year: 2030
|
||||
scenario: ENS_Med
|
||||
classes:
|
||||
solid biomass:
|
||||
- Agricultural waste
|
||||
- Fuelwood residues
|
||||
- Secondary Forestry residues - woodchips
|
||||
- Sawdust
|
||||
- Residues from landscape care
|
||||
- Municipal waste
|
||||
not included:
|
||||
- Sugar from sugar beet
|
||||
- Rape seed
|
||||
- "Sunflower, soya seed "
|
||||
- Bioethanol barley, wheat, grain maize, oats, other cereals and rye
|
||||
- Miscanthus, switchgrass, RCG
|
||||
- Willow
|
||||
- Poplar
|
||||
- FuelwoodRW
|
||||
- C&P_RW
|
||||
biogas:
|
||||
- Manure solid, liquid
|
||||
- Sludge
|
||||
|
||||
|
||||
solar_thermal:
|
||||
clearsky_model: simple # should be "simple" or "enhanced"?
|
||||
orientation:
|
||||
slope: 45.
|
||||
azimuth: 180.
|
||||
|
||||
# only relevant for foresight = myopic or perfect
|
||||
existing_capacities:
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019]
|
||||
threshold_capacity: 10
|
||||
conventional_carriers:
|
||||
- lignite
|
||||
- coal
|
||||
- oil
|
||||
- uranium
|
||||
|
||||
|
||||
sector:
|
||||
district_heating:
|
||||
potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating
|
||||
# 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
|
||||
progress:
|
||||
2020: 0.0
|
||||
2030: 0.3
|
||||
2040: 0.6
|
||||
2050: 1.0
|
||||
district_heating_loss: 0.15
|
||||
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
|
||||
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
|
||||
transport_heating_deadband_upper: 20.
|
||||
transport_heating_deadband_lower: 15.
|
||||
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
|
||||
ICE_upper_degree_factor: 1.6
|
||||
EV_lower_degree_factor: 0.98
|
||||
EV_upper_degree_factor: 0.63
|
||||
bev_dsm: true #turns on EV battery
|
||||
bev_availability: 0.5 #How many cars do smart charging
|
||||
bev_energy: 0.05 #average battery size in MWh
|
||||
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
|
||||
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
|
||||
bev_charge_rate: 0.011 #3-phase charger with 11 kW
|
||||
bev_avail_max: 0.95
|
||||
bev_avail_mean: 0.8
|
||||
v2g: true #allows feed-in to grid from EV battery
|
||||
#what is not EV or FCEV is oil-fuelled ICE
|
||||
land_transport_fuel_cell_share:
|
||||
2020: 0
|
||||
2030: 0.05
|
||||
2040: 0.1
|
||||
2050: 0.15
|
||||
land_transport_electric_share:
|
||||
2020: 0
|
||||
2030: 0.25
|
||||
2040: 0.6
|
||||
2050: 0.85
|
||||
transport_fuel_cell_efficiency: 0.5
|
||||
transport_internal_combustion_efficiency: 0.3
|
||||
agriculture_machinery_electric_share: 0
|
||||
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
|
||||
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
|
||||
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||
shipping_hydrogen_liquefaction: false # whether to consider liquefaction costs for shipping H2 demands
|
||||
shipping_hydrogen_share:
|
||||
2020: 0
|
||||
2025: 0
|
||||
2030: 0.05
|
||||
2035: 0.15
|
||||
2040: 0.3
|
||||
2045: 0.6
|
||||
2050: 1
|
||||
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
|
||||
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
|
||||
# this can represent e.g. building renovation, building demolition, or if
|
||||
# the factor is negative: increasing floor area, increased thermal comfort, population growth
|
||||
reduce_space_heat_exogenously_factor: # 0.29 # per unit reduction in space heat demand
|
||||
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
|
||||
2020: 0.10 # this results in a space heat demand reduction of 10%
|
||||
2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
|
||||
2030: 0.09
|
||||
2035: 0.11
|
||||
2040: 0.16
|
||||
2045: 0.21
|
||||
2050: 0.29
|
||||
retrofitting : # co-optimises building renovation to reduce space heat demand
|
||||
retro_endogen: false # co-optimise space heat savings
|
||||
cost_factor: 1.0 # weight costs for building renovation
|
||||
interest_rate: 0.04 # for investment in building components
|
||||
annualise_cost: true # annualise the investment costs
|
||||
tax_weighting: false # weight costs depending on taxes in countries
|
||||
construction_index: true # weight costs depending on labour/material costs per country
|
||||
tes: true
|
||||
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
|
||||
decentral: 3
|
||||
central: 180
|
||||
boilers: true
|
||||
oil_boilers: false
|
||||
chp: true
|
||||
micro_chp: false
|
||||
solar_thermal: true
|
||||
solar_cf_correction: 0.788457 # = >>> 1/1.2683
|
||||
marginal_cost_storage: 0. #1e-4
|
||||
methanation: true
|
||||
helmeth: true
|
||||
dac: true
|
||||
co2_vent: true
|
||||
SMR: true
|
||||
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
|
||||
co2_sequestration_cost: 10 #EUR/tCO2 for sequestration of CO2
|
||||
co2_network: false
|
||||
cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture
|
||||
hydrogen_underground_storage: true
|
||||
hydrogen_underground_storage_locations:
|
||||
# - onshore # more than 50 km from sea
|
||||
- nearshore # within 50 km of sea
|
||||
# - offshore
|
||||
use_fischer_tropsch_waste_heat: true
|
||||
use_fuel_cell_waste_heat: true
|
||||
electricity_distribution_grid: true
|
||||
electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
electricity_grid_connection: true # only applies to onshore wind and utility PV
|
||||
H2_network: true
|
||||
gas_network: false
|
||||
H2_retrofit: false # if set to True existing gas pipes can be retrofitted to H2 pipes
|
||||
# according to hydrogen backbone strategy (April, 2020) p.15
|
||||
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
||||
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
||||
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
||||
gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
||||
gas_distribution_grid: true
|
||||
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
biomass_transport: false # biomass transport between nodes
|
||||
conventional_generation: # generator : carrier
|
||||
OCGT: gas
|
||||
|
||||
|
||||
industry:
|
||||
St_primary_fraction: # 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6
|
||||
2020: 0.6
|
||||
2025: 0.55
|
||||
2030: 0.5
|
||||
2035: 0.45
|
||||
2040: 0.4
|
||||
2045: 0.35
|
||||
2050: 0.3
|
||||
DRI_fraction: # 1 # fraction of the primary route converted to DRI + EAF
|
||||
2020: 0
|
||||
2025: 0
|
||||
2030: 0.05
|
||||
2035: 0.2
|
||||
2040: 0.4
|
||||
2045: 0.7
|
||||
2050: 1
|
||||
H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279
|
||||
elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf
|
||||
Al_primary_fraction: # 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4
|
||||
2020: 0.4
|
||||
2025: 0.375
|
||||
2030: 0.35
|
||||
2035: 0.325
|
||||
2040: 0.3
|
||||
2045: 0.25
|
||||
2050: 0.2
|
||||
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
|
||||
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
|
||||
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)
|
||||
MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
|
||||
NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
|
||||
petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
|
||||
HVC_primary_fraction: 1. # fraction of today's HVC produced via primary route
|
||||
HVC_mechanical_recycling_fraction: 0. # fraction of today's HVC produced via mechanical recycling
|
||||
HVC_chemical_recycling_fraction: 0. # fraction of today's HVC produced via chemical recycling
|
||||
HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX
|
||||
MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756.
|
||||
MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking
|
||||
chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43
|
||||
MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43
|
||||
MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process
|
||||
methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62
|
||||
MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65
|
||||
MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65
|
||||
hotmaps_locate_missing: false
|
||||
reference_year: 2015
|
||||
# references:
|
||||
# DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf
|
||||
# Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050
|
||||
|
||||
costs:
|
||||
lifetime: 25 #default lifetime
|
||||
# From a Lion Hirth paper, also reflects average of Noothout et al 2016
|
||||
discountrate: 0.07
|
||||
# [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501
|
||||
USD2013_to_EUR2013: 0.7532
|
||||
|
||||
# Marginal and capital costs can be overwritten
|
||||
# capital_cost:
|
||||
# onwind: 500
|
||||
marginal_cost:
|
||||
solar: 0.01
|
||||
onwind: 0.015
|
||||
offwind: 0.015
|
||||
hydro: 0.
|
||||
H2: 0.
|
||||
battery: 0.
|
||||
|
||||
emission_prices: # only used with the option Ep (emission prices)
|
||||
co2: 0.
|
||||
|
||||
lines:
|
||||
length_factor: 1.25 #to estimate offwind connection costs
|
||||
|
||||
|
||||
solving:
|
||||
#tmpdir: "path/to/tmp"
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
clip_p_max_pu: 1.e-2
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
skip_iterations: true
|
||||
track_iterations: false
|
||||
min_iterations: 4
|
||||
max_iterations: 6
|
||||
keep_shadowprices:
|
||||
- Bus
|
||||
- Line
|
||||
- Link
|
||||
- Transformer
|
||||
- GlobalConstraint
|
||||
- Generator
|
||||
- Store
|
||||
- StorageUnit
|
||||
|
||||
solver:
|
||||
name: cbc
|
||||
# threads: 4
|
||||
# method: 2 # barrier
|
||||
# crossover: 0
|
||||
# BarConvTol: 1.e-6
|
||||
# Seed: 123
|
||||
# AggFill: 0
|
||||
# PreDual: 0
|
||||
# GURO_PAR_BARDENSETHRESH: 200
|
||||
#FeasibilityTol: 1.e-6
|
||||
|
||||
#name: cplex
|
||||
#threads: 4
|
||||
#lpmethod: 4 # barrier
|
||||
#solutiontype: 2 # non basic solution, ie no crossover
|
||||
#barrier_convergetol: 1.e-5
|
||||
#feasopt_tolerance: 1.e-6
|
||||
mem: 4000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
|
||||
|
||||
plotting:
|
||||
map:
|
||||
boundaries: [-11, 30, 34, 71]
|
||||
color_geomap:
|
||||
ocean: white
|
||||
land: whitesmoke
|
||||
costs_max: 1000
|
||||
costs_threshold: 1
|
||||
energy_max: 20000
|
||||
energy_min: -20000
|
||||
energy_threshold: 50
|
||||
vre_techs:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
renewable_storage_techs:
|
||||
- PHS
|
||||
- hydro
|
||||
conv_techs:
|
||||
- OCGT
|
||||
- CCGT
|
||||
- Nuclear
|
||||
- Coal
|
||||
storage_techs:
|
||||
- hydro+PHS
|
||||
- battery
|
||||
- H2
|
||||
load_carriers:
|
||||
- AC load
|
||||
AC_carriers:
|
||||
- AC line
|
||||
- AC transformer
|
||||
link_carriers:
|
||||
- DC line
|
||||
- Converter AC-DC
|
||||
heat_links:
|
||||
- heat pump
|
||||
- resistive heater
|
||||
- CHP heat
|
||||
- CHP electric
|
||||
- gas boiler
|
||||
- central heat pump
|
||||
- central resistive heater
|
||||
- central CHP heat
|
||||
- central CHP electric
|
||||
- central gas boiler
|
||||
heat_generators:
|
||||
- gas boiler
|
||||
- central gas boiler
|
||||
- solar thermal collector
|
||||
- central solar thermal collector
|
||||
tech_colors:
|
||||
# wind
|
||||
onwind: "#235ebc"
|
||||
onshore wind: "#235ebc"
|
||||
offwind: "#6895dd"
|
||||
offshore wind: "#6895dd"
|
||||
offwind-ac: "#6895dd"
|
||||
offshore wind (AC): "#6895dd"
|
||||
offwind-dc: "#74c6f2"
|
||||
offshore wind (DC): "#74c6f2"
|
||||
# water
|
||||
hydro: '#298c81'
|
||||
hydro reservoir: '#298c81'
|
||||
ror: '#3dbfb0'
|
||||
run of river: '#3dbfb0'
|
||||
hydroelectricity: '#298c81'
|
||||
PHS: '#51dbcc'
|
||||
wave: '#a7d4cf'
|
||||
# solar
|
||||
solar: "#f9d002"
|
||||
solar PV: "#f9d002"
|
||||
solar thermal: '#ffbf2b'
|
||||
solar rooftop: '#ffea80'
|
||||
# gas
|
||||
OCGT: '#e0986c'
|
||||
OCGT marginal: '#e0986c'
|
||||
OCGT-heat: '#e0986c'
|
||||
gas boiler: '#db6a25'
|
||||
gas boilers: '#db6a25'
|
||||
gas boiler marginal: '#db6a25'
|
||||
gas: '#e05b09'
|
||||
fossil gas: '#e05b09'
|
||||
natural gas: '#e05b09'
|
||||
CCGT: '#a85522'
|
||||
CCGT marginal: '#a85522'
|
||||
gas for industry co2 to atmosphere: '#692e0a'
|
||||
gas for industry co2 to stored: '#8a3400'
|
||||
gas for industry: '#853403'
|
||||
gas for industry CC: '#692e0a'
|
||||
gas pipeline: '#ebbca0'
|
||||
gas pipeline new: '#a87c62'
|
||||
# oil
|
||||
oil: '#c9c9c9'
|
||||
oil boiler: '#adadad'
|
||||
agriculture machinery oil: '#949494'
|
||||
shipping oil: "#808080"
|
||||
land transport oil: '#afafaf'
|
||||
# nuclear
|
||||
Nuclear: '#ff8c00'
|
||||
Nuclear marginal: '#ff8c00'
|
||||
nuclear: '#ff8c00'
|
||||
uranium: '#ff8c00'
|
||||
# coal
|
||||
Coal: '#545454'
|
||||
coal: '#545454'
|
||||
Coal marginal: '#545454'
|
||||
solid: '#545454'
|
||||
Lignite: '#826837'
|
||||
lignite: '#826837'
|
||||
Lignite marginal: '#826837'
|
||||
# biomass
|
||||
biogas: '#e3d37d'
|
||||
biomass: '#baa741'
|
||||
solid biomass: '#baa741'
|
||||
solid biomass transport: '#baa741'
|
||||
solid biomass for industry: '#7a6d26'
|
||||
solid biomass for industry CC: '#47411c'
|
||||
solid biomass for industry co2 from atmosphere: '#736412'
|
||||
solid biomass for industry co2 to stored: '#47411c'
|
||||
# power transmission
|
||||
lines: '#6c9459'
|
||||
transmission lines: '#6c9459'
|
||||
electricity distribution grid: '#97ad8c'
|
||||
# electricity demand
|
||||
Electric load: '#110d63'
|
||||
electric demand: '#110d63'
|
||||
electricity: '#110d63'
|
||||
industry electricity: '#2d2a66'
|
||||
industry new electricity: '#2d2a66'
|
||||
agriculture electricity: '#494778'
|
||||
# battery + EVs
|
||||
battery: '#ace37f'
|
||||
battery storage: '#ace37f'
|
||||
home battery: '#80c944'
|
||||
home battery storage: '#80c944'
|
||||
BEV charger: '#baf238'
|
||||
V2G: '#e5ffa8'
|
||||
land transport EV: '#baf238'
|
||||
Li ion: '#baf238'
|
||||
# hot water storage
|
||||
water tanks: '#e69487'
|
||||
hot water storage: '#e69487'
|
||||
hot water charging: '#e69487'
|
||||
hot water discharging: '#e69487'
|
||||
# heat demand
|
||||
Heat load: '#cc1f1f'
|
||||
heat: '#cc1f1f'
|
||||
heat demand: '#cc1f1f'
|
||||
rural heat: '#ff5c5c'
|
||||
central heat: '#cc1f1f'
|
||||
decentral heat: '#750606'
|
||||
low-temperature heat for industry: '#8f2727'
|
||||
process heat: '#ff0000'
|
||||
agriculture heat: '#d9a5a5'
|
||||
# heat supply
|
||||
heat pumps: '#2fb537'
|
||||
heat pump: '#2fb537'
|
||||
air heat pump: '#36eb41'
|
||||
ground heat pump: '#2fb537'
|
||||
Ambient: '#98eb9d'
|
||||
CHP: '#8a5751'
|
||||
CHP CC: '#634643'
|
||||
CHP heat: '#8a5751'
|
||||
CHP electric: '#8a5751'
|
||||
district heating: '#e8beac'
|
||||
resistive heater: '#d8f9b8'
|
||||
retrofitting: '#8487e8'
|
||||
building retrofitting: '#8487e8'
|
||||
# hydrogen
|
||||
H2 for industry: "#f073da"
|
||||
H2 for shipping: "#ebaee0"
|
||||
H2: '#bf13a0'
|
||||
hydrogen: '#bf13a0'
|
||||
SMR: '#870c71'
|
||||
SMR CC: '#4f1745'
|
||||
H2 liquefaction: '#d647bd'
|
||||
hydrogen storage: '#bf13a0'
|
||||
H2 storage: '#bf13a0'
|
||||
land transport fuel cell: '#6b3161'
|
||||
H2 pipeline: '#f081dc'
|
||||
H2 pipeline retrofitted: '#ba99b5'
|
||||
H2 Fuel Cell: '#c251ae'
|
||||
H2 Electrolysis: '#ff29d9'
|
||||
# syngas
|
||||
Sabatier: '#9850ad'
|
||||
methanation: '#c44ce6'
|
||||
methane: '#c44ce6'
|
||||
helmeth: '#e899ff'
|
||||
# synfuels
|
||||
Fischer-Tropsch: '#25c49a'
|
||||
liquid: '#25c49a'
|
||||
kerosene for aviation: '#a1ffe6'
|
||||
naphtha for industry: '#57ebc4'
|
||||
# co2
|
||||
CC: '#f29dae'
|
||||
CCS: '#f29dae'
|
||||
CO2 sequestration: '#f29dae'
|
||||
DAC: '#ff5270'
|
||||
co2 stored: '#f2385a'
|
||||
co2: '#f29dae'
|
||||
co2 vent: '#ffd4dc'
|
||||
CO2 pipeline: '#f5627f'
|
||||
# emissions
|
||||
process emissions CC: '#000000'
|
||||
process emissions: '#222222'
|
||||
process emissions to stored: '#444444'
|
||||
process emissions to atmosphere: '#888888'
|
||||
oil emissions: '#aaaaaa'
|
||||
shipping oil emissions: "#555555"
|
||||
land transport oil emissions: '#777777'
|
||||
agriculture machinery oil emissions: '#333333'
|
||||
# other
|
||||
shipping: '#03a2ff'
|
||||
power-to-heat: '#2fb537'
|
||||
power-to-gas: '#c44ce6'
|
||||
power-to-H2: '#ff29d9'
|
||||
power-to-liquid: '#25c49a'
|
||||
gas-to-power/heat: '#ee8340'
|
||||
waste: '#e3d37d'
|
||||
other: '#000000'
|
605
test/config.overnight.yaml
Normal file
605
test/config.overnight.yaml
Normal file
@ -0,0 +1,605 @@
|
||||
version: 0.6.0
|
||||
|
||||
logging_level: INFO
|
||||
|
||||
retrieve_sector_databundle: true
|
||||
|
||||
results_dir: results/
|
||||
summary_dir: results
|
||||
costs_dir: ../technology-data/outputs/
|
||||
run: test-overnight # use this to keep track of runs with different settings
|
||||
foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented)
|
||||
# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below
|
||||
|
||||
scenario:
|
||||
simpl: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt"
|
||||
- 1.5
|
||||
clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred
|
||||
- 5
|
||||
opts: # only relevant for PyPSA-Eur
|
||||
- ''
|
||||
sector_opts: # this is where the main scenario settings are
|
||||
- CO2L0-191H-T-H-B-I-A-solar+p3-dist1
|
||||
# to really understand the options here, look in scripts/prepare_sector_network.py
|
||||
# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
|
||||
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
|
||||
# xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours
|
||||
# single letters are sectors: T for land transport, H for building heating,
|
||||
# B for biomass supply, I for industry, shipping and aviation,
|
||||
# A for agriculture, forestry and fishing
|
||||
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
|
||||
# solar+p3 multiplies the available installable potential by factor 3
|
||||
# co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2
|
||||
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
|
||||
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
|
||||
# emissions throughout the transition path in the timeframe determined by the
|
||||
# planning_horizons), be:beta decay; ex:exponential decay
|
||||
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
|
||||
# decay with initial growth rate 0
|
||||
planning_horizons: # investment years for myopic and perfect; or costs year for overnight
|
||||
- 2030
|
||||
# for example, set to [2020, 2030, 2040, 2050] for myopic foresight
|
||||
|
||||
# CO2 budget as a fraction of 1990 emissions
|
||||
# this is over-ridden if CO2Lx is set in sector_opts
|
||||
# this is also over-ridden if cb is set in sector_opts
|
||||
co2_budget:
|
||||
2020: 0.7011648746
|
||||
2025: 0.5241935484
|
||||
2030: 0.2970430108
|
||||
2035: 0.1500896057
|
||||
2040: 0.0712365591
|
||||
2045: 0.0322580645
|
||||
2050: 0
|
||||
|
||||
# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec
|
||||
snapshots:
|
||||
# arguments to pd.date_range
|
||||
start: "2013-03-01"
|
||||
end: "2013-04-01"
|
||||
closed: left # end is not inclusive
|
||||
|
||||
atlite:
|
||||
cutout: ../pypsa-eur/cutouts/be-03-2013-era5.nc
|
||||
|
||||
# this information is NOT used but needed as an argument for
|
||||
# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py
|
||||
electricity:
|
||||
max_hours:
|
||||
battery: 6
|
||||
H2: 168
|
||||
|
||||
# regulate what components with which carriers are kept from PyPSA-Eur;
|
||||
# some technologies are removed because they are implemented differently
|
||||
# (e.g. battery or H2 storage) or have different year-dependent costs
|
||||
# in PyPSA-Eur-Sec
|
||||
pypsa_eur:
|
||||
Bus:
|
||||
- AC
|
||||
Link:
|
||||
- DC
|
||||
Generator:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
StorageUnit:
|
||||
- PHS
|
||||
- hydro
|
||||
Store: []
|
||||
|
||||
|
||||
energy:
|
||||
energy_totals_year: 2011
|
||||
base_emissions_year: 1990
|
||||
eurostat_report_year: 2016
|
||||
emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)"
|
||||
|
||||
biomass:
|
||||
year: 2030
|
||||
scenario: ENS_Med
|
||||
classes:
|
||||
solid biomass:
|
||||
- Agricultural waste
|
||||
- Fuelwood residues
|
||||
- Secondary Forestry residues - woodchips
|
||||
- Sawdust
|
||||
- Residues from landscape care
|
||||
- Municipal waste
|
||||
not included:
|
||||
- Sugar from sugar beet
|
||||
- Rape seed
|
||||
- "Sunflower, soya seed "
|
||||
- Bioethanol barley, wheat, grain maize, oats, other cereals and rye
|
||||
- Miscanthus, switchgrass, RCG
|
||||
- Willow
|
||||
- Poplar
|
||||
- FuelwoodRW
|
||||
- C&P_RW
|
||||
biogas:
|
||||
- Manure solid, liquid
|
||||
- Sludge
|
||||
|
||||
|
||||
solar_thermal:
|
||||
clearsky_model: simple # should be "simple" or "enhanced"?
|
||||
orientation:
|
||||
slope: 45.
|
||||
azimuth: 180.
|
||||
|
||||
# only relevant for foresight = myopic or perfect
|
||||
existing_capacities:
|
||||
grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019]
|
||||
threshold_capacity: 10
|
||||
conventional_carriers:
|
||||
- lignite
|
||||
- coal
|
||||
- oil
|
||||
- uranium
|
||||
|
||||
|
||||
sector:
|
||||
district_heating:
|
||||
potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating
|
||||
# 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
|
||||
progress: 1
|
||||
# 2020: 0.0
|
||||
# 2030: 0.3
|
||||
# 2040: 0.6
|
||||
# 2050: 1.0
|
||||
district_heating_loss: 0.15
|
||||
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
|
||||
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
|
||||
transport_heating_deadband_upper: 20.
|
||||
transport_heating_deadband_lower: 15.
|
||||
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
|
||||
ICE_upper_degree_factor: 1.6
|
||||
EV_lower_degree_factor: 0.98
|
||||
EV_upper_degree_factor: 0.63
|
||||
bev_dsm: true #turns on EV battery
|
||||
bev_availability: 0.5 #How many cars do smart charging
|
||||
bev_energy: 0.05 #average battery size in MWh
|
||||
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
|
||||
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
|
||||
bev_charge_rate: 0.011 #3-phase charger with 11 kW
|
||||
bev_avail_max: 0.95
|
||||
bev_avail_mean: 0.8
|
||||
v2g: true #allows feed-in to grid from EV battery
|
||||
#what is not EV or FCEV is oil-fuelled ICE
|
||||
land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs
|
||||
# 2020: 0
|
||||
# 2030: 0.05
|
||||
# 2040: 0.1
|
||||
# 2050: 0.15
|
||||
land_transport_electric_share: 0.85 # 1 means all EVs
|
||||
# 2020: 0
|
||||
# 2030: 0.25
|
||||
# 2040: 0.6
|
||||
# 2050: 0.85
|
||||
transport_fuel_cell_efficiency: 0.5
|
||||
transport_internal_combustion_efficiency: 0.3
|
||||
agriculture_machinery_electric_share: 0
|
||||
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
|
||||
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
|
||||
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||
shipping_hydrogen_liquefaction: false # whether to consider liquefaction costs for shipping H2 demands
|
||||
shipping_hydrogen_share: 1 # 1 means all hydrogen FC
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.15
|
||||
# 2040: 0.3
|
||||
# 2045: 0.6
|
||||
# 2050: 1
|
||||
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
|
||||
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
|
||||
# this can represent e.g. building renovation, building demolition, or if
|
||||
# the factor is negative: increasing floor area, increased thermal comfort, population growth
|
||||
reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand
|
||||
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
|
||||
# 2020: 0.10 # this results in a space heat demand reduction of 10%
|
||||
# 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
|
||||
# 2030: 0.09
|
||||
# 2035: 0.11
|
||||
# 2040: 0.16
|
||||
# 2045: 0.21
|
||||
# 2050: 0.29
|
||||
retrofitting : # co-optimises building renovation to reduce space heat demand
|
||||
retro_endogen: false # co-optimise space heat savings
|
||||
cost_factor: 1.0 # weight costs for building renovation
|
||||
interest_rate: 0.04 # for investment in building components
|
||||
annualise_cost: true # annualise the investment costs
|
||||
tax_weighting: false # weight costs depending on taxes in countries
|
||||
construction_index: true # weight costs depending on labour/material costs per country
|
||||
tes: true
|
||||
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
|
||||
decentral: 3
|
||||
central: 180
|
||||
boilers: true
|
||||
oil_boilers: false
|
||||
chp: true
|
||||
micro_chp: false
|
||||
solar_thermal: true
|
||||
solar_cf_correction: 0.788457 # = >>> 1/1.2683
|
||||
marginal_cost_storage: 0. #1e-4
|
||||
methanation: true
|
||||
helmeth: true
|
||||
dac: true
|
||||
co2_vent: true
|
||||
SMR: true
|
||||
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
|
||||
co2_sequestration_cost: 10 #EUR/tCO2 for sequestration of CO2
|
||||
co2_network: false
|
||||
cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture
|
||||
hydrogen_underground_storage: true
|
||||
hydrogen_underground_storage_locations:
|
||||
# - onshore # more than 50 km from sea
|
||||
- nearshore # within 50 km of sea
|
||||
# - offshore
|
||||
use_fischer_tropsch_waste_heat: true
|
||||
use_fuel_cell_waste_heat: true
|
||||
electricity_distribution_grid: true
|
||||
electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
electricity_grid_connection: true # only applies to onshore wind and utility PV
|
||||
H2_network: true
|
||||
gas_network: true
|
||||
H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes
|
||||
# according to hydrogen backbone strategy (April, 2020) p.15
|
||||
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
||||
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
||||
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
||||
gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
||||
gas_distribution_grid: true
|
||||
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||
biomass_transport: false # biomass transport between nodes
|
||||
conventional_generation: # generator : carrier
|
||||
OCGT: gas
|
||||
|
||||
|
||||
industry:
|
||||
St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6
|
||||
# 2020: 0.6
|
||||
# 2025: 0.55
|
||||
# 2030: 0.5
|
||||
# 2035: 0.45
|
||||
# 2040: 0.4
|
||||
# 2045: 0.35
|
||||
# 2050: 0.3
|
||||
DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF
|
||||
# 2020: 0
|
||||
# 2025: 0
|
||||
# 2030: 0.05
|
||||
# 2035: 0.2
|
||||
# 2040: 0.4
|
||||
# 2045: 0.7
|
||||
# 2050: 1
|
||||
H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279
|
||||
elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf
|
||||
Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4
|
||||
# 2020: 0.4
|
||||
# 2025: 0.375
|
||||
# 2030: 0.35
|
||||
# 2035: 0.325
|
||||
# 2040: 0.3
|
||||
# 2045: 0.25
|
||||
# 2050: 0.2
|
||||
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
|
||||
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
|
||||
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)
|
||||
MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
|
||||
NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
|
||||
petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
|
||||
HVC_primary_fraction: 1. # fraction of today's HVC produced via primary route
|
||||
HVC_mechanical_recycling_fraction: 0. # fraction of today's HVC produced via mechanical recycling
|
||||
HVC_chemical_recycling_fraction: 0. # fraction of today's HVC produced via chemical recycling
|
||||
HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX
|
||||
MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756.
|
||||
MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking
|
||||
chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43
|
||||
MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43
|
||||
MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process
|
||||
methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62
|
||||
MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65
|
||||
MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65
|
||||
hotmaps_locate_missing: false
|
||||
reference_year: 2015
|
||||
# references:
|
||||
# DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf
|
||||
# Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050
|
||||
|
||||
costs:
|
||||
lifetime: 25 #default lifetime
|
||||
# From a Lion Hirth paper, also reflects average of Noothout et al 2016
|
||||
discountrate: 0.07
|
||||
# [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501
|
||||
USD2013_to_EUR2013: 0.7532
|
||||
|
||||
# Marginal and capital costs can be overwritten
|
||||
# capital_cost:
|
||||
# onwind: 500
|
||||
marginal_cost:
|
||||
solar: 0.01
|
||||
onwind: 0.015
|
||||
offwind: 0.015
|
||||
hydro: 0.
|
||||
H2: 0.
|
||||
battery: 0.
|
||||
|
||||
emission_prices: # only used with the option Ep (emission prices)
|
||||
co2: 0.
|
||||
|
||||
lines:
|
||||
length_factor: 1.25 #to estimate offwind connection costs
|
||||
|
||||
|
||||
solving:
|
||||
#tmpdir: "path/to/tmp"
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
clip_p_max_pu: 1.e-2
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
skip_iterations: true
|
||||
track_iterations: false
|
||||
min_iterations: 4
|
||||
max_iterations: 6
|
||||
keep_shadowprices:
|
||||
- Bus
|
||||
- Line
|
||||
- Link
|
||||
- Transformer
|
||||
- GlobalConstraint
|
||||
- Generator
|
||||
- Store
|
||||
- StorageUnit
|
||||
|
||||
solver:
|
||||
name: cbc
|
||||
# threads: 4
|
||||
# method: 2 # barrier
|
||||
# crossover: 0
|
||||
# BarConvTol: 1.e-6
|
||||
# Seed: 123
|
||||
# AggFill: 0
|
||||
# PreDual: 0
|
||||
# GURO_PAR_BARDENSETHRESH: 200
|
||||
#FeasibilityTol: 1.e-6
|
||||
|
||||
#name: cplex
|
||||
#threads: 4
|
||||
#lpmethod: 4 # barrier
|
||||
#solutiontype: 2 # non basic solution, ie no crossover
|
||||
#barrier_convergetol: 1.e-5
|
||||
#feasopt_tolerance: 1.e-6
|
||||
mem: 4000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
|
||||
|
||||
plotting:
|
||||
map:
|
||||
boundaries: [-11, 30, 34, 71]
|
||||
color_geomap:
|
||||
ocean: white
|
||||
land: whitesmoke
|
||||
costs_max: 1000
|
||||
costs_threshold: 1
|
||||
energy_max: 20000
|
||||
energy_min: -20000
|
||||
energy_threshold: 50
|
||||
vre_techs:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- solar
|
||||
- ror
|
||||
renewable_storage_techs:
|
||||
- PHS
|
||||
- hydro
|
||||
conv_techs:
|
||||
- OCGT
|
||||
- CCGT
|
||||
- Nuclear
|
||||
- Coal
|
||||
storage_techs:
|
||||
- hydro+PHS
|
||||
- battery
|
||||
- H2
|
||||
load_carriers:
|
||||
- AC load
|
||||
AC_carriers:
|
||||
- AC line
|
||||
- AC transformer
|
||||
link_carriers:
|
||||
- DC line
|
||||
- Converter AC-DC
|
||||
heat_links:
|
||||
- heat pump
|
||||
- resistive heater
|
||||
- CHP heat
|
||||
- CHP electric
|
||||
- gas boiler
|
||||
- central heat pump
|
||||
- central resistive heater
|
||||
- central CHP heat
|
||||
- central CHP electric
|
||||
- central gas boiler
|
||||
heat_generators:
|
||||
- gas boiler
|
||||
- central gas boiler
|
||||
- solar thermal collector
|
||||
- central solar thermal collector
|
||||
tech_colors:
|
||||
# wind
|
||||
onwind: "#235ebc"
|
||||
onshore wind: "#235ebc"
|
||||
offwind: "#6895dd"
|
||||
offshore wind: "#6895dd"
|
||||
offwind-ac: "#6895dd"
|
||||
offshore wind (AC): "#6895dd"
|
||||
offwind-dc: "#74c6f2"
|
||||
offshore wind (DC): "#74c6f2"
|
||||
# water
|
||||
hydro: '#298c81'
|
||||
hydro reservoir: '#298c81'
|
||||
ror: '#3dbfb0'
|
||||
run of river: '#3dbfb0'
|
||||
hydroelectricity: '#298c81'
|
||||
PHS: '#51dbcc'
|
||||
wave: '#a7d4cf'
|
||||
# solar
|
||||
solar: "#f9d002"
|
||||
solar PV: "#f9d002"
|
||||
solar thermal: '#ffbf2b'
|
||||
solar rooftop: '#ffea80'
|
||||
# gas
|
||||
OCGT: '#e0986c'
|
||||
OCGT marginal: '#e0986c'
|
||||
OCGT-heat: '#e0986c'
|
||||
gas boiler: '#db6a25'
|
||||
gas boilers: '#db6a25'
|
||||
gas boiler marginal: '#db6a25'
|
||||
gas: '#e05b09'
|
||||
fossil gas: '#e05b09'
|
||||
natural gas: '#e05b09'
|
||||
CCGT: '#a85522'
|
||||
CCGT marginal: '#a85522'
|
||||
gas for industry co2 to atmosphere: '#692e0a'
|
||||
gas for industry co2 to stored: '#8a3400'
|
||||
gas for industry: '#853403'
|
||||
gas for industry CC: '#692e0a'
|
||||
gas pipeline: '#ebbca0'
|
||||
gas pipeline new: '#a87c62'
|
||||
# oil
|
||||
oil: '#c9c9c9'
|
||||
oil boiler: '#adadad'
|
||||
agriculture machinery oil: '#949494'
|
||||
shipping oil: "#808080"
|
||||
land transport oil: '#afafaf'
|
||||
# nuclear
|
||||
Nuclear: '#ff8c00'
|
||||
Nuclear marginal: '#ff8c00'
|
||||
nuclear: '#ff8c00'
|
||||
uranium: '#ff8c00'
|
||||
# coal
|
||||
Coal: '#545454'
|
||||
coal: '#545454'
|
||||
Coal marginal: '#545454'
|
||||
solid: '#545454'
|
||||
Lignite: '#826837'
|
||||
lignite: '#826837'
|
||||
Lignite marginal: '#826837'
|
||||
# biomass
|
||||
biogas: '#e3d37d'
|
||||
biomass: '#baa741'
|
||||
solid biomass: '#baa741'
|
||||
solid biomass transport: '#baa741'
|
||||
solid biomass for industry: '#7a6d26'
|
||||
solid biomass for industry CC: '#47411c'
|
||||
solid biomass for industry co2 from atmosphere: '#736412'
|
||||
solid biomass for industry co2 to stored: '#47411c'
|
||||
# power transmission
|
||||
lines: '#6c9459'
|
||||
transmission lines: '#6c9459'
|
||||
electricity distribution grid: '#97ad8c'
|
||||
# electricity demand
|
||||
Electric load: '#110d63'
|
||||
electric demand: '#110d63'
|
||||
electricity: '#110d63'
|
||||
industry electricity: '#2d2a66'
|
||||
industry new electricity: '#2d2a66'
|
||||
agriculture electricity: '#494778'
|
||||
# battery + EVs
|
||||
battery: '#ace37f'
|
||||
battery storage: '#ace37f'
|
||||
home battery: '#80c944'
|
||||
home battery storage: '#80c944'
|
||||
BEV charger: '#baf238'
|
||||
V2G: '#e5ffa8'
|
||||
land transport EV: '#baf238'
|
||||
Li ion: '#baf238'
|
||||
# hot water storage
|
||||
water tanks: '#e69487'
|
||||
hot water storage: '#e69487'
|
||||
hot water charging: '#e69487'
|
||||
hot water discharging: '#e69487'
|
||||
# heat demand
|
||||
Heat load: '#cc1f1f'
|
||||
heat: '#cc1f1f'
|
||||
heat demand: '#cc1f1f'
|
||||
rural heat: '#ff5c5c'
|
||||
central heat: '#cc1f1f'
|
||||
decentral heat: '#750606'
|
||||
low-temperature heat for industry: '#8f2727'
|
||||
process heat: '#ff0000'
|
||||
agriculture heat: '#d9a5a5'
|
||||
# heat supply
|
||||
heat pumps: '#2fb537'
|
||||
heat pump: '#2fb537'
|
||||
air heat pump: '#36eb41'
|
||||
ground heat pump: '#2fb537'
|
||||
Ambient: '#98eb9d'
|
||||
CHP: '#8a5751'
|
||||
CHP CC: '#634643'
|
||||
CHP heat: '#8a5751'
|
||||
CHP electric: '#8a5751'
|
||||
district heating: '#e8beac'
|
||||
resistive heater: '#d8f9b8'
|
||||
retrofitting: '#8487e8'
|
||||
building retrofitting: '#8487e8'
|
||||
# hydrogen
|
||||
H2 for industry: "#f073da"
|
||||
H2 for shipping: "#ebaee0"
|
||||
H2: '#bf13a0'
|
||||
hydrogen: '#bf13a0'
|
||||
SMR: '#870c71'
|
||||
SMR CC: '#4f1745'
|
||||
H2 liquefaction: '#d647bd'
|
||||
hydrogen storage: '#bf13a0'
|
||||
H2 storage: '#bf13a0'
|
||||
land transport fuel cell: '#6b3161'
|
||||
H2 pipeline: '#f081dc'
|
||||
H2 pipeline retrofitted: '#ba99b5'
|
||||
H2 Fuel Cell: '#c251ae'
|
||||
H2 Electrolysis: '#ff29d9'
|
||||
# syngas
|
||||
Sabatier: '#9850ad'
|
||||
methanation: '#c44ce6'
|
||||
methane: '#c44ce6'
|
||||
helmeth: '#e899ff'
|
||||
# synfuels
|
||||
Fischer-Tropsch: '#25c49a'
|
||||
liquid: '#25c49a'
|
||||
kerosene for aviation: '#a1ffe6'
|
||||
naphtha for industry: '#57ebc4'
|
||||
# co2
|
||||
CC: '#f29dae'
|
||||
CCS: '#f29dae'
|
||||
CO2 sequestration: '#f29dae'
|
||||
DAC: '#ff5270'
|
||||
co2 stored: '#f2385a'
|
||||
co2: '#f29dae'
|
||||
co2 vent: '#ffd4dc'
|
||||
CO2 pipeline: '#f5627f'
|
||||
# emissions
|
||||
process emissions CC: '#000000'
|
||||
process emissions: '#222222'
|
||||
process emissions to stored: '#444444'
|
||||
process emissions to atmosphere: '#888888'
|
||||
oil emissions: '#aaaaaa'
|
||||
shipping oil emissions: "#555555"
|
||||
land transport oil emissions: '#777777'
|
||||
agriculture machinery oil emissions: '#333333'
|
||||
# other
|
||||
shipping: '#03a2ff'
|
||||
power-to-heat: '#2fb537'
|
||||
power-to-gas: '#c44ce6'
|
||||
power-to-H2: '#ff29d9'
|
||||
power-to-liquid: '#25c49a'
|
||||
gas-to-power/heat: '#ee8340'
|
||||
waste: '#e3d37d'
|
||||
other: '#000000'
|
Loading…
Reference in New Issue
Block a user