wrf-model / WRF

The official repository for the Weather Research and Forecasting (WRF) model
Other
1.24k stars 677 forks source link

Update RUC LSM to the latest version used in version 1 of RRFS. #2028

Closed tanyasmirnova closed 5 months ago

tanyasmirnova commented 6 months ago

TYPE: bug fix, enhancement

KEYWORDS: snow model, irrigation, conductivities

SOURCE: Tanya Smirnova, NOAA/GSL

DESCRIPTION OF CHANGES:

  1. Changes to the snow model. Added options to compute thermal snow conductivity and snow cover fraction: isncond_opt = 1 or 2 (1 is default, 2 is recommended to use) isncovr_opt = 1, 2 or 3 (1 is default, 2 is recommended to use for more accurate SCF)
  2. Changes to irrigation scheme, use real-time vegetation fraction as an indicator of crops maturity.
  3. Changes to soil diffusional and hydraulic conductivities.

LIST OF MODIFIED FILES: M phys/module_sf_ruclsm.F

TESTS CONDUCTED:

  1. Tested in RRFS
  2. The Jenkins tests are all passing.

RELEASE NOTE: This PR modifies the RUC LSM to add options to the snow model, use real-time vegetation fraction as an indicator for irrigation scheme, and change soil diffusional and hydraulic conductivities.

weiwangncar commented 6 months ago

The regression test results:

Test Type              | Expected  | Received |  Failed
= = = = = = = = = = = = = = = = = = = = = = = =  = = = =
Number of Tests        : 23           24
Number of Builds       : 60           57
Number of Simulations  : 158           150        0
Number of Comparisons  : 95           86        0

Failed Simulations are: 
None
Which comparisons are not bit-for-bit: 
None
smileMchen commented 5 months ago

@tanyasmirnova

Tanya,

Would you please upload sample namelist.input files that you used to test the changes described in this PR? Specifically,

(1) For the snow model, I suppose we need the following options: isncond_opt = 2 isncov_opt = 2 sf_surface_physics = 3 num_soil_layers = 6 ( or 9)

(2) For the test of irrigation scheme, please clarify what options are used. I suppose the real-time vegetation fraction is still derived from WPS. Please let me know if I am wrong.

Thanks !

tanyasmirnova commented 5 months ago

@tanyasmirnova

Tanya,

Would you please upload sample namelist.input files that you used to test the changes described in this PR? Specifically,

(1) For the snow model, I suppose we need the following options: isncond_opt = 2 isncov_opt = 2 sf_surface_physics = 3 num_soil_layers = 6 ( or 9)

(2) For the test of irrigation scheme, please clarify what options are used. I suppose the real-time vegetation fraction is still derived from WPS. Please let me know if I am wrong.

Thanks !

@smileMchen Ming, The changes to the namelist are not needed with this PR. Please, use the following options with RUC LSM: sf_surface_physics = 3 num_soil_layers = 9

The new options in the snow model are specified internally in RUC LSM. I set them to isncond_opt = 2 and isncovr_opt = 2 as the best options in my opinion. Thank you!

smileMchen commented 5 months ago

@tanyasmirnova Tanya, Thank you for the information. Just one more question: with num_soil_layers = 9 and num_soil_layers = 6, can we see large differences? Also, is it recommended to run RUC with MYNN SFCLAY and MYNN PBL schemes? Thanks again.

tanyasmirnova commented 5 months ago

@tanyasmirnova Tanya, Thank you for the information. Just one more question: with num_soil_layers = 9 and num_soil_layers = 6, can we see large differences? Also, is it recommended to run RUC with MYNN SFCLAY and MYNN PBL schemes? Thanks again.

@smileMchen Ming, There could be quite substantial differences when 6 levels are used instead of 9 because with 6 levels the energy budget is applied to a thicker top soil layer, which may cause damping of the diurnal cycle for skin temperature. The use of RUC LSM with MYNN surface and PBL schemes is the most tested configuration. However, RUC LSM could be successfully used with any other option of surface and boundary layer physics.

weiwangncar commented 5 months ago

@smileMchen @tanyasmirnova If we use GFS input, we may need to adjust the soil data, like we did in the past.

hezisue commented 3 months ago

In this new version, some important code from the old version is missing. RUC display in WRF 4.0: !--- initializing snow fraction, thereshold = 32 mm of snow water ! or ~100 mm of snow height ! snowc(i,j) = min(1.,snow(i,j)/32.) if(snow(i,j).le.32.) soilt1(i,j)=tso(i,1,j) !--- initializing inside snow temp if it is not defined IF((soilt1(i,j) .LT. 170.) .or. (soilt1(i,j) .GT.400.)) THEN IF(snow(i,j).gt.32.) THEN soilt1(i,j)=0.5*(soilt(i,j)+tso(i,1,j))

But in the new version, this is missing, this part should affect the snow calculation, and logically there is a problem with the input value of snowc: !--- initializing snow fraction, thereshold = 32 mm of snow water or ~100 mm of snow height if((soilt1(i,j) .lt. 170.) .or. (soilt1(i,j) .gt.400.)) then if(snowc(i,j).gt.0.) then soilt1(i,j)=0.5*(soilt(i,j)+tso(i,1,j))

hezisue commented 3 months ago

@tanyasmirnova I also have a quibble with the addition of snow cover fraction, which is that in the code below, display option 1 is the default, but the solution that ends up being used is option 2, which calculates the average value. ` !-- Snow fraction options !-- option 1: original formulation using threshold snow depth to compute snow fraction !integer, parameter :: isncovr_opt = 1 (default) !-- option 2: the tanh formulation from Niu,G.-Y.,and Yang,Z.-L., 2007,JGR,DOI:10.1029/2007JD008674. !integer, parameter :: isncovr_opt = 2 !-- option 3: the tanh formulation from Niu,G.-Y.,and Yang,Z with ! vegetation-dependent parameters from Noah MP (personal communication with ! Mike Barlage) !integer, parameter :: isncovr_opt = 3 !-- Values of parameters are scale-dependent, have to be tuned for a given application !-- Tables below are for 21-class MODI-RUC (MODIFIED_IGBP_MODIS_NOAH_15s is used in HRRR and RRFS) !-- for 3-km RRFS application real, dimension(30), parameter :: sncovfac = & & (/ 0.030, 0.030, 0.030, 0.030, 0.030, & & 0.016, 0.016, 0.020, 0.020, 0.020, & & 0.020, 0.014, 0.042, 0.026, 0.030, & & 0.016, 0.030, 0.030, 0.030, 0.030, & & 0.000, 0.000, 0.000, 0.000, 0.000, & & 0.000, 0.000, 0.000, 0.000, 0.000 /) real, dimension(30), parameter :: mfsno = & & (/ 1.00, 1.00, 1.00, 1.00, 2.00, 2.00, & & 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, & & 3.00, 3.00, 2.00, 2.00, 2.00, 2.00, & & 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /)

  !--
    integer, parameter :: isncovr_opt=2
  !--  `
tanyasmirnova commented 3 months ago

In this new version, some important code from the old version is missing. RUC display in WRF 4.0: !--- initializing snow fraction, thereshold = 32 mm of snow water ! or ~100 mm of snow height ! snowc(i,j) = min(1.,snow(i,j)/32.) if(snow(i,j).le.32.) soilt1(i,j)=tso(i,1,j) !--- initializing inside snow temp if it is not defined IF((soilt1(i,j) .LT. 170.) .or. (soilt1(i,j) .GT.400.)) THEN IF(snow(i,j).gt.32.) THEN soilt1(i,j)=0.5*(soilt(i,j)+tso(i,1,j))

But in the new version, this is missing, this part should affect the snow calculation, and logically there is a problem with the input value of snowc: !--- initializing snow fraction, thereshold = 32 mm of snow water or ~100 mm of snow height if((soilt1(i,j) .lt. 170.) .or. (soilt1(i,j) .gt.400.)) then if(snowc(i,j).gt.0.) then soilt1(i,j)=0.5*(soilt(i,j)+tso(i,1,j))

@hezisue Hello, Do you mean that snowc is not initialized in the new version? I removed this line because snowc should be available in the wrfinput_d01 from the parent model, and it should not be re-initialized in RUC SLM. Do you see a problem with this in your runs?

tanyasmirnova commented 3 months ago

@tanyasmirnova I also have a quibble with the addition of snow cover fraction, which is that in the code below, display option 1 is the default, but the solution that ends up being used is option 2, which calculates the average value. ` !-- Snow fraction options !-- option 1: original formulation using threshold snow depth to compute snow fraction !integer, parameter :: isncovr_opt = 1 (default) !-- option 2: the tanh formulation from Niu,G.-Y.,and Yang,Z.-L., 2007,JGR,DOI:10.1029/2007JD008674. !integer, parameter :: isncovr_opt = 2 !-- option 3: the tanh formulation from Niu,G.-Y.,and Yang,Z with ! vegetation-dependent parameters from Noah MP (personal communication with ! Mike Barlage) !integer, parameter :: isncovr_opt = 3 !-- Values of parameters are scale-dependent, have to be tuned for a given application !-- Tables below are for 21-class MODI-RUC (MODIFIED_IGBP_MODIS_NOAH_15s is used in HRRR and RRFS) !-- for 3-km RRFS application real, dimension(30), parameter :: sncovfac = & & (/ 0.030, 0.030, 0.030, 0.030, 0.030, & & 0.016, 0.016, 0.020, 0.020, 0.020, & & 0.020, 0.014, 0.042, 0.026, 0.030, & & 0.016, 0.030, 0.030, 0.030, 0.030, & & 0.000, 0.000, 0.000, 0.000, 0.000, & & 0.000, 0.000, 0.000, 0.000, 0.000 /) real, dimension(30), parameter :: mfsno = & & (/ 1.00, 1.00, 1.00, 1.00, 2.00, 2.00, & & 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, & & 3.00, 3.00, 2.00, 2.00, 2.00, 2.00, & & 2.00, 2.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /)

  !--
    integer, parameter :: isncovr_opt=2
  !--  `

@hezisue The sncovr_opt=2 is a recommended option to use. It is the options that is used in the experimental MPAS with RUC LSM. sncovr_opt=1 is the oprtion which is used in the operational HRRR, that is why I called it a default option.