diff --git a/comupp/scripts/run_unipost b/comupp/scripts/run_unipost index c295abfa0..5132b4f67 100755 --- a/comupp/scripts/run_unipost +++ b/comupp/scripts/run_unipost @@ -307,6 +307,8 @@ ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmis_f20.TauCoeff.bin ./ ln -fs $CRTMDIR/SpcCoeff/Big_Endian/seviri_m10.SpcCoeff.bin ./ ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/seviri_m10.TauCoeff.bin ./ ln -fs $CRTMDIR/SpcCoeff/Big_Endian/v.seviri_m10.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/abi_gr.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/abi_gr.SpcCoeff.bin ./ ####################################################### # 1. Run Unipost diff --git a/comupp/scripts/run_unipost_frames b/comupp/scripts/run_unipost_frames index 55fef3354..3d28ed224 100755 --- a/comupp/scripts/run_unipost_frames +++ b/comupp/scripts/run_unipost_frames @@ -293,6 +293,8 @@ ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmis_f20.TauCoeff.bin ./ ln -fs $CRTMDIR/SpcCoeff/Big_Endian/seviri_m10.SpcCoeff.bin ./ ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/seviri_m10.TauCoeff.bin ./ ln -fs $CRTMDIR/SpcCoeff/Big_Endian/v.seviri_m10.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/abi_gr.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/abi_gr.SpcCoeff.bin ./ ####################################################### # 1. Run Unipost diff --git a/comupp/scripts/run_unipost_gracet b/comupp/scripts/run_unipost_gracet index a528ef3b2..8b1518387 100755 --- a/comupp/scripts/run_unipost_gracet +++ b/comupp/scripts/run_unipost_gracet @@ -295,6 +295,8 @@ ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmis_f20.TauCoeff.bin ./ ln -fs $CRTMDIR/SpcCoeff/Big_Endian/seviri_m10.SpcCoeff.bin ./ ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/seviri_m10.TauCoeff.bin ./ ln -fs $CRTMDIR/SpcCoeff/Big_Endian/v.seviri_m10.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/abi_gr.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/abi_gr.SpcCoeff.bin ./ ####################################################### # 1. Run Unipost diff --git a/comupp/scripts/run_unipost_minutes b/comupp/scripts/run_unipost_minutes index bdb4ebd69..e89ba13de 100755 --- a/comupp/scripts/run_unipost_minutes +++ b/comupp/scripts/run_unipost_minutes @@ -297,6 +297,8 @@ ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmis_f20.TauCoeff.bin ./ ln -fs $CRTMDIR/SpcCoeff/Big_Endian/seviri_m10.SpcCoeff.bin ./ ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/seviri_m10.TauCoeff.bin ./ ln -fs $CRTMDIR/SpcCoeff/Big_Endian/v.seviri_m10.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/abi_gr.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/abi_gr.SpcCoeff.bin ./ ####################################################### # 1. Run Unipost diff --git a/comupp/scripts/run_unipostandgempak b/comupp/scripts/run_unipostandgempak index dc7387bef..8eaf50620 100755 --- a/comupp/scripts/run_unipostandgempak +++ b/comupp/scripts/run_unipostandgempak @@ -308,6 +308,8 @@ ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmis_f20.TauCoeff.bin ./ ln -fs $CRTMDIR/SpcCoeff/Big_Endian/seviri_m10.SpcCoeff.bin ./ ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/seviri_m10.TauCoeff.bin ./ ln -fs $CRTMDIR/SpcCoeff/Big_Endian/v.seviri_m10.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/abi_gr.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/abi_gr.SpcCoeff.bin ./ ####################################################### # 1. Run Unipost diff --git a/comupp/scripts/run_unipostandgrads b/comupp/scripts/run_unipostandgrads index 72d1cce3c..6346699d1 100755 --- a/comupp/scripts/run_unipostandgrads +++ b/comupp/scripts/run_unipostandgrads @@ -311,6 +311,8 @@ ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmis_f20.TauCoeff.bin ./ ln -fs $CRTMDIR/SpcCoeff/Big_Endian/seviri_m10.SpcCoeff.bin ./ ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/seviri_m10.TauCoeff.bin ./ ln -fs $CRTMDIR/SpcCoeff/Big_Endian/v.seviri_m10.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/abi_gr.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/abi_gr.SpcCoeff.bin ./ ####################################################### # 1. Run Unipost diff --git a/comupp/src/lib/crtm2 b/comupp/src/lib/crtm2 index 7debf587d..2bb261c58 160000 --- a/comupp/src/lib/crtm2 +++ b/comupp/src/lib/crtm2 @@ -1 +1 @@ -Subproject commit 7debf587d1c3354de8ca219b1b087e5c7474e610 +Subproject commit 2bb261c58c3fc0282b782f7f8020bc3513dd317a diff --git a/comupp/src/unipost/ALLOCATE_ALL.f b/comupp/src/unipost/ALLOCATE_ALL.f index 374581b6d..8d4390c95 100644 --- a/comupp/src/unipost/ALLOCATE_ALL.f +++ b/comupp/src/unipost/ALLOCATE_ALL.f @@ -15,6 +15,10 @@ SUBROUTINE ALLOCATE_ALL() ! 02-06-19 MIKE BALDWIN - WRF VERSION ! 11-12-16 SARAH LU - MODIFIED TO INITIALIZE AEROSOL FIELDS ! 12-01-07 SARAH LU - MODIFIED TO INITIALIZE AIR DENSITY/LAYER THICKNESS +! 15-07-04 SARAH LU - MODIFIED TO INITIALIZE SCA +! 15-07-21 Jun Wang - Add scavenging for DU, SS, OC, BC, remove +! SU diagnostic fields +! 19-07-24 Li(Kate) Zhang - Merge and update NGAC UPP for FV3-Chem ! ! USAGE: CALL MPI_FIRST ! INPUT ARGUMENT LIST: @@ -94,6 +98,8 @@ SUBROUTINE ALLOCATE_ALL() allocate(QQNR(im,jsta_2l:jend_2u,lm)) allocate(QQNWFA(im,jsta_2l:jend_2u,lm)) allocate(QQNIFA(im,jsta_2l:jend_2u,lm)) + allocate(TAOD5503D(im,jsta_2l:jend_2u,lm)) + allocate(AEXTC55(im,jsta_2l:jend_2u,lm)) allocate(EXTCOF55(im,jsta_2l:jend_2u,lm)) allocate(CFR(im,jsta_2l:jend_2u,lm)) allocate(CFR_RAW(im,jsta_2l:jend_2u,lm)) @@ -173,6 +179,20 @@ SUBROUTINE ALLOCATE_ALL() allocate(fprate_max(im,jsta_2l:jend_2u)) allocate(up_heli_max(im,jsta_2l:jend_2u)) allocate(up_heli_max16(im,jsta_2l:jend_2u)) + allocate(up_heli_min(im,jsta_2l:jend_2u)) + allocate(up_heli_min16(im,jsta_2l:jend_2u)) + allocate(up_heli_max02(im,jsta_2l:jend_2u)) + allocate(up_heli_min02(im,jsta_2l:jend_2u)) + allocate(up_heli_max03(im,jsta_2l:jend_2u)) + allocate(up_heli_min03(im,jsta_2l:jend_2u)) + allocate(rel_vort_max(im,jsta_2l:jend_2u)) + allocate(rel_vort_max01(im,jsta_2l:jend_2u)) + allocate(rel_vort_maxhy1(im,jsta_2l:jend_2u)) + allocate(wspd10umax(im,jsta_2l:jend_2u)) + allocate(wspd10vmax(im,jsta_2l:jend_2u)) + allocate(refdm10c_max(im,jsta_2l:jend_2u)) + allocate(hail_max2d(im,jsta_2l:jend_2u)) + allocate(hail_maxk1(im,jsta_2l:jend_2u)) allocate(grpl_max(im,jsta_2l:jend_2u)) allocate(up_heli(im,jsta_2l:jend_2u)) allocate(up_heli16(im,jsta_2l:jend_2u)) @@ -255,6 +275,10 @@ SUBROUTINE ALLOCATE_ALL() allocate(qvl1(im,jsta_2l:jend_2u)) allocate(snfden(im,jsta_2l:jend_2u)) allocate(sndepac(im,jsta_2l:jend_2u)) + allocate(int_smoke(im,jsta_2l:jend_2u)) + allocate(mean_frp(im,jsta_2l:jend_2u)) + allocate(int_aod(im,jsta_2l:jend_2u)) + allocate(smoke(im,jsta_2l:jend_2u,lm,nbin_sm)) ! GSDend allocate(rswin(im,jsta_2l:jend_2u)) allocate(swddni(im,jsta_2l:jend_2u)) @@ -267,6 +291,8 @@ SUBROUTINE ALLOCATE_ALL() allocate(taod5502d(im,jsta_2l:jend_2u)) allocate(aerasy2d(im,jsta_2l:jend_2u)) allocate(aerssa2d(im,jsta_2l:jend_2u)) + allocate(lwp(im,jsta_2l:jend_2u)) + allocate(iwp(im,jsta_2l:jend_2u)) allocate(rlwin(im,jsta_2l:jend_2u)) allocate(lwdnbc(im,jsta_2l:jend_2u)) allocate(lwupbc(im,jsta_2l:jend_2u)) @@ -433,14 +459,18 @@ SUBROUTINE ALLOCATE_ALL() allocate(soot(im,jsta_2l:jend_2u,lm,nbin_bc)) allocate(waso(im,jsta_2l:jend_2u,lm,nbin_oc)) allocate(suso(im,jsta_2l:jend_2u,lm,nbin_su)) + allocate(pp25(im,jsta_2l:jend_2u,lm,nbin_su)) + allocate(pp10(im,jsta_2l:jend_2u,lm,nbin_su)) ! vrbls3d allocate(ext(im,jsta_2l:jend_2u,lm)) allocate(asy(im,jsta_2l:jend_2u,lm)) allocate(ssa(im,jsta_2l:jend_2u,lm)) + allocate(sca(im,jsta_2l:jend_2u,lm)) allocate(duem(im,jsta_2l:jend_2u,nbin_du)) allocate(dusd(im,jsta_2l:jend_2u,nbin_du)) allocate(dudp(im,jsta_2l:jend_2u,nbin_du)) allocate(duwt(im,jsta_2l:jend_2u,nbin_du)) + allocate(dusv(im,jsta_2l:jend_2u,nbin_du)) allocate(suem(im,jsta_2l:jend_2u,nbin_su)) allocate(susd(im,jsta_2l:jend_2u,nbin_su)) allocate(sudp(im,jsta_2l:jend_2u,nbin_su)) @@ -449,15 +479,18 @@ SUBROUTINE ALLOCATE_ALL() allocate(ocsd(im,jsta_2l:jend_2u,nbin_oc)) allocate(ocdp(im,jsta_2l:jend_2u,nbin_oc)) allocate(ocwt(im,jsta_2l:jend_2u,nbin_oc)) + allocate(ocsv(im,jsta_2l:jend_2u,nbin_oc)) allocate(bcem(im,jsta_2l:jend_2u,nbin_bc)) allocate(bcsd(im,jsta_2l:jend_2u,nbin_bc)) allocate(bcdp(im,jsta_2l:jend_2u,nbin_bc)) allocate(bcwt(im,jsta_2l:jend_2u,nbin_bc)) + allocate(bcsv(im,jsta_2l:jend_2u,nbin_bc)) allocate(ssem(im,jsta_2l:jend_2u,nbin_ss)) allocate(sssd(im,jsta_2l:jend_2u,nbin_ss)) allocate(ssdp(im,jsta_2l:jend_2u,nbin_ss)) allocate(sswt(im,jsta_2l:jend_2u,nbin_ss)) -! allocate(dpres(im,jsta_2l:jend_2u,lm)) + allocate(sssv(im,jsta_2l:jend_2u,nbin_ss)) + !allocate(dpres(im,jsta_2l:jend_2u,lm)) allocate(rhomid(im,jsta_2l:jend_2u,lm)) ! vrbls2d allocate(dusmass(im,jsta_2l:jend_2u)) @@ -480,6 +513,17 @@ SUBROUTINE ALLOCATE_ALL() allocate(sscmass(im,jsta_2l:jend_2u)) allocate(sssmass25(im,jsta_2l:jend_2u)) allocate(sscmass25(im,jsta_2l:jend_2u)) + allocate(dustcb(im,jsta_2l:jend_2u)) + allocate(occb(im,jsta_2l:jend_2u)) + allocate(bccb(im,jsta_2l:jend_2u)) + allocate(sulfcb(im,jsta_2l:jend_2u)) + allocate(pp25cb(im,jsta_2l:jend_2u)) + allocate(pp10cb(im,jsta_2l:jend_2u)) + allocate(sscb(im,jsta_2l:jend_2u)) + allocate(dustallcb(im,jsta_2l:jend_2u)) + allocate(ssallcb(im,jsta_2l:jend_2u)) + allocate(dustpm(im,jsta_2l:jend_2u)) + allocate(sspm(im,jsta_2l:jend_2u)) endif ! HWRF RRTMG output allocate(acswupt(im,jsta_2l:jend_2u)) diff --git a/comupp/src/unipost/CALPW.f b/comupp/src/unipost/CALPW.f index 91b9a6dee..5c18874ac 100644 --- a/comupp/src/unipost/CALPW.f +++ b/comupp/src/unipost/CALPW.f @@ -28,7 +28,12 @@ SUBROUTINE CALPW(PW,IDECID) ! 02-06-19 MIKE BALDWIN - WRF VERSION ! 04-12-30 H CHUANG - UPDATE TO CALCULATE TOTAL COLUMN FOR OTHER ! HYDROMETEORS -! 11-12-14 SARAH LU - UPDATE TO CALCULATE AEROSOL OPTICAL DEPTH +! 14-11-12 SARAH LU - UPDATE TO CALCULATE AEROSOL OPTICAL DEPTH +! 15-07-02 SARAH LU - UPDATE TO CALCULATE SCATTERING AEROSOL +! OPTICAL DEPTH (18) +! 15-07-04 SARAH LU - CORRECT PW INTEGRATION FOR AOD (17) +! 15-07-10 SARAH LU - UPDATE TO CALCULATE ASYMETRY PARAMETER +! 19-07-25 Li(Kate) Zhang - MERGE SARHA LU's update for FV3-Chem ! ! USAGE: CALL CALPW(PW) ! INPUT ARGUMENT LIST: @@ -53,7 +58,9 @@ SUBROUTINE CALPW(PW,IDECID) !$$$ ! use vrbls3d, only: q, qqw, qqi, qqr, qqs, cwm, qqg, t, rswtt, & - train, tcucn, mcvg, pmid, o3, ext, pint, rlwtt + train, tcucn, mcvg, pmid, o3, ext, pint, rlwtt, & + taod5503d,sca, asy + use vrbls4d, only: smoke use masks, only: htm use params_mod, only: tfrz, gi use ctlblk_mod, only: lm, jsta, jend, im @@ -238,17 +245,57 @@ SUBROUTINE CALPW(PW,IDECID) Qdum(I,J) = EXT(I,J,L) ENDDO END DO +! +! E. James - 8 Dec 2017 +! FIRE SMOKE (tracer_1a FROM HRRR-SMOKE) + ELSE IF (IDECID == 18) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + Qdum(I,J) = SMOKE(I,J,L,1)/1000000000. + ENDDO + END DO +! +! E. James - 8 Dec 2017 +! HRRR-SMOKE AOD + ELSE IF (IDECID == 19) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + Qdum(I,J) = TAOD5503D(I,J,L) + ENDDO + END DO +!LZhang -July 2019 +! SCATTERING AEROSOL OPTICAL THICKNESS (GOCART V2) + ELSE IF (IDECID == 20) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + Qdum(I,J) = SCA(I,J,L) + ENDDO + END DO +! ASYMMETRY PARAMETER (GOCART V2) + ELSE IF (IDECID == 21) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + Qdum(I,J) = ASY(I,J,L) + ENDDO + END DO ENDIF ! !$omp parallel do private(i,j,dp) 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) + 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) 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) + ENDIF IF (IDECID == 14) PWS(I,J) = PWS(I,J) + QS(I,J)*DP*GI*HTM(I,J,L) ENDDO ENDDO diff --git a/comupp/src/unipost/CALRAD_WCLOUD_newcrtm.f b/comupp/src/unipost/CALRAD_WCLOUD_newcrtm.f index bf6ed212b..8c09ea3d4 100644 --- a/comupp/src/unipost/CALRAD_WCLOUD_newcrtm.f +++ b/comupp/src/unipost/CALRAD_WCLOUD_newcrtm.f @@ -12,6 +12,7 @@ SUBROUTINE CALRAD_WCLOUD ! 14-12-09 WM LEWIS ADDED: ! FUNCTION EFFR TO COMPUTE EFFECTIVE PARTICLE RADII ! CHANNEL SELECTION USING LVLS FROM WRF_CNTRL.PARM + ! 19-04-01 Sharon NEBUDA - Added output option for GOES-16 & GOES-17 ABI IR Channels 7-16 ! ! USAGE: CALL MDLFLD ! INPUT ARGUMENT LIST: @@ -120,7 +121,7 @@ SUBROUTINE CALRAD_WCLOUD ! integer,parameter:: n_clouds = 4 integer,parameter:: n_aerosols = 0 ! Add your sensors here - integer(i_kind),parameter:: n_sensors=18 + integer(i_kind),parameter:: n_sensors=20 character(len=20),parameter,dimension(1:n_sensors):: sensorlist= & (/'imgr_g15 ', & 'imgr_g13 ', & @@ -139,7 +140,9 @@ SUBROUTINE CALRAD_WCLOUD 'seviri_m10 ', & 'imgr_mt2 ', & 'imgr_mt1r ', & - 'imgr_insat3d '/) + 'imgr_insat3d ', & + 'abi_g16 ', & + 'abi_g17 '/) character(len=12),parameter,dimension(1:n_sensors):: obslist= & (/'goes_img ', & 'goes_img ', & @@ -158,7 +161,10 @@ SUBROUTINE CALRAD_WCLOUD 'seviri ', & 'imgr_mt2 ', & 'imgr_mt1r ', & - 'imgr_insat3d'/) + 'imgr_insat3d', & + 'abi ', & + 'abi '/) + character(len=20),dimension(1:n_sensors):: sensorlist_local ! integer(i_kind) sensorindex integer(i_kind) lunin,nobs,nchanl,nreal @@ -190,14 +196,17 @@ SUBROUTINE CALRAD_WCLOUD real RHO,RHOX character(12)::obstype character(20)::isis + character(20)::isis_local logical hirs2,msu,goessndr,hirs3,hirs4,hirs,amsua,amsub,airs,hsb & - ,goes_img,seviri, mhs,insat3d + ,goes_img,abi,seviri, mhs,insat3d logical avhrr,avhrr_navy,lextra,ssu logical ssmi,ssmis,amsre,amsre_low,amsre_mid,amsre_hig,change logical ssmis_las,ssmis_uas,ssmis_env,ssmis_img logical sea,mixed,land,ice,snow,toss logical micrim,microwave + logical post_abig16, post_abig17 ! if true, user requested at least one abi channel + logical fix_abig16, fix_abig17 ! if true, abi_g16, abi_g17 fix files are available ! logical,dimension(nobs):: luse logical, parameter :: debugprint = .false. type(crtm_atmosphere_type),dimension(1):: atmosphere @@ -213,6 +222,23 @@ SUBROUTINE CALRAD_WCLOUD ! !***************************************************************************** + ! This code and sensorlist_local, isis_local can be modified/removed when the + ! linked CRTM version is updated with fix files abi_g16 & abi_g17 + fix_abig16 = .False. + fix_abig17 = .False. + do n=1, n_sensors + sensorlist_local(n) = sensorlist(n) + if (sensorlist(n) == 'abi_g16') then ! check if fix file is available + inquire(file='abi_g16.SpcCoeff.bin',exist=fix_abig16) + if (.not.fix_abig16) sensorlist_local(n) = 'abi_gr ' + endif + if (sensorlist(n) == 'abi_g17') then + inquire(file='abi_g17.SpcCoeff.bin',exist=fix_abig17) + if (.not.fix_abig17) sensorlist_local(n) = 'abi_gr ' + endif + enddo + + ! Mapping land surface type of NMM to CRTM !if(MODELNAME == 'NMM' .OR. MODELNAME == 'NCAR' .OR. MODELNAME == 'RAPR')then if(ivegsrc==1)then !IGBP veg type @@ -245,6 +271,16 @@ SUBROUTINE CALRAD_WCLOUD end if !end if + !10 channels, easier to set a logical + post_abig16=.false. + do n = 927, 927+9 ! 927 set in RQSTFLD.f + if (iget(n) > 0) post_abig16=.true. + enddo + post_abig17=.false. + do n = 937, 937+9 ! 937 set in RQSTFLD.f + if (iget(n) > 0) post_abig17=.true. + enddo + ! DO NOT FORGET TO ADD YOUR NEW IGET HERE (IF YOU'VE ADDED ONE) ! START SUBROUTINE CALRAD. ifactive: if (iget(327) > 0 .or. iget(328) > 0 .or. iget(329) > 0 & @@ -283,7 +319,8 @@ SUBROUTINE CALRAD_WCLOUD .or. iget(871) > 0 .or. iget(872) > 0 .or. iget(873) > 0 & .or. iget(874) > 0 .or. iget(875) > 0 .or. iget(876) > 0 & .or. iget(877) > 0 .or. iget(878) > 0 .or. iget(879) > 0 & - .or. iget(880) > 0 .or. iget(881) > 0 .or. iget(882) > 0 ) then + .or. iget(880) > 0 .or. iget(881) > 0 .or. iget(882) > 0 & + .or. post_abig16 .or. post_abig17 ) then ! specify numbers of cloud species ! Thompson==8, Ferrier==5,95, WSM6==6, Lin==2 @@ -302,7 +339,7 @@ SUBROUTINE CALRAD_WCLOUD ! Initialize ozone to zeros for WRF NMM and ARW for now if (MODELNAME == 'NMM' .OR. MODELNAME == 'NCAR' .OR. MODELNAME == 'RAPR' & - .OR. MODELNAME == 'FV3R')o3=0.0 + )o3=0.0 ! Compute solar zenith angle for GFS, ARW now computes czen in INITPOST ! if (MODELNAME == 'GFS')then jdn=iw3jdn(idat(3),idat(1),idat(2)) @@ -324,7 +361,7 @@ SUBROUTINE CALRAD_WCLOUD print*,'success in CALRAD= ',success allocate( channelinfo(n_sensors)) - error_status = crtm_init(sensorlist,channelinfo, & + error_status = crtm_init(sensorlist_local,channelinfo, & Process_ID=0,Output_Process_ID=0 ) print*, 'channelinfo after init= ',channelinfo(1)%sensor_id, & channelinfo(2)%sensor_id @@ -343,6 +380,35 @@ SUBROUTINE CALRAD_WCLOUD if(iget(872)>0)then call select_channels_L(channelinfo(1),4,(/ 1,2,3,4 /),lvls(1:4,iget(872)),iget(872)) endif + ! GOES-16 + if(post_abig16)then + nchanl=0 + do n = 927, 927+9 ! 927 set in RQSTFLD.f + if (iget(n) > 0) then + nchanl = nchanl+1 + endif + enddo + if (nchanl > 0 .and. nchanl <10) then + do n = 927, 927+9 ! 927 set in RQSTFLD.f + if (iget(n) == 0) channelinfo(19)%Process_Channel(n-927+1)=.False. ! turn off channel processing + enddo + endif + endif + ! GOES-17 + if(post_abig17)then + nchanl=0 + do n = 937, 937+9 ! 937 set in RQSTFLD.f + if (iget(n) > 0) then + nchanl = nchanl+1 + endif + enddo + if (nchanl > 0 .and. nchanl <10) then + do n = 937, 937+9 ! 927 set in RQSTFLD.f + if (iget(n) == 0) channelinfo(20)%Process_Channel(n-937+1)=.False. ! turn off channel processing + enddo + endif + endif + ! SSMI, F13-F15 (19H,19V,??H,37H,37V,85H,85V) if(iget(800)>0)then call select_channels_L(channelinfo(7),7,(/ 1,2,3,4,5,6,7 /),lvls(1:7,iget(800)),iget(800)) @@ -418,6 +484,8 @@ SUBROUTINE CALRAD_WCLOUD (isis=='imgr_insat3d' .and. iget(865)>0) .OR. & (isis=='imgr_g13' .and. iget(868)>0) .OR. & (isis=='imgr_g15' .and. iget(872)>0) .OR. & + (isis=='abi_g16' .and. post_abig16) .OR. & + (isis=='abi_g17' .and. post_abig17) .OR. & (isis=='seviri_m10' .and. iget(876)>0) )then print*,'obstype, isis= ',obstype,isis ! isis='amsua_n15' @@ -439,6 +507,7 @@ SUBROUTINE CALRAD_WCLOUD airs = obstype == 'airs' hsb = obstype == 'hsb' goes_img = obstype == 'goes_img' + abi = obstype == 'abi' seviri = obstype == 'seviri' insat3d = obstype == 'imgr_insat3d' avhrr = obstype == 'avhrr' @@ -462,7 +531,14 @@ SUBROUTINE CALRAD_WCLOUD ! check sensor list sensorindex = 0 sensor_search: do j = 1, n_sensors - if (channelinfo(j)%sensor_id == isis ) then + isis_local = isis ! allows abi_g16 & abi_g17 output using abi_gr fix files + if (isis=='abi_g16' .and. .not.fix_abig16) then + isis_local='abi_gr ' + endif + if (isis=='abi_g17' .and. .not.fix_abig17) then + isis_local='abi_gr ' + endif + if (channelinfo(j)%sensor_id == isis_local ) then sensorindex = j exit sensor_search endif @@ -477,6 +553,11 @@ SUBROUTINE CALRAD_WCLOUD ! simulate an instrument w/o a WMO ID: if(isis=='ssmis_f19')channelinfo(sensorindex)%WMO_Satellite_Id=287 if(isis=='ssmis_f20')channelinfo(sensorindex)%WMO_Satellite_Id=289 +! quiet verbose output warning messages + if(isis=='abi_g16')channelinfo(sensorindex)%WMO_Satellite_Id=270 + if(isis=='abi_g16')channelinfo(sensorindex)%WMO_Sensor_Id=617 + if(isis=='abi_g17')channelinfo(sensorindex)%WMO_Satellite_Id=271 + if(isis=='abi_g17')channelinfo(sensorindex)%WMO_Sensor_Id=617 allocate(rtsolution (channelinfo(sensorindex)%n_channels,1)) allocate(tb(im,jsta:jend,channelinfo(sensorindex)%n_channels)) @@ -874,21 +955,8 @@ SUBROUTINE CALRAD_WCLOUD atmosphere(1)%cloud(5)%effective_radius(k), atmosphere(1)%cloud(5)%water_content(k), & atmosphere(1)%cloud(6)%effective_radius(k), atmosphere(1)%cloud(6)%water_content(k) - else if(imp_physics==11)then ! GFDL -! per conv with Ruiyu, in radition, GFDL bundle their MP species to two cats - atmosphere(1)%cloud(1)%water_content(k)=max(0.,qqw(i,j,k)*dpovg) - atmosphere(1)%cloud(2)%water_content(k)=max(0.,qqi(i,j,k)*dpovg) - atmosphere(1)%cloud(3)%water_content(k)=max(0.,qqr(i,j,k)*dpovg) - atmosphere(1)%cloud(4)%water_content(k)=max(0.,qqs(i,j,k)*dpovg) - atmosphere(1)%cloud(5)%water_content(k)=max(0.,qqg(i,j,k)*dpovg) - atmosphere(1)%cloud(1)%effective_radius(k)=10. - atmosphere(1)%cloud(2)%effective_radius(k)=50. - atmosphere(1)%cloud(3)%effective_radius(k)=1000. - atmosphere(1)%cloud(4)%effective_radius(k)=250. - atmosphere(1)%cloud(5)%effective_radius(k)=1000. - - else if(imp_physics==8 .or. imp_physics==6 .or. imp_physics==2 .or. imp_physics==28 & - )then + else if(imp_physics==8 .or. imp_physics==6 .or. imp_physics==2 .or. & + imp_physics==28 .or. imp_physics==11)then atmosphere(1)%cloud(1)%water_content(k)=max(0.,qqw(i,j,k)*dpovg) atmosphere(1)%cloud(2)%water_content(k)=max(0.,qqi(i,j,k)*dpovg) atmosphere(1)%cloud(3)%water_content(k)=max(0.,qqr(i,j,k)*dpovg) @@ -1107,6 +1175,8 @@ SUBROUTINE CALRAD_WCLOUD (isis=='imgr_insat3d' .and. iget(865)>0) .OR. & (isis=='imgr_g13' .and. iget(868)>0) .OR. & (isis=='imgr_g15' .and. iget(872)>0) .OR. & + (isis=='abi_g16' .and. post_abig16) .OR. & + (isis=='abi_g17' .and. post_abig17) .OR. & (isis=='seviri_m10' .and. iget(876)>0) .OR. & (isis=='imgr_g12' .and. (iget(456)>0 .or. & iget(457)>0 .or. iget(458)>0 .or. iget(459)>0)) .or. & @@ -1130,6 +1200,12 @@ SUBROUTINE CALRAD_WCLOUD else if(isis=='imgr_g15')then sublat=0.0 sublon=-135.0 + else if(isis=='abi_g16')then ! positions should be controlled by runtime setting or fix file + sublat=0.0 + sublon=-75.2 + else if(isis=='abi_g17')then + sublat=0.0 + sublon=-137.2 else if(isis=='imgr_g11')then sublat=0.0 sublon=-135.0 @@ -1446,8 +1522,9 @@ SUBROUTINE CALRAD_WCLOUD atmosphere(1)%cloud(4)%effective_radius(k), atmosphere(1)%cloud(4)%water_content(k), & atmosphere(1)%cloud(5)%effective_radius(k), atmosphere(1)%cloud(5)%water_content(k), & atmosphere(1)%cloud(6)%effective_radius(k), atmosphere(1)%cloud(6)%water_content(k) - else if(imp_physics==8 .or. imp_physics==6 .or. imp_physics==2 .or. imp_physics==28 & - .or. imp_physics==11)then + + else if(imp_physics==8 .or. imp_physics==6 .or. imp_physics==2 .or. & + imp_physics==28 .or. imp_physics==11)then atmosphere(1)%cloud(1)%water_content(k)=max(0.,qqw(i,j,k)*dpovg) atmosphere(1)%cloud(2)%water_content(k)=max(0.,qqi(i,j,k)*dpovg) atmosphere(1)%cloud(3)%water_content(k)=max(0.,qqr(i,j,k)*dpovg) @@ -1916,6 +1993,52 @@ SUBROUTINE CALRAD_WCLOUD endif enddo end if ! end of outputting goes 15 + if (isis=='abi_g16')then ! writing goes 16 to grib + nc=0 + do ixchan=1,10 + igot=iget(926+ixchan) + ichan=ixchan + if(igot>0)then + do j=jsta,jend + do i=1,im + grid1(i,j)=tb(i,j,ichan) + enddo + enddo + id(1:25) = 0 + id(02) = 2 + id(08) = 118 + id(09) = 109 + if(grib=="grib2" )then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(igot) + datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + endif + endif + enddo ! channel loop + end if ! end of outputting goes 16 + if (isis=='abi_g17')then ! writing goes 16 to grib + nc=0 + do ixchan=1,10 + igot=iget(936+ixchan) + ichan=ixchan + if(igot>0)then + do j=jsta,jend + do i=1,im + grid1(i,j)=tb(i,j,ichan) + enddo + enddo + id(1:25) = 0 + id(02) = 2 + id(08) = 118 + id(09) = 109 + if(grib=="grib2" )then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(igot) + datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + endif + endif + enddo ! channel loop + end if ! end of outputting goes 17 end if nonnadir ! end if for computing simulated radiance with zenith angle correction @@ -1960,13 +2083,15 @@ REAL FUNCTION EFFR(pmid,t,q,qqw,qqi,qqr,f_rimef, nlice, nrain, & integer :: n,count,count1,mp_opt real :: rho, ncc, rhox real :: n0_s, n0_r, n0_g + real :: lambdar, lambdas, lambdag !------------------------------------------------------------------------------- ! GAMMA FUNCTION & RELATED VARIABLES !------------------------------------------------------------------------------- real :: gamma - real :: gamma_crg, gamma_i, gamma_s + real :: gamma_crg, gamma_s +! real :: gamma_i real :: WGAMMA, GAMMLN @@ -2054,6 +2179,26 @@ REAL FUNCTION EFFR(pmid,t,q,qqw,qqi,qqr,f_rimef, nlice, nrain, & nthom_sb = (/ 0.476221, -0.015896, 0.165977, 0.007468, -0.000141, & 0.060366, 0.000079, 0.000594, 0.0, -0.003577/) +!------------------------------------------------------------------------------- +! CONSTANTS FOR GFDL MICROPHYSICS SCHEME - which is Lin for precip clouds +!------------------------------------------------------------------------------- + + real, parameter :: gfdl_rhoi=100., gfdl_rhor=1000., gfdl_rhos=100. + real, parameter :: gfdl_rhog=400., gfdl_cnp=3.e8 + real, parameter :: gfdl_tice = 273.16 + + real, parameter :: gfdl_qmin = 1.0e-5, gfdl_ccn = 1.0e8, gfdl_beta = 1.22 + real, parameter :: gfdl_gammar = 17.837789, gfdl_gammas = 8.2850630, gfdl_gammag = 11.631769 + real, parameter :: gfdl_alphar = 0.8, gfdl_alphas = 0.25, gfdl_alphag = 0.5 + real, parameter :: gfdl_n0r=8.e6, gfdl_n0s=3.e6, gfdl_n0g=4.e6 + + real, parameter :: gfdl_rewmin = 5.0, gfdl_rewmax = 10.0 + real, parameter :: gfdl_reimin = 10.0, gfdl_reimax = 150.0 + real, parameter :: gfdl_rermin = 0.0, gfdl_rermax = 10000.0 + real, parameter :: gfdl_resmin = 0.0, gfdl_resmax = 10000.0 + real, parameter :: gfdl_regmin = 0.0, gfdl_regmax = 10000.0 + + if(mp_opt.eq.6) then !WSM6 SCHEME @@ -2069,6 +2214,10 @@ REAL FUNCTION EFFR(pmid,t,q,qqw,qqi,qqr,f_rimef, nlice, nrain, & endif + gamma_crg = 6.0 ! gamma(1.0 + beta_crg) + gamma_s = 2.981134 ! gamma(1.0 + beta_s) +! gamma_i = 2.0 ! gamma(1.0 + beta_i) + !------------------------------------------------------------------------------ ! SET DIAMETER ARRAYS TO ZERO, COMPUTE DENSITY !------------------------------------------------------------------------------ @@ -2174,7 +2323,7 @@ REAL FUNCTION EFFR(pmid,t,q,qqw,qqi,qqr,f_rimef, nlice, nrain, & END SELECT - elseif(mp_opt.eq.8 .or. mp_opt.eq.11)then + elseif(mp_opt.eq.8)then !----------------------------------- ! CLOUD DROPLET NUMBER CONCENTRATION @@ -2408,6 +2557,67 @@ REAL FUNCTION EFFR(pmid,t,q,qqw,qqi,qqr,f_rimef, nlice, nrain, & END SELECT + elseif(mp_opt.eq.11)then ! GFDL + + SELECT CASE(species) + + CASE("C") + +! cloud water (martin et al., 1994) + if (qqw > min_qc) then + effr = exp (1.0 / 3.0 * log ((3. * qqw ) / (4. * pi * gfdl_rhor * gfdl_ccn))) * 1.0e6 + effr = max (gfdl_rewmin, min (gfdl_rewmax, effr)) + effr = effr*2. ! because need diameter here, converted to radius at exit + end if + + CASE("I") + +! cloud ice (heymsfield and mcfarquhar, 1996) + if (qqi > min_qi) then + if ((t-gfdl_tice) .lt. - 50) then + effr = gfdl_beta / 9.917 * exp ((1 - 0.891) * log (1.0e3 * qqi)) * 1.0e3 + elseif ((t-gfdl_tice) .lt. - 40.) then + effr = gfdl_beta / 9.337 * exp ((1 - 0.920) * log (1.0e3 * qqi)) * 1.0e3 + elseif ((t-gfdl_tice) .lt. - 30.) then + effr = gfdl_beta / 9.208 * exp ((1 - 0.945) * log (1.0e3 * qqi)) * 1.0e3 + else + effr = gfdl_beta / 9.387 * exp ((1 - 0.969) * log (1.0e3 * qqi)) * 1.0e3 + endif + effr = max (gfdl_reimin, min (gfdl_reimax, effr)) + effr = effr*2. ! because need diameter here, converted to radius at exit + end if + + CASE("R") + + if ( qqr > min_qr ) then !rain diameter: assume gamma distribution + lambdar = exp (0.25 * log (pi * gfdl_rhor * gfdl_n0r / qqr)) + effr = 0.5*exp (log (gfdl_gammar / 6.) / gfdl_alphar) / lambdar * 1.0e6 + effr = max (gfdl_rermin, min (gfdl_rermax, effr)) + effr = effr*2. ! because need diameter here, converted to radius at exit + endif + + + CASE("S") + + if ( qqs > min_qs ) then !snow diameter: assume gamma distribution + lambdas = exp (0.25 * log (pi * gfdl_rhos * gfdl_n0s / qqs)) + effr = 0.5 * exp (log (gfdl_gammas / 6.) / gfdl_alphas) / lambdas * 1.0e6 + effr = max (gfdl_resmin, min (gfdl_resmax, effr)) + effr = effr*2. ! because need diameter here, converted to radius at exit + endif + + CASE("G") + + if ( qqg > min_qg ) then !graupel diameter: assume gamma distribution + lambdag = exp (0.25 * log (pi * gfdl_rhog * gfdl_n0g / qqg)) + effr = 0.5 * exp (log (gfdl_gammag / 6.) / gfdl_alphag) / lambdag * 1.0e6 + effr = max (gfdl_regmin, min (gfdl_regmax, effr)) + effr = effr*2. ! because need diameter here, converted to radius at exit + endif + + END SELECT + + elseif(mp_opt.eq.5.or.mp_opt.eq.85.or.mp_opt.eq.95)then SELECT CASE (species) diff --git a/comupp/src/unipost/CALRH.f b/comupp/src/unipost/CALRH.f index 913060875..d493bfc02 100644 --- a/comupp/src/unipost/CALRH.f +++ b/comupp/src/unipost/CALRH.f @@ -21,6 +21,7 @@ SUBROUTINE CALRH(P1,T1,Q1,RH) ! 98-12-16 GEOFF MANIKIN - UNDO RH COMPUTATION OVER ICE ! 00-01-04 JIM TUCCILLO - MPI VERSION ! 02-06-11 MIKE BALDWIN - WRF VERSION +! 06-03-19 Wen Meng - MODIFY TOP PRESSURE to 1 PA ! ! USAGE: CALL CALRH(P1,T1,Q1,RH) ! INPUT ARGUMENT LIST: @@ -66,7 +67,7 @@ SUBROUTINE CALRH(P1,T1,Q1,RH) DO J=JSTA,JEND DO I=1,IM IF (T1(I,J) < SPVAL) THEN - IF (ABS(P1(I,J)) > 1) THEN + IF (ABS(P1(I,J)) >= 1) THEN QC = PQ0/P1(I,J)*EXP(A2*(T1(I,J)-A3)/(T1(I,J)-A4)) ! RH(I,J) = Q1(I,J)/QC diff --git a/comupp/src/unipost/CALRH_GFS.f b/comupp/src/unipost/CALRH_GFS.f index 3e4de2e8c..992d57b44 100644 --- a/comupp/src/unipost/CALRH_GFS.f +++ b/comupp/src/unipost/CALRH_GFS.f @@ -22,6 +22,7 @@ SUBROUTINE CALRH_GFS(P1,T1,Q1,RH) ! 00-01-04 JIM TUCCILLO - MPI VERSION ! 02-06-11 MIKE BALDWIN - WRF VERSION ! 13-08-13 S. Moorthi - Threading +! 06-03-19 Wen Meng - MODIFY TOP PRESSURE to 1 PA ! ! USAGE: CALL CALRH(P1,T1,Q1,RH) ! INPUT ARGUMENT LIST: @@ -77,7 +78,8 @@ END FUNCTION FPVSNEW DO I=1,IM IF (T1(I,J) < SPVAL .AND. P1(I,J) < SPVAL.AND.Q1(I,J)/=SPVAL) THEN ! IF (ABS(P1(I,J)) > 1.0) THEN - IF (P1(I,J) > 1.0) THEN +! IF (P1(I,J) > 1.0) THEN + IF (P1(I,J) >= 1.0) THEN ES = MIN(FPVSNEW(T1(I,J)),P1(I,J)) QC = CON_EPS*ES/(P1(I,J)+CON_EPSM1*ES) diff --git a/comupp/src/unipost/CALVIS_GSD.f b/comupp/src/unipost/CALVIS_GSD.f index 09baa6edb..33ebf61c5 100644 --- a/comupp/src/unipost/CALVIS_GSD.f +++ b/comupp/src/unipost/CALVIS_GSD.f @@ -23,6 +23,7 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) ! tb -- temperature (k) ! pp--pressure (Pa) ! rhb-- relative humidity (0-100%) +! aextc55--aerosol extinction coefficient (m**-1) ! ! ! Independent of the above definitions, the scheme can use different @@ -60,6 +61,10 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) ! ! vis = -ln(epsilon)/beta [found in Kunkel (1984)] ! +! The 'aextc55' field is 3-D and is derived from the 'aod_3d' field +! by dividing by dz, the vertical thickness of that model level in 'm'. +! This can be handled as a 2-D field if needed to save resources. +! ! HISTORY ! PROGRAM HISTORY LOG: ! 99-05- Version from Eta model and from @@ -79,18 +84,21 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) ! from Roy Rasmussen ! - low-level wind shear term ! - recommended by Evan Kuchera +! 2015-17 S. Benjamin, T. Smirnova - modifications for RH-based clear-air vis +! 2017-12 R. Ahmadov, Steve Albers - addition for attenuation from aerosols +! (not related to water vapor or RH at this point) ! !------------------------------------------------------------------ ! - use vrbls3d, only: qqw, qqi, qqs, qqr, qqg, t, pmid, q, u, v, extcof55 + use vrbls3d, only: qqw, qqi, qqs, qqr, qqg, t, pmid, q, u, v, extcof55, aextc55 use params_mod, only: h1, d608, rd - use ctlblk_mod, only: jm, im, jsta_2l, jend_2u, jsta, jend, lm, & - modelname + use ctlblk_mod, only: jm, im, jsta_2l, jend_2u, lm, modelname implicit none integer :: j, i, k, ll + integer :: method real :: tx, pol, esx, es, e REAL VIS(IM,jsta_2l:jend_2u) ,RHB(IM,jsta_2l:jend_2u,LM), CZEN(IM,jsta_2l:jend_2u) @@ -116,6 +124,13 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) real vis_night, zen_fac !------------------------------------------------------------------ +! Method used for clear-air visibility with extension for aerosols + method = 3 +! RH-only method (1), +! Aerosol method (2), +! Smoke added to RH method for clear air (3) +! 3 - option to add reducted visibility from smoke-based aerosols. + CELKEL = 273.15 TICE = CELKEL-10. COEFLC = 144.7 @@ -139,7 +154,7 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) vis3km_cnt = 0 vis5km_cnt = 0 -! - values from Roy Rasmussen - Dec 2003 +! - snow-based vis attenuation - coefficient values from Roy Rasmussen - Dec 2003 ! COEFFP_dry = 17.7 ! COEFFP_wet = 4.18 ! - modified number - Stan B. - Dec 2007 @@ -147,9 +162,10 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) COEFFP_dry = 10.0 COEFFP_wet = 6.0 - ! COEFFg = 8.0 ! - values from Roy Rasmussen - Dec 2003 +! Rasmussen et al. 2003, J. App. Meteor. +! Snow Nowcasting Using a Real-Time Correlation of Radar Reflectivity with Snow Gauge Accumulation COEFFg = 4.0 EXPONLC = 0.8800 @@ -161,23 +177,23 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) EXPONFg = 0.75 ! CONST1=-LOG(.02) - CONST1= 3.912 + if(MODELNAME == 'RAPR') then + CONST1= 3.000 + else + CONST1= 3.912 + endif ! visibility with respect to RH is ! calculated from optical depth linearly ! related to RH as follows: -! vis = 60 exp (-3 * (RH-15)/80) -! changed on 8/23/00 ! vis = 60 exp (-2.5 * (RH-15)/80) ! changed on 3/14/01 -! Previous algorithm gave vis of 3km, not 5 km -! at 95% RH, now fixed. Stan B. ! coefficient of 3 gives visibility of 5 km ! at 95% RH -! Total visibility is minimum of vis-rh +! Total visibility is minimum of vis-rh (developed by Benjamin, Brown, Smirnova) ! and vis-hydrometeors from Stoelinga/Warner RHOICE=917. @@ -186,28 +202,15 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) vis_min = 1.e6 visrh_min = 1.e6 - DO J=jsta,jend + DO J=jsta_2l,jend_2u DO I=1,IM -! - take max hydrometeor mixing ratios in lowest 25 mb (lowest 5 levels) -! - change - 3/8/01 - Stan B. - based on apparent underforecasting -! of visibility (vis too low from 20km RUC) -! - take max hydrometeor mixing ratios in lowest 15 mb (lowest 4 levels) +! - take max hydrometeor mixing ratios in lowest 3 levels (lowest 13 hPa, 100m with RAP/HRRR qrain = 0. qsnow = 0. qgraupel = 0. qclw = 0. qclice = 0. -!???? - Stan B. - questions as of 1/1/04 -!???? - use mean of these values over -! lowest 2 levels - -! do k = 1,4 -! QRAIN = qrain+QR(I,J,k) -! QSNOW = qsnow+max(0.,QS(I,J,k) ) -! Qgraupel= qgraupel+Qg(I,J,k) -! end do - do k = 1,3 LL=LM-k+1 QCLW = max(qclw, QQW(I,J,ll) ) @@ -230,24 +233,12 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) enddo -! qrain = max(0., qrain / 4.) -! qsnow = max(0., qsnow / 4.) -! qgraupel = max(0., qgraupel / 4.) -! qclw = max(0., qclw / 2.) -! qclice = max(0., qclice / 2.) - ! - take max RH of levels 1 and 2 near the sfc rhmax = max (rhb(i,j,lm),rhb(i,j,lm-1)) -! rhmax = max (rhb(i,j,1),rhb(i,j,2)) -! - vary RH coefficient between 75% up to max at 95% -! to give 5.4 km visibility at 95%. -! qrh = max(0.0,min(1.0,(rhb(i,j)/100.-0.15)/0.80)) qrh = max(0.0,min(0.8,(rhmax/100.-0.15))) -!15aug11 visrh = 80. * exp(-2.5*qrh) -! visrh = 60. * exp(-2.5*qrh) -!tgs 23 feb 2017 - incrrease of base value to 90 km to reduce effect -! from RH visibility. +!tgs 23 feb 2017 - increase of base value to 90 km to reduce attenuation +! from RH for clear-air visibility. (i.e., increase clear-air vis overall) IF(MODELNAME == 'RAPR') then visrh = 90. * exp(-2.5*qrh) else @@ -259,13 +250,10 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) ! (using Evan Kuchera's paper as a guideline) ! -- calculate term for shear between levels 1 and 4 -! (about 15 mb) +! (about 25 hPa for HRRR/RAP) shear = sqrt( (u(i,j,lm-3)-u(i,j,lm))**2 & +(v(i,j,lm-3)-v(i,j,lm))**2 ) -! shear = sqrt( (u(i,j,4)-u(i,j,1))**2 -! 1 +(v(i,j,4)-v(i,j,1))**2 ) -! shear_fac = min(1.,max(0.,(shear-5.)/3.) ) shear_fac = min(1.,max(0.,(shear-4.)/2.) ) if (visrh.lt.10.) visrh = visrh + (10.-visrh)* & shear_fac @@ -282,15 +270,12 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) shear8_cnt_lowvis = shear8_cnt_lowvis +1 if (visrh.lt.10.) visrh10_cnt = visrh10_cnt+1 -!new if (czen(i,j).lt.0.) night_cnt = night_cnt + 1 if (czen(i,j).lt.0.1) lowsun_cnt = lowsun_cnt + 1 TV=T(I,J,lm)*(H1+D608*Q(I,J,lm)) -! tv = t(i,j,1)*(1. + 0.6078*q(i,j,1)) RHOAIR=PMID(I,J,lm)/(RD*TV) -! RHOAIR=PMID(I,J,1)/(RD*TV) VOVERMD=(1.+Q(I,J,lm))/RHOAIR+(QCLW+QRAIN)/RHOWAT+ & ! VOVERMD=(1.+Q(I,J,1))/RHOAIR+(QCLW+QRAIN)/RHOWAT+ @@ -302,25 +287,29 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) CONCFg=Qgraupel/VOVERMD*1000. temp_fac = min(1.,max((t(i,j,lm)-271.15),0.) ) -! temp_fac = min(1.,max((t(i,j,1)-271.15),0.) ) + coef_snow = coeffp_dry*(1.-temp_fac) & + coeffp_wet* temp_fac if (t(i,j,lm).lt. 270. .and. temp_fac.eq.1.) & -! if (t(i,j,1).lt. 270. .and. temp_fac.eq.1.) write (6,*) 'Problem w/ temp_fac - calvis' -! BETAV=COEFFC*CONCFC**EXPONFC+COEFFP*CONCFP**EXPONFP - +! Key calculation of attenuation from each hydrometeor type (cloud, snow, graupel, rain, ice) BETAV=COEFFC*CONCFC**EXPONFC & + coef_SNOW*CONCFP**EXPONFP & - + COEFLC*CONCLC**EXPONLC+COEFLP*CONCLP**EXPONLP & + + COEFLC*CONCLC**EXPONLC + COEFLP*CONCLP**EXPONLP & + coeffg*concfg**exponfg +1.E-10 +! Addition of attenuation from aerosols if option selected + if(method .eq. 2 .or. method .eq. 3)then ! aerosol method + BETAV = BETAV + aextc55(i,j,lm)*1000. + endif + if (i.eq.290 .and. j.eq.112) then write (6,*) 'BETAV, extcof55 =',BETAV,extcof55(i,j,lm) end if +! Calculation of visibility based on hydrometeor and aerosols. (RH effect not yet included.) VIS(I,J)=MIN(90.,CONST1/BETAV+extcof55(i,j,lm)) ! max of 90km if (vis(i,j).lt.vis_min) vis_min = vis(i,j) @@ -344,12 +333,14 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) write (6,*) 'visrh, vis =',visrh, vis(i,j) end if - vis(i,j) = min(vis(i,j),visrh) + if(method .eq. 1 .or. method .eq. 3)then ! RH method (if lower vis) + vis(i,j) = min(vis(i,j),visrh) + endif if (vis(i,j).lt.1.) vis1km_cnt = vis1km_cnt + 1 if (vis(i,j).lt.3.) vis3km_cnt = vis3km_cnt + 1 if (vis(i,j).lt.5.) vis5km_cnt = vis5km_cnt + 1 -! convert to [m] +! convert vis from km to [m] vis(i,j) = vis(i,j) * 1000. ENDDO @@ -374,7 +365,7 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) ! write (6,*)'No. of grid pts with vis < 3 km', & ! vis3km_cnt ! write (6,*)'No. of grid pts with vis < 5 km', & -! vis5km_cnt +! vis5km_cnt ! write (6,*) ! write (6,*)'Min vis-hydrometeor, vis-RH', vis_min, visrh_min ! diff --git a/comupp/src/unipost/CALVOR.f b/comupp/src/unipost/CALVOR.f index 1555d5a4e..6a80bca05 100644 --- a/comupp/src/unipost/CALVOR.f +++ b/comupp/src/unipost/CALVOR.f @@ -323,8 +323,7 @@ SUBROUTINE CALVOR(UWND,VWND,ABSV) R2DY = 1./(2.*DY(I,J)) DVDX = (VWND(I+1,J)-VWND(I-1,J))*R2DX DUDY = (UWND(I,J+1)-UWND(I,J-1))*R2DY - UAVG = 0.25*(UWND(I+1,J)+UWND(I-1,J) & - & + UWND(I,J+1)+UWND(I,J-1)) + UAVG = UWND(I,J) ! is there a (f+tan(phi)/erad)*u term? IF(MODELNAME == 'RAPR') then ABSV(I,J) = DVDX - DUDY + F(I,J) ! for run RAP over north pole diff --git a/comupp/src/unipost/CLDRAD.f b/comupp/src/unipost/CLDRAD.f index 1aacc0a27..541927300 100644 --- a/comupp/src/unipost/CLDRAD.f +++ b/comupp/src/unipost/CLDRAD.f @@ -66,7 +66,7 @@ SUBROUTINE CLDRAD ! 13-12-23 LU/Wang - READ AEROSOL OPTICAL PROPERTIES LUTS to compute dust aod, ! non-dust aod, and use geos5 gocart LUTS ! 15-??-?? S. Moorthi - threading, optimization, local dimension -! +! 19-07-24 Li(Kate) Zhang Merge and update ARAH Lu's work from NGAC into FV3-Chem ! ! USAGE: CALL CLDRAD ! INPUT ARGUMENT LIST: @@ -90,8 +90,10 @@ SUBROUTINE CLDRAD !$$$ ! use vrbls4d, only: DUST,SUSO, SALT, SOOT, WASO - use vrbls3d, only: QQW, QQR, T, ZINT, CFR, CFR_RAW, QQI, QQS, Q, EXT, & - ZMID, PMID, PINT, DUEM, DUSD, DUDP, DUWT + use vrbls3d, only: QQW, QQR, T, ZINT, CFR, QQI, QQS, Q, EXT, ZMID,PMID,& + PINT, DUEM, DUSD, DUDP, DUWT, DUSV, SSEM, SSSD,SSDP,& + SSWT, SSSV, BCEM, BCSD, BCDP, BCWT, BCSV, OCEM,OCSD,& + OCDP, OCWT, OCSV, SCA, ASY,CFR_RAW use vrbls2d, only: CLDEFI, CFRACL, AVGCFRACL, CFRACM, AVGCFRACM, CFRACH,& AVGCFRACH, AVGTCDC, NCFRST, ACFRST, NCFRCV, ACFRCV, & HBOT, HBOTD, HBOTS, HTOP, HTOPD, HTOPS, FIS, PBLH, & @@ -105,7 +107,9 @@ SUBROUTINE CLDRAD AIRDIFFSWIN, DUSMASS, DUSMASS25, DUCMASS, DUCMASS25, & ALWINC, ALWTOAC, SWDDNI, SWDDIF, SWDNBC, SWDDNIC, & SWDDIFC, SWUPBC, LWDNBC, LWUPBC, SWUPT, & - TAOD5502D, AERSSA2D, AERASY2D + TAOD5502D, AERSSA2D, AERASY2D, MEAN_FRP, LWP, IWP, & + TAOD5502D, AERSSA2D, AERASY2D, & + DUSTCB,SSCB,BCCB,OCCB,SULFCB,DUSTPM,SSPM 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, & @@ -113,6 +117,7 @@ SUBROUTINE CLDRAD use ctlblk_mod, only: JSTA, JEND, SPVAL, MODELNAME, GRIB, CFLD,DATAPD, & FLD_INFO, AVRAIN, THEAT, IFHR, IFMIN, AVCNVC, & TCLOD, ARDSW, TRDSW, ARDLW, NBIN_DU, TRDLW, IM, & + NBIN_SS, NBIN_OC, NBIN_BC, NBIN_SU, & JM, LM, gocart_on, me use rqstfld_mod, only: IGET, ID, LVLS, IAVBLFLD use gridspec_mod, only: dyval, gridtype @@ -172,6 +177,27 @@ SUBROUTINE CLDRAD integer, parameter :: NOAER = 20 ! unit for LUTs file integer, parameter :: nAero=KCM2 ! num of aer species in LUTs CHARACTER :: AerosolName(KCM2)*4, AerosolName_rd*4, aerosol_file*30 + CHARACTER :: AerName_rd*4, AerOpt*3 + +! - aerosol optical properties: mass extinction efficiency + REAL, ALLOCATABLE :: extrhd_DU(:,:,:), extrhd_SS(:,:,:), & + & extrhd_SU(:,:,:), extrhd_BC(:,:,:), & + & extrhd_OC(:,:,:) + +! - aerosol optical properties: mass scattering efficienc + REAL, ALLOCATABLE :: scarhd_DU(:,:,:), scarhd_SS(:,:,:), & + & scarhd_SU(:,:,:), scarhd_BC(:,:,:), & + & scarhd_OC(:,:,:) + +! - aerosol optical properties: asymmetry factor + REAL, ALLOCATABLE :: asyrhd_DU(:,:,:), asyrhd_SS(:,:,:), & + & asyrhd_SU(:,:,:), asyrhd_BC(:,:,:), & + & asyrhd_OC(:,:,:) + +! - aerosol optical properties: single scatter albedo + REAL, ALLOCATABLE :: ssarhd_DU(:,:,:), ssarhd_SS(:,:,:), & + & ssarhd_SU(:,:,:), ssarhd_BC(:,:,:), & + & ssarhd_OC(:,:,:) ! --- aerosol optical properties mapped onto specified spectral bands ! - relative humidity independent aerosol optical properties: du @@ -184,16 +210,23 @@ SUBROUTINE CLDRAD ! REAL, allocatable :: RH3D(:,:,:) ! RELATIVE HUMIDITY real, allocatable:: rdrh(:,:,:) integer, allocatable :: ihh(:,:,:) - REAL :: rh3d, DRH0, DRH1, EXT01, EXT02 + REAL :: rh3d, DRH0, DRH1, EXT01, EXT02,SCA01,ASY01 INTEGER :: IH1, IH2 - -! REAL :: rh3d, DRH0, DRH1, EXT01, EXT02, RDRH(IM,jsta:jend,LM) -! INTEGER :: IH1, IH2, IHH(IM,jsta:jend,LM) -! - INTEGER :: IOS, INDX, ISSAM, ISSCM, ISUSO, IWASO, ISOOT + INTEGER :: IOS, INDX, ISSAM, ISSCM, ISUSO, IWASO, ISOOT, NBIN REAL :: CCDRY, CCWET, SSAM, SSCM REAL,dimension(im,jsta:jend) :: AOD_DU, AOD_SS, AOD_SU, AOD_OC, AOD_BC, AOD -! + REAL,dimension(im,jsta:jend) :: SCA_DU, SCA_SS, SCA_SU, SCA_OC,SCA_BC, SCA2D + REAL,dimension(im,jsta:jend) :: ASY_DU, ASY_SS, ASY_SU, ASY_OC, ASY_BC,ASY2D + REAL,dimension(im,jsta:jend) :: ANGST, AOD_440, AOD_860 ! FORANGSTROM EXPONENT + REAL :: ANG1, ANG2 + INTEGER :: INDX_EXT(nAero), INDX_SCA(nAero) + LOGICAL :: LAEROPT, LEXT, LSCA, LASY + LOGICAL :: LAERSMASS + REAL, allocatable :: fPM25_DU(:),fPM25_SS(:) + REAL, allocatable, dimension(:,:) :: RHOsfc, smass_du_cr,smass_du_fn, & + & smass_ss_cr, smass_ss_fn, smass_oc,smass_bc, & + & smass_su, smass_cr, smass_fn + real :: rPM, dmass real (kind=kind_phys), dimension(KRHLEV) :: rhlev data rhlev (:)/ .0, .05, .10, .15, .20, .25, .30, .35, & & .40, .45, .50, .55, .60, .65, .70, .75, & @@ -201,9 +234,10 @@ SUBROUTINE CLDRAD & .88, .89, .90, .91, .92, .93, .94, .95, & & .96, .97, .98, .99/ ! - data aerosol_file /"AEROSOL_LUTS.dat"/ - data AerosolName /'WASO', 'SOOT', 'SUSO', 'SSAM', 'SSCM'/ - + data AerosolName /'DUST', 'SALT', 'SUSO', 'SOOT', 'WASO'/ +! INDEX FOR TOTAL AND SPECIATED AEROSOLS (DU, SS, SU, OC, BC) + data INDX_EXT / 610, 611, 612, 613, 614 / + data INDX_SCA / 651, 652, 653, 654, 655 / ! ! !************************************************************************* @@ -287,6 +321,8 @@ SUBROUTINE CLDRAD ! ! CONVECTIVE AVAILABLE POTENTIAL ENERGY. IF ((IGET(032) > 0))THEN +! dong add missing value for cape + GRID1 = spval IF ( (LVLS(1,IGET(032)).GT.0) )THEN ITYPE = 1 DPBND = 10.E2 @@ -297,7 +333,7 @@ SUBROUTINE CLDRAD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = EGRID1(I,J) + IF(FIS(I,J) < SPVAL) GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) @@ -320,13 +356,15 @@ SUBROUTINE CLDRAD ! ! CONVECTIVE INHIBITION. IF ((IGET(107) > 0))THEN +! dong add missing value for cin + GRID1 = spval IF ( (LVLS(1,IGET(107)) > 0) )THEN IF ((IGET(032) > 0))THEN IF ( (LVLS(1,IGET(032)) > 0) )THEN !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = - EGRID2(I,J) + IF(FIS(I,J) < SPVAL) GRID1(I,J) = - EGRID2(I,J) ENDDO ENDDO END IF @@ -340,7 +378,7 @@ SUBROUTINE CLDRAD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = - EGRID2(I,J) + IF(FIS(I,J) < SPVAL) GRID1(I,J) = - EGRID2(I,J) ENDDO ENDDO END IF @@ -348,7 +386,7 @@ SUBROUTINE CLDRAD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = - GRID1(I,J) + IF(FIS(I,J) < SPVAL) GRID1(I,J) = - GRID1(I,J) ENDDO ENDDO if(grib == "grib1" )then @@ -372,9 +410,16 @@ SUBROUTINE CLDRAD ! ! TOTAL COLUMN PRECIPITABLE WATER (SPECIFIC HUMIDITY). IF (IGET(080) > 0) THEN +! dong + GRID1 = spval CALL CALPW(GRID1(1,jsta),1) ID(1:25) = 0 - CALL BOUND(GRID1,D00,H99999) + DO J=JSTA,JEND + DO I=1,IM + IF(FIS(I,J) >= SPVAL) GRID1(I,J)=spval + END DO + END DO + CALL BOUND(GRID1,D00,H99999) if(grib == "grib1" )then CALL GRIBIT(IGET(080),LVLS(1,IGET(080)),GRID1,IM,JM) else if(grib == "grib2" )then @@ -390,11 +435,62 @@ SUBROUTINE CLDRAD endif ENDIF ! +! E. James - 8 Dec 2017 +! TOTAL COLUMN AOD (TAOD553D FROM HRRR-SMOKE) +! + IF (IGET(735) > 0) THEN + CALL CALPW(GRID1(1,jsta),19) + ID(1:25) = 0 + CALL BOUND(GRID1,D00,H99999) + if(grib == "grib1" )then + CALL GRIBIT(IGET(735),LVLS(1,IGET(735)),GRID1,IM,JM) + else if(grib == "grib2" )then + cfld = cfld + 1 + fld_info(cfld)%ifld = IAVBLFLD(IGET(735)) +!$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) = GRID1(i,jj) + enddo + enddo + endif + ENDIF +! +! E. James - 8 Dec 2017 +! TOTAL COLUMN FIRE SMOKE (tracer_1a FROM HRRR-SMOKE) +! + IF (IGET(736) > 0) THEN + CALL CALPW(GRID1(1,jsta),18) + ID(1:25) = 0 + CALL BOUND(GRID1,D00,H99999) + if(grib == "grib1" )then + CALL GRIBIT(IGET(736),LVLS(1,IGET(736)),GRID1,IM,JM) + else if(grib == "grib2" )then + cfld = cfld + 1 + fld_info(cfld)%ifld = IAVBLFLD(IGET(736)) +!$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) = GRID1(i,jj) + enddo + enddo + endif + ENDIF +! ! TOTAL COLUMN CLOUD WATER - IF (IGET(200) > 0 .or. IGET(575) > 0) THEN + IF (IGET(200) > 0 .or. IGET(575) > 0) THEN + IF (MODELNAME == 'RAPR') THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J) = LWP(I,J)/1000.0 ! use WRF-diagnosed value + ENDDO + ENDDO + ELSE CALL CALPW(GRID1(1,jsta),2) IF(MODELNAME == 'GFS')then -! GFS combines cloud water and cloud ice, hoping to seperate them next implementation +! GFS combines cloud water and cloud ice, hoping to seperate them next implementation CALL CALPW(GRID2(1,jsta),3) !$omp parallel do private(i,j) DO J=JSTA,JEND @@ -402,7 +498,8 @@ SUBROUTINE CLDRAD GRID1(I,J) = GRID1(I,J) + GRID2(I,J) ENDDO ENDDO - END IF + END IF ! GFS + END IF ! RAPR ID(1:25) = 0 ID(02) = 129 !--- Parameter Table 129, PDS Octet 4 = 129) @@ -440,7 +537,15 @@ SUBROUTINE CLDRAD ! ! TOTAL COLUMN CLOUD ICE IF (IGET(201) > 0) THEN + IF (MODELNAME == 'RAPR') THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J) = IWP(I,J)/1000.0 ! use WRF-diagnosed value + ENDDO + ENDDO + ELSE CALL CALPW(GRID1(1,jsta),3) + END IF ID(1:25) = 0 ID(02) = 129 !--- Parameter Table 129, PDS Octet 4 = 129) CALL BOUND(GRID1,D00,H99999) @@ -1170,6 +1275,7 @@ SUBROUTINE CLDRAD IF ((IGET(161) > 0) .OR. (IGET(260) > 0)) THEN ! GRID1=SPVAL IF(MODELNAME == 'GFS')THEN + IF (IGET(161) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM @@ -1178,6 +1284,7 @@ SUBROUTINE CLDRAD TCLD(i,j) = SPVAL ENDDO ENDDO + ENDIF ELSE IF(MODELNAME .EQ. 'NCAR' .OR. MODELNAME == 'RAPR')THEN DO J=JSTA,JEND DO I=1,IM @@ -1189,7 +1296,7 @@ SUBROUTINE CLDRAD ENDDO ENDDO - ELSE IF (MODELNAME.EQ.'NMM'.OR.MODELNAME.EQ.'RSM')THEN + ELSE IF (MODELNAME.EQ.'NMM'.OR.MODELNAME.EQ.'FV3R')THEN DO J=JSTA,JEND DO I=1,IM ! EGRID1(I,J)=AMAX1(CFRACL(I,J), @@ -1406,7 +1513,7 @@ SUBROUTINE CLDRAD IF((IGET(148).GT.0) .OR. (IGET(149).GT.0) .OR. & (IGET(168).GT.0) .OR. (IGET(178).GT.0) .OR. & (IGET(179).GT.0) .OR. (IGET(194).GT.0) .OR. & - (IGET(408).GT.0) .OR. (IGET(787).GT.0) .OR. & + (IGET(408).GT.0) .OR. (IGET(798).GT.0) .OR. & (IGET(409).GT.0) .OR. (IGET(406).GT.0) .OR. & (IGET(195).GT.0) .OR. (IGET(260).GT.0) .OR. & (IGET(275).GT.0)) THEN @@ -1571,18 +1678,30 @@ SUBROUTINE CLDRAD DO J=JSTA,JEND DO I=1,IM IBOT=IBOTT(I,J) !-- Cloud base ("bottoms") - IF (IBOT>0 .AND. IBOT<=NINT(LMH(I,J))) THEN - CLDP(I,J) = PMID(I,J,IBOT) - CLDZ(I,J) = ZMID(I,J,IBOT) + IF(MODELNAME == 'RAPR') then + IF (IBOT .LE. 0) THEN + CLDP(I,J) = SPVAL + CLDZ(I,J) = SPVAL + ELSE IF (IBOT .LE. NINT(LMH(I,J))) THEN + CLDP(I,J) = PMID(I,J,IBOT) + IF (IBOT .EQ. LM) THEN + CLDZ(I,J) = ZINT(I,J,LM) + ELSE + CLDZ(I,J) = HTM(I,J,IBOT+1)*T(I,J,IBOT+1) & + *(Q(I,J,IBOT+1)*D608+H1)*ROG* & + (LOG(PINT(I,J,IBOT+1))-LOG(CLDP(I,J)))& + +ZINT(I,J,IBOT+1) + ENDIF !--- End IF (IBOT .EQ. LM) ... + ENDIF !--- End IF (IBOT .LE. 0) ... ELSE - IF(MODELNAME == 'RAPR') then - CLDP(I,J) = SPVAL - CLDZ(I,J) = SPVAL - ELSE - CLDP(I,J) = -50000. - CLDZ(I,J) = -5000. - ENDIF - ENDIF !--- End IF (IBOT .LE. 0) ... + IF (IBOT>0 .AND. IBOT<=NINT(LMH(I,J))) THEN + CLDP(I,J) = PMID(I,J,IBOT) + CLDZ(I,J) = ZMID(I,J,IBOT) + ELSE + CLDP(I,J) = -50000. + CLDZ(I,J) = -5000. + ENDIF !--- End IF (IBOT .LE. 0) ... + ENDIF ENDDO !--- End DO I loop ENDDO !--- End DO J loop ! CLOUD BOTTOM PRESSURE @@ -1625,7 +1744,7 @@ SUBROUTINE CLDRAD ! "GSD CLOUD BOTTOM HEIGHT". An alternative (experimental) ! GSD cloud ceiling algorithm is offered further below. - IF (IGET(408).GT.0 .OR. IGET(787).GT.0) THEN + IF (IGET(408).GT.0 .OR. IGET(798).GT.0) THEN !- imported from RUC post ! -- constants for effect of snow on ceiling ! Also found in calvis.f @@ -1888,7 +2007,7 @@ SUBROUTINE CLDRAD endif ENDIF ! GSD CLOUD BOTTOM PRESSURE - IF (IGET(787).GT.0) THEN + IF (IGET(798).GT.0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM @@ -1897,10 +2016,10 @@ SUBROUTINE CLDRAD ENDDO if(grib=="grib1" )then ID(1:25)=0 - CALL GRIBIT(IGET(787),LVLS(1,IGET(787)),GRID1,IM,JM) + CALL GRIBIT(IGET(798),LVLS(1,IGET(798)),GRID1,IM,JM) else if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(787)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(798)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF @@ -3559,6 +3678,8 @@ SUBROUTINE CLDRAD ! ! CURRENT INCOMING LW RADIATION AT THE SURFACE. IF (IGET(157).GT.0) THEN +! dong add missing value to DLWRF + GRID1 = spval DO J=JSTA,JEND DO I=1,IM IF(MODELNAME.eq.'RSM' .OR. MODELNAME == 'RAPR') THEN !add by Binbin: RSM has direct RLWIN output @@ -3571,7 +3692,7 @@ SUBROUTINE CLDRAD ELSE FACTRL=0.0 ENDIF - GRID1(I,J)=RLWIN(I,J)*FACTRL + IF(RLWIN(I,J) < spval) GRID1(I,J)=RLWIN(I,J)*FACTRL ENDIF ENDDO ENDDO @@ -3685,6 +3806,27 @@ SUBROUTINE CLDRAD endif ENDIF +! Instantaneous MEAN_FRP + IF (IGET(740).GT.0) THEN + print *,"GETTING INTO MEAN_FRP PART" + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J) = MEAN_FRP(I,J) + ENDDO + ENDDO + if(grib=='grib1') then + ID(1:25) = 0 + ID(02)= 2 + CALL GRIBIT(IGET(740),LVLS(1,IGET(740)), & + GRID1,IM,JM) + elseif(grib=='grib2') then + print *,"GETTING INTO MEAN_FRP GRIB2 PART" + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(740)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + ENDIF + ! CURRENT (instantaneous) INCOMING CLEARSKY SW RADIATION AT THE SURFACE. IF (IGET(262).GT.0) THEN !$omp parallel do private(i,j) @@ -3748,7 +3890,7 @@ SUBROUTINE CLDRAD ENDIF ! Instantaneous clear-sky SWDDNI - IF (IGET(785).GT.0) THEN + IF (IGET(796).GT.0) THEN DO J=JSTA,JEND DO I=1,IM GRID1(I,J) = SWDDNIC(I,J) @@ -3757,11 +3899,11 @@ SUBROUTINE CLDRAD if(grib=='grib1') then ID(1:25) = 0 ID(02)= 130 - CALL GRIBIT(IGET(785),LVLS(1,IGET(785)), & + CALL GRIBIT(IGET(796),LVLS(1,IGET(796)), & GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(785)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(796)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF @@ -3787,7 +3929,7 @@ SUBROUTINE CLDRAD ENDIF ! Instantaneous clear-sky SWDDIF - IF (IGET(786).GT.0) THEN + IF (IGET(797).GT.0) THEN DO J=JSTA,JEND DO I=1,IM GRID1(I,J) = SWDDIFC(I,J) @@ -3796,11 +3938,11 @@ SUBROUTINE CLDRAD if(grib=='grib1') then ID(1:25) = 0 ID(02)= 130 - CALL GRIBIT(IGET(786),LVLS(1,IGET(786)), & + CALL GRIBIT(IGET(797),LVLS(1,IGET(797)), & GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(786)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(797)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF @@ -4332,45 +4474,168 @@ SUBROUTINE CLDRAD !! CALPW(dust mixing ratio in kg/kg * Qext [aerosol extinction efficiency !! in m2/g] * 1000. [convert m2/g to m2/kg]) => AOD (no unit) !! -!! The sub-micron dust bin contains 4 sub-bins with fixed partition (FD) - - IF ( IGET(609).GT.0 .OR. IGET(610).GT.0 .OR. IGET(611).GT.0 & - & .OR. IGET(612).GT.0 .OR. IGET(613).GT.0 .OR. IGET(614).GT.0 & - & .OR. IGET(623).GT.0 .OR. IGET(624).GT.0 .OR. IGET(625).GT.0 & - & .OR. IGET(626).GT.0 .or. IGET(627).GT.0 .OR. IGET(628).GT.0 ) THEN -!!! READ AEROSOL LUTS - open(unit=NOAER, file=aerosol_file, status='OLD', iostat=ios) - IF (IOS .GT. 0) THEN - print *, ' ERROR! Non-zero iostat for reading LUTS ' - stop - ENDIF +!! DETERMINE WHETHER TO COMPUTE AEROSOL OPTICAL PROPERTIES + LAEROPT = .FALSE. + DO I = 609, 614 ! TOTAL AND SPECIATED AOD AT 550NM + IF ( IGET(I).GT.0 ) LAEROPT = .TRUE. + ENDDO + DO I = 623, 628 ! AOD AT MULTI-CHANNELS + IF ( IGET(I).GT.0 ) LAEROPT = .TRUE. + ENDDO + DO I = 648, 656 ! (SSA, ASY AT 340),(SCA AT 550), ANGSTROM + IF ( IGET(I).GT.0 ) LAEROPT = .TRUE. + ENDDO - read(NOAER,'(2x,a4)') AerosolName_rd - print *, 'AerosolName = ', AerosolName_rd +!! DETERMINE WHETHER TO COMPUTE INSTANT SURFACE MASS CONC + LAERSMASS = .FALSE. + DO I = 690, 698 ! TOTAL AND SPECIATED AEROSOL + IF ( IGET(I).GT.0 ) LAERSMASS = .TRUE. + ENDDO - do ib = 1,NBDSW - read(NOAER,'(8f10.5)') (extrhi(ii, ib), ii=1, KCM1) - enddo + IF ( LAEROPT ) THEN + PRINT *, 'COMPUTE AEROSOL OPTICAL PROPERTIES' + +!!! ALLOCATE AEROSOL OPTICAL PROPERTIES + ALLOCATE ( extrhd_DU(KRHLEV,nbin_du,NBDSW)) + ALLOCATE ( extrhd_SS(KRHLEV,nbin_ss,NBDSW)) + ALLOCATE ( extrhd_SU(KRHLEV,nbin_su,NBDSW)) + ALLOCATE ( extrhd_BC(KRHLEV,nbin_bc,NBDSW)) + ALLOCATE ( extrhd_OC(KRHLEV,nbin_oc,NBDSW)) + + ALLOCATE ( scarhd_DU(KRHLEV,nbin_du,NBDSW)) + ALLOCATE ( scarhd_SS(KRHLEV,nbin_ss,NBDSW)) + ALLOCATE ( scarhd_SU(KRHLEV,nbin_su,NBDSW)) + ALLOCATE ( scarhd_BC(KRHLEV,nbin_bc,NBDSW)) + ALLOCATE ( scarhd_OC(KRHLEV,nbin_oc,NBDSW)) + + ALLOCATE ( asyrhd_DU(KRHLEV,nbin_du,NBDSW)) + ALLOCATE ( asyrhd_SS(KRHLEV,nbin_ss,NBDSW)) + ALLOCATE ( asyrhd_SU(KRHLEV,nbin_su,NBDSW)) + ALLOCATE ( asyrhd_BC(KRHLEV,nbin_bc,NBDSW)) + ALLOCATE ( asyrhd_OC(KRHLEV,nbin_oc,NBDSW)) + + ALLOCATE ( ssarhd_DU(KRHLEV,nbin_du,NBDSW)) + ALLOCATE ( ssarhd_SS(KRHLEV,nbin_ss,NBDSW)) + ALLOCATE ( ssarhd_SU(KRHLEV,nbin_su,NBDSW)) + ALLOCATE ( ssarhd_BC(KRHLEV,nbin_bc,NBDSW)) + ALLOCATE ( ssarhd_OC(KRHLEV,nbin_oc,NBDSW)) + PRINT *, 'aft AEROSOL allocate, nbin_du=',nbin_du, & + 'nbin_ss=',nbin_ss,'nbin_su=',nbin_su,'nbin_bc=', & + 'nbin_oc=',nbin_oc,'nAero=',nAero - DO i = 1, KCM2 - read(NOAER,'(2x,a4)') AerosolName_rd - print *, 'AerosolName = ', AerosolName_rd - IF (AerosolName_rd .ne. AerosolName(i)) THEN - print *, ' ERROR! incorrect aerosol species ', AerosolName_rd +!!! READ AEROSOL LUTS + DO i = 1, nAero + CLOSE(UNIT=NOAER) + aerosol_file='optics_luts_'//AerosolName(i)//'.dat' + open(unit=NOAER, file=aerosol_file, status='OLD', iostat=ios) + IF (IOS .GT. 0) THEN + print *,' ERROR! Non-zero iostat for rd_LUTS ', aerosol_file stop ENDIF - do ib = 1, NBDSW - read(NOAER,*) (extrhd(ii,i,ib), ii=1, KRHLEV) - enddo + print *,'i=',i,'read aerosol_file=',trim(aerosol_file),'ios=',ios +! + IF (AerosolName(i) .EQ. 'DUST') nbin = nbin_du + IF (AerosolName(i) .EQ. 'SALT') nbin = nbin_ss + IF (AerosolName(i) .EQ. 'SUSO') nbin = nbin_su + IF (AerosolName(i) .EQ. 'SOOT') nbin = nbin_bc + IF (AerosolName(i) .EQ. 'WASO') nbin = nbin_oc + DO J = 1, NBIN + read(NOAER,'(2x,a4,1x,i1,1x,a3)')AerName_rd,ib, AerOpt + IF (AerName_rd .ne. AerosolName(i)) STOP + IF (j .ne. ib ) STOP + IF (AerOpt .ne. 'ext' ) STOP + + IF (AerosolName(i) .EQ. 'DUST') THEN + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (extrhd_du(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (scarhd_du(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (asyrhd_du(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (ssarhd_du(ii,j,ib), ii=1,KRHLEV) + enddo - if ( AerosolName_rd .EQ. 'SOOT') ISOOT = i - if ( AerosolName_rd .EQ. 'SUSO') ISUSO = i - if ( AerosolName_rd .EQ. 'WASO') IWASO = i - if ( AerosolName_rd .EQ. 'SSAM') ISSAM = i - if ( AerosolName_rd .EQ. 'SSCM') ISSCM = i + ELSEIF (AerosolName(i) .EQ. 'SALT') THEN + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (extrhd_ss(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (scarhd_ss(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (asyrhd_ss(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (ssarhd_ss(ii,j,ib), ii=1,KRHLEV) + enddo - ENDDO + ELSEIF (AerosolName(i) .EQ. 'SUSO') THEN + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (extrhd_su(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (scarhd_su(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (asyrhd_su(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (ssarhd_su(ii,j,ib), ii=1,KRHLEV) + enddo + + ELSEIF (AerosolName(i) .EQ. 'SOOT') THEN + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (extrhd_bc(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (scarhd_bc(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (asyrhd_bc(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (ssarhd_bc(ii,j,ib), ii=1,KRHLEV) + enddo + + ELSEIF (AerosolName(i) .EQ. 'WASO') THEN + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (extrhd_oc(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (scarhd_oc(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (asyrhd_oc(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (ssarhd_oc(ii,j,ib), ii=1,KRHLEV) + enddo + + ENDIF + + ENDDO ! j-loop for nbin + ENDDO ! i-loop for nAero + print *,'finish reading coef' CLOSE(UNIT=NOAER) @@ -4443,107 +4708,196 @@ SUBROUTINE CLDRAD ! AOD AT 11100 NM IF (IB .EQ. 7 ) INDX = 628 +! DETERMINE LEXT AND LSCA (DEFAULT TO F) + LEXT = .FALSE. + LSCA = .FALSE. + LASY = .FALSE. +! -- CHECK WHETHER TOTAL EXT AOD IS REQUESTED + IF (IGET(INDX).GT.0 ) LEXT =.TRUE. +! -- CHECK WHETHER SPECIATED AOD AT 550 NM IS REQUESTED + IF ( IB .EQ. 3 ) THEN + IF (IGET(650).GT.0 ) LSCA =.TRUE. !TOTAL SCA AOD + DO I = 1, nAero + IF (IGET(INDX_EXT(I)).GT.0 ) LEXT = .TRUE. + IF (IGET(INDX_SCA(I)).GT.0 ) LSCA = .TRUE. + ENDDO + ENDIF +! -- CHECK WHETHER ASY AND SSA AT 340NM IS REQUESTED + IF ( IB .EQ. 1 ) THEN + IF (IGET(648).GT.0 ) LSCA =.TRUE. + IF (IGET(649).GT.0 ) LASY =.TRUE. + ENDIF +! -- CHECK WHETHER ANGSTROM EXPONENT IS REQUESTED + IF (IGET(656).GT.0 ) THEN + IF ( IB .EQ. 2 ) LEXT = .TRUE. + IF ( IB .EQ. 5 ) LEXT = .TRUE. + ENDIF + print *,'LEXT=',LEXT,'LSCA=',LSCA,'LASY=',LASY ! SKIP IF POST PRODUCT IS NOT REQUESTED - IF (IGET(INDX).GT.0 .OR. IB.EQ. 3) THEN - + IF ( LEXT .OR. LSCA .OR. LASY ) THEN ! COMPUTE DUST AOD AOD_DU=SPVAL - EXT=SPVAL + SCA_DU=SPVAL + ASY_DU=SPVAL + EXT=0.0 + SCA=0.0 + ASY=0.0 DO J=JSTA,JEND DO I=1,IM DO L=1,LM - EXT(I,J,L) = DUST(I,J,L,1) * EXTRHI(1,IB) - DO N=2, KCM1 - EXT(I,J,L) = EXT(I,J,L) + DUST(I,J,L,N)*EXTRHI(N,IB) + DO N=1, NBIN_DU + EXT01 = EXTRHD_DU(1,N,IB) + SCA01 = SCARHD_DU(1,N,IB) + ASY01 = ASYRHD_DU(1,N,IB) + EXT(I,J,L) = EXT(I,J,L)+1e-9*DUST(I,J,L,N) * EXT01 + SCA(I,J,L) = SCA(I,J,L)+1e-9*DUST(I,J,L,N) * SCA01 + ASY(I,J,L) = ASY(I,J,L)+1e-9*DUST(I,J,L,N) * SCA01*ASY01 ENDDO EXT(I,J,L) = EXT(I,J,L) * 1000. + SCA(I,J,L) = SCA(I,J,L) * 1000. + ASY(I,J,L) = ASY(I,J,L) * 1000. ENDDO ! L-loop ENDDO ! I-loop ENDDO ! J-loop CALL CALPW(AOD_DU,17) - + CALL CALPW(SCA_DU,20) + CALL CALPW(ASY_DU,21) ! COMPUTE SULFATE AOD AOD_SU=SPVAL - EXT=SPVAL + SCA_SU=SPVAL + ASY_SU=SPVAL + EXT=0.0 + SCA=0.0 + ASY=0.0 DO J=JSTA,JEND DO I=1,IM DO L=1,LM ih1 = ihh(I,J,L) ih2 = ih1 + 1 - ext01 = extrhd(ih1,ISUSO,ib) & - & + rdrh(I,J,L)*(extrhd(ih2,ISUSO,ib)-extrhd(ih1,ISUSO,ib)) - EXT(I,J,L) = SUSO(I,J,L,1) * ext01 * 1000. + DO N = 1, NBIN_SU + EXT01 = EXTRHD_SU(IH1,N,IB) & + & + RDRH(I,J,L)*(EXTRHD_SU(IH2,N,IB)-EXTRHD_SU(IH1,N,IB)) + SCA01 = SCARHD_SU(IH1,N,IB) & + & + RDRH(I,J,L)*(SCARHD_SU(IH2,N,IB)-SCARHD_SU(IH1,N,IB)) + ASY01 = ASYRHD_SU(IH1,N,IB) & + & + RDRH(I,J,L)*(ASYRHD_SU(IH2,N,IB)-ASYRHD_SU(IH1,N,IB)) + EXT(I,J,L) = EXT(I,J,L)+1e-9*SUSO(I,J,L,N) * EXT01 + SCA(I,J,L) = SCA(I,J,L)+1e-9*SUSO(I,J,L,N)*SCA01 + ASY(I,J,L) = ASY(I,J,L)+1e-9*SUSO(I,J,L,N)*SCA01*ASY01 + + ENDDO ! N-loop + EXT(I,J,L) = EXT(I,J,L) * 1000. + SCA(I,J,L) = SCA(I,J,L) * 1000. + ASY(I,J,L) = ASY(I,J,L) * 1000. ENDDO ! L-loop ENDDO ! I-loop ENDDO ! J-loop CALL CALPW(AOD_SU,17) - + CALL CALPW(SCA_SU,20) + CALL CALPW(ASY_SU,21) ! COMPUTE SEA SALT AOD AOD_SS=SPVAL - EXT=SPVAL + SCA_SS=SPVAL + ASY_SS=SPVAL + EXT=0.0 + SCA=0.0 + ASY=0.0 DO J=JSTA,JEND DO I=1,IM DO L=1,LM ih1 = ihh (I,J,L) ih2 = ih1 + 1 -! lump bin1-2 to SSAM, bin3-5 to SSCM - SSAM = SALT(I,J,L,1)+SALT(I,J,L,2) - SSCM = SALT(I,J,L,3)+SALT(I,J,L,4)+SALT(I,J,L,5) - ext01 = extrhd(ih1,ISSAM,ib) & - & + rdrh(I,J,L)*(extrhd(ih2,ISSAM,ib)-extrhd(ih1,ISSAM,ib)) - ext02 = extrhd(ih1,ISSCM,ib) & - & + rdrh(I,J,L)*(extrhd(ih2,ISSCM,ib)-extrhd(ih1,ISSCM,ib)) - EXT(I,J,L) = SSAM * ext01 + SSCM * ext02 + DO N = 1, NBIN_SS + EXT01 = EXTRHD_SS(IH1,N,IB) & + & + RDRH(I,J,L)*(EXTRHD_SS(IH2,N,IB)-EXTRHD_SS(IH1,N,IB)) + SCA01 = SCARHD_SS(IH1,N,IB) & + & + RDRH(I,J,L)*(SCARHD_SS(IH2,N,IB)-SCARHD_SS(IH1,N,IB)) + ASY01 = ASYRHD_SS(IH1,N,IB) & + & + RDRH(I,J,L)*(ASYRHD_SS(IH2,N,IB)-ASYRHD_SS(IH1,N,IB)) + EXT(I,J,L) = EXT(I,J,L)+1e-9*SALT(I,J,L,N)*EXT01 + SCA(I,J,L) = SCA(I,J,L)+1e-9*SALT(I,J,L,N)*SCA01 + ASY(I,J,L) = ASY(I,J,L)+1e-9*SALT(I,J,L,N)*SCA01*ASY01 + ENDDO ! N-loop EXT(I,J,L) = EXT(I,J,L) * 1000. + SCA(I,J,L) = SCA(I,J,L) * 1000. + ASY(I,J,L) = ASY(I,J,L) * 1000. ENDDO ! L-loop ENDDO ! I-loop ENDDO ! J-loop CALL CALPW(AOD_SS,17) - + CALL CALPW(SCA_SS,20) + CALL CALPW(ASY_SS,21) ! COMPUTE BLACK CARBON AOD AOD_BC=SPVAL - EXT=SPVAL + SCA_BC=SPVAL + ASY_BC=SPVAL + EXT=0.0 + SCA=0.0 + ASY=0.0 DO J=JSTA,JEND DO I=1,IM DO L=1,LM - CCDRY = SOOT(I,J,L,1) - CCWET = SOOT(I,J,L,2) - ih1 = ihh (I,J,L) - ih2 = ih1 + 1 - ext01 = extrhd(1,ISOOT,ib) - ext02 = extrhd(ih1,ISOOT,ib) & - & + rdrh(I,J,L)*(extrhd(ih2,ISOOT,ib)-extrhd(ih1,ISOOT,ib)) - EXT(I,J,L) = CCDRY * ext01 + CCWET * ext02 + ih1 = ihh (I,J,L) + ih2 = ih1 + 1 + DO N = 1, NBIN_BC + EXT01 = EXTRHD_BC(IH1,N,IB) & + & + RDRH(I,J,L)*(EXTRHD_BC(IH2,N,IB)-EXTRHD_BC(IH1,N,IB)) + SCA01 = SCARHD_BC(IH1,N,IB) & + & + RDRH(I,J,L)*(SCARHD_BC(IH2,N,IB)-SCARHD_BC(IH1,N,IB)) + ASY01 = ASYRHD_BC(IH1,N,IB) & + & + RDRH(I,J,L)*(ASYRHD_BC(IH2,N,IB)-ASYRHD_BC(IH1,N,IB)) + EXT(I,J,L) = EXT(I,J,L)+1e-9*SOOT(I,J,L,N)*EXT01 + SCA(I,J,L) = SCA(I,J,L)+1e-9*SOOT(I,J,L,N)*SCA01 + ASY(I,J,L) = ASY(I,J,L)+1e-9*SOOT(I,J,L,N)*SCA01*ASY01 + ENDDO ! N-loop EXT(I,J,L) = EXT(I,J,L) * 1000. + SCA(I,J,L) = SCA(I,J,L) * 1000. + ASY(I,J,L) = ASY(I,J,L) * 1000. ENDDO ! L-loop ENDDO ! I-loop ENDDO ! J-loop CALL CALPW(AOD_BC,17) - + CALL CALPW(SCA_BC,20) + CALL CALPW(ASY_BC,21) ! COMPUTE ORGANIC CARBON AOD AOD_OC=SPVAL - EXT=SPVAL + SCA_OC=SPVAL + ASY_OC=SPVAL + EXT=0.0 + SCA=0.0 + ASY=0.0 DO J=JSTA,JEND DO I=1,IM DO L=1,LM - CCDRY = WASO(I,J,L,1) - CCWET = WASO(I,J,L,2) - ih1 = ihh (I,J,L) - ih2 = ih1 + 1 - ext01 = extrhd(1,IWASO,ib) - ext02 = extrhd(ih1,IWASO,ib) & - & + rdrh(I,J,L)*(extrhd(ih2,IWASO,ib)-extrhd(ih1,IWASO,ib)) - EXT(I,J,L) = CCDRY * ext01 + CCWET * ext02 + ih1 = ihh (I,J,L) + ih2 = ih1 + 1 + DO N = 1, NBIN_OC + EXT01 = EXTRHD_OC(IH1,N,IB) & + & + RDRH(I,J,L)*(EXTRHD_OC(IH2,N,IB)-EXTRHD_OC(IH1,N,IB)) + SCA01 = SCARHD_OC(IH1,N,IB) & + & + RDRH(I,J,L)*(SCARHD_OC(IH2,N,IB)-SCARHD_OC(IH1,N,IB)) + ASY01 = ASYRHD_OC(IH1,N,IB) & + & + RDRH(I,J,L)*(ASYRHD_OC(IH2,N,IB)-ASYRHD_OC(IH1,N,IB)) + EXT(I,J,L) = EXT(I,J,L)+1e-9*WASO(I,J,L,N)*EXT01 + SCA(I,J,L) = SCA(I,J,L)+1e-9*WASO(I,J,L,N)*SCA01 + ASY(I,J,L) = ASY(I,J,L)+1e-9*WASO(I,J,L,N)*SCA01*ASY01 + ENDDO ! N-loop EXT(I,J,L) = EXT(I,J,L) * 1000. + SCA(I,J,L) = SCA(I,J,L) * 1000. + ASY(I,J,L) = ASY(I,J,L) * 1000. ENDDO ! L-loop ENDDO ! I-loop ENDDO ! J-loop CALL CALPW(AOD_OC,17) + CALL CALPW(SCA_OC,20) + CALL CALPW(ASY_OC,21) ! COMPUTE TOTAL AOD -! AOD=SPVAL + AOD=SPVAL + SCA=SPVAL + ASY=SPVAL DO J=JSTA,JEND DO I=1,IM AOD_DU(I,J) = MAX (AOD_DU(I,J), 0.0) @@ -4551,11 +4905,47 @@ SUBROUTINE CLDRAD AOD_OC(I,J) = MAX (AOD_OC(I,J), 0.0) AOD_SU(I,J) = MAX (AOD_SU(I,J), 0.0) AOD_SS(I,J) = MAX (AOD_SS(I,J), 0.0) - AOD(I,J) = AOD_DU(I,J) + AOD_BC(I,J) + AOD_OC(I,J) + & + + SCA_DU(I,J) = MAX (SCA_DU(I,J), 0.0) + SCA_BC(I,J) = MAX (SCA_BC(I,J), 0.0) + SCA_OC(I,J) = MAX (SCA_OC(I,J), 0.0) + SCA_SU(I,J) = MAX (SCA_SU(I,J), 0.0) + SCA_SS(I,J) = MAX (SCA_SS(I,J), 0.0) + + ASY_DU(I,J) = MAX (ASY_DU(I,J), 0.0) + ASY_BC(I,J) = MAX (ASY_BC(I,J), 0.0) + ASY_OC(I,J) = MAX (ASY_OC(I,J), 0.0) + ASY_SU(I,J) = MAX (ASY_SU(I,J), 0.0) + ASY_SS(I,J) = MAX (ASY_SS(I,J), 0.0) + + AOD(I,J) = AOD_DU(I,J) + AOD_BC(I,J) + AOD_OC(I,J) + & & AOD_SU(I,J) + AOD_SS(I,J) + SCA2D(I,J) = SCA_DU(I,J) + SCA_BC(I,J) + SCA_OC(I,J) + & + & SCA_SU(I,J) + SCA_SS(I,J) + ASY2D(I,J) = ASY_DU(I,J) + ASY_BC(I,J) + ASY_OC(I,J) + & + & ASY_SU(I,J) + ASY_SS(I,J) ENDDO ! I-loop ENDDO ! J-loop +! FILL UP AOD_440 AND AOD_860, IF ANGSTROM EXP IS REQUESTED + IF ( IGET(656) .GT. 0 ) THEN + IF (IB .EQ. 2 ) THEN !! AOD AT 440 NM +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + AOD_440(I,J) = AOD(I,J) + ENDDO ! I-loop + ENDDO ! J-loop + ENDIF + IF (IB .EQ. 5 ) THEN !! AOD AT 860 NM +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + AOD_860(I,J) = AOD(I,J) + ENDDO ! I-loop + ENDDO ! J-loop + ENDIF + ENDIF ! WRITE OUT TOTAL AOD IF ( IGET(INDX) .GT. 0) THEN @@ -4576,287 +4966,555 @@ SUBROUTINE CLDRAD datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF +! +! WRITE OUT ASY AND SSA AT 340NM + IF ( IB .EQ. 1 ) THEN !!! FOR 340NM ONLY - -! WRITE OUT AOD FOR DU, SU, SS, OC, BC - IF ( IB .EQ. 3 ) THEN !!! FOR 550NM ONLY - - IF ( IGET(610) .GT. 0) THEN ! DUST AOD +! AER ASYM FACTOR AT 340 NM + IF ( IGET(649) .GT. 0 ) THEN !$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - GRID1(i,j) = AOD_DU(i,j) - enddo - enddo + DO J=JSTA,JEND + DO I=1,IM + IF ( SCA2D(I,J) > 0.0 ) THEN + ASY2D(I,J) = ASY2D(I,J) / SCA2D(I,J) + ELSE + ASY2D(I,J) = 0. + ENDIF + GRID1(I,J)=ASY2D(I,J) + ENDDO + ENDDO ID(1:25)=0 ID(02)=141 CALL BOUND(GRID1,D00,H99999) if(grib=="grib1" )then - CALL GRIBIT(IGET(610),LVLS(1,IGET(610)),GRID1,IM,JM) + CALL GRIBIT(IGET(649),LVLS(1,IGET(649)),GRID1,IM,JM) else if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(610)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(649)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif - ENDIF + ENDIF ! IGET(649) - IF ( IGET(611) .GT. 0) THEN ! SEA-SALT AOD +! AER SINGLE SCATTER ALB AT 340 NM + IF ( IGET(648) .GT. 0 ) THEN !$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - GRID1(i,j) = AOD_SS(i,j) - enddo - enddo + DO J=JSTA,JEND + DO I=1,IM + IF ( AOD(I,J) > 0.0 ) THEN + SCA2D(I,J) = SCA2D(I,J) / AOD(I,J) + ELSE + SCA2D(I,J) = 1.0 + ENDIF + GRID1(I,J)=SCA2D(I,J) + ENDDO + ENDDO ID(1:25)=0 ID(02)=141 CALL BOUND(GRID1,D00,H99999) if(grib=="grib1" )then - CALL GRIBIT(IGET(611),LVLS(1,IGET(611)),GRID1,IM,JM) + CALL GRIBIT(IGET(648),LVLS(1,IGET(648)),GRID1,IM,JM) else if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(611)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(648)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif - ENDIF + ENDIF ! IGET(648) + print *,'aft compute sca340' + + ENDIF ! IB IF-BLOCK (340NM) + + +! WRITE OUT AOD FOR DU, SU, SS, OC, BC for all wavelengths +! WRITE OUT SPECIATED AEROSOL OPTICAL PROPERTIES + IF ( IB .EQ. 3 ) THEN !!! FOR 550NM ONLY - IF ( IGET(612) .GT. 0) THEN ! SULFATE AOD +! WRITE OUT TOTAL SCATTERING AOD + IF ( IGET(650) .GT. 0 ) THEN !$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - GRID1(i,j) = AOD_SU(i,j) - enddo - enddo + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=SCA2D(I,J) + ENDDO + ENDDO ID(1:25)=0 ID(02)=141 CALL BOUND(GRID1,D00,H99999) if(grib=="grib1" )then - CALL GRIBIT(IGET(612),LVLS(1,IGET(612)),GRID1,IM,JM) + CALL GRIBIT(IGET(650),LVLS(1,IGET(650)),GRID1,IM,JM) else if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(612)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(650)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif - ENDIF + ENDIF +! LOOP THROUGH EACH SPECIES + DO II = 1, nAero - IF ( IGET(613) .GT. 0) THEN ! ORGANIC CARBON AOD +! WRITE OUT EXT AOD + JJ = INDX_EXT(II) + IF ( IGET(JJ) .GT. 0) THEN ! EXT AOD !$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - GRID1(i,j) = AOD_OC(i,j) - enddo - enddo - ID(1:25)=0 - ID(02)=141 - CALL BOUND(GRID1,D00,H99999) - if(grib=="grib1" )then - CALL GRIBIT(IGET(613),LVLS(1,IGET(613)),GRID1,IM,JM) - else if(grib=="grib2" )then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(613)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) - endif - ENDIF + DO J=JSTA,JEND + DO I=1,IM + IF ( II .EQ. 1 ) GRID1(I,J) = AOD_DU(I,J) + IF ( II .EQ. 2 ) GRID1(I,J) = AOD_SS(I,J) + IF ( II .EQ. 3 ) GRID1(I,J) = AOD_SU(I,J) + IF ( II .EQ. 4 ) GRID1(I,J) = AOD_OC(I,J) + IF ( II .EQ. 5 ) GRID1(I,J) = AOD_BC(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=141 + CALL BOUND(GRID1,D00,H99999) + if(grib=="grib1" )then + CALL GRIBIT(IGET(JJ),LVLS(1,IGET(JJ)),GRID1,IM,JM) + else if(grib=="grib2" )then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(JJ)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + ENDIF - IF ( IGET(614) .GT. 0) THEN ! BLACK CARBON AOD +! WRITE OUT SCA AOD + JJ = INDX_SCA(II) + IF ( IGET(JJ) .GT. 0) THEN ! SCA AOD !$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - GRID1(i,j) = AOD_BC(i,j) - enddo - enddo + DO J=JSTA,JEND + DO I=1,IM + IF ( II .EQ. 1 ) GRID1(I,J) = SCA_DU(I,J) + IF ( II .EQ. 2 ) GRID1(I,J) = SCA_SS(I,J) + IF ( II .EQ. 3 ) GRID1(I,J) = SCA_SU(I,J) + IF ( II .EQ. 4 ) GRID1(I,J) = SCA_OC(I,J) + IF ( II .EQ. 5 ) GRID1(I,J) = SCA_BC(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=141 + CALL BOUND(GRID1,D00,H99999) + if(grib=="grib1" )then + CALL GRIBIT(IGET(JJ),LVLS(1,IGET(JJ)),GRID1,IM,JM) + else if(grib=="grib2" )then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(JJ)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + ENDIF + + ENDDO ! II DO-LOOP + + ENDIF ! IB IF-BLOCK (550NM) + + ENDIF ! LEXT IF-BLOCK + ENDDO ! LOOP THROUGH NBDSW CHANNELS +! COMPUTE AND WRITE OUT ANGSTROM EXPONENT + IF ( IGET(656) .GT. 0 ) THEN + ANGST=SPVAL +! ANG2 = LOG ( 0.860 / 0.440 ) + ANG2 = LOG ( 860. / 440. ) +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + IF (AOD_860(I,J) .GT. 0.) THEN + ANG1 = LOG( AOD_440(I,J)/AOD_860(I,J) ) + ANGST(I,J) = ANG1 / ANG2 + ENDIF + GRID1(I,J)=ANGST(I,J) + ENDDO + ENDDO + print *,'output angstrom exp,angst=',maxval(angst(1:im,jsta:jend)), & + minval(angst(1:im,jsta:jend)) ID(1:25)=0 ID(02)=141 CALL BOUND(GRID1,D00,H99999) if(grib=="grib1" )then - CALL GRIBIT(IGET(614),LVLS(1,IGET(614)),GRID1,IM,JM) + CALL GRIBIT(IGET(656),LVLS(1,IGET(656)),GRID1,IM,JM) else if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(614)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(656)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif - ENDIF - - ENDIF ! OUTPUT 550 NM AOD FOR EACH SPECIES - - ENDIF ! IGET(INDX) .GT. 0 - ENDDO ! LOOP THROUGH NBDSW CHANNELS - - deallocate(IHH) - deallocate(RDRH) - - ENDIF !! .................................... AOD - -!! ADD DUST EMISSION FLUXES (kg/m2/sec) -!! The AER file uses 1.E6 to scale all 2d diagnosis fields -!! Multiply by 1.E-6 to revert these fields back - IF (IGET(615).GT.0) THEN - GRID1=SPVAL + ENDIF ! ANGSTROM EXPONENT + + ENDIF ! END OF LAEROPT IF-BLOCK + +!#if 0 +!!! Multiply by 1.E-6 to revert these fields back +! IF (IGET(659).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 +! 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) +! elseif(grib=='grib2') then +! cfld=cfld+1 +! fld_info(cfld)%ifld=IAVBLFLD(IGET(659)) +! datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) +! endif +! ENDIF +! +! IF (IGET(660).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 +! 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) +! elseif(grib=='grib2') then +! cfld=cfld+1 +! fld_info(cfld)%ifld=IAVBLFLD(IGET(660)) +! 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 +! DO J = JSTA,JEND +! DO I = 1,IM +! GRID1(I,J) = DUDP(I,J,1)*1.E-6 +! DO K=2,NBIN_DU +! GRID1(I,J) = GRID1(I,J)+ DUDP(I,J,K)*1.E-6 +! END DO +! END DO +! END DO +! ID(1:25) = 0 +! ID(02)=141 +! if(grib=='grib1') then +! CALL GRIBIT(IGET(661),LVLS(1,IGET(661)),GRID1,IM,JM) +! elseif(grib=='grib2') then +! cfld=cfld+1 +! fld_info(cfld)%ifld=IAVBLFLD(IGET(661)) +! datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) +! endif +! ENDIF + +!! ADD AEROSOL SURFACE PM25 DUST MASS CONCENTRATION (ug/m3) + IF (IGET(686).GT.0 ) THEN +!$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 - END DO + !GRID1(I,J) = DUSMASS(I,J) * 1.E-6 + GRID1(I,J) = DUSTPM(I,J) !ug/m3 END DO END DO ID(1:25) = 0 - ID(02)=141 + ID(02)=129 if(grib=='grib1') then - CALL GRIBIT(IGET(615),LVLS(1,IGET(615)),GRID1,IM,JM) + CALL GRIBIT(IGET(686),LVLS(1,IGET(686)),GRID1,IM,JM) elseif(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(615)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(686)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF -!! ADD DUST SEDIMENTATION FLUXES (kg/m2/sec) - IF (IGET(616).GT.0) THEN - GRID1=SPVAL +!! ADD DUST WET DEPOSITION FLUXES (kg/m2/sec) +! IF (IGET(662).GT.0) THEN +! DO J = JSTA,JEND +! DO I = 1,IM +! GRID1(I,J) = DUWT(I,J,1)*1.E-6 +! DO K=2,NBIN_DU +! GRID1(I,J) = GRID1(I,J)+ DUWT(I,J,K)*1.E-6 +! END DO +! END DO +! END DO +! ID(1:25) = 0 +! ID(02)=141 +! if(grib=='grib1') then +! CALL GRIBIT(IGET(662),LVLS(1,IGET(662)),GRID1,IM,JM) +! elseif(grib=='grib2') then +! cfld=cfld+1 +! fld_info(cfld)%ifld=IAVBLFLD(IGET(662)) +! datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) +! endif +! ENDIF + +!! ADD AEROSOL SURFACE PM25 SEA SALT MASS CONCENTRATION (ug/m3) + IF (IGET(684).GT.0 ) THEN +!$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) = DUSMASS(I,J) * 1.E-6 + GRID1(I,J) = SSPM(I,J) !ug/m3 END DO END DO ID(1:25) = 0 - ID(02)=141 + ID(02)=129 if(grib=='grib1') then - CALL GRIBIT(IGET(616),LVLS(1,IGET(616)),GRID1,IM,JM) + CALL GRIBIT(IGET(684),LVLS(1,IGET(684)),GRID1,IM,JM) elseif(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(616)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(684)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + ENDIF +!! ADD AEROSOL SURFACE PM10 MASS CONCENTRATION (ug/m3) + IF (IGET(619).GT.0 ) THEN +!$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) = DUSMASS(I,J) !ug/m3 + END DO + END DO + ID(1:25) = 0 + ID(02)=129 + if(grib=='grib1') then + CALL GRIBIT(IGET(619),LVLS(1,IGET(619)),GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(619)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF -!! ADD DUST DRY DEPOSITION FLUXES (kg/m2/sec) - IF (IGET(617).GT.0) THEN +!! ADD AEROSOL SURFACE PM2.5 MASS CONCENTRATION (ug/m3) + IF (IGET(620).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM - GRID1(I,J) = DUDP(I,J,1)*1.E-6 - DO K=2,NBIN_DU - GRID1(I,J) = GRID1(I,J)+ DUDP(I,J,K)*1.E-6 - END DO + !GRID1(I,J) = DUSMASS25(I,J) * 1.E-6 + GRID1(I,J) = DUSMASS25(I,J) ! ug/m3 END DO END DO - if(ifhr==3) then - print *,'DUST_DRY_DEPOSITION_FLUX=',maxval(grid1(1:im,jsta:jend)), & - minval(grid1(1:im,jsta:jend)),'DUDP1=',maxval(dudp(1:im,jsta:jend,1)), & - minval(dudp(1:im,jsta:jend,1)),'dudp2=',maxval(dudp(1:im,jsta:jend,2)), & - minval(dudp(1:im,jsta:jend,2)),'dudp3=',maxval(dudp(1:im,jsta:jend,3)), & - minval(dudp(1:im,jsta:jend,3)),'dudp4=',maxval(dudp(1:im,jsta:jend,4)), & - minval(dudp(1:im,jsta:jend,4)),'dudp5=',maxval(dudp(1:im,jsta:jend,5)), & - minval(dudp(1:im,jsta:jend,5)) + ID(1:25) = 0 + ID(02)=129 + if(grib=='grib1') then + CALL GRIBIT(IGET(620),LVLS(1,IGET(620)),GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(620)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif + ENDIF +!! ADD TOTAL AEROSOL PM10 COLUMN DENSITY (kg/m2) ! + IF (IGET(621).GT.0 ) THEN +!$omp parallel do private(i,j) + DO J = JSTA,JEND + DO I = 1,IM + !GRID1(I,J) = DUCMASS(I,J) * 1.E-6 + GRID1(I,J) = DUCMASS(I,J) * 1.E-9 + END DO + END DO ID(1:25) = 0 ID(02)=141 if(grib=='grib1') then - CALL GRIBIT(IGET(617),LVLS(1,IGET(617)),GRID1,IM,JM) + CALL GRIBIT(IGET(621),LVLS(1,IGET(621)),GRID1,IM,JM) elseif(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(617)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(621)) + 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(618).GT.0) THEN +!! ADD TOTAL AEROSOL PM2.5 COLUMN DENSITY (kg/m2) + IF (IGET(622).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM - GRID1(I,J) = DUWT(I,J,1)*1.E-6 - DO K=2,NBIN_DU - GRID1(I,J) = GRID1(I,J)+ DUWT(I,J,K)*1.E-6 - END DO + !GRID1(I,J) = DUCMASS25(I,J) * 1.E-6 + GRID1(I,J) = DUCMASS25(I,J) * 1.E-9 END DO END DO ID(1:25) = 0 ID(02)=141 if(grib=='grib1') then - CALL GRIBIT(IGET(618),LVLS(1,IGET(618)),GRID1,IM,JM) + CALL GRIBIT(IGET(622),LVLS(1,IGET(622)),GRID1,IM,JM) elseif(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(618)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(622)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF -!! ADD AEROSOL SURFACE PM10 MASS CONCENTRATION (kg/m3) - IF (IGET(619).GT.0 ) THEN +!! ADD DUST PM2.5 COLUMN DENSITY (kg/m2) + IF (IGET(646).GT.0 ) THEN +!$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) = DUSTCB(I,J) * 1.E-9 END DO END DO ID(1:25) = 0 - ID(02)=129 + ID(02)=141 if(grib=='grib1') then - CALL GRIBIT(IGET(619),LVLS(1,IGET(619)),GRID1,IM,JM) + CALL GRIBIT(IGET(646),LVLS(1,IGET(646)),GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(619)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(646)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF -!! ADD AEROSOL SURFACE PM2.5 MASS CONCENTRATION (kg/m3) - IF (IGET(620).GT.0 ) THEN +!! ADD SEA SALT PM2.5 COLUMN DENSITY (kg/m2) + IF (IGET(647).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM - GRID1(I,J) = DUSMASS25(I,J) * 1.E-6 + GRID1(I,J) = SSCB(I,J) * 1.E-9 END DO END DO ID(1:25) = 0 - ID(02)=129 + ID(02)=141 if(grib=='grib1') then - CALL GRIBIT(IGET(620),LVLS(1,IGET(620)),GRID1,IM,JM) + CALL GRIBIT(IGET(647),LVLS(1,IGET(647)),GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(620)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(647)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF -!! ADD TOTAL AEROSOL PM10 COLUMN DENSITY (kg/m2) - IF (IGET(621).GT.0 ) THEN +!! ADD BC COLUMN DENSITY (kg/m2) + IF (IGET(616).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM - GRID1(I,J) = DUCMASS(I,J) * 1.E-6 + GRID1(I,J) = BCCB(I,J) * 1.E-9 END DO END DO ID(1:25) = 0 ID(02)=141 if(grib=='grib1') then - CALL GRIBIT(IGET(621),LVLS(1,IGET(621)),GRID1,IM,JM) + CALL GRIBIT(IGET(616),LVLS(1,IGET(616)),GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(621)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(616)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF -!! ADD TOTAL AEROSOL PM2.5 COLUMN DENSITY (kg/m2) - IF (IGET(622).GT.0 ) THEN +!! ADD OC COLUMN DENSITY (kg/m2) ! + IF (IGET(617).GT.0 ) THEN +!$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM - GRID1(I,J) = DUCMASS25(I,J) * 1.E-6 + GRID1(I,J) = OCCB(I,J) * 1.E-9 END DO END DO ID(1:25) = 0 ID(02)=141 if(grib=='grib1') then - CALL GRIBIT(IGET(622),LVLS(1,IGET(622)),GRID1,IM,JM) + CALL GRIBIT(IGET(617),LVLS(1,IGET(617)),GRID1,IM,JM) elseif(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(622)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(617)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF +!! ADD SULF COLUMN DENSITY (kg/m2) ! + IF (IGET(618).GT.0 ) THEN +!$omp parallel do private(i,j) + DO J = JSTA,JEND + DO I = 1,IM + GRID1(I,J) = SULFCB(I,J) * 1.E-9 + END DO + END DO + ID(1:25) = 0 + ID(02)=141 + if(grib=='grib1') then + CALL GRIBIT(IGET(618),LVLS(1,IGET(618)),GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(618)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + ENDIF +!! ADD EMISSION FLUXES,dry depostion, wet/convective depostion (kg/m2/sec) +!! The AER file uses 1.E6 to scale all 2d diagnosis fields +!! Multiply by 1.E-6 to revert these fields back + IF (IGET(659).GT.0) call wrt_aero_diag(659,nbin_du,duem) + print *,'aft wrt disg duem' + IF (IGET(660).GT.0) call wrt_aero_diag(660,nbin_du,dusd) + IF (IGET(661).GT.0) call wrt_aero_diag(661,nbin_du,dudp) + IF (IGET(662).GT.0) call wrt_aero_diag(662,nbin_du,duwt) + IF (IGET(679).GT.0) call wrt_aero_diag(679,nbin_du,dusv) + print *,'aft wrt disg duwt' + +!! wrt SS diag field + IF (IGET(663).GT.0) call wrt_aero_diag(663,nbin_ss,ssem) + IF (IGET(664).GT.0) call wrt_aero_diag(664,nbin_ss,sssd) + IF (IGET(665).GT.0) call wrt_aero_diag(665,nbin_ss,ssdp) + IF (IGET(666).GT.0) call wrt_aero_diag(666,nbin_ss,sswt) + IF (IGET(680).GT.0) call wrt_aero_diag(680,nbin_ss,sssv) + print *,'aft wrt disg sswt' + +!! wrt BC diag field + IF (IGET(667).GT.0) call wrt_aero_diag(667,nbin_bc,bcem) + IF (IGET(668).GT.0) call wrt_aero_diag(668,nbin_bc,bcsd) + IF (IGET(669).GT.0) call wrt_aero_diag(669,nbin_bc,bcdp) + IF (IGET(670).GT.0) call wrt_aero_diag(670,nbin_bc,bcwt) + IF (IGET(681).GT.0) call wrt_aero_diag(681,nbin_bc,bcsv) + print *,'aft wrt disg bcwt' + +!! wrt OC diag field + IF (IGET(671).GT.0) call wrt_aero_diag(671,nbin_oc,ocem) + IF (IGET(672).GT.0) call wrt_aero_diag(672,nbin_oc,ocsd) + IF (IGET(673).GT.0) call wrt_aero_diag(673,nbin_oc,ocdp) + 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 SU diag field +! IF (IGET(675).GT.0) call wrt_aero_diag(675,nbin_su,suem) +! IF (IGET(676).GT.0) call wrt_aero_diag(676,nbin_su,susd) +! IF (IGET(677).GT.0) call wrt_aero_diag(677,nbin_su,sudp) +! IF (IGET(678).GT.0) call wrt_aero_diag(678,nbin_su,suwt) +! print *,'aft wrt disg suwt' endif ! if gocart_on ! ! END OF ROUTINE. ! RETURN END + + subroutine wrt_aero_diag(igetfld,nbin,data) + use ctlblk_mod, only: jsta, jend, SPVAL, im, jm, grib, & + cfld, datapd, fld_info, jsta_2l, jend_2u + use rqstfld_mod, only: IGET, ID, LVLS, IAVBLFLD + implicit none +! + integer igetfld,nbin + real, dimension(1:im,jsta_2l:jend_2u,nbin) :: data +! + integer i,j,k + REAL,dimension(im,jm) :: GRID1 +! + GRID1=SPVAL +!$omp parallel do private(i,j) + DO J = JSTA,JEND + DO I = 1,IM + grid1(I,J) = data(I,J,1) + DO K=2,NBIN + GRID1(I,J) = GRID1(I,J)+ data(I,J,K) + END DO + END DO + END DO + ID(1:25) = 0 + ID(02)=141 + if(grib=='grib1') then + CALL GRIBIT(IGET(igetfld),LVLS(1,iget(igetfld)),GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(iget(igetfld)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + + end subroutine wrt_aero_diag diff --git a/comupp/src/unipost/CTLBLK.f b/comupp/src/unipost/CTLBLK.f index 3951000d7..75929ed46 100644 --- a/comupp/src/unipost/CTLBLK.f +++ b/comupp/src/unipost/CTLBLK.f @@ -86,6 +86,7 @@ module CTLBLK_mod integer, parameter :: nbin_oc = 2 ! organic carbon integer, parameter :: nbin_bc = 2 ! black carbon integer, parameter :: nbin_su = 1 ! sulfate + integer, parameter :: nbin_sm = 1 ! smoke ! ! SET FD LEVEL HEIGHTS IN GEOPOTENTAL METERS. DATA HTFD / 20.E0,30.E0,40.E0,50.E0,80.E0,100.E0,305.E0,457.E0,610.E0, & diff --git a/comupp/src/unipost/DEALLOCATE.f b/comupp/src/unipost/DEALLOCATE.f index a2e66cbce..30fcc3a40 100644 --- a/comupp/src/unipost/DEALLOCATE.f +++ b/comupp/src/unipost/DEALLOCATE.f @@ -94,6 +94,8 @@ SUBROUTINE DE_ALLOCATE deallocate(QQNR) deallocate(QQNWFA) deallocate(QQNIFA) + deallocate(TAOD5503D) + deallocate(AEXTC55) deallocate(EXTCOF55) deallocate(CFR) deallocate(CFR_RAW) @@ -201,9 +203,15 @@ SUBROUTINE DE_ALLOCATE deallocate(swddnic) deallocate(swddifc) deallocate(swupt) + deallocate(int_smoke) + deallocate(mean_frp) + deallocate(int_aod) + deallocate(smoke) deallocate(taod5502d) deallocate(aerasy2d) deallocate(aerssa2d) + deallocate(lwp) + deallocate(iwp) deallocate(rlwin) deallocate(lwdnbc) deallocate(lwupbc) @@ -366,6 +374,20 @@ SUBROUTINE DE_ALLOCATE deallocate(fprate_max) deallocate(up_heli_max) deallocate(up_heli_max16) + deallocate(up_heli_min) + deallocate(up_heli_min16) + deallocate(up_heli_max02) + deallocate(up_heli_min02) + deallocate(up_heli_max03) + deallocate(up_heli_min03) + deallocate(rel_vort_max) + deallocate(rel_vort_max01) + deallocate(rel_vort_maxhy1) + deallocate(wspd10umax) + deallocate(wspd10vmax) + deallocate(refdm10c_max) + deallocate(hail_max2d) + deallocate(hail_maxk1) deallocate(grpl_max) deallocate(up_heli) deallocate(up_heli16) @@ -426,14 +448,18 @@ SUBROUTINE DE_ALLOCATE deallocate(soot) deallocate(waso) deallocate(suso) + deallocate(pp25) + deallocate(pp10) ! vrbls3d deallocate(ext) deallocate(asy) deallocate(ssa) + deallocate(sca) deallocate(duem) deallocate(dusd) deallocate(dudp) deallocate(duwt) + deallocate(dusv) deallocate(suem) deallocate(susd) deallocate(sudp) @@ -442,14 +468,17 @@ SUBROUTINE DE_ALLOCATE deallocate(ocsd) deallocate(ocdp) deallocate(ocwt) + deallocate(ocsv) deallocate(bcem) deallocate(bcsd) deallocate(bcdp) deallocate(bcwt) + deallocate(bcsv) deallocate(ssem) deallocate(sssd) deallocate(ssdp) deallocate(sswt) + deallocate(sssv) deallocate(dpres) deallocate(rhomid) ! vrbls2d @@ -473,6 +502,17 @@ SUBROUTINE DE_ALLOCATE deallocate(sscmass) deallocate(sssmass25) deallocate(sscmass25) + deallocate(dustcb) + deallocate(occb) + deallocate(bccb) + deallocate(sulfcb) + deallocate(pp25cb) + deallocate(pp10cb) + deallocate(sscb) + deallocate(dustallcb) + deallocate(ssallcb) + deallocate(dustpm) + deallocate(sspm) endif ! ! HWRF RRTMG output diff --git a/comupp/src/unipost/FIXED.f b/comupp/src/unipost/FIXED.f index 500fa00ff..8cf507bc0 100644 --- a/comupp/src/unipost/FIXED.f +++ b/comupp/src/unipost/FIXED.f @@ -47,7 +47,7 @@ SUBROUTINE FIXED use masks, only: gdlat, gdlon, sm, sice, lmh, lmv use params_mod, only: small, p1000, capa use lookup_mod, only: ITB,JTB,ITBQ,JTBQ - use ctlblk_mod, only: jsta, jend, grib, cfld, fld_info, datapd, spval, tsrfc,& + use ctlblk_mod, only: jsta, jend, modelname, grib, cfld, fld_info, datapd, spval, tsrfc,& ifhr, ifmin, lm, im, jm use rqstfld_mod, only: iget, lvls, iavblfld, id !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -310,11 +310,15 @@ SUBROUTINE FIXED !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - IF( (abs(SM(I,J)-1.) < 1.0E-5) ) THEN - GRID1(I,J) = SST(I,J) + IF (MODELNAME == 'NMM') THEN + IF( (abs(SM(I,J)-1.) < 1.0E-5) ) THEN + GRID1(I,J) = SST(I,J) + ELSE + GRID1(I,J) = THS(I,J)*(PINT(I,J,LM+1)/P1000)**CAPA + END IF ELSE - GRID1(I,J) = THS(I,J)*(PINT(I,J,LM+1)/P1000)**CAPA - END IF + GRID1(I,J) = SST(I,J) + ENDIF ENDDO ENDDO ID(1:25) = 0 diff --git a/comupp/src/unipost/GFSPOST.F b/comupp/src/unipost/GFSPOST.F index c7073681e..07c15042a 100644 --- a/comupp/src/unipost/GFSPOST.F +++ b/comupp/src/unipost/GFSPOST.F @@ -570,450 +570,6 @@ subroutine mxwind(km,p,u,v,t,h,pmw,umw,vmw,tmw,hmw) pmw=p(kmw)*exp((h(kmw)-hmw)*(1-0.5*(tmw/t(kmw)-1))/(con_rog*t(kmw))) end subroutine -! Add Iredells subroutine to read sigma files -!------------------------------------------------------------------------------- -subroutine rtsig(lusig,head,k1,k2,kgds,ijo,levs,ntrac,jcap,lnt2,me, & - h,p,px,py,t,u,v,d,trc,iret) -!$$$ Subprogram documentation block -! -! Subprogram: rtsig Read and transform sigma file -! Prgmmr: Iredell Org: np23 Date: 1999-10-18 -! -! Abstract: This subprogram reads a sigma file and transforms -! the fields to a designated global grid. -! -! Program history log: -! 1999-10-18 Mark Iredell -! 2013-04-19 Jun Wang: add option to get tmp and ps(in pascal) -! from enthalpy and ps(cb) option -! 2013-05-06 Shrinivas Moorthi: Initialize midea to 0 -! 2013-05-07 Shrinivas Moorthi: Remove mo3, mct, midea and define io3, ict etc -! correctly and get correct cloud condensate. -! 2013-08-02 Shrinivas Moorthi: Rewrote the whole routine to read the sigma -! file differently and to read all tracers -! Addedd sptezj for two 2d fields -! 2014-02-20 Shrinivas Moorthi: Modified conversion from spectral to grid -! taking advantage of threding in SP library. -! This really speeds up the code -! Also threaded loop for Temperature from Tv - -! -! Usage: call rtsig(lusig,head,k1,k2,kgds,ijo,nct, & -! h,p,px,py,t,tx,ty,u,v,d,z,sh,o3,ct,iret,o,o2) -! Input argument list: -! lusig integer(sigio_intkind) sigma file unit number -! head type(sigio_head) sigma file header -! k1 integer first model level to return -! k2 integer last model level to return -! kgds integer (200) GDS to which to transform -! ijo integer dimension of output fields -! levs integer number of total vertical levels -! ntrac integer number of output tracers -! jcap integer number of waves -! lnt2 integer (jcap+1)*(jcap+2) -! Output argument list: -! h real (ijo) surface orography (m) -! p real (ijo) surface pressure (Pa) -! px real (ijo) log surface pressure x-gradient (1/m) -! py real (ijo) log surface pressure y-gradient (1/m) -! t real (ijo,k1:k2) temperature (K) -! tx real (ijo,k1:k2) virtual temperature x-gradient (K/m) -! ty real (ijo,k1:k2) virtual temperature y-gradient (K/m) -! u real (ijo,k1:k2) x-component wind (m/s) -! v real (ijo,k1:k2) y-component wind (m/s) -! d real (ijo,k1:k2) wind divergence (1/s) -! trc real (ijo,k1:k2,ntrac) tracers -! 1 = specific humidity (kg/kg) -! 2 = Ozone mixing ratio (kg/kg) -! 3 = cloud condensate mixing ratio (kg/kg) -! . -! . -! atomic oxyge, oxygen etc -! -! iret integer return code -! -! Modules used: -! sigio_r_module sigma file I/O -! -! Subprograms called: -! sigio_rrdati read sigma single data field -! sptez scalar spectral transform -! sptezd gradient spectral transform -! sptezm multiple scalar spectral transform -! sptezmv multiple vector spectral transform -! -! Attributes: -! Language: Fortran 90 -! -!$$$ - use sigio_module, only : sigio_intkind, sigio_head - use sigio_r_module, only : sigio_dati, sigio_rrdati - use physcons, only : con_omega, con_fvirt - use omp_lib - implicit none - integer(sigio_intkind),intent(in) :: lusig - type(sigio_head), intent(in) :: head - integer,intent(in) :: k1,k2,kgds(200),ijo,levs,ntrac,jcap,lnt2,me - real,dimension(ijo), intent(out) :: h,p,px,py - real,dimension(ijo,k1:k2),intent(out):: t,u,v,d - real,dimension(ijo,k1:k2,ntrac),intent(out),target :: trc - integer,intent(out) :: iret -! - integer idrt,io,jo,iidea -! integer idrt,io,jo,mo3,mct,iidea,midea - integer(sigio_intkind):: irets -! type(sigio_datm):: datm - type(sigio_dati) dati -! type griddata -! real,dimension(:,:),pointer :: datm -! endtype griddata -! type(griddata),dimension(:),pointer :: datatrc - real, target :: trisca(lnt2,k1:k2+1), triscb(lnt2,k1:k2) - real,dimension(:), allocatable :: cpi - real,dimension(:,:),allocatable :: wrk - integer io3,ict,jct,n,i,k,jc,nt - integer idvm, klen - real pmean,sumq,xcp -! integer, parameter :: latch=20 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! Determine output grid - idrt = kgds(1) - if(kgds(1) == 0 .and. kgds(4) < 90000) idrt = 256 - io = kgds(2) - jo = kgds(3) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! Read and transform surface fields - iret = 1 - if (me == 0) then - print*,'Debug rtsig= ',lusig,k1,k2,ijo,kgds(1:20) - endif - - idvm = head%idvm -! jc = omp_get_num_threads() -! write(0,*)' in RTSIG lnt2=',lnt2,' threads=',jc,' latch=',latch, & -! ' jcap=',jcap,' io=',io,' jo=',jo,' ijo=',ijo -! - if (k2 < k1) return - - dati%i = 1 ! hs - dati%f => trisca(:,k1) - call sigio_rrdati(lusig,head,dati,irets) - if(irets /= 0) return - -! call sptez(0,jcap,idrt,io,jo,trisca(1,k1),h,1) -! call sptez(0,jcap,idrt,io,jo,dats%hs,h,1) -! call sptez(0,jcap,idrt,io,jo,dats%ps,p,1) -! call sptezj(jcap,lnt2,1,idrt,io,jo,jc,trisca,h,latch,1) -! - dati%i = 2 ! Surface pressure - dati%f => trisca(:,k1+1) - call sigio_rrdati(lusig,head,dati,irets) - if(irets /= 0) return -! -! call sptez(0,jcap,idrt,io,jo,trisca(1,k1),p,1) -! call sptezj(jcap,lnt2,1,idrt,io,jo,jc,trisca,p,latch,1) -!-- - allocate(wrk(ijo,2)) - call sptezm(0,jcap,idrt,io,jo,2,trisca(1,k1),wrk,1) - if( mod(idvm,10) < 2) then -!$omp parallel do private(i) - do i=1,ijo - h(i) = wrk(i,1) - p(i) = 1.e3*exp(wrk(i,2)) -! p(i) = 1.e3*exp(p(i)) - enddo - elseif(mod(idvm,10) == 2) then -!$omp parallel do private(i) - do i=1,ijo - h(i) = wrk(i,1) - p(i) = 1000.*wrk(i,2) -! p(i) = 1000.*p(i) - enddo - endif - if (allocated(wrk)) deallocate(wrk) - - call sptezd(0,jcap,idrt,io,jo,trisca(1,k1+1),pmean,px,py,1) - iret = 0 - -! if (k2 < k1) return - -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! Read and transform fields on levels k1 through k2 - iret = 2 - if (k2 >= k1) then - klen = k2-k1+1 - do k=k1,k2 - write(0,*)' retriving T for k=',k,' k1=',k1,' k2=',k2 - dati%i = k + 2 ! Virtual Temperature or CpT - dati%f => trisca(:,k) - - call sigio_rrdati(lusig,head,dati,iret) - enddo - call sptezm(0,jcap,idrt,io,jo,klen,trisca(1,k1),t(1,k1),1) -! call sptezm(0,jcap,idrt,io,jo,klen,trisca,t,1) - do k=k1,k2 - dati%i = levs + 2 + (k-1) * 2 + 1 ! Divergence - dati%f => trisca(:,k) - call sigio_rrdati(lusig,head,dati,irets) - if(irets /= 0) return - dati%i = levs + 2 + (k-1) * 2 + 2 ! Vorticity - dati%f => triscb(:,k) - call sigio_rrdati(lusig,head,dati,irets) - if(irets /= 0) return - enddo - call sptezmv(0,jcap,idrt,io,jo,klen,trisca(1,k1),triscb(1,k1), & - u(1,k1),v(1,k1),1) - call sptezm(0,jcap,idrt,io,jo,klen,trisca(1,k1),d(1,k1),1) - -! call sptezm(0,jcap,idrt,io,jo,1,triscb,z(1,k),1) - write(0,*)' retriving d/z for k=',k,' k1=',k1,' k2=',k2 -! datm%z(3,:) = datm%z(3,:)+2*con_omega/sqrt(1.5) -! call sptezm(0,jcap,idrt,io,jo,klen,datm%z,z,1) - write(0,*)' start get tracer' - do nt=1,ntrac - do k=k1,k2 - dati%i = levs * (2+nt) + 2 + k ! Tracers starting with q - dati%f => trisca(:,k) - call sigio_rrdati(lusig,head,dati,irets) - enddo - call sptezm(0,jcap,idrt,io,jo,klen,trisca(1,k1),trc(1,k1,nt),1) - write(0,*)' retriving d/z for nt=',nt,'ntrac=',ntrac,'k=',k,' k1=',k1,' k2=',k2 - enddo - !t=t/(1+con_fvirt*sh) - write(0,*)' end get tracer,idvm=',idvm,'ijo=',ijo,'ntrac=',ntrac -! -!-- get temp - if (mod(idvm/10,10) == 3) then ! Enthalpy case - allocate(cpi(0:ntrac)) -! write(0,*)'aft read sig, cpi=',head%cpi - cpi(0:ntrac) = head%cpi(1:ntrac+1) -! write(0,*)'cpi=',cpi(0:ntrac) -!$omp parallel do private(k,i,xcp,sumq,n) - do k=k1,k2 - do i=1,ijo - xcp = 0.0 - sumq = 0.0 - do n=1,ntrac - if( cpi(n) /= 0.0 ) then - xcp = xcp + cpi(n)*trc(i,k,n) - sumq = sumq + trc(i,k,n) - endif - enddo - xcp = (1.-sumq)*cpi(0) + xcp - t(i,k) = t(i,k) / xcp ! Now g1 contains T - enddo - enddo - if (allocated(cpi)) deallocate(cpi) - else -!$omp parallel do private(i,k) - do k=k1,k2 - do i=1,ijo - t(i,k) = t(i,k) / (1+con_fvirt*trc(i,k,1)) !get temp from virtual temp - enddo - enddo - endif - endif -! write(0,*)'end comput t' - iret=0 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -end subroutine - -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - subroutine modstuff(km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& - pi,pm,om) -!$$$ Subprogram documentation block -! -! Subprogram: modstuff Compute model coordinate dependent functions -! Prgmmr: Iredell Org: np23 Date: 1999-10-18 -! -! Abstract: This subprogram computes fields which depend on the model coordinate -! such as pressure thickness and vertical velocity. -! -! Program history log: -! 1999-10-18 Mark Iredell -! 2013-04-19 Jun Wang: add option to get pi by using 8byte real computation -! -! Usage: call modstuff(km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& -! pd,pi,pm,os,om,px,py) -! Input argument list: -! km integer number of levels -! idvc integer vertical coordinate id (1 for sigma and 2 for hybrid) -! idsl integer type of sigma structure (1 for phillips or 2 for mean) -! nvcoord integer number of vertical coordinates -! vcoord real (km+1,nvcoord) vertical coordinates -! ps real surface pressure (Pa) -! psx real log surface pressure x-gradient (1/m) -! psy real log surface pressure y-gradient (1/m) -! d real (km) wind divergence (1/s) -! u real (km) x-component wind (m/s) -! v real (km) y-component wind (m/s) -! Output argument list: -! pi real (km+1) interface pressure (Pa) -! pm real (km) mid-layer pressure (Pa) -! om real (km) vertical velocity (Pa/s) -! -! Attributes: -! Language: Fortran 90 -! -!$$$ - use sigio_module, only: sigio_modprd - implicit none - integer,intent(in):: km,idvc,idsl,nvcoord - real,intent(in):: vcoord(km+1,nvcoord) - real,intent(in):: ps,psx,psy - real,intent(in):: u(km),v(km),d(km) -! real,intent(out):: pi(km+1),pm(km) - real*8, intent(out):: pi(km+1),pm(km) - real,intent(out):: om(km) - real*8 ps8,pm8(km),pd8(km),vcoord8(km+1,nvcoord) - real*8 dpmdps(km),dpddps(km),dpidps(km+1),pi8(km+1) - real vgradp,pd(km),px(km),py(km),os - integer k,iret,logk -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ps8=ps - vcoord8=vcoord - call sigio_modprd(1,1,km,nvcoord,idvc,idsl,vcoord8,iret,& - ps=(/ps8/),& - pm=pm8,pd=pd8,dpmdps=dpmdps,dpddps=dpddps) -! -!jw: has to be 8 real for wam - pi8(1)=ps - pm=pm8 -! pd=pd8 - dpidps(1)=1. - do k=1,km - pi8(k+1)=pi8(k)-pd8(k) - dpidps(k+1)=dpidps(k)-dpddps(k) -! if(pi(8)<0.) then -! print *,'in modstuff,pi8=',pi8(k) -! endif - enddo - pi=pi8 -! - os=0 - do k=km,1,-1 - vgradp=u(k)*psx+v(k)*psy - os=os-vgradp*ps*(dpmdps(k)-dpidps(k+1))-d(k)*(pm(k)-pi(k+1)) - om(k)=vgradp*ps*dpmdps(k)+os - os=os-vgradp*ps*(dpidps(k)-dpmdps(k))-d(k)*(pi(k)-pm(k)) - enddo - px=ps*dpmdps*psx - py=ps*dpmdps*psy - end subroutine - -!------------------------------------------------------------------------------- - subroutine modstuff2(im,ix,km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& - pi,pm,om,me) -!$$$ Subprogram documentation block -! -! Subprogram: modstuff Compute model coordinate dependent functions -! Prgmmr: Iredell Org: np23 Date: 1999-10-18 -! -! Abstract: This subprogram computes fields which depend on the model coordinate -! such as pressure thickness and vertical velocity. -! -! Program history log: -! 1999-10-18 Mark Iredell -! 2013-04-19 Jun Wang: add option to get pi by using 8byte real computation -! 2013-08-13 Shrinivas Moorthi - Modified to include im points and thread -! -! Usage: call modstuff(km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& -! pd,pi,pm,os,om,px,py) -! Input argument list: -! im integer - inner computational domain -! ix integer - maximum inner dimension -! km integer number of levels -! idvc integer vertical coordinate id (1 for sigma and 2 for hybrid) -! idsl integer type of sigma structure (1 for phillips or 2 for mean) -! nvcoord integer number of vertical coordinates -! vcoord real (km+1,nvcoord) vertical coordinates -! ps real surface pressure (Pa) -! psx real log surface pressure x-gradient (1/m) -! psy real log surface pressure y-gradient (1/m) -! d real (km) wind divergence (1/s) -! u real (km) x-component wind (m/s) -! v real (km) y-component wind (m/s) -! Output argument list: -! pi real (km+1) interface pressure (Pa) -! pm real (km) mid-layer pressure (Pa) -! om real (km) vertical velocity (Pa/s) -! -! Attributes: -! Language: Fortran 90 -! -!$$$ - use sigio_module, only : sigio_modprd - implicit none - integer, intent(in) :: im,ix,km,idvc,idsl,nvcoord,me - real, intent(in) :: vcoord(km+1,nvcoord) - real, dimension(ix), intent(in) :: ps,psx,psy - real, dimension(ix,km), intent(in) :: u,v,d - real*8, dimension(ix,km+1), intent(out) :: pi - real*8, dimension(ix,km), intent(out) :: pm - real, dimension(ix,km), intent(out) :: om -! real*8, allocatable :: ps8(:), pm8(:,:), pd8(:,:),dpmdps(:,:),dpddps(:,:), & -! dpidps(:,:),pi8(:,:),vcoord8(:,:) -! real, allocatable :: os(:) -! real, allocatable :: pd(:,:),px(:,:), py(:,:), os(:) - -! real vgradpps - - real*8 ps8(ix),pm8(ix,km),pd8(ix,km),vcoord8(km+1,nvcoord) - real*8 dpmdps(ix,km),dpddps(ix,km),dpidps(ix,km+1),pi8(ix,km+1) - real vgradpps,pd(im,km),os(im) -! real vgradpps,pd(im,km),px(im,km),py(im,km),os(im),tem - integer i,k,iret,logk -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ps8 = ps - vcoord8 = vcoord - call sigio_modprd(im,ix,km,nvcoord,idvc,idsl,vcoord8,iret, & - ps=ps8,pd=pd8,dpddps=dpddps,pm=pm8,dpmdps=dpmdps) - -! -! if (me == 0) then -! write(0,*)' pd8=',pd8(1,60:64) -! write(0,*)' pm8=',pm8(1,60:64) -! endif -!jw: has to be 8 real for wam - -!$omp parallel do private(i) - do i=1,im - pi8(i,1) = ps(i) - dpidps(i,1) = 1. - os(i) = 0 - pi(i,1) = pi8(i,1) - enddo - do k=1,km -!$omp parallel do private(i) - do i=1,im - pi8(i,k+1) = pi8(i,k) - pd8(i,k) - dpidps(i,k+1) = dpidps(i,k) - dpddps(i,k) -! if(pi(i,8)<0.) then -! print *,'in modstuff,pi8=',pi8(i,k),' i=',i,' k=',k,' me=',me -! endif - pi(i,k+1) = pi8(i,k+1) - pm(i,k) = pm8(i,k) - enddo - enddo -! - do k=km,1,-1 -!$omp parallel do private(i,vgradpps) - do i=1,im - vgradpps = (u(i,k)*psx(i) + v(i,k)*psy(i)) * ps(i) - - os(i) = os(i) - vgradpps*(dpmdps(i,k)-dpidps(i,k+1)) & - - d(i,k)*(pm(i,k)-pi(i,k+1)) - - om(i,k) = os(i) + vgradpps*dpmdps(i,k) - - os(i) = os(i) - vgradpps*(dpidps(i,k)-dpmdps(i,k)) & - - d(i,k)*(pi(i,k)-pm(i,k)) - enddo - enddo - end subroutine -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - subroutine mptgen(mpirank,mpisize,nd,jt1,jt2,j1,j2,jx,jm,jn) !$$$ Subprogram documentation block ! @@ -1217,296 +773,3 @@ subroutine mptranr4(mpicomm,mpisize,im,ida,idb,& ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine !----------------------------------------------------------------------- - subroutine trssc(jcap,nc,km,ntrac,idvc,idvm,idsl,nvcoord,vcoord, & - cpi,idrt,lonb,latb,ijl,ijn,j1,j2,jc,chgq0, & - szs,sps,st,sd,sz,sq,gfszs,gfsps,gfsp,gfsdp, & - gfst,gfsu,gfsv,gfsq,gfsw) -!$$$ subprogram documentation block -! -! subprogram: trssc transform sigma spectral fields to grid -! prgmmr: iredell org: w/nmc23 date: 92-10-31 -! -! abstract: transforms sigma spectral fields to grid and converts -! log surface pressure to surface pressure and virtual temperature -! to temperature. -! -! program history log: -! 91-10-31 mark iredell -! -! usage: call trssc(jcap,nc,km,ntrac,idvm, -! & idrt,lonb,latb,ijl,j1,j2,jc, -! & szs,sps,st,sd,sz,sq,zs,ps,t,u,v,q) -! input argument list: -! jcap integer spectral truncation -! nc integer first dimension (nc>=(jcap+1)*(jcap+2)) -! km integer number of levels -! ntrac integer number of tracers -! idvm integer mass variable id -! idrt integer data representation type -! lonb integer number of longitudes -! latb integer number of latitudes -! ijl integer horizontal dimension -! j1 integer first latitude -! j2 integer last latitude -! jc integer number of cpus -! szs real (nc) orography -! sps real (nc) log surface pressure -! st real (nc,levs) virtual temperature -! sd real (nc,levs) divergence -! sz real (nc,levs) vorticity -! sq real (nc,levs*ntrac) tracers -! output argument list: -! zs real (ijl) orography -! ps real (ijl) surface pressure -! t real (ijl,km) temperature -! u real (ijl,km) zonal wind -! v real (ijl,km) meridional wind -! q real (ijl,km*ntrac) tracers -! -! subprograms called: -! sptran perform a scalar spherical transform -! -! attributes: -! language: fortran -! -!c$$$ - use gfsio_module -! use gfsio_rst - implicit none - integer,intent(in)::jcap,nc,km,ntrac,idvc,idvm,idsl,nvcoord,idrt,lonb,latb - integer,intent(in)::ijl,ijn,j1,j2,jc,chgq0 - real,intent(in):: szs(nc),sps(nc),st(nc,km),sd(nc,km),sz(nc,km),sq(nc,km*ntrac) - real,intent(in):: cpi(0:ntrac) - real*8,intent(in):: vcoord(km+1,nvcoord) - real,dimension(ijn),intent(inout):: gfszs,gfsps - real,dimension(ijn,km),intent(inout):: gfsp,gfsdp,gfst,gfsu,gfsv,gfsw - real,dimension(ijn,km*ntrac),intent(inout):: gfsq - real zs(ijl),ps(ijl),t(ijl,km),u(ijl,km),v(ijl,km),q(ijl,km*ntrac) - real wi(ijl,km),pi(ijl,km),dpo(ijl,km) - real tvcon,xcp,sumq - integer thermodyn_id,jn,js,is,in - integer jj,jjm,k,n,j,i,ij,lonb2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! spectral transforms - if(j1==732)print*,'sample input to trssc= ',jcap,nc,km,ntrac, & - idvc,idvm,idsl,nvcoord, & - idrt,lonb,latb,ijl,ijn,j1,j2,jc,chgq0 - lonb2=lonb*2 - ij=lonb2*(j2-j1+1) - in=1 - is=1+lonb - call sptran(0,jcap,idrt,lonb,latb,1,1,1,lonb2,lonb2,nc,ijl, & - j1,j2,jc,szs,zs(in),zs(is),1) - call sptran(0,jcap,idrt,lonb,latb,1,1,1,lonb2,lonb2,nc,ijl, & - j1,j2,jc,sps,ps(in),ps(is),1) - call sptran(0,jcap,idrt,lonb,latb,km,1,1,lonb2,lonb2,nc,ijl, & - j1,j2,jc,st,t(in,1),t(is,1),1) - call sptranv(0,jcap,idrt,lonb,latb,km,1,1,lonb2,lonb2,nc,ijl, & - j1,j2,jc,sd,sz,u(in,1),u(is,1),v(in,1),v(is,1),1) - call sptran(0,jcap,idrt,lonb,latb,km*ntrac,1,1,lonb2,lonb2,nc,ijl, & - j1,j2,jc,sq,q(in,1),q(is,1),1) - if(j1==732)then - do k=1,km - do i=1,ijl - if(t(i,k)>400. .or. t(i,k)<100.)print*,'bad T from sptran',i,k,t(i,k) - if(q(i,k)>1.)print*,'bad Q from sptran',i,k,q(i,k) - if(q(i,2*k)>1.)print*,'bad Q from sptran',i,k,q(i,2*k) - if(q(i,3*k)>1.)print*,'bad Q from sptran',i,k,q(i,3*k) - end do - end do - end if - select case(mod(idvm,10)) - case(0,1) - do i=1,ij - ps(i)=1.e3*exp(ps(i)) - enddo - case(2) - do i=1,ij - ps(i)=1.e3*ps(i) - enddo - case default - do i=1,ij - ps(i)=1.e3*exp(ps(i)) - enddo - end select -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - thermodyn_id=mod(idvm/10,10) - if (thermodyn_id == 3) then - do k=1,km - do i=1,ij - t(i,k) = t(i,k)/cpi(0) ! enthalpy (cpt/cpd) - end do - end do -! - endif - - call getomega(jcap,nc,km,idvc,idvm,idrt,idsl, & - nvcoord,vcoord,lonb,latb,ijl,j1,j2,1,sd,sps, & - ps,t,u,v,wi,pi,dpo) - if(j1==732)then - do k=1,km - do i=1,ijl - if(t(i,k)>400. .or. t(i,k)<100.)print*,'bad T after getomega',i,k,t(i,k) - if(q(i,k)>1. )print*,'bad Q after getomega',i,k,q(i,k) - if(q(i,2*k)>1. )print*,'bad Q after getomega',i,2*k,q(i,2*k) - end do - end do - end if - if(thermodyn_id /= 2)then -! convert to surface pressure and temperature - if (thermodyn_id == 3) then - do k=1,km - do i=1,ij - xcp = 0.0 - sumq = 0.0 - do n=1,ntrac - if( cpi(n) .ne. 0.0 ) then - xcp = xcp + cpi(n)*q(i,k+(n-1)*km) - sumq = sumq + q(i,k+(n-1)*km) - endif - enddo - t(i,k) = t(i,k)/((1.-sumq)*cpi(0)+xcp) - end do - end do - - else - tvcon=(461.50/287.05-1.) - t(:,:) = t(:,:)/(1.+tvcon*q(:,1:km)) - endif - end if - if(j1==732)then - do k=1,km - do i=1,ijl - if(t(i,k)>400. .or. t(i,k)<100.)print*,'bad T after Tv to T',i,k,t(i,k) - if(q(i,k)>1.)print*,'bad Q after Tv to T',i,k,q(i,k) - if(q(i,2*k)>1. )print*,'bad Q after Tv to T',i,k,q(i,2*k) - end do - end do - end if -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -!----force tracers to be positive - if (chgq0 == 1) q = max(q, 0.0) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! pass data to gfsdatao - do j=1,j2-j1+1 - jn=j+j1-1 - js=latb+1-jn - jn=(jn-1)*lonb - js=(js-1)*lonb - jj=j*lonb - jjm=(j-1)*lonb - do i=1,lonb - gfszs(i+jn) = zs(i+jjm) - gfsps(i+jn) = ps(i+jjm) - enddo - do i=1,lonb - gfszs(i+js) = zs(i+jj) - gfsps(i+js) = ps(i+jj) - enddo - do k=1,km - do i=1,lonb - gfsdp(i+jn,k) = dpo(i+jjm,k) - gfsp(i+jn,k) = pi(i+jjm,k) - gfst(i+jn,k) = t(i+jjm,k) - gfsu(i+jn,k) = u(i+jjm,k) - gfsv(i+jn,k) = v(i+jjm,k) - gfsw(i+jn,k) = wi(i+jjm,k) - enddo - do i=1,lonb - gfsdp(i+js,k) = dpo(i+jj,k) - gfsp(i+js,k) = pi(i+jj,k) - gfst(i+js,k) = t(i+jj,k) - gfsu(i+js,k) = u(i+jj,k) - gfsv(i+js,k) = v(i+jj,k) - gfsw(i+js,k) = wi(i+jj,k) - enddo - enddo - do k=1,km*ntrac - do i=1,lonb - gfsq(i+jn,k) = q(i+jjm,k) - enddo - do i=1,lonb - gfsq(i+js,k) = q(i+jj,k) - enddo - enddo - enddo - return - end -!----------------------------------------------------------------------- - subroutine getomega(jcap,nc,km,idvc,idvm,idrt,idsl,nvcoord,vcoord, & - lonb,latb,ijn,j1,j2,jc,sd,sps,psi,ti,ui,vi,wi,pm,pd) -!!!!! - use sigio_module, only : sigio_modprd - implicit none - - integer,intent(in):: jcap,nc,km,idvc,idvm,idrt,idsl,nvcoord - integer,intent(in):: lonb,latb,j1,j2,jc,ijn - real*8,intent(in):: vcoord(km+1,nvcoord) - real,intent(in):: sd(nc,km),sps(nc) - real,intent(in):: psi(ijn),ti(ijn,km),ui(ijn,km),vi(ijn,km) - real,intent(out):: wi(ijn,km),pm(ijn,km),pd(ijn,km) - real :: pi(ijn,km+1) - real :: os - real*8 psi8(ijn),ti8(ijn,km),pm8(ijn,km),pd8(ijn,km) - real*8 dpmdps(ijn,km),dpddps(ijn,km),dpidps(ijn,km+1),vgradp,psmean - real di(ijn,km),psx(ijn),psy(ijn) - integer k,i,ij,lonb2,iret,is,in -!----1. spectral transform - lonb2=lonb*2 - ij=lonb2*(j2-j1+1) - in=1 - is=1+lonb - call sptrand(0,jcap,idrt,lonb,latb,1,1,1,lonb2,lonb2,nc,ijn, & - j1,j2,jc,sps,psmean,psx(in),psx(is),psy(in),psy(is),1) - - call sptran(0,jcap,idrt,lonb,latb,km,1,1,lonb2,lonb2,nc,ijn, & - j1,j2,jc,sd,di(in,1),di(is,1),1) - psi8=psi - ti8=ti - - call sigio_modprd(ijn,ijn,km,nvcoord,idvc,idsl,vcoord,iret, & - ps=psi8,t=ti8,pm=pm8,pd=pd8,dpmdps=dpmdps,dpddps=dpddps) - pm=pm8 - pd=pd8 - - select case(mod(idvm,10)) - case(0,1) - continue - case(2) - do i=1,ijn - psx(i)=psx(i)/(psi(i)*1.0e-3) - psy(i)=psy(i)/(psi(i)*1.0e-3) - enddo - case default - do i=1,ijn - psx(i)=psx(i)/psi(i) - psy(i)=psy(i)/psi(i) - enddo - end select - -!----3.omeda from modstuff - do i=1,ijn - pi(i,1)=psi(i) - dpidps(i,1)=1. - enddo - do k=1,km - do i=1,ijn - pi(i,k+1)=pi(i,k)-pd(i,k) - dpidps(i,k+1)=dpidps(i,k)-dpddps(i,k) - enddo - enddo - do i=1,ijn - os=0. - do k=km,1,-1 - vgradp=ui(i,k)*psx(i)+vi(i,k)*psy(i) - os=os-vgradp*psi(i)*(dpmdps(i,k)-dpidps(i,k+1))- & - di(i,k)*(pm(i,k)-pi(i,k+1)) - wi(i,k)=vgradp*psi(i)*dpmdps(i,k)+os - os=os-vgradp*psi(i)*(dpidps(i,k)-dpmdps(i,k))- & - di(i,k)*(pi(i,k)-pm(i,k)) - enddo -! - enddo -!--- - return - end subroutine diff --git a/comupp/src/unipost/GFSPOSTSIG.F b/comupp/src/unipost/GFSPOSTSIG.F new file mode 100644 index 000000000..97f111c8b --- /dev/null +++ b/comupp/src/unipost/GFSPOSTSIG.F @@ -0,0 +1,737 @@ +! Add Iredells subroutine to read sigma files +!------------------------------------------------------------------------------- +subroutine rtsig(lusig,head,k1,k2,kgds,ijo,levs,ntrac,jcap,lnt2,me, & + h,p,px,py,t,u,v,d,trc,iret) +!$$$ Subprogram documentation block +! +! Subprogram: rtsig Read and transform sigma file +! Prgmmr: Iredell Org: np23 Date: 1999-10-18 +! +! Abstract: This subprogram reads a sigma file and transforms +! the fields to a designated global grid. +! +! Program history log: +! 1999-10-18 Mark Iredell +! 2013-04-19 Jun Wang: add option to get tmp and ps(in pascal) +! from enthalpy and ps(cb) option +! 2013-05-06 Shrinivas Moorthi: Initialize midea to 0 +! 2013-05-07 Shrinivas Moorthi: Remove mo3, mct, midea and define io3, ict etc +! correctly and get correct cloud condensate. +! 2013-08-02 Shrinivas Moorthi: Rewrote the whole routine to read the sigma +! file differently and to read all tracers +! Addedd sptezj for two 2d fields +! 2014-02-20 Shrinivas Moorthi: Modified conversion from spectral to grid +! taking advantage of threding in SP library. +! This really speeds up the code +! Also threaded loop for Temperature from Tv + +! +! Usage: call rtsig(lusig,head,k1,k2,kgds,ijo,nct, & +! h,p,px,py,t,tx,ty,u,v,d,z,sh,o3,ct,iret,o,o2) +! Input argument list: +! lusig integer(sigio_intkind) sigma file unit number +! head type(sigio_head) sigma file header +! k1 integer first model level to return +! k2 integer last model level to return +! kgds integer (200) GDS to which to transform +! ijo integer dimension of output fields +! levs integer number of total vertical levels +! ntrac integer number of output tracers +! jcap integer number of waves +! lnt2 integer (jcap+1)*(jcap+2) +! Output argument list: +! h real (ijo) surface orography (m) +! p real (ijo) surface pressure (Pa) +! px real (ijo) log surface pressure x-gradient (1/m) +! py real (ijo) log surface pressure y-gradient (1/m) +! t real (ijo,k1:k2) temperature (K) +! tx real (ijo,k1:k2) virtual temperature x-gradient (K/m) +! ty real (ijo,k1:k2) virtual temperature y-gradient (K/m) +! u real (ijo,k1:k2) x-component wind (m/s) +! v real (ijo,k1:k2) y-component wind (m/s) +! d real (ijo,k1:k2) wind divergence (1/s) +! trc real (ijo,k1:k2,ntrac) tracers +! 1 = specific humidity (kg/kg) +! 2 = Ozone mixing ratio (kg/kg) +! 3 = cloud condensate mixing ratio (kg/kg) +! . +! . +! atomic oxyge, oxygen etc +! +! iret integer return code +! +! Modules used: +! sigio_r_module sigma file I/O +! +! Subprograms called: +! sigio_rrdati read sigma single data field +! sptez scalar spectral transform +! sptezd gradient spectral transform +! sptezm multiple scalar spectral transform +! sptezmv multiple vector spectral transform +! +! Attributes: +! Language: Fortran 90 +! +!$$$ + use sigio_module, only : sigio_intkind, sigio_head + use sigio_r_module, only : sigio_dati, sigio_rrdati + use physcons, only : con_omega, con_fvirt + use omp_lib + implicit none + integer(sigio_intkind),intent(in) :: lusig + type(sigio_head), intent(in) :: head + integer,intent(in) :: k1,k2,kgds(200),ijo,levs,ntrac,jcap,lnt2,me + real,dimension(ijo), intent(out) :: h,p,px,py + real,dimension(ijo,k1:k2),intent(out):: t,u,v,d + real,dimension(ijo,k1:k2,ntrac),intent(out),target :: trc + integer,intent(out) :: iret +! + integer idrt,io,jo,iidea +! integer idrt,io,jo,mo3,mct,iidea,midea + integer(sigio_intkind):: irets +! type(sigio_datm):: datm + type(sigio_dati) dati +! type griddata +! real,dimension(:,:),pointer :: datm +! endtype griddata +! type(griddata),dimension(:),pointer :: datatrc + real, target :: trisca(lnt2,k1:k2+1), triscb(lnt2,k1:k2) + real,dimension(:), allocatable :: cpi + real,dimension(:,:),allocatable :: wrk + integer io3,ict,jct,n,i,k,jc,nt + integer idvm, klen + real pmean,sumq,xcp +! integer, parameter :: latch=20 +! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! Determine output grid + idrt = kgds(1) + if(kgds(1) == 0 .and. kgds(4) < 90000) idrt = 256 + io = kgds(2) + jo = kgds(3) +! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! Read and transform surface fields + iret = 1 + if (me == 0) then + print*,'Debug rtsig= ',lusig,k1,k2,ijo,kgds(1:20) + endif + + idvm = head%idvm +! jc = omp_get_num_threads() +! write(0,*)' in RTSIG lnt2=',lnt2,' threads=',jc,' latch=',latch, & +! ' jcap=',jcap,' io=',io,' jo=',jo,' ijo=',ijo +! + if (k2 < k1) return + + dati%i = 1 ! hs + dati%f => trisca(:,k1) + call sigio_rrdati(lusig,head,dati,irets) + if(irets /= 0) return + +! call sptez(0,jcap,idrt,io,jo,trisca(1,k1),h,1) +! call sptez(0,jcap,idrt,io,jo,dats%hs,h,1) +! call sptez(0,jcap,idrt,io,jo,dats%ps,p,1) +! call sptezj(jcap,lnt2,1,idrt,io,jo,jc,trisca,h,latch,1) +! + dati%i = 2 ! Surface pressure + dati%f => trisca(:,k1+1) + call sigio_rrdati(lusig,head,dati,irets) + if(irets /= 0) return +! +! call sptez(0,jcap,idrt,io,jo,trisca(1,k1),p,1) +! call sptezj(jcap,lnt2,1,idrt,io,jo,jc,trisca,p,latch,1) +!-- + allocate(wrk(ijo,2)) + call sptezm(0,jcap,idrt,io,jo,2,trisca(1,k1),wrk,1) + if( mod(idvm,10) < 2) then +!$omp parallel do private(i) + do i=1,ijo + h(i) = wrk(i,1) + p(i) = 1.e3*exp(wrk(i,2)) +! p(i) = 1.e3*exp(p(i)) + enddo + elseif(mod(idvm,10) == 2) then +!$omp parallel do private(i) + do i=1,ijo + h(i) = wrk(i,1) + p(i) = 1000.*wrk(i,2) +! p(i) = 1000.*p(i) + enddo + endif + if (allocated(wrk)) deallocate(wrk) + + call sptezd(0,jcap,idrt,io,jo,trisca(1,k1+1),pmean,px,py,1) + iret = 0 + +! if (k2 < k1) return + +! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! Read and transform fields on levels k1 through k2 + iret = 2 + if (k2 >= k1) then + klen = k2-k1+1 + do k=k1,k2 + write(0,*)' retriving T for k=',k,' k1=',k1,' k2=',k2 + dati%i = k + 2 ! Virtual Temperature or CpT + dati%f => trisca(:,k) + + call sigio_rrdati(lusig,head,dati,iret) + enddo + call sptezm(0,jcap,idrt,io,jo,klen,trisca(1,k1),t(1,k1),1) +! call sptezm(0,jcap,idrt,io,jo,klen,trisca,t,1) + do k=k1,k2 + dati%i = levs + 2 + (k-1) * 2 + 1 ! Divergence + dati%f => trisca(:,k) + call sigio_rrdati(lusig,head,dati,irets) + if(irets /= 0) return + dati%i = levs + 2 + (k-1) * 2 + 2 ! Vorticity + dati%f => triscb(:,k) + call sigio_rrdati(lusig,head,dati,irets) + if(irets /= 0) return + enddo + call sptezmv(0,jcap,idrt,io,jo,klen,trisca(1,k1),triscb(1,k1), & + u(1,k1),v(1,k1),1) + call sptezm(0,jcap,idrt,io,jo,klen,trisca(1,k1),d(1,k1),1) + +! call sptezm(0,jcap,idrt,io,jo,1,triscb,z(1,k),1) + write(0,*)' retriving d/z for k=',k,' k1=',k1,' k2=',k2 +! datm%z(3,:) = datm%z(3,:)+2*con_omega/sqrt(1.5) +! call sptezm(0,jcap,idrt,io,jo,klen,datm%z,z,1) + write(0,*)' start get tracer' + do nt=1,ntrac + do k=k1,k2 + dati%i = levs * (2+nt) + 2 + k ! Tracers starting with q + dati%f => trisca(:,k) + call sigio_rrdati(lusig,head,dati,irets) + enddo + call sptezm(0,jcap,idrt,io,jo,klen,trisca(1,k1),trc(1,k1,nt),1) + write(0,*)' retriving d/z for nt=',nt,'ntrac=',ntrac,'k=',k,' k1=',k1,' k2=',k2 + enddo + !t=t/(1+con_fvirt*sh) + write(0,*)' end get tracer,idvm=',idvm,'ijo=',ijo,'ntrac=',ntrac +! +!-- get temp + if (mod(idvm/10,10) == 3) then ! Enthalpy case + allocate(cpi(0:ntrac)) +! write(0,*)'aft read sig, cpi=',head%cpi + cpi(0:ntrac) = head%cpi(1:ntrac+1) +! write(0,*)'cpi=',cpi(0:ntrac) +!$omp parallel do private(k,i,xcp,sumq,n) + do k=k1,k2 + do i=1,ijo + xcp = 0.0 + sumq = 0.0 + do n=1,ntrac + if( cpi(n) /= 0.0 ) then + xcp = xcp + cpi(n)*trc(i,k,n) + sumq = sumq + trc(i,k,n) + endif + enddo + xcp = (1.-sumq)*cpi(0) + xcp + t(i,k) = t(i,k) / xcp ! Now g1 contains T + enddo + enddo + if (allocated(cpi)) deallocate(cpi) + else +!$omp parallel do private(i,k) + do k=k1,k2 + do i=1,ijo + t(i,k) = t(i,k) / (1+con_fvirt*trc(i,k,1)) !get temp from virtual temp + enddo + enddo + endif + endif +! write(0,*)'end comput t' + iret=0 +! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +end subroutine + +! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + subroutine modstuff(km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& + pi,pm,om) +!$$$ Subprogram documentation block +! +! Subprogram: modstuff Compute model coordinate dependent functions +! Prgmmr: Iredell Org: np23 Date: 1999-10-18 +! +! Abstract: This subprogram computes fields which depend on the model coordinate +! such as pressure thickness and vertical velocity. +! +! Program history log: +! 1999-10-18 Mark Iredell +! 2013-04-19 Jun Wang: add option to get pi by using 8byte real computation +! +! Usage: call modstuff(km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& +! pd,pi,pm,os,om,px,py) +! Input argument list: +! km integer number of levels +! idvc integer vertical coordinate id (1 for sigma and 2 for hybrid) +! idsl integer type of sigma structure (1 for phillips or 2 for mean) +! nvcoord integer number of vertical coordinates +! vcoord real (km+1,nvcoord) vertical coordinates +! ps real surface pressure (Pa) +! psx real log surface pressure x-gradient (1/m) +! psy real log surface pressure y-gradient (1/m) +! d real (km) wind divergence (1/s) +! u real (km) x-component wind (m/s) +! v real (km) y-component wind (m/s) +! Output argument list: +! pi real (km+1) interface pressure (Pa) +! pm real (km) mid-layer pressure (Pa) +! om real (km) vertical velocity (Pa/s) +! +! Attributes: +! Language: Fortran 90 +! +!$$$ + use sigio_module, only: sigio_modprd + implicit none + integer,intent(in):: km,idvc,idsl,nvcoord + real,intent(in):: vcoord(km+1,nvcoord) + real,intent(in):: ps,psx,psy + real,intent(in):: u(km),v(km),d(km) +! real,intent(out):: pi(km+1),pm(km) + real*8, intent(out):: pi(km+1),pm(km) + real,intent(out):: om(km) + real*8 ps8,pm8(km),pd8(km),vcoord8(km+1,nvcoord) + real*8 dpmdps(km),dpddps(km),dpidps(km+1),pi8(km+1) + real vgradp,pd(km),px(km),py(km),os + integer k,iret,logk +! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + ps8=ps + vcoord8=vcoord + call sigio_modprd(1,1,km,nvcoord,idvc,idsl,vcoord8,iret,& + ps=(/ps8/),& + pm=pm8,pd=pd8,dpmdps=dpmdps,dpddps=dpddps) +! +!jw: has to be 8 real for wam + pi8(1)=ps + pm=pm8 +! pd=pd8 + dpidps(1)=1. + do k=1,km + pi8(k+1)=pi8(k)-pd8(k) + dpidps(k+1)=dpidps(k)-dpddps(k) +! if(pi(8)<0.) then +! print *,'in modstuff,pi8=',pi8(k) +! endif + enddo + pi=pi8 +! + os=0 + do k=km,1,-1 + vgradp=u(k)*psx+v(k)*psy + os=os-vgradp*ps*(dpmdps(k)-dpidps(k+1))-d(k)*(pm(k)-pi(k+1)) + om(k)=vgradp*ps*dpmdps(k)+os + os=os-vgradp*ps*(dpidps(k)-dpmdps(k))-d(k)*(pi(k)-pm(k)) + enddo + px=ps*dpmdps*psx + py=ps*dpmdps*psy + end subroutine + +!------------------------------------------------------------------------------- + subroutine modstuff2(im,ix,km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& + pi,pm,om,me) +!$$$ Subprogram documentation block +! +! Subprogram: modstuff Compute model coordinate dependent functions +! Prgmmr: Iredell Org: np23 Date: 1999-10-18 +! +! Abstract: This subprogram computes fields which depend on the model coordinate +! such as pressure thickness and vertical velocity. +! +! Program history log: +! 1999-10-18 Mark Iredell +! 2013-04-19 Jun Wang: add option to get pi by using 8byte real computation +! 2013-08-13 Shrinivas Moorthi - Modified to include im points and thread +! +! Usage: call modstuff(km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& +! pd,pi,pm,os,om,px,py) +! Input argument list: +! im integer - inner computational domain +! ix integer - maximum inner dimension +! km integer number of levels +! idvc integer vertical coordinate id (1 for sigma and 2 for hybrid) +! idsl integer type of sigma structure (1 for phillips or 2 for mean) +! nvcoord integer number of vertical coordinates +! vcoord real (km+1,nvcoord) vertical coordinates +! ps real surface pressure (Pa) +! psx real log surface pressure x-gradient (1/m) +! psy real log surface pressure y-gradient (1/m) +! d real (km) wind divergence (1/s) +! u real (km) x-component wind (m/s) +! v real (km) y-component wind (m/s) +! Output argument list: +! pi real (km+1) interface pressure (Pa) +! pm real (km) mid-layer pressure (Pa) +! om real (km) vertical velocity (Pa/s) +! +! Attributes: +! Language: Fortran 90 +! +!$$$ + use sigio_module, only : sigio_modprd + implicit none + integer, intent(in) :: im,ix,km,idvc,idsl,nvcoord,me + real, intent(in) :: vcoord(km+1,nvcoord) + real, dimension(ix), intent(in) :: ps,psx,psy + real, dimension(ix,km), intent(in) :: u,v,d + real*8, dimension(ix,km+1), intent(out) :: pi + real*8, dimension(ix,km), intent(out) :: pm + real, dimension(ix,km), intent(out) :: om +! real*8, allocatable :: ps8(:), pm8(:,:), pd8(:,:),dpmdps(:,:),dpddps(:,:), & +! dpidps(:,:),pi8(:,:),vcoord8(:,:) +! real, allocatable :: os(:) +! real, allocatable :: pd(:,:),px(:,:), py(:,:), os(:) + +! real vgradpps + + real*8 ps8(ix),pm8(ix,km),pd8(ix,km),vcoord8(km+1,nvcoord) + real*8 dpmdps(ix,km),dpddps(ix,km),dpidps(ix,km+1),pi8(ix,km+1) + real vgradpps,pd(im,km),os(im) +! real vgradpps,pd(im,km),px(im,km),py(im,km),os(im),tem + integer i,k,iret,logk +! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + ps8 = ps + vcoord8 = vcoord + call sigio_modprd(im,ix,km,nvcoord,idvc,idsl,vcoord8,iret, & + ps=ps8,pd=pd8,dpddps=dpddps,pm=pm8,dpmdps=dpmdps) + +! +! if (me == 0) then +! write(0,*)' pd8=',pd8(1,60:64) +! write(0,*)' pm8=',pm8(1,60:64) +! endif +!jw: has to be 8 real for wam + +!$omp parallel do private(i) + do i=1,im + pi8(i,1) = ps(i) + dpidps(i,1) = 1. + os(i) = 0 + pi(i,1) = pi8(i,1) + enddo + do k=1,km +!$omp parallel do private(i) + do i=1,im + pi8(i,k+1) = pi8(i,k) - pd8(i,k) + dpidps(i,k+1) = dpidps(i,k) - dpddps(i,k) +! if(pi(i,8)<0.) then +! print *,'in modstuff,pi8=',pi8(i,k),' i=',i,' k=',k,' me=',me +! endif + pi(i,k+1) = pi8(i,k+1) + pm(i,k) = pm8(i,k) + enddo + enddo +! + do k=km,1,-1 +!$omp parallel do private(i,vgradpps) + do i=1,im + vgradpps = (u(i,k)*psx(i) + v(i,k)*psy(i)) * ps(i) + + os(i) = os(i) - vgradpps*(dpmdps(i,k)-dpidps(i,k+1)) & + - d(i,k)*(pm(i,k)-pi(i,k+1)) + + om(i,k) = os(i) + vgradpps*dpmdps(i,k) + + os(i) = os(i) - vgradpps*(dpidps(i,k)-dpmdps(i,k)) & + - d(i,k)*(pi(i,k)-pm(i,k)) + enddo + enddo + end subroutine + +!----------------------------------------------------------------------- + subroutine trssc(jcap,nc,km,ntrac,idvc,idvm,idsl,nvcoord,vcoord, & + cpi,idrt,lonb,latb,ijl,ijn,j1,j2,jc,chgq0, & + szs,sps,st,sd,sz,sq,gfszs,gfsps,gfsp,gfsdp, & + gfst,gfsu,gfsv,gfsq,gfsw) +!$$$ subprogram documentation block +! +! subprogram: trssc transform sigma spectral fields to grid +! prgmmr: iredell org: w/nmc23 date: 92-10-31 +! +! abstract: transforms sigma spectral fields to grid and converts +! log surface pressure to surface pressure and virtual temperature +! to temperature. +! +! program history log: +! 91-10-31 mark iredell +! +! usage: call trssc(jcap,nc,km,ntrac,idvm, +! & idrt,lonb,latb,ijl,j1,j2,jc, +! & szs,sps,st,sd,sz,sq,zs,ps,t,u,v,q) +! input argument list: +! jcap integer spectral truncation +! nc integer first dimension (nc>=(jcap+1)*(jcap+2)) +! km integer number of levels +! ntrac integer number of tracers +! idvm integer mass variable id +! idrt integer data representation type +! lonb integer number of longitudes +! latb integer number of latitudes +! ijl integer horizontal dimension +! j1 integer first latitude +! j2 integer last latitude +! jc integer number of cpus +! szs real (nc) orography +! sps real (nc) log surface pressure +! st real (nc,levs) virtual temperature +! sd real (nc,levs) divergence +! sz real (nc,levs) vorticity +! sq real (nc,levs*ntrac) tracers +! output argument list: +! zs real (ijl) orography +! ps real (ijl) surface pressure +! t real (ijl,km) temperature +! u real (ijl,km) zonal wind +! v real (ijl,km) meridional wind +! q real (ijl,km*ntrac) tracers +! +! subprograms called: +! sptran perform a scalar spherical transform +! +! attributes: +! language: fortran +! +!c$$$ + use gfsio_module +! use gfsio_rst + implicit none + integer,intent(in)::jcap,nc,km,ntrac,idvc,idvm,idsl,nvcoord,idrt,lonb,latb + integer,intent(in)::ijl,ijn,j1,j2,jc,chgq0 + real,intent(in):: szs(nc),sps(nc),st(nc,km),sd(nc,km),sz(nc,km),sq(nc,km*ntrac) + real,intent(in):: cpi(0:ntrac) + real*8,intent(in):: vcoord(km+1,nvcoord) + real,dimension(ijn),intent(inout):: gfszs,gfsps + real,dimension(ijn,km),intent(inout):: gfsp,gfsdp,gfst,gfsu,gfsv,gfsw + real,dimension(ijn,km*ntrac),intent(inout):: gfsq + real zs(ijl),ps(ijl),t(ijl,km),u(ijl,km),v(ijl,km),q(ijl,km*ntrac) + real wi(ijl,km),pi(ijl,km),dpo(ijl,km) + real tvcon,xcp,sumq + integer thermodyn_id,jn,js,is,in + integer jj,jjm,k,n,j,i,ij,lonb2 +! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! spectral transforms + if(j1==732)print*,'sample input to trssc= ',jcap,nc,km,ntrac, & + idvc,idvm,idsl,nvcoord, & + idrt,lonb,latb,ijl,ijn,j1,j2,jc,chgq0 + lonb2=lonb*2 + ij=lonb2*(j2-j1+1) + in=1 + is=1+lonb + call sptran(0,jcap,idrt,lonb,latb,1,1,1,lonb2,lonb2,nc,ijl, & + j1,j2,jc,szs,zs(in),zs(is),1) + call sptran(0,jcap,idrt,lonb,latb,1,1,1,lonb2,lonb2,nc,ijl, & + j1,j2,jc,sps,ps(in),ps(is),1) + call sptran(0,jcap,idrt,lonb,latb,km,1,1,lonb2,lonb2,nc,ijl, & + j1,j2,jc,st,t(in,1),t(is,1),1) + call sptranv(0,jcap,idrt,lonb,latb,km,1,1,lonb2,lonb2,nc,ijl, & + j1,j2,jc,sd,sz,u(in,1),u(is,1),v(in,1),v(is,1),1) + call sptran(0,jcap,idrt,lonb,latb,km*ntrac,1,1,lonb2,lonb2,nc,ijl, & + j1,j2,jc,sq,q(in,1),q(is,1),1) + if(j1==732)then + do k=1,km + do i=1,ijl + if(t(i,k)>400. .or. t(i,k)<100.)print*,'bad T from sptran',i,k,t(i,k) + if(q(i,k)>1.)print*,'bad Q from sptran',i,k,q(i,k) + if(q(i,2*k)>1.)print*,'bad Q from sptran',i,k,q(i,2*k) + if(q(i,3*k)>1.)print*,'bad Q from sptran',i,k,q(i,3*k) + end do + end do + end if + select case(mod(idvm,10)) + case(0,1) + do i=1,ij + ps(i)=1.e3*exp(ps(i)) + enddo + case(2) + do i=1,ij + ps(i)=1.e3*ps(i) + enddo + case default + do i=1,ij + ps(i)=1.e3*exp(ps(i)) + enddo + end select +! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + thermodyn_id=mod(idvm/10,10) + if (thermodyn_id == 3) then + do k=1,km + do i=1,ij + t(i,k) = t(i,k)/cpi(0) ! enthalpy (cpt/cpd) + end do + end do +! + endif + + call getomega(jcap,nc,km,idvc,idvm,idrt,idsl, & + nvcoord,vcoord,lonb,latb,ijl,j1,j2,1,sd,sps, & + ps,t,u,v,wi,pi,dpo) + if(j1==732)then + do k=1,km + do i=1,ijl + if(t(i,k)>400. .or. t(i,k)<100.)print*,'bad T after getomega',i,k,t(i,k) + if(q(i,k)>1. )print*,'bad Q after getomega',i,k,q(i,k) + if(q(i,2*k)>1. )print*,'bad Q after getomega',i,2*k,q(i,2*k) + end do + end do + end if + if(thermodyn_id /= 2)then +! convert to surface pressure and temperature + if (thermodyn_id == 3) then + do k=1,km + do i=1,ij + xcp = 0.0 + sumq = 0.0 + do n=1,ntrac + if( cpi(n) .ne. 0.0 ) then + xcp = xcp + cpi(n)*q(i,k+(n-1)*km) + sumq = sumq + q(i,k+(n-1)*km) + endif + enddo + t(i,k) = t(i,k)/((1.-sumq)*cpi(0)+xcp) + end do + end do + + else + tvcon=(461.50/287.05-1.) + t(:,:) = t(:,:)/(1.+tvcon*q(:,1:km)) + endif + end if + if(j1==732)then + do k=1,km + do i=1,ijl + if(t(i,k)>400. .or. t(i,k)<100.)print*,'bad T after Tv to T',i,k,t(i,k) + if(q(i,k)>1.)print*,'bad Q after Tv to T',i,k,q(i,k) + if(q(i,2*k)>1. )print*,'bad Q after Tv to T',i,k,q(i,2*k) + end do + end do + end if +! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +!----force tracers to be positive + if (chgq0 == 1) q = max(q, 0.0) +! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! pass data to gfsdatao + do j=1,j2-j1+1 + jn=j+j1-1 + js=latb+1-jn + jn=(jn-1)*lonb + js=(js-1)*lonb + jj=j*lonb + jjm=(j-1)*lonb + do i=1,lonb + gfszs(i+jn) = zs(i+jjm) + gfsps(i+jn) = ps(i+jjm) + enddo + do i=1,lonb + gfszs(i+js) = zs(i+jj) + gfsps(i+js) = ps(i+jj) + enddo + do k=1,km + do i=1,lonb + gfsdp(i+jn,k) = dpo(i+jjm,k) + gfsp(i+jn,k) = pi(i+jjm,k) + gfst(i+jn,k) = t(i+jjm,k) + gfsu(i+jn,k) = u(i+jjm,k) + gfsv(i+jn,k) = v(i+jjm,k) + gfsw(i+jn,k) = wi(i+jjm,k) + enddo + do i=1,lonb + gfsdp(i+js,k) = dpo(i+jj,k) + gfsp(i+js,k) = pi(i+jj,k) + gfst(i+js,k) = t(i+jj,k) + gfsu(i+js,k) = u(i+jj,k) + gfsv(i+js,k) = v(i+jj,k) + gfsw(i+js,k) = wi(i+jj,k) + enddo + enddo + do k=1,km*ntrac + do i=1,lonb + gfsq(i+jn,k) = q(i+jjm,k) + enddo + do i=1,lonb + gfsq(i+js,k) = q(i+jj,k) + enddo + enddo + enddo + return + end +!----------------------------------------------------------------------- + subroutine getomega(jcap,nc,km,idvc,idvm,idrt,idsl,nvcoord,vcoord, & + lonb,latb,ijn,j1,j2,jc,sd,sps,psi,ti,ui,vi,wi,pm,pd) +!!!!! + use sigio_module, only : sigio_modprd + implicit none + + integer,intent(in):: jcap,nc,km,idvc,idvm,idrt,idsl,nvcoord + integer,intent(in):: lonb,latb,j1,j2,jc,ijn + real*8,intent(in):: vcoord(km+1,nvcoord) + real,intent(in):: sd(nc,km),sps(nc) + real,intent(in):: psi(ijn),ti(ijn,km),ui(ijn,km),vi(ijn,km) + real,intent(out):: wi(ijn,km),pm(ijn,km),pd(ijn,km) + real :: pi(ijn,km+1) + real :: os + real*8 psi8(ijn),ti8(ijn,km),pm8(ijn,km),pd8(ijn,km) + real*8 dpmdps(ijn,km),dpddps(ijn,km),dpidps(ijn,km+1),vgradp,psmean + real di(ijn,km),psx(ijn),psy(ijn) + integer k,i,ij,lonb2,iret,is,in +!----1. spectral transform + lonb2=lonb*2 + ij=lonb2*(j2-j1+1) + in=1 + is=1+lonb + call sptrand(0,jcap,idrt,lonb,latb,1,1,1,lonb2,lonb2,nc,ijn, & + j1,j2,jc,sps,psmean,psx(in),psx(is),psy(in),psy(is),1) + + call sptran(0,jcap,idrt,lonb,latb,km,1,1,lonb2,lonb2,nc,ijn, & + j1,j2,jc,sd,di(in,1),di(is,1),1) + psi8=psi + ti8=ti + + call sigio_modprd(ijn,ijn,km,nvcoord,idvc,idsl,vcoord,iret, & + ps=psi8,t=ti8,pm=pm8,pd=pd8,dpmdps=dpmdps,dpddps=dpddps) + pm=pm8 + pd=pd8 + + select case(mod(idvm,10)) + case(0,1) + continue + case(2) + do i=1,ijn + psx(i)=psx(i)/(psi(i)*1.0e-3) + psy(i)=psy(i)/(psi(i)*1.0e-3) + enddo + case default + do i=1,ijn + psx(i)=psx(i)/psi(i) + psy(i)=psy(i)/psi(i) + enddo + end select + +!----3.omeda from modstuff + do i=1,ijn + pi(i,1)=psi(i) + dpidps(i,1)=1. + enddo + do k=1,km + do i=1,ijn + pi(i,k+1)=pi(i,k)-pd(i,k) + dpidps(i,k+1)=dpidps(i,k)-dpddps(i,k) + enddo + enddo + do i=1,ijn + os=0. + do k=km,1,-1 + vgradp=ui(i,k)*psx(i)+vi(i,k)*psy(i) + os=os-vgradp*psi(i)*(dpmdps(i,k)-dpidps(i,k+1))- & + di(i,k)*(pm(i,k)-pi(i,k+1)) + wi(i,k)=vgradp*psi(i)*dpmdps(i,k)+os + os=os-vgradp*psi(i)*(dpidps(i,k)-dpmdps(i,k))- & + di(i,k)*(pi(i,k)-pm(i,k)) + enddo +! + enddo +!--- + return + end subroutine diff --git a/comupp/src/unipost/INITPOST.F b/comupp/src/unipost/INITPOST.F index 7b77cfd52..90aa41557 100644 --- a/comupp/src/unipost/INITPOST.F +++ b/comupp/src/unipost/INITPOST.F @@ -42,24 +42,27 @@ SUBROUTINE INITPOST ! LANGUAGE: FORTRAN ! MACHINE : CRAY C-90 !$$$ - use vrbls4d, only: dust + use vrbls4d, only: dust, smoke use vrbls3d, only: t, u, uh, v, vh, wh, q, pmid, t, omga, pint, alpint, & qqr, qqs, qqi, qqg, qqnw, qqni,qqnr, cwm, qqw, qqi, qqr, qqs, extcof55,& f_ice, f_rain, f_rimef, q2, zint, zmid, cfr, cfr_raw, REF_10CM, & - qqnwfa,qqnifa + qqnwfa,qqnifa,taod5503d,aextc55 use vrbls2d, only: tmax, qrmax, htop, hbot, cuppt, fis, cfrach, cfracl, & sr, cfrach, cfracm, wspd10max, w_up_max, w_dn_max, w_mean, refd_max, & - up_heli_max, up_heli_max16, grpl_max, up_heli, up_heli16, ltg1_max, & + up_heli_max, up_heli_max16, grpl_max, up_heli, up_heli16, & + up_heli_min,up_heli_min16,up_heli_max02,up_heli_min02, & + up_heli_max03,up_heli_min03,rel_vort_max,rel_vort_max01, & + wspd10umax,wspd10vmax,refdm10c_max,hail_max2d,hail_maxk1,ltg1_max, & ltg2_max, ltg3_max, nci_ltg, nca_ltg, nci_wq, nca_wq, nci_refd, & u10, v10, th10, q10, tshltr, mrshltr, & nca_refd, qv2m, qshltr, smstav, smstot, ssroff, bgroff, sfcevp, & sfcexc, vegfrc, acsnow, cmc, sst, thz0, qz0, uz0, vz0, qs, qvg, & z0, ustar, akhs, akms, radot, ths, acsnom, cuprec, ancprc, acprec, & rainc_bucket, pcp_bucket, cprate, prec, snownc, snow_bucket, & - graup_bucket, swddni, swddif, acgraup, acfrain, & + graup_bucket, swddni, swddif, mean_frp, acgraup, acfrain, & graupelnc, albedo, rswin, rswout, swdnbc, swddnic, & swddifc, swupbc, swupt, czen, czmean, rlwin, lwdnbc, lwupbc, & - rainnc_bucket, taod5502d, aerasy2d, aerssa2d, & + rainnc_bucket, taod5502d, aerasy2d, aerssa2d, lwp, iwp, & sigt4, rlwtoa, rswinc, aswin, aswout, alwin, alwout, alwtoa, aswtoa, & tg, soiltb, twbs, qwbs,grnflx, sfcshx, sfclhx, subshx, snopcx, & sfcuvx, potevp, ncfrcv, ncfrst, sno, si, pctsno, snonc, tsnow, & @@ -130,6 +133,7 @@ SUBROUTINE INITPOST real sun_zenith,sun_azimuth, ptop_low, ptop_mid, ptop_high real watericetotal, cloud_def_p, radius real totcount, cloudcount + real delta_theta4gust ! ! !*********************************************************************** @@ -1045,6 +1049,31 @@ SUBROUTINE INITPOST ENDDO ENDIF ! IF(MODELNAME == 'RAPR')THEN +! +! E. James - 8 Dec 2017: this is for HRRR-smoke; it needs to be after ZINT +! is defined. +! + if(imp_physics.eq.28) then + VarName='AOD3D_SMOKE' + call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & + IM+1,1,JM+1,LM+1,IM, JS,JE,LM) + do l = 1, lm + do j = jsta_2l, jend_2u + do i = 1, im + taod5503d ( i, j, l ) = dum3d ( i, j, l ) + dz = ZINT( i, j, l ) - ZINT( i, j, l+1 ) + aextc55 ( i, j, l ) = taod5503d ( i, j, l ) / dz + if(i.eq.im/2.and.j.eq.(jsta+jend)/2)print*,'sample TAOD5503D= ', & + i,j,l,TAOD5503D ( i, j, l ) + if(i.eq.im/2.and.j.eq.(jsta+jend)/2)print*,'sample dz= ', & + dz + if(i.eq.im/2.and.j.eq.(jsta+jend)/2)print*,'sample AEXTC55= ', & + i,j,l,AEXTC55 ( i, j, l ) + end do + end do + end do + end if + ! get 3-d soil variables VarName='SMOIS' call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & @@ -1221,6 +1250,33 @@ SUBROUTINE INITPOST #endif ENDIF ! NCAR or RAPR +! GRAUP +! E. James - 8 Dec 2017: SMOKE from WRF-CHEM +! + VarName='smoke' + call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & + IM+1,1,JM+1,LM+1,IM,JS,JE,LM) + do l = 1,lm + do j = jsta_2l, jend_2u + do i = 1, im + SMOKE ( i, j, l, 1) = dum3d ( i, j, l ) + end do + end do + end do +!! +!! E. James - 8 Dec 2017: tracer_2a is anthropogenic aerosol, not used +!! +! VarName='tracer_2a' +! call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & +! IM+1,1,JM+1,LM+1,IM,JS,JE,LM) +! do l=1,lm +! do j = jsta_2l, jend_2u +! do i = 1, im +! SMOKE ( i, j, l, 2) = dum3d ( i, j, l ) +! end do +! end do +! end do + ! CRA DUST FROM WRF-CHEM if(1==2) then VarName='DUST_1' @@ -1363,6 +1419,26 @@ SUBROUTINE INITPOST end do ! print*,'WSPD10MAX at ',ii,jj,' = ',WSPD10MAX(ii,jj) + VarName='WSPD10UMAX' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + WSPD10UMAX ( i, j ) = dummy ( i, j ) + end do + end do +! print*,'WSPD10UMAX at ',ii,jj,' = ',WSPD10UMAX(ii,jj) + + VarName='WSPD10VMAX' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + WSPD10VMAX ( i, j ) = dummy ( i, j ) + end do + end do +! print*,'WSPD10VMAX at ',ii,jj,' = ',WSPD10VMAX(ii,jj) + VarName='W_UP_MAX' call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & IM,1,JM,1,IM,JS,JE,1) @@ -1404,6 +1480,17 @@ SUBROUTINE INITPOST end do ! print*,'REFD_MAX at ',ii,jj,' = ',REFD_MAX(ii,jj) + VarName='REFDM10C_MAX' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + REFDM10C_MAX ( i, j ) = dummy ( i, j ) + end do + end do +! print*,'REFDM10C_MAX at ',ii,jj,' = ',REFDM10C_MAX(ii,jj) + + VarName='UP_HELI_MAX' call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & IM,1,JM,1,IM,JS,JE,1) @@ -1424,6 +1511,86 @@ SUBROUTINE INITPOST end do ! print*,'UP_HELI_MAX16 at ',ii,jj,' = ',UP_HELI_MAX16(ii,jj) + VarName='UP_HELI_MIN' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + UP_HELI_MIN ( i, j ) = dummy ( i, j ) + end do + end do +! print*,'UP_HELI_MIN at ',ii,jj,' = ',UP_HELI_MIN(ii,jj) + + VarName='UP_HELI_MIN16' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + UP_HELI_MIN16 ( i, j ) = dummy ( i, j ) + end do + end do +! print*,'UP_HELI_MIN16 at ',ii,jj,' = ',UP_HELI_MIN16(ii,jj) + + VarName='UP_HELI_MAX02' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + UP_HELI_MAX02 ( i, j ) = dummy ( i, j ) + end do + end do +! print*,'UP_HELI_MAX02 at ',ii,jj,' = ',UP_HELI_MAX02(ii,jj) + + VarName='UP_HELI_MIN02' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + UP_HELI_MIN02 ( i, j ) = dummy ( i, j ) + end do + end do +! print*,'UP_HELI_MIN02 at ',ii,jj,' = ',UP_HELI_MIN02(ii,jj) + + VarName='UP_HELI_MAX03' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + UP_HELI_MAX03 ( i, j ) = dummy ( i, j ) + end do + end do +! print*,'UP_HELI_MAX03 at ',ii,jj,' = ',UP_HELI_MAX03(ii,jj) + + VarName='UP_HELI_MIN03' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + UP_HELI_MIN03 ( i, j ) = dummy ( i, j ) + end do + end do +! print*,'UP_HELI_MIN03 at ',ii,jj,' = ',UP_HELI_MIN03(ii,jj) + + VarName='REL_VORT_MAX' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + REL_VORT_MAX ( i, j ) = dummy ( i, j ) + end do + end do +! print*,'REL_VORT_MAX at ',ii,jj,' = ',REL_VORT_MAX(ii,jj) + + VarName='REL_VORT_MAX01' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + REL_VORT_MAX01 ( i, j ) = dummy ( i, j ) + end do + end do +! print*,'REL_VORT_MAX01 at ',ii,jj,' = ',REL_VORT_MAX01(ii,jj) + VarName='GRPL_MAX' call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & IM,1,JM,1,IM,JS,JE,1) @@ -1434,6 +1601,27 @@ SUBROUTINE INITPOST end do ! print*,'GRPL_MAX at ',ii,jj,' = ',GRPL_MAX(ii,jj) + + VarName='HAIL_MAXK1' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + HAIL_MAXK1 ( i, j ) = dummy ( i, j ) + end do + end do +! print*,'HAIL_MAXK1 at ',ii,jj,' = ',HAIL_MAXK1(ii,jj) + + VarName='HAIL_MAX2D' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + HAIL_MAX2D ( i, j ) = dummy ( i, j ) + end do + end do +! print*,'HAIL_MAX2D at ',ii,jj,' = ',HAIL_MAX2D(ii,jj) + VarName='UH' call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & IM,1,JM,1,IM,JS,JE,1) @@ -2169,6 +2357,19 @@ SUBROUTINE INITPOST end do end do +! +! E. James - 8 Dec 2017: Fire Radiative Power from HRRR-smoke +! + VarName='MEAN_FRP' +! Mean fire radiative power + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + MEAN_FRP ( i, j ) = dummy ( i, j ) + end do + end do + VarName='TAOD5502D' ! Total aerosol optical depth call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & @@ -2199,6 +2400,26 @@ SUBROUTINE INITPOST end do end do + VarName='LWP' +! Liquid water path + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + LWP ( i, j ) = dummy ( i, j ) + end do + end do + + VarName='IWP' +! Ice water path + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + IWP ( i, j ) = dummy ( i, j ) + end do + end do + ! time_averaged SWDOWN VarName='SWRADMEAN' call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & @@ -2504,22 +2725,23 @@ SUBROUTINE INITPOST end do IF(MODELNAME .EQ. 'RAPR')THEN ! PBL depth from GSD + delta_theta4gust=0.5 do j = jsta_2l, jend_2u do i = 1, im !! Is there any mixed layer at all? - if (thv(i,j,lm-1) .lt. thv(i,j,lm)) then + if (thv(i,j,lm-1) .lt. (thv(i,j,lm) + delta_theta4gust)) then ZSF=ZINT(I,J,NINT(LMH(I,J))+1) !! Calculate k1 level as first above PBL top do 34 k=3,LM k1 = k !! - give theta-v at the sfc a 0.5K boost in !! the PBL height definition - if (thv(i,j,lm-k+1).gt.thv(i,j,lm) & - +0.5) go to 341 + if (thv(i,j,lm-k+1).gt.(thv(i,j,lm) + delta_theta4gust)) & + go to 341 34 continue 341 continue zpbltop = zmid(i,j,lm-k1+1) + & - (thv(i,j,lm)+0.5-thv(i,j,lm-k1+1)) & + ((thv(i,j,lm)+delta_theta4gust)-thv(i,j,lm-k1+1)) & * (zmid(i,j,lm-k1+2)-zmid(i,j,lm-k1+1)) & / (thv(i,j,lm-k1+2) - thv(i,j,lm-k1+1)) PBLHGUST ( i, j ) = zpbltop - zsf diff --git a/comupp/src/unipost/INITPOST_GFS_NEMS_MPIIO.f b/comupp/src/unipost/INITPOST_GFS_NEMS_MPIIO.f index fa83bcd70..29ab5f09b 100644 --- a/comupp/src/unipost/INITPOST_GFS_NEMS_MPIIO.f +++ b/comupp/src/unipost/INITPOST_GFS_NEMS_MPIIO.f @@ -22,6 +22,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! 2016-07-21 S. Moorthi Convert input upper air data from reduced to full grid ! and reduce memory in divergence calculatiom ! 2016-07-21 Jun Wang change averaged field name with suffix +! 2019-07-24 Li(Kate) Zhang - Merge and update NGAC UPP into FV3-Chem ! ! USAGE: CALL INIT ! INPUT ARGUMENT LIST: @@ -46,14 +47,15 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! LANGUAGE: FORTRAN ! MACHINE : CRAY C-90 !$$$ - use vrbls4d, only: dust, SALT, SUSO, SOOT, WASO + use vrbls4d, only: dust, SALT, SUSO, SOOT, WASO, PP25, PP10 use vrbls3d, only: t, q, uh, vh,wh,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, & o3vdiff, o3prod, o3tndy, mwpv, qqg, vdiffzacce, zgdrag,cnvctummixing, & vdiffmacce, mgdrag, cnvctvmmixing, ncnvctcfrac, cnvctumflx, cnvctdmflx, & cnvctzgdrag, sconvmois, cnvctmgdrag, cnvctdetmflx, duwt, duem, dusd, dudp, & - ref_10cm + dusv,ssem,sssd,ssdp,sswt,sssv,bcem,bcsd,bcdp,bcwt,bcsv,ocem,ocsd,ocdp, & + ocwt,ocsv, 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, & @@ -70,7 +72,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) maxqshltr, minqshltr, acond, sr, u10h, v10h, & avgedir,avgecan,avgetrans,avgesnow,avgprec_cont,avgcprate_cont, & avisbeamswin,avisdiffswin,airbeamswin,airdiffswin, & - alwoutc,alwtoac,aswoutc,aswtoac,alwinc,aswinc,avgpotevp,snoavg + alwoutc,alwtoac,aswoutc,aswtoac,alwinc,aswinc,avgpotevp,snoavg, & + dustcb,bccb,occb,sulfcb,sscb,dustallcb,ssallcb,dustpm,sspm,pp25cb,pp10cb 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 @@ -926,13 +929,14 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) call getrecn(recname,reclevtyp,reclev,nrec,varname,VcoordName,l,recn) if(recn /= 0) then fldst = (recn-1)*fldsize +! make sure delz is positive. !$omp parallel do private(i,j,js) do j=jsta,jend js = fldst + (j-jsta)*im do i=1,im - zint(i,j,ll)=zint(i,j,ll+1)+tmp(i+js) + zint(i,j,ll)=zint(i,j,ll+1)+abs(tmp(i+js)) if(recn_dpres /= -9999)pmid(i,j,ll)=rgas*dpres(i,j,ll)* & - t(i,j,ll)*(q(i,j,ll)*fv+1.0)/grav/tmp(i+js) + t(i,j,ll)*(q(i,j,ll)*fv+1.0)/grav/abs(tmp(i+js)) enddo enddo if(debugprint)print*,'sample l ',VarName,' = ',ll, & @@ -942,7 +946,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) do j=jsta,jend js = fldst + (j-jsta)*im do i=1,im - omga(i,j,ll)=(-1.)*wh(i,j,ll)*dpres(i,j,ll)/tmp(i+js) + omga(i,j,ll)=(-1.)*wh(i,j,ll)*dpres(i,j,ll)/abs(tmp(i+js)) end do end do if(debugprint)print*,'sample l omga for FV3',ll, & @@ -1093,7 +1097,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) end do end do - do l=2,lm + do l=2,lp1 do j=jsta,jend do i=1,im pint(i,j,l) = pint(i,j,l-1) + dpres(i,j,l-1) @@ -1335,9 +1339,12 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! deallocate(wrk1,wrk2) + print *, 'gocart_on2=',gocart_on if (gocart_on) then ! GFS output dust in nemsio (GOCART) + dustcb=0.0 + dustallcb=0.0 do n=1,nbin_du do l=1,lm !$omp parallel do private(i,j) @@ -1349,7 +1356,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) enddo enddo ! DUST = SPVAL - VarName='du001' + !VarName='du001' + VarName='dust1' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1361,7 +1369,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! if(debugprint)print*,'sample l ',VarName,' = ',ll,dust(isa,jsa,ll,1) end do ! do loop for l - VarName='du002' + !VarName='du002' + VarName='dust2' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1370,10 +1379,15 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,recname,reclevtyp,reclev,VarName,VcoordName & ,dust(1:im,jsta_2l:jend_2u,ll,2)) + dustcb(1:im,jsta_2l:jend_2u)=dustcb(1:im,jsta_2l:jend_2u)+ & + (dust(1:im,jsta_2l:jend_2u,ll,1)+0.38*dust(1:im,jsta_2l:jend_2u,ll,2))* & + dpres(1:im,jsta_2l:jend_2u,ll)/grav + ! if(debugprint)print*,'sample l ',VarName,' = ',ll,dust(isa,jsa,ll,2) end do ! do loop for l - VarName='du003' + !VarName='du003' + VarName='dust3' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1384,7 +1398,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! if(debugprint)print*,'sample l ',VarName,' = ',ll,dust(isa,jsa,ll,3) end do ! do loop for l - VarName='du004' + !VarName='du004' + VarName='dust4' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1396,7 +1411,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! if(debugprint)print*,'sample l ',VarName,' = ',ll,dust(isa,jsa,ll,4) end do ! do loop for l - VarName='du005' + !VarName='du005' + VarName='dust5' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1405,10 +1421,17 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,recname,reclevtyp,reclev,VarName,VcoordName & ,dust(1:im,jsta_2l:jend_2u,ll,5)) + 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))* & + dpres(1:im,jsta_2l:jend_2u,ll)/grav + ! if(debugprint)print*,'sample l ',VarName,' = ',ll,dust(isa,jsa,ll,5) end do ! do loop for l ! ! GFS output sea salt in nemsio (GOCART) + sscb=0.0 + ssallcb=0.0 do n=1,nbin_ss do l=1,lm !$omp parallel do private(i,j) @@ -1420,7 +1443,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) enddo enddo ! SALT = SPVAL - VarName='ss001' + !VarName='ss001' + VarName='seas1' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1432,7 +1456,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,1) end do ! do loop for l - VarName='ss002' + !VarName='ss002' + VarName='seas2' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1444,7 +1469,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,2) end do ! do loop for l - VarName='ss003' + !VarName='ss003' + VarName='seas3' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1452,11 +1478,16 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,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))* & + dpres(1:im,jsta_2l:jend_2u,ll)/grav ! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,3) end do ! do loop for l - VarName='ss004' + !VarName='ss004' + VarName='seas4' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1467,7 +1498,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,4) end do ! do loop for l - VarName='ss005' + !VarName='ss005' + VarName='seas5' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1475,11 +1507,19 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,salt(1:im,jsta_2l:jend_2u,ll,5)) + + 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)* & + dpres(1:im,jsta_2l:jend_2u,ll)/grav + ! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,5) end do ! do loop for l ! GFS output black carbon in nemsio (GOCART) - do n=1,nbin_oc + bccb=0.0 + do n=1,nbin_bc do l=1,lm !$omp parallel do private(i,j) do j=jsta_2l,jend_2u @@ -1490,7 +1530,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) enddo enddo ! SOOT = SPVAL - VarName='bcphobic' + !VarName='bcphobic' + VarName='bc1' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1502,7 +1543,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! if(debugprint)print*,'sample l ',VarName,' = ',ll,soot(isa,jsa,ll,1) end do ! do loop for l - VarName='bcphilic' + !VarName='bcphilic' + VarName='bc2' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1511,9 +1553,14 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,recname,reclevtyp,reclev,VarName,VcoordName & ,soot(1:im,jsta_2l:jend_2u,ll,2)) + bccb(1:im,jsta_2l:jend_2u)=bccb(1:im,jsta_2l:jend_2u)+ & + (soot(1:im,jsta_2l:jend_2u,ll,1)+soot(1:im,jsta_2l:jend_2u,ll,2))* & + dpres(1:im,jsta_2l:jend_2u,ll)/grav + ! if(debugprint)print*,'sample l ',VarName,' = ',ll,soot(isa,jsa,ll,2) end do ! do loop for l + occb=0.0 ! GFS output organic carbon in nemsio (GOCART) do n=1,nbin_oc do l=1,lm @@ -1526,7 +1573,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) enddo enddo ! WASO = SPVAL - VarName='ocphobic' + !VarName='ocphobic' + VarName='oc1' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1538,7 +1586,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! if(debugprint)print*,'sample l ',VarName,' = ',ll,waso(isa,jsa,ll,1) end do ! do loop for l - VarName='ocphilic' + !VarName='ocphilic' + VarName='oc2' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1547,10 +1596,15 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,recname,reclevtyp,reclev,VarName,VcoordName & ,waso(1:im,jsta_2l:jend_2u,ll,2)) + occb(1:im,jsta_2l:jend_2u)=occb(1:im,jsta_2l:jend_2u)+ & + (waso(1:im,jsta_2l:jend_2u,ll,1)+waso(1:im,jsta_2l:jend_2u,ll,2)) * & + dpres(1:im,jsta_2l:jend_2u,ll)/grav + ! if(debugprint)print*,'sample l ',VarName,' = ',ll,waso(isa,jsa,ll,2) end do ! do loop for l ! GFS output sulfate in nemsio (GOCART) + sulfcb=0.0 do n=1,nbin_su do l=1,lm !$omp parallel do private(i,j) @@ -1562,7 +1616,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) enddo enddo ! SUSO = SPVAL - VarName='so4' + !VarName='so4' + VarName='sulf' VcoordName='mid layer' do l=1,lm ll=lm-l+1 @@ -1571,9 +1626,69 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,recname,reclevtyp,reclev,VarName,VcoordName & ,suso(1:im,jsta_2l:jend_2u,ll,1)) + sulfcb(1:im,jsta_2l:jend_2u)=sulfcb(1:im,jsta_2l:jend_2u)+ & + suso(1:im,jsta_2l:jend_2u,ll,1)* & + dpres(1:im,jsta_2l:jend_2u,ll)/grav + ! if(debugprint)print*,'sample l ',VarName,' = ',ll,suso(isa,jsa,ll,1) end do ! do loop for l +! GFS output pp25 in nemsio (GOCART) + pp25cb=0.0 + do n=1,nbin_su + do l=1,lm +!$omp parallel do private(i,j) + do j=jsta_2l,jend_2u + do i=1,im + pp25(i,j,l,n) = spval + enddo + enddo + enddo + enddo +! PP25 = SPVAL + !VarName='so4' + VarName='pp25' + VcoordName='mid layer' + do l=1,lm + ll=lm-l+1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName & + ,pp25(1:im,jsta_2l:jend_2u,ll,1)) + pp25cb(1:im,jsta_2l:jend_2u)=pp25cb(1:im,jsta_2l:jend_2u)+ & + pp25(1:im,jsta_2l:jend_2u,ll,1)* & + dpres(1:im,jsta_2l:jend_2u,ll)/grav +! if(debugprint)print*,'sample l ',VarName,' = +! ',ll,suso(isa,jsa,ll,1) + end do ! do loop for l +! GFS output pp10 in nemsio (GOCART) + pp10cb=0.0 + do n=1,nbin_su + do l=1,lm +!$omp parallel do private(i,j) + do j=jsta_2l,jend_2u + do i=1,im + pp10(i,j,l,n) = spval + enddo + enddo + enddo + enddo +! PP10 = SPVAL + !VarName='so4' + VarName='pp10' + VcoordName='mid layer' + do l=1,lm + ll=lm-l+1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName & + ,pp10(1:im,jsta_2l:jend_2u,ll,1)) + pp10cb(1:im,jsta_2l:jend_2u)=pp10cb(1:im,jsta_2l:jend_2u)+ & + pp10(1:im,jsta_2l:jend_2u,ll,1)* & + dpres(1:im,jsta_2l:jend_2u,ll)/grav +! if(debugprint)print*,'sample l ',VarName,' = +! ',ll,suso(isa,jsa,ll,1) + end do ! do loop for l ! -- compute air density RHOMID and remove negative tracer values do l=1,lm @@ -1612,6 +1727,43 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) end do end do end do + l=lm +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + dustcb(i,j) = MAX(dustcb(i,j), 0.0) + dustallcb(i,j) = MAX(dustallcb(i,j), 0.0) + sscb(i,j) = MAX(sscb(i,j), 0.0) + ssallcb(i,j) = MAX(ssallcb(i,j), 0.0) + 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) +! 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)+ & + 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 + 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 + dusmass25(i,j)=(dust(i,j,l,1)+0.38*dust(i,j,l,2)+ & + salt(i,j,l,1)+salt(i,j,l,2)+0.83*salt(i,j,l,3) + & + 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))*RHOMID(i,j,l) !ug/m3 +! PM10 column + ducmass(i,j)=dustallcb(i,j)+ssallcb(i,j)+bccb(i,j)+ & + occb(i,j)+sulfcb(i,j)+pp25cb(i,j)+pp10cb(i,j) +! PM25 column + ducmass25(i,j)=dustcb(i,j)+sscb(i,j)+bccb(i,j)+occb(i,j) & + +sulfcb(i,j)+pp25cb(i,j) + end do + end do endif ! endif for gocart_on ! ! done with sigma file, close it for now @@ -1828,6 +1980,12 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) QS(i,j) = SPVAL ! GFS does not have surface specific humidity twbs(i,j) = SPVAL ! GFS does not have inst sensible heat flux qwbs(i,j) = SPVAL ! GFS does not have inst latent heat flux +!assign sst + if (sm(i,j) /= 0.0) then + sst(i,j) = ths(i,j) * (pint(i,j,lp1)/p1000)**capa + else + sst(i,j) = spval + endif enddo enddo ! if(debugprint)print*,'sample ',VarName,' = ',ths(isa,jsa) @@ -1945,8 +2103,11 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) !$omp parallel do private(i,j) do j=jsta,jend do i=1,im - if (cprate(i,j) /= spval) cprate(i,j) = max(0.,cprate(i,j)) * (dtq2*0.001) & - * 1000. / dtp + if (cprate(i,j) /= spval) then + cprate(i,j) = max(0.,cprate(i,j)) * (dtq2*0.001) * 1000. / dtp + else + cprate(i,j) = 0. + endif enddo enddo if(debugprint)print*,'sample ',VarName,' = ',cprate(isa,jsa) @@ -1962,6 +2123,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sno) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) == 1.0 .and. sice(i,j)==0.) sno(i,j) = spval + enddo + enddo ! if(debugprint)print*,'sample ',VarName,' = ',sno(isa,jsa) ! ave snow cover @@ -1975,6 +2143,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! snow cover is multipled by 100 in SURFCE before writing it out do j=jsta,jend do i=1,im + if (sm(i,j)==1.0 .and. sice(i,j)==0.) snoavg(i,j)=spval if(snoavg(i,j)/=spval)snoavg(i,j)=snoavg(i,j)/100. end do end do @@ -1991,6 +2160,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) !$omp parallel do private(i,j) do j=jsta,jend do i=1,im + if (sm(i,j)==1.0 .and. sice(i,j)==0.) si(i,j)=spval if (si(i,j) /= spval) si(i,j) = si(i,j) * 1000.0 CLDEFI(i,j) = SPVAL ! GFS does not have convective cloud efficiency lspa(i,j) = spval ! GFS does not have similated precip @@ -2224,6 +2394,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) do j=jsta,jend do i=1,im if (cmc(i,j) /= spval) cmc(i,j) = cmc(i,j) * 0.001 + if (sm(i,j) /= 0.0) cmc(i,j) = spval enddo enddo ! if(debugprint)print*,'sample ',VarName,' = ',cmc(isa,jsa) @@ -2263,6 +2434,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) endif enddo enddo +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) vegfrc(i,j) = spval + enddo + enddo ! if(debugprint)print*,'sample ',VarName,' = ',vegfrc(isa,jsa) ! GFS doesn not yet output soil layer thickness, assign SLDPTH to be the same as nam @@ -2280,7 +2458,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sh2o(1,jsta_2l,1)) - +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) sh2o(i,j,1) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,1) VarName='soill' @@ -2290,6 +2474,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sh2o(1,jsta_2l,2)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) sh2o(i,j,2) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,2) VarName='soill' @@ -2299,6 +2490,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sh2o(1,jsta_2l,3)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) sh2o(i,j,3) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,3) VarName='soill' @@ -2308,6 +2506,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sh2o(1,jsta_2l,4)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) sh2o(i,j,4) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,4) ! volumetric soil moisture using nemsio @@ -2319,6 +2524,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,smc(1,jsta_2l,1)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) smc(i,j,1) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,1) VarName='soilw' @@ -2328,6 +2540,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,smc(1,jsta_2l,2)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) smc(i,j,2) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,2) VarName='soilw' @@ -2337,7 +2556,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,smc(1,jsta_2l,3)) - +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) smc(i,j,3) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,3) VarName='soilw' @@ -2347,6 +2572,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,smc(1,jsta_2l,4)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) smc(i,j,4) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,4) ! soil temperature using nemsio @@ -2357,7 +2589,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,stc(1,jsta_2l,1)) - +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) stc(i,j,1) = spval + enddo + enddo ! if(debugprint)print*,'sample l','stc',' = ',1,stc(isa,jsa,1) VarName='tmp' @@ -2367,6 +2605,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,stc(1,jsta_2l,2)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) stc(i,j,2) = spval + enddo + enddo ! if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,2) VarName='tmp' @@ -2376,6 +2621,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,stc(1,jsta_2l,3)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) stc(i,j,3) = spval + enddo + enddo ! if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,3) VarName='tmp' @@ -2385,6 +2637,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,stc(1,jsta_2l,4)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) stc(i,j,4) = spval + enddo + enddo ! if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,4) !$omp parallel do private(i,j) @@ -2635,6 +2894,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,subshx) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) subshx(i,j) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VarName,' = ',1,subshx(isa,jsa) ! inst ground heat flux using nemsio @@ -2645,7 +2911,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,grnflx) - +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) grnflx(i,j) = spval + enddo + enddo ! time averaged zonal momentum flux using gfsio VarName='uflx_ave' VcoordName='sfc' @@ -2703,6 +2975,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,avgpotevp) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) avgpotevp(i,j) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VarName,' = ',1,potevp(isa,jsa) ! inst potential evaporation @@ -2713,6 +2992,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,potevp) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) potevp(i,j) = spval + enddo + enddo do l=1,lm !$omp parallel do private(i,j) @@ -2828,7 +3114,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) sfcevp(i,j) = spval ! GFS does not have accumulated surface evaporation acsnow(i,j) = spval ! GFS does not have averaged accumulated snow acsnom(i,j) = spval ! GFS does not have snow melt - sst(i,j) = spval ! GFS does not have sst???? +! sst(i,j) = spval ! GFS does not have sst???? thz0(i,j) = ths(i,j) ! GFS does not have THZ0, use THS to substitute qz0(i,j) = spval ! GFS does not output humidity at roughness length uz0(i,j) = spval ! GFS does not output u at roughness length @@ -3039,6 +3325,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,runoff) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) runoff(i,j) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,runoff(isa,jsa) ! retrieve shelter max temperature using nemsio @@ -3088,6 +3381,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,smcwlt) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) smcwlt(i,j) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,smcwlt(isa,jsa) ! retrieve sunshine duration using nemsio @@ -3108,6 +3408,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,fieldcapa) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) fieldcapa(i,j) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,fieldcapa(isa,jsa) ! retrieve time averaged surface visible beam downward solar flux @@ -3228,6 +3535,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,SSROFF) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) ssroff(i,j) = spval + enddo + enddo ! retrieve direct soil evaporation VarName='evbs_ave' @@ -3237,6 +3551,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,avgedir) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) avgedir(i,j) = spval + enddo + enddo ! retrieve CANOPY WATER EVAP VarName='evcw_ave' @@ -3246,6 +3567,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,avgecan) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) avgecan(i,j) = spval + enddo + enddo ! retrieve PLANT TRANSPIRATION VarName='trans_ave' @@ -3255,6 +3583,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,avgetrans) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) avgetrans(i,j) = spval + enddo + enddo ! retrieve snow sublimation VarName='sbsno_ave' @@ -3264,6 +3599,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,avgesnow) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j)==1.0 .and. sice(i,j)==0.) avgesnow(i,j)=spval + enddo + enddo ! retrive total soil moisture VarName='soilm' @@ -3273,6 +3615,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,smstot) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) smstot(i,j) = spval + enddo + enddo ! retrieve snow phase change heat flux VarName='snohf' @@ -3282,6 +3631,13 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,snopcx) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) snopcx(i,j) = spval + enddo + enddo ! GFS does not have deep convective cloud top and bottom fields @@ -3332,13 +3688,14 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) print*,"fail to read aer file using mpi io read, stopping" stop end if + ! retrieve dust emission fluxes do K = 1, nbin_du - if ( K == 1) VarName='DUEM001' - if ( K == 2) VarName='DUEM002' - if ( K == 3) VarName='DUEM003' - if ( K == 4) VarName='DUEM004' - if ( K == 5) VarName='DUEM005' + if ( K == 1) VarName='duem001' + if ( K == 2) VarName='duem002' + if ( K == 3) VarName='duem003' + if ( K == 4) VarName='duem004' + if ( K == 5) VarName='duem005' VcoordName='atmos col' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & @@ -3350,11 +3707,11 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! retrieve dust sedimentation fluxes do K = 1, nbin_du - if ( K == 1) VarName='DUSD001' - if ( K == 2) VarName='DUSD002' - if ( K == 3) VarName='DUSD003' - if ( K == 4) VarName='DUSD004' - if ( K == 5) VarName='DUSD005' + 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' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & @@ -3366,11 +3723,11 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! retrieve dust dry deposition fluxes do K = 1, nbin_du - if ( K == 1) VarName='DUDP001' - if ( K == 2) VarName='DUDP002' - if ( K == 3) VarName='DUDP003' - if ( K == 4) VarName='DUDP004' - if ( K == 5) VarName='DUDP005' + if ( K == 1) VarName='dust1dp' + if ( K == 2) VarName='dust2dp' + if ( K == 3) VarName='dust3dp' + if ( K == 4) VarName='dust4dp' + if ( K == 5) VarName='dust5dp' VcoordName='atmos col' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & @@ -3384,58 +3741,257 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! retrieve dust wet deposition fluxes do K = 1, nbin_du - if ( K == 1) VarName='DUWT001' - if ( K == 2) VarName='DUWT002' - if ( K == 3) VarName='DUWT003' - if ( K == 4) VarName='DUWT004' - if ( K == 5) VarName='DUWT005' + if ( K == 1) VarName='dust1wtl' + if ( K == 2) VarName='dust2wtl' + if ( K == 3) VarName='dust3wtl' + if ( K == 4) VarName='dust4wtl' + if ( K == 5) VarName='dust5wtl' VcoordName='atmos col' 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)) -! if(debugprint)print*,'sample ',VarName,' = ',duwt(isa,jsa,k) + enddo +! retrieve dust scavenging fluxes + do K = 1, nbin_du + if ( K == 1) VarName='dust1wtc' + if ( K == 2) VarName='dust2wtc' + if ( K == 3) VarName='dust3wtc' + if ( K == 4) VarName='dust4wtc' + if ( K == 5) VarName='dust5wtc' + VcoordName='atmos col' + 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)) enddo -! retrieve sfc mass concentration - VarName='DUSMASS' - VcoordName='atmos col' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,dusmass) -! if(debugprint)print*,'sample ',VarName,' = ',dusmass(isa,jsa) +! retrieve seasalt emission fluxes + do K = 1, nbin_ss + if ( K == 1) VarName='ssem001' + if ( K == 2) VarName='ssem002' + if ( K == 3) VarName='ssem003' + if ( K == 4) VarName='ssem004' + if ( K == 5) VarName='ssem005' + VcoordName='atmos col' + 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 col mass density - VarName='DUCMASS' - VcoordName='atmos col' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,ducmass) -! if(debugprint)print*,'sample ',VarName,' = ',ducmass(isa,jsa) +! retrieve seasalt dry deposition fluxes + do K = 1, nbin_ss + if ( K == 1) VarName='seas1dp' + if ( K == 2) VarName='seas2dp' + if ( K == 3) VarName='seas3dp' + if ( K == 4) VarName='seas4dp' + if ( K == 5) VarName='seas5dp' + VcoordName='atmos col' + 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)) + enddo -! retrieve sfc mass concentration (pm2.5) - VarName='DUSMASS25' - VcoordName='atmos col' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,dusmass25) +! retrieve seasalt wet deposition fluxes + do K = 1, nbin_ss + if ( K == 1) VarName='seas1wtl' + if ( K == 2) VarName='seas2wtl' + if ( K == 3) VarName='seas3wtl' + if ( K == 4) VarName='seas4wtl' + if ( K == 5) VarName='seas5wtl' + VcoordName='atmos col' + 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)) + enddo + +! retrieve seasalt scavenging fluxes + do K = 1, nbin_ss + if ( K == 1) VarName='seas1wtc' + if ( K == 2) VarName='seas1wtc' + if ( K == 3) VarName='seas1wtc' + if ( K == 4) VarName='seas1wtc' + if ( K == 5) VarName='seas1wtc' + VcoordName='atmos col' + 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)) + enddo + +! retrieve bc emission fluxes + do K = 1, nbin_bc + if ( K == 1) VarName='bceman' + if ( K == 2) VarName='bcembb' + VcoordName='atmos col' + 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)) + enddo + +! retrieve bc sedimentation fluxes + do K = 1, nbin_bc + if ( K == 1) VarName='bc1sd' + if ( K == 2) VarName='bc2sd' + VcoordName='atmos col' + 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)) + enddo + +! retrieve bc dry deposition fluxes + do K = 1, nbin_bc + if ( K == 1) VarName='bc1dp' + if ( K == 2) VarName='bc2dp' + VcoordName='atmos col' + 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)) + 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' + 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)) + 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' + 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)) + enddo + +! retrieve oc emission fluxes + do K = 1, nbin_oc + if ( K == 1) VarName='oceman' + if ( K == 2) VarName='ocembb' + VcoordName='atmos col' + 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)) + enddo + +! retrieve oc sedimentation fluxes + do K = 1, nbin_oc + if ( K == 1) VarName='oc1sd' + if ( K == 2) VarName='oc2sd' + VcoordName='atmos col' + 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)) + enddo + +! retrieve oc dry deposition fluxes + do K = 1, nbin_oc + if ( K == 1) VarName='c1dp' + if ( K == 2) VarName='c2dp' + VcoordName='atmos col' + 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)) + 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' + 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)) + 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' + 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)) + enddo + + + +!lzhang +!! retrieve sfc mass concentration +! VarName='DUSMASS' +! VcoordName='atmos col' +! l=1 +! call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & +! ,l,nrec,fldsize,spval,tmp & +! ,recname,reclevtyp,reclev,VarName,VcoordName & +! ,dusmass) +! if(debugprint)print*,'sample ',VarName,' = ',dusmass(isa,jsa) + +!lzhang +!! retrieve col mass density +! VarName='DUCMASS' +! VcoordName='atmos col' +! l=1 +! call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & +! ,l,nrec,fldsize,spval,tmp & +! ,recname,reclevtyp,reclev,VarName,VcoordName & +! ,ducmass) +!! if(debugprint)print*,'sample ',VarName,' = ',ducmass(isa,jsa) + +!lzhang +!! retrieve sfc mass concentration (pm2.5) +! VarName='DUSMASS25' +! VcoordName='atmos col' +! l=1 +! call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & +! ,l,nrec,fldsize,spval,tmp & +! ,recname,reclevtyp,reclev,VarName,VcoordName & +! ,dusmass25) ! if(debugprint)print*,'sample ',VarName,' = ',dusmass25(isa,jsa) -! retrieve col mass density (pm2.5) - VarName='DUCMASS25' - VcoordName='atmos col' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,ducmass25) +!lzhang +!! retrieve col mass density (pm2.5) +! VarName='DUCMASS25' +! VcoordName='atmos col' +! l=1 +! call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & +! ,l,nrec,fldsize,spval,tmp & +! ,recname,reclevtyp,reclev,VarName,VcoordName & +! ,ducmass25) ! if(debugprint)print*,'sample ',VarName,' = ',ducmass25(isa,jsa) if (me == 0) print *,'after aer files reading,mype=',me diff --git a/comupp/src/unipost/INITPOST_NETCDF.f b/comupp/src/unipost/INITPOST_NETCDF.f index 2f202a6c2..28595d7f4 100644 --- a/comupp/src/unipost/INITPOST_NETCDF.f +++ b/comupp/src/unipost/INITPOST_NETCDF.f @@ -56,10 +56,11 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) uz0, vz0, ptop, htop, pbot, hbot, ptopl, pbotl, ttopl, ptopm, pbotm, ttopm, & ptoph, pboth, pblcfr, ttoph, runoff, maxtshltr, mintshltr, maxrhshltr, & minrhshltr, dzice, smcwlt, suntime, fieldcapa, htopd, hbotd, htops, hbots, & - cuppt, dusmass, ducmass, dusmass25, ducmass25, aswintoa, & - maxqshltr, minqshltr, acond, sr, u10h, v10h, & - avgedir,avgecan,avgetrans,avgesnow,avgprec_cont, avgcprate_cont, & - avisbeamswin,avisdiffswin,airbeamswin,airdiffswin, & + 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, & + avisbeamswin,avisdiffswin,airbeamswin,airdiffswin,refdm10c_max,wspd10max, & alwoutc,alwtoac,aswoutc,aswtoac,alwinc,aswinc,avgpotevp,snoavg use soil, only: sldpth, sh2o, smc, stc use masks, only: lmv, lmh, htm, vtm, gdlat, gdlon, dx, dy, hbm2, sm, sice @@ -118,8 +119,8 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) ! ALSO, EXTRACT IS CALLED WITH DUMMY ( A REAL ) EVEN WHEN THE NUMBERS ARE ! INTEGERS - THIS IS OK AS LONG AS INTEGERS AND REALS ARE THE SAME SIZE. LOGICAL RUNB,SINGLRST,SUBPOST,NEST,HYDRO,IOOMG,IOALL -! logical, parameter :: debugprint = .false., zerout = .false. - logical, parameter :: debugprint = .true., zerout = .false. + logical, parameter :: debugprint = .true., zerout = .false. +! logical, parameter :: debugprint = .true., zerout = .false. logical :: convert_rad_to_deg=.false. CHARACTER*32 varcharval ! CHARACTER*40 CONTRL,FILALL,FILMST,FILTMP,FILTKE,FILUNV,FILCLD,FILRAD,FILSFC @@ -288,6 +289,69 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) print*,'lonstart,latstart,cenlon,cenlat,dyval,dxval', & lonstart,latstart,cenlon,cenlat,dyval,dxval + +! Jili Dong add support for regular lat lon (2019/03/22) start + else if(trim(varcharval)=='latlon')then + MAPTYPE=0 + idrt=0 + + Status=nf90_get_att(ncid3d,nf90_global,'lon1',dum_const) + if(Status/=0)then + print*,'lonstart not found; assigning missing value' + lonstart=spval + else + if(dum_const<0.)then + lonstart=nint((dum_const+360.)*gdsdegr) + else + lonstart=dum_const*gdsdegr + end if + end if + Status=nf90_get_att(ncid3d,nf90_global,'lat1',dum_const) + if(Status/=0)then + print*,'latstart not found; assigning missing value' + latstart=spval + else + latstart=dum_const*gdsdegr + end if + + Status=nf90_get_att(ncid3d,nf90_global,'lon2',dum_const) + if(Status/=0)then + print*,'lonlast not found; assigning missing value' + lonlast=spval + else + if(dum_const<0.)then + lonlast=nint((dum_const+360.)*gdsdegr) + else + lonlast=dum_const*gdsdegr + end if + end if + Status=nf90_get_att(ncid3d,nf90_global,'lat2',dum_const) + if(Status/=0)then + print*,'latlast not found; assigning missing value' + latlast=spval + else + latlast=dum_const*gdsdegr + end if + + Status=nf90_get_att(ncid3d,nf90_global,'dlon',dum_const) + if(Status/=0)then + print*,'dlmd not found; assigning missing value' + dxval=spval + else + dxval=dum_const*gdsdegr + end if + Status=nf90_get_att(ncid3d,nf90_global,'dlat',dum_const) + if(Status/=0)then + print*,'dphd not found; assigning missing value' + dyval=spval + else + dyval=dum_const*gdsdegr + end if + + print*,'lonstart,latstart,dyval,dxval', & + lonstart,lonlast,latstart,latlast,dyval,dxval + +! Jili Dong add support for regular lat lon (2019/03/22) end else ! setting default maptype MAPTYPE=0 @@ -333,7 +397,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) nrec=15 allocate (recname(nrec)) recname=[character(len=20) :: 'ugrd','vgrd','spfh','tmp','o3mr', & - 'presnh','vvel', 'clwmr','dpres', & + 'presnh','dzdt', 'clwmr','dpres', & 'delz','icmr','rwmr', & 'snmr','grle','cld_amt'] else @@ -413,6 +477,18 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) lonstart = nint(dummy(1,1)*gdsdegr) lonlast = nint(dummy(im,jm)*gdsdegr) end if + +! Jili Dong add support for regular lat lon (2019/03/22) start + if (MAPTYPE .eq. 0) then + if(lonstart<0.)then + lonstart=lonstart+360.*gdsdegr + end if + if(lonlast<0.)then + lonlast=lonlast+360.*gdsdegr + end if + end if +! Jili Dong add support for regular lat lon (2019/03/22) end + end if print*,'lonstart,lonlast ',lonstart,lonlast ! get latitude @@ -506,17 +582,18 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) !$omp parallel do private(i,j,ip1) do j = jsta, jend_m - do i = 1, im + do i = 1, im-1 ip1 = i + 1 - if (ip1 > im) ip1 = ip1 - im +! if (ip1 > im) ip1 = ip1 - im DX (i,j) = ERAD*COS(GDLAT(I,J)*DTR) *(GDLON(IP1,J)-GDLON(I,J))*DTR - DY (i,j) = ERAD*(GDLAT(I,J)-GDLAT(I,J+1))*DTR ! like A*DPH + DY (i,j) = ERAD*(GDLAT(I,J+1)-GDLAT(I,J))*DTR ! like A*DPH ! F(I,J)=1.454441e-4*sin(gdlat(i,j)*DTR) ! 2*omeg*sin(phi) ! if (i == ii .and. j == jj) print*,'sample LATLON, DY, DY=' & ! ,i,j,GDLAT(I,J),GDLON(I,J),DX(I,J),DY(I,J) end do end do - + if(debugprint)print*,'me sample dx dy= ' & + ,me,dx(isa,jsa),dy(isa,jsa) !$omp parallel do private(i,j) do j=jsta,jend do i=1,im @@ -625,14 +702,20 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) cwm(i,j,l)=spval ! zint(i,j,l)=zint(i,j,l+1)+buf(i,j) ! if(abs(dpres(i,j,l))>1.0e5)print*,'bad dpres ',i,j,dpres(i,j,l) +!make sure delz is positive if(dpres(i,j,l)/=spval .and. t(i,j,l)/=spval .and. & q(i,j,l)/=spval .and. buf3d(i,j,l)/=spval)then pmid(i,j,l)=rgas*dpres(i,j,l)* & - t(i,j,l)*(q(i,j,l)*fv+1.0)/grav/buf3d(i,j,l) + t(i,j,l)*(q(i,j,l)*fv+1.0)/grav/abs(buf3d(i,j,l)) else pmid(i,j,l)=spval end if - omga(i,j,l)=(-1.)*wh(i,j,l)*dpres(i,j,l)/buf3d(i,j,l) +! dong add missing value + if (wh(i,j,l) < spval) then + omga(i,j,l)=(-1.)*wh(i,j,l)*dpres(i,j,l)/abs(buf3d(i,j,l)) + else + omga(i,j,l) = spval + end if ! if(t(i,j,l)>1000.)print*,'bad T ',t(i,j,l) enddo enddo @@ -663,7 +746,53 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) if(debugprint)print*,'sample l cwm for FV3',l, & cwm(isa,jsa,l) end do +! max hourly updraft velocity + VarName='upvvelmax' + call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,w_up_max) + if(debugprint)print*,'sample ',VarName,' = ',w_up_max(isa,jsa) +! max hourly downdraft velocity + VarName='dnvvelmax' + call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,w_dn_max) + if(debugprint)print*,'sample ',VarName,' = ',w_dn_max(isa,jsa) +! max hourly updraft helicity + VarName='uhmax25' + call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,up_heli_max) + if(debugprint)print*,'sample ',VarName,' = ',up_heli_max(isa,jsa) +! min hourly updraft helicity + VarName='uhmin25' + call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,up_heli_min) + if(debugprint)print*,'sample ',VarName,' = ',up_heli_min(isa,jsa) +! max hourly 0-3km updraft helicity + VarName='uhmax03' + call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,up_heli_max03) + if(debugprint)print*,'sample ',VarName,' = ',up_heli_max03(isa,jsa) +! min hourly 0-3km updraft helicity + VarName='uhmin03' + call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,up_heli_min03) + if(debugprint)print*,'sample ',VarName,' = ',up_heli_min03(isa,jsa) + +! max 0-1km relative vorticity max + VarName='maxvort01' + call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,rel_vort_max01) + if(debugprint)print*,'sample ',VarName,' = ',rel_vort_max01(isa,jsa) +! max 0-2km relative vorticity max + VarName='maxvort02' + call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,rel_vort_max) + if(debugprint)print*,'sample ',VarName,' =',rel_vort_max(isa,jsa) +! max hybrid lev 1 relative vorticity max + VarName='maxvorthy1' + call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,rel_vort_maxhy1) + if(debugprint)print*,'sample ',VarName,' =',rel_vort_maxhy1(isa,jsa) ! surface pressure VarName='pressfc' call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & @@ -685,7 +814,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) end do end do - do l=2,lm + do l=2,lp1 do j=jsta,jend do i=1,im pint(i,j,l) = pint(i,j,l-1) + dpres(i,j,l-1) @@ -709,6 +838,8 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) ! end do ! surface height from FV3 +! dong set missing value for zint +! zint=spval VarName='hgtsfc' call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & @@ -728,7 +859,8 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) do j=jsta,jend do i=1,im if(zint(i,j,l+1)/=spval .and. buf3d(i,j,l)/=spval)then - zint(i,j,l)=zint(i,j,l+1)+buf3d(i,j,l) +!make sure delz is positive + zint(i,j,l)=zint(i,j,l+1)+abs(buf3d(i,j,l)) ! if(zint(i,j,l)>1.0E6)print*,'bad H ',i,j,l,zint(i,j,l) else zint(i,j,l)=spval @@ -1005,7 +1137,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) ! end do ! end do - VarName='ref3D' + VarName='refl_10cm' do l=1,lm call read_netcdf_3d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & @@ -1105,6 +1237,12 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) QS(i,j) = SPVAL ! GFS does not have surface specific humidity twbs(i,j) = SPVAL ! GFS does not have inst sensible heat flux qwbs(i,j) = SPVAL ! GFS does not have inst latent heat flux +!assign sst + if (sm(i,j) /= 0.0) then + sst(i,j) = ths(i,j) * (pint(i,j,lp1)/p1000)**capa + else + sst(i,j) = spval + endif enddo enddo if(debugprint)print*,'sample ',VarName,' = ',ths(isa,jsa) @@ -1191,13 +1329,62 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) enddo enddo +! convective precip rate in m per physics time step +! VarName='cnvprcp' +!set cprate as 0. + do j=jsta,jend + do i=1,im + cprate(i,j) = 0. + enddo + enddo + ! GFS does not have accumulated total, gridscale, and convective precip, will use inst precip to derive in SURFCE.f +! max hourly 1-km agl reflectivity + VarName='refdmax' + call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,refd_max) + if(debugprint)print*,'sample ',VarName,' = ',refd_max(isa,jsa) +! max hourly -10C reflectivity + VarName='refdmax263k' + call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,refdm10c_max) + if(debugprint)print*,'sample ',VarName,' = ',refdm10c_max(isa,jsa) + +! max hourly u comp of 10m agl wind + VarName='u10max' + call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,u10max) + if(debugprint)print*,'sample ',VarName,' = ',u10max(isa,jsa) +! max hourly v comp of 10m agl wind + VarName='v10max' + call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,v10max) + if(debugprint)print*,'sample ',VarName,' = ',v10max(isa,jsa) +! max hourly 10m agl wind speed + VarName='spd10max' + call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,wspd10max) + if(debugprint)print*,'sample ',VarName,' = ',wspd10max(isa,jsa) + + +! 2m T using nemsio + VarName='tmp2m' + call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,tshltr) + if(debugprint)print*,'sample ',VarName,' = ',tshltr(isa,jsa) ! inst snow water eqivalent using nemsio VarName='weasd' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sno) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) == 1.0 .and. sice(i,j)==0.) sno(i,j) = spval + enddo + enddo if(debugprint)print*,'sample ',VarName,' = ',sno(isa,jsa) ! ave snow cover @@ -1207,6 +1394,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) ! snow cover is multipled by 100 in SURFCE before writing it out do j=jsta,jend do i=1,im + if (sm(i,j)==1.0 .and. sice(i,j)==0.) snoavg(i,j)=spval if(snoavg(i,j)/=spval)snoavg(i,j)=snoavg(i,j)/100. end do end do @@ -1218,6 +1406,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) !$omp parallel do private(i,j) do j=jsta,jend do i=1,im + if (sm(i,j)==1.0 .and. sice(i,j)==0.) si(i,j)=spval if (si(i,j) /= spval) si(i,j) = si(i,j) * 1000.0 CLDEFI(i,j) = SPVAL ! GFS does not have convective cloud efficiency lspa(i,j) = spval ! GFS does not have similated precip @@ -1229,7 +1418,6 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) enddo if(debugprint)print*,'sample ',VarName,' = ',si(isa,jsa) - ! 2m T using nemsio VarName='tmp2m' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & @@ -1394,6 +1582,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) do j=jsta,jend do i=1,im if (cmc(i,j) /= spval) cmc(i,j) = cmc(i,j) * 0.001 + if (sm(i,j) /= 0.0) cmc(i,j) = spval enddo enddo ! if(debugprint)print*,'sample ',VarName,' = ',cmc(isa,jsa) @@ -1424,6 +1613,13 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) endif enddo enddo +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) vegfrc(i,j) = spval + enddo + enddo ! if(debugprint)print*,'sample ',VarName,' = ',vegfrc(isa,jsa) ! GFS doesn not yet output soil layer thickness, assign SLDPTH to be the same as nam @@ -1434,66 +1630,150 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) SLDPTH(4) = 1.0 ! liquid volumetric soil mpisture in fraction using nemsio - VarName='slc1' + VarName='soill1' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sh2o(1,jsta_2l,1)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) sh2o(i,j,1) = spval + enddo + enddo if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,1) - VarName='slc2' + VarName='soill2' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sh2o(1,jsta_2l,2)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) sh2o(i,j,2) = spval + enddo + enddo if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,2) - VarName='slc3' + VarName='soill3' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sh2o(1,jsta_2l,3)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) sh2o(i,j,3) = spval + enddo + enddo if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,3) - VarName='slc4' + VarName='soill4' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sh2o(1,jsta_2l,4)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) sh2o(i,j,4) = spval + enddo + enddo if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,4) ! volumetric soil moisture using nemsio VarName='soilw1' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,smc(1,jsta_2l,1)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) smc(i,j,1) = spval + enddo + enddo if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,1) VarName='soilw2' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,smc(1,jsta_2l,2)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) smc(i,j,2) = spval + enddo + enddo if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,2) VarName='soilw3' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,smc(1,jsta_2l,3)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) smc(i,j,3) = spval + enddo + enddo if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,3) VarName='soilw4' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,smc(1,jsta_2l,4)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) smc(i,j,4) = spval + enddo + enddo if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,4) ! soil temperature using nemsio VarName='soilt1' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,stc(1,jsta_2l,1)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) stc(i,j,1) = spval + enddo + enddo if(debugprint)print*,'sample l','stc',' = ',1,stc(isa,jsa,1) VarName='soilt2' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,stc(1,jsta_2l,2)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) stc(i,j,2) = spval + enddo + enddo if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,2) VarName='soilt3' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,stc(1,jsta_2l,3)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) stc(i,j,3) = spval + enddo + enddo if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,3) VarName='soilt4' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,stc(1,jsta_2l,4)) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) stc(i,j,4) = spval + enddo + enddo if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,4) !$omp parallel do private(i,j) @@ -1664,12 +1944,26 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) VarName='gflux_ave' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,subshx) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) subshx(i,j) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VarName,' = ',1,subshx(isa,jsa) ! inst ground heat flux using nemsio VarName='gflux' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,grnflx) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) grnflx(i,j) = spval + enddo + enddo ! time averaged zonal momentum flux using gfsio VarName='uflx_ave' @@ -1706,12 +2000,26 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) VarName='pevpr_ave' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgpotevp) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) avgpotevp(i,j) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VarName,' = ',1,potevp(isa,jsa) ! inst potential evaporation VarName='pevpr' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,potevp) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) potevp(i,j) = spval + enddo + enddo do l=1,lm !$omp parallel do private(i,j) @@ -1806,7 +2114,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) sfcevp(i,j) = spval ! GFS does not have accumulated surface evaporation acsnow(i,j) = spval ! GFS does not have averaged accumulated snow acsnom(i,j) = spval ! GFS does not have snow melt - sst(i,j) = spval ! GFS does not have sst???? +! sst(i,j) = spval ! GFS does not have sst???? thz0(i,j) = ths(i,j) ! GFS does not have THZ0, use THS to substitute qz0(i,j) = spval ! GFS does not output humidity at roughness length uz0(i,j) = spval ! GFS does not output u at roughness length @@ -1964,27 +2272,46 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) VarName='watr_acc' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,runoff) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) runoff(i,j) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,runoff(isa,jsa) ! retrieve shelter max temperature using nemsio - VarName='tmpmax_max2m' + VarName='t02max' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,maxtshltr) ! retrieve shelter min temperature using nemsio - VarName='tmpmin_min2m' + VarName='t02min' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,mintshltr) ! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & ! 1,mintshltr(im/2,(jsta+jend)/2) + +! retrieve shelter max RH + VarName='rh02max' + call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,maxrhshltr) + +! retrieve shelter min temperature using nemsio + VarName='rh02min' + call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,minrhshltr) +! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & +! 1,mintshltr(im/2,(jsta+jend)/2) -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - MAXRHSHLTR(i,j) = SPVAL - MINRHSHLTR(i,j) = SPVAL - enddo - enddo +!!$omp parallel do private(i,j) +! do j=jsta_2l,jend_2u +! do i=1,im +! MAXRHSHLTR(i,j) = SPVAL +! MINRHSHLTR(i,j) = SPVAL +! enddo +! enddo ! retrieve ice thickness using nemsio VarName='icetk' @@ -1996,6 +2323,13 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) VarName='wilt' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,smcwlt) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) smcwlt(i,j) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,smcwlt(isa,jsa) ! retrieve sunshine duration using nemsio @@ -2007,6 +2341,13 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) VarName='fldcp' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,fieldcapa) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) fieldcapa(i,j) = spval + enddo + enddo ! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,fieldcapa(isa,jsa) ! retrieve time averaged surface visible beam downward solar flux @@ -2064,9 +2405,9 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) ! retrieve shelter max specific humidity using nemsio VarName='spfhmax_max2m' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,maxtshltr) + ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,maxqshltr) ! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', -! 1,maxtshltr(isa,jsa) +! 1,maxqshltr(isa,jsa) ! retrieve shelter min temperature using nemsio VarName='spfhmin_min2m' @@ -2077,36 +2418,85 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) VarName='ssrun_acc' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,SSROFF) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) ssroff(i,j) = spval + enddo + enddo ! retrieve direct soil evaporation VarName='evbs_ave' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgedir) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) avgedir(i,j) = spval + enddo + enddo ! retrieve CANOPY WATER EVAP VarName='evcw_ave' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgecan) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) avgecan(i,j) = spval + enddo + enddo ! retrieve PLANT TRANSPIRATION VarName='trans_ave' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgetrans) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) avgetrans(i,j) = spval + enddo + enddo ! retrieve snow sublimation VarName='sbsno_ave' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgesnow) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j)==1.0 .and. sice(i,j)==0.) avgesnow(i,j)=spval + enddo + enddo ! retrive total soil moisture VarName='soilm' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,smstot) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) smstot(i,j) = spval + enddo + enddo ! retrieve snow phase change heat flux VarName='snohf' call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,snopcx) +! mask water areas +!$omp parallel do private(i,j) + do j=jsta,jend + do i=1,im + if (sm(i,j) /= 0.0) snopcx(i,j) = spval + enddo + enddo ! GFS does not have deep convective cloud top and bottom fields @@ -2319,6 +2709,8 @@ subroutine read_netcdf_2d_scatter(me,ncid,ifhr,im,jm,jsta,jsta_2l & real,intent(out) :: buf(im,jsta_2l:jend_2u) integer :: iret,i,j,jj,varid real,parameter :: spval_netcdf=9.99e+20 +! dong for hgtsfc 2d var but with 3d missing value + real,parameter :: spval_netcdf_3d=-1.e+10 real dummy(im,jm),dummy2(im,jm) if(me == 0) then @@ -2339,7 +2731,13 @@ subroutine read_netcdf_2d_scatter(me,ncid,ifhr,im,jm,jsta,jsta_2l & jj=j do i=1,im dummy(i,j)=dummy2(i,jj) - if(abs(dummy(i,j)-spval_netcdf)<0.1)dummy(i,j)=spval +! dong for hgtsfc and pressfc + if (trim(varname) .eq. "hgtsfc" .or. trim(varname) & + .eq. "pressfc") then + if(abs(dummy(i,j)-spval_netcdf_3d)<0.1)dummy(i,j)=spval + else + if(abs(dummy(i,j)-spval_netcdf)<0.1)dummy(i,j)=spval + end if end do end do end if diff --git a/comupp/src/unipost/MDL2AGL.f b/comupp/src/unipost/MDL2AGL.f index d0fa88a0b..633534564 100644 --- a/comupp/src/unipost/MDL2AGL.f +++ b/comupp/src/unipost/MDL2AGL.f @@ -45,6 +45,10 @@ SUBROUTINE MDL2AGL ! use vrbls3d, only: zmid, zint, dbz, dbzr, dbzi, dbzc, uh, vh, pmid, t, q, ref_10cm use vrbls2d, only: refd_max, up_heli_max, up_heli_max16, grpl_max, & + up_heli_min, up_heli_min16, up_heli_max02, & + up_heli_min02, up_heli_max03, up_heli_min03, & + rel_vort_max, rel_vort_max01, hail_max2d, hail_maxk1,& + refdm10c_max,rel_vort_maxhy1, & ltg1_max, ltg2_max, ltg3_max, up_heli, up_heli16, & nci_ltg, nca_ltg, nci_wq, nca_wq, nci_refd, nca_refd,& u10, v10, u10h, v10h @@ -388,6 +392,41 @@ SUBROUTINE MDL2AGL else fld_info(cfld)%ntrange=0 endif + fld_info(cfld)%ntrange=1 + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + END IF + +!--- Max Derived Radar Reflectivity at -10C + IF((IGET(785).GT.0) )THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=REFDM10C_MAX(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=129 + ID(9)=105 + ID(11) = NINT(ZAGL(2)) + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF + if(grib=='grib1') then + CALL GRIBIT(IGET(785),LP,GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(785)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(785)) + if (IFHR .gt. 0) then + fld_info(cfld)%tinvstat=1 + else + fld_info(cfld)%tinvstat=0 + endif + fld_info(cfld)%ntrange=1 datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif END IF @@ -418,12 +457,12 @@ SUBROUTINE MDL2AGL cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(420)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(420)) - fld_info(cfld)%tinvstat = 1 if (IFHR > 0) then - fld_info(cfld)%ntrange = 1 + fld_info(cfld)%tinvstat = 1 else - fld_info(cfld)%ntrange = 0 + fld_info(cfld)%tinvstat = 0 endif + fld_info(cfld)%ntrange = 1 datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) endif END IF @@ -464,6 +503,400 @@ SUBROUTINE MDL2AGL endif END IF +!--- Min Updraft Helicity + IF((IGET(786).GT.0) )THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=UP_HELI_MIN(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=129 +! ID(11) = NINT(ZAGL(2)) + ID(9) = 106 + ID(10) = 50 + ID(11) = 20 + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF + if(grib=='grib1') then + CALL GRIBIT(IGET(786),LP,GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(786)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(786)) + if (IFHR > 0) then + fld_info(cfld)%tinvstat = 1 + else + fld_info(cfld)%tinvstat = 0 + endif + fld_info(cfld)%ntrange = 1 + datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + endif + END IF + +!--- Min Updraft Helicity 1-6 km + IF((IGET(787).GT.0) )THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=UP_HELI_MIN16(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=129 +! ID(11) = NINT(ZAGL(2)) + ID(9) = 106 + ID(10) = 60 + ID(11) = 10 + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF + if(grib=='grib1') then + CALL GRIBIT(IGET(787),LP,GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(787)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(787)) + if (ifhr == 0) then + fld_info(cfld)%tinvstat = 0 + else + fld_info(cfld)%tinvstat = 1 + endif + fld_info(cfld)%ntrange = 1 + datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + endif + END IF + +!--- Max Updraft Helicity 0-2 km + IF((IGET(788).GT.0) )THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=UP_HELI_MAX02(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=129 +! ID(11) = NINT(ZAGL(2)) + ID(9) = 106 + ID(10) = 50 + ID(11) = 20 + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF + if(grib=='grib1') then + CALL GRIBIT(IGET(788),LP,GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(788)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(788)) + if (IFHR > 0) then + fld_info(cfld)%tinvstat = 1 + else + fld_info(cfld)%tinvstat = 0 + endif + fld_info(cfld)%ntrange = 1 + datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + endif + END IF +!--- Min Updraft Helicity 0-2 km + IF((IGET(789).GT.0) )THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=UP_HELI_MIN02(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=129 +! ID(11) = NINT(ZAGL(2)) + ID(9) = 106 + ID(10) = 60 + ID(11) = 10 + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF + if(grib=='grib1') then + CALL GRIBIT(IGET(789),LP,GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(789)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(789)) + if (ifhr == 0) then + fld_info(cfld)%tinvstat = 0 + else + fld_info(cfld)%tinvstat = 1 + endif + fld_info(cfld)%ntrange = 1 + datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + endif + END IF + +!--- Max Updraft Helicity 0-3 km + IF((IGET(790).GT.0) )THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=UP_HELI_MAX03(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=129 +! ID(11) = NINT(ZAGL(2)) + ID(9) = 106 + ID(10) = 50 + ID(11) = 20 + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF + if(grib=='grib1') then + CALL GRIBIT(IGET(790),LP,GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(790)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(790)) + if (IFHR > 0) then + fld_info(cfld)%tinvstat = 1 + else + fld_info(cfld)%tinvstat = 0 + endif + fld_info(cfld)%ntrange = 1 + datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + endif + END IF + +!--- Min Updraft Helicity 0-3 km + IF((IGET(791).GT.0) )THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=UP_HELI_MIN03(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=129 +! ID(11) = NINT(ZAGL(2)) + ID(9) = 106 + ID(10) = 60 + ID(11) = 10 + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF + if(grib=='grib1') then + CALL GRIBIT(IGET(791),LP,GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(791)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(791)) + if (ifhr == 0) then + fld_info(cfld)%tinvstat = 0 + else + fld_info(cfld)%tinvstat = 1 + endif + fld_info(cfld)%ntrange = 1 + datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + endif + END IF + +!--- Max Relative Vertical Vorticity 0-2 km + IF((IGET(792).GT.0) )THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=REL_VORT_MAX(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=129 +! ID(11) = NINT(ZAGL(2)) + ID(9) = 106 + ID(10) = 50 + ID(11) = 20 + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF + if(grib=='grib1') then + CALL GRIBIT(IGET(792),LP,GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(792)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(792)) + if (IFHR > 0) then + fld_info(cfld)%tinvstat = 1 + else + fld_info(cfld)%tinvstat = 0 + endif + fld_info(cfld)%ntrange = 1 + datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + endif + END IF + +!--- Max Relative Vertical Vorticity 0-1 km + IF((IGET(793).GT.0) )THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=REL_VORT_MAX01(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=129 +! ID(11) = NINT(ZAGL(2)) + ID(9) = 106 + ID(10) = 60 + ID(11) = 10 + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF + if(grib=='grib1') then + CALL GRIBIT(IGET(793),LP,GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(793)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(793)) + if (ifhr > 0) then + fld_info(cfld)%tinvstat = 1 + else + fld_info(cfld)%tinvstat = 0 + endif + fld_info(cfld)%ntrange = 1 + datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + endif + END IF +!--- Max Relative Vertical Vorticity @ hybrid level 1 + IF((IGET(890).GT.0) )THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=REL_VORT_MAXHY1(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=129 +! ID(11) = NINT(ZAGL(2)) + ID(9) = 106 + ID(10) = 60 + ID(11) = 10 + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF + if(grib=='grib1') then + CALL GRIBIT(IGET(890),LP,GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(890)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(890)) + if (ifhr > 0) then + fld_info(cfld)%tinvstat = 1 + else + fld_info(cfld)%tinvstat = 0 + endif + fld_info(cfld)%ntrange = 1 + datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + endif + END IF + +!--- Max Hail Diameter in Column + IF((IGET(794).GT.0) )THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=HAIL_MAX2D(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=129 +! ID(11) = NINT(ZAGL(2)) + ID(9) = 106 + ID(10) = 60 + ID(11) = 10 + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF + if(grib=='grib1') then + CALL GRIBIT(IGET(794),LP,GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(794)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(794)) + if (ifhr == 0) then + fld_info(cfld)%tinvstat = 0 + else + fld_info(cfld)%tinvstat = 1 + endif + fld_info(cfld)%ntrange = 1 + datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + endif + END IF + +!--- Max Hail Diameter at k=1 + IF((IGET(795).GT.0) )THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=HAIL_MAXK1(I,J) + ENDDO + ENDDO + ID(1:25)=0 + ID(02)=129 +! ID(11) = NINT(ZAGL(2)) + ID(9) = 106 + ID(10) = 60 + ID(11) = 10 + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF + if(grib=='grib1') then + CALL GRIBIT(IGET(795),LP,GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(795)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(795)) + if (ifhr == 0) then + fld_info(cfld)%tinvstat = 0 + else + fld_info(cfld)%tinvstat = 1 + endif + fld_info(cfld)%ntrange = 1 + datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + endif + END IF + !--- Max Column Integrated Graupel IF((IGET(429).GT.0) )THEN DO J=JSTA,JEND diff --git a/comupp/src/unipost/MDL2P.f b/comupp/src/unipost/MDL2P.f index 0cf1ec484..91ff5a662 100644 --- a/comupp/src/unipost/MDL2P.f +++ b/comupp/src/unipost/MDL2P.f @@ -56,7 +56,7 @@ SUBROUTINE MDL2P(iostatusD3D) !$$$ ! ! - use vrbls4d, only: DUST + use vrbls4d, only: DUST, SMOKE use vrbls3d, only: PINT, O3, PMID, T, Q, UH, VH, WH, OMGA, Q2, CWM, & QQW, QQI, QQR, QQS, QQG, DBZ, F_RIMEF, TTND, CFR, & ICING_GFIP, RLWTT, RSWTT, VDIFFTT, TCUCN, TCUCNS, & @@ -75,7 +75,8 @@ SUBROUTINE MDL2P(iostatusD3D) use ctlblk_mod, only: MODELNAME, LP1, ME, JSTA, JEND, LM, SPVAL, SPL, & ALSL, JEND_M, SMFLAG, GRIB, CFLD, FLD_INFO, DATAPD,& TD3D, IFHR, IFMIN, IM, JM, NBIN_DU, JSTA_2L, & - JEND_2U, LSM, d3d_on, gocart_on, ioform, imp_physics + JEND_2U, LSM, d3d_on, gocart_on, ioform, NBIN_SM, & + imp_physics use rqstfld_mod, only: IGET, LVLS, ID, IAVBLFLD, LVLSXML use gridspec_mod, only: GRIDTYPE, MAPTYPE, DXVAL !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -102,7 +103,7 @@ SUBROUTINE MDL2P(iostatusD3D) &, ICINGFSL, ICINGVSL & &, GTGSL,CATSL,MWTSL ! REAL D3DSL(IM,JM,27),DUSTSL(IM,JM,NBIN_DU) - REAL, allocatable :: D3DSL(:,:,:), DUSTSL(:,:,:) + REAL, allocatable :: D3DSL(:,:,:), DUSTSL(:,:,:), SMOKESL(:,:,:) ! integer,intent(in) :: iostatusD3D INTEGER, dimension(im,jsta_2l:jend_2u) :: NL1X, NL1XF @@ -166,6 +167,15 @@ SUBROUTINE MDL2P(iostatusD3D) enddo enddo endif + if (.not. allocated(smokesl)) allocate(smokesl(im,jm,nbin_sm)) +!$omp parallel do private(i,j,l) + do l=1,nbin_sm + do j=1,jm + do i=1,im + SMOKESL(i,j,l) = SPVAL + enddo + enddo + enddo ! ! SET TOTAL NUMBER OF POINTS ON OUTPUT GRID. ! @@ -209,6 +219,8 @@ SUBROUTINE MDL2P(iostatusD3D) (IGET(438) > 0) .OR. (IGET(439) > 0) .OR. & (IGET(440) > 0) .OR. (IGET(441) > 0) .OR. & (IGET(442) > 0) .OR. (IGET(455) > 0) .OR. & +! ADD SMOKE FIELDS + (IGET(738) > 0) .OR. & ! NCAR ICING (IGET(450) > 0) .OR. (MODELNAME == 'RAPR') .OR.& (IGET(480) > 0) .OR. (MODELNAME == 'RAPR') .OR.& @@ -246,6 +258,8 @@ SUBROUTINE MDL2P(iostatusD3D) OSL(I,J) = SPVAL USL(I,J) = SPVAL VSL(I,J) = SPVAL +! dong initialize wsl + WSL(I,J) = SPVAL Q2SL(I,J) = SPVAL C1D(I,J) = SPVAL ! Total condensate QW1(I,J) = SPVAL ! Cloud water @@ -366,6 +380,9 @@ SUBROUTINE MDL2P(iostatusD3D) IF(DUST(I,J,1,K) < SPVAL) DUSTSL(I,J,K) = DUST(I,J,1,K) ENDDO endif + DO K = 1, NBIN_SM + IF(SMOKE(I,J,1,K) < SPVAL) SMOKESL(I,J,K)=SMOKE(I,J,1,K) + ENDDO ! only interpolate GFS d3d fields when reqested ! if(iostatusD3D ==0 .and. d3d_on)then @@ -571,6 +588,10 @@ SUBROUTINE MDL2P(iostatusD3D) DUSTSL(I,J,K) = DUST(I,J,LL,K) + (DUST(I,J,LL,K)-DUST(I,J,LL-1,K))*FACT ENDDO endif + 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 + ENDDO ! only interpolate GFS d3d fields when == ested ! if(iostatusD3D==0)then @@ -1114,7 +1135,7 @@ SUBROUTINE MDL2P(iostatusD3D) ! IF(IGET(012) > 0)THEN IF(LVLS(LP,IGET(012)) > 0)THEN - IF(IGET(023) > 0 .AND. NINT(SPL(LP)) == 100000) THEN + IF((IGET(023) > 0 .OR. IGET(445) > 0) .AND. NINT(SPL(LP)) == 100000) THEN GO TO 222 ELSE !$omp parallel do private(i,j) @@ -1314,7 +1335,7 @@ SUBROUTINE MDL2P(iostatusD3D) ENDDO ENDDO ! - IF(MODELNAME == 'GFS')THEN + IF(MODELNAME == 'GFS' .or. MODELNAME == 'FV3R')THEN CALL CALRH_GFS(EGRID2(1,jsta),TSL(1,jsta),QSL(1,jsta),EGRID1(1,jsta)) ELSEIF (MODELNAME == 'RAPR')THEN CALL CALRH_GSD(EGRID2(1,jsta),TSL(1,jsta),QSL(1,jsta),EGRID1(1,jsta)) @@ -2258,6 +2279,35 @@ SUBROUTINE MDL2P(iostatusD3D) endif ENDIF ENDIF +! E. James - 8 Dec 2017: SMOKE from WRF-CHEM +!--- SMOKE + IF (IGET(738) > 0) THEN + IF (LVLS(LP,IGET(738)) > 0) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J) = (1./RD)*SMOKESL(I,J,1)*(SPL(LP)/TSL(I,J)) + ENDDO + ENDDO + if(grib == 'grib1')then + ID(1:46)=0 + ID(02)=141 ! Parameter Table 141 + ID(36)=2 + CALL GRIBIT(IGET(738),LP,GRID1,IM,JM) + elseif(grib == 'grib2') then + cfld = cfld + 1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(738)) + fld_info(cfld)%lvl=LVLSXML(LP,IGET(738)) +!$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) = GRID1(i,jj) + enddo + enddo + endif + ENDIF + ENDIF if (gocart_on) then !--- DUST IF (IGET(438) > 0) THEN @@ -4156,6 +4206,8 @@ SUBROUTINE MDL2P(iostatusD3D) ! ADJUST 1000 MB HEIGHT TO MEMBEANCE SLP IF(IGET(023) > 0.OR.IGET(445) > 0)THEN IF(IGET(012) > 0)THEN +! dong add missing value to 1000 mb hgt + GRID1= spval DO LP=LSM,1,-1 IF(ABS(SPL(LP)-1.0E5) <= 1.0E-5)THEN IF(LVLS(LP,IGET(012)) > 0)THEN @@ -4173,6 +4225,7 @@ SUBROUTINE MDL2P(iostatusD3D) !$omp parallel do private(i,j,PSLPIJ,ALPSL,PSFC) DO J=JSTA,JEND DO I=1,IM + IF(PSLP(I,J) < spval) THEN PSLPIJ = PSLP(I,J) ALPSL = LOG(PSLPIJ) PSFC = PINT(I,J,NINT(LMH(I,J))+1) @@ -4183,6 +4236,7 @@ SUBROUTINE MDL2P(iostatusD3D) ENDIF Z1000(I,J) = GRID1(I,J)*GI GRID1(I,J) = Z1000(I,J) + END IF ENDDO ENDDO END IF diff --git a/comupp/src/unipost/MDLFLD.f b/comupp/src/unipost/MDLFLD.f index 069f065ee..5ea2dddcb 100755 --- a/comupp/src/unipost/MDLFLD.f +++ b/comupp/src/unipost/MDLFLD.f @@ -75,7 +75,7 @@ SUBROUTINE MDLFLD ! MACHINE : CRAY C-90 !$$$ ! - use vrbls4d, only: dust, salt, suso, waso, soot + use vrbls4d, only: dust, salt, suso, waso, soot, smoke use vrbls3d, only: zmid, t, pmid, q, cwm, f_ice, f_rain, f_rimef, qqw, qqi,& qqr, qqs, cfr, cfr_raw, dbz, dbzr, dbzi, dbzc, qqw, nlice, nrain, qqg, zint, qqni,& qqnr, qqnw, qqnwfa, qqnifa, uh, vh, mcvg, omga, wh, q2, ttnd, rswtt, & @@ -172,6 +172,7 @@ SUBROUTINE MDLFLD ! ALLOCATE LOCAL ARRAYS ! ! Set up logical flag to indicate whether model outputs radar directly + Model_Radar = .false. IF (ABS(MAXVAL(REF_10CM)-SPVAL)>SMALL)Model_Radar=.True. if(me==0)print*,'Did post read in model derived radar ref ',Model_Radar ALLOCATE(EL (IM,JSTA_2L:JEND_2U,LM)) @@ -635,12 +636,23 @@ SUBROUTINE MDLFLD ENDIF ELSEIF (IICE == 1) THEN QQG(I,J,L) = max(QQG(I,J,L),0.0) - DBZR(I,J,L) = ((QQR(I,J,L)*DENS)**1.75) * 3.630803E-9 * 1.E18 ! Z FOR RAIN - DBZI(I,J,L) = DBZI(I,J,L) + ((QQS(I,J,L)*DENS)**1.75) * & + if(QQR(I,J,L) < SPVAL .and. QQR(I,J,L)> 0.0) then + DBZR(I,J,L) = ((QQR(I,J,L)*DENS)**1.75) * 3.630803E-9 * 1.E18 ! Z FOR RAIN + else + DBZR(I,J,L) = 0. + endif + if(QQS(I,J,L) < SPVAL .and. QQS(I,J,L) > 0.0) then + DBZI(I,J,L) = DBZI(I,J,L) + ((QQS(I,J,L)*DENS)**1.75) * & & 2.18500E-10 * 1.E18 ! Z FOR SNOW - IF (QQG(I,J,L) < SPVAL) & + else + DBZI(I,J,L) = DBZI(I,J,L) + endif + IF (QQG(I,J,L) < SPVAL .and. QQG(I,J,L)> 0.0) then DBZI(I,J,L) = DBZI(I,J,L) + ((QQG(I,J,L)*DENS)**1.75) * & & 1.033267E-9 * 1.E18 ! Z FOR GRAUP + else + DBZI(I,J,L) = DBZI(I,J,L) + endif IF (Model_Radar) THEN ze_nc=10.**(0.1*REF_10CM(I,J,L)) DBZ(I,J,L) = ze_nc+CUREFL(I,J) @@ -858,7 +870,8 @@ SUBROUTINE MDLFLD (IGET(450).GT.0).OR.(IGET(480).GT.0).OR. & (IGET(774).GT.0).OR.(IGET(747).GT.0).OR. & (IGET(464).GT.0).OR.(IGET(467).GT.0).OR. & - (IGET(909).GT.0) ) THEN + (IGET(629).GT.0).OR.(IGET(630).GT.0).OR. & + (IGET(909).GT.0).OR.(IGET(737).GT.0) ) THEN DO 190 L=1,LM @@ -2235,8 +2248,36 @@ SUBROUTINE MDLFLD endif END IF ENDIF - -! ---- ADD GOCART FIELDS +! +! E. James - 8 Dec 2017: SMOKE from WRF-CHEM +! SMOKE + IF (IGET(737).GT.0) THEN + IF (LVLS(L,IGET(737)).GT.0) THEN + LL=LM-L+1 + ID(1:25) = 0 + ID(14) = 2 +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J) = (1./RD)*(PMID(I,J,LL)/T(I,J,LL))*SMOKE(I,J,LL,1) + ENDDO + ENDDO + if(grib=="grib1") then + CALL GRIBIT(IGET(737),L,GRID1,IM,JM) + else if(grib=="grib2" )then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(737)) + fld_info(cfld)%lvl=LVLSXML(L,IGET(737)) +!$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) = GRID1(i,jj) + enddo + enddo + endif + END IF + ENDIF ! ! DUST 1 IF (IGET(629).GT.0) THEN @@ -2247,7 +2288,8 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = DUST(I,J,LL,1) + !GRID1(I,J) = DUST(I,J,LL,1) + GRID1(I,J) = DUST(I,J,LL,1)*RHOMID(I,J,LL) !lzhang ug/kg-->ug/m3 ENDDO ENDDO if(grib=="grib1") then @@ -2276,7 +2318,8 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = DUST(I,J,LL,2) + !GRID1(I,J) = DUST(I,J,LL,2) + GRID1(I,J) = DUST(I,J,LL,2)*RHOMID(I,J,LL) !lzhang ug/kg-->ug/m3 ENDDO ENDDO if(grib=="grib1") then @@ -2305,7 +2348,8 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = DUST(I,J,LL,3) + !GRID1(I,J) = DUST(I,J,LL,3) + GRID1(I,J) = DUST(I,J,LL,3)*RHOMID(I,J,LL) !lzhang ug/kg-->ug/m3 ENDDO ENDDO if(grib=="grib1") then @@ -2334,7 +2378,8 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = DUST(I,J,LL,4) + !GRID1(I,J) = DUST(I,J,LL,4) + GRID1(I,J) = DUST(I,J,LL,4)*RHOMID(I,J,LL) !lzhang ug/kg-->ug/m3 ENDDO ENDDO if(grib=="grib1") then @@ -2363,7 +2408,8 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = DUST(I,J,LL,5) + !GRID1(I,J) = DUST(I,J,LL,5) + GRID1(I,J) = DUST(I,J,LL,5)*RHOMID(I,J,LL) !lzhang ug/kg-->ug/m3 ENDDO ENDDO if(grib=="grib1") then @@ -2392,7 +2438,7 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = SALT(I,J,LL,2) + GRID1(I,J) = SALT(I,J,LL,1)*RHOMID(I,J,LL) !lzhang ug/kg-->ug/m3 ENDDO ENDDO if(grib=="grib1") then @@ -2421,7 +2467,7 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = SALT(I,J,LL,3) + GRID1(I,J) = SALT(I,J,LL,2)*RHOMID(I,J,LL) !lzhang ug/kg-->ug/m3 ENDDO ENDDO if(grib=="grib1") then @@ -2450,7 +2496,7 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = SALT(I,J,LL,4) + GRID1(I,J) = SALT(I,J,LL,3)*RHOMID(I,J,LL) !lzhang ug/kg-->ug/m3 ENDDO ENDDO if(grib=="grib1") then @@ -2479,7 +2525,7 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = SALT(I,J,LL,5) + GRID1(I,J) = SALT(I,J,LL,4)*RHOMID(I,J,LL) !lzhang ug/kg-->ug/m3 ENDDO ENDDO if(grib=="grib1") then @@ -2508,7 +2554,7 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = SALT(I,J,LL,1) + GRID1(I,J) = SALT(I,J,LL,5)*RHOMID(I,J,LL) !lzhang ug/kg-->ug/m3 ENDDO ENDDO if(grib=="grib1") then @@ -2537,7 +2583,8 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = SUSO(I,J,LL,1) + !GRID1(I,J) = SUSO(I,J,LL,1) + GRID1(I,J) = SUSO(I,J,LL,1)*RHOMID(I,J,LL) !lzhang ug/kg-->ug/m3 ENDDO ENDDO if(grib=="grib1") then @@ -2566,7 +2613,8 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = WASO(I,J,LL,1) + !GRID1(I,J) = WASO(I,J,LL,1) + GRID1(I,J) = WASO(I,J,LL,1)*RHOMID(I,J,LL) !lzhang ENDDO ENDDO if(grib=="grib1") then @@ -2595,7 +2643,8 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = WASO(I,J,LL,2) + !GRID1(I,J) = WASO(I,J,LL,2) + GRID1(I,J) = WASO(I,J,LL,2)*RHOMID(I,J,LL) !lzhang ENDDO ENDDO if(grib=="grib1") then @@ -2624,7 +2673,8 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = SOOT(I,J,LL,1) + !GRID1(I,J) = SOOT(I,J,LL,1) + GRID1(I,J) = SOOT(I,J,LL,1)*RHOMID(I,J,LL) !lzhang ENDDO ENDDO if(grib=="grib1") then @@ -2653,7 +2703,8 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = SOOT(I,J,LL,2) + !GRID1(I,J) = SOOT(I,J,LL,2) + GRID1(I,J) = SOOT(I,J,LL,2)*RHOMID(I,J,LL) !lzhang ENDDO ENDDO if(grib=="grib1") then diff --git a/comupp/src/unipost/MISCLN.f b/comupp/src/unipost/MISCLN.f index 8f0361125..e7172c4ae 100644 --- a/comupp/src/unipost/MISCLN.f +++ b/comupp/src/unipost/MISCLN.f @@ -2292,10 +2292,12 @@ SUBROUTINE MISCLN EGRID2,EGRID3,EGRID4,EGRID5) ! IF (IGET(032).GT.0.or.IGET(566)>0) THEN +! dong add missing value for cape + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = EGRID1(I,J) + IF(T1D(I,J) < spval) GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) @@ -2320,10 +2322,12 @@ SUBROUTINE MISCLN ENDIF ! IF (IGET(107) > 0 .or. IGET(567) > 0) THEN +! dong add missing value for cape + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = - EGRID2(I,J) + IF(T1D(I,J) < spval) GRID1(I,J) = - EGRID2(I,J) ENDDO ENDDO ! @@ -2332,7 +2336,7 @@ SUBROUTINE MISCLN !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = - GRID1(I,J) + IF(T1D(I,J) < spval) GRID1(I,J) = - GRID1(I,J) ENDDO ENDDO ! @@ -3391,10 +3395,12 @@ SUBROUTINE MISCLN EGRID2,EGRID3,EGRID4,EGRID5) IF (IGET(032).GT.0.or.IGET(582)>0) THEN +! dong add missing value for cape + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = EGRID1(I,J) + IF(T1D(I,J) < spval) GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO @@ -3419,10 +3425,12 @@ SUBROUTINE MISCLN endif ENDIF IF (IGET(107).GT.0.or.IGET(583)>0) THEN +! dong add missing value for cape + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = - EGRID2(I,J) + IF(T1D(I,J) < spval) GRID1(I,J) = - EGRID2(I,J) ENDDO ENDDO ! @@ -3431,7 +3439,7 @@ SUBROUTINE MISCLN !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = - GRID1(I,J) + IF(T1D(I,J) < spval) GRID1(I,J) = - GRID1(I,J) ENDDO ENDDO ! @@ -3526,10 +3534,12 @@ SUBROUTINE MISCLN EGRID2,EGRID3,EGRID4,EGRID5) ! IF (IGET(032).GT.0.or.IGET(584)>0) THEN +! dong add missing value to cin + GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = EGRID1(I,J) + IF(T1D(I,J) < spval) GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) @@ -3555,17 +3565,19 @@ SUBROUTINE MISCLN ENDIF IF (IGET(107).GT.0.or.IGET(585)>0) THEN +! dong add missing value to cin + GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = - EGRID2(I,J) + IF(T1D(I,J) < spval) GRID1(I,J) = - EGRID2(I,J) ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = - GRID1(I,J) + IF(T1D(I,J) < spval) GRID1(I,J) = - GRID1(I,J) ENDDO ENDDO ID(1:25)=0 diff --git a/comupp/src/unipost/MPI_FIRST.f b/comupp/src/unipost/MPI_FIRST.f index e805bc2ce..a0492d89b 100644 --- a/comupp/src/unipost/MPI_FIRST.f +++ b/comupp/src/unipost/MPI_FIRST.f @@ -37,7 +37,7 @@ SUBROUTINE MPI_FIRST() ! MACHINE : IBM RS/6000 SP !$$$ ! - use vrbls4d, only: dust, salt, soot, waso, suso + use vrbls4d, only: dust, salt, soot, waso, suso, pp25, pp10 use vrbls3d, only: u, v, t, q, uh, vh, wh, pmid, pmidv, pint, alpint, zmid, & zint, q2, omga, t_adj, ttnd, rswtt, rlwtt, exch_h, train, tcucn, & el_pbl, cwm, f_ice, f_rain, f_rimef, qqw, qqi, qqr, qqs,qqg, qqni, qqnr, & @@ -49,9 +49,12 @@ SUBROUTINE MPI_FIRST() duwt, suem, susd, sudp, suwt, ocem, ocsd, ocdp, ocwt, bcem, bcsd, & bcdp, bcwt, ssem, sssd, ssdp, sswt, ext, dpres, rhomid use vrbls2d, only: wspd10max, w_up_max, w_dn_max, w_mean, refd_max, up_heli_max, & - prate_max, fprate_max, & + prate_max, fprate_max, swupt, & up_heli_max16, grpl_max, up_heli, up_heli16, ltg1_max, ltg2_max, & - ltg3_max, nci_ltg, nca_ltg, nci_wq, nca_wq, nci_refd, & + up_heli_min, up_heli_min16, up_heli_max02, up_heli_min02, up_heli_max03, & + up_heli_min03, rel_vort_max, rel_vort_max01, wspd10umax, wspd10vmax, & + refdm10c_max, hail_max2d, hail_maxk1, ltg3_max,rel_vort_maxhy1, & + nci_ltg, nca_ltg, nci_wq, nca_wq, nci_refd, & u10, v10, tshltr, qshltr, mrshltr, smstav, ssroff, bgroff, & nca_refd, vegfrc, acsnow, acsnom, cmc, sst, qz0, thz0, uz0, vz0, qs, ths,& sno, snonc, snoavg, psfcavg, t10m, t10avg, akmsavg, akhsavg, u10max, & @@ -74,7 +77,9 @@ SUBROUTINE MPI_FIRST() avisdiffswin, airbeamswin, airdiffswin, snowfall, dusmass, ducmass, & dusmass25, susmass, sucmass, susmass25, sucmass25, ocsmass, occmass, & ocsmass25, occmass25, bcsmass, bccmass, bcsmass25, bccmass25, & - sssmass, sscmass, sssmass25, sscmass25, ducmass25 + sssmass, sscmass, sssmass25, sscmass25, ducmass25, & + dustcb, sscb, bccb, occb, sulfcb, dustallcb, ssallcb,dustpm,sspm, pp25cb,& + pp10cb !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/comupp/src/unipost/RQSTFLD.f b/comupp/src/unipost/RQSTFLD.f index f573f4a05..af429aeeb 100644 --- a/comupp/src/unipost/RQSTFLD.f +++ b/comupp/src/unipost/RQSTFLD.f @@ -15,6 +15,10 @@ module RQSTFLD_mod ! 2014-12-09 William Lewis added MSG/SEVIRI imager, ! GOES-13 and GOES-15 imagers, ! and completed SSMI and SSMIS (F13-F20) +! 2019-04-01 Sharon Nebuda added GOES-16 GOES-17 ABI IR Channels 7-16 +! 2019-04-22 Wen Meng increased model MXLVL to 500 +! 2019-05-08 Wen Meng added continuous accumulated precipitations(417, 418, +! 419). !-------------------------------------------------------------------- implicit none @@ -284,6 +288,15 @@ module RQSTFLD_mod DATA IFILV(034),AVBL(034),IQ(034),IS(034),AVBLGRB2(034) & & /1,'ACM GRD SCALE PRECIP',062,001, & & 'ACM NCPCP ON surface'/ + DATA IFILV(417),AVBL(417),IQ(417),IS(417),AVBLGRB2(417) & + & /1,'CACM TOTAL PRECIP ',061,001, & + & 'CACM A_PCP ON surface'/ + DATA IFILV(418),AVBL(418),IQ(418),IS(418),AVBLGRB2(418) & + & /1,'CACM CONVCTIVE PRECIP',063,001, & + & 'CACM ACPCP ON surface'/ + DATA IFILV(419),AVBL(419),IQ(419),IS(419),AVBLGRB2(419) & + & /1,'ACM GRD SCALE PRECIP',062,001, & + & 'CACM NCPCP ON surface'/ DATA IFILV(035),AVBL(035),IQ(035),IS(035),AVBLGRB2(035) & & /1,'ACM SNOWFALL ',065,001, & & 'ACM WEASD ON surface'/ @@ -353,7 +366,7 @@ module RQSTFLD_mod DATA IFILV(148),AVBL(148),IQ(148),IS(148),AVBLGRB2(148) & & /1,'CLOUD BOT PRESSURE ',001,002, & & 'PRES ON cloud_base'/ - DATA IFILV(787),AVBL(787),IQ(787),IS(787),AVBLGRB2(787) & + DATA IFILV(798),AVBL(798),IQ(798),IS(798),AVBLGRB2(798) & & /1,'GSD CLD BOT PRESSURE',001,002, & & 'GSD PRES ON cloud_base'/ DATA IFILV(149),AVBL(149),IQ(149),IS(149),AVBLGRB2(149) & @@ -695,7 +708,7 @@ module RQSTFLD_mod & 'UPHL ON spec_hgt_lvl_above_grnd'/ !427 DATA IFILV(428),AVBL(428),IQ(428),IS(428),AVBLGRB2(428) & & /1,'VERT INTEG GRAUP ',179,200, & - & 'GRMR ON entire_atmos_single_lyr'/ !428 + & 'TCOLG ON entire_atmos_single_lyr'/ !428 DATA IFILV(429),AVBL(429),IQ(429),IS(429),AVBLGRB2(429) & & /1,'MAX VERT INTEG GRAUP',239,200, & & 'MAXVIG ON entire_atmos_single_lyr'/ !429 @@ -1846,32 +1859,29 @@ module RQSTFLD_mod DATA IFILV(614),AVBL(614),IQ(614),IS(614),AVBLGRB2(614) & & /1,'BC AER OPT DEP 550 ',137,200, & 'Black carbon aer opt dep at 550 '/ -! ADD DUST PRODUCTION AND REMOVAL FLUXES (GOCART) - DATA IFILV(615),AVBL(615),IQ(615),IS(615),AVBLGRB2(615) & - & /1,'DUST EMISSION FLUX ',151,200, & - 'dust emission fluxes '/ +! ADD BC, OC, SULF AEROSOL COLUMN MASS DENSITY (GOCART) DATA IFILV(616),AVBL(616),IQ(616),IS(616),AVBLGRB2(616) & - & /1,'DUST SEDIMENTATION ',152,200, & - 'dust sedimentation fluxes '/ + & /1,'BC COL MASS DEN ',151,200, & + 'fine bc col mass density '/ DATA IFILV(617),AVBL(617),IQ(617),IS(617),AVBLGRB2(617) & - & /1,'DUST DRY DEPOSITION ',153,200, & - 'dust dry deposition fluxes '/ + & /1,'OC COL MASS DEN ',152,200, & + 'fine oc col mass density '/ DATA IFILV(618),AVBL(618),IQ(618),IS(618),AVBLGRB2(618) & - & /1,'DUST WET DEPOSITION ',154,200, & - 'dust wet deposition fluxes '/ + & /1,'SULF COL MASS DEN ',153,200, & + 'fine sulf col mass density '/ ! ADD AEROSOL SURFACE MASS CONCENTRATION (GOCART), use table 129 DATA IFILV(619),AVBL(619),IQ(619),IS(619),AVBLGRB2(619) & - & /1,'CR AER SFC MASS CON ',156,001, & - 'coarse aer sfc mass concentration '/ + & /1,'PM10 SFC MASS CON ',154,001, & + 'coarse sfc mass concentration '/ DATA IFILV(620),AVBL(620),IQ(620),IS(620),AVBLGRB2(620) & - & /1,'FN AER SFC MASS CON ',157,001, & - 'fine aer sfc mass concentration '/ -! ADD AEROSOL COLUMN MASS DENSITY (GOCART) + & /1,'PM25 SFC MASS CON ',155,001, & + 'fine sfc mass concentration '/ +! ADD PM10 and PM25 AEROSOL COLUMN MASS DENSITY (GOCART) DATA IFILV(621),AVBL(621),IQ(621),IS(621),AVBLGRB2(621) & - & /1,'CR AER COL MASS DEN ',155,200, & + & /1,'PM10 COL MASS DEN ',156,200, & 'coarse aerosol col mass density '/ DATA IFILV(622),AVBL(622),IQ(622),IS(622),AVBLGRB2(622) & - & /1,'FN AER COL MASS DEN ',158,200, & + & /1,'PM25 COL MASS DEN ',157,200, & 'fine aerosol col mass density '/ ! ADD AEROSOL OPTICAL DEPTH AT OTHER CHANNELS (GOCART) DATA IFILV(623),AVBL(623),IQ(623),IS(623),AVBLGRB2(623) & @@ -1922,8 +1932,8 @@ module RQSTFLD_mod & /1,'SEASALT 4 ON MDL SFC',248,109, & & 'SS4 ON hybrid_lvl'/ DATA IFILV(638),AVBL(638),IQ(638),IS(638),AVBLGRB2(638) & - & /1,'SEASALT 0 ON MDL SFC',253,109, & - & 'SS0 ON hybrid_lvl'/ + & /1,'SEASALT 5 ON MDL SFC',253,109, & + & 'SS5 ON hybrid_lvl'/ DATA IFILV(639),AVBL(639),IQ(639),IS(639),AVBLGRB2(639) & & /1,'SULFATE ON MDL SFC ',254,109, & & 'SO4 ON hybrid_lvl'/ @@ -1946,6 +1956,168 @@ module RQSTFLD_mod DATA IFILV(645),AVBL(645),IQ(645),IS(645),AVBLGRB2(645) & & /1,'DPRES ON MDL SFCS ',1,110, & & 'DPRES hybrid_lvl '/ +! ADD OTHER PM2.5 AEROSOL COLUMN MASS DENSITY (GOCART) + DATA IFILV(646),AVBL(646),IQ(646),IS(646),AVBLGRB2(646) & + & /1,'DUST COL MASS DEN ',159,200, & + 'fine dust col mass density '/ + DATA IFILV(647),AVBL(647),IQ(647),IS(647),AVBLGRB2(647) & + & /1,'SEAS COL MASS DEN ',160,200, & + 'fine seas col mass density '/ + DATA IFILV(648),AVBL(648),IQ(648),IS(648),AVBLGRB2(648) & + & /1,'SINGLE SCAT ALBD 340',131,200, & + 'Aer single scatter alb at 340 nm'/ + DATA IFILV(649),AVBL(649),IQ(649),IS(649),AVBLGRB2(649) & + & /1,'AER ASYM FACTOR 340 ',130,200, & + 'Aerosol asymmetry factor at 340 nm'/ +! ADD AEROSOL SCATTERING AOT + DATA IFILV(650),AVBL(650),IQ(650),IS(650),AVBLGRB2(650) & + & /1,'AER SCAT OPT DEP 550',129,200, & + 'Total scat aer opt dep at 550 nm'/ + DATA IFILV(651),AVBL(651),IQ(651),IS(651),AVBLGRB2(651) & + & /1,'DU SCAT OPT DEP 550 ',129,200, & + 'DUST scat aer opt dep at 550 nm'/ + DATA IFILV(652),AVBL(652),IQ(652),IS(652),AVBLGRB2(652) & + & /1,'SS SCAT OPT DEP 550 ',129,200, & + 'SALT scat aer opt dep at 550 nm'/ + DATA IFILV(653),AVBL(653),IQ(653),IS(653),AVBLGRB2(653) & + & /1,'SU SCAT OPT DEP 550 ',129,200, & + 'SUSO scat aer opt dep at 550 nm'/ + DATA IFILV(654),AVBL(654),IQ(654),IS(654),AVBLGRB2(654) & + & /1,'OC SCAT OPT DEP 550 ',129,200, & + 'WASO scat aer opt dep at 550 nm'/ + DATA IFILV(655),AVBL(655),IQ(655),IS(655),AVBLGRB2(655) & + & /1,'BC SCAT OPT DEP 550 ',129,200, & + 'SOOT scat aer opt dep at 550 nm'/ +! ADD AEROSOL ANGTROM EXPONENT + DATA IFILV(656),AVBL(656),IQ(656),IS(656),AVBLGRB2(656) & + & /1,'ANGSTROM EXP 440_860',255,200, & + 'Angstrom exponent 440-860 nm '/ + +! ADD DUST,SS, OC,BC, SU PRODUCTION AND REMOVAL FLUXES (GOCART) + DATA IFILV(659),AVBL(659),IQ(659),IS(659),AVBLGRB2(659) & + & /1,'DUST EMISSION FLUX ',151,200, & + 'dust emission fluxes '/ + DATA IFILV(660),AVBL(660),IQ(660),IS(660),AVBLGRB2(660) & + & /1,'DUST SEDIMENTATION ',152,200, & + 'dust sedimentation fluxes '/ + DATA IFILV(661),AVBL(661),IQ(661),IS(661),AVBLGRB2(661) & + & /1,'DUST DRY DEPOSITION ',153,200, & + 'dust dry deposition fluxes '/ + DATA IFILV(662),AVBL(662),IQ(662),IS(662),AVBLGRB2(662) & + & /1,'DUST WET DEPOSITION ',154,200, & + 'dust wet deposition fluxes '/ + DATA IFILV(663),AVBL(663),IQ(663),IS(663),AVBLGRB2(663) & + & /1,'SS EMISSION FLUX ',151,200, & + 'seasalt emission fluxes '/ + DATA IFILV(664),AVBL(664),IQ(664),IS(664),AVBLGRB2(664) & + & /1,'SS SEDIMENTATION ',152,200, & + 'seasalt sedimentation fluxes '/ + DATA IFILV(665),AVBL(665),IQ(665),IS(665),AVBLGRB2(665) & + & /1,'SS DRY DEPOSITION ',153,200, & + 'seasalt dry deposition fluxes '/ + DATA IFILV(666),AVBL(666),IQ(666),IS(666),AVBLGRB2(666) & + & /1,'SS WET DEPOSITION ',154,200, & + 'seasalt wet deposition fluxes '/ + DATA IFILV(667),AVBL(667),IQ(667),IS(667),AVBLGRB2(667) & + & /1,'BC EMISSION FLUX ',151,200, & + 'black carbon emission fluxes '/ + DATA IFILV(668),AVBL(668),IQ(668),IS(668),AVBLGRB2(668) & + & /1,'BC SEDIMENTATION ',152,200, & + 'black carbon sedimentation fluxes '/ + DATA IFILV(669),AVBL(669),IQ(669),IS(669),AVBLGRB2(669) & + & /1,'BC DRY DEPOSITION ',153,200, & + 'black carbon dry deposition fluxes'/ + DATA IFILV(670),AVBL(670),IQ(670),IS(670),AVBLGRB2(670) & + & /1,'BC WET DEPOSITION ',154,200, & + 'black carbon wet deposition fluxes'/ + DATA IFILV(671),AVBL(671),IQ(671),IS(671),AVBLGRB2(671) & + & /1,'OC EMISSION FLUX ',151,200, & + 'pom emission fluxes '/ + DATA IFILV(672),AVBL(672),IQ(672),IS(672),AVBLGRB2(672) & + & /1,'OC SEDIMENTATION ',152,200, & + 'pom sedimentation fluxes '/ + DATA IFILV(673),AVBL(673),IQ(673),IS(673),AVBLGRB2(673) & + & /1,'OC DRY DEPOSITION ',153,200, & + 'pom dry deposition fluxes '/ + DATA IFILV(674),AVBL(674),IQ(674),IS(674),AVBLGRB2(674) & + & /1,'OC WET DEPOSITION ',154,200, & + 'pom wet deposition fluxes '/ + DATA IFILV(675),AVBL(675),IQ(675),IS(675),AVBLGRB2(675) & + & /1,'SU EMISSION FLUX ',151,200, & + 'suldate emission fluxes '/ + DATA IFILV(676),AVBL(676),IQ(676),IS(676),AVBLGRB2(676) & + & /1,'SU SEDIMENTATION ',152,200, & + 'sulfate sedimentation fluxes '/ + DATA IFILV(677),AVBL(677),IQ(677),IS(677),AVBLGRB2(677) & + & /1,'SU DRY DEPOSITION ',153,200, & + 'sulfate dry deposition fluxes '/ + DATA IFILV(678),AVBL(678),IQ(678),IS(678),AVBLGRB2(678) & + & /1,'SU WET DEPOSITION ',154,200, & + 'sulfate wet deposition fluxes '/ + DATA IFILV(679),AVBL(679),IQ(679),IS(679),AVBLGRB2(679) & + & /1,'DU SCAVENGING FLUX ',155,200, & + 'dust scavenging fluxes '/ + DATA IFILV(680),AVBL(680),IQ(680),IS(680),AVBLGRB2(680) & + & /1,'SS SCAVENGING FLUX ',156,200, & + 'seasalt scavenging fluxes '/ + DATA IFILV(681),AVBL(681),IQ(681),IS(681),AVBLGRB2(681) & + & /1,'BC SCAVENGING FLUX ',157,200, & + 'black carbon scavenging fluxes '/ + DATA IFILV(682),AVBL(682),IQ(682),IS(682),AVBLGRB2(682) & + & /1,'OC SCAVENGING FLUX ',158,200, & + 'organic carbon scavenging fluxes '/ +! DATA IFILV(683),AVBL(683),IQ(683),IS(683),AVBLGRB2(683) & +! & /1,'SS CR SFC MASS CON ',159,200, & +! 'seasalt cr sfc mass concentration '/ + 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(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 '/ +! DATA IFILV(688),AVBL(688),IQ(688),IS(688),AVBLGRB2(688) & +! & /1,'OC SFC MASS CON ',163,001, & +! 'organic carbon sfc mass con '/ +! DATA IFILV(689),AVBL(689),IQ(689),IS(689),AVBLGRB2(689) & +! & /1,'SU SFC MASS CON ',164,001, & +! 'sulfate sfc mass con '/ +! DATA IFILV(690),AVBL(690),IQ(690),IS(690),AVBLGRB2(690) & +! & /1,'INST SU SFC MASS CON',164,001, & +! 'instn sulfate sfc mass con '/ +! DATA IFILV(691),AVBL(691),IQ(691),IS(691),AVBLGRB2(691) & +! & /1,'INST OC SFC MASS CON',164,001, & +! 'instn organic carbon sfc mass con '/ +! DATA IFILV(692),AVBL(692),IQ(692),IS(692),AVBLGRB2(692) & +! & /1,'INST BC SFC MASS CON',164,001, & +! 'instn black carbon sfc mass con '/ +! DATA IFILV(693),AVBL(693),IQ(693),IS(693),AVBLGRB2(693) & +! & /1,'INST DU CR SMASS ',164,001, & +! 'instn du coarse mode sfc mass con '/ +! DATA IFILV(694),AVBL(694),IQ(694),IS(694),AVBLGRB2(694) & +! & /1,'INST DU FN SMASS ',164,001, & +! 'instn du fine mode sfc mass con '/ +! DATA IFILV(695),AVBL(695),IQ(695),IS(695),AVBLGRB2(695) & +! & /1,'INST SS CR SMASS ',164,001, & +! 'instn ss coarse mode sfc mass con '/ +! DATA IFILV(696),AVBL(696),IQ(696),IS(696),AVBLGRB2(696) & +! & /1,'INST SS FN SMASS ',164,001, & +! 'instn ss fine mode sfc mass con '/ +! DATA IFILV(697),AVBL(697),IQ(697),IS(697),AVBLGRB2(697) & +! & /1,'INST AER CR SMASS ',164,001, & +! 'instn aer coarse mode sfc mass con'/ +! 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 + + ! Reserving Index 601-700 for GOCART ! @@ -2103,14 +2275,31 @@ module RQSTFLD_mod & /1,'AVE NORMAL SW RAD ',254,001, & & 'AVE NSWRF ON surface'/ ! E. James -! 11 May 2015 -! Adding instantaneous direct normal and diffuse horizontal irradiance - DATA IFILV(772),AVBL(772),IQ(772),IS(772),AVBLGRB2(772) & - & /1,'INSTN DIR NOR IRRAD ',166,001, & - & 'INST SWDDNI ON surface'/ - DATA IFILV(773),AVBL(773),IQ(773),IS(773),AVBLGRB2(773) & - & /1,'INSTN DIF HOR IRRAD ',167,001, & - & 'INST SWDDIF ON surface'/ +! 15 Jun 2016 +! Adding vertically-integrated smoke AOD + DATA IFILV(735),AVBL(735),IQ(735),IS(735),AVBLGRB2(735) & + & /1,'VRTCLY INTGRTD AOD ',129,200, & + & 'AOD ON entire_atmos_single_lyr'/ +! Adding vertically-integrated smoke variable + DATA IFILV(736),AVBL(736),IQ(736),IS(736),AVBLGRB2(736) & + & /1,'VRTCLY INTGRTD SMOKE',237,200, & + & 'SMOKE ON entire_atmos_single_lyr'/ +! Adding smoke variable on mdl surfaces + DATA IFILV(737),AVBL(737),IQ(737),IS(737),AVBLGRB2(737) & + & /1,'SMOKE ON MDL SURFCS ',203,109, & + & 'SM1 ON hybrid_lvl'/ +! Adding smoke variable on p surfaces + DATA IFILV(738),AVBL(738),IQ(738),IS(738),AVBLGRB2(738) & + & /1,'SMOKE ON P SURFCS ',203,100, & + & 'SM1 ON isobaric_sfc'/ +! Adding lowest model level smoke + DATA IFILV(739),AVBL(739),IQ(739),IS(739),AVBLGRB2(739) & + & /1,'SMOKE NEAR SURFACE ',203,105, & + & 'SM1 ON spec_hgt_lvl_above_grnd'/ +! Adding mean fire radiative power + DATA IFILV(740),AVBL(740),IQ(740),IS(740),AVBLGRB2(740) & + & /1,'MEAN FIRE RDIATV PWR',164,001, & + & 'MEAN FIRE RADIATIVE POWER ON surface'/ ! E. James ! 28 Mar 2016 ! Adding clear-sky surface up and downwelling short and longwave irradiance @@ -2126,6 +2315,15 @@ module RQSTFLD_mod DATA IFILV(745),AVBL(745),IQ(745),IS(745),AVBLGRB2(745) & & /1,'INSTN CLRSKY LGWV UP',162,001, & & 'INST LWUPBC ON surface'/ +! E. James +! 11 May 2015 +! Adding instantaneous direct normal and diffuse horizontal irradiance + DATA IFILV(772),AVBL(772),IQ(772),IS(772),AVBLGRB2(772) & + & /1,'INSTN DIR NOR IRRAD ',166,001, & + & 'INST SWDDNI ON surface'/ + DATA IFILV(773),AVBL(773),IQ(773),IS(773),AVBLGRB2(773) & + & /1,'INSTN DIF HOR IRRAD ',167,001, & + & 'INST SWDDIF ON surface'/ ! ! satellite index 800-899 @@ -2258,6 +2456,89 @@ module RQSTFLD_mod DATA IFILV(911),AVBL(911),IQ(911),IS(911),AVBLGRB2(911) & & /1,'VTEMP AT FD HEIGHTS ',012,103, & & 'VTMP ON spec_alt_above_mean_sea_lvl'/ + +! Add GOES-16 & GOES-17 ABI IR Channels 7-16 +! Grib2 defines each channel as a separate output field + DATA IFILV(927),AVBL(927),IQ(927),IS(927),AVBLGRB2(927) & + & /1,'G16 CH7 NON-NADIR ',118,109, & + & 'G16 CH7 ABI TB TOA '/ !Table 130 + + DATA IFILV(928),AVBL(928),IQ(928),IS(928),AVBLGRB2(928) & + & /1,'G16 CH8 NON-NADIR ',118,109, & + & 'G16 CH8 ABI TB TOA '/ !Table 130 + + DATA IFILV(929),AVBL(929),IQ(929),IS(929),AVBLGRB2(929) & + & /1,'G16 CH9 NON-NADIR ',118,109, & + & 'G16 CH9 ABI TB TOA '/ !Table 130 + + DATA IFILV(930),AVBL(930),IQ(930),IS(930),AVBLGRB2(930) & + & /1,'G16 CH10 NON-NADIR ',118,109, & + & 'G16 CH10 ABI TB TOA '/ !Table 130 + + DATA IFILV(931),AVBL(931),IQ(931),IS(931),AVBLGRB2(931) & + & /1,'G16 CH11 NON-NADIR ',118,109, & + & 'G16 CH11 ABI TB TOA '/ !Table 130 + + DATA IFILV(932),AVBL(932),IQ(932),IS(932),AVBLGRB2(932) & + & /1,'G16 CH12 NON-NADIR ',118,109, & + & 'G16 CH12 ABI TB TOA '/ !Table 130 + + DATA IFILV(933),AVBL(933),IQ(933),IS(933),AVBLGRB2(933) & + & /1,'G16 CH13 NON-NADIR ',118,109, & + & 'G16 CH13 ABI TB TOA '/ !Table 130 + + DATA IFILV(934),AVBL(934),IQ(934),IS(934),AVBLGRB2(934) & + & /1,'G16 CH14 NON-NADIR ',118,109, & + & 'G16 CH14 ABI TB TOA '/ !Table 130 + + DATA IFILV(935),AVBL(935),IQ(935),IS(935),AVBLGRB2(935) & + & /1,'G16 CH15 NON-NADIR ',118,109, & + & 'G16 CH15 ABI TB TOA '/ !Table 130 + + DATA IFILV(936),AVBL(936),IQ(936),IS(936),AVBLGRB2(936) & + & /1,'G16 CH16 NON-NADIR ',118,109, & + & 'G16 CH16 ABI TB TOA '/ !Table 130 + + DATA IFILV(937),AVBL(937),IQ(937),IS(937),AVBLGRB2(937) & + & /1,'G17 CH7 NON-NADIR ',118,109, & + & 'G17 CH7 ABI TB TOA '/ !Table 130 + + DATA IFILV(938),AVBL(938),IQ(938),IS(938),AVBLGRB2(938) & + & /1,'G17 CH8 NON-NADIR ',118,109, & + & 'G17 CH8 ABI TB TOA '/ !Table 130 + + DATA IFILV(939),AVBL(939),IQ(939),IS(939),AVBLGRB2(939) & + & /1,'G17 CH9 NON-NADIR ',118,109, & + & 'G17 CH9 ABI TB TOA '/ !Table 130 + + DATA IFILV(940),AVBL(940),IQ(940),IS(940),AVBLGRB2(940) & + & /1,'G17 CH10 NON-NADIR ',118,109, & + & 'G17 CH10 ABI TB TOA '/ !Table 130 + + DATA IFILV(941),AVBL(941),IQ(941),IS(941),AVBLGRB2(941) & + & /1,'G17 CH11 NON-NADIR ',118,109, & + & 'G17 CH11 ABI TB TOA '/ !Table 130 + + DATA IFILV(942),AVBL(942),IQ(942),IS(942),AVBLGRB2(942) & + & /1,'G17 CH12 NON-NADIR ',118,109, & + & 'G17 CH12 ABI TB TOA '/ !Table 130 + + DATA IFILV(943),AVBL(943),IQ(943),IS(943),AVBLGRB2(943) & + & /1,'G17 CH13 NON-NADIR ',118,109, & + & 'G17 CH13 ABI TB TOA '/ !Table 130 + + DATA IFILV(944),AVBL(944),IQ(944),IS(944),AVBLGRB2(944) & + & /1,'G17 CH14 NON-NADIR ',118,109, & + & 'G17 CH14 ABI TB TOA '/ !Table 130 + + DATA IFILV(945),AVBL(945),IQ(945),IS(945),AVBLGRB2(945) & + & /1,'G17 CH15 NON-NADIR ',118,109, & + & 'G17 CH15 ABI TB TOA '/ !Table 130 + + DATA IFILV(946),AVBL(946),IQ(946),IS(946),AVBLGRB2(946) & + & /1,'G17 CH16 NON-NADIR ',118,109, & + & 'G17 CH16 ABI TB TOA '/ !Table 130 + !end initialization ! end module RQSTFLD_mod diff --git a/comupp/src/unipost/SELECT_CHANNELS.f b/comupp/src/unipost/SELECT_CHANNELS.f index 980f6e6bf..9b84f7b0d 100644 --- a/comupp/src/unipost/SELECT_CHANNELS.f +++ b/comupp/src/unipost/SELECT_CHANNELS.f @@ -92,20 +92,20 @@ subroutine SELECT_CHANNELS_L(channelinfo,nchannels,channels,L,igot) endif if(L(i).eq.1)then k=k+1 -! temp(k)=channelinfo%Channel_Index(channels(i)) - endif - if(L(i).eq.0)then + temp(k)=channelinfo%Channel_Index(channels(i)) + endif + if(L(i).eq.0)then channelinfo%Process_Channel(channels(i))=.FALSE. ! turn off channel processing - endif + endif enddo ! if no channels were selected, then set igot=0 if(k.eq.0)then igot=0 return -! else -! channelinfo%n_channels=k -! channelinfo%Channel_Index(1:k)=temp(1:k) +! else +! channelinfo%n_channels=k +! channelinfo%Channel_Index(1:k)=temp(1:k) endif end subroutine SELECT_CHANNELS_L diff --git a/comupp/src/unipost/SET_OUTFLDS.f b/comupp/src/unipost/SET_OUTFLDS.f index c3de7c9e7..1d982cd40 100755 --- a/comupp/src/unipost/SET_OUTFLDS.f +++ b/comupp/src/unipost/SET_OUTFLDS.f @@ -156,9 +156,9 @@ SUBROUTINE SET_OUTFLDS(kth,th,kpv,pv) ! which each different level will be counted as one record ! NFLD = IFLD + NRECOUT = IREC ! Meng 04/19/18, add three fields for continous bucket -! NRECOUT = IREC - NRECOUT = IREC + 3 +! NRECOUT = IREC + 3 allocate(fld_info(NRECOUT+100)) do i=1,nrecout fld_info(i)%ifld = 0 diff --git a/comupp/src/unipost/SLP_new.f b/comupp/src/unipost/SLP_new.f index 56b8c11ea..7abe56394 100644 --- a/comupp/src/unipost/SLP_new.f +++ b/comupp/src/unipost/SLP_new.f @@ -48,7 +48,7 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) use vrbls2d, only: pslp, fis use masks, only: lmh use params_mod, only: overrc, ad05, cft0, g, rd, d608, h1, kslpd - use ctlblk_mod, only: jend, jsta, spl, num_procs, mpi_comm_comp, lsmp1, & + use ctlblk_mod, only: jend, jsta, spval, spl, num_procs, mpi_comm_comp, lsmp1, & jsta_m, jend_m, lm, im, jsta_2l, jend_2u, lsm, jm,& im_jm !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -72,6 +72,8 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) INTEGER :: IHE(JM),IHW(JM),IVE(JM),IVW(JM),IHS(JM),IHN(JM) integer ii,jj,I,J,L,N,LLMH,KM,KS,IHH2,KOUNT,KMN,NRLX,LHMNT, & LMHIJ,LMAP1,KMM,LP,LXXX,IERR +! dong + real a1,a2,a3,a4,a5,a6,a7,a8 !----------------------------------------------------------------------- LOGICAL :: STDRD,DONE(IM,JSTA_2L:JEND_2U) !----------------------------------------------------------------------- @@ -101,7 +103,12 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) DO I=1,IM LLMH = NINT(LMH(I,J)) PSLP(I,J) = PINT(I,J,LLMH+1) - TTV(I,J) = 0. +! dong +! TTV(I,J) = 0. + TTV(I,J) = spval + TNEW(I,J) = spval + + LMHO(I,J) = 0 DONE(I,J) = .FALSE. ENDDO @@ -223,8 +230,11 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM +! dong +! if (QPRES(I,J,LSM) .lt. spval) then TTV(I,J) = TPRES(I,J,L) HTM2D(I,J) = HTMO(I,J,L) +! end if ! spval if ! IF(TTV(I,J).lt.150. .and. TTV(I,J).gt.325.0)print* & ! ,'abnormal IC for T relaxation',i,j,TTV(I,J) enddo @@ -238,6 +248,8 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) !$omp parallel do private(i,j,tem) DO J=JSTA_M,JEND_M DO I=2,IM-1 +! dong + if (QPRES(I,J,LSM) .lt. spval) then !HC IF(HTM2D(I,J,L).GT.0.5.AND. !HC 1 HTM2D(I+IHW(J),J-1,L)*HTM2D(I+IHE(J),J-1,L) @@ -252,6 +264,7 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) TTV(I,J) = TPRES(I,J,L)*(1.+0.608*QPRES(I,J,L)) ENDIF ! if(i.eq.ii.and.j.eq.jj)print*,'Debug:L,TTV B SMOO= ',l,TTV(I,J) + end if ! spval ENDDO ENDDO ! @@ -265,6 +278,9 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) DO KM=1,KMM I = IMNT(KM,L) J = JMNT(KM,L) +! dong +! if (QPRES(I,J,LSM) .lt. spval) then + !HC TTV(I,J)=AD05*(4.*(TTV(I+IHW(J),J-1)+TTV(I+IHE(J),J-1) !HC 1 +TTV(I+IHW(J),J+1)+TTV(I+IHE(J),J+1)) @@ -279,10 +295,42 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) ! 3 +TTV(I-1,J+1)+TTV(I+1,J+1)) ! 4 -CFT0*TTV(I,J) ! eight point relaxation using old TTV + a1=TTV(I-1,J) + a2=TTV(I+1,J) + a3=TTV(I,J-1) + a4=TTV(I,J+1) + a5=TTV(I-1,J-1) + a6=TTV(I+1,J-1) + a7=TTV(I-1,J+1) + a8=TTV(I+1,J+1) +! if ((a1-spval) .le. 1e-10) a1=TTV(I,J) +! if ((a2-spval) .le. 1e-10) a2=TTV(I,J) +! if ((a3-spval) .le. 1e-10) a3=TTV(I,J) +! if ((a4-spval) .le. 1e-10) a4=TTV(I,J) +! if ((a5-spval) .le. 1e-10) a5=TTV(I,J) +! if ((a6-spval) .le. 1e-10) a6=TTV(I,J) +! if ((a7-spval) .le. 1e-10) a7=TTV(I,J) +! if ((a8-spval) .le. 1e-10) a8=TTV(I,J) + + if ((a1 .lt. spval) .and. & + (a2 .lt. spval) .and. & + (a3 .lt. spval) .and. & + (a4 .lt. spval) .and. & + (a5 .lt. spval) .and. & + (a6 .lt. spval) .and. & + (a7 .lt. spval) .and. & + (a8 .lt. spval) .and. (TTV(I,J) .lt. spval)) then + +! TNEW(I,J) = AD05*(4.*(a1 +a2 +a3 & +! +a4) +a5 +a6 & +! +a7+a8)-TTV(I,J)*CFT0 TNEW(I,J) = AD05*(4.*(TTV(I-1,J) +TTV(I+1,J) +TTV(I,J-1) & +TTV(I,J+1)) +TTV(I-1,J-1) +TTV(I+1,J-1) & +TTV(I-1,J+1)+TTV(I+1,J+1))-TTV(I,J)*CFT0 + else + TNEW(I,J) = TTV(I,J) + end if ! spval ! four point relaxation using old TTV ! TNEW(I,J)=TTV(I,J)+1.0*((TTV(I-1,J)+TTV(I+1,J) @@ -294,6 +342,7 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) ! if(i.eq.ii.and.j.eq.jj)print*,'Debug: L,TTV A S' ! 1,l,TTV(I,J),N ! 1,l,TNEW(I,J),N +! end if ! spval enddo ! @@ -301,7 +350,10 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) DO KM=1,KMM I = IMNT(KM,L) J = JMNT(KM,L) +! dong + if (QPRES(I,J,LSM) .lt. spval) then TTV(I,J) = TNEW(I,J) + end if ! spval END DO END DO ! NRLX loop ! @@ -309,7 +361,17 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) DO KM=1,KMM I = IMNT(KM,L) J = JMNT(KM,L) + +! dong + if (QPRES(I,J,LSM) .lt. spval) then + +! dong try to fix missing value for hgtprs at 1000 mb TPRES(I,J,L) = TTV(I,J) + end if ! spval + +! if (QPRES(I,J,L) < 1000) TPRES(I,J,L) = TTV(I,J) +! if (QPRES(I,J,L) < 1000) TPRES(I,J,L) = 1 + END DO enddo ! end of l loop !---------------------------------------------------------------- @@ -330,6 +392,10 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) KOUNT = 0 DO J=JSTA,JEND DO I=1,IM + +! dong +! if (QPRES(I,J,LSM) .lt. spval) then + ! P1(I,J)=SPL(NINT(LMH(I,J))) ! DONE(I,J)=.FALSE. @@ -355,6 +421,9 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) END IF END DO ENDIF + +! end if ! spval + ENDDO ENDDO ! @@ -363,6 +432,9 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) DO 320 KM=1,KMM I = IMNT(KM,LSM) J = JMNT(KM,LSM) +! dong +! if (QPRES(I,J,LSM) .lt. spval) then + IF(DONE(I,J)) cycle LMHIJ = LMHO(I,J) GZ1 = FIPRES(I,J,LMHIJ) @@ -394,6 +466,8 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) ! if(i.eq.ii.and.j.eq.jj)print*,'Debug:spl,FI,TLYR,PSLPA3=' & ! ,spl(lp),FIPRES(I,J,LP),TLYR,PSLP(I,J) !HC EXPERIMENT +! end if ! spval + 320 CONTINUE ! !*** WHEN SEA LEVEL IS BELOW THE LOWEST OUTPUT PRESSURE LEVEL, @@ -415,6 +489,10 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) LP = LSM DO J=JSTA,JEND DO I=1,IM + +! dong +! if (QPRES(I,J,LSM) .lt. spval) then + ! if(i.eq.ii.and.j.eq.jj)print*,'Debug: with 330 loop' IF(DONE(I,J)) cycle @@ -450,6 +528,8 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) END IF DONE(I,J) = .TRUE. KOUNT = KOUNT + 1 +! end if ! spval + enddo enddo !HC 340 CONTINUE diff --git a/comupp/src/unipost/SURFCE.f b/comupp/src/unipost/SURFCE.f index 478958e4a..5834487be 100644 --- a/comupp/src/unipost/SURFCE.f +++ b/comupp/src/unipost/SURFCE.f @@ -63,13 +63,15 @@ SUBROUTINE SURFCE ! ! INCLUDE GRID DIMENSIONS. SET/DERIVE OTHER PARAMETERS. ! + use vrbls4d, only: smoke use vrbls3d, only: zint, pint, t, pmid, q, f_rimef use vrbls2d, only: ths, qs, qvg, qv2m, tsnow, tg, smstav, smstot, & cmc, sno, snoavg, psfcavg, t10avg, snonc, ivgtyp, & si, potevp, dzice, qwbs, vegfrc, isltyp, pshltr, & tshltr, qshltr, mrshltr, maxtshltr, mintshltr, & maxrhshltr, minrhshltr, u10, psfcavg, v10, u10max, & - v10max, th10, t10m, q10, wspd10max, prec, sr, & + v10max, th10, t10m, q10, wspd10max, & + wspd10umax, wspd10vmax, prec, sr, & cprate, avgcprate, avgprec, acprec, cuprec, ancprc, & lspa, acsnow, acsnom, snowfall,ssroff, bgroff, & runoff, pcp_bucket, rainnc_bucket, snow_bucket, & @@ -89,7 +91,7 @@ SUBROUTINE SURFCE use physcons,only: CON_EPS, CON_EPSM1 use params_mod, only: p1000, capa, h1m12, pq0, a2,a3, a4, h1, d00, d01,& eps, oneps, d001, h99999, h100, small, h10e5, & - elocp, g, xlai, tfrz + elocp, g, xlai, tfrz, rd use ctlblk_mod, only: jsta, jend, lm, spval, grib, cfld, fld_info, & datapd, nsoil, isf_surface_physics, tprec, ifmin,& modelname, tmaxmin, pthresh, dtq2, dt, nphs, & @@ -171,6 +173,9 @@ SUBROUTINE SURFCE ! SCALE ARRAY FIS BY GI TO GET SURFACE HEIGHT. ! ZSFC(I,J)=FIS(I,J)*GI +! dong add missing value for zsfc + ZSFC(I,J) = spval + IF(ZINT(I,J,LM+1) < spval) & ZSFC(I,J) = ZINT(I,J,LM+1) PSFC(I,J) = PINT(I,J,NINT(LMH(I,J))+1) ! SURFACE PRESSURE. ! @@ -183,6 +188,11 @@ SUBROUTINE SURFCE ! SURFACE SPECIFIC HUMIDITY, RELATIVE HUMIDITY, AND DEWPOINT. ! ADJUST SPECIFIC HUMIDITY IF RELATIVE HUMIDITY EXCEEDS 0.1 OR 1.0. +! dong spfh sfc set missing value + QSFC(I,J) = spval + RHSFC(I,J) = spval + EVP(I,J) = spval + IF(TSFC(I,J) /= spval) then QSFC(I,J) = MAX(H1M12,QS(I,J)) TSFCK = TSFC(I,J) @@ -199,6 +209,7 @@ SUBROUTINE SURFCE QSFC(I,J) = RHSFC(I,J)*QSAT RHSFC(I,J) = RHSFC(I,J) * 100.0 EVP(I,J) = D001*PSFC(I,J)*QSFC(I,J)/(EPS+ONEPS*QSFC(I,J)) + END IF ! !mp ACCUMULATED NON-CONVECTIVE PRECIP. !mp IF(IGET(034).GT.0)THEN @@ -267,7 +278,7 @@ SUBROUTINE SURFCE endif ENDIF if (allocated(zsfc)) deallocate(zsfc) -! if (allocated(psfc)) deallocate(psfc) + if (allocated(psfc)) deallocate(psfc) ! ! SURFACE (SKIN) TEMPERATURE. IF (IGET(026).GT.0) THEN @@ -921,7 +932,9 @@ SUBROUTINE SURFCE !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = 100.*SNOAVG(I,J) +! GRID1(I,J) = 100.*SNOAVG(I,J) + GRID1(I,J) = SNOAVG(I,J) + if (SNOAVG(I,J) /= spval) GRID1(I,J) = 100.*SNOAVG(I,J) ENDDO ENDDO CALL BOUND(GRID1,D00,H100) @@ -1074,11 +1087,13 @@ SUBROUTINE SURFCE DO J=JSTA,JEND DO I=1,IM ! GRID1(I,J)=PCTSNO(I,J) + IF ( SNO(I,J) /= SPVAL ) THEN SNEQV = SNO(I,J) IVEG = IVGTYP(I,J) IF(IVEG.EQ.0)IVEG=7 CALL SNFRAC (SNEQV,IVEG,SNCOVR) GRID1(I,J) = SNCOVR*100. + ENDIF ENDDO ENDDO CALL BOUND(GRID1,D00,H100) @@ -1558,12 +1573,12 @@ SUBROUTINE SURFCE IF ( (IGET(106).GT.0).OR.(IGET(112).GT.0).OR. & (IGET(113).GT.0).OR.(IGET(114).GT.0).OR. & (IGET(138).GT.0).OR.(IGET(414).GT.0).OR. & - (IGET(546).GT.0).OR. & - (IGET(547).GT.0).OR.(IGET(548).GT.0).OR. & + (IGET(546).GT.0).OR.(IGET(547).GT.0).OR. & + (IGET(548).GT.0).OR.(IGET(739).GT.0).OR. & (IGET(771).GT.0)) THEN - if (.not. allocated(psfc)) allocate(psfc(im,jsta:jend)) -! + if (.not. allocated(psfc)) allocate(psfc(im,jsta:jend)) +! !HC COMPUTE SHELTER PRESSURE BECAUSE IT WAS NOT OUTPUT FROM WRF IF(MODELNAME .EQ. 'NCAR' .OR. MODELNAME.EQ.'RSM'.OR. MODELNAME.EQ.'RAPR')THEN DO J=JSTA,JEND @@ -2105,9 +2120,15 @@ SUBROUTINE SURFCE if(ITMAXMIN==0) then fld_info(cfld)%ntrange=0 else - fld_info(cfld)%ntrange=(IFHR-ID(18))/ITMAXMIN +!Meng 03/2019 +! fld_info(cfld)%ntrange=(IFHR-ID(18))/ITMAXMIN + fld_info(cfld)%ntrange=1 endif - fld_info(cfld)%tinvstat=ITMAXMIN +! fld_info(cfld)%tinvstat=ITMAXMIN + fld_info(cfld)%tinvstat=IFHR-ID(18) + if(IFHR==0) fld_info(cfld)%tinvstat=0 + print*,'id(18),tinvstat,IFHR,ITMAXMIN in rhmax= ',ID(18),fld_info(cfld)%tinvstat, & + IFHR, ITMAXMIN !$omp parallel do private(i,j,jj) do j=1,jend-jsta+1 jj = jsta+j-1 @@ -2155,9 +2176,13 @@ SUBROUTINE SURFCE if(ITMAXMIN==0) then fld_info(cfld)%ntrange=0 else - fld_info(cfld)%ntrange=(IFHR-ID(18))/ITMAXMIN +!Meng 03/2019 +! fld_info(cfld)%ntrange=(IFHR-ID(18))/ITMAXMIN + fld_info(cfld)%ntrange=1 endif - fld_info(cfld)%tinvstat=ITMAXMIN +! fld_info(cfld)%tinvstat=ITMAXMIN + fld_info(cfld)%tinvstat=IFHR-ID(18) + if(IFHR==0) fld_info(cfld)%tinvstat=0 !$omp parallel do private(i,j,jj) do j=1,jend-jsta+1 jj = jsta+j-1 @@ -2247,6 +2272,26 @@ SUBROUTINE SURFCE endif ENDIF ! +! E. James - 12 Sep 2018: SMOKE from WRF-CHEM on lowest model level +! + IF (IGET(739).GT.0) THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J) = (1./RD)*(PMID(I,J,LM)/T(I,J,LM))*SMOKE(I,J,LM,1) + ENDDO + ENDDO + if(grib=='grib1') then + ID(1:25) = 0 + ISVALUE = 2 + ID(10) = MOD(ISVALUE/256,256) + ID(11) = MOD(ISVALUE,256) + CALL GRIBIT(IGET(739),LVLS(1,IGET(739)),GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(739)) + datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + endif + ENDIF ! ! BLOCK 3. ANEMOMETER LEVEL (10M) WINDS, THETA, AND Q. ! @@ -2637,6 +2682,89 @@ SUBROUTINE SURFCE enddo endif ENDIF + +! ANEMOMETER LEVEL (10 M) MAX WIND SPEED U COMPONENT. +! + IF (IGET(783).GT.0) THEN + ID(1:25) = 0 + ISVALUE = 10 + ID(10) = MOD(ISVALUE/256,256) + ID(11) = MOD(ISVALUE,256) + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J) = WSPD10UMAX(I,J) + ENDDO + ENDDO + if(grib=='grib1') then + CALL GRIBIT(IGET(783),LVLS(1,IGET(783)),GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(783)) + if (ifhr.eq.0) then + fld_info(cfld)%tinvstat=0 + else + fld_info(cfld)%tinvstat=1 + endif + fld_info(cfld)%ntrange=1 +!$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) = GRID1(i,jj) + enddo + enddo + endif + ENDIF + +! ANEMOMETER LEVEL (10 M) MAX WIND SPEED V COMPONENT. +! + IF (IGET(784).GT.0) THEN + ID(1:25) = 0 + ISVALUE = 10 + ID(10) = MOD(ISVALUE/256,256) + ID(11) = MOD(ISVALUE,256) + ID(20) = 2 + ID(19) = IFHR + IF (IFHR.EQ.0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR - 1 + ENDIF +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J) = WSPD10VMAX(I,J) + ENDDO + ENDDO + if(grib=='grib1') then + CALL GRIBIT(IGET(784),LVLS(1,IGET(784)),GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(784)) + if (ifhr.eq.0) then + fld_info(cfld)%tinvstat=0 + else + fld_info(cfld)%tinvstat=1 + endif + fld_info(cfld)%ntrange=1 +!$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) = GRID1(i,jj) + enddo + enddo + endif + ENDIF + ! ! SRD ! @@ -2965,16 +3093,16 @@ SUBROUTINE SURFCE END IF ENDDO ENDDO -! Chuang 3/29/2018: add continuous bucket - DO J=JSTA,JEND - DO I=1,IM - IF(AVGPREC_CONT(I,J) < SPVAL)THEN - GRID2(I,J) = AVGPREC_CONT(I,J)*FLOAT(IFHR)*3600.*1000./DTQ2 - ELSE - GRID2(I,J) = SPVAL - END IF - ENDDO - ENDDO +!! Chuang 3/29/2018: add continuous bucket +! DO J=JSTA,JEND +! DO I=1,IM +! IF(AVGPREC_CONT(I,J) < SPVAL)THEN +! GRID2(I,J) = AVGPREC_CONT(I,J)*FLOAT(IFHR)*3600.*1000./DTQ2 +! ELSE +! GRID2(I,J) = SPVAL +! END IF +! ENDDO +! ENDDO ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND @@ -3005,13 +3133,71 @@ SUBROUTINE SURFCE datapd(i,j,cfld) = GRID1(i,jj) enddo enddo +!! add continuous bucket +! if(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') then +! cfld=cfld+1 +! fld_info(cfld)%ifld=IAVBLFLD(IGET(087)) +! fld_info(cfld)%ntrange=1 +! fld_info(cfld)%tinvstat=IFHR +! print*,'tinvstat in cont bucket= ',fld_info(cfld)%tinvstat +! do j=1,jend-jsta+1 +! jj = jsta+j-1 +! do i=1,im +! datapd(i,j,cfld) = GRID2(i,jj) +! enddo +! enddo +! endif + endif + ENDIF + +! +! CONTINOUS ACCUMULATED TOTAL PRECIPITATION. + IF (IGET(417).GT.0) THEN + ID(1:25) = 0 + ITPREC = NINT(TPREC) +!mp + if (ITPREC .ne. 0) then + IFINCR = MOD(IFHR,ITPREC) + IF(IFMIN .GE. 1)IFINCR= MOD(IFHR*60+IFMIN,ITPREC*60) + else + IFINCR = 0 + endif +!mp + ID(18) = 0 + ID(19) = IFHR + IF(IFMIN .GE. 1)ID(19)=IFHR*60+IFMIN + ID(20) = 4 + IF (IFINCR.EQ.0) THEN + ID(18) = IFHR-ITPREC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN .GE. 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') THEN +! Chuang 3/29/2018: add continuous bucket +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + IF(AVGPREC_CONT(I,J) < SPVAL)THEN + GRID2(I,J) = AVGPREC_CONT(I,J)*FLOAT(IFHR)*3600.*1000./DTQ2 + ELSE + GRID2(I,J) = SPVAL + END IF + ENDDO + ENDDO + ENDIF + IF (ID(18).LT.0) ID(18) = 0 + if(grib=='grib1') then + CALL GRIBIT(IGET(417),LVLS(1,IGET(417)),GRID1,IM,JM) + elseif(grib=='grib2') then ! add continuous bucket if(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(087)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(417)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR print*,'tinvstat in cont bucket= ',fld_info(cfld)%tinvstat +!$omp parallel do private(i,j,jj) do j=1,jend-jsta+1 jj = jsta+j-1 do i=1,im @@ -3057,16 +3243,16 @@ SUBROUTINE SURFCE END IF ENDDO ENDDO -! Chuang 3/29/2018: add continuous bucket - DO J=JSTA,JEND - DO I=1,IM - IF(AVGCPRATE_CONT(I,J) < SPVAL)THEN - GRID2(I,J) = AVGCPRATE_CONT(I,J)*FLOAT(IFHR)*3600.*1000./DTQ2 - ELSE - GRID2(I,J) = SPVAL - END IF - ENDDO - ENDDO +!! Chuang 3/29/2018: add continuous bucket +! DO J=JSTA,JEND +! DO I=1,IM +! IF(AVGCPRATE_CONT(I,J) < SPVAL)THEN +! GRID2(I,J) = AVGCPRATE_CONT(I,J)*FLOAT(IFHR)*3600.*1000./DTQ2 +! ELSE +! GRID2(I,J) = SPVAL +! END IF +! ENDDO +! ENDDO ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND @@ -3090,12 +3276,69 @@ SUBROUTINE SURFCE datapd(i,j,cfld) = GRID1(i,jj) enddo enddo +!! add continuous bucket +! if(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') then +! cfld=cfld+1 +! fld_info(cfld)%ifld=IAVBLFLD(IGET(033)) +! fld_info(cfld)%ntrange=1 +! fld_info(cfld)%tinvstat=IFHR +! do j=1,jend-jsta+1 +! jj = jsta+j-1 +! do i=1,im +! datapd(i,j,cfld) = GRID2(i,jj) +! enddo +! enddo +! endif + endif + ENDIF + +! CONTINOUS ACCUMULATED CONVECTIVE PRECIPITATION. + IF (IGET(418).GT.0) THEN + ID(1:25) = 0 + ITPREC = NINT(TPREC) +!mp + if (ITPREC .ne. 0) then + IFINCR = MOD(IFHR,ITPREC) + IF(IFMIN .GE. 1)IFINCR= MOD(IFHR*60+IFMIN,ITPREC*60) + else + IFINCR = 0 + endif +!mp + ID(18) = 0 + ID(19) = IFHR + IF(IFMIN .GE. 1)ID(19)=IFHR*60+IFMIN + ID(20) = 4 + IF (IFINCR.EQ.0) THEN + ID(18) = IFHR-ITPREC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN .GE. 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18).LT.0) ID(18) = 0 + IF(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') THEN +! Chuang 3/29/2018: add continuous bucket +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + IF(AVGCPRATE_CONT(I,J) < SPVAL)THEN + GRID2(I,J) = AVGCPRATE_CONT(I,J)*FLOAT(IFHR)*3600.*1000./DTQ2 + ELSE + GRID2(I,J) = SPVAL + END IF + ENDDO + ENDDO + ENDIF +! write(6,*) 'call gribit...convective precip' + if(grib=='grib1') then + CALL GRIBIT(IGET(418),LVLS(1,IGET(418)),GRID1,IM,JM) + elseif(grib=='grib2') then ! add continuous bucket if(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(033)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(418)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR +!$omp parallel do private(i,j,jj) do j=1,jend-jsta+1 jj = jsta+j-1 do i=1,im @@ -3142,17 +3385,17 @@ SUBROUTINE SURFCE END IF ENDDO ENDDO -! Chuang 3/29/2018: add continuous bucket - DO J=JSTA,JEND - DO I=1,IM - IF(AVGCPRATE_CONT(I,J) < SPVAL .AND. AVGPREC_CONT(I,J) < SPVAL)THEN - GRID2(I,J) = (AVGPREC_CONT(I,J) - AVGCPRATE_CONT(I,J)) & - *FLOAT(IFHR)*3600.*1000./DTQ2 - ELSE - GRID2(I,J) = SPVAL - END IF - ENDDO - ENDDO +!! Chuang 3/29/2018: add continuous bucket +! DO J=JSTA,JEND +! DO I=1,IM +! IF(AVGCPRATE_CONT(I,J) < SPVAL .AND. AVGPREC_CONT(I,J) < SPVAL)THEN +! GRID2(I,J) = (AVGPREC_CONT(I,J) - AVGCPRATE_CONT(I,J)) & +! *FLOAT(IFHR)*3600.*1000./DTQ2 +! ELSE +! GRID2(I,J) = SPVAL +! END IF +! ENDDO +! ENDDO ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND @@ -3176,12 +3419,70 @@ SUBROUTINE SURFCE datapd(i,j,cfld) = GRID1(i,jj) enddo enddo +!! add continuous bucket +! if(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') then +! cfld=cfld+1 +! fld_info(cfld)%ifld=IAVBLFLD(IGET(034)) +! fld_info(cfld)%ntrange=1 +! fld_info(cfld)%tinvstat=IFHR +! do j=1,jend-jsta+1 +! jj = jsta+j-1 +! do i=1,im +! datapd(i,j,cfld) = GRID2(i,jj) +! enddo +! enddo +! endif + endif + ENDIF + +! CONTINOUS ACCUMULATED GRID-SCALE PRECIPITATION. + IF (IGET(419).GT.0) THEN + ID(1:25) = 0 + ITPREC = NINT(TPREC) +!mp + if (ITPREC .ne. 0) then + IFINCR = MOD(IFHR,ITPREC) + IF(IFMIN .GE. 1)IFINCR= MOD(IFHR*60+IFMIN,ITPREC*60) + else + IFINCR = 0 + endif +!mp + ID(18) = 0 + ID(19) = IFHR + IF(IFMIN .GE. 1)ID(19)=IFHR*60+IFMIN + ID(20) = 4 + IF (IFINCR.EQ.0) THEN + ID(18) = IFHR-ITPREC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN .GE. 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18).LT.0) ID(18) = 0 + IF(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') THEN +! Chuang 3/29/2018: add continuous bucket +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + IF(AVGCPRATE_CONT(I,J) < SPVAL .AND. AVGPREC_CONT(I,J) < SPVAL)THEN + GRID2(I,J) = (AVGPREC_CONT(I,J) - AVGCPRATE_CONT(I,J)) & + *FLOAT(IFHR)*3600.*1000./DTQ2 + ELSE + GRID2(I,J) = SPVAL + END IF + ENDDO + ENDDO + ENDIF +! write(6,*) 'call gribit...grid-scale precip' + if(grib=='grib1') then + CALL GRIBIT(IGET(419),LVLS(1,IGET(419)), GRID1,IM,JM) + elseif(grib=='grib2') then ! add continuous bucket if(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(034)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(419)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR +!$omp parallel do private(i,j,jj) do j=1,jend-jsta+1 jj = jsta+j-1 do i=1,im @@ -5294,11 +5595,13 @@ SUBROUTINE SURFCE ENDIF ! ! SURFACE DRAG COEFFICIENT. +! dong add missing value for cd IF (IGET(132).GT.0) THEN + GRID1=spval CALL CALDRG(EGRID1(1,jsta_2l)) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J)=EGRID1(I,J) + IF(USTAR(I,J) < spval) GRID1(I,J)=EGRID1(I,J) ENDDO ENDDO if(grib=='grib1') then @@ -5463,6 +5766,8 @@ SUBROUTINE SURFCE ! ! INSTANTANEOUS SENSIBLE HEAT FLUX IF (IGET(154).GT.0) THEN +! dong add missing value to shtfl + GRID1 = spval IF(MODELNAME.EQ.'NCAR'.OR.MODELNAME.EQ.'RSM' .OR. & MODELNAME.EQ.'RAPR')THEN !4omp parallel do private(i,j) @@ -5475,7 +5780,7 @@ SUBROUTINE SURFCE !4omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = -TWBS(I,J) + IF(TWBS(I,J) < spval) GRID1(I,J) = -TWBS(I,J) ENDDO ENDDO END IF @@ -5491,6 +5796,8 @@ SUBROUTINE SURFCE ! ! INSTANTANEOUS LATENT HEAT FLUX IF (IGET(155).GT.0) THEN +! dong add missing value to lhtfl + GRID1 = spval IF(MODELNAME.EQ.'NCAR'.OR.MODELNAME.EQ.'RSM' .OR. & MODELNAME.EQ.'RAPR')THEN !4omp parallel do private(i,j) @@ -5503,7 +5810,7 @@ SUBROUTINE SURFCE !4omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = -QWBS(I,J) + IF(QWBS(I,J) < spval) GRID1(I,J) = -QWBS(I,J) ENDDO ENDDO END IF diff --git a/comupp/src/unipost/VRBLS2D_mod.f b/comupp/src/unipost/VRBLS2D_mod.f index ead562587..921508219 100644 --- a/comupp/src/unipost/VRBLS2D_mod.f +++ b/comupp/src/unipost/VRBLS2D_mod.f @@ -39,6 +39,12 @@ module vrbls2d ,WSPD10MAX(:,:),W_UP_MAX(:,:),W_DN_MAX(:,:),REFD_MAX(:,:) & ,UP_HELI_MAX(:,:),UP_HELI_MAX16(:,:),GRPL_MAX(:,:),QRMAX(:,:) & ,UP_HELI(:,:),UP_HELI16(:,:),LTG1_MAX(:,:),LTG2_MAX(:,:),LTG3_MAX(:,:) & + ,UP_HELI_MIN(:,:),UP_HELI_MIN16(:,:) & + ,UP_HELI_MAX02(:,:),UP_HELI_MIN02(:,:) & + ,UP_HELI_MAX03(:,:),UP_HELI_MIN03(:,:) & + ,REL_VORT_MAX(:,:),REL_VORT_MAX01(:,:),REL_VORT_MAXHY1(:,:) & + ,WSPD10UMAX(:,:),WSPD10VMAX(:,:) & + ,REFDM10C_MAX(:,:),HAIL_MAX2D(:,:),HAIL_MAXK1(:,:) & ,NCI_LTG(:,:),NCA_LTG(:,:),NCI_WQ(:,:),NCA_WQ(:,:) & ,NCI_REFD(:,:),NCA_REFD(:,:) & ,RAINC_BUCKET(:,:),RAINNC_BUCKET(:,:),SNOW_BUCKET(:,:) & @@ -49,7 +55,9 @@ module vrbls2d ,SWRADmean(:,:),U10mean(:,:),V10mean(:,:),SPDUV10mean(:,:) & ,SWNORMmean(:,:),SNFDEN(:,:),SNDEPAC(:,:),SWDDNI(:,:),SWDDIF(:,:) & ,SWDNBC(:,:),SWDDNIC(:,:),SWDDIFC(:,:), SWUPBC(:,:), SWUPT(:,:) & - ,TAOD5502D(:,:),AERASY2D(:,:),AERSSA2D(:,:) & + ,TAOD5502D(:,:),AERASY2D(:,:),AERSSA2D(:,:),MEAN_FRP(:,:) & + ,LWP(:,:),IWP(:,:) & + ,INT_SMOKE(:,:),INT_AOD(:,:) & ! add new fields for GFS ,SFCUX(:,:),SFCVX(:,:),AVGALBEDO(:,:),AVGCPRATE(:,:) & ,AVGPREC(:,:),PTOP(:,:),PBOT(:,:),AVGCFRACH(:,:) & @@ -76,6 +84,10 @@ module vrbls2d ,SUSMASS(:,:),SUCMASS(:,:),SUSMASS25(:,:),SUCMASS25(:,:) & ,OCSMASS(:,:),OCCMASS(:,:),OCSMASS25(:,:),OCCMASS25(:,:) & ,BCSMASS(:,:),BCCMASS(:,:),BCSMASS25(:,:),BCCMASS25(:,:) & - ,SSSMASS(:,:),SSCMASS(:,:),SSSMASS25(:,:),SSCMASS25(:,:) + ,SSSMASS(:,:),SSCMASS(:,:),SSSMASS25(:,:),SSCMASS25(:,:) & + ,DUSTCB(:,:),SSCB(:,:),OCCB(:,:),BCCB(:,:),SULFCB(:,:) & + ,DUSTALLCB(:,:),SSALLCB(:,:),DUSTPM(:,:),SSPM(:,:),PP25CB(:,:) & + ,PP10CB(:,:)!lzhang, add for FV3-Chem + ! end module vrbls2d diff --git a/comupp/src/unipost/VRBLS3D_mod.f b/comupp/src/unipost/VRBLS3D_mod.f index 23f6df303..bdd875198 100644 --- a/comupp/src/unipost/VRBLS3D_mod.f +++ b/comupp/src/unipost/VRBLS3D_mod.f @@ -3,6 +3,7 @@ ! 11-10-18 SARAH LU - MODIFIED TO INCLUDE AEROSOL OPTICAL PROPERTIES ! 11-12-15 SARAH LU - MODIFIED TO INCLUDE AEROSOL DIAG FIELDS ! 12-01-06 SARAH LU - MODIFIED TO INCLUDE AIR DENSITY AND LAYER THICKNESS +! 15-07-02 SARAH LU - MODIFIED TO INCLUDE SCATTERING AEROSOL OPTICAL THICKNESS module vrbls3d !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -51,19 +52,23 @@ module vrbls3d ,cnvctmgdrag(:,:,:) & ,QQNWFA(:,:,:) & ,QQNIFA(:,:,:) & + ,TAOD5503D(:,:,:) & + ,AEXTC55(:,:,:) & ! ! Add aerosol optical properties for GOCART (NGAC) ,ext(:,:,:), asy(:,:,:) & - ,ssa(:,:,:) & + ,ssa(:,:,:), sca(:,:,:) & ! Add aerosol diagnosis fields for GOCART (NGAC) ,duem(:,:,:), dusd(:,:,:) & ,dudp(:,:,:), duwt(:,:,:) & + ,dusv(:,:,:), sssv(:,:,:) & ,suem(:,:,:), susd(:,:,:) & ,sudp(:,:,:), suwt(:,:,:) & ,ssem(:,:,:), sssd(:,:,:) & ,ssdp(:,:,:), sswt(:,:,:) & ,ocem(:,:,:), ocsd(:,:,:) & ,ocdp(:,:,:), ocwt(:,:,:) & + ,ocsv(:,:,:), bcsv(:,:,:) & ,bcem(:,:,:), bcsd(:,:,:) & ,bcdp(:,:,:), bcwt(:,:,:) & ! Add air density and thickness for GOCART (NGAC) diff --git a/comupp/src/unipost/VRBLS4D_mod.f b/comupp/src/unipost/VRBLS4D_mod.f index a371317be..9606a56a0 100644 --- a/comupp/src/unipost/VRBLS4D_mod.f +++ b/comupp/src/unipost/VRBLS4D_mod.f @@ -10,5 +10,8 @@ module vrbls4d real, allocatable :: SOOT(:,:,:,:) ! black carbon real, allocatable :: WASO(:,:,:,:) ! organic carbon real, allocatable :: SUSO(:,:,:,:) ! sulfate + real, allocatable :: SMOKE(:,:,:,:) + real, allocatable :: PP25(:,:,:,:) ! PP25 + real, allocatable :: PP10(:,:,:,:) ! PP10 ! end module vrbls4d diff --git a/comupp/src/unipost/WRFPOST.f b/comupp/src/unipost/WRFPOST.f index 5962b0767..1ebc24fe2 100644 --- a/comupp/src/unipost/WRFPOST.f +++ b/comupp/src/unipost/WRFPOST.f @@ -293,8 +293,8 @@ PROGRAM WRFPOST ! set default for kpo, kth, th, kpv, pv kpo = 0 po = 0 - kth = 4 - th = (/320.,450.,550.,650.,(0.,k=kth+1,komax)/) ! isentropic level to output + kth = 6 + th = (/310.,320.,350.,450.,550.,650.,(0.,k=kth+1,komax)/) ! isentropic level to output kpv = 8 pv = (/0.5,-0.5,1.0,-1.0,1.5,-1.5,2.0,-2.0,(0.,k=kpv+1,komax)/) @@ -577,7 +577,7 @@ PROGRAM WRFPOST IM_JM = IM*JM ! opening GFS flux file - IF(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') THEN + IF(MODELNAME == 'GFS') THEN ! iunit=33 call nemsio_open(ffile,trim(fileNameFlux),'read',iret=iostatusFlux) if ( iostatusFlux /= 0 ) then @@ -707,10 +707,13 @@ PROGRAM WRFPOST ELSE IF(MODELNAME == 'NMM') THEN print*,'CALLING INITPOST_NMM TO PROCESS NMM NETCDF OUTPUT' CALL INITPOST_NMM - ELSE + ELSE IF (MODELNAME == 'FV3R') THEN ! use netcdf library to read output directly print*,'CALLING INITPOST_NETCDF' CALL INITPOST_NETCDF(ncid3d) + ELSE + PRINT*,'POST does not have netcdf option for model,',MODELNAME,' STOPPING,' + STOP 9998 END IF ELSE IF(TRIM(IOFORM) == 'binarympiio') THEN IF(MODELNAME == 'NCAR' .OR. MODELNAME == 'RAPR' .OR. MODELNAME == 'NMM') THEN @@ -745,7 +748,7 @@ PROGRAM WRFPOST ! close nemsio file for serial read call nemsio_close(nfile,iret=status) CALL INITPOST_NEMS_MPIIO() - ELSE IF(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') THEN + ELSE IF(MODELNAME == 'GFS') THEN ! close nemsio file for serial read call nemsio_close(nfile,iret=status) call nemsio_close(ffile,iret=status) diff --git a/comupp/src/unipost/grib2_module.f b/comupp/src/unipost/grib2_module.f index 903792e93..7d858ea13 100644 --- a/comupp/src/unipost/grib2_module.f +++ b/comupp/src/unipost/grib2_module.f @@ -899,9 +899,27 @@ subroutine gengrb2msg(idisc,icatg, iparm,nprm,nlvl,fldlvl1,fldlvl2,ntrange,tinvs ! call get_g2_sec5packingmethod(pset%packing_method,idrsnum,ierr) if(maxval(datafld1)==minval(datafld1))then - idrsnum=0 - print*,' changing to simple packing for constant fields' + idrsnum=0 + print*,' changing to simple packing for constant fields' end if + if(modelname=='RAPR') then + if((abs(maxval(datafld1)-minval(datafld1)) < 1.1) .and. (datafld1(1) > 500.0))then + idrsnum=0 + print*,' changing to simple packing for constant fields: max-min < 0.1' + end if + + if(trim(pset%param(nprm)%shortname)=='UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m'.or.& + trim(pset%param(nprm)%shortname)=='VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m'.or.& + trim(pset%param(nprm)%shortname)=='VWSH_ON_SPEC_HGT_LVL_ABOVE_GRND'.or.& + trim(pset%param(nprm)%shortname)=='VUCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-1km'.or.& + trim(pset%param(nprm)%shortname)=='VVCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-1km'.or.& + trim(pset%param(nprm)%shortname)=='VUCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-6km'.or.& + trim(pset%param(nprm)%shortname)=='VVCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-6km')then + idrsnum=0 + print*,' changing to simple packing for field: ',trim(pset%param(nprm)%shortname) + endif + endif + ! print *,'aft g2sec5,packingmethod=',pset%packing_method,'idrsnum=',idrsnum, & ! 'data=',maxval(datafld1),minval(datafld1) ! diff --git a/comupp/src/unipost/gtg_smoothseams.f90 b/comupp/src/unipost/gtg_smoothseams.f90 new file mode 100644 index 000000000..c11137fec --- /dev/null +++ b/comupp/src/unipost/gtg_smoothseams.f90 @@ -0,0 +1,5 @@ + subroutine getseams(seamfile,fillnumber,npts,ipts,jpts) + end subroutine getseams + +subroutine gtg_smoothseams(ismooth,IM,JM,jsta_2L,jend_2U,jsta,jend,fillnumber,npts,ipts,jpts,fld) +end subroutine gtg_smoothseams diff --git a/comupp/src/unipost/makefile b/comupp/src/unipost/makefile index b84d7d655..9a0532809 100644 --- a/comupp/src/unipost/makefile +++ b/comupp/src/unipost/makefile @@ -50,7 +50,7 @@ OBJS_FT = wrf_io_flags.o getVariable.o \ getIVariableN.o kinds_mod.o machine.o physcons.o \ native_endianness.o \ retrieve_index.o ZENSUN.o \ - CLDFRAC_ZHAO.o GFSPOST.o GETGBANDSCATTER.o \ + CLDFRAC_ZHAO.o GFSPOST.o GFSPOSTSIG.o GETGBANDSCATTER.o \ blockIO.o # ----------- @@ -80,7 +80,7 @@ OBJS_F = VRBLS2D_mod.o VRBLS3D_mod.o VRBLS4D_mod.o MASKS_mod.o PMICRPH.o SOIL_m GEO_ZENITH_ANGLE.o GFIP3.o GRIDAVG.o CALUPDHEL.o MSFPS.o INITPOST_GFS_SIGIO.o\ AllGETHERV_GSD.o SELECT_CHANNELS.o ALLOCATE_ALL.o INITPOST_NEMS_MPIIO.o ASSIGNNEMSIOVAR.o INITPOST_GFS_NEMS_MPIIO.o \ INITPOST_NETCDF.o \ - gtg_ctlblk.o gtg_indices.o gtg_filter.o gtg_compute.o gtg_config.o map_routines.o gtg_algo.o + gtg_ctlblk.o gtg_indices.o gtg_filter.o gtg_compute.o gtg_config.o map_routines.o gtg_algo.o gtg_smoothseams.o OBJS = $(OBJS_F) $(OBJXML) $(OBJS_FT) diff --git a/comupp/src/unipost/makefile_module b/comupp/src/unipost/makefile_module index de9195e1c..5557ee7c0 100755 --- a/comupp/src/unipost/makefile_module +++ b/comupp/src/unipost/makefile_module @@ -26,26 +26,14 @@ CPP = $(myCPP) $(myCPPFLAGS) CPPFLAGS = -DLINUX FREE = -FR -WRF_INC = -I$(WRFPATH)/external/io_quilt -I$(WRFPATH)/frame -WRF_LIB = $(WRFPATH)/main/libwrflib.a \ - $(WRFPATH)/frame/pack_utils.o \ - $(WRFPATH)/frame/module_internal_header_util.o \ - $(WRFPATH)/external/io_grib1/libio_grib1.a \ - $(WRFPATH)/external/io_grib_share/libio_grib_share.a \ - $(WRFPATH)/external/io_int/libwrfio_int.a \ - $(WRFPATH)/external/io_netcdf/libwrfio_nf.a \ - $(WRFPATH)/external/esmf_time_f90/libesmf_time.a \ - $(WRFPATH)/external/RSL_LITE/librsl_lite.a - NETCDF_INC = -I$(NETCDF)/include -NETCDF_LDFLAGS = -L$(NETCDF)/lib -lnetcdf +NETCDF_LDFLAGS = -L$(NETCDF)/lib -lnetcdff -lnetcdf CFLAGS = -DLINUX -Dfunder -DFortranByte=char -DFortranInt=int -DFortranLlong='long long' FFLAGS = $(OPTS) $(FREE) $(DEBUG) \ -I$(SFCIO_INC4) \ -I$(NEMSIO_INC) \ - $(WRF_INC) \ -I$(SIGIO_INC4) \ -I$(G2_INC4) \ -I$(G2TMPL_INC) \ @@ -55,7 +43,7 @@ FFLAGS = $(OPTS) $(FREE) $(DEBUG) \ -I$(IP_INC4) \ $(NETCDF_INC) -LIBS = $(WRF_LIB) \ +LIBS = $(WRFIO_LIB) \ $(G2TMPL_LIB) \ $(G2_LIB4) \ $(JASPER_LIB) \ @@ -74,12 +62,11 @@ LIBS = $(WRF_LIB) \ $(NETCDF_LDFLAGS) -OBJS = wrf_io_flags.o getVariable.o getIVariable.o getIVariableN.o \ +OBJS = wrf_io_flags.o getVariable.o getIVariableN.o \ kinds_mod.o machine.o physcons.o \ - native_endianness.o blockIO.o initialize_byte_swap_wrf_binary_file.o \ - count_recs_wrf_binary_file.o inventory_wrf_binary_file.o \ - next_buf.o retrieve_index.o ZENSUN.o CLDFRAC_ZHAO.o \ - GFSPOST.o GETGBANDSCATTER.o \ + native_endianness.o blockIO.o \ + retrieve_index.o ZENSUN.o CLDFRAC_ZHAO.o \ + GFSPOST.o GFSPOSTSIG.o GETGBANDSCATTER.o \ VRBLS2D_mod.o VRBLS3D_mod.o VRBLS4D_mod.o MASKS_mod.o PMICRPH.o SOIL_mod.o \ CMASSI.o CTLBLK.o GRIDSPEC.o LOOKUP.o PARAMR.o RHGRD.o RQSTFLD.o xml_perl_data.o \ cuparm.o params.o svptbl.o get_postfilename.o grib2_module.o \ @@ -100,14 +87,14 @@ OBJS = wrf_io_flags.o getVariable.o getIVariable.o getIVariableN.o \ SPLINE.o TABLE.o TABLEQ.o TRPAUS.o TTBLEX.o WETBULB.o WRFPOST.o \ CALMICT.o MICROINIT.o GPVS.o MDL2SIGMA.o \ ETCALC.o CANRES.o CALGUST.o WETFRZLVL.o SNFRAC.o MDL2AGL.o SNFRAC_GFS.o \ - AVIATION.o DEALLOCATE.o INITPOST_NMM_BIN_MPIIO.o \ + AVIATION.o DEALLOCATE.o \ CALPBL.o MDL2SIGMA2.o INITPOST_GFS.o CALRH_GFS.o LFMFLD_GFS.o \ CALRAD_WCLOUD_newcrtm.o MDL2THANDPV.o CALPBLREGIME.o POLEAVG.o \ INITPOST_NEMS.o GETNEMSNDSCATTER.o ICAOHEIGHT.o INITPOST_GFS_NEMS.o \ - INITPOST_BIN_MPIIO.o GEO_ZENITH_ANGLE.o GFIP3.o GRIDAVG.o CALUPDHEL.o INITPOST_GFS_SIGIO.o \ + GEO_ZENITH_ANGLE.o GFIP3.o GRIDAVG.o CALUPDHEL.o INITPOST_GFS_SIGIO.o \ AllGETHERV_GSD.o MSFPS.o SELECT_CHANNELS.o ALLOCATE_ALL.o INITPOST_NEMS_MPIIO.o ASSIGNNEMSIOVAR.o \ INITPOST_GFS_NEMS_MPIIO.o INITPOST_NETCDF.o \ - gtg_ctlblk.o gtg_indices.o gtg_filter.o gtg_compute.o gtg_config.o map_routines.o gtg_algo.o + gtg_ctlblk.o gtg_indices.o gtg_filter.o gtg_compute.o gtg_config.o map_routines.o gtg_algo.o gtg_smoothseams.o .SUFFIXES: .F .f .o .f90 .c diff --git a/parm/hafs.xml b/parm/hafs.xml index c0cc6a5d4..3c24b63c2 100755 --- a/parm/hafs.xml +++ b/parm/hafs.xml @@ -409,7 +409,7 @@ CD_ON_SURFACE CD NCEP - 3.0 + 6.0 diff --git a/parm/hires_micro_lookup.dat b/parm/hires_micro_lookup.dat new file mode 100755 index 000000000..4f33d59c4 Binary files /dev/null and b/parm/hires_micro_lookup.dat differ diff --git a/parm/post_avblflds.xml b/parm/post_avblflds.xml index 7bcb31b20..cae0a07a8 100755 --- a/parm/post_avblflds.xml +++ b/parm/post_avblflds.xml @@ -3665,7 +3665,7 @@ MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km maximum Updraft Helicity on Specified Height Level Above Ground tmpl4_8 - UPHL + MXUPHL MAX spec_hgt_lvl_above_grnd 5000. diff --git a/parm/post_avblflds_comupp.xml b/parm/post_avblflds_comupp.xml new file mode 100644 index 000000000..9d408ba12 --- /dev/null +++ b/parm/post_avblflds_comupp.xml @@ -0,0 +1,5399 @@ + + + + + + + 1 + PRES_ON_HYBRID_LVL + PRES + hybrid_lvl + 6.0 + + + + 2 + TMP_ON_HYBRID_LVL + TMP + hybrid_lvl + 4.0 + + + + 3 + POT_ON_HYBRID_LVL + POT + hybrid_lvl + 4.0 + + + + 4 + DPT_ON_HYBRID_LVL + DPT + hybrid_lvl + 5.0 + + + + 5 + SPFH_ON_HYBRID_LVL + SPFH + hybrid_lvl + 7.0 + + + + 6 + RH_ON_HYBRID_LVL + RH + hybrid_lvl + 4.0 + + + + 7 + UGRD_ON_HYBRID_LVL + UGRD + hybrid_lvl + 4.0 + + + + 8 + VGRD_ON_HYBRID_LVL + VGRD + hybrid_lvl + 4.0 + + + + 9 + VVEL_ON_HYBRID_LVL + VVEL + hybrid_lvl + 5.0 + + + + 10 + ABSV_ON_HYBRID_LVL + ABSV + hybrid_lvl + 3.0 + + + + 11 + TKE_ON_HYBRID_LVL + TKE + hybrid_lvl + 3.0 + + + + 12 + HGT_ON_ISOBARIC_SFC + HGT + isobaric_sfc + 6.0 + + + + 13 + TMP_ON_ISOBARIC_SFC + TMP + isobaric_sfc + 3.0 + + + + 14 + POT_ON_ISOBARIC_SFC + POT + isobaric_sfc + 4.0 + + + + 15 + DPT_ON_ISOBARIC_SFC + DPT + isobaric_sfc + 5.0 + + + + 16 + SPFH_ON_ISOBARIC_SFC + SPFH + isobaric_sfc + 4.0 + + + + 17 + RH_ON_ISOBARIC_SFC + RH + isobaric_sfc + 2.0 + + + + 18 + UGRD_ON_ISOBARIC_SFC + UGRD + isobaric_sfc + 4.0 + + + + 19 + VGRD_ON_ISOBARIC_SFC + VGRD + isobaric_sfc + 4.0 + + + + 20 + VVEL_ON_ISOBARIC_SFC + VVEL + isobaric_sfc + 5.0 + + + + 21 + ABSV_ON_ISOBARIC_SFC + ABSV + isobaric_sfc + 4.0 + + + + 22 + TKE_ON_ISOBARIC_SFC + TKE + isobaric_sfc + 3.0 + + + + 23 + MSLET_ON_MEAN_SEA_LVL + MSLET + NCEP + mean_sea_lvl + 6.0 + + + + 24 + PRES_ON_SURFACE + PRES + surface + 6.0 + + + + 25 + HGT_ON_SURFACE + HGT + surface + 6.0 + + + + 26 + TMP_ON_SURFACE + TMP + surface + 4.0 + + + + 27 + POT_ON_SURFACE + POT + surface + 5.0 + + + + 28 + SPFH_ON_SURFACE + SPFH + surface + 3.0 + + + + 29 + DPT_ON_SURFACE + DPT + surface + 4.0 + + + + 30 + LFTX_ON_ISOBARIC_SFC_500-1000hpa + LFTX + isobaric_sfc + 50000. + isobaric_sfc + 100000. + 3.0 + + + + 31 + 4LFTX_ON_SPEC_PRES_ABOVE_GRND + 4LFTX + spec_pres_above_grnd + spec_pres_above_grnd + 3.0 + + + + 32 + CAPE_ON_SURFACE + CAPE + surface + 4.0 + + + + 33 + ACM_ACPCP_ON_SURFACE + tmpl4_8 + ACPCP + ACM + surface + 4.0 + + + + 34 + ACM_NCPCP_ON_SURFACE + tmpl4_8 + NCPCP + ACM + surface + 4.0 + + + + 35 + ACM_WEASD_ON_SURFACE + tmpl4_8 + WEASD + ACM + surface + 4.0 + + + + 36 + SOILM_ON_DEPTH_BEL_LAND_SFC + SOILM + depth_bel_land_sfc + 2 + depth_bel_land_sfc + 2 + 3.0 + + + + 37 + LCDC_ON_LOW_CLOUD_LYR + LCDC + low_cloud_lyr + 3.0 + + + + 38 + MCDC_ON_MID_CLOUD_LYR + MCDC + mid_cloud_lyr + 3.0 + + + + 39 + HCDC_ON_HIGH_CLOUD_LYR + HCDC + high_cloud_lyr + 3.0 + + + + 40 + SWHR_ON_HYBRID_LVL + SWHR + hybrid_lvl + 3.0 + + + + 41 + LWHR_ON_HYBRID_LVL + LWHR + hybrid_lvl + 3.0 + + + + 42 + AVE_LHTFL_ON_SURFACE + tmpl4_8 + LHTFL + AVE + surface + 4.0 + + + + 43 + AVE_SHTFL_ON_SURFACE + tmpl4_8 + SHTFL + AVE + surface + 4.0 + + + + 44 + SFCR_ON_SURFACE + SFCR + surface + 2.7 + + + + 45 + FRICV_ON_SURFACE + FRICV + surface + 4.0 + + + + 46 + AVE_MFLX_ON_SURFACE + tmpl4_8 + MFLX + AVE + surface + -3.0 + + + + 47 + ACM_EVP_ON_SURFACE + tmpl4_8 + EVP + ACM + surface + 4.0 + + + + 48 + NLAT_ON_SURFACE + NLAT + surface + 4.0 + + + + 49 + ELON_ON_SURFACE + ELON + surface + 4.0 + + + + 50 + LAND_ON_SURFACE + LAND + surface + 1.0 + + + + 51 + ICEC_ON_SURFACE + ICEC + surface + 3.0 + + + + 52 + LMH_ON_SURFACE + LMH + surface + 2.0 + + + + 53 + LMV_ON_SURFACE + LMV + surface + 2.0 + + + + 54 + PRES_ON_TROPOPAUSE + PRES + tropopause + 6.0 + + + + 55 + TMP_ON_TROPOPAUSE + TMP + tropopause + 3.0 + + + + 56 + UGRD_ON_TROPOPAUSE + UGRD + tropopause + 4.0 + + + + 57 + VGRD_ON_TROPOPAUSE + VGRD + tropopause + 4.0 + + + + 58 + VWSH_ON_TROPOPAUSE + VWSH + tropopause + 3.0 + + + + 59 + TMP_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL + TMP + spec_alt_above_mean_sea_lvl + 3.0 + + + + 60 + UGRD_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL + UGRD + spec_alt_above_mean_sea_lvl + 4.0 + + + + 61 + VGRD_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL + VGRD + spec_alt_above_mean_sea_lvl + 4.0 + + + + 62 + HGT_ON_0C_ISOTHERM + HGT + 0C_isotherm + 6.0 + + + + 63 + RH_ON_0C_ISOTHERM + RH + 0C_isotherm + 2.0 + + + + 64 + UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + UGRD + spec_hgt_lvl_above_grnd + 10. + 4.0 + + + + 65 + VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + VGRD + spec_hgt_lvl_above_grnd + 10. + 4.0 + + + + 66 + RH_ON_SIGMA_LVL_0.33-1.0 + RH + sigma_lvl + 2 + 33. + sigma_lvl + 2 + 100. + 2.0 + + + + 67 + PRES_ON_SPEC_PRES_ABOVE_GRND + PRES + spec_pres_above_grnd + spec_pres_above_grnd + 6.0 + + + + 68 + TMP_ON_SPEC_PRES_ABOVE_GRND + TMP + spec_pres_above_grnd + spec_pres_above_grnd + 3.0 + + + + 69 + POT_ON_SPEC_PRES_ABOVE_GRND + POT + spec_pres_above_grnd + spec_pres_above_grnd + 4.0 + + + + 70 + DPT_ON_SPEC_PRES_ABOVE_GRND + DPT + spec_pres_above_grnd + spec_pres_above_grnd + 3.0 + + + + 71 + SPFH_ON_SPEC_PRES_ABOVE_GRND + SPFH + spec_pres_above_grnd + spec_pres_above_grnd + 5.0 + + + + 72 + RH_ON_SPEC_PRES_ABOVE_GRND + RH + spec_pres_above_grnd + spec_pres_above_grnd + 2.0 + + + + 73 + UGRD_ON_SPEC_PRES_ABOVE_GRND + UGRD + spec_pres_above_grnd + spec_pres_above_grnd + 4.0 + + + + 74 + VGRD_ON_SPEC_PRES_ABOVE_GRND + VGRD + spec_pres_above_grnd + spec_pres_above_grnd + 4.0 + + + + 75 + PLI_ON_SPEC_PRES_ABOVE_GRND + PLI + spec_pres_above_grnd + spec_pres_above_grnd + 3.0 + + + + 76 + RH_ON_SURFACE + RH + surface + 4.0 + + + + 77 + HGT_ON_HYBRID_LVL + HGT + hybrid_lvl + 4.0 + + + + 78 + AVE_LRGHR_ON_HYBRID_LVL + tmpl4_8 + LRGHR + AVE + hybrid_lvl + 3.0 + + + + 79 + AVE_CNVHR_ON_HYBRID_LVL + tmpl4_8 + CNVHR + AVE + hybrid_lvl + 2.7 + + + + 80 + PWAT_ON_ENTIRE_ATMOS_SINGLE_LYR + PWAT + entire_atmos_single_lyr + 3.0 + + + + 81 + RH_ON_SIGMA_LVL_0.66-1.0 + RH + sigma_lvl + 2 + 66. + sigma_lvl + 2 + 100. + 2.0 + + + + 82 + RH_ON_SIGMA_LVL_0.33-0.66 + RH + sigma_lvl + 2 + 33. + sigma_lvl + 2 + 66. + 2.0 + + + + 83 + MCONV_ON_HYBRID_LVL + MCONV + hybrid_lvl + 3.0 + + + + 84 + STRM_ON_HYBRID_LVL + STRM + hybrid_lvl + 3.0 + + + + 85 + MCONV_ON_ISOBARIC_SFC + MCONV + isobaric_sfc + 3.0 + + + + 86 + STRM_ON_ISOBARIC_SFC + STRM + isobaric_sfc + 3.0 + + + + 87 + ACM_APCP_ON_SURFACE + tmpl4_8 + APCP + ACM + surface + 4.0 + + + + 88 + MCONV_ON_SPEC_PRES_ABOVE_GRND + MCONV + spec_pres_above_grnd + spec_pres_above_grnd + 3.0 + + + + 89 + PWAT_ON_SPEC_PRES_ABOVE_GRND + PWAT + spec_pres_above_grnd + spec_pres_above_grnd + 3.0 + + + + 90 + VVEL_ON_SPEC_PRES_ABOVE_GRND + VVEL + spec_pres_above_grnd + spec_pres_above_grnd + 5.0 + + + + 91 + PRES_ON_SIGMA_LVL_0.98230 + PRES + sigma_lvl + 5 + 98230. + 6.0 + + + + 92 + TMP_ON_SIGMA_LVL_0.98230 + TMP + sigma_lvl + 5 + 98230. + 4.0 + + + + 93 + SPFH_ON_SIGMA_LVL_0.98230 + SPFH + sigma_lvl + 5 + 98230. + 3.0 + + + + 94 + RH_ON_SIGMA_LVL_0.98230 + RH + sigma_lvl + 5 + 98230. + 4.0 + + + + 95 + UGRD_ON_SIGMA_LVL_0.98230 + UGRD + sigma_lvl + 5 + 98230. + 5.0 + + + + 96 + VGRD_ON_SIGMA_LVL_0.98230 + VGRD + sigma_lvl + 5 + 98230. + 5.0 + + + + 97 + TMP_ON_SIGMA_LVL_0.89671 + TMP + sigma_lvl + 5 + 89671. + 4.0 + + + + 98 + TMP_ON_SIGMA_LVL_0.78483 + TMP + sigma_lvl + 5 + 78483. + 4.0 + + + + 99 + RH_ON_SIGMA_LVL_0.47_1.0 + RH + sigma_lvl + 2 + 47. + sigma_lvl + 2 + 100. + 2.0 + + + + 100 + RH_ON_SIGMA_LVL_0.47_0.96 + RH + sigma_lvl + 2 + 47. + sigma_lvl + 2 + 96. + 2.0 + + + + 101 + RH_ON_SIGMA_LVL_0.18_0.47 + RH + sigma_lvl + 2 + 18. + sigma_lvl + 2 + 47. + 2.0 + + + + 102 + RH_ON_SIGMA_LVL_0.84_0.98 + RH + sigma_lvl + 2 + 84. + sigma_lvl + 2 + 98. + 2.0 + + + + 103 + MCONV_ON_SIGMA_LVL_0.85_1.0 + MCONV + sigma_lvl + 2 + 85. + sigma_lvl + 2 + 100. + 3.0 + + + + 104 + PWAT_ON_SIGMA_LVL_0.33_1.0 + PWAT + sigma_lvl + 2 + 33. + sigma_lvl + 2 + 100. + 2.0 + + + + 105 + PRES_ON_MEAN_SEA_LVL + PRMSL + mean_sea_lvl + 6.0 + + + + 106 + TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + TMP + spec_hgt_lvl_above_grnd + 2. + 4.0 + + + + 107 + CIN_ON_SURFACE + CIN + surface + 4.0 + + + + 108 + POT_ON_TROPOPAUSE + POT + tropopause + 5.0 + + + + 109 + HGT_ON_LVL_OF_ADIAB_COND_FROM_SFC + HGT + lvl_of_adiab_cond_from_sfc + 5.0 + + + + 110 + PRES_ON_LVL_OF_ADIAB_COND_FROM_SFC + PRES + lvl_of_adiab_cond_from_sfc + 6.0 + + + + 111 + RI_ON_HYBRID_LVL + RI + hybrid_lvl + 3.0 + + + + 112 + SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + SPFH + spec_hgt_lvl_above_grnd + 2. + 4.0 + + + + 113 + DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + DPT + spec_hgt_lvl_above_grnd + 2. + 4.0 + + + + 114 + RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + RH + spec_hgt_lvl_above_grnd + 2. + 3.0 + + + + 115 + TSOIL_ON_DEPTH_BEL_LAND_SFC_3m + TSOIL + depth_bel_land_sfc + 3. + 3.0 + + + + 116 + TSOIL_ON_DEPTH_BEL_LAND_SFC + TSOIL + depth_bel_land_sfc + 2 + depth_bel_land_sfc + 2 + 4.0 + + + + 117 + SOILW_ON_DEPTH_BEL_LAND_SFC + SOILW + NCEP + depth_bel_land_sfc + 2 + depth_bel_land_sfc + 2 + 3.0 + + + + 118 + CNWAT_ON_SURFACE + CNWAT + surface + 1.0 + + + + 119 + WEASD_ON_SURFACE + WEASD + surface + 4.0 + + + + 120 + SNOWC_ON_SURFACE + SNOWC + surface + 3.0 + + + + 121 + ACM_SNOM_ON_SURFACE + tmpl4_8 + SNOM + ACM + surface + 4.0 + + + + 122 + ACM_SSRUN_ON_SURFACE + tmpl4_8 + SSRUN + ACM + surface + 4.0 + + + + 123 + ACM_BGRUN_ON_SURFACE + tmpl4_8 + BGRUN + ACM + surface + 4.0 + + + + 124 + CLWMR_ON_HYBRID_LVL + CLWMR + hybrid_lvl + 3.0 + + + + 125 + CICE_ON_HYBRID_LVL + CICE + hybrid_lvl + 3.0 + + + + 126 + AVE_DSWRF_ON_SURFACE + tmpl4_8 + DSWRF + AVE + surface + 3.0 + + + + 127 + AVE_DLWRF_ON_SURFACE + tmpl4_8 + DLWRF + AVE + surface + 3.0 + + + + 128 + AVE_USWRF_ON_SURFACE + tmpl4_8 + USWRF + AVE + surface + 3.0 + + + + 129 + AVE_ULWRF_ON_SURFACE + tmpl4_8 + ULWRF + AVE + surface + 3.0 + + + + 130 + AVE_USWRF_ON_TOP_OF_ATMOS + tmpl4_8 + USWRF + AVE + top_of_atmos + 3.0 + + + + 131 + AVE_ULWRF_ON_TOP_OF_ATMOS + tmpl4_8 + ULWRF + AVE + top_of_atmos + 3.0 + + + + 132 + CD_ON_SURFACE + CD + surface + 3.0 + + + + 133 + UFLX_ON_SURFACE + UFLX + surface + 3.0 + + + + 134 + VFLX_ON_SURFACE + VFLX + surface + 3.0 + + + + 135 + AVE_GFLUX_ON_SURFACE + tmpl4_8 + GFLUX + AVE + surface + 4.0 + + + + 136 + AVE_SNOHF_ON_SURFACE + tmpl4_8 + SNOHF + AVE + surface + 4.0 + + + + 137 + ACM_PEVAP_ON_SURFACE + tmpl4_8 + PEVAP + ACM + surface + 4.0 + + + + 138 + PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + PRES + spec_hgt_lvl_above_grnd + 2. + 6.0 + + + + 139 + AVE_CDLYR_ON_ENTIRE_ATMOS + tmpl4_8 + CDLYR + AVE + entire_atmos_single_lyr + 3.0 + + + + 140 + TTRAD_ON_HYBRID_LVL + TTRAD + hybrid_lvl + 3.0 + + + + 141 + INST_USWRF_ON_SURFACE + USWRF + surface + 4.0 + + + + 142 + INST_ULWRF_ON_SURFACE + ULWRF + surface + 4.0 + + + + 143 + AVE_CDCON_ON_ENTIRE_ATMOS + tmpl4_8 + CDCON + AVE + entire_atmos_single_lyr + 3.0 + + + + 144 + AVE_TCDC_ON_ENTIRE_ATMOS + tmpl4_8 + TCDC + AVE + entire_atmos_single_lyr + 3.0 + + + + 145 + TCDC_ON_HYBRID_LVL + TCDC + hybrid_lvl + 3.0 + + + + 146 + BMIXL_ON_HYBRID_LVL + BMIXL + hybrid_lvl + 3.0 + + + + 147 + AMIXL_ON_HYBRID_LVL + AMIXL + hybrid_lvl + 3.0 + + + + 148 + PRES_ON_CLOUD_BASE + PRES + cloud_base + 6.0 + + + + 149 + PRES_ON_CLOUD_TOP + PRES + cloud_top + 6.0 + + + + 150 + ALBDO_ON_SURFACE + ALBDO + surface + 3.0 + + + + 151 + WTMP_ON_SURFACE + WTMP + surface + 5.0 + + + + 152 + INST_GFLUX_ON_SURFACE + GFLUX + surface + 3.0 + + + + 153 + CLWMR_ON_ISOBARIC_SFC + CLWMR + isobaric_sfc + 4.0 + + + + 154 + INST_SHTFL_ON_SURFACE + SHTFL + surface + 4.0 + + + + 155 + INST_LHTFL_ON_SURFACE + LHTFL + surface + 4.0 + + + + 156 + INST_DSWRF_ON_SURFACE + DSWRF + surface + 4.0 + + + + 157 + INST_DLWRF_ON_SURFACE + DLWRF + surface + 4.0 + + + + 158 + POT_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + POT + spec_hgt_lvl_above_grnd + 5.0 + + + + 159 + SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + SPFH + spec_hgt_lvl_above_grnd + 3.0 + + + + 160 + INST_CRAIN_ON_SURFACE + CRAIN + surface + 1.0 + + + + 161 + INST_TCDC_ON_ENTIRE_ATMOS + TCDC + entire_atmos_single_lyr + 3.0 + + + + 162 + HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND + HLCY + spec_hgt_lvl_above_grnd + spec_hgt_lvl_above_grnd + 4.0 + + + + 163 + USTM_ON_SPEC_HGT_LVL_ABOVE_GRND + USTM + spec_hgt_lvl_above_grnd + spec_hgt_lvl_above_grnd + 4.0 + + + + 164 + VSTM_ON_SPEC_HGT_LVL_ABOVE_GRND + VSTM + spec_hgt_lvl_above_grnd + spec_hgt_lvl_above_grnd + 4.0 + + + + 165 + HGT_ON_HGHST_TROP_FRZ_LVL + HGT + hghst_trop_frz_lvl + 6.0 + + + + 166 + CICE_ON_ISOBARIC_SFC + CICE + isobaric_sfc + 6.0 + + + + 167 + INST_PRATE_ON_SURFACE + PRATE + surface + 3.0 + + + + 168 + TMP_ON_CLOUD_TOP + TMP + cloud_top + 5.0 + + + + 169 + SFEXC_ON_SURFACE + SFEXC + surface + 3.0 + + + + 170 + VEG_ON_SURFACE + VEG + surface + 3.0 + + + + 171 + MSTAV_ON_DEPTH_BEL_LAND_SFC + MSTAV + depth_bel_land_sfc + 2 + depth_bel_land_sfc + 2 + 3.0 + + + + 172 + CPOFP_ON_SURFACE + CPOFP + surface + 4.0 + + + + 173 + PRES_ON_MAX_WIND + PRES + max_wind + 6.0 + + + + 174 + HGT_ON_MAX_WIND + HGT + max_wind + 6.0 + + + + 175 + UGRD_ON_MAX_WIND + UGRD + max_wind + 4.0 + + + + 176 + VGRD_ON_MAX_WIND + VGRD + max_wind + 4.0 + + + + 177 + HGT_ON_TROPOPAUSE + HGT + tropopause + 6.0 + + + + 178 + HGT_ON_CLOUD_BASE + HGT + cloud_base + 6.0 + + + + 179 + HGT_ON_CLOUD_TOP + HGT + cloud_top + 6.0 + + + + 180 + VIS_ON_SURFACE + VIS + surface + 3.0 + + + + 181 + RWMR_ON_HYBRID_LVL + RWMR + hybrid_lvl + 3.0 + + + + 182 + SNMR_ON_HYBRID_LVL + SNMR + hybrid_lvl + 3.0 + + + + 183 + RWMR_ON_ISOBARIC_SFC + RWMR + isobaric_sfc + 3.0 + + + + 184 + SNMR_ON_ISOBARIC_SFC + SNMR + isobaric_sfc + 3.0 + + + + 185 + FRAIN_ON_HYBRID_LVL + FRAIN + hybrid_lvl + 3.0 + + + + 186 + FICE_ON_HYBRID_LVL + FICE + hybrid_lvl + 3.0 + + + + 187 + RIME_ON_HYBRID_LVL + RIME + hybrid_lvl + 3.0 + + + + 188 + PRES_ON_CONVECTIVE_CLOUD_BOT_LVL + PRES + convective_cloud_bot_lvl + 6.0 + + + + 189 + PRES_ON_CONVECTIVE_CLOUD_TOP_LVL + PRES + convective_cloud_top_lvl + 6.0 + + + + 190 + PRES_ON_SHALL_CONVECTIVE_CLOUD_BOT_LVL + PRES + shall_convective_cloud_bot_lvl + 6.0 + + + + 191 + PRES_ON_SHALL_CONVECTIVE_CLOUD_TOP_LVL + PRES + shall_convective_cloud_top_lvl + 6.0 + + + + 192 + PRES_ON_DEEP_CONVECTIVE_CLOUD_BOT_LVL + PRES + deep_convective_cloud_bot_lvl + 6.0 + + + + 193 + PRES_ON_DEEP_CONVECTIVE_CLOUD_TOP_LVL + PRES + deep_convective_cloud_top_lvl + 6.0 + + + + 194 + PRES_ON_GRID_SCALE_CLOUD_BOT_LVL + PRES + grid_scale_cloud_bot_lvl + 6.0 + + + + 195 + PRES_ON_GRID_SCALE_CLOUD_TOP_LVL + PRES + grid_scale_cloud_top_lvl + 6.0 + + + + 196 + CDCON_ON_ENTIRE_ATMOS + CDCON + entire_atmos_single_lyr + 2.0 + + + + 197 + CUEFI_ON_ENTIRE_ATMOS_SINGLE_LYR + CUEFI + entire_atmos_single_lyr + 3.0 + + + + 198 + TCOND_ON_ISOBARIC_SFC + TCOND + isobaric_sfc + 3.0 + + + + 199 + TCOND_ON_HYBRID_LVL + TCOND + hybrid_lvl + 3.0 + + + + 200 + TCOLW_ON_ENTIRE_ATMOS + TCOLW + entire_atmos_single_lyr + 5.0 + + + + 201 + TCOLI_ON_ENTIRE_ATMOS + TCOLI + entire_atmos_single_lyr + 5.0 + + + + 202 + TCOLR_ON_ENTIRE_ATMOS + TCOLR + entire_atmos_single_lyr + 5.0 + + + + 203 + TCOLS_ON_ENTIRE_ATMOS + TCOLS + entire_atmos_single_lyr + 5.0 + + + + 204 + TCOLC_ON_ENTIRE_ATMOS + TCOLC + entire_atmos_single_lyr + 5.0 + + + + 205 + HGT_ON_SIGMA_LVLS + HGT + sigma_lvl + 5.0 + + + + 206 + TMP_ON_SIGMA_LVLS + TMP + sigma_lvl + 4.0 + + + + 207 + SPFH_ON_SIGMA_LVLS + SPFH + sigma_lvl + 3.0 + + + + 208 + UGRD_ON_SIGMA_LVLS + UGRD + sigma_lvl + 4.0 + + + + 209 + VGRD_ON_SIGMA_LVLS + VGRD + sigma_lvl + 4.0 + + + + 210 + VVEL_ON_SIGMA_LVLS + VVEL + sigma_lvl + 5.0 + + + + 211 + CLWMR_ON_SIGMA_LVLS + CLWMR + sigma_lvl + 4.0 + + + + 212 + CICE_ON_SIGMA_LVLS + CICE + sigma_lvl + 6.0 + + + + 213 + RWMR_ON_SIGMA_LVLS + RWMR + sigma_lvl + 3.0 + + + + 214 + SNMR_ON_SIGMA_LVLS + SNMR + sigma_lvl + 3.0 + + + + 215 + TCOND_ON_SIGMA_LVLS + TCOND + sigma_lvl + 3.0 + + + + 216 + PRES_ON_SIGMA_LVLS + PRES + sigma_lvl + 6.0 + + + + 217 + TKE_ON_SIGMA_LVLS + TKE + sigma_lvl + 3.0 + + + + 218 + VGTYP_ON_SURFACE + VGTYP + surface + 3.0 + + + + 219 + SOTYP_ON_SURFACE + SOTYP + surface + 3.0 + + + + 220 + CCOND_ON_SURFACE + CCOND + surface + 3.0 + + + + 221 + HPBL_ON_SURFACE + HPBL + surface + 6.0 + + + + 222 + TCDC_ON_SIGMA_LVLS + TCDC + sigma_lvl + 2 + 3.0 + + + + 223 + SLTYP_ON_SURFACE + SLTYP + surface + 3.0 + + + + 224 + SNOD_ON_SURFACE + SNOD + surface + 6.0 + + + + 225 + SOILL_ON_DEPTH_BEL_LAND_SFC + SOILL + depth_bel_land_sfc + depth_bel_land_sfc + 3.0 + + + + 226 + SNFALB_ON_SURFACE + SNFALB + surface + 3.0 + + + + 227 + MXSALB_ON_SURFACE + MXSALB + surface + 3.0 + + + + 228 + EVCW_ON_SURFACE + EVCW + surface + 3.0 + + + + 229 + EVBS_ON_SURFACE + EVBS + surface + 3.0 + + + + 230 + TRANS_ON_SURFACE + TRANS + surface + 3.0 + + + + 231 + SBSNO_ON_SURFACE + SBSNO + surface + 3.0 + + + + 232 + SMDRY_ON_SURFACE + SMDRY + surface + 3.0 + + + + 233 + POROS_ON_SURFACE + POROS + surface + 3.0 + + + + 234 + RSMIN_ON_SURFACE + RSMIN + surface + 3.0 + + + + 235 + RLYRS_ON_SURFACE + RLYRS + surface + 3.0 + + + + 236 + WILT_ON_SURFACE + WILT + surface + 3.0 + + + + 237 + SMREF_ON_SURFACE + SMREF + surface + 3.0 + + + + 238 + RCS_ON_SURFACE + RCS + surface + 3.0 + + + + 239 + RCT_ON_SURFACE + RCT + surface + 5.0 + + + + 240 + RCQ_ON_SURFACE + RCQ + surface + 3.0 + + + + 241 + RCSOL_ON_SURFACE + RCSOL + surface + 3.0 + + + + 242 + PEVPR_ON_SURFACE + PEVPR + surface + 6.0 + + + + 243 + VEDH_ON_SIGMA_LVLS + VEDH + sigma_lvl + 4.0 + + + + 245 + GUST_ON_SURFACE + GUST + surface + 3.0 + + + + 246 + PLPL_ON_SPEC_PRES_ABOVE_GRND + PLPL + NCEP + spec_pres_above_grnd + spec_pres_above_grnd + 6.0 + + + + 247 + HGT_ON_LWST_LVL_OF_WET_BULB_ZERO + HGT + lwst_lvl_of_wet_bulb_zero + -5.0 + + + + 249 + CPRAT_ON_SURFACE + CPRAT + surface + 4.0 + + + + 250 + REFD_ON_HYBRID_LVL + REFD + hybrid_lvl + 4.0 + + + + 251 + REFD_ON_ISOBARIC_SFC + REFD + isobaric_sfc + 4.0 + + + + 252 + REFC_ON_ENTIRE_ATMOS + REFC + entire_atmos_single_lyr + 4.0 + + + + 253 + REFD_ON_SPEC_HGT_LVL_ABOVE_GRND + REFD + spec_hgt_lvl_above_grnd + 4.0 + + + + 254 + LAI_ON_SURFACE + LAI + surface + -3.0 + + + + 255 + GRLE_ON_SIGMA_LVLS + GRLE + sigma_lvl + 3.0 + + + + 256 + ACM_LSPA_ON_SURFACE + tmpl4_8 + LSPA + ACM + surface + 3.0 + + + + 257 + TIPD_ON_ISOBARIC_SFC + TIPD + isobaric_sfc + 6.0 + + + + 258 + TPFI_ON_ISOBARIC_SFC + TPFI + isobaric_sfc + 6.0 + + + + 259 + VWSH_ON_SPEC_HGT_LVL_ABOVE_GRND + VWSH + spec_hgt_lvl_above_grnd + 6.0 + + + + 260 + HGT_ON_CLOUD_CEILING + HGT + cloud_ceilng + 6.0 + + + + 261 + VIS_ON_CLOUD_BASE + VIS + cloud_base + 6.0 + + + + 262 + INST_CSDSF_ON_SURFACE + CSDSF + surface + 4.0 + + + + 263 + RIME_ON_ISOBARIC_SFC + RIME + isobaric_sfc + 3.0 + + + + 264 + DZDT_ON_HYBRID_LVL + DZDT + hybrid_lvl + -5.0 + + + + 265 + SBT122_ON_TOP_OF_ATMOS_FROM_LWRAD + SBT122 + top_of_atmos + 5.0 + + + + 266 + AVE_ALBDO_ON_SURFACE + tmpl4_8 + ALBDO + AVE + surface + 4.0 + + + + 267 + O3MR_ON_HYBRID_LVL + O3MR + hybrid_lvl + 7.0 + + + + 268 + O3MR_ON_ISOBARIC_SFC + O3MR + isobaric_sfc + 5.0 + + + + 269 + AVE_UFLX_ON_SURFACE + tmpl4_8 + UFLX + AVE + surface + 4.0 + + + + 270 + AVE_VFLX_ON_SURFACE + tmpl4_8 + VFLX + AVE + surface + 4.0 + + + + 271 + AVE_PRATE_ON_SURFACE + tmpl4_8 + PRATE + AVE + surface + 4.0 + + + + 272 + AVE_CPRAT_ON_SURFACE + tmpl4_8 + CPRAT + AVE + surface + 4.0 + + + + 273 + PRES_ON_HYBRID_LVL_LLM + PRES + hybrid_lvl + hybrid_lvl + 3.0 + + + + 274 + INST_ULWRF_ON_TOP_OF_ATMOS + ULWRF + top_of_atmos + 4.0 + + + + 275 + BRTMP_ON_TOP_OF_ATMOS + BRTMP + top_of_atmos + 3.0 + + + + 276 + REFZR_ON_ENTIRE_ATMOS + REFZR + entire_atmos_single_lyr + -4.0 + + + + 277 + REFZI_ON_ENTIRE_ATMOS + REFZI + entire_atmos_single_lyr + -4.0 + + + + 278 + REFZC_ON_ENTIRE_ATMOS + REFZC + entire_atmos_single_lyr + -4.0 + + + + 279 + REFZR_ON_SPEC_HGT_LVL_ABOVE_GRND + REFZR + spec_hgt_lvl_above_grnd + -4.0 + + + + 280 + REFZI_ON_SPEC_HGT_LVL_ABOVE_GRND + REFZI + spec_hgt_lvl_above_grnd + -4.0 + + + + 281 + REFZC_ON_SPEC_HGT_LVL_ABOVE_GRND + REFZC + spec_hgt_lvl_above_grnd + -4.0 + + + + 282 + PRES_ON_TOP_OF_ATMOS + PRES + top_of_atmos + 3.0 + + + + + 283 + PRES_ON_HYBRID_LVL_1L + PRES + hybrid_lvl + hybrid_lvl + 3.0 + + + + 284 + DZDT_ON_ISOBARIC_SFC + DZDT + isobaric_sfc + -5.0 + + + + 285 + TCLSW_ON_ENTIRE_ATMOS + TCLSW + entire_atmos_single_lyr + 5.0 + + + + 286 + TCOLM_ON_ENTIRE_ATMOS + TCOLM + entire_atmos_single_lyr + 5.0 + + + + 287 + HGT_ON_LWST_BOT_LVL_OF_SUPERCOOLED_LIQ_WATER_LYR + HGT + lwst_bot_lvl_of_supercooled_liq_water_lyr + 6.0 + + + + 288 + HGT_ON_HGHST_TOP_LVL_OF_SUPERCOOLED_LIQ_WATER_LYR + HGT + hghst_top_lvl_of_supercooled_liq_water_lyr + 5.0 + + + + 289 + HGT_ON_PLANETARY_BOUND_LYR + HGT + planetary_bound_lyr + -4.0 + + + + 290 + SWHR_ON_ENTIRE_ATMOS + SWHR + entire_atmos_single_lyr + 5.0 + + + + 291 + LWHR_ON_ENTIRE_ATMOS + LWHR + entire_atmos_single_lyr + 5.0 + + + + 292 + AVE_LRGHR_ON_ENTIRE_ATMOS + tmpl4_8 + LRGHR + AVE + entire_atmos_single_lyr + 5.0 + + + + 293 + AVE_CNVHR_ON_ENTIRE_ATMOS + tmpl4_8 + CNVHR + AVE + entire_atmos_single_lyr + 5.0 + + + + 294 + TTRAD_ON_ISOBARIC_SFC + TTRAD + isobaric_sfc + 5.0 + + + + 295 + MCONV_ON_ENTIRE_ATMOS + MCONV + entire_atmos_single_lyr + 5.0 + + + + 296 + TMP_ON_SIGMA_LVL_HPC + TMP + sigma_lvl + 2 + -4.0 + + + + 297 + AVE_CDUVB_ON_SURFACE + tmpl4_8 + CDUVB + AVE + surface + 3.0 + + + + 298 + AVE_DUVB_ON_SURFACE + tmpl4_8 + DUVB + AVE + surface + 3.0 + + + + 299 + TOZNE_ON_ENTIRE_ATMOS_SINGLE_LYR + TOZNE + entire_atmos_single_lyr + 4.0 + + + + 300 + AVE_TCDC_ON_LOW_CLOUD_LYR + tmpl4_8 + TCDC + AVE + low_cloud_lyr + 3.0 + + + + 301 + AVE_TCDC_ON_MID_CLOUD_LYR + tmpl4_8 + TCDC + AVE + mid_cloud_lyr + 3.0 + + + + 302 + AVE_TCDC_ON_HIGH_CLOUD_LYR + tmpl4_8 + TCDC + AVE + high_cloud_lyr + 3.0 + + + + 303 + AVE_PRES_ON_LOW_CLOUD_BOT_LVL + tmpl4_8 + PRES + AVE + low_cloud_bot_lvl + 6.0 + + + + 304 + AVE_PRES_ON_LOW_CLOUD_TOP_LVL + tmpl4_8 + PRES + AVE + low_cloud_top_lvl + 6.0 + + + + 305 + AVE_TMP_ON_LOW_CLOUD_TOP_LVL + tmpl4_8 + TMP + AVE + low_cloud_top_lvl + 3.0 + + + + 306 + AVE_PRES_ON_MID_CLOUD_BOT_LVL + tmpl4_8 + PRES + AVE + mid_cloud_bot_lvl + 6.0 + + + + 307 + AVE_PRES_ON_MID_CLOUD_TOP_LVL + tmpl4_8 + PRES + AVE + mid_cloud_top_lvl + 6.0 + + + + 308 + AVE_TMP_ON_MID_CLOUD_TOP_LVL + tmpl4_8 + TMP + AVE + mid_cloud_top_lvl + 3.0 + + + + 309 + AVE_PRES_ON_HIGH_CLOUD_BOT_LVL + tmpl4_8 + PRES + AVE + high_cloud_bot_lvl + 6.0 + + + + 310 + AVE_PRES_ON_HIGH_CLOUD_TOP_LVL + tmpl4_8 + PRES + AVE + high_cloud_top_lvl + 6.0 + + + + 311 + AVE_TMP_ON_HIGH_CLOUD_TOP_LVL + tmpl4_8 + TMP + AVE + high_cloud_top_lvl + 3.0 + + + + 312 + RH_ON_ENTIRE_ATMOS_SINGLE_LYR + RH + entire_atmos_single_lyr + 2.0 + + + + 313 + AVE_CWORK_ON_ENTIRE_ATMOS_SINGLE_LYR + tmpl4_8 + CWORK + AVE + entire_atmos_single_lyr + 4.0 + + + + 314 + TMP_ON_MAX_WIND + TMP + max_wind + 3.0 + + + + 315 + AVE_U-GWD_ON_SURFACE + tmpl4_8 + U-GWD + AVE + surface + 5.0 + + + + 316 + AVE_V-GWD_ON_SURFACE + tmpl4_8 + V-GWD + AVE + surface + 5.0 + + + + 317 + AVE_CRAIN_ON_SURFACE + tmpl4_8 + CRAIN + AVE + surface + 1.0 + + + + 318 + RH_ON_SIGMA_LVL_0.44-1.0 + RH + sigma_lvl + 2 + 44. + sigma_lvl + 2 + 100. + 2.0 + + + + 319 + RH_ON_SIGMA_LVL_0.72-0.94 + RH + sigma_lvl + 2 + 72. + sigma_lvl + 2 + 94. + 2.0 + + + + 320 + RH_ON_SIGMA_LVL_0.44-0.72 + RH + sigma_lvl + 2 + 44. + sigma_lvl + 2 + 72. + 2.0 + + + + 321 + TMP_ON_SIGMA_LVL_0.9950 + TMP + sigma_lvl + 4 + 9950. + 4.0 + + + + 322 + POT_ON_SIGMA_LVL_0.9950 + POT + sigma_lvl + 4 + 9950. + 4.0 + + + + 323 + RH_ON_SIGMA_LVL_0.9950 + RH + sigma_lvl + 4 + 9950. + 3.0 + + + + 324 + UGRD_ON_SIGMA_LVL_0.9950 + UGRD + sigma_lvl + 4 + 9950. + 4.0 + + + + 325 + VGRD_ON_SIGMA_LVL_0.9950 + VGRD + sigma_lvl + 4 + 9950. + 4.0 + + + + 326 + VVEL_ON_SIGMA_LVL_0.9950 + VVEL + sigma_lvl + 4 + 9950. + 5.0 + + + + 327 + SBT122_ON_TOP_OF_ATMOS + SBT122 + top_of_atmos + 4.0 + + + + 328 + SBT123_ON_TOP_OF_ATMOS + SBT123 + top_of_atmos + 4.0 + + + + 329 + SBT124_ON_TOP_OF_ATMOS + SBT124 + top_of_atmos + 4.0 + + + + 330 + SBT126_ON_TOP_OF_ATMOS + SBT126 + top_of_atmos + 4.0 + + + + 331 + TCDC_ON_ISOBARIC_SFC + TCDC + isobaric_sfc + 3.0 + + + + 332 + UGRD_ON_ISENTROPIC_LVL + UGRD + isentropic_lvl + 4.0 + + + + 333 + VGRD_ON_ISENTROPIC_LVL + VGRD + isentropic_lvl + 4.0 + + + + 334 + TMP_ON_ISENTROPIC_LVL + TMP + isentropic_lvl + 3.0 + + + + 335 + PVORT_ON_ISENTROPIC_LVL + PVORT + isentropic_lvl + 4.0 + + + + 336 + UGRD_ON_POT_VORT_SFC + UGRD + pot_vort_sfc + 4.0 + + + + 337 + VGRD_ON_POT_VORT_SFC + VGRD + pot_vort_sfc + 4.0 + + + + 338 + TMP_ON_POT_VORT_SFC + TMP + pot_vort_sfc + 4.0 + + + + 339 + HGT_ON_POT_VORT_SFC + HGT + pot_vort_sfc + 6.0 + + + + 340 + PRES_ON_POT_VORT_SFC + PRES + pot_vort_sfc + 6.0 + + + + 341 + VWSH_ON_POT_VORT_SFC + VWSH + pot_vort_sfc + 3.0 + + + + 342 + AVE_TCDC_ON_BOUND_LYR_CLOUD_LYR + tmpl4_8 + TCDC + AVE + bound_lyr_cloud_lyr + 3.0 + + + + 343 + ACM_WATR_ON_SURFACE + tmpl4_8 + WATR + ACM + surface + 6.0 + + + + 344 + PBLREG_ON_SURFACE + PBLREG + surface + 2.0 + + + + 345 + MAX_TMAX_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + tmpl4_8 + TMAX + MAX + spec_hgt_lvl_above_grnd + 2. + 4.0 + + + + 346 + MIN_TMIN_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + tmpl4_8 + TMIN + MIN + spec_hgt_lvl_above_grnd + 2. + 4.0 + + + + 347 + MAX_MAXRH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + tmpl4_8 + MAXRH + MAX + spec_hgt_lvl_above_grnd + 2. + -2.0 + + + + 348 + MIN_MINRH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + tmpl4_8 + MINRH + NCEP + MIN + spec_hgt_lvl_above_grnd + 2. + -2.0 + + + + 349 + ICETK_ON_SURFACE + ICETK + surface + 3.0 + + + + 350 + RH_ON_HGHST_TROP_FRZ_LVL + RH + hghst_trop_frz_lvl + 2.0 + + + + + 351 + LAPR_ON_ISENTROPIC_LVL + LAPR + isentropic_lvl + 2.0 + + + + 352 + RH_ON_ISENTROPIC_LVL + RH + isentropic_lvl + 2.0 + + + + 353 + MNTSF_ON_ISENTROPIC_LVL + MNTSF + isentropic_lvl + 4.0 + + + + + 354 + SWHR_ON_ISOBARIC_SFC + SWHR + isobaric_sfc + 5.0 + + + + 355 + LWHR_ON_ISOBARIC_SFC + LWHR + isobaric_sfc + 5.0 + + + + 356 + VDFHR_ON_ISOBARIC_SFC + VDFHR + isobaric_sfc + 3.0 + + + + 357 + CNVHR_ON_ISOBARIC_SFC + CNVHR + isobaric_sfc + 2.7 + + + + + 358 + SHAHR_ON_ISOBARIC_SFC + SHAHR + isobaric_sfc + 3.0 + + + + 359 + LRGHR_ON_ISOBARIC_SFC + LRGHR + isobaric_sfc + 3.0 + + + + 360 + VDFMR_ON_ISOBARIC_SFC + VDFMR + isobaric_sfc + 3.0 + + + + 361 + CNVMR_ON_ISOBARIC_SFC + CNVMR + isobaric_sfc + 3.0 + + + + 362 + SHAMR_ON_ISOBARIC_SFC + SHAMR + isobaric_sfc + 3.0 + + + + 363 + LRGMR_ON_ISOBARIC_SFC + LRGMR + isobaric_sfc + 3.0 + + + + 364 + VDFOZ_ON_ISOBARIC_SFC + VDFOZ + isobaric_sfc + 7.0 + + + + 365 + POZ_ON_ISOBARIC_SFC + POZ + isobaric_sfc + 4.0 + + + + 366 + TOZ_ON_ISOBARIC_SFC + TOZ + isobaric_sfc + 3.0 + + + + 367 + PVMW_ON_ISOBARIC_SFC + PVMW + isobaric_sfc + 3.0 + + + + 368 + SNOT_ON_ISOBARIC_SFC + SNOT + isobaric_sfc + 3.0 + + + + 369 + VDFUA_ON_ISOBARIC_SFC + VDFUA + isobaric_sfc + 3.0 + + + + 370 + GWDU_ON_ISOBARIC_SFC + GWDU + isobaric_sfc + 3.0 + + + + 371 + CNVU_ON_ISOBARIC_SFC + CNVU + isobaric_sfc + 3.0 + + + + 372 + VDFVA_ON_ISOBARIC_SFC + VDFVA + isobaric_sfc + 3.0 + + + + 373 + GWDV_ON_ISOBARIC_SFC + GWDV + isobaric_sfc + 3.0 + + + + 374 + CNVV_ON_ISOBARIC_SFC + CNVV + isobaric_sfc + 3.0 + + + + 375 + CDLYR_ON_ISOBARIC_SFC + CDLYR + isobaric_sfc + 3.0 + + + + 376 + SBC123_ON_TOP_OF_ATMOS + SBC123 + top_of_atmos + 4.0 + + + + 377 + SBC124_ON_TOP_OF_ATMOS + SBC124 + top_of_atmos + 4.0 + + + + 378 + VVEL_ON_ISENTROPIC_LVL + VVEL + isentropic_lvl + 5.0 + + + + + + + 379 + TTDIA_ON_ISOBARIC_SFC + TTDIA + isobaric_sfc + 3.0 + + + + 380 + VEDH_ON_HYBRID_LVL + VEDH + hybrid_lvl + 3.0 + + + + 381 + MIXHT_ON_SURFACE + MIXHT + surface + -4.0 + + + + + 382 + AVE_CSDLF_ON_SURFACE + tmpl4_8 + CSDLF + AVE + surface + 3.0 + + + + 383 + AVE_CSDSF_ON_SURFACE + tmpl4_8 + CSDSF + AVE + surface + 3.0 + + + + 384 + AVE_CSULF_ON_SURFACE + tmpl4_8 + CSULF + AVE + surface + 3.0 + + + + 385 + AVE_CSULF_ON_TOP_OF_ATMOS + tmpl4_8 + CSULF + AVE + top_of_atmos + 3.0 + + + + 386 + AVE_CSUSF_ON_SURFACE + tmpl4_8 + CSUSF + AVE + surface + 3.0 + + + + 387 + AVE_CSUSF_ON_TOP_OF_ATMOS + tmpl4_8 + CSUSF + AVE + top_of_atmos + 3.0 + + + + 388 + AVE_DSWRF_ON_TOP_OF_ATMOS + tmpl4_8 + DSWRF + AVE + top_of_atmos + 4.0 + + + + 389 + UGRD_ON_PLANETARY_BOUND_LYR + UGRD + planetary_bound_lyr + -4.0 + + + + 390 + VGRD_ON_PLANETARY_BOUND_LYR + VGRD + planetary_bound_lyr + -4.0 + + + + + 391 + CNVUMF_ON_ISOBARIC_SFC + CNVUMF + isobaric_sfc + 3.0 + + + + 392 + CNVDMF_ON_ISOBARIC_SFC + CNVDMF + isobaric_sfc + 3.0 + + + + 393 + CNVEMF_ON_ISOBARIC_SFC + CNVEMF + isobaric_sfc + 3.0 + + + + 394 + CNVWDU_ON_ISOBARIC_SFC + CNVWDU + isobaric_sfc + 3.0 + + + + 395 + CNVWDV_ON_ISOBARIC_SFC + CNVWDV + isobaric_sfc + 3.0 + + + + + 396 + SUNSD_ON_SURFACE + SUNSD + surface + 5.0 + + + + 397 + FLDCP_ON_SURFACE + FLDCP + NCEP + surface + 4.0 + + + + + 398 + ICAHT_ON_MAX_WIND + ICAHT + max_wind + 6.0 + + + + 399 + ICAHT_ON_TROPOPAUSE + ICAHT + tropopause + 6.0 + + + + 400 + RETOP_ON_ENTIRE_ATMOS_SINGLE_LYR + RETOP + entire_atmos_single_lyr + 6.0 + + + + + + 401 + AVE_VBDSF_ON_SURFACE + averaged surface visible beam downward solar flux + tmpl4_8 + VBDSF + AVE + surface + 3.0 + + + + 402 + AVE_VDDSF_ON_SURFACE + averaged surface visible diffuse downward solar flux + tmpl4_8 + VDDSF + AVE + surface + 3.0 + + + + 403 + AVE_NBDSF_ON_SURFACE + averaged surface near IR beam downward solar flux + tmpl4_8 + NBDSF + AVE + surface + 3.0 + + + + 404 + AVE_NDDSF_ON_SURFACE + averaged surface near IR beam downward solar flux + tmpl4_8 + NDDSF + AVE + surface + 3.0 + + + + 405 + AVE_SRWEQ_ON_SURFACE + averaged snow rate on surface + tmpl4_8 + SRWEQ + AVE + surface + 3.0 + + + + 406 + GSD_PRES_ON_CLOUD_TOP + GSD_pressure on cloud top + PRES + cloud_top + 6.0 + + + + 407 + GSD_INST_CRAIN_ON_SURFACE + GSD_instant precipitation type on surface + CRAIN + surface + 1.0 + + + + 408 + GSD_HGT_ON_CLOUD_BASE + GSD_geopotential height on cloud base + HGT + cloud_base + 6.0 + + + + 409 + GSD_HGT_ON_CLOUD_TOP + GSD_geopotential height on cloud top + HGT + cloud_top + 6.0 + + + + 410 + GSD_VIS_ON_CLOUD_TOP + GSD_visibility on cloud top + VIS + cloud_top + 6.0 + + + + + 411 + WMIXE_ON_SPEC_HGT_LVL_ABOVE_GRND + instant wind mixing energy on Specified Height Level Above Ground + WMIXE + spec_hgt_lvl_above_grnd + -4.0 + + + + 412 + UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND + U-Component of Wind on Specified Height Level Above Ground + UGRD + spec_hgt_lvl_above_grnd + 80. + -4.0 + + + + 413 + VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND + V-Component of Wind on Specified Height Level Above Ground + VGRD + spec_hgt_lvl_above_grnd + 80. + -4.0 + + + + + 415 + GRMR_ON_HYBRID_LVL + Graupel mixing ration on hybrid level + GRMR + hybrid_lvl + 3.0 + + + + 416 + GRMR_ON_ISOBARIC_SFC + Graupel mixing ration on isobaric surface + GRMR + isobaric_sfc + 3.0 + + + + 420 + MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km + maximum Updraft Helicity on Specified Height Level Above Ground + tmpl4_8 + MXUPHL + MAX + spec_hgt_lvl_above_grnd + 5000. + spec_hgt_lvl_above_grnd + 2000. + -3.0 + + + + 421 + MAX_REF_ON_SPEC_HGT_LVL_ABOVE_GRND_1km + maximum Updraft Helicity on Specified Height Level Above Ground + tmpl4_8 + MAXREF + MAX + spec_hgt_lvl_above_grnd + 1000. + -4.0 + + + + 422 + MAX_WIND_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + maximum wind speed on 10 meter Above Ground + tmpl4_8 + WIND + MAX + spec_hgt_lvl_above_grnd + 10. + -4.0 + + + + 423 + MAX_MAXUVV_ON_ISOBARIC_SFC_40-100hpa + hourly maximum Upward Vertical Velocity between 40-100hpa + tmpl4_8 + MAXUVV + NCEP + MAX + isobaric_sfc + 40000. + isobaric_sfc + 100000. + -4.0 + + + + 424 + MAX_MAXDVV_ON_ISOBARIC_SFC_40-100hpa + hourly maximum Downward Vertical Velocity between 40-100hpa + tmpl4_8 + MAXDVV + NCEP + MAX + isobaric_sfc + 40000. + isobaric_sfc + 100000. + -4.0 + + + + + 425 + AVE_DZDT_ON_SIGMA_LVL_0.5-0.8 + average Vertical velocity between sigma lvl 0.5 and 0.8 + tmpl4_8 + DZDT + AVE + sigma_lvl + 2 + 50. + sigma_lvl + 2 + 80. + 3.0 + + + + 426 + HGT_ON_SPEC_HGT_LVL_ABOVE_GRND + Echo Tops in KFT (highest HGTin meters of the 18-dBZ reflectivity on a model level) + HGT + spec_hgt_lvl_above_grnd + 4.0 + + + + 427 + UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km + Updraft Helicity on Specified Height Level Above Ground + UPHL + spec_hgt_lvl_above_grnd + 5000. + spec_hgt_lvl_above_grnd + 2000. + -3.0 + + + + + 428 + GRMR_ON_ENTIRE_ATMOS_SINGLE_LYR + Graupel mixing ratio on entire atmosphere + GRMR + entire_atmos_single_lyr + 3.0 + + + + 429 + MAXVIG_ON_ENTIRE_ATMOS_SINGLE_LYR + Hourly Maximum of Column Vertical Integrated Graupel on entire atmosphere + tmpl4_8 + TCOLG + MAX + entire_atmos_single_lyr + 3.0 + + + + 430 + VUCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-1km + Vertical u-component shear between 0 to 1000m Above Ground + VUCSH + spec_hgt_lvl_above_grnd + 0. + spec_hgt_lvl_above_grnd + 1000. + 3.0 + + + + 431 + VVCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-1km + Vertical v-component shear between 0 to 1000m Above Ground + VVCSH + spec_hgt_lvl_above_grnd + 0. + spec_hgt_lvl_above_grnd + 1000. + 3.0 + + + + 432 + VUCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-6km + Vertical u-component shear between 0 to 6000m Above Ground + VUCSH + spec_hgt_lvl_above_grnd + 0. + spec_hgt_lvl_above_grnd + 6000. + 3.0 + + + + 433 + VVCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-6km + Vertical v-component shear between 0 to 6000m Above Ground + VVCSH + spec_hgt_lvl_above_grnd + 0. + spec_hgt_lvl_above_grnd + 6000. + 3.0 + + + + + 434 + BUCKET_APCP_ON_SURFACE + bucket Total precipitation on surface + tmpl4_8 + APCP + ACM + surface + 4.0 + + + + 435 + BUCKET_ACPCP_ON_SURFACE + bucket Convective precipitation on surface + tmpl4_8 + ACPCP + ACM + surface + 4.0 + + + + 436 + BUCKET_NCPCP_ON_SURFACE + bucket Large scale precipitation on surface + tmpl4_8 + NCPCP + ACM + surface + 4.0 + + + + 437 + BUCKET_WEASD_ON_SURFACE + bucket snow precipitation on surface + tmpl4_8 + WEASD + ACM + surface + 4.0 + + + + + + 438 + DUST1_ON_ISOBARIC_LVL + tmpl4_48 + MASSMR + isobaric_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 2 + 7 + 20 + 11.0 + + + + 439 + DUST2_ON_ISOBARIC_LVL + tmpl4_48 + MASSMR + isobaric_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 20 + 7 + 36 + 11.0 + + + + 440 + DUST3_ON_ISOBARIC_LVL + tmpl4_48 + MASSMR + isobaric_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 36 + 7 + 60 + 11.0 + + + + 441 + DUST4_ON_ISOBARIC_LVL + tmpl4_48 + MASSMR + isobaric_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 60 + 7 + 120 + 11.0 + + + + 442 + DUST5_ON_ISOBARIC_LVL + tmpl4_48 + MASSMR + isobaric_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 120 + 7 + 200 + 11.0 + + + + 443 + HGT_ON_EQUIL_LVL + geopotential height on Equilibrium level + HGT + equil_lvl + 6.0 + + + + 444 + LTNG_ON_SURFACE + lightning + LTNG + NCEP + surface + 1.0 + + + + 445 + MAPS_PRMSL_ON_MEAN_SEA_LVL + PRMSL + mean_sea_lvl + 4.0 + + + + 446 + SBT112_ON_TOP_OF_ATMOS + SBT112 + top_of_atmos + 4.0 + + + + 447 + SBT113_ON_TOP_OF_ATMOS + SBT113 + top_of_atmos + 4.0 + + + + 448 + SBT114_ON_TOP_OF_ATMOS + SBT114 + top_of_atmos + 4.0 + + + + 449 + SBT115_ON_TOP_OF_ATMOS + SBT115 + top_of_atmos + 4.0 + + + + + 450 + ICIP_ON_ISOBARIC_SFC + Total Icing Potential Diagnostic on isobaric sfc + ICIP + isobaric_sfc + 3.0 + + + + 451 + SPFH_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL + SPFH + spec_alt_above_mean_sea_lvl + 5.0 + + + + 452 + VTCAPE_ON_SURFACE + Virtual Temperature Based Convective Available Potential Energy on surface + CAPE + surface + 4.0 + + + + 453 + VTCIN_ON_SURFACE + Virtual Temperature Based Convective Inhibition on surface + CIN + surface + 4.0 + + + + + 454 + VRATE_ON_PLANETARY_BOUND_LYR + Ventilation Rate on planetary boundary layer + VRATE + NCEP + planetary_bound_lyr + 3.0 + + + + 455 + HINDEX_ON_SURFACE + Haines Index on surface + HINDEX + surface + 3.0 + + + + 456 + NON_NADIR_SBT122_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for GOES12, Channel 2 on top of atmosphere + SBT122 + top_of_atmos + 4.0 + + + + 457 + NON_NADIR_SBT123_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for GOES12, Channel 3 on top of atmosphere + SBT123 + top_of_atmos + 4.0 + + + + 458 + NON_NADIR_SBT124_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for GOES12, Channel 4 on top of atmosphere + SBT124 + top_of_atmos + 4.0 + + + + 459 + NON_NADIR_SBT126_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for GOES12, Channel 6 on top of atmosphere + SBT126 + top_of_atmos + 4.0 + + + + 460 + SBT112_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for GOES11, Channel 2 on top of atmosphere + SBT112 + top_of_atmos + 4.0 + + + + 461 + SBT113_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for GOES11, Channel 3 on top of atmosphere + SBT113 + top_of_atmos + 4.0 + + + + 462 + SBT114_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for GOES11, Channel 4 on top of atmosphere + SBT114 + top_of_atmos + 4.0 + + + + 463 + SBT115_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for GOES11, Channel 5 on top of atmosphere + SBT115 + top_of_atmos + 4.0 + + + + 482 + PRES_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL + pressure between Specific Altitude Above Mean Sea Level + PRES + spec_alt_above_mean_sea_lvl + spec_alt_above_mean_sea_lvl + 3.0 + + + + + 483 + AMSRE9_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for AMSRE on Aqua, Channel 9 on top of atmosphere + AMSRE9 + top_of_atmos + 4.0 + + + + 484 + AMSRE10_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for AMSRE on Aqua, Channel 10 on top of atmosphere + AMSRE10 + top_of_atmos + 4.0 + + + + 485 + AMSRE11_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for AMSRE on Aqua, Channel 11 on top of atmosphere + AMSRE11 + top_of_atmos + 4.0 + + + + 486 + AMSRE12_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for AMSRE on Aqua, Channel 12 on top of atmosphere + AMSRE12 + top_of_atmos + 4.0 + + + + 487 + GSD_PRES_ON_CLOUD_BASE + PRES + cloud_base + 3.0 + + + + 488 + TMITB6_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for TMI TRMM, Channel 6 on top of atmosphere + AMSRE9 + top_of_atmos + 4.0 + + + + 489 + TMITB7_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for TMI TRMM, Channel 7 on top of atmosphere + AMSRE10 + top_of_atmos + 4.0 + + + + 490 + TMITB8_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for TMI TRMM, Channel 8 on top of atmosphere + AMSRE11 + top_of_atmos + 4.0 + + + + 490 + TMITB9_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for TMI TRMM, Channel 9 on top of atmosphere + AMSRE12 + top_of_atmos + 4.0 + + + + 492 + SSMITB4_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for SSMI TB, Channel 4 on top of atmosphere + AMSRE9 + top_of_atmos + 4.0 + + + + 493 + SSMITB5_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for SSMI TB, Channel 5 on top of atmosphere + AMSRE10 + top_of_atmos + 4.0 + + + + 494 + SSMITB6_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for SSMI TB, Channel 6 on top of atmosphere + AMSRE11 + top_of_atmos + 4.0 + + + + 495 + SSMITB7_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for SSMI TB, Channel 7 on top of atmosphere + AMSRE12 + top_of_atmos + 4.0 + + + + 496 + SSMISTB15_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for SSMIS TB, Channel 15 on top of atmosphere + AMSRE9 + top_of_atmos + 4.0 + + + + 497 + SSMISTB16_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for SSMIS TB, Channel 16 on top of atmosphere + AMSRE10 + top_of_atmos + 4.0 + + + + 498 + SSMISTB17_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for SSMIS TB, Channel 17 on top of atmosphere + AMSRE11 + top_of_atmos + 4.0 + + + + 499 + SSMISTB18_ON_TOP_OF_ATMOS + Simulated Brightness Temperature for SSMIS TB, Channel 18 on top of atmosphere + AMSRE12 + top_of_atmos + 4.0 + + + + 500 + AVE_SNOWC_ON_SURFACE + tmpl4_8 + SNOWC + AVE + surface + 3.0 + + + + 501 + AVE_PRES_ON_SURFACE + tmpl4_8 + PRES + AVE + surface + 5.0 + + + + 502 + AVE_TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + tmpl4_8 + TMP + AVE + spec_hgt_lvl_above_grnd + 10. + -4.0 + + + + 503 + AVE_AKHS_ON_SURFACE + tmpl4_8 + AKHS + AVE + surface + 3.0 + + + + 504 + AVE_AKMS_ON_SURFACE + tmpl4_8 + AKMS + AVE + surface + 3.0 + + + + 505 + TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + TMP + spec_hgt_lvl_above_grnd + 10. + -4.0 + + + + 506 + MAX_MAXUW_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + U Component of Hourly Maximum 10m Wind Speed (m/s) + tmpl4_8 + MAXUW + MAX + spec_hgt_lvl_above_grnd + 10. + -4.0 + + + + 507 + MAX_MAXVW_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + V Component of Hourly Maximum 10m Wind Speed (m/s) + tmpl4_8 + MAXVW + MAX + spec_hgt_lvl_above_grnd + 10. + -4.0 + + + + 551 + CSNOW_ON_SURFACE + Categorical snow on surface + CSNOW + NCEP + surface + 1.0 + + + + 552 + CICEP_ON_SURFACE + Categorical ice pellets on surface + CICEP + NCEP + surface + 1.0 + + + + 553 + CFRZR_ON_SURFACE + Categorical freezing rain on surface + CFRZR + NCEP + surface + 1.0 + + + + 555 + AVE_CSNOW_ON_SURFACE + average Categorical snow on surface + tmpl4_8 + CSNOW + AVE + surface + 1.0 + + + + 556 + AVE_CICEP_ON_SURFACE + average Categorical ice pellets on surface + tmpl4_8 + CICEP + AVE + surface + 1.0 + + + + 557 + AVE_CFRZR_ON_SURFACE + average Categorical freezing rain on surface + tmpl4_8 + CFRZR + AVE + surface + 1.0 + + + + 559 + GSD_CSNOW_ON_SURFACE + GSD_Categorical snow on surface + CSNOW + surface + 1.0 + + + + 560 + GSD_CICEP_ON_SURFACE + GSD_Categorical ice pellets on surface + CICEP + surface + 1.0 + + + + 561 + GSD_CFRZR_ON_SURFACE + GSD_Categorical freezing rain on surface + CFRZR + surface + 1.0 + + + + 563 + GSD_AVE_CSNOW_ON_SURFACE + GSD_average Categorical snow on surface + tmpl4_8 + CSNOW + AVE + surface + 1.0 + + + + 564 + GSD_AVE_CICEP_ON_SURFACE + GSD_average Categorical ice pellets on surface + tmpl4_8 + CICEP + AVE + surface + 1.0 + + + + 565 + GSD_AVE_CFRZR_ON_SURFACE + GSD_average Categorical freezing rain on surface + tmpl4_8 + CFRZR + AVE + surface + 1.0 + + + + 566 + BEST_CAPE_ON_SPEC_PRES_ABOVE_GRND + CAPE + spec_pres_above_grnd + 0. + spec_pres_above_grnd + 0. + 4.0 + + + + 567 + BEST_CIN_ON_SPEC_PRES_ABOVE_GRND + CIN + spec_pres_above_grnd + 0. + spec_pres_above_grnd + 0. + 4.0 + + + + 575 + CWAT_ON_ENTIRE_ATMOS_SINGLE_LYR + CWAT + entire_atmos_single_lyr + 3.0 + + + + 576 + UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT + UGRD + spec_hgt_lvl_above_grnd + -4.0 + + + + 577 + VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT + VGRD + spec_hgt_lvl_above_grnd + -4.0 + + + + 578 + SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT + SPFH + spec_hgt_lvl_above_grnd + 3.0 + + + + 579 + PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT + PRES + spec_hgt_lvl_above_grnd + 3.0 + + + + 580 + ICI_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT + ICI + spec_alt_above_mean_sea_lvl + 3.0 + + + + 581 + VIL_ON_ENTIRE_ATMOS + entire atmosphere Vertically Integrated Liquid (kg/m-2) + VIL + entire_atmos_single_lyr + 4.0 + + + + 582 + MIXED_LAYER_CAPE_ON_SPEC_PRES_ABOVE_GRND + CAPE + spec_pres_above_grnd + 0. + spec_pres_above_grnd + 0. + 4.0 + + + + 583 + MIXED_LAYER_CIN_ON_SPEC_PRES_ABOVE_GRND + CIN + spec_pres_above_grnd + 0. + spec_pres_above_grnd + 0. + 4.0 + + + + 584 + UNSTABLE_CAPE_ON_SPEC_PRES_ABOVE_GRND + CAPE + spec_pres_above_grnd + 0. + spec_pres_above_grnd + 0. + 4.0 + + + + 585 + UNSTABLE_CIN_ON_SPEC_PRES_ABOVE_GRND + CIN + spec_pres_above_grnd + 0. + spec_pres_above_grnd + 0. + + + + 586 + TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT + TMP + spec_hgt_lvl_above_grnd + 3.0 + + + + 587 + ICI_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT + ICI + spec_hgt_lvl_above_grnd + 3.0 + + + + 601 + DUST1_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT + tmpl4_48 + MASSMR + spec_alt_above_mean_sea_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 2 + 7 + 20 + 11.0 + + + + 602 + DUST2_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT + tmpl4_48 + MASSMR + spec_alt_above_mean_sea_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 20 + 7 + 36 + 11.0 + + + + 603 + DUST3_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT + tmpl4_48 + MASSMR + spec_alt_above_mean_sea_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 36 + 7 + 60 + 11.0 + + + + 604 + DUST4_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT + tmpl4_48 + MASSMR + spec_alt_above_mean_sea_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 60 + 7 + 120 + 11.0 + + + + 605 + DUST5_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT + tmpl4_48 + MASSMR + spec_alt_above_mean_sea_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 120 + 7 + 200 + 11.0 + + + + + 606 + AECOEF_ON_HYBRID_LVL + AECOFF + hybrid_lvl + 11.0 + + + + 607 + ASYSFK_ON_HYBRID_LVL + ASYSFK + hybrid_lvl + 11.0 + + + + 608 + SSALBK_ON_HYBRID_LVL + SSALBK + hybrid_lvl + 11.0 + + + + 609 + AER_OPT_DEP_at550 + tmpl4_48 + AOTK + entire_atmos + total_aerosol + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 545 + 9 + 565 + 9.0 + + + + 610 + DUST_AER_OPT_DEP_at550 + tmpl4_48 + AOTK + entire_atmos + dust_dry + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 545 + 9 + 565 + 9.0 + + + + 611 + Seasalt_AER_OPT_DEP_at550 + tmpl4_48 + AOTK + entire_atmos + sea_salt_dry + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 545 + 9 + 565 + 9.0 + + + + 612 + SULFATE_AER_OPT_DEP_at550 + tmpl4_48 + AOTK + entire_atmos + sulphate_dry + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 545 + 9 + 565 + 9.0 + + + + 613 + ORGANIC_CARBON_AER_OPT_DEP_at550 + tmpl4_48 + AOTK + entire_atmos + sea_salt_dry + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 545 + 9 + 565 + 9.0 + + + + 614 + BLACK_CARBON_AER_OPT_DEP_at550 + tmpl4_48 + AOTK + entire_atmos + black_carbondry + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 545 + 9 + 565 + 9.0 + + + + 615 + DUST_EMISSION_FLUX + tmpl4_48 + AEMFLX + entire_atmos + dust_dry + smaller_than_first_limit + 6 + 20 + 9.0 + + + + 616 + DUST_SEDIMENTATION_FLUX + tmpl4_48 + SEDMFLX + entire_atmos + dust_dry + smaller_than_first_limit + 6 + 20 + 9.0 + + + + 617 + DUST_DRY_DEPOSITION_FLUX + tmpl4_48 + DDMFLX + entire_atmos + dust_dry + smaller_than_first_limit + 6 + 20 + 9.0 + + + + 618 + DUST_WET_DEPOSITION_FLUX + tmpl4_48 + WLSMFLX + entire_atmos + dust_dry + smaller_than_first_limit + 6 + 20 + 9.0 + + + + 619 + CR_AER_SFC_MASS_CON + tmpl4_48 + MASSDEN + surface + dust_dry + smaller_than_first_limit + 6 + 10 + 9.0 + + + + 620 + FN_AER_SFC_MASS_CON + tmpl4_48 + MASSDEN + surface + dust_dry + smaller_than_first_limit + 7 + 25 + 9.0 + + + + 621 + CR_AER_COL_MASS_DEN + tmpl4_48 + COLMD + entire_atmos + dust_dry + smaller_than_first_limit + 6 + 10 + 9.0 + + + + 622 + FN_AER_COL_MASS_DEN + tmpl4_48 + COLMD + entire_atmos + dust_dry + smaller_than_first_limit + 7 + 25 + 9.0 + + + + 623 + AER_OPT_DEP_at340 + tmpl4_48 + AOTK + entire_atmos + total_aerosol + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 338 + 9 + 342 + 9.0 + + + + 624 + AER_OPT_DEP_at440 + tmpl4_48 + AOTK + entire_atmos + total_aerosol + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 430 + 9 + 450 + 9.0 + + + + 625 + AER_OPT_DEP_at660 + tmpl4_48 + AOTK + entire_atmos + total_aerosol + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 620 + 9 + 670 + 9.0 + + + + 626 + AER_OPT_DEP_at860 + tmpl4_48 + AOTK + entire_atmos + total_aerosol + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 841 + 9 + 876 + 9.0 + + + + 627 + AER_OPT_DEP_at1630 + tmpl4_48 + AOTK + entire_atmos + total_aerosol + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 1628 + 9 + 1652 + 9.0 + + + + 628 + AER_OPT_DEP_at11100 + tmpl4_48 + AOTK + entire_atmos + total_aerosol + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 11000 + 9 + 11200 + 9.0 + + + + 629 + DUST1_ON_HYBRID_LVL + tmpl4_48 + MASSMR + hybrid_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 2 + 7 + 20 + 11.0 + + + + 630 + DUST2_ON_HYBRID_LVL + tmpl4_48 + MASSMR + hybrid_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 20 + 7 + 36 + 11.0 + + + + 631 + DUST3_ON_HYBRID_LVL + tmpl4_48 + MASSMR + hybrid_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 36 + 7 + 60 + 11.0 + + + + 632 + DUST4_ON_HYBRID_LVL + tmpl4_48 + MASSMR + hybrid_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 60 + 7 + 120 + 11.0 + + + + 633 + DUST5_ON_HYBRID_LVL + tmpl4_48 + MASSMR + hybrid_lvl + dust_dry + between_first_second_limit_noincl2ndlmt + 7 + 120 + 7 + 200 + 11.0 + + + + + 750 + GSD_WV_MIXR_ON_HYBRID_LVL + MIXR + hybrid_lvl + 3.0 + + + + 751 + GSD_VPTMP_ON_HYBRID_LVL + VPTMP + hybrid_lvl + 3.0 + + + + 752 + GSD_NCIP_ON_HYBRID_LVL + Number concentration for ice particles on hybrid level + NCIP + hybrid_lvl + 3.0 + + + + 754 + GSD_NCRAIN_ON_HYBRID_LVL + NCRAIN + hybrid_lvl + 3.0 + + + + 546 + GSD_POT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + POT + spec_hgt_lvl_above_grnd + 2. + 4.0 + + + + + 547 + GSD_DEPR_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + DEPR + spec_hgt_lvl_above_grnd + 2. + 3.0 + + + + 548 + GSD_EPOT_ON_SURFACE + EPOT + surface + 3.0 + + + + 753 + GSD_PRES_ON_0C_ISOTHERM + GSD_pressure on Level of 0 deg (C) isotherm + PRES + 0C_isotherm + 3.0 + + + + 756 + GSD_PRES_ON_HGHST_TROP_FRZ_LVL + GSD_pressure on Highest tropospheric freezing level + PRES + hghst_trop_frz_lvl + 3.0 + + + + + 700 + GSD_MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_1-6km + tmpl4_8 + MXUPHL + MAX + spec_hgt_lvl_above_grnd + 6000. + spec_hgt_lvl_above_grnd + 1000. + 3.0 + + + + 701 + GSD_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_1-6km + MXUPHL + spec_hgt_lvl_above_grnd + 6000. + spec_hgt_lvl_above_grnd + 1000. + 3.0 + + + + + 702 + GSD_MAX_LTG_THREAT1_ON_ENTIRE_ATMOS + LTGTHREAT1 + entire_atmos + 3.0 + + + + 703 + GSD_MAX_LTG_THREAT2_ON_ENTIRE_ATMOS + LTGTHREAT2 + entire_atmos + 3.0 + + + + 704 + GSD_MAX_LTG_THREAT3_ON_ENTIRE_ATMOS + LTNG + entire_atmos + 3.0 + + + + 705 + GSD_NCI_LTG_ON_ENTIRE_ATMOS + GSD_Convective Initiation Lightning + NCILTG + entire_atmos + 3.0 + + + + 706 + GSD_NCA_LTG_ON_ENTIRE_ATMOS + GSD_Convective Activity Lightning + NCALTG + entire_atmos + 3.0 + + + + 707 + GSD_NCI_WQ_ON_ENTIRE_ATMOS + GSD_Convective Initiation Vertical Hydrometeor Flux + NCIWQ + entire_atmos + 3.0 + + + + 708 + GSD_NCA_WQ_ON_ENTIRE_ATMOS + GSD_Convective Activity Vertical Hydrometeor Flux + NCAWQ + entire_atmos + 3.0 + + + + 709 + GSD_NCI_REFL_ON_ENTIRE_ATMOS + GSD_Convective Initiation Reflectivity + NCIREFL + entire_atmos + 3.0 + + + + 710 + GSD_NCA_REFL_ON_ENTIRE_ATMOS + GSD_Convective Activity Reflectivity + NCAREFL + entire_atmos + 3.0 + + + + 749 + GSD_RH_WRT_PRECIP_WATER_ON_ENTIRE_ATMOS + RELATIVE HUMIDITY WITH RESPECT TO PRECIPITABLE WATER + RH_PWAT + entire_atmos + 3.0 + + + + 748 + GSD_REFL_ON_SPEC_HGT_LVL_ABOVE_GRND_1km + REFL + spec_hgt_lvl_above_grnd + 1000. + 3.0 + + + + 757 + GSD_REFL_ON_SPEC_HGT_LVL_ABOVE_GRND_4km + REFL + spec_hgt_lvl_above_grnd + 4000. + 3.0 + + + + 758 + GSD_HGT_ON_CONVECTIVE_CLOUD_TOP_LVL + HGT + convective_cloud_top_lvl + 4.0 + + + + 760 + GSD_MIXR_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + MIXR + spec_hgt_lvl_above_grnd + 2. + 3.0 + + + + 762 + GSD_MIXR_ON_SURFACE + MIXR + SURFACE + 3.0 + + + + 761 + GSD_INSIDE_SNOW_TMP_ON_SURFACE + TMP + SURFACE + 4.0 + + + + 768 + GSD_ECHOTOP_ON_CLOUD_TOP + Echo top height (Highest height in meters of the 18-dBZ reflectivity on a model level) + RETOP + cloud_top + 3.0 + + + + 769 + GSD_VIL_ON_ENTIRE_ATMOS + VIL + entire_atmos + 4.0 + + + + 770 + GSD_RADARVIL_ON_ENTIRE_ATMOS + VIL + entire_atmos + 3.0 + + + + 727 + GSD_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km + UPHL + spec_hgt_lvl_above_grnd + 5000. + spec_hgt_lvl_above_grnd + 2000. + 3.0 + + + + 808 + APTMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + APTMP + spec_hgt_lvl_above_grnd + 2. + 4.0 + + + + + diff --git a/parm/postcntrl_comupp.xml b/parm/postcntrl_comupp.xml new file mode 100644 index 000000000..e4df0ba93 --- /dev/null +++ b/parm/postcntrl_comupp.xml @@ -0,0 +1,702 @@ + + + + + WRFPRS + 4 + ncep_nco + v2003 + local_tab_yes1 + fcst + oper + fcst + fcst + hour + nws_ncep + wrf_em_ncar_arwrf + complex_packing_spatial_diff + 2nd_ord_sptdiff + fltng_pnt + lossless + + + PRES_ON_HYBRID_LVL + PRES + 1. 2. 3. 4. 5. + 6.0 + + + + HGT_ON_HYBRID_LVL + HGT + 1. 2. 3. 4. 5. + 4.0 + + + + TMP_ON_HYBRID_LVL + TMP + 1. 2. 3. 4. 5. + 4.0 + + + + POT_ON_HYBRID_LVL + POT + 1. 2. 3. 4. 5. + 4.0 + + + + DPT_ON_HYBRID_LVL + DPT + 1. 2. 3. 4. 5. + 5.0 + + + + SPFH_ON_HYBRID_LVL + SPFH + 1. + 7.0 + + + + RH_ON_HYBRID_LVL + RH + 1. + 4.0 + + + + UGRD_ON_HYBRID_LVL + UGRD + 1. 2. 3. 4. 5. + 4.0 + + + + VGRD_ON_HYBRID_LVL + VGRD + 1. 2. 3. 4. 5. + 4.0 + + + + VVEL_ON_HYBRID_LVL + VVEL + 1. + 5.0 + + + + REFD_ON_HYBRID_LVL + REFD + NCEP + 1. 2. + 4.0 + + + + HGT_ON_ISOBARIC_SFC + HGT + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 6.0 + + + + TMP_ON_ISOBARIC_SFC + TMP + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 3.0 + + + + DPT_ON_ISOBARIC_SFC + DPT + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 5.0 + + + + RH_ON_ISOBARIC_SFC + RH + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 2.0 + + + + UGRD_ON_ISOBARIC_SFC + UGRD + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 4.0 + + + + VGRD_ON_ISOBARIC_SFC + VGRD + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 4.0 + + + + VVEL_ON_ISOBARIC_SFC + VVEL + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 5.0 + + + + CICE_ON_ISOBARIC_SFC + CICE + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 6.0 + + + + MSLET_ON_MEAN_SEA_LVL + MSLET + NCEP + 6.0 + + + + PRES_ON_MEAN_SEA_LVL + PRMSL + 6.0 + + + + TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + TMP + 4.0 + + + + SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + SPFH + 4.0 + + + + DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + DPT + 4.0 + + + + RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + RH + 3.0 + + + + UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + UGRD + 10. + 4.0 + + + + VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + VGRD + 10. + 4.0 + + + + PLPL_ON_SPEC_PRES_ABOVE_GRND + PLPL + NCEP + 25500. + 0. + 6.0 + + + + SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + SPFH + 10. + 3.0 + + + + PRES_ON_SURFACE + PRES + 6.0 + + + + HGT_ON_SURFACE + HGT + 6.0 + + + + POT_ON_SURFACE + POT + 5.0 + + + + SPFH_ON_SURFACE + SPFH + 3.0 + + + + TMP_ON_SURFACE + TMP + 4.0 + + + + TSOIL_ON_DEPTH_BEL_LAND_SFC + TSOIL + 2 2 2 2 + 0. 10. 40. 100. + 2 2 2 2 + 10. 40. 100. 200. + 4.0 + + + + SOILW_ON_DEPTH_BEL_LAND_SFC + SOILW + NCEP + 2 2 2 2 + 0. 10. 40. 100. + 2 2 2 2 + 10. 40. 100. 200. + 3.0 + + + + SOILL_ON_DEPTH_BEL_LAND_SFC + SOILL + NCEP + 2 2 2 2 + 0. 10. 40. 100. + 2 2 2 2 + 10. 40. 100. 200. + 3.0 + + + + SOILM_ON_DEPTH_BEL_LAND_SFC + SOILM + 2 + 0. + 2 + 200. + 3.0 + + + + WEASD_ON_SURFACE + WEASD + 4.0 + + + + SNOWC_ON_SURFACE + SNOWC + NCEP + 3.0 + + + + LFTX_ON_ISOBARIC_SFC_500-1000hpa + LFTX + NCEP + 50000. + 100000. + 3.0 + + + + CAPE_ON_SURFACE + CAPE + 4.0 + + + + BEST_CAPE_ON_SPEC_PRES_ABOVE_GRND + CAPE + 18000. + 0. + 4.0 + + + + MIXED_LAYER_CAPE_ON_SPEC_PRES_ABOVE_GRND + CAPE + 9000. + 0. + 4.0 + + + + UNSTABLE_CAPE_ON_SPEC_PRES_ABOVE_GRND + CAPE + 25500. + 0. + 4.0 + + + + CIN_ON_SURFACE + CIN + 4.0 + + + + BEST_CIN_ON_SPEC_PRES_ABOVE_GRND + CIN + 18000. + 0. + 4.0 + + + + MIXED_LAYER_CIN_ON_SPEC_PRES_ABOVE_GRND + CIN + 9000. + 0. + 4.0 + + + + UNSTABLE_CIN_ON_SPEC_PRES_ABOVE_GRND + CIN + 25500. + 0. + 4.0 + + + + PWAT_ON_ENTIRE_ATMOS_SINGLE_LYR + PWAT + 3.0 + + + + HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND + HLCY + 3000. 1000. + 4.0 + + + + USTM_ON_SPEC_HGT_LVL_ABOVE_GRND + USTM + NCEP + 6000. + 4.0 + + + + VSTM_ON_SPEC_HGT_LVL_ABOVE_GRND + VSTM + NCEP + 6000. + 4.0 + + + + ACM_APCP_ON_SURFACE + APCP + 4.0 + + + + INST_CRAIN_ON_SURFACE + CRAIN + NCEP + 1.0 + + + + CSNOW_ON_SURFACE + CSNOW + NCEP + 1.0 + + + + CICEP_ON_SURFACE + CICEP + NCEP + 1.0 + + + + CFRZR_ON_SURFACE + CFRZR + NCEP + 1.0 + + + + TCDC_ON_HYBRID_LVL + TCDC + 1. 2. + 3.0 + + + + LCDC_ON_LOW_CLOUD_LYR + LCDC + 3.0 + + + + MCDC_ON_MID_CLOUD_LYR + MCDC + 3.0 + + + + HCDC_ON_HIGH_CLOUD_LYR + HCDC + 3.0 + + + + VIS_ON_SURFACE + VIS + 3.0 + + + + GSD_VIS_ON_CLOUD_TOP + VIS + 3.0 + + + + HGT_ON_LVL_OF_ADIAB_COND_FROM_SFC + HGT + 5.0 + + + + PRES_ON_LVL_OF_ADIAB_COND_FROM_SFC + PRES + 6.0 + + + + HGT_ON_TROPOPAUSE + HGT + 6.0 + + + + + PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT + PRES + 30. 50. 80. 100. + 3.0 + + + + UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND + 80. + 4.0 + + + + VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND + 80. + 4.0 + + + + UGRD_ON_SPEC_PRES_ABOVE_GRND + UGRD + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 4.0 + + + + VGRD_ON_SPEC_PRES_ABOVE_GRND + VGRD + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 4.0 + + + + VVEL_ON_SPEC_PRES_ABOVE_GRND + VVEL + 3000. 9000. 18000. + 0. 6000. 15000. + 5.0 + + + + HGT_ON_CLOUD_BASE + HGT + 6.0 + + + + HGT_ON_CLOUD_TOP + HGT + 6.0 + + + + TMP_ON_CLOUD_TOP + TMP + 5.0 + + + + REFC_ON_ENTIRE_ATMOS + REFC + NCEP + 4.0 + + + + REFD_ON_SPEC_HGT_LVL_ABOVE_GRND + REFD + NCEP + 4000. 1000. + 4.0 + + + + HGT_ON_CLOUD_CEILING + HGT + 6.0 + + + + MSLET_ON_MEAN_SEA_LVL + MSLET + NCEP + 6.0 + + + + PRES_ON_MEAN_SEA_LVL + PRMSL + 6.0 + + + + PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + PRES + 6.0 + + + + TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + TMP + 4.0 + + + + SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + SPFH + 4.0 + + + + DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + DPT + 4.0 + + + + RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + RH + 3.0 + + + + PRES_ON_SURFACE + PRES + 6.0 + + + + VEG_ON_SURFACE + VEG + 3.0 + + + + MSTAV_ON_DEPTH_BEL_LAND_SFC + MSTAV + NCEP + 2 + 0. + 2 + 100. + 3.0 + + + + 4LFTX_ON_SPEC_PRES_ABOVE_GRND + 4LFTX + NCEP + 18000. + 0. + 3.0 + + + + NLAT_ON_SURFACE + NLAT + NCEP + 4.0 + + + + ELON_ON_SURFACE + ELON + NCEP + 4.0 + + + + LAND_ON_SURFACE + LAND + 1.0 + + + NON_NADIR_SBT123_ON_TOP_OF_ATMOS + 4.0 + + + + NON_NADIR_SBT124_ON_TOP_OF_ATMOS + 4.0 + + + + SBT113_ON_TOP_OF_ATMOS + 4.0 + + + + SBT114_ON_TOP_OF_ATMOS + 4.0 + + + + + diff --git a/parm/postxconfig-NT-WRF_comupp.txt b/parm/postxconfig-NT-WRF_comupp.txt new file mode 100644 index 000000000..c59bb0e24 --- /dev/null +++ b/parm/postxconfig-NT-WRF_comupp.txt @@ -0,0 +1,3681 @@ +1 +99 +WRFPRS +4 +ncep_nco +v2003 +local_tab_yes1 +fcst +oper +fcst +fcst +hour +nws_ncep +wrf_em_ncar_arwrf +complex_packing_spatial_diff +2nd_ord_sptdiff +fltng_pnt +lossless +1 +PRES_ON_HYBRID_LVL +? +1 +tmpl4_0 +PRES +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +77 +HGT_ON_HYBRID_LVL +? +1 +tmpl4_0 +HGT +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +2 +TMP_ON_HYBRID_LVL +? +1 +tmpl4_0 +TMP +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +3 +POT_ON_HYBRID_LVL +? +1 +tmpl4_0 +POT +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +4 +DPT_ON_HYBRID_LVL +? +1 +tmpl4_0 +DPT +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +5 +SPFH_ON_HYBRID_LVL +? +1 +tmpl4_0 +SPFH +? +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +7.0 +0 +0 +0 +? +? +? +6 +RH_ON_HYBRID_LVL +? +1 +tmpl4_0 +RH +? +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +7 +UGRD_ON_HYBRID_LVL +? +1 +tmpl4_0 +UGRD +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +8 +VGRD_ON_HYBRID_LVL +? +1 +tmpl4_0 +VGRD +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +9 +VVEL_ON_HYBRID_LVL +? +1 +tmpl4_0 +VVEL +? +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +250 +REFD_ON_HYBRID_LVL +? +1 +tmpl4_0 +REFD +NCEP +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +12 +HGT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +HGT +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +13 +TMP_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +TMP +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +15 +DPT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +DPT +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +17 +RH_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +RH +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.0 +0 +0 +0 +? +? +? +18 +UGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +UGRD +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +19 +VGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +VGRD +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +20 +VVEL_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +VVEL +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +166 +CICE_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +CICE +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +23 +MSLET_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +MSLET +NCEP +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +105 +PRES_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +PRMSL +? +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +106 +TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +TMP +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +112 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +113 +DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +DPT +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +114 +RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +RH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +64 +UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +UGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +65 +VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +VGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +246 +PLPL_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +PLPL +NCEP +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +159 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +24 +PRES_ON_SURFACE +? +1 +tmpl4_0 +PRES +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +25 +HGT_ON_SURFACE +? +1 +tmpl4_0 +HGT +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +27 +POT_ON_SURFACE +? +1 +tmpl4_0 +POT +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +28 +SPFH_ON_SURFACE +? +1 +tmpl4_0 +SPFH +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +26 +TMP_ON_SURFACE +? +1 +tmpl4_0 +TMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +116 +TSOIL_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +TSOIL +? +? +depth_bel_land_sfc +4 +2 2 2 2 +4 +0. 10. 40. 100. +depth_bel_land_sfc +4 +2 2 2 2 +4 +10. 40. 100. 200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +117 +SOILW_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +SOILW +NCEP +? +depth_bel_land_sfc +4 +2 2 2 2 +4 +0. 10. 40. 100. +depth_bel_land_sfc +4 +2 2 2 2 +4 +10. 40. 100. 200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +225 +SOILL_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +SOILL +NCEP +? +depth_bel_land_sfc +4 +2 2 2 2 +4 +0. 10. 40. 100. +depth_bel_land_sfc +4 +2 2 2 2 +4 +10. 40. 100. 200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +36 +SOILM_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +SOILM +? +? +depth_bel_land_sfc +1 +2 +1 +0. +depth_bel_land_sfc +1 +2 +1 +200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +119 +WEASD_ON_SURFACE +? +1 +tmpl4_0 +WEASD +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +120 +SNOWC_ON_SURFACE +? +1 +tmpl4_0 +SNOWC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +30 +LFTX_ON_ISOBARIC_SFC_500-1000hpa +? +1 +tmpl4_0 +LFTX +NCEP +? +isobaric_sfc +0 +? +1 +50000. +isobaric_sfc +0 +? +1 +100000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +32 +CAPE_ON_SURFACE +? +1 +tmpl4_0 +CAPE +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +566 +BEST_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +582 +MIXED_LAYER_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +9000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +584 +UNSTABLE_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +107 +CIN_ON_SURFACE +? +1 +tmpl4_0 +CIN +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +567 +BEST_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +583 +MIXED_LAYER_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +9000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +585 +UNSTABLE_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +80 +PWAT_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_0 +PWAT +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +162 +HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +HLCY +? +? +spec_hgt_lvl_above_grnd +0 +? +2 +3000. 1000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +163 +USTM_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +USTM +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +1 +6000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +164 +VSTM_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +VSTM +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +1 +6000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +87 +ACM_APCP_ON_SURFACE +? +1 +tmpl4_8 +APCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +160 +INST_CRAIN_ON_SURFACE +? +1 +tmpl4_0 +CRAIN +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +551 +CSNOW_ON_SURFACE +Categorical snow on surface +1 +tmpl4_0 +CSNOW +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +552 +CICEP_ON_SURFACE +Categorical ice pellets on surface +1 +tmpl4_0 +CICEP +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +553 +CFRZR_ON_SURFACE +Categorical freezing rain on surface +1 +tmpl4_0 +CFRZR +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +145 +TCDC_ON_HYBRID_LVL +? +1 +tmpl4_0 +TCDC +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +37 +LCDC_ON_LOW_CLOUD_LYR +? +1 +tmpl4_0 +LCDC +? +? +low_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +38 +MCDC_ON_MID_CLOUD_LYR +? +1 +tmpl4_0 +MCDC +? +? +mid_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +39 +HCDC_ON_HIGH_CLOUD_LYR +? +1 +tmpl4_0 +HCDC +? +? +high_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +180 +VIS_ON_SURFACE +? +1 +tmpl4_0 +VIS +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +410 +GSD_VIS_ON_CLOUD_TOP +GSD_visibility on cloud top +1 +tmpl4_0 +VIS +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +109 +HGT_ON_LVL_OF_ADIAB_COND_FROM_SFC +? +1 +tmpl4_0 +HGT +? +? +lvl_of_adiab_cond_from_sfc +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +110 +PRES_ON_LVL_OF_ADIAB_COND_FROM_SFC +? +1 +tmpl4_0 +PRES +? +? +lvl_of_adiab_cond_from_sfc +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +177 +HGT_ON_TROPOPAUSE +? +1 +tmpl4_0 +HGT +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +579 +PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT +? +1 +tmpl4_0 +PRES +? +? +spec_hgt_lvl_above_grnd +0 +? +4 +30. 50. 80. 100. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +412 +UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND +U-Component of Wind on Specified Height Level Above Ground +1 +tmpl4_0 +UGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +80. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +413 +VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND +V-Component of Wind on Specified Height Level Above Ground +1 +tmpl4_0 +VGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +80. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +73 +UGRD_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +UGRD +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +74 +VGRD_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +VGRD +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +90 +VVEL_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +VVEL +? +? +spec_pres_above_grnd +0 +? +3 +3000. 9000. 18000. +spec_pres_above_grnd +0 +? +3 +0. 6000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +178 +HGT_ON_CLOUD_BASE +? +1 +tmpl4_0 +HGT +? +? +cloud_base +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +179 +HGT_ON_CLOUD_TOP +? +1 +tmpl4_0 +HGT +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +168 +TMP_ON_CLOUD_TOP +? +1 +tmpl4_0 +TMP +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +252 +REFC_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +REFC +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +253 +REFD_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +REFD +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +2 +4000. 1000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +260 +HGT_ON_CLOUD_CEILING +? +1 +tmpl4_0 +HGT +? +? +cloud_ceilng +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +23 +MSLET_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +MSLET +NCEP +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +105 +PRES_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +PRMSL +? +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +138 +PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +PRES +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +106 +TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +TMP +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +112 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +113 +DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +DPT +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +114 +RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +RH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +24 +PRES_ON_SURFACE +? +1 +tmpl4_0 +PRES +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +170 +VEG_ON_SURFACE +? +1 +tmpl4_0 +VEG +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +171 +MSTAV_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +MSTAV +NCEP +? +depth_bel_land_sfc +1 +2 +1 +0. +depth_bel_land_sfc +1 +2 +1 +100. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +31 +4LFTX_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +4LFTX +NCEP +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +48 +NLAT_ON_SURFACE +? +1 +tmpl4_0 +NLAT +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +49 +ELON_ON_SURFACE +? +1 +tmpl4_0 +ELON +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +50 +LAND_ON_SURFACE +? +1 +tmpl4_0 +LAND +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +457 +NON_NADIR_SBT123_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES12, Channel 3 on top of atmosphere +1 +tmpl4_0 +SBT123 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +458 +NON_NADIR_SBT124_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES12, Channel 4 on top of atmosphere +1 +tmpl4_0 +SBT124 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +461 +SBT113_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES11, Channel 3 on top of atmosphere +1 +tmpl4_0 +SBT113 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +461 +SBT113_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES11, Channel 3 on top of atmosphere +1 +tmpl4_0 +SBT113 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +462 +SBT114_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES11, Channel 4 on top of atmosphere +1 +tmpl4_0 +SBT114 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +462 +SBT114_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES11, Channel 4 on top of atmosphere +1 +tmpl4_0 +SBT114 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-hafs.txt b/parm/postxconfig-NT-hafs.txt index 9e66cbb77..a0359f4c0 100644 --- a/parm/postxconfig-NT-hafs.txt +++ b/parm/postxconfig-NT-hafs.txt @@ -2118,7 +2118,7 @@ surface 0 0.0 1 -3.0 +6.0 0 0 0 diff --git a/parm/wrf_cntrl.parm b/parm/wrf_cntrl.parm new file mode 100644 index 000000000..d6dc5cc54 --- /dev/null +++ b/parm/wrf_cntrl.parm @@ -0,0 +1,499 @@ + KGTYPE******I5*******:(00255)********START OF THIS OUTPUT GRID****** + IMDLTY *I5* :(00125) + DATSET *A6* :(WRFPRS) + (PRESS ON MDL SFCS ) SCAL=( 3.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (HEIGHT ON MDL SFCS ) SCAL=( 6.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TEMP ON MDL SFCS ) SCAL=( 4.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (POT TEMP ON MDL SFCS) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (DWPT TEMP ON MDL SFC) SCAL=( 5.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SPEC HUM ON MDL SFCS) SCAL=( 3.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (REL HUM ON MDL SFCS ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MST CNVG ON MDL SFCS) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U WIND ON MDL SFCS ) SCAL=( 4.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V WIND ON MDL SFCS ) SCAL=( 4.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (OMEGA ON MDL SFCS ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ABS VORT ON MDL SFCS) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (STRMFUNC ON MDL SFCS) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TRBLNT KE ON MDL SFC) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RCHDSN NO ON MDL SFC) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RAIN ON MDL SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SNOW ON MDL SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (F_RimeF ON MDL SFCS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CONDENSATE MDL SFCS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RADAR REFL MDL SFCS ) SCAL=( 4.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLD WTR ON MDL SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLD ICE ON MDL SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GRAUPEL ON MDL SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLD FRAC ON MDL SFCS) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MASTER LENGTH SCALE ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ASYMPT MSTR LEN SCL ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (HEIGHT OF PRESS SFCS) SCAL=( 6.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (TEMP ON PRESS SFCS ) SCAL=( 4.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (POT TEMP ON P SFCS ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (DWPT TEMP ON P SFCS ) SCAL=( 4.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (SPEC HUM ON P SFCS ) SCAL=( 4.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (REL HUMID ON P SFCS ) SCAL=( 4.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (MST CNVG ON P SFCS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U WIND ON PRESS SFCS) SCAL=( 4.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (V WIND ON PRESS SFCS) SCAL=( 4.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (W WIND ON P SFCS ) SCAL=( 5.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (OMEGA ON PRESS SFCS ) SCAL=( 5.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (ABS VORT ON P SFCS ) SCAL=( 3.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (STRMFUNC ON P SFCS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TRBLNT KE ON P SFCS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD ICE ON P SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD WATR ON P SFCS) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RAIN ON P SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SNOW ON P SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (F_RimeF ON P SFCS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RADAR REFL ON P SFCS) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GRAUPEL ON P SFCS ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAPS SLP ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MESINGER MEAN SLP ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHUELL MEAN SLP ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHELTER PRESSURE ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHELTER TEMPERATURE ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHELTER SPEC HUMID ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHELTER DEWPOINT ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHELTER REL HUMID ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHELTER MIX RATIO ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U WIND AT ANEMOM HT ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V WIND AT ANEMOM HT ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SURFACE PRESSURE ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SURFACE HEIGHT ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SURFACE POT TEMP ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SURFACE SPEC HUMID ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SURFACE DEWPOINT ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SURFACE REL HUMID ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC (SKIN) TEMPRATUR) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BOTTOM SOIL TEMP ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL TEMPERATURE ) SCAL=( 3.0) + L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL MOISTURE ) SCAL=( 3.0) + L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LIQUID SOIL MOISTURE) SCAL=( 3.0) + L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL SOIL MOISTURE ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PLANT CANOPY SFC WTR) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SNOW WATER EQUIVALNT) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PERCENT SNOW COVER ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC EXCHANGE COEF ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GREEN VEG COVER ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (VEGETATION TYPE ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL TYPE ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SLOPE TYPE ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SNOW FREE ALBEDO ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAXIMUM SNOW ALBEDO ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CANOPY CONDUCTANCE ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CANOPY COND SOLAR ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CANOPY COND TEMP ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CANOPY COND HUMID ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CANOPY COND SOILM ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL MOIST REFERENCE) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL MOIST POROSITY ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (NO OF ROOT LAYERS ) SCAL=( 1.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MIN STOMATAL RESIST ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SNOW DEPTH ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AIR DRY SOIL MOIST ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL MOIST WILT PT ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL MOISTURE AVAIL ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INST GROUND HEAT FLX) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LIFTED INDEX--SURFCE) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LIFTED INDEX--BEST ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LIFTED INDEX--BNDLYR) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CNVCT AVBL POT ENRGY) SCAL=( 3.0) + L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CNVCT INHIBITION ) SCAL=( 3.0) + L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PRECIPITABLE WATER ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (STORM REL HELICITY ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM TOTAL PRECIP ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM CONVCTIVE PRECIP) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM GRD SCALE PRECIP) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM GRD SCALE SW ICE) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM SNOWFALL ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BUCKET SNOW PRECIP ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BUCKET TOTAL PRECIP ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BUCKET CONV PRECIP ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BUCKET GRDSCALE PRCP) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM SNOW TOTAL/MELT ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM STORM SFC RNOFF ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM BSFL-GDWR RNOFF ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTANT PRECIP TYPE ) SCAL=( 1.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GSD PRECIP TYPE ) SCAL=( 1.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTANT PRECIP RATE ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CONV PRECIP RATE ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (FROZEN FRAC CLD SCHM) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SEA SFC TEMPERATURE ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LOW CLOUD FRACTION ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MID CLOUD FRACTION ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (HIGH CLOUD FRACTION ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVG TOTAL CLD FRAC ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVG STRAT CLD FRAC ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVG CNVCT CLD FRAC ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GSD CLD BOT HEIGHT ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GSD CLD TOP HEIGHT ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD BOT PRESSURE ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD TOP PRESSURE ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD TOP TEMPS ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD BOTTOM HEIGHT ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD TOP HEIGHT ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CONV CLOUD BOT PRESS) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CONV CLOUD TOP PRESS) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHAL CU CLD BOT PRES) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHAL CU CLD TOP PRES) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (DEEP CU CLD BOT PRES) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (DEEP CU CLD TOP PRES) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GRID CLOUD BOT PRESS) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GRID CLOUD TOP PRESS) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CONV CLOUD FRACTION ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX WIND PRESS LEVEL) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX WIND HGHT LEVEL ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U COMP MAX WIND ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V COMP MAX WIND ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PBL HEIGHT ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (COMPOSITE RADAR REFL) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RADAR REFL AGL ) SCAL=( 4.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (VISIBILITY ) SCAL=( 2.7) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GSD VISIBILITY ) SCAL=( 2.7) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LCL AGL HEIGHT ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LCL PRESSURE ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE GRDSCL RN TMPTDY) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE CNVCT RN TMPTDY ) SCAL=( 2.7) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RADFLX CNVG TMP TNDY) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SW RAD TEMP TNDY ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LW RAD TEMP TNDY ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTN OUT SFC SW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTN OUT SFC LW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE INCMG SFC SW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE INCMG SFC LW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE OUTGO SFC SW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE OUTGO SFC LW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BRIGHTNESS TEMP ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BRIGHTNESS TEMP NCAR) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTN INC SFC SW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTN INC SFC LW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTN CLR INC SFC SW) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ROUGHNESS LENGTH ) SCAL=( 2.7) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (FRICTION VELOCITY ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC DRAG COEFFICIENT) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC U WIND STRESS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC V WIND STRESS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE SFC SENHEAT FX ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE GROUND HEAT FX ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE SNO PHSCNG HT FX) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE SFC LATHEAT FX ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE SFC MOMENTUM FX ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACC SFC EVAPORATION ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACC POT EVAPORATION ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INST SFC SENHEAT FX ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INST GROUND HEAT FLX) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INST SFC LATHEAT FX ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LATITUDE ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LONGITUDE ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LAND/SEA MASK ) SCAL=( 1.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SEA ICE MASK ) SCAL=( 1.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC MIDDAY ALBEDO ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LIFT PCL LVL PRESS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PRESS AT TROPOPAUSE ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (HEIGHT AT TROPOPAUSE) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TEMP AT TROPOPAUSE ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (POTENTL TEMP AT TROP) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U WIND AT TROPOPAUSE) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V WIND AT TROPOPAUSE) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHEAR AT TROPOPAUSE ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SPE HUM AT FD HEIGHT) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TEMP AT FD HEIGHTS ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U WIND AT FD HEIGHTS) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V WIND AT FD HEIGHTS) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (HEIGHT OF FRZ LVL ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (REL HUMID AT FRZ LVL) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (HIGHEST FREEZE LVL ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PRESS IN BNDRY LYR ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TEMP IN BNDRY LYR ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (POT TMP IN BNDRY LYR) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (DWPT IN BNDRY LYR ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SPC HUM IN BNDRY LYR) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (REL HUM IN BNDRY LYR) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MST CNV IN BNDRY LYR) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (P WATER IN BNDRY LYR) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U WIND IN BNDRY LYR ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V WIND IN BNDRY LYR ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (OMEGA IN BNDRY LYR ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX 10m WIND SPEED ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX UPDRAFT VERT VEL) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX DNDRAFT VERT VEL) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX 1km REFLECTIVITY) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX UPDRAFT HELICITY) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MEAN VERT VEL ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX VERT INTEG GRAUP) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LCL AGL HEIGHT ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U COMP STORM MOTION ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V COMP STORM MOTION ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U COMP 0-1 KM SHEAR ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V COMP 0-1 KM SHEAR ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U COMP 0-6 KM SHEAR ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V COMP 0-6 KM SHEAR ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC WIND GUST ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE OUTGO TOA SW RAD) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE OUTGO TOA LW RAD) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTN OUT TOA LW RAD) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL CLD FRACTION ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL COLUMN CLD WTR) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL COLUMN CLD ICE) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL COLUMN RAIN ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL COLUMN SNOW ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL COL CONDENSATE) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL COLD LIQUID ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL MELTING ICE ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CEILING ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (EMISSIVITY ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GOES TB - CH 2 ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GOES TB - CH 3 ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GOES TB - CH 4 ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GOES TB - CH 5 ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PV ON THETA SFCS ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) +***DONE WITH THIS GRID*** + diff --git a/sorc/ncep_post.fd/CALRAD_WCLOUD_newcrtm.f b/sorc/ncep_post.fd/CALRAD_WCLOUD_newcrtm.f index c5e459ffb..8c09ea3d4 100644 --- a/sorc/ncep_post.fd/CALRAD_WCLOUD_newcrtm.f +++ b/sorc/ncep_post.fd/CALRAD_WCLOUD_newcrtm.f @@ -320,7 +320,7 @@ SUBROUTINE CALRAD_WCLOUD .or. iget(874) > 0 .or. iget(875) > 0 .or. iget(876) > 0 & .or. iget(877) > 0 .or. iget(878) > 0 .or. iget(879) > 0 & .or. iget(880) > 0 .or. iget(881) > 0 .or. iget(882) > 0 & - .or. post_abig16 .or. post_abig17 > 0 ) then + .or. post_abig16 .or. post_abig17 ) then ! specify numbers of cloud species ! Thompson==8, Ferrier==5,95, WSM6==6, Lin==2 @@ -437,7 +437,7 @@ SUBROUTINE CALRAD_WCLOUD endif ! SEVIRI if(iget(876)>0)then - call select_channels_L(channelinfo(15),8,(/ 1,2,3,4,5,6,7,8 /),lvls(1:7,iget(876)),iget(876)) + call select_channels_L(channelinfo(15),8,(/ 1,2,3,4,5,6,7,8 /),lvls(1:8,iget(876)),iget(876)) endif ! MT2 if(iget(860)>0)then diff --git a/sorc/ncep_post.fd/CLDRAD.f b/sorc/ncep_post.fd/CLDRAD.f index 736ad5c6d..541927300 100644 --- a/sorc/ncep_post.fd/CLDRAD.f +++ b/sorc/ncep_post.fd/CLDRAD.f @@ -5137,52 +5137,52 @@ 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 - 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 - 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) - elseif(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(659)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) - endif - ENDIF - - IF (IGET(660).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 - 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) - elseif(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(660)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) - endif - ENDIF -#endif +!#if 0 +!!! Multiply by 1.E-6 to revert these fields back +! IF (IGET(659).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 +! 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) +! elseif(grib=='grib2') then +! cfld=cfld+1 +! fld_info(cfld)%ifld=IAVBLFLD(IGET(659)) +! datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) +! endif +! ENDIF +! +! IF (IGET(660).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 +! 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) +! elseif(grib=='grib2') then +! cfld=cfld+1 +! fld_info(cfld)%ifld=IAVBLFLD(IGET(660)) +! 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 diff --git a/sorc/ncep_post.fd/INITPOST_NMM_BIN_MPIIO_READ.f b/sorc/ncep_post.fd/INITPOST_NMM_BIN_MPIIO_READ.f deleted file mode 100644 index 7d35c74ed..000000000 --- a/sorc/ncep_post.fd/INITPOST_NMM_BIN_MPIIO_READ.f +++ /dev/null @@ -1,585 +0,0 @@ -! -! Public domain. -! - -!> -!! Module to retrieve a variable from a WRF I/O Internal format file. -!! -!! This module uses an index generated by module_io_int_idx. -! -!! If the MPI implementations actually supported the external32 -!! view on a file we could simply call: -!! -!! MPI_File_set_view(..., "external32", ...) -!! -!! However most do not. Instead we have do a native view and then -!! do a byte order rearrangement. -!! -!! Usage consists of: -!! 1) Creating an index of records in the file -!! 2) Opening the file with MPI -!! 3) Retrieving the data -!! 4) Closing the file with MPI -!! -!! Example: -!! -!! USE module_io_int_idx, only: io_int_index, r_info -!! USE module_io_int_read, only: io_int_fetch_data -!! -!! type(r_info), pointer :: r(:) => NULL() ! Define the array of records -!! -!! call io_int_index(filename, r, ierr) ! Get an index of reocrds -!! -!! call mpi_file_open(mpi_comm_world, trim(filename), & -!! mpi_mode_rdonly, mpi_info_null, & -!! iunit, ierr) ! MPI Open the file -!! -!! call io_int_fetch_data(iunit, r, 'TRUELAT1', garb, ierr) -!! ! Get an record (into garb) -!! -!! call mpi_file_close(iunit, ierr) ! Close the file -!! - -module INITPOST_NMM_BIN_MPIIO_READ - - use module_io_int_idx, only: io_int_loc, r_info - use, intrinsic :: iso_c_binding, only: c_int32_t - - implicit none - - private - public :: fetch_data - - interface - integer(c_int32_t) & - pure function ntohl(netlong) & - bind(c, name="ntohl") - import :: c_int32_t - integer(c_int32_t), value, intent(in) :: netlong - end function - end interface - interface fetch_data - module procedure read_i0, read_i1, read_i2, read_i3, & - read_r0, read_r1, read_r2, read_r3, & - read_c1 - end interface fetch_data - - include "mpif.h" - -contains - - !> - !! Read a single integer - ! - subroutine read_i0(ifd, records, varname, pos, n, dst, ierr) - - integer, intent(in) :: ifd - type(r_info), pointer, intent(in) :: records(:) - character(len=*), intent(in) :: varname - integer(kind=mpi_offset_kind), optional, intent(in) :: pos - integer, optional, intent(in) :: n - integer, intent(out) :: dst - integer, intent(out) :: ierr - - integer(kind=mpi_offset_kind) :: offset - integer :: count - integer :: tmp - - call io_int_loc(varname, records, offset, count, ierr) - if (ierr .ne. 0) then - return - end if - - if (present(pos)) then - offset = pos - end if - - call mpi_file_read_at(ifd, offset, tmp, 1, & - mpi_integer4, mpi_status_ignore, ierr) - if (ierr .ne. 0) then - write(0,*) 'MPI IO: Unable to read ', varname - return - end if - dst = ntohl(tmp) - - end subroutine read_i0 - - !> - !! Read a 1D integer array. - ! - subroutine read_i1(ifd, records, varname, pos, n, dst, ierr) - - integer, intent(in) :: ifd - type(r_info), pointer, intent(in) :: records(:) - character(len=*), intent(in) :: varname - integer(kind=mpi_offset_kind), optional, intent(in) :: pos - integer, optional, intent(in) :: n - integer, intent(inout) :: dst(:) - integer, intent(out) :: ierr - - integer(kind=mpi_offset_kind) :: offset - integer :: count - integer :: num - integer :: i - integer :: its, ite - integer, allocatable, dimension(:) :: tmp - - call io_int_loc(varname, records, offset, count, ierr) - if (ierr .ne. 0) then - return - end if - - if (present(pos)) then - offset = pos - end if - if (present(n)) then - num = n - its = 1 - ite = num - else - its = lbound(dst,1) - ite = ubound(dst,1) - num = ite - its + 1 - end if - - allocate(tmp(its:ite), stat=ierr) - if (ierr .ne. 0) then - write(0,*) 'Unable to allocate a temporary array' - return - end if - tmp = 0 - - call mpi_file_read_at(ifd, offset, tmp, num, & - mpi_integer4, mpi_status_ignore, ierr) - if (ierr .ne. 0) then - write(0,*) 'MPI IO: Unable to read ', varname - return - end if - - forall(i=its:ite) - dst(i) = transfer(ntohl(tmp(i)), 1.0) - end forall - - deallocate(tmp) - - end subroutine read_i1 - - !> - !! Read a 2D integer array. - ! - subroutine read_i2(ifd, records, varname, pos, n, dst, ierr) - - integer, intent(in) :: ifd - type(r_info), pointer, intent(in) :: records(:) - character(len=*), intent(in) :: varname - integer(kind=mpi_offset_kind), optional, intent(in) :: pos - integer, optional, intent(in) :: n - integer, intent(inout) :: dst(:,:) - integer, intent(out) :: ierr - - integer(kind=mpi_offset_kind) :: offset - integer :: count - integer :: num - integer :: i, j - integer :: its, ite, jts, jte - integer, allocatable, dimension(:,:) :: tmp - - call io_int_loc(varname, records, offset, count, ierr) - if (ierr .ne. 0) then - return - end if - - if (present(pos)) then - offset = pos - end if - - its = lbound(dst,1) - ite = ubound(dst,1) - jts = lbound(dst,2) - jte = ubound(dst,2) - num = (ite - its + 1) * (jte - jts +1) - - allocate(tmp(its:ite, jts:jte), stat=ierr) - if (ierr .ne. 0) then - write(0,*) 'Unable to allocate a temporary array' - return - end if - tmp = 0 - - if (present(n)) then - num = n - end if - - call mpi_file_read_at(ifd, offset, tmp, num, & - mpi_integer4, mpi_status_ignore, ierr) - if (ierr .ne. 0) then - write(0,*) 'MPI IO: Unable to read ', varname - return - end if - - forall(i=its:ite, j=jts:jte) - dst(i,j) = transfer(ntohl(tmp(i,j)), 1.0) - end forall - - deallocate(tmp) - - end subroutine read_i2 - - !> - !! Read a 3D integer array - ! - subroutine read_i3(ifd, records, varname, pos, n, dst, ierr) - - integer, intent(in) :: ifd - type(r_info), pointer, intent(in) :: records(:) - character(len=*), intent(in) :: varname - integer(kind=mpi_offset_kind), optional, intent(in) :: pos - integer, optional, intent(in) :: n - integer, intent(inout) :: dst(:,:,:) - integer, intent(out) :: ierr - - integer(kind=mpi_offset_kind) :: offset - integer :: count - integer :: num - integer :: i, j, k - integer :: its, ite, jts, jte, kts, kte - integer, allocatable, dimension(:,:,:) :: tmp - - call io_int_loc(varname, records, offset, count, ierr) - if (ierr .ne. 0) then - return - end if - - if (present(pos)) then - offset = pos - end if - - its = lbound(dst,1) - ite = ubound(dst,1) - jts = lbound(dst,2) - jte = ubound(dst,2) - kts = lbound(dst,3) - kte = ubound(dst,3) - num = (ite - its + 1) * (jte - jts + 1) * (kte - kts + 1) - - allocate(tmp(its:ite, jts:jte, kts:kte), stat=ierr) - if (ierr .ne. 0) then - write(0,*) 'Unable to allocate a temporary array' - return - end if - tmp = 0 - - if (present(n)) then - num = n - end if - - call mpi_file_read_at(ifd, offset, tmp, num, & - mpi_integer4, mpi_status_ignore, ierr) - - if (ierr .ne. 0) then - write(0,*) 'MPI IO: Unable to read ', varname - return - end if - - forall(i=its:ite, j=jts:jte, k=kts:kte) - dst(i,j,k) = transfer(ntohl(tmp(i,j,k)), 1.0) - end forall - - deallocate(tmp) - - end subroutine read_i3 - - !> - !! Read a single real. - ! - subroutine read_r0(ifd, records, varname, pos, n, dst, ierr) - - integer, intent(in) :: ifd - type(r_info), pointer, intent(in) :: records(:) - character(len=*), intent(in) :: varname - integer(kind=mpi_offset_kind), optional, intent(in) :: pos - integer, optional, intent(in) :: n - real, intent(out) :: dst - integer, intent(out) :: ierr - - integer(kind=mpi_offset_kind) :: offset - integer :: count - integer :: tmp - - call io_int_loc(varname, records, offset, count, ierr) - if (ierr .ne. 0) then - return - end if - if (present(pos)) then - offset = pos - end if - - - call mpi_file_read_at(ifd, offset, tmp, 1, & - mpi_integer4, mpi_status_ignore, ierr) - if (ierr .ne. 0) then - write(0,*) 'MPI IO: Unable to read ', varname - return - end if - dst = transfer(ntohl(tmp), 1.0) - - end subroutine read_r0 - - !> - !! Read a 1D real array. - ! - subroutine read_r1(ifd, records, varname, pos, n, dst, ierr) - - integer, intent(in) :: ifd - type(r_info), pointer, intent(in) :: records(:) - character(len=*), intent(in) :: varname - integer(kind=mpi_offset_kind), optional, intent(in) :: pos - integer, optional, intent(in) :: n - real, intent(inout) :: dst(:) - integer, intent(out) :: ierr - - integer(kind=mpi_offset_kind) :: offset - integer :: count - integer :: num - integer :: i - integer :: its, ite - integer, allocatable, dimension(:) :: tmp - - call io_int_loc(varname, records, offset, count, ierr) - if (ierr .ne. 0) then - return - end if - - if (present(pos)) then - offset = pos - end if - if (present(n)) then - num = n - its = 1 - ite = num - else - its = lbound(dst,1) - ite = ubound(dst,1) - num = ite - its + 1 - end if - - allocate(tmp(its:ite), stat=ierr) - if (ierr .ne. 0) then - write(0,*) 'Unable to allocate a temporary array' - return - end if - tmp = 0 - - call mpi_file_read_at(ifd, offset, tmp, num, & - mpi_integer4, mpi_status_ignore, ierr) - if (ierr .ne. 0) then - write(0,*) 'MPI IO: Unable to read ', varname - return - end if - - forall(i=its:ite) - dst(i) = transfer(ntohl(tmp(i)), 1.0) - end forall - - deallocate(tmp) - - end subroutine read_r1 - - !> - !! Read a 2D real array. - ! - subroutine read_r2(ifd, records, varname, pos, n, dst, ierr) - - integer, intent(in) :: ifd - type(r_info), pointer, intent(in) :: records(:) - character(len=*), intent(in) :: varname - integer(kind=mpi_offset_kind), optional, intent(in) :: pos - integer, optional, intent(in) :: n - real, intent(inout) :: dst(:,:) - integer, intent(out) :: ierr - - integer(kind=mpi_offset_kind) :: offset - integer :: count - integer :: num - integer :: i, j - integer :: its, ite, jts, jte - integer, allocatable, dimension(:,:) :: tmp - - call io_int_loc(varname, records, offset, count, ierr) - if (ierr .ne. 0) then - return - end if - - if (present(pos)) then - offset = pos - end if - - its = lbound(dst,1) - ite = ubound(dst,1) - jts = lbound(dst,2) - jte = ubound(dst,2) - num = (ite - its + 1) * (jte - jts + 1) - - allocate(tmp(its:ite, jts:jte), stat=ierr) - if (ierr .ne. 0) then - write(0,*) 'Unable to allocate a temporary array' - return - end if - tmp = 0 - - if (present(n)) then - if ( n .le. num) then - num = n - end if - end if - call mpi_file_read_at(ifd, offset, tmp, num, & - mpi_integer4, mpi_status_ignore, ierr) - if (ierr .ne. 0) then - write(0,*) 'MPI IO: Unable to read ', varname - return - end if - - forall(i=its:ite, j=jts:jte) - dst(i,j) = transfer(ntohl(tmp(i,j)), 1.0) - end forall - - deallocate(tmp) - - end subroutine read_r2 - - !> - !! Read a 3D real array - ! - subroutine read_r3(ifd, records, varname, pos, n, dst, ierr) - - integer, intent(in) :: ifd - type(r_info), pointer, intent(in) :: records(:) - character(len=*), intent(in) :: varname - integer(kind=mpi_offset_kind), optional, intent(in) :: pos - integer, optional, intent(in) :: n - real, intent(inout) :: dst(:,:,:) - integer, intent(out) :: ierr - - integer(kind=mpi_offset_kind) :: offset - integer :: count - integer :: num - integer :: i, j, k - integer :: its, ite, jts, jte, kts, kte - integer, allocatable, dimension(:,:,:) :: tmp - - call io_int_loc(varname, records, offset, count, ierr) - if (ierr .ne. 0) then - return - end if - - if (present(pos)) then - offset = pos - end if - - its = lbound(dst,1) - ite = ubound(dst,1) - jts = lbound(dst,2) - jte = ubound(dst,2) - kts = lbound(dst,3) - kte = ubound(dst,3) - num = (ite - its + 1) * (jte - jts + 1) * (kte - kts + 1) - - allocate(tmp(its:ite, jts:jte, kts:kte), stat=ierr) - if (ierr .ne. 0) then - write(0,*) 'Unable to allocate a temporary array' - return - end if - tmp = 0 - - if (present(n)) then - if ( n .le. num) then - num = n - end if - end if - call mpi_file_read_at(ifd, offset, tmp, num, & - mpi_integer4, mpi_status_ignore, ierr) - - if (ierr .ne. 0) then - write(0,*) 'MPI IO: Unable to read ', varname - return - end if - - forall(i=its:ite, j=jts:jte, k=kts:kte) - dst(i,j,k) = transfer(ntohl(tmp(i,j,k)), 1.0) - end forall - - deallocate(tmp) - - end subroutine read_r3 - - !> - !! Read a 1D character array. - ! - subroutine read_c1(ifd, records, varname, pos, n, dst, ierr) - - integer, intent(in) :: ifd - type(r_info), pointer, intent(in) :: records(:) - character(len=*), intent(in) :: varname - integer(kind=mpi_offset_kind), optional, intent(in) :: pos - integer, optional, intent(in) :: n - character(len=*), intent(inout) :: dst - integer, intent(out) :: ierr - - integer(kind=mpi_offset_kind) :: offset - integer :: count - integer :: num - integer :: i - integer, allocatable, dimension(:) :: tmp - - - call io_int_loc(varname, records, offset, count, ierr) - if (ierr .ne. 0) then - return - end if - - if (present(pos)) then - offset = pos - end if - - num = count - - allocate(tmp(num), stat=ierr) - if (ierr .ne. 0) then - write(0,*) 'Unable to allocate a temporary array' - return - end if - tmp = 0 - - if (present(n)) then - if ( n .le. num) then - num = n - end if - end if - call mpi_file_read_at(ifd, offset, tmp, num, & - mpi_integer4, mpi_status_ignore, ierr) - if (ierr .ne. 0) then - write(0,*) 'MPI IO: Unable to read ', varname - return - end if - -! PGI and GNU fortran compilers do not like forall loops over -! character arrays. -! PGI: TPR#19016 -! GNU: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50069 -! -! XLF does not like transfer() with the mold being an array, -! so we use achar() instead. -! -! forall(i=1:num) -! dst(i:i) = transfer(ntohl(tmp(i)), dst) -! end forall - - do i=1,num - dst(i:i) = achar(ntohl(tmp(i))) - end do - - deallocate(tmp) - - end subroutine read_c1 - -end module INITPOST_NMM_BIN_MPIIO_READ diff --git a/sorc/ncep_post.fd/RQSTFLD.f b/sorc/ncep_post.fd/RQSTFLD.f index 1de6eba63..af429aeeb 100644 --- a/sorc/ncep_post.fd/RQSTFLD.f +++ b/sorc/ncep_post.fd/RQSTFLD.f @@ -24,7 +24,7 @@ module RQSTFLD_mod implicit none ! ! increase MXFLD each time you add a new field - INTEGER, PARAMETER :: MXFLD=950,MXLVL=500 + INTEGER, PARAMETER :: MXFLD=950,MXLVL=70 CHARACTER*20 AVBL(MXFLD),FIELD(MXFLD) CHARACTER*50 AVBLGRB2(MXFLD) CHARACTER*6 DATSET @@ -2078,44 +2078,44 @@ module RQSTFLD_mod 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 '/ - DATA IFILV(688),AVBL(688),IQ(688),IS(688),AVBLGRB2(688) & - & /1,'OC SFC MASS CON ',163,001, & - 'organic carbon sfc mass con '/ - DATA IFILV(689),AVBL(689),IQ(689),IS(689),AVBLGRB2(689) & - & /1,'SU SFC MASS CON ',164,001, & - 'sulfate sfc mass con '/ - DATA IFILV(690),AVBL(690),IQ(690),IS(690),AVBLGRB2(690) & - & /1,'INST SU SFC MASS CON',164,001, & - 'instn sulfate sfc mass con '/ - DATA IFILV(691),AVBL(691),IQ(691),IS(691),AVBLGRB2(691) & - & /1,'INST OC SFC MASS CON',164,001, & - 'instn organic carbon sfc mass con '/ - DATA IFILV(692),AVBL(692),IQ(692),IS(692),AVBLGRB2(692) & - & /1,'INST BC SFC MASS CON',164,001, & - 'instn black carbon sfc mass con '/ - DATA IFILV(693),AVBL(693),IQ(693),IS(693),AVBLGRB2(693) & - & /1,'INST DU CR SMASS ',164,001, & - 'instn du coarse mode sfc mass con '/ - DATA IFILV(694),AVBL(694),IQ(694),IS(694),AVBLGRB2(694) & - & /1,'INST DU FN SMASS ',164,001, & - 'instn du fine mode sfc mass con '/ - DATA IFILV(695),AVBL(695),IQ(695),IS(695),AVBLGRB2(695) & - & /1,'INST SS CR SMASS ',164,001, & - 'instn ss coarse mode sfc mass con '/ - DATA IFILV(696),AVBL(696),IQ(696),IS(696),AVBLGRB2(696) & - & /1,'INST SS FN SMASS ',164,001, & - 'instn ss fine mode sfc mass con '/ - DATA IFILV(697),AVBL(697),IQ(697),IS(697),AVBLGRB2(697) & - & /1,'INST AER CR SMASS ',164,001, & - 'instn aer coarse mode sfc mass con'/ - 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 +!#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 '/ +! DATA IFILV(688),AVBL(688),IQ(688),IS(688),AVBLGRB2(688) & +! & /1,'OC SFC MASS CON ',163,001, & +! 'organic carbon sfc mass con '/ +! DATA IFILV(689),AVBL(689),IQ(689),IS(689),AVBLGRB2(689) & +! & /1,'SU SFC MASS CON ',164,001, & +! 'sulfate sfc mass con '/ +! DATA IFILV(690),AVBL(690),IQ(690),IS(690),AVBLGRB2(690) & +! & /1,'INST SU SFC MASS CON',164,001, & +! 'instn sulfate sfc mass con '/ +! DATA IFILV(691),AVBL(691),IQ(691),IS(691),AVBLGRB2(691) & +! & /1,'INST OC SFC MASS CON',164,001, & +! 'instn organic carbon sfc mass con '/ +! DATA IFILV(692),AVBL(692),IQ(692),IS(692),AVBLGRB2(692) & +! & /1,'INST BC SFC MASS CON',164,001, & +! 'instn black carbon sfc mass con '/ +! DATA IFILV(693),AVBL(693),IQ(693),IS(693),AVBLGRB2(693) & +! & /1,'INST DU CR SMASS ',164,001, & +! 'instn du coarse mode sfc mass con '/ +! DATA IFILV(694),AVBL(694),IQ(694),IS(694),AVBLGRB2(694) & +! & /1,'INST DU FN SMASS ',164,001, & +! 'instn du fine mode sfc mass con '/ +! DATA IFILV(695),AVBL(695),IQ(695),IS(695),AVBLGRB2(695) & +! & /1,'INST SS CR SMASS ',164,001, & +! 'instn ss coarse mode sfc mass con '/ +! DATA IFILV(696),AVBL(696),IQ(696),IS(696),AVBLGRB2(696) & +! & /1,'INST SS FN SMASS ',164,001, & +! 'instn ss fine mode sfc mass con '/ +! DATA IFILV(697),AVBL(697),IQ(697),IS(697),AVBLGRB2(697) & +! & /1,'INST AER CR SMASS ',164,001, & +! 'instn aer coarse mode sfc mass con'/ +! 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 ! Reserving Index 601-700 for GOCART