def test_simple_integration(self):

        p = Problem(model=Group())
        p.model = Group()

        time_options = TimeOptionsDictionary()
        time_options['units'] = 's'
        time_options['targets'] = 't'

        state_options = {}
        state_options['y'] = StateOptionsDictionary()
        state_options['y']['units'] = 'm'
        state_options['y']['targets'] = 'y'
        state_options['y']['rate_source'] = 'ydot'

        gd = GridData(num_segments=4, transcription='gauss-lobatto', transcription_order=3)

        seg0_comp = SegmentSimulationComp(index=0, grid_data=gd, method='RK45',
                                          atol=1.0E-9, rtol=1.0E-9,
                                          ode_class=TestODE, time_options=time_options,
                                          state_options=state_options)

        p.model.add_subsystem('segment_0', subsys=seg0_comp)

        p.setup(check=True)

        p.set_val('segment_0.time', [0, 0.25, 0.5])
        p.set_val('segment_0.initial_states:y', 0.5)

        p.run_model()

        assert_rel_error(self,
                         p.get_val('segment_0.states:y', units='m')[-1, ...],
                         1.425639364649936,
                         tolerance=1.0E-6)
Пример #2
0
    def test_varying_bypass(self):
        nn = 4
        p = Problem()
        p.model = HeatPumpWithIntegratedCoolantLoop(num_nodes=nn)
        p.model.set_input_defaults('power_rating', val=1., units='kW')
        p.model.linear_solver = DirectSolver()
        p.model.nonlinear_solver = NewtonSolver()
        p.model.nonlinear_solver.options['solve_subsystems'] = True
        p.setup()
        p.set_val('T_in_hot', 350., units='K')
        p.set_val('T_in_cold', 300., units='K')
        p.set_val('mdot_coolant', 1., units='kg/s')
        p.set_val('control.bypass_start', 0.)
        p.set_val('control.bypass_end', 1.)
        p.run_model()

        assert_near_equal(
            p.get_val('T_out_hot', units='K'),
            np.array([350.87503524, 333.91669016, 316.95834508, 300.]),
            tolerance=1e-10)
        assert_near_equal(
            p.get_val('T_out_cold', units='K'),
            np.array([299.38805342, 316.25870228, 333.12935114, 350.]),
            tolerance=1e-10)
        assert_near_equal(p.get_val('component_weight', units='kg'),
                          np.array([5.]),
                          tolerance=1e-10)
        assert_near_equal(p.get_val('elec_load', units='W'),
                          np.array(
                              [1052.63157895, 701.75438596, 350.87719298, 0.]),
                          tolerance=1e-10)
Пример #3
0
    def test_serial_multi_src_inds_units_setval_promoted(self):
        p = Problem()
        indep = p.model.add_subsystem('indep', IndepVarComp(), promotes=['x'])
        indep.add_output('x', units='inch', val=np.ones(10))
        p.model.add_subsystem('C1', ExecComp('y=x*2.',
                                             x={'val': np.zeros(7),
                                                'units': 'ft'},
                                             y={'val': np.zeros(7), 'units': 'ft'}))
        p.model.add_subsystem('C2', ExecComp('y=x*3.',
                                             x={'val': np.zeros(3),
                                                'units': 'inch'},
                                             y={'val': np.zeros(3), 'units': 'inch'}))

        p.model.promotes('C1', inputs=['x'], src_indices=list(range(7)))
        p.model.promotes('C2', inputs=['x'], src_indices=list(range(7, 10)))

        p.setup()

        p.set_val('C1.x', np.ones(7) * 24., units='inch')
        p.set_val('C2.x', np.ones(3) * 3., units='inch')

        p.run_model()

        np.testing.assert_allclose(p['indep.x'][:7], np.ones(7) * 24.)
        np.testing.assert_allclose(p['indep.x'][7:10], np.ones(3) * 3.)
        np.testing.assert_allclose(p['C1.x'], np.ones(7) * 2.)
        np.testing.assert_allclose(p['C1.y'], np.ones(7) * 4.)
        np.testing.assert_allclose(p['C2.x'], np.ones(3) * 3.)
        np.testing.assert_allclose(p['C2.y'], np.ones(3) * 9.)
Пример #4
0
    def test_no_bypass(self):
        # Set up the heat pump problem with 11 evaluation points
        nn = 4
        p = Problem()
        p.model = HeatPumpWithIntegratedCoolantLoop(num_nodes=nn)
        p.model.set_input_defaults('power_rating', val=1., units='kW')
        p.model.linear_solver = DirectSolver()
        p.model.nonlinear_solver = NewtonSolver()
        p.model.nonlinear_solver.options['solve_subsystems'] = True
        p.setup()
        p.set_val('T_in_hot', 350., units='K')
        p.set_val('T_in_cold', 300., units='K')
        p.set_val('mdot_coolant', 1., units='kg/s')
        p.set_val('control.bypass_start', 0.)
        p.set_val('control.bypass_end', 0.)
        p.run_model()

        assert_near_equal(p.get_val('T_out_hot', units='K'),
                          350.87503524 * np.ones(nn),
                          tolerance=1e-10)
        assert_near_equal(p.get_val('T_out_cold', units='K'),
                          299.38805342 * np.ones(nn),
                          tolerance=1e-10)
        assert_near_equal(p.get_val('component_weight', units='kg'),
                          np.array([5.]),
                          tolerance=1e-10)
        assert_near_equal(p.get_val('elec_load', units='W'),
                          1052.63157895 * np.ones(nn),
                          tolerance=1e-10)
Пример #5
0
    def make_problem(self,
                     transcription=GaussLobatto,
                     optimizer='SLSQP',
                     numseg=30):
        p = Problem(model=Group())
        p.driver = pyOptSparseDriver()
        p.driver.declare_coloring()
        p.driver.options['optimizer'] = optimizer

        if optimizer == 'SNOPT':
            p.driver.declare_coloring()
            p.driver.opt_settings['Major iterations limit'] = 100
            p.driver.opt_settings['Major feasibility tolerance'] = 1.0E-6
            p.driver.opt_settings['Major optimality tolerance'] = 1.0E-6
        elif optimizer == 'IPOPT':
            p.driver.opt_settings['hessian_approximation'] = 'limited-memory'
            # p.driver.opt_settings['nlp_scaling_method'] = 'user-scaling'
            p.driver.opt_settings['print_level'] = 5
            p.driver.opt_settings['linear_solver'] = 'mumps'
            p.driver.declare_coloring()
        else:
            p.driver.declare_coloring()

        traj = p.model.add_subsystem('traj', Trajectory())
        phase0 = traj.add_phase(
            'phase0',
            Phase(ode_class=HyperSensitiveODE,
                  transcription=transcription(num_segments=numseg, order=3)))
        phase0.set_time_options(fix_initial=True, fix_duration=True)
        phase0.add_state('x',
                         fix_initial=True,
                         fix_final=False,
                         rate_source='x_dot',
                         targets=['x'])
        phase0.add_state('xL',
                         fix_initial=True,
                         fix_final=False,
                         rate_source='L',
                         targets=['xL'])
        phase0.add_control('u', opt=True, targets=['u'])

        phase0.add_boundary_constraint('x', loc='final', equals=1)

        phase0.add_objective('xL', loc='final')

        phase0.set_refine_options(refine=True, tol=1e-6, max_order=14)

        p.setup(check=True)

        p.set_val('traj.phase0.states:x',
                  phase0.interpolate(ys=[1.5, 1], nodes='state_input'))
        p.set_val('traj.phase0.states:xL',
                  phase0.interpolate(ys=[0, 1], nodes='state_input'))
        p.set_val('traj.phase0.t_initial', 0)
        p.set_val('traj.phase0.t_duration', tf)
        p.set_val('traj.phase0.controls:u',
                  phase0.interpolate(ys=[-0.6, 2.4], nodes='control_input'))

        return p
Пример #6
0
    def test_one_input(self):
        p = Problem()
        p.model.add_subsystem('test', MinComp(), promotes=['*'])
        p.setup(check=True, force_alloc_complex=True)
        p.set_val('array', np.array([42.]))
        p.run_model()
        assert_near_equal(p['min'], 42.)

        partials = p.check_partials(method='cs',compact_print=True)
        assert_check_partials(partials)
Пример #7
0
    def test_multiple_inputs(self):
        nn = 5
        p = Problem()
        p.model.add_subsystem('test', MinComp(num_nodes=nn), promotes=['*'])
        p.setup(check=True, force_alloc_complex=True)
        p.set_val('array', np.array([42., 12., -3., 58., 7.]))
        p.run_model()
        assert_near_equal(p['min'], -3.)

        partials = p.check_partials(method='cs',compact_print=True)
        assert_check_partials(partials)
Пример #8
0
    def test_units(self):
        nn = 5
        p = Problem()
        p.model.add_subsystem('max_comp', MaxComp(num_nodes=nn, units='N'), promotes=['*'])
        p.setup(check=True, force_alloc_complex=True)
        p.set_val('array', np.array([42., 58., -3., 3., 7.]), units='N')
        p.run_model()
        assert_near_equal(p['max'], 58.)

        partials = p.check_partials(method='cs',compact_print=True)
        assert_check_partials(partials)
Пример #9
0
    def test_multiple_very_close_max(self):
        nn = 5
        p = Problem()
        p.model.add_subsystem('test', MaxComp(num_nodes=nn), promotes=['*'])
        p.setup(check=True, force_alloc_complex=True)
        p.set_val('array', np.array([-2., 2e-45, -3., 1e-45, -7.]))
        p.run_model()
        assert_near_equal(p['max'], 2e-45, tolerance=1e-50)

        partials = p.check_partials(method='cs',compact_print=True)
        assert_check_partials(partials)
Пример #10
0
    def test_multiple_min(self):
        nn = 5
        p = Problem(MinComp(num_nodes=nn))
        p.setup(check=True, force_alloc_complex=True)
        p.set_val('array', np.array([42., 7., 30., 58., 7.]))
        p.run_model()
        assert_near_equal(p['min'], 7.)

        # Need to use fd here because cs doesn't support backward and forward does
        # not capture behavior of minimum
        partials = p.check_partials(method='fd',form='backward',compact_print=True)
        assert_check_partials(partials)
Пример #11
0
    def test_single(self):
        p = Problem()
        p.model.linear_solver = DirectSolver()
        p.model = COPExplicit()
        p.setup()
        p.set_val('T_c', 300. * np.ones(1), units='K')
        p.set_val('T_h', 400. * np.ones(1), units='K')
        p.set_val('eff_factor', 0.4)
        p.run_model()

        assert_near_equal(p.get_val('COP'),
                          np.array([1.20001629]),
                          tolerance=1e-8)
Пример #12
0
    def test_single(self):
        p = Problem()
        p.model.linear_solver = DirectSolver()
        p.model = HeatPumpWeight()
        p.setup(force_alloc_complex=True)
        p.set_val('power_rating', 1., units='kW')
        p.set_val('specific_power', 200., units='W/kg')
        p.run_model()

        assert_near_equal(p.get_val('component_weight', units='kg'),
                          np.array([5.]))
        partials = p.check_partials(method='cs', compact_print=True)
        assert_check_partials(partials)
Пример #13
0
    def test_single(self):
        p = Problem()
        p.model.linear_solver = DirectSolver()
        p.model = COPHeatPump()
        p.setup(force_alloc_complex=True)
        p.set_val('COP', np.ones(1))
        p.set_val('power_rating', 1., units='kW')
        p.run_model()

        assert_near_equal(p.get_val('q_in_1', units='W'), np.array([-1000.]))
        assert_near_equal(p.get_val('q_in_2', units='W'), np.array([2000.]))
        partials = p.check_partials(method='cs', compact_print=True)
        assert_check_partials(partials)
Пример #14
0
    def test(self):

        prob = Problem()

        prob.model.add_subsystem('mil_spec', MilSpecRecovery(), promotes=['*'])

        prob.setup(check=False, force_alloc_complex=True)

        prob.set_val('MN', 0.8)
        prob.set_val('ram_recovery_base', 0.9)

        prob.run_model()

        tol = 1e-4
        assert_near_equal(prob['ram_recovery'], 0.9, tol)

        partial_data = prob.check_partials(out_stream=None, method='cs')
        assert_check_partials(partial_data, atol=1e-8, rtol=1e-8)

        prob.set_val('MN', 2.0)

        prob.run_model()
        assert_near_equal(prob['ram_recovery'], 0.8325, tol)

        partial_data = prob.check_partials(out_stream=None, method='cs')
        assert_check_partials(partial_data, atol=1e-8, rtol=1e-8)

        prob.set_val('MN', 6.0)

        prob.run_model()
        assert_near_equal(prob['ram_recovery'], 0.35858, tol)

        partial_data = prob.check_partials(out_stream=None, method='cs')
        assert_check_partials(partial_data, atol=1e-8, rtol=1e-8)
Пример #15
0
    def test_vectorized(self):
        p = Problem()
        p.model.linear_solver = DirectSolver()
        p.model = COPExplicit(num_nodes=4)
        p.setup()
        p.set_val('T_c', np.array([100., 110., 120., 130.]), units='K')
        p.set_val('T_h', np.array([200., 190., 180., 170.]), units='K')
        p.set_val('eff_factor', 0.4)
        p.run_model()

        assert_near_equal(p.get_val('COP'),
                          np.array(
                              [0.40000535, 0.5500066, 0.80000934, 1.30001871]),
                          tolerance=1e-8)
Пример #16
0
    def test_comp(self):
        num_nodes = 3
        prob = Problem()
        prob.model.nonlinear_solver = NewtonSolver()
        prob.model.linear_solver = DirectSolver()
        prob.model.nonlinear_solver.options['solve_subsystems'] = True
        prob.model.add_subsystem('test',
                                 thermal.CoolantReservoir(num_nodes=num_nodes),
                                 promotes=['*'])
        prob.setup(check=True, force_alloc_complex=True)

        # Set the values
        prob.set_val('mdot_coolant', np.array([9., 14., 12.]), units='kg/s')
        prob.set_val('T_in', np.array([300., 350., 290.]), units='K')
        prob.set_val('mass', 10., units='kg')
        prob.set_val('T_initial', 400., units='K')
        prob.set_val('duration', 20., units='min')

        prob.run_model()

        assert_near_equal(prob.get_val('T_out', units='K'),
                          np.array([400., 317.9653263, 364.64246726]),
                          tolerance=1e-9)

        partials = prob.check_partials(method='cs', compact_print=True)
        assert_check_partials(partials)
Пример #17
0
    def test_vectorized(self):
        nn = 5
        p = Problem()
        p.model = N3Hybrid(num_nodes=nn)

        p.setup(force_alloc_complex=True)

        p.set_val('throttle', np.linspace(0.0001, 1., nn))
        p.set_val('fltcond|h', np.linspace(0, 40e3, nn), units='ft')
        p.set_val('fltcond|M', np.linspace(0.1, 0.9, nn))
        p.set_val('hybrid_power', np.linspace(1e3, 0, nn), units='kW')

        p.run_model()

        assert_near_equal(p.get_val('thrust', units='lbf'),
                          np.array([
                              2143.74837065, 4298.37044104, 5731.73572266,
                              5567.1704698, 6093.64182948
                          ]),
                          tolerance=5e-3)
        assert_near_equal(p.get_val('fuel_flow', units='kg/s'),
                          np.array([
                              0.12830921, 0.15107399, 0.24857052, 0.28013556,
                              0.24271405
                          ]),
                          tolerance=5e-3)
        assert_near_equal(p.get_val('surge_margin'),
                          np.array([
                              3.62385489, 5.13891739, 17.61488138, 29.65131358,
                              17.48630861
                          ]),
                          tolerance=5e-3)

        partials = p.check_partials(method='cs', compact_print=True)
        assert_check_partials(partials)
Пример #18
0
    def test_defaults(self):
        p = Problem()
        p.model = N3Hybrid()

        p.setup(force_alloc_complex=True)

        p.set_val('throttle', 0.5)
        p.set_val('fltcond|h', 10e3, units='ft')
        p.set_val('fltcond|M', 0.5)
        p.set_val('hybrid_power', 200., units='kW')

        p.run_model()

        assert_near_equal(p.get_val('thrust', units='lbf'),
                          6965.43674107 * np.ones(1),
                          tolerance=1e-6)
        assert_near_equal(p.get_val('fuel_flow', units='kg/s'),
                          0.34333925 * np.ones(1),
                          tolerance=1e-6)
        assert_near_equal(p.get_val('surge_margin'),
                          17.49872296 * np.ones(1),
                          tolerance=1e-6)

        partials = p.check_partials(method='cs', compact_print=True)
        assert_check_partials(partials)
Пример #19
0
    def test_no_bypass(self):
        p = Problem()
        p.model.linear_solver = DirectSolver()
        p.model = LinearSelector()
        p.setup(force_alloc_complex=True)
        p.set_val('bypass', np.zeros(1))
        p.run_model()

        assert_near_equal(p.get_val('T_out_cold', units='K'),
                          p.get_val('T_out_refrig_cold', units='K'))
        assert_near_equal(p.get_val('T_out_hot', units='K'),
                          p.get_val('T_out_refrig_hot', units='K'))
        assert_near_equal(p.get_val('elec_load', units='W'),
                          p.get_val('elec_load', units='W'))
        partials = p.check_partials(method='cs', compact_print=True)
        assert_check_partials(partials)
Пример #20
0
    def make_problem(self,
                     transcription=GaussLobatto,
                     optimizer='SLSQP',
                     numseg=30):
        p = Problem(model=Group())
        p.driver = pyOptSparseDriver()
        p.driver.declare_coloring()
        OPT, OPTIMIZER = set_pyoptsparse_opt(optimizer, fallback=False)
        p.driver.options['optimizer'] = OPTIMIZER

        traj = p.model.add_subsystem('traj', Trajectory())
        phase0 = traj.add_phase(
            'phase0',
            Phase(ode_class=HyperSensitiveODE,
                  transcription=transcription(num_segments=numseg, order=3)))
        phase0.set_time_options(fix_initial=True, fix_duration=True)
        phase0.add_state('x',
                         fix_initial=True,
                         fix_final=False,
                         rate_source='x_dot',
                         targets=['x'])
        phase0.add_state('xL',
                         fix_initial=True,
                         fix_final=False,
                         rate_source='L',
                         targets=['xL'])
        phase0.add_control('u', opt=True, targets=['u'])

        phase0.add_boundary_constraint('x', loc='final', equals=1)

        phase0.add_objective('xL', loc='final')

        p.setup(check=True)

        p.set_val('traj.phase0.states:x',
                  phase0.interpolate(ys=[1.5, 1], nodes='state_input'))
        p.set_val('traj.phase0.states:xL',
                  phase0.interpolate(ys=[0, 1], nodes='state_input'))
        p.set_val('traj.phase0.t_initial', 0)
        p.set_val('traj.phase0.t_duration', tf)
        p.set_val('traj.phase0.controls:u',
                  phase0.interpolate(ys=[-0.6, 2.4], nodes='control_input'))

        return p
Пример #21
0
    def test_vectorized(self):
        # Set up the SimpleTMS problem with 11 evaluation points
        nn = 11
        prob = Problem()
        prob.model = thermal.SimpleTMS(num_nodes=nn)
        prob.model.linear_solver = DirectSolver()
        prob.model.nonlinear_solver = NewtonSolver()
        prob.model.nonlinear_solver.options['solve_subsystems'] = True
        prob.setup()
        prob.set_val('throttle', np.linspace(0.01, 0.99, nn), units=None)
        prob.set_val('motor_elec_power_rating', 6., units='MW')
        prob.run_model()

        # Check that the solvers properly converged the BalanceComp so
        # the heat taken by the cold plate equals the heat extracted
        # by the refrigerator
        q_fridge = prob['refrigerator.q_c']
        q_plate = prob['refrigerator_cold_plate.q']
        relative_error_met = (q_fridge - q_plate) / q_plate < 1e-9
        self.assertTrue(relative_error_met.all())
Пример #22
0
    def test_zero_work(self):
        # Set up the SimpleTMS problem with throttle at zero
        prob = Problem()
        prob.model = thermal.SimpleTMS()
        prob.model.linear_solver = DirectSolver()
        prob.model.nonlinear_solver = NewtonSolver()
        prob.model.nonlinear_solver.options['solve_subsystems'] = True
        prob.setup()
        prob.set_val('Wdot', 0.)
        prob.set_val('motor_elec_power_rating', 10., units='kW')
        prob.run_model()

        # Check that the solvers properly converged the BalanceComp so
        # the heat taken by the cold plate equals the heat extracted
        # by the refrigerator
        q_fridge = prob['refrigerator.q_c']
        q_plate = prob['refrigerator_cold_plate.q']
        fridge_abs_error_met = np.abs(q_fridge) < 1e-9
        plate_abs_error_met = np.abs(q_plate) < 1e-9
        self.assertTrue(fridge_abs_error_met.all())
        self.assertTrue(plate_abs_error_met.all())
Пример #23
0
    def test_fixed(self):
        p = Problem()
        p.model = PowerSplit(num_nodes=3,
                             rule='fixed',
                             efficiency=0.95,
                             weight_inc=0.01,
                             weight_base=1.,
                             cost_inc=0.02,
                             cost_base=2.)
        p.setup(check=True)

        p.set_val('power_in', np.array([1, 2, 3]), units='W')
        p.set_val('power_rating', 10., units='W')
        p.set_val('power_split_amount', np.array([0.95, 1., 1.]))

        p.run_model()

        assert_near_equal(p['power_out_A'], 0.95 * np.array([0.95, 1., 1.]))
        assert_near_equal(
            p['power_out_B'],
            0.95 * (np.array([1., 2., 3.]) - np.array([0.95, 1., 1.])))
        assert_near_equal(p['heat_out'], 0.05 * np.array([1., 2., 3.]))
        assert_near_equal(p['component_cost'], 2.2)
        assert_near_equal(p['component_weight'], 1.1)
        assert_near_equal(p['component_sizing_margin'], np.array([.1, .2, .3]))

        partials = p.check_partials(
            method='fd', compact_print=True)  # for some reason this one
        # doesn't work with complex step
        assert_check_partials(partials)
Пример #24
0
    def test_fraction(self):
        p = Problem()
        p.model = PowerSplit(num_nodes=3,
                             efficiency=0.95,
                             weight_inc=0.01,
                             weight_base=1.,
                             cost_inc=0.02,
                             cost_base=2.)
        p.setup(check=True, force_alloc_complex=True)

        p.set_val('power_in', np.array([1, 2, 3]), units='W')
        p.set_val('power_rating', 10., units='W')
        p.set_val('power_split_fraction', np.array([0.2, 0.4, 0.3]))

        p.run_model()

        assert_near_equal(p['power_out_A'], 0.95 * np.array([0.2, 0.8, 0.9]))
        assert_near_equal(p['power_out_B'], 0.95 * np.array([0.8, 1.2, 2.1]))
        assert_near_equal(p['heat_out'], 0.05 * np.array([1., 2., 3.]))
        assert_near_equal(p['component_cost'], 2.2)
        assert_near_equal(p['component_weight'], 1.1)
        assert_near_equal(p['component_sizing_margin'], np.array([.1, .2, .3]))

        partials = p.check_partials(method='cs', compact_print=True)
        assert_check_partials(partials)
Пример #25
0
    def test_vectorized(self):
        nn = 5
        p = Problem()
        p.model = N3Hybrid(num_nodes=nn)

        p.setup(force_alloc_complex=True)

        p.set_val('throttle', np.linspace(0.0001, 1., nn))
        p.set_val('fltcond|h', np.linspace(0, 40e3, nn), units='ft')
        p.set_val('fltcond|M', np.linspace(0.1, 0.9, nn))

        p.run_model()

        assert_near_equal(p.get_val('thrust', units='lbf'),
                          np.array([
                              2116.01166807, 4298.21330183, 5731.73026453,
                              5567.1916333, 6093.64182948
                          ]),
                          tolerance=5e-3)
        assert_near_equal(p.get_val('fuel_flow', units='kg/s'),
                          np.array([
                              0.15443523, 0.18527426, 0.26886803, 0.29035632,
                              0.24271405
                          ]),
                          tolerance=5e-3)
        assert_near_equal(p.get_val('surge_margin'),
                          np.array([
                              9.63957356, 9.85223288, 21.01375818, 31.54415929,
                              17.48630861
                          ]),
                          tolerance=5e-3)

        partials = p.check_partials(method='cs', compact_print=True)
        assert_check_partials(partials)
Пример #26
0
    def test_comp(self):
        num_nodes = 3
        prob = Problem()
        prob.model.add_subsystem(
            'test',
            thermal.CoolantReservoirRate(num_nodes=num_nodes),
            promotes=['*'])
        prob.setup(check=True, force_alloc_complex=True)

        # Set the values
        prob.set_val('T_in', np.array([300., 350., 290.]), units='K')
        prob.set_val('T_out', np.array([350., 340., 250.]), units='K')
        prob.set_val('mdot_coolant', np.array([9., 14., 12.]), units='kg/s')
        prob.set_val('mass', 7., units='kg')

        prob.run_model()

        assert_near_equal(prob.get_val('dTdt', units='K/s'),
                          np.array([-64.28571429, 20., 68.57142857]),
                          tolerance=1e-9)

        partials = prob.check_partials(method='cs', compact_print=True)
        assert_check_partials(partials)
Пример #27
0
    def test_one_input(self):
        p = Problem()
        p.model.add_subsystem('select',
                              SelectorComp(input_names=['A']),
                              promotes=['*'])
        p.setup(check=True, force_alloc_complex=True)
        p.set_val('A', np.array([5.7]))
        p.set_val('selector', np.array([0]))
        p.run_model()
        assert_near_equal(p['result'], np.array([5.7]))

        partials = p.check_partials(method='cs', compact_print=True)
        assert_check_partials(partials)

        p.set_val('selector', np.array([1]))
        with self.assertRaises(RuntimeWarning):
            p.run_model()
Пример #28
0
    def test_defaults(self):
        p = Problem()
        p.model = CFM56()

        p.setup(force_alloc_complex=True)

        p.set_val('throttle', 0.5)
        p.set_val('fltcond|h', 10e3, units='ft')
        p.set_val('fltcond|M', 0.5)

        p.run_model()

        assert_near_equal(p.get_val('thrust', units='lbf'), 7050.73840869*np.ones(1), tolerance=1e-6)
        assert_near_equal(p.get_val('fuel_flow', units='kg/s'), 0.50273824*np.ones(1), tolerance=1e-6)
        assert_near_equal(p.get_val('T4', units='degK'), 1432.06813946*np.ones(1), tolerance=1e-6)

        partials = p.check_partials(method='cs',compact_print=True)
        assert_check_partials(partials)
Пример #29
0
    def test_comp(self):
        num_nodes = 3
        prob = Problem()
        prob.model.add_subsystem(
            'test',
            thermal.ThermalComponentWithMass(num_nodes=num_nodes),
            promotes=['*'])
        prob.setup(check=True, force_alloc_complex=True)

        # Set the values
        prob.set_val('q_in', np.array([10., 14., 4.]), units='kW')
        prob.set_val('q_out', np.array([9., 14., 12.]), units='kW')
        prob.set_val('mass', 7., units='kg')

        prob.run_model()

        assert_near_equal(prob.get_val('dTdt', units='K/s'),
                          np.array([.1551109043, 0., -1.2408872344]),
                          tolerance=1e-9)

        partials = prob.check_partials(method='cs', compact_print=True)
        assert_check_partials(partials)
Пример #30
0
    def test_vectorized(self):
        nn = 5
        p = Problem()
        p.model = CFM56(num_nodes=nn)

        p.setup(force_alloc_complex=True)

        p.set_val('throttle', np.linspace(0.0001, 1., nn))
        p.set_val('fltcond|h', np.linspace(0, 40e3, nn), units='ft')
        p.set_val('fltcond|M', np.linspace(0.1, 0.9, nn))

        p.run_model()

        assert_near_equal(p.get_val('thrust', units='lbf'), np.array([1445.41349482, 3961.46624224,
                            5278.43191982, 5441.44404298, 6479.00525867]), tolerance=5e-3)
        assert_near_equal(p.get_val('fuel_flow', units='kg/s'), np.array([0.17032429, 0.25496437,
                            0.35745638, 0.40572545, 0.4924194]), tolerance=5e-3)
        assert_near_equal(p.get_val('T4', units='degK'), np.array([1005.38911171, 1207.57548728,
                            1381.94820904, 1508.07901676, 1665.37063872]), tolerance=5e-3)

        partials = p.check_partials(method='cs',compact_print=True)
        assert_check_partials(partials)