diff --git a/lapack-netlib/LAPACKE/src/lapacke_cgedmd.c b/lapack-netlib/LAPACKE/src/lapacke_cgedmd.c index a269b0daf..041efbb6d 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_cgedmd.c +++ b/lapack-netlib/LAPACKE/src/lapacke_cgedmd.c @@ -32,21 +32,25 @@ #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 zwork_query; lapack_complex_float work_query; lapack_int iwork_query; if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { @@ -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 ); diff --git a/lapack-netlib/LAPACKE/src/lapacke_cgedmd_work.c b/lapack-netlib/LAPACKE/src/lapacke_cgedmd_work.c index 534934efb..08d8b91f5 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_cgedmd_work.c +++ b/lapack-netlib/LAPACKE/src/lapacke_cgedmd_work.c @@ -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,9 +101,10 @@ 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, - 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 ); return (info < 0) ? (info - 1) : info; } /* Allocate memory for temporary array(s) */ @@ -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; } diff --git a/lapack-netlib/LAPACKE/src/lapacke_cgedmdq.c b/lapack-netlib/LAPACKE/src/lapacke_cgedmdq.c index 60e83729b..fc698e4ec 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_cgedmdq.c +++ b/lapack-netlib/LAPACKE/src/lapacke_cgedmdq.c @@ -37,19 +37,21 @@ 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_int lzwork = -1; + lapack_complex_float* zwork = NULL; lapack_complex_float* work = NULL; lapack_int* iwork = NULL; + lapack_complex_float zwork_query; lapack_complex_float work_query; lapack_int iwork_query; if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { @@ -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 */ + zwork = (lapack_complex_float*)LAPACKE_malloc( sizeof(lapack_complex_float) * lzwork ); + if( zwork == NULL ) { + info = LAPACK_WORK_MEMORY_ERROR; + goto exit_level_0; + } work = (lapack_complex_float*)LAPACKE_malloc( sizeof(lapack_complex_float) * lwork ); if( work == NULL ) { info = LAPACK_WORK_MEMORY_ERROR; - goto exit_level_0; + 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 ); diff --git a/lapack-netlib/LAPACKE/src/lapacke_cgedmdq_work.c b/lapack-netlib/LAPACKE/src/lapacke_cgedmdq_work.c index 5bdbd3f56..ce3f87c41 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_cgedmdq_work.c +++ b/lapack-netlib/LAPACKE/src/lapacke_cgedmdq_work.c @@ -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, lapack_complex_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; } diff --git a/lapack-netlib/LAPACKE/src/lapacke_dgedmd.c b/lapack-netlib/LAPACKE/src/lapacke_dgedmd.c index 246d7f649..6802378da 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_dgedmd.c +++ b/lapack-netlib/LAPACKE/src/lapacke_dgedmd.c @@ -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: diff --git a/lapack-netlib/LAPACKE/src/lapacke_dgedmd_work.c b/lapack-netlib/LAPACKE/src/lapacke_dgedmd_work.c index 4d1169de9..987709a1b 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_dgedmd_work.c +++ b/lapack-netlib/LAPACKE/src/lapacke_dgedmd_work.c @@ -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; } diff --git a/lapack-netlib/LAPACKE/src/lapacke_dgedmdq.c b/lapack-netlib/LAPACKE/src/lapacke_dgedmdq.c index f3d621ba9..5c3c39308 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_dgedmdq.c +++ b/lapack-netlib/LAPACKE/src/lapacke_dgedmdq.c @@ -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) diff --git a/lapack-netlib/LAPACKE/src/lapacke_dgedmdq_work.c b/lapack-netlib/LAPACKE/src/lapacke_dgedmdq_work.c index 51b2a66d8..1638a5d2b 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_dgedmdq_work.c +++ b/lapack-netlib/LAPACKE/src/lapacke_dgedmdq_work.c @@ -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; diff --git a/lapack-netlib/LAPACKE/src/lapacke_sgedmd.c b/lapack-netlib/LAPACKE/src/lapacke_sgedmd.c index 879631b1d..6865fcf65 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_sgedmd.c +++ b/lapack-netlib/LAPACKE/src/lapacke_sgedmd.c @@ -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: diff --git a/lapack-netlib/LAPACKE/src/lapacke_sgedmd_work.c b/lapack-netlib/LAPACKE/src/lapacke_sgedmd_work.c index 762a9b271..5b24152da 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_sgedmd_work.c +++ b/lapack-netlib/LAPACKE/src/lapacke_sgedmd_work.c @@ -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; } diff --git a/lapack-netlib/LAPACKE/src/lapacke_sgedmdq.c b/lapack-netlib/LAPACKE/src/lapacke_sgedmdq.c index e202d7fbd..e65c2094f 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_sgedmdq.c +++ b/lapack-netlib/LAPACKE/src/lapacke_sgedmdq.c @@ -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) diff --git a/lapack-netlib/LAPACKE/src/lapacke_sgedmdq_work.c b/lapack-netlib/LAPACKE/src/lapacke_sgedmdq_work.c index 9039898d2..38b6ff683 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_sgedmdq_work.c +++ b/lapack-netlib/LAPACKE/src/lapacke_sgedmdq_work.c @@ -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; diff --git a/lapack-netlib/LAPACKE/src/lapacke_zgedmd.c b/lapack-netlib/LAPACKE/src/lapacke_zgedmd.c index f3f421c54..b3383eb92 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_zgedmd.c +++ b/lapack-netlib/LAPACKE/src/lapacke_zgedmd.c @@ -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; lapack_int iwork_query; + lapack_int 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 = 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 ); diff --git a/lapack-netlib/LAPACKE/src/lapacke_zgedmd_work.c b/lapack-netlib/LAPACKE/src/lapacke_zgedmd_work.c index 2554411ec..ebacfaa94 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_zgedmd_work.c +++ b/lapack-netlib/LAPACKE/src/lapacke_zgedmd_work.c @@ -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; } diff --git a/lapack-netlib/LAPACKE/src/lapacke_zgedmdq.c b/lapack-netlib/LAPACKE/src/lapacke_zgedmdq.c index 3648ffdf2..c0f789dc8 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_zgedmdq.c +++ b/lapack-netlib/LAPACKE/src/lapacke_zgedmdq.c @@ -37,20 +37,22 @@ 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_int lzwork = -1; + lapack_complex_double* zwork = NULL; lapack_complex_double* work = NULL; lapack_int* iwork = NULL; lapack_complex_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 ); @@ -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 */ + zwork = (lapack_complex_double*)LAPACKE_malloc( sizeof(lapack_complex_double) * lzwork ); + if( zwork == NULL ) { + info = LAPACK_WORK_MEMORY_ERROR; + goto exit_level_0; + } work = (lapack_complex_double*)LAPACKE_malloc( sizeof(lapack_complex_double) * lwork ); if( work == NULL ) { info = LAPACK_WORK_MEMORY_ERROR; - goto exit_level_0; + 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 ); diff --git a/lapack-netlib/LAPACKE/src/lapacke_zgedmdq_work.c b/lapack-netlib/LAPACKE/src/lapacke_zgedmdq_work.c index 9afceba07..db92aa6c3 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_zgedmdq_work.c +++ b/lapack-netlib/LAPACKE/src/lapacke_zgedmdq_work.c @@ -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, lapack_complex_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; }