Functions | |
| subroutine | chesv_aa_2stage (uplo, n, nrhs, a, lda, tb, ltb, ipiv, ipiv2, b, ldb, work, lwork, info) |
| CHESV_AA_2STAGE computes the solution to system of linear equations A * X = B for HE matrices | |
| subroutine | chetrf_aa_2stage (uplo, n, a, lda, tb, ltb, ipiv, ipiv2, work, lwork, info) |
| CHETRF_AA_2STAGE | |
| subroutine | chetrs_aa_2stage (uplo, n, nrhs, a, lda, tb, ltb, ipiv, ipiv2, b, ldb, info) |
| CHETRS_AA_2STAGE | |
| subroutine | cla_syamv (uplo, n, alpha, a, lda, x, incx, beta, y, incy) |
| CLA_SYAMV computes a matrix-vector product using a symmetric indefinite matrix to calculate error bounds. | |
| real function | cla_syrcond_c (uplo, n, a, lda, af, ldaf, ipiv, c, capply, info, work, rwork) |
| CLA_SYRCOND_C computes the infinity norm condition number of op(A)*inv(diag(c)) for symmetric indefinite matrices. | |
| real function | cla_syrcond_x (uplo, n, a, lda, af, ldaf, ipiv, x, info, work, rwork) |
| CLA_SYRCOND_X computes the infinity norm condition number of op(A)*diag(x) for symmetric indefinite matrices. | |
| subroutine | cla_syrfsx_extended (prec_type, uplo, n, nrhs, a, lda, af, ldaf, ipiv, colequ, c, b, ldb, y, ldy, berr_out, n_norms, err_bnds_norm, err_bnds_comp, res, ayb, dy, y_tail, rcond, ithresh, rthresh, dz_ub, ignore_cwise, info) |
| CLA_SYRFSX_EXTENDED improves the computed solution to a system of linear equations for symmetric indefinite matrices by performing extra-precise iterative refinement and provides error bounds and backward error estimates for the solution. | |
| real function | cla_syrpvgrw (uplo, n, info, a, lda, af, ldaf, ipiv, work) |
| CLA_SYRPVGRW computes the reciprocal pivot growth factor norm(A)/norm(U) for a symmetric indefinite matrix. | |
| subroutine | clahef_aa (uplo, j1, m, nb, a, lda, ipiv, h, ldh, work) |
| CLAHEF_AA | |
| subroutine | clasyf (uplo, n, nb, kb, a, lda, ipiv, w, ldw, info) |
| CLASYF computes a partial factorization of a complex symmetric matrix using the Bunch-Kaufman diagonal pivoting method. | |
| subroutine | clasyf_aa (uplo, j1, m, nb, a, lda, ipiv, h, ldh, work) |
| CLASYF_AA | |
| subroutine | clasyf_rk (uplo, n, nb, kb, a, lda, e, ipiv, w, ldw, info) |
| CLASYF_RK computes a partial factorization of a complex symmetric indefinite matrix using bounded Bunch-Kaufman (rook) diagonal pivoting method. | |
| subroutine | clasyf_rook (uplo, n, nb, kb, a, lda, ipiv, w, ldw, info) |
| CLASYF_ROOK computes a partial factorization of a complex symmetric matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method. | |
| subroutine | csycon (uplo, n, a, lda, ipiv, anorm, rcond, work, info) |
| CSYCON | |
| subroutine | csycon_3 (uplo, n, a, lda, e, ipiv, anorm, rcond, work, info) |
| CSYCON_3 | |
| subroutine | csycon_rook (uplo, n, a, lda, ipiv, anorm, rcond, work, info) |
| CSYCON_ROOK | |
| subroutine | csyconv (uplo, way, n, a, lda, ipiv, e, info) |
| CSYCONV | |
| subroutine | csyconvf (uplo, way, n, a, lda, e, ipiv, info) |
| CSYCONVF | |
| subroutine | csyconvf_rook (uplo, way, n, a, lda, e, ipiv, info) |
| CSYCONVF_ROOK | |
| subroutine | csyequb (uplo, n, a, lda, s, scond, amax, work, info) |
| CSYEQUB | |
| subroutine | csyrfs (uplo, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x, ldx, ferr, berr, work, rwork, info) |
| CSYRFS | |
| subroutine | csyrfsx (uplo, equed, n, nrhs, a, lda, af, ldaf, ipiv, s, b, ldb, x, ldx, rcond, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, rwork, info) |
| CSYRFSX | |
| subroutine | csysv_aa_2stage (uplo, n, nrhs, a, lda, tb, ltb, ipiv, ipiv2, b, ldb, work, lwork, info) |
| CSYSV_AA_2STAGE computes the solution to system of linear equations A * X = B for SY matrices | |
| subroutine | csytf2 (uplo, n, a, lda, ipiv, info) |
| CSYTF2 computes the factorization of a real symmetric indefinite matrix, using the diagonal pivoting method (unblocked algorithm). | |
| subroutine | csytf2_rk (uplo, n, a, lda, e, ipiv, info) |
| CSYTF2_RK computes the factorization of a complex symmetric indefinite matrix using the bounded Bunch-Kaufman (rook) diagonal pivoting method (BLAS2 unblocked algorithm). | |
| subroutine | csytf2_rook (uplo, n, a, lda, ipiv, info) |
| CSYTF2_ROOK computes the factorization of a complex symmetric indefinite matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method (unblocked algorithm). | |
| subroutine | csytrf (uplo, n, a, lda, ipiv, work, lwork, info) |
| CSYTRF | |
| subroutine | csytrf_aa (uplo, n, a, lda, ipiv, work, lwork, info) |
| CSYTRF_AA | |
| subroutine | csytrf_aa_2stage (uplo, n, a, lda, tb, ltb, ipiv, ipiv2, work, lwork, info) |
| CSYTRF_AA_2STAGE | |
| subroutine | csytrf_rk (uplo, n, a, lda, e, ipiv, work, lwork, info) |
| CSYTRF_RK computes the factorization of a complex symmetric indefinite matrix using the bounded Bunch-Kaufman (rook) diagonal pivoting method (BLAS3 blocked algorithm). | |
| subroutine | csytrf_rook (uplo, n, a, lda, ipiv, work, lwork, info) |
| CSYTRF_ROOK | |
| subroutine | csytri (uplo, n, a, lda, ipiv, work, info) |
| CSYTRI | |
| subroutine | csytri2 (uplo, n, a, lda, ipiv, work, lwork, info) |
| CSYTRI2 | |
| subroutine | csytri2x (uplo, n, a, lda, ipiv, work, nb, info) |
| CSYTRI2X | |
| subroutine | csytri_3 (uplo, n, a, lda, e, ipiv, work, lwork, info) |
| CSYTRI_3 | |
| subroutine | csytri_3x (uplo, n, a, lda, e, ipiv, work, nb, info) |
| CSYTRI_3X | |
| subroutine | csytri_rook (uplo, n, a, lda, ipiv, work, info) |
| CSYTRI_ROOK | |
| subroutine | csytrs (uplo, n, nrhs, a, lda, ipiv, b, ldb, info) |
| CSYTRS | |
| subroutine | csytrs2 (uplo, n, nrhs, a, lda, ipiv, b, ldb, work, info) |
| CSYTRS2 | |
| subroutine | csytrs_3 (uplo, n, nrhs, a, lda, e, ipiv, b, ldb, info) |
| CSYTRS_3 | |
| subroutine | csytrs_aa (uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info) |
| CSYTRS_AA | |
| subroutine | csytrs_aa_2stage (uplo, n, nrhs, a, lda, tb, ltb, ipiv, ipiv2, b, ldb, info) |
| CSYTRS_AA_2STAGE | |
| subroutine | csytrs_rook (uplo, n, nrhs, a, lda, ipiv, b, ldb, info) |
| CSYTRS_ROOK | |
| subroutine | ctgsyl (trans, ijob, m, n, a, lda, b, ldb, c, ldc, d, ldd, e, lde, f, ldf, scale, dif, work, lwork, iwork, info) |
| CTGSYL | |
| subroutine | ctrsyl (trana, tranb, isgn, m, n, a, lda, b, ldb, c, ldc, scale, info) |
| CTRSYL | |
This is the group of complex computational functions for SY matrices
| subroutine chesv_aa_2stage | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | tb, | ||
| integer | ltb, | ||
| integer, dimension( * ) | ipiv, | ||
| integer, dimension( * ) | ipiv2, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
CHESV_AA_2STAGE computes the solution to system of linear equations A * X = B for HE matrices
Download CHESV_AA_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> CHESV_AA_2STAGE computes the solution to a complex system of !> linear equations !> A * X = B, !> where A is an N-by-N Hermitian matrix and X and B are N-by-NRHS !> matrices. !> !> Aasen's 2-stage algorithm is used to factor A as !> A = U**H * T * U, if UPLO = 'U', or !> A = L * T * L**H, if UPLO = 'L', !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, and T is Hermitian and band. The matrix T is !> then LU-factored with partial pivoting. The factored form of A !> is then used to solve the system of equations A * X = B. !> !> This is the blocked version of the algorithm, calling Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the hermitian matrix A. If UPLO = 'U', the leading !> N-by-N upper triangular part of A contains the upper !> triangular part of the matrix A, and the strictly lower !> triangular part of A is not referenced. If UPLO = 'L', the !> leading N-by-N lower triangular part of A contains the lower !> triangular part of the matrix A, and the strictly upper !> triangular part of A is not referenced. !> !> On exit, L is stored below (or above) the subdiaonal blocks, !> when UPLO is 'L' (or 'U'). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | TB | !> TB is COMPLEX array, dimension (LTB) !> On exit, details of the LU factorization of the band matrix. !> |
| [in] | LTB | !> LTB is INTEGER !> The size of the array TB. LTB >= 4*N, internally !> used to select NB such that LTB >= (3*NB+1)*N. !> !> If LTB = -1, then a workspace query is assumed; the !> routine only calculates the optimal size of LTB, !> returns this value as the first entry of TB, and !> no error message related to LTB is issued by XERBLA. !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> On exit, it contains the details of the interchanges, i.e., !> the row and column k of A were interchanged with the !> row and column IPIV(k). !> |
| [out] | IPIV2 | !> IPIV2 is INTEGER array, dimension (N) !> On exit, it contains the details of the interchanges, i.e., !> the row and column k of T were interchanged with the !> row and column IPIV(k). !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | WORK | !> WORK is COMPLEX workspace of size LWORK !> |
| [in] | LWORK | !> LWORK is INTEGER !> The size of WORK. LWORK >= N, internally used to select NB !> such that LWORK >= N*NB. !> !> If LWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal size of the WORK array, !> returns this value as the first entry of the WORK array, and !> no error message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: if INFO = i, band LU factorization failed on i-th column !> |
Definition at line 183 of file chesv_aa_2stage.f.
| subroutine chetrf_aa_2stage | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | tb, | ||
| integer | ltb, | ||
| integer, dimension( * ) | ipiv, | ||
| integer, dimension( * ) | ipiv2, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
CHETRF_AA_2STAGE
Download CHETRF_AA_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> CHETRF_AA_2STAGE computes the factorization of a real hermitian matrix A !> using the Aasen's algorithm. The form of the factorization is !> !> A = U**T*T*U or A = L*T*L**T !> !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, and T is a hermitian band matrix with the !> bandwidth of NB (NB is internally selected and stored in TB( 1 ), and T is !> LU factorized with partial pivoting). !> !> This is the blocked version of the algorithm, calling Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the hermitian matrix A. If UPLO = 'U', the leading !> N-by-N upper triangular part of A contains the upper !> triangular part of the matrix A, and the strictly lower !> triangular part of A is not referenced. If UPLO = 'L', the !> leading N-by-N lower triangular part of A contains the lower !> triangular part of the matrix A, and the strictly upper !> triangular part of A is not referenced. !> !> On exit, L is stored below (or above) the subdiaonal blocks, !> when UPLO is 'L' (or 'U'). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | TB | !> TB is COMPLEX array, dimension (LTB) !> On exit, details of the LU factorization of the band matrix. !> |
| [in] | LTB | !> LTB is INTEGER !> The size of the array TB. LTB >= 4*N, internally !> used to select NB such that LTB >= (3*NB+1)*N. !> !> If LTB = -1, then a workspace query is assumed; the !> routine only calculates the optimal size of LTB, !> returns this value as the first entry of TB, and !> no error message related to LTB is issued by XERBLA. !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> On exit, it contains the details of the interchanges, i.e., !> the row and column k of A were interchanged with the !> row and column IPIV(k). !> |
| [out] | IPIV2 | !> IPIV2 is INTEGER array, dimension (N) !> On exit, it contains the details of the interchanges, i.e., !> the row and column k of T were interchanged with the !> row and column IPIV(k). !> |
| [out] | WORK | !> WORK is COMPLEX workspace of size LWORK !> |
| [in] | LWORK | !> LWORK is INTEGER !> The size of WORK. LWORK >= N, internally used to select NB !> such that LWORK >= N*NB. !> !> If LWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal size of the WORK array, !> returns this value as the first entry of the WORK array, and !> no error message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: if INFO = i, band LU factorization failed on i-th column !> |
Definition at line 158 of file chetrf_aa_2stage.f.
| subroutine chetrs_aa_2stage | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | tb, | ||
| integer | ltb, | ||
| integer, dimension( * ) | ipiv, | ||
| integer, dimension( * ) | ipiv2, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | info ) |
CHETRS_AA_2STAGE
Download CHETRS_AA_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> CHETRS_AA_2STAGE solves a system of linear equations A*X = B with a real !> hermitian matrix A using the factorization A = U**T*T*U or !> A = L*T*L**T computed by CHETRF_AA_2STAGE. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U**T*T*U; !> = 'L': Lower triangular, form is A = L*T*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> Details of factors computed by CHETRF_AA_2STAGE. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | TB | !> TB is COMPLEX array, dimension (LTB) !> Details of factors computed by CHETRF_AA_2STAGE. !> |
| [in] | LTB | !> LTB is INTEGER !> The size of the array TB. LTB >= 4*N. !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges as computed by !> CHETRF_AA_2STAGE. !> |
| [in] | IPIV2 | !> IPIV2 is INTEGER array, dimension (N) !> Details of the interchanges as computed by !> CHETRF_AA_2STAGE. !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 139 of file chetrs_aa_2stage.f.
| subroutine cla_syamv | ( | integer | uplo, |
| integer | n, | ||
| real | alpha, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | x, | ||
| integer | incx, | ||
| real | beta, | ||
| real, dimension( * ) | y, | ||
| integer | incy ) |
CLA_SYAMV computes a matrix-vector product using a symmetric indefinite matrix to calculate error bounds.
Download CLA_SYAMV + dependencies [TGZ] [ZIP] [TXT]
!> !> CLA_SYAMV performs the matrix-vector operation !> !> y := alpha*abs(A)*abs(x) + beta*abs(y), !> !> where alpha and beta are scalars, x and y are vectors and A is an !> n by n symmetric matrix. !> !> This function is primarily used in calculating error bounds. !> To protect against underflow during evaluation, components in !> the resulting vector are perturbed away from zero by (N+1) !> times the underflow threshold. To prevent unnecessarily large !> errors for block-structure embedded in general matrices, !> zero components are not perturbed. A zero !> entry is considered if all multiplications involved !> in computing that entry have at least one zero multiplicand. !>
| [in] | UPLO | !> UPLO is INTEGER !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = BLAS_UPPER Only the upper triangular part of A !> is to be referenced. !> !> UPLO = BLAS_LOWER Only the lower triangular part of A !> is to be referenced. !> !> Unchanged on exit. !> |
| [in] | N | !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> Unchanged on exit. !> |
| [in] | ALPHA | !> ALPHA is REAL . !> On entry, ALPHA specifies the scalar alpha. !> Unchanged on exit. !> |
| [in] | A | !> A is COMPLEX array, dimension ( LDA, n ). !> Before entry, the leading m by n part of the array A must !> contain the matrix of coefficients. !> Unchanged on exit. !> |
| [in] | LDA | !> LDA is 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. !> |
| [in] | X | !> X is COMPLEX array, dimension !> ( 1 + ( n - 1 )*abs( INCX ) ) !> Before entry, the incremented array X must contain the !> vector x. !> Unchanged on exit. !> |
| [in] | INCX | !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> Unchanged on exit. !> |
| [in] | BETA | !> BETA is REAL . !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> Unchanged on exit. !> |
| [in,out] | Y | !> Y is REAL array, dimension !> ( 1 + ( n - 1 )*abs( INCY ) ) !> Before entry with BETA non-zero, the incremented array Y !> must contain the vector y. On exit, Y is overwritten by the !> updated vector y. !> |
| [in] | INCY | !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> Unchanged on exit. !> |
!> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> -- Modified for the absolute-value product, April 2006 !> Jason Riedy, UC Berkeley !>
Definition at line 177 of file cla_syamv.f.
| real function cla_syrcond_c | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( * ) | c, | ||
| logical | capply, | ||
| integer | info, | ||
| complex, dimension( * ) | work, | ||
| real, dimension( * ) | rwork ) |
CLA_SYRCOND_C computes the infinity norm condition number of op(A)*inv(diag(c)) for symmetric indefinite matrices.
Download CLA_SYRCOND_C + dependencies [TGZ] [ZIP] [TXT]
!> !> CLA_SYRCOND_C Computes the infinity norm condition number of !> op(A) * inv(diag(C)) where C is a REAL vector. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The number of linear equations, i.e., the order of the !> matrix A. N >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the N-by-N matrix A !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is COMPLEX array, dimension (LDAF,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by CSYTRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF. !> |
| [in] | C | !> C is REAL array, dimension (N) !> The vector C in the formula op(A) * inv(diag(C)). !> |
| [in] | CAPPLY | !> CAPPLY is LOGICAL !> If .TRUE. then access the vector C in the formula above. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: Successful exit. !> i > 0: The ith argument is invalid. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (2*N). !> Workspace. !> |
| [out] | RWORK | !> RWORK is REAL array, dimension (N). !> Workspace. !> |
Definition at line 136 of file cla_syrcond_c.f.
| real function cla_syrcond_x | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( * ) | x, | ||
| integer | info, | ||
| complex, dimension( * ) | work, | ||
| real, dimension( * ) | rwork ) |
CLA_SYRCOND_X computes the infinity norm condition number of op(A)*diag(x) for symmetric indefinite matrices.
Download CLA_SYRCOND_X + dependencies [TGZ] [ZIP] [TXT]
!> !> CLA_SYRCOND_X Computes the infinity norm condition number of !> op(A) * diag(X) where X is a COMPLEX vector. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The number of linear equations, i.e., the order of the !> matrix A. N >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the N-by-N matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is COMPLEX array, dimension (LDAF,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by CSYTRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF. !> |
| [in] | X | !> X is COMPLEX array, dimension (N) !> The vector X in the formula op(A) * diag(X). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: Successful exit. !> i > 0: The ith argument is invalid. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (2*N). !> Workspace. !> |
| [out] | RWORK | !> RWORK is REAL array, dimension (N). !> Workspace. !> |
Definition at line 129 of file cla_syrcond_x.f.
| subroutine cla_syrfsx_extended | ( | integer | prec_type, |
| character | uplo, | ||
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| logical | colequ, | ||
| real, dimension( * ) | c, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( ldy, * ) | y, | ||
| integer | ldy, | ||
| real, dimension( * ) | berr_out, | ||
| integer | n_norms, | ||
| real, dimension( nrhs, * ) | err_bnds_norm, | ||
| real, dimension( nrhs, * ) | err_bnds_comp, | ||
| complex, dimension( * ) | res, | ||
| real, dimension( * ) | ayb, | ||
| complex, dimension( * ) | dy, | ||
| complex, dimension( * ) | y_tail, | ||
| real | rcond, | ||
| integer | ithresh, | ||
| real | rthresh, | ||
| real | dz_ub, | ||
| logical | ignore_cwise, | ||
| integer | info ) |
CLA_SYRFSX_EXTENDED improves the computed solution to a system of linear equations for symmetric indefinite matrices by performing extra-precise iterative refinement and provides error bounds and backward error estimates for the solution.
Download CLA_SYRFSX_EXTENDED + dependencies [TGZ] [ZIP] [TXT]
!> !> CLA_SYRFSX_EXTENDED improves the computed solution to a system of !> linear equations by performing extra-precise iterative refinement !> and provides error bounds and backward error estimates for the solution. !> This subroutine is called by CSYRFSX to perform iterative refinement. !> In addition to normwise error bound, the code provides maximum !> componentwise error bound if possible. See comments for ERR_BNDS_NORM !> and ERR_BNDS_COMP for details of the error bounds. Note that this !> subroutine is only responsible for setting the second fields of !> ERR_BNDS_NORM and ERR_BNDS_COMP. !>
| [in] | PREC_TYPE | !> PREC_TYPE is INTEGER !> Specifies the intermediate precision to be used in refinement. !> The value is defined by ILAPREC(P) where P is a CHARACTER and P !> = 'S': Single !> = 'D': Double !> = 'I': Indigenous !> = 'X' or 'E': Extra !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The number of linear equations, i.e., the order of the !> matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right-hand-sides, i.e., the number of columns of the !> matrix B. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the N-by-N matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is COMPLEX array, dimension (LDAF,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by CSYTRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF. !> |
| [in] | COLEQU | !> COLEQU is LOGICAL !> If .TRUE. then column equilibration was done to A before calling !> this routine. This is needed to compute the solution and error !> bounds correctly. !> |
| [in] | C | !> C is REAL array, dimension (N) !> The column scale factors for A. If COLEQU = .FALSE., C !> is not accessed. If C is input, each element of C should be a power !> of the radix to ensure a reliable solution and error estimates. !> Scaling by powers of the radix does not cause rounding errors unless !> the result underflows or overflows. Rounding errors during scaling !> lead to refining with a matrix that is not equivalent to the !> input matrix, producing error estimates that may not be !> reliable. !> |
| [in] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> The right-hand-side matrix B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [in,out] | Y | !> Y is COMPLEX array, dimension (LDY,NRHS) !> On entry, the solution matrix X, as computed by CSYTRS. !> On exit, the improved solution matrix Y. !> |
| [in] | LDY | !> LDY is INTEGER !> The leading dimension of the array Y. LDY >= max(1,N). !> |
| [out] | BERR_OUT | !> BERR_OUT is REAL array, dimension (NRHS) !> On exit, BERR_OUT(j) contains the componentwise relative backward !> error for right-hand-side j from the formula !> max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) ) !> where abs(Z) is the componentwise absolute value of the matrix !> or vector Z. This is computed by CLA_LIN_BERR. !> |
| [in] | N_NORMS | !> N_NORMS is INTEGER !> Determines which error bounds to return (see ERR_BNDS_NORM !> and ERR_BNDS_COMP). !> If N_NORMS >= 1 return normwise error bounds. !> If N_NORMS >= 2 return componentwise error bounds. !> |
| [in,out] | ERR_BNDS_NORM | !> ERR_BNDS_NORM is REAL array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand side, this array contains information about
!> various error bounds and condition numbers corresponding to the
!> normwise relative error, which is defined as follows:
!>
!> Normwise relative error in the ith solution vector:
!> max_j (abs(XTRUE(j,i) - X(j,i)))
!> ------------------------------
!> max_j abs(X(j,i))
!>
!> The array is indexed by the type of error information as described
!> below. There currently are up to three pieces of information
!> returned.
!>
!> The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
!> right-hand side.
!>
!> The second index in ERR_BNDS_NORM(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * slamch('Epsilon').
!>
!> err = 2 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.
!>
!> err = 3 Reciprocal condition number: Estimated normwise
!> reciprocal condition number. Compared with the threshold
!> sqrt(n) * slamch('Epsilon') to determine if the error
!> estimate is . These reciprocal condition
!> numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf)) for some
!> 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.
!>
!> This subroutine is only responsible for setting the second field
!> above.
!> See Lapack Working Note 165 for further details and extra
!> cautions.
!> |
| [in,out] | ERR_BNDS_COMP | !> ERR_BNDS_COMP is REAL array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand side, this array contains information about
!> various error bounds and condition numbers corresponding to the
!> componentwise relative error, which is defined as follows:
!>
!> Componentwise relative error in the ith solution vector:
!> abs(XTRUE(j,i) - X(j,i))
!> max_j ----------------------
!> abs(X(j,i))
!>
!> The array is indexed by the right-hand side i (on which the
!> componentwise relative error depends), and the type of error
!> information as described below. There currently are up to three
!> pieces of information returned for each right-hand side. If
!> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
!> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS < 3, then at most
!> the first (:,N_ERR_BNDS) entries are returned.
!>
!> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
!> right-hand side.
!>
!> The second index in ERR_BNDS_COMP(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * slamch('Epsilon').
!>
!> err = 2 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.
!>
!> err = 3 Reciprocal condition number: Estimated componentwise
!> reciprocal condition number. Compared with the threshold
!> sqrt(n) * slamch('Epsilon') to determine if the error
!> estimate is . These reciprocal condition
!> numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf)) for some
!> appropriately scaled matrix Z.
!> Let Z = S*(A*diag(x)), where x is the solution for the
!> 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.
!>
!> This subroutine is only responsible for setting the second field
!> above.
!> See Lapack Working Note 165 for further details and extra
!> cautions.
!> |
| [in] | RES | !> RES is COMPLEX array, dimension (N) !> Workspace to hold the intermediate residual. !> |
| [in] | AYB | !> AYB is REAL array, dimension (N) !> Workspace. !> |
| [in] | DY | !> DY is COMPLEX array, dimension (N) !> Workspace to hold the intermediate solution. !> |
| [in] | Y_TAIL | !> Y_TAIL is COMPLEX array, dimension (N) !> Workspace to hold the trailing bits of the intermediate solution. !> |
| [in] | RCOND | !> RCOND is REAL !> Reciprocal scaled condition number. This is an estimate of the !> reciprocal Skeel condition number of the matrix A after !> equilibration (if done). If this is less than the machine !> precision (in particular, if it is zero), the matrix is singular !> to working precision. Note that the error may still be small even !> if this number is very small and the matrix appears ill- !> conditioned. !> |
| [in] | ITHRESH | !> ITHRESH is INTEGER !> The maximum number of residual computations allowed for !> refinement. The default is 10. For 'aggressive' set to 100 to !> permit convergence using approximate factorizations or !> factorizations other than LU. If the factorization uses a !> technique other than Gaussian elimination, the guarantees in !> ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy. !> |
| [in] | RTHRESH | !> RTHRESH is REAL
!> Determines when to stop refinement if the error estimate stops
!> decreasing. Refinement will stop when the next solution no longer
!> satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
!> the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
!> default value is 0.5. For 'aggressive' set to 0.9 to permit
!> convergence on extremely ill-conditioned matrices. See LAWN 165
!> for more details.
!> |
| [in] | DZ_UB | !> DZ_UB is REAL !> Determines when to start considering componentwise convergence. !> Componentwise convergence is only considered after each component !> of the solution Y is stable, which we define as the relative !> change in each component being less than DZ_UB. The default value !> is 0.25, requiring the first bit to be stable. See LAWN 165 for !> more details. !> |
| [in] | IGNORE_CWISE | !> IGNORE_CWISE is LOGICAL !> If .TRUE. then ignore componentwise convergence. Default value !> is .FALSE.. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: Successful exit. !> < 0: if INFO = -i, the ith argument to CLA_SYRFSX_EXTENDED had an illegal !> value !> |
Definition at line 388 of file cla_syrfsx_extended.f.
| real function cla_syrpvgrw | ( | character*1 | uplo, |
| integer | n, | ||
| integer | info, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( * ) | work ) |
CLA_SYRPVGRW computes the reciprocal pivot growth factor norm(A)/norm(U) for a symmetric indefinite matrix.
Download CLA_SYRPVGRW + dependencies [TGZ] [ZIP] [TXT]
!> !> !> CLA_SYRPVGRW computes the reciprocal pivot growth factor !> norm(A)/norm(U). The norm is used. If this is !> much less than 1, the stability of the LU factorization of the !> (equilibrated) matrix A could be poor. This also means that the !> solution X, estimated condition numbers, and error bounds could be !> unreliable. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The number of linear equations, i.e., the order of the !> matrix A. N >= 0. !> |
| [in] | INFO | !> INFO is INTEGER !> The value of INFO returned from CSYTRF, .i.e., the pivot in !> column INFO is exactly 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the N-by-N matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is COMPLEX array, dimension (LDAF,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by CSYTRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF. !> |
| [out] | WORK | !> WORK is REAL array, dimension (2*N) !> |
Definition at line 121 of file cla_syrpvgrw.f.
| subroutine clahef_aa | ( | character | uplo, |
| integer | j1, | ||
| integer | m, | ||
| integer | nb, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( ldh, * ) | h, | ||
| integer | ldh, | ||
| complex, dimension( * ) | work ) |
CLAHEF_AA
Download CLAHEF_AA + dependencies [TGZ] [ZIP] [TXT]
!> !> CLAHEF_AA factorizes a panel of a complex hermitian matrix A using !> the Aasen's algorithm. The panel consists of a set of NB rows of A !> when UPLO is U, or a set of NB columns when UPLO is L. !> !> In order to factorize the panel, the Aasen's algorithm requires the !> last row, or column, of the previous panel. The first row, or column, !> of A is set to be the first row, or column, of an identity matrix, !> which is used to factorize the first panel. !> !> The resulting J-th row of U, or J-th column of L, is stored in the !> (J-1)-th row, or column, of A (without the unit diagonals), while !> the diagonal and subdiagonal of A are overwritten by those of T. !> !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | J1 | !> J1 is INTEGER !> The location of the first row, or column, of the panel !> within the submatrix of A, passed to this routine, e.g., !> when called by CHETRF_AA, for the first panel, J1 is 1, !> while for the remaining panels, J1 is 2. !> |
| [in] | M | !> M is INTEGER !> The dimension of the submatrix. M >= 0. !> |
| [in] | NB | !> NB is INTEGER !> The dimension of the panel to be facotorized. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,M) for !> the first panel, while dimension (LDA,M+1) for the !> remaining panels. !> !> On entry, A contains the last row, or column, of !> the previous panel, and the trailing submatrix of A !> to be factorized, except for the first panel, only !> the panel is passed. !> !> On exit, the leading panel is factorized. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the row and column interchanges, !> the row and column k were interchanged with the row and !> column IPIV(k). !> |
| [in,out] | H | !> H is COMPLEX workspace, dimension (LDH,NB). !> !> |
| [in] | LDH | !> LDH is INTEGER !> The leading dimension of the workspace H. LDH >= max(1,M). !> |
| [out] | WORK | !> WORK is COMPLEX workspace, dimension (M). !> |
Definition at line 142 of file clahef_aa.f.
| subroutine clasyf | ( | character | uplo, |
| integer | n, | ||
| integer | nb, | ||
| integer | kb, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( ldw, * ) | w, | ||
| integer | ldw, | ||
| integer | info ) |
CLASYF computes a partial factorization of a complex symmetric matrix using the Bunch-Kaufman diagonal pivoting method.
Download CLASYF + dependencies [TGZ] [ZIP] [TXT]
!> !> CLASYF computes a partial factorization of a complex symmetric matrix !> A using the Bunch-Kaufman diagonal pivoting method. The partial !> factorization has the form: !> !> A = ( I U12 ) ( A11 0 ) ( I 0 ) if UPLO = 'U', or: !> ( 0 U22 ) ( 0 D ) ( U12**T U22**T ) !> !> A = ( L11 0 ) ( D 0 ) ( L11**T L21**T ) if UPLO = 'L' !> ( L21 I ) ( 0 A22 ) ( 0 I ) !> !> where the order of D is at most NB. The actual order is returned in !> the argument KB, and is either NB or NB-1, or N if N <= NB. !> Note that U**T denotes the transpose of U. !> !> CLASYF is an auxiliary routine called by CSYTRF. It uses blocked code !> (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or !> A22 (if UPLO = 'L'). !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the upper or lower triangular part of the !> symmetric matrix A is stored: !> = 'U': Upper triangular !> = 'L': Lower triangular !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NB | !> NB is INTEGER !> The maximum number of columns of the matrix A that should be !> factored. NB should be at least 2 to allow for 2-by-2 pivot !> blocks. !> |
| [out] | KB | !> KB is INTEGER !> The number of columns of A that were actually factored. !> KB is either NB-1 or NB, or N if N <= NB. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the symmetric matrix A. If UPLO = 'U', the leading !> n-by-n upper triangular part of A contains the upper !> triangular part of the matrix A, and the strictly lower !> triangular part of A is not referenced. If UPLO = 'L', the !> leading n-by-n lower triangular part of A contains the lower !> triangular part of the matrix A, and the strictly upper !> triangular part of A is not referenced. !> On exit, A contains details of the partial factorization. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D. !> !> If UPLO = 'U': !> Only the last KB elements of IPIV are set. !> !> If IPIV(k) > 0, then rows and columns k and IPIV(k) were !> interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) = IPIV(k-1) < 0, then rows and columns !> k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) !> is a 2-by-2 diagonal block. !> !> If UPLO = 'L': !> Only the first KB elements of IPIV are set. !> !> If IPIV(k) > 0, then rows and columns k and IPIV(k) were !> interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) = 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. !> |
| [out] | W | !> W is COMPLEX array, dimension (LDW,NB) !> |
| [in] | LDW | !> LDW is INTEGER !> The leading dimension of the array W. LDW >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> > 0: if INFO = k, D(k,k) is exactly zero. The factorization !> has been completed, but the block diagonal matrix D is !> exactly singular. !> |
!> !> November 2013, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !>
Definition at line 176 of file clasyf.f.
| subroutine clasyf_aa | ( | character | uplo, |
| integer | j1, | ||
| integer | m, | ||
| integer | nb, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( ldh, * ) | h, | ||
| integer | ldh, | ||
| complex, dimension( * ) | work ) |
CLASYF_AA
Download CLASYF_AA + dependencies [TGZ] [ZIP] [TXT]
!> !> DLATRF_AA factorizes a panel of a complex symmetric matrix A using !> the Aasen's algorithm. The panel consists of a set of NB rows of A !> when UPLO is U, or a set of NB columns when UPLO is L. !> !> In order to factorize the panel, the Aasen's algorithm requires the !> last row, or column, of the previous panel. The first row, or column, !> of A is set to be the first row, or column, of an identity matrix, !> which is used to factorize the first panel. !> !> The resulting J-th row of U, or J-th column of L, is stored in the !> (J-1)-th row, or column, of A (without the unit diagonals), while !> the diagonal and subdiagonal of A are overwritten by those of T. !> !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | J1 | !> J1 is INTEGER !> The location of the first row, or column, of the panel !> within the submatrix of A, passed to this routine, e.g., !> when called by CSYTRF_AA, for the first panel, J1 is 1, !> while for the remaining panels, J1 is 2. !> |
| [in] | M | !> M is INTEGER !> The dimension of the submatrix. M >= 0. !> |
| [in] | NB | !> NB is INTEGER !> The dimension of the panel to be facotorized. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,M) for !> the first panel, while dimension (LDA,M+1) for the !> remaining panels. !> !> On entry, A contains the last row, or column, of !> the previous panel, and the trailing submatrix of A !> to be factorized, except for the first panel, only !> the panel is passed. !> !> On exit, the leading panel is factorized. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (M) !> Details of the row and column interchanges, !> the row and column k were interchanged with the row and !> column IPIV(k). !> |
| [in,out] | H | !> H is COMPLEX workspace, dimension (LDH,NB). !> !> |
| [in] | LDH | !> LDH is INTEGER !> The leading dimension of the workspace H. LDH >= max(1,M). !> |
| [out] | WORK | !> WORK is COMPLEX workspace, dimension (M). !> |
Definition at line 142 of file clasyf_aa.f.
| subroutine clasyf_rk | ( | character | uplo, |
| integer | n, | ||
| integer | nb, | ||
| integer | kb, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | e, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( ldw, * ) | w, | ||
| integer | ldw, | ||
| integer | info ) |
CLASYF_RK computes a partial factorization of a complex symmetric indefinite matrix using bounded Bunch-Kaufman (rook) diagonal pivoting method.
Download CLASYF_RK + dependencies [TGZ] [ZIP] [TXT]
!> CLASYF_RK computes a partial factorization of a complex symmetric !> matrix A using the bounded Bunch-Kaufman (rook) diagonal !> pivoting method. The partial factorization has the form: !> !> A = ( I U12 ) ( A11 0 ) ( I 0 ) if UPLO = 'U', or: !> ( 0 U22 ) ( 0 D ) ( U12**T U22**T ) !> !> A = ( L11 0 ) ( D 0 ) ( L11**T L21**T ) if UPLO = 'L', !> ( L21 I ) ( 0 A22 ) ( 0 I ) !> !> where the order of D is at most NB. The actual order is returned in !> the argument KB, and is either NB or NB-1, or N if N <= NB. !> !> CLASYF_RK is an auxiliary routine called by CSYTRF_RK. It uses !> blocked code (calling Level 3 BLAS) to update the submatrix !> A11 (if UPLO = 'U') or A22 (if UPLO = 'L'). !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the upper or lower triangular part of the !> symmetric matrix A is stored: !> = 'U': Upper triangular !> = 'L': Lower triangular !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NB | !> NB is INTEGER !> The maximum number of columns of the matrix A that should be !> factored. NB should be at least 2 to allow for 2-by-2 pivot !> blocks. !> |
| [out] | KB | !> KB is INTEGER !> The number of columns of A that were actually factored. !> KB is either NB-1 or NB, or N if N <= NB. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the symmetric matrix A. !> If UPLO = 'U': the leading N-by-N upper triangular part !> of A contains the upper triangular part of the matrix A, !> and the strictly lower triangular part of A is not !> referenced. !> !> If UPLO = 'L': the leading N-by-N lower triangular part !> of A contains the lower triangular part of the matrix A, !> and the strictly upper triangular part of A is not !> referenced. !> !> On exit, contains: !> a) ONLY diagonal elements of the symmetric block diagonal !> matrix D on the diagonal of A, i.e. D(k,k) = A(k,k); !> (superdiagonal (or subdiagonal) elements of D !> are stored on exit in array E), and !> b) If UPLO = 'U': factor U in the superdiagonal part of A. !> If UPLO = 'L': factor L in the subdiagonal part of A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | E | !> E is COMPLEX array, dimension (N) !> On exit, contains the superdiagonal (or subdiagonal) !> elements of the symmetric block diagonal matrix D !> with 1-by-1 or 2-by-2 diagonal blocks, where !> If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0; !> If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0. !> !> NOTE: For 1-by-1 diagonal block D(k), where !> 1 <= k <= N, the element E(k) is set to 0 in both !> UPLO = 'U' or UPLO = 'L' cases. !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> IPIV describes the permutation matrix P in the factorization !> of matrix A as follows. The absolute value of IPIV(k) !> represents the index of row and column that were !> interchanged with the k-th row and column. The value of UPLO !> describes the order in which the interchanges were applied. !> Also, the sign of IPIV represents the block structure of !> the symmetric block diagonal matrix D with 1-by-1 or 2-by-2 !> diagonal blocks which correspond to 1 or 2 interchanges !> at each factorization step. !> !> If UPLO = 'U', !> ( in factorization order, k decreases from N to 1 ): !> a) A single positive entry IPIV(k) > 0 means: !> D(k,k) is a 1-by-1 diagonal block. !> If IPIV(k) != k, rows and columns k and IPIV(k) were !> interchanged in the submatrix A(1:N,N-KB+1:N); !> If IPIV(k) = k, no interchange occurred. !> !> !> b) A pair of consecutive negative entries !> IPIV(k) < 0 and IPIV(k-1) < 0 means: !> D(k-1:k,k-1:k) is a 2-by-2 diagonal block. !> (NOTE: negative entries in IPIV appear ONLY in pairs). !> 1) If -IPIV(k) != k, rows and columns !> k and -IPIV(k) were interchanged !> in the matrix A(1:N,N-KB+1:N). !> If -IPIV(k) = k, no interchange occurred. !> 2) If -IPIV(k-1) != k-1, rows and columns !> k-1 and -IPIV(k-1) were interchanged !> in the submatrix A(1:N,N-KB+1:N). !> If -IPIV(k-1) = k-1, no interchange occurred. !> !> c) In both cases a) and b) is always ABS( IPIV(k) ) <= k. !> !> d) NOTE: Any entry IPIV(k) is always NONZERO on output. !> !> If UPLO = 'L', !> ( in factorization order, k increases from 1 to N ): !> a) A single positive entry IPIV(k) > 0 means: !> D(k,k) is a 1-by-1 diagonal block. !> If IPIV(k) != k, rows and columns k and IPIV(k) were !> interchanged in the submatrix A(1:N,1:KB). !> If IPIV(k) = k, no interchange occurred. !> !> b) A pair of consecutive negative entries !> IPIV(k) < 0 and IPIV(k+1) < 0 means: !> D(k:k+1,k:k+1) is a 2-by-2 diagonal block. !> (NOTE: negative entries in IPIV appear ONLY in pairs). !> 1) If -IPIV(k) != k, rows and columns !> k and -IPIV(k) were interchanged !> in the submatrix A(1:N,1:KB). !> If -IPIV(k) = k, no interchange occurred. !> 2) If -IPIV(k+1) != k+1, rows and columns !> k-1 and -IPIV(k-1) were interchanged !> in the submatrix A(1:N,1:KB). !> If -IPIV(k+1) = k+1, no interchange occurred. !> !> c) In both cases a) and b) is always ABS( IPIV(k) ) >= k. !> !> d) NOTE: Any entry IPIV(k) is always NONZERO on output. !> |
| [out] | W | !> W is COMPLEX array, dimension (LDW,NB) !> |
| [in] | LDW | !> LDW is INTEGER !> The leading dimension of the array W. LDW >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> !> < 0: If INFO = -k, the k-th argument had an illegal value !> !> > 0: If INFO = k, the matrix A is singular, because: !> If UPLO = 'U': column k in the upper !> triangular part of A contains all zeros. !> If UPLO = 'L': column k in the lower !> triangular part of A contains all zeros. !> !> Therefore D(k,k) is exactly zero, and superdiagonal !> elements of column k of U (or subdiagonal elements of !> column k of L ) are all zeros. The factorization has !> been completed, but the block diagonal matrix D is !> exactly singular, and division by zero will occur if !> it is used to solve a system of equations. !> !> NOTE: INFO only stores the first occurrence of !> a singularity, any subsequent occurrence of singularity !> is not stored in INFO even though the factorization !> always completes. !> |
!> !> December 2016, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 260 of file clasyf_rk.f.
| subroutine clasyf_rook | ( | character | uplo, |
| integer | n, | ||
| integer | nb, | ||
| integer | kb, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( ldw, * ) | w, | ||
| integer | ldw, | ||
| integer | info ) |
CLASYF_ROOK computes a partial factorization of a complex symmetric matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method.
Download CLASYF_ROOK + dependencies [TGZ] [ZIP] [TXT]
!> !> CLASYF_ROOK computes a partial factorization of a complex symmetric !> matrix A using the bounded Bunch-Kaufman () diagonal !> pivoting method. The partial factorization has the form: !> !> A = ( I U12 ) ( A11 0 ) ( I 0 ) if UPLO = 'U', or: !> ( 0 U22 ) ( 0 D ) ( U12**T U22**T ) !> !> A = ( L11 0 ) ( D 0 ) ( L11**T L21**T ) if UPLO = 'L' !> ( L21 I ) ( 0 A22 ) ( 0 I ) !> !> where the order of D is at most NB. The actual order is returned in !> the argument KB, and is either NB or NB-1, or N if N <= NB. !> !> CLASYF_ROOK is an auxiliary routine called by CSYTRF_ROOK. It uses !> blocked code (calling Level 3 BLAS) to update the submatrix !> A11 (if UPLO = 'U') or A22 (if UPLO = 'L'). !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the upper or lower triangular part of the !> symmetric matrix A is stored: !> = 'U': Upper triangular !> = 'L': Lower triangular !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NB | !> NB is INTEGER !> The maximum number of columns of the matrix A that should be !> factored. NB should be at least 2 to allow for 2-by-2 pivot !> blocks. !> |
| [out] | KB | !> KB is INTEGER !> The number of columns of A that were actually factored. !> KB is either NB-1 or NB, or N if N <= NB. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the symmetric matrix A. If UPLO = 'U', the leading !> n-by-n upper triangular part of A contains the upper !> triangular part of the matrix A, and the strictly lower !> triangular part of A is not referenced. If UPLO = 'L', the !> leading n-by-n lower triangular part of A contains the lower !> triangular part of the matrix A, and the strictly upper !> triangular part of A is not referenced. !> On exit, A contains details of the partial factorization. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D. !> !> If UPLO = 'U': !> Only the last KB elements of IPIV are set. !> !> If IPIV(k) > 0, then rows and columns k and IPIV(k) were !> interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) < 0 and IPIV(k-1) < 0, then rows and !> columns k and -IPIV(k) were interchanged and rows and !> columns k-1 and -IPIV(k-1) were inerchaged, !> D(k-1:k,k-1:k) is a 2-by-2 diagonal block. !> !> If UPLO = 'L': !> Only the first KB elements of IPIV are set. !> !> If IPIV(k) > 0, then rows and columns k and IPIV(k) !> were interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) < 0 and IPIV(k+1) < 0, then rows and !> columns k and -IPIV(k) were interchanged and rows and !> columns k+1 and -IPIV(k+1) were inerchaged, !> D(k:k+1,k:k+1) is a 2-by-2 diagonal block. !> |
| [out] | W | !> W is COMPLEX array, dimension (LDW,NB) !> |
| [in] | LDW | !> LDW is INTEGER !> The leading dimension of the array W. LDW >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> > 0: if INFO = k, D(k,k) is exactly zero. The factorization !> has been completed, but the block diagonal matrix D is !> exactly singular. !> |
!> !> November 2013, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 182 of file clasyf_rook.f.
| subroutine csycon | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real | anorm, | ||
| real | rcond, | ||
| complex, dimension( * ) | work, | ||
| integer | info ) |
CSYCON
Download CSYCON + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYCON estimates the reciprocal of the condition number (in the !> 1-norm) of a complex symmetric matrix A using the factorization !> A = U*D*U**T or A = L*D*L**T computed by CSYTRF. !> !> An estimate is obtained for norm(inv(A)), and the reciprocal of the !> condition number is computed as RCOND = 1 / (ANORM * norm(inv(A))). !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U*D*U**T; !> = 'L': Lower triangular, form is A = L*D*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by CSYTRF. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF. !> |
| [in] | ANORM | !> ANORM is REAL !> The 1-norm of the original matrix A. !> |
| [out] | RCOND | !> RCOND is REAL !> The reciprocal of the condition number of the matrix A, !> computed as RCOND = 1/(ANORM * AINVNM), where AINVNM is an !> estimate of the 1-norm of inv(A) computed in this routine. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 123 of file csycon.f.
| subroutine csycon_3 | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | e, | ||
| integer, dimension( * ) | ipiv, | ||
| real | anorm, | ||
| real | rcond, | ||
| complex, dimension( * ) | work, | ||
| integer | info ) |
CSYCON_3
Download CSYCON_3 + dependencies [TGZ] [ZIP] [TXT]
!> CSYCON_3 estimates the reciprocal of the condition number (in the !> 1-norm) of a complex symmetric matrix A using the factorization !> computed by CSYTRF_RK or CSYTRF_BK: !> !> A = P*U*D*(U**T)*(P**T) or A = P*L*D*(L**T)*(P**T), !> !> where U (or L) is unit upper (or lower) triangular matrix, !> U**T (or L**T) is the transpose of U (or L), P is a permutation !> matrix, P**T is the transpose of P, and D is symmetric and block !> diagonal with 1-by-1 and 2-by-2 diagonal blocks. !> !> An estimate is obtained for norm(inv(A)), and the reciprocal of the !> condition number is computed as RCOND = 1 / (ANORM * norm(inv(A))). !> This routine uses BLAS3 solver CSYTRS_3. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are !> stored as an upper or lower triangular matrix: !> = 'U': Upper triangular, form is A = P*U*D*(U**T)*(P**T); !> = 'L': Lower triangular, form is A = P*L*D*(L**T)*(P**T). !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> Diagonal of the block diagonal matrix D and factors U or L !> as computed by CSYTRF_RK and CSYTRF_BK: !> a) ONLY diagonal elements of the symmetric block diagonal !> matrix D on the diagonal of A, i.e. D(k,k) = A(k,k); !> (superdiagonal (or subdiagonal) elements of D !> should be provided on entry in array E), and !> b) If UPLO = 'U': factor U in the superdiagonal part of A. !> If UPLO = 'L': factor L in the subdiagonal part of A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | E | !> E is COMPLEX array, dimension (N) !> On entry, contains the superdiagonal (or subdiagonal) !> elements of the symmetric block diagonal matrix D !> with 1-by-1 or 2-by-2 diagonal blocks, where !> If UPLO = 'U': E(i) = D(i-1,i),i=2:N, E(1) not referenced; !> If UPLO = 'L': E(i) = D(i+1,i),i=1:N-1, E(N) not referenced. !> !> NOTE: For 1-by-1 diagonal block D(k), where !> 1 <= k <= N, the element E(k) is not referenced in both !> UPLO = 'U' or UPLO = 'L' cases. !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF_RK or CSYTRF_BK. !> |
| [in] | ANORM | !> ANORM is REAL !> The 1-norm of the original matrix A. !> |
| [out] | RCOND | !> RCOND is REAL !> The reciprocal of the condition number of the matrix A, !> computed as RCOND = 1/(ANORM * AINVNM), where AINVNM is an !> estimate of the 1-norm of inv(A) computed in this routine. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> June 2017, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 164 of file csycon_3.f.
| subroutine csycon_rook | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real | anorm, | ||
| real | rcond, | ||
| complex, dimension( * ) | work, | ||
| integer | info ) |
CSYCON_ROOK
Download CSYCON_ROOK + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYCON_ROOK estimates the reciprocal of the condition number (in the !> 1-norm) of a complex symmetric matrix A using the factorization !> A = U*D*U**T or A = L*D*L**T computed by CSYTRF_ROOK. !> !> An estimate is obtained for norm(inv(A)), and the reciprocal of the !> condition number is computed as RCOND = 1 / (ANORM * norm(inv(A))). !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U*D*U**T; !> = 'L': Lower triangular, form is A = L*D*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by CSYTRF_ROOK. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF_ROOK. !> |
| [in] | ANORM | !> ANORM is REAL !> The 1-norm of the original matrix A. !> |
| [out] | RCOND | !> RCOND is REAL !> The reciprocal of the condition number of the matrix A, !> computed as RCOND = 1/(ANORM * AINVNM), where AINVNM is an !> estimate of the 1-norm of inv(A) computed in this routine. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> April 2012, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 137 of file csycon_rook.f.
| subroutine csyconv | ( | character | uplo, |
| character | way, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( * ) | e, | ||
| integer | info ) |
CSYCONV
Download CSYCONV + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYCONV convert A given by TRF into L and D and vice-versa. !> Get Non-diag elements of D (returned in workspace) and !> apply or reverse permutation done in TRF. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U*D*U**T; !> = 'L': Lower triangular, form is A = L*D*L**T. !> |
| [in] | WAY | !> WAY is CHARACTER*1 !> = 'C': Convert !> = 'R': Revert !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by CSYTRF. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF. !> |
| [out] | E | !> E is COMPLEX array, dimension (N) !> E stores the supdiagonal/subdiagonal of the symmetric 1-by-1 !> or 2-by-2 block diagonal matrix D in LDLT. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 113 of file csyconv.f.
| subroutine csyconvf | ( | character | uplo, |
| character | way, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | e, | ||
| integer, dimension( * ) | ipiv, | ||
| integer | info ) |
CSYCONVF
Download CSYCONVF + dependencies [TGZ] [ZIP] [TXT]
!> If parameter WAY = 'C': !> CSYCONVF converts the factorization output format used in !> CSYTRF provided on entry in parameter A into the factorization !> output format used in CSYTRF_RK (or CSYTRF_BK) that is stored !> on exit in parameters A and E. It also converts in place details of !> the intechanges stored in IPIV from the format used in CSYTRF into !> the format used in CSYTRF_RK (or CSYTRF_BK). !> !> If parameter WAY = 'R': !> CSYCONVF performs the conversion in reverse direction, i.e. !> converts the factorization output format used in CSYTRF_RK !> (or CSYTRF_BK) provided on entry in parameters A and E into !> the factorization output format used in CSYTRF that is stored !> on exit in parameter A. It also converts in place details of !> the intechanges stored in IPIV from the format used in CSYTRF_RK !> (or CSYTRF_BK) into the format used in CSYTRF. !> !> CSYCONVF can also convert in Hermitian matrix case, i.e. between !> formats used in CHETRF and CHETRF_RK (or CHETRF_BK). !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are !> stored as an upper or lower triangular matrix A. !> = 'U': Upper triangular !> = 'L': Lower triangular !> |
| [in] | WAY | !> WAY is CHARACTER*1 !> = 'C': Convert !> = 'R': Revert !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> !> 1) If WAY ='C': !> !> On entry, contains factorization details in format used in !> CSYTRF: !> a) all elements of the symmetric block diagonal !> matrix D on the diagonal of A and on superdiagonal !> (or subdiagonal) of A, and !> b) If UPLO = 'U': multipliers used to obtain factor U !> in the superdiagonal part of A. !> If UPLO = 'L': multipliers used to obtain factor L !> in the superdiagonal part of A. !> !> On exit, contains factorization details in format used in !> CSYTRF_RK or CSYTRF_BK: !> a) ONLY diagonal elements of the symmetric block diagonal !> matrix D on the diagonal of A, i.e. D(k,k) = A(k,k); !> (superdiagonal (or subdiagonal) elements of D !> are stored on exit in array E), and !> b) If UPLO = 'U': factor U in the superdiagonal part of A. !> If UPLO = 'L': factor L in the subdiagonal part of A. !> !> 2) If WAY = 'R': !> !> On entry, contains factorization details in format used in !> CSYTRF_RK or CSYTRF_BK: !> a) ONLY diagonal elements of the symmetric block diagonal !> matrix D on the diagonal of A, i.e. D(k,k) = A(k,k); !> (superdiagonal (or subdiagonal) elements of D !> are stored on exit in array E), and !> b) If UPLO = 'U': factor U in the superdiagonal part of A. !> If UPLO = 'L': factor L in the subdiagonal part of A. !> !> On exit, contains factorization details in format used in !> CSYTRF: !> a) all elements of the symmetric block diagonal !> matrix D on the diagonal of A and on superdiagonal !> (or subdiagonal) of A, and !> b) If UPLO = 'U': multipliers used to obtain factor U !> in the superdiagonal part of A. !> If UPLO = 'L': multipliers used to obtain factor L !> in the superdiagonal part of A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in,out] | E | !> E is COMPLEX array, dimension (N) !> !> 1) If WAY ='C': !> !> On entry, just a workspace. !> !> On exit, contains the superdiagonal (or subdiagonal) !> elements of the symmetric block diagonal matrix D !> with 1-by-1 or 2-by-2 diagonal blocks, where !> If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0; !> If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0. !> !> 2) If WAY = 'R': !> !> On entry, contains the superdiagonal (or subdiagonal) !> elements of the symmetric block diagonal matrix D !> with 1-by-1 or 2-by-2 diagonal blocks, where !> If UPLO = 'U': E(i) = D(i-1,i),i=2:N, E(1) not referenced; !> If UPLO = 'L': E(i) = D(i+1,i),i=1:N-1, E(N) not referenced. !> !> On exit, is not changed !> |
| [in,out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> !> 1) If WAY ='C': !> On entry, details of the interchanges and the block !> structure of D in the format used in CSYTRF. !> On exit, details of the interchanges and the block !> structure of D in the format used in CSYTRF_RK !> ( or CSYTRF_BK). !> !> 1) If WAY ='R': !> On entry, details of the interchanges and the block !> structure of D in the format used in CSYTRF_RK !> ( or CSYTRF_BK). !> On exit, details of the interchanges and the block !> structure of D in the format used in CSYTRF. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> November 2017, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !>
Definition at line 208 of file csyconvf.f.
| subroutine csyconvf_rook | ( | character | uplo, |
| character | way, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | e, | ||
| integer, dimension( * ) | ipiv, | ||
| integer | info ) |
CSYCONVF_ROOK
Download CSYCONVF_ROOK + dependencies [TGZ] [ZIP] [TXT]
!> If parameter WAY = 'C': !> CSYCONVF_ROOK converts the factorization output format used in !> CSYTRF_ROOK provided on entry in parameter A into the factorization !> output format used in CSYTRF_RK (or CSYTRF_BK) that is stored !> on exit in parameters A and E. IPIV format for CSYTRF_ROOK and !> CSYTRF_RK (or CSYTRF_BK) is the same and is not converted. !> !> If parameter WAY = 'R': !> CSYCONVF_ROOK performs the conversion in reverse direction, i.e. !> converts the factorization output format used in CSYTRF_RK !> (or CSYTRF_BK) provided on entry in parameters A and E into !> the factorization output format used in CSYTRF_ROOK that is stored !> on exit in parameter A. IPIV format for CSYTRF_ROOK and !> CSYTRF_RK (or CSYTRF_BK) is the same and is not converted. !> !> CSYCONVF_ROOK can also convert in Hermitian matrix case, i.e. between !> formats used in CHETRF_ROOK and CHETRF_RK (or CHETRF_BK). !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are !> stored as an upper or lower triangular matrix A. !> = 'U': Upper triangular !> = 'L': Lower triangular !> |
| [in] | WAY | !> WAY is CHARACTER*1 !> = 'C': Convert !> = 'R': Revert !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> !> 1) If WAY ='C': !> !> On entry, contains factorization details in format used in !> CSYTRF_ROOK: !> a) all elements of the symmetric block diagonal !> matrix D on the diagonal of A and on superdiagonal !> (or subdiagonal) of A, and !> b) If UPLO = 'U': multipliers used to obtain factor U !> in the superdiagonal part of A. !> If UPLO = 'L': multipliers used to obtain factor L !> in the superdiagonal part of A. !> !> On exit, contains factorization details in format used in !> CSYTRF_RK or CSYTRF_BK: !> a) ONLY diagonal elements of the symmetric block diagonal !> matrix D on the diagonal of A, i.e. D(k,k) = A(k,k); !> (superdiagonal (or subdiagonal) elements of D !> are stored on exit in array E), and !> b) If UPLO = 'U': factor U in the superdiagonal part of A. !> If UPLO = 'L': factor L in the subdiagonal part of A. !> !> 2) If WAY = 'R': !> !> On entry, contains factorization details in format used in !> CSYTRF_RK or CSYTRF_BK: !> a) ONLY diagonal elements of the symmetric block diagonal !> matrix D on the diagonal of A, i.e. D(k,k) = A(k,k); !> (superdiagonal (or subdiagonal) elements of D !> are stored on exit in array E), and !> b) If UPLO = 'U': factor U in the superdiagonal part of A. !> If UPLO = 'L': factor L in the subdiagonal part of A. !> !> On exit, contains factorization details in format used in !> CSYTRF_ROOK: !> a) all elements of the symmetric block diagonal !> matrix D on the diagonal of A and on superdiagonal !> (or subdiagonal) of A, and !> b) If UPLO = 'U': multipliers used to obtain factor U !> in the superdiagonal part of A. !> If UPLO = 'L': multipliers used to obtain factor L !> in the superdiagonal part of A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in,out] | E | !> E is COMPLEX array, dimension (N) !> !> 1) If WAY ='C': !> !> On entry, just a workspace. !> !> On exit, contains the superdiagonal (or subdiagonal) !> elements of the symmetric block diagonal matrix D !> with 1-by-1 or 2-by-2 diagonal blocks, where !> If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0; !> If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0. !> !> 2) If WAY = 'R': !> !> On entry, contains the superdiagonal (or subdiagonal) !> elements of the symmetric block diagonal matrix D !> with 1-by-1 or 2-by-2 diagonal blocks, where !> If UPLO = 'U': E(i) = D(i-1,i),i=2:N, E(1) not referenced; !> If UPLO = 'L': E(i) = D(i+1,i),i=1:N-1, E(N) not referenced. !> !> On exit, is not changed !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> On entry, details of the interchanges and the block !> structure of D as determined: !> 1) by CSYTRF_ROOK, if WAY ='C'; !> 2) by CSYTRF_RK (or CSYTRF_BK), if WAY ='R'. !> The IPIV format is the same for all these routines. !> !> On exit, is not changed. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> November 2017, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !>
Definition at line 199 of file csyconvf_rook.f.
| subroutine csyequb | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( * ) | s, | ||
| real | scond, | ||
| real | amax, | ||
| complex, dimension( * ) | work, | ||
| integer | info ) |
CSYEQUB
Download CSYEQUB + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYEQUB computes row and column scalings intended to equilibrate a !> symmetric matrix A (with respect to the Euclidean norm) and reduce !> its condition number. The scale factors S are computed by the BIN !> algorithm (see references) so that the scaled matrix B with elements !> B(i,j) = S(i)*A(i,j)*S(j) has a condition number within a factor N of !> the smallest possible condition number over all possible diagonal !> scalings. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> The N-by-N symmetric matrix whose scaling factors are to be !> computed. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | S | !> S is REAL array, dimension (N) !> If INFO = 0, S contains the scale factors for A. !> |
| [out] | SCOND | !> SCOND is REAL !> If INFO = 0, S contains the ratio of the smallest S(i) to !> the largest S(i). If SCOND >= 0.1 and AMAX is neither too !> large nor too small, it is not worth scaling by S. !> |
| [out] | AMAX | !> AMAX is REAL !> Largest absolute value of any matrix element. If AMAX is !> very close to overflow or very close to underflow, the !> matrix should be scaled. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, the i-th diagonal element is nonpositive. !> |
Definition at line 131 of file csyequb.f.
| subroutine csyrfs | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( ldx, * ) | x, | ||
| integer | ldx, | ||
| real, dimension( * ) | ferr, | ||
| real, dimension( * ) | berr, | ||
| complex, dimension( * ) | work, | ||
| real, dimension( * ) | rwork, | ||
| integer | info ) |
CSYRFS
Download CSYRFS + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYRFS improves the computed solution to a system of linear !> equations when the coefficient matrix is symmetric indefinite, and !> provides error bounds and backward error estimates for the solution. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrices B and X. NRHS >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> The symmetric matrix A. If UPLO = 'U', the leading N-by-N !> upper triangular part of A contains the upper triangular part !> of the matrix A, and the strictly lower triangular part of A !> is not referenced. If UPLO = 'L', the leading N-by-N lower !> triangular part of A contains the lower triangular part of !> the matrix A, and the strictly upper triangular part of A is !> not referenced. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is COMPLEX array, dimension (LDAF,N) !> The factored form of the matrix A. AF 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. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF. !> |
| [in] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> The right hand side matrix B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [in,out] | X | !> X is COMPLEX array, dimension (LDX,NRHS) !> On entry, the solution matrix X, as computed by CSYTRS. !> On exit, the improved solution matrix X. !> |
| [in] | LDX | !> LDX is INTEGER !> The leading dimension of the array X. LDX >= max(1,N). !> |
| [out] | FERR | !> FERR is REAL array, dimension (NRHS) !> The estimated forward error bound for each solution vector !> X(j) (the j-th column of the solution matrix X). !> If XTRUE is the true solution corresponding to X(j), FERR(j) !> is an estimated upper bound for the magnitude of the largest !> element in (X(j) - XTRUE) divided by the magnitude of the !> largest element in X(j). The estimate is as reliable as !> the estimate for RCOND, and is almost always a slight !> overestimate of the true error. !> |
| [out] | BERR | !> BERR is REAL array, dimension (NRHS) !> The componentwise relative backward error of each solution !> vector X(j) (i.e., the smallest relative change in !> any element of A or B that makes X(j) an exact solution). !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (2*N) !> |
| [out] | RWORK | !> RWORK is REAL array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> ITMAX is the maximum number of steps of iterative refinement. !>
Definition at line 190 of file csyrfs.f.
| subroutine csyrfsx | ( | character | uplo, |
| character | equed, | ||
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( * ) | s, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( ldx, * ) | x, | ||
| integer | ldx, | ||
| real | rcond, | ||
| real, dimension( * ) | berr, | ||
| integer | n_err_bnds, | ||
| real, dimension( nrhs, * ) | err_bnds_norm, | ||
| real, dimension( nrhs, * ) | err_bnds_comp, | ||
| integer | nparams, | ||
| real, dimension( * ) | params, | ||
| complex, dimension( * ) | work, | ||
| real, dimension( * ) | rwork, | ||
| integer | info ) |
CSYRFSX
Download CSYRFSX + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYRFSX improves the computed solution to a system of linear !> equations when the coefficient matrix is symmetric indefinite, and !> provides error bounds and backward error estimates for the !> solution. In addition to normwise error bound, the code provides !> maximum componentwise error bound if possible. See comments for !> ERR_BNDS_NORM and ERR_BNDS_COMP for details of the error bounds. !> !> The original system of linear equations may have been equilibrated !> before calling this routine, as described by arguments EQUED and S !> below. In this case, the solution and error bounds returned are !> for the original unequilibrated system. !>
!> Some optional parameters are bundled in the PARAMS array. These !> settings determine how refinement is performed, but often the !> defaults are acceptable. If the defaults are acceptable, users !> can pass NPARAMS = 0 which prevents the source code from accessing !> the PARAMS argument. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | EQUED | !> EQUED is CHARACTER*1 !> Specifies the form of equilibration that was done to A !> before calling this routine. This is needed to compute !> the solution and error bounds correctly. !> = 'N': No equilibration !> = 'Y': Both row and column equilibration, i.e., A has been !> replaced by diag(S) * A * diag(S). !> The right hand side B has been changed accordingly. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrices B and X. NRHS >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> The symmetric matrix A. If UPLO = 'U', the leading N-by-N !> upper triangular part of A contains the upper triangular !> part of the matrix A, and the strictly lower triangular !> part of A is not referenced. If UPLO = 'L', the leading !> N-by-N lower triangular part of A contains the lower !> triangular part of the matrix A, and the strictly upper !> triangular part of A is not referenced. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is COMPLEX array, dimension (LDAF,N) !> The factored form of the matrix A. AF 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. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF. !> |
| [in,out] | S | !> S is REAL array, dimension (N) !> The scale factors for A. If EQUED = 'Y', A is multiplied on !> the left and right by diag(S). S is an input argument if FACT = !> 'F'; otherwise, S is an output argument. If FACT = 'F' and EQUED !> = 'Y', each element of S must be positive. If S is output, each !> element of S is a power of the radix. If S is input, each element !> of S should be a power of the radix to ensure a reliable solution !> and error estimates. Scaling by powers of the radix does not cause !> rounding errors unless the result underflows or overflows. !> Rounding errors during scaling lead to refining with a matrix that !> is not equivalent to the input matrix, producing error estimates !> that may not be reliable. !> |
| [in] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> The right hand side matrix B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [in,out] | X | !> X is COMPLEX array, dimension (LDX,NRHS) !> On entry, the solution matrix X, as computed by CGETRS. !> On exit, the improved solution matrix X. !> |
| [in] | LDX | !> LDX is INTEGER !> The leading dimension of the array X. LDX >= max(1,N). !> |
| [out] | RCOND | !> RCOND is REAL !> Reciprocal scaled condition number. This is an estimate of the !> reciprocal Skeel condition number of the matrix A after !> equilibration (if done). If this is less than the machine !> precision (in particular, if it is zero), the matrix is singular !> to working precision. Note that the error may still be small even !> if this number is very small and the matrix appears ill- !> conditioned. !> |
| [out] | BERR | !> BERR is REAL array, dimension (NRHS) !> Componentwise relative backward error. This is the !> componentwise relative backward error of each solution vector X(j) !> (i.e., the smallest relative change in any element of A or B that !> makes X(j) an exact solution). !> |
| [in] | N_ERR_BNDS | !> N_ERR_BNDS is INTEGER !> Number of error bounds to return for each right hand side !> and each type (normwise or componentwise). See ERR_BNDS_NORM and !> ERR_BNDS_COMP below. !> |
| [out] | ERR_BNDS_NORM | !> ERR_BNDS_NORM is REAL array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand side, this array contains information about
!> various error bounds and condition numbers corresponding to the
!> normwise relative error, which is defined as follows:
!>
!> Normwise relative error in the ith solution vector:
!> max_j (abs(XTRUE(j,i) - X(j,i)))
!> ------------------------------
!> max_j abs(X(j,i))
!>
!> The array is indexed by the type of error information as described
!> below. There currently are up to three pieces of information
!> returned.
!>
!> The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
!> right-hand side.
!>
!> The second index in ERR_BNDS_NORM(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * slamch('Epsilon').
!>
!> err = 2 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.
!>
!> err = 3 Reciprocal condition number: Estimated normwise
!> reciprocal condition number. Compared with the threshold
!> sqrt(n) * slamch('Epsilon') to determine if the error
!> estimate is . These reciprocal condition
!> numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf)) for some
!> 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.
!>
!> See Lapack Working Note 165 for further details and extra
!> cautions.
!> |
| [out] | ERR_BNDS_COMP | !> ERR_BNDS_COMP is REAL array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand side, this array contains information about
!> various error bounds and condition numbers corresponding to the
!> componentwise relative error, which is defined as follows:
!>
!> Componentwise relative error in the ith solution vector:
!> abs(XTRUE(j,i) - X(j,i))
!> max_j ----------------------
!> abs(X(j,i))
!>
!> The array is indexed by the right-hand side i (on which the
!> componentwise relative error depends), and the type of error
!> information as described below. There currently are up to three
!> pieces of information returned for each right-hand side. If
!> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
!> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS < 3, then at most
!> the first (:,N_ERR_BNDS) entries are returned.
!>
!> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
!> right-hand side.
!>
!> The second index in ERR_BNDS_COMP(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * slamch('Epsilon').
!>
!> err = 2 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.
!>
!> err = 3 Reciprocal condition number: Estimated componentwise
!> reciprocal condition number. Compared with the threshold
!> sqrt(n) * slamch('Epsilon') to determine if the error
!> estimate is . These reciprocal condition
!> numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf)) for some
!> appropriately scaled matrix Z.
!> Let Z = S*(A*diag(x)), where x is the solution for the
!> 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.
!>
!> See Lapack Working Note 165 for further details and extra
!> cautions.
!> |
| [in] | NPARAMS | !> NPARAMS is INTEGER !> Specifies the number of parameters set in PARAMS. If <= 0, the !> PARAMS array is never referenced and default values are used. !> |
| [in,out] | PARAMS | !> PARAMS is REAL array, dimension NPARAMS !> Specifies algorithm parameters. If an entry is < 0.0, then !> 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. !> !> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative !> refinement or not. !> Default: 1.0 !> = 0.0: No refinement is performed, and no error bounds are !> computed. !> = 1.0: Use the double-precision refinement algorithm, !> possibly with doubled-single computations if the !> compilation environment does not support DOUBLE !> PRECISION. !> (other values are reserved for future use) !> !> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual !> computations allowed for refinement. !> Default: 10 !> Aggressive: Set to 100 to permit convergence using approximate !> factorizations or factorizations other than LU. If !> the factorization uses a technique other than !> Gaussian elimination, the guarantees in !> err_bnds_norm and err_bnds_comp may no longer be !> trustworthy. !> !> 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 !> is true, 0.0 is false. !> Default: 1.0 (attempt componentwise convergence) !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (2*N) !> |
| [out] | RWORK | !> RWORK is REAL array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: Successful exit. The solution to every right-hand side is !> guaranteed. !> < 0: If INFO = -i, the i-th argument had an illegal value !> > 0 and <= N: U(INFO,INFO) is exactly zero. The factorization !> has been completed, but the factor U is exactly singular, so !> the solution and error bounds could not be computed. RCOND = 0 !> is returned. !> = N+J: The solution corresponding to the Jth right-hand side is !> not guaranteed. The solutions corresponding to other right- !> hand sides K with K > J may not be guaranteed as well, but !> only the first such right-hand side is reported. If a small !> componentwise error is not requested (PARAMS(3) = 0.0) then !> the Jth right-hand side is the first with a normwise error !> bound that is not guaranteed (the smallest J such !> that ERR_BNDS_NORM(J,1) = 0.0). By default (PARAMS(3) = 1.0) !> the Jth right-hand side is the first with either a normwise or !> componentwise error bound that is not guaranteed (the smallest !> J such that either ERR_BNDS_NORM(J,1) = 0.0 or !> ERR_BNDS_COMP(J,1) = 0.0). See the definition of !> ERR_BNDS_NORM(:,1) and ERR_BNDS_COMP(:,1). To get information !> about all of the right-hand sides check ERR_BNDS_NORM or !> ERR_BNDS_COMP. !> |
Definition at line 398 of file csyrfsx.f.
| subroutine csysv_aa_2stage | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | tb, | ||
| integer | ltb, | ||
| integer, dimension( * ) | ipiv, | ||
| integer, dimension( * ) | ipiv2, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
CSYSV_AA_2STAGE computes the solution to system of linear equations A * X = B for SY matrices
Download CSYSV_AA_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYSV_AA_2STAGE computes the solution to a complex system of !> linear equations !> A * X = B, !> where A is an N-by-N symmetric matrix and X and B are N-by-NRHS !> matrices. !> !> Aasen's 2-stage algorithm is used to factor A as !> A = U**T * T * U, if UPLO = 'U', or !> A = L * T * L**T, if UPLO = 'L', !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, and T is symmetric and band. The matrix T is !> then LU-factored with partial pivoting. The factored form of A !> is then used to solve the system of equations A * X = B. !> !> This is the blocked version of the algorithm, calling Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the symmetric matrix A. If UPLO = 'U', the leading !> N-by-N upper triangular part of A contains the upper !> triangular part of the matrix A, and the strictly lower !> triangular part of A is not referenced. If UPLO = 'L', the !> leading N-by-N lower triangular part of A contains the lower !> triangular part of the matrix A, and the strictly upper !> triangular part of A is not referenced. !> !> On exit, L is stored below (or above) the subdiaonal blocks, !> when UPLO is 'L' (or 'U'). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | TB | !> TB is COMPLEX array, dimension (LTB) !> On exit, details of the LU factorization of the band matrix. !> |
| [in] | LTB | !> LTB is INTEGER !> The size of the array TB. LTB >= 4*N, internally !> used to select NB such that LTB >= (3*NB+1)*N. !> !> If LTB = -1, then a workspace query is assumed; the !> routine only calculates the optimal size of LTB, !> returns this value as the first entry of TB, and !> no error message related to LTB is issued by XERBLA. !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> On exit, it contains the details of the interchanges, i.e., !> the row and column k of A were interchanged with the !> row and column IPIV(k). !> |
| [out] | IPIV2 | !> IPIV2 is INTEGER array, dimension (N) !> On exit, it contains the details of the interchanges, i.e., !> the row and column k of T were interchanged with the !> row and column IPIV(k). !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | WORK | !> WORK is COMPLEX workspace of size LWORK !> |
| [in] | LWORK | !> LWORK is INTEGER !> The size of WORK. LWORK >= N, internally used to select NB !> such that LWORK >= N*NB. !> !> If LWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal size of the WORK array, !> returns this value as the first entry of the WORK array, and !> no error message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: if INFO = i, band LU factorization failed on i-th column !> |
Definition at line 183 of file csysv_aa_2stage.f.
| subroutine csytf2 | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| integer | info ) |
CSYTF2 computes the factorization of a real symmetric indefinite matrix, using the diagonal pivoting method (unblocked algorithm).
Download CSYTF2 + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTF2 computes the factorization of a complex symmetric matrix A !> using the Bunch-Kaufman diagonal pivoting method: !> !> A = U*D*U**T or A = L*D*L**T !> !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, U**T is the transpose of U, and D is symmetric and !> block diagonal with 1-by-1 and 2-by-2 diagonal blocks. !> !> This is the unblocked version of the algorithm, calling Level 2 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the upper or lower triangular part of the !> symmetric matrix A is stored: !> = 'U': Upper triangular !> = 'L': Lower triangular !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the symmetric matrix A. If UPLO = 'U', the leading !> n-by-n upper triangular part of A contains the upper !> triangular part of the matrix A, and the strictly lower !> triangular part of A is not referenced. If UPLO = 'L', the !> leading n-by-n lower triangular part of A contains the lower !> triangular part of the matrix A, and the strictly upper !> triangular part of A is not referenced. !> !> On exit, the block diagonal matrix D and the multipliers used !> to obtain the factor U or L (see below for further details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D. !> !> If UPLO = 'U': !> If IPIV(k) > 0, then rows and columns k and IPIV(k) were !> interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) = IPIV(k-1) < 0, then rows and columns !> k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) !> is a 2-by-2 diagonal block. !> !> If UPLO = 'L': !> If IPIV(k) > 0, then rows and columns k and IPIV(k) were !> interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) = 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. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -k, the k-th argument had an illegal value !> > 0: if INFO = k, D(k,k) is exactly zero. The factorization !> has been completed, but the block diagonal matrix D is !> exactly singular, and division by zero will occur if it !> is used to solve a system of equations. !> |
!> !> If UPLO = 'U', then A = U*D*U**T, where !> U = P(n)*U(n)* ... *P(k)U(k)* ..., !> i.e., U is a product of terms P(k)*U(k), where k decreases from n to !> 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and U(k) is a unit upper triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I v 0 ) k-s !> U(k) = ( 0 I 0 ) s !> ( 0 0 I ) n-k !> k-s s n-k !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k). !> If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k), !> and A(k,k), and v overwrites A(1:k-2,k-1:k). !> !> If UPLO = 'L', then A = L*D*L**T, where !> L = P(1)*L(1)* ... *P(k)*L(k)* ..., !> i.e., L is a product of terms P(k)*L(k), where k increases from 1 to !> n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and L(k) is a unit lower triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I 0 0 ) k-1 !> L(k) = ( 0 I 0 ) s !> ( 0 v I ) n-k-s+1 !> k-1 s n-k-s+1 !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k). !> If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k), !> and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1). !>
!> !> 09-29-06 - patch from !> Bobby Cheng, MathWorks !> !> Replace l.209 and l.377 !> IF( MAX( ABSAKK, COLMAX ).EQ.ZERO ) THEN !> by !> IF( (MAX( ABSAKK, COLMAX ).EQ.ZERO) .OR. SISNAN(ABSAKK) ) THEN !> !> 1-96 - Based on modifications by J. Lewis, Boeing Computer Services !> Company !>
Definition at line 190 of file csytf2.f.
| subroutine csytf2_rk | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | e, | ||
| integer, dimension( * ) | ipiv, | ||
| integer | info ) |
CSYTF2_RK computes the factorization of a complex symmetric indefinite matrix using the bounded Bunch-Kaufman (rook) diagonal pivoting method (BLAS2 unblocked algorithm).
Download CSYTF2_RK + dependencies [TGZ] [ZIP] [TXT]
!> CSYTF2_RK computes the factorization of a complex symmetric matrix A !> using the bounded Bunch-Kaufman (rook) diagonal pivoting method: !> !> A = P*U*D*(U**T)*(P**T) or A = P*L*D*(L**T)*(P**T), !> !> where U (or L) is unit upper (or lower) triangular matrix, !> U**T (or L**T) is the transpose of U (or L), P is a permutation !> matrix, P**T is the transpose of P, and D is symmetric and block !> diagonal with 1-by-1 and 2-by-2 diagonal blocks. !> !> This is the unblocked version of the algorithm, calling Level 2 BLAS. !> For more information see Further Details section. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the upper or lower triangular part of the !> symmetric matrix A is stored: !> = 'U': Upper triangular !> = 'L': Lower triangular !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the symmetric matrix A. !> If UPLO = 'U': the leading N-by-N upper triangular part !> of A contains the upper triangular part of the matrix A, !> and the strictly lower triangular part of A is not !> referenced. !> !> If UPLO = 'L': the leading N-by-N lower triangular part !> of A contains the lower triangular part of the matrix A, !> and the strictly upper triangular part of A is not !> referenced. !> !> On exit, contains: !> a) ONLY diagonal elements of the symmetric block diagonal !> matrix D on the diagonal of A, i.e. D(k,k) = A(k,k); !> (superdiagonal (or subdiagonal) elements of D !> are stored on exit in array E), and !> b) If UPLO = 'U': factor U in the superdiagonal part of A. !> If UPLO = 'L': factor L in the subdiagonal part of A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | E | !> E is COMPLEX array, dimension (N) !> On exit, contains the superdiagonal (or subdiagonal) !> elements of the symmetric block diagonal matrix D !> with 1-by-1 or 2-by-2 diagonal blocks, where !> If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0; !> If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0. !> !> NOTE: For 1-by-1 diagonal block D(k), where !> 1 <= k <= N, the element E(k) is set to 0 in both !> UPLO = 'U' or UPLO = 'L' cases. !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> IPIV describes the permutation matrix P in the factorization !> of matrix A as follows. The absolute value of IPIV(k) !> represents the index of row and column that were !> interchanged with the k-th row and column. The value of UPLO !> describes the order in which the interchanges were applied. !> Also, the sign of IPIV represents the block structure of !> the symmetric block diagonal matrix D with 1-by-1 or 2-by-2 !> diagonal blocks which correspond to 1 or 2 interchanges !> at each factorization step. For more info see Further !> Details section. !> !> If UPLO = 'U', !> ( in factorization order, k decreases from N to 1 ): !> a) A single positive entry IPIV(k) > 0 means: !> D(k,k) is a 1-by-1 diagonal block. !> If IPIV(k) != k, rows and columns k and IPIV(k) were !> interchanged in the matrix A(1:N,1:N); !> If IPIV(k) = k, no interchange occurred. !> !> b) A pair of consecutive negative entries !> IPIV(k) < 0 and IPIV(k-1) < 0 means: !> D(k-1:k,k-1:k) is a 2-by-2 diagonal block. !> (NOTE: negative entries in IPIV appear ONLY in pairs). !> 1) If -IPIV(k) != k, rows and columns !> k and -IPIV(k) were interchanged !> in the matrix A(1:N,1:N). !> If -IPIV(k) = k, no interchange occurred. !> 2) If -IPIV(k-1) != k-1, rows and columns !> k-1 and -IPIV(k-1) were interchanged !> in the matrix A(1:N,1:N). !> If -IPIV(k-1) = k-1, no interchange occurred. !> !> c) In both cases a) and b), always ABS( IPIV(k) ) <= k. !> !> d) NOTE: Any entry IPIV(k) is always NONZERO on output. !> !> If UPLO = 'L', !> ( in factorization order, k increases from 1 to N ): !> a) A single positive entry IPIV(k) > 0 means: !> D(k,k) is a 1-by-1 diagonal block. !> If IPIV(k) != k, rows and columns k and IPIV(k) were !> interchanged in the matrix A(1:N,1:N). !> If IPIV(k) = k, no interchange occurred. !> !> b) A pair of consecutive negative entries !> IPIV(k) < 0 and IPIV(k+1) < 0 means: !> D(k:k+1,k:k+1) is a 2-by-2 diagonal block. !> (NOTE: negative entries in IPIV appear ONLY in pairs). !> 1) If -IPIV(k) != k, rows and columns !> k and -IPIV(k) were interchanged !> in the matrix A(1:N,1:N). !> If -IPIV(k) = k, no interchange occurred. !> 2) If -IPIV(k+1) != k+1, rows and columns !> k-1 and -IPIV(k-1) were interchanged !> in the matrix A(1:N,1:N). !> If -IPIV(k+1) = k+1, no interchange occurred. !> !> c) In both cases a) and b), always ABS( IPIV(k) ) >= k. !> !> d) NOTE: Any entry IPIV(k) is always NONZERO on output. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> !> < 0: If INFO = -k, the k-th argument had an illegal value !> !> > 0: If INFO = k, the matrix A is singular, because: !> If UPLO = 'U': column k in the upper !> triangular part of A contains all zeros. !> If UPLO = 'L': column k in the lower !> triangular part of A contains all zeros. !> !> Therefore D(k,k) is exactly zero, and superdiagonal !> elements of column k of U (or subdiagonal elements of !> column k of L ) are all zeros. The factorization has !> been completed, but the block diagonal matrix D is !> exactly singular, and division by zero will occur if !> it is used to solve a system of equations. !> !> NOTE: INFO only stores the first occurrence of !> a singularity, any subsequent occurrence of singularity !> is not stored in INFO even though the factorization !> always completes. !> |
!> TODO: put further details !>
!> !> December 2016, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !> 01-01-96 - Based on modifications by !> J. Lewis, Boeing Computer Services Company !> A. Petitet, Computer Science Dept., !> Univ. of Tenn., Knoxville abd , USA !>
Definition at line 240 of file csytf2_rk.f.
| subroutine csytf2_rook | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| integer | info ) |
CSYTF2_ROOK computes the factorization of a complex symmetric indefinite matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method (unblocked algorithm).
Download CSYTF2_ROOK + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTF2_ROOK computes the factorization of a complex symmetric matrix A !> using the bounded Bunch-Kaufman () diagonal pivoting method: !> !> A = U*D*U**T or A = L*D*L**T !> !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, U**T is the transpose of U, and D is symmetric and !> block diagonal with 1-by-1 and 2-by-2 diagonal blocks. !> !> This is the unblocked version of the algorithm, calling Level 2 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the upper or lower triangular part of the !> symmetric matrix A is stored: !> = 'U': Upper triangular !> = 'L': Lower triangular !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the symmetric matrix A. If UPLO = 'U', the leading !> n-by-n upper triangular part of A contains the upper !> triangular part of the matrix A, and the strictly lower !> triangular part of A is not referenced. If UPLO = 'L', the !> leading n-by-n lower triangular part of A contains the lower !> triangular part of the matrix A, and the strictly upper !> triangular part of A is not referenced. !> !> On exit, the block diagonal matrix D and the multipliers used !> to obtain the factor U or L (see below for further details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D. !> !> If UPLO = 'U': !> If IPIV(k) > 0, then rows and columns k and IPIV(k) !> were interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) < 0 and IPIV(k-1) < 0, then rows and !> columns k and -IPIV(k) were interchanged and rows and !> columns k-1 and -IPIV(k-1) were inerchaged, !> D(k-1:k,k-1:k) is a 2-by-2 diagonal block. !> !> If UPLO = 'L': !> If IPIV(k) > 0, then rows and columns k and IPIV(k) !> were interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) < 0 and IPIV(k+1) < 0, then rows and !> columns k and -IPIV(k) were interchanged and rows and !> columns k+1 and -IPIV(k+1) were inerchaged, !> D(k:k+1,k:k+1) is a 2-by-2 diagonal block. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -k, the k-th argument had an illegal value !> > 0: if INFO = k, D(k,k) is exactly zero. The factorization !> has been completed, but the block diagonal matrix D is !> exactly singular, and division by zero will occur if it !> is used to solve a system of equations. !> |
!> !> If UPLO = 'U', then A = U*D*U**T, where !> U = P(n)*U(n)* ... *P(k)U(k)* ..., !> i.e., U is a product of terms P(k)*U(k), where k decreases from n to !> 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and U(k) is a unit upper triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I v 0 ) k-s !> U(k) = ( 0 I 0 ) s !> ( 0 0 I ) n-k !> k-s s n-k !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k). !> If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k), !> and A(k,k), and v overwrites A(1:k-2,k-1:k). !> !> If UPLO = 'L', then A = L*D*L**T, where !> L = P(1)*L(1)* ... *P(k)*L(k)* ..., !> i.e., L is a product of terms P(k)*L(k), where k increases from 1 to !> n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and L(k) is a unit lower triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I 0 0 ) k-1 !> L(k) = ( 0 I 0 ) s !> ( 0 v I ) n-k-s+1 !> k-1 s n-k-s+1 !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k). !> If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k), !> and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1). !>
!> !> November 2013, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !> 01-01-96 - Based on modifications by !> J. Lewis, Boeing Computer Services Company !> A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville abd , USA !>
Definition at line 193 of file csytf2_rook.f.
| subroutine csytrf | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
CSYTRF
Download CSYTRF + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTRF computes the factorization of a complex symmetric matrix A !> using the Bunch-Kaufman diagonal pivoting method. The form of the !> factorization is !> !> A = U*D*U**T or A = L*D*L**T !> !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, and D is symmetric and block diagonal with !> 1-by-1 and 2-by-2 diagonal blocks. !> !> This is the blocked version of the algorithm, calling Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the symmetric matrix A. If UPLO = 'U', the leading !> N-by-N upper triangular part of A contains the upper !> triangular part of the matrix A, and the strictly lower !> triangular part of A is not referenced. If UPLO = 'L', the !> leading N-by-N lower triangular part of A contains the lower !> triangular part of the matrix A, and the strictly upper !> triangular part of A is not referenced. !> !> On exit, the block diagonal matrix D and the multipliers used !> to obtain the factor U or L (see below for further details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D. !> 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 !> columns k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) !> 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. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The length of WORK. LWORK >=1. For best performance !> LWORK >= N*NB, where NB is the block size returned by ILAENV. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) is exactly zero. The factorization !> has been completed, but the block diagonal matrix D is !> exactly singular, and division by zero will occur if it !> is used to solve a system of equations. !> |
!> !> If UPLO = 'U', then A = U*D*U**T, where !> U = P(n)*U(n)* ... *P(k)U(k)* ..., !> i.e., U is a product of terms P(k)*U(k), where k decreases from n to !> 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and U(k) is a unit upper triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I v 0 ) k-s !> U(k) = ( 0 I 0 ) s !> ( 0 0 I ) n-k !> k-s s n-k !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k). !> If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k), !> and A(k,k), and v overwrites A(1:k-2,k-1:k). !> !> If UPLO = 'L', then A = L*D*L**T, where !> L = P(1)*L(1)* ... *P(k)*L(k)* ..., !> i.e., L is a product of terms P(k)*L(k), where k increases from 1 to !> n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and L(k) is a unit lower triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I 0 0 ) k-1 !> L(k) = ( 0 I 0 ) s !> ( 0 v I ) n-k-s+1 !> k-1 s n-k-s+1 !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k). !> If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k), !> and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1). !>
Definition at line 181 of file csytrf.f.
| subroutine csytrf_aa | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
CSYTRF_AA
Download CSYTRF_AA + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTRF_AA computes the factorization of a complex symmetric matrix A !> using the Aasen's algorithm. The form of the factorization is !> !> A = U**T*T*U or A = L*T*L**T !> !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, and T is a complex symmetric tridiagonal matrix. !> !> This is the blocked version of the algorithm, calling Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the symmetric matrix A. If UPLO = 'U', the leading !> N-by-N upper triangular part of A contains the upper !> triangular part of the matrix A, and the strictly lower !> triangular part of A is not referenced. If UPLO = 'L', the !> leading N-by-N lower triangular part of A contains the lower !> triangular part of the matrix A, and the strictly upper !> triangular part of A is not referenced. !> !> On exit, the tridiagonal matrix is stored in the diagonals !> and the subdiagonals of A just below (or above) the diagonals, !> and L is stored below (or above) the subdiaonals, when UPLO !> is 'L' (or 'U'). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> On exit, it contains the details of the interchanges, i.e., !> the row and column k of A were interchanged with the !> row and column IPIV(k). !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The length of WORK. LWORK >= MAX(1,2*N). For optimum performance !> LWORK >= N*(1+NB), where NB is the optimal blocksize. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> |
Definition at line 131 of file csytrf_aa.f.
| subroutine csytrf_aa_2stage | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | tb, | ||
| integer | ltb, | ||
| integer, dimension( * ) | ipiv, | ||
| integer, dimension( * ) | ipiv2, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
CSYTRF_AA_2STAGE
Download CSYTRF_AA_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTRF_AA_2STAGE computes the factorization of a complex symmetric matrix A !> using the Aasen's algorithm. The form of the factorization is !> !> A = U**T*T*U or A = L*T*L**T !> !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, and T is a complex symmetric band matrix with the !> bandwidth of NB (NB is internally selected and stored in TB( 1 ), and T is !> LU factorized with partial pivoting). !> !> This is the blocked version of the algorithm, calling Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the hermitian matrix A. If UPLO = 'U', the leading !> N-by-N upper triangular part of A contains the upper !> triangular part of the matrix A, and the strictly lower !> triangular part of A is not referenced. If UPLO = 'L', the !> leading N-by-N lower triangular part of A contains the lower !> triangular part of the matrix A, and the strictly upper !> triangular part of A is not referenced. !> !> On exit, L is stored below (or above) the subdiaonal blocks, !> when UPLO is 'L' (or 'U'). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | TB | !> TB is COMPLEX array, dimension (LTB) !> On exit, details of the LU factorization of the band matrix. !> |
| [in] | LTB | !> LTB is INTEGER !> The size of the array TB. LTB >= 4*N, internally !> used to select NB such that LTB >= (3*NB+1)*N. !> !> If LTB = -1, then a workspace query is assumed; the !> routine only calculates the optimal size of LTB, !> returns this value as the first entry of TB, and !> no error message related to LTB is issued by XERBLA. !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> On exit, it contains the details of the interchanges, i.e., !> the row and column k of A were interchanged with the !> row and column IPIV(k). !> |
| [out] | IPIV2 | !> IPIV2 is INTEGER array, dimension (N) !> On exit, it contains the details of the interchanges, i.e., !> the row and column k of T were interchanged with the !> row and column IPIV(k). !> |
| [out] | WORK | !> WORK is COMPLEX workspace of size LWORK !> |
| [in] | LWORK | !> LWORK is INTEGER !> The size of WORK. LWORK >= N, internally used to select NB !> such that LWORK >= N*NB. !> !> If LWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal size of the WORK array, !> returns this value as the first entry of the WORK array, and !> no error message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: if INFO = i, band LU factorization failed on i-th column !> |
Definition at line 158 of file csytrf_aa_2stage.f.
| subroutine csytrf_rk | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | e, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
CSYTRF_RK computes the factorization of a complex symmetric indefinite matrix using the bounded Bunch-Kaufman (rook) diagonal pivoting method (BLAS3 blocked algorithm).
Download CSYTRF_RK + dependencies [TGZ] [ZIP] [TXT]
!> CSYTRF_RK computes the factorization of a complex symmetric matrix A !> using the bounded Bunch-Kaufman (rook) diagonal pivoting method: !> !> A = P*U*D*(U**T)*(P**T) or A = P*L*D*(L**T)*(P**T), !> !> where U (or L) is unit upper (or lower) triangular matrix, !> U**T (or L**T) is the transpose of U (or L), P is a permutation !> matrix, P**T is the transpose of P, and D is symmetric and block !> diagonal with 1-by-1 and 2-by-2 diagonal blocks. !> !> This is the blocked version of the algorithm, calling Level 3 BLAS. !> For more information see Further Details section. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the upper or lower triangular part of the !> symmetric matrix A is stored: !> = 'U': Upper triangular !> = 'L': Lower triangular !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the symmetric matrix A. !> If UPLO = 'U': the leading N-by-N upper triangular part !> of A contains the upper triangular part of the matrix A, !> and the strictly lower triangular part of A is not !> referenced. !> !> If UPLO = 'L': the leading N-by-N lower triangular part !> of A contains the lower triangular part of the matrix A, !> and the strictly upper triangular part of A is not !> referenced. !> !> On exit, contains: !> a) ONLY diagonal elements of the symmetric block diagonal !> matrix D on the diagonal of A, i.e. D(k,k) = A(k,k); !> (superdiagonal (or subdiagonal) elements of D !> are stored on exit in array E), and !> b) If UPLO = 'U': factor U in the superdiagonal part of A. !> If UPLO = 'L': factor L in the subdiagonal part of A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | E | !> E is COMPLEX array, dimension (N) !> On exit, contains the superdiagonal (or subdiagonal) !> elements of the symmetric block diagonal matrix D !> with 1-by-1 or 2-by-2 diagonal blocks, where !> If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0; !> If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0. !> !> NOTE: For 1-by-1 diagonal block D(k), where !> 1 <= k <= N, the element E(k) is set to 0 in both !> UPLO = 'U' or UPLO = 'L' cases. !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> IPIV describes the permutation matrix P in the factorization !> of matrix A as follows. The absolute value of IPIV(k) !> represents the index of row and column that were !> interchanged with the k-th row and column. The value of UPLO !> describes the order in which the interchanges were applied. !> Also, the sign of IPIV represents the block structure of !> the symmetric block diagonal matrix D with 1-by-1 or 2-by-2 !> diagonal blocks which correspond to 1 or 2 interchanges !> at each factorization step. For more info see Further !> Details section. !> !> If UPLO = 'U', !> ( in factorization order, k decreases from N to 1 ): !> a) A single positive entry IPIV(k) > 0 means: !> D(k,k) is a 1-by-1 diagonal block. !> If IPIV(k) != k, rows and columns k and IPIV(k) were !> interchanged in the matrix A(1:N,1:N); !> If IPIV(k) = k, no interchange occurred. !> !> b) A pair of consecutive negative entries !> IPIV(k) < 0 and IPIV(k-1) < 0 means: !> D(k-1:k,k-1:k) is a 2-by-2 diagonal block. !> (NOTE: negative entries in IPIV appear ONLY in pairs). !> 1) If -IPIV(k) != k, rows and columns !> k and -IPIV(k) were interchanged !> in the matrix A(1:N,1:N). !> If -IPIV(k) = k, no interchange occurred. !> 2) If -IPIV(k-1) != k-1, rows and columns !> k-1 and -IPIV(k-1) were interchanged !> in the matrix A(1:N,1:N). !> If -IPIV(k-1) = k-1, no interchange occurred. !> !> c) In both cases a) and b), always ABS( IPIV(k) ) <= k. !> !> d) NOTE: Any entry IPIV(k) is always NONZERO on output. !> !> If UPLO = 'L', !> ( in factorization order, k increases from 1 to N ): !> a) A single positive entry IPIV(k) > 0 means: !> D(k,k) is a 1-by-1 diagonal block. !> If IPIV(k) != k, rows and columns k and IPIV(k) were !> interchanged in the matrix A(1:N,1:N). !> If IPIV(k) = k, no interchange occurred. !> !> b) A pair of consecutive negative entries !> IPIV(k) < 0 and IPIV(k+1) < 0 means: !> D(k:k+1,k:k+1) is a 2-by-2 diagonal block. !> (NOTE: negative entries in IPIV appear ONLY in pairs). !> 1) If -IPIV(k) != k, rows and columns !> k and -IPIV(k) were interchanged !> in the matrix A(1:N,1:N). !> If -IPIV(k) = k, no interchange occurred. !> 2) If -IPIV(k+1) != k+1, rows and columns !> k-1 and -IPIV(k-1) were interchanged !> in the matrix A(1:N,1:N). !> If -IPIV(k+1) = k+1, no interchange occurred. !> !> c) In both cases a) and b), always ABS( IPIV(k) ) >= k. !> !> d) NOTE: Any entry IPIV(k) is always NONZERO on output. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension ( MAX(1,LWORK) ). !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The length of WORK. LWORK >=1. For best performance !> LWORK >= N*NB, where NB is the block size returned !> by ILAENV. !> !> If LWORK = -1, then a workspace query is assumed; !> the routine only calculates the optimal size of the WORK !> array, returns this value as the first entry of the WORK !> array, and no error message related to LWORK is issued !> by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> !> < 0: If INFO = -k, the k-th argument had an illegal value !> !> > 0: If INFO = k, the matrix A is singular, because: !> If UPLO = 'U': column k in the upper !> triangular part of A contains all zeros. !> If UPLO = 'L': column k in the lower !> triangular part of A contains all zeros. !> !> Therefore D(k,k) is exactly zero, and superdiagonal !> elements of column k of U (or subdiagonal elements of !> column k of L ) are all zeros. The factorization has !> been completed, but the block diagonal matrix D is !> exactly singular, and division by zero will occur if !> it is used to solve a system of equations. !> !> NOTE: INFO only stores the first occurrence of !> a singularity, any subsequent occurrence of singularity !> is not stored in INFO even though the factorization !> always completes. !> |
!> TODO: put correct description !>
!> !> December 2016, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 257 of file csytrf_rk.f.
| subroutine csytrf_rook | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
CSYTRF_ROOK
Download CSYTRF_ROOK + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTRF_ROOK computes the factorization of a complex symmetric matrix A !> using the bounded Bunch-Kaufman () diagonal pivoting method. !> The form of the factorization is !> !> A = U*D*U**T or A = L*D*L**T !> !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, and D is symmetric and block diagonal with !> 1-by-1 and 2-by-2 diagonal blocks. !> !> This is the blocked version of the algorithm, calling Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the symmetric matrix A. If UPLO = 'U', the leading !> N-by-N upper triangular part of A contains the upper !> triangular part of the matrix A, and the strictly lower !> triangular part of A is not referenced. If UPLO = 'L', the !> leading N-by-N lower triangular part of A contains the lower !> triangular part of the matrix A, and the strictly upper !> triangular part of A is not referenced. !> !> On exit, the block diagonal matrix D and the multipliers used !> to obtain the factor U or L (see below for further details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D. !> !> If UPLO = 'U': !> If IPIV(k) > 0, then rows and columns k and IPIV(k) !> were interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) < 0 and IPIV(k-1) < 0, then rows and !> columns k and -IPIV(k) were interchanged and rows and !> columns k-1 and -IPIV(k-1) were inerchaged, !> D(k-1:k,k-1:k) is a 2-by-2 diagonal block. !> !> If UPLO = 'L': !> If IPIV(k) > 0, then rows and columns k and IPIV(k) !> were interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) < 0 and IPIV(k+1) < 0, then rows and !> columns k and -IPIV(k) were interchanged and rows and !> columns k+1 and -IPIV(k+1) were inerchaged, !> D(k:k+1,k:k+1) is a 2-by-2 diagonal block. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (MAX(1,LWORK)). !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The length of WORK. LWORK >=1. For best performance !> LWORK >= N*NB, where NB is the block size returned by ILAENV. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) is exactly zero. The factorization !> has been completed, but the block diagonal matrix D is !> exactly singular, and division by zero will occur if it !> is used to solve a system of equations. !> |
!> !> If UPLO = 'U', then A = U*D*U**T, where !> U = P(n)*U(n)* ... *P(k)U(k)* ..., !> i.e., U is a product of terms P(k)*U(k), where k decreases from n to !> 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and U(k) is a unit upper triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I v 0 ) k-s !> U(k) = ( 0 I 0 ) s !> ( 0 0 I ) n-k !> k-s s n-k !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k). !> If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k), !> and A(k,k), and v overwrites A(1:k-2,k-1:k). !> !> If UPLO = 'L', then A = L*D*L**T, where !> L = P(1)*L(1)* ... *P(k)*L(k)* ..., !> i.e., L is a product of terms P(k)*L(k), where k increases from 1 to !> n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and L(k) is a unit lower triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I 0 0 ) k-1 !> L(k) = ( 0 I 0 ) s !> ( 0 v I ) n-k-s+1 !> k-1 s n-k-s+1 !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k). !> If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k), !> and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1). !>
!> !> June 2016, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 207 of file csytrf_rook.f.
| subroutine csytri | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( * ) | work, | ||
| integer | info ) |
CSYTRI
Download CSYTRI + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTRI computes the inverse of a complex symmetric indefinite matrix !> A using the factorization A = U*D*U**T or A = L*D*L**T computed by !> CSYTRF. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U*D*U**T; !> = 'L': Lower triangular, form is A = L*D*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> 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. !> !> 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 !> referenced; if UPLO = 'L' the lower triangular part of the !> inverse is formed and the part of A above the diagonal is !> not referenced. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) = 0; the matrix is singular and its !> inverse could not be computed. !> |
Definition at line 113 of file csytri.f.
| subroutine csytri2 | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
CSYTRI2
Download CSYTRI2 + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTRI2 computes the inverse of a COMPLEX symmetric indefinite matrix !> A using the factorization A = U*D*U**T or A = L*D*L**T computed by !> CSYTRF. CSYTRI2 sets the LEADING DIMENSION of the workspace !> before calling CSYTRI2X that actually computes the inverse. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U*D*U**T; !> = 'L': Lower triangular, form is A = L*D*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> 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. !> !> 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 !> referenced; if UPLO = 'L' the lower triangular part of the !> inverse is formed and the part of A above the diagonal is !> not referenced. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (N+NB+1)*(NB+3) !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. !> WORK is size >= (N+NB+1)*(NB+3) !> If LWORK = -1, then a workspace query is assumed; the routine !> calculates: !> - the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, !> - and no error message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) = 0; the matrix is singular and its !> inverse could not be computed. !> |
Definition at line 126 of file csytri2.f.
| subroutine csytri2x | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( n+nb+1,* ) | work, | ||
| integer | nb, | ||
| integer | info ) |
CSYTRI2X
Download CSYTRI2X + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTRI2X computes the inverse of a real symmetric indefinite matrix !> A using the factorization A = U*D*U**T or A = L*D*L**T computed by !> CSYTRF. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U*D*U**T; !> = 'L': Lower triangular, form is A = L*D*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> 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. !> !> 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 !> referenced; if UPLO = 'L' the lower triangular part of the !> inverse is formed and the part of A above the diagonal is !> not referenced. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the NNB structure of D !> as determined by CSYTRF. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (N+NB+1,NB+3) !> |
| [in] | NB | !> NB is INTEGER !> Block size !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) = 0; the matrix is singular and its !> inverse could not be computed. !> |
Definition at line 119 of file csytri2x.f.
| subroutine csytri_3 | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | e, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
CSYTRI_3
Download CSYTRI_3 + dependencies [TGZ] [ZIP] [TXT]
!> CSYTRI_3 computes the inverse of a complex symmetric indefinite !> matrix A using the factorization computed by CSYTRF_RK or CSYTRF_BK: !> !> A = P*U*D*(U**T)*(P**T) or A = P*L*D*(L**T)*(P**T), !> !> where U (or L) is unit upper (or lower) triangular matrix, !> U**T (or L**T) is the transpose of U (or L), P is a permutation !> matrix, P**T is the transpose of P, and D is symmetric and block !> diagonal with 1-by-1 and 2-by-2 diagonal blocks. !> !> CSYTRI_3 sets the leading dimension of the workspace before calling !> CSYTRI_3X that actually computes the inverse. This is the blocked !> version of the algorithm, calling Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are !> stored as an upper or lower triangular matrix. !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, diagonal of the block diagonal matrix D and !> factors U or L as computed by CSYTRF_RK and CSYTRF_BK: !> a) ONLY diagonal elements of the symmetric block diagonal !> matrix D on the diagonal of A, i.e. D(k,k) = A(k,k); !> (superdiagonal (or subdiagonal) elements of D !> should be provided on entry in array E), and !> b) If UPLO = 'U': factor U in the superdiagonal part of A. !> If UPLO = 'L': factor L in the subdiagonal part of A. !> !> 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 !> referenced; !> If UPLO = 'L': the lower triangular part of the inverse !> is formed and the part of A above the diagonal is not !> referenced. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | E | !> E is COMPLEX array, dimension (N) !> On entry, contains the superdiagonal (or subdiagonal) !> elements of the symmetric block diagonal matrix D !> with 1-by-1 or 2-by-2 diagonal blocks, where !> If UPLO = 'U': E(i) = D(i-1,i),i=2:N, E(1) not referenced; !> If UPLO = 'L': E(i) = D(i+1,i),i=1:N-1, E(N) not referenced. !> !> NOTE: For 1-by-1 diagonal block D(k), where !> 1 <= k <= N, the element E(k) is not referenced in both !> UPLO = 'U' or UPLO = 'L' cases. !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF_RK or CSYTRF_BK. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (N+NB+1)*(NB+3). !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The length of WORK. LWORK >= (N+NB+1)*(NB+3). !> !> If LDWORK = -1, then a workspace query is assumed; !> the routine only calculates the optimal size of the optimal !> size of the WORK array, returns this value as the first !> entry of the WORK array, and no error message related to !> LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) = 0; the matrix is singular and its !> inverse could not be computed. !> |
!> !> November 2017, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !>
Definition at line 168 of file csytri_3.f.
| subroutine csytri_3x | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | e, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( n+nb+1, * ) | work, | ||
| integer | nb, | ||
| integer | info ) |
CSYTRI_3X
Download CSYTRI_3X + dependencies [TGZ] [ZIP] [TXT]
!> CSYTRI_3X computes the inverse of a complex symmetric indefinite !> matrix A using the factorization computed by CSYTRF_RK or CSYTRF_BK: !> !> A = P*U*D*(U**T)*(P**T) or A = P*L*D*(L**T)*(P**T), !> !> where U (or L) is unit upper (or lower) triangular matrix, !> U**T (or L**T) is the transpose of U (or L), P is a permutation !> matrix, P**T is the transpose of P, and D is symmetric and block !> diagonal with 1-by-1 and 2-by-2 diagonal blocks. !> !> This is the blocked version of the algorithm, calling Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are !> stored as an upper or lower triangular matrix. !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, diagonal of the block diagonal matrix D and !> factors U or L as computed by CSYTRF_RK and CSYTRF_BK: !> a) ONLY diagonal elements of the symmetric block diagonal !> matrix D on the diagonal of A, i.e. D(k,k) = A(k,k); !> (superdiagonal (or subdiagonal) elements of D !> should be provided on entry in array E), and !> b) If UPLO = 'U': factor U in the superdiagonal part of A. !> If UPLO = 'L': factor L in the subdiagonal part of A. !> !> 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 !> referenced; !> If UPLO = 'L': the lower triangular part of the inverse !> is formed and the part of A above the diagonal is not !> referenced. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | E | !> E is COMPLEX array, dimension (N) !> On entry, contains the superdiagonal (or subdiagonal) !> elements of the symmetric block diagonal matrix D !> with 1-by-1 or 2-by-2 diagonal blocks, where !> If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) not referenced; !> If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) not referenced. !> !> NOTE: For 1-by-1 diagonal block D(k), where !> 1 <= k <= N, the element E(k) is not referenced in both !> UPLO = 'U' or UPLO = 'L' cases. !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF_RK or CSYTRF_BK. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (N+NB+1,NB+3). !> |
| [in] | NB | !> NB is INTEGER !> Block size. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) = 0; the matrix is singular and its !> inverse could not be computed. !> |
!> !> June 2017, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !>
Definition at line 158 of file csytri_3x.f.
| subroutine csytri_rook | ( | character | uplo, |
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( * ) | work, | ||
| integer | info ) |
CSYTRI_ROOK
Download CSYTRI_ROOK + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTRI_ROOK computes the inverse of a complex symmetric !> matrix A using the factorization A = U*D*U**T or A = L*D*L**T !> computed by CSYTRF_ROOK. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U*D*U**T; !> = 'L': Lower triangular, form is A = L*D*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> 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_ROOK. !> !> 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 !> referenced; if UPLO = 'L' the lower triangular part of the !> inverse is formed and the part of A above the diagonal is !> not referenced. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF_ROOK. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) = 0; the matrix is singular and its !> inverse could not be computed. !> |
!> !> December 2016, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 128 of file csytri_rook.f.
| subroutine csytrs | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | info ) |
CSYTRS
Download CSYTRS + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTRS solves a system of linear equations A*X = B with a complex !> symmetric matrix A using the factorization A = U*D*U**T or !> A = L*D*L**T computed by CSYTRF. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U*D*U**T; !> = 'L': Lower triangular, form is A = L*D*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by CSYTRF. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF. !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 119 of file csytrs.f.
| subroutine csytrs2 | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( * ) | work, | ||
| integer | info ) |
CSYTRS2
Download CSYTRS2 + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTRS2 solves a system of linear equations A*X = B with a complex !> symmetric matrix A using the factorization A = U*D*U**T or !> A = L*D*L**T computed by CSYTRF and converted by CSYCONV. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U*D*U**T; !> = 'L': Lower triangular, form is A = L*D*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by CSYTRF. !> Note that A is input / output. This might be counter-intuitive, !> and one may think that A is input only. A is input / output. This !> is because, at the start of the subroutine, we permute A in a !> form and then we permute A back to its original form at !> the end. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF. !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 130 of file csytrs2.f.
| subroutine csytrs_3 | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | e, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | info ) |
CSYTRS_3
Download CSYTRS_3 + dependencies [TGZ] [ZIP] [TXT]
!> CSYTRS_3 solves a system of linear equations A * X = B with a complex !> symmetric matrix A using the factorization computed !> by CSYTRF_RK or CSYTRF_BK: !> !> A = P*U*D*(U**T)*(P**T) or A = P*L*D*(L**T)*(P**T), !> !> where U (or L) is unit upper (or lower) triangular matrix, !> U**T (or L**T) is the transpose of U (or L), P is a permutation !> matrix, P**T is the transpose of P, and D is symmetric and block !> diagonal with 1-by-1 and 2-by-2 diagonal blocks. !> !> This algorithm is using Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are !> stored as an upper or lower triangular matrix: !> = 'U': Upper triangular, form is A = P*U*D*(U**T)*(P**T); !> = 'L': Lower triangular, form is A = P*L*D*(L**T)*(P**T). !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> Diagonal of the block diagonal matrix D and factors U or L !> as computed by CSYTRF_RK and CSYTRF_BK: !> a) ONLY diagonal elements of the symmetric block diagonal !> matrix D on the diagonal of A, i.e. D(k,k) = A(k,k); !> (superdiagonal (or subdiagonal) elements of D !> should be provided on entry in array E), and !> b) If UPLO = 'U': factor U in the superdiagonal part of A. !> If UPLO = 'L': factor L in the subdiagonal part of A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | E | !> E is COMPLEX array, dimension (N) !> On entry, contains the superdiagonal (or subdiagonal) !> elements of the symmetric block diagonal matrix D !> with 1-by-1 or 2-by-2 diagonal blocks, where !> If UPLO = 'U': E(i) = D(i-1,i),i=2:N, E(1) not referenced; !> If UPLO = 'L': E(i) = D(i+1,i),i=1:N-1, E(N) not referenced. !> !> NOTE: For 1-by-1 diagonal block D(k), where !> 1 <= k <= N, the element E(k) is not referenced in both !> UPLO = 'U' or UPLO = 'L' cases. !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF_RK or CSYTRF_BK. !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> June 2017, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 163 of file csytrs_3.f.
| subroutine csytrs_aa | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
CSYTRS_AA
Download CSYTRS_AA + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTRS_AA solves a system of linear equations A*X = B with a complex !> symmetric matrix A using the factorization A = U**T*T*U or !> A = L*T*L**T computed by CSYTRF_AA. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U**T*T*U; !> = 'L': Lower triangular, form is A = L*T*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> Details of factors computed by CSYTRF_AA. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges as computed by CSYTRF_AA. !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (MAX(1,LWORK)) !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= max(1,3*N-2). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 129 of file csytrs_aa.f.
| subroutine csytrs_aa_2stage | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | tb, | ||
| integer | ltb, | ||
| integer, dimension( * ) | ipiv, | ||
| integer, dimension( * ) | ipiv2, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | info ) |
CSYTRS_AA_2STAGE
Download CSYTRS_AA_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTRS_AA_2STAGE solves a system of linear equations A*X = B with a complex !> symmetric matrix A using the factorization A = U**T*T*U or !> A = L*T*L**T computed by CSYTRF_AA_2STAGE. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U**T*T*U; !> = 'L': Lower triangular, form is A = L*T*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> Details of factors computed by CSYTRF_AA_2STAGE. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | TB | !> TB is COMPLEX array, dimension (LTB) !> Details of factors computed by CSYTRF_AA_2STAGE. !> |
| [in] | LTB | !> LTB is INTEGER !> The size of the array TB. LTB >= 4*N. !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges as computed by !> CSYTRF_AA_2STAGE. !> |
| [in] | IPIV2 | !> IPIV2 is INTEGER array, dimension (N) !> Details of the interchanges as computed by !> CSYTRF_AA_2STAGE. !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 137 of file csytrs_aa_2stage.f.
| subroutine csytrs_rook | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | info ) |
CSYTRS_ROOK
Download CSYTRS_ROOK + dependencies [TGZ] [ZIP] [TXT]
!> !> CSYTRS_ROOK solves a system of linear equations A*X = B with !> a complex symmetric matrix A using the factorization A = U*D*U**T or !> A = L*D*L**T computed by CSYTRF_ROOK. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U*D*U**T; !> = 'L': Lower triangular, form is A = L*D*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by CSYTRF_ROOK. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by CSYTRF_ROOK. !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> December 2016, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 134 of file csytrs_rook.f.
| subroutine ctgsyl | ( | character | trans, |
| integer | ijob, | ||
| integer | m, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( ldc, * ) | c, | ||
| integer | ldc, | ||
| complex, dimension( ldd, * ) | d, | ||
| integer | ldd, | ||
| complex, dimension( lde, * ) | e, | ||
| integer | lde, | ||
| complex, dimension( ldf, * ) | f, | ||
| integer | ldf, | ||
| real | scale, | ||
| real | dif, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | info ) |
CTGSYL
Download CTGSYL + dependencies [TGZ] [ZIP] [TXT]
!> !> CTGSYL solves the generalized Sylvester equation: !> !> A * R - L * B = scale * C (1) !> D * R - L * E = scale * F !> !> where R and L are unknown m-by-n matrices, (A, D), (B, E) and !> (C, F) are given matrix pairs of size m-by-m, n-by-n and m-by-n, !> respectively, with complex entries. A, B, D and E are upper !> triangular (i.e., (A,D) and (B,E) in generalized Schur form). !> !> The solution (R, L) overwrites (C, F). 0 <= SCALE <= 1 !> is an output scaling factor chosen to avoid overflow. !> !> In matrix notation (1) is equivalent to solve Zx = scale*b, where Z !> is defined as !> !> Z = [ kron(In, A) -kron(B**H, Im) ] (2) !> [ kron(In, D) -kron(E**H, Im) ], !> !> Here Ix is the identity matrix of size x and X**H is the conjugate !> transpose of X. Kron(X, Y) is the Kronecker product between the !> matrices X and Y. !> !> If TRANS = 'C', y in the conjugate transposed system Z**H *y = scale*b !> is solved for, which is equivalent to solve for R and L in !> !> A**H * R + D**H * L = scale * C (3) !> R * B**H + L * E**H = scale * -F !> !> This case (TRANS = 'C') is used to compute an one-norm-based estimate !> of Dif[(A,D), (B,E)], the separation between the matrix pairs (A,D) !> and (B,E), using CLACON. !> !> If IJOB >= 1, CTGSYL computes a Frobenius norm-based estimate of !> Dif[(A,D),(B,E)]. That is, the reciprocal of a lower bound on the !> reciprocal of the smallest singular value of Z. !> !> This is a level-3 BLAS algorithm. !>
| [in] | TRANS | !> TRANS is CHARACTER*1 !> = 'N': solve the generalized sylvester equation (1). !> = 'C': solve the system (3). !> |
| [in] | IJOB | !> IJOB is INTEGER !> Specifies what kind of functionality to be performed. !> =0: solve (1) only. !> =1: The functionality of 0 and 3. !> =2: The functionality of 0 and 4. !> =3: Only an estimate of Dif[(A,D), (B,E)] is computed. !> (look ahead strategy is used). !> =4: Only an estimate of Dif[(A,D), (B,E)] is computed. !> (CGECON on sub-systems is used). !> Not referenced if TRANS = 'C'. !> |
| [in] | M | !> M is INTEGER !> The order of the matrices A and D, and the row dimension of !> the matrices C, F, R and L. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices B and E, and the column dimension !> of the matrices C, F, R and L. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA, M) !> The upper triangular matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1, M). !> |
| [in] | B | !> B is COMPLEX array, dimension (LDB, N) !> The upper triangular matrix B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1, N). !> |
| [in,out] | C | !> C is COMPLEX array, dimension (LDC, N) !> On entry, C contains the right-hand-side of the first matrix !> equation in (1) or (3). !> On exit, if IJOB = 0, 1 or 2, C has been overwritten by !> the solution R. If IJOB = 3 or 4 and TRANS = 'N', C holds R, !> the solution achieved during the computation of the !> Dif-estimate. !> |
| [in] | LDC | !> LDC is INTEGER !> The leading dimension of the array C. LDC >= max(1, M). !> |
| [in] | D | !> D is COMPLEX array, dimension (LDD, M) !> The upper triangular matrix D. !> |
| [in] | LDD | !> LDD is INTEGER !> The leading dimension of the array D. LDD >= max(1, M). !> |
| [in] | E | !> E is COMPLEX array, dimension (LDE, N) !> The upper triangular matrix E. !> |
| [in] | LDE | !> LDE is INTEGER !> The leading dimension of the array E. LDE >= max(1, N). !> |
| [in,out] | F | !> F is COMPLEX array, dimension (LDF, N) !> On entry, F contains the right-hand-side of the second matrix !> equation in (1) or (3). !> On exit, if IJOB = 0, 1 or 2, F has been overwritten by !> the solution L. If IJOB = 3 or 4 and TRANS = 'N', F holds L, !> the solution achieved during the computation of the !> Dif-estimate. !> |
| [in] | LDF | !> LDF is INTEGER !> The leading dimension of the array F. LDF >= max(1, M). !> |
| [out] | DIF | !> DIF is REAL !> On exit DIF is the reciprocal of a lower bound of the !> reciprocal of the Dif-function, i.e. DIF is an upper bound of !> Dif[(A,D), (B,E)] = sigma-min(Z), where Z as in (2). !> IF IJOB = 0 or TRANS = 'C', DIF is not referenced. !> |
| [out] | SCALE | !> SCALE is REAL !> On exit SCALE is the scaling factor in (1) or (3). !> If 0 < SCALE < 1, C and F hold the solutions R and L, resp., !> to a slightly perturbed system but the input matrices A, B, !> D and E have not been changed. If SCALE = 0, R and L will !> hold the solutions to the homogeneous system with C = F = 0. !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> 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). !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (M+N+2) !> |
| [out] | INFO | !> INFO is INTEGER !> =0: successful exit !> <0: If INFO = -i, the i-th argument had an illegal value. !> >0: (A, D) and (B, E) have common or very close !> eigenvalues. !> |
Definition at line 292 of file ctgsyl.f.
| subroutine ctrsyl | ( | character | trana, |
| character | tranb, | ||
| integer | isgn, | ||
| integer | m, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( ldc, * ) | c, | ||
| integer | ldc, | ||
| real | scale, | ||
| integer | info ) |
CTRSYL
Download CTRSYL + dependencies [TGZ] [ZIP] [TXT]
!> !> CTRSYL solves the complex Sylvester matrix equation: !> !> op(A)*X + X*op(B) = scale*C or !> op(A)*X - X*op(B) = scale*C, !> !> where op(A) = A or A**H, and A and B are both upper triangular. A is !> M-by-M and B is N-by-N; the right hand side C and the solution X are !> M-by-N; and scale is an output scale factor, set <= 1 to avoid !> overflow in X. !>
| [in] | TRANA | !> TRANA is CHARACTER*1 !> Specifies the option op(A): !> = 'N': op(A) = A (No transpose) !> = 'C': op(A) = A**H (Conjugate transpose) !> |
| [in] | TRANB | !> TRANB is CHARACTER*1 !> Specifies the option op(B): !> = 'N': op(B) = B (No transpose) !> = 'C': op(B) = B**H (Conjugate transpose) !> |
| [in] | ISGN | !> ISGN is INTEGER !> Specifies the sign in the equation: !> = +1: solve op(A)*X + X*op(B) = scale*C !> = -1: solve op(A)*X - X*op(B) = scale*C !> |
| [in] | M | !> M is INTEGER !> The order of the matrix A, and the number of rows in the !> matrices X and C. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix B, and the number of columns in the !> matrices X and C. N >= 0. !> |
| [in] | A | !> A is COMPLEX array, dimension (LDA,M) !> The upper triangular matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [in] | B | !> B is COMPLEX array, dimension (LDB,N) !> The upper triangular matrix B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [in,out] | C | !> C is COMPLEX array, dimension (LDC,N) !> On entry, the M-by-N right hand side matrix C. !> On exit, C is overwritten by the solution matrix X. !> |
| [in] | LDC | !> LDC is INTEGER !> The leading dimension of the array C. LDC >= max(1,M) !> |
| [out] | SCALE | !> SCALE is REAL !> The scale factor, scale, set <= 1 to avoid overflow in X. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> = 1: A and B have common or very close eigenvalues; perturbed !> values were used to solve the equation (but the matrices !> A and B are unchanged). !> |
Definition at line 155 of file ctrsyl.f.