def test_network_missing_data_in_individual_design_case_file(): """ Test for missing data in individual design case files. """ nw = network(['water']) source = basics.source('source') pipe = piping.pipe('pipe', Q=0, pr=0.95, design=['pr'], offdesign=['zeta']) sink = basics.sink('sink') a = connection(source, 'out1', pipe, 'in1', m=1, p=1e5, T=293.15, fluid={'water': 1}) b = connection(pipe, 'out1', sink, 'in1', design_path='tmp2') nw.add_conns(a, b) nw.solve('design') nw.save('tmp') nw.save('tmp2') inputs = open('./tmp/conn.csv') all_lines = inputs.readlines() all_lines.pop(len(all_lines) - 1) inputs.close() with open('./tmp2/conn.csv', 'w') as out: for line in all_lines: out.write(line.strip() + '\n') offdesign_TESPyNetworkError(nw, design_path='tmp', init_only=True) shutil.rmtree('./tmp', ignore_errors=True) shutil.rmtree('./tmp2', ignore_errors=True)
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 setup_piping_network(self, instance): self.nw = network(['CH4'], T_unit='C', p_unit='bar') self.source = source('source') self.sink = sink('sink') self.c1 = connection(self.source, 'out1', instance, 'in1') self.c2 = connection(instance, 'out1', self.sink, 'in1') self.nw.add_conns(self.c1, self.c2)
def test_network_missing_data_in_design_case_files(self): """Test for missing data in design case files.""" self.setup_network_tests() pipe = piping.pipe('pipe', Q=0, pr=0.95, design=['pr'], offdesign=['zeta']) a = connection(self.source, 'out1', pipe, 'in1', m=1, p=1, T=293.15, fluid={'water': 1}) b = connection(pipe, 'out1', self.sink, 'in1') 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='tmp2', init_only=True) shutil.rmtree('./tmp', ignore_errors=True) shutil.rmtree('./tmp2', ignore_errors=True)
def setup(self): """ Set up network for electrolyzer tests. """ self.nw = network(['O2', 'H2', 'H2O'], T_unit='C', p_unit='bar') self.instance = water_electrolyzer('electrolyzer') fw = source('feed water') cw_in = source('cooling water') o2 = sink('oxygen sink') h2 = sink('hydrogen sink') cw_out = sink('cooling water sink') self.instance.set_attr(pr_c=0.99) cw_el = connection(cw_in, 'out1', self.instance, 'in1', fluid={ 'H2O': 1, 'H2': 0, 'O2': 0 }, T=20, p=1) el_cw = connection(self.instance, 'out1', cw_out, 'in1', T=45) self.nw.add_conns(cw_el, el_cw) fw_el = connection(fw, 'out1', self.instance, 'in2', m=0.1, T=20, p=10) el_o2 = connection(self.instance, 'out2', o2, 'in1') el_h2 = connection(self.instance, 'out3', h2, 'in1', T=50) self.nw.add_conns(fw_el, el_o2, el_h2)
def setup_network(self, instance): self.nw = network(['INCOMP::DowQ', 'NH3', 'N2', 'O2', 'Ar'], T_unit='C', p_unit='bar', v_unit='m3 / s') self.source = source('source') self.sink = sink('sink') self.c1 = connection(self.source, 'out1', instance, 'in1') self.c2 = connection(instance, 'out1', self.sink, 'in1') self.nw.add_conns(self.c1, self.c2)
def setup_combustion_chamber_stoich_error_tests(self): self.nw = network(['fuel', 'fuel_fg', 'Air'], p_range=[1e4, 1e6]) label = 'combustion chamber' self.instance = combustion.combustion_chamber_stoich(label) c1 = connection(basics.source('air'), 'out1', self.instance, 'in1') c2 = connection(basics.source('fuel'), 'out1', self.instance, 'in2') c3 = connection(self.instance, 'out1', basics.sink('flue gas'), 'in1') self.nw.add_conns(c1, c2, c3)
def setup_network_individual_offdesign(self): """ Set up network for individual offdesign tests. """ self.nw = network(['H2O'], T_unit='C', p_unit='bar', v_unit='m3 / s') so = basics.source('source') sp = nodes.splitter('splitter', num_out=2) self.pump1 = turbomachinery.pump('pump 1') self.sc1 = heat_exchangers.solar_collector('collector field 1') v1 = piping.valve('valve1') self.pump2 = turbomachinery.pump('pump 2') self.sc2 = heat_exchangers.solar_collector('collector field 2') v2 = piping.valve('valve2') me = nodes.merge('merge', num_in=2) si = basics.sink('sink') self.pump1.set_attr(eta_s=0.8, design=['eta_s'], offdesign=['eta_s_char']) self.pump2.set_attr(eta_s=0.8, design=['eta_s'], offdesign=['eta_s_char']) self.sc1.set_attr(pr=0.95, lkf_lin=3.33, lkf_quad=0.011, A=1252, E=700, Tamb=20, eta_opt=0.92, design=['pr'], offdesign=['zeta']) self.sc2.set_attr(pr=0.95, lkf_lin=3.5, lkf_quad=0.011, A=700, E=800, Tamb=20, eta_opt=0.92, design=['pr'], offdesign=['zeta']) fl = {'H2O': 1} inlet = connection(so, 'out1', sp, 'in1', T=50, p=3, fluid=fl) outlet = connection(me, 'out1', si, 'in1', p=3) self.sp_p1 = connection(sp, 'out1', self.pump1, 'in1') self.p1_sc1 = connection(self.pump1, 'out1', self.sc1, 'in1') self.sc1_v1 = connection(self.sc1, 'out1', v1, 'in1', p=3.1, T=90) v1_me = connection(v1, 'out1', me, 'in1') self.sp_p2 = connection(sp, 'out2', self.pump2, 'in1') self.p2_sc2 = connection(self.pump2, 'out1', self.sc2, 'in1') self.sc2_v2 = connection(self.sc2, 'out1', v2, 'in1', p=3.1, m=0.1) v2_me = connection(v2, 'out1', me, 'in2') self.nw.add_conns(inlet, outlet, self.sp_p1, self.p1_sc1, self.sc1_v1, v1_me, self.sp_p2, self.p2_sc2, self.sc2_v2, v2_me)
def test_duplicate_connection_labels(self): source1 = basics.source('source1') source2 = basics.source('source2') sink1 = basics.sink('sink1') sink2 = basics.sink('sink2') a = connection(source1, 'out1', sink1, 'in1', label='myconn') b = connection(source2, 'out1', sink2, 'in1', label='myconn') with raises(ValueError): self.nw.add_conns(a, b)
def test_combustion_chamber_missing_fuel(): """Test no fuel in network.""" nw = network(['H2O', 'N2', 'O2', 'Ar', 'CO2']) instance = combustion.combustion_chamber('combustion chamber') c1 = connection(basics.source('air'), 'out1', instance, 'in1') c2 = connection(basics.source('fuel'), 'out1', instance, 'in2') c3 = connection(instance, 'out1', basics.sink('flue gas'), 'in1') nw.add_conns(c1, c2, c3) with raises(TESPyComponentError): nw.solve('design', init_only=True)
def test_connection_creation_ValueError(): """Test ValueErrors creating connections.""" comb = combustion.combustion_engine('combustion engine') pipeline = piping.pipe('pipeline') with raises(ValueError): connection(comb, 'out6', pipeline, 'in1') with raises(ValueError): connection(comb, 'out1', pipeline, 'in5')
def setup_heat_exchanger_network(self, instance): self.inl2 = source('inlet 2') self.outl2 = sink('outlet 2') self.c1 = connection(self.inl1, 'out1', instance, 'in1') self.c2 = connection(instance, 'out1', self.outl1, 'in1') self.c3 = connection(self.inl2, 'out1', instance, 'in2') self.c4 = connection(instance, 'out2', self.outl2, 'in1') self.nw.add_conns(self.c1, self.c2, self.c3, self.c4)
def test_network_no_progress(self): """Test no convergence progress.""" self.setup_network_tests() pipe = piping.pipe('pipe', pr=1, Q=-100e3) a = connection(self.source, 'out1', pipe, 'in1', m=1, p=1, T=280, fluid={'water': 1}) b = connection(pipe, '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_network_max_iter(self): """Test reaching maximum iteration count.""" self.setup_network_tests() pipe = piping.pipe('pipe', pr=1, Q=100e3) a = connection(self.source, 'out1', pipe, 'in1', m=1, p=1, T=280, fluid={'water': 1}) b = connection(pipe, '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_max_iter(): nw = network(['water']) source = basics.source('source') pipe = piping.pipe('pipe', pr=1, Q=100e3) sink = basics.sink('sink') a = connection(source, 'out1', pipe, 'in1', m=1, p=1e5, T=280, fluid={'water': 1}) b = connection(pipe, 'out1', sink, 'in1') nw.add_conns(a, b) nw.solve('design', max_iter=2) msg = ('This test must result in the itercount being equal to the max ' 'iter statement.') eq_(nw.max_iter, nw.iter + 1, msg)
def test_network_no_progress(): nw = network(['water']) source = basics.source('source') pipe = piping.pipe('pipe', pr=1, Q=-100e3) sink = basics.sink('sink') a = connection(source, 'out1', pipe, 'in1', m=1, p=1e5, T=280, fluid={'water': 1}) b = connection(pipe, 'out1', sink, 'in1') nw.add_conns(a, b) 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.') eq_(nw.progress, False, msg)
def test_turbine_missing_char_parameter(): """Turbine with invalid parameter for eta_s_char function.""" nw = network(['CH4']) so = basics.source('source') si = basics.sink('sink') instance = turbomachinery.turbine('turbine') c1 = connection(so, 'out1', instance, 'in1') c2 = connection(instance, 'out1', si, 'in1') nw.add_conns(c1, c2) instance.set_attr(eta_s_char=dc_cc( func=char_line([0, 1], [1, 2]), is_set=True, param=None)) nw.solve('design', init_only=True) with raises(ValueError): instance.eta_s_char_func()