Skip to content

Commit fef5308

Browse files
authored
Merge pull request #434 from martin-frbg/lapacke_lapack_h
LAPACKE/include/lapack.h: fix C++ compatibility and prototypes for xGGSVD/xGGSVP
2 parents 773eb18 + 14740d3 commit fef5308

File tree

1 file changed

+93
-75
lines changed

1 file changed

+93
-75
lines changed

LAPACKE/include/lapack.h

Lines changed: 93 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,6 @@
1212

1313
#include <stdlib.h>
1414

15-
#ifdef __cplusplus
16-
extern "C" {
17-
#endif
18-
19-
/*----------------------------------------------------------------------------*/
20-
#ifndef lapack_int
21-
#define lapack_int int
22-
#endif
23-
24-
#ifndef lapack_logical
25-
#define lapack_logical lapack_int
26-
#endif
27-
28-
/* f2c, hence clapack and MacOS Accelerate, returns double instead of float
29-
* for sdot, slange, clange, etc. */
30-
#if defined(LAPACK_F2C)
31-
typedef double lapack_float_return;
32-
#else
33-
typedef float lapack_float_return;
34-
#endif
35-
3615
/* Complex types are structures equivalent to the
3716
* Fortran complex types COMPLEX(4) and COMPLEX(8).
3817
*
@@ -52,7 +31,11 @@ extern "C" {
5231

5332
/* Complex type (single precision) */
5433
#ifndef lapack_complex_float
34+
#ifndef __cplusplus
5535
#include <complex.h>
36+
#else
37+
#include <complex>
38+
#endif
5639
#define lapack_complex_float float _Complex
5740
#endif
5841

@@ -66,7 +49,11 @@ extern "C" {
6649

6750
/* Complex type (double precision) */
6851
#ifndef lapack_complex_double
52+
#ifndef __cplusplus
6953
#include <complex.h>
54+
#else
55+
#include <complex>
56+
#endif
7057
#define lapack_complex_double double _Complex
7158
#endif
7259

@@ -80,6 +67,29 @@ extern "C" {
8067

8168
#endif /* LAPACK_COMPLEX_CUSTOM */
8269

70+
71+
#ifdef __cplusplus
72+
extern "C" {
73+
#endif
74+
75+
/*----------------------------------------------------------------------------*/
76+
#ifndef lapack_int
77+
#define lapack_int int
78+
#endif
79+
80+
#ifndef lapack_logical
81+
#define lapack_logical lapack_int
82+
#endif
83+
84+
/* f2c, hence clapack and MacOS Accelerate, returns double instead of float
85+
* for sdot, slange, clange, etc. */
86+
#if defined(LAPACK_F2C)
87+
typedef double lapack_float_return;
88+
#else
89+
typedef float lapack_float_return;
90+
#endif
91+
92+
8393
/* Callback logical functions of one, two, or three arguments are used
8494
* to select eigenvalues to sort to the top left of the Schur form.
8595
* The value is selected if function returns TRUE (non-zero). */
@@ -3640,45 +3650,45 @@ void LAPACK_zggrqf(
36403650
lapack_int* info );
36413651

36423652
#define LAPACK_sggsvd LAPACK_GLOBAL(sggsvd,SGGSVD)
3643-
lapack_int LAPACKE_sggsvd( int matrix_layout, char jobu, char jobv, char jobq,
3644-
lapack_int m, lapack_int n, lapack_int p,
3653+
lapack_int LAPACK_sggsvd( char const* jobu, char const* jobv, char const* jobq,
3654+
lapack_int* m, lapack_int* n, lapack_int* p,
36453655
lapack_int* k, lapack_int* l, float* a,
3646-
lapack_int lda, float* b, lapack_int ldb,
3647-
float* alpha, float* beta, float* u, lapack_int ldu,
3648-
float* v, lapack_int ldv, float* q, lapack_int ldq,
3649-
lapack_int* iwork );
3656+
lapack_int* lda, float* b, lapack_int* ldb,
3657+
float* alpha, float* beta, float* u, lapack_int* ldu,
3658+
float* v, lapack_int* ldv, float* q, lapack_int* ldq,
3659+
float* work, lapack_int* iwork, lapack_int* info );
36503660

36513661
#define LAPACK_dggsvd LAPACK_GLOBAL(dggsvd,DGGSVD)
3652-
lapack_int LAPACKE_dggsvd( int matrix_layout, char jobu, char jobv, char jobq,
3653-
lapack_int m, lapack_int n, lapack_int p,
3662+
lapack_int LAPACK_dggsvd( char const* jobu, char const* jobv, char const* jobq,
3663+
lapack_int* m, lapack_int* n, lapack_int* p,
36543664
lapack_int* k, lapack_int* l, double* a,
3655-
lapack_int lda, double* b, lapack_int ldb,
3665+
lapack_int* lda, double* b, lapack_int* ldb,
36563666
double* alpha, double* beta, double* u,
3657-
lapack_int ldu, double* v, lapack_int ldv, double* q,
3658-
lapack_int ldq, lapack_int* iwork );
3667+
lapack_int* ldu, double* v, lapack_int* ldv, double* q,
3668+
lapack_int* ldq, float* work, lapack_int* iwork, lapack_int* info );
36593669

36603670
#define LAPACK_cggsvd LAPACK_GLOBAL(cggsvd,CGGSVD)
3661-
lapack_int LAPACKE_cggsvd( int matrix_layout, char jobu, char jobv, char jobq,
3662-
lapack_int m, lapack_int n, lapack_int p,
3671+
lapack_int LAPACK_cggsvd( char const* jobu, char const* jobv, char const* jobq,
3672+
lapack_int* m, lapack_int* n, lapack_int* p,
36633673
lapack_int* k, lapack_int* l,
3664-
lapack_complex_float* a, lapack_int lda,
3665-
lapack_complex_float* b, lapack_int ldb,
3674+
lapack_complex_float* a, lapack_int* lda,
3675+
lapack_complex_float* b, lapack_int* ldb,
36663676
float* alpha, float* beta, lapack_complex_float* u,
3667-
lapack_int ldu, lapack_complex_float* v,
3668-
lapack_int ldv, lapack_complex_float* q,
3669-
lapack_int ldq, lapack_int* iwork );
3677+
lapack_int* ldu, lapack_complex_float* v,
3678+
lapack_int* ldv, lapack_complex_float* q,
3679+
lapack_int* ldq, float* work, lapack_int* rwork, lapack_int* iwork, lapack_int *info );
36703680

36713681
#define LAPACK_zggsvd LAPACK_GLOBAL(zggsvd,ZGGSVD)
3672-
lapack_int LAPACKE_zggsvd( int matrix_layout, char jobu, char jobv, char jobq,
3673-
lapack_int m, lapack_int n, lapack_int p,
3682+
lapack_int LAPACK_zggsvd( char const* jobu, char const* jobv, char const* jobq,
3683+
lapack_int* m, lapack_int* n, lapack_int* p,
36743684
lapack_int* k, lapack_int* l,
3675-
lapack_complex_double* a, lapack_int lda,
3676-
lapack_complex_double* b, lapack_int ldb,
3685+
lapack_complex_double* a, lapack_int* lda,
3686+
lapack_complex_double* b, lapack_int* ldb,
36773687
double* alpha, double* beta,
3678-
lapack_complex_double* u, lapack_int ldu,
3679-
lapack_complex_double* v, lapack_int ldv,
3680-
lapack_complex_double* q, lapack_int ldq,
3681-
lapack_int* iwork );
3688+
lapack_complex_double* u, lapack_int* ldu,
3689+
lapack_complex_double* v, lapack_int* ldv,
3690+
lapack_complex_double* q, lapack_int* ldq,
3691+
float* work, lapack_int* rwork, lapack_int* iwork, lapack_int* info );
36823692

36833693
#define LAPACK_cggsvd3 LAPACK_GLOBAL(cggsvd3,CGGSVD3)
36843694
void LAPACK_cggsvd3(
@@ -3743,41 +3753,49 @@ void LAPACK_zggsvd3(
37433753
lapack_int* info );
37443754

37453755
#define LAPACK_sggsvp LAPACK_GLOBAL(sggsvp,SGGSVP)
3746-
lapack_int LAPACKE_sggsvp( int matrix_layout, char jobu, char jobv, char jobq,
3747-
lapack_int m, lapack_int p, lapack_int n, float* a,
3748-
lapack_int lda, float* b, lapack_int ldb, float tola,
3749-
float tolb, lapack_int* k, lapack_int* l, float* u,
3750-
lapack_int ldu, float* v, lapack_int ldv, float* q,
3751-
lapack_int ldq );
3756+
lapack_int LAPACK_sggsvp( char const* jobu, char const* jobv, char const* jobq,
3757+
lapack_int* m, lapack_int* p, lapack_int* n, float* a,
3758+
lapack_int* lda, float* b, lapack_int* ldb, float* tola,
3759+
float* tolb, lapack_int* k, lapack_int* l, float* u,
3760+
lapack_int* ldu, float* v, lapack_int* ldv, float* q,
3761+
lapack_int* ldq, lapack_int* iwork, float* tau,
3762+
float* work, lapack_int* info);
37523763

37533764
#define LAPACK_dggsvp LAPACK_GLOBAL(dggsvp,DGGSVP)
3754-
lapack_int LAPACKE_dggsvp( int matrix_layout, char jobu, char jobv, char jobq,
3755-
lapack_int m, lapack_int p, lapack_int n, double* a,
3756-
lapack_int lda, double* b, lapack_int ldb,
3757-
double tola, double tolb, lapack_int* k,
3758-
lapack_int* l, double* u, lapack_int ldu, double* v,
3759-
lapack_int ldv, double* q, lapack_int ldq );
3765+
lapack_int LAPACK_dggsvp( char const* jobu, char const* jobv, char const* jobq,
3766+
lapack_int* m, lapack_int* p, lapack_int* n, double* a,
3767+
lapack_int* lda, double* b, lapack_int* ldb,
3768+
double* tola, double* tolb, lapack_int* k,
3769+
lapack_int* l, double* u, lapack_int* ldu, double* v,
3770+
lapack_int* ldv, double* q, lapack_int* ldq,
3771+
lapack_int* iwork, double* tau, double* work,
3772+
lapack_int* info);
37603773

37613774
#define LAPACK_cggsvp LAPACK_GLOBAL(cggsvp,CGGSVP)
3762-
lapack_int LAPACKE_cggsvp( int matrix_layout, char jobu, char jobv, char jobq,
3763-
lapack_int m, lapack_int p, lapack_int n,
3764-
lapack_complex_float* a, lapack_int lda,
3765-
lapack_complex_float* b, lapack_int ldb, float tola,
3766-
float tolb, lapack_int* k, lapack_int* l,
3767-
lapack_complex_float* u, lapack_int ldu,
3768-
lapack_complex_float* v, lapack_int ldv,
3769-
lapack_complex_float* q, lapack_int ldq );
3775+
lapack_int LAPACK_cggsvp( char const* jobu, char const* jobv, char const* jobq,
3776+
lapack_int* m, lapack_int* p, lapack_int* n,
3777+
lapack_complex_float* a, lapack_int* lda,
3778+
lapack_complex_float* b, lapack_int* ldb, float* tola,
3779+
float* tolb, lapack_int* k, lapack_int* l,
3780+
lapack_complex_float* u, lapack_int* ldu,
3781+
lapack_complex_float* v, lapack_int* ldv,
3782+
lapack_complex_float* q, lapack_int* ldq,
3783+
lapack_int* iwork, lapack_int* rwork,
3784+
lapack_complex_float* tau, lapack_complex_float* work,
3785+
lapack_int* info);
37703786

37713787
#define LAPACK_zggsvp LAPACK_GLOBAL(zggsvp,ZGGSVP)
3772-
lapack_int LAPACKE_zggsvp( int matrix_layout, char jobu, char jobv, char jobq,
3773-
lapack_int m, lapack_int p, lapack_int n,
3774-
lapack_complex_double* a, lapack_int lda,
3775-
lapack_complex_double* b, lapack_int ldb,
3776-
double tola, double tolb, lapack_int* k,
3788+
lapack_int LAPACK_zggsvp( char const* jobu, char const* jobv, char const* jobq,
3789+
lapack_int* m, lapack_int* p, lapack_int* n,
3790+
lapack_complex_double* a, lapack_int* lda,
3791+
lapack_complex_double* b, lapack_int* ldb,
3792+
double* tola, double* tolb, lapack_int* k,
37773793
lapack_int* l, lapack_complex_double* u,
3778-
lapack_int ldu, lapack_complex_double* v,
3779-
lapack_int ldv, lapack_complex_double* q,
3780-
lapack_int ldq );
3794+
lapack_int* ldu, lapack_complex_double* v,
3795+
lapack_int* ldv, lapack_complex_double* q,
3796+
lapack_int* ldq, lapack_int* iwork, lapack_int* rwork,
3797+
lapack_complex_double* tau, lapack_complex_double* work,
3798+
lapack_int* info);
37813799

37823800
#define LAPACK_cggsvp3 LAPACK_GLOBAL(cggsvp3,CGGSVP3)
37833801
void LAPACK_cggsvp3(

0 commit comments

Comments
 (0)