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