diff --git a/parm/fv3lam_rrfs.xml b/parm/fv3lam_rrfs.xml index f82f7c9f1..b96977d87 100755 --- a/parm/fv3lam_rrfs.xml +++ b/parm/fv3lam_rrfs.xml @@ -1872,6 +1872,42 @@ 5.0 + + BIOMASS_BURNING_EMISSIONS + 5.0 + + + + SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m + 6.0 + + + + SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR + 5.0 + + + + DUST_ON_SPEC_HGT_LVL_ABOVE_GRND_8m + 6.0 + + + + DUST_ON_ENTIRE_ATMOS_SINGLE_LYR + 5.0 + + + + AOD_ON_ENTIRE_ATMOS_SINGLE_LYR + 5.0 + + + + HWP_ON_SURFACE + FWINX + 5.0 + + @@ -2489,6 +2525,22 @@ 3.0 + + SMOKE_ON_HYBRID_LVL + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 6.0 + + + + DUST_ON_HYBRID_LVL + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 6.0 + + LCDC_ON_LOW_CLOUD_LYR LCDC diff --git a/parm/post_avblflds.xml b/parm/post_avblflds.xml index 9b151064e..68592827d 100755 --- a/parm/post_avblflds.xml +++ b/parm/post_avblflds.xml @@ -6758,8 +6758,9 @@ 736 SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR - tmpl4_0 + tmpl4_48 COLMD + particulate_org_matter_dry entire_atmos_single_lyr 5.0 @@ -6767,8 +6768,9 @@ 737 SMOKE_ON_HYBRID_LVL - tmpl4_0 + tmpl4_48 MASSDEN + particulate_org_matter_dry hybrid_lvl 6.0 @@ -6776,8 +6778,9 @@ 738 SMOKE_ON_ISOBARIC_SFC - tmpl4_0 + tmpl4_48 MASSDEN + particulate_org_matter_dry isobaric_sfc 6.0 @@ -6785,8 +6788,9 @@ 739 SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m - tmpl4_0 + tmpl4_48 MASSDEN + particulate_org_matter_dry spec_hgt_lvl_above_grnd 8. 6.0 @@ -6795,12 +6799,64 @@ 740 MEAN_FIRE_RDIATV_PWR + tmpl4_0 CFNSF NCEP surface 4.0 + + 741 + DUST_ON_ENTIRE_ATMOS_SINGLE_LYR + tmpl4_48 + COLMD + dust_dry + entire_atmos_single_lyr + 5.0 + + + + 742 + DUST_ON_HYBRID_LVL + tmpl4_48 + MASSDEN + dust_dry + hybrid_lvl + 6.0 + + + + 743 + DUST_ON_ISOBARIC_SFC + tmpl4_48 + MASSDEN + dust_dry + isobaric_sfc + 6.0 + + + + 744 + DUST_ON_SPEC_HGT_LVL_ABOVE_GRND_8m + tmpl4_48 + MASSDEN + dust_dry + spec_hgt_lvl_above_grnd + 8. + 6.0 + + + + 745 + BIOMASS_BURNING_EMISSIONS + tmpl4_48 + AEMFLX + particulate_org_matter_dry + surface + 5.0 + + 746 ACM_GRAUPEL_ON_SURFACE @@ -6881,6 +6937,15 @@ 3.0 + + 755 + HWP_ON_SURFACE + Hourly Wildfire Potential on surface + FWINX + surface + 5.0 + + 756 GSD_PRES_ON_HGHST_TROP_FRZ_LVL @@ -6940,6 +7005,22 @@ 3.0 + + 764 + CSDLF_ON_SURFACE + CSDLF + surface + 3.0 + + + + 765 + CSULF_ON_SURFACE + CSULF + surface + 3.0 + + 766 GSD_NCWFA_ON_HYBRID_LVL diff --git a/parm/post_avblflds_raphrrr.xml b/parm/post_avblflds_raphrrr.xml index c945f89e3..617a51557 100755 --- a/parm/post_avblflds_raphrrr.xml +++ b/parm/post_avblflds_raphrrr.xml @@ -5616,8 +5616,9 @@ 736 SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR - tmpl4_0 + tmpl4_48 COLMD + particulate_org_matter_dry entire_atmos_single_lyr 5.0 @@ -5625,8 +5626,9 @@ 737 SMOKE_ON_HYBRID_LVL - tmpl4_0 + tmpl4_48 MASSDEN + particulate_org_matter_dry hybrid_lvl 6.0 @@ -5634,8 +5636,9 @@ 738 SMOKE_ON_ISOBARIC_SFC - tmpl4_0 + tmpl4_48 MASSDEN + particulate_org_matter_dry isobaric_sfc 6.0 @@ -5643,8 +5646,9 @@ 739 SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m - tmpl4_0 + tmpl4_48 MASSDEN + particulate_org_matter_dry spec_hgt_lvl_above_grnd 8. 6.0 diff --git a/parm/postxconfig-NT-3drtma.txt b/parm/postxconfig-NT-3drtma.txt index f9e73439b..20bd9d9b8 100644 --- a/parm/postxconfig-NT-3drtma.txt +++ b/parm/postxconfig-NT-3drtma.txt @@ -577,7 +577,7 @@ spec_hgt_lvl_above_grnd SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -591,7 +591,7 @@ spec_hgt_lvl_above_grnd ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -5424,7 +5424,7 @@ entire_atmos_single_lyr SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR ? 1 -tmpl4_0 +tmpl4_48 COLMD ? ? @@ -5438,7 +5438,7 @@ entire_atmos_single_lyr ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -7417,7 +7417,7 @@ hybrid_lvl SMOKE_ON_HYBRID_LVL ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -7431,7 +7431,7 @@ hybrid_lvl ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 diff --git a/parm/postxconfig-NT-fv3lam_rrfs.txt b/parm/postxconfig-NT-fv3lam_rrfs.txt index e3f408538..fb436bdd7 100644 --- a/parm/postxconfig-NT-fv3lam_rrfs.txt +++ b/parm/postxconfig-NT-fv3lam_rrfs.txt @@ -1,6 +1,6 @@ 2 -239 -276 +241 +283 PRSLEV 32769 ncep_nco @@ -10229,6 +10229,265 @@ surface ? ? ? +745 +BIOMASS_BURNING_EMISSIONS +? +1 +tmpl4_48 +AEMFLX +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +particulate_org_matter_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +739 +SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m +? +1 +tmpl4_48 +MASSDEN +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +8. +? +0 +? +0 +? +particulate_org_matter_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +736 +SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +particulate_org_matter_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +744 +DUST_ON_SPEC_HGT_LVL_ABOVE_GRND_8m +? +1 +tmpl4_48 +MASSDEN +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +8. +? +0 +? +0 +? +dust_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +741 +DUST_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +dust_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +735 +AOD_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_0 +AOTK +? +? +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 +? +? +? +755 +HWP_ON_SURFACE +Hourly Wildfire Potential on surface +1 +tmpl4_0 +FWINX +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? NATLEV 32769 ncep_nco @@ -13279,6 +13538,80 @@ hybrid_lvl ? ? ? +737 +SMOKE_ON_HYBRID_LVL +? +1 +tmpl4_48 +MASSDEN +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +particulate_org_matter_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +742 +DUST_ON_HYBRID_LVL +? +1 +tmpl4_48 +MASSDEN +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +dust_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? 37 LCDC_ON_LOW_CLOUD_LYR ? diff --git a/parm/postxconfig-NT-hrrr.txt b/parm/postxconfig-NT-hrrr.txt index eb687ff27..a24976cb5 100644 --- a/parm/postxconfig-NT-hrrr.txt +++ b/parm/postxconfig-NT-hrrr.txt @@ -577,7 +577,7 @@ spec_hgt_lvl_above_grnd SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -591,7 +591,7 @@ spec_hgt_lvl_above_grnd ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -5498,7 +5498,7 @@ entire_atmos_single_lyr SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR ? 1 -tmpl4_0 +tmpl4_48 COLMD ? ? @@ -5512,7 +5512,7 @@ entire_atmos_single_lyr ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -6973,7 +6973,7 @@ hybrid_lvl SMOKE_ON_HYBRID_LVL ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -6987,7 +6987,7 @@ hybrid_lvl ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 diff --git a/parm/postxconfig-NT-rap.txt b/parm/postxconfig-NT-rap.txt index 16e98464e..c76b78397 100644 --- a/parm/postxconfig-NT-rap.txt +++ b/parm/postxconfig-NT-rap.txt @@ -1686,7 +1686,7 @@ spec_hgt_lvl_above_grnd SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -1700,7 +1700,7 @@ spec_hgt_lvl_above_grnd ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -4424,7 +4424,7 @@ entire_atmos_single_lyr SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR ? 1 -tmpl4_0 +tmpl4_48 COLMD ? ? @@ -4438,7 +4438,7 @@ entire_atmos_single_lyr ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -7067,7 +7067,7 @@ hybrid_lvl SMOKE_ON_HYBRID_LVL ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -7081,7 +7081,7 @@ hybrid_lvl ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -8769,7 +8769,7 @@ spec_hgt_lvl_above_grnd SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -8783,7 +8783,7 @@ spec_hgt_lvl_above_grnd ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -9361,7 +9361,7 @@ entire_atmos_single_lyr SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR ? 1 -tmpl4_0 +tmpl4_48 COLMD ? ? @@ -9375,7 +9375,7 @@ entire_atmos_single_lyr ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 diff --git a/scripts/exgfs_atmos_nceppost.sh b/scripts/exgfs_atmos_nceppost.sh index 65b98984e..500bc1cfb 100755 --- a/scripts/exgfs_atmos_nceppost.sh +++ b/scripts/exgfs_atmos_nceppost.sh @@ -81,7 +81,7 @@ export machine=${machine:-WCOSS_C} ########################### # Specify Output layers ########################### -export POSTGPVARS="KPO=57,PO=1000.,975.,950.,925.,900.,875.,850.,825.,800.,775.,750.,725.,700.,675.,650.,625.,600.,575.,550.,525.,500.,475.,450.,425.,400.,375.,350.,325.,300.,275.,250.,225.,200.,175.,150.,125.,100.,70.,50.,40.,30.,20.,15.,10.,7.,5.,3.,2.,1.,0.7,0.4,0.2,0.1,0.07,0.04,0.02,0.01,rdaod=.true." +export POSTGPVARS="KPO=57,PO=1000.,975.,950.,925.,900.,875.,850.,825.,800.,775.,750.,725.,700.,675.,650.,625.,600.,575.,550.,525.,500.,475.,450.,425.,400.,375.,350.,325.,300.,275.,250.,225.,200.,175.,150.,125.,100.,70.,50.,40.,30.,20.,15.,10.,7.,5.,3.,2.,1.,0.7,0.4,0.2,0.1,0.07,0.04,0.02,0.01,rdaod=.true.," ########################################################## # Specify variable to directly output pgrb2 files for GDAS/GFS diff --git a/sorc/ncep_post.fd/ALLOCATE_ALL.f b/sorc/ncep_post.fd/ALLOCATE_ALL.f index 9d7a4596c..27ee6c0dc 100644 --- a/sorc/ncep_post.fd/ALLOCATE_ALL.f +++ b/sorc/ncep_post.fd/ALLOCATE_ALL.f @@ -590,9 +590,9 @@ SUBROUTINE ALLOCATE_ALL() allocate(qvl1(ista_2l:iend_2u,jsta_2l:jend_2u)) allocate(snfden(ista_2l:iend_2u,jsta_2l:jend_2u)) allocate(sndepac(ista_2l:iend_2u,jsta_2l:jend_2u)) - allocate(int_smoke(ista_2l:iend_2u,jsta_2l:jend_2u)) allocate(mean_frp(ista_2l:iend_2u,jsta_2l:jend_2u)) - allocate(int_aod(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) do j=jsta_2l,jend_2u @@ -617,18 +617,20 @@ SUBROUTINE ALLOCATE_ALL() qvl1(i,j)=spval snfden(i,j)=spval sndepac(i,j)=spval - int_smoke(i,j)=spval mean_frp(i,j)=spval - int_aod(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)) !$omp parallel do private(i,j,l,k) do k=1,nbin_sm do l=1,lm do j=jsta_2l,jend_2u do i=ista_2l,iend_2u smoke(i,j,l,k)=spval + fv3dust(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 dced136ca..1b1613238 100644 --- a/sorc/ncep_post.fd/CALPW.f +++ b/sorc/ncep_post.fd/CALPW.f @@ -36,6 +36,7 @@ !> 2019-07-25 | Li(Kate) Zhang | Merge Sarah Lu's update for FV3-Chem !> 2020-11-10 | Jesse Meng | Use UPP_PHYSICS Module !> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> 2022-11-16 | Eric James | Adding calculation of vertically integrated dust from RRFS !> !> @author Russ Treadon W/NP2 @date 1992-12-24 SUBROUTINE CALPW(PW,IDECID) @@ -44,7 +45,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 + use vrbls4d, only: smoke, fv3dust use masks, only: htm use params_mod, only: tfrz, gi use ctlblk_mod, only: lm, jsta, jend, im, spval, ista, iend @@ -236,7 +237,7 @@ SUBROUTINE CALPW(PW,IDECID) !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=ISTA,IEND - Qdum(I,J) = SMOKE(I,J,L,1)/1000000000. + Qdum(I,J) = SMOKE(I,J,L,1)/(1E9) ENDDO END DO ! @@ -267,6 +268,16 @@ SUBROUTINE CALPW(PW,IDECID) Qdum(I,J) = ASY(I,J,L) ENDDO END DO + +! E. James - 14 Sep 2022 +! DUST (from RRFS) + ELSE IF (IDECID == 22) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + Qdum(I,J) = FV3DUST(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 f714686f7..6ae1653ab 100644 --- a/sorc/ncep_post.fd/CLDRAD.f +++ b/sorc/ncep_post.fd/CLDRAD.f @@ -66,6 +66,7 @@ !> 2022-09-22 | Li(Kate Zhang) | Remove duplicated GOCART output variables and add capbility for NASA GOCART (UFS-Aerosols). !> 2022-09-22 | Li(Kate Zhang) | Update look-up table for NASA GOCART (UFS-Aerosols). !> 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 !> !> @author Russ Treadon W/NP2 @date 1993-08-30 SUBROUTINE CLDRAD @@ -89,8 +90,8 @@ SUBROUTINE CLDRAD AIRDIFFSWIN, DUSMASS, DUSMASS25, DUCMASS, DUCMASS25, & ALWINC, ALWTOAC, SWDDNI, SWDDIF, SWDNBC, SWDDNIC, & SWDDIFC, SWUPBC, LWDNBC, LWUPBC, SWUPT, & - TAOD5502D, AERSSA2D, AERASY2D, MEAN_FRP, LWP, IWP, & - AVGCPRATE, & + TAOD5502D, AERSSA2D, AERASY2D, MEAN_FRP, EBB, HWP, & + LWP, IWP, AVGCPRATE, & DUSTCB,SSCB,BCCB,OCCB,SULFCB,DUSTPM,SSPM,aod550, & du_aod550,ss_aod550,su_aod550,oc_aod550,bc_aod550, & PWAT,DUSTPM10,MAOD,NO3CB,NH4CB @@ -473,6 +474,25 @@ SUBROUTINE CLDRAD enddo endif ENDIF +! +! TOTAL COLUMN DUST +! + IF (IGET(741) > 0) THEN + CALL CALPW(GRID1(ista:iend,jsta:iend),22) + CALL BOUND(GRID1,D00,H99999) + if(grib == "grib2" )then + cfld = cfld + 1 + fld_info(cfld)%ifld = IAVBLFLD(IGET(741)) +!$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 @@ -3831,7 +3851,7 @@ SUBROUTINE CLDRAD ENDIF ! Instantaneous clear-sky downwelling LW at the surface - IF (IGET(744)>0) THEN + IF (IGET(764)>0) THEN DO J=JSTA,JEND DO I=ISTA,IEND GRID1(I,J) = LWDNBC(I,J) @@ -3839,13 +3859,13 @@ SUBROUTINE CLDRAD ENDDO if(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(744)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(764)) datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! Instantaneous clear-sky upwelling LW at the surface - IF (IGET(745)>0) THEN + IF (IGET(765)>0) THEN DO J=JSTA,JEND DO I=ISTA,IEND GRID1(I,J) = LWUPBC(I,J) @@ -3853,27 +3873,61 @@ SUBROUTINE CLDRAD ENDDO if(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(745)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(765)) datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! Instantaneous MEAN_FRP IF (IGET(740)>0) THEN -! print *,"GETTING INTO MEAN_FRP PART" DO J=JSTA,JEND DO I=ISTA,IEND GRID1(I,J) = MEAN_FRP(I,J) ENDDO ENDDO if(grib=='grib2') then -! print *,"GETTING INTO MEAN_FRP GRIB2 PART" cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(740)) datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) 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 + DO I=ISTA,IEND + IF (HWP(I,J)0) THEN GRID1 = spval diff --git a/sorc/ncep_post.fd/DEALLOCATE.f b/sorc/ncep_post.fd/DEALLOCATE.f index 4e6ba6ce3..a419e9f17 100644 --- a/sorc/ncep_post.fd/DEALLOCATE.f +++ b/sorc/ncep_post.fd/DEALLOCATE.f @@ -197,10 +197,11 @@ SUBROUTINE DE_ALLOCATE deallocate(swddnic) deallocate(swddifc) deallocate(swupt) - deallocate(int_smoke) deallocate(mean_frp) - deallocate(int_aod) + deallocate(ebb) + deallocate(hwp) deallocate(smoke) + deallocate(fv3dust) deallocate(taod5502d) deallocate(aerasy2d) deallocate(aerssa2d) diff --git a/sorc/ncep_post.fd/INITPOST_NETCDF.f b/sorc/ncep_post.fd/INITPOST_NETCDF.f index 3115b57cc..673871a35 100644 --- a/sorc/ncep_post.fd/INITPOST_NETCDF.f +++ b/sorc/ncep_post.fd/INITPOST_NETCDF.f @@ -22,13 +22,14 @@ !> 2022-07-18 | Wen Meng | Read instant top of atmos ULWRF from model !> 2022-09-18 | Li(Kate) Zhang| Add aerosol fileds for GEFS-Aerosols (gocart_on) and UFS-Aerosols(nasa_on) model !> 2022-10-28 | Eric James | Modifications to allow passing through soil moisture availability field from RUC LSM for RRFS +!> 2022-11-16 | Eric James | Read smoke, dust, biomass burning, and hourly wildfire potential from RRFS !> !> @author Hui-Ya Chuang @date 2016-03-04 SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) use netcdf - use vrbls4d, only: dust, SALT, SUSO, SOOT, WASO,no3,nh4, PP25, PP10 + use vrbls4d, only: dust, SALT, SUSO, SOOT, WASO, smoke, fv3dust, no3,nh4, PP25, PP10 use vrbls3d, only: t, q, uh, vh, pmid, pint, alpint, dpres, zint, zmid, o3, & qqr, qqs, cwm, qqi, qqw, omga, rhomid, q2, cfr, rlwtt, rswtt, tcucn, & tcucns, train, el_pbl, exch_h, vdifftt, vdiffmois, dconvmois, nradtt, & @@ -36,7 +37,7 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) vdiffmacce, mgdrag, cnvctvmmixing, ncnvctcfrac, cnvctumflx, cnvctdmflx, & cnvctzgdrag, sconvmois, cnvctmgdrag, cnvctdetmflx, duwt, duem, dusd, dudp, & dusv,ssem,sssd,ssdp,sswt,sssv,bcem,bcsd,bcdp,bcwt,bcsv,ocem,ocsd,ocdp,ocwt,ocsv, & - wh, qqg, ref_10cm, qqnifa, qqnwfa, pmtf, ozcon + wh, qqg, ref_10cm, qqnifa, qqnwfa, pmtf, ozcon, aextc55, taod5503d use vrbls2d, only: f, pd, fis, pblh, ustar, z0, ths, qs, twbs, qwbs, avgcprate, & cprate, avgprec, prec, lspa, sno, si, cldefi, th10, q10, tshltr, pshltr, & @@ -59,7 +60,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 + pwat, ebb, hwp 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, & @@ -139,6 +140,7 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) integer nfhour ! forecast hour from nems io file integer fhzero !bucket real dtp !physics time step + real dz REAL RINC(5) REAL DUMMY(IM,JM) @@ -184,6 +186,7 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) real, allocatable :: div3d(:,:,:) real(kind=4),allocatable :: vcrd(:,:) real :: dum_const + real, allocatable :: extsmoke(:,:,:), extdust(:,:,:) ! AQF @@ -233,6 +236,11 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) ,pm25ac(:,:,:), pm25at(:,:,:), pm25co(:,:,:) + if (modelname == 'FV3R') then + allocate(extsmoke(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) + allocate(extdust(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) + endif + if (me == 0) print *,' aqfcmaq_on=', aqfcmaq_on if (aqfcmaq_on) then @@ -670,12 +678,13 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) end if if(me==0)print*,'nhcas= ',nhcas if (nhcas == 0 ) then !non-hydrostatic case - nrec=14 + nrec=18 allocate (recname(nrec)) recname=[character(len=20) :: 'ugrd','vgrd','spfh','tmp','o3mr', & 'presnh','dzdt', 'clwmr','dpres', & 'delz','icmr','rwmr', & - 'snmr','grle'] + 'snmr','grle','smoke','dust', & + 'smoke_ext','dust_ext'] else nrec=8 allocate (recname(nrec)) @@ -1028,6 +1037,17 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) spval,recname(13),qqs(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(14),qqg(ista_2l,jsta_2l,1),lm) +! read for regional FV3 + if (modelname == 'FV3R') then + call read_netcdf_3d_para(ncid3d,im,jm,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & + spval,recname(15),smoke(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(16),fv3dust(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(17),extsmoke(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(18),extdust(ista_2l,jsta_2l,1),lm) + endif ! calculate CWM from FV3 output do l=1,lm @@ -1591,6 +1611,16 @@ 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,rel_vort_maxhy1(ista_2l,jsta_2l)) if(debugprint)print*,'sample ',VarName,' =',rel_vort_maxhy1(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' + 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) endif ! surface pressure @@ -2978,6 +3008,31 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,9) END IF +! +! E. James - 27 Sep 2022: this is for RRFS, adding smoke and dust +! extinction; it needs to be after ZINT is defined. +! + if (modelname == 'FV3R') then + do l = 1, lm + do j = jsta_2l, jend_2u + do i = ista_2l, iend_2u + if(extsmoke(i,j,l) 0) .OR. (IGET(743) > 0) .OR. & + (MODELNAME == 'RAPR') .OR.& ! LIFTED INDEX needs 500 mb T (IGET(030)>0) .OR. (IGET(031)>0) .OR. (IGET(075)>0)) THEN ! @@ -328,6 +339,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF(CFR(I,J,1) < SPVAL) CFRSL(I,J) = CFR(I,J,1) DO K = 1, NBIN_SM 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) ENDDO ! only interpolate GFS d3d fields when reqested @@ -485,6 +497,8 @@ SUBROUTINE MDL2P(iostatusD3D) DO K = 1, NBIN_SM IF(SMOKE(I,J,LL,K) < SPVAL .AND. SMOKE(I,J,LL-1,K) < SPVAL) & SMOKESL(I,J,K)=SMOKE(I,J,LL,K)+(SMOKE(I,J,LL,K)-SMOKE(I,J,LL-1,K))*FACT + IF(FV3DUST(I,J,LL,K) < SPVAL .AND. FV3DUST(I,J,LL-1,K) < SPVAL) & + FV3DUSTSL(I,J,K)=FV3DUST(I,J,LL,K)+(FV3DUST(I,J,LL,K)-FV3DUST(I,J,LL-1,K))*FACT ENDDO ! only interpolate GFS d3d fields when == ested @@ -2016,7 +2030,7 @@ SUBROUTINE MDL2P(iostatusD3D) DO J=JSTA,JEND DO I=ISTA,IEND IF(SMOKESL(I,J,1) 0) THEN + IF (LVLS(LP,IGET(743)) > 0) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + IF(FV3DUSTSL(I,J,1)0).OR.(IGET(630)>0).OR. & (IGET(470)>0).OR. & (IGET(909)>0).OR.(IGET(737)>0).OR. & + (IGET(742)>0).OR. & (IGET(994)>0).OR.(IGET(995)>0) ) THEN DO 190 L=1,LM @@ -2307,7 +2309,7 @@ SUBROUTINE MDLFLD DO J=JSTA,JEND DO I=ista,iend IF(PMID(I,J,LL)0) THEN + IF (LVLS(L,IGET(742))>0) THEN + LL=LM-L+1 +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ista,iend + IF(PMID(I,J,LL)0).OR.(IGET(414)>0).OR. & (IGET(546)>0).OR.(IGET(547)>0).OR. & (IGET(548)>0).OR.(IGET(739)>0).OR. & - (IGET(771)>0)) THEN + (IGET(744)>0).OR.(IGET(771)>0)) THEN if (.not. allocated(psfc)) allocate(psfc(ista:iend,jsta:jend)) ! @@ -2136,7 +2137,7 @@ SUBROUTINE SURFCE DO J=JSTA,JEND DO I=ISTA,IEND if(T(I,J,LM)/=spval.and.PMID(I,J,LM)/=spval.and.SMOKE(I,J,LM,1)/=spval)& - GRID1(I,J) = (1./RD)*(PMID(I,J,LM)/T(I,J,LM))*SMOKE(I,J,LM,1) + GRID1(I,J) = (1./RD)*(PMID(I,J,LM)/T(I,J,LM))*SMOKE(I,J,LM,1)/(1E9) ENDDO ENDDO if(grib=='grib2') then @@ -2146,6 +2147,24 @@ SUBROUTINE SURFCE endif ENDIF ! +! E. James - 14 Sep 2022: DUST from RRFS on lowest model level +! + IF (IGET(744)>0) THEN + GRID1=SPVAL + DO J=JSTA,JEND + DO I=ISTA,IEND + if(T(I,J,LM)/=spval.and.PMID(I,J,LM)/=spval.and.FV3DUST(I,J,LM,1)/=spval)& + GRID1(I,J) = (1./RD)*(PMID(I,J,LM)/T(I,J,LM))*FV3DUST(I,J,LM,1)/(1E9) + ENDDO + ENDDO + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(744)) + 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. ! IF ( (IGET(064)>0).OR.(IGET(065)>0).OR. & diff --git a/sorc/ncep_post.fd/VRBLS2D_mod.f b/sorc/ncep_post.fd/VRBLS2D_mod.f index 3499018b4..c05aa0420 100644 --- a/sorc/ncep_post.fd/VRBLS2D_mod.f +++ b/sorc/ncep_post.fd/VRBLS2D_mod.f @@ -58,9 +58,8 @@ module vrbls2d ,SWRADmean(:,:),U10mean(:,:),V10mean(:,:),SPDUV10mean(:,:) & ,SWNORMmean(:,:),SNFDEN(:,:),SNDEPAC(:,:),SWDDNI(:,:),SWDDIF(:,:) & ,SWDNBC(:,:),SWDDNIC(:,:),SWDDIFC(:,:), SWUPBC(:,:), SWUPT(:,:) & - ,TAOD5502D(:,:),AERASY2D(:,:),AERSSA2D(:,:),MEAN_FRP(:,:) & - ,LWP(:,:),IWP(:,:) & - ,INT_SMOKE(:,:),INT_AOD(:,:) & + ,TAOD5502D(:,:),AERASY2D(:,:),AERSSA2D(:,:),MEAN_FRP(:,:),EBB(:,:) & + ,HWP(:,:),LWP(:,:),IWP(:,:) & ! add new fields for GFS ,SFCUX(:,:),SFCVX(:,:),SFCUXI(:,:), SFCVXI(:,:),AVGALBEDO(:,:),AVGCPRATE(:,:) & ,AVGPREC(:,:),PTOP(:,:),PBOT(:,:),AVGCFRACH(:,:) & diff --git a/sorc/ncep_post.fd/VRBLS4D_mod.f b/sorc/ncep_post.fd/VRBLS4D_mod.f index 09da75118..0c9799836 100644 --- a/sorc/ncep_post.fd/VRBLS4D_mod.f +++ b/sorc/ncep_post.fd/VRBLS4D_mod.f @@ -14,6 +14,7 @@ module vrbls4d real, allocatable :: NO3(:,:,:,:) ! no3 real, allocatable :: NH4(:,:,:,:) ! nh4 real, allocatable :: SMOKE(:,:,:,:) + real, allocatable :: FV3DUST(:,:,:,:) real, allocatable :: PP25(:,:,:,:) ! PP25 real, allocatable :: PP10(:,:,:,:) ! PP10 !