def setup_pipeline_network(self, fluid_list): """Setup a pipeline network.""" self.nw = network(fluids=fluid_list) self.nw.set_attr(p_unit='bar', T_unit='C', iterinfo=False) # %% components # main components pu = pump('pump') pi = pipe('pipeline') es = heat_exchanger_simple('energy balance closing') closer = cycle_closer('cycle closer') pu_pi = connection(pu, 'out1', pi, 'in1') pi_es = connection(pi, 'out1', es, 'in1') es_closer = connection(es, 'out1', closer, 'in1') closer_pu = connection(closer, 'out1', pu, 'in1') self.nw.add_conns(pu_pi, pi_es, es_closer, closer_pu) # %% parametrization of components pu.set_attr(eta_s=0.7) pi.set_attr(pr=0.95, L=100, ks=1e-5, D='var', Q=0) es.set_attr(pr=1) # %% parametrization of connections pu_pi.set_attr(p=20, T=100, m=10, fluid={self.nw.fluids[0]: 1}) # %% solving self.nw.solve('design')
def create_comps(self): for i in range(self.num_consumer - 1): j = str(i) self.comps['splitter_' + j] = splitter(self.label + '_splitter_' + j) self.comps['merge_' + j] = merge(self.label + '_merge_' + j) self.comps['consumer_' + j] = heat_exchanger_simple(self.label + '_consumer_' + j) self.comps['valve_' + j] = valve(self.label + '_valve_' + j) self.comps['feed_' + j] = pipe(self.label + '_pipe feed_' + j) self.comps['return_' + j] = pipe(self.label + '_pipe return_' + j) j = str(i + 1) self.comps['consumer_' + j] = heat_exchanger_simple(self.label + '_consumer_' + j)
def consumers(end_pipes): cons = {} for index, row in end_pipes.iterrows(): cons_name = "consumer" + str(int(row["USER_ID"])) cons[int(row['USER_ID'])] = heat_exchanger_simple(cons_name) cons[int(row["USER_ID"])].set_attr(Q=-row["Power"]) return cons
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')
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') # 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')
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})
cycle_closer, ) from tespy.tools import char_line, dc_cc import numpy as np # %% network btes = network(fluids=["water"], T_unit="K", p_unit="bar", h_unit="kJ / kg") # %% components fc = cycle_closer("cycle closer") pu = pump("pump") sp = splitter("splitter", num_out=3) # bhe: bhe1 = heat_exchanger_simple("BHE1") bhe2 = heat_exchanger_simple("BHE2") bhe3 = heat_exchanger_simple("BHE3") mg = merge("merge", num_in=3) cons = heat_exchanger_simple("consumer") ## components paramerization # pump # flow_char # provide volumetric flow in m^3 / s x = np.array( [ 0.00, 0.00001952885971862, 0.00390577194372,
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)
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'" bhe3 = heat_exchanger_simple(bhe_name) mg = merge('merge', num_in=3) cons = heat_exchanger_simple('consumer') # %% connections fc_pu = connection(fc_in, 'out1', pu, 'in1') pu_sp = connection(pu, 'out1', sp, 'in1')
from tespy.networks import network from tespy.connections import connection, ref from tespy.components import source, sink, pump, splitter, merge, heat_exchanger_simple, cycle_closer from tespy.tools import char_line, dc_cc import numpy as np # %% network btes = network(fluids=['water'], T_unit='K', p_unit='bar', h_unit='kJ / kg') # %% components fc = cycle_closer('cycle closer') pu = pump('pump') sp = splitter('splitter', num_out=3) # bhe: bhe1 = heat_exchanger_simple('BHE1') bhe2 = heat_exchanger_simple('BHE2') bhe3 = heat_exchanger_simple('BHE3') mg = merge('merge', num_in=3) cons = heat_exchanger_simple('consumer') ## components paramerization # pump # flow_char # provide volumetric flow in m^3 / s x = np.array([ 0.00, 0.00001952885971862, 0.00390577194372, 0.005858657915586, 0.007811543887448, 0.00976442985931, 0.011717315831173, 0.013670201803035, 0.015623087774897, 0.017575973746759, 0.019528859718621, 0.021481745690483, 0.023434631662345, 0.025387517634207, 0.027340403606069, 0.029293289577931,
# turbine part valve_turb = valve('turbine inlet valve') turbine_hp = turbine('high pressure turbine') split = splitter('extraction splitter') 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')