On this page we describe the implementation of the dynamic tropopause in GEOS-Chem.
GEOS-Chem is primarily a tropospheric model of atmospheric chemistry and composition. Its NOx-Ox-HC-aerosol (aka "full chemistry") simulation employs a detailed chemistry mechanism is used in the troposphere, while a much simpler mechanism (based on simple loss rates by OH and photolysis) is invoked in the stratosphere. Therefore, a robust definition of the tropopause is required.
In ancient versions of GEOS-Chem, the tropopause was denoted by a single level (LLTROP). The "full chemistry" mechanism was solved for in all grid boxes up to level LLTROP. However, using a single level to represent the tropopause significantly underestimated the tropopause height in the tropics.
GEOS-Chem v3-01 was the first version to include a more realistic tropopause. An annual mean tropopause was computed by running GEOS-Chem with 1 year of met data to compute the tropopause location (diagnosed where the lapse rate of temperature fell below 2 K/km). The annual mean tropopause had to be computed for each vertical (e.g. GEOS-1, GEOS-STRAT, GEOS-3, GEOS-4) and horizontal (e.g. 2° x 2.5°, 4° x 5°) grid combination. While satisfactory for many applications, the major drawback of the annual mean tropopause was that it did not accurately reflect the interannual variability of the tropopause location.
GEOS-Chem v7-04-10 improved upon the situation by introducing a dynamic tropopause. This is now the default option and we recommend all GEOS-Chem users to turn this feature on. The location of the tropopause is now computed at each dynamic timestep of a GEOS-Chem simulation, according to the following criterion:
IF ( Pedge(I,J,L) > TROPP(I,J) ) THEN ! We are in the troposphere IS_TROP = .TRUE. ELSE ! We are in the stratosphere IS_TROP = .FALSE. ENDIF
Pedge(I,J,L) is the pressure [hPa] at the BOTTOM EDGE of grid box (I,J,L) TROPP(I,J) is the tropopause pressure [hPa] from the GEOS or GCAP met field archive
- For both the annual mean and dynamic tropopause options, the parameter LLTROP represents the maximum extent of the tropopause in model levels.
- Some offline chemistry simulations still use the annual mean tropopause. Other offline simulations perform chemistry from the surface to the atmosphere top without regard for the tropopause location.
--Bob Y. 13:56, 13 September 2010 (EDT)
GEOS-Chem archives tropopause pressure at two different places in the timestepping process.
- The ND67 diagnostic is archived directly after reading the tropopause pressure from disk. No further processing is done to the tropopause pressure before saving to ND67. Therefore, ND67 should be directly comparable to the tropopause pressure as stored in the “raw” GEOS met data files.
- On each dynamic timestep (typically 15 or 30 mins), the tropopause pressure poleward of 60N and 60S is capped at 200 hPa. This ensures that SMVGEAR or KPP chemistry will not be performed at unrealistically high altitudes in the polar regions. The ND55 diagnostic is archived at the end of each dynamic timestep. Therefore, ND55 represents the tropopause pressure (including the polar cap) that is used to diagnose where the GEOS–Chem tropopause occurs at each dynamic timestep.
Please also see our presentation about the GEOS-Chem Tropopause Diagnostics (PDF).
Modifications to ND55 diagnostic
The ND55 diagnostic was originally developed for GEOS-Chem using the annual mean tropopause. The tropopause level was first computed by searching for where the temperature lapse rate fell below 2 K/km. Then the tropopause height H and pressure were computed from this tropopause level and saved to the AD55 array as follows:
L = ... level at which tropopause occurs ... AD55(I,J,1) = AD55(I,J,1) + L AD55(I,J,2) = AD55(I,J,2) + H(I,J,L) / 1.0d3 ! m --> km AD55(I,J,3) = AD55(I,J,3) + GET_PCENTER(I,J,L)
Note that the tropopause pressure was taken as the pressure at the center of the grid box (I,J,L) where the tropopause occurs. This approximation is not the same as the actual tropopause pressure, which we now obtain directly from the met fields.
Starting with GEOS-Chem v9-01-01, the ND55 diagnostic will be updated to report more accurately the tropopause pressure and height. The tropopause pressure from the met field archive will be directly archived to the AD55 array as follows:
AD55(I,J,3) = AD55(I,J,3) + TROPP(I,J) ! T'pause pressure [hPa]
Also, the tropopause height will now be accurately computed to be consistent with the tropopause pressure taken from the met fields.
--Bob Y. 16:09, 13 September 2010 (EDT)
Text needs to be added ...
Previous issues that are now resolved
Buggy implementation in v7-04-12
Note that the implementation of the variable tropopause is buggy in versions prior to GEOS-Chem v7-04-12. If you are using versions prior to v7-04-12, you should turn the variable tropopause OFF.
Jennifer Logan (see correspondence below) suggested that we should cap the variable tropopause at 200hPa in near-polar regions (90-60S and 60-90N), to avoid the problem with anomalously high tropopause heights at high latitudes. This fix was standardized in GEOS-Chem v7-04-13.
Jennifer Logan wrote:
- After looking at the two papers I sent, I think we should restrict the tropopause at latitudes > 60 deg. to pressures greater than 200 mb (about 11 km). From Fig. 3 in Seidel and Randel, there are tropopause (TP) heights as high as 13.5 km in the Antarctic (median height is ~9.8 km, 250 mb), but I don't think we want to be doing trop. chem there. The median TP pressure at ~80 N is ~300 mb, compared to ~250 mb at 70-85 S. The extratropical TP heights are higher (lower pressure) in the SH than in the NH according to Fig. 3.
- This approach is also very easy to explain in a paper.
Problem reading GEOS-4 TROPP files
Dave MacKenzie wrote:
- We encountered an I/O Error 29 with file 69 when trying to run GEOS4 v8-01-01 with the variable tropopause turned on at 4x5 resolution. When I investigated this problem further, I found that there was no code written to copy and unzip the YYYYMMDD.tropp.4x5.gz files. Since I didn't see any mention of this online for v8-01-01 or newer versions, I thought I should bring it to your attention.
- The *.tropp* files are accessed in i6_read_mod.f but there is only code included to use the data in those files and erase them from the TEMP directory. No code was included to actually copy them into the TEMP directory and unzip them. I wrote in a few lines of code and our problems disappeared. After running the code for one day, it finished smoothly with no problems. Then I tried running it for 2 years and it crashed after two months (I/O error 67 in file 72, input statement requires too much data). I don't know if it's a related problem to the changes I made or something else, but I thought I'd bring this to your attention. Thanks!
Bob Yantosca replied:
- Yes...the TROPP files for GEOS-4 were an afterthought. We have always stored the GEOS-4 data as uncompressed, in order to avoid the problem. That might be a good solution if you have the disk space.
--Bob Y. 16:44, 18 February 2009 (EST)
Defining LLTROP for GEOS-5 72-layer grid
This fix was incorporated into GEOS-Chem v9-01-01 and higher versions.
CHECK_VAR_TROP: LLTROP is set too low! MAX TROPOSPHERE LEVEL = 39 and LLTROP = 38 STOP in TROPOPAUSE_MOD.F!!!
The LLTROP parameter denotes the highest level that is purely tropopsheric. To save memory, many GEOS-Chem allocates several global arrays with only LLTROP vertical levels.
For the GEOS-5 47-level "reduced" vertical grid, we have set LLTROP to level 38. However, GEOS-Chem creates this level by aggregating levels of the 72-layer grid together. As a result, when you run a simulation on the full GEOS-5 72-layer vertical grid, it is possible that the tropopause may extend beyond level 38. Therefore, the value of LLTROP needs to be reset for the full GEOS-5 72-layer grid.
We have modified the #if defined statements in the include file Headers/CMN_SIZE. The value of LLTROP now depends on whether you are using the "reduced" 47-layer grid, or the full 72-layer grid.
#if defined( GRIDREDUCED ) INTEGER, PARAMETER :: LLPAR = 47 ! Reduced vertical grid INTEGER, PARAMETER :: LLTROP_FIX = 38 ! -- 47 levels INTEGER, PARAMETER :: LLTROP = 38 #else INTEGER, PARAMETER :: LLPAR = LGLOB ! Full vertical grid INTEGER, PARAMETER :: LLTROP_FIX = 40 ! -- 72 levels INTEGER, PARAMETER :: LLTROP = 40 #endif
Similar blocks have been added to the following sections of Headers/CMN_SIZE:
- GEOS-5, 4° x 5°
- GEOS-5, 2° x 2.5°
- GEOS-5, 1° x 1.25°
- GEOS-5, 0.5° x 0.667° nested grids
- MERRA, 4° x 5°
- MERRA, 2° x 2.5°
--Bob Y. 14:54, 30 November 2010 (EST)
Bug in ND67 diagnostic
This fix was incorporated into GEOS-Chem v9-01-01 and higher versions.
Jianjun Jin wrote:
- I went to back to your benchmark run results ctm.bpch.v8-03-01. There are outputs for both ND67 (TROPP, tracer=11017) and ND55 (TP-PRESS, tracer=26003). They are quite different. The ND55 is ok, but the ND67 is too large.
Bob Yantosca wrote:
- I found the problem. It turns out that in GEOS-4, the TROPP field was an I-6 field (archived every 6 hours, or 4X/day). However, in GEOS-5, the TROPP field is an A-3 field (archived every 3 hours, or 8X/day).
- If you look at diag3.f we have this code:
IF ( ND67 > 0 ) THEN CATEGORY = 'DAO-FLDS' ! Binary punch file DO M = 1, TMAX(67) N = TINDEX(67,M) NN = N SELECT CASE ( N ) ... CASE ( 17 ) SCALEX = SCALE_I6 UNIT = 'hPa'
The 17th slot of DAO-FLDS ND67 diagnostic is TROPP. Note that we are dividing by SCALE_I6, which is the # of I6 timesteps. We should be dividing by SCALE_A3, which is the # of A3 timesteps. So somehow we forgot to make this change when we switched from GEOS-4 to GEOS-5.
--Bob Y. 16:19, 13 September 2010 (EDT)
Problems with dynamic tropopause and adjoint model
NOTE: a fix for this issue was added into GEOS-Chem and tested in the 1-month benchmark simulation v9-01-02a. The fix was approved on 28 Jun 2011, so we now consider this a resolved issue.
Daven Henze wrote:
- Jamin Koo at MIT has noticed an issue with the variable tropopause in GEOS-Chem forward model:
- Jamin Koo wrote:
I think what is happening is there is a shift in the indexing in the forward module. (please look at attached image.pdf) When it is partitioning, it is accessing the OLD values of CSPEC with NEW index. So all the following grid boxes are looking at the wrong CSPEC's grid. RURALGRID module changes the indexing, and this happens before partition in CHEMDR_MOD.f
The upshot is that while this may have not had noticeable impacts on the forward model, it can cause very bizarre sensitivities for the adjoint:
(STT_ADJ for NOx changed from 14797.0983063715 to -657998926.747741 comparing before and after CHEMDR_ADJ)
- While we work towards fixing this in the forward model, and the corresponding update to the adjoint, I would recommend turning off the variable tropopause option in input.geos for users looking at full chemistry simulations sensitive to concentrations in the upper troposphere.
- Below is an example from Jamin showing how the variable tropopause option can lead to odd adjoint values. This is a timeseries of adjoint values summed over the columns, displayed running backwards in time. Note the difference in the sensitivities near antarctica during the final third of these animations.
- fixed tropopause : http://web.mit.edu/jaminkoo/Public/adj_NOx_fxdTP_comp.avi
- variable tropopause : http://web.mit.edu/jaminkoo/Public/adj_NOx_varTP_comp.avi
--Bob Y. 14:12, 6 July 2011 (EDT)