Bugs and fixes

From Geos-chem
Revision as of 21:41, 9 June 2009 by Ccarouge (Talk | contribs)

Jump to: navigation, search

On this page we list the GEOS-Chem bugs that users have recently encountered, and how to fix them. Please also see the following wiki pages:

Outstanding issues yet to be resolved
This page contains a list of known issues (e.g. shortcomings in scientific algorithms, diagnostics, technical problems, etc.) which are slated to be fixed in an upcoming version.

Typo in HO2 uptake for v8-02-01 and v8-02-02

Jingqiu Mao (jmao@seas.harvard.edu) 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)

EPA/NEI inventory: reset other species to zero

Havala O. T. Pye (havala@caltech.edu) wrote:

Hi all,
I've noticed a potential problem with how the EPA NEI99 inventory is used in EMFOSSIL.
My understanding is that ANTHROEMS reads in anthropogenic emissions and puts them in the EMISR array. If a regional inventory is available, EMFOSSIL should override the EMISR values and update EMISRR.
Emissions for ALD2 and many of the new dicarbonyl species are not in the EPA inventory so they get reset to zero over the U.S. I suggest changing the default value (lines 1269 and 1315, epa_nei_mod.f) in GET_EPA_ANTHRO to -1d0 and using a check like the other regional inventories in emfossil.f (starting line 574, excerpt below).
         ! Get CO & Hydrocarbons from EPA/NEI inventory over the USA

         ! If we are using EPA/NEI99 emissions ...
         IF ( LNEI99 ) THEN

            ! If we are over the USA ...
            IF ( GET_USA_MASK( I, J ) > 0d0 ) THEN

               ! Get EPA/NEI emissions (and apply time-of-day factor)
               EPA_NEI = GET_EPA_ANTHRO( I, J, NN, WEEKDAY )

               ! hotp fix for species not present (hotp 5/28/09)
               IF ( .not. ( EPA_NEI < 0d0 ) ) THEN

                   ! apply time of day factor
                   EPA_NEI = EPA_NEI * TODX

                   ! Convert from molec/cm2/s to kg/box/timestep in order
                   ! to be in the proper units for EMISRR array
                   EMX(1)  = EPA_NEI * ( DTSRCE * AREA_CM2 )
     &                                / XNUMOL(NN)


--Ccarouge 11:50, 29 May 2009 (EDT)

Scale factor for oceanic acetone for GEOS5 2x2.5

It seems the scale factor for the oceanic source of acetone was never defined for GEOS5 2x2.5. Old versions of the code would use a value of 1. But with version 8-02-01, the scale factor is not defined and the compilation would choke on it.

About this problem, Daniel wrote (djacob@fas.harvard.edu):

You can do the GEOS-5 scaling simply on the basis of surface area, i.e., 1 for 4x5 and 0.25 for 2x2.5. No need to worry about differences in sea surface T and wind speeds - they will have only a very small effect and this oceanic source is very uncertain anyway.

So if you want to use GEOS-5 with a resolution 2x2.5 you need to change the following lines in acetone_mod.f:

#elif defined( GEOS_5 ) 

#if defined( GRID05x0666 ) && defined ( NESTED_CH )

      ! GEOS-5 0.5 x 0.667, scaled to 4x5 (dan, 11/6/08)
      ! This scale factor produces too little acetone. (tmf, 3/05/09)
      !REAL*8, PARAMETER :: SCALE_FACTOR = 0.0008d0
      REAL*8, PARAMETER :: SCALE_FACTOR = 0.015369d0      

#elif defined( GRID4x5 )

      REAL*8, PARAMETER :: SCALE_FACTOR = 0.9551d0



#elif defined( GEOS_5 ) 

#if defined( GRID05x0666 ) && defined ( NESTED_CH )

      ! GEOS-5 0.5 x 0.667, scaled to 4x5 (dan, 11/6/08)
      ! This scale factor produces too little acetone. (tmf, 3/05/09)
      !REAL*8, PARAMETER :: SCALE_FACTOR = 0.0008d0
      REAL*8, PARAMETER :: SCALE_FACTOR = 0.015369d0      

#elif defined( GRID4x5 )

      REAL*8, PARAMETER :: SCALE_FACTOR = 0.9551d0

#elif defined( GRID2x25 )

      REAL*8, PARAMETER :: SCALE_FACTOR = 0.25d0


This value for the SCALE_FACTOR will be added to the next version.

--Ccarouge 14:38, 28 May 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)

ND05 diagnostic quantities zeroed unexpectedly

Helen McIntyre (h.macintyre@see.leeds.ac.uk) wrote:

I'm running the new and old versions of GEOS-Chem, and both seem to not output all the ND05 diagnostics correctly. There are 10 prod/loss diagnostics in this category, but only the 5th, 6th and 7th work. All the rest come out as zero.
I've had a brief look though the code, and it seems that the ones that work are calculated in one part of the routine (sulfate_mod.f), and the zero ones in another (I don't know if this has anything to do with it).
I've just done a 1 day run, with Geos-chem v8-01-01 at 4x5 resolution using GEOS-5 met fields. The old version I'm using is v7-02-04 and I get the same result.
The 'ctm.bpch', 'geos.log' and 'input.geos' files from the v8-01-01 run can be found here: http://homepages.see.leeds.ac.uk/~lechlm/files/

Claire Carouge (ccarouge@seas.harvard.edu) replied:

There are some problems in the calculations. For the 5th element of AD05 (in Fortran notations and not IDL), the diagnostic come from the value of L1 which is calculated line 1529 (v8-01-04):
   L1     = ( SO20 - SO2_cd + PSO2_DMS(I,J,L) ) * RK1/RK
But on line 1508, we have:
   RK1 = 0.d0
with the previous comment:
  ! For online runs, SMVGEAR deals w/ this computation,
  ! so we can simply set RK1 = 0 (rjp, bmy, 3/23/03)
So L1 is always 0. I have no idea what RK1 is for, you may have to go into the physics/chemistry behind the code and we are not qualified to help you with it.
The other values for AD05 are calculated in the routine CHEM_DMS and this routine is only called in an offline aerosol simulation (l. 545 in sulfate_mod.f).
So my guess is that the ND05 diagnostic was designed for offline simulations and if you want it for online chemistry, you need to implement it.

Unallocated Diagnostic Arrays in TPCORE

We found that passing unallocated ND24/25/26 (mass flux) arrays into TPCORE can cause a run to crash. It happened with a modified version of tagged CO simulation in GC v8-01-04 that uses Flambe emissions and was running at 2x2.5 and on multiple processors. Since the mass flux arrays are not optional but intent(inout) for TPCORE, they should be allocated even if they are not used, i.e. even if the diagnostic are turned off.

A general fix that allocates these arrays but lets you turn off the output diagnostic will be in the next GC version (scheduled to be v8-02-01). Meanwhile we strongly advise users to **always** switch on the ND24/25/26 mass flux in their input.geos.

--phs 10:40, 2 April 2009 (EDT)

Erroneous O3 diagnostic (ND45)

This has now been corrected in GEOS-Chem v8-01-04.

Seg fault in GEOS-5 China nested grid simulation

This has now been fixed in GEOS-Chem v8-01-04.

Output of ND51 does not match output in the ctm.bpch file

Please see this discussion about an inconsistency between the ND51 diagnostic (ts_satellite.bpch file) and the ctm.bpch file.

Quick fix for GEOS-5 optical depth

Please see the discussion for a quick fix for the GEOS-5 optical depths.

NOTE: if you are using GEOS-Chem v8-01-04 or higher with the reprocessed GEOS-5 met fields, then you do not need to use this quick fix.

--Bob Y. 16:13, 10 October 2008 (EDT)

Bad GEOS-4 A6 met data causing segmentation fault

Jesse Kenyon (kenyon@duke.edu) wrote:

In our runs of the GEOS-Chem model using GEOS4 data from 2006, we have run into a corrupt data problem that causes our runs to crash on rundate 20060913. We have been able to isolate this to bad values in the A6 files for the meridional wind (V component). Specifically, it appears two files contain bad data: 20060913.a6.4x5 and 20060915.a6.4x5. The bad data takes the form of unphysically huge values (e.g. 0.75553E+29), and occurs at many gridboxes on levels 6 and 7 of the 20060913 file and levels 18 and 19 of the 20060915 file. In both files, the bad data only occur for the 00 hour (06, 12, and 18 hours appear okay). We also checked the 20060914, 20060916, 20060917, 20060918, and 20060919.a6.4x5 files - they seem okay. A check of the U component wind on 09-13 and 09-15 shows no problems.
For us, the problem manifested itself as a segmentation fault when trying to access address -21474836 of array qtmp in subroutine xtp in module tpcore_fdvas_mod.f90. The address was calculated from xmass which is calculated from wind and pressure in another subroutine (Init_press_fix). We know some folks at Harvard have been able to get beyond this rundate without crashing and suspect it might be due to a difference in computer system or compiler.
We have not yet tried running with a "repaired" V wind, so cannot say for sure that there are no other problems in the A6 files besides V (or U which was also checked).

Philippe Le Sager (plesager@seas.harvard.edu) wrote:

Thanks for reporting the issue. We had the exact same problem with GCAP once and the problem was solved by repairing the met field (a very bad value in U or V). Then Mike and Bastien got the exact same error with GEOS4, on the same day as you. My first idea was to test the met fields but I did not get any bad value. I just did a run with Bastien's inputs, and was not able to reproduce the crash. You just confirmed that the first idea was the good one: a bad met field.
Since I seem to have a good met field and you do not, I check the met fields on the server this time. And I did find a problem with V for 20060913. Here are the output from test_met.pro (it gives min and max of each met fields):
   at Harvard (internal disk):
   20060913 000000 U             -72.816071     144.557083
   20060913 000000 V             -67.133759      61.291386

   on the server:
   20060913 000000 U             -72.816071     144.557083
   20060913 000000 V             -67.133759***************
All others fields give the exact same min/max. There is a huge or NaN value in the file we put on the server. We do not understand how that happened, since files are simply copied from one location to the other. So we are still investigating the issue, checking the whole archive, and will let you know as soon as we replace it.

Bob Yantosca (yantosca@seas.harvard.edu) wrote:

I have fixed the bad A-6 data for 2006 -- 09/13, 09/14, 09/15, 09/16. For some reason the data in the FTP site was corrupt (bad values in the winds at a couple of GMT times) but the data on our internal disk (behind the firewall) was not. I just copied the relevant data files over and re-created the TAR file.
Please obtain the new TAR file from:
  ftp ftp.as.harvard.edu
  cd pub/geos-chem/data/GEOS_4x5.d/GEOS_4_v4/2006/09
  get 09.tar.gz

--Bob Y. 15:40, 23 September 2008 (EDT)

Too many levels in photolysis code

The scattering module (OPMIE.f) for Fast-J requires many additional vertical levels. It happens that the limit (NL set in jv_mie.h) can be reached in some situations, causing the program to stop with a "Too many levels in photolysis code.." error message. Sometimes you can increase NL to solve the problem. Now a new version of OPMIE.f is available, which still warns you if NL is reached, but works with that limit.

Before being released into the standard model, you can find the new OPMIE.f at: ftp://ftp.as.harvard.edu/pub/geos-chem/patches/v8-01-01/OPMIE.f

--phs 11:29, 17 June 2008 (EDT)

This can also be an indication that there may be a problem in your visual optical depths, dust emissions, or aerosol emissions. Dust and aerosol optical depths are computed from the concentration array STT. If for some reason you end up emitting too much aerosol or dust (i.e. a unit conversion error), then this will result in an abnormally high dust or aerosol optical depth. A very high optical depth will cause FAST-J to want to keep adding points to the Gaussian quadrature in OPMIE.f. You can get into a situation where the number of points that FAST-J wants to add is greater than the array parameter NL (it may want to add thousands of points!).

Therefore, if you encounter this type of error, it is a good idea to doublecheck your aerosol & dust emissions to make sure that the monthly and annual totals are reasonable.

--Bob Y. 11:03, 26 June 2008 (EDT)

Negative tracer in routine WETDEP because of negative RH

See this post: GEOS-5 issues#Small negative RH value in 20060206.a6.2x25 file

Fixes are available at ftp://ftp.as.harvard.edu/pub/geos-chem/patches/v8-01-01.

--phs 16:31, 6 June 2008 (EDT)

Negative tracer in routine WETDEP

Dylan Millet (dbm@umn.edu) wrote:

I'm having a run die consistently at the same time (October 1, 2005; first time step of the month) in large-scale wetdep, with an STT element < 0.
  • Platform: Linux cluster
  • Threads: 8
  • Version: v7-4-13 out of the box.
  • GEOS4, 4x5, 30L, full chemistry
  • IFORT 10.1
In Section 6 (No Downward Precip) of wetscav_mod.f, subroutine safety is getting called.
    WETDEP - STT < 0 at    1   1  29 for tracer    7 in area    6
(First of all it seems odd to do wetdep for L=29, this is 63 km up). Have you seen anything like this? I ran for the whole year starting Jan 1 successfully until this point.
... By the way, the problem persists when I turn off chemistry altogether.

Philippe Le Sager (plesager@seas.harvard.edu) replied:

I used your restart file and the same input.geos (w/ chemistry on and off). My code went thru without problem. I tried both Sun Studio and Ifort 9 compilers, and the later on two different machines (altix and ceres). I used v7-04-13 and v8-01-01. I never reproduced your error.
We just got the new Ifort 10, and tried it too. I run v8-01-01 without an error. But when I tried v7-04-13, I finally reproduced your error, with the exact same negative values!
In other words: the bug happens with IFort 10 and v7-04-13 only.
Also, have a look at this recent development. This is not the reason for your bug (I tried v8 w/ ifort 10 and isorropia -like v7-04-13- and it did not crash), but using RPMARES instead of Isorropia may be a way to fix it.
... More about the Ifort 10 / v7-04-13 issue. When I wanted to debug with TotalView, I could not reproduce the bug anymore.... because I simply suppress any optimization. So, I did more test and found that if the default -O2 optimization is used, GEOS-Chem crashes. But it works fine with -O1. It is hard to tell what happens, since only the emissions step is done between reading the restart file and the crash.
Bob and I will further test Ifort 10 for optimization on our machines. Maybe we will find something... For the time being, you may have to switch to -O1, at least for the run that crashes. You will find the optimization flag at the beginning of the Makefile.ifort.

Long story short: This appears to be an optimization issue with IFORT 10 and v7-04-13. Upgrading to GEOS-Chem v8-01-01 should solve this problem.

--Bmy 10:38, 17 April 2008 (EDT)


Please see the discussion about the bugs & fixes for ISORROPIA and RPMARES on the Code Developer's Forum for Aerosol thermodynamical equilibrium.

Also, if you are trying to run an aerosol-only simulation, then please see this discussion about a bug that manifested itself only after switching from ISORROPIA to RPMARES.

--Bob Y. 10:44, 26 June 2008 (EDT)