FLA_LU_piv_unb_var4.c File Reference

(r)


Functions

FLA_Error FLA_LU_piv_unb_var4 (FLA_Obj A, FLA_Obj p)

Function Documentation

FLA_Error FLA_LU_piv_unb_var4 ( FLA_Obj  A,
FLA_Obj  p 
)

References FLA_Apply_pivots(), 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_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     /* alpha11 = alpha11 - a10t * a01 */
00072     FLA_Dots_external( FLA_MINUS_ONE, a10t, a01, FLA_ONE, alpha11 );
00073 
00074     /* a21 = a21 - A20 * a01 */
00075     FLA_Gemv_external( FLA_NO_TRANSPOSE, FLA_MINUS_ONE, A20, a01, FLA_ONE, a21 );
00076 
00077     /* aB1 = / alpha11 \
00078              \  a21    / */
00079     FLA_Merge_2x1( alpha11,
00080                    a21,      &aB1 );
00081 
00082     /* Determine pivot row and pivot */
00083     FLA_Iamax_external( aB1, pi1 );
00084 
00085     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, pi1, aB1 );
00086 
00087     /* AB0 = / a10t \
00088              \ A20  / */
00089     FLA_Merge_2x1( a10t,
00090                    A20,      &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, AB0 );
00099     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, pi1, AB2 );
00100 
00101     /* a21 = a21 / alpha11 */ 
00102     FLA_Inv_scal_external( alpha11, a21 );
00103 
00104     /* a12t = a12t - a10t * A02 */
00105     FLA_Gemv_external( FLA_TRANSPOSE, FLA_MINUS_ONE, A02, a10t, FLA_ONE, a12t );
00106 
00107     /*------------------------------------------------------------*/
00108 
00109     FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR,       A00,  a01,     /**/ A02,
00110                                                      a10t, alpha11, /**/ a12t,
00111                             /* ************** */  /* ************************ */
00112                               &ABL, /**/ &ABR,       A20,  a21,     /**/ A22,
00113                               FLA_TL );
00114 
00115     FLA_Cont_with_3x1_to_2x1( &pT,                p0, 
00116                                                   pi1, 
00117                             /* ** */           /* *** */
00118                               &pB,                p2,     FLA_TOP );
00119 
00120   }
00121 
00122   return FLA_SUCCESS;
00123 }


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