From d224b13c9e7cab8cf21d4d9eb06b889a95f35aa5 Mon Sep 17 00:00:00 2001 From: tanyasmirnova Date: Thu, 13 May 2021 21:24:40 +0000 Subject: [PATCH] Added option for ice on lakes. --- physics/GFS_radiation_surface.F90 | 25 ++++++++++++++++++------- physics/GFS_radiation_surface.meta | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/physics/GFS_radiation_surface.F90 b/physics/GFS_radiation_surface.F90 index 1801e6f57..cf4cdec6e 100644 --- a/physics/GFS_radiation_surface.F90 +++ b/physics/GFS_radiation_surface.F90 @@ -42,8 +42,8 @@ subroutine GFS_radiation_surface_init (me, sfcalb, ialb, iems, errmsg, errflg) iemsflg= iems ! surface emissivity control flag if ( me == 0 ) then - print *,' In GFS_radiation_surface_init, before calling sfc_init' - print *,' ialb=',ialb,' iems=',iems + print *,'In GFS_radiation_surface_init, before calling sfc_init' + print *,'ialb=',ialb,' iems=',iems end if ! Call surface initialization routine @@ -60,7 +60,8 @@ subroutine GFS_radiation_surface_run ( & vtype, xlat, xlon, slmsk, lndp_type, n_var_lndp, sfc_alb_pert, & lndp_var_list, lndp_prt_list, landfrac, snowd, sncovr, & sncovr_ice, fice, zorl, hprime, tsfg, tsfa, tisfc, coszen, & - min_seaice, alvsf, alnsf, alvwf, alnwf, facsf, facwf, & + min_seaice, min_lakeice, lakefrac, & + alvsf, alnsf, alvwf, alnwf, facsf, facwf, & semis_lnd, semis_ice, snoalb, & albdvis_lnd, albdnir_lnd, albivis_lnd, albinir_lnd, & albdvis_ice, albdnir_ice, albivis_ice, albinir_ice, & @@ -75,11 +76,12 @@ subroutine GFS_radiation_surface_run ( & integer, intent(in) :: im logical, intent(in) :: frac_grid, lslwr, lsswr integer, intent(in) :: lsm, lsm_noahmp, lsm_ruc, lndp_type, n_var_lndp - real(kind=kind_phys), intent(in) :: min_seaice + real(kind=kind_phys), intent(in) :: min_seaice, min_lakeice real(kind=kind_phys), dimension(:), intent(in) :: xlat, xlon, vtype, slmsk, & sfc_alb_pert, lndp_prt_list, & - landfrac, snowd, sncovr, & + landfrac, lakefrac, & + snowd, sncovr, & sncovr_ice, fice, zorl, & hprime, tsfg, tsfa, tisfc, & coszen, alvsf, alnsf, alvwf, & @@ -99,6 +101,7 @@ subroutine GFS_radiation_surface_run ( & ! Local variables integer :: i real(kind=kind_phys) :: lndp_alb + real(kind=kind_phys) :: cimin real(kind=kind_phys), dimension(im) :: fracl, fraci, fraco logical, dimension(im) :: icy @@ -109,6 +112,14 @@ subroutine GFS_radiation_surface_run ( & ! Intialize intent(out) variables sfcalb = 0.0 + do i=1,im + if (lakefrac(i) > f_zero) then + cimin = min_lakeice + else + cimin = min_seaice + endif + enddo + ! Return immediately if neither shortwave nor longwave radiation are called if (.not. lsswr .and. .not. lslwr) return @@ -123,7 +134,7 @@ subroutine GFS_radiation_surface_run ( & else fracl(i) = f_zero fraco(i) = f_one - if(fice(i) < min_seaice) then + if(fice(i) < cimin) then fraci(i) = f_zero icy(i) = .false. else @@ -137,7 +148,7 @@ subroutine GFS_radiation_surface_run ( & do i=1,im fracl(i) = landfrac(i) fraco(i) = max(f_zero, f_one - fracl(i)) - if(fice(i) < min_seaice) then + if(fice(i) < cimin) then fraci(i) = f_zero icy(i) = .false. else diff --git a/physics/GFS_radiation_surface.meta b/physics/GFS_radiation_surface.meta index 6c770575c..d1136c43a 100644 --- a/physics/GFS_radiation_surface.meta +++ b/physics/GFS_radiation_surface.meta @@ -305,6 +305,24 @@ kind = kind_phys intent = in optional = F +[min_lakeice] + standard_name = lake_ice_minimum + long_name = minimum lake ice value + units = frac + dimensions = () + type = real + kind = kind_phys + intent = in + optional = F +[lakefrac] + standard_name = lake_area_fraction + long_name = fraction of horizontal grid area occupied by lake + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [alvsf] standard_name = mean_vis_albedo_with_strong_cosz_dependency long_name = mean vis albedo with strong cosz dependency