void updateFlops (int addflops ) const
Increment Flop count for this object.
void updateFlops (long int addflops ) const
Increment Flop count for this object.
void updateFlops (double addflops ) const
Increment Flop count for this object.
void updateFlops (float addflops ) const
Increment Flop count for this object.
CompObject ()
Default constructor.
CompObject (const CompObject &source)
Copy Constructor.
virtual ~CompObject ()
Destructor.
void setFlopCounter (const Flops &FlopCounter )
Set the internal Teuchos::Flops() pointer.
void setFlopCounter (const CompObject &compObject )
Set the internal Teuchos::Flops() pointer to the flop counter of another Teuchos::CompObject .
void unsetFlopCounter ()
Set the internal Teuchos::Flops() pointer to 0 (no flops counted).
Flops * getFlopCounter () const
Get the pointer to the Teuchos::Flops() object associated with this object, returns 0 if none.
void resetFlops () const
Resets the number of floating point operations to zero for this multi-std::vector.
double getFlops () const
Returns the number of floating point operations with this multi-std::vector.
virtual int reportError (const std::string message , int errorCode ) const
Report an error with this Object .
Object (int tracebackModeIn =-1)
Default Constructor.
Object (const char *label , int tracebackModeIn =-1)
Labeling Constructor.
Object (const std::string &label , int tracebackModeIn =-1)
Create an Object with the given label, and optionally, with the given traceback mode.
virtual ~Object ()
Destructor (virtual, for safety of derived classes).
virtual void setLabel (const char *theLabel )
virtual const char * label () const
Access the object's label (LEGACY; return std::string instead).
virtual void print (std::ostream &os ) const
Print the object to the given output stream.
BLAS (void )
Default constructor.
BLAS (const BLAS < OrdinalType , ScalarType > &)
Copy constructor.
virtual ~BLAS (void )
Destructor.
void ROTG (ScalarType *da , ScalarType *db , rotg_c_type *c , ScalarType *s ) const
Computes a Givens plane rotation.
void ROT (const OrdinalType &n, ScalarType *dx , const OrdinalType &incx , ScalarType *dy , const OrdinalType &incy , MagnitudeType *c , ScalarType *s ) const
Applies a Givens plane rotation.
void SCAL (const OrdinalType &n, const ScalarType &alpha , ScalarType *x, const OrdinalType &incx ) const
Scale the vector x
by the constant alpha
.
void COPY (const OrdinalType &n, const ScalarType *x, const OrdinalType &incx , ScalarType *y , const OrdinalType &incy ) const
Copy the vector x
to the vector y
.
template<typename alpha_type , typename x_type >
void AXPY (const OrdinalType &n, const alpha_type alpha , const x_type *x, const OrdinalType &incx , ScalarType *y , const OrdinalType &incy ) const
Perform the operation: y
<-
y+alpha*x
.
ScalarTraits < ScalarType >::magnitudeType ASUM (const OrdinalType &n, const ScalarType *x, const OrdinalType &incx ) const
Sum the absolute values of the entries of x
.
template<typename x_type , typename y_type >
ScalarType DOT (const OrdinalType &n, const x_type *x, const OrdinalType &incx , const y_type *y , const OrdinalType &incy ) const
Form the dot product of the vectors x
and y
.
ScalarTraits < ScalarType >::magnitudeType NRM2 (const OrdinalType &n, const ScalarType *x, const OrdinalType &incx ) const
Compute the 2-norm of the vector x
.
OrdinalType IAMAX (const OrdinalType &n, const ScalarType *x, const OrdinalType &incx ) const
Return the index of the element of x
with the maximum magnitude.
DefaultBLASImpl (void )
Default constructor.
DefaultBLASImpl (const DefaultBLASImpl < OrdinalType , ScalarType > &)
Copy constructor.
virtual ~DefaultBLASImpl (void )
Destructor.
template<typename alpha_type , typename A_type , typename x_type , typename beta_type >
void GEMV (ETransp trans , const OrdinalType &m , const OrdinalType &n, const alpha_type alpha , const A_type *A , const OrdinalType &lda , const x_type *x, const OrdinalType &incx , const beta_type beta , ScalarType *y , const OrdinalType &incy ) const
Performs the matrix-vector operation: y
<-
alpha*A*x+beta*y
or y
<-
alpha*A'*x+beta*y
where A
is a general m
by n
matrix.
template<typename A_type >
void TRMV (EUplo uplo , ETransp trans , EDiag diag , const OrdinalType &n, const A_type *A , const OrdinalType &lda , ScalarType *x, const OrdinalType &incx ) const
Performs the matrix-vector operation: x
<-
A*x
or x
<-
A '*x
where A
is a unit/non-unit n
by n
upper/lower triangular matrix.
template<typename alpha_type , typename x_type , typename y_type >
void GER (const OrdinalType &m , const OrdinalType &n, const alpha_type alpha , const x_type *x, const OrdinalType &incx , const y_type *y , const OrdinalType &incy , ScalarType *A , const OrdinalType &lda ) const
Performs the rank 1 operation: A
<-
alpha*x*y'+A
.
template<typename alpha_type , typename A_type , typename B_type , typename beta_type >
void GEMM (ETransp transa , ETransp transb , const OrdinalType &m , const OrdinalType &n, const OrdinalType &k , const alpha_type alpha , const A_type *A , const OrdinalType &lda , const B_type *B , const OrdinalType &ldb , const beta_type beta , ScalarType *C , const OrdinalType &ldc ) const
General matrix-matrix multiply.
void SWAP (const OrdinalType &n, ScalarType *const x, const OrdinalType &incx , ScalarType *const y , const OrdinalType &incy ) const
Swap the entries of x and y.
template<typename alpha_type , typename A_type , typename B_type , typename beta_type >
void SYMM (ESide side , EUplo uplo , const OrdinalType &m , const OrdinalType &n, const alpha_type alpha , const A_type *A , const OrdinalType &lda , const B_type *B , const OrdinalType &ldb , const beta_type beta , ScalarType *C , const OrdinalType &ldc ) const
Performs the matrix-matrix operation: C
<-
alpha*A*B+beta*C
or C
<-
alpha*B*A+beta*C
where A
is an m
by m
or n
by n
symmetric matrix and B
is a general matrix.
template<typename alpha_type , typename A_type , typename beta_type >
void SYRK (EUplo uplo , ETransp trans , const OrdinalType &n, const OrdinalType &k , const alpha_type alpha , const A_type *A , const OrdinalType &lda , const beta_type beta , ScalarType *C , const OrdinalType &ldc ) const
Performs the symmetric rank k operation: C
<- alpha*A*A'+beta*C
or C
<- alpha*A'*A+beta*C
, where alpha
and beta
are scalars, C
is an n
by n
symmetric matrix and A
is an n
by k
matrix in the first case or k
by n
matrix in the second case.
template<typename alpha_type , typename A_type >
void TRMM (ESide side , EUplo uplo , ETransp transa , EDiag diag , const OrdinalType &m , const OrdinalType &n, const alpha_type alpha , const A_type *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb ) const
Performs the matrix-matrix operation: B
<-
alpha*op
(A )*B or B
<-
alpha*B*op
(A ) where op(A)
is an unit/non-unit, upper/lower triangular matrix and B
is a general matrix.
template<typename alpha_type , typename A_type >
void TRSM (ESide side , EUplo uplo , ETransp transa , EDiag diag , const OrdinalType &m , const OrdinalType &n, const alpha_type alpha , const A_type *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb ) const
Solves the matrix equations: op(A)*X=alpha*B
or X*op
(A )=alpha*B where X
and B
are m
by n
matrices, A
is a unit/non-unit, upper/lower triangular matrix and op(A)
is A
or A '
. The matrix X
is overwritten on B
.
LAPACK (void )
Default Constructor.
LAPACK (const LAPACK < OrdinalType , ScalarType > &lapack )
Copy Constructor.
virtual ~LAPACK (void )
Destructor.
void PTTRF (const OrdinalType &n, MagnitudeType *d, ScalarType *e , OrdinalType *info) const
Computes the L*D*L'
factorization of a Hermitian/symmetric positive definite tridiagonal matrix A
.
void PTTRS (const OrdinalType &n, const OrdinalType &nrhs , const MagnitudeType *d, const ScalarType *e , ScalarType *B , const OrdinalType &ldb , OrdinalType *info) const
Solves a tridiagonal system A*X=B
using the \L*D*L' factorization of A
computed by PTTRF.
void POTRF (const char &UPLO, const OrdinalType &n, ScalarType *A , const OrdinalType &lda , OrdinalType *info) const
Computes Cholesky factorization of a real symmetric positive definite matrix A
.
void POTRS (const char &UPLO, const OrdinalType &n, const OrdinalType &nrhs , const ScalarType *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb , OrdinalType *info) const
Solves a system of linear equations A*X=B
, where A
is a symmetric positive definite matrix factored by POTRF and the nrhs
solutions are returned in B
.
void POTRI (const char &UPLO, const OrdinalType &n, ScalarType *A , const OrdinalType &lda , OrdinalType *info) const
Computes the inverse of a real symmetric positive definite matrix A
using the Cholesky factorization A
from POTRF.
void POCON (const char &UPLO, const OrdinalType &n, const ScalarType *A , const OrdinalType &lda , const ScalarType &anorm , ScalarType *rcond , ScalarType *WORK , OrdinalType *IWORK , OrdinalType *info) const
Estimates the reciprocal of the condition number (1-norm) of a real symmetric positive definite matrix A
using the Cholesky factorization from POTRF.
void POSV (const char &UPLO, const OrdinalType &n, const OrdinalType &nrhs , ScalarType *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb , OrdinalType *info) const
Computes the solution to a real system of linear equations A*X=B
, where A
is a symmetric positive definite matrix and the nrhs
solutions are returned in B
.
void POEQU (const OrdinalType &n, const ScalarType *A , const OrdinalType &lda , MagnitudeType *S , MagnitudeType *scond , MagnitudeType *amax , OrdinalType *info) const
Computes row and column scalings intended to equilibrate a symmetric positive definite matrix A
and reduce its condition number (w.r.t. 2-norm).
void PORFS (const char &UPLO, const OrdinalType &n, const OrdinalType &nrhs , const ScalarType *A , const OrdinalType &lda , const ScalarType *AF , const OrdinalType &ldaf , const ScalarType *B , const OrdinalType &ldb , ScalarType *X , const OrdinalType &ldx , ScalarType *FERR, ScalarType *BERR, ScalarType *WORK , OrdinalType *IWORK , OrdinalType *info) const
Improves the computed solution to a system of linear equations when the coefficient matrix is symmetric positive definite, and provides error bounds and backward error estimates for the solution.
void POSVX (const char &FACT , const char &UPLO, const OrdinalType &n, const OrdinalType &nrhs , ScalarType *A , const OrdinalType &lda , ScalarType *AF , const OrdinalType &ldaf , char *EQUED , ScalarType *S , ScalarType *B , const OrdinalType &ldb , ScalarType *X , const OrdinalType &ldx , ScalarType *rcond , ScalarType *FERR, ScalarType *BERR, ScalarType *WORK , OrdinalType *IWORK , OrdinalType *info) const
Uses the Cholesky factorization to compute the solution to a real system of linear equations A*X=B
, where A
is symmetric positive definite. System can be equilibrated by POEQU and iteratively refined by PORFS, if requested.
void GELS (const char &TRANS , const OrdinalType &m , const OrdinalType &n, const OrdinalType &nrhs , ScalarType *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Solves an over/underdetermined real m
by n
linear system A
using QR or LQ factorization of A .
void GELSS (const OrdinalType &m , const OrdinalType &n, const OrdinalType &nrhs , ScalarType *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb , MagnitudeType *S , const MagnitudeType rcond , OrdinalType *rank, ScalarType *WORK , const OrdinalType &lwork , MagnitudeType *RWORK , OrdinalType *info) const
Use the SVD to solve a possibly rank-deficient linear least-squares problem.
void GELSS (const OrdinalType &m , const OrdinalType &n, const OrdinalType &nrhs , ScalarType *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb , ScalarType *S , const ScalarType &rcond , OrdinalType *rank, ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Legacy GELSS interface for real-valued ScalarType.
void GGLSE (const OrdinalType &m , const OrdinalType &n, const OrdinalType &p , ScalarType *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb , ScalarType *C , ScalarType *D , ScalarType *X , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Solves the linear equality-constrained least squares (LSE) problem where A
is an m
by n
matrix,B
is a p
by n
matrix C
is a given m-vector
, and D is a given p-vector
.
void GEQRF (const OrdinalType &m , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , ScalarType *TAU , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Computes a QR factorization of a general m
by n
matrix A
.
void GEQR2 (const OrdinalType &m , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , ScalarType *TAU , ScalarType *WORK , OrdinalType *const info) const
BLAS 2 version of GEQRF, with known workspace size.
void GETRF (const OrdinalType &m , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , OrdinalType *IPIV, OrdinalType *info) const
Computes an LU factorization of a general m
by n
matrix A
using partial pivoting with row interchanges.
void GETRS (const char &TRANS , const OrdinalType &n, const OrdinalType &nrhs , const ScalarType *A , const OrdinalType &lda , const OrdinalType *IPIV, ScalarType *B , const OrdinalType &ldb , OrdinalType *info) const
Solves a system of linear equations A*X=B
or A '*X=B
with a general n
by n
matrix A
using the LU factorization computed by GETRF.
void LASCL (const char &TYPE , const OrdinalType &kl , const OrdinalType &ku , const MagnitudeType cfrom , const MagnitudeType cto , const OrdinalType &m , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , OrdinalType *info) const
Multiplies the m
by n
matrix A
by the real scalar cto/cfrom
.
void GEQP3 (const OrdinalType &m , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , OrdinalType *jpvt , ScalarType *TAU , ScalarType *WORK , const OrdinalType &lwork , MagnitudeType *RWORK , OrdinalType *info) const
Computes a QR factorization with column pivoting of a matrix A :
A*P = Q*R using Level 3 BLAS .
void LASWP (const OrdinalType &N , ScalarType *A , const OrdinalType &LDA , const OrdinalType &K1 , const OrdinalType &K2 , const OrdinalType *IPIV, const OrdinalType &INCX ) const
Apply a series of row interchanges to the matrix A .
void GBTRF (const OrdinalType &m , const OrdinalType &n, const OrdinalType &kl , const OrdinalType &ku , ScalarType *A , const OrdinalType &lda , OrdinalType *IPIV, OrdinalType *info) const
Computes an LU factorization of a general banded m
by n
matrix A
using partial pivoting with row interchanges.
void GBTRS (const char &TRANS , const OrdinalType &n, const OrdinalType &kl , const OrdinalType &ku , const OrdinalType &nrhs , const ScalarType *A , const OrdinalType &lda , const OrdinalType *IPIV, ScalarType *B , const OrdinalType &ldb , OrdinalType *info) const
Solves a system of linear equations A*X=B
or A '*X=B
with a general banded n
by n
matrix A
using the LU factorization computed by GBTRF.
void GTTRF (const OrdinalType &n, ScalarType *dl , ScalarType *d, ScalarType *du , ScalarType *du2 , OrdinalType *IPIV, OrdinalType *info) const
Computes an LU factorization of a n
by n
tridiagonal matrix A
using partial pivoting with row interchanges.
void GTTRS (const char &TRANS , const OrdinalType &n, const OrdinalType &nrhs , const ScalarType *dl , const ScalarType *d, const ScalarType *du , const ScalarType *du2 , const OrdinalType *IPIV, ScalarType *B , const OrdinalType &ldb , OrdinalType *info) const
Solves a system of linear equations A*X=B
or A '*X=B
or A^H*X=B
with a tridiagonal matrix A
using the LU factorization computed by GTTRF.
void GETRI (const OrdinalType &n, ScalarType *A , const OrdinalType &lda , const OrdinalType *IPIV, ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Computes the inverse of a matrix A
using the LU factorization computed by GETRF.
void LATRS (const char &UPLO, const char &TRANS , const char &DIAG , const char &NORMIN , const OrdinalType &N , const ScalarType *A , const OrdinalType &LDA , ScalarType *X , MagnitudeType *SCALE , MagnitudeType *CNORM , OrdinalType *INFO ) const
Robustly solve a possibly singular triangular linear system.
void GECON (const char &NORM , const OrdinalType &n, const ScalarType *A , const OrdinalType &lda , const ScalarType &anorm , ScalarType *rcond , ScalarType *WORK , OrdinalType *IWORK , OrdinalType *info) const
Estimates the reciprocal of the condition number of a general real matrix A
, in either the 1-norm or the infinity-norm, using the LU factorization computed by GETRF.
void GBCON (const char &NORM , const OrdinalType &n, const OrdinalType &kl , const OrdinalType &ku , const ScalarType *A , const OrdinalType &lda , const OrdinalType *IPIV, const ScalarType &anorm , ScalarType *rcond , ScalarType *WORK , OrdinalType *IWORK , OrdinalType *info) const
Estimates the reciprocal of the condition number of a general banded real matrix A
, in either the 1-norm or the infinity-norm, using the LU factorization computed by GETRF.
ScalarTraits < ScalarType >::magnitudeType LANGB (const char &NORM , const OrdinalType &n, const OrdinalType &kl , const OrdinalType &ku , const ScalarType *A , const OrdinalType &lda , MagnitudeType *WORK ) const
Returns the value of the one norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of an n
by n
band matrix A
, with kl
sub-diagonals and ku
super-diagonals.
void GESV (const OrdinalType &n, const OrdinalType &nrhs , ScalarType *A , const OrdinalType &lda , OrdinalType *IPIV, ScalarType *B , const OrdinalType &ldb , OrdinalType *info) const
Computes the solution to a real system of linear equations A*X=B
, where A
is factored through GETRF and the nrhs
solutions are computed through GETRS.
void GEEQU (const OrdinalType &m , const OrdinalType &n, const ScalarType *A , const OrdinalType &lda , ScalarType *R, ScalarType *C , ScalarType *rowcond , ScalarType *colcond , ScalarType *amax , OrdinalType *info) const
Computes row and column scalings intended to equilibrate an m
by n
matrix A
and reduce its condition number.
void GERFS (const char &TRANS , const OrdinalType &n, const OrdinalType &nrhs , const ScalarType *A , const OrdinalType &lda , const ScalarType *AF , const OrdinalType &ldaf , const OrdinalType *IPIV, const ScalarType *B , const OrdinalType &ldb , ScalarType *X , const OrdinalType &ldx , ScalarType *FERR, ScalarType *BERR, ScalarType *WORK , OrdinalType *IWORK , OrdinalType *info) const
Improves the computed solution to a system of linear equations and provides error bounds and backward error estimates for the solution. Use after GETRF/GETRS.
void GBEQU (const OrdinalType &m , const OrdinalType &n, const OrdinalType &kl , const OrdinalType &ku , const ScalarType *A , const OrdinalType &lda , MagnitudeType *R, MagnitudeType *C , MagnitudeType *rowcond , MagnitudeType *colcond , MagnitudeType *amax , OrdinalType *info) const
Computes row and column scalings intended to equilibrate an m
by n
banded matrix A
and reduce its condition number.
void GBRFS (const char &TRANS , const OrdinalType &n, const OrdinalType &kl , const OrdinalType &ku , const OrdinalType &nrhs , const ScalarType *A , const OrdinalType &lda , const ScalarType *AF , const OrdinalType &ldaf , const OrdinalType *IPIV, const ScalarType *B , const OrdinalType &ldb , ScalarType *X , const OrdinalType &ldx , ScalarType *FERR, ScalarType *BERR, ScalarType *WORK , OrdinalType *IWORK , OrdinalType *info) const
Improves the computed solution to a banded system of linear equations and provides error bounds and backward error estimates for the solution. Use after GBTRF/GBTRS.
void GESVX (const char &FACT , const char &TRANS , const OrdinalType &n, const OrdinalType &nrhs , ScalarType *A , const OrdinalType &lda , ScalarType *AF , const OrdinalType &ldaf , OrdinalType *IPIV, char *EQUED , ScalarType *R, ScalarType *C , ScalarType *B , const OrdinalType &ldb , ScalarType *X , const OrdinalType &ldx , ScalarType *rcond , ScalarType *FERR, ScalarType *BERR, ScalarType *WORK , OrdinalType *IWORK , OrdinalType *info) const
Uses the LU factorization to compute the solution to a real system of linear equations A*X=B
, returning error bounds on the solution and a condition estimate.
void SYTRD (const char &UPLO, const OrdinalType &n, ScalarType *A , const OrdinalType &lda , ScalarType *D , ScalarType *E , ScalarType *TAU , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Reduces a real symmetric matrix A
to tridiagonal form by orthogonal similarity transformations.
void GEHRD (const OrdinalType &n, const OrdinalType &ilo , const OrdinalType &ihi , ScalarType *A , const OrdinalType &lda , ScalarType *TAU , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Reduces a real general matrix A
to upper Hessenberg form by orthogonal similarity transformations.
void TRTRS (const char &UPLO, const char &TRANS , const char &DIAG , const OrdinalType &n, const OrdinalType &nrhs , const ScalarType *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb , OrdinalType *info) const
Solves a triangular linear system of the form A*X=B
or A**T*X=B
, where A
is a triangular matrix.
void TRTRI (const char &UPLO, const char &DIAG , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , OrdinalType *info) const
Computes the inverse of an upper or lower triangular matrix A
.
void SPEV (const char &JOBZ , const char &UPLO, const OrdinalType &n, ScalarType *AP , ScalarType *W , ScalarType *Z , const OrdinalType &ldz , ScalarType *WORK , OrdinalType *info) const
Computes the eigenvalues and, optionally, eigenvectors of a symmetric n
by n
matrix A
in packed storage.
void SYEV (const char &JOBZ , const char &UPLO, const OrdinalType &n, ScalarType *A , const OrdinalType &lda , ScalarType *W , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Computes all the eigenvalues and, optionally, eigenvectors of a symmetric n
by n
matrix A .
void SYGV (const OrdinalType &itype , const char &JOBZ , const char &UPLO, const OrdinalType &n, ScalarType *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb , ScalarType *W , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Computes all the eigenvalues and, optionally, eigenvectors of a symmetric n
by n
matrix pencil {A
,B }, where A
is symmetric and B
is symmetric positive-definite.
void HEEV (const char &JOBZ , const char &UPLO, const OrdinalType &n, ScalarType *A , const OrdinalType &lda , MagnitudeType *W , ScalarType *WORK , const OrdinalType &lwork , MagnitudeType *RWORK , OrdinalType *info) const
Computes all the eigenvalues and, optionally, eigenvectors of a Hermitian n
by n
matrix A .
void HEGV (const OrdinalType &itype , const char &JOBZ , const char &UPLO, const OrdinalType &n, ScalarType *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb , MagnitudeType *W , ScalarType *WORK , const OrdinalType &lwork , MagnitudeType *RWORK , OrdinalType *info) const
Computes all the eigenvalues and, optionally, eigenvectors of a generalized Hermitian-definite n
by n
matrix pencil {A
,B }, where A
is Hermitian and B
is Hermitian positive-definite.
void STEQR (const char &COMPZ , const OrdinalType &n, MagnitudeType *D , MagnitudeType *E , ScalarType *Z , const OrdinalType &ldz , MagnitudeType *WORK , OrdinalType *info) const
Computes the eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal n
by n
matrix A
using implicit QL/QR. The eigenvectors can only be computed if A
was reduced to tridiagonal form by SYTRD.
void PTEQR (const char &COMPZ , const OrdinalType &n, MagnitudeType *D , MagnitudeType *E , ScalarType *Z , const OrdinalType &ldz , MagnitudeType *WORK , OrdinalType *info) const
Computes the eigenvalues and, optionally, eigenvectors of a symmetric positive-definite tridiagonal n
by n
matrix A
using BDSQR, after factoring the matrix with PTTRF.
void HSEQR (const char &JOB , const char &COMPZ , const OrdinalType &n, const OrdinalType &ilo , const OrdinalType &ihi , ScalarType *H , const OrdinalType &ldh , ScalarType *WR , ScalarType *WI , ScalarType *Z , const OrdinalType &ldz , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Computes the eigenvalues of a real upper Hessenberg matrix H
and, optionally, the matrices T
and Z
from the Schur decomposition, where T is an upper quasi-triangular matrix and Z contains the Schur vectors.
void GEES (const char &JOBVS , const char &SORT , OrdinalType &(*ptr2func )(ScalarType *, ScalarType *), const OrdinalType &n, ScalarType *A , const OrdinalType &lda , OrdinalType *sdim , ScalarType *WR , ScalarType *WI , ScalarType *VS , const OrdinalType &ldvs , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *BWORK , OrdinalType *info) const
void GEES (const char &JOBVS , const char &SORT , OrdinalType &(*ptr2func )(ScalarType *), const OrdinalType &n, ScalarType *A , const OrdinalType &lda , OrdinalType *sdim , ScalarType *W , ScalarType *VS , const OrdinalType &ldvs , ScalarType *WORK , const OrdinalType &lwork , MagnitudeType *RWORK , OrdinalType *BWORK , OrdinalType *info) const
void GEES (const char &JOBVS , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , OrdinalType *sdim , MagnitudeType *WR , MagnitudeType *WI , ScalarType *VS , const OrdinalType &ldvs , ScalarType *WORK , const OrdinalType &lwork , MagnitudeType *RWORK , OrdinalType *BWORK , OrdinalType *info) const
void GEEV (const char &JOBVL , const char &JOBVR , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , MagnitudeType *WR , MagnitudeType *WI , ScalarType *VL , const OrdinalType &ldvl , ScalarType *VR , const OrdinalType &ldvr , ScalarType *WORK , const OrdinalType &lwork , MagnitudeType *RWORK , OrdinalType *info) const
Computes for an n
by n
real nonsymmetric matrix A
, the eigenvalues and, optionally, the left and/or right eigenvectors.
void GEEVX (const char &BALANC , const char &JOBVL , const char &JOBVR , const char &SENSE , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , ScalarType *WR , ScalarType *WI , ScalarType *VL , const OrdinalType &ldvl , ScalarType *VR , const OrdinalType &ldvr , OrdinalType *ilo , OrdinalType *ihi , MagnitudeType *SCALE , MagnitudeType *abnrm , MagnitudeType *RCONDE , MagnitudeType *RCONDV , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *IWORK , OrdinalType *info) const
void GGEVX (const char &BALANC , const char &JOBVL , const char &JOBVR , const char &SENSE , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb , MagnitudeType *ALPHAR , MagnitudeType *ALPHAI , ScalarType *BETA , ScalarType *VL , const OrdinalType &ldvl , ScalarType *VR , const OrdinalType &ldvr , OrdinalType *ilo , OrdinalType *ihi , MagnitudeType *lscale , MagnitudeType *rscale , MagnitudeType *abnrm , MagnitudeType *bbnrm , MagnitudeType *RCONDE , MagnitudeType *RCONDV , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *IWORK , OrdinalType *BWORK , OrdinalType *info) const
void GGEV (const char &JOBVL , const char &JOBVR , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb , MagnitudeType *ALPHAR , MagnitudeType *ALPHAI , ScalarType *BETA , ScalarType *VL , const OrdinalType &ldvl , ScalarType *VR , const OrdinalType &ldvr , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
void TRSEN (const char &JOB , const char &COMPQ , const OrdinalType *SELECT , const OrdinalType &n, ScalarType *T , const OrdinalType &ldt , ScalarType *Q , const OrdinalType &ldq , MagnitudeType *WR , MagnitudeType *WI , OrdinalType *M , ScalarType *S , MagnitudeType *SEP , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *IWORK , const OrdinalType &liwork , OrdinalType *info) const
void TGSEN (const OrdinalType &ijob , const OrdinalType &wantq , const OrdinalType &wantz , const OrdinalType *SELECT , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb , MagnitudeType *ALPHAR , MagnitudeType *ALPHAI , MagnitudeType *BETA , ScalarType *Q , const OrdinalType &ldq , ScalarType *Z , const OrdinalType &ldz , OrdinalType *M , MagnitudeType *PL , MagnitudeType *PR , MagnitudeType *DIF , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *IWORK , const OrdinalType &liwork , OrdinalType *info) const
void GGES (const char &JOBVL , const char &JOBVR , const char &SORT , OrdinalType &(*ptr2func )(ScalarType *, ScalarType *, ScalarType *), const OrdinalType &n, ScalarType *A , const OrdinalType &lda , ScalarType *B , const OrdinalType &ldb , OrdinalType *sdim , MagnitudeType *ALPHAR , MagnitudeType *ALPHAI , MagnitudeType *BETA , ScalarType *VL , const OrdinalType &ldvl , ScalarType *VR , const OrdinalType &ldvr , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *BWORK , OrdinalType *info) const
void GESVD (const char &JOBU , const char &JOBVT , const OrdinalType &m , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , MagnitudeType *S , ScalarType *U , const OrdinalType &ldu , ScalarType *V , const OrdinalType &ldv , ScalarType *WORK , const OrdinalType &lwork , MagnitudeType *RWORK , OrdinalType *info) const
Computes the singular values (and optionally, vectors) of a real matrix A
.
void ORMQR (const char &SIDE , const char &TRANS , const OrdinalType &m , const OrdinalType &n, const OrdinalType &k , const ScalarType *A , const OrdinalType &lda , const ScalarType *TAU , ScalarType *C , const OrdinalType &ldc , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
void ORM2R (const char &SIDE , const char &TRANS , const OrdinalType &m , const OrdinalType &n, const OrdinalType &k , const ScalarType *A , const OrdinalType &lda , const ScalarType *TAU , ScalarType *C , const OrdinalType &ldc , ScalarType *WORK , OrdinalType *const info) const
BLAS 2 version of ORMQR; known workspace size.
void UNMQR (const char &SIDE , const char &TRANS , const OrdinalType &m , const OrdinalType &n, const OrdinalType &k , const ScalarType *A , const OrdinalType &lda , const ScalarType *TAU , ScalarType *C , const OrdinalType &ldc , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Apply Householder reflectors (complex case).
void UNM2R (const char &SIDE , const char &TRANS , const OrdinalType &M , const OrdinalType &N , const OrdinalType &K , const ScalarType *A , const OrdinalType &LDA , const ScalarType *TAU , ScalarType *C , const OrdinalType &LDC , ScalarType *WORK , OrdinalType *const INFO ) const
BLAS 2 version of UNMQR; known workspace size.
void ORGQR (const OrdinalType &m , const OrdinalType &n, const OrdinalType &k , ScalarType *A , const OrdinalType &lda , const ScalarType *TAU , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Compute explicit Q factor from QR factorization (GEQRF) (real case).
void UNGQR (const OrdinalType &m , const OrdinalType &n, const OrdinalType &k , ScalarType *A , const OrdinalType &lda , const ScalarType *TAU , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Compute explicit QR factor from QR factorization (GEQRF) (complex case).
void ORGHR (const OrdinalType &n, const OrdinalType &ilo , const OrdinalType &ihi , ScalarType *A , const OrdinalType &lda , const ScalarType *TAU , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Generates a real orthogonal matrix Q
which is the product of ihi-ilo
elementary reflectors of order n
, as returned by GEHRD. On return Q
is stored in A
.
void ORMHR (const char &SIDE , const char &TRANS , const OrdinalType &m , const OrdinalType &n, const OrdinalType &ilo , const OrdinalType &ihi , const ScalarType *A , const OrdinalType &lda , const ScalarType *TAU , ScalarType *C , const OrdinalType &ldc , ScalarType *WORK , const OrdinalType &lwork , OrdinalType *info) const
Overwrites the general real m
by n
matrix C
with the product of C
and Q
, which is a product of ihi-ilo
elementary reflectors, as returned by GEHRD.
void TREVC (const char &SIDE , const char &HOWMNY , OrdinalType *select , const OrdinalType &n, const ScalarType *T , const OrdinalType &ldt , ScalarType *VL , const OrdinalType &ldvl , ScalarType *VR , const OrdinalType &ldvr , const OrdinalType &mm , OrdinalType *m , ScalarType *WORK , OrdinalType *info) const
void TREVC (const char &SIDE , const OrdinalType &n, const ScalarType *T , const OrdinalType &ldt , ScalarType *VL , const OrdinalType &ldvl , ScalarType *VR , const OrdinalType &ldvr , const OrdinalType &mm , OrdinalType *m , ScalarType *WORK , MagnitudeType *RWORK , OrdinalType *info) const
void TREXC (const char &COMPQ , const OrdinalType &n, ScalarType *T , const OrdinalType &ldt , ScalarType *Q , const OrdinalType &ldq , OrdinalType *ifst , OrdinalType *ilst , ScalarType *WORK , OrdinalType *info) const
void TGEVC (const char &SIDE , const char &HOWMNY , const OrdinalType *SELECT , const OrdinalType &n, const ScalarType *S , const OrdinalType &lds , const ScalarType *P , const OrdinalType &ldp , ScalarType *VL , const OrdinalType &ldvl , ScalarType *VR , const OrdinalType &ldvr , const OrdinalType &mm , OrdinalType *M , ScalarType *WORK , OrdinalType *info) const
void LARTG (const ScalarType &f , const ScalarType &g , MagnitudeType *c , ScalarType *s , ScalarType *r ) const
Gnerates a plane rotation that zeros out the second component of the input vector.
void LARFG (const OrdinalType &n, ScalarType *alpha , ScalarType *x, const OrdinalType &incx , ScalarType *tau) const
Generates an elementary reflector of order n
that zeros out the last n-1
components of the input vector.
void GEBAL (const char &JOBZ , const OrdinalType &n, ScalarType *A , const OrdinalType &lda , OrdinalType *ilo , OrdinalType *ihi , MagnitudeType *scale, OrdinalType *info) const
Balances a general matrix A , through similarity transformations to make the rows and columns as close in norm as possible.
void GEBAK (const char &JOBZ , const char &SIDE , const OrdinalType &n, const OrdinalType &ilo , const OrdinalType &ihi , const MagnitudeType *scale, const OrdinalType &m , ScalarType *V , const OrdinalType &ldv , OrdinalType *info) const
Forms the left or right eigenvectors of a general matrix that has been balanced by GEBAL by backward transformation of the computed eigenvectors V
.
ScalarType LARND (const OrdinalType &idist , OrdinalType *seed ) const
Returns a random number from a uniform or normal distribution.
void LARNV (const OrdinalType &idist , OrdinalType *seed , const OrdinalType &n, ScalarType *v ) const
Returns a vector of random numbers from a chosen distribution.
ScalarType LAMCH (const char &CMACH ) const
Determines machine parameters for floating point characteristics.
OrdinalType ILAENV (const OrdinalType &ispec , const std::string &NAME , const std::string &OPTS , const OrdinalType &N1 =-1, const OrdinalType &N2 =-1, const OrdinalType &N3 =-1, const OrdinalType &N4 =-1) const
Chooses problem-dependent parameters for the local environment.
ScalarType LAPY2 (const ScalarType &x, const ScalarType &y ) const
Computes x^2 + y^2 safely, to avoid overflow.
static void setTracebackMode (int tracebackModeValue )
Set the value of the Object error traceback report mode.
static int getTracebackMode ()
Get the value of the Object error traceback report mode.
static int tracebackMode = -1
Flops * flopCounter_
std::ostream & operator<< (std::ostream &os , const Teuchos::Object &obj)
Print the given Object to the given output stream.
A class for representing and solving banded dense linear systems.
Template Parameters
OrdinalType The index type used by the linear algebra implementation. This should always be int
.
ScalarType The type of entries in the matrix.
Introduction
This class defines a banded dense matrix, which may have any number of rows or columns (not necessarily equal). It's called "serial" because the matrix lives in a single memory space. Thus, it's the kind of matrix that one might give to the BLAS or LAPACK , not a distributed matrix like one would give to ScaLAPACK.
This class also has methods for computing the (banded) LU factorization of the matrix, and solving linear systems with the matrix. We use instances of SerialDenseVector to represent the right-hand side b or the solution x in the linear system . The instance of this class used store the banded matrix must contain KL extra superdiagonals to store the L and U factors (see details below).
Users have the option to do equilibration before factoring the matrix. This may improve accuracy when solving ill-conditioned problems.
SerialBandDenseSolver and LAPACK
Teuchos ' LAPACK class wraps LAPACK 's LU factorizations, including the banded factorizations. It thus gives access to most of the same functionality as SerialBandDenseSolver . The main difference is that SerialBandDenseSolver offers a higher level of abstraction. It hides the details of which LAPACK routines to call. Furthermore, if you have built Teuchos with support for the third-party library Eigen, SerialBandDenseSolver lets you solve linear systems for ScalarType
other than the four supported by the LAPACK library.
Constructing SerialBandDenseSolver objects
There is a single Teuchos::SerialBandDenseSolver constructor. However, the matrix, right hand side and solution vectors must be set prior to executing most methods in this class.
Setting vectors used for linear solves
The matrix A , the left hand side X and the right hand side B (when solving AX = B , for X), can be set by appropriate set methods. Each of these three objects must be a SerialDenseMatrix or a SerialDenseVector object. The set methods are as follows:
Format of the matrix A
The SerialBandDenseMatrix must contain KL extra superdiagonals to store the L and U factors, where KL is the upper bandwidth. Consider using the non-member conversion routines generalToBanded and bandedToGeneral if the full SerialDenseMatrix is already in storage. However, it is more efficient simply to construct the SerialBandDenseMatrix with the desired parameters and use the provided matrix access operators so that the full rectangular matrix need not be stored. The conversion routine generalToBanded has a flag to store the input Teuchos::SerialDenseMatrix in banded format with KL extra superdiagonals so this class can use it. Again, it is more efficient to simply construct a Teuchos::SerialBandDenseMatrix object with KL extra superdiagonals than are needed for the matrix data and fill the matrix using the matrix access operators.
See the documentation of Teuchos::SerialBandDenseMatrix for further details on the storage format.
Vector and Utility Functions
Once a Teuchos::SerialBandDenseSolver is constructed, several mathematical functions can be applied to the object. Specifically:
Conversion between storage formats
Factorizations
Solves
Condition estimates
Equilibration
Norms
Strategies for Solving Linear Systems
In many cases, linear systems can be accurately solved by simply computing the LU factorization of the matrix and then performing a forward back solve with a given set of right hand side vectors. However, in some instances, the factorization may be very poorly conditioned and this simple approach may not work. In these situations, equilibration and iterative refinement may improve the accuracy, or prevent a breakdown in the factorization.
SerialBandDenseSolver will use equilibration with the factorization if, once the object is constructed and before it is factored, you call the function factorWithEquilibration(true) to force equilibration to be used. If you are uncertain if equilibration should be used, you may call the function shouldEquilibrate() which will return true if equilibration could possibly help. shouldEquilibrate() uses guidelines specified in the LAPACK User Guide, namely if SCOND < 0.1 and AMAX < Underflow or AMAX > Overflow, to determine if equilibration might be useful.
SerialBandDenseSolver will use iterative refinement after a forward/back solve if you call solveToRefinedSolution(true) . It will also compute forward and backward error estimates if you call estimateSolutionErrors(true) . Access to the forward (back) error estimates is available via FERR() (BERR() ).
Examples using SerialBandDenseSolver can be found in the Teuchos test directories.
Definition at line 166 of file Teuchos_SerialBandDenseSolver.hpp .