Skip to content

Adding Dynamic Mode Decomposition (DMD) into LAPACK #736

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 26 commits into from
Jun 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
cea00a7
Adding DMD algorithm in four precisions, tester will follow
Oct 18, 2022
dc9b4e8
Updating precision routines and beginning integration of tester
Oct 19, 2022
a8e4012
Adding the DMDQ codes
Oct 22, 2022
7aeab07
Fix for complex dmdq codes and progress to tester
Nov 2, 2022
fd272e7
Progress to the testing implementation in double precision
Nov 9, 2022
c4adf64
Removing unused variables
Nov 15, 2022
7bfb8ff
single precision tester finished, working on double complex
Nov 17, 2022
21059dc
Progressing code
Dec 6, 2022
c65a7a7
Progress to resolving the bug with complex testers
Feb 9, 2023
3b08c51
Updating src files, testing all precisions. Some clean-up remains but…
Mar 16, 2023
bd1204d
Merge branch 'Reference-LAPACK:master' into master
dbielich Mar 21, 2023
25030ae
Improving testers - will need to investigate float precision impl
Mar 21, 2023
c91783e
Merge branch 'master' of https://github.com/dbielich/lapack88
Mar 21, 2023
1e2d26e
adding correction to schkdmd tester
Mar 21, 2023
e52daa3
Fixing compilation warning error for git
Mar 21, 2023
fbd853c
Adding lapacke wrappers for dmd routines - dmdq is needed yet
Mar 24, 2023
cc50227
Adding first precision of dmdq impl for lapacke
Mar 24, 2023
f74a632
Finishing up first impl of lapacke wrappers, waiting for review to re…
Mar 24, 2023
b5f984f
Fixing lapacke wrappers for memory leak conventions
Mar 27, 2023
7e42285
Addressing lapacke incorrectness and comments to the PR in general
Apr 18, 2023
e798ab2
Fixing interger workspace allocation
Apr 18, 2023
c6c2689
Fixes for the integer workspace
May 7, 2023
59f4d58
Documentation fix
May 7, 2023
8ade5d1
Pushing final comments on PR for current progress
dbielich Jun 1, 2023
fd82c87
Merge branch 'master' into master
langou Jun 1, 2023
561e5bd
Requested changes for typos and convention errors in branch
dbielich Jun 2, 2023
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ CBLAS/examples/cblas_ex2
# LAPACK testing
TESTING/LIN/xlintst*
TESTING/EIG/xeigtst*
TESTING/EIG/xdmd*
TESTING/*.out
TESTING/*.txt
!TESTING/CMakeLists.txt
Expand Down
132 changes: 132 additions & 0 deletions LAPACKE/include/lapack.h
Original file line number Diff line number Diff line change
Expand Up @@ -3319,6 +3319,138 @@ 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,
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* 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_int* iwork, lapack_int const* liwork,
lapack_int* info );

#define LAPACK_dgedmd LAPACK_GLOBAL(dgedmd,DGEDMD)
void LAPACK_dgedmd(
char const* jobs, char const* jobz, 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* 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 );

#define LAPACK_sgedmd LAPACK_GLOBAL(sgedmd,SGEDMD)
void LAPACK_sgedmd(
char const* jobs, char const* jobz, 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* 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 );

#define LAPACK_zgedmd LAPACK_GLOBAL(zgedmd,ZGEDMD)
void LAPACK_zgedmd(
char const* jobs, char const* jobz, 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* 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_int* iwork, lapack_int const* liwork,
lapack_int* info );

#define LAPACK_cgedmdq LAPACK_GLOBAL(cgedmdq,CGEDMDQ)
void LAPACK_cgedmdq(
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,
lapack_complex_float* f, lapack_int const* ldf,
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* 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_int* iwork, lapack_int const* liwork,
lapack_int* info );

#define LAPACK_dgedmdq LAPACK_GLOBAL(dgedmdq,DGEDMDQ)
void LAPACK_dgedmdq(
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* reig, double* imeig,
double* z, lapack_int const* ldz, double* res,
double* b, lapack_int const* ldb,
double* v, lapack_int const* ldv,
double* s, lapack_int const* lds,
double* work, lapack_int const* lwork,
lapack_int* iwork, lapack_int const* liwork,
lapack_int* info );

#define LAPACK_sgedmdq LAPACK_GLOBAL(sgedmdq,SGEDMDQ)
void LAPACK_sgedmdq(
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,
float* f, lapack_int const* ldf,
float* x, lapack_int const* ldx,
float* y, lapack_int const* ldy, lapack_int const* nrnk,
float const* tol, lapack_int const* k,
float* reig, float* imeig,
float* z, lapack_int const* ldz, float* res,
float* b, lapack_int const* ldb,
float* v, lapack_int const* ldv,
float* s, lapack_int const* lds,
float* work, lapack_int const* lwork,
lapack_int* iwork, lapack_int const* liwork,
lapack_int* info );

#define LAPACK_zgedmdq LAPACK_GLOBAL(zgedmdq,ZGEDMDQ)
void LAPACK_zgedmdq(
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,
lapack_complex_double* f, lapack_int const* ldf,
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* 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_int* iwork, lapack_int const* liwork,
lapack_int* info );

#define LAPACK_cgesv LAPACK_GLOBAL(cgesv,CGESV)
void LAPACK_cgesv(
lapack_int const* n, lapack_int const* nrhs,
Expand Down
131 changes: 122 additions & 9 deletions LAPACKE/include/lapacke.h
Original file line number Diff line number Diff line change
Expand Up @@ -956,7 +956,7 @@ lapack_int LAPACKE_zgesvdq( int matrix_layout, char joba, char jobp, char jobr,
lapack_int lda, double* s, lapack_complex_double* u,
lapack_int ldu, lapack_complex_double* v,
lapack_int ldv, lapack_int* numrank );

lapack_int LAPACKE_sgesvj( int matrix_layout, char joba, char jobu, char jobv,
lapack_int m, lapack_int n, float* a, lapack_int lda,
float* sva, lapack_int mv, float* v, lapack_int ldv,
Expand Down Expand Up @@ -5712,6 +5712,120 @@ lapack_int LAPACKE_zgesdd_work( int matrix_layout, char jobz, lapack_int m,
lapack_complex_double* work, lapack_int lwork,
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 );

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 );

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,
lapack_complex_float* z, lapack_int ldz,
lapack_complex_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_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,
lapack_complex_double* z, lapack_int ldz,
lapack_complex_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_int* iwork, lapack_int liwork );

lapack_int LAPACKE_sgedmdq_work( 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,
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, float* work,
lapack_int lwork, lapack_int* iwork,
lapack_int liwork );

lapack_int LAPACKE_dgedmdq_work( 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,
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, double* work,
lapack_int lwork, lapack_int* iwork,
lapack_int liwork );

lapack_int LAPACKE_cgedmdq_work( int matrix_layout, char jobs, char jobz,
char jobr, char jobq, char jobt, char jobf,
lapack_int whtsvd, 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_complex_float* z, lapack_int ldz,
lapack_complex_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_int LAPACKE_zgedmdq_work( int matrix_layout, char jobs, char jobz,
char jobr, char jobq, char jobt, char jobf,
lapack_int whtsvd, 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_complex_double* z, lapack_int ldz,
lapack_complex_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_int LAPACKE_sgesv_work( int matrix_layout, lapack_int n, lapack_int nrhs,
float* a, lapack_int lda, lapack_int* ipiv,
float* b, lapack_int ldb );
Expand Down Expand Up @@ -5833,7 +5947,7 @@ lapack_int LAPACKE_zgesvdq_work( int matrix_layout, char joba, char jobp,
lapack_int* iwork, lapack_int liwork,
lapack_complex_double* cwork, lapack_int lcwork,
double* rwork, lapack_int lrwork);

lapack_int LAPACKE_sgesvj_work( int matrix_layout, char joba, char jobu,
char jobv, lapack_int m, lapack_int n, float* a,
lapack_int lda, float* sva, lapack_int mv,
Expand Down Expand Up @@ -12550,7 +12664,7 @@ lapack_int LAPACKE_zhegv_2stage_work( int matrix_layout, lapack_int itype, char
//LAPACK 3.8.0
lapack_int LAPACKE_ssysv_aa_2stage( int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float* a, lapack_int lda,
float* tb, lapack_int ltb, lapack_int* ipiv,
float* tb, lapack_int ltb, lapack_int* ipiv,
lapack_int* ipiv2, float* b, lapack_int ldb );
lapack_int LAPACKE_ssysv_aa_2stage_work( int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float* a, lapack_int lda,
Expand All @@ -12560,7 +12674,7 @@ lapack_int LAPACKE_ssysv_aa_2stage_work( int matrix_layout, char uplo, lapack_in
lapack_int LAPACKE_dsysv_aa_2stage( int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double* a, lapack_int lda,
double* tb, lapack_int ltb,
lapack_int* ipiv, lapack_int* ipiv2,
lapack_int* ipiv, lapack_int* ipiv2,
double* b, lapack_int ldb );
lapack_int LAPACKE_dsysv_aa_2stage_work( int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double* a, lapack_int lda,
Expand Down Expand Up @@ -12612,10 +12726,10 @@ lapack_int LAPACKE_zhesv_aa_2stage_work( int matrix_layout, char uplo, lapack_in
lapack_int ltb, lapack_int* ipiv, lapack_int* ipiv2,
lapack_complex_double* b, lapack_int ldb,
lapack_complex_double* work, lapack_int lwork );

lapack_int LAPACKE_ssytrf_aa_2stage( int matrix_layout, char uplo, lapack_int n,
float* a, lapack_int lda,
float* tb, lapack_int ltb, lapack_int* ipiv,
float* tb, lapack_int ltb, lapack_int* ipiv,
lapack_int* ipiv2 );
lapack_int LAPACKE_ssytrf_aa_2stage_work( int matrix_layout, char uplo, lapack_int n,
float* a, lapack_int lda,
Expand Down Expand Up @@ -12671,7 +12785,7 @@ lapack_int LAPACKE_zhetrf_aa_2stage_work( int matrix_layout, char uplo, lapack_i

lapack_int LAPACKE_ssytrs_aa_2stage( int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float* a, lapack_int lda,
float* tb, lapack_int ltb, lapack_int* ipiv,
float* tb, lapack_int ltb, lapack_int* ipiv,
lapack_int* ipiv2, float* b, lapack_int ldb );
lapack_int LAPACKE_ssytrs_aa_2stage_work( int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float* a, lapack_int lda,
Expand All @@ -12680,7 +12794,7 @@ lapack_int LAPACKE_ssytrs_aa_2stage_work( int matrix_layout, char uplo, lapack_i
lapack_int LAPACKE_dsytrs_aa_2stage( int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double* a, lapack_int lda,
double* tb, lapack_int ltb,
lapack_int* ipiv, lapack_int* ipiv2,
lapack_int* ipiv, lapack_int* ipiv2,
double* b, lapack_int ldb );
lapack_int LAPACKE_dsytrs_aa_2stage_work( int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double* a, lapack_int lda,
Expand Down Expand Up @@ -12727,7 +12841,6 @@ lapack_int LAPACKE_zhetrs_aa_2stage_work( int matrix_layout, char uplo, lapack_i
lapack_int lda, lapack_complex_double* tb,
lapack_int ltb, lapack_int* ipiv, lapack_int* ipiv2,
lapack_complex_double* b, lapack_int ldb );

//LAPACK 3.10.0
lapack_int LAPACKE_sorhr_col( int matrix_layout, lapack_int m, lapack_int n,
lapack_int nb, float* a,
Expand Down
Loading