From 6e3a7a7ad55448823937d3f2237a9a051d40a422 Mon Sep 17 00:00:00 2001 From: EricJames-NOAA Date: Wed, 18 Oct 2023 16:36:37 -0600 Subject: [PATCH] Reinstating blowing snow visibility. (#60) --- parm/fv3lam_rrfs.xml | 12 +++++ parm/post_avblflds.xml | 9 ++++ parm/postxconfig-NT-fv3lam_rrfs.txt | 78 ++++++++++++++++++++++++++++- sorc/ncep_post.fd/CALVIS_GSD.f | 55 ++++++++++++++++++-- sorc/ncep_post.fd/MDLFLD.f | 19 ++++++- 5 files changed, 167 insertions(+), 6 deletions(-) diff --git a/parm/fv3lam_rrfs.xml b/parm/fv3lam_rrfs.xml index 40a3bb92b..7fc83c4c9 100755 --- a/parm/fv3lam_rrfs.xml +++ b/parm/fv3lam_rrfs.xml @@ -925,6 +925,12 @@ 6.0 + + GSD_BLSN_ON_SURFACE + VISBSN + 6.0 + + HGT_ON_LVL_OF_ADIAB_COND_FROM_SFC HGT @@ -3412,6 +3418,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 2f58ff3ea..6e13c9b2e 100755 --- a/parm/post_avblflds.xml +++ b/parm/post_avblflds.xml @@ -3857,6 +3857,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 f54bcd0fd..b3a052653 100644 --- a/parm/postxconfig-NT-fv3lam_rrfs.txt +++ b/parm/postxconfig-NT-fv3lam_rrfs.txt @@ -1,7 +1,7 @@ 3 3 -249 -307 +250 +308 PRSLEV 32769 ncep_nco @@ -4828,6 +4828,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 ? @@ -18497,6 +18534,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 ca9028294..64920f918 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,30 @@ 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 +142,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 +307,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) @@ -3574,6 +3574,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