Source code for RCAIDE.Library.Methods.Powertrain.Propulsors.Turbojet.compute_thurst
# RCAIDE/Methods/Energy/Propulsors/Turbojet/compute_thrust.py
#
#
# Created: Jul 2023, M. Clarke
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
# RCAIDE imports
from RCAIDE.Framework.Core import Units
# Python package imports
import numpy as np
# ----------------------------------------------------------------------------------------------------------------------
# compute_thrust
# ----------------------------------------------------------------------------------------------------------------------
[docs]
def compute_thrust(turbojet,conditions):
"""
Computes thrust and other performance metrics for a turbojet engine.
Parameters
----------
turbojet : RCAIDE.Library.Components.Propulsors.Turbojet
Turbojet engine component with the following attributes:
- tag : str
Identifier for the turbojet
- 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)]
- SFC_adjustment : float
Adjustment factor for specific fuel consumption
conditions : RCAIDE.Framework.Mission.Common.Conditions
Flight conditions with:
- freestream : Data
Freestream properties
- isentropic_expansion_factor : numpy.ndarray
Ratio of specific heats (gamma)
- velocity : numpy.ndarray
Freestream velocity [m/s]
- speed_of_sound : numpy.ndarray
Speed of sound [m/s]
- mach_number : numpy.ndarray
Freestream Mach number
- pressure : numpy.ndarray
Freestream pressure [Pa]
- gravity : numpy.ndarray
Gravitational acceleration [m/s²]
- energy.propulsors[turbojet.tag] : Data
Turbojet-specific conditions
- fuel_to_air_ratio : numpy.ndarray
Fuel-to-air ratio
- total_temperature_reference : numpy.ndarray
Reference total temperature [K]
- total_pressure_reference : numpy.ndarray
Reference total pressure [Pa]
- core_nozzle_exit_velocity : numpy.ndarray
Core nozzle exit velocity [m/s]
- core_nozzle_static_pressure : numpy.ndarray
Core nozzle static pressure [Pa]
- core_nozzle_area_ratio : numpy.ndarray
Core nozzle area ratio
- flow_through_core : numpy.ndarray
Fraction of flow through core
- throttle : numpy.ndarray
Throttle setting [0-1]
Returns
-------
None
Results are stored in conditions.energy.propulsors[turbojet.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
Power output [W]
- specific_impulse : numpy.ndarray
Specific impulse [s]
Notes
-----
This function implements a thermodynamic model for a turbojet engine to calculate
thrust, fuel consumption, and other performance metrics. It uses the outputs from
the core nozzle to determine the overall engine performance.
**Major Assumptions**
* Perfect gas behavior
* Thrust is calculated from momentum and pressure forces at the nozzle exit
**Theory**
The non-dimensional thrust is calculated as:
.. math::
F_{nd} = \\phi_{core} \\cdot (\\gamma \\cdot M_0^2 \\cdot (V_{core}/V_0 - 1) + A_{core} \\cdot (P_{core}/P_0 - 1))
where:
- :math:`\\phi_{core}` is the flow through core fraction
- :math:`\\gamma` is the ratio of specific heats
- :math:`M_0` is the freestream Mach number
- :math:`V_{core}` is the core nozzle exit velocity
- :math:`V_0` is the freestream velocity
- :math:`A_{core}` is the core nozzle area ratio
- :math:`P_{core}` is the core nozzle static pressure
- :math:`P_0` is the freestream pressure
The specific thrust is then:
.. math::
F_{sp} = \\frac{F_{nd}}{\\gamma \\cdot M_0}
References
----------
[1] Cantwell, B., "AA283 Course Notes", Stanford University. https://web.stanford.edu/~cantwell/AA283_Course_Material/
See Also
--------
RCAIDE.Library.Methods.Powertrain.Propulsors.Turbojet.compute_turbojet_performance
RCAIDE.Library.Methods.Powertrain.Propulsors.Turbojet.size_core
"""
# Unpacking from conditions
gamma = conditions.freestream.isentropic_expansion_factor
u0 = conditions.freestream.velocity
a0 = conditions.freestream.speed_of_sound
M0 = conditions.freestream.mach_number
p0 = conditions.freestream.pressure
g = conditions.freestream.gravity
# Unpacking from inputs
Tref = turbojet.reference_temperature
Pref = turbojet.reference_pressure
mdhc = turbojet.compressor_nondimensional_massflow
SFC_adjustment = turbojet.specific_fuel_consumption_reduction_factor
turbojet_conditions = conditions.energy.propulsors[turbojet.tag]
f = turbojet_conditions.fuel_to_air_ratio
total_temperature_reference = turbojet_conditions.total_temperature_reference
total_pressure_reference = turbojet_conditions.total_pressure_reference
core_area_ratio = turbojet_conditions.core_nozzle_area_ratio
V_core_nozzle = turbojet_conditions.core_nozzle_exit_velocity
P_core_nozzle = turbojet_conditions.core_nozzle_static_pressure
flow_through_core = turbojet_conditions.flow_through_core
# Computing the non dimensional thrust
core_thrust_nondimensional = flow_through_core*(gamma*M0*M0*(V_core_nozzle/u0-1.) + core_area_ratio*( P_core_nozzle/p0-1.))
Thrust_nd = core_thrust_nondimensional
# Computing Specifc Thrust
Fsp = 1./(gamma*M0)*Thrust_nd
# Computing the specific impulse
Isp = Fsp*a0/(f*g)
# Computing the TSFC
TSFC = f*g/(Fsp*a0)*(1.-SFC_adjustment) * Units.hour # 1/s is converted to 1/hr here
# Computing the core mass flow
mdot_core = mdhc*np.sqrt(Tref/total_temperature_reference)*(total_pressure_reference/Pref)
# Computing the dimensional thrust
FD2 = Fsp*a0*mdot_core* turbojet_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*u0
# pack outputs
turbojet_conditions.thrust = FD2
turbojet_conditions.thrust_specific_fuel_consumption = TSFC
turbojet_conditions.non_dimensional_thrust = Fsp
turbojet_conditions.core_mass_flow_rate = mdot_core
turbojet_conditions.fuel_flow_rate = fuel_flow_rate
turbojet_conditions.power = power
turbojet_conditions.specific_impulse = Isp
return