Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
character(len=*), | private, | parameter | :: | moduleN | = | 'dbcsr_multiply_api' |
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.
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |