Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
pypsa/pypsa-eur#611
Adds industry process heat demands
heat100-200,heat200-500andheat>500by subtracting them from industrybiomassandmethanedemandsif
config["sector"]["industry_t"]["endogen"] == True.Temperature splits are process-aware, based on Fraunhofer ISI research Fleiter et al. (2025), Hydrogen Infrastructure in the Future CO2-Neu....
The PR does not cover steelworks. Its endogenisation is in a separate PR.
Changes to the Model
With industry heat endogenous, all existing industry-related components remain, heat demands are purely subtracted from biomass and methane industry demands, and are added as separate loads with the respective supply opportunities.
The changes to
prepare_sector_networkare largely identical to the previous PR by @lisazeyen, and the heat generation technologies added are the same. The temperature bands are chosen to match potentially interesting alternative renewable heat supply such as solar thermal and geothermal, which could be added to the model if desired.The logic for exogenous heating remains untouched. There was a very sensible proposition by @koen-vg to set the exogenous heat supply mix in the config, as is done with industry production pathways. However, the volume of content this approach would add to the config was, in my estimation, too large.
Therefore, this PR introduces a new rule that builds (planning-horizons–unaware) heat-endogenous ratios and then simply infers endogenous industry demands (including the temperature bands) in
build_industry_energy_demand_per_node, following the same logic as exogenous demand usingratios_intermediate.As a result,
industry_energy_demands_per_nodeconsists essentially two concatenated dataframes. Level 0 in columns== "exogenous"contains the old dataframe and== "endogenous"is the new one.Based on the endogenisation-switch in config,
prepare_sector_networkpulls the respective columns.Towards Validation
Comparing exogenous and endogenous 2030 industry demands shows that the PR removes the vast majority of (industry)
solid biomassand most of (industry)methanedemand. Exogenous heat presumes electrification, likely explaining why the total energy demand is lower in the exogenous case.The PR uses Fleiter et al. (2025) to estimate temperature band distributions for each industry process, and uses alternative process-specific sources to fill data gaps in between. Again, no steelworks in this PR.
These are very distinct between industries; however, they still yield largely similar temperature distributions between countries:
Spatial heterogeneity might only manifest in higher spatial resolutions.
Here, and in the previous iterations, we are aiming to align with Agora's estimate of industry heating demand at a total of around 1850 TWh/a:
Considering we are not including steelworks, we are doing quite well:
ToDos and Food for Thought
process emissions, HVC disaggregation,current electricity, etc. are synergising correctly with current methods.heat100-200andlow-temperature heat, but in some sectors, electrification of higher-temperature demands is feasible.Happy about any feedback, and all the best,
Lukas
@lisazeyen @millingermarkus @Irieo @koen-vg @toniseibold @fneum @bobbyxng @p-glaum
PS: Are the pictures readable, or do they throw an error when clicked on?
Checklist
pixi.toml(usingpixi add <dependency-name>).config/config.default.yaml.doc/configtables/*.csv.these instructions <https://pypsa-eur.readthedocs.io/en/latest/data_sources.html>_ have been followed.doc/release_notes.rstis added.