Functions | |
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 }