Intel® oneAPI Math Kernel Library Developer Reference - Fortran

mkl_?omatcopy2

Performs two-strided scaling and out-of-place transposition/copying of matrices.

Syntax

call mkl_somatcopy2(ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb)

call mkl_domatcopy2(ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb)

call mkl_comatcopy2(ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb)

call mkl_zomatcopy2(ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb)

Include Files

Description

The mkl_?omatcopy2 routine performs two-strided scaling and out-of-place transposition/copying of matrices. A transposition operation can be a normal matrix copy, a transposition, a conjugate transposition, or just a conjugation. The operation is defined as follows:

B := alpha*op(A)

Normally, matrices in the BLAS or LAPACK are specified by a single stride index. For instance, in the column-major order, A(2,1) is stored in memory one element away from A(1,1), but A(1,2) is a leading dimension away. The leading dimension in this case is at least the number of rows of the source matrix. If a matrix has two strides, then both A(2,1) and A(1,2) may be an arbitrary distance from A(1,1).

Parameter descriptions are common for all implemented interfaces with the exception of data types that refer here to the FORTRAN 77 standard types. Data types specific to the different interfaces are described in the section "Interfaces" below.

Note

Different arrays must not overlap.

Input Parameters

ordering

CHARACTER*1. Ordering of the matrix storage.

If ordering = 'R' or 'r', the ordering is row-major.

If ordering = 'C' or 'c', the ordering is column-major.

trans

CHARACTER*1. Parameter that specifies the operation type.

If trans = 'N' or 'n', op(A)=A and the matrix A is assumed unchanged on input.

If trans = 'T' or 't', it is assumed that A should be transposed.

If trans = 'C' or 'c', it is assumed that A should be conjugate transposed.

If trans = 'R' or 'r', it is assumed that A should be only conjugated.

If the data is real, then trans = 'R' is the same as trans = 'N', and trans = 'C' is the same as trans = 'T'.

rows

INTEGER. The number of rows in matrix B (the source matrix).

cols

INTEGER. The number of columns in matrix B (the source matrix).

alpha

REAL for mkl_somatcopy2.

DOUBLE PRECISION for mkl_domatcopy2.

COMPLEX for mkl_comatcopy2.

DOUBLE COMPLEX for mkl_zomatcopy2.

This parameter scales the input matrix by alpha.

a

REAL for mkl_somatcopy2.

DOUBLE PRECISION for mkl_domatcopy2.

COMPLEX for mkl_comatcopy2.

DOUBLE COMPLEX for mkl_zomatcopy2.

Array, size a(*).

lda

INTEGER.

If ordering = 'R' or 'r', lda represents the number of elements in array a between adjacent rows of matrix A; lda must be at least equal to the number of columns of matrix A.

If ordering = 'C' or 'c', lda represents the number of elements in array a between adjacent columns of matrix A; lda must be at least 1 and not more than the number of columns in matrix A.

stridea

INTEGER.

If ordering = 'R' or 'r', stridea represents the number of elements in array a between adjacent columns of matrix A. stridea must be at least 1 and not more than the number of columns in matrix A.

If ordering = 'C' or 'c', stridea represents the number of elements in array a between adjacent rows of matrix A. stridea must be at least equal to the number of columns in matrix A.

b

REAL for mkl_somatcopy2.

DOUBLE PRECISION for mkl_domatcopy2.

COMPLEX for mkl_comatcopy2.

DOUBLE COMPLEX for mkl_zomatcopy2.

Array, size b(*).

ldb

INTEGER.

If ordering = 'R' or 'r', ldb represents the number of elements in array b between adjacent rows of matrix B.

  • If trans = 'T' or 't' or 'C' or 'c', ldb must be at least equal to rows/strideb.

  • If trans = 'N' or 'n' or 'R' or 'r', ldb must be at least equal to cols/strideb.

If ordering = 'C' or 'c', ldb represents the number of elements in array b between adjacent columns of matrix B.

  • If trans = 'T' or 't' or 'C' or 'c', ldb must be at least 1 and not more than rows/strideb.

  • If trans = 'N' or 'n' or 'R' or 'r', ldb must be at least 1 and not more than cols/strideb.

strideb

INTEGER.

If ordering = 'R' or 'r', strideb represents the number of elements in array b between adjacent columns of matrix B.

  • If trans = 'T' or 't' or 'C' or 'c', strideb must be at least 1 and not more than rows (the number of rows in matrix B).

  • If trans = 'N' or 'n' or 'R' or 'r', strideb must be at least 1 and not more than cols (the number of columns in matrix B).

If ordering = 'C' or 'c', strideb represents the number of elements in array b between adjacent rows of matrix B.

  • If trans = 'T' or 't' or 'C' or 'c', strideb must be at least equal to rows (the number of rows in matrix B).

  • If trans = 'N' or 'n' or 'R' or 'r', strideb must be at least equal to cols (the number of columns in matrix B).

Output Parameters

b

REAL for mkl_somatcopy2.

DOUBLE PRECISION for mkl_domatcopy2.

COMPLEX for mkl_comatcopy2.

DOUBLE COMPLEX for mkl_zomatcopy2.

Array, size at least m.

Contains the destination matrix.

Interfaces

FORTRAN 77:

SUBROUTINE mkl_somatcopy2 ( ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb )
   CHARACTER*1 ordering, trans
   INTEGER rows, cols, lda, stridea, ldb, strideb
   REAL  alpha, b(*), a(*)

SUBROUTINE mkl_domatcopy2 ( ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb )
   CHARACTER*1 ordering, trans
   INTEGER rows, cols, lda, stridea, ldb, strideb
   DOUBLE PRECISION alpha, b(*), a(*)

SUBROUTINE mkl_comatcopy2 ( ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb )
   CHARACTER*1 ordering, trans
   INTEGER rows, cols, lda, stridea, ldb, strideb
   COMPLEX alpha, b(*), a(*)

SUBROUTINE mkl_zomatcopy2 ( ordering, trans, rows, cols, alpha, a, lda, stridea, b, ldb, strideb )
   CHARACTER*1 ordering, trans
   INTEGER rows, cols, lda, stridea, ldb, strideb
   DOUBLE COMPLEX alpha, b(*), a(*)