Emissions Module

The Emission class encapsulates the full calculation of aircraft emissions for a mission:

  • Trajectory emissions (CO₂, H₂O, SO₂, NOₓ, HC, CO, particulate species) for every time step

  • LTO cycle emissions (taxi, approach, climb, takeoff)

  • APU (auxiliary power unit) emissions

  • Ground Service Equipment (GSE) emissions

  • Life-cycle CO₂ additive for fuel production

All results are stored internally in structured NumPy arrays and can be summed.


Usage Example

from AEIC.performance_model import PerformanceModel
from AEIC.trajectories.trajectory import Trajectory
from emissions import Emission

# Initialize performance model & trajectory (user code)
perf = PerformanceModel.from_edb('path/to/config_file.toml')
# Load mission and set trajectory
traj = Trajectory(perf, mission, optimize_traj, iterate_mass)
traj.fly_flight()

# Compute emissions
em = Emission(
    ac_performance=perf,
    trajectory=traj,
    EDB_data=True,
    fuel_file='fuels/conventional_jetA.toml'
)

# Access summed emissions (g)
total = em.summed_emission_g
print("Total CO₂ (g):", total['CO2'])
print("Total NOx (g):", total['NOx'])

Constructor

Emission(
    ac_performance: PerformanceModel,
    trajectory: Trajectory,
    EDB_data: bool,
    fuel_file: str
)

Parameters

Name

Type

Description

ac_performance

PerformanceModel

Aircraft performance object providing climb/cruise/descent and LTO data matrices.

trajectory

Trajectory

Flight trajectory containing altitude, speed, fuel‐mass, and fuel‐flow time series.

EDB_data

bool

If True, uses tabulated EDB emissions; otherwise uses user‐specified LTO settings.

fuel_file

str

Path to TOML file of fuel properties (e.g. CO₂ factors, sulfur content, lifecycle CO₂).

Upon instantiation, the following steps occur:

  1. Fuel TOML is loaded.

  2. Array shapes are initialized based on trajectory lengths and config flags.

  3. Fuel burn per segment is derived from the trajectory’s fuel-mass time-series.

  4. Trajectory, LTO, APU, and GSE emissions are computed.

  5. All sources are summed and life-cycle CO₂ is added.


Attributes

Emission Class Attributes

Name

Type

Description

fuel

dict

Fuel properties loaded from TOML (e.g. EI_CO2, LC_CO2).

Ntot, NClm, NCrz, NDes

int

Total, climb, cruise, and descent time-step counts.

traj_emissions_all

bool

Whether climb/descent uses performance model or LTO data.

pmnvol_mode

str

PM number estimation method (e.g. "SCOPE11").

fuel_burn_per_segment

ndarray

Fuel burned (kg) per time step.

emission_indices

ndarray

Emission indices (g/kg fuel) per species and time step.

pointwise_emissions_g

ndarray

Emissions (g) per time step.

LTO_emission_indices

ndarray

Emission indices for each LTO mode.

LTO_emissions_g

ndarray

Emissions (g) for each LTO mode.

APU_emission_indices

ndarray

APU emission indices (g/kg fuel).

APU_emissions_g

ndarray

APU emissions (g).

GSE_emissions_g

ndarray

GSE emissions (g) per engine-start cycle.

summed_emission_g

ndarray

Total emissions (g) across all sources.


Methods

class emissions.emission.Emission(ac_performance: PerformanceModel, trajectory: Trajectory, EDB_data: bool)

Model for determining and aggregating flight emissions across all mission segments, including cruise trajectory, LTO (Landing and Take-Off), APU, and GSE emissions, as well as lifecycle CO2 adjustments.

get_GSE_emissions(wnsf)

Calculate Ground Service Equipment emissions based on aircraft size/freight type (WNSF).

Parameters:

wnsf (str) – Wide, Narrow, Small, or Freight (‘w’,’n’,’s’,’f’).

get_LTO_emissions(ac_performance, EDB_LTO=True, nvpm_method='SCOPE11')

Compute Landing-and-Takeoff cycle emission indices and quantities.

Parameters:
  • ac_performance (PerformanceModel) – Provides EDB or LTO tabular data for EI values.

  • EDB_LTO (bool, optional) – Use EDB data for LTO (True) or thrust_settings (False).

  • nvpm_method (str, optional) – Method for number-based PM emissions (‘SCOPE11’, ‘foa3’, etc.).

get_trajectory_emissions(trajectory, ac_performance, EDB_data=True)

Calculate emission indices (g/species per kg fuel) for each flight segment.

Parameters:
  • trajectory (Trajectory) – Contains altitudes, speeds, and fuel flows for each time step.

  • ac_performance (PerformanceModel) – Provides EDB or LTO data matrices for EI lookup.

  • EDB_data (bool, optional) – Use tabulated EDB emissions (True) or LTO-mode data (False).

sum_total_emissions()

Aggregate emissions (g) across all sources into summed_emission_g. Sums pointwise trajectory, LTO, APU, and GSE emissions for each species.

emissions.APU_emissions.get_APU_emissions(APU_emission_indices, APU_emissions_g, LTO_emission_indices, APU_data, LTO_noProp, LTO_no2Prop, LTO_honoProp, apu_tim=900)

Calculate APU emissions using time in modes and given APU data.

Parameters:
  • APU_emission_indices (ndarray) – self.APU_emission_indices from Emissions class

  • APU_emissions_g (ndarray) – self.APU_emissions_g from Emissions class

  • LTO_emission_indices (ndarray) – self.LTO_emission_indices from Emissions class

  • APU_data (dict) – dictionary containing fuel flows and EIs of chosen APU

  • LTO_noProp (float) – NOx speciation elements from LTO analysis

  • LTO_no2Prop (float) – NOx speciation elements from LTO analysis

  • LTO_honoProp (float) – NOx speciation elements from LTO analysis

  • apu_time (float) – Time in mode for APU; default value = 900 seconds (Stettler et al. 2011)

Returns:

  • APU_emission_indices (ndarray) – Emissions indicies for APU

  • APU_emissions_g (ndarray) – Emissions in g for APU

  • apu_fuel_burn (float) – kg of fuel burnt by APU

emissions.EI_CO2.EI_CO2(fuel)

Calculate carbon-balanced CO2 emissions index (EI).

Parameters:

fuel (dictionary) – Fuel information (input from toml file)

Returns:

  • CO2EI (ndarray) – CO2 emissions index [g/kg fuel], same shape as HCEI.

  • CO2EInom (float) – Nominal CO2 emissions index (scalar).

  • nvolCarbCont (float) – Non-volatile particulate carbon content fraction.

emissions.EI_H2O.EI_H2O(fuel)

Calculate H2O emissions index (EI).

Parameters:

fuel (dictionary) – Fuel information (input from toml file)

Returns:

H2O_EI – H2O emissions index [g/kg fuel]

Return type:

float

emissions.EI_SOx.EI_SOx(fuel: dict)

Calculate universal SOx emissions indices (SO2EI and SO4EI).

Parameters:

fuel (dictionary) – Fuel information (input from toml file)

Returns:

  • SO2EI (ndarray) – SO2 emissions index [g SO2 per kg fuel]

  • SO4EI (ndarray) – SO4 emissions index [g SO4 per kg fuel]

emissions.EI_HCCO.EI_HCCO(fuelflow_evaluate: ndarray, x_EI_matrix: ndarray, fuelflow_calibrate: ndarray, Tamb: ndarray = array(0.0078125), Pamb: ndarray = array(5.e-324), cruiseCalc: bool = False) ndarray

BFFM2 bilinear HC/CO fit to SLS data

Parameters:
  • fuelflow_evaluate (ndarray, shape (n_points,)) – Fuel flows [kg/s] at which to compute xEI. Must be 1D.

  • x_EI_matrix (ndarray, shape (4,)) – Baseline emission indices [g x / kg fuel] at four calibration fuel‐flow points.

  • fuelflow_calibrate (ndarray, shape (4,)) – Calibration fuel flows [kg/s] corresponding to x_EI_matrix

  • cruiseCalc (bool) – If True, apply cruise correction (ambient T and P) to the final xEI.

  • Tamb (ndarray, shape (n_points,)) – Ambient temperature [K] for cruise correction (if cruiseCalc is True).

  • Pamb (ndarray, shape (n_points,)) – Ambient pressure [Pa] for cruise correction (if cruiseCalc is True).

Returns:

xEI – The HC+CO emission index [g x / kg fuel] at each fuelflow_evaluate.

Return type:

ndarray, shape (n_points,)

emissions.EI_NOx.BFFM2_EINOx(sls_equiv_fuel_flow: ndarray, NOX_EI_matrix: ndarray, fuelflow_performance: ndarray, Tamb: ndarray, Pamb: ndarray, cruiseCalc: bool = True) tuple[ndarray, ndarray, ndarray, ndarray, ndarray, ndarray, ndarray]

Calculate NOx, NO, NO2, and HONO emission indices All inputs are 1-dimensional arrays of equal length for calibration (fuelflow_KGperS vs. NOX_EI_matrix) and 1-dimensional for SLS_equivalent_fuel_flow (multiple evaluation points).

Parameters:
  • fuelflow_trajectory (ndarray, shape (n_times,)) – Fuel flow at which to compute EI.

  • NOX_EI_matrix (ndarray, shape (n_cal,)) – Baseline NOx EI values [g NOx / kg fuel] corresponding to calibration fuel flows.

  • fuelflow_performance (ndarray, shape (n_cal,)) – Calibration fuel flow values [kg/s] for which NOX_EI_matrix is defined.

  • cruiseCalc (bool) – If True, apply cruise ambient corrections (temperature and pressure) to NOx EI.

  • Tamb (float) – Ambient temperature [K].

  • Pamb (float) – Ambient pressure [Pa].

Returns:

  • NOxEI (ndarray, shape (n_times,)) – Interpolated NOx emission index [g NOx / kg fuel] for each SLS_equivalent_fuel_flow.

  • NOEI (ndarray, shape (n_times,)) – NO emission index [g NO / kg fuel].

  • NO2EI (ndarray, shape (n_times,)) – NO2 emission index [g NO2 / kg fuel].

  • HONOEI (ndarray, shape (n_times,)) – HONO emission index [g HONO / kg fuel].

  • noProp (ndarray, shape (n_times,)) – Fraction of NO within total NOy (unitless).

  • no2Prop (ndarray, shape (n_times,)) – Fraction of NO2 within total NOy (unitless).

  • honoProp (ndarray, shape (n_times,)) – Fraction of HONO within total NOy (unitless).

emissions.EI_NOx.NOx_speciation(thrustCat)
emissions.EI_PMnvol.PMnvol_MEEM(EDB_data: dict, altitudes: ndarray, Tamb_cruise: ndarray, Pamb_cruise: ndarray, machFlight: ndarray)

Estimate non-volatile particulate matter (nvPM) emissions at cruise using the Mission Emissions Estimation Methodology (MEEM) based on Ahrens et al. (2022), SCOPE11, and the methodology of Peck et al. (2013).

This function computes: - Geometric mean diameter (GMD) of emitted particles - Mass-based emissions index (EI) in g/kg of fuel - Number-based emissions index (EI) in #/kg of fuel

Parameters:
  • EDB_data (dict) – EDB data containing engine type, bypass ratio, pressure ratio, smoke number (SN) matrix, and emission indices (mass and number).

  • altitudes (ndarray) – Array of flight altitudes [m] over the mission trajectory.

  • Tamb_cruise (ndarray) – Ambient temperature [K] at each point in the trajectory.

  • Pamb_cruise (ndarray) – Ambient pressure [Pa] at each point in the trajectory.

  • machFlight (ndarray) – Mach number at each point in the trajectory.

Returns:

  • EI_PMnvol_GMD (ndarray) – Geometric mean diameter of particles [nm], constant along the trajectory.

  • EI_PMnvol (ndarray) – Emissions index of non-volatile PM mass [g/kg fuel] along the trajectory.

  • EI_PMnvolN (ndarray) – Emissions index of non-volatile PM number [#/kg fuel] along the trajectory.

Notes

  • If nvPM_mass_matrix or nvPM_num_matrix is undefined or negative in the EDB_data, this function reconstructs the values using the SN matrix and correlations from the literature.

  • Adjustments for altitude and in-flight thermodynamic conditions are made using combustor inlet temperature and pressure estimates derived from ambient conditions and engine pressure ratio.

  • Interpolated values account for max thrust EI values where provided.

  • Results with invalid SN or negative EI are set to zero with a warning.

emissions.EI_PMnvol.calculate_PMnvolEI_scope11(SN_matrix, PR, ENGINE_TYPE, BP_Ratio)

Calculate PM non-volatile Emission Index (EI) using SCOPE11 methodology.

Parameters:
  • SN_matrix (ndarray (n x 4)) – Smoke number matrix for each engine and ICAO mode.

  • PR (ndarray (n x 4)) – Pressure ratio matrix.

  • ENGINE_TYPE (list of str) – Engine types (‘TF’, ‘MTF’, etc.) for each engine.

  • BP_Ratio (ndarray (n,)) – Bypass ratio for each engine.

Returns:

PMnvolEI_best_ICAOthrust – Emission index of non-volatile PM mass [g/kg_fuel] for each engine, including 0% thrust extrapolation as first column.

Return type:

ndarray (n x 5)

emissions.EI_PMvol.EI_PMvol_FOA3(thrusts: ndarray, HCEI: ndarray)

Calculate volatile organic PM emissions index (PMvoloEI) and OC internal EI (OCicEI) using the FOA3.0 method (Wayson et al., 2009).

Parameters:
  • thrusts (ndarray, shape (n_types, n_times)) – ICAO thrust settings (%) for each mode and time.

  • HCEI (ndarray, shape (n_types, n_times)) – Hydrocarbon emissions index [g/kg fuel] for each mode and time.

Returns:

  • PMvoloEI (ndarray, shape (n_types, n_times)) – Emissions index for volatile organic PM [g/kg fuel].

  • OCicEI (ndarray, shape (n_types, n_times)) – Same as PMvoloEI (internal organic carbon component).

emissions.EI_PMvol.EI_PMvol_NEW(fuelflow: ndarray, thrustCat: ndarray)

Calculate EI(PMvolo) and OCicEI based on fuel flow

Parameters:

fuelflow (ndarray, shape (n_types, 4)) – Fuel flow factor per type and 4 thrust modes.

Returns:

  • PMvoloEI (ndarray, shape (n_types, 4)) – Emissions index for volatile organic PM [g/kg fuel].

  • OCicEI (ndarray, shape (n_types, 4)) – Emissions index for organic carbon internal [g/kg fuel].

emissions.lifecycle_CO2.lifecycle_CO2(fuel, fuel_burn)

Calculate lifecycle CO2 emissions.

Parameters:

fuel (dictionary) – Fuel information (input from toml file)

Returns:

lifecycle_CO2

Return type:

float


Emission dtype Fields

The private helper __emission_dtype(shape) defines a structured NumPy dtype with the following fields (all float64):

  • CO2: Carbon dioxide

  • H2O: Water vapor

  • HC: Hydrocarbons

  • CO: Carbon monoxide

  • NOx: Total nitrogen oxides

  • NO: Nitric oxide

  • NO2: Nitrogen dioxide

  • HONO: Nitrous acid

  • PMnvol: Black carbon

  • PMnvol_lo: Lower bound black carbon

  • PMnvol_hi: Upper bound black carbon

  • PMnvolN: Black carbon number

  • PMnvolN_lo: Lower bound number

  • PMnvolN_hi: Upper bound number

  • PMnvolGMD: Geometric mean diameter of black carbon (nm)

  • PMvol: Organic particulate matter mass

  • OCic: Organic carbon (incomplete combustion)

  • SO2: Sulfur dioxide

  • SO4: Sulfate

Note

If pmnvol_mode is disabled, the *_lo, *_hi, and PMnvolN fields are omitted.


Notes

  • Structured arrays are used heavily—one field per pollutant, shaped by segment or mode count.

  • Private helper __emission_dtype(shape) defines the NumPy dtype fields.

  • Fuel burn is computed as the decrease in traj.traj_data['fuelMass'].