<HTML> <BODY BGCOLOR=#ccccdd LINK=#0000aa VLINK=#0000ff ALINK=#ff0000 ><BASE TARGET="bottom_target"><PRE>
<A NAME='DA_LUBKSB'><A href='../../html_code/tools/da_lubksb.inc.html#DA_LUBKSB' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>

subroutine da_lubksb(n, np, indx, a, b),2

   !-----------------------------------------------------------------------
   ! Purpose: Adapted Numerical Recipes routine to solve the set of n linear 
   ! equations A.X=B.
   ! Routine takes in to account possibility that B will begin with many zero elements, 
   ! so it is efficient for matrix inversion.
   !-----------------------------------------------------------------------

   implicit none

   integer, intent(in)    :: n              ! Logical size of array.
   integer, intent(in)    :: np             ! Physical size of array.
   integer, intent(in)    :: indx(1:n)      ! Permutation vector returned by LUDCMP. 
   real,    intent(in)    :: a(1:np,1:np)   ! LU decomposition of matrix A in A.x=B.
   real,    intent(inout) :: b(1:n)         ! On input = B, on output = x.

   integer :: i , ii , j , ll
   real    :: sum

   if (trace_use) call da_trace_entry("da_lubksb")

   ii = 0
   do i = 1 , n
      ll = indx(i)
      sum = b(ll)
      b(ll) = b(i)

      if (ii /= 0) then
         do j = ii , i - 1
            sum = sum - a(i,j) * b(j)
         end do
      else if (sum /= 0.0) then
         ii = i
      end if
      b(i) = sum
   end do

   do i = n , 1 , -1
      sum = b(i)
      if (i &lt; n) then
         do j = i + 1 , n
            sum = sum - a(i,j) * b(j)
         end do
      end if
      b(i) = sum / a(i,i)
   end do

   if (trace_use) call da_trace_exit("da_lubksb")

end subroutine da_lubksb