# If a relative path is entered, it will be relative to the location
# where doxygen was started. If left blank the current directory will be used.
-OUTPUT_DIRECTORY = explore-html
+OUTPUT_DIRECTORY = DOCS
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
# 4096 sub-directories (in 2 levels) under the output directory of each output
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `html' will be used as the default path.
-HTML_OUTPUT = html
+HTML_OUTPUT = explore-html
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
# visible. Older versions of IE do not have SVG support.
-INTERACTIVE_SVG = NO
+INTERACTIVE_SVG = YES
# The tag DOT_PATH can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
# If a relative path is entered, it will be relative to the location
# where doxygen was started. If left blank the current directory will be used.
-OUTPUT_DIRECTORY =
+OUTPUT_DIRECTORY = DOCS
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
# 4096 sub-directories (in 2 levels) under the output directory of each output
# source files, where putting all generated files in the same directory would
# otherwise cause performance problems for the file system.
-CREATE_SUBDIRS = YES
+CREATE_SUBDIRS = NO
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
-INPUT = ../SRC ../INSTALL
+INPUT = SRC INSTALL BLAS/SRC
# This tag can be used to specify the character encoding of the source files
# 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
*> \verbatim
*> LRWORK is INTEGER
*> The dimension of the array RWORK. LRWORK >= MAX(1,8*Q).
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal size of the RWORK array,
*> returns this value as the first entry of the work array, and
*> > 0: if CBBCSD did not converge, INFO specifies the number
*> of nonzero entries in PHI, and B11D, B11E, etc.,
*> contain the partially reduced matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> Reference
*> =========
-*> \endverbatim
-*> \verbatim
+*>
*> [1] Brian D. Sutton. Computing the complete CS decomposition. Numer.
*> Algorithms, 50(1):33-65, 2009.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> TOLMUL REAL, default = MAX(10,MIN(100,EPS**(-1/8)))
*> TOLMUL controls the convergence criterion of the QR loop.
*> Angles THETA(i), PHI(i) are rounded to 0 or PI/2 when they
*> elements of a bidiagonal matrix which is orthogonally
*> similar to the input matrix B; if INFO = i, i
*> elements of E have not converged to zero.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> TOLMUL REAL, default = max(10,min(100,EPS**(-1/8)))
*> TOLMUL controls the convergence criterion of the QR loop.
*> If it is positive, TOLMUL*EPS is the desired relative
*> Default is to lose at either one eighth or 2 of the
*> available decimal digits in each computed singular value
*> (whichever is smaller).
-*> \endverbatim
-*> \verbatim
+*>
*> MAXITR INTEGER, default = 6
*> MAXITR controls the maximum number of passes of the
*> algorithm through its inner loop. The algorithms stops
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(KU+1+i-j,j) = A(i,j) for max(1,j-KU)<=i<=min(N,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'F' and EQUED is not 'N', then A must have been
*> equilibrated by the scaling factors in R and/or C. AB is not
*> modified if FACT = 'F' or 'N', or if FACT = 'E' and
*> EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> and the multipliers used during the factorization are stored
*> in rows KL+KU+2 to 2*KL+KU+1. If EQUED .ne. 'N', then AFB is
*> the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFB is an output argument and on exit
*> returns details of the LU factorization of A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AFB is an output argument and on exit
*> returns details of the LU factorization of the equilibrated
*> matrix A (see the description of AB for the form of the
*> contains the pivot indices from the factorization A = L*U
*> as computed by CGBTRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = L*U
*> of the equilibrated matrix A.
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(KU+1+i-j,j) = A(i,j) for max(1,j-KU)<=i<=min(N,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'F' and EQUED is not 'N', then AB must have been
*> equilibrated by the scaling factors in R and/or C. AB is not
*> modified if FACT = 'F' or 'N', or if FACT = 'E' and
*> EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> and the multipliers used during the factorization are stored
*> in rows KL+KU+2 to 2*KL+KU+1. If EQUED .ne. 'N', then AFB is
*> the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the equilibrated matrix A (see the description of A for
*> contains the pivot indices from the factorization A = P*L*U
*> as computed by SGETRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the equilibrated matrix A.
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(kl+ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, details of the factorization: U is stored as an
*> upper triangular band matrix with KL+KU superdiagonals in
*> rows 1 to KL+KU+1, and the multipliers used during the
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(kl+ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, details of the factorization: U is stored as an
*> upper triangular band matrix with KL+KU superdiagonals in
*> rows 1 to KL+KU+1, and the multipliers used during the
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,2*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
*> that an error is only returned if LWORK < max(1,2*N), but if
*> SENSE = 'E' or 'V' or 'B' this may not be large enough.
*> For good performance, LWORK must generally be larger.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates upper bound on the optimal size of the
*> array WORK, returns this value as the first entry of the WORK
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,2*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
*> to make the rows and columns of A more equal in
*> norm. Do not permute;
*> = 'B': Both diagonally scale and permute A.
-*> \endverbatim
-*> \verbatim
+*>
*> Computed reciprocal condition numbers will be for the matrix
*> after balancing and/or permuting. Permuting does not change
*> condition numbers (in exact arithmetic), but balancing does.
*> = 'E': Computed for eigenvalues only;
*> = 'V': Computed for right eigenvectors only;
*> = 'B': Computed for eigenvalues and right eigenvectors.
-*> \endverbatim
-*> \verbatim
+*>
*> If SENSE = 'E' or 'B', both left and right eigenvectors
*> must also be computed (JOBVL = 'V' and JOBVR = 'V').
*> \endverbatim
*> LWORK >= max(1,2*N), and if SENSE = 'V' or 'B',
*> LWORK >= N*N+2*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 non-negative real scalars beta that define the
*> eigenvalues of GNEP. BETA(j) = T(j,j), the diagonal element
*> of the triangular factor T.
-*> \endverbatim
-*> \verbatim
+*>
*> Together, the quantities alpha = ALPHA(j) and beta = BETA(j)
*> represent the j-th eigenvalue of the matrix pair (A,B), in
*> one of the forms lambda = alpha/beta or mu = beta/alpha.
*> blocksizes (for CGEQRF, CUNMQR, and CUNGQR.) Then compute:
*> NB -- MAX of the blocksizes for CGEQRF, CUNMQR, and CUNGQR;
*> the optimal LWORK is N*(NB+1).
-*> \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
*> blocksizes (for CGEQRF, CUNMQR, and CUNGQR.) Then compute:
*> NB -- MAX of the blocksizes for CGEQRF, CUNMQR, and CUNGQR;
*> The optimal LWORK is MAX( 2*N, N*(NB+1) ).
-*> \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 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
*> 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
*> For optimal performance,
*> LWORK >= max( 1, MN + max( MN, NRHS )*NB ).
*> where MN = min(M,N) and NB is the optimum block size.
-*> \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
*> 2 * M + M * NRHS
*> if M is less than N, the code will execute correctly.
*> For good performance, LWORK should generally be larger.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the array WORK and the
*> minimum sizes of the arrays RWORK and IWORK, and returns
*> The dimension of the array WORK. LWORK >= 1, and also:
*> LWORK >= 2*min(M,N) + max(M,N,NRHS)
*> For good performance, LWORK should 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
*> where NB is an upper bound on the blocksize returned
*> by ILAENV for the routines CGEQP3, CTZRZF, CTZRQF, CUNMQR,
*> and CUNMRZ.
-*> \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 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
*> The dimension of the array WORK. LWORK >= N+1.
*> For optimal performance LWORK >= ( N+1 )*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
*> 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
*> 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
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> if JOBZ = 'S' or 'A',
*> LWORK >= min(M,N)*min(M,N)+2*min(M,N)+max(M,N).
*> For good performance, LWORK should generally be larger.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, a workspace query is assumed. The optimal
*> size for the WORK array is calculated and stored in WORK(1),
*> and no other work except argument checking is performed.
*> vectors) are overwritten on the array A;
*> = 'N': no rows of V**H (no right singular vectors) are
*> computed.
-*> \endverbatim
-*> \verbatim
+*>
*> JOBVT and JOBU cannot both be 'O'.
*> \endverbatim
*>
*> The dimension of the array WORK.
*> LWORK >= MAX(1,2*MIN(M,N)+MAX(M,N)).
*> For good performance, LWORK should 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
*> not 'N', then A must have been equilibrated by the scaling
*> factors in R and/or C. A is not modified if FACT = 'F' or
*> 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> contains the factors L and U from the factorization
*> A = P*L*U as computed by CGETRF. If EQUED .ne. 'N', then
*> AF is the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the equilibrated matrix A (see the description of A for
*> contains the pivot indices from the factorization A = P*L*U
*> as computed by CGETRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the equilibrated matrix A.
*> not 'N', then A must have been equilibrated by the scaling
*> factors in R and/or C. A is not modified if FACT = 'F' or
*> 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> contains the factors L and U from the factorization
*> A = P*L*U as computed by CGETRF. If EQUED .ne. 'N', then
*> AF is the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the equilibrated matrix A (see the description of A for
*> contains the pivot indices from the factorization A = P*L*U
*> as computed by CGETRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the equilibrated matrix A.
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> The dimension of the array WORK. LWORK >= max(1,N).
*> For optimal performance LWORK >= N*NB, where NB is
*> the optimal blocksize returned by ILAENV.
-*> \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
*> to the top left of the Schur form.
*> An eigenvalue ALPHA(j)/BETA(j) is selected if
*> SELCTG(ALPHA(j),BETA(j)) is true.
-*> \endverbatim
-*> \verbatim
+*>
*> Note that a selected complex eigenvalue may no longer satisfy
*> SELCTG(ALPHA(j),BETA(j)) = .TRUE. after ordering, since
*> ordering may change the value of complex eigenvalues
*> generalized eigenvalues. ALPHA(j), j=1,...,N and BETA(j),
*> j=1,...,N are the diagonals of the complex Schur form (A,B)
*> output by CGGES. The BETA(j) will be non-negative real.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHA(j)/BETA(j) may easily over- or
*> underflow, and BETA(j) may even be zero. Thus, the user
*> should avoid naively computing the ratio alpha/beta.
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,2*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
*> generalized eigenvalues. ALPHA(j) and BETA(j),j=1,...,N are
*> the diagonals of the complex Schur form (S,T). BETA(j) will
*> be non-negative real.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHA(j)/BETA(j) may easily over- or
*> underflow, and BETA(j) may even be zero. Thus, the user
*> should avoid naively computing the ratio alpha/beta.
*> Note also that an error is only returned if
*> LWORK < MAX(1,2*N), but if SENSE = 'E' or 'V' or 'B' this may
*> not be large enough.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the bound on the optimal size of the WORK
*> array and the minimum size of the IWORK array, returns these
*> The dimension of the array WORK.
*> If SENSE = 'N' or N = 0, LIWORK >= 1, otherwise
*> LIWORK >= N+2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the bound on the optimal size of the
*> WORK array and the minimum size of the IWORK array, returns
*> BETA is COMPLEX array, dimension (N)
*> On exit, ALPHA(j)/BETA(j), j=1,...,N, will be the
*> generalized eigenvalues.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHA(j)/BETA(j) may easily over- or
*> underflow, and BETA(j) may even be zero. Thus, the user
*> should avoid naively computing the ratio alpha/beta.
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,2*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
*> BETA is COMPLEX array, dimension (N)
*> On exit, ALPHA(j)/BETA(j), j=1,...,N, will be the generalized
*> eigenvalues.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotient ALPHA(j)/BETA(j) ) may easily over- or
*> underflow, and BETA(j) may even be zero. Thus, the user
*> should avoid naively computing the ratio ALPHA/BETA.
*> The dimension of the array WORK. LWORK >= max(1,2*N).
*> If SENSE = 'E', LWORK >= max(1,4*N).
*> If SENSE = 'V' or 'B', LWORK >= max(1,2*N*N+2*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
*> \param[out] Y
*> \verbatim
*> Y is COMPLEX array, dimension (P)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, X and Y are the solutions of the GLM problem.
*> \endverbatim
*>
*> For optimum performance, LWORK >= M+min(N,P)+max(N,P)*NB,
*> where NB is an upper bound for the optimal blocksizes for
*> CGEQRF, CGERQF, CUNMQR and CUNMRQ.
-*> \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
*> \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
*> For optimum performance LWORK >= P+min(M,N)+max(M,N)*NB,
*> where NB is an upper bound for the optimal blocksizes for
*> CGEQRF, CGERQF, CUNMQR and CUNMRQ.
-*> \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
*> \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.
*> \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,
*> < 0: if INFO = -i, the i-th argument had an illegal value.
*> > 0: if INFO = 1, the Jacobi-type procedure failed to
*> converge. For further details, see subroutine CTGSJA.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> TOLA REAL
*> TOLB REAL
*> TOLA and TOLB are the thresholds to determine the effective
*> \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
*> \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.
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> If FACT = 'F', then DLF is an input argument and on entry
*> contains the (n-1) multipliers that define the matrix L from
*> the LU factorization of A as computed by CGTTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DLF is an output argument and on exit
*> contains the (n-1) multipliers that define the matrix L from
*> the LU factorization of A.
*> If FACT = 'F', then DF is an input argument and on entry
*> contains the n diagonal elements of the upper triangular
*> matrix U from the LU factorization of A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DF is an output argument and on exit
*> contains the n diagonal elements of the upper triangular
*> matrix U from the LU factorization of A.
*> DUF is or output) COMPLEX array, dimension (N-1)
*> If FACT = 'F', then DUF is an input argument and on entry
*> contains the (n-1) elements of the first superdiagonal of U.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DUF is an output argument and on exit
*> contains the (n-1) elements of the first superdiagonal of U.
*> \endverbatim
*> If FACT = 'F', then DU2 is an input argument and on entry
*> contains the (n-2) elements of the second superdiagonal of
*> U.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DU2 is an output argument and on exit
*> contains the (n-2) elements of the second superdiagonal of
*> U.
*> If FACT = 'F', then IPIV is an input argument and on entry
*> contains the pivot indices from the LU factorization of A as
*> computed by CGTTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the LU factorization of A;
*> row i of the matrix was interchanged with row IPIV(i).
*> DL is COMPLEX array, dimension (N-1)
*> On entry, DL must contain the (n-1) sub-diagonal elements of
*> A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, DL is overwritten by the (n-1) multipliers that
*> define the matrix L from the LU factorization of A.
*> \endverbatim
*> \verbatim
*> D is COMPLEX array, dimension (N)
*> On entry, D must contain the diagonal elements of A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, D is overwritten by the n diagonal elements of the
*> upper triangular matrix U from the LU factorization of A.
*> \endverbatim
*> DU is COMPLEX array, dimension (N-1)
*> On entry, DU must contain the (n-1) super-diagonal elements
*> of A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, DU is overwritten by the (n-1) elements of the first
*> super-diagonal of U.
*> \endverbatim
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AB is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the first
*> superdiagonal and the diagonal of the tridiagonal matrix T
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AB is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the first
*> superdiagonal and the diagonal of the tridiagonal matrix T
*> If N <= 1, LWORK must be at least 1.
*> If JOBZ = 'N' and N > 1, LWORK must be at least N.
*> If JOBZ = 'V' and N > 1, LWORK must be at least 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> If JOBZ = 'N' and N > 1, LRWORK must be at least N.
*> If JOBZ = 'V' and N > 1, LRWORK must be at least
*> 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> The dimension of array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 1, LIWORK must be at least 3 + 5*N .
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AB is overwritten by values generated during the
*> reduction to tridiagonal form.
*> \endverbatim
*> 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 AB to tridiagonal form.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*SLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the transformed matrix X**H*A*X, stored in the same
*> format as A.
*> \endverbatim
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AB are destroyed.
*> \endverbatim
*>
*> as follows:
*> if UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
*> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the factor S from the split Cholesky factorization
*> B = S**H*S, as returned by CPBSTF.
*> \endverbatim
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AB are destroyed.
*> \endverbatim
*>
*> as follows:
*> if UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
*> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the factor S from the split Cholesky factorization
*> B = S**H*S, as returned by CPBSTF.
*> \endverbatim
*> If N <= 1, LWORK >= 1.
*> If JOBZ = 'N' and N > 1, LWORK >= N.
*> If JOBZ = 'V' and N > 1, LWORK >= 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> If N <= 1, LRWORK >= 1.
*> If JOBZ = 'N' and N > 1, LRWORK >= N.
*> If JOBZ = 'V' and N > 1, LRWORK >= 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> The dimension of array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK >= 1.
*> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AB are destroyed.
*> \endverbatim
*>
*> as follows:
*> if UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
*> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the factor S from the split Cholesky factorization
*> B = S**H*S, as returned by CPBSTF.
*> \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'.
*> \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.
*> 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 AP to tridiagonal form.
-*> \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
*> Q is COMPLEX array, dimension (LDQ,N)
*> On entry, if VECT = 'U', then Q must contain an N-by-N
*> matrix X; if VECT = 'N' or 'V', then Q need not be set.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit:
*> if VECT = 'V', Q contains the N-by-N unitary matrix Q;
*> if VECT = 'U', Q contains the product X*Q;
*> The length of the array WORK. LWORK >= max(1,2*N-1).
*> For optimal efficiency, LWORK >= (NB+1)*N,
*> where NB is the blocksize for CHETRD returned by ILAENV.
-*> \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
*> If N <= 1, LWORK must be at least 1.
*> If JOBZ = 'N' and N > 1, LWORK must be at least N + 1.
*> If JOBZ = 'V' and N > 1, LWORK must be at least 2*N + N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> If JOBZ = 'N' and N > 1, LRWORK must be at least N.
*> If JOBZ = 'V' and N > 1, LRWORK must be at least
*> 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> If N <= 1, LIWORK must be at least 1.
*> If JOBZ = 'N' and N > 1, LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 1, LIWORK must be at least 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> 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 A to tridiagonal form.
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
-*> \endverbatim
-*> \verbatim
+*>
*> If high relative accuracy is important, set ABSTOL to
*> SLAMCH( 'Safe minimum' ). Doing so will guarantee that
*> eigenvalues are computed to high relative accuracy when
*> For optimal efficiency, LWORK >= (NB+1)*N,
*> where NB is the max of the blocksize for CHETRD and for
*> CUNMTR as returned by ILAENV.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> \verbatim
*> LRWORK is INTEGER
*> The length of the array RWORK. LRWORK >= max(1,24*N).
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> \verbatim
*> LIWORK is INTEGER
*> The dimension of the array IWORK. LIWORK >= max(1,10*N).
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> 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 A to tridiagonal form.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*SLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> For optimal efficiency, LWORK >= (NB+1)*N,
*> where NB is the max of the blocksize for CHETRD and for
*> CUNMTR as returned by ILAENV.
-*> \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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the transformed matrix, stored in the
*> same format as A.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the transformed matrix, stored in the
*> same format as A.
*> \endverbatim
*> 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, if JOBZ = 'V', then if INFO = 0, A contains the
*> matrix Z of eigenvectors. The eigenvectors are normalized
*> as follows:
*> contains the 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.
*> The length of the array WORK. LWORK >= max(1,2*N-1).
*> For optimal efficiency, LWORK >= (NB+1)*N,
*> where NB is the blocksize for CHETRD returned by ILAENV.
-*> \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
*> 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, if JOBZ = 'V', then if INFO = 0, A contains the
*> matrix Z of eigenvectors. The eigenvectors are normalized
*> as follows:
*> 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.
*> If N <= 1, LWORK >= 1.
*> If JOBZ = 'N' and N > 1, LWORK >= N + 1.
*> If JOBZ = 'V' and N > 1, LWORK >= 2*N + N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> If N <= 1, LRWORK >= 1.
*> If JOBZ = 'N' and N > 1, LRWORK >= N.
*> If JOBZ = 'V' and N > 1, LRWORK >= 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> If N <= 1, LIWORK >= 1.
*> If JOBZ = 'N' and N > 1, LIWORK >= 1.
*> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> \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'.
*> \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.
*> The length of the array WORK. LWORK >= max(1,2*N).
*> For optimal efficiency, LWORK >= (NB+1)*N,
*> where NB is the blocksize for CHETRD returned by ILAENV.
-*> \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
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the block diagonal matrix D and the
*> multipliers used to obtain the factor U or L from the
*> factorization A = U*D*U**H or A = L*D*L**H as computed by
*> CHETRF.
*> for LWORK < N, TRS will be done with Level BLAS 2
*> for LWORK >= N, TRS will be done with Level BLAS 3
-*> \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
*> contains the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> A = U*D*U**H or A = L*D*L**H as computed by CHETRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) =
*> IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were
*> interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block structure
*> of D, as determined by CHETRF.
*> The length of WORK. LWORK >= max(1,2*N), and for best
*> performance, when FACT = 'N', LWORK >= max(1,2*N,N*NB), where
*> NB is the optimal blocksize for CHETRF.
-*> \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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> contains the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L from the factorization A =
*> U*D*U**T or A = L*D*L**T as computed by SSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L from the factorization A =
*> diagonal block. If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0,
*> then rows and columns k+1 and -IPIV(k) were interchanged
*> and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block
*> structure of D, as determined by CHETRF.
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> A is COMPLEX array, dimension (LDA,N)
*> On entry, the NB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by CSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L (see below for further details).
*> \endverbatim
*> 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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L (see below for further details).
*> \endverbatim
*> A is COMPLEX array, dimension (LDA,N)
*> On entry, the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by CHETRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (Hermitian) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> A is COMPLEX array, dimension (LDA,N)
*> On entry, the NB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by CHETRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> A is COMPLEX array, dimension (LDA,N)
*> On entry, the NNB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by CHETRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> The real non-negative scalars beta that define the
*> eigenvalues of GNEP. BETA(i) = P(i,i) in the generalized
*> Schur factorization.
-*> \endverbatim
-*> \verbatim
+*>
*> Together, the quantities alpha = ALPHA(j) and beta = BETA(j)
*> represent the j-th eigenvalue of the matrix pair (A,B), in
*> one of the forms lambda = alpha/beta or mu = beta/alpha.
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AP is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the diagonal
*> and first superdiagonal of the tridiagonal matrix T overwrite
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AP is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the diagonal
*> and first superdiagonal of the tridiagonal matrix T overwrite
*> If N <= 1, LWORK must be at least 1.
*> If JOBZ = 'N' and N > 1, LWORK must be at least N.
*> If JOBZ = 'V' and N > 1, LWORK must be at least 2*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the required sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> If JOBZ = 'N' and N > 1, LRWORK must be at least N.
*> If JOBZ = 'V' and N > 1, LRWORK must be at least
*> 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the required sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> The dimension of array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 1, LIWORK must be at least 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the required sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AP is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the diagonal
*> and first superdiagonal of the tridiagonal matrix T overwrite
*> 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 AP to tridiagonal form.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*SLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the transformed matrix, stored in the
*> same format as A.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AP are destroyed.
*> \endverbatim
*>
*> is stored in the array BP as follows:
*> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j;
*> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the triangular factor U or L from the Cholesky
*> factorization B = U**H*U or B = L*L**H, in the same storage
*> format as B.
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AP are destroyed.
*> \endverbatim
*>
*> is stored in the array BP as follows:
*> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j;
*> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the triangular factor U or L from the Cholesky
*> factorization B = U**H*U or B = L*L**H, in the same storage
*> format as B.
*> If N <= 1, LWORK >= 1.
*> If JOBZ = 'N' and N > 1, LWORK >= N.
*> If JOBZ = 'V' and N > 1, LWORK >= 2*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the required sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> If N <= 1, LRWORK >= 1.
*> If JOBZ = 'N' and N > 1, LRWORK >= N.
*> If JOBZ = 'V' and N > 1, LRWORK >= 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the required sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> The dimension of array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK >= 1.
*> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the required sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AP are destroyed.
*> \endverbatim
*>
*> is stored in the array BP as follows:
*> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j;
*> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the triangular factor U or L from the Cholesky
*> factorization B = U**H*U or B = L*L**H, in the same storage
*> format as B.
*> \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'.
*> \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.
*> 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 AP to tridiagonal form.
-*> \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**H*B*Z = I;
*> if ITYPE = 3, Z**H*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.
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> A = U*D*U**H or A = L*D*L**H as computed by CHPTRF, stored as
*> to obtain the factor U or L from the factorization
*> A = U*D*U**H or A = L*D*L**H as computed by CHPTRF, stored as
*> a packed triangular matrix in the same storage format as A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFP is an output argument and on exit
*> contains the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) =
*> IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were
*> interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block structure
*> of D, as determined by CHPTRF.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L, stored as a packed triangular
*> matrix overwriting A (see below for further details).
*> On entry, the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by CHPTRF,
*> stored as a packed triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (Hermitian) inverse of the original
*> matrix, stored as a packed triangular matrix. The j-th column
*> of inv(A) is stored in the array AP as follows:
*> \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 ZGEHRD
*> Schur form). If INFO = 0 and JOB = 'E', the contents of
*> H are unspecified on exit. (The output value of H when
*> INFO.GT.0 is given under the description of INFO below.)
-*> \endverbatim
-*> \verbatim
+*>
*> Unlike earlier versions of CHSEQR, this subroutine may
*> explicitly H(i,j) = 0 for i.GT.j and j = 1, 2, ... ILO-1
*> or j = IHI+1, IHI+2, ... N.
*> may be required for optimal performance. A workspace
*> query is recommended to determine the optimal workspace
*> size.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then CHSEQR does a workspace query.
*> In this case, CHSEQR checks the input parameters and
*> estimates the optimal workspace size for the given
*> 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 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 COMPZ = 'V', then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (final value of Z) = (initial value of Z)*U
-*> \endverbatim
-*> \verbatim
+*>
*> where U is the unitary 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 unitary matrix in (*) (regard-
*> less of the value of JOB.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and COMPZ = 'N', then Z is not
*> accessed.
*> \endverbatim
*> TRANS is INTEGER
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> BLAS_NO_TRANS y := alpha*abs(A)*abs(x) + beta*abs(y)
*> BLAS_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
*> BLAS_CONJ_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> On entry, INCY specifies the increment for the elements of
*> Y. INCY must not be zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> Level 2 Blas routine.
*> \endverbatim
*>
*> TRANS is INTEGER
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> BLAS_NO_TRANS y := alpha*abs(A)*abs(x) + beta*abs(y)
*> BLAS_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
*> BLAS_CONJ_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> On entry, INCY specifies the increment for the elements of
*> Y. INCY must not be zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> Level 2 Blas routine.
*> \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 = BLAS_UPPER Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = BLAS_LOWER Only the lower triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> 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
*> 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
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = BLAS_UPPER Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = BLAS_LOWER Only the lower triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> 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
*> Details of the interchanges and the block structure of D.
*> If UPLO = 'U', only the last KB elements of IPIV are set;
*> if UPLO = 'L', only the first KB elements are set.
-*> \endverbatim
-*> \verbatim
+*>
*> If IPIV(k) > 0, then rows and columns k and IPIV(k) were
*> interchanged and D(k,k) is a 1-by-1 diagonal block.
*> If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and
*> per eigenvalue; elements i+1:ihi of W contain
*> those eigenvalues which have been successfully
*> computed.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .FALSE., then on exit,
*> the remaining unconverged eigenvalues are the
*> eigenvalues of the upper Hessenberg matrix
*> rows and columns ILO thorugh INFO of the final,
*> output value of H.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .TRUE., then on exit
*> (*) (initial value of H)*U = U*(final value of H)
*> where U is an orthognal 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
*> (final value of Z) = (initial value of Z)*U
*> where U is the orthogonal matrix in (*)
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has row dimension N = NL + NR + 1,
*> and column dimension M = N + SQRE.
*> \endverbatim
*> UPLO is CHARACTER
*> On entry, UPLO specifies whether the RFP matrix A came from
*> an upper or lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' RFP A came from an upper triangular
*> matrix
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' RFP A came from a lower triangular
*> matrix
*> \endverbatim
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the equilibrated matrix, in the same storage format
*> as A. See EQUED for the form of the equilibrated matrix.
*> \endverbatim
*> by diag(C).
*> = 'B': Both row and column equilibration, i.e., A has been
*> replaced by diag(R) * A * diag(C).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if row or column scaling
*> should be done based on the ratio of the row or column scaling
*> factors. If ROWCND < THRESH, row scaling is done, and if
*> COLCND < THRESH, column scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if row scaling
*> should be done based on the absolute size of the largest matrix
*> element. If AMAX > LARGE or AMAX < SMALL, row scaling is done.
*> by diag(C).
*> = 'B': Both row and column equilibration, i.e., A has been
*> replaced by diag(R) * A * diag(C).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if row or column scaling
*> should be done based on the ratio of the row or column scaling
*> factors. If ROWCND < THRESH, row scaling is done, and if
*> COLCND < THRESH, column scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if row scaling
*> should be done based on the absolute size of the largest matrix
*> element. If AMAX > LARGE or AMAX < SMALL, row scaling is done.
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**H *U or A = L*L**H of the band
*> matrix A, in the same storage format as A.
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED = 'Y', the equilibrated matrix:
*> diag(S) * A * diag(S).
*> \endverbatim
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the equilibrated matrix: diag(S) * A * diag(S), in
*> the same storage format as A.
*> \endverbatim
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> .FALSE., then the contents of H are unspecified on exit.
*> (The output value of H when INFO.GT.0 is given under the
*> description of INFO below.)
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine may explicitly set H(i,j) = 0 for i.GT.j and
*> j = 1, 2, ... ILO-1 or j = IHI+1, IHI+2, ... N.
*> \endverbatim
*> is sufficient, but LWORK typically as large as 6*N may
*> be required for optimal performance. A workspace query
*> to determine the optimal workspace size is recommended.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then CLAQR0 does a workspace query.
*> In this case, CLAQR0 checks the input parameters and
*> estimates the optimal workspace size for the given
*> \param[in] S2
*> \verbatim
*> S2 is COMPLEX
-*> \endverbatim
-*> \verbatim
+*>
*> S1 and S2 are the shifts defining K in (*) above.
*> \endverbatim
*>
*> The dimension of the work array WORK. LWORK = 2*NW
*> suffices, but greater efficiency may result from larger
*> values of LWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; CLAQR2
*> only estimates the optimal workspace size for the given
*> values of N, NW, KTOP and KBOT. The estimate is returned
*> The dimension of the work array WORK. LWORK = 2*NW
*> suffices, but greater efficiency may result from larger
*> values of LWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; CLAQR3
*> only estimates the optimal workspace size for the given
*> values of N, NW, KTOP and KBOT. The estimate is returned
*> .FALSE., then the contents of H are unspecified on exit.
*> (The output value of H when INFO.GT.0 is given under the
*> description of INFO below.)
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine may explicitly set H(i,j) = 0 for i.GT.j and
*> j = 1, 2, ... ILO-1 or j = IHI+1, IHI+2, ... N.
*> \endverbatim
*> is sufficient, but LWORK typically as large as 6*N may
*> be required for optimal performance. A workspace query
*> to determine the optimal workspace size is recommended.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then CLAQR4 does a workspace query.
*> In this case, CLAQR4 checks the input parameters and
*> estimates the optimal workspace size for the given
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**H *U or A = L*L**H of the band
*> matrix A, in the same storage format as A.
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the equilibrated matrix: diag(S) * A * diag(S), in
*> the same storage format as A.
*> \endverbatim
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED = 'Y', the equilibrated matrix:
*> diag(S) * A * diag(S).
*> \endverbatim
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> \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 of the interchanges and the block structure of D.
*> If UPLO = 'U', only the last KB elements of IPIV are set;
*> if UPLO = 'L', only the first KB elements are set.
-*> \endverbatim
-*> \verbatim
+*>
*> If IPIV(k) > 0, then rows and columns k and IPIV(k) were
*> interchanged and D(k,k) is a 1-by-1 diagonal block.
*> If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and
*> \param[in,out] CNORM
*> \verbatim
*> CNORM is or output) REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
*> contains the norm of the off-diagonal part of the j-th column
*> of A. If TRANS = 'N', CNORM(j) must be greater than or equal
*> to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
*> must be greater than or equal to the 1-norm.
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'N', CNORM is an output argument and CNORM(j)
*> returns the 1-norm of the offdiagonal part of the j-th column
*> of A.
*> \param[in,out] CNORM
*> \verbatim
*> CNORM is or output) REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
*> contains the norm of the off-diagonal part of the j-th column
*> of A. If TRANS = 'N', CNORM(j) must be greater than or equal
*> to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
*> must be greater than or equal to the 1-norm.
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'N', CNORM is an output argument and CNORM(j)
*> returns the 1-norm of the offdiagonal part of the j-th column
*> of A.
*> \param[in,out] CNORM
*> \verbatim
*> CNORM is or output) REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
*> contains the norm of the off-diagonal part of the j-th column
*> of A. If TRANS = 'N', CNORM(j) must be greater than or equal
*> to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
*> must be greater than or equal to the 1-norm.
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'N', CNORM is an output argument and CNORM(j)
*> returns the 1-norm of the offdiagonal part of the j-th column
*> of A.
*> (M,1) if SIDE = 'R'
*> On entry, the n-vector C1 if SIDE = 'L', or the m-vector C1
*> if SIDE = 'R'.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the first row of P*C if SIDE = 'L', or the first
*> column of C*P if SIDE = 'R'.
*> \endverbatim
*> (LDC, N-1) if SIDE = 'R'
*> On entry, the (m - 1) x n matrix C2 if SIDE = 'L', or the
*> m x (n - 1) matrix C2 if SIDE = 'R'.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, rows 2:m of P*C if SIDE = 'L', or columns 2:m of C*P
*> if SIDE = 'R'.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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).
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**H*U or A = L*L**H of the band
*> matrix A, in the same storage format as A.
*> 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).
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**H*U or A = L*L**H of the band matrix
*> A, in the same storage format as A (see AB). If EQUED = 'Y',
*> then AFB is the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFB is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**H*U or A = L*L**H.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AFB is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**H*U or A = L*L**H of the equilibrated
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**H *U or A = L*L**H of the band
*> matrix A, in the same storage format as A.
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**H*U or A = L*L**H of the band
*> matrix A, in the same storage format as A.
*> of lower packed A. The LDA of RFP A is (N+1)/2 when TRANSR =
*> 'C'. When TRANSR is 'N' the LDA is N+1 when N is even and N
*> is odd. See the Note below for more details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization RFP A = U**H*U or RFP A = L*L**H.
*> \endverbatim
*> > 0: if INFO = i, the leading minor of order i is not
*> positive definite, and the factorization could not be
*> completed.
-*> \endverbatim
-*> \verbatim
+*>
*> Further Notes on RFP Format:
*> ============================
-*> \endverbatim
-*> \verbatim
+*>
*> We first consider Standard Packed Format when N is even.
*> We give an example where N = 6.
-*> \endverbatim
-*> \verbatim
+*>
*> AP is Upper AP is Lower
-*> \endverbatim
-*> \verbatim
+*>
*> 00 01 02 03 04 05 00
*> 11 12 13 14 15 10 11
*> 22 23 24 25 20 21 22
*> 33 34 35 30 31 32 33
*> 44 45 40 41 42 43 44
*> 55 50 51 52 53 54 55
-*> \endverbatim
-*> \verbatim
+*>
*> Let TRANSR = 'N'. RFP holds AP as follows:
*> For UPLO = 'U' the upper trapezoid A(0:5,0:2) consists of the last
*> three columns of AP upper. The lower triangle A(4:6,0:2) consists of
*> conjugate-transpose of the last three columns of AP lower.
*> To denote conjugate we place -- above the element. This covers the
*> case N even and TRANSR = 'N'.
-*> \endverbatim
-*> \verbatim
+*>
*> RFP A RFP A
-*> \endverbatim
-*> \verbatim
+*>
*> -- -- --
*> 03 04 05 33 43 53
*> -- --
*> 13 14 15 00 44 54
*> --
*> 23 24 25 10 11 55
-*> \endverbatim
-*> \verbatim
+*>
*> 33 34 35 20 21 22
*> --
*> 00 44 45 30 31 32
*> 01 11 55 40 41 42
*> -- -- --
*> 02 12 22 50 51 52
-*> \endverbatim
-*> \verbatim
+*>
*> Now let TRANSR = 'C'. RFP A in both UPLO cases is just the conjugate-
*> transpose of RFP A above. One therefore gets:
-*> \endverbatim
-*> \verbatim
+*>
*> RFP A RFP A
-*> \endverbatim
-*> \verbatim
+*>
*> -- -- -- -- -- -- -- -- -- --
*> 03 13 23 33 00 01 02 33 00 10 20 30 40 50
*> -- -- -- -- -- -- -- -- -- --
*> 04 14 24 34 44 11 12 43 44 11 21 31 41 51
*> -- -- -- -- -- -- -- -- -- --
*> 05 15 25 35 45 55 22 53 54 55 22 32 42 52
-*> \endverbatim
-*> \verbatim
+*>
*> We next consider Standard Packed Format when N is odd.
*> We give an example where N = 5.
-*> \endverbatim
-*> \verbatim
+*>
*> AP is Upper AP is Lower
-*> \endverbatim
-*> \verbatim
+*>
*> 00 01 02 03 04 00
*> 11 12 13 14 10 11
*> 22 23 24 20 21 22
*> 33 34 30 31 32 33
*> 44 40 41 42 43 44
-*> \endverbatim
-*> \verbatim
+*>
*> Let TRANSR = 'N'. RFP holds AP as follows:
*> For UPLO = 'U' the upper trapezoid A(0:4,0:2) consists of the last
*> three columns of AP upper. The lower triangle A(3:4,0:1) consists of
*> conjugate-transpose of the last two columns of AP lower.
*> To denote conjugate we place -- above the element. This covers the
*> case N odd and TRANSR = 'N'.
-*> \endverbatim
-*> \verbatim
+*>
*> RFP A RFP A
-*> \endverbatim
-*> \verbatim
+*>
*> -- --
*> 02 03 04 00 33 43
*> --
*> 12 13 14 10 11 44
-*> \endverbatim
-*> \verbatim
+*>
*> 22 23 24 20 21 22
*> --
*> 00 33 34 30 31 32
*> -- --
*> 01 11 44 40 41 42
-*> \endverbatim
-*> \verbatim
+*>
*> Now let TRANSR = 'C'. RFP A in both UPLO cases is just the conjugate-
*> transpose of RFP A above. One therefore gets:
-*> \endverbatim
-*> \verbatim
+*>
*> RFP A RFP A
-*> \endverbatim
-*> \verbatim
+*>
*> -- -- -- -- -- -- -- -- --
*> 02 12 22 00 01 00 10 20 30 40 50
*> -- -- -- -- -- -- -- -- --
*> of lower packed A. The LDA of RFP A is (N+1)/2 when TRANSR =
*> 'C'. When TRANSR is 'N' the LDA is N+1 when N is even and N
*> is odd. See the Note below for more details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the Hermitian inverse of the original matrix, in the
*> same storage format.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**H*U or A = L*L**H.
*> \endverbatim
*> triangular part of the matrix A, and the strictly upper
*> triangular part of A is not referenced. A is not modified if
*> FACT = 'F' or 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**H*U or A = L*L**H, in the same storage
*> format as A. If EQUED .ne. 'N', then AF is the factored form
*> of the equilibrated matrix diag(S)*A*diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**H*U or A = L*L**H of the original
*> matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**H*U or A = L*L**H of the equilibrated
*> the strictly upper triangular part of A is not referenced. A is
*> not modified if FACT = 'F' or 'N', or if FACT = 'E' and EQUED =
*> 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**T*U or A = L*L**T, in the same storage
*> format as A. If EQUED .ne. 'N', then AF is the factored
*> form of the equilibrated matrix diag(S)*A*diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the original
*> matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the equilibrated
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**H *U or A = L*L**H.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**H*U or A = L*L**H.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**H*U or A = L*L**H, in the same storage
*> format as A.
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details. A is not modified if
*> FACT = 'F' or 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**H*U or A = L*L**H, in the same storage
*> format as A. If EQUED .ne. 'N', then AFP is the factored
*> form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFP is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**H * U or A = L * L**H of the original
*> matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AFP is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**H*U or A = L*L**H of the equilibrated
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**H*U or A = L*L**H, in the same
*> storage format as A.
*> array AP as follows:
*> if UPLO = 'U', AP(i + (j-1)*j/2) = U(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = L(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the upper or lower triangle of the (Hermitian)
*> inverse of A, overwriting the input factor U or L.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization as above.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization as above.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> A = U*D*U**T or A = L*D*L**T as computed by CSPTRF, stored as
*> to obtain the factor U or L from the factorization
*> A = U*D*U**T or A = L*D*L**T as computed by CSPTRF, stored as
*> a packed triangular matrix in the same storage format as A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFP is an output argument and on exit
*> contains the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) =
*> IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were
*> interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block structure
*> of D, as determined by CSPTRF.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L, stored as a packed triangular
*> matrix overwriting A (see below for further details).
*> On entry, the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by CSPTRF,
*> stored as a packed triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix, stored as a packed triangular matrix. The j-th column
*> of inv(A) is stored in the array AP as follows:
*> Note that for COMPZ = 'V', then if N is less than or
*> equal to the minimum divide size, usually 25, then LWORK need
*> only be 1.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> Note that for COMPZ = 'I' or 'V', then if N is less than or
*> equal to the minimum divide size, usually 25, then LRWORK
*> need only be max(1,2*(N-1)).
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> Note that for COMPZ = 'I' or 'V', then if N is less than or
*> equal to the minimum divide size, usually 25, then LIWORK
*> need only be 1.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> \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'.
*> \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.
*> > 0: if INFO = i, then i eigenvectors failed to converge
*> in MAXITS iterations. Their indices are stored in
*> array IFAIL.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> MAXITS INTEGER, default = 5
*> The maximum number of iterations performed.
-*> \endverbatim
-*> \verbatim
+*>
*> EXTRA INTEGER, default = 2
*> The number of iterations performed after norm growth
*> criterion is satisfied, should be at least 1.
*> \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'.
*> \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.
*> 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the block diagonal matrix D and the
*> multipliers used to obtain the factor U or L from the
*> factorization A = U*D*U**T or A = L*D*L**T as computed by
*> CSYTRF.
*> for LWORK < N, TRS will be done with Level BLAS 2
*> for LWORK >= N, TRS will be done with Level BLAS 3
-*> \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
*> contains the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> A = U*D*U**T or A = L*D*L**T as computed by CSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) =
*> IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were
*> interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block structure
*> of D, as determined by CSYTRF.
*> The length of WORK. LWORK >= max(1,2*N), and for best
*> performance, when FACT = 'N', LWORK >= max(1,2*N,N*NB), where
*> NB is the optimal blocksize for CSYTRF.
-*> \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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> contains the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L from the factorization A =
*> U*D*U**T or A = L*D*L**T as computed by SSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L from the factorization A =
*> diagonal block. If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0,
*> then rows and columns k+1 and -IPIV(k) were interchanged
*> and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block
*> structure of D, as determined by SSYTRF.
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> A is COMPLEX array, dimension (LDA,N)
*> On entry, the NB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by CSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L (see below for further details).
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L (see below for further details).
*> \endverbatim
*> LWORK is INTEGER
*> The length of WORK. LWORK >=1. For best performance
*> LWORK >= N*NB, where NB is the block size returned by ILAENV.
-*> \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
*> A is COMPLEX array, dimension (LDA,N)
*> On entry, the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by CSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> A is COMPLEX array, dimension (LDA,N)
*> On entry, the NB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by CSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> A is COMPLEX array, dimension (LDA,N)
*> On entry, the NNB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by CSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> an upper or lower triangular matrix as follows:
*> UPLO = 'U' or 'u' RFP A came from an upper triangular matrix
*> UPLO = 'L' or 'l' RFP A came from a lower triangular matrix
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the form of op( A ) to be used
*> in the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' op( A ) = conjg( A' ).
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not RFP 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> elements of lower packed A. The LDA of RFP A is (N+1)/2 when
*> TRANSR = 'C'. When TRANSR is 'N' the LDA is N+1 when N is
*> even and N is odd. See the Note below for more details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the (triangular) inverse of the original matrix, in
*> the same storage format.
*> \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
*> \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.
*> The dimension of the array WORK. LWORK >= 1
*> If IJOB = 1, 2 or 4, LWORK >= 2*M*(N-M)
*> If IJOB = 3 or 5, LWORK >= 4*M*(N-M)
-*> \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 dimension of the array IWORK. LIWORK >= 1.
*> If IJOB = 1, 2 or 4, LIWORK >= N+2;
*> If IJOB = 3 or 5, LIWORK >= MAX(N+2, 2*M*(N-M));
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal size of the IWORK array,
*> returns this value as the first entry of the IWORK array, and
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK > = 1.
*> If IJOB = 1 or 2 and TRANS = 'N', LWORK >= max(1,2*M*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
*> \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.
*> If JOB = 'N', LWORK >= 1;
*> if JOB = 'E', LWORK = max(1,M*(N-M));
*> if JOB = 'V' or 'B', LWORK >= max(1,2*M*(N-M)).
-*> \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
*> triangular part of A is not referenced. If DIAG = 'U', the
*> diagonal elements of A are also not referenced and are
*> assumed to be 1.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the (triangular) inverse of the original matrix, in
*> the same storage format.
*> \endverbatim
*> 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
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= M-Q.
-*> \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
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK.
-*> \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
*> \verbatim
*> LRWORK is INTEGER
*> The dimension of the array RWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the RWORK array, returns
*> this value as the first entry of the work array, and no error
*> < 0: if INFO = -i, the i-th argument had an illegal value.
*> > 0: CBBCSD did not converge. See the description of RWORK
*> above for details.
-*> \endverbatim
-*> \verbatim
+*>
*> Reference
*> =========
-*> \endverbatim
-*> \verbatim
+*>
*> [1] Brian D. Sutton. Computing the complete CS decomposition. Numer.
*> Algorithms, 50(1):33-65, 2009.
*> \endverbatim
*> The dimension of the array WORK. LWORK >= max(1,min(M,N)).
*> For optimum performance LWORK >= min(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
*> \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).
*> The dimension of the array WORK. LWORK >= IHI-ILO.
*> For optimum performance LWORK >= (IHI-ILO)*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
*> 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
*> 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
*> 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
*> 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
*> The dimension of the array WORK. LWORK >= N-1.
*> For optimum performance LWORK >= (N-1)*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
*> For optimum performance LWORK >= max(1,N*NB) if SIDE = 'L',
*> and LWORK >= max(1,M*NB) if SIDE = 'R', where NB is the
*> optimal blocksize. (NB = 0 if M = 0 or N = 0.)
-*> \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
*> \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).
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >=M*NB if SIDE = 'R', 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
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= MAX(1,8*Q).
-*> \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
*> > 0: if DBBCSD did not converge, INFO specifies the number
*> of nonzero entries in PHI, and B11D, B11E, etc.,
*> contain the partially reduced matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> Reference
*> =========
-*> \endverbatim
-*> \verbatim
+*>
*> [1] Brian D. Sutton. Computing the complete CS decomposition. Numer.
*> Algorithms, 50(1):33-65, 2009.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> TOLMUL DOUBLE PRECISION, default = MAX(10,MIN(100,EPS**(-1/8)))
*> TOLMUL controls the convergence criterion of the QR loop.
*> Angles THETA(i), PHI(i) are rounded to 0 or PI/2 when they
*> elements of a bidiagonal matrix which is orthogonally
*> similar to the input matrix B; if INFO = i, i
*> elements of E have not converged to zero.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> TOLMUL DOUBLE PRECISION, default = max(10,min(100,EPS**(-1/8)))
*> TOLMUL controls the convergence criterion of the QR loop.
*> If it is positive, TOLMUL*EPS is the desired relative
*> Default is to lose at either one eighth or 2 of the
*> available decimal digits in each computed singular value
*> (whichever is smaller).
-*> \endverbatim
-*> \verbatim
+*>
*> MAXITR INTEGER, default = 6
*> MAXITR controls the maximum number of passes of the
*> algorithm through its inner loop. The algorithms stops
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(KU+1+i-j,j) = A(i,j) for max(1,j-KU)<=i<=min(N,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'F' and EQUED is not 'N', then A must have been
*> equilibrated by the scaling factors in R and/or C. AB is not
*> modified if FACT = 'F' or 'N', or if FACT = 'E' and
*> EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> and the multipliers used during the factorization are stored
*> in rows KL+KU+2 to 2*KL+KU+1. If EQUED .ne. 'N', then AFB is
*> the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFB is an output argument and on exit
*> returns details of the LU factorization of A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AFB is an output argument and on exit
*> returns details of the LU factorization of the equilibrated
*> matrix A (see the description of AB for the form of the
*> contains the pivot indices from the factorization A = L*U
*> as computed by DGBTRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = L*U
*> of the equilibrated matrix A.
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(KU+1+i-j,j) = A(i,j) for max(1,j-KU)<=i<=min(N,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'F' and EQUED is not 'N', then AB must have been
*> equilibrated by the scaling factors in R and/or C. AB is not
*> modified if FACT = 'F' or 'N', or if FACT = 'E' and
*> EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> and the multipliers used during the factorization are stored
*> in rows KL+KU+2 to 2*KL+KU+1. If EQUED .ne. 'N', then AFB is
*> the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the equilibrated matrix A (see the description of A for
*> contains the pivot indices from the factorization A = P*L*U
*> as computed by DGETRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the equilibrated matrix A.
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> computed.
*> = 1.0 : Use the extra-precise refinement algorithm.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(kl+ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, details of the factorization: U is stored as an
*> upper triangular band matrix with KL+KU superdiagonals in
*> rows 1 to KL+KU+1, and the multipliers used during the
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(kl+ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, details of the factorization: U is stored as an
*> upper triangular band matrix with KL+KU superdiagonals in
*> rows 1 to KL+KU+1, and the multipliers used during the
*> returned if LWORK < max(1,3*N), but if SENSE = 'E' or 'V' or
*> 'B' this may not be large enough.
*> For good performance, LWORK must generally be larger.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates upper bounds on the optimal sizes of the
*> arrays WORK and IWORK, returns these values as the first
*> Note that SDIM*(N-SDIM) <= N*N/4. Note also that an error is
*> only returned if LIWORK < 1, but if SENSE = 'V' or 'B' this
*> may not be large enough.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates upper bounds on the optimal sizes of
*> the arrays WORK and IWORK, returns these values as the first
*> The dimension of the array WORK. LWORK >= max(1,3*N), and
*> if JOBVL = 'V' or JOBVR = 'V', LWORK >= 4*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
*> to make the rows and columns of A more equal in
*> norm. Do not permute;
*> = 'B': Both diagonally scale and permute A.
-*> \endverbatim
-*> \verbatim
+*>
*> Computed reciprocal condition numbers will be for the matrix
*> after balancing and/or permuting. Permuting does not change
*> condition numbers (in exact arithmetic), but balancing does.
*> = 'E': Computed for eigenvalues only;
*> = 'V': Computed for right eigenvectors only;
*> = 'B': Computed for eigenvalues and right eigenvectors.
-*> \endverbatim
-*> \verbatim
+*>
*> If SENSE = 'E' or 'B', both left and right eigenvectors
*> must also be computed (JOBVL = 'V' and JOBVR = 'V').
*> \endverbatim
*> LWORK >= max(1,2*N), and if JOBVL = 'V' or JOBVR = 'V',
*> LWORK >= 3*N. If SENSE = 'V' or 'B', LWORK >= N*(N+6).
*> 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
*> blocksizes (for DGEQRF, DORMQR, and DORGQR.) Then compute:
*> NB -- MAX of the blocksizes for DGEQRF, DORMQR, and DORGQR
*> The optimal LWORK is 2*N + N*(NB+1).
-*> \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
*> u(j) = VL(:,j) + i*VL(:,j+1)
*> and
*> u(j+1) = VL(:,j) - i*VL(:,j+1).
-*> \endverbatim
-*> \verbatim
+*>
*> Each eigenvector is scaled so that its largest component has
*> abs(real part) + abs(imag. part) = 1, except for eigenvectors
*> corresponding to an eigenvalue with alpha = beta = 0, which
*> x(j) = VR(:,j) + i*VR(:,j+1)
*> and
*> x(j+1) = VR(:,j) - i*VR(:,j+1).
-*> \endverbatim
-*> \verbatim
+*>
*> Each eigenvector is scaled so that its largest component has
*> abs(real part) + abs(imag. part) = 1, except for eigenvalues
*> corresponding to an eigenvalue with alpha = beta = 0, which
*> NB -- MAX of the blocksizes for DGEQRF, DORMQR, and DORGQR;
*> The optimal LWORK is:
*> 2*N + MAX( 6*N, N*(NB+1) ).
-*> \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
*> \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
*> \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
*> For optimal performance,
*> LWORK >= max( 1, MN + max( MN, NRHS )*NB ).
*> where MN = min(M,N) and NB is the optimum block size.
-*> \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
*> tree (usually about 25), and
*> NLVL = MAX( 0, INT( LOG_2( MIN( M,N )/(SMLSIZ+1) ) ) + 1 )
*> For good performance, LWORK should 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 dimension of the array WORK. LWORK >= 1, and also:
*> LWORK >= 3*min(M,N) + max( 2*min(M,N), max(M,N), NRHS )
*> For good performance, LWORK should 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
*> where NB is an upper bound on the blocksize returned
*> by ILAENV for the routines DGEQP3, DTZRZF, STZRQF, DORMQR,
*> and DORMRZ.
-*> \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 dimension of the array WORK. LWORK >= 3*N+1.
*> For optimal performance LWORK >= 2*N+( N+1 )*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
*> 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
*> 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
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> vectors) are overwritten on the array A;
*> = 'N': no rows of V**T (no right singular vectors) are
*> computed.
-*> \endverbatim
-*> \verbatim
+*>
*> JOBVT and JOBU cannot both be 'O'.
*> \endverbatim
*>
*> - PATH 1t (N much larger than M, JOBVT='N')
*> LWORK >= MAX(1,3*MIN(M,N)+MAX(M,N),5*MIN(M,N)) for the other paths
*> For good performance, LWORK should 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
*> values in SVA(1:N)) and V is still a decomposition of the
*> input matrix A in the sense that the residual
*> ||A-SCALE*U*SIGMA*V^T||_2 / ||A||_2 is small.
-*> \endverbatim
-*> \verbatim
+*>
*> If JOBU .EQ. 'N' :
*> If INFO .EQ. 0 :
*> Note that the left singular vectors are 'for free' in the
*> not 'N', then A must have been equilibrated by the scaling
*> factors in R and/or C. A is not modified if FACT = 'F' or
*> 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> contains the factors L and U from the factorization
*> A = P*L*U as computed by DGETRF. If EQUED .ne. 'N', then
*> AF is the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the equilibrated matrix A (see the description of A for
*> contains the pivot indices from the factorization A = P*L*U
*> as computed by DGETRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the equilibrated matrix A.
*> not 'N', then A must have been equilibrated by the scaling
*> factors in R and/or C. A is not modified if FACT = 'F' or
*> 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> contains the factors L and U from the factorization
*> A = P*L*U as computed by DGETRF. If EQUED .ne. 'N', then
*> AF is the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the equilibrated matrix A (see the description of A for
*> contains the pivot indices from the factorization A = P*L*U
*> as computed by DGETRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the equilibrated matrix A.
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> computed.
*> = 1.0 : Use the extra-precise refinement algorithm.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> The dimension of the array WORK. LWORK >= max(1,N).
*> For optimal performance LWORK >= N*NB, where NB is
*> the optimal blocksize returned by ILAENV.
-*> \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
*> SELCTG(ALPHAR(j),ALPHAI(j),BETA(j)) is true; i.e. if either
*> one of a complex conjugate pair of eigenvalues is selected,
*> then both complex eigenvalues are selected.
-*> \endverbatim
-*> \verbatim
+*>
*> Note that in the ill-conditioned case, a selected complex
*> eigenvalue may no longer satisfy SELCTG(ALPHAR(j),ALPHAI(j),
*> BETA(j)) = .TRUE. after ordering. INFO is to be set to N+2
*> If ALPHAI(j) is zero, then the j-th eigenvalue is real; if
*> positive, then the j-th and (j+1)-st eigenvalues are a
*> complex conjugate pair, with ALPHAI(j+1) negative.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(j)/BETA(j)
*> may easily over- or underflow, and BETA(j) may even be zero.
*> Thus, the user should avoid naively computing the ratio.
*> The dimension of the array WORK.
*> If N = 0, LWORK >= 1, else LWORK >= 8*N+16.
*> 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
*> If ALPHAI(j) is zero, then the j-th eigenvalue is real; if
*> positive, then the j-th and (j+1)-st eigenvalues are a
*> complex conjugate pair, with ALPHAI(j+1) negative.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(j)/BETA(j)
*> may easily over- or underflow, and BETA(j) may even be zero.
*> Thus, the user should avoid naively computing the ratio.
*> Note also that an error is only returned if
*> LWORK < max( 8*N, 6*N+16), but if SENSE = 'E' or 'V' or 'B'
*> this may not be large enough.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the bound on the optimal size of the WORK
*> array and the minimum size of the IWORK array, returns these
*> The dimension of the array IWORK.
*> If SENSE = 'N' or N = 0, LIWORK >= 1, otherwise
*> LIWORK >= N+6.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the bound on the optimal size of the
*> WORK array and the minimum size of the IWORK array, returns
*> the j-th eigenvalue is real; if positive, then the j-th and
*> (j+1)-st eigenvalues are a complex conjugate pair, with
*> ALPHAI(j+1) negative.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(j)/BETA(j)
*> may easily over- or underflow, and BETA(j) may even be zero.
*> Thus, the user should avoid naively computing the ratio
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,8*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 j-th eigenvalue is real; if positive, then the j-th and
*> (j+1)-st eigenvalues are a complex conjugate pair, with
*> ALPHAI(j+1) negative.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(j)/BETA(j)
*> may easily over- or underflow, and BETA(j) may even be zero.
*> Thus, the user should avoid naively computing the ratio
*> LWORK >= max(1,6*N).
*> If SENSE = 'E' or 'B', LWORK >= max(1,10*N).
*> If SENSE = 'V' or 'B', LWORK >= 2*N*N+8*N+16.
-*> \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
*> \param[out] Y
*> \verbatim
*> Y is DOUBLE PRECISION array, dimension (P)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, X and Y are the solutions of the GLM problem.
*> \endverbatim
*>
*> For optimum performance, LWORK >= M+min(N,P)+max(N,P)*NB,
*> where NB is an upper bound for the optimal blocksizes for
*> DGEQRF, SGERQF, DORMQR and SORMRQ.
-*> \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
*> \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
*> For optimum performance LWORK >= P+min(M,N)+max(M,N)*NB,
*> where NB is an upper bound for the optimal blocksizes for
*> DGEQRF, SGERQF, DORMQR and SORMRQ.
-*> \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
*> \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**T,B**T)**T.
*> \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,
*> < 0: if INFO = -i, the i-th argument had an illegal value.
*> > 0: if INFO = 1, the Jacobi-type procedure failed to
*> converge. For further details, see subroutine DTGSJA.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> TOLA DOUBLE PRECISION
*> TOLB DOUBLE PRECISION
*> TOLA and TOLB are the thresholds to determine the effective
*> \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
*> \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.
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> DL is DOUBLE PRECISION array, dimension (N-1)
*> On entry, DL must contain the (n-1) sub-diagonal elements of
*> A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, DL is overwritten by the (n-2) elements of the
*> second super-diagonal of the upper triangular matrix U from
*> the LU factorization of A, in DL(1), ..., DL(n-2).
*> \verbatim
*> D is DOUBLE PRECISION array, dimension (N)
*> On entry, D must contain the diagonal elements of A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, D is overwritten by the n diagonal elements of U.
*> \endverbatim
*>
*> DU is DOUBLE PRECISION array, dimension (N-1)
*> On entry, DU must contain the (n-1) super-diagonal elements
*> of A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, DU is overwritten by the (n-1) elements of the first
*> super-diagonal of U.
*> \endverbatim
*> If FACT = 'F', then DLF is an input argument and on entry
*> contains the (n-1) multipliers that define the matrix L from
*> the LU factorization of A as computed by DGTTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DLF is an output argument and on exit
*> contains the (n-1) multipliers that define the matrix L from
*> the LU factorization of A.
*> If FACT = 'F', then DF is an input argument and on entry
*> contains the n diagonal elements of the upper triangular
*> matrix U from the LU factorization of A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DF is an output argument and on exit
*> contains the n diagonal elements of the upper triangular
*> matrix U from the LU factorization of A.
*> DUF is or output) DOUBLE PRECISION array, dimension (N-1)
*> If FACT = 'F', then DUF is an input argument and on entry
*> contains the (n-1) elements of the first superdiagonal of U.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DUF is an output argument and on exit
*> contains the (n-1) elements of the first superdiagonal of U.
*> \endverbatim
*> If FACT = 'F', then DU2 is an input argument and on entry
*> contains the (n-2) elements of the second superdiagonal of
*> U.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DU2 is an output argument and on exit
*> contains the (n-2) elements of the second superdiagonal of
*> U.
*> If FACT = 'F', then IPIV is an input argument and on entry
*> contains the pivot indices from the LU factorization of A as
*> computed by DGTTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the LU factorization of A;
*> row i of the matrix was interchanged with row IPIV(i).
*> DL is DOUBLE PRECISION array, dimension (N-1)
*> On entry, DL must contain the (n-1) sub-diagonal elements of
*> A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, DL is overwritten by the (n-1) multipliers that
*> define the matrix L from the LU factorization of A.
*> \endverbatim
*> \verbatim
*> D is DOUBLE PRECISION array, dimension (N)
*> On entry, D must contain the diagonal elements of A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, D is overwritten by the n diagonal elements of the
*> upper triangular matrix U from the LU factorization of A.
*> \endverbatim
*> DU is DOUBLE PRECISION array, dimension (N-1)
*> On entry, DU must contain the (n-1) super-diagonal elements
*> of A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, DU is overwritten by the (n-1) elements of the first
*> super-diagonal of U.
*> \endverbatim
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,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
*> \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.
*> \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 ZGEHRD
*> contents of H are unspecified on exit. (The output value of
*> H when INFO.GT.0 is given under the description of INFO
*> below.)
-*> \endverbatim
-*> \verbatim
+*>
*> Unlike earlier versions of DHSEQR, this subroutine may
*> explicitly H(i,j) = 0 for i.GT.j and j = 1, 2, ... ILO-1
*> or j = IHI+1, IHI+2, ... N.
*> \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
*> may be required for optimal performance. A workspace
*> query is recommended to determine the optimal workspace
*> size.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then DHSEQR does a workspace query.
*> In this case, DHSEQR checks the input parameters and
*> estimates the optimal workspace size for the given
*> 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
*> TRANS is INTEGER
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> BLAS_NO_TRANS y := alpha*abs(A)*abs(x) + beta*abs(y)
*> BLAS_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
*> BLAS_CONJ_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> On entry, INCY specifies the increment for the elements of
*> Y. INCY must not be zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> Level 2 Blas routine.
*> \endverbatim
*>
*> TRANS is INTEGER
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> BLAS_NO_TRANS y := alpha*abs(A)*abs(x) + beta*abs(y)
*> BLAS_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
*> BLAS_CONJ_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> On entry, INCY specifies the increment for the elements of
*> Y. INCY must not be zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> Level 2 Blas routine.
*> \endverbatim
*>
*> 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
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = BLAS_UPPER Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = BLAS_LOWER Only the lower triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> 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
*> INFO is INTEGER
*> = 0: successful exit
*> > 0: if INFO = 1, the updating process failed.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> Logical variable ORGATI (origin-at-i?) is used for distinguishing
*> whether D(i) or D(i+1) is treated as the origin.
-*> \endverbatim
-*> \verbatim
+*>
*> ORGATI = .true. origin at i
*> ORGATI = .false. origin at i+1
-*> \endverbatim
-*> \verbatim
+*>
*> Logical variable SWTCH3 (switch-for-3-poles?) is for noting
*> if we are working with THREE poles!
-*> \endverbatim
-*> \verbatim
+*>
*> MAXIT is the maximum number of iterations allowed for each
*> eigenvalue.
*> \endverbatim
*> \verbatim
*> A is DOUBLE PRECISION array, dimension (N)
*> On entry, A must contain the diagonal elements of T.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, A is overwritten by the n diagonal elements of the
*> upper triangular matrix U of the factorization of T.
*> \endverbatim
*> B is DOUBLE PRECISION array, dimension (N-1)
*> On entry, B must contain the (n-1) super-diagonal elements of
*> T.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, B is overwritten by the (n-1) super-diagonal
*> elements of the matrix U of the factorization of T.
*> \endverbatim
*> C is DOUBLE PRECISION array, dimension (N-1)
*> On entry, C must contain the (n-1) sub-diagonal elements of
*> T.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, C is overwritten by the (n-1) sub-diagonal elements
*> of the matrix L of the factorization of T.
*> \endverbatim
*> an interchange occurred at the kth step of the elimination,
*> then IN(k) = 1, otherwise IN(k) = 0. The element IN(n)
*> returns the smallest positive integer j such that
-*> \endverbatim
-*> \verbatim
+*>
*> abs( u(j,j) ).le. norm( (T - lambda*I)(j) )*TOL,
-*> \endverbatim
-*> \verbatim
+*>
*> where norm( A(j) ) denotes the sum of the absolute values of
*> the jth row of the matrix A. If no such j exists then IN(n)
*> is returned as zero. If IN(n) is returned as positive, then a
*> is the relative machine precision, but if TOL is supplied as
*> non-positive, then it is reset to eps*max( abs( u(i,j) ) ).
*> If JOB .gt. 0 then TOL is not referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, TOL is changed as described above, only if TOL is
*> non-positive on entry. Otherwise TOL is unchanged.
*> \endverbatim
*> per eigenvalue; elements i+1:ihi of WR and WI
*> contain those eigenvalues which have been
*> successfully computed.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .FALSE., then on exit,
*> the remaining unconverged eigenvalues are the
*> eigenvalues of the upper Hessenberg matrix rows
*> and columns ILO thorugh INFO of the final, output
*> value of H.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .TRUE., then on exit
*> (*) (initial value of H)*U = U*(final value of H)
*> where U is an orthognal 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
*> (final value of Z) = (initial value of Z)*U
*> where U is the orthogonal matrix in (*)
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has row dimension N = NL + NR + 1,
*> and column dimension M = N + SQRE.
*> \endverbatim
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the equilibrated matrix, in the same storage format
*> as A. See EQUED for the form of the equilibrated matrix.
*> \endverbatim
*> by diag(C).
*> = 'B': Both row and column equilibration, i.e., A has been
*> replaced by diag(R) * A * diag(C).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if row or column scaling
*> should be done based on the ratio of the row or column scaling
*> factors. If ROWCND < THRESH, row scaling is done, and if
*> COLCND < THRESH, column scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if row scaling
*> should be done based on the absolute size of the largest matrix
*> element. If AMAX > LARGE or AMAX < SMALL, row scaling is done.
*> by diag(C).
*> = 'B': Both row and column equilibration, i.e., A has been
*> replaced by diag(R) * A * diag(C).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if row or column scaling
*> should be done based on the ratio of the row or column scaling
*> factors. If ROWCND < THRESH, row scaling is done, and if
*> COLCND < THRESH, column scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if row scaling
*> should be done based on the absolute size of the largest matrix
*> element. If AMAX > LARGE or AMAX < SMALL, row scaling is done.
*> .FALSE., then the contents of H are unspecified on exit.
*> (The output value of H when INFO.GT.0 is given under the
*> description of INFO below.)
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine may explicitly set H(i,j) = 0 for i.GT.j and
*> j = 1, 2, ... ILO-1 or j = IHI+1, IHI+2, ... N.
*> \endverbatim
*> is sufficient, but LWORK typically as large as 6*N may
*> be required for optimal performance. A workspace query
*> to determine the optimal workspace size is recommended.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then DLAQR0 does a workspace query.
*> In this case, DLAQR0 checks the input parameters and
*> estimates the optimal workspace size for the given
*>
*> If INFO .GT. 0 and WANTZ is .FALSE., then Z is not
*> accessed.
-*> \endverbatim
-*> \verbatim
-*> \endverbatim
-*> \verbatim
+*>
+*>
*> Based on contributions by
*> Karen Braman and Ralph Byers, Department of Mathematics,
*> University of Kansas, USA
*> The dimension of the work array WORK. LWORK = 2*NW
*> suffices, but greater efficiency may result from larger
*> values of LWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; DLAQR2
*> only estimates the optimal workspace size for the given
*> values of N, NW, KTOP and KBOT. The estimate is returned
*> The dimension of the work array WORK. LWORK = 2*NW
*> suffices, but greater efficiency may result from larger
*> values of LWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; DLAQR3
*> only estimates the optimal workspace size for the given
*> values of N, NW, KTOP and KBOT. The estimate is returned
*> .FALSE., then the contents of H are unspecified on exit.
*> (The output value of H when INFO.GT.0 is given under the
*> description of INFO below.)
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine may explicitly set H(i,j) = 0 for i.GT.j and
*> j = 1, 2, ... ILO-1 or j = IHI+1, IHI+2, ... N.
*> \endverbatim
*> is sufficient, but LWORK typically as large as 6*N may
*> be required for optimal performance. A workspace query
*> to determine the optimal workspace size is recommended.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then DLAQR4 does a workspace query.
*> In this case, DLAQR4 checks the input parameters and
*> estimates the optimal workspace size for the given
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**T*U or A = L*L**T of the band
*> matrix A, in the same storage format as A.
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the equilibrated matrix: diag(S) * A * diag(S), in
*> the same storage format as A.
*> \endverbatim
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED = 'Y', the equilibrated matrix:
*> diag(S) * A * diag(S).
*> \endverbatim
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> floating-point arithmetic.
*> Cure: Increase the PARAMETER "FUDGE",
*> recompile, and try again.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> FUDGE DOUBLE PRECISION, default = 2
*> A "fudge factor" to widen the Gershgorin intervals. Ideally,
*> a value of 1 should work, but on machines with sloppy
*> publicly released versions should be large enough to handle
*> the worst machine around. Note that this has no effect
*> on accuracy of the solution.
-*> \endverbatim
-*> \verbatim
+*>
*> Based on contributions by
*> W. Kahan, University of California, Berkeley, USA
*> Beresford Parlett, University of California, Berkeley, USA
*> < 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 DLARRD.
*> = 2: No base representation could be found in MAXTRY iterations.
*> Increasing MAXTRY and recompilation might be a remedy.
*> INFO is INTEGER
*> = 0: Eigenvalue converged
*> = -1: Eigenvalue did NOT converge
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> FUDGE DOUBLE PRECISION, default = 2
*> A "fudge factor" to widen the Gershgorin intervals.
*> \endverbatim
*> \verbatim
*> R is DOUBLE PRECISION
*> The nonzero component of the rotated vector.
-*> \endverbatim
-*> \verbatim
+*>
*> This version has a few statements commented out for thread safety
*> (machine parameters are computed on each entry). 10 feb 03, SJH.
*> \endverbatim
*> \verbatim
*> R is DOUBLE PRECISION
*> The nonzero component of the rotated vector.
-*> \endverbatim
-*> \verbatim
+*>
*> This version has a few statements commented out for thread safety
*> (machine parameters are computed on each entry). 10 feb 03, SJH.
*> \endverbatim
*> \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
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has row dimension N = NL + NR + 1,
*> and column dimension M = N + SQRE.
*> \endverbatim
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has N = NL + NR + 1 rows and
*> M = N + SQRE >= N columns.
*> \endverbatim
*> 2 : non-zero in the lower half only
*> 3 : dense
*> 4 : deflated
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, it is an array of dimension 4, with COLTYP(I) being
*> the dimension of the I-th type columns.
*> \endverbatim
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has N = NL + NR + 1 rows and
*> M = N + SQRE >= N columns.
*> \endverbatim
*> contains non-zero entries only at and below (or after) NL+2;
*> and the third is dense. The first column of U and the row of
*> VT are treated separately, however.
-*> \endverbatim
-*> \verbatim
+*>
*> The rows of the singular vectors found by DLASD4
*> must be likewise permuted before the matrix multiplies can
*> take place.
*> INFO is INTEGER
*> = 0: successful exit
*> > 0: if INFO = 1, the updating process failed.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> Logical variable ORGATI (origin-at-i?) is used for distinguishing
*> whether D(i) or D(i+1) is treated as the origin.
-*> \endverbatim
-*> \verbatim
+*>
*> ORGATI = .true. origin at i
*> ORGATI = .false. origin at i+1
-*> \endverbatim
-*> \verbatim
+*>
*> Logical variable SWTCH3 (switch-for-3-poles?) is for noting
*> if we are working with THREE poles!
-*> \endverbatim
-*> \verbatim
+*>
*> MAXIT is the maximum number of iterations allowed for each
*> eigenvalue.
*> \endverbatim
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has row dimension N = NL + NR + 1,
*> and column dimension M = N + SQRE.
*> \endverbatim
*> On exit, DIFR(I, 1) is the distance between I-th updated
*> (undeflated) singular value and the I+1-th (undeflated) old
*> singular value.
-*> \endverbatim
-*> \verbatim
+*>
*> If ICOMPQ = 1, DIFR(1:K,2) is an array containing the
*> normalizing factors for the right singular vector matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> See DLASD8 for details on DIFL and DIFR.
*> \endverbatim
*>
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has
*> N = NL + NR + 1 rows and
*> M = N + SQRE >= N columns.
*> dimension ( K ) if ICOMPQ = 0.
*> On exit, DIFR(I,1) = D(I) - DSIGMA(I+1), DIFR(K,1) is not
*> defined and will not be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> If ICOMPQ = 1, DIFR(1:K,2) is an array containing the
*> normalizing factors for the right singular vector matrix.
*> \endverbatim
*> = 0: then the input matrix is N-by-N.
*> = 1: then the input matrix is N-by-(N+1) if UPLU = 'U' and
*> (N+1)-by-N if UPLU = 'L'.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has
*> N = NL + NR + 1 rows and
*> M = N + SQRE >= N columns.
*> \verbatim
*> A is DOUBLE PRECISION array, dimension (LDA,N)
*> On exit, the leading m-by-n submatrix of A is set as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> if UPLO = 'U', A(i,j) = ALPHA, 1<=i<=j-1, 1<=j<=n,
*> if UPLO = 'L', A(i,j) = ALPHA, j+1<=i<=m, 1<=j<=n,
*> otherwise, A(i,j) = ALPHA, 1<=i<=m, 1<=j<=n, i.ne.j,
-*> \endverbatim
-*> \verbatim
+*>
*> and, for all UPLO, A(i,i) = BETA, 1<=i<=min(m,n).
*> \endverbatim
*>
*> \param[in,out] TAU
*> \verbatim
*> TAU is DOUBLE PRECISION
-*> \endverbatim
-*> \verbatim
+*>
*> These are passed as arguments in order to save their values
*> between calls to DLASQ3.
*> \endverbatim
*> Details of the interchanges and the block structure of D.
*> If UPLO = 'U', only the last KB elements of IPIV are set;
*> if UPLO = 'L', only the first KB elements are set.
-*> \endverbatim
-*> \verbatim
+*>
*> If IPIV(k) > 0, then rows and columns k and IPIV(k) were
*> interchanged and D(k,k) is a 1-by-1 diagonal block.
*> If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and
*> \param[in,out] CNORM
*> \verbatim
*> CNORM is or output) DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
*> contains the norm of the off-diagonal part of the j-th column
*> of A. If TRANS = 'N', CNORM(j) must be greater than or equal
*> to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
*> must be greater than or equal to the 1-norm.
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'N', CNORM is an output argument and CNORM(j)
*> returns the 1-norm of the offdiagonal part of the j-th column
*> of A.
*> \param[in,out] CNORM
*> \verbatim
*> CNORM is or output) DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
*> contains the norm of the off-diagonal part of the j-th column
*> of A. If TRANS = 'N', CNORM(j) must be greater than or equal
*> to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
*> must be greater than or equal to the 1-norm.
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'N', CNORM is an output argument and CNORM(j)
*> returns the 1-norm of the offdiagonal part of the j-th column
*> of A.
*> \param[in,out] CNORM
*> \verbatim
*> CNORM is or output) DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
*> contains the norm of the off-diagonal part of the j-th column
*> of A. If TRANS = 'N', CNORM(j) must be greater than or equal
*> to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
*> must be greater than or equal to the 1-norm.
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'N', CNORM is an output argument and CNORM(j)
*> returns the 1-norm of the offdiagonal part of the j-th column
*> of A.
*> (M,1) if SIDE = 'R'
*> On entry, the n-vector C1 if SIDE = 'L', or the m-vector C1
*> if SIDE = 'R'.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the first row of P*C if SIDE = 'L', or the first
*> column of C*P if SIDE = 'R'.
*> \endverbatim
*> (LDC, N-1) if SIDE = 'R'
*> On entry, the (m - 1) x n matrix C2 if SIDE = 'L', or the
*> m x (n - 1) matrix C2 if SIDE = 'R'.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, rows 2:m of P*C if SIDE = 'L', or columns 2:m of C*P
*> if SIDE = 'R'.
*> \endverbatim
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= M-Q.
-*> \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
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK.
-*> \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
*> < 0: if INFO = -i, the i-th argument had an illegal value.
*> > 0: DBBCSD did not converge. See the description of WORK
*> above for details.
-*> \endverbatim
-*> \verbatim
+*>
*> Reference
*> =========
-*> \endverbatim
-*> \verbatim
+*>
*> [1] Brian D. Sutton. Computing the complete CS decomposition. Numer.
*> Algorithms, 50(1):33-65, 2009.
*> \endverbatim
*> The dimension of the array WORK. LWORK >= max(1,min(M,N)).
*> For optimum performance LWORK >= min(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
*> \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).
*> The dimension of the array WORK. LWORK >= IHI-ILO.
*> For optimum performance LWORK >= (IHI-ILO)*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
*> 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
*> 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
*> 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
*> 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
*> The dimension of the array WORK. LWORK >= max(1,N-1).
*> For optimum performance LWORK >= (N-1)*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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> \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).
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor S from the split Cholesky
*> factorization A = S**T*S. See Further Details.
*> \endverbatim
*> 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).
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**T*U or A = L*L**T of the band
*> matrix A, in the same storage format as A.
*> 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).
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**T*U or A = L*L**T of the band matrix
*> A, in the same storage format as A (see AB). If EQUED = 'Y',
*> then AFB is the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFB is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AFB is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the equilibrated
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**T*U or A = L*L**T of the band
*> matrix A, in the same storage format as A.
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**T*U or A = L*L**T of the band
*> matrix A, in the same storage format as A.
*> of lower packed A. The LDA of RFP A is (N+1)/2 when TRANSR =
*> 'T'. When TRANSR is 'N' the LDA is N+1 when N is even and N
*> is odd. See the Note below for more details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization RFP A = U**T*U or RFP A = L*L**T.
*> \endverbatim
*> of lower packed A. The LDA of RFP A is (N+1)/2 when TRANSR =
*> 'T'. When TRANSR is 'N' the LDA is N+1 when N is even and N
*> is odd. See the Note below for more details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the symmetric inverse of the original matrix, in the
*> same storage format.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T.
*> \endverbatim
*> triangular part of the matrix A, and the strictly upper
*> triangular part of A is not referenced. A is not modified if
*> FACT = 'F' or 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**T*U or A = L*L**T, in the same storage
*> format as A. If EQUED .ne. 'N', then AF is the factored form
*> of the equilibrated matrix diag(S)*A*diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the original
*> matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the equilibrated
*> the strictly upper triangular part of A is not referenced. A is
*> not modified if FACT = 'F' or 'N', or if FACT = 'E' and EQUED =
*> 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**T*U or A = L*L**T, in the same storage
*> format as A. If EQUED .ne. 'N', then AF is the factored
*> form of the equilibrated matrix diag(S)*A*diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the original
*> matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the equilibrated
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> computed.
*> = 1.0 : Use the extra-precise refinement algorithm.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**T *U or A = L*L**T.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T, in the same storage
*> format as A.
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details. A is not modified if
*> FACT = 'F' or 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**T*U or A = L*L**T, in the same storage
*> format as A. If EQUED .ne. 'N', then AFP is the factored
*> form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFP is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T * U or A = L * L**T of the original
*> matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AFP is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T * U or A = L * L**T of the equilibrated
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**T*U or A = L*L**T, in the same
*> storage format as A.
*> array AP as follows:
*> if UPLO = 'U', AP(i + (j-1)*j/2) = U(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = L(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the upper or lower triangle of the (symmetric)
*> inverse of A, overwriting the input factor U or L.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization as above.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization as above.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AB is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the first
*> superdiagonal and the diagonal of the tridiagonal matrix T
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AB is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the first
*> superdiagonal and the diagonal of the tridiagonal matrix T
*> If JOBZ = 'N' and N > 2, LWORK must be at least 2*N.
*> If JOBZ = 'V' and N > 2, LWORK must be at least
*> ( 1 + 5*N + 2*N**2 ).
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> The dimension of the array LIWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 2, LIWORK must be at least 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AB is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the first
*> superdiagonal and the diagonal of the tridiagonal matrix T
*> 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 AB to tridiagonal form.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*DLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the transformed matrix X**T*A*X, stored in the same
*> format as A.
*> \endverbatim
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AB are destroyed.
*> \endverbatim
*>
*> as follows:
*> if UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
*> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the factor S from the split Cholesky factorization
*> B = S**T*S, as returned by DPBSTF.
*> \endverbatim
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AB are destroyed.
*> \endverbatim
*>
*> as follows:
*> if UPLO = 'U', BB(ka+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
*> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the factor S from the split Cholesky factorization
*> B = S**T*S, as returned by DPBSTF.
*> \endverbatim
*> If N <= 1, LWORK >= 1.
*> If JOBZ = 'N' and N > 1, LWORK >= 3*N.
*> If JOBZ = 'V' and N > 1, LWORK >= 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> The dimension of the array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK >= 1.
*> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AB are destroyed.
*> \endverbatim
*>
*> as follows:
*> if UPLO = 'U', BB(ka+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
*> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the factor S from the split Cholesky factorization
*> B = S**T*S, as returned by DPBSTF.
*> \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'.
*> \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.
*> 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 A to tridiagonal form.
-*> \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
*> Q is DOUBLE PRECISION array, dimension (LDQ,N)
*> On entry, if VECT = 'U', then Q must contain an N-by-N
*> matrix X; if VECT = 'N' or 'V', then Q need not be set.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit:
*> if VECT = 'V', Q contains the N-by-N orthogonal matrix Q;
*> if VECT = 'U', Q contains the product X*Q;
*> 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \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
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AP is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the diagonal
*> and first superdiagonal of the tridiagonal matrix T overwrite
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AP is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the diagonal
*> and first superdiagonal of the tridiagonal matrix T overwrite
*> If JOBZ = 'N' and N > 1, LWORK must be at least 2*N.
*> If JOBZ = 'V' and N > 1, LWORK must be at least
*> 1 + 6*N + N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the required sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> The dimension of the array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 1, LIWORK must be at least 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the required sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AP is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the diagonal
*> and first superdiagonal of the tridiagonal matrix T overwrite
*> 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 AP to tridiagonal form.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*DLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the transformed matrix, stored in the
*> same format as A.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AP are destroyed.
*> \endverbatim
*>
*> is stored in the array BP as follows:
*> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j;
*> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the triangular factor U or L from the Cholesky
*> factorization B = U**T*U or B = L*L**T, in the same storage
*> format as B.
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AP are destroyed.
*> \endverbatim
*>
*> is stored in the array BP as follows:
*> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j;
*> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the triangular factor U or L from the Cholesky
*> factorization B = U**T*U or B = L*L**T, in the same storage
*> format as B.
*> If N <= 1, LWORK >= 1.
*> If JOBZ = 'N' and N > 1, LWORK >= 2*N.
*> If JOBZ = 'V' and N > 1, LWORK >= 1 + 6*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the required sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> The dimension of the array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK >= 1.
*> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the required sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AP are destroyed.
*> \endverbatim
*>
*> is stored in the array BP as follows:
*> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j;
*> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the triangular factor U or L from the Cholesky
*> factorization B = U**T*U or B = L*L**T, in the same storage
*> format as B.
*> \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'.
*> \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.
*> 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 A to tridiagonal form.
-*> \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.
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> A = U*D*U**T or A = L*D*L**T as computed by DSPTRF, stored as
*> to obtain the factor U or L from the factorization
*> A = U*D*U**T or A = L*D*L**T as computed by DSPTRF, stored as
*> a packed triangular matrix in the same storage format as A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFP is an output argument and on exit
*> contains the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) =
*> IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were
*> interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block structure
*> of D, as determined by DSPTRF.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L, stored as a packed triangular
*> matrix overwriting A (see below for further details).
*> On entry, the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by DSPTRF,
*> stored as a packed triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix, stored as a packed triangular matrix. The j-th column
*> of inv(A) is stored in the array AP as follows:
*> \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.
*> \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.
*> determined to lie in an interval whose width is ABSTOL or
*> less. If ABSTOL is less than or equal to zero, then ULP*|T|
*> will be used, where |T| means the 1-norm of T.
-*> \endverbatim
-*> \verbatim
+*>
*> Eigenvalues will be computed most accurately when ABSTOL is
*> set to twice the underflow threshold 2*DLAMCH('S'), not zero.
*> \endverbatim
*> floating-point arithmetic.
*> Cure: Increase the PARAMETER "FUDGE",
*> recompile, and try again.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> RELFAC DOUBLE PRECISION, default = 2.0e0
*> The relative tolerance. An interval (a,b] lies within
*> "relative tolerance" if b-a < RELFAC*ulp*max(|a|,|b|),
*> where "ulp" is the machine precision (distance from 1 to
*> the next larger floating point number.)
-*> \endverbatim
-*> \verbatim
+*>
*> FUDGE DOUBLE PRECISION, default = 2
*> A "fudge factor" to widen the Gershgorin intervals. Ideally,
*> a value of 1 should work, but on machines with sloppy
*> Note that for COMPZ = 'I' or 'V', then if N is less than or
*> equal to the minimum divide size, usually 25, then LWORK need
*> only be max(1,2*(N-1)).
-*> \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
*> Note that for COMPZ = 'I' or 'V', then if N is less than or
*> equal to the minimum divide size, usually 25, then LIWORK
*> need only be 1.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal size of the IWORK array,
*> returns this value as the first entry of the IWORK array, and
*> \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'.
*> \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.
*> > 0: if INFO = i, then i eigenvectors failed to converge
*> in MAXITS iterations. Their indices are stored in
*> array IFAIL.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> MAXITS INTEGER, default = 5
*> The maximum number of iterations performed.
-*> \endverbatim
-*> \verbatim
+*>
*> EXTRA INTEGER, default = 2
*> The number of iterations performed after norm growth
*> criterion is satisfied, should be at least 1.
*> \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'.
*> \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.
*> If JOBZ = 'N' or N <= 1 then LWORK must be at least 1.
*> If JOBZ = 'V' and N > 1 then LWORK must be at least
*> ( 1 + 4*N + N**2 ).
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> The dimension of the array IWORK.
*> If JOBZ = 'N' or N <= 1 then LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 1 then LIWORK must be at least 3+5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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 A to tridiagonal form.
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
-*> \endverbatim
-*> \verbatim
+*>
*> If high relative accuracy is important, set ABSTOL to
*> DLAMCH( 'Safe minimum' ). Doing so will guarantee that
*> eigenvalues are computed to high relative accuracy when
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,20*N).
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> \verbatim
*> LIWORK is INTEGER
*> The dimension of the array IWORK. LIWORK >= max(1,10*N).
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*DLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> The length of the array WORK. LWORK >= max(1,3*N-1).
*> For optimal efficiency, LWORK >= (NB+2)*N,
*> where NB is the blocksize for DSYTRD returned by ILAENV.
-*> \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
*> If JOBZ = 'N' and N > 1, LWORK must be at least 2*N+1.
*> If JOBZ = 'V' and N > 1, LWORK must be at least
*> 1 + 6*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> If N <= 1, LIWORK must be at least 1.
*> If JOBZ = 'N' and N > 1, LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 1, LIWORK must be at least 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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 A to tridiagonal form.
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
-*> \endverbatim
-*> \verbatim
+*>
*> If high relative accuracy is important, set ABSTOL to
*> DLAMCH( 'Safe minimum' ). Doing so will guarantee that
*> eigenvalues are computed to high relative accuracy when
*> For optimal efficiency, LWORK >= (NB+6)*N,
*> where NB is the max of the blocksize for DSYTRD and DORMTR
*> returned by ILAENV.
-*> \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
*> \verbatim
*> LIWORK is INTEGER
*> The dimension of the array IWORK. LIWORK >= max(1,10*N).
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal size of the IWORK array,
*> returns this value as the first entry of the IWORK array, and
*> 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 A to tridiagonal form.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*DLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> For optimal efficiency, LWORK >= (NB+3)*N,
*> where NB is the max of the blocksize for DSYTRD and DORMTR
*> returned by ILAENV.
-*> \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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the transformed matrix, stored in the
*> same format as A.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the transformed matrix, stored in the
*> same format as A.
*> \endverbatim
*> 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, if JOBZ = 'V', then if INFO = 0, A contains the
*> matrix Z of eigenvectors. The eigenvectors are normalized
*> as follows:
*> contains the 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**T*U or B = L*L**T.
*> The length of the array WORK. LWORK >= max(1,3*N-1).
*> For optimal efficiency, LWORK >= (NB+2)*N,
*> where NB is the blocksize for DSYTRD returned by ILAENV.
-*> \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
*> 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, if JOBZ = 'V', then if INFO = 0, A contains the
*> matrix Z of eigenvectors. The eigenvectors are normalized
*> as follows:
*> 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**T*U or B = L*L**T.
*> If N <= 1, LWORK >= 1.
*> If JOBZ = 'N' and N > 1, LWORK >= 2*N+1.
*> If JOBZ = 'V' and N > 1, LWORK >= 1 + 6*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> If N <= 1, LIWORK >= 1.
*> If JOBZ = 'N' and N > 1, LIWORK >= 1.
*> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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**T*U or B = L*L**T.
*> 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.
*> The length of the array WORK. LWORK >= max(1,8*N).
*> For optimal efficiency, LWORK >= (NB+3)*N,
*> where NB is the blocksize for DSYTRD returned by ILAENV.
-*> \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
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the block diagonal matrix D and the
*> multipliers used to obtain the factor U or L from the
*> factorization A = U*D*U**T or A = L*D*L**T as computed by
*> DSYTRF.
*> for LWORK < N, TRS will be done with Level BLAS 2
*> for LWORK >= N, TRS will be done with Level BLAS 3
-*> \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
*> contains the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> A = U*D*U**T or A = L*D*L**T as computed by DSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) =
*> IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were
*> interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block structure
*> of D, as determined by DSYTRF.
*> The length of WORK. LWORK >= max(1,3*N), and for best
*> performance, when FACT = 'N', LWORK >= max(1,3*N,N*NB), where
*> NB is the optimal blocksize for DSYTRF.
-*> \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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> contains the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L from the factorization A =
*> U*D*U**T or A = L*D*L**T as computed by DSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L from the factorization A =
*> diagonal block. If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0,
*> then rows and columns k+1 and -IPIV(k) were interchanged
*> and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block
*> structure of D, as determined by DSYTRF.
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> computed.
*> = 1.0 : Use the extra-precise refinement algorithm.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> A is DOUBLE PRECISION array, dimension (LDA,N)
*> On entry, the NB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by DSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L (see below for further details).
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L (see below for further details).
*> \endverbatim
*> LWORK is INTEGER
*> The length of WORK. LWORK >=1. For best performance
*> LWORK >= N*NB, where NB is the block size returned by ILAENV.
-*> \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
*> A is DOUBLE PRECISION array, dimension (LDA,N)
*> On entry, the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by DSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> A is DOUBLE PRECISION array, dimension (LDA,N)
*> On entry, the NB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by DSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> A is DOUBLE PRECISION array, dimension (LDA,N)
*> On entry, the NNB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by DSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> an upper or lower triangular matrix as follows:
*> UPLO = 'U' or 'u' RFP A came from an upper triangular matrix
*> UPLO = 'L' or 'l' RFP A came from a lower triangular matrix
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the form of op( A ) to be used
*> in the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' op( A ) = A'.
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not RFP 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> elements of lower packed A. The LDA of RFP A is (N+1)/2 when
*> TRANSR = 'T'. When TRANSR is 'N' the LDA is N+1 when N is
*> even and N is odd. See the Note below for more details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the (triangular) inverse of the original matrix, in
*> the same storage format.
*> \endverbatim
*> if HOWMNY = 'S', the left eigenvectors of (S,P) specified by
*> SELECT, stored consecutively in the columns of
*> VL, in the same order as their eigenvalues.
-*> \endverbatim
-*> \verbatim
+*>
*> A complex eigenvector corresponding to a complex eigenvalue
*> is stored in two consecutive columns, the first holding the
*> real part, and the second the imaginary part.
-*> \endverbatim
-*> \verbatim
+*>
*> Not referenced if SIDE = 'R'.
*> \endverbatim
*>
*> On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B', VR must
*> contain an N-by-N matrix Z (usually the orthogonal matrix Z
*> of right Schur vectors returned by DHGEQZ).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if SIDE = 'R' or 'B', VR contains:
*> if HOWMNY = 'A', the matrix X of right eigenvectors of (S,P);
*> if HOWMNY = 'B' or 'b', the matrix Z*X;
*> specified by SELECT, stored consecutively in the
*> columns of VR, in the same order as their
*> eigenvalues.
-*> \endverbatim
-*> \verbatim
+*>
*> A complex eigenvector corresponding to a complex eigenvalue
*> is stored in two consecutive columns, the first holding the
*> real part and the second the imaginary part.
*> LWORK is INTEGER
*> The dimension of the array WORK.
*> LWORK >= 1 when N <= 1, otherwise LWORK >= 4*N + 16.
-*> \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
*> \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
*> \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.
*> The dimension of the array WORK. LWORK >= 4*N+16.
*> If IJOB = 1, 2 or 4, LWORK >= MAX(4*N+16, 2*M*(N-M)).
*> If IJOB = 3 or 5, LWORK >= MAX(4*N+16, 4*M*(N-M)).
-*> \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 dimension of the array IWORK. LIWORK >= 1.
*> If IJOB = 1, 2 or 4, LIWORK >= N+6.
*> If IJOB = 3 or 5, LIWORK >= MAX(2*M*(N-M), N+6).
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal size of the IWORK array,
*> returns this value as the first entry of the IWORK array, and
*> \param[in] L
*> \verbatim
*> L is INTEGER
-*> \endverbatim
-*> \verbatim
+*>
*> 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.
*> \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
*> \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,
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N).
*> If JOB = 'V' or 'B' LWORK >= 2*N*(N+2)+16.
-*> \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
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK > = 1.
*> If IJOB = 1 or 2 and TRANS = 'N', LWORK >= max(1,2*M*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
*> \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.
*> \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
*> If JOB = 'N', LWORK >= max(1,N);
*> if JOB = 'E', LWORK >= max(1,M*(N-M));
*> if JOB = 'V' or 'B', LWORK >= max(1,2*M*(N-M)).
-*> \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 dimension of the array IWORK.
*> If JOB = 'N' or 'E', LIWORK >= 1;
*> if JOB = 'V' or 'B', LIWORK >= max(1,M*(N-M)).
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal size of the IWORK array,
*> returns this value as the first entry of the IWORK array, and
*> triangular part of A is not referenced. If DIAG = 'U', the
*> diagonal elements of A are also not referenced and are
*> assumed to be 1.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the (triangular) inverse of the original matrix, in
*> the same storage format.
*> \endverbatim
*> 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
*> Must contain the value 1.0
*> This is passed to prevent the compiler from optimizing
*> away this code.
-*> \endverbatim
-*> \verbatim
+*>
*> RETURN VALUE: INTEGER
*> = 0: Arithmetic failed to produce the correct answers
*> = 1: Arithmetic produced the correct answers
*> ISPEC is integer scalar
*> ISPEC specifies which tunable parameter IPARMQ should
*> return.
-*> \endverbatim
-*> \verbatim
+*>
*> ISPEC=12: (INMIN) Matrices of order nmin or less
*> are sent directly to xLAHQR, the implicit
*> double shift QR algorithm. NMIN must be
*> at least 11.
-*> \endverbatim
-*> \verbatim
+*>
*> ISPEC=13: (INWIN) Size of the deflation window.
*> This is best set greater than or equal to
*> the number of simultaneous shifts NS.
*> Larger matrices benefit from larger deflation
*> windows.
-*> \endverbatim
-*> \verbatim
+*>
*> ISPEC=14: (INIBL) Determines when to stop nibbling and
*> invest in an (expensive) multi-shift QR sweep.
*> If the aggressive early deflation subroutine
*> IPARMQ(ISPEC=14) greater than or equal to 100
*> prevents TTQRE from skipping a multi-shift
*> QR sweep.
-*> \endverbatim
-*> \verbatim
+*>
*> ISPEC=15: (NSHFTS) The number of simultaneous shifts in
*> a multi-shift QR iteration.
-*> \endverbatim
-*> \verbatim
+*>
*> ISPEC=16: (IACC22) IPARMQ is set to 0, 1 or 2 with the
*> following meanings.
*> 0: During the multi-shift QR sweep,
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= MAX(1,8*Q).
-*> \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
*> > 0: if SBBCSD did not converge, INFO specifies the number
*> of nonzero entries in PHI, and B11D, B11E, etc.,
*> contain the partially reduced matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> Reference
*> =========
-*> \endverbatim
-*> \verbatim
+*>
*> [1] Brian D. Sutton. Computing the complete CS decomposition. Numer.
*> Algorithms, 50(1):33-65, 2009.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> TOLMUL REAL, default = MAX(10,MIN(100,EPS**(-1/8)))
*> TOLMUL controls the convergence criterion of the QR loop.
*> Angles THETA(i), PHI(i) are rounded to 0 or PI/2 when they
*> elements of a bidiagonal matrix which is orthogonally
*> similar to the input matrix B; if INFO = i, i
*> elements of E have not converged to zero.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> TOLMUL REAL, default = max(10,min(100,EPS**(-1/8)))
*> TOLMUL controls the convergence criterion of the QR loop.
*> If it is positive, TOLMUL*EPS is the desired relative
*> Default is to lose at either one eighth or 2 of the
*> available decimal digits in each computed singular value
*> (whichever is smaller).
-*> \endverbatim
-*> \verbatim
+*>
*> MAXITR INTEGER, default = 6
*> MAXITR controls the maximum number of passes of the
*> algorithm through its inner loop. The algorithms stops
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(KU+1+i-j,j) = A(i,j) for max(1,j-KU)<=i<=min(N,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'F' and EQUED is not 'N', then A must have been
*> equilibrated by the scaling factors in R and/or C. AB is not
*> modified if FACT = 'F' or 'N', or if FACT = 'E' and
*> EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> and the multipliers used during the factorization are stored
*> in rows KL+KU+2 to 2*KL+KU+1. If EQUED .ne. 'N', then AFB is
*> the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFB is an output argument and on exit
*> returns details of the LU factorization of A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AFB is an output argument and on exit
*> returns details of the LU factorization of the equilibrated
*> matrix A (see the description of AB for the form of the
*> contains the pivot indices from the factorization A = L*U
*> as computed by SGBTRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = L*U
*> of the equilibrated matrix A.
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(KU+1+i-j,j) = A(i,j) for max(1,j-KU)<=i<=min(N,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'F' and EQUED is not 'N', then AB must have been
*> equilibrated by the scaling factors in R and/or C. AB is not
*> modified if FACT = 'F' or 'N', or if FACT = 'E' and
*> EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> and the multipliers used during the factorization are stored
*> in rows KL+KU+2 to 2*KL+KU+1. If EQUED .ne. 'N', then AFB is
*> the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the equilibrated matrix A (see the description of A for
*> contains the pivot indices from the factorization A = P*L*U
*> as computed by SGETRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the equilibrated matrix A.
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(kl+ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, details of the factorization: U is stored as an
*> upper triangular band matrix with KL+KU superdiagonals in
*> rows 1 to KL+KU+1, and the multipliers used during the
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(kl+ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, details of the factorization: U is stored as an
*> upper triangular band matrix with KL+KU superdiagonals in
*> rows 1 to KL+KU+1, and the multipliers used during the
*> 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
*> returned if LWORK < max(1,3*N), but if SENSE = 'E' or 'V' or
*> 'B' this may not be large enough.
*> For good performance, LWORK must generally be larger.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates upper bounds on the optimal sizes of the
*> arrays WORK and IWORK, returns these values as the first
*> Note that SDIM*(N-SDIM) <= N*N/4. Note also that an error is
*> only returned if LIWORK < 1, but if SENSE = 'V' or 'B' this
*> may not be large enough.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates upper bounds on the optimal sizes of
*> the arrays WORK and IWORK, returns these values as the first
*> The dimension of the array WORK. LWORK >= max(1,3*N), and
*> if JOBVL = 'V' or JOBVR = 'V', LWORK >= 4*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
*> to make the rows and columns of A more equal in
*> norm. Do not permute;
*> = 'B': Both diagonally scale and permute A.
-*> \endverbatim
-*> \verbatim
+*>
*> Computed reciprocal condition numbers will be for the matrix
*> after balancing and/or permuting. Permuting does not change
*> condition numbers (in exact arithmetic), but balancing does.
*> = 'E': Computed for eigenvalues only;
*> = 'V': Computed for right eigenvectors only;
*> = 'B': Computed for eigenvalues and right eigenvectors.
-*> \endverbatim
-*> \verbatim
+*>
*> If SENSE = 'E' or 'B', both left and right eigenvectors
*> must also be computed (JOBVL = 'V' and JOBVR = 'V').
*> \endverbatim
*> LWORK >= max(1,2*N), and if JOBVL = 'V' or JOBVR = 'V',
*> LWORK >= 3*N. If SENSE = 'V' or 'B', LWORK >= N*(N+6).
*> 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
*> blocksizes (for SGEQRF, SORMQR, and SORGQR.) Then compute:
*> NB -- MAX of the blocksizes for SGEQRF, SORMQR, and SORGQR
*> The optimal LWORK is 2*N + N*(NB+1).
-*> \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
*> u(j) = VL(:,j) + i*VL(:,j+1)
*> and
*> u(j+1) = VL(:,j) - i*VL(:,j+1).
-*> \endverbatim
-*> \verbatim
+*>
*> Each eigenvector is scaled so that its largest component has
*> abs(real part) + abs(imag. part) = 1, except for eigenvectors
*> corresponding to an eigenvalue with alpha = beta = 0, which
*> x(j) = VR(:,j) + i*VR(:,j+1)
*> and
*> x(j+1) = VR(:,j) - i*VR(:,j+1).
-*> \endverbatim
-*> \verbatim
+*>
*> Each eigenvector is scaled so that its largest component has
*> abs(real part) + abs(imag. part) = 1, except for eigenvalues
*> corresponding to an eigenvalue with alpha = beta = 0, which
*> NB -- MAX of the blocksizes for SGEQRF, SORMQR, and SORGQR;
*> The optimal LWORK is:
*> 2*N + MAX( 6*N, N*(NB+1) ).
-*> \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
*> \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 SGEBAL; otherwise they should be
*> \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 SGEBAL; otherwise they should be
*> 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
*> For optimal performance,
*> LWORK >= max( 1, MN + max( MN, NRHS )*NB ).
*> where MN = min(M,N) and NB is the optimum block size.
-*> \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
*> tree (usually about 25), and
*> NLVL = MAX( 0, INT( LOG_2( MIN( M,N )/(SMLSIZ+1) ) ) + 1 )
*> For good performance, LWORK should generally be larger.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the array WORK and the
*> minimum size of the array IWORK, and returns these values as
*> The dimension of the array WORK. LWORK >= 1, and also:
*> LWORK >= 3*min(M,N) + max( 2*min(M,N), max(M,N), NRHS )
*> For good performance, LWORK should 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
*> where NB is an upper bound on the blocksize returned
*> by ILAENV for the routines SGEQP3, STZRZF, STZRQF, SORMQR,
*> and SORMRZ.
-*> \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 dimension of the array WORK. LWORK >= 3*N+1.
*> For optimal performance LWORK >= 2*N+( N+1 )*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
*> 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
*> 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
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> vectors) are overwritten on the array A;
*> = 'N': no rows of V**T (no right singular vectors) are
*> computed.
-*> \endverbatim
-*> \verbatim
+*>
*> JOBVT and JOBU cannot both be 'O'.
*> \endverbatim
*>
*> - PATH 1t (N much larger than M, JOBVT='N')
*> LWORK >= MAX(1,3*MIN(M,N)+MAX(M,N),5*MIN(M,N)) for the other paths
*> For good performance, LWORK should 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 singular values of A are SCALE*SVA(1:N), and this
*> factored representation is due to the fact that some of the
*> singular values of A might underflow or overflow.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 :
*> the procedure SGESVJ did not converge in the given number of
*> iterations (sweeps) and SCALE*SVA(1:N) may not be accurate.
*> not 'N', then A must have been equilibrated by the scaling
*> factors in R and/or C. A is not modified if FACT = 'F' or
*> 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> contains the factors L and U from the factorization
*> A = P*L*U as computed by SGETRF. If EQUED .ne. 'N', then
*> AF is the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the equilibrated matrix A (see the description of A for
*> contains the pivot indices from the factorization A = P*L*U
*> as computed by SGETRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the equilibrated matrix A.
*> not 'N', then A must have been equilibrated by the scaling
*> factors in R and/or C. A is not modified if FACT = 'F' or
*> 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> contains the factors L and U from the factorization
*> A = P*L*U as computed by SGETRF. If EQUED .ne. 'N', then
*> AF is the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the equilibrated matrix A (see the description of A for
*> contains the pivot indices from the factorization A = P*L*U
*> as computed by SGETRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the equilibrated matrix A.
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> The dimension of the array WORK. LWORK >= max(1,N).
*> For optimal performance LWORK >= N*NB, where NB is
*> the optimal blocksize returned by ILAENV.
-*> \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
*> SELCTG(ALPHAR(j),ALPHAI(j),BETA(j)) is true; i.e. if either
*> one of a complex conjugate pair of eigenvalues is selected,
*> then both complex eigenvalues are selected.
-*> \endverbatim
-*> \verbatim
+*>
*> Note that in the ill-conditioned case, a selected complex
*> eigenvalue may no longer satisfy SELCTG(ALPHAR(j),ALPHAI(j),
*> BETA(j)) = .TRUE. after ordering. INFO is to be set to N+2
*> If ALPHAI(j) is zero, then the j-th eigenvalue is real; if
*> positive, then the j-th and (j+1)-st eigenvalues are a
*> complex conjugate pair, with ALPHAI(j+1) negative.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(j)/BETA(j)
*> may easily over- or underflow, and BETA(j) may even be zero.
*> Thus, the user should avoid naively computing the ratio.
*> The dimension of the array WORK.
*> If N = 0, LWORK >= 1, else LWORK >= max(8*N,6*N+16).
*> 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
*> If ALPHAI(j) is zero, then the j-th eigenvalue is real; if
*> positive, then the j-th and (j+1)-st eigenvalues are a
*> complex conjugate pair, with ALPHAI(j+1) negative.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(j)/BETA(j)
*> may easily over- or underflow, and BETA(j) may even be zero.
*> Thus, the user should avoid naively computing the ratio.
*> Note also that an error is only returned if
*> LWORK < max( 8*N, 6*N+16), but if SENSE = 'E' or 'V' or 'B'
*> this may not be large enough.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the bound on the optimal size of the WORK
*> array and the minimum size of the IWORK array, returns these
*> The dimension of the array IWORK.
*> If SENSE = 'N' or N = 0, LIWORK >= 1, otherwise
*> LIWORK >= N+6.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the bound on the optimal size of the
*> WORK array and the minimum size of the IWORK array, returns
*> the j-th eigenvalue is real; if positive, then the j-th and
*> (j+1)-st eigenvalues are a complex conjugate pair, with
*> ALPHAI(j+1) negative.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(j)/BETA(j)
*> may easily over- or underflow, and BETA(j) may even be zero.
*> Thus, the user should avoid naively computing the ratio
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,8*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 j-th eigenvalue is real; if positive, then the j-th and
*> (j+1)-st eigenvalues are a complex conjugate pair, with
*> ALPHAI(j+1) negative.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(j)/BETA(j)
*> may easily over- or underflow, and BETA(j) may even be zero.
*> Thus, the user should avoid naively computing the ratio
*> LWORK >= max(1,6*N).
*> If SENSE = 'E', LWORK >= max(1,10*N).
*> If SENSE = 'V' or 'B', LWORK >= 2*N*N+8*N+16.
-*> \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
*> \param[out] Y
*> \verbatim
*> Y is REAL array, dimension (P)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, X and Y are the solutions of the GLM problem.
*> \endverbatim
*>
*> For optimum performance, LWORK >= M+min(N,P)+max(N,P)*NB,
*> where NB is an upper bound for the optimal blocksizes for
*> SGEQRF, SGERQF, SORMQR and SORMRQ.
-*> \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
*> \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
*> For optimum performance LWORK >= P+min(M,N)+max(M,N)*NB,
*> where NB is an upper bound for the optimal blocksizes for
*> SGEQRF, SGERQF, SORMQR and SORMRQ.
-*> \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
*> \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**T,B**T)**T.
*> \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,
*> < 0: if INFO = -i, the i-th argument had an illegal value.
*> > 0: if INFO = 1, the Jacobi-type procedure failed to
*> converge. For further details, see subroutine STGSJA.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> TOLA REAL
*> TOLB REAL
*> TOLA and TOLB are the thresholds to determine the effective
*> \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
*> \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.
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> DL is REAL array, dimension (N-1)
*> On entry, DL must contain the (n-1) sub-diagonal elements of
*> A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, DL is overwritten by the (n-2) elements of the
*> second super-diagonal of the upper triangular matrix U from
*> the LU factorization of A, in DL(1), ..., DL(n-2).
*> \verbatim
*> D is REAL array, dimension (N)
*> On entry, D must contain the diagonal elements of A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, D is overwritten by the n diagonal elements of U.
*> \endverbatim
*>
*> DU is REAL array, dimension (N-1)
*> On entry, DU must contain the (n-1) super-diagonal elements
*> of A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, DU is overwritten by the (n-1) elements of the first
*> super-diagonal of U.
*> \endverbatim
*> If FACT = 'F', then DLF is an input argument and on entry
*> contains the (n-1) multipliers that define the matrix L from
*> the LU factorization of A as computed by SGTTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DLF is an output argument and on exit
*> contains the (n-1) multipliers that define the matrix L from
*> the LU factorization of A.
*> If FACT = 'F', then DF is an input argument and on entry
*> contains the n diagonal elements of the upper triangular
*> matrix U from the LU factorization of A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DF is an output argument and on exit
*> contains the n diagonal elements of the upper triangular
*> matrix U from the LU factorization of A.
*> DUF is or output) REAL array, dimension (N-1)
*> If FACT = 'F', then DUF is an input argument and on entry
*> contains the (n-1) elements of the first superdiagonal of U.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DUF is an output argument and on exit
*> contains the (n-1) elements of the first superdiagonal of U.
*> \endverbatim
*> If FACT = 'F', then DU2 is an input argument and on entry
*> contains the (n-2) elements of the second superdiagonal of
*> U.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DU2 is an output argument and on exit
*> contains the (n-2) elements of the second superdiagonal of
*> U.
*> If FACT = 'F', then IPIV is an input argument and on entry
*> contains the pivot indices from the LU factorization of A as
*> computed by SGTTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the LU factorization of A;
*> row i of the matrix was interchanged with row IPIV(i).
*> DL is REAL array, dimension (N-1)
*> On entry, DL must contain the (n-1) sub-diagonal elements of
*> A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, DL is overwritten by the (n-1) multipliers that
*> define the matrix L from the LU factorization of A.
*> \endverbatim
*> \verbatim
*> D is REAL array, dimension (N)
*> On entry, D must contain the diagonal elements of A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, D is overwritten by the n diagonal elements of the
*> upper triangular matrix U from the LU factorization of A.
*> \endverbatim
*> DU is REAL array, dimension (N-1)
*> On entry, DU must contain the (n-1) super-diagonal elements
*> of A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, DU is overwritten by the (n-1) elements of the first
*> super-diagonal of U.
*> \endverbatim
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,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
*> \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.
*> \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 ZGEHRD
*> contents of H are unspecified on exit. (The output value of
*> H when INFO.GT.0 is given under the description of INFO
*> below.)
-*> \endverbatim
-*> \verbatim
+*>
*> Unlike earlier versions of SHSEQR, this subroutine may
*> explicitly H(i,j) = 0 for i.GT.j and j = 1, 2, ... ILO-1
*> or j = IHI+1, IHI+2, ... N.
*> \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
*> may be required for optimal performance. A workspace
*> query is recommended to determine the optimal workspace
*> size.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then SHSEQR does a workspace query.
*> In this case, SHSEQR checks the input parameters and
*> estimates the optimal workspace size for the given
*> TRANS is INTEGER
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> BLAS_NO_TRANS y := alpha*abs(A)*abs(x) + beta*abs(y)
*> BLAS_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
*> BLAS_CONJ_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> On entry, INCY specifies the increment for the elements of
*> Y. INCY must not be zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> Level 2 Blas routine.
*> \endverbatim
*>
*> TRANS is INTEGER
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> BLAS_NO_TRANS y := alpha*abs(A)*abs(x) + beta*abs(y)
*> BLAS_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
*> BLAS_CONJ_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> On entry, INCY specifies the increment for the elements of
*> Y. INCY must not be zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> Level 2 Blas routine.
*> \endverbatim
*>
*> 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
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = BLAS_UPPER Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = BLAS_LOWER Only the lower triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> 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
*> INFO is INTEGER
*> = 0: successful exit
*> > 0: if INFO = 1, the updating process failed.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> Logical variable ORGATI (origin-at-i?) is used for distinguishing
*> whether D(i) or D(i+1) is treated as the origin.
-*> \endverbatim
-*> \verbatim
+*>
*> ORGATI = .true. origin at i
*> ORGATI = .false. origin at i+1
-*> \endverbatim
-*> \verbatim
+*>
*> Logical variable SWTCH3 (switch-for-3-poles?) is for noting
*> if we are working with THREE poles!
-*> \endverbatim
-*> \verbatim
+*>
*> MAXIT is the maximum number of iterations allowed for each
*> eigenvalue.
*> \endverbatim
*> \verbatim
*> A is REAL array, dimension (N)
*> On entry, A must contain the diagonal elements of T.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, A is overwritten by the n diagonal elements of the
*> upper triangular matrix U of the factorization of T.
*> \endverbatim
*> B is REAL array, dimension (N-1)
*> On entry, B must contain the (n-1) super-diagonal elements of
*> T.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, B is overwritten by the (n-1) super-diagonal
*> elements of the matrix U of the factorization of T.
*> \endverbatim
*> C is REAL array, dimension (N-1)
*> On entry, C must contain the (n-1) sub-diagonal elements of
*> T.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, C is overwritten by the (n-1) sub-diagonal elements
*> of the matrix L of the factorization of T.
*> \endverbatim
*> an interchange occurred at the kth step of the elimination,
*> then IN(k) = 1, otherwise IN(k) = 0. The element IN(n)
*> returns the smallest positive integer j such that
-*> \endverbatim
-*> \verbatim
+*>
*> abs( u(j,j) ).le. norm( (T - lambda*I)(j) )*TOL,
-*> \endverbatim
-*> \verbatim
+*>
*> where norm( A(j) ) denotes the sum of the absolute values of
*> the jth row of the matrix A. If no such j exists then IN(n)
*> is returned as zero. If IN(n) is returned as positive, then a
*> is the relative machine precision, but if TOL is supplied as
*> non-positive, then it is reset to eps*max( abs( u(i,j) ) ).
*> If JOB .gt. 0 then TOL is not referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, TOL is changed as described above, only if TOL is
*> non-positive on entry. Otherwise TOL is unchanged.
*> \endverbatim
*> per eigenvalue; elements i+1:ihi of WR and WI
*> contain those eigenvalues which have been
*> successfully computed.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .FALSE., then on exit,
*> the remaining unconverged eigenvalues are the
*> eigenvalues of the upper Hessenberg matrix rows
*> and columns ILO thorugh INFO of the final, output
*> value of H.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .TRUE., then on exit
*> (*) (initial value of H)*U = U*(final value of H)
*> where U is an orthognal 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
*> (final value of Z) = (initial value of Z)*U
*> where U is the orthogonal matrix in (*)
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has row dimension N = NL + NR + 1,
*> and column dimension M = N + SQRE.
*> \endverbatim
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the equilibrated matrix, in the same storage format
*> as A. See EQUED for the form of the equilibrated matrix.
*> \endverbatim
*> by diag(C).
*> = 'B': Both row and column equilibration, i.e., A has been
*> replaced by diag(R) * A * diag(C).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if row or column scaling
*> should be done based on the ratio of the row or column scaling
*> factors. If ROWCND < THRESH, row scaling is done, and if
*> COLCND < THRESH, column scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if row scaling
*> should be done based on the absolute size of the largest matrix
*> element. If AMAX > LARGE or AMAX < SMALL, row scaling is done.
*> by diag(C).
*> = 'B': Both row and column equilibration, i.e., A has been
*> replaced by diag(R) * A * diag(C).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if row or column scaling
*> should be done based on the ratio of the row or column scaling
*> factors. If ROWCND < THRESH, row scaling is done, and if
*> COLCND < THRESH, column scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if row scaling
*> should be done based on the absolute size of the largest matrix
*> element. If AMAX > LARGE or AMAX < SMALL, row scaling is done.
*> .FALSE., then the contents of H are unspecified on exit.
*> (The output value of H when INFO.GT.0 is given under the
*> description of INFO below.)
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine may explicitly set H(i,j) = 0 for i.GT.j and
*> j = 1, 2, ... ILO-1 or j = IHI+1, IHI+2, ... N.
*> \endverbatim
*> is sufficient, but LWORK typically as large as 6*N may
*> be required for optimal performance. A workspace query
*> to determine the optimal workspace size is recommended.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then SLAQR0 does a workspace query.
*> In this case, SLAQR0 checks the input parameters and
*> estimates the optimal workspace size for the given
*> The dimension of the work array WORK. LWORK = 2*NW
*> suffices, but greater efficiency may result from larger
*> values of LWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; SLAQR2
*> only estimates the optimal workspace size for the given
*> values of N, NW, KTOP and KBOT. The estimate is returned
*> The dimension of the work array WORK. LWORK = 2*NW
*> suffices, but greater efficiency may result from larger
*> values of LWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; SLAQR3
*> only estimates the optimal workspace size for the given
*> values of N, NW, KTOP and KBOT. The estimate is returned
*> .FALSE., then the contents of H are unspecified on exit.
*> (The output value of H when INFO.GT.0 is given under the
*> description of INFO below.)
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine may explicitly set H(i,j) = 0 for i.GT.j and
*> j = 1, 2, ... ILO-1 or j = IHI+1, IHI+2, ... N.
*> \endverbatim
*> is sufficient, but LWORK typically as large as 6*N may
*> be required for optimal performance. A workspace query
*> to determine the optimal workspace size is recommended.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then SLAQR4 does a workspace query.
*> In this case, SLAQR4 checks the input parameters and
*> estimates the optimal workspace size for the given
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**T*U or A = L*L**T of the band
*> matrix A, in the same storage format as A.
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the equilibrated matrix: diag(S) * A * diag(S), in
*> the same storage format as A.
*> \endverbatim
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED = 'Y', the equilibrated matrix:
*> diag(S) * A * diag(S).
*> \endverbatim
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> floating-point arithmetic.
*> Cure: Increase the PARAMETER "FUDGE",
*> recompile, and try again.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> FUDGE REAL , default = 2
*> A "fudge factor" to widen the Gershgorin intervals. Ideally,
*> a value of 1 should work, but on machines with sloppy
*> publicly released versions should be large enough to handle
*> the worst machine around. Note that this has no effect
*> on accuracy of the solution.
-*> \endverbatim
-*> \verbatim
+*>
*> Based on contributions by
*> W. Kahan, University of California, Berkeley, USA
*> Beresford Parlett, University of California, Berkeley, USA
*> < 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 SLARRD.
*> = 2: No base representation could be found in MAXTRY iterations.
*> Increasing MAXTRY and recompilation might be a remedy.
*> INFO is INTEGER
*> = 0: Eigenvalue converged
*> = -1: Eigenvalue did NOT converge
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> FUDGE REAL , default = 2
*> A "fudge factor" to widen the Gershgorin intervals.
*> \endverbatim
*> \verbatim
*> R is REAL
*> The nonzero component of the rotated vector.
-*> \endverbatim
-*> \verbatim
+*>
*> This version has a few statements commented out for thread safety
*> (machine parameters are computed on each entry). 10 feb 03, SJH.
*> \endverbatim
*> \verbatim
*> R is REAL
*> The nonzero component of the rotated vector.
-*> \endverbatim
-*> \verbatim
+*>
*> This version has a few statements commented out for thread safety
*> (machine parameters are computed on each entry). 10 feb 03, SJH.
*> \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
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has row dimension N = NL + NR + 1,
*> and column dimension M = N + SQRE.
*> \endverbatim
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has N = NL + NR + 1 rows and
*> M = N + SQRE >= N columns.
*> \endverbatim
*> 2 : non-zero in the lower half only
*> 3 : dense
*> 4 : deflated
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, it is an array of dimension 4, with COLTYP(I) being
*> the dimension of the I-th type columns.
*> \endverbatim
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has N = NL + NR + 1 rows and
*> M = N + SQRE >= N columns.
*> \endverbatim
*> contains non-zero entries only at and below (or after) NL+2;
*> and the third is dense. The first column of U and the row of
*> VT are treated separately, however.
-*> \endverbatim
-*> \verbatim
+*>
*> The rows of the singular vectors found by SLASD4
*> must be likewise permuted before the matrix multiplies can
*> take place.
*> INFO is INTEGER
*> = 0: successful exit
*> > 0: if INFO = 1, the updating process failed.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> Logical variable ORGATI (origin-at-i?) is used for distinguishing
*> whether D(i) or D(i+1) is treated as the origin.
-*> \endverbatim
-*> \verbatim
+*>
*> ORGATI = .true. origin at i
*> ORGATI = .false. origin at i+1
-*> \endverbatim
-*> \verbatim
+*>
*> Logical variable SWTCH3 (switch-for-3-poles?) is for noting
*> if we are working with THREE poles!
-*> \endverbatim
-*> \verbatim
+*>
*> MAXIT is the maximum number of iterations allowed for each
*> eigenvalue.
*> \endverbatim
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has row dimension N = NL + NR + 1,
*> and column dimension M = N + SQRE.
*> \endverbatim
*> On exit, DIFR(I, 1) is the distance between I-th updated
*> (undeflated) singular value and the I+1-th (undeflated) old
*> singular value.
-*> \endverbatim
-*> \verbatim
+*>
*> If ICOMPQ = 1, DIFR(1:K,2) is an array containing the
*> normalizing factors for the right singular vector matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> See SLASD8 for details on DIFL and DIFR.
*> \endverbatim
*>
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has
*> N = NL + NR + 1 rows and
*> M = N + SQRE >= N columns.
*> dimension ( K ) if ICOMPQ = 0.
*> On exit, DIFR(I,1) = D(I) - DSIGMA(I+1), DIFR(K,1) is not
*> defined and will not be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> If ICOMPQ = 1, DIFR(1:K,2) is an array containing the
*> normalizing factors for the right singular vector matrix.
*> \endverbatim
*> = 0: then the input matrix is N-by-N.
*> = 1: then the input matrix is N-by-(N+1) if UPLU = 'U' and
*> (N+1)-by-N if UPLU = 'L'.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has
*> N = NL + NR + 1 rows and
*> M = N + SQRE >= N columns.
*> \verbatim
*> A is REAL array, dimension (LDA,N)
*> On exit, the leading m-by-n submatrix of A is set as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> if UPLO = 'U', A(i,j) = ALPHA, 1<=i<=j-1, 1<=j<=n,
*> if UPLO = 'L', A(i,j) = ALPHA, j+1<=i<=m, 1<=j<=n,
*> otherwise, A(i,j) = ALPHA, 1<=i<=m, 1<=j<=n, i.ne.j,
-*> \endverbatim
-*> \verbatim
+*>
*> and, for all UPLO, A(i,i) = BETA, 1<=i<=min(m,n).
*> \endverbatim
*>
*> \param[in,out] TAU
*> \verbatim
*> TAU is REAL
-*> \endverbatim
-*> \verbatim
+*>
*> These are passed as arguments in order to save their values
*> between calls to SLASQ3.
*> \endverbatim
*> Details of the interchanges and the block structure of D.
*> If UPLO = 'U', only the last KB elements of IPIV are set;
*> if UPLO = 'L', only the first KB elements are set.
-*> \endverbatim
-*> \verbatim
+*>
*> If IPIV(k) > 0, then rows and columns k and IPIV(k) were
*> interchanged and D(k,k) is a 1-by-1 diagonal block.
*> If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and
*> \param[in,out] CNORM
*> \verbatim
*> CNORM is or output) REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
*> contains the norm of the off-diagonal part of the j-th column
*> of A. If TRANS = 'N', CNORM(j) must be greater than or equal
*> to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
*> must be greater than or equal to the 1-norm.
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'N', CNORM is an output argument and CNORM(j)
*> returns the 1-norm of the offdiagonal part of the j-th column
*> of A.
*> \param[in,out] CNORM
*> \verbatim
*> CNORM is or output) REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
*> contains the norm of the off-diagonal part of the j-th column
*> of A. If TRANS = 'N', CNORM(j) must be greater than or equal
*> to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
*> must be greater than or equal to the 1-norm.
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'N', CNORM is an output argument and CNORM(j)
*> returns the 1-norm of the offdiagonal part of the j-th column
*> of A.
*> \param[in,out] CNORM
*> \verbatim
*> CNORM is or output) REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
*> contains the norm of the off-diagonal part of the j-th column
*> of A. If TRANS = 'N', CNORM(j) must be greater than or equal
*> to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
*> must be greater than or equal to the 1-norm.
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'N', CNORM is an output argument and CNORM(j)
*> returns the 1-norm of the offdiagonal part of the j-th column
*> of A.
*> (M,1) if SIDE = 'R'
*> On entry, the n-vector C1 if SIDE = 'L', or the m-vector C1
*> if SIDE = 'R'.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the first row of P*C if SIDE = 'L', or the first
*> column of C*P if SIDE = 'R'.
*> \endverbatim
*> (LDC, N-1) if SIDE = 'R'
*> On entry, the (m - 1) x n matrix C2 if SIDE = 'L', or the
*> m x (n - 1) matrix C2 if SIDE = 'R'.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, rows 2:m of P*C if SIDE = 'L', or columns 2:m of C*P
*> if SIDE = 'R'.
*> \endverbatim
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= M-Q.
-*> \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
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK.
-*> \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
*> < 0: if INFO = -i, the i-th argument had an illegal value.
*> > 0: SBBCSD did not converge. See the description of WORK
*> above for details.
-*> \endverbatim
-*> \verbatim
+*>
*> Reference
*> =========
-*> \endverbatim
-*> \verbatim
+*>
*> [1] Brian D. Sutton. Computing the complete CS decomposition. Numer.
*> Algorithms, 50(1):33-65, 2009.
*> \endverbatim
*> The dimension of the array WORK. LWORK >= max(1,min(M,N)).
*> For optimum performance LWORK >= min(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
*> \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).
*> The dimension of the array WORK. LWORK >= IHI-ILO.
*> For optimum performance LWORK >= (IHI-ILO)*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
*> 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
*> 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
*> 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
*> 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
*> The dimension of the array WORK. LWORK >= max(1,N-1).
*> For optimum performance LWORK >= (N-1)*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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> \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).
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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).
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**T*U or A = L*L**T of the band
*> matrix A, in the same storage format as A.
*> 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).
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**T*U or A = L*L**T of the band matrix
*> A, in the same storage format as A (see AB). If EQUED = 'Y',
*> then AFB is the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFB is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AFB is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the equilibrated
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**T*U or A = L*L**T of the band
*> matrix A, in the same storage format as A.
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**T*U or A = L*L**T of the band
*> matrix A, in the same storage format as A.
*> of lower packed A. The LDA of RFP A is (N+1)/2 when TRANSR =
*> 'T'. When TRANSR is 'N' the LDA is N+1 when N is even and N
*> is odd. See the Note below for more details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization RFP A = U**T*U or RFP A = L*L**T.
*> \endverbatim
*> of lower packed A. The LDA of RFP A is (N+1)/2 when TRANSR =
*> 'T'. When TRANSR is 'N' the LDA is N+1 when N is even and N
*> is odd. See the Note below for more details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the symmetric inverse of the original matrix, in the
*> same storage format.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T.
*> \endverbatim
*> triangular part of the matrix A, and the strictly upper
*> triangular part of A is not referenced. A is not modified if
*> FACT = 'F' or 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**T*U or A = L*L**T, in the same storage
*> format as A. If EQUED .ne. 'N', then AF is the factored form
*> of the equilibrated matrix diag(S)*A*diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the original
*> matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the equilibrated
*> the strictly upper triangular part of A is not referenced. A is
*> not modified if FACT = 'F' or 'N', or if FACT = 'E' and EQUED =
*> 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**T*U or A = L*L**T, in the same storage
*> format as A. If EQUED .ne. 'N', then AF is the factored
*> form of the equilibrated matrix diag(S)*A*diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the original
*> matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the equilibrated
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**T *U or A = L*L**T.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T, in the same storage
*> format as A.
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details. A is not modified if
*> FACT = 'F' or 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**T*U or A = L*L**T, in the same storage
*> format as A. If EQUED .ne. 'N', then AFP is the factored
*> form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFP is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T * U or A = L * L**T of the original
*> matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AFP is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T * U or A = L * L**T of the equilibrated
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**T*U or A = L*L**T, in the same
*> storage format as A.
*> array AP as follows:
*> if UPLO = 'U', AP(i + (j-1)*j/2) = U(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = L(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the upper or lower triangle of the (symmetric)
*> inverse of A, overwriting the input factor U or L.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization as above.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization as above.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AB is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the first
*> superdiagonal and the diagonal of the tridiagonal matrix T
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AB is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the first
*> superdiagonal and the diagonal of the tridiagonal matrix T
*> If JOBZ = 'N' and N > 2, LWORK must be at least 2*N.
*> If JOBZ = 'V' and N > 2, LWORK must be at least
*> ( 1 + 5*N + 2*N**2 ).
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> The dimension of the array LIWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 2, LIWORK must be at least 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AB is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the first
*> superdiagonal and the diagonal of the tridiagonal matrix T
*> 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 AB to tridiagonal form.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*SLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the transformed matrix X**T*A*X, stored in the same
*> format as A.
*> \endverbatim
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AB are destroyed.
*> \endverbatim
*>
*> as follows:
*> if UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
*> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the factor S from the split Cholesky factorization
*> B = S**T*S, as returned by SPBSTF.
*> \endverbatim
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AB are destroyed.
*> \endverbatim
*>
*> as follows:
*> if UPLO = 'U', BB(ka+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
*> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the factor S from the split Cholesky factorization
*> B = S**T*S, as returned by SPBSTF.
*> \endverbatim
*> If N <= 1, LWORK >= 1.
*> If JOBZ = 'N' and N > 1, LWORK >= 3*N.
*> If JOBZ = 'V' and N > 1, LWORK >= 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> The dimension of the array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK >= 1.
*> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AB are destroyed.
*> \endverbatim
*>
*> as follows:
*> if UPLO = 'U', BB(ka+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
*> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the factor S from the split Cholesky factorization
*> B = S**T*S, as returned by SPBSTF.
*> \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'.
*> \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.
*> 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 A to tridiagonal form.
-*> \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
*> Q is REAL array, dimension (LDQ,N)
*> On entry, if VECT = 'U', then Q must contain an N-by-N
*> matrix X; if VECT = 'N' or 'V', then Q need not be set.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit:
*> if VECT = 'V', Q contains the N-by-N orthogonal matrix Q;
*> if VECT = 'U', Q contains the product X*Q;
*> 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \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
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AP is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the diagonal
*> and first superdiagonal of the tridiagonal matrix T overwrite
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AP is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the diagonal
*> and first superdiagonal of the tridiagonal matrix T overwrite
*> If JOBZ = 'N' and N > 1, LWORK must be at least 2*N.
*> If JOBZ = 'V' and N > 1, LWORK must be at least
*> 1 + 6*N + N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the required sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> The dimension of the array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 1, LIWORK must be at least 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the required sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AP is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the diagonal
*> and first superdiagonal of the tridiagonal matrix T overwrite
*> 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 AP to tridiagonal form.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*SLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the transformed matrix, stored in the
*> same format as A.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AP are destroyed.
*> \endverbatim
*>
*> is stored in the array BP as follows:
*> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j;
*> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the triangular factor U or L from the Cholesky
*> factorization B = U**T*U or B = L*L**T, in the same storage
*> format as B.
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AP are destroyed.
*> \endverbatim
*>
*> is stored in the array BP as follows:
*> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j;
*> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the triangular factor U or L from the Cholesky
*> factorization B = U**T*U or B = L*L**T, in the same storage
*> format as B.
*> If N <= 1, LWORK >= 1.
*> If JOBZ = 'N' and N > 1, LWORK >= 2*N.
*> If JOBZ = 'V' and N > 1, LWORK >= 1 + 6*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the required sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> The dimension of the array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK >= 1.
*> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the required sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AP are destroyed.
*> \endverbatim
*>
*> is stored in the array BP as follows:
*> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j;
*> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the triangular factor U or L from the Cholesky
*> factorization B = U**T*U or B = L*L**T, in the same storage
*> format as B.
*> \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'.
*> \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.
*> 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 A to tridiagonal form.
-*> \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.
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> A = U*D*U**T or A = L*D*L**T as computed by SSPTRF, stored as
*> to obtain the factor U or L from the factorization
*> A = U*D*U**T or A = L*D*L**T as computed by SSPTRF, stored as
*> a packed triangular matrix in the same storage format as A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFP is an output argument and on exit
*> contains the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) =
*> IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were
*> interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block structure
*> of D, as determined by SSPTRF.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L, stored as a packed triangular
*> matrix overwriting A (see below for further details).
*> On entry, the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by SSPTRF,
*> stored as a packed triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix, stored as a packed triangular matrix. The j-th column
*> of inv(A) is stored in the array AP as follows:
*> \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.
*> \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.
*> determined to lie in an interval whose width is ABSTOL or
*> less. If ABSTOL is less than or equal to zero, then ULP*|T|
*> will be used, where |T| means the 1-norm of T.
-*> \endverbatim
-*> \verbatim
+*>
*> Eigenvalues will be computed most accurately when ABSTOL is
*> set to twice the underflow threshold 2*SLAMCH('S'), not zero.
*> \endverbatim
*> floating-point arithmetic.
*> Cure: Increase the PARAMETER "FUDGE",
*> recompile, and try again.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> RELFAC REAL, default = 2.0e0
*> The relative tolerance. An interval (a,b] lies within
*> "relative tolerance" if b-a < RELFAC*ulp*max(|a|,|b|),
*> where "ulp" is the machine precision (distance from 1 to
*> the next larger floating point number.)
-*> \endverbatim
-*> \verbatim
+*>
*> FUDGE REAL, default = 2
*> A "fudge factor" to widen the Gershgorin intervals. Ideally,
*> a value of 1 should work, but on machines with sloppy
*> Note that for COMPZ = 'I' or 'V', then if N is less than or
*> equal to the minimum divide size, usually 25, then LWORK need
*> only be max(1,2*(N-1)).
-*> \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
*> Note that for COMPZ = 'I' or 'V', then if N is less than or
*> equal to the minimum divide size, usually 25, then LIWORK
*> need only be 1.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal size of the IWORK array,
*> returns this value as the first entry of the IWORK array, and
*> \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'.
*> \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.
*> > 0: if INFO = i, then i eigenvectors failed to converge
*> in MAXITS iterations. Their indices are stored in
*> array IFAIL.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> MAXITS INTEGER, default = 5
*> The maximum number of iterations performed.
-*> \endverbatim
-*> \verbatim
+*>
*> EXTRA INTEGER, default = 2
*> The number of iterations performed after norm growth
*> criterion is satisfied, should be at least 1.
*> \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'.
*> \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.
*> If JOBZ = 'N' or N <= 1 then LWORK must be at least 1.
*> If JOBZ = 'V' and N > 1 then LWORK must be at least
*> ( 1 + 4*N + N**2 ).
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> The dimension of the array IWORK.
*> If JOBZ = 'N' or N <= 1 then LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 1 then LIWORK must be at least 3+5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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 A to tridiagonal form.
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
-*> \endverbatim
-*> \verbatim
+*>
*> If high relative accuracy is important, set ABSTOL to
*> SLAMCH( 'Safe minimum' ). Doing so will guarantee that
*> eigenvalues are computed to high relative accuracy when
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= 20*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> \verbatim
*> LIWORK is INTEGER
*> The dimension of the array IWORK. LIWORK >= 10*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*SLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> The length of the array WORK. LWORK >= max(1,3*N-1).
*> For optimal efficiency, LWORK >= (NB+2)*N,
*> where NB is the blocksize for SSYTRD returned by ILAENV.
-*> \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
*> If JOBZ = 'N' and N > 1, LWORK must be at least 2*N+1.
*> If JOBZ = 'V' and N > 1, LWORK must be at least
*> 1 + 6*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> If N <= 1, LIWORK must be at least 1.
*> If JOBZ = 'N' and N > 1, LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 1, LIWORK must be at least 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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 A to tridiagonal form.
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
-*> \endverbatim
-*> \verbatim
+*>
*> If high relative accuracy is important, set ABSTOL to
*> SLAMCH( 'Safe minimum' ). Doing so will guarantee that
*> eigenvalues are computed to high relative accuracy when
*> For optimal efficiency, LWORK >= (NB+6)*N,
*> where NB is the max of the blocksize for SSYTRD and SORMTR
*> returned by ILAENV.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> \verbatim
*> LIWORK is INTEGER
*> The dimension of the array IWORK. LIWORK >= max(1,10*N).
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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 A to tridiagonal form.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*SLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> For optimal efficiency, LWORK >= (NB+3)*N,
*> where NB is the max of the blocksize for SSYTRD and SORMTR
*> returned by ILAENV.
-*> \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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the transformed matrix, stored in the
*> same format as A.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the transformed matrix, stored in the
*> same format as A.
*> \endverbatim
*> 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, if JOBZ = 'V', then if INFO = 0, A contains the
*> matrix Z of eigenvectors. The eigenvectors are normalized
*> as follows:
*> contains the 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**T*U or B = L*L**T.
*> The length of the array WORK. LWORK >= max(1,3*N-1).
*> For optimal efficiency, LWORK >= (NB+2)*N,
*> where NB is the blocksize for SSYTRD returned by ILAENV.
-*> \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
*> 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, if JOBZ = 'V', then if INFO = 0, A contains the
*> matrix Z of eigenvectors. The eigenvectors are normalized
*> as follows:
*> 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**T*U or B = L*L**T.
*> If N <= 1, LWORK >= 1.
*> If JOBZ = 'N' and N > 1, LWORK >= 2*N+1.
*> If JOBZ = 'V' and N > 1, LWORK >= 1 + 6*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK and IWORK
*> arrays, returns these values as the first entries of the WORK
*> If N <= 1, LIWORK >= 1.
*> If JOBZ = 'N' and N > 1, LIWORK >= 1.
*> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK and
*> IWORK arrays, returns these values as the first entries of
*> 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**T*U or B = L*L**T.
*> 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.
*> The length of the array WORK. LWORK >= max(1,8*N).
*> For optimal efficiency, LWORK >= (NB+3)*N,
*> where NB is the blocksize for SSYTRD returned by ILAENV.
-*> \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
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the block diagonal matrix D and the
*> multipliers used to obtain the factor U or L from the
*> factorization A = U*D*U**T or A = L*D*L**T as computed by
*> SSYTRF.
*> for LWORK < N, TRS will be done with Level BLAS 2
*> for LWORK >= N, TRS will be done with Level BLAS 3
-*> \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
*> contains the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> A = U*D*U**T or A = L*D*L**T as computed by SSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) =
*> IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were
*> interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block structure
*> of D, as determined by SSYTRF.
*> The length of WORK. LWORK >= max(1,3*N), and for best
*> performance, when FACT = 'N', LWORK >= max(1,3*N,N*NB), where
*> NB is the optimal blocksize for SSYTRF.
-*> \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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> contains the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L from the factorization A =
*> U*D*U**T or A = L*D*L**T as computed by SSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L from the factorization A =
*> diagonal block. If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0,
*> then rows and columns k+1 and -IPIV(k) were interchanged
*> and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block
*> structure of D, as determined by SSYTRF.
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> A is REAL array, dimension (LDA,N)
*> On entry, the NB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by SSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L (see below for further details).
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L (see below for further details).
*> \endverbatim
*> LWORK is INTEGER
*> The length of WORK. LWORK >=1. For best performance
*> LWORK >= N*NB, where NB is the block size returned by ILAENV.
-*> \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
*> A is REAL array, dimension (LDA,N)
*> On entry, the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by SSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> A is REAL array, dimension (LDA,N)
*> On entry, the NB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by SSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> A is REAL array, dimension (LDA,N)
*> On entry, the NNB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by SSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> an upper or lower triangular matrix as follows:
*> UPLO = 'U' or 'u' RFP A came from an upper triangular matrix
*> UPLO = 'L' or 'l' RFP A came from a lower triangular matrix
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the form of op( A ) to be used
*> in the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'T' or 't' op( A ) = A'.
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not RFP 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> elements of lower packed A. The LDA of RFP A is (N+1)/2 when
*> TRANSR = 'T'. When TRANSR is 'N' the LDA is N+1 when N is
*> even and N is odd. See the Note below for more details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the (triangular) inverse of the original matrix, in
*> the same storage format.
*> \endverbatim
*> if HOWMNY = 'S', the left eigenvectors of (S,P) specified by
*> SELECT, stored consecutively in the columns of
*> VL, in the same order as their eigenvalues.
-*> \endverbatim
-*> \verbatim
+*>
*> A complex eigenvector corresponding to a complex eigenvalue
*> is stored in two consecutive columns, the first holding the
*> real part, and the second the imaginary part.
-*> \endverbatim
-*> \verbatim
+*>
*> Not referenced if SIDE = 'R'.
*> \endverbatim
*>
*> On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B', VR must
*> contain an N-by-N matrix Z (usually the orthogonal matrix Z
*> of right Schur vectors returned by SHGEQZ).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if SIDE = 'R' or 'B', VR contains:
*> if HOWMNY = 'A', the matrix X of right eigenvectors of (S,P);
*> if HOWMNY = 'B' or 'b', the matrix Z*X;
*> specified by SELECT, stored consecutively in the
*> columns of VR, in the same order as their
*> eigenvalues.
-*> \endverbatim
-*> \verbatim
+*>
*> A complex eigenvector corresponding to a complex eigenvalue
*> is stored in two consecutive columns, the first holding the
*> real part and the second the imaginary part.
*> LWORK is INTEGER
*> The dimension of the array WORK.
*> LWORK >= 1 when N <= 1, otherwise LWORK >= 4*N + 16.
-*> \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
*> \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
*> \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.
*> The dimension of the array WORK. LWORK >= 4*N+16.
*> If IJOB = 1, 2 or 4, LWORK >= MAX(4*N+16, 2*M*(N-M)).
*> If IJOB = 3 or 5, LWORK >= MAX(4*N+16, 4*M*(N-M)).
-*> \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 dimension of the array IWORK. LIWORK >= 1.
*> If IJOB = 1, 2 or 4, LIWORK >= N+6.
*> If IJOB = 3 or 5, LIWORK >= MAX(2*M*(N-M), N+6).
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal size of the IWORK array,
*> returns this value as the first entry of the IWORK array, and
*> \param[in] L
*> \verbatim
*> L is INTEGER
-*> \endverbatim
-*> \verbatim
+*>
*> 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.
*> \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
*> \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,
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,N).
*> If JOB = 'V' or 'B' LWORK >= 2*N*(N+2)+16.
-*> \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
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK > = 1.
*> If IJOB = 1 or 2 and TRANS = 'N', LWORK >= max(1,2*M*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
*> \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.
*> \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
*> If JOB = 'N', LWORK >= max(1,N);
*> if JOB = 'E', LWORK >= max(1,M*(N-M));
*> if JOB = 'V' or 'B', LWORK >= max(1,2*M*(N-M)).
-*> \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 dimension of the array IWORK.
*> If JOB = 'N' or 'E', LIWORK >= 1;
*> if JOB = 'V' or 'B', LIWORK >= max(1,M*(N-M)).
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal size of the IWORK array,
*> returns this value as the first entry of the IWORK array, and
*> triangular part of A is not referenced. If DIAG = 'U', the
*> diagonal elements of A are also not referenced and are
*> assumed to be 1.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the (triangular) inverse of the original matrix, in
*> the same storage format.
*> \endverbatim
*> 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
*> \verbatim
*> LRWORK is INTEGER
*> The dimension of the array RWORK. LRWORK >= MAX(1,8*Q).
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal size of the RWORK array,
*> returns this value as the first entry of the work array, and
*> > 0: if ZBBCSD did not converge, INFO specifies the number
*> of nonzero entries in PHI, and B11D, B11E, etc.,
*> contain the partially reduced matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> Reference
*> =========
-*> \endverbatim
-*> \verbatim
+*>
*> [1] Brian D. Sutton. Computing the complete CS decomposition. Numer.
*> Algorithms, 50(1):33-65, 2009.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> TOLMUL DOUBLE PRECISION, default = MAX(10,MIN(100,EPS**(-1/8)))
*> TOLMUL controls the convergence criterion of the QR loop.
*> Angles THETA(i), PHI(i) are rounded to 0 or PI/2 when they
*> elements of a bidiagonal matrix which is orthogonally
*> similar to the input matrix B; if INFO = i, i
*> elements of E have not converged to zero.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> TOLMUL DOUBLE PRECISION, default = max(10,min(100,EPS**(-1/8)))
*> TOLMUL controls the convergence criterion of the QR loop.
*> If it is positive, TOLMUL*EPS is the desired relative
*> Default is to lose at either one eighth or 2 of the
*> available decimal digits in each computed singular value
*> (whichever is smaller).
-*> \endverbatim
-*> \verbatim
+*>
*> MAXITR INTEGER, default = 6
*> MAXITR controls the maximum number of passes of the
*> algorithm through its inner loop. The algorithms stops
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> Note that the imaginary parts of the diagonal
*> elements need not be set and are assumed to be zero.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if iterative refinement has been successfully used
*> (INFO.EQ.0 and ITER.GE.0, see description below), then A is
*> unchanged, if double precision factorization has been used
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(KU+1+i-j,j) = A(i,j) for max(1,j-KU)<=i<=min(N,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'F' and EQUED is not 'N', then A must have been
*> equilibrated by the scaling factors in R and/or C. AB is not
*> modified if FACT = 'F' or 'N', or if FACT = 'E' and
*> EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> and the multipliers used during the factorization are stored
*> in rows KL+KU+2 to 2*KL+KU+1. If EQUED .ne. 'N', then AFB is
*> the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFB is an output argument and on exit
*> returns details of the LU factorization of A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AFB is an output argument and on exit
*> returns details of the LU factorization of the equilibrated
*> matrix A (see the description of AB for the form of the
*> contains the pivot indices from the factorization A = L*U
*> as computed by ZGBTRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = L*U
*> of the equilibrated matrix A.
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(KU+1+i-j,j) = A(i,j) for max(1,j-KU)<=i<=min(N,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'F' and EQUED is not 'N', then AB must have been
*> equilibrated by the scaling factors in R and/or C. AB is not
*> modified if FACT = 'F' or 'N', or if FACT = 'E' and
*> EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> and the multipliers used during the factorization are stored
*> in rows KL+KU+2 to 2*KL+KU+1. If EQUED .ne. 'N', then AFB is
*> the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the equilibrated matrix A (see the description of A for
*> contains the pivot indices from the factorization A = P*L*U
*> as computed by DGETRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the equilibrated matrix A.
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> computed.
*> = 1.0 : Use the extra-precise refinement algorithm.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(kl+ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, details of the factorization: U is stored as an
*> upper triangular band matrix with KL+KU superdiagonals in
*> rows 1 to KL+KU+1, and the multipliers used during the
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(kl+ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, details of the factorization: U is stored as an
*> upper triangular band matrix with KL+KU superdiagonals in
*> rows 1 to KL+KU+1, and the multipliers used during the
*> 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
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,2*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
*> that an error is only returned if LWORK < max(1,2*N), but if
*> SENSE = 'E' or 'V' or 'B' this may not be large enough.
*> For good performance, LWORK must generally be larger.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates upper bound on the optimal size of the
*> array WORK, returns this value as the first entry of the WORK
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,2*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
*> to make the rows and columns of A more equal in
*> norm. Do not permute;
*> = 'B': Both diagonally scale and permute A.
-*> \endverbatim
-*> \verbatim
+*>
*> Computed reciprocal condition numbers will be for the matrix
*> after balancing and/or permuting. Permuting does not change
*> condition numbers (in exact arithmetic), but balancing does.
*> = 'E': Computed for eigenvalues only;
*> = 'V': Computed for right eigenvectors only;
*> = 'B': Computed for eigenvalues and right eigenvectors.
-*> \endverbatim
-*> \verbatim
+*>
*> If SENSE = 'E' or 'B', both left and right eigenvectors
*> must also be computed (JOBVL = 'V' and JOBVR = 'V').
*> \endverbatim
*> LWORK >= max(1,2*N), and if SENSE = 'V' or 'B',
*> LWORK >= N*N+2*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 non-negative real scalars beta that define the
*> eigenvalues of GNEP. BETA(j) = T(j,j), the diagonal element
*> of the triangular factor T.
-*> \endverbatim
-*> \verbatim
+*>
*> Together, the quantities alpha = ALPHA(j) and beta = BETA(j)
*> represent the j-th eigenvalue of the matrix pair (A,B), in
*> one of the forms lambda = alpha/beta or mu = beta/alpha.
*> blocksizes (for ZGEQRF, ZUNMQR, and CUNGQR.) Then compute:
*> NB -- MAX of the blocksizes for ZGEQRF, ZUNMQR, and CUNGQR;
*> the optimal LWORK is N*(NB+1).
-*> \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
*> blocksizes (for ZGEQRF, ZUNMQR, and ZUNGQR.) Then compute:
*> NB -- MAX of the blocksizes for ZGEQRF, ZUNMQR, and ZUNGQR;
*> The optimal LWORK is MAX( 2*N, N*(NB+1) ).
-*> \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
*> \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 ZGEBAL; otherwise they should be
*> \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 ZGEBAL; otherwise they should be
*> 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
*> For optimal performance,
*> LWORK >= max( 1, MN + max( MN, NRHS )*NB ).
*> where MN = min(M,N) and NB is the optimum block size.
-*> \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
*> 2*M + M*NRHS
*> if M is less than N, the code will execute correctly.
*> For good performance, LWORK should generally be larger.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the array WORK and the
*> minimum sizes of the arrays RWORK and IWORK, and returns
*> The dimension of the array WORK. LWORK >= 1, and also:
*> LWORK >= 2*min(M,N) + max(M,N,NRHS)
*> For good performance, LWORK should 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
*> where NB is an upper bound on the blocksize returned
*> by ILAENV for the routines ZGEQP3, ZTZRZF, CTZRQF, ZUNMQR,
*> and ZUNMRZ.
-*> \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 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
*> The dimension of the array WORK. LWORK >= N+1.
*> For optimal performance LWORK >= ( N+1 )*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
*> 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
*> 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
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> if JOBZ = 'S' or 'A',
*> LWORK >= min(M,N)*min(M,N)+2*min(M,N)+max(M,N).
*> For good performance, LWORK should generally be larger.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, a workspace query is assumed. The optimal
*> size for the WORK array is calculated and stored in WORK(1),
*> and no other work except argument checking is performed.
*> vectors) are overwritten on the array A;
*> = 'N': no rows of V**H (no right singular vectors) are
*> computed.
-*> \endverbatim
-*> \verbatim
+*>
*> JOBVT and JOBU cannot both be 'O'.
*> \endverbatim
*>
*> The dimension of the array WORK.
*> LWORK >= MAX(1,2*MIN(M,N)+MAX(M,N)).
*> For good performance, LWORK should 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
*> not 'N', then A must have been equilibrated by the scaling
*> factors in R and/or C. A is not modified if FACT = 'F' or
*> 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> contains the factors L and U from the factorization
*> A = P*L*U as computed by ZGETRF. If EQUED .ne. 'N', then
*> AF is the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the equilibrated matrix A (see the description of A for
*> contains the pivot indices from the factorization A = P*L*U
*> as computed by ZGETRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the equilibrated matrix A.
*> not 'N', then A must have been equilibrated by the scaling
*> factors in R and/or C. A is not modified if FACT = 'F' or
*> 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED .ne. 'N', A is scaled as follows:
*> EQUED = 'R': A := diag(R) * A
*> EQUED = 'C': A := A * diag(C)
*> contains the factors L and U from the factorization
*> A = P*L*U as computed by ZGETRF. If EQUED .ne. 'N', then
*> AF is the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the factors L and U from the factorization A = P*L*U
*> of the equilibrated matrix A (see the description of A for
*> contains the pivot indices from the factorization A = P*L*U
*> as computed by ZGETRF; row i of the matrix was interchanged
*> with row IPIV(i).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the original matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then IPIV is an output argument and on exit
*> contains the pivot indices from the factorization A = P*L*U
*> of the equilibrated matrix A.
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> computed.
*> = 1.0 : Use the extra-precise refinement algorithm.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> The dimension of the array WORK. LWORK >= max(1,N).
*> For optimal performance LWORK >= N*NB, where NB is
*> the optimal blocksize returned by ILAENV.
-*> \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
*> to the top left of the Schur form.
*> An eigenvalue ALPHA(j)/BETA(j) is selected if
*> SELCTG(ALPHA(j),BETA(j)) is true.
-*> \endverbatim
-*> \verbatim
+*>
*> Note that a selected complex eigenvalue may no longer satisfy
*> SELCTG(ALPHA(j),BETA(j)) = .TRUE. after ordering, since
*> ordering may change the value of complex eigenvalues
*> generalized eigenvalues. ALPHA(j), j=1,...,N and BETA(j),
*> j=1,...,N are the diagonals of the complex Schur form (A,B)
*> output by ZGGES. The BETA(j) will be non-negative real.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHA(j)/BETA(j) may easily over- or
*> underflow, and BETA(j) may even be zero. Thus, the user
*> should avoid naively computing the ratio alpha/beta.
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,2*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
*> generalized eigenvalues. ALPHA(j) and BETA(j),j=1,...,N are
*> the diagonals of the complex Schur form (S,T). BETA(j) will
*> be non-negative real.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHA(j)/BETA(j) may easily over- or
*> underflow, and BETA(j) may even be zero. Thus, the user
*> should avoid naively computing the ratio alpha/beta.
*> Note also that an error is only returned if
*> LWORK < MAX(1,2*N), but if SENSE = 'E' or 'V' or 'B' this may
*> not be large enough.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the bound on the optimal size of the WORK
*> array and the minimum size of the IWORK array, returns these
*> The dimension of the array IWORK.
*> If SENSE = 'N' or N = 0, LIWORK >= 1, otherwise
*> LIWORK >= N+2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the bound on the optimal size of the
*> WORK array and the minimum size of the IWORK array, returns
*> BETA is COMPLEX*16 array, dimension (N)
*> On exit, ALPHA(j)/BETA(j), j=1,...,N, will be the
*> generalized eigenvalues.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotients ALPHA(j)/BETA(j) may easily over- or
*> underflow, and BETA(j) may even be zero. Thus, the user
*> should avoid naively computing the ratio alpha/beta.
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,2*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
*> BETA is COMPLEX*16 array, dimension (N)
*> On exit, ALPHA(j)/BETA(j), j=1,...,N, will be the generalized
*> eigenvalues.
-*> \endverbatim
-*> \verbatim
+*>
*> Note: the quotient ALPHA(j)/BETA(j) ) may easily over- or
*> underflow, and BETA(j) may even be zero. Thus, the user
*> should avoid naively computing the ratio ALPHA/BETA.
*> The dimension of the array WORK. LWORK >= max(1,2*N).
*> If SENSE = 'E', LWORK >= max(1,4*N).
*> If SENSE = 'V' or 'B', LWORK >= max(1,2*N*N+2*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
*> \param[out] Y
*> \verbatim
*> Y is COMPLEX*16 array, dimension (P)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, X and Y are the solutions of the GLM problem.
*> \endverbatim
*>
*> For optimum performance, LWORK >= M+min(N,P)+max(N,P)*NB,
*> where NB is an upper bound for the optimal blocksizes for
*> ZGEQRF, ZGERQF, ZUNMQR and ZUNMRQ.
-*> \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
*> \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
*> For optimum performance LWORK >= P+min(M,N)+max(M,N)*NB,
*> where NB is an upper bound for the optimal blocksizes for
*> ZGEQRF, CGERQF, ZUNMQR and CUNMRQ.
-*> \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
*> \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.
*> \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,
*> < 0: if INFO = -i, the i-th argument had an illegal value.
*> > 0: if INFO = 1, the Jacobi-type procedure failed to
*> converge. For further details, see subroutine ZTGSJA.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> TOLA DOUBLE PRECISION
*> TOLB DOUBLE PRECISION
*> TOLA and TOLB are the thresholds to determine the effective
*> \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
*> \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.
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> If FACT = 'F', then DLF is an input argument and on entry
*> contains the (n-1) multipliers that define the matrix L from
*> the LU factorization of A as computed by ZGTTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DLF is an output argument and on exit
*> contains the (n-1) multipliers that define the matrix L from
*> the LU factorization of A.
*> If FACT = 'F', then DF is an input argument and on entry
*> contains the n diagonal elements of the upper triangular
*> matrix U from the LU factorization of A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DF is an output argument and on exit
*> contains the n diagonal elements of the upper triangular
*> matrix U from the LU factorization of A.
*> DUF is or output) COMPLEX*16 array, dimension (N-1)
*> If FACT = 'F', then DUF is an input argument and on entry
*> contains the (n-1) elements of the first superdiagonal of U.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DUF is an output argument and on exit
*> contains the (n-1) elements of the first superdiagonal of U.
*> \endverbatim
*> If FACT = 'F', then DU2 is an input argument and on entry
*> contains the (n-2) elements of the second superdiagonal of
*> U.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then DU2 is an output argument and on exit
*> contains the (n-2) elements of the second superdiagonal of
*> U.
*> If FACT = 'F', then IPIV is an input argument and on entry
*> contains the pivot indices from the LU factorization of A as
*> computed by ZGTTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains the pivot indices from the LU factorization of A;
*> row i of the matrix was interchanged with row IPIV(i).
*> DL is COMPLEX*16 array, dimension (N-1)
*> On entry, DL must contain the (n-1) sub-diagonal elements of
*> A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, DL is overwritten by the (n-1) multipliers that
*> define the matrix L from the LU factorization of A.
*> \endverbatim
*> \verbatim
*> D is COMPLEX*16 array, dimension (N)
*> On entry, D must contain the diagonal elements of A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, D is overwritten by the n diagonal elements of the
*> upper triangular matrix U from the LU factorization of A.
*> \endverbatim
*> DU is COMPLEX*16 array, dimension (N-1)
*> On entry, DU must contain the (n-1) super-diagonal elements
*> of A.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, DU is overwritten by the (n-1) elements of the first
*> super-diagonal of U.
*> \endverbatim
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AB is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the first
*> superdiagonal and the diagonal of the tridiagonal matrix T
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AB is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the first
*> superdiagonal and the diagonal of the tridiagonal matrix T
*> If N <= 1, LWORK must be at least 1.
*> If JOBZ = 'N' and N > 1, LWORK must be at least N.
*> If JOBZ = 'V' and N > 1, LWORK must be at least 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> If JOBZ = 'N' and N > 1, LRWORK must be at least N.
*> If JOBZ = 'V' and N > 1, LRWORK must be at least
*> 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> The dimension of array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 1, LIWORK must be at least 3 + 5*N .
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AB is overwritten by values generated during the
*> reduction to tridiagonal form.
*> \endverbatim
*> 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 AB to tridiagonal form.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*DLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the transformed matrix X**H*A*X, stored in the same
*> format as A.
*> \endverbatim
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AB are destroyed.
*> \endverbatim
*>
*> as follows:
*> if UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
*> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the factor S from the split Cholesky factorization
*> B = S**H*S, as returned by ZPBSTF.
*> \endverbatim
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AB are destroyed.
*> \endverbatim
*>
*> as follows:
*> if UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
*> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the factor S from the split Cholesky factorization
*> B = S**H*S, as returned by ZPBSTF.
*> \endverbatim
*> If N <= 1, LWORK >= 1.
*> If JOBZ = 'N' and N > 1, LWORK >= N.
*> If JOBZ = 'V' and N > 1, LWORK >= 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> If N <= 1, LRWORK >= 1.
*> If JOBZ = 'N' and N > 1, LRWORK >= N.
*> If JOBZ = 'V' and N > 1, LRWORK >= 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> The dimension of array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK >= 1.
*> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> as follows:
*> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AB are destroyed.
*> \endverbatim
*>
*> as follows:
*> if UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
*> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the factor S from the split Cholesky factorization
*> B = S**H*S, as returned by ZPBSTF.
*> \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'.
*> \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.
*> 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 AP to tridiagonal form.
-*> \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
*> Q is COMPLEX*16 array, dimension (LDQ,N)
*> On entry, if VECT = 'U', then Q must contain an N-by-N
*> matrix X; if VECT = 'N' or 'V', then Q need not be set.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit:
*> if VECT = 'V', Q contains the N-by-N unitary matrix Q;
*> if VECT = 'U', Q contains the product X*Q;
*> The length of the array WORK. LWORK >= max(1,2*N-1).
*> For optimal efficiency, LWORK >= (NB+1)*N,
*> where NB is the blocksize for ZHETRD returned by ILAENV.
-*> \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
*> If N <= 1, LWORK must be at least 1.
*> If JOBZ = 'N' and N > 1, LWORK must be at least N + 1.
*> If JOBZ = 'V' and N > 1, LWORK must be at least 2*N + N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> If JOBZ = 'N' and N > 1, LRWORK must be at least N.
*> If JOBZ = 'V' and N > 1, LRWORK must be at least
*> 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> If N <= 1, LIWORK must be at least 1.
*> If JOBZ = 'N' and N > 1, LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 1, LIWORK must be at least 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> 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 A to tridiagonal form.
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
-*> \endverbatim
-*> \verbatim
+*>
*> If high relative accuracy is important, set ABSTOL to
*> DLAMCH( 'Safe minimum' ). Doing so will guarantee that
*> eigenvalues are computed to high relative accuracy when
*> For optimal efficiency, LWORK >= (NB+1)*N,
*> where NB is the max of the blocksize for ZHETRD and for
*> ZUNMTR as returned by ILAENV.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> \verbatim
*> LRWORK is INTEGER
*> The length of the array RWORK. LRWORK >= max(1,24*N).
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> \verbatim
*> LIWORK is INTEGER
*> The dimension of the array IWORK. LIWORK >= max(1,10*N).
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> 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 A to tridiagonal form.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*DLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> For optimal efficiency, LWORK >= (NB+1)*N,
*> where NB is the max of the blocksize for ZHETRD and for
*> ZUNMTR as returned by ILAENV.
-*> \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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the transformed matrix, stored in the
*> same format as A.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the transformed matrix, stored in the
*> same format as A.
*> \endverbatim
*> 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, if JOBZ = 'V', then if INFO = 0, A contains the
*> matrix Z of eigenvectors. The eigenvectors are normalized
*> as follows:
*> contains the 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.
*> The length of the array WORK. LWORK >= max(1,2*N-1).
*> For optimal efficiency, LWORK >= (NB+1)*N,
*> where NB is the blocksize for ZHETRD returned by ILAENV.
-*> \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
*> 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, if JOBZ = 'V', then if INFO = 0, A contains the
*> matrix Z of eigenvectors. The eigenvectors are normalized
*> as follows:
*> 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.
*> If N <= 1, LWORK >= 1.
*> If JOBZ = 'N' and N > 1, LWORK >= N + 1.
*> If JOBZ = 'V' and N > 1, LWORK >= 2*N + N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> If N <= 1, LRWORK >= 1.
*> If JOBZ = 'N' and N > 1, LRWORK >= N.
*> If JOBZ = 'V' and N > 1, LRWORK >= 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> If N <= 1, LIWORK >= 1.
*> If JOBZ = 'N' and N > 1, LIWORK >= 1.
*> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> \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'.
*> \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.
*> The length of the array WORK. LWORK >= max(1,2*N).
*> For optimal efficiency, LWORK >= (NB+1)*N,
*> where NB is the blocksize for ZHETRD returned by ILAENV.
-*> \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
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the block diagonal matrix D and the
*> multipliers used to obtain the factor U or L from the
*> factorization A = U*D*U**H or A = L*D*L**H as computed by
*> ZHETRF.
*> for LWORK < N, TRS will be done with Level BLAS 2
*> for LWORK >= N, TRS will be done with Level BLAS 3
-*> \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
*> contains the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> A = U*D*U**H or A = L*D*L**H as computed by ZHETRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) =
*> IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were
*> interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block structure
*> of D, as determined by ZHETRF.
*> The length of WORK. LWORK >= max(1,2*N), and for best
*> performance, when FACT = 'N', LWORK >= max(1,2*N,N*NB), where
*> NB is the optimal blocksize for ZHETRF.
-*> \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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> contains the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L from the factorization A =
*> U*D*U**T or A = L*D*L**T as computed by DSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L from the factorization A =
*> diagonal block. If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0,
*> then rows and columns k+1 and -IPIV(k) were interchanged
*> and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block
*> structure of D, as determined by ZHETRF.
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> computed.
*> = 1.0 : Use the extra-precise refinement algorithm.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> A is COMPLEX*16 array, dimension (LDA,N)
*> On entry, the NB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by CSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L (see below for further details).
*> \endverbatim
*> 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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L (see below for further details).
*> \endverbatim
*> A is COMPLEX*16 array, dimension (LDA,N)
*> On entry, the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by ZHETRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (Hermitian) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> A is COMPLEX*16 array, dimension (LDA,N)
*> On entry, the NB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by ZHETRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> A is COMPLEX*16 array, dimension (LDA,N)
*> On entry, the NNB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by ZHETRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> The real non-negative scalars beta that define the
*> eigenvalues of GNEP. BETA(i) = P(i,i) in the generalized
*> Schur factorization.
-*> \endverbatim
-*> \verbatim
+*>
*> Together, the quantities alpha = ALPHA(j) and beta = BETA(j)
*> represent the j-th eigenvalue of the matrix pair (A,B), in
*> one of the forms lambda = alpha/beta or mu = beta/alpha.
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= max(1,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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AP is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the diagonal
*> and first superdiagonal of the tridiagonal matrix T overwrite
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AP is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the diagonal
*> and first superdiagonal of the tridiagonal matrix T overwrite
*> If N <= 1, LWORK must be at least 1.
*> If JOBZ = 'N' and N > 1, LWORK must be at least N.
*> If JOBZ = 'V' and N > 1, LWORK must be at least 2*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the required sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> If JOBZ = 'N' and N > 1, LRWORK must be at least N.
*> If JOBZ = 'V' and N > 1, LRWORK must be at least
*> 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the required sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> The dimension of array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK must be at least 1.
*> If JOBZ = 'V' and N > 1, LIWORK must be at least 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the required sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, AP is overwritten by values generated during the
*> reduction to tridiagonal form. If UPLO = 'U', the diagonal
*> and first superdiagonal of the tridiagonal matrix T overwrite
*> 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 AP to tridiagonal form.
-*> \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
*> eigenvectors did not converge, try setting ABSTOL to
*> 2*DLAMCH('S').
-*> \endverbatim
-*> \verbatim
+*>
*> See "Computing Small Singular Values of Bidiagonal Matrices
*> with Guaranteed High Relative Accuracy," by Demmel and
*> Kahan, LAPACK Working Note #3.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the transformed matrix, stored in the
*> same format as A.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AP are destroyed.
*> \endverbatim
*>
*> is stored in the array BP as follows:
*> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j;
*> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the triangular factor U or L from the Cholesky
*> factorization B = U**H*U or B = L*L**H, in the same storage
*> format as B.
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AP are destroyed.
*> \endverbatim
*>
*> is stored in the array BP as follows:
*> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j;
*> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the triangular factor U or L from the Cholesky
*> factorization B = U**H*U or B = L*L**H, in the same storage
*> format as B.
*> If N <= 1, LWORK >= 1.
*> If JOBZ = 'N' and N > 1, LWORK >= N.
*> If JOBZ = 'V' and N > 1, LWORK >= 2*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the required sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> If N <= 1, LRWORK >= 1.
*> If JOBZ = 'N' and N > 1, LRWORK >= N.
*> If JOBZ = 'V' and N > 1, LRWORK >= 1 + 5*N + 2*N**2.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the required sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> The dimension of array IWORK.
*> If JOBZ = 'N' or N <= 1, LIWORK >= 1.
*> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the required sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the contents of AP are destroyed.
*> \endverbatim
*>
*> is stored in the array BP as follows:
*> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j;
*> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the triangular factor U or L from the Cholesky
*> factorization B = U**H*U or B = L*L**H, in the same storage
*> format as B.
*> \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'.
*> \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.
*> 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 AP to tridiagonal form.
-*> \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**H*B*Z = I;
*> if ITYPE = 3, Z**H*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.
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> A = U*D*U**H or A = L*D*L**H as computed by ZHPTRF, stored as
*> to obtain the factor U or L from the factorization
*> A = U*D*U**H or A = L*D*L**H as computed by ZHPTRF, stored as
*> a packed triangular matrix in the same storage format as A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFP is an output argument and on exit
*> contains the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) =
*> IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were
*> interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block structure
*> of D, as determined by ZHPTRF.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L, stored as a packed triangular
*> matrix overwriting A (see below for further details).
*> On entry, the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by ZHPTRF,
*> stored as a packed triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (Hermitian) inverse of the original
*> matrix, stored as a packed triangular matrix. The j-th column
*> of inv(A) is stored in the array AP as follows:
*> \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
*> Schur form). If INFO = 0 and JOB = 'E', the contents of
*> H are unspecified on exit. (The output value of H when
*> INFO.GT.0 is given under the description of INFO below.)
-*> \endverbatim
-*> \verbatim
+*>
*> Unlike earlier versions of ZHSEQR, this subroutine may
*> explicitly H(i,j) = 0 for i.GT.j and j = 1, 2, ... ILO-1
*> or j = IHI+1, IHI+2, ... N.
*> may be required for optimal performance. A workspace
*> query is recommended to determine the optimal workspace
*> size.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then ZHSEQR does a workspace query.
*> In this case, ZHSEQR checks the input parameters and
*> estimates the optimal workspace size for the given
*> 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 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 COMPZ = 'V', then on exit
-*> \endverbatim
-*> \verbatim
+*>
*> (final value of Z) = (initial value of Z)*U
-*> \endverbatim
-*> \verbatim
+*>
*> where U is the unitary 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 unitary matrix in (*) (regard-
*> less of the value of JOB.)
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and COMPZ = 'N', then Z is not
*> accessed.
*> \endverbatim
*> TRANS is INTEGER
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> BLAS_NO_TRANS y := alpha*abs(A)*abs(x) + beta*abs(y)
*> BLAS_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
*> BLAS_CONJ_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> On entry, INCY specifies the increment for the elements of
*> Y. INCY must not be zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> Level 2 Blas routine.
*> \endverbatim
*>
*> TRANS is INTEGER
*> On entry, TRANS specifies the operation to be performed as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> BLAS_NO_TRANS y := alpha*abs(A)*abs(x) + beta*abs(y)
*> BLAS_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
*> BLAS_CONJ_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y)
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> On entry, INCY specifies the increment for the elements of
*> Y. INCY must not be zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> Level 2 Blas routine.
*> \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 = BLAS_UPPER Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = BLAS_LOWER Only the lower triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> 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
*> 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
*> On entry, UPLO specifies whether the upper or lower
*> triangular part of the array A is to be referenced as
*> follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = BLAS_UPPER Only the upper triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = BLAS_LOWER Only the lower triangular part of A
*> is to be referenced.
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> 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
*> Details of the interchanges and the block structure of D.
*> If UPLO = 'U', only the last KB elements of IPIV are set;
*> if UPLO = 'L', only the first KB elements are set.
-*> \endverbatim
-*> \verbatim
+*>
*> If IPIV(k) > 0, then rows and columns k and IPIV(k) were
*> interchanged and D(k,k) is a 1-by-1 diagonal block.
*> If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and
*> per eigenvalue; elements i+1:ihi of W contain
*> those eigenvalues which have been successfully
*> computed.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .FALSE., then on exit,
*> the remaining unconverged eigenvalues are the
*> eigenvalues of the upper Hessenberg matrix
*> rows and columns ILO thorugh INFO of the final,
*> output value of H.
-*> \endverbatim
-*> \verbatim
+*>
*> If INFO .GT. 0 and WANTT is .TRUE., then on exit
*> (*) (initial value of H)*U = U*(final value of H)
*> where U is an orthognal 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
*> (final value of Z) = (initial value of Z)*U
*> where U is the orthogonal matrix in (*)
*> SQRE is INTEGER
*> = 0: the lower block is an NR-by-NR square matrix.
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> The bidiagonal matrix has row dimension N = NL + NR + 1,
*> and column dimension M = N + SQRE.
*> \endverbatim
*> UPLO is CHARACTER
*> On entry, UPLO specifies whether the RFP matrix A came from
*> an upper or lower triangular matrix as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'U' or 'u' RFP A came from an upper triangular
*> matrix
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO = 'L' or 'l' RFP A came from a lower triangular
*> matrix
*> \endverbatim
*> The j-th column of A is stored in the j-th column of the
*> array AB as follows:
*> AB(ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the equilibrated matrix, in the same storage format
*> as A. See EQUED for the form of the equilibrated matrix.
*> \endverbatim
*> by diag(C).
*> = 'B': Both row and column equilibration, i.e., A has been
*> replaced by diag(R) * A * diag(C).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if row or column scaling
*> should be done based on the ratio of the row or column scaling
*> factors. If ROWCND < THRESH, row scaling is done, and if
*> COLCND < THRESH, column scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if row scaling
*> should be done based on the absolute size of the largest matrix
*> element. If AMAX > LARGE or AMAX < SMALL, row scaling is done.
*> by diag(C).
*> = 'B': Both row and column equilibration, i.e., A has been
*> replaced by diag(R) * A * diag(C).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if row or column scaling
*> should be done based on the ratio of the row or column scaling
*> factors. If ROWCND < THRESH, row scaling is done, and if
*> COLCND < THRESH, column scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if row scaling
*> should be done based on the absolute size of the largest matrix
*> element. If AMAX > LARGE or AMAX < SMALL, row scaling is done.
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**H *U or A = L*L**H of the band
*> matrix A, in the same storage format as A.
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED = 'Y', the equilibrated matrix:
*> diag(S) * A * diag(S).
*> \endverbatim
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the equilibrated matrix: diag(S) * A * diag(S), in
*> the same storage format as A.
*> \endverbatim
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> \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
*> .FALSE., then the contents of H are unspecified on exit.
*> (The output value of H when INFO.GT.0 is given under the
*> description of INFO below.)
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine may explicitly set H(i,j) = 0 for i.GT.j and
*> j = 1, 2, ... ILO-1 or j = IHI+1, IHI+2, ... N.
*> \endverbatim
*> is sufficient, but LWORK typically as large as 6*N may
*> be required for optimal performance. A workspace query
*> to determine the optimal workspace size is recommended.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then ZLAQR0 does a workspace query.
*> In this case, ZLAQR0 checks the input parameters and
*> estimates the optimal workspace size for the given
*> \param[in] S2
*> \verbatim
*> S2 is COMPLEX*16
-*> \endverbatim
-*> \verbatim
+*>
*> S1 and S2 are the shifts defining K in (*) above.
*> \endverbatim
*>
*> The dimension of the work array WORK. LWORK = 2*NW
*> suffices, but greater efficiency may result from larger
*> values of LWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; ZLAQR2
*> only estimates the optimal workspace size for the given
*> values of N, NW, KTOP and KBOT. The estimate is returned
*> The dimension of the work array WORK. LWORK = 2*NW
*> suffices, but greater efficiency may result from larger
*> values of LWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; ZLAQR3
*> only estimates the optimal workspace size for the given
*> values of N, NW, KTOP and KBOT. The estimate is returned
*> .FALSE., then the contents of H are unspecified on exit.
*> (The output value of H when INFO.GT.0 is given under the
*> description of INFO below.)
-*> \endverbatim
-*> \verbatim
+*>
*> This subroutine may explicitly set H(i,j) = 0 for i.GT.j and
*> j = 1, 2, ... ILO-1 or j = IHI+1, IHI+2, ... N.
*> \endverbatim
*> is sufficient, but LWORK typically as large as 6*N may
*> be required for optimal performance. A workspace query
*> to determine the optimal workspace size is recommended.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then ZLAQR4 does a workspace query.
*> In this case, ZLAQR4 checks the input parameters and
*> estimates the optimal workspace size for the given
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**H *U or A = L*L**H of the band
*> matrix A, in the same storage format as A.
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the equilibrated matrix: diag(S) * A * diag(S), in
*> the same storage format as A.
*> \endverbatim
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if EQUED = 'Y', the equilibrated matrix:
*> diag(S) * A * diag(S).
*> \endverbatim
*> = 'N': No equilibration.
*> = 'Y': Equilibration was done, i.e., A has been replaced by
*> diag(S) * A * diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH is a threshold value used to decide if scaling should be done
*> based on the ratio of the scaling factors. If SCOND < THRESH,
*> scaling is done.
-*> \endverbatim
-*> \verbatim
+*>
*> LARGE and SMALL are threshold values used to decide if scaling should
*> be done based on the absolute size of the largest matrix element.
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
*> \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
*> Details of the interchanges and the block structure of D.
*> If UPLO = 'U', only the last KB elements of IPIV are set;
*> if UPLO = 'L', only the first KB elements are set.
-*> \endverbatim
-*> \verbatim
+*>
*> If IPIV(k) > 0, then rows and columns k and IPIV(k) were
*> interchanged and D(k,k) is a 1-by-1 diagonal block.
*> If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and
*> \param[in,out] CNORM
*> \verbatim
*> CNORM is or output) DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
*> contains the norm of the off-diagonal part of the j-th column
*> of A. If TRANS = 'N', CNORM(j) must be greater than or equal
*> to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
*> must be greater than or equal to the 1-norm.
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'N', CNORM is an output argument and CNORM(j)
*> returns the 1-norm of the offdiagonal part of the j-th column
*> of A.
*> \param[in,out] CNORM
*> \verbatim
*> CNORM is or output) DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
*> contains the norm of the off-diagonal part of the j-th column
*> of A. If TRANS = 'N', CNORM(j) must be greater than or equal
*> to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
*> must be greater than or equal to the 1-norm.
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'N', CNORM is an output argument and CNORM(j)
*> returns the 1-norm of the offdiagonal part of the j-th column
*> of A.
*> \param[in,out] CNORM
*> \verbatim
*> CNORM is or output) DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
*> contains the norm of the off-diagonal part of the j-th column
*> of A. If TRANS = 'N', CNORM(j) must be greater than or equal
*> to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
*> must be greater than or equal to the 1-norm.
-*> \endverbatim
-*> \verbatim
+*>
*> If NORMIN = 'N', CNORM is an output argument and CNORM(j)
*> returns the 1-norm of the offdiagonal part of the j-th column
*> of A.
*> (M,1) if SIDE = 'R'
*> On entry, the n-vector C1 if SIDE = 'L', or the m-vector C1
*> if SIDE = 'R'.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the first row of P*C if SIDE = 'L', or the first
*> column of C*P if SIDE = 'R'.
*> \endverbatim
*> (LDC, N-1) if SIDE = 'R'
*> On entry, the (m - 1) x n matrix C2 if SIDE = 'L', or the
*> m x (n - 1) matrix C2 if SIDE = 'R'.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, rows 2:m of P*C if SIDE = 'L', or columns 2:m of C*P
*> if SIDE = 'R'.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor S from the split Cholesky
*> factorization A = S**H*S. See Further Details.
*> \endverbatim
*> 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).
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**H *U or A = L*L**H of the band
*> matrix A, in the same storage format as A.
*> 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).
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**H *U or A = L*L**H of the band matrix
*> A, in the same storage format as A (see AB). If EQUED = 'Y',
*> then AFB is the factored form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFB is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**H *U or A = L*L**H.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AFB is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**H *U or A = L*L**H of the equilibrated
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**H *U or A = L*L**H of the band
*> matrix A, in the same storage format as A.
*> 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).
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**H*U or A = L*L**H of the band
*> matrix A, in the same storage format as A.
*> of lower packed A. The LDA of RFP A is (N+1)/2 when TRANSR =
*> 'C'. When TRANSR is 'N' the LDA is N+1 when N is even and N
*> is odd. See the Note below for more details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization RFP A = U**H*U or RFP A = L*L**H.
*> \endverbatim
*> > 0: if INFO = i, the leading minor of order i is not
*> positive definite, and the factorization could not be
*> completed.
-*> \endverbatim
-*> \verbatim
+*>
*> Further Notes on RFP Format:
*> ============================
-*> \endverbatim
-*> \verbatim
+*>
*> We first consider Standard Packed Format when N is even.
*> We give an example where N = 6.
-*> \endverbatim
-*> \verbatim
+*>
*> AP is Upper AP is Lower
-*> \endverbatim
-*> \verbatim
+*>
*> 00 01 02 03 04 05 00
*> 11 12 13 14 15 10 11
*> 22 23 24 25 20 21 22
*> 33 34 35 30 31 32 33
*> 44 45 40 41 42 43 44
*> 55 50 51 52 53 54 55
-*> \endverbatim
-*> \verbatim
+*>
*> Let TRANSR = 'N'. RFP holds AP as follows:
*> For UPLO = 'U' the upper trapezoid A(0:5,0:2) consists of the last
*> three columns of AP upper. The lower triangle A(4:6,0:2) consists of
*> conjugate-transpose of the last three columns of AP lower.
*> To denote conjugate we place -- above the element. This covers the
*> case N even and TRANSR = 'N'.
-*> \endverbatim
-*> \verbatim
+*>
*> RFP A RFP A
-*> \endverbatim
-*> \verbatim
+*>
*> -- -- --
*> 03 04 05 33 43 53
*> -- --
*> 13 14 15 00 44 54
*> --
*> 23 24 25 10 11 55
-*> \endverbatim
-*> \verbatim
+*>
*> 33 34 35 20 21 22
*> --
*> 00 44 45 30 31 32
*> 01 11 55 40 41 42
*> -- -- --
*> 02 12 22 50 51 52
-*> \endverbatim
-*> \verbatim
+*>
*> Now let TRANSR = 'C'. RFP A in both UPLO cases is just the conjugate-
*> transpose of RFP A above. One therefore gets:
-*> \endverbatim
-*> \verbatim
+*>
*> RFP A RFP A
-*> \endverbatim
-*> \verbatim
+*>
*> -- -- -- -- -- -- -- -- -- --
*> 03 13 23 33 00 01 02 33 00 10 20 30 40 50
*> -- -- -- -- -- -- -- -- -- --
*> 04 14 24 34 44 11 12 43 44 11 21 31 41 51
*> -- -- -- -- -- -- -- -- -- --
*> 05 15 25 35 45 55 22 53 54 55 22 32 42 52
-*> \endverbatim
-*> \verbatim
+*>
*> We next consider Standard Packed Format when N is odd.
*> We give an example where N = 5.
-*> \endverbatim
-*> \verbatim
+*>
*> AP is Upper AP is Lower
-*> \endverbatim
-*> \verbatim
+*>
*> 00 01 02 03 04 00
*> 11 12 13 14 10 11
*> 22 23 24 20 21 22
*> 33 34 30 31 32 33
*> 44 40 41 42 43 44
-*> \endverbatim
-*> \verbatim
+*>
*> Let TRANSR = 'N'. RFP holds AP as follows:
*> For UPLO = 'U' the upper trapezoid A(0:4,0:2) consists of the last
*> three columns of AP upper. The lower triangle A(3:4,0:1) consists of
*> conjugate-transpose of the last two columns of AP lower.
*> To denote conjugate we place -- above the element. This covers the
*> case N odd and TRANSR = 'N'.
-*> \endverbatim
-*> \verbatim
+*>
*> RFP A RFP A
-*> \endverbatim
-*> \verbatim
+*>
*> -- --
*> 02 03 04 00 33 43
*> --
*> 12 13 14 10 11 44
-*> \endverbatim
-*> \verbatim
+*>
*> 22 23 24 20 21 22
*> --
*> 00 33 34 30 31 32
*> -- --
*> 01 11 44 40 41 42
-*> \endverbatim
-*> \verbatim
+*>
*> Now let TRANSR = 'C'. RFP A in both UPLO cases is just the conjugate-
*> transpose of RFP A above. One therefore gets:
-*> \endverbatim
-*> \verbatim
+*>
*> RFP A RFP A
-*> \endverbatim
-*> \verbatim
+*>
*> -- -- -- -- -- -- -- -- --
*> 02 12 22 00 01 00 10 20 30 40 50
*> -- -- -- -- -- -- -- -- --
*> of lower packed A. The LDA of RFP A is (N+1)/2 when TRANSR =
*> 'C'. When TRANSR is 'N' the LDA is N+1 when N is even and N
*> is odd. See the Note below for more details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the Hermitian inverse of the original matrix, in the
*> same storage format.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**H *U or A = L*L**H.
*> \endverbatim
*> triangular part of the matrix A, and the strictly upper
*> triangular part of A is not referenced. A is not modified if
*> FACT = 'F' or 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**H *U or A = L*L**H, in the same storage
*> format as A. If EQUED .ne. 'N', then AF is the factored form
*> of the equilibrated matrix diag(S)*A*diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**H *U or A = L*L**H of the original
*> matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**H *U or A = L*L**H of the equilibrated
*> the strictly upper triangular part of A is not referenced. A is
*> not modified if FACT = 'F' or 'N', or if FACT = 'E' and EQUED =
*> 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**T*U or A = L*L**T, in the same storage
*> format as A. If EQUED .ne. 'N', then AF is the factored
*> form of the equilibrated matrix diag(S)*A*diag(S).
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the original
*> matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AF is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**T*U or A = L*L**T of the equilibrated
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> computed.
*> = 1.0 : Use the extra-precise refinement algorithm.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**H *U or A = L*L**H.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**H *U or A = L*L**H.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization A = U**H*U or A = L*L**H, in the same storage
*> format as A.
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details. A is not modified if
*> FACT = 'F' or 'N', or if FACT = 'E' and EQUED = 'N' on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> factorization A = U**H*U or A = L*L**H, in the same storage
*> format as A. If EQUED .ne. 'N', then AFP is the factored
*> form of the equilibrated matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFP is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**H * U or A = L * L**H of the original
*> matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'E', then AFP is an output argument and on exit
*> returns the triangular factor U or L from the Cholesky
*> factorization A = U**H * U or A = L * L**H of the equilibrated
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the triangular factor U or L from the
*> Cholesky factorization A = U**H*U or A = L*L**H, in the same
*> storage format as A.
*> array AP as follows:
*> if UPLO = 'U', AP(i + (j-1)*j/2) = U(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = L(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the upper or lower triangle of the (Hermitian)
*> inverse of A, overwriting the input factor U or L.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization as above.
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the factor U or L from the Cholesky
*> factorization as above.
*> \endverbatim
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
*> See below for further details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> A = U*D*U**T or A = L*D*L**T as computed by ZSPTRF, stored as
*> to obtain the factor U or L from the factorization
*> A = U*D*U**T or A = L*D*L**T as computed by ZSPTRF, stored as
*> a packed triangular matrix in the same storage format as A.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AFP is an output argument and on exit
*> contains the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) =
*> IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were
*> interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block structure
*> of D, as determined by ZSPTRF.
*> 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L, stored as a packed triangular
*> matrix overwriting A (see below for further details).
*> On entry, the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by ZSPTRF,
*> stored as a packed triangular matrix.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix, stored as a packed triangular matrix. The j-th column
*> of inv(A) is stored in the array AP as follows:
*> Note that for COMPZ = 'V', then if N is less than or
*> equal to the minimum divide size, usually 25, then LWORK need
*> only be 1.
-*> \endverbatim
-*> \verbatim
+*>
*> If LWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal sizes of the WORK, RWORK and
*> IWORK arrays, returns these values as the first entries of
*> Note that for COMPZ = 'I' or 'V', then if N is less than or
*> equal to the minimum divide size, usually 25, then LRWORK
*> need only be max(1,2*(N-1)).
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> Note that for COMPZ = 'I' or 'V', then if N is less than or
*> equal to the minimum divide size, usually 25, then LIWORK
*> need only be 1.
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal sizes of the WORK, RWORK
*> and IWORK arrays, returns these values as the first entries
*> \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'.
*> \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.
*> > 0: if INFO = i, then i eigenvectors failed to converge
*> in MAXITS iterations. Their indices are stored in
*> array IFAIL.
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> MAXITS INTEGER, default = 5
*> The maximum number of iterations performed.
-*> \endverbatim
-*> \verbatim
+*>
*> EXTRA INTEGER, default = 2
*> The number of iterations performed after norm growth
*> criterion is satisfied, should be at least 1.
*> \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'.
*> \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.
*> 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> INFO is INTEGER
*> = 0: successful exit
*> < 0: if INFO = -i, the i-th argument had an illegal value
-*> \endverbatim
-*> \verbatim
+*>
*> Internal Parameters
*> ===================
-*> \endverbatim
-*> \verbatim
+*>
*> ITMAX is the maximum number of steps of iterative refinement.
*> \endverbatim
*>
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> compilation environment does not support DOUBLE
*> PRECISION.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the block diagonal matrix D and the
*> multipliers used to obtain the factor U or L from the
*> factorization A = U*D*U**T or A = L*D*L**T as computed by
*> ZSYTRF.
*> for LWORK < N, TRS will be done with Level BLAS 2
*> for LWORK >= N, TRS will be done with Level BLAS 3
-*> \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
*> contains the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> A = U*D*U**T or A = L*D*L**T as computed by ZSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L from the factorization
*> is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) =
*> IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were
*> interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block structure
*> of D, as determined by ZSYTRF.
*> The length of WORK. LWORK >= max(1,2*N), and for best
*> performance, when FACT = 'N', LWORK >= max(1,2*N,N*NB), where
*> NB is the optimal blocksize for ZSYTRF.
-*> \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
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by
*> diag(S)*A*diag(S).
*> \endverbatim
*> contains the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L from the factorization A =
*> U*D*U**T or A = L*D*L**T as computed by DSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then AF is an output argument and on exit
*> returns the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L from the factorization A =
*> diagonal block. If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0,
*> then rows and columns k+1 and -IPIV(k) were interchanged
*> and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
-*> \endverbatim
-*> \verbatim
+*>
*> If FACT = 'N', then IPIV is an output argument and on exit
*> contains details of the interchanges and the block
*> structure of D, as determined by DSYTRF.
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> 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) * dlamch('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) * dlamch('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) * dlamch('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
+*>
*> See Lapack Working Note 165 for further details and extra
*> cautions.
*> \endverbatim
*> that entry will be filled with default value used for that
*> parameter. Only positions up to NPARAMS are accessed; defaults
*> are used for higher-numbered parameters.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
*> refinement or not.
*> Default: 1.0D+0
*> computed.
*> = 1.0 : Use the extra-precise refinement algorithm.
*> (other values are reserved for future use)
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual
*> computations allowed for refinement.
*> Default: 10
*> Gaussian elimination, the guarantees in
*> err_bnds_norm and err_bnds_comp may no longer be
*> trustworthy.
-*> \endverbatim
-*> \verbatim
+*>
*> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code
*> will attempt to find a solution with small componentwise
*> relative error in the double-precision algorithm. Positive
*> A is COMPLEX*16 array, dimension (LDA,N)
*> On entry, the NB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by ZSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L (see below for further details).
*> \endverbatim
*> 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.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the block diagonal matrix D and the multipliers used
*> to obtain the factor U or L (see below for further details).
*> \endverbatim
*> LWORK is INTEGER
*> The length of WORK. LWORK >=1. For best performance
*> LWORK >= N*NB, where NB is the block size returned by ILAENV.
-*> \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
*> A is COMPLEX*16 array, dimension (LDA,N)
*> On entry, the block diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by ZSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> A is COMPLEX*16 array, dimension (LDA,N)
*> On entry, the NB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by ZSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> A is COMPLEX*16 array, dimension (LDA,N)
*> On entry, the NNB diagonal matrix D and the multipliers
*> used to obtain the factor U or L as computed by ZSYTRF.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, if INFO = 0, the (symmetric) inverse of the original
*> matrix. If UPLO = 'U', the upper triangular part of the
*> inverse is formed and the part of A below the diagonal is not
*> 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> an upper or lower triangular matrix as follows:
*> UPLO = 'U' or 'u' RFP A came from an upper triangular matrix
*> UPLO = 'L' or 'l' RFP A came from a lower triangular matrix
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> TRANS is CHARACTER*1
*> On entry, TRANS specifies the form of op( A ) to be used
*> in the matrix multiplication as follows:
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'N' or 'n' op( A ) = A.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS = 'C' or 'c' op( A ) = conjg( A' ).
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> DIAG is CHARACTER*1
*> On entry, DIAG specifies whether or not RFP 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
-*> \verbatim
+*>
*> Unchanged on exit.
*> \endverbatim
*>
*> elements of lower packed A. The LDA of RFP A is (N+1)/2 when
*> TRANSR = 'C'. When TRANSR is 'N' the LDA is N+1 when N is
*> even and N is odd. See the Note below for more details.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the (triangular) inverse of the original matrix, in
*> the same storage format.
*> \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
*> \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.
*> The dimension of the array WORK. LWORK >= 1
*> If IJOB = 1, 2 or 4, LWORK >= 2*M*(N-M)
*> If IJOB = 3 or 5, LWORK >= 4*M*(N-M)
-*> \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 dimension of the array IWORK. LIWORK >= 1.
*> If IJOB = 1, 2 or 4, LIWORK >= N+2;
*> If IJOB = 3 or 5, LIWORK >= MAX(N+2, 2*M*(N-M));
-*> \endverbatim
-*> \verbatim
+*>
*> If LIWORK = -1, then a workspace query is assumed; the
*> routine only calculates the optimal size of the IWORK array,
*> returns this value as the first entry of the IWORK array, and
*> \param[in] L
*> \verbatim
*> L is INTEGER
-*> \endverbatim
-*> \verbatim
+*>
*> 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.
*> \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
*> \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,
*> = 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
*> ===================
*>
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK > = 1.
*> If IJOB = 1 or 2 and TRANS = 'N', LWORK >= max(1,2*M*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
*> \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.
*> If JOB = 'N', LWORK >= 1;
*> if JOB = 'E', LWORK = max(1,M*(N-M));
*> if JOB = 'V' or 'B', LWORK >= max(1,2*M*(N-M)).
-*> \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
*> triangular part of A is not referenced. If DIAG = 'U', the
*> diagonal elements of A are also not referenced and are
*> assumed to be 1.
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, the (triangular) inverse of the original matrix, in
*> the same storage format.
*> \endverbatim
*> 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
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK. LWORK >= M-Q.
-*> \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
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK.
-*> \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
*> \verbatim
*> LRWORK is INTEGER
*> The dimension of the array RWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> If LRWORK = -1, then a workspace query is assumed; the routine
*> only calculates the optimal size of the RWORK array, returns
*> this value as the first entry of the work array, and no error
*> < 0: if INFO = -i, the i-th argument had an illegal value.
*> > 0: ZBBCSD did not converge. See the description of RWORK
*> above for details.
-*> \endverbatim
-*> \verbatim
+*>
*> Reference
*> =========
-*> \endverbatim
-*> \verbatim
+*>
*> [1] Brian D. Sutton. Computing the complete CS decomposition. Numer.
*> Algorithms, 50(1):33-65, 2009.
*> \endverbatim
*> The dimension of the array WORK. LWORK >= max(1,min(M,N)).
*> For optimum performance LWORK >= min(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
*> \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).
*> The dimension of the array WORK. LWORK >= IHI-ILO.
*> For optimum performance LWORK >= (IHI-ILO)*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
*> 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
*> 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
*> 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
*> 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
*> The dimension of the array WORK. LWORK >= N-1.
*> For optimum performance LWORK >= (N-1)*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
*> For optimum performance LWORK >= max(1,N*NB) if SIDE = 'L',
*> and LWORK >= max(1,M*NB) if SIDE = 'R', where NB is the
*> optimal blocksize. (NB = 0 if M = 0 or N = 0.)
-*> \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
*> \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).
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >= M*NB if SIDE = 'R', 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
*> For optimum performance LWORK >= N*NB if SIDE = 'L', and
*> LWORK >=M*NB if SIDE = 'R', 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
*> \verbatim
*> INFO is INTEGER
*> If 0, then everything ran OK.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far.
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> If CLATMR, CLATMS, CGEBRD, CUNGBR, or CBDSQR,
*> returns an error code, the
*> absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NTEST The number of tests performed, or which can
*> NFAIL The number of tests which have exceeded THRESH
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> ULP, ULPINV Finest relative precision and its inverse.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \verbatim
*> INFO is INTEGER
*> If 0, then everything ran OK.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far.
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> The number of sizes of matrices to use. If it is zero,
*> CCHKHS does nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NN - INTEGER array, dimension (NSIZES)
*> An array containing the sizes to be used for the matrices.
*> Zero values will be skipped. The values must be at least
*> zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES - INTEGER
*> The number of elements in DOTYPE. If it is zero, CCHKHS
*> does nothing. It must be at least zero. If it is MAXTYP+1
*> is only useful if DOTYPE(1:MAXTYP) is .FALSE. and
*> DOTYPE(MAXTYP+1) is .TRUE. .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> DOTYPE - LOGICAL array, dimension (NTYPES)
*> If DOTYPE(j) is .TRUE., then for each size in NN a
*> matrix of that size and of type j will be generated.
*> than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES)
*> will be ignored.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED - INTEGER array, dimension (4)
*> On entry ISEED specifies the seed of the random number
*> generator. The array elements should be between 0 and 4095;
*> next call to CCHKHS to continue the same random number
*> sequence.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH - REAL
*> A test will count as "failed" if the "error", computed as
*> described above, exceeds THRESH. Note that the error
*> it should not depend on the precision (single vs. double)
*> or the size of the matrix. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NOUNIT - INTEGER
*> The FORTRAN unit number for printing out error messages
*> (e.g., if a routine returns IINFO not equal to 0.)
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX array, dimension (LDA,max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed. On exit, A contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> The leading dimension of A, H, T1 and T2. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> H - COMPLEX array, dimension (LDA,max(NN))
*> The upper hessenberg matrix computed by CGEHRD. On exit,
*> H contains the Hessenberg form of the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> T1 - COMPLEX array, dimension (LDA,max(NN))
*> The Schur (="quasi-triangular") matrix computed by CHSEQR
*> if Z is computed. On exit, T1 contains the Schur form of
*> the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> T2 - COMPLEX array, dimension (LDA,max(NN))
*> The Schur matrix computed by CHSEQR when Z is not computed.
*> This should be identical to T1.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDU - INTEGER
*> The leading dimension of U, Z, UZ and UU. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> U - COMPLEX array, dimension (LDU,max(NN))
*> The unitary matrix computed by CGEHRD.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> Z - COMPLEX array, dimension (LDU,max(NN))
*> The unitary matrix computed by CHSEQR.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> UZ - COMPLEX array, dimension (LDU,max(NN))
*> The product of U times Z.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> W1 - COMPLEX array, dimension (max(NN))
*> The eigenvalues of A, as computed by a full Schur
*> decomposition H = Z T Z'. On exit, W1 contains the
*> eigenvalues of the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> W3 - COMPLEX array, dimension (max(NN))
*> The eigenvalues of A, as computed by a partial Schur
*> decomposition (Z not computed, T only computed as much
*> W3 contains the eigenvalues of the matrix in A, possibly
*> perturbed by CHSEIN.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTL - COMPLEX array, dimension (LDU,max(NN))
*> The conjugate transpose of the (upper triangular) left
*> eigenvector matrix for the matrix in T1.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTR - COMPLEX array, dimension (LDU,max(NN))
*> The (upper triangular) right eigenvector matrix for the
*> matrix in T1.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTY - COMPLEX array, dimension (LDU,max(NN))
*> The conjugate transpose of the left eigenvector matrix
*> for the matrix in H.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTX - COMPLEX array, dimension (LDU,max(NN))
*> The right eigenvector matrix for the matrix in H.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> UU - COMPLEX array, dimension (LDU,max(NN))
*> Details of the unitary matrix computed by CGEHRD.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> TAU - COMPLEX array, dimension (max(NN))
*> Further details of the unitary matrix computed by CGEHRD.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK - COMPLEX array, dimension (NWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NWORK - INTEGER
*> The number of entries in WORK. NWORK >= 4*NN(j)*NN(j) + 2.
-*> \endverbatim
-*> \verbatim
+*>
*> RWORK - REAL array, dimension (max(NN))
*> Workspace. Could be equivalenced to IWORK, but not SELECT.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IWORK - INTEGER array, dimension (max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> SELECT - LOGICAL array, dimension (max(NN))
*> Workspace. Could be equivalenced to IWORK, but not RWORK.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT - REAL array, dimension (14)
*> The values computed by the fourteen tests described above.
*> The values are currently limited to 1/ulp, to avoid
*> overflow.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> If 0, then everything ran OK.
*> -1: NSIZES < 0
*> If >2, then 30*N iterations were not enough to find an
*> eigenvalue or to decompose the problem.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> MTEST The number of tests defined: care must be taken
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL,
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> If CLATMR, CLATMS, CHETRD, CUNGTR, CSTEQR, SSTERF,
*> or CUNMC2 returns an error code, the
*> absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far.
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> \param[out] BETA
*> \verbatim
*> BETA is COMPLEX array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by CGGES.
*> ALPHA(k) / BETA(k) is the k-th generalized eigenvalue of A
*> and B.
*> \param[out] BETA
*> \verbatim
*> BETA is COMPLEX array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by CGGEV.
*> ( ALPHAR(k)+ALPHAI(k)*i ) / BETA(k) is the k-th
*> generalized eigenvalue of A and B.
*> \param[out] BETA1
*> \verbatim
*> BETA1 is COMPLEX array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> Like ALPHAR, ALPHAI, BETA, these arrays contain the
*> eigenvalues of A and B, but those computed when CGGEV only
*> computes a partial eigendecomposition, i.e. not the
*> \param[out] BETA
*> \verbatim
*> BETA is COMPLEX array, dimension (NSIZE)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, ALPHA/BETA are the eigenvalues.
*> \endverbatim
*>
*> \param[out] BETA
*> \verbatim
*> BETA is COMPLEX array, dimension (NSIZE)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, ALPHA/BETA are the eigenvalues.
*> \endverbatim
*>
*> -18: NWORK too small.
*> If CLATMR, CLATMS, CLATME or CGEES returns an error code,
*> the absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
*> -21: NWORK too small.
*> If CLATMR, CLATMS, CLATME or CGEEV returns an error code,
*> the absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NMAX Largest value in NN.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \param[out] BETA1
*> \verbatim
*> BETA1 is COMPLEX array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by CGEGS.
*> ALPHA1(k) / BETA1(k) is the k-th generalized eigenvalue of
*> the matrices in A and B.
*> \param[out] BETA2
*> \verbatim
*> BETA2 is COMPLEX array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by CGEGV.
*> ALPHA2(k) / BETA2(k) is the k-th generalized eigenvalue of
*> the matrices in A and B.
*> The number of sizes of matrices to use. If it is zero,
*> CDRVSG does nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NN INTEGER array, dimension (NSIZES)
*> An array containing the sizes to be used for the matrices.
*> Zero values will be skipped. The values must be at least
*> zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES INTEGER
*> The number of elements in DOTYPE. If it is zero, CDRVSG
*> does nothing. It must be at least zero. If it is MAXTYP+1
*> is only useful if DOTYPE(1:MAXTYP) is .FALSE. and
*> DOTYPE(MAXTYP+1) is .TRUE. .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> DOTYPE LOGICAL array, dimension (NTYPES)
*> If DOTYPE(j) is .TRUE., then for each size in NN a
*> matrix of that size and of type j will be generated.
*> than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES)
*> will be ignored.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED INTEGER array, dimension (4)
*> On entry ISEED specifies the seed of the random number
*> generator. The array elements should be between 0 and 4095;
*> next call to CDRVSG to continue the same random number
*> sequence.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH REAL
*> A test will count as "failed" if the "error", computed as
*> described above, exceeds THRESH. Note that the error
*> it should not depend on the precision (single vs. double)
*> or the size of the matrix. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NOUNIT INTEGER
*> The FORTRAN unit number for printing out error messages
*> (e.g., if a routine returns IINFO not equal to 0.)
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A COMPLEX array, dimension (LDA , max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed. On exit, A contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA INTEGER
*> The leading dimension of A. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> B COMPLEX array, dimension (LDB , max(NN))
*> Used to hold the Hermitian positive definite matrix for
*> the generailzed problem.
*> On exit, B contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDB INTEGER
*> The leading dimension of B. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D REAL array, dimension (max(NN))
*> The eigenvalues of A. On exit, the eigenvalues in D
*> correspond with the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> Z COMPLEX array, dimension (LDZ, max(NN))
*> The matrix of eigenvectors.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDZ INTEGER
*> The leading dimension of ZZ. It must be at least 1 and
*> at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> AB COMPLEX array, dimension (LDA, max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> BB COMPLEX array, dimension (LDB, max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> AP COMPLEX array, dimension (max(NN)**2)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> BP COMPLEX array, dimension (max(NN)**2)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK COMPLEX array, dimension (NWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NWORK INTEGER
*> The number of entries in WORK. This must be at least
*> 2*N + N**2 where N = max( NN(j), 2 ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RWORK REAL array, dimension (LRWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LRWORK INTEGER
*> The number of entries in RWORK. This must be at least
*> max( 7*N, 1 + 4*N + 2*N*lg(N) + 3*N**2 ) where
*> N = max( NN(j) ) and lg( N ) = smallest integer k such
*> that 2**k >= N .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IWORK INTEGER array, dimension (LIWORK))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LIWORK INTEGER
*> The number of entries in IWORK. This must be at least
*> 2 + 5*max( NN(j) ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT REAL array, dimension (70)
*> The values computed by the 70 tests described above.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO INTEGER
*> If 0, then everything ran OK.
*> -1: NSIZES < 0
*> CHPGVD, CHEGVX, CHPGVX, CHBGVX returns an error code,
*> the absolute value of it is returned.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far (computed by SLAFTS).
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> The number of sizes of matrices to use. If it is zero,
*> CDRVST does nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NN INTEGER array, dimension (NSIZES)
*> An array containing the sizes to be used for the matrices.
*> Zero values will be skipped. The values must be at least
*> zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES INTEGER
*> The number of elements in DOTYPE. If it is zero, CDRVST
*> does nothing. It must be at least zero. If it is MAXTYP+1
*> is only useful if DOTYPE(1:MAXTYP) is .FALSE. and
*> DOTYPE(MAXTYP+1) is .TRUE. .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> DOTYPE LOGICAL array, dimension (NTYPES)
*> If DOTYPE(j) is .TRUE., then for each size in NN a
*> matrix of that size and of type j will be generated.
*> than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES)
*> will be ignored.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED INTEGER array, dimension (4)
*> On entry ISEED specifies the seed of the random number
*> generator. The array elements should be between 0 and 4095;
*> next call to CDRVST to continue the same random number
*> sequence.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH REAL
*> A test will count as "failed" if the "error", computed as
*> described above, exceeds THRESH. Note that the error
*> it should not depend on the precision (single vs. double)
*> or the size of the matrix. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NOUNIT INTEGER
*> The FORTRAN unit number for printing out error messages
*> (e.g., if a routine returns IINFO not equal to 0.)
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A COMPLEX array, dimension (LDA , max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed. On exit, A contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA INTEGER
*> The leading dimension of A. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D1 REAL array, dimension (max(NN))
*> The eigenvalues of A, as computed by CSTEQR simlutaneously
*> with Z. On exit, the eigenvalues in D1 correspond with the
*> matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D2 REAL array, dimension (max(NN))
*> The eigenvalues of A, as computed by CSTEQR if Z is not
*> computed. On exit, the eigenvalues in D2 correspond with
*> the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D3 REAL array, dimension (max(NN))
*> The eigenvalues of A, as computed by SSTERF. On exit, the
*> eigenvalues in D3 correspond with the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WA1 REAL array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> WA2 REAL array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> WA3 REAL array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> U COMPLEX array, dimension (LDU, max(NN))
*> The unitary matrix computed by CHETRD + CUNGC3.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDU INTEGER
*> The leading dimension of U, Z, and V. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> V COMPLEX array, dimension (LDU, max(NN))
*> The Housholder vectors computed by CHETRD in reducing A to
*> tridiagonal form.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> TAU COMPLEX array, dimension (max(NN))
*> The Householder factors computed by CHETRD in reducing A
*> to tridiagonal form.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> Z COMPLEX array, dimension (LDU, max(NN))
*> The unitary matrix of eigenvectors computed by CHEEVD,
*> CHEEVX, CHPEVD, CHPEVX, CHBEVD, and CHBEVX.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK - COMPLEX array of dimension ( LWORK )
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LWORK - INTEGER
*> The number of entries in WORK. This must be at least
*> 2*max( NN(j), 2 )**2.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RWORK REAL array, dimension (3*max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LRWORK - INTEGER
*> The number of entries in RWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> IWORK INTEGER array, dimension (6*max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LIWORK - INTEGER
*> The number of entries in IWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT REAL array, dimension (??)
*> The values computed by the tests described above.
*> The values are currently limited to 1/ulp, to avoid
*> overflow.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO INTEGER
*> If 0, then everything ran OK.
*> -1: NSIZES < 0
*> or SORMC2 returns an error code, the
*> absolute value of it is returned.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far (computed by SLAFTS).
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> <0, input parameter -INFO is incorrect
*> >0, CLATMR, CLATMS, CLATME or CGET24 returned an error
*> code and INFO is its absolute value
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
*> If <0, then input paramter -INFO is incorrect.
*> If >0, CLATMR, CLATMS, CLATME or CGET23 returned an error
*> code, and INFO is its absolute value.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NMAX Largest value in NN or 12.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \param[out] BETA
*> \verbatim
*> BETA is REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized singular value pairs of A and B, the
*> ``diagonal'' matrices D1 and D2 are constructed from
*> ALPHA and BETA, see subroutine CGGSVD for details.
*> Specifies the type of tests to be performed.
*> 1: U expressed as a dense unitary matrix:
*> RESULT(1) = | A - U S U* | / ( |A| n ulp ) *andC> RESULT(2) = | I - UU* | / ( n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 2: U expressed as a product V of Housholder transformations:
*> RESULT(1) = | A - V S V* | / ( |A| n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 3: U expressed both as a dense unitary matrix and
*> as a product of Housholder transformations:
*> RESULT(1) = | I - UV* | / ( n ulp )
*> Specifies the type of tests to be performed.
*> 1: U expressed as a dense orthogonal matrix:
*> RESULT(1) = | A - U S U' | / ( |A| n ulp ) *andC> RESULT(2) = | I - UU' | / ( n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO CHARACTER
*> If UPLO='U', the upper triangle of A will be used and the
*> (strictly) lower triangle will not be referenced. If
*> UPLO='L', the lower triangle of A will be used and the
*> (strictly) upper triangle will not be referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> N INTEGER
*> The size of the matrix. If it is zero, CHET22 does nothing.
*> It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> M INTEGER
*> The number of columns of U. If it is zero, CHET22 does
*> nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> KBAND INTEGER
*> The bandwidth of the matrix. It may only be zero or one.
*> If zero, then S is diagonal, and E is not referenced. If
*> one, then S is symmetric tri-diagonal.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A COMPLEX array, dimension (LDA , N)
*> The original (unfactored) matrix. It is assumed to be
*> symmetric, and only the upper (UPLO='U') or only the lower
*> (UPLO='L') will be referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA INTEGER
*> The leading dimension of A. It must be at least 1
*> and at least N.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D REAL array, dimension (N)
*> The diagonal of the (symmetric tri-) diagonal matrix.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> E REAL array, dimension (N)
*> The off-diagonal of the (symmetric tri-) diagonal matrix.
*> E(1) is ignored, E(2) is the (1,2) and (2,1) element, etc.
*> Not referenced if KBAND=0.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> U COMPLEX array, dimension (LDU, N)
*> If ITYPE=1, this contains the orthogonal matrix in
*> the decomposition, expressed as a dense matrix.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDU INTEGER
*> The leading dimension of U. LDU must be at least N and
*> at least 1.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> V COMPLEX array, dimension (LDV, N)
*> If ITYPE=2 or 3, the lower triangle of this array contains
*> the Householder vectors used to describe the orthogonal
*> matrix in the decomposition. If ITYPE=1, then it is not
*> referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDV INTEGER
*> The leading dimension of V. LDV must be at least N and
*> at least 1.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> TAU COMPLEX array, dimension (N)
*> If ITYPE >= 2, then TAU(j) is the scalar factor of
*> v(j) v(j)' in the Householder transformation H(j) of
*> the product U = H(1)...H(n-2)
*> If ITYPE < 2, then TAU is not referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK COMPLEX array, dimension (2*N**2)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RWORK REAL array, dimension (N)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT REAL array, dimension (2)
*> The values computed by the two tests described above. The
*> values are currently limited to 1/ulp, to avoid overflow.
*> Specifies the type of tests to be performed.
*> 1: U expressed as a dense unitary matrix:
*> RESULT(1) = | A - U S U* | / ( |A| n ulp ) *andC> RESULT(2) = | I - UU* | / ( n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 2: U expressed as a product V of Housholder transformations:
*> RESULT(1) = | A - V S V* | / ( |A| n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 3: U expressed both as a dense unitary matrix and
*> as a product of Housholder transformations:
*> RESULT(1) = | I - UV* | / ( n ulp )
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
-*> \endverbatim
-*> \verbatim
+*>
*> A is assumed to be upper triangular in rows and columns
*> 1:ILO-1 and IHI+1:N, so Q differs from the identity only in
*> rows and columns ILO+1:IHI.
*> KU is INTEGER
*> Used only if A is a general band matrix or if A is
*> triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xGB, specifies the number of superdiagonals of A,
*> and 0 <= KU <= N-1.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xTR, xTP, or xTB, specifies whether or not the
*> matrix has unit diagonal:
*> = 1: matrix has non-unit diagonal (default)
*> If ITYPE < 0, then type abs(ITYPE) is generated and then
*> swapped end for end (A(I,J) := A'(N-J,N-I).) See also
*> the description of AMAGN and RSIGN.
-*> \endverbatim
-*> \verbatim
+*>
*> Special types:
*> = 0: the zero matrix.
*> = 1: the identity.
*> followed by a k x k identity block, where k=(N-1)/2.
*> If N is even, then k=(N-2)/2, and a zero diagonal entry
*> is tacked onto the end.
-*> \endverbatim
-*> \verbatim
+*>
*> Diagonal types. The diagonal consists of NZ1 zeros, then
*> k=N-NZ1-NZ2 nonzeros. The subdiagonal is zero. ITYPE
*> specifies the nonzero diagonal entries as follows:
*> \param[in] BETA
*> \verbatim
*> BETA is COMPLEX
-*> \endverbatim
-*> \verbatim
+*>
*> parameters to decide whether the pair (ALPHA, BETA) is
*> selected.
*> \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
-*> \verbatim
+*>
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the matrix A.
*> N must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> K - INTEGER
*> On entry, K specifies the number of super-diagonals of the
*> matrix A. K must satisfy 0 .le. K.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> ALPHA - COMPLEX
*> On entry, ALPHA specifies the scalar alpha.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX array, dimension( LDA, N )
*> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
*> by n part of the array A must contain the upper triangular
*> 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 )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> On entry, LDA specifies the first dimension of A as declared
*> in the calling (sub) program. LDA must be at least
*> ( k + 1 ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> X - COMPLEX array, dimension at least
*> ( 1 + ( N - 1 )*abs( INCX ) ).
*> Before entry, the incremented array X must contain the
*> vector x.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> INCX - INTEGER
*> On entry, INCX specifies the increment for the elements of
*> X. INCX must not be zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> BETA - COMPLEX
*> On entry, BETA specifies the scalar beta.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> Y - COMPLEX array, dimension at least
*> ( 1 + ( N - 1 )*abs( INCY ) ).
*> Before entry, the incremented array Y must contain the
*> vector y. On exit, Y is overwritten by the updated vector y.
-*> \endverbatim
-*> \verbatim
+*>
*> INCY - INTEGER
*> On entry, INCY specifies the increment for the elements of
*> Y. INCY must not be zero.
*> \verbatim
*> INFO is INTEGER
*> If 0, then everything ran OK.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far.
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> If DLATMR, SLATMS, DGEBRD, DORGBR, or DBDSQR,
*> returns an error code, the
*> absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NTEST The number of tests performed, or which can
*> NFAIL The number of tests which have exceeded THRESH
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> ULP, ULPINV Finest relative precision and its inverse.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \param[out] BETA1
*> \verbatim
*> BETA1 is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by DHGEQZ
*> when Q, Z, and the full Schur matrices are computed.
*> On exit, ( ALPHR1(k)+ALPHI1(k)*i ) / BETA1(k) is the k-th
*> The number of sizes of matrices to use. If it is zero,
*> DCHKHS does nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NN - INTEGER array, dimension (NSIZES)
*> An array containing the sizes to be used for the matrices.
*> Zero values will be skipped. The values must be at least
*> zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES - INTEGER
*> The number of elements in DOTYPE. If it is zero, DCHKHS
*> does nothing. It must be at least zero. If it is MAXTYP+1
*> is only useful if DOTYPE(1:MAXTYP) is .FALSE. and
*> DOTYPE(MAXTYP+1) is .TRUE. .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> DOTYPE - LOGICAL array, dimension (NTYPES)
*> If DOTYPE(j) is .TRUE., then for each size in NN a
*> matrix of that size and of type j will be generated.
*> than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES)
*> will be ignored.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED - INTEGER array, dimension (4)
*> On entry ISEED specifies the seed of the random number
*> generator. The array elements should be between 0 and 4095;
*> next call to DCHKHS to continue the same random number
*> sequence.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH - DOUBLE PRECISION
*> A test will count as "failed" if the "error", computed as
*> described above, exceeds THRESH. Note that the error
*> it should not depend on the precision (single vs. double)
*> or the size of the matrix. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NOUNIT - INTEGER
*> The FORTRAN unit number for printing out error messages
*> (e.g., if a routine returns IINFO not equal to 0.)
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A - DOUBLE PRECISION array, dimension (LDA,max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed. On exit, A contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> The leading dimension of A, H, T1 and T2. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> H - DOUBLE PRECISION array, dimension (LDA,max(NN))
*> The upper hessenberg matrix computed by DGEHRD. On exit,
*> H contains the Hessenberg form of the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> T1 - DOUBLE PRECISION array, dimension (LDA,max(NN))
*> The Schur (="quasi-triangular") matrix computed by DHSEQR
*> if Z is computed. On exit, T1 contains the Schur form of
*> the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> T2 - DOUBLE PRECISION array, dimension (LDA,max(NN))
*> The Schur matrix computed by DHSEQR when Z is not computed.
*> This should be identical to T1.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDU - INTEGER
*> The leading dimension of U, Z, UZ and UU. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> U - DOUBLE PRECISION array, dimension (LDU,max(NN))
*> The orthogonal matrix computed by DGEHRD.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> Z - DOUBLE PRECISION array, dimension (LDU,max(NN))
*> The orthogonal matrix computed by DHSEQR.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> UZ - DOUBLE PRECISION array, dimension (LDU,max(NN))
*> The product of U times Z.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WR1 - DOUBLE PRECISION array, dimension (max(NN))
*> WI1 - DOUBLE PRECISION array, dimension (max(NN))
*> The real and imaginary parts of the eigenvalues of A,
*> as computed when Z is computed.
*> On exit, WR1 + WI1*i are the eigenvalues of the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WR3 - DOUBLE PRECISION array, dimension (max(NN))
*> WI3 - DOUBLE PRECISION array, dimension (max(NN))
*> Like WR1, WI1, these arrays contain the eigenvalues of A,
*> Schur form than is necessary for computing the
*> eigenvalues.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTL - DOUBLE PRECISION array, dimension (LDU,max(NN))
*> The (upper triangular) left eigenvector matrix for the
*> matrix in T1. For complex conjugate pairs, the real part
*> is stored in one row and the imaginary part in the next.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVEZTR - DOUBLE PRECISION array, dimension (LDU,max(NN))
*> The (upper triangular) right eigenvector matrix for the
*> matrix in T1. For complex conjugate pairs, the real part
*> is stored in one column and the imaginary part in the next.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTY - DOUBLE PRECISION array, dimension (LDU,max(NN))
*> The left eigenvector matrix for the
*> matrix in H. For complex conjugate pairs, the real part
*> is stored in one row and the imaginary part in the next.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTX - DOUBLE PRECISION array, dimension (LDU,max(NN))
*> The right eigenvector matrix for the
*> matrix in H. For complex conjugate pairs, the real part
*> is stored in one column and the imaginary part in the next.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> UU - DOUBLE PRECISION array, dimension (LDU,max(NN))
*> Details of the orthogonal matrix computed by DGEHRD.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> TAU - DOUBLE PRECISION array, dimension(max(NN))
*> Further details of the orthogonal matrix computed by DGEHRD.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK - DOUBLE PRECISION array, dimension (NWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NWORK - INTEGER
*> The number of entries in WORK. NWORK >= 4*NN(j)*NN(j) + 2.
-*> \endverbatim
-*> \verbatim
+*>
*> IWORK - INTEGER array, dimension (max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> SELECT - LOGICAL array, dimension (max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT - DOUBLE PRECISION array, dimension (14)
*> The values computed by the fourteen tests described above.
*> The values are currently limited to 1/ulp, to avoid
*> overflow.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> If 0, then everything ran OK.
*> -1: NSIZES < 0
*> If >2, then 30*N iterations were not enough to find an
*> eigenvalue or to decompose the problem.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> MTEST The number of tests defined: care must be taken
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL,
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \verbatim
*> INFO is INTEGER
*> If 0, then everything ran OK.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far.
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> If DLATMR, SLATMS, DSYTRD, DORGTR, DSTEQR, SSTERF,
*> or DORMC2 returns an error code, the
*> absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far.
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> \param[out] BETA
*> \verbatim
*> BETA is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by DGGES.
*> ( ALPHAR(k)+ALPHAI(k)*i ) / BETA(k) is the k-th
*> generalized eigenvalue of A and B.
*> \param[out] BETA
*> \verbatim
*> BETA is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by DGGEV.
*> ( ALPHAR(k)+ALPHAI(k)*i ) / BETA(k) is the k-th
*> generalized eigenvalue of A and B.
*> \param[out] BETA1
*> \verbatim
*> BETA1 is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> Like ALPHAR, ALPHAI, BETA, these arrays contain the
*> eigenvalues of A and B, but those computed when DGGEV only
*> computes a partial eigendecomposition, i.e. not the
*> \param[out] BETA
*> \verbatim
*> BETA is DOUBLE PRECISION array, dimension (NSIZE)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, (ALPHAR + ALPHAI*i)/BETA are the eigenvalues.
*> \endverbatim
*>
*> \param[out] BETA
*> \verbatim
*> BETA is DOUBLE PRECISION array, dimension (NSIZE)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, (ALPHAR + ALPHAI*i)/BETA are the eigenvalues.
*> \endverbatim
*>
*> \param[out] WI
*> \verbatim
*> WI is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The real and imaginary parts of the eigenvalues of A.
*> On exit, WR + WI*i are the eigenvalues of the matrix in A.
*> \endverbatim
*> \param[out] WIT
*> \verbatim
*> WIT is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but those computed when DGEES only computes a partial
*> eigendecomposition, i.e. not Schur vectors
*> -20: NWORK too small.
*> If DLATMR, SLATMS, SLATME or DGEES returns an error code,
*> the absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NMAX Largest value in NN.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \param[out] WI
*> \verbatim
*> WI is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The real and imaginary parts of the eigenvalues of A.
*> On exit, WR + WI*i are the eigenvalues of the matrix in A.
*> \endverbatim
*> \param[out] WI1
*> \verbatim
*> WI1 is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but those computed when DGEEV only computes a partial
*> eigendecomposition, i.e. not the eigenvalues and left
*> -23: NWORK too small.
*> If DLATMR, SLATMS, SLATME or DGEEV returns an error code,
*> the absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NMAX Largest value in NN.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \param[out] BETA1
*> \verbatim
*> BETA1 is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by DGEGS.
*> ( ALPHR1(k)+ALPHI1(k)*i ) / BETA1(k) is the k-th
*> generalized eigenvalue of the matrices in A and B.
*> \param[out] BETA2
*> \verbatim
*> BETA2 is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by DGEGV.
*> ( ALPHR2(k)+ALPHI2(k)*i ) / BETA2(k) is the k-th
*> generalized eigenvalue of the matrices in A and B.
*> The number of sizes of matrices to use. If it is zero,
*> DDRVSG does nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NN INTEGER array, dimension (NSIZES)
*> An array containing the sizes to be used for the matrices.
*> Zero values will be skipped. The values must be at least
*> zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES INTEGER
*> The number of elements in DOTYPE. If it is zero, DDRVSG
*> does nothing. It must be at least zero. If it is MAXTYP+1
*> is only useful if DOTYPE(1:MAXTYP) is .FALSE. and
*> DOTYPE(MAXTYP+1) is .TRUE. .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> DOTYPE LOGICAL array, dimension (NTYPES)
*> If DOTYPE(j) is .TRUE., then for each size in NN a
*> matrix of that size and of type j will be generated.
*> than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES)
*> will be ignored.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED INTEGER array, dimension (4)
*> On entry ISEED specifies the seed of the random number
*> generator. The array elements should be between 0 and 4095;
*> next call to DDRVSG to continue the same random number
*> sequence.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH DOUBLE PRECISION
*> A test will count as "failed" if the "error", computed as
*> described above, exceeds THRESH. Note that the error
*> it should not depend on the precision (single vs. double)
*> or the size of the matrix. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NOUNIT INTEGER
*> The FORTRAN unit number for printing out error messages
*> (e.g., if a routine returns IINFO not equal to 0.)
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A DOUBLE PRECISION array, dimension (LDA , max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed. On exit, A contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA INTEGER
*> The leading dimension of A and AB. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> B DOUBLE PRECISION array, dimension (LDB , max(NN))
*> Used to hold the symmetric positive definite matrix for
*> the generailzed problem.
*> On exit, B contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDB INTEGER
*> The leading dimension of B and BB. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D DOUBLE PRECISION array, dimension (max(NN))
*> The eigenvalues of A. On exit, the eigenvalues in D
*> correspond with the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> Z DOUBLE PRECISION array, dimension (LDZ, max(NN))
*> The matrix of eigenvectors.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDZ INTEGER
*> The leading dimension of Z. It must be at least 1 and
*> at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> AB DOUBLE PRECISION array, dimension (LDA, max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> BB DOUBLE PRECISION array, dimension (LDB, max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> AP DOUBLE PRECISION array, dimension (max(NN)**2)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> BP DOUBLE PRECISION array, dimension (max(NN)**2)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK DOUBLE PRECISION array, dimension (NWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NWORK INTEGER
*> The number of entries in WORK. This must be at least
*> 1+5*N+2*N*lg(N)+3*N**2 where N = max( NN(j) ) and
*> lg( N ) = smallest integer k such that 2**k >= N.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IWORK INTEGER array, dimension (LIWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LIWORK INTEGER
*> The number of entries in WORK. This must be at least 6*N.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT DOUBLE PRECISION array, dimension (70)
*> The values computed by the 70 tests described above.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO INTEGER
*> If 0, then everything ran OK.
*> -1: NSIZES < 0
*> DSBGVD, DSYGVX, DSPGVX or SSBGVX returns an error code,
*> the absolute value of it is returned.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far (computed by DLAFTS).
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> The number of sizes of matrices to use. If it is zero,
*> DDRVST does nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NN INTEGER array, dimension (NSIZES)
*> An array containing the sizes to be used for the matrices.
*> Zero values will be skipped. The values must be at least
*> zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES INTEGER
*> The number of elements in DOTYPE. If it is zero, DDRVST
*> does nothing. It must be at least zero. If it is MAXTYP+1
*> is only useful if DOTYPE(1:MAXTYP) is .FALSE. and
*> DOTYPE(MAXTYP+1) is .TRUE. .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> DOTYPE LOGICAL array, dimension (NTYPES)
*> If DOTYPE(j) is .TRUE., then for each size in NN a
*> matrix of that size and of type j will be generated.
*> than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES)
*> will be ignored.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED INTEGER array, dimension (4)
*> On entry ISEED specifies the seed of the random number
*> generator. The array elements should be between 0 and 4095;
*> next call to DDRVST to continue the same random number
*> sequence.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH DOUBLE PRECISION
*> A test will count as "failed" if the "error", computed as
*> described above, exceeds THRESH. Note that the error
*> it should not depend on the precision (single vs. double)
*> or the size of the matrix. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NOUNIT INTEGER
*> The FORTRAN unit number for printing out error messages
*> (e.g., if a routine returns IINFO not equal to 0.)
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A DOUBLE PRECISION array, dimension (LDA , max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed. On exit, A contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA INTEGER
*> The leading dimension of A. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D1 DOUBLE PRECISION array, dimension (max(NN))
*> The eigenvalues of A, as computed by DSTEQR simlutaneously
*> with Z. On exit, the eigenvalues in D1 correspond with the
*> matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D2 DOUBLE PRECISION array, dimension (max(NN))
*> The eigenvalues of A, as computed by DSTEQR if Z is not
*> computed. On exit, the eigenvalues in D2 correspond with
*> the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D3 DOUBLE PRECISION array, dimension (max(NN))
*> The eigenvalues of A, as computed by DSTERF. On exit, the
*> eigenvalues in D3 correspond with the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D4 DOUBLE PRECISION array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> EVEIGS DOUBLE PRECISION array, dimension (max(NN))
*> The eigenvalues as computed by DSTEV('N', ... )
*> (I reserve the right to change this to the output of
*> whichever algorithm computes the most accurate eigenvalues).
-*> \endverbatim
-*> \verbatim
+*>
*> WA1 DOUBLE PRECISION array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> WA2 DOUBLE PRECISION array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> WA3 DOUBLE PRECISION array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> U DOUBLE PRECISION array, dimension (LDU, max(NN))
*> The orthogonal matrix computed by DSYTRD + DORGTR.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDU INTEGER
*> The leading dimension of U, Z, and V. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> V DOUBLE PRECISION array, dimension (LDU, max(NN))
*> The Housholder vectors computed by DSYTRD in reducing A to
*> tridiagonal form.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> TAU DOUBLE PRECISION array, dimension (max(NN))
*> The Householder factors computed by DSYTRD in reducing A
*> to tridiagonal form.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> Z DOUBLE PRECISION array, dimension (LDU, max(NN))
*> The orthogonal matrix of eigenvectors computed by DSTEQR,
*> DPTEQR, and DSTEIN.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK DOUBLE PRECISION array, dimension (LWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LWORK INTEGER
*> The number of entries in WORK. This must be at least
*> 1 + 4 * Nmax + 2 * Nmax * lg Nmax + 4 * Nmax**2
*> where Nmax = max( NN(j), 2 ) and lg = log base 2.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IWORK INTEGER array,
*> dimension (6 + 6*Nmax + 5 * Nmax * lg Nmax )
*> where Nmax = max( NN(j), 2 ) and lg = log base 2.
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT DOUBLE PRECISION array, dimension (105)
*> The values computed by the tests described above.
*> The values are currently limited to 1/ulp, to avoid
*> overflow.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO INTEGER
*> If 0, then everything ran OK.
*> -1: NSIZES < 0
*> or DORMTR returns an error code, the
*> absolute value of it is returned.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far (computed by DLAFTS).
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> generator for type "j".
*> KMAGN(j) The order of magnitude ( O(1),
*> O(overflow^(1/2) ), O(underflow^(1/2) )
-*> \endverbatim
-*> \verbatim
+*>
*> The tests performed are: Routine tested
*> 1= | A - U S U' | / ( |A| n ulp ) DSTEV('V', ... )
*> 2= | I - U U' | / ( n ulp ) DSTEV('V', ... )
*> 22= | A - U S U' | / ( |A| n ulp ) DSTEVR('V','V', ... )
*> 23= | I - U U' | / ( n ulp ) DSTEVR('V','V', ... )
*> 24= |D(with Z) - D(w/o Z)| / (|D| ulp) DSTEVR('N','V', ... )
-*> \endverbatim
-*> \verbatim
+*>
*> 25= | A - U S U' | / ( |A| n ulp ) DSYEV('L','V', ... )
*> 26= | I - U U' | / ( n ulp ) DSYEV('L','V', ... )
*> 27= |D(with Z) - D(w/o Z)| / (|D| ulp) DSYEV('L','N', ... )
*> 76= | A - U S U' | / ( |A| n ulp ) DSYEVR('L','V','V', ... )
*> 77= | I - U U' | / ( n ulp ) DSYEVR('L','V','V', ... )
*> 78= |D(with Z) - D(w/o Z)| / (|D| ulp) DSYEVR('L','N','V', ... )
-*> \endverbatim
-*> \verbatim
+*>
*> Tests 25 through 78 are repeated (as tests 79 through 132)
*> with UPLO='U'
-*> \endverbatim
-*> \verbatim
+*>
*> To be added in 1999
-*> \endverbatim
-*> \verbatim
+*>
*> 79= | A - U S U' | / ( |A| n ulp ) DSPEVR('L','V','A', ... )
*> 80= | I - U U' | / ( n ulp ) DSPEVR('L','V','A', ... )
*> 81= |D(with Z) - D(w/o Z)| / (|D| ulp) DSPEVR('L','N','A', ... )
*> \param[out] WI
*> \verbatim
*> WI is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The real and imaginary parts of the eigenvalues of A.
*> On exit, WR + WI*i are the eigenvalues of the matrix in A.
*> \endverbatim
*> \param[out] WIT
*> \verbatim
*> WIT is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but those computed when DGEESX only computes a partial
*> eigendecomposition, i.e. not Schur vectors
*> \param[out] WITMP
*> \verbatim
*> WITMP is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> More temporary storage for eigenvalues.
*> \endverbatim
*>
*> <0, input parameter -INFO is incorrect
*> >0, DLATMR, SLATMS, SLATME or DGET24 returned an error
*> code and INFO is its absolute value
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
*> \param[out] WI
*> \verbatim
*> WI is DOUBLE PRECISION array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The real and imaginary parts of the eigenvalues of A.
*> On exit, WR + WI*i are the eigenvalues of the matrix in A.
*> \endverbatim
*> \param[out] WI1
*> \verbatim
*> WI1 is DOUBLE PRECISION array, dimension (max(NN,12))
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but those computed when DGEEVX only computes a partial
*> eigendecomposition, i.e. not the eigenvalues and left
*> If <0, then input paramter -INFO is incorrect.
*> If >0, DLATMR, SLATMS, SLATME or DGET23 returned an error
*> code, and INFO is its absolute value.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NMAX Largest value in NN or 12.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \param[in] WI
*> \verbatim
*> WI is DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> The real and imaginary parts of the eigenvalues of A.
*> Purely real eigenvalues are indicated by WI(j) = 0.
*> Complex conjugate pairs are indicated by WR(j)=WR(j+1) and
*> \param[out] WI
*> \verbatim
*> WI is DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> The real and imaginary parts of the eigenvalues of A.
*> On exit, WR + WI*i are the eigenvalues of the matrix in A.
*> \endverbatim
*> \param[out] WI1
*> \verbatim
*> WI1 is DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but those computed when DGEEVX only computes a partial
*> eigendecomposition, i.e. not the eigenvalues and left
*> \param[out] WI
*> \verbatim
*> WI is DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> The real and imaginary parts of the eigenvalues of A.
*> On exit, WR + WI*i are the eigenvalues of the matrix in A.
*> \endverbatim
*> \param[out] WIT
*> \verbatim
*> WIT is DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but those computed when DGEESX only computes a partial
*> eigendecomposition, i.e. not Schur vectors
*> \param[out] WITMP
*> \verbatim
*> WITMP is DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but sorted by increasing real part.
*> \endverbatim
*> \param[out] BETA
*> \verbatim
*> BETA is DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized singular value pairs of A and B, the
*> ``diagonal'' matrices D1 and D2 are constructed from
*> ALPHA and BETA, see subroutine DGGSVD for details.
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
-*> \endverbatim
-*> \verbatim
+*>
*> A is assumed to be upper triangular in rows and columns
*> 1:ILO-1 and IHI+1:N, so Q differs from the identity only in
*> rows and columns ILO+1:IHI.
*> On entry, TYPE specifies the matrix type to be used in the
*> printed messages.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the test matrix.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IMAT - INTEGER
*> On entry, IMAT specifies the type of the test matrix.
*> A listing of the different types is printed by DLAHD2
*> to the output file if a test fails to pass the threshold.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTESTS - INTEGER
*> On entry, NTESTS is the number of tests performed on the
*> subroutines in the path given by TYPE.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT - DOUBLE PRECISION array of dimension( NTESTS )
*> On entry, RESULT contains the test ratios from the tests
*> performed in the calling program.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED - INTEGER array of dimension( 4 )
*> Contains the random seed that generated the matrix used
*> for the tests whose ratios are in RESULT.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH - DOUBLE PRECISION
*> On entry, THRESH specifies the acceptable threshold of the
*> test ratios. If RESULT( K ) > THRESH, then the K-th test
*> did not pass the threshold and a message will be printed.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IOUNIT - INTEGER
*> On entry, IOUNIT specifies the unit number of the file
*> to which the messages are printed.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IE - INTEGER
*> On entry, IE contains the number of tests which have
*> failed to pass the threshold so far.
*> PATH is CHARACTER*3.
*> On entry, PATH contains the name of the path for which the
*> header information is to be printed. Current paths are
-*> \endverbatim
-*> \verbatim
+*>
*> DHS, ZHS: Non-symmetric eigenproblem.
*> DST, ZST: Symmetric eigenproblem.
*> DSG, ZSG: Symmetric Generalized eigenproblem.
*> DBD, ZBD: Singular Value Decomposition (SVD)
*> DBB, ZBB: General Banded reduction to bidiagonal form
-*> \endverbatim
-*> \verbatim
+*>
*> These paths also are supplied in double precision (replace
*> leading S by D and leading C by Z in path names).
*> \endverbatim
*> KU is INTEGER
*> Used only if A is a general band matrix or if A is
*> triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xGB, specifies the number of superdiagonals of A,
*> and 0 <= KU <= N-1.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xTR, xTP, or xTB, specifies whether or not the
*> matrix has unit diagonal:
*> = 1: matrix has non-unit diagonal (default)
*> If ITYPE < 0, then type abs(ITYPE) is generated and then
*> swapped end for end (A(I,J) := A'(N-J,N-I).) See also
*> the description of AMAGN and ISIGN.
-*> \endverbatim
-*> \verbatim
+*>
*> Special types:
*> = 0: the zero matrix.
*> = 1: the identity.
*> followed by a k x k identity block, where k=(N-1)/2.
*> If N is even, then k=(N-2)/2, and a zero diagonal entry
*> is tacked onto the end.
-*> \endverbatim
-*> \verbatim
+*>
*> Diagonal types. The diagonal consists of NZ1 zeros, then
*> k=N-NZ1-NZ2 nonzeros. The subdiagonal is zero. ITYPE
*> specifies the nonzero diagonal entries as follows:
*> Specifies the type of tests to be performed.
*> 1: U expressed as a dense orthogonal matrix:
*> RESULT(1) = | A - U S U' | / ( |A| n ulp ) *andC> RESULT(2) = | I - UU' | / ( n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 2: U expressed as a product V of Housholder transformations:
*> RESULT(1) = | A - V S V' | / ( |A| n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 3: U expressed both as a dense orthogonal matrix and
*> as a product of Housholder transformations:
*> RESULT(1) = | I - VU' | / ( n ulp )
*> Specifies the type of tests to be performed.
*> 1: U expressed as a dense orthogonal matrix:
*> RESULT(1) = | A - U S U' | / ( |A| n ulp ) *andC> RESULT(2) = | I - UU' | / ( n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 2: U expressed as a product V of Housholder transformations:
*> RESULT(1) = | A - V S V' | / ( |A| n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 3: U expressed both as a dense orthogonal matrix and
*> as a product of Housholder transformations:
*> RESULT(1) = | I - VU' | / ( n ulp )
*> Specifies the type of tests to be performed.
*> 1: U expressed as a dense orthogonal matrix:
*> RESULT(1) = | A - U S U' | / ( |A| n ulp ) *andC> RESULT(2) = | I - UU' | / ( n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO CHARACTER
*> If UPLO='U', the upper triangle of A will be used and the
*> (strictly) lower triangle will not be referenced. If
*> UPLO='L', the lower triangle of A will be used and the
*> (strictly) upper triangle will not be referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> N INTEGER
*> The size of the matrix. If it is zero, DSYT22 does nothing.
*> It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> M INTEGER
*> The number of columns of U. If it is zero, DSYT22 does
*> nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> KBAND INTEGER
*> The bandwidth of the matrix. It may only be zero or one.
*> If zero, then S is diagonal, and E is not referenced. If
*> one, then S is symmetric tri-diagonal.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A DOUBLE PRECISION array, dimension (LDA , N)
*> The original (unfactored) matrix. It is assumed to be
*> symmetric, and only the upper (UPLO='U') or only the lower
*> (UPLO='L') will be referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA INTEGER
*> The leading dimension of A. It must be at least 1
*> and at least N.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D DOUBLE PRECISION array, dimension (N)
*> The diagonal of the (symmetric tri-) diagonal matrix.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> E DOUBLE PRECISION array, dimension (N)
*> The off-diagonal of the (symmetric tri-) diagonal matrix.
*> E(1) is ignored, E(2) is the (1,2) and (2,1) element, etc.
*> Not referenced if KBAND=0.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> U DOUBLE PRECISION array, dimension (LDU, N)
*> If ITYPE=1 or 3, this contains the orthogonal matrix in
*> the decomposition, expressed as a dense matrix. If ITYPE=2,
*> then it is not referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDU INTEGER
*> The leading dimension of U. LDU must be at least N and
*> at least 1.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> V DOUBLE PRECISION array, dimension (LDV, N)
*> If ITYPE=2 or 3, the lower triangle of this array contains
*> the Householder vectors used to describe the orthogonal
*> matrix in the decomposition. If ITYPE=1, then it is not
*> referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDV INTEGER
*> The leading dimension of V. LDV must be at least N and
*> at least 1.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> TAU DOUBLE PRECISION array, dimension (N)
*> If ITYPE >= 2, then TAU(j) is the scalar factor of
*> v(j) v(j)' in the Householder transformation H(j) of
*> the product U = H(1)...H(n-2)
*> If ITYPE < 2, then TAU is not referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK DOUBLE PRECISION array, dimension (2*N**2)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT DOUBLE PRECISION array, dimension (2)
*> The values computed by the two tests described above. The
*> values are currently limited to 1/ulp, to avoid overflow.
*> 12 <= ISPEC <= 16:
*> xHSEQR or one of its subroutines,
*> see IPARMQ for detailed explanation
-*> \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
*> \verbatim
*> INFO is INTEGER
*> If 0, then everything ran OK.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far.
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> If SLATMR, SLATMS, SGEBRD, SORGBR, or SBDSQR,
*> returns an error code, the
*> absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NTEST The number of tests performed, or which can
*> NFAIL The number of tests which have exceeded THRESH
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> ULP, ULPINV Finest relative precision and its inverse.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \param[out] BETA1
*> \verbatim
*> BETA1 is REAL array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by SHGEQZ
*> when Q, Z, and the full Schur matrices are computed.
*> On exit, ( ALPHR1(k)+ALPHI1(k)*i ) / BETA1(k) is the k-th
*> The number of sizes of matrices to use. If it is zero,
*> SCHKHS does nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NN - INTEGER array, dimension (NSIZES)
*> An array containing the sizes to be used for the matrices.
*> Zero values will be skipped. The values must be at least
*> zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES - INTEGER
*> The number of elements in DOTYPE. If it is zero, SCHKHS
*> does nothing. It must be at least zero. If it is MAXTYP+1
*> is only useful if DOTYPE(1:MAXTYP) is .FALSE. and
*> DOTYPE(MAXTYP+1) is .TRUE. .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> DOTYPE - LOGICAL array, dimension (NTYPES)
*> If DOTYPE(j) is .TRUE., then for each size in NN a
*> matrix of that size and of type j will be generated.
*> than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES)
*> will be ignored.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED - INTEGER array, dimension (4)
*> On entry ISEED specifies the seed of the random number
*> generator. The array elements should be between 0 and 4095;
*> next call to SCHKHS to continue the same random number
*> sequence.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH - REAL
*> A test will count as "failed" if the "error", computed as
*> described above, exceeds THRESH. Note that the error
*> it should not depend on the precision (single vs. double)
*> or the size of the matrix. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NOUNIT - INTEGER
*> The FORTRAN unit number for printing out error messages
*> (e.g., if a routine returns IINFO not equal to 0.)
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A - REAL array, dimension (LDA,max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed. On exit, A contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> The leading dimension of A, H, T1 and T2. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> H - REAL array, dimension (LDA,max(NN))
*> The upper hessenberg matrix computed by SGEHRD. On exit,
*> H contains the Hessenberg form of the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> T1 - REAL array, dimension (LDA,max(NN))
*> The Schur (="quasi-triangular") matrix computed by SHSEQR
*> if Z is computed. On exit, T1 contains the Schur form of
*> the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> T2 - REAL array, dimension (LDA,max(NN))
*> The Schur matrix computed by SHSEQR when Z is not computed.
*> This should be identical to T1.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDU - INTEGER
*> The leading dimension of U, Z, UZ and UU. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> U - REAL array, dimension (LDU,max(NN))
*> The orthogonal matrix computed by SGEHRD.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> Z - REAL array, dimension (LDU,max(NN))
*> The orthogonal matrix computed by SHSEQR.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> UZ - REAL array, dimension (LDU,max(NN))
*> The product of U times Z.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WR1 - REAL array, dimension (max(NN))
*> WI1 - REAL array, dimension (max(NN))
*> The real and imaginary parts of the eigenvalues of A,
*> as computed when Z is computed.
*> On exit, WR1 + WI1*i are the eigenvalues of the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WR3 - REAL array, dimension (max(NN))
*> WI3 - REAL array, dimension (max(NN))
*> Like WR1, WI1, these arrays contain the eigenvalues of A,
*> Schur form than is necessary for computing the
*> eigenvalues.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTL - REAL array, dimension (LDU,max(NN))
*> The (upper triangular) left eigenvector matrix for the
*> matrix in T1. For complex conjugate pairs, the real part
*> is stored in one row and the imaginary part in the next.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTR - REAL array, dimension (LDU,max(NN))
*> The (upper triangular) right eigenvector matrix for the
*> matrix in T1. For complex conjugate pairs, the real part
*> is stored in one column and the imaginary part in the next.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTY - REAL array, dimension (LDU,max(NN))
*> The left eigenvector matrix for the
*> matrix in H. For complex conjugate pairs, the real part
*> is stored in one row and the imaginary part in the next.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTX - REAL array, dimension (LDU,max(NN))
*> The right eigenvector matrix for the
*> matrix in H. For complex conjugate pairs, the real part
*> is stored in one column and the imaginary part in the next.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> UU - REAL array, dimension (LDU,max(NN))
*> Details of the orthogonal matrix computed by SGEHRD.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> TAU - REAL array, dimension(max(NN))
*> Further details of the orthogonal matrix computed by SGEHRD.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK - REAL array, dimension (NWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NWORK - INTEGER
*> The number of entries in WORK. NWORK >= 4*NN(j)*NN(j) + 2.
-*> \endverbatim
-*> \verbatim
+*>
*> IWORK - INTEGER array, dimension (max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> SELECT - LOGICAL array, dimension (max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT - REAL array, dimension (14)
*> The values computed by the fourteen tests described above.
*> The values are currently limited to 1/ulp, to avoid
*> overflow.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> If 0, then everything ran OK.
*> -1: NSIZES < 0
*> If >2, then 30*N iterations were not enough to find an
*> eigenvalue or to decompose the problem.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> MTEST The number of tests defined: care must be taken
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL,
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \verbatim
*> INFO is INTEGER
*> If 0, then everything ran OK.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far.
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> If SLATMR, SLATMS, SSYTRD, SORGTR, SSTEQR, SSTERF,
*> or SORMC2 returns an error code, the
*> absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far.
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> \param[out] BETA
*> \verbatim
*> BETA is REAL array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by SGGES.
*> ( ALPHAR(k)+ALPHAI(k)*i ) / BETA(k) is the k-th
*> generalized eigenvalue of A and B.
*> \param[out] BETA1
*> \verbatim
*> BETA1 is REAL array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> Like ALPHAR, ALPHAI, BETA, these arrays contain the
*> eigenvalues of A and B, but those computed when SGGEV only
*> computes a partial eigendecomposition, i.e. not the
*> \param[out] BETA
*> \verbatim
*> BETA is REAL array, dimension (NSIZE)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, (ALPHAR + ALPHAI*i)/BETA are the eigenvalues.
*> \endverbatim
*>
*> \param[out] WI
*> \verbatim
*> WI is REAL array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The real and imaginary parts of the eigenvalues of A.
*> On exit, WR + WI*i are the eigenvalues of the matrix in A.
*> \endverbatim
*> \param[out] WIT
*> \verbatim
*> WIT is REAL array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but those computed when SGEES only computes a partial
*> eigendecomposition, i.e. not Schur vectors
*> -20: NWORK too small.
*> If SLATMR, SLATMS, SLATME or SGEES returns an error code,
*> the absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NMAX Largest value in NN.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \param[out] WI
*> \verbatim
*> WI is REAL array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The real and imaginary parts of the eigenvalues of A.
*> On exit, WR + WI*i are the eigenvalues of the matrix in A.
*> \endverbatim
*> \param[out] WI1
*> \verbatim
*> WI1 is REAL array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but those computed when SGEEV only computes a partial
*> eigendecomposition, i.e. not the eigenvalues and left
*> -23: NWORK too small.
*> If SLATMR, SLATMS, SLATME or SGEEV returns an error code,
*> the absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NMAX Largest value in NN.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \param[out] BETA1
*> \verbatim
*> BETA1 is REAL array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by SGEGS.
*> ( ALPHR1(k)+ALPHI1(k)*i ) / BETA1(k) is the k-th
*> generalized eigenvalue of the matrices in A and B.
*> \param[out] BETA2
*> \verbatim
*> BETA2 is REAL array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by SGEGV.
*> ( ALPHR2(k)+ALPHI2(k)*i ) / BETA2(k) is the k-th
*> generalized eigenvalue of the matrices in A and B.
*> The number of sizes of matrices to use. If it is zero,
*> SDRVSG does nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NN INTEGER array, dimension (NSIZES)
*> An array containing the sizes to be used for the matrices.
*> Zero values will be skipped. The values must be at least
*> zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES INTEGER
*> The number of elements in DOTYPE. If it is zero, SDRVSG
*> does nothing. It must be at least zero. If it is MAXTYP+1
*> is only useful if DOTYPE(1:MAXTYP) is .FALSE. and
*> DOTYPE(MAXTYP+1) is .TRUE. .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> DOTYPE LOGICAL array, dimension (NTYPES)
*> If DOTYPE(j) is .TRUE., then for each size in NN a
*> matrix of that size and of type j will be generated.
*> than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES)
*> will be ignored.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED INTEGER array, dimension (4)
*> On entry ISEED specifies the seed of the random number
*> generator. The array elements should be between 0 and 4095;
*> next call to SDRVSG to continue the same random number
*> sequence.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH REAL
*> A test will count as "failed" if the "error", computed as
*> described above, exceeds THRESH. Note that the error
*> it should not depend on the precision (single vs. double)
*> or the size of the matrix. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NOUNIT INTEGER
*> The FORTRAN unit number for printing out error messages
*> (e.g., if a routine returns IINFO not equal to 0.)
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A REAL array, dimension (LDA , max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed. On exit, A contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA INTEGER
*> The leading dimension of A and AB. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> B REAL array, dimension (LDB , max(NN))
*> Used to hold the symmetric positive definite matrix for
*> the generailzed problem.
*> On exit, B contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDB INTEGER
*> The leading dimension of B and BB. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D REAL array, dimension (max(NN))
*> The eigenvalues of A. On exit, the eigenvalues in D
*> correspond with the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> Z REAL array, dimension (LDZ, max(NN))
*> The matrix of eigenvectors.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDZ INTEGER
*> The leading dimension of Z. It must be at least 1 and
*> at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> AB REAL array, dimension (LDA, max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> BB REAL array, dimension (LDB, max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> AP REAL array, dimension (max(NN)**2)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> BP REAL array, dimension (max(NN)**2)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK REAL array, dimension (NWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NWORK INTEGER
*> The number of entries in WORK. This must be at least
*> 1+5*N+2*N*lg(N)+3*N**2 where N = max( NN(j) ) and
*> lg( N ) = smallest integer k such that 2**k >= N.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IWORK INTEGER array, dimension (LIWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LIWORK INTEGER
*> The number of entries in WORK. This must be at least 6*N.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT REAL array, dimension (70)
*> The values computed by the 70 tests described above.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO INTEGER
*> If 0, then everything ran OK.
*> -1: NSIZES < 0
*> SSBGVD, SSYGVX, SSPGVX or SSBGVX returns an error code,
*> the absolute value of it is returned.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far (computed by SLAFTS).
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> The number of sizes of matrices to use. If it is zero,
*> SDRVST does nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NN INTEGER array, dimension (NSIZES)
*> An array containing the sizes to be used for the matrices.
*> Zero values will be skipped. The values must be at least
*> zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES INTEGER
*> The number of elements in DOTYPE. If it is zero, SDRVST
*> does nothing. It must be at least zero. If it is MAXTYP+1
*> is only useful if DOTYPE(1:MAXTYP) is .FALSE. and
*> DOTYPE(MAXTYP+1) is .TRUE. .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> DOTYPE LOGICAL array, dimension (NTYPES)
*> If DOTYPE(j) is .TRUE., then for each size in NN a
*> matrix of that size and of type j will be generated.
*> than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES)
*> will be ignored.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED INTEGER array, dimension (4)
*> On entry ISEED specifies the seed of the random number
*> generator. The array elements should be between 0 and 4095;
*> next call to SDRVST to continue the same random number
*> sequence.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH REAL
*> A test will count as "failed" if the "error", computed as
*> described above, exceeds THRESH. Note that the error
*> it should not depend on the precision (single vs. double)
*> or the size of the matrix. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NOUNIT INTEGER
*> The FORTRAN unit number for printing out error messages
*> (e.g., if a routine returns IINFO not equal to 0.)
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A REAL array, dimension (LDA , max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed. On exit, A contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA INTEGER
*> The leading dimension of A. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D1 REAL array, dimension (max(NN))
*> The eigenvalues of A, as computed by SSTEQR simlutaneously
*> with Z. On exit, the eigenvalues in D1 correspond with the
*> matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D2 REAL array, dimension (max(NN))
*> The eigenvalues of A, as computed by SSTEQR if Z is not
*> computed. On exit, the eigenvalues in D2 correspond with
*> the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D3 REAL array, dimension (max(NN))
*> The eigenvalues of A, as computed by SSTERF. On exit, the
*> eigenvalues in D3 correspond with the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D4 REAL array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> EVEIGS REAL array, dimension (max(NN))
*> The eigenvalues as computed by SSTEV('N', ... )
*> (I reserve the right to change this to the output of
*> whichever algorithm computes the most accurate eigenvalues).
-*> \endverbatim
-*> \verbatim
+*>
*> WA1 REAL array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> WA2 REAL array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> WA3 REAL array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> U REAL array, dimension (LDU, max(NN))
*> The orthogonal matrix computed by SSYTRD + SORGTR.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDU INTEGER
*> The leading dimension of U, Z, and V. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> V REAL array, dimension (LDU, max(NN))
*> The Housholder vectors computed by SSYTRD in reducing A to
*> tridiagonal form.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> TAU REAL array, dimension (max(NN))
*> The Householder factors computed by SSYTRD in reducing A
*> to tridiagonal form.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> Z REAL array, dimension (LDU, max(NN))
*> The orthogonal matrix of eigenvectors computed by SSTEQR,
*> SPTEQR, and SSTEIN.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK REAL array, dimension (LWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LWORK INTEGER
*> The number of entries in WORK. This must be at least
*> 1 + 4 * Nmax + 2 * Nmax * lg Nmax + 4 * Nmax**2
*> where Nmax = max( NN(j), 2 ) and lg = log base 2.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IWORK INTEGER array,
*> dimension (6 + 6*Nmax + 5 * Nmax * lg Nmax )
*> where Nmax = max( NN(j), 2 ) and lg = log base 2.
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT REAL array, dimension (105)
*> The values computed by the tests described above.
*> The values are currently limited to 1/ulp, to avoid
*> overflow.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO INTEGER
*> If 0, then everything ran OK.
*> -1: NSIZES < 0
*> or SORMTR returns an error code, the
*> absolute value of it is returned.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far (computed by SLAFTS).
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> generator for type "j".
*> KMAGN(j) The order of magnitude ( O(1),
*> O(overflow^(1/2) ), O(underflow^(1/2) )
-*> \endverbatim
-*> \verbatim
+*>
*> The tests performed are: Routine tested
*> 1= | A - U S U' | / ( |A| n ulp ) SSTEV('V', ... )
*> 2= | I - U U' | / ( n ulp ) SSTEV('V', ... )
*> 22= | A - U S U' | / ( |A| n ulp ) SSTEVR('V','V', ... )
*> 23= | I - U U' | / ( n ulp ) SSTEVR('V','V', ... )
*> 24= |D(with Z) - D(w/o Z)| / (|D| ulp) SSTEVR('N','V', ... )
-*> \endverbatim
-*> \verbatim
+*>
*> 25= | A - U S U' | / ( |A| n ulp ) SSYEV('L','V', ... )
*> 26= | I - U U' | / ( n ulp ) SSYEV('L','V', ... )
*> 27= |D(with Z) - D(w/o Z)| / (|D| ulp) SSYEV('L','N', ... )
*> 76= | A - U S U' | / ( |A| n ulp ) SSYEVR('L','V','V', ... )
*> 77= | I - U U' | / ( n ulp ) SSYEVR('L','V','V', ... )
*> 78= |D(with Z) - D(w/o Z)| / (|D| ulp) SSYEVR('L','N','V', ... )
-*> \endverbatim
-*> \verbatim
+*>
*> Tests 25 through 78 are repeated (as tests 79 through 132)
*> with UPLO='U'
-*> \endverbatim
-*> \verbatim
+*>
*> To be added in 1999
-*> \endverbatim
-*> \verbatim
+*>
*> 79= | A - U S U' | / ( |A| n ulp ) SSPEVR('L','V','A', ... )
*> 80= | I - U U' | / ( n ulp ) SSPEVR('L','V','A', ... )
*> 81= |D(with Z) - D(w/o Z)| / (|D| ulp) SSPEVR('L','N','A', ... )
*> \param[out] WI
*> \verbatim
*> WI is REAL array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The real and imaginary parts of the eigenvalues of A.
*> On exit, WR + WI*i are the eigenvalues of the matrix in A.
*> \endverbatim
*> \param[out] WIT
*> \verbatim
*> WIT is REAL array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but those computed when SGEESX only computes a partial
*> eigendecomposition, i.e. not Schur vectors
*> \param[out] WITMP
*> \verbatim
*> WITMP is REAL array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> More temporary storage for eigenvalues.
*> \endverbatim
*>
*> <0, input parameter -INFO is incorrect
*> >0, SLATMR, SLATMS, SLATME or SGET24 returned an error
*> code and INFO is its absolute value
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
*> \param[out] WI1
*> \verbatim
*> WI1 is REAL array, dimension (max(NN,12))
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but those computed when SGEEVX only computes a partial
*> eigendecomposition, i.e. not the eigenvalues and left
*> If <0, then input paramter -INFO is incorrect.
*> If >0, SLATMR, SLATMS, SLATME or SGET23 returned an error
*> code, and INFO is its absolute value.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NMAX Largest value in NN or 12.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \param[in] WI
*> \verbatim
*> WI is REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> The real and imaginary parts of the eigenvalues of A.
*> Purely real eigenvalues are indicated by WI(j) = 0.
*> Complex conjugate pairs are indicated by WR(j)=WR(j+1) and
*> \param[out] WI
*> \verbatim
*> WI is REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> The real and imaginary parts of the eigenvalues of A.
*> On exit, WR + WI*i are the eigenvalues of the matrix in A.
*> \endverbatim
*> \param[out] WI1
*> \verbatim
*> WI1 is REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but those computed when SGEEVX only computes a partial
*> eigendecomposition, i.e. not the eigenvalues and left
*> \param[out] WI
*> \verbatim
*> WI is REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> The real and imaginary parts of the eigenvalues of A.
*> On exit, WR + WI*i are the eigenvalues of the matrix in A.
*> \endverbatim
*> \param[out] WIT
*> \verbatim
*> WIT is REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but those computed when SGEESX only computes a partial
*> eigendecomposition, i.e. not Schur vectors
*> \param[out] WITMP
*> \verbatim
*> WITMP is REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> Like WR, WI, these arrays contain the eigenvalues of A,
*> but sorted by increasing real part.
*> \endverbatim
*> \param[out] BETA
*> \verbatim
*> BETA is REAL array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized singular value pairs of A and B, the
*> ``diagonal'' matrices D1 and D2 are constructed from
*> ALPHA and BETA, see subroutine SGGSVD for details.
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
-*> \endverbatim
-*> \verbatim
+*>
*> A is assumed to be upper triangular in rows and columns
*> 1:ILO-1 and IHI+1:N, so Q differs from the identity only in
*> rows and columns ILO+1:IHI.
*> On entry, TYPE specifies the matrix type to be used in the
*> printed messages.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the test matrix.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IMAT - INTEGER
*> On entry, IMAT specifies the type of the test matrix.
*> A listing of the different types is printed by SLAHD2
*> to the output file if a test fails to pass the threshold.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTESTS - INTEGER
*> On entry, NTESTS is the number of tests performed on the
*> subroutines in the path given by TYPE.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT - REAL array of dimension( NTESTS )
*> On entry, RESULT contains the test ratios from the tests
*> performed in the calling program.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED - INTEGER array of dimension( 4 )
*> Contains the random seed that generated the matrix used
*> for the tests whose ratios are in RESULT.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH - REAL
*> On entry, THRESH specifies the acceptable threshold of the
*> test ratios. If RESULT( K ) > THRESH, then the K-th test
*> did not pass the threshold and a message will be printed.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IOUNIT - INTEGER
*> On entry, IOUNIT specifies the unit number of the file
*> to which the messages are printed.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IE - INTEGER
*> On entry, IE contains the number of tests which have
*> failed to pass the threshold so far.
*> PATH is CHARACTER*3.
*> On entry, PATH contains the name of the path for which the
*> header information is to be printed. Current paths are
-*> \endverbatim
-*> \verbatim
+*>
*> SHS, CHS: Non-symmetric eigenproblem.
*> SST, CST: Symmetric eigenproblem.
*> SSG, CSG: Symmetric Generalized eigenproblem.
*> SBD, CBD: Singular Value Decomposition (SVD)
*> SBB, CBB: General Banded reduction to bidiagonal form
-*> \endverbatim
-*> \verbatim
+*>
*> These paths also are supplied in double precision (replace
*> leading S by D and leading C by Z in path names).
*> \endverbatim
*> KU is INTEGER
*> Used only if A is a general band matrix or if A is
*> triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xGB, specifies the number of superdiagonals of A,
*> and 0 <= KU <= N-1.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xTR, xTP, or xTB, specifies whether or not the
*> matrix has unit diagonal:
*> = 1: matrix has non-unit diagonal (default)
*> If ITYPE < 0, then type abs(ITYPE) is generated and then
*> swapped end for end (A(I,J) := A'(N-J,N-I).) See also
*> the description of AMAGN and ISIGN.
-*> \endverbatim
-*> \verbatim
+*>
*> Special types:
*> = 0: the zero matrix.
*> = 1: the identity.
*> followed by a k x k identity block, where k=(N-1)/2.
*> If N is even, then k=(N-2)/2, and a zero diagonal entry
*> is tacked onto the end.
-*> \endverbatim
-*> \verbatim
+*>
*> Diagonal types. The diagonal consists of NZ1 zeros, then
*> k=N-NZ1-NZ2 nonzeros. The subdiagonal is zero. ITYPE
*> specifies the nonzero diagonal entries as follows:
*> Specifies the type of tests to be performed.
*> 1: U expressed as a dense orthogonal matrix:
*> RESULT(1) = | A - U S U' | / ( |A| n ulp ) *andC> RESULT(2) = | I - UU' | / ( n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 2: U expressed as a product V of Housholder transformations:
*> RESULT(1) = | A - V S V' | / ( |A| n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 3: U expressed both as a dense orthogonal matrix and
*> as a product of Housholder transformations:
*> RESULT(1) = | I - VU' | / ( n ulp )
*> Specifies the type of tests to be performed.
*> 1: U expressed as a dense orthogonal matrix:
*> RESULT(1) = | A - U S U' | / ( |A| n ulp ) *andC> RESULT(2) = | I - UU' | / ( n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 2: U expressed as a product V of Housholder transformations:
*> RESULT(1) = | A - V S V' | / ( |A| n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 3: U expressed both as a dense orthogonal matrix and
*> as a product of Housholder transformations:
*> RESULT(1) = | I - VU' | / ( n ulp )
*> Specifies the type of tests to be performed.
*> 1: U expressed as a dense orthogonal matrix:
*> RESULT(1) = | A - U S U' | / ( |A| n ulp ) *andC> RESULT(2) = | I - UU' | / ( n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO CHARACTER
*> If UPLO='U', the upper triangle of A will be used and the
*> (strictly) lower triangle will not be referenced. If
*> UPLO='L', the lower triangle of A will be used and the
*> (strictly) upper triangle will not be referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> N INTEGER
*> The size of the matrix. If it is zero, SSYT22 does nothing.
*> It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> M INTEGER
*> The number of columns of U. If it is zero, SSYT22 does
*> nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> KBAND INTEGER
*> The bandwidth of the matrix. It may only be zero or one.
*> If zero, then S is diagonal, and E is not referenced. If
*> one, then S is symmetric tri-diagonal.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A REAL array, dimension (LDA , N)
*> The original (unfactored) matrix. It is assumed to be
*> symmetric, and only the upper (UPLO='U') or only the lower
*> (UPLO='L') will be referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA INTEGER
*> The leading dimension of A. It must be at least 1
*> and at least N.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D REAL array, dimension (N)
*> The diagonal of the (symmetric tri-) diagonal matrix.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> E REAL array, dimension (N)
*> The off-diagonal of the (symmetric tri-) diagonal matrix.
*> E(1) is ignored, E(2) is the (1,2) and (2,1) element, etc.
*> Not referenced if KBAND=0.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> U REAL array, dimension (LDU, N)
*> If ITYPE=1 or 3, this contains the orthogonal matrix in
*> the decomposition, expressed as a dense matrix. If ITYPE=2,
*> then it is not referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDU INTEGER
*> The leading dimension of U. LDU must be at least N and
*> at least 1.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> V REAL array, dimension (LDV, N)
*> If ITYPE=2 or 3, the lower triangle of this array contains
*> the Householder vectors used to describe the orthogonal
*> matrix in the decomposition. If ITYPE=1, then it is not
*> referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDV INTEGER
*> The leading dimension of V. LDV must be at least N and
*> at least 1.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> TAU REAL array, dimension (N)
*> If ITYPE >= 2, then TAU(j) is the scalar factor of
*> v(j) v(j)' in the Householder transformation H(j) of
*> the product U = H(1)...H(n-2)
*> If ITYPE < 2, then TAU is not referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK REAL array, dimension (2*N**2)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT REAL array, dimension (2)
*> The values computed by the two tests described above. The
*> values are currently limited to 1/ulp, to avoid overflow.
*> \verbatim
*> INFO is INTEGER
*> If 0, then everything ran OK.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far.
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> If ZLATMR, CLATMS, ZGEBRD, ZUNGBR, or ZBDSQR,
*> returns an error code, the
*> absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NTEST The number of tests performed, or which can
*> NFAIL The number of tests which have exceeded THRESH
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> ULP, ULPINV Finest relative precision and its inverse.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \verbatim
*> INFO is INTEGER
*> If 0, then everything ran OK.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far.
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> The number of sizes of matrices to use. If it is zero,
*> ZCHKHS does nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NN - INTEGER array, dimension (NSIZES)
*> An array containing the sizes to be used for the matrices.
*> Zero values will be skipped. The values must be at least
*> zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES - INTEGER
*> The number of elements in DOTYPE. If it is zero, ZCHKHS
*> does nothing. It must be at least zero. If it is MAXTYP+1
*> is only useful if DOTYPE(1:MAXTYP) is .FALSE. and
*> DOTYPE(MAXTYP+1) is .TRUE. .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> DOTYPE - LOGICAL array, dimension (NTYPES)
*> If DOTYPE(j) is .TRUE., then for each size in NN a
*> matrix of that size and of type j will be generated.
*> than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES)
*> will be ignored.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED - INTEGER array, dimension (4)
*> On entry ISEED specifies the seed of the random number
*> generator. The array elements should be between 0 and 4095;
*> next call to ZCHKHS to continue the same random number
*> sequence.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH - DOUBLE PRECISION
*> A test will count as "failed" if the "error", computed as
*> described above, exceeds THRESH. Note that the error
*> it should not depend on the precision (single vs. double)
*> or the size of the matrix. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NOUNIT - INTEGER
*> The FORTRAN unit number for printing out error messages
*> (e.g., if a routine returns IINFO not equal to 0.)
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX*16 array, dimension (LDA,max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed. On exit, A contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> The leading dimension of A, H, T1 and T2. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> H - COMPLEX*16 array, dimension (LDA,max(NN))
*> The upper hessenberg matrix computed by ZGEHRD. On exit,
*> H contains the Hessenberg form of the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> T1 - COMPLEX*16 array, dimension (LDA,max(NN))
*> The Schur (="quasi-triangular") matrix computed by ZHSEQR
*> if Z is computed. On exit, T1 contains the Schur form of
*> the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> T2 - COMPLEX*16 array, dimension (LDA,max(NN))
*> The Schur matrix computed by ZHSEQR when Z is not computed.
*> This should be identical to T1.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDU - INTEGER
*> The leading dimension of U, Z, UZ and UU. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> U - COMPLEX*16 array, dimension (LDU,max(NN))
*> The unitary matrix computed by ZGEHRD.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> Z - COMPLEX*16 array, dimension (LDU,max(NN))
*> The unitary matrix computed by ZHSEQR.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> UZ - COMPLEX*16 array, dimension (LDU,max(NN))
*> The product of U times Z.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> W1 - COMPLEX*16 array, dimension (max(NN))
*> The eigenvalues of A, as computed by a full Schur
*> decomposition H = Z T Z'. On exit, W1 contains the
*> eigenvalues of the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> W3 - COMPLEX*16 array, dimension (max(NN))
*> The eigenvalues of A, as computed by a partial Schur
*> decomposition (Z not computed, T only computed as much
*> W3 contains the eigenvalues of the matrix in A, possibly
*> perturbed by ZHSEIN.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTL - COMPLEX*16 array, dimension (LDU,max(NN))
*> The conjugate transpose of the (upper triangular) left
*> eigenvector matrix for the matrix in T1.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVEZTR - COMPLEX*16 array, dimension (LDU,max(NN))
*> The (upper triangular) right eigenvector matrix for the
*> matrix in T1.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTY - COMPLEX*16 array, dimension (LDU,max(NN))
*> The conjugate transpose of the left eigenvector matrix
*> for the matrix in H.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> EVECTX - COMPLEX*16 array, dimension (LDU,max(NN))
*> The right eigenvector matrix for the matrix in H.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> UU - COMPLEX*16 array, dimension (LDU,max(NN))
*> Details of the unitary matrix computed by ZGEHRD.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> TAU - COMPLEX*16 array, dimension (max(NN))
*> Further details of the unitary matrix computed by ZGEHRD.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK - COMPLEX*16 array, dimension (NWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NWORK - INTEGER
*> The number of entries in WORK. NWORK >= 4*NN(j)*NN(j) + 2.
-*> \endverbatim
-*> \verbatim
+*>
*> RWORK - DOUBLE PRECISION array, dimension (max(NN))
*> Workspace. Could be equivalenced to IWORK, but not SELECT.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IWORK - INTEGER array, dimension (max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> SELECT - LOGICAL array, dimension (max(NN))
*> Workspace. Could be equivalenced to IWORK, but not RWORK.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT - DOUBLE PRECISION array, dimension (14)
*> The values computed by the fourteen tests described above.
*> The values are currently limited to 1/ulp, to avoid
*> overflow.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> If 0, then everything ran OK.
*> -1: NSIZES < 0
*> If >2, then 30*N iterations were not enough to find an
*> eigenvalue or to decompose the problem.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> MTEST The number of tests defined: care must be taken
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL,
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> If ZLATMR, CLATMS, ZHETRD, ZUNGTR, ZSTEQR, DSTERF,
*> or ZUNMC2 returns an error code, the
*> absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far.
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> \param[out] BETA
*> \verbatim
*> BETA is COMPLEX*16 array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by ZGGES.
*> ALPHA(k) / BETA(k) is the k-th generalized eigenvalue of A
*> and B.
*> \param[out] BETA
*> \verbatim
*> BETA is COMPLEX*16 array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by ZGGEV.
*> ( ALPHAR(k)+ALPHAI(k)*i ) / BETA(k) is the k-th
*> generalized eigenvalue of A and B.
*> \param[out] BETA1
*> \verbatim
*> BETA1 is COMPLEX*16 array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> Like ALPHAR, ALPHAI, BETA, these arrays contain the
*> eigenvalues of A and B, but those computed when ZGGEV only
*> computes a partial eigendecomposition, i.e. not the
*> \param[out] BETA
*> \verbatim
*> BETA is COMPLEX*16 array, dimension (NSIZE)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, ALPHA/BETA are the eigenvalues.
*> \endverbatim
*>
*> \param[out] BETA
*> \verbatim
*> BETA is COMPLEX*16 array, dimension (NSIZE)
-*> \endverbatim
-*> \verbatim
+*>
*> On exit, ALPHA/BETA are the eigenvalues.
*> \endverbatim
*>
*> -18: NWORK too small.
*> If ZLATMR, CLATMS, CLATME or ZGEES returns an error code,
*> the absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
*> -21: NWORK too small.
*> If ZLATMR, CLATMS, CLATME or ZGEEV returns an error code,
*> the absolute value of it is returned.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NMAX Largest value in NN.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \param[out] BETA1
*> \verbatim
*> BETA1 is COMPLEX*16 array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by ZGEGS.
*> ALPHA1(k) / BETA1(k) is the k-th generalized eigenvalue of
*> the matrices in A and B.
*> \param[out] BETA2
*> \verbatim
*> BETA2 is COMPLEX*16 array, dimension (max(NN))
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized eigenvalues of (A,B) computed by ZGEGV.
*> ALPHA2(k) / BETA2(k) is the k-th generalized eigenvalue of
*> the matrices in A and B.
*> The number of sizes of matrices to use. If it is zero,
*> ZDRVSG does nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NN INTEGER array, dimension (NSIZES)
*> An array containing the sizes to be used for the matrices.
*> Zero values will be skipped. The values must be at least
*> zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES INTEGER
*> The number of elements in DOTYPE. If it is zero, ZDRVSG
*> does nothing. It must be at least zero. If it is MAXTYP+1
*> is only useful if DOTYPE(1:MAXTYP) is .FALSE. and
*> DOTYPE(MAXTYP+1) is .TRUE. .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> DOTYPE LOGICAL array, dimension (NTYPES)
*> If DOTYPE(j) is .TRUE., then for each size in NN a
*> matrix of that size and of type j will be generated.
*> than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES)
*> will be ignored.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED INTEGER array, dimension (4)
*> On entry ISEED specifies the seed of the random number
*> generator. The array elements should be between 0 and 4095;
*> next call to ZDRVSG to continue the same random number
*> sequence.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH DOUBLE PRECISION
*> A test will count as "failed" if the "error", computed as
*> described above, exceeds THRESH. Note that the error
*> it should not depend on the precision (single vs. double)
*> or the size of the matrix. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NOUNIT INTEGER
*> The FORTRAN unit number for printing out error messages
*> (e.g., if a routine returns IINFO not equal to 0.)
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A COMPLEX*16 array, dimension (LDA , max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed. On exit, A contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA INTEGER
*> The leading dimension of A. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> B COMPLEX*16 array, dimension (LDB , max(NN))
*> Used to hold the Hermitian positive definite matrix for
*> the generailzed problem.
*> On exit, B contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDB INTEGER
*> The leading dimension of B. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D DOUBLE PRECISION array, dimension (max(NN))
*> The eigenvalues of A. On exit, the eigenvalues in D
*> correspond with the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> Z COMPLEX*16 array, dimension (LDZ, max(NN))
*> The matrix of eigenvectors.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDZ INTEGER
*> The leading dimension of ZZ. It must be at least 1 and
*> at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> AB COMPLEX*16 array, dimension (LDA, max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> BB COMPLEX*16 array, dimension (LDB, max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> AP COMPLEX*16 array, dimension (max(NN)**2)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> BP COMPLEX*16 array, dimension (max(NN)**2)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK COMPLEX*16 array, dimension (NWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NWORK INTEGER
*> The number of entries in WORK. This must be at least
*> 2*N + N**2 where N = max( NN(j), 2 ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RWORK DOUBLE PRECISION array, dimension (LRWORK)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LRWORK INTEGER
*> The number of entries in RWORK. This must be at least
*> max( 7*N, 1 + 4*N + 2*N*lg(N) + 3*N**2 ) where
*> N = max( NN(j) ) and lg( N ) = smallest integer k such
*> that 2**k >= N .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IWORK INTEGER array, dimension (LIWORK))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LIWORK INTEGER
*> The number of entries in IWORK. This must be at least
*> 2 + 5*max( NN(j) ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT DOUBLE PRECISION array, dimension (70)
*> The values computed by the 70 tests described above.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO INTEGER
*> If 0, then everything ran OK.
*> -1: NSIZES < 0
*> ZHPGVD, ZHEGVX, CHPGVX, ZHBGVX returns an error code,
*> the absolute value of it is returned.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far (computed by DLAFTS).
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> The number of sizes of matrices to use. If it is zero,
*> ZDRVST does nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NN INTEGER array, dimension (NSIZES)
*> An array containing the sizes to be used for the matrices.
*> Zero values will be skipped. The values must be at least
*> zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES INTEGER
*> The number of elements in DOTYPE. If it is zero, ZDRVST
*> does nothing. It must be at least zero. If it is MAXTYP+1
*> is only useful if DOTYPE(1:MAXTYP) is .FALSE. and
*> DOTYPE(MAXTYP+1) is .TRUE. .
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> DOTYPE LOGICAL array, dimension (NTYPES)
*> If DOTYPE(j) is .TRUE., then for each size in NN a
*> matrix of that size and of type j will be generated.
*> than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES)
*> will be ignored.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED INTEGER array, dimension (4)
*> On entry ISEED specifies the seed of the random number
*> generator. The array elements should be between 0 and 4095;
*> next call to ZDRVST to continue the same random number
*> sequence.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> THRESH DOUBLE PRECISION
*> A test will count as "failed" if the "error", computed as
*> described above, exceeds THRESH. Note that the error
*> it should not depend on the precision (single vs. double)
*> or the size of the matrix. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NOUNIT INTEGER
*> The FORTRAN unit number for printing out error messages
*> (e.g., if a routine returns IINFO not equal to 0.)
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A COMPLEX*16 array, dimension (LDA , max(NN))
*> Used to hold the matrix whose eigenvalues are to be
*> computed. On exit, A contains the last matrix actually
*> used.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA INTEGER
*> The leading dimension of A. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D1 DOUBLE PRECISION array, dimension (max(NN))
*> The eigenvalues of A, as computed by ZSTEQR simlutaneously
*> with Z. On exit, the eigenvalues in D1 correspond with the
*> matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D2 DOUBLE PRECISION array, dimension (max(NN))
*> The eigenvalues of A, as computed by ZSTEQR if Z is not
*> computed. On exit, the eigenvalues in D2 correspond with
*> the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D3 DOUBLE PRECISION array, dimension (max(NN))
*> The eigenvalues of A, as computed by DSTERF. On exit, the
*> eigenvalues in D3 correspond with the matrix in A.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WA1 DOUBLE PRECISION array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> WA2 DOUBLE PRECISION array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> WA3 DOUBLE PRECISION array, dimension
-*> \endverbatim
-*> \verbatim
+*>
*> U COMPLEX*16 array, dimension (LDU, max(NN))
*> The unitary matrix computed by ZHETRD + ZUNGC3.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDU INTEGER
*> The leading dimension of U, Z, and V. It must be at
*> least 1 and at least max( NN ).
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> V COMPLEX*16 array, dimension (LDU, max(NN))
*> The Housholder vectors computed by ZHETRD in reducing A to
*> tridiagonal form.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> TAU COMPLEX*16 array, dimension (max(NN))
*> The Householder factors computed by ZHETRD in reducing A
*> to tridiagonal form.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> Z COMPLEX*16 array, dimension (LDU, max(NN))
*> The unitary matrix of eigenvectors computed by ZHEEVD,
*> ZHEEVX, ZHPEVD, CHPEVX, ZHBEVD, and CHBEVX.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK - COMPLEX*16 array of dimension ( LWORK )
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LWORK - INTEGER
*> The number of entries in WORK. This must be at least
*> 2*max( NN(j), 2 )**2.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RWORK DOUBLE PRECISION array, dimension (3*max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LRWORK - INTEGER
*> The number of entries in RWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> IWORK INTEGER array, dimension (6*max(NN))
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LIWORK - INTEGER
*> The number of entries in IWORK.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT DOUBLE PRECISION array, dimension (??)
*> The values computed by the tests described above.
*> The values are currently limited to 1/ulp, to avoid
*> overflow.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO INTEGER
*> If 0, then everything ran OK.
*> -1: NSIZES < 0
*> or DORMC2 returns an error code, the
*> absolute value of it is returned.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> so far (computed by DLAFTS).
*> COND, IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTOVFL, RTUNFL Square roots of the previous 2 values.
*> <0, input parameter -INFO is incorrect
*> >0, ZLATMR, CLATMS, CLATME or ZGET24 returned an error
*> code and INFO is its absolute value
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
*> ZERO, ONE Real 0 and 1.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
*> If <0, then input paramter -INFO is incorrect.
*> If >0, ZLATMR, CLATMS, CLATME or ZGET23 returned an error
*> code, and INFO is its absolute value.
-*> \endverbatim
-*> \verbatim
+*>
*>-----------------------------------------------------------------------
-*> \endverbatim
-*> \verbatim
+*>
*> Some Local Variables and Parameters:
*> ---- ----- --------- --- ----------
-*> \endverbatim
-*> \verbatim
+*>
*> ZERO, ONE Real 0 and 1.
*> MAXTYP The number of types defined.
*> NMAX Largest value in NN or 12.
*> COND, CONDS,
*> IMODE Values to be passed to the matrix generators.
*> ANORM Norm of A; passed to matrix generators.
-*> \endverbatim
-*> \verbatim
+*>
*> OVFL, UNFL Overflow and underflow thresholds.
*> ULP, ULPINV Finest relative precision and its inverse.
*> RTULP, RTULPI Square roots of the previous 4 values.
-*> \endverbatim
-*> \verbatim
+*>
*> The following four arrays decode JTYPE:
*> KTYPE(j) The general type (1-10) for type "j".
*> KMODE(j) The MODE value to be passed to the matrix
*> \param[out] BETA
*> \verbatim
*> BETA is DOUBLE PRECISION array, dimension (N)
-*> \endverbatim
-*> \verbatim
+*>
*> The generalized singular value pairs of A and B, the
*> ``diagonal'' matrices D1 and D2 are constructed from
*> ALPHA and BETA, see subroutine ZGGSVD for details.
*> Specifies the type of tests to be performed.
*> 1: U expressed as a dense unitary matrix:
*> RESULT(1) = | A - U S U* | / ( |A| n ulp ) *andC> RESULT(2) = | I - UU* | / ( n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 2: U expressed as a product V of Housholder transformations:
*> RESULT(1) = | A - V S V* | / ( |A| n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 3: U expressed both as a dense unitary matrix and
*> as a product of Housholder transformations:
*> RESULT(1) = | I - UV* | / ( n ulp )
*> Specifies the type of tests to be performed.
*> 1: U expressed as a dense orthogonal matrix:
*> RESULT(1) = | A - U S U' | / ( |A| n ulp ) *andC> RESULT(2) = | I - UU' | / ( n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> UPLO CHARACTER
*> If UPLO='U', the upper triangle of A will be used and the
*> (strictly) lower triangle will not be referenced. If
*> UPLO='L', the lower triangle of A will be used and the
*> (strictly) upper triangle will not be referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> N INTEGER
*> The size of the matrix. If it is zero, ZHET22 does nothing.
*> It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> M INTEGER
*> The number of columns of U. If it is zero, ZHET22 does
*> nothing. It must be at least zero.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> KBAND INTEGER
*> The bandwidth of the matrix. It may only be zero or one.
*> If zero, then S is diagonal, and E is not referenced. If
*> one, then S is symmetric tri-diagonal.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A COMPLEX*16 array, dimension (LDA , N)
*> The original (unfactored) matrix. It is assumed to be
*> symmetric, and only the upper (UPLO='U') or only the lower
*> (UPLO='L') will be referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA INTEGER
*> The leading dimension of A. It must be at least 1
*> and at least N.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> D DOUBLE PRECISION array, dimension (N)
*> The diagonal of the (symmetric tri-) diagonal matrix.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> E DOUBLE PRECISION array, dimension (N)
*> The off-diagonal of the (symmetric tri-) diagonal matrix.
*> E(1) is ignored, E(2) is the (1,2) and (2,1) element, etc.
*> Not referenced if KBAND=0.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> U COMPLEX*16 array, dimension (LDU, N)
*> If ITYPE=1, this contains the orthogonal matrix in
*> the decomposition, expressed as a dense matrix.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDU INTEGER
*> The leading dimension of U. LDU must be at least N and
*> at least 1.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> V COMPLEX*16 array, dimension (LDV, N)
*> If ITYPE=2 or 3, the lower triangle of this array contains
*> the Householder vectors used to describe the orthogonal
*> matrix in the decomposition. If ITYPE=1, then it is not
*> referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDV INTEGER
*> The leading dimension of V. LDV must be at least N and
*> at least 1.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> TAU COMPLEX*16 array, dimension (N)
*> If ITYPE >= 2, then TAU(j) is the scalar factor of
*> v(j) v(j)' in the Householder transformation H(j) of
*> the product U = H(1)...H(n-2)
*> If ITYPE < 2, then TAU is not referenced.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> WORK COMPLEX*16 array, dimension (2*N**2)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RWORK DOUBLE PRECISION array, dimension (N)
*> Workspace.
*> Modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT DOUBLE PRECISION array, dimension (2)
*> The values computed by the two tests described above. The
*> values are currently limited to 1/ulp, to avoid overflow.
*> Specifies the type of tests to be performed.
*> 1: U expressed as a dense unitary matrix:
*> RESULT(1) = | A - U S U* | / ( |A| n ulp ) *andC> RESULT(2) = | I - UU* | / ( n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 2: U expressed as a product V of Housholder transformations:
*> RESULT(1) = | A - V S V* | / ( |A| n ulp )
-*> \endverbatim
-*> \verbatim
+*>
*> 3: U expressed both as a dense unitary matrix and
*> as a product of Housholder transformations:
*> RESULT(1) = | I - UV* | / ( n ulp )
*> \param[in] IHI
*> \verbatim
*> IHI is INTEGER
-*> \endverbatim
-*> \verbatim
+*>
*> A is assumed to be upper triangular in rows and columns
*> 1:ILO-1 and IHI+1:N, so Q differs from the identity only in
*> rows and columns ILO+1:IHI.
*> KU is INTEGER
*> Used only if A is a general band matrix or if A is
*> triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xGB, specifies the number of superdiagonals of A,
*> and 0 <= KU <= N-1.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xTR, xTP, or xTB, specifies whether or not the
*> matrix has unit diagonal:
*> = 1: matrix has non-unit diagonal (default)
*> If ITYPE < 0, then type abs(ITYPE) is generated and then
*> swapped end for end (A(I,J) := A'(N-J,N-I).) See also
*> the description of AMAGN and RSIGN.
-*> \endverbatim
-*> \verbatim
+*>
*> Special types:
*> = 0: the zero matrix.
*> = 1: the identity.
*> followed by a k x k identity block, where k=(N-1)/2.
*> If N is even, then k=(N-2)/2, and a zero diagonal entry
*> is tacked onto the end.
-*> \endverbatim
-*> \verbatim
+*>
*> Diagonal types. The diagonal consists of NZ1 zeros, then
*> k=N-NZ1-NZ2 nonzeros. The subdiagonal is zero. ITYPE
*> specifies the nonzero diagonal entries as follows:
*> \param[in] BETA
*> \verbatim
*> BETA is COMPLEX*16
-*> \endverbatim
-*> \verbatim
+*>
*> parameters to decide whether the pair (ALPHA, BETA) is
*> selected.
*> \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
-*> \verbatim
+*>
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the matrix A.
*> N must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> K - INTEGER
*> On entry, K specifies the number of super-diagonals of the
*> matrix A. K must satisfy 0 .le. K.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> ALPHA - COMPLEX*16
*> On entry, ALPHA specifies the scalar alpha.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX*16 array, dimension( LDA, N )
*> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
*> by n part of the array A must contain the upper triangular
*> 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 )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> On entry, LDA specifies the first dimension of A as declared
*> in the calling (sub) program. LDA must be at least
*> ( k + 1 ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> X - COMPLEX*16 array, dimension at least
*> ( 1 + ( N - 1 )*abs( INCX ) ).
*> Before entry, the incremented array X must contain the
*> vector x.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> INCX - INTEGER
*> On entry, INCX specifies the increment for the elements of
*> X. INCX must not be zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> BETA - COMPLEX*16
*> On entry, BETA specifies the scalar beta.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> Y - COMPLEX*16 array, dimension at least
*> ( 1 + ( N - 1 )*abs( INCY ) ).
*> Before entry, the incremented array Y must contain the
*> vector y. On exit, Y is overwritten by the updated vector y.
-*> \endverbatim
-*> \verbatim
+*>
*> INCY - INTEGER
*> On entry, INCY specifies the increment for the elements of
*> Y. INCY must not be zero.
*> \verbatim
*> NMAX INTEGER
*> The maximum allowable value for N.
-*> \endverbatim
-*> \verbatim
+*>
*> MAXIN INTEGER
*> The number of different values that can be used for each of
*> M, N, or NB
-*> \endverbatim
-*> \verbatim
+*>
*> MAXRHS INTEGER
*> The maximum number of right hand sides
-*> \endverbatim
-*> \verbatim
+*>
*> NIN INTEGER
*> The unit number for input
-*> \endverbatim
-*> \verbatim
+*>
*> NOUT INTEGER
*> The unit number for output
*> \endverbatim
*> MAXIN INTEGER
*> The number of different values that can be used for each of
*> M, N, or NB
-*> \endverbatim
-*> \verbatim
+*>
*> MAXRHS INTEGER
*> The maximum number of right hand sides
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES INTEGER
-*> \endverbatim
-*> \verbatim
+*>
*> NMAX INTEGER
*> The maximum allowable value for N.
-*> \endverbatim
-*> \verbatim
+*>
*> NIN INTEGER
*> The unit number for input
-*> \endverbatim
-*> \verbatim
+*>
*> NOUT INTEGER
*> The unit number for output
*> \endverbatim
*> KU is INTEGER
*> Used only if A is a general band matrix or if A is
*> triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xGB, specifies the number of superdiagonals of A,
*> and 0 <= KU <= N-1.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xTR, xTP, or xTB, specifies whether or not the
*> matrix has unit diagonal:
*> = 1: matrix has non-unit diagonal (default)
*> UPLO = 'U' or 'u' The matrix is upper triangular.
*> UPLO = 'L' or 'l' The matrix is lower triangular.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS - CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
*> TRANS = 'N' or 'n' x := A*x.
*> TRANS = 'C' or 'c' x := A^H*x.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG - CHARACTER*1
*> On entry, DIAG specifies whether the diagonal blocks are
*> assumed to be unit matrices:
*> DIAG = 'U' or 'u' Diagonal blocks are unit matrices.
*> DIAG = 'N' or 'n' Diagonal blocks are non-unit.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the matrix A.
*> N must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> NRHS - INTEGER
*> On entry, NRHS specifies the number of right hand sides,
*> i.e., the number of vectors x to be multiplied by A.
*> NRHS must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX array, dimension( LDA, N )
*> On entry, A contains a block diagonal matrix and the
*> multipliers of the transformations used to obtain it,
*> stored as a 2-D triangular matrix.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> On entry, LDA specifies the first dimension of A as declared
*> in the calling ( sub ) program. LDA must be at least
*> max( 1, N ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> IPIV - INTEGER array, dimension( N )
*> On entry, IPIV contains the vector of pivot indices as
*> determined by CSYTRF or CHETRF.
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
*> If IPIV( K ) < 0 and UPLO = 'L', then row K+1 was exchanged
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
-*> \endverbatim
-*> \verbatim
+*>
*> B - COMPLEX array, dimension( LDB, NRHS )
*> On entry, B contains NRHS vectors of length N.
*> On exit, B is overwritten with the product A * B.
-*> \endverbatim
-*> \verbatim
+*>
*> LDB - INTEGER
*> On entry, LDB contains the leading dimension of B as
*> declared in the calling program. LDB must be at least
*> max( 1, N ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> INFO is the error flag.
*> On exit, a value of 0 indicates a successful exit.
*> UPLO = 'U' or 'u' The matrix is upper triangular.
*> UPLO = 'L' or 'l' The matrix is lower triangular.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS - CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
*> TRANS = 'N' or 'n' x := A*x.
*> TRANS = 'C' or 'c' x := A^H*x.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG - CHARACTER*1
*> On entry, DIAG specifies whether the diagonal blocks are
*> assumed to be unit matrices, as follows:
*> DIAG = 'U' or 'u' Diagonal blocks are unit matrices.
*> DIAG = 'N' or 'n' Diagonal blocks are non-unit.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the matrix A.
*> N must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> NRHS - INTEGER
*> On entry, NRHS specifies the number of right hand sides,
*> i.e., the number of vectors x to be multiplied by A.
*> NRHS must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX array, dimension( N*(N+1)/2 )
*> On entry, A contains a block diagonal matrix and the
*> multipliers of the transformations used to obtain it,
*> stored as a packed triangular matrix.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> IPIV - INTEGER array, dimension( N )
*> On entry, IPIV contains the vector of pivot indices as
*> determined by CSPTRF or CHPTRF.
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
*> If IPIV( K ) < 0 and UPLO = 'L', then row K+1 was exchanged
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
-*> \endverbatim
-*> \verbatim
+*>
*> B - COMPLEX array, dimension( LDB, NRHS )
*> On entry, B contains NRHS vectors of length N.
*> On exit, B is overwritten with the product A * B.
-*> \endverbatim
-*> \verbatim
+*>
*> LDB - INTEGER
*> On entry, LDB contains the leading dimension of B as
*> declared in the calling program. LDB must be at least
*> max( 1, N ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> INFO is the error flag.
*> On exit, a value of 0 indicates a successful exit.
*> UPLO = 'U' or 'u' The matrix is upper triangular.
*> UPLO = 'L' or 'l' The matrix is lower triangular.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS - CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
*> TRANS = 'N' or 'n' x := A*x.
*> TRANS = 'T' or 't' x := A^T*x.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG - CHARACTER*1
*> On entry, DIAG specifies whether the diagonal blocks are
*> assumed to be unit matrices, as follows:
*> DIAG = 'U' or 'u' Diagonal blocks are unit matrices.
*> DIAG = 'N' or 'n' Diagonal blocks are non-unit.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the matrix A.
*> N must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> NRHS - INTEGER
*> On entry, NRHS specifies the number of right hand sides,
*> i.e., the number of vectors x to be multiplied by A.
*> NRHS must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX array, dimension( N*(N+1)/2 )
*> On entry, A contains a block diagonal matrix and the
*> multipliers of the transformations used to obtain it,
*> stored as a packed triangular matrix.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> IPIV - INTEGER array, dimension( N )
*> On entry, IPIV contains the vector of pivot indices as
*> determined by CSPTRF.
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
*> If IPIV( K ) < 0 and UPLO = 'L', then row K+1 was exchanged
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
-*> \endverbatim
-*> \verbatim
+*>
*> B - COMPLEX array, dimension( LDB, NRHS )
*> On entry, B contains NRHS vectors of length N.
*> On exit, B is overwritten with the product A * B.
-*> \endverbatim
-*> \verbatim
+*>
*> LDB - INTEGER
*> On entry, LDB contains the leading dimension of B as
*> declared in the calling program. LDB must be at least
*> max( 1, N ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> INFO is the error flag.
*> On exit, a value of 0 indicates a successful exit.
*> UPLO = 'U' or 'u' The matrix is upper triangular.
*> UPLO = 'L' or 'l' The matrix is lower triangular.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS - CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
*> TRANS = 'N' or 'n' x := A*x.
*> TRANS = 'T' or 't' x := A'*x.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG - CHARACTER*1
*> On entry, DIAG specifies whether the diagonal blocks are
*> assumed to be unit matrices:
*> DIAG = 'U' or 'u' Diagonal blocks are unit matrices.
*> DIAG = 'N' or 'n' Diagonal blocks are non-unit.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the matrix A.
*> N must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> NRHS - INTEGER
*> On entry, NRHS specifies the number of right hand sides,
*> i.e., the number of vectors x to be multiplied by A.
*> NRHS must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX array, dimension( LDA, N )
*> On entry, A contains a block diagonal matrix and the
*> multipliers of the transformations used to obtain it,
*> stored as a 2-D triangular matrix.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> On entry, LDA specifies the first dimension of A as declared
*> in the calling ( sub ) program. LDA must be at least
*> max( 1, N ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> IPIV - INTEGER array, dimension( N )
*> On entry, IPIV contains the vector of pivot indices as
*> determined by CSYTRF or CHETRF.
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
*> If IPIV( K ) < 0 and UPLO = 'L', then row K+1 was exchanged
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
-*> \endverbatim
-*> \verbatim
+*>
*> B - COMPLEX array, dimension( LDB, NRHS )
*> On entry, B contains NRHS vectors of length N.
*> On exit, B is overwritten with the product A * B.
-*> \endverbatim
-*> \verbatim
+*>
*> LDB - INTEGER
*> On entry, LDB contains the leading dimension of B as
*> declared in the calling program. LDB must be at least
*> max( 1, N ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> INFO is the error flag.
*> On exit, a value of 0 indicates a successful exit.
*> \verbatim
*> RESULT is REAL array, dimension (6)
*> Results of each of the six tests below.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT(1) = | A - Q R |
*> RESULT(2) = | I - Q^H Q |
*> RESULT(3) = | Q C - Q C |
*> \verbatim
*> RESULT is REAL array, dimension (6)
*> Results of each of the six tests below.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT(1) = | A - Q R |
*> RESULT(2) = | I - Q^H Q |
*> RESULT(3) = | Q C - Q C |
*> 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
-*> \verbatim
+*>
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the matrix A.
*> N must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> K - INTEGER
*> On entry, K specifies the number of super-diagonals of the
*> matrix A. K must satisfy 0 .le. K.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> ALPHA - COMPLEX
*> On entry, ALPHA specifies the scalar alpha.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX array, dimension( LDA, N )
*> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
*> by n part of the array A must contain the upper triangular
*> 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 )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> On entry, LDA specifies the first dimension of A as declared
*> in the calling (sub) program. LDA must be at least
*> ( k + 1 ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> X - COMPLEX array, dimension at least
*> ( 1 + ( N - 1 )*abs( INCX ) ).
*> Before entry, the incremented array X must contain the
*> vector x.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> INCX - INTEGER
*> On entry, INCX specifies the increment for the elements of
*> X. INCX must not be zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> BETA - COMPLEX
*> On entry, BETA specifies the scalar beta.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> Y - COMPLEX array, dimension at least
*> ( 1 + ( N - 1 )*abs( INCY ) ).
*> Before entry, the incremented array Y must contain the
*> vector y. On exit, Y is overwritten by the updated vector y.
-*> \endverbatim
-*> \verbatim
+*>
*> INCY - INTEGER
*> On entry, INCY specifies the increment for the elements of
*> Y. INCY must not be zero.
*> \verbatim
*> NMAX INTEGER
*> The maximum allowable value for N
-*> \endverbatim
-*> \verbatim
+*>
*> MAXIN INTEGER
*> The number of different values that can be used for each of
*> M, N, NRHS, NB, and NX
-*> \endverbatim
-*> \verbatim
+*>
*> MAXRHS INTEGER
*> The maximum number of right hand sides
-*> \endverbatim
-*> \verbatim
+*>
*> NIN INTEGER
*> The unit number for input
-*> \endverbatim
-*> \verbatim
+*>
*> NOUT INTEGER
*> The unit number for output
*> \endverbatim
*> \verbatim
*> NMAX INTEGER
*> The maximum allowable value for N
-*> \endverbatim
-*> \verbatim
+*>
*> MAXIN INTEGER
*> The number of different values that can be used for each of
*> M, N, NRHS, NB, and NX
-*> \endverbatim
-*> \verbatim
+*>
*> MAXRHS INTEGER
*> The maximum number of right hand sides
-*> \endverbatim
-*> \verbatim
+*>
*> NIN INTEGER
*> The unit number for input
-*> \endverbatim
-*> \verbatim
+*>
*> NOUT INTEGER
*> The unit number for output
*> \endverbatim
*> MAXIN INTEGER
*> The number of different values that can be used for each of
*> M, N, or NB
-*> \endverbatim
-*> \verbatim
+*>
*> MAXRHS INTEGER
*> The maximum number of right hand sides
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES INTEGER
-*> \endverbatim
-*> \verbatim
+*>
*> NMAX INTEGER
*> The maximum allowable value for N.
-*> \endverbatim
-*> \verbatim
+*>
*> NIN INTEGER
*> The unit number for input
-*> \endverbatim
-*> \verbatim
+*>
*> NOUT INTEGER
*> The unit number for output
*> \endverbatim
*> KU is INTEGER
*> Used only if A is a general band matrix or if A is
*> triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xGB, specifies the number of superdiagonals of A,
*> and 0 <= KU <= N-1.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xTR, xTP, or xTB, specifies whether or not the
*> matrix has unit diagonal:
*> = 1: matrix has non-unit diagonal (default)
*> \verbatim
*> RESULT is DOUBLE PRECISION array, dimension (6)
*> Results of each of the six tests below.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT(1) = | A - Q R |
*> RESULT(2) = | I - Q^H Q |
*> RESULT(3) = | Q C - Q C |
*> \verbatim
*> RESULT is DOUBLE PRECISION array, dimension (6)
*> Results of each of the six tests below.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT(1) = | A - Q R |
*> RESULT(2) = | I - Q^H Q |
*> RESULT(3) = | Q C - Q C |
*> \verbatim
*> NMAX INTEGER
*> The maximum allowable value for N
-*> \endverbatim
-*> \verbatim
+*>
*> MAXIN INTEGER
*> The number of different values that can be used for each of
*> M, N, NRHS, NB, and NX
-*> \endverbatim
-*> \verbatim
+*>
*> MAXRHS INTEGER
*> The maximum number of right hand sides
-*> \endverbatim
-*> \verbatim
+*>
*> NIN INTEGER
*> The unit number for input
-*> \endverbatim
-*> \verbatim
+*>
*> NOUT INTEGER
*> The unit number for output
*> \endverbatim
*> MAXIN INTEGER
*> The number of different values that can be used for each of
*> M, N, or NB
-*> \endverbatim
-*> \verbatim
+*>
*> MAXRHS INTEGER
*> The maximum number of right hand sides
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES INTEGER
-*> \endverbatim
-*> \verbatim
+*>
*> NMAX INTEGER
*> The maximum allowable value for N.
-*> \endverbatim
-*> \verbatim
+*>
*> NIN INTEGER
*> The unit number for input
-*> \endverbatim
-*> \verbatim
+*>
*> NOUT INTEGER
*> The unit number for output
*> \endverbatim
*> KU is INTEGER
*> Used only if A is a general band matrix or if A is
*> triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xGB, specifies the number of superdiagonals of A,
*> and 0 <= KU <= N-1.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xTR, xTP, or xTB, specifies whether or not the
*> matrix has unit diagonal:
*> = 1: matrix has non-unit diagonal (default)
*> \verbatim
*> RESULT is REAL array, dimension (6)
*> Results of each of the six tests below.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT(1) = | A - Q R |
*> RESULT(2) = | I - Q^H Q |
*> RESULT(3) = | Q C - Q C |
*> \verbatim
*> RESULT is REAL array, dimension (6)
*> Results of each of the six tests below.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT(1) = | A - Q R |
*> RESULT(2) = | I - Q^H Q |
*> RESULT(3) = | Q C - Q C |
*> \verbatim
*> NMAX INTEGER
*> The maximum allowable value for N.
-*> \endverbatim
-*> \verbatim
+*>
*> MAXIN INTEGER
*> The number of different values that can be used for each of
*> M, N, or NB
-*> \endverbatim
-*> \verbatim
+*>
*> MAXRHS INTEGER
*> The maximum number of right hand sides
-*> \endverbatim
-*> \verbatim
+*>
*> NIN INTEGER
*> The unit number for input
-*> \endverbatim
-*> \verbatim
+*>
*> NOUT INTEGER
*> The unit number for output
*> \endverbatim
*> \verbatim
*> NMAX INTEGER
*> The maximum allowable value for N
-*> \endverbatim
-*> \verbatim
+*>
*> MAXIN INTEGER
*> The number of different values that can be used for each of
*> M, N, NRHS, NB, and NX
-*> \endverbatim
-*> \verbatim
+*>
*> MAXRHS INTEGER
*> The maximum number of right hand sides
-*> \endverbatim
-*> \verbatim
+*>
*> NIN INTEGER
*> The unit number for input
-*> \endverbatim
-*> \verbatim
+*>
*> NOUT INTEGER
*> The unit number for output
*> \endverbatim
*> MAXIN INTEGER
*> The number of different values that can be used for each of
*> M, N, or NB
-*> \endverbatim
-*> \verbatim
+*>
*> MAXRHS INTEGER
*> The maximum number of right hand sides
-*> \endverbatim
-*> \verbatim
+*>
*> NTYPES INTEGER
-*> \endverbatim
-*> \verbatim
+*>
*> NMAX INTEGER
*> The maximum allowable value for N.
-*> \endverbatim
-*> \verbatim
+*>
*> NIN INTEGER
*> The unit number for input
-*> \endverbatim
-*> \verbatim
+*>
*> NOUT INTEGER
*> The unit number for output
*> \endverbatim
*> KU is INTEGER
*> Used only if A is a general band matrix or if A is
*> triangular.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xGB, specifies the number of superdiagonals of A,
*> and 0 <= KU <= N-1.
-*> \endverbatim
-*> \verbatim
+*>
*> If PATH = xTR, xTP, or xTB, specifies whether or not the
*> matrix has unit diagonal:
*> = 1: matrix has non-unit diagonal (default)
*> UPLO = 'U' or 'u' The matrix is upper triangular.
*> UPLO = 'L' or 'l' The matrix is lower triangular.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS - CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
*> TRANS = 'N' or 'n' x := A*x.
*> TRANS = 'C' or 'c' x := A^H*x.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG - CHARACTER*1
*> On entry, DIAG specifies whether the diagonal blocks are
*> assumed to be unit matrices:
*> DIAG = 'U' or 'u' Diagonal blocks are unit matrices.
*> DIAG = 'N' or 'n' Diagonal blocks are non-unit.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the matrix A.
*> N must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> NRHS - INTEGER
*> On entry, NRHS specifies the number of right hand sides,
*> i.e., the number of vectors x to be multiplied by A.
*> NRHS must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX*16 array, dimension( LDA, N )
*> On entry, A contains a block diagonal matrix and the
*> multipliers of the transformations used to obtain it,
*> stored as a 2-D triangular matrix.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> On entry, LDA specifies the first dimension of A as declared
*> in the calling ( sub ) program. LDA must be at least
*> max( 1, N ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> IPIV - INTEGER array, dimension( N )
*> On entry, IPIV contains the vector of pivot indices as
*> determined by ZSYTRF or ZHETRF.
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
*> If IPIV( K ) < 0 and UPLO = 'L', then row K+1 was exchanged
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
-*> \endverbatim
-*> \verbatim
+*>
*> B - COMPLEX*16 array, dimension( LDB, NRHS )
*> On entry, B contains NRHS vectors of length N.
*> On exit, B is overwritten with the product A * B.
-*> \endverbatim
-*> \verbatim
+*>
*> LDB - INTEGER
*> On entry, LDB contains the leading dimension of B as
*> declared in the calling program. LDB must be at least
*> max( 1, N ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> INFO is the error flag.
*> On exit, a value of 0 indicates a successful exit.
*> UPLO = 'U' or 'u' The matrix is upper triangular.
*> UPLO = 'L' or 'l' The matrix is lower triangular.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS - CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
*> TRANS = 'N' or 'n' x := A*x.
*> TRANS = 'C' or 'c' x := A^H*x.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG - CHARACTER*1
*> On entry, DIAG specifies whether the diagonal blocks are
*> assumed to be unit matrices, as follows:
*> DIAG = 'U' or 'u' Diagonal blocks are unit matrices.
*> DIAG = 'N' or 'n' Diagonal blocks are non-unit.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the matrix A.
*> N must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> NRHS - INTEGER
*> On entry, NRHS specifies the number of right hand sides,
*> i.e., the number of vectors x to be multiplied by A.
*> NRHS must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX*16 array, dimension( N*(N+1)/2 )
*> On entry, A contains a block diagonal matrix and the
*> multipliers of the transformations used to obtain it,
*> stored as a packed triangular matrix.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> IPIV - INTEGER array, dimension( N )
*> On entry, IPIV contains the vector of pivot indices as
*> determined by ZSPTRF or ZHPTRF.
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
*> If IPIV( K ) < 0 and UPLO = 'L', then row K+1 was exchanged
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
-*> \endverbatim
-*> \verbatim
+*>
*> B - COMPLEX*16 array, dimension( LDB, NRHS )
*> On entry, B contains NRHS vectors of length N.
*> On exit, B is overwritten with the product A * B.
-*> \endverbatim
-*> \verbatim
+*>
*> LDB - INTEGER
*> On entry, LDB contains the leading dimension of B as
*> declared in the calling program. LDB must be at least
*> max( 1, N ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> INFO is the error flag.
*> On exit, a value of 0 indicates a successful exit.
*> UPLO = 'U' or 'u' The matrix is upper triangular.
*> UPLO = 'L' or 'l' The matrix is lower triangular.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS - CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
*> TRANS = 'N' or 'n' x := A*x.
*> TRANS = 'T' or 't' x := A^T*x.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG - CHARACTER*1
*> On entry, DIAG specifies whether the diagonal blocks are
*> assumed to be unit matrices, as follows:
*> DIAG = 'U' or 'u' Diagonal blocks are unit matrices.
*> DIAG = 'N' or 'n' Diagonal blocks are non-unit.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the matrix A.
*> N must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> NRHS - INTEGER
*> On entry, NRHS specifies the number of right hand sides,
*> i.e., the number of vectors x to be multiplied by A.
*> NRHS must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX*16 array, dimension( N*(N+1)/2 )
*> On entry, A contains a block diagonal matrix and the
*> multipliers of the transformations used to obtain it,
*> stored as a packed triangular matrix.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> IPIV - INTEGER array, dimension( N )
*> On entry, IPIV contains the vector of pivot indices as
*> determined by ZSPTRF.
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
*> If IPIV( K ) < 0 and UPLO = 'L', then row K+1 was exchanged
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
-*> \endverbatim
-*> \verbatim
+*>
*> B - COMPLEX*16 array, dimension( LDB, NRHS )
*> On entry, B contains NRHS vectors of length N.
*> On exit, B is overwritten with the product A * B.
-*> \endverbatim
-*> \verbatim
+*>
*> LDB - INTEGER
*> On entry, LDB contains the leading dimension of B as
*> declared in the calling program. LDB must be at least
*> max( 1, N ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> INFO is the error flag.
*> On exit, a value of 0 indicates a successful exit.
*> UPLO = 'U' or 'u' The matrix is upper triangular.
*> UPLO = 'L' or 'l' The matrix is lower triangular.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> TRANS - CHARACTER*1
*> On entry, TRANS specifies the operation to be performed as
*> follows:
*> TRANS = 'N' or 'n' x := A*x.
*> TRANS = 'T' or 't' x := A'*x.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> DIAG - CHARACTER*1
*> On entry, DIAG specifies whether the diagonal blocks are
*> assumed to be unit matrices:
*> DIAG = 'U' or 'u' Diagonal blocks are unit matrices.
*> DIAG = 'N' or 'n' Diagonal blocks are non-unit.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the matrix A.
*> N must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> NRHS - INTEGER
*> On entry, NRHS specifies the number of right hand sides,
*> i.e., the number of vectors x to be multiplied by A.
*> NRHS must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX*16 array, dimension( LDA, N )
*> On entry, A contains a block diagonal matrix and the
*> multipliers of the transformations used to obtain it,
*> stored as a 2-D triangular matrix.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> On entry, LDA specifies the first dimension of A as declared
*> in the calling ( sub ) program. LDA must be at least
*> max( 1, N ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> IPIV - INTEGER array, dimension( N )
*> On entry, IPIV contains the vector of pivot indices as
*> determined by ZSYTRF or ZHETRF.
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
*> If IPIV( K ) < 0 and UPLO = 'L', then row K+1 was exchanged
*> with row | IPIV( K ) | and a 2 x 2 pivot block was used.
-*> \endverbatim
-*> \verbatim
+*>
*> B - COMPLEX*16 array, dimension( LDB, NRHS )
*> On entry, B contains NRHS vectors of length N.
*> On exit, B is overwritten with the product A * B.
-*> \endverbatim
-*> \verbatim
+*>
*> LDB - INTEGER
*> On entry, LDB contains the leading dimension of B as
*> declared in the calling program. LDB must be at least
*> max( 1, N ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> INFO is the error flag.
*> On exit, a value of 0 indicates a successful exit.
*> \verbatim
*> RESULT is DOUBLE PRECISION array, dimension (6)
*> Results of each of the six tests below.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT(1) = | A - Q R |
*> RESULT(2) = | I - Q^H Q |
*> RESULT(3) = | Q C - Q C |
*> \verbatim
*> RESULT is DOUBLE PRECISION array, dimension (6)
*> Results of each of the six tests below.
-*> \endverbatim
-*> \verbatim
+*>
*> RESULT(1) = | A - Q R |
*> RESULT(2) = | I - Q^H Q |
*> RESULT(3) = | Q C - Q C |
*> 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
-*> \verbatim
+*>
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> On entry, N specifies the order of the matrix A.
*> N must be at least zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> K - INTEGER
*> On entry, K specifies the number of super-diagonals of the
*> matrix A. K must satisfy 0 .le. K.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> ALPHA - COMPLEX*16
*> On entry, ALPHA specifies the scalar alpha.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX*16 array, dimension( LDA, N )
*> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
*> by n part of the array A must contain the upper triangular
*> 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 )
*> A( M + I, J ) = matrix( I, J )
*> 10 CONTINUE
*> 20 CONTINUE
-*> \endverbatim
-*> \verbatim
+*>
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> On entry, LDA specifies the first dimension of A as declared
*> in the calling (sub) program. LDA must be at least
*> ( k + 1 ).
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> X - COMPLEX*16 array, dimension at least
*> ( 1 + ( N - 1 )*abs( INCX ) ).
*> Before entry, the incremented array X must contain the
*> vector x.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> INCX - INTEGER
*> On entry, INCX specifies the increment for the elements of
*> X. INCX must not be zero.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> BETA - COMPLEX*16
*> On entry, BETA specifies the scalar beta.
*> Unchanged on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> Y - COMPLEX*16 array, dimension at least
*> ( 1 + ( N - 1 )*abs( INCY ) ).
*> Before entry, the incremented array Y must contain the
*> vector y. On exit, Y is overwritten by the updated vector y.
-*> \endverbatim
-*> \verbatim
+*>
*> INCY - INTEGER
*> On entry, INCY specifies the increment for the elements of
*> Y. INCY must not be zero.
*> \param[in] E
*> \verbatim
*> E is COMPLEX, dimension ( LDA, N )
-*> \endverbatim
-*> \verbatim
+*>
*> The matrices used in forming the output matrix Z.
*> \endverbatim
*>
*> 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 CDOTC):
-*> \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
*> explaination, interchanging 'L' and 'R' and "rows" and
*> "columns".
-*> \endverbatim
-*> \verbatim
+*>
*> Not modified.
*> \endverbatim
*>
*> If .TRUE., then CLAROT will rotate two rows. If .FALSE.,
*> then it will rotate two columns.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LLEFT - LOGICAL
*> If .TRUE., then XLEFT will be used instead of the
*> corresponding element of A for the first element in the
*> If .FALSE., then the corresponding element of A will be
*> used.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LRIGHT - LOGICAL
*> If .TRUE., then XRIGHT will be used instead of the
*> corresponding element of A for the last element in the
*> first row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.) If
*> .FALSE., then the corresponding element of A will be used.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NL - INTEGER
*> The length of the rows (if LROWS=.TRUE.) or columns (if
*> LROWS=.FALSE.) to be rotated. If XLEFT and/or XRIGHT are
*> LRIGHT are .TRUE. must be at least zero; if not, XERBLA
*> will be called.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> C, S - COMPLEX
*> Specify the Givens rotation to be applied. If LROWS is
*> true, then the matrix ( c s )
*> are complex. For a Givens rotation, |C|**2 + |S|**2 should
*> be 1, but this is not checked.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX array.
*> The array containing the rows/columns to be rotated. The
*> first element of A should be the upper left element to
*> be rotated.
*> Read and modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> The "effective" leading dimension of A. If A contains
*> a matrix stored in GE, HE, or SY format, then this is just
*> it must be at least NL minus the number of .TRUE. values
*> in XLEFT and XRIGHT.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> XLEFT - COMPLEX
*> If LLEFT is .TRUE., then XLEFT will be used and modified
*> instead of A(2,1) (if LROWS=.TRUE.) or A(1,2)
*> (if LROWS=.FALSE.).
*> Read and modified.
-*> \endverbatim
-*> \verbatim
+*>
*> XRIGHT - COMPLEX
*> If LRIGHT is .TRUE., then XRIGHT will be used and modified
*> instead of A(1,NL) (if LROWS=.TRUE.) or A(NL,1)
*> \param[in] BETA
*> \verbatim
*> BETA is COMPLEX
-*> \endverbatim
-*> \verbatim
+*>
*> Weighting constants for matrix A.
*> \endverbatim
*>
*> nonsymmetric).
*> 'B' or 'F' => both or full pivoting, i.e., on both sides.
*> In this case, M must equal N
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to CLATMR both have full bandwidth (KL = M-1
*> and KU = N-1), and differ only in the PIVTNG and PACK
*> parameters, then the matrices generated will differ only
*> (pivoting can be provided for by using this
*> option to store A in the trailing rows of
*> the allocated storage)
-*> \endverbatim
-*> \verbatim
+*>
*> Using these options, the various LAPACK packed and banded
*> storage schemes can be obtained:
*> GB - use 'Z'
*> PB, HB or TB - use 'B' or 'Q'
*> PP, HP or TP - use 'C' or 'R'
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to CLATMR differ only in the PACK parameter,
*> they will generate mathematically equivalent matrices.
*> Not modified.
*> (pivoting can be provided for by using this
*> option to store A in the trailing rows of
*> the allocated storage)
-*> \endverbatim
-*> \verbatim
+*>
*> Using these options, the various LAPACK packed and banded
*> storage schemes can be obtained:
*> GB - use 'Z'
*> PB, SB, HB, or TB - use 'B' or 'Q'
*> PP, SP, HB, or TP - use 'C' or 'R'
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to CLATMS differ only in the PACK parameter,
*> they will generate mathematically equivalent matrices.
*> Not modified.
*> (pivoting can be provided for by using this
*> option to store A in the trailing rows of
*> the allocated storage)
-*> \endverbatim
-*> \verbatim
+*>
*> Using these options, the various LAPACK packed and banded
*> storage schemes can be obtained:
*> GB - use 'Z'
*> PB, SB, HB, or TB - use 'B' or 'Q'
*> PP, SP, HB, or TP - use 'C' or 'R'
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to CLATMT differ only in the PACK parameter,
*> they will generate mathematically equivalent matrices.
*> Not modified.
*> \param[in] E
*> \verbatim
*> E is DOUBLE PRECISION, dimension ( LDA, N )
-*> \endverbatim
-*> \verbatim
+*>
*> The matrices used in forming the output matrix Z.
*> \endverbatim
*>
*> = 'I': Initialize A to (a section of) the identity matrix
*> before applying U.
*> = 'N': No initialization. Apply U to the input matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> INIT = 'I' may be used to generate square or rectangular
*> orthogonal matrices:
-*> \endverbatim
-*> \verbatim
+*>
*> For M = N and SIDE = 'L' or 'R', the rows will be orthogonal
*> to each other, as will the columns.
-*> \endverbatim
-*> \verbatim
+*>
*> If M < N, SIDE = 'R' produces a dense matrix whose rows are
*> orthogonal and whose columns are not, while SIDE = 'L'
*> produces a matrix whose rows are orthogonal, and whose first
*> M columns are orthogonal, and whose remaining columns are
*> zero.
-*> \endverbatim
-*> \verbatim
+*>
*> If M > N, SIDE = 'L' produces a dense matrix whose columns
*> are orthogonal and whose rows are not, while SIDE = 'R'
*> produces a matrix whose columns are orthogonal, and whose
*> If .TRUE., then DLAROT will rotate two rows. If .FALSE.,
*> then it will rotate two columns.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LLEFT - LOGICAL
*> If .TRUE., then XLEFT will be used instead of the
*> corresponding element of A for the first element in the
*> If .FALSE., then the corresponding element of A will be
*> used.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LRIGHT - LOGICAL
*> If .TRUE., then XRIGHT will be used instead of the
*> corresponding element of A for the last element in the
*> first row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.) If
*> .FALSE., then the corresponding element of A will be used.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NL - INTEGER
*> The length of the rows (if LROWS=.TRUE.) or columns (if
*> LROWS=.FALSE.) to be rotated. If XLEFT and/or XRIGHT are
*> LRIGHT are .TRUE. must be at least zero; if not, XERBLA
*> will be called.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> C, S - DOUBLE PRECISION
*> Specify the Givens rotation to be applied. If LROWS is
*> true, then the matrix ( c s )
*> right. For a Givens rotation, C**2 + S**2 should be 1,
*> but this is not checked.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A - DOUBLE PRECISION array.
*> The array containing the rows/columns to be rotated. The
*> first element of A should be the upper left element to
*> be rotated.
*> Read and modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> The "effective" leading dimension of A. If A contains
*> a matrix stored in GE or SY format, then this is just
*> it must be at least NL minus the number of .TRUE. values
*> in XLEFT and XRIGHT.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> XLEFT - DOUBLE PRECISION
*> If LLEFT is .TRUE., then XLEFT will be used and modified
*> instead of A(2,1) (if LROWS=.TRUE.) or A(1,2)
*> (if LROWS=.FALSE.).
*> Read and modified.
-*> \endverbatim
-*> \verbatim
+*>
*> XRIGHT - DOUBLE PRECISION
*> If LRIGHT is .TRUE., then XRIGHT will be used and modified
*> instead of A(1,NL) (if LROWS=.TRUE.) or A(NL,1)
*> \param[in] BETA
*> \verbatim
*> BETA is DOUBLE PRECISION
-*> \endverbatim
-*> \verbatim
+*>
*> Weighting constants for matrix A.
*> \endverbatim
*>
*> MODE - INTEGER
*> On entry describes how D is to be computed:
*> MODE = 0 means do not change D.
-*> \endverbatim
-*> \verbatim
+*>
*> MODE = 1 sets D(1)=1 and D(2:RANK)=1.0/COND
*> MODE = 2 sets D(1:RANK-1)=1 and D(RANK)=1.0/COND
*> MODE = 3 sets D(I)=COND**(-(I-1)/(RANK-1)) I=1:RANK
-*> \endverbatim
-*> \verbatim
+*>
*> MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
*> MODE = 5 sets D to random numbers in the range
*> ( 1/COND , 1 ) such that their logarithms
*> Thus if MODE is positive, D has entries ranging from
*> 1 to 1/COND, if negative, from 1/COND to 1,
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> COND - DOUBLE PRECISION
*> On entry, used as described under MODE above.
*> If used, it must be >= 1. Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IRSIGN - INTEGER
*> On entry, if MODE neither -6, 0 nor 6, determines sign of
*> entries of D
*> 0 => leave entries of D unchanged
*> 1 => multiply each entry of D by 1 or -1 with probability .5
-*> \endverbatim
-*> \verbatim
+*>
*> IDIST - CHARACTER*1
*> On entry, IDIST specifies the type of distribution to be
*> used to generate a random matrix .
*> 2 => UNIFORM( -1, 1 )
*> 3 => NORMAL( 0, 1 )
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED - INTEGER array, dimension ( 4 )
*> On entry ISEED specifies the seed of the random number
*> generator. The random number generator uses a
*> exit, and can be used in the next call to DLATM7
*> to continue the same random number sequence.
*> Changed on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> D - DOUBLE PRECISION array, dimension ( MIN( M , N ) )
*> Array to be computed according to MODE, COND and IRSIGN.
*> May be changed on exit if MODE is nonzero.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> Number of entries of D. Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RANK - INTEGER
*> The rank of matrix to be generated for modes 1,2,3 only.
*> D( RANK+1:N ) = 0.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> 0 => normal termination
*> -1 => if MODE not in range -6 to 6
*> nonsymmetric).
*> 'B' or 'F' => both or full pivoting, i.e., on both sides.
*> In this case, M must equal N
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to DLATMR both have full bandwidth (KL = M-1
*> and KU = N-1), and differ only in the PIVTNG and PACK
*> parameters, then the matrices generated will differ only
*> (pivoting can be provided for by using this
*> option to store A in the trailing rows of
*> the allocated storage)
-*> \endverbatim
-*> \verbatim
+*>
*> Using these options, the various LAPACK packed and banded
*> storage schemes can be obtained:
*> GB - use 'Z'
*> PB, SB or TB - use 'B' or 'Q'
*> PP, SP or TP - use 'C' or 'R'
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to DLATMR differ only in the PACK parameter,
*> they will generate mathematically equivalent matrices.
*> Not modified.
*> (pivoting can be provided for by using this
*> option to store A in the trailing rows of
*> the allocated storage)
-*> \endverbatim
-*> \verbatim
+*>
*> Using these options, the various LAPACK packed and banded
*> storage schemes can be obtained:
*> GB - use 'Z'
*> PB, SB or TB - use 'B' or 'Q'
*> PP, SP or TP - use 'C' or 'R'
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to DLATMS differ only in the PACK parameter,
*> they will generate mathematically equivalent matrices.
*> Not modified.
*> On entry this describes how the singular/eigenvalues are to
*> be specified:
*> MODE = 0 means use D as input
-*> \endverbatim
-*> \verbatim
+*>
*> MODE = 1 sets D(1)=1 and D(2:RANK)=1.0/COND
*> MODE = 2 sets D(1:RANK-1)=1 and D(RANK)=1.0/COND
*> MODE = 3 sets D(I)=COND**(-(I-1)/(RANK-1))
-*> \endverbatim
-*> \verbatim
+*>
*> MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
*> MODE = 5 sets D to random numbers in the range
*> ( 1/COND , 1 ) such that their logarithms
*> (pivoting can be provided for by using this
*> option to store A in the trailing rows of
*> the allocated storage)
-*> \endverbatim
-*> \verbatim
+*>
*> Using these options, the various LAPACK packed and banded
*> storage schemes can be obtained:
*> GB - use 'Z'
*> PB, SB or TB - use 'B' or 'Q'
*> PP, SP or TP - use 'C' or 'R'
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to DLATMT differ only in the PACK parameter,
*> they will generate mathematically equivalent matrices.
*> Not modified.
*> \param[in] E
*> \verbatim
*> E is REAL, dimension ( LDA, N )
-*> \endverbatim
-*> \verbatim
+*>
*> The matrices used in forming the output matrix Z.
*> \endverbatim
*>
*> = 'I': Initialize A to (a section of) the identity matrix
*> before applying U.
*> = 'N': No initialization. Apply U to the input matrix A.
-*> \endverbatim
-*> \verbatim
+*>
*> INIT = 'I' may be used to generate square or rectangular
*> orthogonal matrices:
-*> \endverbatim
-*> \verbatim
+*>
*> For M = N and SIDE = 'L' or 'R', the rows will be orthogonal
*> to each other, as will the columns.
-*> \endverbatim
-*> \verbatim
+*>
*> If M < N, SIDE = 'R' produces a dense matrix whose rows are
*> orthogonal and whose columns are not, while SIDE = 'L'
*> produces a matrix whose rows are orthogonal, and whose first
*> M columns are orthogonal, and whose remaining columns are
*> zero.
-*> \endverbatim
-*> \verbatim
+*>
*> If M > N, SIDE = 'L' produces a dense matrix whose columns
*> are orthogonal and whose rows are not, while SIDE = 'R'
*> produces a matrix whose columns are orthogonal, and whose
*> If .TRUE., then SLAROT will rotate two rows. If .FALSE.,
*> then it will rotate two columns.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LLEFT - LOGICAL
*> If .TRUE., then XLEFT will be used instead of the
*> corresponding element of A for the first element in the
*> If .FALSE., then the corresponding element of A will be
*> used.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LRIGHT - LOGICAL
*> If .TRUE., then XRIGHT will be used instead of the
*> corresponding element of A for the last element in the
*> first row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.) If
*> .FALSE., then the corresponding element of A will be used.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NL - INTEGER
*> The length of the rows (if LROWS=.TRUE.) or columns (if
*> LROWS=.FALSE.) to be rotated. If XLEFT and/or XRIGHT are
*> LRIGHT are .TRUE. must be at least zero; if not, XERBLA
*> will be called.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> C, S - REAL
*> Specify the Givens rotation to be applied. If LROWS is
*> true, then the matrix ( c s )
*> right. For a Givens rotation, C**2 + S**2 should be 1,
*> but this is not checked.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A - REAL array.
*> The array containing the rows/columns to be rotated. The
*> first element of A should be the upper left element to
*> be rotated.
*> Read and modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> The "effective" leading dimension of A. If A contains
*> a matrix stored in GE or SY format, then this is just
*> it must be at least NL minus the number of .TRUE. values
*> in XLEFT and XRIGHT.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> XLEFT - REAL
*> If LLEFT is .TRUE., then XLEFT will be used and modified
*> instead of A(2,1) (if LROWS=.TRUE.) or A(1,2)
*> (if LROWS=.FALSE.).
*> Read and modified.
-*> \endverbatim
-*> \verbatim
+*>
*> XRIGHT - REAL
*> If LRIGHT is .TRUE., then XRIGHT will be used and modified
*> instead of A(1,NL) (if LROWS=.TRUE.) or A(NL,1)
*> \param[in] BETA
*> \verbatim
*> BETA is REAL
-*> \endverbatim
-*> \verbatim
+*>
*> Weighting constants for matrix A.
*> \endverbatim
*>
*> MODE - INTEGER
*> On entry describes how D is to be computed:
*> MODE = 0 means do not change D.
-*> \endverbatim
-*> \verbatim
+*>
*> MODE = 1 sets D(1)=1 and D(2:RANK)=1.0/COND
*> MODE = 2 sets D(1:RANK-1)=1 and D(RANK)=1.0/COND
*> MODE = 3 sets D(I)=COND**(-(I-1)/(RANK-1)) I=1:RANK
-*> \endverbatim
-*> \verbatim
+*>
*> MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
*> MODE = 5 sets D to random numbers in the range
*> ( 1/COND , 1 ) such that their logarithms
*> Thus if MODE is positive, D has entries ranging from
*> 1 to 1/COND, if negative, from 1/COND to 1,
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> COND - REAL
*> On entry, used as described under MODE above.
*> If used, it must be >= 1. Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> IRSIGN - INTEGER
*> On entry, if MODE neither -6, 0 nor 6, determines sign of
*> entries of D
*> 0 => leave entries of D unchanged
*> 1 => multiply each entry of D by 1 or -1 with probability .5
-*> \endverbatim
-*> \verbatim
+*>
*> IDIST - CHARACTER*1
*> On entry, IDIST specifies the type of distribution to be
*> used to generate a random matrix .
*> 2 => UNIFORM( -1, 1 )
*> 3 => NORMAL( 0, 1 )
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> ISEED - INTEGER array, dimension ( 4 )
*> On entry ISEED specifies the seed of the random number
*> generator. The random number generator uses a
*> exit, and can be used in the next call to SLATM7
*> to continue the same random number sequence.
*> Changed on exit.
-*> \endverbatim
-*> \verbatim
+*>
*> D - REAL array, dimension ( MIN( M , N ) )
*> Array to be computed according to MODE, COND and IRSIGN.
*> May be changed on exit if MODE is nonzero.
-*> \endverbatim
-*> \verbatim
+*>
*> N - INTEGER
*> Number of entries of D. Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> RANK - INTEGER
*> The rank of matrix to be generated for modes 1,2,3 only.
*> D( RANK+1:N ) = 0.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> INFO - INTEGER
*> 0 => normal termination
*> -1 => if MODE not in range -6 to 6
*> nonsymmetric).
*> 'B' or 'F' => both or full pivoting, i.e., on both sides.
*> In this case, M must equal N
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to SLATMR both have full bandwidth (KL = M-1
*> and KU = N-1), and differ only in the PIVTNG and PACK
*> parameters, then the matrices generated will differ only
*> (pivoting can be provided for by using this
*> option to store A in the trailing rows of
*> the allocated storage)
-*> \endverbatim
-*> \verbatim
+*>
*> Using these options, the various LAPACK packed and banded
*> storage schemes can be obtained:
*> GB - use 'Z'
*> PB, SB or TB - use 'B' or 'Q'
*> PP, SP or TP - use 'C' or 'R'
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to SLATMR differ only in the PACK parameter,
*> they will generate mathematically equivalent matrices.
*> Not modified.
*> (pivoting can be provided for by using this
*> option to store A in the trailing rows of
*> the allocated storage)
-*> \endverbatim
-*> \verbatim
+*>
*> Using these options, the various LAPACK packed and banded
*> storage schemes can be obtained:
*> GB - use 'Z'
*> PB, SB or TB - use 'B' or 'Q'
*> PP, SP or TP - use 'C' or 'R'
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to SLATMS differ only in the PACK parameter,
*> they will generate mathematically equivalent matrices.
*> Not modified.
*> On entry this describes how the singular/eigenvalues are to
*> be specified:
*> MODE = 0 means use D as input
-*> \endverbatim
-*> \verbatim
+*>
*> MODE = 1 sets D(1)=1 and D(2:RANK)=1.0/COND
*> MODE = 2 sets D(1:RANK-1)=1 and D(RANK)=1.0/COND
*> MODE = 3 sets D(I)=COND**(-(I-1)/(RANK-1))
-*> \endverbatim
-*> \verbatim
+*>
*> MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
*> MODE = 5 sets D to random numbers in the range
*> ( 1/COND , 1 ) such that their logarithms
*> (pivoting can be provided for by using this
*> option to store A in the trailing rows of
*> the allocated storage)
-*> \endverbatim
-*> \verbatim
+*>
*> Using these options, the various LAPACK packed and banded
*> storage schemes can be obtained:
*> GB - use 'Z'
*> PB, SB or TB - use 'B' or 'Q'
*> PP, SP or TP - use 'C' or 'R'
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to SLATMT differ only in the PACK parameter,
*> they will generate mathematically equivalent matrices.
*> Not modified.
*> \param[in] E
*> \verbatim
*> E is COMPLEX*16, dimension ( LDA, N )
-*> \endverbatim
-*> \verbatim
+*>
*> The matrices used in forming the output matrix Z.
*> \endverbatim
*>
*> If .TRUE., then ZLAROT will rotate two rows. If .FALSE.,
*> then it will rotate two columns.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LLEFT - LOGICAL
*> If .TRUE., then XLEFT will be used instead of the
*> corresponding element of A for the first element in the
*> If .FALSE., then the corresponding element of A will be
*> used.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LRIGHT - LOGICAL
*> If .TRUE., then XRIGHT will be used instead of the
*> corresponding element of A for the last element in the
*> first row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.) If
*> .FALSE., then the corresponding element of A will be used.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> NL - INTEGER
*> The length of the rows (if LROWS=.TRUE.) or columns (if
*> LROWS=.FALSE.) to be rotated. If XLEFT and/or XRIGHT are
*> LRIGHT are .TRUE. must be at least zero; if not, XERBLA
*> will be called.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> C, S - COMPLEX*16
*> Specify the Givens rotation to be applied. If LROWS is
*> true, then the matrix ( c s )
*> are complex. For a Givens rotation, |C|**2 + |S|**2 should
*> be 1, but this is not checked.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> A - COMPLEX*16 array.
*> The array containing the rows/columns to be rotated. The
*> first element of A should be the upper left element to
*> be rotated.
*> Read and modified.
-*> \endverbatim
-*> \verbatim
+*>
*> LDA - INTEGER
*> The "effective" leading dimension of A. If A contains
*> a matrix stored in GE, HE, or SY format, then this is just
*> it must be at least NL minus the number of .TRUE. values
*> in XLEFT and XRIGHT.
*> Not modified.
-*> \endverbatim
-*> \verbatim
+*>
*> XLEFT - COMPLEX*16
*> If LLEFT is .TRUE., then XLEFT will be used and modified
*> instead of A(2,1) (if LROWS=.TRUE.) or A(1,2)
*> (if LROWS=.FALSE.).
*> Read and modified.
-*> \endverbatim
-*> \verbatim
+*>
*> XRIGHT - COMPLEX*16
*> If LRIGHT is .TRUE., then XRIGHT will be used and modified
*> instead of A(1,NL) (if LROWS=.TRUE.) or A(NL,1)
*> nonsymmetric).
*> 'B' or 'F' => both or full pivoting, i.e., on both sides.
*> In this case, M must equal N
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to ZLATMR both have full bandwidth (KL = M-1
*> and KU = N-1), and differ only in the PIVTNG and PACK
*> parameters, then the matrices generated will differ only
*> (pivoting can be provided for by using this
*> option to store A in the trailing rows of
*> the allocated storage)
-*> \endverbatim
-*> \verbatim
+*>
*> Using these options, the various LAPACK packed and banded
*> storage schemes can be obtained:
*> GB - use 'Z'
*> PB, HB or TB - use 'B' or 'Q'
*> PP, HP or TP - use 'C' or 'R'
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to ZLATMR differ only in the PACK parameter,
*> they will generate mathematically equivalent matrices.
*> Not modified.
*> (pivoting can be provided for by using this
*> option to store A in the trailing rows of
*> the allocated storage)
-*> \endverbatim
-*> \verbatim
+*>
*> Using these options, the various LAPACK packed and banded
*> storage schemes can be obtained:
*> GB - use 'Z'
*> PB, SB, HB, or TB - use 'B' or 'Q'
*> PP, SP, HB, or TP - use 'C' or 'R'
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to ZLATMS differ only in the PACK parameter,
*> they will generate mathematically equivalent matrices.
*> Not modified.
*> (pivoting can be provided for by using this
*> option to store A in the trailing rows of
*> the allocated storage)
-*> \endverbatim
-*> \verbatim
+*>
*> Using these options, the various LAPACK packed and banded
*> storage schemes can be obtained:
*> GB - use 'Z'
*> PB, SB, HB, or TB - use 'B' or 'Q'
*> PP, SP, HB, or TP - use 'C' or 'R'
-*> \endverbatim
-*> \verbatim
+*>
*> If two calls to ZLATMT differ only in the PACK parameter,
*> they will generate mathematically equivalent matrices.
*> Not modified.