FLA_Asum_external.c File Reference

(r)


Functions

FLA_Error FLA_Asum_external (FLA_Obj x, FLA_Obj asum_x)
void FLA_F2C() fla_asum_external_f (F_INT *x, F_INT *rho, F_INT *IERROR)

Function Documentation

FLA_Error FLA_Asum_external ( FLA_Obj  x,
FLA_Obj  asum_x 
)

References cblas_dasum(), cblas_dzasum(), cblas_sasum(), cblas_scasum(), dasum(), dzasum(), FLA_Asum_check(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_set_to_scalar(), FLA_Obj_vector_dim(), FLA_ZERO, sasum(), and scasum().

Referenced by FLA_Asum(), fla_asum_external_f(), FLA_Norm1(), and FLA_Norm_inf().

00036 {
00037   FLA_Datatype datatype;
00038   int          num_elem;
00039   int          m_x, inc_x, ldim_x;
00040 
00041   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00042     FLA_Asum_check( x, asum_x );
00043 
00044   if ( FLA_Obj_has_zero_dim( x ) )
00045   {
00046     FLA_Obj_set_to_scalar( FLA_ZERO, asum_x );
00047     return FLA_SUCCESS;
00048   }
00049 
00050   datatype = FLA_Obj_datatype( x );
00051 
00052   m_x      = FLA_Obj_length( x );
00053   ldim_x   = FLA_Obj_ldim( x );
00054 
00055   inc_x    = ( m_x == 1 ? ldim_x : 1 );
00056   num_elem = FLA_Obj_vector_dim( x );
00057 
00058 
00059   switch ( datatype ){
00060 
00061   case FLA_FLOAT:
00062   {
00063     float *buff_x      = ( float * ) FLA_FLOAT_PTR( x );
00064     float *buff_asum_x = ( float * ) FLA_FLOAT_PTR( asum_x );
00065 
00066 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00067     *buff_asum_x = cblas_sasum( num_elem, buff_x, inc_x );
00068 #else
00069     *buff_asum_x = FLA_C2F( sasum ) ( &num_elem, buff_x, &inc_x );
00070 #endif
00071 
00072     break;
00073   }
00074 
00075   case FLA_DOUBLE:
00076   {
00077     double *buff_x      = ( double * ) FLA_DOUBLE_PTR( x );
00078     double *buff_asum_x = ( double * ) FLA_DOUBLE_PTR( asum_x );
00079 
00080 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00081     *buff_asum_x = cblas_dasum( num_elem, buff_x, inc_x );
00082 #else
00083     *buff_asum_x = FLA_C2F( dasum ) ( &num_elem, buff_x, &inc_x );
00084 #endif
00085 
00086     break;
00087   }
00088 
00089   case FLA_COMPLEX:
00090   {
00091     scomplex *buff_x      = ( scomplex * ) FLA_COMPLEX_PTR( x );
00092     float    *buff_asum_x = ( float    * ) FLA_FLOAT_PTR( asum_x );
00093 
00094 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00095     *buff_asum_x = cblas_scasum( num_elem, buff_x, inc_x );
00096 #else
00097     *buff_asum_x = FLA_C2F( scasum ) ( &num_elem, buff_x, &inc_x );
00098 #endif
00099 
00100     break;
00101   }
00102 
00103   case FLA_DOUBLE_COMPLEX:
00104   {
00105     dcomplex *buff_x      = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( x );
00106     double   *buff_asum_x = ( double   * ) FLA_DOUBLE_PTR( asum_x );
00107 
00108 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00109     *buff_asum_x = cblas_dzasum( num_elem, buff_x, inc_x );
00110 #else
00111     *buff_asum_x = FLA_C2F( dzasum ) ( &num_elem, buff_x, &inc_x );
00112 #endif
00113 
00114     break;
00115   }
00116 
00117   }
00118 
00119   return FLA_SUCCESS;
00120 }

void FLA_F2C() fla_asum_external_f ( F_INT *  x,
F_INT *  rho,
F_INT *  IERROR 
)

References FLA_Asum_external().

00125 {
00126   *IERROR = FLA_Asum_external( *( ( FLA_Obj * ) x   ), 
00127                                *( ( FLA_Obj * ) rho ) );
00128 }


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