FLA_SA_Apply_pivots.c File Reference

(r)


Functions

FLA_Error FLA_SA_Apply_pivots (FLA_Obj C, FLA_Obj E, FLA_Obj p)

Function Documentation

FLA_Error FLA_SA_Apply_pivots ( FLA_Obj  C,
FLA_Obj  E,
FLA_Obj  p 
)

References cblas_cswap(), cblas_dswap(), cblas_sswap(), cblas_zswap(), cswap(), dswap(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), sswap(), and zswap().

Referenced by FLA_SA_FS_blk(), and FLA_SA_LU_blk().

00036 {
00037   FLA_Datatype datatype;
00038   int          m_C, n_C, ldim_C;
00039   int          m_E,      ldim_E;
00040   int          m_p;
00041   int          i;
00042   int*         buff_p;
00043 
00044   if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS;
00045 
00046   datatype = FLA_Obj_datatype( C );
00047 
00048   m_C    = FLA_Obj_length( C );
00049   n_C    = FLA_Obj_width( C );
00050   ldim_C = FLA_Obj_ldim( C );
00051 
00052   m_E    = FLA_Obj_length( E );
00053   ldim_E = FLA_Obj_ldim( E );
00054 
00055   m_p    = FLA_Obj_length( p );
00056   
00057   buff_p = ( int * ) FLA_INT_PTR( p );
00058 
00059 
00060   switch ( datatype ){
00061 
00062   case FLA_FLOAT:
00063   {
00064     float* buff_C = ( float * ) FLA_FLOAT_PTR( C );
00065     float* buff_E = ( float * ) FLA_FLOAT_PTR( E );
00066 
00067     for ( i = 0; i < m_p; ++i )
00068     {
00069       if ( buff_p[ i ] != 0 ) 
00070 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00071         cblas_sswap( n_C, 
00072                      buff_C + 0*ldim_C + i,                         ldim_C, 
00073                      buff_E + 0*ldim_E + buff_p[ i ] - ( m_C - i ), ldim_E );
00074 #else
00075         FLA_C2F( sswap ) ( &n_C, 
00076                            buff_C + 0*ldim_C + i,                         &ldim_C, 
00077                            buff_E + 0*ldim_E + buff_p[ i ] - ( m_C - i ), &ldim_E );
00078 #endif
00079     }
00080     break;
00081   }
00082 
00083   case FLA_DOUBLE:
00084   {
00085     double* buff_C = ( double * ) FLA_DOUBLE_PTR( C );
00086     double* buff_E = ( double * ) FLA_DOUBLE_PTR( E );
00087 
00088     for ( i = 0; i < m_p; ++i )
00089     {
00090       if ( buff_p[ i ] != 0 ) 
00091 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00092         cblas_dswap( n_C, 
00093                      buff_C + 0*ldim_C + i,                         ldim_C, 
00094                      buff_E + 0*ldim_E + buff_p[ i ] - ( m_C - i ), ldim_E );
00095 #else
00096         FLA_C2F( dswap ) ( &n_C, 
00097                            buff_C + 0*ldim_C + i,                         &ldim_C, 
00098                            buff_E + 0*ldim_E + buff_p[ i ] - ( m_C - i ), &ldim_E );
00099 #endif
00100     }
00101     break;
00102   }
00103 
00104   case FLA_COMPLEX:
00105   {
00106     scomplex* buff_C = ( scomplex * ) FLA_COMPLEX_PTR( C );
00107     scomplex* buff_E = ( scomplex * ) FLA_COMPLEX_PTR( E );
00108 
00109     for ( i = 0; i < m_p; ++i )
00110     {
00111       if ( buff_p[ i ] != 0 ) 
00112 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00113         cblas_cswap( n_C, 
00114                      buff_C + 0*ldim_C + i,                         ldim_C, 
00115                      buff_E + 0*ldim_E + buff_p[ i ] - ( m_C - i ), ldim_E );
00116 #else
00117         FLA_C2F( cswap ) ( &n_C, 
00118                            buff_C + 0*ldim_C + i,                         &ldim_C, 
00119                            buff_E + 0*ldim_E + buff_p[ i ] - ( m_C - i ), &ldim_E );
00120 #endif
00121     }
00122     break;
00123   }
00124 
00125   case FLA_DOUBLE_COMPLEX:
00126   {
00127     dcomplex* buff_C = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C );
00128     dcomplex* buff_E = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( E );
00129 
00130     for ( i = 0; i < m_p; ++i )
00131     {
00132       if ( buff_p[ i ] != 0 ) 
00133 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00134         cblas_zswap( n_C, 
00135                      buff_C + 0*ldim_C + i,                         ldim_C, 
00136                      buff_E + 0*ldim_E + buff_p[ i ] - ( m_C - i ), ldim_E );
00137 #else
00138         FLA_C2F( zswap ) ( &n_C, 
00139                            buff_C + 0*ldim_C + i,                         &ldim_C, 
00140                            buff_E + 0*ldim_E + buff_p[ i ] - ( m_C - i ), &ldim_E );
00141 #endif
00142     }
00143     break;
00144   }
00145 
00146   }
00147 
00148   return FLA_SUCCESS;
00149 }


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