FLA_Apply_Q_UT_UD_lhc_blk_var2.c File Reference

(r)


Functions

FLA_Error FLA_Apply_Q_UT_UD_lhc_blk_var2 (FLA_Obj D, FLA_Obj T, FLA_Obj W1, FLA_Obj C, FLA_Obj E, fla_apqutud_t *cntl)

Function Documentation

FLA_Error FLA_Apply_Q_UT_UD_lhc_blk_var2 ( FLA_Obj  D,
FLA_Obj  T,
FLA_Obj  W1,
FLA_Obj  C,
FLA_Obj  E,
fla_apqutud_t cntl 
)

References FLA_Apply_Q_UT_UD_internal(), FLA_Cont_with_3x1_to_2x1(), FLA_Determine_blocksize(), FLA_Obj_length(), FLA_Part_2x1(), and FLA_Repart_2x1_to_3x1().

Referenced by FLA_Apply_Q_UT_UD_lhc().

00037 {
00038   FLA_Obj DT,              D0,
00039           DB,              D1,
00040                            D2;
00041 
00042   FLA_Obj TT,              T0,
00043           TB,              T1,
00044                            T2;
00045 
00046   FLA_Obj ET,              E0,
00047           EB,              E1,
00048                            E2;
00049 
00050   dim_t b;
00051 
00052   FLA_Part_2x1( D,    &DT, 
00053                       &DB,            0, FLA_TOP );
00054 
00055   FLA_Part_2x1( T,    &TT, 
00056                       &TB,            0, FLA_TOP );
00057 
00058   FLA_Part_2x1( E,    &ET, 
00059                       &EB,            0, FLA_TOP );
00060 
00061   while ( FLA_Obj_length( DT ) < FLA_Obj_length( D ) ){
00062 
00063     b = FLA_Determine_blocksize( DB, FLA_BOTTOM, FLA_Cntl_blocksize( cntl ) );
00064 
00065     FLA_Repart_2x1_to_3x1( DT,                &D0, 
00066                         /* ** */            /* ** */
00067                                               &D1, 
00068                            DB,                &D2,        b, FLA_BOTTOM );
00069 
00070     FLA_Repart_2x1_to_3x1( TT,                &T0, 
00071                         /* ** */            /* ** */
00072                                               &T1, 
00073                            TB,                &T2,        b, FLA_BOTTOM );
00074 
00075     FLA_Repart_2x1_to_3x1( ET,                &E0, 
00076                         /* ** */            /* ** */
00077                                               &E1, 
00078                            EB,                &E2,        b, FLA_BOTTOM );
00079 
00080     /*------------------------------------------------------------*/
00081 
00082     /*
00083         / C  \ = Q^H / C  \
00084         \ E1 /       \ E1 /
00085                  where Q is formed from D1 and T1.
00086     */
00087 
00088     FLA_Apply_Q_UT_UD_internal( FLA_LEFT, FLA_CONJ_TRANSPOSE, FLA_COLUMNWISE,
00089                                 D1, T1, W1, C,
00090                                             E1, FLA_Cntl_sub_apqutud( cntl ) );
00091 
00092     /*------------------------------------------------------------*/
00093 
00094     FLA_Cont_with_3x1_to_2x1( &DT,                D0, 
00095                                                   D1, 
00096                             /* ** */           /* ** */
00097                               &DB,                D2,     FLA_TOP );
00098 
00099     FLA_Cont_with_3x1_to_2x1( &TT,                T0, 
00100                                                   T1, 
00101                             /* ** */           /* ** */
00102                               &TB,                T2,     FLA_TOP );
00103 
00104     FLA_Cont_with_3x1_to_2x1( &ET,                E0, 
00105                                                   E1, 
00106                             /* ** */           /* ** */
00107                               &EB,                E2,     FLA_TOP );
00108   }
00109 
00110   return FLA_SUCCESS;
00111 }


Generated on Mon Jul 6 05:45:57 2009 for libflame by  doxygen 1.5.9