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 |
---|---|---|
|
|
Aircraft performance object providing climb/cruise/descent and LTO data matrices. |
|
|
Flight trajectory containing altitude, speed, fuel‐mass, and fuel‐flow time series. |
|
|
If |
|
|
Path to TOML file of fuel properties (e.g. CO₂ factors, sulfur content, lifecycle CO₂). |
Upon instantiation, the following steps occur:
Fuel TOML is loaded.
Array shapes are initialized based on trajectory lengths and config flags.
Fuel burn per segment is derived from the trajectory’s fuel-mass time-series.
Trajectory, LTO, APU, and GSE emissions are computed.
All sources are summed and life-cycle CO₂ is added.
Attributes
Name |
Type |
Description |
---|---|---|
|
|
Fuel properties loaded from TOML (e.g. |
|
|
Total, climb, cruise, and descent time-step counts. |
|
|
Whether climb/descent uses performance model or LTO data. |
|
|
PM number estimation method (e.g. |
|
|
Fuel burned (kg) per time step. |
|
|
Emission indices (g/kg fuel) per species and time step. |
|
|
Emissions (g) per time step. |
|
|
Emission indices for each LTO mode. |
|
|
Emissions (g) for each LTO mode. |
|
|
APU emission indices (g/kg fuel). |
|
|
APU emissions (g). |
|
|
GSE emissions (g) per engine-start cycle. |
|
|
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']
.