예제 #1
0
    def setup(self):
        """Set up network for electrolyzer tests."""
        self.nw = Network(['O2', 'H2', 'H2O'], T_unit='C', p_unit='bar')
        self.instance = WaterElectrolyzer('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=0.99, eta=1)

        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', label='h2o')
        el_o2 = Connection(self.instance, 'out2', o2, 'in1')
        el_h2 = Connection(self.instance, 'out3', h2, 'in1', label='h2')

        self.nw.add_conns(fw_el, el_o2, el_h2)
예제 #2
0
    def setup_CombustionChamberStoich_model(self):
        """Set up the model using the stoichimetric combustion chamber."""
        # %% network setup
        fluid_list = ['myAir', 'myFuel', 'myFuel_fg']
        self.nw2 = Network(fluids=fluid_list,
                           p_unit='bar',
                           T_unit='C',
                           p_range=[0.5, 20],
                           T_range=[10, 2000])

        # %% components
        amb = Source('ambient')
        sf = Source('fuel')
        cc = CombustionChamberStoich('combustion')
        cp = Compressor('compressor')
        gt = Turbine('turbine')
        fg = Sink('flue gas outlet')

        # %% connections
        amb_cp = Connection(amb, 'out1', cp, 'in1')
        cp_cc = Connection(cp, 'out1', cc, 'in1')
        sf_cc = Connection(sf, 'out1', cc, 'in2')
        cc_gt = Connection(cc, 'out1', gt, 'in1', label='flue gas after cc')
        gt_fg = Connection(gt, 'out1', fg, 'in1', label='flue gas after gt')

        self.nw2.add_conns(amb_cp, cp_cc, sf_cc, cc_gt, gt_fg)

        # %% component parameters
        cc.set_attr(fuel={
            'CH4': 0.96,
            'CO2': 0.04
        },
                    air={
                        'Ar': 0.0129,
                        'N2': 0.7553,
                        'CO2': 0.0004,
                        'O2': 0.2314
                    },
                    fuel_alias='myFuel',
                    air_alias='myAir',
                    lamb=3)
        cp.set_attr(eta_s=0.9, pr=15)
        gt.set_attr(eta_s=0.9)

        # %% connection parameters
        amb_cp.set_attr(T=20,
                        p=1,
                        m=100,
                        fluid={
                            'myAir': 1,
                            'myFuel': 0,
                            'myFuel_fg': 0
                        })
        sf_cc.set_attr(T=20, fluid={'myAir': 0, 'myFuel': 1, 'myFuel_fg': 0})
        gt_fg.set_attr(p=1)

        # %% solving
        self.nw2.solve(mode='design')
예제 #3
0
파일: test_errors.py 프로젝트: oemof/tespy
 def test_duplicate_Connection_labels(self):
     source1 = Source('source1')
     source2 = Source('source2')
     sink1 = Sink('sink1')
     sink2 = 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)
예제 #4
0
    def setup(self):

        self.nw = Network(['H2O', 'N2', 'O2', 'Ar', 'CO2', 'CH4'],
                          T_unit='C',
                          p_unit='bar',
                          v_unit='m3 / s')
        self.fuel = Source('fuel')
        self.air = Source('ambient air')
        self.fg = Sink('flue gas')
예제 #5
0
파일: test_errors.py 프로젝트: oemof/tespy
 def setup_CombustionChamberStoich_error_tests(self):
     Memorise.add_fluids({'CH4': 'HEOS', 'O2': 'HEOS', 'N2': 'HEOS'})
     self.nw = Network(['fuel', 'fuel_fg', 'Air'], p_range=[1e4, 1e6])
     label = 'combustion chamber'
     self.instance = CombustionChamberStoich(label)
     c1 = Connection(Source('air'), 'out1', self.instance, 'in1')
     c2 = Connection(Source('fuel'), 'out1', self.instance, 'in2')
     c3 = Connection(self.instance, 'out1', Sink('flue gas'), 'in1')
     self.nw.add_conns(c1, c2, c3)
예제 #6
0
파일: test_errors.py 프로젝트: oemof/tespy
 def test_Connection_error_target(self):
     source1 = Source('source1')
     source2 = Source('source2')
     sink = Sink('sink')
     a = Connection(source1, 'out1', sink, 'in1')
     b = Connection(source2, 'out1', sink, 'in1')
     self.nw.add_conns(a, b)
     with raises(TESPyNetworkError):
         self.nw.check_network()
예제 #7
0
파일: test_errors.py 프로젝트: oemof/tespy
def test_CombustionChamber_missing_oxygen():
    """Test no oxygen in network."""
    nw = Network(['H2O', 'N2', 'Ar', 'CO2', 'CH4'])
    instance = CombustionChamber('combustion chamber')
    c1 = Connection(Source('air'), 'out1', instance, 'in1')
    c2 = Connection(Source('fuel'), 'out1', instance, 'in2')
    c3 = Connection(instance, 'out1', Sink('flue gas'), 'in1')
    nw.add_conns(c1, c2, c3)
    with raises(TESPyComponentError):
        nw.solve('design', init_only=True)
예제 #8
0
파일: test_errors.py 프로젝트: oemof/tespy
 def test_bad_fluids_in_fluid_vector(self):
     source1 = Source('source1')
     sink1 = Sink('sink1')
     a = Connection(source1, 'out1', sink1, 'in1', fluid={'air': 1})
     self.nw.add_conns(a)
     with raises(TESPyNetworkError):
         self.nw.solve('design')
예제 #9
0
    def setup(self):
        self.Tamb = 20
        self.pamb = 1
        fluids = ['Air']

        # turbine part
        self.nw = Network(fluids=fluids)
        self.nw.set_attr(p_unit='bar', T_unit='C', h_unit='kJ / kg')

        # components
        so = Source('inlet')
        tu = Turbine('compressor')
        si = Sink('outlet')

        # fuel exergy bus
        self.exergy_fuel = Bus('fuel exergy')
        self.exergy_fuel.add_comps({'comp': si}, {'comp': so, 'base': 'bus'})
        # product exergy bus
        self.exergy_prod = Bus('product exergy')
        self.exergy_prod.add_comps({'comp': tu, 'char': 0.9})

        # create connections
        c1 = Connection(so, 'out1', tu, 'in1', '1')
        c2 = Connection(tu, 'out1', si, 'in1', '2')
        self.nw.add_conns(c1, c2)

        # component parameters
        tu.set_attr(eta_s=0.85, pr=1 / 5)

        # connection parameters
        c1.set_attr(m=2, p=10, fluid={'Air': 1})
        c2.set_attr(T=self.Tamb)

        # solve network
        self.nw.solve('design')
예제 #10
0
    def setup_CombustionEngine_network(self, instance):

        self.cw1_in = Source('cooling water 1 source')
        self.cw2_in = Source('cooling water 2 source')
        self.cw1_out = Sink('cooling water 1 sink')
        self.cw2_out = Sink('cooling water 2 sink')

        self.c1 = Connection(self.air, 'out1', instance, 'in3')
        self.c2 = Connection(self.fuel, 'out1', instance, 'in4')
        self.c3 = Connection(instance, 'out3', self.fg, 'in1')
        self.c4 = Connection(self.cw1_in, 'out1', instance, 'in1')
        self.c5 = Connection(self.cw2_in, 'out1', instance, 'in2')
        self.c6 = Connection(instance, 'out1', self.cw1_out, 'in1')
        self.c7 = Connection(instance, 'out2', self.cw2_out, 'in1')
        self.nw.add_conns(self.c1, self.c2, self.c3, self.c4, self.c5, self.c6,
                          self.c7)
예제 #11
0
파일: test_errors.py 프로젝트: oemof/tespy
 def test_missing_offdesign_path(self):
     source = Source('source')
     sink = Sink('sink')
     a = Connection(source, 'out1', sink, 'in1')
     self.nw.add_conns(a)
     with raises(TESPyNetworkError):
         self.nw.solve('offdesign')
예제 #12
0
파일: test_piping.py 프로젝트: oemof/tespy
 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)
예제 #13
0
파일: test_errors.py 프로젝트: oemof/tespy
 def test_consistency_outlets(self):
     source = Source('source')
     splitter = Splitter('splitter')
     a = Connection(source, 'out1', splitter, 'in1')
     self.nw.add_conns(a)
     with raises(TESPyNetworkError):
         self.nw.check_network()
예제 #14
0
    def setup(self):

        self.nw = Network(
            ['H2O', 'Ar', 'INCOMP::S800'], T_unit='C', p_unit='bar',
            v_unit='m3 / s')
        self.inl1 = Source('inlet 1')
        self.outl1 = Sink('outlet 1')
예제 #15
0
파일: test_errors.py 프로젝트: oemof/tespy
 def test_underdetermination(self):
     source = Source('source')
     sink = Sink('sink')
     a = Connection(source, 'out1', sink, 'in1', m=1)
     self.nw.add_conns(a)
     with raises(TESPyNetworkError):
         self.nw.solve('design')
예제 #16
0
파일: test_errors.py 프로젝트: oemof/tespy
 def test_bad_mode_specification(self):
     source = Source('source')
     sink = Sink('sink')
     a = Connection(source, 'out1', sink, 'in1')
     self.nw.add_conns(a)
     with raises(ValueError):
         self.nw.solve('ofdesign')
예제 #17
0
파일: test_errors.py 프로젝트: oemof/tespy
 def test_component_label_duplicates(self):
     source = Source('label')
     sink = Sink('label')
     a = Connection(source, 'out1', sink, 'in1')
     self.nw.add_conns(a)
     with raises(TESPyNetworkError):
         self.nw.check_network()
예제 #18
0
파일: test_errors.py 프로젝트: oemof/tespy
def test_Network_instanciation_no_fluids():
    nw = Network([])
    so = Source('source')
    si = Sink('sink')
    conn = Connection(so, 'out1', si, 'in1')
    nw.add_conns(conn)
    with raises(TESPyNetworkError):
        nw.solve('design', init_only=True)
예제 #19
0
파일: test_errors.py 프로젝트: oemof/tespy
 def test_overdetermination(self):
     source = Source('source')
     sink = Sink('sink')
     a = Connection(source, 'out1', sink, 'in1', m=1, p=1e5, x=1, h=1e6,
                    fluid={'water': 1}, fluid_balance=True)
     self.nw.add_conns(a)
     with raises(TESPyNetworkError):
         self.nw.solve('design')
예제 #20
0
파일: test_errors.py 프로젝트: oemof/tespy
 def test_Connection_error_source(self):
     source = Source('source')
     sink1 = Sink('sink1')
     sink2 = Sink('sink2')
     a = Connection(source, 'out1', sink1, 'in1')
     b = Connection(source, 'out1', sink2, 'in1')
     self.nw.add_conns(a, b)
     with raises(TESPyNetworkError):
         self.nw.check_network()
예제 #21
0
    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 = Source('source')
        sp = Splitter('splitter', num_out=2)
        self.pump1 = Pump('pump 1')
        self.sc1 = SolarCollector('collector field 1')
        v1 = Valve('valve1')
        self.pump2 = Pump('pump 2')
        self.sc2 = SolarCollector('collector field 2')
        v2 = Valve('valve2')
        me = Merge('merge', num_in=2)
        si = 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)
예제 #22
0
 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)
예제 #23
0
    def setup_HeatExchanger_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)
예제 #24
0
파일: test_errors.py 프로젝트: oemof/tespy
    def setup_electrolyzer_Network(self):
        """Set up Network for electrolyzer tests."""
        self.instance = WaterElectrolyzer('electrolyzer')

        fw = Source('feed water')
        cw_in = Source('cooling water')
        o2 = Sink('oxygen sink')
        h2 = Sink('hydrogen sink')
        cw_out = Sink('cooling water sink')

        cw_el = Connection(cw_in, 'out1', self.instance, 'in1')
        el_cw = Connection(self.instance, 'out1', cw_out, 'in1')

        self.nw.add_conns(cw_el, el_cw)

        fw_el = Connection(fw, 'out1', self.instance, 'in2')
        el_o2 = Connection(self.instance, 'out2', o2, 'in1')
        el_h2 = Connection(self.instance, 'out3', h2, 'in1')

        self.nw.add_conns(fw_el, el_o2, el_h2)
예제 #25
0
    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=True)

        # %% components

        # main components
        turb = Turbine('turbine')
        con = Condenser('condenser')
        pu = Pump('pump')
        steam_generator = HeatExchangerSimple('steam generator')
        closer = CycleCloser('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)
        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})
        fw.set_attr(h=200e3)
        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')
        pu.set_attr(eta_s=0.7)
        fw.set_attr(h=None)
        self.nw.solve('design')
예제 #26
0
    def setup(self):
        """Set up air compressed air turbine."""
        self.Tamb = 20
        self.pamb = 1
        fluids = ['Air']

        # turbine part
        self.nw = Network(fluids=fluids)
        self.nw.set_attr(p_unit='bar', T_unit='C', h_unit='kJ / kg')

        # components
        cas = Source('compressed air storage')
        reheater = HeatExchangerSimple('reheating')
        turb = Turbine('turbine')
        amb = Sink('air outlet')

        # power ouput bus
        self.power_out = Bus('power output')
        self.power_out.add_comps({'comp': turb, 'char': 1})
        # compressed air bus
        self.cas_out = Bus('exergy in')
        self.cas_out.add_comps({
            'comp': cas,
            'base': 'bus'
        }, {
            'comp': reheater,
            'base': 'bus'
        })
        # exergy loss bus
        self.ex_loss = Bus('exergy loss')
        self.ex_loss.add_comps({'comp': amb, 'base': 'component'})
        self.nw.add_busses(self.power_out, self.cas_out)

        # create connections
        cas_reheater = Connection(cas, 'out1', reheater, 'in1')
        reheater_turb = Connection(reheater, 'out1', turb, 'in1')
        turb_amb = Connection(turb, 'out1', amb, 'in1', label='outlet')
        self.nw.add_conns(cas_reheater, reheater_turb, turb_amb)

        # component parameters
        turb.set_attr(eta_s=1)
        reheater.set_attr(pr=1)

        # connection parameters
        cas_reheater.set_attr(m=2, T=self.Tamb, p=10, fluid={'Air': 1})
        reheater_turb.set_attr()
        turb_amb.set_attr(p=self.pamb, T=self.Tamb)

        # solve network
        self.nw.solve('design')
        convergence_check(self.nw.lin_dep)
예제 #27
0
파일: test_errors.py 프로젝트: oemof/tespy
def test_Turbine_missing_char_parameter():
    """Turbine with invalid parameter for eta_s_char function."""
    nw = Network(['CH4'])
    so = Source('source')
    si = Sink('sink')
    instance = 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={
        'char_func': CharLine([0, 1], [1, 2]), 'is_set': True, 'param': None})
    nw.solve('design', init_only=True)
    with raises(ValueError):
        instance.eta_s_char_func()
예제 #28
0
    def setup(self):
        self.nw = Network(['water', 'Isopentane'],
                          T_unit='C',
                          p_unit='bar',
                          h_unit='kJ / kg')
        self.inl1 = Source('inlet 1')
        self.outl1 = Sink('outlet 1')

        self.inl2 = Source('inlet 2')
        self.outl2 = Sink('outlet 2')

        self.inl3 = Source('inlet 3')
        self.outl3 = Sink('outlet 3')

        self.instance = ORCEvaporator('orc evaporator')

        self.c1 = Connection(self.inl1, 'out1', self.instance, 'in1')
        self.c2 = Connection(self.instance, 'out1', self.outl1, 'in1')
        self.c3 = Connection(self.inl2, 'out1', self.instance, 'in2')
        self.c4 = Connection(self.instance, 'out2', self.outl2, 'in1')
        self.c5 = Connection(self.inl3, 'out1', self.instance, 'in3')
        self.c6 = Connection(self.instance, 'out3', self.outl3, 'in1')

        self.nw.add_conns(self.c1, self.c2, self.c3, self.c4, self.c5, self.c6)
예제 #29
0
    def setup(self):
        """Set up air compressor."""
        self.Tamb = 20
        self.pamb = 1
        fluids = ['Air']

        # compressor part
        self.nw = Network(fluids=fluids)
        self.nw.set_attr(p_unit='bar', T_unit='C', h_unit='kJ / kg')

        # components
        amb = Source('air intake')
        cp = Compressor('compressor')
        cooler = HeatExchangerSimple('cooling')
        cas = Sink('compressed air storage')

        # power input bus
        self.power_in = Bus('power input')
        self.power_in.add_comps({'comp': cp, 'char': 1, 'base': 'bus'})
        # compressed air bus (not sure about this!)
        self.cas_in = Bus('massflow into storage')
        self.cas_in.add_comps({'comp': cas}, {'comp': amb, 'base': 'bus'})
        self.nw.add_busses(self.power_in, self.cas_in)

        # create connections
        amb_cp = Connection(amb, 'out1', cp, 'in1')
        cp_cool = Connection(cp, 'out1', cooler, 'in1')
        cool_cas = Connection(cooler, 'out1', cas, 'in1')
        self.nw.add_conns(amb_cp, cp_cool, cool_cas)

        # component parameters
        cp.set_attr(eta_s=1)
        cooler.set_attr(pr=1)

        # connection parameters
        amb_cp.set_attr(m=2, T=self.Tamb, p=self.pamb, fluid={'Air': 1})
        cool_cas.set_attr(T=self.Tamb, p=10)

        # solve network
        self.nw.solve('design')
        convergence_check(self.nw.lin_dep)
예제 #30
0
from tespy.tools import CharLine
import numpy as np

# %% network
fluid_list = ['Ar', 'N2', 'O2', 'CO2', 'CH4', 'H2O']

nw = Network(fluids=fluid_list, p_unit='bar', T_unit='C', h_unit='kJ / kg')

# %% components
# gas turbine part
comp = Compressor('compressor')
c_c = CombustionChamber('combustion')
g_turb = Turbine('gas turbine')

CH4 = Source('fuel source')
air = Source('ambient air')

# waste heat recovery
suph = HeatExchanger('superheater')
evap = HeatExchanger('evaporator')
dr = Drum('drum')
eco = HeatExchanger('economizer')
dh_whr = HeatExchanger('waste heat recovery')
ch = Sink('chimney')

# steam turbine part
turb = Turbine('steam turbine')
cond = Condenser('condenser')
pu = Pump('feed water pump')
cc = CycleCloser('ls cycle closer')