def busses_add_comps(c, *args): r""" Adds components to busses according to data from .csv file. Parameters ---------- c : pandas.core.series.Series Component information from .csv-file. args[0] : pandas.core.frame.DataFrame DataFrame containing all created busses. args[1] : pandas.core.frame.DataFrame DataFrame containing all created characteristic lines. """ i = 0 for b in c.busses: p, P_ref, char = c.bus_param[i], c.bus_P_ref[i], c.bus_char[i] values = char == args[1]['id'] char = cmp_char.characteristics(x=args[1][values].x.values[0], y=args[1][values].y.values[0]) # add component with corresponding details to bus args[0].instance[b == args[0]['label']].values[0].add_comps({'c': c.instance, 'p': p, 'P_ref': P_ref, 'char': char}) i += 1
def test_set_attr_errors(self): # labels = [5, 'Label,', 'Labe;l', 'Label.'] for l in labels: self.cmp_instanciation_ValueError(l) # ValueErrors self.set_attr_ValueError(self.comp, mode=5) self.set_attr_ValueError(self.comp, offdesign=['Q']) self.set_attr_ValueError(self.conn, offdesign=['f']) self.set_attr_ValueError(self.nw, m_unit='kg') self.set_attr_ValueError(self.nw, h_unit='kg') self.set_attr_ValueError(self.nw, p_unit='kg') self.set_attr_ValueError(self.nw, T_unit='kg') self.set_attr_ValueError(self.nw, v_unit='kg') self.create_connection_ValueError('source') self.create_connection_ValueError('target') # TypeErrors self.set_attr_TypeError(self.comp, P=[5]) self.set_attr_TypeError(self.comp, tiP_char=None) self.set_attr_TypeError(self.comp, design='f') self.set_attr_TypeError(self.conn, design='h') self.set_attr_TypeError(self.conn, fluid_balance=1) self.set_attr_TypeError(self.conn, h0=[4]) self.set_attr_TypeError(self.conn, fluid=5) self.set_attr_TypeError(self.nw, p_range=5) self.set_attr_TypeError(self.nw, h_range=5) self.set_attr_TypeError(self.nw, T_range=5) self.bus_add_comps_TypeError({'c': self.conn}) self.bus_add_comps_TypeError({'f': self.comp}) self.bus_add_comps_TypeError({'c': self.comp, 'char': 'Hi'}) self.bus_add_comps_TypeError({'c': self.comp, 'p': 5}) self.bus_add_comps_TypeError({'c': self.comp, 'P_ref': 'what'}) self.create_ref_TypeError([self.conn, 7, 'hi']) self.create_ref_TypeError([self.conn, 'hi', 0]) self.create_ref_TypeError([self.comp, 1, 0]) # KeyErrors self.set_attr_KeyError(self.comp, wow=5) self.set_attr_KeyError(self.conn, jey=5) self.set_attr_KeyError(self.sub, a=7) self.get_attr_KeyError(self.comp, 'wow') self.get_attr_KeyError(self.conn, 'key') self.get_attr_KeyError(self.bus, 'components') self.get_attr_KeyError(con.ref(self.conn, 1, 0), 'comp') self.get_attr_KeyError(self.nw, 'test') self.get_attr_KeyError(self.sub, 'test') self.get_attr_KeyError(cmp_char.characteristics(), 'test') self.get_attr_KeyError(hlp.data_container(), 'somekey')
def construct_chars(c): """ creates TESPy characteristic functions :param c: connection information :type c: pandas.core.series.Series :returns: instance (*tespy.components.characteristics*) - TESPy characteristics object """ char = cmp_char.characteristics(x=c.x, y=c.y) return char
def test_char_number_of_points(): cmp_char.characteristics(x=[0, 1, 2], y=[1, 2, 3, 4])
def test_char_missing_key(): cmp_char.characteristics(a=6)
def construct_comps(c, *args): r""" Creates TESPy component from class name provided in the .csv-file and specifies its parameters. Parameters ---------- c : pandas.core.series.Series Component information from .csv-file. args[0] : pandas.core.frame.DataFrame DataFrame containing the x and y data of characteristic functions. args[1] : pandas.core.frame.DataFrame DataFrame containing the x, y, z1 and z2 data of characteristic maps. Returns ------- instance : tespy.components.components.component TESPy component object. """ if c.interface: instance = cmp.subsys_interface(c.label, num_inter=1) else: target_class = getattr(cmp, c.cp) instance = target_class(c.label) kwargs = {} # basic properties for key in ['mode', 'design', 'offdesign']: kwargs[key] = c[key] for key, value in instance.attr().items(): if key in c: # component parameters if isinstance(value, hlp.dc_cp): dc = hlp.dc_cp(val=c[key], is_set=c[key + '_set'], is_var=c[key + '_var']) kwargs[key] = dc # component parameters if isinstance(value, hlp.dc_simple): dc = hlp.dc_simple(val=c[key], val_set=c[key + '_set']) kwargs[key] = dc # component characteristics elif isinstance(value, hlp.dc_cc): # finding x and y values of the characteristic function values = args[0]['id'] == c[key] try: x = args[0][values].x.values[0] y = args[0][values].y.values[0] except IndexError: # if characteristics are missing (for compressor map atm) x = cmp_char.characteristics().x y = cmp_char.characteristics().y msg = 'Could not find x and y values for characteristic line, using defaults instead for function ' + key + ' at component ' + c.label + '.' logging.warning(msg) char = cmp_char.characteristics(x=x, y=y, method=c[key + '_method'], comp=instance.component()) dc = hlp.dc_cc(is_set=c[key + '_set'], method=c[key + '_method'], param=c[key + '_param'], func=char, x=x, y=y) kwargs[key] = dc # component characteristics elif isinstance(value, hlp.dc_cm): # finding x and y values of the characteristic function values = args[1]['id'] == c[key] try: x = list(args[1][values].x.values[0]) y = list(args[1][values].y.values[0]) z1 = list(args[1][values].z1.values[0]) z2 = list(args[1][values].z2.values[0]) except IndexError: # if characteristics are missing (for compressor map atm) x = cmp_char.char_map().x y = cmp_char.char_map().y z1 = cmp_char.char_map().z1 z2 = cmp_char.char_map().z2 msg = 'Could not find x, y, z1 and z2 values for characteristic map, using defaults instead.' logging.warning(msg) char_map = cmp_char.char_map(x=x, y=y, z1=z1, z2=z2, method=c[key + '_method'], comp=instance.component()) dc = hlp.dc_cm(is_set=c[key + '_set'], method=c[key + '_method'], param=c[key + '_param'], func=char_map, x=x, y=y, z1=z1, z2=z2) kwargs[key] = dc # grouped component parameters elif isinstance(value, hlp.dc_gcp): dc = hlp.dc_gcp(method=c[key]) kwargs[key] = dc instance.set_attr(**kwargs) return instance
fw = con.connection(pump, 'out1', steam_generator, 'in1') fs_out = con.connection(steam_generator, 'out1', sink, 'in1') nw.add_conns(fs_in, ws, cond, fw, fs_out) # cooling water cw_in = con.connection(source_cw, 'out1', condenser, 'in2') cw_out = con.connection(condenser, 'out2', sink_cw, 'in1') nw.add_conns(cw_in, cw_out) # %% busses # characteristic function for generator efficiency x = np.array([0, 0.2, 0.4, 0.6, 0.8, 1, 1.2]) y = np.array([0, 0.86, 0.9, 0.93, 0.95, 0.96, 0.95]) gen = cmp_char.characteristics(x=x, y=y) # motor of pump has a constant efficiency power = con.bus('total output power') power.add_comps({ 'c': turbine, 'p': 'P', 'char': gen }, { 'c': pump, 'char': 1 / 0.95 }) nw.add_busses(power) # %% parametrization of components
def setup(self): # %% network self.nw = nwk.network(fluids=['water', 'NH3'], T_unit='C', p_unit='bar', h_unit='kJ / kg', m_unit='kg / s') # %% components # sources & sinks c_in = cmp.source('coolant in') cb = cmp.source('consumer back flow') cf = cmp.sink('consumer feed flow') amb_in = cmp.source('source ambient') amb_out = cmp.sink('sink ambient') ic_in = cmp.source('source intercool') ic_out = cmp.sink('sink intercool') c_out = cmp.sink('coolant out') # consumer system cd = cmp.heat_exchanger('condenser') rp = cmp.pump('recirculation pump') cons = cmp.heat_exchanger_simple('consumer') # evaporator system va = cmp.valve('valve') dr = cmp.drum('drum') ev = cmp.heat_exchanger('evaporator') su = cmp.heat_exchanger('superheater') pu = cmp.pump('pump evaporator') # compressor-system cp1 = cmp.compressor('compressor 1') cp2 = cmp.compressor('compressor 2') he = cmp.heat_exchanger('intercooler') # busses x = np.array([0, 0.7, 1, 1.3]) y = 1 / np.array([0.8, 0.95, 1, 0.98]) / 0.9583794 motor = cmp_char.characteristics(x=x, y=y) self.power = con.bus('total compressor power') self.power.add_comps({ 'c': cp1, 'char': motor }, { 'c': cp2, 'char': motor }) self.heat = con.bus('total delivered heat') self.heat.add_comps({'c': cd, 'char': -1}) self.nw.add_busses(self.power, self.heat) # %% connections # consumer system c_in_cd = con.connection(c_in, 'out1', cd, 'in1') cb_rp = con.connection(cb, 'out1', rp, 'in1') rp_cd = con.connection(rp, 'out1', cd, 'in2') self.cd_cons = con.connection(cd, 'out2', cons, 'in1') cons_cf = con.connection(cons, 'out1', cf, 'in1') self.nw.add_conns(c_in_cd, cb_rp, rp_cd, self.cd_cons, cons_cf) # connection condenser - evaporator system cd_va = con.connection(cd, 'out1', va, 'in1') self.nw.add_conns(cd_va) # evaporator system va_dr = con.connection(va, 'out1', dr, 'in1') dr_pu = con.connection(dr, 'out1', pu, 'in1') pu_ev = con.connection(pu, 'out1', ev, 'in2') ev_dr = con.connection(ev, 'out2', dr, 'in2') dr_su = con.connection(dr, 'out2', su, 'in2') self.nw.add_conns(va_dr, dr_pu, pu_ev, ev_dr, dr_su) self.amb_in_su = con.connection(amb_in, 'out1', su, 'in1') su_ev = con.connection(su, 'out1', ev, 'in1') ev_amb_out = con.connection(ev, 'out1', amb_out, 'in1') self.nw.add_conns(self.amb_in_su, su_ev, ev_amb_out) # connection evaporator system - compressor system su_cp1 = con.connection(su, 'out2', cp1, 'in1') self.nw.add_conns(su_cp1) # compressor-system cp1_he = con.connection(cp1, 'out1', he, 'in1') he_cp2 = con.connection(he, 'out1', cp2, 'in1') cp2_c_out = con.connection(cp2, 'out1', c_out, 'in1') ic_in_he = con.connection(ic_in, 'out1', he, 'in2') he_ic_out = con.connection(he, 'out2', ic_out, 'in1') self.nw.add_conns(cp1_he, he_cp2, ic_in_he, he_ic_out, cp2_c_out) # %% component parametrization # condenser system rp.set_attr(eta_s=0.8, design=['eta_s'], offdesign=['eta_s_char']) cons.set_attr(pr=1, design=['pr'], offdesign=['zeta']) # evaporator system ev.set_attr(pr1=1, pr2=.999, ttd_l=5, design=['ttd_l'], offdesign=['kA'], kA_char1='EVA_HOT', kA_char2='EVA_COLD') # characteristic line for superheater kA x = np.array( [0, 0.045, 0.136, 0.244, 0.43, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2]) y = np.array( [0, 0.037, 0.112, 0.207, 0.5, 0.8, 0.85, 0.9, 0.95, 1, 1.04, 1.07]) su_char = hlp.dc_cc(x=x, y=y, param='m') su.set_attr(kA_char1='default', kA_char2=su_char, offdesign=['zeta1', 'zeta2', 'kA']) pu.set_attr(eta_s=0.8, design=['eta_s'], offdesign=['eta_s_char']) # compressor system cp1.set_attr(eta_s=0.8, design=['eta_s'], offdesign=['eta_s_char']) cp2.set_attr(eta_s=0.8, design=['eta_s'], offdesign=['eta_s_char']) # characteristic line for intercooler kA x = np.linspace(0, 2.5, 26) y = np.array([ 0.000, 0.164, 0.283, 0.389, 0.488, 0.581, 0.670, 0.756, 0.840, 0.921, 1.000, 1.078, 1.154, 1.228, 1.302, 1.374, 1.446, 1.516, 1.585, 1.654, 1.722, 1.789, 1.855, 1.921, 1.986, 2.051 ]) he_char_cold = hlp.dc_cc(x=x, y=y, param='m') he.set_attr(kA_char1='default', kA_char2=he_char_cold, offdesign=['zeta1', 'zeta2', 'kA']) cd.set_attr(pr2=0.998, design=['pr2'], offdesign=['zeta2', 'kA']) # %% connection parametrization # condenser system c_in_cd.set_attr(fluid={'water': 0, 'NH3': 1}, p=60) cb_rp.set_attr(T=60, p=10, fluid={'water': 1, 'NH3': 0}) self.cd_cons.set_attr(T=105) cons_cf.set_attr(h=con.ref(cb_rp, 1, 0), p=con.ref(cb_rp, 1, 0)) cd_va.set_attr(p=con.ref(c_in_cd, 1, -1000), Td_bp=-5, h0=500, design=['Td_bp']) # evaporator system cold side pu_ev.set_attr(m=con.ref(va_dr, 10, 0), p0=5) dr_su.set_attr(p0=5, T=5) su_cp1.set_attr(p=con.ref(dr_su, 1, -5000), Td_bp=5, h0=1700, design=['Td_bp', 'p']) # evaporator system hot side self.amb_in_su.set_attr(m=20, T=12, p=1, fluid={'water': 1, 'NH3': 0}) su_ev.set_attr(p=con.ref(self.amb_in_su, 1, -100), design=['p']) ev_amb_out.set_attr() # compressor-system cp1_he.set_attr(p=15) he_cp2.set_attr(T=40, p=con.ref(cp1_he, 1, -1000), design=['T', 'p']) ic_in_he.set_attr(p=1, T=20, m=5, fluid={'water': 1, 'NH3': 0}) he_ic_out.set_attr(p=con.ref(ic_in_he, 1, -200), design=['p']) cp2_c_out.set_attr(p=con.ref(c_in_cd, 1, 0), h=con.ref(c_in_cd, 1, 0))
cw_o = con.connection(cond, 'out2', cw_out, 'in1') nw.add_conns(cw_i, cw_o, dh_i, dh_o) # %% busses # motor efficiency x = np.array([0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1, 1.05, 1.1, 1.15, 1.2, 10]) y = np.array([0.01, 0.3148, 0.5346, 0.6843, 0.7835, 0.8477, 0.8885, 0.9145, 0.9318, 0.9443, 0.9546, 0.9638, 0.9724, 0.9806, 0.9878, 0.9938, 0.9982, 1.0009, 1.002, 1.0015, 1, 0.9977, 0.9947, 0.9909, 0.9853, 0.9644]) / 0.97 mot1 = cmp_char.characteristics(x=x, y=y) mot2 = cmp_char.characteristics(x=x, y=y) mot3 = cmp_char.characteristics(x=x, y=y) mot4 = cmp_char.characteristics(x=x, y=y) # generator efficiency x = np.array([0.100, 0.345, 0.359, 0.383, 0.410, 0.432, 0.451, 0.504, 0.541, 0.600, 0.684, 0.805, 1.000, 1.700, 10]) y = np.array([0.976, 0.989, 0.990, 0.991, 0.992, 0.993, 0.994, 0.995, 0.996, 0.997, 0.998, 0.999, 1.000, 0.999, 0.99]) * 0.984 gen1 = cmp_char.characteristics(x=x, y=y) gen2 = cmp_char.characteristics(x=x, y=y) power = con.bus('power output') power.add_comps({'c': g_turb, 'char': gen1}, {'c': comp, 'char': 1},