!> @file
!> @brief MPI_FIRST set up message passing info.
!>
!> This routine sets up message passing info.
!>
!> ### Program history log:
!> Date | Programmer | Comments
!> -----|------------|---------
!> 2000-01-06 | Jim Tuccillo | Initial
!> 2001-10-25 | H Chuang     | Modified to process hybrid model output
!> 2002-06-19 | Mike Baldwin | WRF version
!> 2022-11-08 | Kai Wang     | Replace aqfcmaq_on with aqf_on
!>
!> @author Jim Tuccillo IBM @date 2000-01-06
      SUBROUTINE DE_ALLOCATE

!
      use vrbls4d
      use vrbls3d
      use vrbls2d
      use soil
      use masks
      use params_mod
      use ctlblk_mod
      use upp_math, only: ddvdx, ddudy, uuavg
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
!
       implicit none
!
      include 'mpif.h'
!
!
!     deallocate arrays
!
!
!     FROM VRBLS3D
!
      deallocate(u)
      deallocate(v)
      deallocate(t)
! CHUANG ADD POTENTIAL TEMP BECAUSE WRF OUTPUT THETA
!      deallocate(th)   
      deallocate(q)
!      deallocate(w(im,jsta_2l:jend_2u,lp1))
      deallocate(uh)
      deallocate(vh)
      deallocate(wh)
      deallocate(pmid)
      deallocate(pmidv)
      deallocate(pint)
      deallocate(alpint)
      deallocate(zmid)
      deallocate(zint)
!      deallocate(rainw(im,jsta_2l:jend_2u,lm))
      deallocate(q2)
      deallocate(omga)
      deallocate(dpres)
      deallocate(T_ADJ)
      deallocate(ttnd)
      deallocate(rswtt)
      deallocate(rlwtt)
      deallocate(exch_h) 
      deallocate(train)
      deallocate(tcucn)
      deallocate(EL_PBL)
!     MP FIELD   
      deallocate(cwm)
      deallocate(F_ice)
      deallocate(F_rain)
      deallocate(F_RimeF)
      deallocate(QQW)
      deallocate(QRIMEF)
      deallocate(QQI)
      deallocate(QQR)
      deallocate(QQS)
      deallocate(QQG)
      deallocate(QQNW)
      deallocate(QQNI)
      deallocate(QQNR)
      deallocate(QQNWFA)
      deallocate(QQNIFA)
      deallocate(TAOD5503D)
      deallocate(AEXTC55)
      deallocate(EXTCOF55)
      deallocate(QC_BL)
      deallocate(CFR)
      deallocate(CFR_RAW)
      deallocate(DBZ)
      deallocate(DBZR)
      deallocate(DBZI)
      deallocate(DBZC)
      deallocate(mcvg)
      deallocate(NLICE)
! KRS: HWRF addition for thompson reflectivity
! or non-ferrier physics. wrf-derived
      deallocate(REFL_10CM)
!     Wm Lewis: added
      deallocate(NRAIN)
      deallocate(radius_cloud)
      deallocate(radius_ice)
      deallocate(radius_snow)
!GFS FIELD
      deallocate(o3)
      deallocate(o)
      deallocate(o2)
      deallocate(tcucns)
      if(allocated(cd10)) deallocate(cd10)
      if(allocated(ch10)) deallocate(ch10)
! Add GFS d3d fields
      if (d3d_on) then
        deallocate(vdifftt)
!       deallocate(tcucns)
        deallocate(vdiffmois)
        deallocate(dconvmois)
        deallocate(sconvmois)
        deallocate(nradtt)
        deallocate(o3vdiff)
        deallocate(o3prod)
        deallocate(o3tndy)
        deallocate(mwpv)
        deallocate(unknown)
        deallocate(vdiffzacce)
        deallocate(zgdrag)
        deallocate(cnvctummixing)
        deallocate(vdiffmacce)
        deallocate(mgdrag)
        deallocate(cnvctvmmixing)
        deallocate(ncnvctcfrac)
        deallocate(cnvctumflx)
        deallocate(cnvctdmflx)
        deallocate(cnvctdetmflx)
        deallocate(cnvctzgdrag)
        deallocate(cnvctmgdrag)      
      endif
!
!     FROM SOIL
!
      deallocate(smc)
      deallocate(stc)
      deallocate(sh2o)
      deallocate(SLDPTH)
      deallocate(CAPE)
      deallocate(CIN)
      deallocate(IFI_APCP)
      deallocate(RTDPTH)
      deallocate(SLLEVEL)
!
!     FROM VRBLS2D
!
      deallocate(u10)
      deallocate(v10)
      deallocate(tshltr)
      deallocate(qshltr)
      deallocate(mrshltr)
      deallocate(smstav)
      deallocate(ssroff)
      deallocate(bgroff)
      deallocate(vegfrc)
      deallocate(shdmin)
      deallocate(shdmax)
      deallocate(lai)
      deallocate(acsnow)
      deallocate(acgraup)
      deallocate(acfrain)
      deallocate(acsnom)
      deallocate(cmc)
      deallocate(sst)
      deallocate(qz0)
      deallocate(thz0)
      deallocate(uz0)
      deallocate(vz0)
      deallocate(qs)
      deallocate(ths)
      deallocate(sno)
      deallocate(snonc)
      deallocate(snoavg)
      deallocate(psfcavg)
      deallocate(t10m)
      deallocate(t10avg)
      deallocate(akhsavg)
      deallocate(akmsavg)
      deallocate(u10max)
      deallocate(v10max)
      deallocate(u10h)
      deallocate(v10h)
      deallocate(akms)
      deallocate(akhs)
      deallocate(cuprec)
      deallocate(acprec)
      deallocate(ancprc)
      deallocate(cuppt)
      deallocate(tsnow)
      deallocate(qvg)
      deallocate(qv2m)
      deallocate(qvl1)
      deallocate(rswin)
      deallocate(swddni)
      deallocate(swddif)
      deallocate(swdnbc)
      deallocate(swupbc)
      deallocate(swddnic)
      deallocate(swddifc)
      deallocate(swupt)
      deallocate(mean_frp)
      deallocate(ebb)
      deallocate(hwp)
      deallocate(aodtot)
      deallocate(smoke)
      deallocate(fv3dust)
      deallocate(coarsepm)
      deallocate(taod5502d)
      deallocate(aerasy2d)
      deallocate(aerssa2d)
      deallocate(lwp)
      deallocate(iwp)
      deallocate(rlwin)
      deallocate(lwdnbc)
      deallocate(lwupbc)
      deallocate(rlwtoa)
      deallocate(rswtoa)
      deallocate(tg)
      deallocate(sfcshx)
      deallocate(sfclhx)
      deallocate(fis)
      deallocate(t500) 
      deallocate(t700)
      deallocate(z500)
      deallocate(z700)
      deallocate(teql)
      deallocate(ieql)
      deallocate(cfracl)
      deallocate(cfracm)
      deallocate(cfrach)
      deallocate(acfrst)
      deallocate(acfrcv)
      deallocate(hbot)
      deallocate(htop)
      deallocate(aswin)
      deallocate(alwin)
      deallocate(aswout)
      deallocate(alwout)
      deallocate(aswtoa)
      deallocate(alwtoa)
      deallocate(czen)
      deallocate(czmean)
      deallocate(sigt4)
      deallocate(rswout)
      deallocate(radot)
      deallocate(ncfrst)  ! real
      deallocate(ncfrcv)  ! real
      deallocate(smstot)
      deallocate(pctsno)
      deallocate(pshltr)
      deallocate(th10)
      deallocate(q10)
      deallocate(sr)
      deallocate(prec)
      deallocate(subshx)
      deallocate(snopcx)
      deallocate(sfcuvx)
      deallocate(sfcevp)
      deallocate(potevp)
      deallocate(z0)
      deallocate(ustar)
      deallocate(pblh)
      deallocate(pblhgust)
      deallocate(twbs)
      deallocate(qwbs)
      deallocate(sfcexc)
      deallocate(grnflx)
      deallocate(soiltb)
      deallocate(z1000)
      deallocate(slp)
      deallocate(pslp)
      deallocate(f)
      deallocate(albedo)
      deallocate(albase)
      deallocate(cldfra)
      deallocate(cprate)
      deallocate(cnvcfr)
      deallocate(ivgtyp)
      deallocate(isltyp)
      deallocate(hbotd)
      deallocate(htopd)
      deallocate(hbots)
      deallocate(htops)
      deallocate(cldefi)
      deallocate(islope)
      deallocate(si)
      deallocate(lspa)
      deallocate(rswinc)
      deallocate(vis)
      deallocate(pd)
      deallocate(mxsnal)
! add GFS fields
      deallocate(sfcux)
      deallocate(sfcvx)
      deallocate(sfcuxi)
      deallocate(sfcvxi)
      deallocate(avgalbedo)
      deallocate(avgcprate)
      deallocate(avgprec)
      deallocate(avgprec_cont)
      deallocate(avgcprate_cont)
      deallocate(ptop)
      deallocate(pbot)
      deallocate(avgcfrach)
      deallocate(avgcfracm)
      deallocate(avgcfracl)
      deallocate(avgtcdc)
      deallocate(auvbin)
      deallocate(auvbinc)
      deallocate(ptopl)
      deallocate(pbotl)
      deallocate(Ttopl)
      deallocate(ptopm)
      deallocate(pbotm)
      deallocate(Ttopm)
      deallocate(ptoph)
      deallocate(pboth)
      deallocate(Ttoph)
      deallocate(sfcugs)
      deallocate(sfcvgs)
      deallocate(pblcfr)
      deallocate(cldwork)
      deallocate(gtaux)
      deallocate(gtauy)
      deallocate(mdltaux)
      deallocate(mdltauy)
      deallocate(runoff)
      deallocate(maxtshltr)
      deallocate(mintshltr)
      deallocate(maxrhshltr)
      deallocate(minrhshltr)
      deallocate(maxqshltr)
      deallocate(minqshltr)
      deallocate(mixht)
      deallocate(epsr)
      deallocate(dzice)
      deallocate(alwinc)
      deallocate(alwoutc)
      deallocate(alwtoac)
      deallocate(aswinc)
      deallocate(aswoutc)
      deallocate(aswtoac)
      deallocate(aswintoa)
      deallocate(smcwlt)
      deallocate(suntime)
      deallocate(fieldcapa)
      deallocate(avisbeamswin)
      deallocate(avisdiffswin)
      deallocate(airbeamswin)
      deallocate(airdiffswin)
      deallocate(snowfall)
      deallocate(acond)
      deallocate(edir)
      deallocate(ecan)
      deallocate(etrans)
      deallocate(esnow)
      deallocate(avgedir)
      deallocate(avgecan)
      deallocate(avgetrans)
      deallocate(avgesnow)
      deallocate(avgpotevp)
      deallocate(aod550)
      deallocate(ti)
      deallocate(du_aod550)
      deallocate(ss_aod550)
      deallocate(su_aod550)
      deallocate(bc_aod550)
      deallocate(oc_aod550)
      deallocate(landfrac)
      deallocate(paha)
      deallocate(pahi)
      deallocate(tecan)
      deallocate(tetran)
      deallocate(tedir)
      deallocate(twa)
      deallocate(fdnsst)
      deallocate(pwat)
! GSD
      deallocate(rainc_bucket)
      deallocate(rainc_bucket1)
      deallocate(rainnc_bucket)
      deallocate(rainnc_bucket1)
      deallocate(pcp_bucket)
      deallocate(pcp_bucket1)
      deallocate(snow_bucket)
      deallocate(snow_bucket1)
      deallocate(graup_bucket)
      deallocate(graup_bucket1)
      deallocate(frzrn_bucket)
      deallocate(snow_acm)
      deallocate(snow_bkt)
      deallocate(qrmax)
      deallocate(tmax)
      deallocate(snownc)
      deallocate(graupelnc)
! SRD
      deallocate(wspd10max)
      deallocate(w_up_max)
      deallocate(w_dn_max)
      deallocate(w_mean)
      deallocate(refd_max)
      deallocate(prate_max)
      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(hail_maxhailcast)
      deallocate(grpl_max)
      deallocate(up_heli)
      deallocate(up_heli16)
      deallocate(ltg1_max)
      deallocate(ltg2_max)
      deallocate(ltg3_max)
      deallocate(nci_ltg)
      deallocate(nca_ltg)
      deallocate(nci_wq)
      deallocate(nca_wq)
      deallocate(nci_refd)
      deallocate(nca_refd)

! CRA
      deallocate(REF_10CM)
      deallocate(REFC_10CM)
      deallocate(REF1KM_10CM)
      deallocate(REF4KM_10CM)
! CRA
      deallocate(U10mean)
      deallocate(V10mean)
      deallocate(SPDUV10mean)
      deallocate(SWRADmean)
      deallocate(SWNORMmean)
      deallocate(SNFDEN)
      deallocate(SNDEPAC)

!
!     FROM MASKS
!
      deallocate(hbm2)
      deallocate(sm)
      deallocate(sice)
      deallocate(lmh)  ! real
      deallocate(lmv)  ! real
      deallocate(gdlat)
      deallocate(gdlon)
      deallocate(dx)
      deallocate(dy)
      deallocate(htm)
      deallocate(vtm)

! add GFIP ICING
      deallocate(icing_gfip)
      deallocate(icing_gfis)

! add GTG turbulence
      deallocate(catedr)
      deallocate(mwt)
      deallocate(gtg)

!
      if (gocart_on .or. nasa_on) then
! Deallocate GOCART fields
! vrbls4d
        deallocate(dust)
        deallocate(salt)
        deallocate(soot)
        deallocate(waso)
        deallocate(suso)
      if (nasa_on) then
        deallocate(no3)
        deallocate(nh4)
      endif
        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)
        deallocate(suwt)
        deallocate(ocem)
        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(rhomid)
! vrbls2d
        deallocate(dusmass)
        deallocate(ducmass)
        deallocate(dusmass25)
        deallocate(ducmass25)
        deallocate(susmass)
        deallocate(sucmass)
        deallocate(susmass25)
        deallocate(sucmass25)
        deallocate(ocsmass)
        deallocate(occmass)
        deallocate(ocsmass25)
        deallocate(occmass25)
        deallocate(bcsmass)
        deallocate(bccmass)
        deallocate(bcsmass25)
        deallocate(bccmass25)
        deallocate(sssmass)
        deallocate(sscmass)
        deallocate(sssmass25)
        deallocate(sscmass25)
        deallocate(dustcb)
        deallocate(occb)
        deallocate(bccb)
        deallocate(sulfcb)
        deallocate(pp25cb)
        deallocate(pp10cb)
        deallocate(sscb)
        if (nasa_on) then
        deallocate(no3cb)
        deallocate(nh4cb)
        endif
        deallocate(dustallcb)
        deallocate(ssallcb)
        deallocate(dustpm)
	deallocate(dustpm10)
        deallocate(sspm)
	deallocate(maod)
      endif
!
! HWRF RRTMG output 
      deallocate(acswupt)
      deallocate(swdnt)
      deallocate(acswdnt)
! UPP_MATH MODULE DIFFERENTIAL EQUATIONS
      deallocate(ddvdx)
      deallocate(ddudy)
      deallocate(uuavg)

! AQF
      if (aqf_on) then
        deallocate(avgozcon)
        deallocate(avgpmtf)
        deallocate(aqm_aod550)
      endif

      end