diff --git a/CITATION.cff b/CITATION.cff index c80b73ef..f8b28b5f 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -6,7 +6,7 @@ cff-version: 1.1.0 message: "If you use this package, please cite it in the following way." title: "PyPSA-Eur: An open sector-coupled optimisation model of the European energy system" repository: https://github.com/pypsa/pypsa-eur -version: 0.8.1 +version: 0.9.0 license: MIT authors: - family-names: Brown diff --git a/config/config.default.yaml b/config/config.default.yaml index bc067266..c59ff394 100644 --- a/config/config.default.yaml +++ b/config/config.default.yaml @@ -3,7 +3,7 @@ # SPDX-License-Identifier: CC0-1.0 # docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#top-level-configuration -version: 0.8.1 +version: 0.9.0 tutorial: false logging: diff --git a/doc/conf.py b/doc/conf.py index 1ddae466..fe577ac7 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -80,9 +80,9 @@ author = "Tom Brown (KIT, TUB, FIAS), Jonas Hoersch (KIT, FIAS), Fabian Hofmann # built documents. # # The short X.Y version. -version = "0.8" +version = "0.9" # The full version, including alpha/beta/rc tags. -release = "0.8.1" +release = "0.9.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/configtables/costs.csv b/doc/configtables/costs.csv index e307985d..b69c0bf9 100644 --- a/doc/configtables/costs.csv +++ b/doc/configtables/costs.csv @@ -2,6 +2,7 @@ year,--,YYYY; e.g. '2030',Year for which to retrieve cost assumptions of ``resources/costs.csv``. version,--,vX.X.X; e.g. 'v0.5.0',Version of ``technology-data`` repository to use. rooftop_share,--,float,Share of rooftop PV when calculating capital cost of solar (joint rooftop and utility-scale PV). +social_discountrate,p.u.,float,Social discount rate to compare costs in different investment periods. 0.02 corresponds to a social discount rate of 2%. fill_values,--,float,Default values if not specified for a technology in ``resources/costs.csv``. capital_cost,EUR/MW,Keys should be in the 'technology' column of ``resources/costs.csv``. Values can be any float.,"For the given technologies, assumptions about their capital investment costs are set to the corresponding value. Optional; overwrites cost assumptions from ``resources/costs.csv``." marginal_cost,EUR/MWh,Keys should be in the 'technology' column of ``resources/costs.csv``. Values can be any float.,"For the given technologies, assumptions about their marginal operating costs are set to the corresponding value. Optional; overwrites cost assumptions from ``resources/costs.csv``." diff --git a/doc/configtables/sector.csv b/doc/configtables/sector.csv index b6a10d43..be096974 100644 --- a/doc/configtables/sector.csv +++ b/doc/configtables/sector.csv @@ -91,6 +91,7 @@ regional_co2 _sequestration_potential,,, -- years_of_storage,years,float,The years until potential exhausted at optimised annual rate co2_sequestration_potential,MtCO2/a,float,The potential of sequestering CO2 in Europe per year co2_sequestration_cost,currency/tCO2,float,The cost of sequestering a ton of CO2 +co2_sequestration_lifetime,years,int,The lifetime of a CO2 sequestration site co2_spatial,--,"{true, false}","Add option to spatially resolve carrier representing stored carbon dioxide. This allows for more detailed modelling of CCUTS, e.g. regarding the capturing of industrial process emissions, usage as feedstock for electrofuels, transport of carbon dioxide, and geological sequestration sites." ,,, co2network,--,"{true, false}",Add option for planning a new carbon dioxide transmission network @@ -130,3 +131,10 @@ biogas_upgrading_cc,--,"{true, false}",Add option to capture CO2 from biomass up conventional_generation,,,Add a more detailed description of conventional carriers. Any power generation requires the consumption of fuel from nodes representing that fuel. biomass_to_liquid,--,"{true, false}",Add option for transforming solid biomass into liquid fuel with the same properties as oil biosng,--,"{true, false}",Add option for transforming solid biomass into synthesis gas with the same properties as natural gas +limit_max_growth,,, +-- enable,--,"{true, false}",Add option to limit the maximum growth of a carrier +-- factor,p.u.,float,The maximum growth factor of a carrier (e.g. 1.3 allows 30% larger than max historic growth) +-- max_growth,,, +-- -- {carrier},GW,float,The historic maximum growth of a carrier +-- max_relative_growth, +-- -- {carrier},p.u.,float,The historic maximum relative growth of a carrier \ No newline at end of file diff --git a/doc/foresight.rst b/doc/foresight.rst index dd1e0ecc..f8ea6108 100644 --- a/doc/foresight.rst +++ b/doc/foresight.rst @@ -41,7 +41,7 @@ Perfect foresight scenarios .. warning:: - Perfect foresight is currently implemented as a first test version. + Perfect foresight is currently implemented as an experimental test version. For running perfect foresight scenarios, you can adjust the ``config/config.perfect.yaml``: diff --git a/doc/preparation.rst b/doc/preparation.rst index 5cdc8031..d8f76839 100644 --- a/doc/preparation.rst +++ b/doc/preparation.rst @@ -94,6 +94,13 @@ Rule ``build_electricity_demand`` .. automodule:: build_electricity_demand +.. _monthlyprices: + +Rule ``build_monthly_prices`` +============================= + +.. automodule:: build_monthly_prices + .. _ship: Rule ``build_ship_raster`` @@ -102,6 +109,12 @@ Rule ``build_ship_raster`` .. automodule:: build_ship_raster +.. _availabilitymatrixmdua: + +Rule ``determine_availability_matrix_MD_UA`` +============================================ + +.. automodule:: determine_availability_matrix_MD_UA .. _renewableprofiles: diff --git a/doc/release_notes.rst b/doc/release_notes.rst index f1b9bcb9..9baeeb88 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -7,110 +7,22 @@ Release Notes ########################################## -Upcoming Release -================ +.. Upcoming Release +.. ================ -* More wildcard options now have a corresponding config entry. If the wildcard - is given, then its value is used. If the wildcard is not given but the options - in config are enabled, then the value from config is used. If neither is - given, the options are skipped. +.. * new features -* Distinguish between stored and sequestered CO2. Stored CO2 is stored - overground in tanks and can be used for CCU (e.g. methanolisation). - Sequestered CO2 is stored underground and can no longer be used for CCU. This - distinction is made because storage in tanks is more expensive than - underground storage. The link that connects stored and sequestered CO2 is - unidirectional. +PyPSA-Eur 0.9.0 (5th January 2024) +================================== -* Increase deployment density of solar to 5.1 MW/sqkm by default. - -* Default to full electrification of land transport by 2050. - -* Default to approximating transmission losses in HVAC lines - (``transmission_losses: 2``). -* Add separate option to add resistive heaters to the technology choices - (``sector: resistive_heaters:``). Previously they were always added when - boilers were added. - -* Resolve code issues for endogenous building retrofitting. Select correct - sector names, address deprecations, distinguish between district heating, decentral - heating in urban areas or rural areas for floor area calculations. - -* Remove all negative loads on the ``co2 atmosphere`` bus representing emissions - for e.g. fixed fossil demands for transport oil. Instead these are handled - more transparently with a fixed transport oil demand and a link taking care of - the emissions to the ``co2 atmosphere`` bus. This is also a preparation for - endogenous transport optimisation, where demand will be subject to - optimisation (e.g. fuel switching in the transport sector). - -* Allow possibility to go from copperplated to regionally resolved methanol and - oil demand with switches ``sector: regional_methanol_demand: true`` and - ``sector: regional_oil_demand: true``. This allows nodal/regional CO2 - constraints to be applied. - -* Process emissions from steam crackers (i.e. naphtha processing for HVC) are now - piped from the consumption link to the process emissions bus where the model - can decide about carbon capture. Previously the process emissions for naphtha - were a fixed load. +**New Features** * Add option to specify losses for bidirectional links, e.g. pipelines or HVDC links, in configuration file under ``sector: transmission_efficiency:``. Users can specify static or length-dependent values as well as a length-dependent electricity demand for compression, which is implemented as a multi-link to the local electricity buses. The bidirectional links will then be split into - two unidirectional links with linked capacities. - -* Pin ``snakemake`` version to below 8.0.0, as the new version is not yet - supported by ``pypsa-eur``. - -* Updated Global Energy Monitor LNG terminal data to March 2023 version. - -* For industry distribution, use EPRTR as fallback if ETS data is not available. - -* The minimum capacity for renewable generators when using the myopic option has been fixed. - -* Files downloaded from zenodo are now write-protected to prevent accidental re-download. - -* Files extracted from sector-coupled data bundle have been moved from ``data/`` to ``data/sector-bundle``. - -* New feature multi-decade optimisation with perfect foresight. - -* It is now possible to specify years for biomass potentials which do not exist - in the JRC-ENSPRESO database, e.g. 2037. These are linearly interpolated. - -* In pathway mode, the biomass potential is linked to the investment year. - -* Rule ``purge`` now initiates a dialog to confirm if purge is desired. - -* Rule ``retrieve_irena`` get updated values for renewables capacities. - -* Rule ``retrieve_wdpa`` updated to not only check for current and previous, but also potentially next months dataset availability. - -* Split configuration to enable SMR and SMR CC. - -* Bugfix: The unit of the capital cost of Haber-Bosch plants was corrected. - -* The configuration setting for country focus weights when clustering the - network has been moved from ``focus_weights:`` to ``clustering: - focus_weights:``. Backwards compatibility to old config files is maintained. - -* Extend options for waste usage from Haber-Bosch, methanolisation and methanation. - -* Use electrolysis waste heat by default. - -* Add new ``sector_opts`` wildcard option "nowasteheat" to disable all waste heat usage. - -* Set minimum part loads for PtX processes to 30% for methanolisation and methanation, and to 70% for Fischer-Tropsch synthesis. - -* Add VOM as marginal cost to PtX processes. - -* Add pelletizing costs for biomass boilers. - -* The ``mock_snakemake`` function can now be used with a Snakefile from a different directory using the new ``root_dir`` argument. - -* Switch to using hydrogen and electricity inputs for Haber-Bosch from https://github.com/PyPSA/technology-data. - -* Add option to capture CO2 contained in biogas when upgrading (``sector: biogas_to_gas_cc``). + two unidirectional links with linked capacities (https://github.com/PyPSA/pypsa-eur/pull/739). * Merged option to extend geographical scope to Ukraine and Moldova. These countries are excluded by default and is currently constrained to power-sector @@ -120,24 +32,21 @@ Upcoming Release Moldova). Moldova can currently only be included in conjunction with Ukraine due to the absence of demand data. The Crimean power system is manually reconnected to the main Ukrainian grid with the configuration option - `reconnect_crimea`. + `reconnect_crimea` (https://github.com/PyPSA/pypsa-eur/pull/321). + +* New experimental support for multi-decade optimisation with perfect foresight + (``foresight: perfect``). Maximum growth rates for carriers, global carbon + budget constraints and emission constraints for particular investment periods. * Add option to reference an additional source file where users can specify custom ``extra_functionality`` constraints in the configuration file. The default setting points to an empty hull at - ``data/custom_extra_functionality.py``. - -* Validate downloads from Zenodo using MD5 checksums. This identifies corrupted - or incomplete downloads. + ``data/custom_extra_functionality.py`` (https://github.com/PyPSA/pypsa-eur/pull/824). * Add locations, capacities and costs of existing gas storage using Global Energy Monitor's `Europe Gas Tracker - `_. - -* Remove HELMETH option. - -* Print Irreducible Infeasible Subset (IIS) if model is infeasible. Only for - solvers with IIS support. + `_ + (https://github.com/PyPSA/pypsa-eur/pull/835). * Add option to use `LUISA Base Map `_ 50m land @@ -147,13 +56,238 @@ Upcoming Release dataset's full advantages, set the excluder resolution to 50m (``excluder_resolution: 50``). For land category codes, see `Annex 1 of the technical documentation - `_. + `_ + (https://github.com/PyPSA/pypsa-eur/pull/842). + +* Add option to capture CO2 contained in biogas when upgrading (``sector: + biogas_to_gas_cc``) (https://github.com/PyPSA/pypsa-eur/pull/615). + +* If load shedding is activated, it is now applied to all carriers, not only + electricity (https://github.com/PyPSA/pypsa-eur/pull/784). + +* Add option for heat vents in district heating (``sector: + central_heat_vent:``). The combination of must-run conditions for some + power-to-X processes, waste heat usage enabled and decreasing heating demand, + can lead to infeasibilities in pathway optimisation for some investment + periods since larger Fischer-Tropsch capacities are needed in early years but + the waste heat exceeds the heat demand in later investment periods. + (https://github.com/PyPSA/pypsa-eur/pull/791). + +* Allow possibility to go from copperplated to regionally resolved methanol and + oil demand with switches ``sector: regional_methanol_demand: true`` and + ``sector: regional_oil_demand: true``. This allows nodal/regional CO2 + constraints to be applied (https://github.com/PyPSA/pypsa-eur/pull/827). + +* Allow retrofitting of existing gas boilers to hydrogen boilers in pathway + optimisation. + +* Add option to add time-varying CO2 emission prices (electricity-only, ``costs: + emission_prices: co2_monthly_prices: true``). This is linked to the new + ``{opts}`` wildcard option ``Ept``. + +* Network clustering can now consider efficiency classes when aggregating + carriers. The option ``clustering: consider_efficiency_classes:`` aggregates + each carriers into the top 10-quantile (high), the bottom 90-quantile (low), + and everything in between (medium). + +* Added option ``conventional: dynamic_fuel_price:`` to consider the monthly + fluctuating fuel prices for conventional generators. Refer to the CSV file + ``data/validation/monthly_fuel_price.csv``. + +* For hydro-electricity, add switches ``flatten_dispatch`` to consider an upper + limit for the hydro dispatch. The limit is given by the average capacity + factor plus the buffer given in ``flatten_dispatch_buffer``. + +* Extend options for waste heat usage from Haber-Bosch, methanolisation and + methanation (https://github.com/PyPSA/pypsa-eur/pull/834). + +* Add new ``sector_opts`` wildcard option "nowasteheat" to disable all waste + heat usage (https://github.com/PyPSA/pypsa-eur/pull/834). + +* Add new rule ``retrieve_irena`` to automatically retrieve up-to-date values + for existing renewables capacities (https://github.com/PyPSA/pypsa-eur/pull/756). + +* Print Irreducible Infeasible Subset (IIS) if model is infeasible. Only for + solvers with IIS support (https://github.com/PyPSA/pypsa-eur/pull/841). + +* More wildcard options now have a corresponding config entry. If the wildcard + is given, then its value is used. If the wildcard is not given but the options + in config are enabled, then the value from config is used. If neither is + given, the options are skipped (https://github.com/PyPSA/pypsa-eur/pull/827). + +* Validate downloads from Zenodo using MD5 checksums. This identifies corrupted + or incomplete downloads (https://github.com/PyPSA/pypsa-eur/pull/821). + +* Add rule ``sync`` to synchronise with a remote machine using the ``rsync`` + library. Configuration settings are found under ``remote:``. + +**Breaking Changes** + +* Remove all negative loads on the ``co2 atmosphere`` bus representing emissions + for e.g. fixed fossil demands for transport oil. Instead these are handled + more transparently with a fixed transport oil demand and a link taking care of + the emissions to the ``co2 atmosphere`` bus. This is also a preparation for + endogenous transport optimisation, where demand will be subject to + optimisation (e.g. fuel switching in the transport sector) + (https://github.com/PyPSA/pypsa-eur/pull/827). + +* Process emissions from steam crackers (i.e. naphtha processing for HVC) are + now piped from the consumption link to the process emissions bus where the + model can decide about carbon capture. Previously the process emissions for + naphtha were a fixed load (https://github.com/PyPSA/pypsa-eur/pull/827). + +* Distinguish between stored and sequestered CO2. Stored CO2 is stored + overground in tanks and can be used for CCU (e.g. methanolisation). + Sequestered CO2 is stored underground and can no longer be used for CCU. This + distinction is made because storage in tanks is more expensive than + underground storage. The link that connects stored and sequestered CO2 is + unidirectional (https://github.com/PyPSA/pypsa-eur/pull/844). + +* Files extracted from sector-coupled data bundle have been moved from ``data/`` + to ``data/sector-bundle``. + +* Split configuration to enable SMR and SMR CC (``sector: smr:`` and ``sector: + smr_cc:``) (https://github.com/PyPSA/pypsa-eur/pull/757). + +* Add separate option to add resistive heaters to the technology choices + (``sector: resistive_heaters:``). Previously they were always added when + boilers were added (https://github.com/PyPSA/pypsa-eur/pull/808). + +* Remove HELMETH option (``sector: helmeth:``). + +* Remove "conservative" renewable potentials estimation option + (https://github.com/PyPSA/pypsa-eur/pull/838). + +**Changes** + +* Updated Global Energy Monitor LNG terminal data to March 2023 version + (https://github.com/PyPSA/pypsa-eur/pull/707). + +* For industry distribution, use EPRTR as fallback if ETS data is not available + (https://github.com/PyPSA/pypsa-eur/pull/721). + +* It is now possible to specify years for biomass potentials which do not exist + in the JRC-ENSPRESO database, e.g. 2037. These are linearly interpolated + (https://github.com/PyPSA/pypsa-eur/pull/744). + +* In pathway mode, the biomass potential is linked to the investment year + (https://github.com/PyPSA/pypsa-eur/pull/744). + +* Increase allowed deployment density of solar to 5.1 MW/sqkm by default. + +* Default to full electrification of land transport by 2050. + +* Provide exogenous transition settings in 5-year steps. + +* Default to approximating transmission losses in HVAC lines + (``transmission_losses: 2``). + +* Use electrolysis waste heat by default. + +* Set minimum part loads for PtX processes to 30% for methanolisation and + methanation, and to 70% for Fischer-Tropsch synthesis. + +* Add VOM as marginal cost to PtX processes + (https://github.com/PyPSA/pypsa-eur/pull/830). + +* Add pelletizing costs for biomass boilers (https://github.com/PyPSA/pypsa-eur/pull/833). + +* Update default offshore wind turbine model to "NREL Reference 2020 ATB 5.5 MW" + (https://github.com/PyPSA/pypsa-eur/pull/832). + +* Switch to using hydrogen and electricity inputs for Haber-Bosch from + https://github.com/PyPSA/technology-data (https://github.com/PyPSA/pypsa-eur/pull/831). + +* The configuration setting for country focus weights when clustering the + network has been moved from ``focus_weights:`` to ``clustering: + focus_weights:``. Backwards compatibility to old config files is maintained + (https://github.com/PyPSA/pypsa-eur/pull/794). + +* The ``mock_snakemake`` function can now be used with a Snakefile from a + different directory using the new ``root_dir`` argument + (https://github.com/PyPSA/pypsa-eur/pull/771). + +* Rule ``purge`` now initiates a dialog to confirm if purge is desired + (https://github.com/PyPSA/pypsa-eur/pull/745). + +* Files downloaded from zenodo are now write-protected to prevent accidental + re-download (https://github.com/PyPSA/pypsa-eur/pull/730). + +* Performance improvements for rule ``build_ship_raster`` + (https://github.com/PyPSA/pypsa-eur/pull/845). + +* Improve time logging in :mod:`build_renewable_profiles` + (https://github.com/PyPSA/pypsa-eur/pull/837). + +* In myopic pathway optimisation, disable power grid expansion if line volume + already hit (https://github.com/PyPSA/pypsa-eur/pull/840). + +* JRC-ENSPRESO data is now downloaded from a Zenodo mirror because the link was + unreliable (https://github.com/PyPSA/pypsa-eur/pull/801). + +* Add focus weights option for clustering to documentation + (https://github.com/PyPSA/pypsa-eur/pull/781). + +* Add proxy for biomass transport costs if no explicit biomass transport network + is considered (https://github.com/PyPSA/pypsa-eur/pull/711). **Bugs and Compatibility** -* A bug preventing custom powerplants specified in ``data/custom_powerplants.csv`` was fixed. (https://github.com/PyPSA/pypsa-eur/pull/732) -* Fix nodal fraction in ``add_existing_year`` when using distributed generators -* Fix typo in buses definition for oil boilers in ``add_industry`` in ``prepare_sector_network`` +* The minimum PyPSA version is now 0.26.1. + +* Update to ``tsam>=0.2.3`` for performance improvents in temporal clustering. + +* Pin ``snakemake`` version to below 8.0.0, as the new version is not yet + supported. The next release will switch to the requirement ``snakemake>=8``. + +* Bugfix: Add coke and coal demand for integrated steelworks + (https://github.com/PyPSA/pypsa-eur/pull/718). + +* Bugfix: Make :mod:`build_renewable_profiles` consider subsets of cutout time + scope (https://github.com/PyPSA/pypsa-eur/pull/709). + +* Bugfix: In :mod:`simplify network`, remove 'underground' column to avoid + consense error (https://github.com/PyPSA/pypsa-eur/pull/714). + +* Bugfix: Fix in :mod:`add_existing_baseyear` to account for the case when there + is no rural heating demand for some nodes in network + (https://github.com/PyPSA/pypsa-eur/pull/706). + +* Bugfix: The unit of the capital cost of Haber-Bosch plants was corrected + (https://github.com/PyPSA/pypsa-eur/pull/829). + +* The minimum capacity for renewable generators when using the myopic option has + been fixed (https://github.com/PyPSA/pypsa-eur/pull/728). + +* Compatibility for running with single node and single country + (https://github.com/PyPSA/pypsa-eur/pull/839). + +* A bug preventing the addition of custom powerplants specified in + ``data/custom_powerplants.csv`` was fixed. + (https://github.com/PyPSA/pypsa-eur/pull/732) + +* Fix nodal fraction in :mod:`add_existing_year` when using distributed + generators (https://github.com/PyPSA/pypsa-eur/pull/798). + +* Bugfix: District heating without progress caused division by zero + (https://github.com/PyPSA/pypsa-eur/pull/796). + +* Bugfix: Drop duplicates in :mod:`build_industrial_distribution_keys`, which + can occur through the geopandas ``.sjoin()`` function if a point is located on + a border (https://github.com/PyPSA/pypsa-eur/pull/726). + +* For network clustering fall back to ``ipopt`` when ``highs`` is designated + solver (https://github.com/PyPSA/pypsa-eur/pull/795). + +* Fix typo in buses definition for oil boilers in ``add_industry`` in + :mod:`prepare_sector_network` (https://github.com/PyPSA/pypsa-eur/pull/812). + +* Resolve code issues for endogenous building retrofitting. Select correct + sector names, address deprecations, distinguish between district heating, + decentral heating in urban areas or rural areas for floor area calculations + (https://github.com/PyPSA/pypsa-eur/pull/808). + +* Addressed various deprecations. PyPSA-Eur 0.8.1 (27th July 2023) diff --git a/scripts/build_monthly_prices.py b/scripts/build_monthly_prices.py index c2e88972..214d39fb 100644 --- a/scripts/build_monthly_prices.py +++ b/scripts/build_monthly_prices.py @@ -6,8 +6,6 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ -Created on Tue May 16 10:37:35 2023. - This script extracts monthly fuel prices of oil, gas, coal and lignite, as well as CO2 prices diff --git a/scripts/determine_availability_matrix_MD_UA.py b/scripts/determine_availability_matrix_MD_UA.py index 8d10f45d..efe9a712 100644 --- a/scripts/determine_availability_matrix_MD_UA.py +++ b/scripts/determine_availability_matrix_MD_UA.py @@ -2,6 +2,9 @@ # SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT +""" +Create land elibility analysis for Ukraine and Moldova with different datasets. +""" import functools import logging