numeric solution of the transpose of a sparse nonsymmetric system of linear equations given lu-factorization (compressed pointer storage)
input variables.. n, r, c, il, jl, ijl, l, d, iu, ju, iju, u, b
output variables.. z
parameters used internally..
fia - tmp - temporary vector which gets result of solving ut y = b
- size = n.
internal variables.. jmin, jmax - indices of the first and last positions in a row of u or l to be used.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | N | |||
integer, | intent(in), | dimension(*) | :: | R | ||
integer, | intent(in), | dimension(*) | :: | C | ||
integer, | intent(in), | dimension(*) | :: | Il | ||
integer, | intent(in), | dimension(*) | :: | Jl | ||
integer, | intent(in), | dimension(*) | :: | Ijl | ||
real(kind=dp), | intent(in), | dimension(*) | :: | L | ||
real(kind=dp), | intent(in), | dimension(*) | :: | D | ||
integer, | intent(in), | dimension(*) | :: | Iu | ||
integer, | intent(in), | dimension(*) | :: | Ju | ||
integer, | intent(in), | dimension(*) | :: | Iju | ||
real(kind=dp), | intent(in), | dimension(*) | :: | U | ||
real(kind=dp), | intent(out), | dimension(*) | :: | Z | ||
real(kind=dp), | intent(in), | dimension(*) | :: | B | ||
real(kind=dp), | intent(inout), | dimension(*) | :: | Tmp |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | i | ||||
integer, | public | :: | j | ||||
integer, | public | :: | jmax | ||||
integer, | public | :: | jmin | ||||
integer, | public | :: | k | ||||
integer, | public | :: | ml | ||||
integer, | public | :: | mu | ||||
real(kind=dp), | public | :: | sum | ||||
real(kind=dp), | public | :: | tmpk |
subroutine nntc(N,R,C,Il,Jl,Ijl,L,D,Iu,Ju,Iju,U,Z,B,Tmp) ! ! real l(*), d(*), u(*), b(*), z(*), tmp(*), tmpk,sum integer , intent(in) :: N integer , intent(in) , dimension(*) :: R integer , intent(in) , dimension(*) :: C integer , intent(in) , dimension(*) :: Il integer , intent(in) , dimension(*) :: Jl integer , intent(in) , dimension(*) :: Ijl real(kind=dp) , intent(in) , dimension(*) :: L real(kind=dp) , intent(in) , dimension(*) :: D integer , intent(in) , dimension(*) :: Iu integer , intent(in) , dimension(*) :: Ju integer , intent(in) , dimension(*) :: Iju real(kind=dp) , intent(in) , dimension(*) :: U real(kind=dp) , intent(out) , dimension(*) :: Z real(kind=dp) , intent(in) , dimension(*) :: B real(kind=dp) , intent(inout) , dimension(*) :: Tmp ! integer :: i , j , jmax , jmin , k , ml , mu real(kind=dp) :: sum , tmpk ! ! ****** set tmp to reordered b ************************************* do k = 1 , N Tmp(k) = B(C(k)) enddo ! ****** solve ut y = b by forward substitution ******************* do k = 1 , N jmin = Iu(k) jmax = Iu(k+1) - 1 tmpk = -Tmp(k) if ( jmin<=jmax ) then mu = Iju(k) - jmin do j = jmin , jmax Tmp(Ju(mu+j)) = Tmp(Ju(mu+j)) + tmpk*U(j) enddo endif enddo ! ****** solve lt x = y by back substitution ********************** k = N do i = 1 , N sum = -Tmp(k) jmin = Il(k) jmax = Il(k+1) - 1 if ( jmin<=jmax ) then ml = Ijl(k) - jmin do j = jmin , jmax sum = sum + L(j)*Tmp(Jl(ml+j)) enddo endif Tmp(k) = -sum*D(k) Z(R(k)) = Tmp(k) k = k - 1 enddo end subroutine nntc