diff --git a/parm/fv3lam_rrfs.xml b/parm/fv3lam_rrfs.xml
index d5b68a93c..fd384ad89 100755
--- a/parm/fv3lam_rrfs.xml
+++ b/parm/fv3lam_rrfs.xml
@@ -1790,7 +1790,7 @@
VIL_ON_ENTIRE_ATMOS
VIL
- 4.0
+ 7.0
diff --git a/parm/postxconfig-NT-fv3lam_rrfs.txt b/parm/postxconfig-NT-fv3lam_rrfs.txt
index 37bbec810..034aa0234 100644
--- a/parm/postxconfig-NT-fv3lam_rrfs.txt
+++ b/parm/postxconfig-NT-fv3lam_rrfs.txt
@@ -9742,7 +9742,7 @@ entire_atmos_single_lyr
0
0.0
1
-4.0
+7.0
0
0
0
diff --git a/sorc/ncep_post.fd/CLDRAD.f b/sorc/ncep_post.fd/CLDRAD.f
index 58bf95eb6..ed0aeb3c3 100644
--- a/sorc/ncep_post.fd/CLDRAD.f
+++ b/sorc/ncep_post.fd/CLDRAD.f
@@ -68,6 +68,7 @@
!> 2022-10-20 | Li(Kate Zhang) | Add nitrate look-up table and nitrate AOD for NASA GOCART (UFS-Aerosols).
!> 2022-11-16 | Eric James | Adding total column dust, biomass burning emissions, hourly wildfire potential from RRFS
!> 2022-1207 | Wen Meng | Add AOD for AQM
+!> 2022-12-15 | Eric James | experimental cloud base height diagnostic from HRRR, to correct a low bias in cloud cover
!>
!> @author Russ Treadon W/NP2 @date 1993-08-30
SUBROUTINE CLDRAD
@@ -2098,11 +2099,18 @@ SUBROUTINE CLDRAD
! However, for RAPv5/HRRRv4, paramater 711 will be supplied as
! the GSD cloud-base height, and parameter 798 will be the
! corresponding cloud-base pressure. (J. Kenyon, 4 Nov 2019)
+! -- E. James, 15 Dec 2022
+! The above experimental diagnostic, developed for the HRRR with
+! lots of "add-ons" to correct for the HRRR's low bias in cloud
+! cover, needs to be revised for the RRFS with its more extensive
+! cloudiness. For an FAA deliverable due Feb 2023, the diagnostic
+! is being modified to get rid of some of the add ons.
! Parameters 711/798: experimental ceiling diagnostic #2 (height and pressure, respectively)
IF ((IGET(711)>0) .OR. (IGET(798)>0)) THEN
! set minimum cloud fraction to represent a ceiling
- ceiling_thresh_cldfra = 0.4
+! ceiling_thresh_cldfra = 0.4
+ ceiling_thresh_cldfra = 0.5
! set some constants for ceiling adjustment in snow (retained from legacy algorithm, also in calvis.f)
rhoice = 970.
coeffp = 10.36
@@ -2192,23 +2200,24 @@ SUBROUTINE CLDRAD
end do
!-- end of search 2
- zceil = min(zceil1,zceil2) ! choose lower of zceil1 and zceil2
+! zceil = min(zceil1,zceil2) ! choose lower of zceil1 and zceil2
+ zceil = zceil1
!-- Search for "indefinite ceiling" (vertical visibility) conditions: consider
! lowering of apparent ceiling due to falling snow (retained from legacy
! diagnostic); this is extracted from calvis.f (visibility diagnostic)
- if (QQS(i,j,LM)>1.e-10) then
- TV=T(I,J,lm)*(H1+D608*Q(I,J,lm))
- RHOAIR=PMID(I,J,lm)/(RD*TV)
- vovermd = (1.+Q(i,j,LM))/rhoair + QQS(i,j,LM)/rhoice
- concfp = QQS(i,j,LM)/vovermd*1000.
- betav = coeffp*concfp**exponfp + 1.e-10
- vertvis = 1000.*min(90., const1/betav)
- if (vertvis < zceil-FIS(I,J)*GI ) then ! if vertvis is more restictive than zceil found above; set zceil to vertvis
- ! note that FIS is geopotential of the surface (ground), and GI is 1/g
- zceil = FIS(I,J)*GI + vertvis
- end if
- end if
+! if (QQS(i,j,LM)>1.e-10) then
+! TV=T(I,J,lm)*(H1+D608*Q(I,J,lm))
+! RHOAIR=PMID(I,J,lm)/(RD*TV)
+! vovermd = (1.+Q(i,j,LM))/rhoair + QQS(i,j,LM)/rhoice
+! concfp = QQS(i,j,LM)/vovermd*1000.
+! betav = coeffp*concfp**exponfp + 1.e-10
+! vertvis = 1000.*min(90., const1/betav)
+! if (vertvis < zceil-FIS(I,J)*GI ) then ! if vertvis is more restictive than zceil found above; set zceil to vertvis
+! ! note that FIS is geopotential of the surface (ground), and GI is 1/g
+! zceil = FIS(I,J)*GI + vertvis
+! end if
+! end if
ceil(I,J) = zceil
ENDDO ! i loop
diff --git a/sorc/ncep_post.fd/INITPOST_NETCDF.f b/sorc/ncep_post.fd/INITPOST_NETCDF.f
index 046753a84..e6220ff87 100644
--- a/sorc/ncep_post.fd/INITPOST_NETCDF.f
+++ b/sorc/ncep_post.fd/INITPOST_NETCDF.f
@@ -27,6 +27,7 @@
!> 2022-11-16 | Eric James | Read smoke, dust, biomass burning, and hourly wildfire potential from RRFS
!> 2022-12-07 | Wen Meng | Read AOD from AQM model
!> 2022-12-23 | Eric Aligo | Read six winter weather diagnostics from model
+!> 2023-01-30 | Sam Trahan | Read cldfra or cldfra_bl, whichever is available
!>
!> @author Hui-Ya Chuang @date 2016-03-04
SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d)
@@ -153,7 +154,7 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d)
integer ii,jj,js,je,iyear,imn,iday,itmp,ioutcount,istatus, &
I,J,L,ll,k,kf,irtn,igdout,n,Index,nframe, &
nframed2,iunitd3d,ierr,idum,iret,nrec,idrt
- integer ncid3d,ncid2d,varid,nhcas
+ integer ncid3d,ncid2d,varid,nhcas,varid_bl,iret_bl
real TSTART,TLMH,TSPH,ES,FACT,soilayert,soilayerb,zhour,dum, &
tvll,pmll,tv, tx1, tx2
@@ -889,9 +890,25 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d)
call read_netcdf_3d_para(ncid3d,im,jm,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, &
spval,VarName,cfr(ista_2l,jsta_2l,1),lm)
else
- VarName='cldfra'
- call read_netcdf_3d_para(ncid2d,im,jm,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, &
- spval,VarName,cfr(ista_2l,jsta_2l,1),lm)
+
+ iret_bl = nf90_inq_varid(ncid2d,'cldfra_bl',varid_bl)
+ iret = nf90_inq_varid(ncid2d,'cldfra',varid)
+
+ if(iret_bl==NF90_NOERR .and. iret==NF90_NOERR) then
+ write(0,*) 'WARNING: BOTH cldfra_bl AND cldfra ARE AVAILABLE. USING cldfra.'
+ VarName='cldfra'
+ else if(iret_bl==NF90_NOERR) then
+ VarName='cldfra_bl'
+ else if(iret==NF90_NOERR) then
+ VarName='cldfra'
+ else
+ VarName='nope'
+ endif
+
+ if(VarName /= 'nope') then
+ call read_netcdf_3d_para(ncid2d,im,jm,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, &
+ spval,VarName,cfr(ista_2l,jsta_2l,1),lm)
+ endif
endif
! do l=1,lm
! if(debugprint)print*,'sample ',VarName,'isa,jsa,l =' &