Source code for RCAIDE.Library.Methods.Powertrain.Propulsors.Turboprop.compute_thrust
# RCAIDE/Methods/Energy/Propulsors/Turboprop/compute_thrust.py
#
#
# Created: Sep 2024, M. Clarke, M. Guidotti
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
# RCAIDE imports
from RCAIDE.Framework.Core import Units
# Python package imports
import numpy as np
# ----------------------------------------------------------------------------------------------------------------------
# compute_thrust
# ----------------------------------------------------------------------------------------------------------------------
[docs]
def compute_thrust(turboprop, conditions):
"""
Computes thrust and other performance metrics for a turboprop engine.
Parameters
----------
turboprop : RCAIDE.Library.Components.Propulsors.Turboprop
Turboprop engine component with the following attributes:
- tag : str
Identifier for the turboprop
- compressor : Data
Compressor component
- combustor : Data
Combustor component
- turbine_inlet_temperature : float
Combustor exit/turbine inlet temperature [K]
- fuel_data : Data
Fuel properties
- lower_heating_value : float
Fuel lower heating value [J/kg]
- high_pressure_turbine : Data
High pressure turbine component
- low_pressure_turbine : Data
Low pressure turbine component
- mechanical_efficiency : float
Mechanical efficiency of the turbine
- core_nozzle : Data
Core nozzle component
- propeller_efficiency : float
Efficiency of the propeller
- gearbox : Data
Gearbox component
- efficiency : float
Gearbox efficiency
- reference_temperature : float
Reference temperature for mass flow scaling [K]
- reference_pressure : float
Reference pressure for mass flow scaling [Pa]
- compressor_nondimensional_massflow : float
Non-dimensional mass flow parameter [kg·√K/(s·Pa)]
conditions : RCAIDE.Framework.Mission.Common.Conditions
Flight conditions with:
- freestream : Data
Freestream properties
- gravity : numpy.ndarray
Gravitational acceleration [m/s²]
- temperature : numpy.ndarray
Freestream temperature [K]
- pressure : numpy.ndarray
Freestream pressure [Pa]
- mach_number : numpy.ndarray
Freestream Mach number
- speed_of_sound : numpy.ndarray
Speed of sound [m/s]
- energy : Data
Energy conditions
- propulsors[turboprop.tag] : Data
Turboprop-specific conditions
- throttle : numpy.ndarray
Throttle setting [0-1]
- total_temperature_reference : numpy.ndarray
Reference total temperature [K]
- total_pressure_reference : numpy.ndarray
Reference total pressure [Pa]
- converters : dict
Converter energy conditions indexed by tag
Returns
-------
None
Results are stored in conditions.energy.propulsors[turboprop.tag]:
- thrust : numpy.ndarray
Thrust force [N]
- thrust_specific_fuel_consumption : numpy.ndarray
Thrust specific fuel consumption [kg/(N·hr)]
- non_dimensional_thrust : numpy.ndarray
Non-dimensional thrust
- core_mass_flow_rate : numpy.ndarray
Core mass flow rate [kg/s]
- fuel_flow_rate : numpy.ndarray
Fuel flow rate [kg/s]
- power : numpy.ndarray
Shaft power output [W]
- specific_power : numpy.ndarray
Specific power [W·s/kg]
- power_specific_fuel_consumption : numpy.ndarray
Power specific fuel consumption [kg/(W·hr)]
- thermal_efficiency : numpy.ndarray
Thermal efficiency
- propulsive_efficiency : numpy.ndarray
Propulsive efficiency
Notes
-----
This function implements a thermodynamic model for a turboprop engine to calculate
thrust, fuel consumption, and efficiencies. It uses the outputs from each component
in the engine cycle to determine overall performance.
**Major Assumptions**
* Perfect gas behavior
* Constant component efficiencies
* Propeller efficiency is constant
**Theory**
The turboprop performance is calculated using gas turbine cycle analysis. The thrust
is determined by the power output of the low pressure turbine, the propeller efficiency,
and the core exhaust momentum.
The specific thrust is calculated as:
.. math::
F_{sp} = \\frac{W_{total} \\cdot c_p \\cdot T_0}{V_0}
where:
* :math:`W_{total}` is the total work output coefficient
* :math:`c_p` is the specific heat at constant pressure
* :math:`T_0` is the freestream temperature
* :math:`V_0` is the freestream velocity
References
----------
[1] Mattingly, J.D., "Elements of Gas Turbine Propulsion", AIAA Education Series, 1996.
See Also
--------
RCAIDE.Library.Methods.Powertrain.Propulsors.Turboprop.compute_turboprop_performance
RCAIDE.Library.Methods.Powertrain.Propulsors.Turboprop.size_core
"""
g = conditions.freestream.gravity
T0 = conditions.freestream.temperature
P0 = conditions.freestream.pressure
M0 = conditions.freestream.mach_number
a0 = conditions.freestream.speed_of_sound
V0 = M0 *a0
compressor = turboprop.compressor
combustor = turboprop.combustor
high_pressure_turbine = turboprop.high_pressure_turbine
low_pressure_turbine = turboprop.low_pressure_turbine
core_nozzle = turboprop.core_nozzle
Tt4 = turboprop.combustor.turbine_inlet_temperature
propeller_efficiency = turboprop.propeller_efficiency
gearbox_efficiency = turboprop.gearbox.efficiency
low_pressure_turbine_mechanical_efficiency = turboprop.low_pressure_turbine.mechanical_efficiency
lower_heating_value = turboprop.combustor.fuel_data.lower_heating_value
SFC_adjustment = turboprop.specific_fuel_consumption_reduction_factor
# unpack component conditions
turboprop_conditions = conditions.energy.propulsors[turboprop.tag]
core_nozzle_conditions = conditions.energy.converters[core_nozzle.tag]
compressor_conditions = conditions.energy.converters[compressor.tag]
combustor_conditions = conditions.energy.converters[combustor.tag]
lpt_conditions = conditions.energy.converters[low_pressure_turbine.tag]
hpt_conditions = conditions.energy.converters[high_pressure_turbine.tag]
# unpack from turboprop
fuel_to_air_ratio = combustor_conditions.outputs.fuel_to_air_ratio
turbine_cp = lpt_conditions.outputs.cp
turbine_gas_constant = lpt_conditions.outputs.gas_constant
compressor_cp = compressor_conditions.outputs.cp
compressor_gas_constant = compressor_conditions.outputs.gas_constant
compressor_gamma = compressor_conditions.outputs.gamma
core_exit_temperature = core_nozzle_conditions.outputs.static_temperature
core_exit_pressure = core_nozzle_conditions.outputs.static_pressure
core_exit_velocity = core_nozzle_conditions.outputs.velocity
high_pressure_turbine_temperature_ratio = (hpt_conditions.outputs.stagnation_temperature/hpt_conditions.inputs.stagnation_temperature)
low_pressure_turbine_temperature_ratio = (lpt_conditions.outputs.stagnation_temperature/lpt_conditions.inputs.stagnation_temperature)
propeller_work_output_coefficient = propeller_efficiency*gearbox_efficiency*low_pressure_turbine_mechanical_efficiency*(1 + fuel_to_air_ratio)*(turbine_cp*Tt4)/(compressor_cp*T0)*high_pressure_turbine_temperature_ratio*(1 - low_pressure_turbine_temperature_ratio)
compressor_work_output_coefficient = (compressor_gamma - 1)*M0*((1 + fuel_to_air_ratio)*(core_exit_velocity/a0) - M0 + (1 + fuel_to_air_ratio)*(turbine_gas_constant/compressor_gas_constant)*((core_exit_temperature/T0)/((core_exit_velocity/a0)))*((1 - (P0/core_exit_pressure))/compressor_gamma))
total_work_output_coefficient = propeller_work_output_coefficient + compressor_work_output_coefficient
# Computing Specifc Thrust
Fsp = (total_work_output_coefficient*compressor_cp*T0)/(V0) # [(N*s)/kg]
# Computing the TSFC
TSFC = (1 - SFC_adjustment) * (fuel_to_air_ratio/(Fsp)) * Units.hour # [kg/(N*hr)]
W_dot_mdot0 = total_work_output_coefficient*compressor_cp*T0 # [(W*s)/kg]
# Computing the Power Specific Fuel Consumption
PSFC = (1 - SFC_adjustment) * (fuel_to_air_ratio/(total_work_output_coefficient*compressor_cp*T0)) * Units.hour # [kg/(W*hr)]
# Computing the Thermal Efficiency
eta_T = total_work_output_coefficient/((fuel_to_air_ratio*lower_heating_value)/(compressor_cp*T0)) # [-]
# Computing the Propulsive Efficiency
eta_P = total_work_output_coefficient/((propeller_work_output_coefficient/propeller_efficiency) + ((compressor_gamma - 1)/2)*((1 + fuel_to_air_ratio)*((core_exit_velocity/a0))**2 - M0**2))
# Computing the core mass flow
Tref = turboprop.reference_temperature
Pref = turboprop.reference_pressure
mdhc = turboprop.compressor_nondimensional_massflow
total_temperature_reference = turboprop_conditions.total_temperature_reference
total_pressure_reference = turboprop_conditions.total_pressure_reference
mdot_core = mdhc*np.sqrt(Tref/total_temperature_reference)*(total_pressure_reference/Pref)
# computing the dimensional thrust
FD2 = Fsp*mdot_core*turboprop_conditions.throttle
# fuel flow rate
a = np.array([0.])
fuel_flow_rate = np.fmax(FD2*TSFC/g,a)*1./Units.hour
# computing the power
power = FD2*V0
# pack outputs
turboprop_conditions.thrust = FD2
turboprop_conditions.thrust_specific_fuel_consumption = TSFC
turboprop_conditions.non_dimensional_thrust = Fsp
turboprop_conditions.core_mass_flow_rate = mdot_core
turboprop_conditions.fuel_flow_rate = fuel_flow_rate
turboprop_conditions.power = power
turboprop_conditions.specific_power = W_dot_mdot0
turboprop_conditions.power_specific_fuel_consumption = PSFC
turboprop_conditions.thermal_efficiency = eta_T
turboprop_conditions.propulsive_efficiency = eta_P
return