Implement DAC properly with electricity and heat demand

Before it just had a fixed marginal cost. Now it uses DEA assumptions
for heat, electricity and capital costs.

This necessitates locating it somewhere concrete. Heat is taken from
urban central or decentral buses.
This commit is contained in:
Tom Brown 2020-12-09 18:19:57 +01:00
parent 0d96ec1de4
commit 19a7a1a684

View File

@ -208,17 +208,26 @@ def add_co2_tracking(n):
efficiency=1.,
p_nom_extendable=True)
if options['dac']:
#direct air capture consumes electricity to take CO2 from the air to the underground store
#TODO do with cost from Breyer - later use elec and heat and capital cost
n.madd("Link",["DAC"],
bus0="co2 atmosphere",
bus1="co2 stored",
carrier="DAC",
marginal_cost=75.,
efficiency=1.,
p_nom_extendable=True,
lifetime=costs.at['direct air capture','lifetime'])
def add_dac(n):
heat_buses = n.buses.index[n.buses.carrier.isin(["urban central heat",
"services urban decentral heat"])]
locations = n.buses.location[heat_buses]
n.madd("Link",
locations,
suffix=" DAC",
bus0="co2 atmosphere",
bus1="co2 stored",
bus2=locations.values,
bus3=heat_buses,
carrier="DAC",
capital_cost=costs.at['direct air capture','fixed'],
efficiency=1.,
efficiency2=-(costs.at['direct air capture','electricity-input'] + costs.at['direct air capture','compression-electricity-input']),
efficiency3=-(costs.at['direct air capture','heat-input'] - costs.at['direct air capture','compression-heat-output']),
p_nom_extendable=True,
lifetime=costs.at['direct air capture','lifetime'])
def add_co2limit(n, Nyears=1.,limit=0.):
@ -1896,6 +1905,9 @@ if __name__ == "__main__":
if "I" in opts and "H" in opts:
add_waste_heat(n)
if options['dac']:
add_dac(n)
if "decentral" in opts:
decentral(n)