From 08674a6cda3161ac0b562aa532da87e285179397 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Sat, 5 Dec 2020 17:54:50 +0100 Subject: [PATCH] Release v0.3 (#213) * release_notes: order for release * doc: fix smaller typos and tidy up * config: bump version * doc: fix line references * doc: bump confpy version * envs: update fixed versions yaml * Snakefile: simplify all_elec to all --- .travis.yml | 2 +- Snakefile | 8 +- config.default.yaml | 2 +- config.tutorial.yaml | 3 +- doc/_static/theme_overrides.css | 5 - doc/cloudcomputing.rst | 4 +- doc/conf.py | 4 +- doc/configtables/opts.csv | 2 +- doc/configuration.rst | 9 +- doc/contributing.rst | 2 +- doc/costs.rst | 2 +- doc/index.rst | 2 + doc/installation.rst | 20 +- doc/introduction.rst | 4 +- doc/release_notes.rst | 148 +++++++++----- doc/solving.rst | 2 +- doc/tutorial.rst | 22 +-- doc/wildcards.rst | 39 +--- envs/environment.fixed.yaml | 332 +++++++++++++++++--------------- scripts/add_electricity.py | 8 +- scripts/add_extra_components.py | 2 +- scripts/build_load_data.py | 2 +- scripts/solve_network.py | 8 - test/config.test1.yaml | 2 +- 24 files changed, 323 insertions(+), 311 deletions(-) diff --git a/.travis.yml b/.travis.yml index 75a823784..43b25200a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,6 +31,6 @@ before_install: script: - cp ./test/config.test1.yaml ./config.yaml - - snakemake -j all solve_all_elec_networks + - snakemake -j all solve_all_networks - rm -rf resources/*.nc resources/*.geojson resources/*.h5 networks results # could repeat for more configurations in future diff --git a/Snakefile b/Snakefile index 7616974e1..817c905e6 100644 --- a/Snakefile +++ b/Snakefile @@ -21,19 +21,19 @@ wildcard_constraints: opts="[-+a-zA-Z0-9\.]*" -rule cluster_all_elec_networks: +rule cluster_all_networks: input: expand("networks/elec_s{simpl}_{clusters}.nc", **config['scenario']) -rule extra_components_all_elec_networks: +rule extra_components_all_networks: input: expand("networks/elec_s{simpl}_{clusters}_ec.nc", **config['scenario']) -rule prepare_all_elec_networks: +rule prepare_all_networks: input: expand("networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", **config['scenario']) -rule solve_all_elec_networks: +rule solve_all_networks: input: expand("results/networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", **config['scenario']) diff --git a/config.default.yaml b/config.default.yaml index 51776d451..cca71e61f 100755 --- a/config.default.yaml +++ b/config.default.yaml @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: CC0-1.0 -version: 0.2.0 +version: 0.3.0 tutorial: false logging: diff --git a/config.tutorial.yaml b/config.tutorial.yaml index 17c7509e8..5cc23e72c 100755 --- a/config.tutorial.yaml +++ b/config.tutorial.yaml @@ -2,8 +2,9 @@ # # SPDX-License-Identifier: CC0-1.0 -version: 0.2.0 +version: 0.3.0 tutorial: true + logging: level: INFO format: '%(levelname)s:%(name)s:%(message)s' diff --git a/doc/_static/theme_overrides.css b/doc/_static/theme_overrides.css index 4c6f277f7..d14367eeb 100644 --- a/doc/_static/theme_overrides.css +++ b/doc/_static/theme_overrides.css @@ -45,11 +45,6 @@ background: #ffffff; } -.wy-nav-content .highlight .nn, -.wy-nav-content .admonition.warning a { - color: #dddddd; -} - .rst-content code.literal, .rst-content tt.literal { color: rgb(34, 97, 156) diff --git a/doc/cloudcomputing.rst b/doc/cloudcomputing.rst index f91441a51..f20e1b232 100644 --- a/doc/cloudcomputing.rst +++ b/doc/cloudcomputing.rst @@ -60,7 +60,7 @@ Now a window with the machine details will open. You have to configure the follo You can edit your machine configuration later. So use a cheap machine type configuration to transfer data and only when everything is ready and tested, your expensive machine type, for instance a custom 8 vCPU with 160 GB memory. Solvers do not parallelise well, so we recommend not to choose more than 8 vCPU. - Check ``snakemake -j -n 1 solve_all_elec_networks`` as a dry run to see how much memory is required. + Check ``snakemake -n -j 1 solve_all_networks`` as a dry run to see how much memory is required. The memory requirements will vary depending on the spatial and temporal resoulution of your optimisation. Example: for an hourly, 181 node full European network, set 8 vCPU and 150 GB memory since the dry-run calculated a 135 GB memory requirement.) - Boot disk: As default, your VM is created with 10 GB. Depending on how much you want to handle on one VM you should increase the disk size. @@ -85,7 +85,7 @@ Step 3 - Installation of Cloud SDK sudo apt-get update sudo apt-get install bzip2 libxml2-dev sudo apt-get install wget - wget https://repo.anaconda.com/archive/Anaconda3-2020.07-Linux-x86_64.sh (Check the link. To be up to date with anaconda, check the Anaconda website https://www.anaconda.com/products/individual ) + wget https://repo.anaconda.com/archive/Anaconda3-2020.07-Linux-x86_64.sh ls (to see what anaconda file to bash) bash Anaconda3-2020.07-Linux-x86_64.sh source ~/.bashrc diff --git a/doc/conf.py b/doc/conf.py index 899cbe1ad..b2b220a04 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -74,9 +74,9 @@ # built documents. # # The short X.Y version. -version = u'0.2' +version = u'0.3' # The full version, including alpha/beta/rc tags. -release = u'0.2.0' +release = u'0.3.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/configtables/opts.csv b/doc/configtables/opts.csv index 4cb473e25..da673ac85 100644 --- a/doc/configtables/opts.csv +++ b/doc/configtables/opts.csv @@ -1,6 +1,6 @@ Trigger, Description, Definition, Status ``nH``; i.e. ``2H``-``6H``, Resample the time-resolution by averaging over every ``n`` snapshots, ``prepare_network``: `average_every_nhours() `_ and its `caller `_), In active use -``nSEG``; e.g. ``4380SEG``, "Apply time series segmentation with `tsam `_ package to ``n`` adjacent snapshots of varying lengths based on capacity factors of varying renewables, hydro inflow and load.", ``prepare_network``: ``apply_time_segmentation(), In active use +``nSEG``; e.g. ``4380SEG``, "Apply time series segmentation with `tsam `_ package to ``n`` adjacent snapshots of varying lengths based on capacity factors of varying renewables, hydro inflow and load.", ``prepare_network``: apply_time_segmentation(), In active use ``Co2L``, Add an overall absolute carbon-dioxide emissions limit configured in ``electricity: co2limit``. If a float is appended an overall emission limit relative to the emission level given in ``electricity: co2base`` is added (e.g. ``Co2L0.05`` limits emissisions to 5% of what is given in ``electricity: co2base``), ``prepare_network``: `add_co2limit() `_ and its `caller `_, In active use ``Ep``, Add cost for a carbon-dioxide price configured in ``costs: emission_prices: co2`` to ``marginal_cost`` of generators (other emission types listed in ``network.carriers`` possible as well), ``prepare_network``: `add_emission_prices() `_ and its `caller `_, In active use ``CCL``, Add minimum and maximum levels of generator nominal capacity per carrier for individual countries. These can be specified in the file linked at ``electricity: agg_p_nom_limits`` in the configuration. File defaults to ``data/agg_p_nom_minmax.csv``., ``solve_network``, In active use diff --git a/doc/configuration.rst b/doc/configuration.rst index bd0b8137f..1a42c70a9 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -18,7 +18,7 @@ Top-level configuration .. literalinclude:: ../config.default.yaml :language: yaml - :lines: 5-12,21,28-34 + :lines: 5-12,20,27-34 .. csv-table:: :header-rows: 1 @@ -40,9 +40,9 @@ facilitate running multiple scenarios through a single command .. code:: bash - snakemake -j 1 solve_all_elec_networks + snakemake -j 1 solve_all_networks -For each wildcard, a **list of values** is provided. The rule ``solve_all_elec_networks`` will trigger the rules for creating ``results/networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc`` for **all combinations** of the provided wildcard values as defined by Python's `itertools.product(...) `_ function that snakemake's `expand(...) function `_ uses. +For each wildcard, a **list of values** is provided. The rule ``solve_all_networks`` will trigger the rules for creating ``results/networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc`` for **all combinations** of the provided wildcard values as defined by Python's `itertools.product(...) `_ function that snakemake's `expand(...) function `_ uses. An exemplary dependency graph (starting from the simplification rules) then looks like this: @@ -80,7 +80,7 @@ Specifies the temporal range to build an energy system model for as arguments to .. literalinclude:: ../config.default.yaml :language: yaml - :lines: 36-55 + :lines: 36-60 .. csv-table:: :header-rows: 1 @@ -241,7 +241,6 @@ Specifies the temporal range to build an energy system model for as arguments to .. note:: To change cost assumptions in more detail (i.e. other than ``marginal_cost`` and ``capital_cost``), consider modifying cost assumptions directly in ``data/costs.csv`` as this is not yet supported through the config file. - You can also build multiple different cost databases. Make a renamed copy of ``data/costs.csv`` (e.g. ``data/costs-optimistic.csv``) and set the variable ``COSTS=data/costs-optimistic.csv`` in the ``Snakefile``. .. _solving_cf: diff --git a/doc/contributing.rst b/doc/contributing.rst index a6321989b..d57f12127 100644 --- a/doc/contributing.rst +++ b/doc/contributing.rst @@ -12,7 +12,7 @@ be it with new ideas, suggestions, by filing bug reports or contributing code to our `GitHub repository `_. * If you already have some code changes, you can submit them directly as a `pull request `_. -* If you are wondering where we would greatly appreciate your efforts, check out the ``help wanted`` tag in the `issues list `_ and initiate a discussion there. * If you start working on a feature in the code, let us know by opening an issue or a draft pull request. This helps all of us to keep an overview on what is being done and helps to avoid a situation where we are doing the same work twice in parallel. diff --git a/doc/costs.rst b/doc/costs.rst index 70bd12b89..5ced95dcb 100644 --- a/doc/costs.rst +++ b/doc/costs.rst @@ -32,7 +32,7 @@ Based on the parameters above the ``marginal_cost`` and ``capital_cost`` of the .. note:: - Another great resource for `cost assumptions `_. Modifying Cost Assumptions ========================== diff --git a/doc/index.rst b/doc/index.rst index d8d9c852c..2ff0cd1c3 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -42,6 +42,8 @@ It contains alternating current lines at and above 220 kV voltage level and all The model is suitable both for operational studies and generation and transmission expansion planning studies. The continental scope and highly resolved spatial scale enables a proper description of the long-range smoothing effects for renewable power generation and their varying resource availability. .. image:: img/base.png + :width: 50% + :align: center The restriction to freely available and open data encourages the open exchange of model data developments and eases the comparison of model results. It provides a full, automated software pipeline to assemble the load-flow-ready model from the original datasets, which enables easy replacement and improvement of the individual parts. diff --git a/doc/installation.rst b/doc/installation.rst index e1de3f4b6..16fdf7667 100644 --- a/doc/installation.rst +++ b/doc/installation.rst @@ -17,6 +17,7 @@ Clone the Repository First of all, clone the `PyPSA-Eur repository `_ using the version control system ``git``. The path to the directory into which the ``git repository`` is cloned, must **not** have any spaces! +If you do not have ``git`` installed, follow installation instructions `here `_. .. code:: bash @@ -24,8 +25,6 @@ The path to the directory into which the ``git repository`` is cloned, must **no /some/path/without/spaces % git clone https://github.com/PyPSA/pypsa-eur.git -.. note:: - If you do not have ``git`` installed, follow installation instructions `here `_. .. _deps: @@ -46,9 +45,8 @@ The environment can be installed and activated using .../pypsa-eur % conda activate pypsa-eur -.. note:: - Note that activation is local to the currently open shell! - After opening a new terminal window, one needs to reissue the second command! +Note that activation is local to the currently open shell! +After opening a new terminal window, one needs to reissue the second command! .. note:: If you have troubles with a slow ``conda`` installation, we recommend to install @@ -74,25 +72,23 @@ PyPSA is known to work with the free software - `Cbc `_ - `GLPK `_ (`WinGLKP `_) -and the non-free, commercial software (for which free academic licenses are available) +and the non-free, commercial software (for some of which free academic licenses are available) - `Gurobi `_ - `CPLEX `_ +- `FICO® Xpress Solver `_ -and any other solver that works with the underlying modelling framework `Pyomo `_. For installation instructions of these solvers for your operating system, follow the links above. +Commercial solvers such as Gurobi and CPLEX currently significantly outperform open-source solvers for large-scale problems. +It might be the case that you can only retrieve solutions by using a commercial solver. .. seealso:: `Getting a solver in the PyPSA documentation `_ -.. note:: - Commercial solvers such as Gurobi and CPLEX currently significantly outperform open-source solvers for large-scale problems. - It might be the case that you can only retrieve solutions by using a commercial solver. - .. note:: The rules :mod:`cluster_network` and :mod:`simplify_network` solve a quadratic optimisation problem for clustering. The open-source solvers Cbc and GlPK cannot handle this. A fallback to Ipopt is implemented in this case, but requires - also Ipopt to be installed. For an open-source solver setup install in your `conda` environment on OSX/Linux + also Ipopt to be installed. For an open-source solver setup install in your ``conda`` environment on OSX/Linux .. code:: bash diff --git a/doc/introduction.rst b/doc/introduction.rst index 9ca049e78..bc4f267f6 100644 --- a/doc/introduction.rst +++ b/doc/introduction.rst @@ -64,4 +64,6 @@ Folder Structure System Requirements =================== -Building the model with the scripts in this repository uses up to 20 GB of memory. Computing optimal investment and operation scenarios requires a strong interior-point solver compatible with the modelling library `Pyomo `_ like `Gurobi `_ or `CPLEX `_ with up to 100 GB of memory. +Building the model with the scripts in this repository runs on a normal computer. +But computing optimal investment and operation scenarios requires a strong interior-point solver +like `Gurobi `_ or `CPLEX `_ with more memory. diff --git a/doc/release_notes.rst b/doc/release_notes.rst index ae29d399c..72e82ac2e 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -11,70 +11,114 @@ Release Notes Upcoming Release ================ + +PyPSA-Eur 0.3.0 (7th December 2020) +================================== + +**New Features** + +Using the ``{opts}`` wildcard for scenarios: + * An option is introduced which adds constraints such that each country or node produces on average a minimal share of its total consumption itself. For example ``EQ0.5c`` set in the ``{opts}`` wildcard requires each country to produce on average at least 50% of its consumption. Additionally, the option ``ATK`` requires autarky at each node and removes all means of power transmission through lines and links. ``ATKc`` only removes - cross-border transfer capacities. Moreover, line and link capacities can be capped in the ``config.yaml`` at - ``lines: s_nom_max:`` and ``links: p_nom_max`` (`#166 `_). + cross-border transfer capacities. + [`#166 `_]. * Added an option to alter the capital cost (``c``) or installable potentials (``p``) of carriers by a factor via ``carrier+{c,p}factor`` in the ``{opts}`` wildcard. This can be useful for exploring uncertain cost parameters. Example: ``solar+c0.5`` reduces the capital cost of solar to 50% of original values - (`#167 `_ and `#207 `_). + [`#167 `_, `#207 `_]. + +* Added an option to the ``{opts}`` wildcard that applies a time series segmentation algorithm based on renewables, hydro inflow and load time series + to produce a given total number of adjacent snapshots of varying lengths. + This feature is an alternative to downsampling the temporal resolution by simply averaging and + uses the `tsam `_ package + [`#186 `_]. + +More OPSD integration: + +* Add renewable power plants from `OPSD `_ to the network for specified technologies. + This will overwrite the capacities calculated from the heuristic approach in :func:`estimate_renewable_capacities()` + [`#212 `_]. -* Add compatibility for pyomo 5.7.0 in :mod:`cluster_network` and :mod:`simplify_network`. +* Electricity consumption data is now retrieved directly from the `OPSD website `_ using the rule :mod:`build_load_data`. + The user can decide whether to take the ENTSO-E power statistics data (default) or the ENTSO-E transparency data + [`#211 `_]. -* Raise a warning if `tech_colors` in the config are not defined for all carriers. +Other: -* Corrected HVDC link connections (a) between Norway and Denmark and (b) mainland Italy, Corsica (FR) and Sardinia (IT) (`#181 `_) +* Added an option to use custom busmaps in rule :mod:`cluster_network`. To use this feature set ``enable: custom_busmap: true``. + Then, the rule looks for custom busmaps at ``data/custom_busmap_elec_s{simpl}_{clusters}.csv``, + which should have the same format as ``resources/busmap_elec_s{simpl}_{clusters}.csv``. + i.e. the index should contain the buses of ``networks/elec_s{simpl}.nc`` + [`#193 `_]. -* Added Google Cloud Platform tutorial (for Windows users). +* Line and link capacities can be capped in the ``config.yaml`` at ``lines: s_nom_max:`` and ``links: p_nom_max``: + [`#166 `_]. -* Corrected setting of exogenous emission price (in config -> cost -> emission price). This was not weighted by the efficiency and effective emission of the generators. Fixed in `#171 `_. +* Added Google Cloud Platform tutorial (for Windows users) + [`#177 `_]. -* Don't remove capital costs from lines and links, when imposing a line volume limit (wildcard ``lv``) or a line cost limit (``lc``). Previously, these were removed to move the expansion in direction of the limit. +**Changes** -* Add renewable power plants from `OPSD `_ to the network for specified technologies. This will overwrite the capacities calculated from the heuristic approach in :func:`estimate_renewable_capacities()`. +* Don't remove capital costs from lines and links, when imposing a line volume limit (``lv``) or a line cost limit (``lc``). + Previously, these were removed to move the expansion in direction of the limit + [`#183 `_]. -* Fix bug of clustering offwind-{ac,dc} sites in the option of high-resolution sites for renewables. Now, there are more sites for offwind-{ac,dc} available than network nodes. Before, they were clustered to the resolution of the network. (e.g. elec_s1024_37m.nc: 37 network nodes, 1024 sites) +* The mappings for clustered lines and buses produced by the :mod:`simplify_network` and :mod:`cluster_network` rules + changed from Hierarchical Data Format (``.h5``) to Comma-Separated Values format (``.csv``) for ease of use. + [`#198 `_] -* Use `mamba` (https://github.com/mamba-org/mamba) for faster Travis CI builds (`#196 `_) +* The N-1 security margin for transmission lines is now fixed to a provided value in ``config.yaml``, + removing an undocumented linear interpolation between 0.5 and 0.7 in the range between 37 and 200 nodes. + [`#199 `_]. -* The N-1 security margin for transmission lines is now fixed to a provided value in ``config.yaml``, removing an undocumented linear interpolation between 0.5 and 0.7 in the range between 37 and 200 nodes. +* Modelling hydrogen and battery storage with Store and Link components is now the default, + rather than using StorageUnit components with fixed power-to-energy ratio + [`#205 `_]. -* The mappings for clustered lines and buses produced by the ``simplify_network`` and ``cluster_network`` rules changed from Hierarchical Data Format (.h5) to Comma-Separated Values format (.csv) (`#198 `_) +* Use ``mamba`` (https://github.com/mamba-org/mamba) for faster Travis CI builds + [`#196 `_]. * Multiple smaller changes: Removed unused ``{network}`` wildcard, moved environment files to dedicated ``envs`` folder, - removed sector-coupling components from configuration files, minor refactoring and code cleaning (`#190 `_). + removed sector-coupling components from configuration files, updated documentation colors, minor refactoring and code cleaning + [`#190 `_]. -* Added an option to use custom busmaps in rule :mod:`cluster_network`. To use this feature set ``enable: custom_busmap: true``. - Then, the rule looks for custom busmaps at ``data/custom_busmap_elec_s{simpl}_{clusters}.csv``, - which should have the same format as ``resources/busmap_elec_s{simpl}_{clusters}.csv``. - i.e. the index should contain the buses of ``networks/elec_s{simpl}.nc`` (`#193 `_). +**Bugs and Compatibility** + +* Add compatibility for pyomo 5.7.0 in :mod:`cluster_network` and :mod:`simplify_network` + [`#172 `_]. * Fixed a bug for storage units such that individual store and dispatch efficiencies are correctly taken account of rather than only their round-trip efficiencies. - In the cost database (``data/costs.csv``) the efficiency of battery inverters should be stated as per discharge/charge rather than per roundtrip (`#202 _). + In the cost database (``data/costs.csv``) the efficiency of battery inverters should be stated as per discharge/charge rather than per roundtrip + [`#202 `_]. -* Parameter corrections for East-Western and Anglo-Scottish interconnectors (`#206 `_) +* Corrected exogenous emission price setting (in ``config: cost: emission price:``), + which now correctly accounts for the efficiency and effective emission of the generators + [`#171 `_]. -* Modelling hydrogen and battery storage with Store and Link components is now the default, rather than using StorageUnit components with fixed power-to-energy ratio (`#205 `_). +* Corrected HVDC link connections (a) between Norway and Denmark and (b) mainland Italy, Corsica (FR) and Sardinia (IT) + as well as for East-Western and Anglo-Scottish interconnectors + [`#181 `_, `#206 `_]. -* Electricity consumption data is now directly retrieved from the `OPSD website `_ using the rule ``build_load_data``. The user can decide whether to take the ENTSOE power statistics data (defaul) or the ENTSOE transparency data. +* Fix bug of clustering ``offwind-{ac,dc}`` generators in the option of high-resolution generators for renewables. + Now, there are more sites for ``offwind-{ac,dc}`` available than network nodes. + Before, they were clustered to the resolution of the network (``elec_s1024_37m.nc``: 37 network nodes, 1024 generators) + [`#191 `_]. + +* Raise a warning if ``tech_colors`` in the config are not defined for all carriers + [`#178 `_]. -* Added an option to the ``{opts}`` wildcard that applies a time series segmentation algorithm based on renewables, hydro inflow and load time series - to produce a given total number of adjacent snapshots of varying lengths. - This feature is an alternative to downsampling the temporal resolution by simply averaging and - uses the `tsam `_ package - (#186 `_). PyPSA-Eur 0.2.0 (8th June 2020) ================================== -* The optimization is now performed using the ``pyomo=False`` setting in the :func:`pypsa.lopf.network_lopf`. This speeds up the solving process significantly and consumes much less memory. The inclusion of additional constraints were adjusted to the new implementation. They are all passed to the :func:`network_lopf` function via the ``extra_functionality`` argument. The rule ``trace_solve_network`` was integrated into the rule :mod:`solve_network` and can be activated via configuration with ``solving: options: track_iterations: true``. The charging and discharging capacities of batteries modelled as store-link combination are now coupled (`#116 `_). +* The optimization is now performed using the ``pyomo=False`` setting in the :func:`pypsa.lopf.network_lopf`. This speeds up the solving process significantly and consumes much less memory. The inclusion of additional constraints were adjusted to the new implementation. They are all passed to the :func:`network_lopf` function via the ``extra_functionality`` argument. The rule ``trace_solve_network`` was integrated into the rule :mod:`solve_network` and can be activated via configuration with ``solving: options: track_iterations: true``. The charging and discharging capacities of batteries modelled as store-link combination are now coupled [`#116 `_]. -* An updated extract of the `ENTSO-E Transmission System Map `_ (including Malta) was added to the repository using the `GridKit `_ tool. This tool has been updated to retrieve up-to-date map extracts using a single `script `_. The update extract features 5322 buses, 6574 lines, 46 links. (`#118 `_). +* An updated extract of the `ENTSO-E Transmission System Map `_ (including Malta) was added to the repository using the `GridKit `_ tool. This tool has been updated to retrieve up-to-date map extracts using a single `script `_. The update extract features 5322 buses, 6574 lines, 46 links. [`#118 `_]. -* Added `FSFE REUSE `_ compliant license information. Documentation now licensed under CC-BY-4.0 (`#160 `_). +* Added `FSFE REUSE `_ compliant license information. Documentation now licensed under CC-BY-4.0 [`#160 `_]. * Added a 30 minute `video introduction `_ and a 20 minute `video tutorial `_ @@ -82,19 +126,19 @@ PyPSA-Eur 0.2.0 (8th June 2020) * Added an option to skip iterative solving usually performed to update the line impedances of expanded lines at ``solving: options: skip_iterations:``. -* ``snakemake`` rules for retrieving cutouts and the natura raster can now be disabled independently from their respective rules to build them; via ``config.*yaml`` (`#136 `_). +* ``snakemake`` rules for retrieving cutouts and the natura raster can now be disabled independently from their respective rules to build them; via ``config.*yaml`` [`#136 `_]. -* Removed the ``id`` column for custom power plants in ``data/custom_powerplants.csv`` to avoid custom power plants with conflicting ids getting attached to the wrong bus (`#131 `_). +* Removed the ``id`` column for custom power plants in ``data/custom_powerplants.csv`` to avoid custom power plants with conflicting ids getting attached to the wrong bus [`#131 `_]. -* Add option ``renewables: {carrier}: keep_all_available_areas:`` to use all availabe weather cells for renewable profile and potential generation. The default ignores weather cells where only less than 1 MW can be installed (`#150 `_). +* Add option ``renewables: {carrier}: keep_all_available_areas:`` to use all availabe weather cells for renewable profile and potential generation. The default ignores weather cells where only less than 1 MW can be installed [`#150 `_]. -* Added a function ``_helpers.load_network()`` which loads a network with overridden components specified in ``snakemake.config['override_components']`` (`#128 `_). +* Added a function ``_helpers.load_network()`` which loads a network with overridden components specified in ``snakemake.config['override_components']`` [`#128 `_]. -* Bugfix in :mod:`base_network` which now finds all closest links, not only the first entry (`#143 `_). +* Bugfix in :mod:`base_network` which now finds all closest links, not only the first entry [`#143 `_]. -* Bugfix in :mod:`cluster_network` which now skips recalculation of link parameters if there are no links (`#149 `_). +* Bugfix in :mod:`cluster_network` which now skips recalculation of link parameters if there are no links [`#149 `_]. -* Added information on pull requests to contribution guidelines (`#151 `_). +* Added information on pull requests to contribution guidelines [`#151 `_]. * Improved documentation on open-source solver setup and added usage warnings. @@ -105,31 +149,31 @@ PyPSA-Eur 0.1.0 (9th January 2020) This is the first release of PyPSA-Eur, a model of the European power system at the transmission network level. Recent changes include: -* Documentation on installation, workflows and configuration settings is now available online at `pypsa-eur.readthedocs.io `_ (`#65 `_). +* Documentation on installation, workflows and configuration settings is now available online at `pypsa-eur.readthedocs.io `_ [`#65 `_]. -* The ``conda`` environment files were updated and extended (`#81 `_). +* The ``conda`` environment files were updated and extended [`#81 `_]. -* The power plant database was updated with extensive filtering options via ``pandas.query`` functionality (`#84 `_ and `#94 `_). +* The power plant database was updated with extensive filtering options via ``pandas.query`` functionality [`#84 `_ and `#94 `_]. -* Continuous integration testing with `Travis CI `_ is now included for Linux, Mac and Windows (`#82 `_). +* Continuous integration testing with `Travis CI `_ is now included for Linux, Mac and Windows [`#82 `_]. -* Data dependencies were moved to `zenodo `_ and are now versioned (`#60 `_). +* Data dependencies were moved to `zenodo `_ and are now versioned [`#60 `_]. -* Data dependencies are now retrieved directly from within the snakemake workflow (`#86 `_). +* Data dependencies are now retrieved directly from within the snakemake workflow [`#86 `_]. -* Emission prices can be added to marginal costs of generators through the keyworks ``Ep`` in the ``{opts}`` wildcard (`#100 `_). +* Emission prices can be added to marginal costs of generators through the keyworks ``Ep`` in the ``{opts}`` wildcard [`#100 `_]. -* An option is introduced to add extendable nuclear power plants to the network (`#98 `_). +* An option is introduced to add extendable nuclear power plants to the network [`#98 `_]. -* Focus weights can now be specified for particular countries for the network clustering, which allows to set a proportion of the total number of clusters for particular countries (`#87 `_). +* Focus weights can now be specified for particular countries for the network clustering, which allows to set a proportion of the total number of clusters for particular countries [`#87 `_]. -* A new rule :mod:`add_extra_components` allows to add additional components to the network only after clustering. It is thereby possible to model storage units (e.g. battery and hydrogen) in more detail via a combination of ``Store``, ``Link`` and ``Bus`` elements (`#97 `_). +* A new rule :mod:`add_extra_components` allows to add additional components to the network only after clustering. It is thereby possible to model storage units (e.g. battery and hydrogen) in more detail via a combination of ``Store``, ``Link`` and ``Bus`` elements [`#97 `_]. -* Hydrogen pipelines (including cost assumptions) can now be added alongside clustered network connections in the rule :mod:`add_extra_components` . Set ``electricity: extendable_carriers: Link: [H2 pipeline]`` and ensure hydrogen storage is modelled as a ``Store``. This is a first simplified stage (`#108 `_). +* Hydrogen pipelines (including cost assumptions) can now be added alongside clustered network connections in the rule :mod:`add_extra_components` . Set ``electricity: extendable_carriers: Link: [H2 pipeline]`` and ensure hydrogen storage is modelled as a ``Store``. This is a first simplified stage [`#108 `_]. -* Logfiles for all rules of the ``snakemake`` workflow are now written in the folder ``log/`` (`#102 `_). +* Logfiles for all rules of the ``snakemake`` workflow are now written in the folder ``log/`` [`#102 `_]. -* The new function ``_helpers.mock_snakemake`` creates a ``snakemake`` object which mimics the actual ``snakemake`` object produced by workflow by parsing the ``Snakefile`` and setting all paths for inputs, outputs, and logs. This allows running all scripts within a (I)python terminal (or just by calling ``python ``) and thereby facilitates developing and debugging scripts significantly (`#107 `_). +* The new function ``_helpers.mock_snakemake`` creates a ``snakemake`` object which mimics the actual ``snakemake`` object produced by workflow by parsing the ``Snakefile`` and setting all paths for inputs, outputs, and logs. This allows running all scripts within a (I)python terminal (or just by calling ``python ``) and thereby facilitates developing and debugging scripts significantly [`#107 `_]. Release Process =============== @@ -151,7 +195,7 @@ Release Process * Upload code to `zenodo code repository `_ with `GNU GPL 3.0 `_ license. -* Create pre-built networks for ``config.default.yaml`` by running ``snakemake -j 1 extra_components_all_elec_networks``. +* Create pre-built networks for ``config.default.yaml`` by running ``snakemake -j 1 extra_components_all_networks``. * Upload pre-built networks to `zenodo data repository `_ with `CC BY 4.0 `_ license. diff --git a/doc/solving.rst b/doc/solving.rst index 2cc8eb57c..87fdc040e 100644 --- a/doc/solving.rst +++ b/doc/solving.rst @@ -7,7 +7,7 @@ Solving Networks ########################################## -After generating and simplifying the networks they can be solved through the rule :mod:`solve_network` by using the collection rule :mod:`solve_all_elec_networks`. Moreover, networks can be solved for another focus with the derivative rules :mod:`solve_network` by using the collection rule :mod:`solve_operations_network` for dispatch-only analyses on an already solved network. +After generating and simplifying the networks they can be solved through the rule :mod:`solve_network` by using the collection rule :mod:`solve_all_networks`. Moreover, networks can be solved for another focus with the derivative rules :mod:`solve_network` by using the collection rule :mod:`solve_operations_network` for dispatch-only analyses on an already solved network. .. toctree:: :caption: Overview diff --git a/doc/tutorial.rst b/doc/tutorial.rst index 3772bc43c..507b1485f 100644 --- a/doc/tutorial.rst +++ b/doc/tutorial.rst @@ -59,35 +59,35 @@ It is also possible to allow less or more carbon-dioxide emissions. Here, we lim .. literalinclude:: ../config.tutorial.yaml :language: yaml - :lines: 35,37 + :lines: 36,38 PyPSA-Eur also includes a database of existing conventional powerplants. We can select which types of powerplants we like to be included with fixed capacities: .. literalinclude:: ../config.tutorial.yaml :language: yaml - :lines: 35,51 + :lines: 36,52 To accurately model the temporal and spatial availability of renewables such as wind and solar energy, we rely on historical weather data. It is advisable to adapt the required range of coordinates to the selection of countries. .. literalinclude:: ../config.tutorial.yaml :language: yaml - :lines: 53-61 + :lines: 54-62 We can also decide which weather data source should be used to calculate potentials and capacity factor time-series for each carrier. For example, we may want to use the ERA-5 dataset for solar and not the default SARAH-2 dataset. .. literalinclude:: ../config.tutorial.yaml :language: yaml - :lines: 63,106-107 + :lines: 64,107-108 Finally, it is possible to pick a solver. For instance, this tutorial uses the open-source solvers CBC and Ipopt and does not rely on the commercial solvers Gurobi or CPLEX (for which free academic licenses are available). .. literalinclude:: ../config.tutorial.yaml :language: yaml - :lines: 164,175-176 + :lines: 170,180-181 .. note:: @@ -129,7 +129,7 @@ orders ``snakemake`` to run the script ``solve_network`` that produces the solve .. warning:: On Windows the previous command may currently cause a ``MissingRuleException`` due to problems with output files in subfolders. This is an `open issue `_ at `snakemake `_. - Windows users should add the option ``--keep-target-files`` to the command or instead run ``snakemake -j 1 solve_all_elec_networks``. + Windows users should add the option ``--keep-target-files`` to the command or instead run ``snakemake -j 1 solve_all_networks``. This triggers a workflow of multiple preceding jobs that depend on each rule's inputs and outputs: @@ -271,7 +271,7 @@ the wildcards given in ``scenario`` in the configuration file ``config.yaml`` ar .. literalinclude:: ../config.tutorial.yaml :language: yaml - :lines: 13-18 + :lines: 14-18 In this example we would not only solve a 6-node model of Germany but also a 2-node model. @@ -286,12 +286,4 @@ The solved networks can be analysed just like any other PyPSA network (e.g. in J network = pypsa.Network("results/networks/elec_s_6_ec_lcopt_Co2L-24H.nc") - ... - For inspiration, read the `examples section in the PyPSA documentation `_. - -.. note:: - - There are rules for summaries and plotting available in the repository of PyPSA-Eur. - - They are currently under revision and therefore not yet documented. diff --git a/doc/wildcards.rst b/doc/wildcards.rst index 71b39ef18..227997d1b 100644 --- a/doc/wildcards.rst +++ b/doc/wildcards.rst @@ -27,9 +27,6 @@ The ``{simpl}`` wildcard specifies number of buses a detailed network model should be pre-clustered to in the rule :mod:`simplify_network` (before :mod:`cluster_network`). -.. seealso:: - :mod:`simplify_network` - .. _clusters: The ``{clusters}`` wildcard @@ -45,9 +42,6 @@ If an `m` is placed behind the number of clusters (e.g. ``100m``), generators are only moved to the clustered buses but not aggregated by carrier; i.e. the clustered bus may have more than one e.g. wind generator. -.. seealso:: - :mod:`cluster_network` - .. _ll: The ``{ll}`` wildcard @@ -79,9 +73,6 @@ The wildcard, in general, consists of two parts: (c) ``c1.25`` will allow to build a transmission network that costs no more than 25 % more than the current system. -.. seealso:: - :mod:`prepare_network` - .. _opts: The ``{opts}`` wildcard @@ -98,21 +89,18 @@ It may hold multiple triggers separated by ``-``, i.e. ``Co2L-3H`` contains the :widths: 10,20,10,10 :file: configtables/opts.csv -.. seealso:: - :mod:`prepare_network`, :mod:`solve_network` - .. _country: The ``{country}`` wildcard ========================== -The rules ``make_summary`` and ``plot_summary`` (generating summaries of all or a subselection -of the solved networks) as well as ``plot_p_nom_max`` (for plotting the cumulative +The rules :mod:`make_summary` and :mod:`plot_summary` (generating summaries of all or a subselection +of the solved networks) as well as :mod:`plot_p_nom_map` (for plotting the cumulative generation potentials for renewable technologies) can be narrowed to individual countries using the ``{country}`` wildcard. -If ``country = all``, then the rule acts on the network for all countries -defined in ``config.yaml``. If otherwise ``country = DE`` or another 2-letter +If ``country=all``, then the rule acts on the network for all countries +defined in ``config.yaml``. If otherwise ``country=DE`` or another 2-letter country code, then the network is narrowed to buses of this country for the rule. For example to get a summary of the energy generated in Germany (in the solution for Europe) use: @@ -121,9 +109,6 @@ in Germany (in the solution for Europe) use: snakemake -j 1 results/summaries/elec_s_all_lall_Co2L-3H_DE -.. seealso:: - :mod:`make_summary`, :mod:`plot_summary`, :mod:`plot_p_nom_max` - .. _cutout_wc: The ``{cutout}`` wildcard @@ -133,9 +118,6 @@ The ``{cutout}`` wildcard facilitates running the rule :mod:`build_cutout` for all cutout configurations specified under ``atlite: cutouts:``. These cutouts will be stored in a folder specified by ``{cutout}``. -.. seealso:: - :mod:`build_cutout`, :ref:`atlite_cf` - .. _technology: The ``{technology}`` wildcard @@ -151,22 +133,16 @@ For instance ``{technology}`` can be used to plot regionally disaggregated poten with the rule :mod:`plot_p_nom_max` or to summarize a particular technology's full load hours in various countries with the rule :mod:`build_country_flh`. -.. seealso:: - :mod:`build_renewable_profiles`, :mod:`plot_p_nom_max`, :mod:`build_country_flh` - .. _attr: The ``{attr}`` wildcard ======================= -The ``{attr}`` wildcard specifies which attribute are used for size +The ``{attr}`` wildcard specifies which attribute is used for size representations of network components on a map plot produced by the rule -``plot_network``. While it might be extended in the future, ``{attr}`` +:mod:`plot_network`. While it might be extended in the future, ``{attr}`` currently only supports plotting of ``p_nom``. -.. seealso:: - :mod:`plot_network` - .. _ext: The ``{ext}`` wildcard @@ -181,6 +157,3 @@ formats depends on the used backend. To query the supported file types on your s import matplotlib.pyplot as plt plt.gcf().canvas.get_supported_filetypes() - -.. seealso:: - :mod:`plot_network`, :mod:`plot_summary`, :mod:`plot_p_nom_max` diff --git a/envs/environment.fixed.yaml b/envs/environment.fixed.yaml index 3f027166e..8e7bb9780 100644 --- a/envs/environment.fixed.yaml +++ b/envs/environment.fixed.yaml @@ -1,241 +1,261 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors -# -# SPDX-License-Identifier: GPL-3.0-or-later - name: pypsa-eur channels: - bioconda - - gurobi - conda-forge - defaults dependencies: - _libgcc_mutex=0.1 + - _openmp_mutex=4.5 - affine=2.3.0 - - appdirs=1.4.3 + - amply=0.1.4 + - appdirs=1.4.4 - atlite=0.0.3 - - attrs=19.3.0 - - backcall=0.1.0 - - beautifulsoup4=4.9.1 - - blas=1.0 - - blosc=1.16.3 - - bokeh=2.0.2 + - attrs=20.3.0 + - backcall=0.2.0 + - backports=1.0 + - backports.functools_lru_cache=1.6.1 + - beautifulsoup4=4.9.3 + - blosc=1.20.1 + - bokeh=2.2.3 + - boost-cpp=1.72.0 - bottleneck=1.3.2 + - brotlipy=0.7.0 - bzip2=1.0.8 - - ca-certificates=2020.1.1 - - cairo=1.14.12 + - c-ares=1.17.1 + - ca-certificates=2020.11.8 + - cairo=1.16.0 - cartopy=0.17.0 - - certifi=2020.4.5.1 - - cffi=1.14.0 + - certifi=2020.11.8 + - cffi=1.14.4 - cfitsio=3.470 - - cftime=1.1.2 + - cftime=1.3.0 - chardet=3.0.4 - click=7.1.2 - click-plugins=1.1.1 - - cligj=0.5.0 - - cloudpickle=1.4.1 + - cligj=0.7.1 + - cloudpickle=1.6.0 - coincbc=2.10.5 - - configargparse=1.1 - - cryptography=2.9.2 - - curl=7.67.0 + - conda=4.9.2 + - conda-package-handling=1.7.2 + - configargparse=1.2.3 + - cryptography=3.2.1 + - curl=7.71.1 - cycler=0.10.0 - - cytoolz=0.10.1 - - dask=2.17.2 - - dask-core=2.17.2 + - cytoolz=0.11.0 + - dask=2.30.0 + - dask-core=2.30.0 - datrie=0.8.2 - - dbus=1.13.14 - decorator=4.4.2 - - distributed=2.17.0 + - descartes=1.1.0 + - distributed=2.30.1 - docutils=0.16 - entsoe-py=0.2.10 - - expat=2.2.6 - - fiona=1.8.11 - - fontconfig=2.13.0 - - freetype=2.9.1 + - expat=2.2.9 + - fiona=1.8.13 + - fontconfig=2.13.1 + - freetype=2.10.4 - freexl=1.0.5 - - fsspec=0.7.4 - - gdal=3.0.2 + - fsspec=0.8.4 + - gdal=3.0.4 - geographiclib=1.50 - - geopandas=0.6.1 - - geopy=1.22.0 - - geos=3.8.0 - - geotiff=1.5.1 - - giflib=5.1.4 - - gitdb=4.0.2 - - gitpython=3.1.1 - - glib=2.63.1 - - gst-plugins-base=1.14.0 - - gstreamer=1.14.0 - - gurobi=9.0.2 + - geopandas=0.8.1 + - geopy=2.0.0 + - geos=3.8.1 + - geotiff=1.6.0 + - gettext=0.19.8.1 + - giflib=5.2.1 + - gitdb=4.0.5 + - gitpython=3.1.11 + - glib=2.66.3 + - glpk=4.65 + - gmp=6.2.1 - hdf4=4.2.13 - - hdf5=1.10.4 + - hdf5=1.10.6 - heapdict=1.0.1 - - icu=58.2 - - idna=2.9 - - importlib-metadata=1.6.0 - - importlib_metadata=1.6.0 - - intel-openmp=2020.1 + - icu=64.2 + - idna=2.10 + - importlib-metadata=3.1.1 + - importlib_metadata=3.1.1 - ipopt=3.13.2 - - ipython=7.13.0 + - ipython=7.19.0 - ipython_genutils=0.2.0 - - jedi=0.17.0 + - jedi=0.17.2 - jinja2=2.11.2 - - joblib=0.15.1 - - jpeg=9b + - joblib=0.17.0 + - jpeg=9d - json-c=0.13.1 - jsonschema=3.2.0 - - jupyter_core=4.6.3 - - kealib=1.4.7 - - kiwisolver=1.2.0 - - krb5=1.16.4 - - ld_impl_linux-64=2.33.1 - - libblas=3.8.0 - - libboost=1.67.0 - - libcblas=3.8.0 - - libcurl=7.67.0 - - libdap4=3.19.1 - - libedit=3.1.20181209 + - jupyter_core=4.7.0 + - kealib=1.4.14 + - kiwisolver=1.3.1 + - krb5=1.17.2 + - lcms2=2.11 + - ld_impl_linux-64=2.35.1 + - libarchive=3.3.3 + - libblas=3.9.0 + - libcblas=3.9.0 + - libcurl=7.71.1 + - libdap4=3.20.6 + - libedit=3.1.20191231 + - libev=4.33 - libffi=3.3 - - libgcc-ng=9.1.0 - - libgdal=3.0.2 - - libgfortran-ng=7.3.0 + - libgcc-ng=9.3.0 + - libgdal=3.0.4 + - libgfortran-ng=7.5.0 + - libgfortran4=7.5.0 + - libgfortran5=9.3.0 + - libglib=2.66.3 + - libgomp=9.3.0 + - libiconv=1.16 - libkml=1.3.0 - - liblapack=3.8.0 - - libnetcdf=4.6.1 + - liblapack=3.9.0 + - libnetcdf=4.7.4 + - libnghttp2=1.41.0 + - libopenblas=0.3.12 - libpng=1.6.37 - - libpq=11.5 + - libpq=12.3 + - libsolv=0.7.16 - libspatialindex=1.9.3 - libspatialite=4.3.0a - libssh2=1.9.0 - - libstdcxx-ng=9.1.0 + - libstdcxx-ng=9.3.0 - libtiff=4.1.0 - - libuuid=1.0.3 + - libuuid=2.32.1 + - libwebp-base=1.1.0 - libxcb=1.13 - - libxml2=2.9.9 + - libxml2=2.9.10 - libxslt=1.1.33 - locket=0.2.0 - - lxml=4.5.0 - - lz4-c=1.8.1.2 + - lxml=4.6.2 + - lz4-c=1.9.2 - lzo=2.10 + - mamba=0.7.3 - markupsafe=1.1.1 - - matplotlib=3.1.3 - - matplotlib-base=3.1.3 - - memory_profiler=0.55.0 + - matplotlib-base=3.3.3 + - memory_profiler=0.58.0 - metis=5.1.0 - - mkl=2020.1 - - mkl-service=2.3.0 - - mkl_fft=1.0.15 - - mkl_random=1.1.1 - mock=4.0.2 - - more-itertools=8.3.0 - msgpack-python=1.0.0 - munch=2.5.0 - - nbformat=5.0.6 + - nbformat=5.0.8 - ncurses=6.2 - - netcdf4=1.4.2 - - networkx=2.4 + - netcdf4=1.5.4 + - networkx=2.5 - nose=1.3.7 - numexpr=2.7.1 - - numpy=1.18.1 - - numpy-base=1.18.1 + - numpy=1.19.0 - olefile=0.46 - - openjpeg=2.3.0 - - openssl=1.1.1g - - owslib=0.19.2 - - packaging=20.3 - - pandas=1.0.3 - - parso=0.7.0 + - openjpeg=2.3.1 + - openssl=1.1.1h + - owslib=0.20.0 + - packaging=20.7 + - pandas=1.1.4 + - parso=0.7.1 - partd=1.1.0 - - pcre=8.43 + - patsy=0.5.1 + - pcre=8.44 - pexpect=4.8.0 - pickleshare=0.7.5 - - pillow=7.1.2 - - pip=20.0.2 + - pillow=8.0.1 + - pip=20.3.1 - pixman=0.38.0 - - pluggy=0.13.1 - ply=3.11 - - poppler=0.65.0 - - poppler-data=0.4.9 - - postgresql=11.5 - - powerplantmatching=0.4.5 - - progressbar2=3.37.1 - - proj=6.2.1 - - prompt-toolkit=3.0.5 - - prompt_toolkit=3.0.5 - - psutil=5.7.0 + - poppler=0.87.0 + - poppler-data=0.4.10 + - postgresql=12.3 + - powerplantmatching=0.4.8 + - progressbar2=3.53.1 + - proj=7.0.0 + - prompt-toolkit=3.0.8 + - psutil=5.7.3 + - pthread-stubs=0.4 - ptyprocess=0.6.0 - - py=1.8.1 - - pycountry=19.8.18 + - pulp=2.3.1 + - pycosat=0.6.3 + - pycountry=20.7.3 - pycparser=2.20 - pyepsg=0.4.0 - - pygments=2.6.1 - - pykdtree=1.3.1 - - pyomo=5.6.9 - - pyopenssl=19.1.0 + - pygments=2.7.2 + - pykdtree=1.3.4 + - pyomo=5.7.1 + - pyopenssl=20.0.0 - pyparsing=2.4.7 - pyproj=2.6.1.post1 - - pypsa=0.17.0 - - pyqt=5.9.2 - - pyrsistent=0.16.0 - - pyshp=2.1.0 + - pypsa=0.17.1 + - pyrsistent=0.17.3 + - pyshp=2.1.2 - pysocks=1.7.1 - pytables=3.6.1 - - pytest=5.4.2 - - pytest-runner=5.2 - - python=3.7.7 + - python=3.8.6 - python-dateutil=2.8.1 - - python-utils=2.3.0 - - python_abi=3.7 - - pytz=2020.1 - - pyutilib=5.8.0 + - python-utils=2.4.0 + - python_abi=3.8 + - pytz=2020.4 + - pyutilib=6.0.0 - pyyaml=5.3.1 - - qt=5.9.7 - - rasterio=1.1.0 + - rasterio=1.1.5 - ratelimiter=1.2.0 - readline=8.0 - - requests=2.23.0 + - reproc=14.2.1 + - reproc-cpp=14.2.1 + - requests=2.25.0 - rtree=0.9.4 - - scikit-learn=0.22.1 - - scipy=1.4.1 - - seaborn=0.10.1 - - setuptools=47.1.1 - - shapely=1.7.0 - - sip=4.19.8 + - ruamel_yaml=0.15.80 + - scikit-learn=0.23.2 + - scipy=1.5.3 + - seaborn=0.11.0 + - seaborn-base=0.11.0 + - setuptools=49.6.0 + - shapely=1.7.1 - six=1.15.0 - - smmap=3.0.2 - - snakemake-minimal=5.19.2 - - snappy=1.1.7 + - smmap=3.0.4 + - snakemake-minimal=5.30.1 - snuggs=1.4.7 - - sortedcontainers=2.1.0 + - sortedcontainers=2.3.0 - soupsieve=2.0.1 - - sqlite=3.31.1 - - tbb=2018.0.5 + - sqlite=3.34.0 + - statsmodels=0.12.1 + - tbb=2020.2 - tblib=1.6.0 - - tiledb=1.6.3 - - tk=8.6.8 - - toolz=0.10.0 + - threadpoolctl=2.1.0 + - tiledb=1.7.7 + - tk=8.6.10 + - toolz=0.11.1 - toposort=1.5 - - tornado=6.0.4 - - traitlets=4.3.3 - - typing_extensions=3.7.4.1 + - tornado=6.1 + - tqdm=4.54.1 + - traitlets=5.0.5 + - typing_extensions=3.7.4.3 - tzcode=2020a - - urllib3=1.25.8 - - wcwidth=0.1.9 - - wheel=0.34.2 + - urllib3=1.25.11 + - wcwidth=0.2.5 + - wheel=0.36.1 - wrapt=1.12.1 - - xarray=0.15.1 + - xarray=0.16.2 - xerces-c=3.2.2 - xlrd=1.2.0 + - xorg-kbproto=1.0.7 + - xorg-libice=1.0.10 + - xorg-libsm=1.2.3 + - xorg-libx11=1.6.12 + - xorg-libxau=1.0.9 + - xorg-libxdmcp=1.1.3 + - xorg-libxext=1.3.4 + - xorg-libxrender=0.9.10 + - xorg-renderproto=0.11.1 + - xorg-xextproto=7.3.0 + - xorg-xproto=7.0.31 - xz=5.2.5 - - yaml=0.1.7 + - yaml=0.2.5 - zict=2.0.0 - - zipp=3.1.0 + - zipp=3.4.0 - zlib=1.2.11 - - zstd=1.3.7 + - zstd=1.4.5 - pip: - - cdsapi==0.2.7 + - cdsapi==0.4.0 - countrycode==0.2 - - descartes==1.1.0 - geokit==1.1.2 - glaes==1.1.2 - - tqdm==4.46.1 + - sklearn==0.0 + - tsam==1.1.0 - vresutils==0.3.1 diff --git a/scripts/add_electricity.py b/scripts/add_electricity.py index 85bea7fdd..8fc8ad5c4 100755 --- a/scripts/add_electricity.py +++ b/scripts/add_electricity.py @@ -24,15 +24,13 @@ conventional_carriers: co2limit: extendable_carriers: - Generator: - OPSD_VRES_countries: include_renewable_capacities_from_OPSD: estimate_renewable_capacities_from_capacity_stats: load: scaling_factor: - renewable: (keys) + renewable: hydro: carriers: hydro_max_hours: @@ -54,9 +52,7 @@ .. image:: ../img/hydrocapacities.png :scale: 34 % -- ``data/geth2015_hydro_capacities.csv``: alternative to capacities above; NOT CURRENTLY USED! - - +- ``data/geth2015_hydro_capacities.csv``: alternative to capacities above; not currently used! - ``resources/opsd_load.csv`` Hourly per-country load profiles. - ``resources/regions_onshore.geojson``: confer :ref:`busregions` - ``resources/nuts3_shapes.geojson``: confer :ref:`shapes` diff --git a/scripts/add_extra_components.py b/scripts/add_extra_components.py index e2cd8ea63..00851d875 100644 --- a/scripts/add_extra_components.py +++ b/scripts/add_extra_components.py @@ -43,7 +43,7 @@ Description ----------- -The rule :mod:`add_extra_components` attaches additional extendable components to the clustered and simplified network. These can be configured in the ``config.yaml`` at ``electricity: extendable_carriers: ``. It processes ``networks/elec_s{simpl}_{clusters}.nc`` to build ``networks/elec_s{simpl}_{clusters}_ec.nc``, which in contrast to the former (depending on the configuration) contain with **zero** initial capacity +The rule :mod:`add_extra_components` attaches additional extendable components to the clustered and simplified network. These can be configured in the ``config.yaml`` at ``electricity: extendable_carriers:``. It processes ``networks/elec_s{simpl}_{clusters}.nc`` to build ``networks/elec_s{simpl}_{clusters}_ec.nc``, which in contrast to the former (depending on the configuration) contain with **zero** initial capacity - ``StorageUnits`` of carrier 'H2' and/or 'battery'. If this option is chosen, every bus is given an extendable ``StorageUnit`` of the corresponding carrier. The energy and power capacities are linked through a parameter that specifies the energy capacity as maximum hours at full dispatch power and is configured in ``electricity: max_hours:``. This linkage leads to one investment variable per storage unit. The default ``max_hours`` lead to long-term hydrogen and short-term battery storage units. diff --git a/scripts/build_load_data.py b/scripts/build_load_data.py index a47456304..e31fa3f21 100755 --- a/scripts/build_load_data.py +++ b/scripts/build_load_data.py @@ -17,7 +17,7 @@ url: interpolate_limit: time_shift_for_large_gaps: - manual_adjustments: true + manual_adjustments: .. seealso:: diff --git a/scripts/solve_network.py b/scripts/solve_network.py index e6936db64..db64e5764 100755 --- a/scripts/solve_network.py +++ b/scripts/solve_network.py @@ -10,10 +10,6 @@ .. code:: yaml - (electricity:) - (BAU_mincapacities:) - (SAFE_reservemargin:) - solving: tmpdir: options: @@ -28,10 +24,6 @@ track_iterations: solver: name: - (solveroptions): - - (plotting:) - (conv_techs:) .. seealso:: Documentation of the configuration file ``config.yaml`` at diff --git a/test/config.test1.yaml b/test/config.test1.yaml index 149435e02..2a91aaf0b 100755 --- a/test/config.test1.yaml +++ b/test/config.test1.yaml @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: CC0-1.0 -version: 0.2.0 +version: 0.3.0 tutorial: true logging: level: INFO