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