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., efficiency=1.,
p_nom_extendable=True) p_nom_extendable=True)
if options['dac']: def add_dac(n):
#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 heat_buses = n.buses.index[n.buses.carrier.isin(["urban central heat",
n.madd("Link",["DAC"], "services urban decentral heat"])]
bus0="co2 atmosphere", locations = n.buses.location[heat_buses]
bus1="co2 stored",
carrier="DAC", n.madd("Link",
marginal_cost=75., locations,
efficiency=1., suffix=" DAC",
p_nom_extendable=True, bus0="co2 atmosphere",
lifetime=costs.at['direct air capture','lifetime']) 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.): def add_co2limit(n, Nyears=1.,limit=0.):
@ -1896,6 +1905,9 @@ if __name__ == "__main__":
if "I" in opts and "H" in opts: if "I" in opts and "H" in opts:
add_waste_heat(n) add_waste_heat(n)
if options['dac']:
add_dac(n)
if "decentral" in opts: if "decentral" in opts:
decentral(n) decentral(n)