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
!