cape.convert: Unit and angle conversion utilities

Perform conversions such as (alpha total, phi) to (alpha, beta). It also contains various utilities such as calculating Sutherland’s law for estimating viscosity with the standard parameters, which are commonly needed tools for CFD solvers.

cape.convert.AlphaBeta2AlphaMPhi(alpha, beta)

Convert angle of attack and sideslip to maneuver axis

Call:
>>> alpha_m, phi_m = cape.AlphaBeta2AlphaMPhi(alpha, beta)
Inputs:
alpha: float | numpy.array

Angle of attack

beta: float | numpy.array

Sideslip angle

Outputs:
alpha_m: float | numpy.array

Signed total angle of attack [deg]

phi_m: float | numpy.array

Total roll angle

Versions:
  • 2017-06-26 @ddalle: Version 1.0

cape.convert.AlphaBeta2AlphaTPhi(alpha, beta)

Convert angle of attack and sideslip to missile axis angles

Call:
>>> alpha_t, phi = cape.AlphaBeta2AlphaTPhi(alpha, beta)
Inputs:
alpha: float | numpy.array

Angle of attack

beta: float | numpy.array

Sideslip angle

Outputs:
alpha_t: float | numpy.array

Total angle of attack

phi: float | numpy.array

Total roll angle

Versions:
  • 2014-06-02 @ddalle: Version 1.0

  • 2014-11-05 @ddalle: Version 1.1, transpose w formula

cape.convert.AlphaBeta2DirectionCosines(alpha, beta)

Convert angle of attack and sideslip to direction cosines

Call:
>>> u, v, w = cape.AlphaBeta2DirectionCosines(alpha, beta)
Inputs:
alpha: float | numpy.array

Angle of attack

beta: float | numpy.array

Sideslip angle

Outputs:
u: float | numpy.array

x-component of body-frame velocity unit vector

v: float | numpy.array

y-component of body-frame velocity unit vector

w: float | numpy.array

z-component of body-frame velocity unit vector

Versions:
  • 2019-06-19 @ddalle: Version 1.0

cape.convert.AlphaMPhi2AlphaTPhi(alpha_m, phi_m)

Convert maneuver axis to missile axis angles

Call:
>>> alpha_t, phi = cape.AlphaTPhi2AlphaMPhi(alpha_m, phi_m)
Inputs:
alpha_m: float | numpy.array

Signed total angle of attack [deg]

phi_m: float | numpy.array

Total roll angle

Outputs:
alpha_t: float | numpy.array

Total angle of attack

phi: float | numpy.array

Total roll angle

Versions:
  • 2017-06-27 @ddalle: Version 1.0

cape.convert.AlphaTPhi2AlphaBeta(alpha_t, phi)

Convert total angle of attack and roll to alpha, beta

Call:
>>> alpha, beta = cape.AlphaTPhi2AlphaBeta(alpha_t, beta)
Inputs:
alpha_t: float | numpy.array

Total angle of attack

phi: float | numpy.array

Total roll angle

Outputs:
alpha: float | numpy.array

Angle of attack

beta: float | numpy.array

Sideslip angle

Versions:
  • 2014-06-02 @ddalle: Version 1.0

cape.convert.AlphaTPhi2AlphaMPhi(alpha_t, phi)

Convert missile-axis to maneuver-axis angles

Call:
>>> alpha_m, phi_m = cape.AlphaTPhi2AlphaMPhi(alpha_t, phi)
Inputs:
alpha_t: float | numpy.array

Total angle of attack

phi: float | numpy.array

Total roll angle

Outputs:
alpha_m: float | numpy.array

Signed total angle of attack [deg]

phi_m: float | numpy.array

Total roll angle

Versions:
  • 2017-06-27 @ddalle: Version 1.0

cape.convert.AlphaTPhi2DirectionCosines(aoap, phip)

Convert total angle of attack and roll to direction cosines

Call:
>>> u, v, w = cape.AlphaTPhi2DirectionCosines(aoap, phip)
Inputs:
aoap: float | numpy.array

Total angle of attack

phip: float | numpy.array

Missile-axis to body-z roll angle

Outputs:
u: float | numpy.array

x-component of body-frame velocity unit vector

v: float | numpy.array

y-component of body-frame velocity unit vector

w: float | numpy.array

z-component of body-frame velocity unit vector

Versions:
  • 2019-06-19 @ddalle: Version 1.0

cape.convert.CriticalAreaRatio(M, gamma=1.4)

Get the area ratio to a Mach 1 area

Call:
>>> AR = CriticalAreaRatio(M, gamma=1.4)
Inputs:
M: float

Mach number

gamma: {1.4} | float

Ratio of specific heats

Outputs:
AR: float

Nozzle area ratio

Versions:
  • 2016-04-13 @ddalle: Version 1.0

cape.convert.DirectionCosines2AlphaBeta(u, v, w)

Convert direction cosines to angle of attack and sideslip

Call:
>>> alpha, beta = cape.DirectionCosines2AlphaBeta(u, v, w)
Inputs:
u: float | numpy.array

x-component of body-frame velocity unit vector

v: float | numpy.array

y-component of body-frame velocity unit vector

w: float | numpy.array

z-component of body-frame velocity unit vector

Outputs:
alpha: float | numpy.array

Angle of attack

beta: float | numpy.array

Sideslip angle

Versions:
  • 2019-06-19 @ddalle: Version 1.0

cape.convert.DirectionCosines2AlphaTPhi(u, v, w)

Convert direction cosines to total angle of attack and roll

Call:
>>> aoap, phip = cape.DirectionCosines2AlphaBeta(u, v, w)
Inputs:
u: float | numpy.array

x-component of body-frame velocity unit vector

v: float | numpy.array

y-component of body-frame velocity unit vector

w: float | numpy.array

z-component of body-frame velocity unit vector

Outputs:
aoap: float | numpy.array

Total angle of attack

phip: float | numpy.array

Missile-axis to body-z roll angle

Versions:
  • 2019-06-19 @ddalle: Version 1.0

cape.convert.ExitMachFromAreaRatio(AR, M1, gamma=1.4, subsonic=False)

Calculate 1D nozzle Mach number from input Mach and area ratio

Call:
>>> M2 = ExitMachFromAreaRatio(AR,M1, gamma=1.4, subsonic=False)
Inputs:
AR: float

Nozzle area ratio

M1: float

Input Mach number

gamma: {1.4} | float

Ratio of specific heats

subsonic: True | {False}

Whether or not M2 should be less than 1.0

Outputs:
M2: float

Exit Mach number

Versions:
  • 2016-04-13 @ddalle: Version 1.0

cape.convert.PressureFPSFromRe(Re, T, M, R=None, gam=None, mu0=None, T0=None, C=None)

Calculate pressure from Reynolds number

Call:
>>> p = PressureFPSFromRe(Re, T, M)
>>> p = PressureFPSFromRe(Re, T, M, R=None, gam=None, **kw)
Inputs:
Re: float

Reynolds number per foot

T: float

Static temperature [R]

M: float

Mach number

R: float

Gas constant [ft^2/s^2*R]

gam: float

Ratio of specific heats

mu0: float

Reference viscosity [slug/ft*s]

T0: float

Reference temperature [K]

C: float

Reference temperature [K]

Outputs:
p: float

Static pressure [psf]

See also:
Versions:
  • 2016-03-24 @ddalle: Version 1.0

cape.convert.PressureMKSFromRe(Re, T, M, R=None, gam=None, mu0=None, T0=None, C=None)

Calculate pressure from Reynolds number

Call:
>>> p = PressureMKSFromRe(Re, T, M)
>>> p = PressureMKSFromRe(Re, T, M, R=None, gam=None, **kw)
Inputs:
Re: float

Reynolds number per foot

T: float

Static temperature [K]

M: float

Mach number

R: float

Gas constant [m^2/s^2*R]

gam: float

Ratio of specific heats

mu0: float

Reference viscosity [kg/m*s]

T0: float

Reference temperature [K]

C: float

Reference temperature [K]

Outputs:
p: float

Static pressure [Pa]

See also:
Versions:
  • 2016-03-24 @ddalle: Version 1.0

cape.convert.ReynoldsPerFoot(p, T, M, R=None, gam=None, mu0=None, T0=None, C=None)

Calculate Reynolds number per foot using Sutherland’s Law

Call:
>>> Re = ReynoldsPerFoot(p, T, M)
>>> Re = ReynoldsPerFoot(p, T, M, **kw)
Inputs:
p: float

Static pressure [psf]

T: float

Static temperature [R]

M: float

Mach number

R: float

Gas constant [ft^2/s^2*R]

gam: float

Ratio of specific heats

mu0: float

Reference viscosity [slug/ft*s]

T0: float

Reference temperature [R]

C: float

Reference temperature [R]

Outputs:
Re: float

Reynolds number per foot

See also:
Versions:
  • 2016-03-23 @ddalle: Version 1.0

cape.convert.ReynoldsPerMeter(p, T, M, R=None, gam=None, mu0=None, T0=None, C=None)

Calculate Reynolds number per meter using Sutherland’s Law

Call:
>>> Re = ReynoldsPerMeter(p, T, M)
>>> Re = ReynoldsPerMeter(p, T, M, **kw)
Inputs:
p: float

Static pressure [Pa]

T: float

Static temperature [K]

M: float

Mach number

R: float

Gas constant [m^2/s^2*R]

gam: float

Ratio of specific heats

mu0: float

Reference viscosity [kg/m*s]

T0: float

Reference temperature [K]

C: float

Reference temperature [K]

Outputs:
Re: float

Reynolds number per foot

See also:
Versions:
  • 2016-03-24 @ddalle: Version 1.0

cape.convert.SutherlandFPS(T, mu0=None, T0=None, C=None)

Calculate viscosity using Sutherland’s law using imperial units

This returns

\[\mu = \mu_0 \frac{T_0+C}{T+C} \left(\frac{T}{T_0}\right)^{3/2}\]
Call:
>>> mu = SutherlandFPS(T)
>>> mu = SutherlandFPS(T, mu0=None, T0=None, C=None)
Inputs:
T: float

Static temperature in degrees Rankine

mu0: {3.58394e-7} | float

Reference viscosity [slug/ft*s]

T0: {491.67} | float

Reference temperature [R]

C: {198.6} | float

Reference temperature [R]

Outputs:
mu: float

Dynamic viscosity [slug/ft*s]

Versions:
  • 2016-03-23 @ddalle: Version 1.0

cape.convert.SutherlandMKS(T, mu0=None, T0=None, C=None)

Calculate viscosity using Sutherland’s law using SI units

This returns

\[\begin{split}\mu = \mu_0 \\frac{T_0+C}{T+C} \left(\frac{T}{T_0}\right)^{3/2}\end{split}\]
Call:
>>> mu = SutherlandMKS(T)
>>> mu = SutherlandMKS(T, mu0=None, T0=None, C=None)
Inputs:
T: float

Static temperature in degrees Rankine

mu0: {1.716e-5} | float

Reference viscosity [kg/m*s]

T0: {273.15} | float

Reference temperature [K]

C: {110.33333} | float

Reference temperature [K]

Outputs:
mu: float

Dynamic viscosity [kg/m*s]

Versions:
  • 2016-03-23 @ddalle: Version 1.0

cape.convert.fstep(x)

Return -1 for negative numbers and +1 for nonnegative numbers

Call:
>>> y = fstep(x)
Inputs:
x: float | np.ndarray

Input or array of inputs

Outputs:
y: -1.0 | 1.0 | np.ndarray

Output step function or array of outputs

Versions:
  • 2017-06-27 @ddalle: Version 1.0

cape.convert.fstep1(x)

Return -1 for nonpositive numbers and +1 for positive inputs

Call:
>>> y = fstep1(x)
Inputs:
x: float | np.ndarray

Input or array of inputs

Outputs:
y: -1.0 | 1.0 | np.ndarray

Output step function or array of outputs

Versions:
  • 2017-06-27 @ddalle: Version 1.0