Skip to content

Commit

Permalink
Remove local/interstitial variables for seaice coupling, add suite de…
Browse files Browse the repository at this point in the history
…finition file for S2S benchmark runs
  • Loading branch information
climbfuji committed Mar 25, 2020
1 parent 6f4cb56 commit 3c14aeb
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 86 deletions.
2 changes: 1 addition & 1 deletion ccpp/physics
92 changes: 92 additions & 0 deletions ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="FV3_GFS_v15p2_coupled" lib="ccppphys" ver="3">
<!-- <init></init> -->
<group name="fast_physics">
<subcycle loop="1">
<scheme>fv_sat_adj</scheme>
</subcycle>
</group>
<group name="time_vary">
<subcycle loop="1">
<scheme>GFS_time_vary_pre</scheme>
<scheme>GFS_rrtmg_setup</scheme>
<scheme>GFS_rad_time_vary</scheme>
<scheme>GFS_phys_time_vary</scheme>
</subcycle>
</group>
<group name="radiation">
<subcycle loop="1">
<scheme>GFS_suite_interstitial_rad_reset</scheme>
<scheme>GFS_rrtmg_pre</scheme>
<scheme>rrtmg_sw_pre</scheme>
<scheme>rrtmg_sw</scheme>
<scheme>rrtmg_sw_post</scheme>
<scheme>rrtmg_lw_pre</scheme>
<scheme>rrtmg_lw</scheme>
<scheme>rrtmg_lw_post</scheme>
<scheme>GFS_rrtmg_post</scheme>
</subcycle>
</group>
<group name="physics">
<subcycle loop="1">
<scheme>GFS_suite_interstitial_phys_reset</scheme>
<scheme>GFS_suite_stateout_reset</scheme>
<scheme>get_prs_fv3</scheme>
<scheme>GFS_suite_interstitial_1</scheme>
<scheme>GFS_surface_generic_pre</scheme>
<scheme>GFS_surface_composites_pre</scheme>
<scheme>dcyc2t3</scheme>
<scheme>GFS_surface_composites_inter</scheme>
<scheme>GFS_suite_interstitial_2</scheme>
</subcycle>
<!-- Surface iteration loop -->
<subcycle loop="2">
<scheme>sfc_diff</scheme>
<scheme>GFS_surface_loop_control_part1</scheme>
<scheme>sfc_ocean</scheme>
<scheme>lsm_noah</scheme>
<scheme>sfc_cice</scheme>
<scheme>sfc_sice</scheme>
<scheme>GFS_surface_loop_control_part2</scheme>
</subcycle>
<!-- End of surface iteration loop -->
<subcycle loop="1">
<scheme>GFS_surface_composites_post</scheme>
<scheme>sfc_diag</scheme>
<scheme>sfc_diag_post</scheme>
<scheme>GFS_surface_generic_post</scheme>
<scheme>GFS_PBL_generic_pre</scheme>
<scheme>hedmf</scheme>
<scheme>GFS_PBL_generic_post</scheme>
<scheme>GFS_GWD_generic_pre</scheme>
<scheme>cires_ugwp</scheme>
<scheme>cires_ugwp_post</scheme>
<scheme>GFS_GWD_generic_post</scheme>
<scheme>rayleigh_damp</scheme>
<scheme>GFS_suite_stateout_update</scheme>
<scheme>ozphys_2015</scheme>
<scheme>h2ophys</scheme>
<scheme>GFS_DCNV_generic_pre</scheme>
<scheme>get_phi_fv3</scheme>
<scheme>GFS_suite_interstitial_3</scheme>
<scheme>samfdeepcnv</scheme>
<scheme>GFS_DCNV_generic_post</scheme>
<scheme>GFS_SCNV_generic_pre</scheme>
<scheme>samfshalcnv</scheme>
<scheme>GFS_SCNV_generic_post</scheme>
<scheme>GFS_suite_interstitial_4</scheme>
<scheme>cnvc90</scheme>
<scheme>GFS_MP_generic_pre</scheme>
<scheme>gfdl_cloud_microphys</scheme>
<scheme>GFS_MP_generic_post</scheme>
<scheme>maximum_hourly_diagnostics</scheme>
</subcycle>
</group>
<group name="stochastics">
<subcycle loop="1">
<scheme>GFS_stochastics</scheme>
</subcycle>
</group>
<!-- <finalize></finalize> -->
</suite>
45 changes: 15 additions & 30 deletions gfsphysics/GFS_layer/GFS_physics_driver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 ##
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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))
Expand Down
20 changes: 0 additions & 20 deletions gfsphysics/GFS_layer/GFS_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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() !<
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 )
Expand Down
35 changes: 0 additions & 35 deletions gfsphysics/GFS_layer/GFS_typedefs.meta
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 3c14aeb

Please sign in to comment.