nntc Subroutine

subroutine nntc(N, R, C, Il, Jl, Ijl, L, D, Iu, Ju, Iju, U, Z, B, Tmp)

subroutine nntc

DESCRIPTION

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.

Arguments

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

Variables

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

Source Code

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