Source code for tessif_examples.scientific.grid_focused

# src/tessif_examples/scientific/grid_focused.py
"""Transformer-Grid-focused tessif system model example."""
import os

import numpy as np
import pandas as pd
import tessif.frused.namedtuples as nts
from tessif import components, system_model

from tessif_examples.paths import data_dir


[docs]def create_lossless_commitment_msc(periods=24): """Create the TransCnE system model scenarios combinations. Created by Tim Hanke. Modified by Mathias Ammon. Parameters ---------- periods : int, default=24 Number of time steps of the evaluated timeframe (one time step represents one hour) Note ---- Changes compared to `Hanke Project Thesis <https://tore.tuhh.de/handle/11420/11759>`_: 1. Rename ``"[High/Mid/Low] Voltage Powerline"`` to ``"[High/Mid/Low] Voltage Grid"`` 2. Rename ``"[High/Low] Voltage Transformator"`` to ``"[High/Low] Voltage Transfer Grid"`` Return ------ es: :class:`tessif.system_model.AbstractEnergySystem` Tessif energy system. Examples -------- Generic System Visualization: .. image:: ../../_static/system_model_graphs/losslc_es.png :align: center :alt: Image showing the create_hhes energy system graph. """ # 2. Create a simulation time frame as a :class:`pandas.DatetimeIndex`: timeframe = pd.date_range("10/13/2030", periods=periods, freq="H") # 3. Parse csv files with the demand and renewables load data: d = os.path.join(data_dir, "load_profiles") # solar: pv = pd.read_csv(os.path.join(d, "Renewable_Energy.csv"), index_col=0, sep=";") pv = pv["pv_load"].values.flatten()[0:periods] max_pv = np.max(pv) # wind onshore: w_on = pd.read_csv(os.path.join(d, "Renewable_Energy.csv"), index_col=0, sep=";") w_on = w_on["won_load"].values.flatten()[0:periods] max_w_on = np.max(w_on) # wind offshore: w_off = pd.read_csv(os.path.join(d, "Renewable_Energy.csv"), index_col=0, sep=";") w_off = w_off["woff_load"].values.flatten()[0:periods] max_w_off = np.max(w_off) # solar thermal: s_t = pd.read_csv(os.path.join(d, "Renewable_Energy.csv"), index_col=0, sep=";") s_t = s_t["st_load"].values.flatten()[0:periods] max_s_t = np.max(s_t) # household demand h_d = pd.read_csv(os.path.join(d, "Loads.csv"), index_col=0, sep=";") h_d = h_d["household_demand"].values.flatten()[0:periods] max_h_d = np.max(h_d) # industrial demand i_d = pd.read_csv(os.path.join(d, "Loads.csv"), index_col=0, sep=";") i_d = i_d["industrial_demand"].values.flatten()[0:periods] max_i_d = np.max(i_d) # commercial demand c_d = pd.read_csv(os.path.join(d, "Loads.csv"), index_col=0, sep=";") c_d = c_d["commercial_demand"].values.flatten()[0:periods] max_c_d = np.max(c_d) # district heating demand dh_d = pd.read_csv(os.path.join(d, "Loads.csv"), index_col=0, sep=";") dh_d = dh_d["heat_demand"].values.flatten()[0:periods] max_dh_d = np.max(dh_d) # car charging demand cc_d = pd.read_csv(os.path.join(d, "Car_Charging.csv"), index_col=0, sep=";") cc_d = cc_d["cc_demand"].values.flatten()[0:periods] max_cc_d = np.max(cc_d) # 4. Create the individual energy system components: global_constraints = { "name": "default", "emissions": float("+inf"), } # -------------Low Voltage and heat ------------------ solar_panel = components.Source( name="Solar Panel", outputs=("electricity",), # Minimum number of arguments required sector="Power", carrier="Electricity", node_type="Renewable", flow_rates={"electricity": nts.MinMax(min=0, max=max_pv)}, flow_costs={"electricity": 60.85}, flow_emissions={"electricity": 0}, timeseries={"electricity": nts.MinMax(min=pv, max=pv)}, ) biogas_supply = components.Source( name="Biogas plant", outputs=("fuel",), # Minimum number of arguments required sector="Coupled", carrier="Gas", node_type="source", flow_rates={"fuel": nts.MinMax(min=0, max=25987.87879)}, flow_costs={"fuel": 0}, flow_emissions={"fuel": 0}, ) bhkw_generator = components.Transformer( name="BHKW", inputs=("fuel",), outputs=("electricity", "heat"), conversions={("fuel", "electricity"): 0.33, ("fuel", "heat"): 0.52}, # Minimum number of arguments required sector="Coupled", carrier="electricity", node_type="transformer", flow_rates={ "fuel": nts.MinMax(min=0, max=25987.87879), "electricity": nts.MinMax(min=0, max=8576), "heat": nts.MinMax(min=0, max=13513.69697), }, flow_costs={"fuel": 0, "electricity": 124.4, "heat": 31.1}, flow_emissions={"fuel": 0, "electricity": 0.1573, "heat": 0.0732}, ) household_demand = components.Sink( name="Household Demand", inputs=("electricity",), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="demand", flow_rates={"electricity": nts.MinMax(min=0, max=max_h_d)}, flow_costs={"electricity": 0}, flow_emissions={"electricity": 0}, timeseries={"electricity": nts.MinMax(min=h_d, max=h_d)}, ) commercial_demand = components.Sink( name="Commercial Demand", inputs=("electricity",), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="demand", flow_rates={"electricity": nts.MinMax(min=0, max=max_c_d)}, flow_costs={"electricity": 0}, flow_emissions={"electricity": 0}, timeseries={"electricity": nts.MinMax(min=c_d, max=c_d)}, ) heat_demand = components.Sink( name="District Heating Demand", inputs=("heat",), # Minimum number of arguments required sector="Heat", carrier="hot Water", node_type="demand", flow_rates={"heat": nts.MinMax(min=0, max=max_dh_d)}, flow_costs={"heat": 0}, flow_emissions={"heat": 0}, timeseries={"heat": nts.MinMax(min=dh_d, max=dh_d)}, ) gas_supply_line = components.Bus( name="Gaspipeline", inputs=("Gas Station.fuel",), outputs=("GuD.fuel",), # Minimum number of arguments required sector="Power", carrier="gas", node_type="bus", ) biogas_supply_line = components.Bus( name="Biogas", inputs=("Biogas plant.fuel",), outputs=("BHKW.fuel",), # Minimum number of arguments required sector="Coupled", carrier="gas", node_type="bus", ) low_electricity_line = components.Bus( name="Low Voltage Grid", inputs=( "BHKW.electricity", "Battery.electricity", "Solar Panel.electricity", ), outputs=( "Household Demand.electricity", "Commercial Demand.electricity", "Battery.electricity", ), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="bus", ) heat_line = components.Bus( name="District Heating", inputs=( "BHKW.heat", "Solar Thermal.heat", "Heat Storage.heat", "Power to Heat.heat", "HKW.heat", ), outputs=( "District Heating Demand.heat", "Heat Storage.heat", ), # Minimum number of arguments required sector="Heat", carrier="hot Water", node_type="bus", ) # ----- -------Medium Voltage and Heat ------------------ onshore_wind_power = components.Source( name="Onshore Wind Power", outputs=("electricity",), # Minimum number of arguments required sector="Power", carrier="Electricity", node_type="Renewable", flow_rates={"electricity": nts.MinMax(min=0, max=max_w_on)}, flow_costs={"electricity": 61.1}, flow_emissions={"electricity": 0}, timeseries={"electricity": nts.MinMax(min=w_on, max=w_on)}, ) solar_thermal = components.Source( name="Solar Thermal", outputs=("heat",), # Minimum number of arguments required sector="Heat", carrier="Hot Water", node_type="Renewable", flow_rates={"heat": nts.MinMax(min=0, max=max_s_t)}, flow_costs={"heat": 73}, flow_emissions={"heat": 0}, timeseries={"heat": nts.MinMax(min=s_t, max=s_t)}, ) industrial_demand = components.Sink( name="Industrial Demand", inputs=("electricity",), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="demand", flow_rates={"electricity": nts.MinMax(min=0, max=max_i_d)}, flow_costs={"electricity": 0}, flow_emissions={"electricity": 0}, timeseries={"electricity": nts.MinMax(min=i_d, max=i_d)}, ) car_charging_station_demand = components.Sink( name="Car charging Station", inputs=("electricity",), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="demand", flow_rates={"electricity": nts.MinMax(min=0, max=max_cc_d)}, flow_costs={"electricity": 0}, flow_emissions={"electricity": 0}, timeseries={"electricity": nts.MinMax(min=cc_d, max=cc_d)}, ) power_to_heat = components.Transformer( name="Power to Heat", inputs=("electricity",), outputs=("heat",), conversions={("electricity", "heat"): 1.00}, # Minimum number of arguments required carrier="Hot Water", node_type="transformer", flow_rates={ "electricity": nts.MinMax(min=0, max=50000), "heat": nts.MinMax(min=0, max=50000), }, flow_costs={"electricity": 0, "heat": 0}, flow_emissions={"electricity": 0, "heat": 0}, ) medium_electricity_line = components.Bus( name="Medium Voltage Grid", inputs=("Onshore Wind Power.electricity",), outputs=( "Car charging Station.electricity", "Industrial Demand.electricity", "Power to Heat.electricity", ), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="bus", ) low_medium_transformator = components.Connector( name="Low Voltage Transfer Grid", interfaces=("Medium Voltage Grid", "Low Voltage Grid"), conversions={ ("Medium Voltage Grid", "Low Voltage Grid"): 1, ("Low Voltage Grid", "Medium Voltage Grid"): 1, }, node_type="connector", ) # ----------------- High Voltage ------------------------- offshore_wind_power = components.Source( name="Offshore Wind Power", outputs=("electricity",), # Minimum number of arguments required sector="Power", carrier="Electricity", node_type="Renewable", flow_rates={"electricity": nts.MinMax(min=0, max=max_w_off)}, flow_costs={"electricity": 106.4}, flow_emissions={"electricity": 0}, timeseries={"electricity": nts.MinMax(min=w_off, max=w_off)}, ) coal_supply = components.Source( name="Coal Supply", outputs=("fuel",), # Minimum number of arguments required sector="Coupled", carrier="Coal", node_type="source", flow_rates={"fuel": nts.MinMax(min=0, max=102123.3)}, flow_costs={"fuel": 0}, flow_emissions={"fuel": 0}, ) gas_supply = components.Source( name="Gas Station", outputs=("fuel",), # Minimum number of arguments required sector="Power", carrier="Gas", node_type="source", flow_rates={"fuel": nts.MinMax(min=0, max=float("+inf"))}, flow_costs={"fuel": 0}, flow_emissions={"fuel": 0}, ) hkw_generator = components.Transformer( name="HKW", inputs=("fuel",), outputs=("electricity", "heat"), conversions={("fuel", "electricity"): 0.24, ("fuel", "heat"): 0.6}, # Minimum number of arguments required sector="Coupled", carrier="electricity", node_type="transformer", flow_rates={ "fuel": nts.MinMax(min=0, max=102123.3), "electricity": nts.MinMax(min=0, max=24509.6), "heat": nts.MinMax(min=0, max=61273.96), }, flow_costs={"fuel": 0, "electricity": 80.65, "heat": 20.1625}, flow_emissions={"fuel": 0, "electricity": 0.5136, "heat": 0.293}, ) hkw_generator_2 = components.Transformer( name="HKW2", inputs=("fuel",), outputs=("electricity",), conversions={("fuel", "electricity"): 0.43}, # Minimum number of arguments required sector="Power", carrier="electricity", node_type="connector", flow_rates={ "fuel": nts.MinMax(min=0, max=102123.3), "electricity": nts.MinMax(min=0, max=43913), }, flow_costs={"fuel": 0, "electricity": 80.65}, flow_emissions={"fuel": 0, "electricity": 0.5136}, ) gud_generator = components.Transformer( name="GuD", inputs=("fuel",), outputs=("electricity",), conversions={("fuel", "electricity"): 0.59}, # Minimum number of arguments required sector="Power", carrier="electricity", node_type="transformer", flow_rates={ "fuel": nts.MinMax(min=0, max=45325.42373), "electricity": nts.MinMax(min=0, max=26742), }, flow_costs={"fuel": 0, "electricity": 88.7}, flow_emissions={"fuel": 0, "electricity": 0.3366}, ) coal_supply_line = components.Bus( name="Coal Supply Line", inputs=("Coal Supply.fuel",), outputs=("HKW.fuel", "HKW2.fuel"), # Minimum number of arguments required sector="Coupled", carrier="Coal", node_type="bus", ) high_electricity_line = components.Bus( name="High Voltage Grid", inputs=( "Offshore Wind Power.electricity", "GuD.electricity", "HKW.electricity", "HKW2.electricity", ), outputs=("Power Sink.electricity",), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="bus", ) high_medium_transformator = components.Connector( name="High Voltage Transfer Grid", interfaces=( "Medium Voltage Grid", "High Voltage Grid", ), conversions={ ("Medium Voltage Grid", "High Voltage Grid"): 1, ("High Voltage Grid", "Medium Voltage Grid"): 1, }, node_type="connector", ) # 4. Create the actual energy system: es = system_model.AbstractEnergySystem( uid="Grid Focused Lossless Commitment Problem", busses=( gas_supply_line, low_electricity_line, heat_line, medium_electricity_line, high_electricity_line, coal_supply_line, biogas_supply_line, ), sinks=( household_demand, commercial_demand, heat_demand, industrial_demand, car_charging_station_demand, ), sources=( solar_panel, gas_supply, onshore_wind_power, offshore_wind_power, coal_supply, solar_thermal, biogas_supply, ), transformers=( bhkw_generator, power_to_heat, gud_generator, hkw_generator, hkw_generator_2, ), connectors=( low_medium_transformator, high_medium_transformator, ), timeframe=timeframe, global_constraints=global_constraints, ) return es
[docs]def create_transformer_grid_focused_msc( periods=24, transformer_efficiency=0.93, gridcapacity=60000, expansion=False ): """Create the TransCnE system model scenarios combinations. Created by Tim Hanke. Modified by Mathias Ammon. Parameters ---------- periods : int, default=24 Number of time steps of the evaluated timeframe (one time step is one hour) transformer_efficiency : int, default=0.99 Efficiency of the grid transformers (must be a value between 0 and 1) gridcapacity : int, default=60000 Transmission capacity of the transformers of the gridstructure (at 0 the parts of the grid are not connected) expansion: bool, default=False If ``True`` maximum grid capacity is subject to expansion. Note ---- Changes compared to `Hanke Project Thesis <https://tore.tuhh.de/handle/11420/11759>`_: 1. Rename ``"Power Source [Voltage]"`` to ``"Deficit Source [Voltage]"`` 2. Rename ``"Power Sinks [Voltage]"`` to ``"Excess Sinks [Voltage]"`` 3. Rename ``"[High/Mid/Low] Voltage Powerline"`` to ``"[High/Mid/Low] Voltage Grid"`` 4. Rename ``"[Voltage to Voltage] Transformator"`` to ``"[Voltage to Voltage] Transfer"`` 5. Change gridcapacity parameter to reference the maximum outflow. 6. Expansion capabilities are added to allow maximum grid capacity to be expanded 7. Default transformer_efficiency is decreased to ``0.93`` to discourage energy circulation between to grid busses to dissipate surplus amounts. 8. Outflow costs of 10 cost units per power unit are added to all ``Transfer`` components, to further discourage energy circulation between to grid busses to dissipate surplus amounts and to encourage local production and consumption. Return ------ es: :class:`tessif.system_model.AbstractEnergySystem` Tessif energy system. Examples -------- Generic System Visualization: .. image:: ../../_static/system_model_graphs/transformer_grid_focused.png :align: center :alt: Image showing the TransCnE GSV. """ # 2. Create a simulation time frame as a :class:`pandas.DatetimeIndex`: timeframe = pd.date_range("10/13/2030", periods=periods, freq="H") # 3. Parse csv files with the demand and renewables load data: d = os.path.join(data_dir, "load_profiles") # solar: pv = pd.read_csv(os.path.join(d, "Renewable_Energy.csv"), index_col=0, sep=";") pv = pv["pv_load"].values.flatten()[0:periods] max_pv = np.max(pv) # wind onshore: w_on = pd.read_csv(os.path.join(d, "Renewable_Energy.csv"), index_col=0, sep=";") w_on = w_on["won_load"].values.flatten()[0:periods] max_w_on = np.max(w_on) # wind offshore: w_off = pd.read_csv(os.path.join(d, "Renewable_Energy.csv"), index_col=0, sep=";") w_off = w_off["woff_load"].values.flatten()[0:periods] max_w_off = np.max(w_off) # solar thermal: s_t = pd.read_csv(os.path.join(d, "Renewable_Energy.csv"), index_col=0, sep=";") s_t = s_t["st_load"].values.flatten()[0:periods] max_s_t = np.max(s_t) # household demand h_d = pd.read_csv(os.path.join(d, "Loads.csv"), index_col=0, sep=";") h_d = h_d["household_demand"].values.flatten()[0:periods] max_h_d = np.max(h_d) # industrial demand i_d = pd.read_csv(os.path.join(d, "Loads.csv"), index_col=0, sep=";") i_d = i_d["industrial_demand"].values.flatten()[0:periods] max_i_d = np.max(i_d) # commercial demand c_d = pd.read_csv(os.path.join(d, "Loads.csv"), index_col=0, sep=";") c_d = c_d["commercial_demand"].values.flatten()[0:periods] max_c_d = np.max(c_d) # district heating demand dh_d = pd.read_csv(os.path.join(d, "Loads.csv"), index_col=0, sep=";") dh_d = dh_d["heat_demand"].values.flatten()[0:periods] max_dh_d = np.max(dh_d) # car charging demand cc_d = pd.read_csv(os.path.join(d, "Car_Charging.csv"), index_col=0, sep=";") cc_d = cc_d["cc_demand"].values.flatten()[0:periods] max_cc_d = np.max(cc_d) # 4. Create the individual energy system components: global_constraints = { "name": "default", "emissions": float("+inf"), } # -------------Low Voltage and heat ------------------ solar_panel = components.Source( name="Solar Panel", outputs=("low-voltage-electricity",), # Minimum number of arguments required latitude=42, longitude=42, region="Here", sector="Power", carrier="low-voltage-electricity", node_type="Renewable", flow_rates={"low-voltage-electricity": nts.MinMax(min=0, max=max_pv)}, flow_costs={"low-voltage-electricity": 60.85}, flow_emissions={"low-voltage-electricity": 0}, timeseries={"low-voltage-electricity": nts.MinMax(min=pv, max=pv)}, ) gas_supply = components.Source( name="Gas Station", outputs=("fuel",), # Minimum number of arguments required latitude=42, longitude=42, region="Here", sector="Power", carrier="Gas", node_type="source", flow_rates={"fuel": nts.MinMax(min=0, max=float("+inf"))}, flow_costs={"fuel": 0}, flow_emissions={"fuel": 0}, timeseries=None, ) biogas_supply = components.Source( name="Biogas plant", outputs=("fuel",), # Minimum number of arguments required latitude=42, longitude=42, region="Here", sector="Coupled", carrier="Gas", node_type="source", flow_rates={"fuel": nts.MinMax(min=0, max=25987.87879)}, flow_costs={"fuel": 0}, flow_emissions={"fuel": 0}, timeseries=None, ) bhkw_generator = components.Transformer( name="BHKW", inputs=("fuel",), outputs=("low-voltage-electricity", "heat"), conversions={ ("fuel", "low-voltage-electricity"): 0.33, ("fuel", "heat"): 0.52, }, # Minimum number of arguments required', sector="Coupled", carrier="low-voltage-electricity", node_type="transformer", flow_rates={ "fuel": nts.MinMax(min=0, max=25987.87879), "low-voltage-electricity": nts.MinMax(min=0, max=8576), "heat": nts.MinMax(min=0, max=13513.69697), }, flow_costs={"fuel": 0, "low-voltage-electricity": 124.4, "heat": 31.1}, flow_emissions={ "fuel": 0, "low-voltage-electricity": 0.1573, "heat": 0.0732, }, ) household_demand = components.Sink( name="Household Demand", inputs=("low-voltage-electricity",), # Minimum number of arguments required sector="Power", carrier="low-voltage-electricity", node_type="demand", flow_rates={"low-voltage-electricity": nts.MinMax(min=0, max=max_h_d)}, flow_costs={"low-voltage-electricity": 0}, flow_emissions={"low-voltage-electricity": 0}, timeseries={"low-voltage-electricity": nts.MinMax(min=h_d, max=h_d)}, ) commercial_demand = components.Sink( name="Commercial Demand", inputs=("low-voltage-electricity",), # Minimum number of arguments required sector="Power", carrier="low-voltage-electricity", node_type="demand", flow_rates={"low-voltage-electricity": nts.MinMax(min=0, max=max_c_d)}, flow_costs={"low-voltage-electricity": 0}, flow_emissions={"low-voltage-electricity": 0}, timeseries={"low-voltage-electricity": nts.MinMax(min=c_d, max=c_d)}, ) heat_demand = components.Sink( name="District Heating Demand", inputs=("heat",), # Minimum number of arguments required latitude=42, longitude=42, region="Here", sector="Heat", carrier="hot Water", node_type="demand", flow_rates={"heat": nts.MinMax(min=0, max=max_dh_d)}, flow_costs={"heat": 0}, flow_emissions={"heat": 0}, timeseries={"heat": nts.MinMax(min=dh_d, max=dh_d)}, ) gas_supply_line = components.Bus( name="Gaspipeline", inputs=("Gas Station.fuel",), outputs=("GuD.fuel",), # Minimum number of arguments required sector="Power", carrier="gas", node_type="bus", ) biogas_supply_line = components.Bus( name="Biogas", inputs=("Biogas plant.fuel",), outputs=("BHKW.fuel",), # Minimum number of arguments required sector="Coupled", carrier="gas", node_type="bus", ) low_electricity_line = components.Bus( name="Low Voltage Grid", inputs=( "BHKW.low-voltage-electricity", "Deficit Source LV.low-voltage-electricity", "Solar Panel.low-voltage-electricity", "Medium Low Transfer.low-voltage-electricity", ), outputs=( "Household Demand.low-voltage-electricity", "Commercial Demand.low-voltage-electricity", "Low Medium Transfer.low-voltage-electricity", "Excess Sink LV.low-voltage-electricity", ), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="bus", ) heat_line = components.Bus( name="District Heating", inputs=( "BHKW.heat", "Solar Thermal.heat", "Power to Heat.heat", "HKW.heat", ), outputs=("District Heating Demand.heat",), # Minimum number of arguments required sector="Heat", carrier="hot Water", node_type="bus", ) # ----- -------Medium Voltage and Heat ------------------ onshore_wind_power = components.Source( name="Onshore Wind Power", outputs=("medium-voltage-electricity",), # Minimum number of arguments required sector="power", carrier="medium-voltage-electricity", node_type="Renewable", flow_rates={"medium-voltage-electricity": nts.MinMax(min=0, max=max_w_on)}, flow_costs={"medium-voltage-electricity": 61.1}, flow_emissions={"medium-voltage-electricity": 0}, timeseries={"medium-voltage-electricity": nts.MinMax(min=w_on, max=w_on)}, ) solar_thermal = components.Source( name="Solar Thermal", outputs=("heat",), # Minimum number of arguments required sector="Heat", carrier="Hot Water", node_type="Renewable", flow_rates={"heat": nts.MinMax(min=0, max=max_s_t)}, flow_costs={"heat": 73}, flow_emissions={"heat": 0}, timeseries={"heat": nts.MinMax(min=s_t, max=s_t)}, ) industrial_demand = components.Sink( name="Industrial Demand", inputs=("medium-voltage-electricity",), # Minimum number of arguments required sector="Power", carrier="medium-voltage-electricity", node_type="demand", flow_rates={"medium-voltage-electricity": nts.MinMax(min=0, max=max_i_d)}, flow_costs={"medium-voltage-electricity": 0}, flow_emissions={"medium-voltage-electricity": 0}, timeseries={"medium-voltage-electricity": nts.MinMax(min=i_d, max=i_d)}, ) car_charging_station_demand = components.Sink( name="Car charging Station", inputs=("medium-voltage-electricity",), # Minimum number of arguments required sector="Power", carrier="medium-voltage-electricity", node_type="demand", flow_rates={"medium-voltage-electricity": nts.MinMax(min=0, max=max_cc_d)}, flow_costs={"medium-voltage-electricity": 0}, flow_emissions={"medium-voltage-electricity": 0}, timeseries={"medium-voltage-electricity": nts.MinMax(min=cc_d, max=cc_d)}, ) power_to_heat = components.Transformer( name="Power to Heat", inputs=("medium-voltage-electricity",), outputs=("heat",), conversions={("medium-voltage-electricity", "heat"): 1.00}, # Minimum number of arguments required carrier="Hot Water", node_type="transformer", flow_rates={ "medium-voltage-electricity": nts.MinMax(min=0, max=float("+inf")), "heat": nts.MinMax(min=0, max=float("+inf")), }, flow_costs={"medium-voltage-electricity": 0, "heat": 0}, flow_emissions={"medium-voltage-electricity": 0, "heat": 0}, ) medium_electricity_line = components.Bus( name="Medium Voltage Grid", inputs=( "Onshore Wind Power.medium-voltage-electricity", "High Medium Transfer.medium-voltage-electricity", "Low Medium Transfer.medium-voltage-electricity", "Deficit Source MV.medium-voltage-electricity", ), outputs=( "Car charging Station.medium-voltage-electricity", "Industrial Demand.medium-voltage-electricity", "Power to Heat.medium-voltage-electricity", "Medium High Transfer.medium-voltage-electricity", "Medium Low Transfer.medium-voltage-electricity", "Excess Sink MV.medium-voltage-electricity", ), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="bus", ) # ----------------- High Voltage ------------------------- offshore_wind_power = components.Source( name="Offshore Wind Power", outputs=("high-voltage-electricity",), # Minimum number of arguments required sector="Power", carrier="high-voltage-electricity", node_type="Renewable", flow_rates={"high-voltage-electricity": nts.MinMax(min=0, max=max_w_off)}, flow_costs={"high-voltage-electricity": 106.4}, flow_emissions={"high-voltage-electricity": 0}, timeseries={"high-voltage-electricity": nts.MinMax(min=w_off, max=w_off)}, ) coal_supply = components.Source( name="Coal Supply", outputs=("fuel",), # Minimum number of arguments required sector="Coupled", carrier="Coal", node_type="source", flow_rates={"fuel": nts.MinMax(min=0, max=102123.3)}, flow_costs={"fuel": 0}, flow_emissions={"fuel": 0}, ) hkw_generator = components.Transformer( name="HKW", inputs=("fuel",), outputs=("high-voltage-electricity", "heat"), conversions={ ("fuel", "high-voltage-electricity"): 0.24, ("fuel", "heat"): 0.6, }, # Minimum number of arguments required sector="Coupled", carrier="high-voltage-electricity", node_type="transformer", flow_rates={ "fuel": nts.MinMax(min=0, max=102123.3), "high-voltage-electricity": nts.MinMax(min=0, max=24509.6), "heat": nts.MinMax(min=0, max=61273.96), }, flow_costs={ "fuel": 0, "high-voltage-electricity": 80.65, "heat": 20.1625, }, flow_emissions={ "fuel": 0, "high-voltage-electricity": 0.5136, "heat": 0.293, }, ) hkw_generator_2 = components.Transformer( name="HKW2", inputs=("fuel",), outputs=("high-voltage-electricity",), conversions={("fuel", "high-voltage-electricity"): 0.43}, # Minimum number of arguments required sector="Coupled", carrier="electricity", node_type="connector", flow_rates={ "fuel": nts.MinMax(min=0, max=102123.3), "high-voltage-electricity": nts.MinMax(min=0, max=43913), }, flow_costs={"fuel": 0, "high-voltage-electricity": 80.65}, flow_emissions={"fuel": 0, "high-voltage-electricity": 0.5136}, ) gud_generator = components.Transformer( name="GuD", inputs=("fuel",), outputs=("high-voltage-electricity",), conversions={("fuel", "high-voltage-electricity"): 0.59}, # Minimum number of arguments required sector="Power", carrier="electricity", node_type="generator", flow_rates={ "fuel": nts.MinMax(min=0, max=45325.42373), "high-voltage-electricity": nts.MinMax(min=0, max=26742), }, flow_costs={"fuel": 0, "high-voltage-electricity": 88.7}, flow_emissions={"fuel": 0, "high-voltage-electricity": 0.3366}, ) coal_supply_line = components.Bus( name="Coal Supply Line", inputs=("Coal Supply.fuel",), outputs=("HKW.fuel", "HKW2.fuel"), # Minimum number of arguments required sector="Coupled", carrier="Coal", node_type="bus", ) high_electricity_line = components.Bus( name="High Voltage Grid", inputs=( "Offshore Wind Power.high-voltage-electricity", "HKW2.high-voltage-electricity", "GuD.high-voltage-electricity", "HKW.high-voltage-electricity", "Medium High Transfer.high-voltage-electricity", "Deficit Source HV.high-voltage-electricity", ), outputs=( "Pumped Storage.high-voltage-electricity", "High Medium Transfer.high-voltage-electricity", "Excess Sink HV.high-voltage-electricity", ), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="bus", ) # Gridstructure and Transformer low_medium_transformator = components.Transformer( name="Low Medium Transfer", inputs=("low-voltage-electricity",), outputs=("medium-voltage-electricity",), conversions={ ( "low-voltage-electricity", "medium-voltage-electricity", ): transformer_efficiency }, # Minimum number of arguments required latitude=42, longitude=42, region="Here", sector="Power", carrier="electricity", node_type="connector", flow_rates={ "low-voltage-electricity": nts.MinMax( min=0, max=float("+inf"), ), "medium-voltage-electricity": nts.MinMax( min=0, max=gridcapacity, ), }, flow_costs={ "low-voltage-electricity": 0, "medium-voltage-electricity": 10, }, flow_emissions={"low-voltage-electricity": 0, "medium-voltage-electricity": 0}, expandable={ "low-voltage-electricity": False, "medium-voltage-electricity": expansion, }, expansion_costs={ "low-voltage-electricity": 0, "medium-voltage-electricity": 10, }, expansion_limits={ "low-voltage-electricity": nts.MinMax( min=gridcapacity, max=float("+inf"), ), "medium-voltage-electricity": nts.MinMax( min=gridcapacity, max=float("+inf"), ), }, ) medium_low_transformator = components.Transformer( name="Medium Low Transfer", inputs=("medium-voltage-electricity",), outputs=("low-voltage-electricity",), conversions={ ( "medium-voltage-electricity", "low-voltage-electricity", ): transformer_efficiency }, # Minimum number of arguments required latitude=42, longitude=42, region="Here", sector="Power", carrier="electricity", node_type="connector", flow_rates={ "medium-voltage-electricity": nts.MinMax( min=0, max=float("+inf"), ), "low-voltage-electricity": nts.MinMax( min=0, max=gridcapacity, ), }, flow_costs={ "medium-voltage-electricity": 0, "low-voltage-electricity": 10, }, flow_emissions={ "low-voltage-electricity": 0, "medium-voltage-electricity": 0, }, expandable={ "medium-voltage-electricity": False, "low-voltage-electricity": expansion, }, expansion_costs={ "medium-voltage-electricity": 0, "low-voltage-electricity": 10, }, expansion_limits={ "medium-voltage-electricity": nts.MinMax( min=gridcapacity, max=float("+inf"), ), "low-voltage-electricity": nts.MinMax( min=gridcapacity, max=float("+inf"), ), }, ) medium_high_transformator = components.Transformer( name="Medium High Transfer", inputs=("medium-voltage-electricity",), outputs=("high-voltage-electricity",), conversions={ ( "medium-voltage-electricity", "high-voltage-electricity", ): transformer_efficiency }, # Minimum number of arguments required sector="Power", carrier="electricity", node_type="connector", flow_rates={ "medium-voltage-electricity": nts.MinMax( min=0, max=float("+inf"), ), "high-voltage-electricity": nts.MinMax( min=0, max=gridcapacity, ), }, flow_costs={ "medium-voltage-electricity": 0, "high-voltage-electricity": 10, }, flow_emissions={ "medium-voltage-electricity": 0, "high-voltage-electricity": 0, }, expandable={ "medium-voltage-electricity": False, "high-voltage-electricity": expansion, }, expansion_costs={ "medium-voltage-electricity": 0, "high-voltage-electricity": 10, }, expansion_limits={ "medium-voltage-electricity": nts.MinMax( min=gridcapacity, max=float("+inf"), ), "high-voltage-electricity": nts.MinMax( min=gridcapacity, max=float("+inf"), ), }, ) high_medium_transformator = components.Transformer( name="High Medium Transfer", inputs=("high-voltage-electricity",), outputs=("medium-voltage-electricity",), conversions={ ( "high-voltage-electricity", "medium-voltage-electricity", ): transformer_efficiency }, # Minimum number of arguments required sector="Power", carrier="electricity", node_type="connector", flow_rates={ "high-voltage-electricity": nts.MinMax( min=0, max=float("+inf"), ), "medium-voltage-electricity": nts.MinMax( min=0, max=gridcapacity, ), }, flow_costs={ "high-voltage-electricity": 0, "medium-voltage-electricity": 10, }, flow_emissions={ "high-voltage-electricity": 0, "medium-voltage-electricity": 0, }, expandable={ "high-voltage-electricity": False, "medium-voltage-electricity": expansion, }, expansion_costs={ "high-voltage-electricity": 0, "medium-voltage-electricity": 10, }, expansion_limits={ "high-voltage-electricity": nts.MinMax( min=gridcapacity, max=float("+inf"), ), "medium-voltage-electricity": nts.MinMax( min=gridcapacity, max=float("+inf"), ), }, ) # ---------- Deficit Sources --------------- power_source_lv = components.Source( name="Deficit Source LV", outputs=("low-voltage-electricity",), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="source", flow_rates={"low-voltage-electricity": nts.MinMax(min=0, max=float("+inf"))}, flow_costs={"low-voltage-electricity": 300}, flow_emissions={"low-voltage-electricity": 0.6}, ) power_source_mv = components.Source( name="Deficit Source MV", outputs=("medium-voltage-electricity",), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="source", flow_rates={ "medium-voltage-electricity": nts.MinMax(min=0, max=float("+inf")), }, flow_costs={"medium-voltage-electricity": 300}, flow_emissions={"medium-voltage-electricity": 0.6}, ) power_source_hv = components.Source( name="Deficit Source HV", outputs=("high-voltage-electricity",), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="source", flow_rates={"high-voltage-electricity": nts.MinMax(min=0, max=float("+inf"))}, flow_costs={"high-voltage-electricity": 300}, flow_emissions={"high-voltage-electricity": 0.6}, ) power_sink_lv = components.Sink( name="Excess Sink LV", inputs=("low-voltage-electricity",), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="sink", flow_rates={"low-voltage-electricity": nts.MinMax(min=0, max=float("+inf"))}, flow_costs={"low-voltage-electricity": 300}, flow_emissions={"low-voltage-electricity": 0.6}, ) # ------------------- Excess Sinks -------------------------- power_sink_mv = components.Sink( name="Excess Sink MV", inputs=("medium-voltage-electricity",), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="sink", flow_rates={ "medium-voltage-electricity": nts.MinMax(min=0, max=float("+inf")), }, flow_costs={"medium-voltage-electricity": 300}, flow_emissions={"medium-voltage-electricity": 0.6}, ) power_sink_hv = components.Sink( name="Excess Sink HV", inputs=("high-voltage-electricity",), # Minimum number of arguments required sector="Power", carrier="electricity", node_type="sink", flow_rates={"high-voltage-electricity": nts.MinMax(min=0, max=float("+inf"))}, flow_costs={"high-voltage-electricity": 300}, flow_emissions={"high-voltage-electricity": 0.6}, ) # 4. Create the actual energy system: if expansion: # uid = "TransE" uid = "Transformer Grid Focused MSC (Expansion Problem)" else: # uid = "TransC" uid = "Transformer Grid Focused MSC (Commitment Problem)" es = system_model.AbstractEnergySystem( uid=uid, busses=( gas_supply_line, low_electricity_line, heat_line, medium_electricity_line, high_electricity_line, coal_supply_line, biogas_supply_line, ), sinks=( household_demand, commercial_demand, heat_demand, industrial_demand, car_charging_station_demand, power_sink_lv, power_sink_mv, power_sink_hv, ), sources=( solar_panel, offshore_wind_power, onshore_wind_power, gas_supply, coal_supply, solar_thermal, biogas_supply, power_source_lv, power_source_mv, power_source_hv, ), transformers=( bhkw_generator, power_to_heat, gud_generator, hkw_generator, high_medium_transformator, low_medium_transformator, medium_low_transformator, medium_high_transformator, hkw_generator_2, ), timeframe=timeframe, global_constraints=global_constraints, ) return es