LAPACK  3.5.0
LAPACK: Linear Algebra PACKage
 All Files Functions 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

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 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.

41 {
42  lapack_int info = 0;
43  lapack_int lwork = (!( LAPACKE_lsame( jobu, 'u' ) ||
44  LAPACKE_lsame( jobu, 'f' ) ||
45  LAPACKE_lsame( jobv, 'v' ) ||
46  LAPACKE_lsame( jobv, 'j' ) ||
47  LAPACKE_lsame( joba, 'e' ) ||
48  LAPACKE_lsame( joba, 'g' ) ) ? MAX3(7,4*n+1,2*m+n) :
49  ( (!( LAPACKE_lsame( jobu, 'u' ) ||
50  LAPACKE_lsame( jobu, 'f' ) ||
51  LAPACKE_lsame( jobv, 'v' ) ||
52  LAPACKE_lsame( jobv, 'j' ) ) &&
53  ( LAPACKE_lsame( joba, 'e' ) ||
54  LAPACKE_lsame( joba, 'g' ) ) ) ? MAX3(7,4*n+n*n,2*m+n) :
55  ( ( LAPACKE_lsame( jobu, 'u' ) ||
56  LAPACKE_lsame( jobu, 'f' ) ) &&
57  (!( LAPACKE_lsame( jobv, 'v' ) ||
58  LAPACKE_lsame( jobv, 'j' ) ) ) ? MAX(7,2*n+m) :
59  ( ( LAPACKE_lsame( jobv, 'v' ) ||
60  LAPACKE_lsame( jobv, 'j' ) ) &&
61  (!( LAPACKE_lsame( jobu, 'u' ) ||
62  LAPACKE_lsame( jobu, 'f' ) ) ) ? MAX(7,2*n+m) :
63  ( ( LAPACKE_lsame( jobu, 'u' ) ||
64  LAPACKE_lsame( jobu, 'f' ) ) &&
65  ( LAPACKE_lsame( jobv, 'v' ) ||
66  LAPACKE_lsame( jobv, 'j' ) ) &&
67  !LAPACKE_lsame( jobv, 'j' ) ? MAX(1,6*n+2*n*n) :
68  ( ( LAPACKE_lsame( jobu, 'u' ) ||
69  LAPACKE_lsame( jobu, 'f' ) ) &&
70  ( LAPACKE_lsame( jobv, 'v' ) ||
71  LAPACKE_lsame( jobv, 'j' ) ) &&
72  LAPACKE_lsame( jobv, 'j' ) ? MAX(7,m+3*n+n*n) :
73  1) ) ) ) ) );
74  lapack_int* iwork = NULL;
75  float* work = NULL;
76  lapack_int i;
77  lapack_int nu, nv;
78  if( matrix_order != LAPACK_COL_MAJOR && matrix_order != LAPACK_ROW_MAJOR ) {
79  LAPACKE_xerbla( "LAPACKE_sgejsv", -1 );
80  return -1;
81  }
82 #ifndef LAPACK_DISABLE_NAN_CHECK
83  /* Optionally check input matrices for NaNs */
84  nu = LAPACKE_lsame( jobu, 'n' ) ? 1 : m;
85  nv = LAPACKE_lsame( jobv, 'n' ) ? 1 : n;
86  if( LAPACKE_sge_nancheck( matrix_order, m, n, a, lda ) ) {
87  return -10;
88  }
89  if( LAPACKE_lsame( jobu, 'f' ) || LAPACKE_lsame( jobu, 'u' ) ||
90  LAPACKE_lsame( jobu, 'w' ) ) {
91  if( LAPACKE_sge_nancheck( matrix_order, nu, n, u, ldu ) ) {
92  return -13;
93  }
94  }
95  if( LAPACKE_lsame( jobv, 'j' ) || LAPACKE_lsame( jobv, 'v' ) ||
96  LAPACKE_lsame( jobv, 'w' ) ) {
97  if( LAPACKE_sge_nancheck( matrix_order, nv, n, v, ldv ) ) {
98  return -15;
99  }
100  }
101 #endif
102  /* Allocate memory for working array(s) */
103  iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * MAX(1,m+3*n) );
104  if( iwork == NULL ) {
106  goto exit_level_0;
107  }
108  work = (float*)LAPACKE_malloc( sizeof(float) * lwork );
109  if( work == NULL ) {
111  goto exit_level_1;
112  }
113  /* Call middle-level interface */
114  info = LAPACKE_sgejsv_work( matrix_order, joba, jobu, jobv, jobr, jobt,
115  jobp, m, n, a, lda, sva, u, ldu, v, ldv, work,
116  lwork, iwork );
117  /* Backup significant data from working array(s) */
118  for( i=0; i<7; i++ ) {
119  stat[i] = work[i];
120  }
121  for( i=0; i<3; i++ ) {
122  istat[i] = iwork[i];
123  }
124  /* Release memory and exit */
125  LAPACKE_free( work );
126 exit_level_1:
127  LAPACKE_free( iwork );
128 exit_level_0:
129  if( info == LAPACK_WORK_MEMORY_ERROR ) {
130  LAPACKE_xerbla( "LAPACKE_sgejsv", info );
131  }
132  return info;
133 }
#define LAPACK_COL_MAJOR
Definition: lapacke.h:120
void LAPACKE_xerbla(const char *name, lapack_int info)
#define LAPACK_ROW_MAJOR
Definition: lapacke.h:119
#define LAPACKE_malloc(size)
Definition: lapacke.h:110
#define MAX(x, y)
Definition: lapacke_utils.h:47
#define MAX3(x, y, z)
Definition: lapacke_utils.h:53
#define LAPACKE_free(p)
Definition: lapacke.h:113
lapack_logical LAPACKE_sge_nancheck(int matrix_order, lapack_int m, lapack_int n, const float *a, lapack_int lda)
lapack_int LAPACKE_sgejsv_work(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 *work, lapack_int lwork, lapack_int *iwork)
lapack_logical LAPACKE_lsame(char ca, char cb)
Definition: lapacke_lsame.c:36
#define LAPACK_WORK_MEMORY_ERROR
Definition: lapacke.h:122
#define lapack_int
Definition: lapacke.h:47

Here is the call graph for this function: