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