LAPACK  3.5.0
LAPACK: Linear Algebra PACKage
 All Classes Files Functions Variables Typedefs Macros
lapacke_sgejsv.c File Reference
#include "lapacke_utils.h"
Include dependency graph for lapacke_sgejsv.c:

Go to the source code of this file.

Functions/Subroutines

lapack_int LAPACKE_sgejsv (int matrix_order, char joba, char jobu, char jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int n, float *a, lapack_int lda, float *sva, float *u, lapack_int ldu, float *v, lapack_int ldv, float *stat, lapack_int *istat)

Function/Subroutine Documentation

lapack_int LAPACKE_sgejsv ( int  matrix_order,
char  joba,
char  jobu,
char  jobv,
char  jobr,
char  jobt,
char  jobp,
lapack_int  m,
lapack_int  n,
float *  a,
lapack_int  lda,
float *  sva,
float *  u,
lapack_int  ldu,
float *  v,
lapack_int  ldv,
float *  stat,
lapack_int istat 
)

Definition at line 36 of file lapacke_sgejsv.c.

{
lapack_int info = 0;
lapack_int lwork = (!( LAPACKE_lsame( jobu, 'u' ) ||
LAPACKE_lsame( jobu, 'f' ) ||
LAPACKE_lsame( jobv, 'v' ) ||
LAPACKE_lsame( jobv, 'j' ) ||
LAPACKE_lsame( joba, 'e' ) ||
LAPACKE_lsame( joba, 'g' ) ) ? MAX3(7,4*n+1,2*m+n) :
( (!( LAPACKE_lsame( jobu, 'u' ) ||
LAPACKE_lsame( jobu, 'f' ) ||
LAPACKE_lsame( jobv, 'v' ) ||
LAPACKE_lsame( jobv, 'j' ) ) &&
( LAPACKE_lsame( joba, 'e' ) ||
LAPACKE_lsame( joba, 'g' ) ) ) ? MAX3(7,4*n+n*n,2*m+n) :
( ( LAPACKE_lsame( jobu, 'u' ) ||
LAPACKE_lsame( jobu, 'f' ) ) &&
(!( LAPACKE_lsame( jobv, 'v' ) ||
LAPACKE_lsame( jobv, 'j' ) ) ) ? MAX(7,2*n+m) :
( ( LAPACKE_lsame( jobv, 'v' ) ||
LAPACKE_lsame( jobv, 'j' ) ) &&
(!( LAPACKE_lsame( jobu, 'u' ) ||
LAPACKE_lsame( jobu, 'f' ) ) ) ? MAX(7,2*n+m) :
( ( LAPACKE_lsame( jobu, 'u' ) ||
LAPACKE_lsame( jobu, 'f' ) ) &&
( LAPACKE_lsame( jobv, 'v' ) ||
LAPACKE_lsame( jobv, 'j' ) ) &&
!LAPACKE_lsame( jobv, 'j' ) ? MAX(1,6*n+2*n*n) :
( ( LAPACKE_lsame( jobu, 'u' ) ||
LAPACKE_lsame( jobu, 'f' ) ) &&
( LAPACKE_lsame( jobv, 'v' ) ||
LAPACKE_lsame( jobv, 'j' ) ) &&
LAPACKE_lsame( jobv, 'j' ) ? MAX(7,m+3*n+n*n) :
1) ) ) ) ) );
lapack_int* iwork = NULL;
float* work = NULL;
lapack_int nu, nv;
if( matrix_order != LAPACK_COL_MAJOR && matrix_order != LAPACK_ROW_MAJOR ) {
LAPACKE_xerbla( "LAPACKE_sgejsv", -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_sge_nancheck( matrix_order, m, n, a, lda ) ) {
return -10;
}
if( LAPACKE_lsame( jobu, 'f' ) || LAPACKE_lsame( jobu, 'u' ) ||
LAPACKE_lsame( jobu, 'w' ) ) {
if( LAPACKE_sge_nancheck( matrix_order, nu, n, u, ldu ) ) {
return -13;
}
}
if( LAPACKE_lsame( jobv, 'j' ) || LAPACKE_lsame( jobv, 'v' ) ||
LAPACKE_lsame( jobv, 'w' ) ) {
if( LAPACKE_sge_nancheck( matrix_order, 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 ) {
goto exit_level_0;
}
work = (float*)LAPACKE_malloc( sizeof(float) * lwork );
if( work == NULL ) {
goto exit_level_1;
}
/* Call middle-level interface */
info = LAPACKE_sgejsv_work( matrix_order, joba, jobu, jobv, jobr, jobt,
jobp, m, n, a, lda, sva, u, ldu, v, ldv, work,
lwork, iwork );
/* Backup significant data from working array(s) */
for( i=0; i<7; i++ ) {
stat[i] = work[i];
}
for( i=0; i<3; i++ ) {
istat[i] = iwork[i];
}
/* Release memory and exit */
LAPACKE_free( work );
exit_level_1:
LAPACKE_free( iwork );
exit_level_0:
if( info == LAPACK_WORK_MEMORY_ERROR ) {
LAPACKE_xerbla( "LAPACKE_sgejsv", info );
}
return info;
}

Here is the call graph for this function: