Source code for utilitylca.models.steam_net.steam_network_model

from tespy.components import (
    Turbine, Source, Sink, Pump, 
    Pipe, CycleCloser, SimpleHeatExchanger, Valve, Merge, 
    Splitter, 
    DropletSeparator,
    PowerSink, PowerSource, Generator,  PowerBus
)

from tespy.connections import Connection, Ref, PowerConnection
import logging

logger = logging.getLogger(__name__)

[docs] def create_steam_net(steam_lca): logging.basicConfig(filename='logs.log', filemode="w", level=logging.INFO) steam_lca.cond_inj = False steam_lca.trap=False steam_lca.converged =False steam_lca.model.set_attr(iterinfo=False) steam_lca.model.units.set_defaults(temperature='degC', pressure='bar', enthalpy='kJ / kg') # create components boiler = SimpleHeatExchanger('steam boiler' , dissipative=False) bpt = Turbine('back pressure turbine') pipe_warm = Pipe('steam pipe', dissipative=True) valve = Valve('controlvalve') hex_heat_sink = SimpleHeatExchanger('hex heat sink', dissipative=False) pipe_cold= Pipe('condensate pipe',dissipative=True) feed_pump= Pump('feedpump') condensate_pump= Pump('condensate pump') cycl=CycleCloser('CycleCloser') steam_losses = Sink('steam losses') steam_leak= Splitter("steam leak") makeup_leak =Source('leak makeup') makeup=Source("Make-up water") blowdown= Sink("blowdown wastewater") cond_waste= Sink("pipe condensate wastewater") merge = Merge("Makeup water feed", num_in=3) split= Splitter("remove wastewater") diversion= Splitter("divert steam from network") conflation= Merge("conflation condensate to network") network_heat_sink = SimpleHeatExchanger('network condensation', dissipative=False) valve_cond_nw = Valve('relax_cond_network') valve_cond = Valve('relax_cond') #create connections: c0_7 = Connection(cycl, 'out1', boiler, 'in1', label='c0_7') #c05 c1_6 = Connection(boiler, 'out1', bpt, 'in1', label='c1_6') #c04 c1_5 = Connection(bpt, 'out1', pipe_warm, 'in1', label='c1_5') #c03 c1_4= Connection(pipe_warm, 'out1', steam_leak, 'in1', label='c1_4') #c022 c1_3 = Connection(steam_leak, 'out1', diversion, 'in1',label='c1_3') #c023 cnw1= Connection(diversion, 'out1', network_heat_sink, 'in1',label='cnw1') cnw2= Connection(network_heat_sink, 'out1', valve_cond_nw, 'in1',label='cnw2') cnw3= Connection(valve_cond_nw, 'out1', conflation, 'in1',label='cnw3') c_leak = Connection(steam_leak, 'out2', steam_losses, 'in1', label='c_leak') muw2 = Connection(makeup_leak, 'out1', merge, 'in3', label='muw2') c1_2 = Connection(diversion, 'out2', valve, 'in1',label='c1_2') #c02 c1_1= Connection(valve, 'out1', hex_heat_sink, 'in1', label='c1_1') #c01 c0_1 = Connection(hex_heat_sink, 'out1', condensate_pump, 'in1', label='c0_1') #c1 c0_11 = Connection(condensate_pump, 'out1', conflation, 'in2', label='c0_11') #c1 c0_2 = Connection(conflation, 'out1', pipe_cold, 'in1', label='c0_2') #c11 c0_3 = Connection(pipe_cold, 'out1', split, 'in1', label='c0_3') #c2 c0_4 = Connection(split, 'out1', merge, 'in1', label='c0_4') #c3 c0_5 = Connection(merge, 'out1', feed_pump, 'in1', label='c0_5') #c4 c0_6 = Connection(feed_pump, 'out1', cycl, 'in1', label='c0_6') #c5 muw = Connection(makeup, 'out1', merge, 'in2', label='muw') wawa = Connection(split, 'out2', blowdown, 'in1', 'c_blowdown') steam_lca.model.add_conns(c1_6, c1_5, c1_4, c1_3, c1_2, c1_1, cnw1, cnw2,cnw3, c_leak, c0_11, c0_1, c0_2, c0_3, c0_4, c0_5, c0_6, c0_7, muw, wawa, muw2) #set attributes: boiler.set_attr(pr = 1, power_connector_location="inlet") c1_6.set_attr(fluid={"H2O": 1}, h= steam_lca.h_superheating_max_pressure) c0_7.set_attr(p0=steam_lca.main_pressure,) bpt.set_attr(eta_s = 0.85, ) c1_5.set_attr(p=steam_lca.main_pressure, h0=steam_lca.h_superheating_max_pressure, ) pipe_warm.set_attr(pr=0.95, Tamb = steam_lca.params['Tamb'], L=steam_lca.params['pipe_length'], D='var', ks=4.57e-5, power_connector_location="outlet", insulation_thickness=steam_lca.params['insulation_thickness'] , insulation_tc= 0.035, pipe_thickness=0.004,material='Steel', wind_velocity=steam_lca.params['wind_velocity'], environment_media = steam_lca.params['environment_media'] ) c_leak.set_attr(m=Ref(c1_4, steam_lca.params['leakage_factor'], 0)) c1_1.set_attr(p = steam_lca.needed_pressure, h0=steam_lca.h_superheating_max_pressure, ) hex_heat_sink.set_attr(pr=1, Q=-steam_lca.params['heat'], power_connector_location="outlet") mains_sorted = sorted(steam_lca.params['mains']) if steam_lca.main_pressure in mains_sorted: idx = mains_sorted.index(steam_lca.main_pressure) next_main = mains_sorted[idx - 1] if idx - 1 >= 0 else 1.013 else: raise ValueError("Main pressure not found in mains list") c0_2.set_attr(p=steam_lca.main_pressure ) pipe_cold.set_attr(pr=0.95, Tamb = steam_lca.params['Tamb'], L=steam_lca.params['pipe_length'], D='var', ks=4.57e-5, power_connector_location="outlet", insulation_thickness=steam_lca.params['insulation_thickness'] , insulation_tc= 0.035, pipe_thickness=0.004,material='Steel', wind_velocity= steam_lca.params['wind_velocity'], environment_media = steam_lca.params['environment_media'] ) c0_5.set_attr(p0=steam_lca.needed_pressure, ) c0_6.set_attr(p=steam_lca.params['max_pressure'], h0=steam_lca.h_superheating_max_pressure, ) muw.set_attr(m=Ref(c1_6, steam_lca.params['makeup_factor'], 0), T=steam_lca.params['Tamb'], fluid={"H2O": 1}, p0=1.013) muw2.set_attr(m=Ref(c_leak, 1, 0), T=steam_lca.params['Tamb'], fluid={"H2O": 1}, p0=1.013) wawa.set_attr(m=Ref(c1_6, steam_lca.params['makeup_factor'], 0)) feed_pump.set_attr(eta_s =0.95) condensate_pump.set_attr(eta_s=0.95) network_heat_sink.set_attr(pr=1, Q=-(steam_lca.params['heat_capacity_pipe_network']-steam_lca.params['heat']), power_connector_location="outlet", ) cnw2.set_attr(x=0) c0_1.set_attr(x=0) # create power connections: fuel_bus = PowerSource('boiler powersource') e_boil = PowerConnection(fuel_bus, 'power', boiler, 'heat', label= 'e_boil') turbine_gen = Generator('turbines') turbine_gen.set_attr(eta= 0.9) turbine_grid = PowerSink('grid') e_turb = PowerConnection(bpt, 'power', turbine_gen, 'power_in', label='e_turb') e_turb_grid =PowerConnection(turbine_gen, 'power_out', turbine_grid, 'power', label='e_turb_grid') pipe_diss_sink =PowerSink('pipe dissipative losses sink') pipe_diss_bus = PowerBus('pipe dissipative losses bus', num_in =2, num_out=1) e_pi_h = PowerConnection(pipe_warm, 'heat', pipe_diss_bus, 'power_in1') e_pi_c = PowerConnection(pipe_cold, 'heat', pipe_diss_bus, 'power_in2') e_pi_sink = PowerConnection(pipe_diss_bus, 'power_out1', pipe_diss_sink, 'power', label='e_pi_sink') heat_sink =PowerSink('heat sink') e_heat_sink =PowerConnection( hex_heat_sink,'heat',heat_sink, 'power', label='e_heat_sink') nw_heat_sink =PowerSink('nw heat sink') e_nw_heat_sink =PowerConnection( network_heat_sink,'heat',nw_heat_sink, 'power', label='e_nw_heat_sink') pump_psource = PowerSource('feedpump powersource') e_pump = PowerConnection(pump_psource, 'power', feed_pump, 'power', label='e_pump') steam_lca.model.add_conns(e_boil, e_turb,e_turb_grid, e_pi_c, e_pi_h, e_pi_sink, e_heat_sink, e_nw_heat_sink, e_pump ) logger.info('Start first solve') steam_lca.model.solve('design') #2. Run: muw.set_attr(T=None) muw.set_attr(T=Ref(c0_3, 1, -20)) logger.info('Start second solve') steam_lca.model.solve('design') #3. Run: implement condensate injection: # if superheated inject condensate: if c1_4.x.val in [-1,1] and steam_lca.desuperheat_steam: steam_lca.model.del_conns(c1_1, c0_1) merge_injection = Merge("Injection") dummy_sink2= Sink('dummy sink2') injection_source =Source('injection_source') condensate_split= Splitter("split condensate") c1_1= Connection(valve, 'out1', merge_injection, 'in1', label='c1_1') cond_3 = Connection(injection_source, 'out1', merge_injection, 'in2') cond_5 = Connection(merge_injection, 'out1', hex_heat_sink, 'in1', label= 'cond_5') cond_1 = Connection(hex_heat_sink, 'out1', condensate_split, 'in1', label='cond_1') cond_2 = Connection(condensate_split, 'out2', dummy_sink2, 'in1') c0_1 = Connection(condensate_split, 'out1', valve_cond, 'in1', label='c0_1') steam_lca.model.add_conns(cond_1, cond_2, cond_3,cond_5,c1_1,c0_1) c1_1.set_attr(p = steam_lca.needed_pressure) cond_1.set_attr(x=0) c0_1.set_attr(m=Ref(c1_1,1,0)) cond_3.set_attr(x=0, fluid={"H2O": 1}, ) cond_5.set_attr(x=1) logger.info('Start third solve') steam_lca.model.solve('design') steam_lca.cond_inj =True # when steam is not saturated trap condensate (experimental): elif 0< c1_4.x.val <1: merge.set_attr(num_in=4) steam_lca.model.del_conns(c1_2) makeup_trap =Source('trap makeup') cond_trap= DropletSeparator('condensate trap') muw3 = Connection(makeup_trap, 'out1', merge, 'in4', label='muw3') c023= Connection(steam_leak, 'out1', cond_trap, 'in1') c024= Connection(cond_trap, 'out2', valve, 'in1') c_trap_waste = Connection(cond_trap, 'out1', cond_waste, 'in1', 'c_trap_waste ') steam_lca.model.add_conns(c023, c024, c_trap_waste, muw3) muw3.set_attr(m=Ref(c_trap_waste, 1, 0), T=steam_lca.params['Tamb'], fluid={"H2O": 1}, ) logger.info('Start third solve') steam_lca.model.solve('design') steam_lca.trap =True