17namespace nda::lapack::f77 {
19 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,
20 [[maybe_unused]]
double *RWORK,
int &INFO) {
21 LAPACK_dgelss(&M, &N, &NRHS, A, &LDA, B, &LDB, S, &RCOND, &RANK, WORK, &LWORK, &INFO);
23 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,
24 std::complex<double> *WORK,
int LWORK,
double *RWORK,
int &INFO) {
25 LAPACK_zgelss(&M, &N, &NRHS, A, &LDA, B, &LDB, S, &RCOND, &RANK, WORK, &LWORK, RWORK, &INFO);
28 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,
29 [[maybe_unused]]
double *RWORK,
int &INFO) {
30 LAPACK_dgesvd(&JOBU, &JOBVT, &M, &N, A, &LDA, S, U, &LDU, VT, &LDVT, WORK, &LWORK, &INFO);
32 void gesvd(
char JOBU,
char JOBVT,
int M,
int N, std::complex<double> *A,
int LDA,
double *S, std::complex<double> *U,
int LDU,
33 std::complex<double> *VT,
int LDVT, std::complex<double> *WORK,
int LWORK,
double *RWORK,
int &INFO) {
34 LAPACK_zgesvd(&JOBU, &JOBVT, &M, &N, A, &LDA, S, U, &LDU, VT, &LDVT, WORK, &LWORK, RWORK, &INFO);
37 void geqp3(
int M,
int N,
double *A,
int LDA,
int *JPVT,
double *TAU,
double *WORK,
int LWORK, [[maybe_unused]]
double *RWORK,
int &INFO) {
38 LAPACK_dgeqp3(&M, &N, A, &LDA, JPVT, TAU, WORK, &LWORK, &INFO);
40 void geqp3(
int M,
int N, std::complex<double> *A,
int LDA,
int *JPVT, std::complex<double> *TAU, std::complex<double> *WORK,
int LWORK,
41 double *RWORK,
int &INFO) {
42 LAPACK_zgeqp3(&M, &N, A, &LDA, JPVT, TAU, WORK, &LWORK, RWORK, &INFO);
45 void orgqr(
int M,
int N,
int K,
double *A,
int LDA,
double *TAU,
double *WORK,
int LWORK,
int &INFO) {
46 LAPACK_dorgqr(&M, &N, &K, A, &LDA, TAU, WORK, &LWORK, &INFO);
49 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) {
50 LAPACK_zungqr(&M, &N, &K, A, &LDA, TAU, WORK, &LWORK, &INFO);
53 void getrf(
int M,
int N,
double *A,
int LDA,
int *ipiv,
int &info) { LAPACK_dgetrf(&M, &N, A, &LDA, ipiv, &info); }
54 void getrf(
int M,
int N, std::complex<double> *A,
int LDA,
int *ipiv,
int &info) { LAPACK_zgetrf(&M, &N, A, &LDA, ipiv, &info); }
56 void getri(
int N,
double *A,
int LDA,
int const *ipiv,
double *work,
int lwork,
int &info) {
57 LAPACK_dgetri(&N, A, &LDA, ipiv, work, &lwork, &info);
59 void getri(
int N, std::complex<double> *A,
int LDA,
int const *ipiv, std::complex<double> *work,
int lwork,
int &info) {
60 LAPACK_zgetri(&N, A, &LDA, ipiv, work, &lwork, &info);
63 void gtsv(
int N,
int NRHS,
double *DL,
double *D,
double *DU,
double *B,
int LDB,
int &info) { LAPACK_dgtsv(&N, &NRHS, DL, D, DU, B, &LDB, &info); }
64 void gtsv(
int N,
int NRHS, std::complex<double> *DL, std::complex<double> *D, std::complex<double> *DU, std::complex<double> *B,
int LDB,
66 LAPACK_zgtsv(&N, &NRHS, DL, D, DU, B, &LDB, &info);
69 void stev(
char J,
int N,
double *D,
double *E,
double *Z,
int ldz,
double *work,
int &info) { LAPACK_dstev(&J, &N, D, E, Z, &ldz, work, &info); }
71 void syev(
char JOBZ,
char UPLO,
int N,
double *A,
int LDA,
double *W,
double *work,
int &lwork,
int &info) {
72 LAPACK_dsyev(&JOBZ, &UPLO, &N, A, &LDA, W, work, &lwork, &info);
75 void heev(
char JOBZ,
char UPLO,
int N, std::complex<double> *A,
int LDA,
double *W, std::complex<double> *work,
int &lwork,
double *work2,
77 LAPACK_zheev(&JOBZ, &UPLO, &N, A, &LDA, W, work, &lwork, work2, &info);
80 void getrs(
char op,
int N,
int NRHS,
double const *A,
int LDA,
int const *ipiv,
double *B,
int LDB,
int &info) {
81 LAPACK_dgetrs(&op, &N, &NRHS, A, &LDA, ipiv, B, &LDB, &info);
83 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) {
84 LAPACK_zgetrs(&op, &N, &NRHS, A, &LDA, ipiv, B, &LDB, &info);
Provides a C++ interface for various LAPACK routines.