1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
subroutine cntnzu (n, ia, ja, nzsut)
integer n, ia, ja, nzsut
dimension ia(1), ja(1)
c-----------------------------------------------------------------------
c this routine counts the number of nonzero elements in the strict
c upper triangle of the matrix m + m(transpose), where the sparsity
c structure of m is given by pointer arrays ia and ja.
c this is needed to compute the storage requirements for the
c sparse matrix reordering operation in odrv.
c-----------------------------------------------------------------------
integer ii, jj, j, jmin, jmax, k, kmin, kmax, num
c
num = 0
do 50 ii = 1,n
jmin = ia(ii)
jmax = ia(ii+1) - 1
if (jmin .gt. jmax) go to 50
do 40 j = jmin,jmax
if (ja(j).lt.ii) go to 10
if (ja(j).eq.ii) go to 40
go to 30
10 jj =ja(j)
kmin = ia(jj)
kmax = ia(jj+1) - 1
if (kmin .gt. kmax) go to 30
do 20 k = kmin,kmax
if (ja(k) .eq. ii) go to 40
20 continue
30 num = num + 1
40 continue
50 continue
nzsut = num
return
c----------------------- end of subroutine cntnzu ----------------------
end
|