PROGRAM arpsplt,488
!
!
!##################################################################
!##################################################################
!######                                                      ######
!######                PROGRAM ARPSPLT                       ######
!######                                                      ######
!######                     Developed by                     ######
!######     Center for Analysis and Prediction of Storms     ######
!######                University of Oklahoma                ######
!######                                                      ######
!##################################################################
!##################################################################
!
!
!-----------------------------------------------------------------------
!
!  This is a graphic analysis/plotting program for display ARPS
!  history format data set.
!
!  It is based on Ming Xue's graphics package ZXPLOT, which is an
!  independent package from the ARPS code. The object code library
!  of ZXPLOT for most platforms are freely available from
!  ftp://ftp.caps.ou.edu/pub/ZXPLOT3. Documentation and other info
!  on ZXPLOT can be found at http://www.caps.ou.edu/ZXPLOT.
!
!  ZXPLOT can be interfaced with NCAR graphics to produce metafile
!  output consistent with NCAR graphics viewing facilities
!  or linked to the Postscript driver (pure fortran program) to
!  produce Postscript output directly (i.e., no NCAR graphics needed).
!
!  Documentation on the control parameters for plotting can be found
!  in input/arpsplt.input.
!
!-----------------------------------------------------------------------
!
!  AUTHOR: Ming Xue, CAPS/OU.
!    2/19/1992.
!
!  MODIFICATION HISTORY:
!    See HISTORY file.
!
!-----------------------------------------------------------------------
!
!  DATA ARRAYS READ IN:
!
!    x        x-coordinate of grid points in physical/comp. space (m)
!    y        y-coordinate of grid points in physical/comp. space (m)
!    z        z-coordinate of grid points in computational space (km)
!    zp       z-coordinate of grid points in computational space (m)
!
!    uprt     x-component of perturbation velocity (m/s)
!    vprt     y-component of perturbation velocity (m/s)
!    wprt     vertical component of perturbation velocity in Cartesian
!             coordinates (m/s).
!
!    ptprt    perturbation potential temperature (K)
!    pprt     perturbation pressure (Pascal)
!
!    qvprt    perturbation water vapor mixing ratio (kg/kg)
!    qc       Cloud water mixing ratio (kg/kg)
!    qr       Rainwater mixing ratio (kg/kg)
!    qi       Cloud ice mixing ratio (kg/kg)
!    qs       Snow mixing ratio (kg/kg)
!    qh       Hail mixing ratio (kg/kg)
!    tke      Turbulent Kinetic Energy ((m/s)**2)
!    kmh      Horizontal turb. mixing coef. for momentum ( m**2/s )
!    kmv      Vertical turb. mixing coef. for momentum ( m**2/s )
!
!    ubar     Base state x-velocity component (m/s)
!    vbar     Base state y-velocity component (m/s)
!    wbar     Base state z-velocity component (m/s)
!    ptbar    Base state potential temperature (K)
!    pbar     Base state pressure (Pascal)
!    rhobar   Base state air density (kg/m**3)
!    qvbar    Base state water vapor mixing ratio (kg/kg)
!
!    soiltyp  Soil type
!    stypfrct Soil type fraction
!    vegtyp   Vegetation type
!    lai      Leaf Area Index
!    roufns   Surface roughness
!    veg      Vegetation fraction
!
!    tsoil    soil temperature (K)
!    qsoil    soil moisture 
!    wetcanp  Canopy water amount
!    raing    Grid supersaturation rain (mm)
!    rainc    Cumulus convective rain(mm)
!    raint    Total rain (rainc+raing)(mm)
!
!    radfrc   Radiation forcing (K/s)
!    radsw    Solar radiation reaching the surface
!    rnflx    Net radiation flux absorbed by surface
!    radswnet Net shortwave radiation, SWin - SWout
!    radlwin  Incoming longwave radiation
!
!    usflx    Surface flux of u-momentum (kg/(m*s**2))
!    vsflx    Surface flux of v-momentum (kg/(m*s**2))
!    ptsflx   Surface heat flux (K*kg/(m**2 * s ))
!    qvsflx   Surface moisture flux of (kg/(m**2 * s))
!
!    psl      Sea level pressure (mb)
!
!  CALCULATED DATA ARRAYS:
!
!    u        x-component of velocity (m/s)
!    v        y-component of velocity (m/s)
!    w        z-component of velocity (m/s)
!    pt       potential temperature (K)
!    qv       water vapor mixing ratio (kg/kg)
!    td       dew-point temperature (C)
!    cape     CAPE  (J/kg)
!    cin      CIN   (J/kg)
!    thet     theta_E (K)
!    heli     helicity (m2/s2)
!    srlfl    storm-relative low-level flow (0-2km AGL)
!    srmfl    storm-relative mid-level flow (2-9km AGL)
!    shr37    7km - 3km wind shear
!    ustrm    Estimated storm motion (Bob Johns)
!    vstrm    Estimated storm motion (Bob Johns)
!    capst    CAPE strength
!    blcon    boundary layer convergence
!    ct       convective temperature
!
!  WORK ARRAYS:
!
!    tem1     Temporary work array.
!    tem2     Temporary work array.
!    tem3     Temporary work array.
!    tem4     Temporary work array.
!    tem5     Temporary work array.
!    tem6     Temporary work array.
!    tem7     Temporary work array.
!    tem8     Temporary work array.
!    tem9     Temporary work array.
!
!  (These arrays are defined and used locally (i.e. inside this
!   subroutine), they may also be passed into routines called by
!   this one. Exiting the call to this subroutine, these temporary
!   work arrays may be used for other purposes, and therefore their
!   contents may be overwritten. Please examine the usage of work
!   arrays before you make any change to the code.)
!
!-----------------------------------------------------------------------
!
!  Arrays for plots on constant pressure levels
!
!-----------------------------------------------------------------------
!
!   tz       Temperature (K) on computational grids
!   t700     Temperature (K) on 700mb pressure grids
!   zps3d    negative log pressure(Pascal) at ARPS grid points
!   algpzc   -log(pressure) at scalar grid points
!
!-----------------------------------------------------------------------
!
!  Variable Declarations:
!
!-----------------------------------------------------------------------
!
  IMPLICIT NONE

  INTEGER :: nx,ny,nz          ! Grid dimensions.
  INTEGER :: nzprofc ! the maximum vertical index in height (zpc/zpsoilc)
                 ! and variables to be profiled when calling vprofil 
                 ! subroutine. 06/10/2002, Zuwen He
                 ! In the atmosphere model, the vertical index is 
                 ! typically nz-1, while in the soil model, it's nzsoil.  

  INTEGER :: nzsoil            ! levels of soil model 
  INTEGER :: nstyps            ! Maximum number of soil types.

  INTEGER :: hinfmt
  INTEGER :: nhisfile_max,nhisfile
  PARAMETER (nhisfile_max=200)
  CHARACTER (LEN=256) :: grdbasfn
  CHARACTER (LEN=256) :: hisfile(nhisfile_max)

  COMMON /init2_hisf/ hinfmt,nhisfile, grdbasfn, hisfile
  INTEGER :: first_frame
  COMMON /frstfrm/ first_frame

  INTEGER :: lengbf,nf,lenfil

  INTEGER, PARAMETER :: max_dim=200
!
!-----------------------------------------------------------------------
!
!  Include files:
!
!-----------------------------------------------------------------------
!
  INCLUDE 'indtflg.inc'
  INCLUDE 'globcst.inc'
  INCLUDE 'grid.inc'
  INCLUDE 'phycst.inc'
  INCLUDE 'arpsplt.inc'
  INCLUDE 'alloc.inc'

  INCLUDE 'mp.inc'
!
!-----------------------------------------------------------------------
!
!  Arrays to be read in:
!
!-----------------------------------------------------------------------
!
  REAL, DIMENSION(:), POINTER :: x   ! The x-coord. of the physical and
                                     ! computational grid. Defined at u-point.
  REAL, DIMENSION(:), POINTER :: y   ! The y-coord. of the physical and
                                     ! computational grid. Defined at v-point.
  REAL, DIMENSION(:), POINTER :: z   ! The z-coord. of the computational grid.
                                     ! Defined at w-point on the staggered grid.
  REAL, DIMENSION(:,:,:), POINTER :: zp     ! The physical height coordinate defined at
                                            ! w-point of the staggered grid.
  REAL, DIMENSION(:,:,:), POINTER :: zpsoil ! The physical height coordinate defined at
                                            ! w-point of the staggered grid for soil model.

  REAL, DIMENSION(:,:,:), POINTER :: uprt   ! Perturbation u-velocity (m/s)
  REAL, DIMENSION(:,:,:), POINTER :: vprt   ! Perturbation v-velocity (m/s)
  REAL, DIMENSION(:,:,:), POINTER :: wprt   ! Perturbation w-velocity (m/s)
  REAL, DIMENSION(:,:,:), POINTER :: ptprt  ! Perturbation potential temperature
                                            ! from that of base state atmosphere (K)
  REAL, DIMENSION(:,:,:), POINTER :: pprt   ! Perturbation pressure from that
                                            ! of base state atmosphere (Pascal)
  REAL, DIMENSION(:,:,:), POINTER :: qvprt
  REAL, DIMENSION(:,:,:), POINTER :: qv     ! Water vapor specific humidity (kg/kg)
  REAL, DIMENSION(:,:,:), POINTER :: qc     ! Cloud water mixing ratio (kg/kg)
  REAL, DIMENSION(:,:,:), POINTER :: qr     ! Rain water mixing ratio (kg/kg)
  REAL, DIMENSION(:,:,:), POINTER :: qi     ! Cloud ice mixing ratio (kg/kg)
  REAL, DIMENSION(:,:,:), POINTER :: qs     ! Snow mixing ratio (kg/kg)
  REAL, DIMENSION(:,:,:), POINTER :: qh     ! Hail mixing ratio (kg/kg)
  REAL, DIMENSION(:,:,:), POINTER :: tke    ! Turbulent Kinetic Energy ((m/s)**2)
  REAL, DIMENSION(:,:,:), POINTER :: kmh    ! Horizontal turb. mixing coef. for
                                            ! momentum. ( m**2/s )
  REAL, DIMENSION(:,:,:), POINTER :: kmv    ! Vertical turb. mixing coef. for
                                            ! momentum. ( m**2/s )
  REAL, DIMENSION(:,:,:), POINTER :: ubar   ! Base state u-velocity (m/s)
  REAL, DIMENSION(:,:,:), POINTER :: vbar   ! Base state v-velocity (m/s)
  REAL, DIMENSION(:,:,:), POINTER :: wbar   ! Base state w-velocity (m/s)
  REAL, DIMENSION(:,:,:), POINTER :: ptbar  ! Base state potential temperature (K)
  REAL, DIMENSION(:,:,:), POINTER :: pbar   ! Base state pressure (Pascal)
  REAL, DIMENSION(:,:,:), POINTER :: rhobar ! Base state density rhobar
  REAL, DIMENSION(:,:,:), POINTER :: qvbar  ! Base state water vapor specific humidity
                                            ! (kg/kg)

  INTEGER, DIMENSION(:,:,:), POINTER :: soiltyp ! Soil type
  INTEGER, DIMENSION(:,:),   POINTER :: vegtyp  ! Vegetation type
  REAL, DIMENSION(:,:,:),  POINTER :: stypfrct  ! Soil type fraction
  REAL, DIMENSION(:,:),    POINTER :: lai       ! Leaf Area Index
  REAL, DIMENSION(:,:),    POINTER :: roufns   ! Surface roughness
  REAL, DIMENSION(:,:),    POINTER :: veg      ! Vegetation fraction

  REAL, DIMENSION(:,:,:,:), POINTER :: tsoil   ! soil temperature (K)
  REAL, DIMENSION(:,:,:,:), POINTER :: qsoil   ! soil moisture
  REAL, DIMENSION(:,:,:), POINTER :: wetcanp   ! Canopy water amount
  REAL, DIMENSION(:,:), POINTER :: snowdpth  ! Snow depth (m)
  REAL, DIMENSION(:,:), POINTER :: raing     ! Grid supersaturation rain
  REAL, DIMENSION(:,:), POINTER :: rainc     ! Cumulus convective rain
  REAL, DIMENSION(:,:), POINTER :: raint     ! Total rain (rainc+raing)
  REAL, DIMENSION(:,:,:), POINTER :: prcrate ! precipitation rate (kg/(m**2*s))
                                             ! prcrate(1,1,1) = total precip. rate
                                             ! prcrate(1,1,2) = grid scale precip. rate
                                             ! prcrate(1,1,3) = cumulus precip. rate
                                             ! prcrate(1,1,4) = microphysics precip. rate

  REAL, DIMENSION(:,:,:), POINTER :: radfrc  ! Radiation forcing (K/s)
  REAL, DIMENSION(:,:), POINTER :: radsw     ! Solar radiation reaching the surface
  REAL, DIMENSION(:,:), POINTER :: rnflx     ! Net radiation flux absorbed by surface
  REAL, DIMENSION(:,:), POINTER :: radswnet  ! Net shortwave radiation
  REAL, DIMENSION(:,:), POINTER :: radlwin   ! Incoming longwave radiation


  REAL, DIMENSION(:,:), POINTER :: usflx     ! Surface flux of u-momentum (kg/(m*s**2))
  REAL, DIMENSION(:,:), POINTER :: vsflx     ! Surface flux of v-momentum (kg/(m*s**2))
  REAL, DIMENSION(:,:), POINTER :: ptsflx    ! Surface heat flux (K*kg/(m*s**2))
  REAL, DIMENSION(:,:), POINTER :: qvsflx    ! Surface moisture flux (kg/(m**2*s))
!
!-----------------------------------------------------------------------
!
!  Arrays derived from the read-in arrays
!
!-----------------------------------------------------------------------
!
  REAL, ALLOCATABLE :: u     (:,:,:)        ! Total u-velocity (m/s)
  REAL, ALLOCATABLE :: v     (:,:,:)        ! Total v-velocity (m/s)
  REAL, ALLOCATABLE :: w     (:,:,:)        ! Total w-velocity (m/s)
  REAL, ALLOCATABLE :: pt    (:,:,:)  ! Total poten

  REAL, ALLOCATABLE :: xc   (:,:,:)   ! x-coor of scalar point (km)
  REAL, ALLOCATABLE :: yc   (:,:,:)   ! y-coor of scalar point (km)
  REAL, ALLOCATABLE :: zc   (:,:,:)   ! z-coor of scalar point in computational
                                      ! space (km)
  REAL, ALLOCATABLE :: zpc  (:,:,:)   ! z-coor of scalar point in physical
                                      ! space (km)
  REAL, ALLOCATABLE :: zpsoilc (:,:,:) ! zsoil-coor of scalar point in physical
                                       ! space (m)

  REAL, ALLOCATABLE :: acc_raing(:,:,:) ! Accumulated grid supersaturation rain
                                        ! between 2 successive time levels
  REAL, ALLOCATABLE :: acc_rainc(:,:,:) ! Accumulated cumulus convective rain
                                        ! between 2 successive time levels
  REAL, ALLOCATABLE :: acc_raint(:,:,:) ! Accumulated rain (rainc+raing)
                                        ! between 2 successive time levels

  REAL, ALLOCATABLE :: hterain(:,:)   ! The height of the terrain.

  REAL, ALLOCATABLE :: psl  (:,:)     ! Sea level pressure (mb)
  REAL, ALLOCATABLE :: td   (:,:,:)   ! dew-point temperature (C)
!
!-----------------------------------------------------------------------
!
!  Arrays for plots on constant pressure levels
!
!-----------------------------------------------------------------------
!
  REAL, ALLOCATABLE :: tz  (:,:,:)    ! Temperature (K) on computational grids
  REAL, ALLOCATABLE :: t700  (:,:)    ! Temperature (K) on 700mb pressure grids

  REAL, ALLOCATABLE :: algpzc(:,:,:)  ! -log(pressure) at scalar grid points
  REAL, ALLOCATABLE :: zps3d(:,:,:)   !
  REAL, ALLOCATABLE :: zpsoils3d(:,:,:)   !

!-----------------------------------------------------------------------
!
!  Array for CAPE , CIN
!
!-----------------------------------------------------------------------
!
  REAL, ALLOCATABLE :: wrk1(:),wrk2(:),wrk3(:),wrk4(:),wrk5(:),wrk6(:)
  REAL, ALLOCATABLE :: wrk7(:),wrk8(:),wrk9(:),wrk10(:),wrk11(:),wrk12(:)

  REAL, ALLOCATABLE :: lcl(:,:)    ! The lifting condensation level
  REAL, ALLOCATABLE :: lfc(:,:)    ! Level of free convection
  REAL, ALLOCATABLE :: el(:,:)     ! Equilibrium level
  REAL, ALLOCATABLE :: twdf(:,:)   ! Max wet-bulb potential temperature difference
  REAL, ALLOCATABLE :: mbe(:,:)    ! Moist Convective Potential Energy
                                   !   (MCAPE, includes water loading)

  REAL, ALLOCATABLE :: li(:,:)     ! Lifted Index (K)
  REAL, ALLOCATABLE :: cape(:,:)   ! CAPE  (J/kg)
  REAL, ALLOCATABLE :: cin(:,:)    ! CIN   (J/kg)
  REAL, ALLOCATABLE :: thet(:,:)   ! theta_E (K)
  REAL, ALLOCATABLE :: heli(:,:)   ! helicity
  REAL, ALLOCATABLE :: brn(:,:)    ! Bulk Richardson Number (Weisman and Klemp)
  REAL, ALLOCATABLE :: brnu(:,:)   ! Shear parameter of BRN, "U-squared"
  REAL, ALLOCATABLE :: srlfl(:,:)  ! storm-relative low-level flow (0-2km AGL)
  REAL, ALLOCATABLE :: srmfl(:,:)  ! storm-relative mid-level flow (2-9km AGL)
  REAL, ALLOCATABLE :: shr37(:,:)  ! 7km - 3km wind shear
  REAL, ALLOCATABLE :: ustrm(:,:)  ! Estimated storm motion (Bob Johns)
  REAL, ALLOCATABLE :: vstrm(:,:)  ! Estimated storm motion (Bob Johns)

  REAL, ALLOCATABLE :: capst(:,:)  ! cap strength
  REAL, ALLOCATABLE :: blcon(:,:)  ! boundary llayer convergence
  REAL, ALLOCATABLE :: ct(:,:)     ! convective temperature

  REAL, ALLOCATABLE :: sinlat(:,:) ! Sin of latitude at each grid point

  REAL, ALLOCATABLE :: xs(:),ys(:)

  REAL :: dxkm, dykm, dzkm
  REAL :: dzsoilcm         ! Zuwen He, 05/31/2002 in cm. 
  REAL :: alttostpr
!
!-----------------------------------------------------------------------
!
!  Temporary work arrays for general use
!
!-----------------------------------------------------------------------
!
  REAL, ALLOCATABLE :: tem1(:,:,:)
  REAL, ALLOCATABLE :: tem2(:,:,:)
  REAL, ALLOCATABLE :: tem3(:,:,:)
  REAL, ALLOCATABLE :: tem4(:,:,:)
  REAL, ALLOCATABLE :: tem5(:,:,:)
  REAL, ALLOCATABLE :: tem6(:,:,:)
  REAL, ALLOCATABLE :: tem7(:,:,:)
  REAL, ALLOCATABLE :: tem8(:,:,:)
  REAL, ALLOCATABLE :: tem9(:,:,:)
!
!-----------------------------------------------------------------------
!
!  Work arrays used by profile plotting.
!
!-----------------------------------------------------------------------
!
  REAL :: xprof(max_dim)
  REAL :: yprof(max_dim)
!
!-----------------------------------------------------------------------
!
!  Work arrays to be used in interpolation subroutines
!
!-----------------------------------------------------------------------
!
  REAL, ALLOCATABLE :: b1(:,:),b2(:,:)
  REAL, ALLOCATABLE :: u1(:,:),v1(:,:)
  REAL, ALLOCATABLE :: u2(:,:),v2(:,:),w2(:,:),zs2(:,:)
  REAL, ALLOCATABLE :: xp(:),yp(:)

!
!-----------------------------------------------------------------------
!
!  Some universal constants
!
!-----------------------------------------------------------------------
!
  REAL            :: t00,p00

  REAL, PARAMETER :: kappa=287.053/cp,       &
                     gamma=6.5,              & ! 6.5 K/km
                     ex1=0.1903643,          & ! R*gamma/g
                     ex2=5.2558774,          & ! g/R/gamma
                     mbtopa=100.

!-----------------------------------------------------------------------
!
!  Plotting control parameters entered by user
!
!-----------------------------------------------------------------------
!
  INTEGER :: nchin  ! input file unit number
  INTEGER :: n, iorig

  INTEGER :: vtrplt, vtpplt, vagplt,vtrstrm,vtpstrm, xuvplt, strmplt
  INTEGER :: uplot, vplot, wplot, ptplot, pplot, hplot, tplot, vhplot,  &
             vsplot
  INTEGER :: qvplot,qcplot,qrplot,qiplot,qsplot,qhplot,kmhplt,          &
             kmvplt,tkeplt,rhplot,rfplot,pteplt,tdplot,qwplot,          &
             rfcplt,qtplot, rhiplot
  INTEGER :: rfopt
  INTEGER :: upplot,vpplot,wpplot,ptpplt,ppplot,qvpplt,vorpplt,divpplt
  INTEGER :: divqplt,gricplt, avorplt
  INTEGER :: viqcplt,viqrplt,viqiplt,viqhplt,viqsplt,vilplt,viiplt,     &
             vicplt, vitplt, pwplt,tprplt, gprplt, cprplt

!
!-----------------------------------------------------------------------
!
!  Contour intervals 
! 
!----------------------------------------------------------------------- 
! 
  REAL :: vtrunit, vtpunit, vagunit,xuvunit, strmunit
  REAL :: uinc, vinc, winc, ptinc, pinc, hinc, tinc, vhinc,vsinc
  REAL :: qvinc,qcinc,qrinc,qiinc,qsinc,qhinc,qwinc,qtinc
  REAL :: kmhinc,kmvinc,tkeinc,rhinc,rfinc,pteinc,tdinc,rfcinc, rhiinc
  REAL :: upinc,vpinc,wpinc,ptpinc,ppinc,qvpinc,vorpinc,divpinc,divqinc
  REAL :: gricinc,avorinc
  REAL :: viqcinc,viqrinc,viqiinc,viqhinc,viqsinc,vilinc,viiinc,vicinc
  REAL :: vitinc, pwinc,tprinc, gprinc, cprinc

!
!-----------------------------------------------------------------------
!
!  Limited variable minimum and maximum for color contour shade
!
!-----------------------------------------------------------------------
!
  REAL :: wcpminc, wcpmaxc, trnminc, trnmaxc
  REAL :: raincminc, raincmaxc, raingminc, raingmaxc,                   &
          raintminc,raintmaxc
  REAL :: rainicminc, rainicmaxc, rainigminc, rainigmaxc,               &
          rainitminc,rainitmaxc

  REAL :: capeminc, capemaxc, cinminc, cinmaxc, thetminc, thetmaxc,     &
          heliminc, helimaxc, capsminc, capsmaxc, blcominc, blcomaxc,   &
          ctcminc, ctcmaxc
  REAL :: brnminc, brnmaxc, bruminc, brumaxc, srlminc, srlmaxc,         &
          srmminc, srmmaxc, liminc, limaxc
  REAL :: uminc, umaxc, vminc, vmaxc, wminc, wmaxc,ptminc, ptmaxc
  REAL :: vhminc, vhmaxc,vsminc, vsmaxc
  REAL :: pminc, pmaxc, qvminc, qvmaxc, qcminc, qcmaxc
  REAL :: qrminc, qrmaxc, qiminc, qimaxc, qsminc, qsmaxc
  REAL :: qwminc, qwmaxc, qtminc, qtmaxc
  REAL :: qhminc, qhmaxc, rhminc, rhmaxc, rhiminc, rhimaxc
  REAL :: kmhminc, kmhmaxc,kmvminc, kmvmaxc,tkeminc, tkemaxc
  REAL :: rfminc, rfmaxc, pteminc, ptemaxc, upminc, upmaxc
  REAL :: rfcminc, rfcmaxc
  REAL :: vpminc, vpmaxc, wpminc, wpmaxc, ptpminc, ptpmaxc
  REAL :: ppminc, ppmaxc, qvpminc, qvpmaxc, vorpminc, vorpmaxc
  REAL :: divpminc, divpmaxc, divqminc, divqmaxc
  REAL :: gricminc, gricmaxc,avorminc, avormaxc
  REAL :: hminc, hmaxc, tminc, tmaxc,pslmaxc,pslminc
  REAL :: tdminc, tdmaxc
  REAL :: soiltpminc,soiltpmaxc,vegtpminc,vegtpmaxc,laiminc,laimaxc,    &
          rouminc,roumaxc,vegminc,vegmaxc,snowdminc,snowdmaxc
  REAL :: viqcminc,viqrminc,viqiminc,viqhminc,viqsminc,vilminc,viiminc, &
          vicminc, vitminc, pwminc, tprminc, gprminc, cprminc
  REAL :: viqcmaxc,viqrmaxc,viqimaxc,viqhmaxc,viqsmaxc,vilmaxc,viimaxc, &
          vicmaxc, vitmaxc, pwmaxc, tprmaxc, gprmaxc, cprmaxc

!-----------------------------------------------------------------------
!
!  Overlay control parameters
!
!-----------------------------------------------------------------------
!
  INTEGER :: vtrovr,vtpovr,vagovr,vtrstmovr,vtpstmovr,xuvovr,strmovr
  INTEGER :: uovr , vovr , wovr , ptovr , povr, hovr, tovr,vhovr,vsovr
  INTEGER :: qvovr ,qcovr ,qrovr ,qiovr ,qsovr ,qhovr ,kmhovr ,         &
             kmvovr,tkeovr,rhovr ,rfovr ,pteovr,tdovr, qwovr, qtovr,    &
             rfcovr, rhiovr
  INTEGER :: upovr ,vpovr ,wpovr ,ptpovr,ppovr ,qvpovr,vorpovr,divpovr
  INTEGER :: trnovr,wcpovr,racovr,ragovr,   &
             ratovr,pslovr,capovr,cinovr,theovr,helovr,brnovr,brnuovr,  &
             srlfovr,srmfovr,liovr,capsovr,blcoovr,ctcovr
  INTEGER :: raicovr,raigovr,raitovr
  INTEGER :: divqovr,gricovr,avorovr
  INTEGER :: styovr,vtyovr,laiovr,rouovr,vegovr,snowdovr
  INTEGER :: viqcovr,viqrovr,viqiovr,viqhovr,viqsovr,vilovr,viiovr,     &
             vicovr, vitovr, pwovr, tprovr, gprovr, cprovr
!
!-----------------------------------------------------------------------
!
!  highlighting frequency for contour parameters
!
!-----------------------------------------------------------------------
!
  INTEGER :: uhlf , vhlf , whlf , pthlf , phlf, hhlf, thlf,vhhlf,vshlf
  INTEGER :: qvhlf ,qchlf ,qrhlf ,qihlf ,qshlf ,qhhlf ,kmhhlf ,         &
             kmvhlf,tkehlf,rhhlf ,rfhlf ,ptehlf,tdhlf, qwhlf, qthlf,    &
             rfchlf, rhihlf
  INTEGER :: uphlf ,vphlf ,wphlf ,ptphlf,pphlf ,qvphlf,vorphlf,divphlf
  INTEGER :: trnhlf,wcphlf,rachlf,raghlf,                               &
             rathlf,pslhlf,caphlf,cinhlf,thehlf,helhlf,brnhlf,brnuhlf,  &
             srlfhlf,srmfhlf,lihlf,capshlf,blcohlf,ctchlf
  INTEGER :: divqhlf,grichlf,avorhlf
  INTEGER :: styhlf,vtyhlf,laihlf,rouhlf,veghlf,snowdhlf
  INTEGER :: viqchlf,viqrhlf,viqihlf,viqhhlf,viqshlf,vilhlf,viihlf,     &
             vichlf, vithlf, pwhlf,tprhlf, gprhlf, cprhlf
  INTEGER :: raichlf,raighlf,raithlf

!
!-----------------------------------------------------------------------
!
!  define the attributes of zero contour to be plotted parameters
!
!-----------------------------------------------------------------------
!
  INTEGER :: uzro , vzro , wzro , ptzro , pzro, hzro, tzro,vhzro,vszro
  INTEGER :: qvzro ,qczro ,qrzro ,qizro ,qszro ,qhzro ,kmhzro ,         &
             kmvzro,tkezro,rhzro ,rfzro ,ptezro,tdzro, qwzro, qtzro,    &
             rfczro, rhizro
  INTEGER :: upzro ,vpzro ,wpzro ,ptpzro,ppzro ,qvpzro,vorpzro,divpzro
  INTEGER :: trnzro,wcpzro,raczro,ragzro,                               &
             ratzro,pslzro,capzro,cinzro,thezro,helzro,brnzro,brnuzro,  &
             srlfzro,srmfzro,lizro,capszro,blcozro,ctczro
  INTEGER :: divqzro,griczro,avorzro
  INTEGER :: styzro,vtyzro,laizro,rouzro,vegzro,snowdzro
  INTEGER :: viqczro,viqrzro,viqizro,viqhzro,viqszro,vilzro,viizro,     &
             viczro, vitzro, pwzro, tprzro, gprzro, cprzro
  INTEGER :: raiczro,raigzro,raitzro

!
!-----------------------------------------------------------------------
!
!  Define the option for contour line stypes.
!
!-----------------------------------------------------------------------
!
  INTEGER :: usty , vsty , wsty , ptsty , psty, hsty, tsty,vhsty,vssty
  INTEGER :: qvsty ,qcsty ,qrsty ,qisty ,qssty ,qhsty ,kmhsty ,         &
             kmvsty,tkesty,rhsty ,rfsty ,ptesty,tdsty, qwsty, qtsty,    &
             rfcsty, rhisty
  INTEGER :: upsty ,vpsty ,wpsty ,ptpsty,ppsty ,qvpsty,vorpsty,divpsty
  INTEGER :: trnsty,wcpsty,racsty,ragsty,                               &
             ratsty,pslsty,capsty,cinsty,thesty,helsty,brnsty,brnusty,  &
             srlfsty,srmfsty,listy,capssty,blcosty,ctcsty
  INTEGER :: divqsty,gricsty,avorsty
  INTEGER :: stysty,vtysty,laisty,rousty,vegsty,snowdsty
  INTEGER :: viqcsty,viqrsty,viqisty,viqhsty,viqssty,vilsty,viisty,     &
             vicsty, vitsty, pwsty, tprsty, gprsty, cprsty
  INTEGER :: raicsty,raigsty,raitsty

  INTEGER :: msfplt,msfovr,msfcol1,msfcol2,msfprio,msfhlf,msfzro,msfsty
  REAL    :: msfinc, msfminc, msfmaxc

  INTEGER :: thkplt,thkovr,thkcol1,thkcol2,thkprio,thkhlf,thkzro,thksty
  REAL    :: thkinc, thkminc, thkmaxc

  INTEGER :: ipvplt,ipvovr,ipvcol1,ipvcol2,ipvprio,ipvhlf,ipvzro,ipvsty
  REAL    :: ipvinc, ipvminc, ipvmaxc
!
!-----------------------------------------------------------------------
!
!  Profile Plotting control parameters entered by user
!
!-----------------------------------------------------------------------
!
  INTEGER :: uprof, vprof, wprof, ptprof, pprof
  INTEGER :: qvprof,qcprof,qrprof,qiprof,qsprof,qhprof,kmhprof,         &
             kmvprof,tkeprof,rhprof,rfprof,pteprf
  INTEGER :: upprof,vpprof,wpprof,ptpprf,ppprof,qvpprf,vorpprf,divpprf
  INTEGER :: tsoilprof,qsoilprof  ! Zuwen He 05/31/2002
!
!-----------------------------------------------------------------------
!
!  Profile plot lower bound
!
!-----------------------------------------------------------------------
!
  REAL :: uprmin, vprmin, wprmin, ptprmin, pprmin
  REAL :: qvprmin,qcpmin,qrpmin,qipmin,qspmin,qhpmin
  REAL :: kmhpmin,kmvpmin,tkepmin
  REAL :: rhpmin,rfpmin,ptepmin,vorppmin,divppmin,avormin
  REAL :: uppmin,vppmin,wppmin,ptppmin,pppmin,qvppmin
  REAL :: tsoilprofmin,qsoilprofmin  ! Zuwen He 06/03/2002
!
!-----------------------------------------------------------------------
!
!  Profile plot upper bound
!
!-----------------------------------------------------------------------
!
  REAL :: uprmax, vprmax, wprmax, ptprmax, pprmax
  REAL :: qvprmax,qcpmax,qrpmax,qipmax,qspmax,qhpmax
  REAL :: kmhpmax, kmvpmax, tkepmax
  REAL :: rhpmax,rfpmax,ptepmax,vorppmax,divppmax, avormax
  REAL :: uppmax,vppmax,wppmax,ptppmax,pppmax,qvppmax
  REAL :: tsoilprofmax,qsoilprofmax  ! Zuwen He 06/03/2002
!
!-----------------------------------------------------------------------
!
!  3-D wireframe plotting
!
!-----------------------------------------------------------------------
!
  INTEGER :: w3dplt, q3dplt
  REAL :: wisosf,qisosf

  INTEGER :: idisplay
  INTEGER :: imove, inwfrm
!
!-----------------------------------------------------------------------
!
!  Common blocks for plotting control parameters
!
!-----------------------------------------------------------------------
!
  INTEGER :: layover               ! set by OVERLAY, used in ctr2d,vtr2d
  REAL    :: ctinc,ctmin,ctmax,vtunt  ! contour interval and vector unit
  INTEGER :: icolor,icolor1,lbcolor,trcolor    ! required color
  CHARACTER (LEN=12) :: varname                ! save the plot variable

  REAL :: x01,y01                  ! first interpolation point for a
                                   ! vertical slice specified by two pts
  REAL :: x02,y02                  ! second interpolation point for a
                                   ! vertical slice specified by two pts
  REAL :: zlevel                   ! altitude (meters) of a horizontal
                                   ! slice so specified
  REAL :: sinaf,cosaf,dist,sqrtdxy

  COMMON /laypar/  layover
  COMMON /incunt/  ctinc,ctmin,ctmax,vtunt
  COMMON /recolor/ icolor,icolor1,lbcolor,trcolor
  COMMON /varplt1/ varname
  COMMON /slicev/  x01,y01,x02,y02,sinaf,cosaf,dist,sqrtdxy
  COMMON /sliceh/  zlevel

  REAL :: yxstrch    ! Stretching factor for x-y plots
  REAL :: zxstrch    ! Stretching factor for x-z plots
  REAL :: zystrch    ! Stretching factor for y-z plots
  REAL :: zhstrch    ! Stretching factor for arbitrary vertical slices
  REAL :: zsoilxstrch    ! Stretching factor for x-z plots for the soil model
  REAL :: zsoilystrch    ! Stretching factor for y-z plots for the soil model

  REAL :: aspratio
  COMMON /yratio/ aspratio      ! scaling factor: the y/x ratio.
!
!  Pass the plotting window parameters into subroutine encodwd.
!
  COMMON /pltwdw/ xbgn,xend,ybgn,yend

!-----------------------------------------------------------------------
!
!  Misc. local variables
!
!-----------------------------------------------------------------------
!

  CHARACTER (LEN=80)  :: label
  CHARACTER (LEN=256) :: filename
!
!-----------------------------------------------------------------------
!
  INTEGER :: length
  CHARACTER (LEN=6) :: stem2
  CHARACTER (LEN=1) :: stem1
  INTEGER :: flagsin
  REAL    :: f_cputime,cpu0,cpu1,cpu2
  DOUBLE PRECISION :: f_walltime,second1, second2

  INTEGER :: ireturn
  INTEGER :: slicopt
  INTEGER :: i,j,k,ibgn,iend,jbgn,jend,kbgn,kend,ist,jst,kst,iob
  INTEGER :: ksoilbgn,ksoilend ! Zuwen He, 05/31/2002
  INTEGER :: ibgn1, iend1
  INTEGER :: xr1,yr1,x11,y11
  INTEGER :: nxpic,nypic,islice,jslice,kslice,layout
  INTEGER :: isoilslice,jsoilslice,ksoilslice   ! Zuwen 05/31/2002 
  REAL :: time,angl,aspect
  REAL :: time1c, time2c, time1g, time2g, time1t, time2t, timediff

  REAL :: xr,yr,zr,x1,x2,y1,y2,z1,z2,xlimit,ylimit
  REAL :: zmax,zmin
  REAL :: zsoilr,zsoil1,zsoil2
  REAL :: zsoilmax,zsoilmin  ! Zuwen He, 05/31/2002 
  REAL :: pmb,drot
  INTEGER :: imax,jmax,kmax,imin,jmin,kmin
  REAL :: wmin, wmax, xorold, yorold, tk, tdk, psta
  REAL :: xbgn,xend,ybgn,yend,zbgn,zend
  REAL :: zsoilbgn,zsoilend ! Zuwen He, 05/31/2002  <0
  LOGICAL :: fexist
  INTEGER :: onvf

  REAL :: utmax,utmin,vtmax,vtmin,wtmax,wtmin,vsmax,vsmin
  REAL :: qvmax,qvmin,qcmax,qcmin,qrmax,qrmin,qimax,qimin,qsmax,qsmin
  REAL :: qwmax,qwmin
  REAL :: qhmax,qhmin,rhmax,rhmin,rfmax,rfmin,ptemax,ptemin,upmax,upmin
  REAL :: vpmax,vpmin,wpmax,wpmin,ptpmax,ptpmin,ppmax,ppmin
  REAL :: qvpmax,qvpmin,vormax,vormin,divmax,divmin
  REAL :: hmin, hmax, tdmin,tdmax, rhimin, rhimax

  INTEGER :: nprof, profopt, nxprpic, nyprpic, npicprof
  REAL :: zprofbgn, zprofend
  REAL :: zsoilprofbgn, zsoilprofend  ! Zuwen He, 05/31/2002
  REAL :: time0

  INTEGER :: trnplt,wetcanplt
  INTEGER :: soiltpplt,vegtpplt,laiplt,rouplt,vegplt,snowdplt
  INTEGER :: soiltpn       ! number of soil type 1 to 4
  INTEGER :: pslplt
  INTEGER :: raincplt,raingplt,raintplt
  INTEGER :: capeplt, cinplt, thetplt, heliplt
  INTEGER :: brnplt, brnuplt, srlfplt, srmfplt, liplt
  INTEGER :: capsplt, blcoplt, ctcplt
  INTEGER :: rainicplt,rainigplt,rainitplt

  INTEGER :: ip,ipp,ipriority(nprio),iptemp(nprio),sigplt(nprio)

  REAL :: trninc,wcpinc
  REAL :: soiltpinc,vegtpinc,laiinc,rouinc,veginc,snowdinc
  REAL :: pslinc
  REAL :: raincinc, rainginc,raintinc
  REAL :: capeinc, cininc, thetinc, heliinc
  REAL :: brninc, brnuinc, srlfinc, srmfinc, liinc
  REAL :: capsinc, blcoinc, ctcinc
  REAL :: rainicinc,rainiginc,rainitinc

!
! 05/30/2002 Zuwen He
!
! soil plot options and parameters
!
  INTEGER :: tsoilplt
  REAL    :: tsoilinc,tsoilminc,tsoilmaxc
  INTEGER :: tsoilovr,tsoilhlf,tsoilzro,tsoilcol1,tsoilcol2,tsoilprio
  
  INTEGER :: qsoilplt
  REAL    :: qsoilinc,qsoilminc,qsoilmaxc
  INTEGER :: qsoilovr,qsoilhlf,qsoilzro,qsoilcol1,qsoilcol2,qsoilprio
  
!
! END Zuwen He
!

  INTEGER :: ovrmap,mapgrid,mapcol(maxmap),mapline_style(maxmap),       &
             mapgridcol,nmapfile
  REAL    :: latgrid,longrid
  CHARACTER (LEN=256) :: mapfile(maxmap)
  INTEGER :: lmapfile
  COMMON /mappar / ovrmap
  COMMON /mappar1/ nmapfile,mapcol,mapline_style,mapfile
  COMMON /mappar2/ mapgrid,mapgridcol, latgrid,longrid

  REAL    :: ztmin,ztmax
  INTEGER :: ovrtrn
  COMMON /trnpar/ trnplt,ovrtrn,trninc,trnminc,trnmaxc,                 &
                  ztmin,ztmax

  INTEGER :: ovrobs,obsset,obscol,obs_marktyp
  REAL :: obs_marksz
  COMMON /obspar/ ovrobs,obsset,obscol,obs_marktyp, obs_marksz
  CHARACTER (LEN=256) :: sfcobfl
  INTEGER :: obunit,lsfcobfl

  INTEGER :: ovrstaopt
  INTEGER :: ovrstam,staset,ovrstan,ovrstav,stacol,markprio,wrtstax
  INTEGER :: nsta_typ,sta_typ(10),sta_marktyp(10),sta_markcol(10)
  REAL :: sta_marksz(10)
  REAL :: wrtstad
  CHARACTER (LEN=256) :: stalofl
  COMMON /sta_par/ ovrstaopt,ovrstam,staset,ovrstan,ovrstav,stacol,     &
         markprio,nsta_typ,sta_typ,sta_marktyp,                         &
         sta_markcol,sta_marksz,stalofl,wrtstax,wrtstad
  INTEGER :: stunit,lstalofl
!
!-----------------------------------------------------------------------
!
!  Surface (single-level) read-in observation variables
!
!-----------------------------------------------------------------------
!
  CHARACTER (LEN=24) :: atime
  CHARACTER (LEN=5)  :: stn(mxsfcob)
  INTEGER :: n_meso_g,                                                  &
             n_meso_pos,n_sao_g,n_sao_pos_g,n_sao_b,n_sao_pos_b,        &
             n_obs_g,n_obs_pos_g,n_obs_b,n_obs_pos_b,nobs
  CHARACTER (LEN=8) :: obstype(mxsfcob)
  CHARACTER (LEN=8) :: wx(mxsfcob)
  CHARACTER (LEN=1) :: store_emv(mxsfcob,5)
  CHARACTER (LEN=4) :: store_amt(mxsfcob,5)
  REAL :: latob(mxsfcob),lonob(mxsfcob),elevob(mxsfcob)
  REAL :: tob(mxsfcob),tdob(mxsfcob),dd(mxsfcob),ff(mxsfcob)
  REAL :: ddg(mxsfcob),ffg(mxsfcob)
  REAL :: pstn(mxsfcob),pmsl(mxsfcob),alt(mxsfcob)
  REAL :: ceil(mxsfcob),lowcld(mxsfcob),cover(mxsfcob)
  REAL :: vis(mxsfcob),rad(mxsfcob)
  REAL :: store_hgt(mxsfcob,5)
  INTEGER :: kloud(mxsfcob),idp3(mxsfcob)
  INTEGER :: obstime(mxsfcob)
  REAL :: obs1(mxsfcob),obs2(mxsfcob)

  COMMON /sfc_obs1/ nobs
  COMMON /sfc_obs2/ latob,lonob,obs1,obs2

  INTEGER :: nsta,nstapro(mxstalo),nstatyp(mxstalo)
  REAL :: latsta(mxstalo), lonsta(mxstalo)
  CHARACTER (LEN=2 ) :: s_state(mxstalo)
  CHARACTER (LEN=5 ) :: s_name(mxstalo)
  CHARACTER (LEN=20) :: s_site(mxstalo)
  INTEGER :: s_elev(mxstalo)
  COMMON /sta_loc/latsta,lonsta,nstatyp,nstapro,nsta
  COMMON /sta_loc1/s_name

  REAL :: lblmag   ! A global magnification factor for labels.
  REAL :: ctrlbsiz, axlbsiz
  COMMON /labmag/ lblmag, ctrlbsiz, axlbsiz

  REAL :: winsiz   ! A global factor for window size
  COMMON /windows/ winsiz
  REAL :: margnx, margny   ! margin
  INTEGER :: pcolbar ! position of color bar
  INTEGER :: tickopt
  INTEGER :: axlbfmt   ! format for the axis's label
  INTEGER :: fontopt   ! the font of character
  INTEGER :: ctrlbopt  ! Contour labelling option
  INTEGER :: ctrstyle
  INTEGER :: ctrlbfrq
  COMMON /clb_frq/ ctrlbfrq

  INTEGER :: lbmaskopt
  INTEGER :: haxisu, vaxisu
  INTEGER :: lbaxis
  INTEGER :: lnmag
  REAL :: hmintick,vmajtick,vmintick,hmajtick
  COMMON /var_par/ fontopt,haxisu, vaxisu,lbaxis,tickopt,               &
          hmintick,vmajtick,vmintick,hmajtick,axlbfmt
  INTEGER :: presaxis_no
  REAL :: pres_val(20), pres_z(20)
  COMMON /pressbar_par/presaxis_no,pres_val,pres_z

  INTEGER :: ntitle,titcol, wpltime
  REAL :: titsiz
  CHARACTER (LEN=256) :: title(3), footer_l, footer_c, footer_r

  COMMON /titpar1/title, footer_l, footer_c, footer_r
  COMMON /titpar2/ntitle,titcol,wpltime, nxpic, nypic
  COMMON /titpar3/titsiz

  COMMON /tmphc1/x1,x2,y1,y2,z1,z2
!
!  Work arrays used by contouring and contour color fill routines
!  m*n=<50000, 8*m=<m if the array to be contours is demensioned m x n.
!

  INTEGER :: sovrlay
  LOGICAL :: plotovr
!
!-----------------------------------------------------------------------
!
!  Common block used by the Ncar Graphic streamline routine
!  INITA  Used to precondition grid boxes to be eligible to
!         start a streamline. For example, a value of 4
!         means that every fourth grid box is eligible ;
!         a value of 2 means that every other grid box is eligible.
!         (see INITB)
!
!  INITB  Used to precondition grid boxes to be eligible for
!         direction arrows. If the user changes the default values
!         of INITA and/or INITB, it should be done such that
!         MOD(INITA,INITB) = 0. For a dense grid try INITA=4 and
!         INITB=2 to reduce the CPU time.
!
!-----------------------------------------------------------------------
!
  INTEGER :: inita , initb , iterp , iterc , igflg, imsg , icyc
  REAL :: arowl , uvmsg , displ , dispc , cstop
  COMMON /str03/  inita , initb , arowl , iterp , iterc , igflg,        &
                  imsg , uvmsg , icyc , displ , dispc , cstop

!-----------------------------------------------------------------------
!
!  Namelist for plot input
!
!-----------------------------------------------------------------------
!
  INTEGER :: maxslicopt
 
  PARAMETER (maxslicopt=11) 
!
! slicopt = 1: xy slice
! slicopt = 2: xz slice
! slicopt = 3: yz slice
! slicopt = 4: constant height
! slicopt = 5: vertical slice through two points
! slicopt = 6: constant pressure
! slicopt = 7: isentropic level
! slicopt = 8: ??
! slicopt = 9: xy-soil-slice for the soil model 
! slicopt = 10: xz-soil-slice for the soil model 
! slicopt = 11: yz-soil-slice for the soil model 


  INTEGER :: nslice(maxslicopt), indxslic
  INTEGER :: iplot(maxslicopt)

  INTEGER :: nslice_xy,nslice_xz, nslice_yz, nslice_h, nslice_v,        &
             nslice_p,nslice_pt

  INTEGER :: slice_xy(max_dim),slice_xz(max_dim), slice_yz(max_dim)

!
! 05/30/2002 Zuwen He
! Slice for soil variables
!

  INTEGER :: nslice_xy_soil
  INTEGER :: slice_xy_soil(max_dim)

  INTEGER :: nslice_xz_soil
  INTEGER :: slice_xz_soil(max_dim)

  INTEGER :: nslice_yz_soil
  INTEGER :: slice_yz_soil(max_dim)
!
! END Zuwen 
!
  REAL :: xi1(max_dim),yi1(max_dim),xi2(max_dim),yi2(max_dim)
  REAL :: slice_h(max_dim), slice_p(max_dim),  slice_pt(max_dim)
  REAL :: xpnt1(max_dim),ypnt1(max_dim), xpnt2(max_dim),ypnt2(max_dim)

  INTEGER :: ucol1,vcol1,wcol1,ptcol1,pcol1,qvcol1,qccol1,              &
          qrcol1,qicol1,qscol1,qhcol1,kmhcol1,kmvcol1,tkecol1,          &
          rhcol1,rfcol1,rfccol1,ptecol1,upcol1,vpcol1,wpcol1,           &
          ptpcol1,ppcol1,qvpcol1,vorpcol1,divpcol1,vtrcol1,             &
          vtpcol1,vagcol1,vtrstmcol1,vtpstmcol1,hcol1,tcol1,            &
          divqcol1,                                                     &
          tdcol1,qwcol1,qtcol1,trncol1,                                 &
          wcpcol1,raccol1,ragcol1,ratcol1,pslcol1,stycol1,              &
          vtycol1,laicol1,roucol1,vegcol1,snowdcol1,                    &
          capcol1,cincol1,thecol1,                                      &
          helcol1, vhcol1, vscol1,brncol1,brnucol1,srlfcol1,            &
          srmfcol1,licol1, capscol1, blcocol1,griccol1,avorcol1,        &
          viqccol1,viqrcol1,viqicol1,viqhcol1,viqscol1,vilcol1,         &
          viicol1,viccol1, xuvcol1, strmcol1, ctccol1, rhicol1,         &
          vitcol1, pwcol1, tprcol1, gprcol1, cprcol1,                   &
          raiccol1,raigcol1,raitcol1

  INTEGER :: ucol2,vcol2,wcol2,ptcol2,pcol2,qvcol2,qccol2,              &
          qrcol2,qicol2,qscol2,qhcol2,kmhcol2,kmvcol2,tkecol2,          &
          rhcol2,rfcol2,rfccol2,ptecol2,upcol2,vpcol2,wpcol2,           &
          ptpcol2,ppcol2,qvpcol2,vorpcol2,divpcol2,vtrcol2,             &
          vtpcol2,vagcol2,vtrstmcol2,vtpstmcol2,hcol2,tcol2,            &
          divqcol2,                                                     &
          tdcol2,qwcol2,qtcol2,trncol2,                                 &
          wcpcol2,raccol2,ragcol2,ratcol2,pslcol2,stycol2,              &
          vtycol2,laicol2,roucol2,vegcol2,snowdcol2,                    &
          capcol2,cincol2,thecol2,                                      &
          helcol2, vhcol2, vscol2,brncol2,brnucol2,srlfcol2,            &
          srmfcol2,licol2, capscol2, blcocol2,griccol2,avorcol2,        &
          viqccol2,viqrcol2,viqicol2,viqhcol2,viqscol2,vilcol2,         &
          viicol2,viccol2, xuvcol2, strmcol2, ctccol2, rhicol2,         &
          vitcol2, pwcol2, tprcol2, gprcol2, cprcol2,                   &
          raiccol2,raigcol2,raitcol2      

  INTEGER :: uprio,vprio,wprio,ptprio,pprio,qvprio,qcprio,              &
          qrprio,qiprio,qsprio,qhprio,kmhprio,kmvprio,tkeprio,          &
          rhprio,rfprio,rfcprio,rhiprio,                                &
          pteprio,upprio,vpprio,wpprio,ptpprio,ppprio,qvpprio,          &
          vorpprio,divpprio,vtrprio,vtpprio,vagprio,vtrstmprio,         &
          vtpstmprio,hprio,tprio,divqprio,tdprio,qwprio,qtprio,         &
          trnprio,wcpprio,racprio, ragprio,ratprio,pslprio,             &
          styprio,vtyprio,laiprio,rouprio,vegprio,snowdprio,            &
          capprio,cinprio,theprio,helprio, vhprio,vsprio,               &
          brnprio,bruprio,srlprio,srmprio,liprio,                       &
          capsprio,blcoprio,gricprio,avorprio,                          &
          viqcprio,viqrprio,viqiprio,viqhprio,viqsprio,vilprio,         &
          viiprio,vicprio, xuvprio, strmprio, ctcprio, vitprio,         &
          pwprio, tprprio, gprprio, cprprio,                            &
          raicprio,raigprio,raitprio

  INTEGER :: col_table,smooth
  CHARACTER (LEN=80) :: color_map
  INTEGER :: number_of_boxes, boxcol
  REAL    :: bx1(10), bx2(10),by1(10),by2(10)

  INTEGER :: number_of_polys, polycol
  REAL    :: vertx(max_verts,max_polys), verty(max_verts,max_polys)

  INTEGER :: istride,jstride,kstride

  COMMON /coltable/col_table,pcolbar
  COMMON /smoothopt/smooth
  COMMON /boxesopt/number_of_boxes,boxcol,bx1,bx2,by1,by2
  COMMON /polysopt/number_of_polys,polycol,vertx,verty

  CHARACTER (LEN=1) :: tunits  ! units for temperature F or C
  CHARACTER (LEN=1) :: tdunits ! units for dew-point temp F or C

  INTEGER :: vhunits,vtrunits,vtpunits,vagunits,xuvunits,strmunits
  INTEGER :: vtrtype,vtptype,vagtype,xuvtype, strmtype

  INTEGER :: tprunits, gprunits, cprunits

  INTEGER :: iunits, itype
  COMMON /windvtr/iunits, itype

  INTEGER :: racunit, ragunit, ratunit
  INTEGER :: raicunit,raigunit,raitunit

  INTEGER :: ovrlaymulopt, ovrmul_num
  CHARACTER (LEN=12) :: ovrmulname(50)
  CHARACTER (LEN=12) :: ovrname

  INTEGER :: setcontopt ,setcontnum
  CHARACTER (LEN=12) :: setcontvar(maxuneva)
  REAL :: setconts(maxunevm,maxuneva)
  COMMON /setcont_var/setcontvar
  COMMON /setcon_par/setcontopt,setcontnum,setconts

  COMMON /init5_coltab/ color_map

  INTEGER :: arbvaropt   ! plot arbitrary variable

  INTEGER :: istatus

  CHARACTER (LEN=40) :: dirname3d(maxarbvar),dirname2d(maxarbvar)
  CHARACTER (LEN=40) :: varunits, var_name
  CHARACTER (LEN=6) :: var3d(maxarbvar)
  INTEGER :: var3dnum
  INTEGER :: var3dplot(maxarbvar)
  REAL :: var3dinc(maxarbvar), var3dminc(maxarbvar),                    &
       var3dmaxc(maxarbvar)
  INTEGER :: var3dovr(maxarbvar),var3dcol1(maxarbvar),                  &
          var3dcol2(maxarbvar),var3dprio(maxarbvar),                    &
          var3dhlf(maxarbvar),var3dzro(maxarbvar),                      &
          var3dsty(maxarbvar)

  REAL, ALLOCATABLE :: var3dv(:,:,:)

  CHARACTER (LEN=6) :: var2d(maxarbvar)
  INTEGER :: var2dnum
  INTEGER :: var2dplot(maxarbvar)
  REAL :: var2dinc(maxarbvar), var2dminc(maxarbvar),                    &
       var2dmaxc(maxarbvar)
  INTEGER :: var2dovr(maxarbvar),var2dcol1(maxarbvar),                  &
          var2dcol2(maxarbvar), var2dprio(maxarbvar),                   &
          var2dhlf(maxarbvar),var2dzro(maxarbvar),                      &
          var2dsty(maxarbvar)

  REAL, ALLOCATABLE :: var2dv(:,:)

  INTEGER :: missfill_opt,missval_colind    ! miss value color index
  COMMON /multi_value/ missfill_opt, missval_colind

  INTEGER :: xnwpic_called
  COMMON /callnwpic/xnwpic_called

  COMMON /init8_cntl1/       &
      hplot,  hinc,   hminc,   hmaxc,  hovr,   hcol1,hcol2, hprio,      &
            hhlf, hzro, hsty,                                           &
      msfplt,msfinc,msfminc, msfmaxc,msfovr,msfcol1,msfcol2,msfprio,    &
            msfhlf, msfzro,  msfsty,                                    &
      thkplt,thkinc,thkminc, thkmaxc,thkovr,thkcol1,thkcol2,thkprio,    &
            thkhlf, thkzro,  thksty,                                    &
      tplot,  tinc,   tminc,   tmaxc,  tovr,   tcol1,tcol2, tprio,      &
            thlf, tzro, tsty,                                   &
      uplot,  uinc,   uminc,   umaxc,  uovr,   ucol1,ucol2, uprio,      &
            uhlf, uzro, usty,                                           &
      vplot,  vinc,   vminc,   vmaxc,  vovr,   vcol1,vcol2, vprio,      &
            vhlf, vzro, vsty,                                           &
      vhplot, vhinc,  vhminc,  vhmaxc, vhovr,  vhcol1,vhcol2,vhprio,    &
            vhunits, vhhlf, vhzro, vhsty,                               &
      vsplot, vsinc,  vsminc,  vsmaxc, vsovr,  vscol1,vscol2,vsprio,    &
            vshlf, vszro, vssty,                                        &
      wplot,  winc,   wminc,   wmaxc,  wovr,   wcol1,wcol2, wprio,      &
            whlf, wzro, wsty,                                           &
      ptplot, ptinc,  ptminc,  ptmaxc, ptovr,  ptcol1,ptcol2,ptprio,    &
            pthlf, ptzro, ptsty,                                        &
      pplot , pinc,   pminc,   pmaxc,  povr,   pcol1,pcol2, pprio,      &
            phlf, pzro, psty,                                           &
      ipvplt,ipvinc,ipvminc, ipvmaxc,ipvovr,ipvcol1,ipvcol2,ipvprio,    &
            ipvhlf, ipvzro,  ipvsty

  COMMON /init9_cntl2/                                              &
      qvplot, qvinc,  qvminc,  qvmaxc, qvovr,  qvcol1,qvcol2,qvprio,    &
            qvhlf, qvzro, qvsty,                                        &
      qcplot, qcinc,  qcminc,  qcmaxc, qcovr,  qccol1,qccol2,qcprio,    &
            qchlf, qczro, qcsty,                                        &
      qrplot, qrinc,  qrminc,  qrmaxc, qrovr,  qrcol1,qrcol2,qrprio,    &
            qrhlf, qrzro, qrsty,                                        &
      qiplot, qiinc,  qiminc,  qimaxc, qiovr,  qicol1,qicol2,qiprio,    &
            qihlf, qizro, qisty,                                        &
      qsplot, qsinc,  qsminc,  qsmaxc, qsovr,  qscol1,qscol2,qsprio,    &
            qshlf, qszro, qssty,                                        &
      qhplot, qhinc,  qhminc,  qhmaxc, qhovr,  qhcol1,qhcol2,qhprio,    &
            qhhlf, qhzro, qhsty,                                        &
      qwplot, qwinc,  qwminc,  qwmaxc, qwovr,  qwcol1,qwcol2,qwprio,    &
            qwhlf, qwzro, qwsty,                                        &
      qtplot, qtinc,  qtminc,  qtmaxc, qtovr,  qtcol1,qtcol2,qtprio,    &
            qthlf, qtzro, qtsty
  COMMON /init10_cntl3/                                              &
      kmhplt, kmhinc, kmhminc,kmhmaxc,kmhovr,kmhcol1,kmhcol2,kmhprio,   &
            kmhhlf, kmhzro, kmhsty,                                     &
      kmvplt, kmvinc, kmvminc,kmvmaxc,kmvovr,kmvcol1,kmvcol2,kmvprio,   &
            kmvhlf, kmvzro, kmvsty,                                     &
      tkeplt, tkeinc, tkeminc, tkemaxc,tkeovr,tkecol1,tkecol2,tkeprio,  &
            tkehlf, tkezro, tkesty,                                     &
      rhplot, rhinc,  rhminc,  rhmaxc,  rhovr,   rhcol1,rhcol2,rhprio,  &
            rhhlf, rhzro,   rhsty,                                      &
      tdplot, tdinc,  tdminc,  tdmaxc,  tdovr,   tdcol1,tdcol2,tdprio,  &
            tdhlf, tdzro, tdsty,                               &
      rfopt,                                                            &
      rfplot, rfinc,  rfminc,  rfmaxc,  rfovr,   rfcol1,rfcol2,rfprio,  &
            rfhlf, rfzro, rfsty,                                        &
      rfcplt, rfcinc, rfcminc, rfcmaxc,rfcovr,rfccol1,rfccol2,rfcprio,  &
            rfchlf, rfczro, rfcsty,                                     &
      pteplt, pteinc, pteminc, ptemaxc,pteovr,ptecol1,ptecol2,pteprio,  &
            ptehlf, ptezro, ptesty

  COMMON /init810_char_units/ tunits, tdunits

  COMMON /init11_cntl_prt1/                                             &
      upplot, upinc,  upminc,   upmaxc,   upovr,upcol1,upcol2,upprio,   &
            uphlf, upzro, upsty,                                        &
      vpplot, vpinc,  vpminc,   vpmaxc,   vpovr,vpcol1,vpcol2,vpprio,   &
            vphlf, vpzro, vpsty,                                        &
      wpplot, wpinc,  wpminc,   wpmaxc,   wpovr,wpcol1,wpcol2,wpprio,   &
            wphlf, wpzro, wpsty,                                        &
      ptpplt, ptpinc, ptpminc,ptpmaxc,ptpovr,ptpcol1,ptpcol2,ptpprio,   &
            ptphlf, ptpzro, ptpsty,                                     &
      ppplot, ppinc,  ppminc, ppmaxc,  ppovr,   ppcol1,ppcol2,ppprio,   &
            pphlf, ppzro, ppsty,                                        &
      qvpplt, qvpinc, qvpminc,qvpmaxc,qvpovr,qvpcol1,qvpcol2,qvpprio,   &
            qvphlf, qvpzro, qvpsty,                                     &
      vorpplt,vorpinc,vorpminc, vorpmaxc, vorpovr, vorpcol1,vorpcol2,   &
            vorphlf,  vorpprio, vorpzro, vorpsty,                       &
      divpplt,divpinc,divpminc, divpmaxc, divpovr, divpcol1,divpcol2,   &
            divphlf,  divpprio, divpzro, divpsty,                       &
      divqplt,divqinc,divqminc, divqmaxc, divqovr, divqcol1,divqcol2,   &
            divqhlf,divqprio, divqzro,divqsty
  COMMON /init12_cntl_prt2/                                             &
      gricplt,gricinc,gricminc, gricmaxc, gricovr, griccol1,griccol2,   &
            grichlf,gricprio, griczro, gricsty,                         &
      avorplt,avorinc,avorminc, avormaxc, avorovr, avorcol1,avorcol2,   &
            avorhlf,avorprio, avorzro, avorsty,                         &
      rhiplot, rhiinc,  rhiminc,  rhimaxc,  rhiovr,   rhicol1,rhicol2,  &
            rhiprio,  rhihlf, rhizro , rhisty

  COMMON /init13_cntl_vctr/ istride,jstride,kstride,                    &
      vtrplt, vtrunit,vtrovr,vtrcol1,vtrcol2,vtrprio,vtrunits,vtrtype,  &
      vtpplt, vtpunit, vtpovr,vtpcol1,vtpcol2,vtpprio,vtpunits,vtptype, &
      xuvplt, xuvunit,xuvovr,xuvcol1,xuvcol2,xuvprio,xuvunits,xuvtype,  &
      strmplt,strmunit,strmovr,strmcol1,strmcol2,strmprio,strmunits,    &
      strmtype,                                                         &
      vagplt, vagunit,vagovr,vagcol1,vagcol2,vagprio,vagunits,vagtype

  COMMON /init14_cntl_strm/                                             &
      vtrstrm, vtrstmovr, vtrstmcol1, vtrstmcol2, vtrstmprio,           &
      vtpstrm, vtpstmovr, vtpstmcol1, vtpstmcol2, vtpstmprio

  COMMON /init4_plotset/ iorig,zbgn,zend,zsoilbgn,zsoilend,             &
                      yxstrch,zxstrch,zystrch,                          &
                      zhstrch,zsoilxstrch,zsoilystrch,                  &
                      margnx,margny
  COMMON /init6_style/ lnmag, ctrlbopt, ctrstyle 

  COMMON /init7_slice/ nslice_xy, nslice_xz, nslice_yz, nslice_h,        &
                       nslice_v,  nslice_p,  nslice_pt,                  &
                       nslice_xy_soil, nslice_xz_soil, nslice_yz_soil,   &
                       slice_xy, slice_xz, slice_yz, slice_h,            &
                       slice_p,  slice_pt, xpnt1, ypnt1, xpnt2, ypnt2,   &
                       slice_xy_soil, slice_xz_soil, slice_yz_soil,      &
                       imove      

  COMMON /init15_sfc/                                                   &
      trnovr,trncol1,trncol2,trnprio,trnhlf, trnzro, trnsty,            &
      wetcanplt,wcpinc,wcpminc,wcpmaxc,wcpovr,wcpcol1,wcpcol2,wcpprio,  &
            wcphlf, wcpzro, wcpsty,                                     &
      raincplt,raincinc,raincminc,raincmaxc,racovr,raccol1,raccol2,     &
            rachlf, racprio, raczro, racsty, racunit,                   &
      raingplt,rainginc,raingminc,raingmaxc,ragovr,ragcol1,ragcol2,     &
            raghlf,  ragprio, ragzro, ragsty, ragunit,                  &
      raintplt,raintinc,raintminc,raintmaxc,ratovr,ratcol1,ratcol2,     &
            rathlf,  ratprio, ratzro, ratsty, ratunit,                  &
      rainicplt,rainicinc,rainicminc,rainicmaxc,raicovr,raiccol1,       &
            raiccol2,raichlf,raicprio,raiczro,raicsty,raicunit,         &
      rainigplt,rainiginc,rainigminc,rainigmaxc,raigovr,raigcol1,       &
            raigcol2,raighlf,raigprio,raigzro,raigsty,raigunit,         &
      rainitplt,rainitinc,rainitminc,rainitmaxc,raitovr,raitcol1,       &
            raitcol2,raithlf,raitprio,raitzro,raitsty,raitunit

  COMMON /init19_soil/                                                  &
      tsoilplt,tsoilinc,tsoilminc,tsoilmaxc,tsoilovr,                   & 
            tsoilcol1,tsoilcol2,tsoilhlf,tsoilprio,tsoilzro,            & 
      qsoilplt,qsoilinc,qsoilminc,qsoilmaxc,qsoilovr,                   & 
            qsoilcol1,qsoilcol2,qsoilhlf,qsoilprio,qsoilzro    

  COMMON /init16_sfc/                                                  &
      pslplt ,pslinc, pslminc, pslmaxc,pslovr,pslcol1,pslcol2,pslprio,  &
            pslhlf, pslzro, pslsty,                                     &
      capeplt,capeinc,capeminc,capemaxc,capovr,capcol1,capcol2,capprio, &
            caphlf, capzro, capsty,                                     &
      cinplt, cininc, cinminc, cinmaxc, cinovr,cincol1,cincol2,cinprio, &
            cinhlf, cinzro, cinsty,                                     &
      thetplt,thetinc,thetminc,thetmaxc,theovr,thecol1,thecol2,theprio, &
            thehlf, thezro, thesty,                                     &
      heliplt,heliinc,heliminc,helimaxc,helovr,helcol1,helcol2,helprio, &
            helhlf, helzro, helsty,                                     &
      brnplt, brninc, brnminc, brnmaxc, brnovr,brncol1,brncol2,brnprio, &
            brnhlf, brnzro, brnsty,                                     &
      brnuplt, brnuinc, bruminc, brumaxc, brnuovr, brnucol1,brnucol2,   &
            brnuhlf,  brnuzro, brnusty, bruprio,                        &
      srlfplt, srlfinc, srlminc, srlmaxc, srlfovr, srlfcol1,srlfcol2,   &
            srlfhlf,  srlfzro, srlfsty, srlprio,                        &
      srmfplt, srmfinc, srmminc, srmmaxc, srmfovr, srmfcol1,srmfcol2,   &
            srmfhlf, srmfzro, srmfsty, srmprio
  COMMON /init17_sfc/                                                  &
      liplt, liinc, liminc, limaxc, liovr, licol1,licol2,liprio,        &
            lihlf, lizro, listy,                                        &
      capsplt, capsinc, capsminc, capsmaxc, capsovr, capscol1,capscol2, &
            capshlf, capszro, capssty, capsprio,                        &
      blcoplt, blcoinc, blcominc, blcomaxc, blcoovr, blcocol1,blcocol2, &
            blcohlf, blcozro, blcosty, blcoprio,                        &
      viqcplt, viqcinc, viqcminc, viqcmaxc, viqcovr, viqccol1,viqccol2, &
            viqchlf, viqczro, viqcsty, viqcprio,                        &
      viqiplt, viqiinc, viqiminc, viqimaxc, viqiovr, viqicol1,viqicol2, &
            viqihlf, viqizro, viqisty, viqiprio,                        &
      viqrplt, viqrinc, viqrminc, viqrmaxc, viqrovr, viqrcol1,viqrcol2, &
            viqrhlf, viqrzro, viqrsty, viqrprio,                        &
      viqsplt, viqsinc, viqsminc, viqsmaxc, viqsovr, viqscol1,viqscol2, &
            viqshlf, viqszro, viqssty,viqsprio,                         &
      viqhplt, viqhinc, viqhminc, viqhmaxc, viqhovr, viqhcol1,viqhcol2, &
            viqhhlf, viqhzro, viqhsty,viqhprio,                         &
      vilplt, vilinc, vilminc, vilmaxc, vilovr, vilcol1,vilcol2,        &
            vilhlf, vilzro, vilsty, vilprio
  COMMON /init18_sfc/                                                  &
      viiplt, viiinc, viiminc, viimaxc, viiovr, viicol1,viicol2,        &
            viihlf, viizro, viisty,  viiprio,                           &
      vicplt, vicinc, vicminc, vicmaxc, vicovr, viccol1,viccol2,        &
            vichlf, viczro, vicsty, vicprio,                            &
      ctcplt, ctcinc, ctcminc, ctcmaxc, ctcovr, ctccol1,ctccol2,        &
            ctchlf, ctczro, ctcsty, ctcprio,                            &
      vitplt, vitinc, vitminc, vitmaxc, vitovr, vitcol1,vitcol2,        &
            vithlf, vitzro, vitsty, vitprio,                            &
      pwplt, pwinc, pwminc, pwmaxc, pwovr, pwcol1,pwcol2,               &
            pwhlf, pwzro, pwsty, pwprio,                                &
      tprplt, tprinc, tprminc, tprmaxc, tprovr, tprcol1,tprcol2,        &
            tprhlf, tprzro, tprsty, tprprio, tprunits,                  &
      gprplt, gprinc, gprminc, gprmaxc, gprovr, gprcol1,gprcol2,        &
            gprhlf, gprzro, gprsty, gprprio, gprunits,                  &
      cprplt, cprinc, cprminc, cprmaxc, cprovr, cprcol1,cprcol2,        &
            cprhlf, cprzro, cprsty, cprprio, cprunits

  COMMON /init20_sfccha/                                               &
      soiltpplt,soiltpinc,soiltpminc,soiltpmaxc,styovr,stycol1,stycol2, &
            styhlf, styzro, stysty,styprio,soiltpn,                     &
      vegtpplt,vegtpinc,vegtpminc,vegtpmaxc,vtyovr,vtycol1,vtycol2,     &
            vtyhlf, vtyzro, vtysty,vtyprio,                             &
      laiplt,laiinc,laiminc,laimaxc,laiovr,laicol1,laicol2,laiprio,     &
            laihlf, laizro, laisty,                                     &
      rouplt,rouinc,rouminc,roumaxc,rouovr,roucol1,roucol2,rouprio,     &
            rouhlf, rouzro, rousty,                                     &
      vegplt,veginc,vegminc,vegmaxc,vegovr,vegcol1,vegcol2,vegprio,     &
            veghlf, vegzro, vegsty,                                     &
      snowdplt,snowdinc,snowdminc,snowdmaxc,snowdovr,snowdcol1,         &
            snowdcol2, snowdprio,snowdhlf, snowdzro, snowdsty
  COMMON /init23_wirfrm/ w3dplt, wisosf, q3dplt, qisosf

  REAL :: paprlnth
  COMMON /init3_page/ layout, inwfrm, paprlnth

  COMMON /init25_prof/ profopt, nprof, xprof, yprof,                 &
      npicprof, uprof, uprmin, uprmax, vprof, vprmin, vprmax,           &
      wprof,wprmin,wprmax,  ptprof,ptprmin,ptprmax,                     &
      pprof,pprmin,pprmax,  qvprof,qvprmin,qvprmax,                     &
      qcprof,qcpmin,qcpmax, qrprof,qrpmin,qrpmax,                       &
      qiprof,qipmin,qipmax, qsprof,qspmin,qspmax,                       &
      qhprof,qhpmin,qhpmax, rhprof,rhpmin,rhpmax,                       &
      kmhprof,kmhpmin,kmhpmax, kmvprof,kmvpmin,kmvpmax,                 &
      tkeprof,tkepmin,tkepmax,                                          &
      rfprof,rfpmin,rfpmax, pteprf,ptepmin,ptepmax,                     &
      upprof,uppmin,uppmax, vpprof,vppmin,vppmax,                       &
      wpprof,wppmin,wppmax, ptpprf,ptppmin,ptppmax,                     &
      ppprof,pppmin,pppmax, qvpprf,qvppmin,qvppmax,                     &
      vorpprf, vorppmin, vorppmax, divpprf, divppmin, divppmax,         &
      zprofbgn,zprofend,                                                & 
      tsoilprof,tsoilprofmin,tsoilprofmax,                              & 
      qsoilprof,qsoilprofmin,qsoilprofmax,                              & 
      zsoilprofbgn,zsoilprofend,                                        & 
      nxprpic, nyprpic

  COMMON /init24_obs/ sfcobfl

  COMMON /init22_ovrlay/ovrlaymulopt,ovrname,ovrmul_num,ovrmulname

  COMMON /init21_cntl_arbvar/arbvaropt,                                      &
      var3dnum,dirname3d,                                               &
      var3d,var3dplot, var3dinc, var3dminc,var3dmaxc,                   &
      var3dovr, var3dhlf, var3dzro,var3dsty,var3dcol1, var3dcol2,       &
      var3dprio, var2dnum,dirname2d,                                    &
      var2d,var2dplot, var2dinc, var2dminc,var2dmaxc,                   &
      var2dovr, var2dhlf, var2dzro, var2dsty, var2dcol1, var2dcol2,     &
      var2dprio


  INTEGER :: zxplot_called,zxout_unit
  REAL :: xorig_0, yorig_0

  REAL :: omega2, r2d
  REAL :: relvort

  REAL, ALLOCATABLE :: fcorio(:,:), mapfct(:,:)
  REAL :: umove_readin, vmove_readin,uadd,vadd
!
!-----------------------------------------------------------------------
!
! Variables for mpi jobs
!
!-----------------------------------------------------------------------
  INTEGER, PARAMETER :: fzone = 3
  INTEGER :: ncompressx, ncompressy ! compression in x and y direction:
                                    ! ncompressx=nprocx_in/nproc_x
                                    ! ncompressy=nprocy_in/nproc_y
  INTEGER :: nproc_node
  COMMON /init1_mpi/ ncompressx, ncompressy, nproc_node

  INTEGER :: nxsm, nysm             ! smaller domain
  INTEGER :: nxlg, nylg             ! global domain

  INTEGER :: ii,jj,ia,ja

  REAL, DIMENSION(:),     POINTER :: xsm,ysm
  REAL, DIMENSION(:,:,:), POINTER :: zpsm,zpsoilsm
  REAL, DIMENSION(:,:,:), POINTER :: uprtsm, vprtsm, wprtsm,            &
                                     ptprtsm, pprtsm, qvprtsm
  REAL, DIMENSION(:,:,:), POINTER :: qcsm, qrsm, qism, qssm, qhsm
  REAL, DIMENSION(:,:,:), POINTER :: tkesm, kmhsm, kmvsm
  REAL, DIMENSION(:,:,:), POINTER :: ubarsm, vbarsm, wbarsm,            &
                                     ptbarsm,pbarsm, qvbarsm,rhobarsm
  REAL, DIMENSION(:,:,:), POINTER :: prcratesm

  INTEGER, DIMENSION(:,:,:),  POINTER :: soiltypsm
  INTEGER, DIMENSION(:,:),    POINTER :: vegtypsm
  REAL,    DIMENSION(:,:,:),  POINTER :: stypfrctsm
  REAL,    DIMENSION(:,:,:,:),POINTER :: tsoilsm, qsoilsm
  REAL,    DIMENSION(:,:,:),  POINTER :: wetcanpsm
  REAL,    DIMENSION(:,:),    POINTER :: laism, roufnssm, vegsm,        &
                                         snowdpthsm, raingsm, raincsm
  REAL, DIMENSION(:,:,:),  POINTER :: radfrcsm(:,:,:)
  REAL, DIMENSION(:,:),    POINTER :: radswsm, rnflxsm, radswnetsm, radlwinsm
  REAL, DIMENSION(:,:),    POINTER :: usflxsm, vsflxsm, ptsflxsm, qvsflxsm

  INTEGER :: procbgn             ! processor rank holds (ibgn,jbgn)
  INTEGER :: xpbgn, xpend, ypbgn, ypend
  INTEGER :: xpbgn1,xpend1,ypbgn1,ypend1
  INTEGER :: ibgnl,iendl,jbgnl,jendl
  INTEGER :: ibgnl1, iendl1
  INTEGER :: ibgnl2, jbgnl2      ! hold the value of ibgnl and jbgnl
                                 ! for vector plot
  INTEGER :: ibgnl21

  COMMON /processors/ xpbgn,xpend,ypbgn,ypend

  INTEGER :: lenfilb    ! the length of base file name, not including 
                        ! processor information
!
!-----------------------------------------------------------------------
!
!  Function f_qvsat and inline directives for Cray PVP
!
!-----------------------------------------------------------------------
!
  REAL :: f_qvsat

  REAL :: amin, amax, tem, pref
  REAL :: xr2, yr2
  INTEGER :: nch
  COMMON /XOUTCH/ nch


!fpp$ expand (f_qvsat)
!!dir$ inline always f_qvsat
!*$*  inline routine (f_qvsat)

!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!  Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  cpu0 = f_cputime()

  xi1= 50.0
  yi1= 50.0
  xi2= 50.0
  yi2= 50.0
  trcolor = 183   ! xz slice terrain color
  plotovr = .false.
  sovrlay = 0
  lbcolor = 1     ! laber color 1-black
  imsg = 1        ! Activate missing value checking for streamline routine
  uvmsg = -9999.0 ! Set the missing data value for streamline routine
  inita = 8
  initb = 8

  layover = 0
  ctinc = 0.0
  vtunt = 0.0
  aspratio = 1.0

  xnwpic_called =0

  first_frame = 1
!
!-----------------------------------------------------------------------
!
!  Set the max. and min. values for producing HDF images.
!
!-----------------------------------------------------------------------
!
  utmax =  40.0
  utmin = -40.0
  vtmax =  40.0
  vtmin = -40.0
  wtmax =  40.0
  wtmin = -40.0
  vsmax =  40.0
  vsmin = -40.0
  qvmax =  15.0
  qvmin =   0.0
  qcmax =   5.0
  qcmin =   0.0
  qrmax =  10.0
  qrmin =   0.0
  qimax =  10.0
  qimin =   0.0
  qsmax =  10.0
  qsmin =   0.0
  qhmax =  10.0
  qhmin =   0.0
  qwmax =  10.0
  qwmin =   0.0
  rhmax =   1.0
  rhmin =   0.0
  rhimax =   1.0
  rhimin =   0.0
  rfmax =  75.0
  rfmin =   0.0
  ptemax= 400.0
  ptemin= 250.0
  upmax =  40.0
  upmin = -40.0
  vpmax =  40.0
  vpmin = -40.0
  wpmax =  5.0
  wpmin = -5.0
  ptpmax=  0.0
  ptpmin= -8.0
  ppmax = 200.0
  ppmin =-200.0
  qvpmax=  10.0
  qvpmin=   0.0
  vormax=  0.02
  vormin= -0.02
  avormax=  0.02
  avormin= -0.02
  divmax=  0.02
  divmin= -0.02
  hmax =  2000.0
  hmin =    0.0
  tdmin = 200.
  tdmax = 400.

  time1c = 0.0
  time2c = 0.0
  time1g = 0.0
  time2g = 0.0
  time1t = 0.0
  time2t = 0.0
  timediff = 0.0

  CALL initpltpara(nx,ny,nz,nzsoil,nstyps)

!-----------------------------------------------------------------------
!
!  Set some parameters
!
!-----------------------------------------------------------------------
  trcolor = trncol1

  nxsm = (nx-3)/ncompressx + 3
  nysm = (ny-3)/ncompressy + 3
  nxlg = (nx-3)*nproc_x + 3
  nylg = (ny-3)*nproc_y + 3

  ipriority(1)=hprio
  ipriority(2)=tprio
  ipriority(3)=uprio
  ipriority(4)=vprio
  ipriority(5)=vhprio
  ipriority(6)=wprio
  ipriority(7)=ptprio
  ipriority(8)=pprio
  ipriority(9)=qvprio
  ipriority(10)=qcprio
  ipriority(11)=qrprio
  ipriority(12)=qiprio
  ipriority(13)=qsprio
  ipriority(14)=qhprio
  ipriority(15)=qwprio
  ipriority(16)=kmhprio
  ipriority(17)=kmvprio
  ipriority(18)=tkeprio
  ipriority(19)=rhprio
  ipriority(20)=tdprio
  ipriority(21)=rfprio
  ipriority(22)=pteprio
  ipriority(23)=upprio
  ipriority(24)=vpprio
  ipriority(25)=wpprio
  ipriority(26)=ptpprio
  ipriority(27)=ppprio
  ipriority(28)=qvpprio
  ipriority(29)=vorpprio
  ipriority(30)=divpprio
  ipriority(31)=divqprio

  ipriority(32)=vtrprio
  ipriority(33)=vtpprio

  ipriority(34)=vtrstmprio
  ipriority(35)=vtpstmprio

  ipriority(36)=rfcprio
  ipriority(37)=vsprio
  ipriority(38)=gricprio
  ipriority(39)=avorprio
  ipriority(40)=xuvprio
  ipriority(41)=qtprio
  ipriority(42)=rhiprio
  ipriority(43)=tsoilprio
  ipriority(44)=qsoilprio

  ipriority(51)=trnprio
  ipriority(56)=wcpprio
  ipriority(57)=racprio
  ipriority(58)=ragprio
  ipriority(59)=ratprio
  ipriority(60)=pslprio
  ipriority(61)=liprio
  ipriority(62)=capprio
  ipriority(63)=cinprio
  ipriority(64)=theprio
  ipriority(65)=helprio
  ipriority(66)=ctcprio
  ipriority(67)=brnprio
  ipriority(68)=bruprio
  ipriority(69)=srlprio
  ipriority(70)=srmprio
  ipriority(71)=capsprio
  ipriority(72)=blcoprio
  ipriority(73)=viqcprio
  ipriority(74)=viqrprio
  ipriority(75)=viqiprio
  ipriority(76)=viqsprio
  ipriority(77)=viqhprio
  ipriority(78)=vilprio
  ipriority(79)=viiprio
  ipriority(80)=vicprio
  ipriority(81)=strmprio
  ipriority(82)=vitprio
  ipriority(83)=pwprio
  ipriority(84)=tprprio
  ipriority(85)=gprprio
  ipriority(86)=cprprio

  ipriority(101)=styprio
  ipriority(102)=vtyprio
  ipriority(103)=laiprio
  ipriority(104)=rouprio
  ipriority(105)=vegprio
  ipriority(106)=snowdprio
  ipriority(107)=msfprio
  ipriority(108)=ipvprio
  ipriority(109)=vagprio
  ipriority(110)=thkprio

  ipriority(111)=raicprio
  ipriority(112)=raigprio
  ipriority(113)=raitprio

  DO i=1, var3dnum
    ipriority(150+i) = var3dprio(i)
  END DO

  DO i=1, var2dnum
    ipriority(170+i) = var2dprio(i)
  END DO

  nslice(1)=nslice_xy
  nslice(2)=nslice_xz
  nslice(3)=nslice_yz
  nslice(4)=nslice_h
  nslice(5)=nslice_v
  nslice(6)=nslice_p
  nslice(7)=nslice_pt
  nslice(8)= 1             ! surface plots
  iplot(8) = 1
  
  iplot(1:7)=1
  IF(nslice(1) == 0) iplot(1)=0
  IF(nslice(2) == 0) iplot(2)=0
  IF(nslice(3) == 0) iplot(3)=0
  IF(nslice(4) == 0) iplot(4)=0
  IF(nslice(5) == 0) iplot(5)=0
  IF(nslice(6) == 0) iplot(6)=0
  IF(nslice(7) == 0) iplot(7)=0
 
  nslice(9) =nslice_xy_soil
  nslice(10)=nslice_xz_soil
  nslice(11)=nslice_yz_soil

  iplot(9:11)=1
  IF(nslice(9)  == 0) iplot(9)=0
  IF(nslice(10) == 0) iplot(10)=0
  IF(nslice(11) == 0) iplot(11)=0
  
  DO indxslic = 1,nslice(5)
    xi1(indxslic)=xpnt1(indxslic)
    yi1(indxslic)=ypnt1(indxslic)
    xi2(indxslic)=xpnt2(indxslic)
    yi2(indxslic)=ypnt2(indxslic)
  END DO

  umove_readin = umove
  vmove_readin = vmove 
!
!-----------------------------------------------------------------------
!
!  When priority equal to zero , the order of the plotting is default.
!
!-----------------------------------------------------------------------
!
  DO i=1,nprio
    iptemp(i)=i
    sigplt(i)=0
  END DO
  iptemp(nprio)=0
 
!
!-----------------------------------------------------------------------
!
!  Allocate arrays.
!
!-----------------------------------------------------------------------
!

  ALLOCATE(x     (nx),STAT=istatus)        
  ALLOCATE(y     (ny),STAT=istatus)        
  ALLOCATE(z     (nz),STAT=istatus)        
  ALLOCATE(zp    (nx,ny,nz),STAT=istatus)  
  ALLOCATE(zpsoil(nx,ny,nzsoil),STAT=istatus)

  ALLOCATE(u     (nx,ny,nz),STAT=istatus)  
  ALLOCATE(v     (nx,ny,nz),STAT=istatus)  
  ALLOCATE(w     (nx,ny,nz),STAT=istatus)  
  ALLOCATE(ptprt (nx,ny,nz),STAT=istatus)  
  ALLOCATE(pprt  (nx,ny,nz),STAT=istatus)  
  ALLOCATE(qv    (nx,ny,nz),STAT=istatus)  
  ALLOCATE(qc    (nx,ny,nz),STAT=istatus)  
  ALLOCATE(qr    (nx,ny,nz),STAT=istatus)  
  ALLOCATE(qi    (nx,ny,nz),STAT=istatus)  
  ALLOCATE(qs    (nx,ny,nz),STAT=istatus)  
  ALLOCATE(qh    (nx,ny,nz),STAT=istatus)  
  ALLOCATE(tke   (nx,ny,nz),STAT=istatus)  
  ALLOCATE(kmh   (nx,ny,nz),STAT=istatus)  
  ALLOCATE(kmv   (nx,ny,nz),STAT=istatus)  

  ALLOCATE(ubar  (nx,ny,nz),STAT=istatus)  
  ALLOCATE(vbar  (nx,ny,nz),STAT=istatus)  
  ALLOCATE(wbar  (nx,ny,nz),STAT=istatus)  
  ALLOCATE(ptbar (nx,ny,nz),STAT=istatus)  
  ALLOCATE(pbar  (nx,ny,nz),STAT=istatus)  
  ALLOCATE(rhobar(nx,ny,nz),STAT=istatus)  
  ALLOCATE(qvbar (nx,ny,nz),STAT=istatus)  
                            
  ALLOCATE(soiltyp (nx,ny,nstyps),STAT=istatus)     
  ALLOCATE(stypfrct(nx,ny,nstyps),STAT=istatus)    
  ALLOCATE(vegtyp  (nx,ny),STAT=istatus) 
  ALLOCATE(lai     (nx,ny),STAT=istatus) 
  ALLOCATE(roufns  (nx,ny),STAT=istatus) 
  ALLOCATE(veg     (nx,ny),STAT=istatus) 

  ALLOCATE(tsoil   (nx,ny,nzsoil,0:nstyps),STAT=istatus)    
  ALLOCATE(qsoil   (nx,ny,nzsoil,0:nstyps),STAT=istatus)    
  ALLOCATE(wetcanp (nx,ny,0:nstyps),STAT=istatus)    
  ALLOCATE(snowdpth(nx,ny),STAT=istatus)            

  ALLOCATE(raing   (nx,ny),STAT=istatus)      
  ALLOCATE(rainc   (nx,ny),STAT=istatus)      
  ALLOCATE(raint   (nx,ny),STAT=istatus)      
  ALLOCATE(prcrate (nx,ny,4),STAT=istatus)     

  ALLOCATE(radfrc(nx,ny,nz),STAT=istatus)     

  ALLOCATE(radsw (nx,ny),STAT=istatus)        
  ALLOCATE(rnflx (nx,ny),STAT=istatus)        
  ALLOCATE(radswnet (nx,ny),STAT=istatus)        
  ALLOCATE(radlwin (nx,ny),STAT=istatus)        
  ALLOCATE(usflx (nx,ny),STAT=istatus)        
  ALLOCATE(vsflx (nx,ny),STAT=istatus)        
  ALLOCATE(ptsflx(nx,ny),STAT=istatus)        
  ALLOCATE(qvsflx(nx,ny),STAT=istatus)        

  ALLOCATE(uprt  (nx,ny,nz),STAT=istatus)  
  ALLOCATE(vprt  (nx,ny,nz),STAT=istatus)  
  ALLOCATE(wprt  (nx,ny,nz),STAT=istatus)  
  ALLOCATE(pt    (nx,ny,nz),STAT=istatus)  
  ALLOCATE(qvprt (nx,ny,nz),STAT=istatus)

  ALLOCATE(xc    (nx,ny,max(nz,nzsoil)),STAT=istatus)   ! shared with soil
  ALLOCATE(yc    (nx,ny,max(nz,nzsoil)),STAT=istatus)   ! shared with soil
  ALLOCATE(zc    (nx,ny,nz),            STAT=istatus)   
  ALLOCATE(zpc   (nx,ny,nz),            STAT=istatus)   
  ALLOCATE(zpsoilc(nx,ny,nzsoil),       STAT=istatus)   !Zuwen
                            
  ALLOCATE(acc_rainc(nx,ny,2),STAT=istatus)    
  ALLOCATE(acc_raing(nx,ny,2),STAT=istatus)    
  ALLOCATE(acc_raint(nx,ny,2),STAT=istatus)    

  ALLOCATE(hterain(nx,ny),    STAT=istatus)    
 
  ALLOCATE(psl   (nx,ny),     STAT=istatus)      
  ALLOCATE(td    (nx,ny,nz),  STAT=istatus)   
 
  ALLOCATE(tz    (nx,ny,nz),  STAT=istatus)   
  ALLOCATE(t700  (nx,ny),     STAT=istatus)    

  ALLOCATE(algpzc(nx,ny,nz),  STAT=istatus) 
  ALLOCATE(zps3d (nx,ny,nz),  STAT=istatus)  
  ALLOCATE(zpsoils3d (nx,ny,nzsoil),STAT=istatus)  

  ALLOCATE(wrk1 (nz),wrk2 (nz),wrk3 (nz),STAT=istatus)
  ALLOCATE(wrk4 (nz),wrk5 (nz),wrk6 (nz),STAT=istatus)
  ALLOCATE(wrk7 (nz),wrk8 (nz),wrk9 (nz),STAT=istatus)
  ALLOCATE(wrk10(nz),wrk11(nz),wrk12(nz),STAT=istatus)

  ALLOCATE(lcl  (nx,ny),STAT=istatus)    
  ALLOCATE(lfc  (nx,ny),STAT=istatus)    
  ALLOCATE(el   (nx,ny),STAT=istatus)     
  ALLOCATE(twdf (nx,ny),STAT=istatus)   
  ALLOCATE(mbe  (nx,ny),STAT=istatus)    

  ALLOCATE(li   (nx,ny),STAT=istatus)     
  ALLOCATE(cape (nx,ny),STAT=istatus)   
  ALLOCATE(cin  (nx,ny),STAT=istatus)    
  ALLOCATE(thet (nx,ny),STAT=istatus)   
  ALLOCATE(heli (nx,ny),STAT=istatus)   
  ALLOCATE(brn  (nx,ny),STAT=istatus)    
  ALLOCATE(brnu (nx,ny),STAT=istatus)   
  ALLOCATE(srlfl(nx,ny),STAT=istatus)  
  ALLOCATE(srmfl(nx,ny),STAT=istatus)  
  ALLOCATE(shr37(nx,ny),STAT=istatus)  
  ALLOCATE(ustrm(nx,ny),STAT=istatus)  
  ALLOCATE(vstrm(nx,ny),STAT=istatus)  

  ALLOCATE(capst(nx,ny),STAT=istatus)  
  ALLOCATE(blcon(nx,ny),STAT=istatus)  
  ALLOCATE(ct   (nx,ny),STAT=istatus)     
  ALLOCATE(sinlat(nx,ny),STAT=istatus) 

  ALLOCATE(xs(nx),STAT=istatus)
  ALLOCATE(ys(ny),STAT=istatus)

  ALLOCATE(tem1(nx,ny,max(nz,nzsoil)),STAT=istatus)
  ALLOCATE(tem2(nx,ny,max(nz,nzsoil)),STAT=istatus)
  ALLOCATE(tem3(nx,ny,max(nz,nzsoil)),STAT=istatus)
  ALLOCATE(tem4(nx,ny,max(nz,nzsoil)),STAT=istatus)
  ALLOCATE(tem5(nx,ny,max(nz,nzsoil)),STAT=istatus)
  ALLOCATE(tem6(nx,ny,max(nz,nzsoil)),STAT=istatus)
  ALLOCATE(tem7(nx,ny,max(nz,nzsoil)),STAT=istatus)
  ALLOCATE(tem8(nx,ny,max(nz,nzsoil)),STAT=istatus)
  ALLOCATE(tem9(nx,ny,max(nz,nzsoil)),STAT=istatus)

  ALLOCATE(b1(nx,ny),STAT=istatus)
  ALLOCATE(b2(nx,ny),STAT=istatus)
  ALLOCATE(u1(nx,ny),STAT=istatus)
  ALLOCATE(v1(nx,ny),STAT=istatus)

  ALLOCATE(u2 (nx+ny,nz),STAT=istatus)
  ALLOCATE(v2 (nx+ny,nz),STAT=istatus)
  ALLOCATE(w2 (nx+ny,nz),STAT=istatus)
  ALLOCATE(zs2(nx+ny,nz),STAT=istatus)
  ALLOCATE(xp (nx+ny),STAT=istatus)
  ALLOCATE(yp (nx+ny),STAT=istatus)

  ALLOCATE(var3dv(nx,ny,nz),STAT=istatus)
  ALLOCATE(var2dv(nx,ny),STAT=istatus)
  ALLOCATE(fcorio(nx,ny),STAT=istatus)
  ALLOCATE(mapfct(nx,ny),STAT=istatus)
  CALL check_alloc_status(istatus, "arpsplt:mapfct")

  x     =0.0
  y     =0.0
  z     =0.0
  zp    =0.0
  zpsoil=0.0

  u     =0.0
  v     =0.0
  w     =0.0
  ptprt =0.0
  pprt  =0.0
  qv    =0.0
  qc    =0.0
  qr    =0.0
  qi    =0.0
  qs    =0.0
  qh    =0.0
  tke   =0.0
  kmh   =0.0
  kmv   =0.0

  ubar  =0.0
  vbar  =0.0
  wbar  =0.0
  ptbar =0.0
  pbar  =0.0
  rhobar=0.0
  qvbar =0.0
                            
  soiltyp =0.0
  stypfrct=0.0
  vegtyp  =0.0
  lai     =0.0
  roufns  =0.0
  veg     =0.0

  tsoil   =0.0
  qsoil   =0.0
  wetcanp =0.0
  snowdpth=0.0

  raing   =0.0
  rainc   =0.0
  raint   =0.0
  prcrate =0.0

  radfrc=0.0

  radsw =0.0
  rnflx =0.0
  usflx =0.0
  vsflx =0.0
  ptsflx=0.0
  qvsflx=0.0

  uprt  =0.0
  vprt  =0.0
  wprt  =0.0
  pt    =0.0
  qvprt =0.0

  xc    =0.0
  yc    =0.0
  zc    =0.0
  zpc   =0.0
  zpsoilc   =0.0
                            
  acc_rainc = 0.0
  acc_raing = 0.0
  acc_raint = 0.0

  hterain=0.0
 
  psl   =0.0
  td    =0.0
 
  tz    =0.0
  t700  =0.0

  algpzc=0.0
  zps3d =0.0
  zpsoils3d =0.0

  wrk1 =0.0
  wrk4 =0.0
  wrk7 =0.0
  wrk10=0.0

  lcl  =0.0
  lfc  =0.0
  el   =0.0
  twdf =0.0
  mbe  =0.0

  li   =0.0
  cape =0.0
  cin  =0.0
  thet =0.0
  heli =0.0
  brn  =0.0
  brnu =0.0
  srlfl=0.0
  srmfl=0.0
  shr37=0.0
  ustrm=0.0
  vstrm=0.0

  capst=0.0
  blcon=0.0
  ct   =0.0
  sinlat=0.0

  xs=0.0
  ys=0.0

  tem1=0.0
  tem2=0.0
  tem3=0.0
  tem4=0.0
  tem5=0.0
  tem6=0.0
  tem7=0.0
  tem8=0.0
  tem9=0.0

  b1=0.0
  b2=0.0
  u1=0.0
  v1=0.0

  u2 =0.0
  v2 =0.0
  w2 =0.0
  zs2=0.0
  xp =0.0
  yp =0.0

  var3dv=0.0
  var2dv=0.0
  fcorio=0.0

!-----------------------------------------------------------------------
!
!  Allocate arrays for smaller subdomain if needed
!
!-----------------------------------------------------------------------

  IF(ncompressx > 1 .OR. ncompressy > 1) THEN    ! allocate arrays
                                                 ! otherwise, just link pointers
    ALLOCATE(xsm     (nxsm),            STAT=istatus)        
    ALLOCATE(ysm     (nysm),            STAT=istatus)        
    ALLOCATE(zpsm    (nxsm,nysm,nz),    STAT=istatus)  
    ALLOCATE(zpsoilsm(nxsm,nysm,nzsoil),STAT=istatus)
  
    ALLOCATE(uprtsm(nxsm,nysm,nz), STAT=istatus)  
    ALLOCATE(vprtsm(nxsm,nysm,nz), STAT=istatus)  
    ALLOCATE(wprtsm(nxsm,nysm,nz), STAT=istatus)  
    ALLOCATE(ptprtsm(nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(pprtsm(nxsm,nysm,nz), STAT=istatus)  
    ALLOCATE(qvprtsm(nxsm,nysm,nz),STAT=istatus)
  
    ALLOCATE(qcsm  (nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(qrsm  (nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(qism  (nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(qssm  (nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(qhsm  (nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(tkesm (nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(kmhsm (nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(kmvsm (nxsm,nysm,nz),STAT=istatus)  
  
    ALLOCATE(ubarsm  (nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(vbarsm  (nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(wbarsm  (nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(ptbarsm (nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(pbarsm  (nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(rhobarsm(nxsm,nysm,nz),STAT=istatus)  
    ALLOCATE(qvbarsm (nxsm,nysm,nz),STAT=istatus)  

    ALLOCATE(soiltypsm (nxsm,nysm,nstyps),STAT=istatus)     
    ALLOCATE(stypfrctsm(nxsm,nysm,nstyps),STAT=istatus)    
    ALLOCATE(vegtypsm  (nxsm,nysm),STAT=istatus) 
    ALLOCATE(laism     (nxsm,nysm),STAT=istatus) 
    ALLOCATE(roufnssm  (nxsm,nysm),STAT=istatus) 
    ALLOCATE(vegsm     (nxsm,nysm),STAT=istatus) 
  
    ALLOCATE(tsoilsm   (nxsm,nysm,nzsoil,0:nstyps),STAT=istatus)    
    ALLOCATE(qsoilsm   (nxsm,nysm,nzsoil,0:nstyps),STAT=istatus)    
    ALLOCATE(wetcanpsm (nxsm,nysm,0:nstyps),STAT=istatus)    
    ALLOCATE(snowdpthsm(nxsm,nysm),STAT=istatus)            
  
    ALLOCATE(raingsm   (nxsm,nysm),STAT=istatus)      
    ALLOCATE(raincsm   (nxsm,nysm),STAT=istatus)      
    ALLOCATE(prcratesm (nxsm,nysm,4),STAT=istatus)     
  
    ALLOCATE(radfrcsm(nxsm,nysm,nz),STAT=istatus)     
  
    ALLOCATE(radswsm (nxsm,nysm),STAT=istatus)        
    ALLOCATE(rnflxsm (nxsm,nysm),STAT=istatus)        
    ALLOCATE(radswnetsm (nxsm,nysm),STAT=istatus)        
    ALLOCATE(radlwinsm (nxsm,nysm),STAT=istatus)        
    ALLOCATE(usflxsm (nxsm,nysm),STAT=istatus)        
    ALLOCATE(vsflxsm (nxsm,nysm),STAT=istatus)        
    ALLOCATE(ptsflxsm(nxsm,nysm),STAT=istatus)        
    ALLOCATE(qvsflxsm(nxsm,nysm),STAT=istatus)        
    CALL check_alloc_status(istatus, "arpsplt:qvsflxsm")
  
      xsm     = 0.0
      ysm     = 0.0
      zpsm    = 0.0
      zpsoilsm= 0.0
    
      uprtsm  = 0.0
      vprtsm  = 0.0
      wprtsm  = 0.0
      ptprtsm = 0.0
      pprtsm  = 0.0
      qvprtsm = 0.0
      qcsm    = 0.0
      qrsm    = 0.0
      qism    = 0.0
      qssm    = 0.0
      qhsm    = 0.0
      tkesm   = 0.0
      kmhsm   = 0.0
      kmvsm   = 0.0
    
      ubarsm  = 0.0
      vbarsm  = 0.0
      wbarsm  = 0.0
      ptbarsm = 0.0
      pbarsm  = 0.0
      rhobarsm= 0.0
      qvbarsm = 0.0
                                
      soiltypsm = 0.0
      stypfrctsm= 0.0
      vegtypsm  = 0.0
      laism     = 0.0
      roufnssm  = 0.0
      vegsm     = 0.0
    
      tsoilsm   = 0.0
      qsoilsm   = 0.0
      wetcanpsm = 0.0
      snowdpthsm= 0.0
    
      raingsm   = 0.0
      raincsm   = 0.0
      prcratesm = 0.0
    
      radfrcsm  = 0.0
    
      radswsm    = 0.0
      rnflxsm    = 0.0
      radswnetsm = 0.0
      radlwinsm  = 0.0
      usflxsm    = 0.0
      vsflxsm    = 0.0
      ptsflxsm   = 0.0
      qvsflxsm   = 0.0
  
    ELSE
      xsm      => x
      ysm      => y
      zpsm     => zp
      zpsoilsm => zpsoil
      uprtsm   => uprt
      vprtsm   => vprt
      wprtsm   => wprt
      ptprtsm  => ptprt
      pprtsm   => pprt
      qvprtsm  => qvprt
      qcsm     => qc
      qrsm     => qr
      qism     => qi
      qssm     => qs
      qhsm     => qh
      tkesm    => tke
      kmhsm    => kmh
      kmvsm    => kmv
      ubarsm   => ubar
      vbarsm   => vbar
      wbarsm   => wbar
      ptbarsm  => ptbar
      pbarsm   => pbar
      rhobarsm => rhobar
      qvbarsm  => qvbar
  
      soiltypsm  => soiltyp
      stypfrctsm => stypfrct
      vegtypsm   => vegtyp
      laism      => lai
      roufnssm   => roufns
      vegsm      => veg
  
      tsoilsm    => tsoil
      qsoilsm    => qsoil
      wetcanpsm  => wetcanp
      snowdpthsm => snowdpth
     
      raingsm    => raing
      raincsm    => rainc
      prcratesm  => prcrate
  
      radfrcsm   => radfrc
      radswsm    => radsw
      rnflxsm    => rnflx
      radswnetsm => radswnet
      radlwinsm  => radlwin
      usflxsm    => usflx
      vsflxsm    => vsflx
      ptsflxsm   => ptsflx
      qvsflxsm   => qvsflx
    
  END IF

  IF(myproc == 0) THEN
!-----------------------------------------------------------------------
!
!  Overlaying observations
!
!-----------------------------------------------------------------------

    IF(ovrobs == 1) THEN
      lsfcobfl=LEN(sfcobfl)
      CALL strlnth(sfcobfl,lsfcobfl)

      INQUIRE(FILE=sfcobfl(1:lsfcobfl), EXIST = fexist )
      IF( .NOT.fexist) THEN
        WRITE(6,'(a)') 'Surface obs file '//sfcobfl(1:lsfcobfl)//         &
            ' not found. Program will continue.'
      END IF
      CALL getunit(obunit)
      CALL read_surface_obs(sfcobfl,mxsfcob,atime,n_meso_g,               &
           n_meso_pos,n_sao_g,n_sao_pos_g,n_sao_b,n_sao_pos_b,n_obs_g,    &
           n_obs_pos_g,n_obs_b,n_obs_pos_b,                               &
           stn,obstype,latob,lonob,elevob,wx,                             &
           tob,tdob,dd,ff,ddg,ffg,pstn,pmsl,alt,                          &
           kloud,ceil,lowcld,cover,rad,                                   &
           idp3,store_emv,store_amt,store_hgt,vis,obstime,istatus)
  
      nobs=n_obs_b
  
    END IF
  
!-----------------------------------------------------------------------
!
!  Overlaying airport location
!
!-----------------------------------------------------------------------
!
    IF(ovrstaopt /= 0) THEN
      lstalofl=LEN(stalofl)
      CALL strlnth(stalofl,lstalofl)

      INQUIRE(FILE=stalofl(1:lstalofl), EXIST = fexist )
      IF( .NOT.fexist) THEN
        WRITE(6,'(a)') 'WARNING: Surface obs file '                       &
            //stalofl(1:lstalofl)//                                       &
            ' not found. Program continue in ARPSPLT.'
      ELSE
        CALL getunit(stunit)
        CALL read_station(stalofl,mxstalo,latsta,lonsta,nstatyp,          &
                    nstapro,nsta,s_name,s_state,s_site,s_elev)
        IF(nsta > 0) staset=1
      END IF
    END IF

  END IF   ! myproc == 0
  CALL mpupdatei(n_obs_b,1)
  CALL mpupdatei(staset,1)

!-----------------------------------------------------------------------
!
! Plot beginning below
!
!-----------------------------------------------------------------------

  zxplot_called=0

  DO nf=1, nhisfile

    sigplt(:) = 0

    filename=hisfile(nf)
    lenfilb = len_trim(filename)

    lengbf = len_trim(grdbasfn)

    second1= f_walltime()
    cpu1   = f_cputime()

    DO jj = 1, ncompressy
      DO ii = 1, ncompressx
        IF (mp_opt > 0 .AND. readsplit <= 0) THEN
          WRITE(grdbasfn(lengbf-5+1:lengbf) ,'(a,i2.2,i2.2)') '_',     &
                     ncompressx*(loc_x-1)+ii,ncompressy*(loc_y-1)+jj
          lengbf = lengbf
          WRITE(filename(lenfilb+1:lenfilb+5),'(a,i2.2,i2.2)') '_',    &
                     ncompressx*(loc_x-1)+ii,ncompressy*(loc_y-1)+jj
          lenfil= lenfilb + 5
        ELSE
          lenfil = lenfilb
        END IF

!        15  CONTINUE         ! also continue to read another time recode
!                             ! from GrADS file
!
!-----------------------------------------------------------------------
!
!  Read all input data arrays
!
!-----------------------------------------------------------------------
!
        CALL setgbrd(0)      ! read grid/base state file

  IF (nproc_node <= 1) THEN  ! the first readstride processes read then 
                             ! the next readstride processes and so on
!  blocking inserted for ordering i/o for message passing
!  DO i=nprocs-1,0,-1*readstride
!    IF(myproc <= i .AND. myproc >= i-readstride+1) THEN
  DO i=0,nprocs-1,readstride
    IF(myproc >= i .AND. myproc <= i+readstride-1) THEN

        IF (myproc == 0 .OR. readsplit < 1) WRITE(6,'(a,I5,a,a/)')      &
             'processor: ',myproc, ' reading file: ', filename(1:lenfil)

        CALL dtaread(nxsm,nysm,nz,nzsoil, nstyps,                       &
                hinfmt, nchin,grdbasfn(1:lengbf),lengbf,                &
                filename(1:lenfil),lenfil,time,                         &
                xsm,ysm,z,zpsm,zpsoilsm,                                &
                uprtsm,vprtsm,wprtsm,ptprtsm, pprtsm, qvprtsm,          &
                qcsm,qrsm,qism,qssm,qhsm,tkesm,kmhsm,kmvsm,             &
                ubarsm,vbarsm,wbarsm,ptbarsm,pbarsm,rhobarsm,qvbarsm,   &
                soiltypsm,stypfrctsm,vegtypsm,laism,roufnssm,vegsm,     &
                tsoilsm,qsoilsm,wetcanpsm,snowdpthsm,                   &
                raingsm,raincsm,prcratesm,                              &
                radfrcsm,radswsm,rnflxsm,radswnetsm,radlwinsm,          &
                usflxsm,vsflxsm,ptsflxsm,qvsflxsm,                      &
                ireturn, tem1,tem2, tem3)
    END IF
    IF (mp_opt > 0) CALL mpbarrier
  END DO
 
  ELSE      ! Only one process read at one node

  DO i=0,nproc_node-1

    IF (MOD(myproc,nproc_node) == i) THEN

        IF (myproc == 0 .OR. readsplit < 1) WRITE(6,'(a,I5,a,a/)')      &
             'processor: ',myproc, ' reading file: ', filename(1:lenfil)

        CALL dtaread(nxsm,nysm,nz,nzsoil, nstyps,                       &
                hinfmt, nchin,grdbasfn(1:lengbf),lengbf,                &
                filename(1:lenfil),lenfil,time,                         &
                xsm,ysm,z,zpsm,zpsoilsm,                                &
                uprtsm,vprtsm,wprtsm,ptprtsm, pprtsm, qvprtsm,          &
                qcsm,qrsm,qism,qssm,qhsm,tkesm,kmhsm,kmvsm,             &
                ubarsm,vbarsm,wbarsm,ptbarsm,pbarsm,rhobarsm,qvbarsm,   &
                soiltypsm,stypfrctsm,vegtypsm,laism,roufnssm,vegsm,     &
                tsoilsm,qsoilsm,wetcanpsm,snowdpthsm,                   &
                raingsm,raincsm,prcratesm,                              &
                radfrcsm,radswsm,rnflxsm,radswnetsm,radlwinsm,          &
                usflxsm,vsflxsm,ptsflxsm,qvsflxsm,                      &
                ireturn, tem1,tem2, tem3)
    END IF
    IF (mp_opt > 0) CALL mpbarrier
  END DO
 
  END IF

!
!-----------------------------------------------------------------------
!
!  ireturn = 0 for a successful read
!  For hinfmt=9, i.e. the GraDs format data, ireturn is used as a
!  flag indicating if there is any data at more time level to be read.
!
!-----------------------------------------------------------------------
!
        IF( ireturn /= 0 .AND. hinfmt /= 9 ) GO TO 700 ! unsuccessful read

        IF(ncompressx > 1 .OR. ncompressy > 1) THEN    ! need join

          DO j = 1, nysm
            ja = (jj-1)*(nysm-3)+j
            DO i = 1, nxsm
              ia = (ii-1)*(nxsm-3)+i
  
              x(ia) = xsm(i)
  
              vegtyp(ia,ja) = vegtypsm(i,j)
              lai(ia,ja)    = laism(i,j)
              roufns(ia,ja) = roufnssm(i,j)
              veg(ia,ja)    = vegsm(i,j)
              snowdpth(ia,ja) = snowdpthsm(i,j)
              raing(ia,ja) = raingsm(i,j)
              rainc(ia,ja) = raincsm(i,j)
              radsw(ia,ja)    = radswsm(i,j)
              radswnet(ia,ja) = radswnetsm(i,j)
              radlwin(ia,ja) = radlwinsm(i,j)
              rnflx(ia,ja)    = rnflxsm(i,j)
              usflx(ia,ja)  = usflxsm(i,j)
              vsflx(ia,ja)  = vsflxsm(i,j)
              ptsflx(ia,ja) = ptsflxsm(i,j)
              qvsflx(ia,ja) = qvsflxsm(i,j)
  
              prcrate(ia,ja,:) = prcratesm(i,j,:)
  
              zp(ia,ja,:)      = zpsm(i,j,:)
              zpsoil(ia,ja,:)  = zpsoilsm(i,j,:)
              uprt(ia,ja,:)  = uprtsm(i,j,:)
              vprt(ia,ja,:)  = vprtsm(i,j,:)
              wprt(ia,ja,:)  = wprtsm(i,j,:)
              ptprt(ia,ja,:) = ptprtsm(i,j,:)
              pprt(ia,ja,:)  = pprtsm(i,j,:)
              qvprt(ia,ja,:) = qvprtsm(i,j,:)
              qc(ia,ja,:)  = qcsm(i,j,:)
              qr(ia,ja,:)  = qrsm(i,j,:)
              qi(ia,ja,:)  = qism(i,j,:)
              qs(ia,ja,:)  = qssm(i,j,:)
              qh(ia,ja,:)  = qhsm(i,j,:)
              tke(ia,ja,:) = tkesm(i,j,:)
              kmh(ia,ja,:) = kmhsm(i,j,:)
              kmv(ia,ja,:) = kmvsm(i,j,:)
              ubar(ia,ja,:)  = ubarsm(i,j,:)
              vbar(ia,ja,:)  = vbarsm(i,j,:)
              wbar(ia,ja,:)  = wbarsm(i,j,:)
              ptbar(ia,ja,:) = ptbarsm(i,j,:)
              pbar(ia,ja,:)  = pbarsm(i,j,:)
              rhobar(ia,ja,:) = rhobarsm(i,j,:)
              qvbar(ia,ja,:) = qvbarsm(i,j,:)
              radfrc(ia,ja,:) = radfrcsm(i,j,:)
  
              soiltyp(ia,ja,:)  = soiltypsm(i,j,:)
              stypfrct(ia,ja,:) = stypfrctsm(i,j,:)
  
              tsoil(ia,ja,:,:) = tsoilsm(i,j,:,:)
              qsoil(ia,ja,:,:) = qsoilsm(i,j,:,:)
              wetcanp(ia,ja,:) = wetcanpsm(i,j,:)
            END DO    !i
            y(ja) = ysm(j)
          END DO      !j

        END IF   ! need join
         
      END DO   !ii
    END DO   ! jj

!    IF(ncompressx > 1 .OR. ncompressy > 1) THEN    ! DEALLOCATE arrays
!
!      DEALLOCATE(xsm, ysm, zpsm, zpsoilsm)
!
!      DEALLOCATE(uprtsm,vprtsm,wprtsm,ptprtsm,pprtsm,qvprtsm)
!      DEALLOCATE(qcsm, qrsm, qism, qssm, qhsm)
!      DEALLOCATE(tkesm, kmhsm, kmvsm)
!      DEALLOCATE(ubarsm, vbarsm, wbarsm, ptbarsm, pbarsm)
!      DEALLOCATE(rhobarsm, qvbarsm)
!
!      DEALLOCATE(soiltypsm, stypfrctsm, vegtypsm)
!      DEALLOCATE(laism, roufnssm, vegsm)
!      DEALLOCATE(tsoilsm, qsoilsm, wetcanpsm, snowdpthsm)
!
!      DEALLOCATE(raingsm, raincsm, prcratesm)
!      DEALLOCATE(radfrcsm, radswsm, rnflxsm, radswnetsm, radlwinsm)
!      DEALLOCATE(usflxsm, vsflxsm, ptsflxsm, qvsflxsm)
!    END IF

    cpu2    = f_cputime()
    second2 = f_walltime()

!  print*,'!!!!  total clock time for read data:',second2-second1
!  print*,'!!!!  total cpu time for read data  :', cpu2-cpu1

!
!-----------------------------------------------------------------------
!
!  Set ice to be icein and then ice is used to control if snow and
!  graupel/hail affect reflectivity calculation in REFLEC.
!
!-----------------------------------------------------------------------
!
    ice = icein

    CALL gtlfnkey( runname, lfnkey )

    mgrid = 1    ! Grid number 1
    nestgrd = 0  ! Not nested grid data

    IF(zxplot_called == 0 .AND. myproc == 0) THEN
!
!-----------------------------------------------------------------------
!
!  Initialize ZXPLOT plotting package
!
!-----------------------------------------------------------------------
!
! The following two ZXPLOT routines, if called, should be called before xdevic
!
      zxout_unit=2
      
      CALL xpsfn(runname(1:lfnkey)//'.ps', zxout_unit)
      CALL xpaprlnth( paprlnth )

      CALL xdevic

      CALL xstctfn(color_map)

      CALL xsetclrs(col_table)

!  CALL xafstyl(1)
      CALL xcolor(lbcolor)

      CALL xartyp(2)

      CALL xlnmag(lnmag)
      CALL xcfont(fontopt)
      CALL xlabmask(lbmaskopt)

      IF(ctrlbopt == 0) CALL xcltyp(0)
      IF(ctrlbopt == 1) CALL xclfmt('(f10.1)')
      IF(ctrlbopt == 2) CALL xclfmt('(I10)')

      CALL xcmixl
      IF( ctrstyle == 2) THEN
        CALL xcfull
      ELSE IF( ctrstyle == 3) THEN
        CALL xcdash
      END IF

      CALL xclfrq( ctrlbfrq )

      CALL xctrbadv( 1 )  ! Turn on missing value checking for contouring
      CALL xvtrbadv( 1 )  ! Turn on missing value checking for vector plotting
!
!  Default value of -9999.0 for the flag is used.
!
      CALL xbadval ( -9999.0 ) ! Set the missing value flag to -9999.0
!
!  above three routines were not available with older version of ZXPLOT.
!
      CALL xdspac(0.9*winsiz)

      IF( nxpic == 1 .AND. nypic == 1) CALL xdspac( 0.85*winsiz)
      IF( layout == 1 ) THEN
        angl = 00.0
      ELSE
        angl = 90.0
      END IF
      CALL xspace(nxpic, nypic, angl , xlimit,ylimit)
      IF(axlbfmt == (-1)) THEN
        CALL xaxfmt( '*' )
      ELSE IF(axlbfmt == 0) THEN
        CALL xaxfmt( '(i5)' )
      ELSE
        WRITE(stem1,'(i1)')     axlbfmt
        WRITE(stem2,'(a,a1,a)') '(f8.',stem1,')'
        CALL xaxfmt( stem2 )
      END IF

      layover = 0
      CALL xpmagn(margnx*xlimit, margny*ylimit)

    END IF  ! Initalization of plotting package and parameters

!
!   Somewhere in one of the above calls, NCH gets set.  Pass it around.
!
    CALL mpupdatei(nch,1)

    zxplot_called=1
!
!-----------------------------------------------------------------------
!
!  Add the domain translation/grid movement speed back to the wind fields,
!  so that the wind is the Earth relative.
!
!-----------------------------------------------------------------------
!
    IF( imove == 1 ) THEN
      uadd = umove_readin
      vadd = vmove_readin
    ELSEIF( imove == 2 ) THEN
      uadd = umove
      vadd = vmove
    ELSE
      uadd = 0.0
      vadd = 0.0
    END IF

    DO k=1,nz
      DO j=1,ny
        DO i=1,nx
          u(i,j,k)=uprt(i,j,k)+ubar(i,j,k)+uadd
          v(i,j,k)=vprt(i,j,k)+vbar(i,j,k)+vadd
          w(i,j,k)=wprt(i,j,k)+wbar(i,j,k)
          qv(i,j,k)=MAX(0.0,qvprt(i,j,k)+qvbar(i,j,k))
          pt(i,j,k)=ptprt(i,j,k)+ptbar(i,j,k)
          tem1(i,j,k)=0.0
          tem2(i,j,k)=0.0
          tem3(i,j,k)=0.0
          tem4(i,j,k)=0.0
        END DO
      END DO
    END DO

!
!-----------------------------------------------------------------------
!
!  Set coordinates at the grid volume center
!
!-----------------------------------------------------------------------
!
    DO k=1,max(nz,nzsoil)
      DO j=1,ny
        DO i=1,nx-1
          xc(i,j,k) = (x(i)+x(i+1))*0.5 *0.001
        END DO
      END DO
    END DO

    DO k=1,max(nz,nzsoil)
      DO j=1,ny-1
        DO i=1,nx
          yc(i,j,k) = (y(j)+y(j+1))*0.5 *0.001
        END DO
      END DO
    END DO

    DO k=1,nz-1
      DO j=1,ny
        DO i=1,nx
          zc(i,j,k) = (z(k)+z(k+1))*0.5 *0.001
          zpc(i,j,k)= (zp(i,j,k)+zp(i,j,k+1))*0.5 *0.001  ! km
        END DO
      END DO
    END DO

!
! 05/30/2002 Zuwen He 
!
! zpsoilc is the vertical distance of the soil model 
! from the terrain surface in meters. 
!

    DO k=1,nzsoil
      DO j=1,ny
        DO i=1,nx
          zpsoilc(i,j,k)=(zpsoil(i,j,k)-zpsoil(i,j,1))*100. 
                        ! cm for soil model, Zuwen 
        END DO
      END DO
    END DO
!
! END Zuwen
!
!-----------------------------------------------------------------------
!
!  Set negative logrithm pressure (Pascal) coordinates
!  for scalar and w grid points
!
!-----------------------------------------------------------------------
!
    DO k=1,nz-1
      DO j=1,ny-1
        DO i=1,nx-1
          algpzc(i,j,k) = -ALOG(pbar(i,j,k)+pprt(i,j,k))
        END DO
      END DO
    END DO
!
!-----------------------------------------------------------------------
!
!  Calculate temperature (K) at ARPS grid points and 700mb
!  pressure level
!
!-----------------------------------------------------------------------
!
    CALL temper (nx,ny,nz,pt, pprt ,pbar,tz)
    zlevel=-ALOG(70000.0)
    CALL hintrp(nx,ny,nz,tz,algpzc,zlevel,t700)
!
!----------------------------------------------------------------------
!
!  Calculate sea level pressure (mb)
!  Reduction method: Benjamin and Miller: 1990, MWR, vol.118, No.10,
!                   Page: 2100-2101
!
!-----------------------------------------------------------------------
!
    DO i=1,nx-1
      DO j=1,ny-1
        p00 = 0.01*(pbar(i,j,2)+pprt(i,j,2))
        IF(p00 <= 700.0) THEN
          t00=tz(i,j,2)
        ELSE
          t00 = t700(i,j)*(p00/700.0)**ex1
        END IF
        psl(i,j) = p00*((t00+gamma*zpc(i,j,2))/t00)**ex2
      END DO
    END DO

!
!-----------------------------------------------------------------------
!
!  Calculate dew-point temperature td using enhanced Teten's formula.
!
!-----------------------------------------------------------------------
!
    DO k=1,nz-1
      DO j=1,ny-1
        DO i=1,nx-1
          tem1(i,j,k) = pbar(i,j,k )+pprt (i,j,k)
          tem3(i,j,k) = ptbar(i,j,k)+ptprt(i,j,k)
        END DO
      END DO
    END DO

    CALL temper(nx,ny,nz,tem3, pprt ,pbar,tem2)
    CALL getdew(nx,ny,nz, 1,nx-1,1,ny-1,1,nz-1, tem1, tem2, qv, td)
!
!-----------------------------------------------------------------------
!
!  Calculate CAPE and CIN
!  change qv to mixing ratio
!
!-----------------------------------------------------------------------
!
    CALL edgfill(u,1,nx,1,nx,1,ny,1,ny-1,1,nz,1,nz-1)
    CALL edgfill(v,1,nx,1,nx-1,1,ny,1,ny,1,nz,1,nz-1)
    
!    IF (mp_opt > 0) THEN    ! If we know the read-in data is valid
!                            ! there is no need to call message passing
!      CALL acc_interrupt(mp_acct)
!      CALL mpsendrecv2dew(u,nx,ny,nz,1,1,1,tem4)
!      CALL mpsendrecv2dns(u,nx,ny,nz,1,1,1,tem5)
!      
!      CALL mpsendrecv2dew(v,nx,ny,nz,1,1,2,tem4)
!      CALL mpsendrecv2dns(v,nx,ny,nz,1,1,2,tem5)
!      
!      CALL mpsendrecv2dew(qv,nx,ny,nz,1,1,0,tem4)
!      CALL mpsendrecv2dns(qv,nx,ny,nz,1,1,0,tem5)
!
!      CALL mpsendrecv2dew(pprt,nx,ny,nz,1,1,0,tem4)
!      CALL mpsendrecv2dns(pprt,nx,ny,nz,1,1,0,tem5)
!
!      CALL mpsendrecv2dew(pbar,nx,ny,nz,1,1,0,tem4)
!      CALL mpsendrecv2dns(pbar,nx,ny,nz,1,1,0,tem5)
!    END IF
    
    DO k=1,nz-1
      DO j=1,ny-1
        DO i=1,nx-1
          tem6(i,j,k)=0.5*(u(i,j,k)+u(i+1,j,k))
          tem7(i,j,k)=0.5*(v(i,j,k)+v(i,j+1,k))
          tem8(i,j,k)=qv(i,j,k)/(1.-qv(i,j,k))
          tem9(i,j,k)=pprt(i,j,k)+pbar(i,j,k)
        END DO
      END DO
    END DO

    CALL edgfill(tem6,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1)
    CALL edgfill(tem7,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1)
    CALL edgfill(tem8,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1)
    CALL edgfill(tem9,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1)
    CALL edgfill(tz,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1)
    CALL edgfill(td,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,1,nz-1)

    IF (capeplt /= 0 .OR. cinplt /= 0 .OR. capsplt /= 0 .OR.            &
          liplt /= 0 .OR. brnplt /= 0) THEN
      second1= f_walltime()
      cpu1 = f_cputime()
      CALL arps_be(nx,ny,nz,                                            &
                   tem9,zpc,tz,tem8,                                    &
                   lcl,lfc,el,twdf,li,cape,mbe,cin,capst,               &
                   wrk1,wrk2,wrk3,wrk4,wrk5,wrk6,                       &
                   wrk7,wrk8,wrk9,wrk10,wrk11,wrk12,tem5)
      cpu2 = f_cputime()
      second2 = f_walltime()

!    print*,'!!!!  total clock time for arps_be:',second2-second1
!    print*,'!!!!  total cpu time for arps_be  :', cpu2-cpu1
!    print *, ' back from arps_be'
    END IF

!-----------------------------------------------------------------------
!
!  Calculate the convective temperature (celsius)
!
!-----------------------------------------------------------------------

    IF(ctcplt /= 0) THEN
      CALL arps_ct(ct,nx,ny,nz,tem9,tz,td,tem1,wrk1,wrk2,wrk3 )
    END IF
!
!-----------------------------------------------------------------------
!
!  Store k=2 theta-e and dewpt
!  level 1 and 2 respectively.
!
!-----------------------------------------------------------------------
!
    CALL pt2pte(nx,ny,1, 1,nx,1,ny,1,1,                                 &
                tem9(1,1,2),tem3(1,1,2),qv(1,1,2),thet)
!
!-----------------------------------------------------------------------
!
!  Calculate helicity and other shear-related paramaters
!
!-----------------------------------------------------------------------
!
    IF (heliplt /= 0 .OR. brnplt  /= 0 .OR. brnuplt /= 0 .OR.           &
        srlfplt /= 0 .OR. srmfplt /= 0 .OR. blcoplt /= 0 .OR.           &
        strmplt /= 0 ) THEN
      CALL xytomf(nx,ny,x,y,mapfct)
      CALL calcshr(nx,ny,nz,x,y,zp,mapfct,                              &
                   tem9,tz,tem6,tem7,cape,                              &
                   shr37,ustrm,vstrm,srlfl,srmfl,heli,brn,brnu,blcon,   &
                   tem1,u1,v1,tem2,tem5)

    END IF
!
!-----------------------------------------------------------------------
!
!  Modify the coordinate arrays to make certain that the origin is
!  the same as specified above.
!
!-----------------------------------------------------------------------
!
    dx = x(2)-x(1) ! in meters
    dy = y(2)-y(1) ! in meters
    dz = z(2)-z(1) ! in meters
    dxinv = 1.0/(x(2)-x(1))
    dyinv = 1.0/(y(2)-y(1))
    dzinv = 1.0/(z(2)-z(1))

    IF( iorig == 1) THEN

      DO k=1,nz
        DO j=1,ny
          DO i=1,nx
            xc(i,j,k) = xc(i,j,k) + xgrdorg * 0.001
            yc(i,j,k) = yc(i,j,k) + ygrdorg * 0.001
          END DO
        END DO
      END DO

    ELSE IF( iorig == 2) THEN

      xorold = (xc(1,2,2)+xc(2,2,2))/2 + xgrdorg * 0.001
      yorold = (yc(2,1,2)+yc(2,2,2))/2 + ygrdorg * 0.001

      dxkm = xc(3,2,2)-xc(2,2,2) ! dx in km
      dykm = yc(2,3,2)-yc(2,2,2) ! dy in km

      WRITE(6,'(/1x,4(a,f8.3),a/)')                                     &
          'Model grid origin (',xorold,',',yorold,') was reset to ('    &
                          ,xorig,',',yorig,').'

      IF( ABS(xorig-xorold) > 0.01*dxkm .OR.                            &
          ABS(yorig-yorold) > 0.01*dykm ) THEN

        DO k=1,nz
          DO j=1,ny
            DO i=1,nx
              xc(i,j,k) = xc(i,j,k) - xorold + xorig
            END DO
          END DO
        END DO

        DO k=1,nz
          DO j=1,ny
            DO i=1,nx
              yc(i,j,k) = yc(i,j,k) - yorold + yorig
            END DO
          END DO
        END DO

      END IF

    END IF

    curtim = time
!
!-----------------------------------------------------------------------
!
!  If islice=-2, plot the y-z cross-sections through w maximum.
!  If jslice=-2, plot the x-z cross-sections through w maximum.
!  If kslice=-2, plot the x-y cross-sections through w maximum.
!
!-----------------------------------------------------------------------
!
    CALL a3dmax(wprt,1,nx,1,nx-1,1,ny,1,ny-1,1,nz,2,nz-1,               &
                wmax,wmin, imax,jmax,kmax, imin,jmin,kmin)

!  write(6,'(/2(1x,a,f9.3,3(a,i3))/)')
!    :     'wmin =',wmin,' at i=',imin,', j=',jmin,', k=',kmin,
!    :     'wmax =',wmax,' at i=',imax,', j=',jmax,', k=',kmax

!-----------------------------------------------------------------------
!
!  Get index bounds of the domain to be plotted
!
!-----------------------------------------------------------------------
!
    CALL indxbnds(xc,yc,zpc,zpsoilc,nx,ny,nz,nzsoil,                    &
                  xbgn,xend,ybgn,yend,zbgn,zend,zsoilbgn,zsoilend,      &
                  ibgn,iend,jbgn,jend,kbgn,kend,ksoilbgn,ksoilend)

!ibgn, iend, jbgn, jend, kbgn, kend etc. computed above are over global domain
!Introduced ibgnl,iendl, jbgnl,jendl below for message passing 
!version, which are relative to the local domain.   - WYH
  
    xpbgn = (ibgn-2)/(nx-3) + 1
    xpend = (iend-2)/(nx-3) + 1
    ypbgn = (jbgn-2)/(ny-3) + 1
    ypend = (jend-2)/(ny-3) + 1
    
    xpbgn1 = xpbgn
    xpend1 = xpend
    ypbgn1 = ypbgn
    ypend1 = ypend

    IF (loc_x == xpbgn) THEN
      ibgnl = MOD((ibgn-2),(nx-3)) + 2 
    ELSE IF (loc_x < xpbgn .OR. loc_x > xpend) THEN
      ibgnl = 2          ! can be any value
    ELSE
      ibgnl = 1          ! should be 2, 1 for overlay
    END IF

    IF (loc_x == xpend) THEN
      iendl = MOD((iend-2),(nx-3)) + 2
    ELSE IF (loc_x > xpend .OR. loc_x < xpbgn) THEN
      iendl = nx-2       ! can be any value
    ELSE
      iendl = nx - 1     ! should be nx-2, nx-1 for overlay
    END IF

    IF (loc_y == ypbgn) THEN
      jbgnl = MOD((jbgn-2),(ny-3)) + 2
    ELSE IF (loc_y < ypbgn .OR. loc_y > ypend) THEN
      jbgnl = 2
    ELSE
      jbgnl = 1
    END IF

    IF (loc_y == ypend) THEN
      jendl = MOD((jend-2),(ny-3)) + 2
    ELSE IF (loc_y > ypend .OR. loc_y < ypbgn) THEN
      jendl = ny-2
    ELSE
      jendl = ny - 1
    END IF

    ibgnl1 = ibgnl
    iendl1 = iendl
! END  --  WYH

    IF( istride /= 0 ) THEN  
      ist = istride
    ELSE IF ( (iend-ibgn+1) > 110) THEN
      ist = 4
    ELSE IF( (iend-ibgn+1) > 30) THEN
      ist = 2
    ELSE
      ist = 1
    END IF

    IF( jstride /= 0 ) THEN
      jst = jstride
    ELSE IF ( (jend-jbgn+1) > 110) THEN
      jst = 4
    ELSE IF( (jend-jbgn+1) > 30) THEN
      jst = 2
    ELSE
      jst = 1
    END IF

    ibgnl2 = (loc_x-1)*(nx-3)+ibgnl  ! hold global index for ibgnl temporarily
    jbgnl2 = (loc_y-1)*(ny-3)+jbgnl  ! hold global index for jbgnl
    IF(MOD(ibgnl2-ibgn,ist) /= 0)   THEN
       ibgnl2 = ibgnl + (ist- MOD(ibgnl2 - ibgn,ist)) ! for vector plot
    ELSE
       ibgnl2 = ibgnl
    END IF
    IF(MOD(jbgnl2-jbgn,jst) /= 0)   THEN
       jbgnl2 = jbgnl + (jst- MOD(jbgnl2 - jbgn,jst)) ! for vector plot
    ELSE
       jbgnl2 = jbgnl
    END IF
    ibgnl21 = ibgnl2

    IF( kstride /= 0 ) THEN
      kst = kstride
    ELSE IF ( (kend-kbgn+1) > 90 ) THEN
      kst = 3
    ELSE IF( (kend-kbgn+1) > 45) THEN
      kst = 2
    ELSE
      kst = 1
    END IF

    dxkm = xc(3,2,2)-xc(2,2,2)
    dykm = yc(2,3,2)-yc(2,2,2)
    dzkm = zc(2,2,3)-zc(2,2,2)
    dzsoilcm = ABS(zpsoilc(1,1,2)-zpsoilc(1,1,1))/2.

    xr = (iend-ibgn)*dxkm + dxkm
    yr = (jend-jbgn)*dykm + dykm

    procbgn = (ypbgn-1)*nproc_x+xpbgn-1  ! processor rank which holds (ibgn,jbgn)
    IF (myproc == procbgn) THEN
      x1 = xc(ibgnl,2,2)-dxkm/2
      y1 = yc(2,jbgnl,2)-dykm/2
    END IF
    CALL mpbcastr(x1,procbgn)
    CALL mpbcastr(y1,procbgn)

    x2 = x1 + xr
    y2 = y1 + yr

    IF( zbgn /= zend ) THEN
      zmin=zbgn     ! these values are already global
      zmax=zend
    ELSE

      IF (loc_x >= xpbgn .AND. loc_x <= xpend .AND.                     &
          loc_y >= ypbgn .AND. loc_y <= ypend) THEN

        zmax=zp(ibgnl,jbgnl,kend+1)
        zmin=zp(ibgnl,jbgnl,kbgn)

        DO j=jbgnl,jendl
          DO i=ibgnl,iendl
            zmax=AMAX1(zmax,zp(i,j,kend+1))
            zmin=AMIN1(zmin,zp(i,j,kbgn)  )
          END DO
        END DO

        IF( kbgn == 2 ) zmin=z(kbgn)

        zmin=zmin / 1000.
        zmax=zmax / 1000.

      ELSE         ! we do not care their values
        zmin =  1.0E6    ! should be large enough
        zmax = -1.0E6    ! should be small enough
      END IF

      CALL mpmax0(zmax,zmin)    ! get global values

    END IF

    zr = zmax-zmin
    z1 = zmin
    z2 = zmax

    ibgn1 = ibgn
    iend1 = iend
    xr2 = xr                  ! save the window to be reseted later.
    yr2 = yr
    x11 = x1
    y11 = y1
!
! 05/31/2002 Zuwen He
! 
! For soil model, the zsoilmax and zsoilmin are the 
! maximum and minimum of zpsoilc. 
!

    IF( zsoilbgn /= zsoilend ) THEN
      zsoilmax=zsoilbgn  
      zsoilmin=zsoilend
    ELSE
      IF (loc_x >= xpbgn .AND. loc_x <= xpend .AND.                     &
          loc_y >= ypbgn .AND. loc_y <= ypend) THEN

        zsoilmax=zpsoilc(ibgnl,jbgnl,ksoilbgn)
        zsoilmin=zpsoilc(ibgnl,jbgnl,ksoilend)

        DO j=jbgnl,jendl
          DO i=ibgnl,iendl
            zsoilmax=AMAX1(zsoilmax,zpsoilc(i,j,ksoilbgn))
            zsoilmin=AMIN1(zsoilmin,zpsoilc(i,j,ksoilend))
          END DO
        END DO
      ELSE         ! we do not care their values
        zsoilmin =  1.0E6    ! should be large enough
        zsoilmax = -1.0E6    ! should be small enough
      END IF

      CALL mpmax0(zsoilmax,zsoilmin)
    
    END IF

    zsoilr = zsoilmax-zsoilmin
    zsoil1 = zsoilmin
    zsoil2 = zsoilmax

!
! END Zuwen
!
!-----------------------------------------------------------------------
!
!  Re-Initialize the plotting space parameters, which might have
!  been set differently for the vertical profile plotting.
!
!-----------------------------------------------------------------------
!
    IF (profopt == 1)  THEN

      CALL xdspac(0.9*winsiz)

      IF( nxpic == 1 .AND. nypic == 1) CALL xdspac(0.85*winsiz)

      CALL xspace(nxpic, nypic, angl , xlimit,ylimit)
      IF(axlbfmt == -1) THEN
        CALL xaxfmt( '*' )
      ELSE IF(axlbfmt == 0) THEN
        CALL xaxfmt( '(i5)' )
      ELSE
        WRITE(stem1,'(i1)')axlbfmt
        WRITE(stem2,'(a,a1,a)') '(f8.',stem1,')'
        CALL xaxfmt( stem2 )
      END IF

      layover = 0
      CALL xpmagn(margnx*xlimit, margny*ylimit)

    END IF

!
!-----------------------------------------------------------------------
!
!  Set map
!
!-----------------------------------------------------------------------
!
!  IF( ovrmap .eq. 1 .or. ovrobs .eq.1 .or. blcoplt.ne.0 .or.
!    :    ovrstaopt.ne.0 ) THEN

    xl = (nxlg-3)*dxkm
    yl = (nylg-3)*dykm

    IF (myproc == 0) THEN
      xorig_0 = (xc(1,2,2)+xc(2,2,2))*0.5
      yorig_0 = (yc(2,1,2)+yc(2,2,2))*0.5
    END IF
    CALL mpupdater(xorig_0,1)
    CALL mpupdater(yorig_0,1)

    CALL xstpjgrd(mapproj,trulat1,trulat2,trulon,                       &
                ctrlat,ctrlon,xl,yl,xorig_0,yorig_0)

!  ENDIF
!
!----------------------------------------------------------------------
!
!    Calculate the coordinate value of pres_z to pres_val
!    if presaxis_no >0
!
!----------------------------------------------------------------------
!
    IF( presaxis_no > 0 )                                               &
        CALL interp_p (pbar,zpc,ibgnl,iendl,nx,jbgnl,jendl,ny,kbgn,kend,nz)

!
!-----------------------------------------------------------------------
!
!  Set terrain data
!
!-----------------------------------------------------------------------
!
    DO j=1,ny
      DO i=1,nx
        hterain(i,j)=zp(i,j,2)       ! Give zp(i,j,2) to hterain(i,j)
      END DO
    END DO

    ztmin=hterain(1,1)
    ztmax=ztmin

    DO j=1,ny
      DO i=1,nx
        ztmax=MAX(ztmax,hterain(i,j))
        ztmin=MIN(ztmin,hterain(i,j))
      END DO
    END DO

    CALL mpmax0(ztmax,ztmin)
!
!-----------------------------------------------------------------------
!
! Calculate Coriolis parameter and map factor
!
!-----------------------------------------------------------------------
!
    DO i=1,nx-1
      xs(i) = (x(i)+x(i+1))*0.5
    END DO
    xs(nx) = -xs(nx-2)+2.0*xs(nx-1)

    DO j=1,ny-1
      ys(j) = (y(j)+y(j+1))*0.5
    END DO
    ys(ny) = -ys(ny-2)+2.0*ys(ny-1)

    CALL xxytoll(nx,ny,xs,ys,tem8(1,1,1),tem8(1,1,2))

    r2d = ATAN(1.0)*4.0/180.0
    omega2 = 2.0* omega

    DO j=1,ny-1
      DO i=1,nx-1
        fcorio(i,j) = omega2*SIN( r2d * tem8(i,j,1) )
      END DO
    END DO

    DO i=1,nx-1
      xp(i) = 0.5*(x(i)+x(i+1))
    END DO
    DO j=1,ny-1
      yp(j) = 0.5*(y(j)+y(j+1))
    END DO
    CALL xytomf(nx-1,ny-1,xp,yp,mapfct)
!
!-----------------------------------------------------------------------
!
!  Loop through slicopts, for different types of
!  2-d slices each time. If iplot(slicopt)=0, plotting for the
!  given slicopt is switched off.
!
!-----------------------------------------------------------------------
!
    DO slicopt = 1,maxslicopt  ! Loop over different types of slices

    first_frame = 1
!
! slicopt = 1: xy slice
! slicopt = 2: xz slice
! slicopt = 3: yz slice
! slicopt = 4: constant height
! slicopt = 5: vertical slice through two points
! slicopt = 6: constant pressure
! slicopt = 7: isentropic level
! slicopt = 8: surface xy slice
! slicopt = 9: xy-soil-slice for the soil model 
! slicopt = 10: xz-soil-slice for the soil model 
! slicopt = 11: yz-soil-slice for the soil model 

! reset the windows
      iend = iend1
      ibgn = ibgn1
      xr = xr2
      yr = yr2

      x1 = x11
      x2 = x1+xr
      y1 = y11
      y2 = y1+yr
      z1 = zmin
      z2 = zmax
      zsoil1 = zsoilmin
      zsoil2 = zsoilmax

      xpbgn = xpbgn1
      xpend = xpend1
      ypbgn = ypbgn1
      ypend = ypend1

      ibgnl = ibgnl1
      iendl = iendl1
      ibgnl2 = ibgnl21

      IF ( slicopt == 1 .OR. slicopt == 4 .OR. slicopt == 6 .OR.        &
           slicopt == 7 .OR. slicopt == 8 .OR. slicopt == 9) THEN
        aspect=xr/yr
      ELSE IF (slicopt == 2) THEN
        aspect=xr/zr
      ELSE IF( slicopt == 5) THEN
!       aspect=
      ELSE IF (slicopt == 10) THEN 
        aspect=xr/zsoilr
      ELSE IF (slicopt == 11) THEN 
        aspect=yr/zsoilr
      ELSE
        aspect=yr/zr
      END IF

      aspratio = aspect

      IF(slicopt == 1.AND.yxstrch /= 0.0) aspratio=yxstrch
      IF(slicopt == 2.AND.zxstrch /= 0.0) aspratio=zxstrch
      IF(slicopt == 3.AND.zystrch /= 0.0) aspratio=zystrch
      IF(slicopt == 4.AND.yxstrch /= 0.0) aspratio=yxstrch
      IF(slicopt == 5.AND.zhstrch /= 0.0) aspratio=zhstrch
      IF(slicopt == 6.AND.yxstrch /= 0.0) aspratio=yxstrch
      IF(slicopt == 7.AND.yxstrch /= 0.0) aspratio=yxstrch
      IF(slicopt == 8.AND.yxstrch /= 0.0) aspratio=yxstrch
      IF(slicopt == 9.AND.yxstrch /= 0.0) aspratio=yxstrch


!
!-----------------------------------------------------------------------
!
!  Loop over all slices (nslice(slicopt)) for each slice type
!
!-----------------------------------------------------------------------
!
      DO indxslic = 1, nslice(slicopt)

        IF (iplot(slicopt) /= 0) THEN 

          ! Regular vertical cross-sections, i.e., i or j is fixed
          IF (slicopt == 2) jslice=slice_xz(indxslic)
          IF (slicopt == 3) islice=slice_yz(indxslic)

          IF (jslice == -1) jslice = (nylg-2)/2+1
          IF (jslice == -2) jslice = jmax
          IF (islice == -1) islice = (nxlg-2)/2+1
          IF (islice == -2) islice = imax
         
          IF (slicopt == 2) THEN
            ypbgn = (jslice-2)/(ny-3) + 1
            ypend = ypend
            jslice = MOD((jslice-2),(ny-3)) + 2
          END IF

          IF (slicopt == 3) THEN
            xpbgn = (islice-2)/(nx-3) + 1
            xpend = xpbgn
            islice = MOD((islice-2),(nx-3)) + 2
          END IF

          ! Horizontal plots, i.e., k is fixed
          IF( slicopt == 1) kslice=slice_xy(indxslic)
          IF( kslice == -1) kslice = (nz-2)/2+1
          IF( kslice == -2) kslice = kmax

          ! Other plots 
          IF( slicopt == 4) zlevel=slice_h (indxslic)

          IF( slicopt <= 5) THEN
            DO k=1,nz
              DO j=1,ny
                DO i=1,nx
                  zps3d(i,j,k) = zpc(i,j,k)
                END DO
              END DO
            END DO
          END IF
          IF( slicopt == 6) THEN
            zlevel=-ALOG(100.0*slice_p(indxslic))
            DO k=1,nz
              DO j=1,ny
                DO i=1,nx
                  zps3d(i,j,k) = algpzc(i,j,k)
                END DO
              END DO
            END DO
          END IF
          IF( slicopt == 7) THEN
            zlevel=slice_pt(indxslic)
            DO k=1,nz
              DO j=1,ny
                DO i=1,nx
                  zps3d(i,j,k) = ptbar(i,j,k)+ptprt(i,j,k)
                END DO
              END DO
            END DO
          END IF
          IF( slicopt == 5) THEN
            x01=xi1(indxslic)
            y01=yi1(indxslic)
            x02=xi2(indxslic)
            y02=yi2(indxslic)

            CALL clipwd(x01,y01,x02,y02, idisplay )

            IF(idisplay == 0) THEN
              WRITE(6,'(2(/1x,a))')                                     &
                  'The specified vertical slice was outside the plotting ', &
                  'window, no cross-section is plotted.'
              CYCLE
            END IF

            sqrtdxy = SQRT(dxkm*dykm)
            dist    = SQRT((x01-x02)**2+(y01-y02)**2)
            n       = INT(dist/sqrtdxy+0.5)+1

            IF (n > nx+ny) THEN
              WRITE(6,*) 'ERROR: Working arrays are too small for ',    &
                         ' arbitrary vertical slice. ' 
              WRITE(6,*) '       See restriction for MPI mode in arpsplt.input'
              CALL arpsstop('Local arrays too small',1)
            END IF
            sinaf=(y02-y01)/dist
            cosaf=(x02-x01)/dist

            DO i=1,n
              xp(i)=x01+(FLOAT(i-1))*sqrtdxy*cosaf
              yp(i)=y01+(FLOAT(i-1))*sqrtdxy*sinaf
            END DO

            ibgn = 1
            iend = n

            xpbgn = 1
            xpend = 1
            xpbgn = 1
            ypend = 1

            ibgnl  = 1
            iendl  = n
            ibgnl2 = 1

            xr = (n-1)*sqrtdxy

            z1 = zmin
            z2 = zmax
            IF (zbgn /= zend) THEN
              z1 = MAX(zbgn,zmin)
              z2 = MIN(zend,zmax)
            END IF

            zr = z2-z1

            x1 = 0.0
            x2 = x1+xr

            aspratio = xr/zr
          END IF

          ! slices for soil variables, tsoil and qsoil 
          IF (slicopt == 9) THEN 

            ksoilslice=slice_xy_soil(indxslic)
            IF (ksoilslice == -1) ksoilslice = (nzsoil-2)/2+1
  
            DO k=1,nzsoil
              DO j=1,ny
                DO i=1,nx
                  zpsoils3d(i,j,k) = zpsoilc(i,j,k)
                END DO
              END DO
            END DO

          END IF

          IF (slicopt == 10) jsoilslice=slice_xz_soil(indxslic)
          IF (slicopt == 11) isoilslice=slice_yz_soil(indxslic)

          IF (jsoilslice == -1) jsoilslice = (nylg-2)/2+1
          IF (isoilslice == -1) isoilslice = (nxlg-2)/2+1
 
          IF (slicopt == 10) THEN
            ypbgn = (jsoilslice-2)/(ny-3) + 1
            ypend = (jsoilslice-2)/(ny-3) + 1
            jsoilslice = MOD((jsoilslice-2),(ny-3)) + 2
          END IF

          IF (slicopt == 11) THEN
            xpbgn = (isoilslice-2)/(nx-3) + 1
            xpend = (isoilslice-2)/(nx-3) + 1
            isoilslice = MOD((isoilslice-2),(nx-3)) + 2
          END IF

        END IF

        CALL xlbint(3)
        CALL xczero(3)

!
!-----------------------------------------------------------------------
!
!  Loop for every priority. small number is high priority, doing high
!  priority first , then low priority, finally doing the zero priority.
!  ipriority(): 1-50 3D plot, 51-100 2D plot, 101-150 surface character.
!  151-170 arbitrary 3D plot, 171-189 arbitrary 2D plot
!
!-----------------------------------------------------------------------
!
        DO ipp = 1,nprio   ! do loop priority

          sovrlay = 0
          plotovr = .false.
          ip=iptemp(ipp)

!
!-----------------------------------------------------------------------
!
!   Start plotting for all slicopt
!
!-----------------------------------------------------------------------
!
          IF( iplot(slicopt) /= 0 .AND. slicopt <= 7 ) THEN
!
!-----------------------------------------------------------------------
!
!   Plot height(10m) on constant pressure level
!        z-coor of sacalar point in physical space (10m)
!
!-----------------------------------------------------------------------
!

            IF(ipriority(1) == ip ) THEN
              IF(hplot == 1 .OR. hplot == 2 .OR. hplot == 4 .OR.        &
                    hplot == 5) THEN
                CALL get_mulovrlay('hplot',5,ovrmul_num,ovrmulname,sovrlay)
                IF(slicopt == 6 .OR. slicopt == 7 ) THEN
                  CALL filzero(tem9,nx*ny*nz)
                  DO k=1,nz-1
                    DO j=1,ny
                      DO i=1,nx
                        tem9(i,j,k)=100.0*zpc(i,j,k)
                      END DO
                    END DO
                  END DO

                  CALL ctrsetup(hinc,hminc,hmaxc,                       &
                       hovr,hhlf,hzro,hcol1,hcol2,'hplot       ')

                  CALL ctr3d(tem9,xc,yc,zps3d,                          &
                      x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                 &
                      nx,ibgnl,iendl,ny,jbgnl,jendl,nz,kbgn,kend,       &
                      'h (10m)',time,slicopt, kslice,jslice,islice,     &
                      n,xp,yp,b1,b2,zs2,                                &
                      runname,1.0,tem1,tem2,tem3,                       &
                      tem4,tem5,tem6,hterain,hplot)
                END IF
              END IF
            END IF
!
!-----------------------------------------------------------------------
!
!   Plot thickness in 10meters between a given pressure level and
!   850mb level
!
!-----------------------------------------------------------------------
!
            IF(ipriority(110) == ip ) THEN
              IF(thkplt == 1 .OR. thkplt == 2 .OR. thkplt == 4 .OR.     &
                    thkplt == 5) THEN
                CALL get_mulovrlay('thkplt',5,ovrmul_num,ovrmulname,sovrlay)
                IF(slicopt == 6 .OR. slicopt == 7 ) THEN

                  CALL hintrp1                                          &
                       (nx,ny,nz,2,nz-2,zpc ,zps3d,zlevel,tem9(1,1,1))

                  pref = 800.0 ! mb
                  IF( slicopt == 6) THEN
                    tem=-ALOG(100.0*pref)
                  END IF
                  IF( slicopt == 7) THEN
                    tem = 300.0 ! K
                  END IF

                  CALL hintrp1                                          &
                       (nx,ny,nz,2,nz-2,zpc ,zps3d,tem,tem9(1,1,2))

                  DO j=1,ny-1
                    DO i=1,nx-1
                      IF( ABS(tem9(i,j,1)+9999.0) < 0.1 .OR.            &
                            ABS(tem9(i,j,2)+9999.0) < 0.1 ) THEN
                        tem9(i,j,1)=-9999.0
                      ELSE
                        tem9(i,j,1)=100.0*(tem9(i,j,1)-tem9(i,j,2))
                      END IF
                    END DO
                  END DO

                  CALL ctrsetup(thkinc,thkminc,thkmaxc,thkovr,          &
                       thkhlf,thkzro,thkcol1,thkcol2,'thkplt      ')

                  WRITE(label,'(i4,''-'',I4,''MB THICKNESS (10M)'')')   &
                        nint(slice_p(indxslic)),nint(pref)

                  CALL ctrsfc(tem9(1,1,1),xc(1,1,2),yc(1,1,2),          &
                       x1,x2,dxkm,y1,y2,dykm,nx,ibgnl,iendl,ny,         &
                       jbgnl,jendl, label(1:27),time, runname,1.0,      &
                       tem1,tem2,tem3,tem4,tem5,hterain,slicopt,thkplt)
                       ! size of tem5 must be >= 6*nx*ny

                END IF
              END IF
            END IF
!
!-----------------------------------------------------------------------
!
!   Plot ageostrophic winds on pressure surfaces
!
!-----------------------------------------------------------------------
!

            IF(ipriority(109) == ip ) THEN
              IF(vagplt == 1 .OR. vagplt == 2 .OR. vagplt == 4 .OR.     &
                    vagplt == 5) THEN
                CALL get_mulovrlay('vagplt',5,ovrmul_num,ovrmulname,sovrlay)
                IF(slicopt == 6 ) THEN ! Pressue surface plot

                  DO k=1,nz-1
                    DO j=1,ny-1
                      DO i=1,nx-1
                        tem1(i,j,k)=(u(i+1,j,k)+u(i,j,k))*0.5
                        tem2(i,j,k)=(v(i,j+1,k)+v(i,j,k))*0.5
                      END DO
                    END DO
                  END DO

                  CALL hintrp1                                          &
                       (nx,ny,nz,2,nz-2,tem1,zps3d,zlevel,tem9(1,1,1))
                  CALL hintrp1                                          &
                       (nx,ny,nz,2,nz-2,tem2,zps3d,zlevel,tem9(1,1,2))
                  CALL hintrp1                                          &
                       (nx,ny,nz,2,nz-2,zpc ,zps3d,zlevel,tem9(1,1,3))

!          do i=1,20
!            CALL smooth9pmv(tem9(1,1,3),nx,ny,2,nx-2,2,ny-2,tem5)
!          enddo

                  DO j=2,ny-2
                    DO i=1,nx-1
                      IF(ABS(tem9(i,j  ,1)+9999.0) < 0.1.OR.            &
                            ABS(tem9(i,j+1,3)+9999.0) < 0.1.OR.         &
                            ABS(tem9(i,j-1,3)+9999.0) < 0.1 )THEN
                        tem8(i,j,1)=-9999.0
                      ELSE
                        tem8(i,j,1)=                                    &
                             tem9(i,j,1)+ mapfct(i,j)*                  &
                            g*(tem9(i,j+1,3)-tem9(i,j-1,3))/(fcorio(i,j)*2*dykm)
                      END IF
                    END DO
                  END DO
                  DO j=1,ny-1
                    DO i=2,nx-2
                      IF(ABS(tem9(i,j  ,1)+9999.0) < 0.1.OR.            &
                            ABS(tem9(i+1,j,3)+9999.0) < 0.1.OR.         &
                            ABS(tem9(i-1,j,3)+9999.0) < 0.1)THEN
                        tem8(i,j,2)=-9999.0
                      ELSE
                        tem8(i,j,2)=                                    &
                                  tem9(i,j,2)- mapfct(i,j)*             &
                             g*(tem9(i+1,j,3)-tem9(i-1,j,3))/(fcorio(i,j)*2*dxkm)
                      END IF
                    END DO
                  END DO

                  CALL vtrunt ( vagunit )
                  IF(plotovr) CALL overlay ( 1 )
                  IF(.NOT.plotovr)  CALL overlay( vagovr )
                  CALL ctrcol(vagcol1,vagcol2)
                  CALL varplt( 'vagplt      ' )
                  CALL ctrvtr( vagunits, vagtype )

                  WRITE(label,'(''AG AT '',I4,''(HPA)'')')              &
                                nint(slice_p(indxslic))

                  CALL vtrsfc( tem8(1,1,1),tem8(1,1,2),xc(1,1,2),yc(1,1,2), &
                      x1,x2,dxkm,y1,y2,dykm, nx,ibgnl2,iendl,ist,           &
                      ny,jbgnl2,jendl,jst,label(1:15),time, runname,1.0,    &
                      slicopt,tem1,tem2,tem3,tem4,tem5,tem6,hterain)
                      ! size of tem6 must be >= 5*nx*ny
                  sigplt(109) = 1

                END IF
              END IF
            END IF

!
!-----------------------------------------------------------------------
!
!   Plot temperature (C)
!
!-----------------------------------------------------------------------
!
            IF(ipriority(2) == ip ) THEN

              IF( tplot > 0) THEN
                CALL cal_t(tem9,tz,nx, ny, nz,tob, label,length,tunits )
              END IF

              IF(tplot == 1 .OR. tplot == 2 .OR. tplot == 4 .OR.        &
                    tplot == 5 ) THEN
                CALL get_mulovrlay('tplot',5,ovrmul_num,ovrmulname,sovrlay)

!         pltvar = 'tplot'
!         CALL spltpara(tinc, tminc, tmaxc, tovr, thlf, tzro,
!  :                    tcol1,tcol2,pltvar)

                CALL ctrsetup(tinc,tminc,tmaxc,                         &
                     tovr,thlf,tzro,tcol1,tcol2,'tplot       ')

                CALL xcfull

                CALL ctr3d(tem9,xc,yc,zps3d,                            &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                   &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:length),time,slicopt, kslice,jslice,islice, &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,tplot)

                CALL xcmixl

              END IF

            END IF
!
!-----------------------------------------------------------------------
!
!   Plot wind components
!
!-----------------------------------------------------------------------
!
            IF(ipriority(3) == ip ) THEN
              IF(uplot == 1 .OR. uplot == 2 .OR. uplot == 4 .OR.        &
                    uplot == 5) THEN
                CALL get_mulovrlay('uplot',5,ovrmul_num,ovrmulname,sovrlay)

                IF(nobs > 0 .AND. slicopt == 1 .AND. kslice == 2) THEN
                  DO iob=1,nobs
                    IF(dd(iob) >= 0. .AND. dd(iob) < 360. .AND.         &
                          ff(iob) >= 0. .AND. ff(iob) < 60.) THEN
                      CALL ddrotuv(1,lonob(iob),dd(iob),ff(iob),        &
                                   drot,obs1(iob),obs2(iob))
                      obs1(iob)=0.51444*obs1(iob)
                    ELSE
                      obs1(iob)=-999.
                    END IF
                  END DO
                  obsset=1
                END IF

                onvf = 0
                CALL avgx(u , onvf,                                     &
                    nx,ny,nz, 1,nx-1, 1,ny-1, 1,nz-1, tem9)

                CALL ctrsetup(uinc,uminc,umaxc,                         &
                     uovr,uhlf,uzro,ucol1,ucol2,'uplot       ')

                CALL ctr3d( tem9, xc,yc,zps3d,                          &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                   &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    'u (m/s)',time,slicopt, kslice,jslice,islice,       &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,uplot)
              END IF

            END IF

            IF(ipriority(4) == ip ) THEN
              IF(vplot == 1 .OR. vplot == 2 .OR. vplot == 4 .OR.        &
                    vplot == 5 ) THEN
                CALL get_mulovrlay('vplot',5,ovrmul_num,ovrmulname,sovrlay)

                IF(nobs > 0 .AND. slicopt == 1 .AND. kslice == 2) THEN
                  DO iob=1,nobs
                    IF(dd(iob) >= 0. .AND. dd(iob) < 360. .AND.         &
                          ff(iob) >= 0. .AND. ff(iob) < 60.) THEN
                      CALL ddrotuv(1,lonob(iob),dd(iob),ff(iob),        &
                                   drot,obs1(iob),obs2(iob))
                      obs1(iob)=0.51444*obs2(iob)
                    ELSE
                      obs1(iob)=-999.
                    END IF
                  END DO
                  obsset=1
                END IF

                onvf = 0
                CALL avgy(v,onvf,nx,ny,nz,1,nx-1,1,ny-1,1,nz-1,tem9)

                CALL ctrsetup(vinc,vminc,vmaxc,                         &
                     vovr,vhlf,vzro,vcol1,vcol2,'vplot       ')

                CALL ctr3d(tem9, xc,yc,zps3d,                           &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                   &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    'v (m/s)',time,slicopt, kslice,jslice,islice,       &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,vplot)
              END IF

            END IF

            IF(ipriority(5) == ip ) THEN

              IF(vhplot > 0) THEN
                CALL cal_vh(tem9,u,v,nx,ny,nz,vhunits,label,length,tem8)
              END IF

              IF(vhplot == 1 .OR. vhplot == 2 .OR. vhplot == 4 .OR.     &
                    vhplot == 5 .OR.vhplot == 6 ) THEN

                CALL get_mulovrlay('vhplot',6,ovrmul_num,ovrmulname,sovrlay)

                CALL ctrsetup(vhinc,vhminc,vhmaxc,                      &
                     vhovr,vhhlf,vhzro,vhcol1,vhcol2,'vhplot      ')

                CALL ctr3d(tem9, xc,yc,zps3d,                           &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                   &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:length),time,slicopt, kslice,jslice,islice, &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,vhplot)
              END IF

            END IF

            IF(ipriority(6) == ip ) THEN
              IF(wplot == 1 .OR. wplot == 2 .OR. wplot == 4 .OR.        &
                    wplot == 5   ) THEN
                CALL get_mulovrlay('wplot',5,ovrmul_num,ovrmulname,sovrlay)

                onvf = 0
                CALL avgz(w,onvf,nx,ny,nz,1,nx-1,1,ny-1,1,nz-1,tem9)

                CALL ctrsetup(winc,wminc,wmaxc,                         &
                     wovr,whlf,wzro,wcol1,wcol2,'wplot       ')

                CALL ctr3d(tem9,xc,yc,zps3d,                            &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                   &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    'w (m/s)',time,slicopt, kslice,jslice,islice,       &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,wplot)
              END IF

            END IF

!
!-----------------------------------------------------------------------
!
!   Plot scalars
!
!-----------------------------------------------------------------------
!
            IF(ipriority(7) == ip ) THEN
              IF(ptplot == 1 .OR. ptplot == 2 .OR. ptplot == 4 .OR.     &
                    ptplot == 5 ) THEN
                CALL get_mulovrlay('ptplot',6,ovrmul_num,ovrmulname,sovrlay)

                IF(ovrobs == 1 .AND. nobs > 0) THEN
                  DO iob=1,nobs
!
!  Station pressure (mb)
!
                    IF(pstn(iob) > 0.) THEN
                      psta=mbtopa*pstn(iob)
                    ELSE IF(alt(iob) > 0.) THEN
                      psta=mbtopa*alttostpr(alt(iob),elevob(iob))
                    ELSE
                      psta=mbtopa*alttostpr(1013.,elevob(iob))
                    END IF
!
!  Potential temperature (K)
!
                    IF(tob(iob) > -98.) THEN
                      tk=(5.*(tob(iob)-32.)/9.) + 273.15
                      obs1(iob)=tk*((p0/psta)**rddcp)
                    ELSE
                      obs1(iob)=-999.
                    END IF
                  END DO
                  obsset=1
                END IF

                CALL ctrsetup(ptinc,ptminc,ptmaxc,                      &
                     ptovr,pthlf,ptzro,ptcol1,ptcol2,'ptplot      ')

                CALL ctr3d( pt ,xc,yc,zps3d,                            &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                   &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    'pt (K)',time,slicopt, kslice,jslice,islice,        &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,ptplot)
              END IF

            END IF

            IF(ipriority(8) == ip ) THEN
              IF(pplot == 1 .OR. pplot == 2 .OR. pplot == 4 .OR.        &
                    pplot == 5 ) THEN
                CALL get_mulovrlay('pplot',5,ovrmul_num,ovrmulname,sovrlay)
                IF( ovrobs == 1 .AND. nobs > 0) THEN
!
                  DO iob=1,nobs
!
!  Station pressure (mb)
!
                    IF(pstn(iob) > 0.) THEN
                      obs1(iob)=pstn(iob)-100.*(MOD(INT(pstn(iob)),100))
                    ELSE IF(alt(iob) > 0.) THEN
                      pmb=alttostpr(alt(iob),elevob(iob))
                      obs1(iob)=pmb -100.*(MOD(INT(pmb),100))
                    ELSE
                      obs1(iob)=-999.
                    END IF
                  END DO
                  obsset=1
                END IF
!
                DO k=1,nz-1
                  DO j=1,ny-1
                    DO i=1,nx-1
                      tem9(i,j,k)=pbar(i,j,k)+pprt (i,j,k)
                    END DO
                  END DO
                END DO

                CALL ctrsetup(pinc,pminc,pmaxc,                         &
                     povr,phlf,pzro,pcol1,pcol2,'pplot       ')

                CALL ctr3d( tem9 ,xc,yc,zps3d,                          &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                   &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    'p (Pa)',time,slicopt, kslice,jslice,islice,        &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,pplot)

              END IF
            END IF
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!

            IF(ipriority(9) == ip) THEN
              IF(qvplot == 1 .OR. qvplot == 2 .OR. qvplot == 4 .OR.     &
                    qvplot == 5 ) THEN
                CALL get_mulovrlay('qvplot',6,ovrmul_num,ovrmulname,sovrlay)
                IF( ovrobs == 1 .AND. nobs > 0 ) THEN
                  DO iob=1,nobs
!
!  Station pressure
!
                    IF(pstn(iob) > 0.) THEN
                      psta=mbtopa*pstn(iob)
                    ELSE IF(alt(iob) > 0.) THEN
                      psta=mbtopa*alttostpr(alt(iob),elevob(iob))
                    ELSE
                      psta=mbtopa*alttostpr(1013.,elevob(iob))
                    END IF
!
!  Specific humidity
!
                    IF(tdob(iob) > -90.) THEN
                      tdk=(5.*(tdob(iob)-32.)/9.) + 273.15
                      obs1(iob) = f_qvsat( psta,tdk ) *1000.
                    ELSE
                      obs1(iob)=-999.
                    END IF
                  END DO
                  obsset=1
                END IF

                CALL ctrsetup(qvinc,qvminc,qvmaxc,                      &
                     qvovr,qvhlf,qvzro,qvcol1,qvcol2,'qvplot      ')

                CALL ctr3d( qv,xc,yc,zps3d,                             &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                   &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    'qv (g/kg)',time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1000.0,tem1,tem2,tem3,                      &
                    tem4,tem5,tem6,hterain,qvplot)
              END IF
            END IF

            IF(ipriority(10) == ip) THEN
              IF(qcplot == 1 .OR. qcplot == 2 .OR. qcplot == 4 .OR.     &
                    qcplot == 5 ) THEN
                CALL get_mulovrlay('qcplot',6,ovrmul_num,ovrmulname,sovrlay)

                CALL ctrsetup(qcinc,qcminc,qcmaxc,                      &
                     qcovr,qchlf,qczro,qccol1,qccol2,'qcplot      ')

                CALL ctr3d( qc,xc,yc,zps3d,                             &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                   &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    'qc (g/kg)',time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1000.0,tem1,tem2,tem3,                      &
                    tem4,tem5,tem6,hterain,qcplot)
              END IF

            END IF
!
            IF(ipriority(11) == ip) THEN
              IF(qrplot == 1 .OR. qrplot == 2 .OR. qrplot == 4  .OR.    &
                    qrplot == 5 ) THEN
                CALL get_mulovrlay('qrplot',6,ovrmul_num,ovrmulname,sovrlay)

                CALL ctrsetup(qrinc,qrminc,qrmaxc,                      &
                     qrovr,qrhlf,qrzro,qrcol1,qrcol2,'qrplot      ')

                CALL ctr3d( qr,xc,yc,zps3d,                             &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                   &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    'qr (g/kg)',time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1000.0,tem1,tem2,tem3,                      &
                    tem4,tem5,tem6,hterain,qrplot)
              END IF
            END IF

            IF(ipriority(12) == ip ) THEN
              IF(qiplot == 1 .OR. qiplot == 2 .OR. qiplot == 4 .OR.     &
                    qiplot == 5 ) THEN
                CALL get_mulovrlay('qiplot',6,ovrmul_num,ovrmulname,sovrlay)
                CALL ctrsetup(qiinc,qiminc,qimaxc,                      &
                     qiovr,qihlf,qizro,qicol1,qicol2,'qiplot      ')
                CALL ctr3d( qi,xc,yc,zps3d,                             &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    'qi (g/kg)',time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1000.0,tem1,tem2,tem3,                      &
                    tem4,tem5,tem6,hterain,qiplot)
              END IF
            END IF

            IF(ipriority(13) == ip ) THEN
              IF(qsplot == 1 .OR. qsplot == 2 .OR. qsplot == 4 .OR.     &
                    qsplot == 5 ) THEN
                CALL get_mulovrlay('qsplot',6,ovrmul_num,ovrmulname,sovrlay)
                CALL ctrsetup(qsinc,qsminc,qsmaxc,                      &
                     qsovr,qshlf,qszro,qscol1,qscol2,'qsplot      ')
                CALL ctr3d( qs,xc,yc,zps3d,                             &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                     nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,      &
                     'qs (g/kg)',time,slicopt,kslice,jslice,islice,     &
                     n,xp,yp,b1,b2,zs2,                                 &
                     runname,1000.0,tem1,tem2,tem3,                     &
                     tem4,tem5,tem6,hterain,qsplot)
              END IF
            END IF

            IF(ipriority(14) == ip ) THEN
              IF(qhplot == 1 .OR. qhplot == 2 .OR. qhplot == 4 .OR.     &
                    qhplot == 5 ) THEN
                CALL get_mulovrlay('qhplot',6,ovrmul_num,ovrmulname,sovrlay)
                CALL ctrsetup(qhinc,qhminc,qhmaxc,                      &
                     qhovr,qhhlf,qhzro,qhcol1,qhcol2,'qhplot      ')
                CALL ctr3d( qh,xc,yc,zps3d,                             &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                     nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,      &
                     'qh (g/kg)',time,slicopt,kslice,jslice,islice,     &
                     n,xp,yp,b1,b2,zs2,                                 &
                     runname,1000.0,tem1,tem2,tem3,                     &
                     tem4,tem5,tem6,hterain,qhplot)
              END IF
            END IF

            IF(ipriority(15) == ip ) THEN

              IF(qwplot > 0) THEN
                CALL cal_qw(tem9,qc,qr,qi,qs,qh, nx,ny,nz)
              END IF

              IF(qwplot == 1 .OR. qwplot == 2 .OR. qwplot == 4 .OR.     &
                    qwplot == 5 ) THEN

                CALL get_mulovrlay('qwplot',6,ovrmul_num,ovrmulname,sovrlay)

                CALL ctrsetup(qwinc,qwminc,qwmaxc,                      &
                     qwovr,qwhlf,qwzro,qwcol1,qwcol2,'qwplot      ')

                CALL ctr3d( tem9,xc,yc,zps3d,                           &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                     nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,      &
                     'Total water (g/kg)',time,slicopt,kslice,jslice,islice, &
                     n,xp,yp,b1,b2,zs2,                                 &
                     runname,1000.0,tem1,tem2,tem3,                     &
                     tem4,tem5,tem6,hterain,qwplot)
              END IF

            END IF

!
!-----------------------------------------------------------------------
!
!    Calculate relative humidity, where tem1 = temperature,
!    tem2 = saturation qv.
!
!-----------------------------------------------------------------------
!
            IF(ipriority(16) == ip ) THEN
              IF(kmhplt == 1 .OR. kmhplt == 2 .OR. kmhplt == 4 .OR.     &
                    kmhplt == 5 ) THEN
                CALL get_mulovrlay('kmhplt',6,ovrmul_num,ovrmulname,sovrlay)
                CALL ctrsetup(kmhinc,kmhminc,kmhmaxc,                   &
                     kmhovr,kmhhlf,kmhzro,kmhcol1,kmhcol2,'kmhplot      ')
                CALL ctr3d( kmh,xc,yc,zps3d,                            &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                     nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,      &
                     'kmh (m**2/s)',time,slicopt,kslice,jslice,islice,  &
                     n,xp,yp,b1,b2,zs2,                                 &
                     runname,1.0,tem1,tem2,tem3,                        &
                     tem4,tem5,tem6,hterain,kmhplt)
              END IF
            END IF

            IF(ipriority(17) == ip ) THEN
              IF(kmvplt == 1 .OR. kmvplt == 2 .OR. kmvplt == 4 .OR.     &
                    kmvplt == 5 ) THEN
                CALL get_mulovrlay('kmvplt',6,ovrmul_num,ovrmulname,sovrlay)
                CALL ctrsetup(kmvinc,kmvminc,kmvmaxc,                   &
                     kmvovr,kmvhlf,kmvzro,kmvcol1,kmvcol2,'kmvplot      ')
                CALL ctr3d( kmv,xc,yc,zps3d,                            &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                     nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,      &
                     'kmv (m**2/s)',time,slicopt,kslice,jslice,islice,  &
                     n,xp,yp,b1,b2,zs2,                                 &
                     runname,1.0,tem1,tem2,tem3,                        &
                     tem4,tem5,tem6,hterain,kmvplt)
              END IF
            END IF

            IF(ipriority(18) == ip ) THEN
              IF(tkeplt == 1 .OR. tkeplt == 2 .OR. tkeplt == 4 .OR.     &
                    tkeplt == 5 ) THEN
                CALL get_mulovrlay('tkeplt',6,ovrmul_num,ovrmulname,sovrlay)
                CALL ctrsetup(tkeinc,tkeminc,tkemaxc,                   &
                     tkeovr,tkehlf,tkezro,tkecol1,tkecol2,'tkeplot      ')
                CALL ctr3d( tke,xc,yc,zps3d,                            &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                     nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,      &
                     'tke ((m/s)**2)',time,slicopt,kslice,jslice,islice, &
                     n,xp,yp,b1,b2,zs2,                                 &
                     runname,1.0,tem1,tem2,tem3,                        &
                     tem4,tem5,tem6,hterain,tkeplt)
              END IF
            END IF

            IF(ipriority(19) == ip) THEN

              IF(rhplot > 0) THEN
                CALL cal_rh(tem9,pt, pprt ,pbar,qv,tem1,tem2,nx,ny,nz)
              END IF

              IF(rhplot == 1 .OR. rhplot == 2 .OR. rhplot == 4 .OR.     &
                    rhplot == 5 ) THEN

                CALL get_mulovrlay('rhplot',6,ovrmul_num,ovrmulname,sovrlay)
                CALL ctrsetup(rhinc,rhminc,rhmaxc,                      &
                     rhovr,rhhlf,rhzro,rhcol1,rhcol2,'rhplot      ')
                CALL ctr3d( tem9,xc,yc,zps3d,                           &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                     nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,      &
                     'RH ()',time,slicopt,kslice,jslice,islice,         &
                     n,xp,yp,b1,b2,zs2,                                 &
                     runname,1.0,tem1,tem2,tem3,                        &
                     tem4,tem5,tem6,hterain,rhplot)
              END IF

            END IF

!
!-----------------------------------------------------------------------
!
!  Plot dew-point temperature td tdplot
!
!-----------------------------------------------------------------------

            IF(ipriority(20) == ip ) THEN

              IF(tdplot > 0) THEN
                CALL cal_td(tem9,td,nx,ny,nz,tdunits,label, length)
              END IF

              IF(tdplot == 1 .OR. tdplot == 2 .OR. tdplot == 4 .OR.     &
                    tdplot == 5 ) THEN
                CALL get_mulovrlay('tdplot',6,ovrmul_num,ovrmulname,sovrlay)
                CALL cal_tdobs(tdob,tdunits)

                CALL ctrsetup(tdinc,tdminc,tdmaxc,                      &
                     tdovr,tdhlf,tdzro,tdcol1,tdcol2,'tdplot      ')

                CALL ctr3d( tem9,xc,yc,zps3d,                           &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                     nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,      &
                     label(1:length),time,slicopt,kslice,jslice,islice, &
                     n,xp,yp,b1,b2,zs2,                                 &
                     runname,1.0,tem1,tem2,tem3,                        &
                     tem4,tem5,tem6,hterain,tdplot)
              END IF
            END IF

            IF(ipriority(21) == ip) THEN
              IF(rfplot == 1 .OR. rfplot == 2 .OR. rfplot == 4 .OR.     &
                    rfplot == 5 ) THEN
                CALL get_mulovrlay('rfplot',6,ovrmul_num,ovrmulname,sovrlay)

                IF (rfopt == 2) THEN
                  CALL reflec_ferrier(nx,ny,nz, rhobar, qr, qs, qh, tz, tem9)
                ELSE
                  CALL reflec(nx,ny,nz, rhobar, qr, qs, qh, tem9)
                ENDIF

                CALL ctrsetup(rfinc,rfminc,rfmaxc,                      &
                     rfovr,rfhlf,rfzro,rfcol1,rfcol2,'rfplot      ')

                CALL ctr3d( tem9,xc,yc,zps3d,                           &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                     nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,      &
                     'Ref (dBZ)',time,slicopt,kslice,jslice,islice,     &
                     n,xp,yp,b1,b2,zs2,                                 &
                     runname,1.0,tem1,tem2,tem3,                        &
                     tem4,tem5,tem6,hterain,rfplot)
              END IF

            END IF

!
!-----------------------------------------------------------------------
!
!  Calculate composite reflectivity
!
!-----------------------------------------------------------------------
!

            IF(ipriority(36) == ip) THEN

              IF(rfcplt > 0) THEN

                IF (rfopt == 2) THEN
                  CALL reflec_ferrier(nx,ny,nz, rhobar, qr, qs, qh, tz, tem8)
                ELSE
                  CALL reflec(nx,ny,nz, rhobar, qr, qs, qh, tem8)
                ENDIF

                CALL cal_rfc(nx, ny, nz, tem8, tem9)

              END IF

              IF(rfcplt == 1 .OR. rfcplt == 2 .OR. rfcplt == 4 .OR.     &
                    rfcplt == 5 ) THEN
                CALL get_mulovrlay('rfcplt',6,ovrmul_num,ovrmulname,sovrlay)

                label = 'Composite Ref (dBZ)'
                CALL ctrsetup(rfcinc,rfcminc,rfcmaxc,                   &
                     rfcovr,rfchlf,rfczro,rfccol1,rfccol2,'rfcplot     ')

                CALL ctrsfc(tem9,xc(1,1,2),yc(1,1,2),                   &
                     x1,x2,dxkm,y1,y2,dykm,                             &
                    nx,ibgnl,iendl, ny,jbgnl,jendl,                     &
                    label(1:19),time, runname, 1.0,tem1,tem2,tem3,      &
                    tem4,tem5,hterain,slicopt,rfcplt)
                       ! size of tem5 must be >= 6*nx*ny
              END IF

            END IF
!
!-----------------------------------------------------------------------
!
!  Calculate equivalent potential temperature.
!
!-----------------------------------------------------------------------
!
            IF(ipriority(22) == ip ) THEN
              IF(pteplt == 1 .OR. pteplt == 2 .OR. pteplt == 4 .OR.     &
                    pteplt == 5 ) THEN
                CALL get_mulovrlay('pteplt',6,ovrmul_num,ovrmulname,sovrlay)

                DO k=1,nz-1
                  DO j=1,ny-1
                    DO i=1,nx-1
                      tem1(i,j,k)=pprt(i,j,k)+pbar(i,j,k)
                    END DO
                  END DO
                END DO

                CALL pt2pte(nx,ny,nz,1,nx-1,1,ny-1,1,nz-1,tem1,pt,qv,tem9)

                label = 'pte (K)'
                CALL ctrsetup(pteinc,pteminc,ptemaxc,                   &
                     pteovr,ptehlf,ptezro,ptecol1,ptecol2,'pteplot     ')
                CALL ctr3d(tem9,xc,yc,zps3d,                            &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:7),time,slicopt,kslice,jslice,islice,       &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,pteplt)
              END IF

            END IF
!
!-----------------------------------------------------------------------
!
!  Plot perturbation of wind components
!
!-----------------------------------------------------------------------
!
            IF(ipriority(23) == ip ) THEN

              IF(upplot > 0) THEN
                onvf = 0
                CALL avgx(uprt , onvf,                                  &
                    nx,ny,nz, 1,nx-1, 1,ny-1, 1,nz-1, tem9)
              END IF

              IF(upplot == 1 .OR. upplot == 2 .OR. upplot == 4 .OR.     &
                    upplot == 5 ) THEN
                CALL get_mulovrlay('upplot',6,ovrmul_num,ovrmulname,sovrlay)
                label = 'uprt (m/s)'
                CALL ctrsetup(upinc,upminc,upmaxc,                      &
                     upovr,uphlf,upzro,upcol1,upcol2,'upplot      ')
                CALL ctr3d( tem9,xc,yc,zps3d,                           &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:10),time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,upplot)
              END IF

            END IF

            IF(ipriority(24) == ip ) THEN

              IF(vpplot > 0) THEN
                onvf = 0
                CALL avgy(vprt , onvf,                                  &
                    nx,ny,nz, 1,nx-1, 1,ny-1, 1,nz-1, tem9)
              END IF

              IF(vpplot == 1 .OR.  vpplot == 2 .OR.  vpplot == 4 .OR.   &
                    vpplot == 5 ) THEN
                CALL get_mulovrlay('vpplot',6,ovrmul_num,ovrmulname,sovrlay)
                label = 'vprt (m/s)'
                CALL ctrsetup(vpinc,vpminc,vpmaxc,                      &
                     vpovr,vphlf,vpzro,vpcol1,vpcol2,'vpplot      ')
                CALL ctr3d( tem9 ,xc,yc,zps3d,                          &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:10),time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,vpplot)
              END IF
            END IF

            IF(ipriority(25) == ip ) THEN

              IF(wpplot > 0) THEN
                onvf = 0
                CALL avgz(wprt , onvf,                                  &
                    nx,ny,nz, 1,nx-1, 1,ny-1, 1,nz-1, tem9)
              END IF

              IF(wpplot == 1 .OR. wpplot == 2.OR. wpplot == 4 .OR.      &
                    wpplot == 5) THEN
                CALL get_mulovrlay('wpplot',6,ovrmul_num,ovrmulname,sovrlay)
                label = 'wprt (m/s)'
                CALL ctrsetup(wpinc,wpminc,wpmaxc,                      &
                     wpovr,wphlf,wpzro,wpcol1,wpcol2,'wpplot      ')
                CALL ctr3d( tem9,xc,yc,zps3d,                           &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:10),time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,wpplot)
              END IF

            END IF
!
!-----------------------------------------------------------------------
!
!  Plot perturbation scalars, calculating and storing
!  perturbations in tem4, where necessary
!
!-----------------------------------------------------------------------
!


            IF(ipriority(26) == ip ) THEN
              IF(ptpplt == 1 .OR. ptpplt == 2.OR. ptpplt == 4 .OR.      &
                    ptpplt == 5 ) THEN

              if(.true.) then  ! plot ptprt or buoyancy including water loading

                CALL get_mulovrlay('ptpplt',6,ovrmul_num,ovrmulname,sovrlay)
                label = 'ptprt (K)'
                CALL ctrsetup(ptpinc,ptpminc,ptpmaxc,                   &
                     ptpovr,ptphlf,ptpzro,ptpcol1,ptpcol2,'ptpplot     ')

                CALL ctr3d(ptprt,xc,yc,zps3d,                           &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:10),time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,ptpplt)
              else 
                call BUOYCY_plt(nx,ny,nz,ptprt,pprt,qv,qc,qr,qi,qs,qh, &
                       ptbar,pbar,rhobar,qvbar, tem6, tem1)

                do k=1,nz-1
                do j=1,ny-1
                do i=1,nx-1
                  tem6(i,j,k) = tem6(i,j,k)/(rhobar(i,j,k)*g) *ptbar(i,j,k)
                enddo
                enddo
                enddo

                CALL get_mulovrlay('Buoyancy',6,ovrmul_num,ovrmulname,sovrlay)
                label = 'T-Equivalent Buoyancy (K)'
                CALL ctrsetup(ptpinc,ptpminc,ptpmaxc, &
                     ptpovr,ptphlf,ptpzro,ptpcol1,ptpcol2,'ptpplot     ')

                CALL ctr3d(tem6,xc,yc,zps3d,x1,x2,dx,y1,y2,dy,z1,z2,dz, &
                     nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,      &
                     label(1:17),time,slicopt,kslice,jslice,islice,     &
                     n,xp,yp,b1,b2,zs2,                                 &
                     runname,1.0,tem1,tem2,tem3,                        &
                     tem4,tem5,tem6,hterain,ptpplt)
              endif

              END IF

            END IF

            IF(ipriority(27) == ip ) THEN
              IF(ppplot == 1 .OR. ppplot == 2 .OR. ppplot == 4 .OR.     &
                    ppplot == 5 ) THEN
                CALL get_mulovrlay('ppplot',6,ovrmul_num,ovrmulname,sovrlay)
                label = 'pprt (Pa)'
                CALL ctrsetup(ppinc,ppminc,ppmaxc,                      &
                     ppovr,pphlf,ppzro,ppcol1,ppcol2,'ppplot      ')
                CALL ctr3d(pprt ,xc,yc,zps3d,                           &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:10),time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,ppplot)
              END IF
            END IF

            IF(ipriority(28) == ip ) THEN
              IF(qvpplt == 1 .OR. qvpplt == 2 .OR. qvpplt == 4 .OR.     &
                    qvpplt == 5 ) THEN
                CALL get_mulovrlay('qvpplt',6,ovrmul_num,ovrmulname,sovrlay)
                label = 'qvprt (g/kg)'
                CALL ctrsetup(qvpinc,qvpminc,qvpmaxc,                   &
                     qvpovr,qvphlf,qvpzro,qvpcol1,qvpcol2,'qvpplt      ')
                CALL ctr3d(qvprt,xc,yc,zps3d,                           &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:12),time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1000.0,tem1,tem2,tem3,                      &
                    tem4,tem5,tem6,hterain,qvpplt)
              END IF
            END IF

            IF(ipriority(29) == ip ) THEN

              IF(vorpplt > 0) THEN
                CALL cal_vorp(tem9,u,v,x,y,nx,ny,nz,tem1)
              END IF

              IF(vorpplt == 1 .OR. vorpplt == 2 .OR. vorpplt == 4 .OR.  &
                    vorpplt == 5 ) THEN
                CALL get_mulovrlay('vorpplt',7,ovrmul_num,ovrmulname,   &
                    sovrlay)
                label = 'Vort*10^5 (1/s)'
                CALL ctrsetup(vorpinc,vorpminc,vorpmaxc,                &
                    vorpovr,vorphlf,vorpzro,vorpcol1,vorpcol2,'vorpplt     ')
                CALL ctr3d(tem9,xc,yc,zps3d,                            &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:15),time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,tem4,                    &
                    tem5,tem6,hterain,vorpplt)
              END IF

            END IF

            IF(ipriority(30) == ip ) THEN

              IF(divpplt > 0) THEN
                CALL cal_div(tem9,u,v,x,y,nx,ny,nz,tem1)
              END IF

              IF( divpplt == 1 .OR. divpplt == 2  .OR. divpplt == 4 .OR. &
                    divpplt == 5 ) THEN

                label = 'Div.*1000 (1/s)'
                CALL ctrsetup(divpinc,divpminc,divpmaxc,                &
                    divpovr,divphlf,divpzro,divpcol1,divpcol2,'divpplt     ')
                CALL ctr3d(tem9,xc,yc,zps3d,                            &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:15),time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,tem4,                    &
                    tem5,tem6,hterain,divpplt)
              END IF

            END IF
!
!-----------------------------------------------------------------------
!
!   Plot divergence of moist (qv*u )
!
!-----------------------------------------------------------------------
!
            IF(ipriority(31) == ip ) THEN

              IF(divqplt > 0) THEN
                CALL cal_divq(tem9,u,v,qv,x,y,nx,ny,nz,tem1)
              END IF

              IF (divqplt == 1 .OR. divqplt == 2 .OR. divqplt == 4 .OR. &
                    divqplt == 5 ) THEN
                CALL get_mulovrlay('divqplt',7,ovrmul_num,ovrmulname,   &
                    sovrlay)
                label = 'Moist Conv.*1000. (g/kg/s)'
                CALL ctrsetup(divqinc,divqminc,divqmaxc,divqovr,        &
                       divqhlf,divqzro,divqcol1,divqcol2,'divqplt     ')
                CALL ctr3d(tem9,xc,yc,zps3d,                            &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                   &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:26),time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,tem4,                    &
                    tem5,tem6,hterain,divqplt)
              END IF

            END IF
!
!-----------------------------------------------------------------------
!
!  Calculate and plot perturbation wind components
!
!-----------------------------------------------------------------------
!
            IF(ipriority(33) == ip ) THEN
              IF(vtpplt == 1) THEN
                CALL get_mulovrlay('vtpplt',6,ovrmul_num,ovrmulname,sovrlay)

                CALL vtrunt ( vtpunit )
                CALL overlay(vtpovr )
                CALL ctrcol(vtpcol1,vtpcol2)
                CALL varplt( 'vtpplt      ' )
                CALL ctrvtr( vtpunits, vtptype )

                CALL cal_vtp(tem7,tem8,tem9,uprt,vprt,wprt,nx,ny,nz,    &
                     vtpunits,label,length)

                CALL vtr3d(tem7, tem8, tem9, xc,yc,zps3d,               &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                   &
                    nx,ibgnl2,iendl,ist,ny,jbgnl2,jendl,jst,            &
                    nz,kbgn,kend,kst,kslice,jslice,islice,              &
                    label(1:length),time, runname,1.0,                  &
                    slicopt,n,xp,yp,zs2,u1,v1,u2,v2,w2,                 &
                    tem1,tem2,tem3,tem4,tem5,tem6,hterain)
                 
              END IF
            END IF
!
!-----------------------------------------------------------------------
!
!   Plot streamline field
!
!-----------------------------------------------------------------------
!
            IF(ipriority(34) == ip ) THEN
              IF(vtrstrm == 1) THEN
                CALL get_mulovrlay('vtrstrm',7,ovrmul_num,ovrmulname,   &
                    sovrlay)

                CALL cal_vtrstrm(tem7,tem8,tem9,u,v,w,nx,ny,nz,aspratio)

                CALL overlay( vtrstmovr )
                CALL ctrcol(vtrstmcol1,vtrstmcol2)
                CALL varplt( 'vtrstrm     ' )

                CALL strm3d( tem7 , tem8 , tem9, xc,yc,zps3d,           &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm, nx,ibgnl,iendl,ist, &
                    ny,jbgnl,jendl,jst, nz,kbgn,kend,kst,                 &
                    kslice,jslice,islice, time, runname,1.0, slicopt,   &
                    n,xp,yp,zs2,u1,v1,u2,v2,w2,                         &
                    tem1,tem2,tem3,tem4,tem5,tem6,hterain)

              END IF
            END IF
!
!-----------------------------------------------------------------------
!
!   Calculate and plot the perturbation of wind streamlines
!
!-----------------------------------------------------------------------
!
            IF(ipriority(35) == ip ) THEN
              IF(vtpstrm == 1) THEN
                CALL get_mulovrlay('vtpstrm',7,ovrmul_num,ovrmulname,   &
                    sovrlay)

                CALL cal_vtpstrm(tem7,tem8,tem9,uprt,vprt,wprt,nx,ny,nz, &
                    aspratio)

                CALL overlay( vtpstmovr )
                CALL varplt( 'vtpstrm     ' )

                CALL strm3d( tem7 , tem8 , tem9, xc,yc,zps3d,           &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,nx,ibgnl,iendl,ist, &
                    ny,jbgnl,jendl,jst,nz,kbgn,kend,kst,                &
                    kslice,jslice,islice, time, runname,1.0, slicopt,   &
                    n,xp,yp,zs2,u1,v1,u2,v2,w2,                         &
                    tem1,tem2,tem3,tem4,tem5,tem6,hterain)

              END IF
            END IF
!
!-----------------------------------------------------------------------
!
!   Plot vertical wind shear, SQRT[(du/dz)^2 + (dv/dz)^2].
!
!-----------------------------------------------------------------------
!
!
            IF(ipriority(37) == ip ) THEN

              IF(vsplot > 0) THEN
                CALL cal_vs(tem9,u,v,zp,tem7,tem8,nx,ny,nz)
              END IF

              IF(vsplot == 1 .OR. vsplot == 2 .OR. vsplot == 4 .OR.     &
                    vsplot == 5 ) THEN
                CALL get_mulovrlay('vsplot',6,ovrmul_num,ovrmulname,sovrlay)

                label = 'Vertical wind shear*1000(1/s)'
                CALL ctrsetup(vsinc,vsminc,vsmaxc,                      &
                     vsovr,vshlf,vszro,vscol1,vscol2,'vsplot      ')

                CALL ctr3d( tem9, xc,yc,zps3d,                          &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:30),time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,vsplot)
              END IF

            END IF
!
!-----------------------------------------------------------------------
!
!   Plot gradient Richardson Number  g / theta * d(theta)/dz
!                                    -----------------------
!                                          (dV/dz)^2g
!
!-----------------------------------------------------------------------
!
!
            IF(ipriority(38) == ip ) THEN

              IF(gricplt > 0) THEN
                CALL cal_gric(tem9,u,v,zp,pt,tem7,tem8,nx,ny,nz)
              END IF
              IF(gricplt == 1 .OR. gricplt == 2 .OR. gricplt == 4 .OR.  &
                    gricplt == 5 ) THEN
                CALL get_mulovrlay('gricplt',7,ovrmul_num,ovrmulname,   &
                    sovrlay)

                label = 'Richardson Number'

                CALL ctrsetup(gricinc,gricminc,gricmaxc,                &
                    gricovr,grichlf,griczro,griccol1,griccol2,'gricplt     ')

                CALL ctr3d( tem9, xc,yc,zps3d,                          &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:17),time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,gricplt)
              END IF

            END IF
!
!-----------------------------------------------------------------------
!
!   Plot absolute vorticity
!
!-----------------------------------------------------------------------
!
            IF(ipriority(39) == ip ) THEN

              IF(avorplt > 0) THEN
                CALL cal_avor(tem9,u,v,x,y,nx,ny,nz,slicopt,flagsin,omega, &
                    sinlat,tem1,tem2,tem3)
              END IF

              IF( avorplt == 1 .OR. avorplt == 2 .OR. avorplt == 3      &
                    .OR. avorplt == 4 .OR. avorplt == 5  ) THEN

                CALL get_mulovrlay('avorplt',7,ovrmul_num,ovrmulname,   &
                    sovrlay)
                label = 'Absolute Vort*10^5 (1/s)'
                CALL ctrsetup(avorinc,avorminc,avormaxc,                &
                    avorovr,avorhlf,avorzro,avorcol1,avorcol2,'avorplt    ')
                CALL ctr3d(tem9,xc,yc,zps3d,                            &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:24),time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,tem4,                    &
                    tem5,tem6,hterain,avorplt)
              END IF

            END IF
!
!-----------------------------------------------------------------------
!
!   Plot scalars for qtplot ,similar to qwplot, except that the
!   vapor component is included.
!
!-----------------------------------------------------------------------
!
            IF(ipriority(41) == ip ) THEN

              IF(qtplot > 0) THEN
                CALL cal_qt(tem9,qc,qr,qi,qs,qh,qv,nx,ny,nz)
              END IF

              IF( qtplot == 1 .OR. qtplot == 2 .OR. qtplot == 4         &
                    .OR. qtplot == 5 ) THEN

                CALL get_mulovrlay('qtplot',6,ovrmul_num,ovrmulname,sovrlay)
                label = 'Total water & vapor (g/kg)'
                CALL ctrsetup(qtinc,qtminc,qtmaxc,                      &
                     qtovr,qthlf,qtzro,qtcol1,qtcol2,'qtplot      ')

                CALL ctr3d( tem9,xc,yc,zps3d,                           &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:26),time,slicopt,kslice,jslice,islice,      &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1000.0,tem1,tem2,tem3,                      &
                    tem4,tem5,tem6,hterain,qtplot)
              END IF

            END IF
!
!-----------------------------------------------------------------------
!
!   Plot  RHI relative humidity with ice phase
!
!-----------------------------------------------------------------------
!

            IF(ipriority(42) == ip) THEN

              IF(rhiplot > 0) THEN
                CALL cal_rhi(tem9,pt, pprt ,pbar,qv,tem1,tem2,nx,ny,nz)
              END IF

              IF(rhiplot == 1 .OR. rhiplot == 2 .OR. rhiplot == 4 .OR.  &
                    rhiplot == 5 ) THEN

                CALL get_mulovrlay('rhiplot',7,ovrmul_num,ovrmulname,   &
                    sovrlay)
                label = 'RHI'
                CALL ctrsetup(rhiinc,rhiminc,rhimaxc,                   &
                     rhiovr,rhihlf,rhizro,rhicol1,rhicol2,'rhiplot     ')
                CALL ctr3d( tem9,xc,yc,zps3d,                           &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                    nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,       &
                    label(1:3),time,slicopt,kslice,jslice,islice,       &
                    n,xp,yp,b1,b2,zs2,                                  &
                    runname,1.0,tem1,tem2,tem3,                         &
                    tem4,tem5,tem6,hterain,rhiplot)
              END IF

            END IF

!
!-----------------------------------------------------------------------
!
!   Plot vector field
!
!-----------------------------------------------------------------------
!
            CALL varplt( 'vtrplt      ' )


            IF(varname(1:6) == ovrname(1:6) .AND. sovrlay == 1) plotovr=.true.

            IF( (ipriority(32) == ip .AND. vtrplt == 0)                  &
                .AND. (.NOT.plotovr)) GOTO 1100

            IF( ipriority(32) == ip .OR. plotovr) THEN

              IF( vtrplt == 1 .OR.  (ovrlaymulopt == 0 .OR. plotovr .OR. &
                    (ovrlaymulopt == 1 .AND. .NOT.plotovr)) )THEN

                CALL vtrunt ( vtrunit )
                IF(plotovr) CALL overlay ( 1 )
                IF(.NOT.plotovr)  CALL overlay( vtrovr )
                CALL ctrcol(vtrcol1,vtrcol2)
                CALL varplt( 'vtrplt      ' )
                CALL ctrvtr( vtrunits, vtrtype )
!
                IF(nobs > 0 .AND. slicopt == 1 .AND. kslice == 2) THEN
                  CALL cal_vtrobs(dd,ff,drot, vtrunits)
                END IF

                CALL cal_vtr(tem7,tem8,tem9,u,v,w,nx,ny,nz,vtrunits,    &
                    label,length)

                CALL vtr3d( tem7,tem8,tem9,xc,yc,zps3d,                 &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                   &
                    nx,ibgnl2,iendl,ist, ny,jbgnl2,jendl,jst,           &
                    nz,kbgn,kend,kst,kslice,jslice,islice,              &
                    label(1:length),time, runname,1.0,                  &
                    slicopt,n,xp,yp,zs2,u1,v1,u2,v2,w2,                 &
                    tem1,tem2,tem3,tem4,tem5,tem6,hterain)

              END IF

              IF(plotovr) THEN
                plotovr=.false.
                sovrlay = 0
              END IF

            END IF

1100        CONTINUE
!
!-----------------------------------------------------------------------
!
!   Plot (u,v) in cross-section .
!
!-----------------------------------------------------------------------
!
            CALL varplt( 'xuvplt     ' )
            IF(varname(1:6) == ovrname(1:6) .AND. sovrlay == 1) plotovr=.true.
            IF( ipriority(40) == ip .OR. plotovr) THEN
              IF( xuvplt == 1 .AND. (ovrlaymulopt == 0 .OR. plotovr .OR. &
                    (ovrlaymulopt == 1 .AND. .NOT.plotovr) ) )THEN
                CALL vtrunt ( xuvunit )
                IF(plotovr) CALL overlay ( 1 )
                IF(.NOT.plotovr)  CALL overlay( xuvovr )
                CALL ctrcol(xuvcol1,xuvcol2)
                CALL varplt( 'xuvplt     ' )
                CALL ctrvtr( xuvunits, xuvtype )

                CALL cal_xuv(tem7,tem8,tem9,u,v,w,nx,ny,nz,xuvunits,label, &
                    length)

                IF(slicopt == 2 .OR. slicopt == 3 .OR. slicopt == 5) THEN

                    CALL vtr3d( tem7,tem8,tem9,xc,yc,zps3d,               &
                    x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm, nx,ibgnl2,iendl,ist,&
                    ny,jbgnl2,jendl,jst, nz,kbgn,kend,kst,                &
                    kslice,jslice,islice, label(1:length),time, runname,1.0, &
                    slicopt,n,xp,yp,zs2,u1,v1,u2,v2,w2,                   &
                    tem1,tem2,tem3,tem4,tem5,tem6,hterain)
                END IF
              END IF
              IF(plotovr) THEN
                plotovr=.false.
                sovrlay = 0
              END IF
            END IF

!
!-----------------------------------------------------------------------
!
!   Plot Mongtgomery Streamfunction (10m) on constant theta surfaces
!
!-----------------------------------------------------------------------
!
            IF(slicopt == 7) THEN
              IF(ipriority(107) == ip ) THEN
                IF(msfplt == 1.OR.msfplt == 2.OR.msfplt == 4.OR.msfplt == 5) &
                    THEN
                CALL get_mulovrlay('msfplt',6,ovrmul_num,ovrmulname,sovrlay)

                DO k=1,nz-1
                  DO j=1,ny-1
                    DO i=1,nx-1
                      tem9(i,j,k)=(cp*tz(i,j,k)+g*zpc(i,j,k)*1000.0)/g*0.1
                    END DO
                  END DO
                END DO

                CALL ctrsetup(msfinc,msfminc,msfmaxc,msfovr,            &
                     msfhlf,msfzro,msfcol1,msfcol2,'msfplt      ')
                label = 'MSF (10m)'


                CALL ctr3d(tem9,xc,yc,zps3d,                            &
                     x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                  &
                     nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,      &
                     label(1:9),                                        &
                     time,slicopt, kslice,jslice,islice,                &
                     n,xp,yp,b1,b2,zs2,                                 &
                     runname,1.0,tem1,tem2,tem3,                        &
                     tem4,tem5,tem6,hterain,msfplt)

              END IF
            END IF

            IF(ipriority(108) == ip ) THEN
              IF( ipvplt == 1 .OR.  ipvplt == 2 .OR.  ipvplt == 4 .OR.  &
                    ipvplt == 5 ) THEN

                DO k=1,nz-1
                  DO j=1,ny-1
                    DO i=1,nx-1
                      tem1(i,j,k)=(u(i+1,j,k)+u(i,j,k))*0.5
                      tem2(i,j,k)=(v(i,j+1,k)+v(i,j,k))*0.5
                    END DO
                  END DO
                END DO

                DO k=2,nz-2
                  DO j=1,ny-1
                    DO i=1,nx-1
                      tem3(i,j,k)=-g*(zps3d(i,j,k+1)-zps3d(i,j,k-1))/   &
                          (pbar(i,j,k+1)+pprt(i,j,k+1)-pbar(i,j,k-1)-pprt(i,j,k-1))
                    END DO
                  END DO
                END DO

                CALL hintrp1(nx,ny,nz,2,nz-2,tem1,zps3d,zlevel,tem9(1,1,1))
                CALL hintrp1(nx,ny,nz,2,nz-2,tem2,zps3d,zlevel,tem9(1,1,2))
                CALL hintrp1(nx,ny,nz,2,nz-2,tem3,zps3d,zlevel,tem9(1,1,3))

                DO j=2,ny-2
                  DO i=2,nx-2
                    IF(ABS(tem9(i+1,j,2)+9999.0) < 0.1.OR.              &
                          ABS(tem9(i-1,j,2)+9999.0) < 0.1.OR.           &
                          ABS(tem9(i,j+1,1)+9999.0) < 0.1.OR.           &
                          ABS(tem9(i,j-1,1)+9999.0) < 0.1.OR.           &
                          ABS(tem9(i,j,3  )+9999.0) < 0.1) THEN
                      tem9(i,j,4)= -9999.0
                      relvort = -9999.0
                    ELSE
                      relvort =  (tem9(i+1,j,2)-tem9(i-1,j,2))*dxinv    &
                                -(tem9(i,j+1,1)-tem9(i,j-1,1))*dyinv
                      tem9(i,j,4)=(relvort                              &
                                  +fcorio(i,j))*tem9(i,j,3)*1.0E6
                    END IF
                  END DO
                END DO
                DO j=2,ny-2
                  tem9(   1,j,4)=tem9(   2,j,4)
                  tem9(nx-1,j,4)=tem9(nx-2,j,4)
                END DO
                DO j=1,nx-1
                  tem9(i,   1,4)=tem9(i,   2,4)
                  tem9(i,ny-1,4)=tem9(i,ny-2,4)
                END DO

                IF(mp_opt > 0) THEN
                  CALL mpsendrecv2dew(tem9,nx,ny,nz,1,1,0,tem4)
                  CALL mpsendrecv2dns(tem9,nx,ny,nz,1,1,0,tem5)
                END IF

                CALL get_mulovrlay('ipvplt',6,ovrmul_num,ovrmulname,sovrlay)

                WRITE(label,'(''IPV (PVU) AT THETA='',F5.1)') zlevel

                CALL ctrsetup(ipvinc,ipvminc,ipvmaxc,                   &
                     ipvovr,ipvhlf,ipvzro,ipvcol1,ipvcol2,'ipvplt     ')

                CALL ctrsfc(tem9(1,1,4),xc(1,1,2),yc(1,1,2),            &
                     x1,x2,dxkm,y1,y2,dykm,                             &
                     nx,ibgnl,iendl, ny,jbgnl,jendl,                    &
                     label(1:24),time, runname,1.0 ,tem1,tem2,tem3,     &
                     tem4,tem5,hterain,slicopt,ipvplt)
                       ! size of tem5 must be >= 6*nx*ny

              END IF

            END IF

          END IF ! For slicopt=7 only

        END IF ! For slicopt=1 - 7
!
!-----------------------------------------------------------------------
!
!  Start plotting of 2-D surface fields...
!
!-----------------------------------------------------------------------
!
        IF (slicopt == 8 .OR. slicopt == 1) THEN

          IF (slicopt == 8 ) THEN  ! 2-D surface field
            aspect=xr/yr
            IF(yxstrch /= 0.0) THEN
              aspratio=yxstrch
            ELSE
              aspratio= aspect
            END IF
          END IF

          IF(ipriority(51) == ip) THEN
            IF( (trnplt == 1 .OR. trnplt == 2 .OR. trnplt == 4 .OR.     &
                   trnplt == 5 )  .AND. sigplt(51) == 0 ) THEN
              CALL get_mulovrlay('trnplt',6,ovrmul_num,ovrmulname,sovrlay)
              label = 'Terrain height (m)'
              time0 = 0.0
              CALL ctrsetup(trninc,trnminc,trnmaxc,                     &
                   trnovr,trnhlf,trnzro,trncol1,trncol2,'trnplt      ')
              CALL ctrsfc(zp(1,1,2),xc(1,1,2),yc(1,1,2),                &
                   x1,x2,dxkm,y1,y2,dykm,                               &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:18),time0, runname,1.0 ,tem1,tem2,tem3,       &
                  tem4,tem5,hterain,slicopt,trnplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(51) = 1
            END IF
          END IF

          IF(ipriority(56) == ip ) THEN
            IF( (wetcanplt == 1 .OR. wetcanplt == 2 .OR. wetcanplt == 4 &
                   .OR. wetcanplt == 5 ) .AND. sigplt(56) == 0 ) THEN
              CALL get_mulovrlay('wetcanplt',9,ovrmul_num,ovrmulname,   &
                                 sovrlay)
              label = 'Canopy water amount'
              CALL ctrsetup(wcpinc,wcpminc,wcpmaxc,                     &
                   wcpovr,wcphlf,wcpzro,wcpcol1,wcpcol2,'wetcanplt   ')

              CALL ctrsfc(wetcanp,xc(1,1,2),yc(1,1,2),                  &
                   x1,x2,dxkm,y1,y2,dykm,                               &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:19),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,wetcanplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(56) = 1
            END IF
          END IF

          IF(ipriority(57) == ip) THEN
            IF( (raincplt == 1 .OR.raincplt == 2 .OR.raincplt == 4 .OR. &
                   raincplt == 5 ) .AND. sigplt(57) == 0 ) THEN
              CALL get_mulovrlay('raincplt',8,ovrmul_num,ovrmulname,sovrlay)
              IF(racunit == 0) THEN
                label = 'Cumulus Rainfall (mm)'
                DO j = 1,ny
                  DO i=1,nx
                    tem9(i,j,1) = rainc(i,j)
                  END DO
                END DO
              ELSE IF( racunit == 1) THEN
                label = 'Cumulus Rainfall (in)'    ! unit is inch
                DO j = 1,ny
                  DO i=1,nx
                    tem9(i,j,1) = rainc(i,j)*0.039370079   ! (1/25.4)
                  END DO
                END DO
              END IF
              CALL ctrsetup(raincinc,raincminc,raincmaxc,               &
                   racovr,rachlf,raczro,raccol1,raccol2,'raincplt    ')

              CALL ctrsfc(tem9(1,1,1),xc(1,1,2),yc(1,1,2),              &
                  x1,x2,dxkm,y1,y2,dykm, nx,ibgnl,iendl, ny,jbgnl,jendl,&
                  label(1:28),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,raincplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(57) = 1
            END IF
          END IF


          IF(ipriority(58) == ip) THEN
            IF( (raingplt == 1 .OR. raingplt == 2 .OR. raingplt == 4 .OR. &
                   raingplt == 5 )  .AND. sigplt(58) == 0 ) THEN
              CALL get_mulovrlay('raingplt',8,ovrmul_num,ovrmulname,sovrlay)

              IF(ragunit == 0 ) THEN
                label = 'Gridscale Rainfall (mm) '
                DO j = 1,ny
                  DO i=1,nx
                    tem9(i,j,1) = raing(i,j)
                  END DO
                END DO
              ELSE IF( ragunit == 1) THEN
                label = 'Gridscale Rainfall (in) '
                DO j = 1,ny
                  DO i=1,nx
                    tem9(i,j,1) = raing(i,j)*0.039370079   ! (1/25.4)
                  END DO
                END DO
              END IF

              CALL ctrsetup(rainginc,raingminc,raingmaxc,               &
                   ragovr,raghlf,ragzro,ragcol1,ragcol2,'raingplt    ')

              CALL ctrsfc(tem9(1,1,1),xc(1,1,2),yc(1,1,2),              &
                  x1,x2,dxkm,y1,y2,dykm, nx,ibgnl,iendl, ny,jbgnl,jendl,&
                  label(1:30),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,raingplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(58) = 1
            END IF
          END IF


          IF(ipriority(59) == ip) THEN
            IF( (raintplt == 1 .OR.raintplt == 2 .OR.raintplt == 4      &
                  .OR. raintplt == 5 )                                  &
                  .AND. sigplt(59) == 0 ) THEN
              CALL get_mulovrlay('raintplt',8,ovrmul_num,ovrmulname,sovrlay)
              IF(ratunit == 0 ) THEN
                label = 'Total Rainfall (mm)'
                DO j = 1,ny
                  DO i=1,nx
                    tem9(i,j,1) = rainc(i,j) + raing(i,j)
                  END DO
                END DO
              ELSE IF (ratunit == 1) THEN
                label = 'Total Rainfall (in)'
                DO j = 1,ny
                  DO i=1,nx
                    tem9(i,j,1) = (rainc(i,j)+raing(i,j))*0.039370079 ! (1/25.4)
                  END DO
                END DO
              END IF
              CALL ctrsetup(raintinc,raintminc,raintmaxc,               &
                   ratovr,rathlf,ratzro,ratcol1,ratcol2,'raintplt    ')

              CALL ctrsfc(tem9,xc(1,1,2),yc(1,1,2),                     &
                   x1,x2,dxkm,y1,y2,dykm,                               &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:22),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,raintplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(59) = 1
            END IF
          END IF

          ! 
          ! Added Accumulated rainfall plots for priority 111, 112, 113
          !
          IF(ipriority(111) == ip) THEN
 
            IF( (rainicplt == 1 .OR. rainicplt == 2 .OR.                &
                 rainicplt == 4 .OR. rainicplt == 5 )      .AND.        &
                sigplt(111) == 0 ) THEN
              CALL get_mulovrlay('rainicplt',8,ovrmul_num,ovrmulname,   &
                                 sovrlay)

              DO j=1,ny
                DO i=1,nx
                  acc_rainc(i,j,2)=rainc(i,j)
                  time2c=time
                END DO
              END DO
              timediff=time2c-time1c           ! time in sec

              IF(raicunit == 0) THEN
                WRITE(label,'(f8.1,a)') timediff,                       &
                         ' s  Accumulated Cumulus Rainfall (mm)'
                DO j = 1,ny
                  DO i=1,nx
                    tem9(i,j,1) = acc_rainc(i,j,2)-acc_rainc(i,j,1)
                    IF (tem9(i,j,1) < 0.001) tem9(i,j,1)=0.0
                  END DO
                END DO

              ELSE IF( raicunit == 1) THEN     ! unit is inch
                WRITE(label,'(f8.1,a)') timediff,                       &
                         ' s  Accumulated Cumulus Rainfall (in)'
                DO j = 1,ny
                  DO i=1,nx
                    tem9(i,j,1)=(acc_rainc(i,j,2)-acc_rainc(i,j,1))     &
                                * 0.039370079  ! (1/25.4)
                    IF (tem9(i,j,1) < 0.0001) tem9(i,j,1)=0.0
                  END DO
                END DO
              END IF

              CALL ctrsetup(rainicinc,rainicminc,rainicmaxc,            &
                         raicovr,raichlf,raiczro,raiccol1,raiccol2,     &
                         'rainicplt   ')

              CALL ctrsfc(tem9(1,1,1),xc(1,1,2),yc(1,1,2),x1,x2,dxkm,   &
                         y1,y2,dykm, nx,ibgn,iend, ny,jbgnl,jendl,      &
                         TRIM(label),time, runname,1.0 ,tem1,tem2,tem3, &
                         tem4,tem5,hterain,slicopt,rainicplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(111) = 1

              DO j=1,ny
                DO i=1,nx
                  acc_rainc(i,j,1)=rainc(i,j)
                END DO
              END DO
              time1c=time
            END IF
          END IF

          IF(ipriority(112) == ip) THEN
 
            IF( (rainigplt == 1 .OR. rainigplt == 2 .OR.                &
                 rainigplt == 4 .OR. rainigplt == 5 )      .AND.        &
                sigplt(112) == 0 ) THEN
              CALL get_mulovrlay('rainigplt',8,ovrmul_num,ovrmulname,   &
                                 sovrlay)

              DO j=1,ny
                DO i=1,nx
                  acc_raing(i,j,2)=raing(i,j)
                  time2g=time
                END DO
              END DO
              timediff=time2g-time1g           ! time in sec

              IF(raigunit == 0) THEN
                WRITE(label,'(f8.1,a)') timediff,                       &
                         ' s  Accumulated Gridscale Rainfall (mm)'
                DO j = 1,ny
                  DO i=1,nx
                    tem9(i,j,1) = acc_raing(i,j,2)-acc_raing(i,j,1)
                    IF (tem9(i,j,1) < 0.001) tem9(i,j,1)=0.0
                  END DO
                END DO

              ELSE IF( raigunit == 1) THEN     ! unit is inch
                WRITE(label,'(f8.1,a)') timediff,                       &
                         ' s  Accumulated Gridscale Rainfall (in)'
                DO j = 1,ny
                  DO i=1,nx
                    tem9(i,j,1)=(acc_raing(i,j,2)-acc_raing(i,j,1))     &
                                * 0.039370079  ! (1/25.4)
                    IF (tem9(i,j,1) < 0.0001) tem9(i,j,1)=0.0
                  END DO
                END DO
              END IF

              CALL ctrsetup(rainiginc,rainigminc,rainigmaxc,            &
                         raigovr,raighlf,raigzro,raigcol1,raigcol2,     &
                         'rainigplt   ')

              CALL ctrsfc(tem9(1,1,1),xc(1,1,2),yc(1,1,2),x1,x2,dxkm,   &
                         y1,y2,dykm, nx,ibgn,iend, ny,jbgnl,jendl,      &
                         TRIM(label),time, runname,1.0 ,tem1,tem2,tem3, &
                         tem4,tem5,hterain,slicopt,rainigplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(112) = 1

              DO j=1,ny
                DO i=1,nx
                  acc_raing(i,j,1)=raing(i,j)
                END DO
              END DO
              time1g=time
            END IF
          END IF

          IF(ipriority(113) == ip) THEN
 
            IF( (rainitplt == 1 .OR. rainitplt == 2 .OR.                &
                 rainitplt == 4 .OR. rainitplt == 5 )      .AND.        &
                sigplt(113) == 0 ) THEN
              CALL get_mulovrlay('rainitplt',8,ovrmul_num,ovrmulname,   &
                                 sovrlay)

              DO j=1,ny
                DO i=1,nx
                  acc_raint(i,j,2)=rainc(i,j) + raing(i,j)
                  time2t=time
                END DO
              END DO
              timediff=time2t-time1t           ! time in sec

              IF(raitunit == 0) THEN
                WRITE(label,'(f8.1,a)') timediff,                       &
                         ' s  Accumulated Rainfall (mm)'
                DO j = 1,ny
                  DO i=1,nx
                    tem9(i,j,1) = acc_raint(i,j,2)-acc_raint(i,j,1)
                    IF (tem9(i,j,1) < 0.001) tem9(i,j,1)=0.0
                  END DO
                END DO

              ELSE IF( raitunit == 1) THEN     ! unit is inch
                WRITE(label,'(f8.1,a)') timediff,                       &
                         ' s  Accumulated Rainfall (in)'
                DO j = 1,ny
                  DO i=1,nx
                    tem9(i,j,1)=(acc_raint(i,j,2)-acc_raint(i,j,1))     &
                                * 0.039370079  ! (1/25.4)
                    IF (tem9(i,j,1) < 0.0001) tem9(i,j,1)=0.0
                  END DO
                END DO
              END IF

              CALL ctrsetup(rainitinc,rainitminc,rainitmaxc,            &
                         raitovr,raithlf,raitzro,raitcol1,raitcol2,     &
                         'rainitplt   ')

              CALL ctrsfc(tem9(1,1,1),xc(1,1,2),yc(1,1,2),x1,x2,dxkm,   &
                         y1,y2,dykm, nx,ibgn,iend, ny,jbgnl,jendl,      &
                         TRIM(label),time, runname,1.0 ,tem1,tem2,tem3, &
                         tem4,tem5,hterain,slicopt,rainitplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(113) = 1

              DO j=1,ny
                DO i=1,nx
                  acc_raint(i,j,1)=rainc(i,j) + raing(i,j)
                END DO
              END DO
              time1t=time
            END IF
          END IF

          IF(ipriority(60) == ip) THEN
            IF( (pslplt == 1 .OR. pslplt == 2 .OR. pslplt == 4 .OR.     &
                   pslplt == 5 )                                        &
                  .AND. sigplt(60) == 0 ) THEN
              CALL get_mulovrlay('pslplt',6,ovrmul_num,ovrmulname,sovrlay)
              label = 'Sea Level Pressure (mb)'

              IF(ovrobs == 1 .AND. nobs > 0) THEN
                DO iob=1,nobs
!
!  Sea-level pressure
!
                  IF(pmsl(iob) > 0. ) THEN
                    obs1(iob)=mod(nint(pmsl(iob)),100)
!                   print *, ' pmsl, obs1: ',pmsl(iob),obs1(iob)
!                 ELSE IF (pstn(iob) > 0. .AND. tob(iob) > -98. ) THEN
!                   tk=(5.*(tob(iob)-32.)/9.) + 273.15
!                   obs1(iob)=pstn(iob)*((tk+gamma*elevob(iob))/tk)**ex2
!                   obs1(iob)=mod(nint(obs1(iob)),100)
!                   print *, ' pstn, obs1: ',pstn(iob),obs1(iob)
!                 ELSE IF( alt(iob) > 0. ) THEN
!                   IF ( tob(iob) > -98.) THEN
!                     tk=(5.*(tob(iob)-32.)/9.) + 273.15
!                     obs1(iob)=alttostpr(alt(iob),elevob(iob))*    &
!                                         ((tk+gamma*elevob(iob))/tk)**ex2
!                     obs1(iob)=mod(nint(obs1(iob)),100)
!                     print *, ' alt1, obs1: ',alt(iob),obs1(iob)
!                   ELSE
!                     obs1(iob)=0.01*alt(iob)
!                     obs1(iob)=mod(nint(obs1(iob)),100)
!                     print *, ' alt2, obs1: ',alt(iob),obs1(iob)
!                   END IF
                  ELSE
                    obs1(iob)=-99.
                  END IF
                END DO
                obsset=1
              END IF

              CALL ctrsetup(pslinc,pslminc,pslmaxc,                     &
                   pslovr,pslhlf,pslzro,pslcol1,pslcol2,'pslplt      ')

              CALL ctrsfc(psl,xc(1,1,2),yc(1,1,2),                      &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:23),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,pslplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(60) = 1
            END IF
          END IF


          IF(ipriority(61) == ip) THEN
            IF( (liplt == 1 .OR. liplt == 2 .OR. liplt == 4 .OR.  liplt == 5 ) &
                  .AND. sigplt(61) == 0 ) THEN
              CALL get_mulovrlay('liplt',5,ovrmul_num,ovrmulname,sovrlay)
              label = 'Sfc-based LI (K)'

              CALL ctrsetup(liinc,liminc,limaxc,                        &
                   liovr,lihlf,lizro,licol1,licol2,'liplt       ')

              CALL ctrsfc(li,xc(1,1,2),yc(1,1,2),                       &
                   x1,x2,dxkm,y1,y2,dykm,                               &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:19),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,liplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(61) = 1
            END IF
          END IF

          IF(ipriority(62) == ip) THEN
            IF( (capeplt == 1 .OR. capeplt == 2 .OR. capeplt == 4 .OR.  &
                   capeplt == 5)                                        &
                  .AND. sigplt(62) == 0 ) THEN
              CALL get_mulovrlay('capeplt',7,ovrmul_num,ovrmulname,sovrlay)
              label = 'Surface CAPE (J/kg)'

              CALL ctrsetup(capeinc,capeminc,capemaxc,                  &
                   capovr,caphlf,capzro,capcol1,capcol2,'capeplt      ')

              CALL ctrsfc(cape,xc(1,1,2),yc(1,1,2),                     &
                   x1,x2,dxkm,y1,y2,dykm,                               &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:19),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,capeplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(62) = 1
            END IF
          END IF

          IF(ipriority(63) == ip) THEN
            IF( (cinplt == 1 .OR. cinplt == 2 .OR. cinplt == 4 .OR.     &
                   cinplt == 5 )                                        &
                  .AND. sigplt(63) == 0 )THEN
              CALL get_mulovrlay('cinplt',6,ovrmul_num,ovrmulname,sovrlay)
              label = 'Surface CIN (J/kg)'

              CALL ctrsetup(cininc,cinminc,cinmaxc,                     &
                   cinovr,cinhlf,cinzro,cincol1,cincol2,'cinplt      ')

              CALL ctrsfc(cin,xc(1,1,2),yc(1,1,2),                      &
                  x1,x2,dxkm,y1,y2,dykm,nx,ibgnl,iendl, ny,jbgnl,jendl, &
                  label(1:18),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,cinplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(63) = 1
            END IF
          END IF

          IF(ipriority(64) == ip ) THEN
            IF( (thetplt == 1 .OR. thetplt == 2 .OR. thetplt == 4 .OR.  &
                   thetplt == 5 )                                       &
                  .AND. sigplt(64) == 0 ) THEN
              CALL get_mulovrlay('thetplt',7,ovrmul_num,ovrmulname,sovrlay)
              label = 'Surface Theta-e (K)'

              CALL ctrsetup(thetinc,thetminc,thetmaxc,                  &
                   theovr,thehlf,thezro,thecol1,thecol2,'thetplt     ')

              CALL ctrsfc(thet,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,nx,ibgnl,iendl, ny,jbgnl,jendl, &
                  label(1:19),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,thetplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(64) = 1
            END IF
          END IF

          IF(ipriority(65) == ip ) THEN
            IF( (heliplt == 1 .OR. heliplt == 2 .OR. heliplt == 4 .OR.  &
                   heliplt == 5 )                                       &
                  .AND. sigplt(65) == 0 ) THEN
              CALL get_mulovrlay('heliplt',7,ovrmul_num,ovrmulname,sovrlay)
              label = '0-3km Helicity (m^2/s^2)'

!             IF(mp_opt >0) THEN
!               CALL mpsend1dew(heli,nx,ny,1,1,0,mptag1,tem5)
!               CALL mpsend1dns(heli,nx,ny,1,1,0,mptag2,tem5)
!
!               CALL mprecv1dew(heli,nx,ny,1,1,0,mptag1,tem5)
!               CALL mprecv1dns(heli,nx,ny,1,1,0,mptag2,tem5)
!             END IF

              CALL ctrsetup(heliinc,heliminc,helimaxc,                  &
                   helovr,helhlf,helzro,helcol1,helcol2,'heliplt     ')

              CALL ctrsfc(heli,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,nx,ibgnl,iendl, ny,jbgnl,jendl, &
                  label(1:24),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,heliplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(65) = 1
            END IF
          END IF


          IF(ipriority(66) == ip ) THEN
            IF( (ctcplt == 1 .OR. ctcplt == 2 .OR. ctcplt == 4 .OR.     &
                  ctcplt == 5 ) .AND. sigplt(66) == 0 ) THEN
              CALL get_mulovrlay('ctcplt',6,ovrmul_num,ovrmulname,sovrlay)
              label = 'Convective temp (C)'

              CALL ctrsetup(ctcinc,ctcminc,ctcmaxc,                     &
                   ctcovr,ctchlf,ctczro,ctccol1,ctccol2,'ctcplt      ')

              CALL ctrsfc(ct,xc(1,1,2),yc(1,1,2),                       &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:19),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,ctcplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(66) = 1
            END IF
          END IF


          IF(ipriority(67) == ip ) THEN
            IF( (brnplt == 1 .OR. brnplt == 2 .OR. brnplt == 4 .OR.     &
                   brnplt == 5 )                                        &
                  .AND. sigplt(67) == 0 ) THEN
              CALL get_mulovrlay('brnplt',6,ovrmul_num,ovrmulname,sovrlay)
              label = 'BRN Shear Denom (m2/s2)'

!             IF(mp_opt >0) THEN
!               CALL mpsend1dew(brn,nx,ny,1,1,0,mptag1,tem5)
!               CALL mpsend1dns(brn,nx,ny,1,1,0,mptag2,tem5)
!
!               CALL mprecv1dew(brn,nx,ny,1,1,0,mptag1,tem5)
!               CALL mprecv1dns(brn,nx,ny,1,1,0,mptag2,tem5)
!             END IF

              CALL ctrsetup(brninc,brnminc,brnmaxc,                     &
                   brnovr,brnhlf,brnzro,brncol1,brncol2,'brnplt      ')

              CALL ctrsfc(brn,xc(1,1,2),yc(1,1,2),                      &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:23),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,brnplt)
                       ! size of tem5 must be >= 6*nx*ny
              sigplt(67) = 1
            END IF
          END IF

          IF(ipriority(68) == ip ) THEN
            IF( (brnuplt == 1 .OR. brnuplt == 2 .OR. brnuplt == 4 .OR.  &
                   brnuplt == 5)                                        &
                  .AND. sigplt(68) == 0 ) THEN
              CALL get_mulovrlay('brnuplt',7,ovrmul_num,ovrmulname,sovrlay)
              label = 'Bulk Richardson Shear (1/s)'

!             IF(mp_opt >0) THEN
!               CALL mpsend1dew(brnu,nx,ny,1,1,0,mptag1,tem5)
!               CALL mpsend1dns(brnu,nx,ny,1,1,0,mptag2,tem5)
!
!               CALL mprecv1dew(brnu,nx,ny,1,1,0,mptag1,tem5)
!               CALL mprecv1dns(brnu,nx,ny,1,1,0,mptag2,tem5)
!             END IF

              CALL ctrsetup(brnuinc,bruminc,brumaxc,                    &
                  brnuovr,brnuhlf,brnuzro,brnucol1,brnucol2,'brnuplt     ')

              CALL ctrsfc(brnu,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:27),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,brnuplt)
              sigplt(68) = 1
            END IF
          END IF

          IF(ipriority(69) == ip ) THEN
            IF( (srlfplt == 1 .OR. srlfplt == 2 .OR. srlfplt == 4 .OR.  &
                   srlfplt == 5 ) .AND. sigplt(69) == 0 ) THEN
              CALL get_mulovrlay('srlfplt',7,ovrmul_num,ovrmulname,sovrlay)
              label = '0-2km StRel Flow (m/s)'

!             IF(mp_opt >0) THEN
!               CALL mpsend1dew(srlfl,nx,ny,1,1,0,mptag1,tem5)
!               CALL mpsend1dns(srlfl,nx,ny,1,1,0,mptag2,tem5)
!
!               CALL mprecv1dew(srlfl,nx,ny,1,1,0,mptag1,tem5)
!               CALL mprecv1dns(srlfl,nx,ny,1,1,0,mptag2,tem5)
!             END IF

              CALL ctrsetup(srlfinc,srlminc,srlmaxc,                    &
                  srlfovr,srlfhlf,srlfzro,srlfcol1,srlfcol2,'srlfplt     ')

              CALL ctrsfc(srlfl,xc(1,1,2),yc(1,1,2),                    &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:22),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,srlfplt)
              sigplt(69) = 1
            END IF
          END IF

          IF(ipriority(70) == ip ) THEN
            IF( (srmfplt == 1 .OR. srmfplt == 2 .OR. srmfplt == 4 .OR.  &
                   srmfplt == 5)  .AND. sigplt(70) == 0 ) THEN
              CALL get_mulovrlay('srmfplt',7,ovrmul_num,ovrmulname,sovrlay)
              label = '2-9km StRel Flow (m/s)'

!             IF(mp_opt >0) THEN
!               CALL mpsend1dew(srmfl,nx,ny,1,1,0,mptag1,tem5)
!               CALL mpsend1dns(srmfl,nx,ny,1,1,0,mptag2,tem5)
!
!               CALL mprecv1dew(srmfl,nx,ny,1,1,0,mptag1,tem5)
!               CALL mprecv1dns(srmfl,nx,ny,1,1,0,mptag2,tem5)
!             END IF

              CALL ctrsetup(srmfinc,srmminc,srmmaxc,                    &
                  srmfovr,srmfhlf,srmfzro,srmfcol1,srmfcol2,'srmfplt     ')

              CALL ctrsfc(srmfl,xc(1,1,2),yc(1,1,2),                    &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:22),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,srmfplt)
              sigplt(70) = 1
            END IF
          END IF

          IF(ipriority(71) == ip ) THEN
            IF( (capsplt == 1 .OR. capsplt == 2 .OR. capsplt == 4 .OR.  &
                   capsplt == 5 )   .AND. sigplt(71) == 0 ) THEN
              CALL get_mulovrlay('capsplt',7,ovrmul_num,ovrmulname,sovrlay)
              label = 'Cap Strength (K)'

              CALL ctrsetup(capsinc,capsminc,capsmaxc,                  &
                  capsovr,capshlf,capszro,capscol1,capscol2,'capsplt     ')

              CALL ctrsfc(capst,xc(1,1,2),yc(1,1,2),                    &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:16),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,capsplt)
              sigplt(71) = 1
            END IF
          END IF

          IF(ipriority(72) == ip ) THEN
            IF( (blcoplt == 1 .OR. blcoplt == 2 .OR. blcoplt == 4 .OR.  &
                   blcoplt == 5 )    .AND. sigplt(72) == 0 ) THEN
              CALL get_mulovrlay('blcoplt',7,ovrmul_num,ovrmulname,sovrlay)
!         label = '0-2km Layer Conv.*1000 (1/s)'
              label = '0-2km Conv.*1000 (1/s)'

!             IF(mp_opt >0) THEN
!               CALL mpsend1dew(blcon,nx,ny,1,1,0,mptag1,tem5)
!               CALL mpsend1dns(blcon,nx,ny,1,1,0,mptag2,tem5)
!
!               CALL mprecv1dew(blcon,nx,ny,1,1,0,mptag1,tem5)
!               CALL mprecv1dns(blcon,nx,ny,1,1,0,mptag2,tem5)
!             END IF

              CALL ctrsetup(blcoinc,blcominc,blcomaxc,                  &
                  blcoovr,blcohlf,blcozro,blcocol1,blcocol2,'blcoplt     ')

              CALL ctrsfc(blcon,xc(1,1,2),yc(1,1,2),                    &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:22),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,blcoplt)
              sigplt(72) = 1
            END IF
          END IF

          IF(ipriority(73) == ip ) THEN
            IF( (viqcplt == 1 .OR. viqcplt == 2 .OR. viqcplt == 4       &
                  .OR. viqcplt == 5 )                                   &
                  .AND. sigplt(73) == 0 ) THEN
              CALL get_mulovrlay('viqcplt',7,ovrmul_num,ovrmulname,sovrlay)
              label = 'Vert. Integrated qc (kg/m2)'

              CALL ctrsetup(viqcinc,viqcminc,viqcmaxc,                  &
                  viqcovr,viqchlf,viqczro,viqccol1,viqccol2,'viqcplt     ')

              CALL cal_viqc(tem7, qc, rhobar, zp, nx,ny,nz)

              CALL ctrsfc(tem7,xc(1,1,2),yc(1,1,2),                     &
                   x1,x2,dxkm,y1,y2,dykm,                               &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:27),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,viqcplt)
              sigplt(73) = 1
            END IF
          END IF

          IF(ipriority(74) == ip ) THEN
            IF( (viqrplt == 1 .OR. viqrplt == 2 .OR. viqrplt == 4       &
                   .OR. viqrplt == 5 )                                  &
                  .AND. sigplt(74) == 0 ) THEN
              CALL get_mulovrlay('viqrplt',7,ovrmul_num,ovrmulname,sovrlay)
              label = 'Vert. Integrated qr (kg/m2)'

              CALL ctrsetup(viqrinc,viqrminc,viqrmaxc,                  &
                  viqrovr,viqrhlf,viqrzro,viqrcol1,viqrcol2,'viqrplt     ')

              CALL cal_viqr(tem7, qr, rhobar, zp, nx,ny,nz)

              CALL ctrsfc(tem7,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:27),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,viqrplt)
              sigplt(74) = 1
            END IF
          END IF

          IF(ipriority(75) == ip ) THEN
            IF( (viqiplt == 1 .OR. viqiplt == 2 .OR. viqiplt == 4       &
                   .OR. viqiplt == 5 )                                  &
                  .AND. sigplt(75) == 0 ) THEN
              CALL get_mulovrlay('viqiplt',7,ovrmul_num,ovrmulname,sovrlay)
              label = 'Vert. Integrated qi (kg/m2)'

              CALL ctrsetup(viqiinc,viqiminc,viqimaxc,                  &
                  viqiovr,viqihlf,viqizro,viqicol1,viqicol2,'viqiplt     ')

              CALL cal_viqi(tem7, qi, rhobar, zp, nx,ny,nz)

              CALL ctrsfc(tem7,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:27),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,viqiplt)
              sigplt(75) = 1
            END IF
          END IF

          IF(ipriority(76) == ip ) THEN
            IF( (viqsplt == 1 .OR. viqsplt == 2 .OR. viqsplt == 4       &
                   .OR. viqsplt == 5 )                                  &
                  .AND. sigplt(76) == 0 ) THEN
              CALL get_mulovrlay('viqsplt',7,ovrmul_num,ovrmulname,sovrlay)
              label = 'Vert. Integrated qs (kg/m2)'

              CALL ctrsetup(viqsinc,viqsminc,viqsmaxc,                  &
                  viqsovr,viqshlf,viqszro,viqscol1,viqscol2,'viqsplt     ')

              CALL cal_viqs(tem7, qs, rhobar, zp, nx,ny,nz)

              CALL ctrsfc(tem7,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:27),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,viqsplt)
              sigplt(76) = 1
            END IF
          END IF

          IF(ipriority(77) == ip ) THEN
            IF( (viqhplt == 1 .OR. viqhplt == 2 .OR. viqhplt == 4       &
                   .OR. viqhplt == 5 )                                  &
                  .AND. sigplt(77) == 0 ) THEN
              CALL get_mulovrlay('viqhplt',7,ovrmul_num,ovrmulname,sovrlay)
              label = 'Vert. Integrated qh (kg/m2)'

              CALL ctrsetup(viqhinc,viqhminc,viqhmaxc,                  &
                  viqhovr,viqhhlf,viqhzro,viqhcol1,viqhcol2,'viqhplt     ')

              CALL cal_viqh(tem7, qh, rhobar, zp, nx,ny,nz)

              CALL ctrsfc(tem7,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:27),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,viqhplt)
              sigplt(77) = 1
            END IF
          END IF

          IF(ipriority(78) == ip ) THEN
            IF( (vilplt == 1 .OR. vilplt == 2 .OR. vilplt == 4          &
                   .OR. vilplt == 5 )                                   &
                  .AND. sigplt(78) == 0 ) THEN
              CALL get_mulovrlay('vilplt',6,ovrmul_num,ovrmulname,sovrlay)
              label = 'Vert. Integ Liquid (kg/m2)'

              CALL ctrsetup(vilinc,vilminc,vilmaxc,                     &
                   vilovr,vilhlf,vilzro,vilcol1,vilcol2,'vilplt      ')

              CALL cal_vil(tem7,qc,qr,rhobar,zp, nx,ny,nz,tem6)

              CALL ctrsfc(tem7,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:26),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,vilplt)
              sigplt(78) = 1
            END IF
          END IF

          IF(ipriority(79) == ip ) THEN
            IF( (viiplt == 1 .OR. viiplt == 2 .OR. viiplt == 4          &
                   .OR. viiplt == 5 )                                   &
                  .AND. sigplt(79) == 0 ) THEN
              CALL get_mulovrlay('viiplt',6,ovrmul_num,ovrmulname,sovrlay)
              label = 'Vert. Integrated ice (kg/m2)'

              CALL ctrsetup(viiinc,viiminc,viimaxc,                     &
                   viiovr,viihlf,viizro,viicol1,viicol2,'viiplt      ')

              CALL cal_vii(tem7,qi,qs,qh,rhobar,zp, nx,ny,nz,tem6)

              CALL ctrsfc(tem7,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:28),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,viiplt)
              sigplt(79) = 1
            END IF
          END IF

          IF(ipriority(80) == ip ) THEN
            IF( (vicplt == 1 .OR. vicplt == 2 .OR. vicplt == 4          &
                  .OR. vicplt == 5 )                                    &
                  .AND. sigplt(80) == 0 ) THEN
              CALL get_mulovrlay('vicplt',6,ovrmul_num,ovrmulname,sovrlay)
              label = 'Vert. Integ Condensate (kg/m2)'

              CALL ctrsetup(vicinc,vicminc,vicmaxc,                     &
                   vicovr,vichlf,viczro,viccol1,viccol2,'vicplt      ')

              CALL cal_vic(tem7,qc,qr,qi,qs,qh,rhobar,zp,nx,ny,nz,tem6)

              CALL ctrsfc(tem7,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:30),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,vicplt)
              sigplt(80) = 1
            END IF
          END IF
!
!-----------------------------------------------------------------------
!
!   Plot storm motion vector
!
!-----------------------------------------------------------------------
!
          IF(ipriority(81) == ip ) THEN
            IF( strmplt == 1 .AND. sigplt(81) == 0 ) THEN
              CALL get_mulovrlay('strmplt',7,ovrmul_num,ovrmulname,sovrlay)
              CALL vtrunt ( strmunit )
              CALL overlay( strmovr )
              CALL ctrcol(strmcol1,strmcol2)
              CALL varplt( 'strmplt     ' )
              CALL ctrvtr( strmunits, strmtype )

!             IF(mp_opt >0) THEN
!               CALL mpsend1dew(ustrm,nx,ny,1,1,0,mptag1,tem4)
!               CALL mpsend1dns(ustrm,nx,ny,1,1,0,mptag2,tem5)
!               CALL mprecv1dew(ustrm,nx,ny,1,1,0,mptag1,tem4)
!               CALL mprecv1dns(ustrm,nx,ny,1,1,0,mptag2,tem5)

!               CALL mpsend1dew(vstrm,nx,ny,1,1,0,mptag3,tem2)
!               CALL mpsend1dns(vstrm,nx,ny,1,1,0,mptag4,tem3)
!               CALL mprecv1dew(vstrm,nx,ny,1,1,0,mptag3,tem2)
!               CALL mprecv1dns(vstrm,nx,ny,1,1,0,mptag4,tem3)
!             END IF

              CALL cal_strm(tem7, tem8,ustrm,vstrm,strmunits,nx,ny,nz,  &
                  label,length)

              CALL vtrsfc( tem7(1,1,1),tem8(1,1,1),xc(1,1,2),yc(1,1,2), &
                  x1,x2,dxkm,y1,y2,dykm, nx,ibgnl,iendl,ist,            &
                  ny,jbgnl,jendl,jst,                                   &
                  label(1:length),time, runname,1.0,slicopt,            &
                  tem1,tem2,tem3,tem4,tem5,tem6,hterain)
                  ! size of tem6 must be >= 5*nx*ny
              sigplt(81) = 1
            END IF
          END IF
!
!-----------------------------------------------------------------------
!
!   Plot vertically integrated total water (kg/m**2)
!
!-----------------------------------------------------------------------
!
          IF(ipriority(82) == ip ) THEN
            IF( (vitplt == 1 .OR. vitplt == 2 .OR. vitplt == 4          &
                  .OR. vitplt == 5 )                                    &
                  .AND. sigplt(82) == 0 ) THEN
              CALL get_mulovrlay('vitplt',6,ovrmul_num,ovrmulname,sovrlay)
              label = 'Vert. Integ Total Water (kg/m2)'

              CALL ctrsetup(vitinc,vitminc,vitmaxc,                     &
                   vitovr,vithlf,vitzro,vitcol1,vitcol2,'vitplt      ')

              CALL cal_vit(tem7,qv,qc,qr,qi,qs,qh,rhobar,zp,nx,ny,nz,tem6)

              CALL ctrsfc(tem7,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:31),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,vitplt)
              sigplt(82) = 1
            END IF
          END IF
!
!-----------------------------------------------------------------------
!
!   Plot precipitable water vapor, cm
!
!-----------------------------------------------------------------------
!
          IF(ipriority(83) == ip ) THEN
            IF( (pwplt == 1 .OR. pwplt == 2 .OR. pwplt == 4 .OR. pwplt == 5 ) &
                  .AND. sigplt(83) == 0 ) THEN
              CALL get_mulovrlay('pwplt',5,ovrmul_num,ovrmulname,sovrlay)
              label = 'Precipitable Water Vapor(cm)'

              CALL ctrsetup(pwinc,pwminc,pwmaxc,                        &
                   pwovr,pwhlf,pwzro,pwcol1,pwcol2,'pwplt       ')

              CALL cal_pw(tem7,qv,rhobar,zp,nx,ny,nz,tem6)

              CALL ctrsfc(tem7,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:28),time, runname,1.0 ,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,pwplt)
              sigplt(83) = 1
            END IF
          END IF
!
!-----------------------------------------------------------------------
!
!   Plot total precipitation rate
!
!-----------------------------------------------------------------------
!
          IF(ipriority(84) == ip ) THEN
            IF( (tprplt == 1 .OR. tprplt == 2 .OR. tprplt == 4          &
                  .OR. tprplt == 5 )                                    &
                  .AND. sigplt(84) == 0 ) THEN
              CALL get_mulovrlay('tprplt',6,ovrmul_num,ovrmulname,sovrlay)
!         label = 'total Precipitation rate( mm/h)'

              CALL ctrsetup(tprinc,tprminc,tprmaxc,                     &
                   tprovr,tprhlf,tprzro,tprcol1,tprcol2,'tprplt      ')

              CALL cal_tpr(tem7,prcrate(1,1,1),nx,ny,nz,tprunits,       &
                  label,length)

!        call xcltyp(0)

              CALL ctrsfc(tem7,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:length),time, runname,1.0 ,tem1,tem2,tem3,    &
                  tem4,tem5,hterain,slicopt,tprplt)
              sigplt(84) = 1

!        call xcltyp(2)
            END IF
          END IF
!
!-----------------------------------------------------------------------
!
!   Plot grid scale precip. rate
!
!-----------------------------------------------------------------------
!
          IF(ipriority(85) == ip ) THEN
            IF( (gprplt == 1 .OR. gprplt == 2 .OR. gprplt == 4          &
                  .OR. gprplt == 5 )                                    &
                  .AND. sigplt(85) == 0 ) THEN
              CALL get_mulovrlay('gprplt',6,ovrmul_num,ovrmulname,sovrlay)
!         label = 'grid scale precip. rate( mm/h)'

              CALL ctrsetup(gprinc,gprminc,gprmaxc,                     &
                   gprovr,gprhlf,gprzro,gprcol1,gprcol2,'gprplt      ')

              CALL cal_gpr(tem7,prcrate(1,1,2),prcrate(1,1,4), nx,ny,nz, &
                  gprunits,label,length)

              CALL ctrsfc(tem7,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:length),time, runname,1.0 ,tem1,tem2,tem3,    &
                  tem4,tem5,hterain,slicopt,gprplt)
              sigplt(85) = 1
            END IF
          END IF
!
!-----------------------------------------------------------------------
!
!   Plot Convective precip. rate = prcrate(1,1,3)
!
!-----------------------------------------------------------------------
!
          IF(ipriority(86) == ip ) THEN
            IF( (cprplt == 1 .OR. cprplt == 2 .OR. cprplt == 4          &
                  .OR. cprplt == 5 )                                    &
                  .AND. sigplt(86) == 0 ) THEN
              CALL get_mulovrlay('cprplt',6,ovrmul_num,ovrmulname,sovrlay)
!         label = 'Convective precip. rate( mm/h)'

              CALL ctrsetup(cprinc,cprminc,cprmaxc,                     &
                   cprovr,cprhlf,cprzro,cprcol1,cprcol2,'cprplt      ')

              CALL cal_cpr(tem7,prcrate(1,1,3),nx,ny,nz,cprunits,       &
                  label,length)

              CALL ctrsfc(tem7,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  label(1:length),time, runname,1.0 ,tem1,tem2,tem3,    &
                  tem4,tem5,hterain,slicopt,cprplt)
              sigplt(86) = 1
            END IF
          END IF
!
!-----------------------------------------------------------------------
!
!  Plot surface characteristics.
!
!-----------------------------------------------------------------------
!
          IF(ipriority(101) == ip ) THEN
            IF( (soiltpplt == 1 .OR. soiltpplt == 2 .OR. soiltpplt == 4 &
                   .OR. soiltpplt == 5 )   .AND. sigplt(101) == 0 ) THEN
              WRITE(label,'(''SOIL TYPE '',I1,'' (index)'')') soiltpn
              time0=0.0

              DO j=1,ny
                DO i=1,nx
                  tem9(i,j,1)=soiltyp(i,j,soiltpn)
                END DO
              END DO
              CALL ctrsetup(soiltpinc,soiltpminc,soiltpmaxc,            &
                   styovr,styhlf,styzro,stycol1,stycol2,'soiltpplt   ')

              CALL ctrsfc(tem9,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  TRIM(label),time0, runname,1.0 ,tem1,tem2,tem3,       &
                  tem4,tem5,hterain,slicopt,soiltpplt)
              sigplt(101) = 1
            END IF
          END IF

          IF(ipriority(102) == ip ) THEN
            IF( (vegtpplt == 1 .OR. vegtpplt == 2 .OR. vegtpplt == 4    &
                   .OR. vegtpplt == 5 ) .AND. sigplt(102) == 0) THEN
              label = 'Vegetation type (index)'
              time0=0.0

              DO j=1,ny
                DO i=1,nx
                  tem9(i,j,1)=vegtyp(i,j)
                END DO
              END DO
              CALL ctrsetup(vegtpinc,vegtpminc,vegtpmaxc,               &
                   vtyovr,vtyhlf,vtyzro,vtycol1,vtycol2,'vegtpplt    ')

              CALL ctrsfc(tem9,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  TRIM(label),time0, runname,1.0 ,tem1,tem2,tem3,       &
                  tem4,tem5,hterain,slicopt,vegtpplt)
              sigplt(102)=1
            END IF
          END IF


          IF(ipriority(103) == ip ) THEN
            IF( (laiplt == 1 .OR. laiplt == 2 .OR. laiplt == 4 .OR.     &
                   laiplt == 5 ) .AND. sigplt(103) == 0) THEN
              label = 'Leaf Area Index (index)'
              time0=0.0
              CALL ctrsetup(laiinc,laiminc,laimaxc,                     &
                   laiovr,laihlf,laizro,laicol1,laicol2,'laiplt      ')

              CALL ctrsfc(lai,xc(1,1,2),yc(1,1,2),                      &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  TRIM(label),time0, runname,1.0 ,tem1,tem2,tem3,       &
                  tem4,tem5,hterain,slicopt,laiplt)
              sigplt(103) =1
            END IF
          END IF

          IF(ipriority(104) == ip) THEN
            IF( (rouplt == 1 .OR. rouplt == 2 .OR. rouplt == 4 .OR.     &
                   rouplt == 5) .AND. sigplt(104) == 0) THEN
              label = 'Surface roughness (nounit)'
              time0=0.0
              CALL ctrsetup(rouinc,rouminc,roumaxc,                     &
                   rouovr,rouhlf,rouzro,roucol1,roucol2,'rouplt      ')

              CALL ctrsfc(roufns,xc(1,1,2),yc(1,1,2),                   &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  TRIM(label),time0, runname,1.0 ,tem1,tem2,tem3,       &
                  tem4,tem5,hterain,slicopt,rouplt)
              sigplt(104) = 1
            END IF
          END IF

          IF(ipriority(105) == ip) THEN
            IF( (vegplt == 1 .OR. vegplt == 2 .OR. vegplt == 4  .OR.    &
                   vegplt == 5)  .AND. sigplt(105) == 0) THEN
              label = 'Vegetation fraction (fraction)'
              time0=0.0
              CALL ctrsetup(veginc,vegminc,vegmaxc,                     &
                   vegovr,veghlf,vegzro,vegcol1,vegcol2,'vegplt      ')

              CALL ctrsfc(veg,xc(1,1,2),yc(1,1,2),                      &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  TRIM(label),time0, runname,1.0 ,tem1,tem2,tem3,       &
                  tem4,tem5,hterain,slicopt,vegplt)
              sigplt(105) = 1
            END IF
          END IF

          IF(ipriority(106) == ip) THEN
            IF( (snowdplt == 1 .OR. snowdplt == 2 .OR. snowdplt == 4  .OR. &
                   snowdplt == 5)  .AND. sigplt(106) == 0) THEN
              label = 'Snow depth (m)'
              CALL ctrsetup(snowdinc,snowdminc,snowdmaxc,               &
                   snowdovr,snowdhlf,snowdzro,snowdcol1,                &
                   snowdcol2,'snowdplt      ')

              DO j=1,ny
                DO i=1,nx
                  tem9(i,j,1)=snowdpth(i,j)
                END DO
              END DO

              CALL ctrsfc(tem9,xc(1,1,2),yc(1,1,2),                     &
                  x1,x2,dxkm,y1,y2,dykm,                                &
                  nx,ibgnl,iendl, ny,jbgnl,jendl,                       &
                  TRIM(label),time, runname, 1.0,tem1,tem2,tem3,        &
                  tem4,tem5,hterain,slicopt,snowdplt)
              sigplt(106) = 1
            END IF
          END IF

!-----------------------------------------------------------------------
!
!  Overlay wind vector/barb if necessary  on 2-D surface fields.
!
!-----------------------------------------------------------------------
!
          CALL varplt( 'vtrplt      ' )
          IF(varname(1:6) == ovrname(1:6) .AND. sovrlay == 1) plotovr=.true.
          IF( vtrplt == 1 .AND. plotovr ) THEN
            CALL vtrunt ( vtrunit )
            IF(plotovr) CALL overlay ( 1 )
            IF(.NOT.plotovr)  CALL overlay( vtrovr )
            CALL ctrcol(vtrcol1,vtrcol2)
            CALL varplt( 'vtrplt      ' )
            CALL ctrvtr( vtrunits, vtrtype )

            CALL cal_vtr(tem7,tem8,tem9,u,v,w,nx,ny,nz,vtrunits,        &
                label,length)

            CALL vtrsfc( tem7(1,1,1),tem8(1,1,1),xc(1,1,2),yc(1,1,2),   &
                x1,x2,dxkm,y1,y2,dykm, nx,ibgnl,iendl,ist,              &
                ny,jbgnl,jendl,jst,                                     &
                label(1:length),time, runname,1.0,slicopt,              &
                tem1,tem2,tem3,tem4,tem5,tem6,hterain)
                ! size of tem6 must be >= 5*nx*ny
            IF(plotovr) THEN
              plotovr=.false.
              sovrlay = 0
            END IF
          END IF

        END IF  ! For slicopt=8 - two plots
!
!-----------------------------------------------------------------------
!
!  plot arbitrary variables.
!
!-----------------------------------------------------------------------
!

!NEW
        IF(arbvaropt == 1) THEN
          IF(slicopt <= 7 .AND. var3dnum > 0) THEN
            DO i = 1,var3dnum
              IF(ipriority(150+i) == ip ) THEN
                IF(var3dplot(i) /= 0) THEN

                  CALL ctrsetup(var3dinc(i),var3dminc(i),var3dmaxc(i),  &
                       var3dovr(i),var3dhlf(i),var3dzro(i),             &
                       var3dcol1(i),var3dcol2(i),var3d(i))

                  CALL readvar1(nx,ny,nz, var3dv, var3d(i),var_name,    &
                      varunits, time, runname, dirname3d(i), istatus)

                  label=var3d(i)(1:6)//'('//varunits//')'

                  CALL ctr3d(var3dv,xc,yc,zps3d,                        &
                       x1,x2,dxkm,y1,y2,dykm,z1,z2,dzkm,                &
                      nx,ibgnl,iendl, ny,jbgnl,jendl, nz,kbgn,kend,     &
                      label,time,slicopt,kslice,jslice,islice,  &
                      n,xp,yp,b1,b2,zs2,                                &
                      runname,1.0,tem1,tem2,tem3,                       &
                      tem4,tem5,tem6,hterain,var3dplot(i))

                END IF
              END IF
            END DO
          END IF

          IF(slicopt == 8 .AND. var2dnum > 0) THEN
            DO i = 1,var2dnum
              IF(ipriority(170+i) == ip ) THEN
                IF(var2dplot(i) /= 0 .AND. sigplt(170+i) == 0) THEN
                  CALL ctrsetup(var2dinc(i),var2dminc(i),var2dmaxc(i),  &
                       var2dovr(i),var2dhlf(i),var2dzro(i),             &
                       var2dcol1(i),var2dcol2(i),var2d(i))

                  CALL readvar1(nx,ny,1, var2dv, var2d(i),var_name,     &
                      varunits, time, runname, dirname2d(i), istatus)
!            print*, var_name, varunits
             
                  label=var2d(i)(1:6)//'('//varunits//')'                  

                  CALL ctrsfc(var2dv,xc(1,1,2),yc(1,1,2),               &
                      x1,x2,dxkm,y1,y2,dykm,                            &
                      nx,ibgnl,iendl, ny,jbgnl,jendl,                   &
                      label,time, runname,1.0 ,tem1,tem2,tem3,  &
                      tem4,tem5,hterain,1,var2dplot(i))
                  sigplt(170+i) = 1

                END IF
              END IF
            END DO
          END IF

        END IF
!
! 06/06/2002 Zuwen He 
!
! plotting soil variables, tsoil and qsoil 
!
        IF (iplot(slicopt) /= 0 .AND.  & 
            (slicopt == 9 .OR. slicopt == 10 .OR. slicopt == 11)) THEN 

          IF(ipriority(43) == ip ) THEN
            IF(tsoilplt == 1 .OR. tsoilplt == 2 .OR. tsoilplt == 4 .OR. &
               tsoilplt == 5) THEN
              CALL get_mulovrlay('tsoilplt',8,ovrmul_num,ovrmulname,sovrlay)
              label = 'Soil temperature (K)'
              CALL ctrsetup(tsoilinc,tsoilminc,tsoilmaxc,             &
                   tsoilovr,tsoilhlf,tsoilzro,tsoilcol1,tsoilcol2,    & 
                   'tsoilplt    ')

              CALL ctr3d(tsoil(1,1,1,0),xc,yc,zpsoils3d,                    &
                   x1,x2,dxkm,y1,y2,dykm,zsoil1,zsoil2,dzsoilcm,       &
                   nx,ibgnl,iendl,ny,jbgnl,jendl,nzsoil,ksoilbgn,ksoilend, &
                   label(1:25),                                       &
                   time,slicopt,ksoilslice,jsoilslice,isoilslice,     &
                   n,xp,yp,b1,b2,zs2,                                 &
                   runname,1.0,tem1,tem2,tem3,                        &
                   tem4,tem5,tem6,hterain,tsoilplt)

              sigplt(43) = 1
            END IF
          END IF

          IF(ipriority(44) == ip ) THEN
            IF(qsoilplt == 1 .OR. qsoilplt == 2 .OR. qsoilplt == 4 .OR. &
                 qsoilplt == 5) THEN
              CALL get_mulovrlay('qsoilplt',8,ovrmul_num,ovrmulname,sovrlay)
              label = 'Soil moisture (m**3/m**3)'
              CALL ctrsetup(qsoilinc,qsoilminc,qsoilmaxc,               &
                   qsoilovr,qsoilhlf,qsoilzro,qsoilcol1,qsoilcol2, & 
                   'qsoilplt    ')

              CALL ctr3d(qsoil(1,1,1,0),xc,yc,zpsoils3d,               &
                   x1,x2,dxkm,y1,y2,dykm,zsoil1,zsoil2,dzsoilcm,       &
                   nx,ibgnl,iendl, ny,jbgnl,jendl,nzsoil,ksoilbgn,ksoilend, &
                   label(1:25),time,slicopt,                           &
                   ksoilslice,jsoilslice,isoilslice,n,xp,yp,b1,b2,zs2, &
                   runname,1.0,tem1,tem2,tem3,                         &
                   tem4,tem5,tem6,hterain,qsoilplt)

              sigplt(44) = 1
            END IF
          END IF

        END IF 
!
!-----------------------------------------------------------------------
!
!  End of priority loop
!
!-----------------------------------------------------------------------
!
        END DO

!
!-----------------------------------------------------------------------
!
!  End of loop over slices
!
!-----------------------------------------------------------------------
!

      END DO

!
!-----------------------------------------------------------------------
!
!  End of loop over slicopt (i.e. x-y, x-z or y-z slice plotting).
!
!-----------------------------------------------------------------------
!

    END DO

!
!-----------------------------------------------------------------------
!
!  3-D wireframe isosurface plots.
!
!-----------------------------------------------------------------------
!
    IF( w3dplt == 1) THEN
!   
!    Plot w=wisosf isosurface.
!   
      CALL wirfrm(w,nx,ibgn,iend,ny,jbgn,jend,nz,kbgn,kend,               &
                  wisosf, tem2)
    
      IF(myproc == 0) THEN
    
        CALL xqpspc(x1,x2,y1,y2)
        CALL xchmag(0.02*(y2-y1)*lblmag)
        CALL xqmap (x1,x2,y1,y2)
        CALL xcharl(x1,y1-0.02*(y2-y1),runname)
    
        WRITE(label,'(a,f4.1,a,f6.1,a)')                                    &
            'w=',wisosf,' m/s isosurface at t=',time/60.0,' min'
    
        CALL xcharl(x1,y1-0.04*(y2-y1),label )
    
      END IF
!   
!    Plot w=-wisosf isosurface.
!   
      CALL wirfrm(w,nx,ibgn,iend,ny,jbgn,jend,nz,kbgn,kend,               &
                    -wisosf, tem2)
    
      IF(myproc == 0) THEN
    
        CALL xqpspc(x1,x2,y1,y2)
        CALL xchmag(0.02*(y2-y1)*lblmag)
        CALL xqmap (x1,x2,y1,y2)
        CALL xcharl(x1,y1-0.02*(y2-y1),runname)
    
        WRITE(label,'(a,f4.1,a,f6.1,a)')                                    &
            'w=',-wisosf,' m/s isosurface at t=',time/60.0,' min'
    
        CALL xcharl(x1,y1-0.04*(y2-y1),label )
    
      END IF
    
    END IF
    
    IF( q3dplt == 1) THEN
      DO k=1,nz
        DO j=1,ny
          DO i=1,nx
            tem1(i,j,k)=(qr(i,j,k)+qc(i,j,k))*1000.0
          END DO
        END DO
      END DO
    
      CALL wirfrm(tem1,                                                   &
           nx,ibgn,iend,ny,jbgn,jend,nz,kbgn,kend,qisosf,tem2)
    
      IF(myproc == 0) THEN
    
        CALL xqpspc(x1,x2,y1,y2)
        CALL xchmag(0.02*(y2-y1)*lblmag)
        CALL xqmap (x1,x2,y1,y2)
        CALL xcharl(x1,y1-0.02*(y2-y1),runname)
    
        WRITE(label,'(a,f4.1,a,f6.1,a)')                                  &
            'qr+qc=',qisosf,' kg/kg isosurface at t=',time/60.0,' min'
    
        CALL xcharl(x1,y1-0.04*(y2-y1),label )
    
      END IF
    
    END IF
    
    IF (profopt == 0) GO TO 900
!
!-----------------------------------------------------------------------
!
!  Reinitialize plotting parameters for profile plotting
!
!-----------------------------------------------------------------------
!
    CALL xdspac(0.9*winsiz)
    IF( nxprpic == 1 .AND. nyprpic == 1) CALL xdspac(0.85*winsiz)
    
    CALL xspace(nxprpic, nyprpic, angl , xlimit,ylimit)
    
    CALL xpmagn(margnx*xlimit, margny*ylimit)
    
    CALL xnwfrm

!
!-----------------------------------------------------------------------
!
!  Draw all the profiles based on the user inputs
!
!-----------------------------------------------------------------------
!
    IF (uprof == 1) THEN
    
      onvf = 0
      CALL avgx(u, onvf, nx,ny,nz, 1, nx-1, 1, ny-1, 1, nz-1, tem1)
      onvf = 1
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,uprmin,uprmax,          &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'u (m/s)', 'height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (vprof == 1) THEN
    
      onvf = 0
      CALL avgy(v, onvf, nx,ny,nz, 1, nx-1, 1, ny-1, 1, nz-1, tem1)
      onvf = 1
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,vprmin,vprmax,          &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'v (m/s)', 'height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (wprof == 1) THEN
    
      onvf = 0
      CALL avgz(w, onvf, nx,ny,nz, 1, nx-1, 1, ny-1, 1, nz-1, tem1)
      onvf = 1
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,wprmin,wprmax,          &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'w (m/s)', 'height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (ptprof == 1) THEN
    
      DO k = 1, nz
        DO j = 1, ny
          DO i = 1, nx
            tem1(i,j,k) = ptprt(i,j,k)+ptbar(i,j,k)
          END DO
        END DO
      END DO
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,ptprmin,ptprmax,        &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'pt (K)', 'height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (pprof == 1) THEN
    
      DO k = 1, nz
        DO j = 1, ny
          DO i = 1, nx
            tem1(i,j,k) = pprt(i,j,k)+pbar(i,j,k)
          END DO
        END DO
      END DO
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,pprmin,pprmax,          &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'p (Pa)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (qvprof == 1) THEN
    
      DO k = 1, nz
        DO j = 1, ny
          DO i = 1, nx
            tem1(i,j,k) = qv(i,j,k) * 1000.0
          END DO
        END DO
      END DO
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,qvprmin,qvprmax,        &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'qv (g/kg)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (qcprof == 1) THEN
    
      DO k = 1, nz
        DO j = 1, ny
          DO i = 1, nx
            tem1(i,j,k) = qc(i,j,k) * 1000.0
          END DO
        END DO
      END DO
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,qcpmin,qcpmax,          &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'qc (g/kg)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (qrprof == 1) THEN
    
      DO k = 1, nz
        DO j = 1, ny
          DO i = 1, nx
            tem1(i,j,k) = qr(i,j,k) * 1000.0
          END DO
        END DO
      END DO
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,qrpmin,qrpmax,          &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'qr (g/kg)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (qiprof == 1) THEN
    
      DO k = 1, nz
        DO j = 1, ny
          DO i = 1, nx
            tem1(i,j,k) = qi(i,j,k) *  1000.0
          END DO
        END DO
      END DO
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,qipmin,qipmax,          &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'qi (g/kg)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF

    IF (qsprof == 1) THEN
    
      DO k = 1, nz
        DO j = 1, ny
          DO i = 1, nx
            tem1(i,j,k) = qs(i,j,k) * 1000.0
          END DO
        END DO
      END DO
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,qspmin,qspmax,          &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'qs (g/kg)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (qhprof == 1) THEN
    
      DO k = 1, nz
        DO j = 1, ny
          DO i = 1, nx
            tem1(i,j,k) = qh(i,j,k) * 1000.0
          END DO
        END DO
      END DO
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,qhpmin,qhpmax,          &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'qh (g/kg)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (kmhprof == 1) THEN
    
      DO k = 1, nz
        DO j = 1, ny
          DO i = 1, nx
            tem1(i,j,k) = kmh(i,j,k)
          END DO
        END DO
      END DO
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,kmhpmin,kmhpmax,        &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'kmh (m**2/s)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (kmvprof == 1) THEN
    
      DO  k = 1, nz
        DO  j = 1, ny
          DO  i = 1, nx
            tem1(i,j,k) = kmv(i,j,k) * 1.0
          END DO
        END DO
      END DO
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,kmvpmin,kmvpmax,        &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'kmv (m**2/s)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (tkeprof == 1) THEN
    
      DO k = 1, nz
        DO j = 1, ny
          DO i = 1, nx
            tem1(i,j,k) = tke(i,j,k) * 1.0
          END DO
        END DO
      END DO
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,tkepmin,tkepmax,        &
             xprof, yprof, nprof, zprofbgn, zprofend,                       &
             'tke ((m/s)**2)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (rhprof == 1) THEN
    
      CALL temper(nx,ny,nz,pt, pprt,pbar, tem1)
      CALL getqvs(nx,ny,nz, 1,nx-1,1,ny-1,1,nz-1, pbar,tem1,tem2)
    
      DO k=1,nz-1
        DO j=1,ny-1
          DO i=1,nx-1
            tem1(i,j,k) = qv(i,j,k)/tem2(i,j,k)
          END DO
        END DO
      END DO
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,rhpmin,rhpmax,          &
             xprof, yprof, nprof, zprofbgn, zprofend,                       &
             'RH', 'height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (rfprof == 1) THEN
    
      IF (rfopt == 2) THEN
        CALL reflec_ferrier(nx,ny,nz, rhobar, qr, qs, qh, tz, tem5)
      ELSE
        CALL reflec(nx,ny,nz, rhobar, qr, qs, qh, tem5)
      END IF
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem5,xc,yc,zpc,rfpmin,rfpmax,          &
             xprof, yprof, nprof, zprofbgn, zprofend,                       &
             'ref (dBZ)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (pteprf == 1) THEN
    
      DO k=1,nz-1
        DO j=1,ny-1
          DO i=1,nx-1
            tem2(i,j,k)=pprt(i,j,k)+pbar(i,j,k)
          END DO
        END DO
      END DO
    
      CALL pt2pte(nx,ny,nz,1,nx-1,1,ny-1,1,nz-1,tem2,pt,qv,tem1)
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,ptepmin,ptepmax,        &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'pte (K)', 'height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (upprof == 1) THEN
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,uprt,xc,yc,zpc,uppmin,uppmax,          &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'uprt (m/s)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF

    IF (vpprof == 1) THEN
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,vprt,xc,yc,zpc,vppmin,vppmax,          &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'vprt (m/s)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (wpprof == 1) THEN
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,wprt,xc,yc,zpc,wppmin,wppmax,          &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'wprt (m/s)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (ptpprf == 1) THEN
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,ptprt,xc,yc,zpc,ptppmin,ptppmax,       &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'ptprt (K)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (ppprof == 1) THEN
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,pprt,xc,yc,zpc,pppmin,pppmax,          &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'pprt (Pa)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (qvpprf == 1) THEN
    
      DO k = 1, nz
        DO j = 1, ny
          DO i = 1, nx
            tem1(i,j,k) = qvprt(i,j,k) * 1000.0
          END DO
        END DO
      END DO
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,qvppmin,qvppmax,        &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'qvprt (g/kg)','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (vorpprf == 1) THEN
    
      DO k=2,nz-2
        DO j=2,ny-2
          DO i=2,nx-2
            tem1(i,j,k)= 1.0E5*(                                          &
                (v(i+1,j,k)-v(i-1,j,k)+v(i+1,j+1,k)-v(i-1,j+1,k))/        &
                (4*(x(i+1)-x(i)))-                                        &
                (u(i,j+1,k)-u(i,j-1,k)+u(i+1,j+1,k)-u(i+1,j-1,k))/        &
                (4*(y(j+1)-y(j))) )
          END DO
        END DO
      END DO
    
      DO j=2,ny-2
        DO i=2,nx-2
          tem1(i,j,   1)=tem1(i,j,   2)
          tem1(i,j,nz-1)=tem1(i,j,nz-2)
        END DO
      END DO
    
      DO k=1,nz-1
        DO j=2,ny-2
          tem1(   1,j,k)=tem1(   2,j,k)
          tem1(nx-1,j,k)=tem1(nx-2,j,k)
        END DO
      END DO
    
      DO k=1,nz-1
        DO i=1,nx-1
          tem1(i,   1,k)=tem1(i,   2,k)
          tem1(i,ny-1,k)=tem1(i,ny-2,k)
        END DO
      END DO
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,vorppmin,vorppmax,      &
           xprof, yprof, nprof, zprofbgn, zprofend,                       &
           'Vort *10^5','height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (divpprf == 1) THEN
    
      DO k=1,nz-1
        DO j=1,ny-1
          DO i=1,nx-1
            tem1(i,j,k)= 1000.0 * (                                       &
                (u(i+1,j,k)-u(i,j,k))/(x(i+1)-x(i))+                      &
                (v(i,j+1,k)-v(i,j,k))/(y(j+1)-y(j)) )
          END DO
        END DO
      END DO
    
      nzprofc = nz-1
      CALL vprofil (nx,ny,nz,nzprofc,tem1,xc,yc,zpc,divppmin,divppmax,            &
           xprof,yprof,nprof,zprofbgn,zprofend,                           &
           'Div*1000', 'height (km)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (tsoilprof == 1) THEN
    
      DO k=1,nzsoil
        DO j=1,ny
          DO i=1,nx
            tem1(i,j,k)= tsoil(i,j,k,0)
          END DO
        END DO
      END DO
    
      nzprofc = nzsoil
      CALL vprofil (nx,ny,nzsoil,nzprofc,tem1,xc,yc,zpsoilc,                      &
           tsoilprofmin,tsoilprofmax,                                     &
           xprof,yprof,nprof,zsoilprofbgn,zsoilprofend,                   &
           'tsoil', 'height (cm)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF
    
    IF (qsoilprof == 1) THEN
    
      DO k=1,nzsoil
        DO j=1,ny
          DO i=1,nx
            tem1(i,j,k)= qsoil(i,j,k,0)
          END DO
        END DO
      END DO
    
      nzprofc = nzsoil
      CALL vprofil (nx,ny,nzsoil,nzprofc,tem1,xc,yc,zpsoilc,              &
           qsoilprofmin,qsoilprofmax,                                     &
           xprof,yprof,nprof,zsoilprofbgn,zsoilprofend,                   &
           'qsoil', 'height (cm)',npicprof,tem2,tem3)
      IF(myproc == 0) CALL runlab (runname)
    
    END IF

!
!-----------------------------------------------------------------------
!
!  Set up a new page if inwfrm = 1, i.e., flush the plot buffer and
!  move to the next plotting page.
!
!-----------------------------------------------------------------------
!
    900   CONTINUE

    IF( inwfrm == 1 ) CALL xnwfrm

!  IF ( ireturn == 0 .AND. hinfmt == 9 ) THEN
!    GO TO 15              ! read one more time in the same GrADS file
!  ELSE
!    CLOSE ( nchin )      ! read another data file
!  END IF


  END DO    ! data file loop

  GO TO 800

  700   CONTINUE

  WRITE(6,'(a,/a,i3,a)')                                                &
       ' Bad return status from data file reading',                     &
       ' ireturn = ', ireturn,' program stopped.'
  STOP

  800   CONTINUE
  
  IF(myproc ==0 ) THEN

    CALL xgrend

    WRITE(6,'(a)') 'Program completed.'

    WRITE(6,'(/1x,a,e14.6,a)')                                         &
      'Total CPU time used =',f_cputime()-cpu0,'s.'

    WRITE (6,*) "Maxumum memory allocation (in words):",               &
               max_memory_use
  END IF

  IF (mp_opt > 0) CALL mpexit(0)

  STOP
END PROGRAM ARPSPLT