From bcda8764021e590bde291030cf241c836a30ab98 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 25 Mar 2020 13:17:53 -0600 Subject: [PATCH] Remove local/interstitial variables for seaice coupling, add suite definition file for S2S benchmark runs --- ccpp/physics | 2 +- ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml | 92 +++++++++++++++++++++ gfsphysics/GFS_layer/GFS_physics_driver.F90 | 45 ++++------ gfsphysics/GFS_layer/GFS_typedefs.F90 | 20 ----- gfsphysics/GFS_layer/GFS_typedefs.meta | 35 -------- 5 files changed, 108 insertions(+), 86 deletions(-) create mode 100644 ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml diff --git a/ccpp/physics b/ccpp/physics index 091d47524..5c134c17d 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 091d47524aedd7e62d5e26afc4da85e7cdd45a1c +Subproject commit 5c134c17d88f9ed008e0e4c0bbab392b2c1f4d13 diff --git a/ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml b/ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml new file mode 100644 index 000000000..71f3665f9 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml @@ -0,0 +1,92 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_ocean + lsm_noah + sfc_cice + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/gfsphysics/GFS_layer/GFS_physics_driver.F90 b/gfsphysics/GFS_layer/GFS_physics_driver.F90 index 65d793dcc..98edf87d1 100644 --- a/gfsphysics/GFS_layer/GFS_physics_driver.F90 +++ b/gfsphysics/GFS_layer/GFS_physics_driver.F90 @@ -544,9 +544,6 @@ subroutine GFS_physics_driver & doms, psautco_l, prautco_l, ocalnirbm_cpl, ocalnirdf_cpl, & ocalvisbm_cpl, ocalvisdf_cpl, dtzm, temrain1, t2mmp, q2mp, & psaur_l, praur_l, & -!--- coupling inputs for physics - dtsfc_cice, dqsfc_cice, dusfc_cice, dvsfc_cice, & -! dtsfc_cice, dqsfc_cice, dusfc_cice, dvsfc_cice, ulwsfc_cice, & !--- for CS-convection wcbmax @@ -678,19 +675,14 @@ subroutine GFS_physics_driver & real :: pshltr,QCQ,rh02 real(kind=kind_phys), allocatable, dimension(:,:) :: den - ! Initialize local variables. Some of these are mainly for debugging - ! purposes, because the corresponding variables Interstitial(nt)%... - ! are reset to zero every time. For some, however, it is required - ! because they may be used uninitialized otherwise! - snowmt = 0. - gamq = 0. - gamt = 0. - gflx = 0. - hflx = 0. - dusfc_cice = 0. - dvsfc_cice = 0. - dtsfc_cice = 0. - dqsfc_cice = 0. + !! Initialize local variables (for debugging purposes only, + !! because the corresponding variables Interstitial(nt)%... + !! are reset to zero every time). + !snowmt = 0. + !gamq = 0. + !gamt = 0. + !gflx = 0. + !hflx = 0. !! Strictly speaking, this is not required. But when !! hunting for bit-for-bit differences, doing the same as @@ -1113,14 +1105,6 @@ subroutine GFS_physics_driver & do i=1,im islmsk_cice(i) = nint(Coupling%slimskin_cpl(i)) flag_cice(i) = (islmsk_cice(i) == 4) - - if (flag_cice(i)) then -! ulwsfc_cice(i) = Coupling%ulwsfcin_cpl(i) - dusfc_cice(i) = Coupling%dusfcin_cpl(i) - dvsfc_cice(i) = Coupling%dvsfcin_cpl(i) - dtsfc_cice(i) = Coupling%dtsfcin_cpl(i) - dqsfc_cice(i) = Coupling%dqsfcin_cpl(i) - endif enddo endif !*## CCPP ## @@ -1955,8 +1939,9 @@ subroutine GFS_physics_driver & (im, Statein%tgrs(:,1), & Statein%qgrs(:,1,1), cd3(:,2), cdq3(:,2), & Statein%prsl(:,1), wind, & - flag_cice, flag_iter, dqsfc_cice, dtsfc_cice, & - dusfc_cice, dvsfc_cice, & + flag_cice, flag_iter, & + Coupling%dqsfcin_cpl, Coupling%dtsfcin_cpl, & + Coupling%dusfcin_cpl, Coupling%dvsfcin_cpl, & ! --- outputs: qss3(:,2), cmm3(:,2), chh3(:,2), evap3(:,2), hflx3(:,2), & stress3(:,2)) @@ -2858,10 +2843,10 @@ subroutine GFS_physics_driver & do i=1,im if (Sfcprop%oceanfrac(i) > zero) then ! Ocean only, NO LAKES if (Sfcprop%fice(i) > one - epsln) then ! no open water, thus use results from CICE - Coupling%dusfci_cpl(i) = dusfc_cice(i) - Coupling%dvsfci_cpl(i) = dvsfc_cice(i) - Coupling%dtsfci_cpl(i) = dtsfc_cice(i) - Coupling%dqsfci_cpl(i) = dqsfc_cice(i) + Coupling%dusfci_cpl(i) = Coupling%dusfcin_cpl(i) + Coupling%dvsfci_cpl(i) = Coupling%dvsfcin_cpl(i) + Coupling%dtsfci_cpl(i) = Coupling%dtsfcin_cpl(i) + Coupling%dqsfci_cpl(i) = Coupling%dqsfcin_cpl(i) elseif (icy(i) .or. dry(i)) then ! use stress_ocean from sfc_diff for opw component at mixed point tem1 = max(Diag%q1(i), 1.e-8) rho = Statein%prsl(i,1) / (con_rd*Diag%t1(i)*(one+con_fvirt*tem1)) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 6ffc71d1b..00bae3897 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -1853,11 +1853,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tsurf_land(:) => null() !< real (kind=kind_phys), pointer :: tsurf_ocean(:) => null() !< real (kind=kind_phys), pointer :: ud_mf(:,:) => null() !< - real (kind=kind_phys), pointer :: ulwsfc_cice(:) => null() !< - real (kind=kind_phys), pointer :: dusfc_cice(:) => null() !< - real (kind=kind_phys), pointer :: dvsfc_cice(:) => null() !< - real (kind=kind_phys), pointer :: dqsfc_cice(:) => null() !< - real (kind=kind_phys), pointer :: dtsfc_cice(:) => null() !< real (kind=kind_phys), pointer :: uustar_ice(:) => null() !< real (kind=kind_phys), pointer :: uustar_land(:) => null() !< real (kind=kind_phys), pointer :: uustar_ocean(:) => null() !< @@ -5915,11 +5910,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%tsurf_land (IM)) allocate (Interstitial%tsurf_ocean (IM)) allocate (Interstitial%ud_mf (IM,Model%levs)) - allocate (Interstitial%ulwsfc_cice (IM)) - allocate (Interstitial%dusfc_cice (IM)) - allocate (Interstitial%dvsfc_cice (IM)) - allocate (Interstitial%dtsfc_cice (IM)) - allocate (Interstitial%dqsfc_cice (IM)) allocate (Interstitial%uustar_ice (IM)) allocate (Interstitial%uustar_land (IM)) allocate (Interstitial%uustar_ocean (IM)) @@ -6442,11 +6432,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%tsurf_land = huge Interstitial%tsurf_ocean = huge Interstitial%ud_mf = clear_val - Interstitial%ulwsfc_cice = clear_val - Interstitial%dusfc_cice = clear_val - Interstitial%dvsfc_cice = clear_val - Interstitial%dtsfc_cice = clear_val - Interstitial%dqsfc_cice = clear_val Interstitial%uustar_ice = huge Interstitial%uustar_land = huge Interstitial%uustar_ocean = huge @@ -6787,11 +6772,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%tsurf_land ) = ', sum(Interstitial%tsurf_land ) write (0,*) 'sum(Interstitial%tsurf_ocean ) = ', sum(Interstitial%tsurf_ocean ) write (0,*) 'sum(Interstitial%ud_mf ) = ', sum(Interstitial%ud_mf ) - write (0,*) 'sum(Interstitial%ulwsfc_cice ) = ', sum(Interstitial%ulwsfc_cice ) - write (0,*) 'sum(Interstitial%dusfc_cice ) = ', sum(Interstitial%dusfc_cice ) - write (0,*) 'sum(Interstitial%dvsfc_cice ) = ', sum(Interstitial%dvsfc_cice ) - write (0,*) 'sum(Interstitial%dtsfc_cice ) = ', sum(Interstitial%dtsfc_cice ) - write (0,*) 'sum(Interstitial%dqsfc_cice ) = ', sum(Interstitial%dqsfc_cice ) write (0,*) 'sum(Interstitial%uustar_ice ) = ', sum(Interstitial%uustar_ice ) write (0,*) 'sum(Interstitial%uustar_land ) = ', sum(Interstitial%uustar_land ) write (0,*) 'sum(Interstitial%uustar_ocean ) = ', sum(Interstitial%uustar_ocean ) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index adb24a3fc..bc2344250 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -6579,34 +6579,6 @@ dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) type = real kind = kind_phys -[dusfc_cice] - standard_name = surface_x_momentum_flux_for_coupling_interstitial - long_name = sfc x momentum flux for coupling interstitial - units = Pa - dimensions = (horizontal_dimension) - type = real - kind = kind_phys -[dvsfc_cice] - standard_name = surface_y_momentum_flux_for_coupling_interstitial - long_name = sfc y momentum flux for coupling interstitial - units = Pa - dimensions = (horizontal_dimension) - type = real - kind = kind_phys -[dtsfc_cice] - standard_name = surface_upward_sensible_heat_flux_for_coupling_interstitial - long_name = sfc sensible heat flux for coupling interstitial - units = W m-2 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys -[dqsfc_cice] - standard_name = surface_upward_latent_heat_flux_for_coupling_interstitial - long_name= surface latent heat flux for coupling interstitial - units = W m-2 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [elvmax] standard_name = maximum_subgrid_orography long_name = maximum of subgrid orography @@ -8038,13 +8010,6 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys -[ulwsfc_cice] - standard_name = surface_upwelling_longwave_flux_for_coupling_interstitial - long_name = surface upwelling longwave flux for coupling_interstitial - units = W m-2 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [uustar_ocean] standard_name = surface_friction_velocity_over_ocean long_name = surface friction velocity over ocean