From df0e6eaa66dd083431ab21651128f806f679dd58 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Thu, 19 Dec 2019 20:31:37 +0000 Subject: [PATCH 01/30] add qdiag3d support --- gfsphysics/GFS_layer/GFS_diagnostics.F90 | 142 ++++++++++++++++++++++- gfsphysics/GFS_layer/GFS_typedefs.F90 | 20 +++- gfsphysics/GFS_layer/GFS_typedefs.meta | 27 +++++ 3 files changed, 181 insertions(+), 8 deletions(-) diff --git a/gfsphysics/GFS_layer/GFS_diagnostics.F90 b/gfsphysics/GFS_layer/GFS_diagnostics.F90 index 95f7f51e7..68204a466 100644 --- a/gfsphysics/GFS_layer/GFS_diagnostics.F90 +++ b/gfsphysics/GFS_layer/GFS_diagnostics.F90 @@ -2231,6 +2231,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ! if(mpp_pe()==mpp_root_pe())print *,'in gfdl_diag_register,af shum_wts,idx=',idx !--- three-dimensional variables that need to be handled special when writing + if_ldiag3d: if(Model%ldiag3d) then idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dt3dt_lw' @@ -2308,11 +2309,22 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,7) enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_rdamp' + ExtDiag(idx)%desc = 'temperature change due to Rayleigh damping' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,8) + enddo + idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_pbl' ExtDiag(idx)%desc = 'u momentum change due to PBL' - ExtDiag(idx)%unit = 'XXX' + ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks @@ -2334,7 +2346,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_orogwd' ExtDiag(idx)%desc = 'u momentum change due to orographic gravity wave drag' - ExtDiag(idx)%unit = 'XXX' + ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks @@ -2398,6 +2410,132 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_rdamp' + ExtDiag(idx)%desc = 'u momentum change due to Rayleigh damping' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,5) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_damp' + ExtDiag(idx)%desc = 'v momentum change due to Rayleigh damping' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,5) + enddo + +#ifdef CCPP + if_qdiag3d: if(Model%qdiag3d) then + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_pbl' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to PBL' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,1) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_deepcnv' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to deep conv.' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,2) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_shlwcnv' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to shal conv.' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,3) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_microphy' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to microphysics' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,4) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3pbl' + ExtDiag(idx)%desc = 'cumulative change in ozone mixing ratio due to PBL' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,5) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3prodloss' + ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to production and loss rate' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,6) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3mix' + ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to ozone mixing ratio' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,7) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3temp' + ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to temperature' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,8) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3column' + ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to overhead ozone column' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,9) + enddo + end if if_qdiag3d +#endif + end if if_ldiag3d + !rab !rab do num = 1,5+Mdl_parms%pl_coeff !rab write (xtra,'(I1)') num diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index ff1d0184e..be463696d 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -530,6 +530,7 @@ module GFS_typedefs #endif real(kind=kind_phys) :: fhzero !< hours between clearing of diagnostic buckets logical :: ldiag3d !< flag for 3d diagnostic fields + logical :: qdiag3d !< flag for 3d tracer diagnostic fields logical :: lssav !< logical flag for storing diagnostics real(kind=kind_phys) :: fhcyc !< frequency for surface data cycling (hours) integer :: thermodyn_id !< valid for GFS only for get_prs/phi @@ -2689,6 +2690,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- BEGIN NAMELIST VARIABLES real(kind=kind_phys) :: fhzero = 0.0 !< hours between clearing of diagnostic buckets logical :: ldiag3d = .false. !< flag for 3d diagnostic fields + logical :: qdiag3d = .false. !< flag for 3d tracer diagnostic fields logical :: lssav = .false. !< logical flag for storing diagnostics real(kind=kind_phys) :: fhcyc = 0. !< frequency for surface data cycling (hours) @@ -3070,7 +3072,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & NAMELIST /gfs_physics_nml/ & !--- general parameters - fhzero, ldiag3d, lssav, fhcyc, & + fhzero, ldiag3d, qdiag3d, lssav, fhcyc, & thermodyn_id, sfcpress_id, & !--- coupling parameters cplflx, cplwav, cplchm, lsidea, & @@ -3220,6 +3222,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & #endif Model%fhzero = fhzero Model%ldiag3d = ldiag3d + Model%qdiag3d = qdiag3d ! !VAY-ugwp --- set some GW-related switches ! @@ -4364,6 +4367,7 @@ subroutine control_print(Model) print *, ' fn_nml : ', trim(Model%fn_nml) print *, ' fhzero : ', Model%fhzero print *, ' ldiag3d : ', Model%ldiag3d + print *, ' qdiag3d : ', Model%qdiag3d print *, ' lssav : ', Model%lssav print *, ' fhcyc : ', Model%fhcyc print *, ' thermodyn_id : ', Model%thermodyn_id @@ -5186,10 +5190,12 @@ subroutine diag_create (Diag, IM, Model) !--- 3D diagnostics if (Model%ldiag3d) then - allocate (Diag%du3dt (IM,Model%levs,4)) - allocate (Diag%dv3dt (IM,Model%levs,4)) - allocate (Diag%dt3dt (IM,Model%levs,7)) - allocate (Diag%dq3dt (IM,Model%levs,9)) + allocate (Diag%du3dt (IM,Model%levs,5)) + allocate (Diag%dv3dt (IM,Model%levs,5)) + allocate (Diag%dt3dt (IM,Model%levs,8)) + if (Model%qdiag3d) then + allocate (Diag%dq3dt (IM,Model%levs,9)) + endif ! allocate (Diag%dq3dt (IM,Model%levs,oz_coeff+5)) !--- needed to allocate GoCart coupling fields ! allocate (Diag%upd_mf (IM,Model%levs)) @@ -5495,7 +5501,9 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%du3dt = zero Diag%dv3dt = zero Diag%dt3dt = zero -! Diag%dq3dt = zero + if (Model%qdiag3d) then + Diag%dq3dt = zero + endif ! Diag%upd_mf = zero ! Diag%dwn_mf = zero ! Diag%det_mf = zero diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index 872cb56ca..db77d8911 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -1865,6 +1865,12 @@ units = flag dimensions = () type = logical +[qdiag3d] + standard_name = flag_tracer_diagnostics_3D + long_name = flag for 3d tracer diagnostic fields + units = flag + dimensions = () + type = logical [lssav] standard_name = flag_diagnostics long_name = logical flag for storing diagnostics @@ -5373,6 +5379,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[du3dt(:,:,5)] + standard_name = cumulative_change_in_x_wind_due_to_rayleigh_damping + long_name = cumulative change in x wind due to Rayleigh damping + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [dv3dt(:,:,1)] standard_name = cumulative_change_in_y_wind_due_to_PBL long_name = cumulative change in y wind due to PBL @@ -5401,6 +5414,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[dv3dt(:,:,5)] + standard_name = cumulative_change_in_y_wind_due_to_rayleigh_damping + long_name = cumulative change in y wind due to Rayleigh damping + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [dt3dt(:,:,1)] standard_name = cumulative_change_in_temperature_due_to_longwave_radiation long_name = cumulative change in temperature due to longwave radiation @@ -5450,6 +5470,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[dt3dt(:,:,8)] + standard_name = cumulative_change_in_temperature_due_to_rayleigh_damping + long_name = cumulative change in temperature due to Rayleigh damping + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [dq3dt(:,:,1)] standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_PBL long_name = cumulative change in water vapor specific humidity due to PBL From c7ad1a3ac611fd598112c143a404ddc865cf28f7 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Fri, 27 Dec 2019 19:03:43 +0000 Subject: [PATCH 02/30] add qdiag3d support --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 32e245a44..a48681459 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 32e245a44f372f3f17517548c7604cb57443783f +Subproject commit a48681459256779bdf2a95b6fb46916afd6df158 From dc10a75f1cba239183307c0d58ad5ca68481d89a Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Fri, 3 Jan 2020 15:53:33 +0000 Subject: [PATCH 03/30] Further bug fixes to tendency accumulation --- ccpp/physics | 2 +- gfsphysics/GFS_layer/GFS_typedefs.F90 | 4 +++- gfsphysics/GFS_layer/GFS_typedefs.meta | 13 +++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ccpp/physics b/ccpp/physics index a48681459..a77488d38 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit a48681459256779bdf2a95b6fb46916afd6df158 +Subproject commit a77488d3801117720d947242196e824a2f6e409c diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index be463696d..3286e8290 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -531,6 +531,7 @@ module GFS_typedefs real(kind=kind_phys) :: fhzero !< hours between clearing of diagnostic buckets logical :: ldiag3d !< flag for 3d diagnostic fields logical :: qdiag3d !< flag for 3d tracer diagnostic fields + logical :: gwd_generic_tend!< true if GFS_GWD_generic should calculate tendencies logical :: lssav !< logical flag for storing diagnostics real(kind=kind_phys) :: fhcyc !< frequency for surface data cycling (hours) integer :: thermodyn_id !< valid for GFS only for get_prs/phi @@ -3223,6 +3224,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%fhzero = fhzero Model%ldiag3d = ldiag3d Model%qdiag3d = qdiag3d + Model%gwd_generic_tend = .false. ! !VAY-ugwp --- set some GW-related switches ! @@ -5192,7 +5194,7 @@ subroutine diag_create (Diag, IM, Model) if (Model%ldiag3d) then allocate (Diag%du3dt (IM,Model%levs,5)) allocate (Diag%dv3dt (IM,Model%levs,5)) - allocate (Diag%dt3dt (IM,Model%levs,8)) + allocate (Diag%dt3dt (IM,Model%levs,9)) if (Model%qdiag3d) then allocate (Diag%dq3dt (IM,Model%levs,9)) endif diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index db77d8911..bdcfa9d8d 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -1871,6 +1871,12 @@ units = flag dimensions = () type = logical +[gwd_generic_tend] + standard_name = true_if_GFS_GWD_generic_should_calculate_tendencies + long_name = true if GFS_GWD_generic should calculate tendencies + units = flag + dimensions = () + type = logical [lssav] standard_name = flag_diagnostics long_name = logical flag for storing diagnostics @@ -5477,6 +5483,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[dt3dt(:,:,9)] + standard_name = cumulative_change_in_temperature_due_to_convective_gravity_wave_drag + long_name = cumulative change in temperature due to convective gravity wave drag + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [dq3dt(:,:,1)] standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_PBL long_name = cumulative change in water vapor specific humidity due to PBL From 220067864e82154868a3a49cfe8221683726b187 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Mon, 6 Jan 2020 19:55:31 +0000 Subject: [PATCH 04/30] fix several bugs mentioned in code review --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index a77488d38..a227ad0d7 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit a77488d3801117720d947242196e824a2f6e409c +Subproject commit a227ad0d7e4c67e7ad6e74b770e4786f189af008 From 538a1d8b4a52a1db3c7aeb4011833afe08f9543b Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Tue, 14 Jan 2020 01:23:51 +0000 Subject: [PATCH 05/30] add a pbl_generic_tend flag to tell whether the GFS_PBL_generic module should calculate the 3D diagnostic tendencies. --- gfsphysics/GFS_layer/GFS_typedefs.F90 | 2 ++ gfsphysics/GFS_layer/GFS_typedefs.meta | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 3286e8290..520f7c8ec 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -532,6 +532,7 @@ module GFS_typedefs logical :: ldiag3d !< flag for 3d diagnostic fields logical :: qdiag3d !< flag for 3d tracer diagnostic fields logical :: gwd_generic_tend!< true if GFS_GWD_generic should calculate tendencies + logical :: pbl_generic_tend!< true if GFS_PBL_generic should calculate tendencies logical :: lssav !< logical flag for storing diagnostics real(kind=kind_phys) :: fhcyc !< frequency for surface data cycling (hours) integer :: thermodyn_id !< valid for GFS only for get_prs/phi @@ -3225,6 +3226,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ldiag3d = ldiag3d Model%qdiag3d = qdiag3d Model%gwd_generic_tend = .false. + Model%pbl_generic_tend = .false. ! !VAY-ugwp --- set some GW-related switches ! diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index bdcfa9d8d..3db26d49a 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -1877,6 +1877,12 @@ units = flag dimensions = () type = logical +[pbl_generic_tend] + standard_name = true_if_GFS_PBL_generic_should_calculate_tendencies + long_name = true if GFS_PBL_generic should calculate tendencies + units = flag + dimensions = () + type = logical [lssav] standard_name = flag_diagnostics long_name = logical flag for storing diagnostics From fbc18264850d8bce2783171d2a2d8aab9cb3d3bb Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Tue, 14 Jan 2020 01:26:42 +0000 Subject: [PATCH 06/30] Move PBL tendencies into the PBL run subroutine. --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index a227ad0d7..2850217b2 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit a227ad0d7e4c67e7ad6e74b770e4786f189af008 +Subproject commit 2850217b2efafbda2cafa8a9b01af82348ee2cda From ff725de3860765219123ccbd5f6e24e06e5da3f0 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Thu, 16 Jan 2020 00:34:08 +0000 Subject: [PATCH 07/30] add ldiag3d and qdiag3d support to physics/module_MYNNPBL_wrapper.F90 and physics/moninedmf.f --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 2850217b2..d5a527841 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 2850217b2efafbda2cafa8a9b01af82348ee2cda +Subproject commit d5a527841cfb07f0fe94f6fd2816264c39060655 From 7b299c5ed2dae77d7c55da5ccf943c9404a07819 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Thu, 16 Jan 2020 00:52:51 +0000 Subject: [PATCH 08/30] Point to sam's repo --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index d4b7cd2e0..4872527e1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,5 +8,5 @@ branch = gsd/develop [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/noaa-gsd/ccpp-physics + url = https://github.com/SamuelTrahanNOAA/ccpp-physics branch = gsd/develop From e95f8abff15cc9d8efba99dcffa6239fa027130f Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Tue, 28 Jan 2020 23:08:32 +0000 Subject: [PATCH 09/30] add model and ccpp tendency calculations --- ccpp/config/ccpp_prebuild_config.py | 8 +- ccpp/suites/suite_FV3_GSD_v0.xml | 11 ++ gfsphysics/GFS_layer/GFS_diagnostics.F90 | 132 ++++++++++++++++++ gfsphysics/GFS_layer/GFS_typedefs.F90 | 14 +- gfsphysics/GFS_layer/GFS_typedefs.meta | 168 +++++++++++++++++++++++ 5 files changed, 328 insertions(+), 5 deletions(-) diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index ea5557f0f..9ed876f49 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -114,6 +114,9 @@ 'FV3/ccpp/physics/physics/mfpblt.f', 'FV3/ccpp/physics/physics/mfpbltq.f', 'FV3/ccpp/physics/physics/mfscu.f', + 'FV3/ccpp/physics/physics/total_tend.F90', + 'FV3/ccpp/physics/physics/model_tend_pre.F90', + 'FV3/ccpp/physics/physics/model_tend_post.F90', 'FV3/ccpp/physics/physics/mfscuq.f', 'FV3/ccpp/physics/physics/noahmp_tables.f90', 'FV3/ccpp/physics/physics/num_parthds.F', @@ -184,7 +187,10 @@ 'FV3/ccpp/physics/physics/gcm_shoc.F90' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/get_prs_fv3.F90' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/gfdl_cloud_microphys.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/gfdl_fv_sat_adj.F90' : [ 'fast_physics' ], + 'FV3/ccpp/physics/physics/gfdl_fv_sat_adj.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/total_tend.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/model_tend_pre.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/model_tend_post.F90' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/gscond.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/gwdc.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/gwdps.f' : [ 'slow_physics' ], diff --git a/ccpp/suites/suite_FV3_GSD_v0.xml b/ccpp/suites/suite_FV3_GSD_v0.xml index 3f83b5dc5..1219acdd0 100644 --- a/ccpp/suites/suite_FV3_GSD_v0.xml +++ b/ccpp/suites/suite_FV3_GSD_v0.xml @@ -12,6 +12,7 @@ + model_tend_pre GFS_suite_interstitial_rad_reset GFS_rrtmg_pre rrtmg_sw_pre @@ -23,10 +24,13 @@ mynnrad_post rrtmg_lw_post GFS_rrtmg_post + model_tend_post + total_tend + model_tend_pre GFS_suite_interstitial_phys_reset GFS_suite_stateout_reset get_prs_fv3 @@ -36,9 +40,11 @@ dcyc2t3 GFS_surface_composites_inter GFS_suite_interstitial_2 + model_tend_post + model_tend_pre sfc_diff GFS_surface_loop_control_part1 sfc_nst_pre @@ -49,9 +55,11 @@ sfc_sice lsm_ruc_sfc_sice_post GFS_surface_loop_control_part2 + model_tend_post + model_tend_pre GFS_surface_composites_post dcyc2t3_post sfc_diag @@ -83,11 +91,14 @@ GFS_MP_generic_post cu_gf_driver_post maximum_hourly_diagnostics + model_tend_post + model_tend_pre GFS_stochastics + model_tend_post diff --git a/gfsphysics/GFS_layer/GFS_diagnostics.F90 b/gfsphysics/GFS_layer/GFS_diagnostics.F90 index 68204a466..72f4847c7 100644 --- a/gfsphysics/GFS_layer/GFS_diagnostics.F90 +++ b/gfsphysics/GFS_layer/GFS_diagnostics.F90 @@ -2432,8 +2432,140 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,5) enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_ccpp' + ExtDiag(idx)%desc = 'cumulative change in x wind from CCPP' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,6) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_ccpp' + ExtDiag(idx)%desc = 'cumulative change in y wind from CCPP' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,6) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_model' + ExtDiag(idx)%desc = 'cumulative change in x wind from model' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,7) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_model' + ExtDiag(idx)%desc = 'cumulative change in y wind from model' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,7) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_total' + ExtDiag(idx)%desc = 'cumulative change in x wind' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,8) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_total' + ExtDiag(idx)%desc = 'cumulative change in y wind' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,8) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_ccpp' + ExtDiag(idx)%desc = 'cumulative change in temperature from CCPP' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,10) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_model' + ExtDiag(idx)%desc = 'cumulative change in temperature from model' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,11) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_total' + ExtDiag(idx)%desc = 'cumulative change in temperature' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,12) + enddo + #ifdef CCPP if_qdiag3d: if(Model%qdiag3d) then + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_ccpp' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity from CCPP' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,10) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_model' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity from model' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,11) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_total' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,12) + enddo + idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dq3dt_pbl' diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 520f7c8ec..548e138fb 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -1464,6 +1464,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: dv3dt (:,:,:) => null() !< v momentum change due to physics real (kind=kind_phys), pointer :: dt3dt (:,:,:) => null() !< temperature change due to physics real (kind=kind_phys), pointer :: dq3dt (:,:,:) => null() !< moisture change due to physics + real (kind=kind_phys), pointer :: tend_book(:,:,:)=>null() !< CCPP tendency storage real (kind=kind_phys), pointer :: refdmax (:) => null() !< max hourly 1-km agl reflectivity real (kind=kind_phys), pointer :: refdmax263k(:) => null() !< max hourly -10C reflectivity real (kind=kind_phys), pointer :: t02max (:) => null() !< max hourly 2m T @@ -5194,12 +5195,16 @@ subroutine diag_create (Diag, IM, Model) !--- 3D diagnostics if (Model%ldiag3d) then - allocate (Diag%du3dt (IM,Model%levs,5)) - allocate (Diag%dv3dt (IM,Model%levs,5)) - allocate (Diag%dt3dt (IM,Model%levs,9)) + allocate (Diag%du3dt (IM,Model%levs,8)) + allocate (Diag%dv3dt (IM,Model%levs,8)) + allocate (Diag%dt3dt (IM,Model%levs,12)) if (Model%qdiag3d) then - allocate (Diag%dq3dt (IM,Model%levs,9)) + allocate (Diag%dq3dt (IM,Model%levs,12)) + allocate (Diag%tend_book(IM,Model%levs,12)) + else + allocate (Diag%tend_book(IM,Model%levs,9)) endif + Diag%tend_book=0 ! allocate (Diag%dq3dt (IM,Model%levs,oz_coeff+5)) !--- needed to allocate GoCart coupling fields ! allocate (Diag%upd_mf (IM,Model%levs)) @@ -5505,6 +5510,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%du3dt = zero Diag%dv3dt = zero Diag%dt3dt = zero + if (Model%qdiag3d) then Diag%dq3dt = zero endif diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index 3db26d49a..a7dc03992 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -5398,6 +5398,27 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[du3dt(:,:,6)] + standard_name = cumulative_change_in_x_wind_from_ccpp + long_name = cumulative change in x wind from CCPP + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[du3dt(:,:,7)] + standard_name = cumulative_change_in_x_wind_from_model + long_name = cumulative change in x wind from model + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[du3dt(:,:,8)] + standard_name = cumulative_change_in_x_wind + long_name = cumulative change in x wind + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [dv3dt(:,:,1)] standard_name = cumulative_change_in_y_wind_due_to_PBL long_name = cumulative change in y wind due to PBL @@ -5433,6 +5454,27 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[dv3dt(:,:,6)] + standard_name = cumulative_change_in_y_wind_from_ccpp + long_name = cumulative change in y wind from CCPP + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dv3dt(:,:,7)] + standard_name = cumulative_change_in_y_wind_from_model + long_name = cumulative change in y wind from model + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dv3dt(:,:,8)] + standard_name = cumulative_change_in_y_wind + long_name = cumulative change in y wind + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [dt3dt(:,:,1)] standard_name = cumulative_change_in_temperature_due_to_longwave_radiation long_name = cumulative change in temperature due to longwave radiation @@ -5496,6 +5538,27 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[dt3dt(:,:,10)] + standard_name = cumulative_change_in_temperature_from_ccpp + long_name = cumulative change in temperature from CCPP + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dt3dt(:,:,11)] + standard_name = cumulative_change_in_temperature_from_model + long_name = cumulative change in temperature from model + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dt3dt(:,:,12)] + standard_name = cumulative_change_in_temperature + long_name = cumulative change in temperature + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [dq3dt(:,:,1)] standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_PBL long_name = cumulative change in water vapor specific humidity due to PBL @@ -5559,6 +5622,111 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[dq3dt(:,:,10)] + standard_name = cumulative_change_in_water_vapor_specific_humidity_from_CCPP + long_name = cumulative change in water vapor specific humidity from CCPP + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dq3dt(:,:,11)] + standard_name = cumulative_change_in_water_vapor_specific_humidity_from_model + long_name = cumulative change in water vapor specific humidity from model + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dq3dt(:,:,12)] + standard_name = cumulative_change_in_water_vapor_specific_humidity + long_name = cumulative change in water vapor specific humidity + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[tend_book(:,:,1)] + standard_name = temperature_at_start_of_ccpp + long_name = temperature at start of ccpp + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[tend_book(:,:,2)] + standard_name = temperature_at_end_of_ccpp + long_name = temperature at end of ccpp + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[tend_book(:,:,3)] + standard_name = temperature_at_total_check_point + long_name = temperature when model total is calculated in ccpp + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[tend_book(:,:,4)] + standard_name = x_wind_at_start_of_ccpp + long_name = x wind at start of ccpp + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[tend_book(:,:,5)] + standard_name = x_wind_at_end_of_ccpp + long_name = x wind at end of ccpp + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[tend_book(:,:,6)] + standard_name = x_wind_at_total_check_point + long_name = x when model total is calculated in ccpp + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[tend_book(:,:,7)] + standard_name = y_wind_at_start_of_ccpp + long_name = y wind at start of ccpp + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[tend_book(:,:,8)] + standard_name = y_wind_at_end_of_ccpp + long_name = y wind at start of ccpp + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[tend_book(:,:,9)] + standard_name = y_wind_at_total_check_point + long_name = y when model total is calculated in ccpp + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[tend_book(:,:,10)] + standard_name = water_vapor_specific_humidity_at_start_of_ccpp + long_name = water vapor specific humidity at start of ccpp + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[tend_book(:,:,11)] + standard_name = water_vapor_specific_humidity_at_end_of_ccpp + long_name = water vapor specific humidity at end of ccpp + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[tend_book(:,:,12)] + standard_name = water_vapor_specific_humidity_at_total_check_point + long_name = water vapor specific humidity when model total is calculated in ccpp + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [refdmax] standard_name = maximum_reflectivity_at_1km_agl_over_maximum_hourly_time_interval long_name = maximum reflectivity at 1km agl over maximum hourly time interval From 5275fb99ccbb4b9f30927940c2020a630ea06ed4 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Tue, 28 Jan 2020 23:08:53 +0000 Subject: [PATCH 10/30] physics-level changes for tendencies --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index d5a527841..c23b8d19c 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit d5a527841cfb07f0fe94f6fd2816264c39060655 +Subproject commit c23b8d19c31b68869b15c0d0bc1367fa4e991234 From cf3d933088970d0e06df1c37a54ab2ead626bfac Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Thu, 6 Feb 2020 15:46:56 +0000 Subject: [PATCH 11/30] Correct tendency flag names, implement some more diagnostic tendencies, implement model/ccpp/total tendencies. --- ccpp/physics | 2 +- ccpp/suites/suite_FV3_GFS_v15plus.xml | 15 +++++++ ccpp/suites/suite_FV3_GSD_v0.xml | 2 + gfsphysics/GFS_layer/GFS_diagnostics.F90 | 2 +- gfsphysics/GFS_layer/GFS_typedefs.F90 | 57 +++++++++++++++++++++--- gfsphysics/GFS_layer/GFS_typedefs.meta | 38 +++++++++++++--- 6 files changed, 102 insertions(+), 14 deletions(-) diff --git a/ccpp/physics b/ccpp/physics index c23b8d19c..15f36e7b1 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit c23b8d19c31b68869b15c0d0bc1367fa4e991234 +Subproject commit 15f36e7b1b8d72c18cc82660ca6657b5b0e3c63f diff --git a/ccpp/suites/suite_FV3_GFS_v15plus.xml b/ccpp/suites/suite_FV3_GFS_v15plus.xml index 837cba69f..d025b6321 100644 --- a/ccpp/suites/suite_FV3_GFS_v15plus.xml +++ b/ccpp/suites/suite_FV3_GFS_v15plus.xml @@ -4,19 +4,24 @@ + fv_sat_adj + + model_tend_pre GFS_time_vary_pre GFS_rrtmg_setup GFS_rad_time_vary GFS_phys_time_vary + model_tend_post + model_tend_pre GFS_suite_interstitial_rad_reset GFS_rrtmg_pre rrtmg_sw_pre @@ -26,10 +31,13 @@ rrtmg_lw rrtmg_lw_post GFS_rrtmg_post + model_tend_post + model_tend_pre + total_tend GFS_suite_interstitial_phys_reset GFS_suite_stateout_reset get_prs_fv3 @@ -39,9 +47,11 @@ dcyc2t3 GFS_surface_composites_inter GFS_suite_interstitial_2 + model_tend_post + model_tend_pre sfc_diff GFS_surface_loop_control_part1 sfc_nst_pre @@ -50,9 +60,11 @@ lsm_noah sfc_sice GFS_surface_loop_control_part2 + model_tend_post + model_tend_pre GFS_surface_composites_post dcyc2t3_post sfc_diag @@ -83,11 +95,14 @@ gfdl_cloud_microphys GFS_MP_generic_post maximum_hourly_diagnostics + model_tend_post + GFS_stochastics + diff --git a/ccpp/suites/suite_FV3_GSD_v0.xml b/ccpp/suites/suite_FV3_GSD_v0.xml index 1219acdd0..349194c5e 100644 --- a/ccpp/suites/suite_FV3_GSD_v0.xml +++ b/ccpp/suites/suite_FV3_GSD_v0.xml @@ -4,10 +4,12 @@ + model_tend_pre GFS_time_vary_pre GFS_rrtmg_setup GFS_rad_time_vary GFS_phys_time_vary + model_tend_post diff --git a/gfsphysics/GFS_layer/GFS_diagnostics.F90 b/gfsphysics/GFS_layer/GFS_diagnostics.F90 index 72f4847c7..522b954af 100644 --- a/gfsphysics/GFS_layer/GFS_diagnostics.F90 +++ b/gfsphysics/GFS_layer/GFS_diagnostics.F90 @@ -2323,7 +2323,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_pbl' - ExtDiag(idx)%desc = 'u momentum change due to PBL' + ExtDiag(idx)%desc = 'u wind change due to PBL' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 548e138fb..d07ca2b5a 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -531,8 +531,10 @@ module GFS_typedefs real(kind=kind_phys) :: fhzero !< hours between clearing of diagnostic buckets logical :: ldiag3d !< flag for 3d diagnostic fields logical :: qdiag3d !< flag for 3d tracer diagnostic fields - logical :: gwd_generic_tend!< true if GFS_GWD_generic should calculate tendencies - logical :: pbl_generic_tend!< true if GFS_PBL_generic should calculate tendencies + logical :: flag_for_gwd_generic_tend!< true if GFS_GWD_generic should calculate tendencies + logical :: flag_for_pbl_generic_tend!< true if GFS_PBL_generic should calculate tendencies + logical :: flag_for_scnv_generic_tend!< true if GFS_DCNV_generic should calculate tendencies + logical :: flag_for_dcnv_generic_tend!< true if GFS_DCNV_generic should calculate tendencies logical :: lssav !< logical flag for storing diagnostics real(kind=kind_phys) :: fhcyc !< frequency for surface data cycling (hours) integer :: thermodyn_id !< valid for GFS only for get_prs/phi @@ -3226,8 +3228,51 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%fhzero = fhzero Model%ldiag3d = ldiag3d Model%qdiag3d = qdiag3d - Model%gwd_generic_tend = .false. - Model%pbl_generic_tend = .false. + Model%flag_for_gwd_generic_tend = .true. + Model%flag_for_pbl_generic_tend = .true. + Model%flag_for_scnv_generic_tend = .true. + Model%flag_for_dcnv_generic_tend = .true. + + write(0,*) 'GOT HERE (stderr)' + print *,'GOT HERE (stdout)' + + if(gwd_opt==1) then + write(0,*) 'FLAG: gwd_opt==1 so gwd not generic' + Model%flag_for_gwd_generic_tend=.false. + else + write(0,*) 'NO FLAG: gwd is generic' + endif + + if(satmedmf) then + write(0,*) 'FLAG: satmedmf so pbl not generic' + Model%flag_for_pbl_generic_tend=.false. + else if(do_mynnedmf) then + write(0,*) 'FLAG: do_mynnedmf so pbl not generic' + Model%flag_for_pbl_generic_tend=.false. + else + write(0,*) 'NO FLAG: pbl is generic' + endif + + if(imfshalcnv == Model%imfshalcnv_gf) then + write(0,*) 'FLAG: imfshalcnv_gf so scnv not generic' + Model%flag_for_scnv_generic_tend=.false. + else if(imfshalcnv == Model%imfshalcnv_samf) then + write(0,*) 'FLAG: imfshalcnv_samf so scnv not generic' + Model%flag_for_scnv_generic_tend=.false. + else + write(0,*) 'NO FLAG: scnv is generic' + endif + + if(imfdeepcnv == Model%imfdeepcnv_gf) then + write(0,*) 'FLAG: imfdeepcnv_gf so dcnv not generic' + Model%flag_for_scnv_generic_tend=.false. + else if(imfdeepcnv == Model%imfdeepcnv_samf) then + write(0,*) 'FLAG: imfdeepcnv_samf so dcnv not generic' + Model%flag_for_scnv_generic_tend=.false. + else + write(0,*) 'NO FLAG: dcnv is generic' + endif + ! !VAY-ugwp --- set some GW-related switches ! @@ -5195,8 +5240,8 @@ subroutine diag_create (Diag, IM, Model) !--- 3D diagnostics if (Model%ldiag3d) then - allocate (Diag%du3dt (IM,Model%levs,8)) - allocate (Diag%dv3dt (IM,Model%levs,8)) + allocate (Diag%du3dt (IM,Model%levs,9)) + allocate (Diag%dv3dt (IM,Model%levs,9)) allocate (Diag%dt3dt (IM,Model%levs,12)) if (Model%qdiag3d) then allocate (Diag%dq3dt (IM,Model%levs,12)) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index a7dc03992..9922e3697 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -1871,18 +1871,30 @@ units = flag dimensions = () type = logical -[gwd_generic_tend] +[flag_for_gwd_generic_tend] standard_name = true_if_GFS_GWD_generic_should_calculate_tendencies long_name = true if GFS_GWD_generic should calculate tendencies units = flag dimensions = () type = logical -[pbl_generic_tend] +[flag_for_pbl_generic_tend] standard_name = true_if_GFS_PBL_generic_should_calculate_tendencies long_name = true if GFS_PBL_generic should calculate tendencies units = flag dimensions = () type = logical +[flag_for_dcnv_generic_tend] + standard_name = true_if_GFS_DCNV_generic_should_calculate_tendencies + long_name = true if GFS_DCNV_generic should calculate tendencies + units = flag + dimensions = () + type = logical +[flag_for_scnv_generic_tend] + standard_name = true_if_GFS_SCNV_generic_should_calculate_tendencies + long_name = true if GFS_SCNV_generic should calculate tendencies + units = flag + dimensions = () + type = logical [lssav] standard_name = flag_diagnostics long_name = logical flag for storing diagnostics @@ -5399,20 +5411,27 @@ type = real kind = kind_phys [du3dt(:,:,6)] + standard_name = cumulative_change_in_x_wind_due_to_shal_convection + long_name = cumulative change in x wind due to shallow convection + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[du3dt(:,:,7)] standard_name = cumulative_change_in_x_wind_from_ccpp long_name = cumulative change in x wind from CCPP units = m s-1 dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys -[du3dt(:,:,7)] +[du3dt(:,:,8)] standard_name = cumulative_change_in_x_wind_from_model long_name = cumulative change in x wind from model units = m s-1 dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys -[du3dt(:,:,8)] +[du3dt(:,:,9)] standard_name = cumulative_change_in_x_wind long_name = cumulative change in x wind units = m s-1 @@ -5455,20 +5474,27 @@ type = real kind = kind_phys [dv3dt(:,:,6)] + standard_name = cumulative_change_in_y_wind_due_to_shal_convection + long_name = cumulative change in y wind due to shallow convection + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dv3dt(:,:,7)] standard_name = cumulative_change_in_y_wind_from_ccpp long_name = cumulative change in y wind from CCPP units = m s-1 dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys -[dv3dt(:,:,7)] +[dv3dt(:,:,8)] standard_name = cumulative_change_in_y_wind_from_model long_name = cumulative change in y wind from model units = m s-1 dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys -[dv3dt(:,:,8)] +[dv3dt(:,:,9)] standard_name = cumulative_change_in_y_wind long_name = cumulative change in y wind units = m s-1 From dd8f27e4e9253424e9677c9ee4b6a58fc507a813 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Fri, 7 Feb 2020 21:57:25 +0000 Subject: [PATCH 12/30] remove model_tend_pre&post from fast physics, add to stochastic --- ccpp/suites/suite_FV3_GFS_v15plus.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ccpp/suites/suite_FV3_GFS_v15plus.xml b/ccpp/suites/suite_FV3_GFS_v15plus.xml index d025b6321..97cfa320d 100644 --- a/ccpp/suites/suite_FV3_GFS_v15plus.xml +++ b/ccpp/suites/suite_FV3_GFS_v15plus.xml @@ -4,9 +4,7 @@ - fv_sat_adj - @@ -100,9 +98,9 @@ - + model_tend_pre GFS_stochastics - + model_tend_post From f4fecfd61b72d597ac18a58b1b9379b09e5917cb Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Thu, 13 Feb 2020 18:30:02 +0000 Subject: [PATCH 13/30] All gfs v15p2 and v16beta 3d diagnostic tendencies look reasonable; added model and cppp tendency variables --- ccpp/physics | 2 +- ccpp/suites/suite_FV3_GFS_v15p2.xml | 13 +++++++++ ccpp/suites/suite_FV3_GFS_v16beta.xml | 13 +++++++++ gfsphysics/GFS_layer/GFS_diagnostics.F90 | 35 ++++++++++++++++++++---- gfsphysics/GFS_layer/GFS_typedefs.F90 | 18 ++++++------ 5 files changed, 65 insertions(+), 16 deletions(-) diff --git a/ccpp/physics b/ccpp/physics index 47b26be3a..1a3c4d1d0 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 47b26be3abdcdc2255a6d05795978fffec727eb9 +Subproject commit 1a3c4d1d020bc9edca46a1911232156143cf3001 diff --git a/ccpp/suites/suite_FV3_GFS_v15p2.xml b/ccpp/suites/suite_FV3_GFS_v15p2.xml index b4907bb1b..68d1d8c91 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2.xml @@ -9,14 +9,17 @@ + model_tend_pre GFS_time_vary_pre GFS_rrtmg_setup GFS_rad_time_vary GFS_phys_time_vary + model_tend_post + model_tend_pre GFS_suite_interstitial_rad_reset GFS_rrtmg_pre rrtmg_sw_pre @@ -26,10 +29,13 @@ rrtmg_lw rrtmg_lw_post GFS_rrtmg_post + model_tend_post + model_tend_pre + total_tend GFS_suite_interstitial_phys_reset GFS_suite_stateout_reset get_prs_fv3 @@ -39,9 +45,11 @@ dcyc2t3 GFS_surface_composites_inter GFS_suite_interstitial_2 + model_tend_post + model_tend_pre sfc_diff GFS_surface_loop_control_part1 sfc_nst_pre @@ -50,9 +58,11 @@ lsm_noah sfc_sice GFS_surface_loop_control_part2 + model_tend_pre + model_tend_pre GFS_surface_composites_post dcyc2t3_post sfc_diag @@ -83,11 +93,14 @@ gfdl_cloud_microphys GFS_MP_generic_post maximum_hourly_diagnostics + model_tend_post + model_tend_pre GFS_stochastics + model_tend_post diff --git a/ccpp/suites/suite_FV3_GFS_v16beta.xml b/ccpp/suites/suite_FV3_GFS_v16beta.xml index 7f53d7f6f..9b2df96ca 100644 --- a/ccpp/suites/suite_FV3_GFS_v16beta.xml +++ b/ccpp/suites/suite_FV3_GFS_v16beta.xml @@ -9,14 +9,17 @@ + model_tend_pre GFS_time_vary_pre GFS_rrtmg_setup GFS_rad_time_vary GFS_phys_time_vary + model_tend_post + model_tend_pre GFS_suite_interstitial_rad_reset GFS_rrtmg_pre rrtmg_sw_pre @@ -26,10 +29,13 @@ rrtmg_lw rrtmg_lw_post GFS_rrtmg_post + model_tend_post + total_tend + model_tend_pre GFS_suite_interstitial_phys_reset GFS_suite_stateout_reset get_prs_fv3 @@ -39,9 +45,11 @@ dcyc2t3 GFS_surface_composites_inter GFS_suite_interstitial_2 + model_tend_post + model_tend_pre sfc_diff GFS_surface_loop_control_part1 sfc_nst_pre @@ -50,9 +58,11 @@ lsm_noah sfc_sice GFS_surface_loop_control_part2 + model_tend_post + model_tend_pre GFS_surface_composites_post dcyc2t3_post sfc_diag @@ -83,11 +93,14 @@ gfdl_cloud_microphys GFS_MP_generic_post maximum_hourly_diagnostics + model_tend_post + model_tend_pre GFS_stochastics + model_tend_post diff --git a/gfsphysics/GFS_layer/GFS_diagnostics.F90 b/gfsphysics/GFS_layer/GFS_diagnostics.F90 index 522b954af..51075a202 100644 --- a/gfsphysics/GFS_layer/GFS_diagnostics.F90 +++ b/gfsphysics/GFS_layer/GFS_diagnostics.F90 @@ -2432,6 +2432,29 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,5) enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_shlwcnv' + ExtDiag(idx)%desc = 'u momentum change due to shal conv.' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,6) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_shlwcnv' + ExtDiag(idx)%desc = 'v momentum change due to shal conv.' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,6) + enddo + idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_ccpp' @@ -2440,7 +2463,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,6) + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,7) enddo idx = idx + 1 @@ -2451,7 +2474,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,6) + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,7) enddo idx = idx + 1 @@ -2462,7 +2485,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,7) + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,8) enddo idx = idx + 1 @@ -2473,7 +2496,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,7) + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,8) enddo idx = idx + 1 @@ -2484,7 +2507,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,8) + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,9) enddo idx = idx + 1 @@ -2495,7 +2518,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,8) + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,9) enddo idx = idx + 1 diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index f27eec78d..580828218 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -3268,8 +3268,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & write(0,*) 'NO FLAG: gwd is generic' endif - if(satmedmf) then - write(0,*) 'FLAG: satmedmf so pbl not generic' + if(satmedmf .and. isatmedmf==0) then + write(0,*) 'FLAG: satmedmf and isatedmf=0 so pbl not generic' Model%flag_for_pbl_generic_tend=.false. else if(do_mynnedmf) then write(0,*) 'FLAG: do_mynnedmf so pbl not generic' @@ -3281,19 +3281,19 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & if(imfshalcnv == Model%imfshalcnv_gf) then write(0,*) 'FLAG: imfshalcnv_gf so scnv not generic' Model%flag_for_scnv_generic_tend=.false. - else if(imfshalcnv == Model%imfshalcnv_samf) then - write(0,*) 'FLAG: imfshalcnv_samf so scnv not generic' - Model%flag_for_scnv_generic_tend=.false. + ! else if(imfshalcnv == Model%imfshalcnv_samf) then + ! write(0,*) 'FLAG: imfshalcnv_samf so scnv not generic' + ! Model%flag_for_scnv_generic_tend=.false. else write(0,*) 'NO FLAG: scnv is generic' endif if(imfdeepcnv == Model%imfdeepcnv_gf) then write(0,*) 'FLAG: imfdeepcnv_gf so dcnv not generic' - Model%flag_for_scnv_generic_tend=.false. - else if(imfdeepcnv == Model%imfdeepcnv_samf) then - write(0,*) 'FLAG: imfdeepcnv_samf so dcnv not generic' - Model%flag_for_scnv_generic_tend=.false. + Model%flag_for_dcnv_generic_tend=.false. + ! else if(imfdeepcnv == Model%imfdeepcnv_samf) then + ! write(0,*) 'FLAG: imfdeepcnv_samf so dcnv not generic' + ! Model%flag_for_dcnv_generic_tend=.false. else write(0,*) 'NO FLAG: dcnv is generic' endif From 7d4d5697ee41311ee09de2163dafc18ec28c7be7 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Wed, 4 Mar 2020 20:07:49 +0000 Subject: [PATCH 14/30] Add timestep_init and timestep_final actions to CCPP. Update code so model tendencies add up to total change in 3 hours for the gfs v16 beta suite --- atmos_model.F90 | 10 ++++ ccpp/driver/CCPP_driver.F90 | 67 +++++++++++++++++++++++++- ccpp/physics | 2 +- ccpp/suites/suite_FV3_GFS_v15p2.xml | 21 ++++---- ccpp/suites/suite_FV3_GFS_v16beta.xml | 22 ++++----- ccpp/suites/suite_FV3_GSD_v0.xml | 21 ++++---- gfsphysics/GFS_layer/GFS_typedefs.meta | 7 +++ 7 files changed, 111 insertions(+), 39 deletions(-) diff --git a/atmos_model.F90 b/atmos_model.F90 index 92c154cb7..460ef0dc9 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -297,6 +297,7 @@ subroutine update_atmos_radiation_physics (Atmos) !--- execute the IPD atmospheric setup step call mpp_clock_begin(setupClock) + #ifdef CCPP call CCPP_step (step="time_vary", nblks=Atm_block%nblks, ierr=ierr) if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP time_vary step failed') @@ -331,6 +332,9 @@ subroutine update_atmos_radiation_physics (Atmos) ! print *,'in atmos_model, after assign_importdata, rc=',rc endif + call CCPP_step (step="timestep_init", nblks=Atm_block%nblks, ierr=ierr) + if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP timestep_init step failed') + call mpp_clock_end(setupClock) if (mpp_pe() == mpp_root_pe() .and. debug) write(6,*) "radiation driver" @@ -394,6 +398,9 @@ subroutine update_atmos_radiation_physics (Atmos) #ifdef CCPP call CCPP_step (step="stochastics", nblks=Atm_block%nblks, ierr=ierr) if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP stochastics step failed') + + call CCPP_step (step="timestep_final", nblks=Atm_block%nblks, ierr=ierr) + if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP timestep_final step failed') #else Func0d => physics_step2 !$OMP parallel do default (none) & @@ -404,13 +411,16 @@ subroutine update_atmos_radiation_physics (Atmos) call IPD_step (IPD_Control, IPD_Data(nb:nb), IPD_Diag, IPD_Restart, IPD_func0d=Func0d) enddo #endif + call mpp_clock_end(physClock) if (chksum_debug) then if (mpp_pe() == mpp_root_pe()) print *,'PHYSICS STEP2 ', IPD_Control%kdt, IPD_Control%fhour call FV3GFS_IPD_checksum(IPD_Control, IPD_Data, Atm_block) endif + call getiauforcing(IPD_Control,IAU_data) + if (mpp_pe() == mpp_root_pe() .and. debug) write(6,*) "end of radiation and physics step" endif diff --git a/ccpp/driver/CCPP_driver.F90 b/ccpp/driver/CCPP_driver.F90 index 449aaf03c..2ab882d60 100644 --- a/ccpp/driver/CCPP_driver.F90 +++ b/ccpp/driver/CCPP_driver.F90 @@ -49,7 +49,7 @@ module CCPP_driver ! number nthrdsX in case of non-uniform block sizes) ! !--------------------------------------------------------! logical :: non_uniform_blocks - integer :: nthrds, nthrdsX + integer :: nthrds, nthrdsX, ithread !---------------- ! Public Entities @@ -184,6 +184,68 @@ subroutine CCPP_step (step, nblks, ierr) return end if +! else if (trim(step)=='timestep_init') then + +! ! Threading is forbidden in timestep_init +! ierr=0 +! print *,'received timestep_init' +! !$OMP MASTER +! outerI: do nb = 1,nblks +! print *,'nb=',nb +! ! For non-uniform blocks, the last block has a different (shorter) +! ! length than the other blocks; use special CCPP_Interstitial(nthrdsX) +! if (non_uniform_blocks .and. nb==nblks) then +! ntX = nthrdsX +! else +! ntX = nt +! end if +! do ithread = 1,ntX +! #ifdef STATIC +! call ccpp_physics_run(cdata_domain, suite_name=trim(ccpp_suite), group_name="timestep_init", ierr=ierr) +! #else +! call ccpp_physics_run(cdata_domain, group_name="timestep_init", ierr=ierr) +! #endif +! if (ierr/=0) exit outerI +! enddo +! enddo outerI +! !$OMP END MASTER + +! if (ierr/=0) then +! write(0,'(a)') "An error occurred in ccpp_physics_run for group timestep_init" +! write(0,'(a)') trim(cdata_domain%errmsg) +! return +! end if + +! else if (trim(step)=='timestep_final') then + +! ! Threading is forbidden in timestep_final +! ierr=0 +! !$OMP MASTER +! outerF: do nb = 1,nblks +! ! For non-uniform blocks, the last block has a different (shorter) +! ! length than the other blocks; use special CCPP_Interstitial(nthrdsX) +! if (non_uniform_blocks .and. nb==nblks) then +! ntX = nthrdsX +! else +! ntX = nt +! end if +! do ithread = 1,ntX +! #ifdef STATIC +! call ccpp_physics_run(cdata_domain, suite_name=trim(ccpp_suite), group_name="timestep_final", ierr=ierr) +! #else +! call ccpp_physics_run(cdata_domain, group_name="timestep_final", ierr=ierr) +! #endif +! if (ierr/=0) exit outerF +! enddo +! enddo outerF +! !$OMP END MASTER + +! if (ierr/=0) then +! write(0,'(a)') "An error occurred in ccpp_physics_run for group timestep_final" +! write(0,'(a)') trim(cdata_domain%errmsg) +! return +! end if + else if (trim(step)=="time_vary") then ! Since the time_vary steps only use data structures for all blocks (except the @@ -205,7 +267,8 @@ subroutine CCPP_step (step, nblks, ierr) end if ! Radiation and stochastic physics - else if (trim(step)=="radiation" .or. trim(step)=="physics" .or. trim(step)=="stochastics") then + else if (trim(step)=="radiation" .or. trim(step)=="physics" .or. trim(step)=="stochastics" & + .or. trim(step)=="timestep_init" .or. trim(step)=="timestep_final") then ! Set number of threads available to physics schemes to one, ! because threads are used on the outside for blocking diff --git a/ccpp/physics b/ccpp/physics index 1a3c4d1d0..b4918a451 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 1a3c4d1d020bc9edca46a1911232156143cf3001 +Subproject commit b4918a451256eb4f811851c7973bfee7e26f0c8c diff --git a/ccpp/suites/suite_FV3_GFS_v15p2.xml b/ccpp/suites/suite_FV3_GFS_v15p2.xml index 68d1d8c91..4096166dd 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2.xml @@ -9,17 +9,19 @@ - model_tend_pre GFS_time_vary_pre GFS_rrtmg_setup GFS_rad_time_vary GFS_phys_time_vary - model_tend_post - + model_tend_pre + + + + GFS_suite_interstitial_rad_reset GFS_rrtmg_pre rrtmg_sw_pre @@ -29,13 +31,10 @@ rrtmg_lw rrtmg_lw_post GFS_rrtmg_post - model_tend_post - model_tend_pre - total_tend GFS_suite_interstitial_phys_reset GFS_suite_stateout_reset get_prs_fv3 @@ -45,11 +44,9 @@ dcyc2t3 GFS_surface_composites_inter GFS_suite_interstitial_2 - model_tend_post - model_tend_pre sfc_diff GFS_surface_loop_control_part1 sfc_nst_pre @@ -58,11 +55,9 @@ lsm_noah sfc_sice GFS_surface_loop_control_part2 - model_tend_pre - model_tend_pre GFS_surface_composites_post dcyc2t3_post sfc_diag @@ -93,13 +88,15 @@ gfdl_cloud_microphys GFS_MP_generic_post maximum_hourly_diagnostics - model_tend_post - model_tend_pre GFS_stochastics + + + + model_tend_post diff --git a/ccpp/suites/suite_FV3_GFS_v16beta.xml b/ccpp/suites/suite_FV3_GFS_v16beta.xml index 9b2df96ca..53837905d 100644 --- a/ccpp/suites/suite_FV3_GFS_v16beta.xml +++ b/ccpp/suites/suite_FV3_GFS_v16beta.xml @@ -9,17 +9,19 @@ - model_tend_pre GFS_time_vary_pre GFS_rrtmg_setup GFS_rad_time_vary GFS_phys_time_vary - model_tend_post - + model_tend_pre + + + + GFS_suite_interstitial_rad_reset GFS_rrtmg_pre rrtmg_sw_pre @@ -29,13 +31,10 @@ rrtmg_lw rrtmg_lw_post GFS_rrtmg_post - model_tend_post - total_tend - model_tend_pre GFS_suite_interstitial_phys_reset GFS_suite_stateout_reset get_prs_fv3 @@ -45,11 +44,9 @@ dcyc2t3 GFS_surface_composites_inter GFS_suite_interstitial_2 - model_tend_post - model_tend_pre sfc_diff GFS_surface_loop_control_part1 sfc_nst_pre @@ -58,11 +55,9 @@ lsm_noah sfc_sice GFS_surface_loop_control_part2 - model_tend_post - model_tend_pre GFS_surface_composites_post dcyc2t3_post sfc_diag @@ -93,14 +88,17 @@ gfdl_cloud_microphys GFS_MP_generic_post maximum_hourly_diagnostics - model_tend_post - model_tend_pre GFS_stochastics + + + + model_tend_post + total_tend diff --git a/ccpp/suites/suite_FV3_GSD_v0.xml b/ccpp/suites/suite_FV3_GSD_v0.xml index 349194c5e..f06f28de7 100644 --- a/ccpp/suites/suite_FV3_GSD_v0.xml +++ b/ccpp/suites/suite_FV3_GSD_v0.xml @@ -4,17 +4,19 @@ - model_tend_pre GFS_time_vary_pre GFS_rrtmg_setup GFS_rad_time_vary GFS_phys_time_vary - model_tend_post - + model_tend_pre + + + + GFS_suite_interstitial_rad_reset GFS_rrtmg_pre rrtmg_sw_pre @@ -26,13 +28,10 @@ mynnrad_post rrtmg_lw_post GFS_rrtmg_post - model_tend_post - total_tend - model_tend_pre GFS_suite_interstitial_phys_reset GFS_suite_stateout_reset get_prs_fv3 @@ -42,11 +41,9 @@ dcyc2t3 GFS_surface_composites_inter GFS_suite_interstitial_2 - model_tend_post - model_tend_pre sfc_diff GFS_surface_loop_control_part1 sfc_nst_pre @@ -57,11 +54,9 @@ sfc_sice lsm_ruc_sfc_sice_post GFS_surface_loop_control_part2 - model_tend_post - model_tend_pre GFS_surface_composites_post dcyc2t3_post sfc_diag @@ -93,13 +88,15 @@ GFS_MP_generic_post cu_gf_driver_post maximum_hourly_diagnostics - model_tend_post - model_tend_pre GFS_stochastics + + + + model_tend_post diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index d333eb97d..f0ae1adb9 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -7866,6 +7866,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[save_q(:,:,index_for_ozone)] + standard_name = ozone_mixing_ratio_save + long_name = ozone mixing ratio before entering a physics scheme + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [save_q(:,:,index_for_liquid_cloud_condensate)] standard_name = cloud_condensed_water_mixing_ratio_save long_name = moist (dry+vapor, no condensates) mixing ratio of cloud water (condensate) before entering a physics scheme From d46ebe84454b2921a455fd02c5b7e09c5ed14d70 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Wed, 4 Mar 2020 22:28:46 +0000 Subject: [PATCH 15/30] Remove debug prints and commented-out code. --- ccpp/driver/CCPP_driver.F90 | 62 ------------------------------------- ccpp/physics | 2 +- 2 files changed, 1 insertion(+), 63 deletions(-) diff --git a/ccpp/driver/CCPP_driver.F90 b/ccpp/driver/CCPP_driver.F90 index 2ab882d60..0bf88b218 100644 --- a/ccpp/driver/CCPP_driver.F90 +++ b/ccpp/driver/CCPP_driver.F90 @@ -184,68 +184,6 @@ subroutine CCPP_step (step, nblks, ierr) return end if -! else if (trim(step)=='timestep_init') then - -! ! Threading is forbidden in timestep_init -! ierr=0 -! print *,'received timestep_init' -! !$OMP MASTER -! outerI: do nb = 1,nblks -! print *,'nb=',nb -! ! For non-uniform blocks, the last block has a different (shorter) -! ! length than the other blocks; use special CCPP_Interstitial(nthrdsX) -! if (non_uniform_blocks .and. nb==nblks) then -! ntX = nthrdsX -! else -! ntX = nt -! end if -! do ithread = 1,ntX -! #ifdef STATIC -! call ccpp_physics_run(cdata_domain, suite_name=trim(ccpp_suite), group_name="timestep_init", ierr=ierr) -! #else -! call ccpp_physics_run(cdata_domain, group_name="timestep_init", ierr=ierr) -! #endif -! if (ierr/=0) exit outerI -! enddo -! enddo outerI -! !$OMP END MASTER - -! if (ierr/=0) then -! write(0,'(a)') "An error occurred in ccpp_physics_run for group timestep_init" -! write(0,'(a)') trim(cdata_domain%errmsg) -! return -! end if - -! else if (trim(step)=='timestep_final') then - -! ! Threading is forbidden in timestep_final -! ierr=0 -! !$OMP MASTER -! outerF: do nb = 1,nblks -! ! For non-uniform blocks, the last block has a different (shorter) -! ! length than the other blocks; use special CCPP_Interstitial(nthrdsX) -! if (non_uniform_blocks .and. nb==nblks) then -! ntX = nthrdsX -! else -! ntX = nt -! end if -! do ithread = 1,ntX -! #ifdef STATIC -! call ccpp_physics_run(cdata_domain, suite_name=trim(ccpp_suite), group_name="timestep_final", ierr=ierr) -! #else -! call ccpp_physics_run(cdata_domain, group_name="timestep_final", ierr=ierr) -! #endif -! if (ierr/=0) exit outerF -! enddo -! enddo outerF -! !$OMP END MASTER - -! if (ierr/=0) then -! write(0,'(a)') "An error occurred in ccpp_physics_run for group timestep_final" -! write(0,'(a)') trim(cdata_domain%errmsg) -! return -! end if - else if (trim(step)=="time_vary") then ! Since the time_vary steps only use data structures for all blocks (except the diff --git a/ccpp/physics b/ccpp/physics index b4918a451..abde3d01f 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit b4918a451256eb4f811851c7973bfee7e26f0c8c +Subproject commit abde3d01f61e20a64e6605f8ac2dfd7a9aff6fba From 9f8b18f17a428c4367b82651eb8ae3db2813c823 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Thu, 12 Mar 2020 17:20:48 +0000 Subject: [PATCH 16/30] Add total tendency calculations for gfsv15p2 and gsdv0. Calculate pbl tendencies for gvsv15p2 --- ccpp/suites/suite_FV3_GFS_v15p2.xml | 1 + ccpp/suites/suite_FV3_GSD_v0.xml | 1 + gfsphysics/GFS_layer/GFS_typedefs.F90 | 3 +++ 3 files changed, 5 insertions(+) diff --git a/ccpp/suites/suite_FV3_GFS_v15p2.xml b/ccpp/suites/suite_FV3_GFS_v15p2.xml index 4096166dd..7c68f4253 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2.xml @@ -98,6 +98,7 @@ model_tend_post + total_tend diff --git a/ccpp/suites/suite_FV3_GSD_v0.xml b/ccpp/suites/suite_FV3_GSD_v0.xml index f06f28de7..8f6afecf1 100644 --- a/ccpp/suites/suite_FV3_GSD_v0.xml +++ b/ccpp/suites/suite_FV3_GSD_v0.xml @@ -98,6 +98,7 @@ model_tend_post + total_tend diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 580828218..803cd4a69 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -3271,6 +3271,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & if(satmedmf .and. isatmedmf==0) then write(0,*) 'FLAG: satmedmf and isatedmf=0 so pbl not generic' Model%flag_for_pbl_generic_tend=.false. + else if(hybedmf) then + write(0,*) 'FLAG: hybedmf so pbl not generic' + Model%flag_for_pbl_generic_tend=.false. else if(do_mynnedmf) then write(0,*) 'FLAG: do_mynnedmf so pbl not generic' Model%flag_for_pbl_generic_tend=.false. From cd2583d4af760b913aa08e0d6a5f88ddee6f13b2 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Tue, 17 Mar 2020 17:00:32 +0000 Subject: [PATCH 17/30] Add some #ifdef CCPP to avoid breaking non-CCPP runs --- atmos_model.F90 | 2 ++ gfsphysics/GFS_layer/GFS_typedefs.F90 | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/atmos_model.F90 b/atmos_model.F90 index 460ef0dc9..044597d62 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -332,8 +332,10 @@ subroutine update_atmos_radiation_physics (Atmos) ! print *,'in atmos_model, after assign_importdata, rc=',rc endif +#ifdef CCPP call CCPP_step (step="timestep_init", nblks=Atm_block%nblks, ierr=ierr) if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP timestep_init step failed') +#endif call mpp_clock_end(setupClock) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 803cd4a69..41eea707c 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -3258,6 +3258,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%flag_for_scnv_generic_tend = .true. Model%flag_for_dcnv_generic_tend = .true. +#ifdef CCPP + write(0,*) 'GOT HERE (stderr)' print *,'GOT HERE (stdout)' @@ -3300,7 +3302,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & else write(0,*) 'NO FLAG: dcnv is generic' endif - +#endif ! !VAY-ugwp --- set some GW-related switches ! From 2dd765a8a5030edffefd55836af9a5632bf31ade Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Fri, 3 Apr 2020 20:23:29 +0000 Subject: [PATCH 18/30] merge gsd/develop --- atmos_model.F90 | 2 +- ccpp/config/ccpp_prebuild_config.py | 4 +- ccpp/framework | 2 +- ccpp/physics | 2 +- ccpp/suites/suite_FV3_CPT_v0.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017_coupled.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017_csawmg.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml | 2 +- .../suite_FV3_GFS_2017_gfdlmp_noahmp.xml | 2 +- .../suite_FV3_GFS_2017_gfdlmp_regional.xml | 2 +- ...uite_FV3_GFS_2017_gfdlmp_regional_c768.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017_myj.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml | 2 +- .../suites/suite_FV3_GFS_2017_ozphys_2015.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017_sas.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017_satmedmfq.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017_shinhong.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017_stretched.xml | 2 +- ccpp/suites/suite_FV3_GFS_2017_ysu.xml | 2 +- ccpp/suites/suite_FV3_GFS_v15.xml | 2 +- ccpp/suites/suite_FV3_GFS_v15_gf.xml | 2 +- ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml | 2 +- ccpp/suites/suite_FV3_GFS_v15_mynn.xml | 6 +- ccpp/suites/suite_FV3_GFS_v15_thompson.xml | 2 +- .../suite_FV3_GFS_v15_thompson_mynn.xml | 6 +- ccpp/suites/suite_FV3_GFS_v15p2.xml | 2 +- ccpp/suites/suite_FV3_GFS_v15plus.xml | 2 +- ccpp/suites/suite_FV3_GFS_v16beta.xml | 2 +- ccpp/suites/suite_FV3_GSD_SAR.xml | 9 +- ccpp/suites/suite_FV3_GSD_noah.xml | 6 +- ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml | 92 ++++++++++++++++++ ccpp/suites/suite_FV3_GSD_v0.xml | 6 +- ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml | 6 +- ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml | 94 +++++++++++++++++++ .../suite_FV3_HAFS_ferhires_update_moist.xml | 2 +- gfsphysics/GFS_layer/GFS_diagnostics.F90 | 2 +- gfsphysics/GFS_layer/GFS_restart.F90 | 11 ++- gfsphysics/GFS_layer/GFS_typedefs.F90 | 47 ++++++---- gfsphysics/GFS_layer/GFS_typedefs.meta | 71 ++++++++------ gfsphysics/physics/GFS_debug.F90 | 8 +- 44 files changed, 325 insertions(+), 103 deletions(-) create mode 100644 ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml create mode 100644 ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml diff --git a/atmos_model.F90 b/atmos_model.F90 index 044597d62..6343c267c 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -1455,7 +1455,7 @@ subroutine update_atmos_chemistry(state, rc) ib = i + Atm_block%isc - 1 nb = Atm_block%blkno(ib,jb) ix = Atm_block%ixp(ib,jb) - hpbl(i,j) = IPD_Data(nb)%IntDiag%hpbl(ix) + hpbl(i,j) = IPD_Data(nb)%Tbd%hpbl(ix) area(i,j) = IPD_Data(nb)%Grid%area(ix) stype(i,j) = IPD_Data(nb)%Sfcprop%stype(ix) rainc(i,j) = IPD_Data(nb)%Coupling%rainc_cpl(ix) diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 5db2898da..c3f6e4846 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -213,8 +213,8 @@ 'FV3/ccpp/physics/physics/ysuvdif.F90' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/module_MYNNPBL_wrapper.F90' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/module_MYNNSFC_wrapper.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/module_MYNNrad_pre.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/module_MYNNrad_post.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/module_SGSCloud_RadPre.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/module_SGSCloud_RadPost.F90' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/module_MYJSFC_wrapper.F90' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/module_MYJPBL_wrapper.F90' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/mp_thompson_pre.F90' : [ 'slow_physics' ], diff --git a/ccpp/framework b/ccpp/framework index 78d5d5b15..463a72cce 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 78d5d5b155385c2d67276b31e8154cea9bfb1d34 +Subproject commit 463a72cce605ae0f8f8725574d5e3b9cf6c9d90c diff --git a/ccpp/physics b/ccpp/physics index abde3d01f..e4b80ea01 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit abde3d01f61e20a64e6605f8ac2dfd7a9aff6fba +Subproject commit e4b80ea016899c7c23fa07396bd7fcbc0195a0f9 diff --git a/ccpp/suites/suite_FV3_CPT_v0.xml b/ccpp/suites/suite_FV3_CPT_v0.xml index 8eed8e78c..2462e85ac 100644 --- a/ccpp/suites/suite_FV3_CPT_v0.xml +++ b/ccpp/suites/suite_FV3_CPT_v0.xml @@ -69,9 +69,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cs_conv_pre cs_conv cs_conv_post diff --git a/ccpp/suites/suite_FV3_GFS_2017.xml b/ccpp/suites/suite_FV3_GFS_2017.xml index fc1739bd5..02b1d4a1d 100644 --- a/ccpp/suites/suite_FV3_GFS_2017.xml +++ b/ccpp/suites/suite_FV3_GFS_2017.xml @@ -63,9 +63,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_coupled.xml b/ccpp/suites/suite_FV3_GFS_2017_coupled.xml index d67ce3116..28a9d8610 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_coupled.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_coupled.xml @@ -62,9 +62,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml b/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml index fec7f373e..62ebad37f 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml @@ -64,9 +64,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cs_conv_pre cs_conv cs_conv_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml b/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml index 9fc0b6dae..ab7a4b8cf 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml @@ -64,9 +64,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre shoc cs_conv_pre cs_conv diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml index 35fdd9143..2525c754c 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml @@ -68,9 +68,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml index 55dedad57..6dfa58e24 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml @@ -68,9 +68,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml index 20f91469f..562ccd513 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml @@ -63,9 +63,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml index 2e208f6e7..474028194 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml @@ -63,9 +63,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml b/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml index 3e6acbc98..2778bc4f8 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml @@ -64,9 +64,9 @@ GFS_suite_stateout_update ozphys h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_myj.xml b/ccpp/suites/suite_FV3_GFS_2017_myj.xml index 7a193a10b..d3ccfd388 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_myj.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_myj.xml @@ -69,9 +69,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml b/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml index 0331483c6..9d66abcd6 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml @@ -68,9 +68,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_ntiedtke_pre cu_ntiedtke GFS_DCNV_generic_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml b/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml index 4e382886c..a79b11aa8 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml @@ -63,9 +63,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys_2015 - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_sas.xml b/ccpp/suites/suite_FV3_GFS_2017_sas.xml index 1c52ac2cd..68b4ac805 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_sas.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_sas.xml @@ -68,9 +68,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre sascnvn GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml b/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml index af93678ac..c55e454ff 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml @@ -63,9 +63,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_satmedmfq.xml b/ccpp/suites/suite_FV3_GFS_2017_satmedmfq.xml index a975c9235..be4d130a2 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_satmedmfq.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_satmedmfq.xml @@ -63,9 +63,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml b/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml index 756695e65..9b33a91d4 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml @@ -67,9 +67,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_stretched.xml b/ccpp/suites/suite_FV3_GFS_2017_stretched.xml index 6bef91b06..8f534da68 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_stretched.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_stretched.xml @@ -67,9 +67,9 @@ GFS_GWD_generic_post GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_ysu.xml b/ccpp/suites/suite_FV3_GFS_2017_ysu.xml index baeb11c22..aa4d677bd 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_ysu.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_ysu.xml @@ -67,9 +67,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15.xml b/ccpp/suites/suite_FV3_GFS_v15.xml index efd5fc97b..d9ea5d2ac 100644 --- a/ccpp/suites/suite_FV3_GFS_v15.xml +++ b/ccpp/suites/suite_FV3_GFS_v15.xml @@ -69,9 +69,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15_gf.xml b/ccpp/suites/suite_FV3_GFS_v15_gf.xml index 0d56e54c8..c7ca87900 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_gf.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_gf.xml @@ -69,9 +69,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_gf_driver_pre cu_gf_driver GFS_DCNV_generic_post diff --git a/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml b/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml index 1e51e5a13..0de2803ae 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml @@ -64,9 +64,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_gf_driver_pre cu_gf_driver GFS_DCNV_generic_post diff --git a/ccpp/suites/suite_FV3_GFS_v15_mynn.xml b/ccpp/suites/suite_FV3_GFS_v15_mynn.xml index 8fffa33e8..5ee55cda7 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_mynn.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_mynn.xml @@ -18,14 +18,14 @@ GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpre rrtmg_lw_post GFS_rrtmg_post @@ -69,9 +69,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15_thompson.xml b/ccpp/suites/suite_FV3_GFS_v15_thompson.xml index a436c11c8..a079fd84c 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_thompson.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_thompson.xml @@ -64,9 +64,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml b/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml index 3de52fa45..de709d38a 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml @@ -13,14 +13,14 @@ GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpre rrtmg_lw_post GFS_rrtmg_post @@ -64,9 +64,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15p2.xml b/ccpp/suites/suite_FV3_GFS_v15p2.xml index 7c68f4253..46234fdc9 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2.xml @@ -74,9 +74,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15plus.xml b/ccpp/suites/suite_FV3_GFS_v15plus.xml index 97cfa320d..57a0d921b 100644 --- a/ccpp/suites/suite_FV3_GFS_v15plus.xml +++ b/ccpp/suites/suite_FV3_GFS_v15plus.xml @@ -79,9 +79,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v16beta.xml b/ccpp/suites/suite_FV3_GFS_v16beta.xml index 53837905d..ede385cf0 100644 --- a/ccpp/suites/suite_FV3_GFS_v16beta.xml +++ b/ccpp/suites/suite_FV3_GFS_v16beta.xml @@ -74,9 +74,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GSD_SAR.xml b/ccpp/suites/suite_FV3_GSD_SAR.xml index e563301c4..e4d619abb 100644 --- a/ccpp/suites/suite_FV3_GSD_SAR.xml +++ b/ccpp/suites/suite_FV3_GSD_SAR.xml @@ -13,14 +13,14 @@ GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpre rrtmg_lw_post GFS_rrtmg_post @@ -66,6 +66,11 @@ GFS_suite_stateout_update ozphys_2015 h2ophys + get_phi_fv3 + + GFS_suite_interstitial_3 + GFS_suite_interstitial_4 + GFS_MP_generic_pre mp_thompson_pre mp_thompson diff --git a/ccpp/suites/suite_FV3_GSD_noah.xml b/ccpp/suites/suite_FV3_GSD_noah.xml index e9795b6ef..735c5be58 100644 --- a/ccpp/suites/suite_FV3_GSD_noah.xml +++ b/ccpp/suites/suite_FV3_GSD_noah.xml @@ -13,14 +13,14 @@ GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post @@ -64,9 +64,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_gf_driver_pre cu_gf_driver GFS_DCNV_generic_post diff --git a/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml b/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml new file mode 100644 index 000000000..0f886fb85 --- /dev/null +++ b/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml @@ -0,0 +1,92 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + 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 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_DCNV_generic_pre + cu_gf_driver_pre + cu_gf_driver + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + cu_gf_driver_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GSD_v0.xml b/ccpp/suites/suite_FV3_GSD_v0.xml index 8f6afecf1..e572fdc39 100644 --- a/ccpp/suites/suite_FV3_GSD_v0.xml +++ b/ccpp/suites/suite_FV3_GSD_v0.xml @@ -18,14 +18,14 @@ GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpre rrtmg_lw_post GFS_rrtmg_post @@ -71,9 +71,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_gf_driver_pre cu_gf_driver GFS_DCNV_generic_post diff --git a/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml b/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml index 8c56c07e5..26cff57a6 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml +++ b/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml @@ -13,14 +13,14 @@ GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpre rrtmg_lw_post GFS_rrtmg_post @@ -65,9 +65,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_gf_driver_pre cu_gf_driver GFS_DCNV_generic_post diff --git a/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml b/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml new file mode 100644 index 000000000..e71213f35 --- /dev/null +++ b/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml @@ -0,0 +1,94 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + 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 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_ruc + lsm_ruc_sfc_sice_pre + sfc_sice + lsm_ruc_sfc_sice_post + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_DCNV_generic_pre + cu_gf_driver_pre + cu_gf_driver + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + cu_gf_driver_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml b/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml index 375e9972d..7a168ce54 100644 --- a/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml +++ b/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml @@ -63,9 +63,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/gfsphysics/GFS_layer/GFS_diagnostics.F90 b/gfsphysics/GFS_layer/GFS_diagnostics.F90 index 51075a202..7f5bddbf1 100644 --- a/gfsphysics/GFS_layer/GFS_diagnostics.F90 +++ b/gfsphysics/GFS_layer/GFS_diagnostics.F90 @@ -1535,7 +1535,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%hpbl(:) + ExtDiag(idx)%data(nb)%var2 => Tbd(nb)%hpbl(:) enddo idx = idx + 1 diff --git a/gfsphysics/GFS_layer/GFS_restart.F90 b/gfsphysics/GFS_layer/GFS_restart.F90 index 8e80f6f99..85de87289 100644 --- a/gfsphysics/GFS_layer/GFS_restart.F90 +++ b/gfsphysics/GFS_layer/GFS_restart.F90 @@ -123,7 +123,7 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & #ifdef CCPP ! GF if (Model%imfdeepcnv == 3) then - Restart%num3d = Restart%num3d + 2 + Restart%num3d = Restart%num3d + 3 endif ! MYNN PBL if (Model%do_mynnedmf) then @@ -188,7 +188,7 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & !--- RAP/HRRR-specific variables, 2D num = offset + ndiag_rst ! GF - if (Model%imfdeepcnv == 3) then + if (Model%imfdeepcnv == Model%imfdeepcnv_gf) then num = num + 1 Restart%name2d(num) = 'gf_2d_conv_act' do nb = 1,nblks @@ -267,7 +267,7 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = Model%ntot3d ! GF - if (Model%imfdeepcnv == 3) then + if (Model%imfdeepcnv == Model%imfdeepcnv_gf) then num = num + 1 Restart%name3d(num) = 'gf_3d_prevst' do nb = 1,nblks @@ -278,6 +278,11 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & do nb = 1,nblks Restart%data(nb,num)%var3p => Tbd(nb)%prevsq(:,:) enddo + num = num + 1 + Restart%name3d(num) = 'gf_3d_qci_conv' + do nb = 1,nblks + Restart%data(nb,num)%var3p => Coupling(nb)%qci_conv(:,:) + enddo endif ! MYNN PBL if (Model%do_mynnedmf) then diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 41eea707c..89c9db948 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -258,6 +258,9 @@ module GFS_typedefs real (kind=kind_phys), pointer :: uustar (:) => null() !< boundary layer parameter real (kind=kind_phys), pointer :: oro (:) => null() !< orography real (kind=kind_phys), pointer :: oro_uf (:) => null() !< unfiltered orography + real (kind=kind_phys), pointer :: evap (:) => null() !< + real (kind=kind_phys), pointer :: hflx (:) => null() !< + real (kind=kind_phys), pointer :: qss (:) => null() !< !-- In/Out #ifdef CCPP @@ -511,6 +514,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: dqdti (:,:) => null() !< instantaneous total moisture tendency (kg/kg/s) real (kind=kind_phys), pointer :: ushfsfci(:) => null() !< instantaneous upward sensible heat flux (w/m**2) real (kind=kind_phys), pointer :: dkt (:,:) => null() !< instantaneous dkt diffusion coefficient for temperature (m**2/s) + real (kind=kind_phys), pointer :: qci_conv(:,:) => null() !< convective cloud condesate after rainout + contains procedure :: create => coupling_create !< allocate array data @@ -1196,6 +1201,9 @@ module GFS_typedefs real (kind=kind_phys), pointer :: phy_f2d (:,:) => null() !< 2d arrays saved for restart real (kind=kind_phys), pointer :: phy_f3d (:,:,:) => null() !< 3d arrays saved for restart +!--- Diagnostic that needs to be carried over to the next time step (removed from diag_type) + real (kind=kind_phys), pointer :: hpbl (:) => null() !< Planetary boundary layer height + #ifndef CCPP !--- for explicit data blocking integer :: blkno !< block number of this block @@ -1420,7 +1428,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: dpt2m (:) => null() !< 2 meter dew point temperature real (kind=kind_phys), pointer :: zlvl (:) => null() !< layer 1 height (m) real (kind=kind_phys), pointer :: psurf (:) => null() !< surface pressure (Pa) - real (kind=kind_phys), pointer :: hpbl (:) => null() !< pbl height (m) real (kind=kind_phys), pointer :: pwat (:) => null() !< precipitable water real (kind=kind_phys), pointer :: t1 (:) => null() !< layer 1 temperature (K) real (kind=kind_phys), pointer :: q1 (:) => null() !< layer 1 specific humidity (kg/kg) @@ -1671,7 +1678,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: ep1d_ice(:) => null() !< real (kind=kind_phys), pointer :: ep1d_land(:) => null() !< real (kind=kind_phys), pointer :: ep1d_ocean(:) => null() !< - real (kind=kind_phys), pointer :: evap(:) => null() !< real (kind=kind_phys), pointer :: evap_ice(:) => null() !< real (kind=kind_phys), pointer :: evap_land(:) => null() !< real (kind=kind_phys), pointer :: evap_ocean(:) => null() !< @@ -1717,7 +1723,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: gwdcv(:,:) => null() !< integer :: h2o_coeff !< real (kind=kind_phys), pointer :: h2o_pres(:) => null() !< - real (kind=kind_phys), pointer :: hflx(:) => null() !< real (kind=kind_phys), pointer :: hflx_ice(:) => null() !< real (kind=kind_phys), pointer :: hflx_land(:) => null() !< real (kind=kind_phys), pointer :: hflx_ocean(:) => null() !< @@ -1788,7 +1793,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: qlyr(:,:) => null() !< real (kind=kind_phys), pointer :: qrn(:,:) => null() !< real (kind=kind_phys), pointer :: qsnw(:,:) => null() !< - real (kind=kind_phys), pointer :: qss(:) => null() !< real (kind=kind_phys), pointer :: qss_ice(:) => null() !< real (kind=kind_phys), pointer :: qss_land(:) => null() !< real (kind=kind_phys), pointer :: qss_ocean(:) => null() !< @@ -1807,6 +1811,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: runoff(:) => null() !< real (kind=kind_phys), pointer :: save_q(:,:,:) => null() !< real (kind=kind_phys), pointer :: save_t(:,:) => null() !< + real (kind=kind_phys), pointer :: save_tcp(:,:) => null() !< real (kind=kind_phys), pointer :: save_u(:,:) => null() !< real (kind=kind_phys), pointer :: save_v(:,:) => null() !< real (kind=kind_phys), pointer :: sbsno(:) => null() !< @@ -2124,6 +2129,9 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%uustar (IM)) allocate (Sfcprop%oro (IM)) allocate (Sfcprop%oro_uf (IM)) + allocate (Sfcprop%evap (IM)) + allocate (Sfcprop%hflx (IM)) + allocate (Sfcprop%qss (IM)) Sfcprop%slope = clear_val Sfcprop%shdmin = clear_val @@ -2136,6 +2144,9 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%uustar = clear_val Sfcprop%oro = clear_val Sfcprop%oro_uf = clear_val + Sfcprop%evap = clear_val + Sfcprop%hflx = clear_val + Sfcprop%qss = clear_val !--- In/Out allocate (Sfcprop%hice (IM)) @@ -2638,6 +2649,13 @@ subroutine coupling_create (Coupling, IM, Model) Coupling%nifa2d = clear_val endif +#ifdef CCPP + if (Model%imfdeepcnv == Model%imfdeepcnv_gf) then + allocate (Coupling%qci_conv (IM,Model%levs)) + Coupling%qci_conv = clear_val + endif +#endif + end subroutine coupling_create @@ -4956,6 +4974,9 @@ subroutine tbd_create (Tbd, IM, Model) ! if (Model%do_shoc) Tbd%phy_f3d(:,1,Model%ntot3d-1) = 3.0 ! if (Model%do_shoc) Tbd%phy_f3d(:,:,Model%ntot3d-1) = 1.0 + allocate (Tbd%hpbl (IM)) + Tbd%hpbl = clear_val + #ifndef CCPP Tbd%blkno = BLKNO #endif @@ -5191,7 +5212,6 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%dpt2m (IM)) allocate (Diag%zlvl (IM)) allocate (Diag%psurf (IM)) - allocate (Diag%hpbl (IM)) allocate (Diag%pwat (IM)) allocate (Diag%t1 (IM)) allocate (Diag%q1 (IM)) @@ -5497,7 +5517,6 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%dpt2m = zero Diag%zlvl = zero Diag%psurf = zero - Diag%hpbl = zero Diag%pwat = zero Diag%t1 = zero Diag%q1 = zero @@ -5842,7 +5861,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%ep1d_ice (IM)) allocate (Interstitial%ep1d_land (IM)) allocate (Interstitial%ep1d_ocean (IM)) - allocate (Interstitial%evap (IM)) allocate (Interstitial%evap_ice (IM)) allocate (Interstitial%evap_land (IM)) allocate (Interstitial%evap_ocean (IM)) @@ -5885,7 +5903,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%gwdcu (IM,Model%levs)) allocate (Interstitial%gwdcv (IM,Model%levs)) allocate (Interstitial%h2o_pres (levh2o)) - allocate (Interstitial%hflx (IM)) allocate (Interstitial%hflx_ice (IM)) allocate (Interstitial%hflx_land (IM)) allocate (Interstitial%hflx_ocean (IM)) @@ -5913,7 +5930,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%prnum (IM,Model%levs)) allocate (Interstitial%qlyr (IM,Model%levr+LTP)) allocate (Interstitial%prcpmp (IM)) - allocate (Interstitial%qss (IM)) allocate (Interstitial%qss_ice (IM)) allocate (Interstitial%qss_land (IM)) allocate (Interstitial%qss_ocean (IM)) @@ -5929,6 +5945,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%runoff (IM)) allocate (Interstitial%save_q (IM,Model%levs,Model%ntrac)) allocate (Interstitial%save_t (IM,Model%levs)) + allocate (Interstitial%save_tcp (IM,Model%levs)) allocate (Interstitial%save_u (IM,Model%levs)) allocate (Interstitial%save_v (IM,Model%levs)) allocate (Interstitial%sbsno (IM)) @@ -6130,9 +6147,9 @@ subroutine interstitial_setup_tracers(Interstitial, Model) if (Model%imp_physics == Model%imp_physics_thompson) then if (Model%ltaerosol) then - Interstitial%nvdiff = 10 + Interstitial%nvdiff = 12 else - Interstitial%nvdiff = 7 + Interstitial%nvdiff = 9 endif if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 Interstitial%nncl = 5 @@ -6385,7 +6402,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%ep1d_ice = huge Interstitial%ep1d_land = huge Interstitial%ep1d_ocean = huge - Interstitial%evap = clear_val Interstitial%evap_ice = huge Interstitial%evap_land = huge Interstitial%evap_ocean = huge @@ -6424,7 +6440,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%gflx_ocean = zero Interstitial%gwdcu = clear_val Interstitial%gwdcv = clear_val - Interstitial%hflx = clear_val Interstitial%hflx_ice = huge Interstitial%hflx_land = huge Interstitial%hflx_ocean = huge @@ -6444,7 +6459,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%oc = clear_val Interstitial%prcpmp = clear_val Interstitial%prnum = clear_val - Interstitial%qss = clear_val Interstitial%qss_ice = huge Interstitial%qss_land = huge Interstitial%qss_ocean = huge @@ -6460,6 +6474,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%runoff = clear_val Interstitial%save_q = clear_val Interstitial%save_t = clear_val + Interstitial%save_tcp = clear_val Interstitial%save_u = clear_val Interstitial%save_v = clear_val Interstitial%sbsno = clear_val @@ -6695,7 +6710,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%ep1d_ice ) = ', sum(Interstitial%ep1d_ice ) write (0,*) 'sum(Interstitial%ep1d_land ) = ', sum(Interstitial%ep1d_land ) write (0,*) 'sum(Interstitial%ep1d_ocean ) = ', sum(Interstitial%ep1d_ocean ) - write (0,*) 'sum(Interstitial%evap ) = ', sum(Interstitial%evap ) write (0,*) 'sum(Interstitial%evap_ice ) = ', sum(Interstitial%evap_ice ) write (0,*) 'sum(Interstitial%evap_land ) = ', sum(Interstitial%evap_land ) write (0,*) 'sum(Interstitial%evap_ocean ) = ', sum(Interstitial%evap_ocean ) @@ -6738,7 +6752,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%gflx_ocean ) = ', sum(Interstitial%gflx_ocean ) write (0,*) 'sum(Interstitial%gwdcu ) = ', sum(Interstitial%gwdcu ) write (0,*) 'sum(Interstitial%gwdcv ) = ', sum(Interstitial%gwdcv ) - write (0,*) 'sum(Interstitial%hflx ) = ', sum(Interstitial%hflx ) write (0,*) 'sum(Interstitial%hflx_ice ) = ', sum(Interstitial%hflx_ice ) write (0,*) 'sum(Interstitial%hflx_land ) = ', sum(Interstitial%hflx_land ) write (0,*) 'sum(Interstitial%hflx_ocean ) = ', sum(Interstitial%hflx_ocean ) @@ -6769,7 +6782,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%prcpmp ) = ', sum(Interstitial%prcpmp ) write (0,*) 'sum(Interstitial%prnum ) = ', sum(Interstitial%prnum ) write (0,*) 'sum(Interstitial%qlyr ) = ', sum(Interstitial%qlyr ) - write (0,*) 'sum(Interstitial%qss ) = ', sum(Interstitial%qss ) write (0,*) 'sum(Interstitial%qss_ice ) = ', sum(Interstitial%qss_ice ) write (0,*) 'sum(Interstitial%qss_land ) = ', sum(Interstitial%qss_land ) write (0,*) 'sum(Interstitial%qss_ocean ) = ', sum(Interstitial%qss_ocean ) @@ -6787,6 +6799,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%runoff ) = ', sum(Interstitial%runoff ) write (0,*) 'sum(Interstitial%save_q ) = ', sum(Interstitial%save_q ) write (0,*) 'sum(Interstitial%save_t ) = ', sum(Interstitial%save_t ) + write (0,*) 'sum(Interstitial%save_tcp ) = ', sum(Interstitial%save_tcp ) write (0,*) 'sum(Interstitial%save_u ) = ', sum(Interstitial%save_u ) write (0,*) 'sum(Interstitial%save_v ) = ', sum(Interstitial%save_v ) write (0,*) 'sum(Interstitial%sbsno ) = ', sum(Interstitial%sbsno ) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index f0ae1adb9..60de65c75 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -1269,6 +1269,27 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[evap] + standard_name = kinematic_surface_upward_latent_heat_flux + long_name = kinematic surface upward latent heat flux + units = kg kg-1 m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[hflx] + standard_name = kinematic_surface_upward_sensible_heat_flux + long_name = kinematic surface upward sensible heat flux + units = K m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[qss] + standard_name = surface_specific_humidity + long_name = surface air saturation specific humidity + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [raincprv] standard_name = lwe_thickness_of_convective_precipitation_amount_from_previous_timestep long_name = convective_precipitation_amount from previous timestep @@ -1862,7 +1883,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - +[qci_conv] + standard_name = convective_cloud_condesate_after_rainout + long_name = convective cloud condesate after rainout + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys ######################################################################## [ccpp-arg-table] name = GFS_control_type @@ -4121,6 +4148,13 @@ dimensions = (horizontal_dimension,vertical_dimension_of_h2o_forcing_data,number_of_coefficients_in_h2o_forcing_data) type = real kind = kind_phys +[hpbl] + standard_name = atmosphere_boundary_layer_thickness + long_name = pbl height + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [in_nm] standard_name = in_number_concentration long_name = IN number concentration @@ -5151,13 +5185,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[hpbl] - standard_name = atmosphere_boundary_layer_thickness - long_name = pbl height - units = m - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [pwat] standard_name = column_precipitable_water long_name = precipitable water @@ -6874,13 +6901,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[evap] - standard_name = kinematic_surface_upward_latent_heat_flux - long_name = kinematic surface upward latent heat flux - units = kg kg-1 m s-1 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [evap_ocean] standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean long_name = kinematic surface upward latent heat flux over ocean @@ -7297,13 +7317,6 @@ dimensions = (vertical_dimension_of_h2o_forcing_data) type = real kind = kind_phys -[hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux - long_name = kinematic surface upward sensible heat flux - units = K m s-1 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [hflx_ocean] standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean long_name = kinematic surface upward sensible heat flux over ocean @@ -7748,13 +7761,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[qss] - standard_name = surface_specific_humidity - long_name = surface air saturation specific humidity - units = kg kg-1 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [qss_ocean] standard_name = surface_specific_humidity_over_ocean long_name = surface air saturation specific humidity over ocean @@ -7908,6 +7914,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[save_tcp] + standard_name = air_temperature_save_from_cumulus_paramterization + long_name = air temperature after cumulus parameterization + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [save_u] standard_name = x_wind_save long_name = x-wind before entering a physics scheme diff --git a/gfsphysics/physics/GFS_debug.F90 b/gfsphysics/physics/GFS_debug.F90 index 75fa97603..1f6ae5096 100644 --- a/gfsphysics/physics/GFS_debug.F90 +++ b/gfsphysics/physics/GFS_debug.F90 @@ -172,7 +172,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank,omprank, blkno, 'Sfcprop%dt_cool ', Sfcprop%dt_cool) call print_var(mpirank,omprank, blkno, 'Sfcprop%qrain ', Sfcprop%qrain) end if - ! CCPP only + ! CCPP/RUC only !if (Model%lsm == Model%lsm_ruc) then ! call print_var(mpirank,omprank, blkno, 'Sfcprop%sh2o', Sfcprop%sh2o) ! call print_var(mpirank,omprank, blkno, 'Sfcprop%smois', Sfcprop%smois) @@ -215,6 +215,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank,omprank, blkno, 'Tbd%acv' , Tbd%acv) call print_var(mpirank,omprank, blkno, 'Tbd%acvb' , Tbd%acvb) call print_var(mpirank,omprank, blkno, 'Tbd%acvt' , Tbd%acvt) + call print_var(mpirank,omprank, blkno, 'Tbd%hpbl' , Tbd%hpbl) if (Model%do_sppt) then call print_var(mpirank,omprank, blkno, 'Tbd%dtdtr' , Tbd%dtdtr) call print_var(mpirank,omprank, blkno, 'Tbd%dtotprcp' , Tbd%dtotprcp) @@ -284,7 +285,6 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank,omprank, blkno, 'Diag%dpt2m ', Diag%dpt2m) call print_var(mpirank,omprank, blkno, 'Diag%zlvl ', Diag%zlvl) call print_var(mpirank,omprank, blkno, 'Diag%psurf ', Diag%psurf) - call print_var(mpirank,omprank, blkno, 'Diag%hpbl ', Diag%hpbl) call print_var(mpirank,omprank, blkno, 'Diag%pwat ', Diag%pwat) call print_var(mpirank,omprank, blkno, 'Diag%t1 ', Diag%t1) call print_var(mpirank,omprank, blkno, 'Diag%q1 ', Diag%q1) @@ -300,7 +300,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank,omprank, blkno, 'Diag%tdomzr ', Diag%tdomzr) call print_var(mpirank,omprank, blkno, 'Diag%tdomip ', Diag%tdomip) call print_var(mpirank,omprank, blkno, 'Diag%tdoms ', Diag%tdoms) - ! CCPP only + ! CCPP/RUC only !if (Model%lsm == Model%lsm_ruc) then ! call print_var(mpirank,omprank, blkno, 'Diag%wet1 ', Sfcprop%wetness) !else @@ -336,7 +336,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, if(Model%lradar) then call print_var(mpirank,omprank, blkno, 'Diag%refl_10cm ', Diag%refl_10cm) end if - ! CCPP only + ! CCPP/MYNNPBL only !if (Model%do_mynnedmf) then ! call print_var(mpirank,omprank, blkno, 'Diag%edmf_a ', Diag%edmf_a) ! call print_var(mpirank,omprank, blkno, 'Diag%edmf_w ', Diag%edmf_w) From 19fb05e11ace86f7aaa088984f6c376b1e1ae94d Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Fri, 3 Apr 2020 20:25:35 +0000 Subject: [PATCH 19/30] merge gsd/develop submodule ccpp/framework --- ccpp/framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/framework b/ccpp/framework index 463a72cce..78d5d5b15 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 463a72cce605ae0f8f8725574d5e3b9cf6c9d90c +Subproject commit 78d5d5b155385c2d67276b31e8154cea9bfb1d34 From 8c8137ccca79a0cabe9c35b7d9e2401fe4853d1a Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 16 Apr 2020 16:07:18 -0600 Subject: [PATCH 20/30] Update .gitmodules and submodule pointer for ccpp-physics for code review and testing --- .gitmodules | 4 ++-- ccpp/framework | 2 +- ccpp/physics | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 7b257df89..da30da663 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,5 +8,5 @@ branch = gsd/develop [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/SamuelTrahanNOAA/ccpp-physics - branch = gsd/develop + url = https://github.com/climbfuji/ccpp-physics + branch = tendencies_sam_with_dom_mods diff --git a/ccpp/framework b/ccpp/framework index 78d5d5b15..463a72cce 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 78d5d5b155385c2d67276b31e8154cea9bfb1d34 +Subproject commit 463a72cce605ae0f8f8725574d5e3b9cf6c9d90c diff --git a/ccpp/physics b/ccpp/physics index e4b80ea01..680c365db 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit e4b80ea016899c7c23fa07396bd7fcbc0195a0f9 +Subproject commit 680c365dbe4b660425b24198d743f4a7d6fa09e7 From 522342edbf042ef3a4aaa9d49aeea216792ef2b2 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 16 Apr 2020 16:11:46 -0600 Subject: [PATCH 21/30] Revert unnecessary changes made in original PR --- atmos_model.F90 | 12 - ccpp/config/ccpp_prebuild_config.py | 8 +- ccpp/driver/CCPP_driver.F90 | 5 +- ccpp/suites/suite_FV3_GFS_v15p2.xml | 11 - ccpp/suites/suite_FV3_GFS_v15plus.xml | 13 - ccpp/suites/suite_FV3_GFS_v16beta.xml | 11 - ccpp/suites/suite_FV3_GSD_v0.xml | 13 +- gfsphysics/GFS_layer/GFS_diagnostics.F90 | 538 +++++++++++------------ gfsphysics/GFS_layer/GFS_typedefs.F90 | 16 +- gfsphysics/GFS_layer/GFS_typedefs.meta | 116 +---- 10 files changed, 292 insertions(+), 451 deletions(-) diff --git a/atmos_model.F90 b/atmos_model.F90 index 6343c267c..e8cc8b832 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -297,7 +297,6 @@ subroutine update_atmos_radiation_physics (Atmos) !--- execute the IPD atmospheric setup step call mpp_clock_begin(setupClock) - #ifdef CCPP call CCPP_step (step="time_vary", nblks=Atm_block%nblks, ierr=ierr) if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP time_vary step failed') @@ -332,11 +331,6 @@ subroutine update_atmos_radiation_physics (Atmos) ! print *,'in atmos_model, after assign_importdata, rc=',rc endif -#ifdef CCPP - call CCPP_step (step="timestep_init", nblks=Atm_block%nblks, ierr=ierr) - if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP timestep_init step failed') -#endif - call mpp_clock_end(setupClock) if (mpp_pe() == mpp_root_pe() .and. debug) write(6,*) "radiation driver" @@ -400,9 +394,6 @@ subroutine update_atmos_radiation_physics (Atmos) #ifdef CCPP call CCPP_step (step="stochastics", nblks=Atm_block%nblks, ierr=ierr) if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP stochastics step failed') - - call CCPP_step (step="timestep_final", nblks=Atm_block%nblks, ierr=ierr) - if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP timestep_final step failed') #else Func0d => physics_step2 !$OMP parallel do default (none) & @@ -413,16 +404,13 @@ subroutine update_atmos_radiation_physics (Atmos) call IPD_step (IPD_Control, IPD_Data(nb:nb), IPD_Diag, IPD_Restart, IPD_func0d=Func0d) enddo #endif - call mpp_clock_end(physClock) if (chksum_debug) then if (mpp_pe() == mpp_root_pe()) print *,'PHYSICS STEP2 ', IPD_Control%kdt, IPD_Control%fhour call FV3GFS_IPD_checksum(IPD_Control, IPD_Data, Atm_block) endif - call getiauforcing(IPD_Control,IAU_data) - if (mpp_pe() == mpp_root_pe() .and. debug) write(6,*) "end of radiation and physics step" endif diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index c3f6e4846..46d6872d9 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -114,9 +114,6 @@ 'FV3/ccpp/physics/physics/mfpblt.f', 'FV3/ccpp/physics/physics/mfpbltq.f', 'FV3/ccpp/physics/physics/mfscu.f', - 'FV3/ccpp/physics/physics/total_tend.F90', - 'FV3/ccpp/physics/physics/model_tend_pre.F90', - 'FV3/ccpp/physics/physics/model_tend_post.F90', 'FV3/ccpp/physics/physics/mfscuq.f', 'FV3/ccpp/physics/physics/noahmp_tables.f90', 'FV3/ccpp/physics/physics/num_parthds.F', @@ -187,10 +184,7 @@ 'FV3/ccpp/physics/physics/gcm_shoc.F90' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/get_prs_fv3.F90' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/gfdl_cloud_microphys.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/gfdl_fv_sat_adj.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/total_tend.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/model_tend_pre.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/model_tend_post.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/gfdl_fv_sat_adj.F90' : [ 'fast_physics' ], 'FV3/ccpp/physics/physics/gscond.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/gwdc.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/gwdps.f' : [ 'slow_physics' ], diff --git a/ccpp/driver/CCPP_driver.F90 b/ccpp/driver/CCPP_driver.F90 index 0bf88b218..449aaf03c 100644 --- a/ccpp/driver/CCPP_driver.F90 +++ b/ccpp/driver/CCPP_driver.F90 @@ -49,7 +49,7 @@ module CCPP_driver ! number nthrdsX in case of non-uniform block sizes) ! !--------------------------------------------------------! logical :: non_uniform_blocks - integer :: nthrds, nthrdsX, ithread + integer :: nthrds, nthrdsX !---------------- ! Public Entities @@ -205,8 +205,7 @@ subroutine CCPP_step (step, nblks, ierr) end if ! Radiation and stochastic physics - else if (trim(step)=="radiation" .or. trim(step)=="physics" .or. trim(step)=="stochastics" & - .or. trim(step)=="timestep_init" .or. trim(step)=="timestep_final") then + else if (trim(step)=="radiation" .or. trim(step)=="physics" .or. trim(step)=="stochastics") then ! Set number of threads available to physics schemes to one, ! because threads are used on the outside for blocking diff --git a/ccpp/suites/suite_FV3_GFS_v15p2.xml b/ccpp/suites/suite_FV3_GFS_v15p2.xml index 46234fdc9..1ab234105 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2.xml @@ -15,11 +15,6 @@ GFS_phys_time_vary - - - model_tend_pre - - GFS_suite_interstitial_rad_reset @@ -95,11 +90,5 @@ GFS_stochastics - - - model_tend_post - total_tend - - diff --git a/ccpp/suites/suite_FV3_GFS_v15plus.xml b/ccpp/suites/suite_FV3_GFS_v15plus.xml index 57a0d921b..04f1d5f46 100644 --- a/ccpp/suites/suite_FV3_GFS_v15plus.xml +++ b/ccpp/suites/suite_FV3_GFS_v15plus.xml @@ -9,17 +9,14 @@ - model_tend_pre GFS_time_vary_pre GFS_rrtmg_setup GFS_rad_time_vary GFS_phys_time_vary - model_tend_post - model_tend_pre GFS_suite_interstitial_rad_reset GFS_rrtmg_pre rrtmg_sw_pre @@ -29,13 +26,10 @@ rrtmg_lw rrtmg_lw_post GFS_rrtmg_post - model_tend_post - model_tend_pre - total_tend GFS_suite_interstitial_phys_reset GFS_suite_stateout_reset get_prs_fv3 @@ -45,11 +39,9 @@ dcyc2t3 GFS_surface_composites_inter GFS_suite_interstitial_2 - model_tend_post - model_tend_pre sfc_diff GFS_surface_loop_control_part1 sfc_nst_pre @@ -58,11 +50,9 @@ lsm_noah sfc_sice GFS_surface_loop_control_part2 - model_tend_post - model_tend_pre GFS_surface_composites_post dcyc2t3_post sfc_diag @@ -93,14 +83,11 @@ gfdl_cloud_microphys GFS_MP_generic_post maximum_hourly_diagnostics - model_tend_post - model_tend_pre GFS_stochastics - model_tend_post diff --git a/ccpp/suites/suite_FV3_GFS_v16beta.xml b/ccpp/suites/suite_FV3_GFS_v16beta.xml index ede385cf0..8571ec1b4 100644 --- a/ccpp/suites/suite_FV3_GFS_v16beta.xml +++ b/ccpp/suites/suite_FV3_GFS_v16beta.xml @@ -15,11 +15,6 @@ GFS_phys_time_vary - - - model_tend_pre - - GFS_suite_interstitial_rad_reset @@ -95,11 +90,5 @@ GFS_stochastics - - - model_tend_post - total_tend - - diff --git a/ccpp/suites/suite_FV3_GSD_v0.xml b/ccpp/suites/suite_FV3_GSD_v0.xml index e572fdc39..fb4b13546 100644 --- a/ccpp/suites/suite_FV3_GSD_v0.xml +++ b/ccpp/suites/suite_FV3_GSD_v0.xml @@ -10,11 +10,6 @@ GFS_phys_time_vary - - - model_tend_pre - - GFS_suite_interstitial_rad_reset @@ -25,7 +20,7 @@ rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - sgscloud_radpre + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post @@ -95,11 +90,5 @@ GFS_stochastics - - - model_tend_post - total_tend - - diff --git a/gfsphysics/GFS_layer/GFS_diagnostics.F90 b/gfsphysics/GFS_layer/GFS_diagnostics.F90 index 7f5bddbf1..e62dbd290 100644 --- a/gfsphysics/GFS_layer/GFS_diagnostics.F90 +++ b/gfsphysics/GFS_layer/GFS_diagnostics.F90 @@ -2230,185 +2230,183 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ! if(mpp_pe()==mpp_root_pe())print *,'in gfdl_diag_register,af shum_wts,idx=',idx -!--- three-dimensional variables that need to be handled special when writing - if_ldiag3d: if(Model%ldiag3d) then - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_lw' - ExtDiag(idx)%desc = 'temperature change due to long wave radiation' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,1) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_sw' - ExtDiag(idx)%desc = 'temperature change due to short wave radiation' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,2) - enddo +!--- three-dimensional variables that need to be handled special when writing + if_ldiag3d: if(Model%ldiag3d) then + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_lw' + ExtDiag(idx)%desc = 'temperature change due to long wave radiation' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,1) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_pbl' - ExtDiag(idx)%desc = 'temperature change due to pbl' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,3) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_sw' + ExtDiag(idx)%desc = 'temperature change due to short wave radiation' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,2) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_deepcnv' - ExtDiag(idx)%desc = 'temperature change due to deep convection' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,4) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_pbl' + ExtDiag(idx)%desc = 'temperature change due to pbl' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,3) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_shlwcnv' - ExtDiag(idx)%desc = 'temperature change due to shallow convection' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,5) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_deepcnv' + ExtDiag(idx)%desc = 'temperature change due to deep convection' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,4) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_microphy' - ExtDiag(idx)%desc = 'temperature change due to micro-physics' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,6) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_shlwcnv' + ExtDiag(idx)%desc = 'temperature change due to shallow convection' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,5) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_orogwd' - ExtDiag(idx)%desc = 'temperature change due to orographic gravity wave drag' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,7) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_microphy' + ExtDiag(idx)%desc = 'temperature change due to micro-physics' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,6) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_rdamp' - ExtDiag(idx)%desc = 'temperature change due to Rayleigh damping' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,8) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'du3dt_pbl' - ExtDiag(idx)%desc = 'u wind change due to PBL' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,1) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_orogwd' + ExtDiag(idx)%desc = 'temperature change due to orographic gravity wave drag' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,7) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dv3dt_pbl' - ExtDiag(idx)%desc = 'v momentum change due to PBL' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,1) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_rdamp' + ExtDiag(idx)%desc = 'temperature change due to Rayleigh damping' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,8) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'du3dt_orogwd' - ExtDiag(idx)%desc = 'u momentum change due to orographic gravity wave drag' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,2) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_pbl' + ExtDiag(idx)%desc = 'u wind change due to PBL' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,1) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dv3dt_orogwd' - ExtDiag(idx)%desc = 'v momentum change due to orographic gravity wave drag' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,2) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_pbl' + ExtDiag(idx)%desc = 'v momentum change due to PBL' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,1) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'du3dt_deepcnv' - ExtDiag(idx)%desc = 'u momentum change due to deep convection' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,3) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_orogwd' + ExtDiag(idx)%desc = 'u momentum change due to orographic gravity wave drag' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,2) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dv3dt_deepcnv' - ExtDiag(idx)%desc = 'v momentum change due to deep convection' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,3) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_orogwd' + ExtDiag(idx)%desc = 'v momentum change due to orographic gravity wave drag' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,2) + enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_deepcnv' + ExtDiag(idx)%desc = 'u momentum change due to deep convection' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,3) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'du3dt_cnvgwd' - ExtDiag(idx)%desc = 'u momentum change due to convective gravity wave drag' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,4) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_deepcnv' + ExtDiag(idx)%desc = 'v momentum change due to deep convection' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,3) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dv3dt_cnvgwd' - ExtDiag(idx)%desc = 'v momentum change due to convective gravity wave drag' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,4) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_cnvgwd' + ExtDiag(idx)%desc = 'u momentum change due to convective gravity wave drag' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,4) + enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_cnvgwd' + ExtDiag(idx)%desc = 'v momentum change due to convective gravity wave drag' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,4) + enddo idx = idx + 1 ExtDiag(idx)%axes = 3 @@ -2458,7 +2456,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_ccpp' - ExtDiag(idx)%desc = 'cumulative change in x wind from CCPP' + ExtDiag(idx)%desc = 'cumulative change in x wind due to physics' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2469,7 +2467,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dv3dt_ccpp' - ExtDiag(idx)%desc = 'cumulative change in y wind from CCPP' + ExtDiag(idx)%desc = 'cumulative change in y wind due to physics' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2480,7 +2478,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_model' - ExtDiag(idx)%desc = 'cumulative change in x wind from model' + ExtDiag(idx)%desc = 'cumulative change in x wind due to model w/o physics' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2491,7 +2489,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dv3dt_model' - ExtDiag(idx)%desc = 'cumulative change in y wind from model' + ExtDiag(idx)%desc = 'cumulative change in y wind due to model w/o physics' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2524,7 +2522,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dt3dt_ccpp' - ExtDiag(idx)%desc = 'cumulative change in temperature from CCPP' + ExtDiag(idx)%desc = 'cumulative change in temperature due to physics' ExtDiag(idx)%unit = 'K' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2535,7 +2533,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dt3dt_model' - ExtDiag(idx)%desc = 'cumulative change in temperature from model' + ExtDiag(idx)%desc = 'cumulative change in temperature due to model w/o physics' ExtDiag(idx)%unit = 'K' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2559,7 +2557,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dq3dt_ccpp' - ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity from CCPP' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to physics' ExtDiag(idx)%unit = 'kg kg-1' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2570,7 +2568,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dq3dt_model' - ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity from model' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to model w/o physics' ExtDiag(idx)%unit = 'kg kg-1' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2589,104 +2587,104 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,12) enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_pbl' - ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to PBL' - ExtDiag(idx)%unit = 'kg kg-1' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,1) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_deepcnv' - ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to deep conv.' - ExtDiag(idx)%unit = 'kg kg-1' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,2) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_shlwcnv' - ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to shal conv.' - ExtDiag(idx)%unit = 'kg kg-1' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,3) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_microphy' - ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to microphysics' - ExtDiag(idx)%unit = 'kg kg-1' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,4) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_o3pbl' - ExtDiag(idx)%desc = 'cumulative change in ozone mixing ratio due to PBL' - ExtDiag(idx)%unit = 'kg kg-1' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,5) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_o3prodloss' - ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to production and loss rate' - ExtDiag(idx)%unit = 'kg kg-1' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,6) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_o3mix' - ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to ozone mixing ratio' - ExtDiag(idx)%unit = 'kg kg-1' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,7) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_o3temp' - ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to temperature' - ExtDiag(idx)%unit = 'kg kg-1' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,8) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_o3column' - ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to overhead ozone column' - ExtDiag(idx)%unit = 'kg kg-1' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,9) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_pbl' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to PBL' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,1) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_deepcnv' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to deep conv.' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,2) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_shlwcnv' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to shal conv.' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,3) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_microphy' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to microphysics' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,4) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3pbl' + ExtDiag(idx)%desc = 'cumulative change in ozone mixing ratio due to PBL' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,5) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3prodloss' + ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to production and loss rate' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,6) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3mix' + ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to ozone mixing ratio' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,7) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3temp' + ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to temperature' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,8) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3column' + ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to overhead ozone column' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,9) + enddo end if if_qdiag3d #endif end if if_ldiag3d diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 89c9db948..ee951fbcf 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -550,10 +550,10 @@ module GFS_typedefs real(kind=kind_phys) :: fhzero !< hours between clearing of diagnostic buckets logical :: ldiag3d !< flag for 3d diagnostic fields logical :: qdiag3d !< flag for 3d tracer diagnostic fields - logical :: flag_for_gwd_generic_tend!< true if GFS_GWD_generic should calculate tendencies - logical :: flag_for_pbl_generic_tend!< true if GFS_PBL_generic should calculate tendencies - logical :: flag_for_scnv_generic_tend!< true if GFS_DCNV_generic should calculate tendencies - logical :: flag_for_dcnv_generic_tend!< true if GFS_DCNV_generic should calculate tendencies + logical :: flag_for_gwd_generic_tend !< true if GFS_GWD_generic should calculate tendencies + logical :: flag_for_pbl_generic_tend !< true if GFS_PBL_generic should calculate tendencies + logical :: flag_for_scnv_generic_tend !< true if GFS_DCNV_generic should calculate tendencies + logical :: flag_for_dcnv_generic_tend !< true if GFS_DCNV_generic should calculate tendencies logical :: lssav !< logical flag for storing diagnostics real(kind=kind_phys) :: fhcyc !< frequency for surface data cycling (hours) integer :: thermodyn_id !< valid for GFS only for get_prs/phi @@ -1473,7 +1473,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: dv3dt (:,:,:) => null() !< v momentum change due to physics real (kind=kind_phys), pointer :: dt3dt (:,:,:) => null() !< temperature change due to physics real (kind=kind_phys), pointer :: dq3dt (:,:,:) => null() !< moisture change due to physics - real (kind=kind_phys), pointer :: tend_book(:,:,:)=>null() !< CCPP tendency storage real (kind=kind_phys), pointer :: refdmax (:) => null() !< max hourly 1-km agl reflectivity real (kind=kind_phys), pointer :: refdmax263k(:) => null() !< max hourly -10C reflectivity real (kind=kind_phys), pointer :: t02max (:) => null() !< max hourly 2m T @@ -3278,9 +3277,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & #ifdef CCPP - write(0,*) 'GOT HERE (stderr)' - print *,'GOT HERE (stdout)' - if(gwd_opt==1) then write(0,*) 'FLAG: gwd_opt==1 so gwd not generic' Model%flag_for_gwd_generic_tend=.false. @@ -5269,9 +5265,6 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%dt3dt (IM,Model%levs,12)) if (Model%qdiag3d) then allocate (Diag%dq3dt (IM,Model%levs,12)) - allocate (Diag%tend_book(IM,Model%levs,12)) - else - allocate (Diag%tend_book(IM,Model%levs,9)) endif Diag%tend_book=0 ! allocate (Diag%dq3dt (IM,Model%levs,oz_coeff+5)) @@ -5578,7 +5571,6 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%du3dt = zero Diag%dv3dt = zero Diag%dt3dt = zero - if (Model%qdiag3d) then Diag%dq3dt = zero endif diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index 60de65c75..af03a43f5 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -5445,15 +5445,15 @@ type = real kind = kind_phys [du3dt(:,:,7)] - standard_name = cumulative_change_in_x_wind_from_ccpp - long_name = cumulative change in x wind from CCPP + standard_name = cumulative_change_in_x_wind_due_to_physics + long_name = cumulative change in x wind due to physics units = m s-1 dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [du3dt(:,:,8)] - standard_name = cumulative_change_in_x_wind_from_model - long_name = cumulative change in x wind from model + standard_name = cumulative_change_in_x_wind_due_to_model_without_physics + long_name = cumulative change in x wind due to model without physics units = m s-1 dimensions = (horizontal_dimension,vertical_dimension) type = real @@ -5508,15 +5508,15 @@ type = real kind = kind_phys [dv3dt(:,:,7)] - standard_name = cumulative_change_in_y_wind_from_ccpp - long_name = cumulative change in y wind from CCPP + standard_name = cumulative_change_in_y_wind_due_to_physics + long_name = cumulative change in y wind due to physics units = m s-1 dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [dv3dt(:,:,8)] - standard_name = cumulative_change_in_y_wind_from_model - long_name = cumulative change in y wind from model + standard_name = cumulative_change_in_y_wind_due_to_model_without_physics + long_name = cumulative change in y wind due to model without physics units = m s-1 dimensions = (horizontal_dimension,vertical_dimension) type = real @@ -5592,15 +5592,15 @@ type = real kind = kind_phys [dt3dt(:,:,10)] - standard_name = cumulative_change_in_temperature_from_ccpp - long_name = cumulative change in temperature from CCPP + standard_name = cumulative_change_in_temperature_due_to_physics + long_name = cumulative change in temperature due to physics units = K dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [dt3dt(:,:,11)] - standard_name = cumulative_change_in_temperature_from_model - long_name = cumulative change in temperature from model + standard_name = cumulative_change_in_temperature_due_to_model_without_physics + long_name = cumulative change in temperature due to model without physics units = K dimensions = (horizontal_dimension,vertical_dimension) type = real @@ -5676,15 +5676,15 @@ type = real kind = kind_phys [dq3dt(:,:,10)] - standard_name = cumulative_change_in_water_vapor_specific_humidity_from_CCPP - long_name = cumulative change in water vapor specific humidity from CCPP + standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_physics + long_name = cumulative change in water vapor specific humidity due to physics units = kg kg-1 dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [dq3dt(:,:,11)] - standard_name = cumulative_change_in_water_vapor_specific_humidity_from_model - long_name = cumulative change in water vapor specific humidity from model + standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_model_without_physics + long_name = cumulative change in water vapor specific humidity due to model without physics units = kg kg-1 dimensions = (horizontal_dimension,vertical_dimension) type = real @@ -5696,90 +5696,6 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys -[tend_book(:,:,1)] - standard_name = temperature_at_start_of_ccpp - long_name = temperature at start of ccpp - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[tend_book(:,:,2)] - standard_name = temperature_at_end_of_ccpp - long_name = temperature at end of ccpp - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[tend_book(:,:,3)] - standard_name = temperature_at_total_check_point - long_name = temperature when model total is calculated in ccpp - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[tend_book(:,:,4)] - standard_name = x_wind_at_start_of_ccpp - long_name = x wind at start of ccpp - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[tend_book(:,:,5)] - standard_name = x_wind_at_end_of_ccpp - long_name = x wind at end of ccpp - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[tend_book(:,:,6)] - standard_name = x_wind_at_total_check_point - long_name = x when model total is calculated in ccpp - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[tend_book(:,:,7)] - standard_name = y_wind_at_start_of_ccpp - long_name = y wind at start of ccpp - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[tend_book(:,:,8)] - standard_name = y_wind_at_end_of_ccpp - long_name = y wind at start of ccpp - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[tend_book(:,:,9)] - standard_name = y_wind_at_total_check_point - long_name = y when model total is calculated in ccpp - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[tend_book(:,:,10)] - standard_name = water_vapor_specific_humidity_at_start_of_ccpp - long_name = water vapor specific humidity at start of ccpp - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[tend_book(:,:,11)] - standard_name = water_vapor_specific_humidity_at_end_of_ccpp - long_name = water vapor specific humidity at end of ccpp - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[tend_book(:,:,12)] - standard_name = water_vapor_specific_humidity_at_total_check_point - long_name = water vapor specific humidity when model total is calculated in ccpp - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys [refdmax] standard_name = maximum_reflectivity_at_1km_agl_over_maximum_hourly_time_interval long_name = maximum reflectivity at 1km agl over maximum hourly time interval From 66e9859776d9ebd6bb21ffd19405e21fea98a0ec Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 16 Apr 2020 16:12:23 -0600 Subject: [PATCH 22/30] gfsphysics/GFS_layer/GFS_physics_driver.F90: change case tbd% -> Tbd% --- gfsphysics/GFS_layer/GFS_physics_driver.F90 | 44 ++++++++++----------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/gfsphysics/GFS_layer/GFS_physics_driver.F90 b/gfsphysics/GFS_layer/GFS_physics_driver.F90 index a1f6b1ad2..0a189026f 100644 --- a/gfsphysics/GFS_layer/GFS_physics_driver.F90 +++ b/gfsphysics/GFS_layer/GFS_physics_driver.F90 @@ -2335,7 +2335,7 @@ subroutine GFS_physics_driver & Diag%v10m, Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflx,& evap, stress, wind, kpbl, Statein%prsi, del, Statein%prsl,& Statein%prslk, Statein%phii, Statein%phil, dtp, dusfc1, & - dvsfc1, dtsfc1, dqsfc1, dkt, tbd%hpbl, kinver, & + dvsfc1, dtsfc1, dqsfc1, dkt, Tbd%hpbl, kinver, & Model%xkzm_m, Model%xkzm_h, Model%xkzm_s, Model%xkzminv, & lprnt, ipr, me) ! if (lprnt) write(0,*)'aftmonshoc=',Statein%tgrs(ipr,:) @@ -2356,7 +2356,7 @@ subroutine GFS_physics_driver & Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflx, evap, & stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, tbd%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & kinver, Model%xkzm_m, Model%xkzm_h, Model%xkzm_s) !*## CCPP ## elseif (Model%isatmedmf == 1) then ! updated version of satmedmfvdif (May 2019) @@ -2369,7 +2369,7 @@ subroutine GFS_physics_driver & Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflx, evap, & stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, tbd%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & kinver, Model%xkzm_m, Model%xkzm_h, Model%xkzm_s, & Model%dspfac, Model%bl_upfr, Model%bl_dnfr) !*## CCPP ## @@ -2383,7 +2383,7 @@ subroutine GFS_physics_driver & Sfcprop%ffhh, Sfcprop%tsfc, qss, hflx, evap, stress, & wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, tbd%hpbl,& + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl,& gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & Model%xkzm_s, lprnt, ipr, & Model%xkzminv, Model%moninq_fac) @@ -2395,7 +2395,7 @@ subroutine GFS_physics_driver & Sfcprop%ffhh, Sfcprop%tsfc, qss, hflx, evap, stress, & wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, tbd%hpbl,& + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl,& gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & Model%xkzm_s, lprnt, ipr, & Model%xkzminv, Model%moninq_fac,islmsk) @@ -2419,7 +2419,7 @@ subroutine GFS_physics_driver & Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, qss, hflx, evap, & stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, tbd%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & Model%xkzm_s, lprnt, ipr, & Model%xkzminv, Model%moninq_fac, Model%rbcr) @@ -2431,7 +2431,7 @@ subroutine GFS_physics_driver & Sfcprop%tsfc, qss, hflx, evap, stress, wind, kpbl, & Statein%prsi, del, Statein%prsl, Statein%prslk, & Statein%phii, Statein%phil, dtp, dusfc1, dvsfc1, & - dtsfc1, dqsfc1, tbd%hpbl, gamt, gamq, dkt, kinver, & + dtsfc1, dqsfc1, Tbd%hpbl, gamt, gamq, dkt, kinver, & Model%xkzm_m, Model%xkzm_h) else call moninp(ix, im, levs, nvdiff, dvdt, dudt, dtdt, dqdt, & @@ -2440,7 +2440,7 @@ subroutine GFS_physics_driver & Sfcprop%tsfc, qss, hflx, evap, stress, wind, kpbl, & Statein%prsi, del, Statein%prsl, Statein%phii, & Statein%phil, dtp, dusfc1, dvsfc1, dtsfc1, dqsfc1, & - tbd%hpbl, gamt, gamq, dkt, Model%xkzm_m, Model%xkzm_h) + Tbd%hpbl, gamt, gamq, dkt, Model%xkzm_m, Model%xkzm_h) endif endif ! end if_hybedmf @@ -2593,7 +2593,7 @@ subroutine GFS_physics_driver & Diag%v10m, Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflx, & evap, stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, dusfc1, & - dvsfc1, dtsfc1, dqsfc1, dkt, tbd%hpbl, kinver, & + dvsfc1, dtsfc1, dqsfc1, dkt, Tbd%hpbl, kinver, & Model%xkzm_m, Model%xkzm_h, Model%xkzm_s, Model%xkzminv, & lprnt, ipr, me) !*## CCPP ## @@ -2609,7 +2609,7 @@ subroutine GFS_physics_driver & Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflx, evap, & stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, tbd%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & kinver, Model%xkzm_m, Model%xkzm_h, Model%xkzm_s) !*## CCPP ## elseif (Model%isatmedmf == 1) then ! updated version of satmedmfvdif (May 2019) @@ -2622,7 +2622,7 @@ subroutine GFS_physics_driver & Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflx, evap, & stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, tbd%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & kinver, Model%xkzm_m, Model%xkzm_h, Model%xkzm_s, & Model%dspfac, Model%bl_upfr, Model%bl_dnfr) !*## CCPP ## @@ -2638,7 +2638,7 @@ subroutine GFS_physics_driver & Sfcprop%ffhh, Sfcprop%tsfc, qss, hflx, evap, stress, & wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, tbd%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & Model%xkzm_s, lprnt, ipr, & Model%xkzminv, Model%moninq_fac) @@ -2652,7 +2652,7 @@ subroutine GFS_physics_driver & Sfcprop%ffhh, Sfcprop%tsfc, qss, hflx, evap, stress, & wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, tbd%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & Model%xkzm_s, lprnt, ipr, & Model%xkzminv, Model%moninq_fac,islmsk) @@ -2664,7 +2664,7 @@ subroutine GFS_physics_driver & Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, qss, hflx, evap, & stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, tbd%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & Model%xkzm_s, lprnt, ipr, & Model%xkzminv, Model%moninq_fac, Model%rbcr) @@ -2676,7 +2676,7 @@ subroutine GFS_physics_driver & Sfcprop%tsfc, qss, hflx, evap, stress, wind, kpbl, & Statein%prsi, del, Statein%prsl, Statein%prslk, & Statein%phii, Statein%phil, dtp, dusfc1, dvsfc1, & - dtsfc1, dqsfc1, tbd%hpbl, gamt, gamq, dkt, kinver, & + dtsfc1, dqsfc1, Tbd%hpbl, gamt, gamq, dkt, kinver, & Model%xkzm_m, Model%xkzm_h) else call moninp(ix, im, levs, nvdiff, dvdt, dudt, dtdt, dvdftra, & @@ -2685,7 +2685,7 @@ subroutine GFS_physics_driver & Sfcprop%tsfc, qss, hflx, evap, stress, wind, kpbl, & Statein%prsi, del, Statein%prsl, Statein%phii, & Statein%phil, dtp, dusfc1, dvsfc1, dtsfc1, dqsfc1, & - tbd%hpbl, gamt, gamq, dkt, Model%xkzm_m, Model%xkzm_h) + Tbd%hpbl, gamt, gamq, dkt, Model%xkzm_m, Model%xkzm_h) endif endif ! end if_satmedmf @@ -3615,7 +3615,7 @@ subroutine GFS_physics_driver & ! if (lprnt) write(0,*)'aftshocgq0=',Stateout%gq0(ipr,1:60,1) ! if (lprnt) write(0,*)' aft shoc tke=',clw(ipr,1:25,ntk), & ! &' kdt=',kdt,'xlon=',grid%xlon(ipr),' xlat=',grid%xlat(ipr) -! if (lprnt) write(0,*)' aftshoccld=',tbd%phy_f3d(ipr,:,ntot3d-2)*100 +! if (lprnt) write(0,*)' aftshoccld=',Tbd%phy_f3d(ipr,:,ntot3d-2)*100 ! if (lprnt) write(0,*)' aftshocice=',clw(ipr,:,1) ! if (lprnt) write(0,*)' aftshocwat=',clw(ipr,:,2) ! write(1000+me,*)' at latitude = ',lat @@ -4265,7 +4265,7 @@ subroutine GFS_physics_driver & Statein%pgr, Statein%phil, clw, Stateout%gq0, & Stateout%gt0, Stateout%gu0, Stateout%gv0, rain1, & kbot, ktop, kcnv, islmsk, Statein%vvl, ncld, & - tbd%hpbl, hflx, evap, ud_mf, dt_mf, cnvw, cnvc, & + Tbd%hpbl, hflx, evap, ud_mf, dt_mf, cnvw, cnvc, & Model%clam_shal, Model%c0s_shal, Model%c1_shal, & Model%pgcon_shal) !*## CCPP ## @@ -4305,7 +4305,7 @@ subroutine GFS_physics_driver & Stateout%gq0(:,:,1), Stateout%gt0, & Stateout%gu0, Stateout%gv0, Model%fscav, & rain1, kbot, ktop, kcnv, islmsk, garea, & - Statein%vvl, ncld, tbd%hpbl, ud_mf, & + Statein%vvl, ncld, Tbd%hpbl, ud_mf, & dt_mf, cnvw, cnvc, & Model%clam_shal, Model%c0s_shal, Model%c1_shal, & Model%pgcon_shal, Model%asolfac_shal) @@ -4892,7 +4892,7 @@ subroutine GFS_physics_driver & ! if (lprnt) write(0,*)' qsnwb=',qsnw(ipr,:),' kdt=',kdt ! if (lprnt) write(0,*)' qglb=',qgl(ipr,:),' kdt=',kdt ! if (lprnt) write(0,*)' rhc=',rhc(ipr,:),' kdt=',kdt,' kk=',kk -! if (lprnt) write(0,*)' cloudsb=',tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt +! if (lprnt) write(0,*)' cloudsb=',Tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt ! if (lprnt) write(0,*)' cloudsb=',Tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt ! if (lprnt) write(0,*)' clcn=',clcn(ipr,:)*100,' kdt=',kdt ! txa(:,:) = Stateout%gq0(:,:,1) @@ -4947,7 +4947,7 @@ subroutine GFS_physics_driver & ! if (lprnt) write(0,*)' clw1aft=',stateout%gq0(ipr,:,ntiw),' kdt=',kdt ! if (ntgl > 0 .and. lprnt) & ! write(0,*)' cgw1aft=',stateout%gq0(ipr,:,ntgl),' kdt=',kdt -! if (lprnt) write(0,*)' cloudsm=',tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt +! if (lprnt) write(0,*)' cloudsm=',Tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt ! if (lprnt) write(0,*)' clw2aft=',stateout%gq0(ipr,:,ntcw),' kdt=',kdt ! if (lprnt) write(0,*)' qrna=',qrn(ipr,:),' kdt=',kdt ! if (lprnt) write(0,*)' qsnwa=',qsnw(ipr,:),' kdt=',kdt @@ -4991,7 +4991,7 @@ subroutine GFS_physics_driver & !*## CCPP ## endif -! if (lprnt) write(0,*)' cloudsm=',tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt +! if (lprnt) write(0,*)' cloudsm=',Tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt ! if (lprnt) write(0,*)' clw2aft=',stateout%gq0(ipr,:,ntcw),' kdt=',kdt ! if (lprnt) write(0,*)' qrna=',qrn(ipr,:),' kdt=',kdt ! if (lprnt) write(0,*)' qsnwa=',qsnw(ipr,:),' kdt=',kdt From fed81f929895a4c4cb86c6bc16fef6fb0243cde9 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 16 Apr 2020 16:13:10 -0600 Subject: [PATCH 23/30] Bugfix for several suite definition files: rename sgscloud_radpre to sgscloud_radpost --- ccpp/suites/suite_FV3_GFS_v15_mynn.xml | 2 +- ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml | 2 +- ccpp/suites/suite_FV3_GSD_SAR.xml | 2 +- ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ccpp/suites/suite_FV3_GFS_v15_mynn.xml b/ccpp/suites/suite_FV3_GFS_v15_mynn.xml index 5ee55cda7..02f64bb0c 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_mynn.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_mynn.xml @@ -25,7 +25,7 @@ rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - sgscloud_radpre + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post diff --git a/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml b/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml index de709d38a..8feae747b 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml @@ -20,7 +20,7 @@ rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - sgscloud_radpre + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post diff --git a/ccpp/suites/suite_FV3_GSD_SAR.xml b/ccpp/suites/suite_FV3_GSD_SAR.xml index e4d619abb..e20104229 100644 --- a/ccpp/suites/suite_FV3_GSD_SAR.xml +++ b/ccpp/suites/suite_FV3_GSD_SAR.xml @@ -20,7 +20,7 @@ rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - sgscloud_radpre + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post diff --git a/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml b/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml index 26cff57a6..22e354a1a 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml +++ b/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml @@ -20,7 +20,7 @@ rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - sgscloud_radpre + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post From 68d403311118597184debb4d8d8d9c94a30be126 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 16 Apr 2020 17:12:33 -0600 Subject: [PATCH 24/30] Update standard names and descriptions as per code review, add missing tendency in GFS_diagnostics.F90 --- ccpp/physics | 2 +- gfsphysics/GFS_layer/GFS_diagnostics.F90 | 216 ++++++++++++----------- gfsphysics/GFS_layer/GFS_typedefs.meta | 16 +- 3 files changed, 123 insertions(+), 111 deletions(-) diff --git a/ccpp/physics b/ccpp/physics index 680c365db..5e990730c 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 680c365dbe4b660425b24198d743f4a7d6fa09e7 +Subproject commit 5e990730cbd83250e5fd6cc1853a38557a18aec7 diff --git a/gfsphysics/GFS_layer/GFS_diagnostics.F90 b/gfsphysics/GFS_layer/GFS_diagnostics.F90 index e62dbd290..ec0e26591 100644 --- a/gfsphysics/GFS_layer/GFS_diagnostics.F90 +++ b/gfsphysics/GFS_layer/GFS_diagnostics.F90 @@ -2235,7 +2235,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dt3dt_lw' - ExtDiag(idx)%desc = 'temperature change due to long wave radiation' + ExtDiag(idx)%desc = 'cumulative change in temperature due to long wave radiation' ExtDiag(idx)%unit = 'K' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2246,7 +2246,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dt3dt_sw' - ExtDiag(idx)%desc = 'temperature change due to short wave radiation' + ExtDiag(idx)%desc = 'cumulative change in temperature due to short wave radiation' ExtDiag(idx)%unit = 'K' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2257,7 +2257,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dt3dt_pbl' - ExtDiag(idx)%desc = 'temperature change due to pbl' + ExtDiag(idx)%desc = 'cumulative change in temperature due to PBL' ExtDiag(idx)%unit = 'K' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2268,7 +2268,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dt3dt_deepcnv' - ExtDiag(idx)%desc = 'temperature change due to deep convection' + ExtDiag(idx)%desc = 'cumulative change in temperature due to deep convection' ExtDiag(idx)%unit = 'K' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2278,8 +2278,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_shlwcnv' - ExtDiag(idx)%desc = 'temperature change due to shallow convection' + ExtDiag(idx)%name = 'dt3dt_shalcnv' + ExtDiag(idx)%desc = 'cumulative change in temperature due to shallow convection' ExtDiag(idx)%unit = 'K' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2289,8 +2289,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_microphy' - ExtDiag(idx)%desc = 'temperature change due to micro-physics' + ExtDiag(idx)%name = 'dt3dt_mp' + ExtDiag(idx)%desc = 'cumulative change in temperature due to microphysics' ExtDiag(idx)%unit = 'K' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2301,7 +2301,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dt3dt_orogwd' - ExtDiag(idx)%desc = 'temperature change due to orographic gravity wave drag' + ExtDiag(idx)%desc = 'cumulative change in temperature due to orographic gravity wave drag' ExtDiag(idx)%unit = 'K' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2312,7 +2312,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dt3dt_rdamp' - ExtDiag(idx)%desc = 'temperature change due to Rayleigh damping' + ExtDiag(idx)%desc = 'cumulative change in temperature due to Rayleigh damping' ExtDiag(idx)%unit = 'K' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2320,10 +2320,54 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,8) enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_cnvgwd' + ExtDiag(idx)%desc = 'cumulative change in temperature due to convective gravity wave drag' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,9) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_physics' + ExtDiag(idx)%desc = 'cumulative change in temperature due to physics' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,10) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_model' + ExtDiag(idx)%desc = 'cumulative change in temperature due to model w/o physics' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,11) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_total' + ExtDiag(idx)%desc = 'total cumulative temperature change' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,12) + enddo + idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_pbl' - ExtDiag(idx)%desc = 'u wind change due to PBL' + ExtDiag(idx)%desc = 'cumulative change in u momentum due to PBL' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2334,7 +2378,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dv3dt_pbl' - ExtDiag(idx)%desc = 'v momentum change due to PBL' + ExtDiag(idx)%desc = 'cumulative change in v momentum due to PBL' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2345,7 +2389,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_orogwd' - ExtDiag(idx)%desc = 'u momentum change due to orographic gravity wave drag' + ExtDiag(idx)%desc = 'cumulative change in u momentum due to orographic gravity wave drag' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2356,7 +2400,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dv3dt_orogwd' - ExtDiag(idx)%desc = 'v momentum change due to orographic gravity wave drag' + ExtDiag(idx)%desc = 'cumulative change in v momentum due to orographic gravity wave drag' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2367,7 +2411,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_deepcnv' - ExtDiag(idx)%desc = 'u momentum change due to deep convection' + ExtDiag(idx)%desc = 'cumulative change in u momentum due to deep convection' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2378,7 +2422,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dv3dt_deepcnv' - ExtDiag(idx)%desc = 'v momentum change due to deep convection' + ExtDiag(idx)%desc = 'cumulative change in v momentum due to deep convection' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2389,7 +2433,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_cnvgwd' - ExtDiag(idx)%desc = 'u momentum change due to convective gravity wave drag' + ExtDiag(idx)%desc = 'cumulative change in u momentum due to convective gravity wave drag' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2400,7 +2444,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dv3dt_cnvgwd' - ExtDiag(idx)%desc = 'v momentum change due to convective gravity wave drag' + ExtDiag(idx)%desc = 'cumulative change in v momentum due to convective gravity wave drag' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2411,7 +2455,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_rdamp' - ExtDiag(idx)%desc = 'u momentum change due to Rayleigh damping' + ExtDiag(idx)%desc = 'cumulative change in u momentum due to Rayleigh damping' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2422,7 +2466,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dv3dt_damp' - ExtDiag(idx)%desc = 'v momentum change due to Rayleigh damping' + ExtDiag(idx)%desc = 'cumulative change in v momentum due to Rayleigh damping' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2433,8 +2477,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'du3dt_shlwcnv' - ExtDiag(idx)%desc = 'u momentum change due to shal conv.' + ExtDiag(idx)%name = 'du3dt_shalcnv' + ExtDiag(idx)%desc = 'cumulative change in u momentum due to shallow convection' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2444,8 +2488,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dv3dt_shlwcnv' - ExtDiag(idx)%desc = 'v momentum change due to shal conv.' + ExtDiag(idx)%name = 'dv3dt_shalcnv' + ExtDiag(idx)%desc = 'cumulative change in v momentum due to shallow convection' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2455,8 +2499,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'du3dt_ccpp' - ExtDiag(idx)%desc = 'cumulative change in x wind due to physics' + ExtDiag(idx)%name = 'du3dt_physics' + ExtDiag(idx)%desc = 'cumulative change in u momentum due to physics' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2466,8 +2510,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dv3dt_ccpp' - ExtDiag(idx)%desc = 'cumulative change in y wind due to physics' + ExtDiag(idx)%name = 'dv3dt_physics' + ExtDiag(idx)%desc = 'cumulative change in v momentum due to physics' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2478,7 +2522,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_model' - ExtDiag(idx)%desc = 'cumulative change in x wind due to model w/o physics' + ExtDiag(idx)%desc = 'cumulative change in u momentum due to model w/o physics' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2489,7 +2533,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dv3dt_model' - ExtDiag(idx)%desc = 'cumulative change in y wind due to model w/o physics' + ExtDiag(idx)%desc = 'cumulative change in v momentum due to model w/o physics' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2500,7 +2544,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_total' - ExtDiag(idx)%desc = 'cumulative change in x wind' + ExtDiag(idx)%desc = 'total cumulative u momentum change' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2511,7 +2555,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dv3dt_total' - ExtDiag(idx)%desc = 'cumulative change in y wind' + ExtDiag(idx)%desc = 'total cumulative v momentum change' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2519,74 +2563,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,9) enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_ccpp' - ExtDiag(idx)%desc = 'cumulative change in temperature due to physics' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,10) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_model' - ExtDiag(idx)%desc = 'cumulative change in temperature due to model w/o physics' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,11) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_total' - ExtDiag(idx)%desc = 'cumulative change in temperature' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,12) - enddo - #ifdef CCPP if_qdiag3d: if(Model%qdiag3d) then - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_ccpp' - ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to physics' - ExtDiag(idx)%unit = 'kg kg-1' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,10) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_model' - ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to model w/o physics' - ExtDiag(idx)%unit = 'kg kg-1' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,11) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_total' - ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity' - ExtDiag(idx)%unit = 'kg kg-1' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,12) - enddo - idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dq3dt_pbl' @@ -2601,7 +2579,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'dq3dt_deepcnv' - ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to deep conv.' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to deep convection' ExtDiag(idx)%unit = 'kg kg-1' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2611,8 +2589,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_shlwcnv' - ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to shal conv.' + ExtDiag(idx)%name = 'dq3dt_shalcnv' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to shallow convection' ExtDiag(idx)%unit = 'kg kg-1' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2622,7 +2600,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_microphy' + ExtDiag(idx)%name = 'dq3dt_mp' ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to microphysics' ExtDiag(idx)%unit = 'kg kg-1' ExtDiag(idx)%mod_name = 'gfs_phys' @@ -2686,6 +2664,40 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,9) enddo end if if_qdiag3d + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_physics' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to physics' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,10) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_model' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to model w/o physics' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,11) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_total' + ExtDiag(idx)%desc = 'total cumulative change in water vapor specific humidity' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,12) + enddo + #endif end if if_ldiag3d diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index af03a43f5..62c6a3938 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -1969,25 +1969,25 @@ dimensions = () type = logical [flag_for_gwd_generic_tend] - standard_name = true_if_GFS_GWD_generic_should_calculate_tendencies + standard_name = flag_for_generic_gravity_wave_drag_tendency long_name = true if GFS_GWD_generic should calculate tendencies units = flag dimensions = () type = logical [flag_for_pbl_generic_tend] - standard_name = true_if_GFS_PBL_generic_should_calculate_tendencies + standard_name = flag_for_generic_planetary_boundary_layer_tendency long_name = true if GFS_PBL_generic should calculate tendencies units = flag dimensions = () type = logical [flag_for_dcnv_generic_tend] - standard_name = true_if_GFS_DCNV_generic_should_calculate_tendencies + standard_name = flag_for_generic_deep_convection_tendency long_name = true if GFS_DCNV_generic should calculate tendencies units = flag dimensions = () type = logical [flag_for_scnv_generic_tend] - standard_name = true_if_GFS_SCNV_generic_should_calculate_tendencies + standard_name = flag_for_generic_shallow_convection_tendency long_name = true if GFS_SCNV_generic should calculate tendencies units = flag dimensions = () @@ -5438,7 +5438,7 @@ type = real kind = kind_phys [du3dt(:,:,6)] - standard_name = cumulative_change_in_x_wind_due_to_shal_convection + standard_name = cumulative_change_in_x_wind_due_to_shallow_convection long_name = cumulative change in x wind due to shallow convection units = m s-1 dimensions = (horizontal_dimension,vertical_dimension) @@ -5501,7 +5501,7 @@ type = real kind = kind_phys [dv3dt(:,:,6)] - standard_name = cumulative_change_in_y_wind_due_to_shal_convection + standard_name = cumulative_change_in_y_wind_due_to_shallow_convection long_name = cumulative change in y wind due to shallow convection units = m s-1 dimensions = (horizontal_dimension,vertical_dimension) @@ -5557,7 +5557,7 @@ type = real kind = kind_phys [dt3dt(:,:,5)] - standard_name = cumulative_change_in_temperature_due_to_shal_convection + standard_name = cumulative_change_in_temperature_due_to_shallow_convection long_name = cumulative change in temperature due to shallow convection units = K dimensions = (horizontal_dimension,vertical_dimension) @@ -5627,7 +5627,7 @@ type = real kind = kind_phys [dq3dt(:,:,3)] - standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_shal_convection + standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_shallow_convection long_name = cumulative change in water vapor specific humidity due to shallow convection units = kg kg-1 dimensions = (horizontal_dimension,vertical_dimension) From 00953fd92bf8b9a1b02d38abee823c8ddec677eb Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 17 Apr 2020 17:01:06 -0600 Subject: [PATCH 25/30] Calculate non-physics tendencies in atmos_model.F90, configure output of individual physics tendencies, combined physics tendencies and non-physics tendencies --- atmos_model.F90 | 38 ++++++++++++- ccpp/config/ccpp_prebuild_config.py | 1 + ccpp/physics | 2 +- ccpp/suites/suite_FV3_GSD_v0.xml | 1 + gfsphysics/GFS_layer/GFS_diagnostics.F90 | 72 ++++++++---------------- gfsphysics/GFS_layer/GFS_typedefs.F90 | 9 ++- gfsphysics/GFS_layer/GFS_typedefs.meta | 48 ++++++---------- 7 files changed, 85 insertions(+), 86 deletions(-) diff --git a/atmos_model.F90 b/atmos_model.F90 index e8cc8b832..70c27fa83 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -278,6 +278,28 @@ subroutine update_atmos_radiation_physics (Atmos) call atmos_phys_driver_statein (IPD_data, Atm_block, flip_vc) call mpp_clock_end(getClock) + ! Calculate total non-physics tendencies by substracting old IPD Stateout + ! variables from new/updated IPD Statein variables (gives the tendencies + ! due to anything else than physics) + if (IPD_Control%ldiag3d) then + do nb = 1,Atm_block%nblks + IPD_Data(nb)%Intdiag%du3dt(:,:,8) = IPD_Data(nb)%Intdiag%du3dt(:,:,8) & + + (IPD_Data(nb)%Statein%ugrs - IPD_Data(nb)%Stateout%gu0) + IPD_Data(nb)%Intdiag%dv3dt(:,:,8) = IPD_Data(nb)%Intdiag%dv3dt(:,:,8) & + + (IPD_Data(nb)%Statein%vgrs - IPD_Data(nb)%Stateout%gv0) + IPD_Data(nb)%Intdiag%dt3dt(:,:,11) = IPD_Data(nb)%Intdiag%dt3dt(:,:,11) & + + (IPD_Data(nb)%Statein%tgrs - IPD_Data(nb)%Stateout%gt0) + enddo + if (IPD_Control%qdiag3d) then + do nb = 1,Atm_block%nblks + IPD_Data(nb)%Intdiag%dq3dt(:,:,12) = IPD_Data(nb)%Intdiag%dq3dt(:,:,12) & + + (IPD_Data(nb)%Statein%qgrs(:,:,IPD_Control%ntqv) - IPD_Data(nb)%Stateout%gq0(:,:,IPD_Control%ntqv)) + IPD_Data(nb)%Intdiag%dq3dt(:,:,13) = IPD_Data(nb)%Intdiag%dq3dt(:,:,13) & + + (IPD_Data(nb)%Statein%qgrs(:,:,IPD_Control%ntoz) - IPD_Data(nb)%Stateout%gq0(:,:,IPD_Control%ntoz)) + enddo + endif + endif + !--- if dycore only run, set up the dummy physics output state as the input state if (dycore_only) then do nb = 1,Atm_block%nblks @@ -461,7 +483,7 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) integer :: bdat(8), cdat(8) integer :: ntracers, maxhf, maxh character(len=32), allocatable, target :: tracer_names(:) - integer :: nthrds + integer :: nthrds, nb !----------------------------------------------------------------------- @@ -678,10 +700,22 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) call FV3GFS_restart_read (IPD_Data, IPD_Restart, Atm_block, IPD_Control, Atmos%domain) #endif -#ifdef CCPP ! Populate the IPD_Data%Statein container with the prognostic state ! in Atm_block, which contains the initial conditions/restart data. call atmos_phys_driver_statein (IPD_data, Atm_block, flip_vc) + + ! When asked to calculate 3-dim. tendencies, set Stateout variables to + ! Statein variables here in order to capture the first call to dycore + if (IPD_Control%ldiag3d) then + do nb = 1,Atm_block%nblks + IPD_Data(nb)%Stateout%gu0 = IPD_Data(nb)%Statein%ugrs + IPD_Data(nb)%Stateout%gv0 = IPD_Data(nb)%Statein%vgrs + IPD_Data(nb)%Stateout%gt0 = IPD_Data(nb)%Statein%tgrs + IPD_Data(nb)%Stateout%gq0 = IPD_Data(nb)%Statein%qgrs + enddo + endif + +#ifdef CCPP ! Initialize the CCPP framework call CCPP_step (step="init", nblks=Atm_block%nblks, ierr=ierr) if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP init step failed') diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 46d6872d9..c3402bcdd 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -217,6 +217,7 @@ 'FV3/ccpp/physics/physics/ozphys.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/ozphys_2015.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/precpd.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/phys_tend.F90' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/radlw_main.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/radsw_main.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/rayleigh_damp.f' : [ 'slow_physics' ], diff --git a/ccpp/physics b/ccpp/physics index 5e990730c..43f107ca3 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 5e990730cbd83250e5fd6cc1853a38557a18aec7 +Subproject commit 43f107ca315d9c021d2cebdd035e931638a36e53 diff --git a/ccpp/suites/suite_FV3_GSD_v0.xml b/ccpp/suites/suite_FV3_GSD_v0.xml index fb4b13546..9a63c666c 100644 --- a/ccpp/suites/suite_FV3_GSD_v0.xml +++ b/ccpp/suites/suite_FV3_GSD_v0.xml @@ -83,6 +83,7 @@ GFS_MP_generic_post cu_gf_driver_post maximum_hourly_diagnostics + phys_tend diff --git a/gfsphysics/GFS_layer/GFS_diagnostics.F90 b/gfsphysics/GFS_layer/GFS_diagnostics.F90 index ec0e26591..9733b8b32 100644 --- a/gfsphysics/GFS_layer/GFS_diagnostics.F90 +++ b/gfsphysics/GFS_layer/GFS_diagnostics.F90 @@ -2333,7 +2333,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_physics' + ExtDiag(idx)%name = 'dt3dt_phys' ExtDiag(idx)%desc = 'cumulative change in temperature due to physics' ExtDiag(idx)%unit = 'K' ExtDiag(idx)%mod_name = 'gfs_phys' @@ -2344,8 +2344,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_model' - ExtDiag(idx)%desc = 'cumulative change in temperature due to model w/o physics' + ExtDiag(idx)%name = 'dt3dt_nophys' + ExtDiag(idx)%desc = 'cumulative change in temperature due to non-physics processes' ExtDiag(idx)%unit = 'K' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2353,17 +2353,6 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,11) enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_total' - ExtDiag(idx)%desc = 'total cumulative temperature change' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,12) - enddo - idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'du3dt_pbl' @@ -2499,7 +2488,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'du3dt_physics' + ExtDiag(idx)%name = 'du3dt_phys' ExtDiag(idx)%desc = 'cumulative change in u momentum due to physics' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' @@ -2510,7 +2499,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dv3dt_physics' + ExtDiag(idx)%name = 'dv3dt_phys' ExtDiag(idx)%desc = 'cumulative change in v momentum due to physics' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' @@ -2521,8 +2510,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'du3dt_model' - ExtDiag(idx)%desc = 'cumulative change in u momentum due to model w/o physics' + ExtDiag(idx)%name = 'du3dt_nophys' + ExtDiag(idx)%desc = 'cumulative change in u momentum due to non-physics processes' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2532,8 +2521,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dv3dt_model' - ExtDiag(idx)%desc = 'cumulative change in v momentum due to model w/o physics' + ExtDiag(idx)%name = 'dv3dt_nophys' + ExtDiag(idx)%desc = 'cumulative change in v momentum due to non-physics processes' ExtDiag(idx)%unit = 'm/s' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2541,28 +2530,6 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,8) enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'du3dt_total' - ExtDiag(idx)%desc = 'total cumulative u momentum change' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,9) - enddo - - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dv3dt_total' - ExtDiag(idx)%desc = 'total cumulative v momentum change' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,9) - enddo - #ifdef CCPP if_qdiag3d: if(Model%qdiag3d) then idx = idx + 1 @@ -2667,7 +2634,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_physics' + ExtDiag(idx)%name = 'dq3dt_phys' ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to physics' ExtDiag(idx)%unit = 'kg kg-1' ExtDiag(idx)%mod_name = 'gfs_phys' @@ -2678,8 +2645,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_model' - ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to model w/o physics' + ExtDiag(idx)%name = 'dq3dt_o3phys' + ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to physics' ExtDiag(idx)%unit = 'kg kg-1' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2689,8 +2656,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dq3dt_total' - ExtDiag(idx)%desc = 'total cumulative change in water vapor specific humidity' + ExtDiag(idx)%name = 'dq3dt_nophys' + ExtDiag(idx)%desc = 'cumulative change in water vapor specific humidity due to non-physics processes' ExtDiag(idx)%unit = 'kg kg-1' ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) @@ -2698,6 +2665,17 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,12) enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3nophys' + ExtDiag(idx)%desc = 'cumulative change in ozone concentration due to non-physics processes' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,13) + enddo + #endif end if if_ldiag3d diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index ee951fbcf..81c86c838 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -5260,13 +5260,12 @@ subroutine diag_create (Diag, IM, Model) !--- 3D diagnostics if (Model%ldiag3d) then - allocate (Diag%du3dt (IM,Model%levs,9)) - allocate (Diag%dv3dt (IM,Model%levs,9)) - allocate (Diag%dt3dt (IM,Model%levs,12)) + allocate (Diag%du3dt (IM,Model%levs,8)) + allocate (Diag%dv3dt (IM,Model%levs,8)) + allocate (Diag%dt3dt (IM,Model%levs,11)) if (Model%qdiag3d) then - allocate (Diag%dq3dt (IM,Model%levs,12)) + allocate (Diag%dq3dt (IM,Model%levs,13)) endif - Diag%tend_book=0 ! allocate (Diag%dq3dt (IM,Model%levs,oz_coeff+5)) !--- needed to allocate GoCart coupling fields ! allocate (Diag%upd_mf (IM,Model%levs)) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index 62c6a3938..4ebf4633b 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -5452,15 +5452,8 @@ type = real kind = kind_phys [du3dt(:,:,8)] - standard_name = cumulative_change_in_x_wind_due_to_model_without_physics - long_name = cumulative change in x wind due to model without physics - units = m s-1 - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[du3dt(:,:,9)] - standard_name = cumulative_change_in_x_wind - long_name = cumulative change in x wind + standard_name = cumulative_change_in_x_wind_due_to_non_physics_processes + long_name = cumulative change in x wind due to non-physics processes units = m s-1 dimensions = (horizontal_dimension,vertical_dimension) type = real @@ -5515,15 +5508,8 @@ type = real kind = kind_phys [dv3dt(:,:,8)] - standard_name = cumulative_change_in_y_wind_due_to_model_without_physics - long_name = cumulative change in y wind due to model without physics - units = m s-1 - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[dv3dt(:,:,9)] - standard_name = cumulative_change_in_y_wind - long_name = cumulative change in y wind + standard_name = cumulative_change_in_y_wind_due_to_non_physics_processes + long_name = cumulative change in y wind due to non-physics processes units = m s-1 dimensions = (horizontal_dimension,vertical_dimension) type = real @@ -5599,15 +5585,8 @@ type = real kind = kind_phys [dt3dt(:,:,11)] - standard_name = cumulative_change_in_temperature_due_to_model_without_physics - long_name = cumulative change in temperature due to model without physics - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[dt3dt(:,:,12)] - standard_name = cumulative_change_in_temperature - long_name = cumulative change in temperature + standard_name = cumulative_change_in_temperature_due_to_non_physics_processes + long_name = cumulative change in temperature due to non-physics processed units = K dimensions = (horizontal_dimension,vertical_dimension) type = real @@ -5683,15 +5662,22 @@ type = real kind = kind_phys [dq3dt(:,:,11)] - standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_model_without_physics - long_name = cumulative change in water vapor specific humidity due to model without physics + standard_name = cumulative_change_in_ozone_concentration_due_to_physics + long_name = cumulative change in ozone concentration due to physics units = kg kg-1 dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [dq3dt(:,:,12)] - standard_name = cumulative_change_in_water_vapor_specific_humidity - long_name = cumulative change in water vapor specific humidity + standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_non_physics_processes + long_name = cumulative change in water vapor specific humidity due to non-physics processes + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dq3dt(:,:,13)] + standard_name = cumulative_change_in_ozone_concentration_due_to_non_physics_processes + long_name = cumulative change in ozone_concentration due to non-physics processes units = kg kg-1 dimensions = (horizontal_dimension,vertical_dimension) type = real From 2f781453b02a6bec77c67a2eae9dda20e7a62b13 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 17 Apr 2020 17:15:01 -0600 Subject: [PATCH 26/30] gfsphysics/GFS_layer/GFS_typedefs.F90: qdiag3d requires ldiag3d --- gfsphysics/GFS_layer/GFS_typedefs.F90 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 81c86c838..f1d02c8f8 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -3270,6 +3270,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%fhzero = fhzero Model%ldiag3d = ldiag3d Model%qdiag3d = qdiag3d + if (Model%qdiag3d .and. .not. Model%ldiag3d) then + write(0,*) 'Logic error in GFS_typedefs.F90: qdiag3d requires ldiag3d' + stop + endif Model%flag_for_gwd_generic_tend = .true. Model%flag_for_pbl_generic_tend = .true. Model%flag_for_scnv_generic_tend = .true. From 9406b7a26fb7d08f07a85c6ea863dde33bb1a103 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 17 Apr 2020 19:43:33 -0600 Subject: [PATCH 27/30] Calculate non-physics tendencies before radiation, and physics tendencies at the end of stochstastic_physics --- atmos_model.F90 | 44 ++++++++++++++++---------------- ccpp/suites/suite_FV3_GSD_v0.xml | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/atmos_model.F90 b/atmos_model.F90 index 70c27fa83..d32077bed 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -278,28 +278,6 @@ subroutine update_atmos_radiation_physics (Atmos) call atmos_phys_driver_statein (IPD_data, Atm_block, flip_vc) call mpp_clock_end(getClock) - ! Calculate total non-physics tendencies by substracting old IPD Stateout - ! variables from new/updated IPD Statein variables (gives the tendencies - ! due to anything else than physics) - if (IPD_Control%ldiag3d) then - do nb = 1,Atm_block%nblks - IPD_Data(nb)%Intdiag%du3dt(:,:,8) = IPD_Data(nb)%Intdiag%du3dt(:,:,8) & - + (IPD_Data(nb)%Statein%ugrs - IPD_Data(nb)%Stateout%gu0) - IPD_Data(nb)%Intdiag%dv3dt(:,:,8) = IPD_Data(nb)%Intdiag%dv3dt(:,:,8) & - + (IPD_Data(nb)%Statein%vgrs - IPD_Data(nb)%Stateout%gv0) - IPD_Data(nb)%Intdiag%dt3dt(:,:,11) = IPD_Data(nb)%Intdiag%dt3dt(:,:,11) & - + (IPD_Data(nb)%Statein%tgrs - IPD_Data(nb)%Stateout%gt0) - enddo - if (IPD_Control%qdiag3d) then - do nb = 1,Atm_block%nblks - IPD_Data(nb)%Intdiag%dq3dt(:,:,12) = IPD_Data(nb)%Intdiag%dq3dt(:,:,12) & - + (IPD_Data(nb)%Statein%qgrs(:,:,IPD_Control%ntqv) - IPD_Data(nb)%Stateout%gq0(:,:,IPD_Control%ntqv)) - IPD_Data(nb)%Intdiag%dq3dt(:,:,13) = IPD_Data(nb)%Intdiag%dq3dt(:,:,13) & - + (IPD_Data(nb)%Statein%qgrs(:,:,IPD_Control%ntoz) - IPD_Data(nb)%Stateout%gq0(:,:,IPD_Control%ntoz)) - enddo - endif - endif - !--- if dycore only run, set up the dummy physics output state as the input state if (dycore_only) then do nb = 1,Atm_block%nblks @@ -353,6 +331,28 @@ subroutine update_atmos_radiation_physics (Atmos) ! print *,'in atmos_model, after assign_importdata, rc=',rc endif + ! Calculate total non-physics tendencies by substracting old IPD Stateout + ! variables from new/updated IPD Statein variables (gives the tendencies + ! due to anything else than physics) + if (IPD_Control%ldiag3d) then + do nb = 1,Atm_block%nblks + IPD_Data(nb)%Intdiag%du3dt(:,:,8) = IPD_Data(nb)%Intdiag%du3dt(:,:,8) & + + (IPD_Data(nb)%Statein%ugrs - IPD_Data(nb)%Stateout%gu0) + IPD_Data(nb)%Intdiag%dv3dt(:,:,8) = IPD_Data(nb)%Intdiag%dv3dt(:,:,8) & + + (IPD_Data(nb)%Statein%vgrs - IPD_Data(nb)%Stateout%gv0) + IPD_Data(nb)%Intdiag%dt3dt(:,:,11) = IPD_Data(nb)%Intdiag%dt3dt(:,:,11) & + + (IPD_Data(nb)%Statein%tgrs - IPD_Data(nb)%Stateout%gt0) + enddo + if (IPD_Control%qdiag3d) then + do nb = 1,Atm_block%nblks + IPD_Data(nb)%Intdiag%dq3dt(:,:,12) = IPD_Data(nb)%Intdiag%dq3dt(:,:,12) & + + (IPD_Data(nb)%Statein%qgrs(:,:,IPD_Control%ntqv) - IPD_Data(nb)%Stateout%gq0(:,:,IPD_Control%ntqv)) + IPD_Data(nb)%Intdiag%dq3dt(:,:,13) = IPD_Data(nb)%Intdiag%dq3dt(:,:,13) & + + (IPD_Data(nb)%Statein%qgrs(:,:,IPD_Control%ntoz) - IPD_Data(nb)%Stateout%gq0(:,:,IPD_Control%ntoz)) + enddo + endif + endif + call mpp_clock_end(setupClock) if (mpp_pe() == mpp_root_pe() .and. debug) write(6,*) "radiation driver" diff --git a/ccpp/suites/suite_FV3_GSD_v0.xml b/ccpp/suites/suite_FV3_GSD_v0.xml index 9a63c666c..4dc4bd213 100644 --- a/ccpp/suites/suite_FV3_GSD_v0.xml +++ b/ccpp/suites/suite_FV3_GSD_v0.xml @@ -83,12 +83,12 @@ GFS_MP_generic_post cu_gf_driver_post maximum_hourly_diagnostics - phys_tend GFS_stochastics + phys_tend From ab8d4dd40c8b7034ec17fd7884e21cc546e97a05 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 20 Apr 2020 15:56:56 -0600 Subject: [PATCH 28/30] Add physics tendency summation scheme to FV3_GFS_v15p2 and FV3_GFS_v16beta --- ccpp/suites/suite_FV3_GFS_v15p2.xml | 1 + ccpp/suites/suite_FV3_GFS_v16beta.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/ccpp/suites/suite_FV3_GFS_v15p2.xml b/ccpp/suites/suite_FV3_GFS_v15p2.xml index 1ab234105..96c430e06 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2.xml @@ -88,6 +88,7 @@ GFS_stochastics + phys_tend diff --git a/ccpp/suites/suite_FV3_GFS_v16beta.xml b/ccpp/suites/suite_FV3_GFS_v16beta.xml index 8571ec1b4..62e78afe9 100644 --- a/ccpp/suites/suite_FV3_GFS_v16beta.xml +++ b/ccpp/suites/suite_FV3_GFS_v16beta.xml @@ -88,6 +88,7 @@ GFS_stochastics + phys_tend From ab8e41bb4b052ad696e52ca0b8c5e4de17020fa1 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 21 Apr 2020 07:33:24 -0600 Subject: [PATCH 29/30] gfsphysics/GFS_layer/GFS_typedefs.F90: bugfix, neet ntqv index for IPD --- gfsphysics/GFS_layer/GFS_typedefs.F90 | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index f1d02c8f8..dc83c03af 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -996,9 +996,9 @@ module GFS_typedefs integer :: ntrac !< number of tracers #ifdef CCPP integer :: ntracp1 !< number of tracers plus one - integer :: ntqv !< tracer index for water vapor (specific humidity) integer :: nqrimef !< tracer index for mass weighted rime factor #endif + integer :: ntqv !< tracer index for water vapor (specific humidity) integer :: ntoz !< tracer index for ozone mixing ratio integer :: ntcw !< tracer index for cloud condensate (or liquid water) integer :: ntiw !< tracer index for ice water @@ -3755,9 +3755,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & #endif allocate (Model%tracer_names(Model%ntrac)) Model%tracer_names(:) = tracer_names(:) -#ifdef CCPP Model%ntqv = 1 -#endif #ifdef MULTI_GASES Model%nto = get_tracer_index(Model%tracer_names, 'spfo', Model%me, Model%master, Model%debug) Model%nto2 = get_tracer_index(Model%tracer_names, 'spfo2', Model%me, Model%master, Model%debug) @@ -4743,9 +4741,9 @@ subroutine control_print(Model) print *, ' tracer_names : ', Model%tracer_names print *, ' ntrac : ', Model%ntrac #ifdef CCPP - print *, ' ntqv : ', Model%ntqv print *, ' nqrimef : ', Model%nqrimef #endif + print *, ' ntqv : ', Model%ntqv print *, ' ntoz : ', Model%ntoz print *, ' ntcw : ', Model%ntcw print *, ' ntiw : ', Model%ntiw From 13928aa7b7f6b92f8e5a297cf8f3447345d71722 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 22 Apr 2020 14:05:21 -0600 Subject: [PATCH 30/30] Revert change to .gitmodules and update submodule pointer for ccpp-physics --- .gitmodules | 4 ++-- ccpp/physics | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index da30da663..bdc0ffbf1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,5 +8,5 @@ branch = gsd/develop [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/climbfuji/ccpp-physics - branch = tendencies_sam_with_dom_mods + url = https://github.com/NOAA-GSD/ccpp-physics + branch = gsd/develop diff --git a/ccpp/physics b/ccpp/physics index 43f107ca3..314c5f59c 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 43f107ca315d9c021d2cebdd035e931638a36e53 +Subproject commit 314c5f59c81a194e68724d5202c25cd8bf17d1e4