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')
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')
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')
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=['*'])
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')
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'