FLA_LU_piv_vars.h File Reference

(r)

Go to the source code of this file.

Functions

FLA_Error FLA_LU_piv_blk_var3 (FLA_Obj A, FLA_Obj p, fla_lu_t *cntl)
FLA_Error FLA_LU_piv_blk_var4 (FLA_Obj A, FLA_Obj p, fla_lu_t *cntl)
FLA_Error FLA_LU_piv_blk_var5 (FLA_Obj A, FLA_Obj p, fla_lu_t *cntl)
FLA_Error FLA_LU_piv_unb_var3 (FLA_Obj A, FLA_Obj p)
FLA_Error FLA_LU_piv_unb_var3b (FLA_Obj A, FLA_Obj p)
FLA_Error FLA_LU_piv_unb_var4 (FLA_Obj A, FLA_Obj p)
FLA_Error FLA_LU_piv_unb_var5 (FLA_Obj A, FLA_Obj p)


Function Documentation

FLA_Error FLA_LU_piv_blk_var3 ( FLA_Obj  A,
FLA_Obj  p,
fla_lu_t cntl 
)

References FLA_Apply_pivots(), FLA_Cont_with_1x3_to_1x2(), FLA_Cont_with_3x1_to_2x1(), FLA_Cont_with_3x3_to_2x2(), FLA_Determine_blocksize(), FLA_Gemm_internal(), FLA_LU_piv_internal(), 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_Trsm_internal().

Referenced by FLA_LU_piv_internal().

00038 {
00039   FLA_Obj ATL,   ATR,      A00, A01, A02, 
00040           ABL,   ABR,      A10, A11, A12,
00041                            A20, A21, A22;
00042 
00043   FLA_Obj AL,    AR,       A0,  A1,  A2;
00044 
00045   FLA_Obj pT,              p0,
00046           pB,              p1,
00047                            p2;
00048 
00049   FLA_Obj AB0, AB1;
00050 
00051   dim_t b;
00052 
00053 
00054   FLA_Part_2x2( A,    &ATL, &ATR,
00055                       &ABL, &ABR,     0, 0, FLA_TL );
00056 
00057   FLA_Part_1x2( A,    &AL,  &AR,      0, FLA_LEFT );
00058 
00059   FLA_Part_2x1( p,    &pT, 
00060                       &pB,            0, FLA_TOP );
00061 
00062   while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) &&
00063           FLA_Obj_width( ATL ) < FLA_Obj_width( A )){
00064 
00065     b = FLA_Determine_blocksize( ABR, FLA_BR, FLA_Cntl_blocksize( cntl ) );
00066 
00067     FLA_Repart_2x2_to_3x3( ATL, /**/ ATR,       &A00, /**/ &A01, &A02,
00068                         /* ************* */   /* ******************** */
00069                                                 &A10, /**/ &A11, &A12,
00070                            ABL, /**/ ABR,       &A20, /**/ &A21, &A22,
00071                            b, b, FLA_BR );
00072 
00073     FLA_Repart_1x2_to_1x3( AL,  /**/ AR,        &A0, /**/ &A1, &A2,
00074                            b, FLA_RIGHT );
00075 
00076     FLA_Repart_2x1_to_3x1( pT,                &p0, 
00077                         /* ** */            /* ** */
00078                                               &p1, 
00079                            pB,                &p2,        b, FLA_BOTTOM );
00080 
00081     /*------------------------------------------------------------*/
00082 
00083     /* Apply previously computed pivots */
00084     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, p0, A1 );
00085 
00086     /* A01 = trilu( A00 ) \ A10 */ 
00087     FLA_Trsm_internal( FLA_LEFT, FLA_LOWER_TRIANGULAR, 
00088                        FLA_NO_TRANSPOSE, FLA_UNIT_DIAG,
00089                        FLA_ONE, A00, A01,
00090                        FLA_Cntl_sub_trsm1( cntl ) );
00091 
00092     /* A11 = A11 - A10 * A01 */
00093     FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE,
00094                        FLA_MINUS_ONE, A10, A01, FLA_ONE, A11,
00095                        FLA_Cntl_sub_gemm1( cntl ) );
00096 
00097     /* A21 = A21 - A20 * A01 */
00098     FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE,
00099                        FLA_MINUS_ONE, A20, A01, FLA_ONE, A21,
00100                        FLA_Cntl_sub_gemm2( cntl ) );
00101 
00102     /* AB1 = / A11 \
00103              \ A21 / */
00104     FLA_Merge_2x1( A11,
00105                    A21,      &AB1 );
00106 
00107     /* AB1, p1 = LU_piv( AB1 ) */
00108     FLA_LU_piv_internal( AB1, p1, 
00109                          FLA_Cntl_sub_lu( cntl ) );
00110 
00111     /* AB0 = / A10 \
00112              \ A20 / */
00113     FLA_Merge_2x1( A10,
00114                    A20,      &AB0 );
00115 
00116     /* Apply pivots to previous columns */
00117     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, p1, AB0 );
00118 
00119     /*------------------------------------------------------------*/
00120 
00121     FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR,       A00, A01, /**/ A02,
00122                                                      A10, A11, /**/ A12,
00123                             /* ************** */  /* ****************** */
00124                               &ABL, /**/ &ABR,       A20, A21, /**/ A22,
00125                               FLA_TL );
00126 
00127     FLA_Cont_with_1x3_to_1x2( &AL,  /**/ &AR,        A0, A1, /**/ A2,
00128                               FLA_LEFT );
00129 
00130     FLA_Cont_with_3x1_to_2x1( &pT,                p0, 
00131                                                   p1, 
00132                             /* ** */           /* ** */
00133                               &pB,                p2,     FLA_TOP );
00134 
00135   }
00136 
00137   if ( FLA_Obj_width( ATR ) > 0 )
00138   {
00139     /* Apply pivots to untouched columns */
00140     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, p, ATR );
00141 
00142     /* ATR = trilu( ATL ) \ ATR */ 
00143     FLA_Trsm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, 
00144                        FLA_NO_TRANSPOSE, FLA_UNIT_DIAG,
00145                        FLA_ONE, ATL, ATR );
00146   }
00147 
00148   return FLA_SUCCESS;
00149 }

FLA_Error FLA_LU_piv_blk_var4 ( FLA_Obj  A,
FLA_Obj  p,
fla_lu_t cntl 
)

References FLA_Apply_pivots(), FLA_Cont_with_3x1_to_2x1(), FLA_Cont_with_3x3_to_2x2(), FLA_Determine_blocksize(), FLA_Gemm_internal(), FLA_LU_piv_internal(), 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(), FLA_Repart_2x2_to_3x3(), and FLA_Trsm_internal().

Referenced by FLA_LU_piv_internal().

00038 {
00039   FLA_Obj ATL,   ATR,      A00, A01, A02, 
00040           ABL,   ABR,      A10, A11, A12,
00041                            A20, A21, A22;
00042 
00043   FLA_Obj pT,              p0,
00044           pB,              p1,
00045                            p2;
00046 
00047   FLA_Obj AB0, AB1, AB2;
00048 
00049   dim_t b;
00050 
00051   FLA_Part_2x2( A,    &ATL, &ATR,
00052                       &ABL, &ABR,     0, 0, FLA_TL );
00053 
00054   FLA_Part_2x1( p,    &pT, 
00055                       &pB,            0, FLA_TOP );
00056 
00057   while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) &&
00058           FLA_Obj_width( ATL ) < FLA_Obj_width( A )){
00059 
00060     b = FLA_Determine_blocksize( ABR, FLA_BR, FLA_Cntl_blocksize( cntl ) );
00061 
00062     FLA_Repart_2x2_to_3x3( ATL, /**/ ATR,       &A00, /**/ &A01, &A02,
00063                         /* ************* */   /* ******************** */
00064                                                 &A10, /**/ &A11, &A12,
00065                            ABL, /**/ ABR,       &A20, /**/ &A21, &A22,
00066                            b, b, FLA_BR );
00067 
00068     FLA_Repart_2x1_to_3x1( pT,                &p0, 
00069                         /* ** */            /* ** */
00070                                               &p1, 
00071                            pB,                &p2,        b, FLA_BOTTOM );
00072 
00073     /*------------------------------------------------------------*/
00074 
00075     /* A11 = A11 - A10 * A01 */
00076     FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE,
00077                        FLA_MINUS_ONE, A10, A01, FLA_ONE, A11,
00078                        FLA_Cntl_sub_gemm1( cntl ) );
00079 
00080     /* A21 = A21 - A20 * A01 */
00081     FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE,
00082                        FLA_MINUS_ONE, A20, A01, FLA_ONE, A21,
00083                        FLA_Cntl_sub_gemm3( cntl ) );
00084 
00085     /* AB1 = / A11 \
00086              \ A21 / */
00087     FLA_Merge_2x1( A11,
00088                    A21,      &AB1 );
00089 
00090     /* AB1, p1 = LU_piv( AB1 ) */
00091     FLA_LU_piv_internal( AB1, p1, 
00092                          FLA_Cntl_sub_lu( cntl ) );
00093 
00094     /* AB0 = / A10 \
00095              \ A20 / */
00096     FLA_Merge_2x1( A10,
00097                    A20,      &AB0 );
00098 
00099     /* AB2 = / A12 \
00100              \ A22 / */
00101     FLA_Merge_2x1( A12,
00102                    A22,      &AB2 );
00103 
00104     /* Apply pivots to remaining columns */
00105     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, p1, AB0 );
00106     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, p1, AB2 );
00107 
00108     /* A12 = A12 - A10 * A02 */
00109     FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE,
00110                        FLA_MINUS_ONE, A10, A02, FLA_ONE, A12,
00111                        FLA_Cntl_sub_gemm2( cntl ) );
00112 
00113     /* A12 = trilu( A11 ) \ A12 */ 
00114     FLA_Trsm_internal( FLA_LEFT, FLA_LOWER_TRIANGULAR, 
00115                        FLA_NO_TRANSPOSE, FLA_UNIT_DIAG,
00116                        FLA_ONE, A11, A12,
00117                        FLA_Cntl_sub_trsm1( cntl ) );
00118 
00119     /*------------------------------------------------------------*/
00120 
00121     FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR,       A00, A01, /**/ A02,
00122                                                      A10, A11, /**/ A12,
00123                             /* ************** */  /* ****************** */
00124                               &ABL, /**/ &ABR,       A20, A21, /**/ A22,
00125                               FLA_TL );
00126 
00127     FLA_Cont_with_3x1_to_2x1( &pT,                p0, 
00128                                                   p1, 
00129                             /* ** */           /* ** */
00130                               &pB,                p2,     FLA_TOP );
00131 
00132   }
00133 
00134   return FLA_SUCCESS;
00135 }

FLA_Error FLA_LU_piv_blk_var5 ( FLA_Obj  A,
FLA_Obj  p,
fla_lu_t cntl 
)

References FLA_Apply_pivots(), FLA_Cont_with_3x1_to_2x1(), FLA_Cont_with_3x3_to_2x2(), FLA_Determine_blocksize(), FLA_Gemm_internal(), FLA_LU_piv_internal(), 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(), FLA_Repart_2x2_to_3x3(), and FLA_Trsm_internal().

Referenced by FLA_LU_piv_internal().

00036 {
00037   FLA_Obj ATL,   ATR,      A00, A01, A02, 
00038           ABL,   ABR,      A10, A11, A12,
00039                            A20, A21, A22;
00040 
00041   FLA_Obj pT,              p0,
00042           pB,              p1,
00043                            p2;
00044 
00045   FLA_Obj AB0, AB1, AB2;
00046 
00047   dim_t b;
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     b = FLA_Determine_blocksize( ABR, FLA_BR, FLA_Cntl_blocksize( cntl ) );
00059 
00060     FLA_Repart_2x2_to_3x3( ATL, /**/ ATR,       &A00, /**/ &A01, &A02,
00061                         /* ************* */   /* ******************** */
00062                                                 &A10, /**/ &A11, &A12,
00063                            ABL, /**/ ABR,       &A20, /**/ &A21, &A22,
00064                            b, b, FLA_BR );
00065 
00066     FLA_Repart_2x1_to_3x1( pT,                &p0, 
00067                         /* ** */            /* ** */
00068                                               &p1, 
00069                            pB,                &p2,        b, FLA_BOTTOM );
00070 
00071     /*------------------------------------------------------------*/
00072 
00073     /* AB1 = / A11 \
00074              \ A21 / */
00075     FLA_Merge_2x1( A11,
00076                    A21,      &AB1 );
00077 
00078     /* AB1, p1 = LU_piv( AB1 ) */
00079     FLA_LU_piv_internal( AB1, p1, 
00080                          FLA_Cntl_sub_lu( cntl ) );
00081 
00082     /* AB0 = / A10 \
00083              \ A20 / */
00084     FLA_Merge_2x1( A10,
00085                    A20,      &AB0 );
00086 
00087     /* Apply computed pivots to AB0 */
00088     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, p1, AB0 );
00089 
00090     /* AB2 = / A12 \
00091              \ A22 / */
00092     FLA_Merge_2x1( A12,
00093                    A22,      &AB2 );
00094 
00095     /* Apply computed pivots to AB2 */
00096     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, p1, AB2 );
00097 
00098     /* A12 = trilu( A11 ) \ A12 */ 
00099     FLA_Trsm_internal( FLA_LEFT, FLA_LOWER_TRIANGULAR, 
00100                        FLA_NO_TRANSPOSE, FLA_UNIT_DIAG,
00101                        FLA_ONE, A11, A12,
00102                        FLA_Cntl_sub_trsm1( cntl ) );
00103 
00104     /* A22 = A22 - A21 * A12 */
00105     FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE,
00106                        FLA_MINUS_ONE, A21, A12, FLA_ONE, A22,
00107                        FLA_Cntl_sub_gemm1( cntl ) );
00108 
00109     /*------------------------------------------------------------*/
00110 
00111     FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR,       A00, A01, /**/ A02,
00112                                                      A10, A11, /**/ A12,
00113                             /* ************** */  /* ****************** */
00114                               &ABL, /**/ &ABR,       A20, A21, /**/ A22,
00115                               FLA_TL );
00116 
00117     FLA_Cont_with_3x1_to_2x1( &pT,                p0, 
00118                                                   p1, 
00119                             /* ** */           /* ** */
00120                               &pB,                p2,     FLA_TOP );
00121 
00122   }
00123 
00124   return FLA_SUCCESS;
00125 }

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 }

FLA_Error FLA_LU_piv_unb_var3b ( 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(), 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 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     /* a01 = trilu( A00 ) \ a01 */ 
00072     FLA_Trsv_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_UNIT_DIAG, A00, a01 );
00073 
00074     /* alpha11 = alpha11 - a10t * a01 */
00075     FLA_Dots_external( FLA_MINUS_ONE, a10t, a01, FLA_ONE, alpha11 );
00076 
00077     /* a21 = a21 - A20 * a01 */
00078     FLA_Gemv_external( FLA_NO_TRANSPOSE, FLA_MINUS_ONE, A20, a01, FLA_ONE, a21 );
00079 
00080     /* aB1 = / alpha11 \
00081              \  a21    / */
00082     FLA_Merge_2x1( alpha11,
00083                    a21,      &aB1 );
00084 
00085     /* Determine pivot row and pivot */
00086     FLA_Iamax_external( aB1, pi1 );
00087 
00088     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, pi1, aB1 );
00089 
00090     /* AB0 = / a10t \
00091              \ A20  / */
00092     FLA_Merge_2x1( a10t,
00093                    A20,      &AB0 );
00094 
00095     /* AB2 = / a12t \
00096              \ A22  / */
00097     FLA_Merge_2x1( a12t,
00098                    A22,      &AB2 );
00099 
00100     /* Apply pivots to remaining columns */
00101     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, pi1, AB0 );
00102     FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, pi1, AB2 );
00103 
00104     /* a21 = a21 / alpha11 */ 
00105     FLA_Inv_scal_external( alpha11, a21 );
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   if ( FLA_Obj_width( ATR ) > 0 )
00123   {
00124     /* ATR = trilu( ATL ) \ ATR */ 
00125     FLA_Trsm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, 
00126                        FLA_NO_TRANSPOSE, FLA_UNIT_DIAG,
00127                        FLA_ONE, ATL, ATR );
00128   }
00129 
00130   return FLA_SUCCESS;
00131 }

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 }

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