DFT-EFE
 
Loading...
Searching...
No Matches
dftefe::linearAlgebra Namespace Reference

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
 

Enumerations

enum class  OrthogonalizationType { CHOLESKY_GRAMSCHMIDT , MULTIPASS_LOWDIN , MULTIPASS_CGS }
 
enum class  LinearSolverType { CG , CG }
 
enum class  PreconditionerType { NONE , JACOBI }
 
enum class  NonLinearSolverType { CG , LBFGS }
 
enum class  ParallelPrintType { NONE , ROOT_ONLY , ALL }
 
enum class  LapackErrorCode {
  SUCCESS , FAILED_DENSE_MATRIX_INVERSE , FAILED_TRIA_MATRIX_INVERSE , FAILED_CHOLESKY_FACTORIZATION ,
  FAILED_REAL_TRIDIAGONAL_EIGENPROBLEM , FAILED_STANDARD_EIGENPROBLEM , FAILED_GENERALIZED_EIGENPROBLEM , FAILED_LINEAR_SYSTEM_SOLVE ,
  OTHER_ERROR
}
 
enum class  ScalapackErrorCode {
  SUCCESS , FAILED_LU_FACTORIZATION , FAILED_CHOLESKY_FACTORIZATION , FAILED_MATRIX_INVERT ,
  FAILED_STANDARD_HERMITIAN_EIGENPROBLEM , FAILED_STANDARD_HERMITIAN_EIGENPROBLEM_MRRR , OTHER_ERROR
}
 
enum class  LinearSolverErrorCode {
  SUCCESS , FAILED_TO_CONVERGE , RESIDUAL_DIVERGENCE , DIVISON_BY_ZERO ,
  OTHER_ERROR
}
 
enum class  EigenSolverErrorCode {
  SUCCESS , LAPACK_ERROR , LANCZOS_BETA_ZERO , LANCZOS_SUBSPACE_INSUFFICIENT ,
  CHFSI_ORTHONORMALIZATION_ERROR , CHFSI_RAYLEIGH_RITZ_ERROR , KS_MAX_PASS_ERROR , KS_CHFSI_ERROR ,
  KS_LANCZOS_ERROR , KS_NEWTON_RAPHSON_ERROR , ELPASCALAPACK_ERROR , OTHER_ERROR
}
 
enum class  OrthonormalizationErrorCode {
  SUCCESS , LAPACK_ERROR , NON_ORTHONORMALIZABLE_MULTIVECTOR , ELPASCALAPACK_ERROR ,
  MAX_PASS_EXCEEDED
}
 
enum class  NewtonRaphsonErrorCode { SUCCESS , FORCE_TOLERANCE_ERR , FAILED_TO_CONVERGE , OTHER_ERROR }
 
enum class  LinearSolverType { CG , CG }
 
enum class  PCType { NONE , JACOBI }
 
enum class  LinearSolverReturnType {
  SUCCESS , FAILURE , MAX_ITER_REACHED , INDEFINITE_PC ,
  NAN_RES
}
 

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...
 

Enumeration Type Documentation

◆ EigenSolverErrorCode

Enumerator
SUCCESS 
LAPACK_ERROR 
LANCZOS_BETA_ZERO 
LANCZOS_SUBSPACE_INSUFFICIENT 
CHFSI_ORTHONORMALIZATION_ERROR 
CHFSI_RAYLEIGH_RITZ_ERROR 
KS_MAX_PASS_ERROR 
KS_CHFSI_ERROR 
KS_LANCZOS_ERROR 
KS_NEWTON_RAPHSON_ERROR 
ELPASCALAPACK_ERROR 
OTHER_ERROR 

◆ LapackErrorCode

Enumerator
SUCCESS 
FAILED_DENSE_MATRIX_INVERSE 
FAILED_TRIA_MATRIX_INVERSE 
FAILED_CHOLESKY_FACTORIZATION 
FAILED_REAL_TRIDIAGONAL_EIGENPROBLEM 
FAILED_STANDARD_EIGENPROBLEM 
FAILED_GENERALIZED_EIGENPROBLEM 
FAILED_LINEAR_SYSTEM_SOLVE 
OTHER_ERROR 

◆ LinearSolverErrorCode

Enumerator
SUCCESS 
FAILED_TO_CONVERGE 
RESIDUAL_DIVERGENCE 
DIVISON_BY_ZERO 
OTHER_ERROR 

◆ LinearSolverReturnType

Enumerator
SUCCESS 
FAILURE 
MAX_ITER_REACHED 
INDEFINITE_PC 
NAN_RES 

◆ LinearSolverType [1/2]

Enumerator
CG 
CG 

◆ LinearSolverType [2/2]

Enumerator
CG 
CG 

◆ NewtonRaphsonErrorCode

Enumerator
SUCCESS 
FORCE_TOLERANCE_ERR 
FAILED_TO_CONVERGE 
OTHER_ERROR 

◆ NonLinearSolverType

Enumerator
CG 
LBFGS 

◆ OrthogonalizationType

Enumerator
CHOLESKY_GRAMSCHMIDT 
MULTIPASS_LOWDIN 
MULTIPASS_CGS 

◆ OrthonormalizationErrorCode

Enumerator
SUCCESS 
LAPACK_ERROR 
NON_ORTHONORMALIZABLE_MULTIVECTOR 
ELPASCALAPACK_ERROR 
MAX_PASS_EXCEEDED 

◆ ParallelPrintType

Enumerator
NONE 
ROOT_ONLY 
ALL 

◆ PCType

enum class dftefe::linearAlgebra::PCType
strong
Enumerator
NONE 
JACOBI 

◆ PreconditionerType

Enumerator
NONE 
JACOBI 

◆ ScalapackErrorCode

Enumerator
SUCCESS 
FAILED_LU_FACTORIZATION 
FAILED_CHOLESKY_FACTORIZATION 
FAILED_MATRIX_INVERT 
FAILED_STANDARD_HERMITIAN_EIGENPROBLEM 
FAILED_STANDARD_HERMITIAN_EIGENPROBLEM_MRRR 
OTHER_ERROR 

Function Documentation

◆ add() [1/2]

template<typename ValueType1 , typename ValueType2 , utils::MemorySpace memorySpace>
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 \).

Parameters
[in]ascalar
[in]ufirst MultiVector on the right
[in]bscalar
[in]vsecond MultiVector on the right
[out]wresulting MultiVector
Template Parameters
ValueType1DataType (double, float, complex<double>, etc.) of u vector
ValueType2DataType (double, float, complex<double>, etc.) of v vector
memorySpacedefines the MemorySpace (i.e., HOST or DEVICE) in which the vector must reside.
Note
The datatype of the scalars a, b, and the resultant MultiVector w is decided through a union of ValueType1 and ValueType2 (e.g., union of double and complex<double> is complex<double>)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ add() [2/2]

template<typename ValueType1 , typename ValueType2 , utils::MemorySpace memorySpace>
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 \).

Parameters
[in]avector
[in]ufirst MultiVector on the right
[in]bvector
[in]vsecond MultiVector on the right
[out]wresulting MultiVector
Template Parameters
ValueType1DataType (double, float, complex<double>, etc.) of u vector
ValueType2DataType (double, float, complex<double>, etc.) of v vector
memorySpacedefines the MemorySpace (i.e., HOST or DEVICE) in which the vector must reside.
Note
The datatype of the scalars a, b, and the resultant MultiVector w is decided through a union of ValueType1 and ValueType2 (e.g., union of double and complex<double> is complex<double>)
Here is the call graph for this function:

◆ caxpy_()

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 
)

◆ Cblacs_barrier()

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.

◆ Cblacs_exit()

void dftefe::linearAlgebra::Cblacs_exit ( int  error_code)

Free all BLACS contexts and releases all allocated memory.

◆ Cblacs_get()

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.

https://www.ibm.com/support/knowledgecenter/en/SSNR5K_4.2.0/com.ibm.cluster.pessl.v4r2.pssl100.doc/am6gr_dbget.htm

◆ Cblacs_gridexit()

void dftefe::linearAlgebra::Cblacs_gridexit ( int  context)

Release a BLACS context.

Here is the caller graph for this function:

◆ Cblacs_gridinfo()

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.

https://www.ibm.com/support/knowledgecenter/en/SSNR5K_4.2.0/com.ibm.cluster.pessl.v4r2.pssl100.doc/am6gr_dbinfo.htm

Here is the caller graph for this function:

◆ Cblacs_gridinit()

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.

https://www.ibm.com/support/knowledgecenter/en/SSNR5K_4.2.0/com.ibm.cluster.pessl.v4r2.pssl100.doc/am6gr_dbint.htm

Here is the caller graph for this function:

◆ Cblacs_pcoord()

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.

◆ Cblacs_pinfo()

void dftefe::linearAlgebra::Cblacs_pinfo ( int *  rank,
int *  nprocs 
)

◆ ccopy_()

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 
)

◆ Cdgerv2d()

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

Here is the caller graph for this function:

◆ Cdgesd2d()

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

Here is the caller graph for this function:

◆ cgemm_()

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 
)

◆ cgemv_()

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 
)

◆ Cgerv2d() [1/3]

void dftefe::linearAlgebra::Cgerv2d ( int  context,
int  M,
int  N,
double *  A,
int  lda,
int  rsrc,
int  csrc 
)
inline
Here is the call graph for this function:

◆ Cgerv2d() [2/3]

void dftefe::linearAlgebra::Cgerv2d ( int  context,
int  M,
int  N,
float *  A,
int  lda,
int  rsrc,
int  csrc 
)
inline
Here is the call graph for this function:

◆ Cgerv2d() [3/3]

template<typename number >
void dftefe::linearAlgebra::Cgerv2d ( int  ,
int  ,
int  ,
number *  ,
int  ,
int  ,
int   
)
inline
Here is the call graph for this function:

◆ Cgesd2d() [1/3]

void dftefe::linearAlgebra::Cgesd2d ( int  context,
int  M,
int  N,
double *  A,
int  lda,
int  rdest,
int  cdest 
)
inline
Here is the call graph for this function:

◆ Cgesd2d() [2/3]

void dftefe::linearAlgebra::Cgesd2d ( int  context,
int  M,
int  N,
float *  A,
int  lda,
int  rdest,
int  cdest 
)
inline
Here is the call graph for this function:

◆ Cgesd2d() [3/3]

template<typename number >
void dftefe::linearAlgebra::Cgesd2d ( int  ,
int  ,
int  ,
number *  ,
int  ,
int  ,
int   
)
inline
Here is the call graph for this function:

◆ CGLinearSolver()

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)

Parameters
[in]divergenceTolTolerance 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
Here is the caller graph for this function:

◆ ChebyshevFilter()

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace>
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.

Template Parameters
ValueTypeOperatorThe datatype (float, double, complex<double>, etc.) for the underlying operator
ValueTypeOperandThe datatype (float, double, complex<double>, etc.) of the vector, matrices, etc. on which the operator will act
memorySpaceThe meory space (HOST, DEVICE, HOST_PINNED, etc.) in which the data of the operator and its operands reside
Here is the call graph for this function:

◆ ChebyshevFilterGEP()

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace>
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 
)

◆ Csgerv2d()

void dftefe::linearAlgebra::Csgerv2d ( int  context,
int  M,
int  N,
float *  A,
int  lda,
int  rsrc,
int  csrc 
)
Here is the caller graph for this function:

◆ Csgesd2d()

void dftefe::linearAlgebra::Csgesd2d ( int  context,
int  M,
int  N,
float *  A,
int  lda,
int  rdest,
int  cdest 
)
Here is the caller graph for this function:

◆ Csys2blacs_handle()

int dftefe::linearAlgebra::Csys2blacs_handle ( utils::mpi::MPIComm  comm)

Get BLACS context from MPI comm.

Here is the caller graph for this function:

◆ dasum_()

double dftefe::linearAlgebra::dasum_ ( const unsigned int *  n,
const double *  x,
const unsigned int *  incx 
)

◆ daxpy_()

void dftefe::linearAlgebra::daxpy_ ( const unsigned int *  n,
const double *  alpha,
const double *  x,
const unsigned int *  incx,
double *  y,
const unsigned int *  incy 
)
Here is the caller graph for this function:

◆ dcopy_()

void dftefe::linearAlgebra::dcopy_ ( const unsigned int *  n,
const double *  x,
const unsigned int *  incx,
double *  y,
const unsigned int *  incy 
)

◆ ddot_()

double dftefe::linearAlgebra::ddot_ ( const unsigned int *  N,
const double *  X,
const unsigned int *  INCX,
const double *  Y,
const unsigned int *  INCY 
)

◆ descinit_()

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

Here is the caller graph for this function:

◆ dgemm_()

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 
)
Here is the caller graph for this function:

◆ dgemv_()

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 
)

◆ dgesv_()

void dftefe::linearAlgebra::dgesv_ ( int *  n,
int *  nrhs,
double *  a,
int *  lda,
int *  ipiv,
double *  b,
int *  ldb,
int *  info 
)
Here is the caller graph for this function:

◆ dgetrf_()

void dftefe::linearAlgebra::dgetrf_ ( int *  M,
int *  N,
double *  A,
int *  lda,
int *  IPIV,
int *  INFO 
)
Here is the caller graph for this function:

◆ dgetri_()

void dftefe::linearAlgebra::dgetri_ ( int *  N,
double *  A,
int *  lda,
int *  IPIV,
double *  WORK,
int *  lwork,
int *  INFO 
)
Here is the caller graph for this function:

◆ dlamch_()

double dftefe::linearAlgebra::dlamch_ ( const char *  cmach)

◆ dnrm2_()

double dftefe::linearAlgebra::dnrm2_ ( const unsigned int *  n,
const double *  x,
const unsigned int *  incx 
)

◆ dot() [1/3]

template<typename ValueType1 , typename ValueType2 , utils::MemorySpace memorySpace>
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 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ dot() [2/3]

template<typename ValueType1 , typename ValueType2 , utils::MemorySpace memorySpace>
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 
)
Here is the call graph for this function:

◆ dot() [3/3]

template<typename ValueType1 , typename ValueType2 , utils::MemorySpace memorySpace>
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 
)
Here is the call graph for this function:

◆ dpotrf_()

void dftefe::linearAlgebra::dpotrf_ ( const char *  uplo,
const unsigned int *  n,
double *  a,
const unsigned int *  lda,
int *  info 
)
Here is the caller graph for this function:

◆ dpotri_()

void dftefe::linearAlgebra::dpotri_ ( const char *  uplo,
const unsigned int *  n,
double *  A,
const unsigned int *  lda,
int *  info 
)

◆ dscal_()

void dftefe::linearAlgebra::dscal_ ( const unsigned int *  n,
const double *  alpha,
double *  x,
const unsigned int *  inc 
)

◆ dsteqr_()

void dftefe::linearAlgebra::dsteqr_ ( const char *  jobz,
const int *  n,
double *  D,
double *  E,
double *  Z,
const int *  lda,
double *  work,
int *  info 
)
Here is the caller graph for this function:

◆ dsyevd_()

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 
)
Here is the caller graph for this function:

◆ dsyevr_()

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 
)

◆ dsyevx_()

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 
)

◆ dsygv_()

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 
)
Here is the caller graph for this function:

◆ dsygvx_()

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 
)

◆ dsymv_()

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 
)

◆ dsyr2_()

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 
)

◆ dsyr_()

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 
)

◆ dsyrk_()

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 
)

◆ dsysv_()

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 
)

◆ dtrtri_()

void dftefe::linearAlgebra::dtrtri_ ( const char *  uplo,
const char *  diag,
const unsigned int *  n,
double *  a,
const unsigned int *  lda,
int *  info 
)
Here is the caller graph for this function:

◆ dzasum_()

double dftefe::linearAlgebra::dzasum_ ( const unsigned int *  n,
const std::complex< double > *  x,
const unsigned int *  incx 
)

◆ dznrm2_()

double dftefe::linearAlgebra::dznrm2_ ( const unsigned int *  n,
const std::complex< double > *  x,
const unsigned int *  incx 
)

◆ icamax_()

unsigned int dftefe::linearAlgebra::icamax_ ( const unsigned int *  n,
const std::complex< float > *  x,
const unsigned int *  incx 
)

◆ iceil_()

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

◆ idamax_()

unsigned int dftefe::linearAlgebra::idamax_ ( const unsigned int *  n,
const double *  x,
const unsigned int *  incx 
)
Here is the caller graph for this function:

◆ ilcm_()

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

◆ indxg2p_()

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

Here is the caller graph for this function:

◆ indxl2g_()

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.

Parameters
indxlocThe local index of the distributed matrix entry.
nbBlock size, size of the blocks the distributed matrix is split into.
iprocThe coordinate of the process whose local array row or column is to be determined
isrcprocThe coordinate of the process that possesses the first row/column of the distributed matrix
nprocsThe total number processes over which the distributed matrix is distributed
Here is the caller graph for this function:

◆ isamax_()

unsigned int dftefe::linearAlgebra::isamax_ ( const unsigned int *  n,
const float *  x,
const unsigned int *  incx 
)
Here is the caller graph for this function:

◆ izamax_()

unsigned int dftefe::linearAlgebra::izamax_ ( const unsigned int *  n,
const std::complex< double > *  x,
const unsigned int *  incx 
)

◆ lworkFromWork() [1/3]

int dftefe::linearAlgebra::lworkFromWork ( std::vector< double > &  work)
inline
Here is the caller graph for this function:

◆ lworkFromWork() [2/3]

int dftefe::linearAlgebra::lworkFromWork ( std::vector< float > &  work)
inline

◆ lworkFromWork() [3/3]

int dftefe::linearAlgebra::lworkFromWork ( std::vector< std::complex< double > > &  work)
inline

◆ numroc_()

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).

https://www.ibm.com/support/knowledgecenter/SSNR5K_4.2.0/com.ibm.cluster.pessl.v4r2.pssl100.doc/am6gr_dnumy.htm

Here is the caller graph for this function:

◆ pdgeadd_()

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 
)
Here is the caller graph for this function:

◆ pdgels_()

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 
)
Here is the caller graph for this function:

◆ pdgemm_()

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$.

Here is the caller graph for this function:

◆ pdgemr2d_()

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

Here is the caller graph for this function:

◆ pdgesv_()

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

Here is the caller graph for this function:

◆ pdgesvd_()

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 
)
Here is the caller graph for this function:

◆ pdgetrf_()

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

Here is the caller graph for this function:

◆ pdgetri_()

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

Here is the caller graph for this function:

◆ pdlacpy_()

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)$.

Here is the caller graph for this function:

◆ pdlamch_()

double dftefe::linearAlgebra::pdlamch_ ( const int *  ictxt,
const char *  cmach 
)

helper routines determining machine precision

Here is the caller graph for this function:

◆ pdlange_()

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

Here is the caller graph for this function:

◆ pdlansy_()

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 
)

◆ pdpocon_()

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

Here is the caller graph for this function:

◆ pdpotrf_()

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

Here is the caller graph for this function:

◆ pdpotri_()

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

Here is the caller graph for this function:

◆ pdsyev_()

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

Here is the caller graph for this function:

◆ pdsyevr_()

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.

Here is the caller graph for this function:

◆ pdsyevx_()

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.

Here is the caller graph for this function:

◆ pdtran_()

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

Here is the caller graph for this function:

◆ pdtrtri_()

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 
)

◆ pgeadd() [1/4]

template<typename number >
void dftefe::linearAlgebra::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 *   
)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ pgeadd() [2/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgeadd() [3/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgeadd() [4/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgels() [1/3]

template<typename number >
void dftefe::linearAlgebra::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 *   
)
inline
Here is the call graph for this function:

◆ pgels() [2/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgels() [3/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgemm() [1/4]

template<typename number >
void dftefe::linearAlgebra::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 *   
)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ pgemm() [2/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgemm() [3/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgemm() [4/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgemr2d() [1/3]

template<typename number >
void dftefe::linearAlgebra::pgemr2d ( const int *  ,
const int *  ,
const number *  ,
const int *  ,
const int *  ,
const int *  ,
number *  ,
const int *  ,
const int *  ,
const int *  ,
const int *   
)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ pgemr2d() [2/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgemr2d() [3/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgesv() [1/3]

template<typename number >
void dftefe::linearAlgebra::pgesv ( const int *  ,
const int *  ,
number *  ,
const int *  ,
const int *  ,
const int *  ,
int *  ,
number *  ,
const int *  ,
const int *  ,
const int *  ,
int *   
)
inline
Here is the call graph for this function:

◆ pgesv() [2/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgesv() [3/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgesvd() [1/3]

template<typename number >
void dftefe::linearAlgebra::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 *   
)
inline
Here is the call graph for this function:

◆ pgesvd() [2/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgesvd() [3/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgetrf() [1/4]

template<typename number >
void dftefe::linearAlgebra::pgetrf ( const int *  ,
const int *  ,
number *  ,
const int *  ,
const int *  ,
const int *  ,
int *  ,
int *   
)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ pgetrf() [2/4]

void dftefe::linearAlgebra::pgetrf ( const int *  m,
const int *  n,
double *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
int *  ipiv,
int *  INFO 
)
inline
Here is the call graph for this function:

◆ pgetrf() [3/4]

void dftefe::linearAlgebra::pgetrf ( const int *  m,
const int *  n,
float *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
int *  ipiv,
int *  INFO 
)
inline
Here is the call graph for this function:

◆ pgetrf() [4/4]

void dftefe::linearAlgebra::pgetrf ( const int *  m,
const int *  n,
std::complex< double > *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
int *  ipiv,
int *  INFO 
)
inline
Here is the call graph for this function:

◆ pgetri() [1/4]

template<typename number >
void dftefe::linearAlgebra::pgetri ( const int *  ,
number *  ,
const int *  ,
const int *  ,
const int *  ,
const int *  ,
number *  ,
int *  ,
int *  ,
int *  ,
int *   
)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ pgetri() [2/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgetri() [3/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pgetri() [4/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ placpy() [1/3]

template<typename number >
void dftefe::linearAlgebra::placpy ( const char *  ,
const int *  ,
const int *  ,
const number *  ,
const int *  ,
const int *  ,
const int *  ,
number *  ,
const int *  ,
const int *  ,
const int *   
)
inline
Here is the call graph for this function:

◆ placpy() [2/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ placpy() [3/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ plamch() [1/3]

template<typename number >
void dftefe::linearAlgebra::plamch ( const int *  ,
const char *  ,
number &   
)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ plamch() [2/3]

void dftefe::linearAlgebra::plamch ( const int *  ictxt,
const char *  cmach,
double &  val 
)
inline
Here is the call graph for this function:

◆ plamch() [3/3]

void dftefe::linearAlgebra::plamch ( const int *  ictxt,
const char *  cmach,
float &  val 
)
inline
Here is the call graph for this function:

◆ plange() [1/3]

template<typename number >
number dftefe::linearAlgebra::plange ( const char *  ,
const int *  ,
const int *  ,
const number *  ,
const int *  ,
const int *  ,
const int *  ,
number *   
)
inline
Here is the call graph for this function:

◆ plange() [2/3]

double dftefe::linearAlgebra::plange ( const char *  norm,
const int *  m,
const int *  n,
const double *  A,
const int *  ia,
const int *  ja,
const int *  desca,
double *  work 
)
inline
Here is the call graph for this function:

◆ plange() [3/3]

float dftefe::linearAlgebra::plange ( const char *  norm,
const int *  m,
const int *  n,
const float *  A,
const int *  ia,
const int *  ja,
const int *  desca,
float *  work 
)
inline
Here is the call graph for this function:

◆ plansy() [1/3]

template<typename number >
number dftefe::linearAlgebra::plansy ( const char *  ,
const char *  ,
const int *  ,
const number *  ,
const int *  ,
const int *  ,
const int *  ,
number *   
)
inline
Here is the call graph for this function:

◆ plansy() [2/3]

double dftefe::linearAlgebra::plansy ( const char *  norm,
const char *  uplo,
const int *  N,
const double *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
double *  work 
)
inline
Here is the call graph for this function:

◆ plansy() [3/3]

float dftefe::linearAlgebra::plansy ( const char *  norm,
const char *  uplo,
const int *  N,
const float *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
float *  work 
)
inline
Here is the call graph for this function:

◆ pplacgv() [1/2]

void dftefe::linearAlgebra::pplacgv ( const int *  N,
double *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
const int *  INCX 
)
inline
Here is the caller graph for this function:

◆ pplacgv() [2/2]

void dftefe::linearAlgebra::pplacgv ( const int *  N,
std::complex< double > *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
const int *  INCX 
)
inline
Here is the call graph for this function:

◆ ppocon() [1/3]

template<typename number >
void dftefe::linearAlgebra::ppocon ( const char *  ,
const int *  ,
const number *  ,
const int *  ,
const int *  ,
const int *  ,
const number *  ,
number *  ,
number *  ,
const int *  ,
int *  ,
const int *  ,
int *   
)
inline
Here is the call graph for this function:

◆ ppocon() [2/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ ppocon() [3/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ ppotrf() [1/4]

template<typename number >
void dftefe::linearAlgebra::ppotrf ( const char *  ,
const int *  ,
number *  ,
const int *  ,
const int *  ,
const int *  ,
int *   
)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ppotrf() [2/4]

void dftefe::linearAlgebra::ppotrf ( const char *  UPLO,
const int *  N,
double *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
int *  INFO 
)
inline
Here is the call graph for this function:

◆ ppotrf() [3/4]

void dftefe::linearAlgebra::ppotrf ( const char *  UPLO,
const int *  N,
float *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
int *  INFO 
)
inline
Here is the call graph for this function:

◆ ppotrf() [4/4]

void dftefe::linearAlgebra::ppotrf ( const char *  UPLO,
const int *  N,
std::complex< double > *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
int *  INFO 
)
inline
Here is the call graph for this function:

◆ ppotri() [1/4]

template<typename number >
void dftefe::linearAlgebra::ppotri ( const char *  ,
const int *  ,
number *  ,
const int *  ,
const int *  ,
const int *  ,
int *   
)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ppotri() [2/4]

void dftefe::linearAlgebra::ppotri ( const char *  UPLO,
const int *  N,
double *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
int *  INFO 
)
inline
Here is the call graph for this function:

◆ ppotri() [3/4]

void dftefe::linearAlgebra::ppotri ( const char *  UPLO,
const int *  N,
float *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
int *  INFO 
)
inline
Here is the call graph for this function:

◆ ppotri() [4/4]

void dftefe::linearAlgebra::ppotri ( const char *  UPLO,
const int *  N,
std::complex< double > *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
int *  INFO 
)
inline
Here is the call graph for this function:

◆ ProcessGrid::send_to_inactive< std::complex< double > >()

template void dftefe::linearAlgebra::ProcessGrid::send_to_inactive< std::complex< double > > ( std::complex< double > *  ,
const int   
) const

◆ psgeadd_()

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 
)
Here is the caller graph for this function:

◆ psgels_()

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 
)
Here is the caller graph for this function:

◆ psgemm_()

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 
)
Here is the caller graph for this function:

◆ psgemr2d_()

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 
)
Here is the caller graph for this function:

◆ psgesv_()

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 
)
Here is the caller graph for this function:

◆ psgesvd_()

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 
)
Here is the caller graph for this function:

◆ psgetrf_()

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 
)
Here is the caller graph for this function:

◆ psgetri_()

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 
)
Here is the caller graph for this function:

◆ pslacpy_()

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 
)
Here is the caller graph for this function:

◆ pslamch_()

float dftefe::linearAlgebra::pslamch_ ( const int *  ictxt,
const char *  cmach 
)
Here is the caller graph for this function:

◆ pslange_()

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 
)
Here is the caller graph for this function:

◆ pslansy_()

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 
)
Here is the caller graph for this function:

◆ pspocon_()

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 
)
Here is the caller graph for this function:

◆ pspotrf_()

void dftefe::linearAlgebra::pspotrf_ ( const char *  UPLO,
const int *  N,
float *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
int *  INFO 
)
Here is the caller graph for this function:

◆ pspotri_()

void dftefe::linearAlgebra::pspotri_ ( const char *  UPLO,
const int *  N,
float *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
int *  INFO 
)
Here is the caller graph for this function:

◆ pssyev_()

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 
)
Here is the caller graph for this function:

◆ pssyevr_()

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 
)
Here is the caller graph for this function:

◆ pssyevx_()

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 
)
Here is the caller graph for this function:

◆ pstran_()

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 
)
Here is the caller graph for this function:

◆ pstrtri_()

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 
)
Here is the caller graph for this function:

◆ psyev() [1/4]

template<typename number >
void dftefe::linearAlgebra::psyev ( const char *  ,
const char *  ,
const int *  ,
number *  ,
const int *  ,
const int *  ,
int *  ,
number *  ,
number *  ,
const int *  ,
const int *  ,
int *  ,
number *  ,
const int *  ,
int *   
)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ psyev() [2/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ psyev() [3/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ psyev() [4/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ psyevr() [1/4]

template<typename number >
void dftefe::linearAlgebra::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 *   
)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ psyevr() [2/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ psyevr() [3/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ psyevr() [4/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ psyevx() [1/4]

template<typename number >
void dftefe::linearAlgebra::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 *   
)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ psyevx() [2/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ psyevx() [3/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ psyevx() [4/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ ptran() [1/3]

template<typename number >
void dftefe::linearAlgebra::ptran ( const int *  ,
const int *  ,
const number *  ,
const number *  ,
const int *  ,
const int *  ,
const int *  ,
const number *  ,
number *  ,
const int *  ,
const int *  ,
const int *   
)
inline
Here is the call graph for this function:

◆ ptran() [2/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ ptran() [3/3]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ ptrtri() [1/4]

template<typename number >
void dftefe::linearAlgebra::ptrtri ( const char *  ,
const char *  ,
const int *  ,
number *  ,
const int *  ,
const int *  ,
const int *  ,
int *   
)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ptrtri() [2/4]

void dftefe::linearAlgebra::ptrtri ( const char *  UPLO,
const char *  DIAG,
const int *  N,
double *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
int *  INFO 
)
inline
Here is the call graph for this function:

◆ ptrtri() [3/4]

void dftefe::linearAlgebra::ptrtri ( const char *  UPLO,
const char *  DIAG,
const int *  N,
float *  A,
const int *  IA,
const int *  JA,
const int *  DESCA,
int *  INFO 
)
inline
Here is the call graph for this function:

◆ ptrtri() [4/4]

void dftefe::linearAlgebra::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 
)
inline
Here is the call graph for this function:

◆ pzgeadd_()

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 
)
Here is the caller graph for this function:

◆ pzgemm_()

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 
)
Here is the caller graph for this function:

◆ pzgetrf_()

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 
)
Here is the caller graph for this function:

◆ pzgetri_()

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 
)
Here is the caller graph for this function:

◆ pzheev_()

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 
)
Here is the caller graph for this function:

◆ pzheevr_()

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 
)
Here is the caller graph for this function:

◆ pzheevx_()

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 
)
Here is the caller graph for this function:

◆ pzlacgv_()

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

Here is the caller graph for this function:

◆ pzpotrf_()

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 
)
Here is the caller graph for this function:

◆ pzpotri_()

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 
)
Here is the caller graph for this function:

◆ pztrtri_()

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 
)
Here is the caller graph for this function:

◆ ResidualChebyshevFilterGEP()

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace>
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) }

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sasum_()

double dftefe::linearAlgebra::sasum_ ( const unsigned int *  n,
const float *  x,
const unsigned int *  incx 
)

◆ saxpy_()

void dftefe::linearAlgebra::saxpy_ ( const unsigned int *  n,
const float *  alpha,
const float *  x,
const unsigned int *  incx,
float *  y,
const unsigned int *  incy 
)
Here is the caller graph for this function:

◆ scasum_()

double dftefe::linearAlgebra::scasum_ ( const unsigned int *  n,
const std::complex< float > *  x,
const unsigned int *  incx 
)

◆ scopy_()

void dftefe::linearAlgebra::scopy_ ( const unsigned int *  n,
const float *  x,
const unsigned int *  incx,
float *  y,
const unsigned int *  incy 
)

◆ sgemm_()

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 
)
Here is the caller graph for this function:

◆ sgemv_()

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 
)

◆ solve()

LinearSolverError dftefe::linearAlgebra::solve ( LinearSolverFunction< ValueTypeOperator, ValueTypeOperand, memorySpace > &  linearSolverFunction)
override

Function that initiates the linear solve.

Parameters
[in]linearSolverFunctionReference 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

◆ sscal_()

void dftefe::linearAlgebra::sscal_ ( const unsigned int *  n,
const float *  alpha,
float *  x,
const unsigned int *  inc 
)

◆ swap()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
void dftefe::linearAlgebra::swap ( MultiVector< ValueType, memorySpace > &  X,
MultiVector< ValueType, memorySpace > &  Y 
)

Swaps the data of u with this multivector.

Here is the caller graph for this function:

◆ zaxpy_()

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 
)

◆ zcopy_()

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 
)

◆ zdotc_()

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 
)

◆ zdscal_()

void dftefe::linearAlgebra::zdscal_ ( const unsigned int *  n,
const double *  alpha,
std::complex< double > *  x,
const unsigned int *  inc 
)

◆ zgemm_()

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 
)

◆ zgemv_()

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 
)

◆ zgesv_()

void dftefe::linearAlgebra::zgesv_ ( int *  n,
int *  nrhs,
std::complex< double > *  a,
int *  lda,
int *  ipiv,
std::complex< double > *  b,
int *  ldb,
int *  info 
)
Here is the caller graph for this function:

◆ zgetrf_()

void dftefe::linearAlgebra::zgetrf_ ( int *  M,
int *  N,
std::complex< double > *  A,
int *  lda,
int *  IPIV,
int *  INFO 
)
Here is the caller graph for this function:

◆ zgetri_()

void dftefe::linearAlgebra::zgetri_ ( int *  N,
std::complex< double > *  A,
int *  lda,
int *  IPIV,
std::complex< double > *  WORK,
int *  lwork,
int *  INFO 
)
Here is the caller graph for this function:

◆ zheevd_()

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 
)
Here is the caller graph for this function:

◆ zheevr_()

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 
)

◆ zhegv_()

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 
)
Here is the caller graph for this function:

◆ zherk_()

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 
)

◆ zpotrf_()

void dftefe::linearAlgebra::zpotrf_ ( const char *  uplo,
const unsigned int *  n,
std::complex< double > *  a,
const unsigned int *  lda,
int *  info 
)
Here is the caller graph for this function:

◆ zscal_()

void dftefe::linearAlgebra::zscal_ ( const unsigned int *  n,
const std::complex< double > *  alpha,
std::complex< double > *  x,
const unsigned int *  inc 
)

◆ zsteqr_()

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 
)
Here is the caller graph for this function:

◆ ztrtri_()

void dftefe::linearAlgebra::ztrtri_ ( const char *  uplo,
const char *  diag,
const unsigned int *  n,
std::complex< double > *  a,
const unsigned int *  lda,
int *  info 
)
Here is the caller graph for this function:

◆ ~CGLinearSolver()

dftefe::linearAlgebra::~CGLinearSolver ( )
default

Default Destructor.

Variable Documentation

◆ d_absoluteTol

double dftefe::linearAlgebra::d_absoluteTol
private

◆ d_divergenceTol

double dftefe::linearAlgebra::d_divergenceTol
private

◆ d_maxIter

size_type dftefe::linearAlgebra::d_maxIter
private

◆ d_profiler

LinearAlgebraProfiler dftefe::linearAlgebra::d_profiler
private

◆ d_relativeTol

double dftefe::linearAlgebra::d_relativeTol
private

◆ LINALG_OP_CONTXT_HOST

std::shared_ptr<linearAlgebra::LinAlgOpContext<utils::MemorySpace::HOST> > dftefe::linearAlgebra::LINALG_OP_CONTXT_HOST
Initial value:
= std::make_shared<
linearAlgebra::LinAlgOpContext<utils::MemorySpace::HOST>>(
std::make_shared<
linearAlgebra::blasLapack::BlasQueue<utils::MemorySpace::HOST>>(0),
std::make_shared<
linearAlgebra::blasLapack::LapackQueue<utils::MemorySpace::HOST>>(0))

Setting all the LinAlgOpContextDefaults.