diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index ecc0c81a5..537762c03 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -92,6 +92,10 @@ jobs: run: | make test + - name: Run unit tests + run: | + make unit-test + - name: Upload artifacts if: always() uses: actions/upload-artifact@v4 diff --git a/.reuse/dep5 b/.reuse/dep5 index a40d090a9..251189232 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -11,6 +11,10 @@ Files: doc/data.csv Copyright: 2019-2024 The PyPSA-Eur Authors License: CC-BY-4.0 +Files: test/test_data/* +Copyright: 2019-2024 The PyPSA-Eur Authors +License: CC-BY-4.0 + Files: doc/configtables/* Copyright: 2019-2024 The PyPSA-Eur Authors License: CC-BY-4.0 diff --git a/Makefile b/Makefile index ee20cf259..c8763702d 100755 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: CC0-1.0 -.PHONY: _conda_check install install-pinned-linux install-pinned-windows install-pinned-macos test clean-tests reset +.PHONY: _conda_check install install-pinned-linux install-pinned-windows install-pinned-macos test checks clean-tests reset # Helper: Check if conda or mamba is installed and set CONDA_OR_MAMBA variable _conda_check: @@ -44,6 +44,9 @@ test: snakemake --configfile config/test/config.scenarios.yaml --rerun-triggers=mtime -n echo "All tests completed successfully." +unit-test: + pytest test + # Cleans all output files from tests clean-tests: snakemake solve_elec_networks --configfile config/test/config.electricity.yaml --rerun-triggers=mtime --delete-all-output diff --git a/scripts/__init__.py b/scripts/__init__.py index fc781c2f0..f1713ce91 100644 --- a/scripts/__init__.py +++ b/scripts/__init__.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2024 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT + +# coding: utf-8 diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 000000000..dfadb19de --- /dev/null +++ b/test/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: : 2017-2024 The PyPSA-Eur Authors +# +# SPDX-License-Identifier: MIT diff --git a/test/conftest.py b/test/conftest.py new file mode 100644 index 000000000..13a0d1a9f --- /dev/null +++ b/test/conftest.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: : 2017-2024 The PyPSA-Eur Authors +# +# SPDX-License-Identifier: MIT + +# coding: utf-8 + +import pathlib + +import pypsa +import pytest +import yaml + + +@pytest.fixture(scope="function") +def scigrid_network(): + return pypsa.examples.scigrid_de(from_master=True) + + +@pytest.fixture(scope="function") +def ac_dc_network(): + return pypsa.examples.ac_dc_meshed(from_master=True) + + +@pytest.fixture(scope="function") +def config(): + path_config = pathlib.Path(pathlib.Path.cwd(), "config", "config.default.yaml") + with open(path_config, "r") as file: + config_dict = yaml.safe_load(file) + return config_dict diff --git a/test/test_build_powerplants.py b/test/test_build_powerplants.py new file mode 100644 index 000000000..b617bcdec --- /dev/null +++ b/test/test_build_powerplants.py @@ -0,0 +1,152 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: : 2017-2024 The PyPSA-Eur Authors +# +# SPDX-License-Identifier: MIT + +# coding: utf-8 +""" +Tests the functionalities of scripts/build_powerplants.py. +""" + +import pathlib +import sys + +import numpy as np +import pandas as pd +import pytest + +sys.path.append("./scripts") + +from build_powerplants import ( + add_custom_powerplants, + replace_natural_gas_fueltype, + replace_natural_gas_technology, +) + +path_cwd = pathlib.Path.cwd() + + +@pytest.mark.parametrize( + "query_value,expected", + [(False, (131, 18)), (True, (137, 18))], +) +def test_add_custom_powerplants(config, query_value, expected): + """ + Verify what returned by add_custom_powerplants. + """ + config_dict = config + config_dict["electricity"]["custom_powerplants"] = query_value + custom_powerplants_path = pathlib.Path( + path_cwd, "test", "test_data", "custom_powerplants_DE.csv" + ) + ppl_path = pathlib.Path(path_cwd, "test", "test_data", "powerplants_DE.csv") + ppl_df = pd.read_csv(ppl_path) + ppl_final = add_custom_powerplants( + ppl_df, + custom_powerplants_path, + config_dict["electricity"]["custom_powerplants"], + ) + assert ppl_df.shape == (131, 18) + assert ppl_final.shape == expected + + +def test_replace_natural_gas_technology(): + """ + Verify what returned by replace_natural_gas_technology. + """ + input_df = pd.DataFrame( + { + "Name": [ + "plant_hydro", + "plant_ng_1", + "plant_ng_2", + "plant_ng_3", + "plant_ng_4", + ], + "Fueltype": [ + "Hydro", + "Natural Gas", + "Natural Gas", + "Natural Gas", + "Natural Gas", + ], + "Technology": [ + "Run-Of-River", + "Steam Turbine", + "Combustion Engine", + "Not Found", + np.nan, + ], + } + ) + + reference_df = pd.DataFrame( + { + "Name": [ + "plant_hydro", + "plant_ng_1", + "plant_ng_2", + "plant_ng_3", + "plant_ng_4", + ], + "Fueltype": [ + "Hydro", + "Natural Gas", + "Natural Gas", + "Natural Gas", + "Natural Gas", + ], + "Technology": ["Run-Of-River", "CCGT", "OCGT", "CCGT", "CCGT"], + } + ) + modified_df = input_df.assign(Technology=replace_natural_gas_technology) + comparison_df = modified_df.compare(reference_df) + assert comparison_df.empty + + +def test_replace_natural_gas_fueltype(): + """ + Verify what returned by replace_natural_gas_fueltype. + """ + input_df = pd.DataFrame( + { + "Name": [ + "plant_hydro", + "plant_ng_1", + "plant_ng_2", + ], + "Fueltype": [ + "Hydro", + "Gas", + "Natural", + ], + "Technology": [ + "Run-Of-River", + "CCGT", + "OCGT", + ], + } + ) + + reference_df = pd.DataFrame( + { + "Name": [ + "plant_hydro", + "plant_ng_1", + "plant_ng_2", + ], + "Fueltype": [ + "Hydro", + "Natural Gas", + "Natural Gas", + ], + "Technology": [ + "Run-Of-River", + "CCGT", + "OCGT", + ], + } + ) + modified_df = input_df.assign(Fueltype=replace_natural_gas_fueltype) + comparison_df = modified_df.compare(reference_df) + assert comparison_df.empty diff --git a/test/test_data/custom_powerplants_DE.csv b/test/test_data/custom_powerplants_DE.csv new file mode 100644 index 000000000..65c0bc721 --- /dev/null +++ b/test/test_data/custom_powerplants_DE.csv @@ -0,0 +1,7 @@ +Name,Fueltype,Technology,Set,Country,Capacity,Efficiency,DateIn,DateRetrofit,DateOut,lat,lon,Duration,Volume_Mm3,DamHeight_m,StorageCapacity_MWh,EIC,projectID +Eichenkofen,Hydro,Run-Of-River,PP,DE,0.05,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.345217,11.921901,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3173'}} +Isenkraftwerk Generator,Hydro,Run-Of-River,PP,DE,3.15,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.26,12.634,,0.0,0.0,0.0,{},"{'JRC': {'JRC-H2724', 'JRC-H2725', 'JRC-H2719', 'JRC-H2723', 'JRC-H2727', 'JRC-H2720', 'JRC-H2721', 'JRC-H2726', 'JRC-H2722'}}" +Wasserkraftwerk Dietldorf,Hydro,Run-Of-River,PP,DE,0.108,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.205998,11.943661,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2963'}} +Bmkw Konigs Wusterhausen,Bioenergy,Steam Turbine,PP,DE,17.1,0.38,2003.0,2003.0,2023.0,52.30479,13.636029999999998,,0.0,0.0,0.0,{},{'OPSD': {'BNA0549'}} +Datteln,Hard Coal,Steam Turbine,CHP,DE,1014.1306522194916,,1964.0,1964.0,2038.0,51.6293,7.3307,,0.0,0.0,0.0,{},"{'BEYONDCOAL': {'BEYOND-DE-501'}, 'GEM': {'G100000102255', 'G100000102253', 'G100000102254', 'G100000102252'}, 'GEO': {'GEO-44321'}}" +Irsching,Natural Gas,CCGT,PP,DE,1822.0,0.5867942430703624,2010.0,2011.0,2051.0,48.767,11.58,,0.0,0.0,0.0,{'11WD2IRSC000179N'},"{'ENTSOE': {'11WD2IRSC000179N'}, 'GEM': {'L100000400188'}, 'OPSD': {'BNA0995', 'BNA0994'}, 'GEO': {'GEO-44306'}}" diff --git a/test/test_data/powerplants_DE.csv b/test/test_data/powerplants_DE.csv new file mode 100644 index 000000000..3d6dfa3fa --- /dev/null +++ b/test/test_data/powerplants_DE.csv @@ -0,0 +1,132 @@ +Name,Fueltype,Technology,Set,Country,Capacity,Efficiency,DateIn,DateRetrofit,DateOut,lat,lon,Duration,Volume_Mm3,DamHeight_m,StorageCapacity_MWh,EIC,projectID +Werkskraftwerk Sappi Alfeld,Hydro,Run-Of-River,PP,DE,0.1,0.8000000000000002,1912.0,1912.0,2012.0,51.98513,9.82246,,0.0,0.0,0.0,{},{'OPSD': {'BNA0012c'}} +Vilsworth,Hydro,Run-Of-River,PP,DE,0.145,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.291921,11.946966,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2906'}} +Generator,Hydro,Run-Of-River,PP,DE,0.635,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.574,13.799,,0.0,0.0,0.0,{},"{'JRC': {'JRC-H2804', 'JRC-H2699'}}" +Wasserkraftwerk Mittermurnthal,Hydro,Run-Of-River,PP,DE,0.1,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.373231,12.418529,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2973'}} +Wasserkraftanlage Am Muhlbach,Hydro,Run-Of-River,PP,DE,0.13,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.470735,7.939841,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2926'}} +Jena,Natural Gas,CCGT,CHP,DE,182.0,0.522,1996.0,1996.0,2036.0,50.89688,11.5857,,0.0,0.0,0.0,{},"{'GEM': {'L100000400191'}, 'OPSD': {'BNA0504'}}" +Wedel,Natural Gas,CCGT,CHP,DE,101.0,0.3072,1972.0,1972.0,2012.0,53.566837,9.725696,,0.0,0.0,0.0,{},"{'GEM': {'L100000101996'}, 'OPSD': {'BNA1016', 'BNA1015'}}" +Voerde West,Hard Coal,Steam Turbine,PP,DE,2234.0,,1970.0,2005.0,2017.0,51.5785,6.6819,,0.0,0.0,0.0,{},"{'BEYONDCOAL': {'BEYOND-DE-223'}, 'GEM': {'G100000110640', 'G100000110642', 'G100000110639', 'G100000110641'}, 'GEO': {'GEO-44200'}}" +Erlangen,Natural Gas,CCGT,CHP,DE,48.7,0.5720883392226148,1980.0,2014.0,2020.0,49.5925,11.0021,,0.0,0.0,0.0,{},"{'BEYONDCOAL': {'BEYOND-DE-79'}, 'GEM': {'L100000400150'}, 'OPSD': {'BNA0261c', 'BNA0261a'}}" +Duisburg Hochfeld,Hard Coal,Steam Turbine,PP,DE,247.0,,1965.0,1965.0,2018.0,51.4291,6.7508,,0.0,0.0,0.0,{},"{'BEYONDCOAL': {'BEYOND-DE-64'}, 'GEM': {'G100000102480', 'G100000102479'}}" +Roland Wilhelm,Hydro,Run-Of-River,PP,DE,0.0368,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.050347,12.913492,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3251'}} +Obermuhle Herbsleben,Hydro,Run-Of-River,PP,DE,0.067,,1955.5420560747664,1955.5420560747664,2055.542056074766,51.121443,10.832759,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3101'}} +Schliersee Wasserkraft,Hydro,Run-Of-River,PP,DE,0.13,,1955.5420560747664,1955.5420560747664,2055.542056074766,47.730162,11.8459245,,0.0,0.0,0.0,{},"{'JRC': {'JRC-H3018', 'JRC-H3219'}}" +Munster Port,Natural Gas,CCGT,CHP,DE,104.1,,2005.0,2005.0,2045.0,51.9501,7.6413,,0.0,0.0,0.0,{},{'GEM': {'L100000400223'}} +Muhlenbetrieb Rhene Graupenmuhle,Hydro,Run-Of-River,PP,DE,0.13,,1955.5420560747664,1955.5420560747664,2055.542056074766,52.09156,10.21213,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2923'}} +Gm,Natural Gas,CCGT,PP,DE,10.0,0.4048,2018.0,2018.0,2058.0,50.812318,10.2320784,,0.0,0.0,0.0,{},{'OPSD': {'BNA1927'}} +Thermische Abfallbehandlung Lauta Gmbh Co Ohg,Waste,Steam Turbine,PP,DE,15.7,0.33,2004.0,2004.0,2029.0,51.45071,14.11215,,0.0,0.0,0.0,{},{'OPSD': {'BNA1190'}} +Wasserkraftwerk Wiesmuhle In Glonn,Hydro,Run-Of-River,PP,DE,0.053,,1955.5420560747664,1955.5420560747664,2055.542056074766,47.982105,11.863389,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3160'}} +Wolfsburg West,Natural Gas,CCGT,CHP,DE,282.11270870833135,0.3858196078431373,1985.0,2018.0,2022.0,52.4295,10.7683,,0.0,0.0,0.0,{'11WD2FFW-000203E'},"{'BEYONDCOAL': {'BEYOND-DE-236'}, 'ENTSOE': {'11WD2FFW-000203E'}, 'GEM': {'L100000101923'}, 'OPSD': {'BNA0286', 'BNA1868'}}" +Heide Refinery,Natural Gas,CCGT,CHP,DE,47.0,,1999.0,1999.0,2039.0,54.1577,9.0745,,0.0,0.0,0.0,{},{'GEM': {'L100000408782'}} +Mullkraftwerk Schwandorf,Waste,Steam Turbine,PP,DE,54.0,0.33,1982.0,1982.0,2007.0,49.30998,12.08795,,0.0,0.0,0.0,{},{'OPSD': {'BNA1254'}} +Wasserkraftwerk Krautheim,Hydro,Run-Of-River,PP,DE,0.21,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.381929,9.637794,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2830'}} +Wka Gansegarten,Hydro,Run-Of-River,PP,DE,0.075,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.5905,9.2383,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3078'}} +Luenen,Hard Coal,Steam Turbine,CHP,DE,520.0,,1962.0,1996.0,2018.0,51.616,7.4781,,0.0,0.0,0.0,{},"{'BEYONDCOAL': {'BEYOND-DE-163'}, 'GEM': {'G100000106475', 'G100000106474'}, 'GEO': {'GEO-44329'}}" +Kentheim,Hydro,Run-Of-River,PP,DE,0.13,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.691473,8.731687,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2924'}} +Frechen Wachtberg,Lignite,Steam Turbine,PP,DE,118.03390422323176,0.3712,1959.0,1988.0,2022.0,50.8942,6.7911,,0.0,0.0,0.0,{},"{'BEYONDCOAL': {'BEYOND-DE-226'}, 'OPSD': {'BNA0292'}}" +Wasserkraftwerk Aura,Hydro,Run-Of-River,PP,DE,0.2,,1955.5420560747664,1955.5420560747664,2055.542056074766,50.164593,10.005482,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2833'}} +Wasserkraftanlage Muhle Oldisleben,Hydro,Run-Of-River,PP,DE,0.29,,1955.5420560747664,1955.5420560747664,2055.542056074766,51.300644,11.173349,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2770'}} +Mannheim,Hard Coal,Steam Turbine,CHP,DE,1978.476708784572,,1966.0,1966.0,2031.0,49.447,8.4925,,0.0,0.0,0.0,{},"{'BEYONDCOAL': {'BEYOND-DE-170'}, 'GEM': {'G100000103047', 'G100000103042', 'G100000103045', 'G100000103044', 'G100000103046', 'G100000103043'}, 'GEO': {'GEO-44455'}}" +Stadtmuhle,Hydro,Run-Of-River,PP,DE,0.034,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.207596,9.985508,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3269'}} +Salzgitter,Natural Gas,CCGT,CHP,DE,400.0,,1939.0,2011.0,2051.0,52.15473,10.38943,,0.0,0.0,0.0,{},"{'GEM': {'L100000408820'}, 'OPSD': {'BNA0864', 'BNA0865b', 'BNA0863'}}" +Wasserturbine,Hydro,Run-Of-River,PP,DE,0.6,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.479,10.368,,0.0,0.0,0.0,{},"{'JRC': {'JRC-H2894', 'JRC-H2895', 'JRC-H2896', 'JRC-H2893'}}" +Wkw Plecher Consult,Hydro,Run-Of-River,PP,DE,0.12,,1955.5420560747664,1955.5420560747664,2055.542056074766,50.513193,12.774458,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2939'}} +Wka Fuchs,Hydro,Run-Of-River,PP,DE,0.055,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.978701,12.838802,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3157'}} +Wasserkraftwerk Steinenbach,Hydro,Run-Of-River,PP,DE,0.099,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.479754,8.150429,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2983'}} +Helmshager Berg,Natural Gas,CCGT,CHP,DE,14.7,0.3696,1996.0,1996.0,2036.0,54.07039,13.39886,,0.0,0.0,0.0,{},{'OPSD': {'BNA0360'}} +Huntorf,Natural Gas,CCGT,PP,DE,321.0,0.3956,1978.0,2006.0,2046.0,53.18969,8.40869,,0.0,0.0,0.0,{'11WD2HUKW000298J'},"{'ENTSOE': {'11WD2HUKW000298J'}, 'GEM': {'L100000400183'}, 'OPSD': {'BNA0239'}}" +Sassbachmuhle,Hydro,Run-Of-River,PP,DE,0.27,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.717,13.581,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2778'}} +Obernach,Hydro,Run-Of-River,PP,DE,12.8,0.8000000000000002,1955.0,1955.0,2055.0,47.554694,11.291366,,0.0,0.0,0.0,{},"{'JRC': {'JRC-H1638'}, 'OPSD': {'BNA1273'}}" +Wkw Grossarmschlag Hauptkraftwerk,Hydro,Run-Of-River,PP,DE,3.35,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.883166,13.359728,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2517'}} +Wkw Oker,Hydro,Run-Of-River,PP,DE,0.3,,1955.5420560747664,1955.5420560747664,2055.542056074766,51.884,10.472,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2752'}} +Turbine,Natural Gas,CCGT,PP,DE,19.3,,1962.0,1972.0,2012.0,52.2940363,8.0229623,,0.0,0.0,0.0,{},"{'OPSD': {'BNA1864', 'BNA1865'}}" +Erzeugung Hiltensweiler,Hydro,Run-Of-River,PP,DE,0.496,,1955.5420560747664,1955.5420560747664,2055.542056074766,47.651,9.779,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2650'}} +Wasserkraftwerk Wiesentmuhle,Hydro,Run-Of-River,PP,DE,0.055,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.736643,11.139531,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3140'}} +Gud Anlage Drewsen,Natural Gas,CCGT,CHP,DE,13.0,0.54,2000.0,2000.0,2040.0,52.623451,10.245655,,0.0,0.0,0.0,{},{'OPSD': {'BNA1450'}} +Leitzach,Hydro,Pumped Storage,Store,DE,93.0,0.75,1960.0,1983.0,2083.0,47.874,11.8712,,0.0,0.0,0.0,{},"{'GEM': {'G601751'}, 'JRC': {'JRC-H552'}, 'OPSD': {'BNA0972', 'BNA0973'}}" +Wasserkraftwerk Walzenmuhle Trier Ehrang,Hydro,Run-Of-River,PP,DE,0.06,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.808406,6.683345,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3122'}} +Ineos,Natural Gas,CCGT,CHP,DE,24.0,0.3795,1995.0,1995.0,2035.0,51.4693,6.6436,,0.0,0.0,0.0,{},"{'GEM': {'L100000400185'}, 'OPSD': {'BNA1332'}}" +Wka Winkelhof,Hydro,Run-Of-River,PP,DE,0.075,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.386805,8.307135,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3079'}} +Frankfurt Oder,Lignite,Steam Turbine,PP,DE,45.18485396045591,,1997.0,1997.0,2024.0,52.3182,14.5315,,0.0,0.0,0.0,{},"{'BEYONDCOAL': {'BEYOND-DE-249'}, 'GEM': {'G100000102787'}}" +Kruemmel,Nuclear,Steam Turbine,PP,DE,1402.0,,1983.0,1983.0,2016.0,53.4102,10.4096,,0.0,0.0,0.0,{},"{'GEM': {'G100000500393'}, 'WIKIPEDIA': {'WIKIPEDIA-37'}, 'GEO': {'GEO-3909'}}" +Grohnde,Nuclear,Steam Turbine,PP,DE,1360.0,0.33,1984.0,1985.0,2021.0,52.0356,9.4135,,0.0,0.0,0.0,{'11WD2GHKW000296G'},"{'ENTSOE': {'11WD2GHKW000296G'}, 'GEM': {'G100000500039'}, 'WIKIPEDIA': {'WIKIPEDIA-25'}, 'OPSD': {'BNA0251'}, 'GEO': {'GEO-3414'}}" +Wasserkraftwerk Nossen An Der Freiberger Mulde,Hydro,Run-Of-River,PP,DE,0.29,,1955.5420560747664,1955.5420560747664,2055.542056074766,51.065898,13.293679,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2771'}} +Wkw Kylltal,Hydro,Run-Of-River,PP,DE,0.17,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.818451,6.66872,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2861'}} +Hottingen,Hydro,Run-Of-River,PP,DE,0.465,,1955.5420560747664,1955.5420560747664,2055.542056074766,47.633484,8.00019,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2666'}} +Wasserkraft,Hydro,Run-Of-River,PP,DE,0.11,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.874,8.708,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2962'}} +Aem,Hydro,Run-Of-River,PP,DE,0.08,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.96071,11.63968,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3051'}} +Kwk Anlage Neukochen,Natural Gas,CCGT,CHP,DE,15.0,0.341,1960.0,1960.0,2000.0,48.836270500000005,10.0931765,,0.0,0.0,0.0,{},{'OPSD': {'BNA1938'}} +Wasserkraftwerk Werker,Hydro,Run-Of-River,PP,DE,0.66,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.610772,10.998282,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2582'}} +Mohrenstein,Hydro,Run-Of-River,PP,DE,0.078,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.73701,12.233501,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3058'}} +Wasserkraftanlage Obere Hopfau,Hydro,Run-Of-River,PP,DE,0.0375,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.862239,12.00937,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3234'}} +Rostock,Hard Coal,Steam Turbine,CHP,DE,509.83113697943537,,1994.0,1994.0,2039.0,54.1428,12.1329,,0.0,0.0,0.0,{'11WD8ROST1C---P5'},"{'BEYONDCOAL': {'BEYOND-DE-195'}, 'ENTSOE': {'11WD8ROST1C---P5'}, 'GEM': {'G100000108642'}, 'GEO': {'GEO-44473'}}" +Karlstrasse,Waste,Steam Turbine,CHP,DE,12.0,0.33,1990.0,1990.0,2015.0,50.73382,7.08055,,0.0,0.0,0.0,{},{'OPSD': {'BNA0117a'}} +Kkw,Hydro,Run-Of-River,PP,DE,0.075,,1955.5420560747664,1955.5420560747664,2055.542056074766,47.813,10.567,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3083'}} +Heilbronn,Hard Coal,Steam Turbine,CHP,DE,982.7847956963438,,1958.0,2009.0,2026.0,49.1756,9.2076,,0.0,0.0,0.0,{'11WD4HLBR1CS---A'},"{'BEYONDCOAL': {'BEYOND-DE-125'}, 'ENTSOE': {'11WD4HLBR1CS---A'}, 'GEM': {'G100000103729', 'G100000103730', 'G100000103728', 'G100000103727', 'G100000103731'}, 'GEO': {'GEO-44464'}}" +Wolfen Envia,Natural Gas,CCGT,PP,DE,50.0,,1997.0,1997.0,2037.0,51.62448,12.30515,,0.0,0.0,0.0,{},{'GEM': {'L100000400284'}} +Waldeck,Hydro,Pumped Storage,Store,DE,480.0,0.75,1931.0,2009.0,2109.0,51.1678,9.047,6.22741935483871,0.0,0.0,0.0,{'11WD2W2--0002757'},"{'ENTSOE': {'11WD2W2--0002757'}, 'GEM': {'G601762', 'G601761'}, 'JRC': {'JRC-H74', 'JRC-H357'}, 'OPSD': {'BNA0229', 'BNA0228'}, 'GEO': {'GEO-44355', 'GEO-44356'}}" +Legau,Hydro,Run-Of-River,PP,DE,1.155,,1955.5420560747664,1955.5420560747664,2055.542056074766,47.869845,10.181145,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2546'}} +Holzschleiferei,Hydro,Run-Of-River,PP,DE,0.185,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.554223,9.468861,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2846'}} +Herne,Hard Coal,Steam Turbine,CHP,DE,460.9684782815872,,1962.0,1962.0,2026.0,51.5507,7.1875,,0.0,0.0,0.0,{'11WD7HERN2S--KWU'},"{'BEYONDCOAL': {'BEYOND-DE-128'}, 'ENTSOE': {'11WD7HERN2S--KWU'}, 'GEM': {'G100000103850', 'G100000103849', 'G100000103847', 'G100000103848'}, 'GEO': {'GEO-44213'}}" +Mittelsburen,Other,Steam Turbine,PP,DE,270.0,,1975.0,2002.0,2013.0,53.12891,8.68524,,0.0,0.0,0.0,{'11WD2BMIT0002731'},"{'OPSD': {'BNA0142', 'BNA0143'}}" +Gasblock,Natural Gas,CCGT,PP,DE,293.0,0.3597,1977.0,1977.0,2019.0,51.22138,6.731310000000001,,0.0,0.0,0.0,{'11WD7NORF5G--KWG'},{'OPSD': {'BNA0221c'}} +Werkskraftwerk Sappi Ehingen,Natural Gas,CCGT,PP,DE,4.0,0.3597,1977.0,1977.0,2017.0,48.26693,9.72626,,0.0,0.0,0.0,{},{'OPSD': {'BNA0232c'}} +Va Tech Rrt,Hydro,Run-Of-River,PP,DE,0.655,,1955.5420560747664,1955.5420560747664,2055.542056074766,50.933,12.703,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2584'}} +Emsland,Nuclear,Steam Turbine,PP,DE,1336.0,0.33,1988.0,1988.0,2023.0,52.4716,7.3204,,0.0,0.0,0.0,{'11WD7KKE-1K--KW5'},"{'ENTSOE': {'11WD7KKE-1K--KW5'}, 'GEM': {'G100000500045'}, 'WIKIPEDIA': {'WIKIPEDIA-18'}, 'OPSD': {'BNA0607'}, 'GEO': {'GEO-3071'}, 'GPD': {'WRI1005659'}}" +Werk Euskirchen,Lignite,Steam Turbine,PP,DE,14.5,0.3496,1979.0,1979.0,2024.0,50.65803,6.81012,,0.0,0.0,0.0,{},{'OPSD': {'BNA1141'}} +Basell Polyolefine,Natural Gas,CCGT,CHP,DE,52.0,0.3696,1996.0,1996.0,2036.0,50.83285,6.96534,,0.0,0.0,0.0,{},"{'GEM': {'L100000400115'}, 'OPSD': {'BNA1279'}}" +Rugenmuhle,Hydro,Run-Of-River,PP,DE,0.672,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.5,12.5,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2581'}} +Biblis,Nuclear,Steam Turbine,PP,DE,2525.0,,1974.0,1974.0,2011.0,49.7093,8.4148,,0.0,0.0,0.0,{},"{'GEM': {'G100000500092', 'G100000500074'}, 'WIKIPEDIA': {'WIKIPEDIA-14', 'WIKIPEDIA-15'}, 'GEO': {'GEO-2336'}}" +Wasserkraftwerk Trankmuhle,Hydro,Run-Of-River,PP,DE,0.055,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.433221,11.100392,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3141'}} +Mhkw Frankfurt,Waste,Steam Turbine,PP,DE,72.5,0.33,1969.0,2006.0,2031.0,50.16172,8.636105,,0.0,0.0,0.0,{},"{'OPSD': {'BNA0287b', 'BNA0287a'}}" +Gleislmuhle,Hydro,Run-Of-River,PP,DE,0.11,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.0755,11.832958,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2948'}} +Gud Dormagen,Natural Gas,CCGT,CHP,DE,562.0,0.54,2000.0,2000.0,2040.0,51.0791,6.8287,,0.0,0.0,0.0,{'11WD7BRAU5G-KW-N'},"{'ENTSOE': {'11WD7BRAU5G-KW-N'}, 'GEM': {'L100000400134'}, 'OPSD': {'BNA0199'}, 'GEO': {'GEO-44311'}}" +Formitz,Hydro,Run-Of-River,PP,DE,0.15,,1955.5420560747664,1955.5420560747664,2055.542056074766,50.200771,11.907373,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2885'}} +Wasserkraftanlage Katharinenthal,Hydro,Run-Of-River,PP,DE,0.05,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.389472,12.392978,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3168'}} +Wasserkraftwerk Pommelsbrunn Am Hogenbach,Hydro,Run-Of-River,PP,DE,0.032,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.504116,11.4948,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3278'}} +Eltmann,Natural Gas,CCGT,CHP,DE,62.0,0.3927,2007.0,2007.0,2047.0,49.984,10.65137,,0.0,0.0,0.0,{},"{'GEM': {'L100000400139'}, 'OPSD': {'BNA0243'}}" +Wasserkraftwerk Baierbrunn,Hydro,Run-Of-River,PP,DE,0.39,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.026886,11.50214,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2695'}} +Spitzenlastkraftwerk Wolfen,Natural Gas,CCGT,PP,DE,40.0,0.3817,1997.0,1997.0,2037.0,51.643127,12.228892,,0.0,0.0,0.0,{},{'OPSD': {'BNA1074'}} +Wka Kollmussage,Hydro,Run-Of-River,PP,DE,0.09,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.863282,13.407086,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3003'}} +Wasserkraftwerk Rechtenstein,Hydro,Run-Of-River,PP,DE,0.33,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.240348,9.545755,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2733'}} +Mhkw Mainz,Waste,Steam Turbine,PP,DE,15.6,0.3299999999999999,2009.0,2009.0,2034.0,50.025940000000006,8.24183,,0.0,0.0,0.0,{},{'OPSD': {'BNA1199'}} +West,Natural Gas,CCGT,CHP,DE,12.6,0.3861,2001.0,2001.0,2041.0,52.026244,8.866597,,0.0,0.0,0.0,{},{'OPSD': {'BNA1193'}} +Wka Unterlind,Hydro,Run-Of-River,PP,DE,0.036,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.97351,11.873683,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3255'}} +Wasserkraftwerk Worthmuhle,Hydro,Run-Of-River,PP,DE,0.07,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.495452,12.424479,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3092'}} +Wka Bermersbach,Hydro,Run-Of-River,PP,DE,0.055,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.6922,8.3395,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3142'}} +Oberhausen,Natural Gas,CCGT,CHP,DE,23.0,,1971.0,1971.0,2011.0,51.47067,6.8616,,0.0,0.0,0.0,{},{'GEM': {'L100000400231'}} +Werk,Hydro,Run-Of-River,PP,DE,0.474,,1955.5420560747664,1955.5420560747664,2055.542056074766,47.923726,12.834881333333334,,0.0,0.0,0.0,{},"{'JRC': {'JRC-H3266', 'JRC-H3052', 'JRC-H3213', 'JRC-H3265', 'JRC-H3212', 'JRC-H3264', 'JRC-H3053', 'JRC-H3054', 'JRC-H3214'}}" +Wka Penig,Hydro,Run-Of-River,PP,DE,0.655,,1955.5420560747664,1955.5420560747664,2055.542056074766,50.933045,12.703174,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2583'}} +Kwk Landshut,Natural Gas,CCGT,CHP,DE,17.6,0.4059,2019.0,2019.0,2059.0,48.5581138,12.1485812,,0.0,0.0,0.0,{},{'OPSD': {'BNA1934'}} +Wasserkraftwerk,Hydro,Run-Of-River,PP,DE,0.26,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.291,8.325,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2787'}} +Erzeugung Hermaringen,Hydro,Run-Of-River,PP,DE,0.452,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.599,10.255,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2667'}} +Wasserkraftanlage Rentschler,Hydro,Run-Of-River,PP,DE,0.08,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.549668,8.716258,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3047'}} +Stw,Natural Gas,CCGT,PP,DE,18.72,0.3817,1997.0,1997.0,2037.0,50.87413,13.39436,,0.0,0.0,0.0,{},{'OPSD': {'BNA1407'}} +Wkw Fahrbrucke,Hydro,Run-Of-River,PP,DE,0.6,,1955.5420560747664,1955.5420560747664,2055.542056074766,50.646229,12.630021,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2606'}} +Wasserkraftwerk Grub,Hydro,Run-Of-River,PP,DE,0.054,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.677287,11.984296,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3158'}} +Wasserkraftanlage Planena,Hydro,Run-Of-River,PP,DE,1.2,,1955.5420560747664,1955.5420560747664,2055.542056074766,51.416929,11.952942,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2545'}} +Stade,Nuclear,Steam Turbine,PP,DE,672.0,,1972.0,1972.0,2003.0,53.6197,9.5308,,0.0,0.0,0.0,{},"{'GEM': {'G100000500400'}, 'WIKIPEDIA': {'WIKIPEDIA-47'}}" +Schildescher Strasse,Natural Gas,CCGT,CHP,DE,74.0,0.3519484375,1966.0,1977.0,2017.0,52.0335,8.53906,,0.0,0.0,0.0,{},"{'GEM': {'L100000400245'}, 'OPSD': {'BNA0101', 'BNA0098'}}" +Aos Gmbh,Natural Gas,CCGT,CHP,DE,31.0,0.4112,2012.0,2012.0,2052.0,53.6575,9.502,,0.0,0.0,0.0,{},"{'GEM': {'L100000400113'}, 'OPSD': {'BNA1437'}}" +Scholven,Natural Gas,CCGT,CHP,DE,138.0,,2023.0,2023.0,2063.0,51.60064,7.00461,,0.0,0.0,0.0,{},{'GEM': {'L100000101959'}} +Lumpenmuhle,Hydro,Run-Of-River,PP,DE,0.045,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.160156,8.644773,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3194'}} +Werk Clauen,Natural Gas,CCGT,PP,DE,17.11,0.3883,2003.0,2003.0,2043.0,52.2321963,10.033285,,0.0,0.0,0.0,{},{'OPSD': {'BNA1499'}} +Schwarzheide,Natural Gas,CCGT,CHP,DE,131.0,0.513,1994.0,1994.0,2034.0,51.4762,13.8891,,0.0,0.0,0.0,{},"{'GEM': {'L100000400247'}, 'OPSD': {'BNA0893'}}" +Stadtmuehle Geisingen,Hydro,Run-Of-River,PP,DE,0.09,,1955.5420560747664,1955.5420560747664,2055.542056074766,47.918872,8.632982,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3015'}} +Schwandorf,Hard Coal,Steam Turbine,PP,DE,300.0,,1972.0,1972.0,2003.0,49.303104,12.077386,,0.0,0.0,0.0,{},{'GEM': {'G100000114633'}} +Knapsack,Natural Gas,CCGT,PP,DE,1210.0,0.5809390243902439,2007.0,2013.0,2053.0,50.859,6.841,,0.0,0.0,0.0,"{'11WD7KWKN1GBL203', '11WD7KWKN----KW1'}","{'ENTSOE': {'11WD7KWKN1GBL203', '11WD7KWKN----KW1'}, 'GEM': {'L100000400196'}, 'OPSD': {'BNA0548b', 'BNA0548a'}, 'GEO': {'GEO-44472', 'GEO-44314'}}" +Wka Rothenburg,Hydro,Run-Of-River,PP,DE,4.5,,1955.5420560747664,1955.5420560747664,2055.542056074766,51.646,11.753,,0.0,0.0,0.0,{},"{'JRC': {'JRC-H2642', 'JRC-H2645', 'JRC-H2644', 'JRC-H2646', 'JRC-H2643', 'JRC-H2648', 'JRC-H2647', 'JRC-H2640', 'JRC-H2641'}}" +Weig Community,Natural Gas,CCGT,CHP,DE,63.0,0.532002966101695,1971.0,2013.0,2053.0,50.32113,7.23391,,0.0,0.0,0.0,{},"{'GEM': {'L100000400273'}, 'OPSD': {'BNA1523b', 'BNA1523a', 'BNA1523d'}}" +Bp Werk Lingen,Natural Gas,CCGT,PP,DE,66.0,0.3806,1996.0,1996.0,2036.0,52.56060600000001,7.295164,,0.0,0.0,0.0,{},{'OPSD': {'BNA1509'}} +Niederaichbach,Hydro,Run-Of-River,PP,DE,16.2,0.8,1951.0,1951.0,2051.0,48.6039132,12.3023425,,0.0,0.0,0.0,{},"{'JRC': {'JRC-H1497'}, 'OPSD': {'BNA1217'}}" +Eixendorf,Hydro,Run-Of-River,PP,DE,0.39,,1955.5420560747664,1955.5420560747664,2055.542056074766,49.339499,12.4797875,,0.0,0.0,0.0,{},"{'JRC': {'JRC-H2840', 'JRC-H2843'}}" +Beilhack,Hydro,Run-Of-River,PP,DE,0.075,,1955.5420560747664,1955.5420560747664,2055.542056074766,47.85027,12.1263,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3067'}} +Energiewerk,Hydro,Run-Of-River,PP,DE,0.072,,1955.5420560747664,1955.5420560747664,2055.542056074766,47.916547,8.073437,,0.0,0.0,0.0,{},{'JRC': {'JRC-H3091'}} +Breitenthal,Hydro,Run-Of-River,PP,DE,1.08,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.2345,10.30013,,0.0,0.0,0.0,{},"{'JRC': {'JRC-H2780', 'JRC-H2781', 'JRC-H2779', 'JRC-H2782'}}" +Wasserkraftanlage Odertalsperre,Hydro,Run-Of-River,PP,DE,4.86,,1955.5420560747664,1955.5420560747664,2055.542056074766,51.646122,10.504712,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2502'}} +Industriekraftwerk Rudersdorf,Bioenergy,Steam Turbine,PP,DE,35.0,,2009.0,2009.0,2029.0,52.4901,13.8299,,0.0,0.0,0.0,{},{'GEM': {'G200285'}} +Psw Goldisthal,Hydro,Pumped Storage,Store,DE,1060.0,0.75,2003.0,2004.0,2104.0,50.5178,11.0085,7.59433962264151,0.0,0.0,0.0,{'11WD8GOLD1H----6'},"{'ENTSOE': {'11WD8GOLD1H----6'}, 'GEM': {'G601744'}, 'JRC': {'JRC-H12'}, 'OPSD': {'BNA0350'}, 'GEO': {'GEO-44336'}}" +Hausen,Hydro,Run-Of-River,PP,DE,0.316,,1955.5420560747664,1955.5420560747664,2055.542056074766,47.691113,7.842742,,0.0,0.0,0.0,{},{'JRC': {'JRC-H2741'}} +Wasserkraftwerk Asamhof,Hydro,Run-Of-River,PP,DE,0.068,,1955.5420560747664,1955.5420560747664,2055.542056074766,48.293749,10.9874455,,0.0,0.0,0.0,{},"{'JRC': {'JRC-H3272', 'JRC-H3270'}}" +Stade Dow,Natural Gas,CCGT,CHP,DE,163.0,0.2748631123919309,2015.0,2015.0,2014.0,53.65347,9.49436,,0.0,0.0,0.0,{},"{'GEM': {'L100000400251'}, 'OPSD': {'BNA0918b', 'BNA0918a'}}"