Functions | |
FLA_Error | FLA_SA_FS_blk (FLA_Obj L, FLA_Obj D, FLA_Obj p, FLA_Obj C, FLA_Obj E, dim_t nb_alg) |
References FLA_Cont_with_1x3_to_1x2(), FLA_Cont_with_3x1_to_2x1(), FLA_Gemm_external(), FLA_MINUS_ONE, FLA_Obj_length(), FLA_ONE, FLA_Part_1x2(), FLA_Part_2x1(), FLA_Repart_1x2_to_1x3(), FLA_Repart_2x1_to_3x1(), FLA_SA_Apply_pivots(), and FLA_Trsm_external().
Referenced by FLA_SA_FS_task(), and FLASH_FS_incpiv_aux2().
00038 { 00039 FLA_Obj LT, L0, 00040 LB, L1, 00041 L2; 00042 00043 FLA_Obj DL, DR, D0, D1, D2; 00044 00045 FLA_Obj pT, p0, 00046 pB, p1, 00047 p2; 00048 00049 FLA_Obj CT, C0, 00050 CB, C1, 00051 C2; 00052 00053 FLA_Obj L1_sqr, L1_rest; 00054 00055 dim_t b; 00056 00057 FLA_Part_2x1( L, <, 00058 &LB, 0, FLA_TOP ); 00059 00060 FLA_Part_1x2( D, &DL, &DR, 0, FLA_LEFT ); 00061 00062 FLA_Part_2x1( p, &pT, 00063 &pB, 0, FLA_TOP ); 00064 00065 FLA_Part_2x1( C, &CT, 00066 &CB, 0, FLA_TOP ); 00067 00068 while ( FLA_Obj_length( LT ) < FLA_Obj_length( L ) ) 00069 { 00070 b = min( FLA_Obj_length( LB ), nb_alg ); 00071 00072 FLA_Repart_2x1_to_3x1( LT, &L0, 00073 /* ** */ /* ** */ 00074 &L1, 00075 LB, &L2, b, FLA_BOTTOM ); 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( CT, &C0, 00086 /* ** */ /* ** */ 00087 &C1, 00088 CB, &C2, b, FLA_BOTTOM ); 00089 00090 /*------------------------------------------------------------*/ 00091 00092 FLA_Part_1x2( L1, &L1_sqr, &L1_rest, b, FLA_LEFT ); 00093 00094 00095 FLA_SA_Apply_pivots( C1, 00096 E, p1 ); 00097 00098 FLA_Trsm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, 00099 FLA_NO_TRANSPOSE, FLA_UNIT_DIAG, 00100 FLA_ONE, L1_sqr, C1 ); 00101 00102 FLA_Gemm_external( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, 00103 FLA_MINUS_ONE, D1, C1, FLA_ONE, E ); 00104 00105 /*------------------------------------------------------------*/ 00106 00107 FLA_Cont_with_3x1_to_2x1( <, L0, 00108 L1, 00109 /* ** */ /* ** */ 00110 &LB, L2, FLA_TOP ); 00111 00112 FLA_Cont_with_1x3_to_1x2( &DL, /**/ &DR, D0, D1, /**/ D2, 00113 FLA_LEFT ); 00114 00115 FLA_Cont_with_3x1_to_2x1( &pT, p0, 00116 p1, 00117 /* ** */ /* ** */ 00118 &pB, p2, FLA_TOP ); 00119 00120 FLA_Cont_with_3x1_to_2x1( &CT, C0, 00121 C1, 00122 /* ** */ /* ** */ 00123 &CB, C2, FLA_TOP ); 00124 } 00125 00126 return FLA_SUCCESS; 00127 }