Skip to main content

Compute airspeed (true/calibrated/equivalent/Mach), atmospheric data, and other flight condition quantities, with easy unit conversion.

Project description

About

Airspeed conversions (true/calibrated/equivalent/Mach), atmospheric data, and more with built-in unit checking. Specific sub-modules include:

  • flightcondition : input altitude to compute common flight condition data. Easily swap between true airspeed, calibrated airspeed, equivalent airspeed, and Mach number. Includes atmospheric data.

  • atmosphere : input altitude to compute 1993 International Standard Atmosphere data. Many relevant, derived quantities are included. The upper limit is 80 kilometers.

  • units : built-in unit-checking and conversion using pint package.

See examples below for usage!

Author

Matthew C. Jones <matt.c.jones.aoe@gmail.com>

Installation

Install Commands

Install using the pip package-management system. The easiest method is to open the terminal and run:

pip install flightcondition

Alternatively, manually download the source code, unpack, and run:

pip install <path/to/flightcondition>

Dependencies

  • numpy: package for scientific computing.

  • pint: package for dealing with units.

Usage

Import all utilities with,

from flightcondition import *

or more explicitly as shown in the following examples.

Flight Condition

The FlightCondition class is used to compute and interact with common flight condition data. Inputs include altitude, airspeed in some format, and an optional length scale.

Input arguments include:

  1. h geometric altitude - aliases are alt, altitude

  2. Velocity (pick one):

    • TAS true airspeed - aliases are tas, true_airspeed, U_inf, V_inf

    • CAS calibrated airspeed - aliases are cas, calibrated_airspeed

    • EAS equivalent airspeed - aliases are eas, equivalent_airspeed

    • M mach number - aliases are mach, Mach, M_inf, mach_number

  3. L length scale (optional) - aliases are ell, bylen, length, length_scale, l

See also the KTAS, KCAS, and KEAS syntactic sugar. For example, KCAS=233 is equivalent to CAS=233*unit('knots').

Outputs include:

  1. byalt altitude quantities - see Atmosphere class below.

  2. byvel velocity quantities:

    • True airspeed TAS

    • Calibrated airspeed CAS

    • Equivalent airspeed EAS

    • Mach number M

    • Mach angle mu_M

    • Dynamic pressure q_inf

    • Impact pressure q_c

    • Stagnation pressure p_0

    • Stagnation temperature T_0

    • Recovery temperature (laminar) Tr_lamr

    • Recovery temperature (turbulent) Tr_turb

    • Reynolds number per unit length Re_by_L

  3. bylen length-scale quantities:

    • Length scale L

    • Reynolds number Re

    • Boundary layer thickness (laminar) h_BL_lamr

    • Boundary layer thickness (turbulent) h_BL_turb

    • Flat plate skin friction coefficient (laminar) Cf_lamr

    • Flat plate skin friction coefficient (turbulent) Cf_turb

    • Boundary layer thickness (laminar) h_BL_lamr

    • Boundary layer thickness (turbulent) h_BL_turb

    • Wall distance (turbulent) where \(y^+=1\) h_yplus1

Quantities may be accessed by either (a) their shorter variable names, e.g. .M, or (b) by their longer, full names, e.g. byname.mach_number. They may also be accessed through their particular sub-category: byalt, byvel, or bylen, e.g. .byvel.M or .byvel.byname.mach_number.

Example usage:

from flightcondition import FlightCondition, unit, dimless

# Compute flight condition at 3 km, Mach 0.5
fc = FlightCondition(3*unit('km'), M=0.5)

# Uncomment to print summary of flight condition quantities:
#print(f"{fc}")

# Uncomment to print abbreviated output in US units:
#print(f"\n{fc.tostring(full_output=False, units="US")}")

# Convert true, calibrated, equivalent airspeeds
KTAS = fc.TAS.to('knots')
KCAS = fc.CAS.to('knots')
KEAS = fc.EAS.to('knots')
print(f"Flying at {KTAS.magnitude:.4g} KTAS,"
      f" which is {KCAS.magnitude:.4g} KCAS,"
      f" or {KEAS.magnitude:.4g} KEAS")
# >>> Flying at 319.4 KTAS, which is 277.7 KCAS, or 275.1 KEAS

# Access atmospheric data (see Atmosphere class for more)
h, p, T, rho, nu, a = fc.h, fc.p, fc.T, fc.rho, fc.nu, fc.a
print(f"The ambient temperature at {h.to('km'):.4g} is {T:.4g}")
# >>> The ambient temperature at 3 km is 268.7 K

# Change airspeed to 300 KEAS and altitude to 12 kft
fc.EAS = 300 * unit('knots')
fc.h = 12 * unit('kft')
#print(f"{fc}")  # uncomment to print output

# Recompute for a range of altitudes at 275.14 knots-equivalent
# airspeed with a characteristic length scale of 10 meters
fc = FlightCondition([0, 9.8425, 20]*unit('kft'),
                    EAS=275.14*unit('kt'),
                    L=10*unit('m'))

# Compute additional derived quantities - explore the class for more!
print(f"\nThe dynamic pressure in psi is {fc.q_inf.to('psi'):.3g}")
# >>> The dynamic pressure in psi is [1.78 1.78 1.78] psi
print(f"The Reynolds number is {fc.Re:.3g}")
# >>> The Reynolds number is [9.69e+07 8.82e+07 7.95e+07]
h_yplus100 = fc.wall_distance_from_yplus(100)
print(f"The wall distance where y+=100 is {h_yplus100.to('in'):.3g}")
# >>> The wall distance where y+=100 is [0.0126 0.0138 0.0153] in

# Alternatively access quantities by their full name
print(fc.TAS == fc.byname.true_airspeed)
# >>> [ True  True  True]

# Or by their sub-categories: `byalt`, `byvel`, or `bylen`
print(fc.byvel.TAS == fc.byvel.byname.true_airspeed)
# >>> [ True  True  True]

Atmosphere

The Atmosphere class can be used to compute and interact with common standard atmosphere data and derived quantities.

Outputs include:

  • Pressure p

  • Temperature T

  • Density rho

  • Sound speed a

  • Dynamic viscosity mu

  • Kinematic viscosity nu

  • Thermal conductivity k

  • Layer name layer.name

  • Geometric altitude h

  • Geopotential altitude H

  • Acceleration due to gravity g

  • Mean free path MFP

Usage:

from flightcondition import Atmosphere, unit

# Compute atmospheric data for a scalar or array of altitudes
h = [0.0, 44.2, 81.0] * unit('km')
atm = Atmosphere(h)

# Uncomment to print all atmospheric quantities:
#print(f"\n{atm}")

# Uncomment to print while specifying abbreviated output in US units:
#print(f"\n{atm.tostring(full_output=False, units="US")}")

# See also the linspace() function from numpy, e.g.
# h = linspace(0, 81.0, 82) * unit('km')

# Access individual properties and convert to desired units: "
p, T, rho, nu, a, k = atm.p, atm.T, atm.rho, atm.nu, atm.a, atm.k
print(f"\nThe pressure in psi is {p.to('psi'):.3g}")
# >>> The pressure in psi is [14.7 0.024 0.000129] psi

# Compute additional properties such as mean free path
# Explore the class data structure for all options
print( f"\nThe mean free path = {atm.MFP:.3g}")
# >>> The mean free path = [7.25e-08 4.04e-05 0.00564] yd

Units

Conveniently input, output, and convert units using pint units.

from flightcondition import unit, printv

h = 33 * unit('km')
print(h.to('kft'))
# >>> 108.26771653543307 kft
printv(h, to='kft')
# >>> h = 108.27 kft

U_inf = 20 * unit('knots')
rho_inf = 1.225 * unit('kg/m^3')
q_inf = 0.5*rho_inf*U_inf**2
printv(q_inf, to='psi')
# >>> q_inf = 0.0094042 psi

Note that pint does not support conflicting unit registries so avoid interactions between flightcondition.unit and a separate pint.UnitRegistry.

Command Line Interface

A command line interface (CLI) is included for convenience but with limited functionality. Run flightcondition -h for help.

An example call is given for the flight condition of 233 knots-equivalent-airspeed at 23 kilofeet with a length scale of 4 feet and abbreviated output:

flightcondition --h 23 kft --EAS 233 knots --L 4 ft --no-full-output
===========================================================
Flight Condition (units=US, full_output=False)
===========================================================
------------------  Altitude Quantities  ------------------
geometric_altitude             h          = 23 kft
pressure                       p          = 857.25 lbf/ft²
temperature                    T          = 436.74 °R
density                        rho        = 0.0011435 slug/ft³
sound_speed                    a          = 1024.5 ft/s
kinematic_viscosity            nu         = 2.8509×10⁻⁴ ft²/s
------------------  Velocity Quantities  ------------------
true_airspeed                  TAS        = 335.93 kt
calibrated_airspeed            CAS        = 238.14 kt
equivalent_airspeed            EAS        = 233 kt
mach_number                    M          = 0.55344
reynolds_per_length            Re_by_L    = 1.6573×10⁵ 1/in
------------------   Length Quantities   ------------------
length_scale                   L          = 4 ft
reynolds_number                Re         = 7.9551×10⁶

Alternatively use the --KEAS 233 syntactic sugar to omit the knots unit. See also --KTAS and --KCAS.

Assumptions

  • Atmospheric quantities follow the 1993 International Standard Atmosphere model.

  • Velocity computations include varying degrees of the following assumptions. If assumptions are broken for a particular quantity, that quantity returns nan.

    • Continuum flow (mean free path is much smaller than the characteristic length scale)

    • Ideal gas

    • Thermally perfect gas

    • Calorically perfect gas

    • Adiabatic

    • Reversible (CAS, q_c, p_0)

License

flightcondition is licensed under the MIT LICENSE. See the LICENSE document.

Disclaimer

The software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flightcondition-22.8.21.tar.gz (33.3 kB view hashes)

Uploaded Source

Built Distribution

flightcondition-22.8.21-py3-none-any.whl (34.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page