diff --git a/parm/fv3lam_rrfs.xml b/parm/fv3lam_rrfs.xml
index 108e69d27..c0a34359c 100755
--- a/parm/fv3lam_rrfs.xml
+++ b/parm/fv3lam_rrfs.xml
@@ -870,6 +870,12 @@
6.0
+
+ GSD_BLSN_ON_SURFACE
+ VISBSN
+ 6.0
+
+
HGT_ON_LVL_OF_ADIAB_COND_FROM_SFC
HGT
@@ -3206,6 +3212,12 @@
6.0
+
+ GSD_BLSN_ON_SURFACE
+ VISBSN
+ 6.0
+
+
REFC_ON_ENTIRE_ATMOS
REFC
diff --git a/parm/post_avblflds.xml b/parm/post_avblflds.xml
index a19c4ac3e..9568a16d7 100755
--- a/parm/post_avblflds.xml
+++ b/parm/post_avblflds.xml
@@ -3859,6 +3859,15 @@
+
+ 438
+ GSD_BLSN_ON_SURFACE
+ GSD_blsn on surface
+ VISBSN
+ surface
+ 6.0
+
+
443
diff --git a/parm/postxconfig-NT-fv3lam_rrfs.txt b/parm/postxconfig-NT-fv3lam_rrfs.txt
index 38f05cbb9..2e629fc4e 100644
--- a/parm/postxconfig-NT-fv3lam_rrfs.txt
+++ b/parm/postxconfig-NT-fv3lam_rrfs.txt
@@ -1,7 +1,7 @@
3
4
-235
-288
+236
+289
PRSLEV
32769
ncep_nco
@@ -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
?
@@ -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
?
diff --git a/sorc/ncep_post.fd/CALVIS_GSD.f b/sorc/ncep_post.fd/CALVIS_GSD.f
index d5fabfe72..a0790cdf3 100644
--- a/sorc/ncep_post.fd/CALVIS_GSD.f
+++ b/sorc/ncep_post.fd/CALVIS_GSD.f
@@ -1,5 +1,5 @@
!**********************************************************************c
- SUBROUTINE CALVIS_GSD(CZEN,VIS)
+ SUBROUTINE CALVIS_GSD(CZEN,VIS,METHOD_BLSN)
! SUBPROGRAM: CALVIS CALCULATE HORIZONTAL VISIBILITY
!
@@ -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, &
@@ -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.
@@ -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)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)
@@ -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