libflame  revision_anchor
Functions
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_SA_Apply_pivots()

FLA_Error FLA_SA_Apply_pivots ( FLA_Obj  C,
FLA_Obj  E,
FLA_Obj  p 
)
14 {
15  FLA_Datatype datatype;
16  int m_C, n_C, cs_C;
17  int cs_E;
18  // int rs_C;
19  // int rs_E;
20  int m_p;
21  int i;
22  int* buff_p;
23 
24  if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS;
25 
26  datatype = FLA_Obj_datatype( C );
27 
28  m_C = FLA_Obj_length( C );
29  n_C = FLA_Obj_width( C );
30  cs_C = FLA_Obj_col_stride( C );
31  // rs_C = FLA_Obj_row_stride( C );
32 
33  cs_E = FLA_Obj_col_stride( E );
34  // rs_E = FLA_Obj_row_stride( E );
35 
36  m_p = FLA_Obj_length( p );
37 
38  buff_p = ( int * ) FLA_INT_PTR( p );
39 
40 
41  switch ( datatype ){
42 
43  case FLA_FLOAT:
44  {
45  float* buff_C = ( float * ) FLA_FLOAT_PTR( C );
46  float* buff_E = ( float * ) FLA_FLOAT_PTR( E );
47 
48  for ( i = 0; i < m_p; ++i )
49  {
50  if ( buff_p[ i ] != 0 )
51  bl1_sswap( n_C,
52  buff_C + 0*cs_C + i, cs_C,
53  buff_E + 0*cs_E + buff_p[ i ] - ( m_C - i ), cs_E );
54  }
55  break;
56  }
57 
58  case FLA_DOUBLE:
59  {
60  double* buff_C = ( double * ) FLA_DOUBLE_PTR( C );
61  double* buff_E = ( double * ) FLA_DOUBLE_PTR( E );
62 
63  for ( i = 0; i < m_p; ++i )
64  {
65  if ( buff_p[ i ] != 0 )
66  bl1_dswap( n_C,
67  buff_C + 0*cs_C + i, cs_C,
68  buff_E + 0*cs_E + buff_p[ i ] - ( m_C - i ), cs_E );
69  }
70  break;
71  }
72 
73  case FLA_COMPLEX:
74  {
75  scomplex* buff_C = ( scomplex * ) FLA_COMPLEX_PTR( C );
76  scomplex* buff_E = ( scomplex * ) FLA_COMPLEX_PTR( E );
77 
78  for ( i = 0; i < m_p; ++i )
79  {
80  if ( buff_p[ i ] != 0 )
81  bl1_cswap( n_C,
82  buff_C + 0*cs_C + i, cs_C,
83  buff_E + 0*cs_E + buff_p[ i ] - ( m_C - i ), cs_E );
84  }
85  break;
86  }
87 
88  case FLA_DOUBLE_COMPLEX:
89  {
90  dcomplex* buff_C = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C );
91  dcomplex* buff_E = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( E );
92 
93  for ( i = 0; i < m_p; ++i )
94  {
95  if ( buff_p[ i ] != 0 )
96  bl1_zswap( n_C,
97  buff_C + 0*cs_C + i, cs_C,
98  buff_E + 0*cs_E + buff_p[ i ] - ( m_C - i ), cs_E );
99  }
100  break;
101  }
102 
103  }
104 
105  return FLA_SUCCESS;
106 }
dim_t FLA_Obj_width(FLA_Obj obj)
Definition: FLA_Query.c:123
FLA_Bool FLA_Obj_has_zero_dim(FLA_Obj A)
Definition: FLA_Query.c:400
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition: FLA_Query.c:174
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
int FLA_Datatype
Definition: FLA_type_defs.h:49
int i
Definition: bl1_axmyv2.c:145
void bl1_zswap(int n, dcomplex *x, int incx, dcomplex *y, int incy)
Definition: bl1_swap.c:52
void bl1_dswap(int n, double *x, int incx, double *y, int incy)
Definition: bl1_swap.c:26
void bl1_cswap(int n, scomplex *x, int incx, scomplex *y, int incy)
Definition: bl1_swap.c:39
void bl1_sswap(int n, float *x, int incx, float *y, int incy)
Definition: bl1_swap.c:13
Definition: blis_type_defs.h:138
Definition: blis_type_defs.h:133

References bl1_cswap(), bl1_dswap(), bl1_sswap(), bl1_zswap(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_length(), FLA_Obj_width(), and i.

Referenced by FLA_SA_FS_blk(), and FLA_SA_LU_blk().