def setup_clausius_rankine(self, fluid_list): """Setup a Clausius-Rankine cycle.""" self.nw = network(fluids=fluid_list) self.nw.set_attr(p_unit='bar', T_unit='C', iterinfo=False) # %% components # main components turb = turbine('turbine') con = condenser('condenser') pu = pump('pump') steam_generator = heat_exchanger_simple('steam generator') closer = cycle_closer('cycle closer') # cooling water so_cw = source('cooling water inlet') si_cw = sink('cooling water outlet') # %% connections # main cycle fs_in = connection(closer, 'out1', turb, 'in1', label='livesteam') ws = connection(turb, 'out1', con, 'in1', label='wastesteam') cond = connection(con, 'out1', pu, 'in1', label='condensate') fw = connection(pu, 'out1', steam_generator, 'in1', label='feedwater') fs_out = connection(steam_generator, 'out1', closer, 'in1') self.nw.add_conns(fs_in, ws, cond, fw, fs_out) # cooling water cw_in = connection(so_cw, 'out1', con, 'in2') cw_out = connection(con, 'out2', si_cw, 'in1') self.nw.add_conns(cw_in, cw_out) # %% parametrization of components turb.set_attr(eta_s=0.9) con.set_attr(pr1=1, pr2=0.99, ttd_u=5) pu.set_attr(eta_s=0.7) steam_generator.set_attr(pr=0.9) # %% parametrization of connections fs_in.set_attr(p=100, T=500, m=100, fluid={self.nw.fluids[0]: 1}) cw_in.set_attr(T=20, p=5, fluid={self.nw.fluids[0]: 1}) cw_out.set_attr(T=30) # %% solving self.nw.solve('design')
import numpy as np # %% network btes = network( fluids=["water"], T_unit="K", p_unit="bar", h_unit="kJ / kg", T_range=[273.25, 373.15], p_range=[1, 20], h_range=[1, 1000], ) # %% components fc_in = source("from consumer inflow") fc_out = sink("from consumer outflow") pu = pump("pump") sp = splitter("splitter", num_out=3) # bhe: bhe_name = "BHE1" assert "BHE1" in bhe_name, "BHE should be named with 'BHE1'" bhe1 = heat_exchanger_simple(bhe_name) bhe_name = "BHE2" assert "BHE2" in bhe_name, "BHE should be named with 'BHE2'" bhe2 = heat_exchanger_simple(bhe_name) bhe_name = "BHE3" assert "BHE3" in bhe_name, "BHE should be named with 'BHE3'"
from tespy.connections import connection from tespy.components import source, sink, pipe from tespy.networks import network import numpy as np from matplotlib import pyplot as plt nw = network(['water'], p_unit='bar', T_unit='C', h_unit='kJ / kg') # %% components pi = pipe('pipe') si = sink('sink') so = source('source') # %% connections a = connection(so, 'out1', pi, 'in1') b = connection(pi, 'out1', si, 'in1') nw.add_conns(a, b) # %% connection parameters a.set_attr(h=40, fluid={'water': 1}, p=1, m=10) # %% component parameters pi.set_attr(ks=1e-5, L=100, D='var', Q=0) # %% solve
T_cw_cold = 50 # Temperature of cold cooling water T_cw_hot = 80 # Temperature of hot cooling water # %% network fluid_list = ['O2', 'H2O', 'H2'] nw = network(fluids=fluid_list, T_unit='C', p_unit='bar', v_unit='l / s', iterinfo=False) # %% components fw = source('feed water') oxy = sink('oxygen sink') hydro = sink('hydrogen sink') cw_cold = source('cooling water source') cw_hot = sink('cooling water sink') comp = compressor('compressor', eta_s=0.9) el = water_electrolyzer('electrolyzer') # %% connections fw_el = connection(fw, "out1", el, "in2") el_comp = connection(el, 'out3', comp, 'in1') comp_hydro = connection(comp, 'out1', hydro, 'in1') el_oxy = connection(el, 'out2', oxy, 'in1') cw_cold_el = connection(cw_cold, 'out1', el, 'in1')
from tespy.components import source, sink, heat_exchanger_simple, pipe from tespy.connections import connection, bus, ref from tespy.networks import network from sub_consumer import (lin_consum_closed as lc, lin_consum_open as lo, fork as fo) # %% network nw = network(fluids=['water'], T_unit='C', p_unit='bar', h_unit='kJ / kg') # %% components # sources and sinks so = source('source') si = sink('sink') so1 = source('source1') si1 = sink('sink1') so2 = source('source2') si2 = sink('sink2') # %% construction part # pipe_feed pif1 = pipe('pipe1_feed', ks=7e-5, L=50, D=0.15, offdesign=['kA_char']) pif2 = pipe('pipe2_feed', ks=7e-5, L=200, D=0.15, offdesign=['kA_char'])
import logging mypath = logger.define_logging( log_path=True, log_version=True, timed_rotating={'backupCount': 4}, screen_level=logging.WARNING, screen_datefmt = "no_date") fluids = ['water', 'Isopentane'] nw = network(fluids=fluids) nw.set_attr(p_unit='bar', T_unit='C', h_unit='kJ / kg') # components # main components evaporator = evaporator('evaporator') pump = pump('condensate pump') merge = merge('geo-fluid merge point') # working fluid source_wf = source('working fluid source') sink_wf = sink('working fluid sink') #brine source_s = source('steam source') source_b = source('brine source') sink_s = sink('steam sink') sink_b = sink('brine sink') # connections # main cycle scr_s_merge = connection(source_s, 'out1', merge, 'in1') scr_b_merge = connection(source_b, 'out1', merge, 'in2') merge_sink = connection(merge, 'out1', sink_b, 'in1')
from tespy.connections import connection import numpy as np # %% network # define full fluid list for the network's variable space fluid_list = ['Ar', 'N2', 'O2', 'CO2', 'CH4', 'H2O'] # define unit systems and fluid property ranges nw = network(fluids=fluid_list, p_unit='bar', T_unit='C', p_range=[0.5, 10], T_range=[10, 1200]) # %% components # sinks & sources amb = source('ambient') sf = source('fuel') fg = sink('flue gas outlet') cw_in1 = source('cooling water inlet1') cw_in2 = source('cooling water inlet2') cw_out1 = sink('cooling water outlet1') cw_out2 = sink('cooling water outlet2') split = splitter('splitter') merge = merge('merge') # combustion chamber chp = combustion_engine(label='combustion engine') # %% connections amb_comb = connection(amb, 'out1', chp, 'in3')
from tespy.connections import connection import numpy as np from matplotlib import pyplot as plt import pandas as pd from mpl_toolkits.mplot3d import Axes3D # %% network fluid_list = ['H2O'] nw = network(fluids=fluid_list, p_unit='bar', T_unit='C') # %% components # sinks & sources back = source('to collector') feed = sink('from collector') # collector coll = solar_collector(label='solar thermal collector') # %% connections b_c = connection(back, 'out1', coll, 'in1') c_f = connection(coll, 'out1', feed, 'in1') nw.add_conns(b_c, c_f) # %% component parameters # set pressure ratio and heat flow, as well as dimensional parameters of
from tespy.tools.characteristics import char_line from tespy.tools.data_containers import dc_cc import numpy as np # %% network btes = network(fluids=['water'], T_unit='K', p_unit='bar', h_unit='kJ / kg', T_range=[273.25, 373.15], p_range=[1, 20], h_range=[1, 1000]) # %% components fc_in = source('from consumer inflow') fc_out = sink('from consumer outflow') pu = pump('pump') sp = splitter('splitter', num_out=3) # bhe: bhe_name = 'BHE1' assert 'BHE1' in bhe_name, "BHE should be named with 'BHE1'" bhe1 = heat_exchanger_simple(bhe_name) bhe_name = 'BHE2' assert 'BHE2' in bhe_name, "BHE should be named with 'BHE2'" bhe2 = heat_exchanger_simple(bhe_name) bhe_name = 'BHE3' assert 'BHE3' in bhe_name, "BHE should be named with 'BHE3'"
ihe2 = heat_exchanger('internal heat exchanger 2') pu1 = pump('feeding pump 1') pu2 = pump('feeding pump 2') turb1 = turbine('turb 1') turb2 = turbine('turb 2') val1 = valve('control valve 1') val2 = valve('control valve 2') spl = splitter('main cycle splitter') mer = merge('main cycle merge') preh = heat_exchanger('preheater') evap = heat_exchanger('evaporator') # cooling air source_ca_1 = source('cooling air source 1') sink_ca_1 = sink('cooling air sink 1') source_ca_2 = source('cooling air source 2') sink_ca_2 = sink('cooling air sink 2') #brine source_b = source('brine source') sink_b = sink('brine sink') # working fluid close_cycle = cycle_closer('cycle closer before turbines') # connections wf_in_spl = connection(close_cycle, 'out1', spl, 'in1') nw.add_conns(wf_in_spl)
T_unit='C', h_unit='kJ / kg', p_range=[1, 15], T_range=[10, 1200], h_range=[500, 4000]) t_dh_in = 50 t_dh_out = 124 # might change due to 4GDH # %% components # gas turbine part compressor_gtp = compressor('compressor') combustion_chamber = combustion_chamber('combustion') gas_turbine = turbine('gas turbine') fuel_source = source('fuel source') combustion_air_source = source('ambient air') rauchgas = sink('Rauchgas') steam_generator_gas = heat_exchanger('Abhitzekessel') # steam turbine part fs_source = source('Frischdampf') hp_turbine = turbine('Hochdruck Turbine') splitter_1 = splitter('splitter hp-extraction') lp_turbine = turbine('low pressure turbine') merge = merge('Merge vor Kondensator') condenser_stp = condenser('Kondensator') pump = pump('Speisewasserpumpe')
from tespy.tools.characteristics import char_line from tespy.tools.characteristics import load_default_char as ldc # %% network nw = network(fluids=['water', 'NH3'], T_unit='C', p_unit='bar', h_unit='kJ / kg', m_unit='kg / s') # %% components # sources & sinks c_in = source('coolant in') cons_closer = cycle_closer('consumer cycle closer') amb_in = source('source ambient') amb_out = sink('sink ambient') # consumer system cd = condenser('condenser') rp = pump('recirculation pump') cons = heat_exchanger_simple('consumer') # evaporator system va = valve('valve') dr = drum('drum')
turbine_lp = turbine('low pressure turbine') # condenser and preheater cond = condenser('condenser') preheater = condenser('preheater') merge_ws = merge('waste steam merge') valve_pre = valve('preheater valve') # feed water pump = pump('pump') steam_generator = heat_exchanger_simple('steam generator') closer = cycle_closer('cycle closer') # source and sink for cooling water source_cw = source('source_cw') sink_cw = sink('sink_cw') # %% connections # turbine part fs_in = connection(closer, 'out1', valve_turb, 'in1') fs = connection(valve_turb, 'out1', turbine_hp, 'in1') ext = connection(turbine_hp, 'out1', split, 'in1') ext_v = connection(split, 'out1', preheater, 'in1') ext_turb = connection(split, 'out2', turbine_lp, 'in1') nw.add_conns(fs_in, fs, ext, ext_v, ext_turb) # preheater and condenser ext_cond = connection(preheater, 'out1', valve_pre, 'in1') cond_ws = connection(valve_pre, 'out1', merge_ws, 'in2')
turb_lp = turbine('low pressure turbine') # condenser and preheater cond = condenser('condenser') preheat = condenser('preheater') mer = merge('waste steam merge') val = valve('valve') # feed water pu = pump('pump') sg = heat_exchanger_simple('steam generator') closer = cycle_closer('cycle closer') # source and sink for cooling water dh_in = source('district heating backflow') dh_out = sink('district heating feedflow') # %% connections # turbine part cc_turb_hp = connection(closer, 'out1', turb_hp, 'in1') turb_hp_split = connection(turb_hp, 'out1', split, 'in1') split_preheat = connection(split, 'out1', preheat, 'in1') split_turb_lp = connection(split, 'out2', turb_lp, 'in1') nw.add_conns(cc_turb_hp, turb_hp_split, split_preheat, split_turb_lp) # preheater and condenser preheat_val = connection(preheat, 'out1', val, 'in1') val_mer = connection(val, 'out1', mer, 'in2') turb_lp_mer = connection(turb_lp, 'out1', mer, 'in1')
T_brine_out = 69.1 # calculation T_before_turbine = PropsSI('T', 'P', p_after_pump * 0.957627118 * 0.955752212 * 1e5, 'Q', 1, 'Isopentane') - 273.15 + 2.3 # basic network nw = network(fluids=fluids) nw.set_attr(p_unit='bar', T_unit='C', h_unit='kJ / kg') # main components condenser = condenser('condenser') ihe = heat_exchanger('internal heat exchanger') pump = pump('feeding pump') turbine = turbine('turbine') p_and_e = heat_exchanger('preheater and evaporator') # cooling air source_ca = source('cooling air source') sink_ca = sink('cooling air sink') #brine source_b = source('brine source') sink_b = sink('brine sink') # working fluid source_wf_1 = source('working fluid source before turbine') sink_wf_1 = sink('working fluid sink from before turbine') source_wf_2 = source('working fluid source from ihe') sink_wf_2 = sink('working fluid sink from ihe') # connections # main cycle p_and_e_wf_in = connection(source_wf_2, 'out1', p_and_e, 'in2') p_and_e_wf_out = connection(p_and_e, 'out2', sink_wf_2, 'in1') turbine_wf_in = connection(source_wf_1, 'out1', turbine, 'in1') turbine_ihe = connection(turbine, 'out1', ihe, 'in1')
T_source_rl = 50 T_source_vl = 70 # %% network nw = network(fluids=['water', 'NH3', 'air'], T_unit='C', p_unit='bar', h_unit='kJ / kg', m_unit='kg / s') # %% components # sources & sinks cc = cycle_closer('coolant cycle closer') cb = source('consumer back flow') cf = sink('consumer feed flow') lt_si = sink('low temp sink') lt_so = source('low temp source') # low temp water system pu = pump('pump') # consumer system cd = condenser('condenser') dhp = pump('district heating pump') cons = heat_exchanger_simple('consumer') # evaporator system
screen_datefmt="no_date") fluids = ['Isopentane', 'air'] T_air = -4.7 p_air = 0.61 nw = network(fluids=fluids) nw.set_attr(p_unit='bar', T_unit='C', h_unit='kJ / kg', p_range=[0.01, 150], T_range=[5, 800], h_range=[-10, 5000]) # components # main components condenser = condenser('condenser') # cooling air source_ca = source('cooling air source') sink_ca = sink('cooling air sink') # working fluid source_wf = source('working fluid source') sink_wf = sink('working fluid sink') # connections # main cycle # geo-fluid ihe_condenser = connection(source_wf, 'out1', condenser, 'in1') condenser_pump = connection(condenser, 'out1', sink_wf, 'in1') nw.add_conns(ihe_condenser, condenser_pump) # cooling air ca_in = connection(source_ca, 'out1', condenser, 'in2') ca_out = connection(condenser, 'out2', sink_ca, 'in1') nw.add_conns(ca_in, ca_out) # parametrization of components
# calculation secondary variables p_before_turbine = PropsSI('P', 'T', T_brine_in + 273.15 - 26, 'Q', 1, 'Isopentane')/1e5 # basic network nw = network(fluids=fluids) nw.set_attr(p_unit='bar', T_unit='C', h_unit='kJ / kg') # main components condenser = condenser('condenser') ihe = heat_exchanger('internal heat exchanger') pump = pump('feeding pump') turbine = turbine('turbine') preh = heat_exchanger('preheater') evap = heat_exchanger('evaporator') # cooling air source_ca = source('cooling air source') sink_ca = sink('cooling air sink') #brine source_b = source('brine source') sink_b = sink('brine sink') # working fluid close_cycle = cycle_closer('cycle closer before turbine') # connections # main cycle turbine_wf_in = connection(close_cycle, 'out1', turbine, 'in1') turbine_ihe = connection(turbine, 'out1', ihe, 'in1') ihe_condenser = connection(ihe, 'out1', condenser, 'in1') condenser_pump = connection(condenser, 'out1', pump, 'in1')
class HeatPump(object): # define the structure of heat pump # %% network nw = network(fluids=['water', 'NH3', 'air'], T_unit='C', p_unit='bar', h_unit='kJ / kg', m_unit='kg / s') # %% components # sources & sinks cc = cycle_closer('coolant cycle closer') cb = source('consumer back flow') cf = sink('consumer feed flow') amb = source('ambient air') amb_out1 = sink('sink ambient 1') amb_out2 = sink('sink ambient 2') # ambient air system sp = splitter('splitter') pu = pump('pump') # consumer system cd = condenser('condenser') dhp = pump('district heating pump') cons = heat_exchanger_simple('consumer') # evaporator system ves = valve('valve') dr = drum('drum') ev = heat_exchanger('evaporator') su = heat_exchanger('superheater') erp = pump('evaporator reciculation pump') # compressor-system cp1 = compressor('compressor 1') cp2 = compressor('compressor 2') ic = heat_exchanger('intercooler') # %% connections # consumer system c_in_cd = connection(cc, 'out1', cd, 'in1') cb_dhp = connection(cb, 'out1', dhp, 'in1') dhp_cd = connection(dhp, 'out1', cd, 'in2') cd_cons = connection(cd, 'out2', cons, 'in1') cons_cf = connection(cons, 'out1', cf, 'in1') nw.add_conns(c_in_cd, cb_dhp, dhp_cd, cd_cons, cons_cf) # connection condenser - evaporator system cd_ves = connection(cd, 'out1', ves, 'in1') nw.add_conns(cd_ves) # evaporator system ves_dr = connection(ves, 'out1', dr, 'in1') dr_erp = connection(dr, 'out1', erp, 'in1') erp_ev = connection(erp, 'out1', ev, 'in2') ev_dr = connection(ev, 'out2', dr, 'in2') dr_su = connection(dr, 'out2', su, 'in2') nw.add_conns(ves_dr, dr_erp, erp_ev, ev_dr, dr_su) amb_p = connection(amb, 'out1', pu, 'in1') p_sp = connection(pu, 'out1', sp, 'in1') sp_su = connection(sp, 'out1', su, 'in1') su_ev = connection(su, 'out1', ev, 'in1') ev_amb_out = connection(ev, 'out1', amb_out1, 'in1') nw.add_conns(amb_p, p_sp, sp_su, su_ev, ev_amb_out) # connection evaporator system - compressor system su_cp1 = connection(su, 'out2', cp1, 'in1') nw.add_conns(su_cp1) # compressor-system cp1_he = connection(cp1, 'out1', ic, 'in1') he_cp2 = connection(ic, 'out1', cp2, 'in1') cp2_c_out = connection(cp2, 'out1', cc, 'in1') sp_ic = connection(sp, 'out2', ic, 'in2') ic_out = connection(ic, 'out2', amb_out2, 'in1') nw.add_conns(cp1_he, he_cp2, sp_ic, ic_out, cp2_c_out) def __init__(self, q, eff, Temp): r""" :param Temp: :param q: q output :param eff: efficient of each part in pump """ self.q = q self.eff = eff self.Temp = Temp def caculation(self): self.set_attr() HeatPump.nw.solve('design') P = [ HeatPump.cp1.P.val, HeatPump.cp2.P.val, HeatPump.erp.P.val, HeatPump.pu.P.val ] P_total = sum(map(abs, P)) P = list(map(abs, P)) COP = self.q / P_total # T = [HeatPump.su_cp1.T.val, HeatPump.cp2_c_out.T.val, HeatPump.cd_ves.T.val, HeatPump.su_ev.T.val] # p = [HeatPump.su_cp1.p.val, HeatPump.cp2_c_out.p.val, HeatPump.cd_ves.p.val, HeatPump.su_ev.p.val, # HeatPump.cp1_he.p.val] return P, P_total, COP def set_attr(self): r""" # %% set the attribution of the heat pump :return: heat output of the heat pump """ HeatPump.cd.set_attr(pr1=0.99, pr2=0.99, ttd_u=15, design=['pr2', 'ttd_u'], offdesign=['zeta2', 'kA']) HeatPump.dhp.set_attr(eta_s=self.eff, design=['eta_s'], offdesign=['eta_s_char']) HeatPump.cons.set_attr(pr=0.99, design=['pr'], offdesign=['zeta']) # water pump HeatPump.pu.set_attr(eta_s=self.eff, design=['eta_s'], offdesign=['eta_s_char']) # evaporator system kA_char1 = ldc('heat exchanger', 'kA_char1', 'DEFAULT', char_line) kA_char2 = ldc('heat exchanger', 'kA_char2', 'EVAPORATING FLUID', char_line) HeatPump.ev.set_attr(pr1=0.98, pr2=0.99, ttd_l=5, kA_char1=kA_char1, kA_char2=kA_char2, design=['pr1', 'ttd_l'], offdesign=['zeta1', 'kA']) HeatPump.su.set_attr(pr1=0.98, pr2=0.99, ttd_u=2, design=['pr1', 'pr2', 'ttd_u'], offdesign=['zeta1', 'zeta2', 'kA']) HeatPump.erp.set_attr(eta_s=self.eff, design=['eta_s'], offdesign=['eta_s_char']) # compressor system HeatPump.cp1.set_attr(eta_s=self.eff, design=['eta_s'], offdesign=['eta_s_char']) HeatPump.cp2.set_attr(eta_s=self.eff, pr=3, design=['eta_s'], offdesign=['eta_s_char']) HeatPump.ic.set_attr(pr1=0.99, pr2=0.98, design=['pr1', 'pr2'], offdesign=['zeta1', 'zeta2', 'kA']) # %% connection parametrization # condenser system HeatPump.c_in_cd.set_attr(fluid={'air': 0, 'NH3': 1, 'water': 0}) HeatPump.cb_dhp.set_attr(T=20, p=10, fluid={ 'air': 0, 'NH3': 0, 'water': 1 }) HeatPump.cd_cons.set_attr(T=self.Temp) HeatPump.cons_cf.set_attr(h=ref(HeatPump.cb_dhp, 1, 0), p=ref(HeatPump.cb_dhp, 1, 0)) # evaporator system cold side HeatPump.erp_ev.set_attr(m=ref(HeatPump.ves_dr, 1.25, 0), p0=5) HeatPump.su_cp1.set_attr(p0=5, h0=1700) # evaporator system hot side # pumping at constant rate in partload HeatPump.amb_p.set_attr(T=12, p=2, fluid={ 'air': 0, 'NH3': 0, 'water': 1 }, offdesign=['v']) HeatPump.sp_su.set_attr(offdesign=['v']) HeatPump.ev_amb_out.set_attr(p=2, T=9, design=['T']) # compressor-system HeatPump.he_cp2.set_attr(Td_bp=5, p0=20, design=['Td_bp']) HeatPump.ic_out.set_attr(T=15, design=['T']) # %% key paramter HeatPump.cons.set_attr(Q=self.q)
def __init__(self): self.nw = network( fluids=['BICUBIC::water'], p_unit='bar', T_unit='C', h_unit='kJ / kg', iterinfo=False) # components # main cycle eco = heat_exchanger_simple('economizer') eva = heat_exchanger_simple('evaporator') sup = heat_exchanger_simple('superheater') cc = cycle_closer('cycle closer') hpt = turbine('high pressure turbine') sp1 = splitter('splitter 1', num_out=2) mpt = turbine('mid pressure turbine') sp2 = splitter('splitter 2', num_out=2) lpt = turbine('low pressure turbine') con = condenser('condenser') pu1 = pump('feed water pump') fwh1 = condenser('feed water preheater 1') fwh2 = condenser('feed water preheater 2') dsh = desuperheater('desuperheater') me2 = merge('merge2', num_in=2) pu2 = pump('feed water pump 2') pu3 = pump('feed water pump 3') me = merge('merge', num_in=2) # cooling water cwi = source('cooling water source') cwo = sink('cooling water sink') # connections # main cycle cc_hpt = connection(cc, 'out1', hpt, 'in1', label='feed steam') hpt_sp1 = connection(hpt, 'out1', sp1, 'in1', label='extraction1') sp1_mpt = connection(sp1, 'out1', mpt, 'in1', state='g') mpt_sp2 = connection(mpt, 'out1', sp2, 'in1', label='extraction2') sp2_lpt = connection(sp2, 'out1', lpt, 'in1') lpt_con = connection(lpt, 'out1', con, 'in1') con_pu1 = connection(con, 'out1', pu1, 'in1') pu1_fwh1 = connection(pu1, 'out1', fwh1, 'in2') fwh1_me = connection(fwh1, 'out2', me, 'in1', state='l') me_fwh2 = connection(me, 'out1', fwh2, 'in2', state='l') fwh2_dsh = connection(fwh2, 'out2', dsh, 'in2', state='l') dsh_me2 = connection(dsh, 'out2', me2, 'in1') me2_eco = connection(me2, 'out1', eco, 'in1', state='l') eco_eva = connection(eco, 'out1', eva, 'in1') eva_sup = connection(eva, 'out1', sup, 'in1') sup_cc = connection(sup, 'out1', cc, 'in1') self.nw.add_conns(cc_hpt, hpt_sp1, sp1_mpt, mpt_sp2, sp2_lpt, lpt_con, con_pu1, pu1_fwh1, fwh1_me, me_fwh2, fwh2_dsh, dsh_me2, me2_eco, eco_eva, eva_sup, sup_cc) # cooling water cwi_con = connection(cwi, 'out1', con, 'in2') con_cwo = connection(con, 'out2', cwo, 'in1') self.nw.add_conns(cwi_con, con_cwo) # preheating sp1_dsh = connection(sp1, 'out2', dsh, 'in1') dsh_fwh2 = connection(dsh, 'out1', fwh2, 'in1') fwh2_pu2 = connection(fwh2, 'out1', pu2, 'in1') pu2_me2 = connection(pu2, 'out1', me2, 'in2') sp2_fwh1 = connection(sp2, 'out2', fwh1, 'in1') fwh1_pu3 = connection(fwh1, 'out1', pu3, 'in1') pu3_me = connection(pu3, 'out1', me, 'in2') self.nw.add_conns(sp1_dsh, dsh_fwh2, fwh2_pu2, pu2_me2, sp2_fwh1, fwh1_pu3, pu3_me) # busses # power bus self.power = bus('power') self.power.add_comps( {'comp': hpt, 'char': -1}, {'comp': mpt, 'char': -1}, {'comp': lpt, 'char': -1}, {'comp': pu1, 'char': -1}, {'comp': pu2, 'char': -1}, {'comp': pu3, 'char': -1}) # heating bus self.heat = bus('heat') self.heat.add_comps( {'comp': eco, 'char': 1}, {'comp': eva, 'char': 1}, {'comp': sup, 'char': 1}) self.nw.add_busses(self.power, self.heat) # parametrization # components hpt.set_attr(eta_s=0.9) mpt.set_attr(eta_s=0.9) lpt.set_attr(eta_s=0.9) pu1.set_attr(eta_s=0.8) pu2.set_attr(eta_s=0.8) pu3.set_attr(eta_s=0.8) eco.set_attr(pr=0.99) eva.set_attr(pr=0.99) sup.set_attr(pr=0.99) con.set_attr(pr1=0.99, pr2=0.99, ttd_u=5) fwh1.set_attr(pr1=0.99, pr2=0.99, ttd_u=5) fwh2.set_attr(pr1=0.99, pr2=0.99, ttd_u=5) dsh.set_attr(pr1=0.99, pr2=0.99) # connections eco_eva.set_attr(x=0) eva_sup.set_attr(x=1) cc_hpt.set_attr(m=200, T=650, p=100, fluid={'water': 1}) hpt_sp1.set_attr(p=20) mpt_sp2.set_attr(p=3) lpt_con.set_attr(p=0.05) cwi_con.set_attr(T=20, p=10, fluid={'water': 1})
fluid_list = ['Ar', 'N2', 'O2', 'CO2', 'CH4', 'BICUBIC::H2O'] nw = network(fluids=fluid_list, p_unit='bar', T_unit='C', h_unit='kJ / kg', v_unit='l / s', iterinfo=False) t_dh_in = 50 t_dh_out = 124 # might change due to 4GDH # %% components # gas turbine part air_source = source('air source') air_compressor = compressor('air compressor') combustion_chamber = combustion_chamber('combustion chamber') fuel_source = source('fuel source') gas_turbine = turbine('gas turbine') steam_generator = heat_exchanger('steamgenerator') exhaust_gas = sink('exhaust gas') # steam turbine part fs_source = source('steam source') steam_turbine = turbine('steam turbine') dh_heat_exchanger = heat_exchanger('district heating heat exchanger') pump = pump('pump') fs_sink = sink('steam sink')
# calculation secondary variables p_before_turbine = PropsSI('P', 'T', T_brine_in + 273.15 - 28, 'Q', 1, 'Isopentane') / 1e5 p_steam_in = PropsSI('P', 'T', T_brine_in + 273.15, 'Q', 1, 'water') / 1e5 # main components evaporator = evaporator('evaporator') pump_c = pump('condensate pump') merge = merge('geo-fluid merge point') preheater = heat_exchanger('preheater') turbine = turbine('turbine') ihe = heat_exchanger('internal heat exchanger') condenser = condenser('condenser') pump = pump('feeding pump') # working fluid source_wf = source('working fluid source') sink_wf = sink('working fluid sink') close_cycle = cycle_closer('cycle closer before preheater') #brine source_s = source('steam source') source_b = source('brine source') sink_s = sink('steam sink') sink_b = sink('brine sink') # cooling air source_ca = source('cooling air source') sink_ca = sink('cooling air sink') # connections # main cycle preheater_wf_in = connection(close_cycle, 'out1', preheater, 'in2') preheater_evaporator = connection(preheater, 'out2', evaporator, 'in3')
# %% network nw = network(fluids=['water', 'NH3'], T_unit='C', p_unit='bar', h_unit='kJ / kg', m_unit='kg / s') # %% components # sources & sinks cool_closer = cycle_closer('coolant cycle closer') cons_closer = cycle_closer('consumer cycle closer') amb_in = source('source ambient') amb_out = sink('sink ambient') ic_in = source('source intercool') ic_out = sink('sink intercool') # consumer system cd = condenser('condenser') rp = pump('recirculation pump') cons = heat_exchanger_simple('consumer') cp1 = sink('compressor 1') # consumer system
# %% network # define full fluid list for the network's variable space fluid_list = ['TESPy::myAir', 'TESPy::myFuel', 'TESPy::myFuel_fg'] # define unit systems and fluid property ranges nw = network(fluids=fluid_list, p_unit='bar', T_unit='C', p_range=[1, 10], T_range=[10, 2000]) # %% components # sinks & sources amb = source('ambient') sf = source('fuel') fg = sink('flue gas outlet') # combustion chamber comb = combustion_chamber_stoich('stoichiometric combustion chamber') # %% connections amb_comb = connection(amb, 'out1', comb, 'in1') sf_comb = connection(sf, 'out1', comb, 'in2') comb_fg = connection(comb, 'out1', fg, 'in1') nw.add_conns(sf_comb, amb_comb, comb_fg) # %% component parameters
from tespy.networks import network from tespy.components import (source, sink, condenser, pump, heat_exchanger_simple, cycle_closer) from tespy.connections import connection, ref # %% network nw = network(fluids=['water', 'NH3'], T_unit='C', p_unit='bar', h_unit='kJ / kg', m_unit='kg / s') # %% components # sources & sinks c_in = source('coolant in') cons_closer = cycle_closer('consumer cycle closer') va = sink('valve') # consumer system cd = condenser('condenser') rp = pump('recirculation pump') cons = heat_exchanger_simple('consumer') # %% connections # consumer system c_in_cd = connection(c_in, 'out1', cd, 'in1')
import numpy as np import pandas as pd # %% network nw = network(fluids=['water', 'NH3', 'air'], T_unit='C', p_unit='bar', h_unit='kJ / kg', m_unit='kg / s') # %% components # sources & sinks cc = cycle_closer('coolant cycle closer') cb = source('consumer back flow') cf = sink('consumer feed flow') amb = source('ambient air') amb_out1 = sink('sink ambient 1') amb_out2 = sink('sink ambient 2') # ambient air system sp = splitter('splitter') fan = compressor('fan') # consumer system cd = condenser('condenser') dhp = pump('district heating pump') cons = heat_exchanger_simple('consumer')
sink, source, compressor, turbine, condenser, combustion_chamber, pump, heat_exchanger, drum, cycle_closer) from tespy.connections import connection, bus, ref # %% network fluid_list = ['Ar', 'N2', 'O2', 'CO2', 'CH4', 'H2O'] nw = network(fluids=fluid_list, p_unit='bar', T_unit='C', h_unit='kJ / kg') # %% components # gas turbine part comp = compressor('compressor') c_c = combustion_chamber('combustion') g_turb = turbine('gas turbine') CH4 = source('fuel source') air = source('ambient air') # waste heat recovery suph = heat_exchanger('superheater') evap = heat_exchanger('evaporator') dr = drum('drum') eco = heat_exchanger('economizer') dh_whr = heat_exchanger('waste heat recovery') ch = sink('chimney') # steam turbine part turb = turbine('steam turbine') cond = condenser('condenser') pu = pump('feed water pump') cc = cycle_closer('ls cycle closer')
def __init__(self, working_fluid): self.working_fluid = working_fluid fluids = ['water', self.working_fluid, 'air'] self.nw = network(fluids=fluids) self.nw.set_attr(p_unit='bar', T_unit='C', h_unit='kJ / kg') # geo parameters geo_mass_flow = 210 geo_steam_share = 0.1 T_brine_in = 144.8 T_reinjection = 70.8 # ambient parameters T_amb = 0 p_amb = 1 # main components geo_steam = source('steam source') geo_brine = source('brine source') geo_reinjection = sink('reinjection well') air_in = source('ambient air source') air_out = sink('ambient air sink') air_cond = condenser('main condenser') orc_cc = cycle_closer('orc cycle closer') evap_steam = condenser('steam evaporator') evap_splitter = splitter('splitter evaporation') evap_merge = merge('merge evaporation') evap_steam = condenser('steam evaporator') geo_steam_pump = pump('geosteam condensate pump') evap_brine = heat_exchanger('brine evaporator') dr = drum('drum') eco = heat_exchanger('economiser') feed_water_pump = pump('feed water pump') geo_merge = merge('brine merge') tur = turbine('turbine') ls_valve = valve('live steam valve') ihe = heat_exchanger('internal heat exchanger') # busses power_bus = bus('power output') power_bus.add_comps({ 'c': tur, 'char': -1 }, { 'c': feed_water_pump, 'char': -1 }, { 'c': geo_steam_pump, 'char': -1 }) geothermal_bus = bus('thermal input') geothermal_bus.add_comps({ 'c': eco, 'char': -1 }, { 'c': evap_brine, 'char': -1 }, { 'c': evap_steam, 'char': -1 }) self.nw.add_busses(power_bus, geothermal_bus) # turbine to condenser ls_in = connection(orc_cc, 'out1', ls_valve, 'in1') lsv_tur = connection(ls_valve, 'out1', tur, 'in1') tur_ihe = connection(tur, 'out1', ihe, 'in1') ihe_cond = connection(ihe, 'out1', air_cond, 'in1') self.nw.add_conns(ls_in, lsv_tur, tur_ihe, ihe_cond) # condenser to steam generator cond_fwp = connection(air_cond, 'out1', feed_water_pump, 'in1') fwp_ihe = connection(feed_water_pump, 'out1', ihe, 'in2') self.nw.add_conns(cond_fwp, fwp_ihe) # steam generator ihe_eco = connection(ihe, 'out2', eco, 'in2') eco_dr = connection(eco, 'out2', dr, 'in1') dr_esp = connection(dr, 'out1', evap_splitter, 'in1') esp_eb = connection(evap_splitter, 'out1', evap_brine, 'in2') esp_es = connection(evap_splitter, 'out2', evap_steam, 'in2') eb_em = connection(evap_brine, 'out2', evap_merge, 'in1') es_em = connection(evap_steam, 'out2', evap_merge, 'in2') em_dr = connection(evap_merge, 'out1', dr, 'in2') ls_out = connection(dr, 'out2', orc_cc, 'in1') self.nw.add_conns(ihe_eco, eco_dr, dr_esp, esp_eb, esp_es, eb_em, es_em, em_dr, ls_out) # air cold side air_cold = connection(air_in, 'out1', air_cond, 'in2') air_hot = connection(air_cond, 'out2', air_out, 'in1') self.nw.add_conns(air_cold, air_hot) # geo source gs_es = connection(geo_steam, 'out1', evap_steam, 'in1', label='geosteam') es_gsp = connection(evap_steam, 'out1', geo_steam_pump, 'in1') gsp_gm = connection(geo_steam_pump, 'out1', geo_merge, 'in1') gb_eb = connection(geo_brine, 'out1', evap_brine, 'in1', label='geobrine') eb_gm = connection(evap_brine, 'out1', geo_merge, 'in2') self.nw.add_conns(gs_es, es_gsp, gsp_gm, gb_eb, eb_gm) gm_eco = connection(geo_merge, 'out1', eco, 'in1') eco_gr = connection(eco, 'out1', geo_reinjection, 'in1', label='reinjection') self.nw.add_conns(gm_eco, eco_gr) # fluid settings ihe_eco.set_attr(fluid={self.working_fluid: 1, 'air': 0, 'water': 0}) air_cold.set_attr(fluid={self.working_fluid: 0, 'air': 1, 'water': 0}) gs_es.set_attr(fluid={self.working_fluid: 0, 'air': 0, 'water': 1}) gb_eb.set_attr(fluid={self.working_fluid: 0, 'air': 0, 'water': 1}) # connection parameters ls_stable_p0 = PSI('P', 'T', T_brine_in + 273.15, 'Q', 1, self.working_fluid) / 1e5 lsv_tur.set_attr(p0=ls_stable_p0) ws_stable_h0 = ( PSI('H', 'T', T_amb + 273.15, 'Q', 1, self.working_fluid) + 0.5 * (PSI('H', 'T', T_brine_in + 273.15, 'Q', 1, self.working_fluid) - PSI('H', 'T', T_amb + 273.15, 'Q', 1, self.working_fluid))) / 1e3 tur_ihe.set_attr(h=ws_stable_h0) ihe_cond.set_attr( Td_bp=2, design=['Td_bp'], p0=PSI('P', 'T', T_amb + 273.15, 'Q', 1, self.working_fluid) / 1e5) fwp_ihe.set_attr(h=ref(cond_fwp, 1, 1e3)) # steam generator gs_es.set_attr(m=geo_mass_flow * geo_steam_share, T=T_brine_in, x=1, p0=5) gb_eb.set_attr(m=geo_mass_flow * (1 - geo_steam_share), T=T_brine_in, x=0) em_dr.set_attr() eb_em.set_attr(x=0.5) es_em.set_attr(x=0.5, design=['x']) eb_gm.set_attr(T=T_brine_in - 20) eco_dr.set_attr(Td_bp=-2) # main condenser air_cold.set_attr(p=p_amb, T=T_amb) air_hot.set_attr(T=15) # component parameters # turbines tur.set_attr(design=['eta_s'], offdesign=['cone', 'eta_s_char']) ls_valve.set_attr(pr=1, design=['pr']) # condensing ihe.set_attr(pr1=1, pr2=1, offdesign=['kA_char']) air_cond.set_attr(pr1=1, pr2=1, ttd_u=10, design=['ttd_u'], offdesign=['kA_char']) feed_water_pump.set_attr(design=['eta_s'], offdesign=['eta_s_char']) # steam generator evap_steam.set_attr( pr1=0.99, offdesign=['kA_char']) # no pr2 due to drum pressure balance evap_brine.set_attr( pr1=1, ttd_l=10, offdesign=['kA_char']) # no pr2 due to drum pressure balance eco.set_attr(pr1=1, pr2=1) geo_steam_pump.set_attr(eta_s=0.75, design=['eta_s'], offdesign=['eta_s_char']) self.nw.set_attr(iterinfo=False) self.nw.solve('design') self.nw.print_results() tur.set_attr(eta_s=0.9) feed_water_pump.set_attr(eta_s=0.75) tur_ihe.set_attr(h=None) fwp_ihe.set_attr(h=None) eb_gm.set_attr(T=None)
nw = network(fluids=fluids) nw.set_attr(p_unit='bar', T_unit='C', h_unit='kJ / kg', p_range=[0.01, 150], T_range=[5, 800], h_range=[10, 5000]) # %% components # main components turb = turbine('turbine') con = condenser('condenser') pu = pump('pump') steam_generator = heat_exchanger_simple('steam generator') closer = cycle_closer('cycle closer') # cooling water so_cw = source('cooling water inlet') si_cw = sink('cooling water outlet') # %% connections # main cycle fs_in = connection(closer, 'out1', turb, 'in1') ws = connection(turb, 'out1', con, 'in1') cond = connection(con, 'out1', pu, 'in1') fw = connection(pu, 'out1', steam_generator, 'in1') fs_out = connection(steam_generator, 'out1', closer, 'in1') nw.add_conns(fs_in, ws, cond, fw, fs_out) # cooling water cw_in = connection(so_cw, 'out1', con, 'in2') cw_out = connection(con, 'out2', si_cw, 'in1')