!     Last change:  YY   13 Nov 2009    2:00 am
!---------------------------------------------------------------------------------------------
!                               NEOWAVE 2D include file
!
!                 INPUT SETUP and GLOBAL VARIABLES DECLARATIONS MODULE
!---------------------------------------------------------------------------------------------
!
!   This block setup all input paramters (except for bathymetry data file names and initial
!   condition inputs), and declare all global variables
!
!   Z.Kowalik  2006 IMS,      University of Alaska Fairbanks
!   Y.Yamazaki 2007 ORE,      University of Hawaii Manoa
!---------------------------------------------------------------------------------------------
      INTEGER, PARAMETER::  dp = KIND(1.0d0)

!---------------------------------------------------------------------------------------------
! INPUT
!---------------------------------------------------------------------------------------------


! Limiters and Conditional Coefficients and Paramters
!---------------------------------------------------------------------------------------------

!... q Space Filtering coefficient
     REAL, PARAMETER:: QALPHA  = 0.0  ! no space filter
     !REAL, PARAMETER:: QALPHA  = 0.08 ! BEST for 15 sec

!... u & v Space Filtering coefficient
      REAL, PARAMETER:: UALPHA  = 0.0  ! no space filter

!... Flow deth limiter (minimum D)
      REAL, PARAMETER:: Dmin = 10.0   ! for OCEAN cases

!... Still water level definition
      REAL, PARAMETER:: EPSILON = 0.001  ! =1.e-3 (ORIGINAL SETUP)


! Physical Quantities
!---------------------------------------------------------------------------------------------
      REAL, PARAMETER::   g = 980.0                   ! g(cm^2/s):gravitational acceleration

      REAL, PARAMETER::  R0  = 6370.0E5               ! (cm): Earth radius
!     REAL, PARAMETER:: omega = 7.2919E-5             ! omega(1/s)  : angular velocity of earth
      REAL, PARAMETER::  FC   = 1.4584E-4             ! = 2*omega

!... Manning relative coefficient n ( s/(cm^1/3)) )
     !REAL, PARAMETER::   n = 0.0
      REAL, PARAMETER::   n =0.9* 0.035*0.215443469       ! ( s/(cm^1/3)) ) : n for ocean bottom
     !                               ||                    !0.9 TO DIMINISH BY 10%
     !                    n = 0.035/(100.0**(1.0/3.0))! NOTE : n has unit !!
     !                    n = 0.035/4.64158883361278

     ! REAL, PARAMETER::   n = 0.03*0.215443469       ! n for ocean bottom initial
     ! REAL, PARAMETER::   n = 2.*0.03*0.215443469    ! n for ocean bottom two time stronger


!... Bottom friction coefficient f (-)
      REAL, PARAMETER::   f = 0.0                     ! f(-) : bottom frcition coefficient
                                                      ! in equation is given as r=3.3E-3

!... OKADA bottom dislocation paramters
      REAL(dp), PARAMETER:: nu      = 1.0d0           ! used in OKADA solution (no need to change)
      REAL(dp), PARAMETER:: lamda   = 1.0d0           ! used in OKADA solution (no need to change)


! Numerical Quantities
!---------------------------------------------------------------------------------------------
      REAL, PARAMETER::  pi = 3.14159265358979    ! pi = 3.14
      REAL, PARAMETER:: rad  = 0.0174532930056254 ! = pi/180
      REAL, PARAMETER:: zero = 0.0E0              ! 0
      REAL, PARAMETER:: one  = 1.0E0              ! 1


! Total Run Time
!---------------------------------------------------------------------------------------------

      REAL, PARAMETER:: TFIN  = 50400.0      ! 14 (h) TFIN(s)   : end time
!       REAL, PARAMETER:: TFIN  = 35000.
 !     REAL, PARAMETER:: TFIN  = 4.0           ! TFIN(s)   : end time

      REAL, PARAMETER:: Tgout =  10.0         ! TWLSout(s) : water level station output time interval
      REAL, PARAMETER:: T0DC  =  25200.0      ! 7 (h)T0DC(s)     : start time of double-coupled layers
      REAL, PARAMETER:: Tout_start  = 25200.0 ! TFIN(s)   : end time


! 1st Grid SETUP
!---------------------------------------------------------------------------------------------
       REAL,PARAMETER:: dt1=2.             !dt(s)   : time step
      REAL, PARAMETER:: Tout1  = 360.0         !Tout(s) : output time interval
!      REAL, PARAMETER:: Tout1  =  2.0         !Tout(s) : output time interval

      REAL, PARAMETER:: dlat1  = 2.0 /60.     ! DL
      REAL, PARAMETER:: dlon1  = 2.0 /60.     ! DF
      REAL, PARAMETER:: dx1    = R0*dlon1*rad ! hx = R0*dlon1*rad
      REAL, PARAMETER:: dy1    = R0*dlat1*rad ! hy = R0*dlat1*rad

      REAL, PARAMETER:: latB1  =  18.0        ! (deg): BOTTOM END Latitude of 1st Domain
      REAL, PARAMETER:: lonL1  = 120.       ! (deg): LEFT END Longitude of 1st Domain

      INTEGER,PARAMETER:: js1 = 1
      INTEGER,PARAMETER:: je1 = 3901
      INTEGER,PARAMETER:: ks1 = 1
      INTEGER,PARAMETER:: ke1 = 1321
      INTEGER,PARAMETER:: NJK1 = (je1-js1+1)*(ke1-ks1+1)

! 1st-2nd Grid INTERFACE
!---------------------------------------------------------------------------------------------
!... Location of 2nd Domain in 1st Domain
!    ("outer grid" space steps, dx1 and dy1)
                                      !                         1st domain
      INTEGER,PARAMETER:: js2o = 3460  !           ke1  __________/____________
      INTEGER,PARAMETER:: je2o = 3481 !               |                       |
      INTEGER,PARAMETER:: ks2o = 691  !           ke2o|_ _ _ _ _ ________     |
      INTEGER,PARAMETER:: ke2o = 721  !               |         |        | 2nd domain
                                      !               |  knum2o |        |/   |
!... number of grids of 2nd Domain                ks2o|_ _ _ _ _|________|    |
!    ("outer grid" space steps, dx1 and dy1)          |         | knum2o |    |
      INTEGER,PARAMETER::jnum2o =je2o -js2o+1 !   ks1 |_________|________|____|
      INTEGER,PARAMETER::knum2o =ke2o -ks2o+1 !      js1       js2o     je2o je1
                                              !
                                              !  FIG. 1. 1st domain and 2nd domain

! 2nd Grid SETUP
!---------------------------------------------------------------------------------------------

      REAL, PARAMETER:: dt2    =  0.5          !dt(s)   : time step
      REAL, PARAMETER:: Tout2  = Tout1         !Tout(s) : output time interval
!      REAL, PARAMETER:: Tout2  = 10.0        !Tout(s) : output time interval

      REAL, PARAMETER:: dlat2 = 24.0 /3600.   ! DL
      REAL, PARAMETER:: dlon2 = 24.0 /3600.   ! DF
      REAL, PARAMETER:: dx2   = R0*dlon2*rad  ! hx = R0*dlon1*rad
      REAL, PARAMETER:: dy2   = R0*dlat2*rad  ! hy = R0*dlat1*rad

      REAL, PARAMETER:: latB2 =  41.         ! (deg): BOTTOM END Latitude of 2nd Domain
      REAL, PARAMETER:: lonL2 = 235.3        ! (deg): LEFT END Longitude of 2nd Domain

      INTEGER,PARAMETER:: js2 = 1
      INTEGER,PARAMETER:: je2 = 106
      INTEGER,PARAMETER:: ks2 = 1
      INTEGER,PARAMETER:: ke2 = 151
      INTEGER,PARAMETER:: NJK2 = (je2-js2+1)*(ke2-ks2+1)

 ! number of grid points in the 2nd Domain (space steps dx2 and dy2)
      INTEGER,PARAMETER:: jnum2 = je2 -js2
      INTEGER,PARAMETER:: knum2 = ke2 -ks2

!... TOP and RIGHT ends coordinates
      REAL,   PARAMETER:: lonR2 = lonL2 +jnum2*dlon2 ! (deg) : RIGHT END Longitude of 2nd Domain
      REAL,   PARAMETER:: latT2 = latB2 +knum2*dlat2 ! (deg) : TOP   END Latitude  of 2nd Domain


! 2nd-3rd Grid INTERFACE
!---------------------------------------------------------------------------------------------
 !... Location of 3rd Domain in 2nd Domain
!    ("outer grid" space steps, dx2 and dy2)
                                      !                         2nd domain
      INTEGER,PARAMETER:: js3o = 31  !           ke2  __________/____________
      INTEGER,PARAMETER:: je3o = 106  !               |                       |
      INTEGER,PARAMETER:: ks3o = 76  !           ke3o|_ _ _ _ _ ________     |
      INTEGER,PARAMETER:: ke3o = 151  !               |         |        | 3rd domain
                                      !               |  knum3o |        |/   |
!... number of grids of 3rd Domain                ks3o|_ _ _ _ _|________|    |
!    ("outer grid" space steps, dx2 and dy2)          |         | knum3o |    |
      INTEGER,PARAMETER:: jnum3o =je3o -js3o+1!   ks2 |_________|________|____|
      INTEGER,PARAMETER:: knum3o =ke3o -ks3o+1 !      js2       js3o     je3o je2
                                               !
                                               !  FIG. 2. 2nd domain and 3rd domain

! 3rd Gird SETUP
!---------------------------------------------------------------------------------------------
         REAL, PARAMETER:: dt3    =  0.1         !dt(s)   : time step
!      REAL, PARAMETER:: Tout3  = 10.0         !Tout(s) : output time interval
      REAL, PARAMETER:: Tout3  = Tout1         !Tout(s) : output time interval

      REAL, PARAMETER:: dlat3 = 3.0 /3600.   ! DL
      REAL, PARAMETER:: dlon3 = 3.0 /3600.   ! DF
      REAL, PARAMETER:: dx3   = R0*dlon3*rad ! hx = R0*dlon1*rad
      REAL, PARAMETER:: dy3   = R0*dlat3*rad ! hy = R0*dlat1*rad

      REAL, PARAMETER:: latB3 =  41.5        ! (deg): BOTTOM END Latitude of 3rd Domain
      REAL, PARAMETER:: lonL3 = 235.5       ! (deg): LEFT END Longitude of 3rd Domain

      INTEGER,PARAMETER:: js3 = 1
      INTEGER,PARAMETER:: je3 = 601
      INTEGER,PARAMETER:: ks3 = 1
      INTEGER,PARAMETER:: ke3 = 601
      INTEGER,PARAMETER:: NJK3 = (je3-js3+1)*(ke3-ks3+1)

 ! number of grid points in the 3rd Domain (space steps dx3 and dy3)
      INTEGER,PARAMETER:: jnum3 = je3 -js3
      INTEGER,PARAMETER:: knum3 = ke3 -ks3

!... TOP and RIGHT ends coordinates
      REAL,   PARAMETER:: lonR3 = lonL3 +jnum3*dlon3 ! (deg) : RIGHT END Longitude of 3rd Domain
      REAL,   PARAMETER:: latT3 = latB3 +knum3*dlat3 ! (deg) : TOP   END Latitude  of 3rd Domain


! 3rd-4th Grid INTERFACE
!---------------------------------------------------------------------------------------------
!... Location of 4th Domain in 3rd Domain
!    ("outer grid" space steps, dx3 and dy3)
                                      !                         3rd domain
      INTEGER,PARAMETER:: js4o = 320  !           ke3  __________/____________
      INTEGER,PARAMETER:: je4o = 430  !               |                       |
      INTEGER,PARAMETER:: ks4o = 261  !           ke4o|_ _ _ _ _ ________     |
      INTEGER,PARAMETER:: ke4o = 341  !               |         |        | 4th domain
                                      !               |  knum4o |        |/   |
!... number of grids of 4rd Domain                ks4o|_ _ _ _ _|________|    |
!    ("outer grid" space steps, dx3 and dy3)          |         | knum4o |    |
      INTEGER,PARAMETER::jnum4o =je4o -js4o+1 !   ks3 |_________|________|____|
      INTEGER,PARAMETER::knum4o =ke4o -ks4o+1 !     js3       js4o     je4o je3
                                              !
                                              !  FIG. 3. 3rd domain and 4th domain

! 4th Gird SETUP
!---------------------------------------------------------------------------------------------

      REAL, PARAMETER:: dt4    =  0.1         !dt(s)   : time step
!      REAL, PARAMETER:: Tout4  = 10.0         !Tout(s) : output time interval
      REAL, PARAMETER:: Tout4  = Tout1         !Tout(s) : output time interval

      REAL, PARAMETER:: dlat4 = 1. /3600.   ! DL
      REAL, PARAMETER:: dlon4 = 1. /3600.   ! DF
      REAL, PARAMETER:: dx4   = R0*dlon4*rad ! hx = R0*dlon1*rad
      REAL, PARAMETER:: dy4   = R0*dlat4*rad ! hy = R0*dlat1*rad

      REAL, PARAMETER:: latB4 =  41.72        ! (deg): BOTTOM END Latitude of 4th Domain
      REAL, PARAMETER:: lonL4 = 235.77       ! (deg): LEFT END Longitude of 4th Domain

      INTEGER,PARAMETER:: js4 = 1
      INTEGER,PARAMETER:: je4 = 331
      INTEGER,PARAMETER:: ks4 = 1
      INTEGER,PARAMETER:: ke4 = 241
   
      INTEGER,PARAMETER:: NJK4  = (je4-js4+1)*(ke4-ks4+1)

!... number of grid points in the 4th Domain (with dx4 and dy4)
      INTEGER,PARAMETER:: jnum4 = je4 -js4
      INTEGER,PARAMETER:: knum4 = ke4 -ks4

!... TOP and RIGHT ends coordinates
      REAL,   PARAMETER:: lonR4 = lonL4 +jnum4*dlon4 ! (deg) : RIGHT END Longitude of 4th Domain
      REAL,   PARAMETER:: latT4 = latB4 +knum4*dlat4 ! (deg) : TOP   END Latitude  of 4th Domain

!---------------------------------------------------------------------------------------------


      INTEGER,PARAMETER:: mFIN   = TFIN /dt1 +1 ! FINAL m
      INTEGER,PARAMETER:: m0DC   = T0DC /dt1 +1 ! m at start time of double-coupled layers

      INTEGER,PARAMETER:: mout1  = Tout1 /dt1   ! (-) : output time step
      INTEGER,PARAMETER:: mout2  = Tout1 /dt1   ! (-) : output time step
      INTEGER,PARAMETER:: mout3  = 60. /dt1   ! (-) : output time step
      INTEGER,PARAMETER:: mout4  = 60. /dt1   ! (-) : output time step

      INTEGER,PARAMETER:: mgout  = Tgout/dt1    ! (-) : water level station output time step

      INTEGER,PARAMETER:: mout_start = Tout_start /dt1 +1

      INTEGER,PARAMETER:: m20DC     = T0DC /dt2 +1   ! (-) : m2 at start time of double-coupled grids
      INTEGER,PARAMETER:: m30DC     = T0DC /dt3 +1   ! (-) : m3 at start time of double-coupled grids
      INTEGER,PARAMETER:: m40DC     = T0DC /dt4 +1   ! (-) : m4 at start time of double-coupled grids

! Global Variables for Water Level Stations
!---------------------------------------------------------------------------------------------

!... OUTPUT time interval for averaged water level records
      REAL,   PARAMETER:: dt_Agout = 60.0            ! (s)

      INTEGER,PARAMETER:: dm_Agout1 = dt_Agout /dt1  ! (-) : dm1 for averaged water level output time step
      INTEGER,PARAMETER:: dm_Agout2 = dt_Agout /dt2  ! (-) : dm2 for averaged water level output time step
      INTEGER,PARAMETER:: dm_Agout3 = dt_Agout /dt3  ! (-) : dm3 for averaged water level output time step
      INTEGER,PARAMETER:: dm_Agout4 = dt_Agout /dt4  ! (-) : dm4 for averaged water level output time step

      INTEGER,PARAMETER:: nobsmax_A = 50            ! maximum allowed number of water level stations
      INTEGER,DIMENSION(nobsmax_A):: obsGrid_A      ! ID to know the grid (domain) where the water
                                                    ! level stations are located.
      INTEGER,DIMENSION(nobsmax_A):: jobs_A, kobs_A ! j,k for water level stations
      REAL,   DIMENSION(nobsmax_A):: zobs_A         ! sea level at water level stations
      INTEGER:: obsnum_A                            ! number of water level stations defined in
                                                    ! "water level station coordinates.txt".


!---------------------------------------------------------------------------------------------
      INTEGER::mINI                             ! Restart time step cycle
      logical,PARAMETER:: RESTART=.false.       ! Switch to .true. when restart
!---------------------------------------------------------------------------------------------

!... Paramters to simplify Equations
!---------------------------------------------------------------------------------------------

      REAL, PARAMETER::  dt_dx1 = dt1/dx1
      REAL, PARAMETER::  dt_dy1 = dt1/dy1
      REAL, PARAMETER:: gdt_dx1 = g*dt1/dx1
      REAL, PARAMETER:: gdt_dy1 = g*dt1/dy1

      REAL, PARAMETER:: FCT1    = FC*dt1    ! = (2*omega)*dt
      REAL, PARAMETER::  NS1    = 1.        !
      REAL, PARAMETER::  NL1    = 1.        ! spherical nonlinearity

      REAL, PARAMETER::  dt_dx2 = dt2/dx2
      REAL, PARAMETER::  dt_dy2 = dt2/dy2
      REAL, PARAMETER:: gdt_dx2 = g*dt2/dx2
      REAL, PARAMETER:: gdt_dy2 = g*dt2/dy2

      REAL, PARAMETER:: FCT2    = FC*dt2    ! = (2*omega)*dt
      REAL, PARAMETER::  NS2    = 1.        !
      REAL, PARAMETER::  NL2    = 1.        ! spherical nonlinearity

      REAL, PARAMETER::  dt_dx3 = dt3/dx3
      REAL, PARAMETER::  dt_dy3 = dt3/dy3
      REAL, PARAMETER:: gdt_dx3 = g*dt3/dx3
      REAL, PARAMETER:: gdt_dy3 = g*dt3/dy3

      REAL, PARAMETER:: FCT3    = FC*dt3    ! = (2*omega)*dt
      REAL, PARAMETER::  NS3    = 1.        !
      REAL, PARAMETER::  NL3    = 1.        ! spherical nonlinearity

      REAL, PARAMETER::  dt_dx4 = dt4/dx4
      REAL, PARAMETER::  dt_dy4 = dt4/dy4
      REAL, PARAMETER:: gdt_dx4 = g*dt4/dx4
      REAL, PARAMETER:: gdt_dy4 = g*dt4/dy4

      REAL, PARAMETER:: FCT4    = FC*dt4    ! = (2*omega)*dt
      REAL, PARAMETER::  NS4    = 1.        !
      REAL, PARAMETER::  NL4    = 1.        ! spherical nonlinearity


      !---------------------------------------------------------------------------------------------
      ! in new code, we renamed those as inc12t, inc23t,inc34t.
      ! But just in case keep those (11/12/2009 Yamazaki)
      INTEGER,PARAMETER:: int12 = dt1/dt2       ! NUMBER OF TIME SUBSTEPS IN SECOND DOMAIN
      INTEGER,PARAMETER:: int23 = dt2/dt3       ! NUMBER OF TIME SUBSTEPS IN THIRD DOMAIN
      INTEGER,PARAMETER:: int34 = dt3/dt4       ! NUMBER OF TIME SUBSTEPS IN FOURTH DOMAIN
      !---------------------------------------------------------------------------------------------

      INTEGER,PARAMETER:: inc12x  = dx1/dx2
      INTEGER,PARAMETER:: inc12y  = dy1/dy2
      INTEGER,PARAMETER:: inc12t  = dt1/dt2

      INTEGER,PARAMETER:: inc23x  = dx2/dx3
      INTEGER,PARAMETER:: inc23y  = dy2/dy3
      INTEGER,PARAMETER:: inc23t  = dt2/dt3

      INTEGER,PARAMETER:: inc34x  = dx3/dx4
      INTEGER,PARAMETER:: inc34y  = dy3/dy4
      INTEGER,PARAMETER:: inc34t  = dt3/dt4



      INTEGER, PARAMETER:: nobsmax = 200    ! maximum allowed number of water level stations
      INTEGER,PARAMETER:: obsnum=36         ! for UAF version (comment out when using UH version !)

      INTEGER,PARAMETER:: n1smooth= 20               ! n#smooth is the number of points to
      INTEGER,PARAMETER:: n2smooth= n1smooth*inc12x  !  smooth the sea surface near the
      INTEGER,PARAMETER:: n3smooth= n2smooth*inc23x  !  boundaris of the area where initial
      INTEGER,PARAMETER:: n4smooth= n3smooth*inc34x  !  static surface deforamtion is applied.

!---------------------------------------------------------------------------------------------
! END OF INPUT
!---------------------------------------------------------------------------------------------


!---------------------------------------------------------------------------------------------
! GLOBAL VARIABLES DECLARATIONS
!---------------------------------------------------------------------------------------------

! Water lvel station variables
      INTEGER, DIMENSION(nobsmax) :: jobs, kobs
      REAL,    DIMENSION(nobsmax) :: zobs       ! sea level at water level stations
!      INTEGER:: obsnum                         ! for UH version (comment out when using UAF version !)



! 1st Domain
!---------------------------------------------------------------------------------------------
      INTEGER:: m

      REAL, DIMENSION(js1:je1,ks1:ke1):: z01           ! z0  : initial water level at t=0
      REAL, DIMENSION(js1:je1,ks1:ke1):: z01_1         ! z0_1: z0 obtained from fault No1
      REAL, DIMENSION(js1:je1,ks1:ke1):: z01_2         ! z0_2: z0 obtained from fault No2
      REAL, DIMENSION(js1:je1,ks1:ke1):: z01_3         ! z0_3: z0 obtained from fault No3

      REAL, DIMENSION(js1:je1,ks1:ke1):: zo1, zn1      ! zeta: water level
      REAL, DIMENSION(js1:je1,ks1:ke1):: uo1, un1      ! u   : x horizontal velocity
      REAL, DIMENSION(js1:je1,ks1:ke1):: vo1, vn1      ! v   : y horizontal velocity

      REAL, DIMENSION(js1:je1,ks1:ke1):: wso1, wsn1    ! ws  : bottom vertical velocity
      REAL, DIMENSION(js1:je1,ks1:ke1):: wbo1, wbn1    ! wb  : surface vertical velocity

      REAL, DIMENSION(js1:je1,ks1:ke1):: eto1, etn1    ! eta : bottom dislocation

      REAL, DIMENSION(js1:je1,ks1:ke1):: H1            ! H   : still water depth (at z cal point)
      REAL, DIMENSION(js1:je1,ks1:ke1):: Hu1           ! Hu  : H at u cal point
      REAL, DIMENSION(js1:je1,ks1:ke1):: Hv1           ! Hv  : H at v cal point

      REAL, DIMENSION(js1:je1,ks1:ke1):: Hb1           ! Hb  : ( = H -eta) at z cal point

      REAL, DIMENSION(js1:je1,ks1:ke1):: D1            ! D   : total water depth (at z cal point)
      REAL, DIMENSION(js1:je1,ks1:ke1):: Du1           ! Du  : D at u cal point
      REAL, DIMENSION(js1:je1,ks1:ke1):: Dv1           ! Dv  : D at v cal point

      REAL, DIMENSION(js1:je1,ks1:ke1):: Dlim1         ! Dlim: limited D

      REAL, DIMENSION(js1:je1,ks1:ke1):: zmax1         ! maximum zate at each point
      REAL::  z_max1                                   ! maximum zate
      INTEGER:: jmax1, kmax1                           ! j,k at z_max

      REAL, DIMENSION(ks1:ke1):: siz1,siv1,csz1,csv1   ! sin cos for spherical coord. cal

      REAL(dp), DIMENSION(js1:je1,ks1:ke1) :: q1       ! q   : non-hydrostatic pressure
      REAL(dp), DIMENSION(js1:je1,ks1:ke1) :: An1, Bn1

      INTEGER*2, DIMENSION(js1:je1,ks1:ke1):: CELL1

! 2nd Domain
!---------------------------------------------------------------------------------------------
      !---------------------------------------------------------------------------------------------
      INTEGER:: m2

      REAL, DIMENSION(js2:je2,ks2:ke2):: z02           ! z0  : initial water level at t=0
      !---------------------------------------------------------------------------------------------

      REAL, DIMENSION(js2:je2,ks2:ke2):: zo2, zn2      ! zeta: water level
      REAL, DIMENSION(js2:je2,ks2:ke2):: uo2, un2      ! u   : x horizontal velocity
      REAL, DIMENSION(js2:je2,ks2:ke2):: vo2, vn2      ! v   : y horizontal velocity

      !---------------------------------------------------------------------------------------------
      REAL, DIMENSION(js2:je2,ks2:ke2):: zn21          ! z2 obtained by interpolation of z1
      REAL, DIMENSION(js2:je2,ks2:ke2):: un21          ! u2 obtained by interpolation of u1
      REAL, DIMENSION(js2:je2,ks2:ke2):: vn21          ! v2 obtained by interpolation of v1
      REAL(dp), DIMENSION(js2:je2,ks2:ke2) :: q21      ! q2 obtained by interpolation of q1
      !---------------------------------------------------------------------------------------------

      REAL, DIMENSION(js2:je2,ks2:ke2):: wso2, wsn2    ! ws  : bottom vertical velocity
      REAL, DIMENSION(js2:je2,ks2:ke2):: wbo2, wbn2    ! wb  : surface vertical velocity

      REAL, DIMENSION(js2:je2,ks2:ke2):: eto2, etn2    ! eta : bottom dislocation

      REAL, DIMENSION(js2:je2,ks2:ke2):: H2            ! H   : still water depth (at z cal point)
      REAL, DIMENSION(js2:je2,ks2:ke2):: Hu2           ! Hu  : H at u cal point
      REAL, DIMENSION(js2:je2,ks2:ke2):: Hv2           ! Hv  : H at v cal point

      REAL, DIMENSION(js2:je2,ks2:ke2):: Hb2           ! Hb  : ( = H -eta) at z cal point

      REAL, DIMENSION(js2:je2,ks2:ke2):: D2            ! D   : total water depth (at z cal point)
      REAL, DIMENSION(js2:je2,ks2:ke2):: Du2           ! Du  : H at u cal point
      REAL, DIMENSION(js2:je2,ks2:ke2):: Dv2           ! Dv  : H at v cal point

      REAL, DIMENSION(js2:je2,ks2:ke2):: Dlim2         ! Dlim: limited D

      REAL, DIMENSION(js2:je2,ks2:ke2):: zmax2         ! maximum zate at each point
      REAL::  z_max2                                   ! maximum zate
      INTEGER:: jmax2, kmax2                           ! j,k at z_max

      REAL, DIMENSION(ks2:ke2):: siz2,siv2,csz2,csv2   ! sin cos for spherical coord. cal

      REAL(dp), DIMENSION(js2:je2,ks2:ke2) :: q2       ! q   : non-hydrostatic pressure
      REAL(dp), DIMENSION(js2:je2,ks2:ke2) :: An2, Bn2

      INTEGER*2, DIMENSION(js2:je2,ks2:ke2):: CELL2


! 3rd Domain
!---------------------------------------------------------------------------------------------
      !---------------------------------------------------------------------------------------------
      INTEGER:: m3

      REAL, DIMENSION(js3:je3,ks3:ke3):: z03           ! z0  : initial water level at t=0
      !---------------------------------------------------------------------------------------------

      REAL, DIMENSION(js3:je3,ks3:ke3):: zo3, zn3      ! zeta: water level
      REAL, DIMENSION(js3:je3,ks3:ke3):: uo3, un3      ! u   : x horizontal velocity
      REAL, DIMENSION(js3:je3,ks3:ke3):: vo3, vn3      ! v   : y horizontal velocity

      !---------------------------------------------------------------------------------------------
      REAL, DIMENSION(js3:je3,ks3:ke3):: zn32          ! z3 obtained by interpolation of z2
      REAL, DIMENSION(js3:je3,ks3:ke3):: un32          ! u3 obtained by interpolation of u2
      REAL, DIMENSION(js3:je3,ks3:ke3):: vn32          ! v3 obtained by interpolation of v2
      REAL(dp), DIMENSION(js3:je3,ks3:ke3) :: q32      ! q3 obtained by interpolation of q2
      !---------------------------------------------------------------------------------------------

      REAL, DIMENSION(js3:je3,ks3:ke3):: wso3, wsn3    ! ws  : bottom vertical velocity
      REAL, DIMENSION(js3:je3,ks3:ke3):: wbo3, wbn3    ! wb  : surface vertical velocity

      REAL, DIMENSION(js3:je3,ks3:ke3):: eto3, etn3    ! eta : bottom dislocation

      REAL, DIMENSION(js3:je3,ks3:ke3):: H3            ! H   : still water depth (at z cal point)
      REAL, DIMENSION(js3:je3,ks3:ke3):: Hu3           ! Hu  : H at u cal point
      REAL, DIMENSION(js3:je3,ks3:ke3):: Hv3           ! Hv  : H at v cal point

      REAL, DIMENSION(js3:je3,ks3:ke3):: Hb3           ! Hb  : ( = H -eta) at z cal point

      REAL, DIMENSION(js3:je3,ks3:ke3):: D3            ! D   : total water depth (at z cal point)
      REAL, DIMENSION(js3:je3,ks3:ke3):: Du3           ! Du  : H at u cal point
      REAL, DIMENSION(js3:je3,ks3:ke3):: Dv3           ! Dv  : H at v cal point

      REAL, DIMENSION(js3:je3,ks3:ke3):: Dlim3         ! Dlim: limited D

      REAL, DIMENSION(js3:je3,ks3:ke3):: zmax3         ! maximum zate at each point
      REAL::  z_max3                                   ! maximum zate
      INTEGER:: jmax3, kmax3                           ! j,k at z_max

      REAL, DIMENSION(ks3:ke3):: siz3,siv3,csz3,csv3   ! sin cos for spherical coord. cal

      REAL(dp), DIMENSION(js3:je3,ks3:ke3) :: q3       ! q   : non-hydrostatic pressure
      REAL(dp), DIMENSION(js3:je3,ks3:ke3) :: An3, Bn3


      INTEGER*2, DIMENSION(js3:je3,ks3:ke3):: CELL3

! 4th Domain
!---------------------------------------------------------------------------------------------
      !---------------------------------------------------------------------------------------------
      INTEGER:: m4

      REAL, DIMENSION(js4:je4,ks4:ke4):: z04           ! z0  : initial water level at t=0
      !---------------------------------------------------------------------------------------------

      REAL, DIMENSION(js4:je4,ks4:ke4):: zo4, zn4      ! zeta: water level
      REAL, DIMENSION(js4:je4,ks4:ke4):: uo4, un4      ! u   : x horizontal velocity
      REAL, DIMENSION(js4:je4,ks4:ke4):: vo4, vn4      ! v   : y horizontal velocity

      !---------------------------------------------------------------------------------------------
      REAL, DIMENSION(js4:je4,ks4:ke4):: zn43          ! z4 obtained by interpolation of z3
      REAL, DIMENSION(js4:je4,ks4:ke4):: un43          ! u4 obtained by interpolation of u3
      REAL, DIMENSION(js4:je4,ks4:ke4):: vn43          ! v4 obtained by interpolation of v3
      REAL(dp), DIMENSION(js4:je4,ks4:ke4) :: q43      ! q4 obtained by interpolation of q3
      !---------------------------------------------------------------------------------------------

      REAL, DIMENSION(js4:je4,ks4:ke4):: wso4, wsn4    ! ws  : bottom vertical velocity
      REAL, DIMENSION(js4:je4,ks4:ke4):: wbo4, wbn4    ! wb  : surface vertical velocity

      REAL, DIMENSION(js4:je4,ks4:ke4):: eto4, etn4    ! eta : bottom dislocation

      REAL, DIMENSION(js4:je4,ks4:ke4):: H4            ! H   : still water depth (at z cal point)
      REAL, DIMENSION(js4:je4,ks4:ke4):: Hu4           ! Hu  : H at u cal point
      REAL, DIMENSION(js4:je4,ks4:ke4):: Hv4           ! Hv  : H at v cal point

      REAL, DIMENSION(js4:je4,ks4:ke4):: Hb4           ! Hb  : ( = H -eta) at z cal point

      REAL, DIMENSION(js4:je4,ks4:ke4):: D4            ! D   : total water depth (at z cal point)
      REAL, DIMENSION(js4:je4,ks4:ke4):: Du4           ! Du  : H at u cal point
      REAL, DIMENSION(js4:je4,ks4:ke4):: Dv4           ! Dv  : H at v cal point

      REAL, DIMENSION(js4:je4,ks4:ke4):: Dlim4         ! Dlim: limited D

      REAL, DIMENSION(js4:je4,ks4:ke4):: zmax4         ! maximum zate at each point
      REAL::  z_max4                                   ! maximum zate
      INTEGER:: jmax4, kmax4                           ! j,k at z_max

      REAL, DIMENSION(ks4:ke4):: siz4,siv4,csz4,csv4   ! sin cos for spherical coord. cal

      REAL(dp), DIMENSION(js4:je4,ks4:ke4) :: q4       ! q   : non-hydrostatic pressure
      REAL(dp), DIMENSION(js4:je4,ks4:ke4) :: An4, Bn4

      INTEGER*2, DIMENSION(js4:je4,ks4:ke4):: CELL4
      ! TIDES to be read for the boundary
      !----------------------------------------------------------------------------------------
      REAL, DIMENSION(js4:je4,ks4:ke4):: znt4        ! zeta: water level
      REAL, DIMENSION(js4:je4,ks4:ke4):: unt4      ! u   : x horizontal velocity
      REAL, DIMENSION(js4:je4,ks4:ke4):: vnt4      ! v   : y horizontal velocity

! Linear Algortihm Coefficients for q
!      REAL(dp), DIMENSION(:), ALLOCATABLE :: AL, AR, AB, AT, AP, QP
!      REAL(dp), DIMENSION(:), ALLOCATABLE :: Phi



! Bottom Dislocation
      REAL :: mrise1, mrise2, mrise3, mrise4

      REAL(dp), DIMENSION(js1:je1,ks1:ke1)::disx1, disy1, disz1
      REAL(dp), DIMENSION(js2:je2,ks2:ke2)::disx2, disy2, disz2
      REAL(dp), DIMENSION(js3:je3,ks3:ke3)::disx3, disy3, disz3
      REAL(dp), DIMENSION(js4:je4,ks4:ke4)::disx4, disy4, disz4

      REAL, DIMENSION(js1:je1,ks1:ke1):: xbeta, ybeta           ! slope of bottom for horizontal deformation cal.



!---------------------------------------------------------------------------------------------
! END OF GLOBAL VARIABLES DECLARATIONS
!---------------------------------------------------------------------------------------------

