The routine accepts the LU factorization of the coeficient matrix, stored compactly in , the vector of pivots and a right hand side vector . It returns the solution of the system stored in the vector (i.e. is overwritten with the solution).
A sample substitution routine might be
! Check if the arguments match
IF ( size(A,1).NE.size(b,1) ) THEN
PRINT*,"Error in solve: A and b must match"
RETURN
END IF
n=SIZE(A,1) ! the dimension of the matrix
!
! Permute the vector b, b <- Pb
!
DO j=1,n-1 ! columns 1:n-1
!
IF (Pivot(j).NE.j) THEN ! If pivot is non-diagonal
Tmp = b(j) ! permute elements j and pivot(j)
b(j) = b(Pivot(j))
b(Pivot(j)) = Tmp
END IF
!
END DO
!
! Forward Substitution, y <- L\b
!
DO i=2,n
b(i) = b(i) - DOT_PRODUCT( A(i,1:i-1), b(1:i-1) )
END DO
!
!
! Backward Substitution, x <- U\y
!
b(n) = b(n)/A(n,n)
DO i=n-1,1,-1 ! elements to be processed
b(i) = (b(i) - DOT_PRODUCT(A(i,i+1:n),b(i+1:n)))/A(i,i)
END DO