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.
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.
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.
Changing it to the new code, one realizes that the seemingly nonlinear behavior is simply caused by the bug in the code.
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 themodule_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 of1 - FRC_URB2D
) and is handled by Noah and the impervious part (with a fraction ofFRC_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 asSOLDN*(1.-ALBEDO(I,J))
(e.g., at line 810 in version 4.2.2). TheALBEDO(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 whenSOLNET
is sent to Noah (CALL SFLX
) as an input parameter. This way, the pervious part of the urban grid cell feels theSOLNET
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 radiationSOLNET
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. NoteALBEDOK
is the albedo of the pervious part.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.
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.
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 asUTYPE_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.Changing it to the new code, one realizes that the seemingly nonlinear behavior is simply caused by the bug in the code.