      subroutine spmult(m,a,b,x,y)
c
      integer m
      real  a,b
      real  x(*),y(*)
c
c     y= tridiag(-b,a,-b) * x
c     for example a one-dimensional discrete laplace operator multiply.
c     x and y must have dimension at least m.
c     y can overwrite x if wanted.
c     m must be at least 3.
c
      integer i
      real  x1,x2
c
      x1  = x(1)
      y(1)= x1*a-x(2)*b
      do 10 i= 3,m
         x2    = x(i-1)
         y(i-1)= x2*a-b*(x1+x(i))
         x1    = x2
   10    continue
      y(m)= x(m)*a-x1*b
      return
      end