Fix C prototypes and LAPACKE headers for ?GEDMD/?GEDMDQ (#4134)

* Fix prototypes for ?GEDMD/?GEDMDQ and their LAPACKE interfaces
This commit is contained in:
Martin Kroeker 2023-07-15 07:47:19 +02:00 committed by GitHub
parent 49077e7bde
commit 4c43d1eeba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 454 additions and 313 deletions

View File

@ -3323,68 +3323,107 @@ void LAPACK_zgesdd_base(
#define LAPACK_zgesdd(...) LAPACK_zgesdd_base(__VA_ARGS__)
#endif
#define LAPACK_cgedmd LAPACK_GLOBAL(cgedmd,CGEDMD)
void LAPACK_cgedmd(
char const* jobs, char const* jobz, char const* jobf,
#define LAPACK_cgedmd_base LAPACK_GLOBAL(cgedmd,CGEDMD)
void LAPACK_cgedmd_base(
char const* jobs, char const* jobz, char const* jobr, char const* jobf,
lapack_int const* whtsvd, lapack_int const* m, lapack_int const* n,
lapack_complex_float* x, lapack_int const* ldx,
lapack_complex_float* y, lapack_int const* ldy, lapack_int const* k,
lapack_complex_float* reig, lapack_complex_float* imeig,
lapack_complex_float* z, lapack_int const* ldz, lapack_complex_float* res,
lapack_complex_float* y, lapack_int const* ldy, lapack_int const* nrnk,
const float* tol, lapack_int* k, lapack_complex_float* eigs,
lapack_complex_float* z, lapack_int const* ldz, float* res,
lapack_complex_float* b, lapack_int const* ldb,
lapack_complex_float* w, lapack_int const* ldw,
lapack_complex_float* s, lapack_int const* lds,
lapack_complex_float* work, lapack_int const* lwork,
lapack_complex_float* zwork, lapack_int const* lzwork,
float* work, lapack_int const* lwork,
lapack_int* iwork, lapack_int const* liwork,
lapack_int* info );
lapack_int* info
#ifdef LAPACK_FORTRAN_STRLEN_END
, size_t, size_t, size_t, size_t
#endif
);
#ifdef LAPACK_FORTRAN_STRLEN_END
#define LAPACK_cgedmd(...) LAPACK_cgedmd_base(__VA_ARGS__, 1, 1, 1, 1)
#else
#define LAPACK_cgedmd(...) LAPACK_cgedmd_base(__VA_ARGS__)
#endif
#define LAPACK_dgedmd LAPACK_GLOBAL(dgedmd,DGEDMD)
void LAPACK_dgedmd(
char const* jobs, char const* jobz, char const* jobf,
#define LAPACK_dgedmd_base LAPACK_GLOBAL(dgedmd,DGEDMD)
void LAPACK_dgedmd_base(
char const* jobs, char const* jobz, char const* jobr, char const* jobf,
lapack_int const* whtsvd, lapack_int const* m, lapack_int const* n,
double* x, lapack_int const* ldx,
double* y, lapack_int const* ldy, lapack_int const* k,
double* reig, double* imeig,
double* y, lapack_int const* ldy, lapack_int const* nrnk,
const double* tol, lapack_int* k, double* reig, double* imeig,
double* z, lapack_int const* ldz, double* res,
double* b, lapack_int const* ldb,
double* w, lapack_int const* ldw,
double* s, lapack_int const* lds,
double* work, lapack_int const* lwork,
lapack_int* iwork, lapack_int const* liwork,
lapack_int* info );
lapack_int* info
#ifdef LAPACK_FORTRAN_STRLEN_END
, size_t, size_t, size_t, size_t
#endif
);
#ifdef LAPACK_FORTRAN_STRLEN_END
#define LAPACK_dgedmd(...) LAPACK_dgedmd_base(__VA_ARGS__, 1, 1, 1, 1)
#else
#define LAPACK_dgedmd(...) LAPACK_dgedmd_base(__VA_ARGS__)
#endif
#define LAPACK_sgedmd LAPACK_GLOBAL(sgedmd,SGEDMD)
void LAPACK_sgedmd(
char const* jobs, char const* jobz, char const* jobf,
#define LAPACK_sgedmd_base LAPACK_GLOBAL(sgedmd,SGEDMD)
void LAPACK_sgedmd_base(
char const* jobs, char const* jobz, char const* jobr, char const* jobf,
lapack_int const* whtsvd, lapack_int const* m, lapack_int const* n,
float* x, lapack_int const* ldx,
float* y, lapack_int const* ldy, lapack_int const* k,
float* reig, float* imeig,
float* y, lapack_int const* ldy, lapack_int const* nrnk,
const float* tol, lapack_int* k, float* reig, float *imeig,
float* z, lapack_int const* ldz, float* res,
float* b, lapack_int const* ldb,
float* w, lapack_int const* ldw,
float* s, lapack_int const* lds,
float* work, lapack_int const* lwork,
lapack_int* iwork, lapack_int const* liwork,
lapack_int* info );
lapack_int* info
#ifdef LAPACK_FORTRAN_STRLEN_END
, size_t, size_t, size_t, size_t
#endif
);
#ifdef LAPACK_FORTRAN_STRLEN_END
#define LAPACK_sgedmd(...) LAPACK_sgedmd_base(__VA_ARGS__, 1, 1, 1, 1)
#else
#define LAPACK_sgedmd(...) LAPACK_sgedmd_base(__VA_ARGS__)
#endif
#define LAPACK_zgedmd LAPACK_GLOBAL(zgedmd,ZGEDMD)
void LAPACK_zgedmd(
char const* jobs, char const* jobz, char const* jobf,
#define LAPACK_zgedmd_base LAPACK_GLOBAL(zgedmd,ZGEDMD)
void LAPACK_zgedmd_base(
char const* jobs, char const* jobz, char const* jobr, char const* jobf,
lapack_int const* whtsvd, lapack_int const* m, lapack_int const* n,
lapack_complex_double* x, lapack_int const* ldx,
lapack_complex_double* y, lapack_int const* ldy, lapack_int const* k,
lapack_complex_double* reig, lapack_complex_double* imeig,
lapack_complex_double* z, lapack_int const* ldz, lapack_complex_double* res,
lapack_complex_double* y, lapack_int const* ldy, lapack_int const* nrnk,
const double* tol, lapack_int *k, lapack_complex_double* eigs,
lapack_complex_double* z, lapack_int const* ldz, double* res,
lapack_complex_double* b, lapack_int const* ldb,
lapack_complex_double* w, lapack_int const* ldw,
lapack_complex_double* s, lapack_int const* lds,
lapack_complex_double* work, lapack_int const* lwork,
lapack_complex_double* zwork, lapack_int const* lzwork,
double* rwork, lapack_int const* lrwork,
lapack_int* iwork, lapack_int const* liwork,
lapack_int* info );
lapack_int* info
#ifdef LAPACK_FORTRAN_STRLEN_END
, size_t, size_t, size_t, size_t
#endif
);
#ifdef LAPACK_FORTRAN_STRLEN_END
#define LAPACK_zgedmd(...) LAPACK_zgedmd_base(__VA_ARGS__, 1, 1, 1, 1)
#else
#define LAPACK_zgedmd(...) LAPACK_zgedmd_base(__VA_ARGS__)
#endif
#define LAPACK_cgedmdq LAPACK_GLOBAL(cgedmdq,CGEDMDQ)
void LAPACK_cgedmdq(
#define LAPACK_cgedmdq_base LAPACK_GLOBAL(cgedmdq,CGEDMDQ)
void LAPACK_cgedmdq_base(
char const* jobs, char const* jobz, char const* jobr, char const* jobq,
char const* jobt, char const* jobf, lapack_int const* whtsvd,
lapack_int const* m, lapack_int const* n,
@ -3392,24 +3431,34 @@ void LAPACK_cgedmdq(
lapack_complex_float* x, lapack_int const* ldx,
lapack_complex_float* y, lapack_int const* ldy, lapack_int const* nrnk,
float const* tol, lapack_int const* k,
lapack_complex_float* reig, lapack_complex_float* imeig,
lapack_complex_float* z, lapack_int const* ldz, lapack_complex_float* res,
lapack_complex_float* eigs,
lapack_complex_float* z, lapack_int const* ldz, float* res,
lapack_complex_float* b, lapack_int const* ldb,
lapack_complex_float* v, lapack_int const* ldv,
lapack_complex_float* s, lapack_int const* lds,
lapack_complex_float* work, lapack_int const* lwork,
lapack_complex_float* zwork, lapack_int const* lzwork,
float* work, lapack_int const* lwork,
lapack_int* iwork, lapack_int const* liwork,
lapack_int* info );
lapack_int* info
#ifdef LAPACK_FORTRAN_STRLEN_END
, size_t, size_t, size_t, size_t, size_t, size_t
#endif
);
#ifdef LAPACK_FORTRAN_STRLEN_END
#define LAPACK_cgedmdq(...) LAPACK_cgedmdq_base(__VA_ARGS__, 1, 1, 1, 1, 1, 1)
#else
#define LAPACK_cgedmdq(...) LAPACK_cgedmdq_base(__VA_ARGS__)
#endif
#define LAPACK_dgedmdq LAPACK_GLOBAL(dgedmdq,DGEDMDQ)
void LAPACK_dgedmdq(
#define LAPACK_dgedmdq_base LAPACK_GLOBAL(dgedmdq,DGEDMDQ)
void LAPACK_dgedmdq_base(
char const* jobs, char const* jobz, char const* jobr, char const* jobq,
char const* jobt, char const* jobf, lapack_int const* whtsvd,
lapack_int const* m, lapack_int const* n,
double* f, lapack_int const* ldf,
double* x, lapack_int const* ldx,
double* y, lapack_int const* ldy, lapack_int const* nrnk,
double const* tol, lapack_int const* k,
double const* tol, lapack_int* k,
double* reig, double *imeig,
double* z, lapack_int const* ldz, double* res,
double* b, lapack_int const* ldb,
@ -3417,10 +3466,19 @@ void LAPACK_dgedmdq(
double* s, lapack_int const* lds,
double* work, lapack_int const* lwork,
lapack_int* iwork, lapack_int const* liwork,
lapack_int* info );
lapack_int* info
#ifdef LAPACK_FORTRAN_STRLEN_END
, size_t, size_t, size_t, size_t, size_t, size_t
#endif
);
#ifdef LAPACK_FORTRAN_STRLEN_END
#define LAPACK_dgedmdq(...) LAPACK_dgedmdq_base(__VA_ARGS__, 1, 1, 1, 1, 1, 1)
#else
#define LAPACK_dgedmdq(...) LAPACK_dgedmdq_base(__VA_ARGS__)
#endif
#define LAPACK_sgedmdq LAPACK_GLOBAL(sgedmdq,SGEDMDQ)
void LAPACK_sgedmdq(
#define LAPACK_sgedmdq_base LAPACK_GLOBAL(sgedmdq,SGEDMDQ)
void LAPACK_sgedmdq_base(
char const* jobs, char const* jobz, char const* jobr, char const* jobq,
char const* jobt, char const* jobf, lapack_int const* whtsvd,
lapack_int const* m, lapack_int const* n,
@ -3435,10 +3493,19 @@ void LAPACK_sgedmdq(
float* s, lapack_int const* lds,
float* work, lapack_int const* lwork,
lapack_int* iwork, lapack_int const* liwork,
lapack_int* info );
lapack_int* info
#ifdef LAPACK_FORTRAN_STRLEN_END
, size_t, size_t, size_t, size_t, size_t, size_t
#endif
);
#ifdef LAPACK_FORTRAN_STRLEN_END
#define LAPACK_sgedmdq(...) LAPACK_sgedmdq_base(__VA_ARGS__, 1, 1, 1, 1, 1, 1)
#else
#define LAPACK_sgedmdq(...) LAPACK_sgedmdq_base(__VA_ARGS__)
#endif
#define LAPACK_zgedmdq LAPACK_GLOBAL(zgedmdq,ZGEDMDQ)
void LAPACK_zgedmdq(
#define LAPACK_zgedmdq_base LAPACK_GLOBAL(zgedmdq,ZGEDMDQ)
void LAPACK_zgedmdq_base(
char const* jobs, char const* jobz, char const* jobr, char const* jobq,
char const* jobt, char const* jobf, lapack_int const* whtsvd,
lapack_int const* m, lapack_int const* n,
@ -3446,14 +3513,25 @@ void LAPACK_zgedmdq(
lapack_complex_double* x, lapack_int const* ldx,
lapack_complex_double* y, lapack_int const* ldy, lapack_int const* nrnk,
double const* tol, lapack_int const* k,
lapack_complex_double* reig, lapack_complex_double* imeig,
lapack_complex_double* z, lapack_int const* ldz, lapack_complex_double* res,
lapack_complex_double* eigs,
lapack_complex_double* z, lapack_int const* ldz, double* res,
lapack_complex_double* b, lapack_int const* ldb,
lapack_complex_double* v, lapack_int const* ldv,
lapack_complex_double* s, lapack_int const* lds,
lapack_complex_double* work, lapack_int const* lwork,
lapack_complex_double* zwork, lapack_int const* lzwork,
double* work, lapack_int const* lwork,
lapack_int* iwork, lapack_int const* liwork,
lapack_int* info );
lapack_int* info
#ifdef LAPACK_FORTRAN_STRLEN_END
, size_t, size_t, size_t, size_t, size_t, size_t
#endif
);
#ifdef LAPACK_FORTRAN_STRLEN_END
#define LAPACK_zgedmdq(...) LAPACK_zgedmdq_base(__VA_ARGS__, 1, 1, 1, 1, 1, 1)
#else
#define LAPACK_zgedmdq(...) LAPACK_zgedmdq_base(__VA_ARGS__)
#endif
#define LAPACK_cgesv LAPACK_GLOBAL(cgesv,CGESV)
lapack_int LAPACK_cgesv(
@ -21649,7 +21727,7 @@ void LAPACK_ztrevc_base(
#endif
);
#ifdef LAPACK_FORTRAN_STRLEN_END
#define LAPACK_ztrevc(...) LAPACK_ztrevc_base(__VA_ARGS__, 1, 1)
#define LAPACK_ztrevc(...) LAPACK_ztrevc_base(__VA_ARGS__, (size_t)1, 1)
#else
#define LAPACK_ztrevc(...) LAPACK_ztrevc_base(__VA_ARGS__)
#endif

View File

@ -5713,55 +5713,59 @@ lapack_int LAPACKE_zgesdd_work( int matrix_layout, char jobz, lapack_int m,
double* rwork, lapack_int* iwork );
lapack_int LAPACKE_sgedmd_work( int matrix_layout, char jobs, char jobz,
char jobf, lapack_int whtsvd, lapack_int m,
lapack_int n, float* x, lapack_int ldx,
float* y, lapack_int ldy, lapack_int k,
float* reig, float* imeig, float* z,
lapack_int ldz, float* res, float* b,
lapack_int ldb, float* w, lapack_int ldw,
float* s, lapack_int lds, float* work,
lapack_int lwork, lapack_int* iwork,
lapack_int liwork );
char jobr, char jobf, lapack_int whtsvd,
lapack_int m, lapack_int n, float* x,
lapack_int ldx, float* y, lapack_int ldy,
lapack_int nrnk, float* tol, lapack_int k,
float* reig, float* imeig,
float* z, lapack_int ldz, float* res,
float* b, lapack_int ldb, float* w,
lapack_int ldw, float* s, lapack_int lds,
float* work, lapack_int lwork,
lapack_int* iwork, lapack_int liwork );
lapack_int LAPACKE_dgedmd_work( int matrix_layout, char jobs, char jobz,
char jobf, lapack_int whtsvd, lapack_int m,
lapack_int n, double* x, lapack_int ldx,
double* y, lapack_int ldy, lapack_int k,
double* reig, double* imeig, double* z,
lapack_int ldz, double* res, double* b,
lapack_int ldb, double* w, lapack_int ldw,
double* s, lapack_int lds, double* work,
lapack_int lwork, lapack_int* iwork,
lapack_int liwork );
char jobr, char jobf, lapack_int whtsvd,
lapack_int m, lapack_int n, double* x,
lapack_int ldx, double* y, lapack_int ldy,
lapack_int nrnk, double* tol, lapack_int k,
double* reig, double *imeig,
double* z, lapack_int ldz, double* res,
double* b, lapack_int ldb, double* w,
lapack_int ldw, double* s, lapack_int lds,
double* work, lapack_int lwork,
lapack_int* iwork, lapack_int liwork );
lapack_int LAPACKE_cgedmd_work( int matrix_layout, char jobs, char jobz,
char jobf, lapack_int whtsvd, lapack_int m,
lapack_int n, lapack_complex_float* x,
lapack_int ldx, lapack_complex_float* y,
lapack_int ldy, lapack_int k,
lapack_complex_float* reig,
lapack_complex_float* imeig,
char jobr, char jobf, lapack_int whtsvd,
lapack_int m, lapack_int n,
lapack_complex_float* x, lapack_int ldx,
lapack_complex_float* y, lapack_int ldy,
lapack_int nrnk, float* tol, lapack_int k,
lapack_complex_float* eigs,
lapack_complex_float* z, lapack_int ldz,
lapack_complex_float* res,
float* res,
lapack_complex_float* b, lapack_int ldb,
lapack_complex_float* w, lapack_int ldw,
lapack_complex_float* s, lapack_int lds,
lapack_complex_float* work, lapack_int lwork,
lapack_complex_float* zwork, lapack_int lzwork,
float* work, lapack_int lwork,
lapack_int* iwork, lapack_int liwork );
lapack_int LAPACKE_zgedmd_work( int matrix_layout, char jobs, char jobz,
char jobf, lapack_int whtsvd, lapack_int m,
lapack_int n, lapack_complex_double* x,
lapack_int ldx, lapack_complex_double* y,
lapack_int ldy, lapack_int k,
lapack_complex_double* reig,
lapack_complex_double* imeig,
char jobr, char jobf, lapack_int whtsvd,
lapack_int m, lapack_int n,
lapack_complex_double* x, lapack_int ldx,
lapack_complex_double* y, lapack_int ldy,
lapack_int nrnk, double* tol, lapack_int k,
lapack_complex_double* eigs,
lapack_complex_double* z, lapack_int ldz,
lapack_complex_double* res,
double* res,
lapack_complex_double* b, lapack_int ldb,
lapack_complex_double* w, lapack_int ldw,
lapack_complex_double* s, lapack_int lds,
lapack_complex_double* work, lapack_int lwork,
lapack_complex_double* zwork, lapack_int lzwork,
double* work, lapack_int lwork,
lapack_int* iwork, lapack_int liwork );
lapack_int LAPACKE_sgedmdq_work( int matrix_layout, char jobs, char jobz,
@ -5769,7 +5773,7 @@ lapack_int LAPACKE_sgedmdq_work( int matrix_layout, char jobs, char jobz,
lapack_int whtsvd, lapack_int m, lapack_int n,
float* f, lapack_int ldf, float* x,
lapack_int ldx, float* y, lapack_int ldy,
lapack_int nrnk, float tol, lapack_int k,
lapack_int nrnk, float* tol, lapack_int k,
float* reig, float *imeig, float* z,
lapack_int ldz, float* res, float* b,
lapack_int ldb, float* v, lapack_int ldv,
@ -5782,7 +5786,7 @@ lapack_int LAPACKE_dgedmdq_work( int matrix_layout, char jobs, char jobz,
lapack_int whtsvd, lapack_int m, lapack_int n,
double* f, lapack_int ldf, double* x,
lapack_int ldx, double* y, lapack_int ldy,
lapack_int nrnk, double tol, lapack_int k,
lapack_int nrnk, double* tol, lapack_int k,
double* reig, double* imeig, double* z,
lapack_int ldz, double* res, double* b,
lapack_int ldb, double* v, lapack_int ldv,
@ -5796,17 +5800,16 @@ lapack_int LAPACKE_cgedmdq_work( int matrix_layout, char jobs, char jobz,
lapack_complex_float* f, lapack_int ldf,
lapack_complex_float* x, lapack_int ldx,
lapack_complex_float* y, lapack_int ldy,
lapack_int nrnk, float tol, lapack_int k,
lapack_complex_float* reig,
lapack_complex_float* imeig,
lapack_int nrnk, float* tol, lapack_int k,
lapack_complex_float* eigs,
lapack_complex_float* z, lapack_int ldz,
lapack_complex_float* res,
float* res,
lapack_complex_float* b, lapack_int ldb,
lapack_complex_float* v, lapack_int ldv,
lapack_complex_float* s, lapack_int lds,
lapack_complex_float* work, lapack_int lwork,
lapack_int* iwork,
lapack_int liwork );
lapack_complex_float* zwork, lapack_int lzwork,
float* work, lapack_int lwork,
lapack_int* iwork, lapack_int liwork);
lapack_int LAPACKE_zgedmdq_work( int matrix_layout, char jobs, char jobz,
char jobr, char jobq, char jobt, char jobf,
@ -5814,17 +5817,16 @@ lapack_int LAPACKE_zgedmdq_work( int matrix_layout, char jobs, char jobz,
lapack_complex_double* f, lapack_int ldf,
lapack_complex_double* x, lapack_int ldx,
lapack_complex_double* y, lapack_int ldy,
lapack_int nrnk, double tol, lapack_int k,
lapack_complex_double* reig,
lapack_complex_double* imeig,
lapack_int nrnk, double* tol, lapack_int k,
lapack_complex_double* eigs,
lapack_complex_double* z, lapack_int ldz,
lapack_complex_double* res,
double* res,
lapack_complex_double* b, lapack_int ldb,
lapack_complex_double* v, lapack_int ldv,
lapack_complex_double* s, lapack_int lds,
lapack_complex_double* work, lapack_int lwork,
lapack_int* iwork,
lapack_int liwork );
lapack_complex_double* zwork, lapack_int lzwork,
double* work, lapack_int lwork,
lapack_int* iwork, lapack_int liwork);
lapack_int LAPACKE_sgesv_work( int matrix_layout, lapack_int n, lapack_int nrhs,
float* a, lapack_int lda, lapack_int* ipiv,

View File

@ -32,22 +32,26 @@
#include "lapacke_utils.h"
lapack_int LAPACKE_cgedmd( int matrix_layout, char jobs, char jobz, char jobf,
lapack_int whtsvd, lapack_int m, lapack_int n,
lapack_complex_float* x, lapack_int ldx,
lapack_complex_float* y, lapack_int ldy, lapack_int k,
lapack_complex_float* reig, lapack_complex_float* imeig,
lapack_int LAPACKE_cgedmd( int matrix_layout, char jobs, char jobz, char jobr,
char jobf, lapack_int whtsvd, lapack_int m,
lapack_int n, lapack_complex_float* x,
lapack_int ldx, lapack_complex_float* y,
lapack_int ldy, lapack_int nrnk, float* tol,
lapack_int k, lapack_complex_float* eigs,
lapack_complex_float* z, lapack_int ldz,
lapack_complex_float* res, lapack_complex_float* b,
float* res, lapack_complex_float* b,
lapack_int ldb, lapack_complex_float* w,
lapack_int ldw, lapack_complex_float* s, lapack_int lds)
{
lapack_int info = 0;
lapack_int lwork = -1;
lapack_int liwork = -1;
lapack_complex_float* work = NULL;
lapack_int lzwork = -1;
lapack_complex_float* zwork = NULL;
float* work = NULL;
lapack_int* iwork = NULL;
lapack_complex_float work_query;
lapack_complex_float zwork_query;
float work_query;
lapack_int iwork_query;
if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) {
LAPACKE_xerbla( "LAPACKE_cgedmd", -1 );
@ -77,36 +81,44 @@ lapack_int LAPACKE_cgedmd( int matrix_layout, char jobs, char jobz, char jobf,
}
#endif
/* Query optimal working array(s) size */
info = LAPACKE_cgedmd_work( matrix_layout, jobs, jobz, jobf, whtsvd, m, n,
x, ldx, y, ldy, k, reig, imeig, z, ldz, res,
b, ldb, w, ldw, s, lds, &work_query, lwork,
&iwork_query, liwork );
info = LAPACKE_cgedmd_work( matrix_layout, jobs, jobz, jobr, jobf, whtsvd,
m, n, x, ldx, y, ldy, nrnk, tol, k, eigs, z, ldz,
res, b, ldb, w, ldw, s, lds, &zwork_query,
lzwork, &work_query, lwork, &iwork_query, liwork );
if( info != 0 ) {
goto exit_level_0;
}
lzwork = LAPACK_C2INT( zwork_query );
lwork = LAPACK_C2INT( work_query );
liwork = iwork_query;
/* Allocate memory for work arrays */
work = (lapack_complex_float*)LAPACKE_malloc( sizeof(lapack_complex_float) * lwork );
if( work == NULL ) {
zwork = (lapack_complex_float*)LAPACKE_malloc( sizeof(lapack_complex_float) * lzwork );
if( zwork == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_0;
}
work = (float*)LAPACKE_malloc( sizeof(float) * lwork );
if( work == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_1;
}
iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork );
if( iwork == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_1;
goto exit_level_2;
}
/* Call middle-level interface */
info = LAPACKE_cgedmd_work( matrix_layout, jobs, jobz, jobf, whtsvd, m, n,
x, ldx, y, ldy, k, reig, imeig, z, ldz, res,
b, ldb, w, ldw, s, lds, work, lwork, iwork,
liwork );
info = LAPACKE_cgedmd_work( matrix_layout, jobs, jobz, jobr, jobf, whtsvd,
m, n, x, ldx, y, ldy, nrnk, tol, k, eigs, z, ldz,
res, b, ldb, w, ldw, s, lds, zwork, lzwork,
work, lwork, iwork, liwork );
/* Release memory and exit */
LAPACKE_free( iwork );
exit_level_1:
exit_level_2:
LAPACKE_free( work );
exit_level_1:
LAPACKE_free( zwork );
exit_level_0:
if( info == LAPACK_WORK_MEMORY_ERROR ) {
LAPACKE_xerbla( "LAPACKE_cgedmd", info );

View File

@ -33,23 +33,25 @@
#include "lapacke_utils.h"
lapack_int LAPACKE_cgedmd_work( int matrix_layout, char jobs, char jobz,
char jobf, lapack_int whtsvd, lapack_int m,
char jobr, char jobf, lapack_int whtsvd, lapack_int m,
lapack_int n, lapack_complex_float* x, lapack_int ldx,
lapack_complex_float* y, lapack_int ldy, lapack_int k,
lapack_complex_float* reig, lapack_complex_float* imeig,
lapack_complex_float* y, lapack_int ldy, lapack_int nrnk,
float* tol, lapack_int k, lapack_complex_float* eigs,
lapack_complex_float* z, lapack_int ldz,
lapack_complex_float* res, lapack_complex_float* b,
float* res, lapack_complex_float* b,
lapack_int ldb, lapack_complex_float* w,
lapack_int ldw, lapack_complex_float* s, lapack_int lds,
lapack_complex_float* work, lapack_int lwork,
lapack_complex_float* zwork, lapack_int lzwork,
float* work, lapack_int lwork,
lapack_int* iwork, lapack_int liwork )
{
lapack_int info = 0;
if( matrix_layout == LAPACK_COL_MAJOR ) {
/* Call LAPACK function and adjust info */
LAPACK_cgedmd( &jobs, &jobz, &jobf, &whtsvd, &m, &n, x, &ldx, y, &ldy,
&k, reig, imeig, z, &ldz, res, b, &ldb, w, &ldw, s, &lds,
work, &lwork, iwork, &liwork, &info );
LAPACK_cgedmd( &jobs, &jobz, &jobr, &jobf, &whtsvd, &m, &n, x, &ldx, y,
&ldy, &nrnk, tol, &k, eigs, z, &ldz, res, b, &ldb, w, &ldw,
s, &lds, zwork, &lzwork, work, &lwork, iwork, &liwork,
&info );
if( info < 0 ) {
info = info - 1;
}
@ -99,8 +101,9 @@ lapack_int LAPACKE_cgedmd_work( int matrix_layout, char jobs, char jobz,
}
/* Query optimal working array(s) size if requested */
if( lwork == -1 ) {
LAPACK_cgedmd( &jobs, &jobz, &jobf, &whtsvd, &m, &n, x, &ldx, y, &ldy,
&k, reig, imeig, z, &ldz, res, b, &ldb, w, &ldw, s, &lds,
LAPACK_cgedmd( &jobs, &jobz, &jobr, &jobf, &whtsvd, &m, &n, x,
&ldx, y, &ldy, &nrnk, tol, &k, eigs, z, &ldz, res, b,
&ldb, w, &ldw, s, &lds, zwork, &lzwork,
work, &lwork, iwork, &liwork, &info );
return (info < 0) ? (info - 1) : info;
}
@ -143,9 +146,10 @@ lapack_int LAPACKE_cgedmd_work( int matrix_layout, char jobs, char jobz,
LAPACKE_cge_trans( matrix_layout, m, n, w, ldw, w_t, ldw_t );
LAPACKE_cge_trans( matrix_layout, m, n, s, lds, s_t, lds_t );
/* Call LAPACK function and adjust info */
LAPACK_cgedmd( &jobs, &jobz, &jobf, &whtsvd, &m, &n, x_t, &ldx_t, y_t,
&ldy_t, &k, reig, imeig, z_t, &ldz_t, res, b_t, &ldb_t,
w_t, &ldw_t, s_t, &lds_t, work, &lwork, iwork, &liwork, &info );
LAPACK_cgedmd( &jobs, &jobz, &jobr, &jobf, &whtsvd, &m, &n, x_t,
&ldx_t, y_t, &ldy_t, &nrnk, tol, &k, eigs, z_t, &ldz_t,
res, b_t, &ldb_t, w_t, &ldw_t, s_t, &lds_t, zwork,
&lzwork, work, &lwork, iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;
}

View File

@ -37,20 +37,22 @@ lapack_int LAPACKE_cgedmdq( int matrix_layout, char jobs, char jobz, char jobr,
lapack_int m, lapack_int n, lapack_complex_float* f,
lapack_int ldf, lapack_complex_float* x,
lapack_int ldx, lapack_complex_float* y,
lapack_int ldy, lapack_int nrnk, float tol,
lapack_int k, lapack_complex_float* reig,
lapack_complex_float* imeig,
lapack_int ldy, lapack_int nrnk, float* tol,
lapack_int k, lapack_complex_float* eigs,
lapack_complex_float* z, lapack_int ldz,
lapack_complex_float* res, lapack_complex_float* b,
float* res, lapack_complex_float* b,
lapack_int ldb, lapack_complex_float* v,
lapack_int ldv, lapack_complex_float* s, lapack_int lds)
{
lapack_int info = 0;
lapack_int lwork = -1;
lapack_int liwork = -1;
lapack_complex_float* work = NULL;
lapack_int lzwork = -1;
lapack_complex_float* zwork = NULL;
float* work = NULL;
lapack_int* iwork = NULL;
lapack_complex_float work_query;
lapack_complex_float zwork_query;
float work_query;
lapack_int iwork_query;
if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) {
LAPACKE_xerbla( "LAPACKE_cgedmdq", -1 );
@ -85,36 +87,44 @@ lapack_int LAPACKE_cgedmdq( int matrix_layout, char jobs, char jobz, char jobr,
/* Query optimal working array(s) size */
info = LAPACKE_cgedmdq_work( matrix_layout, jobs, jobz, jobr, jobq, jobt,
jobf, whtsvd, m, n, f, ldf, x, ldx, y, ldy,
nrnk, tol, k, reig, imeig, z, ldz, res,
b, ldb, v, ldv, s, lds, &work_query, lwork,
&iwork_query, liwork );
nrnk, tol, k, eigs, z, ldz, res,
b, ldb, v, ldv, s, lds, &zwork_query, lzwork,
&work_query, lwork, &iwork_query, liwork );
if( info != 0 ) {
goto exit_level_0;
}
lzwork = LAPACK_C2INT( zwork_query );
lwork = LAPACK_C2INT( work_query );
liwork = iwork_query;
/* Allocate memory for work arrays */
work = (lapack_complex_float*)LAPACKE_malloc( sizeof(lapack_complex_float) * lwork );
if( work == NULL ) {
zwork = (lapack_complex_float*)LAPACKE_malloc( sizeof(lapack_complex_float) * lzwork );
if( zwork == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_0;
}
work = (float*)LAPACKE_malloc( sizeof(lapack_complex_float) * lwork );
if( work == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_1;
}
iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork );
if( iwork == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_1;
goto exit_level_2;
}
/* Call middle-level interface */
info = LAPACKE_cgedmdq_work( matrix_layout, jobs, jobz, jobr, jobq, jobt,
jobf, whtsvd, m, n, f, ldf, x, ldx, y, ldy,
nrnk, tol, k, reig, imeig, z, ldz, res,
b, ldb, v, ldv, s, lds, work, lwork, iwork,
liwork );
nrnk, tol, k, eigs, z, ldz, res,
b, ldb, v, ldv, s, lds, zwork, lzwork,
work, lwork, iwork, liwork );
/* Release memory and exit */
LAPACKE_free( iwork );
exit_level_1:
exit_level_2:
LAPACKE_free( work );
exit_level_1:
LAPACKE_free( zwork );
exit_level_0:
if( info == LAPACK_WORK_MEMORY_ERROR ) {
LAPACKE_xerbla( "LAPACKE_cgedmdq", info );

View File

@ -38,15 +38,15 @@ lapack_int LAPACKE_cgedmdq_work( int matrix_layout, char jobs, char jobz,
lapack_complex_float* f, lapack_int ldf,
lapack_complex_float* x, lapack_int ldx,
lapack_complex_float* y, lapack_int ldy,
lapack_int nrnk, float tol, lapack_int k,
lapack_complex_float* reig,
lapack_complex_float* imeig,
lapack_int nrnk, float* tol, lapack_int k,
lapack_complex_float* eigs,
lapack_complex_float* z,
lapack_int ldz, lapack_complex_float* res,
lapack_int ldz, float* res,
lapack_complex_float* b,
lapack_int ldb, lapack_complex_float* v,
lapack_int ldv, lapack_complex_float* s,
lapack_int lds, lapack_complex_float* work,
lapack_int lds, lapack_complex_float *zwork,
lapack_int lzwork, float* work,
lapack_int lwork, lapack_int* iwork,
lapack_int liwork )
{
@ -54,9 +54,9 @@ lapack_int LAPACKE_cgedmdq_work( int matrix_layout, char jobs, char jobz,
if( matrix_layout == LAPACK_COL_MAJOR ) {
/* Call LAPACK function and adjust info */
LAPACK_cgedmdq( &jobs, &jobz, &jobr, &jobq, &jobt, &jobf, &whtsvd, &m,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, &tol, &k, reig,
imeig, z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
work, &lwork, iwork, &liwork, &info );
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, tol, &k, eigs,
z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
zwork, &lzwork, work, &lwork, iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;
}
@ -112,11 +112,11 @@ lapack_int LAPACKE_cgedmdq_work( int matrix_layout, char jobs, char jobz,
return info;
}
/* Query optimal working array(s) size if requested */
if( lwork == -1 || liwork == -1 ) {
if( lzwork == -1 || lwork == -1 || liwork == -1 ) {
LAPACK_cgedmdq( &jobs, &jobz, &jobr, &jobq, &jobt, &jobf, &whtsvd, &m,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, &tol, &k, reig,
imeig, z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
work, &lwork, iwork, &liwork, &info );
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, tol, &k, eigs,
z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
zwork, &lzwork, work, &lwork, iwork, &liwork, &info );
return (info < 0) ? (info - 1) : info;
}
/* Allocate memory for temporary array(s) */
@ -165,9 +165,9 @@ lapack_int LAPACKE_cgedmdq_work( int matrix_layout, char jobs, char jobz,
LAPACKE_cge_trans( matrix_layout, m, n, s, lds, s_t, lds_t );
/* Call LAPACK function and adjust info */
LAPACK_cgedmdq( &jobs, &jobz, &jobr, &jobq, &jobt, &jobf, &whtsvd, &m,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, &tol, &k, reig,
imeig, z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
work, &lwork, iwork, &liwork, &info );
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, tol, &k, eigs,
z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
zwork, &lzwork, work, &lwork, iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;
}

View File

@ -32,11 +32,13 @@
#include "lapacke_utils.h"
lapack_int LAPACKE_dgedmd( int matrix_layout, char jobs, char jobz, char jobf,
lapack_int whtsvd, lapack_int m, lapack_int n,
double* x, lapack_int ldx, double* y, lapack_int ldy,
lapack_int k, double* reig, double* imeig, double* z,
lapack_int ldz, double* res, double* b, lapack_int ldb,
lapack_int LAPACKE_dgedmd( int matrix_layout, char jobs, char jobz, char jobr,
char jobf, lapack_int whtsvd, lapack_int m,
lapack_int n, double* x, lapack_int ldx, double* y,
lapack_int ldy, lapack_int nrnk, double* tol,
lapack_int k, double* reig, double* imeig,
double* z, lapack_int ldz,
double* res, double* b, lapack_int ldb,
double* w, lapack_int ldw, double* s, lapack_int lds)
{
lapack_int info = 0;
@ -74,10 +76,10 @@ lapack_int LAPACKE_dgedmd( int matrix_layout, char jobs, char jobz, char jobf,
}
#endif
/* Query optimal working array(s) size */
info = LAPACKE_dgedmd_work( matrix_layout, jobs, jobz, jobf, whtsvd, m, n,
x, ldx, y, ldy, k, reig, imeig, z, ldz, res,
b, ldb, w, ldw, s, lds, &work_query, lwork,
&iwork_query, liwork );
info = LAPACKE_dgedmd_work( matrix_layout, jobs, jobz, jobr, jobf, whtsvd,
m, n, x, ldx, y, ldy, nrnk, tol, k, reig, imeig, z, ldz,
res, b, ldb, w, ldw, s, lds, &work_query,
lwork, &iwork_query, liwork );
if( info != 0 ) {
goto exit_level_0;
@ -96,10 +98,10 @@ lapack_int LAPACKE_dgedmd( int matrix_layout, char jobs, char jobz, char jobf,
goto exit_level_1;
}
/* Call middle-level interface */
info = LAPACKE_dgedmd_work( matrix_layout, jobs, jobz, jobf, whtsvd, m, n,
x, ldx, y, ldy, k, reig, imeig, z, ldz, res,
b, ldb, w, ldw, s, lds, work, lwork, iwork,
liwork );
info = LAPACKE_dgedmd_work( matrix_layout, jobs, jobz, jobr, jobf, whtsvd,
m, n, x, ldx, y, ldy, nrnk, tol, k, reig, imeig, z, ldz,
res, b, ldb, w, ldw, s, lds, work, lwork,
iwork, liwork );
/* Release memory and exit */
LAPACKE_free( iwork );
exit_level_1:

View File

@ -33,22 +33,23 @@
#include "lapacke_utils.h"
lapack_int LAPACKE_dgedmd_work( int matrix_layout, char jobs, char jobz,
char jobf, lapack_int whtsvd, lapack_int m,
lapack_int n, double* x, lapack_int ldx,
double* y, lapack_int ldy, lapack_int k,
double* reig, double* imeig, double* z,
lapack_int ldz, double* res, double* b,
lapack_int ldb, double* w, lapack_int ldw,
double* s, lapack_int lds, double* work,
lapack_int lwork, lapack_int* iwork,
lapack_int liwork )
char jobr, char jobf, lapack_int whtsvd,
lapack_int m, lapack_int n, double* x,
lapack_int ldx, double* y, lapack_int ldy,
lapack_int nrnk, double* tol, lapack_int k,
double* reig, double* imeig,
double* z, lapack_int ldz, double* res,
double* b, lapack_int ldb, double* w,
lapack_int ldw, double* s, lapack_int lds,
double* work, lapack_int lwork,
lapack_int* iwork, lapack_int liwork )
{
lapack_int info = 0;
if( matrix_layout == LAPACK_COL_MAJOR ) {
/* Call LAPACK function and adjust info */
LAPACK_dgedmd( &jobs, &jobz, &jobf, &whtsvd, &m, &n, x, &ldx, y, &ldy,
&k, reig, imeig, z, &ldz, res, b, &ldb, w, &ldw, s, &lds,
work, &lwork, iwork, &liwork, &info );
LAPACK_dgedmd( &jobs, &jobz, &jobr, &jobf, &whtsvd, &m, &n, x, &ldx, y,
&ldy, &nrnk, tol, &k, reig, imeig, z, &ldz, res, b, &ldb, w, &ldw,
s, &lds, work, &lwork, iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;
}
@ -98,9 +99,9 @@ lapack_int LAPACKE_dgedmd_work( int matrix_layout, char jobs, char jobz,
}
/* Query optimal working array(s) size if requested */
if( lwork == -1 ) {
LAPACK_dgedmd( &jobs, &jobz, &jobf, &whtsvd, &m, &n, x, &ldx, y, &ldy,
&k, reig, imeig, z, &ldz, res, b, &ldb, w, &ldw, s, &lds,
work, &lwork, iwork, &liwork, &info );
LAPACK_dgedmd( &jobs, &jobz, &jobr, &jobf, &whtsvd, &m, &n, x, &ldx,
y, &ldy, &nrnk, tol, &k, reig, imeig, z, &ldz, res, b, &ldb, w,
&ldw, s, &lds, work, &lwork, iwork, &liwork, &info );
return (info < 0) ? (info - 1) : info;
}
/* Allocate memory for temporary array(s) */
@ -142,9 +143,10 @@ lapack_int LAPACKE_dgedmd_work( int matrix_layout, char jobs, char jobz,
LAPACKE_dge_trans( matrix_layout, m, n, w, ldw, w_t, ldw_t );
LAPACKE_dge_trans( matrix_layout, m, n, s, lds, s_t, lds_t );
/* Call LAPACK function and adjust info */
LAPACK_dgedmd( &jobs, &jobz, &jobf, &whtsvd, &m, &n, x_t, &ldx_t, y_t,
&ldy_t, &k, reig, imeig, z_t, &ldz_t, res, b_t, &ldb_t,
w_t, &ldw_t, s_t, &lds_t, work, &lwork, iwork, &liwork, &info );
LAPACK_dgedmd( &jobs, &jobz, &jobr, &jobf, &whtsvd, &m, &n, x_t, &ldx_t,
y_t, &ldy_t, &nrnk, tol, &k, reig, imeig, z_t, &ldz_t, res, b_t,
&ldb_t, w_t, &ldw_t, s_t, &lds_t, work, &lwork,
iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;
}

View File

@ -36,7 +36,7 @@ lapack_int LAPACKE_dgedmdq( int matrix_layout, char jobs, char jobz, char jobr,
char jobq, char jobt, char jobf, lapack_int whtsvd,
lapack_int m, lapack_int n, double* f, lapack_int ldf,
double* x, lapack_int ldx, double* y, lapack_int ldy,
lapack_int nrnk, double tol, lapack_int k,
lapack_int nrnk, double* tol, lapack_int k,
double* reig, double* imeig, double* z,
lapack_int ldz, double* res, double* b, lapack_int ldb,
double* v, lapack_int ldv, double* s, lapack_int lds)

View File

@ -37,7 +37,7 @@ lapack_int LAPACKE_dgedmdq_work( int matrix_layout, char jobs, char jobz,
lapack_int whtsvd, lapack_int m, lapack_int n,
double* f, lapack_int ldf, double* x,
lapack_int ldx, double* y, lapack_int ldy,
lapack_int nrnk, double tol, lapack_int k,
lapack_int nrnk, double* tol, lapack_int k,
double* reig, double* imeig, double* z,
lapack_int ldz, double* res, double* b,
lapack_int ldb, double* v, lapack_int ldv,
@ -49,8 +49,8 @@ lapack_int LAPACKE_dgedmdq_work( int matrix_layout, char jobs, char jobz,
if( matrix_layout == LAPACK_COL_MAJOR ) {
/* Call LAPACK function and adjust info */
LAPACK_dgedmdq( &jobs, &jobz, &jobr, &jobq, &jobt, &jobf, &whtsvd, &m,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, &tol, &k, reig,
imeig, z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, tol, &k, reig, imeig,
z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
work, &lwork, iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;
@ -109,8 +109,8 @@ lapack_int LAPACKE_dgedmdq_work( int matrix_layout, char jobs, char jobz,
/* Query optimal working array(s) size if requested */
if( lwork == -1 || liwork == -1 ) {
LAPACK_dgedmdq( &jobs, &jobz, &jobr, &jobq, &jobt, &jobf, &whtsvd, &m,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, &tol, &k, reig,
imeig, z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, tol, &k, reig, imeig,
z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
work, &lwork, iwork, &liwork, &info );
return (info < 0) ? (info - 1) : info;
}
@ -160,8 +160,8 @@ lapack_int LAPACKE_dgedmdq_work( int matrix_layout, char jobs, char jobz,
LAPACKE_dge_trans( matrix_layout, m, n, s, lds, s_t, lds_t );
/* Call LAPACK function and adjust info */
LAPACK_dgedmdq( &jobs, &jobz, &jobr, &jobq, &jobt, &jobf, &whtsvd, &m,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, &tol, &k, reig,
imeig, z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, tol, &k, reig, imeig,
z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
work, &lwork, iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;

View File

@ -32,12 +32,14 @@
#include "lapacke_utils.h"
lapack_int LAPACKE_sgedmd( int matrix_layout, char jobs, char jobz, char jobf,
lapack_int whtsvd, lapack_int m, lapack_int n,
float* x, lapack_int ldx, float* y, lapack_int ldy,
lapack_int k, float* reig, float* imeig, float* z,
lapack_int ldz, float* res, float* b, lapack_int ldb,
float* w, lapack_int ldw, float* s, lapack_int lds)
lapack_int LAPACKE_sgedmd( int matrix_layout, char jobs, char jobz, char jobr,
char jobf, lapack_int whtsvd, lapack_int m,
lapack_int n, float* x, lapack_int ldx, float* y,
lapack_int ldy, lapack_int nrnk, float* tol,
lapack_int k, float* reig, float* imeig,
float* z, lapack_int ldz, float* res,
float* b, lapack_int ldb, float* w, lapack_int ldw,
float* s, lapack_int lds)
{
lapack_int info = 0;
lapack_int lwork = -1;
@ -74,10 +76,10 @@ lapack_int LAPACKE_sgedmd( int matrix_layout, char jobs, char jobz, char jobf,
}
#endif
/* Query optimal working array(s) size */
info = LAPACKE_sgedmd_work( matrix_layout, jobs, jobz, jobf, whtsvd, m, n,
x, ldx, y, ldy, k, reig, imeig, z, ldz, res,
b, ldb, w, ldw, s, lds, &work_query, lwork,
&iwork_query, liwork );
info = LAPACKE_sgedmd_work( matrix_layout, jobs, jobz, jobr, jobf, whtsvd,
m, n, x, ldx, y, ldy, nrnk, tol, k, reig, imeig, z, ldz,
res, b, ldb, w, ldw, s, lds, &work_query,
lwork, &iwork_query, liwork );
if( info != 0 ) {
goto exit_level_0;
@ -96,10 +98,10 @@ lapack_int LAPACKE_sgedmd( int matrix_layout, char jobs, char jobz, char jobf,
goto exit_level_1;
}
/* Call middle-level interface */
info = LAPACKE_sgedmd_work( matrix_layout, jobs, jobz, jobf, whtsvd, m, n,
x, ldx, y, ldy, k, reig, imeig, z, ldz, res,
b, ldb, w, ldw, s, lds, work, lwork, iwork,
liwork );
info = LAPACKE_sgedmd_work( matrix_layout, jobs, jobz, jobr, jobf, whtsvd,
m, n, x, ldx, y, ldy, nrnk, tol, k, reig, imeig, z, ldz,
res, b, ldb, w, ldw, s, lds, work, lwork,
iwork, liwork );
/* Release memory and exit */
LAPACKE_free( iwork );
exit_level_1:

View File

@ -33,22 +33,23 @@
#include "lapacke_utils.h"
lapack_int LAPACKE_sgedmd_work( int matrix_layout, char jobs, char jobz,
char jobf, lapack_int whtsvd, lapack_int m,
lapack_int n, float* x, lapack_int ldx,
float* y, lapack_int ldy, lapack_int k,
float* reig, float* imeig, float* z,
lapack_int ldz, float* res, float* b,
lapack_int ldb, float* w, lapack_int ldw,
float* s, lapack_int lds, float* work,
lapack_int lwork, lapack_int* iwork,
lapack_int liwork )
char jobr, char jobf, lapack_int whtsvd,
lapack_int m, lapack_int n, float* x,
lapack_int ldx, float* y, lapack_int ldy,
lapack_int nrnk, float* tol, lapack_int k,
float* reig, float* imeig,
float* z, lapack_int ldz, float* res,
float* b, lapack_int ldb, float* w,
lapack_int ldw, float* s, lapack_int lds,
float* work, lapack_int lwork,
lapack_int* iwork, lapack_int liwork )
{
lapack_int info = 0;
if( matrix_layout == LAPACK_COL_MAJOR ) {
/* Call LAPACK function and adjust info */
LAPACK_sgedmd( &jobs, &jobz, &jobf, &whtsvd, &m, &n, x, &ldx, y, &ldy,
&k, reig, imeig, z, &ldz, res, b, &ldb, w, &ldw, s, &lds,
work, &lwork, iwork, &liwork, &info );
LAPACK_sgedmd( &jobs, &jobz, &jobr, &jobf, &whtsvd, &m, &n, x, &ldx, y,
&ldy, &nrnk, tol, &k, reig, imeig, z, &ldz, res, b, &ldb, w, &ldw,
s, &lds, work, &lwork, iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;
}
@ -98,9 +99,10 @@ lapack_int LAPACKE_sgedmd_work( int matrix_layout, char jobs, char jobz,
}
/* Query optimal working array(s) size if requested */
if( lwork == -1 ) {
LAPACK_sgedmd( &jobs, &jobz, &jobf, &whtsvd, &m, &n, x, &ldx, y, &ldy,
&k, reig, imeig, z, &ldz, res, b, &ldb, w, &ldw, s, &lds,
work, &lwork, iwork, &liwork, &info );
LAPACK_sgedmd( &jobs, &jobz, &jobr, &jobf, &whtsvd, &m, &n, x,
&ldx, y, &ldy, &nrnk, tol, &k, reig, imeig, z, &ldz, res, b,
&ldb, w, &ldw, s, &lds, work, &lwork, iwork,
&liwork, &info );
return (info < 0) ? (info - 1) : info;
}
/* Allocate memory for temporary array(s) */
@ -142,9 +144,10 @@ lapack_int LAPACKE_sgedmd_work( int matrix_layout, char jobs, char jobz,
LAPACKE_sge_trans( matrix_layout, m, n, w, ldw, w_t, ldw_t );
LAPACKE_sge_trans( matrix_layout, m, n, s, lds, s_t, lds_t );
/* Call LAPACK function and adjust info */
LAPACK_sgedmd( &jobs, &jobz, &jobf, &whtsvd, &m, &n, x_t, &ldx_t, y_t,
&ldy_t, &k, reig, imeig, z_t, &ldz_t, res, b_t, &ldb_t,
w_t, &ldw_t, s_t, &lds_t, work, &lwork, iwork, &liwork, &info );
LAPACK_sgedmd( &jobs, &jobz, &jobr, &jobf, &whtsvd, &m, &n, x_t,
&ldx_t, y_t, &ldy_t, &nrnk, tol, &k, reig, imeig, z_t, &ldz_t,
res, b_t, &ldb_t, w_t, &ldw_t, s_t, &lds_t, work,
&lwork, iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;
}

View File

@ -36,7 +36,7 @@ lapack_int LAPACKE_sgedmdq( int matrix_layout, char jobs, char jobz, char jobr,
char jobq, char jobt, char jobf, lapack_int whtsvd,
lapack_int m, lapack_int n, float* f, lapack_int ldf,
float* x, lapack_int ldx, float* y, lapack_int ldy,
lapack_int nrnk, float tol, lapack_int k,
lapack_int nrnk, float* tol, lapack_int k,
float* reig, float* imeig, float* z,
lapack_int ldz, float* res, float* b, lapack_int ldb,
float* v, lapack_int ldv, float* s, lapack_int lds)

View File

@ -37,7 +37,7 @@ lapack_int LAPACKE_sgedmdq_work( int matrix_layout, char jobs, char jobz,
lapack_int whtsvd, lapack_int m, lapack_int n,
float* f, lapack_int ldf, float* x,
lapack_int ldx, float* y, lapack_int ldy,
lapack_int nrnk, float tol, lapack_int k,
lapack_int nrnk, float* tol, lapack_int k,
float* reig, float* imeig, float* z,
lapack_int ldz, float* res, float* b,
lapack_int ldb, float* v, lapack_int ldv,
@ -49,8 +49,8 @@ lapack_int LAPACKE_sgedmdq_work( int matrix_layout, char jobs, char jobz,
if( matrix_layout == LAPACK_COL_MAJOR ) {
/* Call LAPACK function and adjust info */
LAPACK_sgedmdq( &jobs, &jobz, &jobr, &jobq, &jobt, &jobf, &whtsvd, &m,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, &tol, &k, reig,
imeig, z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, tol, &k, reig, imeig,
z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
work, &lwork, iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;
@ -109,8 +109,8 @@ lapack_int LAPACKE_sgedmdq_work( int matrix_layout, char jobs, char jobz,
/* Query optimal working array(s) size if requested */
if( lwork == -1 || liwork == -1 ) {
LAPACK_sgedmdq( &jobs, &jobz, &jobr, &jobq, &jobt, &jobf, &whtsvd, &m,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, &tol, &k, reig,
imeig, z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, tol, &k, reig, imeig,
z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
work, &lwork, iwork, &liwork, &info );
return (info < 0) ? (info - 1) : info;
}
@ -160,8 +160,8 @@ lapack_int LAPACKE_sgedmdq_work( int matrix_layout, char jobs, char jobz,
LAPACKE_sge_trans( matrix_layout, m, n, s, lds, s_t, lds_t );
/* Call LAPACK function and adjust info */
LAPACK_sgedmdq( &jobs, &jobz, &jobr, &jobq, &jobt, &jobf, &whtsvd, &m,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, &tol, &k, reig,
imeig, z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, tol, &k, reig, imeig,
z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
work, &lwork, iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;

View File

@ -32,24 +32,28 @@
#include "lapacke_utils.h"
lapack_int LAPACKE_zgedmd( int matrix_layout, char jobs, char jobz, char jobf,
lapack_int whtsvd, lapack_int m, lapack_int n,
lapack_complex_double* x, lapack_int ldx,
lapack_complex_double* y, lapack_int ldy,
lapack_int k, lapack_complex_double* reig,
lapack_complex_double* imeig, lapack_complex_double* z,
lapack_int ldz, lapack_complex_double* res,
lapack_int LAPACKE_zgedmd( int matrix_layout, char jobs, char jobz, char jobr,
char jobf, lapack_int whtsvd, lapack_int m,
lapack_int n, lapack_complex_double* x,
lapack_int ldx, lapack_complex_double* y,
lapack_int ldy, lapack_int nrnk, double *tol, lapack_int k,
lapack_complex_double* eigs, lapack_complex_double* z,
lapack_int ldz, double* res,
lapack_complex_double* b, lapack_int ldb,
lapack_complex_double* zw, lapack_int lzw,
lapack_complex_double* w, lapack_int ldw,
lapack_complex_double* s, lapack_int lds)
{
lapack_int info = 0;
lapack_int lwork = -1;
lapack_int liwork = -1;
lapack_complex_double* work = NULL;
lapack_int lzwork = -1;
lapack_complex_double* zwork = NULL;
double* work = NULL;
lapack_int* iwork = NULL;
lapack_complex_double work_query;
double work_query;
lapack_int iwork_query;
lapack_complex_double zwork_query;
if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) {
LAPACKE_xerbla( "LAPACKE_zgedmd", -1 );
return -1;
@ -78,36 +82,44 @@ lapack_int LAPACKE_zgedmd( int matrix_layout, char jobs, char jobz, char jobf,
}
#endif
/* Query optimal working array(s) size */
info = LAPACKE_zgedmd_work( matrix_layout, jobs, jobz, jobf, whtsvd, m, n,
x, ldx, y, ldy, k, reig, imeig, z, ldz, res,
b, ldb, w, ldw, s, lds, &work_query, lwork,
&iwork_query, liwork );
info = LAPACKE_zgedmd_work( matrix_layout, jobs, jobz, jobr, jobf, whtsvd,
m, n, x, ldx, y, ldy, nrnk, tol, k, eigs, z, ldz,
res, b, ldb, w, ldw, s, lds, &zwork_query, lzwork,
&work_query, lwork, &iwork_query, liwork );
if( info != 0 ) {
goto exit_level_0;
}
lwork = LAPACK_Z2INT( work_query );
liwork = iwork_query;
lzwork = LAPACK_Z2INT( zwork_query );
/* Allocate memory for work arrays */
work = (lapack_complex_double*)LAPACKE_malloc( sizeof(lapack_complex_double) * lwork );
if( work == NULL ) {
zwork = (lapack_complex_double*)LAPACKE_malloc( sizeof(lapack_complex_double) * lzwork );
if( zwork == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_0;
}
work = (double*)LAPACKE_malloc( sizeof(double) * lwork );
if( work == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_1;
}
iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork );
if( iwork == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_1;
goto exit_level_2;
}
/* Call middle-level interface */
info = LAPACKE_zgedmd_work( matrix_layout, jobs, jobz, jobf, whtsvd, m, n,
x, ldx, y, ldy, k, reig, imeig, z, ldz, res,
b, ldb, w, ldw, s, lds, work, lwork, iwork,
liwork );
info = LAPACKE_zgedmd_work( matrix_layout, jobs, jobz, jobr, jobf, whtsvd,
m, n, x, ldx, y, ldy, nrnk, tol, k, eigs, z, ldz,
res, b, ldb, w, ldw, s, lds, zwork, lzwork,
work, lwork, iwork, liwork );
/* Release memory and exit */
LAPACKE_free( iwork );
exit_level_1:
exit_level_2:
LAPACKE_free( work );
exit_level_1:
LAPACKE_free( zwork );
exit_level_0:
if( info == LAPACK_WORK_MEMORY_ERROR ) {
LAPACKE_xerbla( "LAPACKE_zgedmd", info );

View File

@ -33,25 +33,27 @@
#include "lapacke_utils.h"
lapack_int LAPACKE_zgedmd_work( int matrix_layout, char jobs, char jobz,
char jobf, lapack_int whtsvd, lapack_int m,
lapack_int n, lapack_complex_double* x,
char jobr, char jobf, lapack_int whtsvd,
lapack_int m, lapack_int n,
lapack_complex_double* x,
lapack_int ldx, lapack_complex_double* y,
lapack_int ldy, lapack_int k,
lapack_complex_double* reig,
lapack_complex_double* imeig, lapack_complex_double* z,
lapack_int ldz, lapack_complex_double* res,
lapack_int ldy, lapack_int nrnk, double *tol, lapack_int k,
lapack_complex_double* eigs, lapack_complex_double* z,
lapack_int ldz, double* res,
lapack_complex_double* b, lapack_int ldb,
lapack_complex_double* w, lapack_int ldw,
lapack_complex_double* s, lapack_int lds,
lapack_complex_double* work, lapack_int lwork,
lapack_complex_double* zwork, lapack_int lzwork,
double* work, lapack_int lwork,
lapack_int* iwork, lapack_int liwork )
{
lapack_int info = 0;
if( matrix_layout == LAPACK_COL_MAJOR ) {
/* Call LAPACK function and adjust info */
LAPACK_zgedmd( &jobs, &jobz, &jobf, &whtsvd, &m, &n, x, &ldx, y, &ldy,
&k, reig, imeig, z, &ldz, res, b, &ldb, w, &ldw, s, &lds,
work, &lwork, iwork, &liwork, &info );
LAPACK_zgedmd( &jobs, &jobz, &jobr, &jobf, &whtsvd, &m, &n, x, &ldx,
y, &ldy, &nrnk, tol, &k, eigs, z, &ldz, res, b, &ldb, w,
&ldw, s, &lds, zwork, &lzwork, work, &lwork, iwork,
&liwork, &info );
if( info < 0 ) {
info = info - 1;
}
@ -101,9 +103,10 @@ lapack_int LAPACKE_zgedmd_work( int matrix_layout, char jobs, char jobz,
}
/* Query optimal working array(s) size if requested */
if( lwork == -1 ) {
LAPACK_zgedmd( &jobs, &jobz, &jobf, &whtsvd, &m, &n, x, &ldx, y, &ldy,
&k, reig, imeig, z, &ldz, res, b, &ldb, w, &ldw, s, &lds,
work, &lwork, iwork, &liwork, &info );
LAPACK_zgedmd( &jobs, &jobz, &jobr, &jobf, &whtsvd, &m, &n, x,
&ldx, y, &ldy, &nrnk, tol, &k, eigs, z, &ldz, res, b,
&ldb, w, &ldw, s, &lds, zwork, &lzwork, work,
&lwork, iwork, &liwork, &info );
return (info < 0) ? (info - 1) : info;
}
/* Allocate memory for temporary array(s) */
@ -145,9 +148,10 @@ lapack_int LAPACKE_zgedmd_work( int matrix_layout, char jobs, char jobz,
LAPACKE_zge_trans( matrix_layout, m, n, w, ldw, w_t, ldw_t );
LAPACKE_zge_trans( matrix_layout, m, n, s, lds, s_t, lds_t );
/* Call LAPACK function and adjust info */
LAPACK_zgedmd( &jobs, &jobz, &jobf, &whtsvd, &m, &n, x_t, &ldx_t, y_t,
&ldy_t, &k, reig, imeig, z_t, &ldz_t, res, b_t, &ldb_t,
w_t, &ldw_t, s_t, &lds_t, work, &lwork, iwork, &liwork, &info );
LAPACK_zgedmd( &jobs, &jobz, &jobr, &jobf, &whtsvd, &m, &n, x_t,
&ldx_t, y_t, &ldy_t, &nrnk, tol, &k, eigs, z_t, &ldz_t,
res, b_t, &ldb_t, w_t, &ldw_t, s_t, &lds_t, zwork,
&lzwork, work, &lwork, iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;
}

View File

@ -37,23 +37,25 @@ lapack_int LAPACKE_zgedmdq( int matrix_layout, char jobs, char jobz, char jobr,
lapack_int m, lapack_int n, lapack_complex_double* f,
lapack_int ldf, lapack_complex_double* x,
lapack_int ldx, lapack_complex_double* y,
lapack_int ldy, lapack_int nrnk, double tol,
lapack_int k, lapack_complex_double* reig,
lapack_complex_double* imeig,
lapack_int ldy, lapack_int nrnk, double* tol,
lapack_int k, lapack_complex_double* eigs,
lapack_complex_double* z, lapack_int ldz,
lapack_complex_double* res, lapack_complex_double* b,
double* res, lapack_complex_double* b,
lapack_int ldb, lapack_complex_double* v,
lapack_int ldv, lapack_complex_double* s, lapack_int lds)
{
lapack_int info = 0;
lapack_int lwork = -1;
lapack_int liwork = -1;
lapack_complex_double* work = NULL;
lapack_int lzwork = -1;
lapack_complex_double* zwork = NULL;
double* work = NULL;
lapack_int* iwork = NULL;
lapack_complex_double work_query;
double work_query;
lapack_complex_double zwork_query;
lapack_int iwork_query;
if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) {
LAPACKE_xerbla( "LAPACKE_cgedmdq", -1 );
LAPACKE_xerbla( "LAPACKE_zgedmdq", -1 );
return -1;
}
#ifndef LAPACK_DISABLE_NAN_CHECK
@ -85,36 +87,44 @@ lapack_int LAPACKE_zgedmdq( int matrix_layout, char jobs, char jobz, char jobr,
/* Query optimal working array(s) size */
info = LAPACKE_zgedmdq_work( matrix_layout, jobs, jobz, jobr, jobq, jobt,
jobf, whtsvd, m, n, f, ldf, x, ldx, y, ldy,
nrnk, tol, k, reig, imeig, z, ldz, res,
b, ldb, v, ldv, s, lds, &work_query, lwork,
&iwork_query, liwork );
nrnk, tol, k, eigs, z, ldz, res,
b, ldb, v, ldv, s, lds, &zwork_query, lzwork,
&work_query, lwork, &iwork_query, liwork );
if( info != 0 ) {
goto exit_level_0;
}
lwork = LAPACK_Z2INT( work_query );
lzwork = LAPACK_Z2INT( zwork_query );
liwork = iwork_query;
/* Allocate memory for work arrays */
work = (lapack_complex_double*)LAPACKE_malloc( sizeof(lapack_complex_double) * lwork );
if( work == NULL ) {
zwork = (lapack_complex_double*)LAPACKE_malloc( sizeof(lapack_complex_double) * lzwork );
if( zwork == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_0;
}
work = (double*)LAPACKE_malloc( sizeof(lapack_complex_double) * lwork );
if( work == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_1;
}
iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork );
if( iwork == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_1;
goto exit_level_2;
}
/* Call middle-level interface */
info = LAPACKE_zgedmdq_work( matrix_layout, jobs, jobz, jobr, jobq, jobt,
jobf, whtsvd, m, n, f, ldf, x, ldx, y, ldy,
nrnk, tol, k, reig, imeig, z, ldz, res,
b, ldb, v, ldv, s, lds, work, lwork, iwork,
liwork );
nrnk, tol, k, eigs, z, ldz, res,
b, ldb, v, ldv, s, lds, zwork, lzwork,
work, lwork, iwork, liwork );
/* Release memory and exit */
LAPACKE_free( iwork );
exit_level_1:
exit_level_2:
LAPACKE_free( work );
exit_level_1:
LAPACKE_free( zwork );
exit_level_0:
if( info == LAPACK_WORK_MEMORY_ERROR ) {
LAPACKE_xerbla( "LAPACKE_zgedmdq", info );

View File

@ -38,15 +38,15 @@ lapack_int LAPACKE_zgedmdq_work( int matrix_layout, char jobs, char jobz,
lapack_complex_double* f, lapack_int ldf,
lapack_complex_double* x, lapack_int ldx,
lapack_complex_double* y, lapack_int ldy,
lapack_int nrnk, double tol, lapack_int k,
lapack_complex_double* reig,
lapack_complex_double* imeig,
lapack_int nrnk, double* tol, lapack_int k,
lapack_complex_double* eigs,
lapack_complex_double* z,
lapack_int ldz, lapack_complex_double* res,
lapack_int ldz, double* res,
lapack_complex_double* b,
lapack_int ldb, lapack_complex_double* v,
lapack_int ldv, lapack_complex_double* s,
lapack_int lds, lapack_complex_double* work,
lapack_int lds, lapack_complex_double* zwork,
lapack_int lzwork, double* work,
lapack_int lwork, lapack_int* iwork,
lapack_int liwork )
{
@ -54,9 +54,9 @@ lapack_int LAPACKE_zgedmdq_work( int matrix_layout, char jobs, char jobz,
if( matrix_layout == LAPACK_COL_MAJOR ) {
/* Call LAPACK function and adjust info */
LAPACK_zgedmdq( &jobs, &jobz, &jobr, &jobq, &jobt, &jobf, &whtsvd, &m,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, &tol, &k, reig,
imeig, z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
work, &lwork, iwork, &liwork, &info );
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, tol, &k, eigs,
z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
zwork, &lzwork, work, &lwork, iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;
}
@ -114,9 +114,9 @@ lapack_int LAPACKE_zgedmdq_work( int matrix_layout, char jobs, char jobz,
/* Query optimal working array(s) size if requested */
if( lwork == -1 || liwork == -1 ) {
LAPACK_zgedmdq( &jobs, &jobz, &jobr, &jobq, &jobt, &jobf, &whtsvd, &m,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, &tol, &k, reig,
imeig, z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
work, &lwork, iwork, &liwork, &info );
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, tol, &k, eigs,
z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
zwork, &lzwork, work, &lwork, iwork, &liwork, &info );
return (info < 0) ? (info - 1) : info;
}
/* Allocate memory for temporary array(s) */
@ -165,9 +165,9 @@ lapack_int LAPACKE_zgedmdq_work( int matrix_layout, char jobs, char jobz,
LAPACKE_zge_trans( matrix_layout, m, n, s, lds, s_t, lds_t );
/* Call LAPACK function and adjust info */
LAPACK_zgedmdq( &jobs, &jobz, &jobr, &jobq, &jobt, &jobf, &whtsvd, &m,
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, &tol, &k, reig,
imeig, z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
work, &lwork, iwork, &liwork, &info );
&n, f, &ldf, x, &ldx, y, &ldy, &nrnk, tol, &k, eigs,
z, &ldz, res, b, &ldb, v, &ldv, s, &lds,
zwork, &lzwork, work, &lwork, iwork, &liwork, &info );
if( info < 0 ) {
info = info - 1;
}