dbcsr_multiply_api Module



Variables

Type Visibility Attributes Name Initial
character(len=*), private, parameter :: moduleN = 'dbcsr_multiply_api'

Interfaces

public interface dbcsr_multiply

  • public subroutine dbcsr_multiply_generic(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)

    Performs a multiplication of two dbcsr_type matrices, as C := alpha * op( A ) * op( B ) + beta * C.

    Matrices m_a and m_b are multiplied into the m_c product matrix. If the dist2d parameter is not specified, then a new distribution_2d is determined for it.

    Non-equal column dimensions of the right and product matrices The right and product matrix are allowed to have different (full) column dimensions. If they differ, there are certain peculiar behaviors, then the last_column is effectively set to the minimal of the two.

    Beta scaling of the right product matrix If the effective last_column is less than the full column dimension of the product matrix, then the scaling of the product matrix with beta is limited to the submatrix specified by last_column.

    Filtering The filter_eps parameter, if present, is used to filter the resulting matrix. The filtering criterion is whether the block-frobenius norm is less than the specified epsilon. One-the-fly filtering is done such that individual multiplications are skipped if the product of the frobenius norms of the left- and right-matrix blocks are less than the specified epsilon divided by the maximum number of possible multiplies in each row. In addition a final filtering is done as well with the same epsilon value.

    Arguments

    Type IntentOptional Attributes Name
    character(len=1), intent(in) :: transa

    specifies the form of op( A ) to be used in the matrix multiplication transa = 'N' or 'n', op( A ) = A. transa = 'T' or 't', op( A ) = transpose(A). transa = 'C' or 'c', op( A ) = transpose(conjg(A)). specifies the form of op( B ) to be used in the matrix multiplication transb = 'N' or 'n', op( B ) = B. transb = 'T' or 't', op( B ) = transpose(B). transb = 'C' or 'c', op( B ) = transpose(conjg(B)).

    character(len=1), intent(in) :: transb

    specifies the form of op( A ) to be used in the matrix multiplication transa = 'N' or 'n', op( A ) = A. transa = 'T' or 't', op( A ) = transpose(A). transa = 'C' or 'c', op( A ) = transpose(conjg(A)). specifies the form of op( B ) to be used in the matrix multiplication transb = 'N' or 'n', op( B ) = B. transb = 'T' or 't', op( B ) = transpose(B). transb = 'C' or 'c', op( B ) = transpose(conjg(B)).

    type(dbcsr_scalar_type), intent(in) :: alpha

    scaling of product

    type(dbcsr_type), intent(in) :: matrix_a

    left BCSR matrix right BCSR matrix

    type(dbcsr_type), intent(in) :: matrix_b

    left BCSR matrix right BCSR matrix

    type(dbcsr_scalar_type), intent(in) :: beta

    scaling of existing data

    type(dbcsr_type), intent(inout) :: matrix_c

    resulting BCSR product matrix.

    integer, intent(in), optional :: first_row

    first full row of limiting submatrix last full row of limiting submatrix first full column of limiting submatrix last full column of limiting submatrix first full column of limiting inner product last full column of limiting inner product

    integer, intent(in), optional :: last_row

    first full row of limiting submatrix last full row of limiting submatrix first full column of limiting submatrix last full column of limiting submatrix first full column of limiting inner product last full column of limiting inner product

    integer, intent(in), optional :: first_column

    first full row of limiting submatrix last full row of limiting submatrix first full column of limiting submatrix last full column of limiting submatrix first full column of limiting inner product last full column of limiting inner product

    integer, intent(in), optional :: last_column

    first full row of limiting submatrix last full row of limiting submatrix first full column of limiting submatrix last full column of limiting submatrix first full column of limiting inner product last full column of limiting inner product

    integer, intent(in), optional :: first_k

    first full row of limiting submatrix last full row of limiting submatrix first full column of limiting submatrix last full column of limiting submatrix first full column of limiting inner product last full column of limiting inner product

    integer, intent(in), optional :: last_k

    first full row of limiting submatrix last full row of limiting submatrix first full column of limiting submatrix last full column of limiting submatrix first full column of limiting inner product last full column of limiting inner product

    logical, intent(in), optional :: retain_sparsity

    enforce the sparsity pattern of the existing product matrix; default is no

    real(kind=real_8), intent(in), optional :: filter_eps

    Filtering of the matrix

    integer(kind=int_8), intent(out), optional :: flop

    effective flop

  • private subroutine dbcsr_multiply_s(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

    Type IntentOptional Attributes Name
    character(len=1), intent(in) :: transa
    character(len=1), intent(in) :: transb
    real(kind=real_4), intent(in) :: alpha
    type(dbcsr_type), intent(in) :: matrix_a
    type(dbcsr_type), intent(in) :: matrix_b
    real(kind=real_4), 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
  • 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

    Type IntentOptional Attributes Name
    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
  • private subroutine dbcsr_multiply_c(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

    Type IntentOptional Attributes Name
    character(len=1), intent(in) :: transa
    character(len=1), intent(in) :: transb
    complex(kind=real_4), intent(in) :: alpha
    type(dbcsr_type), intent(in) :: matrix_a
    type(dbcsr_type), intent(in) :: matrix_b
    complex(kind=real_4), 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
  • private subroutine dbcsr_multiply_z(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

    Type IntentOptional Attributes Name
    character(len=1), intent(in) :: transa
    character(len=1), intent(in) :: transb
    complex(kind=real_8), intent(in) :: alpha
    type(dbcsr_type), intent(in) :: matrix_a
    type(dbcsr_type), intent(in) :: matrix_b
    complex(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

Subroutines

private subroutine dbcsr_multiply_s(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

Type IntentOptional Attributes Name
character(len=1), intent(in) :: transa
character(len=1), intent(in) :: transb
real(kind=real_4), intent(in) :: alpha
type(dbcsr_type), intent(in) :: matrix_a
type(dbcsr_type), intent(in) :: matrix_b
real(kind=real_4), 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

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

Type IntentOptional Attributes Name
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

private subroutine dbcsr_multiply_c(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

Type IntentOptional Attributes Name
character(len=1), intent(in) :: transa
character(len=1), intent(in) :: transb
complex(kind=real_4), intent(in) :: alpha
type(dbcsr_type), intent(in) :: matrix_a
type(dbcsr_type), intent(in) :: matrix_b
complex(kind=real_4), 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

private subroutine dbcsr_multiply_z(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

Type IntentOptional Attributes Name
character(len=1), intent(in) :: transa
character(len=1), intent(in) :: transb
complex(kind=real_8), intent(in) :: alpha
type(dbcsr_type), intent(in) :: matrix_a
type(dbcsr_type), intent(in) :: matrix_b
complex(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