diff --git a/parm/post_avblflds.xml b/parm/post_avblflds.xml index f2358d259..67d4e654e 100755 --- a/parm/post_avblflds.xml +++ b/parm/post_avblflds.xml @@ -5992,10 +5992,11 @@ 685 - DU_CR_AER_SFC_MASS_CON + DUST10_SFC_MASS_CON AVE tmpl4_48 - MASSDEN + PMTC + surface dust_dry smaller_than_first_limit 6 diff --git a/parm/postcntrl_gefs_chem.xml b/parm/postcntrl_gefs_chem.xml index 5a88ea873..4e3ee94dc 100755 --- a/parm/postcntrl_gefs_chem.xml +++ b/parm/postcntrl_gefs_chem.xml @@ -224,6 +224,12 @@ 9.0 + + DUST10_SFC_MASS_CON + NCEP + 9.0 + + DUST25_SFC_MASS_CON NCEP diff --git a/parm/postxconfig-NT-GEFS-CHEM.txt b/parm/postxconfig-NT-GEFS-CHEM.txt index 6692ae83a..d605ff93a 100644 --- a/parm/postxconfig-NT-GEFS-CHEM.txt +++ b/parm/postxconfig-NT-GEFS-CHEM.txt @@ -1,5 +1,5 @@ 1 -46 +47 GFSPRS 0 ncep_nco @@ -1311,6 +1311,43 @@ between_first_second_limit ? ? ? +685 +DUST10_SFC_MASS_CON +? +1 +tmpl4_48 +PMTC +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +dust_dry +smaller_than_first_limit +6 +10 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? 686 DUST25_SFC_MASS_CON ? diff --git a/sorc/ncep_post.fd/ALLOCATE_ALL.f b/sorc/ncep_post.fd/ALLOCATE_ALL.f index f99a6de99..970018ec3 100644 --- a/sorc/ncep_post.fd/ALLOCATE_ALL.f +++ b/sorc/ncep_post.fd/ALLOCATE_ALL.f @@ -525,7 +525,9 @@ SUBROUTINE ALLOCATE_ALL() allocate(dustallcb(im,jsta_2l:jend_2u)) allocate(ssallcb(im,jsta_2l:jend_2u)) allocate(dustpm(im,jsta_2l:jend_2u)) + allocate(dustpm10(im,jsta_2l:jend_2u)) allocate(sspm(im,jsta_2l:jend_2u)) + allocate(maod(im,jsta_2l:jend_2u)) endif ! HWRF RRTMG output allocate(acswupt(im,jsta_2l:jend_2u)) diff --git a/sorc/ncep_post.fd/CALPW.f b/sorc/ncep_post.fd/CALPW.f index 2ed406358..451da300b 100644 --- a/sorc/ncep_post.fd/CALPW.f +++ b/sorc/ncep_post.fd/CALPW.f @@ -289,12 +289,11 @@ SUBROUTINE CALPW(PW,IDECID) DO J=JSTA,JEND DO I=1,IM DP = PINT(I,J,L+1) - PINT(I,J,L) - PW(I,J) = PW(I,J) + Qdum(I,J)*DP*GI*HTM(I,J,L) - IF (IDECID == 17 .or. IDECID == 20 .or. IDECID == 21) THEN - PW(I,J) = PW(I,J) + Qdum(I,J)*MAX(DP,0.)*GI*HTM(I,J,L) - ENDIF + IF (IDECID == 19) THEN PW(I,J) = PW(I,J) + Qdum(I,J) + ELSE + PW(I,J) = PW(I,J) + Qdum(I,J)*MAX(DP,0.)*GI*HTM(I,J,L) ENDIF IF (IDECID == 14) PWS(I,J) = PWS(I,J) + QS(I,J)*DP*GI*HTM(I,J,L) ENDDO diff --git a/sorc/ncep_post.fd/CLDRAD.f b/sorc/ncep_post.fd/CLDRAD.f index 51ab9f111..ad0b414ae 100644 --- a/sorc/ncep_post.fd/CLDRAD.f +++ b/sorc/ncep_post.fd/CLDRAD.f @@ -109,7 +109,7 @@ SUBROUTINE CLDRAD SWDDIFC, SWUPBC, LWDNBC, LWUPBC, SWUPT, & TAOD5502D, AERSSA2D, AERASY2D, MEAN_FRP, LWP, IWP, & TAOD5502D, AERSSA2D, AERASY2D, & - DUSTCB,SSCB,BCCB,OCCB,SULFCB,DUSTPM,SSPM + DUSTCB,SSCB,BCCB,OCCB,SULFCB,DUSTPM,DUSTPM10,SSPM,MAOD use masks, only: LMH, HTM use params_mod, only: TFRZ, D00, H99999, QCLDMIN, SMALL, D608, H1, ROG, & GI, RD, QCONV, ABSCOEFI, ABSCOEF, STBOL, PQ0, A2, & @@ -5137,50 +5137,49 @@ SUBROUTINE CLDRAD ENDIF ! END OF LAEROPT IF-BLOCK +!#if 0 !! Multiply by 1.E-6 to revert these fields back - IF (IGET(659).GT.0) THEN + IF (IGET(667).GT.0) THEN GRID1=SPVAL !$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM - GRID1(I,J) = DUEM(I,J,1)*1.E-6 - DO K=2,NBIN_DU - GRID1(I,J) = GRID1(I,J) + DUEM(I,J,K)*1.E-6 + GRID1(I,J) = BCEM(I,J,1) + DO K=2,NBIN_BC + GRID1(I,J) = GRID1(I,J) + BCEM(I,J,K) END DO END DO END DO ID(1:25) = 0 ID(02)=141 if(grib=='grib1') then - CALL GRIBIT(IGET(659),LVLS(1,IGET(659)),GRID1,IM,JM) + CALL GRIBIT(IGET(667),LVLS(1,IGET(667)),GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(659)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(667)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF - IF (IGET(660).GT.0) THEN + IF (IGET(699).GT.0) THEN GRID1=SPVAL !$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM - GRID1(I,J) = DUSD(I,J,1)*1.E-6 - DO K=2,NBIN_DU - GRID1(I,J) = GRID1(I,J)+ DUSD(I,J,K)*1.E-6 - END DO + GRID1(I,J) = MAOD(I,J) END DO END DO ID(1:25) = 0 ID(02)=141 if(grib=='grib1') then - CALL GRIBIT(IGET(660),LVLS(1,IGET(660)),GRID1,IM,JM) + CALL GRIBIT(IGET(699),LVLS(1,IGET(699)),GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(660)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(699)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF +!#endif !! ADD DUST DRY DEPOSITION FLUXES (kg/m2/sec) ! ! IF (IGET(661).GT.0) THEN @@ -5208,7 +5207,6 @@ SUBROUTINE CLDRAD !$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM - !GRID1(I,J) = DUSMASS(I,J) * 1.E-6 GRID1(I,J) = DUSTPM(I,J) !ug/m3 END DO END DO @@ -5223,6 +5221,24 @@ SUBROUTINE CLDRAD endif ENDIF + IF (IGET(685).GT.0 ) THEN +!$omp parallel do private(i,j) + DO J = JSTA,JEND + DO I = 1,IM + GRID1(I,J) = DUSTPM10(I,J) !ug/m3 + END DO + END DO + ID(1:25) = 0 + ID(02)=129 + if(grib=='grib1') then + CALL GRIBIT(IGET(685),LVLS(1,IGET(685)),GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(685)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + ENDIF + !! ADD DUST WET DEPOSITION FLUXES (kg/m2/sec) ! IF (IGET(662).GT.0) THEN ! DO J = JSTA,JEND @@ -5469,6 +5485,9 @@ SUBROUTINE CLDRAD IF (IGET(674).GT.0) call wrt_aero_diag(674,nbin_oc,ocwt) IF (IGET(682).GT.0) call wrt_aero_diag(682,nbin_oc,ocsv) print *,'aft wrt disg ocwt' +!! wrt MIE AOD at 550nm + IF (IGET(699).GT.0) call wrt_aero_diag(699,1,maod) + print *,'aft wrt disg maod' !! wrt SU diag field ! IF (IGET(675).GT.0) call wrt_aero_diag(675,nbin_su,suem) diff --git a/sorc/ncep_post.fd/DEALLOCATE.f b/sorc/ncep_post.fd/DEALLOCATE.f index 3d1d57a3d..0ccc837d1 100644 --- a/sorc/ncep_post.fd/DEALLOCATE.f +++ b/sorc/ncep_post.fd/DEALLOCATE.f @@ -514,7 +514,9 @@ SUBROUTINE DE_ALLOCATE deallocate(dustallcb) deallocate(ssallcb) deallocate(dustpm) + deallocate(dustpm10) deallocate(sspm) + deallocate(maod) endif ! ! HWRF RRTMG output diff --git a/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f b/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f index ed2ed5a60..22fc118ac 100644 --- a/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f +++ b/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f @@ -73,7 +73,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) avgedir,avgecan,avgetrans,avgesnow,avgprec_cont,avgcprate_cont, & avisbeamswin,avisdiffswin,airbeamswin,airdiffswin, & alwoutc,alwtoac,aswoutc,aswtoac,alwinc,aswinc,avgpotevp,snoavg, & - dustcb,bccb,occb,sulfcb,sscb,dustallcb,ssallcb,dustpm,sspm,pp25cb,pp10cb + dustcb,bccb,occb,sulfcb,sscb,dustallcb,ssallcb,dustpm,dustpm10,sspm,pp25cb,pp10cb,maod use soil, only: sldpth, sh2o, smc, stc use masks, only: lmv, lmh, htm, vtm, gdlat, gdlon, dx, dy, hbm2, sm, sice ! use kinds, only: i_llong @@ -1430,7 +1430,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) dustallcb(1:im,jsta_2l:jend_2u)=dustallcb(1:im,jsta_2l:jend_2u)+ & (dust(1:im,jsta_2l:jend_2u,ll,1)+dust(1:im,jsta_2l:jend_2u,ll,2)+ & - dust(1:im,jsta_2l:jend_2u,ll,3)+0.67*dust(1:im,jsta_2l:jend_2u,ll,4))* & + dust(1:im,jsta_2l:jend_2u,ll,3)+0.74*dust(1:im,jsta_2l:jend_2u,ll,4))* & dpres(1:im,jsta_2l:jend_2u,ll)/grav ! if(debugprint)print*,'sample l ',VarName,' = ',ll,dust(isa,jsa,ll,5) @@ -1487,7 +1487,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,salt(1:im,jsta_2l:jend_2u,ll,3)) sscb(1:im,jsta_2l:jend_2u)=sscb(1:im,jsta_2l:jend_2u)+ & - (salt(1:im,jsta_2l:jend_2u,ll,2)+0.75*salt(1:im,jsta_2l:jend_2u,ll,3))* & + (salt(1:im,jsta_2l:jend_2u,ll,1)+ & + salt(1:im,jsta_2l:jend_2u,ll,2)+0.83*salt(1:im,jsta_2l:jend_2u,ll,3))* & dpres(1:im,jsta_2l:jend_2u,ll)/grav ! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,3) @@ -1518,7 +1519,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ssallcb(1:im,jsta_2l:jend_2u)=ssallcb(1:im,jsta_2l:jend_2u)+ & (salt(1:im,jsta_2l:jend_2u,ll,1)+salt(1:im,jsta_2l:jend_2u,ll,2)+ & salt(1:im,jsta_2l:jend_2u,ll,3)+ & - salt(1:im,jsta_2l:jend_2u,ll,4)*0.83)* & + salt(1:im,jsta_2l:jend_2u,ll,4))* & dpres(1:im,jsta_2l:jend_2u,ll)/grav ! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,5) @@ -1745,17 +1746,18 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) bccb(i,j) = MAX(bccb(i,j), 0.0) occb(i,j) = MAX(occb(i,j), 0.0) sulfcb(i,j) = MAX(sulfcb(i,j), 0.0) - pp25cb(i,j) = MAX(sulfcb(i,j), 0.0) - pp10cb(i,j) = MAX(sulfcb(i,j), 0.0) + pp25cb(i,j) = MAX(pp25cb(i,j), 0.0) + pp10cb(i,j) = MAX(pp10cb(i,j), 0.0) ! PM10 concentration dusmass(i,j)=(dust(i,j,l,1)+dust(i,j,l,2)+dust(i,j,l,3)+ & 0.74*dust(i,j,l,4)+salt(i,j,l,1)+salt(i,j,l,2)+salt(i,j,l,3)+ & - salt(i,j,l,4) + & - salt(i,j,l,5)+soot(i,j,l,1)+soot(i,j,l,2)+waso(i,j,l,1)+ & + salt(i,j,l,4) + soot(i,j,l,1)+soot(i,j,l,2)+waso(i,j,l,1)+ & waso(i,j,l,2) +suso(i,j,l,1)+pp25(i,j,l,1)+pp10(i,j,l,1)) & *RHOMID(i,j,l) !ug/m3 ! PM25 dust and seasalt dustpm(i,j)=(dust(i,j,l,1)+0.38*dust(i,j,l,2))*RHOMID(i,j,l) !ug/m3 + dustpm10(i,j)=(dust(i,j,l,1)+dust(i,j,l,2)+dust(i,j,l,3)+ & + 0.74*dust(i,j,l,4))*RHOMID(i,j,l) !ug/m3 sspm(i,j)=(salt(i,j,l,1)+salt(i,j,l,2)+ & 0.83*salt(i,j,l,3))*RHOMID(i,j,l) !ug/m3 ! PM25 concentration @@ -3672,42 +3674,6 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) enddo enddo -! done with flux file, close it for now - call nemsio_close(ffile,iret=status) - deallocate(tmp,recname,reclevtyp,reclev) - - -! Retrieve aer fields if it's listed (GOCART) - print *, 'iostatus for aer file=', iostatusAER - if(iostatusAER == 0) then ! start reading aer file - call nemsio_open(rfile,trim(fileNameAER),'read',mpi_comm_comp & - ,iret=status) - if ( Status /= 0 ) then - print*,'error opening ',fileNameAER, ' Status = ', Status - endif - call nemsio_getfilehead(rfile,iret=status,nrec=nrec) - print*,'nrec for aer file=',nrec - allocate(recname(nrec),reclevtyp(nrec),reclev(nrec)) - call nemsio_getfilehead(rfile,iret=iret,recname=recname & - ,reclevtyp=reclevtyp,reclev=reclev) - if(debugprint)then - if (me == 0)then - do i=1,nrec - print *,'recname,reclevtyp,reclev=',trim(recname(i)),' ', & - trim(reclevtyp(i)),reclev(i) - end do - end if - end if -! start reading nemsio aer files using parallel read - fldsize=(jend-jsta+1)*im - allocate(tmp(fldsize*nrec)) - print*,'allocate tmp successfully' - tmp=0. - call nemsio_denseread(rfile,1,im,jsta,jend,tmp,iret=iret) - if(iret/=0)then - print*,"fail to read aer file using mpi io read, stopping" - stop - end if ! retrieve dust emission fluxes do K = 1, nbin_du @@ -3716,28 +3682,28 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='duem003' if ( K == 4) VarName='duem004' if ( K == 5) VarName='duem005' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,duem(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,duem(1,jsta_2l,K)) ! if(debugprint)print*,'sample ',VarName,' = ',duem(isa,jsa,k) enddo ! retrieve dust sedimentation fluxes do K = 1, nbin_du - if ( K == 1) VarName='dust1SD' - if ( K == 2) VarName='dust2SD' - if ( K == 3) VarName='dust3SD' - if ( K == 4) VarName='dust4SD' - if ( K == 5) VarName='dsut5SD' - VcoordName='atmos col' + if ( K == 1) VarName='dust1sd' + if ( K == 2) VarName='dust2sd' + if ( K == 3) VarName='dust3sd' + if ( K == 4) VarName='dust4sd' + if ( K == 5) VarName='dust5sd' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,dusd(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,dusd(1,jsta_2l,K)) ! if(debugprint)print*,'sample ',VarName,' = ',dusd(isa,jsa,k) enddo @@ -3748,12 +3714,12 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='dust3dp' if ( K == 4) VarName='dust4dp' if ( K == 5) VarName='dust5dp' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,dudp(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,dudp(1,jsta_2l,K)) print *,'dudp,ck=',maxval(dudp(1:im,jsta:jend,k)), & minval(dudp(1:im,jsta:jend,k)) ! if(debugprint)print*,'sample ',VarName,' = ',dudp(isa,jsa,k) @@ -3766,12 +3732,12 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='dust3wtl' if ( K == 4) VarName='dust4wtl' if ( K == 5) VarName='dust5wtl' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,duwt(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,duwt(1,jsta_2l,K)) enddo ! retrieve dust scavenging fluxes do K = 1, nbin_du @@ -3780,12 +3746,12 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='dust3wtc' if ( K == 4) VarName='dust4wtc' if ( K == 5) VarName='dust5wtc' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,dusv(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,dusv(1,jsta_2l,K)) enddo ! retrieve seasalt emission fluxes @@ -3795,12 +3761,27 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='ssem003' if ( K == 4) VarName='ssem004' if ( K == 5) VarName='ssem005' - VcoordName='atmos col' + VcoordName='sfc' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ssem(1,jsta_2l,K)) + enddo + +! retrieve seasalt emission fluxes + do K = 1, nbin_ss + if ( K == 1) VarName='seas1sd' + if ( K == 2) VarName='seas2sd' + if ( K == 3) VarName='seas3sd' + if ( K == 4) VarName='seas4sd' + if ( K == 5) VarName='seas5sd' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,ssem(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,sssd(1,jsta_2l,K)) enddo ! retrieve seasalt dry deposition fluxes @@ -3810,12 +3791,12 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='seas3dp' if ( K == 4) VarName='seas4dp' if ( K == 5) VarName='seas5dp' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,ssdp(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ssdp(1,jsta_2l,K)) enddo ! retrieve seasalt wet deposition fluxes @@ -3825,12 +3806,12 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='seas3wtl' if ( K == 4) VarName='seas4wtl' if ( K == 5) VarName='seas5wtl' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,sswt(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,sswt(1,jsta_2l,K)) enddo ! retrieve seasalt scavenging fluxes @@ -3840,135 +3821,146 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='seas1wtc' if ( K == 4) VarName='seas1wtc' if ( K == 5) VarName='seas1wtc' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,sssv(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,sssv(1,jsta_2l,K)) enddo ! retrieve bc emission fluxes do K = 1, nbin_bc if ( K == 1) VarName='bceman' if ( K == 2) VarName='bcembb' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,bcem(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,bcem(1,jsta_2l,K)) enddo ! retrieve bc sedimentation fluxes do K = 1, nbin_bc if ( K == 1) VarName='bc1sd' if ( K == 2) VarName='bc2sd' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,bcsd(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,bcsd(1,jsta_2l,K)) enddo ! retrieve bc dry deposition fluxes do K = 1, nbin_bc if ( K == 1) VarName='bc1dp' if ( K == 2) VarName='bc2dp' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,bcdp(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,bcdp(1,jsta_2l,K)) enddo ! retrieve bc large wet deposition fluxes do K = 1, nbin_bc if ( K == 1) VarName='bc1wtl' if ( K == 2) VarName='bc2wtl' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,bcwt(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,bcwt(1,jsta_2l,K)) enddo ! retrieve bc convective wet deposition fluxes do K = 1, nbin_bc if ( K == 1) VarName='bc1wtc' if ( K == 2) VarName='bc2wtc' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,bcsv(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,bcsv(1,jsta_2l,K)) enddo ! retrieve oc emission fluxes do K = 1, nbin_oc if ( K == 1) VarName='oceman' if ( K == 2) VarName='ocembb' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,ocem(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ocem(1,jsta_2l,K)) enddo ! retrieve oc sedimentation fluxes do K = 1, nbin_oc if ( K == 1) VarName='oc1sd' if ( K == 2) VarName='oc2sd' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,ocsd(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ocsd(1,jsta_2l,K)) enddo ! retrieve oc dry deposition fluxes do K = 1, nbin_oc - if ( K == 1) VarName='c1dp' - if ( K == 2) VarName='c2dp' - VcoordName='atmos col' + if ( K == 1) VarName='oc1dp' + if ( K == 2) VarName='oc2dp' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,ocdp(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ocdp(1,jsta_2l,K)) enddo ! retrieve oc large wet deposition fluxes do K = 1, nbin_oc if ( K == 1) VarName='oc1wtl' if ( K == 2) VarName='oc2wtl' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,ocwt(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ocwt(1,jsta_2l,K)) enddo ! retrieve oc convective wet deposition fluxes do K = 1, nbin_oc if ( K == 1) VarName='oc1wtc' if ( K == 2) VarName='oc2wtc' - VcoordName='atmos col' + VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName& - ,ocsv(1,jsta_2l,K)) + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,ocsv(1,jsta_2l,K)) enddo +! retrieve MIE AOD + VarName='maod' + VcoordName='sfc' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,maod(1,jsta_2l)) +! done with flux file, close it for now + call nemsio_close(ffile,iret=status) + deallocate(tmp,recname,reclevtyp,reclev) !lzhang !! retrieve sfc mass concentration @@ -4013,12 +4005,6 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! ,recname,reclevtyp,reclev,VarName,VcoordName & ! ,ducmass25) ! if(debugprint)print*,'sample ',VarName,' = ',ducmass25(isa,jsa) - - if (me == 0) print *,'after aer files reading,mype=',me - call nemsio_close(rfile,iret=status) - deallocate(tmp,recname,reclevtyp,reclev) - end if ! end of aer file read - ! pos east call collect_loc(gdlat,dummy) if(me == 0)then diff --git a/sorc/ncep_post.fd/MPI_FIRST.f b/sorc/ncep_post.fd/MPI_FIRST.f index ad5677f75..8a2d034c8 100644 --- a/sorc/ncep_post.fd/MPI_FIRST.f +++ b/sorc/ncep_post.fd/MPI_FIRST.f @@ -79,7 +79,7 @@ SUBROUTINE MPI_FIRST() ocsmass25, occmass25, bcsmass, bccmass, bcsmass25, bccmass25, & sssmass, sscmass, sssmass25, sscmass25, ducmass25, & dustcb, sscb, bccb, occb, sulfcb, dustallcb, ssallcb,dustpm,sspm, pp25cb,& - pp10cb !lzhang + dustpm10,pp10cb,maod !lzhang use soil, only: smc, stc, sh2o, sldpth, rtdpth, sllevel use masks, only: htm, vtm, hbm2, sm, sice, lmh, gdlat, gdlon, dx, dy, lmv use ctlblk_mod, only: me, num_procs, jm, jsta, jend, jsta_m, jsta_m2, & diff --git a/sorc/ncep_post.fd/RQSTFLD.F b/sorc/ncep_post.fd/RQSTFLD.F index 6dda3af35..1146d0172 100644 --- a/sorc/ncep_post.fd/RQSTFLD.F +++ b/sorc/ncep_post.fd/RQSTFLD.F @@ -2085,12 +2085,13 @@ module RQSTFLD_mod DATA IFILV(684),AVBL(684),IQ(684),IS(684),AVBLGRB2(684) & & /1,'SEAS25 SFC MASS CON ',159,200, & 'seas pm25 sfc mass concentration '/ -! DATA IFILV(685),AVBL(685),IQ(685),IS(685),AVBLGRB2(685) & -! & /1,'DU CR SFC MASS CON ',160,001, & -! 'dust cr sfc mass con '/ + DATA IFILV(685),AVBL(685),IQ(685),IS(685),AVBLGRB2(685) & + & /1,'DUST10 SFC MASS CON ',160,001, & + 'dust pm10 sfc mass con '/ DATA IFILV(686),AVBL(686),IQ(686),IS(686),AVBLGRB2(686) & & /1,'DUST25 SFC MASS CON ',161,001, & 'dust pm25 sfc mass con '/ +#if 0 DATA IFILV(687),AVBL(687),IQ(687),IS(687),AVBLGRB2(687) & & /1,'BC SFC MASS CON ',162,001, & 'black carbon sfc mass con '/ @@ -2127,6 +2128,10 @@ module RQSTFLD_mod DATA IFILV(698),AVBL(698),IQ(698),IS(698),AVBLGRB2(698) & & /1,'INST AER FN SMASS ',164,001, & 'instn aer fine mode sfc mass con '/ +#endif + DATA IFILV(699),AVBL(699),IQ(699),IS(699),AVBLGRB2(699) & + & /1,'MIE OPT DEP AT 550 ',129,200, & + 'mie aerosol optical depth at 550 '/ ! Reserving Index 601-700 for GOCART ! diff --git a/sorc/ncep_post.fd/VRBLS2D_mod.f b/sorc/ncep_post.fd/VRBLS2D_mod.f index 5f4d6ae72..ba6d1d730 100644 --- a/sorc/ncep_post.fd/VRBLS2D_mod.f +++ b/sorc/ncep_post.fd/VRBLS2D_mod.f @@ -87,7 +87,7 @@ module vrbls2d ,SSSMASS(:,:),SSCMASS(:,:),SSSMASS25(:,:),SSCMASS25(:,:) & ,DUSTCB(:,:),SSCB(:,:),OCCB(:,:),BCCB(:,:),SULFCB(:,:) & ,DUSTALLCB(:,:),SSALLCB(:,:),DUSTPM(:,:),SSPM(:,:),PP25CB(:,:) & - ,PP10CB(:,:)!lzhang, add for FV3-Chem + ,DUSTPM10(:,:),PP10CB(:,:),maod(:,:)!lzhang, add for FV3-Chem ! end module vrbls2d