dbcsr_multiply_d Subroutine

private subroutine dbcsr_multiply_d(transa, transb, alpha, matrix_a, matrix_b, beta, matrix_c, first_row, last_row, first_column, last_column, first_k, last_k, retain_sparsity, filter_eps, flop)

Arguments

TypeIntentOptionalAttributesName
character(len=1), intent(in) :: transa
character(len=1), intent(in) :: transb
real(kind=real_8), intent(in) :: alpha
type(dbcsr_type), intent(in) :: matrix_a
type(dbcsr_type), intent(in) :: matrix_b
real(kind=real_8), intent(in) :: beta
type(dbcsr_type), intent(inout) :: matrix_c
integer, intent(in), optional :: first_row
integer, intent(in), optional :: last_row
integer, intent(in), optional :: first_column
integer, intent(in), optional :: last_column
integer, intent(in), optional :: first_k
integer, intent(in), optional :: last_k
logical, intent(in), optional :: retain_sparsity
real(kind=real_8), intent(in), optional :: filter_eps
integer(kind=int_8), intent(out), optional :: flop

Contents

Source Code


Source Code

   SUBROUTINE dbcsr_multiply_d(transa, transb, &
                               alpha, matrix_a, matrix_b, beta, matrix_c, &
                               first_row, last_row, first_column, last_column, first_k, last_k, &
                               retain_sparsity, filter_eps, &
                               flop)
      CHARACTER(LEN=1), INTENT(IN)                       :: transa, transb
      REAL(KIND=real_8), INTENT(IN)                      :: alpha
      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b
      REAL(KIND=real_8), INTENT(IN)                      :: beta
      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_c
      INTEGER, INTENT(IN), OPTIONAL                      :: first_row, last_row, first_column, &
                                                            last_column, first_k, last_k
      LOGICAL, INTENT(IN), OPTIONAL                      :: retain_sparsity
      REAL(KIND=real_8), INTENT(IN), OPTIONAL            :: filter_eps
      INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL         :: flop

      IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_4 .AND. &
          dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_4 .AND. &
          dbcsr_get_data_type(matrix_c) .EQ. dbcsr_type_real_4) THEN
         CALL dbcsr_multiply_generic(transa, transb, &
                                     dbcsr_scalar(REAL(alpha, real_4)), matrix_a, matrix_b, &
                                     dbcsr_scalar(REAL(beta, real_4)), matrix_c, &
                                     first_row, last_row, first_column, last_column, first_k, last_k, &
                                     retain_sparsity, &
                                     filter_eps=filter_eps, &
                                     flop=flop)
      ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_8 .AND. &
              dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_8 .AND. &
              dbcsr_get_data_type(matrix_c) .EQ. dbcsr_type_real_8) THEN
         CALL dbcsr_multiply_generic(transa, transb, &
                                     dbcsr_scalar(alpha), matrix_a, matrix_b, dbcsr_scalar(beta), matrix_c, &
                                     first_row, last_row, first_column, last_column, first_k, last_k, &
                                     retain_sparsity, &
                                     filter_eps=filter_eps, &
                                     flop=flop)
      ELSE
         DBCSR_ABORT("This combination of data types NYI")
      END IF
   END SUBROUTINE dbcsr_multiply_d