FLA_Sylv_unb_external.c File Reference

(r)


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)

Function Documentation

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 }


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