FLA_Symm_external.c File Reference

(r)


Functions

FLA_Error FLA_Symm_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_symm_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_Symm_external ( FLA_Side  side,
FLA_Uplo  uplo,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  B,
FLA_Obj  beta,
FLA_Obj  C 
)

References cblas_csymm(), cblas_dsymm(), cblas_ssymm(), cblas_zsymm(), CblasColMajor, csymm(), dsymm(), FLA_Check_error_level(), 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(), FLA_Symm_check(), ssymm(), and zsymm().

Referenced by FLA_Symm(), fla_symm_external_f(), FLA_Symm_ll_task(), FLA_Symm_lu_task(), FLA_Symm_rl_task(), FLA_Symm_ru_task(), and FLA_Symm_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_Symm_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_FLOAT:
00072   {
00073     float *buff_A     = ( float * ) FLA_FLOAT_PTR( A );
00074     float *buff_B     = ( float * ) FLA_FLOAT_PTR( B );
00075     float *buff_C     = ( float * ) FLA_FLOAT_PTR( C );
00076     float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha );
00077     float *buff_beta  = ( float * ) FLA_FLOAT_PTR( beta );
00078 
00079 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00080     cblas_ssymm( 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( ssymm )( &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:
00105   {
00106     double *buff_A     = ( double * ) FLA_DOUBLE_PTR( A );
00107     double *buff_B     = ( double * ) FLA_DOUBLE_PTR( B );
00108     double *buff_C     = ( double * ) FLA_DOUBLE_PTR( C );
00109     double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha );
00110     double *buff_beta  = ( double * ) FLA_DOUBLE_PTR( beta );
00111 
00112 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00113     cblas_dsymm( 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( dsymm )( &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   case FLA_COMPLEX:
00138   {
00139     scomplex *buff_A     = ( scomplex * ) FLA_COMPLEX_PTR( A );
00140     scomplex *buff_B     = ( scomplex * ) FLA_COMPLEX_PTR( B );
00141     scomplex *buff_C     = ( scomplex * ) FLA_COMPLEX_PTR( C );
00142     scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha );
00143     scomplex *buff_beta  = ( scomplex * ) FLA_COMPLEX_PTR( beta );
00144 
00145 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00146     cblas_csymm( cblas_order,
00147                  blas_side, 
00148                  blas_uplo, 
00149                  m_C, 
00150                  n_C, 
00151                  buff_alpha,
00152                  buff_A, ldim_A, 
00153                  buff_B, ldim_B,
00154                  buff_beta,  
00155                  buff_C, ldim_C );
00156 #else
00157     FLA_C2F( csymm )( &blas_side, 
00158                       &blas_uplo, 
00159                       &m_C, 
00160                       &n_C, 
00161                       buff_alpha,
00162                       buff_A, &ldim_A, 
00163                       buff_B, &ldim_B,
00164                       buff_beta,  
00165                       buff_C, &ldim_C );
00166 #endif
00167     break;
00168   }
00169 
00170   case FLA_DOUBLE_COMPLEX:
00171   {
00172     dcomplex *buff_A     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
00173     dcomplex *buff_B     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B );
00174     dcomplex *buff_C     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C );
00175     dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha );
00176     dcomplex *buff_beta  = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta );
00177 
00178 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00179     cblas_zsymm( cblas_order,
00180                  blas_side, 
00181                  blas_uplo, 
00182                  m_C, 
00183                  n_C, 
00184                  buff_alpha,
00185                  buff_A, ldim_A, 
00186                  buff_B, ldim_B,
00187                  buff_beta,  
00188                  buff_C, ldim_C );
00189 #else
00190     FLA_C2F( zsymm )( &blas_side, 
00191                       &blas_uplo, 
00192                       &m_C, 
00193                       &n_C, 
00194                       buff_alpha,
00195                       buff_A, &ldim_A, 
00196                       buff_B, &ldim_B,
00197                       buff_beta,  
00198                       buff_C, &ldim_C );
00199 #endif
00200     break;
00201   }
00202 
00203   }
00204   
00205   return FLA_SUCCESS;
00206 }

void FLA_F2C() fla_symm_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_Symm_external().

00210 {
00211   *IERROR = FLA_Symm_external( *( ( FLA_Side * ) side  ),
00212                                *( ( FLA_Uplo * ) uplo  ),
00213                                *( ( FLA_Obj  * ) alpha ),
00214                                *( ( FLA_Obj  * ) A     ),
00215                                *( ( FLA_Obj  * ) B     ),
00216                                *( ( FLA_Obj  * ) beta  ),
00217                                *( ( FLA_Obj  * ) C     ) );
00218 }


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