Functions | |
FLA_Error | FLA_Sylv_unb_external (FLA_Trans transa, FLA_Trans transb, FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale) |
void FLA_F2C() | fla_sylv_unb_external_f (F_INT *transa, F_INT *transb, F_INT *isgn, F_INT *A, F_INT *B, F_INT *C, F_INT *scale, F_INT *IERROR) |
FLA_Error FLA_Sylv_unb_external | ( | FLA_Trans | transa, | |
FLA_Trans | transb, | |||
FLA_Obj | isgn, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | C, | |||
FLA_Obj | scale | |||
) |
References ctrsyl(), dtrsyl(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_set_to_scalar(), FLA_Obj_width(), FLA_ONE, FLA_Param_map_to_blas_trans(), FLA_Sylv_check(), strsyl(), and ztrsyl().
Referenced by FLA_Sylv_blk_external(), FLA_Sylv_nn_task(), FLA_Sylv_nt_task(), FLA_Sylv_task(), FLA_Sylv_tn_task(), FLA_Sylv_tt_task(), and fla_sylv_unb_external_f().
00036 { 00037 FLA_Datatype datatype; 00038 int ldim_A; 00039 int ldim_B; 00040 int m_C, n_C, ldim_C; 00041 int info; 00042 char blas_transa; 00043 char blas_transb; 00044 00045 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00046 FLA_Sylv_check( transa, transb, isgn, A, B, C, scale ); 00047 00048 if ( FLA_Obj_has_zero_dim( A ) ) return FLA_SUCCESS; 00049 if ( FLA_Obj_has_zero_dim( B ) ) return FLA_SUCCESS; 00050 if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS; 00051 00052 datatype = FLA_Obj_datatype( A ); 00053 00054 m_C = FLA_Obj_length( C ); 00055 n_C = FLA_Obj_width( C ); 00056 ldim_C = FLA_Obj_ldim( C ); 00057 00058 ldim_A = FLA_Obj_ldim( A ); 00059 00060 ldim_B = FLA_Obj_ldim( B ); 00061 00062 FLA_Param_map_to_blas_trans( transa, &blas_transa ); 00063 FLA_Param_map_to_blas_trans( transb, &blas_transb ); 00064 00065 00066 switch( datatype ){ 00067 00068 case FLA_FLOAT: 00069 { 00070 int *buff_isgn = ( int * ) FLA_INT_PTR( isgn ); 00071 float *buff_A = ( float * ) FLA_FLOAT_PTR( A ); 00072 float *buff_B = ( float * ) FLA_FLOAT_PTR( B ); 00073 float *buff_C = ( float * ) FLA_FLOAT_PTR( C ); 00074 float *buff_scale = ( float * ) FLA_FLOAT_PTR( scale ); 00075 00076 FLA_C2F( strsyl )( &blas_transa, 00077 &blas_transb, 00078 buff_isgn, 00079 &m_C, 00080 &n_C, 00081 buff_A, &ldim_A, 00082 buff_B, &ldim_B, 00083 buff_C, &ldim_C, 00084 buff_scale, 00085 &info ); 00086 00087 break; 00088 } 00089 00090 case FLA_DOUBLE: 00091 { 00092 int *buff_isgn = ( int * ) FLA_INT_PTR( isgn ); 00093 double *buff_A = ( double * ) FLA_DOUBLE_PTR( A ); 00094 double *buff_B = ( double * ) FLA_DOUBLE_PTR( B ); 00095 double *buff_C = ( double * ) FLA_DOUBLE_PTR( C ); 00096 double *buff_scale = ( double * ) FLA_DOUBLE_PTR( scale ); 00097 00098 FLA_C2F( dtrsyl )( &blas_transa, 00099 &blas_transb, 00100 buff_isgn, 00101 &m_C, 00102 &n_C, 00103 buff_A, &ldim_A, 00104 buff_B, &ldim_B, 00105 buff_C, &ldim_C, 00106 buff_scale, 00107 &info ); 00108 00109 break; 00110 } 00111 00112 case FLA_COMPLEX: 00113 { 00114 int *buff_isgn = ( int * ) FLA_INT_PTR( isgn ); 00115 scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A ); 00116 scomplex *buff_B = ( scomplex * ) FLA_COMPLEX_PTR( B ); 00117 scomplex *buff_C = ( scomplex * ) FLA_COMPLEX_PTR( C ); 00118 float *buff_scale = ( float * ) FLA_COMPLEX_PTR( scale ); 00119 00120 FLA_C2F( ctrsyl )( &blas_transa, 00121 &blas_transb, 00122 buff_isgn, 00123 &m_C, 00124 &n_C, 00125 buff_A, &ldim_A, 00126 buff_B, &ldim_B, 00127 buff_C, &ldim_C, 00128 buff_scale, 00129 &info ); 00130 00131 break; 00132 } 00133 00134 case FLA_DOUBLE_COMPLEX: 00135 { 00136 int *buff_isgn = ( int * ) FLA_INT_PTR( isgn ); 00137 dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A ); 00138 dcomplex *buff_B = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B ); 00139 dcomplex *buff_C = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C ); 00140 double *buff_scale = ( double * ) FLA_DOUBLE_COMPLEX_PTR( scale ); 00141 00142 FLA_C2F( ztrsyl )( &blas_transa, 00143 &blas_transb, 00144 buff_isgn, 00145 &m_C, 00146 &n_C, 00147 buff_A, &ldim_A, 00148 buff_B, &ldim_B, 00149 buff_C, &ldim_C, 00150 buff_scale, 00151 &info ); 00152 00153 break; 00154 } 00155 00156 } 00157 00158 // We don't provide a comprehensive strategy for handing scaling to avoid 00159 // overflow, so we just force the scale argument to 1.0. 00160 FLA_Obj_set_to_scalar( FLA_ONE, scale ); 00161 00162 return info; 00163 }
void FLA_F2C() fla_sylv_unb_external_f | ( | F_INT * | transa, | |
F_INT * | transb, | |||
F_INT * | isgn, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | C, | |||
F_INT * | scale, | |||
F_INT * | IERROR | |||
) |
References FLA_Sylv_unb_external().
00167 { 00168 *IERROR = FLA_Sylv_unb_external( *( ( FLA_Trans * ) transa ), 00169 *( ( FLA_Trans * ) transb ), 00170 *( ( FLA_Obj * ) isgn ), 00171 *( ( FLA_Obj * ) A ), 00172 *( ( FLA_Obj * ) B ), 00173 *( ( FLA_Obj * ) C ), 00174 *( ( FLA_Obj * ) scale ) ); 00175 }