Tagged O3 simulation
- Simulations overview
- Mechanisms for full-chemistry simulations (e.g. Standard, Tropchem, etc.)
- [[Aerosol-only simulation]
- CH4 simulation
- CO2 simulation
- Hg simulation
- POPs simulation
- Tagged CO simulation
- Tagged O3 simulation
- TransportTracers simulation
This page contains information about the Tagged O3 simulation in GEOS-Chem (formerly known as the "Tagged Ox" simulation).
- 1 Overview
- 2 Recent modifications to the tagged O3 simulation
- 2.1 Write initial and final Ox mass to file
- 2.2 PBLTOP and MTTOP bug fix
- 2.3 European grid definition bug fix
- 2.4 Now call INIT_TAGGED_OX from input_mod.F
- 2.5 Make it easier to switch between the simple and extended simulations
- 2.6 Now let user select the year of archived ozone data
- 2.7 Reactivate stratospheric P(Ox) in tagged Ox simulation
- 2.8 Replace LD65 with LLTROP in tagged_ox_mod.F
- 3 Restart Files
- 4 References
- 5 Previous issues that are now resolved
- 6 Unresolved issues
The tagged O3 simulation allows you to use archived ozone production and loss rates to perform a simulation for geographically tagged ozone tracers without having to run the full-chemistry simulation. The tagged O3 simulation is also used to spin up the ozone into steady-state when validating a new meterorolgical field product.
We now prefer to refer to this simulation as the "Tagged O3 Simulation" instead of the "Tagged Ox Simulation". This reflects the removal of the Ox tracer from GEOS-Chem v9-02 and higher versions. Ox has now been replaced by O3.
--Bob Y. 11:08, 11 April 2014 (EDT)
Types of tagged O3 simulations
You may perform two different types of tagged O3 simulations. These simulations differ in the number of tagged O3 tracers that are available:
Simple tagged O3 simulation
The default setting is the SIMPLE TAGGED O3 SIMULATION, which carries 2 tracers:
(1 ) O3 : Total O3 (2 ) O3Strt : O3 from the Stratosphere
Extended tagged O3 simulation
You may also choose to run the EXTENDED TAGGED O3 SIMULATION, which carries 13 tracers:
(1 ) O3 : Total O3 (2 ) O3Strt : O3 from the Stratosphere (tropopause - atm top ) (3 ) O3Ut : O3 produced in Upper Trop (350 hPa - tropopause) (4 ) O3Mt : O3 produced in Middle Trop (PBL top - 350 hPa ) (5 ) O3Row : O3 produced in Rest of World (surface - PBL top ) (6 ) O3PcBl : O3 produced in Pacific BL (surface - PBL top ) (7 ) O3NaBl : O3 produced in N. American BL (surface - PBL top ) (8 ) O3AtBl : O3 produced in Atlantic BL (surface - PBL top ) (9 ) O3EuBl : O3 produced in European BL (surface - PBL top ) (10) O3AfBl : O3 produced in N. African BL (surface - PBL top ) (11) O3AsBl : O3 produced in Asian (surface - PBL top ) (12) O3Init : O3 initial conditions (all levels ) (13) O3USA : O3 produced over the USA (all levels )
Note that in both the simple and extended simulations, the stratospheric O3 tracer is listed as tracer #2. This is necessary for compatibility with the Linoz stratospheric ozone chemistry mechanism.
--Bob Y. 11:38, 11 April 2014 (EDT)
Recent modifications to the tagged O3 simulation
Write initial and final Ox mass to file
This update was included in v11-02b and approved on 16 Jun 2017.
The budget computation code needs the initial and final mass of O3 in [kg] in order to compute the difference in accumulated mass. The accumulated mass is then compared to the budget computed with all terms (emissions, deposition, chemical, etc) for validation. Although in theory we can get the initial and final masses from the restart file and convert units, it is more straightforward to print the values to a file.
PBLTOP and MTTOP bug fix
This update was validated in the 1-month benchmark simulation v11-01d (approved 12 Dec 2015).
PBLTOP and MTTOP are set to levels corresponding to 750 hPa and 350 hPa respectively in routine get_regional_pox in tagged_ox_mod.F. Values used for GEOS-4 are erroneously used for GEOS-5, GEOS-FP, MERRA, and MERRA-2, resulting in PBL and middle troposphere levels that are below what they should be for those MET fields. This bug fix updates the levels for GEOS-5, GEOS-FP, MERRA, and MERRA-2 from 5 to 16 for PBLTOP and from 10 to 27 for MTTOP.
European grid definition bug fix
This update was validated in the 1-month benchmark simulation v11-01d (approved 12 Dec 2015).
There is an error in the European grid definition within tagged_ox_mod.F in v10-01. Please see the tagged ozone simulation wiki page for details.The longitude definition of ITS_A_EUR is incorrectly defined as greater than -15.0 and greater than or equal to 55.0, and thus has no upper bound. It should instead have an upper bound of 55.0. If running the extended tagged ozone simulation, you should amend the definition to be as follows:
ITS_IN_EUR = ( Y >= 36.0 .and. ( X > -15.0 .and. X <= 55.0 ) )
Now call INIT_TAGGED_OX from input_mod.F
This update was validated in the 1-month benchmark simulation v10-01c (approved 29 May 2014.)
Prior to GEOS-Chem v10-01, routine INIT_TAGGED_OX (in module GeosCore/tagged_ox_mod.F) was called from routine CHEM_TAGGED_OX on the first chemistry timestep.
In order to make the code more compatible with our Grid-Independent GEOS-Chem development, we now call INIT_TAGGED_OX from routine GIGC_INIT_EXTRA (in module GeosCore/input_mod.F). This is now called during the "Initialization" phase of GEOS-Chem rather than during the "Run" phase.
Make it easier to switch between the simple and extended simulations
This update was validated in the 1-month benchmark simulation v10-01c (approved on 29 May 2014).
If you wish to activate the EXTENDED TAGGED O3 SIMULATION, then look for this line of code at the top of module GeosCore/tagged_ox_mod.F:
!#define USE_ALL_TAGO3_TRACERS 1
and remove the ! comment character, so that the line now looks like this:
#define USE_ALL_TAGO3_TRACERS 1
Then make realclean and recompile GEOS-Chem, etc.
Now let user select the year of archived ozone data
We have made it easier for you to specify the year of archived ozone prod/loss data. (For example, you may want to run a tagged O3 spinup simulation with met field years 2013, but only have prod/loss data for the year 2004.)
Original post: v9-02 public release
This issue was introduced into the public release of GEOS-Chem v9-02 (03 Mar 2014).
The tagged O3 simulation relies on ozone production & loss (aka "P&L") data that has been archived from a prior full-chemistry simulation. Until now, the model would attempt to read archived O3 P&L data for the current simulation year (i.e. the year used to read in the met fields from disk).
Because the tagged O3 simulation is often used to spin up the stratosphere for new met field data sets (such as GEOS-FP), it is often desirable to use archived O3 P&L data for years that may differ from the current simulation year. Starting in GEOS-Chem v9-02, you may now specify which year of O3 P&L data to read from disk.
In routine READ_POX_LOX (in module GeosCore/tagged_ox_mod.F), we have now added this C-preprocessor #define statement:
#define USE_THIS_O3_YEAR 2004
This lets you specify the year of archived O3 P&L data that you want the tagged O3 simulation to read from disk. (If you don't want 2004, you can change the year above). If, on the other hand, you would like to read O3 P&L data for the current simulation year, simply comment out this #define statement.
Update for v10-01
These updates were validated in the 1-month benchmark simulation v10-01c and approved on 29 May 2014.
In the preceding section, we mentioned that we have placed a C-preprocesor switch named USE_THIS_O3_YEAR at the top of module GeosCore/tagged_ox_mod.F. This switch allows you to specify the year of the O3 prod/loss data files that will be read in from disk, instead of reading in this data for the current simulation year.
We have now made a couple of further modifications that let you set the value of USE_THIS_O3_YEAR at compile time rather than having to manually edit the GeosCore/tagged_ox_mod.F module file. These are:
(1) At the top of the module, comment out this line:
#define USE_THIS_O3_YEAR 2004
so that it now looks like this:
!#define USE_THIS_O3_YEAR 2004
(2) In the GeosCore/Makefile_header.mk file, add these lines in the "Special chemistry settings" section:
# Specify year of tagged O3 prod/loss data ifdef TAGO3YR USER_DEFS += -DUSE_THIS_O3_YEAR=$(TAGO3YR) endif
(3) When you compile GEOS-Chem, use the TAGO3YR option to specify the year for the O3 prod/loss data. For example:
make -j4 MET=geos4 GRID=4x5 TAGO3YR=2003 ...etc... make -j4 MET=geos5 GRID=4x5 TAGO3YR=2004 ...etc...
This will set the value of USE_THIS_O3_YEAR accordingly. This option greatly facilitates testing and debugging the tagged O3 simulation in the GEOS-Chem Unit Tester.
--Bob Y. 17:04, 30 May 2014 (EDT)
Reactivate stratospheric P(Ox) in tagged Ox simulation
These issues were resolved during the public comment period following the provisional release of GEOS-Chem v9-02 and were included in the public release of GEOS-Chem v9-02 (03 Mar 2014). This update is included in Adjoint v35j.
Jintai Lin noted that the stratospheric P(Ox) produced by the Synoz boundary condition should be passed to the Tagged Ox simulation source code in tagged_ox_mod.F. This is only for runs which use the Synoz boundary condition. If you are using Linoz, then this should be disabled.
The updates are as follows:
(1) In routine ADD_STRAT_POx (in tagged_ox_mod.F), we need to uncomment this line:
STT(I,J,L,N_STRAT) = STT(I,J,L,N_STRAT) + POx
This will restore the production of Ox in the stratosphere.
(2) In routine UPBDFLX_O3 (in module upbdflx_mod.F), we must first reference the LLINOZ flag from logical_mod.f.
USE LOGICAL_MOD, ONLY : LLINOZ
- If LLINOZ is TRUE, then we are using Linoz linear stratospheric chemistry scheme.
- If LLINOZ is FALSE, then we default to the Synoz stratopsheric boundary condition.
(3) Also in UPBDFLX_O3, we need to define J30S and J30N parameters for nested grid regions. This will allow Tagged Ox simulations for the nested grid regions to be conducted.
#elif defined( GRID05x0666 ) !INTEGER, PARAMETER :: J30S = 1, J30N = JJPAR ! Lin_20111026 #if defined( NESTED_CH ) INTEGER, PARAMETER :: J30S = 1, J30N = 83 #elif defined( NESTED_NA ) INTEGER, PARAMETER :: J30S = 1, J30N = 41 #elif defined( NESTED_EU ) INTEGER, PARAMETER :: J30S = 1, J30N = 1 ! add later #else INTEGER, PARAMETER :: J30S = 1, J30N = JJPAR #endif
(4) Further down in routine UPBDFLX_O3, we must call ADD_STRAT_POx. This will pass the P(Ox) produced by Synoz to the source code in tagged_ox_mod.F. This call is placed immediately after updating the STT tracer array:
! Store O3 flux in the proper tracer number STT(I,J,L,NTRACER) = STT(I,J,L,NTRACER) + PO3 ! Store O3 flux for strat Ox tracer (Tagged Ox only) IF ( .not. LLINOZ ) THEN IF ( ITS_A_TAGOX_SIM() ) CALL ADD_STRAT_POX( I, J, L, PO3 ) ENDIF
NOTE: The call to ADD_STRAT_POx will be ignored if we are using the Linoz linear stratospheric O3 chemistry scheme.
Replace LD65 with LLTROP in tagged_ox_mod.F
This issue was resolved during the public comment period following the provisional release of GEOS-Chem v9-02 and were included in the official release of GEOS-Chem v9-02 (03 Mar 2014). This update is included in Adjoint v35j.
Hongyu Liu wrote:
- In tagged_ox_mod.f, we need to replace all LD65 with LLTROP, as per Bob's suggestion. LD65 should be referred to only when ND65 is switched on ("T"). Also, change all LLTROP_FIX to LLTROP. My run used varying tropopause and was OK after these changes.
- In the original code, LD65 was used in the definition of arrays but should not be. Without replacing LD65 with LLTROP, we would have to always switch on ND65 (so that LD65 is defined) and output ND65 in any tagged Ox runs. And that's not what we want. The run (when ND65 = F in input.geos) would crash without this replacement.
- LD65, LLTROP and LLTROP_FIX are not the same. See CMN_SIZE for LLTROP and LLTROP_FIX:
- LLTROP=22 (GEOS-4 reduced) or 38 (GEOS-5 reduced).
- LLTROP_FIX=17 (GEOS-4 reduced) or 38 (GEOS-5 reduced).
- Without changing LLTROP_FIX to LLTROP, a tagged Ox run with GEOS-5 would work fine because LLTROP_FIX happened to be the same as LLTROP, but a tagged Ox run with GEOS-4 would have problems (e.g., GEOS-4 Ox prod/loss rates have 22 vertical levels but LLTROP_FIX is only 17).
--Bob Y. 11:03, 1 November 2011 (EDT)
In GEOS-Chem v10-01 and higher versions, you can create run directories for the Tagged O3 simulation from the GEOS-Chem unit tester. Please see our Creating GEOS-Chem run directories wiki page for more information.
Text to be added
Previous issues that are now resolved
Reading P(O3) and L(O3)
The Tagged O3 simulation now reads P(O3) and L(O3) fields via the HEMCO emissions component.
Fix bug in calculation of L(Ox)
This update was included in v11-02f (approved 17 May 2018).
Daniel Jacob wrote:
- I think I found the bug in the tagged Ox simulation. In deriving loss frequencies, L(Ox) should be divided by Ox and not by O3. In surface boxes over China or downwind where ozone is titrated to NO2, the bug will cause very large loss frequencies. When you then apply those to the tagged Ox simulation (and you use the linear loss approximation to the exponential) you end up with negative Ox.
Possible ND20 bug in v10-01
Lu Shen found that the tagged ozone simulation might have a bug in v10-01. The ozone loss rate in ND20 has many extreme values. Please contact him (email@example.com) if you find a similar problem. Thanks.