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') # %% connections # consumer system c_in_cd = connection(cc, 'out1', cd, 'in1')
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)
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)