diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_post.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_post.F90 index 7623f23da..d83ecc097 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_post.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_post.F90 @@ -23,8 +23,8 @@ module GFS_surface_composites_post !! \htmlinclude GFS_surface_composites_post_run.html !! subroutine GFS_surface_composites_post_run ( & - im, kice, km, rd, rvrdm1, cplflx, cplwav2atm, cpl_fire, frac_grid, flag_cice, thsfc_loc, islmsk, dry, wet, icy, wind, t1, q1, prsl1, & - landfrac, lakefrac, oceanfrac, zorl, zorlo, zorll, zorli, garea, frac_ice, & + im, kice, km, rd, rvrdm1, cplflx, cplwav2atm, cpl_fire, frac_grid, flag_cice, thsfc_loc, islmsk, dry, wet, icy, & + use_cdeps_data, mask_dat, wind, t1, q1, prsl1, landfrac, lakefrac, oceanfrac, zorl, zorlo, zorll, zorli, garea, frac_ice, & cd, cd_wat, cd_lnd, cd_ice, cdq, cdq_wat, cdq_lnd, cdq_ice, rb, rb_wat, rb_lnd, rb_ice, stress, stress_wat, stress_lnd, & stress_ice, ffmm, ffmm_wat, ffmm_lnd, ffmm_ice, ffhh, ffhh_wat, ffhh_lnd, ffhh_ice, uustar, uustar_wat, uustar_lnd, & uustar_ice, fm10, fm10_wat, fm10_lnd, fm10_ice, fh2, fh2_wat, fh2_lnd, fh2_ice, tsurf_wat, tsurf_lnd, tsurf_ice, & @@ -39,7 +39,7 @@ subroutine GFS_surface_composites_post_run ( integer, intent(in) :: im, kice, km, lkm, iopt_lake, iopt_lake_clm logical, intent(in) :: cplflx, frac_grid, cplwav2atm, frac_ice, cpl_fire - logical, intent(in) :: lheatstrg + logical, intent(in) :: lheatstrg, use_cdeps_data logical, dimension(:), intent(in) :: flag_cice, dry, icy logical, dimension(:), intent(in) :: wet integer, dimension(:), intent(in) :: islmsk, use_lake_model @@ -51,7 +51,7 @@ subroutine GFS_surface_composites_post_run ( snowd_lnd, snowd_ice, tprcp_wat, tprcp_lnd, tprcp_ice, evap_wat, evap_lnd, evap_ice, hflx_wat, hflx_lnd, & hflx_ice, qss_wat, qss_lnd, qss_ice, tsfc_wat, zorlo, zorll, zorli, garea - real(kind=kind_phys), dimension(:), intent(in), optional :: hflx_fire, evap_fire + real(kind=kind_phys), dimension(:), intent(in), optional :: hflx_fire, evap_fire, mask_dat real(kind=kind_phys), dimension(:), intent(inout) :: zorl, cd, cdq, rb, stress, ffmm, ffhh, uustar, fm10, & fh2, cmm, chh, gflx, ep1d, weasd, snowd, tprcp, evap, hflx, qss, tsfc, tsfco, tsfcl, tisfc @@ -240,7 +240,14 @@ subroutine GFS_surface_composites_post_run ( if (icy(i)) then !tisfc(i) = tisfc(i) ! over lake or ocean ice when uncoupled elseif (wet(i)) then - tisfc(i) = tsfc_wat(i) ! over lake or ocean when uncoupled + !don't overwrite surface skin temperature over ice when using CDEPS inline over the mask + if (use_cdeps_data) then + if (mask_dat(i) <= 0.0) then + tisfc(i) = tsfc_wat(i) ! over lake or ocean when uncoupled + endif + else + tisfc(i) = tsfc_wat(i) ! over lake or ocean when uncoupled + endif else tisfc(i) = tsfcl(i) ! over land endif @@ -256,9 +263,18 @@ subroutine GFS_surface_composites_post_run ( ! tisfc(i) = tsfc(i) ! endif ! endif + if (.not. icy(i)) then - hice(i) = zero - cice(i) = zero + !don't overwrite sea ice thickness/fraction when using CDEPS inline over the mask + if (use_cdeps_data) then + if (mask_dat(i) <= 0.0) then + hice(i) = zero + cice(i) = zero + endif + else + hice(i) = zero + cice(i) = zero + endif endif enddo @@ -339,7 +355,14 @@ subroutine composite_wet tsfco(i) = tsfc_wat(i) ! over lake (and ocean when uncoupled) tsfc(i) = tsfco(i) tsfcl(i) = tsfc(i) - tisfc(i) = tsfc(i) + !don't overwrite surface skin temperature over ice when using CDEPS inline over the mask + if (use_cdeps_data) then + if (mask_dat(i) <= 0.0) then + tisfc(i) = tsfc(i) + endif + else + tisfc(i) = tsfc(i) + endif cmm(i) = cmm_wat(i) chh(i) = chh_wat(i) gflx(i) = gflx_wat(i) @@ -349,8 +372,16 @@ subroutine composite_wet evap(i) = evap_wat(i) hflx(i) = hflx_wat(i) qss(i) = qss_wat(i) - hice(i) = zero - cice(i) = zero + !don't overwrite sea ice thickness/fraction when using CDEPS inline over the mask + if (use_cdeps_data) then + if (mask_dat(i) <= 0.0) then + hice(i) = zero + cice(i) = zero + endif + else + hice(i) = zero + cice(i) = zero + endif end subroutine composite_wet subroutine composite_icy(is_clm) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_post.meta b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_post.meta index 6b601caa1..1d0005e18 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_post.meta +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_post.meta @@ -144,6 +144,22 @@ dimensions = (horizontal_loop_extent) type = logical intent = in +[use_cdeps_data] + standard_name = do_cdeps_inline + long_name = flag for using data provided by CDEPS inline (default false) + units = flag + dimensions = () + type = logical + intent = in +[mask_dat] + standard_name = land_sea_mask_from_data + long_name = landmask + units = flag + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = True [wind] standard_name = wind_speed_at_lowest_model_layer long_name = wind speed at lowest model level diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_pre.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_pre.F90 index 4279e63c3..b6a52d16d 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_pre.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_pre.F90 @@ -21,7 +21,8 @@ module GFS_surface_composites_pre !! \htmlinclude GFS_surface_composites_pre_run.html !! subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, iopt_lake, iopt_lake_clm, & - flag_cice, cplflx, cplice, cplwav2atm, lsm, lsm_ruc, & + flag_cice, cplflx, cplice, cplwav2atm, lsm, lsm_ruc, use_cdeps_data, mask_dat, & + tsfco_dat, tice_dat, hice_dat, fice_dat, & landfrac, lakefrac, lakedepth, oceanfrac, frland, & dry, icy, lake, use_lake_model, wet, hice, cice, zorlo, zorll, zorli, & snowd, snowd_lnd, snowd_ice, tprcp, tprcp_wat, tgrs1, & @@ -35,15 +36,17 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, iopt_lake, iopt_l ! Interface variables integer, intent(in ) :: im, lkm, kdt, lsm, lsm_ruc, iopt_lake, iopt_lake_clm - logical, intent(in ) :: cplflx, cplice, cplwav2atm, frac_grid + logical, intent(in ) :: cplflx, cplice, cplwav2atm, frac_grid, use_cdeps_data logical, dimension(:), intent(inout) :: flag_cice logical, dimension(:), intent(inout) :: dry, icy, lake, wet integer, dimension(:), intent(in ) :: use_lake_model real(kind=kind_phys), dimension(:), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac + real(kind=kind_phys), dimension(:), intent(in ), optional :: mask_dat + real(kind=kind_phys), dimension(:), intent(in ), optional :: fice_dat, hice_dat, tsfco_dat, tice_dat real(kind=kind_phys), dimension(:), intent(inout) :: cice, hice real(kind=kind_phys), dimension(:), intent( out) :: frland - real(kind=kind_phys), dimension(:), intent(in ) :: snowd, tprcp, uustar, weasd, qss, tisfc - + real(kind=kind_phys), dimension(:), intent(in ) :: snowd, tprcp, uustar, weasd, qss + real(kind=kind_phys), dimension(:), intent(inout) :: tisfc real(kind=kind_phys), dimension(:), intent(inout) :: tsfc, tsfco, tsfcl real(kind=kind_phys), dimension(:), intent(inout) :: tgrs1 real(kind=kind_phys), dimension(:), intent(inout) :: snowd_lnd, snowd_ice, tprcp_wat, & @@ -72,6 +75,19 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, iopt_lake, iopt_l ! Initialize CCPP error handling variables errmsg = '' errflg = 0 + + if (use_cdeps_data) then + do i=1,im + if (mask_dat(i) > 0.0) then + tisfc(i) = tice_dat(i) + tsurf_ice(i) = tice_dat(i) + hice(i) = hice_dat(i) + cice(i) = fice_dat(i) + tsfc_wat(i) = tsfco_dat(i) + tsurf_wat(i) = tsfco_dat(i) + endif + enddo + endif do i=1,im if(use_lake_model(i) > 0) then @@ -188,6 +204,20 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, iopt_lake, iopt_l write(0,1013) i,tsfco(i),slmsk(i),cice(i),islmsk(i),islmsk_cice(i),oceanfrac(i),cplice,icy(i),cplflx tsfco(i) = tgrs1(i) endif + !Set icy conditions according to CDEPS GL (Oceanfrac > 0) + if (use_cdeps_data) then + if (mask_dat(i) > 0.0) then + if (cice(i) >= min_lakeice) then + icy(i) = .true. + islmsk(i) = 2 + else + icy(i) = .false. + cice(i) = zero + hice(i) = zero + islmsk(i) = 0 + endif + endif + endif else ! Not ocean and not land is_clm = lkm>0 .and. iopt_lake==iopt_lake_clm .and. use_lake_model(i)>0 if (cice(i) >= min_lakeice) then @@ -224,9 +254,16 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, iopt_lake, iopt_l if (wet(i)) then ! Water uustar_wat(i) = uustar(i) + if (use_cdeps_data) then + if (mask_dat(i) <= 0.0) then + tsfc_wat(i) = tsfco(i) + tsurf_wat(i) = tsfco(i) + endif + else tsfc_wat(i) = tsfco(i) - tsurf_wat(i) = tsfco(i) - zorlo(i) = max(1.0e-5, min(one, zorlo(i))) + tsurf_wat(i) = tsfco(i) + endif + zorlo(i) = max(1.0e-5, min(one, zorlo(i))) ! DH* else zorlo(i) = huge @@ -251,10 +288,10 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, iopt_lake, iopt_l if(lsm /= lsm_ruc .and. .not.is_clm) then weasd_ice(i) = weasd(i) endif - tsurf_ice(i) = tisfc(i) - ep1d_ice(i) = zero - gflx_ice(i) = zero - zorli(i) = max(1.0e-5, min(one, zorli(i))) + tsurf_ice(i) = tisfc(i) + ep1d_ice(i) = zero + gflx_ice(i) = zero + zorli(i) = max(1.0e-5, min(one, zorli(i))) ! DH* else zorli(i) = huge diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_pre.meta b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_pre.meta index d4824f3b0..935b0778f 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_pre.meta +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_surface_composites_pre.meta @@ -70,6 +70,58 @@ dimensions = () type = integer intent = in +[use_cdeps_data] + standard_name = do_cdeps_inline + long_name = flag for using data provided by CDEPS inline (default false) + units = flag + dimensions = () + type = logical + intent = in +[mask_dat] + standard_name = land_sea_mask_from_data + long_name = landmask + units = flag + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = True +[tsfco_dat] + standard_name = sea_surface_temperature_from_data + long_name = sfc temperature + units = K + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = True +[tice_dat] + standard_name = surface_skin_temperature_over_ice_from_data + long_name = surface skin temperature over ice + units = K + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = True +[hice_dat] + standard_name = sea_ice_thickness_from_data + long_name = sea-ice thickness + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = True +[fice_dat] + standard_name = sea_ice_area_fraction_of_sea_area_fraction_from_data + long_name = sea-ice concentration [0,1] + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = True [landfrac] standard_name = land_area_fraction long_name = fraction of horizontal grid area occupied by land @@ -366,7 +418,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = in + intent = inout [tsurf_wat] standard_name = surface_skin_temperature_after_iteration_over_water long_name = surface skin temperature after iteration over water diff --git a/physics/SFC_Models/Lake/CLM/clm_lake.f90 b/physics/SFC_Models/Lake/CLM/clm_lake.f90 index f02ed9249..2feb6ad38 100644 --- a/physics/SFC_Models/Lake/CLM/clm_lake.f90 +++ b/physics/SFC_Models/Lake/CLM/clm_lake.f90 @@ -268,6 +268,7 @@ SUBROUTINE clm_lake_run( & ! Configuration and initialization: iopt_lake, iopt_lake_clm, min_lakeice, lakedepth_default, use_lakedepth, & dtp, use_lake_model, clm_lake_initialized, frac_grid, frac_ice, lkm, & + use_cdeps_data, mask_dat, & ! Atmospheric model state inputs: tg3, pgr, zlvl, gt0, prsi, phii, qvcurr, gu0, gv0, xlat_d, xlon_d, & @@ -318,7 +319,9 @@ SUBROUTINE clm_lake_run( & LOGICAL, INTENT(IN) :: use_lakedepth INTEGER, DIMENSION(:), INTENT(IN) :: use_lake_model REAL(KIND_PHYS), INTENT(INOUT) :: clm_lake_initialized(:) - LOGICAL, INTENT(IN) :: frac_grid, frac_ice + LOGICAL, INTENT(IN) :: frac_grid, frac_ice, use_cdeps_data + REAL(KIND_PHYS), INTENT(IN), OPTIONAL :: mask_dat(:) + ! ! Atmospheric model state inputs: @@ -712,16 +715,27 @@ SUBROUTINE clm_lake_run( & hflx_wat(i) = eflx_sh_tot(c)/(rho0*cpair) ! kinematic_surface_upward_sensible_heat_flux_over_water gflx_wat(I) = eflx_gnet(c) ![W/m/m] upward_heat_flux_in_soil_over_water ep1d_water(i) = eflx_lh_tot(c) ![W/m/m] surface_upward_potential_latent_heat_flux_over_water - tsurf_water(I) = t_grnd(c) ![K] surface skin temperature after iteration over water - tsurf_ice(i) = t_grnd(c) ! surface_skin_temperature_after_iteration_over_ice - tsfc_wat(i) = t_grnd(c) ![K] surface skin temperature over water - tisfc(i) = t_grnd(c) + !don't overwrite surface skin temperature over ice, sea ice area fraction, skin temperature over water when using CDEPS inline over the mask + if (use_cdeps_data) then + if (mask_dat(i) <= 0.0) then + tsfc_wat(i) = t_grnd(c) ![K] surface skin temperature over water + tisfc(i) = t_grnd(c) + fice(i) = lake_icefrac3d(i,1) ! sea_ice_area_fraction_of_sea_area_fraction + tsurf_water(I) = t_grnd(c) ![K] surface skin temperature after iteration over water + tsurf_ice(i) = t_grnd(c) ! surface_skin_temperature_after_iteration_over_ice + endif + else + tsfc_wat(i) = t_grnd(c) ![K] surface skin temperature over water + tisfc(i) = t_grnd(c) + fice(i) = lake_icefrac3d(i,1) ! sea_ice_area_fraction_of_sea_area_fraction + tsurf_water(I) = t_grnd(c) ![K] surface skin temperature after iteration over water + tsurf_ice(i) = t_grnd(c) ! surface_skin_temperature_after_iteration_over_ice + endif tsfc(i) = t_grnd(c) lake_t2m(I) = t_ref2m(c) ![K] temperature_at_2m_from_clm_lake lake_q2m(I) = q_ref2m(c) ! [frac] specific_humidity_at_2m_from_clm_lake albedo(i) = ( 0.6 * lake_icefrac3d(i,1) ) + & ! mid_day_surface_albedo_over_lake ( (1.0-lake_icefrac3d(i,1)) * 0.08) - fice(i) = lake_icefrac3d(i,1) ! sea_ice_area_fraction_of_sea_area_fraction !uustar_water(i) = ustar_out(c) ! surface_friction_velocity_over_water zorlw(i) = z0mg(c) ! surface_roughness_length_over_water @@ -757,8 +771,16 @@ SUBROUTINE clm_lake_run( & ! uustar_ice(i) = uustar_water(i) ! surface_friction_velocity_over_ice endif - tsurf_ice(i) = t_grnd(c) ! surface_skin_temperature_after_iteration_over_ice - tisfc(i) = t_grnd(c) ! surface_skin_temperature_over_ice + !don't overwrite surface skin temperature over ice when using CDEPS inline over the mask + if (use_cdeps_data) then + if (mask_dat(i) <= 0.0) then + tisfc(i) = t_grnd(c) + tsurf_ice(i) = t_grnd(c) ! surface_skin_temperature_after_iteration_over_ice + endif + else + tisfc(i) = t_grnd(c) + tsurf_ice(i) = t_grnd(c) ! surface_skin_temperature_after_iteration_over_ice + endif tsfc(i) = t_grnd(c) ! surface_skin_temperature_over_ice weasdi(i) = h2osno(c) ! water_equivalent_accumulated_snow_depth_over_ice snodi(i) = snowdp(c)*1.e3 ! surface_snow_thickness_water_equivalent_over_ice @@ -777,12 +799,25 @@ SUBROUTINE clm_lake_run( & zorli(i) = z0mg(c) ! surface_roughness_length_over_ice ! Assume that, if a layer has ice, the entire layer thickness is ice. - hice(I) = 0 ! sea_ice_thickness - do k=1,nlevlake - if(lake_icefrac3d(i,k)>0) then - hice(i) = hice(i) + dz_lake(c,k) + !don't overwrite sea ice thickness when using CDEPS inline over the mask + if (use_cdeps_data) then + if (mask_dat(i) <= 0.0) then + hice(I) = 0 ! sea_ice_thickness + do k=1,nlevlake + if(lake_icefrac3d(i,k)>0) then + hice(i) = hice(i) + dz_lake(c,k) + endif + end do endif - end do + else + hice(I) = 0 ! sea_ice_thickness + do k=1,nlevlake + if(lake_icefrac3d(i,k)>0) then + hice(i) = hice(i) + dz_lake(c,k) + endif + end do + endif + else ! Not an ice point ! On non-icy lake points, set variables relevant to ! lake ice to reasonable defaults. Let LSM fill in @@ -792,17 +827,40 @@ SUBROUTINE clm_lake_run( & snodi(i) = 0 weasd(i) = 0 snowd(i) = 0 - tisfc(i) = t_grnd(c) - tsurf_ice(i) = tisfc(i) + !don't overwrite surface skin temperature over ice when using CDEPS inline over the mask + if (use_cdeps_data) then + if (mask_dat(i) <= 0.0) then + tisfc(i) = t_grnd(c) + tsurf_ice(i) = tisfc(i) + endif + else + tisfc(i) = t_grnd(c) + tsurf_ice(i) = tisfc(i) + endif tsfc(i) = t_grnd(c) - hice(i) = 0 - fice(i) = 0 + !don't overwrite sea ice thickness when using CDEPS inline over the mask + if (use_cdeps_data) then + if (mask_dat(i) <= 0.0) then + hice(i) = 0 + fice(i) = 0 + endif + else + hice(i) = 0 + fice(i) = 0 + endif endif ice_point if(snl2d(i)<0) then ! If there is snow, ice surface temperature should be snow temperature. lake_t_snow(i) = t_grnd(c) ! surface_skin_temperature_over_ice - tisfc(i) = lake_t_snow(i) ! temperature_of_snow_on_lake + !don't overwrite surface skin temperature over ice when using CDEPS inline over the mask + if (use_cdeps_data) then + if (mask_dat(i) <= 0.0) then + tisfc(i) = lake_t_snow(i) ! temperature_of_snow_on_lake + endif + else + tisfc(i) = lake_t_snow(i) ! temperature_of_snow_on_lake + endif snow_points = snow_points+1 else lake_t_snow(i) = -9999 diff --git a/physics/SFC_Models/Lake/CLM/clm_lake.meta b/physics/SFC_Models/Lake/CLM/clm_lake.meta index 7b3bc0a49..f2f9fb96d 100644 --- a/physics/SFC_Models/Lake/CLM/clm_lake.meta +++ b/physics/SFC_Models/Lake/CLM/clm_lake.meta @@ -101,6 +101,22 @@ dimensions = () type = logical intent = in +[use_cdeps_data] + standard_name = do_cdeps_inline + long_name = flag for using data provided by CDEPS inline (default false) + units = flag + dimensions = () + type = logical + intent = in +[mask_dat] + standard_name = land_sea_mask_from_data + long_name = landmask + units = flag + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = True [dtp] standard_name = timestep_for_physics long_name = physics timestep diff --git a/physics/SFC_Models/Land/RUC/lsm_ruc.F90 b/physics/SFC_Models/Land/RUC/lsm_ruc.F90 index 71264e7db..70fba9534 100644 --- a/physics/SFC_Models/Land/RUC/lsm_ruc.F90 +++ b/physics/SFC_Models/Land/RUC/lsm_ruc.F90 @@ -329,7 +329,7 @@ end subroutine lsm_ruc_finalize subroutine lsm_ruc_run & ! inputs & ( iter, me, master, delt, kdt, im, nlev, lsm_ruc, lsm, & & imp_physics, imp_physics_gfdl, imp_physics_thompson, & - & imp_physics_nssl, do_mynnsfclay, & + & imp_physics_nssl, do_mynnsfclay, use_cdeps_data, mask_dat, & & exticeden, lsoil_ruc, lsoil, mosaic_lu, mosaic_soil, & & isncond_opt, isncovr_opt, nlcat, nscat, & & rdlai, xlat_d, xlon_d, & @@ -409,6 +409,7 @@ subroutine lsm_ruc_run & ! inputs logical, dimension(:), intent(in) :: flag_cice logical, intent(in) :: frac_grid logical, intent(in) :: do_mynnsfclay + logical, intent(in) :: use_cdeps_data logical, intent(in) :: exticeden logical, intent(in) :: rdlai @@ -422,6 +423,7 @@ subroutine lsm_ruc_run & ! inputs real (kind_phys), dimension(:), intent(in) :: zs real (kind_phys), dimension(:), intent(in) :: srflag + real (kind_phys), dimension(:), intent(in), optional :: mask_dat real (kind_phys), dimension(:), intent(inout) :: & & laixy, tsnow_lnd, sfcqv_lnd, sfcqc_lnd, sfcqc_ice, sfcqv_ice,& & tsnow_ice @@ -1618,7 +1620,14 @@ subroutine lsm_ruc_run & ! inputs 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) + !don't overwrite surface skin temperature over ice when using CDEPS inline over the mask + if (use_cdeps_data) then + if (mask_dat(i) <= 0.0) then + tskin_ice(i) = tsurf_ice(i) + endif + else + tskin_ice(i) = tsurf_ice(i) + endif endif ! flag_guess endif ! flag enddo ! i diff --git a/physics/SFC_Models/Land/RUC/lsm_ruc.meta b/physics/SFC_Models/Land/RUC/lsm_ruc.meta index bc4d358e3..e40cecc63 100644 --- a/physics/SFC_Models/Land/RUC/lsm_ruc.meta +++ b/physics/SFC_Models/Land/RUC/lsm_ruc.meta @@ -635,6 +635,22 @@ dimensions = () type = logical intent = in +[use_cdeps_data] + standard_name = do_cdeps_inline + long_name = flag for using data provided by CDEPS inline (default false) + units = flag + dimensions = () + type = logical + intent = in +[mask_dat] + standard_name = land_sea_mask_from_data + long_name = landmask + units = flag + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = True [exticeden] standard_name = do_external_surface_frozen_precipitation_density long_name = flag for calculating frozen precip ice density outside of the LSM