Bug fixes: Version 3.3 bugs in LSM (ISOIL=2) runs.

This page describes fixes for two run time bugs in the MPP code affecting all platforms when the LSM soil model is used. These bugs can produce significant errors and should be fixed if you are running with the LSM option. The first bug occurs if there is input data for either WEASD of SNODPTH fields. The second bug occurs only on nested runs where the nest is smaller (i.e., has fewer grid points) than the parent domain.

These bugs affect all earlier releases of MM5v3. The V3 MM5.TAR.gz and MPP.TAR.gz files on the mesouser ftp-site have been updated to fix these bugs. To download them, click here. If you are using a previous V3 release or if you want to apply the fixes yourself, see the recommended fixes below.

The non-MPP code is not affected.

The recommended fix for bug #1 involves adding two lines to file domain/io/rdinit.F. The recommended fix for bug #2 involves adding one line to file MPP/RSL/mpp_initnest_30.incl.

Recommended fix for LSM bug #1

Edit the file domain/io/rdinit.F and insert the two FLIC directive lines around the SNOWC assignment loop. That is, change:
          DO I=1,IX                                   RDINIT.288
          DO J=1,JX                                   RDINIT.289
C   SET SNOWC TO 1 FOR SNOA > 1.0 MM                  24SEP99.236
             IF(SNOA(I,J).GT.1.0)THEN                 24SEP99.237
               SNOWC(I,J)=1.0                         RDINIT.291
             ELSE                                     RDINIT.292
               SNOWC(I,J)=0.0                         RDINIT.293
             ENDIF                                    RDINIT.294
          ENDDO                                       RDINIT.295
          ENDDO                                       RDINIT.296  
to read instead:
C_FLIC_END_NOFLIC                                 
          DO I=1,IX                                   RDINIT.288
          DO J=1,JX                                   RDINIT.289
C   SET SNOWC TO 1 FOR SNOA > 1.0 MM                  24SEP99.236
             IF(SNOA(I,J).GT.1.0)THEN                 24SEP99.237
               SNOWC(I,J)=1.0                         RDINIT.291
             ELSE                                     RDINIT.292
               SNOWC(I,J)=0.0                         RDINIT.293
             ENDIF                                    RDINIT.294
          ENDDO                                       RDINIT.295
          ENDDO                                       RDINIT.296                                        
C_FLIC_BEGIN_NOFLIC             

Recommended fix for LSM bug #2

Edit the file MPP/RSL/mpp_initnest_30.incl and insert a single line to call MP_INITDOMAIN just before the include to mpp_init_05.incl. That is, change:
      CALL RSL_BCAST_MSGS
      CALL ADDRX1C(IAXALL(1,NUMNES))
#include <mpp_init_05.incl>
      DO J = 1, MJX
to read instead:
      CALL RSL_BCAST_MSGS
      CALL ADDRX1C(IAXALL(1,NUMNES))
      CALL MP_INITDOMAIN(NUMNES)
#include <mpp_init_05.incl>
      DO J = 1, MJX

Rebuild the executable

After making the above edits, create a new MPP executable by going to the top-level MM5 directory level and:
1) Type 'touch domain/nest/initnest.F'

2) Type 'make mpp'
Please report any problems to mesouser@ucar.edu .

Detailed description of problems

Bug #1: The problem originates in subroutine RDINIT if input data for either WEASD or SNODPTH fields is detected. Absence of FLIC directives around the assignment loop for SNOWC causes incorrect conversion of the I and J loop indices. Errors appear as discontinuities along several grid rows and columns in difference plots comparing single processor and multi-processor runs. The problem is independent of whether nesting has been employed.

Bug #2: This problem can occur if a nested domain is smaller than the parent domain. The missing call to MP_INITDOMAIN in initnest.F results in bad initialization of the seaice array XICE in some sections of the nest.

Thanks

Daran Rife (NCAR/RAP).
-Rotang, July 25, 2000