FLA_SA_LU_blk.c File Reference

(r)


Functions

FLA_Error FLA_SA_LU_blk (FLA_Obj U, FLA_Obj D, FLA_Obj p, FLA_Obj L, dim_t nb_alg)

Function Documentation

FLA_Error FLA_SA_LU_blk ( FLA_Obj  U,
FLA_Obj  D,
FLA_Obj  p,
FLA_Obj  L,
dim_t  nb_alg 
)

References FLA_Cont_with_1x3_to_1x2(), FLA_Cont_with_3x1_to_2x1(), FLA_Cont_with_3x3_to_2x2(), FLA_Gemm_external(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_ONE, FLA_Part_1x2(), FLA_Part_2x1(), FLA_Part_2x2(), FLA_Repart_1x2_to_1x3(), FLA_Repart_2x1_to_3x1(), FLA_Repart_2x2_to_3x3(), FLA_SA_Apply_pivots(), FLA_SA_LU_unb(), and FLA_Trsm_external().

Referenced by FLA_SA_LU_task().

00037 {
00038   FLA_Obj UTL,   UTR,      U00, U01, U02, 
00039           UBL,   UBR,      U10, U11, U12,
00040                            U20, U21, U22;
00041 
00042   FLA_Obj DL,    DR,       D0,  D1,  D2;
00043 
00044   FLA_Obj pT,              p0,
00045           pB,              p1,
00046                            p2;
00047 
00048   FLA_Obj LT,              L0,
00049           LB,              L1,
00050                            L2;
00051 
00052   FLA_Obj L1_sqr, L1_rest;
00053 
00054   dim_t b;
00055 
00056   FLA_Part_2x2( U,    &UTL, &UTR,
00057                       &UBL, &UBR,     0, 0, FLA_TL );
00058 
00059   FLA_Part_1x2( D,    &DL,  &DR,      0, FLA_LEFT );
00060 
00061   FLA_Part_2x1( p,    &pT, 
00062                       &pB,            0, FLA_TOP );
00063 
00064   FLA_Part_2x1( L,    &LT, 
00065                       &LB,            0, FLA_TOP );
00066 
00067   while ( FLA_Obj_length( UTL ) < FLA_Obj_length( U ) )
00068   {
00069     b = min( FLA_Obj_length( UBR ), nb_alg );
00070 
00071     FLA_Repart_2x2_to_3x3( UTL, /**/ UTR,       &U00, /**/ &U01, &U02,
00072                         /* ************* */   /* ******************** */
00073                                                 &U10, /**/ &U11, &U12,
00074                            UBL, /**/ UBR,       &U20, /**/ &U21, &U22,
00075                            b, b, FLA_BR );
00076 
00077     FLA_Repart_1x2_to_1x3( DL,  /**/ DR,        &D0, /**/ &D1, &D2,
00078                            b, FLA_RIGHT );
00079 
00080     FLA_Repart_2x1_to_3x1( pT,                  &p0, 
00081                         /* ** */              /* ** */
00082                                                 &p1, 
00083                            pB,                  &p2,        b, FLA_BOTTOM );
00084 
00085     FLA_Repart_2x1_to_3x1( LT,                  &L0, 
00086                         /* ** */              /* ** */
00087                                                 &L1, 
00088                            LB,                  &L2,        b, FLA_BOTTOM );
00089 
00090     /*------------------------------------------------------------*/
00091 
00092     FLA_Part_1x2( L1,    &L1_sqr, &L1_rest,      b, FLA_LEFT );
00093 
00094 
00095     FLA_SA_LU_unb( U11,
00096                    D1, p1, L1_sqr );
00097 
00098     FLA_SA_Apply_pivots( U12,
00099                          D2, p1 );
00100 
00101     FLA_Trsm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR,
00102                        FLA_NO_TRANSPOSE, FLA_UNIT_DIAG,
00103                        FLA_ONE, L1_sqr, U12 );
00104 
00105     FLA_Gemm_external( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, 
00106                        FLA_MINUS_ONE, D1, U12, FLA_ONE, D2 );
00107 
00108     /*------------------------------------------------------------*/
00109 
00110     FLA_Cont_with_3x3_to_2x2( &UTL, /**/ &UTR,       U00, U01, /**/ U02,
00111                                                      U10, U11, /**/ U12,
00112                             /* ************** */  /* ****************** */
00113                               &UBL, /**/ &UBR,       U20, U21, /**/ U22,
00114                               FLA_TL );
00115 
00116     FLA_Cont_with_1x3_to_1x2( &DL,  /**/ &DR,        D0, D1, /**/ D2,
00117                               FLA_LEFT );
00118 
00119     FLA_Cont_with_3x1_to_2x1( &pT,                   p0, 
00120                                                      p1, 
00121                             /* ** */              /* ** */
00122                               &pB,                   p2,     FLA_TOP );
00123 
00124     FLA_Cont_with_3x1_to_2x1( &LT,                   L0, 
00125                                                      L1, 
00126                             /* ** */              /* ** */
00127                               &LB,                   L2,     FLA_TOP );
00128   }
00129 
00130   return FLA_SUCCESS;
00131 }


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