Initial sizing

The aim of the initial sizing is to come up with a design which is light, performs well, and is inexpensive to manufacture and operate.

A popular method for initial sizing is the so called constraint analysis method. The method can be used to asses the required wing area and power for an aircraft such that the aircraft meets all performance requirements.

The performance requirements are defined by mathematical expressions of the following form:

P/W for a level, constant-velocity turn

P/W for a desired rate of climb

P/W for a desired cruise airspeed

P/W for a desired takeoff distance

P/W for a best range

P/W for best endurance

CLmax for desired stall speed

The expressions above depend on the following parameters:

When performing initial sizing it is difficult to determine the values for the above parameters. After all we haven't even started designing the aircraft! You have probably guessed already - aircraft design is an iterative process.

Example

Please refer to the Python code below which plots the constraint analysis for specific combination of parameters.

import math
import matplotlib.pyplot as plt
import numpy as np


k=0.0593
CD0=0.0181
eta=0.6
m=20
S=3.2200
V_turn=25
V_cruise=25
V_climb=20
ROC=10
ROC_ceiling=0.5
CL_CD0=0.2784
CL_max=1.7
rho=1.1116
rho_takeoff=1.225
rho_ceiling=0.8191
g=9.80665
phi=math.radians(30)
n=1/math.cos(phi)
S_takeoff=50
Cf_takeoff=0.025

N=100
wss = np.linspace(1,30,N)
pw_turn = np.zeros(N)
pw_climb = np.zeros(N)
pw_cruise = np.zeros(N)
pw_takeoff = np.zeros(N)
pw_ceiling = np.zeros(N)
pw_endurance = np.zeros(N)
pw_range = np.zeros(N)

i=0
for ws in wss:

    #Turn
    q=1/2*rho*V_turn**2
    pw_turn[i]=q*(CD0/(ws*g)+k*(n/q)**2*ws*g)*V_turn/eta*g
    P_turn = pw_turn[i] * m

    #Climb
    q=1/2*rho*V_climb**2
    pw_climb[i]=(ROC/V_climb+q/(ws*g)*CD0+k/q*ws*g)*V_climb/eta*g
    P_climb = pw_climb[i] * m

    #Cruise
    q=1/2*rho*V_cruise**2
    pw_cruise[i]=(q*CD0*(1/(ws*g))+k*(1/q)*ws*g)*V_cruise/eta*g
    P_cruise = pw_cruise[i] * m

    #Takeoff
    V_stall=math.sqrt(2/(rho_takeoff*CL_max)*ws*g)
    V_takeoff=1.1*V_stall

    CL_takeoff = 0.8*CL_max
    CD_takeoff = CD0 + k*(CL_takeoff-CL_CD0)**2

    q=1/2*rho_takeoff*(0.7*V_takeoff)**2
    pw_takeoff[i]=(V_takeoff**2/(2*g*S_takeoff)+q*CD_takeoff/(ws*g)+Cf_takeoff*(1-(q*CL_takeoff)/(ws*g)))*V_takeoff/eta*g
    P_takeoff=pw_takeoff[i] * m

    #Ceiling
    pw_ceiling[i]=(ROC_ceiling/math.sqrt(2/rho_ceiling*ws*g*math.sqrt(k/(3*CD0)))+4*math.sqrt((k*CD0)/3))*V_climb/eta*g
    P_cng=pw_ceiling[i]*m

    #Best endurance
    V_endurance = math.sqrt(2 * g * ws * math.sqrt(k / (3*CD0)) / rho)
    q = 1/2 * rho * V_endurance**2
    pw_endurance[i] = (q*CD0/(ws*g)+k/q*ws*g)*V_endurance/eta*g
    P_endurance = pw_endurance[i] * m

    #Best range
    V_range = math.sqrt(2 * g * ws * math.sqrt(k / CD0) / rho)
    q = 1/2 * rho * V_range**2
    pw_range[i] = (q*CD0/(ws*g)+k/q*ws*g)*V_range/eta*g
    P_range = pw_range[i] * m

    i=i+1

plt.figure()
plt.plot(wss,pw_cruise,label='Cruise')
plt.plot(wss,pw_climb,label='Climb')
plt.plot(wss,pw_turn,label='Turn')
plt.plot(wss,pw_endurance,label='Endurance')
plt.plot(wss,pw_range,label='Range')
plt.plot(wss,pw_ceiling,label='Ceiling')
plt.plot(wss,pw_takeoff,label='Takeoff')
plt.title('Constraints')
plt.legend()
plt.xlabel('Wing loading (kg/m^2)')
plt.ylabel('Power loading (W/kg)')
plt.show()

Last updated