lapack_int ldc );
lapack_int LAPACKE_sbdsvdx( int matrix_layout, char uplo, char jobz, char range,
lapack_int n, float* d, float* e,
- lapack_int vl, lapack_int vu,
- lapack_int il, lapack_int iu, lapack_int ns,
+ float vl, float vu,
+ lapack_int il, lapack_int iu, lapack_int* ns,
float* s, float* z, lapack_int ldz,
lapack_int* superb );
lapack_int LAPACKE_dbdsvdx( int matrix_layout, char uplo, char jobz, char range,
lapack_int n, double* d, double* e,
- lapack_int vl, lapack_int vu,
- lapack_int il, lapack_int iu, lapack_int ns,
+ double vl, double vu,
+ lapack_int il, lapack_int iu, lapack_int* ns,
double* s, double* z, lapack_int ldz,
lapack_int* superb );
lapack_int LAPACKE_sdisna( char job, lapack_int m, lapack_int n, const float* d,
lapack_int* iwork );
lapack_int LAPACKE_sbdsvdx_work( int matrix_layout, char uplo, char jobz, char range,
- lapack_int n, float* d, float* e,
- lapack_int vl, lapack_int vu,
- lapack_int il, lapack_int iu, lapack_int ns,
- float* s, float* z, lapack_int ldz,
- float* work, lapack_int* iwork );
+ lapack_int n, float* d, float* e,
+ float vl, float vu,
+ lapack_int il, lapack_int iu, lapack_int* ns,
+ float* s, float* z, lapack_int ldz,
+ float* work, lapack_int* iwork );
lapack_int LAPACKE_dbdsvdx_work( int matrix_layout, char uplo, char jobz, char range,
- lapack_int n, double* d, double* e,
- lapack_int vl, lapack_int vu,
- lapack_int il, lapack_int iu, lapack_int ns,
- double* s, double* z, lapack_int ldz,
- double* work, lapack_int* iwork );
+ lapack_int n, double* d, double* e,
+ double vl, double vu,
+ lapack_int il, lapack_int iu, lapack_int* ns,
+ double* s, double* z, lapack_int ldz,
+ double* work, lapack_int* iwork );
lapack_int LAPACKE_sbdsqr_work( int matrix_layout, char uplo, lapack_int n,
lapack_int ncvt, lapack_int nru, lapack_int ncc,
lapack_int* iwork, lapack_int *info );
void LAPACK_sbdsvdx( char* uplo, char* jobz, char* range,
lapack_int* n, float* d, float* e,
- lapack_int* vl, lapack_int* vu,
+ float* vl, float* vu,
lapack_int* il, lapack_int* iu, lapack_int* ns,
float* s, float* z, lapack_int* ldz,
float* work, lapack_int *iwork, lapack_int *info );
void LAPACK_dbdsvdx( char* uplo, char* jobz, char* range,
lapack_int* n, double* d, double* e,
- lapack_int* vl, lapack_int* vu,
+ double* vl, double* vu,
lapack_int* il, lapack_int* iu, lapack_int* ns,
double* s, double* z, lapack_int* ldz,
double* work, lapack_int *iwork, lapack_int *info );
lapack_int LAPACKE_dbdsvdx( int matrix_layout, char uplo, char jobz, char range,
lapack_int n, double* d, double* e,
- lapack_int vl, lapack_int vu,
- lapack_int il, lapack_int iu, lapack_int ns,
+ double vl, double vu,
+ lapack_int il, lapack_int iu, lapack_int* ns,
double* s, double* z, lapack_int ldz,
lapack_int* superb )
{
lapack_int info = 0;
- lapack_int lwork = 14*n;
+ lapack_int lwork = MAX(14*n,1);
double* work = NULL;
lapack_int* iwork = NULL;
lapack_int i;
if( LAPACKE_d_nancheck( n, d, 1 ) ) {
return -6;
}
- if( LAPACKE_d_nancheck( n, e, 1 ) ) {
+ if( LAPACKE_d_nancheck( n - 1, e, 1 ) ) {
return -7;
}
#endif
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_0;
}
- iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * (12*n) );
+ iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * MAX(12*n,1) );
if( iwork == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_1;
}
/* Call middle-level interface */
info = LAPACKE_dbdsvdx_work( matrix_layout, uplo, jobz, range,
- n, d, e, vl, vu, il, iu, ns, s, z,
+ n, d, e, vl, vu, il, iu, ns, s, z,
ldz, work, iwork);
/* Backup significant data from working array(s) */
for( i=0; i<12*n-1; i++ ) {
lapack_int LAPACKE_dbdsvdx_work( int matrix_layout, char uplo, char jobz, char range,
lapack_int n, double* d, double* e,
- lapack_int vl, lapack_int vu,
- lapack_int il, lapack_int iu, lapack_int ns,
+ double vl, double vu,
+ lapack_int il, lapack_int iu, lapack_int* ns,
double* s, double* z, lapack_int ldz,
double* work, lapack_int* iwork )
{
if( matrix_layout == LAPACK_COL_MAJOR ) {
/* Call LAPACK function and adjust info */
LAPACK_dbdsvdx( &uplo, &jobz, &range, &n, d, e, &vl, &vu,
- &il, &iu, &ns, s, z, &ldz,
+ &il, &iu, ns, s, z, &ldz,
work, iwork, &info );
if( info < 0 ) {
info = info - 1;
}
} else if( matrix_layout == LAPACK_ROW_MAJOR ) {
- lapack_int nrows_z = ( LAPACKE_lsame( jobz, 'v' ) ) ? MAX(2, 2*n) : 1;
+ lapack_int nrows_z = ( LAPACKE_lsame( jobz, 'v' ) ) ? 2*n : 0;
+ lapack_int ncols_z = ( LAPACKE_lsame( jobz, 'v' ) ) ?
+ ( LAPACKE_lsame( range, 'i' ) ? MAX(0,iu - il + 1) : n + 1 ) : 0;
lapack_int ldz_t = MAX(1,nrows_z);
double* z_t = NULL;
/* Check leading dimension(s) */
- if( ldz < nrows_z ) {
+ if( ldz < ncols_z ) {
info = -3;
LAPACKE_xerbla( "LAPACKE_dbdsvdx_work", info );
return info;
}
/* Allocate memory for temporary array(s) */
- if( LAPACKE_lsame( jobz, 'n' ) ) {
+ if( LAPACKE_lsame( jobz, 'v' ) ) {
z_t = (double*)
- LAPACKE_malloc( sizeof(double) * ldz_t * 2*n );
+ LAPACKE_malloc( sizeof(double) * ldz_t * MAX(2*n,1) );
if( z_t == NULL ) {
info = LAPACK_TRANSPOSE_MEMORY_ERROR;
goto exit_level_0;
}
/* Call LAPACK function and adjust info */
LAPACK_dbdsvdx( &uplo, &jobz, &range, &n, d, e, &vl, &vu,
- &il, &iu, &ns, s, z_t, &ldz_t, work,
+ &il, &iu, ns, s, z_t, &ldz_t, work,
iwork, &info );
if( info < 0 ) {
info = info - 1;
}
/* Transpose output matrices */
- if( LAPACKE_lsame( jobz, 'n' ) ) {
- LAPACKE_dge_trans( LAPACK_COL_MAJOR, nrows_z, nrows_z, z_t, ldz_t, z, ldz);
+ if( LAPACKE_lsame( jobz, 'v' ) ) {
+ LAPACKE_dge_trans( LAPACK_COL_MAJOR, nrows_z, ncols_z, z_t, ldz_t, z, ldz);
}
/* Release memory and exit */
- if( LAPACKE_lsame( jobz, 'n' ) ) {
+ if( LAPACKE_lsame( jobz, 'v' ) ) {
LAPACKE_free( z_t );
}
exit_level_0:
lapack_int LAPACKE_sbdsvdx( int matrix_layout, char uplo, char jobz, char range,
lapack_int n, float* d, float* e,
- lapack_int vl, lapack_int vu,
- lapack_int il, lapack_int iu, lapack_int ns,
+ float vl, float vu,
+ lapack_int il, lapack_int iu, lapack_int* ns,
float* s, float* z, lapack_int ldz,
lapack_int* superb )
{
lapack_int info = 0;
- lapack_int lwork = 14*n;
+ lapack_int lwork = MAX(14*n,1);
float* work = NULL;
lapack_int* iwork = NULL;
lapack_int i;
if( LAPACKE_s_nancheck( n, d, 1 ) ) {
return -6;
}
- if( LAPACKE_s_nancheck( n, e, 1 ) ) {
+ if( LAPACKE_s_nancheck( n - 1, e, 1 ) ) {
return -7;
}
#endif
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_0;
}
- iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * (12*n) );
+ iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * MAX(12*n,1) );
if( iwork == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_1;
}
/* Call middle-level interface */
info = LAPACKE_sbdsvdx_work( matrix_layout, uplo, jobz, range,
- n, d, e, vl, vu, il, iu, ns, s, z,
+ n, d, e, vl, vu, il, iu, ns, s, z,
ldz, work, iwork);
/* Backup significant data from working array(s) */
for( i=0; i<12*n-1; i++ ) {
lapack_int LAPACKE_sbdsvdx_work( int matrix_layout, char uplo, char jobz, char range,
lapack_int n, float* d, float* e,
- lapack_int vl, lapack_int vu,
- lapack_int il, lapack_int iu, lapack_int ns,
+ float vl, float vu,
+ lapack_int il, lapack_int iu, lapack_int* ns,
float* s, float* z, lapack_int ldz,
float* work, lapack_int* iwork )
{
if( matrix_layout == LAPACK_COL_MAJOR ) {
/* Call LAPACK function and adjust info */
LAPACK_sbdsvdx( &uplo, &jobz, &range, &n, d, e, &vl, &vu,
- &il, &iu, &ns, s, z, &ldz,
+ &il, &iu, ns, s, z, &ldz,
work, iwork, &info );
if( info < 0 ) {
info = info - 1;
}
} else if( matrix_layout == LAPACK_ROW_MAJOR ) {
- lapack_int nrows_z = ( LAPACKE_lsame( jobz, 'v' ) ) ? MAX(2, 2*n) : 1;
+ lapack_int nrows_z = ( LAPACKE_lsame( jobz, 'v' ) ) ? 2*n : 0;
+ lapack_int ncols_z = ( LAPACKE_lsame( jobz, 'v' ) ) ?
+ ( LAPACKE_lsame( range, 'i' ) ? MAX(0,iu - il + 1) : n + 1 ) : 0;
lapack_int ldz_t = MAX(1,nrows_z);
float* z_t = NULL;
/* Check leading dimension(s) */
- if( ldz < nrows_z ) {
+ if( ldz < ncols_z ) {
info = -3;
LAPACKE_xerbla( "LAPACKE_sbdsvdx_work", info );
return info;
}
/* Allocate memory for temporary array(s) */
- if( LAPACKE_lsame( jobz, 'n' ) ) {
+ if( LAPACKE_lsame( jobz, 'v' ) ) {
z_t = (float*)
- LAPACKE_malloc( sizeof(float) * ldz_t * 2*n );
+ LAPACKE_malloc( sizeof(float) * ldz_t * MAX(2*n,1) );
if( z_t == NULL ) {
info = LAPACK_TRANSPOSE_MEMORY_ERROR;
goto exit_level_0;
}
/* Call LAPACK function and adjust info */
LAPACK_sbdsvdx( &uplo, &jobz, &range, &n, d, e, &vl, &vu,
- &il, &iu, &ns, s, z_t, &ldz_t, work,
+ &il, &iu, ns, s, z_t, &ldz_t, work,
iwork, &info );
if( info < 0 ) {
info = info - 1;
}
/* Transpose output matrices */
- if( LAPACKE_lsame( jobz, 'n' ) ) {
- LAPACKE_sge_trans( LAPACK_COL_MAJOR, nrows_z, nrows_z, z_t, ldz_t, z, ldz);
+ if( LAPACKE_lsame( jobz, 'v' ) ) {
+ LAPACKE_sge_trans( LAPACK_COL_MAJOR, nrows_z, ncols_z, z_t, ldz_t, z, ldz);
}
/* Release memory and exit */
- if( LAPACKE_lsame( jobz, 'n' ) ) {
+ if( LAPACKE_lsame( jobz, 'v' ) ) {
LAPACKE_free( z_t );
}
exit_level_0: