<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 < 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