Merge pull request #773 from p-glaum/implement-floating
Add floating wind technology
This commit is contained in:
commit
430b95dcb3
@ -107,7 +107,7 @@ electricity:
|
||||
H2: 168
|
||||
|
||||
extendable_carriers:
|
||||
Generator: [solar, onwind, offwind-ac, offwind-dc, OCGT]
|
||||
Generator: [solar, onwind, offwind-ac, offwind-dc, offwind-float, OCGT]
|
||||
StorageUnit: [] # battery, H2
|
||||
Store: [battery, H2]
|
||||
Link: [] # H2 pipeline
|
||||
@ -117,7 +117,7 @@ electricity:
|
||||
everywhere_powerplants: [nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass]
|
||||
|
||||
conventional_carriers: [nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass]
|
||||
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, hydro]
|
||||
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, offwind-float, hydro]
|
||||
|
||||
estimate_renewable_capacities:
|
||||
enable: true
|
||||
@ -125,7 +125,7 @@ electricity:
|
||||
year: 2020
|
||||
expansion_limit: false
|
||||
technology_mapping:
|
||||
Offshore: [offwind-ac, offwind-dc]
|
||||
Offshore: [offwind-ac, offwind-dc, offwind-float]
|
||||
Onshore: [onwind]
|
||||
PV: [solar]
|
||||
|
||||
@ -193,7 +193,7 @@ renewable:
|
||||
luisa: false # [0, 5230]
|
||||
natura: true
|
||||
ship_threshold: 400
|
||||
max_depth: 50
|
||||
max_depth: 60
|
||||
max_shore_distance: 30000
|
||||
excluder_resolution: 200
|
||||
clip_p_max_pu: 1.e-2
|
||||
@ -209,10 +209,28 @@ renewable:
|
||||
luisa: false # [0, 5230]
|
||||
natura: true
|
||||
ship_threshold: 400
|
||||
max_depth: 50
|
||||
max_depth: 60
|
||||
min_shore_distance: 30000
|
||||
excluder_resolution: 200
|
||||
clip_p_max_pu: 1.e-2
|
||||
offwind-float:
|
||||
cutout: europe-2013-era5
|
||||
resource:
|
||||
method: wind
|
||||
turbine: NREL_ReferenceTurbine_5MW_offshore
|
||||
# ScholzPhd Tab 4.3.1: 10MW/km^2
|
||||
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
|
||||
corine: [44, 255]
|
||||
natura: true
|
||||
ship_threshold: 400
|
||||
excluder_resolution: 200
|
||||
min_depth: 60
|
||||
max_depth: 1000
|
||||
clip_p_max_pu: 1.e-2
|
||||
solar:
|
||||
cutout: europe-2013-sarah
|
||||
resource:
|
||||
@ -306,6 +324,7 @@ pypsa_eur:
|
||||
- onwind
|
||||
- offwind-ac
|
||||
- offwind-dc
|
||||
- offwind-float
|
||||
- solar
|
||||
- ror
|
||||
- nuclear
|
||||
@ -851,6 +870,7 @@ plotting:
|
||||
CCGT: "Combined-Cycle Gas"
|
||||
offwind-ac: "Offshore Wind (AC)"
|
||||
offwind-dc: "Offshore Wind (DC)"
|
||||
offwind-float: "Offshore Wind (Floating)"
|
||||
onwind: "Onshore Wind"
|
||||
solar: "Solar"
|
||||
PHS: "Pumped Hydro Storage"
|
||||
@ -875,6 +895,9 @@ plotting:
|
||||
offwind-dc: "#74c6f2"
|
||||
offshore wind (DC): "#74c6f2"
|
||||
offshore wind dc: "#74c6f2"
|
||||
offwind-float: "#b5e2fa"
|
||||
offshore wind (Float): "#b5e2fa"
|
||||
offshore wind float: "#b5e2fa"
|
||||
# water
|
||||
hydro: '#298c81'
|
||||
hydro reservoir: '#298c81'
|
||||
|
@ -32,7 +32,7 @@ electricity:
|
||||
Store: [H2]
|
||||
Link: [H2 pipeline]
|
||||
|
||||
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc]
|
||||
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, offwind-float]
|
||||
|
||||
|
||||
atlite:
|
||||
@ -53,6 +53,10 @@ renewable:
|
||||
offwind-dc:
|
||||
cutout: be-03-2013-era5
|
||||
max_depth: false
|
||||
offwind-float:
|
||||
cutout: be-03-2013-era5
|
||||
max_depth: false
|
||||
min_depth: false
|
||||
solar:
|
||||
cutout: be-03-2013-era5
|
||||
|
||||
|
@ -42,7 +42,7 @@ electricity:
|
||||
Store: [H2]
|
||||
Link: [H2 pipeline]
|
||||
|
||||
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc]
|
||||
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, offwind-float]
|
||||
|
||||
atlite:
|
||||
default_cutout: be-03-2013-era5
|
||||
@ -62,6 +62,10 @@ renewable:
|
||||
offwind-dc:
|
||||
cutout: be-03-2013-era5
|
||||
max_depth: false
|
||||
offwind-float:
|
||||
cutout: be-03-2013-era5
|
||||
max_depth: false
|
||||
min_depth: false
|
||||
solar:
|
||||
cutout: be-03-2013-era5
|
||||
|
||||
|
@ -36,7 +36,7 @@ electricity:
|
||||
Store: [H2]
|
||||
Link: [H2 pipeline]
|
||||
|
||||
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc]
|
||||
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, offwind-float]
|
||||
|
||||
atlite:
|
||||
default_cutout: be-03-2013-era5
|
||||
@ -56,6 +56,10 @@ renewable:
|
||||
offwind-dc:
|
||||
cutout: be-03-2013-era5
|
||||
max_depth: false
|
||||
offwind-float:
|
||||
cutout: be-03-2013-era5
|
||||
max_depth: false
|
||||
min_depth: false
|
||||
solar:
|
||||
cutout: be-03-2013-era5
|
||||
|
||||
|
@ -39,7 +39,7 @@ electricity:
|
||||
Store: [H2]
|
||||
Link: [H2 pipeline]
|
||||
|
||||
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc]
|
||||
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, offwind-float]
|
||||
|
||||
sector:
|
||||
min_part_load_fischer_tropsch: 0
|
||||
@ -63,6 +63,10 @@ renewable:
|
||||
offwind-dc:
|
||||
cutout: be-03-2013-era5
|
||||
max_depth: false
|
||||
offwind-float:
|
||||
cutout: be-03-2013-era5
|
||||
max_depth: false
|
||||
min_depth: false
|
||||
solar:
|
||||
cutout: be-03-2013-era5
|
||||
|
||||
|
@ -28,14 +28,14 @@ everywhere_powerplants,--,"Any subset of {nuclear, oil, OCGT, CCGT, coal, lignit
|
||||
,,,
|
||||
conventional_carriers,--,"Any subset of {nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass}","List of conventional power plants to include in the model from ``resources/powerplants.csv``. If an included carrier is also listed in ``extendable_carriers``, the capacity is taken as a lower bound."
|
||||
,,,
|
||||
renewable_carriers,--,"Any subset of {solar, onwind, offwind-ac, offwind-dc, hydro}",List of renewable generators to include in the model.
|
||||
renewable_carriers,--,"Any subset of {solar, onwind, offwind-ac, offwind-dc, offwind-float, hydro}",List of renewable generators to include in the model.
|
||||
estimate_renewable_capacities,,,
|
||||
-- enable,,bool,Activate routine to estimate renewable capacities
|
||||
-- from_opsd,--,bool,Add renewable capacities from `OPSD database <https://data.open-power-system-data.org/renewable_power_plants/2020-08-25>`_. The value is depreciated but still can be used.
|
||||
-- year,--,bool,Renewable capacities are based on existing capacities reported by IRENA (IRENASTAT) for the specified year
|
||||
-- expansion_limit,--,float or false,"Artificially limit maximum IRENA capacities to a factor. For example, an ``expansion_limit: 1.1`` means 110% of capacities . If false are chosen, the estimated renewable potentials determine by the workflow are used."
|
||||
-- technology_mapping,,,Mapping between PyPSA-Eur and powerplantmatching technology names
|
||||
-- -- Offshore,--,"Any subset of {offwind-ac, offwind-dc}","List of PyPSA-Eur carriers that is considered as (IRENA, OPSD) onshore technology."
|
||||
-- -- Offshore,--,"Any subset of {offwind-ac, offwind-dc, offwind-float}","List of PyPSA-Eur carriers that is considered as (IRENA, OPSD) onshore technology."
|
||||
-- -- Offshore,--,{onwind},"List of PyPSA-Eur carriers that is considered as (IRENA, OPSD) offshore technology."
|
||||
-- -- PV,--,{solar},"List of PyPSA-Eur carriers that is considered as (IRENA, OPSD) PV technology."
|
||||
autarky,,,
|
||||
|
|
@ -31,7 +31,7 @@ Top-level configuration
|
||||
.. _run_cf:
|
||||
|
||||
``run``
|
||||
=======
|
||||
=============
|
||||
|
||||
It is common conduct to analyse energy system optimisation models for **multiple scenarios** for a variety of reasons,
|
||||
e.g. assessing their sensitivity towards changing the temporal and/or geographical resolution or investigating how
|
||||
@ -265,7 +265,7 @@ Define and specify the ``atlite.Cutout`` used for calculating renewable potentia
|
||||
.. literalinclude:: ../config/config.default.yaml
|
||||
:language: yaml
|
||||
:start-at: offwind-dc:
|
||||
:end-before: solar:
|
||||
:end-before: offwind-float:
|
||||
|
||||
.. csv-table::
|
||||
:header-rows: 1
|
||||
@ -273,9 +273,25 @@ Define and specify the ``atlite.Cutout`` used for calculating renewable potentia
|
||||
:file: configtables/offwind-dc.csv
|
||||
|
||||
.. note::
|
||||
both ``offwind-ac`` and ``offwind-dc`` have the same assumption on
|
||||
Both ``offwind-ac`` and ``offwind-dc`` have the same assumption on
|
||||
``capacity_per_sqkm`` and ``correction_factor``.
|
||||
|
||||
``offwind-float``
|
||||
---------------
|
||||
|
||||
.. literalinclude:: ../config/config.default.yaml
|
||||
:language: yaml
|
||||
:start-at: offwind-float:
|
||||
:end-before: solar:
|
||||
|
||||
.. csv-table::
|
||||
:header-rows: 1
|
||||
:widths: 22,7,22,33
|
||||
:file: configtables/offwind-float.csv
|
||||
|
||||
.. note::
|
||||
``offwind-ac``, ``offwind-dc`` , ``offwind-float`` have the same assumption on
|
||||
``capacity_per_sqkm`` and ``correction_factor``.
|
||||
``solar``
|
||||
---------------
|
||||
|
||||
|
@ -9,6 +9,8 @@ Release Notes
|
||||
|
||||
Upcoming Release
|
||||
================
|
||||
* Add floating wind technology for water depths below 60m
|
||||
|
||||
* Group existing capacities to the earlier grouping_year for consistency with optimized capacities.
|
||||
|
||||
* Update data bundle:
|
||||
|
@ -35,8 +35,8 @@ The ``{technology}`` wildcard
|
||||
|
||||
The ``{technology}`` wildcard specifies for which renewable energy technology to produce availability time
|
||||
series and potentials using the rule :mod:`build_renewable_profiles`.
|
||||
It can take the values ``onwind``, ``offwind-ac``, ``offwind-dc``, and ``solar`` but **not** ``hydro``
|
||||
(since hydroelectric plant profiles are created by a different rule).
|
||||
It can take the values ``onwind``, ``offwind-ac``, ``offwind-dc``, ``offwind-float``, and ``solar`` but **not** ``hydro``
|
||||
(since hydroelectric plant profiles are created by a different rule)``
|
||||
|
||||
.. _simpl:
|
||||
|
||||
|
@ -248,7 +248,10 @@ rule build_renewable_profiles:
|
||||
gebco=ancient(
|
||||
lambda w: (
|
||||
"data/bundle/gebco/GEBCO_2014_2D.nc"
|
||||
if config_provider("renewable", w.technology)(w).get("max_depth")
|
||||
if (
|
||||
config_provider("renewable", w.technology)(w).get("max_depth")
|
||||
or config_provider("renewable", w.technology)(w).get("min_depth")
|
||||
)
|
||||
else []
|
||||
)
|
||||
),
|
||||
|
@ -862,7 +862,7 @@ rule build_existing_heating_distribution:
|
||||
def input_profile_offwind(w):
|
||||
return {
|
||||
f"profile_{tech}": resources(f"profile_{tech}.nc")
|
||||
for tech in ["offwind-ac", "offwind-dc"]
|
||||
for tech in ["offwind-ac", "offwind-dc", "offwind-float"]
|
||||
if (tech in config_provider("electricity", "renewable_carriers")(w))
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ Relevant settings
|
||||
|
||||
renewable:
|
||||
{technology}:
|
||||
cutout: corine: luisa: grid_codes: distance: natura: max_depth:
|
||||
cutout: corine: luisa: grid_codes: distance: natura: max_depth: min_depth:
|
||||
max_shore_distance: min_shore_distance: capacity_per_sqkm:
|
||||
correction_factor: min_p_max_pu: clip_p_max_pu: resource:
|
||||
|
||||
@ -284,6 +284,12 @@ if __name__ == "__main__":
|
||||
func = functools.partial(np.greater, -params["max_depth"])
|
||||
excluder.add_raster(snakemake.input.gebco, codes=func, crs=4326, nodata=-1000)
|
||||
|
||||
if params.get("min_depth"):
|
||||
func = functools.partial(np.greater, -params["min_depth"])
|
||||
excluder.add_raster(
|
||||
snakemake.input.gebco, codes=func, crs=4326, nodata=-1000, invert=True
|
||||
)
|
||||
|
||||
if "min_shore_distance" in params:
|
||||
buffer = params["min_shore_distance"]
|
||||
excluder.add_geometry(snakemake.input.country_shapes, buffer=buffer)
|
||||
|
@ -60,6 +60,7 @@ def rename_techs(label):
|
||||
"offwind": "offshore wind",
|
||||
"offwind-ac": "offshore wind (AC)",
|
||||
"offwind-dc": "offshore wind (DC)",
|
||||
"offwind-float": "offshore wind (Float)",
|
||||
"onwind": "onshore wind",
|
||||
"ror": "hydroelectricity",
|
||||
"hydro": "hydroelectricity",
|
||||
|
@ -123,7 +123,7 @@ def add_land_use_constraint_perfect(n):
|
||||
def _add_land_use_constraint(n):
|
||||
# warning: this will miss existing offwind which is not classed AC-DC and has carrier 'offwind'
|
||||
|
||||
for carrier in ["solar", "onwind", "offwind-ac", "offwind-dc"]:
|
||||
for carrier in ["solar", "onwind", "offwind-ac", "offwind-dc", "offwind-float"]:
|
||||
extendable_i = (n.generators.carrier == carrier) & n.generators.p_nom_extendable
|
||||
n.generators.loc[extendable_i, "p_nom_min"] = 0
|
||||
|
||||
@ -158,7 +158,7 @@ def _add_land_use_constraint_m(n, planning_horizons, config):
|
||||
grouping_years = config["existing_capacities"]["grouping_years_power"]
|
||||
current_horizon = snakemake.wildcards.planning_horizons
|
||||
|
||||
for carrier in ["solar", "onwind", "offwind-ac", "offwind-dc"]:
|
||||
for carrier in ["solar", "onwind", "offwind-ac", "offwind-dc", "offwind-float"]:
|
||||
extendable_i = (n.generators.carrier == carrier) & n.generators.p_nom_extendable
|
||||
n.generators.loc[extendable_i, "p_nom_min"] = 0
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user