Source code for tessif_examples.basic.mwe

# src/tessif_examples/mwe.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_mwe(): """Create minimally parameterized working example. Returns ------- :class:`tessif.system_model.AbstractEnergySystem` Tessif minimum working example energy system. Example ------- Visualize the energy system for better understanding what the output means:: from tessif_visualize import dcgrph as dcv app = dcv.draw_generic_graph( system_model=create_mwe(), color_group={ 'Gas Station': '#006666', 'Pipeline': '#006666', 'Generator': '#006666', 'Powerline': '#ffcc00', 'Battery': '#ff6600', 'Demand': '#009900', }, ) # Serve interactive drawing to http://127.0.0.1:8050/ app.run_server(debug=False) .. image:: ../../_static/system_model_graphs/mwe.png :align: center :alt: Image showing the mwe energy system graph """ # 2. Create a simulation time frame of 2 one hour time steps as a # :class:`pandas.DatetimeIndex`: timeframe = date_range("7/13/1990", periods=4, freq="H") # 3. Creating the individual energy system components: fuel_supply = components.Source( name="Gas Station", outputs=("fuel",), # Minimum number of arguments required ) power_generator = components.Transformer( name="Generator", inputs=("fuel",), outputs=("electricity",), conversions={("fuel", "electricity"): 0.42}, # Minimum number of arguments required flow_costs={"electricity": 2, "fuel": 0}, ) demand = components.Sink( name="Demand", inputs=("electricity",), # Minimum number of arguments required flow_rates={"electricity": nts.MinMax(min=10, max=10)}, ) storage = components.Storage( name="Battery", input="electricity", output="electricity", capacity=20, initial_soc=10, # Minimum number of arguments required # flow_rates={'electricity': nts.MinMax(min=0, max=11)}, flow_costs={"electricity": 0.1}, ) fuel_supply_line = components.Bus( name="Pipeline", inputs=("Gas Station.fuel",), outputs=("Generator.fuel",), # Minimum number of arguments required ) electricity_line = components.Bus( name="Powerline", inputs=("Generator.electricity", "Battery.electricity"), outputs=("Demand.electricity", "Battery.electricity"), # Minimum number of arguments required ) # 4. Creating the actual energy system: explicit_es = system_model.AbstractEnergySystem( uid="Minimum_Working_Example", busses=(fuel_supply_line, electricity_line), sinks=(demand,), sources=(fuel_supply,), transformers=(power_generator,), storages=(storage,), timeframe=timeframe, ) return explicit_es