!***************************************************************
!
! *************** data for each grid *******************
!
!  for ARPS 4.0.18 (Ming Xue, 10/25/1992)
!               (updated 5/1995 by Edwin Adlerman)
!  nsint  - number of integer constants
!  nsreal - number of real constants
!  nslogc - number of logical constants
!  nx1d   - number of 1-d arrays in x
!  ny1d   - number of 1-d arrays in y
!  nz1d   - number of 1-d arrays in z
!  nxy2d  - number of 2-d xy arrays
!  nxz2d  - number of 2-d xz arrays
!  nyz2d  - number of 2-d yz arrays
!  nxyz3d - number of 3-d xyz arrays
!  nexbc3d- number of 3-d EXBC arrays which are only applied to base grid
!
!***************************************************************

  INTEGER :: nsint,nsreal,nslogc,ns1d,                                  &
          nx1d,ny1d,nz1d,nxy2d,nxz2d,nyz2d,nxyz3d,nexbc3d

  PARAMETER( nsint  = 10000,                                            &
             nsreal = 10000,                                            &
             nslogc = 0,                                                &
             ns1d   = 1000,                                             &
             nx1d   = 10,                                               &
             ny1d   = 10,                                               &
             nz1d   = 1,                                                &
             nxy2d  = 86,                                               &
             nxz2d  = 10,                                               &
             nyz2d  = 10,                                               &
             nxyz3d = 68,                                               &
             nexbc3d= 22 )
!
!  so, this is the story concerning the variables for this
!  solver
!
!----------------------------------------------------------------------
!  interger constants (see list in subroutine SETCNTS).
!----------------------------------------------------------------------

!----------------------------------------------------------------------
!  real constants (see list in subroutine SETCNTS).
!----------------------------------------------------------------------

!----------------------------------------------------------------------
!  logical constants (see list in subroutine SETCNTS).
!----------------------------------------------------------------------

!----------------------------------------------------------------------
!  ns1d 1-d fixed length arrays:
!----------------------------------------------------------------------

  INTEGER :: id_ifax1,id_ifax2

  PARAMETER(id_ifax1 = 1)              ! 1-13  ifax1(13)
  PARAMETER(id_ifax2 = id_ifax1 + 13)  ! 14-27 ifax2(13)

!----------------------------------------------------------------------
!  nx1d 1-d arrays in x
!----------------------------------------------------------------------

  INTEGER :: id_x,id_trigs1,id_wsave2

  PARAMETER(id_x = 1)                  ! 1     x(nx)
  PARAMETER(id_trigs1 = id_x + 1)      ! trigs1(3*(nx-1)/2+1), 2-4
                                       ! Use 3 1-D arrays to store 1
                                       ! array with size 3*(nx-1)/2+1
  PARAMETER(id_wsave2 = id_trigs1 + 3) ! wsave2(3*(nx-1)+15), 5-10
                                       ! Use 6 1-D arrays to store 1
                                       ! array with size 3*(nx-1)+15

!----------------------------------------------------------------------
!  ny1d 1-d arrays in y:
!----------------------------------------------------------------------

  INTEGER :: id_y,id_trigs2,id_wsave1

  PARAMETER(id_y = 1)                  ! 1     y(ny)

  PARAMETER(id_trigs2 = id_y + 1)      ! 2-4   trigs2(3*(nx-1)/2+1)
                                       ! Use 3 1-D arrays to store
                                       ! 1 array with size 3*(ny-1)/2+1
  PARAMETER(id_wsave1 = id_trigs2 + 3) ! 5-10  wsave1(3*(nx-1)+15)
                                       ! Use 6 1-D arrays to store
                                       ! 1 array with size 3*(ny-1)+15

!----------------------------------------------------------------------
!  nz1d 1-D arrays in z:
!----------------------------------------------------------------------

  INTEGER :: id_z

  PARAMETER(id_z = 1)                  ! 1     z(nz)

!----------------------------------------------------------------------
!  2-d xy arrays:
!----------------------------------------------------------------------

  INTEGER :: id_hterain,id_sinlat,id_soiltyp,id_stypfrct,               &
          id_vegtyp,id_lai,id_roufns,id_veg,id_tsfc,                    &
          id_tsoil,id_wetsfc,id_wetdp,id_wetcanp,id_snowdpth,           &
          id_qvsfc,id_raing,id_rainc,id_ptsfc,                          &
          id_pbldpth,id_mapfct,id_rad2d,id_radsw,                       &
          id_rnflx,id_prcrate,id_bcrlx,id_vwork1,                       &
          id_vwork2,id_raincv,id_nca,id_usflx,id_vsflx,                 &
          id_ptsflx,id_qvsflx

  PARAMETER(id_hterain  = 1)               ! 1     hterain (nx,ny)
  PARAMETER(id_sinlat   = id_hterain  + 1) ! 2     sinlat  (nx,ny)
  PARAMETER(id_soiltyp  = id_sinlat   + 1) ! 3-6   soiltyp (nx,ny,4)
  PARAMETER(id_stypfrct = id_soiltyp  + 4) ! 7-10  stypfrct(nx,ny,4)
  PARAMETER(id_vegtyp   = id_stypfrct + 4) ! 11    vegtyp  (nx,ny)
  PARAMETER(id_lai      = id_vegtyp   + 1) ! 12    lai     (nx,ny)
  PARAMETER(id_roufns   = id_lai      + 1) ! 13    roufns  (nx,ny)
  PARAMETER(id_veg      = id_roufns   + 1) ! 14    veg     (nx,ny)
  PARAMETER(id_tsfc     = id_veg      + 1) ! 15-19 tsfc    (nx,ny,0:4)
  PARAMETER(id_tsoil    = id_tsfc     + 5) ! 20-24 tsoil   (nx,ny,0:4)
  PARAMETER(id_wetsfc   = id_tsoil    + 5) ! 25-29 wetsfc  (nx,ny,0:4)
  PARAMETER(id_wetdp    = id_wetsfc   + 5) ! 30-34 wetdp   (nx,ny,0:4)
  PARAMETER(id_wetcanp  = id_wetdp    + 5) ! 35-39 wetcanp (nx,ny,0:4)
  PARAMETER(id_qvsfc    = id_wetcanp  + 5) ! 40-44 qvsfc   (nx,ny,0:4)
  PARAMETER(id_raing    = id_qvsfc    + 5) ! 45    raing   (nx,ny)
  PARAMETER(id_rainc    = id_raing    + 1) ! 46    rainc   (nx,ny)
  PARAMETER(id_ptsfc    = id_rainc    + 1) ! 47    ptsfc   (nx,ny)
  PARAMETER(id_pbldpth  = id_ptsfc    + 1) ! 48-50 pbldpth (nx,ny,3)
  PARAMETER(id_mapfct   = id_pbldpth  + 3) ! 51-58 mapfct  (nx,ny,8)
  PARAMETER(id_rad2d    = id_mapfct   + 8) ! 59-68 rad2d   (nx,ny,10)
  PARAMETER(id_radsw    = id_rad2d    +10) ! 69    radsw   (nx,ny)
  PARAMETER(id_rnflx    = id_radsw    + 1) ! 70    rnflx   (nx,ny)
  PARAMETER(id_prcrate  = id_rnflx    + 1) ! 71-74 prcrate (nx,ny,4)
  PARAMETER(id_bcrlx    = id_prcrate  + 4) ! 75    prcrate (nx,ny,4)
  PARAMETER(id_vwork1   = id_bcrlx    + 1) ! 76-77 vwork1  (nx+1,ny+1)
  PARAMETER(id_vwork2   = id_vwork1   + 2) ! 78-79 vwork2  (nx+1,ny+1)
  PARAMETER(id_raincv   = id_vwork2   + 2) ! 80    raincv  (nx,ny)
  PARAMETER(id_nca      = id_raincv   + 1) ! 81    nca     (nx,ny)
  PARAMETER(id_usflx    = id_nca      + 1) ! 82    usflx   (nx,ny)
  PARAMETER(id_vsflx    = id_usflx    + 1) ! 83    vsflx   (nx,ny)
  PARAMETER(id_ptsflx   = id_vsflx    + 1) ! 84    ptsflx  (nx,ny)
  PARAMETER(id_qvsflx   = id_ptsflx   + 1) ! 85    qvsflx  (nx,ny)
  PARAMETER(id_snowdpth = id_qvsflx   + 1) ! 86    snowdpth(nx,ny)

!----------------------------------------------------------------------
!  nxz2d 2-d xz arrays
!----------------------------------------------------------------------

  INTEGER :: id_udtnb,id_udtsb,                                         &
          id_vdtnb,id_vdtsb,                                            &
          id_sdtnb,id_sdtsb,                                            &
          id_pdtnb,id_pdtsb,                                            &
          id_wdtnb,id_wdtsb

  PARAMETER(id_udtnb = 1)               ! 1     udtnb(nx,nz)
  PARAMETER(id_udtsb = id_udtnb + 1)    ! 2     udtsb(nx,nz)
  PARAMETER(id_vdtnb = id_udtsb + 1)    ! 3     vdtnb(nx,nz)
  PARAMETER(id_vdtsb = id_vdtnb + 1)    ! 4     vdtsb(nx,nz)
  PARAMETER(id_sdtnb = id_vdtsb + 1)    ! 5     sdtnb(nx,nz)
  PARAMETER(id_sdtsb = id_sdtnb + 1)    ! 6     sdtsb(nx,nz)
  PARAMETER(id_pdtnb = id_sdtsb + 1)    ! 7     pdtnb(nx,nz)
  PARAMETER(id_pdtsb = id_pdtnb + 1)    ! 8     pdtsb(nx,nz)
  PARAMETER(id_wdtnb = id_pdtsb + 1)    ! 9     wdtnb(nx,nz)
  PARAMETER(id_wdtsb = id_wdtnb + 1)    ! 10    wdtsb(nx,nz)

!----------------------------------------------------------------------
!  nyz2d 2-d yz arrays:
!----------------------------------------------------------------------

  INTEGER :: id_udteb,id_udtwb,                                         &
          id_vdteb,id_vdtwb,                                            &
          id_sdteb,id_sdtwb,                                            &
          id_pdteb,id_pdtwb,                                            &
          id_wdteb,id_wdtwb

  PARAMETER(id_udteb = 1)               ! 1     udteb(nx,nz)
  PARAMETER(id_udtwb = id_udteb + 1)    ! 2     udtwb(nx,nz)
  PARAMETER(id_vdteb = id_udtwb + 1)    ! 3     vdteb(nx,nz)
  PARAMETER(id_vdtwb = id_vdteb + 1)    ! 4     vdtwb(nx,nz)
  PARAMETER(id_sdteb = id_vdtwb + 1)    ! 5     sdteb(nx,nz)
  PARAMETER(id_sdtwb = id_sdteb + 1)    ! 6     sdtwb(nx,nz)
  PARAMETER(id_pdteb = id_sdtwb + 1)    ! 7     pdteb(nx,nz)
  PARAMETER(id_pdtwb = id_pdteb + 1)    ! 8     pdtwb(nx,nz)
  PARAMETER(id_wdteb = id_pdtwb + 1)    ! 9     wdteb(nx,nz)
  PARAMETER(id_wdtwb = id_wdteb + 1)    ! 10    wdtwb(nx,nz)

!----------------------------------------------------------------------
!  nxyz3d 3-d xyz arrays
!----------------------------------------------------------------------

  INTEGER :: id_u,id_v,id_w

  PARAMETER(id_u = 1)                ! 1-3   u    (nx,ny,nz,3)
  PARAMETER(id_v = id_u + 3)         ! 4-6   v    (nx,ny,nz,3)
  PARAMETER(id_w = id_v + 3)         ! 7-9   w    (nx,ny,nz,3)

!***********************************************************************
!  The following variables, ptprt,pprt, qv,qc,qr,qi,qs,qh, tke, have
!  to stick together because they will be configured by do-loops.
!***********************************************************************

  INTEGER :: id_ptprt,id_pprt,id_qv,id_qc,id_qr,                        &
          id_qi,id_qs,id_qh,id_tke

  PARAMETER(id_ptprt    = id_w        + 3)  ! 10-12 ptprt(nx,ny,nz,3)
  PARAMETER(id_pprt     = id_ptprt    + 3)  ! 13-15 pprt (nx,ny,nz,3)
  PARAMETER(id_qv       = id_pprt     + 3)  ! 16-18 qv   (nx,ny,nz,3)
  PARAMETER(id_qc       = id_qv       + 3)  ! 19-21 qc   (nx,ny,nz,3)
  PARAMETER(id_qr       = id_qc       + 3)  ! 22-24 qr   (nx,ny,nz,3)
  PARAMETER(id_qi       = id_qr       + 3)  ! 25-27 qi   (nx,ny,nz,3)
  PARAMETER(id_qs       = id_qi       + 3)  ! 28-30 qs   (nx,ny,nz,3)
  PARAMETER(id_qh       = id_qs       + 3)  ! 31-33 qh   (nx,ny,nz,3)
  PARAMETER(id_tke      = id_qh       + 3)  ! 34-36 tke  (nx,ny,nz,3)

  INTEGER :: id_ubar,id_vbar,id_wbar,id_ptbar,id_pbar,                  &
          id_rhostr,id_qvbar,id_zp,id_j1,id_j2,id_j3,                   &
          id_wcont,id_kmh,id_kmv,id_rprntl,id_ppi,                      &
          id_csndsq,id_ptcumsrc,id_qcumsrc,id_radfrc,                   &
          id_j3inv,id_w0avg,id_aj3x,id_aj3y,id_aj3z,                    &
          id_ptbari,id_pbari,id_rhostri

  PARAMETER(id_ubar     = id_tke      + 3)  ! 37    ubar    (nx,ny,nz)
  PARAMETER(id_vbar     = id_ubar     + 1)  ! 38    vbar    (nx,ny,nz)
  PARAMETER(id_wbar     = id_vbar     + 1)  ! 39    wbar    (nx,ny,nz)
  PARAMETER(id_ptbar    = id_wbar     + 1)  ! 40    ptbar   (nx,ny,nz)
  PARAMETER(id_pbar     = id_ptbar    + 1)  ! 41    pbar    (nx,ny,nz)
  PARAMETER(id_rhostr   = id_pbar     + 1)  ! 42    rhostr  (nx,ny,nz)
  PARAMETER(id_qvbar    = id_rhostr   + 1)  ! 43    qvbar   (nx,ny,nz)
  PARAMETER(id_zp       = id_qvbar    + 1)  ! 44    zp      (nx,ny,nz)
  PARAMETER(id_j1       = id_zp       + 1)  ! 45    j1      (nx,ny,nz)
  PARAMETER(id_j2       = id_j1       + 1)  ! 46    j2      (nx,ny,nz)
  PARAMETER(id_j3       = id_j2       + 1)  ! 47    j3      (nx,ny,nz)
  PARAMETER(id_wcont    = id_j3       + 1)  ! 48    wcont   (nx,ny,nz)
  PARAMETER(id_kmh      = id_wcont    + 1)  ! 49    kmh     (nx,ny,nz)
  PARAMETER(id_kmv      = id_kmh      + 1)  ! 50    kmv     (nx,ny,nz)
  PARAMETER(id_rprntl   = id_kmv      + 1)  ! 51    rprntl  (nx,ny,nz)
  PARAMETER(id_ppi      = id_rprntl   + 1)  ! 52    ppi     (nx,ny,nz)
  PARAMETER(id_csndsq   = id_ppi      + 1)  ! 53    csndsq  (nx,ny,nz)
  PARAMETER(id_ptcumsrc = id_csndsq   + 1)  ! 54    ptcumsrc(nx,ny,nz)
  PARAMETER(id_qcumsrc  = id_ptcumsrc + 1)  ! 55    qcumsrc (nx,ny,nz,5)
  PARAMETER(id_radfrc   = id_qcumsrc  + 5)  ! 60    radfrc  (nx,ny,nz)
  PARAMETER(id_j3inv    = id_radfrc   + 1)  ! 61    j3inv   (nx,ny,nz)
  PARAMETER(id_w0avg    = id_j3inv    + 1)  ! 62    w0avg   (nx,ny,nz)
  PARAMETER(id_aj3x     = id_w0avg    + 1)  ! 63    aj3x    (nx,ny,nz)
  PARAMETER(id_aj3y     = id_aj3x     + 1)  ! 64    aj3y    (nx,ny,nz)
  PARAMETER(id_aj3z     = id_aj3y     + 1)  ! 65    aj3z    (nx,ny,nz)
  PARAMETER(id_ptbari   = id_aj3z     + 1)  ! 66    ptbari  (nx,ny,nz)
  PARAMETER(id_pbari    = id_ptbari   + 1)  ! 67    pbari   (nx,ny,nz)
  PARAMETER(id_rhostri  = id_pbari    + 1)  ! 68    rhostri (nx,ny,nz)

!----------------------------------------------------------------------
!  nexbc3d 3-d xyz arrays for EXBC
!----------------------------------------------------------------------

  INTEGER :: id_u0exb,id_v0exb,id_w0exb,id_pt0exb,id_pr0exb,            &
          id_qv0exb,id_qc0exb,id_qr0exb,                                &
          id_qi0exb,id_qs0exb,id_qh0exb

  PARAMETER(id_u0exb  = 1)               ! 1     u0exb (nx,ny,nz)
  PARAMETER(id_v0exb  = id_u0exb  + 1)   ! 2     v0exb (nx,ny,nz)
  PARAMETER(id_w0exb  = id_v0exb  + 1)   ! 3     w0exb (nx,ny,nz)
  PARAMETER(id_pt0exb = id_w0exb  + 1)   ! 4     pt0exb(nx,ny,nz)
  PARAMETER(id_pr0exb = id_pt0exb + 1)   ! 5     pr0exb(nx,ny,nz)
  PARAMETER(id_qv0exb = id_pr0exb + 1)   ! 6     qv0exb(nx,ny,nz)
  PARAMETER(id_qc0exb = id_qv0exb + 1)   ! 7     qc0exb(nx,ny,nz)
  PARAMETER(id_qr0exb = id_qc0exb + 1)   ! 8     qr0exb(nx,ny,nz)
  PARAMETER(id_qi0exb = id_qr0exb + 1)   ! 9     qi0exb(nx,ny,nz)
  PARAMETER(id_qs0exb = id_qi0exb + 1)   ! 10    qs0exb(nx,ny,nz)
  PARAMETER(id_qh0exb = id_qs0exb + 1)   ! 11    qh0exb(nx,ny,nz)

  INTEGER :: id_udtexb,id_vdtexb,id_wdtexb,id_ptdtexb,id_prdtexb,       &
          id_qvdtexb,id_qcdtexb,id_qrdtexb,                             &
          id_qidtexb,id_qsdtexb,id_qhdtexb

  PARAMETER(id_udtexb  = id_qh0exb  + 1) ! 12    udtexb (nx,ny,nz)
  PARAMETER(id_vdtexb  = id_udtexb  + 1) ! 13    vdtexb (nx,ny,nz)
  PARAMETER(id_wdtexb  = id_vdtexb  + 1) ! 14    wdtexb (nx,ny,nz)
  PARAMETER(id_ptdtexb = id_wdtexb  + 1) ! 15    ptdtexb(nx,ny,nz)
  PARAMETER(id_prdtexb = id_ptdtexb + 1) ! 16    prdtexb(nx,ny,nz)
  PARAMETER(id_qvdtexb = id_prdtexb + 1) ! 17    qvdtexb(nx,ny,nz)
  PARAMETER(id_qcdtexb = id_qvdtexb + 1) ! 18    qcdtexb(nx,ny,nz)
  PARAMETER(id_qrdtexb = id_qcdtexb + 1) ! 19    qrdtexb(nx,ny,nz)
  PARAMETER(id_qidtexb = id_qrdtexb + 1) ! 20    qidtexb(nx,ny,nz)
  PARAMETER(id_qsdtexb = id_qidtexb + 1) ! 21    qsdtexb(nx,ny,nz)
  PARAMETER(id_qhdtexb = id_qsdtexb + 1) ! 22    qhdtexb(nx,ny,nz)