diff --git a/documentation/00-readme.md b/documentation/00-readme.md
index 06b46d6c6..f1a234682 100644
--- a/documentation/00-readme.md
+++ b/documentation/00-readme.md
@@ -15,106 +15,90 @@ SPDX-License-Identifier: CC-BY-4.0
[](https://api.reuse.software/info/github.com/pypsa/pypsa-eur)
[](https://stackoverflow.com/questions/tagged/pypsa)
-### The Role of Energy Storage in Germany
-
-This repository is a soft-fork of [OET/PyPSA-Eur](https://github.com/open-energy-transition/pypsa-eur) and contains the entire project `The Role of Energy Storage in Germany` supported by [Open Energy Transition (OET)](https://openenergytransition.org/)*, including code and report. The philosophy behind this repository is that no intermediary results are included, but all results are computed from raw data and code. The structure is also inspired by [cookiecutter-project](https://github.com/PyPSA/cookiecutter-project).
+This repository is a soft-fork of [OET/PyPSA-Eur](https://github.com/open-energy-transition/pypsa-eur) and contains the entire project **The Role of Energy Storage in Germany** supported by [Open Energy Transition (OET)](https://openenergytransition.org/)*, including code and visualization. The philosophy behind this repository is that no intermediary results are included, but all results are computed from raw data and code.
This repository is maintained using [OET's soft-fork strategy](https://open-energy-transition.github.io/handbook/docs/Engineering/SoftForkStrategy). OET's primary aim is to contribute as much as possible to the open source (OS) upstream repositories. For long-term changes that cannot be directly merged upstream, the strategy organizes and maintains OET forks, ensuring they remain up-to-date and compatible with upstream, while also supporting future contributions back to the OS repositories.
-For further readings of PyPSA and PyPSA-Eur:
-
-* [PyPSA](https://pypsa-eur.readthedocs.io)
-* [PyPSA-Eur](https://pypsa.readthedocs.io)
+## The Role of Energy Storage in Germany
-Here are an excerp for the introduction of PyPSA-Eur:
+Energy storage technologies hold significant promise for reducing carbon emissions. While short-duration storage is popular today, the system benefits for
+long duration storage are rather hidden and require more effort to receive policy attention. This project aims to reveal the hidden benefits of multi-day energy storage through the analysis of
+energy system models.
-### PyPSA-Eur: A Sector-Coupled Open Optimisation Model of the European Energy System
+The primary objectives are to develop a policy relevant validated energy system model with a focus on Germany, and integrate various representations of short to long-duration energy storage
+into the model. Then, optimization runs are conducted to explore various scenarios to inform policy-makers about the benefits of various types of energy storage. The project will culminate
+in a detailed report and the full model open-source code to support global research efforts. OET, an international non-profit organization specializing in open energy modeling software
+development and support, will bring its expertise to this project. The organization has a proven track record in promoting transparent, data-driven decision-making in energy policy and
+planning, with its software products (including PyPSA-Eur and PyPSA-Earth) used in more than 50 research and industry-related projects.
-PyPSA-Eur is an open model dataset of the European energy system at the
-transmission network level that covers the full ENTSO-E area. 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.
+All results will be based on open-source software and fully reproducible. If implemented successfully for Germany, the methods can be replicated easily within the same model framework all-around the world using, among others, PyPSA-Eur or PyPSA-Earth.
-The model is described in the [documentation](https://pypsa-eur.readthedocs.io)
-and in the paper
-[PyPSA-Eur: An Open Optimisation Model of the European Transmission
-System](https://arxiv.org/abs/1806.01613), 2018,
-[arXiv:1806.01613](https://arxiv.org/abs/1806.01613).
-The model building routines are defined through a snakemake workflow.
-Please see the [documentation](https://pypsa-eur.readthedocs.io/)
-for installation instructions and other useful information about the snakemake workflow.
-The model is designed to be imported into the open toolbox
-[PyPSA](https://github.com/PyPSA/PyPSA).
-
-**WARNING**: PyPSA-Eur is under active development and has several
-[limitations](https://pypsa-eur.readthedocs.io/en/latest/limitations.html) which
-you should understand before using the model. The github repository
-[issues](https://github.com/PyPSA/pypsa-eur/issues) collect known topics we are
-working on (please feel free to help or make suggestions). The
-[documentation](https://pypsa-eur.readthedocs.io/) remains somewhat patchy. You
-can find showcases of the model's capabilities in the Joule paper [The potential
-role of a hydrogen network in
-Europe](https://doi.org/10.1016/j.joule.2023.06.016), another [paper in Joule
-with a description of the industry
-sector](https://doi.org/10.1016/j.joule.2022.04.016), or in [a 2021 presentation
-at EMP-E](https://nworbmot.org/energy/brown-empe.pdf). We do not recommend to
-use the full resolution network model for simulations. At high granularity the
-assignment of loads and generators to the nearest network node may not be a
-correct assumption, depending on the topology of the underlying distribution
-grid, and local grid bottlenecks may cause unrealistic load-shedding or
-generator curtailment. We recommend to cluster the network to a couple of
-hundred nodes to remove these local inconsistencies. See the discussion in
-Section 3.4 "Model validation" of the paper.
+For further readings of PyPSA and PyPSA-Eur, check out:
+* [PyPSA](https://pypsa.readthedocs.io)
+* [PyPSA-Eur](https://pypsa-eur.readthedocs.io)
+* [PyPSA-Earth](https://pypsa-earth.readthedocs.io)
-
+## Scope of the Model
-The dataset consists of:
+
-- A grid model based on a modified [GridKit](https://github.com/bdw/GridKit)
- extraction of the [ENTSO-E Transmission System
- Map](https://www.entsoe.eu/data/map/). The grid model contains 7072 lines
- (alternating current lines at and above 220kV voltage level and all high
- voltage direct current lines) and 3803 substations.
-- The open power plant database
- [powerplantmatching](https://github.com/PyPSA/powerplantmatching).
-- Electrical demand time series from the
- [OPSD project](https://open-power-system-data.org/).
-- Renewable time series based on ERA5 and SARAH, assembled using the [atlite tool](https://github.com/PyPSA/atlite).
-- Geographical potentials for wind and solar generators based on land use (CORINE) and excluding nature reserves (Natura2000) are computed with the [atlite library](https://github.com/PyPSA/atlite).
+To run multiple scenarios with a reasonable amount of computational power, we limit the scope of the model to the following:
-A sector-coupled extension adds demand
-and supply for the following sectors: transport, space and water
-heating, biomass, industry and industrial feedstocks, agriculture,
-forestry and fishing. This completes the energy system and includes
-all greenhouse gas emitters except waste management and land use.
+- **Spatial Scope**:
+ - The model includes Germany, along with its neighboring countries and Italy, making up 12 out of the 34 countries in PyPSA-Eur.
+ - The spatial resolution are 52 nodes in total, with 31 nodes dedicated to Germany, making the results for Germany more accurate than those for other modeled countries.
+- **Temporal Scope**:
+ - The analysis targets the near-term application of iron-air storage technologies, focusing on the year 2035, while PyPSA-Eur models the period from 2020 to 2050 in 5-year intervals.
+ - The temporal resolution is based on 4380 hours, instead of the full 8760 hours.
+- **Sectoral Scope**:
+ - The model includes only sectors with energy storage technologies, specifically the power, heating, and transport sectors, excluding the industrial sector.
-This diagram gives an overview of the sectors and the links between
-them:
+To view all the changes in detail, check out:
-
+* [Base Configuration](https://open-energy-transition.github.io/form-energy-storage/11-baseline.html)
+* [Features](https://open-energy-transition.github.io/form-energy-storage/03-features.html)
-Each of these sectors is built up on the transmission network nodes
-from [PyPSA-Eur](https://github.com/PyPSA/pypsa-eur):
+## PyPSA-Eur: A Sector-Coupled Open Optimisation Model of the European Energy System
-
+PyPSA-Eur is an open model dataset of the European energy system at the
+transmission network level that covers the full ENTSO-E area. 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.
-For computational reasons the model is usually clustered down
-to 50-200 nodes.
+The original PyPSA-Eur model is described in the [documentation](https://pypsa-eur.readthedocs.io)
+and in the paper[PyPSA-Eur: An Open Optimisation Model of the European Transmission System](https://arxiv.org/abs/1806.01613), 2018,
+[arXiv:1806.01613](https://arxiv.org/abs/1806.01613).
-Already-built versions of the model can be found in the accompanying [Zenodo
-repository](https://doi.org/10.5281/zenodo.3601881).
+
-### Contributing and Support
-We strongly welcome anyone interested in contributing to this project. If you have any ideas, suggestions or encounter problems, feel invited to file issues or make pull requests on GitHub.
-- In case of code-related **questions**, please post on [stack overflow](https://stackoverflow.com/questions/tagged/pypsa).
-- For non-programming related and more general questions please refer to the [mailing list](https://groups.google.com/group/pypsa).
-- To **discuss** with other PyPSA users, organise projects, share news, and get in touch with the community you can use the [discord server](https://discord.com/invite/AnuJBk23FU).
-- For **bugs and feature requests**, please use the [PyPSA-Eur Github Issues page](https://github.com/PyPSA/pypsa-eur/issues).
+The dataset consists of:
-### Licence
+- A grid model based on a modified [GridKit](https://github.com/bdw/GridKit) extraction of the [ENTSO-E Transmission System Map](https://www.entsoe.eu/data/map/). The grid model contains 7072 lines
+ (alternating current lines at and above 220kV voltage level and all high voltage direct current lines) and 3803 substations.
+- The open power plant database [powerplantmatching](https://github.com/PyPSA/powerplantmatching).
+- Electrical demand time series from the [OPSD project](https://open-power-system-data.org/).
+- Renewable time series based on ERA5 and SARAH, assembled using the [atlite tool](https://github.com/PyPSA/atlite).
+- Geographical potentials for wind and solar generators based on land use (CORINE) and excluding nature reserves (Natura2000) are computed with the [atlite library](https://github.com/PyPSA/atlite).
-The code in PyPSA-Eur is released as free software under the
-[MIT License](https://opensource.org/licenses/MIT), see [`doc/licenses.rst`](doc/licenses.rst).
-However, different licenses and terms of use may apply to the various
-input data, see [`doc/data_sources.rst`](doc/data_sources.rst).
\ No newline at end of file
+A sector-coupled extension adds demand and supply for the following sectors: transport, space and water heating, biomass, industry and industrial feedstocks, agriculture,
+forestry and fishing. This completes the energy system and includes all greenhouse gas emitters except waste management and land use.
+
+Each of these sectors is built up on the transmission network nodes from [PyPSA-Eur](https://github.com/PyPSA/pypsa-eur):
+
+## Repository structure
+
+* `benchmarks`: will store `snakemake` benchmarks (does not exist initially)
+* `config`: configurations used in the study
+* `cutouts`: will store raw weather data cutouts from `atlite` (does not exist initially)
+* `data`: includes input data that is not produced by any `snakemake` rule
+* `doc`: includes all files necessary to build the `readthedocs` documentation of PyPSA-Eur
+* `documentation`: includes all files necessary to build the `jupyter book` documentation of Form Energy Storage version of PyPSA-Eur
+* `envs`: includes all the `mamba` environment specifications to run the workflow
+* `logs`: will store log files (does not exist initially)
+* `notebooks`: includes all the `notebooks` used for ad-hoc analysis
+
+* `rules`: includes all the `snakemake`rules loaded in the `Snakefile`
+* `resources`: will store intermediate results of the workflow which can be picked up again by subsequent rules (does not exist initially)
+* `results`: will store the solved PyPSA network data, summary files and plots (does not exist initially)
+* `scripts`: includes all the Python scripts executed by the `snakemake` rules to build the model
\ No newline at end of file
diff --git a/documentation/02-tutorials.rst b/documentation/02-tutorials.rst
index 08f62359c..ca23ff8b9 100644
--- a/documentation/02-tutorials.rst
+++ b/documentation/02-tutorials.rst
@@ -5,8 +5,8 @@ Tutorials
This is a brief tutorial on how to use the Form Energy Storage scenarios.
Unlike the original PyPSA-Eur repository, this version comes pre-configured with scenarios that you can test run.
-Test run Scenarios
-=====================
+Build the tutorial model
+=========================
First, open the ``config.form.yaml`` file using a code editor of your choice, and navigate to the ``run`` section:
@@ -23,8 +23,10 @@ The content of ``baseline-mds`` is defined in ``scenarios.form.yaml``.
:start-at: baseline-mds:
:end-before: baseline-nomds:
+To create your own scenarios, it's recommended to define the configurations in ``scenarios.form.yaml`` by either modifying an existing scenario or duplicating and renaming a scenario.
+
.. note::
- If you want to create a model that minimizes computational time, you can adjust the ``clustering: temporal: resolution_sector`` setting here:
+ If you want to create a model with lower computational requirements, you can adjust the ``clustering: temporal: resolution_sector`` setting here:
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -41,7 +43,10 @@ The content of ``baseline-mds`` is defined in ``scenarios.form.yaml``.
If you want to test run this model on your computer, replace ``4380SEG`` with ``100H``.
-Before running the model, run the snakemake command:
+Run the model
+=========================
+
+Before running the model, it's recommended to test run the snakemake command:
.. code:: console
@@ -113,277 +118,38 @@ The ``-n`` at the end indicates a dry run. If no errors occur, it will list the
time_aggregation 1
total 68
+.. note::
+ If an error occurs due to missing data, the first solution is to check the ``enable:`` setting in ``config.form.yaml``.
+
+ .. literalinclude:: ../config/config.form.yaml
+ :language: yaml
+ :start-at: enable:
+ :end-before: # docs
+
+ * ``retrieve_databundle``: set this to true if a file in ``data/`` is missing
+ * ``retrieve_cost_data``: set this to true if ``resources/.. ../cost_2035.csv`` is missing
+ * ``retrieve_cutout``: set this to true if ``cutouts/europe-2013-sarah3-era5.nc`` is missing
+
+ For cutouts from years other than 2013, 2018, and 2023, you can download them from xx.
+
To create the model, run the snakemake command:
.. code:: console
snakemake solve_sector_networks --configfile config/config.form.yaml
-This triggers a workflow of multiple preceding jobs that depend on each rule's inputs and outputs:
-
-.. graphviz::
- :class: full-width
- :align: center
-
- digraph snakemake_dag {
- graph[bgcolor=white, margin=0];
- node[shape=box, style=rounded, fontname=sans, fontsize=10, penwidth=2];
- edge[penwidth=2, color=grey];
- 0[label = "solve_sector_networks", color = "0.50 0.6 0.85", style="rounded"];
- 1[label = "solve_sector_network_myopic", color = "0.43 0.6 0.85", style="rounded"];
- 2[label = "final_adjustment_myopic", color = "0.52 0.6 0.85", style="rounded"];
- 3[label = "add_existing_baseyear", color = "0.63 0.6 0.85", style="rounded"];
- 4[label = "prepare_sector_network", color = "0.29 0.6 0.85", style="rounded"];
- 5[label = "build_renewable_profiles", color = "0.13 0.6 0.85", style="rounded"];
- 6[label = "determine_availability_matrix\ntechnology: offwind-ac", color = "0.40 0.6 0.85", style="rounded"];
- 7[label = "build_ship_raster\nrun: baseline-mds", color = "0.41 0.6 0.85", style="rounded"];
- 8[label = "retrieve_ship_raster", color = "0.53 0.6 0.85", style="rounded"];
- 9[label = "build_shapes\nrun: baseline-mds", color = "0.38 0.6 0.85", style="rounded"];
- 10[label = "retrieve_naturalearth_countries", color = "0.65 0.6 0.85", style="rounded,dashed"];
- 11[label = "retrieve_eez", color = "0.45 0.6 0.85", style="rounded,dashed"];
- 12[label = "retrieve_nuts_shapes", color = "0.04 0.6 0.85", style="rounded,dashed"];
- 13[label = "cluster_network\nclusters: 52", color = "0.05 0.6 0.85", style="rounded"];
- 14[label = "simplify_network", color = "0.10 0.6 0.85", style="rounded"];
- 15[label = "add_transmission_projects_and_dlr", color = "0.60 0.6 0.85", style="rounded"];
- 16[label = "base_network", color = "0.34 0.6 0.85", style="rounded"];
- 17[label = "retrieve_osm_prebuilt", color = "0.56 0.6 0.85", style="rounded"];
- 18[label = "build_transmission_projects", color = "0.15 0.6 0.85", style="rounded"];
- 19[label = "build_electricity_demand_base", color = "0.66 0.6 0.85", style="rounded"];
- 20[label = "build_electricity_demand\nrun: baseline-mds", color = "0.58 0.6 0.85", style="rounded"];
- 21[label = "retrieve_electricity_demand", color = "0.15 0.6 0.85", style="rounded"];
- 22[label = "retrieve_synthetic_electricity_demand", color = "0.49 0.6 0.85", style="rounded,dashed"];
- 23[label = "build_renewable_profiles", color = "0.13 0.6 0.85", style="rounded"];
- 24[label = "determine_availability_matrix\ntechnology: offwind-dc", color = "0.40 0.6 0.85", style="rounded"];
- 25[label = "build_renewable_profiles", color = "0.13 0.6 0.85", style="rounded"];
- 26[label = "determine_availability_matrix\ntechnology: offwind-float", color = "0.40 0.6 0.85", style="rounded"];
- 27[label = "cluster_gas_network", color = "0.25 0.6 0.85", style="rounded"];
- 28[label = "build_gas_network\nrun: baseline-mds", color = "0.64 0.6 0.85", style="rounded"];
- 29[label = "retrieve_gas_infrastructure_data", color = "0.21 0.6 0.85", style="rounded"];
- 30[label = "build_gas_input_locations", color = "0.06 0.6 0.85", style="rounded"];
- 31[label = "retrieve_gem_europe_gas_tracker", color = "0.35 0.6 0.85", style="rounded,dashed"];
- 32[label = "time_aggregation\nsector_opts: ", color = "0.12 0.6 0.85", style="rounded"];
- 33[label = "prepare_network\nll: v1.11\nopts: ", color = "0.26 0.6 0.85", style="rounded"];
- 34[label = "add_electricity", color = "0.62 0.6 0.85", style="rounded"];
- 35[label = "build_renewable_profiles", color = "0.13 0.6 0.85", style="rounded"];
- 36[label = "determine_availability_matrix\ntechnology: solar", color = "0.40 0.6 0.85", style="rounded"];
- 37[label = "build_renewable_profiles", color = "0.13 0.6 0.85", style="rounded"];
- 38[label = "determine_availability_matrix\ntechnology: solar-hsat", color = "0.40 0.6 0.85", style="rounded"];
- 39[label = "build_renewable_profiles", color = "0.13 0.6 0.85", style="rounded"];
- 40[label = "determine_availability_matrix\ntechnology: onwind", color = "0.40 0.6 0.85", style="rounded"];
- 41[label = "build_hydro_profile", color = "0.23 0.6 0.85", style="rounded"];
- 42[label = "retrieve_cost_data\nrun: baseline-mds\nyear: 2035", color = "0.18 0.6 0.85", style="rounded"];
- 43[label = "build_powerplants", color = "0.31 0.6 0.85", style="rounded"];
- 44[label = "build_hourly_heat_demand", color = "0.30 0.6 0.85", style="rounded"];
- 45[label = "build_daily_heat_demand", color = "0.54 0.6 0.85", style="rounded"];
- 46[label = "build_population_layouts", color = "0.18 0.6 0.85", style="rounded"];
- 47[label = "retrieve_worldbank_urban_population", color = "0.30 0.6 0.85", style="rounded,dashed"];
- 48[label = "build_solar_thermal_profiles", color = "0.51 0.6 0.85", style="rounded"];
- 49[label = "build_population_weighted_energy_totals\nkind: energy", color = "0.39 0.6 0.85", style="rounded"];
- 50[label = "build_energy_totals", color = "0.55 0.6 0.85", style="rounded"];
- 51[label = "build_clustered_population_layouts", color = "0.04 0.6 0.85", style="rounded"];
- 52[label = "build_population_weighted_energy_totals\nkind: heat", color = "0.39 0.6 0.85", style="rounded"];
- 53[label = "build_heat_totals", color = "0.39 0.6 0.85", style="rounded"];
- 54[label = "build_shipping_demand", color = "0.20 0.6 0.85", style="rounded"];
- 55[label = "build_transport_demand", color = "0.01 0.6 0.85", style="rounded"];
- 56[label = "build_temperature_profiles", color = "0.25 0.6 0.85", style="rounded"];
- 57[label = "build_biomass_potentials\nplanning_horizons: 2035", color = "0.02 0.6 0.85", style="rounded"];
- 58[label = "retrieve_jrc_enspreso_biomass", color = "0.02 0.6 0.85", style="rounded,dashed"];
- 59[label = "build_salt_cavern_potentials", color = "0.17 0.6 0.85", style="rounded"];
- 60[label = "build_industrial_energy_demand_per_node", color = "0.47 0.6 0.85", style="rounded"];
- 61[label = "build_industry_sector_ratios_intermediate\nplanning_horizons: 2035", color = "0.11 0.6 0.85", style="rounded"];
- 62[label = "build_industry_sector_ratios", color = "0.49 0.6 0.85", style="rounded"];
- 63[label = "build_ammonia_production\nrun: baseline-mds", color = "0.31 0.6 0.85", style="rounded"];
- 64[label = "retrieve_usgs_ammonia_production", color = "0.24 0.6 0.85", style="rounded,dashed"];
- 65[label = "build_industrial_energy_demand_per_country_today", color = "0.41 0.6 0.85", style="rounded"];
- 66[label = "build_industrial_production_per_country", color = "0.32 0.6 0.85", style="rounded"];
- 67[label = "build_industrial_production_per_node", color = "0.48 0.6 0.85", style="rounded"];
- 68[label = "build_industrial_distribution_key", color = "0.13 0.6 0.85", style="rounded"];
- 69[label = "retrieve_hotmaps_industrial_sites", color = "0.03 0.6 0.85", style="rounded,dashed"];
- 70[label = "retrieve_gem_steel_plant_tracker", color = "0.36 0.6 0.85", style="rounded,dashed"];
- 71[label = "build_industrial_production_per_country_tomorrow\nplanning_horizons: 2035", color = "0.06 0.6 0.85", style="rounded"];
- 72[label = "build_industrial_energy_demand_per_node_today", color = "0.03 0.6 0.85", style="rounded"];
- 73[label = "build_district_heat_share\nplanning_horizons: 2035", color = "0.52 0.6 0.85", style="rounded"];
- 74[label = "build_cop_profiles", color = "0.61 0.6 0.85", style="rounded"];
- 75[label = "build_central_heating_temperature_profiles\nplanning_horizons: 2035", color = "0.16 0.6 0.85", style="rounded"];
- 76[label = "build_direct_heat_source_utilisation_profiles", color = "0.59 0.6 0.85", style="rounded"];
- 77[label = "build_existing_heating_distribution", color = "0.08 0.6 0.85", style="rounded"];
- 1 -> 0
- 2 -> 1
- 42 -> 1
- 3 -> 2
- 4 -> 3
- 43 -> 3
- 14 -> 3
- 13 -> 3
- 51 -> 3
- 42 -> 3
- 74 -> 3
- 77 -> 3
- 50 -> 3
- 5 -> 4
- 23 -> 4
- 25 -> 4
- 27 -> 4
- 30 -> 4
- 32 -> 4
- 33 -> 4
- 49 -> 4
- 52 -> 4
- 54 -> 4
- 55 -> 4
- 44 -> 4
- 50 -> 4
- 57 -> 4
- 42 -> 4
- 59 -> 4
- 14 -> 4
- 13 -> 4
- 51 -> 4
- 60 -> 4
- 67 -> 4
- 73 -> 4
- 56 -> 4
- 74 -> 4
- 48 -> 4
- 76 -> 4
- 6 -> 5
- 9 -> 5
- 13 -> 5
- 7 -> 6
- 9 -> 6
- 13 -> 6
- 8 -> 7
- 10 -> 9
- 11 -> 9
- 12 -> 9
- 14 -> 13
- 19 -> 13
- 15 -> 14
- 16 -> 14
- 16 -> 15
- 18 -> 15
- 17 -> 16
- 9 -> 16
- 16 -> 18
- 9 -> 18
- 14 -> 19
- 9 -> 19
- 20 -> 19
- 21 -> 20
- 22 -> 20
- 24 -> 23
- 9 -> 23
- 13 -> 23
- 7 -> 24
- 9 -> 24
- 13 -> 24
- 26 -> 25
- 9 -> 25
- 13 -> 25
- 7 -> 26
- 9 -> 26
- 13 -> 26
- 28 -> 27
- 13 -> 27
- 29 -> 28
- 31 -> 30
- 29 -> 30
- 13 -> 30
- 33 -> 32
- 44 -> 32
- 48 -> 32
- 34 -> 33
- 42 -> 33
- 35 -> 34
- 37 -> 34
- 39 -> 34
- 5 -> 34
- 23 -> 34
- 25 -> 34
- 41 -> 34
- 13 -> 34
- 42 -> 34
- 43 -> 34
- 19 -> 34
- 36 -> 35
- 9 -> 35
- 13 -> 35
- 9 -> 36
- 13 -> 36
- 38 -> 37
- 9 -> 37
- 13 -> 37
- 9 -> 38
- 13 -> 38
- 40 -> 39
- 9 -> 39
- 13 -> 39
- 9 -> 40
- 13 -> 40
- 9 -> 41
- 13 -> 43
- 45 -> 44
- 46 -> 45
- 13 -> 45
- 9 -> 46
- 47 -> 46
- 46 -> 48
- 13 -> 48
- 50 -> 49
- 51 -> 49
- 9 -> 50
- 46 -> 51
- 13 -> 51
- 53 -> 52
- 51 -> 52
- 50 -> 53
- 9 -> 54
- 13 -> 54
- 50 -> 54
- 51 -> 55
- 49 -> 55
- 50 -> 55
- 56 -> 55
- 46 -> 56
- 13 -> 56
- 58 -> 57
- 12 -> 57
- 13 -> 57
- 9 -> 57
- 13 -> 59
- 61 -> 60
- 67 -> 60
- 72 -> 60
- 62 -> 61
- 65 -> 61
- 66 -> 61
- 63 -> 62
- 64 -> 63
- 50 -> 65
- 66 -> 65
- 63 -> 66
- 68 -> 67
- 71 -> 67
- 13 -> 68
- 51 -> 68
- 69 -> 68
- 70 -> 68
- 66 -> 71
- 68 -> 72
- 65 -> 72
- 50 -> 73
- 51 -> 73
- 75 -> 74
- 56 -> 74
- 13 -> 74
- 56 -> 75
- 13 -> 75
- 75 -> 76
- 51 -> 77
- 49 -> 77
- 73 -> 77
- }
-|
+This triggers a workflow of multiple preceding jobs that depend on each rule's inputs and outputs.
+
+Analyze the model
+=========================
+
+There are several ways to analyze the results of the Snakemake run:
+
+* By using the CSV files and graphs located in ``results/../csvs/`` and ``results/../graphs/``
+* By using a pre-configured Jupyter Notebook in ``notebooks/`` or any Jupyter Notebook of your choice.
+* By utilizing the customizable KPIs in ``results/../maps/``
+
+The automatic generation of KPI plots is a feature from this project and may be upstreamed in the future. To create your own custom KPI plots, see `KPI Configuration `_
To generate the KPI plots, run the snakemake command:
@@ -391,298 +157,4 @@ To generate the KPI plots, run the snakemake command:
snakemake plot_KPIs_all --configfile config/config.form.yaml
-
-.. graphviz::
- :class: full-width
- :align: center
-
- digraph snakemake_dag {
- graph[bgcolor=white, margin=0];
- node[shape=box, style=rounded, fontname=sans, fontsize=10, penwidth=2];
- edge[penwidth=2, color=grey];
- 0[label = "plot_KPIs_all", color = "0.55 0.6 0.85", style="rounded"];
- 1[label = "plot_KPIs", color = "0.21 0.6 0.85", style="rounded"];
- 2[label = "solve_sector_network_myopic", color = "0.18 0.6 0.85", style="rounded"];
- 3[label = "final_adjustment_myopic", color = "0.55 0.6 0.85", style="rounded"];
- 4[label = "add_existing_baseyear", color = "0.56 0.6 0.85", style="rounded"];
- 5[label = "prepare_sector_network", color = "0.16 0.6 0.85", style="rounded"];
- 6[label = "build_renewable_profiles", color = "0.58 0.6 0.85", style="rounded"];
- 7[label = "determine_availability_matrix\ntechnology: offwind-ac", color = "0.44 0.6 0.85", style="rounded"];
- 8[label = "build_ship_raster\nrun: baseline-mds", color = "0.63 0.6 0.85", style="rounded"];
- 9[label = "retrieve_ship_raster", color = "0.64 0.6 0.85", style="rounded"];
- 10[label = "build_shapes\nrun: baseline-mds", color = "0.34 0.6 0.85", style="rounded"];
- 11[label = "retrieve_naturalearth_countries", color = "0.29 0.6 0.85", style="rounded,dashed"];
- 12[label = "retrieve_eez", color = "0.16 0.6 0.85", style="rounded,dashed"];
- 13[label = "retrieve_nuts_shapes", color = "0.03 0.6 0.85", style="rounded,dashed"];
- 14[label = "cluster_network\nclusters: 52", color = "0.49 0.6 0.85", style="rounded"];
- 15[label = "simplify_network", color = "0.04 0.6 0.85", style="rounded"];
- 16[label = "add_transmission_projects_and_dlr", color = "0.61 0.6 0.85", style="rounded"];
- 17[label = "base_network", color = "0.10 0.6 0.85", style="rounded"];
- 18[label = "retrieve_osm_prebuilt", color = "0.06 0.6 0.85", style="rounded"];
- 19[label = "build_transmission_projects", color = "0.57 0.6 0.85", style="rounded"];
- 20[label = "build_electricity_demand_base", color = "0.26 0.6 0.85", style="rounded"];
- 21[label = "build_electricity_demand\nrun: baseline-mds", color = "0.43 0.6 0.85", style="rounded"];
- 22[label = "retrieve_electricity_demand", color = "0.51 0.6 0.85", style="rounded"];
- 23[label = "retrieve_synthetic_electricity_demand", color = "0.11 0.6 0.85", style="rounded,dashed"];
- 24[label = "build_renewable_profiles", color = "0.58 0.6 0.85", style="rounded"];
- 25[label = "determine_availability_matrix\ntechnology: offwind-dc", color = "0.44 0.6 0.85", style="rounded"];
- 26[label = "build_renewable_profiles", color = "0.58 0.6 0.85", style="rounded"];
- 27[label = "determine_availability_matrix\ntechnology: offwind-float", color = "0.44 0.6 0.85", style="rounded"];
- 28[label = "cluster_gas_network", color = "0.14 0.6 0.85", style="rounded"];
- 29[label = "build_gas_network\nrun: baseline-mds", color = "0.07 0.6 0.85", style="rounded"];
- 30[label = "retrieve_gas_infrastructure_data", color = "0.22 0.6 0.85", style="rounded"];
- 31[label = "build_gas_input_locations", color = "0.04 0.6 0.85", style="rounded"];
- 32[label = "retrieve_gem_europe_gas_tracker", color = "0.17 0.6 0.85", style="rounded,dashed"];
- 33[label = "time_aggregation\nsector_opts: ", color = "0.65 0.6 0.85", style="rounded"];
- 34[label = "prepare_network\nll: v1.11\nopts: ", color = "0.12 0.6 0.85", style="rounded"];
- 35[label = "add_electricity", color = "0.39 0.6 0.85", style="rounded"];
- 36[label = "build_renewable_profiles", color = "0.58 0.6 0.85", style="rounded"];
- 37[label = "determine_availability_matrix\ntechnology: solar", color = "0.44 0.6 0.85", style="rounded"];
- 38[label = "build_renewable_profiles", color = "0.58 0.6 0.85", style="rounded"];
- 39[label = "determine_availability_matrix\ntechnology: solar-hsat", color = "0.44 0.6 0.85", style="rounded"];
- 40[label = "build_renewable_profiles", color = "0.58 0.6 0.85", style="rounded"];
- 41[label = "determine_availability_matrix\ntechnology: onwind", color = "0.44 0.6 0.85", style="rounded"];
- 42[label = "build_hydro_profile", color = "0.44 0.6 0.85", style="rounded"];
- 43[label = "retrieve_cost_data\nrun: baseline-mds\nyear: 2035", color = "0.57 0.6 0.85", style="rounded"];
- 44[label = "build_powerplants", color = "0.31 0.6 0.85", style="rounded"];
- 45[label = "build_hourly_heat_demand", color = "0.60 0.6 0.85", style="rounded"];
- 46[label = "build_daily_heat_demand", color = "0.25 0.6 0.85", style="rounded"];
- 47[label = "build_population_layouts", color = "0.08 0.6 0.85", style="rounded"];
- 48[label = "retrieve_worldbank_urban_population", color = "0.66 0.6 0.85", style="rounded,dashed"];
- 49[label = "build_solar_thermal_profiles", color = "0.22 0.6 0.85", style="rounded"];
- 50[label = "build_population_weighted_energy_totals\nkind: energy", color = "0.27 0.6 0.85", style="rounded"];
- 51[label = "build_energy_totals", color = "0.41 0.6 0.85", style="rounded"];
- 52[label = "build_clustered_population_layouts", color = "0.26 0.6 0.85", style="rounded"];
- 53[label = "build_population_weighted_energy_totals\nkind: heat", color = "0.27 0.6 0.85", style="rounded"];
- 54[label = "build_heat_totals", color = "0.52 0.6 0.85", style="rounded"];
- 55[label = "build_shipping_demand", color = "0.45 0.6 0.85", style="rounded"];
- 56[label = "build_transport_demand", color = "0.00 0.6 0.85", style="rounded"];
- 57[label = "build_temperature_profiles", color = "0.02 0.6 0.85", style="rounded"];
- 58[label = "build_biomass_potentials\nplanning_horizons: 2035", color = "0.12 0.6 0.85", style="rounded"];
- 59[label = "retrieve_jrc_enspreso_biomass", color = "0.18 0.6 0.85", style="rounded,dashed"];
- 60[label = "build_salt_cavern_potentials", color = "0.48 0.6 0.85", style="rounded"];
- 61[label = "build_industrial_energy_demand_per_node", color = "0.13 0.6 0.85", style="rounded"];
- 62[label = "build_industry_sector_ratios_intermediate\nplanning_horizons: 2035", color = "0.58 0.6 0.85", style="rounded"];
- 63[label = "build_industry_sector_ratios", color = "0.54 0.6 0.85", style="rounded"];
- 64[label = "build_ammonia_production\nrun: baseline-mds", color = "0.01 0.6 0.85", style="rounded"];
- 65[label = "retrieve_usgs_ammonia_production", color = "0.11 0.6 0.85", style="rounded,dashed"];
- 66[label = "build_industrial_energy_demand_per_country_today", color = "0.64 0.6 0.85", style="rounded"];
- 67[label = "build_industrial_production_per_country", color = "0.23 0.6 0.85", style="rounded"];
- 68[label = "build_industrial_production_per_node", color = "0.59 0.6 0.85", style="rounded"];
- 69[label = "build_industrial_distribution_key", color = "0.46 0.6 0.85", style="rounded"];
- 70[label = "retrieve_hotmaps_industrial_sites", color = "0.50 0.6 0.85", style="rounded,dashed"];
- 71[label = "retrieve_gem_steel_plant_tracker", color = "0.24 0.6 0.85", style="rounded,dashed"];
- 72[label = "build_industrial_production_per_country_tomorrow\nplanning_horizons: 2035", color = "0.39 0.6 0.85", style="rounded"];
- 73[label = "build_industrial_energy_demand_per_node_today", color = "0.15 0.6 0.85", style="rounded"];
- 74[label = "build_district_heat_share\nplanning_horizons: 2035", color = "0.45 0.6 0.85", style="rounded"];
- 75[label = "build_cop_profiles", color = "0.49 0.6 0.85", style="rounded"];
- 76[label = "build_central_heating_temperature_profiles\nplanning_horizons: 2035", color = "0.21 0.6 0.85", style="rounded"];
- 77[label = "build_direct_heat_source_utilisation_profiles", color = "0.59 0.6 0.85", style="rounded"];
- 78[label = "build_existing_heating_distribution", color = "0.33 0.6 0.85", style="rounded"];
- 79[label = "make_summary", color = "0.62 0.6 0.85", style="rounded"];
- 80[label = "plot_power_network_clustered", color = "0.53 0.6 0.85", style="rounded"];
- 81[label = "plot_power_network", color = "0.25 0.6 0.85", style="rounded"];
- 1 -> 0
- 2 -> 1
- 14 -> 1
- 79 -> 1
- 3 -> 2
- 43 -> 2
- 4 -> 3
- 5 -> 4
- 44 -> 4
- 15 -> 4
- 14 -> 4
- 52 -> 4
- 43 -> 4
- 75 -> 4
- 78 -> 4
- 51 -> 4
- 6 -> 5
- 24 -> 5
- 26 -> 5
- 28 -> 5
- 31 -> 5
- 33 -> 5
- 34 -> 5
- 50 -> 5
- 53 -> 5
- 55 -> 5
- 56 -> 5
- 45 -> 5
- 51 -> 5
- 58 -> 5
- 43 -> 5
- 60 -> 5
- 15 -> 5
- 14 -> 5
- 52 -> 5
- 61 -> 5
- 68 -> 5
- 74 -> 5
- 57 -> 5
- 75 -> 5
- 49 -> 5
- 77 -> 5
- 7 -> 6
- 10 -> 6
- 14 -> 6
- 8 -> 7
- 10 -> 7
- 14 -> 7
- 9 -> 8
- 11 -> 10
- 12 -> 10
- 13 -> 10
- 15 -> 14
- 20 -> 14
- 16 -> 15
- 17 -> 15
- 17 -> 16
- 19 -> 16
- 18 -> 17
- 10 -> 17
- 17 -> 19
- 10 -> 19
- 15 -> 20
- 10 -> 20
- 21 -> 20
- 22 -> 21
- 23 -> 21
- 25 -> 24
- 10 -> 24
- 14 -> 24
- 8 -> 25
- 10 -> 25
- 14 -> 25
- 27 -> 26
- 10 -> 26
- 14 -> 26
- 8 -> 27
- 10 -> 27
- 14 -> 27
- 29 -> 28
- 14 -> 28
- 30 -> 29
- 32 -> 31
- 30 -> 31
- 14 -> 31
- 34 -> 33
- 45 -> 33
- 49 -> 33
- 35 -> 34
- 43 -> 34
- 36 -> 35
- 38 -> 35
- 40 -> 35
- 6 -> 35
- 24 -> 35
- 26 -> 35
- 42 -> 35
- 14 -> 35
- 43 -> 35
- 44 -> 35
- 20 -> 35
- 37 -> 36
- 10 -> 36
- 14 -> 36
- 10 -> 37
- 14 -> 37
- 39 -> 38
- 10 -> 38
- 14 -> 38
- 10 -> 39
- 14 -> 39
- 41 -> 40
- 10 -> 40
- 14 -> 40
- 10 -> 41
- 14 -> 41
- 10 -> 42
- 14 -> 44
- 46 -> 45
- 47 -> 46
- 14 -> 46
- 10 -> 47
- 48 -> 47
- 47 -> 49
- 14 -> 49
- 51 -> 50
- 52 -> 50
- 10 -> 51
- 47 -> 52
- 14 -> 52
- 54 -> 53
- 52 -> 53
- 51 -> 54
- 10 -> 55
- 14 -> 55
- 51 -> 55
- 52 -> 56
- 50 -> 56
- 51 -> 56
- 57 -> 56
- 47 -> 57
- 14 -> 57
- 59 -> 58
- 13 -> 58
- 14 -> 58
- 10 -> 58
- 14 -> 60
- 62 -> 61
- 68 -> 61
- 73 -> 61
- 63 -> 62
- 66 -> 62
- 67 -> 62
- 64 -> 63
- 65 -> 64
- 51 -> 66
- 67 -> 66
- 64 -> 67
- 69 -> 68
- 72 -> 68
- 14 -> 69
- 52 -> 69
- 70 -> 69
- 71 -> 69
- 67 -> 72
- 69 -> 73
- 66 -> 73
- 51 -> 74
- 52 -> 74
- 76 -> 75
- 57 -> 75
- 14 -> 75
- 57 -> 76
- 14 -> 76
- 76 -> 77
- 52 -> 78
- 50 -> 78
- 74 -> 78
- 2 -> 79
- 43 -> 79
- 80 -> 79
- 81 -> 79
- 14 -> 80
- 2 -> 81
- 14 -> 81
- }
-|
-
-Repository structure
-=====================
-
-* ``benchmarks``: will store ``snakemake`` benchmarks (does not exist initially)
-* ``config``: configurations used in the study
-* ``cutouts``: will store raw weather data cutouts from ``atlite`` (does not exist initially)
-* ``data``: includes input data that is not produced by any ``snakemake`` rule
-* ``doc``: includes all files necessary to build the ``readthedocs`` documentation of PyPSA-Eur
-* ``envs``: includes all the ``mamba`` environment specifications to run the workflow
-* ``logs``: will store log files (does not exist initially)
-* ``notebooks``: includes all the ``notebooks`` used for ad-hoc analysis
-* ``report``: contains all files necessary to build the report; plots and result files are generated automatically
-* ``rules``: includes all the ``snakemake``rules loaded in the ``Snakefile``
-* ``resources``: will store intermediate results of the workflow which can be picked up again by subsequent rules (does not exist initially)
-* ``results``: will store the solved PyPSA network data, summary files and plots (does not exist initially)
-* ``scripts``: includes all the Python scripts executed by the ``snakemake`` rules to build the model
\ No newline at end of file
+The Jupyter Notebook ``notebooks/Scenarios_comparison.ipynb`` uses the script functions in ``plot_KPIs`` to plot and compare the results of multiple scenarios.
diff --git a/documentation/03-features.rst b/documentation/03-features.rst
index 42d79e7f8..6ee4d09eb 100644
--- a/documentation/03-features.rst
+++ b/documentation/03-features.rst
@@ -4,21 +4,50 @@ Features
Here is a list of changes made to this repository specifically for this work, with the potential to be upstreamed to the main PyPSA-Eur repository.
+**Model Features for Energy Storage Technologies**
+
+* Add structure in ``prepare_sector_network`` to specify implementation of storages as either ``Stores`` or ``StorageUnits`` (https://github.com/open-energy-transition/pypsa-eur/pull/15)
+
+* Add iron-air battery as storage technology with implementation as ``StorageUnit`` or ``Store`` (https://github.com/open-energy-transition/pypsa-eur/pull/20)
+
+* Add Lithium Iron Phosphate, Vanadium, Liquid-air, Compressed-air energy storage technologies as ``StorageUnit`` #21 (https://github.com/open-energy-transition/pypsa-eur/pull/21)
+
**Model Adjustment Features**
+* Overwrite cost table attributes specified in config in ``prepare_costs`` and ``load_costs`` (https://github.com/open-energy-transition/pypsa-eur/pull/23)
+
+* Add ramping limit options for conventional powerplants in ``prepare_sector_network``. (https://github.com/open-energy-transition/form-energy-storage/pull/28)
+
+* Adjust emission to only include the sector scope (https://github.com/open-energy-transition/form-energy-storage/pull/29)
+
+* Add option for ``final_adjustment`` before solving the network. This script is used to limit the grid capacity for each country (https://github.com/open-energy-transition/form-energy-storage/pull/33)
+
* Add a constraint to limit the use of Direct Air Capture (DAC) (https://github.com/open-energy-transition/form-energy-storage/pull/42)
-* Add option for final adjustment before solving the network. This script is used to limit the grid capacity for each country (https://github.com/open-energy-transition/form-energy-storage/pull/33)
+* Merge heat DSM implementation and configuration (https://github.com/open-energy-transition/form-energy-storage/pull/47)
-* Add ramping limit options for conventional powerplants in prepare_sector_network. (https://github.com/open-energy-transition/form-energy-storage/pull/28)
+* Add solid biomass and biogas sources for bioenergy power plants (https://github.com/open-energy-transition/form-energy-storage/pull/54)
-* Adjust emission to only include the sector scope (https://github.com/open-energy-transition/form-energy-storage/pull/29)
+* Fix for ``heat_dsm_profile`` for leap year (https://github.com/open-energy-transition/form-energy-storage/pull/60)
**Model Visualization Features**
-* Add KPI visualization script and functions. (https://github.com/open-energy-transition/form-energy-storage/pull/30) and (https://github.com/open-energy-transition/form-energy-storage/pull/37)
+* Add KPI visualization script and functions. (https://github.com/open-energy-transition/form-energy-storage/pull/30)
+
+* Add new battery techs to nice names and plotting for cost map (https://github.com/open-energy-transition/form-energy-storage/pull/31)
+
+* Add plotting script for FE KPIs (https://github.com/open-energy-transition/form-energy-storage/pull/37)
+
+* Make the use of Latex for plotting optional (https://github.com/open-energy-transition/form-energy-storage/pull/59)
+
+**Model Calibration Runs**
+
+* Calibration run 2023/2024 (https://github.com/open-energy-transition/form-energy-storage/pull/45)
+
+* Update calibrated run branch with the recent addition in ``form_energy_storage_dev`` (https://github.com/open-energy-transition/form-energy-storage/pull/48)
**Bugfixes**
-* Fix bugs of adding nuclear capacities twice (https://github.com/open-energy-transition/form-energy-storage/pull/32)
+* Fix deprecation warning inside ``prepare_cost`` and ``load_cost`` functions (https://github.com/open-energy-transition/pypsa-eur/pull/24)
+* Fix bugs of adding nuclear capacities twice (https://github.com/open-energy-transition/form-energy-storage/pull/32)
diff --git a/documentation/11-baseline.rst b/documentation/11-baseline.rst
index 52a2bd764..9d79751f9 100644
--- a/documentation/11-baseline.rst
+++ b/documentation/11-baseline.rst
@@ -9,7 +9,7 @@ The complete explaination of each configuration can be found in `PyPSA-Eur: Conf
``run``
=============
-`Documentation `_
+`Run Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -24,7 +24,7 @@ This is the only few section in the file that needs to be changed in order to ru
``foresight``
=============
-`Documentation `_
+`Foresight Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -36,7 +36,7 @@ The scope of this work is based on myopic foresight.
``scenario``
============
-* `Documentation `_
+* `Scenario Documentation `_
* `Wildcard Documentation `_
.. literalinclude:: ../config/config.form.yaml
@@ -51,7 +51,7 @@ The scope of this work is based on myopic foresight.
``countries``
=============
-`Documentation `_
+`Countries Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -76,7 +76,7 @@ The analysis includes Germany and its neighboring countries, along with Italy. T
``snapshots``
=============
-`Documentation `_
+`Snapshots Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -88,7 +88,7 @@ The baseline scenario is based on the climate year 2013, with the snapshots adju
``enable``
==========
-`Documentation `_
+`Enable Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -100,7 +100,7 @@ For the first run, it is recommended to set ``retrieve_databundle``, ``retrieve_
``co2 budget``
==============
-`Documentation `_
+`CO2 Budget Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -108,17 +108,12 @@ For the first run, it is recommended to set ``retrieve_databundle``, ``retrieve_
:end-before: # docs
The CO2 budget is derived from individual countries carbon emission targets for included sectors excluding domestic transport emissions from scope
-This means that the total budget is:
-
-.. math::
- 1.487e+9 * 0.107 =
-
-The complete calculation can be seen in the Assumption processing section.
+This means that the total budget is 315.4 MtCO2. The complete calculation can be seen in the `Assumption processing `_ section.
``electricity``
===============
-`Documentation `_
+`Electricity Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -135,7 +130,7 @@ Configuration changes made:
``atlite``
==========
-`Documentation `_
+`Atlite Documentation `_
Define and specify the ``atlite.Cutout`` used for calculating renewable potentials and time-series. All options except for ``features`` are directly used as `cutout parameters `__.
@@ -149,7 +144,7 @@ The ``default_cutout`` is derived from SARAH-3 weather data, with missing values
``renewable``
=============
-`Documentation `_
+`Renewable Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -161,7 +156,7 @@ The modification in max hours of pumped hydro storages are based on Form Energy.
``conventional``
================
-`Documentation `_
+`Conventional Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -173,7 +168,7 @@ The minimum energy dispatch for nuclear power plants is set to 50%, instead of t
``lines``
=============
-`Documentation `_
+`Lines Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -183,10 +178,10 @@ The minimum energy dispatch for nuclear power plants is set to 50%, instead of t
The maximum line capacity is set to 50% of its total capacity, rather than 70%,
to better approximate security and reserve capacity for reactive power flows.
-``transmission projects``
+``transmission_projects``
=========================
-`Documentation `_
+`Transmission Projects Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -198,7 +193,7 @@ TYNDP 2020 dataset is not intergrated in this analysis.
``existing_capacities``
=======================
-`Documentation `_
+`Existing Capacities Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -210,7 +205,7 @@ The content is identical to the default file.
``sector``
=======================
-`Documentation `_
+`Sector Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -231,7 +226,7 @@ Configuration changes made:
``load``
==============
-`Documentation `_
+`Load Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -244,7 +239,7 @@ By 2035, electricity demand is projected to increase by 26% compared to 2013. `S
``costs``
=============
-`Documentation `_
+`Costs Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -255,8 +250,8 @@ Configuration changes made:
* The cost data from PyPSA technology cost database is based on the year 2035, instead of 2030.
* Gas price is set at 38.84 EUR/MWh. `Source from the EU Comission (Annex) `_
-* Coal price is set at 24.57 EUR/MWh `Source from Business Analytiq (2024 price) `_
-* Lignite price is set at 22.11 EUR/MWh `Source from Business Analytiq (2024 price) `_
+* Coal price is set at 24.57 EUR/MWh `Source from Business Analytiq (2024 Coal price) `_
+* Lignite price is set at 22.11 EUR/MWh `Source from Business Analytiq (2024 Lignite price) `_
* Uranium price is set at 1.75 EUR/MWh `Source from Business Insider (2024 price) `_
* Iron-air battery price is set at 23,500 EUR/MWh.
* Storage energy cost for CAES is 30,000 EUR/MWh (2022).
@@ -266,7 +261,7 @@ Configuration changes made:
``clustering``
==============
-`Documentation `_
+`Clustering Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -291,12 +286,12 @@ The following countries each have 1 node, contributing to a total of 9 nodes:
* Poland
* Sweden
-The temporal resolution is reduced to 3-hour time steps.
+The temporal resolution are segmented into 4380 hours.
``plotting``
=============
-`Documentation `_
+`Plotting Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
@@ -308,7 +303,7 @@ Not much change here other than the coloring scheme
``solving``
=============
-`Documentation `_
+`Solving Documentation `_
.. literalinclude:: ../config/config.form.yaml
:language: yaml
diff --git a/documentation/12-scenarios.rst b/documentation/12-scenarios.rst
index 7189d511c..076833571 100644
--- a/documentation/12-scenarios.rst
+++ b/documentation/12-scenarios.rst
@@ -2,70 +2,70 @@
Scenarios Configuration
##########################################
-This is the scenario outline used in the analysis "The Role of Energy Storage in Germany".
+This is the scenario outline used in the analysis **The Role of Energy Storage in Germany**.
For each scenario involving medium-duration storages,
there is always a corresponding counterfactual scenario that excludes medium-duration storages.
``Baseline``
=============
+The Baseline scenario is based on the climate year 2013, with the cost of iron-air set at 2,350 EUR/kWh.
+
.. literalinclude:: ../config/scenarios.form.yaml
:language: yaml
:start-at: baseline-mds:
:end-before: mid-capex-mds:
-The Baseline scenario is based on the climate year 2013, with the cost of iron-air set at 2,350 EUR/kWh.
-
``Mid-Capex``
=============
+The Mid-Capex scenario sets the cost of iron-air at 2,000 EUR/kWh,
+slightly lower than the Baseline scenario.
+
.. literalinclude:: ../config/scenarios.form.yaml
:language: yaml
:start-at: mid-capex-mds:
:end-before: low-capex-mds:
-The Mid-Capex scenario sets the cost of iron-air at 2,000 EUR/kWh,
-slightly lower than the Baseline scenario.
-
``Low-Capex``
=============
+The Low-Capex scenario sets the cost of iron-air at 1,525 EUR/kWh,
+which is half the cost of the Baseline scenario.
+
.. literalinclude:: ../config/scenarios.form.yaml
:language: yaml
:start-at: low-capex-mds:
:end-before: cy2010-mds:
-The Low-Capex scenario sets the cost of iron-air at 1,525 EUR/kWh,
-which is half the cost of the Baseline scenario.
-
``Climate Year 2010``
==========================
+This scenario is based on the climate year 2010, which is characterised by the lowest annual wind resources
+and the second highest annual heating demand from 1960 - 2021 (`Gøtske et al., 2024 `_)
+
.. literalinclude:: ../config/scenarios.form.yaml
:language: yaml
:start-at: cy2010-mds:
:end-before: cy2012-mds:
-This scenario is based on the climate year 2010, which is characterised by the lowest annual wind resources
-and the second highest annual heating demand from 1960 - 2021 (`Gøtske et al., 2024 `_)
-
``Climate Year 2012``
==========================
+This scenario is based on the climate year 2012, which is the most stressful climate year in terms of
+2-week Dunkelflaute situation at European aggregated level (`2024 TYNDP Scenarios Methodology Report `_, page 30)
+
.. literalinclude:: ../config/scenarios.form.yaml
:language: yaml
:start-at: cy2012-mds:
:end-before: cy1996-mds:
-This scenario is based on the climate year 2012, which is the most stressful climate year in terms of
-2-week Dunkelflaute situation at European aggregated level (`2024 TYNDP Scenarios Methodology Report `_, page 30)
-
``Climate Year 1996``
==========================
-.. literalinclude:: ../config/scenarios.form.yaml
- :language: yaml
- :start-at: cy1996-mds:
-
This scenario is based on the climate year 1996, which is characterised by low yield of PV and wind,
as well as a pronounced “dark doldrums” for about 10 days in January (`TransnetBW Energy System 2050 Report `_, page 19)
+
+.. literalinclude:: ../config/scenarios.form.yaml
+ :language: yaml
+ :start-at: cy1996-mds:
\ No newline at end of file
diff --git a/documentation/13-kpis.rst b/documentation/13-kpis.rst
index a1f1e5790..f06dfbd29 100644
--- a/documentation/13-kpis.rst
+++ b/documentation/13-kpis.rst
@@ -2,8 +2,6 @@
KPIs Configuration
##########################################
-.. automodule:: plot_KPIs
-
Plot_KPIs creates both predefined and configurable figures. The predefined figures are:
- A map of curtailed energy for Germany and the wider region.
@@ -21,7 +19,7 @@ Key components of each configuration:
4. ``group_carrier``: Specifies the names used for each carrier. Same names are aggregated.
5. ``plot``: Determines the type of plot or visualization to be used (e.g., "detail" for detailed data, "overview" for broader data representation).
6. ``figsize``: Determines the figsize of the plots. If not defined, the default size are chosen.
-6. ``plot_kw``: Additional keyword arguments for the plot (e.g., title, labels, and axis).
+7. ``plot_kw``: Additional keyword arguments for the plot (e.g., title, labels, and axis).
Breakdown of the components:
diff --git a/documentation/22-co2_calculation.ipynb b/documentation/22-co2_calculation.ipynb
index b47033c3b..280b46fa7 100644
--- a/documentation/22-co2_calculation.ipynb
+++ b/documentation/22-co2_calculation.ipynb
@@ -49,7 +49,7 @@
"\n",
"Since the emissions of individual countries are being compared for the years 1990 and 2005, we first need to extract the emissions data for those years.\n",
"\n",
- "### 1. Extract the total emissions data for the years 1990 and 2005."
+ "## 1. Extract the total emissions data for the years 1990 and 2005."
]
},
{
@@ -73,7 +73,7 @@
"id": "2c8dbdc4-8a48-4f7e-b9aa-0f1794b57774",
"metadata": {},
"source": [
- "### 2. Calculate the linearly interpolated targets for 2035.\n",
+ "## 2. Calculate the linearly interpolated targets for 2035.\n",
"\n",
"Below are the emission reduction targets for each of these countries:\n",
"\n",
@@ -267,7 +267,7 @@
"id": "22cd8e5a-9e08-406f-a04c-6f83550cae0f",
"metadata": {},
"source": [
- "### 3. Extract the data and exclude LULUCF from the calculation.\n",
+ "## 3. Extract the data and exclude LULUCF from the calculation.\n",
"\n",
"LULUFC: Land Use, Land Use Change and Forestry\n",
"\n",
@@ -443,7 +443,7 @@
"id": "0222d1c1-14a9-43f5-b7a9-b3a7bbe08bd1",
"metadata": {},
"source": [
- "### 4. Calculate the absolute emissions\n",
+ "## 4. Calculate the absolute emissions\n",
"\n",
"This is done by multiplying the remaining emissions (1 - target emissions) by the CO2 emissions for the respective year."
]
@@ -615,7 +615,7 @@
"source": [
"0.392 is the result when all sectors are included, but since this is not the case, we need to divide the remaining emissions further based on the share of remaining emissions in each sector.\n",
"\n",
- "### 5. Extract the emission target by sector and interpolate to the year 2035\n",
+ "## 5. Extract the emission target by sector and interpolate to the year 2035\n",
"\n",
"Data is from Europe's 2040 climate target [Source](https://eur-lex.europa.eu/resource.html?uri=cellar:6c154426-c5a6-11ee-95d9-01aa75ed71a1.0001.02/DOC_3&format=PDF)"
]
@@ -981,7 +981,7 @@
"id": "1f6611bc-8566-48ba-91fa-631811192ab5",
"metadata": {},
"source": [
- "### 6. Select the included sector in the model \n",
+ "## 6. Select the included sector in the model \n",
"\n",
"(other energy sectors include non-CO2 GHG emissions and are thus excluded)\n",
"\n",
@@ -1026,7 +1026,7 @@
"id": "d02fde95-6af4-471b-9122-b61f5a923fcb",
"metadata": {},
"source": [
- "### 7. Calculate the absolute emission of the included sector emission"
+ "## 7. Calculate the absolute emission of the included sector emission"
]
},
{
diff --git a/documentation/_config.yml b/documentation/_config.yml
index 9144f0552..06358e440 100644
--- a/documentation/_config.yml
+++ b/documentation/_config.yml
@@ -21,8 +21,8 @@ latex:
targetname: book.tex
# Add a bibtex file so that we can create citations
-bibtex_bibfiles:
-- references.bib
+#bibtex_bibfiles:
+#- references.bib
# Information about where the book exists on the web
repository:
diff --git a/documentation/img/iron_air_map.png b/documentation/img/iron_air_map.png
new file mode 100644
index 000000000..9c0fd3249
Binary files /dev/null and b/documentation/img/iron_air_map.png differ