Functions | |
FLA_Error | FLASH_LU_incpiv_var2 (FLA_Obj A, FLA_Obj p, FLA_Obj L, dim_t nb_alg) |
References FLA_Cont_with_3x3_to_2x2(), FLA_LU_piv_copy_task(), FLA_Obj_create_conf_to(), FLA_Obj_free_task(), FLA_Obj_length(), FLA_Obj_width(), FLA_Part_2x2(), FLA_Repart_2x2_to_3x3(), FLASH_Queue_get_enabled(), FLASH_SA_LU(), and FLASH_Trsm_piv().
Referenced by FLASH_LU_incpiv().
00036 { 00037 FLA_Obj ATL, ATR, A00, A01, A02, 00038 ABL, ABR, A10, A11, A12, 00039 A20, A21, A22; 00040 00041 FLA_Obj pTL, pTR, p00, p01, p02, 00042 pBL, pBR, p10, p11, p12, 00043 p20, p21, p22; 00044 00045 FLA_Obj LTL, LTR, L00, L01, L02, 00046 LBL, LBR, L10, L11, L12, 00047 L20, L21, L22; 00048 00049 FLA_Obj U; 00050 00051 FLA_Part_2x2( A, &ATL, &ATR, 00052 &ABL, &ABR, 0, 0, FLA_TL ); 00053 00054 FLA_Part_2x2( p, &pTL, &pTR, 00055 &pBL, &pBR, 0, 0, FLA_TL ); 00056 00057 FLA_Part_2x2( L, <L, <R, 00058 &LBL, &LBR, 0, 0, FLA_TL ); 00059 00060 while ( FLA_Obj_length( ATL ) < FLA_Obj_length( A ) && 00061 FLA_Obj_width ( ATL ) < FLA_Obj_width ( A ) ) 00062 { 00063 FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &A01, &A02, 00064 /* ************* */ /* ******************** */ 00065 &A10, /**/ &A11, &A12, 00066 ABL, /**/ ABR, &A20, /**/ &A21, &A22, 00067 1, 1, FLA_BR ); 00068 00069 FLA_Repart_2x2_to_3x3( pTL, /**/ pTR, &p00, /**/ &p01, &p02, 00070 /* ************* */ /* ******************** */ 00071 &p10, /**/ &p11, &p12, 00072 pBL, /**/ pBR, &p20, /**/ &p21, &p22, 00073 1, 1, FLA_BR ); 00074 00075 FLA_Repart_2x2_to_3x3( LTL, /**/ LTR, &L00, /**/ &L01, &L02, 00076 /* ************* */ /* ******************** */ 00077 &L10, /**/ &L11, &L12, 00078 LBL, /**/ LBR, &L20, /**/ &L21, &L22, 00079 1, 1, FLA_BR ); 00080 00081 /*------------------------------------------------------------*/ 00082 00083 FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, *FLASH_OBJ_PTR_AT( A11 ), &U ); 00084 00085 00086 if ( FLASH_Queue_get_enabled( ) ) 00087 { 00088 // Enqueue 00089 ENQUEUE_FLASH_LU_piv_copy( *FLASH_OBJ_PTR_AT( A11 ), 00090 *FLASH_OBJ_PTR_AT( p11 ), 00091 U, NULL ); 00092 } 00093 else 00094 { 00095 // Execute leaf 00096 FLA_LU_piv_copy_task( *FLASH_OBJ_PTR_AT( A11 ), 00097 *FLASH_OBJ_PTR_AT( p11 ), 00098 U, NULL ); 00099 } 00100 00101 FLASH_Trsm_piv( U, A12, p11 ); 00102 00103 if ( FLASH_Queue_get_enabled( ) ) 00104 { 00105 // Enqueue 00106 ENQUEUE_FLASH_Obj_free( U, NULL ); 00107 } 00108 else 00109 { 00110 // Execute leaf 00111 FLA_Obj_free_task( U, NULL ); 00112 } 00113 00114 FLASH_SA_LU( A11, A12, 00115 A21, A22, p21, L21, nb_alg ); 00116 00117 /*------------------------------------------------------------*/ 00118 00119 FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, A01, /**/ A02, 00120 A10, A11, /**/ A12, 00121 /* ************** */ /* ****************** */ 00122 &ABL, /**/ &ABR, A20, A21, /**/ A22, 00123 FLA_TL ); 00124 00125 FLA_Cont_with_3x3_to_2x2( &pTL, /**/ &pTR, p00, p01, /**/ p02, 00126 p10, p11, /**/ p12, 00127 /* ************** */ /* ****************** */ 00128 &pBL, /**/ &pBR, p20, p21, /**/ p22, 00129 FLA_TL ); 00130 00131 FLA_Cont_with_3x3_to_2x2( <L, /**/ <R, L00, L01, /**/ L02, 00132 L10, L11, /**/ L12, 00133 /* ************** */ /* ****************** */ 00134 &LBL, /**/ &LBR, L20, L21, /**/ L22, 00135 FLA_TL ); 00136 } 00137 00138 return FLA_SUCCESS; 00139 }