DanLi-BU / WRF

The official repository for the Weather Research and Forecasting (WRF) model
Other
1 stars 0 forks source link

White roof effects overestimated by a bug in module_sf_noahdrv.F #4

Open DanLi-BU opened 10 months ago

DanLi-BU commented 10 months ago

One widely studied topic using WRF-Noah-single layer urban canopy model (SLUCM) is the white roof problem, where the albedo of roofs in the single-layer urban canopy model is increased and the resulting impacts on TSK/T2/fluxes are examined. While there is nothing wrong with this approach, there is an important bug in the module_sf_noahdrv.F that will lead to overestimate of the white roof effects. This bug has already been fixed when using the mosaic approach, but remains in the code with the dominant land use approach.

When using WRF-Noah-SLUCM , the module_sf_noahdrv.F effectively treats urban grid cells as a pervious part and an impervious part. The pervious part is treated as grass (with a fraction of 1 - FRC_URB2D) and is handled by Noah and the impervious part (with a fraction of FRC_URB2D) is handled by SLUCM. Then, lots of variables (including surface properties like albedo, state variables like TSK, flux variables like sensible heat flux) are area-averaged. See for example for albedo: ALBEDO(I,J) = FRC_URB2D(I,J)*ALB_URB+(1-FRC_URB2D(I,J))*ALBEDOK.

The issue arises from the face that the net shortwave radiation (SOLNET) is computed as SOLDN*(1.-ALBEDO(I,J)) (e.g., at line 810 in version 4.2.2). The ALBEDO(I,J) is the grid-cell albedo, namely, the area-averaged albedo of the pervious and impervious parts. While there is nothing wrong in particular with this calculation, it becomes a problem when SOLNET is sent to Noah (CALL SFLX) as an input parameter. This way, the pervious part of the urban grid cell feels the SOLNET that is computed based on the grid-cell albedo.

So, if one increases the roof albedo significantly (default value is 0.2, let's say we increase it to 0.9), then the albedo of the impervious part will be increased, which further results in an increase in the grid-cell albedo (ALBEDO(I,J) in the code). This will reduce the net shortwave radiation SOLNET for the pervious part, leading to a stronger cooling of the pervious part that is unphysical.

To fix this bug, we need to add SOLNET = SOLDN*(1.-ALBEDOK) in the following part of the code. Note ALBEDOK is the albedo of the pervious part.


   IF(SF_URBAN_PHYSICS == 1.OR. SF_URBAN_PHYSICS==2.OR.SF_URBAN_PHYSICS==3 ) THEN
            IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. &
              IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN
     VEGTYP = NATURAL
             SHDFAC = SHDTBL(NATURAL)
             ALBEDOK =0.2         !  0.2
             ALBBRD  =0.2         !0.2
             EMISSI = 0.98                                 !for VEGTYP=5
             SOLNET = SOLDN*(1.-ALBEDOK)             ! this is also an input needed by Noah danli 10/30/2023

As an example, here is a 4 day simulation over Boston with this bug. Left panel is the time averaged TSK with roof albedo of 0.2, mid-panel is the time averaged TSK with roof albedo of 0.9, right panel is the difference (white roof effects). All units in Kelvin.

TSK

This is the result with the bug fixed. Clearly, the white roof effects are reduced, as expected. In other words, the bug leads to overestimation of white roof effects.

TSK_test1

What is more interesting is the scaling. This is for the code with the bug. Focusing on the left panel, it shows how changes in TSK in grid cells classified as UTYPE_URB = 3 scales with changes in the forcing in terms of W per square meter of grid cell (not square meter of urban land, not square meter of the impervious part of urban land). One may be templated to conclude that there is some sort of nonlinearity in the system that gives a response that does not scale linearly with the forcing.

scaling

Changing it to the new code, one realizes that the seemingly nonlinear behavior is simply caused by the bug in the code.

scaling_test1

DanLi-BU commented 7 months ago

Cenlin at NCAR mentioned that this bug has been fixed since WRF 4.3. But since I was using WRF4.2.2 (see #1), this bug was still there.