28#if defined(NDA_HAVE_CUDA) 
   32namespace nda::lapack::f77 {
 
   34  void gelss(
int M, 
int N, 
int NRHS, 
double *A, 
int LDA, 
double *B, 
int LDB, 
double *S, 
double RCOND, 
int &RANK, 
double *WORK, 
int LWORK,
 
   35             double *RWORK, 
int &INFO);
 
   36  void gelss(
int M, 
int N, 
int NRHS, std::complex<double> *A, 
int LDA, std::complex<double> *B, 
int LDB, 
double *S, 
double RCOND, 
int &RANK,
 
   37             std::complex<double> *WORK, 
int LWORK, 
double *RWORK, 
int &INFO);
 
   39  void gesvd(
char JOBU, 
char JOBVT, 
int M, 
int N, 
double *A, 
int LDA, 
double *S, 
double *U, 
int LDU, 
double *VT, 
int LDVT, 
double *WORK, 
int LWORK,
 
   40             double *RWORK, 
int &INFO);
 
   41  void gesvd(
char JOBU, 
char JOBVT, 
int M, 
int N, std::complex<double> *A, 
int LDA, 
double *S, std::complex<double> *U, 
int LDU,
 
   42             std::complex<double> *VT, 
int LDVT, std::complex<double> *WORK, 
int LWORK, 
double *RWORK, 
int &INFO);
 
   44  void geqp3(
int M, 
int N, 
double *A, 
int LDA, 
int *JPVT, 
double *TAU, 
double *WORK, 
int LWORK, 
double *RWORK, 
int &INFO);
 
   45  void geqp3(
int M, 
int N, std::complex<double> *A, 
int LDA, 
int *JPVT, std::complex<double> *TAU, std::complex<double> *WORK, 
int LWORK,
 
   46             double *RWORK, 
int &INFO);
 
   48  void orgqr(
int M, 
int N, 
int K, 
double *A, 
int LDA, 
double *TAU, 
double *WORK, 
int LWORK, 
int &INFO);
 
   50  void ungqr(
int M, 
int N, 
int K, std::complex<double> *A, 
int LDA, std::complex<double> *TAU, std::complex<double> *WORK, 
int LWORK, 
int &INFO);
 
   52  void getrf(
int M, 
int N, 
double *A, 
int LDA, 
int *ipiv, 
int &info);
 
   53  void getrf(
int M, 
int N, std::complex<double> *A, 
int LDA, 
int *ipiv, 
int &info);
 
   55  void getri(
int N, 
double *A, 
int LDA, 
int const *ipiv, 
double *work, 
int lwork, 
int &info);
 
   56  void getri(
int N, std::complex<double> *A, 
int LDA, 
int const *ipiv, std::complex<double> *work, 
int lwork, 
int &info);
 
   58  void gtsv(
int N, 
int NRHS, 
double *DL, 
double *D, 
double *DU, 
double *B, 
int LDB, 
int &info);
 
   59  void gtsv(
int N, 
int NRHS, std::complex<double> *DL, std::complex<double> *D, std::complex<double> *DU, std::complex<double> *B, 
int LDB,
 
   62  void stev(
char J, 
int N, 
double *D, 
double *E, 
double *Z, 
int ldz, 
double *work, 
int &info);
 
   64  void syev(
char JOBZ, 
char UPLO, 
int N, 
double *A, 
int LDA, 
double *W, 
double *work, 
int &lwork, 
int &info);
 
   66  void heev(
char JOBZ, 
char UPLO, 
int N, std::complex<double> *A, 
int LDA, 
double *W, std::complex<double> *work, 
int &lwork, 
double *work2,
 
   69  void getrs(
char op, 
int N, 
int NRHS, 
double const *A, 
int LDA, 
int const *ipiv, 
double *B, 
int LDB, 
int &info);
 
   70  void getrs(
char op, 
int N, 
int NRHS, std::complex<double> 
const *A, 
int LDA, 
int const *ipiv, std::complex<double> *B, 
int LDB, 
int &info);
 
   75namespace nda::lapack {
 
Provides a C++ interface for the GPU versions of various LAPACK routines.
int get_ld(A const &a)
Get the leading dimension in LAPACK jargon of an nda::MemoryMatrix.
static constexpr bool has_C_layout
Constexpr variable that is true if the given nda::Array type has a C memory layout.
static constexpr bool is_conj_array_expr
Constexpr variable that is true if the given type is a conjugate lazy expression.
int get_ncols(A const &a)
Get the number of columns in LAPACK jargon of an nda::MemoryMatrix.
static constexpr bool has_F_layout
Constexpr variable that is true if the given nda::Array type has a Fortran memory layout.
const char get_op
Variable template that determines the BLAS matrix operation tag ('N','T','C') based on the given bool...