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 = HeatExchangerSimple('energy balance closing') closer = CycleCloser('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['feed_' + j] = Pipe(self.label + '_pipe feed_' + j) self.comps['return_' + j] = Pipe(self.label + '_pipe return_' + j) for i in range(self.num_consumer): 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] = HeatExchangerSimple(self.label + '_consumer_' + j) self.comps['valve_' + j] = Valve(self.label + '_valve_' + j)
def test_Network_missing_data_in_individual_design_case_file(self): """Test for missing data in individual design case files.""" self.setup_Network_tests() pi = Pipe('pipe', Q=0, pr=0.95, design=['pr'], offdesign=['zeta']) a = Connection(self.source, 'out1', pi, 'in1', m=1, p=1, T=293.15, fluid={'water': 1}) b = Connection(pi, 'out1', self.sink, 'in1', design_path='tmp2') self.nw.add_conns(a, b) self.nw.solve('design') self.nw.save('tmp') self.nw.save('tmp2') inputs = open('./tmp/connections.csv') all_lines = inputs.readlines() all_lines.pop(len(all_lines) - 1) inputs.close() with open('./tmp2/connections.csv', 'w') as out: for line in all_lines: out.write(line.strip() + '\n') self.offdesign_TESPyNetworkError(design_path='tmp', init_only=True) shutil.rmtree('./tmp', ignore_errors=True) shutil.rmtree('./tmp2', ignore_errors=True)
def test_ref_creation_error(): """Test errors creating reference objects.""" comb = CombustionEngine('combustion engine') pipeline = Pipe('pipeline') conn = Connection(comb, 'out1', pipeline, 'in1') create_ref_TypeError([conn, 7, 'hi']) create_ref_TypeError([conn, 'hi', 0]) create_ref_TypeError([comb, 1, 0])
def test_set_attr_errors(): """Test errors of set_attr methods.""" nw = Network(['water', 'air']) comb = CombustionEngine('combustion engine') pipeline = Pipe('pipeline') conn = Connection(comb, 'out1', pipeline, 'in1') mybus = Bus('mybus') # ValueErrors set_attr_ValueError(comb, offdesign=['Q']) set_attr_ValueError(conn, offdesign=['f']) set_attr_ValueError(nw, m_unit='kg') set_attr_ValueError(nw, h_unit='kg') set_attr_ValueError(nw, p_unit='kg') set_attr_ValueError(nw, T_unit='kg') set_attr_ValueError(nw, v_unit='kg') set_attr_ValueError(conn, state=5) # TypeErrors set_attr_TypeError(comb, P=[5]) set_attr_TypeError(comb, P=[5]) set_attr_TypeError(comb, tiP_char=7) set_attr_TypeError(comb, design='f') set_attr_TypeError(comb, lamb=dc_cc()) set_attr_TypeError(comb, design_path=7) set_attr_TypeError(comb, local_design=5) set_attr_TypeError(comb, local_offdesign=5) set_attr_TypeError(pipeline, hydro_group=5) set_attr_TypeError(comb, printout=5) set_attr_TypeError(conn, design='h') set_attr_TypeError(conn, fluid_balance=1) set_attr_TypeError(conn, h0=[4]) set_attr_TypeError(conn, fluid=5) set_attr_TypeError(conn, design_path=5) set_attr_TypeError(conn, local_design=5) set_attr_TypeError(conn, local_offdesign=5) set_attr_TypeError(conn, printout=5) set_attr_TypeError(conn, state='f') set_attr_TypeError(nw, m_range=5) set_attr_TypeError(nw, p_range=5) set_attr_TypeError(nw, h_range=5) set_attr_TypeError(nw, iterinfo=5) set_attr_TypeError(mybus, P='some value') set_attr_TypeError(mybus, printout=5) # KeyErrors set_attr_KeyError(dc_cc(), x=7) set_attr_KeyError(comb, wow=5) set_attr_KeyError(conn, jey=5) set_attr_KeyError(mybus, power_output=100000) # NotImplementedError set_attr_NotImplementedError(conn, Td_bp=Ref(conn, 1, 0))
def test_Connection_creation_TypeError(): """Test TypeErrors creating connections.""" comb = CombustionEngine('combustion engine') pipeline = Pipe('pipeline') with raises(TypeError): Connection(comb, 'out1', 7, 'in1') with raises(TypeError): Connection(comb, 'out1', pipeline, 'in1', label=5)
def test_Connection_creation_ValueError(): """Test ValueErrors creating connections.""" comb = CombustionEngine('combustion engine') pipeline = Pipe('pipeline') with raises(ValueError): Connection(comb, 'out6', pipeline, 'in1') with raises(ValueError): Connection(comb, 'out1', pipeline, 'in5')
def test_Network_max_iter(self): """Test reaching maximum iteration count.""" self.setup_Network_tests() pi = Pipe('pipe', pr=1, Q=100e3) a = Connection(self.source, 'out1', pi, 'in1', m=1, p=1, T=280, fluid={'water': 1}) b = Connection(pi, 'out1', self.sink, 'in1') self.nw.add_conns(a, b) self.nw.solve('design', max_iter=2) msg = ('This test must result in the itercount being equal to the max ' 'iter statement.') assert self.nw.max_iter == self.nw.iter + 1, msg
def test_Network_no_progress(self): """Test no convergence progress.""" self.setup_Network_tests() pi = Pipe('pipe', pr=1, Q=-100e3) a = Connection(self.source, 'out1', pi, 'in1', m=1, p=1, T=280, fluid={'water': 1}) b = Connection(pi, 'out1', self.sink, 'in1') self.nw.add_conns(a, b) self.nw.solve('design') msg = ('This test must result in a calculation making no progress, as ' 'the pipe\'s outlet enthalpy is below fluid property range.') assert self.nw.progress is False, msg
def test_Bus_add_comps_errors(): """Test errors adding components to busses.""" mybus = Bus('mybus') comb = CombustionEngine('combustion engine') pipeline = Pipe('pipeline') conn = Connection(comb, 'out1', pipeline, 'in1') bus_add_comps_TypeError(mybus, {'comp': conn}) bus_add_comps_TypeError(mybus, {'f': comb}) bus_add_comps_TypeError(mybus, {'comp': comb, 'char': 'Hi'}) bus_add_comps_TypeError(mybus, {'comp': comb, 'param': 5}) bus_add_comps_TypeError(mybus, {'comp': comb, 'P_ref': 'what'}) bus_add_comps_TypeError(mybus, comb) with raises(ValueError): mybus.add_comps({'comp': comb, 'base': 5})
def pipe_return_definition(df_pipes_data): pb = {} for index, row in df_pipes_data.iterrows(): #pipe_name_back = "pipe" + str(row["ID"]) + "_back" ks = row["Roughness"] L = row["LENGTH"] D = row["Diameter"] kA = row["Ch"] pb[row['ID']] = Pipe("pipe" + str(row["ID"]) + "_back", ks=ks, L=L, D=D, kA=kA) return pb
def test_get_attr_errors(): """Test errors of get_attr methods.""" nw = Network(['water', 'air']) comb = CombustionEngine('combustion engine') pipeline = Pipe('pipeline') conn = Connection(comb, 'out1', pipeline, 'in1') mybus = Bus('mybus') sub = Subsystem('MySub') get_attr_KeyError(comb, 'wow') get_attr_KeyError(conn, 'key') get_attr_KeyError(mybus, 'components') get_attr_KeyError(nw, 'missing') get_attr_KeyError(Ref(conn, 1, 0), 'comp') get_attr_KeyError(sub, 'test') get_attr_KeyError(CharLine(), 'test') get_attr_KeyError(DataContainer(), 'somekey') get_attr_KeyError(CharMap(), 'Stuff')
# -*- coding: utf-8 -*- from tespy.connections import Connection from tespy.components import Source, Sink, Pipe from tespy.networks import Network from tespy.tools import document_model 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)
# 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']) pif7 = Pipe('pipe7_feed', ks=7e-5, L=175, D=0.15, offdesign=['kA_char']) pif8 = Pipe('pipe8_feed', ks=7e-5, L=75, D=0.15, offdesign=['kA_char']) pif10 = Pipe('pipe10_feed', ks=7e-5, L=450, D=0.1, offdesign=['kA_char']) pif11 = Pipe('pipe11_feed', ks=7e-5, L=60, D=0.04, offdesign=['kA_char']) pif16 = Pipe('pipe16_feed', ks=7e-5, L=30, D=0.065, offdesign=['kA_char']) pif17 = Pipe('pipe17_feed', ks=7e-5, L=250, D=0.065, offdesign=['kA_char']) pif21 = Pipe('pipe21_feed', ks=7e-5, L=30, D=0.04, offdesign=['kA_char']) # pipe_back
def test_Pipe(self): """Test component properties of pipe.""" instance = Pipe('pipe') self.setup_piping_network(instance)