18
19
20
24#include "../../blas/tools.hpp"
28#if defined(NDA_HAVE_CUDA)
29#include "./cusolver_interface.hpp"
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 {
81 using blas::get_ncols;
87 using blas::has_C_layout;
90 using blas::has_F_layout;
93 using blas::is_conj_array_expr;
#define LAPACK_cheevx_2stage
#define LAPACK_chesv_rook
#define LAPACK_csytrf_rook
#define LAPACK_ssbevd_2stage
#define LAPACK_dsytrd_2stage
#define LAPACK_zhetrs_aa_2stage
#define LAPACK_sorcsd2by1
#define LAPACK_chesv_aa_2stage
#define LAPACK_dsbevd_2stage
#define LAPACK_zhesv_rook
#define LAPACK_csytrs_aa_2stage
#define LAPACK_dsyevd_2stage
#define LAPACK_zhbev_2stage
#define LAPACK_zsytrf_aa_2stage
#define LAPACK_chetrs_aa_2stage
#define LAPACK_cheevr_2stage
#define LAPACK_zhesv_aa_2stage
#define LAPACK_ssytrf_aa_2stage
#define LAPACK_ssysv_aa_2stage
#define LAPACK_ssyevx_2stage
#define LAPACK_csytrf_aa_2stage
#define LAPACK_dsytrs_rook
#define LAPACK_chetrs_rook
#define LAPACK_ssbevx_2stage
#define LAPACK_chbev_2stage
#define LAPACK_zhbevx_2stage
#define LAPACK_cheev_2stage
#define LAPACK_dsbev_2stage
#define LAPACK_chetrf_aa_2stage
#define LAPACK_zhetrs_rook
#define LAPACK_dorcsd2by1
#define LAPACK_ssbev_2stage
#define LAPACK_ssyevr_2stage
#define LAPACK_dsytrs_aa_2stage
#define LAPACK_zhbevd_2stage
#define LAPACK_chbevx_2stage
#define LAPACK_dsbevx_2stage
#define LAPACK_dsyevr_2stage
#define LAPACK_zsysv_rook
#define LAPACK_zsytrs_aa_2stage
#define LAPACK_zsytrf_rook
#define LAPACK_dsytrf_aa_2stage
#define LAPACK_dsyevx_2stage
#define LAPACK_ssytrs_rook
#define LAPACK_ssytrd_2stage
#define LAPACK_chegv_2stage
#define LAPACK_chbevd_2stage
#define LAPACK_chetrd_2stage
#define LAPACK_dsytrf_rook
#define LAPACK_zheevr_2stage
#define LAPACK_cheevd_2stage
#define LAPACK_csysv_rook
#define LAPACK_dsysv_aa_2stage
#define LAPACK_ssyev_2stage
#define LAPACK_zhegv_2stage
#define LAPACK_ssyevd_2stage
#define LAPACK_ssytrs_aa_2stage
#define LAPACK_zhetrf_aa_2stage
#define LAPACK_chetrf_rook
#define LAPACK_dsyev_2stage
#define HAVE_LAPACK_CONFIG_H
#define LAPACK_zhetrf_rook
#define LAPACK_zheev_2stage
#define LAPACK_zsysv_aa_2stage
#define LAPACK_ssytrf_rook
#define LAPACK_dsysv_rook
#define LAPACK_zheevx_2stage
#define LAPACK_zsytrs_rook
#define LAPACK_zhetrd_2stage
#define LAPACK_ssysv_rook
#define LAPACK_cuncsd2by1
#define LAPACK_zuncsd2by1
#define LAPACK_dsygv_2stage
#define LAPACK_zheevd_2stage
#define LAPACK_csytrs_rook
#define LAPACK_ssygv_2stage
#define LAPACK_csysv_aa_2stage
#define lapack_complex_float_real(z)
#define lapack_complex_float_imag(z)
#define lapack_complex_double_real(z)
#define lapack_complex_double
#define lapack_complex_float
#define lapack_complex_double_imag(z)
#define LAPACK_GLOBAL(lcname, UCNAME)