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) |
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 }
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 }
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 }
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 }
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 }
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 }
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 }