@@ -50,16 +50,24 @@ lapack_int LAPACKE_ctpmqrt_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 ( side == LAPACKE_lsame (side , 'l' ) ) { nrowsA = k ; ncolsA = n ; nrowsV = m ; }
55+ else if ( side == LAPACKE_lsame (side , 'r' ) ) { nrowsA = m ; ncolsA = k ; nrowsV = n ; }
56+ else {
57+ info = -2 ;
58+ LAPACKE_xerbla ( "LAPACKE_ctpmqrt_work" , info );
59+ return info ;
60+ }
61+ lapack_int lda_t = MAX (1 ,nrowsA );
5462 lapack_int ldb_t = MAX (1 ,m );
55- lapack_int ldt_t = MAX (1 ,ldt );
56- lapack_int ldv_t = MAX (1 ,ldv );
63+ lapack_int ldt_t = MAX (1 ,nb );
64+ lapack_int ldv_t = MAX (1 ,nrowsV );
5765 lapack_complex_float * v_t = NULL ;
5866 lapack_complex_float * t_t = NULL ;
5967 lapack_complex_float * a_t = NULL ;
6068 lapack_complex_float * b_t = NULL ;
6169 /* Check leading dimension(s) */
62- if ( lda < m ) {
70+ if ( lda < ncolsA ) {
6371 info = -14 ;
6472 LAPACKE_xerbla ( "LAPACKE_ctpmqrt_work" , info );
6573 return info ;
@@ -69,7 +77,7 @@ lapack_int LAPACKE_ctpmqrt_work( int matrix_layout, char side, char trans,
6977 LAPACKE_xerbla ( "LAPACKE_ctpmqrt_work" , info );
7078 return info ;
7179 }
72- if ( ldt < nb ) {
80+ if ( ldt < k ) {
7381 info = -12 ;
7482 LAPACKE_xerbla ( "LAPACKE_ctpmqrt_work" , info );
7583 return info ;
@@ -87,13 +95,13 @@ lapack_int LAPACKE_ctpmqrt_work( int matrix_layout, char side, char trans,
8795 goto exit_level_0 ;
8896 }
8997 t_t = (lapack_complex_float * )
90- LAPACKE_malloc ( sizeof (lapack_complex_float ) * ldt_t * MAX (1 ,nb ) );
98+ LAPACKE_malloc ( sizeof (lapack_complex_float ) * ldt_t * MAX (1 ,k ) );
9199 if ( t_t == NULL ) {
92100 info = LAPACK_TRANSPOSE_MEMORY_ERROR ;
93101 goto exit_level_1 ;
94102 }
95103 a_t = (lapack_complex_float * )
96- LAPACKE_malloc ( sizeof (lapack_complex_float ) * lda_t * MAX (1 ,m ) );
104+ LAPACKE_malloc ( sizeof (lapack_complex_float ) * lda_t * MAX (1 ,ncolsA ) );
97105 if ( a_t == NULL ) {
98106 info = LAPACK_TRANSPOSE_MEMORY_ERROR ;
99107 goto exit_level_2 ;
@@ -105,18 +113,18 @@ lapack_int LAPACKE_ctpmqrt_work( int matrix_layout, char side, char trans,
105113 goto exit_level_3 ;
106114 }
107115 /* Transpose input matrices */
108- LAPACKE_cge_trans ( matrix_layout , ldv , k , v , ldv , v_t , ldv_t );
109- LAPACKE_cge_trans ( matrix_layout , ldt , nb , 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 );
116+ LAPACKE_cge_trans ( LAPACK_ROW_MAJOR , nrowsV , k , v , ldv , v_t , ldv_t );
117+ LAPACKE_cge_trans ( LAPACK_ROW_MAJOR , nb , k , t , ldt , t_t , ldt_t );
118+ LAPACKE_cge_trans ( LAPACK_ROW_MAJOR , nrowsA , ncolsA , a , lda , a_t , lda_t );
119+ LAPACKE_cge_trans ( LAPACK_ROW_MAJOR , m , n , b , ldb , b_t , ldb_t );
112120 /* Call LAPACK function and adjust info */
113121 LAPACK_ctpmqrt ( & side , & trans , & m , & n , & k , & l , & nb , v_t , & ldv_t , t_t ,
114122 & ldt_t , a_t , & lda_t , b_t , & ldb_t , work , & info );
115123 if ( info < 0 ) {
116124 info = info - 1 ;
117125 }
118126 /* Transpose output matrices */
119- LAPACKE_cge_trans ( LAPACK_COL_MAJOR , k , m , a_t , lda_t , a , lda );
127+ LAPACKE_cge_trans ( LAPACK_COL_MAJOR , nrowsA , ncolsA , a_t , lda_t , a , lda );
120128 LAPACKE_cge_trans ( LAPACK_COL_MAJOR , m , n , b_t , ldb_t , b , ldb );
121129 /* Release memory and exit */
122130 LAPACKE_free ( b_t );
0 commit comments