@@ -688,6 +688,7 @@ module GFS_typedefs
688
688
! vay 2018 GW physics switches
689
689
690
690
logical :: ldiag_ugwp
691
+ logical :: ugwp_seq_update ! flag to update winds between UGWP steps
691
692
logical :: do_ugwp ! do mesoscale UGWP + TOFD + RF
692
693
logical :: do_tofd ! tofd flag in gwdps.f
693
694
logical :: do_gwd ! logical for gravity wave drag (gwd)
@@ -978,7 +979,7 @@ module GFS_typedefs
978
979
logical :: do_ugwp_v0 ! < flag for version 0 ugwp GWD
979
980
logical :: do_ugwp_v0_orog_only ! < flag for version 0 ugwp GWD (orographic drag only)
980
981
logical :: do_ugwp_v0_nst_only ! < flag for version 0 ugwp GWD (non-stationary GWD only)
981
- logical :: do_gsl_drag_ls_bl ! < flag for GSL drag (large-scale GWD and blocking only)
982
+ logical :: do_gsl_drag_ls_bl ! < flag for GSL drag (mesoscale GWD and blocking only)
982
983
logical :: do_gsl_drag_ss ! < flag for GSL drag (small-scale GWD only)
983
984
logical :: do_gsl_drag_tofd ! < flag for GSL drag (turbulent orog form drag only)
984
985
logical :: do_ugwp_v1 ! < flag for version 1 ugwp GWD
@@ -1836,14 +1837,22 @@ module GFS_typedefs
1836
1837
real (kind= kind_phys), pointer :: dudt_ofd(:,:) = > null () ! <
1837
1838
real (kind= kind_phys), pointer :: dvdt_ofd(:,:) = > null () ! <
1838
1839
1839
- real (kind= kind_phys), pointer :: du_ogwcol(:) = > null () ! <
1840
- real (kind= kind_phys), pointer :: dv_ogwcol(:) = > null () ! <
1841
- real (kind= kind_phys), pointer :: du_oblcol(:) = > null () ! <
1842
- real (kind= kind_phys), pointer :: dv_oblcol(:) = > null () ! <
1843
- real (kind= kind_phys), pointer :: du_osscol(:) = > null () ! <
1844
- real (kind= kind_phys), pointer :: dv_osscol(:) = > null () ! <
1845
- real (kind= kind_phys), pointer :: du_ofdcol(:) = > null () ! <
1846
- real (kind= kind_phys), pointer :: dv_ofdcol(:) = > null () ! <
1840
+ real (kind= kind_phys), pointer :: du_ogwcol(:) = > null () ! < instantaneous sfc u-momentum flux from OGW
1841
+ real (kind= kind_phys), pointer :: dv_ogwcol(:) = > null () ! < instantaneous sfc v-momentum flux from OGW
1842
+ real (kind= kind_phys), pointer :: du_oblcol(:) = > null () ! < instantaneous sfc u-momentum flux from blocking
1843
+ real (kind= kind_phys), pointer :: dv_oblcol(:) = > null () ! < instantaneous sfc v-momentum flux from blocking
1844
+ real (kind= kind_phys), pointer :: du_osscol(:) = > null () ! < instantaneous sfc u-momentum flux from SSGWD
1845
+ real (kind= kind_phys), pointer :: dv_osscol(:) = > null () ! < instantaneous sfc v-momentum flux from SSGWD
1846
+ real (kind= kind_phys), pointer :: du_ofdcol(:) = > null () ! < instantaneous sfc u-momentum flux from TOFD
1847
+ real (kind= kind_phys), pointer :: dv_ofdcol(:) = > null () ! < instantaneous sfc v-momentum flux from TOFD
1848
+ real (kind= kind_phys), pointer :: du3_ogwcol(:) = > null () ! < time-averaged sfc u-momentum flux from OGW
1849
+ real (kind= kind_phys), pointer :: dv3_ogwcol(:) = > null () ! < time-averaged sfc v-momentum flux from OGW
1850
+ real (kind= kind_phys), pointer :: du3_oblcol(:) = > null () ! < time-averaged sfc u-momentum flux from blocking
1851
+ real (kind= kind_phys), pointer :: dv3_oblcol(:) = > null () ! < time-averaged sfc v-momentum flux from blocking
1852
+ real (kind= kind_phys), pointer :: du3_osscol(:) = > null () ! < time-averaged sfc u-momentum flux from SSGWD
1853
+ real (kind= kind_phys), pointer :: dv3_osscol(:) = > null () ! < time-averaged sfc v-momentum flux from SSGWD
1854
+ real (kind= kind_phys), pointer :: du3_ofdcol(:) = > null () ! < time-averaged sfc u-momentum flux from TOFD
1855
+ real (kind= kind_phys), pointer :: dv3_ofdcol(:) = > null () ! < time-averaged sfc v-momentum flux from TOFD
1847
1856
!
1848
1857
!- --vay-2018 UGWP-diagnostics daily mean
1849
1858
!
@@ -1856,28 +1865,27 @@ module GFS_typedefs
1856
1865
real (kind= kind_phys), pointer :: dt3dt_pbl(:,:) = > null () ! < daily aver GFS_phys tend for Temp pbl
1857
1866
!
1858
1867
real (kind= kind_phys), pointer :: du3dt_ogw(:,:) = > null () ! < daily aver GFS_phys tend for WE-U OGW
1859
- real (kind= kind_phys), pointer :: dv3dt_ogw(:,:) = > null () ! < daily aver GFS_phys tend for SN-V OGW
1860
- real (kind= kind_phys), pointer :: dt3dt_ogw(:,:) = > null () ! < daily aver GFS_phys tend for Temp OGW
1868
+ !
1869
+ real (kind= kind_phys), pointer :: ldu3dt_ogw(:,:) = > null () ! < time aver GFS_phys tend for WE-U OGW
1870
+ real (kind= kind_phys), pointer :: ldu3dt_obl(:,:) = > null () ! < time aver GFS_phys tend for WE-U OBL
1871
+ real (kind= kind_phys), pointer :: ldu3dt_oss(:,:) = > null () ! < time aver GFS_phys tend for WE-U OSS
1872
+ real (kind= kind_phys), pointer :: ldu3dt_ofd(:,:) = > null () ! < time aver GFS_phys tend for WE-U OFD
1861
1873
!
1862
1874
real (kind= kind_phys), pointer :: du3dt_mtb(:,:) = > null () ! < daily aver GFS_phys tend for WE-U MTB
1863
- real (kind= kind_phys), pointer :: dv3dt_mtb(:,:) = > null () ! < daily aver GFS_phys tend for SN-V MTB
1864
- real (kind= kind_phys), pointer :: dt3dt_mtb(:,:) = > null () ! < daily aver GFS_phys tend for Temp MTB
1865
1875
!
1866
1876
real (kind= kind_phys), pointer :: du3dt_tms(:,:) = > null () ! < daily aver GFS_phys tend for WE-U TMS
1867
- real (kind= kind_phys), pointer :: dv3dt_tms(:,:) = > null () ! < daily aver GFS_phys tend for SN-V TMS
1868
- real (kind= kind_phys), pointer :: dt3dt_tms(:,:) = > null () ! < daily aver GFS_phys tend for Temp TMS
1869
1877
!
1870
1878
real (kind= kind_phys), pointer :: du3dt_ngw(:,:) = > null () ! < daily aver GFS_phys tend for WE-U NGW
1871
1879
real (kind= kind_phys), pointer :: dv3dt_ngw(:,:) = > null () ! < daily aver GFS_phys tend for SN-V NGW
1872
- real (kind= kind_phys), pointer :: dt3dt_ngw(:,:) = > null () ! < daily aver GFS_phys tend for Temp NGW
1873
1880
!
1874
- real (kind= kind_phys), pointer :: du3dt_cgw(:,:) = > null () ! < daily aver GFS_phys tend for WE-U NGW
1875
- real (kind= kind_phys), pointer :: dv3dt_cgw(:,:) = > null () ! < daily aver GFS_phys tend for SN-V NGW
1876
- real (kind= kind_phys), pointer :: dt3dt_cgw(:,:) = > null () ! < daily aver GFS_phys tend for Temp NGW
1881
+ real (kind= kind_phys), pointer :: dws3dt_ogw(:,:) = > null () ! < time aver GFS_phys tend for windspeed OGW
1882
+ real (kind= kind_phys), pointer :: dws3dt_obl(:,:) = > null () ! < time aver GFS_phys tend for windspeed OBL
1883
+ real (kind= kind_phys), pointer :: dws3dt_oss(:,:) = > null () ! < time aver GFS_phys tend for windspeed OSS
1884
+ real (kind= kind_phys), pointer :: dws3dt_ofd(:,:) = > null () ! < time aver GFS_phys tend for windspeed OFD
1877
1885
!
1878
- real (kind= kind_phys), pointer :: du3dt_moist (:,:) = > null () ! < daily aver GFS_phys tend for WE-U MOIST
1879
- real (kind= kind_phys), pointer :: dv3dt_moist (:,:) = > null () ! < daily aver GFS_phys tend for SN-V MOIST
1880
- real (kind= kind_phys), pointer :: dt3dt_moist (:,:) = > null () ! < daily aver GFS_phys tend for Temp MOIST
1886
+ real (kind= kind_phys), pointer :: ldu3dt_ngw (:,:) = > null () ! < time aver GFS_phys tend for u wind NGW
1887
+ real (kind= kind_phys), pointer :: ldv3dt_ngw (:,:) = > null () ! < time aver GFS_phys tend for v wind NGW
1888
+ real (kind= kind_phys), pointer :: ldt3dt_ngw (:,:) = > null () ! < time aver GFS_phys tend for temperature NGW
1881
1889
!
1882
1890
!- -- Instantaneous UGWP-diagnostics 16-variables
1883
1891
! Diag%gwp_ax, Diag%gwp_axo, Diag%gwp_axc, Diag%gwp_axf, &
@@ -3165,16 +3173,17 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
3165
3173
logical :: do_ugwp_v0 = .true. ! < flag for version 0 ugwp GWD
3166
3174
logical :: do_ugwp_v0_orog_only = .false. ! < flag for version 0 ugwp GWD (orographic drag only)
3167
3175
logical :: do_ugwp_v0_nst_only = .false. ! < flag for version 0 ugwp GWD (non-stationary GWD only)
3168
- logical :: do_gsl_drag_ls_bl = .false. ! < flag for GSL drag (large-scale GWD and blocking only)
3176
+ logical :: do_gsl_drag_ls_bl = .false. ! < flag for GSL drag (mesoscale GWD and blocking only)
3169
3177
logical :: do_gsl_drag_ss = .false. ! < flag for GSL drag (small-scale GWD only)
3170
3178
logical :: do_gsl_drag_tofd = .false. ! < flag for GSL drag (turbulent orog form drag only)
3171
3179
logical :: do_ugwp_v1 = .false. ! < flag for version 1 ugwp GWD
3172
3180
logical :: do_ugwp_v1_orog_only = .false. ! < flag for version 1 ugwp GWD (orographic drag only)
3173
3181
logical :: do_ugwp_v1_w_gsldrag = .false. ! < flag for version 1 ugwp GWD (orographic drag only)
3174
3182
!- -- vay-2018
3175
- logical :: ldiag_ugwp = .false. ! < flag for UGWP diag fields
3176
- logical :: do_ugwp = .false. ! < flag do UGWP+RF
3177
- logical :: do_tofd = .false. ! < flag do Turb oro Form Drag
3183
+ logical :: ldiag_ugwp = .false. ! < flag for UGWP diag fields
3184
+ logical :: ugwp_seq_update = .false. ! < flag for updating winds between UGWP steps
3185
+ logical :: do_ugwp = .false. ! < flag do UGWP+RF
3186
+ logical :: do_tofd = .false. ! < flag do Turb oro Form Drag
3178
3187
3179
3188
logical :: do_gwd = .false. ! < flag for running gravity wave drag
3180
3189
logical :: do_cnvgwd = .false. ! < flag for running conv gravity wave drag
@@ -3535,7 +3544,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
3535
3544
do_ugwp_v0_nst_only, &
3536
3545
do_gsl_drag_ls_bl, do_gsl_drag_ss, do_gsl_drag_tofd, &
3537
3546
do_ugwp_v1, do_ugwp_v1_orog_only, do_ugwp_v1_w_gsldrag, &
3538
- var_ric, coef_ric_l, coef_ric_s, hurr_pbl, &
3547
+ ugwp_seq_update, var_ric, coef_ric_l, coef_ric_s, hurr_pbl, &
3539
3548
do_myjsfc, do_myjpbl, &
3540
3549
hwrf_samfdeep, hwrf_samfshal,progsigma, &
3541
3550
h2o_phys, pdfcld, shcnvcw, redrag, hybedmf, satmedmf, &
@@ -3723,6 +3732,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
3723
3732
! VAY-ugwp --- set some GW-related switches
3724
3733
!
3725
3734
Model% ldiag_ugwp = ldiag_ugwp
3735
+ Model% ugwp_seq_update = ugwp_seq_update
3726
3736
Model% do_ugwp = do_ugwp
3727
3737
Model% do_tofd = do_tofd
3728
3738
@@ -6924,28 +6934,29 @@ subroutine diag_create (Diag, IM, Model)
6924
6934
allocate (Diag% dv3dt_pbl (IM,Model% levs) )
6925
6935
allocate (Diag% dt3dt_pbl (IM,Model% levs) )
6926
6936
allocate (Diag% du3dt_ogw (IM,Model% levs) )
6927
- allocate (Diag% dv3dt_ogw (IM,Model% levs) )
6928
- allocate (Diag% dt3dt_ogw (IM,Model% levs) )
6929
6937
allocate (Diag% du3dt_mtb (IM,Model% levs) )
6930
- allocate (Diag% dv3dt_mtb (IM,Model% levs) )
6931
- allocate (Diag% dt3dt_mtb (IM,Model% levs) )
6932
6938
allocate (Diag% du3dt_tms (IM,Model% levs) )
6933
- allocate (Diag% dv3dt_tms (IM,Model% levs) )
6934
- allocate (Diag% dt3dt_tms (IM,Model% levs) )
6935
6939
allocate (Diag% du3dt_ngw (IM,Model% levs) )
6936
6940
allocate (Diag% dv3dt_ngw (IM,Model% levs) )
6937
- allocate (Diag% dt3dt_ngw (IM,Model% levs) )
6938
- allocate (Diag% du3dt_cgw (IM,Model% levs) )
6939
- allocate (Diag% dv3dt_cgw (IM,Model% levs) )
6940
- allocate (Diag% dt3dt_moist (IM,Model% levs))
6941
6941
allocate (Diag% dudt_tot (IM,Model% levs) )
6942
6942
allocate (Diag% dvdt_tot (IM,Model% levs) )
6943
6943
allocate (Diag% dtdt_tot (IM,Model% levs) )
6944
6944
allocate (Diag% uav_ugwp (IM,Model% levs) )
6945
6945
allocate (Diag% tav_ugwp (IM,Model% levs) )
6946
+ allocate (Diag% dws3dt_ogw (IM,Model% levs) )
6947
+ allocate (Diag% dws3dt_obl (IM,Model% levs) )
6948
+ allocate (Diag% dws3dt_oss (IM,Model% levs) )
6949
+ allocate (Diag% dws3dt_ofd (IM,Model% levs) )
6950
+ allocate (Diag% ldu3dt_ogw (IM,Model% levs) )
6951
+ allocate (Diag% ldu3dt_obl (IM,Model% levs) )
6952
+ allocate (Diag% ldu3dt_oss (IM,Model% levs) )
6953
+ allocate (Diag% ldu3dt_ofd (IM,Model% levs) )
6954
+ allocate (Diag% ldu3dt_ngw (IM,Model% levs) )
6955
+ allocate (Diag% ldv3dt_ngw (IM,Model% levs) )
6956
+ allocate (Diag% ldt3dt_ngw (IM,Model% levs) )
6946
6957
endif
6947
6958
6948
- if (Model% do_ugwp_v1 .or. Model% gwd_opt == 33 .or. Model % gwd_opt == 22 ) then
6959
+ if (Model% do_ugwp_v1 .or. Model% ldiag_ugwp ) then
6949
6960
allocate (Diag% dudt_ogw (IM,Model% levs))
6950
6961
allocate (Diag% dvdt_ogw (IM,Model% levs))
6951
6962
allocate (Diag% dudt_obl (IM,Model% levs))
@@ -6962,6 +6973,14 @@ subroutine diag_create (Diag, IM, Model)
6962
6973
allocate (Diag% dv_osscol (IM) )
6963
6974
allocate (Diag% du_ofdcol (IM) )
6964
6975
allocate (Diag% dv_ofdcol (IM) )
6976
+ allocate (Diag% du3_ogwcol (IM) )
6977
+ allocate (Diag% dv3_ogwcol (IM) )
6978
+ allocate (Diag% du3_oblcol (IM) )
6979
+ allocate (Diag% dv3_oblcol (IM) )
6980
+ allocate (Diag% du3_osscol (IM) )
6981
+ allocate (Diag% dv3_osscol (IM) )
6982
+ allocate (Diag% du3_ofdcol (IM) )
6983
+ allocate (Diag% dv3_ofdcol (IM) )
6965
6984
else
6966
6985
allocate (Diag% dudt_ogw (IM,Model% levs))
6967
6986
endif
@@ -7239,7 +7258,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center)
7239
7258
Diag% dtdt_gw = zero
7240
7259
Diag% kdis_gw = zero
7241
7260
7242
- if (Model% do_ugwp_v1 .or. Model% gwd_opt == 33 .or. Model % gwd_opt == 22 ) then
7261
+ if (Model% do_ugwp_v1 .or. Model% ldiag_ugwp ) then
7243
7262
Diag% dudt_ogw = zero
7244
7263
Diag% dvdt_ogw = zero
7245
7264
Diag% dudt_obl = zero
@@ -7256,6 +7275,14 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center)
7256
7275
Diag% dv_osscol = zero
7257
7276
Diag% du_ofdcol = zero
7258
7277
Diag% dv_ofdcol = zero
7278
+ Diag% du3_ogwcol = zero
7279
+ Diag% dv3_ogwcol = zero
7280
+ Diag% du3_oblcol = zero
7281
+ Diag% dv3_oblcol = zero
7282
+ Diag% du3_osscol = zero
7283
+ Diag% dv3_osscol = zero
7284
+ Diag% du3_ofdcol = zero
7285
+ Diag% dv3_ofdcol = zero
7259
7286
else
7260
7287
Diag% dudt_ogw = zero
7261
7288
end if
@@ -7265,25 +7292,26 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center)
7265
7292
Diag% dv3dt_pbl = zero
7266
7293
Diag% dt3dt_pbl = zero
7267
7294
Diag% du3dt_ogw = zero
7268
- Diag% dv3dt_ogw = zero
7269
- Diag% dt3dt_ogw = zero
7270
7295
Diag% du3dt_mtb = zero
7271
- Diag% dv3dt_mtb = zero
7272
- Diag% dt3dt_mtb = zero
7273
7296
Diag% du3dt_tms = zero
7274
- Diag% dv3dt_tms = zero
7275
- Diag% dt3dt_tms = zero
7276
7297
Diag% du3dt_ngw = zero
7277
7298
Diag% dv3dt_ngw = zero
7278
- Diag% dt3dt_ngw = zero
7279
- Diag% du3dt_moist = zero
7280
- Diag% dv3dt_moist = zero
7281
- Diag% dt3dt_moist = zero
7282
7299
Diag% dudt_tot = zero
7283
7300
Diag% dvdt_tot = zero
7284
7301
Diag% dtdt_tot = zero
7285
7302
Diag% uav_ugwp = zero
7286
7303
Diag% tav_ugwp = zero
7304
+ Diag% dws3dt_ogw = zero
7305
+ Diag% dws3dt_obl = zero
7306
+ Diag% dws3dt_oss = zero
7307
+ Diag% dws3dt_ofd = zero
7308
+ Diag% ldu3dt_ogw = zero
7309
+ Diag% ldu3dt_obl = zero
7310
+ Diag% ldu3dt_oss = zero
7311
+ Diag% ldu3dt_ofd = zero
7312
+ Diag% ldu3dt_ngw = zero
7313
+ Diag% ldv3dt_ngw = zero
7314
+ Diag% ldt3dt_ngw = zero
7287
7315
! COORDE
7288
7316
Diag% du3dt_dyn = zero
7289
7317
endif
0 commit comments