Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 100 additions & 0 deletions LAPACKE/include/lapack.h
Original file line number Diff line number Diff line change
Expand Up @@ -1842,6 +1842,28 @@ void LAPACK_zgeqlf(
lapack_complex_double* work, lapack_int const* lwork,
lapack_int* info );

#define LAPACK_sgeqpf LAPACK_GLOBAL(sgeqpf,SGEQPF)
void LAPACK_sgeqpf( lapack_int* m, lapack_int* n, float* a, lapack_int* lda,
lapack_int* jpvt, float* tau, float* work,
lapack_int *info );

#define LAPACK_dgeqpf LAPACK_GLOBAL(dgeqpf,DGEQPF)
void LAPACK_dgeqpf( lapack_int* m, lapack_int* n, double* a, lapack_int* lda,
lapack_int* jpvt, double* tau, double* work,
lapack_int *info );

#define LAPACK_cgeqpf LAPACK_GLOBAL(cgeqpf,CGEQPF)
void LAPACK_cgeqpf( lapack_int* m, lapack_int* n, lapack_complex_float* a,
lapack_int* lda, lapack_int* jpvt,
lapack_complex_float* tau, lapack_complex_float* work,
float* rwork, lapack_int *info );

#define LAPACK_zgeqpf LAPACK_GLOBAL(zgeqpf,ZGEQPF)
void LAPACK_zgeqpf( lapack_int* m, lapack_int* n, lapack_complex_double* a,
lapack_int* lda, lapack_int* jpvt,
lapack_complex_double* tau, lapack_complex_double* work,
double* rwork, lapack_int *info );

#define LAPACK_cgeqp3 LAPACK_GLOBAL(cgeqp3,CGEQP3)
void LAPACK_cgeqp3(
lapack_int const* m, lapack_int const* n,
Expand Down Expand Up @@ -3617,6 +3639,47 @@ void LAPACK_zggrqf(
lapack_complex_double* work, lapack_int const* lwork,
lapack_int* info );

#define LAPACK_sggsvd LAPACK_GLOBAL(sggsvd,SGGSVD)
lapack_int LAPACKE_sggsvd( int matrix_layout, char jobu, char jobv, char jobq,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shoudn't this be LAPACK_sggsvd instead of LAPACKE_sggsvd?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there are two decl:
-Fortran callable from C
-The C plaster or the memory copies and transposes everywhere frontend.

@h-vetinari h-vetinari Apr 25, 2020

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know the codebase well, but I presume the plaster is e.g. lapacke_sggsvd_work that does the transposing etc. while the actual C-to-Fortran wrapper is lapacke_sggsvd.

However, by that same argument, the group of [cdsz]geqpf-functions above should also be declared with LAPACKE_... but aren't (even though the have the same structure). From an outside POV, it would make sense that lapack.h refers to LAPACK-functions, not LAPACKE?

@mu578 mu578 Apr 25, 2020

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes surely (except the first paragraph which is plain wrong); however; it's a compatibility restore; was this way before; the best way would be to declare

#define LAPACK_DEPRECATED

LAPACK_DEPRECATED
#define LAPACK_dggsvd LAPACK_GLOBAL(dggsvd,DGGSVD)
lapack_int LAPACKE_dggsvd (int matrix_layout, char jobu, char jobv, char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k, lapack_int *l, double *a, lapack_int lda, double *b, lapack_int ldb, double *alpha, double *beta, double *u, lapack_int ldu, double *v, lapack_int ldv, double *q, lapack_int ldq, lapack_int *iwork);

for reference -> https://github.com/Reference-LAPACK/lapack/blob/master/LAPACKE/src/lapacke_sggsvd.c#L36

then calling its worker which finally calls the true Fortran-C binding (global intrinsic); was the original spaghetti design; not me-self; just iterating facts and being rational.

lapack_int m, lapack_int n, lapack_int p,
lapack_int* k, lapack_int* l, float* a,
lapack_int lda, float* b, lapack_int ldb,
float* alpha, float* beta, float* u, lapack_int ldu,
float* v, lapack_int ldv, float* q, lapack_int ldq,
lapack_int* iwork );

#define LAPACK_dggsvd LAPACK_GLOBAL(dggsvd,DGGSVD)
lapack_int LAPACKE_dggsvd( int matrix_layout, char jobu, char jobv, char jobq,
lapack_int m, lapack_int n, lapack_int p,
lapack_int* k, lapack_int* l, double* a,
lapack_int lda, double* b, lapack_int ldb,
double* alpha, double* beta, double* u,
lapack_int ldu, double* v, lapack_int ldv, double* q,
lapack_int ldq, lapack_int* iwork );

#define LAPACK_cggsvd LAPACK_GLOBAL(cggsvd,CGGSVD)
lapack_int LAPACKE_cggsvd( int matrix_layout, char jobu, char jobv, char jobq,
lapack_int m, lapack_int n, lapack_int p,
lapack_int* k, lapack_int* l,
lapack_complex_float* a, lapack_int lda,
lapack_complex_float* b, lapack_int ldb,
float* alpha, float* beta, lapack_complex_float* u,
lapack_int ldu, lapack_complex_float* v,
lapack_int ldv, lapack_complex_float* q,
lapack_int ldq, lapack_int* iwork );

#define LAPACK_zggsvd LAPACK_GLOBAL(zggsvd,ZGGSVD)
lapack_int LAPACKE_zggsvd( int matrix_layout, char jobu, char jobv, char jobq,
lapack_int m, lapack_int n, lapack_int p,
lapack_int* k, lapack_int* l,
lapack_complex_double* a, lapack_int lda,
lapack_complex_double* b, lapack_int ldb,
double* alpha, double* beta,
lapack_complex_double* u, lapack_int ldu,
lapack_complex_double* v, lapack_int ldv,
lapack_complex_double* q, lapack_int ldq,
lapack_int* iwork );

#define LAPACK_cggsvd3 LAPACK_GLOBAL(cggsvd3,CGGSVD3)
void LAPACK_cggsvd3(
char const* jobu, char const* jobv, char const* jobq,
Expand Down Expand Up @@ -3679,6 +3742,43 @@ void LAPACK_zggsvd3(
lapack_int* iwork,
lapack_int* info );

#define LAPACK_sggsvp LAPACK_GLOBAL(sggsvp,SGGSVP)
lapack_int LAPACKE_sggsvp( int matrix_layout, char jobu, char jobv, char jobq,
lapack_int m, lapack_int p, lapack_int n, float* a,
lapack_int lda, float* b, lapack_int ldb, float tola,
float tolb, lapack_int* k, lapack_int* l, float* u,
lapack_int ldu, float* v, lapack_int ldv, float* q,
lapack_int ldq );

#define LAPACK_dggsvp LAPACK_GLOBAL(dggsvp,DGGSVP)
lapack_int LAPACKE_dggsvp( int matrix_layout, char jobu, char jobv, char jobq,
lapack_int m, lapack_int p, lapack_int n, double* a,
lapack_int lda, double* b, lapack_int ldb,
double tola, double tolb, lapack_int* k,
lapack_int* l, double* u, lapack_int ldu, double* v,
lapack_int ldv, double* q, lapack_int ldq );

#define LAPACK_cggsvp LAPACK_GLOBAL(cggsvp,CGGSVP)
lapack_int LAPACKE_cggsvp( int matrix_layout, char jobu, char jobv, char jobq,
lapack_int m, lapack_int p, lapack_int n,
lapack_complex_float* a, lapack_int lda,
lapack_complex_float* b, lapack_int ldb, float tola,
float tolb, lapack_int* k, lapack_int* l,
lapack_complex_float* u, lapack_int ldu,
lapack_complex_float* v, lapack_int ldv,
lapack_complex_float* q, lapack_int ldq );

#define LAPACK_zggsvp LAPACK_GLOBAL(zggsvp,ZGGSVP)
lapack_int LAPACKE_zggsvp( int matrix_layout, char jobu, char jobv, char jobq,
lapack_int m, lapack_int p, lapack_int n,
lapack_complex_double* a, lapack_int lda,
lapack_complex_double* b, lapack_int ldb,
double tola, double tolb, lapack_int* k,
lapack_int* l, lapack_complex_double* u,
lapack_int ldu, lapack_complex_double* v,
lapack_int ldv, lapack_complex_double* q,
lapack_int ldq );

#define LAPACK_cggsvp3 LAPACK_GLOBAL(cggsvp3,CGGSVP3)
void LAPACK_cggsvp3(
char const* jobu, char const* jobv, char const* jobq,
Expand Down