diff --git a/config/config.default.yaml b/config/config.default.yaml index b37aaac0..7ef08e2f 100644 --- a/config/config.default.yaml +++ b/config/config.default.yaml @@ -116,6 +116,7 @@ electricity: powerplants_filter: (DateOut >= 2022 or DateOut != DateOut) custom_powerplants: false + 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] diff --git a/doc/configtables/electricity.csv b/doc/configtables/electricity.csv index 00eec0c4..22a22d57 100644 --- a/doc/configtables/electricity.csv +++ b/doc/configtables/electricity.csv @@ -24,6 +24,8 @@ powerplants_filter,--,"use `pandas.query `_ strings here, e.g. ``Country in ['Germany']``",Filter query for the custom powerplant database. ,,, +everywhere_powerplants,--,"Any subset of {nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass}","List of conventional power plants to add to every node in the model with zero initial capacity. To be used in combination with ``extendable_carriers`` to allow for building conventional powerplants irrespective of existing locations." +,,, 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. diff --git a/doc/release_notes.rst b/doc/release_notes.rst index 2675e4c6..940a391c 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -7,10 +7,10 @@ Release Notes ########################################## -.. Upcoming Release -.. ================ +Upcoming Release +================ -.. * new features +* New configuration option ``everywhere_powerplants`` to build conventional powerplants everywhere, irrespective of existing powerplants locations, in the network (https://github.com/PyPSA/pypsa-eur/pull/850). PyPSA-Eur 0.9.0 (5th January 2024) ================================== diff --git a/envs/environment.fixed.yaml b/envs/environment.fixed.yaml index 7dd903a3..31a58835 100644 --- a/envs/environment.fixed.yaml +++ b/envs/environment.fixed.yaml @@ -1,492 +1,496 @@ +# SPDX-FileCopyrightText: : 2017-2024 The PyPSA-Eur Authors +# +# SPDX-License-Identifier: CC0-1.0 + name: pypsa-eur channels: - - bioconda - - gurobi - - http://conda.anaconda.org/gurobi - - conda-forge - - defaults +- bioconda +- gurobi +- http://conda.anaconda.org/gurobi +- conda-forge +- defaults dependencies: - - _libgcc_mutex=0.1 - - _openmp_mutex=4.5 - - affine=2.4.0 - - alsa-lib=1.2.10 - - ampl-mp=3.1.0 - - amply=0.1.6 - - anyio=4.2.0 - - appdirs=1.4.4 - - argon2-cffi=23.1.0 - - argon2-cffi-bindings=21.2.0 - - arrow=1.3.0 - - asttokens=2.4.1 - - async-lru=2.0.4 - - atk-1.0=2.38.0 - - atlite=0.2.12 - - attr=2.5.1 - - attrs=23.2.0 - - aws-c-auth=0.7.8 - - aws-c-cal=0.6.9 - - aws-c-common=0.9.10 - - aws-c-compression=0.2.17 - - aws-c-event-stream=0.3.2 - - aws-c-http=0.7.15 - - aws-c-io=0.13.36 - - aws-c-mqtt=0.10.0 - - aws-c-s3=0.4.7 - - aws-c-sdkutils=0.1.13 - - aws-checksums=0.1.17 - - aws-crt-cpp=0.25.1 - - aws-sdk-cpp=1.11.210 - - babel=2.14.0 - - beautifulsoup4=4.12.2 - - bleach=6.1.0 - - blosc=1.21.5 - - bokeh=3.3.2 - - bottleneck=1.3.7 - - branca=0.7.0 - - brotli=1.1.0 - - brotli-bin=1.1.0 - - brotli-python=1.1.0 - - bzip2=1.0.8 - - c-ares=1.24.0 - - c-blosc2=2.12.0 - - ca-certificates=2023.11.17 - - cached-property=1.5.2 - - cached_property=1.5.2 - - cairo=1.18.0 - - cartopy=0.22.0 - - cdsapi=0.6.1 - - certifi=2023.11.17 - - cffi=1.16.0 - - cfitsio=4.3.1 - - cftime=1.6.3 - - charset-normalizer=3.3.2 - - click=8.1.7 - - click-plugins=1.1.1 - - cligj=0.7.2 - - cloudpickle=3.0.0 - - coin-or-cbc=2.10.10 - - coin-or-cgl=0.60.7 - - coin-or-clp=1.17.8 - - coin-or-osi=0.108.8 - - coin-or-utils=2.11.9 - - coincbc=2.10.10 - - colorama=0.4.6 - - comm=0.1.4 - - configargparse=1.7 - - connection_pool=0.0.3 - - contourpy=1.2.0 - - country_converter=1.2 - - cycler=0.12.1 - - cytoolz=0.12.2 - - dask=2023.12.1 - - dask-core=2023.12.1 - - datrie=0.8.2 - - dbus=1.13.6 - - debugpy=1.8.0 - - decorator=5.1.1 - - defusedxml=0.7.1 - - deprecation=2.1.0 - - descartes=1.1.0 - - distributed=2023.12.1 - - distro=1.8.0 - - docutils=0.20.1 - - dpath=2.1.6 - - entrypoints=0.4 - - entsoe-py=0.6.1 - - et_xmlfile=1.1.0 - - exceptiongroup=1.2.0 - - executing=2.0.1 - - expat=2.5.0 - - fiona=1.9.5 - - folium=0.15.1 - - font-ttf-dejavu-sans-mono=2.37 - - font-ttf-inconsolata=3.000 - - font-ttf-source-code-pro=2.038 - - font-ttf-ubuntu=0.83 - - fontconfig=2.14.2 - - fonts-conda-ecosystem=1 - - fonts-conda-forge=1 - - fonttools=4.47.0 - - fqdn=1.5.1 - - freetype=2.12.1 - - freexl=2.0.0 - - fribidi=1.0.10 - - fsspec=2023.12.2 - - gdal=3.7.3 - - gdk-pixbuf=2.42.10 - - geographiclib=1.52 - - geojson-rewind=1.1.0 - - geopandas=0.14.1 - - geopandas-base=0.14.1 - - geopy=2.4.1 - - geos=3.12.1 - - geotiff=1.7.1 - - gettext=0.21.1 - - gflags=2.2.2 - - giflib=5.2.1 - - gitdb=4.0.11 - - gitpython=3.1.40 - - glib=2.78.3 - - glib-tools=2.78.3 - - glog=0.6.0 - - glpk=5.0 - - gmp=6.3.0 - - graphite2=1.3.13 - - graphviz=9.0.0 - - gst-plugins-base=1.22.8 - - gstreamer=1.22.8 - - gtk2=2.24.33 - - gts=0.7.6 - - gurobi=11.0.0 - - harfbuzz=8.3.0 - - hdf4=4.2.15 - - hdf5=1.14.3 - - humanfriendly=10.0 - - icu=73.2 - - idna=3.6 - - importlib-metadata=7.0.1 - - importlib_metadata=7.0.1 - - importlib_resources=6.1.1 - - iniconfig=2.0.0 - - ipopt=3.14.13 - - ipykernel=6.28.0 - - ipython=8.19.0 - - ipywidgets=8.1.1 - - isoduration=20.11.0 - - jedi=0.19.1 - - jinja2=3.1.2 - - joblib=1.3.2 - - json-c=0.17 - - json5=0.9.14 - - jsonpointer=2.4 - - jsonschema=4.20.0 - - jsonschema-specifications=2023.12.1 - - jsonschema-with-format-nongpl=4.20.0 - - jupyter=1.0.0 - - jupyter-lsp=2.2.1 - - jupyter_client=8.6.0 - - jupyter_console=6.6.3 - - jupyter_core=5.6.1 - - jupyter_events=0.9.0 - - jupyter_server=2.12.1 - - jupyter_server_terminals=0.5.1 - - jupyterlab=4.0.10 - - jupyterlab_pygments=0.3.0 - - jupyterlab_server=2.25.2 - - jupyterlab_widgets=3.0.9 - - kealib=1.5.3 - - keyutils=1.6.1 - - kiwisolver=1.4.5 - - krb5=1.21.2 - - lame=3.100 - - lcms2=2.16 - - ld_impl_linux-64=2.40 - - lerc=4.0.0 - - libabseil=20230802.1 - - libaec=1.1.2 - - libarchive=3.7.2 - - libarrow=14.0.2 - - libarrow-acero=14.0.2 - - libarrow-dataset=14.0.2 - - libarrow-flight=14.0.2 - - libarrow-flight-sql=14.0.2 - - libarrow-gandiva=14.0.2 - - libarrow-substrait=14.0.2 - - libblas=3.9.0 - - libboost-headers=1.84.0 - - libbrotlicommon=1.1.0 - - libbrotlidec=1.1.0 - - libbrotlienc=1.1.0 - - libcap=2.69 - - libcblas=3.9.0 - - libclang=15.0.7 - - libclang13=15.0.7 - - libcrc32c=1.1.2 - - libcups=2.3.3 - - libcurl=8.5.0 - - libdeflate=1.19 - - libedit=3.1.20191231 - - libev=4.33 - - libevent=2.1.12 - - libexpat=2.5.0 - - libffi=3.4.2 - - libflac=1.4.3 - - libgcc-ng=13.2.0 - - libgcrypt=1.10.3 - - libgd=2.3.3 - - libgdal=3.7.3 - - libgfortran-ng=13.2.0 - - libgfortran5=13.2.0 - - libglib=2.78.3 - - libgomp=13.2.0 - - libgoogle-cloud=2.12.0 - - libgpg-error=1.47 - - libgrpc=1.59.3 - - libhwloc=2.9.1 - - libiconv=1.17 - - libjpeg-turbo=3.0.0 - - libkml=1.3.0 - - liblapack=3.9.0 - - liblapacke=3.9.0 - - libllvm15=15.0.7 - - libnetcdf=4.9.2 - - libnghttp2=1.58.0 - - libnl=3.9.0 - - libnsl=2.0.1 - - libnuma=2.0.16 - - libogg=1.3.4 - - libopenblas=0.3.25 - - libopus=1.3.1 - - libparquet=14.0.2 - - libpng=1.6.39 - - libpq=16.1 - - libprotobuf=4.24.4 - - libre2-11=2023.06.02 - - librsvg=2.56.3 - - librttopo=1.1.0 - - libsndfile=1.2.2 - - libsodium=1.0.18 - - libspatialindex=1.9.3 - - libspatialite=5.1.0 - - libspral=2023.08.02 - - libsqlite=3.44.2 - - libssh2=1.11.0 - - libstdcxx-ng=13.2.0 - - libsystemd0=255 - - libthrift=0.19.0 - - libtiff=4.6.0 - - libutf8proc=2.8.0 - - libuuid=2.38.1 - - libvorbis=1.3.7 - - libwebp=1.3.2 - - libwebp-base=1.3.2 - - libxcb=1.15 - - libxcrypt=4.4.36 - - libxkbcommon=1.6.0 - - libxml2=2.11.6 - - libxslt=1.1.37 - - libzip=1.10.1 - - libzlib=1.2.13 - - linopy=0.3.2 - - locket=1.0.0 - - lxml=4.9.3 - - lz4=4.3.2 - - lz4-c=1.9.4 - - lzo=2.10 - - mapclassify=2.6.1 - - markupsafe=2.1.3 - - matplotlib=3.8.2 - - matplotlib-base=3.8.2 - - matplotlib-inline=0.1.6 - - memory_profiler=0.61.0 - - metis=5.1.0 - - minizip=4.0.4 - - mistune=3.0.2 - - mpg123=1.32.3 - - msgpack-python=1.0.7 - - mumps-include=5.2.1 - - mumps-seq=5.2.1 - - munch=4.0.0 - - munkres=1.1.4 - - mysql-common=8.0.33 - - mysql-libs=8.0.33 - - nbclient=0.8.0 - - nbconvert=7.14.0 - - nbconvert-core=7.14.0 - - nbconvert-pandoc=7.14.0 - - nbformat=5.9.2 - - ncurses=6.4 - - nest-asyncio=1.5.8 - - netcdf4=1.6.5 - - networkx=3.2.1 - - nomkl=1.0 - - notebook=7.0.6 - - notebook-shim=0.2.3 - - nspr=4.35 - - nss=3.96 - - numexpr=2.8.8 - - numpy=1.26.2 - - openjdk=21.0.1 - - openjpeg=2.5.0 - - openpyxl=3.1.2 - - openssl=3.2.0 - - orc=1.9.2 - - overrides=7.4.0 - - packaging=23.2 - - pandas=2.1.4 - - pandoc=3.1.3 - - pandocfilters=1.5.0 - - pango=1.50.14 - - parso=0.8.3 - - partd=1.4.1 - - patsy=0.5.5 - - pcre2=10.42 - - pexpect=4.8.0 - - pickleshare=0.7.5 - - pillow=10.2.0 - - pip=23.3.2 - - pixman=0.42.2 - - pkgutil-resolve-name=1.3.10 - - plac=1.4.2 - - platformdirs=4.1.0 - - pluggy=1.3.0 - - ply=3.11 - - poppler=23.12.0 - - poppler-data=0.4.12 - - postgresql=16.1 - - powerplantmatching=0.5.8 - - progressbar2=4.3.2 - - proj=9.3.0 - - prometheus_client=0.19.0 - - prompt-toolkit=3.0.42 - - prompt_toolkit=3.0.42 - - psutil=5.9.7 - - pthread-stubs=0.4 - - ptyprocess=0.7.0 - - pulp=2.7.0 - - pulseaudio-client=16.1 - - pure_eval=0.2.2 - - py-cpuinfo=9.0.0 - - pyarrow=14.0.2 - - pyarrow-hotfix=0.6 - - pycountry=22.3.5 - - pycparser=2.21 - - pygments=2.17.2 - - pyomo=6.6.1 - - pyparsing=3.1.1 - - pyproj=3.6.1 - - pypsa=0.26.2 - - pyqt=5.15.9 - - pyqt5-sip=12.12.2 - - pyshp=2.3.1 - - pysocks=1.7.1 - - pytables=3.9.2 - - pytest=7.4.4 - - python=3.11.7 - - python-dateutil=2.8.2 - - python-fastjsonschema=2.19.1 - - python-json-logger=2.0.7 - - python-tzdata=2023.4 - - python-utils=3.8.1 - - python_abi=3.11 - - pytz=2023.3.post1 - - pyxlsb=1.0.10 - - pyyaml=6.0.1 - - pyzmq=25.1.2 - - qt-main=5.15.8 - - qtconsole-base=5.5.1 - - qtpy=2.4.1 - - rasterio=1.3.9 - - rdma-core=49.0 - - re2=2023.06.02 - - readline=8.2 - - referencing=0.32.0 - - requests=2.31.0 - - reretry=0.11.8 - - rfc3339-validator=0.1.4 - - rfc3986-validator=0.1.1 - - rioxarray=0.15.0 - - rpds-py=0.16.2 - - rtree=1.1.0 - - s2n=1.4.1 - - scikit-learn=1.3.2 - - scipy=1.11.4 - - scotch=6.0.9 - - seaborn=0.13.0 - - seaborn-base=0.13.0 - - send2trash=1.8.2 - - setuptools=69.0.3 - - setuptools-scm=8.0.4 - - setuptools_scm=8.0.4 - - shapely=2.0.2 - - sip=6.7.12 - - six=1.16.0 - - smart_open=6.4.0 - - smmap=5.0.0 - - snakemake-minimal=7.32.4 - - snappy=1.1.10 - - sniffio=1.3.0 - - snuggs=1.4.7 - - sortedcontainers=2.4.0 - - soupsieve=2.5 - - sqlite=3.44.2 - - stack_data=0.6.2 - - statsmodels=0.14.1 - - stopit=1.1.2 - - tabula-py=2.7.0 - - tabulate=0.9.0 - - tblib=3.0.0 - - terminado=0.18.0 - - threadpoolctl=3.2.0 - - throttler=1.2.2 - - tiledb=2.18.2 - - tinycss2=1.2.1 - - tk=8.6.13 - - toml=0.10.2 - - tomli=2.0.1 - - toolz=0.12.0 - - toposort=1.10 - - tornado=6.3.3 - - tqdm=4.66.1 - - traitlets=5.14.1 - - types-python-dateutil=2.8.19.14 - - typing-extensions=4.9.0 - - typing_extensions=4.9.0 - - typing_utils=0.1.0 - - tzcode=2023d - - tzdata=2023d - - ucx=1.15.0 - - unidecode=1.3.7 - - unixodbc=2.3.12 - - uri-template=1.3.0 - - uriparser=0.9.7 - - urllib3=2.1.0 - - validators=0.22.0 - - wcwidth=0.2.12 - - webcolors=1.13 - - webencodings=0.5.1 - - websocket-client=1.7.0 - - wheel=0.42.0 - - widgetsnbextension=4.0.9 - - wrapt=1.16.0 - - xarray=2023.12.0 - - xcb-util=0.4.0 - - xcb-util-image=0.4.0 - - xcb-util-keysyms=0.4.0 - - xcb-util-renderutil=0.3.9 - - xcb-util-wm=0.4.1 - - xerces-c=3.2.5 - - xkeyboard-config=2.40 - - xlrd=2.0.1 - - xorg-fixesproto=5.0 - - xorg-inputproto=2.3.2 - - xorg-kbproto=1.0.7 - - xorg-libice=1.1.1 - - xorg-libsm=1.2.4 - - xorg-libx11=1.8.7 - - xorg-libxau=1.0.11 - - xorg-libxdmcp=1.1.3 - - xorg-libxext=1.3.4 - - xorg-libxfixes=5.0.3 - - xorg-libxi=1.7.10 - - xorg-libxrender=0.9.11 - - xorg-libxt=1.3.0 - - xorg-libxtst=1.2.3 - - xorg-recordproto=1.14.2 - - xorg-renderproto=0.11.1 - - xorg-xextproto=7.3.0 - - xorg-xf86vidmodeproto=2.3.1 - - xorg-xproto=7.0.31 - - xyzservices=2023.10.1 - - xz=5.2.6 - - yaml=0.2.5 - - yte=1.5.4 - - zeromq=4.3.5 - - zict=3.0.0 - - zipp=3.17.0 - - zlib=1.2.13 - - zlib-ng=2.0.7 - - zstd=1.5.5 - - pip: - - highspy==1.5.3 - - tsam==2.3.1 +- _libgcc_mutex=0.1 +- _openmp_mutex=4.5 +- affine=2.4.0 +- alsa-lib=1.2.10 +- ampl-mp=3.1.0 +- amply=0.1.6 +- anyio=4.2.0 +- appdirs=1.4.4 +- argon2-cffi=23.1.0 +- argon2-cffi-bindings=21.2.0 +- arrow=1.3.0 +- asttokens=2.4.1 +- async-lru=2.0.4 +- atk-1.0=2.38.0 +- atlite=0.2.12 +- attr=2.5.1 +- attrs=23.2.0 +- aws-c-auth=0.7.8 +- aws-c-cal=0.6.9 +- aws-c-common=0.9.10 +- aws-c-compression=0.2.17 +- aws-c-event-stream=0.3.2 +- aws-c-http=0.7.15 +- aws-c-io=0.13.36 +- aws-c-mqtt=0.10.0 +- aws-c-s3=0.4.7 +- aws-c-sdkutils=0.1.13 +- aws-checksums=0.1.17 +- aws-crt-cpp=0.25.1 +- aws-sdk-cpp=1.11.210 +- babel=2.14.0 +- beautifulsoup4=4.12.2 +- bleach=6.1.0 +- blosc=1.21.5 +- bokeh=3.3.2 +- bottleneck=1.3.7 +- branca=0.7.0 +- brotli=1.1.0 +- brotli-bin=1.1.0 +- brotli-python=1.1.0 +- bzip2=1.0.8 +- c-ares=1.24.0 +- c-blosc2=2.12.0 +- ca-certificates=2023.11.17 +- cached-property=1.5.2 +- cached_property=1.5.2 +- cairo=1.18.0 +- cartopy=0.22.0 +- cdsapi=0.6.1 +- certifi=2023.11.17 +- cffi=1.16.0 +- cfitsio=4.3.1 +- cftime=1.6.3 +- charset-normalizer=3.3.2 +- click=8.1.7 +- click-plugins=1.1.1 +- cligj=0.7.2 +- cloudpickle=3.0.0 +- coin-or-cbc=2.10.10 +- coin-or-cgl=0.60.7 +- coin-or-clp=1.17.8 +- coin-or-osi=0.108.8 +- coin-or-utils=2.11.9 +- coincbc=2.10.10 +- colorama=0.4.6 +- comm=0.1.4 +- configargparse=1.7 +- connection_pool=0.0.3 +- contourpy=1.2.0 +- country_converter=1.2 +- cycler=0.12.1 +- cytoolz=0.12.2 +- dask=2023.12.1 +- dask-core=2023.12.1 +- datrie=0.8.2 +- dbus=1.13.6 +- debugpy=1.8.0 +- decorator=5.1.1 +- defusedxml=0.7.1 +- deprecation=2.1.0 +- descartes=1.1.0 +- distributed=2023.12.1 +- distro=1.8.0 +- docutils=0.20.1 +- dpath=2.1.6 +- entrypoints=0.4 +- entsoe-py=0.6.1 +- et_xmlfile=1.1.0 +- exceptiongroup=1.2.0 +- executing=2.0.1 +- expat=2.5.0 +- fiona=1.9.5 +- folium=0.15.1 +- font-ttf-dejavu-sans-mono=2.37 +- font-ttf-inconsolata=3.000 +- font-ttf-source-code-pro=2.038 +- font-ttf-ubuntu=0.83 +- fontconfig=2.14.2 +- fonts-conda-ecosystem=1 +- fonts-conda-forge=1 +- fonttools=4.47.0 +- fqdn=1.5.1 +- freetype=2.12.1 +- freexl=2.0.0 +- fribidi=1.0.10 +- fsspec=2023.12.2 +- gdal=3.7.3 +- gdk-pixbuf=2.42.10 +- geographiclib=1.52 +- geojson-rewind=1.1.0 +- geopandas=0.14.1 +- geopandas-base=0.14.1 +- geopy=2.4.1 +- geos=3.12.1 +- geotiff=1.7.1 +- gettext=0.21.1 +- gflags=2.2.2 +- giflib=5.2.1 +- gitdb=4.0.11 +- gitpython=3.1.40 +- glib=2.78.3 +- glib-tools=2.78.3 +- glog=0.6.0 +- glpk=5.0 +- gmp=6.3.0 +- graphite2=1.3.13 +- graphviz=9.0.0 +- gst-plugins-base=1.22.8 +- gstreamer=1.22.8 +- gtk2=2.24.33 +- gts=0.7.6 +- gurobi=11.0.0 +- harfbuzz=8.3.0 +- hdf4=4.2.15 +- hdf5=1.14.3 +- humanfriendly=10.0 +- icu=73.2 +- idna=3.6 +- importlib-metadata=7.0.1 +- importlib_metadata=7.0.1 +- importlib_resources=6.1.1 +- iniconfig=2.0.0 +- ipopt=3.14.13 +- ipykernel=6.28.0 +- ipython=8.19.0 +- ipywidgets=8.1.1 +- isoduration=20.11.0 +- jedi=0.19.1 +- jinja2=3.1.2 +- joblib=1.3.2 +- json-c=0.17 +- json5=0.9.14 +- jsonpointer=2.4 +- jsonschema=4.20.0 +- jsonschema-specifications=2023.12.1 +- jsonschema-with-format-nongpl=4.20.0 +- jupyter=1.0.0 +- jupyter-lsp=2.2.1 +- jupyter_client=8.6.0 +- jupyter_console=6.6.3 +- jupyter_core=5.6.1 +- jupyter_events=0.9.0 +- jupyter_server=2.12.1 +- jupyter_server_terminals=0.5.1 +- jupyterlab=4.0.10 +- jupyterlab_pygments=0.3.0 +- jupyterlab_server=2.25.2 +- jupyterlab_widgets=3.0.9 +- kealib=1.5.3 +- keyutils=1.6.1 +- kiwisolver=1.4.5 +- krb5=1.21.2 +- lame=3.100 +- lcms2=2.16 +- ld_impl_linux-64=2.40 +- lerc=4.0.0 +- libabseil=20230802.1 +- libaec=1.1.2 +- libarchive=3.7.2 +- libarrow=14.0.2 +- libarrow-acero=14.0.2 +- libarrow-dataset=14.0.2 +- libarrow-flight=14.0.2 +- libarrow-flight-sql=14.0.2 +- libarrow-gandiva=14.0.2 +- libarrow-substrait=14.0.2 +- libblas=3.9.0 +- libboost-headers=1.84.0 +- libbrotlicommon=1.1.0 +- libbrotlidec=1.1.0 +- libbrotlienc=1.1.0 +- libcap=2.69 +- libcblas=3.9.0 +- libclang=15.0.7 +- libclang13=15.0.7 +- libcrc32c=1.1.2 +- libcups=2.3.3 +- libcurl=8.5.0 +- libdeflate=1.19 +- libedit=3.1.20191231 +- libev=4.33 +- libevent=2.1.12 +- libexpat=2.5.0 +- libffi=3.4.2 +- libflac=1.4.3 +- libgcc-ng=13.2.0 +- libgcrypt=1.10.3 +- libgd=2.3.3 +- libgdal=3.7.3 +- libgfortran-ng=13.2.0 +- libgfortran5=13.2.0 +- libglib=2.78.3 +- libgomp=13.2.0 +- libgoogle-cloud=2.12.0 +- libgpg-error=1.47 +- libgrpc=1.59.3 +- libhwloc=2.9.1 +- libiconv=1.17 +- libjpeg-turbo=3.0.0 +- libkml=1.3.0 +- liblapack=3.9.0 +- liblapacke=3.9.0 +- libllvm15=15.0.7 +- libnetcdf=4.9.2 +- libnghttp2=1.58.0 +- libnl=3.9.0 +- libnsl=2.0.1 +- libnuma=2.0.16 +- libogg=1.3.4 +- libopenblas=0.3.25 +- libopus=1.3.1 +- libparquet=14.0.2 +- libpng=1.6.39 +- libpq=16.1 +- libprotobuf=4.24.4 +- libre2-11=2023.06.02 +- librsvg=2.56.3 +- librttopo=1.1.0 +- libsndfile=1.2.2 +- libsodium=1.0.18 +- libspatialindex=1.9.3 +- libspatialite=5.1.0 +- libspral=2023.08.02 +- libsqlite=3.44.2 +- libssh2=1.11.0 +- libstdcxx-ng=13.2.0 +- libsystemd0=255 +- libthrift=0.19.0 +- libtiff=4.6.0 +- libutf8proc=2.8.0 +- libuuid=2.38.1 +- libvorbis=1.3.7 +- libwebp=1.3.2 +- libwebp-base=1.3.2 +- libxcb=1.15 +- libxcrypt=4.4.36 +- libxkbcommon=1.6.0 +- libxml2=2.11.6 +- libxslt=1.1.37 +- libzip=1.10.1 +- libzlib=1.2.13 +- linopy=0.3.2 +- locket=1.0.0 +- lxml=4.9.3 +- lz4=4.3.2 +- lz4-c=1.9.4 +- lzo=2.10 +- mapclassify=2.6.1 +- markupsafe=2.1.3 +- matplotlib=3.8.2 +- matplotlib-base=3.8.2 +- matplotlib-inline=0.1.6 +- memory_profiler=0.61.0 +- metis=5.1.0 +- minizip=4.0.4 +- mistune=3.0.2 +- mpg123=1.32.3 +- msgpack-python=1.0.7 +- mumps-include=5.2.1 +- mumps-seq=5.2.1 +- munch=4.0.0 +- munkres=1.1.4 +- mysql-common=8.0.33 +- mysql-libs=8.0.33 +- nbclient=0.8.0 +- nbconvert=7.14.0 +- nbconvert-core=7.14.0 +- nbconvert-pandoc=7.14.0 +- nbformat=5.9.2 +- ncurses=6.4 +- nest-asyncio=1.5.8 +- netcdf4=1.6.5 +- networkx=3.2.1 +- nomkl=1.0 +- notebook=7.0.6 +- notebook-shim=0.2.3 +- nspr=4.35 +- nss=3.96 +- numexpr=2.8.8 +- numpy=1.26.2 +- openjdk=21.0.1 +- openjpeg=2.5.0 +- openpyxl=3.1.2 +- openssl=3.2.0 +- orc=1.9.2 +- overrides=7.4.0 +- packaging=23.2 +- pandas=2.1.4 +- pandoc=3.1.3 +- pandocfilters=1.5.0 +- pango=1.50.14 +- parso=0.8.3 +- partd=1.4.1 +- patsy=0.5.5 +- pcre2=10.42 +- pexpect=4.8.0 +- pickleshare=0.7.5 +- pillow=10.2.0 +- pip=23.3.2 +- pixman=0.42.2 +- pkgutil-resolve-name=1.3.10 +- plac=1.4.2 +- platformdirs=4.1.0 +- pluggy=1.3.0 +- ply=3.11 +- poppler=23.12.0 +- poppler-data=0.4.12 +- postgresql=16.1 +- powerplantmatching=0.5.8 +- progressbar2=4.3.2 +- proj=9.3.0 +- prometheus_client=0.19.0 +- prompt-toolkit=3.0.42 +- prompt_toolkit=3.0.42 +- psutil=5.9.7 +- pthread-stubs=0.4 +- ptyprocess=0.7.0 +- pulp=2.7.0 +- pulseaudio-client=16.1 +- pure_eval=0.2.2 +- py-cpuinfo=9.0.0 +- pyarrow=14.0.2 +- pyarrow-hotfix=0.6 +- pycountry=22.3.5 +- pycparser=2.21 +- pygments=2.17.2 +- pyomo=6.6.1 +- pyparsing=3.1.1 +- pyproj=3.6.1 +- pypsa=0.26.2 +- pyqt=5.15.9 +- pyqt5-sip=12.12.2 +- pyshp=2.3.1 +- pysocks=1.7.1 +- pytables=3.9.2 +- pytest=7.4.4 +- python=3.11.7 +- python-dateutil=2.8.2 +- python-fastjsonschema=2.19.1 +- python-json-logger=2.0.7 +- python-tzdata=2023.4 +- python-utils=3.8.1 +- python_abi=3.11 +- pytz=2023.3.post1 +- pyxlsb=1.0.10 +- pyyaml=6.0.1 +- pyzmq=25.1.2 +- qt-main=5.15.8 +- qtconsole-base=5.5.1 +- qtpy=2.4.1 +- rasterio=1.3.9 +- rdma-core=49.0 +- re2=2023.06.02 +- readline=8.2 +- referencing=0.32.0 +- requests=2.31.0 +- reretry=0.11.8 +- rfc3339-validator=0.1.4 +- rfc3986-validator=0.1.1 +- rioxarray=0.15.0 +- rpds-py=0.16.2 +- rtree=1.1.0 +- s2n=1.4.1 +- scikit-learn=1.3.2 +- scipy=1.11.4 +- scotch=6.0.9 +- seaborn=0.13.0 +- seaborn-base=0.13.0 +- send2trash=1.8.2 +- setuptools=69.0.3 +- setuptools-scm=8.0.4 +- setuptools_scm=8.0.4 +- shapely=2.0.2 +- sip=6.7.12 +- six=1.16.0 +- smart_open=6.4.0 +- smmap=5.0.0 +- snakemake-minimal=7.32.4 +- snappy=1.1.10 +- sniffio=1.3.0 +- snuggs=1.4.7 +- sortedcontainers=2.4.0 +- soupsieve=2.5 +- sqlite=3.44.2 +- stack_data=0.6.2 +- statsmodels=0.14.1 +- stopit=1.1.2 +- tabula-py=2.7.0 +- tabulate=0.9.0 +- tblib=3.0.0 +- terminado=0.18.0 +- threadpoolctl=3.2.0 +- throttler=1.2.2 +- tiledb=2.18.2 +- tinycss2=1.2.1 +- tk=8.6.13 +- toml=0.10.2 +- tomli=2.0.1 +- toolz=0.12.0 +- toposort=1.10 +- tornado=6.3.3 +- tqdm=4.66.1 +- traitlets=5.14.1 +- types-python-dateutil=2.8.19.14 +- typing-extensions=4.9.0 +- typing_extensions=4.9.0 +- typing_utils=0.1.0 +- tzcode=2023d +- tzdata=2023d +- ucx=1.15.0 +- unidecode=1.3.7 +- unixodbc=2.3.12 +- uri-template=1.3.0 +- uriparser=0.9.7 +- urllib3=2.1.0 +- validators=0.22.0 +- wcwidth=0.2.12 +- webcolors=1.13 +- webencodings=0.5.1 +- websocket-client=1.7.0 +- wheel=0.42.0 +- widgetsnbextension=4.0.9 +- wrapt=1.16.0 +- xarray=2023.12.0 +- xcb-util=0.4.0 +- xcb-util-image=0.4.0 +- xcb-util-keysyms=0.4.0 +- xcb-util-renderutil=0.3.9 +- xcb-util-wm=0.4.1 +- xerces-c=3.2.5 +- xkeyboard-config=2.40 +- xlrd=2.0.1 +- xorg-fixesproto=5.0 +- xorg-inputproto=2.3.2 +- xorg-kbproto=1.0.7 +- xorg-libice=1.1.1 +- xorg-libsm=1.2.4 +- xorg-libx11=1.8.7 +- xorg-libxau=1.0.11 +- xorg-libxdmcp=1.1.3 +- xorg-libxext=1.3.4 +- xorg-libxfixes=5.0.3 +- xorg-libxi=1.7.10 +- xorg-libxrender=0.9.11 +- xorg-libxt=1.3.0 +- xorg-libxtst=1.2.3 +- xorg-recordproto=1.14.2 +- xorg-renderproto=0.11.1 +- xorg-xextproto=7.3.0 +- xorg-xf86vidmodeproto=2.3.1 +- xorg-xproto=7.0.31 +- xyzservices=2023.10.1 +- xz=5.2.6 +- yaml=0.2.5 +- yte=1.5.4 +- zeromq=4.3.5 +- zict=3.0.0 +- zipp=3.17.0 +- zlib=1.2.13 +- zlib-ng=2.0.7 +- zstd=1.5.5 +- pip: + - highspy==1.5.3 + - tsam==2.3.1 diff --git a/rules/build_electricity.smk b/rules/build_electricity.smk index 8cba33bc..6b092638 100644 --- a/rules/build_electricity.smk +++ b/rules/build_electricity.smk @@ -41,6 +41,7 @@ rule build_powerplants: params: powerplants_filter=config["electricity"]["powerplants_filter"], custom_powerplants=config["electricity"]["custom_powerplants"], + everywhere_powerplants=config["electricity"]["everywhere_powerplants"], countries=config["countries"], input: base_network=RESOURCES + "networks/base.nc", diff --git a/scripts/build_powerplants.py b/scripts/build_powerplants.py index d6553663..8f99cd41 100755 --- a/scripts/build_powerplants.py +++ b/scripts/build_powerplants.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2024 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT @@ -10,6 +10,7 @@ Retrieves conventional powerplant capacities and locations from these to buses and creates a ``.csv`` file. It is possible to amend the powerplant database with custom entries provided in ``data/custom_powerplants.csv``. +Lastly, for every substation, powerplants with zero-initial capacity can be added for certain fuel types automatically. Relevant Settings ----------------- @@ -19,6 +20,7 @@ Relevant Settings electricity: powerplants_filter: custom_powerplants: + everywhere_powerplants: .. seealso:: Documentation of the configuration file ``config/config.yaml`` at @@ -44,6 +46,7 @@ Description ----------- The configuration options ``electricity: powerplants_filter`` and ``electricity: custom_powerplants`` can be used to control whether data should be retrieved from the original powerplants database or from custom amendmends. These specify `pandas.query `_ commands. +In addition the configuration option ``electricity: everywhere_powerplants`` can be used to place powerplants with zero-initial capacity of certain fuel types at all substations. 1. Adding all powerplants from custom: @@ -73,10 +76,18 @@ The configuration options ``electricity: powerplants_filter`` and ``electricity: powerplants_filter: Country not in ['Germany'] and YearCommissioned <= 2015 custom_powerplants: YearCommissioned <= 2015 + +4. Adding powerplants at all substations for 4 conventional carrier types: + + .. code:: yaml + + everywhere_powerplants: ['Natural Gas', 'Coal', 'nuclear', 'OCGT'] """ +import itertools import logging +import numpy as np import pandas as pd import powerplantmatching as pm import pypsa @@ -97,6 +108,45 @@ def add_custom_powerplants(ppl, custom_powerplants, custom_ppl_query=False): ) +def add_everywhere_powerplants(ppl, substations, everywhere_powerplants): + # Create a dataframe with "everywhere_powerplants" of stated carriers at the location of all substations + everywhere_ppl = ( + pd.DataFrame( + itertools.product(substations.index.values, everywhere_powerplants), + columns=["substation_index", "Fueltype"], + ).merge( + substations[["x", "y", "country"]], + left_on="substation_index", + right_index=True, + ) + ).drop(columns="substation_index") + + # PPL uses different columns names compared to substations dataframe -> rename + everywhere_ppl = everywhere_ppl.rename( + columns={"x": "lon", "y": "lat", "country": "Country"} + ) + + # Add default values for the powerplants + everywhere_ppl["Name"] = ( + "Automatically added everywhere-powerplant " + everywhere_ppl.Fueltype + ) + everywhere_ppl["Set"] = "PP" + everywhere_ppl["Technology"] = everywhere_ppl["Fueltype"] + everywhere_ppl["Capacity"] = 0.0 + + # Assign plausible values for the commissioning and decommissioning years + # required for multi-year models + everywhere_ppl["DateIn"] = ppl["DateIn"].min() + everywhere_ppl["DateOut"] = ppl["DateOut"].max() + + # NaN values for efficiency will be replaced by the generic efficiency by attach_conventional_generators(...) in add_electricity.py later + everywhere_ppl["Efficiency"] = np.nan + + return pd.concat( + [ppl, everywhere_ppl], sort=False, ignore_index=True, verify_integrity=True + ) + + def replace_natural_gas_technology(df): mapping = {"Steam Turbine": "CCGT", "Combustion Engine": "OCGT"} tech = df.Technology.replace(mapping).fillna("CCGT") @@ -149,6 +199,11 @@ if __name__ == "__main__": if countries_wo_ppl := set(countries) - set(ppl.Country.unique()): logging.warning(f"No powerplants known in: {', '.join(countries_wo_ppl)}") + # Add "everywhere powerplants" to all bus locations + ppl = add_everywhere_powerplants( + ppl, n.buses.query("substation_lv"), snakemake.params.everywhere_powerplants + ) + substations = n.buses.query("substation_lv") ppl = ppl.dropna(subset=["lat", "lon"]) ppl = map_country_bus(ppl, substations)