Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add coal and gas CC technologies #1200

Draft
wants to merge 10 commits into
base: main
Choose a base branch
from
6 changes: 6 additions & 0 deletions config.default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,9 @@ sector:
network: false # ALWAYS FALSE for now (NOT USED)
network_data: GGIT # Global dataset -> 'GGIT' , European dataset -> 'IGGIELGN'
network_data_GGIT_status: ["Construction", "Operating", "Idle", "Shelved", "Mothballed", "Proposed"]
gas_NGCC: false # if true, Natural Gas 2-on-1 Combined Cycle (F-Frame) plant is added
CC: false # enable gas carbon capture technologies
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My feeling is that it would be great to keep harmonise using upper and lowercase across the code: we have lower-cased cc for industry and co-generation here, while upper-case is used for steam methane reforming and thermal power plants in this PR. Can we align that somehow?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, my thought was to change everywhere to uppercase CC. As it is strange that in SMR CC it is uppercase, while just cc is lowercase. I can make those changes within this PR if you agree.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Totally agree 🙂

gas_CC_techs: ["NG 2-on-1 Combined Cycle (F-Frame) 95% CCS", "NG 2-on-1 Combined Cycle (F-Frame) 97% CCS"] # Natural Gas 2-on-1 Combined Cycle (F-Frame) plants with 95% and 97% capture rate
hydrogen:
network: true
H2_retrofit_capacity_per_CH4: 0.6
Expand All @@ -524,6 +527,9 @@ sector:
coal:
spatial_coal: true
shift_to_elec: true # If true, residential and services demand of coal is shifted to electricity. If false, the final energy demand of coal is disregarded
coal_IGCC: false # If true, coal integrated gas combined-cycle (IGCC) plants are added
CC: false # enable coal carbon capture technologies
coal_CC_techs: ["Coal-95%-CCS", "Coal-99%-CCS", "Coal-IGCC-90%-CCS"] # coal plant with 95% capture rate, coal plant with 99% capture rate, coal integrated gas combined-cycle plant with 90% capture rate
lignite:
spatial_lignite: false

Expand Down
96 changes: 96 additions & 0 deletions scripts/prepare_sector_network.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,102 @@ def add_generation(
# set the "co2_emissions" of the carrier to 0, as emissions are accounted by link efficiency separately (efficiency to 'co2 atmosphere' bus)
n.carriers.loc[carrier, "co2_emissions"] = 0

# add coal CC technologies
if options["coal"].get("CC", False):
coal_CC_techs = options["coal"].get("coal_CC_techs", list())

for cc_tech in coal_CC_techs:
n.madd(
"Link",
spatial.nodes + " " + cc_tech,
bus0=spatial.coal.nodes,
bus1=spatial.nodes,
bus2="co2 atmosphere",
bus3=spatial.co2.nodes,
marginal_cost=costs.at[cc_tech, "efficiency"]
* costs.at[cc_tech, "VOM"], # NB: VOM is per MWel
# NB: fixed cost is per MWel
capital_cost=costs.at[cc_tech, "efficiency"]
* costs.at[cc_tech, "fixed"],
p_nom_extendable=True,
carrier="coal",
efficiency=costs.at[cc_tech, "efficiency"],
efficiency2=costs.at["coal", "CO2 intensity"]
* (1 - costs.at[cc_tech, "capture_rate"]),
efficiency3=costs.at["coal", "CO2 intensity"]
* costs.at[cc_tech, "capture_rate"],
lifetime=costs.at[cc_tech, "lifetime"],
)

# add coal integrated gas combined-cycle (IGCC) plant if enabled
if options["coal"].get("coal_IGCC", False):
n.madd(
"Link",
spatial.nodes + " " + "coal IGCC",
bus0=spatial.coal.nodes,
bus1=spatial.nodes,
bus2="co2 atmosphere",
marginal_cost=costs.at["Coal-IGCC", "efficiency"]
* costs.at["Coal-IGCC", "VOM"], # NB: VOM is per MWel
# NB: fixed cost is per MWel
capital_cost=costs.at["Coal-IGCC", "efficiency"]
* costs.at["Coal-IGCC", "fixed"],
p_nom_extendable=True,
carrier="coal",
efficiency=costs.at["Coal-IGCC", "efficiency"],
efficiency2=costs.at["coal", "CO2 intensity"],
lifetime=costs.at["Coal-IGCC", "lifetime"],
)

# add natural gas CC technologies
if options["gas"].get("CC", False):
gas_CC_techs = options["gas"].get("gas_CC_techs", list())

for cc_tech in gas_CC_techs:
n.madd(
"Link",
spatial.nodes + " " + cc_tech,
bus0=spatial.gas.nodes,
bus1=spatial.nodes,
bus2="co2 atmosphere",
bus3=spatial.co2.nodes,
marginal_cost=costs.at[cc_tech, "efficiency"]
* costs.at[cc_tech, "VOM"], # NB: VOM is per MWel
# NB: fixed cost is per MWel
capital_cost=costs.at[cc_tech, "efficiency"]
* costs.at[cc_tech, "fixed"],
p_nom_extendable=True,
carrier="gas",
efficiency=costs.at[cc_tech, "efficiency"],
efficiency2=costs.at["gas", "CO2 intensity"]
* (1 - costs.at[cc_tech, "capture_rate"]),
efficiency3=costs.at["gas", "CO2 intensity"]
* costs.at[cc_tech, "capture_rate"],
lifetime=costs.at[cc_tech, "lifetime"],
)

# add Natural Gas 2-on-1 Combined Cycle (F-Frame) plants if enabled
if options["gas"].get("gas_NGCC", False):
n.madd(
"Link",
spatial.nodes + " " + "gas NGCC",
bus0=spatial.gas.nodes,
bus1=spatial.nodes,
bus2="co2 atmosphere",
marginal_cost=costs.at["NG 2-on-1 Combined Cycle (F-Frame)", "efficiency"]
ekatef marked this conversation as resolved.
Show resolved Hide resolved
* costs.at[
"NG 2-on-1 Combined Cycle (F-Frame)", "VOM"
], # NB: VOM is per MWel
# NB: fixed cost is per MWel
capital_cost=costs.at["NG 2-on-1 Combined Cycle (F-Frame)", "efficiency"]
* costs.at["NG 2-on-1 Combined Cycle (F-Frame)", "fixed"],
p_nom_extendable=True,
carrier="gas",
efficiency=costs.at["NG 2-on-1 Combined Cycle (F-Frame)", "efficiency"],
efficiency2=costs.at["gas", "CO2 intensity"],
lifetime=costs.at["NG 2-on-1 Combined Cycle (F-Frame)", "lifetime"],
)


def H2_liquid_fossil_conversions(n, costs):
"""
Expand Down
Loading