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) |
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 }