Skip to content

Commit 49d9683

Browse files
authored
Merge pull request #304 from julielangou/master
LAPACKE routines for xgesvdq
2 parents c6cfc9a + bed9d0a commit 49d9683

11 files changed

+1093
-0
lines changed

LAPACKE/include/lapacke.h

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -939,6 +939,25 @@ lapack_int LAPACKE_zgesvdx( int matrix_layout, char jobu, char jobvt, char range
939939
lapack_complex_double* vt, lapack_int ldvt,
940940
lapack_int* superb );
941941

942+
lapack_int LAPACKE_sgesvdq( int matrix_layout, char joba, char jobp, char jobr, char jobu, char jobv,
943+
lapack_int m, lapack_int n, float* a, lapack_int lda,
944+
float* s, float* u, lapack_int ldu, float* v,
945+
lapack_int ldv, lapack_int* numrank );
946+
lapack_int LAPACKE_dgesvdq( int matrix_layout, char joba, char jobp, char jobr, char jobu, char jobv,
947+
lapack_int m, lapack_int n, double* a,
948+
lapack_int lda, double* s, double* u, lapack_int ldu,
949+
double* v, lapack_int ldv, lapack_int* numrank);
950+
lapack_int LAPACKE_cgesvdq( int matrix_layout, char joba, char jobp, char jobr, char jobu, char jobv,
951+
lapack_int m, lapack_int n, lapack_complex_float* a,
952+
lapack_int lda, float* s, lapack_complex_float* u,
953+
lapack_int ldu, lapack_complex_float* v,
954+
lapack_int ldv, lapack_int* numrank );
955+
lapack_int LAPACKE_zgesvdq( int matrix_layout, char joba, char jobp, char jobr, char jobu, char jobv,
956+
lapack_int m, lapack_int n, lapack_complex_double* a,
957+
lapack_int lda, double* s, lapack_complex_double* u,
958+
lapack_int ldu, lapack_complex_double* v,
959+
lapack_int ldv, lapack_int* numrank );
960+
942961
lapack_int LAPACKE_sgesvj( int matrix_layout, char joba, char jobu, char jobv,
943962
lapack_int m, lapack_int n, float* a, lapack_int lda,
944963
float* sva, lapack_int mv, float* v, lapack_int ldv,
@@ -5729,6 +5748,45 @@ lapack_int LAPACKE_zgesvdx_work( int matrix_layout, char jobu, char jobvt, char
57295748
lapack_complex_double* work, lapack_int lwork,
57305749
double* rwork, lapack_int* iwork );
57315750

5751+
lapack_int LAPACKE_sgesvdq_work( int matrix_layout, char joba, char jobp,
5752+
char jobr, char jobu, char jobv,
5753+
lapack_int m, lapack_int n, float* a,
5754+
lapack_int lda, float* s, float* u,
5755+
lapack_int ldu, float* v, lapack_int ldv,
5756+
lapack_int* numrank,
5757+
lapack_int* iwork, lapack_int liwork,
5758+
float* work, lapack_int lwork,
5759+
float* rwork, lapack_int lrwork);
5760+
lapack_int LAPACKE_dgesvdq_work( int matrix_layout, char joba, char jobp,
5761+
char jobr, char jobu, char jobv,
5762+
lapack_int m, lapack_int n, double* a,
5763+
lapack_int lda, double* s, double* u,
5764+
lapack_int ldu, double* v, lapack_int ldv,
5765+
lapack_int* numrank,
5766+
lapack_int* iwork, lapack_int liwork,
5767+
double* work, lapack_int lwork,
5768+
double* rwork, lapack_int lrwork);
5769+
lapack_int LAPACKE_cgesvdq_work( int matrix_layout, char joba, char jobp,
5770+
char jobr, char jobu, char jobv,
5771+
lapack_int m, lapack_int n,
5772+
lapack_complex_float* a, lapack_int lda,
5773+
float* s, lapack_complex_float* u,
5774+
lapack_int ldu, lapack_complex_float* v,
5775+
lapack_int ldv, lapack_int* numrank,
5776+
lapack_int* iwork, lapack_int liwork,
5777+
lapack_complex_float* cwork, lapack_int lcwork,
5778+
float* rwork, lapack_int lrwork);
5779+
lapack_int LAPACKE_zgesvdq_work( int matrix_layout, char joba, char jobp,
5780+
char jobr, char jobu, char jobv,
5781+
lapack_int m, lapack_int n,
5782+
lapack_complex_double* a, lapack_int lda,
5783+
double* s, lapack_complex_double* u,
5784+
lapack_int ldu, lapack_complex_double* v,
5785+
lapack_int ldv, lapack_int* numrank,
5786+
lapack_int* iwork, lapack_int liwork,
5787+
lapack_complex_double* cwork, lapack_int lcwork,
5788+
double* rwork, lapack_int lrwork);
5789+
57325790
lapack_int LAPACKE_sgesvj_work( int matrix_layout, char joba, char jobu,
57335791
char jobv, lapack_int m, lapack_int n, float* a,
57345792
lapack_int lda, float* sva, lapack_int mv,

LAPACKE/src/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ lapacke_cgesvd.c
9595
lapacke_cgesvd_work.c
9696
lapacke_cgesvdx.c
9797
lapacke_cgesvdx_work.c
98+
lapacke_cgesvdq.c
99+
lapacke_cgesvdq_work.c
98100
lapacke_cgesvj.c
99101
lapacke_cgesvj_work.c
100102
lapacke_cgesvx.c
@@ -703,6 +705,8 @@ lapacke_dgesvd.c
703705
lapacke_dgesvd_work.c
704706
lapacke_dgesvdx.c
705707
lapacke_dgesvdx_work.c
708+
lapacke_dgesvdq.c
709+
lapacke_dgesvdq_work.c
706710
lapacke_dgesvj.c
707711
lapacke_dgesvj_work.c
708712
lapacke_dgesvx.c
@@ -1266,6 +1270,8 @@ lapacke_sgesvd.c
12661270
lapacke_sgesvd_work.c
12671271
lapacke_sgesvdx.c
12681272
lapacke_sgesvdx_work.c
1273+
lapacke_sgesvdq.c
1274+
lapacke_sgesvdq_work.c
12691275
lapacke_sgesvj.c
12701276
lapacke_sgesvj_work.c
12711277
lapacke_sgesvx.c
@@ -1822,6 +1828,8 @@ lapacke_zgesvd.c
18221828
lapacke_zgesvd_work.c
18231829
lapacke_zgesvdx.c
18241830
lapacke_zgesvdx_work.c
1831+
lapacke_zgesvdq.c
1832+
lapacke_zgesvdq_work.c
18251833
lapacke_zgesvj.c
18261834
lapacke_zgesvj_work.c
18271835
lapacke_zgesvx.c

LAPACKE/src/Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ lapacke_cgesvd.o \
134134
lapacke_cgesvd_work.o \
135135
lapacke_cgesvdx.o \
136136
lapacke_cgesvdx_work.o \
137+
lapacke_cgesvdq.o \
138+
lapacke_cgesvdq_work.o \
137139
lapacke_cgesvj.o \
138140
lapacke_cgesvj_work.o \
139141
lapacke_cgesvx.o \
@@ -742,6 +744,8 @@ lapacke_dgesvd.o \
742744
lapacke_dgesvd_work.o \
743745
lapacke_dgesvdx.o \
744746
lapacke_dgesvdx_work.o \
747+
lapacke_dgesvdq.o \
748+
lapacke_dgesvdq_work.o \
745749
lapacke_dgesvj.o \
746750
lapacke_dgesvj_work.o \
747751
lapacke_dgesvx.o \
@@ -1307,6 +1311,8 @@ lapacke_sgesvd.o \
13071311
lapacke_sgesvd_work.o \
13081312
lapacke_sgesvdx.o \
13091313
lapacke_sgesvdx_work.o \
1314+
lapacke_sgesvdq.o \
1315+
lapacke_sgesvdq_work.o \
13101316
lapacke_sgesvj.o \
13111317
lapacke_sgesvj_work.o \
13121318
lapacke_sgesvx.o \
@@ -1863,6 +1869,8 @@ lapacke_zgesvd.o \
18631869
lapacke_zgesvd_work.o \
18641870
lapacke_zgesvdx.o \
18651871
lapacke_zgesvdx_work.o \
1872+
lapacke_zgesvdq.o \
1873+
lapacke_zgesvdq_work.o \
18661874
lapacke_zgesvj.o \
18671875
lapacke_zgesvj_work.o \
18681876
lapacke_zgesvx.o \

LAPACKE/src/lapacke_cgesvdq.c

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
/*****************************************************************************
2+
Copyright (c) 2014, Intel Corp.
3+
All rights reserved.
4+
5+
Redistribution and use in source and binary forms, with or without
6+
modification, are permitted provided that the following conditions are met:
7+
8+
* Redistributions of source code must retain the above copyright notice,
9+
this list of conditions and the following disclaimer.
10+
* Redistributions in binary form must reproduce the above copyright
11+
notice, this list of conditions and the following disclaimer in the
12+
documentation and/or other materials provided with the distribution.
13+
* Neither the name of Intel Corporation nor the names of its contributors
14+
may be used to endorse or promote products derived from this software
15+
without specific prior written permission.
16+
17+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27+
THE POSSIBILITY OF SUCH DAMAGE.
28+
*****************************************************************************
29+
* Contents: Native high-level C interface to LAPACK function cgesvdq
30+
* Author: Intel Corporation
31+
* Generated November 2018
32+
*****************************************************************************/
33+
34+
#include "lapacke_utils.h"
35+
36+
lapack_int LAPACKE_cgesvdq( int matrix_layout, char joba, char jobp,
37+
char jobr, char jobu, char jobv,
38+
lapack_int m, lapack_int n, lapack_complex_float* a,
39+
lapack_int lda, float* s, lapack_complex_float* u, lapack_int ldu,
40+
lapack_complex_float* v, lapack_int ldv, lapack_int* numrank)
41+
{
42+
lapack_int info = 0;
43+
lapack_int liwork = -1;
44+
lapack_int* iwork = NULL;
45+
lapack_int iwork_query;
46+
lapack_int lcwork = -1;
47+
lapack_complex_float* cwork = NULL;
48+
lapack_complex_float cwork_query;
49+
lapack_int lrwork = -1;
50+
double* rwork = NULL;
51+
double rwork_query;
52+
lapack_int i;
53+
if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) {
54+
LAPACKE_xerbla( "LAPACKE_cgesvdq", -1 );
55+
return -1;
56+
}
57+
#ifndef LAPACK_DISABLE_NAN_CHECK
58+
if( LAPACKE_get_nancheck() ) {
59+
/* Optionally check input matrices for NaNs */
60+
if( LAPACKE_cge_nancheck( matrix_layout, m, n, a, lda ) ) {
61+
return -6;
62+
}
63+
}
64+
#endif
65+
/* Query optimal working array(s) size */
66+
info = LAPACKE_cgesvdq_work( matrix_layout, joba, jobp, jobr, jobu, jobv,
67+
m, n, a, lda, s, u, ldu, v, ldv, numrank,
68+
&iwork_query, liwork, &cwork_query, lcwork,
69+
&rwork_query, lrwork );
70+
if( info != 0 ) {
71+
goto exit_level_0;
72+
}
73+
liwork = (lapack_int)iwork_query;
74+
lcwork = (lapack_int)cwork_query;
75+
lrwork = (lapack_int)rwork_query;
76+
/* Allocate memory for work arrays */
77+
iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork );
78+
if( iwork == NULL ) {
79+
info = LAPACK_WORK_MEMORY_ERROR;
80+
goto exit_level_0;
81+
}
82+
cwork = (lapack_complex_float*)LAPACKE_malloc( sizeof(lapack_complex_float) * lcwork );
83+
if( cwork == NULL ) {
84+
info = LAPACK_WORK_MEMORY_ERROR;
85+
goto exit_level_0;
86+
}
87+
rwork = (double*)LAPACKE_malloc( sizeof(double) * lrwork );
88+
if( rwork == NULL ) {
89+
info = LAPACK_WORK_MEMORY_ERROR;
90+
goto exit_level_0;
91+
}
92+
/* Call middle-level interface */
93+
info = LAPACKE_cgesvdq_work( matrix_layout, joba, jobp, jobr, jobu, jobv,
94+
m, n, a, lda, s, u, ldu, v, ldv, numrank,
95+
iwork, liwork, cwork, lcwork, rwork, lrwork );
96+
97+
/* Release memory and exit */
98+
LAPACKE_free( iwork );
99+
LAPACKE_free( cwork );
100+
LAPACKE_free( rwork );
101+
exit_level_0:
102+
if( info == LAPACK_WORK_MEMORY_ERROR ) {
103+
LAPACKE_xerbla( "LAPACKE_cgesvdq", info );
104+
}
105+
return info;
106+
}

0 commit comments

Comments
 (0)