Make micro CHP optional, option to reduce non-NH3 basic chemicals

Also add option to limit extension of HVAC and HVDC transmission
lines.

Also fix bug that option to limit solar & wind potential was bypassed.
This commit is contained in:
Tom Brown 2020-10-28 18:21:28 +01:00
parent 989495ce79
commit 9721dccc0f
4 changed files with 20 additions and 4 deletions

View File

@ -87,6 +87,7 @@ sector:
'boilers' : True 'boilers' : True
'oil_boilers': False 'oil_boilers': False
'chp' : True 'chp' : True
'micro_chp' : False
'solar_thermal' : True 'solar_thermal' : True
'solar_cf_correction': 0.788457 # = >>> 1/1.2683 'solar_cf_correction': 0.788457 # = >>> 1/1.2683
'marginal_cost_storage' : 0. #1e-4 'marginal_cost_storage' : 0. #1e-4
@ -174,6 +175,7 @@ industry:
'MWh_elec_per_tNH3_electrolysis' : 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB) 'MWh_elec_per_tNH3_electrolysis' : 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
'NH3_process_emissions' : 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 'NH3_process_emissions' : 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
'petrochemical_process_emissions' : 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 'petrochemical_process_emissions' : 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
'HVC_primary_fraction' : 1.0 #fraction of current non-ammonia basic chemicals produced via primary route
plotting: plotting:
map: map:
@ -310,6 +312,7 @@ plotting:
"electricity" : "k" "electricity" : "k"
"gas for industry" : "#333333" "gas for industry" : "#333333"
"solid biomass for industry" : "#555555" "solid biomass for industry" : "#555555"
"industry electricity" : "#222222"
"industry new electricity" : "#222222" "industry new electricity" : "#222222"
"process emissions to stored" : "#444444" "process emissions to stored" : "#444444"
"process emissions to atmosphere" : "#888888" "process emissions to atmosphere" : "#888888"

View File

@ -87,6 +87,7 @@ sector:
'boilers' : True 'boilers' : True
'oil_boilers': False 'oil_boilers': False
'chp' : True 'chp' : True
'micro_chp' : False
'solar_thermal' : True 'solar_thermal' : True
'solar_cf_correction': 0.788457 # = >>> 1/1.2683 'solar_cf_correction': 0.788457 # = >>> 1/1.2683
'marginal_cost_storage' : 0. #1e-4 'marginal_cost_storage' : 0. #1e-4
@ -174,6 +175,7 @@ industry:
'MWh_elec_per_tNH3_electrolysis' : 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB) 'MWh_elec_per_tNH3_electrolysis' : 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
'NH3_process_emissions' : 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 'NH3_process_emissions' : 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
'petrochemical_process_emissions' : 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 'petrochemical_process_emissions' : 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
'HVC_primary_fraction' : 1.0 #fraction of current non-ammonia basic chemicals produced via primary route
plotting: plotting:
map: map:
@ -310,6 +312,7 @@ plotting:
"electricity" : "k" "electricity" : "k"
"gas for industry" : "#333333" "gas for industry" : "#333333"
"solid biomass for industry" : "#555555" "solid biomass for industry" : "#555555"
"industry electricity" : "#222222"
"industry new electricity" : "#222222" "industry new electricity" : "#222222"
"process emissions to stored" : "#444444" "process emissions to stored" : "#444444"
"process emissions to atmosphere" : "#888888" "process emissions to atmosphere" : "#888888"

View File

@ -22,6 +22,8 @@ fraction_primary_stays_primary = snakemake.config["industry"]["Al_primary_fracti
industrial_production["Aluminium - primary production"] = fraction_primary_stays_primary*industrial_production["Aluminium - primary production"] industrial_production["Aluminium - primary production"] = fraction_primary_stays_primary*industrial_production["Aluminium - primary production"]
industrial_production["Aluminium - secondary production"] = total_aluminium - industrial_production["Aluminium - primary production"] industrial_production["Aluminium - secondary production"] = total_aluminium - industrial_production["Aluminium - primary production"]
industrial_production["Basic chemicals (without ammonia)"] *= snakemake.config["industry"]['HVC_primary_fraction']
industrial_production.to_csv(snakemake.output.industrial_production_per_country_tomorrow, industrial_production.to_csv(snakemake.output.industrial_production_per_country_tomorrow,
float_format='%.2f') float_format='%.2f')

View File

@ -1248,7 +1248,8 @@ def add_heat(network):
lifetime=costs.at['central gas CHP CCS','lifetime']) lifetime=costs.at['central gas CHP CCS','lifetime'])
else: else:
network.madd("Link", if options["micro_chp"]:
network.madd("Link",
nodes[name] + " " + name + " micro gas CHP", nodes[name] + " " + name + " micro gas CHP",
p_nom_extendable=True, p_nom_extendable=True,
bus0="EU gas", bus0="EU gas",
@ -1883,17 +1884,24 @@ if __name__ == "__main__":
else: else:
limit = float(limit.replace("p",".").replace("m","-")) limit = float(limit.replace("p",".").replace("m","-"))
add_co2limit(n, Nyears, limit) add_co2limit(n, Nyears, limit)
# add_emission_prices(n, exclude_co2=True)
# if 'Ep' in opts:
# add_emission_prices(n)
for o in opts:
for tech in ["solar","onwind","offwind"]: for tech in ["solar","onwind","offwind"]:
if tech in o: if tech in o:
limit = o[o.find(tech)+len(tech):] limit = o[o.find(tech)+len(tech):]
limit = float(limit.replace("p",".").replace("m","-")) limit = float(limit.replace("p",".").replace("m","-"))
print("changing potential for",tech,"by factor",limit)
restrict_technology_potential(n,tech,limit) restrict_technology_potential(n,tech,limit)
if o[:10] == 'linemaxext':
maxext = float(o[10:])*1e3
print("limiting new HVAC and HVDC extensions to",maxext,"MW")
n.lines['s_nom_max'] = n.lines['s_nom'] + maxext
hvdc = n.links.index[n.links.carrier == 'DC']
n.links.loc[hvdc,'p_nom_max'] = n.links.loc[hvdc,'p_nom'] + maxext
if snakemake.config["sector"]['electricity_distribution_grid']: if snakemake.config["sector"]['electricity_distribution_grid']:
insert_electricity_distribution_grid(n) insert_electricity_distribution_grid(n)
if snakemake.config["sector"]['gas_distribution_grid']: if snakemake.config["sector"]['gas_distribution_grid']: