FLA_LU_piv_unb_var5.c File Reference

(r)


Functions

FLA_Error FLA_LU_piv_unb_var5 (FLA_Obj A, FLA_Obj p)

Function Documentation

FLA_Error FLA_LU_piv_unb_var5 ( FLA_Obj  A,
FLA_Obj  p 
)

References FLA_Apply_pivots(), FLA_Cont_with_3x1_to_2x1(), FLA_Cont_with_3x3_to_2x2(), FLA_Ger_external(), FLA_Iamax_external(), FLA_Inv_scal_external(), FLA_Merge_2x1(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_Obj_width(), FLA_Part_2x1(), FLA_Part_2x2(), FLA_Repart_2x1_to_3x1(), and FLA_Repart_2x2_to_3x3().

00038 {
00039   FLA_Obj ATL,   ATR,      A00,  a01,     A02, 
00040           ABL,   ABR,      a10t, alpha11, a12t,
00041                            A20,  a21,     A22;
00042 
00043   FLA_Obj pT,              p0,
00044           pB,              pi1,
00045                            p2;
00046 
00047   FLA_Obj AB0, aB1, AB2;
00048 
00049   FLA_Part_2x2( A,    &ATL, &ATR,
00050                       &ABL, &ABR,     0, 0, FLA_TL );
00051 
00052   FLA_Part_2x1( p,    &pT, 
00053                       &pB,            0, FLA_TOP );
00054 
00055   while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) &&
00056           FLA_Obj_width( ATL ) < FLA_Obj_width( A )){
00057 
00058     FLA_Repart_2x2_to_3x3( ATL, /**/ ATR,       &A00,  /**/ &a01,     &A02,
00059                         /* ************* */   /* ************************** */
00060                                                 &a10t, /**/ &alpha11, &a12t,
00061                            ABL, /**/ ABR,       &A20,  /**/ &a21,     &A22,
00062                            1, 1, FLA_BR );
00063 
00064     FLA_Repart_2x1_to_3x1( pT,                &p0, 
00065                         /* ** */            /* *** */
00066                                               &pi1, 
00067                            pB,                &p2,        1, FLA_BOTTOM );
00068 
00069     /*------------------------------------------------------------*/
00070 
00071     /* aB1 = / alpha11 \
00072              \  a21    / */
00073     FLA_Merge_2x1( alpha11,
00074                        a21,      &aB1 );
00075 
00076     /* Determine pivot row and pivot */
00077     FLA_Iamax_external( aB1, pi1 );
00078 
00079     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, pi1, aB1 );
00080 
00081     /* a21 = a21 / alpha11 */ 
00082     FLA_Inv_scal_external( alpha11, a21 );
00083 
00084     /* AB0 = / a10t \
00085              \ A20  / */
00086     FLA_Merge_2x1( a10t,
00087                    A20,      &AB0 );
00088 
00089     /* Apply pivots to previous columns */
00090     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, pi1, AB0 );
00091 
00092     /* AB2 = / a12t \
00093              \ A22  / */
00094     FLA_Merge_2x1( a12t,
00095                    A22,      &AB2 );
00096 
00097     /* Apply pivots to remaining columns */
00098     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, pi1, AB2 );
00099 
00100     /* A22 = A22 - a21 * a12t */
00101     FLA_Ger_external( FLA_MINUS_ONE, a21, a12t, A22 );
00102 
00103     /*------------------------------------------------------------*/
00104 
00105     FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR,       A00,  a01,     /**/ A02,
00106                                                      a10t, alpha11, /**/ a12t,
00107                             /* ************** */  /* ************************ */
00108                               &ABL, /**/ &ABR,       A20,  a21,     /**/ A22,
00109                               FLA_TL );
00110 
00111     FLA_Cont_with_3x1_to_2x1( &pT,                p0, 
00112                                                   pi1, 
00113                             /* ** */           /* *** */
00114                               &pB,                p2,     FLA_TOP );
00115 
00116   }
00117 
00118   return FLA_SUCCESS;
00119 }


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