libflame
revision_anchor
|
Functions | |
FLA_Error | FLA_Bidiag_UT_form_U (FLA_Obj A, FLA_Obj T, FLA_Obj U) |
FLA_Error FLA_Bidiag_UT_form_U | ( | FLA_Obj | A, |
FLA_Obj | T, | ||
FLA_Obj | U | ||
) |
References FLA_Bidiag_UT_form_U_check(), FLA_Check_error_level(), FLA_Obj_length(), FLA_Obj_width(), FLA_ONE, FLA_Part_1x2(), FLA_Part_2x2(), FLA_QR_UT_form_Q(), FLA_Set(), and FLA_ZERO.
Referenced by FLA_Svd_uv_unb_var1(), and FLA_Svd_uv_unb_var2().
{ FLA_Uplo uplo; if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING ) FLA_Bidiag_UT_form_U_check( A, T, U ); uplo = ( FLA_Obj_length( A ) >= FLA_Obj_width( A ) ? FLA_UPPER_TRIANGULAR : FLA_LOWER_TRIANGULAR ); if ( uplo == FLA_UPPER_TRIANGULAR ) { FLA_QR_UT_form_Q( A, T, U ); //FLA_Copyr( FLA_LOWER_TRIANGULAR, A, U ); //FLA_QR_UT_form_Q( U, T, U ); /* { FLA_Obj W; FLA_Set_to_identity( U ); //FLA_Set( FLA_ZERO, U ); FLA_Apply_Q_UT_create_workspace( T, U, &W ); FLA_Apply_Q_UT( FLA_LEFT, FLA_NO_TRANSPOSE, FLA_FORWARD, FLA_COLUMNWISE, A, T, W, U ); FLA_Obj_free( &W ); } */ } else // if ( uplo == FLA_LOWER_TRIANGULAR ) { FLA_Obj ATL, ATR, ABL, ABR; FLA_Obj UTL, UTR, UBL, UBR; FLA_Obj TL, TR; FLA_Part_2x2( A, &ATL, &ATR, &ABL, &ABR, 1, 1, FLA_TR ); FLA_Part_2x2( U, &UTL, &UTR, &UBL, &UBR, 1, 1, FLA_TL ); FLA_Part_1x2( T, &TL, &TR, 1, FLA_RIGHT ); FLA_Set( FLA_ONE, UTL ); FLA_Set( FLA_ZERO, UBL ); FLA_Set( FLA_ZERO, UTR ); FLA_QR_UT_form_Q( ABL, TL, UBR ); } return FLA_SUCCESS; }