FLA_Trmv_external.c File Reference

(r)


Functions

FLA_Error FLA_Trmv_external (FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj A, FLA_Obj x)
void FLA_F2C() fla_trmv_external_f (F_INT *uplo, F_INT *transa, F_INT *diag, F_INT *A, F_INT *x, F_INT *IERROR)

Function Documentation

FLA_Error FLA_Trmv_external ( FLA_Uplo  uplo,
FLA_Trans  transa,
FLA_Diag  diag,
FLA_Obj  A,
FLA_Obj  x 
)

References cblas_ctrmv(), cblas_dtrmv(), cblas_strmv(), cblas_ztrmv(), CblasColMajor, ctrmv(), dtrmv(), FLA_Check_error_level(), FLA_Copyt_external(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Param_map_to_blas_diag(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), FLA_Trmv_check(), strmv(), and ztrmv().

Referenced by FLA_Trinv_l_unb_var1(), FLA_Trinv_l_unb_var4(), FLA_Trinv_u_unb_var1(), FLA_Trinv_u_unb_var4(), FLA_Trmm_llh_unb_var3(), FLA_Trmm_llh_unb_var4(), FLA_Trmm_lln_unb_var3(), FLA_Trmm_lln_unb_var4(), FLA_Trmm_llt_unb_var3(), FLA_Trmm_llt_unb_var4(), FLA_Trmm_luh_unb_var3(), FLA_Trmm_luh_unb_var4(), FLA_Trmm_lun_unb_var3(), FLA_Trmm_lun_unb_var4(), FLA_Trmm_lut_unb_var3(), FLA_Trmm_lut_unb_var4(), FLA_Trmm_rlh_unb_var3(), FLA_Trmm_rlh_unb_var4(), FLA_Trmm_rln_unb_var3(), FLA_Trmm_rln_unb_var4(), FLA_Trmm_rlt_unb_var3(), FLA_Trmm_rlt_unb_var4(), FLA_Trmm_ruh_unb_var3(), FLA_Trmm_ruh_unb_var4(), FLA_Trmm_run_unb_var3(), FLA_Trmm_run_unb_var4(), FLA_Trmm_rut_unb_var3(), FLA_Trmm_rut_unb_var4(), FLA_Trmv(), fla_trmv_external_f(), FLA_Trmvsx_external(), FLA_Ttmm_l_unb_var3(), and FLA_Ttmm_u_unb_var3().

00036 {
00037   FLA_Datatype datatype;
00038   int          m_A, ldim_A;
00039   int          m_x, ldim_x, inc_x;
00040 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00041   CBLAS_ORDER     cblas_order = CblasColMajor;
00042   CBLAS_UPLO      blas_uplo;   
00043   CBLAS_TRANSPOSE blas_transa;
00044   CBLAS_DIAG      blas_diag;
00045 #else
00046   char         blas_uplo;
00047   char         blas_transa;
00048   char         blas_diag; 
00049 #endif
00050   FLA_Obj      x_copy;
00051   FLA_Trans    transa_copy;
00052 
00053   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00054     FLA_Trmv_check( uplo, transa, diag, A, x );
00055 
00056   if ( FLA_Obj_has_zero_dim( A ) ) return FLA_SUCCESS;
00057 
00058   datatype = FLA_Obj_datatype( A );
00059 
00060   m_A      = FLA_Obj_length( A );
00061   ldim_A   = FLA_Obj_ldim( A );
00062 
00063   m_x      = FLA_Obj_length( x );
00064   ldim_x   = FLA_Obj_ldim( x );
00065 
00066   inc_x    = ( m_x == 1 ? ldim_x : 1 );
00067 
00068   if ( transa == FLA_CONJ_NO_TRANSPOSE )
00069   {
00070     FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, x, &x_copy );
00071     FLA_Copyt_external( FLA_CONJ_NO_TRANSPOSE, x, x_copy );
00072     transa_copy = FLA_NO_TRANSPOSE;
00073 
00074     m_x      = FLA_Obj_length( x_copy );
00075     ldim_x   = FLA_Obj_ldim( x_copy );
00076     inc_x    = ( m_x == 1 ? ldim_x : 1 );
00077   }
00078   else
00079   {
00080     x_copy      = x;
00081     transa_copy = transa;
00082   }
00083 
00084   FLA_Param_map_to_blas_uplo( uplo, &blas_uplo );
00085   FLA_Param_map_to_blas_trans( transa_copy, &blas_transa );
00086   FLA_Param_map_to_blas_diag( diag, &blas_diag );
00087 
00088 
00089   switch( datatype ){
00090 
00091   case FLA_FLOAT:
00092   {
00093     float *buff_A = ( float * ) FLA_FLOAT_PTR( A );
00094     float *buff_x = ( float * ) FLA_FLOAT_PTR( x );
00095 
00096 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00097     cblas_strmv( cblas_order,
00098                  blas_uplo,
00099                  blas_transa,
00100                  blas_diag,
00101                  m_A,
00102                  buff_A, ldim_A,
00103                  buff_x, inc_x );
00104 #else
00105     FLA_C2F( strmv )( &blas_uplo,
00106                       &blas_transa,
00107                       &blas_diag,
00108                       &m_A,
00109                       buff_A, &ldim_A,
00110                       buff_x, &inc_x );
00111 #endif
00112     break;
00113   }
00114 
00115   case FLA_DOUBLE:
00116   {
00117     double *buff_A = ( double * ) FLA_DOUBLE_PTR( A );
00118     double *buff_x = ( double * ) FLA_DOUBLE_PTR( x );
00119 
00120 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00121     cblas_dtrmv( cblas_order,
00122                  blas_uplo,
00123                  blas_transa,
00124                  blas_diag,
00125                  m_A,
00126                  buff_A, ldim_A,
00127                  buff_x, inc_x );
00128 #else
00129     FLA_C2F( dtrmv )( &blas_uplo,
00130                       &blas_transa,
00131                       &blas_diag,
00132                       &m_A,
00133                       buff_A, &ldim_A,
00134                       buff_x, &inc_x );
00135 #endif
00136     break;
00137   }
00138 
00139   case FLA_COMPLEX:
00140   {
00141     scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A );
00142     scomplex *buff_x = ( scomplex * ) FLA_COMPLEX_PTR( x_copy );
00143 
00144 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00145     cblas_ctrmv( cblas_order,
00146                  blas_uplo,
00147                  blas_transa,
00148                  blas_diag,
00149                  m_A,
00150                  buff_A, ldim_A,
00151                  buff_x, inc_x );
00152 #else
00153     FLA_C2F( ctrmv )( &blas_uplo,
00154                       &blas_transa,
00155                       &blas_diag,
00156                       &m_A,
00157                       buff_A, &ldim_A,
00158                       buff_x, &inc_x );
00159 #endif
00160     break;
00161   }
00162 
00163   case FLA_DOUBLE_COMPLEX:
00164   {
00165     dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
00166     dcomplex *buff_x = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( x_copy );
00167 
00168 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00169     cblas_ztrmv( cblas_order,
00170                  blas_uplo,
00171                  blas_transa,
00172                  blas_diag,
00173                  m_A,
00174                  buff_A, ldim_A,
00175                  buff_x, inc_x );
00176 #else
00177     FLA_C2F( ztrmv )( &blas_uplo,
00178                       &blas_transa,
00179                       &blas_diag,
00180                       &m_A,
00181                       buff_A, &ldim_A,
00182                       buff_x, &inc_x );
00183 #endif
00184     break;
00185   }
00186 
00187   }
00188 
00189   if ( transa == FLA_CONJ_NO_TRANSPOSE )
00190   {
00191     FLA_Copyt_external( FLA_CONJ_NO_TRANSPOSE, x_copy, x );
00192     FLA_Obj_free( &x_copy );
00193   }
00194 
00195   return FLA_SUCCESS;
00196 }

void FLA_F2C() fla_trmv_external_f ( F_INT *  uplo,
F_INT *  transa,
F_INT *  diag,
F_INT *  A,
F_INT *  x,
F_INT *  IERROR 
)

References FLA_Trmv_external().

00200 {
00201   *IERROR = FLA_Trmv_external( *( ( FLA_Uplo  * ) uplo   ), 
00202                                *( ( FLA_Trans * ) transa ),
00203                                *( ( FLA_Diag  * ) diag   ),
00204                                *( ( FLA_Obj   * ) A      ),
00205                                *( ( FLA_Obj   * ) x      ) );
00206 }


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