same_data_layout Function

private function same_data_layout(matrix_a, matrix_b) result(same_layout)

Whether two matrices have the same packed, globally indexed CSR layout.

Arguments

Type IntentOptional Attributes Name
type(dbcsr_type), intent(in) :: matrix_a
type(dbcsr_type), intent(in) :: matrix_b

Return Value logical


Source Code

   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