FLASH_LU_incpiv_var2.c File Reference

(r)


Functions

FLA_Error FLASH_LU_incpiv_var2 (FLA_Obj A, FLA_Obj p, FLA_Obj L, dim_t nb_alg)

Function Documentation

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,    &LTL, &LTR,
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( &LTL, /**/ &LTR,       L00, L01, /**/ L02,
00132                                                        L10, L11, /**/ L12,
00133                              /* ************** */  /* ****************** */
00134                                 &LBL, /**/ &LBR,       L20, L21, /**/ L22,
00135                                 FLA_TL );
00136    }
00137    
00138    return FLA_SUCCESS;
00139 }


Generated on Mon Jul 6 05:45:56 2009 for libflame by  doxygen 1.5.9