Developer Reference

  • 2021.1
  • 12/04/2020
  • Public Content
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

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.