Functions | |
FLA_Error | FLA_SA_LU_blk (FLA_Obj U, FLA_Obj D, FLA_Obj p, FLA_Obj L, dim_t nb_alg) |
References FLA_Cont_with_1x3_to_1x2(), FLA_Cont_with_3x1_to_2x1(), FLA_Cont_with_3x3_to_2x2(), FLA_Gemm_external(), FLA_MINUS_ONE, FLA_Obj_length(), 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_SA_Apply_pivots(), FLA_SA_LU_unb(), and FLA_Trsm_external().
Referenced by FLA_SA_LU_task().
00037 { 00038 FLA_Obj UTL, UTR, U00, U01, U02, 00039 UBL, UBR, U10, U11, U12, 00040 U20, U21, U22; 00041 00042 FLA_Obj DL, DR, D0, D1, D2; 00043 00044 FLA_Obj pT, p0, 00045 pB, p1, 00046 p2; 00047 00048 FLA_Obj LT, L0, 00049 LB, L1, 00050 L2; 00051 00052 FLA_Obj L1_sqr, L1_rest; 00053 00054 dim_t b; 00055 00056 FLA_Part_2x2( U, &UTL, &UTR, 00057 &UBL, &UBR, 0, 0, FLA_TL ); 00058 00059 FLA_Part_1x2( D, &DL, &DR, 0, FLA_LEFT ); 00060 00061 FLA_Part_2x1( p, &pT, 00062 &pB, 0, FLA_TOP ); 00063 00064 FLA_Part_2x1( L, <, 00065 &LB, 0, FLA_TOP ); 00066 00067 while ( FLA_Obj_length( UTL ) < FLA_Obj_length( U ) ) 00068 { 00069 b = min( FLA_Obj_length( UBR ), nb_alg ); 00070 00071 FLA_Repart_2x2_to_3x3( UTL, /**/ UTR, &U00, /**/ &U01, &U02, 00072 /* ************* */ /* ******************** */ 00073 &U10, /**/ &U11, &U12, 00074 UBL, /**/ UBR, &U20, /**/ &U21, &U22, 00075 b, b, FLA_BR ); 00076 00077 FLA_Repart_1x2_to_1x3( DL, /**/ DR, &D0, /**/ &D1, &D2, 00078 b, FLA_RIGHT ); 00079 00080 FLA_Repart_2x1_to_3x1( pT, &p0, 00081 /* ** */ /* ** */ 00082 &p1, 00083 pB, &p2, b, FLA_BOTTOM ); 00084 00085 FLA_Repart_2x1_to_3x1( LT, &L0, 00086 /* ** */ /* ** */ 00087 &L1, 00088 LB, &L2, b, FLA_BOTTOM ); 00089 00090 /*------------------------------------------------------------*/ 00091 00092 FLA_Part_1x2( L1, &L1_sqr, &L1_rest, b, FLA_LEFT ); 00093 00094 00095 FLA_SA_LU_unb( U11, 00096 D1, p1, L1_sqr ); 00097 00098 FLA_SA_Apply_pivots( U12, 00099 D2, p1 ); 00100 00101 FLA_Trsm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, 00102 FLA_NO_TRANSPOSE, FLA_UNIT_DIAG, 00103 FLA_ONE, L1_sqr, U12 ); 00104 00105 FLA_Gemm_external( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, 00106 FLA_MINUS_ONE, D1, U12, FLA_ONE, D2 ); 00107 00108 /*------------------------------------------------------------*/ 00109 00110 FLA_Cont_with_3x3_to_2x2( &UTL, /**/ &UTR, U00, U01, /**/ U02, 00111 U10, U11, /**/ U12, 00112 /* ************** */ /* ****************** */ 00113 &UBL, /**/ &UBR, U20, U21, /**/ U22, 00114 FLA_TL ); 00115 00116 FLA_Cont_with_1x3_to_1x2( &DL, /**/ &DR, D0, D1, /**/ D2, 00117 FLA_LEFT ); 00118 00119 FLA_Cont_with_3x1_to_2x1( &pT, p0, 00120 p1, 00121 /* ** */ /* ** */ 00122 &pB, p2, FLA_TOP ); 00123 00124 FLA_Cont_with_3x1_to_2x1( <, L0, 00125 L1, 00126 /* ** */ /* ** */ 00127 &LB, L2, FLA_TOP ); 00128 } 00129 00130 return FLA_SUCCESS; 00131 }