|
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;
}
1.7.6.1