Ejemplo n.º 1
0
    def test_case1(self):
        # 6 cases to check against
        for i, data in enumerate(ref_data):
            # input torques
            self.top['trq_0'] = data[h_map['trqLoad1']]
            self.top['trq_1'] = data[h_map['trqLoad2']]
            self.top['trq_2'] = data[h_map['trqLoad3']]

            # shaft inputs
            self.top['Nmech'] = data[h_map['Nmech']]
            self.top['HPX'] = data[h_map['HPX']]
            self.top['fracLoss'] = data[h_map['fracLoss']]
            self.top.run_model()

            # check outputs
            trqIn, trqOut, trqNet = data[h_map['trqIn']], data[
                h_map['trqOut']], data[h_map['trqNet']]
            pwrIn, pwrOut, pwrNet = data[h_map['pwrIn']], data[
                h_map['pwrOut']], data[h_map['pwrNet']]
            trqIn_comp = self.top['trq_in']
            trqOut_comp = self.top['trq_out']
            trqNet_comp = self.top['trq_net']
            pwrIn_comp = self.top['pwr_in']
            pwrOut_comp = self.top['pwr_out']
            pwrNet_comp = self.top['pwr_net']

            tol = 1.0e-4
            assert_near_equal(trqIn_comp, trqIn, tol)
            assert_near_equal(trqOut_comp, trqOut, tol)
            assert_near_equal(trqNet_comp, trqNet, tol)
            assert_near_equal(pwrIn_comp, pwrIn, tol)
            assert_near_equal(pwrOut_comp, pwrOut, tol)
            assert_near_equal(pwrNet_comp, pwrNet, tol)

            check_element_partials(self, self.top)
Ejemplo n.º 2
0
    def test_case1(self):
        # 4 cases to check against
        for i, data in enumerate(ref_data):
            self.prob['inlet.ram_recovery'] = data[h_map['eRamBase']]

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

            self.prob.run_model()

            # check outputs

            pt, ht, Fram, ps, ts = data[h_map['Fl_O.Pt']], data[
                h_map['Fl_O.ht']], data[h_map['Fram']], data[
                    h_map['Fl_O.Ps']], data[h_map['Fl_O.Ts']]
            pt_computed = self.prob['inlet.Fl_O:tot:P']
            ht_computed = self.prob['inlet.Fl_O:tot:h']
            Fram_computed = self.prob['inlet.F_ram']
            ps_computed = self.prob['inlet.Fl_O:stat:P']
            ts_computed = self.prob['inlet.Fl_O:stat:T']

            tol = 1e-4
            assert_near_equal(pt_computed, pt, tol)
            assert_near_equal(ht_computed, ht, tol)
            assert_near_equal(Fram_computed, Fram, tol)
            assert_near_equal(ps_computed, ps, tol)
            assert_near_equal(ts_computed, ts, tol)

            check_element_partials(self, self.prob)
Ejemplo n.º 3
0
    def test_case1(self):

        # 6 cases to check against
        for i, data in enumerate(ref_data):
            self.prob['fc.alt'] = data[h_map['alt']]
            self.prob['fc.MN'] = data[h_map['MN']]
            self.prob['fc.dTs'] = data[h_map['dTs']]

            if self.prob['fc.MN'] < 1e-10:
                self.prob['fc.MN'] += 1e-6

            self.prob.run_model()

            # check outputs
            Pt = data[h_map['Pt']]
            Pt_c = self.prob['fc.Fl_O:tot:P']

            Ps = data[h_map['Ps']]
            Ps_c = self.prob['fc.Fl_O:stat:P']

            Tt = data[h_map['Tt']]
            Tt_c = self.prob['fc.Fl_O:tot:T']

            Ts = data[h_map['Ts']]
            Ts_c = self.prob['fc.Fl_O:stat:T']

            tol = 1e-4
            assert_near_equal(Pt_c, Pt, tol)
            assert_near_equal(Ps_c, Ps, tol)
            assert_near_equal(Tt_c, Tt, tol)
            assert_near_equal(Ps_c, Ps, tol)

            check_element_partials(self, self.prob, depth=3)
Ejemplo n.º 4
0
    def test_CDnozzle(self):

        print('Testing CD Nozzle')
        self.setup_helper(NozzType='CD', LossType='Cv')
        self.ref_data = np.loadtxt(self.fpath + "/reg_data/nozzleCD.csv", delimiter=",", skiprows=1)
        self.run_helper()
        check_element_partials(self, self.prob)
Ejemplo n.º 5
0
    def test_case1(self):
        # 4 cases to check against
        for i, data in enumerate(ref_data):
            self.prob['inlet.ram_recovery'] = data[h_map['eRamBase']]

            # 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['V'] = data[h_map['Fl_I.V']]

            self.prob.run_model()

            # check outputs

            pt, ht, Fram, ps, ts = data[h_map['Fl_O.Pt']], data[h_map['Fl_O.ht']], data[
                h_map['Fram']], data[h_map['Fl_O.Ps']], data[h_map['Fl_O.Ts']]
            pt_computed = self.prob['inlet.Fl_O:tot:P']
            ht_computed = self.prob['inlet.Fl_O:tot:h']
            Fram_computed = self.prob['inlet.F_ram']
            ps_computed = self.prob['inlet.Fl_O:stat:P']
            ts_computed = self.prob['inlet.Fl_O:stat:T']

            tol = 1e-4
            # rel_err = abs(pt_computed - pt) / pt_computed
            assert_rel_error(self, pt_computed, pt, tol)
            assert_rel_error(self, ht_computed, ht, tol)
            assert_rel_error(self, Fram_computed, Fram, tol)
            assert_rel_error(self, ps_computed, ps, tol)
            assert_rel_error(self, ts_computed, ts, tol)

            check_element_partials(self, self.prob)
Ejemplo n.º 6
0
    def test_case1(self):
        np.seterr(divide='raise')
        # 6 cases to check against
        for i, data in enumerate(ref_data):
            self.prob['des_vars.alt'] = data[h_map['alt']]
            # self.prob['des_vars.MN'] = data[h_map['MN']]
            self.prob['des_vars.dTs'] = data[h_map['dTs']]

            self.prob.run_model()

            # check outputs
            tol = 1.0e-2  # seems a little generous

            npss = data[h_map['Ps']]
            pyc = self.prob['amb.Ps']
            rel_err = abs(npss - pyc) / npss
            # print( 'Ps:', npss, pyc, rel_err)
            self.assertLessEqual(rel_err, tol)

            npss = data[h_map['Ts']]
            pyc = self.prob['amb.Ts']
            rel_err = abs(npss - pyc) / npss
            # print( 'Ts:', npss, pyc, rel_err)
            self.assertLessEqual(rel_err, tol)

            # print()
            check_element_partials(self, self.prob)
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    def test_CD_CVnozzle_Cfg(self):

        print('Testing CD_CV Nozzle with Cfg')
        self.setup_helper(NozzType='CD_CV', LossType='Cfg')
        self.ref_data = np.loadtxt(self.fpath +
                                   "/reg_data/nozzleCD_CV__Cfg.csv",
                                   delimiter=",",
                                   skiprows=1)
        self.run_helper(LossType='Cfg')
        check_element_partials(self, self.prob)
Ejemplo n.º 9
0
    def test_case1(self):

        # 6 cases to check against
        for i, data in enumerate(ref_data):
            self.prob['alt'] = data[h_map['alt']]
            self.prob['MN'] = data[h_map['MN']]
            self.prob['dTs'] = data[h_map['dTs']]

            if self.prob['MN'] < 1e-10:
                self.prob['MN'] += 1e-6

            # print(data[h_map['alt']], data[h_map['MN']], data[h_map['dTs']])

            # from openmdao.api import view_model
            # view_model(self.prob)
            # exit()

            self.prob.run_model()

            # check outputs
            Pt = data[h_map['Pt']]
            Pt_c = self.prob['fc.Fl_O:tot:P']

            Ps = data[h_map['Ps']]
            Ps_c = self.prob['fc.Fl_O:stat:P']

            Tt = data[h_map['Tt']]
            Tt_c = self.prob['fc.Fl_O:tot:T']

            Ts = data[h_map['Ts']]
            Ts_c = self.prob['fc.Fl_O:stat:T']

            # print('alt, MN, dts: ', self.prob['alt'], self.prob['MN'], self.prob['dTs'])
            # print('Pt:', Pt_c, Pt)
            # print('Ps:', Ps_c, Ps)
            # print('Tt:', Tt_c, Tt)
            # print('Ts:', Ts_c, Ts)
            # print()

            tol = 1e-4
            assert_rel_error(self, Pt_c, Pt, tol)
            assert_rel_error(self, Ps_c, Ps, tol)
            assert_rel_error(self, Tt_c, Tt, tol)
            assert_rel_error(self, Ps_c, Ps, tol)

            check_element_partials(self, self.prob, depth=3)
Ejemplo n.º 10
0
    def test_case1(self):
        # 4 cases to check against
        for i, data in enumerate(ref_data):
            self.prob['splitter.BPR'] = data[h_map['BPR']]

            # input flowstation
            self.prob['flow_start.P'] = data[h_map['Fl_I.Pt']]
            self.prob['flow_start.T'] = data[h_map['Fl_I.Tt']]
            self.prob['flow_start.W'] = data[h_map['Fl_I.W']]
            self.prob['splitter.MN1'] = data[h_map['Fl_O1.MN']]
            self.prob['splitter.MN2'] = data[h_map['Fl_O2.MN']]
            self.prob['splitter.Fl_I:stat:V'] = data[h_map['Fl_I.V']]
            self.prob.run_model()

            # check flow1 outputs
            pt1, ht1, ps1, ts1 = data[h_map['Fl_O2.Pt']], data[h_map[
                'Fl_O1.ht']], data[h_map['Fl_O1.Ps']], data[h_map['Fl_O1.Ts']]
            pt1_computed = self.prob['splitter.Fl_O1:tot:P']
            ht1_computed = self.prob['splitter.Fl_O1:tot:h']
            ps1_computed = self.prob['splitter.Fl_O1:stat:P']
            ts1_computed = self.prob['splitter.Fl_O1:stat:T']

            tol = 1e-4
            assert_near_equal(pt1_computed, pt1, tol)
            assert_near_equal(ht1_computed, ht1, tol)
            assert_near_equal(ps1_computed, ps1, tol)
            assert_near_equal(ts1_computed, ts1, tol)

            # check flow2 outputs
            pt2, ht2, ps2, ts2 = data[h_map['Fl_O2.Pt']], data[h_map[
                'Fl_O2.ht']], data[h_map['Fl_O2.Ps']], data[h_map['Fl_O2.Ts']]
            pt2_computed = self.prob['splitter.Fl_O2:tot:P']
            ht2_computed = self.prob['splitter.Fl_O2:tot:h']
            ps2_computed = self.prob['splitter.Fl_O2:stat:P']
            ts2_computed = self.prob['splitter.Fl_O2:stat:T']

            assert_near_equal(pt2_computed, pt2, tol)
            assert_near_equal(ht2_computed, ht2, tol)
            assert_near_equal(ps2_computed, ps2, tol)
            assert_near_equal(ts2_computed, ts2, tol)

            check_element_partials(self, self.prob)
Ejemplo n.º 11
0
    def test_case1(self):
        np.seterr(divide='raise')
        # 6 cases to check against
        for i, data in enumerate(ref_data):
            self.prob['compressor.PR'] = data[h_map['comp.PRdes']]
            self.prob['compressor.eff'] = data[h_map['comp.effDes']]
            self.prob['compressor.MN'] = data[h_map['comp.Fl_O.MN']]

            # input flowstation
            self.prob['flow_start.P'] = data[h_map['start.Pt']]
            self.prob['flow_start.T'] = data[h_map['start.Tt']]
            self.prob['flow_start.W'] = data[h_map['start.W']]
            self.prob.run_model()

            tol = 1e-3

            npss = data[h_map['comp.Fl_O.Pt']]
            pyc = self.prob['compressor.Fl_O:tot:P'][0]
            print('Pt out:', npss, pyc)
            assert_near_equal(pyc, npss, tol)

            npss = data[h_map['comp.Fl_O.Tt']]
            pyc = self.prob['compressor.Fl_O:tot:T'][0]
            print('Tt out:', npss, pyc)
            assert_near_equal(pyc, npss, tol)

            npss = data[h_map['comp.Fl_O.ht']] - data[h_map['start.Fl_O.ht']]
            pyc = self.prob['compressor.Fl_O:tot:h'] - self.prob[
                'flow_start.Fl_O:tot:h']
            print('delta h:', npss, pyc)
            assert_near_equal(pyc, npss, tol)

            npss = data[h_map['start.Fl_O.s']]
            pyc = self.prob['flow_start.Fl_O:tot:S'][0]
            print('S in:', npss, pyc)
            assert_near_equal(pyc, npss, tol)

            npss = data[h_map['comp.Fl_O.s']]
            pyc = self.prob['compressor.Fl_O:tot:S'][0]
            print('S out:', npss, pyc)
            assert_near_equal(pyc, npss, tol)

            npss = data[h_map['comp.pwr']]
            pyc = self.prob['compressor.power'][0]
            print('Power:', npss, pyc)
            assert_near_equal(pyc, npss, tol)

            npss = data[h_map['Fl_O.Ps']]
            pyc = self.prob['compressor.Fl_O:stat:P'][0]
            print('Ps out:', npss, pyc)
            assert_near_equal(pyc, npss, tol)

            npss = data[h_map['Fl_O.Ts']]
            pyc = self.prob['compressor.Fl_O:stat:T'][0]
            print('Ts out:', npss, pyc)
            assert_near_equal(pyc, npss, tol)

            npss = data[h_map['comp.effPoly']]
            pyc = self.prob['compressor.eff_poly'][0]
            print('effPoly:', npss, pyc)
            assert_near_equal(pyc, npss, tol)
            print("")

            check_element_partials(self, self.prob, tol=5e-5)
Ejemplo n.º 12
0
    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)
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
0
    def test_case1(self):
        # 4 cases to check against
        for i, data in enumerate(ref_data):

            print()
            print('---- Test Case,', i, '----')

            self.prob['PR'] = data[h_map['PRdes']]
            self.prob['Nmech'] = data[h_map['Nmech']]
            self.prob['eff'] = data[h_map['EffDes']]
            self.prob['MN'] = data[h_map['Fl_O.MN']]

            # input flowstation
            self.prob['P'] = data[h_map['Fl_I.Pt']]
            self.prob['T'] = data[h_map['Fl_I.Tt']]
            self.prob['W'] = data[h_map['Fl_I.W']]
            self.prob['flow_start_MN'] = data[h_map['Fl_I.MN']]

            self.prob.run_model()

            # check outputs
            tol = 5e-4

            # print("effDes", self.prob['turbine.map.effDes'])
            # print("S_eff", self.prob['turbine.s_effDes'])
            # print("effMap", self.prob['turbine.map.desMap.effMap'])

            npss = data[h_map['EffDes']]
            pyc = self.prob['eff'][0]
            print('EffDes:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['Fl_I.s']]
            pyc = self.prob['flow_start.Fl_O:tot:S'][0]
            print('Fl_I.s:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['Fl_I.Tt']]
            pyc = self.prob['flow_start.Fl_O:tot:T'][0]
            print('Fl_I.Tt:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['Fl_I.ht']]
            pyc = self.prob['flow_start.Fl_O:tot:h'][0]
            print('Fl_I.ht:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['Fl_I.W']]
            pyc = self.prob['flow_start.Fl_O:stat:W'][0]
            print('Fl_I.W:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['Fl_O.MN']]
            pyc = self.prob['MN'][0]
            print('Fl_O.MN:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['Fl_O.Pt']]
            pyc = self.prob['turbine.Fl_O:tot:P'][0]
            print('Fl_O.Pt:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['Fl_O.ht']]
            pyc = self.prob['turbine.Fl_O:tot:h'][0]
            print('Fl_O.ht:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['Fl_O.Tt']]
            pyc = self.prob['turbine.Fl_O:tot:T'][0]
            print('Fl_O.Tt:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['Fl_O.ht']] - data[h_map['Fl_I.ht']]
            pyc = self.prob['turbine.Fl_O:tot:h'][0] - self.prob[
                'flow_start.Fl_O:tot:h'][0]
            print('Fl_O.ht - Fl_I.ht:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['Fl_O.s']]
            pyc = self.prob['turbine.Fl_O:tot:S'][0]
            print('Fl_O.s:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['Power']]
            pyc = self.prob['turbine.power'][0]
            print('Power:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['Fl_O.Ps']]
            pyc = self.prob['turbine.Fl_O:stat:P'][0]
            print('Fl_O.Ps:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['Fl_O.Ts']]
            pyc = self.prob['turbine.Fl_O:stat:T'][0]
            print('Fl_O.Ts:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            npss = data[h_map['effPoly']]
            pyc = self.prob['turbine.eff_poly'][0]
            print('effPoly:', npss, pyc)
            assert_rel_error(self, npss, pyc, tol)

            check_element_partials(self, self.prob, tol=1e-4)
Ejemplo n.º 15
0
    def test_case1(self):

        self.prob = Problem()
        self.prob.model = Group()

        des_vars = self.prob.model.add_subsystem('des_vars',
                                                 IndepVarComp(),
                                                 promotes=['*'])
        des_vars.add_output('P', 17.0, units='psi')
        des_vars.add_output('T', 500.0, units='degR')
        des_vars.add_output('W', 100.0, units='lbm/s')
        des_vars.add_output('MN', 0.0)
        des_vars.add_output('Ps_exhaust', 10.0, units='lbf/inch**2')

        self.prob.model.add_subsystem(
            'flow_start', FlowStart(thermo_data=janaf, elements=AIR_MIX))
        self.prob.model.add_subsystem(
            'nozzle',
            Nozzle(elements=AIR_MIX, lossCoef='Cfg', internal_solver=True))

        fl_src = "flow_start.Fl_O"
        fl_target = "nozzle.Fl_I"
        for v_name in ('h', 'T', 'P', 'S', 'rho', 'gamma', 'Cp', 'Cv', 'n'):
            self.prob.model.connect('%s:tot:%s' % (fl_src, v_name),
                                    '%s:tot:%s' % (fl_target, v_name))

        # no prefix
        for v_name in ('W', ):  # ('Wc', 'W', 'FAR'):
            self.prob.model.connect('%s:stat:%s' % (fl_src, v_name),
                                    '%s:stat:%s' % (fl_target, v_name))

        self.prob.model.connect('W', 'flow_start.W')
        self.prob.model.connect('P', 'flow_start.P')
        self.prob.model.connect('T', 'flow_start.T')
        self.prob.model.connect('MN', 'flow_start.MN')
        # self.prob.model.connect('MN', 'nozzle.Fl_I:stat:MN')
        self.prob.model.connect('Ps_exhaust', 'nozzle.Ps_exhaust')
        # self.prob.model.connect('set_tp.props.tp2props.flow_prods', 'compressor.Fl_I:flow_prods')

        self.prob.setup(check=False)

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

            self.prob['nozzle.Cfg'] = data[h_map['Cfg']]
            self.prob['Ps_exhaust'] = data[h_map['PsExh']]
            # input flowstation

            self.prob['P'] = data[h_map['Fl_I.Pt']]
            self.prob['T'] = data[h_map['Fl_I.Tt']]
            self.prob['W'] = data[h_map['Fl_I.W']]
            self.prob['MN'] = data[h_map['Fl_I.MN']]

            # self.prob['nozzle.throat_static_choked.n2ls.P'] = data[h_map['Fl_O.Ps']]
            # self.prob.root.list_connections()
            self.prob.run_model()

            # print self.prob['nozzle.throat_static_choked.flow:h']
            # print self.prob['nozzle.throat_static_choked.flow:S']
            # quit()

            # check outputs
            Fg, V, PR = data[h_map['Fg']], data[h_map['Vactual']], data[
                h_map['PR']]
            MN = data[h_map['Fl_O.MN']]
            Ath = data[h_map['Ath']]
            Pt = data[h_map['Fl_O.Pt']]
            MN_computed = self.prob['nozzle.Fl_O:stat:MN']
            Fg_computed = self.prob['nozzle.Fg']
            V_computed = self.prob['nozzle.Fl_O:stat:V']
            PR_computed = self.prob['nozzle.PR']
            Ath_computed = self.prob['nozzle.Fl_O:stat:area']
            Pt_computed = self.prob['nozzle.Fl_O:tot:P']

            # print('Cfg:      ', self.prob['nozzle.Cfg'])
            # print('Ps_exh:   ', self.prob['Ps_exhaust'], data[h_map['PsExh']])
            # print('S_in:     ', self.prob['nozzle.Fl_I:tot:S'])
            # print('Pt_in:    ', self.prob['nozzle.Fl_I:tot:P'])
            # print('Tt_in:    ', self.prob['nozzle.Fl_I:tot:T'])
            # print('ht_in:    ', self.prob['nozzle.Fl_I:tot:h'])
            # print('rhot_in:  ', self.prob['nozzle.Fl_I:tot:rho'])
            # print('gamt_in:  ', self.prob['nozzle.Fl_I:tot:gamma'])
            # print('----------------------')
            # print('MNth:     ', self.prob['nozzle.Fl_O:stat:MN'])
            # print('S_out:    ', self.prob['nozzle.Fl_O:tot:S'])
            # print('Pt_out:   ', self.prob['nozzle.Fl_O:tot:P'])
            # print('Tt_out:   ', self.prob['nozzle.Fl_O:tot:T'])
            # print('ht_out:   ', self.prob['nozzle.Fl_O:tot:h'])
            # # print('rhot_out: ', self.prob['nozzle.Fl_O.rhot'])
            # # print('gamt_out: ', self.prob['nozzle.Fl_O.gamt'])
            # print('Ps_out:   ', self.prob['nozzle.Fl_O:stat:P'])
            # print('----------------------')
            # print('Fg:       ', self.prob['nozzle.Fg'])
            # print('Fg_ideal: ', self.prob['nozzle.perf_calcs.Fg_ideal'])
            # print('MN:       ', MN_computed, MN)
            # # print('V_actual: ', self.prob['nozzle..Vactual'])
            # # print('Aexit:    ', self.prob['nozzle.Fl_O.area'])
            # print('PR:       ', PR_computed, PR)
            # print('----------------------')

            # Used for all
            tol = 5.e-3

            assert_rel_error(self, MN_computed, MN, tol)

            # print "bar", Fg_computed, Fg
            assert_rel_error(self, Fg_computed, Fg, tol)
            assert_rel_error(self, V_computed, V, tol)
            assert_rel_error(self, Pt_computed, Pt, tol)

            # print "foo", PR_computed, PR
            # print("Fg_comp ", Fg_computed)

            # print("psE ", self.prob['nozzle.Ps_exhaust'])
            # print("videal ", self.prob['nozzle.perf_calcs.V_ideal'])
            # print("A ideal ", self.prob['nozzle.perf_calcs.A_ideal'])
            # print("Ps ideal ",self.prob['nozzle.perf_calcs.Ps_ideal'])
            # print("w ", self.prob['nozzle.Fl_I:stat:W'])
            # print("S ", self.prob['nozzle.ideal_flow.S'])
            # print("ht ", self.prob['nozzle.ideal_flow.ht'])
            # print("nn ", self.prob['nozzle.ideal_flow.init_prod_amounts'])
            # print("Ps ", self.prob['nozzle.ideal_flow.Ps'])
            # print("W_in ", self.prob['nozzle.perf_calcs.W_in'])
            # print("W ", self.prob['nozzle.Fl_O:stat:W'])

            assert_rel_error(self, PR_computed, PR, tol)
            assert_rel_error(self, Ath_computed, Ath, tol)

            check_element_partials(self, self.prob)
Ejemplo n.º 16
0
    def test_case1(self):
        np.seterr(divide='raise')

        fpath = os.path.dirname(os.path.realpath(__file__))
        ref_data = np.loadtxt(fpath + "/reg_data/compressorOD1.csv",
                              delimiter=",",
                              skiprows=1)

        header = [
            'comp.PRdes', 'comp.effDes', 'shaft.Nmech', 'comp.Fl_I.W',
            'comp.Fl_I.Pt', 'comp.Fl_I.Tt', 'comp.Fl_I.ht', 'comp.Fl_I.s',
            'comp.Fl_I.MN', 'comp.Fl_I.V', 'comp.Fl_I.A', 'comp.Fl_I.Ps',
            'comp.Fl_I.Ts', 'comp.Fl_I.hs', 'comp.Fl_O.W', 'comp.Fl_O.Pt',
            'comp.Fl_O.Tt', 'comp.Fl_O.ht', 'comp.Fl_O.s', 'comp.Fl_O.MN',
            'comp.Fl_O.V', 'comp.Fl_O.A', 'comp.Fl_O.Ps', 'comp.Fl_O.Ts',
            'comp.Fl_O.hs', 'comp.PR', 'comp.eff', 'comp.Nc', 'comp.Wc',
            'comp.pwr', 'comp.RlineMap', 'comp.PRmap', 'comp.effMap',
            'comp.NcMap', 'comp.WcMap', 'comp.s_WcDes', 'comp.s_PRdes',
            'comp.s_effDes', 'comp.s_NcDes', 'comp.SMW', 'comp.SMN'
        ]

        h_map = dict(((v_name, i) for i, v_name in enumerate(header)))
        # 6 cases to check against
        for i, data in enumerate(ref_data):
            # if i == 0:
            #     pass  # skip design case
            # else:
            self.prob['s_PR'] = data[h_map['comp.s_PRdes']]
            self.prob['s_Wc'] = data[h_map['comp.s_WcDes']]
            self.prob['s_eff'] = data[h_map['comp.s_effDes']]
            self.prob['s_Nc'] = data[h_map['comp.s_NcDes']]
            self.prob['compressor.map.RlineMap'] = data[h_map['comp.RlineMap']]
            self.prob['Nmech'] = data[h_map['shaft.Nmech']]

            # input flowstation
            self.prob['P'] = data[h_map['comp.Fl_I.Pt']]
            self.prob['T'] = data[h_map['comp.Fl_I.Tt']]
            self.prob['W'] = data[h_map['comp.Fl_I.W']]
            # cu(data[h_map['comp.Fl_O.A']],"inch**2", "m**2")
            self.prob['area_targ'] = data[h_map['comp.Fl_O.A']]

            self.prob.run_model()
            tol = 3.0e-3  # seems a little generous,
            # FL_O.Ps is off by 4% or less, everything else is <1% tol

            print('----- Test Case', i, '-----')
            npss = data[h_map['comp.Fl_I.Pt']]
            pyc = self.prob['flow_start.Fl_O:tot:P'][0]
            print('Pt in:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.Fl_I.s']]
            pyc = self.prob['flow_start.Fl_O:tot:S'][0]
            print('S in:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.Fl_I.W']]
            pyc = self.prob['compressor.Fl_O:stat:W'][0]
            print('W in:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.Fl_I.s']]
            pyc = self.prob['flow_start.Fl_O:tot:S'][0]
            print('S in:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.RlineMap']]
            pyc = self.prob['compressor.map.RlineMap'][0]
            print('RlineMap:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.PR']]
            pyc = self.prob['compressor.PR'][0]
            print('PR:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.eff']]
            pyc = self.prob['compressor.eff'][0]
            print('eff:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.Fl_O.ht']] - data[h_map['comp.Fl_I.ht']]
            pyc = self.prob['compressor.Fl_O:tot:h'][0] - self.prob[
                'flow_start.Fl_O:tot:h'][0]
            print('delta h:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.Fl_O.s']]
            pyc = self.prob['compressor.Fl_O:tot:S'][0]
            print('S out:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.pwr']]
            pyc = self.prob['compressor.power'][0]
            print('Power:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.Fl_O.Ps']]
            pyc = self.prob['compressor.Fl_O:stat:P'][0]
            print('Ps out:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.Fl_O.Ts']]
            pyc = self.prob['compressor.Fl_O:stat:T'][0]
            print('Ts out:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.SMW']]
            pyc = self.prob['compressor.SMW'][0]
            print('SMW:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.SMN']]
            pyc = self.prob['compressor.SMN'][0]
            print('SMN:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)
            print()

            check_element_partials(self, self.prob, tol=5e-5)
Ejemplo n.º 17
0
    def test_case1(self):

        prob = Problem()
        model = prob.model = Group()

        n_init = np.array([
            3.23319258e-04, 1.00000000e-10, 1.10131241e-05, 1.00000000e-10,
            1.63212420e-10, 6.18813039e-09, 1.00000000e-10, 2.69578835e-02,
            1.00000000e-10, 7.23198770e-03
        ])

        model.add_subsystem('des_var1',
                            IndepVarComp('Fl_I:tot:P',
                                         100.0,
                                         units='lbf/inch**2'),
                            promotes=["*"])
        model.add_subsystem('des_var2',
                            IndepVarComp('Fl_I:tot:h', 100.0, units='Btu/lbm'),
                            promotes=["*"])
        model.add_subsystem('des_var3',
                            IndepVarComp('Fl_I:stat:W', 100.0, units='lbm/s'),
                            promotes=["*"])
        model.add_subsystem('des_var4',
                            IndepVarComp('Fl_I:FAR', 0.0),
                            promotes=["*"])
        model.add_subsystem('des_var5',
                            IndepVarComp('MN', 0.5),
                            promotes=["*"])
        model.add_subsystem('des_var6',
                            IndepVarComp('Fl_I:tot:n', n_init),
                            promotes=["*"])

        model.add_subsystem('combustor', Combustor(), promotes=["*"])

        prob.set_solver_print(level=2)
        prob.setup(check=False)

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

            # input flowstation
            prob['Fl_I:tot:P'] = data[h_map['Fl_I.Pt']]
            prob['Fl_I:tot:h'] = data[h_map['Fl_I.ht']]
            prob['Fl_I:stat:W'] = data[h_map['Fl_I.W']]
            prob['Fl_I:FAR'] = data[h_map['FAR']]
            prob['MN'] = data[h_map['Fl_O.MN']]

            prob.run_model()

            # check outputs
            tol = 1.0e-2

            npss = data[h_map['Fl_O.Pt']]
            pyc = prob['Fl_O:tot:P']
            rel_err = abs(npss - pyc) / npss
            print('Pt out:', npss, pyc, rel_err)
            self.assertLessEqual(rel_err, tol)

            npss = data[h_map['Fl_O.Tt']]
            pyc = prob['Fl_O:tot:T']
            rel_err = abs(npss - pyc) / npss
            print('Tt out:', npss, pyc, rel_err)
            self.assertLessEqual(rel_err, tol)

            npss = data[h_map['Fl_O.ht']]
            pyc = prob['Fl_O:tot:h']
            rel_err = abs(npss - pyc) / npss
            print('ht out:', npss, pyc, rel_err)
            self.assertLessEqual(rel_err, tol)

            npss = data[h_map['Fl_O.Ps']]
            pyc = prob['Fl_O:stat:P']
            rel_err = abs(npss - pyc) / npss
            print('Ps out:', npss, pyc, rel_err)
            self.assertLessEqual(rel_err, tol)

            npss = data[h_map['Fl_O.Ts']]
            pyc = prob['Fl_O:stat:T']
            rel_err = abs(npss - pyc) / npss
            print('Ts out:', npss, pyc, rel_err)
            self.assertLessEqual(rel_err, tol)

            npss = data[h_map['Wfuel']]
            pyc = prob['Fl_I:stat:W'] * (prob['Fl_I:FAR'])
            rel_err = abs(npss - pyc) / npss
            print('Wfuel:', npss, pyc, rel_err)
            self.assertLessEqual(rel_err, tol)

            print('')

            check_element_partials(self, prob, tol=1e-4)
Ejemplo n.º 18
0
    def test_case1(self):

        thermo = Thermo(janaf, AIR_MIX)

        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(
            'nozzle',
            Nozzle(elements=AIR_MIX, lossCoef='Cfg', internal_solver=True))

        self.prob.model.set_input_defaults('nozzle.Ps_exhaust',
                                           10.0,
                                           units='lbf/inch**2')
        self.prob.model.set_input_defaults('flow_start.MN', 0.0)
        self.prob.model.set_input_defaults('flow_start.T', 500.0, units='degR')
        self.prob.model.set_input_defaults('flow_start.P', 17.0, units='psi')
        self.prob.model.set_input_defaults('flow_start.W',
                                           100.0,
                                           units='lbm/s')

        fl_src = "flow_start.Fl_O"
        fl_target = "nozzle.Fl_I"
        for v_name in ('h', 'T', 'P', 'S', 'rho', 'gamma', 'Cp', 'Cv', 'n'):
            self.prob.model.connect('%s:tot:%s' % (fl_src, v_name),
                                    '%s:tot:%s' % (fl_target, v_name))

        # no prefix
        for v_name in ('W', ):
            self.prob.model.connect('%s:stat:%s' % (fl_src, v_name),
                                    '%s:stat:%s' % (fl_target, v_name))

        self.prob.setup(check=False)

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

            self.prob['nozzle.Cfg'] = data[h_map['Cfg']]
            self.prob['nozzle.Ps_exhaust'] = data[h_map['PsExh']]
            # input flowstation

            self.prob['flow_start.P'] = data[h_map['Fl_I.Pt']]
            self.prob['flow_start.T'] = data[h_map['Fl_I.Tt']]
            self.prob['flow_start.W'] = data[h_map['Fl_I.W']]
            self.prob['flow_start.MN'] = data[h_map['Fl_I.MN']]

            self.prob.run_model()

            # check outputs
            Fg, V, PR = data[h_map['Fg']], data[h_map['Vactual']], data[
                h_map['PR']]
            MN = data[h_map['Fl_O.MN']]
            Ath = data[h_map['Ath']]
            Pt = data[h_map['Fl_O.Pt']]
            MN_computed = self.prob['nozzle.Fl_O:stat:MN']
            Fg_computed = self.prob['nozzle.Fg']
            V_computed = self.prob['nozzle.Fl_O:stat:V']
            PR_computed = self.prob['nozzle.PR']
            Ath_computed = self.prob['nozzle.Fl_O:stat:area']
            Pt_computed = self.prob['nozzle.Fl_O:tot:P']

            # Used for all
            tol = 5.e-3

            assert_near_equal(MN_computed, MN, tol)

            assert_near_equal(Fg_computed, Fg, tol)
            assert_near_equal(V_computed, V, tol)
            assert_near_equal(Pt_computed, Pt, tol)

            assert_near_equal(PR_computed, PR, tol)
            assert_near_equal(Ath_computed, Ath, tol)

            check_element_partials(self, self.prob)
Ejemplo n.º 19
0
    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)
Ejemplo n.º 20
0
    def test_case1(self):
        np.seterr(divide='raise')
        # 6 cases to check against
        for i, data in enumerate(ref_data):
            self.prob['PR'] = data[h_map['comp.PRdes']]
            self.prob['eff'] = data[h_map['comp.effDes']]
            self.prob['MN'] = data[h_map['comp.Fl_O.MN']]

            # input flowstation
            self.prob['P'] = data[h_map['start.Pt']]
            self.prob['T'] = data[h_map['start.Tt']]
            self.prob['W'] = data[h_map['start.W']]
            self.prob.run_model()

            # print("    mapPRdes     :         PRdes       :        PR       :      scalarsPRmapDes : scaledOutput.PR")
            # print(self.prob['PR'], data[h_map['comp.PRdes']], self.prob[
            #       'PR'], self.prob['compressor.map.PRmap'])
            # print("s_PR", self.prob['compressor.s_PR'])

            # print("    mapeffDes     :         effDes       :        eff       :      scalars_effMapDes : scaledOutput.eff")
            # print(self.prob['compressor.map.effDes'], data[h_map['comp.effDes']], self.prob[
            #       'compressor.eff'], self.prob['compressor.map.scalars.effMapDes'])
            # print("Rline", self.prob['compressor.map.RlineMap'])

            # print(self.prob.model.resids._dat.keys())

            #print("errWc: ", self.prob.model.resids['compressor.map.RlineMap'])

            # quit()
            # check outputs
            tol = 1e-3

            npss = data[h_map['comp.Fl_O.Pt']]
            pyc = self.prob['compressor.Fl_O:tot:P'][0]
            print('Pt out:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.Fl_O.Tt']]
            pyc = self.prob['compressor.Fl_O:tot:T'][0]
            # print('foo test:', self.prob['compressor.enth_rise.ht_out'][0], data[h_map['start.Fl_O.ht']])
            print('Tt out:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.Fl_O.ht']] - data[h_map['start.Fl_O.ht']]
            pyc = self.prob['compressor.Fl_O:tot:h'] - self.prob['flow_start.Fl_O:tot:h']
            print('delta h:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['start.Fl_O.s']]
            pyc = self.prob['flow_start.Fl_O:tot:S'][0]
            print('S in:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.Fl_O.s']]
            pyc = self.prob['compressor.Fl_O:tot:S'][0]
            print('S out:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.pwr']]
            pyc = self.prob['compressor.power'][0]
            print('Power:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['Fl_O.Ps']]
            pyc = self.prob['compressor.Fl_O:stat:P'][0]
            print('Ps out:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['Fl_O.Ts']]
            pyc = self.prob['compressor.Fl_O:stat:T'][0]
            print('Ts out:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)

            npss = data[h_map['comp.effPoly']]
            pyc = self.prob['compressor.eff_poly'][0]
            print('effPoly:', npss, pyc)
            assert_rel_error(self, pyc, npss, tol)
            print("")

            check_element_partials(self, self.prob,tol = 5e-5)
Ejemplo n.º 21
0
    def test_case0(self):
        # captured inputs:
        prob = Problem()
        prob.model = Inlet()

        prob.setup()

        # view_model(p)
        prob.run_model()
        tol = 1e-7

        prob['flow_in.Fl_I:tot:h'] = np.array([1.])
        prob['flow_in.Fl_I:tot:T'] = np.array([518.])
        prob['flow_in.Fl_I:tot:P'] = np.array([1.])
        prob['flow_in.Fl_I:tot:rho'] = np.array([1.])
        prob['flow_in.Fl_I:tot:gamma'] = np.array([1.3999999999999999])
        prob['flow_in.Fl_I:tot:Cp'] = np.array([1.])
        prob['flow_in.Fl_I:tot:Cv'] = np.array([1.])
        prob['flow_in.Fl_I:tot:S'] = np.array([1.])
        prob['flow_in.Fl_I:tot:n'] = np.array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
        prob['flow_in.Fl_I:stat:h'] = np.array([1.])
        prob['flow_in.Fl_I:stat:T'] = np.array([518.])
        prob['flow_in.Fl_I:stat:P'] = np.array([1.])
        prob['flow_in.Fl_I:stat:rho'] = np.array([1.])
        prob['flow_in.Fl_I:stat:gamma'] = np.array([1.3999999999999999])
        prob['flow_in.Fl_I:stat:Cp'] = np.array([1.])
        prob['flow_in.Fl_I:stat:Cv'] = np.array([1.])
        prob['flow_in.Fl_I:stat:S'] = np.array([0.])
        prob['flow_in.Fl_I:stat:n'] = np.array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
        prob['flow_in.Fl_I:stat:V'] = np.array([1.])
        prob['flow_in.Fl_I:stat:Vsonic'] = np.array([1.])
        prob['flow_in.Fl_I:stat:MN'] = np.array([1.])
        prob['flow_in.Fl_I:stat:area'] = np.array([1.])
        prob['flow_in.Fl_I:stat:Wc'] = np.array([1.])
        prob['flow_in.Fl_I:stat:W'] = np.array([0.])
        prob['flow_in.Fl_I:FAR'] = np.array([1.])
        prob['calcs_inlet.Pt_in'] = np.array([5.])
        prob['calcs_inlet.ram_recovery'] = np.array([1.])
        prob['calcs_inlet.V_in'] = np.array([0.])
        prob['calcs_inlet.W_in'] = np.array([100.])
        prob['real_flow.flow.T'] = np.array([284.])
        prob['real_flow.flow.P'] = np.array([5.])
        prob['real_flow.flow.h'] = np.array([-7.9733188552527334])
        prob['real_flow.flow.S'] = np.array([1.7017265964076564])
        prob['real_flow.flow.gamma'] = np.array([1.4002877621616485])
        prob['real_flow.flow.Cp'] = np.array([0.2398396648541221])
        prob['real_flow.flow.Cv'] = np.array([0.1712788399253588])
        prob['real_flow.flow.rho'] = np.array([0.0263992728679074])
        prob['real_flow.flow.n'] = np.array([3.2331925838204755e-04, 1.0000000000000000e-10,
                                             1.1013124070888753e-05, 1.0000000000000000e-10,
                                             1.0000000000000000e-10, 1.0000000000000000e-10,
                                             1.0000000000000000e-10, 2.6957886582171697e-02,
                                             1.0000000000000000e-10, 7.2319938237413537e-03])
        prob['real_flow.flow.n_moles'] = np.array([0.034524213388366])
        prob['FAR_passthru.Fl_I:FAR'] = np.array([0.])
        prob['out_stat.statics.ps_resid.Ts'] = np.array([270.4606098605202078])
        prob['out_stat.statics.ps_resid.ht'] = np.array([-18545.9396573178637482])
        prob['out_stat.statics.ps_resid.hs'] = np.array([-32137.5489635905178147])
        prob['out_stat.statics.ps_resid.n_moles'] = np.array([0.034524213388366])
        prob['out_stat.statics.ps_resid.gamma'] = np.array([1.4005512841014192])
        prob['out_stat.statics.ps_resid.W'] = np.array([1.])
        prob['out_stat.statics.ps_resid.rho'] = np.array([0.3743153852344497])
        prob['out_stat.statics.ps_resid.guess:gamt'] = np.array([1.4002877621616485])
        prob['out_stat.statics.ps_resid.guess:Pt'] = np.array([0.3447378650257302])
        prob['out_stat.statics.ps_resid.MN'] = np.array([0.5])
        prob['out_stat.flow.T'] = np.array([486.8290977489364195])
        prob['out_stat.flow.P'] = np.array([4.2148347084158546])
        prob['out_stat.flow.h'] = np.array([-13.8166590557138917])
        prob['out_stat.flow.S'] = np.array([1.701726596407656])
        prob['out_stat.flow.gamma'] = np.array([1.4005512841014192])
        prob['out_stat.flow.Cp'] = np.array([0.2397269927781015])
        prob['out_stat.flow.Cv'] = np.array([0.1711661644315738])
        prob['out_stat.flow.rho'] = np.array([0.0233677461124606])
        prob['out_stat.flow.n'] = np.array([3.2331925838204755e-04, 1.0000000000330098e-10,
                                            1.1013124070888747e-05, 1.0000000000001391e-10,
                                            1.0000000000147303e-10, 1.0000000000000000e-10,
                                            1.0000000000053357e-10, 2.6957886582171697e-02,
                                            1.0000000000021437e-10, 7.2319938237413537e-03])
        prob['out_stat.flow.n_moles'] = np.array([0.034524213388366])
        prob['out_stat.flow_static.area'] = np.array([25.1156515934009938])
        prob['out_stat.flow_static.W'] = np.array([1.])
        prob['out_stat.flow_static.V'] = np.array([540.9230351753141122])
        prob['out_stat.flow_static.Vsonic'] = np.array([1081.8460703506282243])
        prob['out_stat.flow_static.MN'] = np.array([0.5])

        # captured outputs:
        assert_rel_error(self, prob['flow_in.foo'], np.array([1.]), tol)
        assert_rel_error(self, prob['calcs_inlet.Pt_out'], np.array([5.]), tol)
        assert_rel_error(self, prob['calcs_inlet.F_ram'], np.array([0.]), tol)
        assert_rel_error(self, prob['real_flow.flow.Fl_O:tot:T'], np.array([284.]), tol)
        assert_rel_error(self, prob['real_flow.flow.Fl_O:tot:P'], np.array([5.]), tol)
        assert_rel_error(self, prob['real_flow.flow.Fl_O:tot:h'],
                         np.array([-7.9733188552527361]), tol)
        assert_rel_error(
            self,
            prob['real_flow.flow.Fl_O:tot:S'],
            np.array(
                [1.701726596407656]),
            tol)
        assert_rel_error(
            self,
            prob['real_flow.flow.Fl_O:tot:gamma'],
            np.array(
                [1.4002877621616485]),
            tol)
        assert_rel_error(self, prob['real_flow.flow.Fl_O:tot:Cp'],
                         np.array([0.2398396648541221]), tol)
        assert_rel_error(self, prob['real_flow.flow.Fl_O:tot:Cv'],
                         np.array([0.1712788399253588]), tol)
        assert_rel_error(self, prob['real_flow.flow.Fl_O:tot:rho'],
                         np.array([0.0263992728679074]), tol)
        assert_rel_error(self,
                         prob['real_flow.flow.Fl_O:tot:n'],
                         np.array([3.2331925838204755e-04,
                                   1.0000000000000000e-10,
                                   1.1013124070888753e-05,
                                   1.0000000000000000e-10,
                                   1.0000000000000000e-10,
                                   1.0000000000000000e-10,
                                   1.0000000000000000e-10,
                                   2.6957886582171697e-02,
                                   1.0000000000000000e-10,
                                   7.2319938237413537e-03]),
                         tol)
        assert_rel_error(
            self,
            prob['real_flow.flow.Fl_O:tot:n_moles'],
            np.array(
                [0.034524213388366]),
            tol)
        assert_rel_error(self, prob['FAR_passthru.Fl_O:FAR'], np.array([0.]), tol)
        assert_rel_error(
            self,
            prob['out_stat.statics.ps_resid.Ps'],
            np.array(
                [0.2906026237631253]),
            tol)
        assert_rel_error(self, prob['out_stat.statics.ps_resid.V'],
                         np.array([164.8733411214357432]), tol)
        assert_rel_error(self, prob['out_stat.statics.ps_resid.Vsonic'],
                         np.array([329.7466822428714863]), tol)
        assert_rel_error(
            self,
            prob['out_stat.statics.ps_resid.area'],
            np.array(
                [0.0162036137819986]),
            tol)
        assert_rel_error(self, prob['out_stat.flow.Fl_O:stat:T'],
                         np.array([486.8290977489363058]), tol)
        assert_rel_error(self, prob['out_stat.flow.Fl_O:stat:P'],
                         np.array([4.2148347084158537]), tol)
        assert_rel_error(self, prob['out_stat.flow.Fl_O:stat:h'],
                         np.array([-13.8166590557138935]), tol)
        assert_rel_error(
            self,
            prob['out_stat.flow.Fl_O:stat:S'],
            np.array(
                [1.701726596407656]),
            tol)
        assert_rel_error(
            self,
            prob['out_stat.flow.Fl_O:stat:gamma'],
            np.array(
                [1.4005512841014192]),
            tol)
        assert_rel_error(self, prob['out_stat.flow.Fl_O:stat:Cp'],
                         np.array([0.2397269927781014]), tol)
        assert_rel_error(self, prob['out_stat.flow.Fl_O:stat:Cv'],
                         np.array([0.1711661644315738]), tol)
        assert_rel_error(self, prob['out_stat.flow.Fl_O:stat:rho'],
                         np.array([0.0233677461124606]), tol)
        assert_rel_error(self,
                         prob['out_stat.flow.Fl_O:stat:n'],
                         np.array([3.2331925838204755e-04,
                                   1.0000000000330098e-10,
                                   1.1013124070888747e-05,
                                   1.0000000000001391e-10,
                                   1.0000000000147303e-10,
                                   1.0000000000000000e-10,
                                   1.0000000000053357e-10,
                                   2.6957886582171697e-02,
                                   1.0000000000021437e-10,
                                   7.2319938237413537e-03]),
                         tol)
        assert_rel_error(
            self,
            prob['out_stat.flow.Fl_O:stat:n_moles'],
            np.array(
                [0.034524213388366]),
            tol)
        assert_rel_error(
            self,
            prob['out_stat.flow_static.Fl_O:stat:area'],
            np.array(
                [25.1156515934009938]),
            tol)
        assert_rel_error(self, prob['out_stat.flow_static.Fl_O:stat:W'], np.array([1.]), tol)
        assert_rel_error(self, prob['out_stat.flow_static.Fl_O:stat:V'],
                         np.array([540.9230351753141122]), tol)
        assert_rel_error(
            self,
            prob['out_stat.flow_static.Fl_O:stat:Vsonic'],
            np.array(
                [1081.8460703506282243]),
            tol)
        assert_rel_error(self, prob['out_stat.flow_static.Fl_O:stat:MN'], np.array([0.5]), tol)

        check_element_partials(self, prob, depth=1)