Now each routine should have the correct list of arguments.
This allowed to detect and fix problems in parameter description of many routines.
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' y := alpha*A*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' y := alpha*A**H*x + beta*y.
*> \endverbatim
*>
*> are not referenced.
*> The following program segment will transfer a band matrix
*> from conventional full matrix storage to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> K = KU + 1 - J
*> DO 10, I = MAX( 1, J - KU ), MIN( M, J + KL )
*> TRANSA is CHARACTER*1
*> On entry, TRANSA specifies the form of op( A ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'N' or 'n', op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'T' or 't', op( A ) = A**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'C' or 'c', op( A ) = A**H.
*> \endverbatim
*>
*> TRANSB is CHARACTER*1
*> On entry, TRANSB specifies the form of op( B ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSB = 'N' or 'n', op( B ) = B.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSB = 'T' or 't', op( B ) = B**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSB = 'C' or 'c', op( B ) = B**H.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' y := alpha*A*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' y := alpha*A**H*x + beta*y.
*> \endverbatim
*>
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the band matrix A is being supplied as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> being supplied.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> being supplied.
*> \endverbatim
*> The following program segment will transfer the upper
*> triangular part of a hermitian band matrix from conventional
*> full matrix storage to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = K + 1 - J
*> DO 10, I = MAX( 1, J - K ), J
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
*> by n part of the array A must contain the lower triangular
*> band part of the hermitian matrix, supplied column by
*> The following program segment will transfer the lower
*> triangular part of a hermitian band matrix from conventional
*> full matrix storage to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = 1 - J
*> DO 10, I = J, MIN( N, J + K )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Note that the imaginary parts of the diagonal elements need
*> not be set and are assumed to be zero.
*> \endverbatim
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether the hermitian matrix A
*> appears on the left or right in the operation as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' C := alpha*A*B + beta*C,
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' C := alpha*B*A + beta*C,
*> \endverbatim
*>
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the hermitian matrix A is to be
*> referenced as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of the
*> hermitian matrix is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of the
*> hermitian matrix is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of A
*> is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of A
*> is to be referenced.
*> \endverbatim
*> ALPHA is REAL
*> On entry, ALPHA specifies the scalar alpha.
*> \endverbatim
+*>
+*> \param[in] X
*> \verbatim
-*> X COMPLEX array of dimension at least
+*> X is COMPLEX array of dimension at least
*> ( 1 + ( n - 1 )*abs( INCX ) ).
*> Before entry, the incremented array X must contain the n
*> element vector x.
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of A
*> is to be referenced.
*> \endverbatim
*> ALPHA is COMPLEX
*> On entry, ALPHA specifies the scalar alpha.
*> \endverbatim
+*>
+*> \param[in] X
*> \verbatim
-*> X COMPLEX array of dimension at least
+*> X is COMPLEX array of dimension at least
*> ( 1 + ( n - 1 )*abs( INCX ) ).
*> Before entry, the incremented array X must contain the n
*> element vector x.
*> On entry, INCX specifies the increment for the elements of
*> X. INCX must not be zero.
*> \endverbatim
+*>
+*> \param[in] Y
*> \verbatim
-*> Y COMPLEX array of dimension at least
+*> Y is COMPLEX array of dimension at least
*> ( 1 + ( n - 1 )*abs( INCY ) ).
*> Before entry, the incremented array Y must contain the n
*> element vector y.
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array C is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of C
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of C
*> is to be referenced.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' C := alpha*A*B**H +
*> conjg( alpha )*B*A**H +
*> beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' C := alpha*A**H*B +
*> conjg( alpha )*B**H*A +
*> beta*C.
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array C is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of C
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of C
*> is to be referenced.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' C := alpha*A*A**H + beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' C := alpha*A**H*A + beta*C.
*> \endverbatim
*>
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the matrix A is supplied in the packed
*> array AP as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> supplied in AP.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> supplied in AP.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the matrix A is supplied in the packed
*> array AP as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> supplied in AP.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> supplied in AP.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the matrix A is supplied in the packed
*> array AP as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> supplied in AP.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> supplied in AP.
*> \endverbatim
*> On entry, INCX specifies the increment for the elements of
*> X. INCX must not be zero.
*> \endverbatim
+*>
+*> \param[in] Y
*> \verbatim
-*> Y COMPLEX array of dimension at least
+*> Y is COMPLEX array of dimension at least
*> ( 1 + ( n - 1 )*abs( INCY ) ).
*> Before entry, the incremented array Y must contain the n
*> element vector y.
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether the symmetric matrix A
*> appears on the left or right in the operation as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' C := alpha*A*B + beta*C,
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' C := alpha*B*A + beta*C,
*> \endverbatim
*>
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the symmetric matrix A is to be
*> referenced as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of the
*> symmetric matrix is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of the
*> symmetric matrix is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array C is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of C
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of C
*> is to be referenced.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' C := alpha*A*B**T + alpha*B*A**T +
*> beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' C := alpha*A**T*B + alpha*B**T*A +
*> beta*C.
*> \endverbatim
*> ALPHA is COMPLEX
*> On entry, ALPHA specifies the scalar alpha.
*> \endverbatim
+*>
+*> \param[in] A
*> \verbatim
-*> A COMPLEX array of DIMENSION ( LDA, ka ), where ka is
+*> A is COMPLEX array of DIMENSION ( LDA, ka ), where ka is
*> k when TRANS = 'N' or 'n', and is n otherwise.
*> Before entry with TRANS = 'N' or 'n', the leading n by k
*> part of the array A must contain the matrix A, otherwise
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array C is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of C
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of C
*> is to be referenced.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' C := alpha*A*A**T + beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' C := alpha*A**T*A + beta*C.
*> \endverbatim
*>
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' x := A*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' x := A**T*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' x := A**H*x.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> The following program segment will transfer an upper
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = K + 1 - J
*> DO 10, I = MAX( 1, J - K ), J
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
*> by n part of the array A must contain the lower triangular
*> band part of the matrix of coefficients, supplied column by
*> The following program segment will transfer a lower
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = 1 - J
*> DO 10, I = J, MIN( N, J + K )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Note that when DIAG = 'U' or 'u' the elements of the array A
*> corresponding to the diagonal elements of the matrix are not
*> referenced, but are assumed to be unity.
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the equations to be solved as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' A*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' A**T*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' A**H*x = b.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> The following program segment will transfer an upper
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = K + 1 - J
*> DO 10, I = MAX( 1, J - K ), J
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
*> by n part of the array A must contain the lower triangular
*> band part of the matrix of coefficients, supplied column by
*> The following program segment will transfer a lower
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = 1 - J
*> DO 10, I = J, MIN( N, J + K )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Note that when DIAG = 'U' or 'u' the elements of the array A
*> corresponding to the diagonal elements of the matrix are not
*> referenced, but are assumed to be unity.
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' x := A*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' x := A**T*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' x := A**H*x.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the equations to be solved as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' A*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' A**T*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' A**H*x = b.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether op( A ) multiplies B from
*> the left or right as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' B := alpha*op( A )*B.
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' B := alpha*B*op( A ).
*> \endverbatim
*>
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix A is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANSA is CHARACTER*1
*> On entry, TRANSA specifies the form of op( A ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'N' or 'n' op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'T' or 't' op( A ) = A**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'C' or 'c' op( A ) = A**H.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit triangular
*> as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' x := A*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' x := A**T*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' x := A**H*x.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether op( A ) appears on the left
*> or right of X as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' op( A )*X = alpha*B.
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' X*op( A ) = alpha*B.
*> \endverbatim
*>
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix A is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANSA is CHARACTER*1
*> On entry, TRANSA specifies the form of op( A ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'N' or 'n' op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'T' or 't' op( A ) = A**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'C' or 'c' op( A ) = A**H.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit triangular
*> as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the equations to be solved as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' A*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' A**T*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' A**H*x = b.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' y := alpha*A*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' y := alpha*A**T*x + beta*y.
*> \endverbatim
*>
*> are not referenced.
*> The following program segment will transfer a band matrix
*> from conventional full matrix storage to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> K = KU + 1 - J
*> DO 10, I = MAX( 1, J - KU ), MIN( M, J + KL )
*> TRANSA is CHARACTER*1
*> On entry, TRANSA specifies the form of op( A ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'N' or 'n', op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'T' or 't', op( A ) = A**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'C' or 'c', op( A ) = A**T.
*> \endverbatim
*>
*> TRANSB is CHARACTER*1
*> On entry, TRANSB specifies the form of op( B ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSB = 'N' or 'n', op( B ) = B.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSB = 'T' or 't', op( B ) = B**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSB = 'C' or 'c', op( B ) = B**T.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' y := alpha*A*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' y := alpha*A**T*x + beta*y.
*> \endverbatim
*>
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the band matrix A is being supplied as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> being supplied.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> being supplied.
*> \endverbatim
*> The following program segment will transfer the upper
*> triangular part of a symmetric band matrix from conventional
*> full matrix storage to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = K + 1 - J
*> DO 10, I = MAX( 1, J - K ), J
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
*> by n part of the array A must contain the lower triangular
*> band part of the symmetric matrix, supplied column by
*> The following program segment will transfer the lower
*> triangular part of a symmetric band matrix from conventional
*> full matrix storage to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = 1 - J
*> DO 10, I = J, MIN( N, J + K )
*> storage spacing between elements of SY
*> \endverbatim
*>
-*> \param[out] DSDOT
+*> \result DSDOT
*> \verbatim
*> DSDOT is DOUBLE PRECISION
*> DSDOT double precision dot product (zero if N.LE.0)
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the matrix A is supplied in the packed
*> array AP as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> supplied in AP.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> supplied in AP.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the matrix A is supplied in the packed
*> array AP as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> supplied in AP.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> supplied in AP.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the matrix A is supplied in the packed
*> array AP as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> supplied in AP.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> supplied in AP.
*> \endverbatim
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether the symmetric matrix A
*> appears on the left or right in the operation as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' C := alpha*A*B + beta*C,
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' C := alpha*B*A + beta*C,
*> \endverbatim
*>
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the symmetric matrix A is to be
*> referenced as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of the
*> symmetric matrix is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of the
*> symmetric matrix is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of A
*> is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of A
*> is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of A
*> is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array C is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of C
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of C
*> is to be referenced.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' C := alpha*A*B**T + alpha*B*A**T +
*> beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' C := alpha*A**T*B + alpha*B**T*A +
*> beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' C := alpha*A**T*B + alpha*B**T*A +
*> beta*C.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array C is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of C
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of C
*> is to be referenced.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' C := alpha*A*A**T + beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' C := alpha*A**T*A + beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' C := alpha*A**T*A + beta*C.
*> \endverbatim
*>
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' x := A*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' x := A**T*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' x := A**T*x.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> The following program segment will transfer an upper
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = K + 1 - J
*> DO 10, I = MAX( 1, J - K ), J
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
*> by n part of the array A must contain the lower triangular
*> band part of the matrix of coefficients, supplied column by
*> The following program segment will transfer a lower
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = 1 - J
*> DO 10, I = J, MIN( N, J + K )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Note that when DIAG = 'U' or 'u' the elements of the array A
*> corresponding to the diagonal elements of the matrix are not
*> referenced, but are assumed to be unity.
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the equations to be solved as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' A*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' A**T*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' A**T*x = b.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> The following program segment will transfer an upper
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = K + 1 - J
*> DO 10, I = MAX( 1, J - K ), J
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
*> by n part of the array A must contain the lower triangular
*> band part of the matrix of coefficients, supplied column by
*> The following program segment will transfer a lower
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = 1 - J
*> DO 10, I = J, MIN( N, J + K )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Note that when DIAG = 'U' or 'u' the elements of the array A
*> corresponding to the diagonal elements of the matrix are not
*> referenced, but are assumed to be unity.
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' x := A*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' x := A**T*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' x := A**T*x.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the equations to be solved as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' A*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' A**T*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' A**T*x = b.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether op( A ) multiplies B from
*> the left or right as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' B := alpha*op( A )*B.
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' B := alpha*B*op( A ).
*> \endverbatim
*>
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix A is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANSA is CHARACTER*1
*> On entry, TRANSA specifies the form of op( A ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'N' or 'n' op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'T' or 't' op( A ) = A**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'C' or 'c' op( A ) = A**T.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit triangular
*> as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> zero then A is not referenced and B need not be set before
*> entry.
*> \endverbatim
+*>
+*> \param[in] A
*> \verbatim
-*> A DOUBLE PRECISION array of DIMENSION ( LDA, k ), where k is m
+*> A is DOUBLE PRECISION array of DIMENSION ( LDA, k ), where k is m
*> when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'.
*> Before entry with UPLO = 'U' or 'u', the leading k by k
*> upper triangular part of the array A must contain the upper
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' x := A*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' x := A**T*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' x := A**T*x.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether op( A ) appears on the left
*> or right of X as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' op( A )*X = alpha*B.
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' X*op( A ) = alpha*B.
*> \endverbatim
*>
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix A is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANSA is CHARACTER*1
*> On entry, TRANSA specifies the form of op( A ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'N' or 'n' op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'T' or 't' op( A ) = A**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'C' or 'c' op( A ) = A**T.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit triangular
*> as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the equations to be solved as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' A*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' A**T*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' A**T*x = b.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> INCX is INTEGER
*> On entry, INCX specifies the increment for the elements of
*> X. INCX must not be zero.
-*> \endverbatim
-*> \verbatim
+*>
*> Level 2 Blas routine.
-*> \endverbatim
-*> \verbatim
+*>
*> -- Written on 22-October-1986.
*> Jack Dongarra, Argonne National Lab.
*> Jeremy Du Croz, Nag Central Office.
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' y := alpha*A*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' y := alpha*A**T*x + beta*y.
*> \endverbatim
*>
*> are not referenced.
*> The following program segment will transfer a band matrix
*> from conventional full matrix storage to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> K = KU + 1 - J
*> DO 10, I = MAX( 1, J - KU ), MIN( M, J + KL )
*> TRANSA is CHARACTER*1
*> On entry, TRANSA specifies the form of op( A ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'N' or 'n', op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'T' or 't', op( A ) = A**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'C' or 'c', op( A ) = A**T.
*> \endverbatim
*>
*> TRANSB is CHARACTER*1
*> On entry, TRANSB specifies the form of op( B ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSB = 'N' or 'n', op( B ) = B.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSB = 'T' or 't', op( B ) = B**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSB = 'C' or 'c', op( B ) = B**T.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' y := alpha*A*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' y := alpha*A**T*x + beta*y.
*> \endverbatim
*>
*> ALPHA is REAL
*> On entry, ALPHA specifies the scalar alpha.
*> \endverbatim
+*>
+*> \param[in] X
*> \verbatim
-*> X REAL array of dimension at least
+*> X is REAL array of dimension at least
*> ( 1 + ( m - 1 )*abs( INCX ) ).
*> Before entry, the incremented array X must contain the m
*> element vector x.
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the band matrix A is being supplied as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> being supplied.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> being supplied.
*> \endverbatim
*> The following program segment will transfer the upper
*> triangular part of a symmetric band matrix from conventional
*> full matrix storage to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = K + 1 - J
*> DO 10, I = MAX( 1, J - K ), J
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
*> by n part of the array A must contain the lower triangular
*> band part of the symmetric matrix, supplied column by
*> The following program segment will transfer the lower
*> triangular part of a symmetric band matrix from conventional
*> full matrix storage to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = 1 - J
*> DO 10, I = J, MIN( N, J + K )
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the matrix A is supplied in the packed
*> array AP as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> supplied in AP.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> supplied in AP.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the matrix A is supplied in the packed
*> array AP as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> supplied in AP.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> supplied in AP.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the matrix A is supplied in the packed
*> array AP as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> supplied in AP.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> supplied in AP.
*> \endverbatim
*> ALPHA is REAL
*> On entry, ALPHA specifies the scalar alpha.
*> \endverbatim
+*>
+*> \param[in] X
*> \verbatim
-*> X REAL array of dimension at least
+*> X is REAL array of dimension at least
*> ( 1 + ( n - 1 )*abs( INCX ) ).
*> Before entry, the incremented array X must contain the n
*> element vector x.
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether the symmetric matrix A
*> appears on the left or right in the operation as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' C := alpha*A*B + beta*C,
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' C := alpha*B*A + beta*C,
*> \endverbatim
*>
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the symmetric matrix A is to be
*> referenced as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of the
*> symmetric matrix is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of the
*> symmetric matrix is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of A
*> is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of A
*> is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of A
*> is to be referenced.
*> \endverbatim
*> ALPHA is REAL
*> On entry, ALPHA specifies the scalar alpha.
*> \endverbatim
+*>
+*> \param[in] X
*> \verbatim
-*> X REAL array of dimension at least
+*> X is REAL array of dimension at least
*> ( 1 + ( n - 1 )*abs( INCX ) ).
*> Before entry, the incremented array X must contain the n
*> element vector x.
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array C is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of C
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of C
*> is to be referenced.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' C := alpha*A*B**T + alpha*B*A**T +
*> beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' C := alpha*A**T*B + alpha*B**T*A +
*> beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' C := alpha*A**T*B + alpha*B**T*A +
*> beta*C.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array C is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of C
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of C
*> is to be referenced.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' C := alpha*A*A**T + beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' C := alpha*A**T*A + beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' C := alpha*A**T*A + beta*C.
*> \endverbatim
*>
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' x := A*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' x := A**T*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' x := A**T*x.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> The following program segment will transfer an upper
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = K + 1 - J
*> DO 10, I = MAX( 1, J - K ), J
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
*> by n part of the array A must contain the lower triangular
*> band part of the matrix of coefficients, supplied column by
*> The following program segment will transfer a lower
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = 1 - J
*> DO 10, I = J, MIN( N, J + K )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Note that when DIAG = 'U' or 'u' the elements of the array A
*> corresponding to the diagonal elements of the matrix are not
*> referenced, but are assumed to be unity.
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the equations to be solved as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' A*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' A**T*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' A**T*x = b.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> The following program segment will transfer an upper
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = K + 1 - J
*> DO 10, I = MAX( 1, J - K ), J
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
*> by n part of the array A must contain the lower triangular
*> band part of the matrix of coefficients, supplied column by
*> The following program segment will transfer a lower
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = 1 - J
*> DO 10, I = J, MIN( N, J + K )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Note that when DIAG = 'U' or 'u' the elements of the array A
*> corresponding to the diagonal elements of the matrix are not
*> referenced, but are assumed to be unity.
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' x := A*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' x := A**T*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' x := A**T*x.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the equations to be solved as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' A*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' A**T*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' A**T*x = b.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether op( A ) multiplies B from
*> the left or right as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' B := alpha*op( A )*B.
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' B := alpha*B*op( A ).
*> \endverbatim
*>
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix A is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANSA is CHARACTER*1
*> On entry, TRANSA specifies the form of op( A ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'N' or 'n' op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'T' or 't' op( A ) = A**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'C' or 'c' op( A ) = A**T.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit triangular
*> as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' x := A*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' x := A**T*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' x := A**T*x.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether op( A ) appears on the left
*> or right of X as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' op( A )*X = alpha*B.
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' X*op( A ) = alpha*B.
*> \endverbatim
*>
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix A is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANSA is CHARACTER*1
*> On entry, TRANSA specifies the form of op( A ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'N' or 'n' op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'T' or 't' op( A ) = A**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'C' or 'c' op( A ) = A**T.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit triangular
*> as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the equations to be solved as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' A*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' A**T*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' A**T*x = b.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' y := alpha*A*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' y := alpha*A**H*x + beta*y.
*> \endverbatim
*>
*> are not referenced.
*> The following program segment will transfer a band matrix
*> from conventional full matrix storage to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> K = KU + 1 - J
*> DO 10, I = MAX( 1, J - KU ), MIN( M, J + KL )
*> TRANSA is CHARACTER*1
*> On entry, TRANSA specifies the form of op( A ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'N' or 'n', op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'T' or 't', op( A ) = A**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'C' or 'c', op( A ) = A**H.
*> \endverbatim
*>
*> TRANSB is CHARACTER*1
*> On entry, TRANSB specifies the form of op( B ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSB = 'N' or 'n', op( B ) = B.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSB = 'T' or 't', op( B ) = B**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSB = 'C' or 'c', op( B ) = B**H.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' y := alpha*A*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' y := alpha*A**H*x + beta*y.
*> \endverbatim
*>
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the band matrix A is being supplied as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> being supplied.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> being supplied.
*> \endverbatim
*> The following program segment will transfer the upper
*> triangular part of a hermitian band matrix from conventional
*> full matrix storage to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = K + 1 - J
*> DO 10, I = MAX( 1, J - K ), J
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
*> by n part of the array A must contain the lower triangular
*> band part of the hermitian matrix, supplied column by
*> The following program segment will transfer the lower
*> triangular part of a hermitian band matrix from conventional
*> full matrix storage to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = 1 - J
*> DO 10, I = J, MIN( N, J + K )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Note that the imaginary parts of the diagonal elements need
*> not be set and are assumed to be zero.
*> \endverbatim
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether the hermitian matrix A
*> appears on the left or right in the operation as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' C := alpha*A*B + beta*C,
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' C := alpha*B*A + beta*C,
*> \endverbatim
*>
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the hermitian matrix A is to be
*> referenced as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of the
*> hermitian matrix is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of the
*> hermitian matrix is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of A
*> is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of A
*> is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of A
*> is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array C is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of C
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of C
*> is to be referenced.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' C := alpha*A*B**H +
*> conjg( alpha )*B*A**H +
*> beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' C := alpha*A**H*B +
*> conjg( alpha )*B**H*A +
*> beta*C.
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array C is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of C
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of C
*> is to be referenced.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' C := alpha*A*A**H + beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' C := alpha*A**H*A + beta*C.
*> \endverbatim
*>
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the matrix A is supplied in the packed
*> array AP as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> supplied in AP.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> supplied in AP.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the matrix A is supplied in the packed
*> array AP as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> supplied in AP.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> supplied in AP.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the matrix A is supplied in the packed
*> array AP as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' The upper triangular part of A is
*> supplied in AP.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' The lower triangular part of A is
*> supplied in AP.
*> \endverbatim
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether the symmetric matrix A
*> appears on the left or right in the operation as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' C := alpha*A*B + beta*C,
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' C := alpha*B*A + beta*C,
*> \endverbatim
*>
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the symmetric matrix A is to be
*> referenced as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of the
*> symmetric matrix is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of the
*> symmetric matrix is to be referenced.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array C is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of C
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of C
*> is to be referenced.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' C := alpha*A*B**T + alpha*B*A**T +
*> beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' C := alpha*A**T*B + alpha*B**T*A +
*> beta*C.
*> \endverbatim
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array C is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' Only the upper triangular part of C
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' Only the lower triangular part of C
*> is to be referenced.
*> \endverbatim
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' C := alpha*A*A**T + beta*C.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' C := alpha*A**T*A + beta*C.
*> \endverbatim
*>
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' x := A*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' x := A**T*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' x := A**H*x.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> The following program segment will transfer an upper
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = K + 1 - J
*> DO 10, I = MAX( 1, J - K ), J
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
*> by n part of the array A must contain the lower triangular
*> band part of the matrix of coefficients, supplied column by
*> The following program segment will transfer a lower
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = 1 - J
*> DO 10, I = J, MIN( N, J + K )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Note that when DIAG = 'U' or 'u' the elements of the array A
*> corresponding to the diagonal elements of the matrix are not
*> referenced, but are assumed to be unity.
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the equations to be solved as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' A*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' A**T*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' A**H*x = b.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> The following program segment will transfer an upper
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = K + 1 - J
*> DO 10, I = MAX( 1, J - K ), J
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
*> by n part of the array A must contain the lower triangular
*> band part of the matrix of coefficients, supplied column by
*> The following program segment will transfer a lower
*> triangular band matrix from conventional full matrix storage
*> to band storage:
-*> \endverbatim
-*> \verbatim
+*>
*> DO 20, J = 1, N
*> M = 1 - J
*> DO 10, I = J, MIN( N, J + K )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Note that when DIAG = 'U' or 'u' the elements of the array A
*> corresponding to the diagonal elements of the matrix are not
*> referenced, but are assumed to be unity.
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' x := A*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' x := A**T*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' x := A**H*x.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the equations to be solved as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' A*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' A**T*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' A**H*x = b.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether op( A ) multiplies B from
*> the left or right as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' B := alpha*op( A )*B.
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' B := alpha*B*op( A ).
*> \endverbatim
*>
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix A is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANSA is CHARACTER*1
*> On entry, TRANSA specifies the form of op( A ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'N' or 'n' op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'T' or 't' op( A ) = A**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'C' or 'c' op( A ) = A**H.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit triangular
*> as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' x := A*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' x := A**T*x.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' x := A**H*x.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> SIDE is CHARACTER*1
*> On entry, SIDE specifies whether op( A ) appears on the left
*> or right of X as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'L' or 'l' op( A )*X = alpha*B.
-*> \endverbatim
-*> \verbatim
+*>
*> SIDE = 'R' or 'r' X*op( A ) = alpha*B.
*> \endverbatim
*>
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix A is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANSA is CHARACTER*1
*> On entry, TRANSA specifies the form of op( A ) to be used in
*> the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'N' or 'n' op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'T' or 't' op( A ) = A**T.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANSA = 'C' or 'c' op( A ) = A**H.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit triangular
*> as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
*> UPLO is CHARACTER*1
*> On entry, UPLO specifies whether the matrix is an upper or
*> lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' A is an upper triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' A is a lower triangular matrix.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the equations to be solved as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' A*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' A**T*x = b.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' A**H*x = b.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not A is unit
*> triangular as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'U' or 'u' A is assumed to be unit triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG = 'N' or 'n' A is not assumed to be unit
*> triangular.
*> \endverbatim
# exceed 55 pixels and the maximum width should not exceed 200 pixels.
# Doxygen will copy the logo to the output directory.
-PROJECT_LOGO =
+PROJECT_LOGO = DOCS/lapack.png
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
# will result in a user-defined paragraph with heading "Side Effects:".
# You can put \n's in the value part of an alias to insert newlines.
-ALIASES =
+ALIASES = "purpose=\details \b Purpose"
+#ALIASES += "FurtherDetails=\details \b Further \b Details"
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
# sources only. Doxygen will then generate output that is more tailored for C.
# and error messages should be written. If left blank the output is written
# to stderr.
-WARN_LOGFILE =
+WARN_LOGFILE = output_err
#---------------------------------------------------------------------------
# configuration options related to the input files
# subdirectory from a directory tree whose root is specified with the INPUT tag.
# Note that relative paths are relative to directory from which doxygen is run.
-EXCLUDE = CMAKE
+EXCLUDE = CMAKE \
+ DOCS \
+ .svn \
+ SRC/.svn \
+ INSTALL/.svn \
+ TESTING/.svn \
+ TESTING/EIG/.svn \
+ TESTING/MATGEN/.svn \
+ TESTING/LIN/.svn \
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
# only source the real man page, but without them the man command
# would be unable to find the correct page. The default is NO.
-MAN_LINKS = NO
+MAN_LINKS = YES
#---------------------------------------------------------------------------
# configuration options related to the XML output
# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
# visible in IE 9+ (other browsers do not have this requirement).
-DOT_IMAGE_FORMAT = png
+DOT_IMAGE_FORMAT = svg
# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
# enable generation of interactive SVG images that allow zooming and panning.
*> DLAMC1 determines the machine parameters given by BETA, T, RND, and
*> IEEE1.
*>
-*>\verbatim
+*>\endverbatim
*>
*> \param[out] BETA
*> \verbatim
*> \param[out] EPS
*> \verbatim
*> The smallest positive number such that
-*> \endverbatim
-*> \verbatim
*> fl( 1.0 - EPS ) .LT. 1.0,
-*> \endverbatim
-*> \verbatim
*> where fl denotes the computed value.
*> \endverbatim
*>
*> SLAMC1 determines the machine parameters given by BETA, T, RND, and
*> IEEE1.
*>
-*>\verbatim
+*>\endverbatim
*>
*> \param[out] BETA
*> \verbatim
*> \param[out] EPS
*> \verbatim
*> The smallest positive number such that
-*> \endverbatim
-*> \verbatim
*> fl( 1.0 - EPS ) .LT. 1.0,
-*> \endverbatim
-*> \verbatim
*> where fl denotes the computed value.
*> \endverbatim
*>
*> partially reduced top-right block.
*> \endverbatim
*>
+*> \param[out] B21D
+*> \verbatim
+*> B21D is REAL array, dimension (Q)
+*> When CBBCSD converges, B21D contains the negative sines of
+*> THETA(1), ..., THETA(Q). If CBBCSD fails to converge, then
+*> B21D contains the diagonal of the partially reduced bottom-left
+*> block.
+*> \endverbatim
+*>
+*> \param[out] B21E
+*> \verbatim
+*> B21E is REAL array, dimension (Q-1)
+*> When CBBCSD converges, B21E contains zeros. If CBBCSD fails
+*> to converge, then B21E contains the subdiagonal of the
+*> partially reduced bottom-left block.
+*> \endverbatim
+*>
+*> \param[out] B22D
+*> \verbatim
+*> B22D is REAL array, dimension (Q)
+*> When CBBCSD converges, B22D contains the negative sines of
+*> THETA(1), ..., THETA(Q). If CBBCSD fails to converge, then
+*> B22D contains the diagonal of the partially reduced bottom-right
+*> block.
+*> \endverbatim
+*>
+*> \param[out] B22E
+*> \verbatim
+*> B22E is REAL array, dimension (Q-1)
+*> When CBBCSD converges, B22E contains zeros. If CBBCSD fails
+*> to converge, then B22E contains the subdiagonal of the
+*> partially reduced bottom-right block.
+*> \endverbatim
+*>
*> \param[out] RWORK
*> \verbatim
*> RWORK is REAL array, dimension (MAX(1,LWORK))
-*> \brief <b> CGBSV computes the solution to system of linear equations A * X = B for GB matrices</b>
+*> \brief <b> CGBSV computes the solution to system of linear equations A * X = B for GB matrices</b> (simple driver)
*
* =========== DOCUMENTATION ===========
*
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is COMPLEX array, dimension (LDA,N)
+*> On entry, the input matrix A.
+*> On exit, A is overwritten by the balanced matrix.
+*> If JOB = 'N', A is not referenced.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> ILO (output) INTEGER
-*>
-*> IHI (output) INTEGER
+*> \param[out] ILO
+*> \verbatim
+*> ILO is INTEGER
+*> \endverbatim
+*> \param[out] IHI
+*> \verbatim
+*> IHI is INTEGER
*> ILO and IHI are set to integers such that on exit
*> A(i,j) = 0 if i > j and j = 1,...,ILO-1 or I = IHI+1,...,N.
*> If JOB = 'N' or 'S', ILO = 1 and IHI = N.
+*> \endverbatim
*>
-*> SCALE (output) REAL array, dimension (N)
+*> \param[out] SCALE
+*> \verbatim
+*> SCALE is REAL array, dimension (N)
*> Details of the permutations and scaling factors applied to
*> A. If P(j) is the index of the row and column interchanged
*> with row and column j and D(j) is the scaling factor
*> = P(j) for j = IHI+1,...,N.
*> The order in which the interchanges are made is N to IHI+1,
*> then 1 to ILO-1.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit.
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The permutations consist of row and column interchanges which put
*> the matrix in the form
*> The number of columns in the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is COMPLEX array, dimension (LDA,N)
+*> On entry, the m by n general matrix to be reduced.
+*> On exit,
+*> if m >= n, the diagonal and the first superdiagonal are
+*> overwritten with the upper bidiagonal matrix B; the
+*> elements below the diagonal, with the array TAUQ, represent
+*> the unitary matrix Q as a product of elementary
+*> reflectors, and the elements above the first superdiagonal,
+*> with the array TAUP, represent the unitary matrix P as
+*> a product of elementary reflectors;
+*> if m < n, the diagonal and the first subdiagonal are
+*> overwritten with the lower bidiagonal matrix B; the
+*> elements below the first subdiagonal, with the array TAUQ,
+*> represent the unitary matrix Q as a product of
+*> elementary reflectors, and the elements above the diagonal,
+*> with the array TAUP, represent the unitary matrix P as
+*> a product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> D (output) REAL array, dimension (min(M,N))
+*> \param[out] D
+*> \verbatim
+*> D is REAL array, dimension (min(M,N))
*> The diagonal elements of the bidiagonal matrix B:
*> D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) REAL array, dimension (min(M,N)-1)
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (min(M,N)-1)
*> The off-diagonal elements of the bidiagonal matrix B:
*> if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1;
*> if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1.
+*> \endverbatim
*>
-*> TAUQ (output) COMPLEX array dimension (min(M,N))
+*> \param[out] TAUQ
+*> \verbatim
+*> TAUQ is COMPLEX array dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix Q. See Further Details.
+*> \endverbatim
*>
-*> TAUP (output) COMPLEX array, dimension (min(M,N))
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is COMPLEX array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix P. See Further Details.
+*> \endverbatim
*>
-*> WORK (workspace) COMPLEX array, dimension (max(M,N))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (max(M,N))
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexGEcomputational
+* @precisions normal c -> s d z
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrices Q and P are represented as products of elementary
*> reflectors:
*> The number of columns in the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is COMPLEX array, dimension (LDA,N)
+*> On entry, the M-by-N general matrix to be reduced.
+*> On exit,
+*> if m >= n, the diagonal and the first superdiagonal are
+*> overwritten with the upper bidiagonal matrix B; the
+*> elements below the diagonal, with the array TAUQ, represent
+*> the unitary matrix Q as a product of elementary
+*> reflectors, and the elements above the first superdiagonal,
+*> with the array TAUP, represent the unitary matrix P as
+*> a product of elementary reflectors;
+*> if m < n, the diagonal and the first subdiagonal are
+*> overwritten with the lower bidiagonal matrix B; the
+*> elements below the first subdiagonal, with the array TAUQ,
+*> represent the unitary matrix Q as a product of
+*> elementary reflectors, and the elements above the diagonal,
+*> with the array TAUP, represent the unitary matrix P as
+*> a product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> D (output) REAL array, dimension (min(M,N))
+*> \param[out] D
+*> \verbatim
+*> D is REAL array, dimension (min(M,N))
*> The diagonal elements of the bidiagonal matrix B:
*> D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) REAL array, dimension (min(M,N)-1)
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (min(M,N)-1)
*> The off-diagonal elements of the bidiagonal matrix B:
*> if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1;
*> if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1.
+*> \endverbatim
*>
-*> TAUQ (output) COMPLEX array dimension (min(M,N))
+*> \param[out] TAUQ
+*> \verbatim
+*> TAUQ is COMPLEX array dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix Q. See Further Details.
+*> \endverbatim
*>
-*> TAUP (output) COMPLEX array, dimension (min(M,N))
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is COMPLEX array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix P. See Further Details.
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The length of the array WORK. LWORK >= max(1,M,N).
*> For optimum performance LWORK >= (M+N)*NB, where NB
*> is the optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit.
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrices Q and P are represented as products of elementary
*> reflectors:
*> Schur form so that selected eigenvalues are at the top left.
*> The leading columns of Z then form an orthonormal basis for the
*> invariant subspace corresponding to the selected eigenvalues.
-
+*>
*> A complex matrix is in Schur form if it is upper triangular.
*>
*>\endverbatim
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] ILO
+*> \verbatim
+*> ILO is INTEGER
+*> \endverbatim
+*>
+*> \param[in] IHI
*> \verbatim
-* set to 1 and N respectively. See Further Details.
+*> IHI is INTEGER
+*>
+*> It is assumed that A is already upper triangular in rows
+*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally
+*> set by a previous call to CGEBAL; otherwise they should be
+*> set to 1 and N respectively. See Further Details.
*> 1 <= ILO <= IHI <= max(1,N).
+*> \endverbatim
*>
-*> A (input/output) COMPLEX array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX array, dimension (LDA,N)
*> On entry, the n by n general matrix to be reduced.
*> On exit, the upper triangle and the first subdiagonal of A
*> are overwritten with the upper Hessenberg matrix H, and the
*> elements below the first subdiagonal, with the array TAU,
*> represent the unitary matrix Q as a product of elementary
*> reflectors. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> TAU (output) COMPLEX array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (N-1)
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace) COMPLEX array, dimension (N)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (N)
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of (ihi-ilo) elementary
*> reflectors
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] ILO
*> \verbatim
-* set to 1 and N respectively. See Further Details.
+*> ILO is INTEGER
+*> \endverbatim
+*>
+*> \param[in] IHI
+*> \verbatim
+*> IHI is INTEGER
+*>
+*> It is assumed that A is already upper triangular in rows
+*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally
+*> set by a previous call to CGEBAL; otherwise they should be
+*> set to 1 and N respectively. See Further Details.
*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0.
+*> \endverbatim
*>
-*> A (input/output) COMPLEX array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX array, dimension (LDA,N)
*> On entry, the N-by-N general matrix to be reduced.
*> On exit, the upper triangle and the first subdiagonal of A
*> are overwritten with the upper Hessenberg matrix H, and the
*> elements below the first subdiagonal, with the array TAU,
*> represent the unitary matrix Q as a product of elementary
*> reflectors. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> TAU (output) COMPLEX array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (N-1)
*> The scalar factors of the elementary reflectors (see Further
*> Details). Elements 1:ILO-1 and IHI:N-1 of TAU are set to
*> zero.
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX array, dimension (LWORK)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (LWORK)
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The length of the array WORK. LWORK >= max(1,N).
*> For optimum performance LWORK >= N*NB, where NB is the
*> optimal blocksize.
-*>
+*> \endverbatim
+*> \verbatim
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of (ihi-ilo) elementary
*> reflectors
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, the elements on and below the diagonal of the array
+*> contain the m by min(m,n) lower trapezoidal matrix L (L is
+*> lower triangular if m <= n); the elements above the diagonal,
+*> with the array TAU, represent the unitary matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (M)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* product of elementary reflectors (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) COMPLEX array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) COMPLEX array, dimension (M)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* product of elementary reflectors (see Further Details).
+*> A is COMPLEX array, dimension (LDA,N)
+*> On entry, the M-by-N matrix A.
+*> On exit, the elements on and below the diagonal of the array
+*> contain the m-by-min(m,n) lower trapezoidal matrix L (L is
+*> lower triangular if m <= n); the elements above the diagonal,
+*> with the array TAU, represent the unitary matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> TAU (output) COMPLEX array, dimension (min(M,N))
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,M).
*> For optimum performance LWORK >= M*NB, where NB is the
*> optimal blocksize.
-*>
+*> \endverbatim
+*> \verbatim
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, if m >= n, the lower triangle of the subarray
+*> A(m-n+1:m,1:n) contains the n by n lower triangular matrix L;
+*> if m <= n, the elements on and below the (n-m)-th
+*> superdiagonal contain the m by n lower trapezoidal matrix L;
+*> the remaining elements, with the array TAU, represent the
+*> unitary matrix Q as a product of elementary reflectors
+*> (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) COMPLEX array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) COMPLEX array, dimension (N)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* (see Further Details).
+*> A is COMPLEX array, dimension (LDA,N)
+*> On entry, the M-by-N matrix A.
+*> On exit,
+*> if m >= n, the lower triangle of the subarray
+*> A(m-n+1:m,1:n) contains the N-by-N lower triangular matrix L;
+*> if m <= n, the elements on and below the (n-m)-th
+*> superdiagonal contain the M-by-N lower trapezoidal matrix L;
+*> the remaining elements, with the array TAU, represent the
+*> unitary matrix Q as a product of elementary reflectors
+*> (see Further Details).
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> TAU (output) COMPLEX array, dimension (min(M,N))
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N).
*> For optimum performance LWORK >= N*NB, where NB is
*> the optimal blocksize.
-*>
+*> \endverbatim
+*> \verbatim
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, the elements on and above the diagonal of the array
+*> contain the min(m,n) by n upper trapezoidal matrix R (R is
+*> upper triangular if m >= n); the elements below the diagonal,
+*> with the array TAU, represent the unitary matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* product of elementary reflectors (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) COMPLEX array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) COMPLEX array, dimension (N)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, the elements on and above the diagonal of the array
+*> contain the min(m,n) by n upper trapezoidal matrix R (R is
+*> upper triangular if m >= n); the elements below the diagonal,
+*> with the array TAU, represent the unitary matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* product of elementary reflectors (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) COMPLEX array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) COMPLEX array, dimension (N)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The upper triangular block reflectors stored in compact form
*> as a sequence of upper triangular blocks. See below
*> for further details.
+*> \endverbatim
*>
*> \param[in] LDT
*> \verbatim
*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= NB.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] WORK
*> \verbatim
* ===============
*>\details \b Further \b Details
*> \verbatim
-*
*> The matrix V stores the elementary reflectors H(i) in the i-th column
*> below the diagonal. For example, if M=5 and N=3, the matrix V is
*>
*> reflector T; the elements below the diagonal are not used.
*> See below for further details.
*> \endverbatim
+*>
+*> \param[in] LDT
*> \verbatim
-*> LDT (intput) INTEGER
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= max(1,N).
*> \endverbatim
*>
*> reflector T; the elements below the diagonal are not used.
*> See below for further details.
*> \endverbatim
+*>
+*> \param[in] LDT
*> \verbatim
-*> LDT (intput) INTEGER
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= max(1,N).
*> \endverbatim
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* reflectors (see Further Details).
+*> A is COMPLEX array, dimension (LDA,N)
+*> On entry, the M-by-N matrix A.
+*> On exit,
+*> if m <= n, the upper triangle of the subarray
+*> A(1:m,n-m+1:n) contains the M-by-M upper triangular matrix R;
+*> if m >= n, the elements on and above the (m-n)-th subdiagonal
+*> contain the M-by-N upper trapezoidal matrix R;
+*> the remaining elements, with the array TAU, represent the
+*> unitary matrix Q as a product of min(m,n) elementary
+*> reflectors (see Further Details).
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> TAU (output) COMPLEX array, dimension (min(M,N))
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,M).
*> For optimum performance LWORK >= M*NB, where NB is
*> the optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
-*> \brief <b> CGESV computes the solution to system of linear equations A * X = B for GE matrices</b>
+*> \brief <b> CGESV computes the solution to system of linear equations A * X = B for GE matrices</b> (simple driver)
*
* =========== DOCUMENTATION ===========
*
*> \param[out] X
*> \verbatim
*> X is COMPLEX array, dimension (M)
+*> \endverbatim
+*>
*> \param[out] Y
*> \verbatim
*> Y is COMPLEX array, dimension (P)
-*> On exit, X and Y are the solutions of the GLM problem.
*> \endverbatim
+*> \verbatim
+*> On exit, X and Y are the solutions of the GLM problem.
*> \endverbatim
*>
*> \param[out] WORK
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> ILO and IHI mark the rows and columns of A which are to be
*> reduced. It is assumed that A is already upper triangular
*> in rows and columns 1:ILO-1 and IHI+1:N. ILO and IHI are
*> should be set to 1 and N respectively.
*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] A
*> \verbatim
*> The leading dimension of the array A. LDA >= max(1,N).
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[out] TAUA
*> \verbatim
-* represent the unitary matrix Q (see Further Details).
+*> TAUA is COMPLEX array, dimension (min(N,M))
+*> The scalar factors of the elementary reflectors which
+*> represent the unitary matrix Q (see Further Details).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX array, dimension (LDB,P)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX array, dimension (LDB,P)
*> On entry, the N-by-P matrix B.
*> On exit, if N <= P, the upper triangle of the subarray
*> B(1:N,P-N+1:P) contains the N-by-N upper triangular matrix T;
*> elements, with the array TAUB, represent the unitary
*> matrix Z as a product of elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,N).
+*> \endverbatim
*>
-*> TAUB (output) COMPLEX array, dimension (min(N,P))
+*> \param[out] TAUB
+*> \verbatim
+*> TAUB is COMPLEX array, dimension (min(N,P))
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix Z (see Further Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N,M,P).
*> For optimum performance LWORK >= max(N,M,P)*max(NB1,NB2,NB3),
*> where NB1 is the optimal blocksize for the QR factorization
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The leading dimension of the array A. LDA >= max(1,M).
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[out] TAUA
*> \verbatim
-* represent the unitary matrix Q (see Further Details).
+*> TAUA is COMPLEX array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors which
+*> represent the unitary matrix Q (see Further Details).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX array, dimension (LDB,N)
*> On entry, the P-by-N matrix B.
*> On exit, the elements on and above the diagonal of the array
*> contain the min(P,N)-by-N upper trapezoidal matrix T (T is
*> upper triangular if P >= N); the elements below the diagonal,
*> with the array TAUB, represent the unitary matrix Z as a
*> product of elementary reflectors (see Further Details).
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,P).
+*> \endverbatim
*>
-*> TAUB (output) COMPLEX array, dimension (min(P,N))
+*> \param[out] TAUB
+*> \verbatim
+*> TAUB is COMPLEX array, dimension (min(P,N))
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix Z (see Further Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N,M,P).
*> For optimum performance LWORK >= max(N,M,P)*max(NB1,NB2,NB3),
*> where NB1 is the optimal blocksize for the RQ factorization
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO=-i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> \param[out] K
*> \verbatim
*> K is INTEGER
+*> \endverbatim
+*>
*> \param[out] L
*> \verbatim
*> L is INTEGER
+*> \endverbatim
+*> \verbatim
*> On exit, K and L specify the dimension of the subblocks
*> described in Purpose.
*> K + L = effective numerical rank of (A**H,B**H)**H.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] A
*> \verbatim
*> \param[out] ALPHA
*> \verbatim
*> ALPHA is REAL array, dimension (N)
+*> \endverbatim
+*>
*> \param[out] BETA
*> \verbatim
*> BETA is REAL array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> On exit, ALPHA and BETA contain the generalized singular
*> value pairs of A and B;
*> ALPHA(1:K) = 1,
*> ALPHA(K+1:K+L) = C,
*> BETA(K+1:K+L) = S,
*> or if M-K-L < 0,
-*> ALPHA(K+1:M)= C, ALPHA(M+1:K+L)= 0
-*> BETA(K+1:M) = S, BETA(M+1:K+L) = 1
+*> ALPHA(K+1:M)=C, ALPHA(M+1:K+L)=0
+*> BETA(K+1:M) =S, BETA(M+1:K+L) =1
*> and
*> ALPHA(K+L+1:N) = 0
*> BETA(K+L+1:N) = 0
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] U
*> \verbatim
*> \param[in] TOLA
*> \verbatim
*> TOLA is REAL
+*> \endverbatim
+*>
*> \param[in] TOLB
*> \verbatim
*> TOLB is REAL
+*> \endverbatim
+*> \verbatim
*> TOLA and TOLB are the thresholds to determine the effective
*> numerical rank of matrix B and a subblock of A. Generally,
*> they are set to
*> The size of TOLA and TOLB may affect the size of backward
*> errors of the decomposition.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] K
*> \verbatim
*> K is INTEGER
+*> \endverbatim
+*>
*> \param[out] L
*> \verbatim
*> L is INTEGER
+*> \endverbatim
+*> \verbatim
*> On exit, K and L specify the dimension of the subblocks
*> described in Purpose section.
*> K + L = effective numerical rank of (A**H,B**H)**H.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] U
*> \verbatim
*> \param[in] VL
*> \verbatim
*> VL is REAL
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is REAL
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
* Arguments
* =========
*
+*> \param[in] UPLO
+*> \verbatim
+*> UPLO is CHARACTER*1
+*> = 'U': Upper triangles of A and B are stored;
+*> = 'L': Lower triangles of A and B are stored.
+*> \endverbatim
+*>
*> \param[in] N
*> \verbatim
*> N is INTEGER
*> Absolute value of largest matrix element. If AMAX is very
*> close to overflow or very close to underflow, the matrix
*> should be scaled.
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (3*N)
+*> \endverbatim
+*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
*> < 0: if INFO = -i, the i-th argument had an illegal value
*> > 0: if INFO = i, the i-th diagonal element is nonpositive.
*> \endverbatim
-*> \endverbatim
*>
*
* Authors
*> = 'V': all eigenvalues in the half-open interval (VL,VU]
*> will be found.
*> = 'I': the IL-th through IU-th eigenvalues will be found.
+*> \endverbatim
+*>
*> \param[in] UPLO
*> \verbatim
*> UPLO is CHARACTER*1
*> = 'U': Upper triangles of A and B are stored;
*> = 'L': Lower triangles of A and B are stored.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] N
*> \verbatim
*> upper triangular part of the matrix A. If UPLO = 'L',
*> the leading N-by-N lower triangular part of A contains
*> the lower triangular part of the matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the lower triangle (if UPLO='L') or the upper
*> triangle (if UPLO='U') of A, including the diagonal, is
*> destroyed.
*> upper triangular part of the matrix B. If UPLO = 'L',
*> the leading N-by-N lower triangular part of B contains
*> the lower triangular part of the matrix B.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO <= N, the part of B containing the matrix is
*> overwritten by the triangular factor U or L from the Cholesky
*> factorization B = U**H*U or B = L*L**H.
*> \param[in] VL
*> \verbatim
*> VL is REAL
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is REAL
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
*> An approximate eigenvalue is accepted as converged
*> when it is determined to lie in an interval [a,b]
*> of width less than or equal to
-*> \endverbatim
-*> \verbatim
+*>
*> ABSTOL + EPS * max( |a|,|b| ) ,
-*> \endverbatim
-*> \verbatim
+*>
*> where EPS is the machine precision. If ABSTOL is less than
*> or equal to zero, then EPS*|T| will be used in its place,
*> where |T| is the 1-norm of the tridiagonal matrix obtained
*> by reducing C to tridiagonal form, where C is the symmetric
*> matrix of the standard symmetric problem to which the
*> generalized problem is transformed.
-*> \endverbatim
-*> \verbatim
+*>
*> Eigenvalues will be computed most accurately when ABSTOL is
*> set to twice the underflow threshold 2*SLAMCH('S'), not zero.
*> If this routine returns with INFO>0, indicating that some
*> The eigenvectors are normalized as follows:
*> if ITYPE = 1 or 2, Z**T*B*Z = I;
*> if ITYPE = 3, Z**T*inv(B)*Z = I.
-*> \endverbatim
-*> \verbatim
+*>
*> If an eigenvector fails to converge, then that column of Z
*> contains the latest approximation to the eigenvector, and the
*> index of the eigenvector is returned in IFAIL.
*> copied to AF and factored.
*> \endverbatim
*>
+*> \param[in] UPLO
+*> \verbatim
+*> UPLO is CHARACTER*1
+*> = 'U': Upper triangle of A is stored;
+*> = 'L': Lower triangle of A is stored.
+*> \endverbatim
+*>
*> \param[in] N
*> \verbatim
*> N is INTEGER
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> 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 UPLO = 'U', the diagonal and first superdiagonal
+*> of A are overwritten by the corresponding elements of the
+*> tridiagonal matrix T, and the elements above the first
+*> superdiagonal, with the array TAU, represent the unitary
+*> matrix Q as a product of elementary reflectors; if UPLO
+*> = 'L', the diagonal and first subdiagonal of A are over-
+*> written by the corresponding elements of the tridiagonal
+*> matrix T, and the elements below the first subdiagonal, with
+*> the array TAU, represent the unitary matrix Q as a product
+*> of elementary reflectors. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
+*>
+*> \param[out] D
+*> \verbatim
+*> D is REAL array, dimension (N)
+*> The diagonal elements of the tridiagonal matrix T:
+*> D(i) = A(i,i).
+*> \endverbatim
+*>
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (N-1)
+*> The off-diagonal elements of the tridiagonal matrix T:
+*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (N-1)
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* of elementary reflectors. See Further Details.
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
-*>
-*> D (output) REAL array, dimension (N)
-*> The diagonal elements of the tridiagonal matrix T:
-*> D(i) = A(i,i).
-*>
-*> E (output) REAL array, dimension (N-1)
-*> The off-diagonal elements of the tridiagonal matrix T:
-*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
-*>
-*> TAU (output) COMPLEX array, dimension (N-1)
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value.
-*>
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexHEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* of elementary reflectors. See Further Details.
+*> 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 UPLO = 'U', the diagonal and first superdiagonal
+*> of A are overwritten by the corresponding elements of the
+*> tridiagonal matrix T, and the elements above the first
+*> superdiagonal, with the array TAU, represent the unitary
+*> matrix Q as a product of elementary reflectors; if UPLO
+*> = 'L', the diagonal and first subdiagonal of A are over-
+*> written by the corresponding elements of the tridiagonal
+*> matrix T, and the elements below the first subdiagonal, with
+*> the array TAU, represent the unitary matrix Q as a product
+*> of elementary reflectors. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> D (output) REAL array, dimension (N)
+*> \param[out] D
+*> \verbatim
+*> D is REAL array, dimension (N)
*> The diagonal elements of the tridiagonal matrix T:
*> D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) REAL array, dimension (N-1)
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (N-1)
*> The off-diagonal elements of the tridiagonal matrix T:
*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
+*> \endverbatim
*>
-*> TAU (output) COMPLEX array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (N-1)
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= 1.
*> For optimum performance LWORK >= N*NB, where NB is the
*> optimal blocksize.
-*>
+*> \endverbatim
+*> \verbatim
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexHEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> \param[in] VL
*> \verbatim
*> VL is REAL
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is REAL
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] AP
+*> \verbatim
+*> AP is COMPLEX array, dimension (N*(N+1)/2)
+*> On entry, the upper or lower triangle of the Hermitian matrix
+*> A, packed columnwise in a linear array. The j-th column of A
+*> is stored in the array AP as follows:
+*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
+*> if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.
+*> On exit, if UPLO = 'U', the diagonal and first superdiagonal
+*> of A are overwritten by the corresponding elements of the
+*> tridiagonal matrix T, and the elements above the first
+*> superdiagonal, with the array TAU, represent the unitary
+*> matrix Q as a product of elementary reflectors; if UPLO
+*> = 'L', the diagonal and first subdiagonal of A are over-
+*> written by the corresponding elements of the tridiagonal
+*> matrix T, and the elements below the first subdiagonal, with
+*> the array TAU, represent the unitary matrix Q as a product
+*> of elementary reflectors. See Further Details.
+*> \endverbatim
+*>
+*> \param[out] D
+*> \verbatim
+*> D is REAL array, dimension (N)
+*> The diagonal elements of the tridiagonal matrix T:
+*> D(i) = A(i,i).
+*> \endverbatim
+*>
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (N-1)
+*> The off-diagonal elements of the tridiagonal matrix T:
+*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (N-1)
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* of elementary reflectors. See Further Details.
-*>
-*> D (output) REAL array, dimension (N)
-*> The diagonal elements of the tridiagonal matrix T:
-*> D(i) = A(i,i).
-*>
-*> E (output) REAL array, dimension (N-1)
-*> The off-diagonal elements of the tridiagonal matrix T:
-*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
-*>
-*> TAU (output) COMPLEX array, dimension (N-1)
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> It is assumed that H is already upper triangular in rows
*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally
-*> set by a previous call to CGEBAL, and then passed to CGEHRD
+*> set by a previous call to CGEBAL, and then passed to ZGEHRD
*> when the matrix output by CGEBAL is reduced to Hessenberg
*> form. Otherwise ILO and IHI should be set to 1 and N
*> respectively. If N.GT.0, then 1.LE.ILO.LE.IHI.LE.N.
*> If N = 0, then ILO = 1 and IHI = 0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] H
*> \verbatim
*>
*> \param[in] AB
*> \verbatim
-*> AB is COMPLEX array, dimension (LDA,N)
-*> On entry, the N-by-N matrix A.
+*> AB is COMPLEX array, dimension (LDAB,N)
+*> On entry, the N-by-N matrix AB.
*> \endverbatim
*>
*> \param[in] LDAB
*> \verbatim
*> LDAB is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
+*> The leading dimension of the array AB. LDAB >= max(1,N).
*> \endverbatim
*>
*> \param[in] AFB
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> normwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Normwise relative error in the ith solution vector:
*> max_j (abs(XTRUE(j,i) - X(j,i)))
*> ------------------------------
*> max_j abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the type of error information as described
*> below. There currently are up to three pieces of information
*> returned.
-*> \endverbatim
-*> \verbatim
+*>
*> The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
+*>
*> The second index in ERR_BNDS_NORM(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated normwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> appropriately scaled matrix Z.
*> Let Z = S*A, where S scales each row by a power of the
*> radix so all absolute row sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> componentwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Componentwise relative error in the ith solution vector:
*> abs(XTRUE(j,i) - X(j,i))
*> max_j ----------------------
*> abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the right-hand side i (on which the
*> componentwise relative error depends), and the type of error
*> information as described below. There currently are up to three
*> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
*> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
*> the first (:,N_ERR_BNDS) entries are returned.
-*> \endverbatim
-*> \verbatim
+*>
*> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
+*>
*> The second index in ERR_BNDS_COMP(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated componentwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> current right-hand side and S scales each row of
*> A*diag(x) by a power of the radix so all absolute row
*> sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> and provides error bounds and backward error estimates for the solution.
*> This subroutine is called by CGERFSX to perform iterative refinement.
*> In addition to normwise error bound, the code provides maximum
-*> componentwise error bound if possible. See comments for ERR_BNDS_NORM
-*> and ERR_BNDS_COMP for details of the error bounds. Note that this
+*> componentwise error bound if possible. See comments for ERRS_N
+*> and ERRS_C for details of the error bounds. Note that this
*> subroutine is only resonsible for setting the second fields of
-*> ERR_BNDS_NORM and ERR_BNDS_COMP.
+*> ERRS_N and ERRS_C.
*>
*>\endverbatim
*
*> \param[in] N_NORMS
*> \verbatim
*> N_NORMS is INTEGER
-*> Determines which error bounds to return (see ERR_BNDS_NORM
-*> and ERR_BNDS_COMP).
+*> Determines which error bounds to return (see ERRS_N
+*> and ERRS_C).
*> If N_NORMS >= 1 return normwise error bounds.
*> If N_NORMS >= 2 return componentwise error bounds.
*> \endverbatim
*>
-*> \param[in,out] ERR_BNDS_NORM
+*> \param[in,out] ERRS_N
*> \verbatim
-*> ERR_BNDS_NORM is REAL array, dimension (NRHS, N_ERR_BNDS)
+*> ERRS_N is REAL array, dimension (NRHS, N_ERR_BNDS)
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> normwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Normwise relative error in the ith solution vector:
*> max_j (abs(XTRUE(j,i) - X(j,i)))
*> ------------------------------
*> max_j abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the type of error information as described
*> below. There currently are up to three pieces of information
*> returned.
-*> \endverbatim
-*> \verbatim
-*> The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+*>
+*> The first index in ERRS_N(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
-*> The second index in ERR_BNDS_NORM(:,err) contains the following
+*>
+*> The second index in ERRS_N(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated normwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> appropriately scaled matrix Z.
*> Let Z = S*A, where S scales each row by a power of the
*> radix so all absolute row sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*>
-*> \param[in,out] ERR_BNDS_COMP
+*> \param[in,out] ERRS_C
*> \verbatim
-*> ERR_BNDS_COMP is REAL array, dimension (NRHS, N_ERR_BNDS)
+*> ERRS_C is REAL array, dimension (NRHS, N_ERR_BNDS)
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> componentwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Componentwise relative error in the ith solution vector:
*> abs(XTRUE(j,i) - X(j,i))
*> max_j ----------------------
*> abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the right-hand side i (on which the
*> componentwise relative error depends), and the type of error
*> information as described below. There currently are up to three
*> pieces of information returned for each right-hand side. If
*> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
-*> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+*> ERRS_C is not accessed. If N_ERR_BNDS .LT. 3, then at most
*> the first (:,N_ERR_BNDS) entries are returned.
-*> \endverbatim
-*> \verbatim
-*> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+*>
+*> The first index in ERRS_C(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
-*> The second index in ERR_BNDS_COMP(:,err) contains the following
+*>
+*> The second index in ERRS_C(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated componentwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> current right-hand side and S scales each row of
*> A*diag(x) by a power of the radix so all absolute row
*> sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> permit convergence using approximate factorizations or
*> factorizations other than LU. If the factorization uses a
*> technique other than Gaussian elimination, the guarantees in
-*> ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*> ERRS_N and ERRS_C may no longer be trustworthy.
*> \endverbatim
*>
*> \param[in] RTHRESH
*> column INFO is exactly 0.
*> \endverbatim
*>
-*> \param[in] NCOLS
-*> \verbatim
-*> NCOLS is INTEGER
-*> The number of columns of the matrix A. NCOLS >= 0.
-*> \endverbatim
-*>
*> \param[in] A
*> \verbatim
*> A is COMPLEX array, dimension (LDA,N)
*> The denominator in the relative backward error formula above, i.e.,
*> the matrix abs(op(A_s))*abs(Y) + abs(B_s). The matrices A, Y, and B
*> are from iterative refinement (see cla_gerfsx_extended.f).
+*> \endverbatim
*>
*> \param[out] BERR
*> \verbatim
*> BERR is COMPLEX array, dimension (NRHS)
*> The componentwise relative backward error from the formula above.
*> \endverbatim
-*> \endverbatim
*>
*
* Authors
*> column INFO is exactly 0.
*> \endverbatim
*>
-*> \param[in] NCOLS
-*> \verbatim
-*> NCOLS is INTEGER
-*> The number of columns of the matrix A. NCOLS >= 0.
-*> \endverbatim
-*>
*> \param[in] A
*> \verbatim
*> A is COMPLEX array, dimension (LDA,N)
*> The number of leading rows and columns of A to be reduced.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is COMPLEX array, dimension (LDA,N)
+*> On entry, the m by n general matrix to be reduced.
+*> On exit, the first NB rows and columns of the matrix are
+*> overwritten; the rest of the array is unchanged.
+*> If m >= n, elements on and below the diagonal in the first NB
+*> columns, with the array TAUQ, represent the unitary
+*> matrix Q as a product of elementary reflectors; and
+*> elements above the diagonal in the first NB rows, with the
+*> array TAUP, represent the unitary matrix P as a product
+*> of elementary reflectors.
+*> If m < n, elements below the diagonal in the first NB
+*> columns, with the array TAUQ, represent the unitary
+*> matrix Q as a product of elementary reflectors, and
+*> elements on and above the diagonal in the first NB rows,
+*> with the array TAUP, represent the unitary matrix P as
+*> a product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> D (output) REAL array, dimension (NB)
+*> \param[out] D
+*> \verbatim
+*> D is REAL array, dimension (NB)
*> The diagonal elements of the first NB rows and columns of
*> the reduced matrix. D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) REAL array, dimension (NB)
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (NB)
*> The off-diagonal elements of the first NB rows and columns of
*> the reduced matrix.
+*> \endverbatim
*>
-*> TAUQ (output) COMPLEX array dimension (NB)
+*> \param[out] TAUQ
+*> \verbatim
+*> TAUQ is COMPLEX array dimension (NB)
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix Q. See Further Details.
+*> \endverbatim
*>
-*> TAUP (output) COMPLEX array, dimension (NB)
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is COMPLEX array, dimension (NB)
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix P. See Further Details.
+*> \endverbatim
*>
-*> X (output) COMPLEX array, dimension (LDX,NB)
+*> \param[out] X
+*> \verbatim
+*> X is COMPLEX array, dimension (LDX,NB)
*> The m-by-nb matrix X required to update the unreduced part
*> of A.
+*> \endverbatim
*>
-*> LDX (input) INTEGER
+*> \param[in] LDX
+*> \verbatim
+*> LDX is INTEGER
*> The leading dimension of the array X. LDX >= max(1,M).
+*> \endverbatim
*>
-*> Y (output) COMPLEX array, dimension (LDY,NB)
+*> \param[out] Y
+*> \verbatim
+*> Y is COMPLEX array, dimension (LDY,NB)
*> The n-by-nb matrix Y required to update the unreduced part
*> of A.
+*> \endverbatim
*>
-*> LDY (input) INTEGER
+*> \param[in] LDY
+*> \verbatim
+*> LDY is INTEGER
*> The leading dimension of the array Y. LDY >= max(1,N).
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrices Q and P are represented as products of elementary
*> reflectors:
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> Contributed by Nick Higham, University of Manchester.
*> Originally named CONEST, dated March 16, 1988.
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> Contributed by Nick Higham, University of Manchester.
*> Originally named CONEST, dated March 16, 1988.
*> \verbatim
*> X is COMPLEX array, dimension (LDX,NRHS)
*> The N by NRHS matrix X.
+*> \endverbatim
+*>
*> \param[in] LDX
*> \verbatim
*> LDX is INTEGER
*> The leading dimension of the array X. LDX >= max(N,1).
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] BETA
*> \verbatim
*> The number of columns to be reduced.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX array, dimension (LDA,N-K+1)
+*> On entry, the n-by-(n-k+1) general matrix A.
+*> On exit, the elements on and above the k-th subdiagonal in
+*> the first NB columns are overwritten with the corresponding
+*> elements of the reduced matrix; the elements below the k-th
+*> subdiagonal, with the array TAU, represent the matrix Q as a
+*> product of elementary reflectors. The other columns of A are
+*> unchanged. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (NB)
+*> The scalar factors of the elementary reflectors. See Further
+*> Details.
+*> \endverbatim
+*>
+*> \param[out] T
+*> \verbatim
+*> T is COMPLEX array, dimension (LDT,NB)
+*> The upper triangular matrix T.
+*> \endverbatim
+*>
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
+*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
+*>
+*> \param[out] Y
+*> \verbatim
+*> Y is COMPLEX array, dimension (LDY,NB)
+*> The n-by-nb matrix Y.
+*> \endverbatim
+*>
+*> \param[in] LDY
+*> \verbatim
+*> LDY is INTEGER
+*> The leading dimension of the array Y. LDY >= N.
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* unchanged. See Further Details.
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
-*>
-*> TAU (output) COMPLEX array, dimension (NB)
-*> The scalar factors of the elementary reflectors. See Further
-*> Details.
-*>
-*> T (output) COMPLEX array, dimension (LDT,NB)
-*> The upper triangular matrix T.
-*>
-*> LDT (input) INTEGER
-*> The leading dimension of the array T. LDT >= NB.
-*>
-*> Y (output) COMPLEX array, dimension (LDY,NB)
-*> The n-by-nb matrix Y.
-*>
-*> LDY (input) INTEGER
-*> The leading dimension of the array Y. LDY >= N.
-*>
*>
*> The matrix Q is represented as a product of nb elementary reflectors
*>
*> The number of columns to be reduced.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX array, dimension (LDA,N-K+1)
+*> On entry, the n-by-(n-k+1) general matrix A.
+*> On exit, the elements on and above the k-th subdiagonal in
+*> the first NB columns are overwritten with the corresponding
+*> elements of the reduced matrix; the elements below the k-th
+*> subdiagonal, with the array TAU, represent the matrix Q as a
+*> product of elementary reflectors. The other columns of A are
+*> unchanged. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (NB)
+*> The scalar factors of the elementary reflectors. See Further
+*> Details.
+*> \endverbatim
+*>
+*> \param[out] T
+*> \verbatim
+*> T is COMPLEX array, dimension (LDT,NB)
+*> The upper triangular matrix T.
+*> \endverbatim
+*>
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
+*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
+*>
+*> \param[out] Y
+*> \verbatim
+*> Y is COMPLEX array, dimension (LDY,NB)
+*> The n-by-nb matrix Y.
+*> \endverbatim
+*>
+*> \param[in] LDY
+*> \verbatim
+*> LDY is INTEGER
+*> The leading dimension of the array Y. LDY >= max(1,N).
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* unchanged. See Further Details.
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
-*>
-*> TAU (output) COMPLEX array, dimension (NB)
-*> The scalar factors of the elementary reflectors. See Further
-*> Details.
-*>
-*> T (output) COMPLEX array, dimension (LDT,NB)
-*> The upper triangular matrix T.
-*>
-*> LDT (input) INTEGER
-*> The leading dimension of the array T. LDT >= NB.
-*>
-*> Y (output) COMPLEX array, dimension (LDY,NB)
-*> The n-by-nb matrix Y.
-*>
-*> LDY (input) INTEGER
-*> The leading dimension of the array Y. LDY >= max(1,N).
-*>
*>
*> The matrix Q is represented as a product of nb elementary reflectors
*>
*> form returned in H, with W(i) = H(i,i).
*> \endverbatim
*>
+*> \param[in] ILOZ
+*> \verbatim
+*> ILOZ is INTEGER
+*> \endverbatim
+*>
+*> \param[in] IHIZ
+*> \verbatim
+*> IHIZ is INTEGER
+*> Specify the rows of Z to which transformations must be
+*> applied if WANTZ is .TRUE..
+*> 1 .LE. ILOZ .LE. ILO; IHI .LE. IHIZ .LE. N.
+*> \endverbatim
+*>
*> \param[in,out] Z
*> \verbatim
*> Z is COMPLEX array, dimension (LDZ,IHI)
*> the eigenvalues. Elements 1:ilo-1 and i+1:n of WR
*> and WI contain those eigenvalues which have been
*> successfully computed. (Failures are rare.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANT is .FALSE., then on exit,
*> the remaining unconverged eigenvalues are the eigen-
*> values of the upper Hessenberg matrix rows and
*> columns ILO through INFO of the final, output
*> value of H.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (*) (initial value of H)*U = U*(final value of H)
-*> \endverbatim
-*> \verbatim
+*>
*> where U is a unitary matrix. The final
*> value of H is upper Hessenberg and triangular in
*> rows and columns INFO+1 through IHI.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (final value of Z(ILO:IHI,ILOZ:IHIZ)
*> = (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U
-*> \endverbatim
-*> \verbatim
+*>
*> where U is the unitary matrix in (*) (regard-
*> less of the value of WANTT.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .FALSE., then Z is not
*> accessed.
*> \endverbatim
*> \verbatim
*> S1 is COMPLEX
*> \endverbatim
+*>
+*> \param[in] S2
+*> \verbatim
+*> S2 is COMPLEX
+*> \endverbatim
*> \verbatim
-*> S2 S1 and S2 are the shifts defining K in (*) above.
+*> S1 and S2 are the shifts defining K in (*) above.
*> \endverbatim
*>
*> \param[out] V
*> form returned in H, with W(i) = H(i,i).
*> \endverbatim
*>
+*> \param[in] ILOZ
+*> \verbatim
+*> ILOZ is INTEGER
+*> \endverbatim
+*>
+*> \param[in] IHIZ
+*> \verbatim
+*> IHIZ is INTEGER
+*> Specify the rows of Z to which transformations must be
+*> applied if WANTZ is .TRUE..
+*> 1 .LE. ILOZ .LE. ILO; IHI .LE. IHIZ .LE. N.
+*> \endverbatim
+*>
*> \param[in,out] Z
*> \verbatim
*> Z is COMPLEX array, dimension (LDZ,IHI)
*>
*> \param[out] INFO
*> \verbatim
+*> \verbatim
*> INFO is INTEGER
*> = 0: successful exit
*> .GT. 0: if INFO = i, CLAQR4 failed to compute all of
*> the eigenvalues. Elements 1:ilo-1 and i+1:n of WR
*> and WI contain those eigenvalues which have been
*> successfully computed. (Failures are rare.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANT is .FALSE., then on exit,
*> the remaining unconverged eigenvalues are the eigen-
*> values of the upper Hessenberg matrix rows and
*> columns ILO through INFO of the final, output
*> value of H.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (*) (initial value of H)*U = U*(final value of H)
-*> \endverbatim
-*> \verbatim
+*>
*> where U is a unitary matrix. The final
*> value of H is upper Hessenberg and triangular in
*> rows and columns INFO+1 through IHI.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (final value of Z(ILO:IHI,ILOZ:IHIZ)
*> = (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U
-*> \endverbatim
-*> \verbatim
+*>
*> where U is the unitary matrix in (*) (regard-
*> less of the value of WANTT.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .FALSE., then Z is not
*> accessed.
*> \endverbatim
*> reflectors whose product defines the block reflector).
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] V
*> \verbatim
-* The matrix V. See Further Details.
+*> V is COMPLEX array, dimension
+*> (LDV,K) if STOREV = 'C'
+*> (LDV,M) if STOREV = 'R' and SIDE = 'L'
+*> (LDV,N) if STOREV = 'R' and SIDE = 'R'
+*> The matrix V. See Further Details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
*> if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
*> if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> T (input) COMPLEX array, dimension (LDT,K)
+*> \param[in] T
+*> \verbatim
+*> T is COMPLEX array, dimension (LDT,K)
*> The triangular K-by-K matrix T in the representation of the
*> block reflector.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= K.
+*> \endverbatim
*>
-*> C (input/output) COMPLEX array, dimension (LDC,N)
+*> \param[in,out] C
+*> \verbatim
+*> C is COMPLEX array, dimension (LDC,N)
*> On entry, the M-by-N matrix C.
*> On exit, C is overwritten by H*C or H**H*C or C*H or C*H**H.
+*> \endverbatim
*>
-*> LDC (input) INTEGER
+*> \param[in] LDC
+*> \verbatim
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,M).
+*> \endverbatim
*>
-*> WORK (workspace) COMPLEX array, dimension (LDWORK,K)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (LDWORK,K)
+*> \endverbatim
*>
-*> LDWORK (input) INTEGER
+*> \param[in] LDWORK
+*> \verbatim
+*> LDWORK is INTEGER
*> The leading dimension of the array WORK.
*> If SIDE = 'L', LDWORK >= max(1,N);
*> if SIDE = 'R', LDWORK >= max(1,M).
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The shape of the matrix V and the storage of the vectors which define
*> the H(i) is best illustrated by the following example with n = 5 and
*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] STOREV
*> \verbatim
-* reflectors are stored (see also Further Details):
+*> STOREV is CHARACTER*1
+*> Specifies how the vectors which define the elementary
+*> reflectors are stored (see also Further Details):
*> = 'C': columnwise
*> = 'R': rowwise
+*> \endverbatim
*>
-*> N (input) INTEGER
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
*> The order of the block reflector H. N >= 0.
+*> \endverbatim
*>
-*> K (input) INTEGER
+*> \param[in] K
+*> \verbatim
+*> K is INTEGER
*> The order of the triangular factor T (= the number of
*> elementary reflectors). K >= 1.
+*> \endverbatim
*>
-*> V (input/output) COMPLEX array, dimension
+*> \param[in,out] V
+*> \verbatim
+*> V is COMPLEX array, dimension
*> (LDV,K) if STOREV = 'C'
*> (LDV,N) if STOREV = 'R'
*> The matrix V. See further details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> TAU (input) COMPLEX array, dimension (K)
+*> \param[in] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (K)
*> TAU(i) must contain the scalar factor of the elementary
*> reflector H(i).
+*> \endverbatim
*>
-*> T (output) COMPLEX array, dimension (LDT,K)
+*> \param[out] T
+*> \verbatim
+*> T is COMPLEX array, dimension (LDT,K)
*> The k by k triangular factor T of the block reflector.
*> If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
*> lower triangular. The rest of the array is not used.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= K.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The shape of the matrix V and the storage of the vectors which define
*> the H(i) is best illustrated by the following example with n = 5 and
*> is stored the corresponding shift as given by SLARRE.
*> On exit, L is overwritten.
*> \endverbatim
+*>
+*> \param[in] PIVMIN
*> \verbatim
-*> PIVMIN (in) DOUBLE PRECISION
+*> PIVMIN is REAL
*> The minimum pivot allowed in the Sturm sequence.
*> \endverbatim
*>
*> \verbatim
*> INFO is INTEGER
*> = 0: successful exit
-*> \endverbatim
-*> \verbatim
+*>
*> > 0: A problem occured in CLARRV.
*> < 0: One of the called subroutines signaled an internal problem.
*> Needs inspection of the corresponding parameter IINFO
*> for further information.
-*> \endverbatim
-*> \verbatim
+*>
*> =-1: Problem in SLARRB when refining a child's eigenvalues.
*> =-2: Problem in SLARRF when computing the RRR of a child.
*> When a child is inside a tight cluster, it can be difficult
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> 3-5-96 - Modified with a new algorithm by W. Kahan and J. Demmel
*>
*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] STOREV
*> \verbatim
-* reflectors are stored (see also Further Details):
+*> STOREV is CHARACTER*1
+*> Specifies how the vectors which define the elementary
+*> reflectors are stored (see also Further Details):
*> = 'C': columnwise (not supported yet)
*> = 'R': rowwise
+*> \endverbatim
*>
-*> N (input) INTEGER
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
*> The order of the block reflector H. N >= 0.
+*> \endverbatim
*>
-*> K (input) INTEGER
+*> \param[in] K
+*> \verbatim
+*> K is INTEGER
*> The order of the triangular factor T (= the number of
*> elementary reflectors). K >= 1.
+*> \endverbatim
*>
-*> V (input/output) COMPLEX array, dimension
+*> \param[in,out] V
+*> \verbatim
+*> V is COMPLEX array, dimension
*> (LDV,K) if STOREV = 'C'
*> (LDV,N) if STOREV = 'R'
*> The matrix V. See further details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> TAU (input) COMPLEX array, dimension (K)
+*> \param[in] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (K)
*> TAU(i) must contain the scalar factor of the elementary
*> reflector H(i).
+*> \endverbatim
*>
-*> T (output) COMPLEX array, dimension (LDT,K)
+*> \param[out] T
+*> \verbatim
+*> T is COMPLEX array, dimension (LDT,K)
*> The k by k triangular factor T of the block reflector.
*> If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
*> lower triangular. The rest of the array is not used.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= K.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> Based on contributions by
*> A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville, USA
*> \param[in] CFROM
*> \verbatim
*> CFROM is REAL
+*> \endverbatim
+*>
*> \param[in] CTO
*> \verbatim
*> CTO is REAL
+*> \endverbatim
+*> \verbatim
*> The matrix A is multiplied by CTO/CFROM. A(I,J) is computed
*> without over/underflow if the final result CTO*A(I,J)/CFROM
*> can be represented without over/underflow. CFROM must be
*> nonzero.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] M
*> \verbatim
*> The number of rows and columns to be reduced.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> 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 UPLO = 'U', the last NB columns have been reduced to
+*> tridiagonal form, with the diagonal elements overwriting
+*> the diagonal elements of A; the elements above the diagonal
+*> with the array TAU, represent the unitary matrix Q as a
+*> product of elementary reflectors;
+*> if UPLO = 'L', the first NB columns have been reduced to
+*> tridiagonal form, with the diagonal elements overwriting
+*> the diagonal elements of A; the elements below the diagonal
+*> with the array TAU, represent the unitary matrix Q as a
+*> product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> E (output) REAL array, dimension (N-1)
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (N-1)
*> If UPLO = 'U', E(n-nb:n-1) contains the superdiagonal
*> elements of the last NB columns of the reduced matrix;
*> if UPLO = 'L', E(1:nb) contains the subdiagonal elements of
*> the first NB columns of the reduced matrix.
+*> \endverbatim
*>
-*> TAU (output) COMPLEX array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (N-1)
*> The scalar factors of the elementary reflectors, stored in
*> TAU(n-nb:n-1) if UPLO = 'U', and in TAU(1:nb) if UPLO = 'L'.
*> See Further Details.
+*> \endverbatim
*>
-*> W (output) COMPLEX array, dimension (LDW,NB)
+*> \param[out] W
+*> \verbatim
+*> W is COMPLEX array, dimension (LDW,NB)
*> The n-by-nb matrix W required to update the unreduced part
*> of A.
+*> \endverbatim
*>
-*> LDW (input) INTEGER
+*> \param[in] LDW
+*> \verbatim
+*> LDW is INTEGER
*> The leading dimension of the array W. LDW >= max(1,N).
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> as follows:
*> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd).
+*>
+*> On exit, if INFO = 0, the factor S from the split Cholesky
+*> factorization A = S**H*S. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDAB
+*> \verbatim
+*> LDAB is INTEGER
+*> The leading dimension of the array AB. LDAB >= KD+1.
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> > 0: if INFO = i, the factorization could not be completed,
+*> because the updated element a(i,i) was negative; the
+*> matrix A is not positive definite.
*> \endverbatim
*>
*
* ===============
*>\details \b Further \b Details
*> \verbatim
-* factorization A = S**H*S. See Further Details.
-*>
-*> LDAB (input) INTEGER
-*> The leading dimension of the array AB. LDAB >= KD+1.
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> > 0: if INFO = i, the factorization could not be completed,
-*> because the updated element a(i,i) was negative; the
-*> matrix A is not positive definite.
-*>
*>
*> The band storage scheme is illustrated by the following example, when
*> N = 7, KD = 2:
*> \param[in] C
*> \verbatim
*> C is REAL
+*> \endverbatim
+*>
*> \param[in] S
*> \verbatim
*> S is COMPLEX
*> [ -conjg(S) C ]
*> where C*C + S*CONJG(S) = 1.0.
*> \endverbatim
-*> \endverbatim
*>
*
* Authors
*> \param[in] VL
*> \verbatim
*> VL is REAL
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is REAL
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
*> \param[in] VL
*> \verbatim
*> VL is REAL
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is REAL
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] M
*> \verbatim
*> WORK is COMPLEX array, dimension (N)
*> \endverbatim
*>
-*> \param[in] LWORK
-*> \verbatim
-*> LWORK is INTEGER
-*> The length of WORK. LWORK >=1.
-*> LWORK = N
-*> \endverbatim
-*> \verbatim
-*> If LWORK = -1, then a workspace query is assumed; the routine
-*> only calculates the optimal size of the WORK array, returns
-*> this value as the first entry of the WORK array, and no error
-*> message related to LWORK is issued by XERBLA.
-*> \endverbatim
-*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> Reference: Livne, O.E. and Golub, G.H., "Scaling by Binormalization",
*> Numerical Algorithms, vol. 35, no. 1, pp. 97-120, January 2004.
*> \param[out] ALPHA
*> \verbatim
*> ALPHA is COMPLEX array, dimension (N)
+*> \endverbatim
+*>
*> \param[out] BETA
*> \verbatim
*> BETA is COMPLEX array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> The diagonal elements of A and B, respectively,
*> when the pair (A,B) has been reduced to generalized Schur
*> form. ALPHA(i)/BETA(i) i=1,...,N are the generalized
*> eigenvalues.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] Q
*> \verbatim
*> \param[out] PL
*> \verbatim
*> PL is REAL
+*> \endverbatim
+*>
*> \param[out] PR
*> \verbatim
*> PR is REAL
+*> \endverbatim
+*> \verbatim
*> If IJOB = 1, 4 or 5, PL, PR are lower bounds on the
*> reciprocal of the norm of "projections" onto left and right
*> eigenspace with respect to the selected cluster.
*> If M = 0 or M = N, PL = PR = 1.
*> If IJOB = 0, 2 or 3 PL, PR are not referenced.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] DIF
*> \verbatim
*> The number of columns of the matrices A and B. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] K
*> \verbatim
-* See Further Details.
+*> K is INTEGER
+*> \endverbatim
*>
-*> A (input/output) COMPLEX array, dimension (LDA,N)
+*> \param[in] L
+*> \verbatim
+*> L is INTEGER
+*>
+*> K and L specify the subblocks in the input matrices A and B:
+*> A23 = A(K+1:MIN(K+L,M),N-L+1:N) and B13 = B(1:L,,N-L+1:N)
+*> of A and B, whose GSVD is going to be computed by CTGSJA.
+*> See Further Details.
+*> \endverbatim
+*>
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX array, dimension (LDA,N)
*> On entry, the M-by-N matrix A.
*> On exit, A(N-K+1:N,1:MIN(K+L,M) ) contains the triangular
*> matrix R or part of R. See Purpose for details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX array, dimension (LDB,N)
*> On entry, the P-by-N matrix B.
*> On exit, if necessary, B(M-K+1:L,N+M-K-L+1:N) contains
*> a part of R. See Purpose for details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,P).
+*> \endverbatim
+*>
+*> \param[in] TOLA
+*> \verbatim
+*> TOLA is REAL
+*> \endverbatim
+*>
+*> \param[in] TOLB
+*> \verbatim
+*> TOLB is REAL
*>
-*> TOLA (input) REAL
-*> TOLB (input) REAL
*> TOLA and TOLB are the convergence criteria for the Jacobi-
*> Kogbetliantz iteration procedure. Generally, they are the
*> same as used in the preprocessing step, say
*> TOLA = MAX(M,N)*norm(A)*MACHEPS,
*> TOLB = MAX(P,N)*norm(B)*MACHEPS.
+*> \endverbatim
+*>
+*> \param[out] ALPHA
+*> \verbatim
+*> ALPHA is REAL array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] BETA
+*> \verbatim
+*> BETA is REAL array, dimension (N)
*>
-*> ALPHA (output) REAL array, dimension (N)
-*> BETA (output) REAL array, dimension (N)
*> On exit, ALPHA and BETA contain the generalized singular
*> value pairs of A and B;
*> ALPHA(1:K) = 1,
*> Furthermore, if K+L < N,
*> ALPHA(K+L+1:N) = 0
*> BETA(K+L+1:N) = 0.
+*> \endverbatim
*>
-*> U (input/output) COMPLEX array, dimension (LDU,M)
+*> \param[in,out] U
+*> \verbatim
+*> U is COMPLEX array, dimension (LDU,M)
*> On entry, if JOBU = 'U', U must contain a matrix U1 (usually
*> the unitary matrix returned by CGGSVP).
*> On exit,
*> if JOBU = 'I', U contains the unitary matrix U;
*> if JOBU = 'U', U contains the product U1*U.
*> If JOBU = 'N', U is not referenced.
+*> \endverbatim
*>
-*> LDU (input) INTEGER
+*> \param[in] LDU
+*> \verbatim
+*> LDU is INTEGER
*> The leading dimension of the array U. LDU >= max(1,M) if
*> JOBU = 'U'; LDU >= 1 otherwise.
+*> \endverbatim
*>
-*> V (input/output) COMPLEX array, dimension (LDV,P)
+*> \param[in,out] V
+*> \verbatim
+*> V is COMPLEX array, dimension (LDV,P)
*> On entry, if JOBV = 'V', V must contain a matrix V1 (usually
*> the unitary matrix returned by CGGSVP).
*> On exit,
*> if JOBV = 'I', V contains the unitary matrix V;
*> if JOBV = 'V', V contains the product V1*V.
*> If JOBV = 'N', V is not referenced.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V. LDV >= max(1,P) if
*> JOBV = 'V'; LDV >= 1 otherwise.
+*> \endverbatim
*>
-*> Q (input/output) COMPLEX array, dimension (LDQ,N)
+*> \param[in,out] Q
+*> \verbatim
+*> Q is COMPLEX array, dimension (LDQ,N)
*> On entry, if JOBQ = 'Q', Q must contain a matrix Q1 (usually
*> the unitary matrix returned by CGGSVP).
*> On exit,
*> if JOBQ = 'I', Q contains the unitary matrix Q;
*> if JOBQ = 'Q', Q contains the product Q1*Q.
*> If JOBQ = 'N', Q is not referenced.
+*> \endverbatim
*>
-*> LDQ (input) INTEGER
+*> \param[in] LDQ
+*> \verbatim
+*> LDQ is INTEGER
*> The leading dimension of the array Q. LDQ >= max(1,N) if
*> JOBQ = 'Q'; LDQ >= 1 otherwise.
+*> \endverbatim
*>
-*> WORK (workspace) COMPLEX array, dimension (2*N)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (2*N)
+*> \endverbatim
*>
-*> NCYCLE (output) INTEGER
+*> \param[out] NCYCLE
+*> \verbatim
+*> NCYCLE is INTEGER
*> The number of cycles required for convergence.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
*> = 1: the procedure does not converge after MAXIT cycles.
+*> \endverbatim
*>
*> Internal Parameters
*> ===================
-*>
+*>
+*> \verbatim
*> MAXIT INTEGER
*> MAXIT specifies the total loops that the iterative procedure
*> may take. If after MAXIT cycles, the routine fails to
*> converge, we return INFO = 1.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> CTGSJA essentially uses a variant of Kogbetliantz algorithm to reduce
*> min(L,M-K)-by-L triangular (or trapezoidal) matrix A23 and L-by-L
*> \verbatim
*> N is INTEGER
*> The number of columns of the matrix B. N >= 0.
+*> \endverbatim
*>
*> \param[in] K
*> \verbatim
*> The number of elementary reflectors whose product defines
*> the matrix Q.
*> \endverbatim
-*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* K >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The order of the trapezoidal part of V.
+*> K >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> NB (input) INTEGER
+*> \param[in] NB
+*> \verbatim
+*> NB is INTEGER
*> The block size used for the storage of T. K >= NB >= 1.
*> This must be the same value of NB used to generate T
*> in CTPQRT.
+*> \endverbatim
*>
-*> V (input) COMPLEX array, dimension (LDA,K)
+*> \param[in] V
+*> \verbatim
+*> V is COMPLEX array, dimension (LDA,K)
*> The i-th column must contain the vector which defines the
*> elementary reflector H(i), for i = 1,2,...,k, as returned by
*> CTPQRT in B. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A.
-*> If SIDE = 'L', LDA >= max(1,M);
-*> if SIDE = 'R', LDA >= max(1,N).
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
+*> The leading dimension of the array V.
+*> If SIDE = 'L', LDV >= max(1,M);
+*> if SIDE = 'R', LDV >= max(1,N).
+*> \endverbatim
*>
-*> T (input) COMPLEX array, dimension (LDT,K)
+*> \param[in] T
+*> \verbatim
+*> T is COMPLEX array, dimension (LDT,K)
*> The upper triangular factors of the block reflectors
*> as returned by CTPQRT, stored as a NB-by-K matrix.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
*>
-*> A (input/output) COMPLEX array, dimension
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX array, dimension
*> (LDA,N) if SIDE = 'L' or
*> (LDA,K) if SIDE = 'R'
*> On entry, the K-by-N or M-by-K matrix A.
*> On exit, A is overwritten by the corresponding block of
*> Q*C or Q**H*C or C*Q or C*Q**H. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A.
*> If SIDE = 'L', LDC >= max(1,K);
*> If SIDE = 'R', LDC >= max(1,M).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX array, dimension (LDB,N)
*> On entry, the M-by-N matrix B.
*> On exit, B is overwritten by the corresponding block of
*> Q*C or Q**H*C or C*Q or C*Q**H. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B.
*> LDB >= max(1,M).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX array. The dimension of WORK is
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array. The dimension of WORK is
*> N*NB if SIDE = 'L', or M*NB if SIDE = 'R'.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The columns of the pentagonal matrix V contain the elementary reflectors
*> H(1), H(2), ..., H(K); V is composed of a rectangular block V1 and a
*> N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* MIN(M,N) >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The number of rows of the upper trapezoidal part of B.
+*> MIN(M,N) >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> NB (input) INTEGER
+*> \param[in] NB
+*> \verbatim
+*> NB is INTEGER
*> The block size to be used in the blocked QR. N >= NB >= 1.
+*> \endverbatim
*>
-*> A (input/output) COMPLEX array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX array, dimension (LDA,N)
*> On entry, the upper triangular N-by-N matrix A.
*> On exit, the elements on and above the diagonal of the array
*> contain the upper triangular matrix R.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX array, dimension (LDB,N)
*> On entry, the pentagonal M-by-N matrix B. The first M-L rows
*> are rectangular, and the last L rows are upper trapezoidal.
*> On exit, B contains the pentagonal matrix V. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,M).
+*> \endverbatim
*>
-*> T (output) COMPLEX array, dimension (LDT,N)
+*> \param[out] T
+*> \verbatim
+*> T is COMPLEX array, dimension (LDT,N)
*> The upper triangular block reflectors stored in compact form
*> as a sequence of upper triangular blocks. See Further Details.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
*>
-*> WORK (workspace) COMPLEX array, dimension (NB*N)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension (NB*N)
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
-*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*> The input matrix C is a (N+M)-by-N matrix
*>
*> C = [ A ]
*> N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* MIN(M,N) >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The number of rows of the upper trapezoidal part of B.
+*> MIN(M,N) >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> A (input/output) COMPLEX array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX array, dimension (LDA,N)
*> On entry, the upper triangular N-by-N matrix A.
*> On exit, the elements on and above the diagonal of the array
*> contain the upper triangular matrix R.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX array, dimension (LDB,N)
*> On entry, the pentagonal M-by-N matrix B. The first M-L rows
*> are rectangular, and the last L rows are upper trapezoidal.
*> On exit, B contains the pentagonal matrix V. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,M).
+*> \endverbatim
*>
-*> T (output) COMPLEX array, dimension (LDT,N)
+*> \param[out] T
+*> \verbatim
+*> T is COMPLEX array, dimension (LDT,N)
*> The N-by-N upper triangular factor T of the block reflector.
*> See Further Details.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= max(1,N)
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The input matrix C is a (N+M)-by-N matrix
*>
*> K >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* K >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The order of the trapezoidal part of V.
+*> K >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> V (input) COMPLEX array, dimension
+*> \param[in] V
+*> \verbatim
+*> V is COMPLEX array, dimension
*> (LDV,K) if STOREV = 'C'
*> (LDV,M) if STOREV = 'R' and SIDE = 'L'
*> (LDV,N) if STOREV = 'R' and SIDE = 'R'
*> The pentagonal matrix V, which contains the elementary reflectors
*> H(1), H(2), ..., H(K). See Further Details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
*> if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
*> if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> T (input) COMPLEX array, dimension (LDT,K)
+*> \param[in] T
+*> \verbatim
+*> T is COMPLEX array, dimension (LDT,K)
*> The triangular K-by-K matrix T in the representation of the
*> block reflector.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T.
*> LDT >= K.
+*> \endverbatim
*>
-*> A (input/output) COMPLEX array, dimension
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX array, dimension
*> (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R'
*> On entry, the K-by-N or M-by-K matrix A.
*> On exit, A is overwritten by the corresponding block of
*> H*C or H**H*C or C*H or C*H**H. See Futher Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A.
*> If SIDE = 'L', LDC >= max(1,K);
*> If SIDE = 'R', LDC >= max(1,M).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX array, dimension (LDB,N)
*> On entry, the M-by-N matrix B.
*> On exit, B is overwritten by the corresponding block of
*> H*C or H**H*C or C*H or C*H**H. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B.
*> LDB >= max(1,M).
+*> \endverbatim
*>
-*> WORK (workspace) COMPLEX array, dimension
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX array, dimension
*> (LDWORK,N) if SIDE = 'L',
*> (LDWORK,K) if SIDE = 'R'.
+*> \endverbatim
*>
-*> LDWORK (input) INTEGER
+*> \param[in] LDWORK
+*> \verbatim
+*> LDWORK is INTEGER
*> The leading dimension of the array WORK.
*> If SIDE = 'L', LDWORK >= K;
*> if SIDE = 'R', LDWORK >= M.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complexOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix C is a composite matrix formed from blocks A and B.
*> The block B is of size M-by-N; if SIDE = 'R', A is of size M-by-K,
*> \param[in] IFST
*> \verbatim
*> IFST is INTEGER
+*> \endverbatim
+*>
*> \param[in] ILST
*> \verbatim
*> ILST is INTEGER
+*> \endverbatim
+*> \verbatim
*> Specify the reordering of the diagonal elements of T:
*> The element with row index IFST is moved to row ILST by a
*> sequence of transpositions between adjacent elements.
*> 1 <= IFST <= N; 1 <= ILST <= N.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] INFO
*> \verbatim
*> The number of columns in X11 and X21. 0 <= Q <= M.
*> \endverbatim
*>
-*> \param[in,out] X
+*> \param[in,out] X11
*> \verbatim
-*> X is COMPLEX array, dimension (LDX,M)
-*> On entry, the unitary matrix whose CSD is desired.
+*> X11 is COMPLEX array, dimension (LDX11,Q)
+*> On entry, part of the unitary matrix whose CSD is desired.
*> \endverbatim
*>
-*> \param[in] LDX
+*> \param[in] LDX11
*> \verbatim
-*> LDX is INTEGER
-*> The leading dimension of X. LDX >= MAX(1,M).
+*> LDX11 is INTEGER
+*> The leading dimension of X11. LDX11 >= MAX(1,P).
+*> \endverbatim
+*>
+*> \param[in,out] X12
+*> \verbatim
+*> X12 is COMPLEX array, dimension (LDX12,M-Q)
+*> On entry, part of the unitary matrix whose CSD is desired.
+*> \endverbatim
+*>
+*> \param[in] LDX12
+*> \verbatim
+*> LDX12 is INTEGER
+*> The leading dimension of X12. LDX12 >= MAX(1,P).
+*> \endverbatim
+*>
+*> \param[in,out] X21
+*> \verbatim
+*> X21 is COMPLEX array, dimension (LDX21,Q)
+*> On entry, part of the unitary matrix whose CSD is desired.
+*> \endverbatim
+*>
+*> \param[in] LDX21
+*> \verbatim
+*> LDX21 is INTEGER
+*> The leading dimension of X11. LDX21 >= MAX(1,M-P).
+*> \endverbatim
+*>
+*> \param[in,out] X22
+*> \verbatim
+*> X22 is COMPLEX array, dimension (LDX22,M-Q)
+*> On entry, part of the unitary matrix whose CSD is desired.
+*> \endverbatim
+*>
+*> \param[in] LDX22
+*> \verbatim
+*> LDX22 is INTEGER
+*> The leading dimension of X11. LDX22 >= MAX(1,M-P).
*> \endverbatim
*>
*> \param[out] THETA
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> ILO and IHI must have the same values as in the previous call
*> of CGEHRD. Q is equal to the unit matrix except in the
*> submatrix Q(ilo+1:ihi,ilo+1:ihi).
*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] A
*> \verbatim
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> ILO and IHI must have the same values as in the previous call
*> of CGEHRD. Q is equal to the unit matrix except in the
*> submatrix Q(ilo+1:ihi,ilo+1:ihi).
*> if SIDE = 'R', then 1 <= ILO <= IHI <= N, if N > 0, and
*> ILO = 1 and IHI = 0, if N = 0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] A
*> \verbatim
*> partially reduced top-right block.
*> \endverbatim
*>
+*> \param[out] B21D
+*> \verbatim
+*> B21D is DOUBLE PRECISION array, dimension (Q)
+*> When CBBCSD converges, B21D contains the negative sines of
+*> THETA(1), ..., THETA(Q). If CBBCSD fails to converge, then
+*> B21D contains the diagonal of the partially reduced bottom-left
+*> block.
+*> \endverbatim
+*>
+*> \param[out] B21E
+*> \verbatim
+*> B21E is DOUBLE PRECISION array, dimension (Q-1)
+*> When CBBCSD converges, B21E contains zeros. If CBBCSD fails
+*> to converge, then B21E contains the subdiagonal of the
+*> partially reduced bottom-left block.
+*> \endverbatim
+*>
+*> \param[out] B22D
+*> \verbatim
+*> B22D is DOUBLE PRECISION array, dimension (Q)
+*> When CBBCSD converges, B22D contains the negative sines of
+*> THETA(1), ..., THETA(Q). If CBBCSD fails to converge, then
+*> B22D contains the diagonal of the partially reduced bottom-right
+*> block.
+*> \endverbatim
+*>
+*> \param[out] B22E
+*> \verbatim
+*> B22E is DOUBLE PRECISION array, dimension (Q-1)
+*> When CBBCSD converges, B22E contains zeros. If CBBCSD fails
+*> to converge, then B22E contains the subdiagonal of the
+*> partially reduced bottom-right block.
+*> \endverbatim
+*>
*> \param[out] WORK
*> \verbatim
*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
-*> \brief <b> DGBSV computes the solution to system of linear equations A * X = B for GB matrices</b>
+*> \brief <b> DGBSV computes the solution to system of linear equations A * X = B for GB matrices</b> (simple driver)
*
* =========== DOCUMENTATION ===========
*
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is DOUBLE array, dimension (LDA,N)
+*> On entry, the input matrix A.
+*> On exit, A is overwritten by the balanced matrix.
+*> If JOB = 'N', A is not referenced.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> ILO (output) INTEGER
-*>
-*> IHI (output) INTEGER
+*> \param[out] ILO
+*> \verbatim
+*> ILO is INTEGER
+*> \endverbatim
+*> \param[out] IHI
+*> \verbatim
+*> IHI is INTEGER
*> ILO and IHI are set to integers such that on exit
*> A(i,j) = 0 if i > j and j = 1,...,ILO-1 or I = IHI+1,...,N.
*> If JOB = 'N' or 'S', ILO = 1 and IHI = N.
+*> \endverbatim
*>
-*> SCALE (output) DOUBLE PRECISION array, dimension (N)
+*> \param[out] SCALE
+*> \verbatim
+*> SCALE is DOUBLE array, dimension (N)
*> Details of the permutations and scaling factors applied to
*> A. If P(j) is the index of the row and column interchanged
*> with row and column j and D(j) is the scaling factor
*> = P(j) for j = IHI+1,...,N.
*> The order in which the interchanges are made is N to IHI+1,
*> then 1 to ILO-1.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit.
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The permutations consist of row and column interchanges which put
*> the matrix in the form
*> The number of columns in the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
+*> On entry, the m by n general matrix to be reduced.
+*> On exit,
+*> if m >= n, the diagonal and the first superdiagonal are
+*> overwritten with the upper bidiagonal matrix B; the
+*> elements below the diagonal, with the array TAUQ, represent
+*> the orthogonal matrix Q as a product of elementary
+*> reflectors, and the elements above the first superdiagonal,
+*> with the array TAUP, represent the orthogonal matrix P as
+*> a product of elementary reflectors;
+*> if m < n, the diagonal and the first subdiagonal are
+*> overwritten with the lower bidiagonal matrix B; the
+*> elements below the first subdiagonal, with the array TAUQ,
+*> represent the orthogonal matrix Q as a product of
+*> elementary reflectors, and the elements above the diagonal,
+*> with the array TAUP, represent the orthogonal matrix P as
+*> a product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> D (output) DOUBLE PRECISION array, dimension (min(M,N))
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (min(M,N))
*> The diagonal elements of the bidiagonal matrix B:
*> D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) DOUBLE PRECISION array, dimension (min(M,N)-1)
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (min(M,N)-1)
*> The off-diagonal elements of the bidiagonal matrix B:
*> if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1;
*> if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1.
+*> \endverbatim
*>
-*> TAUQ (output) DOUBLE PRECISION array dimension (min(M,N))
+*> \param[out] TAUQ
+*> \verbatim
+*> TAUQ is DOUBLE PRECISION array dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix Q. See Further Details.
+*> \endverbatim
*>
-*> TAUP (output) DOUBLE PRECISION array, dimension (min(M,N))
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is DOUBLE PRECISION array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix P. See Further Details.
+*> \endverbatim
*>
-*> WORK (workspace) DOUBLE PRECISION array, dimension (max(M,N))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (max(M,N))
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit.
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrices Q and P are represented as products of elementary
*> reflectors:
*> The number of columns in the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
+*> On entry, the M-by-N general matrix to be reduced.
+*> On exit,
+*> if m >= n, the diagonal and the first superdiagonal are
+*> overwritten with the upper bidiagonal matrix B; the
+*> elements below the diagonal, with the array TAUQ, represent
+*> the orthogonal matrix Q as a product of elementary
+*> reflectors, and the elements above the first superdiagonal,
+*> with the array TAUP, represent the orthogonal matrix P as
+*> a product of elementary reflectors;
+*> if m < n, the diagonal and the first subdiagonal are
+*> overwritten with the lower bidiagonal matrix B; the
+*> elements below the first subdiagonal, with the array TAUQ,
+*> represent the orthogonal matrix Q as a product of
+*> elementary reflectors, and the elements above the diagonal,
+*> with the array TAUP, represent the orthogonal matrix P as
+*> a product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> D (output) DOUBLE PRECISION array, dimension (min(M,N))
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (min(M,N))
*> The diagonal elements of the bidiagonal matrix B:
*> D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) DOUBLE PRECISION array, dimension (min(M,N)-1)
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (min(M,N)-1)
*> The off-diagonal elements of the bidiagonal matrix B:
*> if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1;
*> if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1.
+*> \endverbatim
*>
-*> TAUQ (output) DOUBLE PRECISION array dimension (min(M,N))
+*> \param[out] TAUQ
+*> \verbatim
+*> TAUQ is DOUBLE PRECISION array dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix Q. See Further Details.
+*> \endverbatim
*>
-*> TAUP (output) DOUBLE PRECISION array, dimension (min(M,N))
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is DOUBLE PRECISION array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix P. See Further Details.
+*> \endverbatim
*>
-*> WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The length of the array WORK. LWORK >= max(1,M,N).
*> For optimum performance LWORK >= (M+N)*NB, where NB
*> is the optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrices Q and P are represented as products of elementary
*> reflectors:
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,3*N).
*> For good performance, LWORK must generally be larger.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] ILO
+*> \verbatim
+*> ILO is INTEGER
+*> \endverbatim
+*>
+*> \param[in] IHI
*> \verbatim
-* set to 1 and N respectively. See Further Details.
+*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
+*> It is assumed that A is already upper triangular in rows
+*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally
+*> set by a previous call to DGEBAL; otherwise they should be
+*> set to 1 and N respectively. See Further Details.
*> 1 <= ILO <= IHI <= max(1,N).
+*> \endverbatim
*>
-*> A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
*> On entry, the n by n general matrix to be reduced.
*> On exit, the upper triangle and the first subdiagonal of A
*> are overwritten with the upper Hessenberg matrix H, and the
*> elements below the first subdiagonal, with the array TAU,
*> represent the orthogonal matrix Q as a product of elementary
*> reflectors. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> TAU (output) DOUBLE PRECISION array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (N-1)
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace) DOUBLE PRECISION array, dimension (N)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit.
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of (ihi-ilo) elementary
*> reflectors
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] ILO
*> \verbatim
-* set to 1 and N respectively. See Further Details.
+*> ILO is INTEGER
+*> \endverbatim
+*>
+*> \param[in] IHI
+*> \verbatim
+*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
+*> It is assumed that A is already upper triangular in rows
+*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally
+*> set by a previous call to DGEBAL; otherwise they should be
+*> set to 1 and N respectively. See Further Details.
*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0.
+*> \endverbatim
*>
-*> A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
*> On entry, the N-by-N general matrix to be reduced.
*> On exit, the upper triangle and the first subdiagonal of A
*> are overwritten with the upper Hessenberg matrix H, and the
*> elements below the first subdiagonal, with the array TAU,
*> represent the orthogonal matrix Q as a product of elementary
*> reflectors. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> TAU (output) DOUBLE PRECISION array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (N-1)
*> The scalar factors of the elementary reflectors (see Further
*> Details). Elements 1:ILO-1 and IHI:N-1 of TAU are set to
*> zero.
+*> \endverbatim
*>
-*> WORK (workspace/output) DOUBLE PRECISION array, dimension (LWORK)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (LWORK)
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The length of the array WORK. LWORK >= max(1,N).
*> For optimum performance LWORK >= N*NB, where NB is the
*> optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of (ihi-ilo) elementary
*> reflectors
*> determined to be strictly smaller than N, SCONDA is
*> returned as -1, thus indicating that the smallest
*> singular values might be lost.
-*> \endverbatim
-*> \verbatim
+*>
*> If full SVD is needed, the following two condition numbers are
*> useful for the analysis of the algorithm. They are provied for
*> a developer/implementer who is familiar with the details of
*> the method.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK(4) = an estimate of the scaled condition number of the
*> triangular factor in the first QR factorization.
*> WORK(5) = an estimate of the scaled condition number of the
*> The following two parameters are computed if JOBT .EQ. 'T'.
*> They are provided for a developer/implementer who is familiar
*> with the details of the method.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK(6) = the entropy of A^t*A :: this is the Shannon entropy
*> of diag(A^t*A) / Trace(A^t*A) taken as point in the
*> probability simplex.
*> LWORK is INTEGER
*> Length of WORK to confirm proper allocation of work space.
*> LWORK depends on the job:
-*> \endverbatim
-*> \verbatim
+*>
*> If only SIGMA is needed ( JOBU.EQ.'N', JOBV.EQ.'N' ) and
*> -> .. no scaled condition estimate required (JOBE.EQ.'N'):
*> LWORK >= max(2*M+N,4*N+1,7). This is the minimal requirement.
*> In general, the optimal length LWORK is computed as
*> LWORK >= max(2*M+N,N+LWORK(DGEQP3),N+LWORK(DGEQRF),
*> N+N*N+LWORK(DPOCON),7).
-*> \endverbatim
-*> \verbatim
+*>
*> If SIGMA and the right singular vectors are needed (JOBV.EQ.'V'),
*> -> the minimal requirement is LWORK >= max(2*M+N,4*N+1,7).
*> -> For optimal performance, LWORK >= max(2*M+N,3*N+(N+1)*NB,7),
*> DORMLQ. In general, the optimal length LWORK is computed as
*> LWORK >= max(2*M+N,N+LWORK(DGEQP3), N+LWORK(DPOCON),
*> N+LWORK(DGELQ), 2*N+LWORK(DGEQRF), N+LWORK(DORMLQ)).
-*> \endverbatim
-*> \verbatim
+*>
*> If SIGMA and the left singular vectors are needed
*> -> the minimal requirement is LWORK >= max(2*M+N,4*N+1,7).
*> -> For optimal performance:
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, the elements on and below the diagonal of the array
+*> contain the m by min(m,n) lower trapezoidal matrix L (L is
+*> lower triangular if m <= n); the elements above the diagonal,
+*> with the array TAU, represent the orthogonal matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (M)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* product of elementary reflectors (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) DOUBLE PRECISION array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) DOUBLE PRECISION array, dimension (M)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* product of elementary reflectors (see Further Details).
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
+*> On entry, the M-by-N matrix A.
+*> On exit, the elements on and below the diagonal of the array
+*> contain the m-by-min(m,n) lower trapezoidal matrix L (L is
+*> lower triangular if m <= n); the elements above the diagonal,
+*> with the array TAU, represent the orthogonal matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> TAU (output) DOUBLE PRECISION array, dimension (min(M,N))
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,M).
*> For optimum performance LWORK >= M*NB, where NB is the
*> optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, if m >= n, the lower triangle of the subarray
+*> A(m-n+1:m,1:n) contains the n by n lower triangular matrix L;
+*> if m <= n, the elements on and below the (n-m)-th
+*> superdiagonal contain the m by n lower trapezoidal matrix L;
+*> the remaining elements, with the array TAU, represent the
+*> orthogonal matrix Q as a product of elementary reflectors
+*> (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) DOUBLE PRECISION array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) DOUBLE PRECISION array, dimension (N)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* (see Further Details).
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
+*> On entry, the M-by-N matrix A.
+*> On exit,
+*> if m >= n, the lower triangle of the subarray
+*> A(m-n+1:m,1:n) contains the N-by-N lower triangular matrix L;
+*> if m <= n, the elements on and below the (n-m)-th
+*> superdiagonal contain the M-by-N lower trapezoidal matrix L;
+*> the remaining elements, with the array TAU, represent the
+*> orthogonal matrix Q as a product of elementary reflectors
+*> (see Further Details).
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> TAU (output) DOUBLE PRECISION array, dimension (min(M,N))
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N).
*> For optimum performance LWORK >= N*NB, where NB is the
*> optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, the elements on and above the diagonal of the array
+*> contain the min(m,n) by n upper trapezoidal matrix R (R is
+*> upper triangular if m >= n); the elements below the diagonal,
+*> with the array TAU, represent the orthogonal matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* product of elementary reflectors (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) DOUBLE PRECISION array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) DOUBLE PRECISION array, dimension (N)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, the elements on and above the diagonal of the array
+*> contain the min(m,n) by n upper trapezoidal matrix R (R is
+*> upper triangular if m >= n); the elements below the diagonal,
+*> with the array TAU, represent the orthogonal matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* product of elementary reflectors (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) DOUBLE PRECISION array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) DOUBLE PRECISION array, dimension (N)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
* ===============
*>\details \b Further \b Details
*> \verbatim
-*
*> The matrix V stores the elementary reflectors H(i) in the i-th column
*> below the diagonal. For example, if M=5 and N=3, the matrix V is
*>
*> reflector T; the elements below the diagonal are not used.
*> See below for further details.
*> \endverbatim
+*>
+*> \param[in] LDT
*> \verbatim
-*> LDT (intput) INTEGER
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= max(1,N).
*> \endverbatim
*>
*> reflector T; the elements below the diagonal are not used.
*> See below for further details.
*> \endverbatim
+*>
+*> \param[in] LDT
*> \verbatim
-*> LDT (intput) INTEGER
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= max(1,N).
*> \endverbatim
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* reflectors (see Further Details).
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
+*> On entry, the M-by-N matrix A.
+*> On exit,
+*> if m <= n, the upper triangle of the subarray
+*> A(1:m,n-m+1:n) contains the M-by-M upper triangular matrix R;
+*> if m >= n, the elements on and above the (m-n)-th subdiagonal
+*> contain the M-by-N upper trapezoidal matrix R;
+*> the remaining elements, with the array TAU, represent the
+*> orthogonal matrix Q as a product of min(m,n) elementary
+*> reflectors (see Further Details).
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> TAU (output) DOUBLE PRECISION array, dimension (min(M,N))
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,M).
*> For optimum performance LWORK >= M*NB, where NB is
*> the optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
* Online html documentation available at
* http://www.netlib.org/lapack/explore-html/
*
+*> \htmlonly
*> Download DGESV + dependencies
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgesv.f">
*> [TGZ]</a>
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgesv.f">
*> [ZIP]</a>
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesv.f">
-*> [TXT]</a>
+*> [TXT]</a>
+*> \endhtmlonly
*
* Definition
* ==========
*> \param[out] X
*> \verbatim
*> X is DOUBLE PRECISION array, dimension (M)
+*> \endverbatim
+*>
*> \param[out] Y
*> \verbatim
*> Y is DOUBLE PRECISION array, dimension (P)
-*> On exit, X and Y are the solutions of the GLM problem.
*> \endverbatim
+*> \verbatim
+*> On exit, X and Y are the solutions of the GLM problem.
*> \endverbatim
*>
*> \param[out] WORK
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> ILO and IHI mark the rows and columns of A which are to be
*> reduced. It is assumed that A is already upper triangular
*> in rows and columns 1:ILO-1 and IHI+1:N. ILO and IHI are
-*> normally set by a previous call to SGGBAL; otherwise they
+*> normally set by a previous call to DGGBAL; otherwise they
*> should be set to 1 and N respectively.
*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] A
*> \verbatim
*> The leading dimension of the array A. LDA >= max(1,N).
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[out] TAUA
*> \verbatim
-* represent the orthogonal matrix Q (see Further Details).
+*> TAUA is DOUBLE PRECISION array, dimension (min(N,M))
+*> The scalar factors of the elementary reflectors which
+*> represent the orthogonal matrix Q (see Further Details).
+*> \endverbatim
*>
-*> B (input/output) DOUBLE PRECISION array, dimension (LDB,P)
+*> \param[in,out] B
+*> \verbatim
+*> B is DOUBLE PRECISION array, dimension (LDB,P)
*> On entry, the N-by-P matrix B.
*> On exit, if N <= P, the upper triangle of the subarray
*> B(1:N,P-N+1:P) contains the N-by-N upper triangular matrix T;
*> elements, with the array TAUB, represent the orthogonal
*> matrix Z as a product of elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,N).
+*> \endverbatim
*>
-*> TAUB (output) DOUBLE PRECISION array, dimension (min(N,P))
+*> \param[out] TAUB
+*> \verbatim
+*> TAUB is DOUBLE PRECISION array, dimension (min(N,P))
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix Z (see Further Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N,M,P).
*> For optimum performance LWORK >= max(N,M,P)*max(NB1,NB2,NB3),
*> where NB1 is the optimal blocksize for the QR factorization
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The leading dimension of the array A. LDA >= max(1,M).
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[out] TAUA
*> \verbatim
-* represent the orthogonal matrix Q (see Further Details).
+*> TAUA is DOUBLE PRECISION array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors which
+*> represent the orthogonal matrix Q (see Further Details).
+*> \endverbatim
*>
-*> B (input/output) DOUBLE PRECISION array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is DOUBLE PRECISION array, dimension (LDB,N)
*> On entry, the P-by-N matrix B.
*> On exit, the elements on and above the diagonal of the array
*> contain the min(P,N)-by-N upper trapezoidal matrix T (T is
*> upper triangular if P >= N); the elements below the diagonal,
*> with the array TAUB, represent the orthogonal matrix Z as a
*> product of elementary reflectors (see Further Details).
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,P).
+*> \endverbatim
*>
-*> TAUB (output) DOUBLE PRECISION array, dimension (min(P,N))
+*> \param[out] TAUB
+*> \verbatim
+*> TAUB is DOUBLE PRECISION array, dimension (min(P,N))
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix Z (see Further Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N,M,P).
*> For optimum performance LWORK >= max(N,M,P)*max(NB1,NB2,NB3),
*> where NB1 is the optimal blocksize for the RQ factorization
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INF0= -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> \param[out] K
*> \verbatim
*> K is INTEGER
+*> \endverbatim
+*>
*> \param[out] L
*> \verbatim
*> L is INTEGER
+*> \endverbatim
+*> \verbatim
*> On exit, K and L specify the dimension of the subblocks
-*> described in the Purpose section.
+*> described in Purpose.
*> K + L = effective numerical rank of (A**T,B**T)**T.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] A
*> \verbatim
*> \param[out] ALPHA
*> \verbatim
*> ALPHA is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*>
*> \param[out] BETA
*> \verbatim
*> BETA is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> On exit, ALPHA and BETA contain the generalized singular
*> value pairs of A and B;
*> ALPHA(1:K) = 1,
*> ALPHA(K+L+1:N) = 0
*> BETA(K+L+1:N) = 0
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] U
*> \verbatim
*> \param[in] TOLA
*> \verbatim
*> TOLA is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[in] TOLB
*> \verbatim
*> TOLB is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> TOLA and TOLB are the thresholds to determine the effective
*> numerical rank of matrix B and a subblock of A. Generally,
*> they are set to
-*> TOLA = MAX(M,N)*norm(A)*MAZHEPS,
-*> TOLB = MAX(P,N)*norm(B)*MAZHEPS.
+*> TOLA = MAX(M,N)*norm(A)*MACHEPS,
+*> TOLB = MAX(P,N)*norm(B)*MACHEPS.
*> The size of TOLA and TOLB may affect the size of backward
*> errors of the decomposition.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] K
*> \verbatim
*> K is INTEGER
+*> \endverbatim
+*>
*> \param[out] L
*> \verbatim
*> L is INTEGER
+*> \endverbatim
+*> \verbatim
*> On exit, K and L specify the dimension of the subblocks
*> described in Purpose section.
*> K + L = effective numerical rank of (A**T,B**T)**T.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] U
*> \verbatim
*> \param[in,out] WR
*> \verbatim
*> WR is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*>
*> \param[in] WI
*> \verbatim
*> WI is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> On entry, the real and imaginary parts of the eigenvalues of
*> H; a complex conjugate pair of eigenvalues must be stored in
*> consecutive elements of WR and WI.
*> are perturbed slightly in searching for independent
*> eigenvectors.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] VL
*> \verbatim
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> It is assumed that H is already upper triangular in rows
*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally
-*> set by a previous call to DGEBAL, and then passed to DGEHRD
+*> set by a previous call to DGEBAL, and then passed to ZGEHRD
*> when the matrix output by DGEBAL is reduced to Hessenberg
*> form. Otherwise ILO and IHI should be set to 1 and N
*> respectively. If N.GT.0, then 1.LE.ILO.LE.IHI.LE.N.
*> If N = 0, then ILO = 1 and IHI = 0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] H
*> \verbatim
*> \param[out] WR
*> \verbatim
*> WR is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*>
*> \param[out] WI
*> \verbatim
*> WI is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> The real and imaginary parts, respectively, of the computed
*> eigenvalues. If two eigenvalues are computed as a complex
*> conjugate pair, they are stored in consecutive elements of
*> diagonal block, WI(i) = sqrt(-H(i+1,i)*H(i,i+1)) and
*> WI(i+1) = -WI(i).
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] Z
*> \verbatim
*> matrix B.
*> \endverbatim
*>
-*> \param[in] A
+*> \param[in] AB
*> \verbatim
-*> A is DOUBLE PRECISION array, dimension (LDA,N)
-*> On entry, the N-by-N matrix A.
+*> AB is DOUBLE PRECISION array, dimension (LDAB,N)
+*> On entry, the N-by-N matrix AB.
*> \endverbatim
*>
-*> \param[in] LDA
+*> \param[in] LDAB
*> \verbatim
-*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
+*> LDAB is INTEGER
+*> The leading dimension of the array AB. LDBA >= max(1,N).
*> \endverbatim
*>
-*> \param[in] AF
+*> \param[in] AFB
*> \verbatim
-*> AF is DOUBLE PRECISION array, dimension (LDAF,N)
+*> AFB is DOUBLE PRECISION array, dimension (LDAFB,N)
*> The factors L and U from the factorization
*> A = P*L*U as computed by DGBTRF.
*> \endverbatim
*>
-*> \param[in] LDAF
+*> \param[in] LDAFB
*> \verbatim
-*> LDAF is INTEGER
-*> The leading dimension of the array AF. LDAF >= max(1,N).
+*> LDAFB is INTEGER
+*> The leading dimension of the array AF. LDAFB >= max(1,N).
*> \endverbatim
*>
*> \param[in] IPIV
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> normwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Normwise relative error in the ith solution vector:
*> max_j (abs(XTRUE(j,i) - X(j,i)))
*> ------------------------------
*> max_j abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the type of error information as described
*> below. There currently are up to three pieces of information
*> returned.
-*> \endverbatim
-*> \verbatim
+*>
*> The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
+*>
*> The second index in ERR_BNDS_NORM(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated normwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> appropriately scaled matrix Z.
*> Let Z = S*A, where S scales each row by a power of the
*> radix so all absolute row sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> componentwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Componentwise relative error in the ith solution vector:
*> abs(XTRUE(j,i) - X(j,i))
*> max_j ----------------------
*> abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the right-hand side i (on which the
*> componentwise relative error depends), and the type of error
*> information as described below. There currently are up to three
*> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
*> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
*> the first (:,N_ERR_BNDS) entries are returned.
-*> \endverbatim
-*> \verbatim
+*>
*> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
+*>
*> The second index in ERR_BNDS_COMP(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated componentwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> current right-hand side and S scales each row of
*> A*diag(x) by a power of the radix so all absolute row
*> sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> and provides error bounds and backward error estimates for the solution.
*> This subroutine is called by DGERFSX to perform iterative refinement.
*> In addition to normwise error bound, the code provides maximum
-*> componentwise error bound if possible. See comments for ERR_BNDS_NORM
-*> and ERR_BNDS_COMP for details of the error bounds. Note that this
+*> componentwise error bound if possible. See comments for ERRS_N
+*> and ERRS_C for details of the error bounds. Note that this
*> subroutine is only resonsible for setting the second fields of
-*> ERR_BNDS_NORM and ERR_BNDS_COMP.
+*> ERRS_N and ERRS_C.
*>
*>\endverbatim
*
*> \param[in] N_NORMS
*> \verbatim
*> N_NORMS is INTEGER
-*> Determines which error bounds to return (see ERR_BNDS_NORM
-*> and ERR_BNDS_COMP).
+*> Determines which error bounds to return (see ERRS_N
+*> and ERRS_C).
*> If N_NORMS >= 1 return normwise error bounds.
*> If N_NORMS >= 2 return componentwise error bounds.
*> \endverbatim
*>
-*> \param[in,out] ERR_BNDS_NORM
+*> \param[in,out] ERRS_N
*> \verbatim
-*> ERR_BNDS_NORM is DOUBLE PRECISION array, dimension
+*> ERRS_N is DOUBLE PRECISION array, dimension
*> (NRHS, N_ERR_BNDS)
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> normwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Normwise relative error in the ith solution vector:
*> max_j (abs(XTRUE(j,i) - X(j,i)))
*> ------------------------------
*> max_j abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the type of error information as described
*> below. There currently are up to three pieces of information
*> returned.
-*> \endverbatim
-*> \verbatim
-*> The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+*>
+*> The first index in ERRS_N(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
-*> The second index in ERR_BNDS_NORM(:,err) contains the following
+*>
+*> The second index in ERRS_N(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated normwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> appropriately scaled matrix Z.
*> Let Z = S*A, where S scales each row by a power of the
*> radix so all absolute row sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*>
-*> \param[in,out] ERR_BNDS_COMP
+*> \param[in,out] ERRS_C
*> \verbatim
-*> ERR_BNDS_COMP is DOUBLE PRECISION array, dimension
+*> ERRS_C is DOUBLE PRECISION array, dimension
*> (NRHS, N_ERR_BNDS)
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> componentwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Componentwise relative error in the ith solution vector:
*> abs(XTRUE(j,i) - X(j,i))
*> max_j ----------------------
*> abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the right-hand side i (on which the
*> componentwise relative error depends), and the type of error
*> information as described below. There currently are up to three
*> pieces of information returned for each right-hand side. If
*> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
-*> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+*> ERRS_C is not accessed. If N_ERR_BNDS .LT. 3, then at most
*> the first (:,N_ERR_BNDS) entries are returned.
-*> \endverbatim
-*> \verbatim
-*> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+*>
+*> The first index in ERRS_C(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
-*> The second index in ERR_BNDS_COMP(:,err) contains the following
+*>
+*> The second index in ERRS_C(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated componentwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> current right-hand side and S scales each row of
*> A*diag(x) by a power of the radix so all absolute row
*> sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> permit convergence using approximate factorizations or
*> factorizations other than LU. If the factorization uses a
*> technique other than Gaussian elimination, the guarantees in
-*> ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*> ERRS_N and ERRS_C may no longer be trustworthy.
*> \endverbatim
*>
*> \param[in] RTHRESH
*> The denominator in the relative backward error formula above, i.e.,
*> the matrix abs(op(A_s))*abs(Y) + abs(B_s). The matrices A, Y, and B
*> are from iterative refinement (see dla_gerfsx_extended.f).
+*> \endverbatim
*>
*> \param[out] BERR
*> \verbatim
*> BERR is DOUBLE PRECISION array, dimension (NRHS)
*> The component-wise relative backward error from the formula above.
*> \endverbatim
-*> \endverbatim
*>
*
* Authors
*> column INFO is exactly 0.
*> \endverbatim
*>
-*> \param[in] NCOLS
-*> \verbatim
-*> NCOLS is INTEGER
-*> The number of columns of the matrix A. NCOLS >= 0.
-*> \endverbatim
-*>
*> \param[in] A
*> \verbatim
*> A is DOUBLE PRECISION array, dimension (LDA,N)
*> The number of leading rows and columns of A to be reduced.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
+*> On entry, the m by n general matrix to be reduced.
+*> On exit, the first NB rows and columns of the matrix are
+*> overwritten; the rest of the array is unchanged.
+*> If m >= n, elements on and below the diagonal in the first NB
+*> columns, with the array TAUQ, represent the orthogonal
+*> matrix Q as a product of elementary reflectors; and
+*> elements above the diagonal in the first NB rows, with the
+*> array TAUP, represent the orthogonal matrix P as a product
+*> of elementary reflectors.
+*> If m < n, elements below the diagonal in the first NB
+*> columns, with the array TAUQ, represent the orthogonal
+*> matrix Q as a product of elementary reflectors, and
+*> elements on and above the diagonal in the first NB rows,
+*> with the array TAUP, represent the orthogonal matrix P as
+*> a product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> D (output) DOUBLE PRECISION array, dimension (NB)
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (NB)
*> The diagonal elements of the first NB rows and columns of
*> the reduced matrix. D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) DOUBLE PRECISION array, dimension (NB)
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (NB)
*> The off-diagonal elements of the first NB rows and columns of
*> the reduced matrix.
+*> \endverbatim
*>
-*> TAUQ (output) DOUBLE PRECISION array dimension (NB)
+*> \param[out] TAUQ
+*> \verbatim
+*> TAUQ is DOUBLE PRECISION array dimension (NB)
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix Q. See Further Details.
+*> \endverbatim
*>
-*> TAUP (output) DOUBLE PRECISION array, dimension (NB)
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is DOUBLE PRECISION array, dimension (NB)
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix P. See Further Details.
+*> \endverbatim
*>
-*> X (output) DOUBLE PRECISION array, dimension (LDX,NB)
+*> \param[out] X
+*> \verbatim
+*> X is DOUBLE PRECISION array, dimension (LDX,NB)
*> The m-by-nb matrix X required to update the unreduced part
*> of A.
+*> \endverbatim
*>
-*> LDX (input) INTEGER
+*> \param[in] LDX
+*> \verbatim
+*> LDX is INTEGER
*> The leading dimension of the array X. LDX >= max(1,M).
+*> \endverbatim
*>
-*> Y (output) DOUBLE PRECISION array, dimension (LDY,NB)
+*> \param[out] Y
+*> \verbatim
+*> Y is DOUBLE PRECISION array, dimension (LDY,NB)
*> The n-by-nb matrix Y required to update the unreduced part
*> of A.
+*> \endverbatim
*>
-*> LDY (input) INTEGER
+*> \param[in] LDY
+*> \verbatim
+*> LDY is INTEGER
*> The leading dimension of the array Y. LDY >= max(1,N).
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrices Q and P are represented as products of elementary
*> reflectors:
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> Contributed by Nick Higham, University of Manchester.
*> Originally named SONEST, dated March 16, 1988.
*> to update the system.
*> \endverbatim
*>
-*> \param[in] LDS
-*> \verbatim
-*> LDS is INTEGER
-*> The leading dimension of S. LDS >= max(1,K).
-*> \endverbatim
-*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
*> \verbatim
*> X is DOUBLE PRECISION array, dimension (LDX,NRHS)
*> The N by NRHS matrix X.
+*> \endverbatim
+*>
*> \param[in] LDX
*> \verbatim
*> LDX is INTEGER
*> The leading dimension of the array X. LDX >= max(N,1).
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] BETA
*> \verbatim
*> The number of columns to be reduced.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension (LDA,N-K+1)
+*> On entry, the n-by-(n-k+1) general matrix A.
+*> On exit, the elements on and above the k-th subdiagonal in
+*> the first NB columns are overwritten with the corresponding
+*> elements of the reduced matrix; the elements below the k-th
+*> subdiagonal, with the array TAU, represent the matrix Q as a
+*> product of elementary reflectors. The other columns of A are
+*> unchanged. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (NB)
+*> The scalar factors of the elementary reflectors. See Further
+*> Details.
+*> \endverbatim
+*>
+*> \param[out] T
+*> \verbatim
+*> T is DOUBLE PRECISION array, dimension (LDT,NB)
+*> The upper triangular matrix T.
+*> \endverbatim
+*>
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
+*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
+*>
+*> \param[out] Y
+*> \verbatim
+*> Y is DOUBLE PRECISION array, dimension (LDY,NB)
+*> The n-by-nb matrix Y.
+*> \endverbatim
+*>
+*> \param[in] LDY
+*> \verbatim
+*> LDY is INTEGER
+*> The leading dimension of the array Y. LDY >= N.
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* unchanged. See Further Details.
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
-*>
-*> TAU (output) DOUBLE PRECISION array, dimension (NB)
-*> The scalar factors of the elementary reflectors. See Further
-*> Details.
-*>
-*> T (output) DOUBLE PRECISION array, dimension (LDT,NB)
-*> The upper triangular matrix T.
-*>
-*> LDT (input) INTEGER
-*> The leading dimension of the array T. LDT >= NB.
-*>
-*> Y (output) DOUBLE PRECISION array, dimension (LDY,NB)
-*> The n-by-nb matrix Y.
-*>
-*> LDY (input) INTEGER
-*> The leading dimension of the array Y. LDY >= N.
-*>
*>
*> The matrix Q is represented as a product of nb elementary reflectors
*>
*> The number of columns to be reduced.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension (LDA,N-K+1)
+*> On entry, the n-by-(n-k+1) general matrix A.
+*> On exit, the elements on and above the k-th subdiagonal in
+*> the first NB columns are overwritten with the corresponding
+*> elements of the reduced matrix; the elements below the k-th
+*> subdiagonal, with the array TAU, represent the matrix Q as a
+*> product of elementary reflectors. The other columns of A are
+*> unchanged. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (NB)
+*> The scalar factors of the elementary reflectors. See Further
+*> Details.
+*> \endverbatim
+*>
+*> \param[out] T
+*> \verbatim
+*> T is DOUBLE PRECISION array, dimension (LDT,NB)
+*> The upper triangular matrix T.
+*> \endverbatim
+*>
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
+*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
+*>
+*> \param[out] Y
+*> \verbatim
+*> Y is DOUBLE PRECISION array, dimension (LDY,NB)
+*> The n-by-nb matrix Y.
+*> \endverbatim
+*>
+*> \param[in] LDY
+*> \verbatim
+*> LDY is INTEGER
+*> The leading dimension of the array Y. LDY >= N.
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* unchanged. See Further Details.
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
-*>
-*> TAU (output) DOUBLE PRECISION array, dimension (NB)
-*> The scalar factors of the elementary reflectors. See Further
-*> Details.
-*>
-*> T (output) DOUBLE PRECISION array, dimension (LDT,NB)
-*> The upper triangular matrix T.
-*>
-*> LDT (input) INTEGER
-*> The leading dimension of the array T. LDT >= NB.
-*>
-*> Y (output) DOUBLE PRECISION array, dimension (LDY,NB)
-*> The n-by-nb matrix Y.
-*>
-*> LDY (input) INTEGER
-*> The leading dimension of the array Y. LDY >= N.
-*>
*>
*> The matrix Q is represented as a product of nb elementary reflectors
*>
*> the eigenvalues. Elements 1:ilo-1 and i+1:n of WR
*> and WI contain those eigenvalues which have been
*> successfully computed. (Failures are rare.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANT is .FALSE., then on exit,
*> the remaining unconverged eigenvalues are the eigen-
*> values of the upper Hessenberg matrix rows and
*> columns ILO through INFO of the final, output
*> value of H.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (*) (initial value of H)*U = U*(final value of H)
-*> \endverbatim
-*> \verbatim
+*>
*> where U is an orthogonal matrix. The final
*> value of H is upper Hessenberg and quasi-triangular
*> in rows and columns INFO+1 through IHI.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (final value of Z(ILO:IHI,ILOZ:IHIZ)
*> = (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U
-*> \endverbatim
-*> \verbatim
+*>
*> where U is the orthogonal matrix in (*) (regard-
*> less of the value of WANTT.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .FALSE., then Z is not
*> accessed.
*> \endverbatim
*> Based on contributions by
*> Karen Braman and Ralph Byers, Department of Mathematics,
*> University of Kansas, USA
-*> \endverbatim
-*> \verbatim
+*>
*> References:
*> K. Braman, R. Byers and R. Mathias, The Multi-Shift QR
*> Algorithm Part I: Maintaining Well Focused Shifts, and Level 3
*> Performance, SIAM Journal of Matrix Analysis, volume 23, pages
*> 929--947, 2002.
-*> \endverbatim
-*> \verbatim
+*>
*> K. Braman, R. Byers and R. Mathias, The Multi-Shift QR
*> Algorithm Part II: Aggressive Early Deflation, SIAM Journal
*> of Matrix Analysis, volume 23, pages 948--973, 2002.
*> the eigenvalues. Elements 1:ilo-1 and i+1:n of WR
*> and WI contain those eigenvalues which have been
*> successfully computed. (Failures are rare.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANT is .FALSE., then on exit,
*> the remaining unconverged eigenvalues are the eigen-
*> values of the upper Hessenberg matrix rows and
*> columns ILO through INFO of the final, output
*> value of H.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (*) (initial value of H)*U = U*(final value of H)
-*> \endverbatim
-*> \verbatim
-*> where U is an orthogonal matrix. The final
-*> value of H is upper Hessenberg and quasi-triangular
-*> in rows and columns INFO+1 through IHI.
-*> \endverbatim
-*> \verbatim
+*>
+*> where U is a orthogonal matrix. The final
+*> value of H is upper Hessenberg and triangular in
+*> rows and columns INFO+1 through IHI.
+*>
*> If INFO .GT. 0 and WANTZ is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (final value of Z(ILO:IHI,ILOZ:IHIZ)
*> = (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U
-*> \endverbatim
-*> \verbatim
+*>
*> where U is the orthogonal matrix in (*) (regard-
*> less of the value of WANTT.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .FALSE., then Z is not
*> accessed.
*> \endverbatim
*> reflectors whose product defines the block reflector).
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] V
*> \verbatim
-* The matrix V. See Further Details.
+*> V is DOUBLE PRECISION array, dimension
+*> (LDV,K) if STOREV = 'C'
+*> (LDV,M) if STOREV = 'R' and SIDE = 'L'
+*> (LDV,N) if STOREV = 'R' and SIDE = 'R'
+*> The matrix V. See Further Details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
*> if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
*> if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> T (input) DOUBLE PRECISION array, dimension (LDT,K)
+*> \param[in] T
+*> \verbatim
+*> T is DOUBLE PRECISION array, dimension (LDT,K)
*> The triangular k by k matrix T in the representation of the
*> block reflector.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= K.
+*> \endverbatim
*>
-*> C (input/output) DOUBLE PRECISION array, dimension (LDC,N)
+*> \param[in,out] C
+*> \verbatim
+*> C is DOUBLE PRECISION array, dimension (LDC,N)
*> On entry, the m by n matrix C.
*> On exit, C is overwritten by H*C or H**T*C or C*H or C*H**T.
+*> \endverbatim
*>
-*> LDC (input) INTEGER
+*> \param[in] LDC
+*> \verbatim
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,M).
+*> \endverbatim
*>
-*> WORK (workspace) DOUBLE PRECISION array, dimension (LDWORK,K)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (LDWORK,K)
+*> \endverbatim
*>
-*> LDWORK (input) INTEGER
+*> \param[in] LDWORK
+*> \verbatim
+*> LDWORK is INTEGER
*> The leading dimension of the array WORK.
*> If SIDE = 'L', LDWORK >= max(1,N);
*> if SIDE = 'R', LDWORK >= max(1,M).
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The shape of the matrix V and the storage of the vectors which define
*> the H(i) is best illustrated by the following example with n = 5 and
*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] STOREV
*> \verbatim
-* reflectors are stored (see also Further Details):
+*> STOREV is CHARACTER*1
+*> Specifies how the vectors which define the elementary
+*> reflectors are stored (see also Further Details):
*> = 'C': columnwise
*> = 'R': rowwise
+*> \endverbatim
*>
-*> N (input) INTEGER
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
*> The order of the block reflector H. N >= 0.
+*> \endverbatim
*>
-*> K (input) INTEGER
+*> \param[in] K
+*> \verbatim
+*> K is INTEGER
*> The order of the triangular factor T (= the number of
*> elementary reflectors). K >= 1.
+*> \endverbatim
*>
-*> V (input/output) DOUBLE PRECISION array, dimension
+*> \param[in,out] V
+*> \verbatim
+*> V is DOUBLE PRECISION array, dimension
*> (LDV,K) if STOREV = 'C'
*> (LDV,N) if STOREV = 'R'
*> The matrix V. See further details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> TAU (input) DOUBLE PRECISION array, dimension (K)
+*> \param[in] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (K)
*> TAU(i) must contain the scalar factor of the elementary
*> reflector H(i).
+*> \endverbatim
*>
-*> T (output) DOUBLE PRECISION array, dimension (LDT,K)
+*> \param[out] T
+*> \verbatim
+*> T is DOUBLE PRECISION array, dimension (LDT,K)
*> The k by k triangular factor T of the block reflector.
*> If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
*> lower triangular. The rest of the array is not used.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= K.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The shape of the matrix V and the storage of the vectors which define
*> the H(i) is best illustrated by the following example with n = 5 and
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
*> The base representations are required to suffer very little
*> element growth and consequently define all their eigenvalues to
*> high relative accuracy.
*> \verbatim
*> INFO is INTEGER
*> = 0: successful exit
-*> \endverbatim
-*> \verbatim
+*>
*> > 0: A problem occured in DLARRV.
*> < 0: One of the called subroutines signaled an internal problem.
*> Needs inspection of the corresponding parameter IINFO
*> for further information.
-*> \endverbatim
-*> \verbatim
+*>
*> =-1: Problem in DLARRB when refining a child's eigenvalues.
*> =-2: Problem in DLARRF when computing the RRR of a child.
*> When a child is inside a tight cluster, it can be difficult
*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] STOREV
*> \verbatim
-* reflectors are stored (see also Further Details):
+*> STOREV is CHARACTER*1
+*> Specifies how the vectors which define the elementary
+*> reflectors are stored (see also Further Details):
*> = 'C': columnwise (not supported yet)
*> = 'R': rowwise
+*> \endverbatim
*>
-*> N (input) INTEGER
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
*> The order of the block reflector H. N >= 0.
+*> \endverbatim
*>
-*> K (input) INTEGER
+*> \param[in] K
+*> \verbatim
+*> K is INTEGER
*> The order of the triangular factor T (= the number of
*> elementary reflectors). K >= 1.
+*> \endverbatim
*>
-*> V (input/output) DOUBLE PRECISION array, dimension
+*> \param[in,out] V
+*> \verbatim
+*> V is DOUBLE PRECISION array, dimension
*> (LDV,K) if STOREV = 'C'
*> (LDV,N) if STOREV = 'R'
*> The matrix V. See further details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> TAU (input) DOUBLE PRECISION array, dimension (K)
+*> \param[in] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (K)
*> TAU(i) must contain the scalar factor of the elementary
*> reflector H(i).
+*> \endverbatim
*>
-*> T (output) DOUBLE PRECISION array, dimension (LDT,K)
+*> \param[out] T
+*> \verbatim
+*> T is DOUBLE PRECISION array, dimension (LDT,K)
*> The k by k triangular factor T of the block reflector.
*> If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
*> lower triangular. The rest of the array is not used.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= K.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> Based on contributions by
*> A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville, USA
*> \param[in] CTO
*> \verbatim
*> CTO is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> The matrix A is multiplied by CTO/CFROM. A(I,J) is computed
*> without over/underflow if the final result CTO*A(I,J)/CFROM
*> can be represented without over/underflow. CFROM must be
*> PP=0 for ping, PP=1 for pong.
*> \endverbatim
*>
-*> \param[in] NOIN
+*> \param[in] N0IN
*> \verbatim
-*> NOIN is INTEGER
+*> N0IN is INTEGER
*> The value of N0 at start of EIGTEST.
*> \endverbatim
*>
*> The number of rows and columns to be reduced.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> 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 UPLO = 'U', the last NB columns have been reduced to
+*> tridiagonal form, with the diagonal elements overwriting
+*> the diagonal elements of A; the elements above the diagonal
+*> with the array TAU, represent the orthogonal matrix Q as a
+*> product of elementary reflectors;
+*> if UPLO = 'L', the first NB columns have been reduced to
+*> tridiagonal form, with the diagonal elements overwriting
+*> the diagonal elements of A; the elements below the diagonal
+*> with the array TAU, represent the orthogonal matrix Q as a
+*> product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= (1,N).
+*> \endverbatim
*>
-*> E (output) DOUBLE PRECISION array, dimension (N-1)
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (N-1)
*> If UPLO = 'U', E(n-nb:n-1) contains the superdiagonal
*> elements of the last NB columns of the reduced matrix;
*> if UPLO = 'L', E(1:nb) contains the subdiagonal elements of
*> the first NB columns of the reduced matrix.
+*> \endverbatim
*>
-*> TAU (output) DOUBLE PRECISION array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (N-1)
*> The scalar factors of the elementary reflectors, stored in
*> TAU(n-nb:n-1) if UPLO = 'U', and in TAU(1:nb) if UPLO = 'L'.
*> See Further Details.
+*> \endverbatim
*>
-*> W (output) DOUBLE PRECISION array, dimension (LDW,NB)
+*> \param[out] W
+*> \verbatim
+*> W is DOUBLE PRECISION array, dimension (LDW,NB)
*> The n-by-nb matrix W required to update the unreduced part
*> of A.
+*> \endverbatim
*>
-*> LDW (input) INTEGER
+*> \param[in] LDW
+*> \verbatim
+*> LDW is INTEGER
*> The leading dimension of the array W. LDW >= max(1,N).
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> The number of columns in X11 and X21. 0 <= Q <= M.
*> \endverbatim
*>
-*> \param[in,out] X
+*> \param[in,out] X11
*> \verbatim
-*> X is DOUBLE PRECISION array, dimension (LDX,M)
-*> On entry, the orthogonal matrix whose CSD is desired.
+*> X11 is DOUBLE PRECISION array, dimension (LDX11,Q)
+*> On entry, part of the orthogonal matrix whose CSD is desired.
*> \endverbatim
*>
-*> \param[in] LDX
+*> \param[in] LDX11
*> \verbatim
-*> LDX is INTEGER
-*> The leading dimension of X. LDX >= MAX(1,M).
+*> LDX11 is INTEGER
+*> The leading dimension of X11. LDX11 >= MAX(1,P).
+*> \endverbatim
+*>
+*> \param[in,out] X12
+*> \verbatim
+*> X12 is DOUBLE PRECISION array, dimension (LDX12,M-Q)
+*> On entry, part of the orthogonal matrix whose CSD is desired.
+*> \endverbatim
+*>
+*> \param[in] LDX12
+*> \verbatim
+*> LDX12 is INTEGER
+*> The leading dimension of X12. LDX12 >= MAX(1,P).
+*> \endverbatim
+*>
+*> \param[in,out] X21
+*> \verbatim
+*> X21 is DOUBLE PRECISION array, dimension (LDX21,Q)
+*> On entry, part of the orthogonal matrix whose CSD is desired.
+*> \endverbatim
+*>
+*> \param[in] LDX21
+*> \verbatim
+*> LDX21 is INTEGER
+*> The leading dimension of X11. LDX21 >= MAX(1,M-P).
+*> \endverbatim
+*>
+*> \param[in,out] X22
+*> \verbatim
+*> X22 is DOUBLE PRECISION array, dimension (LDX22,M-Q)
+*> On entry, part of the orthogonal matrix whose CSD is desired.
+*> \endverbatim
+*>
+*> \param[in] LDX22
+*> \verbatim
+*> LDX22 is INTEGER
+*> The leading dimension of X11. LDX22 >= MAX(1,M-P).
*> \endverbatim
*>
*> \param[out] THETA
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> ILO and IHI must have the same values as in the previous call
*> of DGEHRD. Q is equal to the unit matrix except in the
*> submatrix Q(ilo+1:ihi,ilo+1:ihi).
*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] A
*> \verbatim
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> ILO and IHI must have the same values as in the previous call
*> of DGEHRD. Q is equal to the unit matrix except in the
*> submatrix Q(ilo+1:ihi,ilo+1:ihi).
*> if SIDE = 'R', then 1 <= ILO <= IHI <= N, if N > 0, and
*> ILO = 1 and IHI = 0, if N = 0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] A
*> \verbatim
*> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd).
*> \endverbatim
+*> \verbatim
+*> On exit, if INFO = 0, the factor S from the split Cholesky
+*> factorization A = S**T*S. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDAB
+*> \verbatim
+*> LDAB is INTEGER
+*> The leading dimension of the array AB. LDAB >= KD+1.
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> > 0: if INFO = i, the factorization could not be completed,
+*> because the updated element a(i,i) was negative; the
+*> matrix A is not positive definite.
+*> \endverbatim
*>
*
* Authors
* ===============
*>\details \b Further \b Details
*> \verbatim
-* factorization A = S**T*S. See Further Details.
-*>
-*> LDAB (input) INTEGER
-*> The leading dimension of the array AB. LDAB >= KD+1.
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> > 0: if INFO = i, the factorization could not be completed,
-*> because the updated element a(i,i) was negative; the
-*> matrix A is not positive definite.
-*>
*>
*> The band storage scheme is illustrated by the following example, when
*> N = 7, KD = 2:
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> The packed storage scheme is illustrated by the following example
*> when N = 4, UPLO = 'U':
*> \param[in] VL
*> \verbatim
*> VL is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
-*> \brief <b> DSGESV computes the solution to system of linear equations A * X = B for GE matrices</b>
+*> \brief <b> DSGESV computes the solution to system of linear equations A * X = B for GE matrices</b> (mixed precision with iterative refinement)
*
* =========== DOCUMENTATION ===========
*
*> \param[in] VL
*> \verbatim
*> VL is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] AP
+*> \verbatim
+*> AP is DOUBLE PRECISION array, dimension (N*(N+1)/2)
+*> On entry, the upper or lower triangle of the symmetric matrix
+*> A, packed columnwise in a linear array. The j-th column of A
+*> is stored in the array AP as follows:
+*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
+*> if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.
+*> On exit, if UPLO = 'U', the diagonal and first superdiagonal
+*> of A are overwritten by the corresponding elements of the
+*> tridiagonal matrix T, and the elements above the first
+*> superdiagonal, with the array TAU, represent the orthogonal
+*> matrix Q as a product of elementary reflectors; if UPLO
+*> = 'L', the diagonal and first subdiagonal of A are over-
+*> written by the corresponding elements of the tridiagonal
+*> matrix T, and the elements below the first subdiagonal, with
+*> the array TAU, represent the orthogonal matrix Q as a product
+*> of elementary reflectors. See Further Details.
+*> \endverbatim
+*>
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (N)
+*> The diagonal elements of the tridiagonal matrix T:
+*> D(i) = A(i,i).
+*> \endverbatim
+*>
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (N-1)
+*> The off-diagonal elements of the tridiagonal matrix T:
+*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (N-1)
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* of elementary reflectors. See Further Details.
-*>
-*> D (output) DOUBLE PRECISION array, dimension (N)
-*> The diagonal elements of the tridiagonal matrix T:
-*> D(i) = A(i,i).
-*>
-*> E (output) DOUBLE PRECISION array, dimension (N-1)
-*> The off-diagonal elements of the tridiagonal matrix T:
-*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
-*>
-*> TAU (output) DOUBLE PRECISION array, dimension (N-1)
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> \param[in] VL
*> \verbatim
*> VL is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. Eigenvalues less than or equal
*> to VL, or greater than VU, will not be returned. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
*> \param[in] VL
*> \verbatim
*> VL is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
*> \param[in] VL
*> \verbatim
*> VL is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] M
*> \verbatim
*> WORK is DOUBLE PRECISION array, dimension (N)
*> \endverbatim
*>
-*> \param[in] LWORK
-*> \verbatim
-*> LWORK is INTEGER
-*> The length of WORK. LWORK >=1.
-*> LWORK = N
-*> \endverbatim
-*> \verbatim
-*> If LWORK = -1, then a workspace query is assumed; the routine
-*> only calculates the optimal size of the WORK array, returns
-*> this value as the first entry of the WORK array, and no error
-*> message related to LWORK is issued by XERBLA.
-*> \endverbatim
-*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> Reference: Livne, O.E. and Golub, G.H., "Scaling by Binormalization",
*> Numerical Algorithms, vol. 35, no. 1, pp. 97-120, January 2004.
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> 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 UPLO = 'U', the diagonal and first superdiagonal
+*> of A are overwritten by the corresponding elements of the
+*> tridiagonal matrix T, and the elements above the first
+*> superdiagonal, with the array TAU, represent the orthogonal
+*> matrix Q as a product of elementary reflectors; if UPLO
+*> = 'L', the diagonal and first subdiagonal of A are over-
+*> written by the corresponding elements of the tridiagonal
+*> matrix T, and the elements below the first subdiagonal, with
+*> the array TAU, represent the orthogonal matrix Q as a product
+*> of elementary reflectors. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
+*>
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (N)
+*> The diagonal elements of the tridiagonal matrix T:
+*> D(i) = A(i,i).
+*> \endverbatim
+*>
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (N-1)
+*> The off-diagonal elements of the tridiagonal matrix T:
+*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (N-1)
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* of elementary reflectors. See Further Details.
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
-*>
-*> D (output) DOUBLE PRECISION array, dimension (N)
-*> The diagonal elements of the tridiagonal matrix T:
-*> D(i) = A(i,i).
-*>
-*> E (output) DOUBLE PRECISION array, dimension (N-1)
-*> The off-diagonal elements of the tridiagonal matrix T:
-*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
-*>
-*> TAU (output) DOUBLE PRECISION array, dimension (N-1)
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value.
-*>
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleSYcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* of elementary reflectors. See Further Details.
+*> 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 UPLO = 'U', the diagonal and first superdiagonal
+*> of A are overwritten by the corresponding elements of the
+*> tridiagonal matrix T, and the elements above the first
+*> superdiagonal, with the array TAU, represent the orthogonal
+*> matrix Q as a product of elementary reflectors; if UPLO
+*> = 'L', the diagonal and first subdiagonal of A are over-
+*> written by the corresponding elements of the tridiagonal
+*> matrix T, and the elements below the first subdiagonal, with
+*> the array TAU, represent the orthogonal matrix Q as a product
+*> of elementary reflectors. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> D (output) DOUBLE PRECISION array, dimension (N)
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (N)
*> The diagonal elements of the tridiagonal matrix T:
*> D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) DOUBLE PRECISION array, dimension (N-1)
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (N-1)
*> The off-diagonal elements of the tridiagonal matrix T:
*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
+*> \endverbatim
*>
-*> TAU (output) DOUBLE PRECISION array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (N-1)
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= 1.
*> For optimum performance LWORK >= N*NB, where NB is the
*> optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleSYcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> \param[out] ALPHAR
*> \verbatim
*> ALPHAR is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*>
*> \param[out] ALPHAI
*> \verbatim
*> ALPHAI is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*>
*> \param[out] BETA
*> \verbatim
*> BETA is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> On exit, (ALPHAR(j) + ALPHAI(j)*i)/BETA(j), j=1,...,N, will
*> be the generalized eigenvalues. ALPHAR(j) + ALPHAI(j)*i
*> and BETA(j),j=1,...,N are the diagonals of the complex Schur
*> positive, then the j-th and (j+1)-st eigenvalues are a
*> complex conjugate pair, with ALPHAI(j+1) negative.
*> \endverbatim
-*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] Q
*> \verbatim
*> \param[out] PL
*> \verbatim
*> PL is DOUBLE PRECISION
+*> \endverbatim
+
*> \param[out] PR
*> \verbatim
*> PR is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> If IJOB = 1, 4 or 5, PL, PR are lower bounds on the
*> reciprocal of the norm of "projections" onto left and right
*> eigenspaces with respect to the selected cluster.
*> If M = 0 or M = N, PL = PR = 1.
*> If IJOB = 0, 2 or 3, PL and PR are not referenced.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] DIF
*> \verbatim
*> The number of columns of the matrices A and B. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] K
+*> \verbatim
+*> K is INTEGER
+*> \endverbatim
+*>
+*> \param[in] L
+*> \verbatim
+*> L is INTEGER
+*> \endverbatim
*> \verbatim
-* See Further Details.
+*> K and L specify the subblocks in the input matrices A and B:
+*> A23 = A(K+1:MIN(K+L,M),N-L+1:N) and B13 = B(1:L,N-L+1:N)
+*> of A and B, whose GSVD is going to be computed by DTGSJA.
+*> See Further Details.
+*> \endverbatim
*>
-*> A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
*> On entry, the M-by-N matrix A.
*> On exit, A(N-K+1:N,1:MIN(K+L,M) ) contains the triangular
*> matrix R or part of R. See Purpose for details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> B (input/output) DOUBLE PRECISION array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is DOUBLE PRECISION array, dimension (LDB,N)
*> On entry, the P-by-N matrix B.
*> On exit, if necessary, B(M-K+1:L,N+M-K-L+1:N) contains
*> a part of R. See Purpose for details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,P).
+*> \endverbatim
*>
-*> TOLA (input) DOUBLE PRECISION
-*> TOLB (input) DOUBLE PRECISION
+*> \param[in] TOLA
+*> \verbatim
+*> TOLA is DOUBLE PRECISION
+*> \endverbatim
+*>
+*> \param[in] TOLB
+*> \verbatim
+*> TOLB is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> TOLA and TOLB are the convergence criteria for the Jacobi-
*> Kogbetliantz iteration procedure. Generally, they are the
*> same as used in the preprocessing step, say
*> TOLA = max(M,N)*norm(A)*MAZHEPS,
*> TOLB = max(P,N)*norm(B)*MAZHEPS.
+*> \endverbatim
*>
-*> ALPHA (output) DOUBLE PRECISION array, dimension (N)
-*> BETA (output) DOUBLE PRECISION array, dimension (N)
+*> \param[out] ALPHA
+*> \verbatim
+*> ALPHA is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] BETA
+*> \verbatim
+*> BETA is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> On exit, ALPHA and BETA contain the generalized singular
*> value pairs of A and B;
*> ALPHA(1:K) = 1,
*> Furthermore, if K+L < N,
*> ALPHA(K+L+1:N) = 0 and
*> BETA(K+L+1:N) = 0.
+*> \endverbatim
*>
-*> U (input/output) DOUBLE PRECISION array, dimension (LDU,M)
+*> \param[in,out] U
+*> \verbatim
+*> U is DOUBLE PRECISION array, dimension (LDU,M)
*> On entry, if JOBU = 'U', U must contain a matrix U1 (usually
*> the orthogonal matrix returned by DGGSVP).
*> On exit,
*> if JOBU = 'I', U contains the orthogonal matrix U;
*> if JOBU = 'U', U contains the product U1*U.
*> If JOBU = 'N', U is not referenced.
+*> \endverbatim
*>
-*> LDU (input) INTEGER
+*> \param[in] LDU
+*> \verbatim
+*> LDU is INTEGER
*> The leading dimension of the array U. LDU >= max(1,M) if
*> JOBU = 'U'; LDU >= 1 otherwise.
+*> \endverbatim
*>
-*> V (input/output) DOUBLE PRECISION array, dimension (LDV,P)
+*> \param[in,out] V
+*> \verbatim
+*> V is DOUBLE PRECISION array, dimension (LDV,P)
*> On entry, if JOBV = 'V', V must contain a matrix V1 (usually
*> the orthogonal matrix returned by DGGSVP).
*> On exit,
*> if JOBV = 'I', V contains the orthogonal matrix V;
*> if JOBV = 'V', V contains the product V1*V.
*> If JOBV = 'N', V is not referenced.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V. LDV >= max(1,P) if
*> JOBV = 'V'; LDV >= 1 otherwise.
+*> \endverbatim
*>
-*> Q (input/output) DOUBLE PRECISION array, dimension (LDQ,N)
+*> \param[in,out] Q
+*> \verbatim
+*> Q is DOUBLE PRECISION array, dimension (LDQ,N)
*> On entry, if JOBQ = 'Q', Q must contain a matrix Q1 (usually
*> the orthogonal matrix returned by DGGSVP).
*> On exit,
*> if JOBQ = 'I', Q contains the orthogonal matrix Q;
*> if JOBQ = 'Q', Q contains the product Q1*Q.
*> If JOBQ = 'N', Q is not referenced.
+*> \endverbatim
*>
-*> LDQ (input) INTEGER
+*> \param[in] LDQ
+*> \verbatim
+*> LDQ is INTEGER
*> The leading dimension of the array Q. LDQ >= max(1,N) if
*> JOBQ = 'Q'; LDQ >= 1 otherwise.
+*> \endverbatim
*>
-*> WORK (workspace) DOUBLE PRECISION array, dimension (2*N)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (2*N)
+*> \endverbatim
*>
-*> NCYCLE (output) INTEGER
+*> \param[out] NCYCLE
+*> \verbatim
+*> NCYCLE is INTEGER
*> The number of cycles required for convergence.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
*> = 1: the procedure does not converge after MAXIT cycles.
+*> \endverbatim
*>
+*> \verbatim
*> Internal Parameters
*> ===================
*>
*> MAXIT specifies the total loops that the iterative procedure
*> may take. If after MAXIT cycles, the routine fails to
*> converge, we return INFO = 1.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> DTGSJA essentially uses a variant of Kogbetliantz algorithm to reduce
*> min(L,M-K)-by-L triangular (or trapezoidal) matrix A23 and L-by-L
*> \verbatim
*> N is INTEGER
*> The number of columns of the matrix B. N >= 0.
+*> \endverbatim
*>
*> \param[in] K
*> \verbatim
*> The number of elementary reflectors whose product defines
*> the matrix Q.
*> \endverbatim
-*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* K >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The order of the trapezoidal part of V.
+*> K >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> NB (input) INTEGER
+*> \param[in] NB
+*> \verbatim
+*> NB is INTEGER
*> The block size used for the storage of T. K >= NB >= 1.
*> This must be the same value of NB used to generate T
*> in CTPQRT.
+*> \endverbatim
*>
-*> V (input) DOUBLE PRECISION array, dimension (LDA,K)
+*> \param[in] V
+*> \verbatim
+*> V is DOUBLE PRECISION array, dimension (LDA,K)
*> The i-th column must contain the vector which defines the
*> elementary reflector H(i), for i = 1,2,...,k, as returned by
*> CTPQRT in B. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A.
-*> If SIDE = 'L', LDA >= max(1,M);
-*> if SIDE = 'R', LDA >= max(1,N).
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
+*> The leading dimension of the array V.
+*> If SIDE = 'L', LDV >= max(1,M);
+*> if SIDE = 'R', LDV >= max(1,N).
+*> \endverbatim
*>
-*> T (input) DOUBLE PRECISION array, dimension (LDT,K)
+*> \param[in] T
+*> \verbatim
+*> T is DOUBLE PRECISION array, dimension (LDT,K)
*> The upper triangular factors of the block reflectors
*> as returned by CTPQRT, stored as a NB-by-K matrix.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
*>
-*> A (input/output) DOUBLE PRECISION array, dimension
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension
*> (LDA,N) if SIDE = 'L' or
*> (LDA,K) if SIDE = 'R'
*> On entry, the K-by-N or M-by-K matrix A.
*> On exit, A is overwritten by the corresponding block of
*> Q*C or Q**T*C or C*Q or C*Q**T. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A.
*> If SIDE = 'L', LDC >= max(1,K);
*> If SIDE = 'R', LDC >= max(1,M).
+*> \endverbatim
*>
-*> B (input/output) DOUBLE PRECISION array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is DOUBLE PRECISION array, dimension (LDB,N)
*> On entry, the M-by-N matrix B.
*> On exit, B is overwritten by the corresponding block of
*> Q*C or Q**T*C or C*Q or C*Q**T. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B.
*> LDB >= max(1,M).
+*> \endverbatim
*>
-*> WORK (workspace/output) DOUBLE PRECISION array. The dimension of WORK is
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array. The dimension of WORK is
*> N*NB if SIDE = 'L', or M*NB if SIDE = 'R'.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The columns of the pentagonal matrix V contain the elementary reflectors
*> H(1), H(2), ..., H(K); V is composed of a rectangular block V1 and a
*> N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* MIN(M,N) >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The number of rows of the upper trapezoidal part of B.
+*> MIN(M,N) >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> NB (input) INTEGER
+*> \param[in] NB
+*> \verbatim
+*> NB is INTEGER
*> The block size to be used in the blocked QR. N >= NB >= 1.
+*> \endverbatim
*>
-*> A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
*> On entry, the upper triangular N-by-N matrix A.
*> On exit, the elements on and above the diagonal of the array
*> contain the upper triangular matrix R.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> B (input/output) DOUBLE PRECISION array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is DOUBLE PRECISION array, dimension (LDB,N)
*> On entry, the pentagonal M-by-N matrix B. The first M-L rows
*> are rectangular, and the last L rows are upper trapezoidal.
*> On exit, B contains the pentagonal matrix V. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,M).
+*> \endverbatim
*>
-*> T (output) DOUBLE PRECISION array, dimension (LDT,N)
+*> \param[out] T
+*> \verbatim
+*> T is DOUBLE PRECISION array, dimension (LDT,N)
*> The upper triangular block reflectors stored in compact form
*> as a sequence of upper triangular blocks. See Further Details.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
*>
-*> WORK (workspace) DOUBLE PRECISION array, dimension (NB*N)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (NB*N)
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
-*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*> The input matrix C is a (N+M)-by-N matrix
*>
*> C = [ A ]
*> N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* MIN(M,N) >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The number of rows of the upper trapezoidal part of B.
+*> MIN(M,N) >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
*> On entry, the upper triangular N-by-N matrix A.
*> On exit, the elements on and above the diagonal of the array
*> contain the upper triangular matrix R.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> B (input/output) DOUBLE PRECISION array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is DOUBLE PRECISION array, dimension (LDB,N)
*> On entry, the pentagonal M-by-N matrix B. The first M-L rows
*> are rectangular, and the last L rows are upper trapezoidal.
*> On exit, B contains the pentagonal matrix V. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,M).
+*> \endverbatim
*>
-*> T (output) DOUBLE PRECISION array, dimension (LDT,N)
+*> \param[out] T
+*> \verbatim
+*> T is DOUBLE PRECISION array, dimension (LDT,N)
*> The N-by-N upper triangular factor T of the block reflector.
*> See Further Details.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= max(1,N)
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The input matrix C is a (N+M)-by-N matrix
*>
*> K >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* K >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The order of the trapezoidal part of V.
+*> K >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> V (input) DOUBLE PRECISION array, dimension
+*> \param[in] V
+*> \verbatim
+*> V is DOUBLE PRECISION array, dimension
*> (LDV,K) if STOREV = 'C'
*> (LDV,M) if STOREV = 'R' and SIDE = 'L'
*> (LDV,N) if STOREV = 'R' and SIDE = 'R'
*> The pentagonal matrix V, which contains the elementary reflectors
*> H(1), H(2), ..., H(K). See Further Details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
*> if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
*> if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> T (input) DOUBLE PRECISION array, dimension (LDT,K)
+*> \param[in] T
+*> \verbatim
+*> T is DOUBLE PRECISION array, dimension (LDT,K)
*> The triangular K-by-K matrix T in the representation of the
*> block reflector.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T.
*> LDT >= K.
+*> \endverbatim
*>
-*> A (input/output) DOUBLE PRECISION array, dimension
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension
*> (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R'
*> On entry, the K-by-N or M-by-K matrix A.
*> On exit, A is overwritten by the corresponding block of
*> H*C or H**T*C or C*H or C*H**T. See Futher Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A.
*> If SIDE = 'L', LDC >= max(1,K);
*> If SIDE = 'R', LDC >= max(1,M).
+*> \endverbatim
*>
-*> B (input/output) DOUBLE PRECISION array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is DOUBLE PRECISION array, dimension (LDB,N)
*> On entry, the M-by-N matrix B.
*> On exit, B is overwritten by the corresponding block of
*> H*C or H**T*C or C*H or C*H**T. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B.
*> LDB >= max(1,M).
+*> \endverbatim
*>
-*> WORK (workspace) DOUBLE PRECISION array, dimension
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension
*> (LDWORK,N) if SIDE = 'L',
*> (LDWORK,K) if SIDE = 'R'.
+*> \endverbatim
*>
-*> LDWORK (input) INTEGER
+*> \param[in] LDWORK
+*> \verbatim
+*> LDWORK is INTEGER
*> The leading dimension of the array WORK.
*> If SIDE = 'L', LDWORK >= K;
*> if SIDE = 'R', LDWORK >= M.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix C is a composite matrix formed from blocks A and B.
*> The block B is of size M-by-N; if SIDE = 'R', A is of size M-by-K,
*> \param[in,out] IFST
*> \verbatim
*> IFST is INTEGER
+*> \endverbatim
+*>
*> \param[in,out] ILST
*> \verbatim
*> ILST is INTEGER
+*> \endverbatim
+*> \verbatim
*> Specify the reordering of the diagonal blocks of T.
*> The block with row index IFST is moved to row ILST, by a
*> sequence of transpositions between adjacent blocks.
*> position (which may differ from its input value by +1 or -1).
*> 1 <= IFST <= N; 1 <= ILST <= N.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] WORK
*> \verbatim
*> \param[out] WR
*> \verbatim
*> WR is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
*> \param[out] WI
*> \verbatim
*> WI is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> The real and imaginary parts, respectively, of the reordered
*> eigenvalues of T. The eigenvalues are stored in the same
*> order as on the diagonal of T, with WR(i) = T(i,i) and, if
*> sufficiently ill-conditioned, then its value may differ
*> significantly from its value before reordering.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] M
*> \verbatim
*> partially reduced top-right block.
*> \endverbatim
*>
+*> \param[out] B21D
+*> \verbatim
+*> B21D is REAL array, dimension (Q)
+*> When CBBCSD converges, B21D contains the negative sines of
+*> THETA(1), ..., THETA(Q). If CBBCSD fails to converge, then
+*> B21D contains the diagonal of the partially reduced bottom-left
+*> block.
+*> \endverbatim
+*>
+*> \param[out] B21E
+*> \verbatim
+*> B21E is REAL array, dimension (Q-1)
+*> When CBBCSD converges, B21E contains zeros. If CBBCSD fails
+*> to converge, then B21E contains the subdiagonal of the
+*> partially reduced bottom-left block.
+*> \endverbatim
+*>
+*> \param[out] B22D
+*> \verbatim
+*> B22D is REAL array, dimension (Q)
+*> When CBBCSD converges, B22D contains the negative sines of
+*> THETA(1), ..., THETA(Q). If CBBCSD fails to converge, then
+*> B22D contains the diagonal of the partially reduced bottom-right
+*> block.
+*> \endverbatim
+*>
+*> \param[out] B22E
+*> \verbatim
+*> B22E is REAL array, dimension (Q-1)
+*> When CBBCSD converges, B22E contains zeros. If CBBCSD fails
+*> to converge, then B22E contains the subdiagonal of the
+*> partially reduced bottom-right block.
+*> \endverbatim
+*>
*> \param[out] WORK
*> \verbatim
*> WORK is REAL array, dimension (MAX(1,LWORK))
-*> \brief <b> SGBSV computes the solution to system of linear equations A * X = B for GB matrices</b>
+*> \brief <b> SGBSV computes the solution to system of linear equations A * X = B for GB matrices</b> (simple driver)
*
* =========== DOCUMENTATION ===========
*
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is REAL array, dimension (LDA,N)
+*> On entry, the input matrix A.
+*> On exit, A is overwritten by the balanced matrix.
+*> If JOB = 'N', A is not referenced.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> ILO (output) INTEGER
-*>
-*> IHI (output) INTEGER
+*> \param[out] ILO
+*> \verbatim
+*> ILO is INTEGER
+*> \endverbatim
+*> \param[out] IHI
+*> \verbatim
+*> IHI is INTEGER
*> ILO and IHI are set to integers such that on exit
*> A(i,j) = 0 if i > j and j = 1,...,ILO-1 or I = IHI+1,...,N.
*> If JOB = 'N' or 'S', ILO = 1 and IHI = N.
+*> \endverbatim
*>
-*> SCALE (output) REAL array, dimension (N)
+*> \param[out] SCALE
+*> \verbatim
+*> SCALE is REAL array, dimension (N)
*> Details of the permutations and scaling factors applied to
*> A. If P(j) is the index of the row and column interchanged
*> with row and column j and D(j) is the scaling factor
*> = P(j) for j = IHI+1,...,N.
*> The order in which the interchanges are made is N to IHI+1,
*> then 1 to ILO-1.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit.
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The permutations consist of row and column interchanges which put
*> the matrix in the form
*> The number of columns in the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is REAL array, dimension (LDA,N)
+*> On entry, the m by n general matrix to be reduced.
+*> On exit,
+*> if m >= n, the diagonal and the first superdiagonal are
+*> overwritten with the upper bidiagonal matrix B; the
+*> elements below the diagonal, with the array TAUQ, represent
+*> the orthogonal matrix Q as a product of elementary
+*> reflectors, and the elements above the first superdiagonal,
+*> with the array TAUP, represent the orthogonal matrix P as
+*> a product of elementary reflectors;
+*> if m < n, the diagonal and the first subdiagonal are
+*> overwritten with the lower bidiagonal matrix B; the
+*> elements below the first subdiagonal, with the array TAUQ,
+*> represent the orthogonal matrix Q as a product of
+*> elementary reflectors, and the elements above the diagonal,
+*> with the array TAUP, represent the orthogonal matrix P as
+*> a product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> D (output) REAL array, dimension (min(M,N))
+*> \param[out] D
+*> \verbatim
+*> D is REAL array, dimension (min(M,N))
*> The diagonal elements of the bidiagonal matrix B:
*> D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) REAL array, dimension (min(M,N)-1)
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (min(M,N)-1)
*> The off-diagonal elements of the bidiagonal matrix B:
*> if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1;
*> if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1.
+*> \endverbatim
*>
-*> TAUQ (output) REAL array dimension (min(M,N))
+*> \param[out] TAUQ
+*> \verbatim
+*> TAUQ is REAL array dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix Q. See Further Details.
+*> \endverbatim
*>
-*> TAUP (output) REAL array, dimension (min(M,N))
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is REAL array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix P. See Further Details.
+*> \endverbatim
*>
-*> WORK (workspace) REAL array, dimension (max(M,N))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (max(M,N))
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit.
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrices Q and P are represented as products of elementary
*> reflectors:
*> The number of columns in the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is REAL array, dimension (LDA,N)
+*> On entry, the M-by-N general matrix to be reduced.
+*> On exit,
+*> if m >= n, the diagonal and the first superdiagonal are
+*> overwritten with the upper bidiagonal matrix B; the
+*> elements below the diagonal, with the array TAUQ, represent
+*> the orthogonal matrix Q as a product of elementary
+*> reflectors, and the elements above the first superdiagonal,
+*> with the array TAUP, represent the orthogonal matrix P as
+*> a product of elementary reflectors;
+*> if m < n, the diagonal and the first subdiagonal are
+*> overwritten with the lower bidiagonal matrix B; the
+*> elements below the first subdiagonal, with the array TAUQ,
+*> represent the orthogonal matrix Q as a product of
+*> elementary reflectors, and the elements above the diagonal,
+*> with the array TAUP, represent the orthogonal matrix P as
+*> a product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> D (output) REAL array, dimension (min(M,N))
+*> \param[out] D
+*> \verbatim
+*> D is REAL array, dimension (min(M,N))
*> The diagonal elements of the bidiagonal matrix B:
*> D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) REAL array, dimension (min(M,N)-1)
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (min(M,N)-1)
*> The off-diagonal elements of the bidiagonal matrix B:
*> if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1;
*> if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1.
+*> \endverbatim
*>
-*> TAUQ (output) REAL array dimension (min(M,N))
+*> \param[out] TAUQ
+*> \verbatim
+*> TAUQ is REAL array dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix Q. See Further Details.
+*> \endverbatim
*>
-*> TAUP (output) REAL array, dimension (min(M,N))
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is REAL array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix P. See Further Details.
+*> \endverbatim
*>
-*> WORK (workspace/output) REAL array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The length of the array WORK. LWORK >= max(1,M,N).
*> For optimum performance LWORK >= (M+N)*NB, where NB
*> is the optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrices Q and P are represented as products of elementary
*> reflectors:
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] ILO
+*> \verbatim
+*> ILO is INTEGER
+*> \endverbatim
+*>
+*> \param[in] IHI
*> \verbatim
-* set to 1 and N respectively. See Further Details.
+*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
+*> It is assumed that A is already upper triangular in rows
+*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally
+*> set by a previous call to SGEBAL; otherwise they should be
+*> set to 1 and N respectively. See Further Details.
*> 1 <= ILO <= IHI <= max(1,N).
+*> \endverbatim
*>
-*> A (input/output) REAL array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is REAL array, dimension (LDA,N)
*> On entry, the n by n general matrix to be reduced.
*> On exit, the upper triangle and the first subdiagonal of A
*> are overwritten with the upper Hessenberg matrix H, and the
*> elements below the first subdiagonal, with the array TAU,
*> represent the orthogonal matrix Q as a product of elementary
*> reflectors. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> TAU (output) REAL array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (N-1)
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace) REAL array, dimension (N)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (N)
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit.
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of (ihi-ilo) elementary
*> reflectors
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] ILO
+*> \verbatim
+*> ILO is INTEGER
+*> \endverbatim
+*>
+*> \param[in] IHI
+*> \verbatim
+*> IHI is INTEGER
+*> \endverbatim
*> \verbatim
-* set to 1 and N respectively. See Further Details.
+*> It is assumed that A is already upper triangular in rows
+*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally
+*> set by a previous call to SGEBAL; otherwise they should be
+*> set to 1 and N respectively. See Further Details.
*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0.
+*> \endverbatim
*>
-*> A (input/output) REAL array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is REAL array, dimension (LDA,N)
*> On entry, the N-by-N general matrix to be reduced.
*> On exit, the upper triangle and the first subdiagonal of A
*> are overwritten with the upper Hessenberg matrix H, and the
*> elements below the first subdiagonal, with the array TAU,
*> represent the orthogonal matrix Q as a product of elementary
*> reflectors. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> TAU (output) REAL array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (N-1)
*> The scalar factors of the elementary reflectors (see Further
*> Details). Elements 1:ILO-1 and IHI:N-1 of TAU are set to
*> zero.
+*> \endverbatim
*>
-*> WORK (workspace/output) REAL array, dimension (LWORK)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (LWORK)
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The length of the array WORK. LWORK >= max(1,N).
*> For optimum performance LWORK >= N*NB, where NB is the
*> optimal blocksize.
-*>
+*> \endverbatim
+*> \verbatim
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of (ihi-ilo) elementary
*> reflectors
*> a gap sigma_{r+1} < epsilon * sigma_r in which case the
*> numerical RANK is declared to be r. The SVD is computed with
*> absolute error bounds, but more accurately than with 'A'.
+*> \endverbatim
*>
*> \param[in] JOBU
*> \verbatim
*> = 'W': U may be used as workspace of length M*N. See the description
*> of U.
*> = 'N': U is not computed.
+*> \endverbatim
*>
*> \param[in] JOBV
*> \verbatim
*> = 'W': V may be used as workspace of length N*N. See the description
*> of V.
*> = 'N': V is not computed.
+*> \endverbatim
*>
*> \param[in] JOBR
*> \verbatim
*> ===========================
*> For computing the singular values in the FULL range [SFMIN,BIG]
*> use SGESVJ.
+*> \endverbatim
*>
*> \param[in] JOBT
*> \verbatim
*> matrices is used as workspace if the matrix A is transposed.
*> The implementer can easily remove this constraint and make the
*> code more complicated. See the descriptions of U and V.
+*> \endverbatim
*>
*> \param[in] JOBP
*> \verbatim
*> = 'P': introduce perturbation
*> = 'N': do not perturb
*> \endverbatim
-*> \endverbatim
-*> \endverbatim
-*> \endverbatim
-*> \endverbatim
-*> \endverbatim
*>
*> \param[in] M
*> \verbatim
*> determined to be strictly smaller than N, SCONDA is
*> returned as -1, thus indicating that the smallest
*> singular values might be lost.
-*> \endverbatim
-*> \verbatim
+*>
*> If full SVD is needed, the following two condition numbers are
*> useful for the analysis of the algorithm. They are provied for
*> a developer/implementer who is familiar with the details of
*> the method.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK(4) = an estimate of the scaled condition number of the
*> triangular factor in the first QR factorization.
*> WORK(5) = an estimate of the scaled condition number of the
*> The following two parameters are computed if JOBT .EQ. 'T'.
*> They are provided for a developer/implementer who is familiar
*> with the details of the method.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK(6) = the entropy of A^t*A :: this is the Shannon entropy
*> of diag(A^t*A) / Trace(A^t*A) taken as point in the
*> probability simplex.
*> LWORK is INTEGER
*> Length of WORK to confirm proper allocation of work space.
*> LWORK depends on the job:
-*> \endverbatim
-*> \verbatim
+*>
*> If only SIGMA is needed ( JOBU.EQ.'N', JOBV.EQ.'N' ) and
*> -> .. no scaled condition estimate required (JOBE.EQ.'N'):
*> LWORK >= max(2*M+N,4*N+1,7). This is the minimal requirement.
*> In general, the optimal length LWORK is computed as
*> LWORK >= max(2*M+N,N+LWORK(DGEQP3),N+LWORK(DGEQRF),
*> N+N*N+LWORK(DPOCON),7).
-*> \endverbatim
-*> \verbatim
+*>
*> If SIGMA and the right singular vectors are needed (JOBV.EQ.'V'),
*> -> the minimal requirement is LWORK >= max(2*M+N,4*N+1,7).
*> -> For optimal performance, LWORK >= max(2*M+N,3*N+(N+1)*NB,7),
*> DORMLQ. In general, the optimal length LWORK is computed as
*> LWORK >= max(2*M+N,N+LWORK(DGEQP3), N+LWORK(DPOCON),
*> N+LWORK(DGELQ), 2*N+LWORK(DGEQRF), N+LWORK(DORMLQ)).
-*> \endverbatim
-*> \verbatim
+*>
*> If SIGMA and the left singular vectors are needed
*> -> the minimal requirement is LWORK >= max(2*M+N,4*N+1,7).
*> -> For optimal performance:
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is REAL array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, the elements on and below the diagonal of the array
+*> contain the m by min(m,n) lower trapezoidal matrix L (L is
+*> lower triangular if m <= n); the elements above the diagonal,
+*> with the array TAU, represent the orthogonal matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (M)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* product of elementary reflectors (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) REAL array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) REAL array, dimension (M)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* product of elementary reflectors (see Further Details).
+*> A is REAL array, dimension (LDA,N)
+*> On entry, the M-by-N matrix A.
+*> On exit, the elements on and below the diagonal of the array
+*> contain the m-by-min(m,n) lower trapezoidal matrix L (L is
+*> lower triangular if m <= n); the elements above the diagonal,
+*> with the array TAU, represent the orthogonal matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> TAU (output) REAL array, dimension (min(M,N))
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) REAL array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,M).
*> For optimum performance LWORK >= M*NB, where NB is the
*> optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is REAL array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, if m >= n, the lower triangle of the subarray
+*> A(m-n+1:m,1:n) contains the n by n lower triangular matrix L;
+*> if m <= n, the elements on and below the (n-m)-th
+*> superdiagonal contain the m by n lower trapezoidal matrix L;
+*> the remaining elements, with the array TAU, represent the
+*> orthogonal matrix Q as a product of elementary reflectors
+*> (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) REAL array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) REAL array, dimension (N)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* (see Further Details).
+*> A is REAL array, dimension (LDA,N)
+*> On entry, the M-by-N matrix A.
+*> On exit,
+*> if m >= n, the lower triangle of the subarray
+*> A(m-n+1:m,1:n) contains the N-by-N lower triangular matrix L;
+*> if m <= n, the elements on and below the (n-m)-th
+*> superdiagonal contain the M-by-N lower trapezoidal matrix L;
+*> the remaining elements, with the array TAU, represent the
+*> orthogonal matrix Q as a product of elementary reflectors
+*> (see Further Details).
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> TAU (output) REAL array, dimension (min(M,N))
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) REAL array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N).
*> For optimum performance LWORK >= N*NB, where NB is the
*> optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is REAL array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, the elements on and above the diagonal of the array
+*> contain the min(m,n) by n upper trapezoidal matrix R (R is
+*> upper triangular if m >= n); the elements below the diagonal,
+*> with the array TAU, represent the orthogonal matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* product of elementary reflectors (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) REAL array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) REAL array, dimension (N)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is REAL array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, the elements on and above the diagonal of the array
+*> contain the min(m,n) by n upper trapezoidal matrix R (R is
+*> upper triangular if m >= n); the elements below the diagonal,
+*> with the array TAU, represent the orthogonal matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* product of elementary reflectors (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) REAL array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) REAL array, dimension (N)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
* ===============
*>\details \b Further \b Details
*> \verbatim
-*
*> The matrix V stores the elementary reflectors H(i) in the i-th column
*> below the diagonal. For example, if M=5 and N=3, the matrix V is
*>
*> reflector T; the elements below the diagonal are not used.
*> See below for further details.
*> \endverbatim
+*>
+*> \param[in] LDT
*> \verbatim
-*> LDT (intput) INTEGER
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= max(1,N).
*> \endverbatim
*>
*> reflector T; the elements below the diagonal are not used.
*> See below for further details.
*> \endverbatim
+*>
+*> \param[in] LDT
*> \verbatim
-*> LDT (intput) INTEGER
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= max(1,N).
*> \endverbatim
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realGEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* reflectors (see Further Details).
+*> A is REAL array, dimension (LDA,N)
+*> On entry, the M-by-N matrix A.
+*> On exit,
+*> if m <= n, the upper triangle of the subarray
+*> A(1:m,n-m+1:n) contains the M-by-M upper triangular matrix R;
+*> if m >= n, the elements on and above the (m-n)-th subdiagonal
+*> contain the M-by-N upper trapezoidal matrix R;
+*> the remaining elements, with the array TAU, represent the
+*> orthogonal matrix Q as a product of min(m,n) elementary
+*> reflectors (see Further Details).
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> TAU (output) REAL array, dimension (min(M,N))
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) REAL array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,M).
*> For optimum performance LWORK >= M*NB, where NB is
*> the optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realGEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
-*> \brief <b> SGESV computes the solution to system of linear equations A * X = B for GE matrices</b>
+*> \brief <b> SGESV computes the solution to system of linear equations A * X = B for GE matrices</b> (simple driver)
*
* =========== DOCUMENTATION ===========
*
*> \param[out] X
*> \verbatim
*> X is REAL array, dimension (M)
+*> \endverbatim
+*>
*> \param[out] Y
*> \verbatim
*> Y is REAL array, dimension (P)
-*> On exit, X and Y are the solutions of the GLM problem.
*> \endverbatim
+*> \verbatim
+*> On exit, X and Y are the solutions of the GLM problem.
*> \endverbatim
*>
*> \param[out] WORK
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> ILO and IHI mark the rows and columns of A which are to be
*> reduced. It is assumed that A is already upper triangular
*> in rows and columns 1:ILO-1 and IHI+1:N. ILO and IHI are
*> should be set to 1 and N respectively.
*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] A
*> \verbatim
*> The leading dimension of the array A. LDA >= max(1,N).
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[out] TAUA
*> \verbatim
-* represent the orthogonal matrix Q (see Further Details).
+*> TAUA is REAL array, dimension (min(N,M))
+*> The scalar factors of the elementary reflectors which
+*> represent the orthogonal matrix Q (see Further Details).
+*> \endverbatim
*>
-*> B (input/output) REAL array, dimension (LDB,P)
+*> \param[in,out] B
+*> \verbatim
+*> B is REAL array, dimension (LDB,P)
*> On entry, the N-by-P matrix B.
*> On exit, if N <= P, the upper triangle of the subarray
*> B(1:N,P-N+1:P) contains the N-by-N upper triangular matrix T;
*> elements, with the array TAUB, represent the orthogonal
*> matrix Z as a product of elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,N).
+*> \endverbatim
*>
-*> TAUB (output) REAL array, dimension (min(N,P))
+*> \param[out] TAUB
+*> \verbatim
+*> TAUB is REAL array, dimension (min(N,P))
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix Z (see Further Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) REAL array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N,M,P).
*> For optimum performance LWORK >= max(N,M,P)*max(NB1,NB2,NB3),
*> where NB1 is the optimal blocksize for the QR factorization
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The leading dimension of the array A. LDA >= max(1,M).
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[out] TAUA
*> \verbatim
-* represent the orthogonal matrix Q (see Further Details).
+*> TAUA is REAL array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors which
+*> represent the orthogonal matrix Q (see Further Details).
+*> \endverbatim
*>
-*> B (input/output) REAL array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is REAL array, dimension (LDB,N)
*> On entry, the P-by-N matrix B.
*> On exit, the elements on and above the diagonal of the array
*> contain the min(P,N)-by-N upper trapezoidal matrix T (T is
*> upper triangular if P >= N); the elements below the diagonal,
*> with the array TAUB, represent the orthogonal matrix Z as a
*> product of elementary reflectors (see Further Details).
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,P).
+*> \endverbatim
*>
-*> TAUB (output) REAL array, dimension (min(P,N))
+*> \param[out] TAUB
+*> \verbatim
+*> TAUB is REAL array, dimension (min(P,N))
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix Z (see Further Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) REAL array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N,M,P).
*> For optimum performance LWORK >= max(N,M,P)*max(NB1,NB2,NB3),
*> where NB1 is the optimal blocksize for the RQ factorization
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INF0= -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> \param[out] K
*> \verbatim
*> K is INTEGER
+*> \endverbatim
+*>
*> \param[out] L
*> \verbatim
*> L is INTEGER
+*> \endverbatim
+*> \verbatim
*> On exit, K and L specify the dimension of the subblocks
-*> described in the Purpose section.
+*> described in Purpose.
*> K + L = effective numerical rank of (A**T,B**T)**T.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] A
*> \verbatim
*> \param[out] ALPHA
*> \verbatim
*> ALPHA is REAL array, dimension (N)
+*> \endverbatim
+*>
*> \param[out] BETA
*> \verbatim
*> BETA is REAL array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> On exit, ALPHA and BETA contain the generalized singular
*> value pairs of A and B;
*> ALPHA(1:K) = 1,
*> ALPHA(K+L+1:N) = 0
*> BETA(K+L+1:N) = 0
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] U
*> \verbatim
*> \param[in] TOLA
*> \verbatim
*> TOLA is REAL
+*> \endverbatim
+*>
*> \param[in] TOLB
*> \verbatim
*> TOLB is REAL
+*> \endverbatim
+*> \verbatim
*> TOLA and TOLB are the thresholds to determine the effective
*> numerical rank of matrix B and a subblock of A. Generally,
*> they are set to
*> The size of TOLA and TOLB may affect the size of backward
*> errors of the decomposition.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] K
*> \verbatim
*> K is INTEGER
+*> \endverbatim
+*>
*> \param[out] L
*> \verbatim
*> L is INTEGER
+*> \endverbatim
+*> \verbatim
*> On exit, K and L specify the dimension of the subblocks
*> described in Purpose section.
*> K + L = effective numerical rank of (A**T,B**T)**T.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] U
*> \verbatim
*> \param[in,out] WR
*> \verbatim
*> WR is REAL array, dimension (N)
+*> \endverbatim
+*>
*> \param[in] WI
*> \verbatim
*> WI is REAL array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> On entry, the real and imaginary parts of the eigenvalues of
*> H; a complex conjugate pair of eigenvalues must be stored in
*> consecutive elements of WR and WI.
*> are perturbed slightly in searching for independent
*> eigenvectors.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] VL
*> \verbatim
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> It is assumed that H is already upper triangular in rows
*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally
-*> set by a previous call to SGEBAL, and then passed to SGEHRD
+*> set by a previous call to SGEBAL, and then passed to ZGEHRD
*> when the matrix output by SGEBAL is reduced to Hessenberg
*> form. Otherwise ILO and IHI should be set to 1 and N
*> respectively. If N.GT.0, then 1.LE.ILO.LE.IHI.LE.N.
*> If N = 0, then ILO = 1 and IHI = 0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] H
*> \verbatim
*> \param[out] WR
*> \verbatim
*> WR is REAL array, dimension (N)
+*> \endverbatim
+*>
*> \param[out] WI
*> \verbatim
*> WI is REAL array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> The real and imaginary parts, respectively, of the computed
*> eigenvalues. If two eigenvalues are computed as a complex
*> conjugate pair, they are stored in consecutive elements of
*> diagonal block, WI(i) = sqrt(-H(i+1,i)*H(i,i+1)) and
*> WI(i+1) = -WI(i).
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] Z
*> \verbatim
*> the eigenvalues. Elements 1:ilo-1 and i+1:n of WR
*> and WI contain those eigenvalues which have been
*> successfully computed. (Failures are rare.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and JOB = 'E', then on exit, the
*> remaining unconverged eigenvalues are the eigen-
*> values of the upper Hessenberg matrix rows and
*> columns ILO through INFO of the final, output
*> value of H.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and JOB = 'S', then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (*) (initial value of H)*U = U*(final value of H)
-*> \endverbatim
-*> \verbatim
+*>
*> where U is an orthogonal matrix. The final
*> value of H is upper Hessenberg and quasi-triangular
*> in rows and columns INFO+1 through IHI.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and COMPZ = 'V', then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (final value of Z) = (initial value of Z)*U
-*> \endverbatim
-*> \verbatim
+*>
*> where U is the orthogonal matrix in (*) (regard-
*> less of the value of JOB.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and COMPZ = 'I', then on exit
*> (final value of Z) = U
*> where U is the orthogonal matrix in (*) (regard-
*> less of the value of JOB.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and COMPZ = 'N', then Z is not
*> accessed.
*> \endverbatim
*> matrix B.
*> \endverbatim
*>
-*> \param[in] A
+*> \param[in] AB
*> \verbatim
-*> A is REAL array, dimension (LDA,N)
-*> On entry, the N-by-N matrix A.
+*> AB is REAL array, dimension (LDAB,N)
+*> On entry, the N-by-N matrix AB.
*> \endverbatim
*>
-*> \param[in] LDA
+*> \param[in] LDAB
*> \verbatim
-*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
+*> LDAB is INTEGER
+*> The leading dimension of the array AB. LDAB >= max(1,N).
*> \endverbatim
*>
-*> \param[in] AF
+*> \param[in] AFB
*> \verbatim
-*> AF is REAL array, dimension (LDAF,N)
+*> AFB is REAL array, dimension (LDAFB,N)
*> The factors L and U from the factorization
*> A = P*L*U as computed by SGBTRF.
*> \endverbatim
*>
-*> \param[in] LDAF
+*> \param[in] LDAFB
*> \verbatim
-*> LDAF is INTEGER
-*> The leading dimension of the array AF. LDAF >= max(1,N).
+*> LDAFB is INTEGER
+*> The leading dimension of the array AF. LDAFB >= max(1,N).
*> \endverbatim
*>
*> \param[in] IPIV
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> normwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Normwise relative error in the ith solution vector:
*> max_j (abs(XTRUE(j,i) - X(j,i)))
*> ------------------------------
*> max_j abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the type of error information as described
*> below. There currently are up to three pieces of information
*> returned.
-*> \endverbatim
-*> \verbatim
+*>
*> The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
+*>
*> The second index in ERR_BNDS_NORM(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated normwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> appropriately scaled matrix Z.
*> Let Z = S*A, where S scales each row by a power of the
*> radix so all absolute row sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> componentwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Componentwise relative error in the ith solution vector:
*> abs(XTRUE(j,i) - X(j,i))
*> max_j ----------------------
*> abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the right-hand side i (on which the
*> componentwise relative error depends), and the type of error
*> information as described below. There currently are up to three
*> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
*> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
*> the first (:,N_ERR_BNDS) entries are returned.
-*> \endverbatim
-*> \verbatim
+*>
*> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
+*>
*> The second index in ERR_BNDS_COMP(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated componentwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> current right-hand side and S scales each row of
*> A*diag(x) by a power of the radix so all absolute row
*> sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
* SUBROUTINE SLA_GERFSX_EXTENDED( PREC_TYPE, TRANS_TYPE, N, NRHS, A,
* LDA, AF, LDAF, IPIV, COLEQU, C, B,
* LDB, Y, LDY, BERR_OUT, N_NORMS,
-* ERR_BNDS_NORM, ERR_BNDS_COMP, RES,
+* ERRS_N, ERRS_C, RES,
* AYB, DY, Y_TAIL, RCOND, ITHRESH,
* RTHRESH, DZ_UB, IGNORE_CWISE,
* INFO )
* REAL A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
* $ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
* REAL C( * ), AYB( * ), RCOND, BERR_OUT( * ),
-* $ ERR_BNDS_NORM( NRHS, * ),
-* $ ERR_BNDS_COMP( NRHS, * )
+* $ ERRS_N( NRHS, * ),
+* $ ERRS_C( NRHS, * )
* ..
*
* Purpose
*> and provides error bounds and backward error estimates for the solution.
*> This subroutine is called by SGERFSX to perform iterative refinement.
*> In addition to normwise error bound, the code provides maximum
-*> componentwise error bound if possible. See comments for ERR_BNDS_NORM
-*> and ERR_BNDS_COMP for details of the error bounds. Note that this
+*> componentwise error bound if possible. See comments for ERRS_N
+*> and ERRS_C for details of the error bounds. Note that this
*> subroutine is only resonsible for setting the second fields of
-*> ERR_BNDS_NORM and ERR_BNDS_COMP.
+*> ERRS_N and ERRS_C.
*>
*>\endverbatim
*
*> \param[in] N_NORMS
*> \verbatim
*> N_NORMS is INTEGER
-*> Determines which error bounds to return (see ERR_BNDS_NORM
-*> and ERR_BNDS_COMP).
+*> Determines which error bounds to return (see ERRS_N
+*> and ERRS_C).
*> If N_NORMS >= 1 return normwise error bounds.
*> If N_NORMS >= 2 return componentwise error bounds.
*> \endverbatim
*>
-*> \param[in,out] ERR_BNDS_NORM
+*> \param[in,out] ERRS_N
*> \verbatim
-*> ERR_BNDS_NORM is REAL array, dimension (NRHS, N_ERR_BNDS)
+*> ERRS_N is REAL array, dimension (NRHS, N_ERR_BNDS)
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> normwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Normwise relative error in the ith solution vector:
*> max_j (abs(XTRUE(j,i) - X(j,i)))
*> ------------------------------
*> max_j abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the type of error information as described
*> below. There currently are up to three pieces of information
*> returned.
-*> \endverbatim
-*> \verbatim
-*> The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+*>
+*> The first index in ERRS_N(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
-*> The second index in ERR_BNDS_NORM(:,err) contains the following
+*>
+*> The second index in ERRS_N(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated normwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> appropriately scaled matrix Z.
*> Let Z = S*A, where S scales each row by a power of the
*> radix so all absolute row sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*>
-*> \param[in,out] ERR_BNDS_COMP
+*> \param[in,out] ERRS_C
*> \verbatim
-*> ERR_BNDS_COMP is REAL array, dimension (NRHS, N_ERR_BNDS)
+*> ERRS_C is REAL array, dimension (NRHS, N_ERR_BNDS)
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> componentwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Componentwise relative error in the ith solution vector:
*> abs(XTRUE(j,i) - X(j,i))
*> max_j ----------------------
*> abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the right-hand side i (on which the
*> componentwise relative error depends), and the type of error
*> information as described below. There currently are up to three
*> pieces of information returned for each right-hand side. If
*> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
-*> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+*> ERRS_C is not accessed. If N_ERR_BNDS .LT. 3, then at most
*> the first (:,N_ERR_BNDS) entries are returned.
-*> \endverbatim
-*> \verbatim
-*> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+*>
+*> The first index in ERRS_C(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
-*> The second index in ERR_BNDS_COMP(:,err) contains the following
+*>
+*> The second index in ERRS_C(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated componentwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> current right-hand side and S scales each row of
*> A*diag(x) by a power of the radix so all absolute row
*> sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> permit convergence using approximate factorizations or
*> factorizations other than LU. If the factorization uses a
*> technique other than Gaussian elimination, the guarantees in
-*> ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*> ERRS_N and ERRS_C may no longer be trustworthy.
*> \endverbatim
*>
*> \param[in] RTHRESH
SUBROUTINE SLA_GERFSX_EXTENDED( PREC_TYPE, TRANS_TYPE, N, NRHS, A,
$ LDA, AF, LDAF, IPIV, COLEQU, C, B,
$ LDB, Y, LDY, BERR_OUT, N_NORMS,
- $ ERR_BNDS_NORM, ERR_BNDS_COMP, RES,
+ $ ERRS_N, ERRS_C, RES,
$ AYB, DY, Y_TAIL, RCOND, ITHRESH,
$ RTHRESH, DZ_UB, IGNORE_CWISE,
$ INFO )
REAL A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
REAL C( * ), AYB( * ), RCOND, BERR_OUT( * ),
- $ ERR_BNDS_NORM( NRHS, * ),
- $ ERR_BNDS_COMP( NRHS, * )
+ $ ERRS_N( NRHS, * ),
+ $ ERRS_C( NRHS, * )
* ..
*
* =====================================================================
* Compute error bounds
*
IF (N_NORMS .GE. 1) THEN
- ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ ERRS_N( J, LA_LINRX_ERR_I ) =
$ FINAL_DX_X / (1 - DXRATMAX)
END IF
IF ( N_NORMS .GE. 2 ) THEN
- ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ ERRS_C( J, LA_LINRX_ERR_I ) =
$ FINAL_DZ_Z / (1 - DZRATMAX)
END IF
*
*> The denominator in the relative backward error formula above, i.e.,
*> the matrix abs(op(A_s))*abs(Y) + abs(B_s). The matrices A, Y, and B
*> are from iterative refinement (see sla_gerfsx_extended.f).
+*> \endverbatim
*>
*> \param[out] BERR
*> \verbatim
*> BERR is REAL array, dimension (NRHS)
*> The componentwise relative backward error from the formula above.
*> \endverbatim
-*> \endverbatim
*>
*
* Authors
*> column INFO is exactly 0.
*> \endverbatim
*>
-*> \param[in] NCOLS
-*> \verbatim
-*> NCOLS is INTEGER
-*> The number of columns of the matrix A. NCOLS >= 0.
-*> \endverbatim
-*>
*> \param[in] A
*> \verbatim
*> A is REAL array, dimension (LDA,N)
*> The number of leading rows and columns of A to be reduced.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is REAL array, dimension (LDA,N)
+*> On entry, the m by n general matrix to be reduced.
+*> On exit, the first NB rows and columns of the matrix are
+*> overwritten; the rest of the array is unchanged.
+*> If m >= n, elements on and below the diagonal in the first NB
+*> columns, with the array TAUQ, represent the orthogonal
+*> matrix Q as a product of elementary reflectors; and
+*> elements above the diagonal in the first NB rows, with the
+*> array TAUP, represent the orthogonal matrix P as a product
+*> of elementary reflectors.
+*> If m < n, elements below the diagonal in the first NB
+*> columns, with the array TAUQ, represent the orthogonal
+*> matrix Q as a product of elementary reflectors, and
+*> elements on and above the diagonal in the first NB rows,
+*> with the array TAUP, represent the orthogonal matrix P as
+*> a product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> D (output) REAL array, dimension (NB)
+*> \param[out] D
+*> \verbatim
+*> D is REAL array, dimension (NB)
*> The diagonal elements of the first NB rows and columns of
*> the reduced matrix. D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) REAL array, dimension (NB)
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (NB)
*> The off-diagonal elements of the first NB rows and columns of
*> the reduced matrix.
+*> \endverbatim
*>
-*> TAUQ (output) REAL array dimension (NB)
+*> \param[out] TAUQ
+*> \verbatim
+*> TAUQ is REAL array dimension (NB)
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix Q. See Further Details.
+*> \endverbatim
*>
-*> TAUP (output) REAL array, dimension (NB)
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is REAL array, dimension (NB)
*> The scalar factors of the elementary reflectors which
*> represent the orthogonal matrix P. See Further Details.
+*> \endverbatim
*>
-*> X (output) REAL array, dimension (LDX,NB)
+*> \param[out] X
+*> \verbatim
+*> X is REAL array, dimension (LDX,NB)
*> The m-by-nb matrix X required to update the unreduced part
*> of A.
+*> \endverbatim
*>
-*> LDX (input) INTEGER
+*> \param[in] LDX
+*> \verbatim
+*> LDX is INTEGER
*> The leading dimension of the array X. LDX >= max(1,M).
+*> \endverbatim
*>
-*> Y (output) REAL array, dimension (LDY,NB)
+*> \param[out] Y
+*> \verbatim
+*> Y is REAL array, dimension (LDY,NB)
*> The n-by-nb matrix Y required to update the unreduced part
*> of A.
+*> \endverbatim
*>
-*> LDY (input) INTEGER
+*> \param[in] LDY
+*> \verbatim
+*> LDY is INTEGER
*> The leading dimension of the array Y. LDY >= max(1,N).
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrices Q and P are represented as products of elementary
*> reflectors:
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> Contributed by Nick Higham, University of Manchester.
*> Originally named SONEST, dated March 16, 1988.
*> to update the system.
*> \endverbatim
*>
-*> \param[in] LDS
-*> \verbatim
-*> LDS is INTEGER
-*> The leading dimension of S. LDS >= max(1,K).
-*> \endverbatim
-*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
*> \verbatim
*> X is REAL array, dimension (LDX,NRHS)
*> The N by NRHS matrix X.
+*> \endverbatim
+*>
*> \param[in] LDX
*> \verbatim
*> LDX is INTEGER
*> The leading dimension of the array X. LDX >= max(N,1).
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] BETA
*> \verbatim
*> The number of columns to be reduced.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is REAL array, dimension (LDA,N-K+1)
+*> On entry, the n-by-(n-k+1) general matrix A.
+*> On exit, the elements on and above the k-th subdiagonal in
+*> the first NB columns are overwritten with the corresponding
+*> elements of the reduced matrix; the elements below the k-th
+*> subdiagonal, with the array TAU, represent the matrix Q as a
+*> product of elementary reflectors. The other columns of A are
+*> unchanged. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (NB)
+*> The scalar factors of the elementary reflectors. See Further
+*> Details.
+*> \endverbatim
+*>
+*> \param[out] T
+*> \verbatim
+*> T is REAL array, dimension (LDT,NB)
+*> The upper triangular matrix T.
+*> \endverbatim
+*>
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
+*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
+*>
+*> \param[out] Y
+*> \verbatim
+*> Y is REAL array, dimension (LDY,NB)
+*> The n-by-nb matrix Y.
+*> \endverbatim
+*>
+*> \param[in] LDY
+*> \verbatim
+*> LDY is INTEGER
+*> The leading dimension of the array Y. LDY >= N.
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* unchanged. See Further Details.
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
-*>
-*> TAU (output) REAL array, dimension (NB)
-*> The scalar factors of the elementary reflectors. See Further
-*> Details.
-*>
-*> T (output) REAL array, dimension (LDT,NB)
-*> The upper triangular matrix T.
-*>
-*> LDT (input) INTEGER
-*> The leading dimension of the array T. LDT >= NB.
-*>
-*> Y (output) REAL array, dimension (LDY,NB)
-*> The n-by-nb matrix Y.
-*>
-*> LDY (input) INTEGER
-*> The leading dimension of the array Y. LDY >= N.
-*>
*>
*> The matrix Q is represented as a product of nb elementary reflectors
*>
*> The number of columns to be reduced.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is REAL array, dimension (LDA,N-K+1)
+*> On entry, the n-by-(n-k+1) general matrix A.
+*> On exit, the elements on and above the k-th subdiagonal in
+*> the first NB columns are overwritten with the corresponding
+*> elements of the reduced matrix; the elements below the k-th
+*> subdiagonal, with the array TAU, represent the matrix Q as a
+*> product of elementary reflectors. The other columns of A are
+*> unchanged. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (NB)
+*> The scalar factors of the elementary reflectors. See Further
+*> Details.
+*> \endverbatim
+*>
+*> \param[out] T
+*> \verbatim
+*> T is REAL array, dimension (LDT,NB)
+*> The upper triangular matrix T.
+*> \endverbatim
+*>
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
+*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
+*>
+*> \param[out] Y
+*> \verbatim
+*> Y is REAL array, dimension (LDY,NB)
+*> The n-by-nb matrix Y.
+*> \endverbatim
+*>
+*> \param[in] LDY
+*> \verbatim
+*> LDY is INTEGER
+*> The leading dimension of the array Y. LDY >= N.
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* unchanged. See Further Details.
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
-*>
-*> TAU (output) REAL array, dimension (NB)
-*> The scalar factors of the elementary reflectors. See Further
-*> Details.
-*>
-*> T (output) REAL array, dimension (LDT,NB)
-*> The upper triangular matrix T.
-*>
-*> LDT (input) INTEGER
-*> The leading dimension of the array T. LDT >= NB.
-*>
-*> Y (output) REAL array, dimension (LDY,NB)
-*> The n-by-nb matrix Y.
-*>
-*> LDY (input) INTEGER
-*> The leading dimension of the array Y. LDY >= N.
-*>
*>
*> The matrix Q is represented as a product of nb elementary reflectors
*>
*> the eigenvalues. Elements 1:ilo-1 and i+1:n of WR
*> and WI contain those eigenvalues which have been
*> successfully computed. (Failures are rare.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANT is .FALSE., then on exit,
*> the remaining unconverged eigenvalues are the eigen-
*> values of the upper Hessenberg matrix rows and
*> columns ILO through INFO of the final, output
*> value of H.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (*) (initial value of H)*U = U*(final value of H)
-*> \endverbatim
-*> \verbatim
+*>
*> where U is an orthogonal matrix. The final
*> value of H is upper Hessenberg and quasi-triangular
*> in rows and columns INFO+1 through IHI.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (final value of Z(ILO:IHI,ILOZ:IHIZ)
*> = (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U
-*> \endverbatim
-*> \verbatim
+*>
*> where U is the orthogonal matrix in (*) (regard-
*> less of the value of WANTT.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .FALSE., then Z is not
*> accessed.
*> \endverbatim
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> .GT. 0: if INFO = i, SLAQR4 failed to compute all of
*> the eigenvalues. Elements 1:ilo-1 and i+1:n of WR
*> and WI contain those eigenvalues which have been
*> successfully computed. (Failures are rare.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANT is .FALSE., then on exit,
*> the remaining unconverged eigenvalues are the eigen-
*> values of the upper Hessenberg matrix rows and
*> columns ILO through INFO of the final, output
*> value of H.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (*) (initial value of H)*U = U*(final value of H)
-*> \endverbatim
-*> \verbatim
-*> where U is an orthogonal matrix. The final
-*> value of H is upper Hessenberg and quasi-triangular
-*> in rows and columns INFO+1 through IHI.
-*> \endverbatim
-*> \verbatim
+*>
+*> where U is a orthogonal matrix. The final
+*> value of H is upper Hessenberg and triangular in
+*> rows and columns INFO+1 through IHI.
+*>
*> If INFO .GT. 0 and WANTZ is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (final value of Z(ILO:IHI,ILOZ:IHIZ)
*> = (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U
-*> \endverbatim
-*> \verbatim
+*>
*> where U is the orthogonal matrix in (*) (regard-
*> less of the value of WANTT.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .FALSE., then Z is not
*> accessed.
*> \endverbatim
*> reflectors whose product defines the block reflector).
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] V
*> \verbatim
-* The matrix V. See Further Details.
+*> V is REAL array, dimension
+*> (LDV,K) if STOREV = 'C'
+*> (LDV,M) if STOREV = 'R' and SIDE = 'L'
+*> (LDV,N) if STOREV = 'R' and SIDE = 'R'
+*> The matrix V. See Further Details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
*> if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
*> if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> T (input) REAL array, dimension (LDT,K)
+*> \param[in] T
+*> \verbatim
+*> T is REAL array, dimension (LDT,K)
*> The triangular k by k matrix T in the representation of the
*> block reflector.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= K.
+*> \endverbatim
*>
-*> C (input/output) REAL array, dimension (LDC,N)
+*> \param[in,out] C
+*> \verbatim
+*> C is REAL array, dimension (LDC,N)
*> On entry, the m by n matrix C.
*> On exit, C is overwritten by H*C or H**T*C or C*H or C*H**T.
+*> \endverbatim
*>
-*> LDC (input) INTEGER
+*> \param[in] LDC
+*> \verbatim
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,M).
+*> \endverbatim
*>
-*> WORK (workspace) REAL array, dimension (LDWORK,K)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (LDWORK,K)
+*> \endverbatim
*>
-*> LDWORK (input) INTEGER
+*> \param[in] LDWORK
+*> \verbatim
+*> LDWORK is INTEGER
*> The leading dimension of the array WORK.
*> If SIDE = 'L', LDWORK >= max(1,N);
*> if SIDE = 'R', LDWORK >= max(1,M).
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The shape of the matrix V and the storage of the vectors which define
*> the H(i) is best illustrated by the following example with n = 5 and
*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] STOREV
*> \verbatim
-* reflectors are stored (see also Further Details):
+*> STOREV is CHARACTER*1
+*> Specifies how the vectors which define the elementary
+*> reflectors are stored (see also Further Details):
*> = 'C': columnwise
*> = 'R': rowwise
+*> \endverbatim
*>
-*> N (input) INTEGER
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
*> The order of the block reflector H. N >= 0.
+*> \endverbatim
*>
-*> K (input) INTEGER
+*> \param[in] K
+*> \verbatim
+*> K is INTEGER
*> The order of the triangular factor T (= the number of
*> elementary reflectors). K >= 1.
+*> \endverbatim
*>
-*> V (input/output) REAL array, dimension
+*> \param[in,out] V
+*> \verbatim
+*> V is REAL array, dimension
*> (LDV,K) if STOREV = 'C'
*> (LDV,N) if STOREV = 'R'
*> The matrix V. See further details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> TAU (input) REAL array, dimension (K)
+*> \param[in] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (K)
*> TAU(i) must contain the scalar factor of the elementary
*> reflector H(i).
+*> \endverbatim
*>
-*> T (output) REAL array, dimension (LDT,K)
+*> \param[out] T
+*> \verbatim
+*> T is REAL array, dimension (LDT,K)
*> The k by k triangular factor T of the block reflector.
*> If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
*> lower triangular. The rest of the array is not used.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= K.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The shape of the matrix V and the storage of the vectors which define
*> the H(i) is best illustrated by the following example with n = 5 and
*> Workspace.
*> \endverbatim
*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> Signals processing OK (=0) or failure (=1)
+*> \endverbatim
*
* Authors
* =======
*> \verbatim
*> INFO is INTEGER
*> = 0: successful exit
-*> \endverbatim
-*> \verbatim
+*>
*> > 0: A problem occured in SLARRV.
*> < 0: One of the called subroutines signaled an internal problem.
*> Needs inspection of the corresponding parameter IINFO
*> for further information.
-*> \endverbatim
-*> \verbatim
+*>
*> =-1: Problem in SLARRB when refining a child's eigenvalues.
*> =-2: Problem in SLARRF when computing the RRR of a child.
*> When a child is inside a tight cluster, it can be difficult
*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] STOREV
*> \verbatim
-* reflectors are stored (see also Further Details):
+*> STOREV is CHARACTER*1
+*> Specifies how the vectors which define the elementary
+*> reflectors are stored (see also Further Details):
*> = 'C': columnwise (not supported yet)
*> = 'R': rowwise
+*> \endverbatim
*>
-*> N (input) INTEGER
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
*> The order of the block reflector H. N >= 0.
+*> \endverbatim
*>
-*> K (input) INTEGER
+*> \param[in] K
+*> \verbatim
+*> K is INTEGER
*> The order of the triangular factor T (= the number of
*> elementary reflectors). K >= 1.
+*> \endverbatim
*>
-*> V (input/output) REAL array, dimension
+*> \param[in,out] V
+*> \verbatim
+*> V is REAL array, dimension
*> (LDV,K) if STOREV = 'C'
*> (LDV,N) if STOREV = 'R'
*> The matrix V. See further details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> TAU (input) REAL array, dimension (K)
+*> \param[in] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (K)
*> TAU(i) must contain the scalar factor of the elementary
*> reflector H(i).
+*> \endverbatim
*>
-*> T (output) REAL array, dimension (LDT,K)
+*> \param[out] T
+*> \verbatim
+*> T is REAL array, dimension (LDT,K)
*> The k by k triangular factor T of the block reflector.
*> If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
*> lower triangular. The rest of the array is not used.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= K.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> Based on contributions by
*> A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville, USA
*> \param[in] CTO
*> \verbatim
*> CTO is REAL
+*> \endverbatim
+*> \verbatim
*> The matrix A is multiplied by CTO/CFROM. A(I,J) is computed
*> without over/underflow if the final result CTO*A(I,J)/CFROM
*> can be represented without over/underflow. CFROM must be
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Local Variables: I0:N0 defines a current unreduced segment of Z.
+*> Local Variables: I0:N0 defines a current unreduced segment of Z.
*> The shifts are accumulated in SIGMA. Iteration count is in ITER.
*> Ping-pong is controlled by PP (alternates between 0 and 1).
*>
*> PP=0 for ping, PP=1 for pong.
*> \endverbatim
*>
-*> \param[in] NOIN
+*> \param[in] N0IN
*> \verbatim
-*> NOIN is INTEGER
+*> N0IN is INTEGER
*> The value of N0 at start of EIGTEST.
*> \endverbatim
*>
* ===============
*>\details \b Further \b Details
*> \verbatim
-* CNST1 = 9/16
+*> CNST1 = 9/16
*>
*> \endverbatim
*>
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> A rough bound on x is computed; if that is less than overflow, STBSV
*> is called, otherwise, specific code is used which checks for possible
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> A rough bound on x is computed; if that is less than overflow, STPSV
*> is called, otherwise, specific code is used which checks for possible
*> The number of rows and columns to be reduced.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> 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 UPLO = 'U', the last NB columns have been reduced to
+*> tridiagonal form, with the diagonal elements overwriting
+*> the diagonal elements of A; the elements above the diagonal
+*> with the array TAU, represent the orthogonal matrix Q as a
+*> product of elementary reflectors;
+*> if UPLO = 'L', the first NB columns have been reduced to
+*> tridiagonal form, with the diagonal elements overwriting
+*> the diagonal elements of A; the elements below the diagonal
+*> with the array TAU, represent the orthogonal matrix Q as a
+*> product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= (1,N).
+*> \endverbatim
*>
-*> E (output) REAL array, dimension (N-1)
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (N-1)
*> If UPLO = 'U', E(n-nb:n-1) contains the superdiagonal
*> elements of the last NB columns of the reduced matrix;
*> if UPLO = 'L', E(1:nb) contains the subdiagonal elements of
*> the first NB columns of the reduced matrix.
+*> \endverbatim
*>
-*> TAU (output) REAL array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (N-1)
*> The scalar factors of the elementary reflectors, stored in
*> TAU(n-nb:n-1) if UPLO = 'U', and in TAU(1:nb) if UPLO = 'L'.
*> See Further Details.
+*> \endverbatim
*>
-*> W (output) REAL array, dimension (LDW,NB)
+*> \param[out] W
+*> \verbatim
+*> W is REAL array, dimension (LDW,NB)
*> The n-by-nb matrix W required to update the unreduced part
*> of A.
+*> \endverbatim
*>
-*> LDW (input) INTEGER
+*> \param[in] LDW
+*> \verbatim
+*> LDW is INTEGER
*> The leading dimension of the array W. LDW >= max(1,N).
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup doubleOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> A rough bound on x is computed; if that is less than overflow, STRSV
*> is called, otherwise, specific code is used which checks for possible
*> The number of columns in X11 and X21. 0 <= Q <= M.
*> \endverbatim
*>
-*> \param[in,out] X
+*> \param[in,out] X11
*> \verbatim
-*> X is REAL array, dimension (LDX,M)
-*> On entry, the orthogonal matrix whose CSD is desired.
+*> X11 is REAL array, dimension (LDX11,Q)
+*> On entry, part of the orthogonal matrix whose CSD is desired.
*> \endverbatim
*>
-*> \param[in] LDX
+*> \param[in] LDX11
*> \verbatim
-*> LDX is INTEGER
-*> The leading dimension of X. LDX >= MAX(1,M).
+*> LDX11 is INTEGER
+*> The leading dimension of X11. LDX11 >= MAX(1,P).
+*> \endverbatim
+*>
+*> \param[in,out] X12
+*> \verbatim
+*> X12 is REAL array, dimension (LDX12,M-Q)
+*> On entry, part of the orthogonal matrix whose CSD is desired.
+*> \endverbatim
+*>
+*> \param[in] LDX12
+*> \verbatim
+*> LDX12 is INTEGER
+*> The leading dimension of X12. LDX12 >= MAX(1,P).
+*> \endverbatim
+*>
+*> \param[in,out] X21
+*> \verbatim
+*> X21 is REAL array, dimension (LDX21,Q)
+*> On entry, part of the orthogonal matrix whose CSD is desired.
+*> \endverbatim
+*>
+*> \param[in] LDX21
+*> \verbatim
+*> LDX21 is INTEGER
+*> The leading dimension of X11. LDX21 >= MAX(1,M-P).
+*> \endverbatim
+*>
+*> \param[in,out] X22
+*> \verbatim
+*> X22 is REAL array, dimension (LDX22,M-Q)
+*> On entry, part of the orthogonal matrix whose CSD is desired.
+*> \endverbatim
+*>
+*> \param[in] LDX22
+*> \verbatim
+*> LDX22 is INTEGER
+*> The leading dimension of X11. LDX22 >= MAX(1,M-P).
*> \endverbatim
*>
*> \param[out] THETA
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> ILO and IHI must have the same values as in the previous call
*> of SGEHRD. Q is equal to the unit matrix except in the
*> submatrix Q(ilo+1:ihi,ilo+1:ihi).
*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] A
*> \verbatim
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> ILO and IHI must have the same values as in the previous call
*> of SGEHRD. Q is equal to the unit matrix except in the
*> submatrix Q(ilo+1:ihi,ilo+1:ihi).
*> if SIDE = 'R', then 1 <= ILO <= IHI <= N, if N > 0, and
*> ILO = 1 and IHI = 0, if N = 0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] A
*> \verbatim
*> as follows:
*> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd).
+*>
+*> On exit, if INFO = 0, the factor S from the split Cholesky
+*> factorization A = S**T*S. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDAB
+*> \verbatim
+*> LDAB is INTEGER
+*> The leading dimension of the array AB. LDAB >= KD+1.
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> > 0: if INFO = i, the factorization could not be completed,
+*> because the updated element a(i,i) was negative; the
+*> matrix A is not positive definite.
*> \endverbatim
*>
*
* ===============
*>\details \b Further \b Details
*> \verbatim
-* factorization A = S**T*S. See Further Details.
-*>
-*> LDAB (input) INTEGER
-*> The leading dimension of the array AB. LDAB >= KD+1.
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> > 0: if INFO = i, the factorization could not be completed,
-*> because the updated element a(i,i) was negative; the
-*> matrix A is not positive definite.
-*>
*>
*> The band storage scheme is illustrated by the following example, when
*> N = 7, KD = 2:
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> The packed storage scheme is illustrated by the following example
*> when N = 4, UPLO = 'U':
*> \param[in] VL
*> \verbatim
*> VL is REAL
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is REAL
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
*> \param[in] VL
*> \verbatim
*> VL is REAL
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is REAL
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] AP
+*> \verbatim
+*> AP is REAL array, dimension (N*(N+1)/2)
+*> On entry, the upper or lower triangle of the symmetric matrix
+*> A, packed columnwise in a linear array. The j-th column of A
+*> is stored in the array AP as follows:
+*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
+*> if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.
+*> On exit, if UPLO = 'U', the diagonal and first superdiagonal
+*> of A are overwritten by the corresponding elements of the
+*> tridiagonal matrix T, and the elements above the first
+*> superdiagonal, with the array TAU, represent the orthogonal
+*> matrix Q as a product of elementary reflectors; if UPLO
+*> = 'L', the diagonal and first subdiagonal of A are over-
+*> written by the corresponding elements of the tridiagonal
+*> matrix T, and the elements below the first subdiagonal, with
+*> the array TAU, represent the orthogonal matrix Q as a product
+*> of elementary reflectors. See Further Details.
+*> \endverbatim
+*>
+*> \param[out] D
+*> \verbatim
+*> D is REAL array, dimension (N)
+*> The diagonal elements of the tridiagonal matrix T:
+*> D(i) = A(i,i).
+*> \endverbatim
+*>
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (N-1)
+*> The off-diagonal elements of the tridiagonal matrix T:
+*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (N-1)
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* of elementary reflectors. See Further Details.
-*>
-*> D (output) REAL array, dimension (N)
-*> The diagonal elements of the tridiagonal matrix T:
-*> D(i) = A(i,i).
-*>
-*> E (output) REAL array, dimension (N-1)
-*> The off-diagonal elements of the tridiagonal matrix T:
-*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
-*>
-*> TAU (output) REAL array, dimension (N-1)
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> \param[in] VL
*> \verbatim
*> VL is REAL
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is REAL
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. Eigenvalues less than or equal
*> to VL, or greater than VU, will not be returned. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
*> \param[in] VL
*> \verbatim
*> VL is REAL
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is REAL
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
*> \param[in] VL
*> \verbatim
*> VL is REAL
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is REAL
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] M
*> \verbatim
*> WORK is REAL array, dimension (N)
*> \endverbatim
*>
-*> \param[in] LWORK
-*> \verbatim
-*> LWORK is INTEGER
-*> The length of WORK. LWORK >=1.
-*> LWORK = N
-*> \endverbatim
-*> \verbatim
-*> If LWORK = -1, then a workspace query is assumed; the routine
-*> only calculates the optimal size of the WORK array, returns
-*> this value as the first entry of the WORK array, and no error
-*> message related to LWORK is issued by XERBLA.
-*> \endverbatim
-*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> Reference: Livne, O.E. and Golub, G.H., "Scaling by Binormalization",
*> Numerical Algorithms, vol. 35, no. 1, pp. 97-120, January 2004.
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> 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 UPLO = 'U', the diagonal and first superdiagonal
+*> of A are overwritten by the corresponding elements of the
+*> tridiagonal matrix T, and the elements above the first
+*> superdiagonal, with the array TAU, represent the orthogonal
+*> matrix Q as a product of elementary reflectors; if UPLO
+*> = 'L', the diagonal and first subdiagonal of A are over-
+*> written by the corresponding elements of the tridiagonal
+*> matrix T, and the elements below the first subdiagonal, with
+*> the array TAU, represent the orthogonal matrix Q as a product
+*> of elementary reflectors. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
+*>
+*> \param[out] D
+*> \verbatim
+*> D is REAL array, dimension (N)
+*> The diagonal elements of the tridiagonal matrix T:
+*> D(i) = A(i,i).
+*> \endverbatim
+*>
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (N-1)
+*> The off-diagonal elements of the tridiagonal matrix T:
+*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (N-1)
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* of elementary reflectors. See Further Details.
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
-*>
-*> D (output) REAL array, dimension (N)
-*> The diagonal elements of the tridiagonal matrix T:
-*> D(i) = A(i,i).
-*>
-*> E (output) REAL array, dimension (N-1)
-*> The off-diagonal elements of the tridiagonal matrix T:
-*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
-*>
-*> TAU (output) REAL array, dimension (N-1)
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value.
-*>
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realSYcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* of elementary reflectors. See Further Details.
+*> 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 UPLO = 'U', the diagonal and first superdiagonal
+*> of A are overwritten by the corresponding elements of the
+*> tridiagonal matrix T, and the elements above the first
+*> superdiagonal, with the array TAU, represent the orthogonal
+*> matrix Q as a product of elementary reflectors; if UPLO
+*> = 'L', the diagonal and first subdiagonal of A are over-
+*> written by the corresponding elements of the tridiagonal
+*> matrix T, and the elements below the first subdiagonal, with
+*> the array TAU, represent the orthogonal matrix Q as a product
+*> of elementary reflectors. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> D (output) REAL array, dimension (N)
+*> \param[out] D
+*> \verbatim
+*> D is REAL array, dimension (N)
*> The diagonal elements of the tridiagonal matrix T:
*> D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) REAL array, dimension (N-1)
+*> \param[out] E
+*> \verbatim
+*> E is REAL array, dimension (N-1)
*> The off-diagonal elements of the tridiagonal matrix T:
*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
+*> \endverbatim
*>
-*> TAU (output) REAL array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (N-1)
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) REAL array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= 1.
*> For optimum performance LWORK >= N*NB, where NB is the
*> optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realSYcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> \param[out] ALPHAR
*> \verbatim
*> ALPHAR is REAL array, dimension (N)
+*> \endverbatim
+*>
*> \param[out] ALPHAI
*> \verbatim
*> ALPHAI is REAL array, dimension (N)
+*> \endverbatim
+*>
*> \param[out] BETA
*> \verbatim
*> BETA is REAL array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> On exit, (ALPHAR(j) + ALPHAI(j)*i)/BETA(j), j=1,...,N, will
*> be the generalized eigenvalues. ALPHAR(j) + ALPHAI(j)*i
*> and BETA(j),j=1,...,N are the diagonals of the complex Schur
*> positive, then the j-th and (j+1)-st eigenvalues are a
*> complex conjugate pair, with ALPHAI(j+1) negative.
*> \endverbatim
-*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] Q
*> \verbatim
*> \param[out] PL
*> \verbatim
*> PL is REAL
+*> \endverbatim
+*>
*> \param[out] PR
*> \verbatim
*> PR is REAL
+*> \endverbatim
+*> \verbatim
*> If IJOB = 1, 4 or 5, PL, PR are lower bounds on the
*> reciprocal of the norm of "projections" onto left and right
*> eigenspaces with respect to the selected cluster.
*> If M = 0 or M = N, PL = PR = 1.
*> If IJOB = 0, 2 or 3, PL and PR are not referenced.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] DIF
*> \verbatim
*> The number of columns of the matrices A and B. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] K
+*> \verbatim
+*> K is INTEGER
+*> \endverbatim
+*>
+*> \param[in] L
+*> \verbatim
+*> L is INTEGER
+*> \endverbatim
*> \verbatim
-* See Further Details.
+*> K and L specify the subblocks in the input matrices A and B:
+*> A23 = A(K+1:MIN(K+L,M),N-L+1:N) and B13 = B(1:L,N-L+1:N)
+*> of A and B, whose GSVD is going to be computed by STGSJA.
+*> See Further Details.
+*> \endverbatim
*>
-*> A (input/output) REAL array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is REAL array, dimension (LDA,N)
*> On entry, the M-by-N matrix A.
*> On exit, A(N-K+1:N,1:MIN(K+L,M) ) contains the triangular
*> matrix R or part of R. See Purpose for details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> B (input/output) REAL array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is REAL array, dimension (LDB,N)
*> On entry, the P-by-N matrix B.
*> On exit, if necessary, B(M-K+1:L,N+M-K-L+1:N) contains
*> a part of R. See Purpose for details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,P).
+*> \endverbatim
*>
-*> TOLA (input) REAL
-*> TOLB (input) REAL
+*> \param[in] TOLA
+*> \verbatim
+*> TOLA is REAL
+*> \endverbatim
+*>
+*> \param[in] TOLB
+*> \verbatim
+*> TOLB is REAL
+*> \endverbatim
+*> \verbatim
*> TOLA and TOLB are the convergence criteria for the Jacobi-
*> Kogbetliantz iteration procedure. Generally, they are the
*> same as used in the preprocessing step, say
*> TOLA = max(M,N)*norm(A)*MACHEPS,
*> TOLB = max(P,N)*norm(B)*MACHEPS.
+*> \endverbatim
*>
-*> ALPHA (output) REAL array, dimension (N)
-*> BETA (output) REAL array, dimension (N)
+*> \param[out] ALPHA
+*> \verbatim
+*> ALPHA is REAL array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] BETA
+*> \verbatim
+*> BETA is REAL array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> On exit, ALPHA and BETA contain the generalized singular
*> value pairs of A and B;
*> ALPHA(1:K) = 1,
*> Furthermore, if K+L < N,
*> ALPHA(K+L+1:N) = 0 and
*> BETA(K+L+1:N) = 0.
+*> \endverbatim
*>
-*> U (input/output) REAL array, dimension (LDU,M)
+*> \param[in,out] U
+*> \verbatim
+*> U is REAL array, dimension (LDU,M)
*> On entry, if JOBU = 'U', U must contain a matrix U1 (usually
*> the orthogonal matrix returned by SGGSVP).
*> On exit,
*> if JOBU = 'I', U contains the orthogonal matrix U;
*> if JOBU = 'U', U contains the product U1*U.
*> If JOBU = 'N', U is not referenced.
+*> \endverbatim
*>
-*> LDU (input) INTEGER
+*> \param[in] LDU
+*> \verbatim
+*> LDU is INTEGER
*> The leading dimension of the array U. LDU >= max(1,M) if
*> JOBU = 'U'; LDU >= 1 otherwise.
+*> \endverbatim
*>
-*> V (input/output) REAL array, dimension (LDV,P)
+*> \param[in,out] V
+*> \verbatim
+*> V is REAL array, dimension (LDV,P)
*> On entry, if JOBV = 'V', V must contain a matrix V1 (usually
*> the orthogonal matrix returned by SGGSVP).
*> On exit,
*> if JOBV = 'I', V contains the orthogonal matrix V;
*> if JOBV = 'V', V contains the product V1*V.
*> If JOBV = 'N', V is not referenced.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V. LDV >= max(1,P) if
*> JOBV = 'V'; LDV >= 1 otherwise.
+*> \endverbatim
*>
-*> Q (input/output) REAL array, dimension (LDQ,N)
+*> \param[in,out] Q
+*> \verbatim
+*> Q is REAL array, dimension (LDQ,N)
*> On entry, if JOBQ = 'Q', Q must contain a matrix Q1 (usually
*> the orthogonal matrix returned by SGGSVP).
*> On exit,
*> if JOBQ = 'I', Q contains the orthogonal matrix Q;
*> if JOBQ = 'Q', Q contains the product Q1*Q.
*> If JOBQ = 'N', Q is not referenced.
+*> \endverbatim
*>
-*> LDQ (input) INTEGER
+*> \param[in] LDQ
+*> \verbatim
+*> LDQ is INTEGER
*> The leading dimension of the array Q. LDQ >= max(1,N) if
*> JOBQ = 'Q'; LDQ >= 1 otherwise.
+*> \endverbatim
*>
-*> WORK (workspace) REAL array, dimension (2*N)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (2*N)
+*> \endverbatim
*>
-*> NCYCLE (output) INTEGER
+*> \param[out] NCYCLE
+*> \verbatim
+*> NCYCLE is INTEGER
*> The number of cycles required for convergence.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
*> = 1: the procedure does not converge after MAXIT cycles.
+*> \endverbatim
*>
+*> \verbatim
*> Internal Parameters
*> ===================
*>
*> MAXIT specifies the total loops that the iterative procedure
*> may take. If after MAXIT cycles, the routine fails to
*> converge, we return INFO = 1.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> STGSJA essentially uses a variant of Kogbetliantz algorithm to reduce
*> min(L,M-K)-by-L triangular (or trapezoidal) matrix A23 and L-by-L
*> \verbatim
*> N is INTEGER
*> The number of columns of the matrix B. N >= 0.
+*> \endverbatim
*>
*> \param[in] K
*> \verbatim
*> The number of elementary reflectors whose product defines
*> the matrix Q.
*> \endverbatim
-*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* K >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The order of the trapezoidal part of V.
+*> K >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> NB (input) INTEGER
+*> \param[in] NB
+*> \verbatim
+*> NB is INTEGER
*> The block size used for the storage of T. K >= NB >= 1.
*> This must be the same value of NB used to generate T
*> in CTPQRT.
+*> \endverbatim
*>
-*> V (input) REAL array, dimension (LDA,K)
+*> \param[in] V
+*> \verbatim
+*> V is REAL array, dimension (LDA,K)
*> The i-th column must contain the vector which defines the
*> elementary reflector H(i), for i = 1,2,...,k, as returned by
*> CTPQRT in B. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A.
-*> If SIDE = 'L', LDA >= max(1,M);
-*> if SIDE = 'R', LDA >= max(1,N).
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
+*> The leading dimension of the array V.
+*> If SIDE = 'L', LDV >= max(1,M);
+*> if SIDE = 'R', LDV >= max(1,N).
+*> \endverbatim
*>
-*> T (input) REAL array, dimension (LDT,K)
+*> \param[in] T
+*> \verbatim
+*> T is REAL array, dimension (LDT,K)
*> The upper triangular factors of the block reflectors
*> as returned by CTPQRT, stored as a NB-by-K matrix.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
*>
-*> A (input/output) REAL array, dimension
+*> \param[in,out] A
+*> \verbatim
+*> A is REAL array, dimension
*> (LDA,N) if SIDE = 'L' or
*> (LDA,K) if SIDE = 'R'
*> On entry, the K-by-N or M-by-K matrix A.
*> On exit, A is overwritten by the corresponding block of
*> Q*C or Q^H*C or C*Q or C*Q^H. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A.
*> If SIDE = 'L', LDC >= max(1,K);
*> If SIDE = 'R', LDC >= max(1,M).
+*> \endverbatim
*>
-*> B (input/output) REAL array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is REAL array, dimension (LDB,N)
*> On entry, the M-by-N matrix B.
*> On exit, B is overwritten by the corresponding block of
*> Q*C or Q^H*C or C*Q or C*Q^H. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B.
*> LDB >= max(1,M).
+*> \endverbatim
*>
-*> WORK (workspace/output) REAL array. The dimension of WORK is
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array. The dimension of WORK is
*> N*NB if SIDE = 'L', or M*NB if SIDE = 'R'.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The columns of the pentagonal matrix V contain the elementary reflectors
*> H(1), H(2), ..., H(K); V is composed of a rectangular block V1 and a
*> N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* MIN(M,N) >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The number of rows of the upper trapezoidal part of B.
+*> MIN(M,N) >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> NB (input) INTEGER
+*> \param[in] NB
+*> \verbatim
+*> NB is INTEGER
*> The block size to be used in the blocked QR. N >= NB >= 1.
+*> \endverbatim
*>
-*> A (input/output) REAL array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is REAL array, dimension (LDA,N)
*> On entry, the upper triangular N-by-N matrix A.
*> On exit, the elements on and above the diagonal of the array
*> contain the upper triangular matrix R.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> B (input/output) REAL array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is REAL array, dimension (LDB,N)
*> On entry, the pentagonal M-by-N matrix B. The first M-L rows
*> are rectangular, and the last L rows are upper trapezoidal.
*> On exit, B contains the pentagonal matrix V. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,M).
+*> \endverbatim
*>
-*> T (output) REAL array, dimension (LDT,N)
+*> \param[out] T
+*> \verbatim
+*> T is REAL array, dimension (LDT,N)
*> The upper triangular block reflectors stored in compact form
*> as a sequence of upper triangular blocks. See Further Details.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
*>
-*> WORK (workspace) REAL array, dimension (NB*N)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (NB*N)
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
-*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*> The input matrix C is a (N+M)-by-N matrix
*>
*> C = [ A ]
*> N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* MIN(M,N) >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The number of rows of the upper trapezoidal part of B.
+*> MIN(M,N) >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> A (input/output) REAL array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is REAL array, dimension (LDA,N)
*> On entry, the upper triangular N-by-N matrix A.
*> On exit, the elements on and above the diagonal of the array
*> contain the upper triangular matrix R.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> B (input/output) REAL array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is REAL array, dimension (LDB,N)
*> On entry, the pentagonal M-by-N matrix B. The first M-L rows
*> are rectangular, and the last L rows are upper trapezoidal.
*> On exit, B contains the pentagonal matrix V. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,M).
+*> \endverbatim
*>
-*> T (output) REAL array, dimension (LDT,N)
+*> \param[out] T
+*> \verbatim
+*> T is REAL array, dimension (LDT,N)
*> The N-by-N upper triangular factor T of the block reflector.
*> See Further Details.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= max(1,N)
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realOTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The input matrix C is a (N+M)-by-N matrix
*>
*> K >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* K >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The order of the trapezoidal part of V.
+*> K >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> V (input) REAL array, dimension
+*> \param[in] V
+*> \verbatim
+*> V is REAL array, dimension
*> (LDV,K) if STOREV = 'C'
*> (LDV,M) if STOREV = 'R' and SIDE = 'L'
*> (LDV,N) if STOREV = 'R' and SIDE = 'R'
*> The pentagonal matrix V, which contains the elementary reflectors
*> H(1), H(2), ..., H(K). See Further Details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
*> if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
*> if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> T (input) REAL array, dimension (LDT,K)
+*> \param[in] T
+*> \verbatim
+*> T is REAL array, dimension (LDT,K)
*> The triangular K-by-K matrix T in the representation of the
*> block reflector.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T.
*> LDT >= K.
+*> \endverbatim
*>
-*> A (input/output) REAL array, dimension
+*> \param[in,out] A
+*> \verbatim
+*> A is REAL array, dimension
*> (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R'
*> On entry, the K-by-N or M-by-K matrix A.
*> On exit, A is overwritten by the corresponding block of
*> H*C or H^H*C or C*H or C*H^H. See Futher Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A.
*> If SIDE = 'L', LDC >= max(1,K);
*> If SIDE = 'R', LDC >= max(1,M).
+*> \endverbatim
*>
-*> B (input/output) REAL array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is REAL array, dimension (LDB,N)
*> On entry, the M-by-N matrix B.
*> On exit, B is overwritten by the corresponding block of
*> H*C or H^H*C or C*H or C*H^H. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B.
*> LDB >= max(1,M).
+*> \endverbatim
*>
-*> WORK (workspace) REAL array, dimension
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension
*> (LDWORK,N) if SIDE = 'L',
*> (LDWORK,K) if SIDE = 'R'.
+*> \endverbatim
*>
-*> LDWORK (input) INTEGER
+*> \param[in] LDWORK
+*> \verbatim
+*> LDWORK is INTEGER
*> The leading dimension of the array WORK.
*> If SIDE = 'L', LDWORK >= K;
*> if SIDE = 'R', LDWORK >= M.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup realOTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix C is a composite matrix formed from blocks A and B.
*> The block B is of size M-by-N; if SIDE = 'R', A is of size M-by-K,
*> \param[in,out] IFST
*> \verbatim
*> IFST is INTEGER
+*> \endverbatim
+*>
*> \param[in,out] ILST
*> \verbatim
*> ILST is INTEGER
+*> \endverbatim
+*> \verbatim
*> Specify the reordering of the diagonal blocks of T.
*> The block with row index IFST is moved to row ILST, by a
*> sequence of transpositions between adjacent blocks.
*> position (which may differ from its input value by +1 or -1).
*> 1 <= IFST <= N; 1 <= ILST <= N.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] WORK
*> \verbatim
*> \param[out] WR
*> \verbatim
*> WR is REAL array, dimension (N)
+*> \endverbatim
+*>
*> \param[out] WI
*> \verbatim
*> WI is REAL array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> The real and imaginary parts, respectively, of the reordered
*> eigenvalues of T. The eigenvalues are stored in the same
*> order as on the diagonal of T, with WR(i) = T(i,i) and, if
*> sufficiently ill-conditioned, then its value may differ
*> significantly from its value before reordering.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] M
*> \verbatim
*> partially reduced top-right block.
*> \endverbatim
*>
+*> \param[out] B21D
+*> \verbatim
+*> B21D is DOUBLE PRECISION array, dimension (Q)
+*> When CBBCSD converges, B21D contains the negative sines of
+*> THETA(1), ..., THETA(Q). If CBBCSD fails to converge, then
+*> B21D contains the diagonal of the partially reduced bottom-left
+*> block.
+*> \endverbatim
+*>
+*> \param[out] B21E
+*> \verbatim
+*> B21E is DOUBLE PRECISION array, dimension (Q-1)
+*> When CBBCSD converges, B21E contains zeros. If CBBCSD fails
+*> to converge, then B21E contains the subdiagonal of the
+*> partially reduced bottom-left block.
+*> \endverbatim
+*>
+*> \param[out] B22D
+*> \verbatim
+*> B22D is DOUBLE PRECISION array, dimension (Q)
+*> When CBBCSD converges, B22D contains the negative sines of
+*> THETA(1), ..., THETA(Q). If CBBCSD fails to converge, then
+*> B22D contains the diagonal of the partially reduced bottom-right
+*> block.
+*> \endverbatim
+*>
+*> \param[out] B22E
+*> \verbatim
+*> B22E is DOUBLE PRECISION array, dimension (Q-1)
+*> When CBBCSD converges, B22E contains zeros. If CBBCSD fails
+*> to converge, then B22E contains the subdiagonal of the
+*> partially reduced bottom-right block.
+*> \endverbatim
+*>
*> \param[out] RWORK
*> \verbatim
*> RWORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
-*> \brief <b> ZCGESV computes the solution to system of linear equations A * X = B for GE matrices</b>
+*> \brief <b> ZCGESV computes the solution to system of linear equations A * X = B for GE matrices</b> (mixed precision with iterative refinement)
*
* =========== DOCUMENTATION ===========
*
-*> \brief <b> ZGBSV computes the solution to system of linear equations A * X = B for GB matrices</b>
+*> \brief <b> ZGBSV computes the solution to system of linear equations A * X = B for GB matrices</b> (simple driver)
*
* =========== DOCUMENTATION ===========
*
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16GEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is COMPLEX*16 array, dimension (LDA,N)
+*> On entry, the input matrix A.
+*> On exit, A is overwritten by the balanced matrix.
+*> If JOB = 'N', A is not referenced.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> ILO (output) INTEGER
+*> \param[out] ILO
+*> \verbatim
+*> \endverbatim
*>
-*> IHI (output) INTEGER
-*> ILO and IHI are set to integers such that on exit
+*> \param[out] IHI
+*> \verbatim
+*> ILO and IHI are set to INTEGER such that on exit
*> A(i,j) = 0 if i > j and j = 1,...,ILO-1 or I = IHI+1,...,N.
*> If JOB = 'N' or 'S', ILO = 1 and IHI = N.
+*> \endverbatim
*>
-*> SCALE (output) DOUBLE PRECISION array, dimension (N)
+*> \param[out] SCALE
+*> \verbatim
+*> SCALE is DOUBLE PRECISION array, dimension (N)
*> Details of the permutations and scaling factors applied to
*> A. If P(j) is the index of the row and column interchanged
*> with row and column j and D(j) is the scaling factor
*> = P(j) for j = IHI+1,...,N.
*> The order in which the interchanges are made is N to IHI+1,
*> then 1 to ILO-1.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit.
*> < 0: if INFO = -i, the i-th argument had an illegal value.
-*>
+*> \endverbatim
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16GEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The permutations consist of row and column interchanges which put
*> the matrix in the form
*> The number of columns in the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16GEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is COMPLEX*16 array, dimension (LDA,N)
+*> On entry, the m by n general matrix to be reduced.
+*> On exit,
+*> if m >= n, the diagonal and the first superdiagonal are
+*> overwritten with the upper bidiagonal matrix B; the
+*> elements below the diagonal, with the array TAUQ, represent
+*> the unitary matrix Q as a product of elementary
+*> reflectors, and the elements above the first superdiagonal,
+*> with the array TAUP, represent the unitary matrix P as
+*> a product of elementary reflectors;
+*> if m < n, the diagonal and the first subdiagonal are
+*> overwritten with the lower bidiagonal matrix B; the
+*> elements below the first subdiagonal, with the array TAUQ,
+*> represent the unitary matrix Q as a product of
+*> elementary reflectors, and the elements above the diagonal,
+*> with the array TAUP, represent the unitary matrix P as
+*> a product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> D (output) DOUBLE PRECISION array, dimension (min(M,N))
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (min(M,N))
*> The diagonal elements of the bidiagonal matrix B:
*> D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) DOUBLE PRECISION array, dimension (min(M,N)-1)
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (min(M,N)-1)
*> The off-diagonal elements of the bidiagonal matrix B:
*> if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1;
*> if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1.
+*> \endverbatim
*>
-*> TAUQ (output) COMPLEX*16 array dimension (min(M,N))
+*> \param[out] TAUQ
+*> \verbatim
+*> TAUQ is COMPLEX*16 array dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix Q. See Further Details.
+*> \endverbatim
*>
-*> TAUP (output) COMPLEX*16 array, dimension (min(M,N))
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is COMPLEX*16 array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix P. See Further Details.
+*> \endverbatim
*>
-*> WORK (workspace) COMPLEX*16 array, dimension (max(M,N))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (max(M,N))
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16GEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrices Q and P are represented as products of elementary
*> reflectors:
*> The number of columns in the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16GEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is COMPLEX*16 array, dimension (LDA,N)
+*> On entry, the M-by-N general matrix to be reduced.
+*> On exit,
+*> if m >= n, the diagonal and the first superdiagonal are
+*> overwritten with the upper bidiagonal matrix B; the
+*> elements below the diagonal, with the array TAUQ, represent
+*> the unitary matrix Q as a product of elementary
+*> reflectors, and the elements above the first superdiagonal,
+*> with the array TAUP, represent the unitary matrix P as
+*> a product of elementary reflectors;
+*> if m < n, the diagonal and the first subdiagonal are
+*> overwritten with the lower bidiagonal matrix B; the
+*> elements below the first subdiagonal, with the array TAUQ,
+*> represent the unitary matrix Q as a product of
+*> elementary reflectors, and the elements above the diagonal,
+*> with the array TAUP, represent the unitary matrix P as
+*> a product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> D (output) DOUBLE PRECISION array, dimension (min(M,N))
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (min(M,N))
*> The diagonal elements of the bidiagonal matrix B:
*> D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) DOUBLE PRECISION array, dimension (min(M,N)-1)
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (min(M,N)-1)
*> The off-diagonal elements of the bidiagonal matrix B:
*> if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1;
*> if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1.
+*> \endverbatim
*>
-*> TAUQ (output) COMPLEX*16 array dimension (min(M,N))
+*> \param[out] TAUQ
+*> \verbatim
+*> TAUQ is COMPLEX*16 array dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix Q. See Further Details.
+*> \endverbatim
*>
-*> TAUP (output) COMPLEX*16 array, dimension (min(M,N))
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is COMPLEX*16 array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix P. See Further Details.
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX*16 array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The length of the array WORK. LWORK >= max(1,M,N).
*> For optimum performance LWORK >= (M+N)*NB, where NB
*> is the optimal blocksize.
-*>
+*> \endverbatim
+*> \verbatim
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit.
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16GEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrices Q and P are represented as products of elementary
*> reflectors:
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16GEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] ILO
+*> \verbatim
+*> ILO is INTEGER
+*> \endverbatim
+*>
+*> \param[in] IHI
*> \verbatim
-* set to 1 and N respectively. See Further Details.
+*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
+*> It is assumed that A is already upper triangular in rows
+*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally
+*> set by a previous call to ZGEBAL; otherwise they should be
+*> set to 1 and N respectively. See Further Details.
*> 1 <= ILO <= IHI <= max(1,N).
+*> \endverbatim
*>
-*> A (input/output) COMPLEX*16 array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX*16 array, dimension (LDA,N)
*> On entry, the n by n general matrix to be reduced.
*> On exit, the upper triangle and the first subdiagonal of A
*> are overwritten with the upper Hessenberg matrix H, and the
*> elements below the first subdiagonal, with the array TAU,
*> represent the unitary matrix Q as a product of elementary
*> reflectors. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> TAU (output) COMPLEX*16 array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (N-1)
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace) COMPLEX*16 array, dimension (N)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (N)
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16GEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of (ihi-ilo) elementary
*> reflectors
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16GEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] ILO
+*> \verbatim
+*> ILO is INTEGER
+*> \endverbatim
+*>
+*> \param[in] IHI
+*> \verbatim
+*> IHI is INTEGER
+*> \endverbatim
*> \verbatim
-* set to 1 and N respectively. See Further Details.
+*> It is assumed that A is already upper triangular in rows
+*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally
+*> set by a previous call to ZGEBAL; otherwise they should be
+*> set to 1 and N respectively. See Further Details.
*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0.
+*> \endverbatim
*>
-*> A (input/output) COMPLEX*16 array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX*16 array, dimension (LDA,N)
*> On entry, the N-by-N general matrix to be reduced.
*> On exit, the upper triangle and the first subdiagonal of A
*> are overwritten with the upper Hessenberg matrix H, and the
*> elements below the first subdiagonal, with the array TAU,
*> represent the unitary matrix Q as a product of elementary
*> reflectors. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> TAU (output) COMPLEX*16 array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (N-1)
*> The scalar factors of the elementary reflectors (see Further
*> Details). Elements 1:ILO-1 and IHI:N-1 of TAU are set to
*> zero.
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX*16 array, dimension (LWORK)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (LWORK)
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The length of the array WORK. LWORK >= max(1,N).
*> For optimum performance LWORK >= N*NB, where NB is the
*> optimal blocksize.
-*>
+*> \endverbatim
+*> \verbatim
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16GEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of (ihi-ilo) elementary
*> reflectors
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX*16 array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, the elements on and below the diagonal of the array
+*> contain the m by min(m,n) lower trapezoidal matrix L (L is
+*> lower triangular if m <= n); the elements above the diagonal,
+*> with the array TAU, represent the unitary matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (M)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* product of elementary reflectors (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) COMPLEX*16 array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) COMPLEX*16 array, dimension (M)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16GEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* product of elementary reflectors (see Further Details).
+*> A is COMPLEX*16 array, dimension (LDA,N)
+*> On entry, the M-by-N matrix A.
+*> On exit, the elements on and below the diagonal of the array
+*> contain the m-by-min(m,n) lower trapezoidal matrix L (L is
+*> lower triangular if m <= n); the elements above the diagonal,
+*> with the array TAU, represent the unitary matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> TAU (output) COMPLEX*16 array, dimension (min(M,N))
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX*16 array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,M).
*> For optimum performance LWORK >= M*NB, where NB is the
*> optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16GEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX*16 array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, if m >= n, the lower triangle of the subarray
+*> A(m-n+1:m,1:n) contains the n by n lower triangular matrix L;
+*> if m <= n, the elements on and below the (n-m)-th
+*> superdiagonal contain the m by n lower trapezoidal matrix L;
+*> the remaining elements, with the array TAU, represent the
+*> unitary matrix Q as a product of elementary reflectors
+*> (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) COMPLEX*16 array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) COMPLEX*16 array, dimension (N)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16GEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* (see Further Details).
+*> A is COMPLEX*16 array, dimension (LDA,N)
+*> On entry, the M-by-N matrix A.
+*> On exit,
+*> if m >= n, the lower triangle of the subarray
+*> A(m-n+1:m,1:n) contains the N-by-N lower triangular matrix L;
+*> if m <= n, the elements on and below the (n-m)-th
+*> superdiagonal contain the M-by-N lower trapezoidal matrix L;
+*> the remaining elements, with the array TAU, represent the
+*> unitary matrix Q as a product of elementary reflectors
+*> (see Further Details).
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> TAU (output) COMPLEX*16 array, dimension (min(M,N))
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX*16 array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N).
*> For optimum performance LWORK >= N*NB, where NB is
*> the optimal blocksize.
-*>
+*> \endverbatim
+*> \verbatim
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16GEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX*16 array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, the elements on and above the diagonal of the array
+*> contain the min(m,n) by n upper trapezoidal matrix R (R is
+*> upper triangular if m >= n); the elements below the diagonal,
+*> with the array TAU, represent the unitary matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* product of elementary reflectors (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) COMPLEX*16 array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) COMPLEX*16 array, dimension (N)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX*16 array, dimension (LDA,N)
+*> On entry, the m by n matrix A.
+*> On exit, the elements on and above the diagonal of the array
+*> contain the min(m,n) by n upper trapezoidal matrix R (R is
+*> upper triangular if m >= n); the elements below the diagonal,
+*> with the array TAU, represent the unitary matrix Q as a
+*> product of elementary reflectors (see Further Details).
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* product of elementary reflectors (see Further Details).
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*>
-*> TAU (output) COMPLEX*16 array, dimension (min(M,N))
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> WORK (workspace) COMPLEX*16 array, dimension (N)
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
* ===============
*>\details \b Further \b Details
*> \verbatim
-*
*> The matrix V stores the elementary reflectors H(i) in the i-th column
*> below the diagonal. For example, if M=5 and N=3, the matrix V is
*>
*> reflector T; the elements below the diagonal are not used.
*> See below for further details.
*> \endverbatim
+*>
+*> \param[in] LDT
*> \verbatim
-*> LDT (intput) INTEGER
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= max(1,N).
*> \endverbatim
*>
*> reflector T; the elements below the diagonal are not used.
*> See below for further details.
*> \endverbatim
+*>
+*> \param[in] LDT
*> \verbatim
-*> LDT (intput) INTEGER
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= max(1,N).
*> \endverbatim
*>
*> The number of columns of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16GEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* reflectors (see Further Details).
+*> A is COMPLEX*16 array, dimension (LDA,N)
+*> On entry, the M-by-N matrix A.
+*> On exit,
+*> if m <= n, the upper triangle of the subarray
+*> A(1:m,n-m+1:n) contains the M-by-M upper triangular matrix R;
+*> if m >= n, the elements on and above the (m-n)-th subdiagonal
+*> contain the M-by-N upper trapezoidal matrix R;
+*> the remaining elements, with the array TAU, represent the
+*> unitary matrix Q as a product of min(m,n) elementary
+*> reflectors (see Further Details).
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> TAU (output) COMPLEX*16 array, dimension (min(M,N))
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (min(M,N))
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX*16 array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,M).
*> For optimum performance LWORK >= M*NB, where NB is
*> the optimal blocksize.
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16GEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
-*> \brief <b> ZGESV computes the solution to system of linear equations A * X = B for GE matrices</b>
+*> \brief <b> ZGESV computes the solution to system of linear equations A * X = B for GE matrices</b> (simple driver)
*
* =========== DOCUMENTATION ===========
*
*> \param[out] X
*> \verbatim
*> X is COMPLEX*16 array, dimension (M)
+*> \endverbatim
+*>
*> \param[out] Y
*> \verbatim
*> Y is COMPLEX*16 array, dimension (P)
-*> On exit, X and Y are the solutions of the GLM problem.
*> \endverbatim
+*> \verbatim
+*> On exit, X and Y are the solutions of the GLM problem.
*> \endverbatim
*>
*> \param[out] WORK
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> ILO and IHI mark the rows and columns of A which are to be
*> reduced. It is assumed that A is already upper triangular
*> in rows and columns 1:ILO-1 and IHI+1:N. ILO and IHI are
*> should be set to 1 and N respectively.
*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] A
*> \verbatim
*> The leading dimension of the array A. LDA >= max(1,N).
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[out] TAUA
*> \verbatim
-* represent the unitary matrix Q (see Further Details).
+*> TAUA is COMPLEX*16 array, dimension (min(N,M))
+*> The scalar factors of the elementary reflectors which
+*> represent the unitary matrix Q (see Further Details).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX*16 array, dimension (LDB,P)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX*16 array, dimension (LDB,P)
*> On entry, the N-by-P matrix B.
*> On exit, if N <= P, the upper triangle of the subarray
*> B(1:N,P-N+1:P) contains the N-by-N upper triangular matrix T;
*> elements, with the array TAUB, represent the unitary
*> matrix Z as a product of elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,N).
+*> \endverbatim
*>
-*> TAUB (output) COMPLEX*16 array, dimension (min(N,P))
+*> \param[out] TAUB
+*> \verbatim
+*> TAUB is COMPLEX*16 array, dimension (min(N,P))
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix Z (see Further Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX*16 array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N,M,P).
*> For optimum performance LWORK >= max(N,M,P)*max(NB1,NB2,NB3),
*> where NB1 is the optimal blocksize for the QR factorization
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16OTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> The leading dimension of the array A. LDA >= max(1,M).
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[out] TAUA
*> \verbatim
-* represent the unitary matrix Q (see Further Details).
+*> TAUA is COMPLEX*16 array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors which
+*> represent the unitary matrix Q (see Further Details).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX*16 array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX*16 array, dimension (LDB,N)
*> On entry, the P-by-N matrix B.
*> On exit, the elements on and above the diagonal of the array
*> contain the min(P,N)-by-N upper trapezoidal matrix T (T is
*> upper triangular if P >= N); the elements below the diagonal,
*> with the array TAUB, represent the unitary matrix Z as a
*> product of elementary reflectors (see Further Details).
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,P).
+*> \endverbatim
*>
-*> TAUB (output) COMPLEX*16 array, dimension (min(P,N))
+*> \param[out] TAUB
+*> \verbatim
+*> TAUB is COMPLEX*16 array, dimension (min(P,N))
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix Z (see Further Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX*16 array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N,M,P).
*> For optimum performance LWORK >= max(N,M,P)*max(NB1,NB2,NB3),
*> where NB1 is the optimal blocksize for the RQ factorization
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO=-i, the i-th argument had an illegal value.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16OTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix Q is represented as a product of elementary reflectors
*>
*> \param[out] K
*> \verbatim
*> K is INTEGER
+*> \endverbatim
+*>
*> \param[out] L
*> \verbatim
*> L is INTEGER
+*> \endverbatim
+*> \verbatim
*> On exit, K and L specify the dimension of the subblocks
*> described in Purpose.
*> K + L = effective numerical rank of (A**H,B**H)**H.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] A
*> \verbatim
*> \param[out] ALPHA
*> \verbatim
*> ALPHA is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*>
*> \param[out] BETA
*> \verbatim
*> BETA is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> On exit, ALPHA and BETA contain the generalized singular
*> value pairs of A and B;
*> ALPHA(1:K) = 1,
*> ALPHA(K+1:K+L) = C,
*> BETA(K+1:K+L) = S,
*> or if M-K-L < 0,
-*> ALPHA(K+1:M)= C, ALPHA(M+1:K+L)= 0
-*> BETA(K+1:M) = S, BETA(M+1:K+L) = 1
+*> ALPHA(K+1:M)=C, ALPHA(M+1:K+L)=0
+*> BETA(K+1:M) =S, BETA(M+1:K+L) =1
*> and
*> ALPHA(K+L+1:N) = 0
*> BETA(K+L+1:N) = 0
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] U
*> \verbatim
*> \param[in] TOLA
*> \verbatim
*> TOLA is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[in] TOLB
*> \verbatim
*> TOLB is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> TOLA and TOLB are the thresholds to determine the effective
*> numerical rank of matrix B and a subblock of A. Generally,
*> they are set to
*> The size of TOLA and TOLB may affect the size of backward
*> errors of the decomposition.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] K
*> \verbatim
*> K is INTEGER
+*> \endverbatim
+*>
*> \param[out] L
*> \verbatim
*> L is INTEGER
+*> \endverbatim
+*> \verbatim
*> On exit, K and L specify the dimension of the subblocks
*> described in Purpose section.
*> K + L = effective numerical rank of (A**H,B**H)**H.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] U
*> \verbatim
*> \param[in] VL
*> \verbatim
*> VL is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
* Arguments
* =========
*
+*> \param[in] UPLO
+*> \verbatim
+*> UPLO is CHARACTER*1
+*> = 'U': Upper triangles of A and B are stored;
+*> = 'L': Lower triangles of A and B are stored.
+*> \endverbatim
+*>
*> \param[in] N
*> \verbatim
*> N is INTEGER
*> Absolute value of largest matrix element. If AMAX is very
*> close to overflow or very close to underflow, the matrix
*> should be scaled.
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (3*N)
+*> \endverbatim
+*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
*> < 0: if INFO = -i, the i-th argument had an illegal value
*> > 0: if INFO = i, the i-th diagonal element is nonpositive.
*> \endverbatim
-*> \endverbatim
*>
*
* Authors
*> = 'V': all eigenvalues in the half-open interval (VL,VU]
*> will be found.
*> = 'I': the IL-th through IU-th eigenvalues will be found.
+*> \endverbatim
+*>
*> \param[in] UPLO
*> \verbatim
*> UPLO is CHARACTER*1
*> = 'U': Upper triangles of A and B are stored;
*> = 'L': Lower triangles of A and B are stored.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] N
*> \verbatim
*> upper triangular part of the matrix A. If UPLO = 'L',
*> the leading N-by-N lower triangular part of A contains
*> the lower triangular part of the matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the lower triangle (if UPLO='L') or the upper
*> triangle (if UPLO='U') of A, including the diagonal, is
*> destroyed.
*> upper triangular part of the matrix B. If UPLO = 'L',
*> the leading N-by-N lower triangular part of B contains
*> the lower triangular part of the matrix B.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO <= N, the part of B containing the matrix is
*> overwritten by the triangular factor U or L from the Cholesky
*> factorization B = U**H*U or B = L*L**H.
*> \param[in] VL
*> \verbatim
*> VL is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
*> An approximate eigenvalue is accepted as converged
*> when it is determined to lie in an interval [a,b]
*> of width less than or equal to
-*> \endverbatim
-*> \verbatim
+*>
*> ABSTOL + EPS * max( |a|,|b| ) ,
-*> \endverbatim
-*> \verbatim
+*>
*> where EPS is the machine precision. If ABSTOL is less than
*> or equal to zero, then EPS*|T| will be used in its place,
*> where |T| is the 1-norm of the tridiagonal matrix obtained
*> by reducing C to tridiagonal form, where C is the symmetric
*> matrix of the standard symmetric problem to which the
*> generalized problem is transformed.
-*> \endverbatim
-*> \verbatim
+*>
*> Eigenvalues will be computed most accurately when ABSTOL is
*> set to twice the underflow threshold 2*DLAMCH('S'), not zero.
*> If this routine returns with INFO>0, indicating that some
*> The eigenvectors are normalized as follows:
*> if ITYPE = 1 or 2, Z**T*B*Z = I;
*> if ITYPE = 3, Z**T*inv(B)*Z = I.
-*> \endverbatim
-*> \verbatim
+*>
*> If an eigenvector fails to converge, then that column of Z
*> contains the latest approximation to the eigenvector, and the
*> index of the eigenvector is returned in IFAIL.
*> copied to AF and factored.
*> \endverbatim
*>
+*> \param[in] UPLO
+*> \verbatim
+*> UPLO is CHARACTER*1
+*> = 'U': Upper triangle of A is stored;
+*> = 'L': Lower triangle of A is stored.
+*> \endverbatim
+*>
*> \param[in] N
*> \verbatim
*> N is INTEGER
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> 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 UPLO = 'U', the diagonal and first superdiagonal
+*> of A are overwritten by the corresponding elements of the
+*> tridiagonal matrix T, and the elements above the first
+*> superdiagonal, with the array TAU, represent the unitary
+*> matrix Q as a product of elementary reflectors; if UPLO
+*> = 'L', the diagonal and first subdiagonal of A are over-
+*> written by the corresponding elements of the tridiagonal
+*> matrix T, and the elements below the first subdiagonal, with
+*> the array TAU, represent the unitary matrix Q as a product
+*> of elementary reflectors. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
+*>
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (N)
+*> The diagonal elements of the tridiagonal matrix T:
+*> D(i) = A(i,i).
+*> \endverbatim
+*>
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (N-1)
+*> The off-diagonal elements of the tridiagonal matrix T:
+*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (N-1)
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* of elementary reflectors. See Further Details.
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
-*>
-*> D (output) DOUBLE PRECISION array, dimension (N)
-*> The diagonal elements of the tridiagonal matrix T:
-*> D(i) = A(i,i).
-*>
-*> E (output) DOUBLE PRECISION array, dimension (N-1)
-*> The off-diagonal elements of the tridiagonal matrix T:
-*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
-*>
-*> TAU (output) COMPLEX*16 array, dimension (N-1)
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value.
-*>
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16HEcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* of elementary reflectors. See Further Details.
+*> 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 UPLO = 'U', the diagonal and first superdiagonal
+*> of A are overwritten by the corresponding elements of the
+*> tridiagonal matrix T, and the elements above the first
+*> superdiagonal, with the array TAU, represent the unitary
+*> matrix Q as a product of elementary reflectors; if UPLO
+*> = 'L', the diagonal and first subdiagonal of A are over-
+*> written by the corresponding elements of the tridiagonal
+*> matrix T, and the elements below the first subdiagonal, with
+*> the array TAU, represent the unitary matrix Q as a product
+*> of elementary reflectors. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> D (output) DOUBLE PRECISION array, dimension (N)
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (N)
*> The diagonal elements of the tridiagonal matrix T:
*> D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) DOUBLE PRECISION array, dimension (N-1)
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (N-1)
*> The off-diagonal elements of the tridiagonal matrix T:
*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
+*> \endverbatim
*>
-*> TAU (output) COMPLEX*16 array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (N-1)
*> The scalar factors of the elementary reflectors (see Further
*> Details).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX*16 array, dimension (MAX(1,LWORK))
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK))
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
+*> \endverbatim
*>
-*> LWORK (input) INTEGER
+*> \param[in] LWORK
+*> \verbatim
+*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= 1.
*> For optimum performance LWORK >= N*NB, where NB is the
*> optimal blocksize.
-*>
+*> \endverbatim
+*> \verbatim
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the WORK array, returns
*> this value as the first entry of the WORK array, and no error
*> message related to LWORK is issued by XERBLA.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16HEcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> \param[in] VL
*> \verbatim
*> VL is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
*> The order of the matrix A. N >= 0.
*> \endverbatim
*>
+*> \param[in,out] AP
+*> \verbatim
+*> AP is COMPLEX*16 array, dimension (N*(N+1)/2)
+*> On entry, the upper or lower triangle of the Hermitian matrix
+*> A, packed columnwise in a linear array. The j-th column of A
+*> is stored in the array AP as follows:
+*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
+*> if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.
+*> On exit, if UPLO = 'U', the diagonal and first superdiagonal
+*> of A are overwritten by the corresponding elements of the
+*> tridiagonal matrix T, and the elements above the first
+*> superdiagonal, with the array TAU, represent the unitary
+*> matrix Q as a product of elementary reflectors; if UPLO
+*> = 'L', the diagonal and first subdiagonal of A are over-
+*> written by the corresponding elements of the tridiagonal
+*> matrix T, and the elements below the first subdiagonal, with
+*> the array TAU, represent the unitary matrix Q as a product
+*> of elementary reflectors. See Further Details.
+*> \endverbatim
+*>
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (N)
+*> The diagonal elements of the tridiagonal matrix T:
+*> D(i) = A(i,i).
+*> \endverbatim
+*>
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (N-1)
+*> The off-diagonal elements of the tridiagonal matrix T:
+*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (N-1)
+*> The scalar factors of the elementary reflectors (see Further
+*> Details).
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* of elementary reflectors. See Further Details.
-*>
-*> D (output) DOUBLE PRECISION array, dimension (N)
-*> The diagonal elements of the tridiagonal matrix T:
-*> D(i) = A(i,i).
-*>
-*> E (output) DOUBLE PRECISION array, dimension (N-1)
-*> The off-diagonal elements of the tridiagonal matrix T:
-*> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'.
-*>
-*> TAU (output) COMPLEX*16 array, dimension (N-1)
-*> The scalar factors of the elementary reflectors (see Further
-*> Details).
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*>
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> It is assumed that H is already upper triangular in rows
*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally
*> set by a previous call to ZGEBAL, and then passed to ZGEHRD
*> respectively. If N.GT.0, then 1.LE.ILO.LE.IHI.LE.N.
*> If N = 0, then ILO = 1 and IHI = 0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] H
*> \verbatim
*>
*> \param[in] AB
*> \verbatim
-*> AB is COMPLEX*16 array, dimension (LDA,N)
+*> AB is COMPLEX*16 array, dimension (LDAB,N)
*> On entry, the N-by-N matrix A.
*> \endverbatim
*>
*> \param[in] LDAB
*> \verbatim
*> LDAB is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
+*> The leading dimension of the array A. LDAB >= max(1,N).
*> \endverbatim
*>
*> \param[in] AFB
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> normwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Normwise relative error in the ith solution vector:
*> max_j (abs(XTRUE(j,i) - X(j,i)))
*> ------------------------------
*> max_j abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the type of error information as described
*> below. There currently are up to three pieces of information
*> returned.
-*> \endverbatim
-*> \verbatim
+*>
*> The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
+*>
*> The second index in ERR_BNDS_NORM(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated normwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> appropriately scaled matrix Z.
*> Let Z = S*A, where S scales each row by a power of the
*> radix so all absolute row sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> componentwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Componentwise relative error in the ith solution vector:
*> abs(XTRUE(j,i) - X(j,i))
*> max_j ----------------------
*> abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the right-hand side i (on which the
*> componentwise relative error depends), and the type of error
*> information as described below. There currently are up to three
*> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
*> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
*> the first (:,N_ERR_BNDS) entries are returned.
-*> \endverbatim
-*> \verbatim
+*>
*> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
+*>
*> The second index in ERR_BNDS_COMP(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated componentwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> current right-hand side and S scales each row of
*> A*diag(x) by a power of the radix so all absolute row
*> sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> and provides error bounds and backward error estimates for the solution.
*> This subroutine is called by ZGERFSX to perform iterative refinement.
*> In addition to normwise error bound, the code provides maximum
-*> componentwise error bound if possible. See comments for ERR_BNDS_NORM
-*> and ERR_BNDS_COMP for details of the error bounds. Note that this
+*> componentwise error bound if possible. See comments for ERRS_N
+*> and ERRS_C for details of the error bounds. Note that this
*> subroutine is only resonsible for setting the second fields of
-*> ERR_BNDS_NORM and ERR_BNDS_COMP.
+*> ERRS_N and ERRS_C.
*>
*>\endverbatim
*
*> \param[in] N_NORMS
*> \verbatim
*> N_NORMS is INTEGER
-*> Determines which error bounds to return (see ERR_BNDS_NORM
-*> and ERR_BNDS_COMP).
+*> Determines which error bounds to return (see ERRS_N
+*> and ERRS_C).
*> If N_NORMS >= 1 return normwise error bounds.
*> If N_NORMS >= 2 return componentwise error bounds.
*> \endverbatim
*>
-*> \param[in,out] ERR_BNDS_NORM
+*> \param[in,out] ERRS_N
*> \verbatim
-*> ERR_BNDS_NORM is DOUBLE PRECISION array, dimension
+*> ERRS_N is DOUBLE PRECISION array, dimension
*> (NRHS, N_ERR_BNDS)
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> normwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Normwise relative error in the ith solution vector:
*> max_j (abs(XTRUE(j,i) - X(j,i)))
*> ------------------------------
*> max_j abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the type of error information as described
*> below. There currently are up to three pieces of information
*> returned.
-*> \endverbatim
-*> \verbatim
-*> The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+*>
+*> The first index in ERRS_N(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
-*> The second index in ERR_BNDS_NORM(:,err) contains the following
+*>
+*> The second index in ERRS_N(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated normwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> appropriately scaled matrix Z.
*> Let Z = S*A, where S scales each row by a power of the
*> radix so all absolute row sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*>
-*> \param[in,out] ERR_BNDS_COMP
+*> \param[in,out] ERRS_C
*> \verbatim
-*> ERR_BNDS_COMP is DOUBLE PRECISION array, dimension
+*> ERRS_C is DOUBLE PRECISION array, dimension
*> (NRHS, N_ERR_BNDS)
*> For each right-hand side, this array contains information about
*> various error bounds and condition numbers corresponding to the
*> componentwise relative error, which is defined as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> Componentwise relative error in the ith solution vector:
*> abs(XTRUE(j,i) - X(j,i))
*> max_j ----------------------
*> abs(X(j,i))
-*> \endverbatim
-*> \verbatim
+*>
*> The array is indexed by the right-hand side i (on which the
*> componentwise relative error depends), and the type of error
*> information as described below. There currently are up to three
*> pieces of information returned for each right-hand side. If
*> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
-*> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+*> ERRS_C is not accessed. If N_ERR_BNDS .LT. 3, then at most
*> the first (:,N_ERR_BNDS) entries are returned.
-*> \endverbatim
-*> \verbatim
-*> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+*>
+*> The first index in ERRS_C(i,:) corresponds to the ith
*> right-hand side.
-*> \endverbatim
-*> \verbatim
-*> The second index in ERR_BNDS_COMP(:,err) contains the following
+*>
+*> The second index in ERRS_C(:,err) contains the following
*> three fields:
*> err = 1 "Trust/don't trust" boolean. Trust the answer if the
*> reciprocal condition number is less than the threshold
*> sqrt(n) * slamch('Epsilon').
-*> \endverbatim
-*> \verbatim
+*>
*> err = 2 "Guaranteed" error bound: The estimated forward error,
*> almost certainly within a factor of 10 of the true error
*> so long as the next entry is greater than the threshold
*> sqrt(n) * slamch('Epsilon'). This error bound should only
*> be trusted if the previous boolean is true.
-*> \endverbatim
-*> \verbatim
+*>
*> err = 3 Reciprocal condition number: Estimated componentwise
*> reciprocal condition number. Compared with the threshold
*> sqrt(n) * slamch('Epsilon') to determine if the error
*> current right-hand side and S scales each row of
*> A*diag(x) by a power of the radix so all absolute row
*> sums of Z are approximately 1.
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine is only responsible for setting the second field
*> above.
*> See Lapack Working Note 165 for further details and extra
*> permit convergence using approximate factorizations or
*> factorizations other than LU. If the factorization uses a
*> technique other than Gaussian elimination, the guarantees in
-*> ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*> ERRS_N and ERRS_C may no longer be trustworthy.
*> \endverbatim
*>
*> \param[in] RTHRESH
*> column INFO is exactly 0.
*> \endverbatim
*>
-*> \param[in] NCOLS
-*> \verbatim
-*> NCOLS is INTEGER
-*> The number of columns of the matrix A. NCOLS >= 0.
-*> \endverbatim
-*>
*> \param[in] A
*> \verbatim
*> A is COMPLEX*16 array, dimension (LDA,N)
*> The denominator in the relative backward error formula above, i.e.,
*> the matrix abs(op(A_s))*abs(Y) + abs(B_s). The matrices A, Y, and B
*> are from iterative refinement (see zla_gerfsx_extended.f).
+*> \endverbatim
*>
*> \param[out] BERR
*> \verbatim
*> BERR is COMPLEX*16 array, dimension (NRHS)
*> The componentwise relative backward error from the formula above.
*> \endverbatim
-*> \endverbatim
*>
*
* Authors
*> column INFO is exactly 0.
*> \endverbatim
*>
-*> \param[in] NCOLS
-*> \verbatim
-*> NCOLS is INTEGER
-*> The number of columns of the matrix A. NCOLS >= 0.
-*> \endverbatim
-*>
*> \param[in] A
*> \verbatim
*> A is COMPLEX*16 array, dimension (LDA,N)
*> The number of leading rows and columns of A to be reduced.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> A is COMPLEX*16 array, dimension (LDA,N)
+*> On entry, the m by n general matrix to be reduced.
+*> On exit, the first NB rows and columns of the matrix are
+*> overwritten; the rest of the array is unchanged.
+*> If m >= n, elements on and below the diagonal in the first NB
+*> columns, with the array TAUQ, represent the unitary
+*> matrix Q as a product of elementary reflectors; and
+*> elements above the diagonal in the first NB rows, with the
+*> array TAUP, represent the unitary matrix P as a product
+*> of elementary reflectors.
+*> If m < n, elements below the diagonal in the first NB
+*> columns, with the array TAUQ, represent the unitary
+*> matrix Q as a product of elementary reflectors, and
+*> elements on and above the diagonal in the first NB rows,
+*> with the array TAUP, represent the unitary matrix P as
+*> a product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> D (output) DOUBLE PRECISION array, dimension (NB)
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (NB)
*> The diagonal elements of the first NB rows and columns of
*> the reduced matrix. D(i) = A(i,i).
+*> \endverbatim
*>
-*> E (output) DOUBLE PRECISION array, dimension (NB)
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (NB)
*> The off-diagonal elements of the first NB rows and columns of
*> the reduced matrix.
+*> \endverbatim
*>
-*> TAUQ (output) COMPLEX*16 array dimension (NB)
+*> \param[out] TAUQ
+*> \verbatim
+*> TAUQ is COMPLEX*16 array dimension (NB)
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix Q. See Further Details.
+*> \endverbatim
*>
-*> TAUP (output) COMPLEX*16 array, dimension (NB)
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is COMPLEX*16 array, dimension (NB)
*> The scalar factors of the elementary reflectors which
*> represent the unitary matrix P. See Further Details.
+*> \endverbatim
*>
-*> X (output) COMPLEX*16 array, dimension (LDX,NB)
+*> \param[out] X
+*> \verbatim
+*> X is COMPLEX*16 array, dimension (LDX,NB)
*> The m-by-nb matrix X required to update the unreduced part
*> of A.
+*> \endverbatim
*>
-*> LDX (input) INTEGER
+*> \param[in] LDX
+*> \verbatim
+*> LDX is INTEGER
*> The leading dimension of the array X. LDX >= max(1,M).
+*> \endverbatim
*>
-*> Y (output) COMPLEX*16 array, dimension (LDY,NB)
+*> \param[out] Y
+*> \verbatim
+*> Y is COMPLEX*16 array, dimension (LDY,NB)
*> The n-by-nb matrix Y required to update the unreduced part
*> of A.
+*> \endverbatim
*>
-*> LDY (input) INTEGER
+*> \param[in] LDY
+*> \verbatim
+*> LDY is INTEGER
*> The leading dimension of the array Y. LDY >= max(1,N).
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16OTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrices Q and P are represented as products of elementary
*> reflectors:
*> \verbatim
*> X is COMPLEX*16 array, dimension (LDX,NRHS)
*> The N by NRHS matrix X.
+*> \endverbatim
+*>
*> \param[in] LDX
*> \verbatim
*> LDX is INTEGER
*> The leading dimension of the array X. LDX >= max(N,1).
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] BETA
*> \verbatim
*> The number of columns to be reduced.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX*16 array, dimension (LDA,N-K+1)
+*> On entry, the n-by-(n-k+1) general matrix A.
+*> On exit, the elements on and above the k-th subdiagonal in
+*> the first NB columns are overwritten with the corresponding
+*> elements of the reduced matrix; the elements below the k-th
+*> subdiagonal, with the array TAU, represent the matrix Q as a
+*> product of elementary reflectors. The other columns of A are
+*> unchanged. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (NB)
+*> The scalar factors of the elementary reflectors. See Further
+*> Details.
+*> \endverbatim
+*>
+*> \param[out] T
+*> \verbatim
+*> T is COMPLEX*16 array, dimension (LDT,NB)
+*> The upper triangular matrix T.
+*> \endverbatim
+*>
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
+*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
+*>
+*> \param[out] Y
+*> \verbatim
+*> Y is COMPLEX*16 array, dimension (LDY,NB)
+*> The n-by-nb matrix Y.
+*> \endverbatim
+*>
+*> \param[in] LDY
+*> \verbatim
+*> LDY is INTEGER
+*> The leading dimension of the array Y. LDY >= N.
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* unchanged. See Further Details.
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
-*>
-*> TAU (output) COMPLEX*16 array, dimension (NB)
-*> The scalar factors of the elementary reflectors. See Further
-*> Details.
-*>
-*> T (output) COMPLEX*16 array, dimension (LDT,NB)
-*> The upper triangular matrix T.
-*>
-*> LDT (input) INTEGER
-*> The leading dimension of the array T. LDT >= NB.
-*>
-*> Y (output) COMPLEX*16 array, dimension (LDY,NB)
-*> The n-by-nb matrix Y.
-*>
-*> LDY (input) INTEGER
-*> The leading dimension of the array Y. LDY >= N.
-*>
*>
*> The matrix Q is represented as a product of nb elementary reflectors
*>
*> The number of columns to be reduced.
*> \endverbatim
*>
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX*16 array, dimension (LDA,N-K+1)
+*> On entry, the n-by-(n-k+1) general matrix A.
+*> On exit, the elements on and above the k-th subdiagonal in
+*> the first NB columns are overwritten with the corresponding
+*> elements of the reduced matrix; the elements below the k-th
+*> subdiagonal, with the array TAU, represent the matrix Q as a
+*> product of elementary reflectors. The other columns of A are
+*> unchanged. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (NB)
+*> The scalar factors of the elementary reflectors. See Further
+*> Details.
+*> \endverbatim
+*>
+*> \param[out] T
+*> \verbatim
+*> T is COMPLEX*16 array, dimension (LDT,NB)
+*> The upper triangular matrix T.
+*> \endverbatim
+*>
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
+*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
+*>
+*> \param[out] Y
+*> \verbatim
+*> Y is COMPLEX*16 array, dimension (LDY,NB)
+*> The n-by-nb matrix Y.
+*> \endverbatim
+*>
+*> \param[in] LDY
+*> \verbatim
+*> LDY is INTEGER
+*> The leading dimension of the array Y. LDY >= max(1,N).
+*> \endverbatim
+*>
*
* Authors
* =======
* ===============
*>\details \b Further \b Details
*> \verbatim
-* unchanged. See Further Details.
-*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
-*>
-*> TAU (output) COMPLEX*16 array, dimension (NB)
-*> The scalar factors of the elementary reflectors. See Further
-*> Details.
-*>
-*> T (output) COMPLEX*16 array, dimension (LDT,NB)
-*> The upper triangular matrix T.
-*>
-*> LDT (input) INTEGER
-*> The leading dimension of the array T. LDT >= NB.
-*>
-*> Y (output) COMPLEX*16 array, dimension (LDY,NB)
-*> The n-by-nb matrix Y.
-*>
-*> LDY (input) INTEGER
-*> The leading dimension of the array Y. LDY >= max(1,N).
-*>
*>
*> The matrix Q is represented as a product of nb elementary reflectors
*>
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> It is assumed that H is already upper triangular in rows
*> and columns 1:ILO-1 and IHI+1:N and, if ILO.GT.1,
*> H(ILO,ILO-1) is zero. ILO and IHI are normally set by a
*> respectively. If N.GT.0, then 1.LE.ILO.LE.IHI.LE.N.
*> If N = 0, then ILO = 1 and IHI = 0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] H
*> \verbatim
*> form returned in H, with W(i) = H(i,i).
*> \endverbatim
*>
+*> \param[in] ILOZ
+*> \verbatim
+*> ILOZ is INTEGER
+*> \endverbatim
+*>
+*> \param[in] IHIZ
+*> \verbatim
+*> IHIZ is INTEGER
+*> Specify the rows of Z to which transformations must be
+*> applied if WANTZ is .TRUE..
+*> 1 .LE. ILOZ .LE. ILO; IHI .LE. IHIZ .LE. N.
+*> \endverbatim
+*>
*> \param[in,out] Z
*> \verbatim
*> Z is COMPLEX*16 array, dimension (LDZ,IHI)
*> the eigenvalues. Elements 1:ilo-1 and i+1:n of WR
*> and WI contain those eigenvalues which have been
*> successfully computed. (Failures are rare.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANT is .FALSE., then on exit,
*> the remaining unconverged eigenvalues are the eigen-
*> values of the upper Hessenberg matrix rows and
*> columns ILO through INFO of the final, output
*> value of H.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (*) (initial value of H)*U = U*(final value of H)
-*> \endverbatim
-*> \verbatim
+*>
*> where U is a unitary matrix. The final
*> value of H is upper Hessenberg and triangular in
*> rows and columns INFO+1 through IHI.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (final value of Z(ILO:IHI,ILOZ:IHIZ)
*> = (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U
-*> \endverbatim
-*> \verbatim
+*>
*> where U is the unitary matrix in (*) (regard-
*> less of the value of WANTT.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .FALSE., then Z is not
*> accessed.
*> \endverbatim
*> \param[in] S1
*> \verbatim
*> S1 is COMPLEX*16
-*> S2 S1 and S2 are the shifts defining K in (*) above.
+*> \endverbatim
+*>
+*> \param[in] S2
+*> \verbatim
+*> S2 is COMPLEX*16
+*> \endverbatim
+*> \verbatim
+*> S1 and S2 are the shifts defining K in (*) above.
*> \endverbatim
*>
*> \param[out] V
*> \param[in] ILOZ
*> \verbatim
*> ILOZ is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHIZ
*> \verbatim
*> IHIZ is INTEGER
*> Specify the rows of Z to which transformations must be
*> applied if WANTZ is .TRUE.. 1 .LE. ILOZ .LE. IHIZ .LE. N.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] Z
*> \verbatim
*> form returned in H, with W(i) = H(i,i).
*> \endverbatim
*>
+*> \param[in] ILOZ
+*> \verbatim
+*> ILOZ is INTEGER
+*> \endverbatim
+*>
+*> \param[in] IHIZ
+*> \verbatim
+*> IHIZ is INTEGER
+*> Specify the rows of Z to which transformations must be
+*> applied if WANTZ is .TRUE..
+*> 1 .LE. ILOZ .LE. ILO; IHI .LE. IHIZ .LE. N.
+*> \endverbatim
+*>
*> \param[in,out] Z
*> \verbatim
*> Z is COMPLEX*16 array, dimension (LDZ,IHI)
*> the eigenvalues. Elements 1:ilo-1 and i+1:n of WR
*> and WI contain those eigenvalues which have been
*> successfully computed. (Failures are rare.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANT is .FALSE., then on exit,
*> the remaining unconverged eigenvalues are the eigen-
*> values of the upper Hessenberg matrix rows and
*> columns ILO through INFO of the final, output
*> value of H.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (*) (initial value of H)*U = U*(final value of H)
-*> \endverbatim
-*> \verbatim
+*>
*> where U is a unitary matrix. The final
*> value of H is upper Hessenberg and triangular in
*> rows and columns INFO+1 through IHI.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .TRUE., then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (final value of Z(ILO:IHI,ILOZ:IHIZ)
*> = (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U
-*> \endverbatim
-*> \verbatim
+*>
*> where U is the unitary matrix in (*) (regard-
*> less of the value of WANTT.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTZ is .FALSE., then Z is not
*> accessed.
*> \endverbatim
*> reflectors whose product defines the block reflector).
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] V
*> \verbatim
-* The matrix V. See Further Details.
+*> V is COMPLEX*16 array, dimension
+*> (LDV,K) if STOREV = 'C'
+*> (LDV,M) if STOREV = 'R' and SIDE = 'L'
+*> (LDV,N) if STOREV = 'R' and SIDE = 'R'
+*> See Further Details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
*> if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
*> if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> T (input) COMPLEX*16 array, dimension (LDT,K)
+*> \param[in] T
+*> \verbatim
+*> T is COMPLEX*16 array, dimension (LDT,K)
*> The triangular K-by-K matrix T in the representation of the
*> block reflector.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= K.
+*> \endverbatim
*>
-*> C (input/output) COMPLEX*16 array, dimension (LDC,N)
+*> \param[in,out] C
+*> \verbatim
+*> C is COMPLEX*16 array, dimension (LDC,N)
*> On entry, the M-by-N matrix C.
*> On exit, C is overwritten by H*C or H**H*C or C*H or C*H**H.
+*> \endverbatim
*>
-*> LDC (input) INTEGER
+*> \param[in] LDC
+*> \verbatim
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,M).
+*> \endverbatim
*>
-*> WORK (workspace) COMPLEX*16 array, dimension (LDWORK,K)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (LDWORK,K)
+*> \endverbatim
*>
-*> LDWORK (input) INTEGER
+*> \param[in] LDWORK
+*> \verbatim
+*> LDWORK is INTEGER
*> The leading dimension of the array WORK.
*> If SIDE = 'L', LDWORK >= max(1,N);
*> if SIDE = 'R', LDWORK >= max(1,M).
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16OTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The shape of the matrix V and the storage of the vectors which define
*> the H(i) is best illustrated by the following example with n = 5 and
*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] STOREV
*> \verbatim
-* reflectors are stored (see also Further Details):
+*> STOREV is CHARACTER*1
+*> Specifies how the vectors which define the elementary
+*> reflectors are stored (see also Further Details):
*> = 'C': columnwise
*> = 'R': rowwise
+*> \endverbatim
*>
-*> N (input) INTEGER
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
*> The order of the block reflector H. N >= 0.
+*> \endverbatim
*>
-*> K (input) INTEGER
+*> \param[in] K
+*> \verbatim
+*> K is INTEGER
*> The order of the triangular factor T (= the number of
*> elementary reflectors). K >= 1.
+*> \endverbatim
*>
-*> V (input/output) COMPLEX*16 array, dimension
+*> \param[in,out] V
+*> \verbatim
+*> V is COMPLEX*16 array, dimension
*> (LDV,K) if STOREV = 'C'
*> (LDV,N) if STOREV = 'R'
*> The matrix V. See further details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> TAU (input) COMPLEX*16 array, dimension (K)
+*> \param[in] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (K)
*> TAU(i) must contain the scalar factor of the elementary
*> reflector H(i).
+*> \endverbatim
*>
-*> T (output) COMPLEX*16 array, dimension (LDT,K)
+*> \param[out] T
+*> \verbatim
+*> T is COMPLEX*16 array, dimension (LDT,K)
*> The k by k triangular factor T of the block reflector.
*> If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
*> lower triangular. The rest of the array is not used.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= K.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16OTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The shape of the matrix V and the storage of the vectors which define
*> the H(i) is best illustrated by the following example with n = 5 and
*> is stored the corresponding shift as given by DLARRE.
*> On exit, L is overwritten.
*> \endverbatim
+*>
+*> \param[in] PIVMIN
*> \verbatim
-*> PIVMIN (in) DOUBLE PRECISION
+*> PIVMIN is DOUBLE PRECISION
*> The minimum pivot allowed in the Sturm sequence.
*> \endverbatim
*>
*> \verbatim
*> INFO is INTEGER
*> = 0: successful exit
-*> \endverbatim
-*> \verbatim
+*>
*> > 0: A problem occured in ZLARRV.
*> < 0: One of the called subroutines signaled an internal problem.
*> Needs inspection of the corresponding parameter IINFO
*> for further information.
-*> \endverbatim
-*> \verbatim
+*>
*> =-1: Problem in DLARRB when refining a child's eigenvalues.
*> =-2: Problem in DLARRF when computing the RRR of a child.
*> When a child is inside a tight cluster, it can be difficult
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> 3-5-96 - Modified with a new algorithm by W. Kahan and J. Demmel
*>
*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] STOREV
*> \verbatim
-* reflectors are stored (see also Further Details):
+*> STOREV is CHARACTER*1
+*> Specifies how the vectors which define the elementary
+*> reflectors are stored (see also Further Details):
*> = 'C': columnwise (not supported yet)
*> = 'R': rowwise
+*> \endverbatim
*>
-*> N (input) INTEGER
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
*> The order of the block reflector H. N >= 0.
+*> \endverbatim
*>
-*> K (input) INTEGER
+*> \param[in] K
+*> \verbatim
+*> K is INTEGER
*> The order of the triangular factor T (= the number of
*> elementary reflectors). K >= 1.
+*> \endverbatim
*>
-*> V (input/output) COMPLEX*16 array, dimension
+*> \param[in,out] V
+*> \verbatim
+*> V is COMPLEX*16 array, dimension
*> (LDV,K) if STOREV = 'C'
*> (LDV,N) if STOREV = 'R'
*> The matrix V. See further details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> TAU (input) COMPLEX*16 array, dimension (K)
+*> \param[in] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (K)
*> TAU(i) must contain the scalar factor of the elementary
*> reflector H(i).
+*> \endverbatim
*>
-*> T (output) COMPLEX*16 array, dimension (LDT,K)
+*> \param[out] T
+*> \verbatim
+*> T is COMPLEX*16 array, dimension (LDT,K)
*> The k by k triangular factor T of the block reflector.
*> If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
*> lower triangular. The rest of the array is not used.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= K.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16OTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> Based on contributions by
*> A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville, USA
*> \param[in] CTO
*> \verbatim
*> CTO is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> The matrix A is multiplied by CTO/CFROM. A(I,J) is computed
*> without over/underflow if the final result CTO*A(I,J)/CFROM
*> can be represented without over/underflow. CFROM must be
*> The number of rows and columns to be reduced.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in,out] A
*> \verbatim
-* See Further Details.
+*> 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 UPLO = 'U', the last NB columns have been reduced to
+*> tridiagonal form, with the diagonal elements overwriting
+*> the diagonal elements of A; the elements above the diagonal
+*> with the array TAU, represent the unitary matrix Q as a
+*> product of elementary reflectors;
+*> if UPLO = 'L', the first NB columns have been reduced to
+*> tridiagonal form, with the diagonal elements overwriting
+*> the diagonal elements of A; the elements below the diagonal
+*> with the array TAU, represent the unitary matrix Q as a
+*> product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> E (output) DOUBLE PRECISION array, dimension (N-1)
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (N-1)
*> If UPLO = 'U', E(n-nb:n-1) contains the superdiagonal
*> elements of the last NB columns of the reduced matrix;
*> if UPLO = 'L', E(1:nb) contains the subdiagonal elements of
*> the first NB columns of the reduced matrix.
+*> \endverbatim
*>
-*> TAU (output) COMPLEX*16 array, dimension (N-1)
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (N-1)
*> The scalar factors of the elementary reflectors, stored in
*> TAU(n-nb:n-1) if UPLO = 'U', and in TAU(1:nb) if UPLO = 'L'.
*> See Further Details.
+*> \endverbatim
*>
-*> W (output) COMPLEX*16 array, dimension (LDW,NB)
+*> \param[out] W
+*> \verbatim
+*> W is COMPLEX*16 array, dimension (LDW,NB)
*> The n-by-nb matrix W required to update the unreduced part
*> of A.
+*> \endverbatim
*>
-*> LDW (input) INTEGER
+*> \param[in] LDW
+*> \verbatim
+*> LDW is INTEGER
*> The leading dimension of the array W. LDW >= max(1,N).
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16OTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
*> reflectors
*> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd).
*> \endverbatim
+*> \verbatim
+*> On exit, if INFO = 0, the factor S from the split Cholesky
+*> factorization A = S**H*S. See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDAB
+*> \verbatim
+*> LDAB is INTEGER
+*> The leading dimension of the array AB. LDAB >= KD+1.
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> > 0: if INFO = i, the factorization could not be completed,
+*> because the updated element a(i,i) was negative; the
+*> matrix A is not positive definite.
+*> \endverbatim
*>
*
* Authors
* ===============
*>\details \b Further \b Details
*> \verbatim
-* factorization A = S**H*S. See Further Details.
-*>
-*> LDAB (input) INTEGER
-*> The leading dimension of the array AB. LDAB >= KD+1.
-*>
-*> INFO (output) INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> > 0: if INFO = i, the factorization could not be completed,
-*> because the updated element a(i,i) was negative; the
-*> matrix A is not positive definite.
-*>
*>
*> The band storage scheme is illustrated by the following example, when
*> N = 7, KD = 2:
*>
*> Array elements marked * are not used by the routine; s12**H denotes
*> conjg(s12); the diagonal elements of S are real.
-
*>
*> \endverbatim
*>
*> \param[in] C
*> \verbatim
*> C is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[in] S
*> \verbatim
*> S is COMPLEX*16
*> [ -conjg(S) C ]
*> where C*C + S*CONJG(S) = 1.0.
*> \endverbatim
-*> \endverbatim
*>
*
* Authors
*> \param[in] VL
*> \verbatim
*> VL is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] ABSTOL
*> \verbatim
*> \param[in] VL
*> \verbatim
*> VL is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[in] VU
*> \verbatim
*> VU is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> If RANGE='V', the lower and upper bounds of the interval to
*> be searched for eigenvalues. VL < VU.
*> Not referenced if RANGE = 'A' or 'I'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] IL
*> \verbatim
*> IL is INTEGER
+*> \endverbatim
+*>
*> \param[in] IU
*> \verbatim
*> IU is INTEGER
+*> \endverbatim
+*> \verbatim
*> If RANGE='I', the indices (in ascending order) of the
*> smallest and largest eigenvalues to be returned.
*> 1 <= IL <= IU <= N, if N > 0.
*> Not referenced if RANGE = 'A' or 'V'.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] M
*> \verbatim
*> WORK is COMPLEX*16 array, dimension (N)
*> \endverbatim
*>
-*> \param[in] LWORK
-*> \verbatim
-*> LWORK is INTEGER
-*> The length of WORK. LWORK >=1.
-*> LWORK = N
-*> \endverbatim
-*> \verbatim
-*> If LWORK = -1, then a workspace query is assumed; the routine
-*> only calculates the optimal size of the WORK array, returns
-*> this value as the first entry of the WORK array, and no error
-*> message related to LWORK is issued by XERBLA.
-*> \endverbatim
-*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
* ===============
*>\details \b Further \b Details
*> \verbatim
-* Further Details
-*> ======= =======
*>
*> Reference: Livne, O.E. and Golub, G.H., "Scaling by Binormalization",
*> Numerical Algorithms, vol. 35, no. 1, pp. 97-120, January 2004.
*> \param[out] ALPHA
*> \verbatim
*> ALPHA is COMPLEX*16 array, dimension (N)
+*> \endverbatim
+*>
*> \param[out] BETA
*> \verbatim
*> BETA is COMPLEX*16 array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> The diagonal elements of A and B, respectively,
*> when the pair (A,B) has been reduced to generalized Schur
*> form. ALPHA(i)/BETA(i) i=1,...,N are the generalized
*> eigenvalues.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] Q
*> \verbatim
*> \param[out] PL
*> \verbatim
*> PL is DOUBLE PRECISION
+*> \endverbatim
+*>
*> \param[out] PR
*> \verbatim
*> PR is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> If IJOB = 1, 4 or 5, PL, PR are lower bounds on the
*> reciprocal of the norm of "projections" onto left and right
*> eigenspace with respect to the selected cluster.
*> If M = 0 or M = N, PL = PR = 1.
*> If IJOB = 0, 2 or 3 PL, PR are not referenced.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] DIF
*> \verbatim
*> The number of columns of the matrices A and B. N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] K
+*> \verbatim
+*> K is INTEGER
+*> \endverbatim
+*>
+*> \param[in] L
+*> \verbatim
+*> L is INTEGER
+*> \endverbatim
*> \verbatim
-* See Further Details.
+*> K and L specify the subblocks in the input matrices A and B:
+*> A23 = A(K+1:MIN(K+L,M),N-L+1:N) and B13 = B(1:L,,N-L+1:N)
+*> of A and B, whose GSVD is going to be computed by ZTGSJA.
+*> See Further Details.
+*> \endverbatim
*>
-*> A (input/output) COMPLEX*16 array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX*16 array, dimension (LDA,N)
*> On entry, the M-by-N matrix A.
*> On exit, A(N-K+1:N,1:MIN(K+L,M) ) contains the triangular
*> matrix R or part of R. See Purpose for details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX*16 array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX*16 array, dimension (LDB,N)
*> On entry, the P-by-N matrix B.
*> On exit, if necessary, B(M-K+1:L,N+M-K-L+1:N) contains
*> a part of R. See Purpose for details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,P).
+*> \endverbatim
*>
-*> TOLA (input) DOUBLE PRECISION
-*> TOLB (input) DOUBLE PRECISION
+*> \param[in] TOLA
+*> \verbatim
+*> TOLA is DOUBLE PRECISION
+*> \endverbatim
+*>
+*> \param[in] TOLB
+*> \verbatim
+*> TOLB is DOUBLE PRECISION
+*> \endverbatim
+*> \verbatim
*> TOLA and TOLB are the convergence criteria for the Jacobi-
*> Kogbetliantz iteration procedure. Generally, they are the
*> same as used in the preprocessing step, say
*> TOLA = MAX(M,N)*norm(A)*MAZHEPS,
*> TOLB = MAX(P,N)*norm(B)*MAZHEPS.
+*> \endverbatim
*>
-*> ALPHA (output) DOUBLE PRECISION array, dimension (N)
-*> BETA (output) DOUBLE PRECISION array, dimension (N)
+*> \param[out] ALPHA
+*> \verbatim
+*> ALPHA is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] BETA
+*> \verbatim
+*> BETA is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*> \verbatim
*> On exit, ALPHA and BETA contain the generalized singular
*> value pairs of A and B;
*> ALPHA(1:K) = 1,
*> Furthermore, if K+L < N,
*> ALPHA(K+L+1:N) = 0 and
*> BETA(K+L+1:N) = 0.
+*> \endverbatim
*>
-*> U (input/output) COMPLEX*16 array, dimension (LDU,M)
+*> \param[in,out] U
+*> \verbatim
+*> U is COMPLEX*16 array, dimension (LDU,M)
*> On entry, if JOBU = 'U', U must contain a matrix U1 (usually
*> the unitary matrix returned by ZGGSVP).
*> On exit,
*> if JOBU = 'I', U contains the unitary matrix U;
*> if JOBU = 'U', U contains the product U1*U.
*> If JOBU = 'N', U is not referenced.
+*> \endverbatim
*>
-*> LDU (input) INTEGER
+*> \param[in] LDU
+*> \verbatim
+*> LDU is INTEGER
*> The leading dimension of the array U. LDU >= max(1,M) if
*> JOBU = 'U'; LDU >= 1 otherwise.
+*> \endverbatim
*>
-*> V (input/output) COMPLEX*16 array, dimension (LDV,P)
+*> \param[in,out] V
+*> \verbatim
+*> V is COMPLEX*16 array, dimension (LDV,P)
*> On entry, if JOBV = 'V', V must contain a matrix V1 (usually
*> the unitary matrix returned by ZGGSVP).
*> On exit,
*> if JOBV = 'I', V contains the unitary matrix V;
*> if JOBV = 'V', V contains the product V1*V.
*> If JOBV = 'N', V is not referenced.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V. LDV >= max(1,P) if
*> JOBV = 'V'; LDV >= 1 otherwise.
+*> \endverbatim
*>
-*> Q (input/output) COMPLEX*16 array, dimension (LDQ,N)
+*> \param[in,out] Q
+*> \verbatim
+*> Q is COMPLEX*16 array, dimension (LDQ,N)
*> On entry, if JOBQ = 'Q', Q must contain a matrix Q1 (usually
*> the unitary matrix returned by ZGGSVP).
*> On exit,
*> if JOBQ = 'I', Q contains the unitary matrix Q;
*> if JOBQ = 'Q', Q contains the product Q1*Q.
*> If JOBQ = 'N', Q is not referenced.
+*> \endverbatim
*>
-*> LDQ (input) INTEGER
+*> \param[in] LDQ
+*> \verbatim
+*> LDQ is INTEGER
*> The leading dimension of the array Q. LDQ >= max(1,N) if
*> JOBQ = 'Q'; LDQ >= 1 otherwise.
+*> \endverbatim
*>
-*> WORK (workspace) COMPLEX*16 array, dimension (2*N)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (2*N)
+*> \endverbatim
*>
-*> NCYCLE (output) INTEGER
+*> \param[out] NCYCLE
+*> \verbatim
+*> NCYCLE is INTEGER
*> The number of cycles required for convergence.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value.
*> = 1: the procedure does not converge after MAXIT cycles.
-*>
+*> \endverbatim
+*> \verbatim
*> Internal Parameters
*> ===================
*>
*> MAXIT specifies the total loops that the iterative procedure
*> may take. If after MAXIT cycles, the routine fails to
*> converge, we return INFO = 1.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16OTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> ZTGSJA essentially uses a variant of Kogbetliantz algorithm to reduce
*> min(L,M-K)-by-L triangular (or trapezoidal) matrix A23 and L-by-L
*> \verbatim
*> N is INTEGER
*> The number of columns of the matrix B. N >= 0.
+*> \endverbatim
*>
*> \param[in] K
*> \verbatim
*> The number of elementary reflectors whose product defines
*> the matrix Q.
*> \endverbatim
-*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* K >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The order of the trapezoidal part of V.
+*> K >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> NB (input) INTEGER
+*> \param[in] NB
+*> \verbatim
+*> NB is INTEGER
*> The block size used for the storage of T. K >= NB >= 1.
*> This must be the same value of NB used to generate T
*> in CTPQRT.
+*> \endverbatim
*>
-*> V (input) COMPLEX*16 array, dimension (LDA,K)
+*> \param[in] V
+*> \verbatim
+*> V is COMPLEX*16 array, dimension (LDA,K)
*> The i-th column must contain the vector which defines the
*> elementary reflector H(i), for i = 1,2,...,k, as returned by
*> CTPQRT in B. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
-*> The leading dimension of the array A.
-*> If SIDE = 'L', LDA >= max(1,M);
-*> if SIDE = 'R', LDA >= max(1,N).
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
+*> The leading dimension of the array V.
+*> If SIDE = 'L', LDV >= max(1,M);
+*> if SIDE = 'R', LDV >= max(1,N).
+*> \endverbatim
*>
-*> T (input) COMPLEX*16 array, dimension (LDT,K)
+*> \param[in] T
+*> \verbatim
+*> T is COMPLEX*16 array, dimension (LDT,K)
*> The upper triangular factors of the block reflectors
*> as returned by CTPQRT, stored as a NB-by-K matrix.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
*>
-*> A (input/output) COMPLEX*16 array, dimension
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX*16 array, dimension
*> (LDA,N) if SIDE = 'L' or
*> (LDA,K) if SIDE = 'R'
*> On entry, the K-by-N or M-by-K matrix A.
*> On exit, A is overwritten by the corresponding block of
*> Q*C or Q**H*C or C*Q or C*Q**H. See Further Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A.
*> If SIDE = 'L', LDC >= max(1,K);
*> If SIDE = 'R', LDC >= max(1,M).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX*16 array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX*16 array, dimension (LDB,N)
*> On entry, the M-by-N matrix B.
*> On exit, B is overwritten by the corresponding block of
*> Q*C or Q**H*C or C*Q or C*Q**H. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B.
*> LDB >= max(1,M).
+*> \endverbatim
*>
-*> WORK (workspace/output) COMPLEX*16 array. The dimension of WORK is
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array. The dimension of WORK is
*> N*NB if SIDE = 'L', or M*NB if SIDE = 'R'.
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16OTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The columns of the pentagonal matrix V contain the elementary reflectors
*> H(1), H(2), ..., H(K); V is composed of a rectangular block V1 and a
*> N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* MIN(M,N) >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The number of rows of the upper trapezoidal part of B.
+*> MIN(M,N) >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> NB (input) INTEGER
+*> \param[in] NB
+*> \verbatim
+*> NB is INTEGER
*> The block size to be used in the blocked QR. N >= NB >= 1.
+*> \endverbatim
*>
-*> A (input/output) COMPLEX*16 array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX*16 array, dimension (LDA,N)
*> On entry, the upper triangular N-by-N matrix A.
*> On exit, the elements on and above the diagonal of the array
*> contain the upper triangular matrix R.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX*16 array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX*16 array, dimension (LDB,N)
*> On entry, the pentagonal M-by-N matrix B. The first M-L rows
*> are rectangular, and the last L rows are upper trapezoidal.
*> On exit, B contains the pentagonal matrix V. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,M).
+*> \endverbatim
*>
-*> T (output) COMPLEX*16 array, dimension (LDT,N)
+*> \param[out] T
+*> \verbatim
+*> T is COMPLEX*16 array, dimension (LDT,N)
*> The upper triangular block reflectors stored in compact form
*> as a sequence of upper triangular blocks. See Further Details.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= NB.
+*> \endverbatim
*>
-*> WORK (workspace) COMPLEX*16 array, dimension (NB*N)
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension (NB*N)
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
-*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16OTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*> The input matrix C is a (N+M)-by-N matrix
*>
*> C = [ A ]
*> N >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERcomputational
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* MIN(M,N) >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The number of rows of the upper trapezoidal part of B.
+*> MIN(M,N) >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> A (input/output) COMPLEX*16 array, dimension (LDA,N)
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX*16 array, dimension (LDA,N)
*> On entry, the upper triangular N-by-N matrix A.
*> On exit, the elements on and above the diagonal of the array
*> contain the upper triangular matrix R.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A. LDA >= max(1,N).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX*16 array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX*16 array, dimension (LDB,N)
*> On entry, the pentagonal M-by-N matrix B. The first M-L rows
*> are rectangular, and the last L rows are upper trapezoidal.
*> On exit, B contains the pentagonal matrix V. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B. LDB >= max(1,M).
+*> \endverbatim
*>
-*> T (output) COMPLEX*16 array, dimension (LDT,N)
+*> \param[out] T
+*> \verbatim
+*> T is COMPLEX*16 array, dimension (LDT,N)
*> The N-by-N upper triangular factor T of the block reflector.
*> See Further Details.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T. LDT >= max(1,N)
+*> \endverbatim
*>
-*> INFO (output) INTEGER
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16OTHERcomputational
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The input matrix C is a (N+M)-by-N matrix
*>
*> K >= 0.
*> \endverbatim
*>
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERauxiliary
-*
-*
-* Further Details
-* ===============
-*>\details \b Further \b Details
+*> \param[in] L
*> \verbatim
-* K >= L >= 0. See Further Details.
+*> L is INTEGER
+*> The order of the trapezoidal part of V.
+*> K >= L >= 0. See Further Details.
+*> \endverbatim
*>
-*> V (input) COMPLEX*16 array, dimension
+*> \param[in] V
+*> \verbatim
+*> V is COMPLEX*16 array, dimension
*> (LDV,K) if STOREV = 'C'
*> (LDV,M) if STOREV = 'R' and SIDE = 'L'
*> (LDV,N) if STOREV = 'R' and SIDE = 'R'
*> The pentagonal matrix V, which contains the elementary reflectors
*> H(1), H(2), ..., H(K). See Further Details.
+*> \endverbatim
*>
-*> LDV (input) INTEGER
+*> \param[in] LDV
+*> \verbatim
+*> LDV is INTEGER
*> The leading dimension of the array V.
*> If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
*> if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
*> if STOREV = 'R', LDV >= K.
+*> \endverbatim
*>
-*> T (input) COMPLEX*16 array, dimension (LDT,K)
+*> \param[in] T
+*> \verbatim
+*> T is COMPLEX*16 array, dimension (LDT,K)
*> The triangular K-by-K matrix T in the representation of the
*> block reflector.
+*> \endverbatim
*>
-*> LDT (input) INTEGER
+*> \param[in] LDT
+*> \verbatim
+*> LDT is INTEGER
*> The leading dimension of the array T.
*> LDT >= K.
+*> \endverbatim
*>
-*> A (input/output) COMPLEX*16 array, dimension
+*> \param[in,out] A
+*> \verbatim
+*> A is COMPLEX*16 array, dimension
*> (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R'
*> On entry, the K-by-N or M-by-K matrix A.
*> On exit, A is overwritten by the corresponding block of
*> H*C or H**H*C or C*H or C*H**H. See Futher Details.
+*> \endverbatim
*>
-*> LDA (input) INTEGER
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
*> The leading dimension of the array A.
*> If SIDE = 'L', LDC >= max(1,K);
*> If SIDE = 'R', LDC >= max(1,M).
+*> \endverbatim
*>
-*> B (input/output) COMPLEX*16 array, dimension (LDB,N)
+*> \param[in,out] B
+*> \verbatim
+*> B is COMPLEX*16 array, dimension (LDB,N)
*> On entry, the M-by-N matrix B.
*> On exit, B is overwritten by the corresponding block of
*> H*C or H**H*C or C*H or C*H**H. See Further Details.
+*> \endverbatim
*>
-*> LDB (input) INTEGER
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
*> The leading dimension of the array B.
*> LDB >= max(1,M).
+*> \endverbatim
*>
-*> WORK (workspace) COMPLEX*16 array, dimension
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array, dimension
*> (LDWORK,N) if SIDE = 'L',
*> (LDWORK,K) if SIDE = 'R'.
+*> \endverbatim
*>
-*> LDWORK (input) INTEGER
+*> \param[in] LDWORK
+*> \verbatim
+*> LDWORK is INTEGER
*> The leading dimension of the array WORK.
*> If SIDE = 'L', LDWORK >= K;
*> if SIDE = 'R', LDWORK >= M.
+*> \endverbatim
*>
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16OTHERauxiliary
+*
+*
+* Further Details
+* ===============
+*>\details \b Further \b Details
+*> \verbatim
*>
*> The matrix C is a composite matrix formed from blocks A and B.
*> The block B is of size M-by-N; if SIDE = 'R', A is of size M-by-K,
*> \param[in] IFST
*> \verbatim
*> IFST is INTEGER
+*> \endverbatim
+*>
*> \param[in] ILST
*> \verbatim
*> ILST is INTEGER
+*> \endverbatim
+*> \verbatim
*> Specify the reordering of the diagonal elements of T:
*> The element with row index IFST is moved to row ILST by a
*> sequence of transpositions between adjacent elements.
*> 1 <= IFST <= N; 1 <= ILST <= N.
*> \endverbatim
-*> \endverbatim
*>
*> \param[out] INFO
*> \verbatim
*> The number of columns in X11 and X21. 0 <= Q <= M.
*> \endverbatim
*>
-*> \param[in,out] X
+*> \param[in,out] X11
*> \verbatim
-*> X is COMPLEX*16 array, dimension (LDX,M)
-*> On entry, the unitary matrix whose CSD is desired.
+*> X11 is COMPLEX*16 array, dimension (LDX11,Q)
+*> On entry, part of the unitary matrix whose CSD is desired.
*> \endverbatim
*>
-*> \param[in] LDX
+*> \param[in] LDX11
*> \verbatim
-*> LDX is INTEGER
-*> The leading dimension of X. LDX >= MAX(1,M).
+*> LDX11 is INTEGER
+*> The leading dimension of X11. LDX11 >= MAX(1,P).
+*> \endverbatim
+*>
+*> \param[in,out] X12
+*> \verbatim
+*> X12 is COMPLEX*16 array, dimension (LDX12,M-Q)
+*> On entry, part of the unitary matrix whose CSD is desired.
+*> \endverbatim
+*>
+*> \param[in] LDX12
+*> \verbatim
+*> LDX12 is INTEGER
+*> The leading dimension of X12. LDX12 >= MAX(1,P).
+*> \endverbatim
+*>
+*> \param[in,out] X21
+*> \verbatim
+*> X21 is COMPLEX*16 array, dimension (LDX21,Q)
+*> On entry, part of the unitary matrix whose CSD is desired.
+*> \endverbatim
+*>
+*> \param[in] LDX21
+*> \verbatim
+*> LDX21 is INTEGER
+*> The leading dimension of X11. LDX21 >= MAX(1,M-P).
+*> \endverbatim
+*>
+*> \param[in,out] X22
+*> \verbatim
+*> X22 is COMPLEX*16 array, dimension (LDX22,M-Q)
+*> On entry, part of the unitary matrix whose CSD is desired.
+*> \endverbatim
+*>
+*> \param[in] LDX22
+*> \verbatim
+*> LDX22 is INTEGER
+*> The leading dimension of X11. LDX22 >= MAX(1,M-P).
*> \endverbatim
*>
*> \param[out] THETA
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> ILO and IHI must have the same values as in the previous call
*> of ZGEHRD. Q is equal to the unit matrix except in the
*> submatrix Q(ilo+1:ihi,ilo+1:ihi).
*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in,out] A
*> \verbatim
*> \param[in] ILO
*> \verbatim
*> ILO is INTEGER
+*> \endverbatim
+*>
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
+*> \endverbatim
+*> \verbatim
*> ILO and IHI must have the same values as in the previous call
*> of ZGEHRD. Q is equal to the unit matrix except in the
*> submatrix Q(ilo+1:ihi,ilo+1:ihi).
*> if SIDE = 'R', then 1 <= ILO <= IHI <= N, if N > 0, and
*> ILO = 1 and IHI = 0, if N = 0.
*> \endverbatim
-*> \endverbatim
*>
*> \param[in] A
*> \verbatim
*> (LDPT,max(min(MVAL(j),NVAL(j))))
*> \endverbatim
*>
-*> \param[out] V
+*> \param[out] VT
*> \verbatim
-*> V is COMPLEX array, dimension
+*> VT is COMPLEX array, dimension
*> (LDPT,max(min(MVAL(j),NVAL(j))))
*> \endverbatim
*>
*>
*> \param[in,out] A
*> \verbatim
-*> A is REAL array, dimension
+*> A is COMPLEX array, dimension
*> (LDA, max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed.
*>
*> \param[out] U
*> \verbatim
-*> U is REAL array, dimension (LDU, max(NN))
+*> U is COMPLEX array, dimension (LDU, max(NN))
*> Used to hold the unitary matrix computed by CHBTRD.
*> \endverbatim
*>
*>
*> \param[out] WORK
*> \verbatim
-*> WORK is REAL array, dimension (LWORK)
+*> WORK is COMPLEX array, dimension (LWORK)
*> \endverbatim
*>
*> \param[in] LWORK
*> max( LDA+1, max(NN)+1 )*max(NN).
*> \endverbatim
*>
+*> \param[out] RWORK
+*> \verbatim
+*> RWORK is REAL array
+*> \endverbatim
+*>
*> \param[out] RESULT
*> \verbatim
*> RESULT is REAL array, dimension (4)
*> eigenvalues in D3 correspond with the matrix in A.
*> \endverbatim
*>
+*> \param[out] D4
+*> \verbatim
+*> D4 is REAL array of
+*> dimension( max(NN) )
+*> The eigenvalues of A, as computed by CPTEQR(V).
+*> ZPTEQR factors S as Z4 D4 Z4*
+*> On exit, the eigenvalues in D4 correspond with the matrix in A.
+*> \endverbatim
+*>
+*> \param[out] D5
+*> \verbatim
+*> D5 is REAL array of
+*> dimension( max(NN) )
+*> The eigenvalues of A, as computed by ZPTEQR(N)
+*> when Z is not computed. On exit, the
+*> eigenvalues in D4 correspond with the matrix in A.
+*> \endverbatim
+*>
+*> \param[out] WA1
+*> \verbatim
+*> WA1 is REAL array of
+*> dimension( max(NN) )
+*> All eigenvalues of A, computed to high
+*> absolute accuracy, with different range options.
+*> as computed by SSTEBZ.
+*> \endverbatim
+*>
+*> \param[out] WA2
+*> \verbatim
+*> WA2 is REAL array of
+*> dimension( max(NN) )
+*> Selected eigenvalues of A, computed to high
+*> absolute accuracy, with different range options.
+*> as computed by SSTEBZ.
+*> Choose random values for IL and IU, and ask for the
+*> IL-th through IU-th eigenvalues.
+*> \endverbatim
+*>
+*> \param[out] WA3
+*> \verbatim
+*> WA3 is REAL array of
+*> dimension( max(NN) )
+*> Selected eigenvalues of A, computed to high
+*> absolute accuracy, with different range options.
+*> as computed by SSTEBZ.
+*> Determine the values VL and VU of the IL-th and IU-th
+*> eigenvalues and ask for all eigenvalues in this range.
+*> \endverbatim
+*>
+*> \param[out] WR
+*> \verbatim
+*> WR is DOUBLE PRECISION array of
+*> dimension( max(NN) )
+*> All eigenvalues of A, computed to high
+*> absolute accuracy, with different options.
+*> as computed by DSTEBZ.
+*> \endverbatim
+*>
*> \param[out] U
*> \verbatim
*> U is COMPLEX array of
*> \param[out] IWORK
*> \verbatim
*> IWORK is INTEGER array,
-*> dimension (6 + 6*Nmax + 5 * Nmax * lg Nmax )
-*> where Nmax = max( NN(j), 2 ) and lg = log base 2.
*> Workspace.
*> \endverbatim
*>
+*> \param[out] LIWORK
+*> \verbatim
+*> LIWORK is INTEGER
+*> The number of entries in IWORK. This must be at least
+*> 6 + 6*Nmax + 5 * Nmax * lg Nmax
+*> where Nmax = max( NN(j), 2 ) and lg = log base 2.
+*> \endverbatim
+*>
*> \param[out] RWORK
*> \verbatim
-*> RWORK is REAL array of
-*> dimension( ??? )
+*> RWORK is REAL array
+*> \endverbatim
+*>
+*> \param[in] LRWORK
+*> \verbatim
+*> LRWORK is INTEGER
+*> The number of entries in LRWORK (dimension( ??? )
*> \endverbatim
*>
*> \param[out] RESULT
*> S is REAL array, dimension (N)
*> \endverbatim
*>
-*> \param[out] DTRU
+*> \param[out] STRU
*> \verbatim
-*> DTRU is REAL array, dimension (N)
+*> STRU is REAL array, dimension (N)
*> \endverbatim
*>
*> \param[out] DIF
*> or the size of the matrix. It must be at least zero.
*> \endverbatim
*>
-*> \param[in] NOUNIT
-*> \verbatim
-*> NOUNIT is INTEGER
-*> The FORTRAN unit number for printing out error messages
-*> (e.g., if a routine returns IINFO not equal to 0.)
-*> \endverbatim
-*>
*> \param[out] A
*> \verbatim
*> A is COMPLEX array, dimension (LDA,max(NN))
*> IWORK is INTEGER array, dimension at least 8*min(M,N)
*> \endverbatim
*>
-*> \param[out] RESULT
+*> \param[in] NOUNIT
*> \verbatim
-*> RESULT is REAL array, dimension (7)
-*> The values computed by the 7 tests described above.
-*> The values are currently limited to 1/ULP, to avoid
-*> overflow.
+*> NOUNIT is INTEGER
+*> The FORTRAN unit number for printing out error messages
+*> (e.g., if a routine returns IINFO not equal to 0.)
*> \endverbatim
*>
*> \param[out] INFO
*> IWORK is INTEGER array, dimension (max(NN))
*> \endverbatim
*>
+*> \param[out] BWORK
+*> \verbatim
+*> BWORK is LOGICAL array, dimension (max(NN))
+*> \endverbatim
+*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
*> Leading dimension of LRE. Must be at least max(1,max(NN,12))
*> \endverbatim
*>
+*> \param[out] RCONDV
+*> \verbatim
+*> RCONDV is REAL array, dimension (N)
+*> RCONDV holds the computed reciprocal condition numbers
+*> for eigenvectors.
+*> \endverbatim
+*>
+*> \param[out] RCNDV1
+*> \verbatim
+*> RCNDV1 is REAL array, dimension (N)
+*> RCNDV1 holds more computed reciprocal condition numbers
+*> for eigenvectors.
+*> \endverbatim
+*>
+*> \param[in] RCDVIN
+*> \verbatim
+*> RCDVIN is REAL array, dimension (N)
+*> When COMP = .TRUE. RCDVIN holds the precomputed reciprocal
+*> condition numbers for eigenvectors to be compared with
+*> RCONDV.
+*> \endverbatim
+*>
+*> \param[out] RCONDE
+*> \verbatim
+*> RCONDE is REAL array, dimension (N)
+*> RCONDE holds the computed reciprocal condition numbers
+*> for eigenvalues.
+*> \endverbatim
+*>
+*> \param[out] RCNDE1
+*> \verbatim
+*> RCNDE1 is REAL array, dimension (N)
+*> RCNDE1 holds more computed reciprocal condition numbers
+*> for eigenvalues.
+*> \endverbatim
+*>
+*> \param[in] RCDEIN
+*> \verbatim
+*> RCDEIN is REAL array, dimension (N)
+*> When COMP = .TRUE. RCDEIN holds the precomputed reciprocal
+*> condition numbers for eigenvalues to be compared with
+*> RCONDE.
+*> \endverbatim
+*>
+*> \param[out] SCALE
+*> \verbatim
+*> SCALE is REAL array, dimension (N)
+*> Holds information describing balancing of matrix.
+*> \endverbatim
+*>
+*> \param[out] SCALE1
+*> \verbatim
+*> SCALE1 is REAL array, dimension (N)
+*> Holds information describing balancing of matrix.
+*> \endverbatim
+*>
*> \param[out] RESULT
*> \verbatim
*> RESULT is REAL array, dimension (11)
*> RWORK is REAL array, dimension (N)
*> \endverbatim
*>
+*> \param[out] RESULT
+*> \verbatim
+*> RESULT is REAL array, dimension (2)
+*> RESULT(1) = | A E - E W | / ( |A| |E| ulp )
+*> RESULT(2) = max | m-norm(E(j)) - 1 | / ( n ulp )
+*> \endverbatim
*
* Authors
* =======
* LOGICAL LERR, OK
* CHARACTER*(*) SRNAMT
* INTEGER INFOT, NOUT
-* ..
-* .. Intrinsic Functions ..
-* INTRINSIC LEN_TRIM
-* ..
-* .. Executable Statements ..
-* IF( .NOT.LERR ) THEN
-* WRITE( NOUT, FMT = 9999 )INFOT,
-* $ SRNAMT( 1:LEN_TRIM( SRNAMT ) )
-* OK = .FALSE.
-* END IF
-* LERR = .FALSE.
-* RETURN
-*
-* 9999 FORMAT( ' *** Illegal value of parameter number ', I2,
-* $ ' not detected by ', A6, ' ***' )
-*
-* End of CHKXER.
-*
-* END
+*
* Purpose
* =======
*
*> \param[in] ALPHA
*> \verbatim
*> ALPHA is COMPLEX
+*> \endverbatim
+*>
*> \param[in] BETA
*> \verbatim
*> BETA is COMPLEX
+*> \endverbatim
+*> \verbatim
*> parameters to decide whether the pair (ALPHA, BETA) is
*> selected.
*> \endverbatim
-*> \endverbatim
*>
*
* Authors
*> (LDPT,max(min(MVAL(j),NVAL(j))))
*> \endverbatim
*>
-*> \param[out] V
+*> \param[out] VT
*> \verbatim
-*> V is DOUBLE PRECISION array, dimension
+*> VT is DOUBLE PRECISION array, dimension
*> (LDPT,max(min(MVAL(j),NVAL(j))))
*> \endverbatim
*>
*> the matrices in S1 and P1. (See DTGEVC for the format.)
*> \endverbatim
*>
-*> \param[out] EVEZTR
+*> \param[out] EVECTR
*> \verbatim
-*> EVEZTR is DOUBLE PRECISION array, dimension (LDU, max(NN))
+*> EVECTR is DOUBLE PRECISION array, dimension (LDU, max(NN))
*> The (block upper triangular) right eigenvector matrix for
*> the matrices in S1 and P1. (See DTGEVC for the format.)
*> \endverbatim
*> eigenvalues in D3 correspond with the matrix in A.
*> \endverbatim
*>
+*> \param[out] D4
+*> \verbatim
+*> D4 is DOUBLE PRECISION array of
+*> dimension( max(NN) )
+*> The eigenvalues of A, as computed by DPTEQR(V).
+*> DPTEQR factors S as Z4 D4 Z4*
+*> On exit, the eigenvalues in D4 correspond with the matrix in A.
+*> \endverbatim
+*>
+*> \param[out] D5
+*> \verbatim
+*> D5 is DOUBLE PRECISION array of
+*> dimension( max(NN) )
+*> The eigenvalues of A, as computed by DPTEQR(N)
+*> when Z is not computed. On exit, the
+*> eigenvalues in D4 correspond with the matrix in A.
+*> \endverbatim
+*>
+*> \param[out] WA1
+*> \verbatim
+*> WA1 is DOUBLE PRECISION array of
+*> dimension( max(NN) )
+*> All eigenvalues of A, computed to high
+*> absolute accuracy, with different range options.
+*> as computed by DSTEBZ.
+*> \endverbatim
+*>
+*> \param[out] WA2
+*> \verbatim
+*> WA2 is DOUBLE PRECISION array of
+*> dimension( max(NN) )
+*> Selected eigenvalues of A, computed to high
+*> absolute accuracy, with different range options.
+*> as computed by DSTEBZ.
+*> Choose random values for IL and IU, and ask for the
+*> IL-th through IU-th eigenvalues.
+*> \endverbatim
+*>
+*> \param[out] WA3
+*> \verbatim
+*> WA3 is DOUBLE PRECISION array of
+*> dimension( max(NN) )
+*> Selected eigenvalues of A, computed to high
+*> absolute accuracy, with different range options.
+*> as computed by DSTEBZ.
+*> Determine the values VL and VU of the IL-th and IU-th
+*> eigenvalues and ask for all eigenvalues in this range.
+*> \endverbatim
+*>
+*> \param[out] WR
+*> \verbatim
+*> WR is DOUBLE PRECISION array of
+*> dimension( max(NN) )
+*> All eigenvalues of A, computed to high
+*> absolute accuracy, with different options.
+*> as computed by DSTEBZ.
+*> \endverbatim
+*>
*> \param[out] U
*> \verbatim
*> U is DOUBLE PRECISION array of
*> \param[out] IWORK
*> \verbatim
*> IWORK is INTEGER array,
-*> dimension (6 + 6*Nmax + 5 * Nmax * lg Nmax )
-*> where Nmax = max( NN(j), 2 ) and lg = log base 2.
*> Workspace.
*> \endverbatim
*>
+*> \param[out] LIWORK
+*> \verbatim
+*> LIWORK is INTEGER
+*> The number of entries in IWORK. This must be at least
+*> 6 + 6*Nmax + 5 * Nmax * lg Nmax
+*> where Nmax = max( NN(j), 2 ) and lg = log base 2.
+*> \endverbatim
+*>
*> \param[out] RESULT
*> \verbatim
*> RESULT is DOUBLE PRECISION array, dimension (26)
*> LIWORK is INTEGER
*> Leading dimension of IWORK. Must be at least N+6.
*> \endverbatim
-*> \verbatim
*>
*> \param[out] RESULT
+*> \verbatim
*> RESULT is DOUBLE PRECISION array, dimension (4)
*> \endverbatim
*>
*> IWORK is INTEGER array, dimension (max(NN))
*> \endverbatim
*>
+*> \param[out] BWORK
+*> \verbatim
+*> BWORK is LOGICAL array, dimension (max(NN))
+*> \endverbatim
+*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
*> IWORK is INTEGER array, dimension (max(NN)*max(NN))
*> \endverbatim
*>
+*> \param[out] BWORK
+*> \verbatim
+*> BWORK is LOGICAL array, dimension (max(NN))
+*> \endverbatim
+*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
*> RCONDE.
*> \endverbatim
*>
+*> \param[out] SCALE
+*> \verbatim
+*> SCALE is DOUBLE PRECISION array, dimension (N)
+*> Holds information describing balancing of matrix.
+*> \endverbatim
+*>
+*> \param[out] SCALE1
+*> \verbatim
+*> SCALE1 is DOUBLE PRECISION array, dimension (N)
+*> Holds information describing balancing of matrix.
+*> \endverbatim
+*>
*> \param[out] RESULT
*> \verbatim
*> RESULT is DOUBLE PRECISION array, dimension (11)
*> IMAT is INTEGER
*> An integer key describing which matrix to generate for this
*> path.
+*> = 1: A: diagonal, B: upper triangular
+*> = 2: A: upper triangular, B: upper triangular
+*> = 3: A: lower triangular, B: upper triangular
+*> Else: A: general dense, B: general dense
*> \endverbatim
*>
*> \param[in] M
*> The number of rows in the matrix to be generated.
*> \endverbatim
*>
+*> \param[in] P
+*> \verbatim
+*> P is INTEGER
+*> \endverbatim
+*>
*> \param[in] N
*> \verbatim
*> N is INTEGER
*> = 'N': nonsymmetric matrix.
*> \endverbatim
*>
-*> \param[out] KL
+*> \param[out] KLA
*> \verbatim
-*> KL is INTEGER
+*> KLA is INTEGER
*> The lower band width of the matrix to be generated.
*> \endverbatim
*>
-*> \param[out] KU
+*> \param[out] KUA
*> \verbatim
-*> KU is INTEGER
+*> KUA is INTEGER
+*> The upper band width of the matrix to be generated.
+*> \endverbatim
+*>
+*> \param[out] KLB
+*> \verbatim
+*> KLB is INTEGER
+*> The lower band width of the matrix to be generated.
+*> \endverbatim
+*>
+*> \param[out] KUB
+*> \verbatim
+*> KUA is INTEGER
*> The upper band width of the matrix to be generated.
*> \endverbatim
*>
*> value.
*> \endverbatim
*>
-*> \param[out] MODE
+*> \param[out] BNORM
+*> \verbatim
+*> BNORM is DOUBLE PRECISION
+*> The desired norm of the matrix to be generated. The diagonal
+*> matrix of singular values or eigenvalues is scaled by this
+*> value.
+*> \endverbatim
+*>
+*> \param[out] MODEA
+*> \verbatim
+*> MODEA is INTEGER
+*> A key indicating how to choose the vector of eigenvalues.
+*> \endverbatim
+*>
+*> \param[out] MODEB
*> \verbatim
-*> MODE is INTEGER
+*> MODEB is INTEGER
*> A key indicating how to choose the vector of eigenvalues.
*> \endverbatim
*>
-*> \param[out] CNDNUM
+*> \param[out] CNDNMA
*> \verbatim
-*> CNDNUM is DOUBLE PRECISION
+*> CNDNMA is DOUBLE PRECISION
*> The desired condition number.
*> \endverbatim
*>
-*> \param[out] DIST
+*> \param[out] CNDNMB
+*> \verbatim
+*> CNDNMB is DOUBLE PRECISION
+*> The desired condition number.
+*> \endverbatim
+*>
+*> \param[out] DISTA
+*> \verbatim
+*> DISTA is CHARACTER*1
+*> The type of distribution to be used by the random number
+*> generator.
+*> \endverbatim
+*>
+*> \param[out] DISTB
*> \verbatim
-*> DIST is CHARACTER*1
+*> DISTB is CHARACTER*1
*> The type of distribution to be used by the random number
*> generator.
*> \endverbatim
* Arguments
* =========
*
-*> \param[in] ITYPE
+*> \param[in] IJOB
*> \verbatim
-*> ITYPE is INTEGER
+*> IJOB is INTEGER
*> Specifies the type of tests to be performed. (See above.)
*> \endverbatim
*>
*> be required.
*> \endverbatim
*>
-*> \param[out] (ILAENV)
+*> \result ILAENV
*> \verbatim
-*> (ILAENV) is INTEGER
+*> ILAENV is INTEGER
*> >= 0: the value of the parameter specified by ISPEC
*> < 0: if ILAENV = -k, the k-th argument had an illegal value.
*> \endverbatim
*> (LDPT,max(min(MVAL(j),NVAL(j))))
*> \endverbatim
*>
-*> \param[out] V
+*> \param[out] VT
*> \verbatim
-*> V is REAL array, dimension
+*> VT is REAL array, dimension
*> (LDPT,max(min(MVAL(j),NVAL(j))))
*> \endverbatim
*>
*> eigenvalues in D3 correspond with the matrix in A.
*> \endverbatim
*>
+*> \param[out] D4
+*> \verbatim
+*> D4 is REAL array of
+*> dimension( max(NN) )
+*> The eigenvalues of A, as computed by SPTEQR(V).
+*> ZPTEQR factors S as Z4 D4 Z4*
+*> On exit, the eigenvalues in D4 correspond with the matrix in A.
+*> \endverbatim
+*>
+*> \param[out] D5
+*> \verbatim
+*> D5 is REAL array of
+*> dimension( max(NN) )
+*> The eigenvalues of A, as computed by SPTEQR(N)
+*> when Z is not computed. On exit, the
+*> eigenvalues in D4 correspond with the matrix in A.
+*> \endverbatim
+*>
+*> \param[out] WA1
+*> \verbatim
+*> WA1 is REAL array of
+*> dimension( max(NN) )
+*> All eigenvalues of A, computed to high
+*> absolute accuracy, with different range options.
+*> as computed by SSTEBZ.
+*> \endverbatim
+*>
+*> \param[out] WA2
+*> \verbatim
+*> WA2 is REAL array of
+*> dimension( max(NN) )
+*> Selected eigenvalues of A, computed to high
+*> absolute accuracy, with different range options.
+*> as computed by SSTEBZ.
+*> Choose random values for IL and IU, and ask for the
+*> IL-th through IU-th eigenvalues.
+*> \endverbatim
+*>
+*> \param[out] WA3
+*> \verbatim
+*> WA3 is REAL array of
+*> dimension( max(NN) )
+*> Selected eigenvalues of A, computed to high
+*> absolute accuracy, with different range options.
+*> as computed by SSTEBZ.
+*> Determine the values VL and VU of the IL-th and IU-th
+*> eigenvalues and ask for all eigenvalues in this range.
+*> \endverbatim
+*>
+*> \param[out] WR
+*> \verbatim
+*> WR is REAL array of
+*> dimension( max(NN) )
+*> All eigenvalues of A, computed to high
+*> absolute accuracy, with different options.
+*> as computed by SSTEBZ.
+*> \endverbatim
+*>
*> \param[out] U
*> \verbatim
*> U is REAL array of
*> \param[out] IWORK
*> \verbatim
*> IWORK is INTEGER array,
-*> dimension (6 + 6*Nmax + 5 * Nmax * lg Nmax )
-*> where Nmax = max( NN(j), 2 ) and lg = log base 2.
*> Workspace.
*> \endverbatim
*>
+*> \param[out] LIWORK
+*> \verbatim
+*> LIWORK is INTEGER
+*> The number of entries in IWORK. This must be at least
+*> 6 + 6*Nmax + 5 * Nmax * lg Nmax
+*> where Nmax = max( NN(j), 2 ) and lg = log base 2.
+*> \endverbatim
+*>
*> \param[out] RESULT
*> \verbatim
*> RESULT is REAL array, dimension (26)
*> S is REAL array, dimension (N)
*> \endverbatim
*>
-*> \param[out] DTRU
+*> \param[out] STRU
*> \verbatim
-*> DTRU is REAL array, dimension (N)
+*> STRU is REAL array, dimension (N)
*> \endverbatim
*>
*> \param[out] DIF
*> IWORK is INTEGER array, dimension (max(NN))
*> \endverbatim
*>
+*> \param[out] BWORK
+*> \verbatim
+*> BWORK is LOGICAL array, dimension (max(NN))
+*> \endverbatim
+*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
*> IWORK is INTEGER array, dimension (max(NN)*max(NN))
*> \endverbatim
*>
+*> \param[out] BWORK
+*> \verbatim
+*> BWORK is LOGICAL array, dimension (max(NN))
+*> \endverbatim
+*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
*> RCONDE.
*> \endverbatim
*>
+*> \param[out] SCALE
+*> \verbatim
+*> SCALE is REAL array, dimension (N)
+*> Holds information describing balancing of matrix.
+*> \endverbatim
+*>
+*> \param[out] SCALE1
+*> \verbatim
+*> SCALE1 is REAL array, dimension (N)
+*> Holds information describing balancing of matrix.
+*> \endverbatim
+*>
*> \param[out] RESULT
*> \verbatim
*> RESULT is REAL array, dimension (11)
*> IMAT is INTEGER
*> An integer key describing which matrix to generate for this
*> path.
+*> = 1: A: diagonal, B: upper triangular
+*> = 2: A: upper triangular, B: upper triangular
+*> = 3: A: lower triangular, B: upper triangular
+*> Else: A: general dense, B: general dense
*> \endverbatim
*>
*> \param[in] M
*> The number of rows in the matrix to be generated.
*> \endverbatim
*>
+*> \param[in] P
+*> \verbatim
+*> P is INTEGER
+*> \endverbatim
+*>
*> \param[in] N
*> \verbatim
*> N is INTEGER
*> = 'N': nonsymmetric matrix.
*> \endverbatim
*>
-*> \param[out] KL
+*> \param[out] KLA
*> \verbatim
-*> KL is INTEGER
+*> KLA is INTEGER
*> The lower band width of the matrix to be generated.
*> \endverbatim
*>
-*> \param[out] KU
+*> \param[out] KUA
*> \verbatim
-*> KU is INTEGER
+*> KUA is INTEGER
+*> The upper band width of the matrix to be generated.
+*> \endverbatim
+*>
+*> \param[out] KLB
+*> \verbatim
+*> KLB is INTEGER
+*> The lower band width of the matrix to be generated.
+*> \endverbatim
+*>
+*> \param[out] KUB
+*> \verbatim
+*> KUA is INTEGER
*> The upper band width of the matrix to be generated.
*> \endverbatim
*>
*> value.
*> \endverbatim
*>
-*> \param[out] MODE
+*> \param[out] BNORM
+*> \verbatim
+*> BNORM is REAL
+*> The desired norm of the matrix to be generated. The diagonal
+*> matrix of singular values or eigenvalues is scaled by this
+*> value.
+*> \endverbatim
+*>
+*> \param[out] MODEA
+*> \verbatim
+*> MODEA is INTEGER
+*> A key indicating how to choose the vector of eigenvalues.
+*> \endverbatim
+*>
+*> \param[out] MODEB
*> \verbatim
-*> MODE is INTEGER
+*> MODEB is INTEGER
*> A key indicating how to choose the vector of eigenvalues.
*> \endverbatim
*>
-*> \param[out] CNDNUM
+*> \param[out] CNDNMA
*> \verbatim
-*> CNDNUM is REAL
+*> CNDNMA is REAL
*> The desired condition number.
*> \endverbatim
*>
-*> \param[out] DIST
+*> \param[out] CNDNMB
+*> \verbatim
+*> CNDNMB is REAL
+*> The desired condition number.
+*> \endverbatim
+*>
+*> \param[out] DISTA
+*> \verbatim
+*> DISTA is CHARACTER*1
+*> The type of distribution to be used by the random number
+*> generator.
+*> \endverbatim
+*>
+*> \param[out] DISTB
*> \verbatim
-*> DIST is CHARACTER*1
+*> DISTB is CHARACTER*1
*> The type of distribution to be used by the random number
*> generator.
*> \endverbatim
* Arguments
* =========
*
-*> \param[in] ITYPE
+*> \param[in] IJOB
*> \verbatim
-*> ITYPE is INTEGER
+*> IJOB is INTEGER
*> Specifies the type of tests to be performed. (See above.)
*> \endverbatim
*>
*> (LDPT,max(min(MVAL(j),NVAL(j))))
*> \endverbatim
*>
-*> \param[out] V
+*> \param[out] VT
*> \verbatim
-*> V is COMPLEX*16 array, dimension
+*> VT is COMPLEX*16 array, dimension
*> (LDPT,max(min(MVAL(j),NVAL(j))))
*> \endverbatim
*>
*> matrices in S1 and P1.
*> \endverbatim
*>
-*> \param[out] EVEZTR
+*> \param[out] EVECTR
*> \verbatim
-*> EVEZTR is COMPLEX*16 array, dimension (LDU, max(NN))
+*> EVECTR is COMPLEX*16 array, dimension (LDU, max(NN))
*> The (upper triangular) right eigenvector matrix for the
*> matrices in S1 and P1.
*> \endverbatim
*>
*> \param[in,out] A
*> \verbatim
-*> A is DOUBLE PRECISION array, dimension
+*> A is COMPLEX*16 array, dimension
*> (LDA, max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed.
*>
*> \param[out] U
*> \verbatim
-*> U is DOUBLE PRECISION array, dimension (LDU, max(NN))
+*> U is COMPLEX*16 array, dimension (LDU, max(NN))
*> Used to hold the unitary matrix computed by ZHBTRD.
*> \endverbatim
*>
*>
*> \param[out] WORK
*> \verbatim
-*> WORK is DOUBLE PRECISION array, dimension (LWORK)
+*> WORK is COMPLEX*16 array, dimension (LWORK)
*> \endverbatim
*>
*> \param[in] LWORK
*> max( LDA+1, max(NN)+1 )*max(NN).
*> \endverbatim
*>
+*> \param[out] RWORK
+*> \verbatim
+*> RWORK is DOUBLE PRECISION array
+*> \endverbatim
+*>
*> \param[out] RESULT
*> \verbatim
*> RESULT is DOUBLE PRECISION array, dimension (4)
*> eigenvalues in D3 correspond with the matrix in A.
*> \endverbatim
*>
+*> \param[out] D4
+*> \verbatim
+*> D4 is DOUBLE PRECISION array of
+*> dimension( max(NN) )
+*> The eigenvalues of A, as computed by ZPTEQR(V).
+*> ZPTEQR factors S as Z4 D4 Z4*
+*> On exit, the eigenvalues in D4 correspond with the matrix in A.
+*> \endverbatim
+*>
+*> \param[out] D5
+*> \verbatim
+*> D5 is DOUBLE PRECISION array of
+*> dimension( max(NN) )
+*> The eigenvalues of A, as computed by ZPTEQR(N)
+*> when Z is not computed. On exit, the
+*> eigenvalues in D4 correspond with the matrix in A.
+*> \endverbatim
+*>
+*> \param[out] WA1
+*> \verbatim
+*> WA1 is DOUBLE PRECISION array of
+*> dimension( max(NN) )
+*> All eigenvalues of A, computed to high
+*> absolute accuracy, with different range options.
+*> as computed by DSTEBZ.
+*> \endverbatim
+*>
+*> \param[out] WA2
+*> \verbatim
+*> WA2 is DOUBLE PRECISION array of
+*> dimension( max(NN) )
+*> Selected eigenvalues of A, computed to high
+*> absolute accuracy, with different range options.
+*> as computed by DSTEBZ.
+*> Choose random values for IL and IU, and ask for the
+*> IL-th through IU-th eigenvalues.
+*> \endverbatim
+*>
+*> \param[out] WA3
+*> \verbatim
+*> WA3 is DOUBLE PRECISION array of
+*> dimension( max(NN) )
+*> Selected eigenvalues of A, computed to high
+*> absolute accuracy, with different range options.
+*> as computed by DSTEBZ.
+*> Determine the values VL and VU of the IL-th and IU-th
+*> eigenvalues and ask for all eigenvalues in this range.
+*> \endverbatim
+*>
+*> \param[out] WR
+*> \verbatim
+*> WR is DOUBLE PRECISION array of
+*> dimension( max(NN) )
+*> All eigenvalues of A, computed to high
+*> absolute accuracy, with different options.
+*> as computed by DSTEBZ.
+*> \endverbatim
+*>
*> \param[out] U
*> \verbatim
*> U is COMPLEX*16 array of
*> \param[out] IWORK
*> \verbatim
*> IWORK is INTEGER array,
-*> dimension (6 + 6*Nmax + 5 * Nmax * lg Nmax )
-*> where Nmax = max( NN(j), 2 ) and lg = log base 2.
*> Workspace.
*> \endverbatim
*>
+*> \param[out] LIWORK
+*> \verbatim
+*> LIWORK is INTEGER
+*> The number of entries in IWORK. This must be at least
+*> 6 + 6*Nmax + 5 * Nmax * lg Nmax
+*> where Nmax = max( NN(j), 2 ) and lg = log base 2.
+*> \endverbatim
+*>
*> \param[out] RWORK
*> \verbatim
-*> RWORK is DOUBLE PRECISION array of
-*> dimension( ??? )
+*> RWORK is DOUBLE PRECISION array
+*> \endverbatim
+*>
+*> \param[in] LRWORK
+*> \verbatim
+*> LRWORK is INTEGER
+*> The number of entries in LRWORK (dimension( ??? )
*> \endverbatim
*>
*> \param[out] RESULT
*> LIWORK is INTEGER
*> Leading dimension of IWORK. LIWORK >= N+2.
*> \endverbatim
-*> \verbatim
*>
*> \param[out] RESULT
+*> \verbatim
*> RESULT is DOUBLE PRECISION array, dimension (4)
*> \endverbatim
*>
*> or the size of the matrix. It must be at least zero.
*> \endverbatim
*>
-*> \param[in] NOUNIT
-*> \verbatim
-*> NOUNIT is INTEGER
-*> The FORTRAN unit number for printing out error messages
-*> (e.g., if a routine returns IINFO not equal to 0.)
-*> \endverbatim
-*>
*> \param[out] A
*> \verbatim
*> A is COMPLEX*16 array, dimension (LDA,max(NN))
*> IWORK is INTEGER array, dimension at least 8*min(M,N)
*> \endverbatim
*>
-*> \param[out] RESULT
+*> \param[in] NOUNIT
*> \verbatim
-*> RESULT is DOUBLE PRECISION array, dimension (7)
-*> The values computed by the 7 tests described above.
-*> The values are currently limited to 1/ULP, to avoid
-*> overflow.
+*> NOUNIT is INTEGER
+*> The FORTRAN unit number for printing out error messages
+*> (e.g., if a routine returns IINFO not equal to 0.)
*> \endverbatim
*>
*> \param[out] INFO
*> IWORK is INTEGER array, dimension (max(NN))
*> \endverbatim
*>
+*> \param[out] BWORK
+*> \verbatim
+*> BWORK is LOGICAL array, dimension (max(NN))
+*> \endverbatim
+*>
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
*> Leading dimension of LRE. Must be at least max(1,max(NN,12))
*> \endverbatim
*>
-*> \param[out] RESULT
+*> \param[out] RCONDV
*> \verbatim
-*> RESULT is DOUBLE PRECISION array, dimension (11)
-*> The values computed by the seven tests described above.
-*> The values are currently limited to 1/ulp, to avoid
-*> overflow.
+*> RCONDV is DOUBLE PRECISION array, dimension (N)
+*> RCONDV holds the computed reciprocal condition numbers
+*> for eigenvectors.
+*> \endverbatim
+*>
+*> \param[out] RCNDV1
+*> \verbatim
+*> RCNDV1 is DOUBLE PRECISION array, dimension (N)
+*> RCNDV1 holds more computed reciprocal condition numbers
+*> for eigenvectors.
+*> \endverbatim
+*>
+*> \param[in] RCDVIN
+*> \verbatim
+*> RCDVIN is DOUBLE PRECISION array, dimension (N)
+*> When COMP = .TRUE. RCDVIN holds the precomputed reciprocal
+*> condition numbers for eigenvectors to be compared with
+*> RCONDV.
+*> \endverbatim
+*>
+*> \param[out] RCONDE
+*> \verbatim
+*> RCONDE is DOUBLE PRECISION array, dimension (N)
+*> RCONDE holds the computed reciprocal condition numbers
+*> for eigenvalues.
+*> \endverbatim
+*>
+*> \param[out] RCNDE1
+*> \verbatim
+*> RCNDE1 is DOUBLE PRECISION array, dimension (N)
+*> RCNDE1 holds more computed reciprocal condition numbers
+*> for eigenvalues.
+*> \endverbatim
+*>
+*> \param[in] RCDEIN
+*> \verbatim
+*> RCDEIN is DOUBLE PRECISION array, dimension (N)
+*> When COMP = .TRUE. RCDEIN holds the precomputed reciprocal
+*> condition numbers for eigenvalues to be compared with
+*> RCONDE.
+*> \endverbatim
+*>
+*> \param[out] SCALE
+*> \verbatim
+*> SCALE is DOUBLE PRECISION array, dimension (N)
+*> Holds information describing balancing of matrix.
+*> \endverbatim
+*>
+*> \param[out] SCALE1
+*> \verbatim
+*> SCALE1 is DOUBLE PRECISION array, dimension (N)
+*> Holds information describing balancing of matrix.
*> \endverbatim
*>
*> \param[out] WORK
*> WORK is COMPLEX*16 array, dimension (NWORK)
*> \endverbatim
*>
+*> \param[out] RESULT
+*> \verbatim
+*> RESULT is DOUBLE PRECISION array, dimension (11)
+*> The values computed by the seven tests described above.
+*> The values are currently limited to 1/ulp, to avoid
+*> overflow.
+*> \endverbatim
+*>
*> \param[in] NWORK
*> \verbatim
*> NWORK is INTEGER
*> RWORK is DOUBLE PRECISION array, dimension (N)
*> \endverbatim
*>
+*> \param[out] RESULT
+*> \verbatim
+*> RESULT is DOUBLE PRECISION array, dimension (2)
+*> RESULT(1) = | A E - E W | / ( |A| |E| ulp )
+*> RESULT(2) = max | m-norm(E(j)) - 1 | / ( n ulp )
+*> \endverbatim
+*>
*
* Authors
* =======
*> \param[in] ALPHA
*> \verbatim
*> ALPHA is COMPLEX*16
+*> \endverbatim
+*>
*> \param[in] BETA
*> \verbatim
*> BETA is COMPLEX*16
+*> \endverbatim
+*> \verbatim
*> parameters to decide whether the pair (ALPHA, BETA) is
*> selected.
*> \endverbatim
-*> \endverbatim
*>
*
* Authors
proto-complex: ../xlintstrfc
proto-complex16: ../xlintstzc ../xlintstrfz
-../xlintsts : $(ALINTST) $(SLINTST) $(SCLNTST) ../../$(LAPACKLIB)
+xlintsts : $(ALINTST) $(SLINTST) $(SCLNTST) ../../$(LAPACKLIB)
$(LOADER) $(LOADOPTS) $(ALINTST) $(SCLNTST) $(SLINTST) \
- ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB) -o xlintsts && mv xlintsts $@
+ ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB) -o $@
-../xlintstc : $(ALINTST) $(CLINTST) $(SCLNTST) ../../$(LAPACKLIB)
+xlintstc : $(ALINTST) $(CLINTST) $(SCLNTST) ../../$(LAPACKLIB)
$(LOADER) $(LOADOPTS) $(ALINTST) $(SCLNTST) $(CLINTST) \
- ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB) -o xlintstc && mv xlintstc $@
+ ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB) -o $@
-../xlintstd : $(ALINTST) $(DLINTST) $(DZLNTST) ../../$(LAPACKLIB)
+xlintstd : $(ALINTST) $(DLINTST) $(DZLNTST) ../../$(LAPACKLIB)
$(LOADER) $(LOADOPTS) $^ \
- ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB) -o xlintstd && mv xlintstd $@
+ ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB) -o $@
-../xlintstz : $(ALINTST) $(ZLINTST) $(DZLNTST) ../../$(LAPACKLIB)
+xlintstz : $(ALINTST) $(ZLINTST) $(DZLNTST) ../../$(LAPACKLIB)
$(LOADER) $(LOADOPTS) $(ALINTST) $(DZLNTST) $(ZLINTST) \
- ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB) -o xlintstz && mv xlintstz $@
+ ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB) -o $@
-../xlintstds : $(DSLINTST) ../../$(LAPACKLIB)
+xlintstds : $(DSLINTST) ../../$(LAPACKLIB)
$(LOADER) $(LOADOPTS) $(DSLINTST) \
- ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB) -o xlintstds && mv xlintstds $@
+ ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB) -o $@
-../xlintstzc : $(ZCLINTST) ../../$(LAPACKLIB)
+xlintstzc : $(ZCLINTST) ../../$(LAPACKLIB)
$(LOADER) $(LOADOPTS) $(ZCLINTST) \
- ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB) -o xlintstzc && mv xlintstzc $@
+ ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB) -o $@
-../xlintstrfs : $(SLINTSTRFP) ../../$(LAPACKLIB)
+xlintstrfs : $(SLINTSTRFP) ../../$(LAPACKLIB)
$(LOADER) $(LOADOPTS) $(SLINTSTRFP) \
- ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB) -o xlintstrfs && mv xlintstrfs $@
+ ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB) -o $@
-../xlintstrfd : $(DLINTSTRFP) ../../$(LAPACKLIB)
+xlintstrfd : $(DLINTSTRFP) ../../$(LAPACKLIB)
$(LOADER) $(LOADOPTS) $(DLINTSTRFP) \
- ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB) -o xlintstrfd && mv xlintstrfd $@
+ ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB) -o $@
-../xlintstrfc : $(CLINTSTRFP) ../../$(LAPACKLIB)
+xlintstrfc : $(CLINTSTRFP) ../../$(LAPACKLIB)
$(LOADER) $(LOADOPTS) $(CLINTSTRFP) \
- ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB) -o xlintstrfc && mv xlintstrfc $@
+ ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB) -o $@
-../xlintstrfz : $(ZLINTSTRFP) ../../$(LAPACKLIB)
+xlintstrfz : $(ZLINTSTRFP) ../../$(LAPACKLIB)
$(LOADER) $(LOADOPTS) $(ZLINTSTRFP) \
- ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB) -o xlintstrfz && mv xlintstrfz $@
+ ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB) -o $@
+../xlintsts: xlintsts
+ mv xlintsts $@
+
+../xlintstc: xlintstc
+ mv xlintstc $@
+
+../xlintstz: xlintstz
+ mv xlintstz $@
+
+../xlintstd: xlintstd
+ mv xlintstd $@
+
+../xlintstds: xlintstds
+ mv xlintstds $@
+
+../xlintstzc: xlintstzc
+ mv xlintstzc $@
+
+../xlintstrfs: xlintstrfs
+ mv xlintstrfs $@
+
+../xlintstrfc: xlintstrfc
+ mv xlintstrfc $@
+
+../xlintstrfd: xlintstrfd
+ mv xlintstrfd $@
+
+../xlintstrfz: xlintstrfz
+ mv xlintstrfz $@
+
$(ALINTST): $(FRC)
$(SCLNTST): $(FRC)
$(DZLNTST): $(FRC)
*> The values of the number of right hand sides NRHS.
*> \endverbatim
*>
-*> \param[in] NRHS
-*> \verbatim
-*> NRHS is INTEGER
-*> The number of right hand side vectors to be generated for
-*> each linear system.
-*> \endverbatim
-*>
*> \param[in] THRESH
*> \verbatim
*> THRESH is REAL
*> The values of the matrix dimension N.
*> \endverbatim
*>
+*> \param[in] NRHS
+*> \verbatim
+*> NRHS is INTEGER
+*> The number of right hand sides, NRHS >= 0.
+*> \endverbatim
+*>
*> \param[in] THRESH
*> \verbatim
*> THRESH is REAL
*> AP is COMPLEX array, dimension ((NMAX*(NMAX+1))/2).
*> \endverbatim
*>
-*> \param[out] A2
+*> \param[out] ASAV
*> \verbatim
-*> A2 is COMPLEX6 array, dimension (LDA,NMAX)
+*> ASAV is COMPLEX6 array, dimension (LDA,NMAX)
*> \endverbatim
*>
*
* Definition
* ==========
*
-* SUBROUTINE CEBCHVXX( THRESH, PATH )
-*
-* .. Scalar Arguments ..
-* REAL THRESH
-* CHARACTER*3 PATH
-*
+* SUBROUTINE CEBCHVXX( THRESH, PATH )
+*
+* .. Scalar Arguments ..
+* REAL THRESH
+* CHARACTER*3 PATH
+* ..
+*
* Purpose
-* =======
+* ======
*
*>\details \b Purpose:
*>\verbatim
-*> Purpose
-*> ======
+*> CEBCHVXX will run CGESVXX on a series of Hilbert matrices and then
+*> compare the error bounds returned by CGESVXX to see if the returned
+*> answer indeed falls within those bounds.
*>
-*> CEBCHVXX will run CGESVXX on a series of Hilbert matrices and then
-*> compare the error bounds returned by CGESVXX to see if the returned
-*> answer indeed falls within those bounds.
+*> Eight test ratios will be computed. The tests will pass if they are .LT.
+*> THRESH. There are two cases that are determined by 1 / (SQRT( N ) * EPS).
+*> If that value is .LE. to the component wise reciprocal condition number,
+*> it uses the guaranteed case, other wise it uses the unguaranteed case.
*>
-*> Eight test ratios will be computed. The tests will pass if they are .LT.
-*> THRESH. There are two cases that are determined by 1 / (SQRT( N ) * EPS).
-*> If that value is .LE. to the component wise reciprocal condition number,
-*> it uses the guaranteed case, other wise it uses the unguaranteed case.
+*> Test ratios:
+*> Let Xc be X_computed and Xt be X_truth.
+*> The norm used is the infinity norm.
*>
-*> Test ratios:
-*> Let Xc be X_computed and Xt be X_truth.
-*> The norm used is the infinity norm.
-
-*> Let A be the guaranteed case and B be the unguaranteed case.
+*> Let A be the guaranteed case and B be the unguaranteed case.
+*>
+*> 1. Normwise guaranteed forward error bound.
+*> A: norm ( abs( Xc - Xt ) / norm ( Xt ) .LE. ERRBND( *, nwise_i, bnd_i ) and
+*> ERRBND( *, nwise_i, bnd_i ) .LE. MAX(SQRT(N),10) * EPS.
+*> If these conditions are met, the test ratio is set to be
+*> ERRBND( *, nwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
+*> B: For this case, CGESVXX should just return 1. If it is less than
+*> one, treat it the same as in 1A. Otherwise it fails. (Set test
+*> ratio to ERRBND( *, nwise_i, bnd_i ) * THRESH?)
*>
-*> 1. Normwise guaranteed forward error bound.
-*> A: norm ( abs( Xc - Xt ) / norm ( Xt ) .LE. ERRBND( *, nwise_i, bnd_i ) and
-*> ERRBND( *, nwise_i, bnd_i ) .LE. MAX(SQRT(N),10) * EPS.
-*> If these conditions are met, the test ratio is set to be
-*> ERRBND( *, nwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
-*> B: For this case, CGESVXX should just return 1. If it is less than
-*> one, treat it the same as in 1A. Otherwise it fails. (Set test
-*> ratio to ERRBND( *, nwise_i, bnd_i ) * THRESH?)
+*> 2. Componentwise guaranteed forward error bound.
+*> A: norm ( abs( Xc(j) - Xt(j) ) ) / norm (Xt(j)) .LE. ERRBND( *, cwise_i, bnd_i )
+*> for all j .AND. ERRBND( *, cwise_i, bnd_i ) .LE. MAX(SQRT(N), 10) * EPS.
+*> If these conditions are met, the test ratio is set to be
+*> ERRBND( *, cwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
+*> B: Same as normwise test ratio.
*>
-*> 2. Componentwise guaranteed forward error bound.
-*> A: norm ( abs( Xc(j) - Xt(j) ) ) / norm (Xt(j)) .LE. ERRBND( *, cwise_i, bnd_i )
-*> for all j .AND. ERRBND( *, cwise_i, bnd_i ) .LE. MAX(SQRT(N), 10) * EPS.
-*> If these conditions are met, the test ratio is set to be
-*> ERRBND( *, cwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
-*> B: Same as normwise test ratio.
+*> 3. Backwards error.
+*> A: The test ratio is set to BERR/EPS.
+*> B: Same test ratio.
*>
-*> 3. Backwards error.
-*> A: The test ratio is set to BERR/EPS.
-*> B: Same test ratio.
+*> 4. Reciprocal condition number.
+*> A: A condition number is computed with Xt and compared with the one
+*> returned from CGESVXX. Let RCONDc be the RCOND returned by CGESVXX
+*> and RCONDt be the RCOND from the truth value. Test ratio is set to
+*> MAX(RCONDc/RCONDt, RCONDt/RCONDc).
+*> B: Test ratio is set to 1 / (EPS * RCONDc).
*>
-*> 4. Reciprocal condition number.
-*> A: A condition number is computed with Xt and compared with the one
-*> returned from CGESVXX. Let RCONDc be the RCOND returned by CGESVXX
-*> and RCONDt be the RCOND from the truth value. Test ratio is set to
-*> MAX(RCONDc/RCONDt, RCONDt/RCONDc).
-*> B: Test ratio is set to 1 / (EPS * RCONDc).
+*> 5. Reciprocal normwise condition number.
+*> A: The test ratio is set to
+*> MAX(ERRBND( *, nwise_i, cond_i ) / NCOND, NCOND / ERRBND( *, nwise_i, cond_i )).
+*> B: Test ratio is set to 1 / (EPS * ERRBND( *, nwise_i, cond_i )).
*>
-*> 5. Reciprocal normwise condition number.
-*> A: The test ratio is set to
-*> MAX(ERRBND( *, nwise_i, cond_i ) / NCOND, NCOND / ERRBND( *, nwise_i, cond_i )).
-*> B: Test ratio is set to 1 / (EPS * ERRBND( *, nwise_i, cond_i )).
+*> 6. Reciprocal componentwise condition number.
+*> A: Test ratio is set to
+*> MAX(ERRBND( *, cwise_i, cond_i ) / CCOND, CCOND / ERRBND( *, cwise_i, cond_i )).
+*> B: Test ratio is set to 1 / (EPS * ERRBND( *, cwise_i, cond_i )).
*>
-*> 6. Reciprocal componentwise condition number.
-*> A: Test ratio is set to
-*> MAX(ERRBND( *, cwise_i, cond_i ) / CCOND, CCOND / ERRBND( *, cwise_i, cond_i )).
-*> B: Test ratio is set to 1 / (EPS * ERRBND( *, cwise_i, cond_i )).
+*> .. Parameters ..
+*> NMAX is determined by the largest number in the inverse of the hilbert
+*> matrix. Precision is exhausted when the largest entry in it is greater
+*> than 2 to the power of the number of bits in the fraction of the data
+*> type used plus one, which is 24 for single precision.
+*> NMAX should be 6 for single and 11 for double.
+*> \endverbatim
*>
-*> .. Parameters ..
-*> NMAX is determined by the largest number in the inverse of the hilbert
-*> matrix. Precision is exhausted when the largest entry in it is greater
-*> than 2 to the power of the number of bits in the fraction of the data
-*> type used plus one, which is 24 for single precision.
-*> NMAX should be 6 for single and 11 for double.
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex_lin
+*
+* =====================================================================
+ SUBROUTINE CEBCHVXX( THRESH, PATH )
+ IMPLICIT NONE
+* .. Scalar Arguments ..
+ REAL THRESH
+ CHARACTER*3 PATH
INTEGER NMAX, NPARAMS, NERRBND, NTESTS, KL, KU
PARAMETER (NMAX = 6, NPARAMS = 2, NERRBND = 3,
$ NTESTS = 6)
-*> .. Local Scalars ..
+* .. Local Scalars ..
INTEGER N, NRHS, INFO, I ,J, k, NFAIL, LDA,
$ N_AUX_TESTS, LDAB, LDAFB
CHARACTER FACT, TRANS, UPLO, EQUED
$ CONDTHRESH, ERRTHRESH
COMPLEX ZDUM
-*> .. Local Arrays ..
+* .. Local Arrays ..
REAL TSTRAT(NTESTS), RINV(NMAX), PARAMS(NPARAMS),
$ S(NMAX), R(NMAX),C(NMAX),RWORK(3*NMAX),
$ DIFF(NMAX, NMAX),
$ ABCOPY( (NMAX-1)+(NMAX-1)+1, NMAX ),
$ AFB( 2*(NMAX-1)+(NMAX-1)+1, NMAX )
-*> .. External Functions ..
+* .. External Functions ..
REAL SLAMCH
-*> .. External Subroutines ..
+* .. External Subroutines ..
EXTERNAL CLAHILB, CGESVXX, CSYSVXX, CPOSVXX,
$ CGBSVXX, CLACPY, LSAMEN
LOGICAL LSAMEN
-*> .. Intrinsic Functions ..
+* .. Intrinsic Functions ..
INTRINSIC SQRT, MAX, ABS, REAL, AIMAG
-*> .. Statement Functions ..
+* .. Statement Functions ..
REAL CABS1
-*> ..
-*> .. Statement Function Definitions ..
+* ..
+* .. Statement Function Definitions ..
CABS1( ZDUM ) = ABS( REAL( ZDUM ) ) + ABS( AIMAG( ZDUM ) )
-*> .. Parameters ..
+* .. Parameters ..
INTEGER NWISE_I, CWISE_I
PARAMETER (NWISE_I = 1, CWISE_I = 1)
INTEGER BND_I, COND_I
PARAMETER (BND_I = 2, COND_I = 3)
-*> Create the loop to test out the Hilbert matrices
+* Create the loop to test out the Hilbert matrices
FACT = 'E'
UPLO = 'U'
LDAFB = 2*(NMAX-1)+(NMAX-1)+1
C2 = PATH( 2: 3 )
-*> Main loop to test the different Hilbert Matrices.
+* Main loop to test the different Hilbert Matrices.
printed_guide = .false.
NRHS = n
M = MAX(SQRT(REAL(N)), 10.0)
-*> Generate the Hilbert matrix, its inverse, and the
-*> right hand side, all scaled by the LCM(1,..,2N-1).
+* Generate the Hilbert matrix, its inverse, and the
+* right hand side, all scaled by the LCM(1,..,2N-1).
CALL CLAHILB(N, N, A, LDA, INVHILB, LDA, B,
$ LDA, WORK, INFO, PATH)
-*> Copy A into ACOPY.
+* Copy A into ACOPY.
CALL CLACPY('ALL', N, N, A, NMAX, ACOPY, NMAX)
-*> Store A in band format for GB tests
+* Store A in band format for GB tests
DO J = 1, N
DO I = 1, KL+KU+1
AB( I, J ) = (0.0E+0,0.0E+0)
END DO
END DO
-*> Copy AB into ABCOPY.
+* Copy AB into ABCOPY.
DO J = 1, N
DO I = 1, KL+KU+1
ABCOPY( I, J ) = (0.0E+0,0.0E+0)
END DO
CALL CLACPY('ALL', KL+KU+1, N, AB, LDAB, ABCOPY, LDAB)
-*> Call C**SVXX with default PARAMS and N_ERR_BND = 3.
+* Call C**SVXX with default PARAMS and N_ERR_BND = 3.
IF ( LSAMEN( 2, C2, 'SY' ) ) THEN
CALL CSYSVXX(FACT, UPLO, N, NRHS, ACOPY, LDA, AF, LDA,
$ IPIV, EQUED, S, B, LDA, X, LDA, ORCOND,
END IF
END IF
-*> Calculating the difference between C**SVXX's X and the true X.
+* Calculating the difference between C**SVXX's X and the true X.
DO I = 1,N
DO J =1,NRHS
DIFF(I,J) = X(I,J) - INVHILB(I,J)
END DO
END DO
-*> Calculating the RCOND
+* Calculating the RCOND
RNORM = 0
RINORM = 0
IF ( LSAMEN( 2, C2, 'PO' ) .OR. LSAMEN( 2, C2, 'SY' ) .OR.
RNORM = RNORM / CABS1(A(1, 1))
RCOND = 1.0/(RNORM * RINORM)
-*> Calculating the R for normwise rcond.
+* Calculating the R for normwise rcond.
DO I = 1, N
RINV(I) = 0.0
END DO
END DO
END DO
-*> Calculating the Normwise rcond.
+* Calculating the Normwise rcond.
RINORM = 0.0
DO I = 1, N
SUMRI = 0.0
c$$$ WRITE(*,*) 'Raw error estimate: ',ERRBND(NRHS,cwise_i,rawbnd_i)
c$$$ print *, 'Info: ', info
c$$$ WRITE(*,*)
-*> WRITE(*,*) 'TSTRAT: ',TSTRAT
+* WRITE(*,*) 'TSTRAT: ',TSTRAT
END DO
9998 FORMAT( ' C', A2, 'SVXX: ', I6, ' out of ', I6,
$ ' tests failed to pass the threshold' )
9997 FORMAT( ' C', A2, 'SVXX passed the tests of error bounds' )
-*> Test ratios.
+* Test ratios.
9996 FORMAT( 3X, I2, ': Normwise guaranteed forward error', / 5X,
$ 'Guaranteed case: if norm ( abs( Xc - Xt )',
$ ' / norm ( Xt ) .LE. ERRBND( *, nwise_i, bnd_i ), then',
$ ', ORCOND = ', G12.5, ', real RCOND = ', G12.5 )
END
-*>\endverbatim
-*
-* Arguments
-* =========
-*
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex_lin
-*
-* =====================================================================
- SUBROUTINE CEBCHVXX( THRESH, PATH )
-*
-* -- LAPACK test routine (input) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- REAL THRESH
- CHARACTER*3 PATH
-*
*> \verbatim
*> C is COMPLEX array, dimension (LDC,N)
*> \endverbatim
+*>
+*> \param[in] LDC
*> \verbatim
-*> LDC (integer) INTEGER
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,N).
*> \endverbatim
*>
*> \verbatim
*> C is COMPLEX array, dimension (LDC,N)
*> \endverbatim
+*>
+*> \param[in] LDC
*> \verbatim
-*> LDC (integer) INTEGER
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,N).
*> \endverbatim
*>
* SUBROUTINE CLAHILB(N, NRHS, A, LDA, X, LDX, B, LDB, WORK,
* INFO, PATH)
*
-* ! .. Scalar Arguments ..
+* .. Scalar Arguments ..
* INTEGER T, N, NRHS, LDA, LDX, LDB, INFO
-* ! .. Array Arguments ..
+* .. Array Arguments ..
* REAL WORK(N)
* COMPLEX A(LDA,N), X(LDX, NRHS), B(LDB, NRHS)
* CHARACTER*3 PATH
-* ! ..
-* !
+* ..
+*
* Purpose
* =======
*
*>\details \b Purpose:
*>\verbatim
-! Purpose
-! =======
-!
-! CLAHILB generates an N by N scaled Hilbert matrix in A along with
-! NRHS right-hand sides in B and solutions in X such that A*X=B.
-!
-! The Hilbert matrix is scaled by M = LCM(1, 2, ..., 2*N-1) so that all
-! entries are integers. The right-hand sides are the first NRHS
-! columns of M * the identity matrix, and the solutions are the
-! first NRHS columns of the inverse Hilbert matrix.
-!
-! The condition number of the Hilbert matrix grows exponentially with
-! its size, roughly as O(e ** (3.5*N)). Additionally, the inverse
-! Hilbert matrices beyond a relatively small dimension cannot be
-! generated exactly without extra precision. Precision is exhausted
-! when the largest entry in the inverse Hilbert matrix is greater than
-! 2 to the power of the number of bits in the fraction of the data type
-! used plus one, which is 24 for single precision.
-!
-! In single, the generated solution is exact for N <= 6 and has
-! small componentwise error for 7 <= N <= 11.
-!
+*>
+*> CLAHILB generates an N by N scaled Hilbert matrix in A along with
+*> NRHS right-hand sides in B and solutions in X such that A*X=B.
+*>
+*> The Hilbert matrix is scaled by M = LCM(1, 2, ..., 2*N-1) so that all
+*> entries are integers. The right-hand sides are the first NRHS
+*> columns of M * the identity matrix, and the solutions are the
+*> first NRHS columns of the inverse Hilbert matrix.
+*>
+*> The condition number of the Hilbert matrix grows exponentially with
+*> its size, roughly as O(e ** (3.5*N)). Additionally, the inverse
+*> Hilbert matrices beyond a relatively small dimension cannot be
+*> generated exactly without extra precision. Precision is exhausted
+*> when the largest entry in the inverse Hilbert matrix is greater than
+*> 2 to the power of the number of bits in the fraction of the data type
+*> used plus one, which is 24 for single precision.
+*>
+*> In single, the generated solution is exact for N <= 6 and has
+*> small componentwise error for 7 <= N <= 11.
+*>
*>\endverbatim
*
* Arguments
* =========
*
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
+*> The dimension of the matrix A.
+*> \endverbatim
+*>
+*> \param[in] NRHS
+*> \verbatim
+*> NRHS is NRHS
+*> The requested number of right-hand sides.
+*> \endverbatim
+*>
+*> \param[out] A
+*> \verbatim
+*> A is COMPLEX array, dimension (LDA, N)
+*> The generated scaled Hilbert matrix.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= N.
+*> \endverbatim
+*>
+*> \param[out] X
+*> \verbatim
+*> X is COMPLEX array, dimension (LDX, NRHS)
+*> The generated exact solutions. Currently, the first NRHS
+*> columns of the inverse Hilbert matrix.
+*> \endverbatim
+*>
+*> \param[in] LDX
+*> \verbatim
+*> LDX is INTEGER
+*> The leading dimension of the array X. LDX >= N.
+*> \endverbatim
+*>
+*> \param[out] B
+*> \verbatim
+*> B is REAL array, dimension (LDB, NRHS)
+*> The generated right-hand sides. Currently, the first NRHS
+*> columns of LCM(1, 2, ..., 2*N-1) * the identity matrix.
+*> \endverbatim
+*>
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
+*> The leading dimension of the array B. LDB >= N.
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> = 1: N is too large; the data is still generated but may not
+*> be not exact.
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
+*> \param[in] PATH
+*> \verbatim
+*> PATH is CHARACTER*3
+*> The LAPACK path name.
+*> \endverbatim
+*>
*
* Authors
* =======
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
* November 2011
*
-! .. Scalar Arguments ..
+* .. Scalar Arguments ..
INTEGER T, N, NRHS, LDA, LDX, LDB, INFO
-! .. Array Arguments ..
+* .. Array Arguments ..
REAL WORK(N)
COMPLEX A(LDA,N), X(LDX, NRHS), B(LDB, NRHS)
CHARACTER*3 PATH
-! ..
-!
-! =====================================================================
-
-! .. Local Scalars ..
+* ..
+*
+* =====================================================================
+* .. Local Scalars ..
INTEGER TM, TI, R
INTEGER M
INTEGER I, J
COMPLEX TMP
CHARACTER*2 C2
-
-! .. Parameters ..
-! NMAX_EXACT the largest dimension where the generated data is
-! exact.
-! NMAX_APPROX the largest dimension where the generated data has
-! a small componentwise relative error.
-! ??? complex uses how many bits ???
+* ..
+* .. Parameters ..
+* NMAX_EXACT the largest dimension where the generated data is
+* exact.
+* NMAX_APPROX the largest dimension where the generated data has
+* a small componentwise relative error.
+* ??? complex uses how many bits ???
INTEGER NMAX_EXACT, NMAX_APPROX, SIZE_D
PARAMETER (NMAX_EXACT = 6, NMAX_APPROX = 11, SIZE_D = 8)
-
-! d's are generated from random permuation of those eight elements.
+*
+* d's are generated from random permuation of those eight elements.
COMPLEX D1(8), D2(8), INVD1(8), INVD2(8)
DATA D1 /(-1,0),(0,1),(-1,-1),(0,-1),(1,0),(-1,1),(1,1),(1,-1)/
DATA D2 /(-1,0),(0,-1),(-1,1),(0,1),(1,0),(-1,-1),(1,-1),(1,1)/
$ (-.5,-.5),(.5,-.5),(.5,.5)/
DATA INVD2 /(-1,0),(0,1),(-.5,-.5),(0,-1),(1,0),
$ (-.5,.5),(.5,.5),(.5,-.5)/
-
-! ..
-! .. External Functions
+* ..
+* .. External Functions
EXTERNAL CLASET, LSAMEN
INTRINSIC REAL
LOGICAL LSAMEN
-! ..
-! .. Executable Statements ..
+* ..
+* .. Executable Statements ..
C2 = PATH( 2: 3 )
-!
-! Test the input arguments
-!
+*
+* Test the input arguments
+*
INFO = 0
IF (N .LT. 0 .OR. N .GT. NMAX_APPROX) THEN
INFO = -1
IF (N .GT. NMAX_EXACT) THEN
INFO = 1
END IF
-
-! Compute M = the LCM of the integers [1, 2*N-1]. The largest
-! reasonable N is small enough that integers suffice (up to N = 11).
+*
+* Compute M = the LCM of the integers [1, 2*N-1]. The largest
+* reasonable N is small enough that integers suffice (up to N = 11).
M = 1
DO I = 2, (2*N-1)
TM = M
END DO
M = (M / TI) * I
END DO
-
-! Generate the scaled Hilbert matrix in A
-! If we are testing SY routines, take D1_i = D2_i, else, D1_i = D2_i*
+*
+* Generate the scaled Hilbert matrix in A
+* If we are testing SY routines, take D1_i = D2_i, else, D1_i = D2_i*
IF ( LSAMEN( 2, C2, 'SY' ) ) THEN
DO J = 1, N
DO I = 1, N
END DO
END DO
END IF
-
-! Generate matrix B as simply the first NRHS columns of M * the
-! identity.
+*
+* Generate matrix B as simply the first NRHS columns of M * the
+* identity.
TMP = REAL(M)
CALL CLASET('Full', N, NRHS, (0.0,0.0), TMP, B, LDB)
-
-! Generate the true solutions in X. Because B = the first NRHS
-! columns of M*I, the true solutions are just the first NRHS columns
-! of the inverse Hilbert matrix.
+*
+* Generate the true solutions in X. Because B = the first NRHS
+* columns of M*I, the true solutions are just the first NRHS columns
+* of the inverse Hilbert matrix.
WORK(1) = N
DO J = 2, N
WORK(J) = ( ( (WORK(J-1)/(J-1)) * (J-1 - N) ) /(J-1) )
$ * (N +J -1)
END DO
-
-! If we are testing SY routines, take D1_i = D2_i, else, D1_i = D2_i*
+*
+* If we are testing SY routines, take D1_i = D2_i, else, D1_i = D2_i*
IF ( LSAMEN( 2, C2, 'SY' ) ) THEN
DO J = 1, NRHS
DO I = 1, N
END DO
END IF
END
-
+
\ No newline at end of file
*> or the number of sub-diagonals if UPLO = 'L'. KD >= 0.
*> \endverbatim
*>
+*> \param[in] NRHS
+*> \verbatim
+*> NRHS is INTEGER
+*> The number of right hand sides. NRHS >= 0.
+*> \endverbatim
+*>
*> \param[in] A
*> \verbatim
*> A is COMPLEX array, dimension (LDA,N)
*> If UPLO = 'U', norm(U'*U - A) / ( N * norm(A) * EPS )
*> \endverbatim
*>
+*> \param[in] RANK
+*> \verbatim
+*> RANK is INTEGER
+*> number of nonzero singular values of A.
+*> \endverbatim
+*>
*
* Authors
* =======
*> \verbatim
*> C is COMPLEX array, dimension (LDC,N)
*> \endverbatim
+*>
+*> \param[in] LDC
*> \verbatim
-*> LDC (integer) INTEGER
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,N).
*> \endverbatim
*>
*>
*> \param[out] WORK
*> \verbatim
-*> WORK is COMPLEX array, dimension (LDWORK,N)
+*> WORK is COMPLEX array, dimension (LDW,N)
*> \endverbatim
*>
-*> \param[in] LDWORK
+*> \param[in] LDW
*> \verbatim
-*> LDWORK is INTEGER
-*> The leading dimension of the array WORK. LDWORK >= max(1,N).
+*> LDW is INTEGER
+*> The leading dimension of the array WORK. LDW >= max(1,N).
*> \endverbatim
*>
*> \param[out] RWORK
*> \verbatim
*> C is COMPLEX array, dimension (LDC,N)
*> \endverbatim
+*>
+*> \param[in] LDC
*> \verbatim
-*> LDC (integer) INTEGER
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,N).
*> \endverbatim
*>
*> The values of the matrix dimension N.
*> \endverbatim
*>
+*> \param[in] NRHS
+*> \verbatim
+*> NRHS is INTEGER
+*> The number of right hand sides, NRHS >= 0.
+*> \endverbatim
+*>
*> \param[in] THRESH
*> \verbatim
*> THRESH is DOUBLE PRECISION
*> AP is DOUBLE PRECISION array, dimension ((NMAX*(NMAX+1))/2).
*> \endverbatim
*>
-*> \param[out] A2
+*> \param[out] ASAV
*> \verbatim
-*> A2 is DOUBLE PRECISION array, dimension (LDA,NMAX)
+*> ASAV is DOUBLE PRECISION array, dimension (LDA,NMAX)
*> \endverbatim
*>
*
* Definition
* ==========
*
-* SUBROUTINE DEBCHVXX( THRESH, PATH )
-*
-* .. Scalar Arguments ..
-* DOUBLE PRECISION THRESH
-* CHARACTER*3 PATH
-*
+* SUBROUTINE DEBCHVXX( THRESH, PATH )
+*
+* .. Scalar Arguments ..
+* DOUBLE PRECISION THRESH
+* CHARACTER*3 PATH
+* ..
+*
* Purpose
* =======
*
*>\details \b Purpose:
*>\verbatim
-*> Purpose
-*> ======
+*> DEBCHVXX will run D**SVXX on a series of Hilbert matrices and then
+*> compare the error bounds returned by D**SVXX to see if the returned
+*> answer indeed falls within those bounds.
*>
-*> DEBCHVXX will run D**SVXX on a series of Hilbert matrices and then
-*> compare the error bounds returned by D**SVXX to see if the returned
-*> answer indeed falls within those bounds.
+*> Eight test ratios will be computed. The tests will pass if they are .LT.
+*> THRESH. There are two cases that are determined by 1 / (SQRT( N ) * EPS).
+*> If that value is .LE. to the component wise reciprocal condition number,
+*> it uses the guaranteed case, other wise it uses the unguaranteed case.
*>
-*> Eight test ratios will be computed. The tests will pass if they are .LT.
-*> THRESH. There are two cases that are determined by 1 / (SQRT( N ) * EPS).
-*> If that value is .LE. to the component wise reciprocal condition number,
-*> it uses the guaranteed case, other wise it uses the unguaranteed case.
+*> Test ratios:
+*> Let Xc be X_computed and Xt be X_truth.
+*> The norm used is the infinity norm.
*>
-*> Test ratios:
-*> Let Xc be X_computed and Xt be X_truth.
-*> The norm used is the infinity norm.
-
-*> Let A be the guaranteed case and B be the unguaranteed case.
+*> Let A be the guaranteed case and B be the unguaranteed case.
+*>
+*> 1. Normwise guaranteed forward error bound.
+*> A: norm ( abs( Xc - Xt ) / norm ( Xt ) .LE. ERRBND( *, nwise_i, bnd_i ) and
+*> ERRBND( *, nwise_i, bnd_i ) .LE. MAX(SQRT(N),10) * EPS.
+*> If these conditions are met, the test ratio is set to be
+*> ERRBND( *, nwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
+*> B: For this case, CGESVXX should just return 1. If it is less than
+*> one, treat it the same as in 1A. Otherwise it fails. (Set test
+*> ratio to ERRBND( *, nwise_i, bnd_i ) * THRESH?)
*>
-*> 1. Normwise guaranteed forward error bound.
-*> A: norm ( abs( Xc - Xt ) / norm ( Xt ) .LE. ERRBND( *, nwise_i, bnd_i ) and
-*> ERRBND( *, nwise_i, bnd_i ) .LE. MAX(SQRT(N),10) * EPS.
-*> If these conditions are met, the test ratio is set to be
-*> ERRBND( *, nwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
-*> B: For this case, CGESVXX should just return 1. If it is less than
-*> one, treat it the same as in 1A. Otherwise it fails. (Set test
-*> ratio to ERRBND( *, nwise_i, bnd_i ) * THRESH?)
+*> 2. Componentwise guaranteed forward error bound.
+*> A: norm ( abs( Xc(j) - Xt(j) ) ) / norm (Xt(j)) .LE. ERRBND( *, cwise_i, bnd_i )
+*> for all j .AND. ERRBND( *, cwise_i, bnd_i ) .LE. MAX(SQRT(N), 10) * EPS.
+*> If these conditions are met, the test ratio is set to be
+*> ERRBND( *, cwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
+*> B: Same as normwise test ratio.
*>
-*> 2. Componentwise guaranteed forward error bound.
-*> A: norm ( abs( Xc(j) - Xt(j) ) ) / norm (Xt(j)) .LE. ERRBND( *, cwise_i, bnd_i )
-*> for all j .AND. ERRBND( *, cwise_i, bnd_i ) .LE. MAX(SQRT(N), 10) * EPS.
-*> If these conditions are met, the test ratio is set to be
-*> ERRBND( *, cwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
-*> B: Same as normwise test ratio.
+*> 3. Backwards error.
+*> A: The test ratio is set to BERR/EPS.
+*> B: Same test ratio.
*>
-*> 3. Backwards error.
-*> A: The test ratio is set to BERR/EPS.
-*> B: Same test ratio.
+*> 4. Reciprocal condition number.
+*> A: A condition number is computed with Xt and compared with the one
+*> returned from CGESVXX. Let RCONDc be the RCOND returned by D**SVXX
+*> and RCONDt be the RCOND from the truth value. Test ratio is set to
+*> MAX(RCONDc/RCONDt, RCONDt/RCONDc).
+*> B: Test ratio is set to 1 / (EPS * RCONDc).
*>
-*> 4. Reciprocal condition number.
-*> A: A condition number is computed with Xt and compared with the one
-*> returned from CGESVXX. Let RCONDc be the RCOND returned by D**SVXX
-*> and RCONDt be the RCOND from the truth value. Test ratio is set to
-*> MAX(RCONDc/RCONDt, RCONDt/RCONDc).
-*> B: Test ratio is set to 1 / (EPS * RCONDc).
+*> 5. Reciprocal normwise condition number.
+*> A: The test ratio is set to
+*> MAX(ERRBND( *, nwise_i, cond_i ) / NCOND, NCOND / ERRBND( *, nwise_i, cond_i )).
+*> B: Test ratio is set to 1 / (EPS * ERRBND( *, nwise_i, cond_i )).
*>
-*> 5. Reciprocal normwise condition number.
-*> A: The test ratio is set to
-*> MAX(ERRBND( *, nwise_i, cond_i ) / NCOND, NCOND / ERRBND( *, nwise_i, cond_i )).
-*> B: Test ratio is set to 1 / (EPS * ERRBND( *, nwise_i, cond_i )).
+*> 6. Reciprocal componentwise condition number.
+*> A: Test ratio is set to
+*> MAX(ERRBND( *, cwise_i, cond_i ) / CCOND, CCOND / ERRBND( *, cwise_i, cond_i )).
+*> B: Test ratio is set to 1 / (EPS * ERRBND( *, cwise_i, cond_i )).
*>
-*> 6. Reciprocal componentwise condition number.
-*> A: Test ratio is set to
-*> MAX(ERRBND( *, cwise_i, cond_i ) / CCOND, CCOND / ERRBND( *, cwise_i, cond_i )).
-*> B: Test ratio is set to 1 / (EPS * ERRBND( *, cwise_i, cond_i )).
+*> .. Parameters ..
+*> NMAX is determined by the largest number in the inverse of the hilbert
+*> matrix. Precision is exhausted when the largest entry in it is greater
+*> than 2 to the power of the number of bits in the fraction of the data
+*> type used plus one, which is 24 for single precision.
+*> NMAX should be 6 for single and 11 for double.
+*> \endverbatim
*>
-*> .. Parameters ..
-*> NMAX is determined by the largest number in the inverse of the hilbert
-*> matrix. Precision is exhausted when the largest entry in it is greater
-*> than 2 to the power of the number of bits in the fraction of the data
-*> type used plus one, which is 24 for single precision.
-*> NMAX should be 6 for single and 11 for double.
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup double_lin
+*
+* =====================================================================
+ SUBROUTINE DEBCHVXX( THRESH, PATH )
+ IMPLICIT NONE
+* .. Scalar Arguments ..
+ DOUBLE PRECISION THRESH
+ CHARACTER*3 PATH
INTEGER NMAX, NPARAMS, NERRBND, NTESTS, KL, KU
PARAMETER (NMAX = 10, NPARAMS = 2, NERRBND = 3,
$ NTESTS = 6)
-*> .. Local Scalars ..
+* .. Local Scalars ..
INTEGER N, NRHS, INFO, I ,J, k, NFAIL, LDA,
$ N_AUX_TESTS, LDAB, LDAFB
CHARACTER FACT, TRANS, UPLO, EQUED
$ CWISE_RCOND, NWISE_RCOND,
$ CONDTHRESH, ERRTHRESH
-*> .. Local Arrays ..
+* .. Local Arrays ..
DOUBLE PRECISION TSTRAT(NTESTS), RINV(NMAX), PARAMS(NPARAMS),
$ S(NMAX),R(NMAX),C(NMAX), DIFF(NMAX, NMAX),
$ ERRBND_N(NMAX*3), ERRBND_C(NMAX*3),
$ ACOPY(NMAX, NMAX)
INTEGER IPIV(NMAX), IWORK(3*NMAX)
-*> .. External Functions ..
+* .. External Functions ..
DOUBLE PRECISION DLAMCH
-*> .. External Subroutines ..
+* .. External Subroutines ..
EXTERNAL DLAHILB, DGESVXX, DPOSVXX, DSYSVXX,
$ DGBSVXX, DLACPY, LSAMEN
LOGICAL LSAMEN
-*> .. Intrinsic Functions ..
+* .. Intrinsic Functions ..
INTRINSIC SQRT, MAX, ABS, DBLE
-*> .. Parameters ..
+* .. Parameters ..
INTEGER NWISE_I, CWISE_I
PARAMETER (NWISE_I = 1, CWISE_I = 1)
INTEGER BND_I, COND_I
PARAMETER (BND_I = 2, COND_I = 3)
-*> Create the loop to test out the Hilbert matrices
+* Create the loop to test out the Hilbert matrices
FACT = 'E'
UPLO = 'U'
LDAFB = 2*(NMAX-1)+(NMAX-1)+1
C2 = PATH( 2: 3 )
-*> Main loop to test the different Hilbert Matrices.
+* Main loop to test the different Hilbert Matrices.
printed_guide = .false.
NRHS = n
M = MAX(SQRT(DBLE(N)), 10.0D+0)
-*> Generate the Hilbert matrix, its inverse, and the
-*> right hand side, all scaled by the LCM(1,..,2N-1).
+* Generate the Hilbert matrix, its inverse, and the
+* right hand side, all scaled by the LCM(1,..,2N-1).
CALL DLAHILB(N, N, A, LDA, INVHILB, LDA, B, LDA, WORK, INFO)
-*> Copy A into ACOPY.
+* Copy A into ACOPY.
CALL DLACPY('ALL', N, N, A, NMAX, ACOPY, NMAX)
-*> Store A in band format for GB tests
+* Store A in band format for GB tests
DO J = 1, N
DO I = 1, KL+KU+1
AB( I, J ) = 0.0D+0
END DO
END DO
-*> Copy AB into ABCOPY.
+* Copy AB into ABCOPY.
DO J = 1, N
DO I = 1, KL+KU+1
ABCOPY( I, J ) = 0.0D+0
END DO
CALL DLACPY('ALL', KL+KU+1, N, AB, LDAB, ABCOPY, LDAB)
-*> Call D**SVXX with default PARAMS and N_ERR_BND = 3.
+* Call D**SVXX with default PARAMS and N_ERR_BND = 3.
IF ( LSAMEN( 2, C2, 'SY' ) ) THEN
CALL DSYSVXX(FACT, UPLO, N, NRHS, ACOPY, LDA, AF, LDA,
$ IPIV, EQUED, S, B, LDA, X, LDA, ORCOND,
END IF
END IF
-*> Calculating the difference between D**SVXX's X and the true X.
+* Calculating the difference between D**SVXX's X and the true X.
DO I = 1,N
DO J =1,NRHS
DIFF(I,J) = X(I,J) - INVHILB(I,J)
END DO
END DO
-*> Calculating the RCOND
+* Calculating the RCOND
RNORM = 0.0D+0
RINORM = 0.0D+0
IF ( LSAMEN( 2, C2, 'PO' ) .OR. LSAMEN( 2, C2, 'SY' ) ) THEN
RNORM = RNORM / ABS(A(1, 1))
RCOND = 1.0D+0/(RNORM * RINORM)
-*> Calculating the R for normwise rcond.
+* Calculating the R for normwise rcond.
DO I = 1, N
RINV(I) = 0.0D+0
END DO
END DO
END DO
-*> Calculating the Normwise rcond.
+* Calculating the Normwise rcond.
RINORM = 0.0D+0
DO I = 1, N
SUMRI = 0.0D+0
c$$$ WRITE(*,*) 'Raw error estimate: ',ERRBND(NRHS,cwise_i,rawbnd_i)
c$$$ print *, 'Info: ', info
c$$$ WRITE(*,*)
-*> WRITE(*,*) 'TSTRAT: ',TSTRAT
+* WRITE(*,*) 'TSTRAT: ',TSTRAT
END DO
9998 FORMAT( ' D', A2, 'SVXX: ', I6, ' out of ', I6,
$ ' tests failed to pass the threshold' )
9997 FORMAT( ' D', A2, 'SVXX passed the tests of error bounds' )
-*> Test ratios.
+* Test ratios.
9996 FORMAT( 3X, I2, ': Normwise guaranteed forward error', / 5X,
$ 'Guaranteed case: if norm ( abs( Xc - Xt )',
$ ' / norm ( Xt ) .LE. ERRBND( *, nwise_i, bnd_i ), then',
$ ', ORCOND = ', G12.5, ', real RCOND = ', G12.5 )
END
-*>\endverbatim
-*
-* Arguments
-* =========
-*
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup double_lin
-*
-* =====================================================================
- SUBROUTINE DEBCHVXX( THRESH, PATH )
-*
-* -- LAPACK test routine (input) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- DOUBLE PRECISION THRESH
- CHARACTER*3 PATH
-*
*> The (n-1) elements of the first super-diagonal of U.
*> \endverbatim
*>
-*> \param[in] DU2F
+*> \param[in] DU2
*> \verbatim
-*> DU2F is DOUBLE PRECISION array, dimension (N-2)
+*> DU2 is DOUBLE PRECISION array, dimension (N-2)
*> The (n-2) elements of the second super-diagonal of U.
*> \endverbatim
*>
*
* SUBROUTINE DLAHILB(N, NRHS, A, LDA, X, LDX, B, LDB, WORK, INFO)
*
-* ! .. Scalar Arguments ..
+* .. Scalar Arguments ..
* INTEGER N, NRHS, LDA, LDX, LDB, INFO
-* ! .. Array Arguments ..
+* .. Array Arguments ..
* DOUBLE PRECISION A(LDA, N), X(LDX, NRHS), B(LDB, NRHS), WORK(N)
-* ! ..
-* !
+* ..
+*
* Purpose
* =======
*
*>\details \b Purpose:
*>\verbatim
-! Purpose
-! =======
-!
-! DLAHILB generates an N by N scaled Hilbert matrix in A along with
-! NRHS right-hand sides in B and solutions in X such that A*X=B.
-!
-! The Hilbert matrix is scaled by M = LCM(1, 2, ..., 2*N-1) so that all
-! entries are integers. The right-hand sides are the first NRHS
-! columns of M * the identity matrix, and the solutions are the
-! first NRHS columns of the inverse Hilbert matrix.
-!
-! The condition number of the Hilbert matrix grows exponentially with
-! its size, roughly as O(e ** (3.5*N)). Additionally, the inverse
-! Hilbert matrices beyond a relatively small dimension cannot be
-! generated exactly without extra precision. Precision is exhausted
-! when the largest entry in the inverse Hilbert matrix is greater than
-! 2 to the power of the number of bits in the fraction of the data type
-! used plus one, which is 24 for single precision.
-!
-! In single, the generated solution is exact for N <= 6 and has
-! small componentwise error for 7 <= N <= 11.
-!
+*>
+*> DLAHILB generates an N by N scaled Hilbert matrix in A along with
+*> NRHS right-hand sides in B and solutions in X such that A*X=B.
+*>
+*> The Hilbert matrix is scaled by M = LCM(1, 2, ..., 2*N-1) so that all
+*> entries are integers. The right-hand sides are the first NRHS
+*> columns of M * the identity matrix, and the solutions are the
+*> first NRHS columns of the inverse Hilbert matrix.
+*>
+*> The condition number of the Hilbert matrix grows exponentially with
+*> its size, roughly as O(e ** (3.5*N)). Additionally, the inverse
+*> Hilbert matrices beyond a relatively small dimension cannot be
+*> generated exactly without extra precision. Precision is exhausted
+*> when the largest entry in the inverse Hilbert matrix is greater than
+*> 2 to the power of the number of bits in the fraction of the data type
+*> used plus one, which is 24 for single precision.
+*>
+*> In single, the generated solution is exact for N <= 6 and has
+*> small componentwise error for 7 <= N <= 11.
+*>
*>\endverbatim
*
* Arguments
* =========
*
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
+*> The dimension of the matrix A.
+*> \endverbatim
+*>
+*> \param[in] NRHS
+*> \verbatim
+*> NRHS is NRHS
+*> The requested number of right-hand sides.
+*> \endverbatim
+*>
+*> \param[out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension (LDA, N)
+*> The generated scaled Hilbert matrix.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= N.
+*> \endverbatim
+*>
+*> \param[out] X
+*> \verbatim
+*> X is DOUBLE PRECISION array, dimension (LDX, NRHS)
+*> The generated exact solutions. Currently, the first NRHS
+*> columns of the inverse Hilbert matrix.
+*> \endverbatim
+*>
+*> \param[in] LDX
+*> \verbatim
+*> LDX is INTEGER
+*> The leading dimension of the array X. LDX >= N.
+*> \endverbatim
+*>
+*> \param[out] B
+*> \verbatim
+*> B is DOUBLE PRECISION array, dimension (LDB, NRHS)
+*> The generated right-hand sides. Currently, the first NRHS
+*> columns of LCM(1, 2, ..., 2*N-1) * the identity matrix.
+*> \endverbatim
+*>
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
+*> The leading dimension of the array B. LDB >= N.
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> = 1: N is too large; the data is still generated but may not
+*> be not exact.
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
* November 2011
*
-! .. Scalar Arguments ..
+* .. Scalar Arguments ..
INTEGER N, NRHS, LDA, LDX, LDB, INFO
-! .. Array Arguments ..
+* .. Array Arguments ..
DOUBLE PRECISION A(LDA, N), X(LDX, NRHS), B(LDB, NRHS), WORK(N)
-! ..
-!
-! =====================================================================
-
-! .. Local Scalars ..
+* ..
+*
+* =====================================================================
+* .. Local Scalars ..
INTEGER TM, TI, R
INTEGER M
INTEGER I, J
COMPLEX*16 TMP
-
-! .. Parameters ..
-! NMAX_EXACT the largest dimension where the generated data is
-! exact.
-! NMAX_APPROX the largest dimension where the generated data has
-! a small componentwise relative error.
+* ..
+* .. Parameters ..
+* NMAX_EXACT the largest dimension where the generated data is
+* exact.
+* NMAX_APPROX the largest dimension where the generated data has
+* a small componentwise relative error.
INTEGER NMAX_EXACT, NMAX_APPROX
PARAMETER (NMAX_EXACT = 6, NMAX_APPROX = 11)
-! ..
-! .. External Functions
+* ..
+* .. External Functions
EXTERNAL DLASET
INTRINSIC DBLE
-! ..
-! .. Executable Statements ..
-!
-! Test the input arguments
-!
+* ..
+* .. Executable Statements ..
+*
+* Test the input arguments
+*
INFO = 0
IF (N .LT. 0 .OR. N .GT. NMAX_APPROX) THEN
INFO = -1
IF (N .GT. NMAX_EXACT) THEN
INFO = 1
END IF
-
-! Compute M = the LCM of the integers [1, 2*N-1]. The largest
-! reasonable N is small enough that integers suffice (up to N = 11).
+*
+* Compute M = the LCM of the integers [1, 2*N-1]. The largest
+* reasonable N is small enough that integers suffice (up to N = 11).
M = 1
DO I = 2, (2*N-1)
TM = M
END DO
M = (M / TI) * I
END DO
-
-! Generate the scaled Hilbert matrix in A
+*
+* Generate the scaled Hilbert matrix in A
DO J = 1, N
DO I = 1, N
A(I, J) = DBLE(M) / (I + J - 1)
END DO
END DO
-
-! Generate matrix B as simply the first NRHS columns of M * the
-! identity.
+*
+* Generate matrix B as simply the first NRHS columns of M * the
+* identity.
TMP = DBLE(M)
CALL DLASET('Full', N, NRHS, 0.0D+0, TMP, B, LDB)
-
-! Generate the true solutions in X. Because B = the first NRHS
-! columns of M*I, the true solutions are just the first NRHS columns
-! of the inverse Hilbert matrix.
+*
+* Generate the true solutions in X. Because B = the first NRHS
+* columns of M*I, the true solutions are just the first NRHS columns
+* of the inverse Hilbert matrix.
WORK(1) = N
DO J = 2, N
WORK(J) = ( ( (WORK(J-1)/(J-1)) * (J-1 - N) ) /(J-1) )
$ * (N +J -1)
END DO
-
+*
DO J = 1, NRHS
DO I = 1, N
X(I, J) = (WORK(I)*WORK(J)) / (I + J - 1)
END DO
END DO
-
+*
END
*> or the number of sub-diagonals if UPLO = 'L'. KD >= 0.
*> \endverbatim
*>
+*> \param[in] NRHS
+*> \verbatim
+*> NRHS is INTEGER
+*> The number of right hand sides. NRHS >= 0.
+*> \endverbatim
+*>
*> \param[in] A
*> \verbatim
*> A is DOUBLE PRECISION array, dimension (LDA,N)
*> If UPLO = 'U', norm(U'*U - A) / ( N * norm(A) * EPS )
*> \endverbatim
*>
+*> \param[in] RANK
+*> \verbatim
+*> RANK is INTEGER
+*> number of nonzero singular values of A.
+*> \endverbatim
+*>
*
* Authors
* =======
*> \verbatim
*> C is DOUBLE PRECISION array, dimension (LDC,N)
*> \endverbatim
+*>
+*> \param[in] LDC
*> \verbatim
-*> LDC (integer) INTEGER
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,N).
*> \endverbatim
*>
*> \verbatim
*> C is DOUBLE PRECISION array, dimension (LDC,N)
*> \endverbatim
+*>
+*> \param[in] LDC
*> \verbatim
-*> LDC (integer) INTEGER
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,N).
*> \endverbatim
*>
* Definition
* ==========
*
-* INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3,
+* INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3,
* N4 )
*
* .. Scalar Arguments ..
*> computation tree in the divide-and-conquer algorithm
*> =10: ieee NaN arithmetic can be trusted not to trap
*> =11: infinity arithmetic can be trusted not to trap
-*> \endverbatim
-*> \verbatim
+*>
*> Other specifications (up to 100) can be added later.
*> \endverbatim
*>
*> \param[in] N4
*> \verbatim
*> N4 is INTEGER
-*> \endverbatim
-*> \verbatim
+*>
*> Problem dimensions for the subroutine NAME; these may not all
*> be required.
*> \endverbatim
*>
-*> \param[out] (ILAENV)
+*> \return ILAENV
*> \verbatim
-*> (ILAENV) is INTEGER
+*> ILAENV is INTEGER
*> >= 0: the value of the parameter specified by ISPEC
*> < 0: if ILAENV = -k, the k-th argument had an illegal value.
*> \endverbatim
*> The values of the matrix dimension N.
*> \endverbatim
*>
+*> \param[in] NRHS
+*> \verbatim
+*> NRHS is INTEGER
+*> The number of right hand sides, NRHS >= 0.
+*> \endverbatim
+*>
*> \param[in] THRESH
*> \verbatim
*> THRESH is REAL
*
N = NVAL( IIN )
*
- DO 120 IIT = 1, 3
+ DO 120 IIT = 1, 3
+* Nothing to do for N=0
+ IF ( N .EQ. 0 ) EXIT
* Quick Return if possible
IF ( N .EQ. 0 ) EXIT
*> AP is REAL array, dimension ((NMAX*(NMAX+1))/2).
*> \endverbatim
*>
-*> \param[out] A2
+*> \param[out] ASAV
*> \verbatim
-*> A2 is REAL array, dimension (LDA,NMAX)
+*> ASAV is REAL array, dimension (LDA,NMAX)
*> \endverbatim
*>
*
* Definition
* ==========
*
-* SUBROUTINE SEBCHVXX( THRESH, PATH )
-*
-* .. Scalar Arguments ..
-* REAL THRESH
-* CHARACTER*3 PATH
-*
+* SUBROUTINE SEBCHVXX( THRESH, PATH )
+*
+* .. Scalar Arguments ..
+* REAL THRESH
+* CHARACTER*3 PATH
+* ..
+*
* Purpose
* =======
*
*>\details \b Purpose:
*>\verbatim
-*> Purpose
-*> ======
+*> SEBCHVXX will run S**SVXX on a series of Hilbert matrices and then
+*> compare the error bounds returned by SGESVXX to see if the returned
+*> answer indeed falls within those bounds.
*>
-*> SEBCHVXX will run S**SVXX on a series of Hilbert matrices and then
-*> compare the error bounds returned by SGESVXX to see if the returned
-*> answer indeed falls within those bounds.
+*> Eight test ratios will be computed. The tests will pass if they are .LT.
+*> THRESH. There are two cases that are determined by 1 / (SQRT( N ) * EPS).
+*> If that value is .LE. to the component wise reciprocal condition number,
+*> it uses the guaranteed case, other wise it uses the unguaranteed case.
*>
-*> Eight test ratios will be computed. The tests will pass if they are .LT.
-*> THRESH. There are two cases that are determined by 1 / (SQRT( N ) * EPS).
-*> If that value is .LE. to the component wise reciprocal condition number,
-*> it uses the guaranteed case, other wise it uses the unguaranteed case.
+*> Test ratios:
+*> Let Xc be X_computed and Xt be X_truth.
+*> The norm used is the infinity norm.
*>
-*> Test ratios:
-*> Let Xc be X_computed and Xt be X_truth.
-*> The norm used is the infinity norm.
-
-*> Let A be the guaranteed case and B be the unguaranteed case.
+*> Let A be the guaranteed case and B be the unguaranteed case.
+*>
+*> 1. Normwise guaranteed forward error bound.
+*> A: norm ( abs( Xc - Xt ) / norm ( Xt ) .LE. ERRBND( *, nwise_i, bnd_i ) and
+*> ERRBND( *, nwise_i, bnd_i ) .LE. MAX(SQRT(N),10) * EPS.
+*> If these conditions are met, the test ratio is set to be
+*> ERRBND( *, nwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
+*> B: For this case, SGESVXX should just return 1. If it is less than
+*> one, treat it the same as in 1A. Otherwise it fails. (Set test
+*> ratio to ERRBND( *, nwise_i, bnd_i ) * THRESH?)
*>
-*> 1. Normwise guaranteed forward error bound.
-*> A: norm ( abs( Xc - Xt ) / norm ( Xt ) .LE. ERRBND( *, nwise_i, bnd_i ) and
-*> ERRBND( *, nwise_i, bnd_i ) .LE. MAX(SQRT(N),10) * EPS.
-*> If these conditions are met, the test ratio is set to be
-*> ERRBND( *, nwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
-*> B: For this case, SGESVXX should just return 1. If it is less than
-*> one, treat it the same as in 1A. Otherwise it fails. (Set test
-*> ratio to ERRBND( *, nwise_i, bnd_i ) * THRESH?)
+*> 2. Componentwise guaranteed forward error bound.
+*> A: norm ( abs( Xc(j) - Xt(j) ) ) / norm (Xt(j)) .LE. ERRBND( *, cwise_i, bnd_i )
+*> for all j .AND. ERRBND( *, cwise_i, bnd_i ) .LE. MAX(SQRT(N), 10) * EPS.
+*> If these conditions are met, the test ratio is set to be
+*> ERRBND( *, cwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
+*> B: Same as normwise test ratio.
*>
-*> 2. Componentwise guaranteed forward error bound.
-*> A: norm ( abs( Xc(j) - Xt(j) ) ) / norm (Xt(j)) .LE. ERRBND( *, cwise_i, bnd_i )
-*> for all j .AND. ERRBND( *, cwise_i, bnd_i ) .LE. MAX(SQRT(N), 10) * EPS.
-*> If these conditions are met, the test ratio is set to be
-*> ERRBND( *, cwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
-*> B: Same as normwise test ratio.
+*> 3. Backwards error.
+*> A: The test ratio is set to BERR/EPS.
+*> B: Same test ratio.
*>
-*> 3. Backwards error.
-*> A: The test ratio is set to BERR/EPS.
-*> B: Same test ratio.
+*> 4. Reciprocal condition number.
+*> A: A condition number is computed with Xt and compared with the one
+*> returned from SGESVXX. Let RCONDc be the RCOND returned by SGESVXX
+*> and RCONDt be the RCOND from the truth value. Test ratio is set to
+*> MAX(RCONDc/RCONDt, RCONDt/RCONDc).
+*> B: Test ratio is set to 1 / (EPS * RCONDc).
*>
-*> 4. Reciprocal condition number.
-*> A: A condition number is computed with Xt and compared with the one
-*> returned from SGESVXX. Let RCONDc be the RCOND returned by SGESVXX
-*> and RCONDt be the RCOND from the truth value. Test ratio is set to
-*> MAX(RCONDc/RCONDt, RCONDt/RCONDc).
-*> B: Test ratio is set to 1 / (EPS * RCONDc).
+*> 5. Reciprocal normwise condition number.
+*> A: The test ratio is set to
+*> MAX(ERRBND( *, nwise_i, cond_i ) / NCOND, NCOND / ERRBND( *, nwise_i, cond_i )).
+*> B: Test ratio is set to 1 / (EPS * ERRBND( *, nwise_i, cond_i )).
*>
-*> 5. Reciprocal normwise condition number.
-*> A: The test ratio is set to
-*> MAX(ERRBND( *, nwise_i, cond_i ) / NCOND, NCOND / ERRBND( *, nwise_i, cond_i )).
-*> B: Test ratio is set to 1 / (EPS * ERRBND( *, nwise_i, cond_i )).
+*> 7. Reciprocal componentwise condition number.
+*> A: Test ratio is set to
+*> MAX(ERRBND( *, cwise_i, cond_i ) / CCOND, CCOND / ERRBND( *, cwise_i, cond_i )).
+*> B: Test ratio is set to 1 / (EPS * ERRBND( *, cwise_i, cond_i )).
*>
-*> 7. Reciprocal componentwise condition number.
-*> A: Test ratio is set to
-*> MAX(ERRBND( *, cwise_i, cond_i ) / CCOND, CCOND / ERRBND( *, cwise_i, cond_i )).
-*> B: Test ratio is set to 1 / (EPS * ERRBND( *, cwise_i, cond_i )).
+*> .. Parameters ..
+*> NMAX is determined by the largest number in the inverse of the Hilbert
+*> matrix. Precision is exhausted when the largest entry in it is greater
+*> than 2 to the power of the number of bits in the fraction of the data
+*> type used plus one, which is 24 for single precision.
+*> NMAX should be 6 for single and 11 for double.
+*> \endverbatim
*>
-*> .. Parameters ..
-*> NMAX is determined by the largest number in the inverse of the Hilbert
-*> matrix. Precision is exhausted when the largest entry in it is greater
-*> than 2 to the power of the number of bits in the fraction of the data
-*> type used plus one, which is 24 for single precision.
-*> NMAX should be 6 for single and 11 for double.
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup single_lin
+*
+* =====================================================================
+ SUBROUTINE SEBCHVXX( THRESH, PATH )
+ IMPLICIT NONE
+* .. Scalar Arguments ..
+ REAL THRESH
+ CHARACTER*3 PATH
INTEGER NMAX, NPARAMS, NERRBND, NTESTS, KL, KU
PARAMETER (NMAX = 6, NPARAMS = 2, NERRBND = 3,
$ NTESTS = 6)
-*> .. Local Scalars ..
+* .. Local Scalars ..
INTEGER N, NRHS, INFO, I ,J, k, NFAIL, LDA, LDAB,
$ LDAFB, N_AUX_TESTS
CHARACTER FACT, TRANS, UPLO, EQUED
$ CWISE_RCOND, NWISE_RCOND,
$ CONDTHRESH, ERRTHRESH
-*> .. Local Arrays ..
+* .. Local Arrays ..
REAL TSTRAT(NTESTS), RINV(NMAX), PARAMS(NPARAMS),
$ A(NMAX, NMAX), ACOPY(NMAX, NMAX),
$ INVHILB(NMAX, NMAX), R(NMAX), C(NMAX), S(NMAX),
$ ERRBND_N(NMAX*3), ERRBND_C(NMAX*3)
INTEGER IWORK(NMAX), IPIV(NMAX)
-*> .. External Functions ..
+* .. External Functions ..
REAL SLAMCH
-*> .. External Subroutines ..
+* .. External Subroutines ..
EXTERNAL SLAHILB, SGESVXX, SSYSVXX, SPOSVXX, SGBSVXX,
$ SLACPY, LSAMEN
LOGICAL LSAMEN
-*> .. Intrinsic Functions ..
+* .. Intrinsic Functions ..
INTRINSIC SQRT, MAX, ABS
-*> .. Parameters ..
+* .. Parameters ..
INTEGER NWISE_I, CWISE_I
PARAMETER (NWISE_I = 1, CWISE_I = 1)
INTEGER BND_I, COND_I
PARAMETER (BND_I = 2, COND_I = 3)
-*> Create the loop to test out the Hilbert matrices
+* Create the loop to test out the Hilbert matrices
FACT = 'E'
UPLO = 'U'
LDAFB = 2*(NMAX-1)+(NMAX-1)+1
C2 = PATH( 2: 3 )
-*> Main loop to test the different Hilbert Matrices.
+* Main loop to test the different Hilbert Matrices.
printed_guide = .false.
NRHS = n
M = MAX(SQRT(REAL(N)), 10.0)
-*> Generate the Hilbert matrix, its inverse, and the
-*> right hand side, all scaled by the LCM(1,..,2N-1).
+* Generate the Hilbert matrix, its inverse, and the
+* right hand side, all scaled by the LCM(1,..,2N-1).
CALL SLAHILB(N, N, A, LDA, INVHILB, LDA, B, LDA, WORK, INFO)
-*> Copy A into ACOPY.
+* Copy A into ACOPY.
CALL SLACPY('ALL', N, N, A, NMAX, ACOPY, NMAX)
-*> Store A in band format for GB tests
+* Store A in band format for GB tests
DO J = 1, N
DO I = 1, KL+KU+1
AB( I, J ) = 0.0E+0
END DO
END DO
-*> Copy AB into ABCOPY.
+* Copy AB into ABCOPY.
DO J = 1, N
DO I = 1, KL+KU+1
ABCOPY( I, J ) = 0.0E+0
END DO
CALL SLACPY('ALL', KL+KU+1, N, AB, LDAB, ABCOPY, LDAB)
-*> Call S**SVXX with default PARAMS and N_ERR_BND = 3.
+* Call S**SVXX with default PARAMS and N_ERR_BND = 3.
IF ( LSAMEN( 2, C2, 'SY' ) ) THEN
CALL SSYSVXX(FACT, UPLO, N, NRHS, ACOPY, LDA, AF, LDA,
$ IPIV, EQUED, S, B, LDA, X, LDA, ORCOND,
END IF
END IF
-*> Calculating the difference between S**SVXX's X and the true X.
+* Calculating the difference between S**SVXX's X and the true X.
DO I = 1, N
DO J = 1, NRHS
DIFF( I, J ) = X( I, J ) - INVHILB( I, J )
END DO
END DO
-*> Calculating the RCOND
+* Calculating the RCOND
RNORM = 0
RINORM = 0
IF ( LSAMEN( 2, C2, 'PO' ) .OR. LSAMEN( 2, C2, 'SY' ) ) THEN
RNORM = RNORM / A(1, 1)
RCOND = 1.0/(RNORM * RINORM)
-*> Calculating the R for normwise rcond.
+* Calculating the R for normwise rcond.
DO I = 1, N
RINV(I) = 0.0
END DO
END DO
END DO
-*> Calculating the Normwise rcond.
+* Calculating the Normwise rcond.
RINORM = 0.0
DO I = 1, N
SUMRI = 0.0
c$$$ WRITE(*,*) 'Raw error estimate: ',ERRBND(NRHS,cwise_i,rawbnd_i)
c$$$ print *, 'Info: ', info
c$$$ WRITE(*,*)
-*> WRITE(*,*) 'TSTRAT: ',TSTRAT
+* WRITE(*,*) 'TSTRAT: ',TSTRAT
END DO
9998 FORMAT( ' S', A2, 'SVXX: ', I6, ' out of ', I6,
$ ' tests failed to pass the threshold' )
9997 FORMAT( ' S', A2, 'SVXX passed the tests of error bounds' )
-*> Test ratios.
+* Test ratios.
9996 FORMAT( 3X, I2, ': Normwise guaranteed forward error', / 5X,
$ 'Guaranteed case: if norm ( abs( Xc - Xt )',
$ ' / norm ( Xt ) .LE. ERRBND( *, nwise_i, bnd_i ), then',
$ ', ORCOND = ', G12.5, ', real RCOND = ', G12.5 )
END
-*>\endverbatim
-*
-* Arguments
-* =========
-*
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup single_lin
-*
-* =====================================================================
- SUBROUTINE SEBCHVXX( THRESH, PATH )
-*
-* -- LAPACK test routine (input) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- REAL THRESH
- CHARACTER*3 PATH
-*
*> The (n-1) elements of the first super-diagonal of U.
*> \endverbatim
*>
-*> \param[in] DU2F
+*> \param[in] DU2
*> \verbatim
-*> DU2F is REAL array, dimension (N-2)
+*> DU2 is REAL array, dimension (N-2)
*> The (n-2) elements of the second super-diagonal of U.
*> \endverbatim
*>
*
* SUBROUTINE SLAHILB(N, NRHS, A, LDA, X, LDX, B, LDB, WORK, INFO)
*
-* ! .. Scalar Arguments ..
+* .. Scalar Arguments ..
* INTEGER N, NRHS, LDA, LDX, LDB, INFO
-* ! .. Array Arguments ..
+* .. Array Arguments ..
* REAL A(LDA, N), X(LDX, NRHS), B(LDB, NRHS), WORK(N)
-* ! ..
-* !
+* ..
+*
* Purpose
* =======
*
*>\details \b Purpose:
*>\verbatim
-! Purpose
-! =======
-!
-! SLAHILB generates an N by N scaled Hilbert matrix in A along with
-! NRHS right-hand sides in B and solutions in X such that A*X=B.
-!
-! The Hilbert matrix is scaled by M = LCM(1, 2, ..., 2*N-1) so that all
-! entries are integers. The right-hand sides are the first NRHS
-! columns of M * the identity matrix, and the solutions are the
-! first NRHS columns of the inverse Hilbert matrix.
-!
-! The condition number of the Hilbert matrix grows exponentially with
-! its size, roughly as O(e ** (3.5*N)). Additionally, the inverse
-! Hilbert matrices beyond a relatively small dimension cannot be
-! generated exactly without extra precision. Precision is exhausted
-! when the largest entry in the inverse Hilbert matrix is greater than
-! 2 to the power of the number of bits in the fraction of the data type
-! used plus one, which is 24 for single precision.
-!
-! In single, the generated solution is exact for N <= 6 and has
-! small componentwise error for 7 <= N <= 11.
-!
+*>
+*> SLAHILB generates an N by N scaled Hilbert matrix in A along with
+*> NRHS right-hand sides in B and solutions in X such that A*X=B.
+*>
+*> The Hilbert matrix is scaled by M = LCM(1, 2, ..., 2*N-1) so that all
+*> entries are integers. The right-hand sides are the first NRHS
+*> columns of M * the identity matrix, and the solutions are the
+*> first NRHS columns of the inverse Hilbert matrix.
+*>
+*> The condition number of the Hilbert matrix grows exponentially with
+*> its size, roughly as O(e ** (3.5*N)). Additionally, the inverse
+*> Hilbert matrices beyond a relatively small dimension cannot be
+*> generated exactly without extra precision. Precision is exhausted
+*> when the largest entry in the inverse Hilbert matrix is greater than
+*> 2 to the power of the number of bits in the fraction of the data type
+*> used plus one, which is 24 for single precision.
+*>
+*> In single, the generated solution is exact for N <= 6 and has
+*> small componentwise error for 7 <= N <= 11.
+*>
*>\endverbatim
*
* Arguments
* =========
*
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
+*> The dimension of the matrix A.
+*> \endverbatim
+*>
+*> \param[in] NRHS
+*> \verbatim
+*> NRHS is NRHS
+*> The requested number of right-hand sides.
+*> \endverbatim
+*>
+*> \param[out] A
+*> \verbatim
+*> A is REAL array, dimension (LDA, N)
+*> The generated scaled Hilbert matrix.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= N.
+*> \endverbatim
+*>
+*> \param[out] X
+*> \verbatim
+*> X is REAL array, dimension (LDX, NRHS)
+*> The generated exact solutions. Currently, the first NRHS
+*> columns of the inverse Hilbert matrix.
+*> \endverbatim
+*>
+*> \param[in] LDX
+*> \verbatim
+*> LDX is INTEGER
+*> The leading dimension of the array X. LDX >= N.
+*> \endverbatim
+*>
+*> \param[out] B
+*> \verbatim
+*> B is REAL array, dimension (LDB, NRHS)
+*> The generated right-hand sides. Currently, the first NRHS
+*> columns of LCM(1, 2, ..., 2*N-1) * the identity matrix.
+*> \endverbatim
+*>
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
+*> The leading dimension of the array B. LDB >= N.
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> = 1: N is too large; the data is still generated but may not
+*> be not exact.
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
*
* Authors
* =======
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
* November 2011
*
-! .. Scalar Arguments ..
+* .. Scalar Arguments ..
INTEGER N, NRHS, LDA, LDX, LDB, INFO
-! .. Array Arguments ..
+* .. Array Arguments ..
REAL A(LDA, N), X(LDX, NRHS), B(LDB, NRHS), WORK(N)
-! ..
-!
-! =====================================================================
-
-! .. Local Scalars ..
+* ..
+*
+* =====================================================================
+* .. Local Scalars ..
INTEGER TM, TI, R
INTEGER M
INTEGER I, J
-
-! .. Parameters ..
-! NMAX_EXACT the largest dimension where the generated data is
-! exact.
-! NMAX_APPROX the largest dimension where the generated data has
-! a small componentwise relative error.
+* ..
+* .. Parameters ..
+* NMAX_EXACT the largest dimension where the generated data is
+* exact.
+* NMAX_APPROX the largest dimension where the generated data has
+* a small componentwise relative error.
INTEGER NMAX_EXACT, NMAX_APPROX
PARAMETER (NMAX_EXACT = 6, NMAX_APPROX = 11)
-
-! ..
-! .. External Functions
+* ..
+* .. External Functions
EXTERNAL SLASET
INTRINSIC REAL
-! ..
-! .. Executable Statements ..
-!
-! Test the input arguments
-!
+* ..
+* .. Executable Statements ..
+*
+* Test the input arguments
+*
INFO = 0
IF (N .LT. 0 .OR. N .GT. NMAX_APPROX) THEN
INFO = -1
IF (N .GT. NMAX_EXACT) THEN
INFO = 1
END IF
-
-! Compute M = the LCM of the integers [1, 2*N-1]. The largest
-! reasonable N is small enough that integers suffice (up to N = 11).
+*
+* Compute M = the LCM of the integers [1, 2*N-1]. The largest
+* reasonable N is small enough that integers suffice (up to N = 11).
M = 1
DO I = 2, (2*N-1)
TM = M
END DO
M = (M / TI) * I
END DO
-
-! Generate the scaled Hilbert matrix in A
+*
+* Generate the scaled Hilbert matrix in A
DO J = 1, N
DO I = 1, N
A(I, J) = REAL(M) / (I + J - 1)
END DO
END DO
-
-! Generate matrix B as simply the first NRHS columns of M * the
-! identity.
+*
+* Generate matrix B as simply the first NRHS columns of M * the
+* identity.
CALL SLASET('Full', N, NRHS, 0.0, REAL(M), B, LDB)
-
-! Generate the true solutions in X. Because B = the first NRHS
-! columns of M*I, the true solutions are just the first NRHS columns
-! of the inverse Hilbert matrix.
+*
+* Generate the true solutions in X. Because B = the first NRHS
+* columns of M*I, the true solutions are just the first NRHS columns
+* of the inverse Hilbert matrix.
WORK(1) = N
DO J = 2, N
WORK(J) = ( ( (WORK(J-1)/(J-1)) * (J-1 - N) ) /(J-1) )
$ * (N +J -1)
END DO
-
+*
DO J = 1, NRHS
DO I = 1, N
X(I, J) = (WORK(I)*WORK(J)) / (I + J - 1)
END DO
END DO
-
+*
END
*> or the number of sub-diagonals if UPLO = 'L'. KD >= 0.
*> \endverbatim
*>
+*> \param[in] NRHS
+*> \verbatim
+*> NRHS is INTEGER
+*> The number of right hand sides. NRHS >= 0.
+*> \endverbatim
+*>
*> \param[in] A
*> \verbatim
*> A is REAL array, dimension (LDA,N)
*> If UPLO = 'U', norm(U'*U - A) / ( N * norm(A) * EPS )
*> \endverbatim
*>
+*> \param[in] RANK
+*> \verbatim
+*> RANK is INTEGER
+*> number of nonzero singular values of A.
+*> \endverbatim
+*>
*
* Authors
* =======
*> \verbatim
*> C is REAL array, dimension (LDC,N)
*> \endverbatim
+*>
+*> \param[in] LDC
*> \verbatim
-*> LDC (integer) INTEGER
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,N).
*> \endverbatim
*>
*> \verbatim
*> C is REAL array, dimension (LDC,N)
*> \endverbatim
+*>
+*> \param[in] LDC
*> \verbatim
-*> LDC (integer) INTEGER
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,N).
*> \endverbatim
*>
*> The values of the number of right hand sides NRHS.
*> \endverbatim
*>
-*> \param[in] NRHS
-*> \verbatim
-*> NRHS is INTEGER
-*> The number of right hand side vectors to be generated for
-*> each linear system.
-*> \endverbatim
-*>
*> \param[in] THRESH
*> \verbatim
*> THRESH is DOUBLE PRECISION
*> The values of the matrix dimension N.
*> \endverbatim
*>
+*> \param[in] NRHS
+*> \verbatim
+*> NRHS is INTEGER
+*> The number of right hand sides, NRHS >= 0.
+*> \endverbatim
+*>
*> \param[in] THRESH
*> \verbatim
*> THRESH is DOUBLE PRECISION
*> AP is COMPLEX*16 array, dimension ((NMAX*(NMAX+1))/2).
*> \endverbatim
*>
-*> \param[out] A2
+*> \param[out] ASAV
*> \verbatim
-*> A2 is COMPLEX*16 array, dimension (LDA,NMAX)
+*> ASAV is COMPLEX*16 array, dimension (LDA,NMAX)
*> \endverbatim
*>
*
* Definition
* ==========
*
-* SUBROUTINE ZEBCHVXX( THRESH, PATH )
-*
-* .. Scalar Arguments ..
-* DOUBLE PRECISION THRESH
-* CHARACTER*3 PATH
-*
+* SUBROUTINE ZEBCHVXX( THRESH, PATH )
+*
+* .. Scalar Arguments ..
+* DOUBLE PRECISION THRESH
+* CHARACTER*3 PATH
+* ..
+*
* Purpose
-* =======
+* ======
*
*>\details \b Purpose:
*>\verbatim
-*> Purpose
-*> ======
+*> ZEBCHVXX will run Z**SVXX on a series of Hilbert matrices and then
+*> compare the error bounds returned by Z**SVXX to see if the returned
+*> answer indeed falls within those bounds.
*>
-*> ZEBCHVXX will run Z**SVXX on a series of Hilbert matrices and then
-*> compare the error bounds returned by Z**SVXX to see if the returned
-*> answer indeed falls within those bounds.
+*> Eight test ratios will be computed. The tests will pass if they are .LT.
+*> THRESH. There are two cases that are determined by 1 / (SQRT( N ) * EPS).
+*> If that value is .LE. to the component wise reciprocal condition number,
+*> it uses the guaranteed case, other wise it uses the unguaranteed case.
*>
-*> Eight test ratios will be computed. The tests will pass if they are .LT.
-*> THRESH. There are two cases that are determined by 1 / (SQRT( N ) * EPS).
-*> If that value is .LE. to the component wise reciprocal condition number,
-*> it uses the guaranteed case, other wise it uses the unguaranteed case.
+*> Test ratios:
+*> Let Xc be X_computed and Xt be X_truth.
+*> The norm used is the infinity norm.
*>
-*> Test ratios:
-*> Let Xc be X_computed and Xt be X_truth.
-*> The norm used is the infinity norm.
-
-*> Let A be the guaranteed case and B be the unguaranteed case.
+*> Let A be the guaranteed case and B be the unguaranteed case.
+*>
+*> 1. Normwise guaranteed forward error bound.
+*> A: norm ( abs( Xc - Xt ) / norm ( Xt ) .LE. ERRBND( *, nwise_i, bnd_i ) and
+*> ERRBND( *, nwise_i, bnd_i ) .LE. MAX(SQRT(N),10) * EPS.
+*> If these conditions are met, the test ratio is set to be
+*> ERRBND( *, nwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
+*> B: For this case, CGESVXX should just return 1. If it is less than
+*> one, treat it the same as in 1A. Otherwise it fails. (Set test
+*> ratio to ERRBND( *, nwise_i, bnd_i ) * THRESH?)
*>
-*> 1. Normwise guaranteed forward error bound.
-*> A: norm ( abs( Xc - Xt ) / norm ( Xt ) .LE. ERRBND( *, nwise_i, bnd_i ) and
-*> ERRBND( *, nwise_i, bnd_i ) .LE. MAX(SQRT(N),10) * EPS.
-*> If these conditions are met, the test ratio is set to be
-*> ERRBND( *, nwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
-*> B: For this case, CGESVXX should just return 1. If it is less than
-*> one, treat it the same as in 1A. Otherwise it fails. (Set test
-*> ratio to ERRBND( *, nwise_i, bnd_i ) * THRESH?)
+*> 2. Componentwise guaranteed forward error bound.
+*> A: norm ( abs( Xc(j) - Xt(j) ) ) / norm (Xt(j)) .LE. ERRBND( *, cwise_i, bnd_i )
+*> for all j .AND. ERRBND( *, cwise_i, bnd_i ) .LE. MAX(SQRT(N), 10) * EPS.
+*> If these conditions are met, the test ratio is set to be
+*> ERRBND( *, cwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
+*> B: Same as normwise test ratio.
*>
-*> 2. Componentwise guaranteed forward error bound.
-*> A: norm ( abs( Xc(j) - Xt(j) ) ) / norm (Xt(j)) .LE. ERRBND( *, cwise_i, bnd_i )
-*> for all j .AND. ERRBND( *, cwise_i, bnd_i ) .LE. MAX(SQRT(N), 10) * EPS.
-*> If these conditions are met, the test ratio is set to be
-*> ERRBND( *, cwise_i, bnd_i ) / MAX(SQRT(N), 10). Otherwise it is 1/EPS.
-*> B: Same as normwise test ratio.
+*> 3. Backwards error.
+*> A: The test ratio is set to BERR/EPS.
+*> B: Same test ratio.
*>
-*> 3. Backwards error.
-*> A: The test ratio is set to BERR/EPS.
-*> B: Same test ratio.
+*> 4. Reciprocal condition number.
+*> A: A condition number is computed with Xt and compared with the one
+*> returned from CGESVXX. Let RCONDc be the RCOND returned by CGESVXX
+*> and RCONDt be the RCOND from the truth value. Test ratio is set to
+*> MAX(RCONDc/RCONDt, RCONDt/RCONDc).
+*> B: Test ratio is set to 1 / (EPS * RCONDc).
*>
-*> 4. Reciprocal condition number.
-*> A: A condition number is computed with Xt and compared with the one
-*> returned from CGESVXX. Let RCONDc be the RCOND returned by CGESVXX
-*> and RCONDt be the RCOND from the truth value. Test ratio is set to
-*> MAX(RCONDc/RCONDt, RCONDt/RCONDc).
-*> B: Test ratio is set to 1 / (EPS * RCONDc).
+*> 5. Reciprocal normwise condition number.
+*> A: The test ratio is set to
+*> MAX(ERRBND( *, nwise_i, cond_i ) / NCOND, NCOND / ERRBND( *, nwise_i, cond_i )).
+*> B: Test ratio is set to 1 / (EPS * ERRBND( *, nwise_i, cond_i )).
*>
-*> 5. Reciprocal normwise condition number.
-*> A: The test ratio is set to
-*> MAX(ERRBND( *, nwise_i, cond_i ) / NCOND, NCOND / ERRBND( *, nwise_i, cond_i )).
-*> B: Test ratio is set to 1 / (EPS * ERRBND( *, nwise_i, cond_i )).
+*> 6. Reciprocal componentwise condition number.
+*> A: Test ratio is set to
+*> MAX(ERRBND( *, cwise_i, cond_i ) / CCOND, CCOND / ERRBND( *, cwise_i, cond_i )).
+*> B: Test ratio is set to 1 / (EPS * ERRBND( *, cwise_i, cond_i )).
*>
-*> 6. Reciprocal componentwise condition number.
-*> A: Test ratio is set to
-*> MAX(ERRBND( *, cwise_i, cond_i ) / CCOND, CCOND / ERRBND( *, cwise_i, cond_i )).
-*> B: Test ratio is set to 1 / (EPS * ERRBND( *, cwise_i, cond_i )).
+*> .. Parameters ..
+*> NMAX is determined by the largest number in the inverse of the hilbert
+*> matrix. Precision is exhausted when the largest entry in it is greater
+*> than 2 to the power of the number of bits in the fraction of the data
+*> type used plus one, which is 24 for single precision.
+*> NMAX should be 6 for single and 11 for double.
+*> \endverbatim
*>
-*> .. Parameters ..
-*> NMAX is determined by the largest number in the inverse of the hilbert
-*> matrix. Precision is exhausted when the largest entry in it is greater
-*> than 2 to the power of the number of bits in the fraction of the data
-*> type used plus one, which is 24 for single precision.
-*> NMAX should be 6 for single and 11 for double.
+*
+* Authors
+* =======
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup complex16_lin
+*
+* =====================================================================
+ SUBROUTINE ZEBCHVXX( THRESH, PATH )
+ IMPLICIT NONE
+* .. Scalar Arguments ..
+ DOUBLE PRECISION THRESH
+ CHARACTER*3 PATH
INTEGER NMAX, NPARAMS, NERRBND, NTESTS, KL, KU
PARAMETER (NMAX = 10, NPARAMS = 2, NERRBND = 3,
$ NTESTS = 6)
-*> .. Local Scalars ..
+* .. Local Scalars ..
INTEGER N, NRHS, INFO, I ,J, k, NFAIL, LDA,
$ N_AUX_TESTS, LDAB, LDAFB
CHARACTER FACT, TRANS, UPLO, EQUED
$ CONDTHRESH, ERRTHRESH
COMPLEX*16 ZDUM
-*> .. Local Arrays ..
+* .. Local Arrays ..
DOUBLE PRECISION TSTRAT(NTESTS), RINV(NMAX), PARAMS(NPARAMS),
$ S(NMAX),R(NMAX),C(NMAX),RWORK(3*NMAX),
$ DIFF(NMAX, NMAX),
$ ABCOPY( (NMAX-1)+(NMAX-1)+1, NMAX ),
$ AFB( 2*(NMAX-1)+(NMAX-1)+1, NMAX )
-*> .. External Functions ..
+* .. External Functions ..
DOUBLE PRECISION DLAMCH
-*> .. External Subroutines ..
+* .. External Subroutines ..
EXTERNAL ZLAHILB, ZGESVXX, ZPOSVXX, ZSYSVXX,
$ ZGBSVXX, ZLACPY, LSAMEN
LOGICAL LSAMEN
-*> .. Intrinsic Functions ..
+* .. Intrinsic Functions ..
INTRINSIC SQRT, MAX, ABS, DBLE, DIMAG
-*> .. Statement Functions ..
+* .. Statement Functions ..
DOUBLE PRECISION CABS1
-*> .. Statement Function Definitions ..
+* .. Statement Function Definitions ..
CABS1( ZDUM ) = ABS( DBLE( ZDUM ) ) + ABS( DIMAG( ZDUM ) )
-*> .. Parameters ..
+* .. Parameters ..
INTEGER NWISE_I, CWISE_I
PARAMETER (NWISE_I = 1, CWISE_I = 1)
INTEGER BND_I, COND_I
PARAMETER (BND_I = 2, COND_I = 3)
-*> Create the loop to test out the Hilbert matrices
+* Create the loop to test out the Hilbert matrices
FACT = 'E'
UPLO = 'U'
LDAFB = 2*(NMAX-1)+(NMAX-1)+1
C2 = PATH( 2: 3 )
-*> Main loop to test the different Hilbert Matrices.
+* Main loop to test the different Hilbert Matrices.
printed_guide = .false.
NRHS = n
M = MAX(SQRT(DBLE(N)), 10.0D+0)
-*> Generate the Hilbert matrix, its inverse, and the
-*> right hand side, all scaled by the LCM(1,..,2N-1).
+* Generate the Hilbert matrix, its inverse, and the
+* right hand side, all scaled by the LCM(1,..,2N-1).
CALL ZLAHILB(N, N, A, LDA, INVHILB, LDA, B,
$ LDA, WORK, INFO, PATH)
-*> Copy A into ACOPY.
+* Copy A into ACOPY.
CALL ZLACPY('ALL', N, N, A, NMAX, ACOPY, NMAX)
-*> Store A in band format for GB tests
+* Store A in band format for GB tests
DO J = 1, N
DO I = 1, KL+KU+1
AB( I, J ) = (0.0D+0,0.0D+0)
END DO
END DO
-*> Copy AB into ABCOPY.
+* Copy AB into ABCOPY.
DO J = 1, N
DO I = 1, KL+KU+1
ABCOPY( I, J ) = (0.0D+0,0.0D+0)
END DO
CALL ZLACPY('ALL', KL+KU+1, N, AB, LDAB, ABCOPY, LDAB)
-*> Call Z**SVXX with default PARAMS and N_ERR_BND = 3.
+* Call Z**SVXX with default PARAMS and N_ERR_BND = 3.
IF ( LSAMEN( 2, C2, 'SY' ) ) THEN
CALL ZSYSVXX(FACT, UPLO, N, NRHS, ACOPY, LDA, AF, LDA,
$ IPIV, EQUED, S, B, LDA, X, LDA, ORCOND,
END IF
END IF
-*> Calculating the difference between Z**SVXX's X and the true X.
+* Calculating the difference between Z**SVXX's X and the true X.
DO I = 1,N
DO J =1,NRHS
DIFF(I,J) = X(I,J) - INVHILB(I,J)
END DO
END DO
-*> Calculating the RCOND
+* Calculating the RCOND
RNORM = 0
RINORM = 0
IF ( LSAMEN( 2, C2, 'PO' ) .OR. LSAMEN( 2, C2, 'SY' ) .OR.
RNORM = RNORM / CABS1(A(1, 1))
RCOND = 1.0D+0/(RNORM * RINORM)
-*> Calculating the R for normwise rcond.
+* Calculating the R for normwise rcond.
DO I = 1, N
RINV(I) = 0.0D+0
END DO
END DO
END DO
-*> Calculating the Normwise rcond.
+* Calculating the Normwise rcond.
RINORM = 0.0D+0
DO I = 1, N
SUMRI = 0.0D+0
c$$$ WRITE(*,*) 'Raw error estimate: ',ERRBND(NRHS,cwise_i,rawbnd_i)
c$$$ print *, 'Info: ', info
c$$$ WRITE(*,*)
-*> WRITE(*,*) 'TSTRAT: ',TSTRAT
+* WRITE(*,*) 'TSTRAT: ',TSTRAT
END DO
9998 FORMAT( ' Z', A2, 'SVXX: ', I6, ' out of ', I6,
$ ' tests failed to pass the threshold' )
9997 FORMAT( ' Z', A2, 'SVXX passed the tests of error bounds' )
-*> Test ratios.
+* Test ratios.
9996 FORMAT( 3X, I2, ': Normwise guaranteed forward error', / 5X,
$ 'Guaranteed case: if norm ( abs( Xc - Xt )',
$ ' / norm ( Xt ) .LE. ERRBND( *, nwise_i, bnd_i ), then',
$ ', ORCOND = ', G12.5, ', real RCOND = ', G12.5 )
END
-*>\endverbatim
-*
-* Arguments
-* =========
-*
-*
-* Authors
-* =======
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16_lin
-*
-* =====================================================================
- SUBROUTINE ZEBCHVXX( THRESH, PATH )
-*
-* -- LAPACK test routine (input) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- DOUBLE PRECISION THRESH
- CHARACTER*3 PATH
-*
*> \verbatim
*> C is COMPLEX*16 array, dimension (LDC,N)
*> \endverbatim
+*>
+*> \param[in] LDC
*> \verbatim
-*> LDC (integer) INTEGER
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,N).
*> \endverbatim
*>
*> \verbatim
*> C is COMPLEX*16 array, dimension (LDC,N)
*> \endverbatim
+*>
+*> \param[in] LDC
*> \verbatim
-*> LDC (integer) INTEGER
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,N).
*> \endverbatim
*>
* SUBROUTINE ZLAHILB(N, NRHS, A, LDA, X, LDX, B, LDB, WORK,
* INFO, PATH)
*
-* ! .. Scalar Arguments ..
+* .. Scalar Arguments ..
* INTEGER N, NRHS, LDA, LDX, LDB, INFO
-* ! .. Array Arguments ..
+* .. Array Arguments ..
* DOUBLE PRECISION WORK(N)
* COMPLEX*16 A(LDA,N), X(LDX, NRHS), B(LDB, NRHS)
* CHARACTER*3 PATH
-* ! ..
-* !
+* ..
+*
* Purpose
* =======
*
*>\details \b Purpose:
*>\verbatim
-! Purpose
-! =======
-!
-! ZLAHILB generates an N by N scaled Hilbert matrix in A along with
-! NRHS right-hand sides in B and solutions in X such that A*X=B.
-!
-! The Hilbert matrix is scaled by M = LCM(1, 2, ..., 2*N-1) so that all
-! entries are integers. The right-hand sides are the first NRHS
-! columns of M * the identity matrix, and the solutions are the
-! first NRHS columns of the inverse Hilbert matrix.
-!
-! The condition number of the Hilbert matrix grows exponentially with
-! its size, roughly as O(e ** (3.5*N)). Additionally, the inverse
-! Hilbert matrices beyond a relatively small dimension cannot be
-! generated exactly without extra precision. Precision is exhausted
-! when the largest entry in the inverse Hilbert matrix is greater than
-! 2 to the power of the number of bits in the fraction of the data type
-! used plus one, which is 24 for single precision.
-!
-! In single, the generated solution is exact for N <= 6 and has
-! small componentwise error for 7 <= N <= 11.
-!
+*>
+*> ZLAHILB generates an N by N scaled Hilbert matrix in A along with
+*> NRHS right-hand sides in B and solutions in X such that A*X=B.
+*>
+*> The Hilbert matrix is scaled by M = LCM(1, 2, ..., 2*N-1) so that all
+*> entries are integers. The right-hand sides are the first NRHS
+*> columns of M * the identity matrix, and the solutions are the
+*> first NRHS columns of the inverse Hilbert matrix.
+*>
+*> The condition number of the Hilbert matrix grows exponentially with
+*> its size, roughly as O(e ** (3.5*N)). Additionally, the inverse
+*> Hilbert matrices beyond a relatively small dimension cannot be
+*> generated exactly without extra precision. Precision is exhausted
+*> when the largest entry in the inverse Hilbert matrix is greater than
+*> 2 to the power of the number of bits in the fraction of the data type
+*> used plus one, which is 24 for single precision.
+*>
+*> In single, the generated solution is exact for N <= 6 and has
+*> small componentwise error for 7 <= N <= 11.
+*>
*>\endverbatim
*
* Arguments
* =========
*
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
+*> The dimension of the matrix A.
+*> \endverbatim
+*>
+*> \param[in] NRHS
+*> \verbatim
+*> NRHS is NRHS
+*> The requested number of right-hand sides.
+*> \endverbatim
+*>
+*> \param[out] A
+*> \verbatim
+*> A is COMPLEX array, dimension (LDA, N)
+*> The generated scaled Hilbert matrix.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= N.
+*> \endverbatim
+*>
+*> \param[out] X
+*> \verbatim
+*> X is COMPLEX array, dimension (LDX, NRHS)
+*> The generated exact solutions. Currently, the first NRHS
+*> columns of the inverse Hilbert matrix.
+*> \endverbatim
+*>
+*> \param[in] LDX
+*> \verbatim
+*> LDX is INTEGER
+*> The leading dimension of the array X. LDX >= N.
+*> \endverbatim
+*>
+*> \param[out] B
+*> \verbatim
+*> B is REAL array, dimension (LDB, NRHS)
+*> The generated right-hand sides. Currently, the first NRHS
+*> columns of LCM(1, 2, ..., 2*N-1) * the identity matrix.
+*> \endverbatim
+*>
+*> \param[in] LDB
+*> \verbatim
+*> LDB is INTEGER
+*> The leading dimension of the array B. LDB >= N.
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is REAL array, dimension (N)
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit
+*> = 1: N is too large; the data is still generated but may not
+*> be not exact.
+*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> \endverbatim
+*>
+*> \param[in] PATH
+*> \verbatim
+*> PATH is CHARACTER*3
+*> The LAPACK path name.
+*> \endverbatim
+*>
*
* Authors
* =======
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
* November 2011
*
-! .. Scalar Arguments ..
+* .. Scalar Arguments ..
INTEGER N, NRHS, LDA, LDX, LDB, INFO
-! .. Array Arguments ..
+* .. Array Arguments ..
DOUBLE PRECISION WORK(N)
COMPLEX*16 A(LDA,N), X(LDX, NRHS), B(LDB, NRHS)
CHARACTER*3 PATH
-! ..
-!
-! =====================================================================
-
-! .. Local Scalars ..
+* ..
+*
+* =====================================================================
+* .. Local Scalars ..
INTEGER TM, TI, R
INTEGER M
INTEGER I, J
COMPLEX*16 TMP
CHARACTER*2 C2
-
-! .. Parameters ..
-! NMAX_EXACT the largest dimension where the generated data is
-! exact.
-! NMAX_APPROX the largest dimension where the generated data has
-! a small componentwise relative error.
-! ??? complex uses how many bits ???
+* ..
+* .. Parameters ..
+* NMAX_EXACT the largest dimension where the generated data is
+* exact.
+* NMAX_APPROX the largest dimension where the generated data has
+* a small componentwise relative error.
+* ??? complex uses how many bits ???
INTEGER NMAX_EXACT, NMAX_APPROX, SIZE_D
PARAMETER (NMAX_EXACT = 6, NMAX_APPROX = 11, SIZE_D = 8)
-
-! d's are generated from random permuation of those eight elements.
+*
+* d's are generated from random permuation of those eight elements.
COMPLEX*16 d1(8), d2(8), invd1(8), invd2(8)
DATA D1 /(-1,0),(0,1),(-1,-1),(0,-1),(1,0),(-1,1),(1,1),(1,-1)/
DATA D2 /(-1,0),(0,-1),(-1,1),(0,1),(1,0),(-1,-1),(1,-1),(1,1)/
$ (-.5,-.5),(.5,-.5),(.5,.5)/
DATA INVD2 /(-1,0),(0,1),(-.5,-.5),(0,-1),(1,0),
$ (-.5,.5),(.5,.5),(.5,-.5)/
-! ..
-! .. External Functions
+* ..
+* .. External Functions
EXTERNAL ZLASET, LSAMEN
INTRINSIC DBLE
LOGICAL LSAMEN
-! ..
-! .. Executable Statements ..
+* ..
+* .. Executable Statements ..
C2 = PATH( 2: 3 )
-!
-! Test the input arguments
-!
+*
+* Test the input arguments
+*
INFO = 0
IF (N .LT. 0 .OR. N .GT. NMAX_APPROX) THEN
INFO = -1
IF (N .GT. NMAX_EXACT) THEN
INFO = 1
END IF
-
-! Compute M = the LCM of the integers [1, 2*N-1]. The largest
-! reasonable N is small enough that integers suffice (up to N = 11).
+*
+* Compute M = the LCM of the integers [1, 2*N-1]. The largest
+* reasonable N is small enough that integers suffice (up to N = 11).
M = 1
DO I = 2, (2*N-1)
TM = M
END DO
M = (M / TI) * I
END DO
-
-! Generate the scaled Hilbert matrix in A
-! If we are testing SY routines, take D1_i = D2_i, else, D1_i = D2_i*
+*
+* Generate the scaled Hilbert matrix in A
+* If we are testing SY routines, take D1_i = D2_i, else, D1_i = D2_i*
IF ( LSAMEN( 2, C2, 'SY' ) ) THEN
DO J = 1, N
DO I = 1, N
END DO
END DO
END IF
-
-! Generate matrix B as simply the first NRHS columns of M * the
-! identity.
+*
+* Generate matrix B as simply the first NRHS columns of M * the
+* identity.
TMP = DBLE(M)
CALL ZLASET('Full', N, NRHS, (0.0D+0,0.0D+0), TMP, B, LDB)
-
-! Generate the true solutions in X. Because B = the first NRHS
-! columns of M*I, the true solutions are just the first NRHS columns
-! of the inverse Hilbert matrix.
+*
+* Generate the true solutions in X. Because B = the first NRHS
+* columns of M*I, the true solutions are just the first NRHS columns
+* of the inverse Hilbert matrix.
WORK(1) = N
DO J = 2, N
WORK(J) = ( ( (WORK(J-1)/(J-1)) * (J-1 - N) ) /(J-1) )
$ * (N +J -1)
END DO
-
-! If we are testing SY routines, take D1_i = D2_i, else, D1_i = D2_i*
+*
+* If we are testing SY routines, take D1_i = D2_i, else, D1_i = D2_i*
IF ( LSAMEN( 2, C2, 'SY' ) ) THEN
DO J = 1, NRHS
DO I = 1, N
*> or the number of sub-diagonals if UPLO = 'L'. KD >= 0.
*> \endverbatim
*>
+*> \param[in] NRHS
+*> \verbatim
+*> NRHS is INTEGER
+*> The number of right hand sides. NRHS >= 0.
+*> \endverbatim
+*>
*> \param[in] A
*> \verbatim
*> A is COMPLEX*16 array, dimension (LDA,N)
*> If UPLO = 'U', norm(U'*U - A) / ( N * norm(A) * EPS )
*> \endverbatim
*>
+*> \param[in] RANK
+*> \verbatim
+*> RANK is INTEGER
+*> number of nonzero singular values of A.
+*> \endverbatim
+*>
*
* Authors
* =======
*> \verbatim
*> C is COMPLEX*16 array, dimension (LDC,N)
*> \endverbatim
+*>
+*> \param[in] LDC
*> \verbatim
-*> LDC (integer) INTEGER
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,N).
*> \endverbatim
*>
*>
*> \param[out] WORK
*> \verbatim
-*> WORK is COMPLEX*16 array, dimension (LDWORK,N)
+*> WORK is COMPLEX*16 array, dimension (LDW,N)
*> \endverbatim
*>
-*> \param[in] LDWORK
+*> \param[in] LDW
*> \verbatim
-*> LDWORK is INTEGER
-*> The leading dimension of the array WORK. LDWORK >= max(1,N).
+*> LDW is INTEGER
+*> The leading dimension of the array WORK. LDW >= max(1,N).
*> \endverbatim
*>
*> \param[out] RWORK
*> \verbatim
*> C is COMPLEX*16 array, dimension (LDC,N)
*> \endverbatim
+*>
+*> \param[in] LDC
*> \verbatim
-*> LDC (integer) INTEGER
+*> LDC is INTEGER
*> The leading dimension of the array C. LDC >= max(1,N).
*> \endverbatim
*>
*> < 0: if INFO = -i, the i-th argument had an illegal value
*> \endverbatim
*>
+*> \param[in] PATH
+*> \verbatim
+*> PATH is CHARACTER*3
+*> The LAPACK path name.
+*> \endverbatim
+*>
*
* Authors
* =======
*> < 0: if INFO = -i, the i-th argument had an illegal value
*> \endverbatim
*>
+*> \param[in] PATH
+*> \verbatim
+*> PATH is CHARACTER*3
+*> The LAPACK path name.
+*> \endverbatim
+*>
*
* Authors
* =======
*> identity matrix before applying U.
*> INIT = 'N' No initialization. Apply U to the
*> input matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> INIT = 'I' may be used to generate square (i.e., unitary)
*> or rectangular orthogonal matrices (orthogonality being
*> in the sense of ZDOTC):
-*> \endverbatim
-*> \verbatim
+*>
*> For square matrices, M=N, and SIDE many be either 'L' or
*> 'R'; the rows will be orthogonal to each other, as will the
*> columns.
*> For matrices where M > N, just use the previous
*> explanation, interchanging 'L' and 'R' and "rows" and
*> "columns".
-*> \endverbatim
-*> \verbatim
+*>
*> Not modified.
*> \endverbatim
*>
*> N is INTEGER
*> Number of columns of A. Not modified.
*> \endverbatim
+*>
+*> \param[in,out] A
*> \verbatim
-*> A COMPLEX*16 array, dimension ( LDA, N )
+*> A is COMPLEX*16 array, dimension ( LDA, N )
*> Input and output array. Overwritten by U A ( if SIDE = 'L' )
*> or by A U ( if SIDE = 'R' )
*> or by U A U* ( if SIDE = 'C')