FLA_Hemm_external.c File Reference

(r)


Functions

FLA_Error FLA_Hemm_external (FLA_Side side, FLA_Uplo uplo, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, FLA_Obj beta, FLA_Obj C)
void FLA_F2C() fla_hemm_external_f (F_INT *side, F_INT *uplo, F_INT *alpha, F_INT *A, F_INT *B, F_INT *beta, F_INT *C, F_INT *IERROR)

Function Documentation

FLA_Error FLA_Hemm_external ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References cblas_chemm(), cblas_zhemm(), CblasColMajor, chemm(), FLA_Check_error_level(), FLA_Hemm_check(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_side(), FLA_Param_map_to_blas_uplo(), and zhemm().

Referenced by FLA_Hemm(), fla_hemm_external_f(), FLA_Hemm_ll_task(), FLA_Hemm_lu_task(), FLA_Hemm_rl_task(), FLA_Hemm_ru_task(), and FLA_Hemm_task().

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

void FLA_F2C() fla_hemm_external_f ( F_INT *  side,
F_INT *  uplo,
F_INT *  alpha,
F_INT *  A,
F_INT *  B,
F_INT *  beta,
F_INT *  C,
F_INT *  IERROR 
)

References FLA_Hemm_external().

00144 {
00145   *IERROR = FLA_Hemm_external( *( ( FLA_Side * ) side  ),
00146                                *( ( FLA_Uplo * ) uplo  ),
00147                                *( ( FLA_Obj  * ) alpha ),
00148                                *( ( FLA_Obj  * ) A     ),
00149                                *( ( FLA_Obj  * ) B     ),
00150                                *( ( FLA_Obj  * ) beta  ),
00151                                *( ( FLA_Obj  * ) C     ) );
00152 }


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