@@ -42,6 +42,8 @@ lapack_int LAPACKE_clarfb_work( int matrix_layout, char side, char trans,
4242{
4343 lapack_int info = 0 ;
4444 lapack_int nrows_v , ncols_v ;
45+ lapack_logical left , col , forward ;
46+ char uplo ;
4547 lapack_int ldc_t , ldt_t , ldv_t ;
4648 lapack_complex_float * v_t = NULL , * t_t = NULL , * c_t = NULL ;
4749 if ( matrix_layout == LAPACK_COL_MAJOR ) {
@@ -52,16 +54,14 @@ lapack_int LAPACKE_clarfb_work( int matrix_layout, char side, char trans,
5254 info = info - 1 ;
5355 }
5456 } else if ( matrix_layout == LAPACK_ROW_MAJOR ) {
55- nrows_v = ( LAPACKE_lsame ( storev , 'c' ) &&
56- LAPACKE_lsame ( side , 'l' ) ) ? m :
57- ( ( LAPACKE_lsame ( storev , 'c' ) &&
58- LAPACKE_lsame ( side , 'r' ) ) ? n :
59- ( LAPACKE_lsame ( storev , 'r' ) ? k : 1 ) );
60- ncols_v = LAPACKE_lsame ( storev , 'c' ) ? k :
61- ( ( LAPACKE_lsame ( storev , 'r' ) &&
62- LAPACKE_lsame ( side , 'l' ) ) ? m :
63- ( ( LAPACKE_lsame ( storev , 'r' ) &&
64- LAPACKE_lsame ( side , 'r' ) ) ? n : 1 ) );
57+ left = LAPACKE_lsame ( side , 'l' );
58+ col = LAPACKE_lsame ( storev , 'c' );
59+ forward = LAPACKE_lsame ( direct , 'f' );
60+
61+ nrows_v = ( col && left ) ? m : ( ( col && !left ) ? n : ( !col ? k : 1 ) );
62+ ncols_v = ( !col && left ) ? m : ( ( !col && !left ) ? n : ( col ? k : 1 ) );
63+ uplo = ( ( left && col ) || !( left || col ) ) ? 'l' : 'u' ;
64+
6565 ldc_t = MAX (1 ,m );
6666 ldt_t = MAX (1 ,k );
6767 ldv_t = MAX (1 ,nrows_v );
@@ -81,6 +81,11 @@ lapack_int LAPACKE_clarfb_work( int matrix_layout, char side, char trans,
8181 LAPACKE_xerbla ( "LAPACKE_clarfb_work" , info );
8282 return info ;
8383 }
84+ if ( !forward && ( col && k > nrows_v ) || ( !col && k > ncols_v )) {
85+ info = -8 ;
86+ LAPACKE_xerbla ( "LAPACKE_clarfb_work" , info );
87+ return info ;
88+ }
8489 /* Allocate memory for temporary array(s) */
8590 v_t = (lapack_complex_float * )
8691 LAPACKE_malloc ( sizeof (lapack_complex_float ) *
@@ -102,36 +107,8 @@ lapack_int LAPACKE_clarfb_work( int matrix_layout, char side, char trans,
102107 goto exit_level_2 ;
103108 }
104109 /* Transpose input matrices */
105- if ( LAPACKE_lsame ( storev , 'c' ) && LAPACKE_lsame ( direct , 'f' ) ) {
106- LAPACKE_ctr_trans ( matrix_layout , 'l' , 'u' , k , v , ldv , v_t , ldv_t );
107- LAPACKE_cge_trans ( matrix_layout , nrows_v - k , ncols_v , & v [k * ldv ], ldv ,
108- & v_t [k ], ldv_t );
109- } else if ( LAPACKE_lsame ( storev , 'c' ) &&
110- LAPACKE_lsame ( direct , 'b' ) ) {
111- if ( k > nrows_v ) {
112- LAPACKE_xerbla ( "LAPACKE_clarfb_work" , -8 );
113- return -8 ;
114- }
115- LAPACKE_ctr_trans ( matrix_layout , 'u' , 'u' , k , & v [(nrows_v - k )* ldv ],
116- ldv , & v_t [nrows_v - k ], ldv_t );
117- LAPACKE_cge_trans ( matrix_layout , nrows_v - k , ncols_v , v , ldv , v_t ,
118- ldv_t );
119- } else if ( LAPACKE_lsame ( storev , 'r' ) &&
120- LAPACKE_lsame ( direct , 'f' ) ) {
121- LAPACKE_ctr_trans ( matrix_layout , 'u' , 'u' , k , v , ldv , v_t , ldv_t );
122- LAPACKE_cge_trans ( matrix_layout , nrows_v , ncols_v - k , & v [k ], ldv ,
123- & v_t [k * ldv_t ], ldv_t );
124- } else if ( LAPACKE_lsame ( storev , 'r' ) &&
125- LAPACKE_lsame ( direct , 'b' ) ) {
126- if ( k > ncols_v ) {
127- LAPACKE_xerbla ( "LAPACKE_clarfb_work" , -8 );
128- return -8 ;
129- }
130- LAPACKE_ctr_trans ( matrix_layout , 'l' , 'u' , k , & v [ncols_v - k ], ldv ,
131- & v_t [(ncols_v - k )* ldv_t ], ldv_t );
132- LAPACKE_cge_trans ( matrix_layout , nrows_v , ncols_v - k , v , ldv , v_t ,
133- ldv_t );
134- }
110+ LAPACKE_ctz_trans ( matrix_layout , direct , uplo , 'u' , nrows_v , ncols_v ,
111+ v , ldv , v_t , ldv_t );
135112 LAPACKE_cge_trans ( matrix_layout , k , k , t , ldt , t_t , ldt_t );
136113 LAPACKE_cge_trans ( matrix_layout , m , n , c , ldc , c_t , ldc_t );
137114 /* Call LAPACK function and adjust info */
0 commit comments