Whether two matrices have the same packed, globally indexed CSR layout.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dbcsr_type), | intent(in) | :: | matrix_a | |||
| type(dbcsr_type), | intent(in) | :: | matrix_b |
LOGICAL FUNCTION same_data_layout(matrix_a, matrix_b) RESULT(same_layout) !! Whether two matrices have the same packed, globally indexed CSR layout. TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b INTEGER :: ndata same_layout = .FALSE. IF (.NOT. dbcsr_valid_index(matrix_a) .OR. .NOT. dbcsr_valid_index(matrix_b)) RETURN IF (matrix_a%nblks == 0) RETURN IF (ASSOCIATED(matrix_a%wms) .OR. ASSOCIATED(matrix_b%wms)) RETURN IF (matrix_a%local_indexing .OR. matrix_b%local_indexing .OR. & matrix_a%list_indexing .OR. matrix_b%list_indexing .OR. matrix_a%bcsc .OR. matrix_b%bcsc) RETURN IF (matrix_a%nblks /= matrix_b%nblks .OR. matrix_a%nze /= matrix_b%nze .OR. & matrix_a%nblkrows_total /= matrix_b%nblkrows_total .OR. & matrix_a%nblkcols_total /= matrix_b%nblkcols_total .OR. & dbcsr_get_matrix_type(matrix_a) /= dbcsr_get_matrix_type(matrix_b) .OR. & matrix_a%replication_type /= matrix_b%replication_type) RETURN ndata = dbcsr_data_get_size_referenced(matrix_a%data_area) IF (ndata /= matrix_a%nze .OR. ndata /= dbcsr_data_get_size_referenced(matrix_b%data_area)) RETURN same_layout = ALL(matrix_a%row_p == matrix_b%row_p) .AND. & ALL(matrix_a%col_i(1:matrix_a%nblks) == matrix_b%col_i(1:matrix_b%nblks)) .AND. & ALL(matrix_a%blk_p(1:matrix_a%nblks) == matrix_b%blk_p(1:matrix_b%nblks)) .AND. & ALL(array_data(matrix_a%row_blk_size) == array_data(matrix_b%row_blk_size)) .AND. & ALL(array_data(matrix_a%col_blk_size) == array_data(matrix_b%col_blk_size)) END FUNCTION same_data_layout