diff --git a/CODEOWNERS b/CODEOWNERS
index 0d5230f89..b6c597371 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -3,7 +3,7 @@
# These owners will be the default owners for everything in the repo.
#* @defunkt
-* @climbfuji @llpcarson @grantfirl @JulieSchramm
+* @DomHeinzeller
# Order is important. The last matching pattern has the most precedence.
# So if a pull request only touches javascript files, only these owners
diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90
index 4680f8de7..cbb1765f0 100644
--- a/physics/GFS_debug.F90
+++ b/physics/GFS_debug.F90
@@ -491,18 +491,19 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling,
end if
! CCPP/RUC only
if (Model%lsm == Model%lsm_ruc) then
- call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%sh2o', Sfcprop%sh2o)
- call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%smois', Sfcprop%smois)
- call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%tslb', Sfcprop%tslb)
- call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zs', Sfcprop%zs)
- call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%clw_surf', Sfcprop%clw_surf)
- call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%qwv_surf', Sfcprop%qwv_surf)
- call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%cndm_surf', Sfcprop%cndm_surf)
- call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%flag_frsoil', Sfcprop%flag_frsoil)
- call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%rhofr', Sfcprop%rhofr)
- call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%tsnow', Sfcprop%tsnow)
- call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%snowfallac ', Sfcprop%snowfallac)
- call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%acsnow ', Sfcprop%acsnow)
+ call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%sh2o', Sfcprop%sh2o)
+ call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%smois', Sfcprop%smois)
+ call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%tslb', Sfcprop%tslb)
+ call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%clw_surf_land', Sfcprop%clw_surf_land)
+ call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%clw_surf_ice', Sfcprop%clw_surf_ice)
+ call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%qwv_surf_land', Sfcprop%qwv_surf_land)
+ call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%qwv_surf_ice', Sfcprop%qwv_surf_ice)
+ call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%flag_frsoil', Sfcprop%flag_frsoil)
+ call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%rhofr', Sfcprop%rhofr)
+ call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%tsnow_land', Sfcprop%tsnow_land)
+ call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%tsnow_ice', Sfcprop%tsnow_ice)
+ call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%snowfallac_land', Sfcprop%snowfallac_land)
+ call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%snowfallac_ice', Sfcprop%snowfallac_ice)
end if
! Radtend
call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Radtend%sfcfsw%upfxc', Radtend%sfcfsw(:)%upfxc)
diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90
index 3c894b777..d547eb308 100644
--- a/physics/GFS_phys_time_vary.fv3.F90
+++ b/physics/GFS_phys_time_vary.fv3.F90
@@ -519,6 +519,7 @@ subroutine GFS_phys_time_vary_run (Data, Model, nthrds, first_time_step, errmsg,
endif
enddo
enddo
+ ! DH* 20201104: don't forget snocvr_ice for RUC LSM (see FV3GFS_io.F90)
endif
endif
#endif
diff --git a/physics/GFS_phys_time_vary.scm.F90 b/physics/GFS_phys_time_vary.scm.F90
index 5fcc9ed84..ece9d5ee9 100644
--- a/physics/GFS_phys_time_vary.scm.F90
+++ b/physics/GFS_phys_time_vary.scm.F90
@@ -389,6 +389,7 @@ subroutine GFS_phys_time_vary_run (Grid, Statein, Model, Tbd, Sfcprop, Cldprop,
endif
endif
enddo
+ ! DH* 20201104: don't forget snocvr_ice for RUC LSM (see FV3GFS_io.F90)
endif
endif
#endif
diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90
index 6cbf35f03..d3d17213f 100644
--- a/physics/GFS_surface_composites.F90
+++ b/physics/GFS_surface_composites.F90
@@ -606,7 +606,7 @@ subroutine GFS_surface_composites_post_run (
tsfco(i) = tsfc(i)
endif
tsfcl(i) = tsfc(i)
- do k=1,kice ! store tiice in stc to reduce output in the nonfrac grid case
+ do k=1,min(kice,km) ! store tiice in stc to reduce output in the nonfrac grid case
stc(i,k) = tiice(i,k)
end do
endif
diff --git a/physics/docs/pdftxt/GSD_adv_suite.txt b/physics/docs/pdftxt/GSD_adv_suite.txt
index 39c5ebd20..1f2dbe7fa 100644
--- a/physics/docs/pdftxt/GSD_adv_suite.txt
+++ b/physics/docs/pdftxt/GSD_adv_suite.txt
@@ -77,9 +77,6 @@ The GSD_v1 physics suite uses the parameterizations in the following order:
sfc_nst
sfc_nst_post
lsm_ruc
- lsm_ruc_sfc_sice_pre
- sfc_sice
- lsm_ruc_sfc_sice_post
GFS_surface_loop_control_part2
diff --git a/physics/lsm_ruc_sfc_sice_interstitial.F90 b/physics/lsm_ruc_sfc_sice_interstitial.F90
deleted file mode 100644
index 27033fcc8..000000000
--- a/physics/lsm_ruc_sfc_sice_interstitial.F90
+++ /dev/null
@@ -1,123 +0,0 @@
-module lsm_ruc_sfc_sice_pre
-
- use machine, only: kind_phys
-
- implicit none
-
- private
-
- public :: lsm_ruc_sfc_sice_pre_init, lsm_ruc_sfc_sice_pre_run, lsm_ruc_sfc_sice_pre_finalize
-
-contains
-
- subroutine lsm_ruc_sfc_sice_pre_init ()
- end subroutine lsm_ruc_sfc_sice_pre_init
-
- subroutine lsm_ruc_sfc_sice_pre_finalize ()
- end subroutine lsm_ruc_sfc_sice_pre_finalize
-
-#if 0
-!> \section arg_table_lsm_ruc_sfc_sice_pre_run Argument Table
-!! \htmlinclude lsm_ruc_sfc_sice_pre_run.html
-!!
-#endif
- subroutine lsm_ruc_sfc_sice_pre_run(im, lsoil_ruc, lsoil, kice, land, icy, stc, tslb, tiice, errmsg, errflg)
-
- implicit none
-
- ! Interface variables
- integer, intent(in) :: im, lsoil_ruc, lsoil, kice
- logical, dimension(im), intent(in) :: land, icy
-! --- on Noah levels
- real (kind=kind_phys), dimension(im,lsoil), intent(inout) :: stc
-! --- on RUC levels
- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(in) :: tslb
- real (kind=kind_phys), dimension(im,kice), intent(inout) :: tiice
-
- character(len=*), intent(out) :: errmsg
- integer, intent(out) :: errflg
-
- ! Local variables
- integer :: i, k
-
- ! Initialize CCPP error handling variables
- errmsg = ''
- errflg = 0
-
- do i=1,im
- if (icy(i)) then
- do k=1,kice
- tiice(i,k) = tslb(i,k)
- end do
- else if (.not.land(i)) then
- do k=1,min(lsoil,lsoil_ruc)
- stc(i,k) = tslb(i,k)
- end do
- end if
- end do
-
- end subroutine lsm_ruc_sfc_sice_pre_run
-
-end module lsm_ruc_sfc_sice_pre
-
-module lsm_ruc_sfc_sice_post
-
- use machine, only: kind_phys
-
- implicit none
-
- private
-
- public :: lsm_ruc_sfc_sice_post_init, lsm_ruc_sfc_sice_post_run, lsm_ruc_sfc_sice_post_finalize
-
-contains
-
- subroutine lsm_ruc_sfc_sice_post_init ()
- end subroutine lsm_ruc_sfc_sice_post_init
-
- subroutine lsm_ruc_sfc_sice_post_finalize ()
- end subroutine lsm_ruc_sfc_sice_post_finalize
-
-#if 0
-!> \section arg_table_lsm_ruc_sfc_sice_post_run Argument Table
-!! \htmlinclude lsm_ruc_sfc_sice_post_run.html
-!!
-#endif
- subroutine lsm_ruc_sfc_sice_post_run(im, lsoil_ruc, lsoil, kice, land, icy, stc, tslb, tiice, errmsg, errflg)
-
- implicit none
-
- ! Interface variables
- integer, intent(in) :: im, lsoil_ruc, lsoil, kice
- logical, dimension(im), intent(in) :: land, icy
-! --- on Noah levels
- real (kind=kind_phys), dimension(im,lsoil), intent(in) :: stc
- real (kind=kind_phys), dimension(im,kice), intent(in) :: tiice
-! --- on RUC levels
- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: tslb
-
- character(len=*), intent(out) :: errmsg
- integer, intent(out) :: errflg
-
- ! Local variables
- integer :: i, k
-
- ! Initialize CCPP error handling variables
- errmsg = ''
- errflg = 0
-
- do i=1,im
- if (icy(i)) then
- do k=1,kice
- tslb(i,k) = tiice(i,k)
- end do
- else if (.not.land(i)) then
- do k=1,min(lsoil,lsoil_ruc)
- tslb(i,k) = stc(i,k)
- end do
- end if
- end do
-
- end subroutine lsm_ruc_sfc_sice_post_run
-
-end module lsm_ruc_sfc_sice_post
diff --git a/physics/lsm_ruc_sfc_sice_interstitial.meta b/physics/lsm_ruc_sfc_sice_interstitial.meta
deleted file mode 100644
index d7a5736a5..000000000
--- a/physics/lsm_ruc_sfc_sice_interstitial.meta
+++ /dev/null
@@ -1,204 +0,0 @@
-[ccpp-table-properties]
- name = lsm_ruc_sfc_sice_pre
- type = scheme
- dependencies = machine.F
-
-########################################################################
-[ccpp-arg-table]
- name = lsm_ruc_sfc_sice_pre_run
- type = scheme
-[im]
- standard_name = horizontal_loop_extent
- long_name = horizontal loop extent
- units = count
- dimensions = ()
- type = integer
- intent = in
- optional = F
-[lsoil_ruc]
- standard_name = soil_vertical_dimension_for_land_surface_model
- long_name = number of soil layers internal to land surface model
- units = count
- dimensions = ()
- type = integer
- intent = in
- optional = F
-[lsoil]
- standard_name = soil_vertical_dimension
- long_name = soil vertical layer dimension
- units = count
- dimensions = ()
- type = integer
- intent = in
- optional = F
-[kice]
- standard_name = ice_vertical_dimension
- long_name = vertical loop extent for ice levels, start at 1
- units = count
- dimensions = ()
- type = integer
- intent = in
- optional = F
-[land]
- standard_name = flag_nonzero_land_surface_fraction
- long_name = flag indicating presence of some land surface area fraction
- units = flag
- dimensions = (horizontal_loop_extent)
- type = logical
- intent = in
- optional = F
-[icy]
- standard_name = flag_nonzero_sea_ice_surface_fraction
- long_name = flag indicating presence of some sea ice surface area fraction
- units = flag
- dimensions = (horizontal_loop_extent)
- type = logical
- intent = inout
- optional = F
-[stc]
- standard_name = soil_temperature
- long_name = soil temperature
- units = K
- dimensions = (horizontal_loop_extent,soil_vertical_dimension)
- type = real
- kind = kind_phys
- intent = inout
- optional = F
-[tslb]
- standard_name = soil_temperature_for_land_surface_model
- long_name = soil temperature for land surface model
- units = K
- dimensions = (horizontal_loop_extent,soil_vertical_dimension_for_land_surface_model)
- type = real
- kind = kind_phys
- intent = in
- optional = F
-[tiice]
- standard_name = internal_ice_temperature
- long_name = sea ice internal temperature
- units = K
- dimensions = (horizontal_loop_extent,ice_vertical_dimension)
- type = real
- kind = kind_phys
- intent = inout
- optional = F
-[errmsg]
- standard_name = ccpp_error_message
- long_name = error message for error handling in CCPP
- units = none
- dimensions = ()
- type = character
- kind = len=*
- intent = out
- optional = F
-[errflg]
- standard_name = ccpp_error_flag
- long_name = error flag for error handling in CCPP
- units = flag
- dimensions = ()
- type = integer
- intent = out
- optional = F
-
-########################################################################
-[ccpp-table-properties]
- name = lsm_ruc_sfc_sice_post
- type = scheme
- dependencies = machine.F
-
-########################################################################
-[ccpp-arg-table]
- name = lsm_ruc_sfc_sice_post_run
- type = scheme
-[im]
- standard_name = horizontal_loop_extent
- long_name = horizontal loop extent
- units = count
- dimensions = ()
- type = integer
- intent = in
- optional = F
-[lsoil_ruc]
- standard_name = soil_vertical_dimension_for_land_surface_model
- long_name = number of soil layers internal to land surface model
- units = count
- dimensions = ()
- type = integer
- intent = in
- optional = F
-[lsoil]
- standard_name = soil_vertical_dimension
- long_name = soil vertical layer dimension
- units = count
- dimensions = ()
- type = integer
- intent = in
- optional = F
-[kice]
- standard_name = ice_vertical_dimension
- long_name = vertical loop extent for ice levels, start at 1
- units = count
- dimensions = ()
- type = integer
- intent = in
- optional = F
-[land]
- standard_name = flag_nonzero_land_surface_fraction
- long_name = flag indicating presence of some land surface area fraction
- units = flag
- dimensions = (horizontal_loop_extent)
- type = logical
- intent = in
- optional = F
-[icy]
- standard_name = flag_nonzero_sea_ice_surface_fraction
- long_name = flag indicating presence of some sea ice surface area fraction
- units = flag
- dimensions = (horizontal_loop_extent)
- type = logical
- intent = inout
- optional = F
-[stc]
- standard_name = soil_temperature
- long_name = soil temperature
- units = K
- dimensions = (horizontal_loop_extent,soil_vertical_dimension)
- type = real
- kind = kind_phys
- intent = in
- optional = F
-[tslb]
- standard_name = soil_temperature_for_land_surface_model
- long_name = soil temperature for land surface model
- units = K
- dimensions = (horizontal_loop_extent,soil_vertical_dimension_for_land_surface_model)
- type = real
- kind = kind_phys
- intent = inout
- optional = F
-[tiice]
- standard_name = internal_ice_temperature
- long_name = sea ice internal temperature
- units = K
- dimensions = (horizontal_loop_extent,ice_vertical_dimension)
- type = real
- kind = kind_phys
- intent = inout
- optional = F
-[errmsg]
- standard_name = ccpp_error_message
- long_name = error message for error handling in CCPP
- units = none
- dimensions = ()
- type = character
- kind = len=*
- intent = out
- optional = F
-[errflg]
- standard_name = ccpp_error_flag
- long_name = error flag for error handling in CCPP
- units = flag
- dimensions = ()
- type = integer
- intent = out
- optional = F
diff --git a/physics/module_MYNNSFC_wrapper.F90 b/physics/module_MYNNSFC_wrapper.F90
index 7cc64bbcf..717024e41 100644
--- a/physics/module_MYNNSFC_wrapper.F90
+++ b/physics/module_MYNNSFC_wrapper.F90
@@ -30,7 +30,7 @@ end subroutine mynnsfc_wrapper_finalize
SUBROUTINE mynnsfc_wrapper_run( &
& im,levs, &
& itimestep,iter, &
- & flag_init,flag_restart,lsm, &
+ & flag_init,flag_restart,lsm,lsm_ruc,&
& sigmaf,vegtype,shdmax,ivegsrc, & !intent(in)
& z0pert,ztpert, & !intent(in)
& redrag,sfc_z0_type, & !intent(in)
@@ -54,7 +54,8 @@ SUBROUTINE mynnsfc_wrapper_run( &
& fh2_ocn, fh2_lnd, fh2_ice, & !intent(inout)
& hflx_ocn, hflx_lnd, hflx_ice, &
& qflx_ocn, qflx_lnd, qflx_ice, &
- & QSFC, qsfc_ruc, USTM, ZOL, MOL, &
+ & QSFC, qsfc_lnd_ruc, qsfc_ice_ruc, &
+ & USTM, ZOL, MOL, &
& RMOL, WSPD, ch, HFLX, QFLX, LH, &
& FLHC, FLQC, &
& U10, V10, TH2, T2, Q2, &
@@ -122,7 +123,7 @@ SUBROUTINE mynnsfc_wrapper_run( &
!MYNN-1D
REAL :: delt
INTEGER :: im, levs
- INTEGER :: iter, k, i, itimestep, lsm
+ INTEGER :: iter, k, i, itimestep, lsm, lsm_ruc
LOGICAL :: flag_init,flag_restart,lprnt
INTEGER :: IDS,IDE,JDS,JDE,KDS,KDE, &
& IMS,IME,JMS,JME,KMS,KME, &
@@ -160,11 +161,12 @@ SUBROUTINE mynnsfc_wrapper_run( &
& qsfc_ocn, qsfc_lnd, qsfc_ice
!MYNN-2D
- real(kind=kind_phys), dimension(im), intent(in) :: &
- & dx, pblh, slmsk, ps
+ real(kind=kind_phys), dimension(:), intent(in) :: &
+ & dx, pblh, slmsk, ps, &
+ & qsfc_lnd_ruc, qsfc_ice_ruc
real(kind=kind_phys), dimension(im), intent(inout) :: &
- & ustm, hflx, qflx, wspd, qsfc, qsfc_ruc, &
+ & ustm, hflx, qflx, wspd, qsfc, &
& FLHC, FLQC, U10, V10, TH2, T2, Q2, &
& CHS2, CQS2, rmol, zol, mol, ch, &
& lh, wstar
@@ -172,7 +174,7 @@ SUBROUTINE mynnsfc_wrapper_run( &
real, dimension(im) :: &
& hfx, znt, psim, psih, &
& chs, ck, cd, mavail, xland, GZ1OZ0, &
- & cpm, qgh, qfx
+ & cpm, qgh, qfx, qsfc_ruc
! Initialize CCPP error handling variables
errmsg = ''
@@ -216,6 +218,13 @@ SUBROUTINE mynnsfc_wrapper_run( &
where (wet) znt_ocn=znt_ocn*0.01
where (icy) znt_ice=znt_ice*0.01
+ ! qsfc ruc
+ qsfc_ruc = 0.0
+ if (lsm==lsm_ruc) then
+ where (dry) qsfc_ruc = qsfc_lnd_ruc
+ where (icy) qsfc_ruc = qsfc_ice_ruc
+ end if
+
! if (lprnt) then
! write(0,*)"CALLING SFCLAY_mynn; input:"
! write(0,*)"T:",t3d(1,1),t3d(1,2),t3d(1,3)
diff --git a/physics/module_MYNNSFC_wrapper.meta b/physics/module_MYNNSFC_wrapper.meta
index 6a410c297..964d3ed93 100644
--- a/physics/module_MYNNSFC_wrapper.meta
+++ b/physics/module_MYNNSFC_wrapper.meta
@@ -63,6 +63,14 @@
type = integer
intent = in
optional = F
+[lsm_ruc]
+ standard_name = flag_for_ruc_land_surface_scheme
+ long_name = flag for RUC land surface model
+ units = flag
+ dimensions = ()
+ type = integer
+ intent = in
+ optional = F
[sigmaf]
standard_name = bounded_vegetation_area_fraction
long_name = areal fractional cover of green vegetation bounded on the bottom
@@ -713,14 +721,23 @@
kind = kind_phys
intent = inout
optional = F
-[qsfc_ruc]
- standard_name = water_vapor_mixing_ratio_at_surface
- long_name = water vapor mixing ratio at surface
+[qsfc_lnd_ruc]
+ standard_name = water_vapor_mixing_ratio_at_surface_over_land
+ long_name = water vapor mixing ratio at surface over land
units = kg kg-1
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- intent = inout
+ intent = in
+ optional = F
+[qsfc_ice_ruc]
+ standard_name = water_vapor_mixing_ratio_at_surface_over_ice
+ long_name = water vapor mixing ratio at surface over ice
+ units = kg kg-1
+ dimensions = (horizontal_dimension)
+ type = real
+ kind = kind_phys
+ intent = in
optional = F
[ustm]
standard_name = surface_friction_velocity_drag
diff --git a/physics/module_sf_mynn.F90 b/physics/module_sf_mynn.F90
index ebbc3dcf9..76fa24866 100644
--- a/physics/module_sf_mynn.F90
+++ b/physics/module_sf_mynn.F90
@@ -149,7 +149,7 @@ SUBROUTINE SFCLAY_mynn( &
CP,G,ROVCP,R,XLV, & !in
SVP1,SVP2,SVP3,SVPT0,EP1,EP2,KARMAN, & !in
ISFFLX,isftcflx,lsm,iz0tlnd,psi_opt, & !in
- & sigmaf,vegtype,shdmax,ivegsrc, & !intent(in)
+ & sigmaf,vegtype,shdmax,ivegsrc, & !intent(in)
& z0pert,ztpert, & !intent(in)
& redrag,sfc_z0_type, & !intent(in)
itimestep,iter, & !in
@@ -351,7 +351,8 @@ SUBROUTINE SFCLAY_mynn( &
REAL, DIMENSION( ims:ime ), INTENT(IN) :: &
& tskin_ocn, tskin_lnd, tskin_ice, &
& tsurf_ocn, tsurf_lnd, tsurf_ice, &
- & snowh_ocn, snowh_lnd, snowh_ice
+ & snowh_ocn, snowh_lnd, snowh_ice, &
+ & qsfc_ruc
REAL, DIMENSION( ims:ime), INTENT(INOUT) :: &
& ZNT_ocn, ZNT_lnd, ZNT_ice, &
@@ -366,8 +367,7 @@ SUBROUTINE SFCLAY_mynn( &
& fh2_ocn, fh2_lnd, fh2_ice, &
& HFLX_ocn, HFLX_lnd, HFLX_ice, &
& QFLX_ocn, QFLX_lnd, QFLX_ice, &
- & qsfc_ocn, qsfc_lnd, qsfc_ice, &
- & qsfc_ruc
+ & qsfc_ocn, qsfc_lnd, qsfc_ice
!ADDITIONAL OUTPUT
!JOE-begin
diff --git a/physics/module_sf_ruclsm.F90 b/physics/module_sf_ruclsm.F90
index 024f97772..a0e74ce7a 100644
--- a/physics/module_sf_ruclsm.F90
+++ b/physics/module_sf_ruclsm.F90
@@ -506,7 +506,14 @@ SUBROUTINE LSMRUC( &
soilice(k)=0.
soiliqw(k)=0.
enddo
- endif ! init=.true., iter=1
+ else ! .not. init==true.
+ DO J=jts,jte
+ DO i=its,ite
+ SFCRUNOFF(i,j) = 0.
+ UDRUNOFF(i,j) = 0.
+ ENDDO
+ ENDDO
+ endif ! init==.true.
!-----------------------------------------------------------------
@@ -6197,7 +6204,13 @@ SUBROUTINE SOILPROP( debug_print, &
!--- Next 3 lines are for Johansen thermal conduct.
gamd=(1.-ws)*2700.
kdry=(0.135*gamd+64.7)/(2700.-0.947*gamd)
- kas=kqwrtz**qwrtz*kzero**(1.-qwrtz)
+ !kas=kqwrtz**qwrtz*kzero**(1.-qwrtz)
+ !-- one more option from Christa's paper
+ if(qwrtz > 0.2) then
+ kas=kqwrtz**qwrtz*kzero**(1.-qwrtz)
+ else
+ kas=kqwrtz**qwrtz*3.**(1.-qwrtz)
+ endif
DO K=1,NZS1
tn=tav(k) - 273.15
@@ -6256,13 +6269,13 @@ SUBROUTINE SOILPROP( debug_print, &
if((ws-a).lt.0.12)then
diffu(K)=0.
else
- H=max(0.,(soilmoism(K)-a)/(max(1.e-8,(dqm-a))))
+ H=max(0.,(soilmoism(K)+qmin-a)/(max(1.e-8,(dqm-a))))
facd=1.
if(a.ne.0.)facd=1.-a/max(1.e-8,soilmoism(K))
ame=max(1.e-8,dqm-riw*soilicem(K))
!--- DIFFU is diffusional conductivity of soil water
diffu(K)=-BCLH*KSAT*PSIS/ame* &
- (dqm/ame)**3. &
+ (ws/ame)**3. &
*H**(BCLH+2.)*facd
endif
@@ -6288,7 +6301,7 @@ SUBROUTINE SOILPROP( debug_print, &
fach=1.
if(soilice(k).ne.0.) &
fach=1.-riw*soilice(k)/max(1.e-8,soilmois(k))
- am=max(1.e-8,dqm-riw*soilice(k))
+ am=max(1.e-8,ws-riw*soilice(k))
!--- HYDRO is hydraulic conductivity of soil water
hydro(K)=min(KSAT,KSAT/am* &
(soiliqw(K)/am) &
@@ -6512,7 +6525,7 @@ SUBROUTINE VILKA(TN,D1,D2,PP,QS,TS,TT,NSTEP,ii,j,iland,isoil)
REAL :: F1,T1,T2,RN
INTEGER :: I,I1
-
+
I=(TN-1.7315E2)/.05+1
T1=173.1+FLOAT(I)*.05
F1=T1+D1*TT(I)-D2
@@ -6523,7 +6536,7 @@ SUBROUTINE VILKA(TN,D1,D2,PP,QS,TS,TT,NSTEP,ii,j,iland,isoil)
T1=173.1+FLOAT(I)*.05
F1=T1+D1*TT(I)-D2
RN=F1/(.05+D1*(TT(I+1)-TT(I)))
- I=I-INT(RN)
+ I=I-INT(RN)
IF(I.GT.5000.OR.I.LT.1) GOTO 1
IF(I1.NE.I) GOTO 10
TS=T1-.05*RN
diff --git a/physics/namelist_soilveg_ruc.F90 b/physics/namelist_soilveg_ruc.F90
index c40b859bf..1e05122c4 100644
--- a/physics/namelist_soilveg_ruc.F90
+++ b/physics/namelist_soilveg_ruc.F90
@@ -1,3 +1,5 @@
+!>\file namelist_soilveg_ruc.F90
+!>\ingroup RUC_lsm
module namelist_soilveg_ruc
implicit none
save
diff --git a/physics/set_soilveg_ruc.F90 b/physics/set_soilveg_ruc.F90
index e48f4ed88..cac4fd1e7 100644
--- a/physics/set_soilveg_ruc.F90
+++ b/physics/set_soilveg_ruc.F90
@@ -26,13 +26,14 @@ subroutine set_soilveg_ruc(me,isot,ivet,nlunit)
real refsmc1, wltsmc1
NAMELIST /SOIL_VEG_RUC/ SLOPE_DATA, ALBTBL, Z0TBL, LEMITBL, &
- & PCTBL, SHDTBL, &
+ & PCTBL, SHDTBL, &
& IFORTBL, RSTBL, RGLTBL, HSTBL, SNUPTBL, LAITBL, MAXALB, &
& LPARAM, TOPT_DATA, CMCMAX_DATA, CFACTR_DATA, &
& RSMAX_DATA, BARE, NATURAL, CROP, URBAN, &
& DEFINED_VEG, DEFINED_SOIL, DEFINED_SLOPE, &
& BB, DRYSMC, HC, MAXSMC, REFSMC, SATPSI, SATDK, SATDW, &
- & WLTSMC, QTZ, mosaic_soil, mosaic_lu, REFSMCnoah, WLTSMCnoah
+ & WLTSMC, QTZ, mosaic_soil, mosaic_lu, &
+ & REFSMCnoah, WLTSMCnoah, MAXSMCnoah
if(ivet.eq.2) then
! Using umd veg classification
diff --git a/physics/sfc_drv_ruc.F90 b/physics/sfc_drv_ruc.F90
index f6be851b1..c3ad85a9e 100644
--- a/physics/sfc_drv_ruc.F90
+++ b/physics/sfc_drv_ruc.F90
@@ -140,7 +140,6 @@ subroutine lsm_ruc_init (me, master, isot, ivegsrc, nlunit, &
call init_soil_depth_3 ( zs , dzs , lsoil_ruc )
- !if( .not. flag_restart) then
call rucinit (flag_restart, im, lsoil_ruc, lsoil, nlev, & ! in
me, master, lsm_ruc, lsm, slmsk, & ! in
soiltyp, vegtype, & ! in
@@ -157,7 +156,6 @@ subroutine lsm_ruc_init (me, master, isot, ivegsrc, nlunit, &
enddo
enddo ! i
- !endif ! flag_restart
!-- end of initialization
if ( debug_print) then
@@ -202,7 +200,6 @@ end subroutine lsm_ruc_finalize
! soiltyp - integer, soil type (integer index) im !
! vegtype - integer, vegetation type (integer index) im !
! sigmaf - real, areal fractional cover of green vegetation im !
-! sfcemis - real, sfc lw emissivity ( fraction ) im !
! dlwflx - real, total sky sfc downward lw flux ( w/m**2 ) im !
! dswflx - real, total sky sfc downward sw flux ( w/m**2 ) im !
! snet - real, total sky sfc netsw flx into ground(w/m**2) im !
@@ -218,8 +215,6 @@ end subroutine lsm_ruc_finalize
! shdmin - real, min fractional coverage of green veg im !
! shdmax - real, max fractnl cover of green veg (not used) im !
! snoalb - real, upper bound on max albedo over deep snow im !
-! sfalb - real, mean sfc diffused sw albedo with effect !
-! of snow (fractional) im !
! flag_iter- logical, im !
! flag_guess-logical, im !
! isot - integer, sfc soil type data source zobler or statsgo !
@@ -263,25 +258,43 @@ end subroutine lsm_ruc_finalize
!!
!>\section gen_lsmruc GSD RUC LSM General Algorithm
subroutine lsm_ruc_run & ! inputs
- & ( iter, me, master, kdt, im, nlev, lsoil_ruc, lsoil, zs, &
+ & ( iter, me, master, delt, kdt, im, nlev, lsm_ruc, lsm, &
+ & imp_physics, imp_physics_gfdl, imp_physics_thompson, &
+ & do_mynnsfclay, lsoil_ruc, lsoil, rdlai, zs, &
& t1, q1, qc, soiltyp, vegtype, sigmaf, laixy, &
- & sfcemis, dlwflx, dswsfc, snet, delt, tg3, cm, ch, &
+ & dlwflx, dswsfc, snet, tg3, &
+ & land, icy, lake, &
+ & rainnc, rainc, ice, snow, graupel, &
& prsl1, zf, wind, shdmin, shdmax, alvwf, alnwf, &
- & snoalb, sfalb, flag_iter, flag_guess, isot, ivegsrc, fice, &
- & smc, stc, slc, lsm_ruc, lsm, land, islimsk, rdlai, &
- & imp_physics, imp_physics_gfdl, imp_physics_thompson, &
- & smcwlt2, smcref2, do_mynnsfclay, &
- & con_cp, con_rv, con_rd, con_g, con_pi, con_hvap, con_fvirt,& ! constants
- & weasd, snwdph, tskin, tskin_wat, & ! in/outs
- & rainnc, rainc, ice, snow, graupel, & ! in
- & srflag, smois, tslb, sh2o, keepfr, smfrkeep, & ! in/outs, on RUC levels
- & canopy, trans, tsurf, tsnow, zorl, &
- & sfcqc, sfcdew, tice, sfcqv, &
- & sncovr1, qsurf, gflux, drain, evap, hflx, & ! outputs
- & rhosnf, runof, runoff, srunoff, &
- & chh, cmm, evbs, evcw, sbsno, stm, wetness, &
- & acsnow, snowfallac, &
- & flag_init, flag_restart, errmsg, errflg &
+ & srflag, snoalb, isot, ivegsrc, fice, smcwlt2, smcref2, &
+ ! --- constants
+ & con_cp, con_rd, con_rv, con_g, con_pi, con_hvap, &
+ & con_fvirt, &
+ ! for water
+ & ch_wat, tskin_wat, &
+ ! --- in/outs for ice and land
+ & semis_lnd, semis_ice, &
+ & sncovr1_lnd, weasd_lnd, snwdph_lnd, tskin_lnd, &
+ & sncovr1_ice, weasd_ice, snwdph_ice, tskin_ice, &
+ ! for land
+ & smois, tsice, tslb, sh2o, keepfr, smfrkeep, & ! on RUC levels
+ & canopy, trans, tsurf_lnd, tsnow_lnd, z0rl_lnd, &
+ & sfcqc_lnd, sfcqv_lnd, &
+ & qsurf_lnd, gflux_lnd, evap_lnd, hflx_lnd, &
+ & runof, runoff, srunoff, drain, &
+ & cm_lnd, ch_lnd, evbs, evcw, stm, wetness, &
+ & snowfallac_lnd, &
+ ! for ice
+ & sfcqc_ice, sfcqv_ice, &
+ & tice, tsurf_ice, tsnow_ice, z0rl_ice, &
+ & qsurf_ice, gflux_ice, evap_ice, ep1d_ice, hflx_ice, &
+ & cm_ice, ch_ice, snowfallac_ice, &
+ ! --- out
+ & rhosnf, sbsno, &
+ & cmm_lnd, chh_lnd, cmm_ice, chh_ice, &
+ !
+ & flag_iter, flag_guess, flag_init, flag_restart, &
+ & flag_cice, frac_grid, errmsg, errflg &
& )
implicit none
@@ -289,6 +302,9 @@ subroutine lsm_ruc_run & ! inputs
! --- constant parameters:
real(kind=kind_phys), parameter :: rhoh2o = 1000.0
real(kind=kind_phys), parameter :: stbolt = 5.670400e-8
+ real(kind=kind_phys), parameter :: cimin = 0.15 !--- in GFS
+ !real(kind=kind_phys), parameter :: cimin = 0.02 !--- minimum ice concentration, 0.15 in GFS
+ real(kind=kind_phys), parameter :: con_tice = 271.2
! --- input:
integer, intent(in) :: me, master
@@ -296,22 +312,26 @@ subroutine lsm_ruc_run & ! inputs
integer, intent(in) :: lsm_ruc, lsm
integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson
- real (kind=kind_phys), dimension(im,lsoil), intent(inout) :: smc,stc,slc
-
- real (kind=kind_phys), dimension(im), intent(in) :: &
- & t1, sigmaf, sfcemis, dlwflx, dswsfc, snet, tg3, cm, &
- & ch, prsl1, wind, shdmin, shdmax, &
- & snoalb, alvwf, alnwf, zf, qc, q1
-
- real (kind=kind_phys), dimension(:), intent(in) :: laixy
+ real (kind=kind_phys), dimension(im), intent(in) :: &
+ & t1, sigmaf, laixy, dlwflx, dswsfc, snet, tg3, &
+ & prsl1, wind, shdmin, shdmax, &
+ & snoalb, alvwf, alnwf, zf, qc, q1, &
+ ! for land
+ & cm_lnd, ch_lnd, &
+ ! for water
+ & ch_wat, tskin_wat, &
+ ! for ice
+ & cm_ice, ch_ice
real (kind=kind_phys), intent(in) :: delt
- real (kind=kind_phys), intent(in) :: con_cp, con_rv, con_g, &
- con_pi, con_rd, &
+ real (kind=kind_phys), intent(in) :: con_cp, con_rv, con_g, &
+ con_pi, con_rd, &
con_hvap, con_fvirt
- logical, dimension(im), intent(in) :: flag_iter, flag_guess, land
- integer, dimension(im), intent(in) :: islimsk ! sea/land/ice mask (=0/1/2)
+ logical, dimension(im), intent(in) :: flag_iter, flag_guess
+ logical, dimension(im), intent(in) :: land, icy, lake
+ logical, dimension(im), intent(in) :: flag_cice
+ logical, intent(in) :: frac_grid
logical, intent(in) :: do_mynnsfclay
logical, intent(in) :: rdlai
@@ -319,61 +339,96 @@ subroutine lsm_ruc_run & ! inputs
! --- in/out:
integer, dimension(im), intent(inout) :: soiltyp, vegtype
real (kind=kind_phys), dimension(lsoil_ruc), intent(in) :: zs
- real (kind=kind_phys), dimension(im), intent(inout) :: weasd, &
- & snwdph, tskin, tskin_wat, &
- & srflag, canopy, trans, tsurf, zorl, tsnow, &
- & sfcqc, sfcqv, sfcdew, fice, tice, sfalb, smcwlt2, smcref2
+ real (kind=kind_phys), dimension(im), intent(inout) :: srflag, &
+ & canopy, trans, smcwlt2, smcref2, &
+ ! for land
+ & weasd_lnd, snwdph_lnd, tskin_lnd, &
+ & tsurf_lnd, z0rl_lnd, tsnow_lnd, &
+ & sfcqc_lnd, sfcqv_lnd, &
+ ! for ice
+ & weasd_ice, snwdph_ice, tskin_ice, &
+ & tsurf_ice, z0rl_ice, tsnow_ice, &
+ & sfcqc_ice, sfcqv_ice, fice, tice
+
! --- in
- real (kind=kind_phys), dimension(im), intent(in) :: &
+ real (kind=kind_phys), dimension(im), intent(in) :: &
& rainnc, rainc, ice, snow, graupel
! --- in/out:
! --- on RUC levels
- real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: &
- & smois, tslb, sh2o, keepfr, smfrkeep
+ real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: &
+ & smois, tsice, tslb, sh2o, keepfr, smfrkeep
! --- output:
- real (kind=kind_phys), dimension(im), intent(inout) :: sncovr1, &
- & qsurf , gflux , evap , runof , drain , &
- & runoff, srunoff, hflx, cmm, chh, &
- & rhosnf, evbs, evcw, sbsno, stm, wetness, &
- & acsnow, snowfallac
+ real (kind=kind_phys), dimension(im), intent(inout) :: &
+ & rhosnf, runof, drain, runoff, srunoff, evbs, evcw, &
+ & stm, wetness, semis_lnd, semis_ice, &
+ ! for land
+ & sncovr1_lnd, qsurf_lnd, gflux_lnd, evap_lnd, &
+ & cmm_lnd, chh_lnd, hflx_lnd, sbsno, &
+ & snowfallac_lnd, &
+ ! for ice
+ & sncovr1_ice, qsurf_ice, gflux_ice, evap_ice, ep1d_ice, &
+ & cmm_ice, chh_ice, hflx_ice, snowfallac_ice
logical, intent(in) :: flag_init, flag_restart
character(len=*), intent(out) :: errmsg
integer, intent(out) :: errflg
! --- locals:
- real (kind=kind_phys), dimension(im) :: rch, rho, &
- & q0, qs1, weasd_old, snwdph_old, &
- & tprcp_old, srflag_old, tskin_old, canopy_old, &
- & tsnow_old, snowfallac_old, acsnow_old, sfalb_old, &
- & sfcqv_old, sfcqc_old, wetness_old, zorl_old, sncovr1_old
+ real (kind=kind_phys), dimension(im) :: rho, &
+ & q0, qs1, &
+ & tprcp_old, srflag_old, sr_old, canopy_old, wetness_old, &
+ ! for land
+ & weasd_lnd_old, snwdph_lnd_old, tskin_lnd_old, &
+ & tsnow_lnd_old, snowfallac_lnd_old, &
+ & sfcqv_lnd_old, sfcqc_lnd_old, z0rl_lnd_old, &
+ & sncovr1_lnd_old, &
+ ! for ice
+ & weasd_ice_old, snwdph_ice_old, tskin_ice_old, &
+ & tsnow_ice_old, snowfallac_ice_old, &
+ & sfcqv_ice_old, sfcqc_ice_old, z0rl_ice_old, &
+ & sncovr1_ice_old
+
real (kind=kind_phys), dimension(lsoil_ruc) :: et
real (kind=kind_phys), dimension(im,lsoil_ruc,1) :: smsoil, &
- slsoil, stsoil, smfrsoil, keepfrsoil
+ slsoil, stsoil, smfrsoil, keepfrsoil, stsice
real (kind=kind_phys), dimension(im,lsoil_ruc) :: smois_old, &
- & tslb_old, sh2o_old, keepfr_old, smfrkeep_old
+ & tsice_old, tslb_old, sh2o_old, &
+ & keepfr_old, smfrkeep_old
real (kind=kind_phys),dimension (im,1,1) :: &
& conflx2, sfcprs, sfctmp, q2, qcatm, rho2
real (kind=kind_phys),dimension (im,1) :: &
- & albbck, alb, chs, flhc, flqc, wet, smmax, cmc, &
- & dew, drip, ec, edir, ett, lh, esnow, etp, qfx, &
- & acceta, ffrozp, lwdn, prcp, xland, xice, &
+ & albbck_lnd, alb_lnd, chs_lnd, flhc_lnd, flqc_lnd, &
+ & wet, wet_ice, smmax, cmc, drip, ec, edir, ett, &
+ & dew_lnd, lh_lnd, esnow_lnd, etp, qfx_lnd, acceta, &
+ & ffrozp, lwdn, prcp, xland, xland_wat, xice, xice_lnd, &
& graupelncv, snowncv, rainncv, raincv, &
- & solnet, sfcexc, &
+ & solnet_lnd, sfcexc, &
& runoff1, runoff2, acrunoff, &
- & sfcems, hfx, shdfac, shdmin1d, shdmax1d, &
- & sneqv, snoalb1d, snowh, snoh, tsnav, &
- & snomlt, sncovr, soilw, soilm, ssoil, soilt, tbot, &
- & xlai, swdn, z0, znt, rhosnfr, infiltr, &
- & precipfr, snfallac, acsn, &
- & qsfc, qsg, qvg, qcg, soilt1, chklowq
+ & sfcems_lnd, hfx_lnd, shdfac, shdmin1d, shdmax1d, &
+ & sneqv_lnd, snoalb1d_lnd, snowh_lnd, snoh_lnd, tsnav_lnd, &
+ & snomlt_lnd, sncovr_lnd, soilw, soilm, ssoil_lnd, &
+ & soilt_lnd, tbot, &
+ & xlai, swdn, z0_lnd, znt_lnd, rhosnfr, infiltr, &
+ & precipfr, snfallac_lnd, acsn, &
+ & qsfc_lnd, qsg_lnd, qvg_lnd, qcg_lnd, soilt1_lnd, chklowq
+ ! ice
+ real (kind=kind_phys),dimension (im,1) :: &
+ & albbck_ice, alb_ice, chs_ice, flhc_ice, flqc_ice, &
+ & dew_ice, lh_ice, esnow_ice, qfx_ice, &
+ & solnet_ice, sfcems_ice, hfx_ice, &
+ & sneqv_ice, snoalb1d_ice, snowh_ice, snoh_ice, tsnav_ice, &
+ & snomlt_ice, sncovr_ice, ssoil_ice, soilt_ice, &
+ & z0_ice, znt_ice, snfallac_ice, &
+ & qsfc_ice, qsg_ice, qvg_ice, qcg_ice, soilt1_ice
+
real (kind=kind_phys) :: xice_threshold
+ real (kind=kind_phys) :: fwat, qsw, evapw, hfxw
character(len=256) :: llanduse !< Land-use dataset. Valid values are :
!! "USGS" (USGS 24/27 category dataset) and
@@ -384,14 +439,16 @@ subroutine lsm_ruc_run & ! inputs
real (kind=kind_phys), dimension(:,:,:), allocatable :: soilctop !< fractional soil type
integer :: nsoil, iswater, isice
- integer, dimension (1:im,1:1) :: stype, vtype
+ integer, dimension (1:im,1:1) :: stype_wat, vtype_wat
+ integer, dimension (1:im,1:1) :: stype_lnd, vtype_lnd
+ integer, dimension (1:im,1:1) :: stype_ice, vtype_ice
integer :: ipr
-! local
+ ! local
integer :: ims,ime, its,ite, jms,jme, jts,jte, kms,kme, kts,kte
integer :: l, k, i, j, fractional_seaice
- logical :: flag(im)
+ logical :: flag(im), flag_ice_uncoupled(im)
logical :: rdlai2d, myj, frpcpn
logical :: debug_print
!
@@ -405,6 +462,15 @@ subroutine lsm_ruc_run & ! inputs
chklowq = 1.
+ do i = 1, im ! i - horizontal loop
+ ! - Set flag for ice points for uncoupled model (islmsk(i) == 4 when coupled to CICE)
+ ! - Exclude ice on the lakes if the lake model is turned on.
+ flag_ice_uncoupled(i) = (icy(i) .and. .not. flag_cice(i) .and. .not. lake(i))
+ !> - Set flag for land and ice points.
+ !- 10may19 - ice points are turned off.
+ flag(i) = land(i) .or. flag_ice_uncoupled(i)
+ enddo
+
if (isot == 1) then
nscat = 19 ! stasgo
else
@@ -421,15 +487,13 @@ subroutine lsm_ruc_run & ! inputs
if(debug_print) then
write (0,*)'RUC LSM run'
- write (0,*)'noah soil temp',ipr,stc(ipr,:)
- write (0,*)'noah soil mois',ipr,smc(ipr,:)
write (0,*)'soiltyp=',ipr,soiltyp(ipr)
write (0,*)'vegtype=',ipr,vegtype(ipr)
write (0,*)'kdt, iter =',kdt,iter
write (0,*)'flag_init =',flag_init
write (0,*)'flag_restart =',flag_restart
endif
-
+
ims = 1
its = 1
ime = 1
@@ -452,13 +516,13 @@ subroutine lsm_ruc_run & ! inputs
landusef (:,:,:) = 0.0
soilctop (:,:,:) = 0.0
- ! -- number of soil categories
+ !> -- number of soil categories
!if(isot == 1) then
!nscat = 19 ! stasgo
!else
!nscat = 9 ! zobler
!endif
- !> - Set parameters for IGBP land-use data.
+ !> -- set parameters for IGBP land-use data
if(ivegsrc == 1) then
llanduse = 'MODI-RUC' ! IGBP
iswater = 17
@@ -473,7 +537,8 @@ subroutine lsm_ruc_run & ! inputs
if ( fractional_seaice == 0 ) then
xice_threshold = 0.5
else if ( fractional_seaice == 1 ) then
- xice_threshold = 0.02
+ xice_threshold = 0.02 ! HRRR value
+ !xice_threshold = 0.15 ! consistent with GFS physics
endif
nsoil = lsoil_ruc
@@ -491,63 +556,60 @@ subroutine lsm_ruc_run & ! inputs
endif
enddo
- do i = 1, im ! i - horizontal loop
- !> - Set flag for land and ice points.
- !- 10may19 - ice points are turned off.
- flag(i) = land(i)
- if (land(i) .and. (vegtype(i)==iswater .or. (vegtype(i)==isice.and.islimsk(i)==2))) then
- !write(errmsg,'(a,i0,a,i0)') 'Logic error in sfc_drv_ruc_run: for i=', i, &
- ! ', land(i) is true but vegtype(i) is water or ice: ', vegtype(i)
- !errflg = 1
- !return
- if(flag_init .and. iter==1) then
- write(0,'(a,i0,a,i0)') 'Warning: in sfc_drv_ruc_run: for i=', i, &
- ', land(i) is true but vegtype(i) is water or ice: ', vegtype(i)
- end if
- end if
- enddo
-
do i = 1, im ! i - horizontal loop
if (flag(i) .and. flag_guess(i)) then
!> - Save land-related prognostic fields for guess run.
!if(me==0 .and. i==ipr) write (0,*)'before call to RUC guess run', i
- weasd_old(i) = weasd(i)
- snwdph_old(i) = snwdph(i)
- tskin_old(i) = tskin(i)
- canopy_old(i) = canopy(i)
- !tprcp_old(i) = tprcp(i)
- srflag_old(i) = srflag(i)
- tsnow_old(i) = tsnow(i)
- snowfallac_old(i) = snowfallac(i)
- acsnow_old(i) = acsnow(i)
- sfalb_old(i) = sfalb(i)
- sfcqv_old(i) = sfcqv(i)
- sfcqc_old(i) = sfcqc(i)
- wetness_old(i) = wetness(i)
- zorl_old(i) = zorl(i)
- sncovr1_old(i) = sncovr1(i)
+ wetness_old(i) = wetness(i)
+ canopy_old(i) = canopy(i)
+ !srflag_old(i) = srflag(i)
+ !acsnow_old(i) = acsnow(i)
+ ! for land
+ weasd_lnd_old(i) = weasd_lnd(i)
+ snwdph_lnd_old(i) = snwdph_lnd(i)
+ tskin_lnd_old(i) = tskin_lnd(i)
+ tsnow_lnd_old(i) = tsnow_lnd(i)
+ snowfallac_lnd_old(i) = snowfallac_lnd(i)
+ sfcqv_lnd_old(i) = sfcqv_lnd(i)
+ sfcqc_lnd_old(i) = sfcqc_lnd(i)
+ z0rl_lnd_old(i) = z0rl_lnd(i)
+ sncovr1_lnd_old(i) = sncovr1_lnd(i)
+ ! for ice
+ weasd_ice_old(i) = weasd_ice(i)
+ snwdph_ice_old(i) = snwdph_ice(i)
+ tskin_ice_old(i) = tskin_ice(i)
+ tsnow_ice_old(i) = tsnow_ice(i)
+ snowfallac_ice_old(i) = snowfallac_ice(i)
+ sfcqv_ice_old(i) = sfcqv_ice(i)
+ sfcqc_ice_old(i) = sfcqc_ice(i)
+ z0rl_ice_old(i) = z0rl_ice(i)
+ sncovr1_ice_old(i) = sncovr1_ice(i)
+
do k = 1, lsoil_ruc
smois_old(i,k) = smois(i,k)
tslb_old(i,k) = tslb(i,k)
sh2o_old(i,k) = sh2o(i,k)
keepfr_old(i,k) = keepfr(i,k)
smfrkeep_old(i,k) = smfrkeep(i,k)
+ ! for ice
+ tsice_old(i,k) = tsice(i,k)
enddo
endif
- enddo
+ enddo ! im
! --- ... initialization block
do j = 1, 1
do i = 1, im ! i - horizontal loop
if (flag_iter(i) .and. flag(i)) then
- !if(me==0 .and. i==ipr) write (0,*)'iter run', iter, i, flag_iter(i),flag_guess(i)
- evap (i) = 0.0
- hflx (i) = 0.0
- gflux(i) = 0.0
+ evap_lnd(i) = 0.0
+ evap_ice(i) = 0.0
+ hflx_lnd (i) = 0.0
+ hflx_ice (i) = 0.0
+ gflux_lnd(i) = 0.0
+ gflux_ice(i) = 0.0
drain(i) = 0.0
canopy(i) = max(canopy(i), 0.0)
- sfcdew(i) = 0.0
evbs (i) = 0.0
evcw (i) = 0.0
@@ -555,24 +617,31 @@ subroutine lsm_ruc_run & ! inputs
sbsno(i) = 0.0
!local i,j arrays
- dew(i,j) = 0.0
- soilm(i,j) = 0.0
- smmax(i,j) = 0.0
- hfx(i,j) = 0.0
- qfx(i,j) = 0.0
- lh(i,j) = 0.0
- acsn(i,j) = 0.0
- sfcexc(i,j) = 0.0
- acceta(i,j) = 0.0
- ssoil(i,j) = 0.0
- snomlt(i,j) = 0.0
- infiltr(i,j) = 0.0
- runoff1(i,j) = 0.0
- runoff2(i,j) = 0.0
- acrunoff(i,j) = 0.0
- snfallac(i,j) = 0.0
- rhosnfr(i,j) = 0.0
- precipfr(i,j) = 0.0
+ dew_lnd(i,j) = 0.0
+ dew_ice(i,j) = 0.0
+ soilm(i,j) = 0.0
+ smmax(i,j) = 0.0
+ hfx_lnd(i,j) = 0.0
+ hfx_ice(i,j) = 0.0
+ qfx_lnd(i,j) = 0.0
+ qfx_ice(i,j) = 0.0
+ lh_lnd(i,j) = 0.0
+ lh_ice(i,j) = 0.0
+ acsn(i,j) = 0.0
+ sfcexc(i,j) = 0.0
+ acceta(i,j) = 0.0
+ ssoil_lnd(i,j) = 0.0
+ ssoil_ice(i,j) = 0.0
+ snomlt_lnd(i,j) = 0.0
+ snomlt_ice(i,j) = 0.0
+ infiltr(i,j) = 0.0
+ runoff1(i,j) = 0.0
+ runoff2(i,j) = 0.0
+ acrunoff(i,j) = 0.0
+ snfallac_lnd(i,j) = 0.0
+ snfallac_ice(i,j) = 0.0
+ rhosnfr(i,j) = 0.0
+ precipfr(i,j) = 0.0
endif
enddo ! i=1,im
@@ -583,10 +652,11 @@ subroutine lsm_ruc_run & ! inputs
do i = 1, im
if (flag_iter(i) .and. flag(i)) then
q0(i) = max(q1(i)/(1.-q1(i)), 1.e-8) !* q1=specific humidity at level 1 (kg/kg)
+
rho(i) = prsl1(i) / (con_rd*t1(i)*(1.0+con_fvirt*q0(i)))
qs1(i) = rslf(prsl1(i),t1(i)) !* qs1=sat. mixing ratio at level 1 (kg/kg)
q0 (i) = min(qs1(i), q0(i))
- endif
+ endif ! flag_iter & flag
enddo ! i
!> - Prepare variables to run RUC LSM:
@@ -610,6 +680,7 @@ subroutine lsm_ruc_run & ! inputs
do j = 1, 1 ! 1:1
do i = 1, im ! i - horizontal loop
+ xice(i,j) = 0.
if (flag_iter(i) .and. flag(i)) then
if (frpcpn) then
@@ -618,7 +689,7 @@ subroutine lsm_ruc_run & ! inputs
ffrozp(i,j) = real(nint(srflag(i)),kind_phys)
endif
- !tgs - rdlai is .false. when the LAI data is not available in the
+ !-- rdlai is .false. when the LAI data is not available in the
! - INPUT/sfc_data.nc
rdlai2d = rdlai
@@ -642,84 +713,88 @@ subroutine lsm_ruc_run & ! inputs
!!\n \a lwdn - lw dw radiation flux at surface (\f$W m^{-2}\f$)
!!\n \a swdn - sw dw radiation flux at surface (\f$W m^{-2}\f$)
-!!\n \a solnet - net sw radiation flux (dn-up) (\f$W m^{-2}\f$)
!!\n \a prcp - time-step total precip (\f$kg m^{-2} \f$)
!!\n \a raincv - time-step convective precip (\f$kg m^{-2} \f$)
!!\n \a rainncv - time-step non-convective precip (\f$kg m^{-2} \f$)
!!\n \a graupelncv - time-step graupel (\f$kg m^{-2} \f$)
!!\n \a snowncv - time-step snow (\f$kg m^{-2} \f$)
!!\n \a precipfr - time-step precipitation in solod form (\f$kg m^{-2} \f$)
-!!\n \a qsfc - specific humidity at surface (\f$kg kg^{-1}\f$)
-!!\n \a qvg - water vapor mixing ratio at surface (\f$kg kg^{-1}\f$)
-!!\n \a qsg - saturated water vapor mixing ratio at surface (\f$kg kg^{-1}\f$)
-!!\n \a qcg - cloud water mixing ratio at surface (\f$kg kg^{-1}\f$)
+!!\n \a shdfac - areal fractional coverage of green vegetation (0.0-1.0)
+!!\n \a shdmin - minimum areal fractional coverage of green vegetation -> !shdmin1d
+!!\n \a shdmax - maximum areal fractional coverage of green vegetation -> !shdmax1d
+!!\n \a tbot - bottom soil temperature (local yearly-mean sfc air temp)
lwdn(i,j) = dlwflx(i) !..downward lw flux at sfc in w/m2
swdn(i,j) = dswsfc(i) !..downward sw flux at sfc in w/m2
- solnet(i,j) = dswsfc(i)*(1.-sfalb(i)) !snet(i) !..net sw rad flx (dn-up) at sfc in w/m2
! all precip input to RUC LSM is in [mm]
!prcp(i,j) = rhoh2o * tprcp(i) ! tprcp in [m] - convective plus explicit
!raincv(i,j) = rhoh2o * rainc(i) ! total time-step convective precip
!rainncv(i,j) = rhoh2o * max(rain(i)-rainc(i),0.0) ! total time-step explicit precip
- prcp(i,j) = rhoh2o * (rainc(i)+rainnc(i)) ! [mm] - convective plus explicit
- raincv(i,j) = rhoh2o * rainc(i) ! [mm] - total time-step convective precip
- rainncv(i,j) = rhoh2o * rainnc(i) ! [mm] - total time-step explicit precip
+ !graupelncv(i,j) = rhoh2o * graupel(i)
+ !snowncv(i,j) = rhoh2o * snow(i)
+ prcp(i,j) = rhoh2o * (rainc(i)+rainnc(i)) ! tprcp in [m] - convective plus explicit
+ raincv(i,j) = rhoh2o * rainc(i) ! total time-step convective precip
+ rainncv(i,j) = rhoh2o * rainnc(i) ! total time-step explicit precip
graupelncv(i,j) = rhoh2o * graupel(i)
snowncv(i,j) = rhoh2o * snow(i)
- !if(prcp(i,j) > 0. .and. i==21) then
- !print *,'prcp(i,j),rainncv(i,j),graupelncv(i,j),snowncv(i,j),ffrozp(i,j)',i,j, &
- ! prcp(i,j),rainncv(i,j),graupelncv(i,j),snowncv(i,j),ffrozp(i,j)
- !endif
+ ! ice precipitation is not used
+ ! precipfr(i,j) = rainncv(i,j) * ffrozp(i,j)
+
! ice not used
! precipfr(i,j) = rainncv(i,j) * ffrozp(i,j)
+ !acsn(i,j) = acsnow(i)
+ acsn(i,j) = 0.0
- qvg(i,j) = sfcqv(i)
- qsfc(i,j) = sfcqv(i)/(1.+sfcqv(i))
- qsg(i,j) = rslf(prsl1(i),tsurf(i))
- qcg(i,j) = sfcqc(i)
+ ! --- units %
+ shdfac(i,j) = sigmaf(i)*100.
+ shdmin1d(i,j) = shdmin(i)*100.
+ shdmax1d(i,j) = shdmax(i)*100.
+
+ tbot(i,j) = tg3(i)
!> - 3. canopy/soil characteristics (s):
!!\n \a vegtyp - vegetation type (integer index) -> vtype
!!\n \a soiltyp - soil type (integer index) -> stype
-!!\n \a shdfac - areal fractional coverage of green vegetation (0.0-1.0)
-!!\n \a shdmin - minimum areal fractional coverage of green vegetation -> shdmin1d
-!!\n \a shdmax - maximum areal fractional coverage of green vegetation -> shdmax1d
!!\n \a sfcems - surface emmisivity -> sfcemis
!!\n \a 0.5*(alvwf + alnwf) - backround snow-free surface albedo (fraction) -> albbck
!!\n \a snoalb - upper bound on maximum albedo over deep snow -> snoalb1d
-!!\n \a sfalb - surface albedo including snow effect (unitless fraction) -> alb
-!!\n \a tbot - bottom soil temperature (local yearly-mean sfc air temp)
if(ivegsrc == 1) then ! IGBP - MODIS
+ vtype_wat(i,j) = 17 ! 17 - water (oceans and lakes) in MODIS
+ stype_wat(i,j) = 14
+ xland_wat(i,j) = 2. ! xland = 2 for water
+ vtype_lnd(i,j) = vegtype(i)
+ stype_lnd(i,j) = soiltyp(i)
+ vtype_ice(i,j) = 15 ! MODIS
+ if(isot == 0) then
+ stype_ice(i,j) = 9 ! ZOBLER
+ else
+ stype_ice(i,j) = 16 ! STASGO
+ endif
!> - Prepare land/ice/water masks for RUC LSM
- !> - for land only
- vtype(i,j) = vegtype(i)
- stype(i,j) = soiltyp(i)
+ !SLMSK0 - SEA(0),LAND(1),ICE(2) MASK
+ !if(islmsk(i) == 0.) then
+ !elseif(islmsk(i) == 1.) then ! land
+
+ if(land(i)) then ! some land
+ xland(i,j) = 1.
+ xice_lnd(i,j) = 0.
+ elseif(flag_ice_uncoupled(i)) then ! some ice
xland(i,j) = 1.
- xice(i,j) = 0.
+ xice(i,j) = fice(i) ! fraction of sea-ice
+ endif
else
write (0,*)'MODIS landuse is not available'
endif
- ! --- units %
- shdfac(i,j) = sigmaf(i)*100.
- shdmin1d(i,j) = shdmin(i)*100.
- shdmax1d(i,j) = shdmax(i)*100.
-
- sfcems(i,j) = sfcemis(i)
-
- snoalb1d(i,j) = snoalb(i)
- albbck(i,j) = max(0.01, 0.5 * (alvwf(i) + alnwf(i)))
- alb(i,j) = sfalb(i)
-
if(rdlai2d) then
xlai(i,j) = laixy(i)
else
xlai(i,j) = 0.
endif
- tbot(i,j) = tg3(i)
+ if (land(i)) then ! at least some land in the grid cell
!> - 4. history (state) variables (h):
!!\n \a cmc - canopy moisture content (\f$mm\f$)
@@ -731,23 +806,43 @@ subroutine lsm_ruc_run & ! inputs
!!\n \a smfrsoil(lsoil_ruc) - frozen soil moisture content (volumetric fraction) -> smfrsoil
!!\n \a keepfrflag(lsoil_ruc) - flag for frozen soil physics: 0. or 1.
!!\n \a wet - soil moisture availability at surface
-!!\n \a snowh - actual snow depth (\f$m\f$)
-!!\n \a sneqv - liquid water-equivalent snow depth (\f$m\f$)
-!!\n \a sncovr - fraction of snow in the grid cell
-!!\n \a ch - surface exchange coefficient for heat (\f$m s^{-1}\f$) -> chs
-!!\n \a z0 - surface roughness (\f$m\f$) -> zorl(\f$cm\f$)
+!!\n \a snowh_lnd - actual snow depth (\f$m\f$)
+!!\n \a sneqv_lnd - liquid water-equivalent snow depth (\f$m\f$)
+!!\n \a sncovr_lnd - fraction of snow in the grid cell
+!!\n \a chh_lnd - surface exchange coefficient for heat (\f$m s^{-1}\f$) -> chs
+!!\n \a z0_lnd - surface roughness (\f$m\f$) -> zorl(\f$cm\f$)
+!!\n \a qsfc_lnd - specific humidity at surface (\f$kg kg^{-1}\f$)
+!!\n \a qvg_lnd - water vapor mixing ratio at surface (\f$kg kg^{-1}\f$)
+!!\n \a qsg_lnd - saturated water vapor mixing ratio at surface (\f$kg kg^{-1}\f$)
+!!\n \a qcg_lnd - cloud water mixing ratio at surface (\f$kg kg^{-1}\f$)
+!!\n \a solnet_lnd - net sw radiation flux (dn-up) (\f$W m^{-2}\f$)
+
+ qvg_lnd(i,j) = sfcqv_lnd(i)
+ qsfc_lnd(i,j) = sfcqv_lnd(i)/(1.+sfcqv_lnd(i))
+ qsg_lnd(i,j) = rslf(prsl1(i),tsurf_lnd(i))
+ qcg_lnd(i,j) = sfcqc_lnd(i)
+ sfcems_lnd(i,j) = semis_lnd(i)
+ sncovr_lnd(i,j) = sncovr1_lnd(i)
+ snoalb1d_lnd(i,j) = snoalb(i)
+ albbck_lnd(i,j) = max(0.01, 0.5 * (alvwf(i) + alnwf(i)))
+ ! alb_lnd takes into account snow on the ground
+ if (sncovr_lnd(i,j) > 0.) then
+ !- averaged of snow-free and snow-covered
+ alb_lnd(i,j) = albbck_lnd(i,j) * (1.-sncovr_lnd(i,j)) + snoalb(i) * sncovr_lnd(i,j)
+ else
+ alb_lnd(i,j) = albbck_lnd(i,j)
+ endif
+ solnet_lnd(i,j) = dswsfc(i)*(1.-alb_lnd(i,j)) !snet(i) !..net sw rad flx (dn-up) at sfc in w/m2
cmc(i,j) = canopy(i) ! [mm]
- soilt(i,j) = tsurf(i) ! clu_q2m_iter
+ soilt_lnd(i,j) = tsurf_lnd(i) ! clu_q2m_iter
! sanity check for snow temperature tsnow
- if (tsnow(i) > 0. .and. tsnow(i) < 273.15) then
- soilt1(i,j) = tsnow(i)
+ if (tsnow_lnd(i) > 0. .and. tsnow_lnd(i) < 273.15) then
+ soilt1_lnd(i,j) = tsnow_lnd(i)
else
- soilt1(i,j) = tsurf(i)
+ soilt1_lnd(i,j) = tsurf_lnd(i)
endif
-
- tsnav(i,j) = 0.5*(soilt(i,j) + soilt1(i,j)) - 273.15
-
+ tsnav_lnd(i,j) = 0.5*(soilt_lnd(i,j) + soilt1_lnd(i,j)) - 273.15
do k = 1, lsoil_ruc
smsoil (i,k,j) = smois(i,k)
slsoil (i,k,j) = sh2o(i,k)
@@ -755,114 +850,72 @@ subroutine lsm_ruc_run & ! inputs
smfrsoil(i,k,j) = smfrkeep(i,k)
keepfrsoil(i,k,j) = keepfr(i,k)
enddo
-
- if(stype(i,j) .ne. 14) then
- ! land
- if (wetness(i) > 0.) then
- wet(i,j) = wetness(i)
- else
- wet(i,j) = max(0.0001,smsoil(i,1,j)/0.3)
- endif
+ ! land
+ if (wetness(i) > 0.) then
+ wet(i,j) = wetness(i)
else
- ! water
- wet(i,j) = 1.
+ wet(i,j) = max(0.0001,smsoil(i,1,j)/0.3)
endif
- snowh(i,j) = snwdph(i) * 0.001 ! convert from mm to m
- sneqv(i,j) = weasd(i) ! [mm]
-
- snfallac(i,j) = snowfallac(i)
- acsn(i,j) = acsnow(i)
-
- ! -- sanity checks on sneqv and snowh
- if (sneqv(i,j) /= 0.0 .and. snowh(i,j) == 0.0) then
- snowh(i,j) = 0.003 * sneqv(i,j) ! snow density ~300 kg m-3
+ chs_lnd (i,j) = ch_lnd(i) * wind(i) ! compute conductance
+ flhc_lnd(i,j) = chs_lnd(i,j) * rho(i) * con_cp ! * (1. + 0.84*q2(i,1,j))
+ flqc_lnd(i,j) = chs_lnd(i,j) * rho(i) * wet(i,j)
+ ! for output
+ cmm_lnd(i) = cm_lnd(i) * wind(i)
+ chh_lnd(i) = chs_lnd(i,j) * rho(i)
+ !
+ snowh_lnd(i,j) = snwdph_lnd(i) * 0.001 ! convert from mm to m
+ sneqv_lnd(i,j) = weasd_lnd(i) ! [mm]
+ snfallac_lnd(i,j) = snowfallac_lnd(i)
+ !> -- sanity checks on sneqv and snowh
+ if (sneqv_lnd(i,j) /= 0.0 .and. snowh_lnd(i,j) == 0.0) then
+ snowh_lnd(i,j) = 0.003 * sneqv_lnd(i,j) ! snow density ~300 kg m-3
endif
- if (snowh(i,j) /= 0.0 .and. sneqv(i,j) == 0.0) then
- sneqv(i,j) = 300. * snowh(i,j) ! snow density ~300 kg m-3
+ if (snowh_lnd(i,j) /= 0.0 .and. sneqv_lnd(i,j) == 0.0) then
+ sneqv_lnd(i,j) = 300. * snowh_lnd(i,j) ! snow density ~300 kg m-3
endif
- if (sneqv(i,j) > 0. .and. snowh(i,j) > 0.) then
- if(sneqv(i,j)/snowh(i,j) > 950.) then
- sneqv(i,j) = 300. * snowh(i,j)
+ if (sneqv_lnd(i,j) > 0. .and. snowh_lnd(i,j) > 0.) then
+ if(sneqv_lnd(i,j)/snowh_lnd(i,j) > 950.) then
+ sneqv_lnd(i,j) = 300. * snowh_lnd(i,j)
endif
endif
-
- sncovr(i,j) = sncovr1(i)
-
- chs(i,j) = ch(i) * wind(i) ! compute conductance
- flhc(i,j) = chs(i,j) * rho(i) * con_cp * (1. + 0.84*q2(i,1,j))
- flqc(i,j) = chs(i,j) * rho(i) * wet(i,j)
- ! for output
- cmm(i) = cm(i) * wind(i)
- chh(i) = chs(i,j) * rho(i)
- !
-
! ---- ... outside sflx, roughness uses cm as unit
- z0(i,j) = zorl(i)/100.
- znt(i,j) = zorl(i)/100.
+ z0_lnd(i,j) = z0rl_lnd(i)/100.
+ znt_lnd(i,j) = z0rl_lnd(i)/100.
if(debug_print) then
- if(i==ipr) then
- write (0,*)'before RUC smsoil = ',smsoil(i,:,j), i,j
- write (0,*)'stsoil = ',stsoil(i,:,j), i,j
- write (0,*)'soilt = ',soilt(i,j), i,j
- write (0,*)'wet = ',wet(i,j), i,j
- write (0,*)'soilt1 = ',soilt1(i,j), i,j
- write (0,*)'delt =',delt
- write (0,*)'kdt =',kdt
- write (0,*)'flag_init =',flag_init
- write (0,*)'flag_restart =',flag_restart
- write (0,*)'nsoil =',nsoil
- write (0,*)'frpcpn =',frpcpn
- write (0,*)'zs =',zs
- write (0,*)'graupelncv(i,j) =',i,j,graupelncv(i,j)
- write (0,*)'snowncv(i,j) =',i,j,snowncv(i,j)
- write (0,*)'rainncv(i,j) =',i,j,rainncv(i,j)
- write (0,*)'raincv(i,j) =',i,j,raincv(i,j)
- write (0,*)'prcp(i,j) =',i,j,prcp(i,j)
- write (0,*)'sneqv(i,j) =',i,j,sneqv(i,j)
- write (0,*)'snowh(i,j) =',i,j,snowh(i,j)
- write (0,*)'sncovr(i,j) =',i,j,sncovr(i,j)
- write (0,*)'ffrozp(i,j) =',i,j,ffrozp(i,j)
- write (0,*)'conflx2(i,1,j) =',i,j,conflx2(i,1,j)
- write (0,*)'sfcprs(i,1,j) =',i,j,sfcprs(i,1,j)
- write (0,*)'sfctmp(i,1,j) =',i,j,sfctmp(i,1,j)
- write (0,*)'q2(i,1,j) =',i,j,q2(i,1,j)
- write (0,*)'qcatm(i,1,j) =',i,j,qcatm(i,1,j)
- write (0,*)'rho2(i,1,j) =',i,j,rho2(i,1,j)
- write (0,*)'lwdn(i,j) =',i,j,lwdn(i,j)
- write (0,*)'solnet(i,j) =',i,j,solnet(i,j)
- write (0,*)'sfcems(i,j) =',i,j,sfcems(i,j)
+ if(me==0 ) then
+ write (0,*)'before LSMRUC for land'
+ write (0,*)'sfcems(i,j) =',i,j,sfcems_lnd(i,j)
write (0,*)'chklowq(i,j) =',i,j,chklowq(i,j)
- write (0,*)'chs(i,j) =',i,j,chs(i,j)
- write (0,*)'flqc(i,j) =',i,j,flqc(i,j)
- write (0,*)'flhc(i,j) =',i,j,flhc(i,j)
+ write (0,*)'chs(i,j) =',i,j,chs_lnd(i,j)
+ write (0,*)'flqc(i,j) =',i,j,flqc_lnd(i,j)
+ write (0,*)'flhc(i,j) =',i,j,flhc_lnd(i,j)
write (0,*)'wet(i,j) =',i,j,wet(i,j)
write (0,*)'cmc(i,j) =',i,j,cmc(i,j)
write (0,*)'shdfac(i,j) =',i,j,shdfac(i,j)
- write (0,*)'alb(i,j) =',i,j,alb(i,j)
- write (0,*)'znt(i,j) =',i,j,znt(i,j)
- write (0,*)'z0(i,j) =',i,j,z0(i,j)
- write (0,*)'snoalb1d(i,j) =',i,j,snoalb1d(i,j)
- write (0,*)'alb(i,j) =',i,j,alb(i,j)
+ write (0,*)'alb(i,j) =',i,j,alb_lnd(i,j)
+ write (0,*)'znt(i,j) =',i,j,znt_lnd(i,j)
+ write (0,*)'z0(i,j) =',i,j,z0_lnd(i,j)
+ write (0,*)'snoalb1d(i,j) =',i,j,snoalb1d_lnd(i,j)
write (0,*)'landusef(i,:,j) =',i,j,landusef(i,:,j)
write (0,*)'soilctop(i,:,j) =',i,j,soilctop(i,:,j)
write (0,*)'nlcat=',nlcat
write (0,*)'nscat=',nscat
- write (0,*)'qsfc(i,j) =',i,j,qsfc(i,j)
- write (0,*)'qvg(i,j) =',i,j,qvg(i,j)
- write (0,*)'qsg(i,j) =',i,j,qsg(i,j)
- write (0,*)'qcg(i,j) =',i,j,qcg(i,j)
- write (0,*)'dew(i,j) =',i,j,dew(i,j)
- write (0,*)'soilt(i,j) =',i,j,soilt(i,j)
- write (0,*)'tskin(i) =',i,j,tskin(i)
- write (0,*)'soilt1(i,j) =',i,j,soilt1(i,j)
- write (0,*)'tsnav(i,j) =',i,j,tsnav(i,j)
+ write (0,*)'qsfc(i,j) =',i,j,qsfc_lnd(i,j)
+ write (0,*)'qvg(i,j) =',i,j,qvg_lnd(i,j)
+ write (0,*)'qsg(i,j) =',i,j,qsg_lnd(i,j)
+ write (0,*)'qcg(i,j) =',i,j,qcg_lnd(i,j)
+ write (0,*)'dew(i,j) =',i,j,dew_lnd(i,j)
+ write (0,*)'soilt(i,j) =',i,j,soilt_lnd(i,j)
+ write (0,*)'tskin(i) =',i,j,tskin_lnd(i)
+ write (0,*)'soilt1(i,j) =',i,j,soilt1_lnd(i,j)
+ write (0,*)'tsnav(i,j) =',i,j,tsnav_lnd(i,j)
write (0,*)'tbot(i,j) =',i,j,tbot(i,j)
- write (0,*)'vtype(i,j) =',i,j,vtype(i,j)
- write (0,*)'stype(i,j) =',i,j,stype(i,j)
+ write (0,*)'vtype(i,j) =',i,j,vtype_lnd(i,j)
+ write (0,*)'stype(i,j) =',i,j,stype_lnd(i,j)
write (0,*)'xland(i,j) =',i,j,xland(i,j)
write (0,*)'xice(i,j) =',i,j,xice(i,j)
write (0,*)'iswater=',iswater
@@ -888,60 +941,61 @@ subroutine lsm_ruc_run & ! inputs
endif
endif
-!> - Call RUC LSM lsmruc().
- call lsmruc( delt, flag_init, flag_restart, kdt, iter, nsoil, &
+!> - Call RUC LSM lsmruc() for land.
+ call lsmruc( &
+ & delt, flag_init, flag_restart, kdt, iter, nsoil, &
& graupelncv(i,j), snowncv(i,j), rainncv(i,j), raincv(i,j), &
- & zs, prcp(i,j), sneqv(i,j), snowh(i,j), sncovr(i,j), &
+ & zs, prcp(i,j), sneqv_lnd(i,j), snowh_lnd(i,j), &
+ & sncovr_lnd(i,j), &
& ffrozp(i,j), frpcpn, &
& rhosnfr(i,j), precipfr(i,j), &
! --- inputs:
& conflx2(i,1,j), sfcprs(i,1,j), sfctmp(i,1,j), q2(i,1,j), &
& qcatm(i,1,j), rho2(i,1,j), &
- & lwdn(i,j), solnet(i,j), sfcems(i,j), chklowq(i,j), &
- & chs(i,j), flqc(i,j), flhc(i,j), &
+ & lwdn(i,j), solnet_lnd(i,j), sfcems_lnd(i,j), chklowq(i,j), &
+ & chs_lnd(i,j), flqc_lnd(i,j), flhc_lnd(i,j), &
! --- input/outputs:
- & wet(i,j), cmc(i,j), shdfac(i,j), alb(i,j), znt(i,j), &
- & z0(i,j), snoalb1d(i,j), albbck(i,j), xlai(i,j), &
- & landusef(i,:,j), nlcat, &
+ & wet(i,j), cmc(i,j), shdfac(i,j), alb_lnd(i,j), znt_lnd(i,j), &
+ & z0_lnd(i,j), snoalb1d_lnd(i,j), albbck_lnd(i,j), &
+ & xlai(i,j), landusef(i,:,j), nlcat, &
! --- mosaic_lu and mosaic_soil are moved to the namelist
! & mosaic_lu, mosaic_soil, &
& soilctop(i,:,j), nscat, &
- & qsfc(i,j), qsg(i,j), qvg(i,j), qcg(i,j), dew(i,j), &
- & soilt1(i,j), &
- & tsnav(i,j), tbot(i,j), vtype(i,j), stype(i,j), xland(i,j), &
- & iswater, isice, xice(i,j), xice_threshold, &
+ & qsfc_lnd(i,j), qsg_lnd(i,j), qvg_lnd(i,j), qcg_lnd(i,j), &
+ & dew_lnd(i,j), soilt1_lnd(i,j), &
+ & tsnav_lnd(i,j), tbot(i,j), vtype_lnd(i,j), stype_lnd(i,j), &
+ & xland(i,j), iswater, isice, xice_lnd(i,j), xice_threshold, & ! xice=0. for the land portion of grid area
! --- constants
& con_cp, con_rv, con_rd, con_g, con_pi, con_hvap, stbolt, &
! --- input/outputs:
& smsoil(i,:,j), slsoil(i,:,j), soilm(i,j), smmax(i,j), &
- & stsoil(i,:,j), soilt(i,j), hfx(i,j), qfx(i,j), lh(i,j), &
+ & stsoil(i,:,j), soilt_lnd(i,j), &
+ & hfx_lnd(i,j), qfx_lnd(i,j), lh_lnd(i,j), &
& infiltr(i,j), runoff1(i,j), runoff2(i,j), acrunoff(i,j), &
- & sfcexc(i,j), acceta(i,j), ssoil(i,j), &
- & snfallac(i,j), acsn(i,j), snomlt(i,j), &
+ & sfcexc(i,j), acceta(i,j), ssoil_lnd(i,j), &
+ & snfallac_lnd(i,j), acsn(i,j), snomlt_lnd(i,j), &
& smfrsoil(i,:,j),keepfrsoil(i,:,j), .false., &
& shdmin1d(i,j), shdmax1d(i,j), rdlai2d, &
& ims,ime, jms,jme, kms,kme, &
& its,ite, jts,jte, kts,kte )
-
- if(debug_print) then
- if(i==ipr) then
- write (0,*)'after RUC smsoil = ',smsoil(i,:,j), i, j
- write (0,*)'after sneqv(i,j) =',i,j,sneqv(i,j)
- write (0,*)'after snowh(i,j) =',i,j,snowh(i,j)
- write (0,*)'after sncovr(i,j) =',i,j,sncovr(i,j)
- write (0,*)'after vtype(i,j) =',i,j,vtype(i,j)
- write (0,*)'after stype(i,j) =',i,j,stype(i,j)
+ if(debug_print) then
+ write (0,*)'after LSMRUC for land'
+ write (0,*)'after sneqv(i,j) =',i,j,sneqv_lnd(i,j)
+ write (0,*)'after snowh(i,j) =',i,j,snowh_lnd(i,j)
+ write (0,*)'after sncovr(i,j) =',i,j,sncovr_lnd(i,j)
+ write (0,*)'after vtype(i,j) =',i,j,vtype_lnd(i,j)
+ write (0,*)'after stype(i,j) =',i,j,stype_lnd(i,j)
write (0,*)'after wet(i,j) =',i,j,wet(i,j)
write (0,*)'after cmc(i,j) =',i,j,cmc(i,j)
- write (0,*)'after qsfc(i,j) =',i,j,qsfc(i,j)
- write (0,*)'after qvg(i,j) =',i,j,qvg(i,j)
- write (0,*)'after qsg(i,j) =',i,j,qsg(i,j)
- write (0,*)'after qcg(i,j) =',i,j,qcg(i,j)
- write (0,*)'after dew(i,j) =',i,j,dew(i,j)
- write (0,*)'after soilt(i,j) =',i,j,soilt(i,j)
- write (0,*)'after tskin(i) =',i,j,tskin(i)
- write (0,*)'after soilt1(i,j) =',i,j,soilt1(i,j)
- write (0,*)'after tsnav(i,j) =',i,j,tsnav(i,j)
+ write (0,*)'after qsfc(i,j) =',i,j,qsfc_lnd(i,j)
+ write (0,*)'after qvg(i,j) =',i,j,qvg_lnd(i,j)
+ write (0,*)'after qsg(i,j) =',i,j,qsg_lnd(i,j)
+ write (0,*)'after qcg(i,j) =',i,j,qcg_lnd(i,j)
+ write (0,*)'after dew(i,j) =',i,j,dew_lnd(i,j)
+ write (0,*)'after soilt(i,j) =',i,j,soilt_lnd(i,j)
+ write (0,*)'after tskin(i) =',i,j,tskin_lnd(i)
+ write (0,*)'after soilt1(i,j) =',i,j,soilt1_lnd(i,j)
+ write (0,*)'after tsnav(i,j) =',i,j,tsnav_lnd(i,j)
write (0,*)'after smsoil(i,:,j)=',i,j,smsoil(i,:,j)
write (0,*)'after slsoil(i,:,j)=',i,j,slsoil(i,:,j)
write (0,*)'after stsoil(i,:,j)=',i,j,stsoil(i,:,j)
@@ -949,18 +1003,17 @@ subroutine lsm_ruc_run & ! inputs
write (0,*)'after keepfrsoil(i,:,j)=',i,j,keepfrsoil(i,:,j)
write (0,*)'after soilm(i,j) =',i,j,soilm(i,j)
write (0,*)'after smmax(i,j) =',i,j,smmax(i,j)
- write (0,*)'after hfx(i,j) =',i,j,hfx(i,j)
- write (0,*)'after qfx(i,j) =',i,j,qfx(i,j)
- write (0,*)'after lh(i,j) =',i,j,lh(i,j)
+ write (0,*)'after hfx(i,j) =',i,j,hfx_lnd(i,j)
+ write (0,*)'after qfx(i,j) =',i,j,qfx_lnd(i,j)
+ write (0,*)'after lh(i,j) =',i,j,lh_lnd(i,j)
write (0,*)'after infiltr(i,j) =',i,j,infiltr(i,j)
write (0,*)'after runoff1(i,j) =',i,j,runoff1(i,j)
write (0,*)'after runoff2(i,j) =',i,j,runoff2(i,j)
- write (0,*)'after ssoil(i,j) =',i,j,ssoil(i,j)
- write (0,*)'after snfallac(i,j) =',i,j,snfallac(i,j)
+ write (0,*)'after ssoil(i,j) =',i,j,ssoil_lnd(i,j)
+ write (0,*)'after snfallac(i,j) =',i,j,snfallac_lnd(i,j)
write (0,*)'after acsn(i,j) =',i,j,acsn(i,j)
- write (0,*)'after snomlt(i,j) =',i,j,snomlt(i,j)
+ write (0,*)'after snomlt(i,j) =',i,j,snomlt_lnd(i,j)
endif
- endif
!> - RUC LSM: prepare variables for return to parent model and unit conversion.
@@ -971,12 +1024,29 @@ subroutine lsm_ruc_run & ! inputs
!!\n \a runoff1 - surface runoff (\f$m s^{-1}\f$), not infiltrating the surface
!!\n \a runoff2 - subsurface runoff (\f$m s^{-1}\f$), drainage out bottom
!!\n \a snoh - phase-change heat flux from snowmelt (w m-2)
+!!\n \a lh - actual latent heat flux (\f$W m^{-2}\f$: positive, if upward from sfc)
+!!\n \a hfx - sensible heat flux (\f$W m^{-2}\f$: positive, if upward from sfc)
+!!\n \a ssoil - soil heat flux (\f$W m^{-2}\f$: negative if downward from surface)
+!!\n \a runoff1 - surface runoff (\f$m s^{-1}\f$), not infiltrating the surface
+!!\n \a runoff2 - subsurface runoff (\f$m s^{-1}\f$), drainage out bottom
+!!\n \a snoh - phase-change heat flux from snowmelt (w m-2)
!
+! --- ... do not return the following output fields to parent model
+! ec - canopy water evaporation (m s-1)
+! edir - direct soil evaporation (m s-1)
+! et(nsoil)-plant transpiration from a particular root layer (m s-1)
+! ett - total plant transpiration (m s-1)
+! esnow - sublimation from (or deposition to if <0) snowpack (m s-1)
+! drip - through-fall of precip and/or dew in excess of canopy
+! water-holding capacity (m)
+! snomlt - snow melt (m) (water equivalent)
+! xlai - leaf area index (dimensionless)
+! soilw - available soil moisture in root zone (unitless fraction
+! between smcwlt and smcmax)
+! soilm - total soil column moisture content (frozen+unfrozen) (m)
+! nroot - number of root layers, a function of veg type, determined
+! in subroutine redprm.
- ! Interstitial
- evap(i) = qfx(i,j) / rho(i) ! kinematic
- hflx(i) = hfx(i,j) / (con_cp*rho(i)) ! kinematic
- gflux(i) = ssoil(i,j)
!evbs(i) = edir(i,j)
!evcw(i) = ec(i,j)
@@ -984,42 +1054,41 @@ subroutine lsm_ruc_run & ! inputs
!sbsno(i) = esnow(i,j)
!snohf(i) = snoh(i,j)
- sfcdew(i) = dew(i,j)
- qsurf(i) = qsfc(i,j)
- sncovr1(i) = sncovr(i,j)
- stm(i) = soilm(i,j)
- tsurf(i) = soilt(i,j)
- tice(i) = tsurf(i)
-
- runof (i) = runoff1(i,j) * 1000.0 ! unit conversion (from m s-1 to mm s-1 and kg m-2 s-1)
- drain (i) = runoff2(i,j) * 1000.0 ! unit conversion (from m s-1 to mm s-1 and kg m-2 s-1)
+ ! Interstitial
+ evap_lnd(i) = qfx_lnd(i,j) / rho(i) ! kinematic
+ hflx_lnd(i) = hfx_lnd(i,j) / (con_cp*rho(i)) ! kinematic
+ gflux_lnd(i) = ssoil_lnd(i,j)
+ qsurf_lnd(i) = qsfc_lnd(i,j)
+ tsurf_lnd(i) = soilt_lnd(i,j)
+ stm(i) = soilm(i,j) * 1.e-3 ! convert to [m]
+
+ runof (i) = runoff1(i,j)
+ drain (i) = runoff2(i,j)
wetness(i) = wet(i,j)
- ! State variables
- tsnow(i) = soilt1(i,j)
- sfcqc(i) = qcg(i,j)
- sfcqv(i) = qvg(i,j)
+ ! tsnow(i) = soilt1(i,j)
+ sfcqv_lnd(i) = qvg_lnd(i,j)
+ sfcqc_lnd(i) = qcg_lnd(i,j)
+ ! --- ... units [m/s] = [g m-2 s-1]
rhosnf(i) = rhosnfr(i,j)
+ !acsnow(i) = acsn(i,j) ! kg m-2
! --- ... accumulated total runoff and surface runoff
- runoff(i) = runoff(i) + (drain(i)+runof(i)) * delt ! kg m-2
- srunoff(i) = srunoff(i) + runof(i) * delt ! kg m-2
+ runoff(i) = runoff(i) + (drain(i)+runof(i)) * delt * 0.001 ! kg m-2
+ srunoff(i) = srunoff(i) + runof(i) * delt * 0.001 ! kg m-2
! --- ... accumulated frozen precipitation (accumulation in lsmruc)
- snowfallac(i) = snfallac(i,j) ! kg m-2
- acsnow(i) = acsn(i,j) ! kg m-2
-
+ snowfallac_lnd(i) = snfallac_lnd(i,j) ! kg m-2
! --- ... unit conversion (from m to mm)
- snwdph(i) = snowh(i,j) * 1000.0
+ snwdph_lnd(i) = snowh_lnd(i,j) * 1000.0
- canopy(i) = cmc(i,j) ! mm
- weasd(i) = sneqv(i,j) ! mm
- sncovr1(i) = sncovr(i,j)
+ canopy(i) = cmc(i,j) ! mm
+ weasd_lnd(i) = sneqv_lnd(i,j) ! mm
+ sncovr1_lnd(i) = sncovr_lnd(i,j)
! ---- ... outside RUC LSM, roughness uses cm as unit
! (update after snow's effect)
- zorl(i) = znt(i,j)*100.
- sfalb(i)= alb(i,j)
+ z0rl_lnd(i) = znt_lnd(i,j)*100.
do k = 1, lsoil_ruc
smois(i,k) = smsoil(i,k,j)
@@ -1028,30 +1097,198 @@ subroutine lsm_ruc_run & ! inputs
keepfr(i,k) = keepfrsoil(i,k,j)
smfrkeep(i,k) = smfrsoil(i,k,j)
enddo
+ if(debug_print) then
+ write (0,*)'LAND -i,j,stype_lnd,vtype_lnd',i,j,stype_lnd(i,j),vtype_lnd(i,j)
+ write (0,*)'i,j,tsurf_lnd(i)',i,j,tsurf_lnd(i)
+ write (0,*)'kdt,iter,stsoil(i,:,j)',kdt,iter,stsoil(i,:,j)
+ endif
+ endif ! end of land
+
+ if (flag_ice_uncoupled(i)) then ! at least some ice in the grid cell
+ !-- ice point
+
+ sncovr_ice(i,j) = sncovr1_ice(i)
+ snoalb1d_ice(i,j) = 0.75 ! RAP value for max snow alb on ice
+ albbck_ice(i,j) = 0.55 ! RAP value for ice alb
+ if (sncovr_ice(i,j) > 0.) then
+ !- averaged of snow-free and snow-covered ice
+ alb_ice(i,j) = albbck_ice(i,j) * (1.-sncovr_ice(i,j)) + snoalb1d_ice(i,j) * sncovr_ice(i,j)
+ else
+ ! snow-free ice
+ alb_ice(i,j) = albbck_ice(i,j)
+ endif
-! --- ... do not return the following output fields to parent model
-! ec - canopy water evaporation (m s-1)
-! edir - direct soil evaporation (m s-1)
-! et(nsoil)-plant transpiration from a particular root layer (m s-1)
-! ett - total plant transpiration (m s-1)
-! esnow - sublimation from (or deposition to if <0) snowpack (m s-1)
-! drip - through-fall of precip and/or dew in excess of canopy
-! water-holding capacity (m)
-! dew - dewfall (or frostfall for t<273.15) (m)
-! snomlt - snow melt (m) (water equivalent)
-! sncovr - fractional snow cover (unitless fraction, 0-1)
-! for a given soil layer at the end of a time step
-! xlai - leaf area index (dimensionless)
-! soilw - available soil moisture in root zone (unitless fraction
-! between smcwlt and smcmax)
-! soilm - total soil column moisture content (frozen+unfrozen) (m)
-! nroot - number of root layers, a function of veg type, determined
-! in subroutine redprm.
+ solnet_ice(i,j) = dswsfc(i)*(1.-alb_ice(i,j))
+ qvg_ice(i,j) = sfcqv_ice(i)
+ qsfc_ice(i,j) = sfcqv_ice(i)/(1.+sfcqv_ice(i))
+ qsg_ice(i,j) = rslf(prsl1(i),tsurf_ice(i))
+ qcg_ice(i,j) = sfcqc_ice(i)
+ sfcems_ice(i,j) = semis_ice(i)
+
+ cmc(i,j) = canopy(i) ! [mm]
+ soilt_ice(i,j) = tsurf_ice(i) ! clu_q2m_iter
+ if (tsnow_ice(i) > 0. .and. tsnow_ice(i) < 273.15) then
+ soilt1_ice(i,j) = tsnow_ice(i)
+ else
+ soilt1_ice(i,j) = tsurf_ice(i)
+ endif
+ tsnav_ice(i,j) = 0.5*(soilt_ice(i,j) + soilt1_ice(i,j)) - 273.15
+ do k = 1, lsoil_ruc
+ stsice (i,k,j) = tsice(i,k)
+ smsoil (i,k,j) = 1.
+ slsoil (i,k,j) = 0.
+ smfrsoil(i,k,j) = 1.
+ keepfrsoil(i,k,j) = 1.
+ enddo
+
+ wet_ice(i,j) = 1.
+
+ chs_ice (i,j) = ch_ice(i) * wind(i) ! compute conductance
+ flhc_ice(i,j) = chs_ice(i,j) * rho(i) * con_cp ! * (1. + 0.84*q2(i,1,j))
+ flqc_ice(i,j) = chs_ice(i,j) * rho(i) * wet_ice(i,j)
+ ! for output
+ cmm_ice(i) = cm_ice (i) * wind(i)
+ chh_ice(i) = chs_ice(i,j) * rho(i)
+
+
+ snowh_ice(i,j) = snwdph_ice(i) * 0.001 ! convert from mm to m
+ sneqv_ice(i,j) = weasd_ice(i) ! [mm]
+ snfallac_ice(i,j) = snowfallac_ice(i)
+
+ !> -- sanity checks on sneqv and snowh
+ if (sneqv_ice(i,j) /= 0.0 .and. snowh_ice(i,j) == 0.0) then
+ snowh_ice(i,j) = 0.003 * sneqv_ice(i,j) ! snow density ~300 kg m-3
+ endif
+
+ if (snowh_ice(i,j) /= 0.0 .and. sneqv_ice(i,j) == 0.0) then
+ sneqv_ice(i,j) = 300. * snowh_ice(i,j) ! snow density ~300 kg m-3
+ endif
- endif ! end if_flag_iter_and_flag_block
+ if (sneqv_ice(i,j) > 0. .and. snowh_ice(i,j) > 0.) then
+ if(sneqv_ice(i,j)/snowh_ice(i,j) > 950.) then
+ sneqv_ice(i,j) = 300. * snowh_ice(i,j)
+ endif
+ endif
+
+ z0_ice(i,j) = z0rl_ice(i)/100.
+ znt_ice(i,j) = z0rl_ice(i)/100.
+
+!> - Call RUC LSM lsmruc() for ice.
+ call lsmruc( &
+ & delt, flag_init, flag_restart, kdt, iter, nsoil, &
+ & graupelncv(i,j), snowncv(i,j), rainncv(i,j), raincv(i,j), &
+ & zs, prcp(i,j), sneqv_ice(i,j), snowh_ice(i,j), &
+ & sncovr_ice(i,j), &
+ & ffrozp(i,j), frpcpn, &
+ & rhosnfr(i,j), precipfr(i,j), &
+! --- inputs:
+ & conflx2(i,1,j), sfcprs(i,1,j), sfctmp(i,1,j), q2(i,1,j), &
+ & qcatm(i,1,j), rho2(i,1,j), &
+ & lwdn(i,j), solnet_ice(i,j), sfcems_ice(i,j), chklowq(i,j), &
+ & chs_ice(i,j), flqc_ice(i,j), flhc_ice(i,j), &
+! --- input/outputs:
+ & wet_ice(i,j), cmc(i,j), shdfac(i,j), alb_ice(i,j), &
+ & znt_ice(i,j), z0_ice(i,j), snoalb1d_ice(i,j), &
+ & albbck_ice(i,j), xlai(i,j),landusef(i,:,j), nlcat, &
+! --- mosaic_lu and mosaic_soil are moved to the namelist
+! & mosaic_lu, mosaic_soil, &
+ & soilctop(i,:,j), nscat, &
+ & qsfc_ice(i,j), qsg_ice(i,j), qvg_ice(i,j), qcg_ice(i,j), &
+ & dew_ice(i,j), soilt1_ice(i,j), &
+ & tsnav_ice(i,j), tbot(i,j), vtype_ice(i,j), stype_ice(i,j), &
+ & xland(i,j), iswater, isice, xice(i,j), xice_threshold, &
+! --- constants
+ & con_cp, con_rv, con_rd, con_g, con_pi, con_hvap, stbolt, &
+! --- input/outputs:
+ & smsoil(i,:,j), slsoil(i,:,j), soilm(i,j), smmax(i,j), &
+ & stsice(i,:,j), soilt_ice(i,j), &
+ & hfx_ice(i,j), qfx_ice(i,j), lh_ice(i,j), &
+ & infiltr(i,j), runoff1(i,j), runoff2(i,j), acrunoff(i,j), &
+ & sfcexc(i,j), acceta(i,j), ssoil_ice(i,j), &
+ & snfallac_ice(i,j), acsn(i,j), snomlt_ice(i,j), &
+ & smfrsoil(i,:,j),keepfrsoil(i,:,j), .false., &
+ & shdmin1d(i,j), shdmax1d(i,j), rdlai2d, &
+ & ims,ime, jms,jme, kms,kme, &
+ & its,ite, jts,jte, kts,kte )
+
+ ! Interstitial
+ evap_ice(i) = qfx_ice(i,j) / rho(i) ! kinematic
+ ep1d_ice(i) = qfx_ice(i,j) * con_hvap
+ hflx_ice(i) = hfx_ice(i,j) / (con_cp*rho(i)) ! kinematic
+ gflux_ice(i) = ssoil_ice(i,j)
+
+ qsurf_ice(i) = qsfc_ice(i,j)
+ tsurf_ice(i) = soilt_ice(i,j)
+
+ sfcqv_ice(i) = qvg_ice(i,j)
+ sfcqc_ice(i) = qcg_ice(i,j)
+
+ snowfallac_ice(i) = snfallac_ice(i,j) ! kg m-2
+ ! --- ... unit conversion (from m to mm)
+ snwdph_ice(i) = snowh_ice(i,j) * 1000.0
+ weasd_ice(i) = sneqv_ice(i,j) ! mm
+ sncovr1_ice(i) = sncovr_ice(i,j)
+ z0rl_ice(i) = znt_ice(i,j)*100.
+
+ do k = 1, lsoil_ruc
+ tsice(i,k) = stsice(i,k,j)
+ if(.not. frac_grid) then
+ smois(i,k) = 1.
+ sh2o(i,k) = 0.
+ tslb(i,k) = stsice(i,k,j)
+ keepfr(i,k) = 1.
+ smfrkeep(i,k) = 1.
+ endif
+ enddo
+ if(debug_print) then
+ write (0,*)'ICE - i,j,stype_ice,vtype_ice)',i,j,stype_ice(i,j),vtype_ice(i,j)
+ write (0,*)'i,j,tsurf_ice(i)',i,j,tsurf_ice(i)
+ write (0,*)'kdt,iter,stsice(i,:,j)',kdt,iter,stsice(i,:,j)
+ endif
+
+ endif ! ice
+
+
+ endif ! end if_flag_iter_and_flag
enddo ! j
enddo ! i
+ !-- Take care of fractional sea ice for uncoupled run with frac_grid=.false.
+ !-- When frac_grid=.true. GFS_surface_composite will take care of this.
+ do i = 1, im ! i - horizontal loop
+ if ( flag_iter(i) .and. flag(i) ) then
+ ! Do this only when the fractional grid is not turned on!
+ ! Compute composite for a fractional sea ice: fice(i) < 1.
+ ! This is needed for the 2-way coupling
+ ! in the upcoupled case (when sfc_cice is not used).
+ if(.not. frac_grid) then
+ if( flag_ice_uncoupled(i) .and. fice(i) < 1.) then
+ !write (0,*)'Fractional sea ice at i', i, fice(i)
+ fwat = 1.0 - fice(i)
+ ! Check if ice fraction is below the minimum value: 15% in GFS
+ ! physics.
+ if (fice(i) < cimin) then ! cimin - minimal ice fraction
+ write (0,*)'warning: ice fraction is low:', fice(i)
+ fice(i) = cimin
+ fwat = 1.0 - cimin
+ write (0,*)'fix ice fraction: reset it to:', fice(i), tskin_wat(i)
+ endif
+
+ ! Compute the composite of ice and open water for 2-way coupling in the
+ ! uncoupled sea-ice model. Use ice variables for the composite.
+ tsurf_ice(i) = tsurf_ice(i) * fice(i) + min(con_tice,tskin_wat(i)) * fwat
+ chh_ice(i) = chh_ice(i) * fice(i) + ch_wat(i) * wind(i) * rho(i) * fwat
+ hfxw = ch_wat(i) * wind(i) * (min(con_tice,tskin_wat(i)) - t1(i))
+ hflx_ice(i) = hflx_ice(i) * fice(i) + hfxw * fwat
+ qsw = rslf(prsl1(i),min(con_tice,tskin_wat(i)))
+ evapw = ch_wat(i) * wind(i) * (qsw - q0(i))
+ evap_ice(i) = evap_ice(i) * fice(i) + evapw * fwat
+ qsurf_ice(i) = q1(i) + evap_ice(i) * rho(i) / chh_ice(i)
+ endif ! flag_ice_uncoupled(i) .and. fice(i) < 1.
+ endif ! flag_iter, icy, not frac_grid
+ endif
+ enddo ! i
+
!> - Restore land-related prognostic fields for guess run.
do j = 1, 1
do i = 1, im
@@ -1059,50 +1296,52 @@ subroutine lsm_ruc_run & ! inputs
if(debug_print) write (0,*)'end ',i,flag_guess(i),flag_iter(i)
if (flag_guess(i)) then
if(debug_print) write (0,*)'guess run'
- weasd(i) = weasd_old(i)
- snwdph(i) = snwdph_old(i)
- tskin(i) = tskin_old(i)
- canopy(i) = canopy_old(i)
- !tprcp(i) = tprcp_old(i)
- srflag(i) = srflag_old(i)
- tsnow(i) = tsnow_old(i)
- snowfallac(i) = snowfallac_old(i)
- acsnow(i) = acsnow_old(i)
- sfalb(i) = sfalb_old(i)
- sfcqv(i) = sfcqv_old(i)
- sfcqc(i) = sfcqc_old(i)
- wetness(i) = wetness_old(i)
- zorl(i) = zorl_old(i)
- sncovr1(i) = sncovr1_old(i)
+
+ weasd_lnd(i) = weasd_lnd_old(i)
+ snwdph_lnd(i) = snwdph_lnd_old(i)
+ tskin_lnd(i) = tskin_lnd_old(i)
+ canopy(i) = canopy_old(i)
+ !srflag(i) = srflag_old(i)
+ tsnow_lnd(i) = tsnow_lnd_old(i)
+ snowfallac_lnd(i) = snowfallac_lnd_old(i)
+ !acsnow(i) = acsnow_old(i)
+ sfcqv_lnd(i) = sfcqv_lnd_old(i)
+ sfcqc_lnd(i) = sfcqc_lnd_old(i)
+ wetness(i) = wetness_old(i)
+ z0rl_lnd(i) = z0rl_lnd_old(i)
+ sncovr1_lnd(i) = sncovr1_lnd_old(i)
+ !ice
+ weasd_ice(i) = weasd_ice_old(i)
+ snwdph_ice(i) = snwdph_ice_old(i)
+ tskin_ice(i) = tskin_ice_old(i)
+ tsnow_ice(i) = tsnow_ice_old(i)
+ snowfallac_ice(i) = snowfallac_ice_old(i)
+ sfcqv_ice(i) = sfcqv_ice_old(i)
+ sfcqc_ice(i) = sfcqc_ice_old(i)
+ z0rl_ice(i) = z0rl_ice_old(i)
+ sncovr1_ice(i) = sncovr1_ice_old(i)
+
do k = 1, lsoil_ruc
- smois(i,k) = smois_old(i,k)
- tslb(i,k) = tslb_old(i,k)
- sh2o(i,k) = sh2o_old(i,k)
- keepfr(i,k) = keepfr_old(i,k)
+ smois(i,k) = smois_old(i,k)
+ tslb(i,k) = tslb_old(i,k)
+ tsice(i,k) = tsice_old(i,k)
+ sh2o(i,k) = sh2o_old(i,k)
+ keepfr(i,k) = keepfr_old(i,k)
smfrkeep(i,k) = smfrkeep_old(i,k)
enddo
- else
- if(debug_print) write (0,*)'iter run', i,j, tskin(i),tsurf(i)
- tskin(i) = tsurf(i)
- tice (i) = tsurf(i)
- endif
- endif
+ else ! flag_guess
+ if(debug_print) write (0,*)'iter run', i,j, tskin_ice(i),tsurf_ice(i)
+ tskin_lnd(i) = tsurf_lnd(i)
+ tskin_ice(i) = tsurf_ice(i)
+ tice(i) = tsurf_ice(i)
+ endif ! flag_guess
+ endif ! flag
enddo ! i
enddo ! j
!
deallocate(soilctop)
deallocate(landusef)
!
- !! Update standard (Noah LSM) soil variables for physics
- !! that require these variables and for debugging purposes
- do i = 1, im
- do k = 1, lsoil
- smc(i,k) = smois(i,k)
- slc(i,k) = sh2o(i,k)
- stc(i,k) = tslb(i,k)
- enddo
- enddo
-
return
!...................................
end subroutine lsm_ruc_run
diff --git a/physics/sfc_drv_ruc.meta b/physics/sfc_drv_ruc.meta
index 061979d63..0aad3157d 100644
--- a/physics/sfc_drv_ruc.meta
+++ b/physics/sfc_drv_ruc.meta
@@ -331,6 +331,15 @@
type = integer
intent = in
optional = F
+[delt]
+ standard_name = time_step_for_dynamics
+ long_name = physics time step
+ units = s
+ dimensions = ()
+ type = real
+ kind = kind_phys
+ intent = in
+ optional = F
[kdt]
standard_name = index_of_time_step
long_name = current number of time steps
@@ -355,6 +364,54 @@
type = integer
intent = in
optional = F
+[lsm_ruc]
+ standard_name = flag_for_ruc_land_surface_scheme
+ long_name = flag for RUC land surface model
+ units = flag
+ dimensions = ()
+ type = integer
+ intent = in
+ optional = F
+[lsm]
+ standard_name = flag_for_land_surface_scheme
+ long_name = flag for land surface model
+ units = flag
+ dimensions = ()
+ type = integer
+ intent = in
+ optional = F
+[imp_physics]
+ standard_name = flag_for_microphysics_scheme
+ long_name = choice of microphysics scheme
+ units = flag
+ dimensions = ()
+ type = integer
+ intent = in
+ optional = F
+[imp_physics_gfdl]
+ standard_name = flag_for_gfdl_microphysics_scheme
+ long_name = choice of GFDL microphysics scheme
+ units = flag
+ dimensions = ()
+ type = integer
+ intent = in
+ optional = F
+[imp_physics_thompson]
+ standard_name = flag_for_thompson_microphysics_scheme
+ long_name = choice of Thompson microphysics scheme
+ units = flag
+ dimensions = ()
+ type = integer
+ intent = in
+ optional = F
+[do_mynnsfclay]
+ standard_name = do_mynnsfclay
+ long_name = flag to activate MYNN surface layer
+ units = flag
+ dimensions = ()
+ type = logical
+ intent = in
+ optional = F
[lsoil_ruc]
standard_name = soil_vertical_dimension_for_land_surface_model
long_name = number of soil layers internal to land surface model
@@ -371,6 +428,14 @@
type = integer
intent = in
optional = F
+[rdlai]
+ standard_name = flag_for_reading_leaf_area_index_from_input
+ long_name = flag for reading leaf area index from initial conditions for RUC LSM
+ units = flag
+ dimensions = ()
+ type = logical
+ intent = in
+ optional = F
[zs]
standard_name = depth_of_soil_levels_for_land_surface_model
long_name = depth of soil levels for land surface model
@@ -400,7 +465,7 @@
optional = F
[qc]
standard_name = cloud_condensed_water_mixing_ratio_at_lowest_model_layer
- long_name = moist (dry+vapor, no condensates) mixing ratio of cloud water at lowest model layer
+ long_name = ratio of mass of cloud water to mass of dry air plus vapor (without condensates) at lowest model layer
units = kg kg-1
dimensions = (horizontal_loop_extent)
type = real
@@ -441,15 +506,6 @@
kind = kind_phys
intent = in
optional = F
-[sfcemis]
- standard_name = surface_longwave_emissivity_over_land_interstitial
- long_name = surface lw emissivity in fraction over land (temporary use as interstitial)
- units = frac
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
- intent = inout
- optional = F
[dlwflx]
standard_name = surface_downwelling_longwave_flux
long_name = surface downwelling longwave flux at current time
@@ -477,15 +533,6 @@
kind = kind_phys
intent = in
optional = F
-[delt]
- standard_name = time_step_for_dynamics
- long_name = physics time step
- units = s
- dimensions = ()
- type = real
- kind = kind_phys
- intent = in
- optional = F
[tg3]
standard_name = deep_soil_temperature
long_name = deep soil temperature
@@ -495,19 +542,70 @@
kind = kind_phys
intent = in
optional = F
-[cm]
- standard_name = surface_drag_coefficient_for_momentum_in_air_over_land
- long_name = surface exchange coeff for momentum over land
- units = none
+[land]
+ standard_name = flag_nonzero_land_surface_fraction
+ long_name = flag indicating presence of some land surface area fraction
+ units = flag
+ dimensions = (horizontal_loop_extent)
+ type = logical
+ intent = in
+ optional = F
+[icy]
+ standard_name = flag_nonzero_sea_ice_surface_fraction
+ long_name = flag indicating presence of some sea ice surface area fraction
+ units = flag
+ dimensions = (horizontal_loop_extent)
+ type = logical
+ intent = in
+ optional = F
+[lake]
+ standard_name = flag_nonzero_lake_surface_fraction
+ long_name = flag indicating presence of some lake surface area fraction
+ units = flag
+ dimensions = (horizontal_loop_extent)
+ type = logical
+ intent = in
+ optional = F
+[rainnc]
+ standard_name = lwe_thickness_of_explicit_rainfall_amount_from_previous_timestep
+ long_name = explicit rainfall from previous timestep
+ units = m
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
intent = in
optional = F
-[ch]
- standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_land
- long_name = surface exchange coeff heat & moisture over land
- units = none
+[rainc]
+ standard_name = lwe_thickness_of_convective_precipitation_amount_from_previous_timestep
+ long_name = convective_precipitation_amount from previous timestep
+ units = m
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = in
+ optional = F
+[ice]
+ standard_name = lwe_thickness_of_ice_amount_from_previous_timestep
+ long_name = ice amount from previous timestep
+ units = m
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = in
+ optional = F
+[snow]
+ standard_name = lwe_thickness_of_snow_amount_from_previous_timestep
+ long_name = snow amount from previous timestep
+ units = m
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = in
+ optional = F
+[graupel]
+ standard_name = lwe_thickness_of_graupel_amount_from_previous_timestep
+ long_name = graupel amount from previous timestep
+ units = m
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
@@ -576,38 +674,22 @@
kind = kind_phys
intent = in
optional = F
-[snoalb]
- standard_name = upper_bound_on_max_albedo_over_deep_snow
- long_name = maximum snow albedo
- units = frac
+[srflag]
+ standard_name = flag_for_precipitation_type
+ long_name = snow/rain flag for precipitation
+ units = flag
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
intent = in
optional = F
-[sfalb]
- standard_name = surface_diffused_shortwave_albedo
- long_name = mean surface diffused sw albedo
+[snoalb]
+ standard_name = upper_bound_on_max_albedo_over_deep_snow
+ long_name = maximum snow albedo
units = frac
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- intent = inout
- optional = F
-[flag_iter]
- standard_name = flag_for_iteration
- long_name = flag for iteration
- units = flag
- dimensions = (horizontal_loop_extent)
- type = logical
- intent = in
- optional = F
-[flag_guess]
- standard_name = flag_for_guess_run
- long_name = flag for guess run
- units = flag
- dimensions = (horizontal_loop_extent)
- type = logical
intent = in
optional = F
[isot]
@@ -633,189 +715,135 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- intent = inout
+ intent = in
optional = F
-[smc]
- standard_name = volume_fraction_of_soil_moisture
- long_name = total soil moisture
+[smcwlt2]
+ standard_name = volume_fraction_of_condensed_water_in_soil_at_wilting_point
+ long_name = soil water fraction at wilting point
units = frac
- dimensions = (horizontal_loop_extent,soil_vertical_dimension)
+ dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
intent = inout
optional = F
-[stc]
- standard_name = soil_temperature
- long_name = soil temperature
- units = K
- dimensions = (horizontal_loop_extent,soil_vertical_dimension)
+[smcref2]
+ standard_name = threshold_volume_fraction_of_condensed_water_in_soil
+ long_name = soil moisture threshold
+ units = frac
+ dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
intent = inout
optional = F
-[slc]
- standard_name = volume_fraction_of_unfrozen_soil_moisture
- long_name = liquid soil moisture
- units = frac
- dimensions = (horizontal_loop_extent,soil_vertical_dimension)
+[con_cp]
+ standard_name = specific_heat_of_dry_air_at_constant_pressure
+ long_name = specific heat !of dry air at constant pressure
+ units = J kg-1 K-1
+ dimensions = ()
type = real
kind = kind_phys
- intent = inout
+ intent = in
optional = F
-[lsm_ruc]
- standard_name = flag_for_ruc_land_surface_scheme
- long_name = flag for RUC land surface model
- units = flag
+[con_rd]
+ standard_name = gas_constant_dry_air
+ long_name = ideal gas constant for dry air
+ units = J kg-1 K-1
dimensions = ()
- type = integer
+ type = real
+ kind = kind_phys
intent = in
optional = F
-[lsm]
- standard_name = flag_for_land_surface_scheme
- long_name = flag for land surface model
- units = flag
+[con_rv]
+ standard_name = gas_constant_water_vapor
+ long_name = ideal gas constant for water vapor
+ units = J kg-1 K-1
dimensions = ()
- type = integer
+ type = real
+ kind = kind_phys
intent = in
optional = F
-[land]
- standard_name = flag_nonzero_land_surface_fraction
- long_name = flag indicating presence of some land surface area fraction
- units = flag
- dimensions = (horizontal_loop_extent)
- type = logical
+[con_g]
+ standard_name = gravitational_acceleration
+ long_name = gravitational acceleration
+ units = m s-2
+ dimensions = ()
+ type = real
+ kind = kind_phys
intent = in
optional = F
-[islimsk]
- standard_name = sea_land_ice_mask
- long_name = sea/land/ice mask (=0/1/2)
- units = flag
- dimensions = (horizontal_loop_extent)
- type = integer
+[con_pi]
+ standard_name = pi
+ long_name = ratio of a circle's circumference to its diameter
+ units = none
+ dimensions = ()
+ type = real
+ kind = kind_phys
intent = in
optional = F
-[rdlai]
- standard_name = flag_for_reading_leaf_area_index_from_input
- long_name = flag for reading leaf area index from initial conditions for RUC LSM
- units = flag
+[con_hvap]
+ standard_name = latent_heat_of_vaporization_of_water_at_0C
+ long_name = latent heat of vaporization/sublimation (hvap)
+ units = J kg-1
dimensions = ()
- type = logical
+ type = real
+ kind = kind_phys
intent = in
optional = F
-[imp_physics]
- standard_name = flag_for_microphysics_scheme
- long_name = choice of microphysics scheme
- units = flag
- dimensions = ()
- type = integer
- intent = in
- optional = F
-[imp_physics_gfdl]
- standard_name = flag_for_gfdl_microphysics_scheme
- long_name = choice of GFDL microphysics scheme
- units = flag
- dimensions = ()
- type = integer
- intent = in
- optional = F
-[imp_physics_thompson]
- standard_name = flag_for_thompson_microphysics_scheme
- long_name = choice of Thompson microphysics scheme
- units = flag
- dimensions = ()
- type = integer
- intent = in
- optional = F
-[smcwlt2]
- standard_name = volume_fraction_of_condensed_water_in_soil_at_wilting_point
- long_name = soil water fraction at wilting point
- units = frac
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
- intent = inout
- optional = F
-[smcref2]
- standard_name = threshold_volume_fraction_of_condensed_water_in_soil
- long_name = soil moisture threshold
- units = frac
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
- intent = inout
- optional = F
-[do_mynnsfclay]
- standard_name = do_mynnsfclay
- long_name = flag to activate MYNN surface layer
- units = flag
- dimensions = ()
- type = logical
- intent = in
- optional = F
-[con_cp]
- standard_name = specific_heat_of_dry_air_at_constant_pressure
- long_name = specific heat !of dry air at constant pressure
- units = J kg-1 K-1
- dimensions = ()
- type = real
- kind = kind_phys
- intent = in
- optional = F
-[con_rv]
- standard_name = gas_constant_water_vapor
- long_name = ideal gas constant for water vapor
- units = J kg-1 K-1
+[con_fvirt]
+ standard_name = ratio_of_vapor_to_dry_air_gas_constants_minus_one
+ long_name = rv/rd - 1 (rv = ideal gas constant for water vapor)
+ units = none
dimensions = ()
type = real
kind = kind_phys
intent = in
optional = F
-[con_rd]
- standard_name = gas_constant_dry_air
- long_name = ideal gas constant for dry air
- units = J kg-1 K-1
- dimensions = ()
+[ch_wat]
+ standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean
+ long_name = surface exchange coeff heat & moisture over ocean
+ units = none
+ dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
intent = in
optional = F
-[con_g]
- standard_name = gravitational_acceleration
- long_name = gravitational acceleration
- units = m s-2
- dimensions = ()
+[tskin_wat]
+ standard_name = surface_skin_temperature_over_ocean_interstitial
+ long_name = surface skin temperature over ocean (temporary use as interstitial)
+ units = K
+ dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
intent = in
optional = F
-[con_pi]
- standard_name = pi
- long_name = ratio of a circle's circumference to its diameter
- units = none
- dimensions = ()
+[semis_lnd]
+ standard_name = surface_longwave_emissivity_over_land_interstitial
+ long_name = surface lw emissivity in fraction over land (temporary use as interstitial)
+ units = frac
+ dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- intent = in
+ intent = inout
optional = F
-[con_hvap]
- standard_name = latent_heat_of_vaporization_of_water_at_0C
- long_name = latent heat of vaporization/sublimation (hvap)
- units = J kg-1
- dimensions = ()
+[semis_ice]
+ standard_name = surface_longwave_emissivity_over_ice_interstitial
+ long_name = surface lw emissivity in fraction over ice (temporary use as interstitial)
+ units = frac
+ dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- intent = in
+ intent = inout
optional = F
-[con_fvirt]
- standard_name = ratio_of_vapor_to_dry_air_gas_constants_minus_one
- long_name = rv/rd - 1 (rv = ideal gas constant for water vapor)
- units = none
- dimensions = ()
+[sncovr1_lnd]
+ standard_name = surface_snow_area_fraction_over_land
+ long_name = surface snow area fraction over land
+ units = frac
+ dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- intent = in
+ intent = inout
optional = F
-[weasd]
+[weasd_lnd]
standard_name = water_equivalent_accumulated_snow_depth_over_land
long_name = water equiv of acc snow depth over land
units = mm
@@ -824,7 +852,7 @@
kind = kind_phys
intent = inout
optional = F
-[snwdph]
+[snwdph_lnd]
standard_name = surface_snow_thickness_water_equivalent_over_land
long_name = water equivalent snow depth over land
units = mm
@@ -833,7 +861,7 @@
kind = kind_phys
intent = inout
optional = F
-[tskin]
+[tskin_lnd]
standard_name = surface_skin_temperature_over_land_interstitial
long_name = surface skin temperature over land use as interstitial
units = K
@@ -842,64 +870,37 @@
kind = kind_phys
intent = inout
optional = F
-[tskin_wat]
- standard_name = surface_skin_temperature_over_ocean_interstitial
- long_name = surface skin temperature over ocean (temporary use as interstitial)
- units = K
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
- intent = inout
- optional = F
-[rainnc]
- standard_name = lwe_thickness_of_explicit_rainfall_amount_from_previous_timestep
- long_name = explicit rainfall from previous timestep
- units = m
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
- intent = in
- optional = F
-[rainc]
- standard_name = lwe_thickness_of_convective_precipitation_amount_from_previous_timestep
- long_name = convective_precipitation_amount from previous timestep
- units = m
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
- intent = in
- optional = F
-[ice]
- standard_name = lwe_thickness_of_ice_amount_from_previous_timestep
- long_name = ice amount from previous timestep
- units = m
+[sncovr1_ice]
+ standard_name = surface_snow_area_fraction_over_ice
+ long_name = surface snow area fraction over ice
+ units = frac
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
intent = in
optional = F
-[snow]
- standard_name = lwe_thickness_of_snow_amount_from_previous_timestep
- long_name = snow amount from previous timestep
- units = m
+[weasd_ice]
+ standard_name = water_equivalent_accumulated_snow_depth_over_ice
+ long_name = water equiv of acc snow depth over ice
+ units = mm
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- intent = in
+ intent = inout
optional = F
-[graupel]
- standard_name = lwe_thickness_of_graupel_amount_from_previous_timestep
- long_name = graupel amount from previous timestep
- units = m
+[snwdph_ice]
+ standard_name = surface_snow_thickness_water_equivalent_over_ice
+ long_name = water equivalent snow depth over ice
+ units = mm
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- intent = in
+ intent = inout
optional = F
-[srflag]
- standard_name = flag_for_precipitation_type
- long_name = snow/rain flag for precipitation
- units = flag
+[tskin_ice]
+ standard_name = surface_skin_temperature_over_ice_interstitial
+ long_name = surface skin temperature over ice (temporary use as interstitial)
+ units = K
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
@@ -914,6 +915,15 @@
kind = kind_phys
intent = inout
optional = F
+[tsice]
+ standard_name = internal_ice_temperature
+ long_name = sea ice internal temperature
+ units = K
+ dimensions = (horizontal_loop_extent,ice_vertical_dimension)
+ type = real
+ kind = kind_phys
+ intent = inout
+ optional = F
[tslb]
standard_name = soil_temperature_for_land_surface_model
long_name = soil temperature for land surface model
@@ -968,7 +978,7 @@
kind = kind_phys
intent = out
optional = F
-[tsurf]
+[tsurf_lnd]
standard_name = surface_skin_temperature_after_iteration_over_land
long_name = surface skin temperature after iteration over land
units = K
@@ -977,16 +987,16 @@
kind = kind_phys
intent = inout
optional = F
-[tsnow]
- standard_name = snow_temperature_bottom_first_layer
- long_name = snow temperature at the bottom of first snow layer
+[tsnow_lnd]
+ standard_name = snow_temperature_bottom_first_layer_over_land
+ long_name = snow temperature at the bottom of first snow layer over land
units = K
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
intent = inout
optional = F
-[zorl]
+[z0rl_lnd]
standard_name = surface_roughness_length_over_land_interstitial
long_name = surface roughness length over land (temporary use as interstitial)
units = cm
@@ -995,52 +1005,25 @@
kind = kind_phys
intent = inout
optional = F
-[sfcqc]
- standard_name = cloud_condensed_water_mixing_ratio_at_surface
- long_name = moist cloud water mixing ratio at surface
+[sfcqc_lnd]
+ standard_name = cloud_condensed_water_mixing_ratio_at_surface_over_land
+ long_name = moist cloud water mixing ratio at surface over land
units = kg kg-1
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
intent = inout
optional = F
-[sfcdew]
- standard_name = surface_condensation_mass
- long_name = surface condensation mass
- units = kg m-2
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
- intent = inout
- optional = F
-[tice]
- standard_name = sea_ice_temperature_interstitial
- long_name = sea ice surface skin temperature use as interstitial
- units = K
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
- intent = inout
- optional = F
-[sfcqv]
- standard_name = water_vapor_mixing_ratio_at_surface
- long_name = water vapor mixing ratio at surface
+[sfcqv_lnd]
+ standard_name = water_vapor_mixing_ratio_at_surface_over_land
+ long_name = water vapor mixing ratio at surface over land
units = kg kg-1
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
intent = inout
optional = F
-[sncovr1]
- standard_name = surface_snow_area_fraction_over_land
- long_name = surface snow area fraction
- units = frac
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
- intent = inout
- optional = F
-[qsurf]
+[qsurf_lnd]
standard_name = surface_specific_humidity_over_land
long_name = surface air saturation specific humidity over land
units = kg kg-1
@@ -1049,7 +1032,7 @@
kind = kind_phys
intent = inout
optional = F
-[gflux]
+[gflux_lnd]
standard_name = upward_heat_flux_in_soil_over_land
long_name = soil heat flux over land
units = W m-2
@@ -1058,16 +1041,7 @@
kind = kind_phys
intent = out
optional = F
-[drain]
- standard_name = subsurface_runoff_flux
- long_name = subsurface runoff flux
- units = kg m-2 s-1
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
- intent = out
- optional = F
-[evap]
+[evap_lnd]
standard_name = kinematic_surface_upward_latent_heat_flux_over_land
long_name = kinematic surface upward evaporation flux over land
units = kg kg-1 m s-1
@@ -1076,7 +1050,7 @@
kind = kind_phys
intent = out
optional = F
-[hflx]
+[hflx_lnd]
standard_name = kinematic_surface_upward_sensible_heat_flux_over_land
long_name = kinematic surface upward sensible heat flux over land
units = K m s-1
@@ -1085,15 +1059,6 @@
kind = kind_phys
intent = out
optional = F
-[rhosnf]
- standard_name = density_of_frozen_precipitation
- long_name = density of frozen precipitation
- units = kg m-3
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
- intent = out
- optional = F
[runof]
standard_name = surface_runoff_flux
long_name = surface runoff flux
@@ -1121,23 +1086,32 @@
kind = kind_phys
intent = inout
optional = F
-[chh]
- standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_land
- long_name = thermal exchange coefficient over land
+[drain]
+ standard_name = subsurface_runoff_flux
+ long_name = subsurface runoff flux
units = kg m-2 s-1
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- intent = inout
+ intent = out
optional = F
-[cmm]
- standard_name = surface_drag_wind_speed_for_momentum_in_air_over_land
- long_name = momentum exchange coefficient over land
- units = m s-1
+[cm_lnd]
+ standard_name = surface_drag_coefficient_for_momentum_in_air_over_land
+ long_name = surface exchange coeff for momentum over land
+ units = none
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- intent = inout
+ intent = in
+ optional = F
+[ch_lnd]
+ standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_land
+ long_name = surface exchange coeff heat & moisture over land
+ units = none
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = in
optional = F
[evbs]
standard_name = soil_upward_latent_heat_flux
@@ -1157,15 +1131,6 @@
kind = kind_phys
intent = out
optional = F
-[sbsno]
- standard_name = snow_deposition_sublimation_upward_latent_heat_flux
- long_name = latent heat flux from snow depo/subl
- units = W m-2
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
- intent = out
- optional = F
[stm]
standard_name = soil_moisture_content
long_name = soil moisture content
@@ -1184,24 +1149,211 @@
kind = kind_phys
intent = inout
optional = F
-[acsnow]
- standard_name = accumulated_water_equivalent_of_frozen_precip
- long_name = snow water equivalent of run-total frozen precip
+[snowfallac_lnd]
+ standard_name = total_accumulated_snowfall_over_land
+ long_name = run-total snow accumulation on the ground over land
units = kg m-2
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
intent = inout
optional = F
-[snowfallac]
- standard_name = total_accumulated_snowfall
- long_name = run-total snow accumulation on the ground
+[sfcqc_ice]
+ standard_name = cloud_condensed_water_mixing_ratio_at_surface_over_ice
+ long_name = moist cloud water mixing ratio at surface over ice
+ units = kg kg-1
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = inout
+ optional = F
+[sfcqv_ice]
+ standard_name = water_vapor_mixing_ratio_at_surface_over_ice
+ long_name = water vapor mixing ratio at surface over ice
+ units = kg kg-1
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = inout
+ optional = F
+[tice]
+ standard_name = sea_ice_temperature_interstitial
+ long_name = sea ice surface skin temperature use as interstitial
+ units = K
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = inout
+ optional = F
+[tsurf_ice]
+ standard_name = surface_skin_temperature_after_iteration_over_ice
+ long_name = surface skin temperature after iteration over ice
+ units = K
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = inout
+ optional = F
+[tsnow_ice]
+ standard_name = snow_temperature_bottom_first_layer_over_ice
+ long_name = snow temperature at the bottom of first snow layer over ice
+ units = K
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = inout
+ optional = F
+[z0rl_ice]
+ standard_name = surface_roughness_length_over_ice_interstitial
+ long_name = surface roughness length over ice (temporary use as interstitial)
+ units = cm
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = inout
+ optional = F
+[qsurf_ice]
+ standard_name = surface_specific_humidity_over_ice
+ long_name = surface air saturation specific humidity over ice
+ units = kg kg-1
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = inout
+ optional = F
+[gflux_ice]
+ standard_name = upward_heat_flux_in_soil_over_ice
+ long_name = soil heat flux over ice
+ units = W m-2
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = out
+ optional = F
+[evap_ice]
+ standard_name = kinematic_surface_upward_latent_heat_flux_over_ice
+ long_name = kinematic surface upward latent heat flux over ice
+ units = kg kg-1 m s-1
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = out
+ optional = F
+[ep1d_ice]
+ standard_name = surface_upward_potential_latent_heat_flux_over_ice
+ long_name = surface upward potential latent heat flux over ice
+ units = W m-2
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = inout
+ optional = F
+[hflx_ice]
+ standard_name = kinematic_surface_upward_sensible_heat_flux_over_ice
+ long_name = kinematic surface upward sensible heat flux over ice
+ units = K m s-1
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = out
+ optional = F
+[cm_ice]
+ standard_name = surface_drag_coefficient_for_momentum_in_air_over_ice
+ long_name = surface exchange coeff for momentum over ice
+ units = none
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = in
+ optional = F
+[ch_ice]
+ standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ice
+ long_name = surface exchange coeff heat & moisture over ice
+ units = none
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = in
+ optional = F
+[snowfallac_ice]
+ standard_name = total_accumulated_snowfall_over_ice
+ long_name = run-total snow accumulation on the ground over ice
units = kg m-2
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
intent = inout
optional = F
+[rhosnf]
+ standard_name = density_of_frozen_precipitation
+ long_name = density of frozen precipitation
+ units = kg m-3
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = out
+ optional = F
+[sbsno]
+ standard_name = snow_deposition_sublimation_upward_latent_heat_flux
+ long_name = latent heat flux from snow depo/subl
+ units = W m-2
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = out
+ optional = F
+[cmm_lnd]
+ standard_name = surface_drag_wind_speed_for_momentum_in_air_over_land
+ long_name = momentum exchange coefficient over land
+ units = m s-1
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = out
+ optional = F
+[chh_lnd]
+ standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_land
+ long_name = thermal exchange coefficient over land
+ units = kg m-2 s-1
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = out
+ optional = F
+[cmm_ice]
+ standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ice
+ long_name = momentum exchange coefficient over ice
+ units = m s-1
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = out
+ optional = F
+[chh_ice]
+ standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ice
+ long_name = thermal exchange coefficient over ice
+ units = kg m-2 s-1
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = out
+ optional = F
+[flag_iter]
+ standard_name = flag_for_iteration
+ long_name = flag for iteration
+ units = flag
+ dimensions = (horizontal_loop_extent)
+ type = logical
+ intent = in
+ optional = F
+[flag_guess]
+ standard_name = flag_for_guess_run
+ long_name = flag for guess run
+ units = flag
+ dimensions = (horizontal_loop_extent)
+ type = logical
+ intent = in
+ optional = F
[flag_init]
standard_name = flag_for_first_time_step
long_name = flag signaling first time step for time integration loop
@@ -1218,6 +1370,22 @@
type = logical
intent = in
optional = F
+[flag_cice]
+ standard_name = flag_for_cice
+ long_name = flag for cice
+ units = flag
+ dimensions = (horizontal_loop_extent)
+ type = logical
+ intent = in
+ optional = F
+[frac_grid]
+ standard_name = flag_for_fractional_grid
+ long_name = flag for fractional grid
+ units = flag
+ dimensions = ()
+ type = logical
+ intent = in
+ optional = F
[errmsg]
standard_name = ccpp_error_message
long_name = error message for error handling in CCPP