diff --git a/parm/README.make_flatfile b/parm/README.make_flatfile index a38db9ab6..e7befc1e5 100644 --- a/parm/README.make_flatfile +++ b/parm/README.make_flatfile @@ -6,14 +6,14 @@ To make a .txt flat file for UPP, follow these steps within the parm/ directory: 2) Select, then validate, the associated "postcntrl" file, e.g., - xmllint --noout --schema EMC_POST_CTRL_Schema.xsd fv3lam_rrfs.xml + xmllint --noout --schema EMC_POST_CTRL_Schema.xsd rrfs_postcntrl.xml 3) If file validation succeeds in steps (1) and (2), generate the .txt flat file, e.g., - perl PostXMLPreprocessor.pl fv3lam_rrfs.xml post_avblflds.xml postxconfig-NT-fv3lam_rrfs.txt + perl PostXMLPreprocessor.pl rrfs_postcntrl.xml post_avblflds.xml postxconfig-NT-rrfs.txt - In this example, "fv3lam_rrfs.xml" and "fv3lam_post_avblflds.xml" are input files, read by the perl - script. The "postxconfig-NT-fv3lam_rrfs.txt" flat file is the output file produced by the script, which + In this example, "rrfs_postcntrl.xml" and "post_avblflds.xml" are input files, read by the perl + script. The "postxconfig-NT-rrfs.txt" flat file is the output file produced by the script, which can have any name. Note that a log file will be created by this script, in addition to the flat file. diff --git a/parm/makefile b/parm/makefile index 55a82d860..a685cf5f1 100644 --- a/parm/makefile +++ b/parm/makefile @@ -35,7 +35,7 @@ ALL_TXT= \ postxconfig-NT-GFS-F00-TWO.txt \ postxconfig-NT-hrrr.txt \ postxconfig-NT-rap.txt \ - postxconfig-NT-fv3lam_rrfs.txt \ + postxconfig-NT-rrfs.txt \ postxconfig-NT-UFS-aerosol.txt \ postxconfig-NT-UFS-aerosol-F00.txt \ postxconfig-NT-GEFS-aerosol.txt \ @@ -65,7 +65,7 @@ postxconfig-NT-GFS-TWO.txt: postcntrl_gfs_two.xml post_avblfld postxconfig-NT-GFS-F00-TWO.txt: postcntrl_gfs_f00_two.xml post_avblflds.xml postxconfig-NT-hrrr.txt: hrrr_postcntrl.xml post_avblflds_raphrrr.xml postxconfig-NT-rap.txt: rap_postcntrl.xml post_avblflds_raphrrr.xml -postxconfig-NT-fv3lam_rrfs.txt: fv3lam_rrfs.xml post_avblflds.xml +postxconfig-NT-rrfs.txt: rrfs_postcntrl.xml post_avblflds.xml postxconfig-NT-UFS-aerosol.txt: postcntrl_ufs_aerosol.xml post_avblflds.xml postxconfig-NT-UFS-aerosol-F00.txt: postcntrl_ufs_aerosol_f00.xml post_avblflds.xml postxconfig-NT-GEFS-aerosol.txt: postcntrl_gefs_aerosol.xml post_avblflds.xml diff --git a/parm/post_avblflds.xml b/parm/post_avblflds.xml index 52580b14d..0225a26ca 100755 --- a/parm/post_avblflds.xml +++ b/parm/post_avblflds.xml @@ -6857,7 +6857,10 @@ tmpl4_48 AEMFLX particulate_org_matter_dry - surface + entire_atmos_single_lyr + smaller_than_first_limit + 7 + 25 5.0 @@ -6945,8 +6948,10 @@ 755 HWP_ON_SURFACE + tmpl4_8 Hourly Wildfire Potential on surface WFIREPOT + AVE surface 5.0 @@ -8335,5 +8340,45 @@ 6.0 + + 1015 + EBB_ON_HYBRID_LVL + tmpl4_48 + AEMFLX + particulate_org_matter_dry + hybrid_lvl + smaller_than_first_limit + 7 + 25 + 6.0 + + + + 1016 + EBB_ON_ISOBARIC_SFC + tmpl4_48 + AEMFLX + particulate_org_matter_dry + isobaric_sfc + smaller_than_first_limit + 7 + 25 + 6.0 + + + + 1017 + EBB_ON_SPEC_HGT_LVL_ABOVE_GRND_8m + tmpl4_48 + AEMFLX + particulate_org_matter_dry + spec_hgt_lvl_above_grnd + 8. + smaller_than_first_limit + 7 + 25 + 6.0 + + diff --git a/parm/postxconfig-NT-fv3lam_rrfs.txt b/parm/postxconfig-NT-rrfs.txt similarity index 97% rename from parm/postxconfig-NT-fv3lam_rrfs.txt rename to parm/postxconfig-NT-rrfs.txt index a0e47132a..3922774b1 100644 --- a/parm/postxconfig-NT-fv3lam_rrfs.txt +++ b/parm/postxconfig-NT-rrfs.txt @@ -1,8 +1,8 @@ 4 5 3 -235 -284 +229 +276 PRSLEV 32769 ncep_nco @@ -7419,80 +7419,6 @@ grid_scale_cloud_top_lvl ? ? ? -200 -TCOLW_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLW -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -201 -TCOLI_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLI -? -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? 979 EFSH_ON_EFBL ? @@ -8011,228 +7937,6 @@ level_free_convection ? ? ? -202 -TCOLR_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLR -? -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -203 -TCOLS_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLS -? -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -204 -TCOLC_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLC -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -428 -TCOLG_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLG -? -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -285 -TCLSW_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCLSW -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -286 -TCOLM_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLM -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? 287 HGT_ON_LWST_BOT_LVL_OF_SUPERCOOLED_LIQ_WATER_LYR ? @@ -9980,7 +9684,7 @@ tmpl4_48 AEMFLX ? ? -surface +entire_atmos_single_lyr 0 ? 0 @@ -9991,9 +9695,9 @@ surface 0 ? particulate_org_matter_dry -? -0 -0.0 +smaller_than_first_limit +7 +25 0 0.0 ? @@ -10272,10 +9976,10 @@ entire_atmos_single_lyr HWP_ON_SURFACE Hourly Wildfire Potential on surface 1 -tmpl4_0 +tmpl4_8 WFIREPOT ? -? +AVE surface 0 ? @@ -17462,228 +17166,6 @@ grid_scale_cloud_top_lvl ? ? ? -200 -TCOLW_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLW -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -201 -TCOLI_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLI -? -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -202 -TCOLR_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLR -? -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -203 -TCOLS_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLS -? -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -204 -TCOLC_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLC -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -428 -TCOLG_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLG -? -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? 218 VGTYP_ON_SURFACE ? diff --git a/parm/fv3lam_rrfs.xml b/parm/rrfs_postcntrl.xml similarity index 97% rename from parm/fv3lam_rrfs.xml rename to parm/rrfs_postcntrl.xml index e4afeec3b..000848dd3 100755 --- a/parm/fv3lam_rrfs.xml +++ b/parm/rrfs_postcntrl.xml @@ -1351,19 +1351,6 @@ 6.0 - - TCOLW_ON_ENTIRE_ATMOS - TCOLW - NCEP - 5.0 - - - - TCOLI_ON_ENTIRE_ATMOS - TCOLI - 5.0 - - EFSH_ON_EFBL -1.0 @@ -1434,45 +1421,6 @@ -1.0 - - TCOLR_ON_ENTIRE_ATMOS - TCOLR - 5.0 - - - - TCOLS_ON_ENTIRE_ATMOS - TCOLS - 5.0 - - - - TCOLC_ON_ENTIRE_ATMOS - TCOLC - NCEP - 5.0 - - - - TCOLG_ON_ENTIRE_ATMOS - TCOLG - 5.0 - - - - TCLSW_ON_ENTIRE_ATMOS - TCLSW - NCEP - 5.0 - - - - TCOLM_ON_ENTIRE_ATMOS - TCOLM - NCEP - 5.0 - - HGT_ON_LWST_BOT_LVL_OF_SUPERCOOLED_LIQ_WATER_LYR HGT @@ -3133,44 +3081,6 @@ 6.0 - - TCOLW_ON_ENTIRE_ATMOS - TCOLW - NCEP - 5.0 - - - - TCOLI_ON_ENTIRE_ATMOS - TCOLI - 5.0 - - - - TCOLR_ON_ENTIRE_ATMOS - TCOLR - 5.0 - - - - TCOLS_ON_ENTIRE_ATMOS - TCOLS - 5.0 - - - - TCOLC_ON_ENTIRE_ATMOS - TCOLC - NCEP - 5.0 - - - - TCOLG_ON_ENTIRE_ATMOS - TCOLG - 5.0 - - VGTYP_ON_SURFACE VGTYP diff --git a/sorc/ncep_post.fd/ALLOCATE_ALL.f b/sorc/ncep_post.fd/ALLOCATE_ALL.f index 96e0c183f..453bb5fa2 100644 --- a/sorc/ncep_post.fd/ALLOCATE_ALL.f +++ b/sorc/ncep_post.fd/ALLOCATE_ALL.f @@ -631,7 +631,6 @@ SUBROUTINE ALLOCATE_ALL() allocate(snfden(ista_2l:iend_2u,jsta_2l:jend_2u)) allocate(sndepac(ista_2l:iend_2u,jsta_2l:jend_2u)) allocate(mean_frp(ista_2l:iend_2u,jsta_2l:jend_2u)) - allocate(ebb(ista_2l:iend_2u,jsta_2l:jend_2u)) allocate(hwp(ista_2l:iend_2u,jsta_2l:jend_2u)) !Initialization !$omp parallel do private(i,j) @@ -658,13 +657,13 @@ SUBROUTINE ALLOCATE_ALL() snfden(i,j)=spval sndepac(i,j)=spval mean_frp(i,j)=spval - ebb(i,j)=spval hwp(i,j)=spval enddo enddo allocate(smoke(ista_2l:iend_2u,jsta_2l:jend_2u,lm,nbin_sm)) allocate(fv3dust(ista_2l:iend_2u,jsta_2l:jend_2u,lm,nbin_sm)) allocate(coarsepm(ista_2l:iend_2u,jsta_2l:jend_2u,lm,nbin_sm)) + allocate(ebb(ista_2l:iend_2u,jsta_2l:jend_2u,lm,nbin_sm)) !$omp parallel do private(i,j,l,k) do k=1,nbin_sm do l=1,lm @@ -673,6 +672,7 @@ SUBROUTINE ALLOCATE_ALL() smoke(i,j,l,k)=spval fv3dust(i,j,l,k)=spval coarsepm(i,j,l,k)=spval + ebb(i,j,l,k)=spval enddo enddo enddo diff --git a/sorc/ncep_post.fd/CALPW.f b/sorc/ncep_post.fd/CALPW.f index b5fa827f7..90f3ebb0d 100644 --- a/sorc/ncep_post.fd/CALPW.f +++ b/sorc/ncep_post.fd/CALPW.f @@ -38,6 +38,7 @@ !> 2021-09-02 | Bo Cui | Decompose UPP in X direction !> 2022-11-16 | Eric James | Adding calculation of vertically integrated dust from RRFS !> 2023-02-23 | Eric James | Adding vertically integrated coarse PM from RRFS +!> 2024-04-23 | Eric James | Adding vertically integrated smoke emissions (ebb) !> !> @author Russ Treadon W/NP2 @date 1992-12-24 !----------------------------------------------------------------------- @@ -54,7 +55,7 @@ SUBROUTINE CALPW(PW,IDECID) use vrbls3d, only: q, qqw, qqi, qqr, qqs, cwm, qqg, t, rswtt, & train, tcucn, mcvg, pmid, o3, ext, pint, rlwtt, & taod5503d,sca, asy - use vrbls4d, only: smoke, fv3dust, coarsepm + use vrbls4d, only: smoke, fv3dust, coarsepm, ebb use masks, only: htm use params_mod, only: tfrz, gi use ctlblk_mod, only: lm, jsta, jend, im, spval, ista, iend @@ -297,6 +298,15 @@ SUBROUTINE CALPW(PW,IDECID) Qdum(I,J) = COARSEPM(I,J,L,1)/(1E9) ENDDO END DO + +! EBB (from RRFS) + ELSE IF (IDECID == 24) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + Qdum(I,J) = EBB(I,J,L,1)/(1E9) + ENDDO + END DO ENDIF ! !$omp parallel do private(i,j,dp) diff --git a/sorc/ncep_post.fd/CLDRAD.f b/sorc/ncep_post.fd/CLDRAD.f index 4974ffc30..0f299aa49 100644 --- a/sorc/ncep_post.fd/CLDRAD.f +++ b/sorc/ncep_post.fd/CLDRAD.f @@ -75,6 +75,7 @@ !> 2023-04-04 | Li(Kate Zhang) | Add namelist optoin for CCPP-Chem (UFS-Chem) model. !> 2023-04-17 | Eric James | Getting rid of special treatment for RRFS AOD (use RAP/HRRR approach) !> 2023-09-26 | Jaymes Kenyon | For RRFS, use cloud fraction to diagnose cloud base/top (height and pressure) +!> 2024-04-23 | Eric James | Adding smoke emissions (ebb) from RRFS !> !> @author Russ Treadon W/NP2 @date 1993-08-30 !--------------------------------------------------------------------------------- @@ -102,7 +103,7 @@ SUBROUTINE CLDRAD AIRDIFFSWIN, DUSMASS, DUSMASS25, DUCMASS, DUCMASS25, & ALWINC, ALWTOAC, SWDDNI, SWDDIF, SWDNBC, SWDDNIC, & SWDDIFC, SWUPBC, LWDNBC, LWUPBC, SWUPT, & - TAOD5502D, AERSSA2D, AERASY2D, MEAN_FRP, EBB, HWP, & + TAOD5502D, AERSSA2D, AERASY2D, MEAN_FRP, HWP, & LWP, IWP, AVGCPRATE, & DUSTCB,SSCB,BCCB,OCCB,SULFCB,DUSTPM,SSPM,aod550, & du_aod550,ss_aod550,su_aod550,oc_aod550,bc_aod550, & @@ -116,7 +117,7 @@ SUBROUTINE CLDRAD TCLOD, ARDSW, TRDSW, ARDLW, NBIN_DU, TRDLW, IM, & NBIN_SS, NBIN_OC,NBIN_BC,NBIN_SU,NBIN_NO3,DTQ2, & JM, LM, gocart_on, gccpp_on, nasa_on, me, rdaod, & - ISTA, IEND,aqf_on + ISTA, IEND,aqf_on,TSRFC use rqstfld_mod, only: IGET, ID, LVLS, IAVBLFLD use gridspec_mod, only: dyval, gridtype use cmassi_mod, only: TRAD_ice @@ -156,7 +157,7 @@ SUBROUTINE CLDRAD REAL, dimension(ista:iend,jsta:jend) :: TCLD, CEILING real CU_ir(LM), q_conv !bsf !jw - integer I,J,L,K,IBOT,ITCLOD,LBOT,LTOP,ITRDSW,ITRDLW, & + integer I,J,L,K,IBOT,ITCLOD,LBOT,LTOP,ITRDSW,ITRDLW,ITSRFC, & LLMH,ITHEAT,IFINCR,ITYPE,ITOP,NUM_THICK real DPBND,RRNUM,QCLD,RSUM,TLMH,FACTRS,FACTRL,DP, & OPDEPTH, TMP,QSAT,RHUM,TCEXT,DELZ,DELY,DY_m @@ -527,6 +528,25 @@ SUBROUTINE CLDRAD enddo endif ENDIF +! +! TOTAL COLUMN EBB (BIOMASS BURNING EMISSIONS) +! + IF (IGET(745) > 0) THEN + CALL CALPW(GRID1(ista:iend,jsta:iend),24) + CALL BOUND(GRID1,D00,H99999) + if(grib == "grib2" )then + cfld = cfld + 1 + fld_info(cfld)%ifld = IAVBLFLD(IGET(745)) +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) + enddo + enddo + endif + ENDIF ! ! TOTAL COLUMN CLOUD WATER IF (IGET(200) > 0 .or. IGET(575) > 0) THEN @@ -3943,24 +3963,6 @@ SUBROUTINE CLDRAD endif ENDIF -! Biomass burning emissions (EBB) - IF (IGET(745)>0) THEN - DO J=JSTA,JEND - DO I=ISTA,IEND - IF (EBB(I,J)0) THEN DO J=JSTA,JEND @@ -3972,11 +3974,35 @@ SUBROUTINE CLDRAD ENDIF ENDDO ENDDO - if(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(755)) - datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) + ID(1:25) = 0 + ITSRFC = NINT(TSRFC) + IF(ITSRFC /= 0) then + IFINCR = MOD(IFHR,ITSRFC) + IF(IFMIN >= 1)IFINCR= MOD(IFHR*60+IFMIN,ITSRFC*60) + ELSE + IFINCR = 0 endif + ID(19) = IFHR + IF(IFMIN >= 1)ID(19)=IFHR*60+IFMIN + ID(20) = 3 + IF (IFINCR==0) THEN + ID(18) = IFHR-ITSRFC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18)<0) ID(18) = 0 + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(755)) + if(ITSRFC>0) then + fld_info(cfld)%ntrange=1 + else + fld_info(cfld)%ntrange=0 + endif + fld_info(cfld)%tinvstat=IFHR-ID(18) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) + endif ENDIF ! CURRENT (instantaneous) INCOMING CLEARSKY SW RADIATION AT THE SURFACE. diff --git a/sorc/ncep_post.fd/INITPOST_NETCDF.f b/sorc/ncep_post.fd/INITPOST_NETCDF.f index 8537de90e..36c538371 100644 --- a/sorc/ncep_post.fd/INITPOST_NETCDF.f +++ b/sorc/ncep_post.fd/INITPOST_NETCDF.f @@ -50,6 +50,7 @@ !> 2024-02-20 | Jaymes Kenyon | Add calculation of PBLHGUST (from INITPOST.F) to support RRFS 10-m wind gust diagnostic !> 2024-03-15 | Wen Meng | Add option to read 3D soil-related variables !> 2024-03-25 | Eric James | Enabling reading of snow melt and surface albedo from RRFS +!> 2024-04-23 | Eric James | Updating smoke emissions to be 3D variable (ebu_smoke) !> !> @author Hui-Ya Chuang @date 2016-03-04 !---------------------------------------------------------------------- @@ -63,7 +64,7 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) use netcdf - use vrbls4d, only: dust, SALT, SUSO, SOOT, WASO, smoke, fv3dust, coarsepm, & + use vrbls4d, only: dust, SALT, SUSO, SOOT, WASO, smoke, fv3dust, coarsepm, ebb, & no3,nh4, PP25, PP10 use vrbls3d, only: t, q, uh, vh, pmid, pint, alpint, dpres, zint, zmid, o3, & qqr, qqnr, qqs, qqi, qqni, qqw, qqnw, qqg, qqh, cwm, & @@ -98,7 +99,7 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) alwoutc,alwtoac,aswoutc,aswtoac,alwinc,aswinc,avgpotevp,snoavg, & ti,aod550,du_aod550,ss_aod550,su_aod550,oc_aod550,bc_aod550,prate_max,maod,dustpm10, & dustcb,bccb,occb,sulfcb,sscb,dustallcb,ssallcb,dustpm,sspm,pp25cb,pp10cb,no3cb,nh4cb,& - pwat, ebb, hwp, aqm_aod550, ltg1_max,ltg2_max,ltg3_max, hail_maxhailcast, pblhgust + pwat, hwp, aqm_aod550, ltg1_max,ltg2_max,ltg3_max, hail_maxhailcast, pblhgust use soil, only: sldpth, sllevel, sh2o, smc, stc use masks, only: lmv, lmh, htm, vtm, gdlat, gdlon, dx, dy, hbm2, sm, sice use physcons_post, only: grav => con_g, fv => con_fvirt, rgas => con_rd, & @@ -534,14 +535,14 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) end if if(me==0)print*,'nhcas= ',nhcas if (nhcas == 0 ) then !non-hydrostatic case - nrec=22 + nrec=23 allocate (recname(nrec)) recname=[character(len=20) :: 'ugrd','vgrd','spfh','tmp','o3mr', & 'presnh','dzdt', 'clwmr','dpres', & 'delz','icmr','rwmr', & 'snmr','grle','hail','smoke', & 'dust','coarsepm','ext550', & - 'nicp','water_nc','rain_nc'] + 'ebu_smoke','nicp','water_nc','rain_nc'] else nrec=8 allocate (recname(nrec)) @@ -908,12 +909,14 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) spval,recname(18),coarsepm(ista_2l,jsta_2l,1,1),lm) call read_netcdf_3d_para(ncid2d,im,jm,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & spval,recname(19),ext550(ista_2l,jsta_2l,1),lm) + call read_netcdf_3d_para(ncid2d,im,jm,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & + spval,recname(20),ebb(ista_2l,jsta_2l,1,1),lm) call read_netcdf_3d_para(ncid3d,im,jm,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & - spval,recname(20),qqni(ista_2l,jsta_2l,1),lm) + spval,recname(21),qqni(ista_2l,jsta_2l,1),lm) call read_netcdf_3d_para(ncid3d,im,jm,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & - spval,recname(21),qqnw(ista_2l,jsta_2l,1),lm) + spval,recname(22),qqnw(ista_2l,jsta_2l,1),lm) call read_netcdf_3d_para(ncid3d,im,jm,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & - spval,recname(22),qqnr(ista_2l,jsta_2l,1),lm) + spval,recname(23),qqnr(ista_2l,jsta_2l,1),lm) endif ! Compute max QRAIN in the column to be used later in precip type computation @@ -1069,13 +1072,8 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) call read_netcdf_2d_para(ncid3d,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & spval,VarName,hail_maxhailcast(ista_2l,jsta_2l)) if(debugprint)print*,'sample ',VarName,' =',hail_maxhailcast(isa,jsa) -! biomass burning emissions - VarName='ebb_smoke_hr' - call read_netcdf_2d_para(ncid2d,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,ebb(ista_2l,jsta_2l)) - if(debugprint)print*,'sample ',VarName,' =',ebb(isa,jsa) ! hourly wildfire potential - VarName='hwp' + VarName='hwp_ave' call read_netcdf_2d_para(ncid2d,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & spval,VarName,hwp(ista_2l,jsta_2l)) if(debugprint)print*,'sample ',VarName,' =',hwp(isa,jsa) diff --git a/sorc/ncep_post.fd/MDL2P.f b/sorc/ncep_post.fd/MDL2P.f index f61546b9e..a31102686 100644 --- a/sorc/ncep_post.fd/MDL2P.f +++ b/sorc/ncep_post.fd/MDL2P.f @@ -38,6 +38,7 @@ !> 2023-02-23 | E James | Adding coarse PM from RRFS !> 2023-08-24 | Y Mao | Add gtg_on option for GTG interpolation !> 2023-09-12 | J Kenyon | Prevent spurious supercooled rain and cloud water +!> 2024-04-23 | E James | Adding smoke emissions (ebb) from RRFS !> !> @author T Black W/NP2 @date 1999-09-23 !-------------------------------------------------------------------------------------- @@ -49,7 +50,7 @@ SUBROUTINE MDL2P(iostatusD3D) ! ! - use vrbls4d, only: DUST, SMOKE, FV3DUST, COARSEPM + use vrbls4d, only: DUST, SMOKE, FV3DUST, COARSEPM, EBB use vrbls3d, only: PINT, O3, PMID, T, Q, UH, VH, WH, OMGA, Q2, CWM, & QQW, QQI, QQR, QQS, QQG, DBZ, F_RIMEF, TTND, CFR, & RLWTT, RSWTT, VDIFFTT, TCUCN, TCUCNS, & @@ -99,7 +100,7 @@ SUBROUTINE MDL2P(iostatusD3D) &, OSL_OLD, OSL995 & &, ICINGFSL, ICINGVSL REAL, allocatable :: D3DSL(:,:,:), SMOKESL(:,:,:), FV3DUSTSL(:,:,:) & - &, COARSEPMSL(:,:,:) + &, COARSEPMSL(:,:,:), EBBSL(:,:,:) REAL, allocatable :: GTGSL(:,:),CATSL(:,:),MWTSL(:,:) ! integer,intent(in) :: iostatusD3D @@ -180,6 +181,15 @@ SUBROUTINE MDL2P(iostatusD3D) enddo enddo enddo + if (.not. allocated(ebbsl)) allocate(ebbsl(im,jm,nbin_sm)) +!$omp parallel do private(i,j,l) + do l=1,nbin_sm + do j=1,jm + do i=1,im + EBBSL(i,j,l) = SPVAL + enddo + enddo + enddo ! For GTG, should run MDL2P interpolation? gtg_interpolation = .false. @@ -395,6 +405,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF(SMOKE(I,J,1,K) < SPVAL) SMOKESL(I,J,K)=SMOKE(I,J,1,K) IF(FV3DUST(I,J,1,K) < SPVAL) FV3DUSTSL(I,J,K)=FV3DUST(I,J,1,K) IF(COARSEPM(I,J,1,K) < SPVAL) COARSEPMSL(I,J,K)=COARSEPM(I,J,1,K) + IF(EBB(I,J,1,K) < SPVAL) EBBSL(I,J,K)=EBB(I,J,1,K) ENDDO ! only interpolate GFS d3d fields when reqested @@ -662,6 +673,8 @@ SUBROUTINE MDL2P(iostatusD3D) FV3DUSTSL(I,J,K)=FV3DUST(I,J,LL,K)+(FV3DUST(I,J,LL,K)-FV3DUST(I,J,LL-1,K))*FACT IF(COARSEPM(I,J,LL,K) < SPVAL .AND. COARSEPM(I,J,LL-1,K) < SPVAL) & COARSEPMSL(I,J,K)=COARSEPM(I,J,LL,K)+(COARSEPM(I,J,LL,K)-COARSEPM(I,J,LL-1,K))*FACT + IF(EBB(I,J,LL,K) < SPVAL .AND. EBB(I,J,LL-1,K) < SPVAL) & + EBBSL(I,J,K)=EBB(I,J,LL,K)+(EBB(I,J,LL,K)-EBB(I,J,LL-1,K))*FACT ENDDO ! only interpolate GFS d3d fields when == ested @@ -2391,6 +2404,30 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(1013)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(1013)) +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) + enddo + enddo + endif + ENDIF + ENDIF +! E. James - 23 Apr 2024: EBB from RRFS + IF (IGET(1016) > 0) THEN + IF (LVLS(LP,IGET(1016)) > 0) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + GRID1(I,J) = EBBSL(I,J,1)/(1E9) + ENDDO + ENDDO + if(grib == 'grib2')then + cfld = cfld + 1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1016)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(1016)) !$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 @@ -4200,6 +4237,7 @@ SUBROUTINE MDL2P(iostatusD3D) if(allocated(smokesl)) deallocate(smokesl) if(allocated(fv3dustsl)) deallocate(fv3dustsl) if(allocated(coarsepmsl)) deallocate(coarsepmsl) +if(allocated(ebbsl)) deallocate(ebbsl) ! GTG if(allocated(GTGSL)) deallocate(GTGSL) if(allocated(CATSL)) deallocate(CATSL) diff --git a/sorc/ncep_post.fd/MDLFLD.f b/sorc/ncep_post.fd/MDLFLD.f index 46139ff09..2e06f77f4 100644 --- a/sorc/ncep_post.fd/MDLFLD.f +++ b/sorc/ncep_post.fd/MDLFLD.f @@ -61,6 +61,7 @@ !! 24-01-07 | Y Mao | Add EDPARM IDs to the condition to call gtg_algo() !! 24-01-24 | H Lin | switching GTG max (gtg) to gtgx3 from gtgx2 per gtg_algo() call !! 24-02-20 | J Kenyon | Apply the PBLHGUST-related calculations to RRFS +!! 24-04-23 | E James| Adding smoke emissions (ebb) from RRFS !! !! USAGE: CALL MDLFLD !! INPUT ARGUMENT LIST: @@ -99,7 +100,7 @@ SUBROUTINE MDLFLD ! use vrbls4d, only: dust, salt, suso, waso, soot, no3, nh4, smoke, fv3dust,& - coarsepm + coarsepm, ebb use vrbls3d, only: zmid, t, pmid, q, cwm, f_ice, f_rain, f_rimef, qqw, qqi,& qqr, qqs, cfr, cfr_raw, dbz, dbzr, dbzi, dbzc, qqw, nlice, nrain, qqg, qqh, zint,& qqni, qqnr, qqnw, qqnwfa, qqnifa, uh, vh, mcvg, omga, wh, q2, ttnd, rswtt, & @@ -2446,6 +2447,33 @@ SUBROUTINE MDLFLD endif END IF ENDIF +! +! E. James - 23 Apr 2024: EBB from RRFS +! + IF (IGET(1015)>0) THEN + IF (LVLS(L,IGET(1015))>0) THEN + LL=LM-L+1 +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ista,iend + GRID1(I,J) = EBB(I,J,LL,1)/(1E9) + ENDDO + ENDDO + if(grib=="grib2") then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1015)) + fld_info(cfld)%lvl=LVLSXML(L,IGET(1015)) +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) + enddo + enddo + endif + END IF + ENDIF ! if ( gocart_on .or. gccpp_on .or. nasa_on ) then ! DUST 1 diff --git a/sorc/ncep_post.fd/SURFCE.f b/sorc/ncep_post.fd/SURFCE.f index 85a099a3c..3ed30fa53 100644 --- a/sorc/ncep_post.fd/SURFCE.f +++ b/sorc/ncep_post.fd/SURFCE.f @@ -49,6 +49,7 @@ !> 2024-01-30 | A Jensen | Comment out graupel precipitation warning. !> 2024-02-07 | E James | Enabling output of LAI and wilting point for RRFS. !> 2024-03-25 | E James | Enabling output of column integrated soil moisture. +!> 2024-04-23 | E James | Adding smoke emissions (ebb) from RRFS !> !> @note !> USAGE: CALL SURFCE @@ -75,7 +76,7 @@ SUBROUTINE SURFCE ! ! INCLUDE GRID DIMENSIONS. SET/DERIVE OTHER PARAMETERS. ! - use vrbls4d, only: smoke, fv3dust, coarsepm + use vrbls4d, only: smoke, fv3dust, coarsepm, ebb use vrbls3d, only: zint, pint, t, pmid, q, f_rimef use vrbls2d, only: ths, qs, qvg, qv2m, tsnow, tg, smstav, smstot, & cmc, sno, snoavg, psfcavg, t10avg, snonc, ivgtyp, & @@ -2225,6 +2226,22 @@ SUBROUTINE SURFCE endif ENDIF ! +! E. James - 23 Apr 2024: EBB from RRFS on lowest model level +! + IF (IGET(1017)>0) THEN + GRID1=SPVAL + DO J=JSTA,JEND + DO I=ISTA,IEND + GRID1(I,J) = EBB(I,J,LM,1)/(1E9) + ENDDO + ENDDO + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1017)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) + endif + ENDIF +! ! ! BLOCK 3. ANEMOMETER LEVEL (10M) WINDS, THETA, AND Q. ! diff --git a/sorc/ncep_post.fd/VRBLS2D_mod.f b/sorc/ncep_post.fd/VRBLS2D_mod.f index c7f10ce25..bed4ffeda 100644 --- a/sorc/ncep_post.fd/VRBLS2D_mod.f +++ b/sorc/ncep_post.fd/VRBLS2D_mod.f @@ -61,7 +61,7 @@ module vrbls2d ,SWRADmean(:,:),U10mean(:,:),V10mean(:,:),SPDUV10mean(:,:) & ,SWNORMmean(:,:),SNFDEN(:,:),SNDEPAC(:,:),SWDDNI(:,:),SWDDIF(:,:) & ,SWDNBC(:,:),SWDDNIC(:,:),SWDDIFC(:,:), SWUPBC(:,:), SWUPT(:,:) & - ,TAOD5502D(:,:),AERASY2D(:,:),AERSSA2D(:,:),MEAN_FRP(:,:),EBB(:,:) & + ,TAOD5502D(:,:),AERASY2D(:,:),AERSSA2D(:,:),MEAN_FRP(:,:) & ,HWP(:,:),LWP(:,:),IWP(:,:),XLAIXY(:,:) & ! add new fields for GFS ,SFCUX(:,:),SFCVX(:,:),SFCUXI(:,:), SFCVXI(:,:),AVGALBEDO(:,:),AVGCPRATE(:,:) & diff --git a/sorc/ncep_post.fd/VRBLS4D_mod.f b/sorc/ncep_post.fd/VRBLS4D_mod.f index a31dd77ab..17bc0f6ff 100644 --- a/sorc/ncep_post.fd/VRBLS4D_mod.f +++ b/sorc/ncep_post.fd/VRBLS4D_mod.f @@ -16,6 +16,7 @@ module vrbls4d real, allocatable :: SMOKE(:,:,:,:) real, allocatable :: FV3DUST(:,:,:,:) real, allocatable :: COARSEPM(:,:,:,:) + real, allocatable :: EBB(:,:,:,:) real, allocatable :: PP25(:,:,:,:) ! PP25 real, allocatable :: PP10(:,:,:,:) ! PP10 !