Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions parm/fv3lam_rrfs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -870,6 +870,12 @@
<scale>6.0</scale>
</param>

<param>
<shortname>GSD_BLSN_ON_SURFACE</shortname>
<pname>VISBSN</pname>
<scale>6.0</scale>
</param>

<param>
<shortname>HGT_ON_LVL_OF_ADIAB_COND_FROM_SFC</shortname>
<pname>HGT</pname>
Expand Down Expand Up @@ -3206,6 +3212,12 @@
<scale>6.0</scale>
</param>

<param>
<shortname>GSD_BLSN_ON_SURFACE</shortname>
<pname>VISBSN</pname>
<scale>6.0</scale>
</param>

<param>
<shortname>REFC_ON_ENTIRE_ATMOS</shortname>
<pname>REFC</pname>
Expand Down
9 changes: 9 additions & 0 deletions parm/post_avblflds.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3859,6 +3859,15 @@

<!--438-442-->

<param>
<post_avblfldidx>438</post_avblfldidx>
<shortname>GSD_BLSN_ON_SURFACE</shortname>
<longname>GSD_blsn on surface</longname>
<pname>VISBSN</pname>
<fixed_sfc1_type>surface</fixed_sfc1_type>
<scale>6.0</scale>
</param>

<!--443-->
<param>
<post_avblfldidx>443</post_avblfldidx>
Expand Down
78 changes: 76 additions & 2 deletions parm/postxconfig-NT-fv3lam_rrfs.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
3
4
235
288
236
289
PRSLEV
32769
ncep_nco
Expand Down Expand Up @@ -4532,6 +4532,43 @@ surface
?
?
?
438
GSD_BLSN_ON_SURFACE
GSD_blsn on surface
1
tmpl4_0
VISBSN
?
?
surface
0
?
0
?
?
0
?
0
?
?
?
0
0.0
0
0.0
?
0
0.0
0
0.0
1
6.0
0
0
0
?
?
?
109
HGT_ON_LVL_OF_ADIAB_COND_FROM_SFC
?
Expand Down Expand Up @@ -17350,6 +17387,43 @@ surface
?
?
?
438
GSD_BLSN_ON_SURFACE
GSD_blsn on surface
1
tmpl4_0
VISBSN
?
?
surface
0
?
0
?
?
0
?
0
?
?
?
0
0.0
0
0.0
?
0
0.0
0
0.0
1
6.0
0
0
0
?
?
?
252
REFC_ON_ENTIRE_ATMOS
?
Expand Down
56 changes: 53 additions & 3 deletions sorc/ncep_post.fd/CALVIS_GSD.f
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
!**********************************************************************c
SUBROUTINE CALVIS_GSD(CZEN,VIS)
SUBROUTINE CALVIS_GSD(CZEN,VIS,METHOD_BLSN)

! SUBPROGRAM: CALVIS CALCULATE HORIZONTAL VISIBILITY
!
Expand Down Expand Up @@ -91,24 +91,31 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS)
! 2021-05 Wen Meng - Add checking for undefined points invloved in computation
! 2021-08 Wen Meng - Restrict divided by 0.
! 2021-10 Jesse Meng - 2D DECOMPOSITION
! 2023-02 Tim Corrie, Eric James - addition of attenuation for
! blowing snow
!
!------------------------------------------------------------------
!

use vrbls2d, only: sno, si, ustar
use vrbls3d, only: qqw, qqi, qqs, qqr, qqg, t, pmid, q, u, v, extcof55, aextc55
use params_mod, only: h1, d608, rd
use params_mod, only: h1, d608, rd, g
use ctlblk_mod, only: jm, im, jsta_2l, jend_2u, lm, modelname, spval,&
ista_2l, iend_2u

implicit none

integer :: j, i, k, ll
integer :: method
integer :: method, method_blsn
real :: tx, pol, esx, es, e
REAL VIS(ista_2l:iend_2u,jsta_2l:jend_2u)
REAL RHB(ista_2l:iend_2u,jsta_2l:jend_2u,LM)
REAL CZEN(ista_2l:iend_2u,jsta_2l:jend_2u)

real :: z, ustar_t, u_p, lamda, r_bar, alpha
real :: rho_sno
real :: z_r, Q_s, C_r, c_z, c_alpha, vis_blsn, BETABLSN

real celkel,tice,coeflc,coeflp,coeffc,coeffp,coeffg
real exponlc,exponlp,exponfc,exponfp,exponfg,const1
real rhoice,rhowat,qrain,qsnow,qgraupel,qclw,qclice,tv,rhoair, &
Expand Down Expand Up @@ -136,6 +143,7 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS)
! Aerosol method (2),
! Smoke added to RH method for clear air (3)
! 3 - option to add reducted visibility from smoke-based aerosols.
! method_blsn = 0 ! 1 for 'on', 0 for 'off'

CELKEL = 273.15
TICE = CELKEL-10.
Expand Down Expand Up @@ -300,6 +308,45 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS)
if (t(i,j,lm)< 270. .and. temp_fac==1.) &
write (6,*) 'Problem w/ temp_fac - calvis'

! Key calculation of attenuation from blowing snow -- updated 5 August 2022 by Tim Corrie
! Framework is from Letcher et al (2021)

ustar_t = 0.2
u_p = 2.8*ustar_t
lamda = 0.45
z = 2.0
alpha = 15.0
r_bar = 0.0002

! print *, i,j


if (si(i,j)<spval .and. si(i,j) .ge. 1.0) then
z_r = 1.6*(ustar(i,j)**2./(2.*g))
Q_s = max((0.68/ustar(i,j))*(RHOAIR/g)*(ustar(i,j)**2.-ustar_t**2.),0.0)
C_r = (Q_s/u_p)*(lamda*g/ustar(i,j)**2.)*exp(-lamda*z_r*g/ustar(i,j)**2.)
c_z = max(C_r * exp(-1.55*((0.05628*ustar(i,j))**-0.544 - z**-0.544)),1e-15)
c_alpha = alpha/(alpha+2) !simplified version of (6) in Letcher et al (2021)
rho_sno = sno(i,j)/(si(i,j)/1.0e3)
rho_sno = rho_sno*2. + 10.*max(0.,rho_sno-0.15)
vis_blsn = (5.217*rho_sno*r_bar**1.011)/(1.82*c_z*c_alpha)
BETABLSN = 3.912/(vis_blsn/1000.0)
! print to ensure quality
!print *, "z_r", z_r
!print *, "Q_s", Q_s
!print *, "C_r", C_r
!print *, "c_z", c_z
!print *, "c_alpha", c_alpha
!print *, "sno/SWE", sno(i,j)
!print *, "si/SNOD", si(i,j)/1.0e3
!print *, "rho_sno", rho_sno
!print *, "vis_blsn", vis_blsn
!print *, "BETABLSN", BETABLSN
else
BETABLSN = 0
!print *, "BETABLSN", BETABLSN
end if

! Key calculation of attenuation from each hydrometeor type (cloud, snow, graupel, rain, ice)
BETAV=COEFFC*CONCFC**EXPONFC &
+ coef_SNOW*CONCFP**EXPONFP &
Expand All @@ -309,6 +356,9 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS)
! Addition of attenuation from aerosols if option selected
if(method == 2 .or. method == 3)then ! aerosol method
BETAV = BETAV + aextc55(i,j,lm)*1000.
if(method_blsn .eq. 1) then ! BLSN method, updated 8 August 2022 by Tim Corrie
BETAV = BETAV + BETABLSN
endif
endif

if (i==290 .and. j==112) then
Expand Down
19 changes: 18 additions & 1 deletion sorc/ncep_post.fd/MDLFLD.f
Original file line number Diff line number Diff line change
Expand Up @@ -3549,7 +3549,7 @@ SUBROUTINE MDLFLD
! --- GSD VISIBILITY
!
IF (IGET(410)>0) THEN
CALL CALVIS_GSD(CZEN,VIS)
CALL CALVIS_GSD(CZEN,VIS,0)
DO J=JSTA,JEND
DO I=ista,iend
GRID1(I,J)=VIS(I,J)
Expand All @@ -3563,6 +3563,23 @@ SUBROUTINE MDLFLD
endif
ENDIF
!
! --- GSD VISIBILITY WITH BLSN
!
IF (IGET(438)>0) THEN
CALL CALVIS_GSD(CZEN,VIS,1)
DO J=JSTA,JEND
DO I=ista,iend
GRID1(I,J)=VIS(I,J)
END DO
END DO
if(grib=="grib2") then
cfld=cfld+1
fld_info(cfld)%ifld=IAVBLFLD(IGET(438))
fld_info(cfld)%lvl=LVLSXML(1,IGET(438))
datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend)
endif
ENDIF
!
! --- RADAR REFLECT - 1km
!
IF (IGET(748) > 0) THEN
Expand Down