This routine counts the number of nonzero elements in the strict upper triangle of the matrix M + M(transpose), where the sparsity structure of M is given by pointer arrays IA and JA.
This is needed to compute the storage requirements for the sparse matrix reordering operation in ODRV.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | N | |||
integer, | intent(in) | :: | Ia(*) | |||
integer, | intent(in) | :: | Ja(*) | |||
integer, | intent(out) | :: | Nzsut |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | ii | ||||
integer, | public | :: | j | ||||
integer, | public | :: | jj | ||||
integer, | public | :: | jmax | ||||
integer, | public | :: | jmin | ||||
integer, | public | :: | k | ||||
integer, | public | :: | kmax | ||||
integer, | public | :: | kmin | ||||
integer, | public | :: | num |
subroutine cntnzu(N,Ia,Ja,Nzsut) ! integer , intent(in) :: N integer , intent(in) :: Ia(*) integer , intent(in) :: Ja(*) integer , intent(out) :: Nzsut ! integer :: ii , j , jj , jmax , jmin , k , kmax , kmin , num ! num = 0 OUTER: do ii = 1 , N jmin = Ia(ii) jmax = Ia(ii+1) - 1 if ( jmin<=jmax ) then MAIN: do j = jmin , jmax if ( Ja(j)<ii ) then jj = Ja(j) kmin = Ia(jj) kmax = Ia(jj+1) - 1 if ( kmin<=kmax ) then do k = kmin , kmax if ( Ja(k)==ii ) cycle MAIN enddo endif elseif ( Ja(j)==ii ) then cycle MAIN endif num = num + 1 enddo MAIN endif enddo OUTER Nzsut = num end subroutine cntnzu