EDGAR v8.1 Global Air Pollutant Emissions

Overview

We have a data loader for EDGAR v8.1 monthly global air pollutant emissions, EDGARv81MonthlyEmis.

EDGAR (Emissions Database for Global Atmospheric Research) provides global gridded emissions at 0.1°×0.1° resolution for 2000-2022. Monthly flux data (kg m⁻² s⁻¹) is available for 9 pollutants (BC, CO, NH3, NMVOC, NOx, OC, PM10, PM2.5, SO2) across multiple emission sectors.

Reference: Crippa, M., et al. (2024). EDGAR v8.1 Global Air Pollutant Emissions. European Commission, Joint Research Centre (JRC). https://edgar.jrc.ec.europa.eu/dataset_ap81

EarthSciData.EDGARv81MonthlyEmisFunction
EDGARv81MonthlyEmis(
    substance,
    sector,
    domaininfo;
    scale,
    name,
    stream
)

A data loader for EDGAR v8.1 monthly global air pollutant emissions data at 0.1°×0.1° resolution. Data spans 2000-2022 and is available from: https://edgar.jrc.ec.europa.eu/dataset_ap81

substance is the pollutant name (one of: BC, CO, NH3, NMVOC, NOx, OC, PM10, PM2.5, SO2).

sector is the emission sector (e.g. "POWER_INDUSTRY", "TRANSPORT", "AGRICULTURE", etc.).

domaininfo should specify lon, lat, and lev coordinate variables.

scale is a scaling factor to apply to the emissions data.

stream specifies whether the data should be streamed in as needed or loaded all at once.

Note: emissions are applied only at the surface level (lev < 2) and converted from flux (kg m⁻² s⁻¹) to volumetric rate (kg m⁻³ s⁻¹) by dividing by the first-layer height Δz.

source

Equations

This is what its equation system looks like:

using EarthSciData, EarthSciMLBase
using ModelingToolkit, DynamicQuantities, DataFrames
using ModelingToolkit: t
using DynamicQuantities: dimension
using Dates

domain = DomainInfo(
    DateTime(2020, 6, 1), DateTime(2020, 7, 1);
    lonrange = deg2rad(-10.0):deg2rad(2.5):deg2rad(30.0),
    latrange = deg2rad(40.0):deg2rad(2):deg2rad(60.0),
    levrange = 1:10,
)

emis = EDGARv81MonthlyEmis("NOx", "POWER_INDUSTRY", domain)

\[ \begin{align} \mathtt{fluxes}\left( t \right) &= ifelse\left( \mathtt{lev} < 2, \frac{\mathtt{fluxes\_itp}\left( t + \mathtt{t\_ref}, \mathtt{lon}, \mathtt{lat} \right)}{\mathtt{{\Delta}z}}, \mathtt{zero\_fluxes} \right) \end{align} \]

Variables

Here are the variables in tabular format:

function table(vars)
    DataFrame(
        :Name => [string(Symbolics.tosymbol(v, escape = false)) for v in vars],
        :Units => [dimension(ModelingToolkit.get_unit(v)) for v in vars],
        :Description => [ModelingToolkit.getdescription(v) for v in vars]
    )
end
table(unknowns(emis))
1×3 DataFrame
RowNameUnitsDescription
StringDimensio…String
1fluxesm⁻³ kg s⁻¹Power industry

Parameters

Finally, here are the parameters in tabular format:

table(parameters(emis))
7×3 DataFrame
RowNameUnitsDescription
StringDimensio…String
1lonLongitude
2latLatitude
3levLevel Index
4ΔzmHeight of the first vertical grid layer
5t_refsReference time
6fluxes_itpm⁻² kg s⁻¹Interpolated fluxes
7zero_fluxesm⁻³ kg s⁻¹