def setup(self):
        nn = self.options['num_nodes']

        self.add_subsystem(name='atmos',
                           subsys=StandardAtmosphereGroup(num_nodes=nn),
                           promotes_inputs=['h'])

        self.add_subsystem(
            name='aero',
            subsys=AeroGroup(num_nodes=nn),
            promotes_inputs=['v', 'alpha'],
        )

        self.connect('atmos.sos', 'aero.sos')
        self.connect('atmos.rho', 'aero.rho')

        self.add_subsystem(name='prop',
                           subsys=PropGroup(num_nodes=nn),
                           promotes_inputs=['h', 'throttle'])

        self.connect('aero.mach', 'prop.mach')

        self.add_subsystem(name='flight_dynamics',
                           subsys=FlightPathEOM2D(num_nodes=nn),
                           promotes_inputs=['m', 'v', 'gam', 'alpha'])

        self.connect('aero.f_drag', 'flight_dynamics.D')
        self.connect('aero.f_lift', 'flight_dynamics.L')
        self.connect('prop.thrust', 'flight_dynamics.T')
Beispiel #2
0
    def setup(self):
        nn = self.options['num_nodes']

        self.add_subsystem(name='atmos', subsys=USatm1976Comp(num_nodes=nn))

        if not self.options['ballistic']:
            self.add_subsystem(name='water_engine',
                               subsys=WaterEngine(num_nodes=nn),
                               promotes_inputs=['rho_w'])

            self.add_subsystem(name='mass_adder',
                               subsys=_MassAdder(num_nodes=nn),
                               promotes_inputs=['rho_w'])

        self.add_subsystem(name='dynamic_pressure',
                           subsys=DynamicPressureComp(num_nodes=nn))

        self.add_subsystem(name='aero', subsys=LiftDragForceComp(num_nodes=nn))

        self.add_subsystem(name='eom', subsys=FlightPathEOM2D(num_nodes=nn))

        self.connect('atmos.rho', 'dynamic_pressure.rho')
        self.connect('dynamic_pressure.q', 'aero.q')

        self.connect('aero.f_drag', 'eom.D')
        self.connect('aero.f_lift', 'eom.L')

        if not self.options['ballistic']:
            self.connect('atmos.pres', 'water_engine.p_a')
            self.connect('water_engine.F', 'eom.T')
            self.connect('mass_adder.m', 'eom.m')
Beispiel #3
0
    def setup(self):
        nn = self.options['num_nodes']

        self.add_subsystem(name='atmos',
                           subsys=USatm1976Comp(num_nodes=nn),
                           promotes_inputs=['h'])

        self.add_subsystem(name='aero',
                           subsys=AeroGroup(num_nodes=nn),
                           promotes_inputs=['v', 'alpha', 'S'])

        self.connect('atmos.sos', 'aero.sos')
        self.connect('atmos.rho', 'aero.rho')

        self.add_subsystem(name='prop',
                           subsys=PropGroup(num_nodes=nn),
                           promotes_inputs=['h', 'Isp', 'throttle'])

        self.connect('aero.mach', 'prop.mach')

        self.add_subsystem(name='flight_dynamics',
                           subsys=FlightPathEOM2D(num_nodes=nn),
                           promotes_inputs=['m', 'v', 'gam', 'alpha'])

        foo = self.add_subsystem('foo', om.IndepVarComp())
        foo.add_output('rho', val=100 * np.ones(nn), units='g/cm**3')

        self.connect('aero.f_drag', 'flight_dynamics.D')
        self.connect('aero.f_lift', 'flight_dynamics.L')
        self.connect('prop.thrust', 'flight_dynamics.T')
Beispiel #4
0
    def setup(self):
        nn = self.options['num_nodes']

        self.add_subsystem(name='atmos',
                           subsys=USatm1976Comp(num_nodes=nn),
                           promotes_inputs=['h'])

        self.add_subsystem(name='aero',
                           subsys=AeroGroup(num_nodes=nn),
                           promotes_inputs=['v', 'alpha', 'S'])

        self.connect('atmos.sos', 'aero.sos')
        self.connect('atmos.rho', 'aero.rho')

        self.add_subsystem(name='prop',
                           subsys=PropGroup(num_nodes=nn),
                           promotes_inputs=['h', 'Isp', 'throttle'])

        self.connect('aero.mach', 'prop.mach')

        self.add_subsystem(name='flight_dynamics',
                           subsys=FlightPathEOM2D(num_nodes=nn),
                           promotes_inputs=['m', 'v', 'gam', 'alpha'])

        self.connect('aero.f_drag', 'flight_dynamics.D')
        self.connect('aero.f_lift', 'flight_dynamics.L')
        self.connect('prop.thrust', 'flight_dynamics.T')

        self.add_subsystem('testcomp',
                           om.ExecComp('testout=test', shape=40),
                           promotes=['*'])
Beispiel #5
0
            def setup(self):
                nn = self.options['num_nodes']

                self.add_subsystem('sum', om.ExecComp('m_tot = sum(m)',
                                                      m={'value': np.zeros((2, 2)),
                                                         'units': 'kg'},
                                                      m_tot={'value': np.zeros(nn),
                                                             'units': 'kg'}))

                self.add_subsystem('eom', FlightPathEOM2D(num_nodes=nn))

                self.connect('sum.m_tot', 'eom.m')
Beispiel #6
0
    def setup(self):
        nn = self.options['num_nodes']

        self.add_subsystem(name='kinetic_energy',
                           subsys=KineticEnergyComp(num_nodes=nn))

        self.add_subsystem(name='atmos', subsys=USatm1976Comp(num_nodes=nn))

        self.add_subsystem(name='dynamic_pressure',
                           subsys=DynamicPressureComp(num_nodes=nn))

        self.add_subsystem(name='aero', subsys=LiftDragForceComp(num_nodes=nn))

        self.add_subsystem(name='eom', subsys=FlightPathEOM2D(num_nodes=nn))

        self.connect('atmos.rho', 'dynamic_pressure.rho')
        self.connect('dynamic_pressure.q', 'aero.q')

        self.connect('aero.f_drag', 'eom.D')
        self.connect('aero.f_lift', 'eom.L')
    def setup(self):
        nn = self.options['num_nodes']
        engine_heat_coeff = self.options['engine_heat_coeff']
        pump_heat_coeff = self.options['pump_heat_coeff']

        # Aero and mission
        self.add_subsystem(name='atmos',
                           subsys=StandardAtmosphereGroup(num_nodes=nn),
                           promotes_inputs=['h'])

        # self.add_subsystem(name='aero',
        #                    subsys=AeroGroup(num_nodes=nn),
        #                    promotes_inputs=['v', 'alpha', 'S'])

        self.add_subsystem(name='aero',
                           subsys=AeroSMTGroup(num_nodes=nn),
                           promotes_inputs=['v', 'alpha', 'S', 'h'])

        self.connect('atmos.sos', 'aero.sos')
        self.connect('atmos.rho', 'aero.rho')

        self.add_subsystem(name='prop',
                           subsys=PropGroup(num_nodes=nn),
                           promotes_inputs=['h', 'throttle'],
                           promotes_outputs=['m_dot'])

        self.connect('aero.mach', 'prop.mach')

        self.add_subsystem(name='flight_dynamics',
                           subsys=FlightPathEOM2D(num_nodes=nn),
                           promotes_inputs=['m', 'v', 'gam', 'alpha'])

        self.connect('aero.f_drag', 'flight_dynamics.D')
        self.connect('aero.f_lift', 'flight_dynamics.L')
        self.connect('prop.thrust', 'flight_dynamics.T')

        # Thermal
        self.add_subsystem(
            'm_burn_comp',
            ExecComp('m_burn = - m_dot',
                     m_burn=np.zeros(nn),
                     m_dot=np.zeros(nn)),
            promotes=['*'],
        )

        self.add_subsystem(
            'm_fuel_comp',
            ExecComp('m_fuel = m - W0',
                     m_fuel=np.zeros(nn),
                     m=np.zeros(nn),
                     W0=np.zeros(nn)),
            promotes=['*'],
        )

        self.add_subsystem(
            'm_flow_comp',
            ExecComp('m_flow = m_burn + m_recirculated',
                     m_flow=np.zeros(nn),
                     m_burn=np.zeros(nn),
                     m_recirculated=np.zeros(nn)),
            promotes=['*'],
        )

        self.add_subsystem(name='pump_heating_comp',
                           subsys=PumpHeatingComp(num_nodes=nn,
                                                  heat_coeff=pump_heat_coeff),
                           promotes_inputs=['m_flow'],
                           promotes_outputs=['Q_pump'])

        self.add_subsystem(name='engine_heating_comp',
                           subsys=EngineHeatingComp(
                               num_nodes=nn, heat_coeff=engine_heat_coeff),
                           promotes_inputs=['throttle'],
                           promotes_outputs=['Q_engine'])

        self.add_subsystem(
            'Q_env_tot_comp',
            ExecComp('Q_env_tot = Q_env + Q_pump + Q_engine',
                     Q_env_tot=np.zeros(nn),
                     Q_env=np.zeros(nn),
                     Q_pump=np.zeros(nn),
                     Q_engine=np.zeros(nn)),
            promotes=['*'],
        )

        self.add_subsystem(name='cv',
                           subsys=CvComp(num_nodes=nn),
                           promotes_inputs=['T'],
                           promotes_outputs=['Cv'])

        self.add_subsystem(name='tank',
                           subsys=TankMissionComp(num_nodes=nn),
                           promotes_inputs=[
                               'm_fuel', 'm_flow', 'm_burn', 'T', 'Q_env_tot',
                               'Q_sink', 'Q_out', 'Cv'
                           ],
                           promotes_outputs=['T_dot', 'T_o'])

        self.add_subsystem(name='power',
                           subsys=PowerComp(num_nodes=nn),
                           promotes=['m_flow', 'power'])

        # Set solvers
        self.linear_solver = DirectSolver(assemble_jac=True)
        self.options['assembled_jac_type'] = 'csc'