Performance#
This section evaluates the performance of an airplane based on the given parameters. Specifically, the takeoff, landing, and climb gradient are estimated using the refined methods described in performance section. For takeoff and landing, only the total ground roll is computed since the requirement constraints the ground roll and not the total takeoff/landing distance. Note that cruise speed requirement is evaluated by comparing the available and required cruise power. Below code block defines functions for computing these performance metrics:
import nbimporter
import numpy as np
from parameters import AircraftParameters
from mtow import compute_takeoff_weight
def compute_takeoff_groundroll(parameters: AircraftParameters):
"""
Function to compute takeoff ground roll
"""
# Parameters
S = parameters.S
A = parameters.A
e = parameters.e_takeoff
b = parameters.b
W0 = parameters.MTOW
mu = parameters.mu
h = parameters.Lm # wing height above ground
rho = parameters.rho_sea_level
CD0 = parameters.CD0_takeoff
CLmax_TO = parameters.CLmax_takeoff
P_takeoff = parameters.P_takeoff # total takeoff power, hp
prop_eff = 0.8
install_loss_factor = parameters.install_loss_factor
# Computed
W = parameters.W1_W0 * W0
CL = 0.1 # Raymer recommendation
wing_loading = W/S
Vto = 1.1 * ( wing_loading * 2 / rho / CLmax_TO )**0.5 # ft/s
T = 550 * P_takeoff * prop_eff / 0.707 / Vto # T at avg V
T = install_loss_factor * T # installation loss
T_avg = T # lbs
# K in drag model, accounting for ground effect
K = 1/np.pi/A/e
Keff = K * ( 33 * (h/b)**1.5 / ( 1 + 33 * (h/b)**1.5 ) ) # eq 12.60, Raymer
# Ground roll calculation
KA = rho / 2 / wing_loading * (mu*CL - CD0 - Keff*CL**2)
KT = (T_avg/W) - mu
Sg = np.log( 1 + KA/KT*Vto**2 ) / 2 / parameters.g / KA # ft
Sr = Vto * parameters.t_rotation # ft
return Sg + Sr # ft
def compute_landing_groundroll(parameters: AircraftParameters):
"""
Function to compute landing ground roll
"""
# Parameters
S = parameters.S
A = parameters.A
e = parameters.e_landing
b = parameters.b
W0 = parameters.MTOW
mu = parameters.mu_brakes
h = parameters.Lm # wing height above ground
rho = parameters.rho_sea_level
CD0 = parameters.CD0_landing
CLmax_L = parameters.CLmax_landing
# Computed
W = parameters.W1_W0 * parameters.W2_W1 * W0 # assuming plane has to land just after climbing
CL = 0.1 # Raymer recommendation
wing_loading = W/S
Vtd = 1.15 * ( wing_loading * 2 / rho / CLmax_L )**0.5 # ft/s
# K in drag model, accounting for ground effect
K = 1/np.pi/A/e
Keff = K * ( 33 * (h/b)**1.5 / ( 1 + 33 * (h/b)**1.5 ) ) # eq 12.60, Raymer
# braking distance distance
KT = - mu # zero thrust
KA = rho / 2 / wing_loading * (mu*CL - CD0 - Keff*CL**2)
Sb = np.log( KT / (KT + KA*Vtd**2) ) / 2 / parameters.g / KA
Sfr = Vtd * parameters.t_free_roll # ft
return Sb + Sfr # ft
def compute_climb_gradient(parameters: AircraftParameters):
"""
Function to compute climb gradient. Note that only the OEI requirement
is used since it the driving climb gradient constraint
"""
# Parameters
A = parameters.A
S = parameters.S
e = parameters.e
prop_eff = parameters.prop_eff_cruise
CLmax = parameters.CLmax
CD0 = parameters.CD0
W0 = parameters.MTOW
P_takeoff = parameters.P_takeoff
prop_area = parameters.prop_area
# Calculations
rho_5000 = 0.00204834 # slugs/cu ft, at 5000 ft
sigma = rho_5000 / parameters.rho_sea_level
CL = CLmax - 0.2 # 0.2 is safety margin
K = 1/np.pi/A/e
CD0_prop = 0.1 * sigma * prop_area / S
CD0 += CD0_prop
L_by_D = CL / (CD0 + K*CL**2)
W = parameters.W2_W1 * parameters.W1_W0 * W0
P_cruise = P_takeoff/2 * (sigma - (1-sigma)/7.75) # max power at cruising altitude
CGR = 18.97 * prop_eff * (sigma*CL)**0.5 / (W/P_cruise) / (W/S)**0.5 - 1/L_by_D
return CGR
Below code block shows how to use the above defined functions and evaluate performance of an airplane:
# Parameters
A = 8
wing_loading = 40 # lbs/sq ft
power_loading = 9.25 # lbs/hp
# Compute MTOW
MTOW, final_parameters = compute_takeoff_weight(wing_loading, power_loading, A)
final_parameters.MTOW = MTOW
nb = final_parameters.num_blades
blade_loading = final_parameters.blade_loading
final_parameters.prop_dia = ( 4 * final_parameters.P_takeoff / final_parameters.num_engines / final_parameters.PI / final_parameters.num_blades / final_parameters.blade_loading)**0.5 # ft
final_parameters.prop_area = final_parameters.PI * final_parameters.prop_dia**2 / 4
# Evaluate performance
tgr = compute_takeoff_groundroll(final_parameters)
lgr = compute_landing_groundroll(final_parameters)
cgr_oei = compute_climb_gradient(final_parameters)
print(f"Takeoff ground roll: {tgr:.0f} ft")
print(f"Landing ground roll: {lgr:.0f} ft")
print(f"CGR in OEI condition: {cgr_oei:.4f}")
Takeoff ground roll: 1102 ft
Landing ground roll: 743 ft
CGR in OEI condition: 0.0206
This concludes the performance evaluation and code setup section. The next section performs trade studies using the functions defined in this and previous sections.