libflame  revision_anchor
Functions
FLA_Asum_external.c File Reference

(r)

Functions

FLA_Error FLA_Asum_external (FLA_Obj x, FLA_Obj asum_x)
 

Function Documentation

◆ FLA_Asum_external()

FLA_Error FLA_Asum_external ( FLA_Obj  x,
FLA_Obj  asum_x 
)
14 {
15  FLA_Datatype datatype;
16  FLA_Datatype dt_asum;
17  int num_elem;
18  int inc_x;
19 
20  if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
21  FLA_Asum_check( x, asum_x );
22 
23  if ( FLA_Obj_has_zero_dim( x ) )
24  {
25  FLA_Set( FLA_ZERO, asum_x );
26  return FLA_SUCCESS;
27  }
28 
29  dt_asum = FLA_Obj_datatype( asum_x );
30  datatype = FLA_Obj_datatype( x );
31 
32  inc_x = FLA_Obj_vector_inc( x );
33  num_elem = FLA_Obj_vector_dim( x );
34 
35 
36  switch ( datatype ){
37 
38  case FLA_FLOAT:
39  {
40  float *buff_x = ( float * ) FLA_FLOAT_PTR( x );
41  float *buff_asum_x = ( float * ) FLA_FLOAT_PTR( asum_x );
42 
43  bl1_sasum( num_elem,
44  buff_x, inc_x,
45  buff_asum_x );
46 
47  break;
48  }
49 
50  case FLA_DOUBLE:
51  {
52  double *buff_x = ( double * ) FLA_DOUBLE_PTR( x );
53  double *buff_asum_x = ( double * ) FLA_DOUBLE_PTR( asum_x );
54 
55  bl1_dasum( num_elem,
56  buff_x, inc_x,
57  buff_asum_x );
58 
59  break;
60  }
61 
62  case FLA_COMPLEX:
63  {
64  if ( dt_asum == FLA_FLOAT )
65  {
66  scomplex *buff_x = ( scomplex * ) FLA_COMPLEX_PTR( x );
67  float *buff_asum_x = ( float * ) FLA_FLOAT_PTR( asum_x );
68 
69  bl1_casum( num_elem,
70  buff_x, inc_x,
71  buff_asum_x );
72  }
73  else if ( dt_asum == FLA_COMPLEX )
74  {
75  scomplex *buff_x = ( scomplex * ) FLA_COMPLEX_PTR( x );
76  scomplex *buff_asum_x = ( scomplex * ) FLA_COMPLEX_PTR( asum_x );
77 
78  bl1_casum( num_elem,
79  buff_x, inc_x,
80  &(buff_asum_x->real) );
81  buff_asum_x->imag = 0.0F;
82  }
83 
84  break;
85  }
86 
87  case FLA_DOUBLE_COMPLEX:
88  {
89  if ( dt_asum == FLA_DOUBLE )
90  {
91  dcomplex *buff_x = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( x );
92  double *buff_asum_x = ( double * ) FLA_DOUBLE_PTR( asum_x );
93 
94  bl1_zasum( num_elem,
95  buff_x, inc_x,
96  buff_asum_x );
97  }
98  else if ( dt_asum == FLA_DOUBLE_COMPLEX )
99  {
100  dcomplex *buff_x = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( x );
101  dcomplex *buff_asum_x = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( asum_x );
102 
103  bl1_zasum( num_elem,
104  buff_x, inc_x,
105  &(buff_asum_x->real) );
106  buff_asum_x->imag = 0.0;
107  }
108 
109  break;
110  }
111 
112  }
113 
114  return FLA_SUCCESS;
115 }
FLA_Error FLA_Asum_check(FLA_Obj x, FLA_Obj asum_x)
Definition: FLA_Asum_check.c:13
FLA_Obj FLA_ZERO
Definition: FLA_Init.c:20
FLA_Bool FLA_Obj_has_zero_dim(FLA_Obj A)
Definition: FLA_Query.c:400
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
dim_t FLA_Obj_vector_inc(FLA_Obj obj)
Definition: FLA_Query.c:145
dim_t FLA_Obj_vector_dim(FLA_Obj obj)
Definition: FLA_Query.c:137
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
int FLA_Datatype
Definition: FLA_type_defs.h:49
FLA_Error FLA_Set(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Set.c:13
void bl1_zasum(int n, dcomplex *x, int incx, double *norm)
Definition: bl1_asum.c:46
void bl1_casum(int n, scomplex *x, int incx, float *norm)
Definition: bl1_asum.c:35
void bl1_sasum(int n, float *x, int incx, float *norm)
Definition: bl1_asum.c:13
void bl1_dasum(int n, double *x, int incx, double *norm)
Definition: bl1_asum.c:24
Definition: blis_type_defs.h:138
double real
Definition: blis_type_defs.h:139
double imag
Definition: blis_type_defs.h:139
Definition: blis_type_defs.h:133
float imag
Definition: blis_type_defs.h:134
float real
Definition: blis_type_defs.h:134

References bl1_casum(), bl1_dasum(), bl1_sasum(), bl1_zasum(), FLA_Asum_check(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_vector_dim(), FLA_Obj_vector_inc(), FLA_Set(), FLA_ZERO, scomplex::imag, dcomplex::imag, scomplex::real, and dcomplex::real.

Referenced by FLA_Asum().