Skip to content

Commit

Permalink
Merge pull request #1169 from openego/dev
Browse files Browse the repository at this point in the history
Update to current dev
  • Loading branch information
khelfen authored Aug 23, 2024
2 parents cfe1b13 + 7cf077b commit 7a03d06
Show file tree
Hide file tree
Showing 27 changed files with 401 additions and 37 deletions.
7 changes: 6 additions & 1 deletion CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -747,7 +747,12 @@ Bug Fixes
* Fix conversion factor for CH4 loads abroad in eGon2035
`#1104 <https://github.com/openego/eGon-data/issues/1104>`_
* Change structure of documentation in rtd
`#11126 <https://github.com/openego/eGon-data/issues/1126>`_
`#1126 <https://github.com/openego/eGon-data/issues/1126>`_
* Fix URL of eGon data-bundle dataset
`#1154 <https://github.com/openego/eGon-data/issues/1154>`_
* Fix URLs of MaStR datasets
* Fix CRS in ERA5 transformation
`#1159 <https://github.com/openego/eGon-data/issues/1159>`_

.. _PR #692: https://github.com/openego/eGon-data/pull/692
.. _#343: https://github.com/openego/eGon-data/issues/343
Expand Down
15 changes: 15 additions & 0 deletions docs/about.rst
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,27 @@ Modeling concept and scenarios
===============================

eGon-data provides a data model suitable for calculations and optimizations with the tools eTraGo, eDisGo and eGo and therefore aims to satisfy all requirements regarding the scope and temporal as well as spatial granularity of the resulting data model.



System boundaries and general assumptions
-----------------------------------------

* Sectors
* Focus on Germany
* Neighbouring countries (which ones and why)
* Spatial resolution / aggregartion levels
* Temporal resolution incl. assumptions on weather year

The following image visualizes the different components considered in scenario ``eGon2035``.

.. image:: images/egon-modell-szenario-egon2035.png
:width: 800
:alt: Components of the data models

Scenarios
---------

eGon-data aims to create different scenarios, which differ in terms of RE penetration or the availability of flexibility options. Currently, the following scenarios are available or in progress.

* ``eGon2035`` Mid-termin scenario based on assumptions from the German network expansion plan 'scenario C2035', version 2021 and TYNDP
Expand Down
2 changes: 1 addition & 1 deletion docs/data.rst
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ Different flexibility options are part of the model and can be utilized in the o
flexibility potentials and their distribution are needed. The considered technologies described in the following chapters range from different storage units,
through dynamic line rating to Demand-Side-Management measures.

Demand-Side-Management
Demand-Side Management
----------------------

.. include:: data/DSM.rst
Expand Down
51 changes: 50 additions & 1 deletion docs/data/DSM.rst
Original file line number Diff line number Diff line change
@@ -1 +1,50 @@
How did we implement DSM? Results etc.
Demand-side management (DSM) potentials are calculated in function :func:`dsm_cts_ind_processing<egon.data.datasets.DSM_cts_ind.dsm_cts_ind_processing>`.
Potentials relevant for the high and extra-high voltage grid are identified in the function :func:`dsm_cts_ind<egon.data.datasets.DSM_cts_ind.dsm_cts_ind>`,
potentials within the medium- and low-voltage grids are determined within the function :func:`dsm_cts_ind_individual<egon.data.datasets.DSM_cts_ind.dsm_cts_ind_individual>`
in a higher spatial resolution. All this is part of the dataset :py:class:`DsmPotential <egon.data.datasets.DsmPotential>`.
The implementation is documented in detail within the following student work (in German): [EsterlDentzien]_.

Loads eligible to be shifted are assumed within industrial loads and loads from Commercial, Trade and Service (CTS).
Therefore, load time series from these sectors are used as input data (see section ref:`elec_demand-ref`).
Shiftable shares of loads mainly derive from heating and cooling processes and selected energy-intensive
industrial processes (cement production, wood pulp, paper production, recycling paper). Technical and sociotechnical
constraints are considered using the parametrization elaborated in [Heitkoetter]_. An overview over the
resulting potentials for scenario ``eGon2035`` can be seen in figure :ref:`dsm_potential`. The table below summarizes the
aggregated potential for Germany per scenario. As the annual conventional electrical loads are assumed to be lower in the
scenario ``eGon100RE``, also the DSM potential decreases compared to the scenario ``eGon2035``.

.. figure:: /images/DSM_potential.png
:name: dsm_potential
:width: 600

Aggregated DSM potential in Germany for scenario ``eGon2035``

.. list-table:: Aggregated DSM Potential for Germany
:widths: 20 20 20
:header-rows: 1

* -
- CTS
- Industry

* - eGon2035
- 1.2 GW
- 150 MW

* - eGon100RE
- 900 MW
- 150 MW

DSM is modelled following the approach of [Kleinhans]_. DSM components are created wherever
respective loads are seen. Minimum and maximum shiftable power per time step depict time-dependent
charging and discharging power of a storage-equivalent buffers. Time-dependent capacities
of those buffers account for the time frame of management bounding the period within which
the shifting can be conducted. Figure :ref:`dsm_shifted_p-example` shows the resulting potential at one exemplary bus.

.. figure:: /images/shifted_dsm-example.png
:name: dsm_shifted_p-example
:width: 600

Time-dependent DSM potential at one exemplary bus


92 changes: 91 additions & 1 deletion docs/data/electricity_demand.rst
Original file line number Diff line number Diff line change
@@ -1 +1,91 @@
Information about electricity demands and their spatial and temporal aggregation
.. _elec_demand_ref:
The electricity demand considered includes demand from the residential, commercial and industrial sector.
The target values for scenario *eGon2035* are taken from the German grid development plan from 2021 [NEP2021]_,
whereas the distribution on NUTS3-levels corresponds to the data from the research project *DemandRegio* [demandregio]_.
The following table lists the electricity demands per sector:

.. list-table:: Electricity demand per sector
:widths: 25 50
:header-rows: 1

* - Sector
- Annual electricity demand in TWh
* - residential
- 115.1
* - commercial
- 123.5
* - industrial
- 259.5

A further spatial and temporal distribution of the electricity demand is needed to fullfil all requirements of the
subsequent grid optimization. Therefore different, sector-specific distributions methods were developed and applied.

Residential electricity demand
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The annual electricity demands of households on NUTS3-level from *DemandRegio* are scaled to meet the national target
values for the respective scenario in dataset :py:class:`DemandRegio <egon.data.datasets.demandregio.DemandRegio>`.
A further spatial and temporal distribution of residential electricity demands is performed in
:py:class:`HouseholdElectricityDemand <egon.data.datasets.electricity_demand.HouseholdElectricityDemand>` as described
in [Buettner2022]_.
The result is a consistent dataset across aggregation levels with an hourly resolution.

.. figure:: /images/S27-3.png
:name: spatial_distribution_electricity_demand
:width: 400

Electricity demand on NUTS 3-level (upper left); Exemplary MVGD (upper right); Study region in Flensburg (20 Census cells, bottom) from [Buettner2022]_


.. figure:: /images/S27-4a.png
:name: aggregation_level_electricity_demand
:width: 400

Electricity demand time series on different aggregation levels from [Buettner2022]_



Commercial electricity demand
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The distribution of electricity demand from the commercial, trade and service (CTS) sector is also based on data from
*DemandRegio*, which provides annual electricity demands on NUTS3-level for Germany. In dataset
:py:class:`CtsElectricityDemand <egon.data.datasets.electricity_demand.CtsElectricityDemand>` the annual electricity
demands are further distributed to census cells (100x100m cells from [Census]_) based on the distribution of heat demands,
which is taken from the Pan-European Thermal Altlas version 5.0.1 [Peta]_. For further information refer to section
ref:`heat_demand`.
The applied methods for a futher spatial and temporal distribution to buildings is described in [Buettner2022]_ and
performed in dataset :py:class:`CtsDemandBuildings <egon.data.datasets.electricity_demand_timeseries.CtsDemandBuildings>`

Industrial electricity demand
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To distribute the annual industrial electricity demand OSM landuse data as well as information on industrial sites are
taken into account.
In a first step (:py:class:`CtsElectricityDemand <egon.data.datasets.electricity_demand.CtsElectricityDemand>`)
different sources providing information about specific sites and further information on the industry sector in which
the respective industrial site operates are combined. Here, the three data sources [Hotmaps]_, [sEEnergies]_ and
[Schmidt2018]_ are aligned and joined.
Based on the resulting list of industrial sites in Germany and information on industrial landuse areas from OSM [OSM]_
which where extracted and processed in :py:class:`OsmLanduse <egon.data.datasets.loadarea.OsmLanduse>` the annual demands
were distributed.
The spatial and temporal distribution is performed in
:py:class:`IndustrialDemandCurves <egon.data.datasets.industry.IndustrialDemandCurves>`.
For the spatial distribution of annual electricity demands from *DemandRegio* [demandregio]_ which are available on
NUTS3-level are in a first step evenly split 50/50 between industrial sites and OSM-polygons tagged as industrial areas.
Per NUTS-3 area the respective shares are then distributed linearily based on the area of the corresponding landuse polygons
and evenly to the identified industrial sites.
In a next step the temporal disaggregation of the annual demands is carried out taking information about the industrial
sectors and sector-specific standard load profiles from [demandregio]_ into account.
Based on the resulting time series and their peak loads the corresponding grid level and grid connections point is
identified.

Electricity demand in neighbouring countries
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The neighbouring countries considered in the model are represented in a lower spatial resolution of one or two buses per
country. The national demand timeseries in an hourly resolution of the respective countries is taken from the Ten-Year
Network Development Plan, Version 2020 [TYNDP]_. In case no data for the target year is available the data is is
interpolated linearly.
Refer to the corresponding dataset for detailed information:
:py:class:`ElectricalNeighbours <egon.data.datasets.ElectricalNeighbours>`
32 changes: 23 additions & 9 deletions docs/data/electricity_grids.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,32 @@
High and extra-high voltage grids
++++++++++++++++++++++++++++++++++

The model of the German extra-high (eHV) and high voltage (HV) grid is based
on data retrieved from OpenStreetMap (status January 2021) [OSM]_ and additional
parameters for standard transmission lines from [Brakelmann2004]_. To gather all
required information, such as line topology, voltage level, substation locations,
and electrical parameters, to create a calculable power system model, the `osmTGmod
tool <https://github.com/openego/osmTGmod>`_ was used. The corresponding dataset
:py:class:`Osmtgmod <egon.data.datasets..osmtgmod.Osmtgmod>` executes osmTGmod
The model of the German extra-high (eHV) and high voltage (HV) grid is based
on data retrieved from OpenStreetMap (OSM) (status January 2021) [OSM]_ and additional
parameters for standard transmission lines from [Brakelmann2004]_. To gather all
required information, such as line topology, voltage level, substation locations,
and electrical parameters, to create a calculable power system model, the `*osmTGmod*
tool <https://github.com/openego/osmTGmod>`_ was used. The corresponding dataset
:py:class:`Osmtgmod <egon.data.datasets.osmtgmod.Osmtgmod>` executes osmTGmod
and writes the resulting data to the database.

The resulting grid model includes the voltage levels 380, 220 and 110 kV and
all substations interconnecting these grid levels. For further information on the
generation of the grid topology please refer to [Mueller2018]_.
all substations interconnecting the different grid levels. Information about
border crossing lines are as well extracted from *OSM* data by *osmTGmod*.
For further information on the generation of the grid topology please refer to [Mueller2018]_.
The neighbouring countries are included in the model in a significantly lower
spatial resolution with one or two nodes per country. The border crossing lines
extracted by *osmTGmod* are extended to representative nodes of the respective
country in dataset
:py:class:`ElectricalNeighbours <egon.data.datasets.ElectricalNeighbours>`. The
resulting grid topology is shown in the following figure.

..figure:: images/Stromnetz.png
:scale: 50 %
:name: gridtopology_ehv_hv
:alt: Grid topology extra-high and high voltage grid



.. _ding0-grids:

Expand Down
98 changes: 96 additions & 2 deletions docs/data/electricity_supply.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,68 @@ The final distribution in the eGon2035 scenario is shown in figure :ref:`generat
Onshore wind
+++++++++++++

The allocation of onshore wind power plants is implemented in the function :func:`insert<egon.data.datasets.power_plants.wind_farms.insert>`
which is part of the dataset :class:`PowerPlants<egon.data.datasets.power_plants.PowerPlants>`.
The following steps are conducted:

#. The sites and capacities of exisitng onshore wind parks are imported using MaStR data (see :ref:`mastr-ref`).

#. Potential areas for onshore wind parks are assumed to be areas With high mean wind speed, at the same time that some locations like protected natural areas or zones close to urban centers are discarted. Those areas are imported through the data bundle, see :ref:`data-bundle-ref`).

#. The locations of existing parks and the potential areas are intersected with each other while considering a buffer around the locations of existing parks to find out where there are already parks at or close to potential areas. This results in a selection of potential areas.

#. The capacities of the existing parks matching potential areas are summed up and compared to the target values for the specific scenario per federal state (see :ref:`concept-and-scenarios-ref`). The required expansion capacity is derived.

#. If expansion of wind onshore capacity is required, capacities are calculated depending on the area size of the formerly selected potential areas. 21.05 MW/km² and 16.81 MW/km² are used for federal states in the north and in the south of the country respectively. The resulting parks are therefore located on the selected potential areas.

#. The resulting capacities are compared to the target values for the specific scenario per federal state. If the target value is exceeded, a linear downscaling is conducted. If the target value is not reached yet, the remaining capacity is distributed linearly among the rest of the potential areas within the state.

Offshore wind
++++++++++++++

The allocation of offshore wind power plants is implemented in the function :func:`insert<egon.data.datasets.power_plants.wind_offshore.insert>`
which is part of the dataset :class:`PowerPlants<egon.data.datasets.power_plants.PowerPlants>`.
The following steps are conducted:

#. A compilation of offshore wind parks for different scenarios created by NEP are extracted from the data bundle. See :ref:`data-bundle-ref`. This data includes installed capacities, connection points (or a potential one for future power plants) and location. See figure :ref:`offshore_power_plants_areas`.

#. Each connection point is matched to one of the substations previously created. Despite the fact that the generators are located in the sea, all the power generated by them will be injected into the grid through these substations, that in some cases can be several kilometers in land.

#. For the eGon100RE scenario, the installed capacities are scaled up in order to achieve the targed in :ref:`concept-and-scenarios-ref`.

#. Each offshore wind power plant receives an hourly maximal generation capacity based on weather data for its own geographical location. Weather data provided by ERA5.

.. figure:: /images/offshore_power_plants_areas.png
:name: offshore_power_plants_areas
:width: 400

Areas for offshore wind park in North and Baltic sea. Source: NEP


PV ground mounted
++++++++++++++++++

.. _pv-rooftop-ref:
The distribution of PV ground mounted is implemented in function :func:`insert<egon.data.datasets.power_plants.pv_ground_mounted.insert>`
which is part of the dataset :class:`PowerPlants<egon.data.datasets.power_plants.PowerPlants>`.
The following steps are conducted:

#. The sites and capacities of exisitng PV parks are imported using MaStR data (see :ref:`mastr-ref`).

#. Potential areas for PV ground mounted are assumed to be areas next to highways and railways as well as on agricultural land with a low degree of utilisation, as it can be seen in figure :ref:`pv_ground_mounted-example`. Those areas (provided through the data bundle, see :ref:`data-bundle-ref`) are imported while merging or disgarding small areas.

#. The locations of existing parks and the potential areas are intersected with each other while considering a buffer around the locations of existing parks to find out where there already are parks at or close to potential areas. This results in a selection of potential areas.

#. The capacities of the existing parks are considered and compared to the target values for the specific scenario per federal state (see :ref:`concept-and-scenarios-ref`). The required expansion capacity is derived.

#. If expansion of PV ground mounted capacity is required, capacities are calculated depending on the area size of the formerly selected potential areas. The resulting parks are therefore located on the selected potential areas.

#. The resulting capacities are compared to the target values for the specific scenario per federal state. If the target value is exceeded, a linear downscaling is conducted. If the target value is not reached yet, the remaining capacity is distributed linearly among the rest of the potential areas within the state.

.. figure:: /images/PV_freiflaeche.png
:name: pv_ground_mounted-example
:width: 400

Example: sites of existing PV ground mounted parks and potential areas

PV rooftop
+++++++++++
Expand Down Expand Up @@ -83,6 +138,45 @@ Disaggregation of PV rooftop scenario capacities:
using MaStR data as basis.

Hydro
++++++
+++++

In the case of hydropower plants, a distinction is made between the carrier run-of-river
and reservoir.
The methods to distribute and allocate are the same for both carriers.
In a first step all suitable power plants (correct carrier, valid geolocation, information
about federal state) are selected and their installed capacity is scaled to meet the target
values for the respective federal state and scenario.
Information about the voltage level the power plants are connected to is obtained. In case
no information is availabe the voltage level is identified using threshold values for the
installed capacity (see :func:`assign_voltage_level <egon.data.datasets.power_plants.assign_voltage_level>`).
In a next step the correct grid connection point is identified based on the voltage level
and geolocation of the power plants (see :func:`assign_bus_id <egon.data.datasets.power_plants.assign_bus_id>`)
The resulting list of power plants it added to table
:py:class:`EgonPowerPlants <egon.data.datasets.power_plants.EgonPowerPlants>`.

Biomass
+++++++

The allocation of biomass-based power plants follows the same method as the one for hydro
power plants and is performed in function :func:`insert_biomass_plants <egon.data.datasets.power_plants.insert_biomass_plants>`



Conventional
++++++++++++

**CHP**


**non-chp**


In function :func:`allocate_conventional_non_chp_power_plants <egon.data.datasets.power_plants.allocate_conventional_non_chp_power_plants>`
capacities for conventional power plants, which are no chp plants, with carrier *oil* and
*gas* are allocated.






Loading

0 comments on commit 7a03d06

Please sign in to comment.