! Last change: DOS 26 Jul 2000 8:31 pm ! *** copyright 2000 *** ! *** filename chex46.f95 *** John F. Monahan ** ! ********************** program chex46 ! demo of sparse matrix multiplication ! see Example 4.6 implicit none integer, parameter :: n = 10 ! dimension integer, parameter :: nnz = 28 ! number of nonzeroes integer, DIMENSION(n) :: lgthrw ! # nonzeroes by row integer, DIMENSION(nnz) :: collist ! column indices integer k,i,jmx,jj,j real, DIMENSION(nnz) :: q ! transition probs real, DIMENSION(n) :: x,y ! vectors ! 21 FORMAT(10f8.4) ! data lgthrw/ 2, 6, 2, 1, 5, 2, 2, 1, 1, 6 / DATA collist/ 1,8, 2,3,5,6,9,10, 4,8, 1, 2,4,5,6,7, 9,10, 2,7, & & 3, 6, 1,3,4,7,9,10 / DATA q/ .2, 3*.1, 2*.5, .1, .4, .6, .9, 2*.6, .3, .5, .2, .7, & & .8, .4, .3, .2, .8, .3, .2, 4*.1, .2 / DATA x/ 10*.1 / ! OPEN( UNIT=6, FILE='chex46.out' ) ! multiply Q*x = y k = 0 ! count nonzero entries do i = 1, n jmx = lgthrw(i) ! how many in this row? y(i) = 0. do jj = 1,jmx k = k + 1 ! next nonzero pointer j = collist(k) ! column index y(i) = y(i) + q(k)*x(j) ! A(i,j)*x(j) end do ! loop on jj end do ! loop on i WRITE(6,21) y end program chex46 ! *** end of filename chex46.f95 *********************