Aircraft fuel and emission estimation

OpenAP provides estimation of fuel consumption and emissions based on real flight trajectory data. The models are based extended upon ICAO Aircraft Engine Emissions Databank and Fuel Flow Method2.

Basic usage of the fuel and emission modules

Compute aircraft fuel flow:

from openap import FuelFlow

fuelflow = FuelFlow(ac='A320', eng='CFM56-5B4')

FF = fuelflow.at_thrust(acthr=50000, alt=30000)
FF = fuelflow.takeoff(tas=100, alt=0, throttle=1)
FF = fuelflow.enroute(mass=60000, tas=200, alt=20000, path_angle=3)
FF = fuelflow.enroute(mass=60000, tas=230, alt=32000, path_angle=0)

Compute aircraft emissions:

from openap import FuelFlow, Emission

fuelflow = FuelFlow(ac='A320', eng='CFM56-5B4')
emission = Emission(ac='A320', eng='CFM56-5B4')

TAS = 350
ALT = 30000

FF = fuelflow.enroute(mass=60000, tas=TAS, alt=ALT)   # kg/s

CO2 = emission.co2(FF)                    # g/s
H2O = emission.h2o(FF)                    # g/s
NOx = emission.nox(FF, tas=TAS, alt=ALT)  # g/s
CO = emission.co(FF, tas=TAS, alt=ALT)    # g/s
HC = emission.hc(FF, tas=TAS, alt=ALT)    # g/s

Application to real flight data

import numpy as np
import pandas as pd
import openap
from openap.aero import kts, fpm

actype = "B738"
mass0 = 66300

ff = openap.FuelFlow(actype)

df = pd.read_csv("flight.csv")

path_angles = np.degrees(np.arctan(df.vs * fpm , df.tas * kts))
time_deltas = np.ts.diff(periods=-1)
time_deltas[-1] = time_deltas[-2]

mass = mass0

for (dt, tas, alt, pa) in zip(time_deltas, df.tas, df.alt, path_angles):
    fuelflow = ff.enroute(mass, tas, alt, pa)
    mass -= fuelflow * dt

fuel = mass0 - mass