diff --git a/parm/params_grib2_tbl_new b/parm/params_grib2_tbl_new index 2f4c34577..65da702fb 100755 --- a/parm/params_grib2_tbl_new +++ b/parm/params_grib2_tbl_new @@ -294,6 +294,7 @@ 0 7 204 1 EFHL 0 3 222 1 EFSH 0 7 9 0 EHLX + 2 0 237 1 EIWATER 4 2 1 0 ELCDEN 4 0 1 0 ELECTMP 10 3 194 1 ELEV @@ -461,6 +462,8 @@ 10 0 43 0 KSSEDW 0 7 2 0 KX 0 7 198 1 LAI + 2 0 234 1 LAKEFRC + 2 0 233 1 LANDFRC 1 2 8 0 LANDIL 2 0 218 1 LANDN 2 0 8 0 LANDU @@ -642,6 +645,7 @@ 0 14 200 1 OZMAX1 0 14 201 1 OZMAX8 10 3 196 1 P2OMLT + 2 0 235 1 PAHFLX 3 3 2 0 PBINFRC 3 3 1 0 PBLIFRC 0 19 12 0 PBLREG @@ -658,6 +662,7 @@ 0 1 200 1 PEVPR 0 4 10 0 PHOTAR 3 0 8 0 PIXST + 2 0 238 1 PLANTTR 0 7 0 0 PLI 0 3 200 1 PLPL 4 2 0 0 PLSMDEN @@ -914,6 +919,7 @@ 2 0 3 0 SOILM 2 0 22 0 SOILM 2 3 15 0 SOILP + 2 0 239 1 SOILSE 2 3 18 0 SOILTMP 2 0 38 0 SOILVIC 2 0 192 1 SOILW @@ -1201,6 +1207,7 @@ 0 2 192 1 VWSH 10 4 17 0 WATDENA 10 4 16 0 WATERDEN + 2 0 236 1 WATERSA 10 4 20 0 WATPDENA 10 4 19 0 WATPDEN 10 4 18 0 WATPTEMP diff --git a/parm/params_grib2_tbl_new.text b/parm/params_grib2_tbl_new.text index 1ab29afb1..6fa402120 100755 --- a/parm/params_grib2_tbl_new.text +++ b/parm/params_grib2_tbl_new.text @@ -1033,6 +1033,14 @@ 2 0 230 1 TRANS 2 0 231 1 VEGMIN 2 0 232 1 VEGMAX +! Added more parameters in 7/14/2021 + 2 0 233 1 LANDFRC + 2 0 234 1 LAKEFRC + 2 0 235 1 PAHFLX + 2 0 236 1 WATERSA + 2 0 237 1 EIWATER + 2 0 238 1 PLANTTR + 2 0 239 1 SOILSE ! ! GRIB2 - TABLE 4.2-2-1 PARAMETERS FOR DISCIPLINE 2 CATEGORY 1 ! diff --git a/parm/post_avblflds.xml b/parm/post_avblflds.xml index e3b8cb98e..29676c3f0 100755 --- a/parm/post_avblflds.xml +++ b/parm/post_avblflds.xml @@ -7740,6 +7740,7 @@ level_free_convection 6.0 + 994 OZCON_ON_HYBRID_LVL @@ -7747,13 +7748,84 @@ hybrid_lvl 7.0 - - + + 995 PM25TOT_ON_HYBRID_LVL PMTF hybrid_lvl 7.0 + + + 996 + LAND_FRAC + LANDFRC + NCEP + surface + 3.0 + + + + 997 + INST_PREC_ADVEC_HEAT + PAHFLX + NCEP + surface + 3.0 + + + + 998 + WATER_AQUIFER + WATERSA + NCEP + surface + 3.0 + + + + 999 + ACM_EIWATER_ON_SURFACE + tmpl4_8 + EIWATER + NCEP + ACM + surface + 3.0 + + + + 1000 + ACM_PLANTTR_ON_SURFACE + tmpl4_8 + PLANTTR + NCEP + ACM + surface + 3.0 + + + + 1001 + ACM_SOILSE_ON_SURFACE + tmpl4_8 + SOILSE + NCEP + ACM + surface + 3.0 + + + + 1002 + AVE_PREC_ADVEC_HEAT + tmpl4_8 + PAHFLX + NCEP + AVE + surface + 3.0 + diff --git a/parm/postcntrl_gfs.xml b/parm/postcntrl_gfs.xml index 4fe5bb0f8..25a1fc670 100755 --- a/parm/postcntrl_gfs.xml +++ b/parm/postcntrl_gfs.xml @@ -1154,6 +1154,41 @@ 4.0 + + LAND_FRAC + 3.0 + + + + INST_PREC_ADVEC_HEAT + 3.0 + + + + WATER_AQUIFER + 3.0 + + + + ACM_EIWATER_ON_SURFACE + 3.0 + + + + ACM_PLANTTR_ON_SURFACE + 3.0 + + + + ACM_SOILSE_ON_SURFACE + 3.0 + + + + AVE_PREC_ADVEC_HEAT + 3.0 + + diff --git a/parm/postxconfig-NT-GFS.txt b/parm/postxconfig-NT-GFS.txt index dd2922259..683a4fc38 100644 --- a/parm/postxconfig-NT-GFS.txt +++ b/parm/postxconfig-NT-GFS.txt @@ -1,5 +1,5 @@ 1 -196 +203 GFSPRS 0 ncep_nco @@ -7268,3 +7268,262 @@ spec_pres_above_grnd ? ? ? +994 +LAND_FRAC +? +1 +tmpl4_0 +LANDFRC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +995 +INST_PREC_ADVEC_HEAT +? +1 +tmpl4_0 +PAHFLX +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +996 +WATER_AQUIFER +? +1 +tmpl4_0 +WATERSA +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +997 +ACM_EIWATER_ON_SURFACE +? +1 +tmpl4_8 +EIWATER +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +998 +ACM_PLANTTR_ON_SURFACE +? +1 +tmpl4_8 +PLANTTR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +999 +ACM_SOILSE_ON_SURFACE +? +1 +tmpl4_8 +SOILSE +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +1000 +AVE_PREC_ADVEC_HEAT +? +1 +tmpl4_8 +PAHFLX +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? diff --git a/sorc/ncep_post.fd/ALLOCATE_ALL.f b/sorc/ncep_post.fd/ALLOCATE_ALL.f index 14ef0c17f..c63ba43b1 100644 --- a/sorc/ncep_post.fd/ALLOCATE_ALL.f +++ b/sorc/ncep_post.fd/ALLOCATE_ALL.f @@ -962,6 +962,13 @@ SUBROUTINE ALLOCATE_ALL() allocate(su_aod550(im,jsta_2l:jend_2u)) allocate(oc_aod550(im,jsta_2l:jend_2u)) allocate(bc_aod550(im,jsta_2l:jend_2u)) + allocate(landfrac(im,jsta_2l:jend_2u)) + allocate(paha(im,jsta_2l:jend_2u)) + allocate(pahi(im,jsta_2l:jend_2u)) + allocate(tecan(im,jsta_2l:jend_2u)) + allocate(tetran(im,jsta_2l:jend_2u)) + allocate(tedir(im,jsta_2l:jend_2u)) + allocate(twa(im,jsta_2l:jend_2u)) !Initialization !$omp parallel do private(i,j) do j=jsta_2l,jend_2u @@ -1004,6 +1011,13 @@ SUBROUTINE ALLOCATE_ALL() su_aod550(i,j)=spval oc_aod550(i,j)=spval bc_aod550(i,j)=spval + landfrac(i,j)=spval + paha(i,j)=spval + pahi(i,j)=spval + tecan(i,j)=spval + tetran(i,j)=spval + tedir(i,j)=spval + twa(i,j)=spval enddo enddo ! diff --git a/sorc/ncep_post.fd/DEALLOCATE.f b/sorc/ncep_post.fd/DEALLOCATE.f index aba65050a..54f246042 100644 --- a/sorc/ncep_post.fd/DEALLOCATE.f +++ b/sorc/ncep_post.fd/DEALLOCATE.f @@ -378,6 +378,13 @@ SUBROUTINE DE_ALLOCATE deallocate(su_aod550) deallocate(bc_aod550) deallocate(oc_aod550) + deallocate(landfrac) + deallocate(paha) + deallocate(pahi) + deallocate(tecan) + deallocate(tetran) + deallocate(tedir) + deallocate(twa) ! GSD deallocate(rainc_bucket) deallocate(rainc_bucket1) diff --git a/sorc/ncep_post.fd/INITPOST_GFS_NETCDF_PARA.f b/sorc/ncep_post.fd/INITPOST_GFS_NETCDF_PARA.f index 3f7cab8f7..811a8d191 100644 --- a/sorc/ncep_post.fd/INITPOST_GFS_NETCDF_PARA.f +++ b/sorc/ncep_post.fd/INITPOST_GFS_NETCDF_PARA.f @@ -48,7 +48,7 @@ SUBROUTINE INITPOST_GFS_NETCDF_PARA(ncid3d) wh, qqg, ref_10cm 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, & - tshltr, albase, avgalbedo, avgtcdc, czen, czmean, mxsnal, radot, sigt4, & + tshltr, albase, avgalbedo, avgtcdc, czen, czmean, mxsnal, landfrac, radot, sigt4, & cfrach, cfracl, cfracm, avgcfrach, qshltr, avgcfracl, avgcfracm, cnvcfr, & islope, cmc, grnflx, vegfrc, acfrcv, ncfrcv, acfrst, ncfrst, ssroff, & bgroff, rlwin, rlwtoa, cldwork, alwin, alwout, alwtoa, rswin, rswinc, & @@ -56,12 +56,13 @@ SUBROUTINE INITPOST_GFS_NETCDF_PARA(ncid3d) snopcx, sfcux, sfcvx, sfcuxi, sfcvxi, sfcuvx, gtaux, gtauy, potevp, u10, v10, smstav, & smstot, ivgtyp, isltyp, sfcevp, sfcexc, acsnow, acsnom, sst, thz0, qz0, & uz0, vz0, ptop, htop, pbot, hbot, ptopl, pbotl, ttopl, ptopm, pbotm, ttopm, & - ptoph, pboth, pblcfr, ttoph, runoff, maxtshltr, mintshltr, maxrhshltr, & + ptoph, pboth, pblcfr, ttoph, runoff, tecan, tetran, tedir, twa, maxtshltr, & + mintshltr, maxrhshltr, & minrhshltr, dzice, smcwlt, suntime, fieldcapa, htopd, hbotd, htops, hbots, & cuppt, dusmass, ducmass, dusmass25, ducmass25, aswintoa,rel_vort_maxhy1, & maxqshltr, minqshltr, acond, sr, u10h, v10h,refd_max, w_up_max, w_dn_max, & up_heli_max,up_heli_min,up_heli_max03,up_heli_min03,rel_vort_max01,u10max, v10max, & - avgedir,avgecan,avgetrans,avgesnow,avgprec_cont,avgcprate_cont,rel_vort_max, & + avgedir,avgecan,paha,pahi,avgetrans,avgesnow,avgprec_cont,avgcprate_cont,rel_vort_max, & avisbeamswin,avisdiffswin,airbeamswin,airdiffswin,refdm10c_max,wspd10max, & alwoutc,alwtoac,aswoutc,aswtoac,alwinc,aswinc,avgpotevp,snoavg, & ti,aod550,du_aod550,ss_aod550,su_aod550,oc_aod550,bc_aod550 @@ -1270,6 +1271,11 @@ SUBROUTINE INITPOST_GFS_NETCDF_PARA(ncid3d) enddo ! if(debugprint)print*,'sample ',VarName,' = ',mxsnal(isa,jsa) +! land fraction + VarName='lfrac' + call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & + spval,VarName,landfrac) + ! GFS probably does not use sigt4, set it to sig*t^4 !$omp parallel do private(i,j,tlmh) Do j=jsta,jend @@ -2130,7 +2136,55 @@ SUBROUTINE INITPOST_GFS_NETCDF_PARA(ncid3d) enddo enddo ! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,runoff(isa,jsa) + +! accumulated evaporation of intercepted water + VarName='ecan_acc' + call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & + spval,VarName,tecan) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) tecan(i,j) = spval + enddo + enddo +! accumulated plant transpiration + VarName='etran_acc' + call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & + spval,VarName,tetran) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) tetran(i,j) = spval + enddo + enddo + +! accumulated soil surface evaporation + VarName='edir_acc' + call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & + spval,VarName,tedir) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) tedir(i,j) = spval + enddo + enddo + +! total water storage in aquifer + VarName='wa_acc' + call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & + spval,VarName,twa) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) twa(i,j) = spval + enddo + enddo + ! retrieve shelter max temperature using nemsio VarName='tmax_max2m' call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & @@ -2299,6 +2353,30 @@ SUBROUTINE INITPOST_GFS_NETCDF_PARA(ncid3d) enddo enddo +! retrieve AVERAGED PRECIP ADVECTED HEAT FLUX + VarName='pah_ave' + call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & + spval,VarName,paha) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) paha(i,j) = spval + enddo + enddo + +! retrieve nstantaneous PRECIP ADVECTED HEAT FLUX + VarName='pahi' + call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & + spval,VarName,pahi) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) pahi(i,j) = spval + enddo + enddo + ! retrieve PLANT TRANSPIRATION VarName='trans_ave' call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & diff --git a/sorc/ncep_post.fd/RQSTFLD.F b/sorc/ncep_post.fd/RQSTFLD.F index f5b82ad04..ab45ee229 100644 --- a/sorc/ncep_post.fd/RQSTFLD.F +++ b/sorc/ncep_post.fd/RQSTFLD.F @@ -26,7 +26,9 @@ module RQSTFLD_mod implicit none ! ! increase MXFLD each time you add a new field + INTEGER, PARAMETER :: MXFLD=1200 + #ifdef COMMCODE INTEGER, PARAMETER :: MXLVL=70 #else @@ -2723,6 +2725,28 @@ module RQSTFLD_mod DATA IFILV(995),AVBL(995),IQ(995),IS(995), AVBLGRB2(995) & & /1,'PMTF ',167,109, & !table 141 & 'PM25TOT ON Hybrid level'/ + + DATA IFILV(996),AVBL(996),IQ(996),IS(996),AVBLGRB2(996) & + & /1,'LAND FRACTION',205,217, & + & 'LANDFRAC ON surface'/ + DATA IFILV(997),AVBL(997),IQ(997),IS(997),AVBLGRB2(997) & + & /1,'INST PREC ADVEC HEAT',205,217, & + & 'PAHFLX ON surface'/ + DATA IFILV(998),AVBL(998),IQ(998),IS(998),AVBLGRB2(998) & + & /1,'WATER IN AQUIFER',205,217, & + & 'WATERSA ON surface'/ + DATA IFILV(999),AVBL(999),IQ(999),IS(999),AVBLGRB2(999) & + & /1,'ACM EIWATER',205,217, & + & 'EIWATER ON surface'/ + DATA IFILV(1000),AVBL(1000),IQ(1000),IS(1000),AVBLGRB2(1000) & + & /1,'ACM PLANTTR',205,217, & + & 'PLANTTR ON surface'/ + DATA IFILV(1001),AVBL(1001),IQ(1001),IS(1001),AVBLGRB2(1001) & + & /1,'ACM SOILSE',205,217, & + & 'SOILSE ON surface'/ + DATA IFILV(1002),AVBL(1002),IQ(1002),IS(1002),AVBLGRB2(1002) & + & /1,'AVE PREC ADVEC HEAT',205,217, & + & 'SOILSE ON surface'/ !end initialization ! diff --git a/sorc/ncep_post.fd/SURFCE.f b/sorc/ncep_post.fd/SURFCE.f index 749e5cdd0..a1254cfef 100644 --- a/sorc/ncep_post.fd/SURFCE.f +++ b/sorc/ncep_post.fd/SURFCE.f @@ -89,7 +89,8 @@ SUBROUTINE SURFCE acond,maxqshltr,minqshltr,avgpotevp,AVGPREC_CONT, & AVGCPRATE_CONT,sst,pcp_bucket1,rainnc_bucket1, & snow_bucket1, rainc_bucket1, graup_bucket1, & - shdmin, shdmax, lai, ch10,cd10 + shdmin, shdmax, lai, ch10,cd10,landfrac,paha,pahi, & + tecan,tetran,tedir,twa use soil, only: stc, sllevel, sldpth, smc, sh2o use masks, only: lmh, sm, sice, htm, gdlat, gdlon use physcons_post,only: CON_EPS, CON_EPSM1 @@ -168,7 +169,7 @@ SUBROUTINE SURFCE IF ( (IGET(024)>0).OR.(IGET(025)>0).OR. & (IGET(026)>0).OR.(IGET(027)>0).OR. & (IGET(028)>0).OR.(IGET(029)>0).OR. & - (IGET(154)>0).OR. & + (IGET(154)>0).OR. & (IGET(034)>0).OR.(IGET(076)>0) ) THEN ! allocate(zsfc(im,jsta:jend), psfc(im,jsta:jend), tsfc(im,jsta:jend)& @@ -1220,6 +1221,104 @@ SUBROUTINE SURFCE endif ENDIF + IF ( IGET(994)>0 )THEN + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(994)) +!$omp parallel do private(i,j,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,im + datapd(i,j,cfld) = LANDFRAC(i,jj) + enddo + enddo + endif + ENDIF + + IF ( IGET(995)>0 )THEN + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(995)) +!$omp parallel do private(i,j,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,im + datapd(i,j,cfld) = PAHI(i,jj) + enddo + enddo + endif + ENDIF + + IF ( IGET(996)>0 )THEN + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(996)) +!$omp parallel do private(i,j,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,im + datapd(i,j,cfld) = TWA(i,jj) + enddo + enddo + endif + ENDIF + + IF ( IGET(997)>0 )THEN + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(997)) +!$omp parallel do private(i,j,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,im + datapd(i,j,cfld) = TECAN(i,jj) + enddo + enddo + endif + ENDIF + + IF ( IGET(998)>0 )THEN + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(998)) +!$omp parallel do private(i,j,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,im + datapd(i,j,cfld) = TETRAN(i,jj) + enddo + enddo + endif + ENDIF + + IF ( IGET(999)>0 )THEN + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(999)) +!$omp parallel do private(i,j,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,im + datapd(i,j,cfld) = TEDIR(i,jj) + enddo + enddo + endif + ENDIF + + IF ( IGET(1000)>0 )THEN + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1000)) +!$omp parallel do private(i,j,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,im + datapd(i,j,cfld) = PAHA(i,jj) + enddo + enddo + endif + ENDIF + ! ! ! diff --git a/sorc/ncep_post.fd/VRBLS2D_mod.f b/sorc/ncep_post.fd/VRBLS2D_mod.f index 11c542b1d..31eef7a90 100644 --- a/sorc/ncep_post.fd/VRBLS2D_mod.f +++ b/sorc/ncep_post.fd/VRBLS2D_mod.f @@ -81,9 +81,11 @@ module vrbls2d ,etrans(:,:),esnow(:,:),avgedir(:,:),avgecan(:,:),avgetrans(:,:)& ,avgesnow(:,:),avgpotevp(:,:),avgprec_cont(:,:),avgcprate_cont(:,:)& ,ti(:,:),aod550(:,:),du_aod550(:,:),ss_aod550(:,:),su_aod550(:,:) & - ,bc_aod550(:,:),oc_aod550(:,:) + ,bc_aod550(:,:),oc_aod550(:,:),landfrac(:,:),paha(:,:),pahi(:,:) & + ,tecan(:,:),tetran(:,:),tedir(:,:),twa(:,:) integer, allocatable :: IVGTYP(:,:),ISLTYP(:,:),ISLOPE(:,:) & ,IEQL(:,:) + ! Add 2d aerosol diagnosis fields for GOCART (NGAC) real, allocatable :: & DUSMASS(:,:),DUCMASS(:,:),DUSMASS25(:,:),DUCMASS25(:,:) &