diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 925aa2f94..139b8f5cb 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -237,8 +237,8 @@ 'FV3/ccpp/physics/physics/sfc_cice.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/sfc_diff.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/sfc_drv.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/sfc_noah_GFS_interstitial.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/sfc_noah.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/sfc_noah_wrfv4_interstitial.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/sfc_noah_wrfv4.F90' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/sfc_noahmp_drv.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/sfc_nst.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/sfc_ocean.F' : [ 'slow_physics' ], diff --git a/ccpp/suites/suite_FV3_GFS_v15p2_HWRF_NOAH.xml b/ccpp/suites/suite_FV3_GFS_v15p2_HWRF_NOAH.xml index 187cbd758..b424d82e6 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2_HWRF_NOAH.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2_HWRF_NOAH.xml @@ -47,9 +47,9 @@ sfc_nst_pre sfc_nst sfc_nst_post - sfc_noah_GFS_pre - sfc_noah - sfc_noah_GFS_post + sfc_noah_wrfv4_pre + sfc_noah_wrfv4 + sfc_noah_wrfv4_post sfc_sice GFS_surface_loop_control_part2 diff --git a/ccpp/suites/suite_FV3_HWRF.xml b/ccpp/suites/suite_FV3_HWRF.xml index 75c1f3fa2..e07f596e0 100644 --- a/ccpp/suites/suite_FV3_HWRF.xml +++ b/ccpp/suites/suite_FV3_HWRF.xml @@ -41,9 +41,9 @@ sfc_nst_pre sfc_nst sfc_nst_post - sfc_noah_GFS_pre - sfc_noah - sfc_noah_GFS_post + sfc_noah_wrfv4_pre + sfc_noah_wrfv4 + sfc_noah_wrfv4_post sfc_sice GFS_surface_loop_control_part2 diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 2077bff8e..bfd275386 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -727,25 +727,25 @@ module GFS_typedefs integer :: lsm_noah=1 !< flag for NOAH land surface model integer :: lsm_noahmp=2 !< flag for NOAH land surface model integer :: lsm_ruc=3 !< flag for RUC land surface model - integer :: lsm_noah_hafs = 4 !< flag for NOAH land surface model for HAFS application + integer :: lsm_noah_wrfv4 = 4 !< flag for NOAH land surface from WRF v4.0 integer :: lsoil !< number of soil layers integer :: ivegsrc !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) !< ivegsrc = 2 => UMD (13 category) - !< ivegsrc = 3 => NLCD40 (40 category, NOAH/HAFS only) - !< ivegsrc = 4 => USGS-RUC (28 category, NOAH/HAFS only) - !< ivegsrc = 5 => MODI-RUC (21 category, NOAH/HAFS only) + !< ivegsrc = 3 => NLCD40 (40 category, NOAH WRFv4 only) + !< ivegsrc = 4 => USGS-RUC (28 category, NOAH WRFv4 only) + !< ivegsrc = 5 => MODI-RUC (21 category, NOAH WRFv4 only) integer :: isot !< isot = 0 => Zobler soil type ( 9 category) !< isot = 1 => STATSGO soil type (19 category, AKA 'STAS'(?)) - !< isot = 2 => STAS-RUC soil type (19 category, NOAH/HAFS only) + !< isot = 2 => STAS-RUC soil type (19 category, NOAH WRFv4 only) #ifdef CCPP integer :: lsoil_lsm !< number of soil layers internal to land surface model integer :: lsnow_lsm !< maximum number of snow layers internal to land surface model integer :: lsnow_lsm_lbound!< lower bound for snow arrays, depending on lsnow_lsm - logical :: rdlai !< read LAI from input file (for RUC LSM or NOAH LSM HAFS) - logical :: ua_phys !< flag for using University of Arizona? extension to NOAH LSM HAFS - logical :: usemonalb !< flag to read surface diffused shortwave albedo from input file for NOAH LSM HAFS - real(kind=kind_phys) :: aoasis !< potential evaporation multiplication factor for NOAH LSM HAFS + logical :: rdlai !< read LAI from input file (for RUC LSM or NOAH LSM WRFv4) + logical :: ua_phys !< flag for using University of Arizona? extension to NOAH LSM WRFv4 + logical :: usemonalb !< flag to read surface diffused shortwave albedo from input file for NOAH LSM WRFv4 + real(kind=kind_phys) :: aoasis !< potential evaporation multiplication factor for NOAH LSM WRFv4 integer :: fasdas !< flag to use "flux-adjusting surface data assimilation system"; 0 = OFF, 1 = ON integer :: isurban !< vegetation/land use type corresponding to the urban environment for the chosen ivegsrc integer :: isice !< vegetation/land use type corresponding to permanent ice/snow for the chosen ivegsrc @@ -2378,16 +2378,16 @@ subroutine sfcprop_create (Sfcprop, IM, Model) #ifdef CCPP ! HWRF NOAH LSM allocate and init when used ! - if (Model%lsm == Model%lsm_noah_hafs ) then + if (Model%lsm == Model%lsm_noah_wrfv4 ) then allocate(Sfcprop%snotime(IM)) Sfcprop%snotime = clear_val end if - if (Model%do_myjsfc.or.Model%do_myjpbl.or.(Model%lsm == Model%lsm_noah_hafs)) then + if (Model%do_myjsfc.or.Model%do_myjpbl.or.(Model%lsm == Model%lsm_noah_wrfv4)) then allocate(Sfcprop%z0base(IM)) Sfcprop%z0base = clear_val end if - if (Model%lsm == Model%lsm_noah_hafs) then + if (Model%lsm == Model%lsm_noah_wrfv4) then allocate(Sfcprop%semisbase(IM)) Sfcprop%semisbase = clear_val end if @@ -2913,10 +2913,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & #ifdef CCPP integer :: lsoil_lsm = -1 !< number of soil layers internal to land surface model; -1 use lsoil integer :: lsnow_lsm = 3 !< maximum number of snow layers internal to land surface model - logical :: rdlai = .false. !< read LAI from input file (for RUC LSM or NOAH LSM HAFS) - logical :: ua_phys = .false. !< flag for using University of Arizona? extension to NOAH LSM HAFS - logical :: usemonalb = .true. !< flag to read surface diffused shortwave albedo from input file for NOAH LSM HAFS - real(kind=kind_phys) :: aoasis = 1.0 !< potential evaporation multiplication factor for NOAH LSM HAFS + logical :: rdlai = .false. !< read LAI from input file (for RUC LSM or NOAH LSM WRFv4) + logical :: ua_phys = .false. !< flag for using University of Arizona? extension to NOAH LSM WRFv4 + logical :: usemonalb = .true. !< flag to read surface diffused shortwave albedo from input file for NOAH LSM WRFv4 + real(kind=kind_phys) :: aoasis = 1.0 !< potential evaporation multiplication factor for NOAH LSM WRFv4 integer :: fasdas = 0 !< flag to use "flux-adjusting surface data assimilation system"; 0 = OFF, 1 = ON integer :: iopt_thcnd = 1 !< option to treat thermal conductivity in Noah LSM (new in 3.8) !< = 1, original (default) @@ -3519,8 +3519,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%lsoil = lsoil #ifdef CCPP ! Consistency check for RUC LSM - if ((Model%lsm == Model%lsm_ruc .or. Model%lsm == Model%lsm_noah_hafs) .and. Model%nscyc>0) then - write(0,*) 'Logic error: RUC LSM and NOAH HAFS LSM cannot be used with surface data cycling at this point (fhcyc>0)' + if ((Model%lsm == Model%lsm_ruc .or. Model%lsm == Model%lsm_noah_wrfv4) .and. Model%nscyc>0) then + write(0,*) 'Logic error: RUC LSM and NOAH WRFv4 LSM cannot be used with surface data cycling at this point (fhcyc>0)' stop end if ! Flag to read leaf area index from input files (initial conditions) @@ -3543,9 +3543,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ! Set lower bound for LSM model, runs from negative (above surface) to surface (zero) Model%lsnow_lsm_lbound = -Model%lsnow_lsm+1 end if - Model%isurban = -999 !GJF isurban is only used in NOAH/HAFS and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init - Model%isice = -999 !GJF isice is only used in NOAH/HAFS and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init - Model%iswater = -999 !GJF iswater is only used in NOAH/HAFS and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init + Model%isurban = -999 !GJF isurban is only used in NOAH WRFv4 and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init + Model%isice = -999 !GJF isice is only used in NOAH WRFv4 and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init + Model%iswater = -999 !GJF iswater is only used in NOAH WRFv4 and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init Model%iopt_thcnd = iopt_thcnd Model%ua_phys = ua_phys Model%usemonalb = usemonalb @@ -4076,8 +4076,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & #ifdef CCPP elseif (Model%lsm == Model%lsm_ruc) then print *,' RUC Land Surface Model used' - elseif (Model%lsm == Model%lsm_noah_hafs) then - print *,' NOAH/HAFS Land Surface Model used' + elseif (Model%lsm == Model%lsm_noah_wrfv4) then + print *,' NOAH WRFv4 Land Surface Model used' #else elseif (Model%lsm == Model%lsm_ruc) then print *,' RUC Land Surface Model only available through CCPP - job aborted' @@ -6127,7 +6127,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%t2mmp (IM)) allocate (Interstitial%q2mp (IM)) end if - if (Model%lsm == Model%lsm_noah_hafs) then + if (Model%lsm == Model%lsm_noah_wrfv4) then allocate (Interstitial%canopy_save (IM)) allocate (Interstitial%chk_land (IM)) allocate (Interstitial%cmc (IM)) @@ -6673,7 +6673,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%t2mmp = clear_val Interstitial%q2mp = clear_val end if - if (Model%lsm == Model%lsm_noah_hafs) then + if (Model%lsm == Model%lsm_noah_wrfv4) then Interstitial%canopy_save = clear_val Interstitial%chk_land = huge Interstitial%cmc = clear_val @@ -7049,7 +7049,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%t2mmp ) = ', sum(Interstitial%t2mmp ) write (0,*) 'sum(Interstitial%q2mp ) = ', sum(Interstitial%q2mp ) end if - if (Model%lsm == Model%lsm_noah_hafs) then + if (Model%lsm == Model%lsm_noah_wrfv4) then write (0,*) 'sum(Interstitial%canopy_save ) = ', sum(Interstitial%canopy_save ) write (0,*) 'sum(Interstitial%chk_land ) = ', sum(Interstitial%chk_land ) write (0,*) 'sum(Interstitial%cmc ) = ', sum(Interstitial%cmc ) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index b44263148..7ece1e511 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -2657,9 +2657,9 @@ units = flag dimensions = () type = integer -[lsm_noah_hafs] - standard_name = flag_for_noah_hafs_land_surface_scheme - long_name = flag for NOAH HAFS land surface model +[lsm_noah_wrfv4] + standard_name = flag_for_noah_wrfv4_land_surface_scheme + long_name = flag for NOAH WRFv4 land surface model units = flag dimensions = () type = integer @@ -2695,26 +2695,26 @@ type = logical [ua_phys] standard_name = flag_for_noah_lsm_ua_extension - long_name = flag for using University of Arizona(?) extension for NOAH LSM HAFS (see module_sf_noahlsm.F) + long_name = flag for using University of Arizona(?) extension for NOAH LSM WRFv4 (see module_sf_noahlsm.F) units = flag dimensions = () type = logical [usemonalb] standard_name = flag_for_reading_surface_diffused_shortwave_albedo_from_input - long_name = flag for reading surface diffused shortwave albedo for NOAH LSM HAFS (see module_sf_noahlsm.F) + long_name = flag for reading surface diffused shortwave albedo for NOAH LSM WRFv4 (see module_sf_noahlsm.F) units = flag dimensions = () type = logical [aoasis] standard_name = potential_evaporation_multiplicative_factor - long_name = potential evaporation multiplicative factor for NOAH LSM HAFS (see module_sf_noahlsm.F) + long_name = potential evaporation multiplicative factor for NOAH LSM WRFv4 (see module_sf_noahlsm.F) units = none dimensions = () type = real kind = kind_phys [fasdas] standard_name = flag_flux_adjusting_surface_data_assimilation_system - long_name = flag to use the flux adjusting surface data assimilation system for NOAH LSM HAFS (see module_sf_noahlsm.F) + long_name = flag to use the flux adjusting surface data assimilation system for NOAH LSM WRFv4 (see module_sf_noahlsm.F) units = flag dimensions = () type = integer diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index 2f73de37d..9bc87a818 100644 --- a/io/FV3GFS_io.F90 +++ b/io/FV3GFS_io.F90 @@ -243,7 +243,7 @@ subroutine FV3GFS_IPD_checksum (Model, IPD_Data, Atm_block) temp2d(i,j,33) = IPD_Data(nb)%Sfcprop%tprcp(ix) temp2d(i,j,34) = IPD_Data(nb)%Sfcprop%srflag(ix) #ifdef CCPP - if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_hafs) then + if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_wrfv4) then #endif temp2d(i,j,35) = IPD_Data(nb)%Sfcprop%slc(ix,1) temp2d(i,j,36) = IPD_Data(nb)%Sfcprop%slc(ix,2) @@ -647,7 +647,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) allocate(sfc_name3(nvar_s3+nvar_s3mp)) allocate(sfc_var2(nx,ny,nvar_s2m+nvar_s2o+nvar_s2mp+nvar_s2r)) - if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_hafs .or. (.not.warm_start)) then + if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_wrfv4 .or. (.not.warm_start)) then allocate(sfc_var3(nx,ny,Model%lsoil,nvar_s3)) else if (Model%lsm == Model%lsm_ruc) then allocate(sfc_var3(nx,ny,Model%lsoil_lsm,nvar_s3)) @@ -819,7 +819,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) #ifdef CCPP - if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_hafs .or. (.not.warm_start)) then + if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_wrfv4 .or. (.not.warm_start)) then !--- names of the 3D variables to save sfc_name3(1) = 'stc' sfc_name3(2) = 'smc' @@ -1042,7 +1042,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) endif #ifdef CCPP - if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_hafs .or. (.not.warm_start)) then + if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_wrfv4 .or. (.not.warm_start)) then !--- 3D variables do lsoil = 1,Model%lsoil Sfcprop(nb)%stc(ix,lsoil) = sfc_var3(i,j,lsoil,1) !--- stc @@ -1552,7 +1552,7 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta allocate(sfc_name2(nvar2m+nvar2o+nvar2mp+nvar2r)) allocate(sfc_name3(nvar3+nvar3mp)) allocate(sfc_var2(nx,ny,nvar2m+nvar2o+nvar2mp+nvar2r)) - if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_hafs) then + if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_wrfv4) then allocate(sfc_var3(nx,ny,Model%lsoil,nvar3)) elseif (Model%lsm == Model%lsm_ruc) then allocate(sfc_var3(nx,ny,Model%lsoil_lsm,nvar3)) @@ -1716,7 +1716,7 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta nullify(var2_p) #ifdef CCPP - if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_hafs) then + if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_wrfv4) then !--- names of the 3D variables to save sfc_name3(1) = 'stc' sfc_name3(2) = 'smc' @@ -1890,7 +1890,7 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta endif #ifdef CCPP - if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_hafs) then + if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_wrfv4) then !--- 3D variables do lsoil = 1,Model%lsoil sfc_var3(i,j,lsoil,1) = Sfcprop(nb)%stc(ix,lsoil) !--- stc