From 2f555d0e1add97245332a9af97dbf670831d2d3b Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 6 Nov 2024 09:01:37 +0100 Subject: [PATCH 01/19] Add a geometry config --- configs/config.geometry.yaml | 52 ++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 configs/config.geometry.yaml diff --git a/configs/config.geometry.yaml b/configs/config.geometry.yaml new file mode 100644 index 000000000..219da9177 --- /dev/null +++ b/configs/config.geometry.yaml @@ -0,0 +1,52 @@ +# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + +version: 0.4.1 + +# definition of the Coordinate Reference Systems +crs: + geo_crs: EPSG:4326 # general geographic projection, not used for metric measures. "EPSG:4326" is the standard used by OSM and google maps + distance_crs: EPSG:3857 # projection for distance measurements only. Possible recommended values are "EPSG:3857" (used by OSM and Google Maps) + area_crs: ESRI:54009 # projection for area measurements only. Possible recommended values are Global Mollweide "ESRI:54009" + +cluster_options: + simplify_network: + to_substations: false # network is simplified to nodes with positive or negative power injection (i.e. substations or offwind connections) + algorithm: kmeans # choose from: [hac, kmeans] + feature: solar+onwind-time # only for hac. choose from: [solar+onwind-time, solar+onwind-cap, solar-time, solar-cap, solar+offwind-cap] etc. + exclude_carriers: [] + remove_stubs: true + remove_stubs_across_borders: true + p_threshold_drop_isolated: 20 # [MW] isolated buses are being discarded if bus mean power is below the specified threshold + p_threshold_merge_isolated: 300 # [MW] isolated buses are being merged into a single isolated bus if a bus mean power is below the specified threshold + s_threshold_fetch_isolated: 0.05 # [-] a share of the national load for merging an isolated network into a backbone network + cluster_network: + algorithm: kmeans + feature: solar+onwind-time + exclude_carriers: [] + alternative_clustering: false # "False" use Voronoi shapes, "True" use GADM shapes + distribute_cluster: ["load"] # Distributes cluster nodes per country according to ['load'],['pop'] or ['gdp'] + out_logging: true # When "True", logging is printed to console + aggregation_strategies: + generators: # use "min" for more conservative assumptions + p_nom: sum + p_nom_max: sum + p_nom_min: sum + p_min_pu: mean + marginal_cost: mean + committable: any + ramp_limit_up: max + ramp_limit_down: max + efficiency: mean + +build_shape_options: + gadm_layer_id: 1 # GADM level area used for the gadm_shapes. Codes are country-dependent but roughly: 0: country, 1: region/county-like, 2: municipality-like + update_file: false # When true, all the input files are downloaded again and replace the existing files + out_logging: true # When true, logging is printed to console + year: 2020 # reference year used to derive shapes, info on population and info on GDP + nprocesses: 3 # number of processes to be used in build_shapes + worldpop_method: "standard" # "standard" pulls from web 1kmx1km raster, "api" pulls from API 100mx100m raster, + # false (not "false") no pop addition to shape which is useful when generating only cutout + gdp_method: "standard" # "standard" pulls from web 1x1km raster, false (not "false") no gdp addition to shape which useful when generating only cutout + contended_flag: "set_by_country" # "set_by_country" assigns the contended areas to the countries according to the GADM database, "drop" drops these contended areas from the model From f70a6b004ec0dea103ef3476014ec233b5747aeb Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 6 Nov 2024 09:02:15 +0100 Subject: [PATCH 02/19] Add a heating config --- configs/config.heating.yaml | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 configs/config.heating.yaml diff --git a/configs/config.heating.yaml b/configs/config.heating.yaml new file mode 100644 index 000000000..b8bc08d66 --- /dev/null +++ b/configs/config.heating.yaml @@ -0,0 +1,42 @@ +# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + +version: 0.4.1 + +sector: + district_heating: + potential: 0.3 #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 + 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 + + 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 + heat_pump_sink_T: 55 #Celsius, based on DTU / large area radiators; used un build_cop_profiles.py + time_dep_hp_cop: true #time dependent heat pump coefficient of performance + solar_cf_correction: 0.788457 # = >>>1/1.2683 From 7b3f4a4e55554aaf94c50f98e985d9a26dc911e2 Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 6 Nov 2024 09:02:35 +0100 Subject: [PATCH 03/19] Add monte-carlo config --- configs/config.monte-carlo.yaml | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 configs/config.monte-carlo.yaml diff --git a/configs/config.monte-carlo.yaml b/configs/config.monte-carlo.yaml new file mode 100644 index 000000000..00aabf553 --- /dev/null +++ b/configs/config.monte-carlo.yaml @@ -0,0 +1,37 @@ +# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + +version: 0.4.1 + +monte_carlo: + # Description: Specify Monte Carlo sampling options for uncertainty analysis. + # Define the option list for Monte Carlo sampling. + # Make sure add_to_snakefile is set to true to enable Monte-Carlo + options: + add_to_snakefile: false # When set to true, enables Monte Carlo sampling + samples: 9 # number of optimizations. Note that number of samples when using scipy has to be the square of a prime number + sampling_strategy: "chaospy" # "pydoe2", "chaospy", "scipy", packages that are supported + seed: 42 # set seedling for reproducibilty + # Uncertanties on any PyPSA object are specified by declaring the specific PyPSA object under the key 'uncertainties'. + # For each PyPSA object, the 'type' and 'args' keys represent the type of distribution and its argument, respectively. + # Supported distributions types are uniform, normal, lognormal, triangle, beta and gamma. + # The arguments of the distribution are passed using the key 'args' as follows, tailored by distribution type + # normal: [mean, std], lognormal: [mean, std], uniform: [lower_bound, upper_bound], + # triangle: [mid_point (between 0 - 1)], beta: [alpha, beta], gamma: [shape, scale] + # More info on the distributions are documented in the Chaospy reference guide... + # https://chaospy.readthedocs.io/en/master/reference/distribution/index.html + # An abstract example is as follows: + # {pypsa network object, e.g. "loads_t.p_set"}: + # type: {any supported distribution among the previous: "uniform", "normal", ...} + # args: {arguments passed as a list depending on the distribution, see the above and more at https://pypsa.readthedocs.io/} + uncertainties: + loads_t.p_set: + type: uniform + args: [0, 1] + generators_t.p_max_pu.loc[:, n.generators.carrier == "onwind"]: + type: lognormal + args: [1.5] + generators_t.p_max_pu.loc[:, n.generators.carrier == "solar"]: + type: beta + args: [0.5, 2] From 792d4a8f5371b50ca21a5c7dc73eb6e5d36f7f00 Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 6 Nov 2024 09:02:55 +0100 Subject: [PATCH 04/19] Add a plotting config --- configs/config.plot.yaml | 230 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 configs/config.plot.yaml diff --git a/configs/config.plot.yaml b/configs/config.plot.yaml new file mode 100644 index 000000000..aca1fa410 --- /dev/null +++ b/configs/config.plot.yaml @@ -0,0 +1,230 @@ +# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + +version: 0.4.1 + +plotting: + map: + figsize: [7, 7] + boundaries: [-10.2, 29, 35, 72] + p_nom: + bus_size_factor: 5.e+4 + linewidth_factor: 3.e+3 + color_geomap: + ocean: white + land: whitesmoke + + costs_max: 10 + costs_threshold: 0.2 + + energy_max: 20000 + energy_min: -20000 + energy_threshold: 15 + + vre_techs: + - onwind + - offwind-ac + - offwind-dc + - solar + - ror + conv_techs: + - OCGT + - CCGT + - nuclear + - Nuclear + - coal + - oil + storage_techs: + - hydro+PHS + - battery + - H2 + renewable_storage_techs: + - PHS + - hydro + 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: + onwind: #235ebc + onshore wind: #235ebc + offwind: #6895dd + offwind-ac: #6895dd + offshore wind: #6895dd + offshore wind ac: #6895dd + offshore wind (AC): #6895dd + offwind-dc: #74c6f2 + offshore wind dc: #74c6f2 + offshore wind (DC): #74c6f2 + wave: #004444 + hydro: #08ad97 + hydro+PHS: #08ad97 + PHS: #08ad97 + hydro reservoir: #08ad97 + hydroelectricity: #08ad97 + ror: #4adbc8 + run of river: #4adbc8 + solar: #f9d002 + solar PV: #f9d002 + solar thermal: #ffef60 + solar rooftop: #ffef60 + biomass: #0c6013 + solid biomass: #06540d + solid biomass for industry co2 from atmosphere: #654321 + solid biomass for industry co2 to stored: #654321 + solid biomass for industry CC: #654321 + biogas: #23932d + waste: #68896b + geothermal: #ba91b1 + OCGT: #d35050 + OCGT marginal: sandybrown + OCGT-heat: #ee8340 + gas: #d35050 + natural gas: #d35050 + gas boiler: #ee8340 + gas boilers: #ee8340 + gas boiler marginal: #ee8340 + gas-to-power/heat: brown + SMR: #4F4F2F + SMR CC: darkblue + oil: #262626 + oil boiler: #B5A642 + oil emissions: #666666 + gas for industry: #333333 + gas for industry CC: brown + gas for industry co2 to atmosphere: #654321 + gas for industry co2 to stored: #654321 + nuclear: #ff9000 + Nuclear: r + Nuclear marginal: r + uranium: r + coal: #707070 + Coal: k + Coal marginal: k + lignite: #9e5a01 + Lignite: grey + Lignite marginal: grey + H2: #ea048a + H2 for industry: #222222 + H2 for shipping: #6495ED + H2 liquefaction: m + hydrogen storage: #ea048a + battery: slategray + battery discharger: slategray + battery charger: slategray + battery storage: slategray + home battery: #614700 + home battery storage: #614700 + lines: #70af1d + transmission lines: #70af1d + AC: #70af1d + AC-AC: #70af1d + AC line: #70af1d + links: #8a1caf + HVDC links: #8a1caf + DC: #8a1caf + DC-DC: #8a1caf + DC link: #8a1caf + load: #ff0000 + load shedding: #ff0000 + Electric load: b + electricity: k + electric demand: k + electricity distribution grid: y + heat: darkred + Heat load: r + heat pumps: #76EE00 + heat pump: #76EE00 + air heat pump: #76EE00 + ground heat pump: #40AA00 + CHP: r + CHP heat: r + CHP electric: r + heat demand: darkred + rural heat: #880000 + central heat: #b22222 + decentral heat: #800000 + low-temperature heat for industry: #991111 + process heat: #FF3333 + power-to-heat: red + resistive heater: pink + Sabatier: #FF1493 + methanation: #FF1493 + power-to-gas: purple + power-to-liquid: darkgreen + helmeth: #7D0552 + DAC: deeppink + co2 stored: #123456 + CO2 pipeline: gray + CO2 sequestration: #123456 + co2: #123456 + co2 vent: #654321 + process emissions: #222222 + process emissions CC: gray + process emissions to stored: #444444 + process emissions to atmosphere: #888888 + agriculture heat: #D07A7A + agriculture machinery oil: #1e1e1e + agriculture machinery oil emissions: #111111 + agriculture electricity: #222222 + Fischer-Tropsch: #44DD33 + kerosene for aviation: #44BB11 + naphtha for industry: #44FF55 + land transport oil: #44DD33 + land transport oil emissions: #666666 + land transport fuel cell: #AAAAAA + land transport EV: grey + V2G: grey + BEV charger: grey + shipping: #6495ED + shipping oil: #6495ED + shipping oil emissions: #6495ED + water tanks: #BBBBBB + hot water storage: #BBBBBB + hot water charging: #BBBBBB + hot water discharging: #999999 + Li ion: grey + district heating: #CC4E5C + retrofitting: purple + building retrofitting: purple + solid biomass transport: green + biomass EOP: green + high-temp electrolysis: magenta + today: #D2691E + Ambient: k + + nice_names: + OCGT: Open-Cycle Gas + CCGT: Combined-Cycle Gas + offwind-ac: Offshore Wind (AC) + offwind-dc: Offshore Wind (DC) + onwind: Onshore Wind + solar: Solar + PHS: Pumped Hydro Storage + hydro: Reservoir & Dam + battery: Battery Storage + H2: Hydrogen Storage + lines: Transmission Lines + ror: Run of River From 770951e6ff0be97085fda9eb2f028e9ef61dea9c Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 6 Nov 2024 09:03:07 +0100 Subject: [PATCH 05/19] Add a solving config --- configs/config.solve.yaml | 78 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 configs/config.solve.yaml diff --git a/configs/config.solve.yaml b/configs/config.solve.yaml new file mode 100644 index 000000000..c206afcd3 --- /dev/null +++ b/configs/config.solve.yaml @@ -0,0 +1,78 @@ +# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + +version: 0.4.1 + +solving: + options: + formulation: kirchhoff + load_shedding: true + noisy_costs: true + min_iterations: 4 + max_iterations: 6 + clip_p_max_pu: 0.01 + skip_iterations: true + track_iterations: false + # nhours: 10 + + solver: + name: gurobi + options: gurobi-default + + solver_options: + highs-default: + # refer to https://ergo-code.github.io/HiGHS/dev/options/definitions/ + threads: 4 + solver: "ipm" + run_crossover: "off" + small_matrix_value: 1e-6 + large_matrix_value: 1e9 + primal_feasibility_tolerance: 1e-5 + dual_feasibility_tolerance: 1e-5 + ipm_optimality_tolerance: 1e-4 + parallel: "on" + random_seed: 123 + gurobi-default: + threads: 4 + method: 2 # barrier + crossover: 0 + BarConvTol: 1.e-6 + Seed: 123 + AggFill: 0 + PreDual: 0 + GURO_PAR_BARDENSETHRESH: 200 + gurobi-numeric-focus: + NumericFocus: 3 # Favour numeric stability over speed + method: 2 # barrier + crossover: 0 # do not use crossover + BarHomogeneous: 1 # Use homogeneous barrier if standard does not converge + BarConvTol: 1.e-5 + FeasibilityTol: 1.e-4 + OptimalityTol: 1.e-4 + ObjScale: -0.5 + threads: 8 + Seed: 123 + gurobi-fallback: # Use gurobi defaults + crossover: 0 + method: 2 # barrier + BarHomogeneous: 1 # Use homogeneous barrier if standard does not converge + BarConvTol: 1.e-5 + FeasibilityTol: 1.e-5 + OptimalityTol: 1.e-5 + Seed: 123 + threads: 8 + cplex-default: + threads: 4 + lpmethod: 4 # barrier + solutiontype: 2 # non basic solution, ie no crossover + barrier.convergetol: 1.e-5 + feasopt.tolerance: 1.e-6 + copt-default: + Threads: 8 + LpMethod: 2 + Crossover: 0 + cbc-default: {} # Used in CI + glpk-default: {} # Used in CI + + mem: 30000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2 From 457c66a5d432a4329036d4f0d90487c2e27d2795 Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 6 Nov 2024 09:03:18 +0100 Subject: [PATCH 06/19] Add a transport config --- configs/config.transport.yaml | 86 +++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 configs/config.transport.yaml diff --git a/configs/config.transport.yaml b/configs/config.transport.yaml new file mode 100644 index 000000000..5ae5d98df --- /dev/null +++ b/configs/config.transport.yaml @@ -0,0 +1,86 @@ +# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + +version: 0.4.1 + +sector: + bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S + bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency + 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_avail_max: 0.95 + bev_avail_mean: 0.8 + 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 + v2g: true #allows feed-in to grid from EV battery + bev_dsm: true #turns on EV battery + bev_energy: 0.05 #average battery size in MWh + bev_availability: 0.5 #How many cars do smart charging + transport_fuel_cell_efficiency: 0.5 + transport_internal_combustion_efficiency: 0.3 + industry_util_factor: 0.7 + + biomass_transport: true # biomass transport between nodes + biomass_transport_default_cost: 0.1 #EUR/km/MWh + solid_biomass_potential: 40 # TWh/a, Potential of whole modelled area + biogas_potential: 0.5 # TWh/a, Potential of whole modelled area + + efficiency_heat_oil_to_elec: 0.9 + efficiency_heat_biomass_to_elec: 0.9 + efficiency_heat_gas_to_elec: 0.9 + + dynamic_transport: + enable: false # If "True", then the BEV and FCEV shares are obtained depending on the "Co2L"-wildcard (e.g. "Co2L0.70: 0.10"). If "False", then the shares are obtained depending on the "demand" wildcard and "planning_horizons" wildcard as listed below (e.g. "DF_2050: 0.08") + land_transport_electric_share: + Co2L2.0: 0.00 + Co2L1.0: 0.01 + Co2L0.90: 0.03 + Co2L0.80: 0.06 + Co2L0.70: 0.10 + Co2L0.60: 0.17 + Co2L0.50: 0.27 + Co2L0.40: 0.40 + Co2L0.30: 0.55 + Co2L0.20: 0.69 + Co2L0.10: 0.80 + Co2L0.00: 0.88 + land_transport_fuel_cell_share: + Co2L2.0: 0.01 + Co2L1.0: 0.01 + Co2L0.90: 0.01 + Co2L0.80: 0.01 + Co2L0.70: 0.01 + Co2L0.60: 0.01 + Co2L0.50: 0.01 + Co2L0.40: 0.01 + Co2L0.30: 0.01 + Co2L0.20: 0.01 + Co2L0.10: 0.01 + Co2L0.00: 0.01 + + land_transport_fuel_cell_share: # 1 means all FCEVs HERE + BU_2030: 0.00 + AP_2030: 0.004 + NZ_2030: 0.02 + DF_2030: 0.01 + AB_2030: 0.01 + BU_2050: 0.00 + AP_2050: 0.06 + NZ_2050: 0.28 + DF_2050: 0.08 + + land_transport_electric_share: # 1 means all EVs # This leads to problems when non-zero HERE + BU_2030: 0.00 + AP_2030: 0.075 + NZ_2030: 0.13 + DF_2030: 0.01 + AB_2030: 0.01 + BU_2050: 0.00 + AP_2050: 0.42 + NZ_2050: 0.68 + DF_2050: 0.011 From 0e554c5287d6cb9aaced0563e318f8309a131a93 Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 6 Nov 2024 09:03:29 +0100 Subject: [PATCH 07/19] Add a weather config --- configs/config.weather.yaml | 148 ++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 configs/config.weather.yaml diff --git a/configs/config.weather.yaml b/configs/config.weather.yaml new file mode 100644 index 000000000..b7f8f0a3d --- /dev/null +++ b/configs/config.weather.yaml @@ -0,0 +1,148 @@ +# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + +version: 0.4.1 + +load_options: + weather_year: 2013 # Load scenarios available with different weather year (different renewable potentials) + + +atlite: + nprocesses: 4 + cutouts: + cutout-2013-era5: + module: era5 + dx: 0.3 # cutout resolution + dy: 0.3 # cutout resolution + # The cutout time is automatically set by the snapshot range. See `snapshot:` option above and 'build_cutout.py'. + # time: ["2013-01-01", "2014-01-01"] # to manually specify a different weather year (~70 years available) + # The cutout spatial extent [x,y] is automatically set by country selection. See `countires:` option above and 'build_cutout.py'. + # x: [-12., 35.] # set cutout range manual, instead of automatic by boundaries of country + # y: [33., 72] # manual set cutout range + +renewable: + onwind: + cutout: cutout-2013-era5 + resource: + method: wind + turbine: Vestas_V112_3MW + capacity_per_sqkm: 3 # conservative, ScholzPhd Tab 4.3.1: 10MW/km^2 + # correction_factor: 0.93 + copernicus: + # Scholz, Y. (2012). Renewable energy based electricity supply at low costs: + # development of the REMix model and application for Europe. ( p.42 / p.28) + # CLC grid codes: + # 11X/12X - Various forest types + # 20 - Shrubs + # 30 - Herbaceus vegetation + # 40 - Cropland + # 50 - Urban + # 60 - Bare / Sparse vegetation + # 80 - Permanent water bodies + # 100 - Moss and lichen + # 200 - Open sea + grid_codes: [20, 30, 40, 60, 100, 111, 112, 113, 114, 115, 116, 121, 122, 123, 124, 125, 126] + distance: 1000 + distance_grid_codes: [50] + natura: true + potential: simple # or conservative + clip_p_max_pu: 1.e-2 + extendable: true + offwind-ac: + cutout: cutout-2013-era5 + resource: + method: wind + turbine: NREL_ReferenceTurbine_5MW_offshore + capacity_per_sqkm: 2 + # correction_factor: 0.8855 + # proxy for wake losses + # from 10.1016/j.energy.2018.08.153 + # until done more rigorously in #153 + copernicus: + grid_codes: [80, 200] + natura: true + max_depth: 50 + max_shore_distance: 30000 + potential: simple # or conservative + clip_p_max_pu: 1.e-2 + extendable: true + offwind-dc: + cutout: cutout-2013-era5 + resource: + method: wind + turbine: NREL_ReferenceTurbine_5MW_offshore + # ScholzPhd Tab 4.3.1: 10MW/km^2 + capacity_per_sqkm: 3 + # correction_factor: 0.8855 + # proxy for wake losses + # from 10.1016/j.energy.2018.08.153 + # until done more rigorously in #153 + copernicus: + grid_codes: [80, 200] + natura: true + max_depth: 50 + min_shore_distance: 30000 + potential: simple # or conservative + clip_p_max_pu: 1.e-2 + extendable: true + solar: + cutout: cutout-2013-era5 + resource: + method: pv + panel: CSi + orientation: latitude_optimal # will lead into optimal design + # slope: 0. # slope: 0 represent a flat panel + # azimuth: 180. # azimuth: 180 south orientation + capacity_per_sqkm: 4.6 # From 1.7 to 4.6 addresses issue #361 + # Determined by comparing uncorrected area-weighted full-load hours to those + # published in Supplementary Data to + # Pietzcker, Robert Carl, et al. "Using the sun to decarbonize the power + # sector: The economic potential of photovoltaics and concentrating solar + # power." Applied Energy 135 (2014): 704-720. + correction_factor: 0.854337 + copernicus: + grid_codes: [20, 30, 40, 50, 60, 90, 100] + natura: true + potential: simple # or conservative + clip_p_max_pu: 1.e-2 + extendable: true + hydro: + cutout: cutout-2013-era5 + hydrobasins_level: 6 + resource: + method: hydro + hydrobasins: data/hydrobasins/hybas_world.shp + flowspeed: 1.0 # m/s + # weight_with_height: false + # show_progress: true + carriers: [ror, PHS, hydro] + PHS_max_hours: 6 + hydro_max_hours: "energy_capacity_totals_by_country" # not active + hydro_max_hours_default: 6.0 # (optional, default 6) Default value of max_hours for hydro when NaN values are found + clip_min_inflow: 1.0 + extendable: true + normalization: + method: hydro_capacities # 'hydro_capacities' to rescale country hydro production by using hydro_capacities, 'eia' to rescale by eia data, false for no rescaling + year: 2013 # (optional) year of statistics used to rescale the runoff time series. When not provided, the cutout weather year is used + multiplier: 1.1 # multiplier applied after the normalization of the hydro production; default 1.0 + csp: + cutout: cutout-2013-era5 + resource: + method: csp + installation: SAM_solar_tower + capacity_per_sqkm: 2.392 # From 1.7 to 4.6 addresses issue #361 + # Determined by comparing uncorrected area-weighted full-load hours to those + # published in Supplementary Data to + # Pietzcker, Robert Carl, et al. "Using the sun to decarbonize the power + # sector: The economic potential of photovoltaics and concentrating solar + # power." Applied Energy 135 (2014): 704-720. + copernicus: + grid_codes: [20, 30, 40, 60, 90] + distancing_codes: [50] + distance_to_codes: 3000 + natura: true + potential: simple # or conservative + clip_p_max_pu: 1.e-2 + extendable: true + csp_model: advanced # simple or advanced From a8ecb2cbb944f9691fe98af286ba809a035f740d Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 6 Nov 2024 09:03:52 +0100 Subject: [PATCH 08/19] Clean-up the default config --- config.default.yaml | 617 -------------------------------------------- 1 file changed, 617 deletions(-) diff --git a/config.default.yaml b/config.default.yaml index 431812b94..5a24e3a99 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -32,7 +32,6 @@ enable: progress_bar: true # show progress bar during downloading routines and other long-running tasks - custom_rules: [] # Default empty [] or link to custom rule file e.g. ["my_folder/my_rules.smk"] that add rules to Snakefile run: @@ -58,12 +57,6 @@ snapshots: end: "2014-01-01" inclusive: "left" # end is not inclusive -# definition of the Coordinate Reference Systems -crs: - geo_crs: EPSG:4326 # general geographic projection, not used for metric measures. "EPSG:4326" is the standard used by OSM and google maps - distance_crs: EPSG:3857 # projection for distance measurements only. Possible recommended values are "EPSG:3857" (used by OSM and Google Maps) - area_crs: ESRI:54009 # projection for area measurements only. Possible recommended values are Global Mollweide "ESRI:54009" - # download_osm_data_nprocesses: 10 # (optional) number of threads used to download osm data augmented_line_connection: @@ -76,37 +69,15 @@ augmented_line_connection: cluster_options: simplify_network: - to_substations: false # network is simplified to nodes with positive or negative power injection (i.e. substations or offwind connections) - algorithm: kmeans # choose from: [hac, kmeans] - feature: solar+onwind-time # only for hac. choose from: [solar+onwind-time, solar+onwind-cap, solar-time, solar-cap, solar+offwind-cap] etc. exclude_carriers: [] remove_stubs: true remove_stubs_across_borders: true p_threshold_drop_isolated: 20 # [MW] isolated buses are being discarded if bus mean power is below the specified threshold p_threshold_merge_isolated: 300 # [MW] isolated buses are being merged into a single isolated bus if a bus mean power is below the specified threshold s_threshold_fetch_isolated: 0.05 # [-] a share of the national load for merging an isolated network into a backbone network - cluster_network: - algorithm: kmeans - feature: solar+onwind-time - exclude_carriers: [] - alternative_clustering: false # "False" use Voronoi shapes, "True" use GADM shapes - distribute_cluster: ["load"] # Distributes cluster nodes per country according to ['load'],['pop'] or ['gdp'] - out_logging: true # When "True", logging is printed to console - aggregation_strategies: - generators: # use "min" for more conservative assumptions - p_nom: sum - p_nom_max: sum - p_nom_min: sum - p_min_pu: mean - marginal_cost: mean - committable: any - ramp_limit_up: max - ramp_limit_down: max - efficiency: mean build_shape_options: gadm_layer_id: 1 # GADM level area used for the gadm_shapes. Codes are country-dependent but roughly: 0: country, 1: region/county-like, 2: municipality-like - update_file: false # When true, all the input files are downloaded again and replace the existing files out_logging: true # When true, logging is printed to console year: 2020 # reference year used to derive shapes, info on population and info on GDP nprocesses: 3 # number of processes to be used in build_shapes @@ -141,7 +112,6 @@ base_network: load_options: ssp: "ssp2-2.6" # shared socio-economic pathway (GDP and population growth) scenario to consider - weather_year: 2013 # Load scenarios available with different weather year (different renewable potentials) prediction_year: 2030 # Load scenarios available with different prediction year (GDP, population) scale: 1 # scales all load time-series, i.e. 2 = doubles load @@ -213,145 +183,6 @@ transformers: s_nom: 2000. type: "" -atlite: - nprocesses: 4 - cutouts: - cutout-2013-era5: - module: era5 - dx: 0.3 # cutout resolution - dy: 0.3 # cutout resolution - # The cutout time is automatically set by the snapshot range. See `snapshot:` option above and 'build_cutout.py'. - # time: ["2013-01-01", "2014-01-01"] # to manually specify a different weather year (~70 years available) - # The cutout spatial extent [x,y] is automatically set by country selection. See `countires:` option above and 'build_cutout.py'. - # x: [-12., 35.] # set cutout range manual, instead of automatic by boundaries of country - # y: [33., 72] # manual set cutout range - -renewable: - onwind: - cutout: cutout-2013-era5 - resource: - method: wind - turbine: Vestas_V112_3MW - capacity_per_sqkm: 3 # conservative, ScholzPhd Tab 4.3.1: 10MW/km^2 - # correction_factor: 0.93 - copernicus: - # Scholz, Y. (2012). Renewable energy based electricity supply at low costs: - # development of the REMix model and application for Europe. ( p.42 / p.28) - # CLC grid codes: - # 11X/12X - Various forest types - # 20 - Shrubs - # 30 - Herbaceus vegetation - # 40 - Cropland - # 50 - Urban - # 60 - Bare / Sparse vegetation - # 80 - Permanent water bodies - # 100 - Moss and lichen - # 200 - Open sea - grid_codes: [20, 30, 40, 60, 100, 111, 112, 113, 114, 115, 116, 121, 122, 123, 124, 125, 126] - distance: 1000 - distance_grid_codes: [50] - natura: true - potential: simple # or conservative - clip_p_max_pu: 1.e-2 - extendable: true - offwind-ac: - cutout: cutout-2013-era5 - resource: - method: wind - turbine: NREL_ReferenceTurbine_5MW_offshore - capacity_per_sqkm: 2 - # correction_factor: 0.8855 - # proxy for wake losses - # from 10.1016/j.energy.2018.08.153 - # until done more rigorously in #153 - copernicus: - grid_codes: [80, 200] - natura: true - max_depth: 50 - max_shore_distance: 30000 - potential: simple # or conservative - clip_p_max_pu: 1.e-2 - extendable: true - offwind-dc: - cutout: cutout-2013-era5 - resource: - method: wind - turbine: NREL_ReferenceTurbine_5MW_offshore - # ScholzPhd Tab 4.3.1: 10MW/km^2 - capacity_per_sqkm: 3 - # correction_factor: 0.8855 - # proxy for wake losses - # from 10.1016/j.energy.2018.08.153 - # until done more rigorously in #153 - copernicus: - grid_codes: [80, 200] - natura: true - max_depth: 50 - min_shore_distance: 30000 - potential: simple # or conservative - clip_p_max_pu: 1.e-2 - extendable: true - solar: - cutout: cutout-2013-era5 - resource: - method: pv - panel: CSi - orientation: latitude_optimal # will lead into optimal design - # slope: 0. # slope: 0 represent a flat panel - # azimuth: 180. # azimuth: 180 south orientation - capacity_per_sqkm: 4.6 # From 1.7 to 4.6 addresses issue #361 - # Determined by comparing uncorrected area-weighted full-load hours to those - # published in Supplementary Data to - # Pietzcker, Robert Carl, et al. "Using the sun to decarbonize the power - # sector: The economic potential of photovoltaics and concentrating solar - # power." Applied Energy 135 (2014): 704-720. - correction_factor: 0.854337 - copernicus: - grid_codes: [20, 30, 40, 50, 60, 90, 100] - natura: true - potential: simple # or conservative - clip_p_max_pu: 1.e-2 - extendable: true - hydro: - cutout: cutout-2013-era5 - hydrobasins_level: 6 - resource: - method: hydro - hydrobasins: data/hydrobasins/hybas_world.shp - flowspeed: 1.0 # m/s - # weight_with_height: false - # show_progress: true - carriers: [ror, PHS, hydro] - PHS_max_hours: 6 - hydro_max_hours: "energy_capacity_totals_by_country" # not active - hydro_max_hours_default: 6.0 # (optional, default 6) Default value of max_hours for hydro when NaN values are found - clip_min_inflow: 1.0 - extendable: true - normalization: - method: hydro_capacities # 'hydro_capacities' to rescale country hydro production by using hydro_capacities, 'eia' to rescale by eia data, false for no rescaling - year: 2013 # (optional) year of statistics used to rescale the runoff time series. When not provided, the cutout weather year is used - multiplier: 1.1 # multiplier applied after the normalization of the hydro production; default 1.0 - csp: - cutout: cutout-2013-era5 - resource: - method: csp - installation: SAM_solar_tower - capacity_per_sqkm: 2.392 # From 1.7 to 4.6 addresses issue #361 - # Determined by comparing uncorrected area-weighted full-load hours to those - # published in Supplementary Data to - # Pietzcker, Robert Carl, et al. "Using the sun to decarbonize the power - # sector: The economic potential of photovoltaics and concentrating solar - # power." Applied Energy 135 (2014): 704-720. - copernicus: - grid_codes: [20, 30, 40, 60, 90] - distancing_codes: [50] - distance_to_codes: 3000 - natura: true - potential: simple # or conservative - clip_p_max_pu: 1.e-2 - extendable: true - csp_model: advanced # simple or advanced - # TODO: Needs to be adjusted for Africa. costs: year: 2030 @@ -396,39 +227,6 @@ costs: lines: length_factor: 1.25 #to estimate offwind connection costs - -monte_carlo: - # Description: Specify Monte Carlo sampling options for uncertainty analysis. - # Define the option list for Monte Carlo sampling. - # Make sure add_to_snakefile is set to true to enable Monte-Carlo - options: - add_to_snakefile: false # When set to true, enables Monte Carlo sampling - samples: 9 # number of optimizations. Note that number of samples when using scipy has to be the square of a prime number - sampling_strategy: "chaospy" # "pydoe2", "chaospy", "scipy", packages that are supported - seed: 42 # set seedling for reproducibilty - # Uncertanties on any PyPSA object are specified by declaring the specific PyPSA object under the key 'uncertainties'. - # For each PyPSA object, the 'type' and 'args' keys represent the type of distribution and its argument, respectively. - # Supported distributions types are uniform, normal, lognormal, triangle, beta and gamma. - # The arguments of the distribution are passed using the key 'args' as follows, tailored by distribution type - # normal: [mean, std], lognormal: [mean, std], uniform: [lower_bound, upper_bound], - # triangle: [mid_point (between 0 - 1)], beta: [alpha, beta], gamma: [shape, scale] - # More info on the distributions are documented in the Chaospy reference guide... - # https://chaospy.readthedocs.io/en/master/reference/distribution/index.html - # An abstract example is as follows: - # {pypsa network object, e.g. "loads_t.p_set"}: - # type: {any supported distribution among the previous: "uniform", "normal", ...} - # args: {arguments passed as a list depending on the distribution, see the above and more at https://pypsa.readthedocs.io/} - uncertainties: - loads_t.p_set: - type: uniform - args: [0, 1] - generators_t.p_max_pu.loc[:, n.generators.carrier == "onwind"]: - type: lognormal - args: [1.5] - generators_t.p_max_pu.loc[:, n.generators.carrier == "solar"]: - type: beta - args: [0.5, 2] - # ------------------- SECTOR OPTIONS ------------------- policy_config: @@ -523,121 +321,6 @@ sector: oil: spatial_oil: true - district_heating: - potential: 0.3 #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 - 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 - - 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 - heat_pump_sink_T: 55 #Celsius, based on DTU / large area radiators; used un build_cop_profiles.py - time_dep_hp_cop: true #time dependent heat pump coefficient of performance - solar_cf_correction: 0.788457 # = >>>1/1.2683 - bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S - bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency - 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_avail_max: 0.95 - bev_avail_mean: 0.8 - 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 - v2g: true #allows feed-in to grid from EV battery - bev_dsm: true #turns on EV battery - bev_energy: 0.05 #average battery size in MWh - bev_availability: 0.5 #How many cars do smart charging - transport_fuel_cell_efficiency: 0.5 - transport_internal_combustion_efficiency: 0.3 - industry_util_factor: 0.7 - - biomass_transport: true # biomass transport between nodes - biomass_transport_default_cost: 0.1 #EUR/km/MWh - solid_biomass_potential: 40 # TWh/a, Potential of whole modelled area - biogas_potential: 0.5 # TWh/a, Potential of whole modelled area - - efficiency_heat_oil_to_elec: 0.9 - efficiency_heat_biomass_to_elec: 0.9 - efficiency_heat_gas_to_elec: 0.9 - - dynamic_transport: - enable: false # If "True", then the BEV and FCEV shares are obtained depending on the "Co2L"-wildcard (e.g. "Co2L0.70: 0.10"). If "False", then the shares are obtained depending on the "demand" wildcard and "planning_horizons" wildcard as listed below (e.g. "DF_2050: 0.08") - land_transport_electric_share: - Co2L2.0: 0.00 - Co2L1.0: 0.01 - Co2L0.90: 0.03 - Co2L0.80: 0.06 - Co2L0.70: 0.10 - Co2L0.60: 0.17 - Co2L0.50: 0.27 - Co2L0.40: 0.40 - Co2L0.30: 0.55 - Co2L0.20: 0.69 - Co2L0.10: 0.80 - Co2L0.00: 0.88 - land_transport_fuel_cell_share: - Co2L2.0: 0.01 - Co2L1.0: 0.01 - Co2L0.90: 0.01 - Co2L0.80: 0.01 - Co2L0.70: 0.01 - Co2L0.60: 0.01 - Co2L0.50: 0.01 - Co2L0.40: 0.01 - Co2L0.30: 0.01 - Co2L0.20: 0.01 - Co2L0.10: 0.01 - Co2L0.00: 0.01 - - land_transport_fuel_cell_share: # 1 means all FCEVs HERE - BU_2030: 0.00 - AP_2030: 0.004 - NZ_2030: 0.02 - DF_2030: 0.01 - AB_2030: 0.01 - BU_2050: 0.00 - AP_2050: 0.06 - NZ_2050: 0.28 - DF_2050: 0.08 - - land_transport_electric_share: # 1 means all EVs # This leads to problems when non-zero HERE - BU_2030: 0.00 - AP_2030: 0.075 - NZ_2030: 0.13 - DF_2030: 0.01 - AB_2030: 0.01 - BU_2050: 0.00 - AP_2050: 0.42 - NZ_2050: 0.68 - DF_2050: 0.011 - co2_network: true co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe co2_sequestration_cost: 10 #EUR/tCO2 for sequestration of CO2 @@ -674,303 +357,3 @@ sector: conventional_generation: # generator : carrier OCGT: gas #Gen_Test: oil # Just for testing purposes - - -solving: - options: - formulation: kirchhoff - load_shedding: true - noisy_costs: true - min_iterations: 4 - max_iterations: 6 - clip_p_max_pu: 0.01 - skip_iterations: true - track_iterations: false - # nhours: 10 - - solver: - name: gurobi - options: gurobi-default - - solver_options: - highs-default: - # refer to https://ergo-code.github.io/HiGHS/dev/options/definitions/ - threads: 4 - solver: "ipm" - run_crossover: "off" - small_matrix_value: 1e-6 - large_matrix_value: 1e9 - primal_feasibility_tolerance: 1e-5 - dual_feasibility_tolerance: 1e-5 - ipm_optimality_tolerance: 1e-4 - parallel: "on" - random_seed: 123 - gurobi-default: - threads: 4 - method: 2 # barrier - crossover: 0 - BarConvTol: 1.e-6 - Seed: 123 - AggFill: 0 - PreDual: 0 - GURO_PAR_BARDENSETHRESH: 200 - gurobi-numeric-focus: - NumericFocus: 3 # Favour numeric stability over speed - method: 2 # barrier - crossover: 0 # do not use crossover - BarHomogeneous: 1 # Use homogeneous barrier if standard does not converge - BarConvTol: 1.e-5 - FeasibilityTol: 1.e-4 - OptimalityTol: 1.e-4 - ObjScale: -0.5 - threads: 8 - Seed: 123 - gurobi-fallback: # Use gurobi defaults - crossover: 0 - method: 2 # barrier - BarHomogeneous: 1 # Use homogeneous barrier if standard does not converge - BarConvTol: 1.e-5 - FeasibilityTol: 1.e-5 - OptimalityTol: 1.e-5 - Seed: 123 - threads: 8 - cplex-default: - threads: 4 - lpmethod: 4 # barrier - solutiontype: 2 # non basic solution, ie no crossover - barrier.convergetol: 1.e-5 - feasopt.tolerance: 1.e-6 - copt-default: - Threads: 8 - LpMethod: 2 - Crossover: 0 - cbc-default: {} # Used in CI - glpk-default: {} # Used in CI - - mem: 30000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2 - - -plotting: - map: - figsize: [7, 7] - boundaries: [-10.2, 29, 35, 72] - p_nom: - bus_size_factor: 5.e+4 - linewidth_factor: 3.e+3 - color_geomap: - ocean: white - land: whitesmoke - - costs_max: 10 - costs_threshold: 0.2 - - energy_max: 20000 - energy_min: -20000 - energy_threshold: 15 - - vre_techs: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - conv_techs: - - OCGT - - CCGT - - nuclear - - Nuclear - - coal - - oil - storage_techs: - - hydro+PHS - - battery - - H2 - renewable_storage_techs: - - PHS - - hydro - 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: - onwind: #235ebc - onshore wind: #235ebc - offwind: #6895dd - offwind-ac: #6895dd - offshore wind: #6895dd - offshore wind ac: #6895dd - offshore wind (AC): #6895dd - offwind-dc: #74c6f2 - offshore wind dc: #74c6f2 - offshore wind (DC): #74c6f2 - wave: #004444 - hydro: #08ad97 - hydro+PHS: #08ad97 - PHS: #08ad97 - hydro reservoir: #08ad97 - hydroelectricity: #08ad97 - ror: #4adbc8 - run of river: #4adbc8 - solar: #f9d002 - solar PV: #f9d002 - solar thermal: #ffef60 - solar rooftop: #ffef60 - biomass: #0c6013 - solid biomass: #06540d - solid biomass for industry co2 from atmosphere: #654321 - solid biomass for industry co2 to stored: #654321 - solid biomass for industry CC: #654321 - biogas: #23932d - waste: #68896b - geothermal: #ba91b1 - OCGT: #d35050 - OCGT marginal: sandybrown - OCGT-heat: #ee8340 - gas: #d35050 - natural gas: #d35050 - gas boiler: #ee8340 - gas boilers: #ee8340 - gas boiler marginal: #ee8340 - gas-to-power/heat: brown - SMR: #4F4F2F - SMR CC: darkblue - oil: #262626 - oil boiler: #B5A642 - oil emissions: #666666 - gas for industry: #333333 - gas for industry CC: brown - gas for industry co2 to atmosphere: #654321 - gas for industry co2 to stored: #654321 - nuclear: #ff9000 - Nuclear: r - Nuclear marginal: r - uranium: r - coal: #707070 - Coal: k - Coal marginal: k - lignite: #9e5a01 - Lignite: grey - Lignite marginal: grey - H2: #ea048a - H2 for industry: #222222 - H2 for shipping: #6495ED - H2 liquefaction: m - hydrogen storage: #ea048a - battery: slategray - battery discharger: slategray - battery charger: slategray - battery storage: slategray - home battery: #614700 - home battery storage: #614700 - lines: #70af1d - transmission lines: #70af1d - AC: #70af1d - AC-AC: #70af1d - AC line: #70af1d - links: #8a1caf - HVDC links: #8a1caf - DC: #8a1caf - DC-DC: #8a1caf - DC link: #8a1caf - load: #ff0000 - load shedding: #ff0000 - Electric load: b - electricity: k - electric demand: k - electricity distribution grid: y - heat: darkred - Heat load: r - heat pumps: #76EE00 - heat pump: #76EE00 - air heat pump: #76EE00 - ground heat pump: #40AA00 - CHP: r - CHP heat: r - CHP electric: r - heat demand: darkred - rural heat: #880000 - central heat: #b22222 - decentral heat: #800000 - low-temperature heat for industry: #991111 - process heat: #FF3333 - power-to-heat: red - resistive heater: pink - Sabatier: #FF1493 - methanation: #FF1493 - power-to-gas: purple - power-to-liquid: darkgreen - helmeth: #7D0552 - DAC: deeppink - co2 stored: #123456 - CO2 pipeline: gray - CO2 sequestration: #123456 - co2: #123456 - co2 vent: #654321 - process emissions: #222222 - process emissions CC: gray - process emissions to stored: #444444 - process emissions to atmosphere: #888888 - agriculture heat: #D07A7A - agriculture machinery oil: #1e1e1e - agriculture machinery oil emissions: #111111 - agriculture electricity: #222222 - Fischer-Tropsch: #44DD33 - kerosene for aviation: #44BB11 - naphtha for industry: #44FF55 - land transport oil: #44DD33 - land transport oil emissions: #666666 - land transport fuel cell: #AAAAAA - land transport EV: grey - V2G: grey - BEV charger: grey - shipping: #6495ED - shipping oil: #6495ED - shipping oil emissions: #6495ED - water tanks: #BBBBBB - hot water storage: #BBBBBB - hot water charging: #BBBBBB - hot water discharging: #999999 - Li ion: grey - district heating: #CC4E5C - retrofitting: purple - building retrofitting: purple - solid biomass transport: green - biomass EOP: green - high-temp electrolysis: magenta - today: #D2691E - Ambient: k - - nice_names: - OCGT: Open-Cycle Gas - CCGT: Combined-Cycle Gas - offwind-ac: Offshore Wind (AC) - offwind-dc: Offshore Wind (DC) - onwind: Onshore Wind - solar: Solar - PHS: Pumped Hydro Storage - hydro: Reservoir & Dam - battery: Battery Storage - H2: Hydrogen Storage - lines: Transmission Lines - ror: Run of River From 17b1345f0b2c7bed3459503f0b094eaea634bdf2 Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 6 Nov 2024 09:10:20 +0100 Subject: [PATCH 09/19] Add an electricity config --- config.default.yaml | 56 ------------------------------- configs/config.elec.yaml | 71 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 56 deletions(-) create mode 100644 configs/config.elec.yaml diff --git a/config.default.yaml b/config.default.yaml index 5a24e3a99..08f4f2c5c 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -86,51 +86,20 @@ build_shape_options: gdp_method: "standard" # "standard" pulls from web 1x1km raster, false (not "false") no gdp addition to shape which useful when generating only cutout contended_flag: "set_by_country" # "set_by_country" assigns the contended areas to the countries according to the GADM database, "drop" drops these contended areas from the model -clean_osm_data_options: # osm = OpenStreetMap - names_by_shapes: true # Set the country name based on the extended country shapes - threshold_voltage: 51000 # [V] minimum voltage threshold to keep the asset (cable, line, generator, etc.) [V] - tag_substation: "transmission" # Filters only substations with 'transmission' tag, ('distribution' also available) - add_line_endings: true # When "True", then line endings are added to the dataset of the substations - generator_name_method: OSM # Methodology to specify the name to the generator. Options: OSM (name as by OSM dataset), closest_city (name by the closest city) - use_custom_lines: "OSM_only" # Use OSM (OSM_only), customized (custom_only), or both data sets (add_custom) - path_custom_lines: false # If exists, provide the specific absolute path of the custom file e.g. (...\data\custom_lines.geojson) - use_custom_substations: "OSM_only" # Use OSM (OSM_only), customized (custom_only), or both data sets (add_custom) - path_custom_substations: false # If exists, provide the specific absolute path of the custom file e.g. (...\data\custom_substations.geojson) - use_custom_cables: "OSM_only" # Use OSM (OSM_only), customized (custom_only), or both data sets (add_custom) - path_custom_cables: false # If exists, provide the specific absolute path of the custom file e.g. (...\data\custom_cables.geojson) - build_osm_network: # Options of the build_osm_network script; osm = OpenStreetMap - group_close_buses: true # When "True", close buses are merged and guarantee the voltage matching among line endings - group_tolerance_buses: 5000 # [m] (default 5000) Tolerance in meters of the close buses to merge - split_overpassing_lines: true # When True, lines overpassing buses are splitted and connected to the bueses - overpassing_lines_tolerance: 1 # [m] (default 1) Tolerance to identify lines overpassing buses force_ac: false # When true, it forces all components (lines and substation) to be AC-only. To be used if DC assets create problem. -base_network: - min_voltage_substation_offshore: 51000 # [V] minimum voltage of the offshore substations - min_voltage_rebase_voltage: 51000 # [V] minimum voltage in base network - load_options: ssp: "ssp2-2.6" # shared socio-economic pathway (GDP and population growth) scenario to consider prediction_year: 2030 # Load scenarios available with different prediction year (GDP, population) scale: 1 # scales all load time-series, i.e. 2 = doubles load electricity: - base_voltage: 380. - voltages: [132., 220., 300., 380., 500., 750.] co2limit: 7.75e+7 # European default, 0.05 * 3.1e9*0.5, needs to be adjusted for Africa co2base: 1.487e+9 # European default, adjustment to Africa necessary - agg_p_nom_limits: data/agg_p_nom_minmax.csv - hvdc_as_lines: false # should HVDC lines be modeled as `Line` or as `Link` component? automatic_emission: false automatic_emission_base_year: 1990 # 1990 is taken as default. Any year from 1970 to 2018 can be selected. - operational_reserve: # like https://genxproject.github.io/GenX/dev/core/#Reserves - activate: false - epsilon_load: 0.02 # share of total load - epsilon_vres: 0.02 # share of total renewable supply - contingency: 0 # fixed capacity in MW - max_hours: battery: 6 H2: 168 @@ -158,31 +127,6 @@ electricity: Onshore: [onwind] PV: [solar] -lines: - ac_types: - 132.: "243-AL1/39-ST1A 20.0" - 220.: "Al/St 240/40 2-bundle 220.0" - 300.: "Al/St 240/40 3-bundle 300.0" - 380.: "Al/St 240/40 4-bundle 380.0" - 500.: "Al/St 240/40 4-bundle 380.0" - 750.: "Al/St 560/50 4-bundle 750.0" - dc_types: - 500.: "HVDC XLPE 1000" - s_max_pu: 0.7 - s_nom_max: .inf - length_factor: 1.25 - under_construction: "zero" # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity - -links: - p_max_pu: 1.0 - p_nom_max: .inf - under_construction: "zero" # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity - -transformers: - x: 0.1 - s_nom: 2000. - type: "" - # TODO: Needs to be adjusted for Africa. costs: year: 2030 diff --git a/configs/config.elec.yaml b/configs/config.elec.yaml new file mode 100644 index 000000000..adce6abfe --- /dev/null +++ b/configs/config.elec.yaml @@ -0,0 +1,71 @@ +# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + +version: 0.4.1 + +clean_osm_data_options: # osm = OpenStreetMap + names_by_shapes: true # Set the country name based on the extended country shapes + threshold_voltage: 51000 # [V] minimum voltage threshold to keep the asset (cable, line, generator, etc.) [V] + tag_substation: "transmission" # Filters only substations with 'transmission' tag, ('distribution' also available) + add_line_endings: true # When "True", then line endings are added to the dataset of the substations + generator_name_method: OSM # Methodology to specify the name to the generator. Options: OSM (name as by OSM dataset), closest_city (name by the closest city) + use_custom_lines: "OSM_only" # Use OSM (OSM_only), customized (custom_only), or both data sets (add_custom) + path_custom_lines: false # If exists, provide the specific absolute path of the custom file e.g. (...\data\custom_lines.geojson) + use_custom_substations: "OSM_only" # Use OSM (OSM_only), customized (custom_only), or both data sets (add_custom) + path_custom_substations: false # If exists, provide the specific absolute path of the custom file e.g. (...\data\custom_substations.geojson) + use_custom_cables: "OSM_only" # Use OSM (OSM_only), customized (custom_only), or both data sets (add_custom) + path_custom_cables: false # If exists, provide the specific absolute path of the custom file e.g. (...\data\custom_cables.geojson) + +build_osm_network: # Options of the build_osm_network script; osm = OpenStreetMap + group_close_buses: true # When "True", close buses are merged and guarantee the voltage matching among line endings + group_tolerance_buses: 5000 # [m] (default 5000) Tolerance in meters of the close buses to merge + split_overpassing_lines: true # When True, lines overpassing buses are splitted and connected to the bueses + overpassing_lines_tolerance: 1 # [m] (default 1) Tolerance to identify lines overpassing buses + force_ac: false # When true, it forces all components (lines and substation) to be AC-only. To be used if DC assets create problem. + +base_network: + min_voltage_substation_offshore: 51000 # [V] minimum voltage of the offshore substations + min_voltage_rebase_voltage: 51000 # [V] minimum voltage in base network + +electricity: + base_voltage: 380. + voltages: [132., 220., 300., 380., 500., 750.] + co2limit: 7.75e+7 # European default, 0.05 * 3.1e9*0.5, needs to be adjusted for Africa + co2base: 1.487e+9 # European default, adjustment to Africa necessary + agg_p_nom_limits: data/agg_p_nom_minmax.csv + hvdc_as_lines: false # should HVDC lines be modeled as `Line` or as `Link` component? + automatic_emission: false + automatic_emission_base_year: 1990 # 1990 is taken as default. Any year from 1970 to 2018 can be selected. + + operational_reserve: # like https://genxproject.github.io/GenX/dev/core/#Reserves + activate: false + epsilon_load: 0.02 # share of total load + epsilon_vres: 0.02 # share of total renewable supply + contingency: 0 # fixed capacity in MW + + +lines: + ac_types: + 132.: "243-AL1/39-ST1A 20.0" + 220.: "Al/St 240/40 2-bundle 220.0" + 300.: "Al/St 240/40 3-bundle 300.0" + 380.: "Al/St 240/40 4-bundle 380.0" + 500.: "Al/St 240/40 4-bundle 380.0" + 750.: "Al/St 560/50 4-bundle 750.0" + dc_types: + 500.: "HVDC XLPE 1000" + s_max_pu: 0.7 + s_nom_max: .inf + length_factor: 1.25 + under_construction: "zero" # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity + +links: + p_max_pu: 1.0 + p_nom_max: .inf + under_construction: "zero" # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity + +transformers: + x: 0.1 + s_nom: 2000. + type: "" From 2b46e5e4a10cfb2a86b95e3761f60a6044ec58b4 Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 6 Nov 2024 09:10:55 +0100 Subject: [PATCH 10/19] Move solar thermal to the weather config --- config.default.yaml | 6 ------ configs/config.weather.yaml | 6 ++++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/config.default.yaml b/config.default.yaml index 08f4f2c5c..af433444d 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -223,12 +223,6 @@ custom_data: industry: reference_year: 2015 -solar_thermal: - clearsky_model: simple - orientation: - slope: 45. - azimuth: 180. - existing_capacities: grouping_years_power: [1960, 1965, 1970, 1975, 1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2020, 2025, 2030] grouping_years_heat: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] # these should not extend 2020 diff --git a/configs/config.weather.yaml b/configs/config.weather.yaml index b7f8f0a3d..706b0063b 100644 --- a/configs/config.weather.yaml +++ b/configs/config.weather.yaml @@ -146,3 +146,9 @@ renewable: clip_p_max_pu: 1.e-2 extendable: true csp_model: advanced # simple or advanced + +solar_thermal: + clearsky_model: simple + orientation: + slope: 45. + azimuth: 180. From f1a0c14c165bcf67da6be1a14c8714503693f99f Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 6 Nov 2024 09:17:06 +0100 Subject: [PATCH 11/19] Add a hydrogen config --- config.default.yaml | 20 -------------------- configs/config.hydrogen.yaml | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 20 deletions(-) create mode 100644 configs/config.hydrogen.yaml diff --git a/config.default.yaml b/config.default.yaml index af433444d..1f35a2c76 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -242,15 +242,6 @@ sector: network_data_GGIT_status: ["Construction", "Operating", "Idle", "Shelved", "Mothballed", "Proposed"] hydrogen: network: true - H2_retrofit_capacity_per_CH4: 0.6 - network_limit: 2000 #GWkm - network_routes: gas # "gas or "greenfield". If "gas" -> the network data are fetched from ["sector"]["gas"]["network_data"]. If "greenfield" -> the network follows the topology of electrical transmission lines - gas_network_repurposing: true # If true -> ["sector"]["gas"]["network"] is automatically false - underground_storage: false - hydrogen_colors: false - set_color_shares: false - blue_share: 0.40 - pink_share: 0.05 coal: shift_to_elec: true # If true, residential and services demand of coal is shifted to electricity. If false, the final energy demand of coal is disregarded @@ -266,17 +257,6 @@ sector: shipping_hydrogen_liquefaction: false shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - shipping_hydrogen_share: #1.0 - BU_2030: 0.00 - AP_2030: 0.00 - NZ_2030: 0.10 - DF_2030: 0.05 - AB_2030: 0.05 - BU_2050: 0.00 - AP_2050: 0.25 - NZ_2050: 0.36 - DF_2050: 0.12 - gadm_level: 1 h2_cavern: true marginal_cost_storage: 0 diff --git a/configs/config.hydrogen.yaml b/configs/config.hydrogen.yaml new file mode 100644 index 000000000..a36d4ac3d --- /dev/null +++ b/configs/config.hydrogen.yaml @@ -0,0 +1,36 @@ +# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + +version: 0.4.1 + +sector: + hydrogen: + network: true + H2_retrofit_capacity_per_CH4: 0.6 + network_limit: 2000 #GWkm + network_routes: gas # "gas or "greenfield". If "gas" -> the network data are fetched from ["sector"]["gas"]["network_data"]. If "greenfield" -> the network follows the topology of electrical transmission lines + gas_network_repurposing: true # If true -> ["sector"]["gas"]["network"] is automatically false + underground_storage: false + hydrogen_colors: false + set_color_shares: false + blue_share: 0.40 + pink_share: 0.05 + + hydrogen_underground_storage: true + shipping_hydrogen_liquefaction: false + shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 + + gadm_level: 1 + h2_cavern: true + marginal_cost_storage: 0 + methanation: true + helmeth: true + dac: true + SMR: true + SMR CC: true + cc_fraction: 0.9 + cc: true + airport_sizing_factor: 3 + + min_part_load_fischer_tropsch: 0.9 From a38a2878475b945226dd5323e18f6e8d8a9c86ea Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 6 Nov 2024 09:19:31 +0100 Subject: [PATCH 12/19] Add a costs config --- config.default.yaml | 44 ----------------------------------- configs/config.costs.yaml | 49 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 44 deletions(-) create mode 100644 configs/config.costs.yaml diff --git a/config.default.yaml b/config.default.yaml index 1f35a2c76..7999178b4 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -127,50 +127,6 @@ electricity: Onshore: [onwind] PV: [solar] -# TODO: Needs to be adjusted for Africa. -costs: - year: 2030 - version: v0.6.2 - discountrate: [0.071] #, 0.086, 0.111] - # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501 - USD2013_to_EUR2013: 0.7532 # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html - rooftop_share: 0.14 # based on the potentials, assuming (0.1 kW/m2 and 10 m2/person) - fill_values: - FOM: 0 - VOM: 0 - efficiency: 1 - fuel: 0 - investment: 0 - lifetime: 25 - CO2 intensity: 0 - discount rate: 0.07 - marginal_cost: # EUR/MWh - solar: 0.01 - onwind: 0.015 - offwind: 0.015 - hydro: 0. - H2: 0. - electrolysis: 0. - fuel cell: 0. - battery: 0. - battery inverter: 0. - emission_prices: # in currency per tonne emission, only used with the option Ep - co2: 0. - # investment: # EUR/MW - # CCGT: 830000 - # FOM: # %/year - # CCGT: 3.35 - # VOM: # EUR/MWh - # CCGT: 4.2 - # fuel: # EUR/MWh - # gas: 10.1 - # lifetime: # years - # CCGT: 25.0 - # efficiency: # per unit - # CCGT: 0.58 - lines: - length_factor: 1.25 #to estimate offwind connection costs - # ------------------- SECTOR OPTIONS ------------------- policy_config: diff --git a/configs/config.costs.yaml b/configs/config.costs.yaml new file mode 100644 index 000000000..0613d7255 --- /dev/null +++ b/configs/config.costs.yaml @@ -0,0 +1,49 @@ +# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + +version: 0.4.1 + +# TODO: Needs to be adjusted for Africa. +costs: + year: 2030 + version: v0.6.2 + discountrate: [0.071] #, 0.086, 0.111] + # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501 + USD2013_to_EUR2013: 0.7532 # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html + rooftop_share: 0.14 # based on the potentials, assuming (0.1 kW/m2 and 10 m2/person) + fill_values: + FOM: 0 + VOM: 0 + efficiency: 1 + fuel: 0 + investment: 0 + lifetime: 25 + CO2 intensity: 0 + discount rate: 0.07 + marginal_cost: # EUR/MWh + solar: 0.01 + onwind: 0.015 + offwind: 0.015 + hydro: 0. + H2: 0. + electrolysis: 0. + fuel cell: 0. + battery: 0. + battery inverter: 0. + emission_prices: # in currency per tonne emission, only used with the option Ep + co2: 0. + # investment: # EUR/MW + # CCGT: 830000 + # FOM: # %/year + # CCGT: 3.35 + # VOM: # EUR/MWh + # CCGT: 4.2 + # fuel: # EUR/MWh + # gas: 10.1 + # lifetime: # years + # CCGT: 25.0 + # efficiency: # per unit + # CCGT: 0.58 + lines: + length_factor: 1.25 #to estimate offwind connection costs From fcdef0170bdd2ceb20f6e167d04dec47ea1233c7 Mon Sep 17 00:00:00 2001 From: ekatef Date: Mon, 11 Nov 2024 22:46:20 +0100 Subject: [PATCH 13/19] Rename a geometry config --- configs/{config.geometry.yaml => config.spatial.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename configs/{config.geometry.yaml => config.spatial.yaml} (100%) diff --git a/configs/config.geometry.yaml b/configs/config.spatial.yaml similarity index 100% rename from configs/config.geometry.yaml rename to configs/config.spatial.yaml From a054730b6803e04109a5b58d2c98db929c0884f7 Mon Sep 17 00:00:00 2001 From: ekatef Date: Mon, 11 Nov 2024 22:52:34 +0100 Subject: [PATCH 14/19] Merge the config-related files --- configs/config.heating.yaml | 42 ----------------- configs/config.hydrogen.yaml | 36 --------------- configs/config.transport.yaml | 86 ----------------------------------- 3 files changed, 164 deletions(-) delete mode 100644 configs/config.heating.yaml delete mode 100644 configs/config.hydrogen.yaml delete mode 100644 configs/config.transport.yaml diff --git a/configs/config.heating.yaml b/configs/config.heating.yaml deleted file mode 100644 index b8bc08d66..000000000 --- a/configs/config.heating.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors -# -# SPDX-License-Identifier: CC0-1.0 - -version: 0.4.1 - -sector: - district_heating: - potential: 0.3 #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 - 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 - - 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 - heat_pump_sink_T: 55 #Celsius, based on DTU / large area radiators; used un build_cop_profiles.py - time_dep_hp_cop: true #time dependent heat pump coefficient of performance - solar_cf_correction: 0.788457 # = >>>1/1.2683 diff --git a/configs/config.hydrogen.yaml b/configs/config.hydrogen.yaml deleted file mode 100644 index a36d4ac3d..000000000 --- a/configs/config.hydrogen.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors -# -# SPDX-License-Identifier: CC0-1.0 - -version: 0.4.1 - -sector: - hydrogen: - network: true - H2_retrofit_capacity_per_CH4: 0.6 - network_limit: 2000 #GWkm - network_routes: gas # "gas or "greenfield". If "gas" -> the network data are fetched from ["sector"]["gas"]["network_data"]. If "greenfield" -> the network follows the topology of electrical transmission lines - gas_network_repurposing: true # If true -> ["sector"]["gas"]["network"] is automatically false - underground_storage: false - hydrogen_colors: false - set_color_shares: false - blue_share: 0.40 - pink_share: 0.05 - - hydrogen_underground_storage: true - shipping_hydrogen_liquefaction: false - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - - gadm_level: 1 - h2_cavern: true - marginal_cost_storage: 0 - methanation: true - helmeth: true - dac: true - SMR: true - SMR CC: true - cc_fraction: 0.9 - cc: true - airport_sizing_factor: 3 - - min_part_load_fischer_tropsch: 0.9 diff --git a/configs/config.transport.yaml b/configs/config.transport.yaml deleted file mode 100644 index 5ae5d98df..000000000 --- a/configs/config.transport.yaml +++ /dev/null @@ -1,86 +0,0 @@ -# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors -# -# SPDX-License-Identifier: CC0-1.0 - -version: 0.4.1 - -sector: - bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S - bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency - 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_avail_max: 0.95 - bev_avail_mean: 0.8 - 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 - v2g: true #allows feed-in to grid from EV battery - bev_dsm: true #turns on EV battery - bev_energy: 0.05 #average battery size in MWh - bev_availability: 0.5 #How many cars do smart charging - transport_fuel_cell_efficiency: 0.5 - transport_internal_combustion_efficiency: 0.3 - industry_util_factor: 0.7 - - biomass_transport: true # biomass transport between nodes - biomass_transport_default_cost: 0.1 #EUR/km/MWh - solid_biomass_potential: 40 # TWh/a, Potential of whole modelled area - biogas_potential: 0.5 # TWh/a, Potential of whole modelled area - - efficiency_heat_oil_to_elec: 0.9 - efficiency_heat_biomass_to_elec: 0.9 - efficiency_heat_gas_to_elec: 0.9 - - dynamic_transport: - enable: false # If "True", then the BEV and FCEV shares are obtained depending on the "Co2L"-wildcard (e.g. "Co2L0.70: 0.10"). If "False", then the shares are obtained depending on the "demand" wildcard and "planning_horizons" wildcard as listed below (e.g. "DF_2050: 0.08") - land_transport_electric_share: - Co2L2.0: 0.00 - Co2L1.0: 0.01 - Co2L0.90: 0.03 - Co2L0.80: 0.06 - Co2L0.70: 0.10 - Co2L0.60: 0.17 - Co2L0.50: 0.27 - Co2L0.40: 0.40 - Co2L0.30: 0.55 - Co2L0.20: 0.69 - Co2L0.10: 0.80 - Co2L0.00: 0.88 - land_transport_fuel_cell_share: - Co2L2.0: 0.01 - Co2L1.0: 0.01 - Co2L0.90: 0.01 - Co2L0.80: 0.01 - Co2L0.70: 0.01 - Co2L0.60: 0.01 - Co2L0.50: 0.01 - Co2L0.40: 0.01 - Co2L0.30: 0.01 - Co2L0.20: 0.01 - Co2L0.10: 0.01 - Co2L0.00: 0.01 - - land_transport_fuel_cell_share: # 1 means all FCEVs HERE - BU_2030: 0.00 - AP_2030: 0.004 - NZ_2030: 0.02 - DF_2030: 0.01 - AB_2030: 0.01 - BU_2050: 0.00 - AP_2050: 0.06 - NZ_2050: 0.28 - DF_2050: 0.08 - - land_transport_electric_share: # 1 means all EVs # This leads to problems when non-zero HERE - BU_2030: 0.00 - AP_2030: 0.075 - NZ_2030: 0.13 - DF_2030: 0.01 - AB_2030: 0.01 - BU_2050: 0.00 - AP_2050: 0.42 - NZ_2050: 0.68 - DF_2050: 0.011 From 414a21cb30a95ed8d82cddde8d4faa821b902dc9 Mon Sep 17 00:00:00 2001 From: ekatef Date: Mon, 11 Nov 2024 22:53:48 +0100 Subject: [PATCH 15/19] Merge the solving-related files --- configs/config.monte-carlo.yaml | 37 --------------------------------- configs/config.solve.yaml | 32 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 37 deletions(-) delete mode 100644 configs/config.monte-carlo.yaml diff --git a/configs/config.monte-carlo.yaml b/configs/config.monte-carlo.yaml deleted file mode 100644 index 00aabf553..000000000 --- a/configs/config.monte-carlo.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors -# -# SPDX-License-Identifier: CC0-1.0 - -version: 0.4.1 - -monte_carlo: - # Description: Specify Monte Carlo sampling options for uncertainty analysis. - # Define the option list for Monte Carlo sampling. - # Make sure add_to_snakefile is set to true to enable Monte-Carlo - options: - add_to_snakefile: false # When set to true, enables Monte Carlo sampling - samples: 9 # number of optimizations. Note that number of samples when using scipy has to be the square of a prime number - sampling_strategy: "chaospy" # "pydoe2", "chaospy", "scipy", packages that are supported - seed: 42 # set seedling for reproducibilty - # Uncertanties on any PyPSA object are specified by declaring the specific PyPSA object under the key 'uncertainties'. - # For each PyPSA object, the 'type' and 'args' keys represent the type of distribution and its argument, respectively. - # Supported distributions types are uniform, normal, lognormal, triangle, beta and gamma. - # The arguments of the distribution are passed using the key 'args' as follows, tailored by distribution type - # normal: [mean, std], lognormal: [mean, std], uniform: [lower_bound, upper_bound], - # triangle: [mid_point (between 0 - 1)], beta: [alpha, beta], gamma: [shape, scale] - # More info on the distributions are documented in the Chaospy reference guide... - # https://chaospy.readthedocs.io/en/master/reference/distribution/index.html - # An abstract example is as follows: - # {pypsa network object, e.g. "loads_t.p_set"}: - # type: {any supported distribution among the previous: "uniform", "normal", ...} - # args: {arguments passed as a list depending on the distribution, see the above and more at https://pypsa.readthedocs.io/} - uncertainties: - loads_t.p_set: - type: uniform - args: [0, 1] - generators_t.p_max_pu.loc[:, n.generators.carrier == "onwind"]: - type: lognormal - args: [1.5] - generators_t.p_max_pu.loc[:, n.generators.carrier == "solar"]: - type: beta - args: [0.5, 2] diff --git a/configs/config.solve.yaml b/configs/config.solve.yaml index c206afcd3..d152adc9d 100644 --- a/configs/config.solve.yaml +++ b/configs/config.solve.yaml @@ -4,6 +4,38 @@ version: 0.4.1 +monte_carlo: + # Description: Specify Monte Carlo sampling options for uncertainty analysis. + # Define the option list for Monte Carlo sampling. + # Make sure add_to_snakefile is set to true to enable Monte-Carlo + options: + add_to_snakefile: false # When set to true, enables Monte Carlo sampling + samples: 9 # number of optimizations. Note that number of samples when using scipy has to be the square of a prime number + sampling_strategy: "chaospy" # "pydoe2", "chaospy", "scipy", packages that are supported + seed: 42 # set seedling for reproducibilty + # Uncertanties on any PyPSA object are specified by declaring the specific PyPSA object under the key 'uncertainties'. + # For each PyPSA object, the 'type' and 'args' keys represent the type of distribution and its argument, respectively. + # Supported distributions types are uniform, normal, lognormal, triangle, beta and gamma. + # The arguments of the distribution are passed using the key 'args' as follows, tailored by distribution type + # normal: [mean, std], lognormal: [mean, std], uniform: [lower_bound, upper_bound], + # triangle: [mid_point (between 0 - 1)], beta: [alpha, beta], gamma: [shape, scale] + # More info on the distributions are documented in the Chaospy reference guide... + # https://chaospy.readthedocs.io/en/master/reference/distribution/index.html + # An abstract example is as follows: + # {pypsa network object, e.g. "loads_t.p_set"}: + # type: {any supported distribution among the previous: "uniform", "normal", ...} + # args: {arguments passed as a list depending on the distribution, see the above and more at https://pypsa.readthedocs.io/} + uncertainties: + loads_t.p_set: + type: uniform + args: [0, 1] + generators_t.p_max_pu.loc[:, n.generators.carrier == "onwind"]: + type: lognormal + args: [1.5] + generators_t.p_max_pu.loc[:, n.generators.carrier == "solar"]: + type: beta + args: [0.5, 2] + solving: options: formulation: kirchhoff From 829d978bd8ac96242a0db1d0771844f551a26193 Mon Sep 17 00:00:00 2001 From: ekatef Date: Mon, 11 Nov 2024 22:56:47 +0100 Subject: [PATCH 16/19] Include the modular configs into the workflow --- Snakefile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Snakefile b/Snakefile index 218041c67..16552b33c 100644 --- a/Snakefile +++ b/Snakefile @@ -30,6 +30,13 @@ copy_default_files() configfile: "config.default.yaml" configfile: "configs/bundle_config.yaml" configfile: "configs/powerplantmatching_config.yaml" +configfile: "config.spatial.yaml" +configfile: "config.weather.yaml" +configfile: "config.elec.yaml" +configfile: "config.costs.yaml" +configfile: "config.solve.yaml" +configfile: "config.plot.yaml" +configfile: "config.default.yaml" configfile: "config.yaml" From 8b7753536c21fa04c0d508768d8310fe6646cf18 Mon Sep 17 00:00:00 2001 From: ekatef Date: Mon, 11 Nov 2024 23:00:53 +0100 Subject: [PATCH 17/19] Revert "Merge the config-related files" This reverts commit a054730b6803e04109a5b58d2c98db929c0884f7. --- configs/config.heating.yaml | 42 +++++++++++++++++ configs/config.hydrogen.yaml | 36 +++++++++++++++ configs/config.transport.yaml | 86 +++++++++++++++++++++++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 configs/config.heating.yaml create mode 100644 configs/config.hydrogen.yaml create mode 100644 configs/config.transport.yaml diff --git a/configs/config.heating.yaml b/configs/config.heating.yaml new file mode 100644 index 000000000..b8bc08d66 --- /dev/null +++ b/configs/config.heating.yaml @@ -0,0 +1,42 @@ +# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + +version: 0.4.1 + +sector: + district_heating: + potential: 0.3 #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 + 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 + + 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 + heat_pump_sink_T: 55 #Celsius, based on DTU / large area radiators; used un build_cop_profiles.py + time_dep_hp_cop: true #time dependent heat pump coefficient of performance + solar_cf_correction: 0.788457 # = >>>1/1.2683 diff --git a/configs/config.hydrogen.yaml b/configs/config.hydrogen.yaml new file mode 100644 index 000000000..a36d4ac3d --- /dev/null +++ b/configs/config.hydrogen.yaml @@ -0,0 +1,36 @@ +# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + +version: 0.4.1 + +sector: + hydrogen: + network: true + H2_retrofit_capacity_per_CH4: 0.6 + network_limit: 2000 #GWkm + network_routes: gas # "gas or "greenfield". If "gas" -> the network data are fetched from ["sector"]["gas"]["network_data"]. If "greenfield" -> the network follows the topology of electrical transmission lines + gas_network_repurposing: true # If true -> ["sector"]["gas"]["network"] is automatically false + underground_storage: false + hydrogen_colors: false + set_color_shares: false + blue_share: 0.40 + pink_share: 0.05 + + hydrogen_underground_storage: true + shipping_hydrogen_liquefaction: false + shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 + + gadm_level: 1 + h2_cavern: true + marginal_cost_storage: 0 + methanation: true + helmeth: true + dac: true + SMR: true + SMR CC: true + cc_fraction: 0.9 + cc: true + airport_sizing_factor: 3 + + min_part_load_fischer_tropsch: 0.9 diff --git a/configs/config.transport.yaml b/configs/config.transport.yaml new file mode 100644 index 000000000..5ae5d98df --- /dev/null +++ b/configs/config.transport.yaml @@ -0,0 +1,86 @@ +# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + +version: 0.4.1 + +sector: + bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S + bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency + 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_avail_max: 0.95 + bev_avail_mean: 0.8 + 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 + v2g: true #allows feed-in to grid from EV battery + bev_dsm: true #turns on EV battery + bev_energy: 0.05 #average battery size in MWh + bev_availability: 0.5 #How many cars do smart charging + transport_fuel_cell_efficiency: 0.5 + transport_internal_combustion_efficiency: 0.3 + industry_util_factor: 0.7 + + biomass_transport: true # biomass transport between nodes + biomass_transport_default_cost: 0.1 #EUR/km/MWh + solid_biomass_potential: 40 # TWh/a, Potential of whole modelled area + biogas_potential: 0.5 # TWh/a, Potential of whole modelled area + + efficiency_heat_oil_to_elec: 0.9 + efficiency_heat_biomass_to_elec: 0.9 + efficiency_heat_gas_to_elec: 0.9 + + dynamic_transport: + enable: false # If "True", then the BEV and FCEV shares are obtained depending on the "Co2L"-wildcard (e.g. "Co2L0.70: 0.10"). If "False", then the shares are obtained depending on the "demand" wildcard and "planning_horizons" wildcard as listed below (e.g. "DF_2050: 0.08") + land_transport_electric_share: + Co2L2.0: 0.00 + Co2L1.0: 0.01 + Co2L0.90: 0.03 + Co2L0.80: 0.06 + Co2L0.70: 0.10 + Co2L0.60: 0.17 + Co2L0.50: 0.27 + Co2L0.40: 0.40 + Co2L0.30: 0.55 + Co2L0.20: 0.69 + Co2L0.10: 0.80 + Co2L0.00: 0.88 + land_transport_fuel_cell_share: + Co2L2.0: 0.01 + Co2L1.0: 0.01 + Co2L0.90: 0.01 + Co2L0.80: 0.01 + Co2L0.70: 0.01 + Co2L0.60: 0.01 + Co2L0.50: 0.01 + Co2L0.40: 0.01 + Co2L0.30: 0.01 + Co2L0.20: 0.01 + Co2L0.10: 0.01 + Co2L0.00: 0.01 + + land_transport_fuel_cell_share: # 1 means all FCEVs HERE + BU_2030: 0.00 + AP_2030: 0.004 + NZ_2030: 0.02 + DF_2030: 0.01 + AB_2030: 0.01 + BU_2050: 0.00 + AP_2050: 0.06 + NZ_2050: 0.28 + DF_2050: 0.08 + + land_transport_electric_share: # 1 means all EVs # This leads to problems when non-zero HERE + BU_2030: 0.00 + AP_2030: 0.075 + NZ_2030: 0.13 + DF_2030: 0.01 + AB_2030: 0.01 + BU_2050: 0.00 + AP_2050: 0.42 + NZ_2050: 0.68 + DF_2050: 0.011 From ccd98ec92c1b4f72a130d4e0bae736b713d218ce Mon Sep 17 00:00:00 2001 From: ekatef Date: Mon, 11 Nov 2024 23:04:48 +0100 Subject: [PATCH 18/19] Consolidate the configs related to cross-sectoral modelling --- configs/config.heating.yaml | 42 ----------- configs/config.hydrogen.yaml | 36 ---------- ...nfig.transport.yaml => config.sector.yaml} | 71 +++++++++++++++++++ 3 files changed, 71 insertions(+), 78 deletions(-) delete mode 100644 configs/config.heating.yaml delete mode 100644 configs/config.hydrogen.yaml rename configs/{config.transport.yaml => config.sector.yaml} (50%) diff --git a/configs/config.heating.yaml b/configs/config.heating.yaml deleted file mode 100644 index b8bc08d66..000000000 --- a/configs/config.heating.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors -# -# SPDX-License-Identifier: CC0-1.0 - -version: 0.4.1 - -sector: - district_heating: - potential: 0.3 #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 - 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 - - 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 - heat_pump_sink_T: 55 #Celsius, based on DTU / large area radiators; used un build_cop_profiles.py - time_dep_hp_cop: true #time dependent heat pump coefficient of performance - solar_cf_correction: 0.788457 # = >>>1/1.2683 diff --git a/configs/config.hydrogen.yaml b/configs/config.hydrogen.yaml deleted file mode 100644 index a36d4ac3d..000000000 --- a/configs/config.hydrogen.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors -# -# SPDX-License-Identifier: CC0-1.0 - -version: 0.4.1 - -sector: - hydrogen: - network: true - H2_retrofit_capacity_per_CH4: 0.6 - network_limit: 2000 #GWkm - network_routes: gas # "gas or "greenfield". If "gas" -> the network data are fetched from ["sector"]["gas"]["network_data"]. If "greenfield" -> the network follows the topology of electrical transmission lines - gas_network_repurposing: true # If true -> ["sector"]["gas"]["network"] is automatically false - underground_storage: false - hydrogen_colors: false - set_color_shares: false - blue_share: 0.40 - pink_share: 0.05 - - hydrogen_underground_storage: true - shipping_hydrogen_liquefaction: false - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - - gadm_level: 1 - h2_cavern: true - marginal_cost_storage: 0 - methanation: true - helmeth: true - dac: true - SMR: true - SMR CC: true - cc_fraction: 0.9 - cc: true - airport_sizing_factor: 3 - - min_part_load_fischer_tropsch: 0.9 diff --git a/configs/config.transport.yaml b/configs/config.sector.yaml similarity index 50% rename from configs/config.transport.yaml rename to configs/config.sector.yaml index 5ae5d98df..d0d8ef38f 100644 --- a/configs/config.transport.yaml +++ b/configs/config.sector.yaml @@ -5,6 +5,46 @@ version: 0.4.1 sector: + + # parameters of the heating sector + district_heating: + potential: 0.3 #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 + 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 + + 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 + heat_pump_sink_T: 55 #Celsius, based on DTU / large area radiators; used un build_cop_profiles.py + time_dep_hp_cop: true #time dependent heat pump coefficient of performance + solar_cf_correction: 0.788457 # = >>>1/1.2683 + + + # parameters of the mobility sector bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency transport_heating_deadband_upper: 20. @@ -84,3 +124,34 @@ sector: AP_2050: 0.42 NZ_2050: 0.68 DF_2050: 0.011 + + # parameters of H2 production, transport and storage + hydrogen: + network: true + H2_retrofit_capacity_per_CH4: 0.6 + network_limit: 2000 #GWkm + network_routes: gas # "gas or "greenfield". If "gas" -> the network data are fetched from ["sector"]["gas"]["network_data"]. If "greenfield" -> the network follows the topology of electrical transmission lines + gas_network_repurposing: true # If true -> ["sector"]["gas"]["network"] is automatically false + underground_storage: false + hydrogen_colors: false + set_color_shares: false + blue_share: 0.40 + pink_share: 0.05 + + hydrogen_underground_storage: true + shipping_hydrogen_liquefaction: false + shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 + + gadm_level: 1 + h2_cavern: true + marginal_cost_storage: 0 + methanation: true + helmeth: true + dac: true + SMR: true + SMR CC: true + cc_fraction: 0.9 + cc: true + airport_sizing_factor: 3 + + min_part_load_fischer_tropsch: 0.9 From a0139ff89f091f3f8f96718832c8504701d574db Mon Sep 17 00:00:00 2001 From: ekatef Date: Tue, 12 Nov 2024 00:08:07 +0100 Subject: [PATCH 19/19] Remove the default config --- Snakefile | 1 - config.default.yaml | 233 -------------------------------------------- 2 files changed, 234 deletions(-) delete mode 100644 config.default.yaml diff --git a/Snakefile b/Snakefile index 16552b33c..a00aef0f8 100644 --- a/Snakefile +++ b/Snakefile @@ -36,7 +36,6 @@ configfile: "config.elec.yaml" configfile: "config.costs.yaml" configfile: "config.solve.yaml" configfile: "config.plot.yaml" -configfile: "config.default.yaml" configfile: "config.yaml" diff --git a/config.default.yaml b/config.default.yaml deleted file mode 100644 index 7999178b4..000000000 --- a/config.default.yaml +++ /dev/null @@ -1,233 +0,0 @@ -# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors -# -# SPDX-License-Identifier: CC0-1.0 - -version: 0.4.1 -tutorial: false - -logging: - level: INFO - format: "%(levelname)s:%(name)s:%(message)s" - -results_dir: results/ -summary_dir: results/ -costs_dir: data/ # TODO change to the equivalent of technology data - -foresight: overnight - - -countries: ["NG", "BJ"] -# Can be replaced by country ["NG", "BJ"], continent ["Africa"] or user-specific region, see more at https://pypsa-earth.readthedocs.io/en/latest/configuration.html#top-level-configuration - -enable: - retrieve_databundle: true # Recommended 'true', for the first run. Otherwise data might be missing. - retrieve_databundle_sector: true - retrieve_cost_data: true # true: retrieves cost data from technology data and saves in resources/costs.csv, false: uses cost data in data/costs.csv - download_osm_data: true # If 'true', OpenStreetMap data will be downloaded for the above given countries - build_natura_raster: false # If True, then an exclusion raster will be build - build_cutout: false - # If "build_cutout" : true, then environmental data is extracted according to `snapshots` date range and `countries` - # requires cds API key https://cds.climate.copernicus.eu/api-how-to - # More information https://atlite.readthedocs.io/en/latest/introduction.html#datasets - progress_bar: true # show progress bar during downloading routines and other long-running tasks - - -custom_rules: [] # Default empty [] or link to custom rule file e.g. ["my_folder/my_rules.smk"] that add rules to Snakefile - -run: - name: "" # use this to keep track of runs with different settings - shared_cutouts: true # set to true to share the default cutout(s) across runs - # Note: value false requires build_cutout to be enabled - allow_scenario_failure: false # If True, the workflow will continue even if a scenario in run_scnenario fails - -scenario: - simpl: [""] - ll: ["copt"] - clusters: [10] - opts: [Co2L-3H] - planning_horizons: # investment years for myopic and perfect; or costs year for overnight - - 2030 - sopts: - - "144H" - demand: - - "AB" - -snapshots: - start: "2013-01-01" - end: "2014-01-01" - inclusive: "left" # end is not inclusive - -# download_osm_data_nprocesses: 10 # (optional) number of threads used to download osm data - -augmented_line_connection: - add_to_snakefile: false # If True, includes this rule to the workflow - connectivity_upgrade: 2 # Min. lines connection per node, - # 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 - new_line_type: ["HVAC"] # Expanded lines can be either ["HVAC"] or ["HVDC"] or both ["HVAC", "HVDC"] - min_expansion: 1 # [MW] New created line expands by float/int input - min_DC_length: 600 # [km] Minimum line length of DC line - -cluster_options: - simplify_network: - exclude_carriers: [] - remove_stubs: true - remove_stubs_across_borders: true - p_threshold_drop_isolated: 20 # [MW] isolated buses are being discarded if bus mean power is below the specified threshold - p_threshold_merge_isolated: 300 # [MW] isolated buses are being merged into a single isolated bus if a bus mean power is below the specified threshold - s_threshold_fetch_isolated: 0.05 # [-] a share of the national load for merging an isolated network into a backbone network - -build_shape_options: - gadm_layer_id: 1 # GADM level area used for the gadm_shapes. Codes are country-dependent but roughly: 0: country, 1: region/county-like, 2: municipality-like - out_logging: true # When true, logging is printed to console - year: 2020 # reference year used to derive shapes, info on population and info on GDP - nprocesses: 3 # number of processes to be used in build_shapes - worldpop_method: "standard" # "standard" pulls from web 1kmx1km raster, "api" pulls from API 100mx100m raster, - # false (not "false") no pop addition to shape which is useful when generating only cutout - gdp_method: "standard" # "standard" pulls from web 1x1km raster, false (not "false") no gdp addition to shape which useful when generating only cutout - contended_flag: "set_by_country" # "set_by_country" assigns the contended areas to the countries according to the GADM database, "drop" drops these contended areas from the model - -build_osm_network: # Options of the build_osm_network script; osm = OpenStreetMap - force_ac: false # When true, it forces all components (lines and substation) to be AC-only. To be used if DC assets create problem. - -load_options: - ssp: "ssp2-2.6" # shared socio-economic pathway (GDP and population growth) scenario to consider - prediction_year: 2030 # Load scenarios available with different prediction year (GDP, population) - scale: 1 # scales all load time-series, i.e. 2 = doubles load - -electricity: - co2limit: 7.75e+7 # European default, 0.05 * 3.1e9*0.5, needs to be adjusted for Africa - co2base: 1.487e+9 # European default, adjustment to Africa necessary - automatic_emission: false - automatic_emission_base_year: 1990 # 1990 is taken as default. Any year from 1970 to 2018 can be selected. - - max_hours: - battery: 6 - H2: 168 - - extendable_carriers: - Generator: [solar, onwind, offwind-ac, offwind-dc, OCGT] - StorageUnit: [] # battery, H2 - Store: [battery, H2] - Link: [] # H2 pipeline - - powerplants_filter: (DateOut >= 2022 or DateOut != DateOut) - custom_powerplants: false # "false" use only powerplantmatching (ppm) data, "merge" combines ppm and custom powerplants, "replace" use only custom powerplants - - conventional_carriers: [nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass] - renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, hydro] - - estimate_renewable_capacities: - stats: "irena" # False, = greenfield expansion, 'irena' uses IRENA stats to add expansion limits - year: 2023 # Reference year, available years for IRENA stats are 2000 to 2023 - p_nom_min: 1 # any float, scales the minimum expansion acquired from stats, i.e. 110% of 's capacities => p_nom_min: 1.1 - p_nom_max: false # sets the expansion constraint, False to deactivate this option and use estimated renewable potentials determine by the workflow, float scales the p_nom_min factor accordingly - technology_mapping: - # Wind is the Fueltype in ppm.data.Capacity_stats, onwind, offwind-{ac,dc} the carrier in PyPSA-Earth - Offshore: [offwind-ac, offwind-dc] - Onshore: [onwind] - PV: [solar] - -# ------------------- SECTOR OPTIONS ------------------- - -policy_config: - hydrogen: - temporal_matching: "no_res_matching" # either "h2_yearly_matching", "h2_monthly_matching", "no_res_matching" - spatial_matching: false - additionality: false # RE electricity is equal to the amount required for additional hydrogen export compared to the 0 export case ("reference_case") - allowed_excess: 1.0 - is_reference: false # Whether or not this network is a reference case network, relevant only if additionality is _true_ - remove_h2_load: false #Whether or not to remove the h2 load from the network, relevant only if is_reference is _true_ - path_to_ref: "" # Path to the reference case network for additionality calculation, relevant only if additionality is _true_ and is_reference is _false_ - re_country_load: false # Set to "True" to force the RE electricity to be equal to the electricity required for hydrogen export and the country electricity load. "False" excludes the country electricity load from the constraint. - - -demand_data: - update_data: true # if true, the workflow downloads the energy balances data saved in data/demand/unsd/data again. Turn on for the first run. - base_year: 2019 - - other_industries: false # Whether or not to include industries that are not specified. some countries have has exaggerated numbers, check carefully. - aluminium_year: 2019 # Year of the aluminium demand data specified in `data/AL_production.csv` - - -fossil_reserves: - oil: 100 #TWh Maybe redundant - -export: - h2export: [10] # Yearly export demand in TWh - store: true # [True, False] # specifies whether an export store to balance demand is implemented - store_capital_costs: "no_costs" # ["standard_costs", "no_costs"] # specifies the costs of the export store. "standard_costs" takes CAPEX of "hydrogen storage tank type 1 including compressor" - export_profile: "ship" # use "ship" or "constant" - ship: - ship_capacity: 0.4 # TWh # 0.05 TWh for new ones, 0.003 TWh for Susio Frontier, 0.4 TWh according to Hampp2021: "Corresponds to 11360 t H2 (l) with LHV of 33.3333 Mwh/t_H2. Cihlar et al 2020 based on IEA 2019, Table 3-B" - travel_time: 288 # hours # From Agadir to Rotterdam and back (12*24) - fill_time: 24 # hours, for 48h see Hampp2021 - unload_time: 24 # hours for 48h see Hampp2021 - -custom_data: - renewables: [] # ['csp', 'rooftop-solar', 'solar'] - elec_demand: false - heat_demand: false - industry_demand: false - industry_database: false - transport_demand: false - water_costs: false - h2_underground: false - add_existing: false - custom_sectors: false - gas_network: false # If "True" then a custom .csv file must be placed in "resources/custom_data/pipelines.csv" , If "False" the user can choose btw "greenfield" or Model built-in datasets. Please refer to ["sector"] below. - -industry: - reference_year: 2015 - -existing_capacities: - grouping_years_power: [1960, 1965, 1970, 1975, 1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2020, 2025, 2030] - grouping_years_heat: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] # these should not extend 2020 - threshold_capacity: 10 - default_heating_lifetime: 20 - conventional_carriers: - - lignite - - coal - - oil - - uranium - -sector: - gas: - spatial_gas: true # ALWAYS TRUE - network: false # ALWAYS FALSE for now (NOT USED) - network_data: GGIT # Global dataset -> 'GGIT' , European dataset -> 'IGGIELGN' - network_data_GGIT_status: ["Construction", "Operating", "Idle", "Shelved", "Mothballed", "Proposed"] - hydrogen: - network: true - coal: - shift_to_elec: true # If true, residential and services demand of coal is shifted to electricity. If false, the final energy demand of coal is disregarded - - international_bunkers: false #Whether or not to count the emissions of international aviation and navigation - - oil: - spatial_oil: true - - co2_network: true - co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe - co2_sequestration_cost: 10 #EUR/tCO2 for sequestration of CO2 - hydrogen_underground_storage: true - shipping_hydrogen_liquefaction: false - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - - gadm_level: 1 - h2_cavern: true - marginal_cost_storage: 0 - methanation: true - helmeth: true - dac: true - SMR: true - SMR CC: true - cc_fraction: 0.9 - cc: true - space_heat_share: 0.6 # the share of space heating from all heating. Remainder goes to water heating. - airport_sizing_factor: 3 - - min_part_load_fischer_tropsch: 0.9 - - conventional_generation: # generator : carrier - OCGT: gas - #Gen_Test: oil # Just for testing purposes