FLA_LQ_blk_external.c File Reference

(r)


Functions

FLA_Error FLA_LQ_blk_external (FLA_Obj A, FLA_Obj t)
void FLA_F2C() fla_lq_blk_external_f (F_INT *A, F_INT *t, F_INT *IERROR)

Function Documentation

FLA_Error FLA_LQ_blk_external ( FLA_Obj  A,
FLA_Obj  t 
)

References cgelqf(), dgelqf(), FLA_Check_error_level(), FLA_LQ_check(), FLA_Obj_create(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Query_blocksize(), sgelqf(), and zgelqf().

Referenced by fla_lq_blk_external_f().

00036 {
00037   FLA_Datatype datatype;
00038   int          m_A, n_A, ldim_A;
00039   int          lwork, info;
00040   FLA_Obj      work_obj;
00041 
00042   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
00043     FLA_LQ_check( A, t );
00044 
00045   if ( FLA_Obj_has_zero_dim( A ) ) return FLA_SUCCESS;
00046 
00047   datatype = FLA_Obj_datatype( A );
00048 
00049   m_A      = FLA_Obj_length( A );
00050   n_A      = FLA_Obj_width( A );
00051   ldim_A   = FLA_Obj_ldim( A );
00052   lwork    = m_A * FLA_Query_blocksize( datatype, FLA_DIMENSION_MIN );
00053 
00054   FLA_Obj_create( datatype, lwork, 1, &work_obj );
00055 
00056   switch( datatype ){
00057 
00058   case FLA_FLOAT:
00059   {
00060     float *buff_A    = ( float * ) FLA_FLOAT_PTR( A );
00061     float *buff_t    = ( float * ) FLA_FLOAT_PTR( t );
00062     float *buff_work = ( float * ) FLA_FLOAT_PTR( work_obj );
00063 
00064     FLA_C2F( sgelqf )( &m_A,
00065                        &n_A,
00066                        buff_A, &ldim_A,
00067                        buff_t,
00068                        buff_work, &lwork,
00069                        &info );
00070 
00071     break;
00072   }
00073 
00074   case FLA_DOUBLE:
00075   {
00076     double *buff_A    = ( double * ) FLA_DOUBLE_PTR( A );
00077     double *buff_t    = ( double * ) FLA_DOUBLE_PTR( t );
00078     double *buff_work = ( double * ) FLA_DOUBLE_PTR( work_obj );
00079 
00080     FLA_C2F( dgelqf )( &m_A,
00081                        &n_A,
00082                        buff_A, &ldim_A,
00083                        buff_t,
00084                        buff_work, &lwork,
00085                        &info );
00086 
00087     break;
00088   } 
00089 
00090   case FLA_COMPLEX:
00091   {
00092     scomplex *buff_A    = ( scomplex * ) FLA_COMPLEX_PTR( A );
00093     scomplex *buff_t    = ( scomplex * ) FLA_COMPLEX_PTR( t );
00094     scomplex *buff_work = ( scomplex * ) FLA_COMPLEX_PTR( work_obj );
00095 
00096     FLA_C2F( cgelqf )( &m_A,
00097                        &n_A,
00098                        buff_A, &ldim_A,
00099                        buff_t,
00100                        buff_work, &lwork,
00101                        &info );
00102 
00103     break;
00104   } 
00105 
00106   case FLA_DOUBLE_COMPLEX:
00107   {
00108     dcomplex *buff_A    = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
00109     dcomplex *buff_t    = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( t );
00110     dcomplex *buff_work = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( work_obj );
00111 
00112     FLA_C2F( zgelqf )( &m_A,
00113                        &n_A,
00114                        buff_A, &ldim_A,
00115                        buff_t,
00116                        buff_work, &lwork,
00117                        &info );
00118 
00119     break;
00120   } 
00121 
00122   }
00123 
00124   FLA_Obj_free( &work_obj );
00125 
00126   return info;
00127 }

void FLA_F2C() fla_lq_blk_external_f ( F_INT *  A,
F_INT *  t,
F_INT *  IERROR 
)

References FLA_LQ_blk_external().

00131 {
00132   *IERROR = FLA_LQ_blk_external( *( ( FLA_Obj * ) A ), 
00133                                  *( ( FLA_Obj * ) t ) );
00134 }


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