FLA_LU_piv_unb_var3.c File Reference

(r)


Functions

FLA_Error FLA_LU_piv_unb_var3 (FLA_Obj A, FLA_Obj p)

Function Documentation

FLA_Error FLA_LU_piv_unb_var3 ( FLA_Obj  A,
FLA_Obj  p 
)

References FLA_Apply_pivots(), FLA_Cont_with_1x3_to_1x2(), FLA_Cont_with_3x1_to_2x1(), FLA_Cont_with_3x3_to_2x2(), FLA_Dots_external(), FLA_Gemv_external(), FLA_Iamax_external(), FLA_Inv_scal_external(), FLA_Merge_2x1(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_Obj_width(), 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_Trsm_external(), and FLA_Trsv_external().

00038 {
00039   FLA_Obj ATL,   ATR,      A00,  a01,     A02, 
00040           ABL,   ABR,      a10t, alpha11, a12t,
00041                            A20,  a21,     A22;
00042 
00043   FLA_Obj AL,    AR,       A0,  a1,  A2;
00044 
00045   FLA_Obj pT,              p0,
00046           pB,              pi1,
00047                            p2;
00048 
00049   FLA_Obj AB0, aB1;
00050 
00051   FLA_Part_2x2( A,    &ATL, &ATR,
00052                       &ABL, &ABR,     0, 0, FLA_TL );
00053 
00054   FLA_Part_1x2( A,    &AL,  &AR,      0, FLA_LEFT );
00055 
00056   FLA_Part_2x1( p,    &pT, 
00057                       &pB,            0, FLA_TOP );
00058 
00059   while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) &&
00060           FLA_Obj_width( ATL ) < FLA_Obj_width( A )){
00061 
00062     FLA_Repart_2x2_to_3x3( ATL, /**/ ATR,       &A00,  /**/ &a01,     &A02,
00063                         /* ************* */   /* ************************** */
00064                                                 &a10t, /**/ &alpha11, &a12t,
00065                            ABL, /**/ ABR,       &A20,  /**/ &a21,     &A22,
00066                            1, 1, FLA_BR );
00067 
00068     FLA_Repart_1x2_to_1x3( AL,  /**/ AR,        &A0, /**/ &a1, &A2,
00069                            1, FLA_RIGHT );
00070 
00071     FLA_Repart_2x1_to_3x1( pT,                &p0, 
00072                         /* ** */            /* *** */
00073                                               &pi1, 
00074                            pB,                &p2,        1, FLA_BOTTOM );
00075 
00076     /*------------------------------------------------------------*/
00077 
00078     /* Apply previously computed pivots */
00079     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, p0, a1 );
00080 
00081     /* a01 = trilu( A00 ) \ a01 */ 
00082     FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_UNIT_DIAG, A00, a01 );
00083 
00084     /* alpha11 = alpha11 - a10t * a01 */
00085     FLA_Dots_external( FLA_MINUS_ONE, a10t, a01, FLA_ONE, alpha11 );
00086 
00087     /* a21 = a21 - A20 * a01 */
00088     FLA_Gemv_external( FLA_NO_TRANSPOSE, FLA_MINUS_ONE, A20, a01, FLA_ONE, a21 );
00089 
00090     /* aB1 = / alpha11 \
00091              \  a21    / */
00092     FLA_Merge_2x1( alpha11,
00093                        a21,      &aB1 );
00094 
00095     /* Determine pivot row and pivot */
00096     FLA_Iamax_external( aB1, pi1 );
00097 
00098     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, pi1, aB1 );
00099 
00100     /* a21 = a21 / alpha11 */ 
00101     FLA_Inv_scal_external( alpha11, a21 );
00102 
00103     /* AB0 = / a10t \
00104              \ A20  / */
00105     FLA_Merge_2x1( a10t,
00106                    A20,      &AB0 );
00107 
00108     /* Apply pivots to previous columns */
00109     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, pi1, AB0 );
00110 
00111     /*------------------------------------------------------------*/
00112 
00113     FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR,       A00,  a01,     /**/ A02,
00114                                                      a10t, alpha11, /**/ a12t,
00115                             /* ************** */  /* ************************ */
00116                               &ABL, /**/ &ABR,       A20,  a21,     /**/ A22,
00117                               FLA_TL );
00118 
00119     FLA_Cont_with_1x3_to_1x2( &AL,  /**/ &AR,        A0, a1, /**/ A2,
00120                               FLA_LEFT );
00121 
00122     FLA_Cont_with_3x1_to_2x1( &pT,                p0, 
00123                                                   pi1, 
00124                             /* ** */           /* *** */
00125                               &pB,                p2,     FLA_TOP );
00126 
00127   }
00128 
00129   if ( FLA_Obj_width( ATR ) > 0 )
00130   {
00131     /* Apply pivots to untouched columns */
00132     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, p, ATR );
00133 
00134     /* ATR = trilu( ATL ) \ ATR */ 
00135     FLA_Trsm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, 
00136                        FLA_NO_TRANSPOSE, FLA_UNIT_DIAG,
00137                        FLA_ONE, ATL, ATR );
00138   }
00139 
00140   return FLA_SUCCESS;
00141 }


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