コード例 #1
0
ファイル: test_duct.py プロジェクト: karaselvi/pyCycle
    def test_case1(self):

        thermo = Thermo(janaf, constants.AIR_MIX)

        self.prob = Problem()
        self.prob.model = Group()
        self.prob.model.add_subsystem('flow_start',
                                      FlowStart(thermo_data=janaf,
                                                elements=AIR_MIX),
                                      promotes=['MN', 'P', 'T'])
        self.prob.model.add_subsystem('duct',
                                      Duct(elements=AIR_MIX),
                                      promotes=['MN'])

        connect_flow(self.prob.model, 'flow_start.Fl_O', 'duct.Fl_I')

        self.prob.model.set_input_defaults('MN', 0.5)
        self.prob.model.set_input_defaults('duct.dPqP', 0.0)
        self.prob.model.set_input_defaults('P', 17., units='psi')
        self.prob.model.set_input_defaults('T', 500., units='degR')
        self.prob.model.set_input_defaults('flow_start.W', 500., units='lbm/s')

        self.prob.setup(check=False)
        self.prob.set_solver_print(level=-1)

        # 6 cases to check against
        for i, data in enumerate(ref_data):

            self.prob['duct.dPqP'] = data[h_map['dPqP']]

            # input flowstation
            self.prob['P'] = data[h_map['Fl_I.Pt']]
            self.prob['T'] = data[h_map['Fl_I.Tt']]
            self.prob['MN'] = data[h_map['Fl_O.MN']]
            self.prob['flow_start.W'] = data[h_map['Fl_I.W']]
            self.prob['duct.Fl_I:stat:V'] = data[h_map['Fl_I.V']]

            # give a decent initial guess for Ps

            print(i, self.prob['P'], self.prob['T'], self.prob['MN'])

            self.prob.run_model()

            # check outputs
            pt, ht, ps, ts = data[h_map['Fl_O.Pt']], data[h_map[
                'Fl_O.ht']], data[h_map['Fl_O.Ps']], data[h_map['Fl_O.Ts']]
            pt_computed = self.prob['duct.Fl_O:tot:P']
            ht_computed = self.prob['duct.Fl_O:tot:h']
            ps_computed = self.prob['duct.Fl_O:stat:P']
            ts_computed = self.prob['duct.Fl_O:stat:T']

            tol = 2.0e-2
            assert_near_equal(pt_computed, pt, tol)
            assert_near_equal(ht_computed, ht, tol)
            assert_near_equal(ps_computed, ps, tol)
            assert_near_equal(ts_computed, ts, tol)

            check_element_partials(self, self.prob)
コード例 #2
0
ファイル: test_duct.py プロジェクト: will214/pyCycle
    def test_case_with_dPqP_MN(self):

        self.prob = Problem()
        self.prob.model = Group()
        self.prob.model.add_subsystem(
            'flow_start', FlowStart(thermo_data=janaf, elements=AIR_MIX))
        self.prob.model.add_subsystem(
            'flow_start_OD', FlowStart(thermo_data=janaf, elements=AIR_MIX))

        expMN = 1.0
        self.prob.model.add_subsystem('duct_des',
                                      Duct(elements=AIR_MIX, expMN=expMN))
        self.prob.model.add_subsystem(
            'duct_OD', Duct(elements=AIR_MIX, expMN=expMN, design=False))

        connect_flow(self.prob.model, 'flow_start.Fl_O', 'duct_des.Fl_I')
        connect_flow(self.prob.model, 'flow_start_OD.Fl_O', 'duct_OD.Fl_I')

        des_vars = self.prob.model.add_subsystem('des_vars',
                                                 IndepVarComp(),
                                                 promotes=['*'])
        des_vars.add_output('P', 17., units='psi')
        des_vars.add_output('T', 500., units='degR')
        des_vars.add_output('W', 500., units='lbm/s')
        des_vars.add_output('MN', 0.5)
        des_vars.add_output('MN_OD', 0.25)
        des_vars.add_output('dPqP_des', 0.0)

        self.prob.model.connect("P", ["flow_start.P", 'flow_start_OD.P'])
        self.prob.model.connect("T", ["flow_start.T", 'flow_start_OD.T'])
        self.prob.model.connect("W", ["flow_start.W", 'flow_start_OD.W'])
        self.prob.model.connect("MN", ["duct_des.MN", "flow_start.MN"])
        self.prob.model.connect("MN_OD", "flow_start_OD.MN")
        self.prob.model.connect("duct_des.s_dPqP", "duct_OD.s_dPqP")
        self.prob.model.connect("duct_des.Fl_O:stat:area", "duct_OD.area")
        self.prob.model.connect("dPqP_des", "duct_des.dPqP")

        self.prob.setup(check=False)
        self.prob.set_solver_print(level=-1)

        data = ref_data[0]
        self.prob['dPqP_des'] = data[h_map['dPqP']]

        # input flowstation
        self.prob['P'] = data[h_map['Fl_I.Pt']]
        self.prob['T'] = data[h_map['Fl_I.Tt']]
        self.prob['MN'] = data[h_map['Fl_O.MN']]
        self.prob['W'] = data[h_map['Fl_I.W']]
        self.prob['duct_des.Fl_I:stat:V'] = data[h_map['Fl_I.V']]

        # give a decent initial guess for Ps

        print(self.prob['P'], self.prob['T'], self.prob['MN'])

        self.prob.run_model()

        # check outputs
        pt, ht, ps, ts = data[h_map['Fl_O.Pt']], data[h_map['Fl_O.ht']], data[
            h_map['Fl_O.Ps']], data[h_map['Fl_O.Ts']]
        pt_computed = self.prob['duct_OD.Fl_O:tot:P']
        ht_computed = self.prob['duct_OD.Fl_O:tot:h']
        ps_computed = self.prob['duct_OD.Fl_O:stat:P']
        ts_computed = self.prob['duct_OD.Fl_O:stat:T']

        tol = 1.0e-4
        assert_rel_error(self, pt_computed, 8.84073152, tol)
        assert_rel_error(self, ht_computed, ht, tol)
        assert_rel_error(self, ps_computed, 8.26348914, tol)
        assert_rel_error(self, ts_computed, ts, tol)

        check_element_partials(self, self.prob)
コード例 #3
0
ファイル: test_duct.py プロジェクト: will214/pyCycle
    def test_case1(self):

        self.prob = Problem()
        self.prob.model = Group()
        self.prob.model.add_subsystem(
            'flow_start', FlowStart(thermo_data=janaf, elements=AIR_MIX))
        self.prob.model.add_subsystem('duct', Duct(elements=AIR_MIX))

        connect_flow(self.prob.model, 'flow_start.Fl_O', 'duct.Fl_I')

        des_vars = self.prob.model.add_subsystem('des_vars',
                                                 IndepVarComp(),
                                                 promotes=['*'])
        des_vars.add_output('P', 17., units='psi')
        des_vars.add_output('T', 500., units='degR')
        des_vars.add_output('W', 500., units='lbm/s')
        des_vars.add_output('MN', 0.5)
        des_vars.add_output('dPqP_des', 0.0)

        self.prob.model.connect("P", "flow_start.P")
        self.prob.model.connect("T", "flow_start.T")
        self.prob.model.connect("W", "flow_start.W")
        self.prob.model.connect("MN", ["duct.MN", "flow_start.MN"])
        self.prob.model.connect("dPqP_des", "duct.dPqP")

        self.prob.setup(check=False)
        self.prob.set_solver_print(level=-1)

        # 6 cases to check against
        for i, data in enumerate(ref_data):

            self.prob['dPqP_des'] = data[h_map['dPqP']]

            # input flowstation
            self.prob['P'] = data[h_map['Fl_I.Pt']]
            self.prob['T'] = data[h_map['Fl_I.Tt']]
            self.prob['MN'] = data[h_map['Fl_O.MN']]
            self.prob['W'] = data[h_map['Fl_I.W']]
            self.prob['duct.Fl_I:stat:V'] = data[h_map['Fl_I.V']]

            # give a decent initial guess for Ps

            print(i, self.prob['P'], self.prob['T'], self.prob['MN'])

            self.prob.run_model()

            # check outputs
            pt, ht, ps, ts = data[h_map['Fl_O.Pt']], data[h_map[
                'Fl_O.ht']], data[h_map['Fl_O.Ps']], data[h_map['Fl_O.Ts']]
            pt_computed = self.prob['duct.Fl_O:tot:P']
            ht_computed = self.prob['duct.Fl_O:tot:h']
            ps_computed = self.prob['duct.Fl_O:stat:P']
            ts_computed = self.prob['duct.Fl_O:stat:T']

            tol = 2.0e-2
            assert_rel_error(self, pt_computed, pt, tol)
            assert_rel_error(self, ht_computed, ht, tol)
            assert_rel_error(self, ps_computed, ps, tol)
            assert_rel_error(self, ts_computed, ts, tol)

            check_element_partials(self, self.prob)
コード例 #4
0
    def test_case_with_dPqP_MN(self):

        self.prob = Problem()

        # need two cycles, because we can't mix design and off-design
        cycle_DES = self.prob.model.add_subsystem('DESIGN', Cycle())
        cycle_DES.options['thermo_method'] = 'CEA'
        cycle_DES.options['thermo_data'] = species_data.janaf

        cycle_OD = self.prob.model.add_subsystem('OFF_DESIGN', Cycle())
        cycle_OD.options['design'] = False
        cycle_OD.options['thermo_method'] = 'CEA'
        cycle_OD.options['thermo_data'] = species_data.janaf

        cycle_DES.add_subsystem('flow_start',
                                FlowStart(),
                                promotes=['P', 'T', 'MN', 'W'])

        cycle_OD.add_subsystem('flow_start_OD',
                               FlowStart(),
                               promotes=['P', 'T', 'W', 'MN'])

        expMN = 1.0
        cycle_DES.add_subsystem('duct', Duct(expMN=expMN), promotes=['MN'])
        cycle_OD.add_subsystem('duct', Duct(expMN=expMN, design=False))

        cycle_DES.pyc_connect_flow('flow_start.Fl_O', 'duct.Fl_I')
        cycle_OD.pyc_connect_flow('flow_start_OD.Fl_O', 'duct.Fl_I')

        cycle_DES.set_input_defaults('P', 17., units='psi')
        cycle_DES.set_input_defaults('T', 500., units='degR')
        cycle_DES.set_input_defaults('MN', 0.5)
        cycle_DES.set_input_defaults('duct.dPqP', 0.0)
        cycle_DES.set_input_defaults('W', 500., units='lbm/s')

        cycle_OD.set_input_defaults('P', 17., units='psi')
        cycle_OD.set_input_defaults('T', 500., units='degR')
        cycle_OD.set_input_defaults('MN', 0.25)
        cycle_OD.set_input_defaults('duct.dPqP', 0.0)
        cycle_OD.set_input_defaults('W', 500., units='lbm/s')

        self.prob.model.connect("DESIGN.duct.s_dPqP", "OFF_DESIGN.duct.s_dPqP")
        self.prob.model.connect("DESIGN.duct.Fl_O:stat:area",
                                "OFF_DESIGN.duct.area")

        self.prob.setup(check=False, force_alloc_complex=True)
        self.prob.set_solver_print(level=-1)

        data = ref_data[0]
        self.prob['DESIGN.duct.dPqP'] = data[h_map['dPqP']]

        # input flowstation
        self.prob['DESIGN.P'] = data[h_map['Fl_I.Pt']]
        self.prob['DESIGN.T'] = data[h_map['Fl_I.Tt']]
        self.prob['DESIGN.MN'] = data[h_map['Fl_O.MN']]
        self.prob['DESIGN.W'] = data[h_map['Fl_I.W']]
        # self.prob['DESIGN.duct.Fl_I:stat:V'] = data[h_map['Fl_I.V']]

        # input flowstation
        self.prob['OFF_DESIGN.P'] = data[h_map['Fl_I.Pt']]
        self.prob['OFF_DESIGN.T'] = data[h_map['Fl_I.Tt']]
        self.prob['OFF_DESIGN.W'] = data[h_map['Fl_I.W']]
        # self.prob['OFF_DESIGN.duct.Fl_I:stat:V'] = data[h_map['Fl_I.V']]

        # give a decent initial guess for Ps

        print(self.prob['DESIGN.P'], self.prob['DESIGN.T'],
              self.prob['DESIGN.MN'])

        self.prob.run_model()

        # check outputs
        pt, ht, ps, ts = data[h_map['Fl_O.Pt']], data[h_map['Fl_O.ht']], data[
            h_map['Fl_O.Ps']], data[h_map['Fl_O.Ts']]
        pt_computed = self.prob['OFF_DESIGN.duct.Fl_O:tot:P']
        ht_computed = self.prob['OFF_DESIGN.duct.Fl_O:tot:h']
        ps_computed = self.prob['OFF_DESIGN.duct.Fl_O:stat:P']
        ts_computed = self.prob['OFF_DESIGN.duct.Fl_O:stat:T']

        tol = 1.0e-4
        assert_near_equal(pt_computed, 8.84073152, tol)
        assert_near_equal(ht_computed, ht, tol)
        assert_near_equal(ps_computed, 8.26348914, tol)
        assert_near_equal(ts_computed, ts, tol)

        partial_data = self.prob.check_partials(out_stream=None,
                                                method='cs',
                                                includes=['duct.*'],
                                                excludes=[
                                                    '*.base_thermo.*',
                                                ])
        assert_check_partials(partial_data, atol=1e-8, rtol=1e-8)
コード例 #5
0
    def test_case1(self):

        self.prob = Problem()
        cycle = self.prob.model = Cycle()
        cycle.options['thermo_method'] = 'CEA'
        cycle.options['thermo_data'] = species_data.janaf

        cycle.add_subsystem('flow_start',
                            FlowStart(),
                            promotes=['MN', 'P', 'T'])
        cycle.add_subsystem('duct', Duct(), promotes=['MN'])

        cycle.pyc_connect_flow('flow_start.Fl_O', 'duct.Fl_I')

        cycle.set_input_defaults('MN', 0.5)
        cycle.set_input_defaults('duct.dPqP', 0.0)
        cycle.set_input_defaults('P', 17., units='psi')
        cycle.set_input_defaults('T', 500., units='degR')
        cycle.set_input_defaults('flow_start.W', 500., units='lbm/s')

        self.prob.setup(check=False, force_alloc_complex=True)
        self.prob.set_solver_print(level=-1)

        # 6 cases to check against
        for i, data in enumerate(ref_data):

            self.prob['duct.dPqP'] = data[h_map['dPqP']]

            # input flowstation
            self.prob['P'] = data[h_map['Fl_I.Pt']]
            self.prob['T'] = data[h_map['Fl_I.Tt']]
            self.prob['MN'] = data[h_map['Fl_O.MN']]
            self.prob['flow_start.W'] = data[h_map['Fl_I.W']]
            self.prob['duct.Fl_I:stat:V'] = data[h_map['Fl_I.V']]

            # give a decent initial guess for Ps

            print(i, self.prob['P'], self.prob['T'], self.prob['MN'])

            self.prob.run_model()

            # check outputs
            pt, ht, ps, ts = data[h_map['Fl_O.Pt']], data[h_map[
                'Fl_O.ht']], data[h_map['Fl_O.Ps']], data[h_map['Fl_O.Ts']]
            pt_computed = self.prob['duct.Fl_O:tot:P']
            ht_computed = self.prob['duct.Fl_O:tot:h']
            ps_computed = self.prob['duct.Fl_O:stat:P']
            ts_computed = self.prob['duct.Fl_O:stat:T']

            tol = 2.0e-2
            assert_near_equal(pt_computed, pt, tol)
            assert_near_equal(ht_computed, ht, tol)
            assert_near_equal(ps_computed, ps, tol)
            assert_near_equal(ts_computed, ts, tol)

            partial_data = self.prob.check_partials(out_stream=None,
                                                    method='cs',
                                                    includes=['duct.*'],
                                                    excludes=[
                                                        '*.base_thermo.*',
                                                    ])
            assert_check_partials(partial_data, atol=1e-8, rtol=1e-8)
コード例 #6
0
ファイル: test_duct.py プロジェクト: eshendricks/pyCycle
    def test_case_with_dPqP_MN(self):

        self.prob = Problem()
        cycle = self.prob.model = Cycle()
        cycle.add_subsystem('flow_start',
                            FlowStart(thermo_data=janaf,
                                      elements=AIR_ELEMENTS),
                            promotes=['P', 'T', 'MN', 'W'])
        cycle.add_subsystem('flow_start_OD',
                            FlowStart(thermo_data=janaf,
                                      elements=AIR_ELEMENTS),
                            promotes=['P', 'T', 'W'])

        expMN = 1.0
        cycle.add_subsystem('duct_des',
                            Duct(elements=AIR_ELEMENTS, expMN=expMN),
                            promotes=['MN'])
        cycle.add_subsystem(
            'duct_OD', Duct(elements=AIR_ELEMENTS, expMN=expMN, design=False))

        cycle.pyc_connect_flow('flow_start.Fl_O', 'duct_des.Fl_I')
        cycle.pyc_connect_flow('flow_start_OD.Fl_O', 'duct_OD.Fl_I')

        cycle.set_input_defaults('P', 17., units='psi')
        cycle.set_input_defaults('T', 500., units='degR')
        cycle.set_input_defaults('MN', 0.5)
        cycle.set_input_defaults('flow_start_OD.MN', 0.25)
        cycle.set_input_defaults('duct_des.dPqP', 0.0)
        cycle.set_input_defaults('W', 500., units='lbm/s')

        cycle.connect("duct_des.s_dPqP", "duct_OD.s_dPqP")
        cycle.connect("duct_des.Fl_O:stat:area", "duct_OD.area")

        self.prob.setup(check=False, force_alloc_complex=True)
        self.prob.set_solver_print(level=-1)

        data = ref_data[0]
        self.prob['duct_des.dPqP'] = data[h_map['dPqP']]

        # input flowstation
        self.prob['P'] = data[h_map['Fl_I.Pt']]
        self.prob['T'] = data[h_map['Fl_I.Tt']]
        self.prob['MN'] = data[h_map['Fl_O.MN']]
        self.prob['W'] = data[h_map['Fl_I.W']]
        self.prob['duct_des.Fl_I:stat:V'] = data[h_map['Fl_I.V']]

        # give a decent initial guess for Ps

        print(self.prob['P'], self.prob['T'], self.prob['MN'])

        self.prob.run_model()

        # check outputs
        pt, ht, ps, ts = data[h_map['Fl_O.Pt']], data[h_map['Fl_O.ht']], data[
            h_map['Fl_O.Ps']], data[h_map['Fl_O.Ts']]
        pt_computed = self.prob['duct_OD.Fl_O:tot:P']
        ht_computed = self.prob['duct_OD.Fl_O:tot:h']
        ps_computed = self.prob['duct_OD.Fl_O:stat:P']
        ts_computed = self.prob['duct_OD.Fl_O:stat:T']

        tol = 1.0e-4
        assert_near_equal(pt_computed, 8.84073152, tol)
        assert_near_equal(ht_computed, ht, tol)
        assert_near_equal(ps_computed, 8.26348914, tol)
        assert_near_equal(ts_computed, ts, tol)

        partial_data = self.prob.check_partials(out_stream=None,
                                                method='cs',
                                                includes=['duct_OD.*'],
                                                excludes=[
                                                    '*.base_thermo.*',
                                                ])
        assert_check_partials(partial_data, atol=1e-8, rtol=1e-8)
コード例 #7
0
ファイル: test_duct.py プロジェクト: karaselvi/pyCycle
    def test_case_with_dPqP_MN(self):

        thermo = Thermo(janaf, constants.AIR_MIX)

        self.prob = Problem()
        self.prob.model = Group()
        self.prob.model.add_subsystem('flow_start',
                                      FlowStart(thermo_data=janaf,
                                                elements=AIR_MIX),
                                      promotes=['P', 'T', 'MN', 'W'])
        self.prob.model.add_subsystem('flow_start_OD',
                                      FlowStart(thermo_data=janaf,
                                                elements=AIR_MIX),
                                      promotes=['P', 'T', 'W'])

        expMN = 1.0
        self.prob.model.add_subsystem('duct_des',
                                      Duct(elements=AIR_MIX, expMN=expMN),
                                      promotes=['MN'])
        self.prob.model.add_subsystem(
            'duct_OD', Duct(elements=AIR_MIX, expMN=expMN, design=False))

        connect_flow(self.prob.model, 'flow_start.Fl_O', 'duct_des.Fl_I')
        connect_flow(self.prob.model, 'flow_start_OD.Fl_O', 'duct_OD.Fl_I')

        self.prob.model.set_input_defaults('P', 17., units='psi')
        self.prob.model.set_input_defaults('T', 500., units='degR')
        self.prob.model.set_input_defaults('MN', 0.5)
        self.prob.model.set_input_defaults('flow_start_OD.MN', 0.25)
        self.prob.model.set_input_defaults('duct_des.dPqP', 0.0)
        self.prob.model.set_input_defaults('W', 500., units='lbm/s')

        self.prob.model.connect("duct_des.s_dPqP", "duct_OD.s_dPqP")
        self.prob.model.connect("duct_des.Fl_O:stat:area", "duct_OD.area")

        self.prob.setup(check=False)
        self.prob.set_solver_print(level=-1)

        data = ref_data[0]
        self.prob['duct_des.dPqP'] = data[h_map['dPqP']]

        # input flowstation
        self.prob['P'] = data[h_map['Fl_I.Pt']]
        self.prob['T'] = data[h_map['Fl_I.Tt']]
        self.prob['MN'] = data[h_map['Fl_O.MN']]
        self.prob['W'] = data[h_map['Fl_I.W']]
        self.prob['duct_des.Fl_I:stat:V'] = data[h_map['Fl_I.V']]

        # give a decent initial guess for Ps

        print(self.prob['P'], self.prob['T'], self.prob['MN'])

        self.prob.run_model()

        # check outputs
        pt, ht, ps, ts = data[h_map['Fl_O.Pt']], data[h_map['Fl_O.ht']], data[
            h_map['Fl_O.Ps']], data[h_map['Fl_O.Ts']]
        pt_computed = self.prob['duct_OD.Fl_O:tot:P']
        ht_computed = self.prob['duct_OD.Fl_O:tot:h']
        ps_computed = self.prob['duct_OD.Fl_O:stat:P']
        ts_computed = self.prob['duct_OD.Fl_O:stat:T']

        tol = 1.0e-4
        assert_near_equal(pt_computed, 8.84073152, tol)
        assert_near_equal(ht_computed, ht, tol)
        assert_near_equal(ps_computed, 8.26348914, tol)
        assert_near_equal(ts_computed, ts, tol)

        check_element_partials(self, self.prob)