Provided by: liblapack-doc_3.12.0-3build1_all bug

NAME

       hesv_rk - {he,sy}sv_rk: rook (v3)

SYNOPSIS

   Functions
       subroutine chesv_rk (uplo, n, nrhs, a, lda, e, ipiv, b, ldb, work, lwork, info)
            CHESV_RK computes the solution to system of linear equations A * X = B for SY
           matrices
       subroutine csysv_rk (uplo, n, nrhs, a, lda, e, ipiv, b, ldb, work, lwork, info)
            CSYSV_RK computes the solution to system of linear equations A * X = B for SY
           matrices
       subroutine dsysv_rk (uplo, n, nrhs, a, lda, e, ipiv, b, ldb, work, lwork, info)
            DSYSV_RK computes the solution to system of linear equations A * X = B for SY
           matrices
       subroutine ssysv_rk (uplo, n, nrhs, a, lda, e, ipiv, b, ldb, work, lwork, info)
            SSYSV_RK computes the solution to system of linear equations A * X = B for SY
           matrices
       subroutine zhesv_rk (uplo, n, nrhs, a, lda, e, ipiv, b, ldb, work, lwork, info)
            ZHESV_RK computes the solution to system of linear equations A * X = B for SY
           matrices
       subroutine zsysv_rk (uplo, n, nrhs, a, lda, e, ipiv, b, ldb, work, lwork, info)
            ZSYSV_RK computes the solution to system of linear equations A * X = B for SY
           matrices

Detailed Description

Function Documentation

   subroutine chesv_rk (character uplo, integer n, integer nrhs, complex, dimension( lda, * ) a,
       integer lda, complex, dimension( * ) e, integer, dimension( * ) ipiv, complex, dimension(
       ldb, * ) b, integer ldb, complex, dimension( * ) work, integer lwork, integer info)
        CHESV_RK computes the solution to system of linear equations A * X = B for SY matrices

       Purpose:

            CHESV_RK computes the solution to a complex system of linear
            equations A * X = B, where A is an N-by-N Hermitian matrix
            and X and B are N-by-NRHS matrices.

            The bounded Bunch-Kaufman (rook) diagonal pivoting method is used
            to factor A as
               A = P*U*D*(U**H)*(P**T),  if UPLO = 'U', or
               A = P*L*D*(L**H)*(P**T),  if UPLO = 'L',
            where U (or L) is unit upper (or lower) triangular matrix,
            U**H (or L**H) is the conjugate of U (or L), P is a permutation
            matrix, P**T is the transpose of P, and D is Hermitian and block
            diagonal with 1-by-1 and 2-by-2 diagonal blocks.

            CHETRF_RK is called to compute the factorization of a complex
            Hermitian matrix.  The factored form of A is then used to solve
            the system of equations A * X = B by calling BLAS3 routine CHETRS_3.

       Parameters
           UPLO

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

           N

                     N is INTEGER
                     The number of linear equations, i.e., the order of the
                     matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrix B.  NRHS >= 0.

           A

                     A is COMPLEX 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, if INFO = 0, diagonal of the block diagonal
                     matrix D and factors U or L  as computed by CHETRF_RK:
                       a) ONLY diagonal elements of the Hermitian block diagonal
                          matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
                          (superdiagonal (or subdiagonal) elements of D
                           are stored on exit in array E), and
                       b) If UPLO = 'U': factor U in the superdiagonal part of A.
                          If UPLO = 'L': factor L in the subdiagonal part of A.

                     For more info see the description of CHETRF_RK routine.

           LDA

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

           E

                     E is COMPLEX array, dimension (N)
                     On exit, contains the output computed by the factorization
                     routine CHETRF_RK, i.e. the superdiagonal (or subdiagonal)
                     elements of the Hermitian block diagonal matrix D
                     with 1-by-1 or 2-by-2 diagonal blocks, where
                     If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
                     If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.

                     NOTE: For 1-by-1 diagonal block D(k), where
                     1 <= k <= N, the element E(k) is set to 0 in both
                     UPLO = 'U' or UPLO = 'L' cases.

                     For more info see the description of CHETRF_RK routine.

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     Details of the interchanges and the block structure of D,
                     as determined by CHETRF_RK.

                     For more info see the description of CHETRF_RK routine.

           B

                     B is COMPLEX array, dimension (LDB,NRHS)
                     On entry, the N-by-NRHS right hand side matrix B.
                     On exit, if INFO = 0, the N-by-NRHS solution matrix X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           WORK

                     WORK is COMPLEX array, dimension ( MAX(1,LWORK) ).
                     Work array used in the factorization stage.
                     On exit, if INFO = 0, WORK(1) returns the optimal LWORK.

           LWORK

                     LWORK is INTEGER
                     The length of WORK.  LWORK >= 1. For best performance
                     of factorization stage LWORK >= max(1,N*NB), where NB is
                     the optimal blocksize for CHETRF_RK.

                     If LWORK = -1, then a workspace query is assumed;
                     the routine only calculates the optimal size of the WORK
                     array for factorization stage, returns this value as
                     the first entry of the WORK array, and no error message
                     related to LWORK is issued by XERBLA.

           INFO

                     INFO is INTEGER
                     = 0: successful exit

                     < 0: If INFO = -k, the k-th argument had an illegal value

                     > 0: If INFO = k, the matrix A is singular, because:
                            If UPLO = 'U': column k in the upper
                            triangular part of A contains all zeros.
                            If UPLO = 'L': column k in the lower
                            triangular part of A contains all zeros.

                          Therefore D(k,k) is exactly zero, and superdiagonal
                          elements of column k of U (or subdiagonal elements of
                          column k of L ) are all zeros. The factorization has
                          been completed, but the block diagonal matrix D is
                          exactly singular, and division by zero will occur if
                          it is used to solve a system of equations.

                          NOTE: INFO only stores the first occurrence of
                          a singularity, any subsequent occurrence of singularity
                          is not stored in INFO even though the factorization
                          always completes.

       Author
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Contributors:

             December 2016,  Igor Kozachenko,
                             Computer Science Division,
                             University of California, Berkeley

             September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas,
                             School of Mathematics,
                             University of Manchester

   subroutine csysv_rk (character uplo, integer n, integer nrhs, complex, dimension( lda, * ) a,
       integer lda, complex, dimension( * ) e, integer, dimension( * ) ipiv, complex, dimension(
       ldb, * ) b, integer ldb, complex, dimension( * ) work, integer lwork, integer info)
        CSYSV_RK computes the solution to system of linear equations A * X = B for SY matrices

       Purpose:

            CSYSV_RK computes the solution to a complex system of linear
            equations A * X = B, where A is an N-by-N symmetric matrix
            and X and B are N-by-NRHS matrices.

            The bounded Bunch-Kaufman (rook) diagonal pivoting method is used
            to factor A as
               A = P*U*D*(U**T)*(P**T),  if UPLO = 'U', or
               A = P*L*D*(L**T)*(P**T),  if UPLO = 'L',
            where U (or L) is unit upper (or lower) triangular matrix,
            U**T (or L**T) is the transpose of U (or L), P is a permutation
            matrix, P**T is the transpose of P, and D is symmetric and block
            diagonal with 1-by-1 and 2-by-2 diagonal blocks.

            CSYTRF_RK is called to compute the factorization of a complex
            symmetric matrix.  The factored form of A is then used to solve
            the system of equations A * X = B by calling BLAS3 routine CSYTRS_3.

       Parameters
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangle of A is stored;
                     = 'L':  Lower triangle of A is stored.

           N

                     N is INTEGER
                     The number of linear equations, i.e., the order of the
                     matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrix B.  NRHS >= 0.

           A

                     A is COMPLEX array, dimension (LDA,N)
                     On entry, the symmetric 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, if INFO = 0, diagonal of the block diagonal
                     matrix D and factors U or L  as computed by CSYTRF_RK:
                       a) ONLY diagonal elements of the symmetric block diagonal
                          matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
                          (superdiagonal (or subdiagonal) elements of D
                           are stored on exit in array E), and
                       b) If UPLO = 'U': factor U in the superdiagonal part of A.
                          If UPLO = 'L': factor L in the subdiagonal part of A.

                     For more info see the description of CSYTRF_RK routine.

           LDA

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

           E

                     E is COMPLEX array, dimension (N)
                     On exit, contains the output computed by the factorization
                     routine CSYTRF_RK, i.e. the superdiagonal (or subdiagonal)
                     elements of the symmetric block diagonal matrix D
                     with 1-by-1 or 2-by-2 diagonal blocks, where
                     If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
                     If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.

                     NOTE: For 1-by-1 diagonal block D(k), where
                     1 <= k <= N, the element E(k) is set to 0 in both
                     UPLO = 'U' or UPLO = 'L' cases.

                     For more info see the description of CSYTRF_RK routine.

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     Details of the interchanges and the block structure of D,
                     as determined by CSYTRF_RK.

                     For more info see the description of CSYTRF_RK routine.

           B

                     B is COMPLEX array, dimension (LDB,NRHS)
                     On entry, the N-by-NRHS right hand side matrix B.
                     On exit, if INFO = 0, the N-by-NRHS solution matrix X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           WORK

                     WORK is COMPLEX array, dimension ( MAX(1,LWORK) ).
                     Work array used in the factorization stage.
                     On exit, if INFO = 0, WORK(1) returns the optimal LWORK.

           LWORK

                     LWORK is INTEGER
                     The length of WORK.  LWORK >= 1. For best performance
                     of factorization stage LWORK >= max(1,N*NB), where NB is
                     the optimal blocksize for CSYTRF_RK.

                     If LWORK = -1, then a workspace query is assumed;
                     the routine only calculates the optimal size of the WORK
                     array for factorization stage, returns this value as
                     the first entry of the WORK array, and no error message
                     related to LWORK is issued by XERBLA.

           INFO

                     INFO is INTEGER
                     = 0: successful exit

                     < 0: If INFO = -k, the k-th argument had an illegal value

                     > 0: If INFO = k, the matrix A is singular, because:
                            If UPLO = 'U': column k in the upper
                            triangular part of A contains all zeros.
                            If UPLO = 'L': column k in the lower
                            triangular part of A contains all zeros.

                          Therefore D(k,k) is exactly zero, and superdiagonal
                          elements of column k of U (or subdiagonal elements of
                          column k of L ) are all zeros. The factorization has
                          been completed, but the block diagonal matrix D is
                          exactly singular, and division by zero will occur if
                          it is used to solve a system of equations.

                          NOTE: INFO only stores the first occurrence of
                          a singularity, any subsequent occurrence of singularity
                          is not stored in INFO even though the factorization
                          always completes.

       Author
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Contributors:

             December 2016,  Igor Kozachenko,
                             Computer Science Division,
                             University of California, Berkeley

             September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas,
                             School of Mathematics,
                             University of Manchester

   subroutine dsysv_rk (character uplo, integer n, integer nrhs, double precision, dimension(
       lda, * ) a, integer lda, double precision, dimension( * ) e, integer, dimension( * ) ipiv,
       double precision, dimension( ldb, * ) b, integer ldb, double precision, dimension( * )
       work, integer lwork, integer info)
        DSYSV_RK computes the solution to system of linear equations A * X = B for SY matrices

       Purpose:

            DSYSV_RK computes the solution to a real system of linear
            equations A * X = B, where A is an N-by-N symmetric matrix
            and X and B are N-by-NRHS matrices.

            The bounded Bunch-Kaufman (rook) diagonal pivoting method is used
            to factor A as
               A = P*U*D*(U**T)*(P**T),  if UPLO = 'U', or
               A = P*L*D*(L**T)*(P**T),  if UPLO = 'L',
            where U (or L) is unit upper (or lower) triangular matrix,
            U**T (or L**T) is the transpose of U (or L), P is a permutation
            matrix, P**T is the transpose of P, and D is symmetric and block
            diagonal with 1-by-1 and 2-by-2 diagonal blocks.

            DSYTRF_RK is called to compute the factorization of a real
            symmetric matrix.  The factored form of A is then used to solve
            the system of equations A * X = B by calling BLAS3 routine DSYTRS_3.

       Parameters
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangle of A is stored;
                     = 'L':  Lower triangle of A is stored.

           N

                     N is INTEGER
                     The number of linear equations, i.e., the order of the
                     matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrix B.  NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     On entry, the symmetric 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, if INFO = 0, diagonal of the block diagonal
                     matrix D and factors U or L  as computed by DSYTRF_RK:
                       a) ONLY diagonal elements of the symmetric block diagonal
                          matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
                          (superdiagonal (or subdiagonal) elements of D
                           are stored on exit in array E), and
                       b) If UPLO = 'U': factor U in the superdiagonal part of A.
                          If UPLO = 'L': factor L in the subdiagonal part of A.

                     For more info see the description of DSYTRF_RK routine.

           LDA

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

           E

                     E is DOUBLE PRECISION array, dimension (N)
                     On exit, contains the output computed by the factorization
                     routine DSYTRF_RK, i.e. the superdiagonal (or subdiagonal)
                     elements of the symmetric block diagonal matrix D
                     with 1-by-1 or 2-by-2 diagonal blocks, where
                     If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
                     If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.

                     NOTE: For 1-by-1 diagonal block D(k), where
                     1 <= k <= N, the element E(k) is set to 0 in both
                     UPLO = 'U' or UPLO = 'L' cases.

                     For more info see the description of DSYTRF_RK routine.

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     Details of the interchanges and the block structure of D,
                     as determined by DSYTRF_RK.

                     For more info see the description of DSYTRF_RK routine.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the N-by-NRHS right hand side matrix B.
                     On exit, if INFO = 0, the N-by-NRHS solution matrix X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           WORK

                     WORK is DOUBLE PRECISION array, dimension ( MAX(1,LWORK) ).
                     Work array used in the factorization stage.
                     On exit, if INFO = 0, WORK(1) returns the optimal LWORK.

           LWORK

                     LWORK is INTEGER
                     The length of WORK.  LWORK >= 1. For best performance
                     of factorization stage LWORK >= max(1,N*NB), where NB is
                     the optimal blocksize for DSYTRF_RK.

                     If LWORK = -1, then a workspace query is assumed;
                     the routine only calculates the optimal size of the WORK
                     array for factorization stage, returns this value as
                     the first entry of the WORK array, and no error message
                     related to LWORK is issued by XERBLA.

           INFO

                     INFO is INTEGER
                     = 0: successful exit

                     < 0: If INFO = -k, the k-th argument had an illegal value

                     > 0: If INFO = k, the matrix A is singular, because:
                            If UPLO = 'U': column k in the upper
                            triangular part of A contains all zeros.
                            If UPLO = 'L': column k in the lower
                            triangular part of A contains all zeros.

                          Therefore D(k,k) is exactly zero, and superdiagonal
                          elements of column k of U (or subdiagonal elements of
                          column k of L ) are all zeros. The factorization has
                          been completed, but the block diagonal matrix D is
                          exactly singular, and division by zero will occur if
                          it is used to solve a system of equations.

                          NOTE: INFO only stores the first occurrence of
                          a singularity, any subsequent occurrence of singularity
                          is not stored in INFO even though the factorization
                          always completes.

       Author
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Contributors:

             December 2016,  Igor Kozachenko,
                             Computer Science Division,
                             University of California, Berkeley

             September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas,
                             School of Mathematics,
                             University of Manchester

   subroutine ssysv_rk (character uplo, integer n, integer nrhs, real, dimension( lda, * ) a,
       integer lda, real, dimension( * ) e, integer, dimension( * ) ipiv, real, dimension( ldb, *
       ) b, integer ldb, real, dimension( * ) work, integer lwork, integer info)
        SSYSV_RK computes the solution to system of linear equations A * X = B for SY matrices

       Purpose:

            SSYSV_RK computes the solution to a real system of linear
            equations A * X = B, where A is an N-by-N symmetric matrix
            and X and B are N-by-NRHS matrices.

            The bounded Bunch-Kaufman (rook) diagonal pivoting method is used
            to factor A as
               A = P*U*D*(U**T)*(P**T),  if UPLO = 'U', or
               A = P*L*D*(L**T)*(P**T),  if UPLO = 'L',
            where U (or L) is unit upper (or lower) triangular matrix,
            U**T (or L**T) is the transpose of U (or L), P is a permutation
            matrix, P**T is the transpose of P, and D is symmetric and block
            diagonal with 1-by-1 and 2-by-2 diagonal blocks.

            SSYTRF_RK is called to compute the factorization of a real
            symmetric matrix.  The factored form of A is then used to solve
            the system of equations A * X = B by calling BLAS3 routine SSYTRS_3.

       Parameters
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangle of A is stored;
                     = 'L':  Lower triangle of A is stored.

           N

                     N is INTEGER
                     The number of linear equations, i.e., the order of the
                     matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrix B.  NRHS >= 0.

           A

                     A is REAL array, dimension (LDA,N)
                     On entry, the symmetric 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, if INFO = 0, diagonal of the block diagonal
                     matrix D and factors U or L  as computed by SSYTRF_RK:
                       a) ONLY diagonal elements of the symmetric block diagonal
                          matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
                          (superdiagonal (or subdiagonal) elements of D
                           are stored on exit in array E), and
                       b) If UPLO = 'U': factor U in the superdiagonal part of A.
                          If UPLO = 'L': factor L in the subdiagonal part of A.

                     For more info see the description of DSYTRF_RK routine.

           LDA

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

           E

                     E is REAL array, dimension (N)
                     On exit, contains the output computed by the factorization
                     routine DSYTRF_RK, i.e. the superdiagonal (or subdiagonal)
                     elements of the symmetric block diagonal matrix D
                     with 1-by-1 or 2-by-2 diagonal blocks, where
                     If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
                     If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.

                     NOTE: For 1-by-1 diagonal block D(k), where
                     1 <= k <= N, the element E(k) is set to 0 in both
                     UPLO = 'U' or UPLO = 'L' cases.

                     For more info see the description of DSYTRF_RK routine.

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     Details of the interchanges and the block structure of D,
                     as determined by SSYTRF_RK.

                     For more info see the description of DSYTRF_RK routine.

           B

                     B is REAL array, dimension (LDB,NRHS)
                     On entry, the N-by-NRHS right hand side matrix B.
                     On exit, if INFO = 0, the N-by-NRHS solution matrix X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           WORK

                     WORK is REAL array, dimension ( MAX(1,LWORK) ).
                     Work array used in the factorization stage.
                     On exit, if INFO = 0, WORK(1) returns the optimal LWORK.

           LWORK

                     LWORK is INTEGER
                     The length of WORK.  LWORK >= 1. For best performance
                     of factorization stage LWORK >= max(1,N*NB), where NB is
                     the optimal blocksize for DSYTRF_RK.

                     If LWORK = -1, then a workspace query is assumed;
                     the routine only calculates the optimal size of the WORK
                     array for factorization stage, returns this value as
                     the first entry of the WORK array, and no error message
                     related to LWORK is issued by XERBLA.

           INFO

                     INFO is INTEGER
                     = 0: successful exit

                     < 0: If INFO = -k, the k-th argument had an illegal value

                     > 0: If INFO = k, the matrix A is singular, because:
                            If UPLO = 'U': column k in the upper
                            triangular part of A contains all zeros.
                            If UPLO = 'L': column k in the lower
                            triangular part of A contains all zeros.

                          Therefore D(k,k) is exactly zero, and superdiagonal
                          elements of column k of U (or subdiagonal elements of
                          column k of L ) are all zeros. The factorization has
                          been completed, but the block diagonal matrix D is
                          exactly singular, and division by zero will occur if
                          it is used to solve a system of equations.

                          NOTE: INFO only stores the first occurrence of
                          a singularity, any subsequent occurrence of singularity
                          is not stored in INFO even though the factorization
                          always completes.

       Author
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Contributors:

             December 2016,  Igor Kozachenko,
                             Computer Science Division,
                             University of California, Berkeley

             September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas,
                             School of Mathematics,
                             University of Manchester

   subroutine zhesv_rk (character uplo, integer n, integer nrhs, complex*16, dimension( lda, * )
       a, integer lda, complex*16, dimension( * ) e, integer, dimension( * ) ipiv, complex*16,
       dimension( ldb, * ) b, integer ldb, complex*16, dimension( * ) work, integer lwork,
       integer info)
        ZHESV_RK computes the solution to system of linear equations A * X = B for SY matrices

       Purpose:

            ZHESV_RK computes the solution to a complex system of linear
            equations A * X = B, where A is an N-by-N Hermitian matrix
            and X and B are N-by-NRHS matrices.

            The bounded Bunch-Kaufman (rook) diagonal pivoting method is used
            to factor A as
               A = P*U*D*(U**H)*(P**T),  if UPLO = 'U', or
               A = P*L*D*(L**H)*(P**T),  if UPLO = 'L',
            where U (or L) is unit upper (or lower) triangular matrix,
            U**H (or L**H) is the conjugate of U (or L), P is a permutation
            matrix, P**T is the transpose of P, and D is Hermitian and block
            diagonal with 1-by-1 and 2-by-2 diagonal blocks.

            ZHETRF_RK is called to compute the factorization of a complex
            Hermitian matrix.  The factored form of A is then used to solve
            the system of equations A * X = B by calling BLAS3 routine ZHETRS_3.

       Parameters
           UPLO

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

           N

                     N is INTEGER
                     The number of linear equations, i.e., the order of the
                     matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrix B.  NRHS >= 0.

           A

                     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, if INFO = 0, diagonal of the block diagonal
                     matrix D and factors U or L  as computed by ZHETRF_RK:
                       a) ONLY diagonal elements of the Hermitian block diagonal
                          matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
                          (superdiagonal (or subdiagonal) elements of D
                           are stored on exit in array E), and
                       b) If UPLO = 'U': factor U in the superdiagonal part of A.
                          If UPLO = 'L': factor L in the subdiagonal part of A.

                     For more info see the description of ZHETRF_RK routine.

           LDA

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

           E

                     E is COMPLEX*16 array, dimension (N)
                     On exit, contains the output computed by the factorization
                     routine ZHETRF_RK, i.e. the superdiagonal (or subdiagonal)
                     elements of the Hermitian block diagonal matrix D
                     with 1-by-1 or 2-by-2 diagonal blocks, where
                     If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
                     If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.

                     NOTE: For 1-by-1 diagonal block D(k), where
                     1 <= k <= N, the element E(k) is set to 0 in both
                     UPLO = 'U' or UPLO = 'L' cases.

                     For more info see the description of ZHETRF_RK routine.

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     Details of the interchanges and the block structure of D,
                     as determined by ZHETRF_RK.

                     For more info see the description of ZHETRF_RK routine.

           B

                     B is COMPLEX*16 array, dimension (LDB,NRHS)
                     On entry, the N-by-NRHS right hand side matrix B.
                     On exit, if INFO = 0, the N-by-NRHS solution matrix X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           WORK

                     WORK is COMPLEX*16 array, dimension ( MAX(1,LWORK) ).
                     Work array used in the factorization stage.
                     On exit, if INFO = 0, WORK(1) returns the optimal LWORK.

           LWORK

                     LWORK is INTEGER
                     The length of WORK.  LWORK >= 1. For best performance
                     of factorization stage LWORK >= max(1,N*NB), where NB is
                     the optimal blocksize for ZHETRF_RK.

                     If LWORK = -1, then a workspace query is assumed;
                     the routine only calculates the optimal size of the WORK
                     array for factorization stage, returns this value as
                     the first entry of the WORK array, and no error message
                     related to LWORK is issued by XERBLA.

           INFO

                     INFO is INTEGER
                     = 0: successful exit

                     < 0: If INFO = -k, the k-th argument had an illegal value

                     > 0: If INFO = k, the matrix A is singular, because:
                            If UPLO = 'U': column k in the upper
                            triangular part of A contains all zeros.
                            If UPLO = 'L': column k in the lower
                            triangular part of A contains all zeros.

                          Therefore D(k,k) is exactly zero, and superdiagonal
                          elements of column k of U (or subdiagonal elements of
                          column k of L ) are all zeros. The factorization has
                          been completed, but the block diagonal matrix D is
                          exactly singular, and division by zero will occur if
                          it is used to solve a system of equations.

                          NOTE: INFO only stores the first occurrence of
                          a singularity, any subsequent occurrence of singularity
                          is not stored in INFO even though the factorization
                          always completes.

       Author
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Contributors:

             December 2016,  Igor Kozachenko,
                             Computer Science Division,
                             University of California, Berkeley

             September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas,
                             School of Mathematics,
                             University of Manchester

   subroutine zsysv_rk (character uplo, integer n, integer nrhs, complex*16, dimension( lda, * )
       a, integer lda, complex*16, dimension( * ) e, integer, dimension( * ) ipiv, complex*16,
       dimension( ldb, * ) b, integer ldb, complex*16, dimension( * ) work, integer lwork,
       integer info)
        ZSYSV_RK computes the solution to system of linear equations A * X = B for SY matrices

       Purpose:

            ZSYSV_RK computes the solution to a complex system of linear
            equations A * X = B, where A is an N-by-N symmetric matrix
            and X and B are N-by-NRHS matrices.

            The bounded Bunch-Kaufman (rook) diagonal pivoting method is used
            to factor A as
               A = P*U*D*(U**T)*(P**T),  if UPLO = 'U', or
               A = P*L*D*(L**T)*(P**T),  if UPLO = 'L',
            where U (or L) is unit upper (or lower) triangular matrix,
            U**T (or L**T) is the transpose of U (or L), P is a permutation
            matrix, P**T is the transpose of P, and D is symmetric and block
            diagonal with 1-by-1 and 2-by-2 diagonal blocks.

            ZSYTRF_RK is called to compute the factorization of a complex
            symmetric matrix.  The factored form of A is then used to solve
            the system of equations A * X = B by calling BLAS3 routine ZSYTRS_3.

       Parameters
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangle of A is stored;
                     = 'L':  Lower triangle of A is stored.

           N

                     N is INTEGER
                     The number of linear equations, i.e., the order of the
                     matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrix B.  NRHS >= 0.

           A

                     A is COMPLEX*16 array, dimension (LDA,N)
                     On entry, the symmetric 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, if INFO = 0, diagonal of the block diagonal
                     matrix D and factors U or L  as computed by ZSYTRF_RK:
                       a) ONLY diagonal elements of the symmetric block diagonal
                          matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
                          (superdiagonal (or subdiagonal) elements of D
                           are stored on exit in array E), and
                       b) If UPLO = 'U': factor U in the superdiagonal part of A.
                          If UPLO = 'L': factor L in the subdiagonal part of A.

                     For more info see the description of ZSYTRF_RK routine.

           LDA

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

           E

                     E is COMPLEX*16 array, dimension (N)
                     On exit, contains the output computed by the factorization
                     routine ZSYTRF_RK, i.e. the superdiagonal (or subdiagonal)
                     elements of the symmetric block diagonal matrix D
                     with 1-by-1 or 2-by-2 diagonal blocks, where
                     If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
                     If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.

                     NOTE: For 1-by-1 diagonal block D(k), where
                     1 <= k <= N, the element E(k) is set to 0 in both
                     UPLO = 'U' or UPLO = 'L' cases.

                     For more info see the description of ZSYTRF_RK routine.

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     Details of the interchanges and the block structure of D,
                     as determined by ZSYTRF_RK.

                     For more info see the description of ZSYTRF_RK routine.

           B

                     B is COMPLEX*16 array, dimension (LDB,NRHS)
                     On entry, the N-by-NRHS right hand side matrix B.
                     On exit, if INFO = 0, the N-by-NRHS solution matrix X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           WORK

                     WORK is COMPLEX*16 array, dimension ( MAX(1,LWORK) ).
                     Work array used in the factorization stage.
                     On exit, if INFO = 0, WORK(1) returns the optimal LWORK.

           LWORK

                     LWORK is INTEGER
                     The length of WORK.  LWORK >= 1. For best performance
                     of factorization stage LWORK >= max(1,N*NB), where NB is
                     the optimal blocksize for ZSYTRF_RK.

                     If LWORK = -1, then a workspace query is assumed;
                     the routine only calculates the optimal size of the WORK
                     array for factorization stage, returns this value as
                     the first entry of the WORK array, and no error message
                     related to LWORK is issued by XERBLA.

           INFO

                     INFO is INTEGER
                     = 0: successful exit

                     < 0: If INFO = -k, the k-th argument had an illegal value

                     > 0: If INFO = k, the matrix A is singular, because:
                            If UPLO = 'U': column k in the upper
                            triangular part of A contains all zeros.
                            If UPLO = 'L': column k in the lower
                            triangular part of A contains all zeros.

                          Therefore D(k,k) is exactly zero, and superdiagonal
                          elements of column k of U (or subdiagonal elements of
                          column k of L ) are all zeros. The factorization has
                          been completed, but the block diagonal matrix D is
                          exactly singular, and division by zero will occur if
                          it is used to solve a system of equations.

                          NOTE: INFO only stores the first occurrence of
                          a singularity, any subsequent occurrence of singularity
                          is not stored in INFO even though the factorization
                          always completes.

       Author
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Contributors:

             December 2016,  Igor Kozachenko,
                             Computer Science Division,
                             University of California, Berkeley

             September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas,
                             School of Mathematics,
                             University of Manchester

Author

       Generated automatically by Doxygen for LAPACK from the source code.