triu of a dbcsr matrix
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_type), | intent(inout) | :: | matrix_a |
the matrix |
SUBROUTINE dbcsr_triu(matrix_a)
!! triu of a dbcsr matrix
TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a
!! the matrix
CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_triu'
INTEGER :: blk, blk_nze, col, col_size, handle, i, &
j, row, row_size
LOGICAL :: tr
REAL(dp), DIMENSION(:, :), POINTER :: DATA
TYPE(dbcsr_iterator) :: iter
! ---------------------------------------------------------------------------
CALL timeset(routineN, handle)
CALL dbcsr_iterator_start(iter, matrix_a)
DO WHILE (dbcsr_iterator_blocks_left(iter))
CALL dbcsr_iterator_next_block(iter, row, col, DATA, tr, &
block_number=blk, row_size=row_size, col_size=col_size)
blk_nze = row_size*col_size
IF (row .GT. col) CALL dbcsr_remove_block(matrix_a, row, col, blk_nze, blk)
IF (row .EQ. col) THEN
DO j = 1, col_size
DO i = j + 1, row_size
DATA(i, j) = 0.0_dp
END DO
END DO
END IF
END DO
CALL dbcsr_iterator_stop(iter)
CALL dbcsr_finalize(matrix_a)
CALL timestop(handle)
END SUBROUTINE dbcsr_triu