Skip to content

Commit 783c898

Browse files
committed
Modified 'dtfac' OGWD tendency limiter in drag_suite_psl to match that in drag_suite_run
1 parent 7e9ddf0 commit 783c898

File tree

1 file changed

+32
-25
lines changed

1 file changed

+32
-25
lines changed

physics/GWD/drag_suite.F90

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1674,10 +1674,9 @@ subroutine drag_suite_psl( &
16741674
real(kind=kind_phys), parameter :: hmt_min = 50.
16751675
real(kind=kind_phys), parameter :: oc_min = 1.0
16761676
real(kind=kind_phys), parameter :: oc_max = 10.0
1677-
! 7.5 mb -- 33 km ... 0.01 kgm-3 reduce gwd drag above cutoff level
1678-
real(kind=kind_phys), parameter :: pcutoff = 7.5e2
1679-
! 0.76 mb -- 50 km ...0.001 kgm-3 --- 0.1 mb 65 km 0.0001 kgm-3
1680-
real(kind=kind_phys), parameter :: pcutoff_den = 0.01 !
1677+
real(kind=kind_phys), parameter :: sgmalolev = 0.5 ! max sigma lvl for dtfac
1678+
real(kind=kind_phys), parameter :: plolevmeso = 70.0 ! pres lvl for mesosphere OGWD reduction (Pa)
1679+
real(kind=kind_phys), parameter :: facmeso = 0.5 ! fractional velocity reduction for OGWD
16811680

16821681
integer,parameter :: kpblmin = 2
16831682

@@ -1691,7 +1690,7 @@ subroutine drag_suite_psl( &
16911690
rcsks,wdir,ti,rdz,tem2,dw2,shr2, &
16921691
bvf2,rdelks,wtkbj,tem,gfobnv,hd,fro, &
16931692
rim,temc,tem1,efact,temv,dtaux,dtauy, &
1694-
dtauxb,dtauyb,eng0,eng1
1693+
dtauxb,dtauyb,eng0,eng1,dtfac_meso
16951694
real(kind=kind_phys) :: denfac
16961695
!
16971696
logical :: ldrag(im),icrilv(im), &
@@ -1706,7 +1705,7 @@ subroutine drag_suite_psl( &
17061705
rulow(im),bnv(im), &
17071706
oa(im),ol(im),oc(im), &
17081707
oass(im),olss(im), &
1709-
roll(im),dtfac(im,km), &
1708+
roll(im),dtfac(im), &
17101709
brvf(im),xlinv(im), &
17111710
delks(im),delks1(im), &
17121711
bnv2(im,km),usqj(im,km), &
@@ -1861,6 +1860,7 @@ subroutine drag_suite_psl( &
18611860
oass(i) = 0.0
18621861
olss(i) = 0.0
18631862
ulow (i) = 0.0
1863+
dtfac(i) = 1.0
18641864
rstoch(i) = 0.0
18651865
ldrag(i) = .false.
18661866
icrilv(i) = .false.
@@ -1877,7 +1877,6 @@ subroutine drag_suite_psl( &
18771877
taud_bl(i,k) = 0.0
18781878
dtaux2d(i,k) = 0.0
18791879
dtauy2d(i,k) = 0.0
1880-
dtfac(i,k) = 1.0
18811880
enddo
18821881
enddo
18831882
!
@@ -2536,30 +2535,38 @@ subroutine drag_suite_psl( &
25362535
taud_bl(i,klcap) = taud_bl(i,klcap) * factop
25372536
enddo
25382537
!
2539-
! if the gravity wave drag would force a critical line
2540-
! in the lower ksmm1 layers during the next deltim timestep,
2541-
! then only apply drag until that critical line is reached.
2538+
! if the gravity wave drag + blocking would force a critical line
2539+
! in the layers below pressure-based 'sigma' level = sgmalolev during the next deltim
2540+
! timestep, then only apply drag until that critical line is reached, i.e.,
2541+
! reduce drag to limit resulting wind components to zero
2542+
! Note: 'sigma' = prsi(k)/prsi(k=1), where prsi(k=1) is the surface pressure
25422543
!
25432544
do k = kts,kpblmax-1
2544-
if ((taud_ls(i,k)+taud_bl(i,k)).ne.0.) then
2545-
dtfac(i,k) = min(dtfac(i,k),abs(velco(i,k) &
2546-
/(deltim*rcs*(taud_ls(i,k)+taud_bl(i,k)))))
2547-
endif
2548-
enddo
2549-
! apply limiter to mesosphere drag, reduce the drag by density factor 10-3
2550-
! prevent wind reversal...
2551-
!
2552-
do k = kpblmax,km-1
2553-
if ((taud_ls(i,k)+taud_bl(i,k)).ne.0..and.prsl(i,k).le.pcutoff) then
2554-
denfac = min(ro(i,k)/pcutoff_den,1.)
2555-
dtfac(i,k) = min(dtfac(i,k),denfac*abs(velco(i,k) &
2545+
if (prsi(i,k).ge.sgmalolev*prsi(i,1)) then
2546+
if ((taud_ls(i,k)+taud_bl(i,k)).ne.0.) &
2547+
dtfac(i) = min(dtfac(i),abs(velco(i,k) &
25562548
/(deltim*rcs*(taud_ls(i,k)+taud_bl(i,k)))))
2557-
endif
2549+
else
2550+
exit
2551+
endif
25582552
enddo
25592553
!
25602554
do k = kts,km
2561-
taud_ls(i,k) = taud_ls(i,k)*dtfac(i,k)* ls_taper(i) *(1.-rstoch(i))
2562-
taud_bl(i,k) = taud_bl(i,k)*dtfac(i,k)* ls_taper(i) *(1.-rstoch(i))
2555+
2556+
! Check if well into mesosphere -- if so, perform similar reduction of
2557+
! velocity tendency due to mesoscale GWD to prevent sudden reversal of
2558+
! wind direction (similar to above)
2559+
dtfac_meso = 1.0
2560+
if (prsl(i,k).le.plolevmeso) then
2561+
if (taud_ls(i,k).ne.0.) &
2562+
dtfac_meso = min(dtfac_meso,facmeso*abs(velco(i,k) &
2563+
/(deltim*rcs*taud_ls(i,k))))
2564+
end if
2565+
2566+
taud_ls(i,k) = taud_ls(i,k)*dtfac(i)*dtfac_meso* &
2567+
ls_taper(i) *(1.-rstoch(i))
2568+
taud_bl(i,k) = taud_bl(i,k)*dtfac(i)* ls_taper(i) *(1.-rstoch(i))
2569+
25632570
dtaux = taud_ls(i,k) * xn(i)
25642571
dtauy = taud_ls(i,k) * yn(i)
25652572
dtauxb = taud_bl(i,k) * xn(i)

0 commit comments

Comments
 (0)