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