@@ -50,16 +50,26 @@ lapack_int LAPACKE_ctprfb_work( int matrix_layout, char side, char trans,
5050 info = info - 1 ;
5151 }
5252 } else if ( matrix_layout == LAPACK_ROW_MAJOR ) {
53- lapack_int lda_t = MAX (1 ,k );
53+ lapack_int nrowsA , ncolsA , nrowsV ;
54+ if ( LAPACKE_lsame (side , 'l' ) ) {
55+ nrowsA = k ; ncolsA = n ; nrowsV = m ;
56+ } else if ( LAPACKE_lsame (side , 'r' ) ) {
57+ nrowsA = m ; ncolsA = k ; nrowsV = n ;
58+ } else {
59+ info = -2 ;
60+ LAPACKE_xerbla ( "LAPACKE_ctprfb_work" , info );
61+ return info ;
62+ }
63+ lapack_int lda_t = MAX (1 ,nrowsA );
5464 lapack_int ldb_t = MAX (1 ,m );
5565 lapack_int ldt_t = MAX (1 ,ldt );
56- lapack_int ldv_t = MAX (1 ,ldv );
66+ lapack_int ldv_t = MAX (1 ,nrowsV );
5767 lapack_complex_float * v_t = NULL ;
5868 lapack_complex_float * t_t = NULL ;
5969 lapack_complex_float * a_t = NULL ;
6070 lapack_complex_float * b_t = NULL ;
6171 /* Check leading dimension(s) */
62- if ( lda < m ) {
72+ if ( lda < ncolsA ) {
6373 info = -15 ;
6474 LAPACKE_xerbla ( "LAPACKE_ctprfb_work" , info );
6575 return info ;
@@ -74,10 +84,18 @@ lapack_int LAPACKE_ctprfb_work( int matrix_layout, char side, char trans,
7484 LAPACKE_xerbla ( "LAPACKE_ctprfb_work" , info );
7585 return info ;
7686 }
77- if ( ldv < k ) {
78- info = -11 ;
79- LAPACKE_xerbla ( "LAPACKE_ctprfb_work" , info );
80- return info ;
87+ if ( LAPACKE_lsame (storev , 'c' ) ) {
88+ if ( ldv < nrowsV ) {
89+ info = -11 ;
90+ LAPACKE_xerbla ( "LAPACKE_ctprfb_work" , info );
91+ return info ;
92+ }
93+ } else {
94+ if ( ldv < k ) {
95+ info = -11 ;
96+ LAPACKE_xerbla ( "LAPACKE_ctprfb_work" , info );
97+ return info ;
98+ }
8199 }
82100 /* Allocate memory for temporary array(s) */
83101 v_t = (lapack_complex_float * )
@@ -93,7 +111,7 @@ lapack_int LAPACKE_ctprfb_work( int matrix_layout, char side, char trans,
93111 goto exit_level_1 ;
94112 }
95113 a_t = (lapack_complex_float * )
96- LAPACKE_malloc ( sizeof (lapack_complex_float ) * lda_t * MAX (1 ,m ) );
114+ LAPACKE_malloc ( sizeof (lapack_complex_float ) * lda_t * MAX (1 ,ncolsA ) );
97115 if ( a_t == NULL ) {
98116 info = LAPACK_TRANSPOSE_MEMORY_ERROR ;
99117 goto exit_level_2 ;
@@ -105,17 +123,17 @@ lapack_int LAPACKE_ctprfb_work( int matrix_layout, char side, char trans,
105123 goto exit_level_3 ;
106124 }
107125 /* Transpose input matrices */
108- LAPACKE_cge_trans ( matrix_layout , ldv , k , v , ldv , v_t , ldv_t );
109- LAPACKE_cge_trans ( matrix_layout , ldt , k , t , ldt , t_t , ldt_t );
110- LAPACKE_cge_trans ( matrix_layout , k , m , a , lda , a_t , lda_t );
111- LAPACKE_cge_trans ( matrix_layout , m , n , b , ldb , b_t , ldb_t );
126+ LAPACKE_cge_trans ( LAPACK_ROW_MAJOR , nrowsV , k , v , ldv , v_t , ldv_t );
127+ LAPACKE_cge_trans ( LAPACK_ROW_MAJOR , ldt , k , t , ldt , t_t , ldt_t );
128+ LAPACKE_cge_trans ( LAPACK_ROW_MAJOR , nrowsA , ncolsA , a , lda , a_t , lda_t );
129+ LAPACKE_cge_trans ( LAPACK_ROW_MAJOR , m , n , b , ldb , b_t , ldb_t );
112130 /* Call LAPACK function and adjust info */
113131 LAPACK_ctprfb ( & side , & trans , & direct , & storev , & m , & n , & k , & l , v_t ,
114132 & ldv_t , t_t , & ldt_t , a_t , & lda_t , b_t , & ldb_t , work ,
115133 & ldwork );
116134 info = 0 ; /* LAPACK call is ok! */
117135 /* Transpose output matrices */
118- LAPACKE_cge_trans ( LAPACK_COL_MAJOR , k , m , a_t , lda_t , a , lda );
136+ LAPACKE_cge_trans ( LAPACK_COL_MAJOR , nrowsA , ncolsA , a_t , lda_t , a , lda );
119137 LAPACKE_cge_trans ( LAPACK_COL_MAJOR , m , n , b_t , ldb_t , b , ldb );
120138 /* Release memory and exit */
121139 LAPACKE_free ( b_t );
0 commit comments