From 8c60ce57e11d8561b221cab6bff8bb80d1ceb71d Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 17 Mar 2021 16:25:23 -0600 Subject: [PATCH 1/5] Remove/replace interstitial zorl composites with persistent versions --- physics/GFS_cloud_diagnostics.meta | 2 +- physics/GFS_debug.F90 | 5 +- physics/GFS_rrtmgp_thompsonmp_pre.meta | 2 +- physics/GFS_surface_composites.F90 | 57 +++++----------- physics/GFS_surface_composites.meta | 90 -------------------------- physics/gfdl_sfc_layer.meta | 6 +- physics/h2o_def.meta | 2 +- physics/module_MYJSFC_wrapper.meta | 6 +- physics/module_MYNNSFC_wrapper.meta | 6 +- physics/module_sf_exchcoef.f90 | 0 physics/sfc_diff.meta | 6 +- physics/sfc_drv.meta | 2 +- physics/sfc_drv_ruc.meta | 4 +- physics/sfc_noah_wrfv4.meta | 2 +- physics/sfc_noahmp_drv.meta | 2 +- 15 files changed, 37 insertions(+), 155 deletions(-) mode change 100755 => 100644 physics/module_sf_exchcoef.f90 diff --git a/physics/GFS_cloud_diagnostics.meta b/physics/GFS_cloud_diagnostics.meta index 840b3b21a..e87b19f75 100644 --- a/physics/GFS_cloud_diagnostics.meta +++ b/physics/GFS_cloud_diagnostics.meta @@ -160,4 +160,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 index 3e8e987c7..2a8318f46 100644 --- a/physics/GFS_debug.F90 +++ b/physics/GFS_debug.F90 @@ -436,6 +436,8 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorl' , Sfcprop%zorl) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlo' , Sfcprop%zorlo) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorll' , Sfcprop%zorll) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorli' , Sfcprop%zorli) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlw' , Sfcprop%zorlw) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%fice' , Sfcprop%fice) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%hprime' , Sfcprop%hprime) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%sncovr' , Sfcprop%sncovr) @@ -1254,9 +1256,6 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%xlai1d ', Interstitial%xlai1d ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%xmu ', Interstitial%xmu ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%z01d ', Interstitial%z01d ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zorl_ice ', Interstitial%zorl_ice ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zorl_land ', Interstitial%zorl_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zorl_ocean ', Interstitial%zorl_ocean ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zt1d ', Interstitial%zt1d ) ! UGWP call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tau_mtb ', Interstitial%tau_mtb ) diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.meta b/physics/GFS_rrtmgp_thompsonmp_pre.meta index 90ec59760..82cec72f7 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.meta +++ b/physics/GFS_rrtmgp_thompsonmp_pre.meta @@ -439,4 +439,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90 index d0f1829df..fe0fc4097 100644 --- a/physics/GFS_surface_composites.F90 +++ b/physics/GFS_surface_composites.F90 @@ -25,9 +25,8 @@ end subroutine GFS_surface_composites_pre_finalize !! \htmlinclude GFS_surface_composites_pre_run.html !! subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx, cplwav2atm, & - landfrac, lakefrac, lakedepth, oceanfrac, frland, & - dry, icy, lake, ocean, wet, hice, cice, zorl, zorlo, zorll, zorli, zorl_wat, & - zorl_lnd, zorl_ice, snowd, snowd_wat, snowd_lnd, snowd_ice, tprcp, tprcp_wat, & + landfrac, lakefrac, lakedepth, oceanfrac, frland, dry, icy, lake, ocean, wet, & + hice, cice, snowd, snowd_wat, snowd_lnd, snowd_ice, tprcp, tprcp_wat, & tprcp_lnd, tprcp_ice, uustar, uustar_wat, uustar_lnd, uustar_ice, & weasd, weasd_wat, weasd_lnd, weasd_ice, ep1d_ice, tsfc, tsfco, tsfcl, tsfc_wat, & tsfc_lnd, tsfc_ice, tisfc, tice, tsurf, tsurf_wat, tsurf_lnd, tsurf_ice, & @@ -45,12 +44,12 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx real(kind=kind_phys), dimension(im), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac real(kind=kind_phys), dimension(im), intent(inout) :: cice, hice real(kind=kind_phys), dimension(im), intent( out) :: frland - real(kind=kind_phys), dimension(im), intent(in ) :: zorl, snowd, tprcp, uustar, weasd, qss, hflx + real(kind=kind_phys), dimension(im), intent(in ) :: snowd, tprcp, uustar, weasd, qss, hflx - real(kind=kind_phys), dimension(im), intent(inout) :: zorlo, zorll, zorli, tsfc, tsfco, tsfcl, tisfc, tsurf + real(kind=kind_phys), dimension(im), intent(inout) :: tsfc, tsfco, tsfcl, tisfc, tsurf real(kind=kind_phys), dimension(im), intent(inout) :: snowd_wat, snowd_lnd, snowd_ice, tprcp_wat, & - tprcp_lnd, tprcp_ice, zorl_wat, zorl_lnd, zorl_ice, tsfc_wat, tsfc_lnd, tsfc_ice, tsurf_wat, & - tsurf_lnd, tsurf_ice, uustar_wat, uustar_lnd, uustar_ice, weasd_wat, weasd_lnd, weasd_ice, & + tprcp_lnd, tprcp_ice, tsfc_wat, tsfc_lnd, tsfc_ice, tsurf_wat,tsurf_lnd, tsurf_ice, & + uustar_wat, uustar_lnd, uustar_ice, weasd_wat, weasd_lnd, weasd_ice, & qss_wat, qss_lnd, qss_ice, hflx_wat, hflx_lnd, hflx_ice, ep1d_ice, gflx_ice real(kind=kind_phys), dimension(im), intent( out) :: tice real(kind=kind_phys), intent(in ) :: tgice @@ -169,26 +168,12 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx enddo endif -! if (.not. cplflx .or. .not. frac_grid) then -! if (cplwav2atm) then -! do i=1,im -! zorll(i) = zorl(i) -! enddo -! else -! do i=1,im -! zorll(i) = zorl(i) -! zorlo(i) = zorl(i) -! enddo -! endif -! endif - do i=1,im tprcp_wat(i) = tprcp(i) tprcp_lnd(i) = tprcp(i) tprcp_ice(i) = tprcp(i) if (wet(i)) then ! Water uustar_wat(i) = uustar(i) - zorl_wat(i) = zorlo(i) tsfc_wat(i) = tsfco(i) tsurf_wat(i) = tsfco(i) ! weasd_wat(i) = weasd(i) @@ -202,7 +187,6 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx if (dry(i)) then ! Land uustar_lnd(i) = uustar(i) weasd_lnd(i) = weasd(i) - zorl_lnd(i) = zorll(i) tsfc_lnd(i) = tsfcl(i) tsurf_lnd(i) = tsfcl(i) snowd_lnd(i) = snowd(i) @@ -213,7 +197,6 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx if (icy(i)) then ! Ice uustar_ice(i) = uustar(i) weasd_ice(i) = weasd(i) - zorl_ice(i) = zorli(i) tsfc_ice(i) = tisfc(i) tsurf_ice(i) = tisfc(i) snowd_ice(i) = snowd(i) @@ -345,14 +328,12 @@ end subroutine GFS_surface_composites_post_init subroutine GFS_surface_composites_post_finalize() end subroutine GFS_surface_composites_post_finalize -#if 0 !> \section arg_table_GFS_surface_composites_post_run Argument Table !! \htmlinclude GFS_surface_composites_post_run.html !! -#endif subroutine GFS_surface_composites_post_run ( & im, kice, km, cplflx, cplwav2atm, frac_grid, flag_cice, islmsk, dry, wet, icy, landfrac, lakefrac, oceanfrac, & - zorl, zorlo, zorll, zorli, zorl_wat, zorl_lnd, zorl_ice, & + zorl, zorlo, zorll, zorli, & 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, tsurf_wat, tsurf_lnd, tsurf_ice, & @@ -368,7 +349,7 @@ subroutine GFS_surface_composites_post_run ( logical, dimension(im), intent(in) :: flag_cice, dry, wet, icy integer, dimension(im), intent(in) :: islmsk real(kind=kind_phys), dimension(im), intent(in) :: landfrac, lakefrac, oceanfrac, & - zorl_wat, zorl_lnd, zorl_ice, cd_wat, cd_lnd, cd_ice, cdq_wat, cdq_lnd, cdq_ice, rb_wat, rb_lnd, rb_ice, stress_wat, & + cd_wat, cd_lnd, cd_ice, cdq_wat, cdq_lnd, cdq_ice, rb_wat, rb_lnd, rb_ice, stress_wat, & stress_lnd, stress_ice, ffmm_wat, ffmm_lnd, ffmm_ice, ffhh_wat, ffhh_lnd, ffhh_ice, uustar_wat, uustar_lnd, uustar_ice, & fm10_wat, fm10_lnd, fm10_ice, fh2_wat, fh2_lnd, fh2_ice, tsurf_wat, tsurf_lnd, tsurf_ice, cmm_wat, cmm_lnd, cmm_ice, & chh_wat, chh_lnd, chh_ice, gflx_wat, gflx_lnd, gflx_ice, ep1d_wat, ep1d_lnd, ep1d_ice, weasd_wat, weasd_lnd, weasd_ice, & @@ -408,7 +389,7 @@ subroutine GFS_surface_composites_post_run ( txi = cice(i) * wfrac ! txi = ice fraction wrt whole cell txo = max(zero, wfrac-txi) ! txo = open water fraction - zorl(i) = txl*zorl_lnd(i) + txi*zorl_ice(i) + txo*zorl_wat(i) + zorl(i) = txl*zorll(i) + txi*zorli(i) + txo*zorlo(i) cd(i) = txl*cd_lnd(i) + txi*cd_ice(i) + txo*cd_wat(i) cdq(i) = txl*cdq_lnd(i) + txi*cdq_ice(i) + txo*cdq_wat(i) rb(i) = txl*rb_lnd(i) + txi*rb_ice(i) + txo*rb_wat(i) @@ -443,10 +424,6 @@ subroutine GFS_surface_composites_post_run ( endif tsfc(i) = txl*tsfc_lnd(i) + txi*tice(i) + txo*tsfc_wat(i) - zorll(i) = zorl_lnd(i) - zorli(i) = zorl_ice(i) - zorlo(i) = zorl_wat(i) - if (dry(i)) then tsfcl(i) = tsfc_lnd(i) ! over land elseif (wet(i)) then @@ -496,7 +473,7 @@ subroutine GFS_surface_composites_post_run ( do i=1,im if (islmsk(i) == 1) then - zorl(i) = zorl_lnd(i) + zorl(i) = zorll(i) cd(i) = cd_lnd(i) cdq(i) = cdq_lnd(i) rb(i) = rb_lnd(i) @@ -524,7 +501,7 @@ subroutine GFS_surface_composites_post_run ( hice(i) = zero cice(i) = zero elseif (islmsk(i) == 0) then - zorl(i) = zorl_wat(i) + zorl(i) = zorlo(i) cd(i) = cd_wat(i) cdq(i) = cdq_wat(i) rb(i) = rb_wat(i) @@ -552,7 +529,7 @@ subroutine GFS_surface_composites_post_run ( hice(i) = zero cice(i) = zero else ! islmsk(i) == 2 - zorl(i) = zorl_ice(i) + zorl(i) = zorli(i) cd(i) = cd_ice(i) cdq(i) = cdq_ice(i) rb(i) = rb_ice(i) @@ -578,7 +555,7 @@ subroutine GFS_surface_composites_post_run ( tisfc(i) = tice(i) if (.not. flag_cice(i)) then ! tisfc(i) = tice(i) ! over lake ice (and sea ice when uncoupled) - zorl(i) = cice(i) * zorl_ice(i) + (one - cice(i)) * zorl_wat(i) + zorl(i) = cice(i) * zorli(i) + (one - cice(i)) * zorlo(i) tsfc(i) = tsfc_ice(i) ! over lake (and ocean when uncoupled) elseif (wet(i)) then if (cice(i) >= min_seaice) then ! this was already done for lake ice in sfc_sice @@ -590,7 +567,7 @@ subroutine GFS_surface_composites_post_run ( stress(i) = txi * stress_ice(i) + txo * stress_wat(i) qss(i) = txi * qss_ice(i) + txo * qss_wat(i) ep1d(i) = txi * ep1d_ice(i) + txo * ep1d_wat(i) - zorl(i) = txi * zorl_ice(i) + txo * zorl_wat(i) + zorl(i) = txi * zorli(i) + txo * zorlo(i) else evap(i) = evap_wat(i) hflx(i) = hflx_wat(i) @@ -598,7 +575,7 @@ subroutine GFS_surface_composites_post_run ( stress(i) = stress_wat(i) qss(i) = qss_wat(i) ep1d(i) = ep1d_wat(i) - zorl(i) = zorl_wat(i) + zorl(i) = zorlo(i) endif endif if (wet(i)) then @@ -612,10 +589,6 @@ subroutine GFS_surface_composites_post_run ( end do endif - zorll(i) = zorl_lnd(i) - zorlo(i) = zorl_wat(i) - zorli(i) = zorl_ice(i) - enddo endif ! if (frac_grid) diff --git a/physics/GFS_surface_composites.meta b/physics/GFS_surface_composites.meta index 21b308357..192056047 100644 --- a/physics/GFS_surface_composites.meta +++ b/physics/GFS_surface_composites.meta @@ -158,69 +158,6 @@ kind = kind_phys intent = inout optional = F -[zorl] - standard_name = surface_roughness_length - long_name = surface roughness length - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F -[zorlo] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorll] - standard_name = surface_roughness_length_over_land - long_name = surface roughness length over land - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorli] - standard_name = surface_roughness_length_over_ice - long_name = surface roughness length over ice - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorl_lnd] - standard_name = surface_roughness_length_over_land_interstitial - long_name = surface roughness length over land (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorl_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 [snowd] standard_name = surface_snow_thickness_water_equivalent long_name = water equivalent snow depth @@ -980,33 +917,6 @@ kind = kind_phys intent = inout optional = F -[zorl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F -[zorl_lnd] - standard_name = surface_roughness_length_over_land_interstitial - long_name = surface roughness length over land (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F -[zorl_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 = in - optional = F [cd] standard_name = surface_drag_coefficient_for_momentum_in_air long_name = surface exchange coeff for momentum diff --git a/physics/gfdl_sfc_layer.meta b/physics/gfdl_sfc_layer.meta index 77024c813..995769839 100644 --- a/physics/gfdl_sfc_layer.meta +++ b/physics/gfdl_sfc_layer.meta @@ -534,7 +534,7 @@ intent = inout optional = F [znt_ocn] - standard_name = surface_roughness_length_over_ocean_interstitial + standard_name = surface_roughness_length_over_ocean long_name = surface roughness length over ocean (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -543,7 +543,7 @@ intent = inout optional = F [znt_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -552,7 +552,7 @@ intent = inout optional = F [znt_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/h2o_def.meta b/physics/h2o_def.meta index 21f3b903f..94ec7be2c 100644 --- a/physics/h2o_def.meta +++ b/physics/h2o_def.meta @@ -26,4 +26,4 @@ dimensions = (vertical_dimension_of_h2o_forcing_data) type = real kind = kind_phys - active = (flag_for_stratospheric_water_vapor_physics) \ No newline at end of file + active = (flag_for_stratospheric_water_vapor_physics) diff --git a/physics/module_MYJSFC_wrapper.meta b/physics/module_MYJSFC_wrapper.meta index e1e6ab2b9..d9d6fb8a0 100644 --- a/physics/module_MYJSFC_wrapper.meta +++ b/physics/module_MYJSFC_wrapper.meta @@ -472,7 +472,7 @@ intent = inout optional = F [z0rl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial + standard_name = surface_roughness_length_over_ocean long_name = surface roughness length over ocean (interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -481,7 +481,7 @@ intent = inout optional = F [z0rl_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -490,7 +490,7 @@ intent = inout optional = F [z0rl_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/module_MYNNSFC_wrapper.meta b/physics/module_MYNNSFC_wrapper.meta index e3e870ff2..5ffbb8db1 100644 --- a/physics/module_MYNNSFC_wrapper.meta +++ b/physics/module_MYNNSFC_wrapper.meta @@ -411,7 +411,7 @@ intent = in optional = F [znt_ocn] - standard_name = surface_roughness_length_over_ocean_interstitial + standard_name = surface_roughness_length_over_ocean long_name = surface roughness length over ocean (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -420,7 +420,7 @@ intent = inout optional = F [znt_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -429,7 +429,7 @@ intent = inout optional = F [znt_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/module_sf_exchcoef.f90 b/physics/module_sf_exchcoef.f90 old mode 100755 new mode 100644 diff --git a/physics/sfc_diff.meta b/physics/sfc_diff.meta index 9f03b3bf1..23b47d414 100644 --- a/physics/sfc_diff.meta +++ b/physics/sfc_diff.meta @@ -332,7 +332,7 @@ intent = in optional = F [z0rl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial + standard_name = surface_roughness_length_over_ocean long_name = surface roughness length over ocean (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -341,7 +341,7 @@ intent = inout optional = F [z0rl_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -350,7 +350,7 @@ intent = inout optional = F [z0rl_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_drv.meta b/physics/sfc_drv.meta index ff1766774..9f2e51df3 100644 --- a/physics/sfc_drv.meta +++ b/physics/sfc_drv.meta @@ -566,7 +566,7 @@ intent = inout optional = F [zorl] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_drv_ruc.meta b/physics/sfc_drv_ruc.meta index 229bce1fc..d66d8849e 100644 --- a/physics/sfc_drv_ruc.meta +++ b/physics/sfc_drv_ruc.meta @@ -1013,7 +1013,7 @@ intent = inout optional = F [z0rl_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -1220,7 +1220,7 @@ intent = inout optional = F [z0rl_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_noah_wrfv4.meta b/physics/sfc_noah_wrfv4.meta index 1895c56bf..a7e07059e 100644 --- a/physics/sfc_noah_wrfv4.meta +++ b/physics/sfc_noah_wrfv4.meta @@ -402,7 +402,7 @@ intent = inout optional = F [z0k] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = m dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_noahmp_drv.meta b/physics/sfc_noahmp_drv.meta index 32fc2f15a..1fd655c64 100644 --- a/physics/sfc_noahmp_drv.meta +++ b/physics/sfc_noahmp_drv.meta @@ -704,7 +704,7 @@ intent = inout optional = F [zorl] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) From c8b70e9f3d1550df60a4b1af7abc626709d4f130 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 2 Apr 2021 09:07:13 -0600 Subject: [PATCH 2/5] physics/GFS_debug.*: add roughness length variables to GFS_checkland --- physics/GFS_debug.F90 | 14 ++++++++++++- physics/GFS_debug.meta | 45 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 index 2a8318f46..905e8977a 100644 --- a/physics/GFS_debug.F90 +++ b/physics/GFS_debug.F90 @@ -1450,7 +1450,8 @@ end subroutine GFS_checkland_finalize subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_guess, & flag_init, flag_restart, frac_grid, isot, ivegsrc, stype, vtype, slope, & soiltyp, vegtype, slopetyp, dry, icy, wet, lake, ocean, & - oceanfrac, landfrac, lakefrac, slmsk, islmsk, errmsg, errflg ) + oceanfrac, landfrac, lakefrac, slmsk, islmsk, & + zorl, zorlo, zorll, zorli, fice, errmsg, errflg ) use machine, only: kind_phys @@ -1486,6 +1487,11 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ real(kind_phys), intent(in ) :: lakefrac(im) real(kind_phys), intent(in ) :: slmsk(im) integer, intent(in ) :: islmsk(im) + real(kind_phys), intent(in ) :: zorl(im) + real(kind_phys), intent(in ) :: zorlo(im) + real(kind_phys), intent(in ) :: zorll(im) + real(kind_phys), intent(in ) :: zorli(im) + real(kind_phys), intent(in ) :: fice(im) character(len=*), intent( out) :: errmsg integer, intent( out) :: errflg @@ -1508,6 +1514,7 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ write(0,'(a,i5)') 'YYY: ivegsrc :', ivegsrc do i=1,im + !if (fice(i)>0.999) then !if (vegtype(i)==15) then write(0,'(a,2i5,1x,1x,l)') 'YYY: i, blk, flag_iter(i) :', i, blkno, flag_iter(i) write(0,'(a,2i5,1x,1x,l)') 'YYY: i, blk, flag_guess(i) :', i, blkno, flag_guess(i) @@ -1525,8 +1532,13 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, oceanfrac(i) :', i, blkno, oceanfrac(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, landfrac(i) :', i, blkno, landfrac(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, lakefrac(i) :', i, blkno, lakefrac(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, fice(i) :', i, blkno, fice(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, slmsk(i) :', i, blkno, slmsk(i) write(0,'(a,2i5,1x,i5)') 'YYY: i, blk, islmsk(i) :', i, blkno, islmsk(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorl(i) :', i, blkno, zorl(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorlo(i) :', i, blkno, zorlo(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorli(i) :', i, blkno, zorli(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorll(i) :', i, blkno, zorll(i) !end if end do diff --git a/physics/GFS_debug.meta b/physics/GFS_debug.meta index 3b044904b..a931c7cac 100644 --- a/physics/GFS_debug.meta +++ b/physics/GFS_debug.meta @@ -646,6 +646,51 @@ type = integer intent = in optional = F +[zorl] + standard_name = surface_roughness_length + long_name = surface roughness length + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[zorlo] + standard_name = surface_roughness_length_over_ocean + long_name = surface roughness length over ocean + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[zorll] + standard_name = surface_roughness_length_over_land + long_name = surface roughness length over land + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[zorli] + standard_name = surface_roughness_length_over_ice + long_name = surface roughness length over ice + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[fice] + standard_name = sea_ice_concentration + long_name = ice fraction over open water + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP From f4cf86264ee65f2ee599664d324b7419d2f99471 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 2 Apr 2021 09:08:14 -0600 Subject: [PATCH 3/5] Cleanup formatting and unused variables in physics/GFS_suite_interstitial.* --- physics/GFS_suite_interstitial.F90 | 11 ++++------- physics/GFS_suite_interstitial.meta | 8 -------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/physics/GFS_suite_interstitial.F90 b/physics/GFS_suite_interstitial.F90 index c465f74e7..4d2cf5552 100644 --- a/physics/GFS_suite_interstitial.F90 +++ b/physics/GFS_suite_interstitial.F90 @@ -156,12 +156,11 @@ end subroutine GFS_suite_interstitial_2_init subroutine GFS_suite_interstitial_2_finalize() end subroutine GFS_suite_interstitial_2_finalize -#if 0 + !> \section arg_table_GFS_suite_interstitial_2_run Argument Table !! \htmlinclude GFS_suite_interstitial_2_run.html !! -#endif - subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplflx, flag_cice, shal_cnv, old_monin, mstrat, & + subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, flag_cice, shal_cnv, old_monin, mstrat, & do_shoc, frac_grid, imfshalcnv, dtf, xcosz, adjsfcdsw, adjsfcdlw, cice, pgr, ulwsfc_cice, lwhd, htrsw, htrlw, xmu, ctei_rm, & work1, work2, prsi, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, cp, hvap, prslk, suntim, adjsfculw, adjsfculw_lnd, & adjsfculw_ice, adjsfculw_wat, dlwsfc, ulwsfc, psmean, dt3dt_lw, dt3dt_sw, dt3dt_pbl, dt3dt_dcnv, dt3dt_scnv, dt3dt_mp, & @@ -171,7 +170,7 @@ subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplfl ! interface variables integer, intent(in ) :: im, levs, imfshalcnv - logical, intent(in ) :: lssav, ldiag3d, lsidea, cplflx, shal_cnv + logical, intent(in ) :: lssav, ldiag3d, lsidea, shal_cnv logical, intent(in ) :: old_monin, mstrat, do_shoc, frac_grid, use_LW_jacobian real(kind=kind_phys), intent(in ) :: dtf, cp, hvap @@ -476,11 +475,9 @@ end subroutine GFS_suite_interstitial_3_init subroutine GFS_suite_interstitial_3_finalize() end subroutine GFS_suite_interstitial_3_finalize -#if 0 !> \section arg_table_GFS_suite_interstitial_3_run Argument Table !! \htmlinclude GFS_suite_interstitial_3_run.html !! -#endif subroutine GFS_suite_interstitial_3_run (im, levs, nn, cscnv, & satmedmf, trans_trac, do_shoc, ltaerosol, ntrac, ntcw, & ntiw, ntclamt, ntrw, ntsw, ntrnc, ntsnc, ntgl, ntgnc, & @@ -514,7 +511,7 @@ subroutine GFS_suite_interstitial_3_run (im, levs, nn, cscnv, & real(kind=kind_phys), dimension(im, levs), intent(inout) :: rhc, save_qc ! save_qi is not allocated for Zhao-Carr MP real(kind=kind_phys), dimension(:, :), intent(inout) :: save_qi - real(kind=kind_phys), dimension(:, :), intent(inout) :: save_tcp ! ONLY ALLOCATE FOR THOMPSON! TODO + real(kind=kind_phys), dimension(:, :), intent(inout) :: save_tcp real(kind=kind_phys), dimension(im, levs, nn), intent(inout) :: clw character(len=*), intent(out) :: errmsg diff --git a/physics/GFS_suite_interstitial.meta b/physics/GFS_suite_interstitial.meta index fdf1716f1..c5f71c7bf 100644 --- a/physics/GFS_suite_interstitial.meta +++ b/physics/GFS_suite_interstitial.meta @@ -330,14 +330,6 @@ type = logical intent = in optional = F -[cplflx] - standard_name = flag_for_flux_coupling - long_name = flag controlling cplflx collection (default off) - units = flag - dimensions = () - type = logical - intent = in - optional = F [flag_cice] standard_name = flag_for_cice long_name = flag for cice From edc9194156b7aa3aff101e70d9194a1313095d99 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 2 Apr 2021 09:09:37 -0600 Subject: [PATCH 4/5] Temporary commit: conditionally set zorlx variables to huge in GFS_surface_composites_pre_run --- physics/GFS_surface_composites.F90 | 24 +++++++++++++++++++++--- physics/GFS_surface_composites.meta | 27 +++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90 index fe0fc4097..75c25cccb 100644 --- a/physics/GFS_surface_composites.F90 +++ b/physics/GFS_surface_composites.F90 @@ -13,6 +13,8 @@ module GFS_surface_composites_pre real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys, epsln = 1.0e-10_kind_phys + real(kind=kind_phys), parameter :: huge = 9.9692099683868690E36 ! NetCDF float FillValue + contains subroutine GFS_surface_composites_pre_init () @@ -32,7 +34,9 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx tsfc_lnd, tsfc_ice, tisfc, tice, tsurf, tsurf_wat, tsurf_lnd, tsurf_ice, & gflx_ice, tgice, islmsk, islmsk_cice, slmsk, semis_rad, semis_wat, semis_lnd, semis_ice, & qss, qss_wat, qss_lnd, qss_ice, hflx, hflx_wat, hflx_lnd, hflx_ice, & - min_lakeice, min_seaice, errmsg, errflg) + min_lakeice, min_seaice, & + zorlo, zorll, zorli, & + errmsg, errflg) implicit none @@ -57,7 +61,9 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx real(kind=kind_phys), dimension(im), intent(in ) :: semis_rad real(kind=kind_phys), dimension(im), intent(inout) :: semis_wat, semis_lnd, semis_ice, slmsk real(kind=kind_phys), intent(in ) :: min_lakeice, min_seaice - + ! + real(kind=kind_phys), dimension(im), intent(inout) :: zorlo, zorll, zorli + ! real(kind=kind_phys), parameter :: timin = 173.0_kind_phys ! minimum temperature allowed for snow/ice ! CCPP error handling @@ -183,6 +189,10 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx semis_wat(i) = 0.984_kind_phys qss_wat(i) = qss(i) hflx_wat(i) = hflx(i) + ! DH* + else + zorlo(i) = huge + ! *DH endif if (dry(i)) then ! Land uustar_lnd(i) = uustar(i) @@ -193,6 +203,10 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx semis_lnd(i) = semis_rad(i) qss_lnd(i) = qss(i) hflx_lnd(i) = hflx(i) + ! DH* + else + zorll(i) = huge + ! *DH end if if (icy(i)) then ! Ice uustar_ice(i) = uustar(i) @@ -205,7 +219,11 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx semis_ice(i) = 0.95_kind_phys qss_ice(i) = qss(i) hflx_ice(i) = hflx(i) - endif + ! DH* + else + zorli(i) = huge + ! *DH + end if if (nint(slmsk(i)) /= 1) slmsk(i) = islmsk(i) enddo diff --git a/physics/GFS_surface_composites.meta b/physics/GFS_surface_composites.meta index 192056047..04e2e23d0 100644 --- a/physics/GFS_surface_composites.meta +++ b/physics/GFS_surface_composites.meta @@ -588,6 +588,33 @@ kind = kind_phys intent = in optional = F +[zorlo] + standard_name = surface_roughness_length_over_ocean + long_name = surface roughness length over ocean + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F +[zorll] + standard_name = surface_roughness_length_over_land + long_name = surface roughness length over land + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F +[zorli] + standard_name = surface_roughness_length_over_ice + long_name = surface roughness length over ice + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP From 3f953f570255c216d3e713c7003a5df26492ed6a Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 5 Apr 2021 15:04:03 -0600 Subject: [PATCH 5/5] physics/GFS_debug.F90: rename Sfcprop%zorlw to Sfcprop%zorlwav, remove no longer existant Interstitial%dtdtc --- physics/GFS_debug.F90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 index 3a6825213..7570f62b6 100644 --- a/physics/GFS_debug.F90 +++ b/physics/GFS_debug.F90 @@ -437,7 +437,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlo' , Sfcprop%zorlo) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorll' , Sfcprop%zorll) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorli' , Sfcprop%zorli) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlw' , Sfcprop%zorlw) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlwav' , Sfcprop%zorlwav) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%fice' , Sfcprop%fice) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%hprime' , Sfcprop%hprime) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%sncovr' , Sfcprop%sncovr) @@ -1074,7 +1074,6 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dqsfc1 ', Interstitial%dqsfc1 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%drain ', Interstitial%drain ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtdt ', Interstitial%dtdt ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtdtc ', Interstitial%dtdtc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtsfc1 ', Interstitial%dtsfc1 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtzm ', Interstitial%dtzm ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dt_mf ', Interstitial%dt_mf )