Turboprop aircraft

376 views
Skip to first unread message

Fabio C.

unread,
Sep 30, 2020, 12:02:06 PM9/30/20
to SUAVE FORUM
Dear SUAVE team

I am getting familiar with SUAVE and I have already gone through the mission_B737 tutorial.
I would like to do a similar mission analysis for an ATR 42 type aircraft. For this, I need a turboprop. I am also referring to the regional jet optimization tutorial.

Based on the answers given to older posts, the easiest way to define a turboprop is to assume an efficiency for a propeller at a fixed RPM (Propeller_Lo_Fid).
However, I still do not understand which energy network I should use to power the propeller.

An adaptation of the turbofan seems reasonable to me.
Could you please give me your feedback?

Thank you
Regards
Fabio

Emilio Botero

unread,
Oct 11, 2020, 12:56:36 AM10/11/20
to SUAVE FORUM
Hi Fabio,
I've actually been thinking about this since you posted. It's been a long requested feature. I've started working on it, but it's a little more tricky than I though to get the turbine/shaft/compressor matching right than I thought. I'm going to try to build a turboshaft model and then that can be used more broadly when that's done.

For propeller options, the low fid propeller will work easiest. But the higher fidelity propeller would work with an extra convergence parameter.

Another option is actually to use the internal combustion network. I know some folks would hang me for the thought. But hear me out, it actually is quite a simple model that just requires a power specific fuel consumption and a fuel flow rate. Depending on the accuracy you're looking for this could work quite well.

-Emilio


Fabio C.

unread,
Oct 12, 2020, 8:36:54 AM10/12/20
to SUAVE FORUM
Dear Emilio

Thank you for your reply. I will give a try with the Internal_Combustion_Propeller class.

Fabio

Andrea Spinelli

unread,
Nov 4, 2020, 6:24:32 AM11/4/20
to SUAVE FORUM
Hi Emilio,

I was trying to build up my own energy network to model a Turboprop and I noticed this "convergence parameter" that is mentioned in the code of the solar networks.
How does this work codewise? I suppose the mission solver assumes a RPM and tries to change it to match the shaft power to the propeller power?

What about the shaft off power intake component? Is there a way to connect it to the propeller?
Also what I don't fully understand is why the propeller component doesn't take in a power value but only RPM/Torque. Textbook methods for propeller analysis work with shaft power and just lump all the BEM properties into a propeller efficiency map.

Emilio Botero

unread,
Nov 4, 2020, 9:18:07 PM11/4/20
to SUAVE FORUM
Hi,
Yes, for the solar network it torque matches the motor to the propeller. You're right in thinking you could power match a propeller as well, given RPM and torque you get power. You don't necessarily need a propeller efficiency map, but yes you could build one from the BEMT. Yes, you can pull power off the shaft and it is a prescribed power that is set.

But, turns out with the current frameworks of the low fidelity engine we don't have a throttle condition that works well for partial power of the turbine. Throttling is done this way:

Okay, we know that's non-physical. However, it actually works quite well for turbofan aircraft at the conceptual level (this is our lowest fidelity engine model). The reason it works well is that a turbofan burns the majority of its fuel close to full throttle. When the model is least accurate, it burns very little fuel. We spent considerable time developing a model that matched TASOPT, but we found it is not robust to release widely so it's only used internally and does not have a turboprop. We're also working on an interface to pycycle, but that also does not have a turboprop model.

So, let me summarize what would need to be done. First, the turbomachinery models would need to handle partial power that calculates the shaft power off take rather than it being an input (or have some extra residual that matches another condition to converge it). The turbine as of right now runs with a fixed TT4, so that must be changed to throttle the engine. I believe with some modifications this can all be made to work. However, I just don't have time to dig into literature and code it right now and just make it robust. I could probably easily tell you what the power of a full throttle turboprop could be, but that's probably not helpful in accurately simulating a flight profile.

-Emilio

Andrea Spinelli

unread,
Nov 12, 2020, 1:29:08 PM11/12/20
to SUAVE FORUM
Hi Emilio,

Thank you for your explaination of the inner workings of the turbofan network.
In the meantime I tried using the internal combustion propeller network, but the mission solver doesn't converge, with this error:


Plus the throttle and thrust have unphisical values
Below there's my code for modeling the engine:


    turboprop
= SUAVE.Components.Energy.Networks.Internal_Combustion_Propeller()
   
# For some methods, the 'turbofan' tag is still necessary. This will be changed in the
   
# future to allow arbitrary tags.
    turboprop
.tag = 'turboprop'
   
   
# High-level setup
    turboprop
.number_of_engines = 2
    turboprop
.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]]
   
    ice
= SUAVE.Components.Energy.Converters.Internal_Combustion_Engine()
    ice
.tag ='engine'
    ice
.sea_level_power = 2050 * Units['kW']
    ice
.flat_rate_altitude = 13000 *  Units.ft
    ice
.speed = 1200 * Units['rpm']
    ice
.power_specific_fuel_consumption = 0.506 * Units['lb/hp/h']
   
    turboprop
.engine = ice
   
   
# Design the Propeller
    prop
= SUAVE.Components.Energy.Converters.Propeller()
    prop
.tag = 'propeller'
    prop
.number_blades       = 6
    prop
.freestream_velocity = 300 * Units['kts'] # freestream
    prop
.angular_velocity    = 1200. * Units['rpm']
    prop
.tip_radius          = 1.96 * Units.meters
    prop
.hub_radius          = 0.05 * Units.meters
    prop
.design_Cl           = 0.7
    prop
.design_altitude     = 0 * Units.ft
   
#prop.design_thrust       = None
    prop
.design_power        = 2050 * Units['kW']
    prop                    
= propeller_design(prop)
   
    turboprop
.propeller      = prop
   
   
# Add turbofan network to the vehicle
    vehicle
.append_component(turboprop)      


And the code for the mission definition:

def mission_setup(analyses):
   
"""This function defines the baseline mission that will be flown by the aircraft in order
    to compute performance."""


   
# ------------------------------------------------------------------
   
#   Initialize the Mission
   
# ------------------------------------------------------------------

    mission
= SUAVE.Analyses.Mission.Sequential_Segments()
    mission
.tag = 'the_mission'

   
# Airport
   
# The airport parameters are used in calculating field length and noise. They are not
   
# directly used in mission performance estimation
    airport
= SUAVE.Attributes.Airports.Airport()
    airport
.altitude   =  0.0  * Units.ft
    airport
.delta_isa  =  0.0
    airport
.atmosphere = SUAVE.Attributes.Atmospheres.Earth.US_Standard_1976()

    mission
.airport = airport    

   
# Unpack Segments module
   
Segments = SUAVE.Analyses.Mission.Segments

   
# Base segment
    base_segment
= Segments.Segment()

   
# ------------------------------------------------------------------
   
#   Climb Segment: Constant Speed, Constant Rate
   
# ------------------------------------------------------------------

   
# A constant speed, constant rate climb segment is used first. This means that the aircraft
   
# will maintain a constant airspeed and constant climb rate until it hits the end altitude.
   
# For this type of segment, the throttle is allowed to vary as needed to match required
   
# performance.
    segment
= Segments.Climb.Constant_Speed_Constant_Rate(base_segment)
   
# It is important that all segment tags must be unique for proper evaluation. At the moment
   
# this is not automatically enforced.
    segment
.tag = "climb"

   
# The analysis settings for mission segment are chosen here. These analyses include information
   
# on the vehicle configuration.
    segment
.analyses.extend( analyses.takeoff )

    segment
.altitude_start = 0.0   * Units.ft
    segment
.altitude_end   = 10000   * Units.ft
    segment
.air_speed      = 280 * Units['kts']
    segment
.climb_rate     = 2 *  1.6667  * Units['ft/s']
   
   
# Add to misison
    mission
.append_segment(segment)
   
   
   
# ------------------------------------------------------------------    
   
#   Cruise Segment: Constant Speed, Constant Altitude
   
# ------------------------------------------------------------------    

    segment
= Segments.Cruise.Constant_Speed_Constant_Altitude(base_segment)
    segment
.tag = "cruise"

    segment
.analyses.extend( analyses.cruise )

    segment
.air_speed  = 300 * Units['kts']
    segment
.distance   = 500. * Units.nautical_miles

   
# Add to mission
    mission
.append_segment(segment)

   
# ------------------------------------------------------------------
   
#   First Descent Segment: Constant Speed, Constant Rate
   
# ------------------------------------------------------------------

    segment
= Segments.Descent.Constant_Speed_Constant_Rate(base_segment)
    segment
.tag = "descent"

    segment
.analyses.extend( analyses.cruise )

    segment
.altitude_end = 0.0   * Units.ft
    segment
.air_speed    = 250 * Units['kts']
    segment
.descent_rate = 2 * 1.6667   * Units['ft/s']

   
# Add to mission
    mission
.append_segment(segment)


   
# ------------------------------------------------------------------
   
#   Mission definition complete    
   
# ------------------------------------------------------------------

   
return mission


Hope you can help me, because I tried changing all the design parameters and I can't make it work. The aircraft is an ATR-42, and I used the 737 tutorial file as a template.
I will attach the full python file so you can try it out.
mission test.py

Emilio Botero

unread,
Nov 14, 2020, 5:57:20 PM11/14/20
to SUAVE FORUM
Hi,
I'm still going through this in more detail. But it looks like this vehicle requires a constant speed propeller rather than a fixed pitched propeller. That's something we have available in SUAVE, but not connected with that engine model right now. I'll take a look in detail this weekend and see what I find.

-Emilio

spi...@gmail.com

unread,
Dec 6, 2020, 5:39:52 AM12/6/20
to SUAVE FORUM
Hi Emilio,

Got any updates on the propeller modeling? I honestly couldn't find in the files a Constant speed propeller model.

-Andrea

Emilio Botero

unread,
Dec 7, 2020, 12:43:57 AM12/7/20
to SUAVE FORUM
Hi,
I apologize, this fell by the wayside for a bit and got wrapped in with another fix.

I made a branch with these changes, and made a regression script you can use as an example.

All of these changes will be in the next version of SUAVE.

Enjoy!

-Emilio
Reply all
Reply to author
Forward
0 new messages