      program main
c
c ... array declarations.
c
      real coef(120,5), rhs(100), u(100), wksp(600), ubar(1),
     a     rparm(30)
      integer jcoef(5), iwksp(300), iparm(30), p(100), ip(100)
      integer patt(2)
      external sor, sor7
c
      ndim = 120
      mdim = 5
      nw = 600
      inw = 300
c
c ... generate coef, jcoef, and rhs.
c
      nx = 10
      ny = 10
      nz = 1
      n = nx*ny
      h = 1.0/float(nx + 1)
      maxnz = 3
      do 10 i = 1,n 
         coef(i,1) = 6.0
         coef(i,2) = -1.0
         coef(i,3) = -2.0
         rhs(i) = 0.0
 10   continue
      k = 0
      do 30 j = 1,ny
         y = float(j)*h
         do 25 i = 1,nx
            x = float(i)*h
            k = k + 1
            if (j .eq. 1) then
               rhs(k) = rhs(k) + 2.0
            endif
            if (j .eq. ny) then
               rhs(k) = rhs(k) + 2.0*(1.0 + x)
               coef(k,3) = 0.0
            endif
            if (i .eq. 1) then
               rhs(k) = rhs(k) + 1.0
            endif
            if (i .eq. nx) then
               rhs(k) = rhs(k) + 1.0 + y
               coef(k,2) = 0.0
            endif
 25      continue
 30   continue
      jcoef(1) = 0
      jcoef(2) = 1
      jcoef(3) = nx 
      call dfault (iparm,rparm)
c
c ... now, reset some default values.
c
      iparm(3) = 3
      iparm(14) = 1 
      iparm(19) = nx
c
c ... generate an initial guess for u and call nspcg.
c
      call vfill (n,u,0.0)
c
      nxp = 1
      nyp = 2
      nzp = 1
      patt(1) = 1
      patt(2) = 2
      call color (nxp,nyp,nzp,nx,ny,nz,patt,p)
      call nspcg (sor7,sor,ndim,mdim,n,maxnz,coef,jcoef,p,ip,
     a            u,ubar,rhs,wksp,iwksp,nw,inw,iparm,rparm,ier)
      stop
      end 
