Source code for tessif_examples.basic.chp

# src/tessif_examples/chp.py
"""Tessif minimum working example energy system model."""
import tessif.frused.namedtuples as nts
from pandas import date_range
from tessif import components, system_model


[docs]def create_chp(): """Create a minimum CHP centered example. Create a minimal working example using :mod:`tessif's model <tessif.model>` optimizing it for costs to demonstrate a chp application. Return ------ :class:`tessif.system_model.AbstractEnergySystem` Tessif energy system. Examples -------- Generic System Visualization .. image:: ../../_static/system_model_graphs/chp.png :align: center :alt: Image showing the chp energy system graph """ # 2. Create a simulation time frame of four one-hour timesteps as a # :class:`pandas.DatetimeIndex`: timeframe = date_range("7/13/1990", periods=4, freq="H") global_constraints = {"emissions": float("+inf")} # 3. Creating the individual energy system components: gas_supply = components.Source( name="Gas Source", outputs=("gas",), # Minimum number of arguments required ) gas_grid = components.Bus( name="Gas Grid", inputs=("Gas Source.gas",), outputs=("CHP.gas",), # Minimum number of arguments required ) # conventional power supply is cheaper, but has emissions allocated to it chp = components.Transformer( name="CHP", inputs=("gas",), outputs=("electricity", "heat"), conversions={ ("gas", "electricity"): 0.3, ("gas", "heat"): 0.2, }, # Minimum number of arguments required # flow_rates={ # 'electricity': (0, 9), # 'heat': (0, 6), # 'gas': (0, float('+inf')) # }, flow_costs={"electricity": 3, "heat": 2, "gas": 0}, flow_emissions={"electricity": 2, "heat": 3, "gas": 0}, ) # back up power, expensive backup_power = components.Source( name="Backup Power", outputs=("electricity",), flow_costs={"electricity": 10}, ) # Power demand needing 10 energy units per time step power_demand = components.Sink( name="Power Demand", inputs=("electricity",), # Minimum number of arguments required flow_rates={"electricity": nts.MinMax(min=10, max=10)}, ) power_line = components.Bus( name="Powerline", inputs=("Backup Power.electricity", "CHP.electricity"), outputs=("Power Demand.electricity",), # Minimum number of arguments required ) # Back up heat source, expensive backup_heat = components.Source( name="Backup Heat", outputs=("heat",), flow_costs={"heat": 10}, ) # Heat demand needing 10 energy units per time step heat_demand = components.Sink( name="Heat Demand", inputs=("heat",), # Minimum number of arguments required flow_rates={"heat": nts.MinMax(min=10, max=10)}, ) heat_grid = components.Bus( name="Heat Grid", inputs=("CHP.heat", "Backup Heat.heat"), outputs=("Heat Demand.heat",), # Minimum number of arguments required ) # 4. Creating the actual energy system: explicit_es = system_model.AbstractEnergySystem( uid="CHP_Example", busses=(gas_grid, power_line, heat_grid), sinks=(power_demand, heat_demand), sources=(gas_supply, backup_power, backup_heat), transformers=(chp,), timeframe=timeframe, global_constraints=global_constraints, ) return explicit_es