ducts.py

class openconcept.thermal.ducts.ExplicitIncompressibleDuct(**kwargs)

Bases: ExplicitComponent

This is a very approximate model of a duct at incompressible speeds. Its advantage is low computational cost and improved convergence even at low speed. It CANNOT model flow with heat addition so it will generally be a conservative estimate on the cooling drag. Assumes the static pressure at the outlet duct = p_inf which may or may not be a good assumption.

Inputs:
  • fltcond|Utrue (float) – True airspeed in the freestream (vector, m/s)

  • fltcond|rho (float) – Density in the freestream (vector, kg/m**3)

  • area_nozzle (float) – Cross-sectional area of the outlet nozzle (vector, m**2) Generally must be the narrowest portion of the duct for analysis to be valid

  • delta_p_hex (float) – Pressure drop across the heat exchanger (vector, Pa)

Outputs:
  • mdot (float) – Mass flow rate through the duct (vector, kg/s)

  • drag (float) – Drag force on the duct positive rearwards (vector, N)

Options:
  • num_nodes (float) – Number of analysis points to run

  • static_pressure_loss_factor (float) – Delta p / local dynamic pressure to model inlet and nozzle losses (vector, dimensionless) Default 0.00

  • gross_thrust_factor (float) – Fraction of total gross thrust to recover (aka Cfg) Accounts for duct losses, in particular nozzle losses Default 0.98

class openconcept.thermal.ducts.TemperatureIsentropic(**kwargs)

Bases: ExplicitComponent

Compute static temperature via isentropic relation

Inputs:
  • Tt (float) – Total temperature (vector, K)

  • M (float) – Mach number (vector, dimensionless)

Outputs:

T (float) – Static temperature (vector, K)

Options:
  • num_nodes (int) – Number of analysis points to run (scalar, dimensionless)

  • gamma (float) – Specific heat ratio (scalar, dimensionless)

class openconcept.thermal.ducts.TotalTemperatureIsentropic(**kwargs)

Bases: ExplicitComponent

Compute total temperature via isentropic relation

Inputs:
  • T (float) – Static temperature (vector, K)

  • M (float) – Mach number (vector, dimensionless)

Outputs:

Tt (float) – Static temperature (vector, K)

Options:
  • num_nodes (int) – Number of analysis points to run (scalar, dimensionless)

  • gamma (float) – Specific heat ratio (scalar, dimensionless)

class openconcept.thermal.ducts.PressureIsentropic(**kwargs)

Bases: ExplicitComponent

Compute static pressure via isentropic relation

Inputs:
  • pt (float) – Total pressure (vector, Pa)

  • M (float) – Mach number (vector, dimensionless)

Outputs:

p (float) – Static temperature (vector, Pa)

Options:
  • num_nodes (int) – Number of analysis points to run (scalar, dimensionless)

  • gamma (float) – Specific heat ratio (scalar, dimensionless)

class openconcept.thermal.ducts.TotalPressureIsentropic(**kwargs)

Bases: ExplicitComponent

Compute total pressure via isentropic relation

Inputs:
  • p (float) – Static pressure (vector, Pa)

  • M (float) – Mach number (vector, dimensionless)

Outputs:

pt (float) – Total pressure (vector, Pa)

Options:
  • num_nodes (int) – Number of analysis points to run (scalar, dimensionless)

  • gamma (float) – Specific heat ratio (scalar, dimensionless)

class openconcept.thermal.ducts.DensityIdealGas(**kwargs)

Bases: ExplicitComponent

Compute density from ideal gas law

Inputs:
  • p (float) – Static pressure (vector, Pa)

  • T (float) – Static temperature (vector, K)

Outputs:

rho (float) – Density (vector, kg/m**3)

Options:
  • num_nodes (int) – Number of analysis points to run (scalar, dimensionless)

  • R (float) – Gas constant (scalar, J / kg / K)

class openconcept.thermal.ducts.SpeedOfSound(**kwargs)

Bases: ExplicitComponent

Compute speed of sound

Inputs:

T (float) – Static temperature (vector, K)

Outputs:

a (float) – Speed of sound (vector, m/s)

Options:
  • num_nodes (int) – Number of analysis points to run (scalar, dimensionless)

  • R (float) – Gas constant (scalar, J / kg / K)

  • gamma (float) – Specific heat ratio (scalar dimensionless)

class openconcept.thermal.ducts.MachNumberfromSpeed(**kwargs)

Bases: ExplicitComponent

Compute Mach number from TAS and speed of sound

Inputs:
  • Utrue (float) – True airspeed (vector, m/s)

  • a (float) – Speed of sound (vector, m/s)

Outputs:

M (float) – Mach number (vector, dimensionless)

Options:

num_nodes (int) – Number of analysis points to run (scalar, dimensionless)

class openconcept.thermal.ducts.HeatAdditionPressureLoss(**kwargs)

Bases: ExplicitComponent

Adds / removes heat and pressure gain / loss

Inputs:
  • Tt_in (float) – Total temperature in (vector, K)

  • pt_in (float) – Total pressure in (vector, Pa)

  • mdot (float) – Mass flow (vector, kg/s)

  • delta_p (float) – Pressure gain / loss (vector, Pa)

  • pressure_recovery (float) – Total pressure gain / loss as a multiple (vector, dimensionless)

  • heat_in (float) – Heat addition (subtraction) rate (vector, W)

  • cp (float) – Specific heat (scalar, J/kg/K)

Outputs:
  • Tt_out (float) – Total temperature out (vector, K)

  • pt_out (float) – Total pressure out (vector, Pa)

Options:

num_nodes (int) – Number of analysis points to run (scalar, dimensionless)

class openconcept.thermal.ducts.MassFlow(**kwargs)

Bases: ExplicitComponent

Computes mass flow explicity from other parameters. Designed for use at the nozzle / min area point.

Inputs:
  • M (float) – Mach number at this station (vector, dimensionless)

  • rho (float) – Density at this station (vector, kg/m**3)

  • area (float) – Flow cross sectional area at this station (vector, m**2)

  • a (float) – Speed of sound (vector, m/s)

Outputs:

mdot (float) – Mass flow rate (vector, kg/s)

Options:

num_nodes (int) – Number of analysis points to run (scalar, dimensionless)

class openconcept.thermal.ducts.DuctExitPressureRatioImplicit(**kwargs)

Bases: ImplicitComponent

Compute duct exit pressure ratio based on total pressure and ambient pressure

Inputs:
  • p_exit (float) – Exit static pressure (vector, Pa)

  • pt (float) – Total pressure (vector, Pa)

Outputs:

nozzle_pressure_ratio (float) – Computed nozzle pressure ratio (vector, dimensionless)

Options:

num_nodes (int) – Number of analysis points to run (scalar, dimensionless)

class openconcept.thermal.ducts.DuctExitMachNumber(**kwargs)

Bases: ExplicitComponent

Compute duct exit Mach number based on nozzle pressure ratio

Inputs:

nozzle_pressure_ratio (float) – Computed nozzle pressure ratio (vector, dimensionless)

Outputs:

M (float) – Computed nozzle Mach number(vector, dimensionless)

Options:
  • num_nodes (int) – Number of analysis points to run (scalar, dimensionless)

  • gamma (float) – Specific heat ratio (scalar, dimensionless)

class openconcept.thermal.ducts.NetForce(**kwargs)

Bases: ExplicitComponent

Compute net force based on inlet and outlet pressures and velocities

Inputs:
  • mdot (float) – Mass flow rate (vector, kg/s)

  • Utrue_inf (float) – Freestream true airspeed (vector, m/s)

  • p_inf (float) – Static pressure in the free stream. (vector, Pa)

  • area_nozzle (float) – Nozzle cross sectional area (vector, m**2)

  • p_nozzle (float) – Static pressure at the nozzle. Equal to p_inf unless choked (vector, Pa)

  • rho_nozzle (float) – Density at the nozzle (vector, kg/m**3)

Outputs:

F_net (float) – Overall net force (positive is forward thrust) (vector, N)

Options:

num_nodes (int) – Number of analysis points to run (scalar, dimensionless)

class openconcept.thermal.ducts.Inlet(**kwargs)

Bases: Group

This group takes in ambient flight conditions and computes total quantities for downstream use

Inputs:
  • T (float) – Temperature (vector, K)

  • p (float) – Ambient static pressure (vector, Pa)

  • Utrue (float) – True airspeed (vector, m/s)

Outputs:
  • Tt (float) – Total temperature (vector, K)

  • pt (float) – Total pressure (vector, Pa)

Options:

num_nodes (int) – Number of conditions to analyze

class openconcept.thermal.ducts.DuctStation(**kwargs)

Bases: Group

A ‘normal’ station in a duct flow.

Inputs:
  • pt_in (float) – Upstream total pressure (vector, Pa)

  • Tt_in (float) – Upstream total temperature (vector, K)

  • mdot (float) – Mass flow (vector, kg/s)

  • delta_p (float) – Pressure gain (loss) at this station (vector, Pa)

  • heat_in (float) – Heat addition (loss) rate at this station (vector, W)

Outputs:
  • pt_out (float) – Downstream total pressure (vector, Pa)

  • Tt_out (float) – Downstream total temperature (vector, K)

Options:

num_nodes (int) – Number of conditions to analyze

class openconcept.thermal.ducts.NozzlePressureLoss(**kwargs)

Bases: ExplicitComponent

This group adds proportional pressure loss to the nozzle component

Inputs:
  • pt_in (float) – Total pressure upstream of the nozzle (vector, Pa)

  • mdot (float) – Mass flow (vector, kg/s)

  • area (float) – Nozzle cross sectional area (vector, m**2)

  • dynamic_pressure_loss_factor (float) – Total pressure loss as a fraction of dynamic pressure

Outputs:

pt (float) – Total pressure downstream of the nozzle (vector, Pa)

Options:

num_nodes (int) – Number of conditions to analyze

class openconcept.thermal.ducts.OutletNozzle(**kwargs)

Bases: Group

This group is designed to be the farthest downstream point in a ducted heat exchanger model.

Mass flow is set based on the upstream total pressure and ambient static pressure.

Inputs:
  • p_exit (float) – Exit static pressure. Normally set to ambient flight pressure (vector, Pa)

  • pt (float) – Total pressure upstream of the nozzle (vector, Pa)

  • Tt (float) – Total temperature upstream of the nozzle (vector, K)

  • area (float) – Nozzle cross sectional area (vector, m**2)

Outputs:

mdot (float) – Mass flow (vector, kg/s)

Options:

num_nodes (int) – Number of conditions to analyze

class openconcept.thermal.ducts.ImplicitCompressibleDuct(**kwargs)

Bases: Group

Ducted heat exchanger with compressible flow assumptions

class openconcept.thermal.ducts.ImplicitCompressibleDuct_ExternalHX(**kwargs)

Bases: Group

Ducted heat exchanger with compressible flow assumptions