Source code for hyperloop.Python.pod.cycle.flow_path_inputs

"""
A group that converts user inputs into format flow_path needs
"""
from __future__ import print_function
import numpy as np

from openmdao.api import Group, Component, IndepVarComp, Problem

[docs]class FlowPathInputs(Component): """ Params ------ tube_pressure : float Ambient temperature inside tube (K) pod_mach : float Pod mach number (unitless) comp_inlet_area : float Compressor inlet area (m**2) tube_temp : float Ambient temperature inside tube (K) gamma : float Specific heat ratio comp_mach : float Compressor mach number (unitless) R : float Ideal gas constant (J/(kg*K)) eta : float Efficiency of inlet (unitless) Returns ------- Pt : float Total pressure inside tube (Pa) Tt : float Total temperature inside tube (K) m_dot : float Mass flow rate (kg/s) """ def __init__(self): super(FlowPathInputs, self).__init__() self.add_param('tube_pressure', val=850., desc='ambient pressure inside tube', units='Pa') self.add_param('pod_mach', val=.8, desc='pod mach speed', units='unitless') self.add_param('comp_inlet_area', val=3.8, desc='compressor inlet area', units='m**2') self.add_param('tube_temp', val=320., desc='ambient temp inside tube', units='K') self.add_param('gamma', val=1.4, desc='specific heat ratio', units='unitless') self.add_param('comp_mach', val=.6, desc='compressor mach number', units='unitless') self.add_param('R', val=287., desc='ideal gas constant', units='J/(kg*K)') self.add_param('eta', val=.99, desc='efficiency of inlet', units='unitless') self.add_output('Pt', val=0., desc='total pressure inside tube', units='Pa') self.add_output('Tt', val=0., desc='total temp inside tube', units='K') self.add_output('m_dot', val=0., desc='mass flow rate', units='kg/s')
[docs] def solve_nonlinear(self, params, unknowns, resids): tube_pressure = params['tube_pressure'] pod_mach = params['pod_mach'] comp_inlet_area = params['comp_inlet_area'] tube_temp = params['tube_temp'] gamma = params['gamma'] comp_mach = params['comp_mach'] R = params['R'] eta = params['eta'] Tt = tube_temp*(1+((gamma-1)/2)*(pod_mach**2)) Pt = tube_pressure*((1+((gamma-1)/2)*(pod_mach**2))**(gamma/(gamma-1.0))) rho = tube_pressure/(R*tube_temp) rho_t = rho*((1+((gamma-1)/2))**(1/(gamma-1))) p02 = tube_pressure*((1 + eta*((Tt/tube_temp)-1))**(gamma/(gamma-1))) rho_2 = rho_t*((p02/Pt)**(1/gamma)) rho_comp = rho_t/((1+((gamma-1)/2)*(comp_mach**2))**(1/(gamma-1))) T_comp = Tt/(1+((gamma-1)/2)*(comp_mach**2)) m_dot = rho_comp*comp_inlet_area*comp_mach*np.sqrt(gamma*R*T_comp) unknowns['Pt'] = Pt unknowns['Tt'] = Tt unknowns['m_dot'] = m_dot
if __name__ == "__main__": top = Problem() root = top.root = Group() root.add('flow_path_inputs', FlowPathInputs()) top.setup() top.run() print('Pt %f' % top['flow_path_inputs.Pt']) print('Tt %f' % top['flow_path_inputs.Tt']) print('m_dot %f' % top['flow_path_inputs.m_dot'])