|
libflame
12600
|
Functions | |
| FLA_Error | FLA_Apply_pivots_unb_external (FLA_Side side, FLA_Trans trans, FLA_Obj p, FLA_Obj A) |
| FLA_Error | FLA_Apply_pivots_ln_unb_ext (FLA_Obj p, FLA_Obj A) |
References FLA_Apply_pivots_unb_external().
Referenced by FLA_Apply_pivots_ln().
{
return FLA_Apply_pivots_unb_external( FLA_LEFT, FLA_NO_TRANSPOSE, p, A );
}
References F77_claswp(), F77_dlaswp(), F77_slaswp(), F77_zlaswp(), FLA_Apply_pivots_check(), FLA_Check_error_level(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_vector_dim(), FLA_Obj_vector_inc(), and FLA_Obj_width().
Referenced by FLA_Apply_pivots_ln_unb_ext().
{
#ifdef FLA_ENABLE_EXTERNAL_LAPACK_INTERFACES
FLA_Datatype datatype;
int n_A, cs_A;
int m_p;
int inc_p;
int* buff_p;
int k1_1, k2_1;
int* pivots_lapack;
int i;
if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
FLA_Apply_pivots_check( side, trans, p, A );
if ( FLA_Obj_has_zero_dim( A ) ) return FLA_SUCCESS;
datatype = FLA_Obj_datatype( A );
n_A = FLA_Obj_width( A );
cs_A = FLA_Obj_col_stride( A );
inc_p = FLA_Obj_vector_inc( p );
m_p = FLA_Obj_vector_dim( p );
buff_p = FLA_INT_PTR( p );
// Use one-based indices for LAPACK.
k1_1 = 1;
k2_1 = m_p;
// Translate FLAME pivot indices to LAPACK-compatible indices. It is
// important to note that this conversion, unlike the one done by
// FLA_Shift_pivots_to(), is NOT in-place, but rather done separately
// in a temporary buffer.
#ifdef FLA_ENABLE_WINDOWS_BUILD
pivots_lapack = ( int * ) _alloca( m_p * sizeof( int ) );
#else
pivots_lapack = ( int * ) alloca( m_p * sizeof( int ) );
#endif
for ( i = 0; i < m_p; i++ )
{
pivots_lapack[ i ] = buff_p[ i ] + i + 1;
}
switch ( datatype ){
case FLA_FLOAT:
{
float* buff_A = ( float * ) FLA_FLOAT_PTR( A );
F77_slaswp( &n_A,
buff_A, &cs_A,
&k1_1,
&k2_1,
pivots_lapack,
&inc_p );
break;
}
case FLA_DOUBLE:
{
double* buff_A = ( double * ) FLA_DOUBLE_PTR( A );
F77_dlaswp( &n_A,
buff_A, &cs_A,
&k1_1,
&k2_1,
pivots_lapack,
&inc_p );
break;
}
case FLA_COMPLEX:
{
scomplex* buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A );
F77_claswp( &n_A,
buff_A, &cs_A,
&k1_1,
&k2_1,
pivots_lapack,
&inc_p );
break;
}
case FLA_DOUBLE_COMPLEX:
{
dcomplex* buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
F77_zlaswp( &n_A,
buff_A, &cs_A,
&k1_1,
&k2_1,
pivots_lapack,
&inc_p );
break;
}
}
#else
FLA_Check_error_code( FLA_EXTERNAL_LAPACK_NOT_IMPLEMENTED );
#endif
return FLA_SUCCESS;
}
1.7.6.1