Scheduled Downtime
On Friday 21 April 2023 @ 5pm MT, this website will be down for maintenance and expected to return online the morning of 24 April 2023 at the latest

Noah-MP error using HRRR snow cover

This post was from a previous version of the WRF&MPAS-A Support Forum. New replies have been disabled and if you have follow up questions related to this post, then please start a new thread from the forum home page.

RCarpenter

Member
I'm trying to initialize a run with GFS, but with higher-resolution snow cover from HRRR. The runs are failing during the first time step:

problem with initial snow fields: snow/snowh>0 while snowh/snow=0 at i,j 185 276 0.1057081 0.0000000E+00
The model is losing water (ERRWAT is negative)
Water budget problem in NOAHMP LSM

The runs do not fail if I use regular Noah. Is it possible that the Noah-MP budget checker is being too strict?
 
This is an error caused by inconsistent input of snow data. Please look at your met_em file at the initial time, and find the values of the two variable, flag_snow and flag_snowh. They determine how REAL will process snow data. Note that if snowh is not zero, then snow should not be zero, too.
 
I can confirm that both of those flags are set to 1. It seems to be an intermittent problem. For instance, it might occur for one model cycle but not the next. I am using real-time data over CONUS, so there is plenty of snow.
 
Here is an example of what I am seeing. The red dots are where SNOW > 0 but SNOWH = 0. This seems to occur on the margins of snow cover and perhaps over lakes. The white areas are where both are > 0.
snow gt 0 snowh eq 0 red.png
 
Please take a look at the code dyn_em/module_initialize_real.F, and find the piece of codes below:

Code:
      ELSE IF ( ( flag_snow .EQ. 1 ) .AND. ( flag_snowh .EQ. 0 ) ) THEN
         DO j=jts,MIN(jde-1,jte)
            DO i=its,MIN(ide-1,ite)
!              ( kg/m^2 -> m)  & ( liquid to snow depth, 5:1 ratio )
               IF ( skip_middle_points_t ( ids , ide , jds , jde , i , j , em_width , hold_ups ) ) CYCLE
               grid%snowh(i,j) = grid%snow(i,j) / 1000. * 5.
            END DO
         END DO
Below this code, please add the following codes:
Code:
    ELSE 
         DO j=jts,MIN(jde-1,jte)
            DO i=its,MIN(ide-1,ite)
               IF ( skip_middle_points_t ( ids , ide , jds , jde , i , j , em_width , hold_ups ) ) CYCLE
               grid%snowh(i,j) = grid%snow(i,j) / 1000. * 5.
            END DO
         END DO

The recompile WRF and rerun real.exe. Please let me know whether this can fix your problem.
 
I am happy to report that this seems to have solved the problem. You can see the GFS/HRRR border across Canada.

I am wondering if the fix might be too aggressive? The code seems to set snowh to snow / 200 everywhere. Maybe it should just set it where snowh = 0?

Screen Shot 2021-02-17 at 11.36.15 AM.png
 
I agree. Please further modify the code and specify values for snow at grids where snowh is not zero. At grids where snowh =0, snow should also be zero.
 
I have tested the following patch, which modifies snowh as we discussed.

Code:
     ELSE
        DO j=jts,MIN(jde-1,jte)
           DO i=its,MIN(ide-1,ite)
              IF ( skip_middle_points_t ( ids , ide , jds , jde , i , j , em_width , hold_ups ) ) CYCLE
              IF ( grid%snow(i,j) .EQ. 0. ) THEN
                 grid%snowh(i,j) = 0.
              ELSE IF ( grid%snowh(i,j) .EQ. 0. ) THEN
                 grid%snowh(i,j) = grid%snow(i,j) / 1000. * 5.
              END IF
           END DO
        END DO
 
Hi,
I am confused by the logic here:

Code:
            IF ( grid%snow(i,j) .EQ. 0. ) THEN
                 grid%snowh(i,j) = 0.
              ELSE IF ( grid%snowh(i,j) .EQ. 0. ) THEN
                 grid%snowh(i,j) = grid%snow(i,j) / 1000. * 5.
              END IF

I think that the 'ELSE IF' block should be an independent block.
 
If snow=0, ensure snowh=0.
Else if snowh=0 (and snow > 0), initialize snowh from snow.
If neither condition is met, that means snowh > 0 and snow > 0, and we do not want to overwrite snowh.
 
Top