The OpenAP provides two modules, drag and thrust, for the calculation of drag force and maximum available thrust force during the flight.

3.1 Compute the aircraft drag

The drag calculation is based on the OpenAP’s drag polar model, which is obtained based on open trajectory data and methodology from the paper: Sun et al. (2020).

Knowing the drag polar coefficients - \(C_{d0}\) (zero-lift drag coefficient) and \(k\) (lift-induced drag coefficient) - of the aircraft, the drag force can be calculated based on the point-mass aircraft performance model:

\[
\begin{aligned}
C_l &= \frac{L}{1/2~\rho v^2 S} = \frac{mg}{1/2~\rho v^2 S} \\
C_d &= C_{d0} + k C_l^2 \\
D &= C_d \cdot \frac{1}{2} \rho v^2 S
\end{aligned}
\]

When an aircraft is climbing and descending, the flight path angle is also considered to calculate the lift force. Hence, by including the vertical speed, the estimation of drag can be different.

An example calculation using the OpenAP’s drag module is:

from openap.drag import Dragtypecode ="A320"mass =62_000# kgTAS =250# ktsALT =20_000# ftVS =1000# ft/mindrag = Drag(ac=typecode)# clean configurationD = drag.clean(mass=mass, tas=TAS, alt=ALT, vs=VS)print(f"""{typecode} at condition: Mass:{mass} TAS:{TAS} ALT:{ALT} VS:{VS}Clean configuration Total drag is {D//1000} kN""")

A320 at condition:
Mass:62000 TAS:250 ALT:20000 VS:1000
Clean configuration
Total drag is 33.0 kN

The drag.clean() function estimates the drag force when the aircraft is at the clean configuration, which means no flaps or landing gear are deployed.

During the initial climb and approach, we can also calculate drag considering flaps (providing the flaps setting angle in degrees) and whether the landing gears are extended.

mass =62_000# kgTAS =150# ktsALT =1000# ftVS =1500# ft/minflap_angle =20# degree# with flaps and landing gearsD = drag.nonclean( mass=mass, tas=TAS, alt=ALT, flap_angle=flap_angle, vs=VS, landing_gear=True,)print(f"""{typecode} at condition: Mass:{mass} TAS:{TAS} ALT:{ALT} VS:{VS}Flap:{flap_angle} deg, Landing Gear extended Total drag is {D//1000} kN""")

A320 at condition:
Mass:62000 TAS:150 ALT:1000 VS:1500
Flap:20 deg, Landing Gear extended
Total drag is 46.0 kN

3.2 Compute maximum aircraft engine thrust

OpenAP implements the engine thrust model proposed by Bartel & Young (2008). Small adjustments to the model was made to improve the computational efficiency.

To calculate the maximum net thrust of an aircraft, we first instantiate the thrust.Thrust object:

from openap.thrust import Thrustthr_a320 = Thrust(ac="A320", eng="CFM56-5B4")

The function Thrust.takeoff() function is used to calculate maximum thrust during the take-off at different speed (kts) and altitude (ft) conditions, for example:

T = thr_a320.takeoff(tas=100, alt=0)print(f"Max thrust: {(T/1000).round(2)} kN")

Max thrust: 200.72 kN

The Thrust.climb() function estimates the maximum net thrust during the climb, which requires TAS (kts), altitude (ft), and rate of climb (ft/min).

An example for A320 climbing at 1000 ft/min at 10,000 ft with TAS 250 kts:

T = thr_a320.climb(tas=250, alt=10000, roc=1000)print(f"Max thrust: {(T/1000).round(2)} kN")

Max thrust: 89.23 kN

The Thrust.cruise() function estimates the maximum net thrust during the cruise at different speeds and altitudes. An example is shown as follows.

T = thr_a320.cruise(tas=300, alt=32000)print(f"Max thrust: {(T/1000).round(2)} kN")

Max thrust: 53.68 kN

3.3 Idle thrust

Furthermore, we can use the Thrust.descent_ide() function to estimate the idle thrust during the descent at different altitude and speed conditions.

The idle thrust is modeled as approximately 7% of the maximum thrust at the same altitude and speed.

An example is shown as follows:

T = thr_a320.descent_idle(tas=250, alt=10000)print(f"Idle thrust: {(T/1000).round(2)} kN")

Idle thrust: 9.31 kN

Bartel, M., & Young, T. M. (2008). Simplified thrust and fuel consumption models for modern two-shaft turbofan engines. Journal of Aircraft, 45(4), 1450–1456.

Sun, J., Hoekstra, J., & Ellerbroek, J. (2020). Estimating aircraft drag polar using open flight surveillance data and a stochastic total energy model. Transportation Research Part C: Emerging Technologies, 114, 391–404. https://doi.org/10.1016/j.trc.2020.01.026