pycontrails.models.emissions.nvpm¶
Support for nvPM emissions modeling.
This module includes models related to estimating the non-volatile particulate matter (nvPM) mass and number emissions index. Here, the terms “non-volatile particulate matter” (nvPM) and “black carbon” (BC) are assumed with the same definition and used interchangeably.
Functions
|
Estimate air density at the combustor exit. |
|
Calculate the air-to-fuel ratio at cruise conditions via Abrahamson's method. |
|
Convert the nvPM mass concentration to an emissions index. |
|
Estimate scaling factor to convert reference nvPM mass concentration from ground to cruise. |
|
Calculate nvPM mass and number emissions index using the MEEM2 methodology. |
|
Calculate nvPM mass and number emissions index using the T4/T2 methodology. |
|
Calculate the volume of exhaust gas per mass of fuel burnt. |
|
Calculate the flame temperature at the combustion chamber (t_fl). |
|
Calculate the nvPM GMD for singular annular combustor (SAC) engines. |
|
Estimate nvPM geometric mean diameter for SCOPE11 applications. |
|
Estimate nvPM mass concentration at the combustor exit. |
|
Calculate the nvPM mass concentration for cruise conditions ( |
|
Estimate nvPM mass concentration at the engine exit. |
|
Calculate the nvPM mass concentration for ground conditions ( |
Calculate nvPM mass concentration for ground and cruise conditions with ImFOX methodology. |
|
Estimate nvPM mass concentration at the instrument sampling point. |
|
|
Estimate nvPM mass emissions index at the four ICAO certification test points using SCOPE11. |
|
Calculate the nvPM mass emissions index using the Formation and Oxidation Method (FOX). |
Calculate the nvPM mass EI using the "Improved" Formation and Oxidation Method (ImFOX). |
|
Calculate fuel composition correction factor for nvPM mass emissions index. |
|
|
Estimate nvPM mass concentration/EI system loss correction factors. |
|
Estimate nvPM number emissions index at the four ICAO certification test points using SCOPE11. |
Estimate the nvPM number emission index using the fractal aggregates (FA) model. |
|
Calculate fuel composition correction factor for nvPM number emissions index. |
|
|
Create the nvPM number emissions index (EI) profile for the given engine type. |
Adjust nvPM mass emissions index to account for the effects of sustainable aviation fuels. |
|
|
Create the nvPM mass emissions index (EI) profile for the given engine type using MEEM2. |
Adjust nvPM number emissions index to account for the effects of sustainable aviation fuels. |
|
|
Create the nvPM number emissions index (EI) profile for the given engine type using MEEM2. |
Calculate the turbine inlet temperature using Abrahamson's method. |
Classes
|
A data class for EDB nvPM data. |
- class pycontrails.models.emissions.nvpm.EDBnvpm(manufacturer, engine_name, combustor, pressure_ratio, temp_min, temp_max, fuel_heat, ff_7, ff_30, ff_85, ff_100, nvpm_ei_m_7, nvpm_ei_m_30, nvpm_ei_m_85, nvpm_ei_m_100, nvpm_ei_n_7, nvpm_ei_n_30, nvpm_ei_n_85, nvpm_ei_n_100, nvpm_ei_m_use_max, nvpm_ei_m_no_sl_30, nvpm_ei_m_no_sl_85, nvpm_ei_m_no_sl_max, nvpm_ei_n_use_max, nvpm_ei_n_no_sl_30, nvpm_ei_n_no_sl_85, nvpm_ei_n_no_sl_max)¶
Bases:
objectA data class for EDB nvPM data.
ENGINE IDENTIFICATION AND TYPE:¶
- manufacturer: str
engine manufacturer
- engine_name: str
name of engine
- combustor: str
description of engine combustor
ENGINE CHARACTERISTICS:¶
- pressure_ratio: float
engine pressure ratio
nvPM EMISSIONS:¶
- nvpm_ei_m: EmissionsProfileInterpolator
non-volatile PM mass emissions index profile (mg/kg) vs. non-dimensionalized thrust setting (t4_t2)
- nvpm_ei_n: EmissionsProfileInterpolator
non-volatile PM number emissions index profile (1/kg) vs. non-dimensionalized thrust setting (t4_t2)
- combustor¶
- engine_name¶
- ff_100¶
- ff_30¶
- ff_7¶
- ff_85¶
- fuel_heat¶
- manufacturer¶
- nvpm_ei_m_100¶
- nvpm_ei_m_30¶
- nvpm_ei_m_7¶
- nvpm_ei_m_85¶
- nvpm_ei_m_no_sl_30¶
- nvpm_ei_m_no_sl_85¶
- nvpm_ei_m_no_sl_max¶
- property nvpm_ei_m_t4_t2¶
Get the nvPM emissions index mass profile.
- nvpm_ei_m_use_max¶
- nvpm_ei_n_100¶
- nvpm_ei_n_30¶
- nvpm_ei_n_7¶
- nvpm_ei_n_85¶
- nvpm_ei_n_no_sl_30¶
- nvpm_ei_n_no_sl_85¶
- nvpm_ei_n_no_sl_max¶
- property nvpm_ei_n_t4_t2¶
Get the nvPM emissions index number profile.
- nvpm_ei_n_use_max¶
- pressure_ratio¶
- temp_max¶
- temp_min¶
- pycontrails.models.emissions.nvpm.air_density_combustor_exit(air_temperature, air_pressure, thrust_setting, afr, q_fuel, pressure_ratio, comp_efficiency=0.9)¶
Estimate air density at the combustor exit.
- Parameters:
air_temperature (
npt.NDArray[np.floating]) – Ambient temperature for each waypoint, [\(K\)]air_pressure (
npt.NDArray[np.floating]) – Pressure altitude at each waypoint, [\(Pa\)]thrust_setting (
ArrayScalarLike) – Engine thrust setting, unitlessafr (
npt.NDArray[np.floating]) – Air-to-fuel ratio, unitlessq_fuel (
float) – Lower calorific value (LCV) of fuel, [\(J \ kg_{fuel}^{-1}\)].pressure_ratio (
float) – Engine pressure ratio from the ICAO EDBcomp_efficiency (
float) – Engine compressor efficiency, assumed to be 0.9
- Returns:
npt.NDArray[np.floating]– Air density at the combustor exit, [\(kg \ m^{3}\)]
- pycontrails.models.emissions.nvpm.air_to_fuel_ratio_imfox(thrust_setting)¶
Calculate the air-to-fuel ratio at cruise conditions via Abrahamson’s method.
See Eq. (11) in [Abrahamson et al., 2016].
- Parameters:
thrust_setting (
npt.NDArray[np.floating]) – Engine thrust setting, which is the fuel mass flow rate divided by the maximum fuel mass flow rate- Returns:
npt.NDArray[np.floating]– Air-to-fuel ratio at cruise conditions
References
- pycontrails.models.emissions.nvpm.convert_nvpm_mass_concentration_to_ei(c_bc, q_exhaust)¶
Convert the nvPM mass concentration to an emissions index.
- Parameters:
c_bc (
npt.NDArray[np.floating]) – nvPM mass concentration, [\(mg m^{-3}\)]q_exhaust (
npt.NDArray[np.floating]) – Volume of exhaust gas per mass of fuel burnt, [\(m^{3}/kg_{fuel}\)]
- Returns:
npt.NDArray[np.floating]– nvPM mass emissions index, [\(mg/kg_{fuel}\)]
References
- pycontrails.models.emissions.nvpm.dopelheuer_lecht_scaling_factor(t_fl_cru, t_fl_ref, p_3_cru, p_3_ref, afr_cru, afr_ref)¶
Estimate scaling factor to convert reference nvPM mass concentration from ground to cruise.
- Parameters:
t_fl_cru (
npt.NDArray[np.floating]) – Flame temperature at cruise conditions, [\(K\)]t_fl_ref (
npt.NDArray[np.floating] | float) – Flame temperature at reference conditions, [\(K\)]p_3_cru (
npt.NDArray[np.floating]) – Combustor inlet pressure at cruise conditions, [\(Pa\)]p_3_ref (
npt.NDArray[np.floating] | float) – Combustor inlet pressure at reference conditions, [\(Pa\)]afr_cru (
npt.NDArray[np.floating]) – Air-to-fuel ratio at cruise conditionsafr_ref (
npt.NDArray[np.floating] | float) – Air-to-fuel ratio at reference conditions
- Returns:
npt.NDArray[np.floating]– Dopelheuer & Lecht scaling factor
References
- pycontrails.models.emissions.nvpm.estimate_nvpm_meem(nvpm_ei_m_profile, nvpm_ei_n_profile, fuel_flow_per_engine, true_airspeed, air_pressure, air_temperature, ff_7, ff_100)¶
Calculate nvPM mass and number emissions index using the MEEM2 methodology.
Interpolate the non-volatile particulate matter (nvPM) mass and number emissions index from the emissions profile of a given engine type that is provided by the ICAO EDB.
- Parameters:
nvpm_ei_m_profile (
EmissionsProfileInterpolator) – MEEM2-derived nvPM mass emissions index versus the fuel flow for the selected engine Seenvpm_mass_emission_profiles_meem().nvpm_ei_n_profile (
EmissionsProfileInterpolator) – MEEM2-derived nvPM number emissions index versus the fuel flow for the engine Seenvpm_number_emission_profiles_meem().fuel_flow_per_engine (
npt.NDArray[np.floating]) – fuel mass flow rate per engine, [\(kg s^{-1}\)]true_airspeed (
npt.NDArray[np.floating]) – true airspeed for each waypoint, [\(m s^{-1}\)]air_pressure (
npt.NDArray[np.floating]) – pressure altitude at each waypoint, [\(Pa\)]air_temperature (
npt.NDArray[np.floating]) – ambient temperature for each waypoint, [\(K\)]ff_7 (
float) – ICAO EDB fuel flow at idle (7% power) for the selected engine, [\(kg s^{-1}\)]ff_100 (
float) – ICAO EDB fuel flow at take-off (100% power) for the selected engine, [\(kg s^{-1}\)]
- Returns:
nvpm_ei_m (
npt.NDArray[np.floating]) – nvPM mass emissions index, [\(kg/kg_{fuel}\)]nvpm_ei_n (
npt.NDArray[np.floating]) – nvPM number emissions index, [\(kg_{fuel}^{-1}\)]
References
# TODO: Add to bibliography - (Ahrens et al., 2025) https://doi.org/10.4271/2025-01-6000
- pycontrails.models.emissions.nvpm.estimate_nvpm_t4_t2(edb_nvpm, true_airspeed, air_temperature, air_pressure, thrust_setting, q_fuel)¶
Calculate nvPM mass and number emissions index using the T4/T2 methodology.
Interpolate the non-volatile particulate matter (nvPM) mass and number emissions index from the emissions profile of a given engine type that is provided by the ICAO EDB.
The non-dimensional thrust setting (t4_t2) is clipped to the minimum and maximum t4_t2 values that is estimated from the four ICAO EDB datapoints to prevent extrapolating the nvPM values.
- Parameters:
edb_nvpm (
EDBnvpm) – EDB nvPM datatrue_airspeed (
npt.NDArray[np.floating]) – true airspeed for each waypoint, [\(m s^{-1}\)]air_temperature (
npt.NDArray[np.floating]) – ambient temperature for each waypoint, [\(K\)]air_pressure (
npt.NDArray[np.floating]) – pressure altitude at each waypoint, [\(Pa\)]thrust_setting (
npt.NDArray[np.floating]) – thrust settingq_fuel (
float) – Lower calorific value (LCV) of fuel, [\(J \ kg_{fuel}^{-1}\)].
- Returns:
nvpm_ei_m (
npt.NDArray[np.floating]) – nvPM mass emissions index, [\(kg/kg_{fuel}\)]nvpm_ei_n (
npt.NDArray[np.floating]) – nvPM number emissions index, [\(kg_{fuel}^{-1}\)]
- pycontrails.models.emissions.nvpm.exhaust_gas_volume_per_kg_fuel(afr, *, bypass_ratio=0.0)¶
Calculate the volume of exhaust gas per mass of fuel burnt.
- Parameters:
afr (
npt.NDArray[np.floating]) – Air-to-fuel ratiobypass_ratio (
float) – Engine bypass ratio
- Returns:
npt.NDArray[np.floating]– Volume of exhaust gas per mass of fuel burnt, [\(m^{3}/kg_{fuel}\)]
References
# TODO: Add to bibliography - (Agarwal et al., 2019) https://doi.org/10.1021/acs.est.8b04060
- pycontrails.models.emissions.nvpm.flame_temperature(t_3)¶
Calculate the flame temperature at the combustion chamber (t_fl).
- Parameters:
t_3 (
ArrayScalarLike) – Combustor inlet temperature, [\(K\)]- Returns:
ArrayScalarLike– Flame temperature at the combustion chamber, [\(K\)]
- pycontrails.models.emissions.nvpm.geometric_mean_diameter_sac(air_pressure, air_temperature, true_airspeed, thrust_setting, pressure_ratio, q_fuel, *, comp_efficiency=0.9, delta_loss=5.75, cruise=True)¶
Calculate the nvPM GMD for singular annular combustor (SAC) engines.
The nvPM GMD (geometric mean diameter) is estimated using the non-dimensionalized engine thrust setting, the ratio of turbine inlet to the compressor inlet temperature (
t4_t2).- Parameters:
air_pressure (
npt.NDArray[np.floating]) – Pressure altitude at each waypoint, [\(Pa\)]air_temperature (
npt.NDArray[np.floating]) – Ambient temperature for each waypoint, [\(K\)]true_airspeed (
npt.NDArray[np.floating]) – True airspeed for each waypoint, [\(m s^{-1}\)]thrust_setting (
npt.NDArray[np.floating]) – Engine thrust setting, which is the fuel mass flow rate divided by the maximum fuel mass flow ratepressure_ratio (
float) – Engine pressure ratio from the ICAO EDBq_fuel (
float) – Lower calorific value (LCV) of fuel, [\(J \ kg_{fuel}^{-1}\)]comp_efficiency (
float) – Engine compressor efficiency (assumed to be 0.9)delta_loss (
float) – Correction factor accounting for particle line losses (assumed to be 5.75 nm), [\(nm\)]cruise (
bool) – Set to true when the aircraft is not on the ground.
- Returns:
npt.NDArray[np.floating]– nvPM geometric mean diameter, [\(nm\)]
References
- pycontrails.models.emissions.nvpm.geometric_mean_diameter_scope11(c_bc_c)¶
Estimate nvPM geometric mean diameter for SCOPE11 applications.
- Parameters:
c_bc_c (
npt.NDArray[np.floating]) – nvPM mass concentration at the combustor exit, [\(\mu g m^{-3}] See :func:`mass_concentration_combustor_exit\)- Returns:
npt.NDArray[np.floating]– nvPM geometric mean diameter, [\(nm\)]
- pycontrails.models.emissions.nvpm.mass_concentration_combustor_exit(c_bc_e, air_temperature, air_pressure, thrust_setting, afr, q_fuel, bypass_ratio, pressure_ratio, comp_efficiency=0.9)¶
Estimate nvPM mass concentration at the combustor exit.
- Parameters:
c_bc_e (
npt.NDArray[np.floating]) – nvPM mass concentration at the engine exit plane, [\(\mu g m^{-3}] See :func:`mass_concentration_engine_exit\)air_temperature (
npt.NDArray[np.floating]) – Ambient temperature for each waypoint, [\(K\)]air_pressure (
npt.NDArray[np.floating]) – Pressure altitude at each waypoint, [\(Pa\)]thrust_setting (
ArrayScalarLike) – Engine thrust setting, unitlessafr (
npt.NDArray[np.floating]) – Air-to-fuel ratio, unitlessq_fuel (
float) – Lower calorific value (LCV) of fuel, [\(J \ kg_{fuel}^{-1}\)].bypass_ratio (
float) – Engine bypass ratio from the ICAO EDBpressure_ratio (
float) – Engine pressure ratio from the ICAO EDBcomp_efficiency (
float) – Engine compressor efficiency, assumed to be 0.9
- Returns:
npt.NDArray[np.floating]– nvPM mass concentration at the combustor exit, [:math:`mu g m^{-3}]
- pycontrails.models.emissions.nvpm.mass_concentration_cruise_fox(c_bc_ref, t_fl_cru, t_fl_ref, p_3_cru, p_3_ref, afr_cru, afr_ref)¶
Calculate the nvPM mass concentration for cruise conditions (
c_bc_cru).This quantity is computed at the instrument sampling point without correcting for particle line losses.
- Parameters:
c_bc_ref (
npt.NDArray[np.floating]) – nvPM mass concentration at reference conditions, [\(mg m^{-3}\)]t_fl_cru (
npt.NDArray[np.floating]) – Flame temperature at cruise conditions, [\(K\)]t_fl_ref (
npt.NDArray[np.floating] | float) – Flame temperature at reference conditions, [\(K\)]p_3_cru (
npt.NDArray[np.floating]) – Combustor inlet pressure at cruise conditions, [\(Pa\)]p_3_ref (
npt.NDArray[np.floating] | float) – Combustor inlet pressure at reference conditions, [\(Pa\)]afr_cru (
npt.NDArray[np.floating]) – Air-to-fuel ratio at cruise conditionsafr_ref (
npt.NDArray[np.floating] | float) – Air-to-fuel ratio at reference conditions
- Returns:
npt.NDArray[np.floating]– nvPM mass concentration for cruise conditions, [\(mg m^{-3}\)]
- pycontrails.models.emissions.nvpm.mass_concentration_engine_exit(c_bc_i, k_slm)¶
Estimate nvPM mass concentration at the engine exit.
- Parameters:
c_bc_i (
npt.NDArray[np.floating]) – nvPM mass concentration at the instrument sampling point, [\(\mu g m^{-3}] See :func:`mass_concentration_instrument_sampling_point\)k_slm (
npt.NDArray[np.floating]) – nvPM mass concentration/EI system loss correction factor Seemass_system_loss_correction_factor()
- Returns:
npt.NDArray[np.floating]– nvPM mass concentration at the engine exit, [:math:`mu g m^{-3}]
- pycontrails.models.emissions.nvpm.mass_concentration_fox(fuel_flow, t_fl, afr)¶
Calculate the nvPM mass concentration for ground conditions (
c_bc_ref).This quantity is computed at the instrument sampling point without correcting for particle line losses.
- Parameters:
fuel_flow (
npt.NDArray[np.floating]) – Fuel mass flow rate, [\(kg s^{-1}\)]t_fl (
npt.NDArray[np.floating] | float) – Flame temperature at the combustion chamber, [\(K\)]afr (
npt.NDArray[np.floating] | float) – Air-to-fuel ratio
- Returns:
npt.NDArray[np.floating]– nvPM mass concentration for ground conditions, [\(mg m^{-3}\)]
- pycontrails.models.emissions.nvpm.mass_concentration_imfox(fuel_flow_per_engine, afr, t_4, fuel_hydrogen)¶
Calculate nvPM mass concentration for ground and cruise conditions with ImFOX methodology.
This quantity is computed at the instrument sampling point without correcting for particle line losses.
- Parameters:
fuel_flow_per_engine (
npt.NDArray[np.floating]) – fuel mass flow rate per engine, [\(kg s^{-1}\)]afr (
npt.NDArray[np.floating]) – air-to-fuel ratiot_4 (
npt.NDArray[np.floating]) – turbine inlet temperature, [\(K\)]fuel_hydrogen (
float) – percentage of hydrogen mass content in the fuel (13.8% for conventional Jet A-1 fuel)
- Returns:
npt.NDArray[np.floating]– nvPM mass concentration, [\(mg m^{-3}\)]
- pycontrails.models.emissions.nvpm.mass_concentration_instrument_sampling_point(sn)¶
Estimate nvPM mass concentration at the instrument sampling point.
- Parameters:
sn (
npt.NDArray[np.floating]) – Smoke number, unitless- Returns:
npt.NDArray[np.floating]– nvPM mass concentration at the instrument sampling point, [:math:`mu g m^{-3}]
- pycontrails.models.emissions.nvpm.mass_ei_scope11(sn, afr, bypass_ratio)¶
Estimate nvPM mass emissions index at the four ICAO certification test points using SCOPE11.
- Parameters:
sn (
npt.NDArray[np.floating]) – Smoke number, unitlessafr (
npt.NDArray[np.floating]) – Air-to-fuel ratio, unitless (106 at idle, 83 at approach, 51 at climb-out, and 45 at take-off)bypass_ratio (
float) – Engine bypass ratio from the ICAO EDB
- Returns:
npt.NDArray[np.floating]– nvPM mass emissions index at the engine exit, [\(kg \ kg_{fuel}^{-1}\)]
References
# TODO: Add to bibliography - (Agarwal et al., 2019) https://doi.org/10.1021/acs.est.8b04060
- pycontrails.models.emissions.nvpm.mass_emissions_index_fox(air_pressure, air_temperature, true_airspeed, fuel_flow_per_engine, thrust_setting, pressure_ratio, *, comp_efficiency=0.9)¶
Calculate the nvPM mass emissions index using the Formation and Oxidation Method (FOX).
- Parameters:
air_pressure (
npt.NDArray[np.floating]) – Pressure altitude at each waypoint, [\(Pa\)]air_temperature (
npt.NDArray[np.floating]) – Ambient temperature for each waypoint, [\(K\)]true_airspeed (
npt.NDArray[np.floating]) – True airspeed for each waypoint, [\(m s^{-1}\)]fuel_flow_per_engine (
npt.NDArray[np.floating]) – Fuel mass flow rate per engine, [\(kg s^{-1}\)]thrust_setting (
npt.NDArray[np.floating]) – Engine thrust setting, which is the fuel mass flow rate divided by the maximum fuel mass flow ratepressure_ratio (
float) – Engine pressure ratio from the ICAO EDBcomp_efficiency (
float) – Engine compressor efficiency, assumed to be 0.9
- Returns:
npt.NDArray[np.floating]– nvPM mass emissions index, [\(mg \ kg_{fuel}^{-1}\)]
References
- pycontrails.models.emissions.nvpm.mass_emissions_index_imfox(fuel_flow_per_engine, thrust_setting, fuel_hydrogen)¶
Calculate the nvPM mass EI using the “Improved” Formation and Oxidation Method (ImFOX).
- Parameters:
fuel_flow_per_engine (
npt.NDArray[np.floating]) – Fuel mass flow rate per engine, [\(kg s^{-1}\)]thrust_setting (
npt.NDArray[np.floating]) – Engine thrust setting, which is the fuel mass flow rate divided by the maximum fuel mass flow ratefuel_hydrogen (
float) – Percentage of hydrogen mass content in the fuel (13.8% for conventional Jet A-1 fuel)
- Returns:
npt.NDArray[np.floating]– nvPM mass emissions index, [\(mg \ kg_{fuel}^{-1}\)]
References
- pycontrails.models.emissions.nvpm.mass_fuel_composition_correction_meem(hydrogen_content, thrust_setting)¶
Calculate fuel composition correction factor for nvPM mass emissions index.
- Parameters:
hydrogen_content (
float) – The percentage of hydrogen mass content in the fuel.thrust_setting (
ArrayScalarLike) – Engine thrust setting, unitless
- Returns:
npt.NDArray[np.floating]– nvPM mass fuel composition correction factor
- pycontrails.models.emissions.nvpm.mass_system_loss_correction_factor(c_bc_i, bypass_ratio)¶
Estimate nvPM mass concentration/EI system loss correction factors.
- Parameters:
c_bc_i (
npt.NDArray[np.floating]) – nvPM mass concentration at the instrument sampling point, [\(\mu g m^{-3}] See :func:`mass_concentration_instrument_sampling_point\)bypass_ratio (
float) – Engine bypass ratio from the ICAO EDB
- Returns:
npt.NDArray[np.floating]– nvPM mass concentration/EI system loss correction factor.
- pycontrails.models.emissions.nvpm.number_ei_scope11(nvpm_ei_m_e, sn, air_temperature, air_pressure, thrust_setting, afr, q_fuel, bypass_ratio, pressure_ratio, comp_efficiency=0.9)¶
Estimate nvPM number emissions index at the four ICAO certification test points using SCOPE11.
- Parameters:
nvpm_ei_m_e (
npt.NDArray[np.floating]) – nvPM mass emissions index at the engine exit, [\(kg \ kg_{fuel}^{-1}\)] Seeestimate_nvpm_mass_ei_scope11()sn (
npt.NDArray[np.floating]) – Smoke number, unitlessair_temperature (
npt.NDArray[np.floating]) – Ambient temperature for each waypoint, [\(K\)]air_pressure (
npt.NDArray[np.floating]) – Pressure altitude at each waypoint, [\(Pa\)]thrust_setting (
ArrayScalarLike) – Engine thrust setting, unitlessafr (
npt.NDArray[np.floating]) – Air-to-fuel ratio, unitless (106 at idle, 83 at approach, 51 at climb-out, and 45 at take-off)q_fuel (
float) – Lower calorific value (LCV) of fuel, [\(J \ kg_{fuel}^{-1}\)].bypass_ratio (
float) – Engine bypass ratio from the ICAO EDBpressure_ratio (
float) – Engine pressure ratio from the ICAO EDBcomp_efficiency (
float) – Engine compressor efficiency, assumed to be 0.9
- Returns:
npt.NDArray[np.floating]– nvPM number emissions index, [\(kg_{fuel}^{-1}\)]
- pycontrails.models.emissions.nvpm.number_emissions_index_fractal_aggregates(nvpm_ei_m, gmd, *, gsd=np.float32(1.8), rho_bc=np.float32(1770.0), k_tem=np.float32(1.621e-05), d_tem=np.float32(0.39), d_fm=np.float32(2.76))¶
Estimate the nvPM number emission index using the fractal aggregates (FA) model.
The FA model estimates the number emissions index from the mass emissions index, particle size distribution, and morphology.
- Parameters:
nvpm_ei_m (
npt.NDArray[np.floating]) – nvPM mass emissions index, [\(kg/kg_{fuel}\)]gmd (
npt.NDArray[np.floating]) – nvPM geometric mean diameter, [\(m\)]gsd (
float) – nvPM geometric standard deviation (assumed to be 1.80)rho_bc (
float) – nvPM material density (1770 kg/m**3), [\(kg m^{-3}\)]k_tem (
float) – Transmission electron microscopy prefactor coefficient (assumed to be 1.621e-5)d_tem (
float) – Transmission electron microscopy exponent coefficient (assumed to be 0.39)d_fm (
float) – Mass-mobility exponent (assumed to be 2.76)
- Returns:
npt.NDArray[np.floating]– nvPM number emissions index, [\(kg_{fuel}^{-1}\)]
References
FA model: [Teoh et al., 2019]
gmd,gsd,d_fm: [Teoh et al., 2020]rho_bc: [Park et al., 2004]k_tem,d_tem: [Dastanpour and Rogak, 2014]
- pycontrails.models.emissions.nvpm.number_fuel_composition_correction_meem(hydrogen_content, thrust_setting)¶
Calculate fuel composition correction factor for nvPM number emissions index.
- Parameters:
hydrogen_content (
float) – The percentage of hydrogen mass content in the fuel.thrust_setting (
ArrayScalarLike) – Engine thrust setting, unitless
- Returns:
npt.NDArray[np.floating]– nvPM number fuel composition correction factor
- pycontrails.models.emissions.nvpm.nvpm_emission_profiles_t4_t2(pressure_ratio, combustor, temp_min, temp_max, q_fuel, ff_7, ff_30, ff_85, ff_100, nvpm_ei_m_7, nvpm_ei_m_30, nvpm_ei_m_85, nvpm_ei_m_100, nvpm_ei_n_7, nvpm_ei_n_30, nvpm_ei_n_85, nvpm_ei_n_100)¶
Create the nvPM number emissions index (EI) profile for the given engine type.
- Parameters:
pressure_ratio (
float) – Engine pressure ratio, unitlesscombustor (
str) – Engine combustor type provided by the ICAO EDB column Combustor Description.temp_min (
float) – Minimum temperature, provided by the ICAO EDB column Ambient Temp Min (K), [\(K\)]temp_max (
float) – Maximum temperature, provided by the ICAO EDB column Ambient Temp Max (K), [\(K\)]q_fuel (
float) – Lower calorific value (LCV) of fuel, \([J kg_{fuel}^{-1}]\)ff_7 (
float) – ICAO EDB fuel mass flow rate at idle conditions (7% power), [\(kg s^{-1}\)]ff_30 (
float) – ICAO EDB fuel mass flow rate at approach (30% power), [\(kg s^{-1}\)]ff_85 (
float) – ICAO EDB fuel mass flow rate at climb out (85% power), [\(kg s^{-1}\)]ff_100 (
float) – ICAO EDB fuel mass flow rate at take-off (100% power), [\(kg s^{-1}\)]nvpm_ei_n_7 (
float) – ICAO EDB nvPM number emissions index at idle conditions (7% power), [\(kg_{fuel}^{-1}\)]nvpm_ei_n_30 (
float) – ICAO EDB nvPM number emissions index at approach (30% power), [\(kg_{fuel}^{-1}\)]nvpm_ei_n_85 (
float) – ICAO EDB nvPM number emissions index at climb out (85% power), [\(kg_{fuel}^{-1}\)]nvpm_ei_n_100 (
float) – ICAO EDB nvPM number emissions index at take-off (100% power), [\(kg_{fuel}^{-1}\)]nvpm_ei_m_7 (
float) – ICAO EDB nvPM mass emissions index at idle conditions (7% power), [\(kg/kg_{fuel}\)]nvpm_ei_m_30 (
float) – ICAO EDB nvPM mass emissions index at approach (30% power), [\(kg/kg_{fuel}\)]nvpm_ei_m_85 (
float) – ICAO EDB nvPM mass emissions index at climb out (85% power), [\(kg/kg_{fuel}\)]nvpm_ei_m_100 (
float) – ICAO EDB nvPM mass emissions index at take-off (100% power), [\(kg/kg_{fuel}\)]
- Returns:
tuple[EmissionsProfileInterpolator,EmissionsProfileInterpolator]– nvPM mass and number emissions index versus the fuel mass flow rate for a given engine type
- pycontrails.models.emissions.nvpm.nvpm_mass_ei_pct_reduction_due_to_saf(hydrogen_content, thrust_setting)¶
Adjust nvPM mass emissions index to account for the effects of sustainable aviation fuels.
For fuel with hydrogen mass content > 14.3, the adjustment factor is adopted from Teoh et al. (2022), which was used to calculate the change in nvPM EIn.
- Parameters:
hydrogen_content (
float) – The percentage of hydrogen mass content in the fuel.thrust_setting (
npt.NDArray[np.floating]) – Engine thrust setting, where the equivalent fuel mass flow rate per engine at sea level, \([0 - 1]\).
- Returns:
npt.NDArray[np.floating]– Percentage reduction in nvPM number emissions index
References
- pycontrails.models.emissions.nvpm.nvpm_mass_emission_profiles_meem(combustor, hydrogen_content, ff_7, ff_30, ff_85, ff_100, nvpm_ei_m_7, nvpm_ei_m_30, nvpm_ei_m_85, nvpm_ei_m_100, fifth_data_point_mass=False, nvpm_ei_m_30_no_sl=None, nvpm_ei_m_85_no_sl=None, nvpm_ei_m_max_no_sl=None)¶
Create the nvPM mass emissions index (EI) profile for the given engine type using MEEM2.
- Parameters:
combustor (
str) – Engine combustor type provided by the ICAO EDB column Combustor Description.hydrogen_content (
float) – The percentage of hydrogen mass content in the fuel.ff_7 (
float) – ICAO EDB fuel mass flow rate at idle conditions (7% power), [\(kg s^{-1}\)]ff_30 (
float) – ICAO EDB fuel mass flow rate at approach (30% power), [\(kg s^{-1}\)]ff_85 (
float) – ICAO EDB fuel mass flow rate at climb out (85% power), [\(kg s^{-1}\)]ff_100 (
float) – ICAO EDB fuel mass flow rate at take-off (100% power), [\(kg s^{-1}\)]nvpm_ei_m_7 (
float) – ICAO EDB loss-corrected nvPM mass EI at idle (7% power), [\(kg/kg_{fuel}\)]nvpm_ei_m_30 (
float) – ICAO EDB loss-corrected nvPM mass EI at approach (30% power), [\(kg/kg_{fuel}\)]nvpm_ei_m_85 (
float) – ICAO EDB loss-corrected nvPM mass EI at climb out (85% power), [\(kg/kg_{fuel}\)]nvpm_ei_m_100 (
float) – ICAO EDB loss-corrected nvPM mass EI at take-off (100% power), [\(kg/kg_{fuel}\)]fifth_data_point_mass (
bool,) – Does the maximum nvPM EI mass occur between 30% and 85% of fuel flow?nvpm_ei_m_30_no_sl (
float | None,) – ICAO EDB nvPM mass EI at approach (30% power), [\(kg/kg_{fuel}\)]nvpm_ei_m_85_no_sl (
float | None,) – ICAO EDB nvPM mass EI at climb out (85% power), [\(kg/kg_{fuel}\)]nvpm_ei_m_max_no_sl (
float | None,) – ICAO EDB maximum nvPM mass EI, [\(kg/kg_{fuel}\)]
- Returns:
EmissionsProfileInterpolator– nvPM mass emissions index versus the fuel mass flow rate for a given engine type
References
# TODO: Add to bibliography - (Ahrens et al., 2025) https://doi.org/10.4271/2025-01-6000
- pycontrails.models.emissions.nvpm.nvpm_number_ei_pct_reduction_due_to_saf(hydrogen_content, thrust_setting)¶
Adjust nvPM number emissions index to account for the effects of sustainable aviation fuels.
- Parameters:
hydrogen_content (
float) – The percentage of hydrogen mass content in the fuel.thrust_setting (
npt.NDArray[np.floating]) – Engine thrust setting, where the equivalent fuel mass flow rate per engine at sea level, \([0 - 1]\).
- Returns:
npt.NDArray[np.floating]– Percentage reduction in nvPM number emissions index
References
- pycontrails.models.emissions.nvpm.nvpm_number_emission_profiles_meem(combustor, hydrogen_content, ff_7, ff_30, ff_85, ff_100, nvpm_ei_n_7, nvpm_ei_n_30, nvpm_ei_n_85, nvpm_ei_n_100, fifth_data_point_number=False, nvpm_ei_n_30_no_sl=None, nvpm_ei_n_85_no_sl=None, nvpm_ei_n_max_no_sl=None)¶
Create the nvPM number emissions index (EI) profile for the given engine type using MEEM2.
- Parameters:
combustor (
str) – Engine combustor type provided by the ICAO EDB column Combustor Description.hydrogen_content (
float) – The percentage of hydrogen mass content in the fuel.ff_7 (
float) – ICAO EDB fuel mass flow rate at idle conditions (7% power), [\(kg s^{-1}\)]ff_30 (
float) – ICAO EDB fuel mass flow rate at approach (30% power), [\(kg s^{-1}\)]ff_85 (
float) – ICAO EDB fuel mass flow rate at climb out (85% power), [\(kg s^{-1}\)]ff_100 (
float) – ICAO EDB fuel mass flow rate at take-off (100% power), [\(kg s^{-1}\)]nvpm_ei_n_7 (
float) – ICAO EDB loss-corrected nvPM number EI at idle (7% power), [\(kg/kg_{fuel}\)]nvpm_ei_n_30 (
float) – ICAO EDB loss-corrected nvPM number EI at approach (30% power), [\(kg/kg_{fuel}\)]nvpm_ei_n_85 (
float) – ICAO EDB loss-corrected nvPM number EI at climb out (85% power), [\(kg/kg_{fuel}\)]nvpm_ei_n_100 (
float) – ICAO EDB loss-corrected nvPM number EI at take-off (100% power), [\(kg/kg_{fuel}\)]fifth_data_point_number (
bool,) – Does the maximum nvPM EI number occur between 30% and 85% of fuel flow?nvpm_ei_n_30_no_sl (
float | None,) – ICAO EDB nvPM number EI at approach (30% power), [\(kg/kg_{fuel}\)]nvpm_ei_n_85_no_sl (
float | None,) – ICAO EDB nvPM number EI at climb out (85% power), [\(kg/kg_{fuel}\)]nvpm_ei_n_max_no_sl (
float | None,) – ICAO EDB maximum nvPM number EI, [\(kg/kg_{fuel}\)]
- Returns:
EmissionsProfileInterpolator– nvPM number emissions index versus the fuel mass flow rate for a given engine type
References
# TODO: Add to bibliography - (Ahrens et al., 2025) https://doi.org/10.4271/2025-01-6000
- pycontrails.models.emissions.nvpm.turbine_inlet_temperature_imfox(afr)¶
Calculate the turbine inlet temperature using Abrahamson’s method.
See Eq. (13) in [Abrahamson et al., 2016].
- Parameters:
afr (
npt.NDArray[np.floating]) – air-to-fuel ratio at cruise conditions- Returns:
npt.NDArray[np.floating]– turbine inlet temperature, [\(K\)]
References