Emission constraint¶
Limiting CO2 emissions¶
General description¶
Example that shows how to add an emission constraint in a model.
Code¶
Download source code: emission_constraint.py
Click to display code
import matplotlib.pyplot as plt
import pandas as pd
from oemof import solph
from oemof.solph import constraints
def main(optimize=True):
# create energy system
energysystem = solph.EnergySystem(
timeindex=pd.date_range("1/1/2012", periods=3, freq="h"),
infer_last_interval=True,
)
# create gas bus
bgas = solph.Bus(label="gas")
# create electricity bus
bel = solph.Bus(label="electricity")
# adding the buses to the energy system
energysystem.add(bel, bgas)
# create fixed source object representing biomass plants
energysystem.add(
solph.components.Source(
label="biomass",
outputs={
bel: solph.Flow(
nominal_capacity=100,
variable_costs=10,
fix=[0.1, 0.2, 0.3],
custom_properties={"emission_factor": 0.01},
)
},
)
)
# create source object representing the gas commodity
energysystem.add(
solph.components.Source(
label="gas-source",
outputs={
bgas: solph.Flow(
variable_costs=10,
custom_properties={"emission_factor": 0.2},
)
},
)
)
energysystem.add(
solph.components.Sink(
label="demand",
inputs={
bel: solph.Flow(
nominal_capacity=200,
variable_costs=10,
fix=[0.1, 0.2, 0.4],
)
},
)
)
# create simple converter object representing a gas power plant
energysystem.add(
solph.components.Converter(
label="pp_gas",
inputs={bgas: solph.Flow()},
outputs={bel: solph.Flow(nominal_capacity=200)},
conversion_factors={bel: 0.58},
)
)
if optimize is False:
return energysystem
# initialise the operational model
model = solph.Model(energysystem)
# add the emission constraint
constraints.emission_limit(model, limit=100)
# print out the emission constraint
model.integral_limit_emission_factor_upper_limit.pprint()
model.integral_limit_emission_factor.pprint()
# solve the model
results = model.solve()
# print out the amount of emissions from the emission constraint
print(model.integral_limit_emission_factor())
data = results["flow"]
outflows = data.xs("electricity", axis=1, level=0, drop_level=False)
inflows = data.xs("electricity", axis=1, level=1, drop_level=False)
Installation requirements¶
This example requires oemof.solph (at least v0.6.4), install by:
pip install oemof.solph>=0.6.4