From 094bc9161729a47b0cddcc8e29d8ec29ec22fdc1 Mon Sep 17 00:00:00 2001 From: eric james Date: Wed, 16 Nov 2022 21:26:44 +0000 Subject: [PATCH 01/12] Adding smoke and dust output, smoke emissions, aerosol optical thickness, and hourly wildfire potential from RRFS. --- parm/fv3lam_rrfs.xml | 52 +++++ parm/post_avblflds.xml | 73 +++++- parm/postxconfig-NT-fv3lam_rrfs.txt | 337 +++++++++++++++++++++++++++- sorc/ncep_post.fd/ALLOCATE_ALL.f | 12 +- sorc/ncep_post.fd/CALPW.f | 12 +- sorc/ncep_post.fd/CLDRAD.f | 69 +++++- sorc/ncep_post.fd/DEALLOCATE.f | 6 +- sorc/ncep_post.fd/INITPOST_NETCDF.f | 48 +++- sorc/ncep_post.fd/MDL2P.f | 49 +++- sorc/ncep_post.fd/MDLFLD.f | 35 ++- sorc/ncep_post.fd/SURFCE.f | 24 +- sorc/ncep_post.fd/VRBLS2D_mod.f | 5 +- sorc/ncep_post.fd/VRBLS3D_mod.f | 2 + sorc/ncep_post.fd/VRBLS4D_mod.f | 1 + 14 files changed, 686 insertions(+), 39 deletions(-) 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..09fb9e997 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 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/sorc/ncep_post.fd/ALLOCATE_ALL.f b/sorc/ncep_post.fd/ALLOCATE_ALL.f index 9d7a4596c..749bd7e75 100644 --- a/sorc/ncep_post.fd/ALLOCATE_ALL.f +++ b/sorc/ncep_post.fd/ALLOCATE_ALL.f @@ -149,6 +149,8 @@ SUBROUTINE ALLOCATE_ALL() allocate(QQNIFA(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) allocate(TAOD5503D(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) allocate(AEXTC55(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) + allocate(EXTSMOKE(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) + allocate(EXTDUST(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) allocate(EXTCOF55(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) allocate(QC_BL(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) allocate(CFR(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) @@ -590,9 +592,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 +619,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..bd77d43ca 100644 --- a/sorc/ncep_post.fd/CALPW.f +++ b/sorc/ncep_post.fd/CALPW.f @@ -44,7 +44,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 @@ -267,6 +267,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)/1000000000. + 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..198f69937 100644 --- a/sorc/ncep_post.fd/CLDRAD.f +++ b/sorc/ncep_post.fd/CLDRAD.f @@ -89,8 +89,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 +473,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 +3850,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 +3858,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 +3872,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..8ba849031 100644 --- a/sorc/ncep_post.fd/DEALLOCATE.f +++ b/sorc/ncep_post.fd/DEALLOCATE.f @@ -80,6 +80,8 @@ SUBROUTINE DE_ALLOCATE deallocate(QQNIFA) deallocate(TAOD5503D) deallocate(AEXTC55) + deallocate(EXTSMOKE) + deallocate(EXTDUST) deallocate(EXTCOF55) deallocate(QC_BL) deallocate(CFR) @@ -197,9 +199,9 @@ 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(taod5502d) deallocate(aerasy2d) diff --git a/sorc/ncep_post.fd/INITPOST_NETCDF.f b/sorc/ncep_post.fd/INITPOST_NETCDF.f index 3115b57cc..9bad774cb 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 and dust 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,8 @@ 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, extsmoke, extdust, 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 +61,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 +141,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) @@ -670,12 +673,14 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) end if if(me==0)print*,'nhcas= ',nhcas if (nhcas == 0 ) then !non-hydrostatic case - nrec=14 + nrec=20 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', & + 'ebb_smoke_hr','hwp'] else nrec=8 allocate (recname(nrec)) @@ -1028,6 +1033,18 @@ 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) + 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) + call read_netcdf_2d_para(ncid2d,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & + spval,recname(19),ebb(ista_2l,jsta_2l)) + call read_netcdf_2d_para(ncid2d,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & + spval,recname(20),hwp(ista_2l,jsta_2l)) ! calculate CWM from FV3 output do l=1,lm @@ -1049,7 +1066,7 @@ 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' + VarName='cldfra_bl' 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 @@ -2978,6 +2995,25 @@ 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. +! + do l = 1, lm + do j = jsta_2l, jend_2u + do i = ista_2l, iend_2u + taod5503d ( i, j, l) = extsmoke ( i, j, l ) + extdust ( i, j, l ) + dz = ZINT( i, j, l ) - ZINT( i, j, l+1 ) + aextc55 ( i, j, l ) = taod5503d ( i, j, l ) / dz + if(i==im/2.and.j==(jsta+jend)/2)print*,'sample taod5503d= ', & + i,j,l,taod5503d ( i, j, l ) + if(i==im/2.and.j==(jsta+jend)/2)print*,'sample dz= ', & + dz + if(i==im/2.and.j==(jsta+jend)/2)print*,'sample AEXTC55= ', & + i,j,l,aextc55 ( i, j, l ) + end do + end do + end do !$omp parallel do private(i,j) do j=jsta,jend diff --git a/sorc/ncep_post.fd/MDL2P.f b/sorc/ncep_post.fd/MDL2P.f index f3990cd3c..6d33089ce 100644 --- a/sorc/ncep_post.fd/MDL2P.f +++ b/sorc/ncep_post.fd/MDL2P.f @@ -38,7 +38,7 @@ SUBROUTINE MDL2P(iostatusD3D) ! ! - use vrbls4d, only: DUST, SMOKE + use vrbls4d, only: DUST, SMOKE, FV3DUST 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, & @@ -85,7 +85,7 @@ SUBROUTINE MDL2P(iostatusD3D) &, EGRID1, EGRID2 & &, FSL_OLD, USL_OLD, VSL_OLD & &, OSL_OLD, OSL995 - REAL, allocatable :: D3DSL(:,:,:), SMOKESL(:,:,:) + REAL, allocatable :: D3DSL(:,:,:), SMOKESL(:,:,:), FV3DUSTSL(:,:,:) ! integer,intent(in) :: iostatusD3D INTEGER, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: NL1X, NL1XF @@ -148,6 +148,15 @@ SUBROUTINE MDL2P(iostatusD3D) enddo enddo enddo + if (.not. allocated(fv3dustsl)) allocate(fv3dustsl(im,jm,nbin_sm)) +!$omp parallel do private(i,j,l) + do l=1,nbin_sm + do j=1,jm + do i=1,im + FV3DUSTSL(i,j,l) = SPVAL + enddo + enddo + enddo ! ! SET TOTAL NUMBER OF POINTS ON OUTPUT GRID. ! @@ -190,7 +199,8 @@ SUBROUTINE MDL2P(iostatusD3D) ! ADD DUST FIELDS (IGET(455) > 0) .OR. & ! ADD SMOKE FIELDS - (IGET(738) > 0) .OR. (MODELNAME == 'RAPR') .OR.& + (IGET(738) > 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 +338,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 +496,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 +2029,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 +2308,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 +2136,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 +2146,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/VRBLS3D_mod.f b/sorc/ncep_post.fd/VRBLS3D_mod.f index f27428f3a..7fd5e31e1 100644 --- a/sorc/ncep_post.fd/VRBLS3D_mod.f +++ b/sorc/ncep_post.fd/VRBLS3D_mod.f @@ -56,6 +56,8 @@ module vrbls3d ,QQNIFA(:,:,:) & ,TAOD5503D(:,:,:) & ,AEXTC55(:,:,:) & + ,EXTSMOKE(:,:,:) & + ,EXTDUST(:,:,:) & ! ! Add aerosol optical properties for GOCART (NGAC) ,ext(:,:,:), asy(:,:,:) & 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 ! From 99f1b7b6b32a973a846f86feac38ac386c10ca6f Mon Sep 17 00:00:00 2001 From: eric james Date: Wed, 16 Nov 2022 21:35:35 +0000 Subject: [PATCH 02/12] Updating change logs for addition of smoke / dust in RRFS --- sorc/ncep_post.fd/CALPW.f | 1 + sorc/ncep_post.fd/CLDRAD.f | 1 + sorc/ncep_post.fd/INITPOST_NETCDF.f | 2 +- sorc/ncep_post.fd/MDL2P.f | 1 + sorc/ncep_post.fd/MDLFLD.f | 1 + sorc/ncep_post.fd/SURFCE.f | 1 + 6 files changed, 6 insertions(+), 1 deletion(-) diff --git a/sorc/ncep_post.fd/CALPW.f b/sorc/ncep_post.fd/CALPW.f index bd77d43ca..3f418081a 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) diff --git a/sorc/ncep_post.fd/CLDRAD.f b/sorc/ncep_post.fd/CLDRAD.f index 198f69937..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 diff --git a/sorc/ncep_post.fd/INITPOST_NETCDF.f b/sorc/ncep_post.fd/INITPOST_NETCDF.f index 9bad774cb..9eee2f2fb 100644 --- a/sorc/ncep_post.fd/INITPOST_NETCDF.f +++ b/sorc/ncep_post.fd/INITPOST_NETCDF.f @@ -22,7 +22,7 @@ !> 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 and dust from 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) diff --git a/sorc/ncep_post.fd/MDL2P.f b/sorc/ncep_post.fd/MDL2P.f index 6d33089ce..5965d8e42 100644 --- a/sorc/ncep_post.fd/MDL2P.f +++ b/sorc/ncep_post.fd/MDL2P.f @@ -32,6 +32,7 @@ !> 2021-07-07 | J MENG | 2D DECOMPOSITION !> 2022-08-03 | W Meng | Modify total cloud fraction(331) !> 2022-09-22 | L Zhang | Remove DUSTSL +!> 2022-11-16 | E James | Adding dust from RRFS !> !> @author T Black W/NP2 @date 1999-09-23 SUBROUTINE MDL2P(iostatusD3D) diff --git a/sorc/ncep_post.fd/MDLFLD.f b/sorc/ncep_post.fd/MDLFLD.f index 4a4a5df69..5cca14b8f 100644 --- a/sorc/ncep_post.fd/MDLFLD.f +++ b/sorc/ncep_post.fd/MDLFLD.f @@ -46,6 +46,7 @@ !! 21-07-07 J MENG - 2D DECOMPOSITION !! 22-09-22 L Zhang - ADD NO3 and NH4 output for UFS-Aerosols model !! 22-10-20 W Meng - Bug fix for cloud fraction and vertically integrated liquid +!! 22-11-16 E James - Adding dust from RRFS !! !! USAGE: CALL MDLFLD !! INPUT ARGUMENT LIST: diff --git a/sorc/ncep_post.fd/SURFCE.f b/sorc/ncep_post.fd/SURFCE.f index 3ae1d84af..d2fd2fc26 100644 --- a/sorc/ncep_post.fd/SURFCE.f +++ b/sorc/ncep_post.fd/SURFCE.f @@ -42,6 +42,7 @@ !! - 21-10-31 J MENG - 2D DECOMPOSITION !! - 22-02-01 E JAMES - Cleaning up GRIB2 encoding for six variables !! that cause issues with newer wgrib2 builds in RRFS system. +!! - 22-11-16 E JAMES - Adding dust from RRFS !! !! USAGE: CALL SURFCE !! INPUT ARGUMENT LIST: From 0b54fa29d09f1a85cc5fe3e2f8979e85b017fd2e Mon Sep 17 00:00:00 2001 From: eric james Date: Wed, 16 Nov 2022 21:37:38 +0000 Subject: [PATCH 03/12] Reverting cldfra_bl to cldfra. --- sorc/ncep_post.fd/INITPOST_NETCDF.f | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/ncep_post.fd/INITPOST_NETCDF.f b/sorc/ncep_post.fd/INITPOST_NETCDF.f index 9eee2f2fb..1c8d00177 100644 --- a/sorc/ncep_post.fd/INITPOST_NETCDF.f +++ b/sorc/ncep_post.fd/INITPOST_NETCDF.f @@ -1066,7 +1066,7 @@ 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_bl' + 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) endif From bd919eaf2834d0ef95a7b30bf8eaf7cc2794bec8 Mon Sep 17 00:00:00 2001 From: eric james Date: Wed, 16 Nov 2022 22:08:50 +0000 Subject: [PATCH 04/12] Changing syntax on one line. --- sorc/ncep_post.fd/CALPW.f | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/ncep_post.fd/CALPW.f b/sorc/ncep_post.fd/CALPW.f index 3f418081a..924c69376 100644 --- a/sorc/ncep_post.fd/CALPW.f +++ b/sorc/ncep_post.fd/CALPW.f @@ -237,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 ! From f02de7a17c4466b2aa4602ac81b1ed0805780c74 Mon Sep 17 00:00:00 2001 From: eric james Date: Thu, 17 Nov 2022 18:22:01 +0000 Subject: [PATCH 05/12] Adding model name check for computing AOD (used in visibility). --- sorc/ncep_post.fd/INITPOST_NETCDF.f | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/sorc/ncep_post.fd/INITPOST_NETCDF.f b/sorc/ncep_post.fd/INITPOST_NETCDF.f index 1c8d00177..cda2fdb8f 100644 --- a/sorc/ncep_post.fd/INITPOST_NETCDF.f +++ b/sorc/ncep_post.fd/INITPOST_NETCDF.f @@ -2999,21 +2999,23 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) ! E. James - 27 Sep 2022: this is for RRFS, adding smoke and dust ! extinction; it needs to be after ZINT is defined. ! - do l = 1, lm - do j = jsta_2l, jend_2u - do i = ista_2l, iend_2u + if (modelname == 'FV3R') then + do l = 1, lm + do j = jsta_2l, jend_2u + do i = ista_2l, iend_2u taod5503d ( i, j, l) = extsmoke ( i, j, l ) + extdust ( i, j, l ) dz = ZINT( i, j, l ) - ZINT( i, j, l+1 ) aextc55 ( i, j, l ) = taod5503d ( i, j, l ) / dz - if(i==im/2.and.j==(jsta+jend)/2)print*,'sample taod5503d= ', & - i,j,l,taod5503d ( i, j, l ) - if(i==im/2.and.j==(jsta+jend)/2)print*,'sample dz= ', & - dz - if(i==im/2.and.j==(jsta+jend)/2)print*,'sample AEXTC55= ', & - i,j,l,aextc55 ( i, j, l ) + if(i==im/2.and.j==(jsta+jend)/2)print*,'sample taod5503d= ', & + i,j,l,taod5503d ( i, j, l ) + if(i==im/2.and.j==(jsta+jend)/2)print*,'sample dz= ', & + dz + if(i==im/2.and.j==(jsta+jend)/2)print*,'sample AEXTC55= ', & + i,j,l,aextc55 ( i, j, l ) + end do end do end do - end do + end if !$omp parallel do private(i,j) do j=jsta,jend From e109ddc52fa870a70d6fdad5da4030def99a5dcb Mon Sep 17 00:00:00 2001 From: eric james Date: Tue, 22 Nov 2022 17:24:40 +0000 Subject: [PATCH 06/12] Moving reading of EBB and HWP to section for regional FV3 phy files. --- sorc/ncep_post.fd/INITPOST_NETCDF.f | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/sorc/ncep_post.fd/INITPOST_NETCDF.f b/sorc/ncep_post.fd/INITPOST_NETCDF.f index cda2fdb8f..a3a0752ff 100644 --- a/sorc/ncep_post.fd/INITPOST_NETCDF.f +++ b/sorc/ncep_post.fd/INITPOST_NETCDF.f @@ -673,14 +673,13 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) end if if(me==0)print*,'nhcas= ',nhcas if (nhcas == 0 ) then !non-hydrostatic case - nrec=20 + nrec=18 allocate (recname(nrec)) - recname=[character(len=20) :: 'ugrd','vgrd','spfh','tmp','o3mr', & + recname=[character(len=18) :: 'ugrd','vgrd','spfh','tmp','o3mr', & 'presnh','dzdt', 'clwmr','dpres', & 'delz','icmr','rwmr', & 'snmr','grle','smoke','dust', & - 'smoke_ext','dust_ext', & - 'ebb_smoke_hr','hwp'] + 'smoke_ext','dust_ext'] else nrec=8 allocate (recname(nrec)) @@ -1033,6 +1032,8 @@ 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, & @@ -1041,10 +1042,7 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) 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) - call read_netcdf_2d_para(ncid2d,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & - spval,recname(19),ebb(ista_2l,jsta_2l)) - call read_netcdf_2d_para(ncid2d,ista,ista_2l,iend,iend_2u,jsta,jsta_2l,jend,jend_2u, & - spval,recname(20),hwp(ista_2l,jsta_2l)) + endif ! calculate CWM from FV3 output do l=1,lm @@ -1608,6 +1606,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 From 0d9b8471daccdd376924cdf71dbf5f6f1f0c19cc Mon Sep 17 00:00:00 2001 From: eric james Date: Tue, 22 Nov 2022 17:26:29 +0000 Subject: [PATCH 07/12] Fixing accidental change in length of recname. --- sorc/ncep_post.fd/INITPOST_NETCDF.f | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/ncep_post.fd/INITPOST_NETCDF.f b/sorc/ncep_post.fd/INITPOST_NETCDF.f index a3a0752ff..2a7d23f45 100644 --- a/sorc/ncep_post.fd/INITPOST_NETCDF.f +++ b/sorc/ncep_post.fd/INITPOST_NETCDF.f @@ -675,7 +675,7 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) if (nhcas == 0 ) then !non-hydrostatic case nrec=18 allocate (recname(nrec)) - recname=[character(len=18) :: 'ugrd','vgrd','spfh','tmp','o3mr', & + recname=[character(len=20) :: 'ugrd','vgrd','spfh','tmp','o3mr', & 'presnh','dzdt', 'clwmr','dpres', & 'delz','icmr','rwmr', & 'snmr','grle','smoke','dust', & From a5a8397ab19a6faaf6aeacf8a4aa730bdb29fc9a Mon Sep 17 00:00:00 2001 From: eric james Date: Tue, 22 Nov 2022 18:18:42 +0000 Subject: [PATCH 08/12] Making extsmoke and extdust into local variables within INITPOST_NETCDF.f --- sorc/ncep_post.fd/ALLOCATE_ALL.f | 2 -- sorc/ncep_post.fd/DEALLOCATE.f | 2 -- sorc/ncep_post.fd/INITPOST_NETCDF.f | 11 +++++++++-- sorc/ncep_post.fd/VRBLS3D_mod.f | 2 -- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/sorc/ncep_post.fd/ALLOCATE_ALL.f b/sorc/ncep_post.fd/ALLOCATE_ALL.f index 749bd7e75..27ee6c0dc 100644 --- a/sorc/ncep_post.fd/ALLOCATE_ALL.f +++ b/sorc/ncep_post.fd/ALLOCATE_ALL.f @@ -149,8 +149,6 @@ SUBROUTINE ALLOCATE_ALL() allocate(QQNIFA(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) allocate(TAOD5503D(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) allocate(AEXTC55(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) - allocate(EXTSMOKE(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) - allocate(EXTDUST(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) allocate(EXTCOF55(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) allocate(QC_BL(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) allocate(CFR(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) diff --git a/sorc/ncep_post.fd/DEALLOCATE.f b/sorc/ncep_post.fd/DEALLOCATE.f index 8ba849031..3d9a58856 100644 --- a/sorc/ncep_post.fd/DEALLOCATE.f +++ b/sorc/ncep_post.fd/DEALLOCATE.f @@ -80,8 +80,6 @@ SUBROUTINE DE_ALLOCATE deallocate(QQNIFA) deallocate(TAOD5503D) deallocate(AEXTC55) - deallocate(EXTSMOKE) - deallocate(EXTDUST) deallocate(EXTCOF55) deallocate(QC_BL) deallocate(CFR) diff --git a/sorc/ncep_post.fd/INITPOST_NETCDF.f b/sorc/ncep_post.fd/INITPOST_NETCDF.f index 2a7d23f45..335cbc2ce 100644 --- a/sorc/ncep_post.fd/INITPOST_NETCDF.f +++ b/sorc/ncep_post.fd/INITPOST_NETCDF.f @@ -37,8 +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, extsmoke, extdust, aextc55, & - taod5503d + 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, & @@ -187,6 +186,7 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) real, allocatable :: div3d(:,:,:) real(kind=4),allocatable :: vcrd(:,:) real :: dum_const + real, allocatable :: extsmoke(:,:,:), extdust(:,:,:) ! AQF @@ -236,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 @@ -3023,6 +3028,8 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) end do end do end do + deallocate(extsmoke) + deallocate(extdust) end if !$omp parallel do private(i,j) diff --git a/sorc/ncep_post.fd/VRBLS3D_mod.f b/sorc/ncep_post.fd/VRBLS3D_mod.f index 7fd5e31e1..f27428f3a 100644 --- a/sorc/ncep_post.fd/VRBLS3D_mod.f +++ b/sorc/ncep_post.fd/VRBLS3D_mod.f @@ -56,8 +56,6 @@ module vrbls3d ,QQNIFA(:,:,:) & ,TAOD5503D(:,:,:) & ,AEXTC55(:,:,:) & - ,EXTSMOKE(:,:,:) & - ,EXTDUST(:,:,:) & ! ! Add aerosol optical properties for GOCART (NGAC) ,ext(:,:,:), asy(:,:,:) & From 3bf0043f70468964b1d0757a7677b7ef0fb40ccd Mon Sep 17 00:00:00 2001 From: eric james Date: Mon, 28 Nov 2022 19:45:48 +0000 Subject: [PATCH 09/12] Adding deallocate statement for fv3dust, debug flag for print statements, and bug fix for reading in soil moisture availability. --- sorc/ncep_post.fd/DEALLOCATE.f | 1 + sorc/ncep_post.fd/INITPOST_NETCDF.f | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/sorc/ncep_post.fd/DEALLOCATE.f b/sorc/ncep_post.fd/DEALLOCATE.f index 3d9a58856..a419e9f17 100644 --- a/sorc/ncep_post.fd/DEALLOCATE.f +++ b/sorc/ncep_post.fd/DEALLOCATE.f @@ -201,6 +201,7 @@ SUBROUTINE DE_ALLOCATE 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 335cbc2ce..ee829c4d7 100644 --- a/sorc/ncep_post.fd/INITPOST_NETCDF.f +++ b/sorc/ncep_post.fd/INITPOST_NETCDF.f @@ -3019,11 +3019,11 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) taod5503d ( i, j, l) = extsmoke ( i, j, l ) + extdust ( i, j, l ) dz = ZINT( i, j, l ) - ZINT( i, j, l+1 ) aextc55 ( i, j, l ) = taod5503d ( i, j, l ) / dz - if(i==im/2.and.j==(jsta+jend)/2)print*,'sample taod5503d= ', & + if(debugprint.and.i==im/2.and.j==(jsta+jend)/2)print*,'sample taod5503d= ', & i,j,l,taod5503d ( i, j, l ) - if(i==im/2.and.j==(jsta+jend)/2)print*,'sample dz= ', & + if(debugprint.and.i==im/2.and.j==(jsta+jend)/2)print*,'sample dz= ', & dz - if(i==im/2.and.j==(jsta+jend)/2)print*,'sample AEXTC55= ', & + if(debugprint.and.i==im/2.and.j==(jsta+jend)/2)print*,'sample AEXTC55= ', & i,j,l,aextc55 ( i, j, l ) end do end do @@ -3418,7 +3418,7 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) spval,VarName,buf) !$omp parallel do private(i,j) do j=jsta,jend - do i=1,im + do i=ista,iend smstav(i,j) = buf(i,j) enddo enddo From c7c314bf2c293ccf43339b86fca0b358f36162dd Mon Sep 17 00:00:00 2001 From: eric james Date: Mon, 28 Nov 2022 19:52:46 +0000 Subject: [PATCH 10/12] Using 1E9 for multiplication in CALPW instead of 1000000000 --- sorc/ncep_post.fd/CALPW.f | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/ncep_post.fd/CALPW.f b/sorc/ncep_post.fd/CALPW.f index 924c69376..1b1613238 100644 --- a/sorc/ncep_post.fd/CALPW.f +++ b/sorc/ncep_post.fd/CALPW.f @@ -275,7 +275,7 @@ SUBROUTINE CALPW(PW,IDECID) !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=ISTA,IEND - Qdum(I,J) = FV3DUST(I,J,L,1)/1000000000. + Qdum(I,J) = FV3DUST(I,J,L,1)/(1E9) ENDDO END DO ENDIF From d37263bd34def4cb63efea36a00d4b09d708940d Mon Sep 17 00:00:00 2001 From: eric james Date: Mon, 28 Nov 2022 20:52:55 +0000 Subject: [PATCH 11/12] Bug fix from Wen Meng, and also updated RAP/HRRR/RTMA fix files with new GRIB2 template for smoke-related fields. --- parm/post_avblflds_raphrrr.xml | 12 ++++++++---- parm/postxconfig-NT-3drtma.txt | 12 ++++++------ parm/postxconfig-NT-hrrr.txt | 12 ++++++------ parm/postxconfig-NT-rap.txt | 20 ++++++++++---------- scripts/exgfs_atmos_nceppost.sh | 2 +- sorc/ncep_post.fd/MDL2P.f | 1 + 6 files changed, 32 insertions(+), 27 deletions(-) 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-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/MDL2P.f b/sorc/ncep_post.fd/MDL2P.f index 5965d8e42..a430c8e1e 100644 --- a/sorc/ncep_post.fd/MDL2P.f +++ b/sorc/ncep_post.fd/MDL2P.f @@ -3845,6 +3845,7 @@ SUBROUTINE MDL2P(iostatusD3D) ! if(allocated(d3dsl)) deallocate(d3dsl) if(allocated(smokesl)) deallocate(smokesl) +if(allocated(fv3dustsl)) deallocate(fv3dustsl) ! END OF ROUTINE. ! RETURN From 53a8fb6cdc91dace6d1b9fb484c9fdca56e9bd73 Mon Sep 17 00:00:00 2001 From: eric james Date: Tue, 29 Nov 2022 17:50:47 +0000 Subject: [PATCH 12/12] Adding checks for missing values in aod loop. --- parm/post_avblflds.xml | 16 ++++++++++++++++ sorc/ncep_post.fd/INITPOST_NETCDF.f | 2 ++ 2 files changed, 18 insertions(+) diff --git a/parm/post_avblflds.xml b/parm/post_avblflds.xml index 09fb9e997..68592827d 100755 --- a/parm/post_avblflds.xml +++ b/parm/post_avblflds.xml @@ -7005,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/sorc/ncep_post.fd/INITPOST_NETCDF.f b/sorc/ncep_post.fd/INITPOST_NETCDF.f index ee829c4d7..673871a35 100644 --- a/sorc/ncep_post.fd/INITPOST_NETCDF.f +++ b/sorc/ncep_post.fd/INITPOST_NETCDF.f @@ -3016,9 +3016,11 @@ SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) do l = 1, lm do j = jsta_2l, jend_2u do i = ista_2l, iend_2u + if(extsmoke(i,j,l)