Source code for hyperloop.Python.pod.pod_geometry

from __future__ import print_function

import numpy as np
from openmdao.core.component import Component
from openmdao.api import IndepVarComp, Component, Problem, Group
[docs]class PodGeometry(Component): """ Notes ------ Computes to corss sectional area, length, and planform area of the pod based on the sizes of internal components and the necessary duct area within the pod based on compressor peformance. Assumes isentropic compression and a compressor exit mach number of .3. Also calculate blockage factors based on pressurized cylinder equations. Params ------ A_payload : float Cross sectional area of passenger compartment. Default value is 2.72 gam : float Ratio of specific heats. Default value is 1.4 R : float Ideal gas constant. Default valut is 287 J/(m*K). p_tunnel : float Pressure of air in tube. Default value is 850 Pa. Value will come from vacuum component M_pod : float pod Mach number. Default value is .8. value will be set by user A_p : float Cross sectional area of passenger compartment. Default value is 2.72 m**2 L_comp : float length of the compressor. Default value is 1.0 m. L_bat : float length of battery. Default value is 1.0 m. L_inverter : float length of inverter. Default value is 1.0 m. L_trans : float length of transformer. Default value is 1.0 m L_p : float length of passenger compartment. Default value is 11.2 m L_conv : float length of the converging section of the nozzle. Default value is .3 m L_div : float length of the diverging section of the nozzle. Default value is 1.5 m L_motor : float length of the motor. Default value is 1.0 m p_duct : float Static pressure in the duct. Default value is 6800.0 Pa p_passenger : float Static pressure in passenger section. Default value is 101.3e3 Pa rho_pod : float Density of pod material. Default value is 2700.0 kg/m**3 n_passengers : float Number of passengers per pod. Default value is 28 SF : float Structural safety factor. Default value is 1.5 Su : float Ultimate strength of pod material. Default value is 50.0e6 Pa A_duct : float Area of flow duct within pod. Default value is .3 m**2 dl_passenger : float Length of passenger compartment per passenger row. Default value is .8 m. g : float gravitational acceleration. Default value is 9.81 m/s**2 Returns ------- A_pod : float Cross sectional area of pod. D_pod : float Diameter of pod S : float Platform area of the pod L_pod : float Length of Pod t_passenger : float thickness of structure in passenger section. t_pod : float thickness of outer pod section. BF : float Pod blockage factor. beta : float Duct blockage factor. """ def __init__(self): super(PodGeometry, self).__init__() self.add_param('L_comp', val=1.0, desc='Length of Compressor', units='m') self.add_param('L_bat', val=1.0, desc='Length of Battery', units='m') self.add_param('L_motor', val=1.0, desc='Length of Motor', units='m') self.add_param('L_inverter', val=0.0, desc='Length of Inverter', units='m') self.add_param('L_trans', val=1.0, desc='Length of Transformer', units='m') self.add_param('L_p', val=11.2, desc='Payload Length', units='m') self.add_param('L_conv', val=.3, desc='Converging Lenth', units='m') self.add_param('L_div', val=1.5, desc='Diverging Length', units='m') self.add_param('L_inlet', 2.5, desc = 'Inlet length', units = 'm') self.add_param('p_tunnel', val=850.0, desc='tunnel pressure', units='Pa') self.add_param('A_payload', val=2.72, desc='Cross sectional area of passenger compartment') self.add_param('p_duct', 6800.0, desc = 'duct pressure', units = 'Pa') self.add_param('p_passenger', 101.0e3, desc = 'Passenger compartment pressure', units = 'Pa') self.add_param('rho_pod', 2700.0, desc = 'material density', units = 'kg/m**3') self.add_param('n_passengers', 28., desc = 'number of passengers', units = 'unitless') self.add_param('dm_passenger', 166.0, desc = 'mass per passenger', units = 'kg') self.add_param('SF', 1.5, desc = 'safety factor for pressure cylinder', units = 'unitless') self.add_param('Su', 50.0e6, desc = 'ultimate strength', units = 'Pa') self.add_param('A_duct', .3, desc = 'tunnel pressure', units = 'm**2') self.add_param('dl_passenger', .8, desc = 'passenger compartment length per person', units = 'm') self.add_param('g', 9.81, desc = 'gravity', units = 'm/s**2') self.add_output('A_pod', val = 0.0, desc = 'cross sectional area of pod', units = 'm**2') self.add_output('D_pod', val=0.0, desc='pod diameter', units='m') self.add_output('S', val=0.0, desc='platform area of pod', units='m**2') self.add_output('L_pod', val=0.0, desc='length of pod', units='m') self.add_output('t_passenger', 0.0, desc = 'passenger compartment thickness', units = 'm') self.add_output('t_pod', 0.0, desc = 'outer pod thickness', units = 'm') self.add_output('BF', 0.0, desc = 'Tunnel blockage Factor', units = 'unitless') self.add_output('beta', 0.0, desc = 'duct blockage factor', units = 'unitless')
[docs] def solve_nonlinear(self, p, u, r): dp_passenger = p['p_passenger'] - p['p_duct'] #Calculate pressure differential across passenger section wall r_passenger = np.sqrt(p['A_payload']/np.pi) #Calculate radius of the passenger section t_passenger = (dp_passenger*r_passenger)/(p['Su']/p['SF']) #Calculate pod thickness based on pressurized cylinder equations L_passenger = (p['n_passengers']*p['dl_passenger'])/2.0 #Calculate length of passenger section r_pod = np.sqrt((p['A_duct']+p['A_payload'])/np.pi) #Calculate pod radius initial value for sizing #Calculate mass of passenger section. Factor of 1.5 is to account for structure, luggage, etc. m_passenger = (p['n_passengers']*p['dm_passenger']*1.5) + p['rho_pod']*np.pi*(((r_passenger+t_passenger)**2)-(r_passenger**2))*L_passenger dx = (m_passenger*p['g'])/((p['Su']/5.0)*L_passenger) #Calculate thickness of structure supporting passenger section according to yield condition with safety factor = 5 A_cross = dx*(r_pod-r_passenger) #Calculate cross sectional area of passenger compartment support structure beta = (A_cross + np.pi*(((r_passenger+t_passenger)**2) - (r_passenger**2)))/p['A_payload'] #Calculate duct blockage factor dp_pod = p['p_passenger'] - p['p_tunnel'] #Calculate pressure differntial assuming atomospheric internal pressure t_pod = (dp_pod*r_pod)/(p['Su']/p['SF']) #Calculate pod thickness based on pressurized cylinder equations r_pod = np.sqrt((p['A_duct']+(1.0+beta)*p['A_payload'])/np.pi) #Calculate corrected value of pod radius to account for beta BF = (p['A_payload']*(1.0+beta) + p['A_duct'])/(np.pi*((r_pod+t_pod)**2.0)) #Calculate pod blockage factor A_pod = (p['A_duct'] + (1+beta)*p['A_payload'])/BF #Calculate cross sectional area of the pod D_pod = np.sqrt((4*A_pod)/np.pi) #Calculate pod diameter L_pod = p['L_inlet'] + p['L_comp'] + p['L_bat'] + p['L_motor'] + p['L_inverter'] + p['L_trans'] + p['L_p'] + p['L_conv'] + p['L_div'] #Calculate pod length S = D_pod*L_pod #Calculate pod planform area u['A_pod'] = A_pod u['D_pod'] = D_pod u['L_pod'] = L_pod u['S'] = S u['t_passenger'] = t_passenger u['t_pod'] = t_pod u['BF'] = BF u['beta'] = beta
if __name__ == '__main__': top = Problem() root = top.root = Group() root.add('p', PodGeometry()) top.setup() top.run() print('\n') print('Pod cross section = %f m^2' % top['p.A_pod']) print('Pod Diameter = %f m' % top['p.D_pod']) print('Pod Length = %f m' % top['p.L_pod']) print('Pod planform area = %f m^2' % top['p.S']) print('Passenger compartment thickness = %f m' % top['p.t_passenger']) print('Pod thickness is = %f m' % top['p.t_pod']) print('Pod blockage factor = %f' % top['p.BF']) print('Duct blockage factor is = %f' % top['p.beta'])