GEOS-Chem v8-02-01

From Geos-chem
Jump to: navigation, search


CHEMISTRY RELEASE date May 26, 2009.

What's new in this version

Contains everything v8-01-04, plus the following:

  1. Glyoxal chemistry (May Fu) (NOTE: This is an option which is turned off by default)
  2. Updated photolysis cross-sections and quantum yields to FAST-JX (Jingqiu Mao)
  3. Updated reaction rates (Jingqiu Mao, Dylan Millet, Palmer group @ U. Edinburgh)
  4. HO2 uptake (Lyatt Jaeglé)
  5. Updated dust single scattering albedo (Randall Martin)

1-year benchmarks


Three GEOS-Chem model versions were compared to each other:

Color Quantity Plotted Met Field Type Anthro Emissions Photolysis
Annual Mean OH
[105 molec/cm3]
Red v8-01-04 Run1 GEOS-5 4x5
version 5.0.1
w/ "quick fix"
for optical depth

spinup: 2005
run: 2005
EDGAR emissions
EMEP European emissions
BRAVO Mexican emissions
David Streets 2006 emissions
CAC Canadian emissions
EPA/NEI99 with ICARTT fix
EDGAR ship emissions
ARCTAS ship SO2 emissions
Anthro scale year 2005
"old" jv_spec.dat Mostly unchanged
from v5-07-08
except for
a few revisions
Green v8-01-04 Run2 GEOS-5 4x5 version 5.1.0,
"reprocessed" met fields

spinup: 2004
run: 2005
" " " " " " 11.099
Blue v8-02-01 Run0 " " " " "updated" jv_spec.dat "updated" chemical mechanism
(cf. J. Mao, D. Millet,
T-M. Fu, Palmer Group
@ U. Edinburgh)
Black Observations          


  1. v8-01-04 Run2 vs. v8-01-04 Run1 is a clean comparison between the GEOS-5.0.1 and GEOS-5.1.0 met products.
  2. v8-02-01 Run0 vs. v8-01-04 Run2 is a clean validation for the new chemistry mechanism, photolysis rates, and other updates that were added into v8-02-01.
  3. All runs used the same:

We have archived the files for v8-02-01-geos5-Run0 into TARBALL (i.e. tar.gz) format to save disk space. To download the TARBALL containing all relevant files, type:

get gcgrid/geos-chem/1yr_benchmarks/v8-02-01/v8-02-01-geos5-Run0.tar.gz

And then to extract the data, type:

tar xvzf v8-02-01-geos5-Run0.tar.gz

The comparison plots will be in located in the output/pdf folder.

--Bob Yantosca (talk) 15:42, 20 June 2017 (UTC)

Previous issues now resolved in v8-02-01

The following user-reported bugs have now been corrected in v8-02-01:

Output selected tracers only for dry and wet deposition, convection and rain diagnotics

NOTE: We are phasing out binary punch diagnostics output, in favor of netCDF output.

Mike Barkley wrote:

Hi all,
I've noticed for several of the diagnostics that when the ctm.bpch file is produced all the possible tracers are always written irrespective of whether or not you have only specified certain ones in the input.geos file.
For example, for dry deposition one might want only: NO2, O3, PAN, HNO3, H2O2, PMN, PPN, R4N2, CH2O & N2O5. In which case the settings would be in input.geos:
   ND44: Drydep flx/vel    :  1   1 2 3 7 8 15 16 17 20 22
However, if you run the model (I used 4x5 resolution, ifort v10 compiler,4 cores) ALL the dry deposition species are dumped out.
This error also occurs for the following diagnostics:
   1) ND17 & ND18
   2) ND37: Updraft scav frac : 20   7 8 20 24            
For these species it only outputs tracer numbers: 30028, 30029 & 30041 and the tracer names are not written out to the bpch file (I use gamap v2.12) ??
   3) ND38 & ND39

Claire Carouge wrote:

Hi Mike,
The code that writes the diagnostics you've indicated was not taking into account the specified list of tracers. So all tracers were always written in ctm.bpch.
For ND37, the selection of tracers was badly done.
To correct this, you only need to make changes in the file diag3.f.
For diagnostic ND37, you need to change the lines :
        DO M = 1, TMAX(37)
           N = TINDEX(37,M)
           ! Cycle if N is too high
           IF ( N > NMAX ) CYCLE

           ! Tracer number
           NN = GET_WETDEP_IDWETD( N )

           DO L = 1, LD37
              ARRAY(:,:,L) = AD37(:,:,L,M) / SCALECONV
        ! Get actual # of soluble tracers

        ! Loop over soluble tracers
        DO N = 1, NMAX

           ! Tracer number 
           NN = GET_WETDEP_IDWETD( N )

           ! To output only the species asked in input.geos 
           ! (ccc, 5/15/09)
           MM  = 1
           MMB = 0
           DO WHILE ( MMB /= NN .AND. MM <= TMAX(37) )
              MMB = TINDEX(37,MM)
              MM  = MM + 1
           IF ( MMB /= NN ) CYCLE

           DO L = 1, LD37
              ARRAY(:,:,L) = AD37(:,:,L,N) / SCALECONV

For each diagnostic ND17, ND18, ND38, ND39 and ND44, you need to add the following lines :
           ! To output only the species asked in input.geos 
           ! (ccc, 5/15/09)
           MM  = 1
           MMB = 0
           DO WHILE ( MMB /= NN .AND. MM <= TMAX(17) )
              MMB = TINDEX(17,MM)
              MM  = MM + 1
           IF ( MMB /= NN ) CYCLE
These lines have to be added between the line initializing NN and the lines populating the ARRAY variable. See how it's done in ND37 (upper in this email) for an example. You need to change the index in TMAX and TINDEX to match the diagnostic number.

The diagnostic ND44 writes two different categories to ctm.bpch, 'DRYD-FLX' and 'DRYD-VEL'. There is one loop over the tracers for each category so you need to add the previous lines of code into each loop. Other diagnostics write two categories to ctm.bpch but they are written in the same tracer loop, so it is enough to add the previous lines of code only once.

--Ccarouge 09:49, 19 May 2009 (EDT)

On-the-fly regridding for 0.5x0.667 nested grids


NOTE: Module regrid_1x1_mod.F was removed from GEOS-Chem v10-01 and higher versions.

Win Trivitayanurak wrote:

this is a follow up to the data regridding problem that I ahve discussed with Philippe the other day. The problem was that, for my China nested-grid 0.5x0.667 simulation, the subroutine DO_THE_REGRIDDING in regrid_1x1_mod.f previously did not have the case for nested-grid 0.5x0.667. Therefore, I wrote a new subroutine called REGRID_05x0666_NESTED and added the call for it inside the existing subroutine DO_THE_REGRIDDING. This should work just fine w/ a N.America nested-grid 0.5x0.667 simulation too but will halt the run if used for running other region, which only makes sense. Please see in the attached file.

The regrid_1x1_mod.f file given by Win was included in GEOS-Chem v8-02-01.

--Ccarouge 15:50, 7 May 2009 (EDT)
--Bob Yantosca (talk) 20:34, 13 April 2016 (UTC)

Bug with EMEP ship emissions for nested grids


This update was introduced in emfossil.f in GEOS-Chem v8-02-01.

NOTE: routine emfossil.F was removed from GEOS-Chem v10-01 and higher versions. Emissions in these versions are now handled by HEMCO.

Please see this wiki post for a description of an error in the EMEP European anthropogenic emissions for nested-grid simulations.

--Bob Y. 11:54, 20 December 2012 (EST)

Bug in sulfate_mod.f to turn off biomass emissions


NOTE: This code was removed from GEOS-Chem v10-01 and higher versions. Emissions in these versions are now handled by HEMCO.

Win Trivitayanurak wrote:

In subroutine EMISSSULFATE inside sulfate_mod.f, there should be the switch LBIOMASS to check if the GET_BIOMASS SO2 and GET_BIOMASS_NH3 should be called or not. Before this fix, the code leaves no choice to cleanly turn off biomass burning emission completely because these two calls would occur everytime it is a new month. Please see the attached file in the mentioned subroutine where I commented.

The modifications to sulfate_mod.f file given by Win are now implemented in v8-02-01.

--Ccarouge 15:50, 7 May 2009 (EDT)

Minor error in gamap_mod.f

Noelle Selin wrote:

In my testing/debugging, the compiler found another problem: in gamap_mod, line 1313 and forward (init_tracerinfo):
   DO T = 1, N_TRACERS

      ! Store quantities for each tracer
      NAME (T,45) = TRACER_NAME(T)
      FNAME(T,45) = TRIM( NAME(T,45) ) // ' tracer'
      MOLC (T,45) = INT( TRACER_COEFF(T,1) )
      SCALE(T,45) = 1.0e+9
      INDEX(T,45) = N
The error pulled was that N did not have a previous value. Should it be T? (I changed it to T and it seemed OK...but again it's gamap_mod so it doesn't seem like a big deal).

Philippe Le Sager wrote:

yes, it should be T. We recently found about that when debugging for Jenny, and we already put it in the next version being tested now.

--Bob Y. 12:28, 6 May 2009 (EDT)

Bug fix for Streets emissions on 0.5x0.666 nested grid


NOTE: This code was removed from GEOS-Chem v10-01 and higher versions. The Streets emissions are now handed by HEMCO.

We found the v8-01-04 of Geos-Chem doesn't read the correct Streets emission files for the 0.5x0.666 nested grid over China. Right now it would read Streets emissions at 1x1 resolution and regrid them.

To correct it, you need to change :

         ! Read David Streets' emisisons over China / SE ASia
         IF ( LSTREETS .and. ITS_A_NEW_MONTH() ) THEN

by :

         ! Read David Streets' emisisons over China / SE ASia
         IF ( LSTREETS .and. ITS_A_NEW_MONTH() ) THEN
#if   defined(GRID05x0666)
            CALL EMISS_STREETS_ANTHRO_05x0666  

in emission_mod.f for every call to EMISS_STREETS_ANTHRO. I.e in the case of full chemistry, offline aerosol, tagged CO, CH4, CO2 and offline H2/HD.

In streets_anthro_mod.f, in the subroutine emiss_streets_anthro_05x0666, you need to change all the lines :


by :

        CALL READ_STREETS_05x0666(...

WARNING : make sure to change the calls to READ_STREETS only in the emiss_streets_anthro_05x0666 subroutine and NOT in emiss_streets_anthro.

--Ccarouge 15:30, 11 March 2009 (EDT)
--Bob Yantosca (talk) 20:32, 13 April 2016 (UTC)

Outstanding Issues in v8-02-01

Bug with ND52 diagnostic

NOTE: We are phasing out binary punch diagnostics output, in favor of netCDF output.

The ND52 diagnostic for gamma(HO2) doesn't work if you ask to output a subset of levels. You need to add a check on the levels when calculating AD52. You need to change the following lines in calcrate.f:

              IF ( ND52 > 0 ) THEN
                 ! Archive gamma HO2 in AD52
                  AD52(IX,IY,IZ) =
    &                 AD52(IX,IY,IZ) + DUMMY3(KLOOP)


              IF ( ND52 > 0 ) THEN
                 ! Archive gamma HO2 in AD52
                 IF ( IZ <= LD52 ) THEN
                    AD52(IX,IY,IZ) =
    &                    AD52(IX,IY,IZ) + DUMMY3(KLOOP)

This bug was solved in v8-02-02.

--Ccarouge 16:51, 16 June 2009 (EDT)

Bug with PRIVATE declaration in sulfate_mod.f

In SRCNH3 (in sulfate_mod.f), please replace the PRIVATE declaration line 4939 :


with the PRIVATE declaration :


and in SRCSO4 please change the PRIVATE declaration in line 4690 from:




In both cases the CAC_AN variable has to be added to the PRIVATE declaration.

--Ccarouge 10:22, 28 May 2009 (EDT)

Bug with online 2ndary aerosol

Replace line 412 of aerosol_mod.f:



    IF ( IDTSOAM > 0 ) THEN

This is a bug in GEOS-Chem v8-02-01 release. However, it is more of a matter of Fortran style. The expression in parentheses in the IF statement should be a logical expression and not an integer expression, as is the case above. Some compilers (e.g. PGI) will always choke on this. However, other compilers (e.g. IFORT) will evaluate the expression as TRUE if the integer IDTSOAM is nonzero. This will be fixed in the following release.

--phs 09:56, 28 May 2009 (EDT)

--Bob Y. 10:46, 28 May 2009 (EDT)

Typo in HO2 uptake

Jingqiu Mao found a typo in the function calculating HO2 uptake by aerosols. This function was added in v8-02-01 and thus the typo only affects v8-02-01 and v8-02-02.

In calcrate.f, line 1338 (v8-02-01) or line 1423 (v8-02-02) there is a misplaced space. Please change:

           kaq = ( k1 * (A1 - 1.d0) + k 2) / (A1**2)


           kaq = ( k1 * (A1 - 1.d0) + k2) / (A1**2)

--Ccarouge 17:41, 9 June 2009 (EDT)