Assignment 6
!------------------------------------------------------------------------
! The fortran subroutine CSRorCSC(R,C,V, n, nz) which converts
! the CSR representation of a sparse matrix to its CSC representation
!-------------------------------------------------------------------------
! Also a program which enters a sparse matrix (in the COO format) and
! creates its CSR Representation, invokes the CSRorCSC Subroutine and
! output the result.
!-------------------------------------------------------------------------
PROGRAM A7Q1
IMPLICIT NONE
! DECLARE VARIABLES
INTEGER, DIMENSION(:,:), ALLOCATABLE :: A
INTEGER, DIMENSION(3) :: B
INTEGER :: i, j, size, m, n, check, k, rowIndex
! R, C, V
INTEGER, DIMENSION(:), ALLOCATABLE :: DUMMY
INTEGER, DIMENSION(:), ALLOCATABLE :: R
INTEGER, DIMENSION(:), ALLOCATABLE :: C
INTEGER, DIMENSION(:), ALLOCATABLE :: V
! GET THE SPARSE MATRIX IN COO FORMAT
DO
PRINT *, "ENTER THE (SIZE OF MATRIX) m and n (OR 0 0 to END): "
READ *, m ,n
IF (m .eq. 0 .or. n .eq. 0) STOP
IF (m .lt. 0 .or. n .lt. 0) THEN
PRINT *, "NEGATIVE NUMBER OF ELEMENTS: "
ELSE
! ALLOCATE THE ARRAY A
ALLOCATE(A(m,n))
PRINT "(1X, 'ENTER THE MATRIX VALUES OF A', I3, '*', I3, ' ELEMENTS:')", m, n
READ *, ((A(i, j), i = 1, m), j = 1, n)
! DISPLAY USER INPUT (LATER WE WILL USE THE FORMATTING.)
PRINT *, "COO FORMAT : "
DO i = 1,m
PRINT "(5X,15I5)", A(i,1:n)
END DO
! CSRorCSC FORMAT
size = 1
DO i = 1, m
DO j = i, n
IF (A(i, j) /= 0) THEN
size = size + 1
END IF
END DO
END DO
PRINT *, size ! 8 for demo sparse matrix
! ALLOCATING R, C, V
ALLOCATE(DUMMY(size), STAT = check)
ALLOCATE(R(m), STAT = check)
ALLOCATE(C(size), STAT = check)
ALLOCATE(V(size), STAT = check)
! GETTING THE R,C,V FOR CSR
k = 1
rowIndex = 0
DO i = 1, m
DO j = 1, n
IF (A(i, j) /= 0) THEN
DUMMY(k) = i
rowIndex = rowIndex + 1
C(k) = j
V(k) = A(i, j)
k = k + 1
END IF
END DO
R(i) = rowIndex
END DO
PRINT *, "CSR FORMAT: "
PRINT *, "R: ", DUMMY
PRINT *, "R: ", R
PRINT *, "C: ", C
PRINT *, "V: ", V
END IF
END DO
END PROGRAM A7Q1