
c---------------------------------------------------------------------
c---------------------------------------------------------------------
c---  applu.incl   
c---------------------------------------------------------------------
c---------------------------------------------------------------------

c---------------------------------------------------------------------
c   npbparams.h defines parameters that depend on the class and 
c   number of nodes
c---------------------------------------------------------------------

      include 'npbparams.h'

c---------------------------------------------------------------------
c   parameters which can be overridden in runtime config file
c   (in addition to size of problem - isiz01,02,03 give the maximum size)
c   ipr = 1 to print out verbose information
c   omega = 2.0 is correct for all classes
c   tolrsd is tolerance levels for steady state residuals
c---------------------------------------------------------------------
      integer ipr_default
      parameter (ipr_default = 1)
      double precision omega_default
      parameter (omega_default = 1.2d0)
      double precision tolrsd1_def, tolrsd2_def, tolrsd3_def, 
     >                 tolrsd4_def, tolrsd5_def
      parameter (tolrsd1_def=1.0e-08, 
     >          tolrsd2_def=1.0e-08, tolrsd3_def=1.0e-08, 
     >          tolrsd4_def=1.0e-08, tolrsd5_def=1.0e-08)

      double precision c1, c2, c3, c4, c5
      parameter( c1 = 1.40d+00, c2 = 0.40d+00,
     >           c3 = 1.00d-01, c4 = 1.00d+00,
     >           c5 = 1.40d+00 )

c---------------------------------------------------------------------
c   grid
c---------------------------------------------------------------------
      integer nx, ny, nz
      integer nx0, ny0, nz0
      integer ipt, ist, iend
      integer jpt, jst, jend
      integer ii1, ii2
      integer ji1, ji2
      integer ki1, ki2
      double precision  dxi, deta, dzeta
      double precision  tx1, tx2, tx3
      double precision  ty1, ty2, ty3
      double precision  tz1, tz2, tz3

      common/cgcon/ dxi, deta, dzeta,
     >              tx1, tx2, tx3,
     >              ty1, ty2, ty3,
     >              tz1, tz2, tz3,
     >              nx, ny, nz, 
     >              nx0, ny0, nz0,
     >              ipt, ist, iend,
     >              jpt, jst, jend,
     >              ii1, ii2, 
     >              ji1, ji2, 
     >              ki1, ki2

c---------------------------------------------------------------------
c   dissipation
c---------------------------------------------------------------------
      double precision dx1, dx2, dx3, dx4, dx5
      double precision dy1, dy2, dy3, dy4, dy5
      double precision dz1, dz2, dz3, dz4, dz5
      double precision dssp

      common/disp/ dx1,dx2,dx3,dx4,dx5,
     >             dy1,dy2,dy3,dy4,dy5,
     >             dz1,dz2,dz3,dz4,dz5,
     >             dssp

c---------------------------------------------------------------------
c   field variables and residuals
c---------------------------------------------------------------------
      double precision u(5,-1:isiz1+2,-1:isiz2+2,isiz3),
     >       rsd(5,-1:isiz1+2,-1:isiz2+2,isiz3),
     >       frct(5,-1:isiz1+2,-1:isiz2+2,isiz3),
     >       flux(5,0:isiz1+1,0:isiz2+1,isiz3)

      common/cvar/ u,
     >             rsd,
     >             frct,
     >             flux


c---------------------------------------------------------------------
c   output control parameters
c---------------------------------------------------------------------
      integer ipr, inorm

      common/cprcon/ ipr, inorm

c---------------------------------------------------------------------
c   newton-raphson iteration control parameters
c---------------------------------------------------------------------
      integer itmax, invert
      double precision  dt, omega, tolrsd(5),
     >        rsdnm(5), errnm(5), frc, ttotal

      common/ctscon/ dt, omega, tolrsd,
     >               rsdnm, errnm, frc, ttotal,
     >               itmax, invert

      double precision a(5,5,isiz1,isiz2),
     >       b(5,5,isiz1,isiz2),
     >       c(5,5,isiz1,isiz2),
     >       d(5,5,isiz1,isiz2)

      common/cjac/ a, b, c, d

c---------------------------------------------------------------------
c   coefficients of the exact solution
c---------------------------------------------------------------------
      double precision ce(5,13)

      common/cexact/ ce

c---------------------------------------------------------------------
c   multi-processor common blocks
c---------------------------------------------------------------------
      integer id, ndim, num, xdim, ydim, row, col
      common/dim/ id,ndim,num,xdim,ydim,row,col

      integer north,south,east,west
      common/neigh/ north,south,east, west

      integer from_s,from_n,from_e,from_w
      parameter (from_s=1,from_n=2,from_e=3,from_w=4)

      double precision  buf(5,2*isiz2*isiz3),
     >                  buf1(5,2*isiz2*isiz3)

      common/comm/ buf, buf1

c---------------------------------------------------------------------

      include 'timing.h'


c---------------------------------------------------------------------
c   end of include file
c---------------------------------------------------------------------
