Developer Reference

Contents

?hetrf_rook

Computes the bounded Bunch-Kaufman factorization of a complex Hermitian matrix.

Syntax

lapack_int
LAPACKE_chetrf_rook
(
int
matrix_layout
,
char
uplo
,
lapack_int
n
,
lapack_complex_float
*
a
,
lapack_int
lda
,
lapack_int
*
ipiv
);
lapack_int
LAPACKE_zhetrf_rook
(
int
matrix_layout
,
char
uplo
,
lapack_int
n
,
lapack_complex_double
*
a
,
lapack_int
lda
,
lapack_int
*
ipiv
);
Include Files
  • mkl.h
Description
The routine computes the factorization of a complex Hermitian matrix
A
using the bounded Bunch-Kaufman diagonal pivoting method:
  • if
    uplo
    =
    'U'
    ,
    A
    =
    U*D*U
    H
  • if
    uplo
    =
    'L'
    ,
    A
    =
    L*D*L
    H
    ,
where
A
is the input matrix,
U
(or
L
) is a product of permutation and unit upper ( or lower) triangular matrices, and
D
is a Hermitian block-diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks.
This is the blocked version of the algorithm, calling Level 3 BLAS.
Input Parameters
matrix_layout
Specifies whether matrix storage layout for array
b
is row major (
LAPACK_ROW_MAJOR
) or column major (
LAPACK_COL_MAJOR
).
uplo
Must be
'U'
or
'L'
.
Indicates whether the upper or lower triangular part of
A
is stored:
If
uplo
=
'U'
, the array
a
stores the upper triangular part of the matrix
A
.
If
uplo
=
'L'
, the array
a
stores the lower triangular part of the matrix
A
.
n
The order of matrix
A
;
n
0.
a
Array
a
, size
(
lda
*
n
)
The array
a
contains the upper or the lower triangular part of the matrix
A
(see
uplo
).
If
uplo
= 'U', the leading
n
-by-
n
upper triangular part of
a
contains the upper triangular part of the matrix
A
, and the strictly lower triangular part of
a
is not referenced. If
uplo
= 'L', the leading
n
-by-
n
lower triangular part of
a
contains the lower triangular part of the matrix
A
, and the strictly upper triangular part of
a
is not referenced.
lda
The leading dimension of
a
; at least
max(1,
n
)
.
Output Parameters
a
The block diagonal matrix
D
and the multipliers used to obtain the factor
U
or
L
(see Application Notes for further details).
ipiv
  • If
    uplo
    =
    'U'
    :
    If
    ipiv
    (
    k
    ) > 0
    , then rows and columns
    k
    and
    ipiv
    (
    k
    )
    were interchanged and
    D
    k
    ,
    k
    is a 1-by-1 diagonal block.
    If
    ipiv
    (
    k
    ) < 0 and
    ipiv
    (
    k
    - 1) < 0, then rows and columns
    k
    and -
    ipiv
    (
    k
    ) were interchanged and rows and columns
    k
    - 1 and -
    ipiv
    (
    k
    - 1) were interchanged,
    D
    k
    - 1:
    k
    ,
    k
    - 1:
    k
    is a 2-by-2 diagonal block.
  • If
    uplo
    =
    'L'
    :
    If
    ipiv
    (
    k
    ) > 0, then rows and columns
    k
    and
    ipiv
    (
    k
    ) were interchanged and
    D
    k
    ,
    k
    is a 1-by-1 diagonal block.
    If
    ipiv
    (
    k
    ) < 0 and
    ipiv
    (
    k
    + 1) < 0, then rows and columns
    k
    and -
    ipiv
    (
    k
    ) were interchanged and rows and columns
    k
    + 1 and -
    ipiv
    (
    k
    + 1) were interchanged,
    D
    k
    :
    k
    + 1,
    k
    :
    k
    + 1
    is a 2-by-2 diagonal block.
Return Values
This function returns a value
info
.
If
info
= 0
, the execution is successful.
If
info
=
-i
, the
i
-th parameter had an illegal value.
If
info
=
i
,
D
i
i
is exactly 0. The factorization has been completed, but the block diagonal matrix
D
is exactly singular, and division by 0 will occur if you use
D
for solving a system of linear equations.
Application Notes
If
uplo
= 'U', then
A
=
U*D*U
H
, where
U
=
P
(
n
)*
U
(
n
)* ... *
P
(
k
)
U
(
k
)* ...,
i.e.,
U
is a product of terms
P
(
k
)*
U
(
k
), where
k
decreases from
n
to 1 in steps of 1 or 2, and
D
is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks
D
(
k
).
P
(
k
) is a permutation matrix as defined by
ipiv
(
k
), and
U
(
k
) is a unit upper triangular matrix, such that if the diagonal block
D
(
k
) is of order
s
(
s
= 1 or 2), then
If
s
= 1,
D
(
k
) overwrites
A
(
k
,
k
), and
v
overwrites
A
(1:
k
-1,
k
).
If
s
= 2, the upper triangle of
D
(
k
) overwrites
A
(
k
-1,
k
-1),
A
(
k
-1,
k
), and
A
(
k
,
k
), and
v
overwrites
A
(1:
k
-2,
k
-1:
k
).
If
uplo
= 'L', then
A
=
L*D*L
H
, where
L
=
P
(1)*
L
(1)* ... *
P
(
k
)*
L
(
k
)* ...,
i.e.,
L
is a product of terms
P
(
k
)*
L
(
k
), where
k
increases from 1 to
n
in steps of 1 or 2, and
D
is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks
D
(
k
).
P
(
k
) is a permutation matrix as defined by
ipiv
(
k
), and
L
(
k
) is a unit lower triangular matrix, such that if the diagonal block
D
(
k
) is of order
s
(
s
= 1 or 2), then
If
s
= 1,
D
(
k
) overwrites
A
(
k
,
k
), and
v
overwrites
A
(
k
+1:
n
,
k
).
If
s
= 2, the lower triangle of
D
(
k
) overwrites
A
(
k
,
k
),
A
(
k
+1,
k
), and
A
(
k
+1,
k
+1), and
v
overwrites
A
(
k
+2:
n
,
k
:
k
+1).

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804