geoschem / geos-chem

GEOS-Chem "Science Codebase" repository. Contains GEOS-Chem science routines, run directory generation scripts, and interface code. This repository is used as a submodule within the GCClassic and GCHP wrappers, as well as in other modeling contexts (external ESMs).
http://geos-chem.org
Other
169 stars 165 forks source link

How to calculate the age of air using SpeciesConc_CLOCK? #2012

Closed yc-chan closed 1 year ago

yc-chan commented 1 year ago

Name and Institution (Required)

Name: Yuk Chun Chan Institution: University of Washington

Confirm you have reviewed the following documentation

Description of your issue or question

I am interested in looking at the age of air diagnostics (the time elapsed since the air mass last contacts with the surface) in GCClassic simulations.

GEOS-Chem wiki has an outdated page about the AgeOfAir diagnostic. Since version 13.0.0, Met_AgeOfAir has been replaced by SpeciesConc_CLOCK (see the commit here). I try to search for the proper way to calculate the age of air from this clock tracer but have no luck. The only information I can find is this related discussion thread in the GCPy repository, but it does not describe the actual calculation.

How can I calculate the modeled age of air using SpeciesConc_CLOCK from my simulation outputs?

msulprizio commented 1 year ago

Hi @yc-chan. I have removed the outdated text on the wiki describing the AgeOfAir diagnostic. Thanks for pointing that out.

The CLOCK species in GEOS-Chem is a bit tricky because it's carried in State_Chm%Species concentration array like other GEOS-Chem species but it has non-standard units (e.g. seconds or timesteps vs ppbv). In main.F90, we call Set_Clock_Tracer each timestep and in doing so the number of seconds in that timestep is added to CLOCK for each grid box (and it's zeroed at the surface). In Interfaces/GCClassic/main.F90, the units of State_Chm%Species are kg species. The species concentrations are eventually converted to mol/mol dry air (using routines in GeosUtil/unitconv_mod.F90) for saving out to the GEOSChem.SpeciesConc netCDF file. To get the proper units back, you would need to convert from mol/mol dry air (same as kg/kg dry air) back to "kg" (really "seconds" for CLOCK) using this conversion as obtained from unitconv_mod.F90:

    !====================================================================
    !
    !  The conversion is as follows:
    !
    !   kg species(N)
    !   -----------  *  kg dry air
    !   kg dry air
    !
    !   = mass mixing ratio * dry air mass
    !
    !   = kg species(N)
    !
    ! Therefore, with:
    !
    !  AD(I,J,L)   = grid box dry air mass [kg]
    !
    ! the conversion is:
    !
    !  Species(I,J,L,N) [kg]
    !
    !    = Species(I,J,L,N) [kg/kg] * AD(I,J,L)
    !
    !====================================================================

The AD field can be obtained from the StateMet collection in HISTORY.rc.

NOTES:

yc-chan commented 1 year ago

Hi @msulprizio! Thank you a lot for the explanation! I still have one question about the unit conversion.

I am currently using version 13.3.2 for my simulations. I think the State_Chm%Species in that version still uses [kg/ kg dry air] as the unit (according to state_chm_mod.F90). In this case, should I convert SpeciesConc_CLOCK from [mol/ mol dry air] to [kg/ kg dry air] to retrieve age of air in [s]? In other words:

AoA [s] = SpeciesConc_CLOCK [mol/ mol dry air] * molar mass of clock [g/ mol] / molar mass of dry air [g/ mol dry air]

When I use molar mass of clock = 1 g/mol (according to species_database.yml) and molar mass of dry air = 28.6 g/mol, the numbers I get seem reasonable.

msulprizio commented 1 year ago

Yes @yc-chan That sounds correct. Thanks for following up. I will close out this issue, but please feel free to open a new one if you have other questions.