Namespaces | |
namespace | blasLapack |
namespace | CGLinearSolverInternal |
namespace | elpaScalaOpInternal |
namespace | LanczosExtremeEigenSolverInternal |
namespace | LAPACKSupport |
namespace | OrthonormalizationFunctionsInternal |
namespace | types |
Classes | |
class | ChebyshevFilteredEigenSolver |
A derived class of OperatorContext to encapsulate the action of a discrete operator on vectors, matrices, etc. More... | |
struct | EigenSolverError |
class | EigenSolverErrorMsg |
class | ElpaScalapackManager |
Manager class for ELPA and ScaLAPACK. More... | |
class | IdentityOperatorContext |
Abstract class to encapsulate the action of a discrete operator on vectors, matrices, etc. More... | |
class | JacobiPreconditioner |
A class to encapsulate the Jacobi preconditioner in a linear or non-linear solve. More... | |
class | LanczosExtremeEigenSolver |
A derived class of OperatorContext to encapsulate the action of a discrete operator on vectors, matrices, etc. More... | |
struct | LapackError |
class | LapackErrorMsg |
A class to map Error to a message. More... | |
class | LinAlgOpContext |
class | LinAlgOpContextDefaults |
class | LinearAlgebraProfiler |
class | LinearSolverDefaults |
struct | LinearSolverError |
class | LinearSolverErrorMsg |
A class to map Error to a message. More... | |
class | LinearSolverImpl |
Abstract class that implements the LinearSolver algorithm. For example, the derived classes of it, such as CGLinearSolver, GMRESLinearSolver implement the Conjugate-Gradient (CG) and Generalized Minimum Residual (GMRES) Krylov subspace based approches, respectively, to solve a linear system of equations. More... | |
class | MultiPassOrthoDefaults |
class | MultiVector |
An class template to encapsulate a MultiVector. A MultiVector is a collection of \(N\) vectors belonging to the same finite-dimensional vector space, where usual notion of vector size denotes the dimension of the vector space. Note that this in the mathematical sense and not in the sense of an multi-dimensional array.The MultiVector is stored contiguously with the vector index being the fastest index, or in other words a matrix of size \(M \times N\) in row major format with \(M \) denoting the dimension of the vector space (size of individual vector). More... | |
struct | NewtonRaphsonError |
class | NewtonRaphsonErrorMsg |
class | NewtonRaphsonSolver |
A class that implements the Newton-Raphson solver to find root of a function. More... | |
class | NewtonRaphsonSolverFunction |
class | OperatorContext |
Abstract class to encapsulate the action of a discrete operator on vectors, matrices, etc. More... | |
struct | OrthonormalizationError |
class | OrthonormalizationErrorMsg |
class | OrthonormalizationFunctions |
class | Preconditioner |
Abstract class to encapsulate a preconditioner. More... | |
class | PreconditionerJacobi |
Class to encapsulate the Jacobi preconditioner. More... | |
class | PreconditionerNone |
Class to encapsulate the NONE preconditioner. Just takes in a vector and returns it. More... | |
class | PrintControlDefaults |
class | ProcessGrid |
class | RayleighRitzDefaults |
class | RayleighRitzEigenSolver |
A derived class of OperatorContext to encapsulate the action of a discrete operator on vectors, matrices, etc. More... | |
struct | ScalapackError |
class | ScalapackErrorMsg |
A class to map Error to a message. More... | |
class | ScaLAPACKMatrix |
Scalapack wrapper adapted from dealii library and extended implementation to complex datatype. More... | |
class | Vector |
A class that encapsulates a vector. This is a vector in the mathematical sense and not in the sense of an array or STL container. This class handles both serial and distributed vector in a unfied way. There are different constructors provided for the serial and distributed case. More... | |
class | VectorAttributes |
Functions | |
void | dgemv_ (const char *TRANS, const unsigned int *M, const unsigned int *N, const double *alpha, const double *A, const unsigned int *LDA, const double *X, const unsigned int *INCX, const double *beta, double *C, const unsigned int *INCY) |
void | sgemv_ (const char *TRANS, const unsigned int *M, const unsigned int *N, const float *alpha, const float *A, const unsigned int *LDA, const float *X, const unsigned int *INCX, const float *beta, float *C, const unsigned int *INCY) |
void | zgemv_ (const char *TRANS, const unsigned int *M, const unsigned int *N, const std::complex< double > *alpha, const std::complex< double > *A, const unsigned int *LDA, const std::complex< double > *X, const unsigned int *INCX, const std::complex< double > *beta, std::complex< double > *C, const unsigned int *INCY) |
void | cgemv_ (const char *TRANS, const unsigned int *M, const unsigned int *N, const std::complex< float > *alpha, const std::complex< float > *A, const unsigned int *LDA, const std::complex< float > *X, const unsigned int *INCX, const std::complex< float > *beta, std::complex< float > *C, const unsigned int *INCY) |
void | dsymv_ (const char *UPLO, const unsigned int *N, const double *alpha, const double *A, const unsigned int *LDA, const double *X, const unsigned int *INCX, const double *beta, double *C, const unsigned int *INCY) |
void | dgesv_ (int *n, int *nrhs, double *a, int *lda, int *ipiv, double *b, int *ldb, int *info) |
void | zgesv_ (int *n, int *nrhs, std::complex< double > *a, int *lda, int *ipiv, std::complex< double > *b, int *ldb, int *info) |
void | dsysv_ (const char *UPLO, const int *n, const int *nrhs, double *a, const int *lda, int *ipiv, double *b, const int *ldb, double *work, const int *lwork, int *info) |
void | dsteqr_ (const char *jobz, const int *n, double *D, double *E, double *Z, const int *lda, double *work, int *info) |
void | zsteqr_ (const char *jobz, const int *n, double *D, double *E, std::complex< double > *Z, const int *lda, std::complex< double > *work, int *info) |
void | dscal_ (const unsigned int *n, const double *alpha, double *x, const unsigned int *inc) |
void | sscal_ (const unsigned int *n, const float *alpha, float *x, const unsigned int *inc) |
void | zscal_ (const unsigned int *n, const std::complex< double > *alpha, std::complex< double > *x, const unsigned int *inc) |
void | zdscal_ (const unsigned int *n, const double *alpha, std::complex< double > *x, const unsigned int *inc) |
void | daxpy_ (const unsigned int *n, const double *alpha, const double *x, const unsigned int *incx, double *y, const unsigned int *incy) |
void | saxpy_ (const unsigned int *n, const float *alpha, const float *x, const unsigned int *incx, float *y, const unsigned int *incy) |
void | dgemm_ (const char *transA, const char *transB, const unsigned int *m, const unsigned int *n, const unsigned int *k, const double *alpha, const double *A, const unsigned int *lda, const double *B, const unsigned int *ldb, const double *beta, double *C, const unsigned int *ldc) |
void | sgemm_ (const char *transA, const char *transB, const unsigned int *m, const unsigned int *n, const unsigned int *k, const float *alpha, const float *A, const unsigned int *lda, const float *B, const unsigned int *ldb, const float *beta, float *C, const unsigned int *ldc) |
void | dsyevd_ (const char *jobz, const char *uplo, const unsigned int *n, double *A, const unsigned int *lda, double *w, double *work, const unsigned int *lwork, int *iwork, const unsigned int *liwork, int *info) |
void | dsygvx_ (const int *itype, const char *jobz, const char *range, const char *uplo, const int *n, double *a, const int *lda, double *b, const int *ldb, const double *vl, const double *vu, const int *il, const int *iu, const double *abstol, int *m, double *w, double *z, const int *ldz, double *work, const int *lwork, int *iwork, int *ifail, int *info) |
void | dsygv_ (const int *itype, const char *jobz, const char *uplo, const int *n, double *a, const int *lda, double *b, const int *ldb, double *w, double *work, const int *lwork, int *info) |
void | zhegv_ (const int *itype, const char *jobz, const char *uplo, const int *n, std::complex< double > *a, const int *lda, std::complex< double > *b, const int *ldb, double *w, std::complex< double > *work, const int *lwork, int *info) |
void | dsyevx_ (const char *jobz, const char *range, const char *uplo, const int *n, double *a, const int *lda, const double *vl, const double *vu, const int *il, const int *iu, const double *abstol, int *m, double *w, double *z, const int *ldz, double *work, const int *lwork, int *iwork, int *ifail, int *info) |
double | dlamch_ (const char *cmach) |
void | dsyevr_ (const char *jobz, const char *range, const char *uplo, const unsigned int *n, double *A, const unsigned int *lda, const double *vl, const double *vu, const unsigned int *il, const unsigned int *iu, const double *abstol, const unsigned int *m, double *w, double *Z, const unsigned int *ldz, unsigned int *isuppz, double *work, const int *lwork, int *iwork, const int *liwork, int *info) |
void | dsyrk_ (const char *uplo, const char *trans, const unsigned int *n, const unsigned int *k, const double *alpha, const double *A, const unsigned int *lda, const double *beta, double *C, const unsigned int *ldc) |
void | dsyr_ (const char *uplo, const unsigned int *n, const double *alpha, const double *X, const unsigned int *incx, double *A, const unsigned int *lda) |
void | dsyr2_ (const char *uplo, const unsigned int *n, const double *alpha, const double *x, const unsigned int *incx, const double *y, const unsigned int *incy, double *a, const unsigned int *lda) |
void | dcopy_ (const unsigned int *n, const double *x, const unsigned int *incx, double *y, const unsigned int *incy) |
void | scopy_ (const unsigned int *n, const float *x, const unsigned int *incx, float *y, const unsigned int *incy) |
void | zgemm_ (const char *transA, const char *transB, const unsigned int *m, const unsigned int *n, const unsigned int *k, const std::complex< double > *alpha, const std::complex< double > *A, const unsigned int *lda, const std::complex< double > *B, const unsigned int *ldb, const std::complex< double > *beta, std::complex< double > *C, const unsigned int *ldc) |
void | cgemm_ (const char *transA, const char *transB, const unsigned int *m, const unsigned int *n, const unsigned int *k, const std::complex< float > *alpha, const std::complex< float > *A, const unsigned int *lda, const std::complex< float > *B, const unsigned int *ldb, const std::complex< float > *beta, std::complex< float > *C, const unsigned int *ldc) |
void | zheevd_ (const char *jobz, const char *uplo, const unsigned int *n, std::complex< double > *A, const unsigned int *lda, double *w, std::complex< double > *work, const unsigned int *lwork, double *rwork, const unsigned int *lrwork, int *iwork, const unsigned int *liwork, int *info) |
void | zheevr_ (const char *jobz, const char *range, const char *uplo, const unsigned int *n, std::complex< double > *A, const unsigned int *lda, const double *vl, const double *vu, const unsigned int *il, const unsigned int *iu, const double *abstol, const unsigned int *m, double *w, std::complex< double > *Z, const unsigned int *ldz, unsigned int *isuppz, std::complex< double > *work, const int *lwork, double *rwork, const int *lrwork, int *iwork, const int *liwork, int *info) |
void | zherk_ (const char *uplo, const char *trans, const unsigned int *n, const unsigned int *k, const double *alpha, const std::complex< double > *A, const unsigned int *lda, const double *beta, std::complex< double > *C, const unsigned int *ldc) |
void | zcopy_ (const unsigned int *n, const std::complex< double > *x, const unsigned int *incx, std::complex< double > *y, const unsigned int *incy) |
void | ccopy_ (const unsigned int *n, const std::complex< float > *x, const unsigned int *incx, std::complex< float > *y, const unsigned int *incy) |
std::complex< double > | zdotc_ (const unsigned int *N, const std::complex< double > *X, const unsigned int *INCX, const std::complex< double > *Y, const unsigned int *INCY) |
double | ddot_ (const unsigned int *N, const double *X, const unsigned int *INCX, const double *Y, const unsigned int *INCY) |
double | dnrm2_ (const unsigned int *n, const double *x, const unsigned int *incx) |
double | dznrm2_ (const unsigned int *n, const std::complex< double > *x, const unsigned int *incx) |
double | sasum_ (const unsigned int *n, const float *x, const unsigned int *incx) |
double | dasum_ (const unsigned int *n, const double *x, const unsigned int *incx) |
double | scasum_ (const unsigned int *n, const std::complex< float > *x, const unsigned int *incx) |
double | dzasum_ (const unsigned int *n, const std::complex< double > *x, const unsigned int *incx) |
unsigned int | isamax_ (const unsigned int *n, const float *x, const unsigned int *incx) |
unsigned int | idamax_ (const unsigned int *n, const double *x, const unsigned int *incx) |
unsigned int | icamax_ (const unsigned int *n, const std::complex< float > *x, const unsigned int *incx) |
unsigned int | izamax_ (const unsigned int *n, const std::complex< double > *x, const unsigned int *incx) |
void | zaxpy_ (const unsigned int *n, const std::complex< double > *alpha, const std::complex< double > *x, const unsigned int *incx, std::complex< double > *y, const unsigned int *incy) |
void | caxpy_ (const unsigned int *n, const std::complex< float > *alpha, const std::complex< float > *x, const unsigned int *incx, std::complex< float > *y, const unsigned int *incy) |
void | dpotrf_ (const char *uplo, const unsigned int *n, double *a, const unsigned int *lda, int *info) |
void | dpotri_ (const char *uplo, const unsigned int *n, double *A, const unsigned int *lda, int *info) |
void | zpotrf_ (const char *uplo, const unsigned int *n, std::complex< double > *a, const unsigned int *lda, int *info) |
void | dtrtri_ (const char *uplo, const char *diag, const unsigned int *n, double *a, const unsigned int *lda, int *info) |
void | ztrtri_ (const char *uplo, const char *diag, const unsigned int *n, std::complex< double > *a, const unsigned int *lda, int *info) |
void | dgetrf_ (int *M, int *N, double *A, int *lda, int *IPIV, int *INFO) |
void | dgetri_ (int *N, double *A, int *lda, int *IPIV, double *WORK, int *lwork, int *INFO) |
void | zgetrf_ (int *M, int *N, std::complex< double > *A, int *lda, int *IPIV, int *INFO) |
void | zgetri_ (int *N, std::complex< double > *A, int *lda, int *IPIV, std::complex< double > *WORK, int *lwork, int *INFO) |
CGLinearSolver (const size_type maxIter, const double absoluteTol, const double relativeTol, const double divergenceTol, LinearAlgebraProfiler profiler=LinearAlgebraProfiler()) | |
A class that implements the Conjugate-Gradient (CG) based Krylov subspace algorithm to solve a linear system of (i.e., solve for \( \mathbf{Ax}=\mathbf{b}$\f).
@see <em>An Introduction to the Conjugate Gradient Method Without the
Agonizing Pain</em>, Jonathan Richard Shewchuk
(<a
href="https://www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf">Painless
Conjugate-Gradient</a>)
@see <em> Numerical Linear Algebra </em>, Trefethen, Lloyd N., and David Bau III., Vol. 50. Siam, 1997.
@tparam ValueTypeOperator The datatype (float, double, complex<double>,
etc.) for the operator (e.g. Matrix) associated with the linear solve
@tparam ValueTypeOperand The datatype (float, double, complex<double>,
etc.) of the vector, matrices, etc.
on which the operator will act
@tparam memorySpace The meory space (HOST, DEVICE, HOST_PINNED, etc.)
in which the data of the operator
and its operands reside
*/
template <typename ValueTypeOperator,
typename ValueTypeOperand,
utils::MemorySpace memorySpace>
class CGLinearSolver : public LinearSolverImpl<ValueTypeOperator,
ValueTypeOperand,
memorySpace>
{
public:
/**
@brief Constructor
@param[in] maxIter Maximum number of iterations to allow the solver
to iterate. Generally, this determines the maximum size of the Krylov
subspace that will be used.
@param[in] absoluteTol Convergence tolerane on the absolute \) L_2 $\f norm of the residual (i.e., on \(||\mathbf{Ax}-\mathbf{b}||$\f)
@param[in] relativeTol Convergence tolerane on the relative L2 norm of
the residual (i.e., on \)||\mathbf{Ax}-\mathbf{b}||/||\mathbf{b}||$\f) More... | |
~CGLinearSolver ()=default | |
Default Destructor. More... | |
LinearSolverError | solve (LinearSolverFunction< ValueTypeOperator, ValueTypeOperand, memorySpace > &linearSolverFunction) override |
Function that initiates the linear solve. More... | |
template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace> | |
void | ChebyshevFilter (const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > &A, const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > &BInv, MultiVector< ValueTypeOperand, memorySpace > &eigenSubspaceGuess, const size_type polynomialDegree, const double wantedSpectrumLowerBound, const double wantedSpectrumUpperBound, const double unWantedSpectrumUpperBound, MultiVector< blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand >, memorySpace > &filteredSubspace) |
A class to get chebyshevFiletered subspace "filteredSubspace" from original subspace "eigenSubspaceGuess". Note both of these vectors have to be apriori allocated and both will change after the function is called. More... | |
template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace> | |
void | ChebyshevFilterGEP (const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > &A, const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > &B, const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > &BInv, MultiVector< ValueTypeOperand, memorySpace > &eigenSubspaceGuess, const size_type polynomialDegree, const double wantedSpectrumLowerBound, const double wantedSpectrumUpperBound, const double unWantedSpectrumUpperBound, MultiVector< blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand >, memorySpace > &filteredSubspace) |
template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace> | |
void | ResidualChebyshevFilterGEP (const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > &A, const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > &B, const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > &BInv, std::vector< blasLapack::real_type< blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand > > > &eigenvalues, MultiVector< ValueTypeOperand, memorySpace > &eigenSubspaceGuess, const size_type polynomialDegree, const double wantedSpectrumLowerBound, const double wantedSpectrumUpperBound, const double unWantedSpectrumUpperBound, MultiVector< blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand >, memorySpace > &filteredSubspace) |
template<typename ValueType , dftefe::utils::MemorySpace memorySpace> | |
void | swap (MultiVector< ValueType, memorySpace > &X, MultiVector< ValueType, memorySpace > &Y) |
Swaps the data of u with this multivector. More... | |
template<typename ValueType1 , typename ValueType2 , utils::MemorySpace memorySpace> | |
void | add (blasLapack::scalar_type< ValueType1, ValueType2 > a, const MultiVector< ValueType1, memorySpace > &u, blasLapack::scalar_type< ValueType1, ValueType2 > b, const MultiVector< ValueType2, memorySpace > &v, MultiVector< blasLapack::scalar_type< ValueType1, ValueType2 >, memorySpace > &w) |
Perform \( w = au + bv \). More... | |
template<typename ValueType1 , typename ValueType2 , utils::MemorySpace memorySpace> | |
void | add (const std::vector< blasLapack::scalar_type< ValueType1, ValueType2 > > &a, const MultiVector< ValueType1, memorySpace > &u, const std::vector< blasLapack::scalar_type< ValueType1, ValueType2 > > &b, const MultiVector< ValueType2, memorySpace > &v, MultiVector< blasLapack::scalar_type< ValueType1, ValueType2 >, memorySpace > &w) |
Perform \( w = au + bv \). More... | |
template<typename ValueType1 , typename ValueType2 , utils::MemorySpace memorySpace> | |
void | dot (const MultiVector< ValueType1, memorySpace > &u, const MultiVector< ValueType2, memorySpace > &v, blasLapack::scalar_type< ValueType1, ValueType2 > *dotProds, const blasLapack::ScalarOp &opU, const blasLapack::ScalarOp &opV) |
template<typename ValueType1 , typename ValueType2 , utils::MemorySpace memorySpace> | |
void | dot (const MultiVector< ValueType1, memorySpace > &u, const MultiVector< ValueType2, memorySpace > &v, std::vector< blasLapack::scalar_type< ValueType1, ValueType2 > > &dotProds, const blasLapack::ScalarOp &opU, const blasLapack::ScalarOp &opV) |
template void | ProcessGrid::send_to_inactive< std::complex< double > > (std::complex< double > *, const int) const |
void | Cblacs_pinfo (int *rank, int *nprocs) |
void | Cblacs_get (int icontxt, int what, int *val) |
void | Cblacs_gridinit (int *context, const char *order, int grid_height, int grid_width) |
void | Cblacs_gridinfo (int context, int *grid_height, int *grid_width, int *grid_row, int *grid_col) |
void | Cblacs_pcoord (int ictxt, int pnum, int *prow, int *pcol) |
void | Cblacs_gridexit (int context) |
void | Cblacs_barrier (int, const char *) |
void | Cblacs_exit (int error_code) |
void | Cdgerv2d (int context, int M, int N, double *A, int lda, int rsrc, int csrc) |
void | Csgerv2d (int context, int M, int N, float *A, int lda, int rsrc, int csrc) |
void | Cdgesd2d (int context, int M, int N, double *A, int lda, int rdest, int cdest) |
void | Csgesd2d (int context, int M, int N, float *A, int lda, int rdest, int cdest) |
int | Csys2blacs_handle (utils::mpi::MPIComm comm) |
int | numroc_ (const int *n, const int *nb, const int *iproc, const int *isproc, const int *nprocs) |
void | pzlacgv_ (const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const int *INCX) |
void | pdpotrf_ (const char *UPLO, const int *N, double *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | pspotrf_ (const char *UPLO, const int *N, float *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | pzpotrf_ (const char *UPLO, const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | pdgetrf_ (const int *m, const int *n, double *A, const int *IA, const int *JA, const int *DESCA, int *ipiv, int *INFO) |
void | psgetrf_ (const int *m, const int *n, float *A, const int *IA, const int *JA, const int *DESCA, int *ipiv, int *INFO) |
void | pzgetrf_ (const int *m, const int *n, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, int *ipiv, int *INFO) |
void | pdpotri_ (const char *UPLO, const int *N, double *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | pspotri_ (const char *UPLO, const int *N, float *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | pzpotri_ (const char *UPLO, const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | pdgetri_ (const int *N, double *A, const int *IA, const int *JA, const int *DESCA, const int *ipiv, double *work, int *lwork, int *iwork, int *liwork, int *info) |
void | psgetri_ (const int *N, float *A, const int *IA, const int *JA, const int *DESCA, const int *ipiv, float *work, int *lwork, int *iwork, int *liwork, int *info) |
void | pzgetri_ (const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const int *ipiv, std::complex< double > *work, int *lwork, int *iwork, int *liwork, int *info) |
void | pdtrtri_ (const char *UPLO, const char *DIAG, const int *N, double *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | pstrtri_ (const char *UPLO, const char *DIAG, const int *N, float *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | pztrtri_ (const char *UPLO, const char *DIAG, const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | pdpocon_ (const char *uplo, const int *N, const double *A, const int *IA, const int *JA, const int *DESCA, const double *ANORM, double *RCOND, double *WORK, const int *LWORK, int *IWORK, const int *LIWORK, int *INFO) |
void | pspocon_ (const char *uplo, const int *N, const float *A, const int *IA, const int *JA, const int *DESCA, const float *ANORM, float *RCOND, float *WORK, const int *LWORK, int *IWORK, const int *LIWORK, int *INFO) |
double | pdlansy_ (const char *norm, const char *uplo, const int *N, const double *A, const int *IA, const int *JA, const int *DESCA, double *work) |
float | pslansy_ (const char *norm, const char *uplo, const int *N, const float *A, const int *IA, const int *JA, const int *DESCA, float *work) |
int | ilcm_ (const int *M, const int *N) |
int | iceil_ (const int *i1, const int *i2) |
void | descinit_ (int *desc, const int *m, const int *n, const int *mb, const int *nb, const int *irsrc, const int *icsrc, const int *ictxt, const int *lld, int *info) |
int | indxl2g_ (const int *indxloc, const int *nb, const int *iproc, const int *isrcproc, const int *nprocs) |
void | pdgesv_ (const int *n, const int *nrhs, double *A, const int *ia, const int *ja, const int *desca, int *ipiv, double *B, const int *ib, const int *jb, const int *descb, int *info) |
void | psgesv_ (const int *n, const int *nrhs, float *A, const int *ia, const int *ja, const int *desca, int *ipiv, float *B, const int *ib, const int *jb, const int *descb, int *info) |
void | pdgemm_ (const char *transa, const char *transb, const int *m, const int *n, const int *k, const double *alpha, const double *A, const int *IA, const int *JA, const int *DESCA, const double *B, const int *IB, const int *JB, const int *DESCB, const double *beta, double *C, const int *IC, const int *JC, const int *DESCC) |
void | psgemm_ (const char *transa, const char *transb, const int *m, const int *n, const int *k, const float *alpha, const float *A, const int *IA, const int *JA, const int *DESCA, const float *B, const int *IB, const int *JB, const int *DESCB, const float *beta, float *C, const int *IC, const int *JC, const int *DESCC) |
void | pzgemm_ (const char *transa, const char *transb, const int *m, const int *n, const int *k, const std::complex< double > *alpha, const std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const std::complex< double > *B, const int *IB, const int *JB, const int *DESCB, const std::complex< double > *beta, std::complex< double > *C, const int *IC, const int *JC, const int *DESCC) |
double | pdlange_ (char const *norm, const int *m, const int *n, const double *A, const int *ia, const int *ja, const int *desca, double *work) |
float | pslange_ (const char *norm, const int *m, const int *n, const float *A, const int *ia, const int *ja, const int *desca, float *work) |
int | indxg2p_ (const int *glob, const int *nb, const int *iproc, const int *isproc, const int *nprocs) |
void | pdsyev_ (const char *jobz, const char *uplo, const int *m, double *A, const int *ia, const int *ja, int *desca, double *w, double *z, const int *iz, const int *jz, int *descz, double *work, const int *lwork, int *info) |
void | pssyev_ (const char *jobz, const char *uplo, const int *m, float *A, const int *ia, const int *ja, int *desca, float *w, float *z, const int *iz, const int *jz, int *descz, float *work, const int *lwork, int *info) |
void | pzheev_ (const char *jobz, const char *uplo, const int *m, std::complex< double > *A, const int *ia, const int *ja, int *desca, double *w, std::complex< double > *z, const int *iz, const int *jz, int *descz, std::complex< double > *work, const int *lwork, int *info) |
void | pdlacpy_ (const char *uplo, const int *m, const int *n, const double *A, const int *ia, const int *ja, const int *desca, double *B, const int *ib, const int *jb, const int *descb) |
void | pslacpy_ (const char *uplo, const int *m, const int *n, const float *A, const int *ia, const int *ja, const int *desca, float *B, const int *ib, const int *jb, const int *descb) |
void | pdgemr2d_ (const int *m, const int *n, const double *A, const int *ia, const int *ja, const int *desca, double *B, const int *ib, const int *jb, const int *descb, const int *ictxt) |
void | psgemr2d_ (const int *m, const int *n, const float *A, const int *ia, const int *ja, const int *desca, float *B, const int *ib, const int *jb, const int *descb, const int *ictxt) |
double | pdlamch_ (const int *ictxt, const char *cmach) |
float | pslamch_ (const int *ictxt, const char *cmach) |
void | pdsyevx_ (const char *jobz, const char *range, const char *uplo, const int *n, double *A, const int *ia, const int *ja, const int *desca, const double *VL, const double *VU, const int *il, const int *iu, const double *abstol, const int *m, const int *nz, double *w, double *orfac, double *Z, const int *iz, const int *jz, const int *descz, double *work, int *lwork, int *iwork, int *liwork, int *ifail, int *iclustr, double *gap, int *info) |
void | pssyevx_ (const char *jobz, const char *range, const char *uplo, const int *n, float *A, const int *ia, const int *ja, const int *desca, const float *VL, const float *VU, const int *il, const int *iu, const float *abstol, const int *m, const int *nz, float *w, float *orfac, float *Z, const int *iz, const int *jz, const int *descz, float *work, int *lwork, int *iwork, int *liwork, int *ifail, int *iclustr, float *gap, int *info) |
void | pzheevx_ (const char *jobz, const char *range, const char *uplo, const int *n, std::complex< double > *A, const int *ia, const int *ja, const int *desca, const double *VL, const double *VU, const int *il, const int *iu, const double *abstol, const int *m, const int *nz, double *w, double *orfac, std::complex< double > *Z, const int *iz, const int *jz, const int *descz, std::complex< double > *work, int *lwork, int *iwork, int *liwork, int *ifail, int *iclustr, double *gap, int *info) |
void | pdgesvd_ (const char *jobu, const char *jobvt, const int *m, const int *n, double *A, const int *ia, const int *ja, const int *desca, double *S, double *U, const int *iu, const int *ju, const int *descu, double *VT, const int *ivt, const int *jvt, const int *descvt, double *work, int *lwork, int *info) |
void | psgesvd_ (const char *jobu, const char *jobvt, const int *m, const int *n, float *A, const int *ia, const int *ja, const int *desca, float *S, float *U, const int *iu, const int *ju, const int *descu, float *VT, const int *ivt, const int *jvt, const int *descvt, float *work, int *lwork, int *info) |
void | pdgels_ (const char *trans, const int *m, const int *n, const int *nrhs, double *A, const int *ia, const int *ja, const int *desca, double *B, const int *ib, const int *jb, const int *descb, double *work, int *lwork, int *info) |
void | psgels_ (const char *trans, const int *m, const int *n, const int *nrhs, float *A, const int *ia, const int *ja, const int *desca, float *B, const int *ib, const int *jb, const int *descb, float *work, int *lwork, int *info) |
void | pdgeadd_ (const char *transa, const int *m, const int *n, const double *alpha, const double *A, const int *IA, const int *JA, const int *DESCA, const double *beta, double *C, const int *IC, const int *JC, const int *DESCC) |
void | psgeadd_ (const char *transa, const int *m, const int *n, const float *alpha, const float *A, const int *IA, const int *JA, const int *DESCA, const float *beta, float *C, const int *IC, const int *JC, const int *DESCC) |
void | pzgeadd_ (const char *transa, const int *m, const int *n, const std::complex< double > *alpha, const std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const std::complex< double > *beta, std::complex< double > *C, const int *IC, const int *JC, const int *DESCC) |
void | pdtran_ (const int *m, const int *n, const double *alpha, const double *A, const int *IA, const int *JA, const int *DESCA, const double *beta, double *C, const int *IC, const int *JC, const int *DESCC) |
void | pstran_ (const int *m, const int *n, const float *alpha, const float *A, const int *IA, const int *JA, const int *DESCA, const float *beta, float *C, const int *IC, const int *JC, const int *DESCC) |
void | pdsyevr_ (const char *jobz, const char *range, const char *uplo, const int *n, double *A, const int *IA, const int *JA, const int *DESCA, const double *VL, const double *VU, const int *IL, const int *IU, int *m, int *nz, double *w, double *Z, const int *IZ, const int *JZ, const int *DESCZ, double *work, int *lwork, int *iwork, int *liwork, int *info) |
void | pssyevr_ (const char *jobz, const char *range, const char *uplo, const int *n, float *A, const int *IA, const int *JA, const int *DESCA, const float *VL, const float *VU, const int *IL, const int *IU, int *m, int *nz, float *w, float *Z, const int *IZ, const int *JZ, const int *DESCZ, float *work, int *lwork, int *iwork, int *liwork, int *info) |
void | pzheevr_ (const char *jobz, const char *range, const char *uplo, const int *n, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const double *VL, const double *VU, const int *IL, const int *IU, int *m, int *nz, double *w, std::complex< double > *Z, const int *IZ, const int *JZ, const int *DESCZ, std::complex< double > *work, int *lwork, int *iwork, int *liwork, int *info) |
template<typename number > | |
void | Cgerv2d (int, int, int, number *, int, int, int) |
void | Cgerv2d (int context, int M, int N, double *A, int lda, int rsrc, int csrc) |
void | Cgerv2d (int context, int M, int N, float *A, int lda, int rsrc, int csrc) |
template<typename number > | |
void | Cgesd2d (int, int, int, number *, int, int, int) |
void | Cgesd2d (int context, int M, int N, double *A, int lda, int rdest, int cdest) |
void | Cgesd2d (int context, int M, int N, float *A, int lda, int rdest, int cdest) |
void | pplacgv (const int *N, double *A, const int *IA, const int *JA, const int *DESCA, const int *INCX) |
void | pplacgv (const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const int *INCX) |
template<typename number > | |
void | ppotrf (const char *, const int *, number *, const int *, const int *, const int *, int *) |
void | ppotrf (const char *UPLO, const int *N, double *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | ppotrf (const char *UPLO, const int *N, float *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | ppotrf (const char *UPLO, const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
template<typename number > | |
void | pgetrf (const int *, const int *, number *, const int *, const int *, const int *, int *, int *) |
void | pgetrf (const int *m, const int *n, double *A, const int *IA, const int *JA, const int *DESCA, int *ipiv, int *INFO) |
void | pgetrf (const int *m, const int *n, float *A, const int *IA, const int *JA, const int *DESCA, int *ipiv, int *INFO) |
void | pgetrf (const int *m, const int *n, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, int *ipiv, int *INFO) |
template<typename number > | |
void | ppotri (const char *, const int *, number *, const int *, const int *, const int *, int *) |
void | ppotri (const char *UPLO, const int *N, double *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | ppotri (const char *UPLO, const int *N, float *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | ppotri (const char *UPLO, const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
template<typename number > | |
void | pgetri (const int *, number *, const int *, const int *, const int *, const int *, number *, int *, int *, int *, int *) |
void | pgetri (const int *N, double *A, const int *IA, const int *JA, const int *DESCA, const int *ipiv, double *work, int *lwork, int *iwork, int *liwork, int *info) |
void | pgetri (const int *N, float *A, const int *IA, const int *JA, const int *DESCA, const int *ipiv, float *work, int *lwork, int *iwork, int *liwork, int *info) |
void | pgetri (const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const int *ipiv, std::complex< double > *work, int *lwork, int *iwork, int *liwork, int *info) |
template<typename number > | |
void | ptrtri (const char *, const char *, const int *, number *, const int *, const int *, const int *, int *) |
void | ptrtri (const char *UPLO, const char *DIAG, const int *N, double *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | ptrtri (const char *UPLO, const char *DIAG, const int *N, float *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
void | ptrtri (const char *UPLO, const char *DIAG, const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, int *INFO) |
template<typename number > | |
void | ppocon (const char *, const int *, const number *, const int *, const int *, const int *, const number *, number *, number *, const int *, int *, const int *, int *) |
void | ppocon (const char *uplo, const int *N, const double *A, const int *IA, const int *JA, const int *DESCA, const double *ANORM, double *RCOND, double *WORK, const int *LWORK, int *IWORK, const int *LIWORK, int *INFO) |
void | ppocon (const char *uplo, const int *N, const float *A, const int *IA, const int *JA, const int *DESCA, const float *ANORM, float *RCOND, float *WORK, const int *LWORK, int *IWORK, const int *LIWORK, int *INFO) |
template<typename number > | |
number | plansy (const char *, const char *, const int *, const number *, const int *, const int *, const int *, number *) |
double | plansy (const char *norm, const char *uplo, const int *N, const double *A, const int *IA, const int *JA, const int *DESCA, double *work) |
float | plansy (const char *norm, const char *uplo, const int *N, const float *A, const int *IA, const int *JA, const int *DESCA, float *work) |
template<typename number > | |
void | pgesv (const int *, const int *, number *, const int *, const int *, const int *, int *, number *, const int *, const int *, const int *, int *) |
void | pgesv (const int *n, const int *nrhs, double *A, const int *ia, const int *ja, const int *desca, int *ipiv, double *B, const int *ib, const int *jb, const int *descb, int *info) |
void | pgesv (const int *n, const int *nrhs, float *A, const int *ia, const int *ja, const int *desca, int *ipiv, float *B, const int *ib, const int *jb, const int *descb, int *info) |
template<typename number > | |
void | pgemm (const char *, const char *, const int *, const int *, const int *, const number *, const number *, const int *, const int *, const int *, const number *, const int *, const int *, const int *, const number *, number *, const int *, const int *, const int *) |
void | pgemm (const char *transa, const char *transb, const int *m, const int *n, const int *k, const double *alpha, const double *A, const int *IA, const int *JA, const int *DESCA, const double *B, const int *IB, const int *JB, const int *DESCB, const double *beta, double *C, const int *IC, const int *JC, const int *DESCC) |
void | pgemm (const char *transa, const char *transb, const int *m, const int *n, const int *k, const float *alpha, const float *A, const int *IA, const int *JA, const int *DESCA, const float *B, const int *IB, const int *JB, const int *DESCB, const float *beta, float *C, const int *IC, const int *JC, const int *DESCC) |
void | pgemm (const char *transa, const char *transb, const int *m, const int *n, const int *k, const std::complex< double > *alpha, const std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const std::complex< double > *B, const int *IB, const int *JB, const int *DESCB, const std::complex< double > *beta, std::complex< double > *C, const int *IC, const int *JC, const int *DESCC) |
template<typename number > | |
number | plange (const char *, const int *, const int *, const number *, const int *, const int *, const int *, number *) |
double | plange (const char *norm, const int *m, const int *n, const double *A, const int *ia, const int *ja, const int *desca, double *work) |
float | plange (const char *norm, const int *m, const int *n, const float *A, const int *ia, const int *ja, const int *desca, float *work) |
template<typename number > | |
void | psyev (const char *, const char *, const int *, number *, const int *, const int *, int *, number *, number *, const int *, const int *, int *, number *, const int *, int *) |
void | psyev (const char *jobz, const char *uplo, const int *m, double *A, const int *ia, const int *ja, int *desca, double *w, double *z, const int *iz, const int *jz, int *descz, double *work, const int *lwork, int *info) |
void | psyev (const char *jobz, const char *uplo, const int *m, float *A, const int *ia, const int *ja, int *desca, float *w, float *z, const int *iz, const int *jz, int *descz, float *work, const int *lwork, int *info) |
void | psyev (const char *jobz, const char *uplo, const int *m, std::complex< double > *A, const int *ia, const int *ja, int *desca, double *w, std::complex< double > *z, const int *iz, const int *jz, int *descz, std::complex< double > *work, const int *lwork, int *info) |
template<typename number > | |
void | placpy (const char *, const int *, const int *, const number *, const int *, const int *, const int *, number *, const int *, const int *, const int *) |
void | placpy (const char *uplo, const int *m, const int *n, const double *A, const int *ia, const int *ja, const int *desca, double *B, const int *ib, const int *jb, const int *descb) |
void | placpy (const char *uplo, const int *m, const int *n, const float *A, const int *ia, const int *ja, const int *desca, float *B, const int *ib, const int *jb, const int *descb) |
template<typename number > | |
void | pgemr2d (const int *, const int *, const number *, const int *, const int *, const int *, number *, const int *, const int *, const int *, const int *) |
void | pgemr2d (const int *m, const int *n, const double *A, const int *ia, const int *ja, const int *desca, double *B, const int *ib, const int *jb, const int *descb, const int *ictxt) |
void | pgemr2d (const int *m, const int *n, const float *A, const int *ia, const int *ja, const int *desca, float *B, const int *ib, const int *jb, const int *descb, const int *ictxt) |
template<typename number > | |
void | plamch (const int *, const char *, number &) |
void | plamch (const int *ictxt, const char *cmach, double &val) |
void | plamch (const int *ictxt, const char *cmach, float &val) |
template<typename number > | |
void | psyevx (const char *, const char *, const char *, const int *, number *, const int *, const int *, const int *, number *, number *, const int *, const int *, number *, const int *, const int *, number *, number *, number *, const int *, const int *, const int *, number *, int *, int *, int *, int *, int *, number *, int *) |
void | psyevx (const char *jobz, const char *range, const char *uplo, const int *n, double *A, const int *ia, const int *ja, const int *desca, double *VL, double *VU, const int *il, const int *iu, double *abstol, const int *m, const int *nz, double *w, double *orfac, double *Z, const int *iz, const int *jz, const int *descz, double *work, int *lwork, int *iwork, int *liwork, int *ifail, int *iclustr, double *gap, int *info) |
void | psyevx (const char *jobz, const char *range, const char *uplo, const int *n, float *A, const int *ia, const int *ja, const int *desca, float *VL, float *VU, const int *il, const int *iu, float *abstol, const int *m, const int *nz, float *w, float *orfac, float *Z, const int *iz, const int *jz, const int *descz, float *work, int *lwork, int *iwork, int *liwork, int *ifail, int *iclustr, float *gap, int *info) |
void | psyevx (const char *jobz, const char *range, const char *uplo, const int *n, std::complex< double > *A, const int *ia, const int *ja, const int *desca, double *VL, double *VU, const int *il, const int *iu, double *abstol, const int *m, const int *nz, double *w, double *orfac, std::complex< double > *Z, const int *iz, const int *jz, const int *descz, std::complex< double > *work, int *lwork, int *iwork, int *liwork, int *ifail, int *iclustr, double *gap, int *info) |
template<typename number > | |
void | pgesvd (const char *, const char *, const int *, const int *, number *, const int *, const int *, const int *, number *, number *, const int *, const int *, const int *, number *, const int *, const int *, const int *, number *, int *, int *) |
void | pgesvd (const char *jobu, const char *jobvt, const int *m, const int *n, double *A, const int *ia, const int *ja, const int *desca, double *S, double *U, const int *iu, const int *ju, const int *descu, double *VT, const int *ivt, const int *jvt, const int *descvt, double *work, int *lwork, int *info) |
void | pgesvd (const char *jobu, const char *jobvt, const int *m, const int *n, float *A, const int *ia, const int *ja, const int *desca, float *S, float *U, const int *iu, const int *ju, const int *descu, float *VT, const int *ivt, const int *jvt, const int *descvt, float *work, int *lwork, int *info) |
template<typename number > | |
void | pgels (const char *, const int *, const int *, const int *, number *, const int *, const int *, const int *, number *, const int *, const int *, const int *, number *, int *, int *) |
void | pgels (const char *trans, const int *m, const int *n, const int *nrhs, double *A, const int *ia, const int *ja, const int *desca, double *B, const int *ib, const int *jb, const int *descb, double *work, int *lwork, int *info) |
void | pgels (const char *trans, const int *m, const int *n, const int *nrhs, float *A, const int *ia, const int *ja, const int *desca, float *B, const int *ib, const int *jb, const int *descb, float *work, int *lwork, int *info) |
template<typename number > | |
void | pgeadd (const char *, const int *, const int *, const number *, const number *, const int *, const int *, const int *, const number *, number *, const int *, const int *, const int *) |
void | pgeadd (const char *transa, const int *m, const int *n, const double *alpha, const double *A, const int *IA, const int *JA, const int *DESCA, const double *beta, double *C, const int *IC, const int *JC, const int *DESCC) |
void | pgeadd (const char *transa, const int *m, const int *n, const float *alpha, const float *A, const int *IA, const int *JA, const int *DESCA, const float *beta, float *C, const int *IC, const int *JC, const int *DESCC) |
void | pgeadd (const char *transa, const int *m, const int *n, const std::complex< double > *alpha, const std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const std::complex< double > *beta, std::complex< double > *C, const int *IC, const int *JC, const int *DESCC) |
template<typename number > | |
void | ptran (const int *, const int *, const number *, const number *, const int *, const int *, const int *, const number *, number *, const int *, const int *, const int *) |
void | ptran (const int *m, const int *n, const double *alpha, const double *A, const int *IA, const int *JA, const int *DESCA, const double *beta, double *C, const int *IC, const int *JC, const int *DESCC) |
void | ptran (const int *m, const int *n, const float *alpha, const float *A, const int *IA, const int *JA, const int *DESCA, const float *beta, float *C, const int *IC, const int *JC, const int *DESCC) |
template<typename number > | |
void | psyevr (const char *, const char *, const char *, const int *, number *, const int *, const int *, const int *, const number *, const number *, const int *, const int *, int *, int *, number *, number *, const int *, const int *, const int *, number *, int *, int *, int *, int *) |
void | psyevr (const char *jobz, const char *range, const char *uplo, const int *n, double *A, const int *IA, const int *JA, const int *DESCA, const double *VL, const double *VU, const int *IL, const int *IU, int *m, int *nz, double *w, double *Z, const int *IZ, const int *JZ, const int *DESCZ, double *work, int *lwork, int *iwork, int *liwork, int *info) |
void | psyevr (const char *jobz, const char *range, const char *uplo, const int *n, float *A, const int *IA, const int *JA, const int *DESCA, const float *VL, const float *VU, const int *IL, const int *IU, int *m, int *nz, float *w, float *Z, const int *IZ, const int *JZ, const int *DESCZ, float *work, int *lwork, int *iwork, int *liwork, int *info) |
void | psyevr (const char *jobz, const char *range, const char *uplo, const int *n, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const double *VL, const double *VU, const int *IL, const int *IU, int *m, int *nz, double *w, std::complex< double > *Z, const int *IZ, const int *JZ, const int *DESCZ, std::complex< double > *work, int *lwork, int *iwork, int *liwork, int *info) |
int | lworkFromWork (std::vector< double > &work) |
int | lworkFromWork (std::vector< float > &work) |
int | lworkFromWork (std::vector< std::complex< double > > &work) |
template<typename ValueType1 , typename ValueType2 , utils::MemorySpace memorySpace> | |
void | dot (const Vector< ValueType1, memorySpace > &u, const Vector< ValueType2, memorySpace > &v, blasLapack::scalar_type< ValueType1, ValueType2 > &dotProd, const blasLapack::ScalarOp &opU, const blasLapack::ScalarOp &opV) |
Variables | |
LinearAlgebraProfiler | d_profiler |
size_type | d_maxIter |
double | d_absoluteTol |
double | d_relativeTol |
double | d_divergenceTol |
std::shared_ptr< linearAlgebra::LinAlgOpContext< utils::MemorySpace::HOST > > | LINALG_OP_CONTXT_HOST |
Setting all the LinAlgOpContextDefaults. More... | |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
void dftefe::linearAlgebra::add | ( | blasLapack::scalar_type< ValueType1, ValueType2 > | a, |
const MultiVector< ValueType1, memorySpace > & | u, | ||
blasLapack::scalar_type< ValueType1, ValueType2 > | b, | ||
const MultiVector< ValueType2, memorySpace > & | v, | ||
MultiVector< blasLapack::scalar_type< ValueType1, ValueType2 >, memorySpace > & | w | ||
) |
Perform \( w = au + bv \).
[in] | a | scalar |
[in] | u | first MultiVector on the right |
[in] | b | scalar |
[in] | v | second MultiVector on the right |
[out] | w | resulting MultiVector |
ValueType1 | DataType (double, float, complex<double>, etc.) of u vector |
ValueType2 | DataType (double, float, complex<double>, etc.) of v vector |
memorySpace | defines the MemorySpace (i.e., HOST or DEVICE) in which the vector must reside. |
void dftefe::linearAlgebra::add | ( | const std::vector< blasLapack::scalar_type< ValueType1, ValueType2 > > & | a, |
const MultiVector< ValueType1, memorySpace > & | u, | ||
const std::vector< blasLapack::scalar_type< ValueType1, ValueType2 > > & | b, | ||
const MultiVector< ValueType2, memorySpace > & | v, | ||
MultiVector< blasLapack::scalar_type< ValueType1, ValueType2 >, memorySpace > & | w | ||
) |
Perform \( w = au + bv \).
[in] | a | vector |
[in] | u | first MultiVector on the right |
[in] | b | vector |
[in] | v | second MultiVector on the right |
[out] | w | resulting MultiVector |
ValueType1 | DataType (double, float, complex<double>, etc.) of u vector |
ValueType2 | DataType (double, float, complex<double>, etc.) of v vector |
memorySpace | defines the MemorySpace (i.e., HOST or DEVICE) in which the vector must reside. |
void dftefe::linearAlgebra::caxpy_ | ( | const unsigned int * | n, |
const std::complex< float > * | alpha, | ||
const std::complex< float > * | x, | ||
const unsigned int * | incx, | ||
std::complex< float > * | y, | ||
const unsigned int * | incy | ||
) |
void dftefe::linearAlgebra::Cblacs_barrier | ( | int | , |
const char * | |||
) |
This routines holds up execution of all processes within the indicated scope until they have all called the routine.
void dftefe::linearAlgebra::Cblacs_exit | ( | int | error_code | ) |
Free all BLACS contexts and releases all allocated memory.
void dftefe::linearAlgebra::Cblacs_get | ( | int | icontxt, |
int | what, | ||
int * | val | ||
) |
Return internal BLACS value in val
based on the input what
and icontxt
. The most common use is in retrieving a default system context (what
= 0, icontxt
is ignored) to be used in BLACS_GRIDINIT or BLACS_GRIDMAP.
void dftefe::linearAlgebra::Cblacs_gridexit | ( | int | context | ) |
Release a BLACS context.
void dftefe::linearAlgebra::Cblacs_gridinfo | ( | int | context, |
int * | grid_height, | ||
int * | grid_width, | ||
int * | grid_row, | ||
int * | grid_col | ||
) |
Return the process row and column index.
void dftefe::linearAlgebra::Cblacs_gridinit | ( | int * | context, |
const char * | order, | ||
int | grid_height, | ||
int | grid_width | ||
) |
Map the processes sequentially in row-major or column-major order into the process grid. Input arguments must be the same on every process.
On return, context
is the integer handle to the BLACS context, whereas on entry it is a system context to be used in creating the BLACS context.
void dftefe::linearAlgebra::Cblacs_pcoord | ( | int | ictxt, |
int | pnum, | ||
int * | prow, | ||
int * | pcol | ||
) |
Given the system process number, return the row and column coordinates in the BLACS' process grid.
void dftefe::linearAlgebra::Cblacs_pinfo | ( | int * | rank, |
int * | nprocs | ||
) |
Determine how many processes are available and the current process rank.
void dftefe::linearAlgebra::ccopy_ | ( | const unsigned int * | n, |
const std::complex< float > * | x, | ||
const unsigned int * | incx, | ||
std::complex< float > * | y, | ||
const unsigned int * | incy | ||
) |
void dftefe::linearAlgebra::Cdgerv2d | ( | int | context, |
int | M, | ||
int | N, | ||
double * | A, | ||
int | lda, | ||
int | rsrc, | ||
int | csrc | ||
) |
Receives a message from a process @prsrc, csrc
into a general rectangular matrix.
https://software.intel.com/en-us/mkl-developer-reference-c-gerv2d
void dftefe::linearAlgebra::Cdgesd2d | ( | int | context, |
int | M, | ||
int | N, | ||
double * | A, | ||
int | lda, | ||
int | rdest, | ||
int | cdest | ||
) |
Sends the general rectangular matrix A to the destination process rdest
cdest
in the process grid.
https://software.intel.com/en-us/mkl-developer-reference-c-2018-beta-gesd2d
void dftefe::linearAlgebra::cgemm_ | ( | const char * | transA, |
const char * | transB, | ||
const unsigned int * | m, | ||
const unsigned int * | n, | ||
const unsigned int * | k, | ||
const std::complex< float > * | alpha, | ||
const std::complex< float > * | A, | ||
const unsigned int * | lda, | ||
const std::complex< float > * | B, | ||
const unsigned int * | ldb, | ||
const std::complex< float > * | beta, | ||
std::complex< float > * | C, | ||
const unsigned int * | ldc | ||
) |
void dftefe::linearAlgebra::cgemv_ | ( | const char * | TRANS, |
const unsigned int * | M, | ||
const unsigned int * | N, | ||
const std::complex< float > * | alpha, | ||
const std::complex< float > * | A, | ||
const unsigned int * | LDA, | ||
const std::complex< float > * | X, | ||
const unsigned int * | INCX, | ||
const std::complex< float > * | beta, | ||
std::complex< float > * | C, | ||
const unsigned int * | INCY | ||
) |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
dftefe::linearAlgebra::CGLinearSolver | ( | const size_type | maxIter, |
const double | absoluteTol, | ||
const double | relativeTol, | ||
const double | divergenceTol, | ||
LinearAlgebraProfiler | profiler = LinearAlgebraProfiler() |
||
) |
A class that implements the Conjugate-Gradient (CG) based Krylov subspace algorithm to solve a linear system of (i.e., solve for \( \mathbf{Ax}=\mathbf{b}$\f). @see <em>An Introduction to the Conjugate Gradient Method Without the Agonizing Pain</em>, Jonathan Richard Shewchuk (<a href="https://www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf">Painless Conjugate-Gradient</a>) @see <em> Numerical Linear Algebra </em>, Trefethen, Lloyd N., and David Bau III., Vol. 50. Siam, 1997. @tparam ValueTypeOperator The datatype (float, double, complex<double>, etc.) for the operator (e.g. Matrix) associated with the linear solve @tparam ValueTypeOperand The datatype (float, double, complex<double>, etc.) of the vector, matrices, etc. on which the operator will act @tparam memorySpace The meory space (HOST, DEVICE, HOST_PINNED, etc.) in which the data of the operator and its operands reside */ template <typename ValueTypeOperator, typename ValueTypeOperand, utils::MemorySpace memorySpace> class CGLinearSolver : public LinearSolverImpl<ValueTypeOperator, ValueTypeOperand, memorySpace> { public: /** @brief Constructor @param[in] maxIter Maximum number of iterations to allow the solver to iterate. Generally, this determines the maximum size of the Krylov subspace that will be used. @param[in] absoluteTol Convergence tolerane on the absolute \) L_2 $\f norm of the residual (i.e., on \(||\mathbf{Ax}-\mathbf{b}||$\f) @param[in] relativeTol Convergence tolerane on the relative L2 norm of the residual (i.e., on \)||\mathbf{Ax}-\mathbf{b}||/||\mathbf{b}||$\f)
[in] | divergenceTol | Tolerance to abort the linear solver if the L2 norm of the residual exceeds it (i.e., if \(||\mathbf{Ax}-\mathbf{b}|| > divergenceTol$\f) @note Convergence is achieved if \)||\mathbf{Ax}-\mathbf{b}|| < max(absoluteTol, relativeTol*||\mathbf{b}||)$\f |
void dftefe::linearAlgebra::ChebyshevFilter | ( | const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > & | A, |
const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > & | BInv, | ||
MultiVector< ValueTypeOperand, memorySpace > & | eigenSubspaceGuess, | ||
const size_type | polynomialDegree, | ||
const double | wantedSpectrumLowerBound, | ||
const double | wantedSpectrumUpperBound, | ||
const double | unWantedSpectrumUpperBound, | ||
MultiVector< blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand >, memorySpace > & | filteredSubspace | ||
) |
A class to get chebyshevFiletered subspace "filteredSubspace" from original subspace "eigenSubspaceGuess". Note both of these vectors have to be apriori allocated and both will change after the function is called.
ValueTypeOperator | The datatype (float, double, complex<double>, etc.) for the underlying operator |
ValueTypeOperand | The datatype (float, double, complex<double>, etc.) of the vector, matrices, etc. on which the operator will act |
memorySpace | The meory space (HOST, DEVICE, HOST_PINNED, etc.) in which the data of the operator and its operands reside |
void dftefe::linearAlgebra::ChebyshevFilterGEP | ( | const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > & | A, |
const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > & | B, | ||
const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > & | BInv, | ||
MultiVector< ValueTypeOperand, memorySpace > & | eigenSubspaceGuess, | ||
const size_type | polynomialDegree, | ||
const double | wantedSpectrumLowerBound, | ||
const double | wantedSpectrumUpperBound, | ||
const double | unWantedSpectrumUpperBound, | ||
MultiVector< blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand >, memorySpace > & | filteredSubspace | ||
) |
void dftefe::linearAlgebra::Csgerv2d | ( | int | context, |
int | M, | ||
int | N, | ||
float * | A, | ||
int | lda, | ||
int | rsrc, | ||
int | csrc | ||
) |
void dftefe::linearAlgebra::Csgesd2d | ( | int | context, |
int | M, | ||
int | N, | ||
float * | A, | ||
int | lda, | ||
int | rdest, | ||
int | cdest | ||
) |
int dftefe::linearAlgebra::Csys2blacs_handle | ( | utils::mpi::MPIComm | comm | ) |
Get BLACS context from MPI comm
.
double dftefe::linearAlgebra::dasum_ | ( | const unsigned int * | n, |
const double * | x, | ||
const unsigned int * | incx | ||
) |
void dftefe::linearAlgebra::daxpy_ | ( | const unsigned int * | n, |
const double * | alpha, | ||
const double * | x, | ||
const unsigned int * | incx, | ||
double * | y, | ||
const unsigned int * | incy | ||
) |
void dftefe::linearAlgebra::dcopy_ | ( | const unsigned int * | n, |
const double * | x, | ||
const unsigned int * | incx, | ||
double * | y, | ||
const unsigned int * | incy | ||
) |
double dftefe::linearAlgebra::ddot_ | ( | const unsigned int * | N, |
const double * | X, | ||
const unsigned int * | INCX, | ||
const double * | Y, | ||
const unsigned int * | INCY | ||
) |
void dftefe::linearAlgebra::descinit_ | ( | int * | desc, |
const int * | m, | ||
const int * | n, | ||
const int * | mb, | ||
const int * | nb, | ||
const int * | irsrc, | ||
const int * | icsrc, | ||
const int * | ictxt, | ||
const int * | lld, | ||
int * | info | ||
) |
Initialize the descriptor vector with the 8 input arguments
void dftefe::linearAlgebra::dgemm_ | ( | const char * | transA, |
const char * | transB, | ||
const unsigned int * | m, | ||
const unsigned int * | n, | ||
const unsigned int * | k, | ||
const double * | alpha, | ||
const double * | A, | ||
const unsigned int * | lda, | ||
const double * | B, | ||
const unsigned int * | ldb, | ||
const double * | beta, | ||
double * | C, | ||
const unsigned int * | ldc | ||
) |
void dftefe::linearAlgebra::dgemv_ | ( | const char * | TRANS, |
const unsigned int * | M, | ||
const unsigned int * | N, | ||
const double * | alpha, | ||
const double * | A, | ||
const unsigned int * | LDA, | ||
const double * | X, | ||
const unsigned int * | INCX, | ||
const double * | beta, | ||
double * | C, | ||
const unsigned int * | INCY | ||
) |
void dftefe::linearAlgebra::dgesv_ | ( | int * | n, |
int * | nrhs, | ||
double * | a, | ||
int * | lda, | ||
int * | ipiv, | ||
double * | b, | ||
int * | ldb, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::dgetrf_ | ( | int * | M, |
int * | N, | ||
double * | A, | ||
int * | lda, | ||
int * | IPIV, | ||
int * | INFO | ||
) |
void dftefe::linearAlgebra::dgetri_ | ( | int * | N, |
double * | A, | ||
int * | lda, | ||
int * | IPIV, | ||
double * | WORK, | ||
int * | lwork, | ||
int * | INFO | ||
) |
double dftefe::linearAlgebra::dlamch_ | ( | const char * | cmach | ) |
double dftefe::linearAlgebra::dnrm2_ | ( | const unsigned int * | n, |
const double * | x, | ||
const unsigned int * | incx | ||
) |
void dftefe::linearAlgebra::dot | ( | const MultiVector< ValueType1, memorySpace > & | u, |
const MultiVector< ValueType2, memorySpace > & | v, | ||
blasLapack::scalar_type< ValueType1, ValueType2 > * | dotProds, | ||
const blasLapack::ScalarOp & | opU, | ||
const blasLapack::ScalarOp & | opV | ||
) |
void dftefe::linearAlgebra::dot | ( | const MultiVector< ValueType1, memorySpace > & | u, |
const MultiVector< ValueType2, memorySpace > & | v, | ||
std::vector< blasLapack::scalar_type< ValueType1, ValueType2 > > & | dotProds, | ||
const blasLapack::ScalarOp & | opU, | ||
const blasLapack::ScalarOp & | opV | ||
) |
void dftefe::linearAlgebra::dot | ( | const Vector< ValueType1, memorySpace > & | u, |
const Vector< ValueType2, memorySpace > & | v, | ||
blasLapack::scalar_type< ValueType1, ValueType2 > & | dotProd, | ||
const blasLapack::ScalarOp & | opU, | ||
const blasLapack::ScalarOp & | opV | ||
) |
void dftefe::linearAlgebra::dpotrf_ | ( | const char * | uplo, |
const unsigned int * | n, | ||
double * | a, | ||
const unsigned int * | lda, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::dpotri_ | ( | const char * | uplo, |
const unsigned int * | n, | ||
double * | A, | ||
const unsigned int * | lda, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::dscal_ | ( | const unsigned int * | n, |
const double * | alpha, | ||
double * | x, | ||
const unsigned int * | inc | ||
) |
void dftefe::linearAlgebra::dsteqr_ | ( | const char * | jobz, |
const int * | n, | ||
double * | D, | ||
double * | E, | ||
double * | Z, | ||
const int * | lda, | ||
double * | work, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::dsyevd_ | ( | const char * | jobz, |
const char * | uplo, | ||
const unsigned int * | n, | ||
double * | A, | ||
const unsigned int * | lda, | ||
double * | w, | ||
double * | work, | ||
const unsigned int * | lwork, | ||
int * | iwork, | ||
const unsigned int * | liwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::dsyevr_ | ( | const char * | jobz, |
const char * | range, | ||
const char * | uplo, | ||
const unsigned int * | n, | ||
double * | A, | ||
const unsigned int * | lda, | ||
const double * | vl, | ||
const double * | vu, | ||
const unsigned int * | il, | ||
const unsigned int * | iu, | ||
const double * | abstol, | ||
const unsigned int * | m, | ||
double * | w, | ||
double * | Z, | ||
const unsigned int * | ldz, | ||
unsigned int * | isuppz, | ||
double * | work, | ||
const int * | lwork, | ||
int * | iwork, | ||
const int * | liwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::dsyevx_ | ( | const char * | jobz, |
const char * | range, | ||
const char * | uplo, | ||
const int * | n, | ||
double * | a, | ||
const int * | lda, | ||
const double * | vl, | ||
const double * | vu, | ||
const int * | il, | ||
const int * | iu, | ||
const double * | abstol, | ||
int * | m, | ||
double * | w, | ||
double * | z, | ||
const int * | ldz, | ||
double * | work, | ||
const int * | lwork, | ||
int * | iwork, | ||
int * | ifail, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::dsygv_ | ( | const int * | itype, |
const char * | jobz, | ||
const char * | uplo, | ||
const int * | n, | ||
double * | a, | ||
const int * | lda, | ||
double * | b, | ||
const int * | ldb, | ||
double * | w, | ||
double * | work, | ||
const int * | lwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::dsygvx_ | ( | const int * | itype, |
const char * | jobz, | ||
const char * | range, | ||
const char * | uplo, | ||
const int * | n, | ||
double * | a, | ||
const int * | lda, | ||
double * | b, | ||
const int * | ldb, | ||
const double * | vl, | ||
const double * | vu, | ||
const int * | il, | ||
const int * | iu, | ||
const double * | abstol, | ||
int * | m, | ||
double * | w, | ||
double * | z, | ||
const int * | ldz, | ||
double * | work, | ||
const int * | lwork, | ||
int * | iwork, | ||
int * | ifail, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::dsymv_ | ( | const char * | UPLO, |
const unsigned int * | N, | ||
const double * | alpha, | ||
const double * | A, | ||
const unsigned int * | LDA, | ||
const double * | X, | ||
const unsigned int * | INCX, | ||
const double * | beta, | ||
double * | C, | ||
const unsigned int * | INCY | ||
) |
void dftefe::linearAlgebra::dsyr2_ | ( | const char * | uplo, |
const unsigned int * | n, | ||
const double * | alpha, | ||
const double * | x, | ||
const unsigned int * | incx, | ||
const double * | y, | ||
const unsigned int * | incy, | ||
double * | a, | ||
const unsigned int * | lda | ||
) |
void dftefe::linearAlgebra::dsyr_ | ( | const char * | uplo, |
const unsigned int * | n, | ||
const double * | alpha, | ||
const double * | X, | ||
const unsigned int * | incx, | ||
double * | A, | ||
const unsigned int * | lda | ||
) |
void dftefe::linearAlgebra::dsyrk_ | ( | const char * | uplo, |
const char * | trans, | ||
const unsigned int * | n, | ||
const unsigned int * | k, | ||
const double * | alpha, | ||
const double * | A, | ||
const unsigned int * | lda, | ||
const double * | beta, | ||
double * | C, | ||
const unsigned int * | ldc | ||
) |
void dftefe::linearAlgebra::dsysv_ | ( | const char * | UPLO, |
const int * | n, | ||
const int * | nrhs, | ||
double * | a, | ||
const int * | lda, | ||
int * | ipiv, | ||
double * | b, | ||
const int * | ldb, | ||
double * | work, | ||
const int * | lwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::dtrtri_ | ( | const char * | uplo, |
const char * | diag, | ||
const unsigned int * | n, | ||
double * | a, | ||
const unsigned int * | lda, | ||
int * | info | ||
) |
double dftefe::linearAlgebra::dzasum_ | ( | const unsigned int * | n, |
const std::complex< double > * | x, | ||
const unsigned int * | incx | ||
) |
double dftefe::linearAlgebra::dznrm2_ | ( | const unsigned int * | n, |
const std::complex< double > * | x, | ||
const unsigned int * | incx | ||
) |
unsigned int dftefe::linearAlgebra::icamax_ | ( | const unsigned int * | n, |
const std::complex< float > * | x, | ||
const unsigned int * | incx | ||
) |
int dftefe::linearAlgebra::iceil_ | ( | const int * | i1, |
const int * | i2 | ||
) |
Return the ceiling of the division of two integers.
http://www.netlib.org/scalapack/explore-html/df/d07/iceil_8f_source.html
unsigned int dftefe::linearAlgebra::idamax_ | ( | const unsigned int * | n, |
const double * | x, | ||
const unsigned int * | incx | ||
) |
int dftefe::linearAlgebra::ilcm_ | ( | const int * | M, |
const int * | N | ||
) |
Compute the Least Common Multiple (LCM) of two positive integers M
and N
. In fact the routine Compute the greatest common divisor (GCD) and use the fact that M*N = GCD*LCM.
http://www.netlib.org/scalapack/explore-html/d0/d9b/ilcm_8f_source.html
int dftefe::linearAlgebra::indxg2p_ | ( | const int * | glob, |
const int * | nb, | ||
const int * | iproc, | ||
const int * | isproc, | ||
const int * | nprocs | ||
) |
Compute the process coordinate which possesses the entry of a distributed matrix specified by a global index
int dftefe::linearAlgebra::indxl2g_ | ( | const int * | indxloc, |
const int * | nb, | ||
const int * | iproc, | ||
const int * | isrcproc, | ||
const int * | nprocs | ||
) |
Compute the global index of a distributed matrix entry pointed to by the local index indxloc
of the process indicated by iproc
.
indxloc | The local index of the distributed matrix entry. |
nb | Block size, size of the blocks the distributed matrix is split into. |
iproc | The coordinate of the process whose local array row or column is to be determined |
isrcproc | The coordinate of the process that possesses the first row/column of the distributed matrix |
nprocs | The total number processes over which the distributed matrix is distributed |
unsigned int dftefe::linearAlgebra::isamax_ | ( | const unsigned int * | n, |
const float * | x, | ||
const unsigned int * | incx | ||
) |
unsigned int dftefe::linearAlgebra::izamax_ | ( | const unsigned int * | n, |
const std::complex< double > * | x, | ||
const unsigned int * | incx | ||
) |
|
inline |
|
inline |
|
inline |
int dftefe::linearAlgebra::numroc_ | ( | const int * | n, |
const int * | nb, | ||
const int * | iproc, | ||
const int * | isproc, | ||
const int * | nprocs | ||
) |
Compute how many rows and columns each process owns (NUMber of Rows Or Columns).
void dftefe::linearAlgebra::pdgeadd_ | ( | const char * | transa, |
const int * | m, | ||
const int * | n, | ||
const double * | alpha, | ||
const double * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const double * | beta, | ||
double * | C, | ||
const int * | IC, | ||
const int * | JC, | ||
const int * | DESCC | ||
) |
void dftefe::linearAlgebra::pdgels_ | ( | const char * | trans, |
const int * | m, | ||
const int * | n, | ||
const int * | nrhs, | ||
double * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
double * | B, | ||
const int * | ib, | ||
const int * | jb, | ||
const int * | descb, | ||
double * | work, | ||
int * | lwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::pdgemm_ | ( | const char * | transa, |
const char * | transb, | ||
const int * | m, | ||
const int * | n, | ||
const int * | k, | ||
const double * | alpha, | ||
const double * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const double * | B, | ||
const int * | IB, | ||
const int * | JB, | ||
const int * | DESCB, | ||
const double * | beta, | ||
double * | C, | ||
const int * | IC, | ||
const int * | JC, | ||
const int * | DESCC | ||
) |
Perform one of the matrix-matrix operations:
\begin{align*} \mathrm{sub}(C) &\dealcoloneq \alpha op(\mathrm{sub}(A))op(\mathrm{sub}(B)) + \beta \mathrm{sub}(C), \\ \mathrm{sub}(C) &\dealcoloneq \alpha op(\mathrm{sub}(A))op(\mathrm{sub}(B)) + beta sub(C), \end{align*}
where $\mathrm{sub}(C)$ denotes C(IC:IC+M-1,JC:JC+N-1), and, $op(X)$ is one of $op(X) = X$ or $op(X) = X^T$.
void dftefe::linearAlgebra::pdgemr2d_ | ( | const int * | m, |
const int * | n, | ||
const double * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
double * | B, | ||
const int * | ib, | ||
const int * | jb, | ||
const int * | descb, | ||
const int * | ictxt | ||
) |
Copies the content of a general rectangular distributed matrix A
to another distributed matrix B
It is not required that the matrices A and B have the same process grid or block size, e.g. copying a matrix from a one-dimensional to a two-dimensional process grid ictxt
is a context which is at least a union of all processes in context A and B
void dftefe::linearAlgebra::pdgesv_ | ( | const int * | n, |
const int * | nrhs, | ||
double * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
int * | ipiv, | ||
double * | B, | ||
const int * | ib, | ||
const int * | jb, | ||
const int * | descb, | ||
int * | info | ||
) |
Compute the solution to a real system of linear equations
void dftefe::linearAlgebra::pdgesvd_ | ( | const char * | jobu, |
const char * | jobvt, | ||
const int * | m, | ||
const int * | n, | ||
double * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
double * | S, | ||
double * | U, | ||
const int * | iu, | ||
const int * | ju, | ||
const int * | descu, | ||
double * | VT, | ||
const int * | ivt, | ||
const int * | jvt, | ||
const int * | descvt, | ||
double * | work, | ||
int * | lwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::pdgetrf_ | ( | const int * | m, |
const int * | n, | ||
double * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
int * | ipiv, | ||
int * | INFO | ||
) |
Computes an LU factorization of a general distributed matrix sub( A ) using partial pivoting with row interchanges.
http://www.netlib.org/scalapack/explore-html/df/dfe/pdgetrf_8f_source.html https://www.ibm.com/support/knowledgecenter/en/SSNR5K_4.2.0/com.ibm.cluster.pessl.v4r2.pssl100.doc/am6gr_lgetrf.htm
void dftefe::linearAlgebra::pdgetri_ | ( | const int * | N, |
double * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const int * | ipiv, | ||
double * | work, | ||
int * | lwork, | ||
int * | iwork, | ||
int * | liwork, | ||
int * | info | ||
) |
PDGETRI computes the inverse of a distributed matrix using the LU factorization computed by PDGETRF. This method inverts U and then computes the inverse of sub( A ) = A(IA:IA+N-1,JA:JA+N-1) denoted InvA by solving the system InvA*L = inv(U) for InvA.
http://www.netlib.org/scalapack/explore-html/d3/df3/pdgetri_8f_source.html https://www.ibm.com/support/knowledgecenter/SSNR5K_4.2.0/com.ibm.cluster.pessl.v4r2.pssl100.doc/am6gr_lgetri.htm
void dftefe::linearAlgebra::pdlacpy_ | ( | const char * | uplo, |
const int * | m, | ||
const int * | n, | ||
const double * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
double * | B, | ||
const int * | ib, | ||
const int * | jb, | ||
const int * | descb | ||
) |
Copy all or a part of a distributed matrix A to another distributed matrix B. No communication is performed, pdlacpy performs a local copy $\mathrm{sub}(A) \dealcoloneq \mathrm{sub}(B)$, where $\mathrm{sub}(A)$ denotes $A(ia:ia+m-1, ja:ja+n-1)$ and $\mathrm{sub}(B)$ denotes $B(ib:ib+m-1, jb:jb+n-1)$.
double dftefe::linearAlgebra::pdlamch_ | ( | const int * | ictxt, |
const char * | cmach | ||
) |
helper routines determining machine precision
double dftefe::linearAlgebra::pdlange_ | ( | char const * | norm, |
const int * | m, | ||
const int * | n, | ||
const double * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
double * | work | ||
) |
Return the value of the one norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a distributed matrix
double dftefe::linearAlgebra::pdlansy_ | ( | const char * | norm, |
const char * | uplo, | ||
const int * | N, | ||
const double * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
double * | work | ||
) |
Norm of a real symmetric matrix
http://www.netlib.org/scalapack/explore-html/dd/d12/pdlansy_8f_source.html https://www.ibm.com/support/knowledgecenter/SSNR5K_4.2.0/com.ibm.cluster.pessl.v4r2.pssl100.doc/am6gr_pdlansy.htm#pdlansy
void dftefe::linearAlgebra::pdpocon_ | ( | const char * | uplo, |
const int * | N, | ||
const double * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const double * | ANORM, | ||
double * | RCOND, | ||
double * | WORK, | ||
const int * | LWORK, | ||
int * | IWORK, | ||
const int * | LIWORK, | ||
int * | INFO | ||
) |
Estimate the reciprocal of the condition number (in the l1-norm) of a real symmetric positive definite distributed matrix using the Cholesky factorization.
https://www.ibm.com/support/knowledgecenter/SSNR5K_4.2.0/com.ibm.cluster.pessl.v4r2.pssl100.doc/am6gr_lpocon.htm#lpocon http://www.netlib.org/scalapack/explore-html/d4/df7/pdpocon_8f.html https://software.intel.com/en-us/mkl-developer-reference-fortran-pocon
void dftefe::linearAlgebra::pdpotrf_ | ( | const char * | UPLO, |
const int * | N, | ||
double * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
int * | INFO | ||
) |
Compute the Cholesky factorization of an N-by-N real symmetric positive definite distributed matrix sub( A ) denoting A(IA:IA+N-1, JA:JA+N-1).
http://www.netlib.org/scalapack/explore-html/d5/d9e/pdpotrf_8f_source.html https://www.ibm.com/support/knowledgecenter/SSNR5K_4.2.0/com.ibm.cluster.pessl.v4r2.pssl100.doc/am6gr_lpotrf.htm
void dftefe::linearAlgebra::pdpotri_ | ( | const char * | UPLO, |
const int * | N, | ||
double * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
int * | INFO | ||
) |
Compute the inverse of a real symmetric positive definite distributed matrix sub( A ) = A(IA:IA+N-1,JA:JA+N-1) using the Cholesky factorization sub( A ) = U**T*U or L*L**T computed by PDPOTRF.
http://www.netlib.org/scalapack/explore-html/d2/d44/pdpotri_8f_source.html https://www.ibm.com/support/knowledgecenter/SSNR5K_4.2.0/com.ibm.cluster.pessl.v4r2.pssl100.doc/am6gr_lpotri.htm https://software.intel.com/en-us/mkl-developer-reference-c-p-potri
void dftefe::linearAlgebra::pdsyev_ | ( | const char * | jobz, |
const char * | uplo, | ||
const int * | m, | ||
double * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
int * | desca, | ||
double * | w, | ||
double * | z, | ||
const int * | iz, | ||
const int * | jz, | ||
int * | descz, | ||
double * | work, | ||
const int * | lwork, | ||
int * | info | ||
) |
Compute all eigenvalues and, optionally, eigenvectors of a real symmetric matrix A by calling the recommended sequence of ScaLAPACK routines. In its present form, the routine assumes a homogeneous system and makes no checks for consistency of the eigenvalues or eigenvectors across the different processes. Because of this, it is possible that a heterogeneous system may return incorrect results without any error messages.
http://www.netlib.org/scalapack/explore-html/d0/d1a/pdsyev_8f.html https://www.ibm.com/support/knowledgecenter/SSNR5K_4.2.0/com.ibm.cluster.pessl.v4r2.pssl100.doc/am6gr_lsyev.htm#lsyev
void dftefe::linearAlgebra::pdsyevr_ | ( | const char * | jobz, |
const char * | range, | ||
const char * | uplo, | ||
const int * | n, | ||
double * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const double * | VL, | ||
const double * | VU, | ||
const int * | IL, | ||
const int * | IU, | ||
int * | m, | ||
int * | nz, | ||
double * | w, | ||
double * | Z, | ||
const int * | IZ, | ||
const int * | JZ, | ||
const int * | DESCZ, | ||
double * | work, | ||
int * | lwork, | ||
int * | iwork, | ||
int * | liwork, | ||
int * | info | ||
) |
psyevr computes selected eigenvalues and, optionally, eigenvectors of a real symmetric matrix A using a parallel implementation of the MRR algorithm. Eigenvalues/vectors can be selected by specifying a range of values or a range of indices for the desired eigenvalues.
void dftefe::linearAlgebra::pdsyevx_ | ( | const char * | jobz, |
const char * | range, | ||
const char * | uplo, | ||
const int * | n, | ||
double * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
const double * | VL, | ||
const double * | VU, | ||
const int * | il, | ||
const int * | iu, | ||
const double * | abstol, | ||
const int * | m, | ||
const int * | nz, | ||
double * | w, | ||
double * | orfac, | ||
double * | Z, | ||
const int * | iz, | ||
const int * | jz, | ||
const int * | descz, | ||
double * | work, | ||
int * | lwork, | ||
int * | iwork, | ||
int * | liwork, | ||
int * | ifail, | ||
int * | iclustr, | ||
double * | gap, | ||
int * | info | ||
) |
psyevx computes selected eigenvalues and, optionally, eigenvectors of a real symmetric matrix A. Eigenvalues/vectors can be selected by specifying a range of values or a range of indices for the desired eigenvalues.
void dftefe::linearAlgebra::pdtran_ | ( | const int * | m, |
const int * | n, | ||
const double * | alpha, | ||
const double * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const double * | beta, | ||
double * | C, | ||
const int * | IC, | ||
const int * | JC, | ||
const int * | DESCC | ||
) |
Routine to transpose a matrix: C = beta C + alpha A^T
void dftefe::linearAlgebra::pdtrtri_ | ( | const char * | UPLO, |
const char * | DIAG, | ||
const int * | N, | ||
double * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
int * | INFO | ||
) |
PDTRTRI computes the inverse of a upper or lower triangular distributed matrix sub( A ) = A(IA:IA+N-1,JA:JA+N-1).
http://www.netlib.org/scalapack/explore-html/d9/dc0/pdtrtri_8f_source.html https://www.ibm.com/support/knowledgecenter/SSNR5K_4.2.0/com.ibm.cluster.pessl.v4r2.pssl100.doc/am6gr_lpdtri.htm https://software.intel.com/en-us/mkl-developer-reference-c-p-trtri
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
template void dftefe::linearAlgebra::ProcessGrid::send_to_inactive< std::complex< double > > | ( | std::complex< double > * | , |
const int | |||
) | const |
void dftefe::linearAlgebra::psgeadd_ | ( | const char * | transa, |
const int * | m, | ||
const int * | n, | ||
const float * | alpha, | ||
const float * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const float * | beta, | ||
float * | C, | ||
const int * | IC, | ||
const int * | JC, | ||
const int * | DESCC | ||
) |
void dftefe::linearAlgebra::psgels_ | ( | const char * | trans, |
const int * | m, | ||
const int * | n, | ||
const int * | nrhs, | ||
float * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
float * | B, | ||
const int * | ib, | ||
const int * | jb, | ||
const int * | descb, | ||
float * | work, | ||
int * | lwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::psgemm_ | ( | const char * | transa, |
const char * | transb, | ||
const int * | m, | ||
const int * | n, | ||
const int * | k, | ||
const float * | alpha, | ||
const float * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const float * | B, | ||
const int * | IB, | ||
const int * | JB, | ||
const int * | DESCB, | ||
const float * | beta, | ||
float * | C, | ||
const int * | IC, | ||
const int * | JC, | ||
const int * | DESCC | ||
) |
void dftefe::linearAlgebra::psgemr2d_ | ( | const int * | m, |
const int * | n, | ||
const float * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
float * | B, | ||
const int * | ib, | ||
const int * | jb, | ||
const int * | descb, | ||
const int * | ictxt | ||
) |
void dftefe::linearAlgebra::psgesv_ | ( | const int * | n, |
const int * | nrhs, | ||
float * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
int * | ipiv, | ||
float * | B, | ||
const int * | ib, | ||
const int * | jb, | ||
const int * | descb, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::psgesvd_ | ( | const char * | jobu, |
const char * | jobvt, | ||
const int * | m, | ||
const int * | n, | ||
float * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
float * | S, | ||
float * | U, | ||
const int * | iu, | ||
const int * | ju, | ||
const int * | descu, | ||
float * | VT, | ||
const int * | ivt, | ||
const int * | jvt, | ||
const int * | descvt, | ||
float * | work, | ||
int * | lwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::psgetrf_ | ( | const int * | m, |
const int * | n, | ||
float * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
int * | ipiv, | ||
int * | INFO | ||
) |
void dftefe::linearAlgebra::psgetri_ | ( | const int * | N, |
float * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const int * | ipiv, | ||
float * | work, | ||
int * | lwork, | ||
int * | iwork, | ||
int * | liwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::pslacpy_ | ( | const char * | uplo, |
const int * | m, | ||
const int * | n, | ||
const float * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
float * | B, | ||
const int * | ib, | ||
const int * | jb, | ||
const int * | descb | ||
) |
float dftefe::linearAlgebra::pslamch_ | ( | const int * | ictxt, |
const char * | cmach | ||
) |
float dftefe::linearAlgebra::pslange_ | ( | const char * | norm, |
const int * | m, | ||
const int * | n, | ||
const float * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
float * | work | ||
) |
float dftefe::linearAlgebra::pslansy_ | ( | const char * | norm, |
const char * | uplo, | ||
const int * | N, | ||
const float * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
float * | work | ||
) |
void dftefe::linearAlgebra::pspocon_ | ( | const char * | uplo, |
const int * | N, | ||
const float * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const float * | ANORM, | ||
float * | RCOND, | ||
float * | WORK, | ||
const int * | LWORK, | ||
int * | IWORK, | ||
const int * | LIWORK, | ||
int * | INFO | ||
) |
void dftefe::linearAlgebra::pspotrf_ | ( | const char * | UPLO, |
const int * | N, | ||
float * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
int * | INFO | ||
) |
void dftefe::linearAlgebra::pspotri_ | ( | const char * | UPLO, |
const int * | N, | ||
float * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
int * | INFO | ||
) |
void dftefe::linearAlgebra::pssyev_ | ( | const char * | jobz, |
const char * | uplo, | ||
const int * | m, | ||
float * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
int * | desca, | ||
float * | w, | ||
float * | z, | ||
const int * | iz, | ||
const int * | jz, | ||
int * | descz, | ||
float * | work, | ||
const int * | lwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::pssyevr_ | ( | const char * | jobz, |
const char * | range, | ||
const char * | uplo, | ||
const int * | n, | ||
float * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const float * | VL, | ||
const float * | VU, | ||
const int * | IL, | ||
const int * | IU, | ||
int * | m, | ||
int * | nz, | ||
float * | w, | ||
float * | Z, | ||
const int * | IZ, | ||
const int * | JZ, | ||
const int * | DESCZ, | ||
float * | work, | ||
int * | lwork, | ||
int * | iwork, | ||
int * | liwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::pssyevx_ | ( | const char * | jobz, |
const char * | range, | ||
const char * | uplo, | ||
const int * | n, | ||
float * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
const float * | VL, | ||
const float * | VU, | ||
const int * | il, | ||
const int * | iu, | ||
const float * | abstol, | ||
const int * | m, | ||
const int * | nz, | ||
float * | w, | ||
float * | orfac, | ||
float * | Z, | ||
const int * | iz, | ||
const int * | jz, | ||
const int * | descz, | ||
float * | work, | ||
int * | lwork, | ||
int * | iwork, | ||
int * | liwork, | ||
int * | ifail, | ||
int * | iclustr, | ||
float * | gap, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::pstran_ | ( | const int * | m, |
const int * | n, | ||
const float * | alpha, | ||
const float * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const float * | beta, | ||
float * | C, | ||
const int * | IC, | ||
const int * | JC, | ||
const int * | DESCC | ||
) |
void dftefe::linearAlgebra::pstrtri_ | ( | const char * | UPLO, |
const char * | DIAG, | ||
const int * | N, | ||
float * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
int * | INFO | ||
) |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
void dftefe::linearAlgebra::pzgeadd_ | ( | const char * | transa, |
const int * | m, | ||
const int * | n, | ||
const std::complex< double > * | alpha, | ||
const std::complex< double > * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const std::complex< double > * | beta, | ||
std::complex< double > * | C, | ||
const int * | IC, | ||
const int * | JC, | ||
const int * | DESCC | ||
) |
void dftefe::linearAlgebra::pzgemm_ | ( | const char * | transa, |
const char * | transb, | ||
const int * | m, | ||
const int * | n, | ||
const int * | k, | ||
const std::complex< double > * | alpha, | ||
const std::complex< double > * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const std::complex< double > * | B, | ||
const int * | IB, | ||
const int * | JB, | ||
const int * | DESCB, | ||
const std::complex< double > * | beta, | ||
std::complex< double > * | C, | ||
const int * | IC, | ||
const int * | JC, | ||
const int * | DESCC | ||
) |
void dftefe::linearAlgebra::pzgetrf_ | ( | const int * | m, |
const int * | n, | ||
std::complex< double > * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
int * | ipiv, | ||
int * | INFO | ||
) |
void dftefe::linearAlgebra::pzgetri_ | ( | const int * | N, |
std::complex< double > * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const int * | ipiv, | ||
std::complex< double > * | work, | ||
int * | lwork, | ||
int * | iwork, | ||
int * | liwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::pzheev_ | ( | const char * | jobz, |
const char * | uplo, | ||
const int * | m, | ||
std::complex< double > * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
int * | desca, | ||
double * | w, | ||
std::complex< double > * | z, | ||
const int * | iz, | ||
const int * | jz, | ||
int * | descz, | ||
std::complex< double > * | work, | ||
const int * | lwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::pzheevr_ | ( | const char * | jobz, |
const char * | range, | ||
const char * | uplo, | ||
const int * | n, | ||
std::complex< double > * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const double * | VL, | ||
const double * | VU, | ||
const int * | IL, | ||
const int * | IU, | ||
int * | m, | ||
int * | nz, | ||
double * | w, | ||
std::complex< double > * | Z, | ||
const int * | IZ, | ||
const int * | JZ, | ||
const int * | DESCZ, | ||
std::complex< double > * | work, | ||
int * | lwork, | ||
int * | iwork, | ||
int * | liwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::pzheevx_ | ( | const char * | jobz, |
const char * | range, | ||
const char * | uplo, | ||
const int * | n, | ||
std::complex< double > * | A, | ||
const int * | ia, | ||
const int * | ja, | ||
const int * | desca, | ||
const double * | VL, | ||
const double * | VU, | ||
const int * | il, | ||
const int * | iu, | ||
const double * | abstol, | ||
const int * | m, | ||
const int * | nz, | ||
double * | w, | ||
double * | orfac, | ||
std::complex< double > * | Z, | ||
const int * | iz, | ||
const int * | jz, | ||
const int * | descz, | ||
std::complex< double > * | work, | ||
int * | lwork, | ||
int * | iwork, | ||
int * | liwork, | ||
int * | ifail, | ||
int * | iclustr, | ||
double * | gap, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::pzlacgv_ | ( | const int * | N, |
std::complex< double > * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
const int * | INCX | ||
) |
Compute complex conjugate
void dftefe::linearAlgebra::pzpotrf_ | ( | const char * | UPLO, |
const int * | N, | ||
std::complex< double > * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
int * | INFO | ||
) |
void dftefe::linearAlgebra::pzpotri_ | ( | const char * | UPLO, |
const int * | N, | ||
std::complex< double > * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
int * | INFO | ||
) |
void dftefe::linearAlgebra::pztrtri_ | ( | const char * | UPLO, |
const char * | DIAG, | ||
const int * | N, | ||
std::complex< double > * | A, | ||
const int * | IA, | ||
const int * | JA, | ||
const int * | DESCA, | ||
int * | INFO | ||
) |
void dftefe::linearAlgebra::ResidualChebyshevFilterGEP | ( | const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > & | A, |
const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > & | B, | ||
const OperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace > & | BInv, | ||
std::vector< blasLapack::real_type< blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand > > > & | eigenvalues, | ||
MultiVector< ValueTypeOperand, memorySpace > & | X, | ||
const size_type | polynomialDegree, | ||
const double | wantedSpectrumLowerBound, | ||
const double | wantedSpectrumUpperBound, | ||
const double | unWantedSpectrumUpperBound, | ||
MultiVector< blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand >, memorySpace > & | Y | ||
) |
filtering for AX = \lambda BX template <typename ValueTypeOperator, typename ValueTypeOperand, utils::MemorySpace memorySpace> void ChebyshevFilterGEP( const OperatorContext<ValueTypeOperator, ValueTypeOperand, memorySpace> &A, const OperatorContext<ValueTypeOperator, ValueTypeOperand, memorySpace> &B, const OperatorContext<ValueTypeOperator, ValueTypeOperand, memorySpace> & BInv, MultiVector<ValueTypeOperand, memorySpace> &eigenSubspaceGuess, const size_type polynomialDegree, const double wantedSpectrumLowerBound, const double wantedSpectrumUpperBound, const double unWantedSpectrumUpperBound, MultiVector<blasLapack::scalar_type<ValueTypeOperator, ValueTypeOperand>, memorySpace> &filteredSubspace) // remove this and put X (in/out) { using ValueType = blasLapack::scalar_type<ValueTypeOperator, ValueTypeOperand>;
const size_type locallyOwnedMultivecSize = eigenSubspaceGuess.locallyOwnedSize() * eigenSubspaceGuess.getNumberComponents();
const double e = (0.5) * (unWantedSpectrumUpperBound - wantedSpectrumUpperBound); const double c = (0.5) * (unWantedSpectrumUpperBound + wantedSpectrumUpperBound); double sigma = e / (wantedSpectrumLowerBound - c);
const double sigma1 = sigma; const double gamma = (2.0 / sigma1); double sigma2;
MultiVector<ValueType, memorySpace> scratch1(eigenSubspaceGuess, (ValueType)0); MultiVector<ValueType, memorySpace> scratch2(eigenSubspaceGuess, (ValueType)0);
B.apply(eigenSubspaceGuess, filteredSubspace, true, false);
BInv.apply(filteredSubspace, scratch1, true, false); A.apply(scratch1, scratch2, true, false);
eigenSubspaceGuess = (\sigma1/e)(AB^-1 filteredSubspace - c filteredSubspace) blasLapack::axpby<ValueType, ValueTypeOperand, memorySpace>( locallyOwnedMultivecSize, sigma1 / e, scratch2.data(), -sigma1 / e * c, filteredSubspace.data(), eigenSubspaceGuess.data(), eigenSubspaceGuess.getLinAlgOpContext());
swap(eigenSubspaceGuess, filteredSubspace);
for (size_type degree = 2; degree <= polynomialDegree; degree++) { sigma2 = 1.0 / (gamma - sigma);
BInv.apply(filteredSubspace, scratch1, true, false); A.apply(scratch1, scratch2, true, false);
temp = (2\sigma2/e)(AB^-1 filteredSubspace - c filteredSubspace) blasLapack::axpby<ValueType, ValueType, memorySpace>( locallyOwnedMultivecSize, 2.0 * sigma2 / e, scratch2.data(), -2.0 * sigma2 / e * c, filteredSubspace.data(), scratch1.data(), eigenSubspaceGuess.getLinAlgOpContext());
Note: works if axpby is capable of z being same as either of x or y blasLapack::axpby<ValueType, ValueTypeOperand, memorySpace>( locallyOwnedMultivecSize, (ValueType)1.0, scratch1.data(), -sigma * sigma2, eigenSubspaceGuess.data(), eigenSubspaceGuess.data(), eigenSubspaceGuess.getLinAlgOpContext());
swap(eigenSubspaceGuess, filteredSubspace);
sigma = sigma2; } BInv.apply(filteredSubspace, eigenSubspaceGuess, true, true);
filteredSubspace = eigenSubspaceGuess; // remove this and put X (in/out) }
double dftefe::linearAlgebra::sasum_ | ( | const unsigned int * | n, |
const float * | x, | ||
const unsigned int * | incx | ||
) |
void dftefe::linearAlgebra::saxpy_ | ( | const unsigned int * | n, |
const float * | alpha, | ||
const float * | x, | ||
const unsigned int * | incx, | ||
float * | y, | ||
const unsigned int * | incy | ||
) |
double dftefe::linearAlgebra::scasum_ | ( | const unsigned int * | n, |
const std::complex< float > * | x, | ||
const unsigned int * | incx | ||
) |
void dftefe::linearAlgebra::scopy_ | ( | const unsigned int * | n, |
const float * | x, | ||
const unsigned int * | incx, | ||
float * | y, | ||
const unsigned int * | incy | ||
) |
void dftefe::linearAlgebra::sgemm_ | ( | const char * | transA, |
const char * | transB, | ||
const unsigned int * | m, | ||
const unsigned int * | n, | ||
const unsigned int * | k, | ||
const float * | alpha, | ||
const float * | A, | ||
const unsigned int * | lda, | ||
const float * | B, | ||
const unsigned int * | ldb, | ||
const float * | beta, | ||
float * | C, | ||
const unsigned int * | ldc | ||
) |
void dftefe::linearAlgebra::sgemv_ | ( | const char * | TRANS, |
const unsigned int * | M, | ||
const unsigned int * | N, | ||
const float * | alpha, | ||
const float * | A, | ||
const unsigned int * | LDA, | ||
const float * | X, | ||
const unsigned int * | INCX, | ||
const float * | beta, | ||
float * | C, | ||
const unsigned int * | INCY | ||
) |
|
override |
Function that initiates the linear solve.
[in] | linearSolverFunction | Reference to a LinearSolverFunction object that encapsulates the discrete partial differential equation that is being solved as a linear solve. Typically, the linearSolverFunction provides the right hand side vector (i.e., \(\mathbf{b}$\f) and the handle to the action of the discrete operator on a Vector. It also stores the final solution \)\mathbf{x}$\f |
void dftefe::linearAlgebra::sscal_ | ( | const unsigned int * | n, |
const float * | alpha, | ||
float * | x, | ||
const unsigned int * | inc | ||
) |
void dftefe::linearAlgebra::swap | ( | MultiVector< ValueType, memorySpace > & | X, |
MultiVector< ValueType, memorySpace > & | Y | ||
) |
Swaps the data of u with this multivector.
void dftefe::linearAlgebra::zaxpy_ | ( | const unsigned int * | n, |
const std::complex< double > * | alpha, | ||
const std::complex< double > * | x, | ||
const unsigned int * | incx, | ||
std::complex< double > * | y, | ||
const unsigned int * | incy | ||
) |
void dftefe::linearAlgebra::zcopy_ | ( | const unsigned int * | n, |
const std::complex< double > * | x, | ||
const unsigned int * | incx, | ||
std::complex< double > * | y, | ||
const unsigned int * | incy | ||
) |
std::complex< double > dftefe::linearAlgebra::zdotc_ | ( | const unsigned int * | N, |
const std::complex< double > * | X, | ||
const unsigned int * | INCX, | ||
const std::complex< double > * | Y, | ||
const unsigned int * | INCY | ||
) |
void dftefe::linearAlgebra::zdscal_ | ( | const unsigned int * | n, |
const double * | alpha, | ||
std::complex< double > * | x, | ||
const unsigned int * | inc | ||
) |
void dftefe::linearAlgebra::zgemm_ | ( | const char * | transA, |
const char * | transB, | ||
const unsigned int * | m, | ||
const unsigned int * | n, | ||
const unsigned int * | k, | ||
const std::complex< double > * | alpha, | ||
const std::complex< double > * | A, | ||
const unsigned int * | lda, | ||
const std::complex< double > * | B, | ||
const unsigned int * | ldb, | ||
const std::complex< double > * | beta, | ||
std::complex< double > * | C, | ||
const unsigned int * | ldc | ||
) |
void dftefe::linearAlgebra::zgemv_ | ( | const char * | TRANS, |
const unsigned int * | M, | ||
const unsigned int * | N, | ||
const std::complex< double > * | alpha, | ||
const std::complex< double > * | A, | ||
const unsigned int * | LDA, | ||
const std::complex< double > * | X, | ||
const unsigned int * | INCX, | ||
const std::complex< double > * | beta, | ||
std::complex< double > * | C, | ||
const unsigned int * | INCY | ||
) |
void dftefe::linearAlgebra::zgesv_ | ( | int * | n, |
int * | nrhs, | ||
std::complex< double > * | a, | ||
int * | lda, | ||
int * | ipiv, | ||
std::complex< double > * | b, | ||
int * | ldb, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::zgetrf_ | ( | int * | M, |
int * | N, | ||
std::complex< double > * | A, | ||
int * | lda, | ||
int * | IPIV, | ||
int * | INFO | ||
) |
void dftefe::linearAlgebra::zgetri_ | ( | int * | N, |
std::complex< double > * | A, | ||
int * | lda, | ||
int * | IPIV, | ||
std::complex< double > * | WORK, | ||
int * | lwork, | ||
int * | INFO | ||
) |
void dftefe::linearAlgebra::zheevd_ | ( | const char * | jobz, |
const char * | uplo, | ||
const unsigned int * | n, | ||
std::complex< double > * | A, | ||
const unsigned int * | lda, | ||
double * | w, | ||
std::complex< double > * | work, | ||
const unsigned int * | lwork, | ||
double * | rwork, | ||
const unsigned int * | lrwork, | ||
int * | iwork, | ||
const unsigned int * | liwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::zheevr_ | ( | const char * | jobz, |
const char * | range, | ||
const char * | uplo, | ||
const unsigned int * | n, | ||
std::complex< double > * | A, | ||
const unsigned int * | lda, | ||
const double * | vl, | ||
const double * | vu, | ||
const unsigned int * | il, | ||
const unsigned int * | iu, | ||
const double * | abstol, | ||
const unsigned int * | m, | ||
double * | w, | ||
std::complex< double > * | Z, | ||
const unsigned int * | ldz, | ||
unsigned int * | isuppz, | ||
std::complex< double > * | work, | ||
const int * | lwork, | ||
double * | rwork, | ||
const int * | lrwork, | ||
int * | iwork, | ||
const int * | liwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::zhegv_ | ( | const int * | itype, |
const char * | jobz, | ||
const char * | uplo, | ||
const int * | n, | ||
std::complex< double > * | a, | ||
const int * | lda, | ||
std::complex< double > * | b, | ||
const int * | ldb, | ||
double * | w, | ||
std::complex< double > * | work, | ||
const int * | lwork, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::zherk_ | ( | const char * | uplo, |
const char * | trans, | ||
const unsigned int * | n, | ||
const unsigned int * | k, | ||
const double * | alpha, | ||
const std::complex< double > * | A, | ||
const unsigned int * | lda, | ||
const double * | beta, | ||
std::complex< double > * | C, | ||
const unsigned int * | ldc | ||
) |
void dftefe::linearAlgebra::zpotrf_ | ( | const char * | uplo, |
const unsigned int * | n, | ||
std::complex< double > * | a, | ||
const unsigned int * | lda, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::zscal_ | ( | const unsigned int * | n, |
const std::complex< double > * | alpha, | ||
std::complex< double > * | x, | ||
const unsigned int * | inc | ||
) |
void dftefe::linearAlgebra::zsteqr_ | ( | const char * | jobz, |
const int * | n, | ||
double * | D, | ||
double * | E, | ||
std::complex< double > * | Z, | ||
const int * | lda, | ||
std::complex< double > * | work, | ||
int * | info | ||
) |
void dftefe::linearAlgebra::ztrtri_ | ( | const char * | uplo, |
const char * | diag, | ||
const unsigned int * | n, | ||
std::complex< double > * | a, | ||
const unsigned int * | lda, | ||
int * | info | ||
) |
|
default |
Default Destructor.
|
private |
|
private |
|
private |
|
private |
|
private |
std::shared_ptr<linearAlgebra::LinAlgOpContext<utils::MemorySpace::HOST> > dftefe::linearAlgebra::LINALG_OP_CONTXT_HOST |
Setting all the LinAlgOpContextDefaults.