Turbofan Modeling Tutorial

This tutorial describes how the energy network framework in SUAVE can be used to build a model of a turbofan engine. Once this is clear to the user, understanding the setup of the other gasturbine models, the ducted fan and the turbojet will be much easier. The turbofan model is built with several turbofan components as its building blocks. These are then linked together through their inputs and outputs. The script to follow is the tut_mission_B737.py script that was used in the Boeing 737-800 Analysis Tutorial

Setting up the Turbofan model

First the turbofan energy network is instantiated. The parameters associated with the network as a whole are assigned.

# ------------------------------------------------------------------
#   Turbofan Network
# ------------------------------------------------------------------    

turbofan = SUAVE.Components.Energy.Networks.Turbofan()
# For some methods, the 'turbofan' tag is still necessary. This will be changed in the
# future to allow arbitrary tags.
turbofan.tag = 'turbofan'

# High-level setup
turbofan.number_of_engines = 2
turbofan.bypass_ratio      = 5.4
turbofan.engine_length     = 2.71 * Units.meter
turbofan.nacelle_diameter  = 2.05 * Units.meter
turbofan.origin            = [[13.72, 4.86,-1.9],[13.72, -4.86,-1.9]] * Units.meter

# Approximate the wetted area
turbofan.areas.wetted      = 1.1*np.pi*turbofan.nacelle_diameter*turbofan.engine_length

# Establish the correct working fluid
turbofan.working_fluid = SUAVE.Attributes.Gases.Air()

Then the different components are added

Components

The basic components used to model the turbofan are described below.

Ram

The ‘Ram’ component is used to convert the freestream quantities that are passed into the turbofan network into stagnation quantities. As the turbofan network is based on a 1D gasdynamic analysis, most of the energy transfer across the different components are modelled as changes in the stagnation quantities. Thus the Ram component acts as a preprocessor, converting the input conditions into quantities required by the network.

# ------------------------------------------------------------------
#   Component 1 - Ram

# Converts freestream static to stagnation quantities
ram = SUAVE.Components.Energy.Converters.Ram()
ram.tag = 'ram'

# add to the network
turbofan.append(ram)

Nozzle

The ‘Nozzle’ component is used to model the inlet diffuser, the outlet fan, and the compressor nozzles as shown below.

# ------------------------------------------------------------------
# ------------------------------------------------------------------
#  Component 2 - Inlet Nozzle

# Create component
inlet_nozzle = SUAVE.Components.Energy.Converters.Compression_Nozzle()
inlet_nozzle.tag = 'inlet_nozzle'

# Specify performance
inlet_nozzle.polytropic_efficiency = 0.98
inlet_nozzle.pressure_ratio        = 0.98

# Add to network
turbofan.append(inlet_nozzle)


# ------------------------------------------------------------------
#  Component 8 - Core Nozzle

# Create component
nozzle = SUAVE.Components.Energy.Converters.Expansion_Nozzle()   
nozzle.tag = 'core_nozzle'

# Specify performance
nozzle.polytropic_efficiency = 0.95
nozzle.pressure_ratio        = 0.99    

# Add to network
turbofan.append(nozzle)


# ------------------------------------------------------------------
#  Component 9 - Fan Nozzle

# Create component
nozzle = SUAVE.Components.Energy.Converters.Expansion_Nozzle()   
nozzle.tag = 'fan_nozzle'

# Specify performance
nozzle.polytropic_efficiency = 0.95
nozzle.pressure_ratio        = 0.99    

# Add to network
turbofan.append(nozzle)

Compressor

Two compressors are used in the turbofan model, a low and a high pressure compressor.

# ------------------------------------------------------------------
# ------------------------------------------------------------------
#  Component 3 - Low Pressure Compressor

# Create component
compressor = SUAVE.Components.Energy.Converters.Compressor()    
compressor.tag = 'low_pressure_compressor'

# Specify performance
compressor.polytropic_efficiency = 0.91
compressor.pressure_ratio        = 1.14    

# Add to network
turbofan.append(compressor)
    

# ------------------------------------------------------------------
#  Component 4 - High Pressure Compressor

# Create component
compressor = SUAVE.Components.Energy.Converters.Compressor()    
compressor.tag = 'high_pressure_compressor'

# Specify performance
compressor.polytropic_efficiency = 0.91
compressor.pressure_ratio        = 13.415    

# Add to network
turbofan.append(compressor)

Fan

A fan component is also added to the network. If you were to model a turbojet, the fan component and the fan nozzle would not be added but all the other components would remain the same.

# ------------------------------------------------------------------
#  Component 10 - Fan

# Create component
fan = SUAVE.Components.Energy.Converters.Fan()   
fan.tag = 'fan'

# Specify performance
fan.polytropic_efficiency = 0.93
fan.pressure_ratio        = 1.7    

# Add to network
turbofan.append(fan)

Combustor

The combustor component is where the fuel-to-air ratio is computed. It is also used to compute the sfc and the thrust later in the network.


# ------------------------------------------------------------------
#  Component 7 - Combustor

# Create component    
combustor = SUAVE.Components.Energy.Converters.Combustor()   
combustor.tag = 'combustor'

# Specify performance
combustor.efficiency                = 0.99 
combustor.alphac                    = 1.0   
combustor.turbine_inlet_temperature = 1450 # K
combustor.pressure_ratio            = 0.95
combustor.fuel_data                 = SUAVE.Attributes.Propellants.Jet_A()    

# Add to network
turbofan.append(combustor)

Turbine

The work done by the fan and the compressors is used to compute the turbine work required. This is used to compute the change in the stagnation quantities across the turbine.

    # ------------------------------------------------------------------
    #  Component 5 - Low Pressure Turbine
    
    # Create component
    turbine = SUAVE.Components.Energy.Converters.Turbine()   
    turbine.tag='low_pressure_turbine'
    
    # Specify performance
    turbine.mechanical_efficiency = 0.99
    turbine.polytropic_efficiency = 0.93     
    
    # Add to network
    turbofan.append(turbine)
      
    # ------------------------------------------------------------------
    #  Component 6 - High Pressure Turbine
    
    # Create component
    turbine = SUAVE.Components.Energy.Converters.Turbine()   
    turbine.tag='high_pressure_turbine'

    # Specify performance
    turbine.mechanical_efficiency = 0.99
    turbine.polytropic_efficiency = 0.93     
    
    # Add to network
    turbofan.append(turbine)  
    

Thrust

The thrust component takes in the initial (inputs of the inlet nozzle) and final (exit of the fan and core exirt nozzles) stagnation quantities of the network and the fuel to air ratio and computes the specific fuel conspumption (sfc) and thrust generated by the network (turbofan engine).


# ------------------------------------------------------------------
#  Component 11 - thrust (to compute the thrust)

thrust = SUAVE.Components.Energy.Processes.Thrust()       
thrust.tag ='compute_thrust'

# Design thrust is used to determine mass flow at full throttle
thrust.total_design             = 2*24000. * Units.N #Newtons

# Add to network
turbofan.thrust = thrust   

Sizing the Turbofan

Once the network is built, it is essential to size the engine with a set of sizing conditions. The sizing function ‘turbofan_sizing’ takes in the model of the turbofan, the mach number, and the altitude for which the turbofan is sized. The sizing thrust is an engine/network property (defined in the ‘Setting up the Turbofan model’ section above). The function takes these quantities and computes the design mass flow rate through the components. Once sized, the network/engine can be added to the vehicle as shown in the B737 tutorial.


# Design sizing conditions are also used to determine mass flow
altitude      = 35000.0*Units.ft
mach_number   = 0.78     

# Determine turbofan behavior at the design condition
turbofan_sizing(turbofan,mach_number,altitude)   

# Add turbofan network to the vehicle 
vehicle.append_component(turbofan)