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 DLR's Emission Correction Model.
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