Add biomass boiler to add_carbon_capture function and update outputs.#253
Add biomass boiler to add_carbon_capture function and update outputs.#253jonathan-peel wants to merge 12 commits into
Conversation
|
Hi @euronion! Just a quick ping here to ask if you could approve this - it's currently blocking a project of mine - please let me know if you have any questions. Many thanks in advance :) |
euronion
left a comment
There was a problem hiding this comment.
Thanks for the PR and sorry for not reviewing for some time in this repo.
-
Is this a retrofit option for existing boilers or additional costs for building new units with post-combustion capture?
Or are the costs for retrofit and for new units similar?
I'm asking because we have somecarbon capture retrofittechnologies already, so it would make sense to adopt a similar namingbiomass boiler carbon capture retrofit.
Although I think you tried to be consistent with thebiomass CHP capturenaming, right? -
Can you regenerate the output files? We recently changed to reporting values in 2025 instead of 2020 EUR.
| biomass boiler capture,compression-electricity-input,0.1,MWh/tCO2,"Danish Energy Agency, inputs/technology_data_for_carbon_capture_transport_storage.xlsx",401.b Post comb - Large biomass,2020.0,, | ||
| biomass boiler capture,compression-heat-output,0.16,MWh/tCO2,"Danish Energy Agency, inputs/technology_data_for_carbon_capture_transport_storage.xlsx",401.b Post comb - Large biomass,2020.0,, |
There was a problem hiding this comment.
There was a problem hiding this comment.
Hi @euronion, I'm confused about this.
I went in with the debugger, and I can confirm that the specific investment number is just the total row from the spreadsheet, which does naturally contain all the sub-costs, including CO2 comp & dehydration.
(Pdb) technology_dataframe.loc[(tech_name, "Specific investment"), :]
2020 2025 2030 2035 2040 2045 2050 source unit
biomass boiler capture Specific investment 2.7 2.5 2.3 2.15 2.0 1.8 1.6 Danish Energy Agency, inputs/technology_data_f... t CO2 output/hour)
Also, given the name_list in compile_cost_assumptions.py, line 2718, we save both the rows you highlight separately too:
(Pdb) name_list
[('C2) Eletricity input ', 'electricity-input'), ('C1) Heat input ', 'heat-input'), ('C1) Heat out ', 'heat-output'), ('CO₂ compression and dehydration - Electricity input', 'compression-electricity-input'), ('CO₂ compression and dehydration - Heat out', 'compression-heat-output')]
(Pdb) new_technology_dataframe.loc[("biomass boiler capture", "compression-electricity-input"), years]
2020 0.1
2025 0.1
2030 0.085
2035 0.08
2040 0.075
2045 0.075
2050 0.075
Name: (biomass boiler capture, compression-electricity-input), dtype: object
(Pdb) new_technology_dataframe.loc[("biomass boiler capture", "compression-heat-output"), years]
2020 0.16
2025 0.16
2030 0.14
2035 0.135
2040 0.13
2045 0.13
2050 0.13
Name: (biomass boiler capture, compression-heat-output), dtype: object
These values are confirmed in the outputs (e.g., in costs_2020.csv lines 707 and 708):
biomass boiler capture,compression-electricity-input,0.1,MWh/tCO2,"Danish Energy Agency, inputs/technology_data_for_carbon_capture_transport_storage.xlsx",401.b Post comb - Large biomass,2020.0
biomass boiler capture,compression-heat-output,0.16,MWh/tCO2,"Danish Energy Agency, inputs/technology_data_for_carbon_capture_transport_storage.xlsx",401.b Post comb - Large biomass,2020.0
As far as I can tell, the things you ask for above are already present - am I misunderstanding something?
There was a problem hiding this comment.
What I mean is that right now you have:
- investment cost (full plant incl. compression)
- elec input and heat input (capture plant)
- elec input and heat output (compression)
Based on past experiences, it makes sense to consistently report the numbers as either combined or separate:
- investment cost (plant without compression)
- investment cost (compression only)
- elec input and heat input (capture plant)
- elec input and heat output (compression)
OR
- investment cost (full plant incl. compression)
- elec input, heat input, heat output (capture plant and compression)
We've seen people in the past pick parts that were they shouldn't have picked parts, e.g. I want to prevent someone from assuming the full investment cost incl. compression, but then missing to add the electricity input/heat output for compression to their energy demand.
| biomass boiler capture,electricity-input,0.03,MWh/tCO2,"Danish Energy Agency, inputs/technology_data_for_carbon_capture_transport_storage.xlsx",401.b Post comb - Large biomass,2020.0,, | ||
| biomass boiler capture,heat-input,0.833,MWh/tCO2,"Danish Energy Agency, inputs/technology_data_for_carbon_capture_transport_storage.xlsx",401.b Post comb - Large biomass,2020.0,, | ||
| biomass boiler capture,heat-output,0.833,MWh/tCO2,"Danish Energy Agency, inputs/technology_data_for_carbon_capture_transport_storage.xlsx",401.b Post comb - Large biomass,2020.0,, | ||
| biomass boiler capture,investment,3394803.4231,EUR/(tCO2/h),"Danish Energy Agency, inputs/technology_data_for_carbon_capture_transport_storage.xlsx",401.b Post comb - Large biomass,2020.0,, |
There was a problem hiding this comment.
This happens due to the adjustment to inflation.
In compile_cost_assumptions.py line 4277, we have
costs_tot = adjust_for_inflation(
inflation_rate, costs_tot, techs, snakemake.config["eur_year"], "value"
)
Before this line (from debugger):
costs_tot.loc[("biomass boiler capture", "investment"), :]
value 2700000.0
unit EUR/(tCO2/h)
source Danish Energy Agency, inputs/technology_data_f...
further description 401.b Post comb - Large biomass
currency_year 2020.0
Name: (biomass boiler capture, investment), dtype: object
After this line (from debugger):
costs_tot.loc[("biomass boiler capture", "investment"), :]
value 3394803.42308
unit EUR/(tCO2/h)
source Danish Energy Agency, inputs/technology_data_f...
further description 401.b Post comb - Large biomass
currency_year 2020.0
Name: (biomass boiler capture, investment), dtype: object
The value of snakemake.config["eur_year"] is 2025. This is confusing because I guess when I made the PR, this would have been 2020, therefore no inflation effects should have been observed when you reviewed my PR. I suppose when you merged in @fneum 's commit, it must have somehow retriggered the generation of results without any of us manually doing so.. This explains the above comment where my rerun of the results doesn't produce any changes according to the git diff!
All the same, it makes sense to have a 3394803/2700000=1.26=>26% inflation level over 5 years (4.7% year-on-year).
Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com>
Co-authored-by: Johannes HAMPP <42553970+euronion@users.noreply.github.com>
Thanks @euronion! Look forward to your replies :) |
That makes sense. If these numbers also apply to CCGT, not only to biomass boiler, would you then mind duplicating the entry and adding the same numbers for
I mixed something up, the There are some open questions in my comments discussions above that you would also please need to address before I can review :) |
These numbers don't also apply for CCGT, primarily because the flue gas of a CCGT has a CO2 concentration of 4% and the concentration for the boiler is 17%, and this changes the specific capital cost per ton CO2 converted. This means using the biomass boiler for a CCGT is more than just multiplying by the amount of CO2 released by a CCGT, there also needs to be an "uplift factor" of about 1.9 to model the cost-increasing effect of having a lower concentration of CO2. I do this in my
Ah, makes sense - fantastic pull request btw, this column really threw me at first.
Done!(?) :) Thanks for getting back so quickly @euronion |


Changes proposed in this Pull Request
add_carbon_capturefunctionChecklist
doc.environment.yaml(if applicable).doc/release_notes.rstof the upcoming release is included.