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')
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') # evaporator system va = valve('valve') dr = drum('drum') ev = heat_exchanger('evaporator')
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_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') el_cw_hot = connection(el, 'out1', cw_hot, 'in1')
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']) pif4 = pipe('pipe4_feed', ks=7e-5, L=50, D=0.15, offdesign=['kA_char'])
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') nw.add_conns(scr_s_merge, scr_b_merge, merge_sink)
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') sf_comb = connection(sf, 'out1', chp, 'in4') comb_fg = connection(chp, 'out3', fg, 'in1')
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 # the collector. E is missing, thus energy balance for radiation is not
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'" bhe3 = heat_exchanger_simple(bhe_name)
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 preheater = heat_exchanger('preheater') # working fluid source_wf = source('working fluid source') sink_wf = sink('working fluid sink') #brine source_b = source('brine source') sink_b = sink('brine sink') # connections # main cycle # geo-fluid preheater_wf_in = connection(source_wf, 'out1', preheater, 'in2') preheater_wf_out = connection(preheater, 'out2', sink_wf, 'in1') brine_in = connection(source_b, 'out1', preheater, 'in1') brine_out = connection(preheater, 'out1', sink_b, 'in1') nw.add_conns(preheater_wf_in, preheater_wf_out) nw.add_conns(brine_in, brine_out) #nw.add_conns(preheater_wf_in, preheater_wf_out, brine_in, brine_out) # parametrization of components
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) # main cycle part 1
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') # DH Network dh_source = source('District Heating source') dh_sink = sink('dh sink')
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') ev = heat_exchanger('evaporator') su = heat_exchanger('superheater') pu = pump('pump evaporator')
# 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_ws = connection(turbine_lp, 'out1', merge_ws, 'in1')
# 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') mer_cond = connection(mer, 'out1', cond, 'in1')
# 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') ihe_condenser = connection(ihe, 'out1', condenser, 'in1')
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 va = valve('valve')
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 condenser.set_attr(pr1=0.8889, pr2=1)
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') pump_ihe = connection(pump, 'out1', ihe, 'in2')
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})
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') steam_cycle_closer = cycle_closer('steam cycle closer') # district heating part dh_source = source('district heating source') dh_sink = sink('district heating sink') # %% connections
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') evaporator_turbine = connection(evaporator, 'out3', turbine, 'in1')
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 cd = condenser('condenser')
# 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 # for the first calculation run
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') close_rp = connection(cons_closer, 'out1', rp, 'in1') rp_cd = connection(rp, 'out1', cd, 'in2')
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') # evaporator system
# %% 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') # district heating dh_in = source('district heating backflow') dh_out = sink('district heating feedflow') # %% connections # gas turbine part c_in = connection(air, 'out1', comp, 'in1') c_out = connection(comp, 'out1', c_c, '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)
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'" bhe3 = heat_exchanger_simple(bhe_name)