Go to main content
Oracle Developer Studio 12.5 Man Pages

Exit Print View

Updated: June 2017
 
 

zlahef_rook (3p)

Name

zlahef_rook - compute a partial factorization of a complex Hermitian indefinite matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method (blocked algorithm, calling Level 3 BLAS)

Synopsis

SUBROUTINE ZLAHEF_ROOK(UPLO, N, NB, KB, A, LDA, IPIV, W, LDW, INFO)


CHARACTER*1 UPLO

INTEGER INFO, KB, LDA, LDW, N, NB

INTEGER IPIV(*)

DOUBLE COMPLEX A(LDA,*), W(LDW,*)


SUBROUTINE ZLAHEF_ROOK_64(UPLO, N, NB, KB, A, LDA, IPIV, W, LDW, INFO)


CHARACTER*1 UPLO

INTEGER*8 INFO, KB, LDA, LDW, N, NB

INTEGER*8 IPIV(*)

DOUBLE COMPLEX A(LDA,*), W(LDW,*)


F95 INTERFACE
SUBROUTINE LAHEF_ROOK(UPLO, N, NB, KB, A, LDA, IPIV, W, LDW, INFO)


INTEGER :: N, NB, KB, LDA, LDW, INFO

CHARACTER(LEN=1) :: UPLO

INTEGER, DIMENSION(:) :: IPIV

COMPLEX(8), DIMENSION(:,:) :: A, W


SUBROUTINE LAHEF_ROOK_64(UPLO, N, NB, KB, A, LDA, IPIV, W, LDW, INFO)


INTEGER(8) :: N, NB, KB, LDA, LDW, INFO

CHARACTER(LEN=1) :: UPLO

INTEGER(8), DIMENSION(:) :: IPIV

COMPLEX(8), DIMENSION(:,:) :: A, W


C INTERFACE
#include <sunperf.h>

void  zlahef_rook (char uplo, int n, int nb, int *kb, doublecomplex *a,
int lda, int *ipiv, int ldw, int *info);


void zlahef_rook_64 (char uplo, long n, long nb, long  *kb,  doublecom-
plex *a, long lda, long *ipiv, long ldw, long *info);

Description

Oracle Solaris Studio Performance Library                      zlahef_rook(3P)



NAME
       zlahef_rook  -  compute  a partial factorization of a complex Hermitian
       indefinite matrix using the  bounded  Bunch-Kaufman  ("rook")  diagonal
       pivoting method (blocked algorithm, calling Level 3 BLAS)


SYNOPSIS
       SUBROUTINE ZLAHEF_ROOK(UPLO, N, NB, KB, A, LDA, IPIV, W, LDW, INFO)


       CHARACTER*1 UPLO

       INTEGER INFO, KB, LDA, LDW, N, NB

       INTEGER IPIV(*)

       DOUBLE COMPLEX A(LDA,*), W(LDW,*)


       SUBROUTINE ZLAHEF_ROOK_64(UPLO, N, NB, KB, A, LDA, IPIV, W, LDW, INFO)


       CHARACTER*1 UPLO

       INTEGER*8 INFO, KB, LDA, LDW, N, NB

       INTEGER*8 IPIV(*)

       DOUBLE COMPLEX A(LDA,*), W(LDW,*)


   F95 INTERFACE
       SUBROUTINE LAHEF_ROOK(UPLO, N, NB, KB, A, LDA, IPIV, W, LDW, INFO)


       INTEGER :: N, NB, KB, LDA, LDW, INFO

       CHARACTER(LEN=1) :: UPLO

       INTEGER, DIMENSION(:) :: IPIV

       COMPLEX(8), DIMENSION(:,:) :: A, W


       SUBROUTINE LAHEF_ROOK_64(UPLO, N, NB, KB, A, LDA, IPIV, W, LDW, INFO)


       INTEGER(8) :: N, NB, KB, LDA, LDW, INFO

       CHARACTER(LEN=1) :: UPLO

       INTEGER(8), DIMENSION(:) :: IPIV

       COMPLEX(8), DIMENSION(:,:) :: A, W


   C INTERFACE
       #include <sunperf.h>

       void  zlahef_rook (char uplo, int n, int nb, int *kb, doublecomplex *a,
                 int lda, int *ipiv, int ldw, int *info);


       void zlahef_rook_64 (char uplo, long n, long nb, long  *kb,  doublecom-
                 plex *a, long lda, long *ipiv, long ldw, long *info);


PURPOSE
       zlahef_rook  computes  a  partial  factorization of a complex Hermitian
       matrix A using the bounded  Bunch-Kaufman  ("rook")  diagonal  pivoting
       method. The partial factorization has the form:

       A  =  ( I  U12 ) ( A11  0  ) (  I      0     )  if UPLO = 'U', or:
             ( 0  U22 ) (  0   D  ) ( U12**H U22**H )

       A  =  ( L11  0 ) (  D   0  ) ( L11**H L21**H )  if UPLO = 'L'
             ( L21  I ) (  0  A22 ) (  0      I     )

       where the order of D is at most NB. The actual order is returned in the
       argument KB, and is either NB or NB-1, or N if N <= NB.  Note that U**H
       denotes the conjugate transpose of U.

       ZLAHEF_ROOK  is  an  auxiliary  routine  called by ZHETRF_ROOK. It uses
       blocked code (calling Level 3 BLAS) to update  the  submatrix  A11  (if
       UPLO = 'U') or A22 (if UPLO = 'L').


ARGUMENTS
       UPLO (input)
                 UPLO is CHARACTER*1
                 Specifies  whether  the upper or lower triangular part of the
                 Hermitian matrix A is stored:
                 = 'U':  Upper triangular;
                 = 'L':  Lower triangular.


       N (input)
                 N is INTEGER
                 The order of the matrix A. N >= 0.


       NB (input)
                 NB is INTEGER
                 The maximum number of columns of the matrix A that should  be
                 factored.  NB  should be at least 2 to allow for 2-by-2 pivot
                 blocks.


       KB (output)
                 KB is INTEGER
                 The number of columns of A that were actually factored.
                 KB is either NB-1 or NB, or N if N <= NB.


       A (input/output)
                 A is COMPLEX*16 array, dimension (LDA,N)
                 On entry, the Hermitian matrix A.
                 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.
                 On exit, A contains details of the partial factorization.


       LDA (input)
                 LDA is INTEGER
                 The leading dimension of the array A. LDA >= max(1,N).


       IPIV (output)
                 IPIV is INTEGER array, dimension (N)
                 Details of the interchanges and the block structure of D.
                 If UPLO = 'U':
                 Only the last KB elements of IPIV are set.
                 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 inerchaged, D(k-1:k,k-1:k) is a 2-by-2 diago-
                 nal block.
                 If UPLO = 'L':
                 Only the first KB elements of IPIV are set.
                 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 inerchaged, D(k:k+1,k:k+1) is a 2-by-2 diago-
                 nal block.


       W (output)
                 W is COMPLEX*16 array, dimension (LDW,NB)


       LDW (input)
                 LDW is INTEGER
                 The leading dimension of the array W. LDW >= max(1,N).


       INFO (output)
                 INFO is INTEGER
                 = 0: successful exit;
                 > 0: if INFO = k, D(k,k) is exactly zero.  The  factorization
                 has  been  completed,  but  the  block  diagonal  matrix D is
                 exactly singular.




                                  7 Nov 2015                   zlahef_rook(3P)