GEOS-Chem v9-01-01

From Geos-chem
Revision as of 22:55, 17 February 2011 by Ccarouge (Talk | contribs) (Outstanding issues not yet resolved in v9-01-01)

Jump to: navigation, search

Overview

PUBLIC RELEASE -- Feb 10 2011

What's new in this version

GEOS-Chem v9-01-01 contains the following major updates and improvements:

  1. Capability to run with GMAO MERRA met fields (R. Yantosca)
  2. Improvements to algorithms for convective updraft scavenging and wet deposition (H. Amos, B. Corbitt)
  3. Updated volcanic SO2 emissions from Aerocom (J. Fisher)
  4. Allow both washout and rainout to occur when new precipitation forms (Q. Wang)
  5. Updated lightning parameterization and fix for cloud-top-height algorithm (L. Murray)

--Bob Y. 10:51, 10 February 2011 (EST)

New data directories

The following new data directories have been added for GEOS-Chem v9-01-01. You will have to download the directories relevant to your simulation. (For example, if you are not using the nested grid simulations, or if you are not using the mercury simulation, you don't have to download those.)

You can download these directories with anonymous FTP or the Wget utility. For instructions, please see Chapter 2.4, Downloading the GEOS-Chem shared data directories in the GEOS-Chem Online User's Guide.

GEOS_0.5x0.666_CH/lightning_NOx_201101    # China/SE Asia nested-grid
GEOS_0.5x0.666_NA/lightning_NOx_201101    # N. American nested-grid
GEOS_2x2.5/lightning_NOx_201101           # 2 x 2.5 fullchem simulation
GEOS_4x5/lightning_NOx_201101             # 4 x 5 fullchem simulation

GEOS_1x1/CO2_201003                       # CO2 simulation only
GEOS_2x2.5/CO2_201003                     # CO2 simulation only
GEOS_4x5/CO2_201003                       # CO2 simulation only

GEOS_1x1/volcano_SO2_201010               # Global full-chemistry simulations

GEOS_1x1/mercury_201002                   # Hg simulation only
GEOS_4x5/mercury_201007                   # Hg simulation only

GEOS_1x1/EMEP_200911/EMEP_mask.geos.1x1   # Corrected mask for EMEP ship emissions

--Bob Y. 14:24, 11 February 2011 (EST)

Previous issues now resolved in v9-01-01

Patches from v8-03-02

The following bug fix patches from v8-03-02 are now standardized in v9-01-01:

  1. Transport fix for GEOS-5 nested grid simulations at 0.5° x 0.666°
  2. Typo in globchem.dat affecting yield of isoprene nitrates
  3. Updated KPP solver files (to account for the isoprene nitrate changes in globchem.dat)
  4. The parallelization problem in routine setemis.f that caused GEOS-Chem to scale poorly.
  5. The error that caused ND49 diagnostic files to not be closed at the proper time.

--Bob Y. 10:20, 12 November 2010 (EST)

Bug fix for biofuels in EPA/NEI05

A bug in the EPA/NEI05 emissions code was found prior to the release of GEOS-Chem v9-01-01. Long story short: when the EPA/NEI05 option is selected, the wrong biofuel emissions inventory is used over the continental USA.

This bug will be fixed in v9-01-01 and higher versions. For a complete description, please see this post on our EPA/NEI05 wiki page.

--Bob Y. 11:29, 8 February 2011 (EST)

Important bug fixes for ship emissions

Geert Vinken has submitted a couple of important fixes for ship emissions. These have been added to v9-01-01. For more information, please see the following links:

  1. Bug fix for ship emissions in emfossil.f
  2. Updated mask for EMEP ship emissions

--Bob Y. 15:35, 10 January 2011 (EST)

Duplicate diagnostics

Chris Holmes wrote:

I turned on diagnostics ND14-15 (convection and BL mixing) and ND24-26 (U/V/W transport fluxes), plus the other diagnostics that are on by default. I ran the simulation for 1 day. The ctm.bpch output contains *two* copies of ND14-15 and ND24-26 outputs. The other diagnostics appear normal.

In fact, the diagnostics are not written twice in the ctm.bpch file. The problem is a double definition of the categories of these diagnostics in gamap_mod.f. These diagnostics appear then twice in diaginfo.dat with two different offsets (3000 and 4000). GAMAP will then print these diagnostics twice. The fix is to comment one definition of these diagnostics in gamap_mod.f. Please comment the lines with the 4000 offset (see the SPACING * 4) in gamap_mod.f:

!      N           = N + 1
!      CATEGORY(N) = 'CV-FLX-$'
!      DESCRIPT(N) = 'Upward flux from wet conv'
!      OFFSET(N)   = SPACING * 4
!
!      N           = N + 1
!      CATEGORY(N) = 'TURBMC-$'
!      DESCRIPT(N) = 'Upward flux from PBL mixing'
!      OFFSET(N)   = SPACING * 4
!
!      N           = N + 1
!      CATEGORY(N) = 'EW-FLX-$'
!      DESCRIPT(N) = 'E/W transport flux'
!      OFFSET(N)   = SPACING * 4
!
!      N           = N + 1
!      CATEGORY(N) = 'NS-FLX-$'
!      DESCRIPT(N) = 'N/S transport flux'
!      OFFSET(N)   = SPACING * 4
!
!      N           = N + 1
!      CATEGORY(N) = 'UP-FLX-$'
!      DESCRIPT(N) = 'Up/down transport flux'
!      OFFSET(N)   = SPACING * 4

--Ccarouge 14:58, 21 September 2010 (EDT)

Starting runs at times other than 00 GMT

The MEGAN biogenic emissions reads in several days of A3 data before the first timestep of a G-C simulation. In routine DO_OPEN_A3 (which determines if it is the right time to open a new file), we have this IF statement:

     LOGICAL, SAVE :: FIRST    = .TRUE.
        ...   
     ! Open A-3 file if it's 01:30 GMT,  or on the first call
     IF ( NHMS == 013000 .or. FIRST ) THEN
        DO_OPEN = .TRUE.
        ...
   

Therefore, when MEGAN was turned on, FIRST was set to .FALSE. because we were reading more than one day of A3 data. This caused the IF statement above to fail if we wanted to start a G-C simulation at any other time than 00 GMT.

The quick fix was to introduce an optional logical flag RESET, such that:

     ! Reset the FIRST flag if
     IF ( PRESENT( RESET ) ) THEN
        IF ( RESET ) FIRST = .TRUE.
     ENDIF
   

This makes sure that the FIRST flag is not affected by the prior A3 reads by the MEGAN emissions.

We now call OPEN_A3_FIELDS with RESET=.TRUE. from main.f for the very first time we read in the A3 data (before the time-stepping loop).

The analogous fix was also made for the MERRA reading code in merra_a1_mod.f.

Further fixes were also added as follows:

  1. Modify GET_FIRST_A3_TIME (a3_read_mod.f) to pick the first A3 data time based on the initial NYMD/NHMS
  2. Modify GET_FIRST_A6_TIME (a6_read_mod.f) to pick the first A6 data time based on the initial NYMD/NHMS
  3. Add routine GET_FIRST_I6_TIME (i6_read_mod.f) to pick the first I6 data time based on initial NYMD/NHMS
  4. Modify GET_I6_TIME (i6_read_mod.f) to find the proper I6 data time for the "6-hours-ahead" I6- data
  5. In main.f, now compute NSECb and ELAPSED_TODAY as the elapsed time since the start of the day (not the start of a GEOS-Chem simulation). This makes the interpolated fields in routine INTERP (dao_mod.f) work properly for non-00 GMT start times.

--Bob Y. 16:24, 27 September 2010 (EDT)

Fix ND15 for non-local PBL scheme

Chris Holmes wrote

When the non-local PBL mixing is on the TURBMC-$ diagnostic appears to save the mass tendency (kg/s) due to *all* boundary layer processes, i.e. PBL mixing + emission + dry deposition. It is supposed to be the tendency due to mixing alone.

This will be fixed in version 9-01-01 so that ND15 only output the PBL mixing and free troposphere diffusion, if any. If you do not want to wait for v9-01-01, you can apply this Git patch to your code. Please refer to the instructions to use patch files.

--Ccarouge 10:46, 24 September 2010 (EDT)

Fix to prevent div-by-zero in sulfate_mod.f

Jamin Koo discovered a potential source for a division-by-zero error in routine CHEM_SO2 (in sulfate_mod.f). To prevent this error, we modified the IF statements where the terms L2S and L3S are computed.

We changed the lines:

IF ( IS_SAFE_EXP( XX ) ) THEN

to:

IF ( IS_SAFE_EXP( XX ) .and. ABS( XX ) > 0d0 ) THEN

When computing the term L2S, the term XX = SO2_ss - H2O20. If SO2_ss = H2O20 = 0 (a rare but potentially possible condition), then XX = 0 and the denominator of the equation that defines L2S will go to zero. This will cause a div-by-zero condition, which may generate an Infinity or NaN value. Such denormal values can propagate through the code, adversely affecting other computations.

Therefore, when XX = 0, we skip over the "IF" portion of the statement to the "ELSE" block, where L2S is assigned a default value.

This error can also happen in the computation of L3S. In this case XX = SO2_ss - O3. Therefore, if SO2_ss = O3 = 0, then the div-by zero condition occurs. Rewriting the IF statement as described above solves the problem.

--Bob Y. 14:52, 12 November 2010 (EST)

PEDGE-$ in timeseries diagnostics

Jaegun Jung wrote:

When I read PEDGE-$ in the ND49 tsYYYYMMDD.bpch files, only the first layer has significant values. From the second to the top layer, there are all zeros. According to the GEOS-Chem website, it says that ND49 still outputs PS-PTOP which is supposed to be available at the first layer. I think this feature still in ND49.

Bob Yantosca wrote:

Yes, you are correct. At present, the ND49 diagnostic is just saving out the Psurface - PTOP quantity at the surface model level. This is just historical baggage and nobody has cleaned it up since. The Psurface - PTOP quantity only really made sense for pure-sigma grids (like GEOS-1, GEOS-STRAT, and GEOS-3), since the sigma coordinate depends on this term. Therefore this diagnostic is now obsolete.
I have just modified the timeseries diagnostics (ND48, ND49, ND50, ND51, ND51b) so that they now save out the quantity PEDGE-$ (pressure at the bottom edge of each requested level) instead of Psurface - PTOP. This will be included in v9-01-01.

--Bob Y. 16:31, 12 November 2010 (EST)

Running offline simulations on the GEOS-5 72L grid

If you try to run one of the Offline chemistry simulations on the GEOS-5 72-level vertical grid, you may encounter an error such as this:

CHECK_VAR_TROP: LLTROP is set too low!
MAX TROPOSPHERE LEVEL =  39 and LLTROP =  38
STOP in TROPOPAUSE_MOD.F!!!

Please see this post on our Dynamic Tropopause wiki page for a full description of how this issue was corrected.

--Bob Y. 14:58, 30 November 2010 (EST)

Fixes to improve efficiency in vdiff_mod.f90

We have made several minor fixes in module vdiff_mod.f90 (i.e. the non-local PBL mixing scheme) in order to avoid parallelization errors and achieve better memory management. The fixes include:

  1. Use better method to flip arrays in vertical
  2. Retire the UPSIDEDOWN subroutine.
  3. Initialize local arrays at top of subroutine
  4. Replace instances of as2(I,J,1,NN) with as2_scal(I,J,NN) to avoid parallelization errors
  5. Combine flipping vertical dimension of AS2 with unit conversion from v/v -> kg/kg
  6. Only call routine SETEMIS if we are doing a full-chemistry simulation
  7. Define constants with the PARAMETER tag, for safety's sake
  8. In subroutine VDIFFDR, pre-save the results of the function calls ITS_A_*_SIM to local variables outside of the parallel DO loops.
  9. Minimize dependency on the NCS variable from SMVGEAR comode.h common blocks
  10. Updated comments

--Bob Y. 15:46, 10 January 2011 (EST)

Typos in megan_mod.f

Dylan Millet wrote:

I found a (hopefully minor) bug in megan_mod.f. I don't have the latest v9-01-01 yet but it's present in my v8-03-01. In routine INIT_MEGAN, after a number of the allocation statements the incorrect array is then initialized to zero.
For instance (this is at line 2663 of my version):
      ! -- Direct --
      ALLOCATE( PARDR_DAY( IIPAR, JJPAR, DAY_DIM ), STAT=AS )
      IF ( AS /= 0 ) CALL ALLOC_ERR( 'PARDR_DAY' )
      T_DAY = 0d0

      ... etc ...
The ones that follow this one are similarly incorrect. I haven't yet checked if it actually makes a difference or not.

Bob Yantosca replied:

Thanks for the bug catch. I don't think this makes a difference because the variables PARDR_DAY, PARDF_DAY, etc. are initialized to the current met fields in routine UPDATE_T_DAY. Nevertheless, we'll add the fix to v9-01-01.

--Bob Y. 17:22, 7 February 2011 (EST)

Typos in edgar_mod.f

In routines READ_C2H2 and READ_C2H4 of edgar_mod.f, the data directory was wrongly listed as EDGAR200607 instead of EDGAR_200607. We have now fixed these typos in v9-01-01.

--Bob Y. 13:10, 14 February 2011 (EST)

Outstanding issues not yet resolved in v9-01-01

Linoz parallelization

We discovered that the main DO loop in routine LINOZ_CHEM3 (in linoz_mod.f) had not been parallelized. We added the !$OMP PARALLEL DO directives to this loop, which should make this routine execute much faster.

--Bob Y. 10:25, 12 November 2010 (EST)

UPDATE: The parallelization seemed to be causing some weird behavior, so at present we have disabled this feature. The OpenMP parallel code in LINOZ_CHEM3 has been commented out. We will look into this at a later time.

--Bob Y. 11:19, 7 February 2011 (EST)

KPP may cause run to exit with error

A couple of users have reported that GEOS-Chem simulations done with the KPP/Rosenbrock solver have been dying with an error such as this:

Forced exit from Rosenbrock due to the following error:
--> Step size too small: T + 10*H = T or H < Roundoff
T=   2977.82070749661      and H=  8.168943036159003E-013

but that the same simulations work fine when using the SMVGEAR solver. We are looking into this at present.

--Bob Y. 15:43, 4 February 2011 (EST)

Inconsistencies in aerosol diagnostics

In the next release of GEOS-Chem we plan to clean up some "historical baggage" in the aerosol diagnostic code. Patrick Kim noted the following inconsistencies:

  1. In aerosol_mod.f, we use a calculated relative humidity field (in the ABSHUM array, computed in gasconc.f) instead of using the RH that is simply read from the GEOS-5 or MERRA met field archives.
  2. The OD-MAP-$ diagnostic does not take into account the removal of aerosol tracer by chemistry and wet deposition. This means that the OD-MAP-$ diagnostic is not consistent with the tracer concentrations stored in the IJ-AVG-$ diagnostic.
  3. For the current diagnostics, we compute the AOD at 400nm but scale the result to different wavelengths. With the advent of the new GEOS-Chem aerosol optical properties, we can now compute the aerosol diagnostics for whichever wavelength we wish.

--Bob Y. 14:43, 11 February 2011 (EST)

Double counting of biofuel emissions over Asia

I found a bug in biofuel_mod.f about Streets emissions. Initially we used Streets 2000 for years <= 2005, then Streets 2006 for year >= 2006. But this was changed because of discrepancies in the total emissions between 2005 and 2006. So now we use Streets 2000 for years <=2000 and Streets 2006 for years >= 2001. The problem is that Streets 2006 contains biofuels and not Streets 2000. So in biofuel_mod.f, there is to change the following lines to avoid double counting biofuel emissions over Asia:

           !-----------------------------------------------------------
           ! If we are over SE ASIA and are using Streets 2006 (that is
           ! emission year is GE 2006), set BIOFUEL to zero since they
           ! are already accounted for (phs, 3/17/08)
           !-----------------------------------------------------------
           IF ( LSTREETS .and. ( SIM_YEAR >= 2006 ) ) THEN

to

           !-----------------------------------------------------------
           ! If we are over SE ASIA and are using Streets 2006 (that is
           ! emission year is GE 2001), set BIOFUEL to zero since they
           ! are already accounted for (phs, 3/17/08)
           !-----------------------------------------------------------
           IF ( LSTREETS .and. ( SIM_YEAR >= 2001 ) ) THEN

The modification for Streets was done in v8-03-01, so the modification should be done for everyone using versions v8-03-01 and later.

--Ccarouge 17:55, 17 February 2011 (EST)