Adding *gesvj and *gejsv to LAPACKE
authorjulie <julielangou@users.noreply.github.com>
Fri, 13 Nov 2015 07:41:33 +0000 (07:41 +0000)
committerjulie <julielangou@users.noreply.github.com>
Fri, 13 Nov 2015 07:41:33 +0000 (07:41 +0000)
LAPACKE/include/lapacke.h
LAPACKE/src/CMakeLists.txt
LAPACKE/src/Makefile
LAPACKE/src/lapacke_cgejsv.c [new file with mode: 0644]
LAPACKE/src/lapacke_cgejsv_work.c [new file with mode: 0644]
LAPACKE/src/lapacke_cgesvj.c [new file with mode: 0644]
LAPACKE/src/lapacke_cgesvj_work.c [new file with mode: 0644]
LAPACKE/src/lapacke_zgejsv.c [new file with mode: 0644]
LAPACKE/src/lapacke_zgejsv_work.c [new file with mode: 0644]
LAPACKE/src/lapacke_zgesvj.c [new file with mode: 0644]
LAPACKE/src/lapacke_zgesvj_work.c [new file with mode: 0644]

index 4a0665a..bdd4083 100644 (file)
@@ -670,6 +670,16 @@ lapack_int LAPACKE_dgejsv( int matrix_layout, char joba, char jobu, char jobv,
                            lapack_int n, double* a, lapack_int lda, double* sva,
                            double* u, lapack_int ldu, double* v, lapack_int ldv,
                            double* stat, lapack_int* istat );
+lapack_int LAPACKE_cgejsv( int matrix_layout, char joba, char jobu, char jobv,
+                           char jobr, char jobt, char jobp, lapack_int m,
+                           lapack_int n, lapack_complex_float* a, lapack_int lda, float* sva,
+                           lapack_complex_float* u, lapack_int ldu, lapack_complex_float* v, lapack_int ldv,
+                           float* stat, lapack_int* istat );
+lapack_int LAPACKE_zgejsv( int matrix_layout, char joba, char jobu, char jobv,
+                           char jobr, char jobt, char jobp, lapack_int m,
+                           lapack_int n, lapack_complex_double* a, lapack_int lda, double* sva,
+                           lapack_complex_double* u, lapack_int ldu, lapack_complex_double* v, lapack_int ldv,
+                           double* stat, lapack_int* istat );
 
 lapack_int LAPACKE_sgelq2( int matrix_layout, lapack_int m, lapack_int n,
                            float* a, lapack_int lda, float* tau );
@@ -984,6 +994,14 @@ lapack_int LAPACKE_dgesvj( int matrix_layout, char joba, char jobu, char jobv,
                            lapack_int m, lapack_int n, double* a,
                            lapack_int lda, double* sva, lapack_int mv,
                            double* v, lapack_int ldv, double* stat );
+lapack_int LAPACKE_cgesvj( int matrix_layout, char joba, char jobu, char jobv,
+                           lapack_int m, lapack_int n, lapack_complex_float* a,
+                           lapack_int lda, float* sva, lapack_int mv,
+                           lapack_complex_float* v, lapack_int ldv, float* stat );
+lapack_int LAPACKE_zgesvj( int matrix_layout, char joba, char jobu, char jobv,
+                           lapack_int m, lapack_int n, lapack_complex_double* a,
+                           lapack_int lda, double* sva, lapack_int mv,
+                           lapack_complex_double* v, lapack_int ldv, double* stat );
 
 lapack_int LAPACKE_sgesvx( int matrix_layout, char fact, char trans,
                            lapack_int n, lapack_int nrhs, float* a,
@@ -5265,6 +5283,22 @@ lapack_int LAPACKE_dgejsv_work( int matrix_layout, char joba, char jobu,
                                 lapack_int ldu, double* v, lapack_int ldv,
                                 double* work, lapack_int lwork,
                                 lapack_int* iwork );
+lapack_int LAPACKE_cgejsv_work( int matrix_layout, char joba, char jobu,
+                                char jobv, char jobr, char jobt, char jobp,
+                                lapack_int m, lapack_int n, lapack_complex_float* a,
+                                lapack_int lda, float* sva, lapack_complex_float* u,
+                                lapack_int ldu, lapack_complex_float* v, lapack_int ldv,
+                                lapack_complex_float* cwork, lapack_int lwork,
+                                float* work, lapack_int lrwork,
+                                lapack_int* iwork );
+lapack_int LAPACKE_zgejsv_work( int matrix_layout, char joba, char jobu,
+                                char jobv, char jobr, char jobt, char jobp,
+                                lapack_int m, lapack_int n, lapack_complex_double* a,
+                                lapack_int lda, double* sva, lapack_complex_double* u,
+                                lapack_int ldu, lapack_complex_double* v, lapack_int ldv,
+                                lapack_complex_double* cwork, lapack_int lwork,
+                                double* work, lapack_int lrwork,
+                                lapack_int* iwork );
 
 lapack_int LAPACKE_sgelq2_work( int matrix_layout, lapack_int m, lapack_int n,
                                 float* a, lapack_int lda, float* tau,
@@ -5661,6 +5695,18 @@ lapack_int LAPACKE_dgesvj_work( int matrix_layout, char joba, char jobu,
                                 double* a, lapack_int lda, double* sva,
                                 lapack_int mv, double* v, lapack_int ldv,
                                 double* work, lapack_int lwork );
+lapack_int LAPACKE_cgesvj_work( int matrix_layout, char joba, char jobu,
+                                char jobv, lapack_int m, lapack_int n, lapack_complex_float* a,
+                                lapack_int lda, float* sva, lapack_int mv,
+                                lapack_complex_float* v, lapack_int ldv,
+                                lapack_complex_float* cwork, lapack_int lwork,
+                                                               float* rwork,lapack_int lrwork );
+lapack_int LAPACKE_zgesvj_work( int matrix_layout, char joba, char jobu,
+                                char jobv, lapack_int m, lapack_int n,
+                                lapack_complex_double* a, lapack_int lda, double* sva,
+                                lapack_int mv, lapack_complex_double* v, lapack_int ldv,
+                                lapack_complex_double* cwork, lapack_int lwork,
+                                double* rwork, lapack_int lrwork );
 
 lapack_int LAPACKE_sgesvx_work( int matrix_layout, char fact, char trans,
                                 lapack_int n, lapack_int nrhs, float* a,
@@ -12034,10 +12080,14 @@ void LAPACKE_ilaver( const lapack_int* vers_major,
 #define LAPACK_dgesdd LAPACK_GLOBAL(dgesdd,DGESDD)
 #define LAPACK_cgesdd LAPACK_GLOBAL(cgesdd,CGESDD)
 #define LAPACK_zgesdd LAPACK_GLOBAL(zgesdd,ZGESDD)
-#define LAPACK_dgejsv LAPACK_GLOBAL(dgejsv,DGEJSV)
 #define LAPACK_sgejsv LAPACK_GLOBAL(sgejsv,SGEJSV)
-#define LAPACK_dgesvj LAPACK_GLOBAL(dgesvj,DGESVJ)
+#define LAPACK_dgejsv LAPACK_GLOBAL(dgejsv,DGEJSV)
+#define LAPACK_cgejsv LAPACK_GLOBAL(cgejsv,CGEJSV)
+#define LAPACK_zgejsv LAPACK_GLOBAL(zgejsv,ZGEJSV)
 #define LAPACK_sgesvj LAPACK_GLOBAL(sgesvj,SGESVJ)
+#define LAPACK_dgesvj LAPACK_GLOBAL(dgesvj,DGESVJ)
+#define LAPACK_cgesvj LAPACK_GLOBAL(cgesvj,CGESVJ)
+#define LAPACK_zgesvj LAPACK_GLOBAL(zgesvj,ZGESVJ)
 #define LAPACK_sggsvd LAPACK_GLOBAL(sggsvd,SGGSVD)
 #define LAPACK_dggsvd LAPACK_GLOBAL(dggsvd,DGGSVD)
 #define LAPACK_cggsvd LAPACK_GLOBAL(cggsvd,CGGSVD)
@@ -15928,6 +15978,18 @@ void LAPACK_sgejsv( char* joba, char* jobu, char* jobv, char* jobr, char* jobt,
                     lapack_int* lda, float* sva, float* u, lapack_int* ldu,
                     float* v, lapack_int* ldv, float* work, lapack_int* lwork,
                     lapack_int* iwork, lapack_int *info );
+void LAPACK_cgejsv( char* joba, char* jobu, char* jobv, char* jobr, char* jobt,
+                    char* jobp, lapack_int* m, lapack_int* n, lapack_complex_float* a,
+                    lapack_int* lda, float* sva, lapack_complex_float* u, lapack_int* ldu,
+                    lapack_complex_float* v, lapack_int* ldv, lapack_complex_float* cwork, 
+                    lapack_int* lwork, float* work, lapack_int* lrwork,
+                    lapack_int* iwork, lapack_int *info );
+void LAPACK_zgejsv( char* joba, char* jobu, char* jobv, char* jobr, char* jobt,
+                    char* jobp, lapack_int* m, lapack_int* n, lapack_complex_double* a,
+                    lapack_int* lda, double* sva, lapack_complex_double* u, lapack_int* ldu,
+                    lapack_complex_double* v, lapack_int* ldv, lapack_complex_double* cwork, 
+                    lapack_int* lwork, double* work, lapack_int* lrwork,
+                    lapack_int* iwork, lapack_int *info );
 void LAPACK_dgesvj( char* joba, char* jobu, char* jobv, lapack_int* m,
                     lapack_int* n, double* a, lapack_int* lda, double* sva,
                     lapack_int* mv, double* v, lapack_int* ldv, double* work,
@@ -15936,6 +15998,16 @@ void LAPACK_sgesvj( 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, float* work,
                     lapack_int* lwork, lapack_int *info );
+void LAPACK_cgesvj( char* joba, char* jobu, char* jobv, lapack_int* m,
+                    lapack_int* n, lapack_complex_float* a, lapack_int* lda, float* sva,
+                    lapack_int* mv, lapack_complex_float* v, lapack_int* ldv, 
+                    lapack_complex_float* cwork, lapack_int* lwork, float* rwork, 
+                    lapack_int* lrwork, lapack_int *info );
+void LAPACK_zgesvj( char* joba, char* jobu, char* jobv, lapack_int* m,
+                    lapack_int* n, lapack_complex_double* a, lapack_int* lda, double* sva,
+                    lapack_int* mv, lapack_complex_double* v, lapack_int* ldv, 
+                    lapack_complex_double* cwork, lapack_int* lwork, double* rwork,
+                    lapack_int* lrwork, lapack_int *info );
 void LAPACK_sggsvd( char* jobu, char* jobv, char* jobq, 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,
index d0b8068..482fe0c 100644 (file)
@@ -45,6 +45,8 @@ lapacke_cgeevx.c
 lapacke_cgeevx_work.c
 lapacke_cgehrd.c
 lapacke_cgehrd_work.c
+lapacke_cgejsv.c
+lapacke_cgejsv_work.c
 lapacke_cgelq2.c
 lapacke_cgelq2_work.c
 lapacke_cgelqf.c
@@ -85,6 +87,8 @@ lapacke_cgesv.c
 lapacke_cgesv_work.c
 lapacke_cgesvd.c
 lapacke_cgesvd_work.c
+lapacke_cgesvj.c
+lapacke_cgesvj_work.c
 lapacke_cgesvx.c
 lapacke_cgesvx_work.c
 lapacke_cgetf2.c
@@ -1569,6 +1573,8 @@ lapacke_zgeevx.c
 lapacke_zgeevx_work.c
 lapacke_zgehrd.c
 lapacke_zgehrd_work.c
+lapacke_zgejsv.c
+lapacke_zgejsv_work.c
 lapacke_zgelq2.c
 lapacke_zgelq2_work.c
 lapacke_zgelqf.c
@@ -1609,6 +1615,8 @@ lapacke_zgesv.c
 lapacke_zgesv_work.c
 lapacke_zgesvd.c
 lapacke_zgesvd_work.c
+lapacke_zgesvj.c
+lapacke_zgesvj_work.c
 lapacke_zgesvx.c
 lapacke_zgesvx_work.c
 lapacke_zgetf2.c
index 2881a35..1a541b8 100644 (file)
@@ -81,6 +81,8 @@ lapacke_cgehrd.o \
 lapacke_cgehrd_work.o \
 lapacke_cgelq2.o \
 lapacke_cgelq2_work.o \
+lapacke_cgejsv.o \
+lapacke_cgejsv_work.o \
 lapacke_cgelqf.o \
 lapacke_cgelqf_work.o \
 lapacke_cgels.o \
@@ -119,6 +121,8 @@ lapacke_cgesv.o \
 lapacke_cgesv_work.o \
 lapacke_cgesvd.o \
 lapacke_cgesvd_work.o \
+lapacke_cgesvj.o \
+lapacke_cgesvj_work.o \
 lapacke_cgesvx.o \
 lapacke_cgesvx_work.o \
 lapacke_cgetf2.o \
@@ -1603,6 +1607,8 @@ lapacke_zgeevx.o \
 lapacke_zgeevx_work.o \
 lapacke_zgehrd.o \
 lapacke_zgehrd_work.o \
+lapacke_zgejsv.o \
+lapacke_zgejsv_work.o \
 lapacke_zgelq2.o \
 lapacke_zgelq2_work.o \
 lapacke_zgelqf.o \
@@ -1643,6 +1649,8 @@ lapacke_zgesv.o \
 lapacke_zgesv_work.o \
 lapacke_zgesvd.o \
 lapacke_zgesvd_work.o \
+lapacke_zgesvj.o \
+lapacke_zgesvj_work.o \
 lapacke_zgesvx.o \
 lapacke_zgesvx_work.o \
 lapacke_zgetf2.o \
diff --git a/LAPACKE/src/lapacke_cgejsv.c b/LAPACKE/src/lapacke_cgejsv.c
new file mode 100644 (file)
index 0000000..cf7ebd7
--- /dev/null
@@ -0,0 +1,190 @@
+/*****************************************************************************
+  Copyright (c) 2014, Intel Corp.
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of Intel Corporation nor the names of its contributors
+      may be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+  THE POSSIBILITY OF SUCH DAMAGE.
+*****************************************************************************
+* Contents: Native high-level C interface to LAPACK function cgejsv
+* Author: Intel Corporation
+* Generated November, 2011
+*****************************************************************************/
+
+#include "lapacke_utils.h"
+
+lapack_int LAPACKE_cgejsv( int matrix_layout, char joba, char jobu, char jobv,
+                           char jobr, char jobt, char jobp, lapack_int m,
+                           lapack_int n, lapack_complex_float* a, lapack_int lda, float* sva,
+                           lapack_complex_float* u, lapack_int ldu, lapack_complex_float* v, lapack_int ldv,
+                           float* stat, lapack_int* istat )
+{
+    lapack_int info = 0;
+    lapack_int lwork = (
+                       // 1.1     
+       (            LAPACKE_lsame( jobu, 'n' ) &&  LAPACKE_lsame( jobv, 'n' ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) )) ? 2*n+1 :
+                       
+                //1.2
+     (   (        LAPACKE_lsame( jobu, 'n' ) &&  LAPACKE_lsame( jobv, 'n' ) &&
+              !( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) )) ? n*n+3*n :
+
+                //2.1
+    (  (          ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) )  &&
+              !( LAPACKE_lsame( jobu, 'u' ))||  LAPACKE_lsame( jobu, 'f' ) ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? 3*n :
+    
+    
+                //2.2
+    (  (          ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) )  &&
+              !( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' ) ) &&
+              !( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? 3*n :
+        
+               //3.1              
+     (   (      ( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' )) &&
+              !( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' )) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))?  3*n :
+                       
+               //3.2             
+     (   (      ( LAPACKE_lsame( jobu, 'u' ) || LAPACKE_lsame( jobu, 'f' )) &&
+              !(LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' )) &&
+              !(LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))?  3*n  :
+           
+              //4.1
+     (  (       ( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' ) ) &&
+               ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? 5*n+2*n*n :
+               
+              //4.2
+     (  (       ( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' ) ) &&
+               ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? 4*n*n: 
+                       1) ) ) ) ) ) );  
+    lapack_int lrwork = (
+                       // 1.1     
+       (            LAPACKE_lsame( jobu, 'n' ) &&  LAPACKE_lsame( jobv, 'n' ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) )) ? MAX(7,n+2*m) :
+                       
+                //1.2
+     (   (        LAPACKE_lsame( jobu, 'n' ) &&  LAPACKE_lsame( jobv, 'n' ) &&
+              !( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) )) ? MAX(7,2*n) :
+
+                //2.1
+    (  (          ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) )  &&
+              !( LAPACKE_lsame( jobu, 'u' ))||  LAPACKE_lsame( jobu, 'f' ) ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? MAX( 7, n+ 2*m ) :
+    
+    
+                //2.2
+    (  (          ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) )  &&
+              !( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' ) ) &&
+              !( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? MAX(7,2*n) :
+        
+               //3.1              
+     (   (      ( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' )) &&
+              !( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' )) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))?  MAX( 7, n+ 2*m ) :
+                       
+               //3.2             
+     (   (      ( LAPACKE_lsame( jobu, 'u' ) || LAPACKE_lsame( jobu, 'f' )) &&
+              !(LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' )) &&
+              !(LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))?  MAX(7,2*n)  :
+           
+              //4.1
+     (  (       ( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' ) ) &&
+               ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? MAX( 7, n+ 2*m ) :
+               
+              //4.2
+     (  (       ( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' ) ) &&
+               ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? MAX(7,2*n) :
+                       1) ) ) ) ) ) );  
+    lapack_int* iwork = NULL;
+    float* rwork = NULL;
+    lapack_complex_float* cwork = NULL;
+    lapack_int i;
+    lapack_int nu, nv;
+    if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) {
+        LAPACKE_xerbla( "LAPACKE_cgejsv", -1 );
+        return -1;
+    }
+#ifndef LAPACK_DISABLE_NAN_CHECK
+    /* Optionally check input matrices for NaNs */
+    nu = LAPACKE_lsame( jobu, 'n' ) ? 1 : m;
+    nv = LAPACKE_lsame( jobv, 'n' ) ? 1 : n;
+    if( LAPACKE_cge_nancheck( matrix_layout, m, n, a, lda ) ) {
+        return -10;
+    }
+    if( LAPACKE_lsame( jobu, 'f' ) || LAPACKE_lsame( jobu, 'u' ) ||
+        LAPACKE_lsame( jobu, 'w' ) ) {
+        if( LAPACKE_cge_nancheck( matrix_layout, nu, n, u, ldu ) ) {
+            return -13;
+        }
+    }
+    if( LAPACKE_lsame( jobv, 'j' ) || LAPACKE_lsame( jobv, 'v' ) ||
+        LAPACKE_lsame( jobv, 'w' ) ) {
+        if( LAPACKE_cge_nancheck( matrix_layout, nv, n, v, ldv ) ) {
+            return -15;
+        }
+    }
+#endif
+    /* Allocate memory for working array(s) */
+    iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * MAX(1,m+3*n) );
+    if( iwork == NULL ) {
+        info = LAPACK_WORK_MEMORY_ERROR;
+        goto exit_level_0;
+    }
+    cwork = (lapack_complex_float*)LAPACKE_malloc( sizeof(lapack_complex_float) * lwork );
+    if( cwork == NULL ) {
+        info = LAPACK_WORK_MEMORY_ERROR;
+        goto exit_level_1;
+    }
+    rwork = (float*)LAPACKE_malloc( sizeof(float) * lrwork );
+    if( rwork == NULL ) {
+        info = LAPACK_WORK_MEMORY_ERROR;
+        goto exit_level_2;
+    }
+    /* Call middle-level interface */
+    info = LAPACKE_cgejsv_work( matrix_layout, joba, jobu, jobv, jobr, jobt,
+                                jobp, m, n, a, lda, sva, u, ldu, v, ldv, cwork,
+                                lwork, rwork, lrwork, iwork );
+    /* Backup significant data from working array(s) */
+    for( i=0; i<7; i++ ) {
+        stat[i] = rwork[i];
+    }
+    for( i=0; i<3; i++ ) {
+        istat[i] = iwork[i];
+    }
+    /* Release memory and exit */
+    LAPACKE_free( cwork );
+exit_level_2:
+    LAPACKE_free( rwork );
+exit_level_1:
+    LAPACKE_free( iwork );
+exit_level_0:
+    if( info == LAPACK_WORK_MEMORY_ERROR ) {
+        LAPACKE_xerbla( "LAPACKE_cgejsv", info );
+    }
+    return info;
+}
diff --git a/LAPACKE/src/lapacke_cgejsv_work.c b/LAPACKE/src/lapacke_cgejsv_work.c
new file mode 100644 (file)
index 0000000..72c3ddc
--- /dev/null
@@ -0,0 +1,151 @@
+/*****************************************************************************
+  Copyright (c) 2014, Intel Corp.
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of Intel Corporation nor the names of its contributors
+      may be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+  THE POSSIBILITY OF SUCH DAMAGE.
+*****************************************************************************
+* Contents: Native middle-level C interface to LAPACK function cgejsv
+* Author: Intel Corporation
+* Generated November, 2011
+*****************************************************************************/
+
+#include "lapacke_utils.h"
+
+lapack_int LAPACKE_cgejsv_work( int matrix_layout, char joba, char jobu,
+                                char jobv, char jobr, char jobt, char jobp,
+                                lapack_int m, lapack_int n, lapack_complex_float* a,
+                                lapack_int lda, float* sva, lapack_complex_float* u,
+                                lapack_int ldu, lapack_complex_float* v, lapack_int ldv,
+                                lapack_complex_float* cwork, lapack_int lwork,
+                                float* rwork, lapack_int lrwork,
+                                lapack_int* iwork )
+{
+    lapack_int info = 0;
+    if( matrix_layout == LAPACK_COL_MAJOR ) {
+        /* Call LAPACK function and adjust info */
+        LAPACK_cgejsv( &joba, &jobu, &jobv, &jobr, &jobt, &jobp, &m, &n, a,
+                       &lda, sva, u, &ldu, v, &ldv, cwork, &lwork, rwork, &lwork, 
+                       iwork, &info );
+        if( info < 0 ) {
+            info = info - 1;
+        }
+    } else if( matrix_layout == LAPACK_ROW_MAJOR ) {
+        lapack_int nu = LAPACKE_lsame( jobu, 'n' ) ? 1 : m;
+        lapack_int nv = LAPACKE_lsame( jobv, 'n' ) ? 1 : n;
+        lapack_int lda_t = MAX(1,m);
+        lapack_int ldu_t = MAX(1,nu);
+        lapack_int ldv_t = MAX(1,nv);
+        lapack_complex_float* a_t = NULL;
+        lapack_complex_float* u_t = NULL;
+        lapack_complex_float* v_t = NULL;
+        /* Check leading dimension(s) */
+        if( lda < n ) {
+            info = -11;
+            LAPACKE_xerbla( "LAPACKE_cgejsv_work", info );
+            return info;
+        }
+        if( ldu < n ) {
+            info = -14;
+            LAPACKE_xerbla( "LAPACKE_cgejsv_work", info );
+            return info;
+        }
+        if( ldv < n ) {
+            info = -16;
+            LAPACKE_xerbla( "LAPACKE_cgejsv_work", info );
+            return info;
+        }
+        /* Allocate memory for temporary array(s) */
+        a_t = (lapack_complex_float*)
+           LAPACKE_malloc( sizeof(lapack_complex_float) * lda_t * MAX(1,n) );
+        if( a_t == NULL ) {
+            info = LAPACK_TRANSPOSE_MEMORY_ERROR;
+            goto exit_level_0;
+        }
+        if( LAPACKE_lsame( jobu, 'f' ) || LAPACKE_lsame( jobu, 'u' ) ||
+            LAPACKE_lsame( jobu, 'w' ) ) {
+            u_t = (lapack_complex_float*)
+               LAPACKE_malloc( sizeof(lapack_complex_float) * ldu_t * MAX(1,n) );
+            if( u_t == NULL ) {
+                info = LAPACK_TRANSPOSE_MEMORY_ERROR;
+                goto exit_level_1;
+            }
+        }
+        if( LAPACKE_lsame( jobv, 'j' ) || LAPACKE_lsame( jobv, 'v' ) ||
+            LAPACKE_lsame( jobv, 'w' ) ) {
+            v_t = (lapack_complex_float*)
+               LAPACKE_malloc( sizeof(lapack_complex_float) * ldv_t * MAX(1,n) );
+            if( v_t == NULL ) {
+                info = LAPACK_TRANSPOSE_MEMORY_ERROR;
+                goto exit_level_2;
+            }
+        }
+        /* Transpose input matrices */
+        LAPACKE_cge_trans( matrix_layout, m, n, a, lda, a_t, lda_t );
+        if( LAPACKE_lsame( jobu, 'f' ) || LAPACKE_lsame( jobu, 'u' ) ||
+            LAPACKE_lsame( jobu, 'w' ) ) {
+            LAPACKE_cge_trans( matrix_layout, nu, n, u, ldu, u_t, ldu_t );
+        }
+        if( LAPACKE_lsame( jobv, 'j' ) || LAPACKE_lsame( jobv, 'v' ) ||
+            LAPACKE_lsame( jobv, 'w' ) ) {
+            LAPACKE_cge_trans( matrix_layout, nv, n, v, ldv, v_t, ldv_t );
+        }
+        /* Call LAPACK function and adjust info */
+        LAPACK_cgejsv( &joba, &jobu, &jobv, &jobr, &jobt, &jobp, &m, &n, a_t,
+                       &lda_t, sva, u_t, &ldu_t, v_t, &ldv_t, cwork, &lwork,
+                       rwork, &lrwork, iwork, &info );
+        if( info < 0 ) {
+            info = info - 1;
+        }
+        /* Transpose output matrices */
+        if( LAPACKE_lsame( jobu, 'f' ) || LAPACKE_lsame( jobu, 'u' ) ||
+            LAPACKE_lsame( jobu, 'w' ) ) {
+            LAPACKE_cge_trans( LAPACK_COL_MAJOR, nu, n, u_t, ldu_t, u, ldu );
+        }
+        if( LAPACKE_lsame( jobv, 'j' ) || LAPACKE_lsame( jobv, 'v' ) ||
+            LAPACKE_lsame( jobv, 'w' ) ) {
+            LAPACKE_cge_trans( LAPACK_COL_MAJOR, nv, n, v_t, ldv_t, v, ldv );
+        }
+        /* Release memory and exit */
+        if( LAPACKE_lsame( jobv, 'j' ) || LAPACKE_lsame( jobv, 'v' ) ||
+            LAPACKE_lsame( jobv, 'w' ) ) {
+            LAPACKE_free( v_t );
+        }
+exit_level_2:
+        if( LAPACKE_lsame( jobu, 'f' ) || LAPACKE_lsame( jobu, 'u' ) ||
+            LAPACKE_lsame( jobu, 'w' ) ) {
+            LAPACKE_free( u_t );
+        }
+exit_level_1:
+        LAPACKE_free( a_t );
+exit_level_0:
+        if( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) {
+            LAPACKE_xerbla( "LAPACKE_cgejsv_work", info );
+        }
+    } else {
+        info = -1;
+        LAPACKE_xerbla( "LAPACKE_cgejsv_work", info );
+    }
+    return info;
+}
diff --git a/LAPACKE/src/lapacke_cgesvj.c b/LAPACKE/src/lapacke_cgesvj.c
new file mode 100644 (file)
index 0000000..2f968af
--- /dev/null
@@ -0,0 +1,96 @@
+/*****************************************************************************
+  Copyright (c) 2014, Intel Corp.
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of Intel Corporation nor the names of its contributors
+      may be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+  THE POSSIBILITY OF SUCH DAMAGE.
+*****************************************************************************
+* Contents: Native high-level C interface to LAPACK function cgesvj
+* Author: Intel Corporation
+* Generated November, 2011
+*****************************************************************************/
+
+#include "lapacke_utils.h"
+
+lapack_int LAPACKE_cgesvj( int matrix_layout, char joba, char jobu, char jobv,
+                           lapack_int m, lapack_int n,
+                           lapack_complex_float * a, lapack_int lda,
+                           float* sva, lapack_int mv,
+                           lapack_complex_float* v, lapack_int ldv, float* stat )
+{
+    lapack_int info = 0;
+    lapack_int lwork = m+n;
+    lapack_int lrwork = MAX(6,m+n);
+    float* rwork = NULL;
+    lapack_complex_float* cwork = NULL;
+    lapack_int i;
+    lapack_int nrows_v;
+    if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) {
+        LAPACKE_xerbla( "LAPACKE_cgesvj", -1 );
+        return -1;
+    }
+#ifndef LAPACK_DISABLE_NAN_CHECK
+    /* Optionally check input matrices for NaNs */
+    nrows_v = LAPACKE_lsame( jobv, 'v' ) ? n :
+                         ( LAPACKE_lsame( jobv, 'a' ) ? mv : 1);
+    if( LAPACKE_cge_nancheck( matrix_layout, m, n, a, lda ) ) {
+        return -7;
+    }
+    if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ) {
+        if( LAPACKE_cge_nancheck( matrix_layout, nrows_v, n, v, ldv ) ) {
+            return -11;
+        }
+    }
+#endif
+    /* Allocate memory for working array(s) */
+    cwork = (lapack_complex_float*)
+        LAPACKE_malloc( sizeof(lapack_complex_float) * lwork );
+    if( cwork == NULL ) {
+        info = LAPACK_WORK_MEMORY_ERROR;
+        goto exit_level_0;
+    }
+    rwork = (float*)LAPACKE_malloc( sizeof(float) * lrwork );
+    if( rwork == NULL ) {
+        info = LAPACK_WORK_MEMORY_ERROR;
+        goto exit_level_1;
+    }
+    rwork[0] = stat[0];  /* Significant if jobu = 'c' */
+    /* Call middle-level interface */
+    info = LAPACKE_cgesvj_work( matrix_layout, joba, jobu, jobv, m, n, a, lda,
+                                sva, mv, v, ldv, cwork, lwork, rwork, lrwork );
+    /* Backup significant data from working array(s) */
+    for( i=0; i<6; i++ ) {
+        stat[i] = rwork[i];
+    }
+
+    /* Release memory and exit */
+    LAPACKE_free( rwork );
+exit_level_1:
+    LAPACKE_free( cwork );
+exit_level_0:
+    if( info == LAPACK_WORK_MEMORY_ERROR ) {
+        LAPACKE_xerbla( "LAPACKE_cgesvj", info );
+    }
+    return info;
+}
diff --git a/LAPACKE/src/lapacke_cgesvj_work.c b/LAPACKE/src/lapacke_cgesvj_work.c
new file mode 100644 (file)
index 0000000..d2f24d0
--- /dev/null
@@ -0,0 +1,117 @@
+/*****************************************************************************
+  Copyright (c) 2014, Intel Corp.
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of Intel Corporation nor the names of its contributors
+      may be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+  THE POSSIBILITY OF SUCH DAMAGE.
+*****************************************************************************
+* Contents: Native middle-level C interface to LAPACK function cgesvj
+* Author: Intel Corporation
+* Generated November, 2011
+*****************************************************************************/
+
+#include "lapacke_utils.h"
+
+lapack_int LAPACKE_cgesvj_work( int matrix_layout, char joba, char jobu,
+                                char jobv, lapack_int m, lapack_int n, 
+                                lapack_complex_float* a, lapack_int lda, 
+                                float* sva, lapack_int mv,
+                                lapack_complex_float* v, lapack_int ldv,
+                                lapack_complex_float* cwork, lapack_int lwork,
+                                float* rwork, lapack_int lrwork )
+{
+    lapack_int info = 0;
+    if( matrix_layout == LAPACK_COL_MAJOR ) {
+        /* Call LAPACK function and adjust info */
+        LAPACK_cgesvj( &joba, &jobu, &jobv, &m, &n, a, &lda, sva, &mv, v, &ldv,
+                       cwork, &lwork, rwork, &lrwork, &info );
+        if( info < 0 ) {
+            info = info - 1;
+        }
+    } else if( matrix_layout == LAPACK_ROW_MAJOR ) {
+        lapack_int nrows_v = LAPACKE_lsame( jobv, 'v' ) ? n :
+                             ( LAPACKE_lsame( jobv, 'a' ) ? mv : 1);
+        lapack_int lda_t = MAX(1,m);
+        lapack_int ldv_t = MAX(1,nrows_v);
+        lapack_complex_float* a_t = NULL;
+        lapack_complex_float* v_t = NULL;
+        /* Check leading dimension(s) */
+        if( lda < n ) {
+            info = -8;
+            LAPACKE_xerbla( "LAPACKE_cgesvj_work", info );
+            return info;
+        }
+        if( ldv < n ) {
+            info = -12;
+            LAPACKE_xerbla( "LAPACKE_cgesvj_work", info );
+            return info;
+        }
+        /* Allocate memory for temporary array(s) */
+        a_t = (lapack_complex_float*)
+           LAPACKE_malloc( sizeof(lapack_complex_float) * lda_t * MAX(1,n) );
+        if( a_t == NULL ) {
+            info = LAPACK_TRANSPOSE_MEMORY_ERROR;
+            goto exit_level_0;
+        }
+        if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ) {
+            v_t = (lapack_complex_float*)
+               LAPACKE_malloc( sizeof(lapack_complex_float) * ldv_t * MAX(1,n) );
+            if( v_t == NULL ) {
+                info = LAPACK_TRANSPOSE_MEMORY_ERROR;
+                goto exit_level_1;
+            }
+        }
+        /* Transpose input matrices */
+        LAPACKE_cge_trans( matrix_layout, m, n, a, lda, a_t, lda_t );
+        if( LAPACKE_lsame( jobv, 'a' ) ) {
+            LAPACKE_cge_trans( matrix_layout, nrows_v, n, v, ldv, v_t, ldv_t );
+        }
+        /* Call LAPACK function and adjust info */
+        LAPACK_cgesvj( &joba, &jobu, &jobv, &m, &n, a_t, &lda_t, sva, &mv, v_t,
+                       &ldv_t, cwork, &lwork, rwork, &lrwork, &info );
+        if( info < 0 ) {
+            info = info - 1;
+        }
+        /* Transpose output matrices */
+        LAPACKE_cge_trans( LAPACK_COL_MAJOR, m, n, a_t, lda_t, a, lda );
+        if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ) {
+            LAPACKE_cge_trans( LAPACK_COL_MAJOR, nrows_v, n, v_t, ldv_t, v,
+                               ldv );
+        }
+        /* Release memory and exit */
+        if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ) {
+            LAPACKE_free( v_t );
+        }
+exit_level_1:
+        LAPACKE_free( a_t );
+exit_level_0:
+        if( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) {
+            LAPACKE_xerbla( "LAPACKE_cgesvj_work", info );
+        }
+    } else {
+        info = -1;
+        LAPACKE_xerbla( "LAPACKE_cgesvj_work", info );
+    }
+    return info;
+}
diff --git a/LAPACKE/src/lapacke_zgejsv.c b/LAPACKE/src/lapacke_zgejsv.c
new file mode 100644 (file)
index 0000000..db94f5e
--- /dev/null
@@ -0,0 +1,190 @@
+/*****************************************************************************
+  Copyright (c) 2014, Intel Corp.
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of Intel Corporation nor the names of its contributors
+      may be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+  THE POSSIBILITY OF SUCH DAMAGE.
+*****************************************************************************
+* Contents: Native high-level C interface to LAPACK function zgejsv
+* Author: Intel Corporation
+* Generated November, 2011
+*****************************************************************************/
+
+#include "lapacke_utils.h"
+
+lapack_int LAPACKE_zgejsv( int matrix_layout, char joba, char jobu, char jobv,
+                           char jobr, char jobt, char jobp, lapack_int m,
+                           lapack_int n, lapack_complex_double* a, lapack_int lda, double* sva,
+                           lapack_complex_double* u, lapack_int ldu, lapack_complex_double* v, lapack_int ldv,
+                           double* stat, lapack_int* istat )
+{
+    lapack_int info = 0;
+    lapack_int lwork = (
+                       // 1.1     
+       (            LAPACKE_lsame( jobu, 'n' ) &&  LAPACKE_lsame( jobv, 'n' ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) )) ? 2*n+1 :
+                       
+                //1.2
+     (   (        LAPACKE_lsame( jobu, 'n' ) &&  LAPACKE_lsame( jobv, 'n' ) &&
+              !( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) )) ? n*n+3*n :
+
+                //2.1
+    (  (          ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) )  &&
+              !( LAPACKE_lsame( jobu, 'u' ))||  LAPACKE_lsame( jobu, 'f' ) ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? 3*n :
+    
+    
+                //2.2
+    (  (          ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) )  &&
+              !( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' ) ) &&
+              !( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? 3*n :
+        
+               //3.1              
+     (   (      ( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' )) &&
+              !( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' )) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))?  3*n :
+                       
+               //3.2             
+     (   (      ( LAPACKE_lsame( jobu, 'u' ) || LAPACKE_lsame( jobu, 'f' )) &&
+              !(LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' )) &&
+              !(LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))?  3*n  :
+           
+              //4.1
+     (  (       ( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' ) ) &&
+               ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? 5*n+2*n*n :
+               
+              //4.2
+     (  (       ( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' ) ) &&
+               ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? 4*n*n: 
+                       1) ) ) ) ) ) );  
+    lapack_int lrwork = (
+                       // 1.1     
+       (            LAPACKE_lsame( jobu, 'n' ) &&  LAPACKE_lsame( jobv, 'n' ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) )) ? MAX(7,n+2*m) :
+                       
+                //1.2
+     (   (        LAPACKE_lsame( jobu, 'n' ) &&  LAPACKE_lsame( jobv, 'n' ) &&
+              !( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) )) ? MAX(7,2*n) :
+
+                //2.1
+    (  (          ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) )  &&
+              !( LAPACKE_lsame( jobu, 'u' ))||  LAPACKE_lsame( jobu, 'f' ) ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? MAX( 7, n+ 2*m ) :
+    
+    
+                //2.2
+    (  (          ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) )  &&
+              !( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' ) ) &&
+              !( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? MAX(7,2*n) :
+        
+               //3.1              
+     (   (      ( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' )) &&
+              !( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' )) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))?  MAX( 7, n+ 2*m ) :
+                       
+               //3.2             
+     (   (      ( LAPACKE_lsame( jobu, 'u' ) || LAPACKE_lsame( jobu, 'f' )) &&
+              !(LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' )) &&
+              !(LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))?  MAX(7,2*n)  :
+           
+              //4.1
+     (  (       ( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' ) ) &&
+               ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? MAX( 7, n+ 2*m ) :
+               
+              //4.2
+     (  (       ( LAPACKE_lsame( jobu, 'u' ) ||  LAPACKE_lsame( jobu, 'f' ) ) &&
+               ( LAPACKE_lsame( jobv, 'v' ) ||  LAPACKE_lsame( jobv, 'j' ) ) &&
+               ( LAPACKE_lsame( jobt, 't' ) ||  LAPACKE_lsame( joba, 'f' ) || LAPACKE_lsame( joba, 'g' ) ))? MAX(7,2*n) :
+                       1) ) ) ) ) ) );  
+    lapack_int* iwork = NULL;
+    double* rwork = NULL;
+    lapack_complex_double* cwork = NULL;
+    lapack_int i;
+    lapack_int nu, nv;
+    if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) {
+        LAPACKE_xerbla( "LAPACKE_zgejsv", -1 );
+        return -1;
+    }
+#ifndef LAPACK_DISABLE_NAN_CHECK
+    /* Optionally check input matrices for NaNs */
+    nu = LAPACKE_lsame( jobu, 'n' ) ? 1 : m;
+    nv = LAPACKE_lsame( jobv, 'n' ) ? 1 : n;
+    if( LAPACKE_zge_nancheck( matrix_layout, m, n, a, lda ) ) {
+        return -10;
+    }
+    if( LAPACKE_lsame( jobu, 'f' ) || LAPACKE_lsame( jobu, 'u' ) ||
+        LAPACKE_lsame( jobu, 'w' ) ) {
+        if( LAPACKE_zge_nancheck( matrix_layout, nu, n, u, ldu ) ) {
+            return -13;
+        }
+    }
+    if( LAPACKE_lsame( jobv, 'j' ) || LAPACKE_lsame( jobv, 'v' ) ||
+        LAPACKE_lsame( jobv, 'w' ) ) {
+        if( LAPACKE_zge_nancheck( matrix_layout, nv, n, v, ldv ) ) {
+            return -15;
+        }
+    }
+#endif
+    /* Allocate memory for working array(s) */
+    iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * MAX(1,m+3*n) );
+    if( iwork == NULL ) {
+        info = LAPACK_WORK_MEMORY_ERROR;
+        goto exit_level_0;
+    }
+    cwork = (lapack_complex_double*)LAPACKE_malloc( sizeof(lapack_complex_double) * lwork );
+    if( cwork == NULL ) {
+        info = LAPACK_WORK_MEMORY_ERROR;
+        goto exit_level_1;
+    }
+    rwork = (double*)LAPACKE_malloc( sizeof(double) * lrwork );
+    if( rwork == NULL ) {
+        info = LAPACK_WORK_MEMORY_ERROR;
+        goto exit_level_2;
+    }
+    /* Call middle-level interface */
+    info = LAPACKE_zgejsv_work( matrix_layout, joba, jobu, jobv, jobr, jobt,
+                                jobp, m, n, a, lda, sva, u, ldu, v, ldv, cwork,
+                                lwork, rwork, lrwork, iwork );
+    /* Backup significant data from working array(s) */
+    for( i=0; i<7; i++ ) {
+        stat[i] = rwork[i];
+    }
+    for( i=0; i<3; i++ ) {
+        istat[i] = iwork[i];
+    }
+    /* Release memory and exit */
+    LAPACKE_free( cwork );
+exit_level_2:
+    LAPACKE_free( rwork );
+exit_level_1:
+    LAPACKE_free( iwork );
+exit_level_0:
+    if( info == LAPACK_WORK_MEMORY_ERROR ) {
+        LAPACKE_xerbla( "LAPACKE_zgejsv", info );
+    }
+    return info;
+}
diff --git a/LAPACKE/src/lapacke_zgejsv_work.c b/LAPACKE/src/lapacke_zgejsv_work.c
new file mode 100644 (file)
index 0000000..5d785e9
--- /dev/null
@@ -0,0 +1,151 @@
+/*****************************************************************************
+  Copyright (c) 2014, Intel Corp.
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of Intel Corporation nor the names of its contributors
+      may be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+  THE POSSIBILITY OF SUCH DAMAGE.
+*****************************************************************************
+* Contents: Native middle-level C interface to LAPACK function zgejsv
+* Author: Intel Corporation
+* Generated November, 2011
+*****************************************************************************/
+
+#include "lapacke_utils.h"
+
+lapack_int LAPACKE_zgejsv_work( int matrix_layout, char joba, char jobu,
+                                char jobv, char jobr, char jobt, char jobp,
+                                lapack_int m, lapack_int n, lapack_complex_double* a,
+                                lapack_int lda, double* sva, lapack_complex_double* u,
+                                lapack_int ldu, lapack_complex_double* v, lapack_int ldv,
+                                lapack_complex_double* cwork, lapack_int lwork,
+                                double* rwork, lapack_int lrwork,
+                                lapack_int* iwork )
+{
+    lapack_int info = 0;
+    if( matrix_layout == LAPACK_COL_MAJOR ) {
+        /* Call LAPACK function and adjust info */
+        LAPACK_zgejsv( &joba, &jobu, &jobv, &jobr, &jobt, &jobp, &m, &n, a,
+                       &lda, sva, u, &ldu, v, &ldv, cwork, &lwork, rwork, &lwork, 
+                       iwork, &info );
+        if( info < 0 ) {
+            info = info - 1;
+        }
+    } else if( matrix_layout == LAPACK_ROW_MAJOR ) {
+        lapack_int nu = LAPACKE_lsame( jobu, 'n' ) ? 1 : m;
+        lapack_int nv = LAPACKE_lsame( jobv, 'n' ) ? 1 : n;
+        lapack_int lda_t = MAX(1,m);
+        lapack_int ldu_t = MAX(1,nu);
+        lapack_int ldv_t = MAX(1,nv);
+        lapack_complex_double* a_t = NULL;
+        lapack_complex_double* u_t = NULL;
+        lapack_complex_double* v_t = NULL;
+        /* Check leading dimension(s) */
+        if( lda < n ) {
+            info = -11;
+            LAPACKE_xerbla( "LAPACKE_zgejsv_work", info );
+            return info;
+        }
+        if( ldu < n ) {
+            info = -14;
+            LAPACKE_xerbla( "LAPACKE_zgejsv_work", info );
+            return info;
+        }
+        if( ldv < n ) {
+            info = -16;
+            LAPACKE_xerbla( "LAPACKE_zgejsv_work", info );
+            return info;
+        }
+        /* Allocate memory for temporary array(s) */
+        a_t = (lapack_complex_double*)
+           LAPACKE_malloc( sizeof(lapack_complex_double) * lda_t * MAX(1,n) );
+        if( a_t == NULL ) {
+            info = LAPACK_TRANSPOSE_MEMORY_ERROR;
+            goto exit_level_0;
+        }
+        if( LAPACKE_lsame( jobu, 'f' ) || LAPACKE_lsame( jobu, 'u' ) ||
+            LAPACKE_lsame( jobu, 'w' ) ) {
+            u_t = (lapack_complex_double*)
+               LAPACKE_malloc( sizeof(lapack_complex_double) * ldu_t * MAX(1,n) );
+            if( u_t == NULL ) {
+                info = LAPACK_TRANSPOSE_MEMORY_ERROR;
+                goto exit_level_1;
+            }
+        }
+        if( LAPACKE_lsame( jobv, 'j' ) || LAPACKE_lsame( jobv, 'v' ) ||
+            LAPACKE_lsame( jobv, 'w' ) ) {
+            v_t = (lapack_complex_double*)
+               LAPACKE_malloc( sizeof(lapack_complex_double) * ldv_t * MAX(1,n) );
+            if( v_t == NULL ) {
+                info = LAPACK_TRANSPOSE_MEMORY_ERROR;
+                goto exit_level_2;
+            }
+        }
+        /* Transpose input matrices */
+        LAPACKE_zge_trans( matrix_layout, m, n, a, lda, a_t, lda_t );
+        if( LAPACKE_lsame( jobu, 'f' ) || LAPACKE_lsame( jobu, 'u' ) ||
+            LAPACKE_lsame( jobu, 'w' ) ) {
+            LAPACKE_zge_trans( matrix_layout, nu, n, u, ldu, u_t, ldu_t );
+        }
+        if( LAPACKE_lsame( jobv, 'j' ) || LAPACKE_lsame( jobv, 'v' ) ||
+            LAPACKE_lsame( jobv, 'w' ) ) {
+            LAPACKE_zge_trans( matrix_layout, nv, n, v, ldv, v_t, ldv_t );
+        }
+        /* Call LAPACK function and adjust info */
+        LAPACK_zgejsv( &joba, &jobu, &jobv, &jobr, &jobt, &jobp, &m, &n, a_t,
+                       &lda_t, sva, u_t, &ldu_t, v_t, &ldv_t, cwork, &lwork,
+                       rwork, &lrwork, iwork, &info );
+        if( info < 0 ) {
+            info = info - 1;
+        }
+        /* Transpose output matrices */
+        if( LAPACKE_lsame( jobu, 'f' ) || LAPACKE_lsame( jobu, 'u' ) ||
+            LAPACKE_lsame( jobu, 'w' ) ) {
+            LAPACKE_zge_trans( LAPACK_COL_MAJOR, nu, n, u_t, ldu_t, u, ldu );
+        }
+        if( LAPACKE_lsame( jobv, 'j' ) || LAPACKE_lsame( jobv, 'v' ) ||
+            LAPACKE_lsame( jobv, 'w' ) ) {
+            LAPACKE_zge_trans( LAPACK_COL_MAJOR, nv, n, v_t, ldv_t, v, ldv );
+        }
+        /* Release memory and exit */
+        if( LAPACKE_lsame( jobv, 'j' ) || LAPACKE_lsame( jobv, 'v' ) ||
+            LAPACKE_lsame( jobv, 'w' ) ) {
+            LAPACKE_free( v_t );
+        }
+exit_level_2:
+        if( LAPACKE_lsame( jobu, 'f' ) || LAPACKE_lsame( jobu, 'u' ) ||
+            LAPACKE_lsame( jobu, 'w' ) ) {
+            LAPACKE_free( u_t );
+        }
+exit_level_1:
+        LAPACKE_free( a_t );
+exit_level_0:
+        if( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) {
+            LAPACKE_xerbla( "LAPACKE_zgejsv_work", info );
+        }
+    } else {
+        info = -1;
+        LAPACKE_xerbla( "LAPACKE_zgejsv_work", info );
+    }
+    return info;
+}
diff --git a/LAPACKE/src/lapacke_zgesvj.c b/LAPACKE/src/lapacke_zgesvj.c
new file mode 100644 (file)
index 0000000..dbd5c43
--- /dev/null
@@ -0,0 +1,96 @@
+/*****************************************************************************
+  Copyright (c) 2014, Intel Corp.
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of Intel Corporation nor the names of its contributors
+      may be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+  THE POSSIBILITY OF SUCH DAMAGE.
+*****************************************************************************
+* Contents: Native high-level C interface to LAPACK function zgesvj
+* Author: Intel Corporation
+* Generated November, 2011
+*****************************************************************************/
+
+#include "lapacke_utils.h"
+
+lapack_int LAPACKE_zgesvj( int matrix_layout, char joba, char jobu, char jobv,
+                           lapack_int m, lapack_int n,
+                           lapack_complex_double * a, lapack_int lda,
+                           double* sva, lapack_int mv,
+                           lapack_complex_double* v, lapack_int ldv, double* stat )
+{
+    lapack_int info = 0;
+    lapack_int lwork = m+n;
+    lapack_int lrwork = MAX(6,m+n);
+    double* rwork = NULL;
+    lapack_complex_double* cwork = NULL;
+    lapack_int i;
+    lapack_int nrows_v;
+    if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) {
+        LAPACKE_xerbla( "LAPACKE_zgesvj", -1 );
+        return -1;
+    }
+#ifndef LAPACK_DISABLE_NAN_CHECK
+    /* Optionally check input matrices for NaNs */
+    nrows_v = LAPACKE_lsame( jobv, 'v' ) ? n :
+                         ( LAPACKE_lsame( jobv, 'a' ) ? mv : 1);
+    if( LAPACKE_zge_nancheck( matrix_layout, m, n, a, lda ) ) {
+        return -7;
+    }
+    if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ) {
+        if( LAPACKE_zge_nancheck( matrix_layout, nrows_v, n, v, ldv ) ) {
+            return -11;
+        }
+    }
+#endif
+    /* Allocate memory for working array(s) */
+    cwork = (lapack_complex_double*)
+        LAPACKE_malloc( sizeof(lapack_complex_double)  * lwork );
+    if( cwork == NULL ) {
+        info = LAPACK_WORK_MEMORY_ERROR;
+        goto exit_level_0;
+    }
+    rwork = (double*)LAPACKE_malloc( sizeof(double) * lrwork );
+    if( rwork == NULL ) {
+        info = LAPACK_WORK_MEMORY_ERROR;
+        goto exit_level_1;
+    }
+    rwork[0] = stat[0];  /* Significant if jobu = 'c' */
+    /* Call middle-level interface */
+    info = LAPACKE_zgesvj_work( matrix_layout, joba, jobu, jobv, m, n, a, lda,
+                                sva, mv, v, ldv, cwork, lwork, rwork, lrwork );
+    /* Backup significant data from working array(s) */
+    for( i=0; i<6; i++ ) {
+        stat[i] = rwork[i];
+    }
+
+    /* Release memory and exit */
+    LAPACKE_free( rwork );
+exit_level_1:
+    LAPACKE_free( cwork );
+exit_level_0:
+    if( info == LAPACK_WORK_MEMORY_ERROR ) {
+        LAPACKE_xerbla( "LAPACKE_zgesvj", info );
+    }
+    return info;
+}
diff --git a/LAPACKE/src/lapacke_zgesvj_work.c b/LAPACKE/src/lapacke_zgesvj_work.c
new file mode 100644 (file)
index 0000000..e618bf9
--- /dev/null
@@ -0,0 +1,117 @@
+/*****************************************************************************
+  Copyright (c) 2014, Intel Corp.
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of Intel Corporation nor the names of its contributors
+      may be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+  THE POSSIBILITY OF SUCH DAMAGE.
+*****************************************************************************
+* Contents: Native middle-level C interface to LAPACK function zgesvj
+* Author: Intel Corporation
+* Generated November, 2011
+*****************************************************************************/
+
+#include "lapacke_utils.h"
+
+lapack_int LAPACKE_zgesvj_work( int matrix_layout, char joba, char jobu,
+                                char jobv, lapack_int m, lapack_int n, 
+                                lapack_complex_double* a, lapack_int lda, 
+                                double* sva, lapack_int mv,
+                                lapack_complex_double* v, lapack_int ldv,
+                                lapack_complex_double* cwork, lapack_int lwork,
+                                double* rwork, lapack_int lrwork )
+{
+    lapack_int info = 0;
+    if( matrix_layout == LAPACK_COL_MAJOR ) {
+        /* Call LAPACK function and adjust info */
+        LAPACK_zgesvj( &joba, &jobu, &jobv, &m, &n, a, &lda, sva, &mv, v, &ldv,
+                       cwork, &lwork, rwork, &lrwork, &info );
+        if( info < 0 ) {
+            info = info - 1;
+        }
+    } else if( matrix_layout == LAPACK_ROW_MAJOR ) {
+        lapack_int nrows_v = LAPACKE_lsame( jobv, 'v' ) ? n :
+                             ( LAPACKE_lsame( jobv, 'a' ) ? mv : 1);
+        lapack_int lda_t = MAX(1,m);
+        lapack_int ldv_t = MAX(1,nrows_v);
+        lapack_complex_double* a_t = NULL;
+        lapack_complex_double* v_t = NULL;
+        /* Check leading dimension(s) */
+        if( lda < n ) {
+            info = -8;
+            LAPACKE_xerbla( "LAPACKE_zgesvj_work", info );
+            return info;
+        }
+        if( ldv < n ) {
+            info = -12;
+            LAPACKE_xerbla( "LAPACKE_zgesvj_work", info );
+            return info;
+        }
+        /* Allocate memory for temporary array(s) */
+        a_t = (lapack_complex_double*)
+           LAPACKE_malloc( sizeof(lapack_complex_double) * lda_t * MAX(1,n) );
+        if( a_t == NULL ) {
+            info = LAPACK_TRANSPOSE_MEMORY_ERROR;
+            goto exit_level_0;
+        }
+        if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ) {
+            v_t = (lapack_complex_double*)
+               LAPACKE_malloc( sizeof(lapack_complex_double) * ldv_t * MAX(1,n) );
+            if( v_t == NULL ) {
+                info = LAPACK_TRANSPOSE_MEMORY_ERROR;
+                goto exit_level_1;
+            }
+        }
+        /* Transpose input matrices */
+        LAPACKE_zge_trans( matrix_layout, m, n, a, lda, a_t, lda_t );
+        if( LAPACKE_lsame( jobv, 'a' ) ) {
+            LAPACKE_zge_trans( matrix_layout, nrows_v, n, v, ldv, v_t, ldv_t );
+        }
+        /* Call LAPACK function and adjust info */
+        LAPACK_zgesvj( &joba, &jobu, &jobv, &m, &n, a_t, &lda_t, sva, &mv, v_t,
+                       &ldv_t, cwork, &lwork, rwork, &lrwork, &info );
+        if( info < 0 ) {
+            info = info - 1;
+        }
+        /* Transpose output matrices */
+        LAPACKE_zge_trans( LAPACK_COL_MAJOR, m, n, a_t, lda_t, a, lda );
+        if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ) {
+            LAPACKE_zge_trans( LAPACK_COL_MAJOR, nrows_v, n, v_t, ldv_t, v,
+                               ldv );
+        }
+        /* Release memory and exit */
+        if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ) {
+            LAPACKE_free( v_t );
+        }
+exit_level_1:
+        LAPACKE_free( a_t );
+exit_level_0:
+        if( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) {
+            LAPACKE_xerbla( "LAPACKE_zgesvj_work", info );
+        }
+    } else {
+        info = -1;
+        LAPACKE_xerbla( "LAPACKE_zgesvj_work", info );
+    }
+    return info;
+}