Print CSR sparsity
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(csr_type), | intent(in) | :: | csr_mat | |||
integer, | intent(in) | :: | unit_nr |
SUBROUTINE csr_print_sparsity(csr_mat, unit_nr)
!! Print CSR sparsity
TYPE(csr_type), INTENT(IN) :: csr_mat
INTEGER, INTENT(IN) :: unit_nr
CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_print_sparsity'
INTEGER :: handle, mynode, numnodes
INTEGER(KIND=int_8) :: dbcsr_nze_total
REAL(KIND=real_8) :: dbcsr_nze_percentage, nze_percentage
CALL timeset(routineN, handle)
IF (.NOT. csr_mat%valid) &
DBCSR_ABORT("CSR matrix must be created first")
nze_percentage = 100.0_dp*(REAL(csr_mat%nze_total, KIND=real_8) &
/REAL(csr_mat%nrows_total, KIND=real_8)) &
/REAL(csr_mat%ncols_total, KIND=real_8)
IF (csr_mat%has_mapping) THEN
dbcsr_nze_total = dbcsr_get_nze(csr_mat%dbcsr_mapping%brd_mat)
CALL mp_sum(dbcsr_nze_total, csr_mat%mp_group)
dbcsr_nze_percentage = 100.0_dp*(REAL(dbcsr_nze_total, KIND=real_8) &
/REAL(csr_mat%nrows_total, KIND=real_8)) &
/REAL(csr_mat%ncols_total, KIND=real_8)
END IF
CALL mp_environ(numnodes, mynode, csr_mat%mp_group)
IF (mynode .EQ. 0) THEN
WRITE (unit_nr, "(T15,A,T68,I13)") "Number of CSR non-zero elements:", csr_mat%nze_total
WRITE (unit_nr, "(T15,A,T75,F6.2)") "Percentage CSR non-zero elements:", nze_percentage
!IF(csr_mat%has_mapping) THEN
! WRITE(unit_nr,"(T15,A,T75,F6.2/)") "Percentage DBCSR non-zero elements:", dbcsr_nze_percentage
!ENDIF
END IF
CALL timestop(handle)
END SUBROUTINE csr_print_sparsity