Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introducing blowing snow impact on visibility #823

Merged
merged 4 commits into from
Nov 30, 2023
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
52 changes: 50 additions & 2 deletions sorc/ncep_post.fd/CALVIS_GSD.f
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,15 @@ 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-11 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 ctlblk_mod, only: jm, im, jsta_2l, jend_2u, lm, modelname, spval,&
use params_mod, only: h1, d608, rd, g
use ctlblk_mod, only: jm, im, jsta_2l, jend_2u, lm, modelname, spval, method_blsn,&
ista_2l, iend_2u

implicit none
Expand All @@ -109,6 +111,10 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS)
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 @@ -300,6 +306,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 +354,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) then ! BLSN method, updated 8 August 2022 by Tim Corrie
BETAV = BETAV + BETABLSN
endif
endif

! Calculation of visibility based on hydrometeor and aerosols. (RH effect not yet included.)
Expand Down
2 changes: 2 additions & 0 deletions sorc/ncep_post.fd/CTLBLK.f
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
!> 2023-04-04 | Li(Kate Zhang) | Add namelist optoin for CCPP-Chem (UFS-Chem) and 2D diag. output (d2d_chem) for GEFS-Aerosols and CCPP-Chem model.
!> 2023-04-17 | Eric James | Adding 160 and 320 m above ground to HTFD for RRFS output.
!> 2023-08-16 | Yali Mao | Add gtg_on logical option
!> 2023-11-24 | Eric James | Add method_blsn logical option
!-----------------------------------------------------------------------
!> @defgroup CTLBLK_mod Sets default parameters that are used throughout the UPP code
!-----------------------------------------------------------------------
Expand Down Expand Up @@ -73,6 +74,7 @@ module CTLBLK_mod
logical :: aqf_on !< Turn on Air Quality Forecasting (CMAQ-based).
logical :: slrutah_on !< Calculate snow to liquid ratio (SLR) using method from University of Utah.
logical :: gtg_on !< Turn on GTG (Graphical Turbulence Guidance)
logical :: method_blsn !< Turn on blowing snow effect on visibility diagnostic
!
logical :: SIGMA !< No longer used/supported.
logical :: RUN !< No longer used/supported.
Expand Down
6 changes: 4 additions & 2 deletions sorc/ncep_post.fd/WRFPOST.f
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
! and 2D diag. output (d2d_chem) for GEFS-Aerosols and CCPP-Chem model.
!> 2023-05-20 | Rahul Mahajan | Bug fix for fileNameFlat as namelist configurable
!> 2023-08-16 | Yali Mao | Add gtg_on logical option
!> 2023-11-29 | Eric James | Add method_blsn logical option
!> @author Mike Bladwin NSSL/SPC @date 2002-06-18
!---------------------------------------------------------------------
!> @return wrfpost
Expand Down Expand Up @@ -127,7 +128,7 @@ PROGRAM WRFPOST
mdl2agl_tim, mdl2std_tim, mdl2thandpv_tim, calrad_wcloud_tim,nasa_on,gccpp_on, &
fixed_tim, time_output, imin, surfce2_tim, komax, ivegsrc, d3d_on, gocart_on,rdaod, &
readxml_tim, spval, fullmodelname, submodelname, hyb_sigp, filenameflat, aqf_on,numx, &
run_ifi_tim, slrutah_on, d2d_chem, gtg_on
run_ifi_tim, slrutah_on, d2d_chem, gtg_on, method_blsn
WenMeng-NOAA marked this conversation as resolved.
Show resolved Hide resolved
use grib2_module, only: gribit2,num_pset,nrecout,first_grbtbl,grib_info_finalize
use upp_ifi_mod, only: write_ifi_debug_files
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Expand All @@ -153,7 +154,7 @@ PROGRAM WRFPOST
!
integer :: kpo,kth,kpv
real,dimension(komax) :: po,th,pv
namelist/nampgb/kpo,po,kth,th,kpv,pv,fileNameAER,d3d_on,gocart_on,gccpp_on, nasa_on,gtg_on,popascal &
namelist/nampgb/kpo,po,kth,th,kpv,pv,fileNameAER,d3d_on,gocart_on,gccpp_on, nasa_on,gtg_on,method_blsn,popascal &
,hyb_sigp,rdaod,d2d_chem, aqf_on,slrutah_on, vtimeunits,numx,write_ifi_debug_files
integer :: itag_ierr
namelist/model_inputs/fileName,IOFORM,grib,DateStr,MODELNAME,SUBMODELNAME &
Expand Down Expand Up @@ -261,6 +262,7 @@ PROGRAM WRFPOST
aqf_on = .false.
slrutah_on = .false.
gtg_on = .false.
method_blsn = .true.
popascal = .false.
fileNameAER = ''
rdaod = .false.
Expand Down
Loading