Source code for tessif_examples.basic.simple_transformer_grid_es

# src/tessif_examples/simple_transformer_grid_es.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_simple_transformer_grid_es(): """Create a simplified grid energy system for testing. Emulates common grid (congestion) behaviours, during its 6 timesteps: 1. Everything provided by HV-Source 2. Too much provided by HV-Source; H2M grid congests and MV-BS and MV-XS need to compensate 3. Too little provided, so MV-BS needs to provide 4. Everything provided by MV-Source 5. Too much provided by MV-Source, M2H grid congests and HV-BS and HV-XS need to compensate 6. Too little provided, so MV-BS needs to provide Returns ------- tessif.system_model.AbstractEnergySystem Tessif energy system model (scenario comibnation) emulating common grid analysis topics. Example ------- Generic System Visualization: .. image:: ../../_static/system_model_graphs/simple_transformer_grid_es.png :align: center :alt: Image showing the simple transformer grid es generic graph """ # predefine high -> med and med -> high efficiencies for cleaner # code and integer results eta_h2m = 10 / 12 eta_m2h = 10 / 11 # define optimization timespan opt_timespan = date_range("7/13/1990", periods=6, freq="H") # 3. Creating the individual energy system components: hv_source = components.Source( name="HV-Source", outputs=("hv-electricity",), flow_rates={"hv-electricity": nts.MinMax(min=0, max=30)}, # Minimum number of arguments required timeseries={ "hv-electricity": nts.MinMax( min=[10 + 10 / eta_h2m, 30, 10, 0, 0, 0], max=[10 + 10 / eta_h2m, 30, 10, 0, 0, 0], ), }, ) mv_source = components.Source( name="MV-Source", outputs=("mv-electricity",), flow_rates={"mv-electricity": nts.MinMax(min=0, max=30)}, timeseries={ "mv-electricity": nts.MinMax( min=[ 0, 0, 0, 10 + 10 / eta_m2h, 30, 10, ], max=[ 0, 0, 0, 10 + 10 / eta_m2h, 30, 10, ], ), }, ) hv_balance_source = components.Source( name="HV-BS", outputs=("hv-electricity",), flow_rates={"hv-electricity": nts.MinMax(min=0, max=float("+inf"))}, flow_costs={"hv-electricity": 10}, ) mv_balance_source = components.Source( name="MV-BS", outputs=("mv-electricity",), flow_rates={"mv-electricity": nts.MinMax(min=0, max=float("+inf"))}, flow_costs={"mv-electricity": 10}, ) high_to_med = components.Transformer( name="H2M", inputs=("hv-electricity",), outputs=("mv-electricity",), conversions={("hv-electricity", "mv-electricity"): eta_h2m}, flow_rates={ "hv-electricity": nts.MinMax(min=0, max=float("+inf")), "mv-electricity": nts.MinMax(min=0, max=10), }, ) med_to_high = components.Transformer( name="M2H", inputs=("mv-electricity",), outputs=("hv-electricity",), conversions={("mv-electricity", "hv-electricity"): eta_m2h}, flow_rates={ "mv-electricity": nts.MinMax(min=0, max=float("+inf")), "hv-electricity": nts.MinMax(min=0, max=10), }, ) mv_demand = components.Sink( name="MV-Demand", inputs=("mv-electricity",), # Minimum number of arguments required flow_rates={"mv-electricity": nts.MinMax(min=10, max=10)}, timeseries={ "mv-electricity": nts.MinMax( min=[10, 12, 10, 10, 10, 10], max=[10, 12, 10, 10, 10, 10], ), }, ) hv_demand = components.Sink( name="HV-Demand", inputs=("hv-electricity",), # Minimum number of arguments required flow_rates={"hv-electricity": nts.MinMax(min=10, max=10)}, timeseries={ "hv-electricity": nts.MinMax( min=[10, 10, 10, 10, 12, 10], max=[10, 10, 10, 10, 12, 10], ), }, ) hv_excess_sink = components.Sink( name="HV-XS", inputs=("hv-electricity",), flow_rates={"hv-electricity": nts.MinMax(min=0, max=float("+inf"))}, flow_costs={"hv-electricity": 10}, ) mv_excess_sink = components.Sink( name="MV-XS", inputs=("mv-electricity",), flow_rates={"mv-electricity": nts.MinMax(min=0, max=float("+inf"))}, flow_costs={"mv-electricity": 10}, ) hv_bus = components.Bus( name="HV-Bus", inputs=( "HV-Source.hv-electricity", "M2H.hv-electricity", "HV-BS.hv-electricity", ), outputs=( "H2M.hv-electricity", "HV-Demand.hv-electricity", "HV-XS.hv-electricity", ), ) mv_bus = components.Bus( name="MV-Bus", inputs=( "MV-Source.mv-electricity", "H2M.mv-electricity", "MV-BS.mv-electricity", ), outputs=( "M2H.mv-electricity", "MV-Demand.mv-electricity", "MV-XS.mv-electricity", ), ) # 4. Creating the actual energy system: model_scenario_combination = system_model.AbstractEnergySystem( uid="Two Transformer Grid Example", busses=(hv_bus, mv_bus), sinks=(hv_demand, mv_demand, hv_excess_sink, mv_excess_sink), sources=(hv_source, mv_source, hv_balance_source, mv_balance_source), transformers=(med_to_high, high_to_med), timeframe=opt_timespan, ) return model_scenario_combination