def test_splitterW(self): g = Group() p = Problem(root=g) comp = g.add('comp', SplitterW()) p.setup(check=False) comp.params['W1_des'] = 1.08 comp.params['MNexit1_des'] = 1.0 comp.params['MNexit2_des'] = 1.0 comp.params['design'] = True comp.params['flow_in:in:W'] = 3.48771299 comp.params['flow_in:in:Tt'] = 630.74523 comp.params['flow_in:in:Pt'] = 0.0271945 comp.params['flow_in:in:Mach'] = 1.0 p.run() self.check(comp) comp.params['design'] = False comp.params['flow_out_1:in:is_super'] = True comp.params['flow_out_2:in:is_super'] = True p.run() self.check(comp) comp.params['flow_in:in:W'] *= 0.95 comp.params['flow_out_1:in:is_super'] = False comp.params['flow_out_2:in:is_super'] = False p.run() TOL = 0.001 assert_rel_error(self, comp.unknowns['flow_out_1:out:Mach'], 0.76922, TOL) assert_rel_error(self, comp.unknowns['flow_out_2:out:Mach'], 0.76922, TOL)
def test_copy_flow(self): self.comp1.params['flow:in:W'] = 100.0 self.comp1.params['flow:in:Tt'] = 518.0 self.comp1.params['flow:in:Pt'] = 15.0 CycleComponent.copy_from(self.comp1, 'flow', self.comp2, 'flow') self.p.run() TOL = 0.0001 assert_rel_error(self, self.comp2.unknowns['flow:out:Tt'], 518.0, TOL) assert_rel_error(self, self.comp2.unknowns['flow:out:Pt'], 15.0, TOL)
def test_nozzle_under(self): self.comp.params['back_Ps'] = 14.0 self.comp.params['design'] = False self.p.run() assert_rel_error(self, self.comp.unknowns['flow_out:out:W'], 100.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Pt'], 50.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Tt'], 700.0, TOL) assert_rel_error(self, self.comp.unknowns['Athroat_dmd'], 99.59, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:area'], 112.88, TOL) self.assertEqual(self.comp.unknowns['switchRegime'], 'UNDEREXPANDED')
def test_compressor(self): comp = Compressor() g = Group() g.add('comp', comp) p = Problem(root=g) p.setup() comp.params['PR_des'] = 12.47 comp.params['MNexit_des'] = 0.4 comp.params['eff_des'] = 0.8 comp.params['flow_in:in:W'] = 1.08 comp.params['flow_in:in:Tt'] = 630.74523 comp.params['flow_in:in:Pt'] = 0.0271945 comp.params['flow_in:in:Mach'] = 0.6 comp.params['design'] = True p.run() TOL = 0.001 assert_rel_error(self, comp.unknowns['flow_out:out:W'], 1.08, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Pt'], 0.33899, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Tt'], 1424.01, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:rhos'], 0.000594, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Mach'], 0.4 ,TOL) assert_rel_error(self, comp.unknowns['flow_out:out:area'], 364.7, TOL) assert_rel_error(self, comp.unknowns['pwr'], 303.2, TOL) assert_rel_error(self, comp.unknowns['eff_poly'], 0.8545, TOL) # run off design comp.params['design'] = False p.run() # values should remain unchanged in off-design at design condition assert_rel_error(self, comp.unknowns['flow_out:out:W'], 1.08, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Pt'], 0.33899, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Tt'], 1424.01, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:rhos'], 0.000594, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Mach'], 0.4 ,TOL) assert_rel_error(self, comp.unknowns['flow_out:out:area'], 364.7, TOL) assert_rel_error(self, comp.unknowns['pwr'], 303.2, TOL) assert_rel_error(self, comp.unknowns['eff_poly'], 0.8545, TOL) # try changing something comp.params['flow_in:in:W'] *= 1.1 p.run() assert_rel_error(self, comp.unknowns['PR'], 13.52995, TOL)
def check(self, comp): TOL = .001 assert_rel_error(self, comp.unknowns['flow_out_1:out:W'], 1.08, TOL) assert_rel_error(self, comp.unknowns['flow_out_1:out:Pt'], 0.0271945, TOL) assert_rel_error(self, comp.unknowns['flow_out_1:out:Tt'], 630.75, TOL) assert_rel_error(self, comp.unknowns['flow_out_1:out:Mach'], 1.0, TOL) assert_rel_error(self, comp.unknowns['flow_out_1:out:area'], 1877.2, TOL) assert_rel_error(self, comp.unknowns['flow_out_1:out:rhos'], 0.0000737216, TOL) assert_rel_error(self, comp.unknowns['flow_out_2:out:W'], 2.407, TOL) assert_rel_error(self, comp.unknowns['flow_out_2:out:Pt'], 0.0271945, TOL) assert_rel_error(self, comp.unknowns['flow_out_2:out:Tt'], 630.75, TOL) assert_rel_error(self, comp.unknowns['flow_out_2:out:Mach'], 1.0, TOL) assert_rel_error(self, comp.unknowns['flow_out_2:out:area'], 4183.4, TOL) assert_rel_error(self, comp.unknowns['flow_out_2:out:rhos'], 0.0000737216, TOL)
def test_nozzle_over(self): self.comp.params['back_Ps'] = 16.0 self.comp.params['design'] = False self.p.run() self.assertEqual(self.comp.unknowns['switchRegime'], 'OVEREXPANDED') assert_rel_error(self, self.comp.unknowns['flow_out:out:W'], 100.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Pt'], 50.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Tt'], 700.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Ps'], 15.0, TOL) self.comp.params['back_Ps'] = 19.0 self.p.run() self.assertEqual(self.comp.unknowns['switchRegime'], 'OVEREXPANDED') assert_rel_error(self, self.comp.unknowns['flow_out:out:Ps'], 15.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Mach'], 1.432, TOL) self.comp.params['back_Ps'] = 24.0 self.p.run() self.assertEqual(self.comp.unknowns['switchRegime'], 'OVEREXPANDED') self.comp.params['back_Ps'] = Pt=27.0 self.p.run() self.assertEqual(self.comp.unknowns['switchRegime'],'OVEREXPANDED') self.comp.params['back_Ps'] = 32.0 self.p.run() self.assertEqual(self.comp.unknowns['switchRegime'],'OVEREXPANDED')
def test_nozzle_off_design(self): assert_rel_error(self, self.comp.unknowns['flow_out:out:W'], 100.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Pt'], 50.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Tt'], 700.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Mach'], 1.432, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:area'], 112.88, TOL) assert_rel_error(self, self.comp.unknowns['Athroat_des'], 99.59, TOL) assert_rel_error(self, self.comp.unknowns['Aexit_des'], 112.88, TOL) #off design calcs self.comp.params['design'] = False self.p.run() assert_rel_error(self, self.comp.unknowns['flow_out:out:W'], 100.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Pt'], 50.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Tt'], 700.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Mach'], 1.432, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:area'], 112.88, TOL) assert_rel_error(self, self.comp.unknowns['Athroat_des'], 99.59, TOL) assert_rel_error(self, self.comp.unknowns['Aexit_des'], 112.88, TOL)
def test_nozzle_very_low_temperatures(self): comp = Nozzle() g = Group() g.add('comp', comp) p = Problem(root=g) p.setup(check=False) comp.params['flow_in:in:W'] = 0.639 comp.params['flow_in:in:Tt'] = 540.0 comp.params['flow_in:in:Pt'] = 0.34 comp.params['flow_in:in:Mach'] = 0.4 comp.params['back_Ps'] = 0.0272 comp.params['design'] = True p.run() TOL = 0.01 #this test needs larger tollerance due to exteremely low temperatures assert_rel_error(self, comp.unknowns['flow_out:out:W'], 0.639, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Pt'], 0.34, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Tt'], 540.0, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Mach'], 2.7092, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:area'], 264.204, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:rhos'], .000177443, TOL) assert_rel_error(self, comp.unknowns['Fg'], 38.98, TOL) #off design calcs comp.params['design'] = False p.run() self.assertEqual(comp.unknowns['switchRegime'], 'PERFECTLY_EXPANDED') assert_rel_error(self, comp.unknowns['flow_out:out:W'], 0.639, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Pt'], 0.34, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Tt'], 540.0, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Mach'], 2.7092, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:area'], 264.204, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:rhos'], 0.000177443, TOL) comp.params['back_Ps'] = 0.03 p.run() self.assertEqual(comp.unknowns['switchRegime'], 'OVEREXPANDED') comp.params['back_Ps'] = 0.026 p.run() self.assertEqual(comp.unknowns['switchRegime'], 'UNDEREXPANDED')
def test_nozzle_normal_shock(self): self.comp.params['back_Ps'] = 35.0 self.comp.params['design'] = False self.p.run() self.assertEqual(self.comp.unknowns['switchRegime'], 'NORMAL_SHOCK') assert_rel_error(self, self.comp.unknowns['flow_out:out:W'], 100.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Pt'], 50.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Tt'], 700., TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Ps'], 35.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Mach'], 0.697, TOL) self.comp.params['back_Ps'] = 37.0 self.p.run() self.assertEqual(self.comp.unknowns['switchRegime'], 'NORMAL_SHOCK') assert_rel_error(self, self.comp.unknowns['flow_out:out:W'], 100.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Pt'], 50.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Tt'], 700.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Ps'], 37.0, TOL) assert_rel_error(self, self.comp.unknowns['flow_out:out:Mach'], 0.662, TOL)
def test_heat_exchanger(self): comp = HeatExchanger() g = Group() g.add('comp', comp) p = Problem(root=g) p.setup() comp.params['flow_in:in:Tt'] = 1423.8 comp.params['flow_in:in:Pt'] = 0.302712118187 comp.params['flow_in:in:W'] = 1.0 comp.params['dPqP'] = 0.0 comp.params['design'] = True p.run() TOL = 0.005 assert_rel_error(self, comp.unknowns['flow_out:out:Tt'], 539.94, TOL) assert_rel_error(self, comp.unknowns['Qreleased'], 327.22, TOL) assert_rel_error(self, comp.unknowns['Qabsorbed'], 327.22, TOL) assert_rel_error(self, comp.unknowns['Qmax'], 335.1, TOL) assert_rel_error(self, comp.unknowns['T_cold_out'], 749.96, TOL) #check off design comp.params['design'] = False p.run() assert_rel_error(self, comp.unknowns['flow_out:out:Tt'], 539.94, TOL) assert_rel_error(self, comp.unknowns['Qreleased'], 327.22, TOL) assert_rel_error(self, comp.unknowns['Qabsorbed'], 327.22, TOL) assert_rel_error(self, comp.unknowns['Qmax'], 335.1, TOL) assert_rel_error(self, comp.unknowns['T_cold_out'], 749.96, TOL)
def test_inlet(self): comp = Inlet() g = Group() g.add('comp', comp) p = Problem(root=g) p.setup() comp.params['ram_recovery'] = 1.0 comp.params['MNexit_des'] = 0.6 comp.params['flow_in:in:W'] = 1.08 comp.params['flow_in:in:Tt'] = 630.75 comp.params['flow_in:in:Pt'] = 0.0272 comp.params['flow_in:in:Mach'] = 1.0 comp.params['design'] = True p.run() TOL = 0.005 assert_rel_error(self, comp.unknowns['flow_out:out:W'], 1.080, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Pt'], 0.0272, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Tt'], 630.75, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:rhos'], 0.000098, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Mach'], 0.6, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:area'], 2230.8, TOL) #check off design comp.params['design'] = False p.run() assert_rel_error(self, comp.unknowns['flow_out:out:W'], 1.080, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Pt'], 0.0272, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Tt'], 630.75, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:rhos'], 0.000098, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Mach'], 0.6, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:area'], 2230.8, TOL) #vary something comp.params['flow_in:in:W'] = 0.9 p.run() assert_rel_error(self, comp.unknowns['flow_out:out:W'], 0.9, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Pt'], 0.0272, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Tt'], 630.75, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:Mach'], 0.45955, TOL) assert_rel_error(self, comp.unknowns['flow_out:out:area'], 2230.8, TOL)
def test_dels(self): s = flowstation.solve(Pt=15.0, Tt=518.0, W=100.0).s flow = flowstation.solve(Tt=1000.0, Pt=40.0, W=100.0) diffs = flow.s - s assert_rel_error(self, diffs, .092609, .0001)
def test_delh(self): ht = flowstation.solve(Pt=15.0, Tt=518.0, W=100.0).ht flow = flowstation.solve(Tt=1000.0, Pt=40.0, W=100.0) diffh = flow.ht - ht assert_rel_error(self, diffh, 117.4544, .0001)
def _assert(self, flow): TOL = 0.0005 assert_rel_error(self, flow.area, 32.006, TOL) assert_rel_error(self, flow.Mach, .3, TOL) assert_rel_error(self, flow.Ps, 376.194, TOL) assert_rel_error(self, flow.Ts, 1081.781, TOL) assert_rel_error(self, flow.Vflow, 479.519, TOL) assert_rel_error(self, flow.rhos, .93826, TOL) assert_rel_error(self, flow.gams, 1.37596, TOL)