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