FLA_Her2k_external.c File Reference

(r)


Functions

FLA_Error FLA_Her2k_external (FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
void FLA_F2C() fla_her2k_external_f (F_INT *uplo, F_INT *trans, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)

Function Documentation

FLA_Error FLA_Her2k_external ( FLA_Uplo  uplo,
FLA_Trans  trans,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References cblas_cher2k(), cblas_zher2k(), CblasColMajor, cher2k(), FLA_Check_error_level(), FLA_Her2k_check(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), and zher2k().

Referenced by FLA_Her2k(), fla_her2k_external_f(), FLA_Her2k_lh_task(), FLA_Her2k_ln_task(), FLA_Her2k_task(), FLA_Her2k_uh_task(), and FLA_Her2k_un_task().

00036 {
00037   FLA_Datatype datatype;
00038   int          k_AB;
00039   int          m_A, n_A, ldim_A;
00040   int          ldim_B; 
00041   int          m_C, ldim_C;
00042 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00043   CBLAS_ORDER     cblas_order = CblasColMajor;
00044   CBLAS_UPLO      blas_uplo;
00045   CBLAS_TRANSPOSE blas_trans;
00046 #else
00047   char         blas_uplo; 
00048   char         blas_trans;
00049 #endif
00050 
00051   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00052     FLA_Her2k_check( uplo, trans, alpha, A, B, beta, C );
00053 
00054   if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS;
00055 
00056   datatype = FLA_Obj_datatype( A );
00057 
00058   m_A      = FLA_Obj_length( A );
00059   n_A      = FLA_Obj_width( A );
00060   ldim_A   = FLA_Obj_ldim( A );
00061 
00062   ldim_B   = FLA_Obj_ldim( B );
00063 
00064   m_C      = FLA_Obj_length( C );
00065   ldim_C   = FLA_Obj_ldim( C );
00066 
00067   if ( trans == FLA_NO_TRANSPOSE )
00068     k_AB = n_A;
00069   else
00070     k_AB = m_A;
00071 
00072   FLA_Param_map_to_blas_uplo( uplo, &blas_uplo );
00073   FLA_Param_map_to_blas_trans( trans, &blas_trans );
00074 
00075 
00076   switch( datatype ){
00077 
00078   case FLA_COMPLEX:
00079   {
00080     scomplex *buff_A     = ( scomplex * ) FLA_COMPLEX_PTR( A );
00081     scomplex *buff_B     = ( scomplex * ) FLA_COMPLEX_PTR( B );
00082     scomplex *buff_C     = ( scomplex * ) FLA_COMPLEX_PTR( C );
00083     scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha );
00084     float    *buff_beta  = ( float    * ) FLA_FLOAT_PTR( beta );
00085 
00086 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00087     cblas_cher2k( cblas_order,
00088                   blas_uplo,
00089                   blas_trans,
00090                   m_C,
00091                   k_AB,
00092                   buff_alpha,
00093                   buff_A, ldim_A,
00094                   buff_B, ldim_B,
00095                   *buff_beta,
00096                   buff_C, ldim_C );
00097 #else
00098     FLA_C2F( cher2k )( &blas_uplo,
00099                        &blas_trans,
00100                        &m_C,
00101                        &k_AB,
00102                        buff_alpha,
00103                        buff_A, &ldim_A,
00104                        buff_B, &ldim_B,
00105                        buff_beta,
00106                        buff_C, &ldim_C );
00107 #endif
00108     break;
00109   }
00110 
00111   case FLA_DOUBLE_COMPLEX:
00112   {
00113     dcomplex *buff_A     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
00114     dcomplex *buff_B     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B );
00115     dcomplex *buff_C     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C );
00116     dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha );
00117     double   *buff_beta  = ( double   * ) FLA_DOUBLE_PTR( beta );
00118 
00119 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00120     cblas_zher2k( cblas_order,
00121                   blas_uplo,
00122                   blas_trans,
00123                   m_C,
00124                   k_AB,
00125                   buff_alpha,
00126                   buff_A, ldim_A,
00127                   buff_B, ldim_B,
00128                   *buff_beta,
00129                   buff_C, ldim_C );
00130 #else
00131     FLA_C2F( zher2k )( &blas_uplo,
00132                        &blas_trans,
00133                        &m_C,
00134                        &k_AB,
00135                        buff_alpha,
00136                        buff_A, &ldim_A,
00137                        buff_B, &ldim_B,
00138                        buff_beta,
00139                        buff_C, &ldim_C );
00140 #endif
00141     break;
00142   }
00143 
00144   }
00145  
00146   return FLA_SUCCESS;
00147 }

void FLA_F2C() fla_her2k_external_f ( F_INT *  uplo,
F_INT *  trans,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Her2k_external().

00151 {
00152   *IERROR = FLA_Her2k_external( *( ( FLA_Uplo  * ) uplo  ),
00153                                 *( ( FLA_Trans * ) trans ),
00154                                 *( ( FLA_Obj   * ) alpha ),
00155                                 *( ( FLA_Obj   * ) A     ),
00156                                 *( ( FLA_Obj   * ) B     ),
00157                                 *( ( FLA_Obj   * ) beta  ),
00158                                 *( ( FLA_Obj   * ) C     ) );
00159 }


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