lapack_int LAPACKE_stftri_work( int matrix_order, char transr, char uplo, char diag, lapack_int n, float* a ) { lapack_int info = 0; if( matrix_order == LAPACK_COL_MAJOR ) { /* Call LAPACK function and adjust info */ LAPACK_stftri( &transr, &uplo, &diag, &n, a, &info ); if( info < 0 ) { info = info - 1; } } else if( matrix_order == LAPACK_ROW_MAJOR ) { float* a_t = NULL; /* Allocate memory for temporary array(s) */ a_t = (float*) LAPACKE_malloc( sizeof(float) * ( MAX(1,n) * MAX(2,n+1) ) / 2 ); if( a_t == NULL ) { info = LAPACK_TRANSPOSE_MEMORY_ERROR; goto exit_level_0; } /* Transpose input matrices */ LAPACKE_stf_trans( matrix_order, transr, uplo, diag, n, a, a_t ); /* Call LAPACK function and adjust info */ LAPACK_stftri( &transr, &uplo, &diag, &n, a_t, &info ); if( info < 0 ) { info = info - 1; } /* Transpose output matrices */ LAPACKE_stf_trans( LAPACK_COL_MAJOR, transr, uplo, diag, n, a_t, a ); /* Release memory and exit */ LAPACKE_free( a_t ); exit_level_0: if( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) { LAPACKE_xerbla( "LAPACKE_stftri_work", info ); } } else { info = -1; LAPACKE_xerbla( "LAPACKE_stftri_work", info ); } return info; }
lapack_int LAPACKE_stfsm_work( int matrix_layout, char transr, char side, char uplo, char trans, char diag, lapack_int m, lapack_int n, float alpha, const float* a, float* b, lapack_int ldb ) { lapack_int info = 0; if( matrix_layout == LAPACK_COL_MAJOR ) { /* Call LAPACK function and adjust info */ LAPACK_stfsm( &transr, &side, &uplo, &trans, &diag, &m, &n, &alpha, a, b, &ldb ); if( info < 0 ) { info = info - 1; } } else if( matrix_layout == LAPACK_ROW_MAJOR ) { lapack_int ldb_t = MAX(1,m); float* b_t = NULL; float* a_t = NULL; /* Check leading dimension(s) */ if( ldb < n ) { info = -12; LAPACKE_xerbla( "LAPACKE_stfsm_work", info ); return info; } /* Allocate memory for temporary array(s) */ b_t = (float*)LAPACKE_malloc( sizeof(float) * ldb_t * MAX(1,n) ); if( b_t == NULL ) { info = LAPACK_TRANSPOSE_MEMORY_ERROR; goto exit_level_0; } if( IS_S_NONZERO(alpha) ) { a_t = (float*) LAPACKE_malloc( sizeof(float) * ( MAX(1,n) * MAX(2,n+1) ) / 2 ); if( a_t == NULL ) { info = LAPACK_TRANSPOSE_MEMORY_ERROR; goto exit_level_1; } } /* Transpose input matrices */ if( IS_S_NONZERO(alpha) ) { LAPACKE_sge_trans( matrix_layout, m, n, b, ldb, b_t, ldb_t ); } if( IS_S_NONZERO(alpha) ) { LAPACKE_stf_trans( matrix_layout, transr, uplo, diag, n, a, a_t ); } /* Call LAPACK function and adjust info */ LAPACK_stfsm( &transr, &side, &uplo, &trans, &diag, &m, &n, &alpha, a_t, b_t, &ldb_t ); info = 0; /* LAPACK call is ok! */ /* Transpose output matrices */ LAPACKE_sge_trans( LAPACK_COL_MAJOR, m, n, b_t, ldb_t, b, ldb ); /* Release memory and exit */ if( IS_S_NONZERO(alpha) ) { LAPACKE_free( a_t ); } exit_level_1: LAPACKE_free( b_t ); exit_level_0: if( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) { LAPACKE_xerbla( "LAPACKE_stfsm_work", info ); } } else { info = -1; LAPACKE_xerbla( "LAPACKE_stfsm_work", info ); } return info; }