def _get_unit_factor(self, name): # type: (str) -> Tuple[float, str] if not self.f06_units or not self.out_units: msg = 'name=%r f06_units=%s out_units=%s' % (name, self.f06_units, self.out_units) raise RuntimeError(msg) unit_f06 = self.f06_units[name] unit_out = self.out_units[name] #print('name=%s unit_f06=%r unit_out=%r' % (name, unit_f06, unit_out)) if name in ['velocity', 'eas']: factor = convert_velocity(1., unit_f06, unit_out) elif name == 'altitude': factor = convert_altitude(1., unit_f06, unit_out) elif name == 'density': factor = convert_density(1., unit_f06, unit_out) elif name in ['pressure', 'dynamic_pressure']: factor = convert_pressure(1., unit_f06, unit_out) else: raise NotImplementedError(name) if self.out_units is not None: units = self.out_units[name] else: units = 'units' return factor, units
def set_pknl_results(self, results): density_units_in = self.f06_units['density'] # in/s vel = results[:, :, self.ivelocity] #.ravel() # slinch/in^3 - in_units rho = results[:, :, self.idensity] #.ravel() # good rho_ref = atm_density(0., R=1716., alt_units='ft', density_units=density_units_in) q = 0.5 * rho * vel**2 #eas = (2 * q / rho_ref)**0.5 # eas = V * sqrt(rho / rhoSL) keas = self._get_unit_factor('eas')[0] eas = vel * np.sqrt(rho / rho_ref) * keas #density_units2 = self.out_units['density'] altitude_units = self.out_units['altitude'] #print('density_units_in=%r density_units2=%r' % (density_units_in, density_units2)) kdensityi = convert_density(1., density_units_in, 'slug/ft^3') kvel = self._get_unit_factor('velocity')[0] kdensity = self._get_unit_factor('density')[0] kpressure = kdensityi * kvel**2 vel *= kvel if self.make_alt: rho_in_slug_ft3 = rho * kdensityi alt_ft = [ get_alt_for_density(densityi, density_units='slug/ft^3', alt_units='ft', nmax=20) for densityi in rho_in_slug_ft3.ravel() ] ft_to_alt_unit = convert_altitude(1., 'ft', altitude_units) alt = np.array(alt_ft, dtype='float64').reshape( vel.shape) * ft_to_alt_unit rho *= kdensity results2 = np.dstack([results, eas, q * kpressure, alt]) else: #kpressure = 1. rho *= kdensity results2 = np.dstack([results, eas, q * kpressure]) results2[:, :, self.idensity] = rho results2[:, :, self.ivelocity] = vel self.results = results2