def test_01(self): # Truth values from NASA RP 1046 Value = SA.alt2press(5000) Truth = 24.8959 self.assertLessEqual(RE(Value, Truth), 1e-5)
def __init__(self, h): # Cantera Solution object self.gas = ct.Solution('air.xml') # Discretised altitude steps self.h = h # Average molecular diameter of gas self.d = 4E-10 self.steps = len(h) self.rho = np.zeros(self.steps) self.p = np.zeros(self.steps) self.T = np.zeros(self.steps) self.a = np.zeros(self.steps) self.k = np.zeros(self.steps) self.mu = np.zeros(self.steps) for index, alt in enumerate(self.h): self.rho[index] = atm.alt2density(alt, alt_units='m', density_units='kg/m**3') self.p[index] = atm.alt2press(alt, press_units='pa', alt_units='m') self.T[index] = atm.alt2temp(alt, alt_units='m', temp_units='K') self.a[index] = atm.temp2speed_of_sound(self.T[index], temp_units='K', speed_units='m/s') for index, alt in enumerate(self.h): self.gas.TP = self.T[index], self.p[index] self.k[index] = self.gas.cp / self.gas.cv self.mu[index] = self.gas.viscosity print 'ATMOSPHERIC MODEL COMPUTED (US76)' return None
def test_06(self): # truth value calculated from program at: # http://www.sworld.com.au/steven/space/atmosphere/ Value = SA.alt2press(65322, press_units='pa', alt_units='m') Truth = 9.4609 self.assertLessEqual(RE(Value, Truth), 5e-5)
def test_03(self): # test pa and m # Truth values from NASA RP 1046 Value = SA.alt2press(25000, alt_units='m', press_units='pa') Truth = 2511.01 self.assertLessEqual(RE(Value, Truth), 1e-5)
def test_02(self): # test psf # Truth values from NASA RP 1046 Value = SA.alt2press(49000, press_units='psf') Truth = 254.139 self.assertLessEqual(RE(Value, Truth), 1e-5)
def test_07(self): # test units in other order # truth value calculated from program at: # http://www.sworld.com.au/steven/space/atmosphere/ Value = SA.alt2press(80956, press_units='pa', alt_units='m') Truth = 0.75009 self.assertLessEqual(RE(Value, Truth), 1e-4)
def __init__(self, h, T_thermosphere): # Cantera Solution object self.gas = ct.Solution('air.xml') # Discretised altitude steps self.h = h # Average molecular diameter of gas self.d = 4E-10 # Ratio of specific heats self.steps = len(h) self.rho = np.zeros(self.steps) self.p = np.zeros(self.steps) self.T = np.zeros(self.steps) self.a = np.zeros(self.steps) self.k = np.zeros(self.steps) self.mu = np.zeros(self.steps) # Call Jacchia77 model data = j77.j77sri(np.max(h), T_thermosphere) data_np = np.array(data) h_int = spint.griddata T_int = spint.griddata mw_int = spint.griddata n = spint.griddata for index, alt in enumerate(self.h): self.rho[index] = atm.alt2density(alt, alt_units='m', density_units='kg/m**3') self.p[index] = atm.alt2press(alt, press_units='pa', alt_units='m') self.T[index] = atm.alt2temp(alt, alt_units='m', temp_units='K') self.a[index] = atm.temp2speed_of_sound(self.T[index], temp_units='K', speed_units='m/s') for index, alt in enumerate(self.h): self.gas.TP = self.T[index], self.p[index] self.k[index] = self.gas.cp / self.gas.cv self.mu[index] = self.gas.viscosity return None
piece.append('2400'.center(cols)) piece.append('2200'.center(cols)) piece.append('2300'.center(cols)) piece.append('2400'.center(cols)) piece.append('2500'.center(cols)) full_line = '|'.join(piece) print('|' + full_line + '|') for alt in range(0, 16000, 1000): piece = [] piece.append(str(alt).rjust(col1)) temp = SA.alt2temp(alt, temp_units='F') temp = int(temp) piece.append(str(temp).rjust(col2)) press = SA.alt2press(alt) pwr = .55 * max_pwr for rpm in range(2100, 2500, 100): mp = float(io360a.pwr2mp(pwr, rpm, alt)) if press - mp < diff: piece.append('FT'.center(col2)) else: piece.append(str(round(mp, 1)).center(col2)) pwr = .65 * max_pwr for rpm in range(2100, 2500, 100): mp = float(io360a.pwr2mp(pwr, rpm, alt)) if press - mp < diff: piece.append('FT'.center(col2)) else: