# Convert mass mixing ratio (MMR) to mass concentration or to volume mixing ratio (VMR)

**URL:** <https://forum.ecmwf.int/t/convert-mass-mixing-ratio-mmr-to-mass-concentration-or-to-volume-mixing-ratio-vmr/1253>\
**Category:** CAMS - Datasets and Usage\
**Tags:** cams, cams\_global\_forecast, conversion, global\_reanalysis\
**Created:** [23 September 2019 08:54 UTC](https://forum.ecmwf.int/t/convert-mass-mixing-ratio-mmr-to-mass-concentration-or-to-volume-mixing-ratio-vmr/1253 "2019-09-23T08:54:34Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Michela](https://forum.ecmwf.int/letter_avatar_proxy/v4/letter/m/898d66/32.png) [@Michela](https://forum.ecmwf.int/u/Michela)\
**Post date:** [23 September 2019 08:54 UTC](https://forum.ecmwf.int/t/convert-mass-mixing-ratio-mmr-to-mass-concentration-or-to-volume-mixing-ratio-vmr/1253/1 "2019-09-23T08:54:34Z")

</div>

How do I convert MMR to VMR?

---

<div class="post-metadata">

**Author:** ![Michela](https://forum.ecmwf.int/letter_avatar_proxy/v4/letter/m/898d66/32.png) [@Michela](https://forum.ecmwf.int/u/Michela)\
**Post date:** [23 September 2019 08:56 UTC](https://forum.ecmwf.int/t/convert-mass-mixing-ratio-mmr-to-mass-concentration-or-to-volume-mixing-ratio-vmr/1253/2 "2019-09-23T08:56:24Z")

</div>

Most of the chemical species in CAMS Global data are archived as mass mixing ratios (MMR, kg of gas / kg of air).

## Convert MMR to mass concentration (e.g. in kg/m3)
To compute mass concentration (mass per volume unit) apply this formula:
\rho\_x = \alpha\_x \frac{p}{RT}

or

\rho\_x = \alpha\_x \rho

Where \rho\_x (kg/m^3) is concentration of a chemical species, \alpha\_x(kg/m^3) is mass mixing ratio, p(Pa, 1 Pa = 0.01 hPa) , T(K) and \rho(kg/m^3) are ambient pressure, temperature and density and R is the specific gas constant (for dry air 287.058 \frac{J}{kgK} ).

## Convert MMR to Volume Mixing Ratio (VMR, units ppmv or ppbv)
To convert data from MMR to VMR you only need molar masses of dry air and molar mass of the atmospheric species. [See here for more information](https://finna.fi/Record/abo.9911490293405972) (page 9). For example:
- For O3, the formula is: VMR = 28.9644 / 47.9982 \* 1e9 \* MMR
- For CO the formula is: VMR = 28.9644 / 28.0101 \* 1e9 \* MMR
- For NO2 the formula is: VMR = 28.9644 / 46.0055 \* 1e9 \* MMR
- For SO2 the formula is: VMR = 28.9644 / 64.0638 \* 1e9 \* MMR
- For CO2 the formula is: VMR = 28.9644 / 44.0095 \* 1e9 \* MMR
- For CH4 the formula is: VMR = 28.9644 / 16.0425 \* 1e9 \* MMR

The 1e9 in the formulae gives parts per billion (ppbv), use 1e6 to get parts per million (ppmv).

## Dobson Unit (DU)
DU is a vertically integrated quantity and can only be used for total or partial column parameters. To convert total column Ozone data from kg/m2 into DU, multiply the values by 46698. See also [What is the Dobson Unit (DU)? and How to convert Ozone units from µg/m3 to Dobson Unit?](https://www.temis.nl/general/dobsonunit.php)

---

<div class="post-metadata">

**Author:** ![User\_Cascade](https://forum.ecmwf.int/letter_avatar_proxy/v4/letter/u/73ab20/32.png) [@User\_Cascade](https://forum.ecmwf.int/u/User_Cascade)\
**Post date:** [25 July 2021 16:45 UTC](https://forum.ecmwf.int/t/convert-mass-mixing-ratio-mmr-to-mass-concentration-or-to-volume-mixing-ratio-vmr/1253/3 "2021-07-25T16:45:44Z")

</div>

sudurbhai kela..sutmarani kobo nuwaro kiba hudhile

---

<div class="post-metadata">

**Author:** ![Yijing\_Zheng](https://forum.ecmwf.int/letter_avatar_proxy/v4/letter/y/4bbf92/32.png) [@Yijing\_Zheng](https://forum.ecmwf.int/u/Yijing_Zheng)\
**Post date:** [23 June 2022 07:59 UTC](https://forum.ecmwf.int/t/convert-mass-mixing-ratio-mmr-to-mass-concentration-or-to-volume-mixing-ratio-vmr/1253/4 "2022-06-23T07:59:57Z")

</div>

Thank you so much for this, really helped!

---

<div class="post-metadata">

**Author:** ![Danila\_Pequeno](https://forum.ecmwf.int/letter_avatar_proxy/v4/letter/d/7cd45c/32.png) [@Danila\_Pequeno](https://forum.ecmwf.int/u/Danila_Pequeno)\
**Post date:** [10 September 2024 09:47 UTC](https://forum.ecmwf.int/t/convert-mass-mixing-ratio-mmr-to-mass-concentration-or-to-volume-mixing-ratio-vmr/1253/5 "2024-09-10T09:47:57Z")

</div>

And to convert particulate matter?

---

<div class="post-metadata">

**Author:** ![User\_luiz\_galizia\_at](https://forum.ecmwf.int/letter_avatar_proxy/v4/letter/u/e79b87/32.png) [@User\_luiz\_galizia\_at](https://forum.ecmwf.int/u/User_luiz_galizia_at)\
**Post date:** [27 January 2025 10:52 UTC](https://forum.ecmwf.int/t/convert-mass-mixing-ratio-mmr-to-mass-concentration-or-to-volume-mixing-ratio-vmr/1253/6 "2025-01-27T10:52:46Z")

</div>

Hi,

Have you found a solution for that? I am having a hard time to covert the PM 2.5 total kg to μg/m³. Any idea how to do it?

Thanks,

---

<div class="post-metadata">

**Author:** ![Pierre\_Loicq](https://forum.ecmwf.int/letter_avatar_proxy/v4/letter/p/e68b1a/32.png) [@Pierre\_Loicq](https://forum.ecmwf.int/u/Pierre_Loicq)\
**Post date:** [27 January 2025 12:11 UTC](https://forum.ecmwf.int/t/convert-mass-mixing-ratio-mmr-to-mass-concentration-or-to-volume-mixing-ratio-vmr/1253/7 "2025-01-27T12:11:37Z")

</div>

Hello,

I can propose you this function used to convert data from the [CAMS global atmospheric composition forecasts](https://ads.atmosphere.copernicus.eu/datasets/cams-global-atmospheric-composition-forecasts?tab=overview):

```auto
import xarray as xr

def convert_kgByKg_to_microgramByCubicMeter(ds: xr.Dataset) -> xr.Dataset:
    import numpy as np

    specificHumidity = ds.q
    airPressure_Pa = ds.sp
    temp_C = ds.t - 273.15
    # https://en.wikipedia.org/wiki/Tetens_equation
    saturation_vapor_pressure_Pa = (
        0.61078 * np.exp(17.27 * temp_C / (temp_C + 237.3)) * 1000
    )
    # https://fr.wikipedia.org/wiki/Humidit%C3%A9_sp%C3%A9cifique section Approximation de l'humidité spécifique
    water_vapor_partial_pressure_Pa = ( specificHumidity * airPressure_Pa / (0.622 + 0.378 * specificHumidity))
    relHumidity_0_1 = water_vapor_partial_pressure_Pa / saturation_vapor_pressure_Pa
    # https://fr.wikipedia.org/wiki/Masse_volumique_de_l%27air
    numerator = airPressure_Pa - 230.617 * relHumidity_0_1 * np.exp(17.5043 * temp_C / (241.2 + temp_C) )
    denom = 287.06 * (temp_C + 273.15)
    airVolumicMass_kgByM3 = numerator / denom

    for var in ds:
        if var in ["no2", "so2", "co", "o3"]: # kg/kg
            attributes = ds[var].attrs
            ds[var] = ds[var] * 1e9 * airVolumicMass_kgByM3
            ds[var].attrs = attributes
            ds[var].attrs["units"] = "µg/m³"
            ds[var].attrs["long_name"] = f"{var.upper()} volumic mass at surface"
            ds[var].attrs["standard_name"] = f"volumic_mass_of_{var.upper()}_at_surface"

        elif var in ["pm10", "pm2p5"]: # kg/m³
            attributes = ds[var].attrs
            ds[var] = ds[var] * 1e9 # kg/m³ to µg/m³
            ds[var].attrs = attributes
            ds[var].attrs["units"] = "µg/m³"
            ds[var].attrs["long_name"] = f"{var} volumic mass at surface"
            ds[var].attrs["standard_name"] = f"volumic_mass_of_{var}_at_surface"

    ds = ds.drop_vars(["q", "sp", "t"]) # don't need them anymore
    return ds

```

---

<div class="post-metadata">

**Author:** ![Danila\_Pequeno](https://forum.ecmwf.int/letter_avatar_proxy/v4/letter/d/7cd45c/32.png) [@Danila\_Pequeno](https://forum.ecmwf.int/u/Danila_Pequeno)\
**Post date:** [14 February 2025 21:42 UTC](https://forum.ecmwf.int/t/convert-mass-mixing-ratio-mmr-to-mass-concentration-or-to-volume-mixing-ratio-vmr/1253/8 "2025-02-14T21:42:56Z")

</div>

Just raise the variable to 9, in R it would be pm2p5 \* 1e9

---

<div class="post-metadata">

**Author:** ![User\_luiz\_galizia\_at](https://forum.ecmwf.int/letter_avatar_proxy/v4/letter/u/e79b87/32.png) [@User\_luiz\_galizia\_at](https://forum.ecmwf.int/u/User_luiz_galizia_at)\
**Post date:** [5 March 2025 13:00 UTC](https://forum.ecmwf.int/t/convert-mass-mixing-ratio-mmr-to-mass-concentration-or-to-volume-mixing-ratio-vmr/1253/9 "2025-03-05T13:00:03Z")

</div>

Thanks for the suggestion but I am not sure this is correct. To be more precise, I am trying to convert Wildfire flux of particulate matter d \< 2.5 µm (PM2.5) which are kg m-2 s-1 in the CAMS/GFA dataset to PM2.5 concentration in μg/m³. I appreciate any suggestion.
