Source code for RCAIDE.Library.Methods.Powertrain.Propulsors.Turbofan.compute_turbofan_performance

# RCAIDE/Methods/Energy/Propulsors/Turbofan/compute_turbofan_performance.py
# 
# 
# Created:  Jul 2024, RCAIDE Team

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ----------------------------------------------------------------------------------------------------------------------
# RCAIDE imports  
from RCAIDE.Framework.Core import Data   
from RCAIDE.Library.Methods.Powertrain.Converters.Ram                  import compute_ram_performance
from RCAIDE.Library.Methods.Powertrain.Converters.Combustor            import compute_combustor_performance
from RCAIDE.Library.Methods.Powertrain.Converters.Compressor           import compute_compressor_performance
from RCAIDE.Library.Methods.Powertrain.Converters.Fan                  import compute_fan_performance
from RCAIDE.Library.Methods.Powertrain.Converters.Turbine              import compute_turbine_performance
from RCAIDE.Library.Methods.Powertrain.Converters.Expansion_Nozzle     import compute_expansion_nozzle_performance 
from RCAIDE.Library.Methods.Powertrain.Converters.Compression_Nozzle   import compute_compression_nozzle_performance
from RCAIDE.Library.Methods.Powertrain.Propulsors.Turbofan             import compute_thrust

import  numpy as  np
from copy import  deepcopy

# ----------------------------------------------------------------------------------------------------------------------
# compute_performance
# ----------------------------------------------------------------------------------------------------------------------   
[docs] def compute_turbofan_performance(turbofan, state, center_of_gravity=[[0.0, 0.0, 0.0]]): """ Computes the performance of a turbofan engine by analyzing the thermodynamic cycle. Parameters ---------- turbofan : RCAIDE.Library.Components.Propulsors.Turbofan Turbofan engine component with the following attributes: - tag : str Identifier for the turbofan - working_fluid : Data Working fluid properties object - ram : Data Ram component - tag : str Identifier for the ram - inlet_nozzle : Data Inlet nozzle component - tag : str Identifier for the inlet nozzle - fan : Data Fan component - tag : str Identifier for the fan - design_angular_velocity : float Design angular velocity [rad/s] - low_pressure_compressor : Data Low pressure compressor component - tag : str Identifier for the low pressure compressor - motor : Data, optional Electric motor component - generator : Data, optional Electric generator component - design_angular_velocity : float Design angular velocity [rad/s] - high_pressure_compressor : Data High pressure compressor component - tag : str Identifier for the high pressure compressor - design_angular_velocity : float Design angular velocity [rad/s] - combustor : Data Combustor component - tag : str Identifier for the combustor - fuel_data : Data Fuel properties - specific_energy : float Fuel specific energy [J/kg] - high_pressure_turbine : Data High pressure turbine component - tag : str Identifier for the high pressure turbine - low_pressure_turbine : Data Low pressure turbine component - tag : str Identifier for the low pressure turbine - core_nozzle : Data Core nozzle component - tag : str Identifier for the core nozzle - fan_nozzle : Data Fan nozzle component - tag : str Identifier for the fan nozzle - bypass_ratio : float Bypass ratio of the turbofan - 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)] - origin : list of lists Origin coordinates [[x, y, z]] [m] state : RCAIDE.Framework.Mission.Common.State State object containing: - conditions : Data Flight conditions - freestream : Data Freestream properties - velocity : numpy.ndarray Freestream velocity [m/s] - temperature : numpy.ndarray Freestream temperature [K] - pressure : numpy.ndarray Freestream pressure [Pa] - noise : Data Noise conditions - propulsors : dict Propulsor noise conditions indexed by tag - energy : Data Energy conditions - propulsors : dict Propulsor energy conditions indexed by tag - converters : dict Converter energy conditions indexed by tag - hybrid_power_split_ratio : float Ratio of power split for hybrid systems - numerics : Data Numerical properties - time : Data Time properties - differentiate : list List of differentiation methods - ones_row : function Function to create array of ones with specified length center_of_gravity : list of lists, optional Center of gravity coordinates [[x, y, z]] [m] Default: [[0.0, 0.0, 0.0]] Returns ------- thrust_vector : numpy.ndarray Thrust force vector [N] moment : numpy.ndarray Moment vector [N·m] power : numpy.ndarray Shaft power output [W] power_elec : numpy.ndarray Electrical power input/output [W] stored_results_flag : bool Flag indicating if results are stored stored_propulsor_tag : str Tag of the turbofan with stored results Notes ----- This function computes the performance of a turbofan engine by sequentially analyzing each component in the engine's thermodynamic cycle. It links the output conditions of each component to the input conditions of the next component in the flow path. The function follows this sequence: 1. Set working fluid properties 2. Compute ram performance 3. Compute inlet nozzle performance 4. Compute fan performance 5. Compute low pressure compressor performance 6. Compute high pressure compressor performance 7. Compute combustor performance 8. Compute high pressure turbine performance 9. Compute low pressure turbine performance 10. Compute core nozzle performance 11. Compute fan nozzle performance 12. Compute thrust and power output 13. Calculate efficiencies 14. Handle electrical power generation/consumption if applicable **Major Assumptions** * Steady state operation * One-dimensional flow through components * Adiabatic components except for the combustor * Perfect gas behavior with variable properties References ---------- [1] Mattingly, J.D., "Elements of Gas Turbine Propulsion", 2nd Edition, AIAA Education Series, 2005. https://soaneemrana.org/onewebmedia/ELEMENTS%20OF%20GAS%20TURBINE%20PROPULTION2.pdf [2] Cantwell, B., "AA283 Course Notes", Stanford University. https://web.stanford.edu/~cantwell/AA283_Course_Material/ See Also -------- RCAIDE.Library.Methods.Powertrain.Propulsors.Turbofan.compute_thurst """ conditions = state.conditions noise_conditions = conditions.noise.propulsors[turbofan.tag] turbofan_conditions = conditions.energy.propulsors[turbofan.tag] U0 = conditions.freestream.velocity T = conditions.freestream.temperature P = conditions.freestream.pressure ram = turbofan.ram inlet_nozzle = turbofan.inlet_nozzle fan = turbofan.fan low_pressure_compressor = turbofan.low_pressure_compressor high_pressure_compressor = turbofan.high_pressure_compressor combustor = turbofan.combustor high_pressure_turbine = turbofan.high_pressure_turbine low_pressure_turbine = turbofan.low_pressure_turbine core_nozzle = turbofan.core_nozzle fan_nozzle = turbofan.fan_nozzle bypass_ratio = turbofan.bypass_ratio # unpack component conditions ram_conditions = conditions.energy.converters[ram.tag] inlet_nozzle_conditions = conditions.energy.converters[inlet_nozzle.tag] fan_conditions = conditions.energy.converters[fan.tag] lpc_conditions = conditions.energy.converters[low_pressure_compressor.tag] hpc_conditions = conditions.energy.converters[high_pressure_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] core_nozzle_conditions = conditions.energy.converters[core_nozzle.tag] fan_nozzle_conditions = conditions.energy.converters[fan_nozzle.tag] # Set the working fluid to determine the fluid properties ram.working_fluid = turbofan.working_fluid # Flow through the ram , this computes the necessary flow quantities and stores it into conditions compute_ram_performance(ram,conditions) # Link inlet nozzle to ram inlet_nozzle_conditions.inputs.stagnation_temperature = ram_conditions.outputs.stagnation_temperature inlet_nozzle_conditions.inputs.stagnation_pressure = ram_conditions.outputs.stagnation_pressure inlet_nozzle_conditions.inputs.static_temperature = ram_conditions.outputs.static_temperature inlet_nozzle_conditions.inputs.static_pressure = ram_conditions.outputs.static_pressure inlet_nozzle_conditions.inputs.mach_number = ram_conditions.outputs.mach_number inlet_nozzle.working_fluid = ram.working_fluid # Flow through the inlet nozzle compute_compression_nozzle_performance(inlet_nozzle,conditions) # Link the fan to the inlet nozzle fan_conditions.inputs.stagnation_temperature = inlet_nozzle_conditions.outputs.stagnation_temperature fan_conditions.inputs.stagnation_pressure = inlet_nozzle_conditions.outputs.stagnation_pressure fan_conditions.inputs.static_temperature = inlet_nozzle_conditions.outputs.static_temperature fan_conditions.inputs.static_pressure = inlet_nozzle_conditions.outputs.static_pressure fan_conditions.inputs.mach_number = inlet_nozzle_conditions.outputs.mach_number fan.working_fluid = turbofan.working_fluid # Flow through the fan compute_fan_performance(fan,conditions) # Link low pressure compressor to the inlet nozzle lpc_conditions.inputs.stagnation_temperature = fan_conditions.outputs.stagnation_temperature lpc_conditions.inputs.stagnation_pressure = fan_conditions.outputs.stagnation_pressure lpc_conditions.inputs.static_temperature = fan_conditions.outputs.static_temperature lpc_conditions.inputs.static_pressure = fan_conditions.outputs.static_pressure lpc_conditions.inputs.mach_number = fan_conditions.outputs.mach_number low_pressure_compressor.working_fluid = turbofan.working_fluid low_pressure_compressor.nondimensional_massflow = turbofan.compressor_nondimensional_massflow low_pressure_compressor.reference_temperature = turbofan.reference_temperature low_pressure_compressor.reference_pressure = turbofan.reference_pressure # Flow through the low pressure compressor compute_compressor_performance(low_pressure_compressor,conditions) # Link the high pressure compressor to the low pressure compressor hpc_conditions.inputs.stagnation_temperature = lpc_conditions.outputs.stagnation_temperature hpc_conditions.inputs.stagnation_pressure = lpc_conditions.outputs.stagnation_pressure hpc_conditions.inputs.static_temperature = lpc_conditions.outputs.static_temperature hpc_conditions.inputs.static_pressure = lpc_conditions.outputs.static_pressure hpc_conditions.inputs.mach_number = lpc_conditions.outputs.mach_number high_pressure_compressor.working_fluid = low_pressure_compressor.working_fluid high_pressure_compressor.nondimensional_massflow = turbofan.compressor_nondimensional_massflow high_pressure_compressor.reference_temperature = turbofan.reference_temperature high_pressure_compressor.reference_pressure = turbofan.reference_pressure # Flow through the high pressure compressor compute_compressor_performance(high_pressure_compressor,conditions) # Link the combustor to the high pressure compressor combustor_conditions.inputs.stagnation_temperature = hpc_conditions.outputs.stagnation_temperature combustor_conditions.inputs.stagnation_pressure = hpc_conditions.outputs.stagnation_pressure combustor_conditions.inputs.static_temperature = hpc_conditions.outputs.static_temperature combustor_conditions.inputs.static_pressure = hpc_conditions.outputs.static_pressure combustor_conditions.inputs.mach_number = hpc_conditions.outputs.mach_number combustor.working_fluid = high_pressure_compressor.working_fluid # Flow through the high pressor compressor compute_combustor_performance(combustor,conditions) # Link the high pressure turbine to the combustor hpt_conditions.inputs.stagnation_temperature = combustor_conditions.outputs.stagnation_temperature hpt_conditions.inputs.stagnation_pressure = combustor_conditions.outputs.stagnation_pressure hpt_conditions.inputs.fuel_to_air_ratio = combustor_conditions.outputs.fuel_to_air_ratio hpt_conditions.inputs.static_temperature = combustor_conditions.outputs.static_temperature hpt_conditions.inputs.static_pressure = combustor_conditions.outputs.static_pressure hpt_conditions.inputs.mach_number = combustor_conditions.outputs.mach_number hpt_conditions.inputs.compressor = hpc_conditions.outputs hpt_conditions.inputs.fan = fan_conditions.outputs hpt_conditions.inputs.bypass_ratio = 0.0 #set to zero to ensure that fan not linked here high_pressure_turbine.working_fluid = combustor.working_fluid # Flow through the high pressure turbine compute_turbine_performance(high_pressure_turbine,conditions) # Link the low pressure turbine to the high pressure turbine lpt_conditions.inputs.stagnation_temperature = hpt_conditions.outputs.stagnation_temperature lpt_conditions.inputs.stagnation_pressure = hpt_conditions.outputs.stagnation_pressure lpt_conditions.inputs.static_temperature = hpt_conditions.outputs.static_temperature lpt_conditions.inputs.static_pressure = hpt_conditions.outputs.static_pressure lpt_conditions.inputs.mach_number = hpt_conditions.outputs.mach_number lpt_conditions.inputs.compressor = lpc_conditions.outputs lpt_conditions.inputs.fuel_to_air_ratio = combustor_conditions.outputs.fuel_to_air_ratio lpt_conditions.inputs.fan = fan_conditions.outputs lpt_conditions.inputs.bypass_ratio = bypass_ratio low_pressure_turbine.working_fluid = high_pressure_turbine.working_fluid # Flow through the low pressure turbine compute_turbine_performance(low_pressure_turbine,conditions) # Link the core nozzle to the low pressure turbine core_nozzle_conditions.inputs.stagnation_temperature = lpt_conditions.outputs.stagnation_temperature core_nozzle_conditions.inputs.stagnation_pressure = lpt_conditions.outputs.stagnation_pressure core_nozzle_conditions.inputs.static_temperature = lpt_conditions.outputs.static_temperature core_nozzle_conditions.inputs.static_pressure = lpt_conditions.outputs.static_pressure core_nozzle_conditions.inputs.mach_number = lpt_conditions.outputs.mach_number core_nozzle.working_fluid = turbofan.working_fluid # Flow through the core nozzle compute_expansion_nozzle_performance(core_nozzle,conditions) # Link the dan nozzle to the fan fan_nozzle_conditions.inputs.stagnation_temperature = fan_conditions.outputs.stagnation_temperature fan_nozzle_conditions.inputs.stagnation_pressure = fan_conditions.outputs.stagnation_pressure fan_nozzle_conditions.inputs.static_temperature = fan_conditions.outputs.static_temperature fan_nozzle_conditions.inputs.static_pressure = fan_conditions.outputs.static_pressure fan_nozzle_conditions.inputs.mach_number = fan_conditions.outputs.mach_number fan_nozzle.working_fluid = turbofan.working_fluid # Flow through the fan nozzle compute_expansion_nozzle_performance(fan_nozzle,conditions) # Link the thrust component to the fan nozzle turbofan_conditions.fan_nozzle_exit_velocity = fan_nozzle_conditions.outputs.velocity turbofan_conditions.fan_nozzle_area_ratio = fan_nozzle_conditions.outputs.area_ratio turbofan_conditions.fan_nozzle_static_pressure = fan_nozzle_conditions.outputs.static_pressure turbofan_conditions.core_nozzle_area_ratio = core_nozzle_conditions.outputs.area_ratio turbofan_conditions.core_nozzle_static_pressure = core_nozzle_conditions.outputs.static_pressure turbofan_conditions.core_nozzle_exit_velocity = core_nozzle_conditions.outputs.velocity # Link the thrust component to the combustor turbofan_conditions.fuel_to_air_ratio = combustor_conditions.outputs.fuel_to_air_ratio # Link the thrust component to the low pressure compressor turbofan_conditions.total_temperature_reference = lpc_conditions.outputs.stagnation_temperature turbofan_conditions.total_pressure_reference = lpc_conditions.outputs.stagnation_pressure turbofan_conditions.bypass_ratio = bypass_ratio turbofan_conditions.flow_through_core = 1./(1.+bypass_ratio) #scaled constant to turn on core thrust computation turbofan_conditions.flow_through_fan = bypass_ratio/(1.+bypass_ratio) #scaled constant to turn on fan thrust computation # Compute the thrust compute_thrust(turbofan,conditions) # Compute forces and moments moment_vector = 0*state.ones_row(3) thrust_vector = 0*state.ones_row(3) thrust_vector[:,0] = turbofan_conditions.thrust[:,0] center_of_gravity = [[0.0, 0.0,0.0]] moment_vector[:,0] = turbofan.origin[0][0] - center_of_gravity[0][0] moment_vector[:,1] = turbofan.origin[0][1] - center_of_gravity[0][1] moment_vector[:,2] = turbofan.origin[0][2] - center_of_gravity[0][2] M = np.cross(moment_vector, thrust_vector) moment = M power = turbofan_conditions.power turbofan_conditions.moment = moment # compute efficiencies mdot_air_core = turbofan_conditions.core_mass_flow_rate mdot_air_fan = bypass_ratio * mdot_air_core fuel_enthalpy = combustor.fuel_data.specific_energy mdot_fuel = turbofan_conditions.fuel_flow_rate h_e_f = fan_nozzle_conditions.outputs.static_enthalpy h_e_c = core_nozzle_conditions.outputs.static_enthalpy h_0 = turbofan.working_fluid.compute_cp(T,P) * T h_t4 = combustor_conditions.outputs.stagnation_enthalpy h_t3 = hpc_conditions.outputs.stagnation_enthalpy turbofan_conditions.overall_efficiency = thrust_vector* U0 / (mdot_fuel * fuel_enthalpy) turbofan_conditions.thermal_efficiency = 1 - ((mdot_air_core + mdot_fuel)*(h_e_c - h_0) + mdot_air_fan*(h_e_f - h_0) + mdot_fuel *h_0)/((mdot_air_core + mdot_fuel)*h_t4 - mdot_air_core *h_t3) # compute shaft RPMs fan_conditions.omega = fan.design_angular_velocity * turbofan_conditions.throttle lpc_conditions.omega = low_pressure_compressor.design_angular_velocity * turbofan_conditions.throttle hpc_conditions.omega = high_pressure_compressor.design_angular_velocity * turbofan_conditions.throttle # compute electrical power if generated/supplied power_elec = 0*state.ones_row(1) if low_pressure_compressor.motor != None and len(state.numerics.time.differentiate) > 0: compressor_motor_conditions = conditions.energy.converters[low_pressure_compressor.motor.tag] compressor_motor_conditions.outputs.power = power *conditions.energy.hybrid_power_split_ratio compressor_motor_conditions.outputs.omega = lpc_conditions.omega compressor_motor_conditions.outputs.torque = compressor_motor_conditions.outputs.power / compressor_motor_conditions.outputs.omega power_elec = compressor_motor_conditions.outputs.power if low_pressure_compressor.generator != None and len(state.numerics.time.differentiate) > 0: compressor_generator_conditions = conditions.energy.converters[low_pressure_compressor.generator.tag] compressor_generator_conditions.inputs.power = power *conditions.energy.hybrid_power_split_ratio compressor_generator_conditions.inputs.omega = lpc_conditions.omega compressor_generator_conditions.outputs.torque = compressor_generator_conditions.outputs.power / compressor_generator_conditions.outputs.omega power_elec = compressor_generator_conditions.inputs.power # store data core_nozzle_res = Data( exit_static_temperature = core_nozzle_conditions.outputs.static_temperature, exit_static_pressure = core_nozzle_conditions.outputs.static_pressure, exit_stagnation_temperature = core_nozzle_conditions.outputs.stagnation_temperature, exit_stagnation_pressure = core_nozzle_conditions.outputs.static_pressure, exit_velocity = core_nozzle_conditions.outputs.velocity ) fan_nozzle_res = Data( exit_static_temperature = fan_nozzle_conditions.outputs.static_temperature, exit_static_pressure = fan_nozzle_conditions.outputs.static_pressure, exit_stagnation_temperature = fan_nozzle_conditions.outputs.stagnation_temperature, exit_stagnation_pressure = fan_nozzle_conditions.outputs.static_pressure, exit_velocity = fan_nozzle_conditions.outputs.velocity ) lpc_res = Data( angular_velocity = fan_conditions.omega, ) noise_conditions.fan_nozzle = fan_nozzle_res noise_conditions.core_nozzle = core_nozzle_res noise_conditions.low_pressure_spool = lpc_res stored_results_flag = True stored_propulsor_tag = turbofan.tag return thrust_vector,moment,power,power_elec,stored_results_flag,stored_propulsor_tag
[docs] def reuse_stored_turbofan_data(turbofan,state,network,stored_propulsor_tag,center_of_gravity= [[0.0, 0.0,0.0]]): '''Reuses results from one turbofan for identical turbofans Assumptions: N/A Source: N/A Inputs: turbofan - turbofan data structure [-] state - operating conditions data structure [-] fuel_line - fuelline [-] total_thrust - thrust of turbofan group [N] total_power - power of turbofan group [W] Outputs: total_thrust - thrust of turbofan group [N] total_power - power of turbofan group [W] Properties Used: N.A. ''' # unpack conditions = state.conditions ram = turbofan.ram inlet_nozzle = turbofan.inlet_nozzle fan = turbofan.fan low_pressure_compressor = turbofan.low_pressure_compressor high_pressure_compressor = turbofan.high_pressure_compressor combustor = turbofan.combustor high_pressure_turbine = turbofan.high_pressure_turbine low_pressure_turbine = turbofan.low_pressure_turbine core_nozzle = turbofan.core_nozzle fan_nozzle = turbofan.fan_nozzle ram_0 = network.propulsors[stored_propulsor_tag].ram inlet_nozzle_0 = network.propulsors[stored_propulsor_tag].inlet_nozzle fan_0 = network.propulsors[stored_propulsor_tag].fan low_pressure_compressor_0 = network.propulsors[stored_propulsor_tag].low_pressure_compressor high_pressure_compressor_0 = network.propulsors[stored_propulsor_tag].high_pressure_compressor combustor_0 = network.propulsors[stored_propulsor_tag].combustor high_pressure_turbine_0 = network.propulsors[stored_propulsor_tag].high_pressure_turbine low_pressure_turbine_0 = network.propulsors[stored_propulsor_tag].low_pressure_turbine core_nozzle_0 = network.propulsors[stored_propulsor_tag].core_nozzle fan_nozzle_0 = network.propulsors[stored_propulsor_tag].fan_nozzle # deep copy results conditions.energy.propulsors[turbofan.tag] = deepcopy(conditions.energy.propulsors[stored_propulsor_tag]) conditions.noise.propulsors[turbofan.tag] = deepcopy(conditions.noise.propulsors[stored_propulsor_tag]) conditions.energy.converters[ram.tag] = deepcopy(conditions.energy.converters[ram_0.tag] ) conditions.energy.converters[inlet_nozzle.tag] = deepcopy(conditions.energy.converters[inlet_nozzle_0.tag] ) conditions.energy.converters[fan.tag] = deepcopy(conditions.energy.converters[fan_0.tag] ) conditions.energy.converters[low_pressure_compressor.tag] = deepcopy(conditions.energy.converters[low_pressure_compressor_0.tag] ) conditions.energy.converters[high_pressure_compressor.tag] = deepcopy(conditions.energy.converters[high_pressure_compressor_0.tag]) conditions.energy.converters[combustor.tag] = deepcopy(conditions.energy.converters[combustor_0.tag] ) conditions.energy.converters[low_pressure_turbine.tag] = deepcopy(conditions.energy.converters[low_pressure_turbine_0.tag] ) conditions.energy.converters[high_pressure_turbine.tag] = deepcopy(conditions.energy.converters[high_pressure_turbine_0.tag] ) conditions.energy.converters[core_nozzle.tag] = deepcopy(conditions.energy.converters[core_nozzle_0.tag] ) conditions.energy.converters[fan_nozzle.tag] = deepcopy(conditions.energy.converters[fan_nozzle_0.tag] ) # compute moment moment_vector = 0*state.ones_row(3) thrust_vector = 0*state.ones_row(3) thrust_vector[:,0] = conditions.energy.propulsors[turbofan.tag].thrust[:,0] moment_vector[:,0] = turbofan.origin[0][0] - center_of_gravity[0][0] moment_vector[:,1] = turbofan.origin[0][1] - center_of_gravity[0][1] moment_vector[:,2] = turbofan.origin[0][2] - center_of_gravity[0][2] moment = np.cross(moment_vector,thrust_vector) power = conditions.energy.propulsors[turbofan.tag].power conditions.energy.propulsors[turbofan.tag].moment = moment power_elec = 0*state.ones_row(1) if low_pressure_compressor.motor != None and len(state.numerics.time.differentiate) > 0: conditions.energy.converters[low_pressure_compressor.motor.tag] = deepcopy(conditions.energy.converters[low_pressure_compressor_0.motor.tag]) power_elec = conditions.energy.converters[low_pressure_compressor.motor.tag].outputs.power if low_pressure_compressor.generator != None and len(state.numerics.time.differentiate) > 0: conditions.energy.converters[low_pressure_compressor.generator.tag] = deepcopy(conditions.energy.converters[low_pressure_compressor_0.generator.tag]) power_elec = conditions.energy.converters[low_pressure_compressor.generator.tag].inputs.power return thrust_vector,moment,power, power_elec