PROGRAM arpsplt,547
!
!
!##################################################################
!##################################################################
!######                                                      ######
!######                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
  CHARACTER (LEN=256) :: outfilename
!
!-----------------------------------------------------------------------
!
  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 :: idxfmt,filetm
  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
  LOGICAL :: rdallhist
  INTEGER :: onvf
  LOGICAL, PARAMETER :: back=.true.

  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

  ! trajectory namelists and variables -Dan Dawson 12/03/2004

  INTEGER :: trajfileflag
  INTEGER :: trajopt
  INTEGER :: ntimes
  INTEGER, PARAMETER :: nmax_times=20
  INTEGER :: nunit(nmax_times)
  
  INTEGER, PARAMETER :: npoints_max=10000
  INTEGER, PARAMETER :: ntrajcs_max=30
  INTEGER :: traj_col(ntrajcs_max)
  INTEGER :: labelopt
  INTEGER :: labelfreq
  REAL :: labelmag

  REAL :: tzero, tend, tstart_calc, tend_calc, tinc_calc, reftime(nmax_times)
  CHARACTER(LEN=256) :: trajc_fn_in(nmax_times), trajc_fn_out
  COMMON  /trajectopt/ trajopt,tstart_calc,tend_calc,tinc_calc,traj_col,reftime,trajc_fn_in,ntimes,labelopt,labelfreq,labelmag

  INTEGER :: ntrajc0,ntrajcs, ntrajcs_in, npoints, npoints_in, npoints_cur,itrajc1,jtrajc1
  INTEGER :: istat
 
  REAL, allocatable :: xtrajc(:,:,:),ytrajc(:,:,:),ztrajc(:,:,:),ttrajc(:)

  REAL, allocatable :: xtrajc1(:,:),ytrajc1(:,:),ztrajc1(:,:)

  REAL :: xlow, xhigh, ylow, yhigh, zlow, zhigh, pttem
  INTEGER :: nstart, nend, npnt, ntrj, ninc
  CHARACTER(LEN=20) :: CH
  INTEGER :: LCH
  REAL :: chsize

  !


  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

  INTEGER :: finfmt3d(maxarbvar), finfmt2d(maxarbvar)

  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,finfmt3d,                                      &
      var3d,var3dplot, var3dinc, var3dminc,var3dmaxc,                   &
      var3dovr, var3dhlf, var3dzro,var3dsty,var3dcol1, var3dcol2,       &
      var3dprio, var2dnum,dirname2d,finfmt2d,                           &
      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

  INTEGER :: pen_status

!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
  trajfileflag = 0

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

!-----------------------------------------------------------------------
!
!  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

  IF(arbvaropt < 10) THEN
    rdallhist=.true.
  ELSE
    arbvaropt=mod(arbvaropt,10)
    rdallhist=.false.
  END IF

  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")

  allocate(xtrajc(npoints_max,ntrajcs_max,nmax_times),stat=istatus)
  CALL check_alloc_status(istatus, "arpsplt:xtrajc")

  allocate(ytrajc(npoints_max,ntrajcs_max,nmax_times),stat=istatus)
  CALL check_alloc_status(istatus, "arpsplt:ytrajc")

  allocate(ztrajc(npoints_max,ntrajcs_max,nmax_times),stat=istatus)
  CALL check_alloc_status(istatus, "arpsplt:ztrajc")

  allocate(ttrajc(npoints_max),stat=istatus)
  CALL check_alloc_status(istatus, "arpsplt:ttrajc")

  allocate(xtrajc1(ntrajcs_max,nmax_times),stat=istatus)
  allocate(ytrajc1(ntrajcs_max,nmax_times),stat=istatus)
  allocate(ztrajc1(ntrajcs_max,nmax_times),stat=istatus)

  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()

    IF(nf==1 .OR. rdallhist) THEN

    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
      
      IF (LEN_TRIM(outfilename) < 1) THEN
        WRITE(outfilename,'(a)') TRIM(dirname)//runname(1:lfnkey)//'.ps'
      ELSE
        WRITE(outfilename,'(a)') TRIM(dirname)//TRIM(outfilename)//'.ps'
      END IF
      CALL xpsfn(TRIM(outfilename), 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)

    CALL mpupdatei(imax,1)   ! only processor 0 contains the right indices
    CALL mpupdatei(jmax,1)
    CALL mpupdatei(kmax,1)

    CALL mpupdatei(imin,1)
    CALL mpupdatei(jmin,1)
    CALL mpupdatei(kmin,1)

!  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)

    ELSE

      idxfmt=0
      IF(hinfmt==1) THEN
        idxfmt=INDEX(filename,'bin',back)
      ELSE IF(hinfmt==2) THEN
        idxfmt=INDEX(filename,'asc',back)
      ELSE IF(hinfmt==3) THEN
        idxfmt=INDEX(filename,'hdf',back)
      ELSE IF(hinfmt==4) THEN
        idxfmt=INDEX(filename,'pak',back)
      ELSE IF(hinfmt==5) THEN
        idxfmt=INDEX(filename,'svi',back)
      ELSE IF(hinfmt==6) THEN
        idxfmt=INDEX(filename,'bn2',back)
      ELSE IF(hinfmt==7) THEN
        idxfmt=INDEX(filename,'net',back)
      ELSE IF(hinfmt==8) THEN
        idxfmt=INDEX(filename,'net',back)
      ELSE IF(hinfmt==9) THEN
        idxfmt=INDEX(filename,'gad',back)
      ELSE IF(hinfmt==10) THEN
        idxfmt=INDEX(filename,'grb',back)
      ELSE IF(hinfmt==11) THEN
        idxfmt=INDEX(filename,'v5d',back)
      END IF

      IF(idxfmt > 0) THEN
        READ(filename((idxfmt+3):(idxfmt+8)),'(i6)') filetm
        WRITE(6,'(/a,i7)') ' Read file time as: ',filetm
        time=FLOAT(filetm)
        curtim=time
      END IF
      
    END IF   !rdallhist
!
!-----------------------------------------------------------------------
!
!  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 = ypbgn
            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

            IF (zhstrch /= 0.0) THEN
              aspratio = zhstrch
            ELSE
              aspratio = xr/zr
            END IF
          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)

                  CALL readvar2(nx,ny,nz, var3dv, var3d(i),var_name,    &
                      varunits, time, runname, dirname3d(i),            &
                      finfmt3d(i), mp_opt*readsplit, 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)

                  CALL readvar2(nx,ny,1, var2dv, var2d(i),var_name,     &
                      varunits, time, runname, dirname2d(i),            &
                      finfmt2d(i), mp_opt*readsplit, istatus)
             
                  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

    ! Plotting trajectories (Dan Dawson 12/03/2004) -should probably be 
    ! plotted in priority loop like everything else

    IF (trajopt == 1) THEN

    DO k=1,ntimes

      print*,'k = ',k

!-----------------------------------------------------------------------
! Read trajectory data 
!-----------------------------------------------------------------------

      !print*,trajc_fn_in(k)
      IF(curtim >= tstart_calc .and. curtim < tend_calc) THEN
        IF(trajfileflag == 0) THEN
          trajfileflag = 1
          CALL getunit (nunit(k))

          write(6,'(a)') 'Opening ',trim(trajc_fn_in(k))
          OPEN(UNIT=nunit(k),FILE=trim(trajc_fn_in(k)),STATUS='old',   &
                FORM='formatted',IOSTAT= istat )
   
          IF(istat == 0) THEN
            print*,'Trajectory file ',trim(trajc_fn_in(k)),' successfully read.'

            READ(nunit(k),'(a)') runname
            READ(nunit(k),'(6e17.6)') xlow, xhigh, ylow, yhigh, zlow, zhigh

            write(6,'(6e17.6)') xlow, xhigh, ylow, yhigh, zlow, zhigh
            READ(nunit(k),'(3e17.6)') dx, dy, dz
            write(6,'(3e17.6)') dx, dy, dz

            READ(nunit(k),'(3e17.6)') tstart, tzero, tend
            READ(nunit(k),'(i10)') npoints
            READ(nunit(k),'(i10)') ntrajcs

            DO j=1,npoints
              READ(nunit(k),'(4e17.6)',err=115,end=115) ttrajc(j)
              READ(nunit(k),'(i10)',err=115,end=115) ntrajcs_in
              IF( ntrajcs_in /= ntrajcs ) then
               print*,'ntrajcs read in .ne. ntrajcs in program.'
               print*,'Job stopped'
               STOP
              ENDIF
              READ(nunit(k),'(6e17.6)',err=115,end=115) ((xtrajc(j,i,k),ytrajc(j,i,k),ztrajc(j,i,k)),i=1,ntrajcs)
            ENDDO

            CLOSE(UNIT=nunit(k))
            CALL retunit(nunit(k))

          ELSE
            CALL retunit(nunit(k))
            GOTO 135
          END IF
        END IF

        npoints_in = npoints

        GOTO 125
        115 continue

        npoints_in = max(1,j-1)

        125 continue


        ! Plot the trajectories up to the current time 

        CALL xthick(2)

        IF(labelopt == 1) THEN
          CALL XQCHSZ(chsize)
          CALL XCHSIZ(chsize*labelmag)
        END IF

        npoints_cur = INT((curtim-tstart)/tinc_calc) + 1

        IF(npoints_cur >= npoints) THEN
          npoints_cur = npoints
        END IF

        DO i=1,ntrajcs

         CALL xcolor(traj_col(i))
         print*,'Plotting trajectory ',i

         IF(slicopt == 1) THEN

           pen_status = 0

           DO j=1,npoints_cur
           
             IF( ( abs( xtrajc(j,i,k) + 99999.0 ) .lt. 0.001 .or.  &
                   abs( ytrajc(j,i,k) + 99999.0 ) .lt. 0.001  ) ) then
 
               pen_status = 0

             ELSE

             IF( pen_status == 0 ) then
               CALL XPENUP(xtrajc(j,i,k)/1000.,ytrajc(j,i,k)/1000.)
             ELSE
               CALL XPENDN(xtrajc(j,i,k)/1000.,ytrajc(j,i,k)/1000.)
             ENDIF
             pen_status = 1

             IF(labelopt == 1) THEN
               IF(MOD(j,labelfreq) == 0) THEN
               
                 itrajc1 = MAX(1, MIN(nx-2, INT((xtrajc(j,i,k)-xs(1))/(xs(2)-xs(1)))+1 ))
                 jtrajc1 = MAX(1, MIN(ny-2, INT((ytrajc(j,i,k)-ys(1))/(ys(2)-ys(1)))+1 ))

                 CALL XRNUMB(xtrajc(j,i,k)/1000.,ytrajc(j,i,k)/1000., 0.001*(ztrajc(j,i,k)-zp(itrajc1,jtrajc1,2)),'*')
!                pen_status = 0
                 CALL XPENUP(xtrajc(j,i,k)/1000.,ytrajc(j,i,k)/1000.)

               END IF
             END IF

             Endif

           END DO

         ELSE IF(slicopt == 2) THEN

           pen_status = 0
       
           DO j=1,npoints_cur

             IF( ( abs( xtrajc(j,i,k) + 99999.0 ) .lt. 0.001 .or.  &
                   abs( ztrajc(j,i,k) + 99999.0 ) .lt. 0.001  ) ) then
               pen_status = 0
             ELSE

               IF( pen_status == 0 ) then
                 CALL XPENUP(xtrajc(j,i,k)/1000.,ztrajc(j,i,k)/1000.)
               ELSE
                 CALL XPENDN(xtrajc(j,i,k)/1000.,ztrajc(j,i,k)/1000.)
               ENDIF
               pen_status = 1

               IF(labelopt == 1) THEN
                 IF(MOD(j,labelfreq) == 0) THEN
                   CALL XRNUMB(xtrajc(j,i,k)/1000.,ztrajc(j,i,k)/1000., ytrajc(j,i,k)*0.001,'*')
!                  pen_status = 0
                   CALL XPENUP(xtrajc(j,i,k)/1000.,ztrajc(j,i,k)/1000.)
                 END IF
               END IF

             ENDIF

           END DO
        
         ELSE IF(slicopt == 3) THEN

           pen_status = 0

           DO j=1,npoints_cur

             IF( ( abs( ytrajc(j,i,k) + 99999.0 ) .lt. 0.001 .or.  &
                   abs( ztrajc(j,i,k) + 99999.0 ) .lt. 0.001  ) ) then
               pen_status = 0
             ELSE

               IF( pen_status == 0 ) then
                 CALL XPENUP(ytrajc(j,i,k)/1000.,ztrajc(j,i,k)/1000.)
               ELSE
                 CALL XPENDN(ytrajc(j,i,k)/1000.,ztrajc(j,i,k)/1000.)
               ENDIF
               pen_status = 1

               IF(labelopt == 1) THEN
                 IF(MOD(j,labelfreq) == 0) THEN
                   CALL XRNUMB(ytrajc(j,i,k)/1000.,ztrajc(j,i,k)/1000., xtrajc(j,i,k)*0.001,'*')
!                  pen_status = 0
                   CALL XPENUP(ytrajc(j,i,k)/1000.,ztrajc(j,i,k)/1000.)
                 END IF
               END IF

             ENDIF

           END DO

         END IF

        END DO ! i=1,ntrajcs
      END IF ! curtim > tstart .and. curtim < tend
     END DO ! k=1,ntimes

     CALL XCHSIZ(chsize)
     CALL xthick(1)
     CALL xfull

    END IF !trajopt == 1

    GOTO 145
    135 write(6,'(a)') 'Cannot read trajectory file, continuing'

    145 continue

!
!-----------------------------------------------------------------------
!
!  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