destroy a CSR matrix
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(csr_type), | intent(inout) | :: | csr_mat |
SUBROUTINE csr_destroy(csr_mat)
!! destroy a CSR matrix
TYPE(csr_type), INTENT(INOUT) :: csr_mat
CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_destroy'
INTEGER :: handle
TYPE(csr_mapping_data) :: map
CALL timeset(routineN, handle)
IF (.NOT. csr_mat%valid) &
DBCSR_ABORT("CSR matrix must be created before destroying it.")
IF (ASSOCIATED(csr_mat%rowptr_local)) DEALLOCATE (csr_mat%rowptr_local)
IF (ASSOCIATED(csr_mat%nzerow_local)) DEALLOCATE (csr_mat%nzerow_local)
IF (ASSOCIATED(csr_mat%colind_local)) DEALLOCATE (csr_mat%colind_local)
IF (csr_mat%has_mapping) THEN
map = csr_mat%dbcsr_mapping
IF (ASSOCIATED(map%csr_to_brd_ind)) &
DEALLOCATE (map%csr_to_brd_ind)
IF (ASSOCIATED(map%brd_to_csr_ind)) &
DEALLOCATE (map%brd_to_csr_ind)
IF (ASSOCIATED(map%dbcsr_row_blk_size)) &
DEALLOCATE (map%dbcsr_row_blk_size)
IF (ASSOCIATED(map%dbcsr_col_blk_size)) &
DEALLOCATE (map%dbcsr_col_blk_size)
IF (ASSOCIATED(map%dbcsr_row_p)) &
DEALLOCATE (map%dbcsr_row_p)
IF (ASSOCIATED(map%dbcsr_col_i)) &
DEALLOCATE (map%dbcsr_col_i)
CALL dbcsr_release(map%brd_mat)
END IF
IF (ASSOCIATED(csr_mat%nzval_local%r_dp)) &
DEALLOCATE (csr_mat%nzval_local%r_dp)
IF (ASSOCIATED(csr_mat%nzval_local%r_sp)) &
DEALLOCATE (csr_mat%nzval_local%r_sp)
IF (ASSOCIATED(csr_mat%nzval_local%c_sp)) &
DEALLOCATE (csr_mat%nzval_local%c_sp)
IF (ASSOCIATED(csr_mat%nzval_local%c_dp)) &
DEALLOCATE (csr_mat%nzval_local%c_dp)
csr_mat%has_mapping = .FALSE.
csr_mat%valid = .FALSE.
csr_mat%dbcsr_mapping%has_dbcsr_block_data = .FALSE.
csr_mat%has_indices = .FALSE.
csr_mat%nzval_local%data_type = -1
CALL timestop(handle)
END SUBROUTINE csr_destroy