c$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ c$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ c$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ c$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ *=*=*=*= sys3.html =*=*=*=*
subroutine sys3

subroutine sys3


      subroutine sys3(n,a,b,d,e,y)
c.......................................................................
c
c  Inversion d'un systeme lineaire tridiagonal
c
c  |  b1  d1               |   | y1 |   | e1 |
c  |  a2  b2  d2           |   | y2 |   | e2 |
c  |      a3  b3  d3       | * | y3 | = | e3 |
c  |             ....      |   |    |   |    |
c  |              an  bn   |   | yn |   | en |
c
c  in :   * n,a,b,d,e
c  out :  * y
c
c.......................................................................
      implicit double precision (a-h,o-z)
      parameter (nmax=300)
c.......................................................................
      dimension a(nmax),b(nmax),d(nmax),e(nmax),y(nmax)
c.......................................................................
      dimension as(nmax),ds(nmax),x(nmax)
c.......................................................................
      if (n.gt.nmax) print *,'Oh ! (1) --> sys3.f'
      if (dabs(a(1)).gt.0.d0) print *,'Oh ! (2) --> sys3.f'
      if (dabs(d(n)).gt.0.d0) print *,'Oh ! (3) --> sys3.f'
c.......................................................................
      as(n)=a(n)/b(n)
      ds(n)=e(n)/b(n)
      do 10001 i=n-1,1,-1
      x(i)=1.d0/(b(i)-d(i)*as(i+1))
      as(i)=a(i)*x(i)
      ds(i)=(e(i)-d(i)*ds(i+1))*x(i)
10001 continue
      y(1)=ds(1)
      do 10002 i=2,n
      y(i)=ds(i)-as(i)*y(i-1)
10002 continue
c.......................................................................
      return
      end